:root{font-family:Inter,ui-sans-serif,system-ui,sans-serif;color:#162b44;background:#f5f7fb}*{box-sizing:border-box}body{margin:0}.login{width:min(440px,calc(100% - 32px));margin:9vh auto;background:#fff;border:1px solid #e5eaf1;border-radius:22px;padding:36px;box-shadow:0 25px 70px #172b4d18}.brand{font-size:12px;font-weight:900;letter-spacing:.14em;color:#087e8b}.title{font-size:30px;letter-spacing:-.03em;margin:8px 0}.muted{color:#64748b;line-height:1.55}.layout{min-height:100vh;display:grid;grid-template-columns:252px 1fr}.sidebar{background:#102a43;color:#dbe7f0;padding:26px 16px;position:sticky;top:0;height:100vh}.sidebar h2{color:#fff;font-size:18px;margin:7px 8px 32px}.nav{display:grid;gap:5px}.nav button{border:0;background:transparent;color:#b8cad8;text-align:left;border-radius:10px;padding:11px 12px;font:inherit;cursor:pointer}.nav button:hover,.nav button.active{background:#1a405f;color:#fff}.nav .logout{color:#fca5a5;margin-top:20px}.main{padding:32px;max-width:1400px;width:100%;margin:auto}.topbar{display:flex;justify-content:space-between;align-items:flex-start;margin-bottom:28px}.company{color:#087e8b;font-size:13px;font-weight:850}.topbar h1{font-size:28px;letter-spacing:-.03em;margin:5px 0}.profile{color:#64748b;text-align:right}.metrics{display:grid;grid-template-columns:repeat(3,1fr);gap:16px}.metric,.panel{background:#fff;border:1px solid #e3eaf0;border-radius:16px;padding:20px;box-shadow:0 6px 18px #102a4307}.metric span{color:#64748b;font-size:13px}.metric strong{display:block;font-size:30px;margin-top:8px}.panel{margin-top:18px}.toolbar{display:flex;justify-content:space-between;gap:12px;align-items:center}.primary{background:#087e8b;border:0;color:#fff;border-radius:9px;padding:11px 14px;font:inherit;font-weight:800;cursor:pointer}.secondary{background:#eef4f7;border:0;color:#19415b;border-radius:8px;padding:8px 10px;font-weight:750;cursor:pointer}.danger{color:#b42318}.search,input,select{border:1px solid #cbd7df;border-radius:9px;padding:10px;font:inherit;background:#fff}.search{min-width:260px}.table{width:100%;border-collapse:collapse;margin-top:15px}.table th{text-align:left;color:#64748b;font-size:12px;padding:10px;border-bottom:1px solid #e7edf1}.table td{padding:13px 10px;border-bottom:1px solid #eef2f5;font-size:14px}.badge{display:inline-block;border-radius:999px;padding:4px 9px;font-size:12px;font-weight:800;background:#dcfce7;color:#166534}.badge.off{background:#fee2e2;color:#b42318}.empty{padding:34px;text-align:center;color:#64748b}.modal{position:fixed;inset:0;background:#102a437a;display:grid;place-items:center;padding:20px;z-index:2}.dialog{background:#fff;border-radius:18px;padding:24px;width:min(760px,100%);max-height:92vh;overflow:auto}.dialog h2{margin:0}.form-grid{display:grid;grid-template-columns:1fr 1fr;gap:13px}.full{grid-column:1/-1}label{display:grid;gap:6px;color:#334155;font-size:13px;font-weight:750}.actions{display:flex;justify-content:flex-end;gap:10px;margin-top:20px}.error{margin-top:14px;padding:10px;border-radius:9px;background:#fee2e2;color:#b42318}.notice{margin:15px 0;padding:10px;border-radius:9px;background:#dcfce7;color:#166534}@media(max-width:800px){.layout{grid-template-columns:1fr}.sidebar{height:auto;position:static}.nav{grid-template-columns:repeat(2,1fr)}.main{padding:20px}.metrics,.form-grid{grid-template-columns:1fr}.topbar{gap:12px}.profile{display:none}.toolbar{align-items:stretch;flex-direction:column}.search{min-width:0}.table{display:block;overflow:auto;white-space:nowrap}}
.attendance-metrics{grid-template-columns:repeat(5,1fr)}.attendance-filters{display:grid;grid-template-columns:repeat(3,1fr);gap:13px;align-items:end}.attendance-filter-button{height:41px}.attendance-table tbody tr:hover{background:#f8fafc}.badge.attendance-in_progress{background:#fef3c7;color:#92400e}.badge.attendance-inconsistent{background:#fee2e2;color:#b42318}.detail-grid{display:grid;grid-template-columns:1fr 1fr;gap:16px;margin-top:18px}.detail-grid.compact{margin-top:12px}.detail-section{border-top:1px solid #e7edf1;padding-top:16px}.detail-section.full{grid-column:1/-1}.detail-section strong{color:#087e8b}@media(max-width:1000px){.attendance-metrics{grid-template-columns:repeat(2,1fr)}.attendance-filters{grid-template-columns:1fr 1fr}}@media(max-width:800px){.attendance-metrics,.attendance-filters,.detail-grid{grid-template-columns:1fr}.attendance-table{display:block;overflow:auto;white-space:nowrap}}
.schedule-days{display:grid;gap:12px;margin-top:16px}.schedule-day{border:1px solid #e3eaf0;border-radius:12px;padding:14px}.schedule-day-head{display:flex;justify-content:space-between;align-items:center;margin-bottom:10px}.schedule-day-head label,.schedule-block label{display:flex;grid-auto-flow:column;justify-content:start;align-items:center;gap:6px}.schedule-block{display:flex;align-items:center;gap:8px;flex-wrap:wrap;margin:7px 0}.schedule-meal{display:flex;align-items:center;gap:8px;flex-wrap:wrap;margin-top:10px;color:#64748b;font-size:13px}.badge.warning{background:#fef3c7;color:#92400e}@media(max-width:800px){.schedule-block,.schedule-meal{align-items:stretch;flex-direction:column}.schedule-day-head{align-items:flex-start;gap:8px;flex-direction:column}}
.schedule-detail-days{display:grid;grid-template-columns:1fr 1fr;gap:10px}.schedule-detail-day{display:grid;grid-template-columns:110px 1fr;gap:14px;padding:14px;border:1px solid #e3eaf0;border-radius:11px;background:#fbfdfe}.schedule-detail-day>div{display:grid;gap:5px}.schedule-detail-block{font-weight:800;color:#162b44}.schedule-detail-day small{color:#64748b}@media(max-width:760px){.schedule-detail-days{grid-template-columns:1fr}.schedule-detail-day{grid-template-columns:90px 1fr}}
.schedule-company-default strong{color:#087e8b}.collaborator-schedule{margin:18px 0}.schedule-worker-actions{justify-content:flex-start}.schedule-history{display:grid;gap:8px}.schedule-history>div{display:flex;justify-content:space-between;gap:12px;padding:10px;border:1px solid #e3eaf0;border-radius:9px}.schedule-history span{color:#64748b;font-size:13px}

/* Generic shift rotations */
.shift-actions{display:flex;flex-wrap:wrap;gap:.75rem;margin:1rem 0 1.5rem}.shift-columns{display:grid;grid-template-columns:minmax(0,2fr) minmax(240px,1fr);gap:1rem}.shift-columns>div{min-width:0}.shift-list-row{display:flex;align-items:center;justify-content:space-between;gap:1rem;padding:.85rem 0;border-bottom:1px solid var(--border,#e4eaf0)}.shift-row-actions{display:flex;flex-wrap:wrap;gap:.5rem}.shift-dialog{max-width:780px}.shift-cycle-row{display:grid;grid-template-columns:90px minmax(0,1fr);align-items:center;gap:.75rem;margin:.5rem 0}.shift-cycle-row span{font-weight:700}@media(max-width:760px){.shift-columns{grid-template-columns:1fr}.shift-list-row{align-items:flex-start;flex-direction:column}.shift-cycle-row{grid-template-columns:1fr}}

/* Operational shifts / rotation calendar */
.shift-section-title{display:flex;align-items:flex-start;justify-content:space-between;gap:16px;margin-bottom:12px}.shift-section-title h3{margin:0 0 4px}.shift-divider{border:0;border-top:1px solid #dbe4ea;margin:26px 0}.shift-calendar-wrap{max-height:520px;overflow:auto;border:1px solid #dbe4ea;border-radius:12px}.shift-calendar{width:100%;border-collapse:collapse}.shift-calendar th,.shift-calendar td{padding:10px 12px;text-align:left;border-bottom:1px solid #e8eef2}.shift-calendar th{position:sticky;top:0;background:#f7fafc;z-index:1}.shift-calendar-modal .shift-dialog{max-width:760px}

/* Turnos y rotaciones: jerarquía y diálogos propios */
.shift-area{display:grid;gap:14px}.shift-eyebrow{display:block;margin-bottom:5px;color:#087e8b;font-size:11px;font-weight:900;letter-spacing:.1em;text-transform:uppercase}.shift-card-list{border:1px solid #e3eaf0;border-radius:13px;padding:0 16px;background:#fbfdfe}.shift-assignment-toolbar{display:flex;flex-wrap:wrap;gap:10px}.shift-group-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(240px,1fr));gap:12px}.shift-group-card,.shift-empty-card{display:flex;align-items:flex-start;justify-content:space-between;gap:12px;border:1px solid #e3eaf0;border-radius:13px;padding:16px;background:#fbfdfe}.shift-group-card h4{margin:9px 0 2px}.shift-group-card p{margin:0}.shift-empty-card{flex-direction:column}.shift-modal-heading{display:flex;align-items:flex-start;justify-content:space-between;gap:16px;margin-bottom:18px}.shift-modal-heading p{margin:6px 0 0}.shift-modal-close{border:0;background:#eef4f7;color:#19415b;width:34px;height:34px;border-radius:50%;font-size:22px;line-height:1;cursor:pointer}.shift-modal-body{display:grid;gap:16px}.shift-help{padding:10px 12px;border-left:3px solid #087e8b;background:#f0f9fa;border-radius:6px}.shift-preview{max-height:330px;overflow:auto;border:1px solid #dbe4ea;border-radius:12px}.primary:disabled,.secondary:disabled{opacity:.55;cursor:not-allowed}.shift-dialog input,.shift-dialog select{width:100%}@media(max-width:760px){.shift-section-title,.shift-group-card{flex-direction:column}.shift-section-title button,.shift-group-card button{width:100%}.shift-assignment-toolbar{display:grid}.shift-assignment-toolbar button{width:100%}.shift-calendar{min-width:600px}}
.shift-company-policy{display:flex;justify-content:space-between;gap:16px;padding:16px;border:1px solid #cfe4e7;border-radius:13px;background:#f4fbfb}.shift-policy-details{display:grid;grid-template-columns:repeat(3,minmax(130px,1fr));gap:14px;margin:12px 0 0}.shift-policy-details div{display:grid;gap:4px}.shift-policy-details dt{color:#64748b;font-size:12px;font-weight:700}.shift-policy-details dd{margin:0;color:#162b44;font-size:14px;font-weight:800}.shift-current-context{display:grid;gap:4px;padding:12px;border:1px solid #cfe4e7;border-radius:10px;background:#f4fbfb}.shift-current-context small{color:#64748b}.shift-history-lines{white-space:pre-line;line-height:1.9}.shift-individual-summary{border-top:1px solid #e3eaf0;padding-top:14px}.shift-individual-summary>div{display:flex;justify-content:space-between;gap:12px;padding:9px 0;border-bottom:1px solid #eef2f5}.shift-individual-summary span{color:#64748b;font-size:13px}@media(max-width:760px){.shift-company-policy,.shift-individual-summary>div{flex-direction:column}.shift-policy-details{grid-template-columns:1fr}}
.badge.attendance-entry_pending{background:#fef3c7;color:#92400e}.badge.attendance-absence{background:#dcfce7;color:#166534}.badge.attendance-vacation,.badge.attendance-leave,.badge.attendance-medical_leave{background:#dcfce7;color:#166534}
.schedule-worker-summary{display:grid;gap:4px;margin-top:12px;padding:10px 12px;border:1px solid #dbe4ea;border-radius:10px;background:#f8fbfc}.schedule-worker-summary strong{color:#162b44}.schedule-worker-summary span{color:#64748b;font-size:13px}.shift-worker-summary{display:block;margin-top:5px;color:#64748b;font-size:12px}.operational-shift-detail-modal .schedule-detail-days{grid-template-columns:1fr}.operational-shift-detail-modal .schedule-detail-block{display:flex;justify-content:space-between;gap:16px;padding:12px;border:1px solid #e3eaf0;border-radius:10px;background:#fbfdfe}.shift-detail-workers{margin-top:18px}.shift-detail-workers h3{margin-bottom:8px}.shift-worker-list{margin:0;padding-left:20px}.assignment-current span{font-size:14px}@media(max-width:760px){.operational-shift-detail-modal .schedule-detail-block{flex-direction:column}.schedule-worker-summary span{line-height:1.5}}

.employee-assignment-history{margin-top:16px}.employee-history-summary{display:flex;justify-content:space-between;gap:12px;align-items:center;padding:12px 14px;border:1px solid #cfe4e7;border-radius:10px;background:#f4fbfb}.employee-history-summary span{color:#64748b;font-size:13px}.employee-history-timeline{position:relative;display:grid;gap:0;margin-top:16px;padding-left:24px}.employee-history-timeline:before{content:"";position:absolute;left:7px;top:12px;bottom:12px;width:2px;background:#9acbd0}.employee-history-step{position:relative;padding:0 0 18px 0}.employee-history-step:last-child{padding-bottom:0}.employee-history-node{position:absolute;left:-24px;top:14px;width:16px;height:16px;border-radius:50%;background:#087e8b;border:4px solid #e9f7f8;z-index:1}.employee-history-step:not(:last-child):after{content:"↓";position:absolute;left:-28px;bottom:-1px;color:#087e8b;font-weight:900;background:#fff;padding:0 2px;z-index:2}.employee-history-card{display:grid;gap:5px;padding:13px 15px;border:1px solid #dbe4ea;border-radius:11px;background:#fff}.employee-history-card small{color:#64748b;font-weight:700}.employee-history-card strong{color:#162b44}.employee-history-card span{color:#52667a;font-size:13px}@media(max-width:760px){.employee-history-summary{align-items:flex-start;flex-direction:column}}

/* Asistencia · descansos compensatorios */
.attendance-tabs{display:flex;gap:8px;margin:0 0 18px;padding:5px;width:max-content;max-width:100%;border:1px solid #dbe4ea;border-radius:12px;background:#eef4f7}.attendance-tab{border:0;border-radius:9px;padding:10px 16px;background:transparent;color:#52667a;font:inherit;font-weight:800;cursor:pointer}.attendance-tab.active{background:#fff;color:#087e8b;box-shadow:0 2px 8px #102a4312}.compensatory-panel{margin-top:0}.compensatory-heading h2{margin:4px 0 6px}.compensatory-eyebrow{color:#087e8b;font-size:11px;font-weight:900;letter-spacing:.12em}.compensatory-metrics{display:grid;grid-template-columns:repeat(3,minmax(120px,1fr));gap:12px;margin:20px 0}.compensatory-metrics>div{padding:14px 16px;border:1px solid #e3eaf0;border-radius:12px;background:#f8fbfc}.compensatory-metrics span{display:block;color:#64748b;font-size:12px;font-weight:750}.compensatory-metrics strong{display:block;margin-top:4px;font-size:24px}.compensatory-list{display:grid;gap:12px}.compensatory-card{display:grid;grid-template-columns:minmax(170px,.8fr) minmax(520px,2.4fr) minmax(230px,1fr);gap:18px;align-items:center;padding:18px;border:1px solid #e3eaf0;border-radius:14px;background:#fff}.compensatory-worker{display:grid;gap:3px}.compensatory-worker span,.compensatory-data span,.compensatory-data small,.compensatory-auto span{color:#64748b;font-size:12px}.compensatory-data{display:grid;grid-template-columns:1.4fr .8fr .8fr 1fr;gap:18px}.compensatory-data>div{display:grid;gap:4px}.compensatory-status{display:inline-block;width:max-content;border-radius:999px;padding:5px 9px;font-size:12px}.compensatory-status.pending{background:#fef3c7;color:#92400e}.compensatory-status.scheduled{background:#dbeafe;color:#1d4ed8}.compensatory-status.taken{background:#dcfce7;color:#166534}.compensatory-status.cancelled{background:#eef2f5;color:#64748b}.compensatory-review{color:#b42318!important;font-weight:800}.compensatory-schedule{display:grid;gap:8px}.compensatory-schedule label{font-size:12px}.compensatory-schedule input{width:100%}.compensatory-auto{display:grid;gap:5px;padding:11px 12px;border-radius:10px;background:#eff6ff;color:#1d4ed8}.compensatory-auto.done{background:#ecfdf3;color:#166534}.compensatory-empty{display:grid;gap:5px;padding:30px;text-align:center;border:1px dashed #cbd7df;border-radius:14px;background:#fbfdfe;color:#64748b}.badge.attendance-compensatory_rest{background:#dbeafe;color:#1d4ed8}@media(max-width:1100px){.compensatory-card{grid-template-columns:1fr}.compensatory-data{grid-template-columns:repeat(2,1fr)}}@media(max-width:700px){.attendance-tabs{width:100%}.attendance-tab{flex:1}.compensatory-metrics,.compensatory-data{grid-template-columns:1fr}.compensatory-card{padding:14px}}
