.module-heading{display:flex;justify-content:space-between;align-items:flex-end;gap:24px;margin:42px 0 18px}.module-heading h2{font-family:Georgia,serif;font-size:2.45rem;font-weight:400;letter-spacing:-.035em;margin:5px 0}.module-heading p{color:var(--muted);margin:0;max-width:720px}.dashboard-stats{display:grid;grid-template-columns:repeat(3,1fr);gap:12px;margin-bottom:16px}.dashboard-stats article{background:#17191a;color:#fff;padding:20px;border:1px solid #303333}.dashboard-stats span{display:block;color:#aeb2af;font-size:.72rem;text-transform:uppercase;letter-spacing:.08em}.dashboard-stats strong{display:block;font-family:Georgia,serif;font-size:2.4rem;font-weight:400;margin-top:8px}.dashboard-stats small{font:700 .75rem Inter,sans-serif;text-transform:uppercase;letter-spacing:.08em}.dashboard-toolbar{display:flex;align-items:end;gap:12px;background:#fff;border:1px solid var(--line);padding:14px;margin-bottom:16px}.dashboard-toolbar label{display:grid;gap:6px;font-size:.7rem;font-weight:800;text-transform:uppercase;letter-spacing:.06em;min-width:180px}.dashboard-toolbar input,.dashboard-toolbar select{border:1px solid var(--line);background:#fafaf7;padding:10px;min-width:180px}.map-layout{display:grid;grid-template-columns:minmax(0,1.5fr) minmax(260px,.7fr);gap:16px}.territory-board{position:relative;min-height:560px;overflow:hidden;background:linear-gradient(135deg,#25292a,#101213);border:1px solid #303536}.territory-board:before{content:"";position:absolute;inset:8%;border:1px solid #626765;border-radius:47% 53% 58% 42%/42% 39% 61% 58%;transform:rotate(-7deg);background:radial-gradient(circle at 32% 34%,rgba(255,255,255,.08),transparent 30%),linear-gradient(120deg,rgba(255,255,255,.035),transparent)}.territory-grid{position:absolute;inset:0;background-image:linear-gradient(rgba(255,255,255,.045) 1px,transparent 1px),linear-gradient(90deg,rgba(255,255,255,.045) 1px,transparent 1px);background-size:44px 44px}.map-watermark{position:absolute;z-index:2;top:20px;left:22px;color:#9ca19e;font-size:.66rem;font-weight:800;letter-spacing:.15em}.territory-node{position:absolute;z-index:3;left:var(--x);top:var(--y);transform:translate(-50%,-50%);width:54px;height:54px;border-radius:50%;border:5px solid rgba(255,255,255,.17);color:#fff;background:#777;font-size:.65rem;font-weight:850;box-shadow:0 8px 22px rgba(0,0,0,.35);transition:.2s}.territory-node:hover{transform:translate(-50%,-50%) scale(1.15);z-index:5}.territory-node.filtered-out{opacity:.1;transform:translate(-50%,-50%) scale(.7)}.territory-node.loyal,.map-dot.loyal{background:#265d9e}.territory-node.persuadable,.map-dot.persuadable{background:#2b8a63}.territory-node.adverse,.map-dot.adverse{background:#9a3f49}.territory-node.competitive,.map-dot.competitive{background:#bd7825}.territory-node.low-turnout,.map-dot.low-turnout{background:#7066a7}.territory-node.growth,.map-dot.growth{background:#6c7471}.map-caption{position:absolute;z-index:2;bottom:18px;left:22px;right:22px;color:#969c98;font-size:.72rem}.behavior-list{display:grid;gap:10px;align-content:start;max-height:560px;overflow:auto}.behavior-card{background:#fff;border:1px solid var(--line);padding:14px;display:grid;grid-template-columns:1fr auto}.behavior-card>div{display:flex;align-items:center;gap:8px}.behavior-card h4{grid-column:1/-1;margin:12px 0 2px}.behavior-card p{grid-column:1/-1;color:var(--muted);font-size:.82rem;margin:0}.map-dot{width:10px;height:10px;border-radius:50%}.priority{border-radius:99px;padding:4px 7px;font-size:.62rem;font-weight:800;text-transform:uppercase}.priority.alta{background:#f2dfd7;color:#853e25}.priority.media{background:#eee8cf;color:#755f13}.priority.baja{background:#dceade;color:#2b6840}.route-progress{height:12px;background:#deded7;margin:22px 0 7px;overflow:hidden}.route-progress span{height:100%;display:block;background:#2b7650}.progress-copy{font-size:.75rem;color:var(--muted);margin:0 0 18px}.route-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:12px}.route-card{background:#fff;border:1px solid var(--line);padding:18px}.route-card header{display:flex;justify-content:space-between;align-items:center}.route-card header>span:first-child{font-weight:850}.route-card h3{min-height:46px}.route-card dl{display:grid;grid-template-columns:repeat(3,1fr);gap:6px;margin:18px 0 0}.route-card dl div{border-top:1px solid var(--line);padding-top:9px}.route-card dt,.polling-card dt{font-size:.6rem;text-transform:uppercase;letter-spacing:.07em;color:var(--muted)}.route-card dd{margin:4px 0 0;font-size:.75rem;font-weight:750}.status.completed{background:#dbeee3;color:#225e3f}.status.scheduled{background:#dce8f2;color:#26557d}.status.planned{background:#eee8cf;color:#745f15}.demo-notice{margin-bottom:16px;border-left-color:#b68417}.polling-grid{display:grid;grid-template-columns:repeat(2,1fr);gap:12px}.polling-card{background:#fff;border:1px solid var(--line);padding:20px}.polling-card header{display:flex;gap:14px;align-items:center}.poll-number{display:grid;place-items:center;width:48px;height:48px;background:#17191a;color:#fff;font-family:Georgia,serif;font-size:1.4rem}.polling-card h3{margin:2px 0}.poll-address{font-size:1.05rem;min-height:48px}.polling-card dl{display:grid;grid-template-columns:120px 1fr;gap:8px;border-top:1px solid var(--line);padding-top:14px}.polling-card dd{margin:0;font-size:.8rem}.polling-card footer{margin-top:15px}.readiness{display:inline-flex;border-radius:99px;padding:6px 9px;font-size:.68rem;font-weight:800}.readiness.ready{background:#dbeee3;color:#225e3f}.readiness.pending{background:#f4e8cf;color:#7a510d}.kpi-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:12px}.kpi-card{background:#fff;border:1px solid var(--line);padding:22px;min-height:250px}.kpi-card strong{display:block;font-family:Georgia,serif;font-size:3.4rem;font-weight:400;margin:20px 0 5px}.kpi-card h3{min-height:48px}.kpi-card p{color:var(--muted);font-size:.76rem}.kpi-bar{height:8px;background:#e2e2dc;margin-top:20px}.kpi-bar span{display:block;height:100%;background:#17191a}.insight-panel{margin-top:16px;background:#17191a;color:#fff;border-color:#303333}.insight-panel h3{font-family:Georgia,serif;font-size:1.8rem;font-weight:400;margin:9px 0}.insight-panel p{color:#aeb2af;margin-bottom:0}
.brand-logo{width:42px;height:42px;object-fit:contain;flex:0 0 auto}.topbar-project{display:flex;align-items:center;gap:12px}.topbar-logo{width:34px;height:34px;object-fit:contain}.module-brand{width:78px;height:78px;object-fit:contain;opacity:.88}.source-ribbon,.method-note{background:#ebeae4;border-left:4px solid #17191a;padding:13px 16px;margin-bottom:16px;color:#404543;font-size:.8rem;line-height:1.55}.excel-release{display:flex;align-items:center;justify-content:space-between;gap:24px}.excel-release h3{font-size:1.4rem;margin:12px 0 6px}.excel-release p{max-width:760px;color:var(--muted)}
.real-map-layout{display:grid;grid-template-columns:minmax(0,1.65fr) minmax(300px,.65fr);gap:16px;margin-bottom:16px}.real-map{position:relative;background:#171a1b;border:1px solid #303536;min-height:620px;overflow:hidden}.real-map svg{display:block;width:100%;height:620px;background:radial-gradient(circle at 50% 45%,#2a2e2d 0,#171a1b 68%)}.map-stamp{position:absolute;z-index:2;top:16px;left:18px;color:#c3c8c4;font-size:.62rem;font-weight:850;letter-spacing:.13em}.map-section{fill:#6c7471;stroke:#f6f4ec;stroke-width:.55;vector-effect:non-scaling-stroke;cursor:pointer;transition:opacity .18s,filter .18s,stroke-width .18s}.map-section.vpd{fill:#315f8f}.map-section.jhh{fill:#8f4450}.map-section.switcher{fill:#c48b2b}.map-section.competitive{fill:#2d8a69}.map-section:hover,.map-section.selected{stroke:#fff2a8;stroke-width:2;filter:brightness(1.25)}.map-section.filtered-out{opacity:.08;pointer-events:none}.map-legend{position:absolute;left:16px;right:16px;bottom:14px;display:flex;flex-wrap:wrap;gap:8px 13px;background:rgba(12,14,14,.82);padding:9px 11px;color:#e7e9e6;font-size:.65rem}.map-legend span{display:flex;align-items:center;gap:6px}.map-legend i{width:10px;height:10px;border-radius:2px;background:#6c7471}.map-legend i.vpd{background:#315f8f}.map-legend i.jhh{background:#8f4450}.map-legend i.switcher{background:#c48b2b}.map-legend i.competitive{background:#2d8a69}.real-map-detail{background:#fff;border:1px solid var(--line);padding:20px;max-height:620px;overflow:auto}.detail-kicker{font-size:.65rem;text-transform:uppercase;letter-spacing:.12em;color:var(--muted);font-weight:800}.real-map-detail>h3{font-family:Georgia,serif;font-size:3rem;font-weight:400;margin:4px 0}.real-map-detail>p{font-size:.76rem;color:var(--muted)}.detail-tags{display:flex;align-items:center;gap:8px;flex-wrap:wrap}.detail-tags>span:last-child{font-weight:800;font-size:.76rem}.priority.base{background:#e3e6e4;color:#3e4944}.election-result{border-top:1px solid var(--line);padding-top:14px;margin-top:16px}.election-result header{display:flex;justify-content:space-between;gap:10px}.election-result header span{font-size:.68rem;font-weight:800;text-align:right}.election-result dl{display:grid;grid-template-columns:repeat(3,1fr);gap:5px}.election-result dt{font-size:.56rem;text-transform:uppercase;color:var(--muted)}.election-result dd{font-weight:800;margin:3px 0;font-size:.72rem}.vote-bars{display:grid;gap:4px;margin-top:10px}.vote-bars div{display:flex;justify-content:space-between;gap:8px;background:#f2f2ed;padding:5px 7px;font-size:.64rem}.vote-bars span{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.election-result.missing{color:var(--muted);font-size:.75rem}
@media(max-width:980px){.map-layout,.real-map-layout{grid-template-columns:1fr}.behavior-list{grid-template-columns:repeat(2,1fr);max-height:none}.route-grid,.kpi-grid{grid-template-columns:repeat(2,1fr)}.real-map-detail{max-height:none}}@media(max-width:650px){.module-heading{align-items:flex-start;flex-direction:column}.dashboard-stats,.route-grid,.polling-grid,.kpi-grid,.behavior-list{grid-template-columns:1fr}.dashboard-toolbar{align-items:stretch;flex-direction:column}.dashboard-toolbar input,.dashboard-toolbar select{width:100%}.territory-board{min-height:440px}.real-map,.real-map svg{min-height:430px;height:430px}.module-brand{width:58px;height:58px}.excel-release{align-items:flex-start;flex-direction:column}}

/* Official candidate detail and prior-cycle polling-place reference */
.vote-bars{display:grid;gap:7px;margin-top:10px}.vote-bars .vote-row{display:block;background:#f2f2ed;padding:7px 8px;font-size:.64rem}.vote-copy{display:flex;justify-content:space-between;align-items:flex-start;gap:8px}.vote-copy>span{display:grid;min-width:0}.vote-copy b{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.vote-copy small{color:var(--muted);font-size:.58rem;margin-top:2px;white-space:normal}.vote-copy>strong{white-space:nowrap}.vote-row>i{display:block;height:3px;background:#d7d7d0;margin-top:6px}.vote-row>i em{display:block;height:100%;background:#202423}
.reference-candidates{margin-top:18px}.reference-candidates .section-head{align-items:end}.reference-candidates h3{font-family:Georgia,serif;font-size:1.8rem;font-weight:400;margin:4px 0}.reference-candidates p{color:var(--muted);font-size:.78rem;margin:0}.candidate-grid{display:grid;grid-template-columns:repeat(5,1fr);gap:8px}.candidate-grid article{background:#fff;border:1px solid var(--line);padding:13px;display:grid;gap:6px}.candidate-grid strong{font-size:.78rem}.candidate-grid span{font-size:.66rem;font-weight:800;text-transform:uppercase}.candidate-grid small{font-size:.62rem;color:var(--muted);line-height:1.35}
.prior-cycle-notice{margin-bottom:16px;border-left-color:#a97812;background:#f5edda}.day-reference-layout{display:grid;grid-template-columns:minmax(0,1.5fr) minmax(340px,.75fr);gap:16px}.day-reference-map .map-section.has-polling{fill:#2d7b5b}.day-reference-map .map-section.no-polling{fill:#646b68;opacity:.42}.map-legend i.day-has{background:#2d7b5b}.day-results{background:#fff;border:1px solid var(--line);height:620px;overflow:hidden;display:flex;flex-direction:column}.day-results-head{padding:14px;border-bottom:1px solid var(--line);display:flex;justify-content:space-between;gap:8px;align-items:center}.day-results-head strong{font-size:.82rem}.day-results-head span{font-size:.62rem;color:var(--muted)}.day-card-list{overflow:auto;padding:10px;display:grid;gap:8px}.day-place-card{border:1px solid var(--line);padding:11px}.day-place-card header{display:flex;justify-content:space-between;gap:8px}.day-place-card header strong{font-size:.74rem}.day-place-card header span{font-size:.6rem;color:var(--muted);text-align:right}.day-place-card p{font-size:.68rem;line-height:1.45;margin:8px 0}.day-place-card small{font-size:.58rem;color:var(--muted)}
@media(max-width:1100px){.candidate-grid{grid-template-columns:repeat(3,1fr)}}@media(max-width:980px){.day-reference-layout{grid-template-columns:1fr}.day-results{height:auto;max-height:650px}}@media(max-width:650px){.candidate-grid{grid-template-columns:1fr}}

/* Electoral history, operational KPIs and route fichas */
.electoral-toolbar{flex-wrap:wrap}.map-level-note{margin:0 0 16px;border-left-color:#315f8f;background:#e8eef3}.map-section.election-colored{fill:var(--result-color,#d9d7d1)}.map-section.election-colored.no-result{opacity:.3}.detail-back{margin-bottom:14px}.result-level{font-size:.67rem;color:var(--muted);line-height:1.45}.general-summary{border-top:1px solid var(--line);padding-top:16px;margin-top:16px}.general-summary>p{color:var(--muted);font-size:.75rem}.general-summary>div{display:grid;grid-template-columns:12px 1fr;gap:2px 8px;align-items:center;padding:8px 0;border-top:1px solid #ecebe6}.general-summary>div span{width:10px;height:10px;border-radius:2px;grid-row:1/3}.general-summary small{grid-column:2;color:var(--muted)}.history-overview{display:grid;gap:10px;margin-top:16px}.history-overview article{display:grid;gap:5px;border:1px solid var(--line);padding:14px}.history-overview span{font-size:.72rem;color:var(--muted)}
.maps-link{display:inline-flex;margin-top:10px;font-size:.66rem;font-weight:800;color:#245e8d;text-decoration:none}.maps-link:hover{text-decoration:underline}
.route-map-layout{display:grid;grid-template-columns:minmax(0,1.55fr) minmax(300px,.7fr);gap:16px;margin-bottom:16px}.route-live-map .route-base{fill:#414846;stroke:#9da29f;stroke-width:.35;cursor:default}.demo-route{fill:none;stroke:#ffd33d;stroke-width:5;stroke-linecap:round;stroke-linejoin:round;cursor:pointer;filter:drop-shadow(0 2px 3px rgba(0,0,0,.5));transition:.2s}.demo-route:hover,.demo-route.selected{stroke:#fff;stroke-width:8}.demo-route.filtered-out{opacity:.06;pointer-events:none}.route-start{fill:#17191a;stroke:#fff;stroke-width:3;cursor:pointer}.route-line-key{width:22px!important;height:4px!important;background:#ffd33d!important}.route-start-key{border-radius:50%!important;background:#17191a!important;border:2px solid #fff}.route-ficha{background:#fff;border:1px solid var(--line);padding:20px;max-height:620px;overflow:auto}.route-ficha h3{font-family:Georgia,serif;font-size:2.8rem;font-weight:400;margin:5px 0 10px}.route-ficha>p{color:var(--muted);font-size:.72rem;line-height:1.5}.route-ficha-data{display:grid;grid-template-columns:1fr 1fr;gap:0 12px;margin:18px 0}.route-ficha-data div{padding:9px 0;border-top:1px solid var(--line)}.route-ficha-data dt{font-size:.56rem;text-transform:uppercase;color:var(--muted)}.route-ficha-data dd{font-size:.72rem;font-weight:750;margin:4px 0 0}.route-card-button{text-align:left;font:inherit;color:inherit;cursor:pointer}.route-card-button:hover{border-color:#17191a;transform:translateY(-2px)}.route-card-button .arrow{display:block;margin-top:14px;font-size:.7rem;font-weight:800}.compact-routes{grid-template-columns:repeat(2,1fr)}
.kpi-method{display:grid;grid-template-columns:repeat(4,1fr);gap:10px;margin-bottom:16px}.kpi-method article{background:#17191a;color:#fff;padding:16px}.kpi-method article>span{display:grid;place-items:center;width:28px;height:28px;border:1px solid #6e7471;border-radius:50%;font-family:Georgia,serif;margin-bottom:15px}.kpi-method strong{display:block}.kpi-method p{font-size:.7rem;color:#aeb2af;margin-bottom:0}.operational-kpis{grid-template-columns:repeat(2,1fr)}.measured-kpi{min-height:0}.measured-kpi .kpi-bar{position:relative}.measured-kpi .kpi-bar i{position:absolute;top:-4px;width:2px;height:16px;background:#9d3940}.kpi-inputs{display:grid;grid-template-columns:1fr 1fr;gap:8px;margin:18px 0 12px}.kpi-inputs label{display:grid;gap:5px;font-size:.6rem;text-transform:uppercase;font-weight:800;color:var(--muted)}.kpi-inputs input{width:100%;border:1px solid var(--line);padding:9px;background:#fafaf7}.measured-kpi>small{color:var(--muted);font-size:.62rem}.kpi-definition-table td{font-size:.7rem;line-height:1.45}
@media(max-width:980px){.route-map-layout{grid-template-columns:1fr}.route-ficha{max-height:none}.kpi-method{grid-template-columns:repeat(2,1fr)}}
@media(max-width:650px){.compact-routes,.operational-kpis,.kpi-method{grid-template-columns:1fr}.route-ficha-data{grid-template-columns:1fr}}

/* Editable operational demo */
.map-section.search-match{stroke:#ffe45c;stroke-width:2.5;filter:brightness(1.18)}
.section-colonies{margin:14px 0;padding:13px;background:#f2f1ec;border-left:3px solid #315f8f}.section-colonies>strong{font-size:.74rem}.section-colonies p{display:flex;flex-wrap:wrap;gap:5px;margin:10px 0}.section-colonies p span{background:#fff;border:1px solid var(--line);padding:5px 7px;font-size:.65rem}.section-colonies small{display:block;color:var(--muted);font-size:.6rem;line-height:1.45}.colony-search-results{display:grid;gap:8px}.colony-result{display:grid!important;text-align:left;gap:3px}.colony-result span{font-size:.62rem;color:var(--muted);white-space:normal}
.ficha-actions,.polling-actions{display:flex;gap:8px;flex-wrap:wrap;margin-top:14px}.route-evidence{display:block;width:100%;max-height:190px;object-fit:cover;margin-top:14px;border:1px solid var(--line)}
.editor-dialog{width:min(820px,calc(100vw - 28px));max-height:90vh;border:0;padding:0;background:#f7f6f1;box-shadow:0 24px 80px rgba(0,0,0,.35)}.editor-dialog::backdrop{background:rgba(8,10,10,.72)}.editor-dialog form>header{display:flex;justify-content:space-between;gap:20px;background:#17191a;color:#fff;padding:20px 24px}.editor-dialog h3{font-family:Georgia,serif;font-size:1.7rem;font-weight:400;margin:4px 0}.editor-dialog header p{margin:4px 0 0;color:#afb4b0;font-size:.72rem}.dialog-close{border:0;background:transparent;color:#fff;font-size:2rem;cursor:pointer}.editor-grid{display:grid;grid-template-columns:1fr 1fr;gap:12px;padding:22px}.editor-grid label,.representative-editor label{display:grid;gap:6px;font-size:.66rem;font-weight:800;text-transform:uppercase;letter-spacing:.05em}.editor-grid input,.editor-grid select,.editor-grid textarea,.representative-editor input,.representative-editor textarea{width:100%;border:1px solid var(--line);background:#fff;padding:10px;font:inherit}.editor-grid textarea,.representative-editor textarea{min-height:70px;resize:vertical}.editor-grid .span-2{grid-column:1/-1}.editor-dialog form>footer{display:flex;justify-content:flex-end;gap:8px;padding:0 22px 22px}.representative-editor{display:grid;grid-template-columns:1fr 1fr;gap:14px;padding:22px}.representative-editor fieldset{display:grid;gap:12px;border:1px solid var(--line);background:#fff;padding:16px}.representative-editor legend{font-weight:850;padding:0 6px}.polling-team-summary{margin-top:10px;padding:8px;background:#f2f1ec}.polling-team-summary p{margin:3px 0;font-size:.65rem}.polling-actions .btn{font-size:.62rem;padding:8px}.operational-kpis{grid-template-columns:repeat(2,minmax(0,1fr))}
.form-section-heading{border-bottom:1px solid var(--line);padding:8px 0 5px;font-size:.68rem;font-weight:900;text-transform:uppercase;letter-spacing:.1em;color:#315f8f}
@media(max-width:650px){.editor-grid,.representative-editor{grid-template-columns:1fr}.editor-grid .span-2{grid-column:auto}.polling-actions{display:grid}.polling-actions .btn{width:100%}}
