  html,body{margin:0;height:100%;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Helvetica,Arial,sans-serif;color:#1a1a1a;background:#0d1117}
  #map{position:absolute;left:0;right:0;top:0;bottom:0}
  .legend{position:absolute;bottom:18px;right:18px;background:rgba(255,255,255,.97);padding:10px 12px;border-radius:8px;box-shadow:0 4px 14px rgba(0,0,0,.25);z-index:1000;font-size:12px}
  .legend .row{display:flex;align-items:center;gap:8px;margin:2px 0}
  .legend .sw{display:inline-block;width:18px;height:12px;border:1px solid rgba(0,0,0,.2);border-radius:2px}
  .leaflet-popup-content{font-size:13px;line-height:1.5;min-width:240px}
  .leaflet-popup-content h3{margin:0 0 6px;font-size:14px}
  .leaflet-popup-content .stat{display:flex;justify-content:space-between;gap:12px;padding:2px 0;border-bottom:1px dashed #eee}
  .leaflet-popup-content .stat:last-child{border:0}
  .leaflet-popup-content .k{color:#666}
  .leaflet-popup-content .v{font-variant-numeric:tabular-nums;font-weight:500;text-align:right}
  .leaflet-control-layers{font-size:12.5px}
  .leaflet-control-layers-expanded{padding:8px 10px}
  .src-tag{display:inline-block;padding:1px 5px;border-radius:3px;font-size:10.5px;background:#eee;color:#555;margin-left:6px;vertical-align:middle}
  .src-osm{background:#e7f3ff;color:#1d4ed8}
  .src-dld{background:#fff5e6;color:#b8590a}
  .src-fake{background:#ffeaea;color:#a30808}
  .pin{display:flex;align-items:center;justify-content:center;width:24px;height:24px;border-radius:50%;background:#fff;border:1.5px solid;box-shadow:0 1px 3px rgba(0,0,0,.3);font-size:14px;line-height:1}
  .pin.metro-red{background:#CC0000;color:#fff;border-color:#7a0000}
  .pin.metro-red2{background:#FF6666;color:#fff;border-color:#a30808}
  .pin.metro-green{background:#00A85A;color:#fff;border-color:#005a31}
  .pin.metro-blue{background:#1565C0;color:#fff;border-color:#0a3a73}
  .pin.metro-tram{background:#F39A1A;color:#fff;border-color:#a86700}
  .pin.metro-gold{background:#C9A227;color:#fff;border-color:#856712}
  .pin.clinic{border-color:#d62728;color:#d62728;width:20px;height:20px;font-size:12px}
  .pin.school{border-color:#2ca02c;color:#2ca02c}
  .pin.university{border-color:#17becf;color:#17becf}
  .pin.hospital{border-color:#e377c2;color:#e377c2}
  .pin.mall{border-color:#ff7f0e;color:#ff7f0e}
  .pin.mall.souq{border-color:#b8590a;color:#b8590a}
  .pin.mosque{border-color:#8c564b;color:#8c564b;width:18px;height:18px;font-size:11px}
  .pin.construction{border-color:#9467bd;color:#9467bd}
  /* District-aggregate cluster pin: round badge with big count + tiny emoji */
  .pin.construction-cluster{display:flex;align-items:center;justify-content:center;flex-direction:column;background:#9467bd;color:#fff;border:2px solid #5d3f86;border-radius:50%;box-shadow:0 1px 4px rgba(0,0,0,.3);font-weight:700;line-height:1;cursor:pointer}
  .pin.construction-cluster .pin-count{font-size:13px;line-height:1;letter-spacing:.5px}
  .pin.construction-cluster .pin-emoji{font-size:9px;opacity:.85;margin-top:1px}
  /* Status chip inside the aggregate popup */
  .pj-status-chip{display:inline-block;padding:1px 7px;border-radius:9px;font-size:11px;font-weight:600;line-height:1.5;white-space:nowrap}
  /* Placeholder "Open all" button — wired in a later page */
  .pj-open-all{display:block;text-align:center;text-decoration:none;width:100%;box-sizing:border-box;background:#e6f7e6;color:#0a7f00;border:1px solid #b6dfb6;border-radius:5px;padding:6px 10px;font-size:12px;font-weight:600;font-family:inherit;cursor:pointer;transition:background .12s,border-color .12s}
  .pj-open-all:hover{background:#d3eed3;border-color:#92cc92;text-decoration:none}
  .rating{display:inline-block;padding:1px 6px;border-radius:3px;font-size:11px;font-weight:600;color:#fff}
  .rating.Outstanding{background:#0a7f00}
  .rating.Verygood{background:#3aaf2f}
  .rating.Good{background:#90c443}
  .rating.Acceptable{background:#f0a020}
  .rating.Weak{background:#cc4040}
  .rating.Notinspectedyet{background:#94a3b8}
  .lang-chip{display:inline-block;padding:1px 6px;border-radius:10px;font-size:11px;background:#eef;color:#334;margin:1px 2px 0 0}

  .dp-tabs{display:flex;gap:0;border-bottom:1px solid #e1e6ec;margin:-14px -18px 14px;padding:0 18px;background:#fafbfc;position:sticky;top:0;z-index:5}
  .dp-tab{background:none;border:none;padding:10px 16px;cursor:pointer;font-size:13px;font-weight:600;color:#666;border-bottom:2px solid transparent;font-family:inherit;line-height:1.2}
  .dp-tab:hover{color:#1f2933}
  .dp-tab.active{color:#1d4ed8;border-bottom-color:#1d4ed8}
  .dp-tab .tab-n{font-size:11px;color:#999;font-weight:500;margin-left:4px}
  .dp-tab.active .tab-n{color:#1d4ed8}
  .dp-tab-pane{display:none}
  .dp-tab-pane.active{display:block}
  .dp-empty{text-align:center;color:#888;padding:40px 20px;font-size:13px}
  .dp-section{margin:14px 0 18px}
  .dp-section h3{margin:0 0 8px;font-size:12.5px;font-weight:600;color:#555;text-transform:uppercase;letter-spacing:.04em}
  .dp-stats{display:grid;grid-template-columns:repeat(2,1fr);gap:8px;margin-bottom:6px}
  .dp-stat{background:#f7fafc;border-radius:6px;padding:8px 10px;border:1px solid #edf0f4;border-left:3px solid #cbd5e1}
  .dp-stat .k{font-size:11px;color:#777;line-height:1.2}
  .dp-stat .v{font-size:15px;font-weight:600;line-height:1.3;margin-top:2px;font-variant-numeric:tabular-nums}
  .dp-stat .sub{font-size:10.5px;color:#999;margin-top:1px}
  /* Each card's left-border tint signals which chart it pairs with. Hues
     are intentionally muted — same family as ROOM_COLORS so the panel
     stays "neutral" overall, not rainbow. */
  .dp-stat.dp-stat--avg   {border-left-color:#1d4ed8}
  .dp-stat.dp-stat--count {border-left-color:#475569}
  .dp-stat.dp-stat--vol   {border-left-color:#9a6418}
  .dp-stat.dp-stat--ppsqm {border-left-color:#0e7c66}
  .dp-trend-up{color:#0a7f00}
  .dp-trend-down{color:#cc4040}
  .dp-trend-flat{color:#666}
  .dp-chart{position:relative;height:180px;margin-bottom:8px}
  .room-chips{display:flex;flex-wrap:wrap;gap:4px;margin:0 0 10px}
  .room-chip{background:#eef2f7;border:1px solid #dde3ec;color:#374151;padding:3px 9px;border-radius:12px;font-size:11px;font-weight:500;cursor:pointer;line-height:1.4;transition:background .12s,color .12s,border-color .12s;font-variant-numeric:tabular-nums}
  .room-chip:hover{background:#dde7f7;border-color:#9bb6e2}
  .room-chip.active{background:#1d4ed8;border-color:#1d4ed8;color:#fff}
  .room-chip .chip-n{opacity:.62;margin-left:4px;font-size:10px}
  .room-chip.active .chip-n{opacity:.85}
  .period-chips{display:flex;flex-wrap:wrap;gap:4px;margin:0 0 10px;align-items:center}
  .period-chips .pc-lbl{font-size:11px;color:#777;margin-right:4px}
  .period-chip{background:#fff;border:1px solid #d6dde6;color:#374151;padding:3px 10px;border-radius:12px;font-size:11px;font-weight:500;cursor:pointer;line-height:1.4;transition:background .12s,border-color .12s,color .12s}
  .period-chip:hover{background:#f1f5fb;border-color:#9bb6e2}
  .period-chip.active{background:#0f172a;border-color:#0f172a;color:#fff}
  .dp-chart{position:relative}
  .chart-expand-btn{position:absolute;top:4px;right:4px;background:rgba(255,255,255,.85);border:1px solid #d6dde6;border-radius:4px;width:22px;height:22px;font-size:12px;line-height:18px;cursor:pointer;padding:0;color:#374151;z-index:3;display:flex;align-items:center;justify-content:center}
  .chart-expand-btn:hover{background:#fff;border-color:#9bb6e2}
  .chart-modal{position:fixed;inset:0;background:rgba(15,23,42,.62);display:none;align-items:center;justify-content:center;z-index:9000;padding:24px}
  .chart-modal.open{display:flex}
  .chart-modal-inner{background:#fff;border-radius:8px;width:100%;max-width:1400px;height:100%;max-height:90vh;display:flex;flex-direction:column;box-shadow:0 8px 40px rgba(0,0,0,.3)}
  /* Insight donut grid — 4 cards side by side, each a compact analytic
     exhibit (off-plan share / top projects / big-money years / what's
     selling now). Collapses to 2x2 on narrow screens. */
  .dp-donut-grid{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:10px;margin-top:6px}
  @media (max-width:780px){.dp-donut-grid{grid-template-columns:repeat(2,minmax(0,1fr))}}
  .dp-donut-card{background:#fff;border:1px solid #edf0f4;border-radius:8px;padding:8px 8px 6px;display:flex;flex-direction:column;min-width:0}
  .dp-donut-title{font-size:11.5px;font-weight:600;color:#475569;margin:0 0 6px;text-align:center;line-height:1.25;min-height:28px;display:flex;align-items:center;justify-content:center}
  .dp-donut{position:relative;flex:1 1 auto}
  .dp-donut-foot{margin-top:4px;text-align:right;font-size:11.5px;line-height:1.2}
  .dp-donut-foot .dp-section-more{padding-top:0}
  .dp-donut-foot a{font-size:11.5px;font-weight:500;color:#1d4ed8;text-decoration:none}
  .dp-donut-foot a:hover{text-decoration:underline}
  /* Room-breakdown legend — chip per room category, click to toggle. */
  .rb-legend{display:flex;flex-wrap:wrap;gap:5px;margin:4px 0 10px}
  .rb-chip{font-family:inherit;cursor:pointer;border-radius:14px;border:1px solid;padding:4px 10px;font-size:11.5px;font-weight:600;display:inline-flex;align-items:center;gap:5px;line-height:1.2;transition:opacity .12s}
  .rb-chip:hover{opacity:.85}
  .rb-chip[aria-pressed="false"]{text-decoration:line-through}
  .rb-chip .rb-chip-n{font-weight:500;opacity:.7;margin-left:3px;font-size:10.5px;font-variant-numeric:tabular-nums}
  .chart-modal-head{display:flex;align-items:center;gap:12px;padding:12px 16px;border-bottom:1px solid #e1e6ec;flex-wrap:wrap}
  .chart-modal-head h3{margin:0;font-size:15px;font-weight:600;flex-shrink:0}
  .chart-modal-badges{display:flex;flex-wrap:wrap;gap:6px;flex:1 1 auto;align-items:center}
  .chart-modal-badges .cm-badge{display:inline-flex;align-items:center;padding:3px 9px;border-radius:12px;font-size:11.5px;font-weight:600;font-variant-numeric:tabular-nums;background:#f1f5f9;color:#334155;border:1px solid #e2e8f0;line-height:1.2}
  .chart-modal-badges .cm-badge.pos{background:#ecfdf5;color:#047857;border-color:#a7f3d0}
  .chart-modal-badges .cm-badge.neg{background:#fef2f2;color:#b91c1c;border-color:#fecaca}
  .chart-modal-badges .cm-badge.muted{background:#f8fafc;color:#475569;border-color:#e2e8f0}
  .chart-modal-close{background:#fff;border:1px solid #d6dde6;border-radius:6px;padding:4px 10px;font-size:13px;cursor:pointer;flex-shrink:0}
  .chart-modal-body{flex:1;padding:16px;position:relative;min-height:0}
  .chart-modal-body canvas{width:100%!important;height:100%!important}
  .dp-collapsible{margin:8px 0 4px;border-top:1px solid #eef0f3;padding-top:8px}
  .dp-collapsible > summary{cursor:pointer;list-style:none;font-size:13px;font-weight:600;color:#1f2933;padding:6px 4px;margin:-6px -4px;border-radius:4px;display:flex;align-items:center;gap:6px;user-select:none}
  .dp-collapsible > summary::-webkit-details-marker{display:none}
  .dp-collapsible > summary::before{content:'▸';font-size:10px;color:#94a3b8;transition:transform .15s}
  .dp-collapsible[open] > summary::before{transform:rotate(90deg)}
  .dp-collapsible > summary:hover{background:#f6f8fa}
  .dp-collapsible > *:not(summary){margin-top:8px}
  .dp-table{width:100%;border-collapse:collapse;font-size:12px}
  .dp-table th, .dp-table td{padding:5px 6px;border-bottom:1px solid #f0f0f0;text-align:left;vertical-align:top}
  .dp-table th{font-size:10.5px;color:#888;font-weight:600;text-transform:uppercase;letter-spacing:.02em}
  .dp-table .num{text-align:right;font-variant-numeric:tabular-nums}
  .dp-table tr:hover td{background:#f9fafb}
  .dp-tag-op{display:inline-block;padding:1px 5px;border-radius:3px;font-size:10px;font-weight:600}
  .dp-tag-op-Off-Plan{background:#fff5e6;color:#b8590a}
  .dp-tag-op-Ready{background:#e6f7e6;color:#0a7f00}
  .dp-tag-g{display:inline-block;padding:1px 4px;border-radius:3px;font-size:10px}
  .dp-tag-g-Sales{background:#e7f3ff;color:#1d4ed8}
  .dp-tag-g-Mortgage{background:#f3e7ff;color:#6b1dff}
  .dp-tag-g-Gifts{background:#ffe7f3;color:#c026d3}

  /* Top-center consolidated control bar (pill style) */
  #mp-panel{position:absolute;top:12px;left:50%;transform:translateX(-50%);z-index:1100;background:#fff;border:1px solid #d0d7de;border-radius:28px;box-shadow:0 4px 16px rgba(0,0,0,.12);display:flex;align-items:stretch;padding:4px;gap:0;font-family:inherit;max-width:calc(100vw - 24px)}
  .mp-item{position:relative;display:flex}
  .mp-item:not(:last-child){border-right:1px solid #eef0f3}
  .mp-btn{background:transparent;border:none;color:#1f2933;padding:8px 16px;font-size:13.5px;font-weight:500;cursor:pointer;font-family:inherit;border-radius:22px;display:flex;align-items:center;gap:7px;line-height:1.2;white-space:nowrap;transition:background .12s}
  .mp-btn:hover{background:#f4f6f9}
  .mp-item.open .mp-btn{background:#eef3fc;color:#1d4ed8}
  .mp-btn .mp-icon{font-size:15px;line-height:1}
  .mp-btn .mp-current{font-size:12px;color:#666;font-weight:600;background:#f0f3f6;padding:1px 6px;border-radius:10px;font-variant-numeric:tabular-nums}
  .mp-item.open .mp-btn .mp-current{background:#dbe4f7;color:#1d4ed8}
  .mp-btn .mp-caret{font-size:10px;color:#999;margin-left:1px}
  .mp-item.open .mp-btn .mp-caret{color:#1d4ed8;transform:rotate(180deg)}
  .mp-body{position:absolute;top:calc(100% + 6px);left:50%;transform:translateX(-50%);background:#fff;border:1px solid #d0d7de;border-radius:8px;box-shadow:0 8px 24px rgba(0,0,0,.18);min-width:260px;display:none;z-index:1101}
  .mp-item.open .mp-body{display:block}
  .mp-section-title{font-size:11px;color:#666;font-weight:600;text-transform:uppercase;letter-spacing:.04em;padding:10px 14px 4px}
  /* Lang options */
  #mp-lang-list{display:flex;flex-direction:column;gap:2px;padding:6px}
  #mp-lang-list .lang-btn{background:#fff;border:none;color:#444;padding:8px 12px;font-size:12.5px;font-weight:600;cursor:pointer;border-radius:5px;font-family:inherit;text-align:left}
  #mp-lang-list .lang-btn.active{background:#1d4ed8;color:#fff}
  #mp-lang-list .lang-btn:hover:not(.active){background:#f0f3f6}
  /* Search */
  #search-input{box-sizing:border-box;width:calc(100% - 16px);margin:8px;padding:7px 10px;border:1px solid #d0d7de;border-radius:5px;font-size:13px;font-family:inherit}
  #search-input:focus{outline:none;border-color:#1d4ed8;box-shadow:0 0 0 2px rgba(29,78,216,.12)}
  #search-results{max-height:320px;overflow-y:auto;padding:0 6px 6px}
  .sr-item{padding:7px 8px;font-size:12px;cursor:pointer;border-radius:4px;display:flex;justify-content:space-between;align-items:center;gap:8px}
  .sr-item:hover{background:#eef}
  .sr-item .sr-name{color:#1f2933;font-weight:500;flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
  .sr-item .sr-meta{color:#888;font-size:10.5px;flex-shrink:0;font-variant-numeric:tabular-nums}
  .sr-empty{padding:14px 8px;color:#999;font-size:12px;text-align:center}
  /* POI list */
  #mp-poi-list{display:flex;flex-direction:column;padding:6px}
  #mp-poi-list label{display:flex;align-items:center;gap:8px;padding:8px 12px;font-size:12.5px;cursor:pointer;border-radius:4px;color:#1f2933;line-height:1.2}
  #mp-poi-list label:hover{background:#f0f3f6}
  #mp-poi-list input{margin:0;accent-color:#1d4ed8}
  #mp-poi-list .poi-count{margin-left:auto;color:#888;font-size:11px;font-variant-numeric:tabular-nums}
  /* Masks dropdown */
  #mp-mask-list{display:flex;flex-direction:column;padding:6px;min-width:260px;max-width:320px}
  .mask-row{display:flex;flex-direction:column;padding:8px 10px;border-radius:6px;cursor:pointer;border:1px solid transparent;transition:background .12s,border-color .12s}
  .mask-row:hover{background:#f4f6f9}
  .mask-row.active{background:#eef3fc;border-color:#cdd9f3}
  .mask-row-head{display:flex;align-items:center;gap:8px}
  .mask-row-radio{width:14px;height:14px;border-radius:50%;border:2px solid #d0d7de;flex-shrink:0;position:relative}
  .mask-row.active .mask-row-radio{border-color:#1d4ed8}
  .mask-row.active .mask-row-radio::after{content:'';position:absolute;top:2px;left:2px;right:2px;bottom:2px;border-radius:50%;background:#1d4ed8}
  .mask-row-title{font-size:13px;font-weight:600;color:#1f2933}
  .mask-row.active .mask-row-title{color:#1d4ed8}
  .mask-row-desc{font-size:11px;color:#888;margin:2px 0 0 22px;line-height:1.3}
  .mask-row-periods{display:flex;align-items:center;gap:8px;margin:6px 0 0 22px;flex-wrap:nowrap}
  .mask-row-periods .pc-lbl{font-size:11px;color:#777;flex-shrink:0}
  .period-slider-wrap{flex:1 1 auto;min-width:160px;display:flex;flex-direction:column;gap:2px;padding:0 4px}
  .period-slider{-webkit-appearance:none;appearance:none;width:100%;height:4px;background:#d6dde6;border-radius:2px;outline:none;margin:6px 0 2px;cursor:pointer}
  .period-slider:focus{outline:none}
  .period-slider::-webkit-slider-thumb{-webkit-appearance:none;appearance:none;width:16px;height:16px;border-radius:50%;background:#1d4ed8;border:2px solid #fff;box-shadow:0 1px 3px rgba(0,0,0,.25);cursor:pointer}
  .period-slider::-moz-range-thumb{width:16px;height:16px;border-radius:50%;background:#1d4ed8;border:2px solid #fff;box-shadow:0 1px 3px rgba(0,0,0,.25);cursor:pointer}
  .period-slider-ticks{display:flex;justify-content:space-between;font-size:10px;color:#777;padding:0 1px}
  .period-tick{cursor:pointer;padding:1px 4px;border-radius:3px;transition:color .12s,background .12s;white-space:nowrap;font-family:inherit}
  .period-tick:hover{color:#1d4ed8}
  .period-tick.active{color:#0f172a;font-weight:700;background:#eef3fc}
  /* View toggle pills (Map / Table) — sit at bottom of mask body */
  .mp-mask-view{display:flex;align-items:center;gap:4px;padding:6px 10px 0;font-size:11px;color:#666;font-family:inherit}
  .mp-mask-view-k{color:#888;margin-right:2px}
  .mp-mask-view-btn{font-family:inherit;font-weight:600;padding:3px 10px;border-radius:12px;border:1px solid #d6dde6;background:#fff;color:#374151;cursor:pointer;font-size:11px;transition:background .12s,border-color .12s,color .12s}
  .mp-mask-view-btn:hover:not(.active){background:#f1f5fb;border-color:#9bb6e2}
  .mp-mask-view-btn.active{background:#0f172a;border-color:#0f172a;color:#fff;cursor:default}
  /* Split layout — table on right half, map on left half. */
  #table-view{display:none;position:fixed;top:0;bottom:0;right:0;width:50%;background:#fff;flex-direction:column;z-index:5;border-left:1px solid #d6dde6;box-shadow:-2px 0 8px rgba(15,23,42,0.04)}
  body.view-table #table-view{display:flex}
  body.view-table #map{right:50%}
  body.view-table #legend{display:none !important}
  /* Keep Places + Language dropdowns from the top map panel (user wants
     POI layers + language switch reachable in split view). Hide the rest
     — Search/Metric/Levels are redundant or out-of-context here. */
  body.view-table #mp-search,
  body.view-table #mp-mask,
  body.view-table #mp-level{display:none}
  body.view-table #mp-panel{left:25%}
  body.view-table #view-switch{right:calc(50% + 14px)}
  /* Narrow viewport (mobile/tablet portrait) — fall back to full-width
     table, hide the map. Split is only useful when both halves are wide
     enough to be legible. */
  @media (max-width: 900px) {
    #table-view{width:auto;left:0;border-left:0;box-shadow:none}
    body.view-table #map{display:none;right:0}
    body.view-table #mp-panel{display:none !important}
    body.view-table #view-switch{right:14px}
  }
  .tv-toolbar{display:flex;align-items:center;flex-wrap:wrap;gap:8px 12px;padding:9px 14px;border-bottom:1px solid #e5e7eb;flex-shrink:0;background:#fff}
  .tv-pages{display:flex;gap:4px;flex-wrap:wrap}
  .tv-page-pill{padding:4px 11px;border-radius:14px;border:1px solid #d6dde6;background:#fff;color:#374151;font-size:12px;font-weight:600;cursor:pointer;text-decoration:none;font-family:inherit;transition:background .12s,border-color .12s,color .12s}
  .tv-page-pill:hover:not(.active){background:#f1f5fb;border-color:#9bb6e2}
  .tv-page-pill.active{background:#0f172a;border-color:#0f172a;color:#fff;cursor:default}
  .tv-periods{display:flex;gap:3px;flex-wrap:wrap;align-items:center}
  .tv-periods-k{font-size:11px;color:#888;margin-right:2px}
  .tv-period-chip{background:#fff;border:1px solid #d6dde6;color:#374151;padding:3px 9px;border-radius:12px;font-size:11.5px;font-weight:500;cursor:pointer;font-family:inherit;transition:background .12s,border-color .12s,color .12s}
  .tv-period-chip:hover:not(.active){background:#f1f5fb;border-color:#9bb6e2}
  .tv-period-chip.active{background:#1d4ed8;border-color:#1d4ed8;color:#fff;cursor:default}
  #tv-search{flex:0 1 240px;padding:5px 10px;border:1px solid #d6dde6;border-radius:6px;font-size:12.5px;font-family:inherit}
  #tv-search:focus{outline:none;border-color:#1d4ed8;box-shadow:0 0 0 2px rgba(29,78,216,0.15)}
  .tv-count{font-size:11.5px;color:#888;font-variant-numeric:tabular-nums}
  #view-switch{position:fixed;top:14px;right:14px;z-index:1200;background:#1d4ed8;color:#fff;border:0;border-radius:6px;padding:7px 14px;font-size:12.5px;font-weight:600;cursor:pointer;font-family:inherit;box-shadow:0 2px 6px rgba(0,0,0,.15)}
  #view-switch:hover{background:#1641aa}
  .tv-pager{display:flex;align-items:center;justify-content:center;gap:3px;padding:8px;border-top:1px solid #e5e7eb;flex-shrink:0;background:#fff;font-size:12px}
  .tv-pager-btn{background:#fff;border:1px solid #d6dde6;color:#374151;padding:3px 9px;border-radius:4px;cursor:pointer;font-family:inherit;font-size:12px;min-width:30px;font-variant-numeric:tabular-nums}
  .tv-pager-btn:hover:not(.disabled):not(.active){background:#f1f5fb;border-color:#9bb6e2}
  .tv-pager-btn.active{background:#0f172a;border-color:#0f172a;color:#fff;cursor:default}
  .tv-pager-btn.disabled{opacity:.4;cursor:default;pointer-events:none}
  .tv-pager-info{color:#666;margin:0 8px;font-variant-numeric:tabular-nums}
  .tv-pager-ellipsis{color:#999;padding:0 2px}
  .tv-scroll{overflow:auto;flex:1}
  #tv-table{width:100%;border-collapse:collapse;font-size:13px;font-family:inherit;table-layout:fixed}
  #tv-table th,#tv-table td{padding:4px 12px;text-align:left;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;line-height:1.45}
  #tv-table td{border-bottom:1px solid #eef0f3}
  #tv-table th{position:sticky;top:0;background:#f8fafc;font-weight:700;color:#475569;cursor:pointer;user-select:none;border-bottom:1px solid #cfd6e0;z-index:1;font-size:10.5px;text-transform:uppercase;letter-spacing:.04em;padding:8px 12px}
  #tv-table th:hover{background:#eef3fc}
  #tv-table th.sorted-asc,#tv-table th.sorted-desc{color:#1d4ed8}
  #tv-table th.sorted-asc::after{content:' ▲';opacity:.75;font-size:9px}
  #tv-table th.sorted-desc::after{content:' ▼';opacity:.75;font-size:9px}
  #tv-table th.rank{cursor:default;text-align:right;color:#94a3b8;padding-right:8px}
  #tv-table th.rank:hover{background:#f8fafc}
  #tv-table td.num{text-align:right;font-variant-numeric:tabular-nums;position:relative;color:#0f172a}
  #tv-table td.num .bar{position:absolute;right:0;top:3px;bottom:3px;background:rgba(29,78,216,0.07);pointer-events:none;border-radius:2px 0 0 2px}
  #tv-table td.num .v{position:relative}
  #tv-table td.rank{color:#94a3b8;font-size:11.5px;font-variant-numeric:tabular-nums;text-align:right;padding-right:8px}
  #tv-table td.pos,#tv-table td.neg{color:inherit}
  #tv-table td.pos .v,#tv-table td.neg .v{display:inline-block;padding:1px 7px;border-radius:10px;font-weight:600;font-size:12px;font-variant-numeric:tabular-nums}
  #tv-table td.pos .v{background:#dcfce7;color:#15803d}
  #tv-table td.neg .v{background:#fee2e2;color:#b91c1c}
  #tv-table tbody tr:nth-child(even) td{background:#fbfbfd}
  #tv-table tbody tr:hover td{background:#eef3fc}
  #tv-table tbody tr.dubai-row td{background:#fff7ec;font-weight:600;border-bottom:1px solid #f0c971}
  #tv-table tbody tr.dubai-row:hover td{background:#fdeacd}
  #tv-table tbody tr.dubai-row td.rank{color:#b8590a;font-weight:700;font-size:13px}
  .tv-district-link{color:#1d4ed8;text-decoration:none;cursor:pointer;font-weight:500}
  .tv-district-link:hover{text-decoration:underline}
  #tv-table td.tv-no-polygon{color:#94a3b8}
  .tv-empty{padding:30px;text-align:center;color:#888;font-size:13px}
  /* Whole row is a fly-to trigger when there's a polygon to focus. */
  #tv-table tbody tr.clickable{cursor:pointer}
  #tv-table tbody tr.clickable:hover td{background:#eef3fc}
  /* Choropleth overlay labels (growth %, payback years) */
  .choro-overlay{background:transparent;border:0}
  .choro-overlay-text{display:inline-block;background:rgba(255,255,255,0.85);color:#1f2933;font-size:11px;font-weight:700;padding:0 2px;border-radius:2px;white-space:nowrap;transform:translate(-50%,-50%);box-shadow:0 1px 1px rgba(0,0,0,0.14);font-variant-numeric:tabular-nums;line-height:1.2;cursor:pointer;transition:background 0.12s}
  .choro-overlay:hover .choro-overlay-text{background:rgba(255,255,255,1);box-shadow:0 1px 3px rgba(0,0,0,0.25)}
  /* Levels dropdown (vertical top→down) */
  #mp-level-list{display:flex;flex-direction:column;align-items:stretch;padding:8px 10px;gap:3px;min-width:140px}
  #mp-level-list .ls-btn{background:#fff;border:1px solid #e1e6ec;color:#444;padding:6px 12px;font-size:12.5px;font-weight:600;cursor:pointer;border-radius:5px;font-family:inherit;font-variant-numeric:tabular-nums;line-height:1.2;text-align:center}
  #mp-level-list .ls-btn:hover:not(.active){background:#eef;border-color:#c5d4ea}
  #mp-level-list .ls-btn.active{background:#1d4ed8;color:#fff;border-color:#1d4ed8}
  #mp-level-list .ls-arrow{color:#bbb;font-size:11px;text-align:center;line-height:1;margin:-1px 0}
  .leaflet-top.leaflet-right{margin-top:64px}
  .pj-progress{margin:6px 0 4px}
  .pj-progress-bar{position:relative;height:8px;border-radius:4px;background:#eef0f3;overflow:hidden}
  .pj-progress-fill{position:absolute;top:0;left:0;bottom:0;border-radius:4px;transition:width .3s}
  .pj-progress-meta{display:flex;justify-content:space-between;font-size:11px;color:#666;margin-top:3px}
  .pj-progress-meta .pj-stage{font-weight:600}
  .pj-stage-early{color:#94a3b8}
  .pj-stage-mid{color:#b8590a}
  .pj-stage-late{color:#0a7f00}
  .pj-stage-overdue{color:#cc4040}
  .dp-newdev{display:flex;align-items:center;gap:8px;background:#fff7ec;border:1px solid #f3d9a8;border-radius:6px;padding:6px 10px;margin:6px 0 10px;font-size:12px}
  .dp-newdev-icon{font-size:14px;line-height:1}
  .dp-newdev-k{color:#7a4c00;font-weight:500}
  .dp-newdev-v{margin-left:auto;font-weight:700;font-variant-numeric:tabular-nums;color:#1f2933}
