:root{
  --jf-bg:#f4f8f6;
  --jf-bg-2:#ecfdf5;
  --jf-panel:#ffffff;
  --jf-panel-soft:#f8fffb;
  --jf-text:#10201a;
  --jf-muted:#60736b;
  --jf-line:#d9eee6;
  --jf-line-2:#c3e7da;
  --jf-green:#10b981;
  --jf-green-dark:#047857;
  --jf-green-deep:#064e3b;
  --jf-emerald:#00c98b;
  --jf-navy:#213448;
  --jf-navy-2:#16293b;
  --jf-red:#ef4444;
  --jf-yellow:#f59e0b;
  --jf-blue:#0ea5e9;
  --jf-radius:22px;
  --jf-shadow:0 16px 38px rgba(16,32,26,.10);
  --jf-shadow-soft:0 8px 22px rgba(16,32,26,.08);
  --jf-font:Inter,ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Arial,sans-serif;
}
*{box-sizing:border-box}
html{scroll-behavior:smooth}
html,body{min-height:100%}
body{
  margin:0;
  color:var(--jf-text);
  font-family:var(--jf-font);
  background:
    radial-gradient(circle at 18% 0%, rgba(16,185,129,.16), transparent 28rem),
    radial-gradient(circle at 88% 22%, rgba(20,184,166,.14), transparent 24rem),
    linear-gradient(180deg,#f7fbf9 0%, #f4f8f6 45%, #eff7f3 100%);
  font-size:15px;
}
a{color:inherit;text-decoration:none}
button,input,select,textarea{font:inherit}
button{border:0}
.app-layout{min-height:100vh;display:flex;flex-direction:column}
.jf-navbar{
  position:sticky;top:0;z-index:50;
  min-height:76px;
  background:linear-gradient(90deg,#0aa66d 0%, #0fbf83 45%, #079766 100%);
  color:white;
  border-bottom:1px solid rgba(255,255,255,.18);
  box-shadow:0 12px 30px rgba(4,120,87,.18);
}
.jf-navbar::before{content:"";position:absolute;inset:0;background:radial-gradient(circle at 25% 0%,rgba(255,255,255,.24),transparent 18rem);pointer-events:none}
.nav-inner{position:relative;width:min(1180px,calc(100% - 28px));margin:0 auto;display:flex;align-items:center;justify-content:space-between;gap:18px;padding:10px 0}
.brand{display:flex;align-items:center;gap:12px;min-width:180px}
.brand-mark{width:54px;height:54px;border-radius:18px;background:rgba(255,255,255,.15);border:1px solid rgba(255,255,255,.24);display:grid;place-items:center;box-shadow:inset 0 1px 0 rgba(255,255,255,.22)}
.brand-jf{font-weight:950;font-size:1.45rem;line-height:.85;letter-spacing:-.08em;display:block}
.brand-wifi{font-size:.74rem;letter-spacing:.08em;font-weight:900;display:block;margin-top:2px}
.brand-copy{display:grid;line-height:1.08}
.brand-title{font-weight:950;font-size:1.06rem;letter-spacing:-.03em}
.brand-subtitle{font-size:.75rem;font-weight:800;opacity:.85;letter-spacing:.06em;text-transform:uppercase}
.nav-menu{display:flex;align-items:center;gap:8px;flex-wrap:wrap;justify-content:center}
.nav-link{display:inline-flex;align-items:center;gap:7px;padding:10px 12px;border-radius:999px;font-weight:850;font-size:.88rem;border:1px solid transparent;color:rgba(255,255,255,.92)}
.nav-link:hover,.nav-link.active{background:rgba(255,255,255,.16);border-color:rgba(255,255,255,.22);color:white}
.user-menu{display:flex;align-items:center;gap:10px;min-width:190px;justify-content:flex-end}
.user-pill{display:flex;align-items:center;gap:10px;padding:8px 10px;border-radius:999px;background:rgba(255,255,255,.13);border:1px solid rgba(255,255,255,.2)}
.avatar{width:34px;height:34px;border-radius:50%;display:grid;place-items:center;background:#0b4534;color:#dcfff2;font-weight:950;border:1px solid rgba(255,255,255,.22)}
.user-name{font-weight:950;font-size:.88rem;line-height:1.1}.user-role{font-size:.72rem;opacity:.82;font-weight:800}
.logout-btn{display:inline-flex;align-items:center;justify-content:center;gap:7px;border-radius:999px;padding:9px 12px;background:rgba(6,78,59,.25);color:#fff;font-weight:900;border:1px solid rgba(255,255,255,.18);cursor:pointer}
.logout-btn:hover{background:rgba(6,78,59,.42)}
.page{width:min(1180px,calc(100% - 28px));margin:0 auto;padding:20px 0 44px;flex:1}
.alert{padding:13px 15px;border-radius:18px;margin:12px 0 16px;border:1px solid #b7ead8;background:#e8fff5;color:#07543a;font-weight:750;box-shadow:var(--jf-shadow-soft)}
.hero{position:relative;overflow:hidden;background:linear-gradient(135deg,#fff 0%, #f6fffb 54%, #eafff6 100%);border:1px solid var(--jf-line);border-top:5px solid var(--jf-green);border-radius:28px;padding:22px;box-shadow:var(--jf-shadow);margin:6px 0 18px}
.hero::after{content:"";position:absolute;right:-70px;top:-90px;width:240px;height:240px;border-radius:50%;background:rgba(16,185,129,.11);pointer-events:none}
.hero-row{position:relative;display:flex;align-items:flex-start;justify-content:space-between;gap:18px;z-index:1}
.eyebrow{display:inline-flex;align-items:center;gap:7px;color:var(--jf-green-dark);font-size:.78rem;font-weight:950;letter-spacing:.1em;text-transform:uppercase;margin-bottom:7px}
h1{margin:0;font-size:clamp(1.8rem,3.8vw,3.15rem);line-height:.97;letter-spacing:-.07em;color:#0b2018}
.lead{margin:10px 0 0;color:var(--jf-muted);line-height:1.55;max-width:760px;font-weight:620}
.actions{display:flex;gap:10px;flex-wrap:wrap;align-items:center;justify-content:flex-end}
.btn-jf,.btn-soft,.btn-dark,.btn-danger-soft{display:inline-flex;align-items:center;justify-content:center;gap:8px;border-radius:14px;padding:11px 14px;font-weight:950;min-height:42px;cursor:pointer;transition:.15s ease;white-space:nowrap;border:1px solid transparent}
.btn-jf{background:linear-gradient(135deg,var(--jf-green),#22d389);color:white;box-shadow:0 12px 26px rgba(16,185,129,.26)}
.btn-jf:hover{transform:translateY(-1px);box-shadow:0 16px 30px rgba(16,185,129,.30)}
.btn-soft{background:#eefcf6;color:#07543a;border-color:#caeee0}.btn-soft:hover{background:#ddfaee}
.btn-dark{background:var(--jf-navy);color:white}.btn-dark:hover{background:var(--jf-navy-2)}
.btn-danger-soft{background:#fff0f0;color:#b91c1c;border-color:#fecaca}.btn-danger-soft:hover{background:#ffe3e3}
.management-panel{background:#fff;border:1px solid var(--jf-line);border-radius:26px;padding:14px;box-shadow:var(--jf-shadow);margin:16px auto 18px;max-width:980px}
.panel-header{display:flex;justify-content:space-between;gap:14px;align-items:center;margin-bottom:12px;padding:0 4px}
.panel-title{display:flex;align-items:center;gap:10px;font-weight:950}.panel-title small{display:block;color:var(--jf-muted);font-weight:800;margin-top:1px}
.module-grid{display:grid;grid-template-columns:repeat(5,minmax(0,1fr));gap:10px}
.module{border:1px solid var(--jf-line-2);background:linear-gradient(180deg,#fff,#fbfffd);border-radius:18px;padding:12px;min-height:116px;display:flex;flex-direction:column;gap:9px;box-shadow:var(--jf-shadow-soft)}
.module h3{margin:0 0 3px;font-size:.84rem;text-transform:uppercase;letter-spacing:.06em;color:var(--jf-green-dark);display:flex;align-items:center;gap:6px}.module .btn-jf,.module .btn-dark,.module .btn-soft{width:100%;min-height:34px;padding:8px 10px;border-radius:11px;font-size:.79rem}.module .btn-dark{background:#22384d}
.status-chip{display:inline-flex;align-items:center;gap:7px;padding:8px 11px;border-radius:999px;background:#e9fff5;border:1px solid #c2f3df;color:#05764f;font-weight:950;font-size:.78rem;white-space:nowrap}.status-dot{width:8px;height:8px;border-radius:50%;background:var(--jf-green);box-shadow:0 0 0 5px rgba(16,185,129,.14)}
.grid{display:grid;gap:16px}.grid.stats{grid-template-columns:repeat(4,minmax(0,1fr));margin:16px 0}.grid.two{grid-template-columns:minmax(0,1fr) minmax(0,1fr)}.grid.three{grid-template-columns:repeat(3,minmax(0,1fr))}
.card{background:var(--jf-panel);border:1px solid var(--jf-line);border-radius:24px;padding:18px;box-shadow:var(--jf-shadow-soft)}
.stat{position:relative;overflow:hidden;min-height:126px;background:linear-gradient(135deg,#fff 0%, #f7fffb 60%, #edfff6 100%)}.stat::after{content:"";position:absolute;right:-32px;top:-32px;width:94px;height:94px;border-radius:50%;background:rgba(16,185,129,.12)}
.stat-icon{width:42px;height:42px;border-radius:15px;display:grid;place-items:center;background:#e6fff4;color:var(--jf-green-dark);font-weight:950;border:1px solid #c7f1df}.stat-label{color:var(--jf-muted);font-size:.9rem;font-weight:800;margin-top:10px}.stat-value{font-size:2.25rem;font-weight:1000;letter-spacing:-.07em;margin-top:4px;color:#082018}
.card-header{display:flex;justify-content:space-between;align-items:center;gap:12px;margin-bottom:14px}.card-title{font-weight:1000;font-size:1.08rem;letter-spacing:-.03em;color:#10201a}.small-muted{color:var(--jf-muted);font-size:.88rem;font-weight:650}
.table-wrap{overflow-x:auto;border-radius:17px;border:1px solid #e4f1ec;background:#fff}table{width:100%;border-collapse:separate;border-spacing:0}th,td{padding:13px 14px;text-align:left;border-bottom:1px solid #edf4f1;vertical-align:top}th{background:#f6fbf9;color:#5a7168;font-size:.74rem;text-transform:uppercase;letter-spacing:.08em;font-weight:950}tr:last-child td{border-bottom:0}tbody tr:hover td{background:#fbfffd}.td-main{font-weight:950;color:#0d241b}
.badge{display:inline-flex;align-items:center;gap:6px;border-radius:999px;padding:5px 10px;font-size:.75rem;font-weight:950;border:1px solid transparent;white-space:nowrap}.badge-ok{background:#e7fff3;color:#047857;border-color:#baefd8}.badge-red{background:#fff1f1;color:#bd1f1f;border-color:#fecaca}.badge-warn{background:#fff8e8;color:#a16207;border-color:#fde68a}.badge-blue{background:#eaf7ff;color:#0369a1;border-color:#bae6fd}
.empty-state{padding:28px 18px;text-align:center;color:var(--jf-muted);font-weight:750;background:linear-gradient(180deg,#fff,#fbfffd)}
.form-card{max-width:960px;margin:auto}.form-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:14px}.form-row{margin-bottom:14px}.form-row label{display:flex;align-items:center;gap:7px;font-weight:950;margin-bottom:7px;color:#10201a}.form-control,.form-select,textarea,input[type="text"],input[type="email"],input[type="password"],input[type="number"],select{width:100%;border-radius:14px;border:1px solid #dce9e4;background:#fbfefd;color:#11231b;padding:12px 13px;outline:none;transition:.12s ease}textarea{min-height:130px;resize:vertical}.form-control:focus,.form-select:focus,textarea:focus,input:focus,select:focus{border-color:#4ade80;box-shadow:0 0 0 4px rgba(16,185,129,.12);background:#fff}.helptext,.form-text{color:var(--jf-muted);font-size:.82rem;display:block;margin-top:5px}.errorlist{list-style:none;margin:8px 0 0;padding:10px 12px;background:#fff1f1;color:#b91c1c;border:1px solid #fecaca;border-radius:12px;font-weight:800}
.searchbar{display:flex;gap:10px;margin-bottom:14px}.searchbar input{flex:1}.json,pre.json{white-space:pre-wrap;word-break:break-word;color:#153329;background:#f6fbf9;border:1px solid #dff0e9;padding:14px;border-radius:16px;font-size:.9rem;line-height:1.45}
.login-page{min-height:100vh;display:grid;place-items:center;padding:22px;background:radial-gradient(circle at top,#ccfbe5 0,transparent 28rem),linear-gradient(135deg,#f6fffb,#eefaf5)}.login-card{width:min(470px,100%);padding:26px}.login-mark{width:78px;height:78px;border-radius:24px;display:grid;place-items:center;margin:0 auto 14px;color:white;font-weight:1000;font-size:1.8rem;background:linear-gradient(135deg,#0fbf83,#047857);box-shadow:0 18px 34px rgba(16,185,129,.28)}
.mobile-title{display:none}.footer-note{text-align:center;color:var(--jf-muted);font-size:.82rem;font-weight:750;margin-top:24px}.only-mobile{display:none}
@media(max-width:1120px){.module-grid{grid-template-columns:repeat(3,minmax(0,1fr))}.nav-inner{width:min(100% - 20px,1180px)}.user-menu{min-width:auto}.brand-copy{display:none}}
@media(max-width:860px){.jf-navbar{position:relative}.nav-inner{align-items:flex-start;flex-wrap:wrap;padding:10px 0}.brand{min-width:auto}.nav-menu{order:3;width:100%;justify-content:flex-start;overflow-x:auto;padding-bottom:2px;flex-wrap:nowrap}.nav-link{white-space:nowrap}.user-pill .user-role{display:none}.logout-btn span{display:none}.hero-row,.topbar{flex-direction:column}.actions{justify-content:flex-start}.module-grid,.grid.stats,.grid.two,.grid.three{grid-template-columns:1fr}.management-panel{border-radius:22px}.page{padding-top:14px}.form-grid{grid-template-columns:1fr}.searchbar{flex-direction:column}.card{padding:15px}.hero{padding:18px}.mobile-title{display:block}.desktop-title{display:none}}
@media(max-width:520px){body{font-size:14px}.nav-link{font-size:.82rem;padding:9px 10px}.brand-mark{width:46px;height:46px}.user-name{display:none}.page{width:min(100% - 16px,1180px)}h1{font-size:2rem}.module{min-height:auto}.btn-jf,.btn-soft,.btn-dark,.btn-danger-soft{width:100%}.actions{width:100%}.card-header{align-items:flex-start;flex-direction:column}.stat{min-height:112px}.stat-value{font-size:2rem}th,td{padding:11px 10px}.only-mobile{display:inline}}

/* V7 Clientes WiFi / Bloqueos */
.compact-hero{margin-top:10px}
.client-console{background:linear-gradient(135deg,#ffffff 0%,#f6fffb 70%,#eafff6 100%);border:1px solid var(--jf-line);border-radius:26px;padding:18px;margin:16px 0;box-shadow:var(--jf-shadow-soft)}
.client-console-head{display:flex;justify-content:space-between;align-items:flex-start;gap:16px;margin-bottom:14px}.client-console-head h2{margin:0;font-size:clamp(1.45rem,2.5vw,2.25rem);line-height:1;letter-spacing:-.06em}.client-console-head p{margin:8px 0 0;color:var(--jf-muted);font-weight:650;max-width:760px}.sync-pill{display:inline-flex;align-items:center;gap:8px;border-radius:999px;background:#e8fff5;border:1px solid #bff0db;color:#047857;font-weight:950;padding:10px 13px;white-space:nowrap}
.client-searchbar{display:flex;gap:10px;align-items:center;margin:14px 0}.search-input-wrap{position:relative;flex:1}.search-input-wrap span{position:absolute;left:13px;top:50%;transform:translateY(-50%);color:#059669;font-weight:950}.search-input-wrap input{padding-left:39px;width:100%;border-radius:16px;border:1px solid #cfe9df;background:#fff;min-height:46px;font-weight:750}.client-tabs{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:10px}.client-tabs a{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:12px 14px;border-radius:16px;background:#f7fffb;border:1px solid #d8f0e7;font-weight:950;color:#0b3d2e}.client-tabs a:hover{background:#eafff6;border-color:#a7e9cf;transform:translateY(-1px)}.client-tabs strong{font-size:1.25rem;color:#047857}.client-card{margin:16px 0}.smart-table table{min-width:880px}.row-blocked td{background:#fffdf5}.row-blocked:hover td{background:#fff8e8!important}.mac-chip{display:inline-flex;align-items:center;border-radius:999px;background:#f1f7f4;border:1px solid #dbece4;color:#3b5148;font-size:.78rem;font-weight:900;padding:4px 8px;margin-top:4px;letter-spacing:.03em}.mac-chip.danger{background:#fff1f1;border-color:#fecaca;color:#b91c1c}.btn-mini{display:inline-flex;align-items:center;justify-content:center;border-radius:12px;min-height:34px;padding:8px 11px;font-weight:950;cursor:pointer;white-space:nowrap;border:1px solid transparent}.btn-block{background:#fff1f1;color:#b91c1c;border-color:#fecaca}.btn-block:hover{background:#ffe3e3}.btn-unblock{background:#e7fff3;color:#047857;border-color:#baefd8}.btn-unblock:hover{background:#d6ffeb}.client-card form{margin:0}.client-card .badge + .badge{margin-top:5px}.table-action-cell{min-width:120px}
@media(max-width:860px){.client-console-head{flex-direction:column}.client-searchbar{flex-direction:column;align-items:stretch}.client-tabs{grid-template-columns:1fr}.sync-pill{width:100%;justify-content:center}.smart-table table{min-width:760px}}
@media(max-width:520px){.client-console{padding:14px;border-radius:22px}.client-tabs a{padding:11px 12px}.client-console-head h2{font-size:1.55rem}.btn-mini{width:100%}}
