:root{--primary:#0f766e;--primary2:#14b8a6;--bg:#f3f7f6;--dark:#102a2a;--muted:#64748b;--danger:#fee2e2;--dangerText:#991b1b;--card:#ffffff;--border:#dbe7e5}
*{box-sizing:border-box}body{margin:0;background:radial-gradient(circle at top left,#dffaf5 0,#f8fafc 32%,var(--bg) 100%);font-family:Inter,Segoe UI,Arial,sans-serif;color:var(--dark)}
.app-shell{display:flex;min-height:100vh}.sidebar{width:280px;background:linear-gradient(180deg,#063b38,#0f766e);padding:24px 18px;color:#fff;position:sticky;top:0;height:100vh;box-shadow:12px 0 30px rgba(15,118,110,.18)}
.brand{font-size:1.35rem;font-weight:800;display:flex;align-items:center;gap:12px;margin-bottom:32px}.brand i{font-size:2rem;color:#a7f3d0}.nav-link{width:100%;border:0;background:transparent;color:#d9fffa;text-align:left;padding:14px 16px;border-radius:16px;margin-bottom:8px;font-weight:650;display:flex;gap:12px;align-items:center;transition:.2s}.nav-link:hover,.nav-link.active{background:rgba(255,255,255,.16);transform:translateX(4px)}
.content{flex:1;padding:34px;overflow:auto}.view{display:none}.view.active{display:block}.hero-card,.section-head{background:linear-gradient(135deg,#0f766e,#14b8a6);color:#fff;border-radius:28px;padding:30px;box-shadow:0 18px 50px rgba(20,184,166,.25)}h1{font-weight:850;margin:0}p{color:inherit;opacity:.88;margin:8px 0 0}.card-modern{background:rgba(255,255,255,.92);border:1px solid var(--border);border-radius:24px;padding:24px;box-shadow:0 18px 45px rgba(15,23,42,.08);backdrop-filter:blur(10px)}
.upload-box{display:flex;flex-direction:column;align-items:center;justify-content:center;text-align:center;min-height:230px;border:2px dashed #5eead4;border-radius:24px;background:#f0fdfa;cursor:pointer;padding:25px}.upload-box i{font-size:4rem;color:var(--primary)}.upload-box input{margin-top:16px}.filters{display:grid;grid-template-columns:repeat(5,minmax(150px,1fr));gap:12px;margin-top:22px}.grid-2{display:grid;grid-template-columns:1fr 1fr;gap:22px}.table-wrap{max-height:360px;overflow:auto;border-radius:16px;border:1px solid var(--border)}.table{margin:0}.table thead th{position:sticky;top:0;background:#ecfeff;color:#134e4a;z-index:2}.table td,.table th{vertical-align:middle}.follow{background:var(--danger)!important;color:var(--dangerText)!important;font-weight:800;border-left:5px solid #ef4444}.badge-soft{background:#ccfbf1;color:#115e59;border-radius:999px;padding:7px 12px;font-weight:800}.alert{border-radius:16px}.btn-primary{--bs-btn-bg:var(--primary);--bs-btn-border-color:var(--primary);--bs-btn-hover-bg:#115e59;--bs-btn-hover-border-color:#115e59;border-radius:14px;font-weight:750}.form-control,.form-select{border-radius:14px;border-color:#cbd5e1;padding:12px 14px}
@media(max-width:980px){.app-shell{flex-direction:column}.sidebar{width:100%;height:auto;position:relative}.content{padding:18px}.filters,.grid-2{grid-template-columns:1fr}.nav-link{display:inline-flex;width:auto}.sidebar{white-space:nowrap;overflow-x:auto}.brand{margin-bottom:12px}}
.filters-proy{grid-template-columns:repeat(5,minmax(145px,1fr))}.kpi-grid{display:grid;grid-template-columns:repeat(4,minmax(160px,1fr));gap:18px}.kpi-card{background:linear-gradient(135deg,#fff,#ecfeff);border:1px solid var(--border);border-radius:22px;padding:22px;box-shadow:0 14px 35px rgba(15,23,42,.08)}.kpi-card span{display:block;color:var(--muted);font-weight:800;text-transform:uppercase;font-size:.78rem;letter-spacing:.08em}.kpi-card strong{display:block;margin-top:8px;font-size:2rem;color:#0f766e}.kpi-card.danger{background:linear-gradient(135deg,#fff7ed,#fee2e2)}.kpi-card.danger strong{color:#b91c1c}@media(max-width:980px){.filters-proy,.kpi-grid{grid-template-columns:1fr}}
.upload-progress-modal{border:0;border-radius:28px;box-shadow:0 30px 80px rgba(15,23,42,.22);overflow:hidden;background:linear-gradient(180deg,#ffffff,#f0fdfa)}
.upload-progress{height:28px;border-radius:999px;background:#dbeafe;overflow:hidden}.upload-progress .progress-bar{font-weight:900;background:linear-gradient(90deg,#0f766e,#14b8a6)}
.upload-status-box{display:grid;grid-template-columns:repeat(3,1fr);gap:12px}.upload-status-box>div{background:#fff;border:1px solid var(--border);border-radius:18px;padding:14px;text-align:center;box-shadow:0 10px 24px rgba(15,23,42,.06)}.upload-status-box span{display:block;font-size:.76rem;text-transform:uppercase;letter-spacing:.06em;color:var(--muted);font-weight:800}.upload-status-box strong{display:block;margin-top:5px;font-size:1.35rem;color:var(--primary)}
@media(max-width:700px){.upload-status-box{grid-template-columns:1fr}}


tfoot th{background:#f0fdfa!important;color:#0f4f4a!important;font-weight:900;border-top:2px solid #99f6e4!important}.kpi-grid-5{grid-template-columns:repeat(5,minmax(150px,1fr))}.kpi-grid-8{grid-template-columns:repeat(4,minmax(150px,1fr))}.select2-container--bootstrap-5 .select2-selection{min-height:49px;border-radius:14px!important;border-color:#cbd5e1!important;padding:.45rem .75rem}.select2-container--bootstrap-5 .select2-selection__rendered{font-weight:600}.badge-ok,.badge-add,.badge-disp{border-radius:999px;padding:6px 11px;font-weight:900;font-size:.76rem}.badge-ok{background:#dcfce7;color:#166534}.badge-add{background:#ffedd5;color:#9a3412}.badge-disp{background:#fee2e2;color:#991b1b}@media(max-width:1200px){.kpi-grid-5,.kpi-grid-8{grid-template-columns:repeat(2,1fr)}}@media(max-width:700px){.kpi-grid-5,.kpi-grid-8{grid-template-columns:1fr}}

/* Mapa de calor mensual y centro de control */
.filters-heat{grid-template-columns:repeat(5,minmax(150px,1fr))}
.kpi-card small{display:block;margin-top:6px;color:var(--muted);font-size:.78rem;font-weight:500}.kpi-card.ok{background:linear-gradient(135deg,#ecfdf5,#ffffff)}.kpi-card.warn{background:linear-gradient(135deg,#fffbeb,#ffffff)}
.heat-legend{display:flex;gap:12px;flex-wrap:wrap;font-size:.86rem;color:var(--muted);align-items:center}.heat-legend span{display:inline-flex;align-items:center;gap:6px;background:#fff;border:1px solid var(--border);padding:8px 10px;border-radius:999px}.dot{width:12px;height:12px;border-radius:50%;display:inline-block}.dot-ok{background:#22c55e}.dot-warn{background:#f59e0b}.dot-danger{background:#ef4444}.dot-empty{background:#cbd5e1}
.heat-wrap{max-height:560px}.table-heat th,.table-heat td{text-align:center;white-space:nowrap}.sticky-cdv{position:sticky!important;left:0;z-index:3;background:#f8fafc!important;text-align:left!important;min-width:190px}.table-heat thead .sticky-cdv{z-index:5;background:#ecfeff!important}
.heat-cell{width:132px;min-height:76px;border:0;border-radius:18px;padding:9px 8px;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:3px;box-shadow:0 8px 18px rgba(15,23,42,.08);transition:.18s;cursor:pointer}.heat-cell:hover{transform:translateY(-2px) scale(1.01);box-shadow:0 12px 24px rgba(15,23,42,.14)}.heat-cell b{font-size:.75rem;letter-spacing:.05em}.heat-cell small{font-weight:850;font-size:1.05rem}.heat-cell em{font-size:.78rem;font-style:normal;opacity:.85}.heat-ok{background:#dcfce7;color:#166534}.heat-warn{background:#fef3c7;color:#92400e}.heat-danger{background:#fee2e2;color:#991b1b}.heat-empty{background:#e2e8f0;color:#64748b}.danger-badge{background:#fee2e2!important;color:#991b1b!important}.heat-detail-grid{grid-template-columns:repeat(2,1fr)}
.action-list{display:flex;flex-direction:column;gap:12px}.action-item{border:1px solid var(--border);border-left:5px solid #14b8a6;border-radius:18px;padding:14px 16px;background:#f8fafc}.action-item b{display:block;color:#0f766e;margin-bottom:4px}.action-item span{font-size:.92rem;color:#475569}
@media(max-width:980px){.filters-heat{grid-template-columns:1fr}.heat-cell{width:110px}.heat-detail-grid{grid-template-columns:1fr}}
