:root{--primary:#4f46e5;--secondary:#111827;--bg:#f4f6fb;--card:#fff;--border:#d8deea;--text:#111827}*{box-sizing:border-box}body{margin:0;font-family:Arial,Helvetica,sans-serif;background:var(--bg);color:var(--text)}header{background:linear-gradient(90deg,var(--primary),var(--secondary));color:#fff;padding:16px 22px;display:flex;align-items:center;justify-content:space-between;gap:16px}.brand-head{display:flex;align-items:center;gap:14px}.brand-head h1{margin:0;font-size:22px}.brand-head p{margin:4px 0 0;opacity:.9}.header-company-logo,.context-company-logo{max-height:58px;max-width:150px;background:#fff;border-radius:8px;padding:4px;object-fit:contain}.top-actions,.toolbar{display:flex;flex-wrap:wrap;gap:8px;align-items:center}button,.filebtn{border:0;border-radius:8px;padding:9px 12px;background:var(--primary);color:#fff;cursor:pointer;font-weight:700;display:inline-block}button.secondary,.filebtn.secondary{background:#64748b}.success{background:#16a34a!important}.filebtn input{display:none}button:hover,.filebtn:hover{filter:brightness(.95)}.login-panel,.context-panel,.content-shell section,.panel-soft,.config-card{background:var(--card);border:1px solid var(--border);border-radius:12px;margin:16px;padding:16px}.hidden{display:none!important}.context-grid{display:grid;grid-template-columns:1.3fr 1.5fr auto 1fr 1fr 2fr;gap:12px;align-items:center}.app-shell{display:flex}.sidebar-nav{width:240px;min-height:calc(100vh - 94px);background:#101827;padding:12px;display:flex;flex-direction:column;gap:6px;position:sticky;top:0;align-self:flex-start}.sidebar-nav button{background:transparent;text-align:left;color:#dbeafe;border:1px solid transparent}.sidebar-nav button.active{background:var(--primary);color:white}.content-shell{flex:1;min-width:0}.tab{display:none}.tab.active{display:block}.grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(210px,1fr));gap:12px}.grid.two{grid-template-columns:repeat(auto-fit,minmax(300px,1fr))}label{font-weight:700;font-size:13px}input,select,textarea{width:100%;padding:8px;margin-top:4px;border:1px solid var(--border);border-radius:8px;background:#fff}.hint{color:#64748b}.notice{background:#eef2ff;border-left:4px solid var(--primary);padding:10px;border-radius:8px}.compact{font-size:13px}.msg{margin-top:8px;font-weight:700;color:var(--primary)}.table-wrap{overflow:auto;border:1px solid var(--border);border-radius:10px;background:white}.table-wrap.small{max-height:360px}table{width:100%;border-collapse:collapse;min-width:800px}th,td{border-bottom:1px solid var(--border);padding:7px;text-align:left;font-size:13px}th{background:#eef2ff;position:sticky;top:0}td input,td select{min-width:120px}.cards{display:grid;grid-template-columns:repeat(auto-fit,minmax(170px,1fr));gap:10px;margin:10px 0}.card{background:#fff;border:1px solid var(--border);border-radius:12px;padding:14px}.card b{font-size:20px;color:var(--primary)}.logo-preview-box,.config-logo-preview-wrap{border:1px dashed var(--border);border-radius:12px;padding:12px;background:#fafafa;margin:10px 0}.company-logo-preview,.config-logo-preview{max-width:260px;max-height:120px;object-fit:contain;background:#fff;border-radius:8px}.print-area{background:white;padding:10px}.payslip{border:1px solid #111;margin:12px 0;padding:14px;page-break-inside:avoid}.payslip-head{display:flex;justify-content:space-between;gap:12px;align-items:center;border-bottom:1px solid #111;padding-bottom:8px}.payslip-logo{max-width:130px;max-height:70px;object-fit:contain}.mini button{padding:7px 9px;font-size:12px}pre{white-space:pre-wrap;background:#0f172a;color:#e2e8f0;border-radius:10px;padding:12px;overflow:auto}@media print{header,.sidebar-nav,.toolbar,.context-panel,.login-panel,.hint,.notice{display:none!important}.app-shell{display:block}.content-shell section{display:none;border:0;margin:0}.print-area,.payslip{display:block}.tab.active{display:block}}@media(max-width:900px){.app-shell{display:block}.sidebar-nav{width:auto;min-height:auto;position:relative}.context-grid{grid-template-columns:1fr}header{display:block}.top-actions{margin-top:10px}}
button:disabled,.filebtn.disabled,input:disabled,select:disabled{opacity:.55;cursor:not-allowed}.checkline{display:flex;align-items:center;gap:6px}.checkline input{width:auto;margin:0}.companyStatusBtn{white-space:nowrap}

/* V24.2 menú agrupado */
.sidebar-nav .nav-group{border-top:1px solid rgba(255,255,255,.08);padding-top:6px;margin-top:4px}
.sidebar-nav .nav-group-toggle{width:100%;background:rgba(255,255,255,.08);color:#fff;text-align:left;border:1px solid rgba(255,255,255,.08)}
.sidebar-nav .nav-submenu{display:flex;flex-direction:column;gap:4px;margin-top:6px;padding-left:8px;border-left:2px solid rgba(255,255,255,.12)}
.sidebar-nav .nav-submenu button{font-size:13px;padding:8px 10px}
.sidebar-nav .nav-group.collapsed .nav-submenu{display:none}
.sidebar-nav .matrix-only.hidden-nav{display:none!important}

/* V24.6 - Encabezado, contexto, menú y tablas fijas */
:root{--header-h:86px;--context-h:112px;--sticky-offset:198px}
body{overflow-y:auto}
header{
  position:sticky;
  top:0;
  z-index:3000;
  min-height:var(--header-h);
  box-shadow:0 2px 10px rgba(15,23,42,.12);
}
.context-panel:not(.hidden){
  position:sticky;
  top:var(--header-h);
  z-index:2500;
  margin-top:0;
  margin-bottom:10px;
  box-shadow:0 2px 10px rgba(15,23,42,.08);
}
.app-shell{align-items:flex-start}
.sidebar-nav{
  position:sticky;
  top:calc(var(--header-h) + var(--context-h));
  max-height:calc(100vh - var(--header-h) - var(--context-h));
  overflow-y:auto;
  z-index:1200;
}
.table-wrap{
  max-height:calc(100vh - var(--sticky-offset) - 90px);
  overflow:auto;
  position:relative;
}
.table-wrap.small{max-height:360px}
thead th{
  position:sticky;
  top:0;
  z-index:20;
  background:#eef2ff;
  box-shadow:0 1px 0 var(--border);
}
.content-shell section > h2{
  position:sticky;
  top:calc(var(--header-h) + var(--context-h));
  z-index:900;
  background:var(--card);
  margin-top:0;
  padding:4px 0 8px;
}
.backup-top-note{font-weight:700;opacity:.95}
@media(max-width:900px){
  :root{--header-h:120px;--context-h:0px;--sticky-offset:160px}
  header{position:sticky;top:0}
  .context-panel:not(.hidden){position:relative;top:auto}
  .sidebar-nav{position:relative;top:auto;max-height:none;overflow:visible}
  .content-shell section > h2{position:relative;top:auto}
  .table-wrap{max-height:70vh}
}
@media print{
  header,.context-panel,.sidebar-nav{position:static!important;box-shadow:none!important}
  .table-wrap{max-height:none;overflow:visible}
  thead th,.content-shell section > h2{position:static!important}
}
.tareo-day-cell{min-width:84px;white-space:nowrap;vertical-align:top}
.tareo-day-cell .tareo-hour{width:46px;margin-bottom:4px;display:block}
.tareo-day-cell .tareo-inc{width:62px;display:block;font-size:11px}
.selected-row{outline:2px solid var(--primary); background:#fff7ed!important;}

#toastBox{position:fixed;right:18px;top:90px;z-index:9999;display:flex;flex-direction:column;gap:10px;pointer-events:none}
.toast{background:#0f766e;color:#fff;border-radius:10px;padding:12px 16px;box-shadow:0 10px 25px rgba(0,0,0,.18);opacity:0;transform:translateY(-8px);transition:.25s ease;font-weight:700;max-width:360px}
.toast.show{opacity:1;transform:translateY(0)}
.toast.error{background:#b91c1c}

.payslip-worker{font-size:12px;line-height:1.35;margin:10px 0}
.payslip-detail{display:grid;grid-template-columns:1fr 1fr 1fr;gap:10px;margin-top:8px}
.payslip-detail table{min-width:0;width:100%;font-size:11px}
.payslip-detail th,.payslip-detail td{font-size:11px;padding:5px}
.payslip-detail .num,.payslip-net .num{text-align:right;white-space:nowrap}
.total-row td{font-weight:700;border-top:1px solid #111;background:#f8fafc}
.payslip-net{min-width:0;width:100%;margin-top:8px}
.payslip-net th,.payslip-net td{font-size:12px}
@media(max-width:900px){.payslip-detail{grid-template-columns:1fr}}

/* Boleta profesional CAE RH Perú v1 */
.professional-payslip{font-family:Arial,Helvetica,sans-serif;border:2px solid #111;padding:0;margin:14px auto;background:#fff;color:#111;max-width:1040px;font-size:12px;page-break-after:always}.ps-header-box{display:grid;grid-template-columns:32% 68%;align-items:center;border-bottom:2px solid #111;padding:22px 28px}.ps-logo-box{text-align:center}.ps-logo{max-width:210px;max-height:95px;object-fit:contain}.ps-title-box h2{margin:0 0 8px 0;text-align:left;font-size:20px}.ps-title-box h2 span{font-size:18px}.ps-head-grid{display:grid;grid-template-columns:90px 1fr;gap:3px 8px;font-size:14px;font-weight:700}.ps-info,.ps-concepts{width:100%;min-width:0;border-collapse:collapse;margin:14px 0 0 0}.ps-info th,.ps-info td,.ps-concepts th,.ps-concepts td{border:1px solid #111;padding:5px 7px;text-align:center;background:#fff;color:#111;font-size:12px}.ps-info thead th,.ps-concepts thead th,.ps-concepts .section td{background:#c9c9c9;font-weight:700;text-align:left}.ps-info tbody th{font-weight:700;text-align:center}.ps-concepts th{text-align:center}.ps-concepts td:nth-child(2){text-align:left}.ps-concepts .num,.ps-info .num{text-align:right}.ps-concepts .section td{border-top:2px solid #111}.total-row td{font-weight:700}.total-row td:nth-child(2),.net-row td:first-child{text-align:right}.net-row td{font-weight:700;border-top:2px solid #111}.ps-date{margin:16px 0 48px 0;font-size:12px}.ps-signatures{display:grid;grid-template-columns:1fr 1fr;gap:90px;text-align:center;margin:0 70px 18px}.sig-line{border-top:1px solid #111;margin:0 0 8px 0;height:1px}@media print{.professional-payslip{border:2px solid #111;margin:0 auto;max-width:none;page-break-after:always}.ps-header-box{padding:20px 28px}.ps-info th,.ps-info td,.ps-concepts th,.ps-concepts td{font-size:11px;padding:4px 6px}body{background:white}}

/* V25.14 Boletas mejoradas */
.boleta-toolbar label{min-width:280px}
.professional-payslip{border:1px solid #111!important;padding:0!important;margin:10px auto!important;background:#fff!important;color:#111!important;max-width:1040px!important;font-size:11.5px!important;page-break-after:always!important;box-shadow:none!important}
.ps-header-box{display:grid!important;grid-template-columns:30% 70%!important;align-items:center!important;border-bottom:1px solid #111!important;padding:16px 22px!important;background:#fff!important}
.ps-title-box h2{margin:0 0 8px 0!important;text-align:left!important;font-size:18px!important;color:#111!important;background:#fff!important}
.ps-title-box h2 span{font-size:12px!important;font-weight:normal!important;color:#111!important}
.ps-head-grid{display:grid!important;grid-template-columns:88px 1fr!important;gap:3px 8px!important;font-size:12px!important;font-weight:700!important;background:#fff!important}
.ps-logo{max-width:190px!important;max-height:85px!important;object-fit:contain!important}
.ps-info,.ps-concepts,.ps-vac{width:100%!important;min-width:0!important;border-collapse:collapse!important;margin:10px 0 0 0!important;background:#fff!important}
.ps-info th,.ps-info td,.ps-concepts th,.ps-concepts td,.ps-vac th,.ps-vac td{border:1px solid #111!important;padding:4px 6px!important;text-align:center!important;background:#fff!important;color:#111!important;font-size:11px!important;font-weight:normal!important}
.ps-info thead th,.ps-concepts thead th,.ps-vac thead th,.ps-concepts .section td{background:#efefef!important;color:#111!important;font-weight:700!important;text-align:left!important}
.ps-info tbody th,.ps-vac tbody th{font-weight:700!important;text-align:center!important;background:#fff!important}
.ps-concepts th{text-align:center!important;background:#efefef!important;font-weight:700!important}
.ps-concepts td:nth-child(2){text-align:left!important}
.ps-concepts .num,.ps-info .num,.ps-vac .num{text-align:right!important}
.ps-concepts .section td{border-top:1px solid #111!important}
.total-row td{font-weight:700!important;background:#fff!important}
.total-row td:nth-child(2),.net-row td:first-child{text-align:right!important}
.net-row td{font-weight:700!important;border-top:1px solid #111!important;background:#fff!important}
.ps-vac{margin-top:10px!important}
.ps-date{margin:14px 0 42px 0!important;font-size:11px!important;color:#111!important}
.ps-signatures{display:grid!important;grid-template-columns:1fr 1fr!important;gap:80px!important;text-align:center!important;margin:0 70px 16px!important;color:#111!important}
.sig-line{border-top:1px solid #111!important;margin:0 0 8px 0!important;height:1px!important}
@media print{
  .boleta-toolbar{display:none!important}
  .professional-payslip{border:1px solid #111!important;margin:0 auto!important;max-width:none!important;page-break-after:always!important}
  .ps-header-box{padding:14px 20px!important}
  .ps-info th,.ps-info td,.ps-concepts th,.ps-concepts td,.ps-vac th,.ps-vac td{font-size:10.5px!important;padding:3px 5px!important;border:1px solid #111!important;background:#fff!important;color:#111!important}
  .ps-info thead th,.ps-concepts thead th,.ps-vac thead th,.ps-concepts .section td{background:#efefef!important;color:#111!important}
}


/* V25.15 Boleta profesional definitiva: impresión limpia y bordes uniformes */
@page{
  size:A4 portrait;
  margin:6mm;
}
#boletas .print-area{padding:0;background:#fff;}
.professional-payslip,
.professional-payslip *{
  box-shadow:none!important;
  text-shadow:none!important;
}
.professional-payslip{
  border:1px solid #000!important;
  max-width:1040px!important;
  width:100%!important;
  margin:10px auto!important;
  background:#fff!important;
  color:#000!important;
}
.ps-header-box,
.ps-info th,.ps-info td,
.ps-concepts th,.ps-concepts td,
.ps-vac th,.ps-vac td,
.sig-line{
  border-color:#000!important;
  border-width:1px!important;
}
.ps-info,.ps-concepts,.ps-vac{
  border-collapse:collapse!important;
  border-spacing:0!important;
}
.ps-info thead th,
.ps-concepts thead th,
.ps-vac thead th,
.ps-concepts .section td{
  background:#f1f1f1!important;
  -webkit-print-color-adjust:exact!important;
  print-color-adjust:exact!important;
}
.print-help{
  background:#fff7ed;
  border-left:4px solid #f97316;
  padding:10px;
  border-radius:8px;
  margin:8px 0;
  font-size:13px;
}
@media print{
  html,body{
    margin:0!important;
    padding:0!important;
    background:#fff!important;
    -webkit-print-color-adjust:exact!important;
    print-color-adjust:exact!important;
  }
  header,.context-panel,.sidebar-nav,.boleta-toolbar,#boletas>h2,#boletas>.hint,#boletasMsg,.print-help,.notice,.msg:not(#boletasMsg){
    display:none!important;
  }
  .app-shell,.content-shell,main,#boletas{
    display:block!important;
    margin:0!important;
    padding:0!important;
    border:0!important;
    background:#fff!important;
    width:100%!important;
  }
  body *{visibility:hidden!important;}
  #payslipsOutput,#payslipsOutput *{visibility:visible!important;}
  #payslipsOutput{
    position:absolute!important;
    left:0!important;
    top:0!important;
    width:100%!important;
    padding:0!important;
    margin:0!important;
    background:#fff!important;
  }
  .professional-payslip{
    width:196mm!important;
    max-width:196mm!important;
    min-height:281mm!important;
    margin:0 auto!important;
    border:1px solid #000!important;
    page-break-after:always!important;
    break-after:page!important;
    page-break-inside:avoid!important;
    font-size:10.5px!important;
  }
  .professional-payslip:last-child{
    page-break-after:auto!important;
    break-after:auto!important;
  }
  .ps-header-box{padding:12px 18px!important;border-bottom:1px solid #000!important;}
  .ps-logo{max-width:170px!important;max-height:75px!important;}
  .ps-title-box h2{font-size:17px!important;margin-bottom:6px!important;}
  .ps-title-box h2 span{font-size:11px!important;}
  .ps-head-grid{font-size:11px!important;}
  .ps-info,.ps-concepts,.ps-vac{margin-top:8px!important;}
  .ps-info th,.ps-info td,.ps-concepts th,.ps-concepts td,.ps-vac th,.ps-vac td{
    border:1px solid #000!important;
    padding:3px 5px!important;
    font-size:10px!important;
    line-height:1.15!important;
  }
  .ps-date{margin:10px 0 34px 0!important;font-size:10px!important;}
  .ps-signatures{margin:0 60px 12px!important;gap:70px!important;font-size:10px!important;}
}

/* V25.16 Boleta: firmas amplias, sin control vacacional temporal y preparación conceptos PLAME */
.ps-vac{display:none!important;}
.ps-date{margin:18px 0 78px 0!important;font-size:11px!important;}
.ps-signatures{margin:0 70px 28px!important;gap:90px!important;font-size:11px!important;align-items:end!important;}
.sig-line{margin-top:42px!important;margin-bottom:10px!important;}
@media print{
  .ps-vac{display:none!important;}
  .ps-date{margin:12px 0 72px 0!important;}
  .ps-signatures{margin:0 62px 22px!important;gap:80px!important;font-size:10.5px!important;}
  .sig-line{margin-top:40px!important;margin-bottom:8px!important;}
}

/* V25.28 - Tareo usable: DNI/nombre fijos, días bloqueados y conceptos mensuales */
.tareo-wrap table{border-collapse:separate;border-spacing:0;min-width:1800px}
#tareoTable .sticky-col{position:sticky;background:#fff;z-index:35;box-shadow:1px 0 0 var(--border)}
#tareoTable thead .sticky-col{background:#eef2ff;z-index:60}
#tareoTable .sticky-code{left:0;min-width:90px;width:90px}
#tareoTable .sticky-name{left:90px;min-width:260px;width:260px}
#tareoTable .blocked{background:#f1f5f9;color:#64748b;text-align:center;min-width:76px;vertical-align:middle}
#tareoTable .blocked-x{font-weight:800;color:#94a3b8;display:inline-block;padding:10px 0}
#tareoTable .tareo-day-cell input{min-width:68px;width:68px}
#tareoTable .tareo-day-cell select{min-width:68px;width:68px;margin-top:3px}
#monthlyConceptsTable input,#monthlyConceptsTable select{min-width:120px}


/* V25.30 - Feriados 2026 y planilla flexible */
#tareoTable th.holiday-head{background:#fef3c7!important;color:#92400e;}
#tareoTable .tareo-day-cell.holiday{background:#fffbeb;}
.holiday-tag{display:inline-block;background:#f59e0b;color:#111827;border-radius:4px;padding:1px 5px;font-size:10px;font-weight:700;}
.payroll-selection{align-items:flex-start;gap:10px;}
#payrollWorkerSelect{min-width:320px;max-width:520px;height:auto;padding:6px;border:1px solid var(--border);border-radius:8px;}
/* V25.31 - feriado trabajado visible */
#tareoTable .tareo-day-cell.holiday-worked{background:#fde68a!important;box-shadow:inset 0 0 0 2px #f59e0b;}
#tareoTable select.tareo-inc option[value="FT"]{font-weight:700;}
.mini-warn{font-size:11px;color:#92400e;margin-top:3px;max-width:160px;white-space:normal;line-height:1.2}
#monthlyConceptsTable input[type="checkbox"], #remunerativeConceptsTable input[type="checkbox"]{width:auto;transform:scale(1.1)}
.readonly-field{background:#f3f4f6;color:#374151;}
#monthlyConceptsTable select[disabled],#monthlyConceptsTable input[disabled]{opacity:.9;cursor:not-allowed;}

/* V25.59 - Planilla calculada: código/trabajador fijos y totales al final */
#payrollTable{border-collapse:separate;border-spacing:0;min-width:2600px}
#payrollTable .sticky-col{position:sticky;background:#fff;z-index:35;box-shadow:1px 0 0 var(--border)}
#payrollTable thead .sticky-col{background:#eef2ff;z-index:70}
#payrollTable tfoot .sticky-col{background:#f8fafc;z-index:65}
#payrollTable .payroll-sticky-code{left:0;min-width:70px;width:70px}
#payrollTable .payroll-sticky-name{left:70px;min-width:260px;width:260px;white-space:normal}
#payrollTable tfoot td{position:sticky;bottom:0;background:#f8fafc;font-weight:800;border-top:2px solid var(--border);z-index:55}
#payrollTable tfoot .payroll-sticky-code,#payrollTable tfoot .payroll-sticky-name{z-index:75}
