/* portal.css — ECODRILL-APPS sobre el ECODRILL Enterprise Design System v1.0.0
   Requiere tokens.css (var(--ec-*)) cargado ANTES.
   Piel de las maquetas login/portal/admin traducida a clases + tokens.
   SPA + CSS puro + claro/oscuro via [data-theme] + mobile-first. */

@font-face{
  font-family:'Geist';
  src:url('/fonts/geist-var-latin.woff2') format('woff2');
  font-weight:300 800;font-style:normal;font-display:swap;
}
@font-face{
  font-family:'Geist Mono';
  src:url('/fonts/geist-mono-var-latin.woff2') format('woff2');
  font-weight:400 700;font-style:normal;font-display:swap;
}

/* ── Tokens de app (tints de las maquetas, compuestos de tokens --ec-*) ── */
:root{
  --tint-accent:var(--ec-selected);
  --tint-danger:var(--ec-danger-50);   --fg-danger:var(--ec-danger-700);
  --tint-success:var(--ec-success-50); --fg-success:var(--ec-success-700);
  --tint-warning:var(--ec-warning-50); --fg-warning:var(--ec-warning-700);
  --tint-info:var(--ec-info-50);       --fg-info:var(--ec-info-700);
  --panel-marca:var(--ec-secondary);
}
[data-theme="dark"]{
  --tint-danger:var(--ec-danger-900);   --fg-danger:var(--ec-danger-300);
  --tint-success:var(--ec-success-900); --fg-success:var(--ec-success-300);
  --tint-warning:var(--ec-warning-900); --fg-warning:var(--ec-warning-300);
  --tint-info:var(--ec-info-900);       --fg-info:var(--ec-info-300);
  --panel-marca:var(--ec-neutral-900);
}

/* ── Base ── */
*{margin:0;padding:0;box-sizing:border-box;-webkit-tap-highlight-color:transparent}
html{-webkit-text-size-adjust:100%}
body{
  font-family:var(--ec-font-sans);background:var(--ec-bg);color:var(--ec-text);
  font-size:15px;line-height:1.55;min-height:100vh;
  transition:background var(--ec-dur-base) var(--ec-ease-standard),color var(--ec-dur-base) var(--ec-ease-standard);
}
h1,h2,h3,h4{line-height:1.2;font-weight:700;letter-spacing:-0.015em}
a{color:var(--ec-accent-strong);text-decoration:none}
a:hover{text-decoration:underline}
img{max-width:100%}
:focus-visible{outline:2px solid var(--ec-focus);outline-offset:2px}
::placeholder{color:var(--ec-text-3)}
.hidden{display:none!important}
.mono{font-family:var(--ec-font-mono);font-variant-numeric:tabular-nums}
@media(prefers-reduced-motion:reduce){*,*::before,*::after{animation:none!important;transition:none!important}}
@keyframes ecspin{to{transform:rotate(360deg)}}
@keyframes ecfade{from{opacity:0}to{opacity:1}}
@keyframes ecpop{from{opacity:0;transform:scale(.96)}to{opacity:1;transform:scale(1)}}
@keyframes ecslidein{from{transform:translateX(24px);opacity:0}to{transform:translateX(0);opacity:1}}
@keyframes ecup{from{opacity:0;transform:translate(-50%,10px)}to{opacity:1;transform:translate(-50%,0)}}

/* ── Iconos (sprite Phosphor duotone inline) ── */
.ic{width:18px;height:18px;fill:currentColor;flex:none;display:inline-block;vertical-align:-3px}
.ic-sm{width:15px;height:15px}
.ic-lg{width:22px;height:22px}
.ic-xl{width:32px;height:32px}

/* ── Botones ── */
.btn{
  display:inline-flex;align-items:center;justify-content:center;gap:8px;
  font-family:inherit;font-size:14px;font-weight:600;min-height:44px;padding:0 var(--ec-space-4);
  background:var(--ec-accent);color:var(--ec-on-accent);border:1px solid transparent;
  border-radius:var(--ec-radius-md);cursor:pointer;text-decoration:none;
  transition:filter var(--ec-dur-fast) var(--ec-ease-standard),background var(--ec-dur-fast) var(--ec-ease-standard);
}
.btn:hover{filter:brightness(.96);text-decoration:none}
.btn:disabled{opacity:.5;cursor:not-allowed}
.btn-block{width:100%}
.btn-outline{background:var(--ec-surface);color:var(--ec-text);border-color:var(--ec-border-strong)}
.btn-outline:hover{background:var(--ec-hover);filter:none}
.btn-ghost{background:transparent;color:var(--ec-text-2)}
.btn-ghost:hover{background:var(--ec-hover);filter:none;color:var(--ec-text)}
.btn-danger{background:var(--ec-danger);color:#fff}
.btn-sm{min-height:36px;padding:0 var(--ec-space-3);font-size:13px}
.btn-icon{width:40px;min-height:40px;padding:0;background:var(--ec-bg-subtle);border:1px solid var(--ec-border);border-radius:var(--ec-radius-md);color:var(--ec-accent-strong);cursor:pointer;display:inline-flex;align-items:center;justify-content:center}
.btn-icon:hover{background:var(--ec-hover)}
.spinner{width:17px;height:17px;border:2px solid rgba(0,0,0,.25);border-top-color:var(--ec-on-accent);border-radius:50%;animation:ecspin .7s linear infinite}

/* Toggle de tema: el icono cambia con [data-theme] */
.icon-luna{display:none}
[data-theme="dark"] .icon-sol{display:none}
[data-theme="dark"] .icon-luna{display:inline-block}

/* ── Formularios ── */
.fg{margin-bottom:15px}
.fg label{display:block;font-size:13px;font-weight:600;margin-bottom:7px;color:var(--ec-text)}
.fg .entre{display:flex;align-items:center;justify-content:space-between;margin-bottom:7px}
.fg .entre label{margin:0}
.input-wrap{
  display:flex;align-items:center;gap:9px;min-height:44px;padding:0 13px;
  background:var(--ec-surface);border:1px solid var(--ec-border-strong);border-radius:var(--ec-radius-md);
  color:var(--ec-text-3);transition:border-color var(--ec-dur-fast) var(--ec-ease-standard);
}
.input-wrap:focus-within{border-color:var(--ec-accent-strong)}
.input-wrap input,.input-wrap select{flex:1;border:none;outline:none;background:transparent;color:var(--ec-text);font-family:inherit;font-size:16px;min-width:0;height:42px}
.input-wrap select option{background:var(--ec-surface);color:var(--ec-text)}
.btn-ojo{border:none;background:transparent;color:var(--ec-text-3);cursor:pointer;display:flex;padding:6px;min-width:32px;justify-content:center}
.btn-ojo:hover{color:var(--ec-text)}
.err,.ok-msg{display:none;align-items:flex-start;gap:10px;border-radius:var(--ec-radius-sm);padding:11px 13px;font-size:13px;line-height:1.4;margin-bottom:16px}
.err{background:var(--tint-danger);border:1px solid var(--ec-danger);color:var(--fg-danger)}
.ok-msg{background:var(--tint-success);border:1px solid var(--ec-success);color:var(--fg-success)}
.err .ic,.ok-msg .ic{margin-top:1px}
.nota{font-size:12px;color:var(--ec-text-3);line-height:1.5}

/* Checkbox custom (remember) */
.chk{display:flex;align-items:center;gap:9px;font-size:13.5px;color:var(--ec-text-2);cursor:pointer;user-select:none}
.chk .caja{width:20px;height:20px;flex:none;border-radius:5px;border:1.5px solid var(--ec-border-strong);background:transparent;cursor:pointer;display:flex;align-items:center;justify-content:center;padding:0;color:var(--ec-on-accent)}
.chk .caja.on{background:var(--ec-accent);border-color:var(--ec-accent)}
.chk .caja .ic{display:none;width:13px;height:13px}
.chk .caja.on .ic{display:block}

/* Checklist de contraseña en vivo */
.pwd-reqs{list-style:none;margin:10px 0 16px;display:grid;gap:5px}
.pwd-reqs li{font-size:12.5px;color:var(--ec-text-3);display:flex;align-items:center;gap:8px;transition:color var(--ec-dur-fast)}
.pwd-reqs li::before{content:'○';font-size:13px}
.pwd-reqs li.cumple{color:var(--ec-success)}
.pwd-reqs li.cumple::before{content:'●'}

/* ── LOGIN: pantalla dividida ── */
.login-split{min-height:100vh;display:flex;background:var(--ec-bg);color:var(--ec-text)}
.panel-marca{
  flex:1.15;position:relative;background:var(--panel-marca);color:#F1EFEC;
  padding:48px 56px;display:flex;flex-direction:column;justify-content:space-between;overflow:hidden;min-width:0;
}
.panel-marca .grid-deco{position:absolute;inset:0;opacity:.10;background-image:linear-gradient(var(--ec-accent) 1px,transparent 1px),linear-gradient(90deg,var(--ec-accent) 1px,transparent 1px);background-size:32px 32px}
.panel-marca .halo{position:absolute;right:-80px;top:-60px;width:360px;height:360px;border-radius:50%;background:radial-gradient(circle,rgba(210,217,96,.22),transparent 70%)}
.marca-chip{position:relative;display:flex;align-items:center;gap:12px}
.marca-chip img{height:40px;width:auto;max-width:190px;object-fit:contain}
.marca-chip .titulo{font-size:18px;font-weight:700;letter-spacing:-.01em;line-height:1}
.marca-chip .sub{font-size:10px;font-weight:500;letter-spacing:.14em;text-transform:uppercase;color:rgba(241,239,236,.6);margin-top:3px}
.panel-marca h1{font-size:clamp(30px,3.4vw,40px);line-height:1.08;font-weight:700;letter-spacing:-.025em;margin:0 0 18px;max-width:14ch;position:relative}
.panel-marca .lede{font-size:15.5px;line-height:1.6;color:rgba(241,239,236,.72);max-width:44ch;position:relative}
.panel-marca .pie-marca{position:relative;font-size:11px;color:rgba(241,239,236,.45);letter-spacing:.04em}
.panel-form{flex:1;display:flex;align-items:center;justify-content:center;padding:40px;position:relative;min-width:0}
.panel-form .caja-form{width:100%;max-width:380px}
.panel-form h2{font-size:26px;margin:0 0 6px}
.panel-form .sub{font-size:14.5px;color:var(--ec-text-2);margin:0 0 28px}
.theme-fixed{position:absolute;top:24px;right:24px}
.pie-legal{font-size:12px;color:var(--ec-text-3);text-align:center;line-height:1.6;margin:26px 0 0}

/* ── Vistas auth de tarjeta (olvide / reset / cambiar) ── */
.auth-wrap{min-height:100vh;display:flex;flex-direction:column;align-items:center;padding:48px 16px 32px}
.auth-brand{display:flex;flex-direction:column;align-items:center;gap:10px;margin-bottom:26px;text-align:center}
.auth-brand img{max-height:64px;max-width:210px;object-fit:contain}
.auth-brand .eyebrow{font-size:11px;font-weight:600;letter-spacing:.12em;text-transform:uppercase;color:var(--ec-text-3)}
.auth-card{
  width:100%;max-width:420px;background:var(--ec-card);border:1px solid var(--ec-border);
  border-radius:var(--ec-radius-lg);box-shadow:var(--ec-shadow-md);padding:26px 26px 28px;
}
.auth-card h2{font-size:21px;margin:0 0 4px}
.auth-card .sub{font-size:13.5px;color:var(--ec-text-2);margin:0 0 20px}
.link{color:var(--ec-accent-strong);font-size:13px;text-decoration:none;cursor:pointer;display:inline-block;margin-top:14px;background:none;border:none;font-family:inherit;padding:0}
.link:hover{text-decoration:underline}
.centro{text-align:center;display:block}

/* ── PORTAL: header ── */
.hd{
  height:60px;display:flex;align-items:center;gap:16px;padding:0 20px;
  background:var(--ec-surface);border-bottom:1px solid var(--ec-border);
  position:sticky;top:0;z-index:50;
}
.hd .marca{display:flex;align-items:center;gap:11px;min-width:0}
.hd .marca img{height:32px;width:auto;max-width:130px;object-fit:contain;display:block}
.hd .marca .t{font-size:16px;font-weight:700;letter-spacing:-.01em;line-height:1;white-space:nowrap}
.hd .marca .s{font-size:10px;font-weight:500;color:var(--ec-text-3);letter-spacing:.12em;text-transform:uppercase;margin-top:2px;white-space:nowrap}
.hd .lado{margin-left:auto;display:flex;align-items:center;gap:8px}
.hd .btn-icon{width:38px;min-height:38px}

/* Chip de usuario + menú */
.chip-usr{
  position:relative;display:flex;align-items:center;gap:9px;padding:4px 10px 4px 4px;
  background:var(--ec-bg-subtle);border:1px solid var(--ec-border);border-radius:var(--ec-radius-full);
  cursor:pointer;font-family:inherit;color:var(--ec-text);
}
.chip-usr:hover{background:var(--ec-hover)}
.avatar{width:30px;height:30px;flex:none;border-radius:var(--ec-radius-full);background:var(--ec-secondary);color:#F1EFEC;display:flex;align-items:center;justify-content:center;font-size:12px;font-weight:600}
.chip-usr .datos{line-height:1.15;text-align:left}
.chip-usr .n{font-size:12.5px;font-weight:600}
.chip-usr .r{font-size:10.5px;color:var(--ec-text-3);text-transform:capitalize}
.menu-usr{
  position:absolute;top:calc(100% + 8px);right:0;min-width:210px;z-index:60;
  background:var(--ec-surface);border:1px solid var(--ec-border);border-radius:var(--ec-radius-md);
  box-shadow:var(--ec-shadow-lg);padding:6px;display:none;animation:ecpop var(--ec-dur-base) var(--ec-ease-emphasized);
}
.menu-usr.open{display:block}
.menu-usr button{
  display:flex;align-items:center;gap:10px;width:100%;padding:10px 12px;border:none;background:transparent;
  border-radius:var(--ec-radius-sm);font-family:inherit;font-size:13.5px;color:var(--ec-text);cursor:pointer;text-align:left;
}
.menu-usr button:hover{background:var(--ec-hover)}
.menu-usr button.rojo{color:var(--ec-danger)}
.menu-usr .sep{height:1px;background:var(--ec-border);margin:5px 4px}

/* ── PORTAL: contenido ── */
.port-main{max-width:1200px;margin:0 auto;padding:26px 20px 70px}
.saludo .fecha{font-size:12px;font-weight:600;letter-spacing:.08em;text-transform:uppercase;color:var(--ec-accent-strong);margin-bottom:8px}
.saludo h1{font-size:clamp(24px,4vw,32px);letter-spacing:-.02em;margin:0 0 8px}
.saludo p{font-size:14.5px;line-height:1.55;color:var(--ec-text-2);max-width:60ch;margin:0 0 22px}
.filtro-bar{display:flex;align-items:center;gap:12px;margin-bottom:20px;flex-wrap:wrap}
.filtro-bar .input-wrap{flex:1;min-width:220px;min-height:42px}
.sec-mini{display:flex;align-items:center;gap:8px;margin:0 0 12px}
.sec-mini .ic{color:var(--ec-accent-strong);width:16px;height:16px}
.sec-mini span{font-size:12px;font-weight:600;letter-spacing:.08em;text-transform:uppercase;color:var(--ec-text-3)}
.sec-mini .conteo{margin-left:auto;font-family:var(--ec-font-mono);font-size:12px;text-transform:none;letter-spacing:0}
.apps-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(230px,1fr));gap:12px;margin-bottom:26px}
.app-card{
  position:relative;background:var(--ec-card);border:1px solid var(--ec-border);border-radius:var(--ec-radius-md);
  padding:16px;cursor:pointer;box-shadow:var(--ec-shadow-sm);text-decoration:none;color:var(--ec-text);display:block;
  transition:border-color var(--ec-dur-fast) var(--ec-ease-standard),box-shadow var(--ec-dur-fast) var(--ec-ease-standard);
}
.app-card:hover{border-color:var(--ec-accent);box-shadow:var(--ec-shadow-md);text-decoration:none}
.app-card .fila-app{display:flex;align-items:flex-start;gap:11px}
.app-ico{width:42px;height:42px;flex:none;border-radius:10px;background:var(--ec-bg-subtle);display:flex;align-items:center;justify-content:center;font-size:22px;overflow:hidden}
.app-ico img{width:100%;height:100%;object-fit:cover}
.app-card.fav .app-ico{background:var(--tint-accent)}
.app-card .info{min-width:0;padding-right:20px}
.app-card .info .n{font-size:14px;font-weight:600;line-height:1.2}
.app-card .info .d{font-size:11.5px;color:var(--ec-text-2);margin-top:3px;line-height:1.35}
.btn-fav{position:absolute;top:10px;right:10px;border:none;background:transparent;cursor:pointer;color:var(--ec-text-3);display:flex;padding:4px}
.btn-fav:hover,.btn-fav.on{color:var(--ec-accent-strong)}
.vacio{
  text-align:center;padding:44px 20px;border:1px dashed var(--ec-border-strong);border-radius:var(--ec-radius-md);
  color:var(--ec-text-2);font-size:13px;
}
.vacio .ic{width:34px;height:34px;color:var(--ec-text-3)}
.vacio .t{font-size:15px;font-weight:600;margin:12px 0 4px;color:var(--ec-text)}

/* ── ADMIN: layout con sidebar ── */
.adm{min-height:100vh;display:flex;background:var(--ec-bg)}
.adm-side{
  width:236px;flex:none;background:var(--ec-surface);border-right:1px solid var(--ec-border);
  display:flex;flex-direction:column;padding:18px 12px;position:sticky;top:0;height:100vh;
}
.adm-side .marca{display:flex;align-items:center;gap:10px;padding:0 8px 18px}
.adm-side .marca img{height:28px;width:auto;max-width:120px;object-fit:contain}
.adm-side .marca .t{font-size:14.5px;font-weight:700;letter-spacing:-.01em;line-height:1}
.adm-side .marca .s{font-size:9.5px;font-weight:600;color:var(--ec-danger);letter-spacing:.1em;text-transform:uppercase;margin-top:3px}
.adm-side .grupo{font-size:10.5px;font-weight:600;letter-spacing:.1em;text-transform:uppercase;color:var(--ec-text-3);padding:0 10px;margin-bottom:8px}
.nav-item{
  display:flex;align-items:center;gap:11px;min-height:40px;padding:0 10px;border-radius:var(--ec-radius-sm);
  font-size:13.5px;font-weight:500;text-decoration:none;margin-bottom:2px;color:var(--ec-text-2);
  border:none;background:transparent;font-family:inherit;cursor:pointer;width:100%;text-align:left;
}
.nav-item:hover{background:var(--ec-hover);text-decoration:none;color:var(--ec-text)}
.nav-item.act{background:var(--ec-selected);color:var(--ec-text);font-weight:600}
.nav-item .ic{color:var(--ec-text-3)}
.nav-item.act .ic{color:var(--ec-accent-strong)}
.nav-item .conteo{margin-left:auto;font-family:var(--ec-font-mono);font-size:11px;color:var(--ec-text-3)}
.adm-yo{margin-top:auto;background:var(--ec-bg-subtle);border:1px solid var(--ec-border);border-radius:11px;padding:12px}
.adm-yo .fila-yo{display:flex;align-items:center;gap:9px;min-width:0}
.adm-yo .avatar{width:34px;height:34px;background:var(--ec-danger);color:#fff}
.adm-yo .n{font-size:12.5px;font-weight:600}
.adm-yo .e{font-size:10.5px;color:var(--ec-text-3);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.adm-yo .acciones-yo{display:flex;gap:6px;margin-top:10px}
.adm-yo .acciones-yo .btn-sm{flex:1;min-height:34px;font-size:12px}
.adm-main{flex:1;min-width:0}
.adm-cont{padding:24px 26px 70px;max-width:1180px}
.adm-top{display:flex;align-items:flex-start;justify-content:space-between;gap:16px;margin-bottom:20px;flex-wrap:wrap}
.adm-top h1{font-size:clamp(21px,3vw,26px);letter-spacing:-.02em;margin:0 0 5px}
.adm-top p{font-size:13.5px;color:var(--ec-text-2);margin:0;max-width:60ch}
.adm-top .acciones{display:flex;gap:9px;flex-wrap:wrap}

/* Stats */
.stats{display:grid;grid-template-columns:repeat(auto-fit,minmax(150px,1fr));gap:12px;margin-bottom:22px}
.stat{background:var(--ec-card);border:1px solid var(--ec-border);border-radius:11px;padding:13px 15px;box-shadow:var(--ec-shadow-sm)}
.stat .lbl{display:flex;align-items:center;gap:8px;color:var(--ec-text-2);font-size:12px;font-weight:500}
.stat .lbl .ic{width:17px;height:17px}
.stat .val{font-family:var(--ec-font-mono);font-size:24px;font-weight:500;margin-top:8px}

/* Toolbar + chips de filtro */
.toolbar{display:flex;align-items:center;gap:12px;margin-bottom:14px;flex-wrap:wrap}
.toolbar .input-wrap{flex:1;min-width:200px;min-height:42px}
.chips{display:flex;gap:7px;flex-wrap:wrap}
.chip-f{
  min-height:34px;padding:0 13px;border-radius:var(--ec-radius-full);font-family:inherit;font-size:12.5px;font-weight:600;
  cursor:pointer;border:1px solid var(--ec-border);background:var(--ec-surface);color:var(--ec-text-2);
}
.chip-f.act{background:var(--ec-accent-strong);color:#fff;border-color:var(--ec-accent-strong)}

/* Tabla (grid) */
.tabla{background:var(--ec-surface);border:1px solid var(--ec-border);border-radius:var(--ec-radius-md);overflow:hidden;box-shadow:var(--ec-shadow-sm)}
.t-head,.t-row{display:grid;column-gap:14px;align-items:center;padding:11px 16px}
.t-head{background:var(--ec-bg-subtle);border-bottom:1px solid var(--ec-border);font-size:11px;font-weight:600;letter-spacing:.05em;text-transform:uppercase;color:var(--ec-text-3)}
.t-row{border-bottom:1px solid var(--ec-border);cursor:pointer;transition:background var(--ec-dur-fast)}
.t-row:last-child{border-bottom:none}
.t-row:hover{background:var(--ec-hover)}
.t-usuarios .t-head,.t-usuarios .t-row{grid-template-columns:1.6fr 120px 100px 120px 84px 44px}
.t-apps .t-head,.t-apps .t-row{grid-template-columns:1.6fr 1fr 70px 84px 44px}
.t-cel-usr{display:flex;align-items:center;gap:11px;min-width:0}
.t-cel-usr .datos{min-width:0}
.t-cel-usr .n{font-size:13.5px;font-weight:600;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;display:flex;align-items:center;gap:6px}
.t-cel-usr .e{font-size:11.5px;color:var(--ec-text-3);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.t-sub{font-size:12.5px;color:var(--ec-text-2);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.pill{display:inline-block;font-size:11.5px;font-weight:600;padding:3px 10px;border-radius:var(--ec-radius-full);white-space:nowrap}
.pill-admin{background:var(--tint-accent);color:var(--ec-accent-strong)}
.pill-user{background:var(--ec-bg-subtle);color:var(--ec-text-2)}
.pill-off{background:var(--tint-danger);color:var(--fg-danger)}
.pill-warn{background:var(--tint-warning);color:var(--fg-warning)}
.t-apps-count{display:flex;align-items:center;gap:5px;color:var(--ec-text-2)}
.t-apps-count .ic{width:16px;height:16px;color:var(--ec-text-3)}
.t-apps-count span{font-size:12.5px;font-family:var(--ec-font-mono);white-space:nowrap}
.btn-edit{width:32px;height:32px;border:none;background:transparent;color:var(--ec-text-3);border-radius:var(--ec-radius-sm);cursor:pointer;display:flex;align-items:center;justify-content:center}
.btn-edit:hover{background:var(--ec-hover);color:var(--ec-text)}
.t-vacio{text-align:center;padding:40px 20px;color:var(--ec-text-2);font-size:13px}
.t-vacio .t{font-size:14px;font-weight:600;margin:10px 0 3px;color:var(--ec-text)}

/* Bitácora / Auditoría */
.t-audit .t-head,.t-audit .t-row{grid-template-columns:150px 1.1fr 175px 1.8fr}
.t-audit .t-row{cursor:default}
.ev-pill{display:inline-flex;align-items:center;gap:6px;font-size:11.5px;font-weight:600;padding:4px 10px;border-radius:var(--ec-radius-full);white-space:nowrap}
.ev-pill .ic{width:14px;height:14px}
.ev-ok{background:var(--tint-success);color:var(--fg-success)}
.ev-err{background:var(--tint-danger);color:var(--fg-danger)}
.ev-warn{background:var(--tint-warning);color:var(--fg-warning)}
.ev-info{background:var(--tint-info);color:var(--fg-info)}
.ev-accent{background:var(--tint-accent);color:var(--ec-accent-strong)}
.ev-neutro{background:var(--ec-bg-subtle);color:var(--ec-text-2)}
.ev-fecha{font-family:var(--ec-font-mono);font-size:12px;color:var(--ec-text-2);white-space:nowrap}
.ev-desc{font-size:13px;color:var(--ec-text);line-height:1.4}
.ev-quien{font-size:12.5px;min-width:0}
.ev-quien .n{font-weight:600;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.ev-quien .e{color:var(--ec-text-3);font-size:11px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.paginacion{display:flex;align-items:center;gap:10px;justify-content:flex-end;margin-top:12px;font-size:12.5px;color:var(--ec-text-2)}
.paginacion .rango{font-family:var(--ec-font-mono)}
.act-item{display:flex;gap:11px;padding:10px 4px;border-bottom:1px solid var(--ec-border);align-items:flex-start}
.act-item:last-child{border-bottom:none}
.act-item .ev-pill{flex:none;margin-top:1px}
.act-item .cuerpo{min-width:0}
.act-item .cuerpo .d{font-size:13px;line-height:1.4}
.act-item .cuerpo .f{font-family:var(--ec-font-mono);font-size:11px;color:var(--ec-text-3);margin-top:2px}

/* Switch */
.sw{width:42px;height:24px;border-radius:var(--ec-radius-full);border:none;cursor:pointer;padding:0;position:relative;background:var(--ec-border-strong);transition:background var(--ec-dur-base);flex:none}
.sw .knob{position:absolute;top:3px;left:3px;width:18px;height:18px;border-radius:var(--ec-radius-full);background:#fff;transition:left var(--ec-dur-base);box-shadow:0 1px 2px rgba(0,0,0,.3)}
.sw.on{background:var(--ec-success)}
.sw.on .knob{left:21px}

/* ── Drawer ── */
.velo{position:fixed;inset:0;background:rgba(26,23,20,.5);z-index:60;display:none;animation:ecfade var(--ec-dur-fast) ease}
.velo.open{display:block}
.drawer{
  position:fixed;top:0;right:0;height:100dvh;width:420px;max-width:94vw;background:var(--ec-surface);
  border-left:1px solid var(--ec-border);box-shadow:var(--ec-shadow-lg);z-index:61;display:none;flex-direction:column;
  animation:ecslidein var(--ec-dur-base) var(--ec-ease-emphasized);
}
.drawer.open{display:flex}
.d-head{display:flex;align-items:center;justify-content:space-between;gap:10px;padding:18px 20px;border-bottom:1px solid var(--ec-border)}
.d-head .quien{display:flex;align-items:center;gap:12px;min-width:0}
.d-head .avatar{width:42px;height:42px;font-size:14px}
.d-head .n{font-size:15px;font-weight:600}
.d-head .e{font-size:12px;color:var(--ec-text-3);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.btn-x{width:34px;height:34px;border:none;background:var(--ec-bg-subtle);border-radius:var(--ec-radius-sm);color:var(--ec-text-2);cursor:pointer;display:flex;align-items:center;justify-content:center;flex:none}
.btn-x:hover{background:var(--ec-hover)}
.d-body{flex:1;overflow-y:auto;padding:18px 20px}
.d-foot{display:flex;gap:10px;padding:14px 20px;border-top:1px solid var(--ec-border)}
.d-foot .btn,.d-foot .btn-outline{flex:1}
.d-sec{font-size:11px;font-weight:600;letter-spacing:.08em;text-transform:uppercase;color:var(--ec-text-3);margin:0 0 10px}
.d-sec-fila{display:flex;align-items:center;justify-content:space-between;margin:22px 0 10px}
.d-sec-fila .d-sec{margin:0}
.d-sec-fila .conteo{font-family:var(--ec-font-mono);font-size:11.5px;color:var(--ec-text-2)}
.mod-item{
  display:flex;align-items:center;gap:11px;padding:9px 8px;border:none;background:transparent;
  border-radius:var(--ec-radius-sm);cursor:pointer;text-align:left;width:100%;font-family:inherit;
}
.mod-item:hover{background:var(--ec-hover)}
.mod-item .app-ico{width:32px;height:32px;border-radius:8px;font-size:17px}
.mod-item.on .app-ico{background:var(--tint-accent)}
.mod-item .n{flex:1;font-size:13.5px;font-weight:500;color:var(--ec-text-2)}
.mod-item.on .n{color:var(--ec-text)}

/* ── Modal ── */
.overlay{position:fixed;inset:0;background:rgba(26,23,20,.5);z-index:70;display:none;align-items:center;justify-content:center;padding:20px;animation:ecfade var(--ec-dur-fast) ease}
.overlay.open{display:flex}
.modal{width:100%;max-width:480px;background:var(--ec-surface);border-radius:var(--ec-radius-xl);box-shadow:var(--ec-shadow-lg);overflow:hidden;display:flex;flex-direction:column;max-height:92dvh;animation:ecpop var(--ec-dur-base) var(--ec-ease-emphasized)}
.m-head{display:flex;align-items:center;justify-content:space-between;padding:18px 22px;border-bottom:1px solid var(--ec-border)}
.m-head .t{display:flex;align-items:center;gap:10px;font-size:17px;font-weight:600}
.m-head .t .ic{color:var(--ec-accent-strong);width:22px;height:22px}
.m-body{padding:20px 22px;overflow-y:auto;flex:1}
.m-foot{display:flex;gap:10px;padding:14px 22px;border-top:1px solid var(--ec-border)}
.m-foot .btn{flex:1.3}
.m-foot .btn-outline{flex:1}
.chips-sel{display:flex;flex-wrap:wrap;gap:7px}
.chip-sel{
  display:inline-flex;align-items:center;gap:7px;min-height:36px;padding:0 12px;border-radius:var(--ec-radius-sm);
  font-family:inherit;font-size:12.5px;font-weight:500;cursor:pointer;
  border:1px solid var(--ec-border-strong);background:var(--ec-surface);color:var(--ec-text-2);
}
.chip-sel.on{background:var(--tint-accent);color:var(--ec-accent-strong);border-color:var(--ec-accent);font-weight:600}

/* ── Config (logo) ── */
.cfg-card{max-width:460px;background:var(--ec-card);border:1px solid var(--ec-border);border-radius:var(--ec-radius-md);box-shadow:var(--ec-shadow-sm);padding:20px 22px}
.cfg-card h3{font-size:17px;margin-bottom:6px}
.logo-prev{background:var(--ec-bg-subtle);border:1px solid var(--ec-border);border-radius:10px;padding:18px;display:flex;align-items:center;justify-content:center;gap:12px;min-height:90px;margin:14px 0}
.logo-prev img{max-height:70px;max-width:250px;object-fit:contain}

/* ── Toast ── */
#toast{position:fixed;bottom:20px;left:50%;transform:translateX(-50%);z-index:999;display:flex;flex-direction:column;gap:8px;width:min(420px,92vw);align-items:center}
.t-msg{
  display:flex;align-items:center;gap:10px;background:var(--ec-text);color:var(--ec-bg);
  font-size:13.5px;font-weight:500;padding:12px 18px;border-radius:var(--ec-radius-full);
  box-shadow:var(--ec-shadow-lg);animation:ecpop .25s var(--ec-ease-emphasized);max-width:100%;
}
.t-msg .ic{color:var(--ec-accent)}
.t-msg.err .ic{color:var(--ec-danger)}

/* ── Responsive ── */
@media(max-width:900px){
  .panel-marca{display:none}
  .login-split{align-items:flex-start}
  .panel-form{padding:32px 20px;align-items:flex-start}
  .panel-form .caja-form{margin-top:8vh}
  .adm{flex-direction:column}
  .adm-side{width:100%;height:auto;position:static;flex-direction:row;align-items:center;gap:4px;padding:10px 12px;border-right:none;border-bottom:1px solid var(--ec-border);overflow-x:auto}
  .adm-side .marca{padding:0 8px 0 0;flex:none}
  .adm-side .marca .s{display:none}
  .adm-side .grupo{display:none}
  .nav-item{width:auto;flex:none;padding:0 12px}
  .nav-item .conteo{display:none}
  .adm-yo{margin:0 0 0 auto;padding:6px;border:none;background:transparent;flex:none}
  .adm-yo .datos-yo,.adm-yo .extra{display:none}
  .adm-yo .acciones-yo{margin:0}
  .adm-cont{padding:18px 14px 60px}
}
@media(max-width:640px){
  .hd{padding:0 12px;gap:10px}
  .hd .marca .s{display:none}
  .chip-usr .datos{display:none}
  .port-main{padding:20px 14px 60px}
  .apps-grid{grid-template-columns:1fr 1fr}
  .t-usuarios .t-head,.t-apps .t-head,.t-audit .t-head{display:none}
  .t-usuarios .t-row,.t-apps .t-row{grid-template-columns:1fr auto auto;row-gap:8px;padding:13px 14px}
  .t-usuarios .t-row .t-cel-usr,.t-apps .t-row .t-cel-usr{grid-column:1/-1}
  .t-audit .t-row{grid-template-columns:1fr auto;row-gap:6px;padding:12px 14px}
  .t-audit .t-row .ev-desc{grid-column:1/-1}
  .t-sub{white-space:normal;word-break:break-all}
  .stats{grid-template-columns:1fr 1fr}
  .m-foot,.d-foot{flex-wrap:wrap}
}
@media(max-width:420px){
  .apps-grid{grid-template-columns:1fr}
}

/* ── Monitor de servidor (v2) — read-only, tokens --ec-* ── */
.mon-refresco{font-family:var(--ec-font-mono);font-size:11px;color:var(--ec-text-3);white-space:nowrap}
.mon-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(200px,1fr));gap:12px;margin-bottom:22px}
.mon-card{background:var(--ec-card);border:1px solid var(--ec-border);border-radius:11px;padding:14px 16px;box-shadow:var(--ec-shadow-sm)}
.mon-card .lbl{color:var(--ec-text-2);font-size:12px;font-weight:500}
.mon-card .val{font-family:var(--ec-font-mono);font-size:24px;font-weight:500;margin-top:8px}
.mon-card .sub{font-size:11px;color:var(--ec-text-3);margin-top:8px}
.mon-barra{height:6px;border-radius:999px;background:var(--ec-neutral-200);overflow:hidden;margin-top:10px}
:root[data-theme="dark"] .mon-barra{background:var(--ec-neutral-800)}
.mon-barra-fill{height:100%;border-radius:999px;background:var(--ec-success-500);transition:width .4s ease}
.mon-barra-fill.ambar{background:var(--ec-warning)}
.mon-barra-fill.roja{background:var(--ec-danger)}
.mon-h3{font-size:14px;font-weight:600;margin-bottom:10px}
.mon-svc-wrap{background:var(--ec-card);border:1px solid var(--ec-border);border-radius:11px;padding:14px 16px;box-shadow:var(--ec-shadow-sm)}
.mon-svc-head,.mon-svc{display:grid;grid-template-columns:1.6fr 1.2fr .8fr .8fr .7fr;gap:10px;align-items:center}
.mon-svc-head{font-size:10.5px;font-weight:600;letter-spacing:.08em;text-transform:uppercase;color:var(--ec-text-3);padding:6px 10px;border-bottom:1px solid var(--ec-border)}
.mon-svc{padding:11px 10px;border-bottom:1px solid var(--ec-border);font-size:13px}
.mon-svc:last-child{border-bottom:none}
.mon-svc .quien{display:flex;align-items:center;gap:10px;min-width:0}
.mon-svc .n{font-weight:600}
.mon-svc .e{font-family:var(--ec-font-mono);font-size:11px;color:var(--ec-text-3)}
.mon-dot{width:10px;height:10px;border-radius:50%;flex:none}
.mon-dot.verde{background:var(--ec-success-500);box-shadow:0 0 0 3px var(--ec-success-50)}
.mon-dot.ambar{background:var(--ec-warning);box-shadow:0 0 0 3px var(--ec-warning-50)}
.mon-dot.rojo{background:var(--ec-danger);box-shadow:0 0 0 3px var(--ec-danger-50)}
.mon-estado{display:block;font-weight:600;font-size:12.5px}
.mon-estado.verde{color:var(--ec-success-600)}
.mon-estado.ambar{color:var(--ec-warning)}
.mon-estado.rojo{color:var(--ec-danger)}
.mon-estado-raw{font-family:var(--ec-font-mono);font-size:10.5px;color:var(--ec-text-3)}
@media(max-width:760px){
  .mon-svc-head{display:none}
  .mon-svc{grid-template-columns:1fr 1fr;gap:6px 12px;border:1px solid var(--ec-border);border-radius:10px;margin-bottom:10px;padding:12px}
  .mon-svc .quien{grid-column:1 / -1}
  .mon-svc [data-t]::before{content:attr(data-t);display:block;font-size:10px;text-transform:uppercase;letter-spacing:.06em;color:var(--ec-text-3)}
}
