:root{--bg:#f4f6f8;--panel:#fff;--ink:#172033;--muted:#667085;--line:#d9dee8;--blue:#1f5eff;--teal:#008f8c;--green:#168a43;--amber:#b86b00;--red:#bd2d2d;--nav:#111827}*{box-sizing:border-box}body{margin:0;background:var(--bg);color:var(--ink);font-family:Inter,Segoe UI,Roboto,Arial,sans-serif;font-size:14px}.app-loader{position:fixed;inset:0;z-index:3000;display:flex;gap:14px;align-items:center;justify-content:center;background:rgba(248,250,252,.96);font-weight:700}.app-loader.hidden{display:none}.sidebar{position:fixed;inset:0 auto 0 0;width:278px;background:var(--nav);color:#fff;padding:18px 14px;overflow:auto}.brand{display:flex;align-items:center;gap:12px;padding:8px 10px 22px;border-bottom:1px solid rgba(255,255,255,.12);margin-bottom:12px}.brand i{font-size:26px;color:#6ee7b7}.brand span{display:block;color:#aeb8c8;font-size:12px}.nav-link{width:100%;display:flex;align-items:center;gap:10px;color:#d4d9e2;background:transparent;border:0;text-align:left;padding:10px 12px;border-radius:6px;margin:2px 0}.nav-link:hover,.nav-link.active{background:#243044;color:#fff}.nav-link i{width:18px}.main{margin-left:278px;min-height:100vh}.topbar{position:sticky;top:0;z-index:1000;background:#fff;border-bottom:1px solid var(--line);padding:16px 22px;display:flex;align-items:center;justify-content:space-between;gap:16px}.topbar h1{font-size:20px;line-height:1.2;margin:0;font-weight:800}.topbar p{margin:3px 0 0;color:var(--muted)}.actions{display:flex;gap:8px;align-items:center}.actions select{min-width:220px}.explanation-toggle{display:inline-flex;align-items:center;gap:6px}.explanation-toggle.active{background:#172033;color:#fff;border-color:#172033}.view{display:none;padding:20px}.view.active{display:block}.summary-band{display:flex;justify-content:space-between;gap:20px;background:#0f766e;color:#fff;padding:18px 20px;border-radius:8px;margin-bottom:16px}.summary-band span{display:block;text-transform:uppercase;font-size:12px;letter-spacing:.08em;opacity:.75}.summary-band strong{display:block;font-size:18px;margin-top:5px}.alerts{display:flex;flex-wrap:wrap;gap:8px;align-items:center}.alert-pill{background:rgba(255,255,255,.16);border:1px solid rgba(255,255,255,.25);padding:7px 10px;border-radius:999px}.kpi-grid{display:grid;grid-template-columns:repeat(4,minmax(170px,1fr));gap:14px;margin-bottom:16px}.kpi-card{background:var(--panel);border:1px solid var(--line);border-radius:8px;padding:15px;min-height:132px}.kpi-card .label{color:var(--muted);font-size:12px;text-transform:uppercase;font-weight:700}.kpi-card .value{font-size:28px;font-weight:800;margin-top:8px}.kpi-card .trend{font-size:12px;margin-top:4px}.trend.up{color:var(--green)}.trend.down{color:var(--red)}.spark{height:34px;margin-top:8px}.content-grid{display:grid;gap:16px}.content-grid.two{grid-template-columns:1fr 1fr}.panel{background:#fff;border:1px solid var(--line);border-radius:8px;padding:16px;min-height:260px}.panel-title{font-weight:800;margin-bottom:12px}.chart-explanation{display:none;margin:-3px 0 12px;padding:10px 12px;border-left:3px solid var(--teal);background:#f0fdfa;color:#31515d;border-radius:6px;font-size:13px;line-height:1.45}.show-explanations .chart-explanation{display:block}#mainMap,#choroplethMap,#railMap,#roadMap,#busMap{height:650px;border:1px solid var(--line);border-radius:8px;background:#eef2f7}.content-grid #railMap,.content-grid #roadMap,.content-grid #busMap{height:460px}.map-toolbar,.filter-row,.scenario-controls{display:flex;align-items:center;gap:8px;margin-bottom:10px}.map-toolbar input{max-width:420px}.map-toolbar #coords{margin-left:auto;color:var(--muted);font-variant-numeric:tabular-nums}.stats-list{display:grid;grid-template-columns:repeat(2,1fr);gap:12px}.stat{background:#f8fafc;border:1px solid var(--line);border-radius:6px;padding:12px}.stat span{display:block;color:var(--muted);font-size:12px}.stat strong{font-size:22px}.scenario-controls input{max-width:120px}.scenario-results{display:grid;grid-template-columns:repeat(4,1fr);gap:14px;margin-top:18px}.result-tile{border:1px solid var(--line);background:#f8fafc;border-radius:8px;padding:15px}.result-tile span{display:block;color:var(--muted);font-size:12px}.result-tile strong{font-size:25px}.leaflet-control-layers{font-size:12px}.table{font-size:13px}@media(max-width:1100px){.sidebar{position:static;width:auto}.main{margin-left:0}.topbar,.summary-band{flex-direction:column;align-items:stretch}.kpi-grid,.content-grid.two,.scenario-results{grid-template-columns:1fr}.actions{flex-wrap:wrap}.view{padding:14px}#mainMap,#choroplethMap{height:540px}}@media print{.sidebar,.topbar .actions,.map-toolbar{display:none}.main{margin-left:0}.view{display:block;page-break-after:always}.chart-explanation{display:block}.panel,.kpi-card{break-inside:avoid}}
.info-note{background:#eff6ff;border:1px solid #bfdbfe;border-left:4px solid var(--blue);border-radius:8px;padding:12px 16px;margin-bottom:16px;font-size:13px;line-height:1.5;color:#1e3a5f}
.info-note strong{display:flex;align-items:center;gap:6px;color:#172033;margin-bottom:4px;font-size:13px}
.info-note p{margin:0}
.choropleth-layout{display:flex;gap:16px;align-items:flex-start}
.choropleth-layout #choroplethMap{flex:1;min-width:0}
.choropleth-legend{width:270px;flex-shrink:0;background:#fff;border:1px solid var(--line);border-radius:8px;padding:14px}
.legend-title{font-weight:800;margin-bottom:4px}
.legend-desc{font-size:12px;color:var(--muted);margin:0 0 8px}
.legend-method{font-size:12px;font-weight:700;margin-bottom:8px;color:#172033}
.legend-row{display:flex;align-items:center;gap:8px;font-size:12px;padding:3px 0}
.legend-swatch{width:16px;height:16px;border-radius:3px;border:1px solid rgba(0,0,0,.15);flex-shrink:0}
.legend-note{font-size:11px;color:var(--muted);margin:10px 0 0;line-height:1.4}
.simulator-legend{margin:10px 0;padding-left:20px}
.simulator-legend li{margin-bottom:6px;line-height:1.45}
.badge{display:inline-block;padding:2px 9px;border-radius:999px;font-size:11px;font-weight:700;color:#fff;margin-right:4px}
.badge-priority{background:var(--red)}
.badge-mid{background:var(--amber)}
.badge-high{background:var(--blue)}
.badge-excellent{background:var(--green)}
#connectivityWeightChart{max-height:320px}
@media(max-width:1100px){.choropleth-layout{flex-direction:column}.choropleth-legend{width:auto}}
.filter-combo{display:flex;gap:6px}
.filter-combo #filterLevel{min-width:110px;flex-shrink:0}
.filter-combo #filterValue{min-width:170px}
.chart-insight{background:#f8fafc;border:1px dashed var(--line);border-radius:6px;padding:8px 12px;margin:0 0 12px;font-size:12.5px;line-height:1.4;color:#334155}
.chart-insight:empty{display:none}
.method-glossary{margin:12px 0 0;font-size:12.5px}
.method-glossary dt{font-weight:800;color:#172033;margin-top:6px}
.method-glossary dd{margin:2px 0 0;color:#31515d}
.info-cards{display:grid;grid-template-columns:repeat(3,1fr);gap:16px}
.info-card{display:flex;gap:14px;background:#fff;border:1px solid var(--line);border-radius:8px;padding:16px}
.info-card-icon{width:44px;height:44px;border-radius:8px;flex-shrink:0;display:flex;align-items:center;justify-content:center;color:#fff;font-size:18px}
.info-card h3{font-size:14px;font-weight:800;margin:0 0 2px}
.info-card-sub{font-size:12px;color:var(--muted);margin:0 0 6px}
.info-card-desc{font-size:12.5px;margin:0 0 8px;line-height:1.4}
.info-card-meta{font-size:11px;color:var(--teal);font-weight:700;margin:0}
@media(max-width:1100px){.info-cards{grid-template-columns:1fr}}
.info-card{position:relative;flex-wrap:wrap}
.status-badge{position:absolute;top:12px;right:12px;display:inline-flex;align-items:center;gap:5px;font-size:10.5px;font-weight:800;text-transform:uppercase;letter-spacing:.03em;padding:3px 8px 3px 6px;border-radius:999px}
.status-dot{width:8px;height:8px;border-radius:50%;flex-shrink:0}
.status-live{background:#e8f8ee;color:#0f6b2c}
.status-live .status-dot{background:#1a9c46;box-shadow:0 0 0 2px rgba(26,156,70,.25)}
.status-pending{background:#fdeceb;color:#a3241a}
.status-pending .status-dot{background:#dc3324;box-shadow:0 0 0 2px rgba(220,51,36,.2)}
.status-partial{background:#fdf3e3;color:#8a5a00}
.status-partial .status-dot{background:#b86b00;box-shadow:0 0 0 2px rgba(184,107,0,.2)}
.status-legend{display:flex;gap:18px;align-items:center;font-size:12px;color:var(--muted);margin:2px 0 14px}
.status-legend span{display:inline-flex;align-items:center;gap:6px}
.backlog-table{width:100%;border-collapse:collapse;font-size:12.5px}
.backlog-table th{text-align:left;font-size:11px;text-transform:uppercase;letter-spacing:.03em;color:var(--muted);border-bottom:2px solid var(--line);padding:6px 10px}
.backlog-table td{padding:9px 10px;border-bottom:1px solid var(--line);vertical-align:top;line-height:1.4}
.backlog-table tr:last-child td{border-bottom:0}
