:root{color-scheme:light;--navy:#093746;--navy-deep:#072a37;--lime:#9bc32e;--green:#5f8b15;--blue:#1671cf;--amber:#c58a13;--ink:#163b49;--muted:#6b808b;--line:#dce5e9;--surface:#fff;--bg:#f0f4f6;--shadow:0 5px 22px #092e4210;font-family:Inter,"Segoe UI",Arial,sans-serif;font-synthesis:none}
*{box-sizing:border-box}body{margin:0;background:var(--bg);color:var(--ink);font-size:14px;line-height:1.5}button,input,select{font:inherit}button,a,select{ -webkit-tap-highlight-color:transparent}button{cursor:pointer}button:disabled{opacity:.45;cursor:not-allowed}button:focus-visible,a:focus-visible,select:focus-visible{outline:3px solid #1671cf70;outline-offset:3px}a{color:#0963ad;text-decoration:none}a:hover{text-decoration:underline}.hidden{display:none!important}
.topbar{min-height:86px;padding:16px 30px;display:flex;align-items:center;gap:24px;background:white;border-top:4px solid var(--lime);border-bottom:1px solid var(--line)}.brand-logo{width:220px;height:54px;object-fit:contain;object-position:left center}.brand-copy{padding-left:23px;border-left:1px solid var(--line);font-weight:600;color:var(--navy)}.brand-copy small{display:block;color:var(--muted);font-size:11px;font-weight:500;letter-spacing:.1em;text-transform:uppercase}.header-meta{margin-left:auto;display:flex;align-items:center;gap:14px}.updated-label{color:var(--muted);font-size:12px;text-align:right}.btn{border:1px solid var(--navy);border-radius:8px;background:var(--navy);color:white;padding:9px 14px;font-weight:600;font-size:12px;display:inline-flex;align-items:center;justify-content:center;gap:7px;white-space:nowrap;transition:background .16s,box-shadow .16s}.btn:hover{background:#145367;box-shadow:0 2px 6px #09374618;text-decoration:none}.btn-secondary{background:white;border-color:var(--line);color:var(--navy)}.btn-secondary:hover{background:#edf4f6}
.dashboard{max-width:1800px;margin:auto;padding:24px 28px 12px}.context-header{position:relative;margin-bottom:20px}.eyebrow{font-size:10px;letter-spacing:.14em;text-transform:uppercase;font-weight:800;color:var(--green);margin:0 0 5px}h1{margin:0;color:var(--navy-deep);font-size:clamp(23px,2vw,32px);font-weight:750;line-height:1.2;letter-spacing:-.035em}.context-meta{margin-top:8px;color:var(--muted);font-size:12px;display:flex;flex-wrap:wrap;gap:8px 18px}.example-notice{margin-top:12px;padding:9px 12px;background:#fff9e9;color:#866116;border:1px solid #eedcaa;border-radius:7px;font-size:12px;max-width:1000px}
.filters{display:grid;grid-template-columns:1.6fr 1.7fr 1fr 1fr;gap:14px;background:white;padding:16px 18px;border:1px solid var(--line);border-radius:12px;box-shadow:var(--shadow);margin-bottom:16px}.filter-field{min-width:0}.filter-field label{display:block;font-size:10px;font-weight:800;letter-spacing:.09em;color:var(--muted);text-transform:uppercase;margin-bottom:6px}.filter-field select{width:100%;border:1px solid #cbd9df;background:#f9fbfc;color:var(--navy);border-radius:7px;height:39px;padding:0 30px 0 10px;text-overflow:ellipsis;font-weight:600;font-size:12px}.filter-field select:hover{border-color:#8ea6b2}
.kpi-grid{display:grid;grid-template-columns:repeat(6,minmax(0,1fr));gap:12px;margin-bottom:20px}.kpi-card{position:relative;padding:16px 15px;background:white;border:1px solid var(--line);border-radius:10px;box-shadow:var(--shadow);min-width:0;overflow:hidden}.kpi-label{font-size:10px;color:var(--muted);font-weight:750;letter-spacing:.07em;text-transform:uppercase;min-height:30px}.kpi-value{display:block;font-size:clamp(19px,1.62vw,28px);font-weight:750;letter-spacing:-.045em;color:var(--navy);line-height:1.3;white-space:nowrap;font-variant-numeric:tabular-nums}.kpi-note{font-size:10px;color:var(--muted);margin-top:7px;line-height:1.4}.kpi-card.accent{border-top:3px solid var(--lime);padding-top:14px}.kpi-card.accent .kpi-value{color:#608917}
.map-grid{display:grid;grid-template-columns:minmax(0,1fr) 230px 300px;gap:14px;align-items:start;margin-bottom:20px}.map-panel,.detail-panel,.work-panel,.panel,.chart-panel{background:white;border:1px solid var(--line);border-radius:12px;overflow:hidden;box-shadow:var(--shadow);min-width:0}.panel-heading{padding:13px 16px;border-bottom:1px solid var(--line);display:flex;align-items:center;justify-content:space-between;gap:12px;min-height:59px}.panel-heading h2,h2{font-size:13px;font-weight:750;letter-spacing:-.01em;color:var(--navy);margin:0}.map-subtitle{font-size:10px;color:var(--muted);margin-top:3px}.map-stage,.overview-stage{position:relative;overflow:hidden;background:#d7e1e4;isolation:isolate}.map-stage{aspect-ratio:5/3}.overview-stage{aspect-ratio:600/880}.satellite-image,.map-overlay{position:absolute;inset:0;width:100%;height:100%;display:block}.satellite-image{object-fit:fill}.map-overlay{z-index:2}.map-overlay text{font-family:Inter,"Segoe UI",sans-serif;paint-order:stroke;stroke:#073746;stroke-width:1px;font-weight:650}.map-overlay [data-work]{cursor:pointer}.map-status{position:absolute;z-index:4;inset:0;display:grid;place-content:center;background:#edf3f5eb;color:var(--navy);padding:24px;text-align:center;font-size:12px}.map-controls{display:flex;flex-wrap:wrap;gap:6px;padding:10px 12px;border-top:1px solid var(--line)}.map-controls .btn{font-size:11px;padding:6px 9px}.map-footer{padding:11px 14px;border-top:1px solid var(--line);color:var(--muted);font-size:10px}.legend{display:flex;flex-wrap:wrap;gap:8px 14px}.legend-item{display:inline-flex;align-items:center;gap:6px;cursor:pointer;user-select:none}.legend-item input{width:14px;height:14px;margin:0;accent-color:#1769aa;cursor:pointer}.swatch{width:9px;height:9px;border-radius:50%;background:#96a7b0;border:1px solid #fff;box-shadow:0 0 0 1px #7c939930}.swatch.executed{background:#9bc32e}.swatch.progress{background:#efb63d}.swatch.planned{background:#c0ccd1}.swatch.selected{background:#328ef0}.map-overlay .map-layer-executed,.map-overlay .map-layer-progress,.map-overlay .map-layer-planned,.map-overlay .map-layer-selected{transition:opacity .12s}.map-overlay.hide-executed .map-layer-executed,.map-overlay.hide-progress .map-layer-progress,.map-overlay.hide-planned .map-layer-planned,.map-overlay.hide-selected .map-layer-selected{display:none}
.detail-section{padding:15px 16px}.detail-section+.detail-section{border-top:1px solid var(--line)}.detail-title{font-size:10px;letter-spacing:.09em;text-transform:uppercase;font-weight:800;color:var(--green);margin-bottom:10px}.detail-list{margin:0;display:grid;grid-template-columns:90px minmax(0,1fr);gap:8px 9px;font-size:11px}.detail-list dt{color:var(--muted)}.detail-list dd{margin:0;color:var(--navy);font-weight:600;overflow-wrap:anywhere}.detail-progress{height:5px;border-radius:10px;background:#e9eef0;margin-top:14px;overflow:hidden}.detail-progress>span{display:block;height:100%;background:var(--lime)}.detail-panel p{font-size:11px;color:var(--muted)}
.work-panel{margin-bottom:20px}.table-scroll{overflow:auto;max-height:390px}table{width:100%;border-collapse:collapse;font-size:11px;white-space:nowrap}thead{position:sticky;top:0;z-index:3;background:#edf3f5}th{text-align:left;color:#617985;font-size:9px;text-transform:uppercase;letter-spacing:.07em;padding:10px 12px;font-weight:800;border-bottom:1px solid var(--line)}td{padding:12px;border-bottom:1px solid #e9eef0;font-variant-numeric:tabular-nums}tbody tr{transition:background .12s;cursor:pointer}tbody tr:hover{background:#f4f8fa}tbody tr.selected-row{background:#eff7e3}tbody tr.selected-row td:first-child{box-shadow:inset 3px 0 var(--lime)}td:first-child{font-weight:750;color:var(--navy)}td:nth-child(3){white-space:normal;min-width:220px;max-width:320px}tbody tr:last-child td{border-bottom:0}.status-pill{display:inline-flex;padding:3px 7px;border-radius:5px;font-size:9px;font-weight:750;background:#eef1f3;color:#657b86}.status-pill.executed{background:#eef6db;color:#587b16}.status-pill.progress{background:#fff3d7;color:#a56f06}.status-pill.planned{background:#eef1f3;color:#657b86}.progress-track{display:inline-block;width:65px;height:5px;background:#e3eaf0;border-radius:8px;overflow:hidden;margin-right:7px;vertical-align:middle}.progress-fill{display:block;height:100%;background:var(--lime);border-radius:8px}
.analytics-grid,.charts-grid{display:grid;grid-template-columns:1fr 1fr;gap:16px;margin-bottom:20px}.panel>h2,.chart-panel>h2{padding:15px 17px;border-bottom:1px solid var(--line)}.panel{padding-bottom:12px}.partida-row,.ranking-row{padding:10px 17px;display:grid;grid-template-columns:minmax(0,1fr) auto;gap:5px 12px;font-size:11px}.partida-row>span:first-child,.ranking-row>span:first-child{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.mini-track{grid-column:1/-1;height:5px;background:#edf1f3;border-radius:9px;overflow:hidden}.mini-fill{height:100%;display:block;background:var(--lime);border-radius:9px}.ranking-row:nth-child(even) .mini-fill{background:#2c748a}.chart-panel svg{width:100%;height:auto;display:block;padding:12px}.chart-label{font:11px "Segoe UI",sans-serif;fill:#6b808b}.page-footer{max-width:1800px;margin:auto;padding:8px 28px 24px;display:flex;justify-content:space-between;gap:14px;flex-wrap:wrap;font-size:10px;color:var(--muted)}.error-banner{padding:14px 17px;margin:0 0 16px;border:1px solid #e8b8a4;border-radius:9px;color:#91442a;background:#fff3ec}
@media(min-width:1600px){.map-grid{grid-template-columns:minmax(0,1fr) 260px 320px}.detail-list{font-size:12px;grid-template-columns:100px minmax(0,1fr)}.map-stage{aspect-ratio:5/3}}
@media(max-width:1300px){.topbar{padding-inline:22px}.dashboard{padding-inline:20px}.brand-copy{font-size:12px}.map-grid{grid-template-columns:minmax(0,1fr) 190px 260px;gap:10px}.detail-list{grid-template-columns:76px minmax(0,1fr);font-size:10px}.kpi-grid{gap:8px}.kpi-card{padding-inline:11px}.kpi-value{font-size:20px}.map-controls .btn{font-size:10px;padding:5px 7px}}
@media(max-width:1150px){.map-grid{grid-template-columns:minmax(0,1fr) 235px}.detail-panel{grid-column:1/-1;display:grid;grid-template-columns:1fr 1fr}.detail-section+.detail-section{border-top:0;border-left:1px solid var(--line)}.detail-list{grid-template-columns:110px minmax(0,1fr);font-size:12px}.kpi-grid{grid-template-columns:repeat(3,minmax(0,1fr))}.kpi-label{min-height:0}.kpi-value{font-size:25px}.brand-copy{display:none}.filters{grid-template-columns:1fr 1fr}.updated-label{max-width:160px}.map-stage{aspect-ratio:5/3}}
@media(max-width:720px){.topbar{padding:10px 14px;gap:10px;min-height:72px}.brand-logo{width:160px;height:42px}.header-meta{gap:7px;flex-wrap:wrap;justify-content:flex-end}.updated-label{font-size:9px}.header-meta .btn{font-size:10px;padding:6px 8px}.dashboard{padding:20px 12px 8px}.context-header{margin-bottom:16px}h1{font-size:24px}.context-meta{font-size:11px;gap:4px 12px}.filters{padding:12px;gap:11px}.filter-field select{font-size:11px}.kpi-grid{grid-template-columns:repeat(2,minmax(0,1fr));gap:8px;margin-bottom:14px}.kpi-card{padding:12px}.kpi-card.accent{padding-top:10px}.kpi-value{font-size:23px}.kpi-label{font-size:9px}.map-grid{grid-template-columns:1fr;gap:12px}.map-stage{aspect-ratio:5/4}.overview-stage{aspect-ratio:1.7;max-height:260px}.overview-stage .satellite-image{object-fit:fill}.detail-panel{grid-column:auto;grid-template-columns:1fr}.detail-section+.detail-section{border-left:0;border-top:1px solid var(--line)}.panel-heading{padding:11px 12px}.detail-list{font-size:12px}.analytics-grid,.charts-grid{grid-template-columns:1fr;gap:12px}.page-footer{padding:8px 14px 20px}.table-scroll{max-height:350px}.example-notice{font-size:11px}}
@media(prefers-reduced-motion:reduce){*{scroll-behavior:auto!important;transition:none!important}}@media print{.topbar,.filters,.map-controls,.page-footer{display:none}.dashboard{padding:0}.map-grid{grid-template-columns:1fr 180px 260px}.kpi-grid{grid-template-columns:repeat(6,1fr)}.map-panel,.detail-panel,.kpi-card,.work-panel,.panel,.chart-panel{box-shadow:none;break-inside:avoid}.table-scroll{max-height:none}.map-stage{aspect-ratio:5/3}body{background:white}}
/* Ajuste de contrato y legibilidad, validado contra render real. */
.brand{display:flex;align-items:center;gap:20px}.brand-copy{font-size:13px;white-space:nowrap}.brand-copy span{display:block;font-size:12px;color:var(--muted);font-weight:500;margin-top:3px}.eyebrow,.filter-field label,.kpi-label,.detail-title{font-size:11px}.kpi-label{display:block;min-height:34px;line-height:1.5}.kpi-note{display:block;font-size:12px;line-height:1.45}.kpi-value{font-size:clamp(19px,1.5vw,26px)}.map-subtitle,.map-footer,.legend,.updated-label{font-size:12px}.map-subtitle{margin:4px 0 0}.overview-panel>p.map-subtitle{padding:9px 12px;margin:0;line-height:1.5}.panel-heading h2,h2{font-size:14px}.panel-heading>span{font-size:12px;color:var(--muted)}.detail-list{font-size:12px;grid-template-columns:90px minmax(0,1fr);gap:9px 10px}.detail-title{line-height:1.5}.detail-panel p{font-size:12px}.map-links{display:flex;gap:8px 16px;flex-wrap:wrap;padding:11px 14px;border-top:1px solid var(--line);font-size:12px}.map-links a{font-weight:600}.example-notice{margin:0 0 16px;max-width:none;font-size:12px}.filter-field select{font-size:13px}.context-meta{font-size:13px}.page-footer{font-size:11px;line-height:1.6}
table{font-size:12px}th{font-size:10px;padding:12px}td{padding:13px 12px}.table-select{border:1px solid #c2d4dc;background:#f5fafc;border-radius:5px;color:var(--navy);font-weight:750;padding:5px 8px;font-size:12px}.table-select:hover{background:#e4eff3}.selected-row .table-select{background:var(--navy);border-color:var(--navy);color:white}.sector-name{display:inline-block;margin-left:9px;font-size:12px;color:var(--navy);font-weight:600}.numeric{text-align:right;font-variant-numeric:tabular-nums}.status-pill{font-size:11px;padding:4px 7px}.progress-track{display:block;margin:5px 0 0 auto;height:5px;width:80px}.progress-fill.progress{background:#dca32b}.progress-fill.planned{background:#97a8b1}.empty-state{padding:24px 17px;white-space:normal;color:var(--muted);font-size:13px;cursor:default}.partida-row{display:block;padding:13px 17px}.row-label{display:flex;justify-content:space-between;gap:14px;align-items:baseline;font-size:12px;line-height:1.5}.row-label>span{white-space:normal}.row-label>strong{flex:none;white-space:nowrap;font-variant-numeric:tabular-nums}.partida-row .mini-track{margin:8px 0 5px}.row-meta{font-size:11px;color:var(--muted)}.ranking-row{width:100%;border:0;border-bottom:1px solid #e9eef0;border-radius:0;display:grid;grid-template-columns:26px minmax(0,1fr) auto;text-align:left;background:white;gap:12px;align-items:center;padding:15px 17px;font-size:12px;min-height:65px;color:var(--navy);transition:background .15s}.ranking-row:hover{background:#f3f7f9}.ranking-row.active{background:#eff6e5;box-shadow:inset 3px 0 var(--lime)}.rank-index{width:24px;height:24px;border-radius:6px;background:#edf2f4;display:grid;place-items:center;color:var(--muted);font-size:11px;font-weight:750}.ranking-row.active .rank-index{background:var(--lime);color:var(--navy-deep)}.ranking-row>.rank-name{white-space:normal;overflow:visible;line-height:1.4;font-weight:600}.rank-name small{display:block;color:var(--muted);font-size:10px;font-weight:400;margin-top:3px}.ranking-row>strong{font-size:12px;font-variant-numeric:tabular-nums;white-space:nowrap}.chart-legend{display:flex;align-items:center;gap:8px;padding:0 17px 12px;font-size:12px;color:var(--muted)}.legend-line{width:20px;border-top:3px solid #1769aa}.legend-bar{width:10px;height:10px;background:var(--lime);border-radius:2px}.legend-bar.navy{background:#155d89}.chart-legend i:nth-of-type(2){margin-left:12px}.chart-label{font-size:12px}
@media(max-width:1300px){.detail-list{font-size:12px;grid-template-columns:78px minmax(0,1fr)}.brand{gap:12px}.brand-copy{padding-left:14px}}
@media(max-width:1150px){.detail-list{font-size:12px;grid-template-columns:105px minmax(0,1fr)}.kpi-value{font-size:25px}.ranking-row{grid-template-columns:24px minmax(0,1fr);gap:8px 12px}.ranking-row>strong{grid-column:2}.row-label{flex-wrap:wrap;gap:4px 10px}}
@media(max-width:720px){.map-stage{aspect-ratio:5/3}.overview-stage{aspect-ratio:600/880;max-height:none;width:100%;max-width:260px;margin:0 auto}.brand-logo{width:145px}.brand{gap:0}.updated-label{font-size:10px;max-width:125px}.map-overlay text{font-size:inherit}.filters{grid-template-columns:1fr}.filter-field select{font-size:13px}.kpi-label{font-size:10px;min-height:32px}.kpi-note{font-size:11px}.kpi-value{font-size:22px}.eyebrow{font-size:10px}.legend{font-size:11px;gap:7px 12px}.detail-list{font-size:12px}.map-subtitle{font-size:11px}.sector-name{font-size:12px}.example-notice{font-size:12px}.ranking-row{grid-template-columns:26px minmax(0,1fr) auto}.ranking-row>strong{grid-column:auto}.rank-name small{font-size:11px}.row-label{display:block}.row-label strong{display:block;margin-top:4px}.row-meta{font-size:12px}.chart-label{font-size:13px}.panel-heading>span{font-size:11px;text-align:right}.chart-legend{font-size:12px}.page-footer{font-size:11px}}

.overview-stage{touch-action:none;cursor:grab}.overview-stage:active{cursor:grabbing}.overview-stage:focus-visible{outline:3px solid #1769aa;outline-offset:-3px}.airport-controls{display:flex;align-items:center;justify-content:center;gap:12px;padding:10px}.airport-controls span{min-width:45px;text-align:center;font-variant-numeric:tabular-nums}.airport-controls .btn{font-size:18px;padding:3px 12px}.map-links{flex-wrap:wrap}
.excel-summary{width:100%;font-size:11px;white-space:normal}.excel-summary th{background:#155d89;color:white;font-size:10px;padding:8px;white-space:nowrap}.excel-summary td{padding:8px;font-weight:400;line-height:1.4}.excel-summary td:first-child{font-weight:400}.excel-summary td:nth-child(3){min-width:0;max-width:none;white-space:normal}.excel-summary .numeric{white-space:nowrap;text-align:right}.excel-summary .amount-cell{font-weight:700}.excel-summary tfoot{background:#edf3f8;color:var(--navy);font-weight:700}.excel-summary tfoot td{font-weight:700;border-top:2px solid #155d89}.excel-summary tbody tr{cursor:default}.excel-summary tbody tr:nth-child(even){background:#f4f7fa}.partida-summary{min-width:580px}.partida-summary td:first-child{min-width:220px}.ranking-summary{min-width:590px}.ranking-summary tbody tr{cursor:pointer}.ranking-summary .selected-ranking{background:#edf6de!important;color:#557e14}.ranking-zone-link{border:0;background:none;padding:0;text-align:left;font:inherit;color:inherit;cursor:pointer}.ranking-zone-link:hover{text-decoration:underline}.ranking-summary .amount-cell{position:relative;isolation:isolate;min-width:100px}.amount-bar{position:absolute;inset:4px auto 4px 0;background:linear-gradient(90deg,#d9edaa,#96be3a);opacity:.65;z-index:-1}.summary-footnote{font-size:11px;color:var(--muted);padding:8px 12px;margin:0}.analytics-grid .table-scroll{max-height:none}
