/* Municipality map: geographic selection, not a simulated election choropleth. */
.municipal-map-shell{margin:10px 0 18px;--map-navy:#102849;--map-blue:#2377ec;--map-red:#e3465e;--map-muted:#526b8d}
.municipal-map-toggle{display:flex;gap:4px;margin-bottom:10px}.municipal-map-toggle button{min-height:44px;min-width:68px;border:1px solid #dbe5f2;border-radius:11px;background:#fff;color:#425d7d;font:inherit;cursor:pointer}.municipal-map-toggle button[aria-pressed=true]{background:#2377ec;color:#fff}
.pc-results-ui .results-directory #municipal-map-panel,#municipal-map-panel{position:relative;overflow:hidden;border:1px solid #dce7f6;border-radius:22px;padding:0;background:linear-gradient(155deg,#fff,#f0f6ff);box-shadow:0 10px 32px -18px #173a6b3d}
.municipal-map-topline{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:16px 18px 8px}.municipal-map-kicker{display:block;font-size:9px;font-weight:750;letter-spacing:1.6px;color:#ce3750;margin-bottom:3px}.municipal-map-region{margin:0;font-size:22px;line-height:1.15;letter-spacing:-.55px;color:#102849}.municipal-map-region-toggle{flex-shrink:0;min-height:44px;padding:9px 12px;border:1px solid #dbe6f5;border-radius:12px;background:#fff;color:#2367ba;font:inherit;font-size:11px;font-weight:650;cursor:pointer}
.municipal-map-legend{display:flex;align-items:center;justify-content:space-between;gap:8px;flex-wrap:wrap;padding:8px 18px 10px;font-size:10px;font-weight:550;color:#526b8d}.municipal-map-legend>span{display:inline-flex;align-items:center;gap:5px;white-space:nowrap}.municipal-map-legend>span:before{content:'';width:7px;height:7px;border-radius:50%;background:#9baabd;box-shadow:0 0 0 2px #fff}.municipal-map-legend>[data-state=reporting]:before{background:#2377ec}.municipal-map-legend>[data-state=awaiting]:before{background:#a0aac2}.municipal-map-legend>[data-state=delayed]:before{background:#e79536}.municipal-map-legend>[data-state=unchecked]:before{background:#fff;border:1.5px solid #9baabd;box-sizing:border-box}
.municipal-map-stage{position:relative;width:100%;max-width:100%;min-width:0;box-sizing:border-box;aspect-ratio:800/580;min-height:290px;background:radial-gradient(ellipse at 12% 5%,#e9f7ff,#e1edfa 70%);overflow:hidden;border-block:1px solid #dce8f5}
.municipal-map-stage:before{content:'';position:absolute;inset:0;pointer-events:none;background-image:linear-gradient(#fff5 1px,transparent 1px),linear-gradient(90deg,#fff5 1px,transparent 1px);background-size:40px 40px;opacity:.3}
.municipal-map-svg{display:block;position:absolute;inset:0;width:100%;height:100%;overflow:hidden}.municipal-map-svg path{stroke:#fff;stroke-width:.7;fill:#cad7e8;transition:fill .16s ease,stroke .16s ease}.municipal-map-svg .municipal-map-reporting{fill:#8bb7f3}.municipal-map-svg .municipal-map-awaiting{fill:#c1cbe0}.municipal-map-svg .municipal-map-delayed{fill:#ecd3ae}.municipal-map-svg .municipal-map-unavailable{fill:#d9deea}
.municipal-map-svg a[aria-pressed=true] path{fill:#153b70;stroke:#fff;stroke-width:1.5}.municipal-map-svg a:hover path,.municipal-map-svg a:focus-visible path{fill:#558eda;stroke:#102849;stroke-width:2;outline:none}
.municipal-map-markers{position:absolute;inset:0;pointer-events:none}.municipal-map-marker{position:absolute;display:grid;place-items:center;pointer-events:auto;transform:translate(-50%,-50%);width:44px;height:44px;min-height:44px;padding:0;border:0;background:none;border-radius:50%;cursor:pointer;color:#102849;font-family:inherit;z-index:2}.municipal-map-marker:hover,.municipal-map-marker:focus-visible,.municipal-map-marker[aria-pressed=true]{z-index:8;background:#ffffff55}.municipal-map-dot{width:12px;height:12px;border-radius:50%;border:2.5px solid #fff;background:#9aaac1;box-shadow:0 2px 6px #27446840}.municipal-map-status-reporting .municipal-map-dot{background:#2377ec}.municipal-map-status-delayed .municipal-map-dot{background:#e79536}.municipal-map-status-awaiting .municipal-map-dot{background:#8999b9}.municipal-map-marker[aria-pressed=true] .municipal-map-dot{background:#e3465e;box-shadow:0 0 0 5px #e3465e25,0 2px 8px #17345f3d}
.municipal-map-marker-label{position:absolute;left:30px;top:9px;width:max-content;max-width:220px;box-sizing:border-box;padding:4px 6px;border:1px solid #ffffffd9;border-radius:6px;background:#ffffffd9;box-shadow:0 2px 7px #2744680c;white-space:normal;overflow-wrap:anywhere;font-size:11px;line-height:15px;font-weight:650;letter-spacing:-.15px;pointer-events:auto}.municipal-map-marker[data-label-side=left] .municipal-map-marker-label{left:auto;right:30px}.municipal-map-marker[data-label-row="1"] .municipal-map-marker-label{top:26px}.municipal-map-marker[data-label-row="2"] .municipal-map-marker-label{top:-10px}.municipal-map-marker[aria-pressed=true] .municipal-map-marker-label{background:#102849;border-color:#102849;color:#fff;box-shadow:0 4px 12px #17345f38}
.municipal-map-north{position:absolute;top:10px;right:12px;display:grid;place-items:center;width:34px;height:34px;border-radius:10px;border:1px solid #d9e4f3;background:#ffffffc9;font-size:11px;font-weight:700;color:#68809f;pointer-events:none}
.municipal-map-choice-label{display:flex;align-items:center;gap:10px;padding:10px 14px 0;color:#526b8d;font-size:10px;font-weight:650}.municipal-map-choice{flex:1;min-width:0;min-height:44px;padding:9px 10px;border:1px solid #dce6f4;border-radius:11px;background:#fff;color:#244869;font:inherit;font-size:12px}
.municipal-map-selected{position:relative;margin:12px 14px 0;padding:12px;border:1px solid #e0e8f5;border-radius:17px;background:#fffffff2;box-shadow:0 9px 24px -16px #10284966}.municipal-map-selected:before{content:'';position:absolute;left:16px;right:16px;top:-1px;height:2px;background:linear-gradient(90deg,#e3465e,#2377ec 50%,#102849);border-radius:8px}.municipal-map-selected-body{display:flex;align-items:center;gap:10px;min-width:0}.municipal-map-identity{display:grid;place-items:center;flex:0 0 54px;width:54px;height:58px;overflow:hidden;border-radius:12px;background:linear-gradient(145deg,#ebf2ff,#bfdbfa);color:#1b5baf;font-size:19px;font-weight:800;letter-spacing:-1px}.municipal-map-identity[data-map-identity="15614"]{background:linear-gradient(150deg,#153e74,#478ad7);color:#fff}.municipal-map-identity[data-map-identity="19441"]{background:linear-gradient(145deg,#f8e4e8,#f2b4bf);color:#8e3149}.municipal-map-identity[data-map-identity="10108"]{background:linear-gradient(145deg,#e9e9ff,#c8c7ee);color:#4b448b}.municipal-map-identity img{display:block;width:100%;height:100%;object-fit:cover}.municipal-map-selected-copy{min-width:0;flex:1}.municipal-map-selected h3{font-size:17px;line-height:1.2;letter-spacing:-.35px;color:#102849;margin:0 0 4px;overflow-wrap:anywhere}.municipal-map-legal{font-size:9px;line-height:1.3;color:#526b8d;margin:0 0 4px}.municipal-map-city-status{font-size:10px;line-height:1.4;color:#526b8d;margin:0;display:flex;align-items:center;gap:5px}.municipal-map-city-status:before{content:'';flex:0 0 6px;width:6px;height:6px;border-radius:50%;background:#a0adc1}.municipal-map-city-status.municipal-map-status-reporting:before{background:#2377ec}.municipal-map-city-status.municipal-map-status-delayed:before{background:#e79536}.municipal-map-meta{font-size:10px;color:#526b8d;margin:4px 0 0}.municipal-map-close{display:grid;place-items:center;align-self:flex-start;flex:0 0 44px;width:44px;min-height:44px;margin:-8px -8px 0 0;padding:0;border:0;border-radius:10px;background:transparent;color:#526b8d;font:inherit;font-size:23px;cursor:pointer}.municipal-map-view-races{display:flex;align-items:center;justify-content:center;min-height:44px;margin-top:10px;border-radius:11px;color:#fff!important;background:linear-gradient(120deg,#2c82f4,#1765df);box-shadow:0 4px 10px #2377ec20;text-decoration:none;font-size:12px;font-weight:700}.municipal-map-view-races:after{content:'›';margin-left:8px;font-size:20px;line-height:1}
.municipal-map-bottom{padding:8px 15px 12px}.municipal-map-status{font-size:10px;color:#526b8d;line-height:1.5;margin:4px 0}.municipal-map-coverage summary{display:flex;align-items:center;min-height:44px;color:#526b8d;font-size:11px;font-weight:600;cursor:pointer;list-style:none}.municipal-map-coverage summary:after{content:'+';margin-left:auto;font-size:17px;color:#526b8d}.municipal-map-coverage[open] summary:after{content:'−'}.municipal-map-coverage-note{font-size:11px;line-height:1.6;color:#526b8d;margin:0 0 4px}.municipal-map-coverage a{display:inline-flex;align-items:center;min-height:44px;color:#206bbf;font-size:11px;font-weight:600}.municipal-map-shell :is(button,a,select,summary):focus-visible{outline:3px solid #2377ec;outline-offset:3px}
#municipal-map-panel[hidden],#cities[hidden],.municipal-map-selected[hidden],.municipal-map-region-toggle[hidden]{display:none!important}
@media(min-width:900px){.municipal-map-stage{max-height:560px;min-height:420px}.municipal-map-selected{max-width:420px;margin:14px auto 0}.municipal-map-choice-label{max-width:520px;margin:0 auto}.municipal-map-marker-label{font-size:12px}.municipal-map-topline{padding:20px 22px 8px}.municipal-map-legend{justify-content:flex-start;gap:24px;padding-inline:22px}.municipal-map-bottom{padding-inline:22px}}
@media(max-width:420px){.municipal-map-topline{padding:14px 13px 6px}.municipal-map-region{font-size:20px}.municipal-map-legend{padding:7px 13px 9px;gap:7px;font-size:9px}.municipal-map-stage{min-height:310px}.municipal-map-marker-label{font-size:10px;padding:3px 5px}.municipal-map-selected h3{font-size:16px}.municipal-map-identity{width:50px;flex-basis:50px;height:55px}.municipal-map-choice-label{font-size:9px;padding-inline:12px}}
@media(prefers-reduced-motion:reduce){.municipal-map-svg path{transition:none}}

.municipal-map-label-leader{position:absolute;left:22px;top:22px;height:1.5px;background:#42698f;transform-origin:left center;pointer-events:none;z-index:-1}

.municipal-map-check-time{margin:3px 0 0;color:#526b8d;font-size:9px;line-height:1.35}

.municipal-map-photo-credit{position:relative;display:block;width:100%;height:100%;min-height:44px;color:#fff!important}.municipal-map-photo-credit span{position:absolute;bottom:0;left:0;right:0;padding:4px 1px;background:#102849b8;color:#fff;font-size:8px;line-height:1.15;letter-spacing:0;text-align:center;font-weight:550}

.municipal-map-marker-label[hidden],.municipal-map-label-leader[hidden]{display:none!important}

/* Exact-race preview: the same source-backed content for hover, focus and tap. */
.municipal-map-preview{position:absolute;z-index:30;top:12px;right:12px;width:min(350px,calc(100% - 24px));max-height:calc(100% - 24px);overflow:auto;overscroll-behavior:contain;box-sizing:border-box;padding:14px;border:1px solid #a9bed9;border-radius:14px;background:#fff;box-shadow:0 12px 35px #10284938;color:#102849;font-size:12px;line-height:1.45}
.municipal-map-preview[hidden]{display:none!important}.municipal-preview-heading{display:flex;align-items:flex-start;justify-content:space-between;gap:10px;margin-bottom:8px}.municipal-preview-heading h3{font-size:18px;line-height:1.25;margin:10px 0 0;overflow-wrap:anywhere}.municipal-preview-controls{display:flex;gap:4px}.municipal-map-preview button,.municipal-map-preview a,.municipal-preview-source summary{min-height:44px;box-sizing:border-box}.municipal-map-preview button{padding:8px 10px;border:1px solid #cbd9e9;border-radius:8px;background:#f0f5fc;color:#153b70;font:inherit;font-weight:650;cursor:pointer}.municipal-preview-controls button:last-child,.municipal-preview-cluster-close{min-width:44px;font-size:20px}.municipal-preview-controls button[aria-pressed=true]{background:#153b70;color:white}.municipal-preview-picker{display:grid;gap:4px;font-size:10px;font-weight:700;text-transform:uppercase;letter-spacing:.6px}.municipal-preview-picker select{width:100%;min-height:44px;box-sizing:border-box;border:1px solid #a9bed9;border-radius:8px;background:#fff;color:#102849;padding:8px;font:500 12px/1.4 Inter,Arial,sans-serif;letter-spacing:0;text-transform:none}.municipal-preview-status{font-weight:750;margin:9px 0 5px}.municipal-preview-board,.municipal-preview-more,.municipal-preview-polls,.municipal-preview-check,.municipal-preview-footnote{font-size:11px;color:#526b8d;margin:6px 0}.municipal-preview-warning{padding:7px 9px;background:#fff0d5;border-left:3px solid #c2872e;color:#714d17;font-size:11px;margin:6px 0}.municipal-preview-totals{width:100%;border-collapse:collapse;font-size:12px;font-variant-numeric:tabular-nums}.municipal-preview-totals caption{text-align:left;color:#526b8d;font-size:10px;padding:7px 0}.municipal-preview-totals th,.municipal-preview-totals td{text-align:right;padding:7px 4px;border-bottom:1px solid #e0e8f2}.municipal-preview-totals th:first-child{text-align:left;max-width:170px;overflow-wrap:anywhere}.municipal-preview-totals thead th{font-size:10px;color:#526b8d;font-weight:600}.municipal-preview-totals tbody th{font-weight:600}.municipal-preview-totals td{white-space:nowrap}.municipal-preview-margin{font-size:12px;font-weight:700;margin:8px 0}.municipal-preview-source{border-top:1px solid #e0e8f2;margin-top:8px}.municipal-preview-source summary{display:flex;align-items:center;color:#315d90;cursor:pointer}.municipal-preview-source p{font-size:11px;margin:4px 0}.municipal-preview-source a{display:inline-flex;align-items:center;color:#175dba}.municipal-preview-actions{display:flex;gap:8px;margin-top:8px}.municipal-preview-open{display:flex;align-items:center;justify-content:center;flex:1;padding:10px;border-radius:8px;background:#1769df;color:white!important;text-decoration:none;font-weight:700}.municipal-preview-save[aria-pressed=true]{background:#e7f1ff}.municipal-preview-save:disabled{opacity:.6;cursor:wait}.municipal-preview-retry{width:100%;margin-top:8px}.municipal-preview-cluster{display:grid;gap:6px}.municipal-preview-cluster button{text-align:left}.municipal-map-preview :is(button,a,select,summary):focus-visible{outline:3px solid #1769df;outline-offset:2px}
@media(max-width:659px){.municipal-map-preview{position:fixed;inset:auto 8px max(8px,env(safe-area-inset-bottom));width:auto;max-height:min(70dvh,620px);z-index:120;border-radius:17px;padding:14px;box-shadow:0 -8px 38px #10284940}.municipal-preview-picker select{font-size:16px}.municipal-preview-heading h3{font-size:19px}.municipal-preview-totals{font-size:13px}}


/* The directory and map share one exact municipality selection on desktop. */
.municipal-directory-workspace,.municipal-directory-list{min-width:0}
@media(min-width:900px){
 .municipal-directory-split{display:grid;grid-template-columns:minmax(260px,.78fr) minmax(0,1.4fr);align-items:start;gap:18px}
 .municipal-directory-split .municipal-map-shell{margin:0;min-width:0;position:sticky;top:88px}
 .pc-results-ui .results-directory .municipal-directory-split .cities{grid-template-columns:minmax(0,1fr);gap:9px}
 .pc-results-ui .results-directory .municipal-directory-split .city-link{grid-template-columns:52px minmax(0,1fr);min-height:88px;padding:9px 84px 9px 9px;gap:10px}
 .pc-results-ui .results-directory .municipal-directory-split .city .city-emblem{width:52px;height:58px;border-radius:9px}
 .pc-results-ui .results-directory .municipal-directory-split .city-link h3{font-size:16px;line-height:1.25}
 .pc-results-ui .results-directory .municipal-directory-split .city-link p{font-size:10px;margin:3px 0}
 .pc-results-ui .results-directory .municipal-directory-split .city-link .city-readiness{font-size:10px}
 .municipal-directory-split .municipal-map-stage{aspect-ratio:800/690;min-height:430px;max-height:620px}
 .municipal-directory-split .municipal-map-region{font-size:19px}
 .municipal-directory-split .municipal-map-topline{padding:15px 14px 6px}
 .municipal-directory-split .municipal-map-legend{padding-inline:14px;gap:12px;font-size:9px}
 .pc-results-ui .results-directory .municipal-directory-split .city{padding-bottom:0}
 .pc-results-ui .results-directory .municipal-directory-split .city-preview{left:auto;right:40px;top:22px;bottom:auto;width:44px;height:44px;padding:0;justify-content:center;border:0;border-radius:10px}
 .municipal-directory-split .city-preview-label{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip-path:inset(50%);white-space:nowrap;border:0}
 .pc-results-ui .results-directory .municipal-directory-split .city-preview>span[aria-hidden=true]{font-size:26px;line-height:1}
 .pc-results-ui .results-directory .municipal-directory-split .city:has(.city-preview[aria-expanded=true]){border-color:#0865ee;box-shadow:inset 3px 0 #0865ee}
 .municipal-directory-split .directory-list-status{margin:0 0 10px}
 .municipal-directory-split .directory-list-status h2{font-size:17px}
 .municipal-directory-split #more-cities{width:100%;margin-top:12px;min-height:44px}
 .results-directory.directory-close-view .municipal-directory-workspace{display:none}
}
@media(forced-colors:active){.municipal-directory-split .city:has(.city-preview[aria-expanded=true]){border:2px solid Highlight;background:Canvas;color:CanvasText;box-shadow:none}}

/* Map gestures stay within this canvas. Browser zoom and page scrolling outside remain available. */
.municipal-map-stage{touch-action:none;cursor:grab}.municipal-map-stage:active{cursor:grabbing}.municipal-map-stage:focus-visible{outline:3px solid #1769df;outline-offset:-4px}.municipal-map-camera{position:absolute;left:12px;top:12px;z-index:12;display:flex;flex-wrap:wrap;gap:4px;max-width:calc(100% - 72px);padding:4px;border:1px solid #d4e3f6;border-radius:14px;background:#fffffff2;box-shadow:0 5px 22px #14365a25;cursor:default}.municipal-map-camera button{min-width:44px;min-height:44px;padding:5px 10px;border:0;border-radius:9px;background:#eef5ff;color:#123b70;font:inherit;font-weight:750;cursor:pointer}.municipal-map-camera button:nth-child(-n+2){font-size:24px}.municipal-map-camera button:hover{background:#dcecff}.municipal-map-camera button:focus-visible{outline:3px solid #1769df;outline-offset:1px}.municipal-map-gesture-hint{margin:0;padding:9px 14px;color:#526b8d;font-size:11px;line-height:1.5}.municipal-map-stage [data-map-marker]{touch-action:none}#municipal-map-panel:fullscreen,.municipal-map-expanded{background:#f0f6ff;overflow:auto!important}#municipal-map-panel:fullscreen .municipal-map-stage,.municipal-map-expanded .municipal-map-stage{height:70dvh;max-height:none;min-height:300px;aspect-ratio:auto}.municipal-map-expanded{position:fixed!important;inset:8px!important;z-index:10000!important;max-height:calc(100dvh - 16px);box-shadow:0 0 0 12px #0b244b99!important}@media(max-width:420px){.municipal-map-camera{left:8px;top:8px;gap:2px;padding:3px}.municipal-map-camera button{padding-inline:7px;font-size:11px}.municipal-map-gesture-hint{font-size:11px}}

/* Reviewed council geography, deliberately neutral rather than winner colours. */
.municipal-map-svg .municipal-map-council-ward{fill:#e7f0ff;fill-opacity:.9;stroke:#1859ad;stroke-width:1.4;cursor:pointer}
[data-map-ward]:hover .municipal-map-council-ward,[data-map-ward]:focus .municipal-map-svg .municipal-map-council-ward{fill:#b9d7ff;stroke:#003d97;stroke-width:3}
.municipal-map-ward-number{fill:#062955;font:700 12px system-ui,sans-serif;paint-order:stroke;stroke:#fff;stroke-width:3;pointer-events:none}
.municipal-ward-panel{padding:16px;border:1px solid #ccdef7;border-radius:16px;background:#f5f9ff;display:flex;gap:12px;flex-wrap:wrap;align-items:center}
.municipal-ward-panel[hidden]{display:none}.municipal-ward-panel h3,.municipal-ward-panel p,.municipal-ward-panel label{flex-basis:100%;margin:0}
.municipal-ward-panel label{display:grid;gap:6px}.municipal-ward-panel select,.municipal-ward-panel button,.municipal-ward-panel>a,.municipal-map-explore-wards{min-height:44px;padding:10px 14px;border:1px solid #b9cfea;border-radius:10px;background:white;color:#064c9f;font:inherit}
.municipal-ward-panel select{width:100%;max-width:100%}.municipal-ward-note{font-size:13px;line-height:1.5}.municipal-ward-attribution{font-size:11px;line-height:1.5;color:#496582}

.municipal-map-svg [data-map-ward][aria-pressed="true"] .municipal-map-council-ward{fill:#b5d4fc;stroke:#0751ad;stroke-width:2.5}.municipal-ward-offices{display:grid;gap:10px;flex-basis:100%;padding:12px;border:1px solid #b5cceb;border-radius:12px;background:#e7f1ff}.municipal-ward-offices p{font-size:14px;line-height:1.5}.municipal-ward-offices button{text-align:left}.municipal-ward-offices button:disabled{color:#5d6e82;background:#f4f6f8}

.municipal-map-svg [data-ward-result-state="reporting"] .municipal-map-council-ward,.municipal-map-svg [data-ward-result-state="final"] .municipal-map-council-ward{fill:var(--ward-result-fill,#d6e6fa);fill-opacity:.64}.municipal-map-svg [data-ward-result-state="tied"] .municipal-map-council-ward{fill:#f9e7b7}.municipal-map-svg [data-ward-result-state="delayed"] .municipal-map-council-ward{fill:#d6dde8;stroke-dasharray:4 2}.municipal-map-svg [data-ward-result-state="held"] .municipal-map-council-ward{fill:#e6daf6;stroke-dasharray:2 2}.municipal-ward-live-note{font-size:12px;line-height:1.5;color:#36577d}
