.city-tabs{display:flex;gap:25px;overflow-x:auto;border-bottom:1px solid var(--line);padding:12px 0;font-size:12px;white-space:nowrap}.city-tabs a[aria-current]{color:var(--orange);font-weight:700}.city-hero{display:grid;grid-template-columns:1fr 330px;gap:70px;padding:38px 0;border-bottom:2px solid var(--ink)}.orange-square{display:inline-block;width:7px;height:7px;background:var(--orange);margin-right:7px}h1{font:clamp(55px,6vw,84px)/.94 var(--serif);letter-spacing:-2px;margin:22px 0}h1 em{display:block;font-style:normal;color:var(--orange)}.hero-dek{font-size:14px;line-height:1.7;max-width:610px;color:var(--muted)}.hero-links{display:flex;gap:26px;margin-top:24px;font-size:12px;font-weight:700}.night-card{background:#e5eadf;border:1px solid #c8d0c3;padding:25px;align-self:center}.night-card strong{display:block;font:42px var(--serif);margin:18px 0 12px}.night-card p{font-size:12px;line-height:1.8}.night-meta{display:flex;flex-direction:column;border-top:1px solid var(--line);padding-top:14px;gap:7px;font-size:11px}.section-top{display:flex;align-items:end;justify-content:space-between;gap:20px;padding:30px 0 18px}.section-top h2{font:40px/1.1 var(--serif);margin:8px 0 0}.section-top>span{font-size:11px;color:var(--muted)}.poll-picker{font-size:10px;text-transform:uppercase;letter-spacing:.7px;display:grid;gap:8px}select,button{font:inherit}select{max-width:100%;background:transparent;color:var(--ink);border:1px solid var(--line);padding:11px;font-size:13px}.poll-context{display:flex;align-items:center;justify-content:space-between;gap:15px;background:var(--ink);color:var(--paper);padding:12px 17px;font-size:11px}.poll-context span{background:#ffffff20;padding:5px 8px}.contenders{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));border-left:1px solid var(--line)}.contender{border-right:1px solid var(--line);border-bottom:1px solid var(--line);min-width:0}.portrait{position:relative;background:#e5e8df;height:185px;overflow:hidden;border-top:4px solid var(--candidate)}.portrait img{width:100%;height:100%;object-fit:cover;object-position:center 30%;transition:transform .3s}.contender:hover img{transform:scale(1.035)}.candidate-tag{position:absolute;bottom:10px;left:10px;background:#f7f6f1e8;backdrop-filter:blur(12px);padding:5px 7px;font-size:9px}.candidate-body{padding:15px 17px}.candidate-body h3{font-size:15px;margin:0;min-height:36px}.poll-figure{font:52px var(--serif);color:var(--candidate);margin:8px 0}.poll-figure span{font:16px 'DM Sans',sans-serif;margin-left:3px}.candidate-track{height:4px;background:#dde0d8}.candidate-track i{display:block;height:100%;background:var(--candidate);transition:width .3s}.poll-caption{display:flex;gap:25px;align-items:start;justify-content:space-between;border-bottom:1px solid var(--line);font-size:11px;color:var(--muted);padding:12px 0;line-height:1.7}.poll-caption p{margin:0;max-width:850px}.poll-caption a{white-space:nowrap;font-weight:700;color:var(--ink)}.editorial-note{font-size:11px;line-height:1.8;color:var(--muted);margin:13px 0 25px}.connection-badge{padding:8px 10px;border:1px solid #b4c4b8;background:#e5ece3}.feed-status{font-size:12px;padding:12px 15px;background:#e8eee5;border-left:3px solid #347e66;line-height:1.7}.feed-status.delayed{background:#f5e9d5;border-color:#bc843a}.city-workspace{display:grid;grid-template-columns:minmax(0,1.5fr) minmax(310px,1fr);border:1px solid var(--line);margin-top:12px}.ward-panel{padding:20px;min-width:0;border-right:1px solid var(--line);background:#eef0e8}.map-heading{display:flex;justify-content:space-between;align-items:center;gap:10px}.map-heading h3{font:23px var(--serif);margin:0}.map-heading label{display:grid;gap:5px;font-size:9px;max-width:210px}.map-heading select{font-size:11px}.map-instruction,.map-credit{font-size:10px;line-height:1.7;color:var(--muted)}.ward-map{position:relative;min-height:300px}.ward-map svg{width:100%;height:auto;display:block;max-height:500px}.ward-map path{stroke:var(--paper);stroke-width:1.5;vector-effect:non-scaling-stroke;cursor:pointer;transition:fill .25s}.ward-map path:hover,.ward-map path:focus-visible,.ward-map path.selected{stroke:#284f48;stroke-width:3;outline:none;filter:brightness(1.06)}.ward-map text{pointer-events:none;fill:#1d302f;font:11px 'DM Sans',sans-serif;text-anchor:middle;paint-order:stroke;stroke:#ffffffa8;stroke-width:3px}.ward-tip{position:absolute;top:12px;left:12px;max-width:280px;border:1px solid #ffffffbd;padding:14px;background:#ffffffd9;backdrop-filter:blur(18px);box-shadow:0 8px 28px #1d302f1f;font-size:12px;line-height:1.7;pointer-events:none}.ward-legend{font-size:10px;line-height:1.9;display:flex;gap:8px;flex-wrap:wrap}.ward-legend span{padding:2px 5px;background:#ffffff88}.race-panel{position:relative;padding:23px;min-width:0;align-self:start}.race-panel h3{font:30px var(--serif);margin:9px 0}.race-state{font-size:11px;color:var(--muted);line-height:1.6}.results-table{max-height:530px;overflow:auto}.results-table table,.table-scroll table,.directory table{width:100%;border-collapse:collapse;font-size:12px}.results-table th,.results-table td,.table-scroll th,.table-scroll td,.directory th,.directory td{padding:12px 7px;border-bottom:1px solid var(--line);text-align:right}.results-table th:first-child,.table-scroll th:first-child,.directory th:first-child{text-align:left}.results-table thead th{font-size:9px;text-transform:uppercase;letter-spacing:.8px}.results-table small,.table-scroll small{display:block;font-weight:400;color:var(--muted);font-size:10px;line-height:1.6;margin-top:5px}.results-table tbody th{font-weight:500}.results-table td{font-variant-numeric:tabular-nums}.share-actions{display:flex;gap:8px;flex-wrap:wrap;margin:18px 0}.share-actions button{border:1px solid var(--line);padding:10px 12px;background:transparent;font-size:11px;cursor:pointer}.share-actions button:first-child{background:var(--ink);color:white;border-color:var(--ink)}#close-ward{position:absolute;right:14px;top:10px;border:0;background:transparent;font-size:25px;cursor:pointer}#source-time{display:block;font-size:10px;line-height:1.8;color:var(--muted);overflow-wrap:anywhere}#share-status{font-size:11px}.feed-explainer{border-bottom:1px solid var(--ink);padding:20px 0;font-size:11px;line-height:1.9;max-width:100%}.feed-explainer p{max-width:950px;color:var(--muted)}.table-scroll{overflow-x:auto}.table-scroll table{min-width:900px}.table-scroll caption{text-align:left;font-size:11px;color:var(--muted);padding:0 0 12px}.table-scroll th{font-size:11px}.table-scroll tbody th{min-width:210px}.table-scroll td{font-variant-numeric:tabular-nums}.review,.directory,.credits{border-bottom:1px solid var(--line);padding:15px 0;font-size:12px;line-height:1.8}.review summary,.directory summary,.credits summary{cursor:pointer;font-weight:600;min-height:30px}.credits{margin-bottom:30px}.credits a,.review a,.map-credit a,.feed-explainer a{text-decoration:underline;text-underline-offset:3px}.directory>details{margin:10px 0 10px 15px}main,section,aside{min-width:0}.navigation{flex-wrap:wrap}.navigation a{min-height:44px}.piq-footer{margin-top:25px}
@media(max-width:900px){.shell{padding:0 22px}.city-hero{grid-template-columns:1fr 270px;gap:25px}.city-workspace{grid-template-columns:1fr}.ward-panel{border-right:0;border-bottom:1px solid var(--line)}.portrait{height:160px}.race-panel{max-height:none}.results-table{max-height:390px}.navigation>a{padding:12px 16px}.mast-row p{display:none}}
@media(max-width:600px){.shell{padding:0 16px}.wordmark{font-size:48px;letter-spacing:-4px;gap:10px}.mark{transform:scale(.65) rotate(-10deg);transform-origin:left center;width:24px}.edition{font-size:8px;letter-spacing:.4px}.search-shortcut{font-size:10px}.mast-row{gap:12px;padding:16px 0}.navigation{display:grid;grid-template-columns:repeat(3,1fr)}.navigation>a,.navigation>a:first-child{font-size:11px;padding:10px 6px;justify-content:center}.city-tabs{font-size:11px;gap:20px}.city-hero{grid-template-columns:1fr;gap:20px;padding:26px 0}.city-hero h1{font-size:65px;margin:17px 0}.hero-dek{font-size:12px}.night-card{padding:15px;display:grid;grid-template-columns:1fr 1fr;gap:6px 15px}.night-card .kicker{grid-column:1/-1}.night-card strong{font-size:27px;margin:5px 0}.night-card p{margin:0;font-size:10px}.night-meta{grid-column:1/-1;flex-direction:row;justify-content:space-between;font-size:9px;padding-top:9px}.section-top{align-items:start;flex-direction:column;padding-top:25px;gap:13px}.section-top h2{font-size:33px}.poll-picker{width:100%;font-size:9px}.poll-picker select{width:100%;font-size:16px}.poll-context{font-size:10px;align-items:start;flex-direction:column;padding:11px 13px;gap:7px}.contenders{grid-template-columns:repeat(2,minmax(0,1fr))}.portrait{height:165px}.candidate-body{padding:12px}.candidate-body h3{font-size:13px;min-height:30px}.candidate-tag{font-size:8px;left:6px;bottom:6px}.poll-figure{font-size:43px;margin:5px 0}.poll-caption{flex-direction:column;gap:10px}.map-heading{align-items:start;flex-direction:column}.map-heading label{max-width:none;width:100%}.map-heading select{font-size:16px;width:100%}.ward-panel{padding:13px}.ward-map{min-height:210px}.race-panel{padding:18px}.race-panel h3{font-size:26px}.results-table th,.results-table td{font-size:11px;padding:12px 4px}.results-table td:last-child{font-size:10px}.connection-badge{font-size:10px!important}#source-time{font-size:9px}.editorial-note{font-size:10px}}
@media(prefers-reduced-motion:reduce){*{scroll-behavior:auto!important;transition:none!important}}
/* Municipal election desk refresh */
.city-hero{gap:clamp(25px,5vw,70px)}
.night-card{background:linear-gradient(145deg,#dfe9de,#f3e9d9);border:0;border-radius:18px;padding:28px;box-shadow:0 10px 30px #263b3010}
.night-card strong{color:#1c5145}.night-meta{border-color:#aebfb0}
.city-workspace{border:1px solid #d6ded4;border-radius:18px;overflow:hidden;box-shadow:0 16px 40px #1c3a2910;background:#fff}
.ward-panel{background:radial-gradient(circle at 50% 40%,#f7faf2,#e4ede3)}
.ward-map path{stroke:#fff;stroke-width:2}.ward-map path:hover,.ward-map path:focus-visible,.ward-map path.selected{stroke:#163d35;stroke-width:3.5}
.race-panel{background:#fff}.race-state{color:#536b61}.feed-status{border-radius:9px}.connection-badge{border-radius:99px}
.contenders{gap:12px;border:0}.contender{border:1px solid #dce2da;border-radius:14px;overflow:hidden;background:#fff;box-shadow:0 6px 22px #1c3a290b}.portrait{border-top-width:5px}.candidate-body{padding:16px}.poll-context{border-radius:10px 10px 0 0}.poll-desk .contenders{margin-top:12px}.candidate-track{border-radius:8px;overflow:hidden}.candidate-track i{border-radius:8px}
.city-tabs a{padding:7px 0}.city-tabs a[aria-current]{border-bottom:2px solid currentColor}
@media(max-width:600px){.contenders{gap:8px}.contender{border-radius:10px}.portrait{height:150px}.night-card{border-radius:13px}.city-workspace{border-radius:13px}.ward-panel{padding:15px}.ward-map svg{min-height:210px}.city-hero h1{font-size:clamp(45px,12vw,65px);overflow-wrap:anywhere}.race-panel{padding:18px}}
.featured-results{margin:16px 0 22px}.featured-heading{display:flex;justify-content:space-between;align-items:end;gap:12px;margin-bottom:12px}.featured-heading span,.featured-card span{font-size:10px;font-weight:700;letter-spacing:1px;color:#65746d}.featured-heading h3{font:30px var(--serif);margin:6px 0}.featured-heading small{color:#65746d}.featured-grid{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:10px}.featured-card{display:flex;align-items:center;gap:12px;background:white;border:1px solid #dce2da;border-top:4px solid var(--accent);border-radius:12px;overflow:hidden;padding:12px;min-width:0}.featured-card img{width:70px;height:85px;object-fit:cover;object-position:top;border-radius:7px;flex:none}.featured-card h4{font-size:14px;margin:5px 0;overflow-wrap:anywhere}.featured-card strong{display:block;font-size:23px;font-variant-numeric:tabular-nums;color:var(--accent)}.featured-card small{font-size:10px;color:#627168}.featured-results>p{font-size:10px;color:#68766c}@media(max-width:900px){.featured-grid{grid-template-columns:repeat(2,minmax(0,1fr))}}@media(max-width:450px){.featured-card{padding:8px;gap:8px}.featured-card img{width:52px;height:70px}.featured-card h4{font-size:12px}.featured-card strong{font-size:19px}.featured-card span{font-size:8px}}
