/* ============================================================================
   Portal Connected — Sistema de diseño
   Tokens + componentes + layout de la aplicación (tema oscuro).
   ============================================================================ */

/* ---- Fuente auto-alojada (variable, cubre pesos 200–800 y acentos español) ---- */
@font-face{
  font-family:'Plus Jakarta Sans';
  font-style:normal;
  font-weight:200 800;
  font-display:swap;
  src:url('fonts/plus-jakarta-sans-latin.woff2') format('woff2');
}

/* ---------- Tokens ---------- */
:root{
  --ground:#02101c; --sidebar:#030c15;
  --surface:rgba(255,255,255,.035); --surface-2:rgba(255,255,255,.06);
  --border:rgba(255,255,255,.08); --border-strong:rgba(255,255,255,.16);
  --text:#eaf2fb; --dim:#93a4b8; --mute:#5f7186;
  --brand:#3b82f6; --brand-soft:rgba(59,130,246,.14); --brand-line:rgba(59,130,246,.35);
  --good:#10b981; --good-soft:rgba(16,185,129,.13); --good-line:rgba(16,185,129,.32);
  --warn:#f59e0b; --warn-soft:rgba(245,158,11,.13); --warn-line:rgba(245,158,11,.32);
  --bad:#f87171; --bad-soft:rgba(248,113,113,.12); --bad-line:rgba(248,113,113,.32);
  --r:14px; --r-sm:10px; --r-lg:20px;
  --font:'Plus Jakarta Sans',"Segoe UI",system-ui,-apple-system,Arial,sans-serif;
  --shadow:0 10px 40px rgba(0,0,0,.45);
}

/* ---------- Base ---------- */
*{box-sizing:border-box}
html,body{margin:0;padding:0}
body{background:var(--ground);color:var(--text);font-family:var(--font);
  line-height:1.5;-webkit-font-smoothing:antialiased;text-rendering:optimizeLegibility}
a{color:inherit;text-decoration:none}
h1,h2,h3,h4,h5{margin:0;text-wrap:balance;font-weight:800;letter-spacing:-.01em}
p{margin:0}
img{max-width:100%}
:focus-visible{outline:2px solid var(--brand);outline-offset:2px;border-radius:4px}
.tnum{font-variant-numeric:tabular-nums}
.ico{width:20px;height:20px;stroke:currentColor;stroke-width:1.9;fill:none;
  stroke-linecap:round;stroke-linejoin:round;flex:none}
.ico.sm{width:16px;height:16px}
.sr-only{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0)}

/* ---------- App shell ---------- */
.app{display:grid;grid-template-columns:250px 1fr;min-height:100vh}
.sidebar{background:var(--sidebar);border-right:1px solid var(--border);
  display:flex;flex-direction:column;position:sticky;top:0;height:100vh}
.brand{display:flex;align-items:center;gap:11px;padding:22px 22px 18px}
.brand-badge{width:34px;height:34px;object-fit:contain;display:block;
  filter:drop-shadow(0 3px 12px rgba(59,130,246,.45))}
.brand-name{font-weight:800;letter-spacing:2px;font-size:15px}
.brand-sub{font-size:11px;color:var(--mute);letter-spacing:.5px;margin-top:1px}

.nav{padding:6px 12px;display:flex;flex-direction:column;gap:2px;overflow-y:auto;flex:1}
.nav-label{font-size:10.5px;text-transform:uppercase;letter-spacing:1.4px;color:var(--mute);
  padding:16px 12px 7px;font-weight:700}
.nav-item{display:flex;align-items:center;gap:12px;padding:10px 12px;border-radius:var(--r-sm);
  color:var(--dim);font-size:14px;font-weight:600;cursor:pointer;border:1px solid transparent;
  transition:background .16s,color .16s}
.nav-item:hover{background:var(--surface);color:var(--text)}
.nav-item.active{background:var(--brand-soft);color:#fff;border-color:var(--brand-line)}
.nav-item.active .ico{color:var(--brand)}
.nav-item .pill{margin-left:auto;font-size:10px;font-weight:700;padding:2px 7px;border-radius:99px;
  background:var(--surface-2);color:var(--mute);letter-spacing:.3px}
.nav-item .count{margin-left:auto;font-size:11px;font-weight:800;background:var(--brand);color:#fff;
  min-width:18px;height:18px;border-radius:99px;display:grid;place-items:center;padding:0 5px}

.side-user{margin:10px 12px 14px;padding:12px;border:1px solid var(--border);border-radius:var(--r);
  display:flex;align-items:center;gap:11px;background:var(--surface)}
.avatar{width:36px;height:36px;border-radius:50%;display:grid;place-items:center;font-weight:800;
  font-size:14px;color:#fff;flex:none}
.avatar.emp{background:linear-gradient(135deg,#10b981,#059669)}
.avatar.adm{background:linear-gradient(135deg,#3b82f6,#1d4ed8)}
.side-user .who{min-width:0}
.side-user .who b{font-size:13.5px;display:block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.side-user .who span{font-size:11.5px;color:var(--mute)}
.logout{margin-left:auto;color:var(--mute);cursor:pointer;display:grid;place-items:center;
  width:30px;height:30px;border-radius:8px}
.logout:hover{color:var(--bad);background:var(--bad-soft)}

.main{min-width:0;display:flex;flex-direction:column}
.topbar{display:flex;align-items:center;gap:16px;padding:16px 30px;border-bottom:1px solid var(--border);
  position:sticky;top:0;background:rgba(2,16,28,.82);backdrop-filter:blur(14px);
  -webkit-backdrop-filter:blur(14px);z-index:5}
.pagetitle{font-size:18px;font-weight:800}
.pagetitle small{display:block;font-size:12px;font-weight:600;color:var(--mute);margin-top:2px}
.search{margin-left:auto;display:flex;align-items:center;gap:9px;background:var(--surface);
  border:1px solid var(--border);border-radius:99px;padding:8px 15px;color:var(--mute);min-width:210px}
.search input{background:none;border:none;outline:none;color:var(--text);font-family:inherit;font-size:13px;width:100%}

.content{padding:28px 30px 60px;max-width:1120px;width:100%}
.menu-btn{display:none;place-items:center;width:38px;height:38px;border-radius:9px;border:1px solid var(--border);
  background:var(--surface);color:var(--text);cursor:pointer}

/* ---------- Headings / helpers ---------- */
.hi{font-size:28px;margin-bottom:4px}
.sub{color:var(--dim);font-size:14.5px;margin-bottom:26px}
.grid{display:grid;gap:16px}
.g-2{grid-template-columns:1.5fr 1fr}.g-3{grid-template-columns:repeat(3,1fr)}.g-4{grid-template-columns:repeat(4,1fr)}
.between{display:flex;align-items:center;justify-content:space-between;gap:12px;flex-wrap:wrap}
.flex{display:flex;align-items:center;gap:12px}
.mt{margin-top:22px}.mb{margin-bottom:16px}

/* ---------- Cards / stats ---------- */
.card{background:var(--surface);border:1px solid var(--border);border-radius:var(--r);padding:20px}
.card.pad-lg{padding:24px}
.card-h{display:flex;align-items:center;gap:11px;margin-bottom:16px}
.card-h .ic{width:34px;height:34px;border-radius:9px;display:grid;place-items:center;flex:none}
.card-h h3{font-size:15px}
.card-h .ic.b{background:var(--brand-soft);color:var(--brand)}
.card-h .ic.g{background:var(--good-soft);color:var(--good)}
.card-h .ic.w{background:var(--warn-soft);color:var(--warn)}
.stat{background:var(--surface);border:1px solid var(--border);border-radius:var(--r);padding:18px}
.stat .top{display:flex;align-items:center;justify-content:space-between;color:var(--dim);font-size:12.5px;font-weight:600}
.stat .top .ic{width:32px;height:32px;border-radius:9px;display:grid;place-items:center}
.stat .num{font-size:30px;font-weight:800;margin-top:12px;letter-spacing:-.02em}
.stat .foot{font-size:12px;color:var(--mute);margin-top:4px}
.stat .foot b{color:var(--good)}

/* ---------- Badges ---------- */
.badge{display:inline-flex;align-items:center;gap:6px;font-size:11.5px;font-weight:700;
  padding:4px 11px;border-radius:99px;letter-spacing:.2px}
.badge.g{background:var(--good-soft);color:var(--good);border:1px solid var(--good-line)}
.badge.b{background:var(--brand-soft);color:var(--brand);border:1px solid var(--brand-line)}
.badge.w{background:var(--warn-soft);color:var(--warn);border:1px solid var(--warn-line)}
.badge.r{background:var(--bad-soft);color:var(--bad);border:1px solid var(--bad-line)}
.badge.n{background:var(--surface-2);color:var(--dim);border:1px solid var(--border)}
.dot{width:7px;height:7px;border-radius:50%;background:currentColor}

/* ---------- Buttons ---------- */
.btn{display:inline-flex;align-items:center;gap:8px;font-family:inherit;font-weight:700;font-size:13.5px;
  padding:10px 18px;border-radius:var(--r-sm);cursor:pointer;border:1px solid transparent;transition:.16s;
  text-align:center}
.btn.primary{background:var(--brand);color:#fff;box-shadow:0 4px 16px rgba(59,130,246,.35)}
.btn.primary:hover{filter:brightness(1.08);transform:translateY(-1px)}
.btn.ghost{background:var(--surface);border-color:var(--border);color:var(--text)}
.btn.ghost:hover{border-color:var(--border-strong);background:var(--surface-2)}
.btn.danger{background:var(--bad-soft);border-color:var(--bad-line);color:var(--bad)}
.btn.sm{padding:7px 12px;font-size:12.5px}
.btn.block{width:100%;justify-content:center}

/* ---------- Attendance clock ---------- */
.clock{display:flex;align-items:center;gap:22px;flex-wrap:wrap}
.clock .face{display:flex;align-items:center;gap:16px}
.clock .ring{width:64px;height:64px;border-radius:50%;display:grid;place-items:center;flex:none}
.clock .ring.on{background:var(--good-soft);color:var(--good);border:1px solid var(--good-line)}
.clock .ring.off{background:var(--surface-2);color:var(--dim);border:1px solid var(--border)}
.clock .time{font-size:34px;font-weight:800;letter-spacing:-.02em}
.clock .meta{color:var(--dim);font-size:13px}
.clock .right{margin-left:auto;display:flex;align-items:center;gap:14px;flex-wrap:wrap}

/* ---------- Tables ---------- */
.tablewrap{overflow-x:auto;border:1px solid var(--border);border-radius:var(--r);background:var(--surface)}
table{border-collapse:collapse;width:100%;font-size:13.5px;min-width:520px}
thead th{text-align:left;font-size:11px;text-transform:uppercase;letter-spacing:.8px;color:var(--mute);
  font-weight:700;padding:13px 16px;border-bottom:1px solid var(--border);white-space:nowrap}
tbody td{padding:13px 16px;border-bottom:1px solid rgba(255,255,255,.045);color:var(--dim)}
tbody tr:last-child td{border-bottom:none}
tbody tr:hover{background:rgba(255,255,255,.02)}
td b,td .name{color:var(--text);font-weight:700}
.rowact{display:flex;gap:6px}
.iconbtn{width:30px;height:30px;border-radius:8px;display:grid;place-items:center;cursor:pointer;
  border:1px solid var(--border);background:var(--surface);color:var(--dim)}
.iconbtn:hover{color:var(--text);border-color:var(--border-strong)}
.iconbtn.bad:hover{color:var(--bad);border-color:var(--bad-line);background:var(--bad-soft)}
.pager{display:flex;align-items:center;justify-content:center;gap:18px;padding:14px;color:var(--dim);font-size:13px}
.pager a{color:var(--brand);font-weight:700}
.pager .off{opacity:.4}
.empty{padding:34px;text-align:center;color:var(--mute);font-style:italic}

/* ---------- Forms ---------- */
.form-group{margin-bottom:16px}
.form-group label{display:block;margin-bottom:7px;font-size:12.5px;font-weight:700;color:var(--dim);
  text-transform:uppercase;letter-spacing:.5px}
.form-group input,.form-group select,.form-group textarea{width:100%;padding:12px 14px;border:1px solid var(--border);
  background:var(--surface);color:var(--text);border-radius:var(--r-sm);font-family:inherit;font-size:14px;
  outline:none;transition:border-color .16s,box-shadow .16s}
.form-group textarea{resize:vertical;min-height:78px;line-height:1.5}
.form-group input:focus,.form-group select:focus,.form-group textarea:focus{border-color:var(--brand);box-shadow:0 0 0 4px var(--brand-soft)}
/* Opciones de los desplegables: fondo oscuro sólido (evita blanco-sobre-blanco) */
select option{background:#0c1c2e;color:var(--text)}
.form-group select{cursor:pointer}
.form-hint{font-size:12px;color:var(--mute);margin-top:6px}
.form-row{display:grid;grid-template-columns:1fr 1fr;gap:0 18px}
@media (max-width:640px){.form-row{grid-template-columns:1fr}}

/* ---------- Login ---------- */
.login-body{min-height:100vh;display:flex;align-items:center;justify-content:center;padding:20px}
.login-card{width:100%;max-width:410px}
.login-brand{text-align:center;margin-bottom:26px}
.login-logo{width:64px;height:64px;object-fit:contain;display:inline-block;margin-bottom:16px;
  filter:drop-shadow(0 8px 24px rgba(59,130,246,.45))}
.login-brand h1{font-size:22px}
.login-brand p{color:var(--dim);font-size:14px;margin-top:6px}
.login-panel{background:var(--surface);border:1px solid var(--border);border-radius:var(--r-lg);
  padding:28px;box-shadow:var(--shadow)}
.input-wrap{position:relative}
.input-wrap input{padding-left:44px}
.input-wrap .in-ico{position:absolute;left:14px;top:50%;transform:translateY(-50%);color:var(--mute);
  pointer-events:none;transition:color .16s}
.input-wrap input:focus ~ .in-ico{color:var(--brand)}
.login-foot{text-align:center;margin-top:22px;font-size:13px;color:var(--mute)}
.login-foot a{color:var(--good);font-weight:600}
.login-foot a:hover{color:var(--text)}

/* ---------- Alerts (flash) ---------- */
.alert{display:flex;align-items:center;gap:11px;padding:13px 16px;border-radius:var(--r);
  font-size:13.5px;font-weight:600;margin-bottom:22px}
.alert.success{background:var(--good-soft);border:1px solid var(--good-line);color:var(--good)}
.alert.error{background:var(--bad-soft);border:1px solid var(--bad-line);color:var(--bad)}

/* ---------- Accordion ---------- */
.acc-item{border:1px solid var(--border);border-radius:var(--r);margin-bottom:12px;overflow:hidden;background:var(--surface)}
.acc-head{display:flex;align-items:center;gap:13px;padding:16px 18px;cursor:pointer;font-weight:700;font-size:14.5px;
  width:100%;background:none;border:none;color:inherit;font-family:inherit;text-align:left}
.acc-head .lead{color:var(--brand)}
.acc-head .chev{margin-left:auto;color:var(--mute);transition:transform .25s}
.acc-item.open .acc-head .chev{transform:rotate(180deg)}
.acc-body{max-height:0;overflow:hidden;transition:max-height .3s ease}
.acc-item.open .acc-body{max-height:900px}
.acc-inner{padding:2px 18px 20px;color:var(--dim);font-size:13.5px;line-height:1.75}
.quote{background:rgba(255,255,255,.02);border-left:3px solid var(--good);padding:13px 15px;
  border-radius:8px;font-style:italic;color:var(--text);margin:4px 0}
.price-row{display:flex;justify-content:space-between;padding:9px 0;border-bottom:1px solid rgba(255,255,255,.05)}
.price-row b{color:var(--good)}

/* ---------- Lists ---------- */
.list-row{display:flex;align-items:center;gap:13px;padding:12px 0;border-bottom:1px solid rgba(255,255,255,.05)}
.list-row:last-child{border:none}
.list-row .txt{min-width:0;flex:1}
.list-row .txt b{font-size:13.5px}
.list-row .txt span{font-size:12px;color:var(--mute);display:block}

/* ---------- Barra de filtros (CRM) ---------- */
.crm-filters{display:flex;gap:10px;flex-wrap:wrap;align-items:center;margin-bottom:18px}
.crm-filters input[type=text],.crm-filters select{padding:9px 13px;border:1px solid var(--border);
  background:var(--surface);color:var(--text);border-radius:var(--r-sm);font-family:inherit;font-size:13.5px;outline:none}
.crm-filters input[type=text]{min-width:220px;flex:1}
.crm-filters input[type=text]:focus,.crm-filters select:focus{border-color:var(--brand);box-shadow:0 0 0 3px var(--brand-soft)}

/* ---------- Archivos ---------- */
.upload-box{display:flex;gap:12px;align-items:center;flex-wrap:wrap}
.upload-box input[type=file]{flex:1;min-width:210px;color:var(--dim);font-size:13px;padding:9px 11px;
  border:1px dashed var(--border-strong);border-radius:var(--r-sm);background:var(--surface)}
.upload-box input[type=file]::file-selector-button{font-family:inherit;font-weight:700;font-size:12.5px;
  padding:6px 12px;margin-right:11px;border-radius:8px;border:1px solid var(--border);background:var(--surface-2);
  color:var(--text);cursor:pointer}
.filegrid{display:grid;grid-template-columns:repeat(auto-fill,minmax(185px,1fr));gap:14px}
.file-card{border:1px solid var(--border);border-radius:var(--r);padding:16px;background:var(--surface);text-align:center}
.file-card .fic{width:46px;height:46px;border-radius:11px;display:grid;place-items:center;margin:0 auto 10px;background:var(--surface-2)}
.file-card .fn{font-size:12.5px;font-weight:700;color:var(--text);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.file-card .fm{font-size:11px;color:var(--mute);margin-top:2px}
.file-card .fact{display:flex;gap:6px;justify-content:center;margin-top:12px}

/* ---------- Notas ---------- */
.notas-layout{display:grid;grid-template-columns:250px 1fr;gap:16px;align-items:start}
.notelist{display:flex;flex-direction:column;gap:8px}
.notelist .ni{display:block;padding:11px 13px;border-radius:10px;border:1px solid var(--border);
  background:var(--surface);cursor:pointer;transition:border-color .14s}
.notelist .ni:hover{border-color:var(--border-strong)}
.notelist .ni.sel{border-color:var(--brand-line);background:var(--brand-soft)}
.notelist .ni b{font-size:13px;display:block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:var(--text)}
.notelist .ni span{font-size:11px;color:var(--mute)}
.note-editor textarea{min-height:340px;line-height:1.6}
@media (max-width:820px){.notas-layout{grid-template-columns:1fr}.note-editor textarea{min-height:240px}}

/* ---------- Mensajes de equipo ---------- */
.msg-item{display:flex;gap:12px;padding:16px 2px;border-bottom:1px solid rgba(255,255,255,.05)}
.msg-item:last-child{border-bottom:none}
.msg-item .body{flex:1;min-width:0}
.msg-head{display:flex;align-items:center;gap:9px;margin-bottom:5px;flex-wrap:wrap}
.msg-head b{font-size:13.5px}
.msg-head time{color:var(--mute);font-size:11.5px;margin-left:auto}
.msg-text{font-size:13.5px;color:var(--dim);white-space:pre-wrap;overflow-wrap:anywhere}
.msg-del{background:none;border:none;color:var(--mute);cursor:pointer;padding:2px;display:grid;place-items:center}
.msg-del:hover{color:var(--bad)}

/* ---------- Placeholder (secciones futuras) ---------- */
.soon-tag{display:inline-flex;align-items:center;gap:7px;font-size:11.5px;font-weight:700;color:var(--warn);
  background:var(--warn-soft);border:1px solid var(--warn-line);padding:4px 12px;border-radius:99px;margin-bottom:16px}

/* ---------- Toast ---------- */
.toast{position:fixed;bottom:26px;left:50%;transform:translateX(-50%) translateY(30px);opacity:0;
  background:#04182b;border:1px solid var(--good-line);color:var(--text);padding:13px 20px;border-radius:12px;
  display:flex;align-items:center;gap:10px;font-size:13.5px;font-weight:600;box-shadow:var(--shadow);
  transition:.3s;z-index:50;pointer-events:none}
.toast.show{opacity:1;transform:translateX(-50%) translateY(0)}
.toast .ico{color:var(--good)}

/* ---------- Modal de confirmación ---------- */
.modal-overlay{position:fixed;inset:0;background:rgba(0,8,16,.62);backdrop-filter:blur(4px);
  -webkit-backdrop-filter:blur(4px);display:none;align-items:center;justify-content:center;z-index:100;padding:20px}
.modal-overlay.show{display:flex}
.modal{background:#0a1a2b;border:1px solid var(--border-strong);border-radius:var(--r-lg);padding:26px;
  max-width:400px;width:100%;text-align:center;box-shadow:var(--shadow);animation:rise .2s ease both}
.modal-ic{width:52px;height:52px;border-radius:50%;display:grid;place-items:center;margin:0 auto 16px;
  background:var(--bad-soft);color:var(--bad);border:1px solid var(--bad-line)}
.modal-ic .ico{width:24px;height:24px}
.modal h3{font-size:18px;margin-bottom:8px}
.modal p{color:var(--dim);font-size:14px;margin-bottom:22px;line-height:1.55}
.modal-actions{display:flex;gap:10px;justify-content:center}
.btn.danger-fill{background:var(--bad);color:#fff}
.btn.danger-fill:hover{filter:brightness(1.08);transform:translateY(-1px)}

/* ---------- Responsive ---------- */
.scrim{display:none}
@media (max-width:960px){
  .app{grid-template-columns:1fr}
  .sidebar{position:fixed;left:0;top:0;width:250px;z-index:40;transform:translateX(-100%);transition:transform .25s}
  .app.nav-open .sidebar{transform:none}
  .menu-btn{display:grid}
  .scrim{position:fixed;inset:0;background:rgba(0,0,0,.5);z-index:35}
  .app.nav-open .scrim{display:block}
  .g-4{grid-template-columns:repeat(2,1fr)}.g-2,.g-3{grid-template-columns:1fr}
  .search{display:none}
  .content{padding:22px 18px 60px}.topbar{padding:14px 18px}
}
@media (max-width:520px){
  .g-4{grid-template-columns:1fr}
  .hi{font-size:23px}
}
@media (prefers-reduced-motion:reduce){*{animation:none!important;transition:none!important}}
