/* Paleta Gris / Azul marino / Blanco (Sep 2026, a pedido de Roberto: "paleta de colores Gris,
   Azul marino y blanco", igual que en el DEMO del menú principal — design-ref/JUVE_demo_menu_v20.html).
   Los mismos nombres de variable de siempre (--brand, --ink, --page, etc.) así que TODAS las
   pantallas ya existentes heredan la nueva paleta sin tener que tocar su HTML. */
:root{
  --ink:#0f1b28; --ink-2:#4c5a6a; --ink-muted:#8b95a3;
  --page:#eef0f2; --card:#ffffff; --border:#dde2e8; --border-strong:#c3cad3;
  --brand:#1b3a5c; --brand-dark:#0f2740; --brand-wash:#e8eef5; --brand-ink:#ffffff;
  --good:#1a8a4a; --good-bg:#e6f6ec;
  --warn:#a3690b; --warn-bg:#fdf1de;
  --bad:#c0293c; --bad-bg:#fbe7ea;
}
*{box-sizing:border-box;}
body{margin:0;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Helvetica,Arial,sans-serif;background:var(--page);color:var(--ink);font-size:14px;}
#app{max-width:1000px;margin:0 auto;padding:24px 20px 60px;}
/* Pantalla de Login (Sep 2026, a pedido de Roberto: "no debería decir nada ya que aun no entro
   al menú principal... pon como fondo la imagen adjunta"). #app.app-login se activa SOLO en
   renderLogin() (ver app.js) — el resto de las pantallas (selector de empresas, shell principal,
   etc.) sigue usando el #app "de siempre" o #app.app-shell, sin verse afectado por esto. La
   imagen ya trae el logo JUVE incorporado, así que no hace falta repetir ningún texto encima. */
#app.app-login{
  max-width:none;margin:0;padding:20px;min-height:100vh;box-sizing:border-box;
  display:flex;align-items:flex-end;justify-content:center;
  background:linear-gradient(180deg, rgba(6,16,28,.05) 0%, rgba(6,16,28,.68) 100%), url('/assets/juve-fondo-login.jpg') center/cover no-repeat;
}
.login-card{background:#ffffff;border:none;border-radius:14px;padding:26px 26px 22px;max-width:380px;width:100%;margin-bottom:5vh;box-shadow:0 25px 70px rgba(4,14,26,.5);}
.topbar-logo{height:40px;width:auto;display:block;border-radius:6px;}
.topbar{display:flex;align-items:center;gap:14px;margin-bottom:22px;}
.topbar h1{font-size:18px;margin:0;flex:1 1 auto;}
.pill-brand{background:var(--brand);color:var(--brand-ink);border-radius:6px;padding:3px 9px;font-size:11px;font-weight:700;letter-spacing:.03em;}
.card{background:var(--card);border:1px solid var(--border);border-radius:10px;padding:22px;margin-bottom:16px;}
.card h2{font-size:16px;margin:0 0 14px;}
label{display:block;font-size:12px;color:var(--ink-2);margin-bottom:4px;font-weight:600;}
input,select{width:100%;padding:9px 10px;border:1px solid var(--border);border-radius:7px;font-size:13.5px;margin-bottom:12px;background:#fff;}
button{cursor:pointer;font-size:13px;font-weight:600;border-radius:7px;border:1px solid var(--border);padding:9px 14px;background:#fff;color:var(--ink);}
button.primary{background:var(--brand);color:#fff;border-color:var(--brand);}
button.ghost{background:transparent;}
button:disabled{opacity:.5;cursor:not-allowed;}
.row{display:flex;gap:10px;align-items:flex-end;flex-wrap:wrap;}
.hint{font-size:11.5px;color:var(--ink-muted);}
table.data{width:100%;border-collapse:collapse;font-size:13px;}
table.data th{text-align:left;font-size:11px;text-transform:uppercase;letter-spacing:.03em;color:var(--ink-muted);border-bottom:1px solid var(--border);padding:8px 6px;}
table.data td{padding:9px 6px;border-bottom:1px solid var(--border);}
.status-pill{display:inline-block;padding:2px 9px;border-radius:99px;font-size:11px;font-weight:700;}
.status-pill.good{background:var(--good-bg);color:var(--good);}
.status-pill.warning{background:var(--warn-bg);color:var(--warn);}
.status-pill.critical{background:var(--bad-bg);color:var(--bad);}
.error-box{background:var(--bad-bg);color:var(--bad);border:1px solid #f3c4cc;border-radius:8px;padding:10px 14px;font-size:12.5px;margin-bottom:14px;}
.empresa-item{display:flex;justify-content:space-between;align-items:center;padding:12px;border:1px solid var(--border);border-radius:8px;margin-bottom:8px;cursor:pointer;}
.empresa-item:hover{border-color:var(--brand);}
a.link{color:var(--brand);text-decoration:none;font-weight:600;font-size:12.5px;cursor:pointer;}
.strong{font-weight:800;}
.money{text-align:right;font-variant-numeric:tabular-nums;}
table.data th.money{text-align:right;}

/* Documento imprimible de liquidación / finiquito */
.doc{background:#fff;border:1px solid var(--border);border-radius:10px;padding:28px;max-width:720px;margin:0 auto;}
.doc h2{margin:0;font-size:17px;}
.doc-head{display:flex;justify-content:space-between;gap:20px;border-bottom:2px solid var(--ink);padding-bottom:12px;margin-bottom:14px;}
.doc-meta{font-size:11.5px;color:var(--ink-2);line-height:1.6;}
.doc-cols{display:flex;gap:24px;margin:16px 0;}
.doc-cols>div{flex:1 1 0;}
.doc-section-title{font-size:11px;font-weight:800;text-transform:uppercase;letter-spacing:.04em;color:var(--ink-muted);margin-bottom:6px;}
.doc-line{display:flex;justify-content:space-between;font-size:12.8px;padding:4px 0;border-bottom:1px dashed var(--border);}
.doc-subtotal{display:flex;justify-content:space-between;font-weight:700;padding:8px 0 0;font-size:13px;}
.doc-subtotal-imponible{display:flex;justify-content:space-between;font-weight:700;padding:6px 8px;font-size:13px;background:var(--good-bg);color:var(--good);border-radius:4px;margin:4px 0;}
.doc-liquido{display:flex;justify-content:space-between;align-items:center;background:var(--page);border-radius:8px;padding:14px 16px;margin-top:14px;}
.doc-liquido .ll-label{font-weight:800;font-size:13px;}
.doc-liquido .ll-value{font-weight:800;font-size:20px;color:var(--brand);}
.doc-firma-row{display:flex;justify-content:space-between;align-items:flex-end;gap:24px;margin-top:38px;}
.doc-recibido{flex:1 1 55%;font-size:11.5px;line-height:1.55;}
.doc-firma{flex:0 0 220px;text-align:center;border-top:1px solid var(--ink);padding-top:6px;font-size:12px;font-weight:600;}

/* Tamaño carta al imprimir (liquidación, finiquito, contrato de trabajo) */
@page{ size: letter; margin: 16mm; }
@media print{ body *{visibility:hidden;} #printArea, #printArea *{visibility:visible;} #printArea{position:absolute;left:0;top:0;width:100%;} }

/* Documento legal (Contrato de Trabajo / Finiquito): Times New Roman 14, cláusulas numeradas,
   texto justificado, firma de ambas partes — formato pedido explícitamente por Roberto, siguiendo
   los PDF de ejemplo que compartió. */
.doc-legal{background:#fff;border:1px solid var(--border);border-radius:10px;padding:34px 40px;max-width:800px;margin:0 auto 40px;font-family:"Times New Roman", Times, serif;font-size:14pt;line-height:1.5;color:#111;}
.doc-legal h2{text-align:center;text-decoration:underline;font-size:15pt;margin:0 0 22px;}
.doc-legal p{margin:0 0 16px;text-align:justify;}
.doc-legal .clausula b{text-decoration:none;}
.doc-legal .descripcion-cargo{margin:6px 0 16px 0;padding-left:22px;}
.doc-legal .descripcion-cargo li{margin-bottom:4px;text-align:left;}
.doc-legal .leyenda-turno{font-style:italic;}
.doc-legal .doc-legal-firmas{display:flex;justify-content:space-between;gap:40px;margin-top:60px;text-align:center;}
.doc-legal .doc-legal-firmas div{flex:1 1 0;border-top:1px solid #111;padding-top:6px;}
.doc-legal .doc-legal-header-titulo{font-weight:700;}
.doc-legal-footer{font-size:9pt;color:var(--ink-muted);margin-top:18px;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Helvetica,Arial,sans-serif;}
@media print{ .doc-legal{border:none;padding:0;} }

/* Tabla de horario de turno dentro del Contrato de Trabajo — a pedido de Roberto, reemplaza el
   párrafo de texto corrido (difícil de leer para el trabajador) por una tabla tipo Excel: una
   columna por turno (Mañana/Tarde/Noche...), Entrada/Salida, una fila por día del ciclo. Misma
   tipografía/tamaño que el resto del documento legal (font-size/font-family: inherit). */
.tabla-horario-turno{width:100%;border-collapse:collapse;margin:4px 0 16px;font-size:inherit;font-family:inherit;}
.tabla-horario-turno th,.tabla-horario-turno td{border:1px solid #111;padding:5px 8px;text-align:center;}
.tabla-horario-turno thead th{font-weight:700;}
.tabla-horario-turno .th-colacion{font-weight:400;font-size:0.72em;}
.tabla-horario-turno td.th-dia{font-weight:700;text-align:left;}

/* Insignia "Trabajador Finiquitado" en la ficha del trabajador (Ago 2026, a pedido de Roberto). */
.badge-finiquitado{display:flex;align-items:center;justify-content:space-between;gap:12px;background:var(--bad-bg);color:var(--bad);border:1px solid #f3c4cc;border-radius:8px;padding:10px 14px;font-size:12.5px;font-weight:700;margin-bottom:14px;}

/* Mes cerrado (Sep 2026): informativo, no es un estado "malo" como finiquitado — usa el tono
   azul marino de la marca en vez de rojo. */
.badge-mes-cerrado{display:flex;align-items:center;justify-content:space-between;gap:12px;flex-wrap:wrap;background:var(--brand-wash);color:var(--brand-dark);border:1px solid #cfd9e6;border-radius:8px;padding:10px 14px;font-size:12.5px;font-weight:700;margin-bottom:14px;}

/* Bitácora del trabajador: lista plegable de eventos (finiquito emitido/anulado, etc.). */
.bitacora-detalle{margin-bottom:16px;font-size:12.5px;}
.bitacora-detalle summary{cursor:pointer;font-weight:700;color:var(--ink-2);}
.bitacora-lista{margin-top:8px;border:1px solid var(--border);border-radius:8px;padding:10px 12px;}
.bitacora-item{padding:4px 0;border-bottom:1px dashed var(--border);}
.bitacora-item:last-child{border-bottom:none;}
.bitacora-fecha{color:var(--ink-muted);font-variant-numeric:tabular-nums;}

/* Emisión masiva de liquidaciones: una hoja por trabajador al imprimir. */
.doc-pagina{page-break-after:always;}
.doc-pagina:last-child{page-break-after:auto;}
@media print{ .doc-pagina{margin-bottom:0;} }

/* ---------- Shell principal: topbar + sidebar (Sep 2026) ----------
   A pedido de Roberto: "Menú principal presentado en el DEMO inicial (paleta de colores Gris,
   Azul marino y blanco)". Ver design-ref/JUVE_demo_menu_v20.html — mismo layout, adaptado a
   navegación real (módulos con candado según lo que la empresa tenga contratado, en vez de
   datos de ejemplo fijos). #app pasa a contener el shell completo; $app() (en app.js) apunta a
   #main-content, así todas las pantallas existentes siguen usando $app().innerHTML sin cambios. */
/* Solo cuando el shell está activo (ver app.js: renderShell agrega la clase "app-shell" a #app) —
   así el login y el selector de empresas (que no usan el shell) conservan su layout centrado de
   siempre, con scroll normal de la página. */
html,body{height:100%;}
#app.app-shell{max-width:none;margin:0;padding:0;height:100vh;overflow:hidden;}
.shell{display:flex;flex-direction:column;height:100%;}
.shell-topbar{
  height:56px;flex:0 0 auto;background:var(--card);border-bottom:1px solid var(--border);
  display:flex;align-items:center;padding:0 18px;gap:16px;
}
.shell-topbar .brand{display:flex;align-items:center;gap:8px;font-weight:800;font-size:19px;color:var(--brand-dark);cursor:pointer;user-select:none;flex:0 0 auto;}
/* Isotipo JUVE recortado de la imagen de marca que mandó Roberto (Sep 2026) — mismo logo que en
   el fondo del Login, ahora como ícono chico junto al nombre en el topbar del shell principal. */
.shell-topbar .brand img{height:32px;width:auto;border-radius:6px;display:block;}
.company-select{
  display:flex;align-items:center;gap:6px;background:var(--brand-wash);border:1px solid #cfd9e6;
  padding:6px 12px;border-radius:8px;font-size:13px;color:var(--brand-dark);font-weight:600;cursor:pointer;
}
.company-select:hover{background:#dfe7f1;}
.topbar-spacer{flex:1 1 auto;}
.shell-topbar .user-chip{display:flex;align-items:center;gap:8px;cursor:pointer;padding:4px 10px;border-radius:8px;}
.shell-topbar .user-chip:hover{background:var(--page);}
.shell-topbar .avatar{
  width:30px;height:30px;border-radius:50%;background:var(--brand);color:#fff;font-weight:700;
  font-size:12.5px;display:flex;align-items:center;justify-content:center;flex:0 0 auto;
}
.shell-topbar .user-meta{line-height:1.15;}
.shell-topbar .user-meta .name{font-size:13px;font-weight:700;color:var(--ink);}
.shell-topbar .user-meta .role{font-size:11px;color:var(--ink-muted);}
.shell-body{flex:1 1 auto;display:flex;min-height:0;}
.sidebar{width:240px;flex:0 0 auto;background:var(--card);border-right:1px solid var(--border);overflow-y:auto;padding:12px 8px 40px;}
.sidebar .nav-item{
  display:flex;align-items:center;justify-content:space-between;gap:6px;
  padding:10px 12px;border-radius:8px;cursor:pointer;font-size:13px;color:var(--ink-2);margin-bottom:2px;
  border-left:2px solid transparent;
}
.sidebar .nav-item:hover{background:var(--page);color:var(--ink);}
.sidebar .nav-item.active{background:var(--brand-wash);color:var(--brand-dark);border-left:2px solid var(--brand);font-weight:700;}
.sidebar .nav-item.locked{color:var(--ink-muted);}
.sidebar .nav-item.admin-item{margin-top:14px;border-top:1px solid var(--border);padding-top:14px;}
.lock-tag{
  font-size:9px;font-weight:800;letter-spacing:.3px;color:#9b7a17;background:#fdf1d6;
  border:1px solid #f2dfa8;padding:1px 5px;border-radius:5px;
}
.main{flex:1 1 auto;overflow-y:auto;padding:24px 28px 60px;}
.breadcrumb{font-size:12px;color:var(--ink-muted);margin-bottom:6px;}
.page-title{font-size:21px;font-weight:800;margin:0 0 18px;color:var(--ink);}
.stat-row{display:grid;grid-template-columns:repeat(4,1fr);gap:14px;margin-bottom:22px;}
.stat-tile{background:var(--card);border:1px solid var(--border);border-radius:10px;padding:14px 16px;}
.stat-tile.clickable{cursor:pointer;}
.stat-tile.clickable:hover{border-color:var(--brand);}
.stat-label{font-size:11.5px;color:var(--ink-muted);font-weight:700;text-transform:uppercase;letter-spacing:.4px;}
.stat-value{font-size:22px;font-weight:800;margin-top:6px;color:var(--ink);}
.stat-sub{font-size:11.5px;margin-top:4px;color:var(--ink-2);}
.stat-sub.good{color:var(--good);}
.stat-sub.critical{color:var(--bad);}
.upsell{background:var(--card);border:1px solid var(--border);border-radius:10px;padding:44px 30px;text-align:center;}
.upsell .ico{font-size:30px;margin-bottom:10px;}
.upsell h3{margin:0 0 6px;font-size:16px;color:var(--ink);}
.upsell p{font-size:12.8px;color:var(--ink-2);max-width:440px;margin:0 auto;}
.placeholder-view{background:var(--card);border:1px dashed var(--border-strong);border-radius:10px;padding:60px 30px;text-align:center;color:var(--ink-2);}
.placeholder-view .ico{font-size:34px;margin-bottom:12px;}
.placeholder-view h3{margin:0 0 8px;font-size:16px;color:var(--ink);}
.footnote{margin-top:26px;font-size:11px;color:var(--ink-muted);text-align:center;}
@media (max-width:900px){
  .stat-row{grid-template-columns:repeat(2,1fr);}
}
/* Impresión (liquidaciones, contratos, finiquitos, libros): el shell no debe interferir con las
   reglas de impresión ya existentes más arriba (#printArea) — se anulan sus restricciones de
   alto/overflow para que el documento se imprima igual que antes de que existiera el shell. */
@media print{
  #app.app-shell{height:auto;overflow:visible;}
  .shell{height:auto;}
  .shell-body{overflow:visible;}
  .main{overflow:visible;padding:0;}
  .shell-topbar,.sidebar{display:none;}
}

/* ---------- Menú Remuneraciones + Ficha del Trabajador (Sep 2026) ----------
   A pedido de Roberto, siguiendo el formato Excel que compartió: un menú de módulo (lista
   vertical) en vez de saltar directo a la tabla de trabajadores, y una Ficha de solo lectura por
   trabajador (con un botón "Editar" aparte) que reúne todas las acciones que antes vivían como
   botones sueltos en cada fila de la tabla. */
.menu-lista{display:flex;flex-direction:column;}
.menu-item{display:flex;align-items:center;gap:10px;padding:14px 16px;cursor:pointer;font-size:14px;font-weight:600;color:var(--ink);border-bottom:1px solid var(--border);}
.menu-item:last-child{border-bottom:none;}
.menu-item:hover{background:var(--page);color:var(--brand-dark);}
.ficha-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:28px;margin-top:8px;}
.ficha-seccion-titulo{font-size:11px;font-weight:800;text-transform:uppercase;letter-spacing:.4px;color:var(--ink-muted);margin-bottom:8px;border-bottom:1px solid var(--border);padding-bottom:6px;}
.ficha-dato{display:flex;justify-content:space-between;gap:10px;padding:6px 0;font-size:12.8px;border-bottom:1px dashed var(--border);}
.ficha-dato:last-child{border-bottom:none;}
.ficha-label{color:var(--ink-muted);}
.ficha-valor{color:var(--ink);font-weight:600;text-align:right;}
@media (max-width:900px){ .ficha-grid{grid-template-columns:1fr;} }
