/* ============================================================
   BonoProd · styles.css
   V8.58 — Extraído del <style> inline de index.html (~47KB).
   Permite cacheado independiente del HTML + reduce el size del index.
   Los 2 bloques <style> menores (spinner keyframe + tab-btn) siguen
   inline en index.html porque son pequeños y específicos.
   ============================================================ */

/* ===== VARIABLES ===== */
:root{
  --navy:#1B2D42;--navy2:#243648;--steel:#3D6B8C;--sky:#5B9EC9;
  --bg:#EDF2F7;--white:#fff;--border:#C8D6E0;
  --green:#2A6645;--green2:#358055;--red:#B03535;--red2:#C94040;
  --amber:#906010;--muted:#5F7A8E;--text:#1B2D42;
  --font:'IBM Plex Sans',sans-serif;--mono:'IBM Plex Mono',monospace;
  --r:8px;--sh:0 2px 12px rgba(27,45,66,.1);--sh2:0 8px 32px rgba(27,45,66,.18);
  --sidebar:240px;
}
*,*::before,*::after{box-sizing:border-box;margin:0;padding:0}
html{font-size:16px;scroll-behavior:smooth}
body{font-family:var(--font);background:var(--bg);color:var(--text);min-height:100vh;-webkit-font-smoothing:antialiased}

/* ===== LOGIN ===== */
#pg-login{min-height:100vh;background:linear-gradient(145deg,#0f1e2e 0%,var(--navy) 50%,#1a3050 100%);display:flex;align-items:center;justify-content:center;padding:24px}
.login-box{background:var(--white);border-radius:14px;padding:44px 40px;width:100%;max-width:400px;box-shadow:var(--sh2)}
.login-brand{text-align:center;margin-bottom:36px}
.login-mark{display:inline-flex;align-items:center;justify-content:center;width:60px;height:60px;background:var(--navy);border-radius:14px;font-family:var(--mono);font-size:1.3rem;font-weight:700;color:var(--sky);margin-bottom:14px}
.login-brand h1{font-size:1.6rem;font-weight:700;color:var(--navy)}
.login-brand p{font-size:.82rem;color:var(--muted);margin-top:4px}
.form-group{margin-bottom:18px}
.form-label{display:block;font-size:.75rem;font-weight:700;color:var(--muted);letter-spacing:.5px;text-transform:uppercase;margin-bottom:6px}
.form-input{width:100%;padding:12px 14px;border:1.5px solid var(--border);border-radius:var(--r);font-family:var(--font);font-size:.95rem;color:var(--text);background:#fff;outline:none;transition:border-color .15s,box-shadow .15s}
.form-input:focus{border-color:var(--sky);box-shadow:0 0 0 3px rgba(91,158,201,.15)}
.form-input.has-error{border-color:var(--red)}
select.form-input{cursor:pointer}
textarea.form-input{resize:vertical;min-height:80px}
.form-err{font-size:.8rem;color:var(--red);margin-top:5px;display:none}
.form-err.show{display:block}
.form-hint{font-size:.78rem;color:var(--muted);margin-top:4px}

/* ===== BOTONES ===== */
.btn{display:inline-flex;align-items:center;justify-content:center;gap:6px;padding:10px 18px;border-radius:var(--r);font-family:var(--font);font-size:.875rem;font-weight:600;cursor:pointer;border:none;transition:all .15s;text-decoration:none;white-space:nowrap;line-height:1}
.btn:disabled{opacity:.5;cursor:not-allowed}
.btn-primary{background:var(--navy);color:#fff;width:100%;padding:14px;font-size:1rem}
.btn-primary:hover:not(:disabled){background:var(--navy2)}
.btn-green{background:var(--green);color:#fff}
.btn-green:hover:not(:disabled){background:var(--green2)}
.btn-sky{background:var(--sky);color:#fff}
.btn-sky:hover:not(:disabled){background:#4a8eb8}
.btn-steel{background:var(--steel);color:#fff}
.btn-steel:hover:not(:disabled){background:#2e5270}
.btn-outline{background:transparent;color:var(--steel);border:1.5px solid var(--border)}
.btn-outline:hover:not(:disabled){border-color:var(--steel);color:var(--navy)}
.btn-red{background:var(--red);color:#fff}
.btn-red:hover:not(:disabled){background:var(--red2)}
.btn-amber{background:var(--amber);color:#fff}
.btn-sm{padding:6px 12px;font-size:.8rem}
.btn-xs{padding:4px 8px;font-size:.75rem;border-radius:5px}
.btn-icon{padding:7px;border-radius:6px}
.btn-full{width:100%}

/* ===== APP SHELL ===== */
#app-shell{display:none;min-height:100vh}
#app-shell.visible{display:flex}

/* V8.15: el ancho del sidebar es una variable que cambia al colapsar.
   Al cambiar --sidebar todo lo que la referencia (margin de #main,
   left de la changebar, etc.) sigue automáticamente la nueva medida. */
body.sb-collapsed{--sidebar:64px}

/* Sidebar */
#sidebar{width:var(--sidebar);min-height:100vh;background:var(--navy);display:flex;flex-direction:column;position:fixed;top:0;left:0;bottom:0;z-index:200;overflow-y:auto;overflow-x:hidden;transition:width .2s ease}
.sb-logo{padding:22px 20px 14px;border-bottom:1px solid rgba(255,255,255,.07);position:relative}
.sb-logo-main{font-family:var(--mono);font-size:1.25rem;font-weight:700;color:var(--sky);white-space:nowrap;overflow:hidden}
.sb-logo-sub{font-size:.68rem;color:rgba(255,255,255,.4);letter-spacing:2px;text-transform:uppercase;margin-top:2px;white-space:nowrap;overflow:hidden}
.sb-user{padding:14px 20px;border-bottom:1px solid rgba(255,255,255,.07)}
.sb-user-name{font-size:.875rem;font-weight:700;color:#fff;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.sb-user-role{font-size:.7rem;color:var(--sky);text-transform:uppercase;letter-spacing:1px;margin-top:2px}
.sb-user-turno{font-size:.7rem;color:rgba(255,255,255,.35);margin-top:2px}
.sb-nav{padding:10px 0;flex:1}
.sb-section{padding:10px 20px 3px;font-size:.62rem;font-weight:700;letter-spacing:2px;text-transform:uppercase;color:rgba(255,255,255,.22);white-space:nowrap;overflow:hidden}
.nav-link{display:flex;align-items:center;gap:10px;padding:9px 20px;color:rgba(255,255,255,.6);font-size:.85rem;cursor:pointer;border-left:3px solid transparent;transition:all .15s;user-select:none;white-space:nowrap;overflow:hidden}
.nav-link:hover{background:rgba(255,255,255,.05);color:#fff}
.nav-link.active{background:rgba(91,158,201,.12);color:var(--sky);border-left-color:var(--sky)}
.nav-link .ni{width:18px;text-align:center;font-size:.95rem;flex-shrink:0}
.sb-footer{padding:14px 20px;border-top:1px solid rgba(255,255,255,.07)}
.btn-logout{width:100%;padding:8px;background:rgba(176,53,53,.18);color:#e87a7a;border:1px solid rgba(176,53,53,.25);border-radius:6px;font-size:.8rem;cursor:pointer;font-family:var(--font);transition:all .15s}
.btn-logout:hover{background:rgba(176,53,53,.32)}
/* V9.1: logo corporativo al pie de la barra — recuadro blanco para contraste con --navy */
.sb-brand{margin-top:12px;padding:9px 12px;background:#fff;border-radius:10px;display:flex;align-items:center;justify-content:center;box-shadow:0 1px 4px rgba(0,0,0,.25)}
.sb-brand-img{width:100%;max-width:172px;height:auto;display:block}

/* V8.15: botón para colapsar/expandir el sidebar (solo desktop) */
.sb-toggle{position:absolute;top:18px;right:8px;width:26px;height:26px;border-radius:6px;background:rgba(255,255,255,.06);color:#fff;border:1px solid rgba(255,255,255,.12);font-size:.85rem;cursor:pointer;display:flex;align-items:center;justify-content:center;transition:all .15s}
.sb-toggle:hover{background:rgba(91,158,201,.25);border-color:var(--sky)}
@media(max-width:767px){.sb-toggle{display:none}}

/* V8.15: estado COLAPSADO — solo iconos visibles */
body.sb-collapsed .sb-logo-main,
body.sb-collapsed .sb-logo-sub,
body.sb-collapsed .sb-user,
body.sb-collapsed .sb-section,
body.sb-collapsed .btn-logout-text,
body.sb-collapsed .sb-brand{display:none}
body.sb-collapsed .sb-logo{padding:14px 0;text-align:center}
body.sb-collapsed .sb-toggle{position:static;margin:0 auto;display:flex}
body.sb-collapsed .nav-link{padding:11px 0;justify-content:center;font-size:0;gap:0;border-left-width:0;border-right:3px solid transparent}
body.sb-collapsed .nav-link.active{border-right-color:var(--sky)}
body.sb-collapsed .nav-link .ni{font-size:1.25rem;width:auto}
body.sb-collapsed .sb-footer{padding:10px 8px;text-align:center}
body.sb-collapsed .btn-logout{font-size:1.1rem;padding:8px 0}

/* Main content
   V8.15: min-width:0 es CRÍTICO. Sin esto, el flex item #main se expande
   con el contenido (la tabla del calendario es muy ancha) y el scroll
   horizontal aparece a nivel de página en vez de dentro de la tabla.
   Con min-width:0 el flex item respeta el ancho del viewport y los
   contenedores con overflow:auto crean su propio scroll interno. */
#main{margin-left:var(--sidebar);flex:1;display:flex;flex-direction:column;min-height:100vh;min-width:0;transition:margin-left .2s ease}
.mobile-bar{display:none;background:var(--navy);padding:14px 16px;align-items:center;justify-content:space-between;position:sticky;top:0;z-index:100}
.mobile-bar .logo{font-family:var(--mono);font-size:1.05rem;font-weight:700;color:var(--sky)}
.btn-menu{background:none;border:none;color:#fff;font-size:1.3rem;cursor:pointer;padding:4px}
/* V8.15: min-width:0 + max-width:100% impide que el contenido (p. ej. la
   tabla ancha del calendario) expanda el ancho de #main por encima del
   viewport y dispare un scroll a nivel de página. */
.content{padding:28px;flex:1;min-width:0;max-width:100%}

/* Sidebar overlay (mobile) */
.sb-overlay{display:none;position:fixed;inset:0;background:rgba(0,0,0,.5);z-index:199}

/* ===== RESPONSIVE ===== */
@media(max-width:767px){
  /* V8.15: en mobile el sidebar es overlay con hamburger, NO se colapsa
     a iconos. Anulamos la regla body.sb-collapsed para que abra al ancho
     completo (240px) y se vean los textos. */
  body.sb-collapsed{--sidebar:240px}
  body.sb-collapsed .sb-logo-main,
  body.sb-collapsed .sb-logo-sub,
  body.sb-collapsed .sb-user,
  body.sb-collapsed .sb-section,
  body.sb-collapsed .btn-logout-text{display:revert}
  body.sb-collapsed .nav-link{padding:9px 20px;justify-content:flex-start;font-size:.85rem;gap:10px;border-left-width:3px;border-right:0}
  body.sb-collapsed .nav-link .ni{font-size:.95rem;width:18px}
  body.sb-collapsed .sb-logo{padding:22px 20px 14px;text-align:left}
  body.sb-collapsed .sb-toggle{display:none}

  #sidebar{transform:translateX(-100%)}
  #sidebar.open{transform:translateX(0)}
  .sb-overlay.open{display:block}
  #main{margin-left:0}
  .mobile-bar{display:flex}
  .content{padding:16px}
}

/* ===== PAGES ===== */
.page{display:none}
.page.active{display:block}

/* ===== PAGE HEADER ===== */
.page-head{display:flex;align-items:flex-start;justify-content:space-between;margin-bottom:24px;gap:16px;flex-wrap:wrap}
.page-title{font-size:1.3rem;font-weight:700;color:var(--navy)}
.page-sub{font-size:.83rem;color:var(--muted);margin-top:2px}
.page-actions{display:flex;gap:8px;flex-wrap:wrap;align-items:center}

/* ===== CARDS ===== */
.card{background:var(--white);border:1px solid var(--border);border-radius:10px;box-shadow:var(--sh)}
.card-body{padding:20px}
.card-header{padding:14px 20px;border-bottom:1px solid var(--border);display:flex;align-items:center;justify-content:space-between}
.card-title{font-size:.9rem;font-weight:700;color:var(--navy)}

/* ===== STATS ===== */
.stats-row{display:grid;grid-template-columns:repeat(auto-fit,minmax(140px,1fr));gap:12px;margin-bottom:20px}
.stat{background:var(--white);border:1px solid var(--border);border-radius:10px;padding:16px;text-align:center;box-shadow:var(--sh)}
.stat-val{font-family:var(--mono);font-size:1.8rem;font-weight:700;color:var(--navy);line-height:1}
.stat-lbl{font-size:.7rem;color:var(--muted);text-transform:uppercase;letter-spacing:.5px;margin-top:6px}
.stat-sub{font-size:.72rem;color:var(--muted);margin-top:3px}
.op-stat{cursor:pointer;transition:transform .12s,box-shadow .12s,border-color .12s}
.op-stat:hover{transform:translateY(-2px);box-shadow:0 4px 16px rgba(0,0,0,.1)}
.op-stat.active-filter{border-width:2px}
.op-stat-activo      .stat-val{color:var(--green)}
.op-stat-activo.active-filter{border-color:var(--green);background:#f0faf4}
.op-stat-cesado      .stat-val{color:var(--muted)}
.op-stat-cesado.active-filter{border-color:var(--muted)}
.op-stat-suspendido  .stat-val{color:var(--red)}
.op-stat-suspendido.active-filter{border-color:var(--red);background:#fdf4f4}
.op-stat-descanso_medico .stat-val{color:var(--amber)}
.op-stat-descanso_medico.active-filter{border-color:var(--amber);background:#fdf9ee}
.op-stat-vacaciones  .stat-val{color:var(--sky)}
.op-stat-vacaciones.active-filter{border-color:var(--sky);background:#f0f7fd}
.op-stat-compensacion .stat-val{color:var(--navy)}
.op-stat-compensacion.active-filter{border-color:var(--navy);background:#f0f2f6}
.op-stat-total       .stat-val{color:var(--navy)}
.col-toggle-lbl{display:inline-flex;align-items:center;gap:5px;font-size:.75rem;color:var(--steel);cursor:pointer;padding:3px 8px;border-radius:20px;border:1px solid var(--border);background:var(--bg);user-select:none;transition:all .15s}
.col-toggle-lbl:hover{background:var(--bgd)}
.col-toggle-lbl input[type=checkbox]{accent-color:var(--navy)}

/* V8.64: mosaicos clickeables de Evaluacion Diaria — filtran la lista por estado */
.ev-stat-click{cursor:pointer;transition:transform .12s, box-shadow .12s, border-color .12s, background .12s;user-select:none}
.ev-stat-click:hover{transform:translateY(-2px);box-shadow:0 4px 16px rgba(0,0,0,.1)}
.ev-stat-click.active-filter{border:2px solid var(--navy);background:rgba(91,158,201,.06)}
.ev-stat-click.ev-stat-comp.active-filter{border-color:var(--green);background:#f0faf4}
.ev-stat-click.ev-stat-parc.active-filter{border-color:var(--amber);background:#fdf9ee}
.ev-stat-click.ev-stat-pend.active-filter{border-color:var(--muted);background:#f5f7f9}
/* V8.66: mosaico No disponibles (descanso/compensacion/DM/licencia/vacaciones/suspendido) */
.ev-stat-click.ev-stat-nodisp.active-filter{border-color:var(--red);background:#fdf4f4}

/* V8.74: grid de operarios clickeables (Reporte por Operario, vista lista) */
.ro-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(260px,1fr));gap:10px}
.ro-card{background:#fff;border:1.5px solid var(--border);border-radius:10px;padding:12px 14px;
         display:flex;align-items:center;gap:12px;cursor:pointer;transition:all .15s;
         user-select:none}
.ro-card:hover{border-color:var(--sky);transform:translateY(-2px);box-shadow:0 4px 16px rgba(27,45,66,.12)}
.ro-card.cesado{background:#f8f8f8;opacity:.7}
.ro-card-avatar{width:42px;height:42px;border-radius:50%;background:var(--steel);color:#fff;
                display:flex;align-items:center;justify-content:center;font-weight:700;font-size:.85rem;
                font-family:var(--mono);flex-shrink:0;letter-spacing:.5px}
.ro-card.cesado .ro-card-avatar{background:var(--muted)}
.ro-card-body{flex:1;min-width:0}
.ro-card-name{font-size:.88rem;font-weight:700;color:var(--navy);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.ro-card-meta{font-size:.7rem;color:var(--muted);font-family:var(--mono);margin-top:2px}
.ro-card-tags{margin-top:4px;display:flex;gap:4px;flex-wrap:wrap}
.ro-card-tag{font-size:.62rem;background:#EDF4FB;color:var(--steel);padding:1px 6px;border-radius:8px;font-weight:600}
.ro-card-tag.cesado{background:#FAEDED;color:var(--red)}

/* ===== TABLE ===== */
.tbl-wrap{overflow-x:auto;border-radius:var(--r)}
table{width:100%;border-collapse:collapse;font-size:.855rem}
thead th{background:var(--navy);color:rgba(255,255,255,.75);padding:10px 12px;text-align:left;font-size:.7rem;font-weight:600;text-transform:uppercase;letter-spacing:.5px;white-space:nowrap}
tbody tr{border-bottom:1px solid var(--border)}
tbody tr:hover{background:rgba(91,158,201,.04)}
tbody td{padding:10px 12px;vertical-align:middle}

/* ===== BADGES ===== */
.badge{display:inline-block;padding:2px 9px;border-radius:99px;font-size:.72rem;font-weight:700;font-family:var(--mono);white-space:nowrap}
.bg-green{background:rgba(42,102,69,.12);color:var(--green)}
.bg-sky{background:rgba(91,158,201,.12);color:var(--steel)}
.bg-red{background:rgba(176,53,53,.12);color:var(--red)}
.bg-amber{background:rgba(144,96,16,.12);color:var(--amber)}
.bg-gray{background:rgba(95,122,142,.12);color:var(--muted)}
.bg-navy{background:rgba(27,45,66,.12);color:var(--navy)}

/* ===== TOGGLE BUTTONS ===== */
.toggle-grp{display:grid;grid-template-columns:1fr 1fr;gap:8px}
.t-btn{padding:12px;border-radius:var(--r);border:2px solid var(--border);background:#f8fafb;color:var(--muted);font-size:.875rem;font-weight:600;cursor:pointer;font-family:var(--font);transition:all .15s;text-align:center}
.t-btn.yes{border-color:var(--green);background:rgba(42,102,69,.08);color:var(--green)}
.t-btn.no{border-color:var(--red);background:rgba(176,53,53,.08);color:var(--red)}

/* ===== PROGRESS BAR ===== */
.prog-wrap{height:6px;background:var(--border);border-radius:99px;overflow:hidden;margin-bottom:6px}
.prog-fill{height:100%;border-radius:99px;background:linear-gradient(90deg,var(--steel),var(--sky));transition:width .4s}

/* ===== EVAL STATUS ICONS ===== */
.status-complete{color:var(--green);font-size:1.1rem}
.status-partial{color:var(--amber);font-size:1.1rem}
.status-pending{color:var(--muted);font-size:1.1rem}

/* ===== OPERARIO LIST ===== */
.op-list{display:flex;flex-direction:column;gap:8px}
.op-item{display:flex;align-items:center;gap:12px;padding:12px 16px;background:var(--white);border:1px solid var(--border);border-radius:10px;cursor:pointer;transition:all .15s;box-shadow:var(--sh)}
.op-item:hover{border-color:var(--sky);transform:translateY(-1px);box-shadow:0 4px 16px rgba(27,45,66,.12)}
.avatar{width:40px;height:40px;min-width:40px;border-radius:10px;background:var(--steel);color:#fff;display:flex;align-items:center;justify-content:center;font-family:var(--mono);font-size:.78rem;font-weight:700}
.avatar.complete{background:var(--green)}
.avatar.partial{background:var(--amber)}
.op-info{flex:1;min-width:0}
.op-name{font-size:.9rem;font-weight:600;color:var(--navy);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.op-meta{font-size:.75rem;color:var(--muted);margin-top:2px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}

/* ===== EVAL FORM ===== */
.eval-hdr{background:var(--navy);color:#fff;padding:20px;border-radius:10px 10px 0 0;margin-bottom:0}
.eval-hdr h2{font-size:1rem;font-weight:700}
.eval-hdr p{font-size:.78rem;color:rgba(255,255,255,.55);margin-top:4px}
.crit-card{background:var(--white);border:1px solid var(--border);border-radius:var(--r);padding:16px;margin-bottom:12px}
.crit-tag{font-size:.65rem;font-weight:700;letter-spacing:1.5px;text-transform:uppercase;color:var(--muted);margin-bottom:3px}
.crit-title{font-size:.92rem;font-weight:700;color:var(--navy);margin-bottom:12px}
.c1-row{display:grid;grid-template-columns:1fr 1fr 100px;gap:8px;align-items:end}
.c1-result{padding:12px 10px;background:var(--bg);border:1.5px solid var(--border);border-radius:var(--r);font-family:var(--mono);font-size:1rem;font-weight:700;color:var(--navy);text-align:center}
.alert-c4{display:none;background:rgba(176,53,53,.09);border:1.5px solid var(--red);border-radius:var(--r);padding:10px 14px;margin-top:10px;color:var(--red);font-size:.85rem;font-weight:600;gap:8px;align-items:center}
.alert-c4.show{display:flex}
.bono-strip{background:var(--navy);border-radius:var(--r);padding:14px 16px;display:grid;grid-template-columns:repeat(4,1fr) auto;gap:8px;align-items:center;margin-bottom:16px}
.bs-item{text-align:center}
.bs-val{font-family:var(--mono);font-size:.95rem;font-weight:700;color:var(--sky)}
.bs-lbl{font-size:.6rem;color:rgba(255,255,255,.4);text-transform:uppercase;margin-top:2px}
.bs-total{background:rgba(91,158,201,.15);border-radius:6px;padding:8px 14px;text-align:center;min-width:80px}
.bs-total .v{font-family:var(--mono);font-size:1.2rem;font-weight:700;color:#fff}
.bs-total .l{font-size:.6rem;color:rgba(255,255,255,.45)}
.bs-total.inv .v{color:var(--red)}

/* ===== CONFIRM ===== */
.confirm-grid{display:grid;grid-template-columns:1fr 1fr;gap:10px;margin-bottom:16px}
.ci{background:var(--bg);border-radius:var(--r);padding:14px;text-align:center}
.ci-val{font-family:var(--mono);font-size:1.3rem;font-weight:700;color:var(--navy)}
.ci-lbl{font-size:.7rem;color:var(--muted);margin-top:4px}
.bono-big{border-radius:10px;padding:28px;text-align:center;margin-bottom:16px}
.bono-big.ok{background:linear-gradient(135deg,var(--green),#1a4028)}
.bono-big.inv{background:linear-gradient(135deg,var(--red),#7a2020)}
.bono-big .bp{font-family:var(--mono);font-size:3.2rem;font-weight:700;color:#fff;line-height:1}
.bono-big .bt{font-size:.85rem;color:rgba(255,255,255,.65);margin-top:8px}

/* ===== FILTERS ===== */
.filter-row{display:flex;gap:8px;margin-bottom:16px;flex-wrap:wrap;align-items:center}
.sel{padding:8px 12px;border:1.5px solid var(--border);border-radius:var(--r);font-family:var(--font);font-size:.855rem;color:var(--text);background:var(--white);outline:none;cursor:pointer;transition:border-color .15s}
.sel:focus{border-color:var(--sky)}
.inp{padding:8px 12px;border:1.5px solid var(--border);border-radius:var(--r);font-family:var(--font);font-size:.855rem;color:var(--text);background:var(--white);outline:none;transition:border-color .15s}
.inp:focus{border-color:var(--sky)}
.search-wrap{position:relative;flex:1;min-width:180px}
.search-wrap input{width:100%;padding:8px 12px 8px 36px;border:1.5px solid var(--border);border-radius:var(--r);font-family:var(--font);font-size:.855rem;outline:none;transition:border-color .15s}
.search-wrap input:focus{border-color:var(--sky)}
.search-icon{position:absolute;left:11px;top:50%;transform:translateY(-50%);color:var(--muted);pointer-events:none}

/* ===== SEMAPHORE COLORS ===== */
.pct-hi{color:var(--green);font-weight:700;font-family:var(--mono)}
.pct-mid{color:var(--steel);font-weight:700;font-family:var(--mono)}
.pct-lo{color:var(--red);font-weight:700;font-family:var(--mono)}
.mono{font-family:var(--mono)}

/* ===== LOADING / TOAST / MODAL ===== */
#overlay{display:none;position:fixed;inset:0;background:rgba(27,45,66,.55);z-index:9999;flex-direction:column;align-items:center;justify-content:center;backdrop-filter:blur(2px)}
#overlay.on{display:flex}
.spinner{width:44px;height:44px;border:3px solid rgba(255,255,255,.2);border-top-color:var(--sky);border-radius:50%;animation:spin .7s linear infinite}
@keyframes spin{to{transform:rotate(360deg)}}
#toasts{position:fixed;bottom:24px;right:24px;z-index:9998;display:flex;flex-direction:column;gap:8px}
.toast{padding:12px 18px;border-radius:var(--r);font-size:.875rem;font-weight:500;color:#fff;box-shadow:var(--sh2);animation:tin .25s;min-width:220px;max-width:380px}
.toast.s{background:var(--green)}.toast.e{background:var(--red)}.toast.i{background:var(--steel)}.toast.w{background:var(--amber)}
@keyframes tin{from{transform:translateX(100%);opacity:0}to{transform:translateX(0);opacity:1}}
.modal-bg{display:none;position:fixed;inset:0;background:rgba(27,45,66,.55);z-index:1000;align-items:center;justify-content:center;padding:16px;backdrop-filter:blur(2px)}
.modal-bg.on{display:flex}
.modal{background:var(--white);border-radius:12px;width:100%;max-width:520px;box-shadow:var(--sh2);max-height:92vh;overflow-y:auto}
.modal-head{padding:18px 20px;border-bottom:1px solid var(--border);display:flex;align-items:center;justify-content:space-between}
.modal-title{font-size:1rem;font-weight:700;color:var(--navy)}
.modal-close{background:none;border:none;font-size:1.2rem;cursor:pointer;color:var(--muted);padding:4px}
.modal-body{padding:20px}
.modal-foot{padding:14px 20px;border-top:1px solid var(--border);display:flex;gap:8px;justify-content:flex-end}

/* ===== EMPTY STATE ===== */
.empty{text-align:center;padding:48px 24px;color:var(--muted)}
.empty-ico{font-size:2.8rem;margin-bottom:12px}
.empty-title{font-size:.95rem;font-weight:700;color:var(--navy);margin-bottom:4px}

/* ===== UTILS ===== */
.hidden{display:none!important}
.mt2{margin-top:8px}.mt4{margin-top:16px}.mb4{margin-bottom:16px}
.flex{display:flex}.gap2{gap:8px}.gap3{gap:12px}.items-center{align-items:center}.justify-between{justify-content:space-between}
.text-sm{font-size:.85rem}.text-xs{font-size:.78rem}.text-muted{color:var(--muted)}
.fw6{font-weight:600}.fw7{font-weight:700}
.grid2{display:grid;grid-template-columns:1fr 1fr;gap:12px}
.chart-container{min-height:300px;padding:16px}

/* ── GESTIÓN DE ESTADOS ── */
.estado-badge{display:inline-flex;align-items:center;gap:4px;padding:3px 9px;border-radius:20px;font-size:.72rem;font-weight:600;white-space:nowrap}
.eb-activo{background:#e6f4ec;color:#1a5c35;border:1px solid #a3d4b5}
.eb-cesado{background:#f0f0f0;color:#555;border:1px solid #ccc}
.eb-suspendido{background:#fdecea;color:#8b1a1a;border:1px solid #f0b0b0}
.eb-descanso_medico{background:#fff8e6;color:#7a4f00;border:1px solid #f0d080}
.eb-vacaciones{background:#e6f3fb;color:#1a4a7a;border:1px solid #90c4e8}
.eb-compensacion{background:#ece6fb;color:#3a1a7a;border:1px solid #b090e8}
.ult-estado-strip{font-size:.7rem;color:var(--muted);margin-top:2px;display:flex;align-items:center;gap:4px;flex-wrap:wrap}

/* ── EST OP ITEM ── */
.est-op-item{padding:10px 14px;border-bottom:1px solid var(--bgd);cursor:pointer;
             display:flex;align-items:center;gap:10px;transition:background .12s}
.est-op-item:hover{background:#f4f8fc}
.est-op-item.selected{background:#e8f0fb;border-left:3px solid var(--navy)}
.est-op-avatar{width:36px;height:36px;border-radius:9px;background:var(--bgd);
               border:1.5px solid var(--border);display:flex;align-items:center;
               justify-content:center;font-size:.75rem;font-weight:700;color:var(--steel);flex-shrink:0}
.est-op-item.selected .est-op-avatar{background:var(--navy);color:#fff;border-color:var(--navy)}
.est-op-nombre{font-size:.85rem;font-weight:600;color:var(--text)}
.est-op-meta{font-size:.72rem;color:var(--muted);font-family:var(--mono);margin-top:1px}
.hist-item{background:var(--bg);border:1px solid var(--border);border-radius:8px;
           padding:8px 10px;font-size:.75rem}
.hist-item-head{display:flex;justify-content:space-between;align-items:center;margin-bottom:3px}
.hist-item-fechas{color:var(--muted);font-family:var(--mono);font-size:.7rem}
.hist-item-motivo{color:var(--muted);margin-top:2px;font-style:italic}

/* ══════ V7.5 Programación ══════ */
.pg-vista{display:flex;align-items:center}
.pm-dia{display:inline-flex;align-items:center;justify-content:center;gap:3px;
        padding:5px 9px;border:1.5px solid var(--border);border-radius:8px;
        background:#fff;cursor:pointer;font-size:.78rem;font-weight:600;color:var(--muted);
        font-family:var(--mono);user-select:none;transition:all .15s}
.pm-dia:has(input:checked){background:var(--navy);color:#fff;border-color:var(--navy)}
.pm-dia input{display:none}
.pm-op-row{display:flex;align-items:center;gap:8px;padding:5px 4px;cursor:pointer;
           font-size:.82rem;border-bottom:1px solid var(--bg)}
.pm-op-row:last-child{border-bottom:none}
.pm-op-row:hover{background:var(--bg)}
.pm-op-row input[type=checkbox]{flex-shrink:0;cursor:pointer}
.pm-op-row .pm-op-nombre{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.pm-op-row .pm-op-tags{font-size:.68rem;color:var(--muted);font-family:var(--mono);flex-shrink:0}
.pg-dia-badge{display:inline-block;padding:2px 7px;border-radius:5px;background:var(--bg);
              font-family:var(--mono);font-size:.68rem;font-weight:600;color:var(--steel);
              text-transform:uppercase;letter-spacing:.3px}
.pg-turno-badge{display:inline-block;padding:3px 9px;border-radius:6px;font-size:.7rem;
                font-weight:700;font-family:var(--mono);letter-spacing:.3px}
.pg-turno-DIA{background:#EDF4FB;color:var(--navy)}
.pg-turno-TARDE{background:#FDF7E8;color:var(--amber)}
.pg-turno-NOCHE{background:#EAEEF5;color:var(--steel)}
.pg-turno-FIN{background:#EEF6F1;color:var(--green)}

/* ══════ V8.6 Programación 2 — Vista calendario (consolidado) ══════ */
.p2-cal{width:auto;border-collapse:separate !important;border-spacing:0;font-family:var(--sans);min-width:max-content}
.p2-cal th{padding:8px 6px;text-align:center;
           font-size:.72rem;letter-spacing:.3px;font-weight:600;
           border-right:1px solid #2A4055}
.p2-cal th.p2-th-day{min-width:64px;max-width:90px;width:64px;cursor:default;background:#1B2D42;color:#fff}
.p2-cal th.p2-th-day strong{display:block;font-size:.85rem}
.p2-cal th.p2-th-day .p2-th-fecha{font-size:.65rem;color:rgba(255,255,255,.55);font-weight:400;letter-spacing:.2px}
.p2-cal td{border-bottom:1px solid #E2EAF2;border-right:1px solid #E2EAF2;
           padding:3px 3px;text-align:center;height:36px;vertical-align:middle}
.p2-cal td.p2-td-op{text-align:left;padding:4px 10px;background:#FAFAF7;font-size:.8rem}
.p2-cal tr.p2-noeval td.p2-td-op{background:#FAF0F0}
/* V8.3: zebra rows + hover de fila completa más visible */
.p2-cal tbody tr:nth-child(even) td{background:#FAFCFE}
.p2-cal tbody tr:nth-child(even) td.p2-td-op{background:#F2F5F8}
.p2-cal tbody tr:nth-child(even) td.p2-td-meta-1,
.p2-cal tbody tr:nth-child(even) td.p2-td-meta-2,
.p2-cal tbody tr:nth-child(even) td.p2-td-meta-3,
.p2-cal tbody tr:nth-child(even) td.p2-td-meta{background:#F4F7FA}
.p2-cal tbody tr:hover td{background:#FFF6CC !important}
.p2-cal tbody tr:hover td.p2-td-op{background:#FFE89A !important;font-weight:700}
.p2-op-name{font-weight:700;color:var(--text);line-height:1.15}
.p2-op-meta{font-size:.65rem;color:var(--muted);font-family:ui-monospace,monospace;margin-top:1px}
.p2-cell{display:inline-block;width:42px;height:30px;line-height:26px;
         border-radius:7px;font-family:ui-monospace,monospace;font-size:.82rem;font-weight:800;
         cursor:pointer;user-select:none;transition:transform .12s, box-shadow .12s;
         border:2px solid transparent;letter-spacing:.5px}
.p2-cell:hover{transform:scale(1.12);box-shadow:0 3px 10px rgba(27,45,66,.28);z-index:4;position:relative}
.p2-cell-empty{background:transparent;color:transparent;border-color:#E2EAF2;border-style:dashed;border-width:1.5px}
.p2-cell-empty:hover{background:#F4F8FC;color:#5F7A8E;border-color:#5B9EC9;border-style:solid}
/* V7.16: columnas meta y finsem */
.p2-cal th.p2-th-meta{background:#24394F;text-align:left;padding-left:10px;
  font-size:.7rem;letter-spacing:.5px;font-weight:600;min-width:90px;max-width:150px}
.p2-cal td.p2-td-meta{text-align:left;padding:6px 10px;background:#FAFBFC;
  font-size:.78rem;color:var(--text);border-right:1px solid #E2EAF2}
.p2-cal th.p2-finsem{background:#3D4A60}
.p2-cal td.p2-finsem-cell{background:#F7F9FB}
.p2-vista-btn{padding:6px 14px;background:#fff;border:1.5px solid #C8D6E0;
  color:#3D6B8C;border-radius:0;font-weight:600;cursor:pointer;font-size:.85rem;border-right-width:0}
.p2-vista-btn:first-child{border-radius:7px 0 0 7px}
.p2-vista-btn:last-child{border-radius:0 7px 7px 0;border-right-width:1.5px}
.p2-vista-btn.active{background:#1B2D42;color:#fff;border-color:#1B2D42}

/* V8.5: toolbar agrupada en filas */
.p2-toolbar{padding:0;margin-bottom:14px;overflow:hidden}
.p2-tb-row{display:flex;flex-wrap:wrap;gap:8px;align-items:center;padding:10px 14px}
.p2-tb-row + .p2-tb-row{border-top:1px solid var(--border)}
.p2-tb-nav{background:#F4F8FB}
.p2-tb-nav .p2-tb-vista{display:inline-flex}
.p2-tb-filters{background:#fff}
.p2-tb-leyenda{background:#FAFCFE;padding:8px 14px;font-size:.78rem}
.p2-tb-label{font-size:.72rem;font-weight:700;color:var(--muted);text-transform:uppercase;letter-spacing:.4px;margin-right:4px}
.p2-tb-spacer{flex:1}
.p2-tb-count{font-size:.8rem;font-weight:700;color:var(--navy);background:#EDF4FB;padding:5px 12px;border-radius:14px;border:1.5px solid #5B9EC9;white-space:nowrap}

/* V8.7: contador compacto top-right (siempre visible, todas las vistas) */
.p2-tb-count-rich{display:inline-flex;gap:6px;flex-wrap:nowrap;align-items:center}
.p2-cnt-pill{display:inline-flex;align-items:center;gap:5px;font-size:.74rem;font-weight:600;padding:4px 10px;border-radius:14px;border:1.5px solid;white-space:nowrap}
.p2-cnt-pill strong{font-size:.95rem;font-weight:800;font-family:ui-monospace,monospace;line-height:1}
.p2-cnt-total{background:#EDF4FB;color:var(--navy);border-color:#5B9EC9}
.p2-cnt-asig {background:#EEF6F1;color:#2A6645;border-color:#A0C4B0}
.p2-cnt-sin  {background:#FEF5E7;color:#8B5A00;border-color:#E8B86A}
.p2-cnt-sin.alert{background:#FAEDED;color:#B03535;border-color:#D4A0A0;animation:p2pulseAlert 2s ease-in-out infinite}
@keyframes p2pulseAlert{0%,100%{box-shadow:0 0 0 0 rgba(176,53,53,.3)}50%{box-shadow:0 0 0 6px rgba(176,53,53,0)}}
.p2-ctx-toggle{display:inline-flex;align-items:center;gap:6px;font-size:.78rem;font-weight:600;color:var(--navy);background:#fff;border:1.5px solid var(--border);padding:5px 10px;border-radius:7px;cursor:pointer;user-select:none}
.p2-ctx-toggle:hover{border-color:#5B9EC9;background:#F4F8FB}
.p2-ctx-toggle input{margin:0;cursor:pointer}

/* V8.9: toggle "Mostrar Total / Cesados" en módulo Operarios */
.op-toggle-vis{display:inline-flex;align-items:center;gap:5px;font-size:.78rem;font-weight:600;color:var(--muted);background:#fff;border:1.5px solid var(--border);padding:4px 9px;border-radius:6px;cursor:pointer;user-select:none}
.op-toggle-vis:hover{color:var(--navy);border-color:#5B9EC9;background:#F4F8FB}
.op-toggle-vis input{margin:0;cursor:pointer}
.op-stat-hc{background:linear-gradient(135deg,#1B2D42,#2A4055);color:#fff;border:0}
.op-stat-hc .stat-val{color:#FFC107;font-size:1.7rem}
.op-stat-hc .stat-lbl{color:#fff;opacity:.95}
.op-stat-hc .stat-sub{color:rgba(255,255,255,.65)}

/* V8.5: changebar sticky al fondo del viewport
   V8.15: transition:left para acompañar al sidebar al colapsarse/expandirse */
.p2-changebar-sticky{
  position:fixed;
  bottom:14px;
  left:calc(var(--sidebar) + 24px);
  right:24px;
  padding:12px 18px;
  background:#1B2D42;
  border:2px solid #FFC107;
  border-radius:10px;
  box-shadow:0 6px 24px rgba(0,0,0,.25);
  z-index:50;
  animation:p2barFade .25s ease-out;
  transition:left .2s ease
}
@keyframes p2barFade{from{transform:translateY(20px);opacity:0}to{transform:translateY(0);opacity:1}}
@media (max-width:900px){.p2-changebar-sticky{left:12px;right:12px}}

/* ══════ V7.17 — Listas tabulares en Gestión de Operarios ══════ */
.go-tbl{width:100%;border-collapse:collapse;font-size:.82rem}
.go-tbl thead th{background:#24394F;color:#fff;text-align:left;padding:8px 10px;
  font-size:.7rem;letter-spacing:.5px;font-weight:600;text-transform:uppercase;
  position:sticky;top:0;z-index:1;white-space:nowrap}
.go-tbl tbody tr{border-bottom:1px solid #E2EAF2}
.go-tbl tbody tr:hover{background:#F4F8FC}
.go-tbl tbody tr.go-tr-selected{background:#EDF4FB}
.go-tbl td{padding:7px 10px;vertical-align:middle}
.go-tbl td.go-cb{width:34px;text-align:center}
.go-tbl td.go-dni{font-family:ui-monospace,monospace;color:var(--muted);width:90px;white-space:nowrap}
.go-tbl td.go-name{font-weight:600;color:var(--text);min-width:180px}
.go-tbl td.go-cargo,.go-tbl td.go-meta{color:var(--muted)}
.go-tbl td .go-badge{display:inline-block;padding:2px 8px;border-radius:6px;font-size:.7rem;font-weight:600;letter-spacing:.3px}
.go-tbl td .go-badge.b-eq{background:#EEF6F1;color:#2A6645;border:1px solid #A0C4B0}
.go-tbl td .go-badge.b-non{background:#F5F5F5;color:#5F7A8E;border:1px solid #DDD}
.go-tbl td .go-badge.b-tu-DIA{background:#FDF7E8;color:#906010;border:1px solid #D4B060}
.go-tbl td .go-badge.b-tu-TARDE{background:#FAEDF0;color:#7B3450;border:1px solid #D4A0B0}
.go-tbl td .go-badge.b-tu-NOCHE{background:#1B2D42;color:#fff;border:1px solid #1B2D42}
.go-tbl td .go-badge.b-tu-FDS{background:#EDF4FB;color:#1B2D42;border:1px solid #5B9EC9}
.go-tbl td .go-badge.b-est-activo{background:#EEF6F1;color:#2A6645;border:1px solid #A0C4B0}
.go-tbl td .go-badge.b-est-vacaciones{background:#FDF7E8;color:#906010;border:1px solid #D4B060}
.go-tbl td .go-badge.b-est-descanso_medico{background:#FAEDF0;color:#7B3450;border:1px solid #D4A0B0}
.go-tbl td .go-badge.b-est-suspendido{background:#FAF0F0;color:#B03535;border:1px solid #D4A0A0}
.go-tbl td .go-badge.b-est-compensacion{background:#EDF4FB;color:#1B2D42;border:1px solid #5B9EC9}
.go-tbl td .go-badge.b-est-cesado{background:#F5F5F5;color:#5F7A8E;border:1px solid #DDD}
.go-fecha{font-family:ui-monospace,monospace;color:var(--muted);white-space:nowrap;font-size:.78rem}

/* V8.12: tabla de operarios para evaluar */
.ev-tbl-wrap{overflow-x:auto;margin:0}
.ev-tbl{width:100%;border-collapse:separate;border-spacing:0;font-size:.83rem;min-width:max-content}
.ev-tbl thead th{position:sticky;top:0;background:#1B2D42;color:#fff;padding:9px 12px;font-size:.7rem;letter-spacing:.4px;font-weight:700;text-transform:uppercase;text-align:left;white-space:nowrap;z-index:2}
.ev-tbl tbody td{padding:8px 12px;border-bottom:1px solid #E2EAF2;vertical-align:middle;background:#fff}
.ev-tbl tbody tr.ev-tbl-row{cursor:pointer;transition:background .12s}
.ev-tbl tbody tr.ev-tbl-row:hover td{background:#FFF6CC}
.ev-tbl tbody tr.ev-tbl-row-disabled{opacity:.55;cursor:not-allowed;background:#FAFAF7}
.ev-tbl tbody tr.ev-tbl-row-disabled:hover td{background:#F4F4F4}
.ev-tbl tbody tr:nth-child(even) td{background:#FAFCFE}
.ev-tbl tbody tr.ev-tbl-row-disabled:nth-child(even) td{background:#F2F2F0}
.ev-tbl-name{min-width:280px}
.ev-tbl-name-line{font-weight:700;color:var(--text);line-height:1.2}
.ev-tbl-sub{font-size:.7rem;color:var(--muted);font-family:ui-monospace,monospace;margin-top:2px;display:flex;gap:8px;align-items:center;flex-wrap:wrap}
.ev-tbl-mono{font-family:ui-monospace,monospace;color:var(--muted);white-space:nowrap}
.ev-tbl-empty{color:#aaa;font-style:italic;font-size:.78rem}
.ev-tbl-actions{text-align:right;white-space:nowrap;min-width:140px}
.ev-tbl-est{display:inline-flex;align-items:center;padding:1px 7px;border-radius:10px;font-size:.62rem;font-weight:700;letter-spacing:.3px}
.ev-est-disp{background:#EEF6F1;color:#2A6645;border:1px solid #A0C4B0}
.ev-est-no  {background:#FAEDED;color:#B03535;border:1px solid #D4A0A0}
.ev-est-anul{background:#FAEDED;color:#7A1A1A;border:1px solid #D4A0A0}

/* V8.10: tabla Reporte Personal */
.rp-tbl{width:max-content;border-collapse:separate;border-spacing:0;font-size:.78rem}
.rp-tbl thead th{position:sticky;top:0;background:#1B2D42;color:#fff;padding:8px 10px;font-size:.7rem;letter-spacing:.4px;font-weight:700;text-transform:uppercase;white-space:nowrap;z-index:2}
.rp-tbl tbody td{padding:6px 10px;border-bottom:1px solid #E2EAF2;white-space:nowrap;vertical-align:middle;background:#fff}
.rp-tbl tbody tr:nth-child(even) td{background:#FAFCFE}
.rp-tbl tbody tr:hover td{background:#FFF6CC}
.rp-tbl td.rp-name{font-weight:600;color:var(--text);min-width:240px}
.rp-tbl td.rp-dni{font-family:ui-monospace,monospace;color:var(--muted);min-width:90px}
.rp-tbl td.rp-mono{font-family:ui-monospace,monospace;color:var(--muted)}
.rp-tbl td.rp-empty{color:#aaa;font-style:italic}
.go-empty{padding:30px;text-align:center;color:var(--muted)}
/* V8.3: turnos con colores sólidos saturados (texto blanco) */
.p2-cell.p2-D  {background:#5B9EC9;color:#fff;border-color:#3A7FAA;text-shadow:0 1px 1px rgba(0,0,0,.15)}
.p2-cell.p2-T  {background:#E89B3F;color:#fff;border-color:#B97818;text-shadow:0 1px 1px rgba(0,0,0,.18)}
.p2-cell.p2-N  {background:#1B2D42;color:#fff;border-color:#0E1A28;text-shadow:0 1px 1px rgba(0,0,0,.25)}
.p2-cell.p2-FDS{background:#358055;color:#fff;border-color:#1F5C3A;font-size:.66rem;text-shadow:0 1px 1px rgba(0,0,0,.2)}
.p2-cell-nodisp{background:#F2D6D6;color:#8C2828;border-color:#C97676;cursor:not-allowed;font-size:.65rem;font-weight:700}
.p2-cell-nodisp:hover{transform:none;box-shadow:none}
/* V8.35: celda post-cese (operario cesó a mitad del rango visible) */
.p2-cell-cesado{background:repeating-linear-gradient(45deg,#E0E0E0,#E0E0E0 4px,#C8C8C8 4px,#C8C8C8 8px);color:#555;border-color:#9A9A9A;cursor:not-allowed;font-size:.75rem;font-weight:700}
.p2-cell-cesado:hover{transform:none;box-shadow:none}

/* V8.6: columnas fijas (sticky) — apellidos, horario, equipo, sub-area
   - Width fija por col (sin conflicto con la def. legacy que se eliminó)
   - sticky horizontal con left calculado según anchos cumulativos
   - sticky vertical para el thead
   - cabeceras navy oscuro que sobrescriben el background blanco genérico */
:root{ --p2-w-op:220px; --p2-w-m1:90px; --p2-w-m2:110px; --p2-w-m3:140px; }

/* Body cells defaults (la zebra y el hover sobrescriben con más especificidad) */
.p2-cal tbody td{background:#fff}

/* THEAD: sticky vertical + colores */
.p2-cal thead th{position:sticky;top:0;z-index:3;background:#1B2D42;color:#fff}
.p2-cal thead th.p2-finsem{background:#3D4A60}
.p2-cal thead th.p2-th-op,
.p2-cal thead th.p2-th-meta-1,
.p2-cal thead th.p2-th-meta-2,
.p2-cal thead th.p2-th-meta-3{background:#24394F;color:#fff}

/* V8.14: SOLO la columna APELLIDOS Y NOMBRES queda sticky.
   EXPERIENCIA / EQUIPO / SUB ÁREA / PUESTO DE TRABAJO scrollean junto con los días. */
.p2-cal .p2-th-op, .p2-cal .p2-td-op {
  position:sticky !important; left:0 !important;
  min-width:var(--p2-w-op); max-width:var(--p2-w-op); width:var(--p2-w-op);
  border-right:3px solid var(--navy)
}
.p2-cal tbody .p2-td-op{z-index:2}
.p2-cal thead th.p2-th-op{z-index:6}

/* HORARIO / EQUIPO / SUB ÁREA — anchos fijos pero scrolleables */
.p2-cal .p2-th-meta-1, .p2-cal .p2-td-meta-1 {
  min-width:var(--p2-w-m1); max-width:var(--p2-w-m1); width:var(--p2-w-m1);
  border-right:1px solid var(--border)
}
.p2-cal .p2-th-meta-2, .p2-cal .p2-td-meta-2 {
  min-width:var(--p2-w-m2); max-width:var(--p2-w-m2); width:var(--p2-w-m2);
  border-right:1px solid var(--border)
}
.p2-cal .p2-th-meta-3, .p2-cal .p2-td-meta-3 {
  min-width:var(--p2-w-m3); max-width:var(--p2-w-m3); width:var(--p2-w-m3);
  border-right:1px solid var(--border)
}

/* Wrapper scroll — V8.15: max-width:100% + width:100% mantienen el wrap
   dentro del ancho del padre. Combinado con #main{min-width:0} esto
   limita el wrap al viewport y la tabla scrollea horizontalmente DENTRO
   del wrap (no a nivel de página). */
.p2-tabla-wrap{overflow:auto !important;width:100%;max-width:100%;scrollbar-width:thin;-webkit-overflow-scrolling:touch}
.p2-tabla-wrap::-webkit-scrollbar{height:14px;width:14px}
.p2-tabla-wrap::-webkit-scrollbar-track{background:#E8EFF5}
.p2-tabla-wrap::-webkit-scrollbar-thumb{background:#5B9EC9;border-radius:7px;border:2px solid #E8EFF5}
.p2-tabla-wrap::-webkit-scrollbar-thumb:hover{background:#3D6B8C}

/* V8.6: días de contexto (semana anterior / siguiente) — atenuados visualmente */
.p2-cal th.p2-th-day.p2-out-of-focus{background:#3D4A60;opacity:.78}
.p2-cal th.p2-th-day.p2-out-of-focus strong{color:rgba(255,255,255,.7)}
.p2-cal td.p2-out-of-focus{background:#F1F4F7}
.p2-cal tbody tr:nth-child(even) td.p2-out-of-focus{background:#EAEEF2}
.p2-cell-readonly{cursor:not-allowed;opacity:.55}
.p2-cell-readonly:hover{transform:none;box-shadow:none}
/* Indicador visual del "rango focal" */
.p2-cal th.p2-th-day.p2-focus-start{border-left:3px solid #FFC107}
.p2-cal th.p2-th-day.p2-focus-end{border-right:3px solid #FFC107}
.p2-cal td.p2-focus-start{border-left:3px solid #FFC107}
.p2-cal td.p2-focus-end{border-right:3px solid #FFC107}
/* Resumen tfoot */
.p2-cal tfoot td        {background:#F4F8FB;font-size:.72rem;text-align:center;padding:4px 2px;border-top:2px solid var(--navy)}
.p2-cal tfoot td.p2-foot-label{text-align:right;font-weight:700;color:var(--navy);padding-right:8px}
.p2-cal tfoot tr.p2-foot-total td{background:#E8EFF5;font-weight:700;color:var(--navy)}
.p2-foot-pill{display:inline-block;min-width:18px;padding:1px 5px;border-radius:9px;font-size:.7rem;font-weight:700}
.p2-cell-modified{box-shadow:0 0 0 3px #FFC107, 0 2px 8px rgba(255,193,7,.55);position:relative;animation:p2pulseEdit 1.4s ease-in-out infinite}
.p2-cell-modified::after{content:'●';position:absolute;top:-6px;right:-3px;color:#FF8F00;font-size:.7rem;line-height:1;background:#fff;border-radius:50%;width:10px;height:10px;display:flex;align-items:center;justify-content:center;box-shadow:0 1px 3px rgba(0,0,0,.25)}
@keyframes p2pulseEdit{0%,100%{box-shadow:0 0 0 3px #FFC107, 0 2px 8px rgba(255,193,7,.55)}50%{box-shadow:0 0 0 4px #FF8F00, 0 2px 12px rgba(255,143,0,.7)}}
.p2-cell-demo{display:inline-block;padding:2px 8px;border-radius:5px;font-family:ui-monospace,monospace;font-size:.7rem;font-weight:700;border:1.5px solid currentColor}

/* V8.3 panel resumen — V8.15 layout compacto en una sola fila por mosaico
   (label a la izquierda, número grande a la derecha). El sub-texto se
   oculta para reducir altura; reaparece como tooltip via title. */
.p2-stats{display:grid;grid-template-columns:repeat(auto-fill, minmax(170px, 1fr));gap:8px;margin-bottom:10px}
.p2-stat-card{background:#fff;border:1.5px solid var(--border);border-left-width:5px;
              border-radius:7px;padding:6px 12px;display:flex;flex-direction:row;
              align-items:center;justify-content:space-between;gap:10px;min-height:38px}
.p2-stat-card .p2-stat-label{font-size:.9rem;font-weight:700;color:var(--navy);text-transform:none;letter-spacing:.1px;line-height:1.1}
.p2-stat-card .p2-stat-value{font-size:1.7rem;font-weight:800;color:var(--text);font-family:ui-monospace,monospace;line-height:1.0}
.p2-stat-card .p2-stat-sub{display:none}  /* oculto por compacidad — info en title */

/* V8.14/V8.15: barra de toggles compacta (también pegada arriba) */
.p2-stat-toggles{display:flex;flex-wrap:wrap;align-items:center;gap:8px;margin-bottom:6px;padding:4px 10px;background:#F4F8FB;border:1px solid var(--border);border-radius:7px}
.p2-stat-tgl{display:inline-flex;align-items:center;gap:5px;font-size:.74rem;font-weight:600;color:var(--navy);background:#fff;border:1.5px solid var(--border);padding:3px 9px;border-radius:13px;cursor:pointer;user-select:none}
.p2-stat-tgl:has(input:checked){background:var(--navy);color:#fff;border-color:var(--navy)}
.p2-stat-tgl input{cursor:pointer;accent-color:var(--navy)}
.p2-stat-card.p2-stat-D  {border-left-color:#5B9EC9}
.p2-stat-card.p2-stat-T  {border-left-color:#E89B3F}
.p2-stat-card.p2-stat-N  {border-left-color:#1B2D42}
.p2-stat-card.p2-stat-FDS{border-left-color:#358055}
.p2-stat-card.p2-stat-nodisp{border-left-color:#B03535}
.p2-stat-card.p2-stat-total{border-left-color:#FFC107;background:#FFF8E1}
.p2-stat-card.p2-stat-empty{border-left-color:#C8D6E0;background:#F8FAFC}

/* V8.4: tfoot eliminado (resumen vive solo en el panel de stats arriba) */
.p2-empty{padding:40px;text-align:center;color:var(--muted);font-size:.9rem}

/* V8.21: selects inline para editar equipo/sub-area/puesto en cada fila.
   Estilo compacto que cabe en las celdas meta. Resaltamos en amarillo si
   tiene cambio pendiente (p2-meta-modified). */
.p2-meta-sel{width:100%;max-width:100%;background:transparent;border:1px solid transparent;
             border-radius:5px;padding:3px 4px;font-size:.78rem;color:var(--text);font-family:inherit;cursor:pointer}
.p2-meta-sel:hover:not(:disabled){background:#F4F8FB;border-color:#5B9EC9}
.p2-meta-sel:focus{outline:0;background:#fff;border-color:var(--navy);box-shadow:0 0 0 2px rgba(91,158,201,.25)}
.p2-meta-sel:disabled{opacity:.5;cursor:not-allowed;background:repeating-linear-gradient(45deg,#fff,#fff 6px,#F1F4F7 6px,#F1F4F7 12px)}
.p2-meta-sel.p2-meta-modified{background:#FFF8E1;border-color:#FFC107;font-weight:700;
                              box-shadow:0 0 0 2px rgba(255,193,7,.35) inset}

/* ══════ V7.6 Evaluación ══════ */
.ev-chk-solo-prog{display:inline-flex;align-items:center;gap:6px;
                  padding:8px 12px;border:1.5px solid var(--border);border-radius:var(--r);
                  background:#fff;cursor:pointer;font-size:.82rem;font-weight:600;color:var(--muted);
                  user-select:none;transition:all .15s}
.ev-chk-solo-prog:has(input:checked){background:var(--navy);color:#fff;border-color:var(--navy)}
.ev-chk-solo-prog input{cursor:pointer}

/* ══════ V7.6 Reporte por operario ══════ */
.ro-op-header{background:var(--navy);color:#fff;border-radius:var(--r);padding:16px 20px;margin-bottom:16px}
.ro-op-name{font-size:1.15rem;font-weight:700;letter-spacing:-.2px}
.ro-op-meta{font-size:.78rem;color:rgba(255,255,255,.7);margin-top:4px;font-family:var(--mono)}
.ro-tags{display:flex;gap:6px;flex-wrap:wrap;margin-top:8px}
.ro-tag{background:rgba(255,255,255,.15);color:#fff;padding:2px 10px;border-radius:12px;font-size:.72rem;font-weight:600}
.ro-chart-box{background:#fff;border:1.5px solid var(--border);border-radius:var(--r);padding:14px;margin:14px 0}
