:root{--bg:#111414;--surface:#171b1c;--surface-2:#202626;--line:#343c3d;--line-strong:#566061;--text:#edf0ed;--muted:#9ca6a2;--muted-2:#6f7976;--dem:#3f75bd;--dem-soft:#223f5f;--rep:#b7504d;--rep-soft:#5d2d2b;--neutral:#86795f;--green:#89a66c;--shadow:#00000047}*{box-sizing:border-box}html,body{height:100%}body{background:var(--bg);color:var(--text);letter-spacing:0;margin:0;font-family:Arial,Helvetica,sans-serif}button{font:inherit}.board-shell{background:linear-gradient(#ffffff06 1px, transparent 1px), linear-gradient(90deg, #ffffff06 1px, transparent 1px), var(--bg);background-size:28px 28px;min-height:100vh;padding:14px}.national-header{border:1px solid var(--line);min-height:86px;box-shadow:0 12px 28px var(--shadow);background:#171b1cf0;grid-template-columns:minmax(0,1fr);gap:8px;padding:8px;display:grid}.national-metrics{grid-template-columns:160px repeat(5,minmax(126px,1fr));gap:8px;min-width:0;display:grid}.brand-lockup,.header-metric,.advance-week-button{border:1px solid var(--line);background:var(--surface-2);align-items:center;gap:8px;min-width:0;height:32px;padding:0 10px;display:flex}.advance-week-button{color:#f3f5f1;width:100%;height:38px;font:inherit;text-transform:uppercase;letter-spacing:0;cursor:pointer;background:#26363a;border-color:#6f8783;justify-content:center;font-size:13px;font-weight:800}.turn-control-bar{grid-template-columns:minmax(0,1fr) 220px;gap:8px;display:grid}.party-control{border:1px solid var(--line);background:var(--surface-2);align-items:center;gap:8px;min-width:0;height:38px;padding:0 10px;display:flex}.party-control.dem{background:var(--dem-soft);border-color:#3f75bdd9}.party-control.rep{background:var(--rep-soft);border-color:#b7504dd9}.party-control span{color:var(--muted);text-transform:uppercase;font-size:11px;font-weight:800}.party-control strong{color:var(--text);white-space:nowrap;margin-left:auto;font-size:12px}.party-choice-backdrop{z-index:20;-webkit-backdrop-filter:blur(2px);backdrop-filter:blur(2px);background:#080a0b9e;place-items:center;padding:24px;display:grid;position:fixed;inset:0}.party-choice-modal{border:1px solid var(--line);background:#161a1bfa;width:min(520px,100%);padding:18px;box-shadow:0 24px 80px #00000073}.party-choice-modal h2{margin-bottom:14px;font-size:22px}.modal-copy,.activity-line{color:var(--muted);font-size:13px;line-height:1.35}.modal-copy{max-width:440px;margin-bottom:16px}.activity-line{max-width:620px;margin:8px 0 0}.party-choice-actions{grid-template-columns:1fr 1fr;gap:10px;display:grid}.party-choice-actions button{border:1px solid var(--line);min-height:86px;color:var(--text);background:var(--surface-2);font:inherit;text-align:left;cursor:pointer;gap:6px;padding:12px;display:grid}.party-choice-actions button.dem{background:var(--dem-soft);border-color:#3f75bdd9}.party-choice-actions button.rep{background:var(--rep-soft);border-color:#b7504dd9}.party-choice-actions span{text-transform:uppercase;font-size:13px;font-weight:900}.party-choice-actions strong{align-self:end;font-size:26px;line-height:1}.advance-week-button:hover:not(:disabled){background:#304347;border-color:#8ca39e}.advance-week-button:disabled{color:var(--muted);background:var(--surface-2);cursor:default}.brand-lockup{color:var(--text);text-transform:uppercase;font-size:13px;font-weight:700}.header-metric{color:var(--muted);font-size:12px}.header-metric strong{color:var(--text);white-space:nowrap;margin-left:auto;font-size:13px}.header-metric.dem strong{color:#9fbbe3}.header-metric.rep strong{color:#e0a09d}.congress-balance{align-items:center;gap:8px;display:inline-flex}.congress-balance .dem{color:#76a7ec}.congress-balance .rep{color:#e06d68}.board-grid{grid-template-columns:minmax(760px,1fr);gap:12px;height:calc(100vh - 108px);padding-top:12px;display:grid}.board-shell.panel-open .board-grid{grid-template-columns:minmax(680px,1fr) 400px}.map-stage{border:1px solid var(--line);background:radial-gradient(circle at 18% 18%,#89a66c14,#0000 28%),linear-gradient(135deg,#202626f5,#111414fa);min-width:0;position:relative;overflow:hidden}.stage-title{justify-content:space-between;gap:24px;padding:18px 20px 0;display:flex}.eyebrow{color:var(--green);letter-spacing:0;text-transform:uppercase;margin:0 0 6px;font-size:11px;font-weight:700}h1,h2,h3,h4,p{margin-top:0}h1{margin-bottom:0;font-size:24px;line-height:1.1}.source-lockup{justify-items:end;gap:5px;max-width:360px;display:grid}.map-status-lockup{justify-content:flex-end;align-items:flex-start;gap:10px;min-width:0;display:flex}.generic-ballot{border:1px solid var(--line);text-align:right;background:#121516d1;gap:3px;min-width:230px;padding:7px 10px;display:grid}.generic-ballot span,.generic-ballot small{color:var(--muted);letter-spacing:0;text-transform:uppercase;font-size:10px;font-weight:700}.generic-ballot strong{color:var(--text);white-space:nowrap;font-size:14px;line-height:1.1}.generic-ballot b{margin-left:5px}.generic-ballot .dem{color:#76a7ec}.generic-ballot .rep{color:#e06d68}.source-lockup small{color:var(--muted);text-align:right;font-size:11px;line-height:1.25}.source-badge{border:1px solid var(--neutral);color:#d9cda8;background:#86795f24;align-self:flex-start;padding:5px 8px;font-size:11px;font-weight:700}.source-badge.fec{color:#cde4ba;background:#89a66c24;border-color:#89a66ccc}.state-map{justify-content:center;align-items:center;height:calc(100% - 80px);padding:18px 28px 28px;display:flex}.state-map svg{filter:drop-shadow(0 18px 24px #00000042);width:100%;height:100%;min-height:440px}.map-hit-area{fill:#0000}.nation-outline{fill:none;stroke:#edf0ed29;stroke-width:1.4px;vector-effect:non-scaling-stroke}.state-shape{cursor:pointer;stroke:#fff3;stroke-width:.75px;vector-effect:non-scaling-stroke;transition:filter .14s,opacity .14s,stroke-width .14s}.state-shape.has-senate-race{stroke:#f4f0dfb8;stroke-width:1.65px}.state-shape:hover,.state-shape:focus-visible{filter:brightness(1.16);opacity:.96;stroke:#f4f0df;stroke-width:1.5px;outline:none}.state-shape.selected{filter:brightness(1.22);stroke:#f4f0df;stroke-width:2.4px}.state-shape.has-senate-race.selected{stroke-width:3px}.state-borders{fill:none;pointer-events:none;stroke:#111414b8;stroke-width:.65px;vector-effect:non-scaling-stroke}.map-label{fill:#ffffffbd;pointer-events:none;text-anchor:middle;dominant-baseline:central;paint-order:stroke;stroke:#111414db;stroke-width:2.2px;font-size:9px;font-weight:700}.map-label.has-senate-race{fill:#fff;stroke-width:2.8px;font-weight:900}.map-label.large-state{font-size:11px}.map-label.selected{fill:#fff;stroke-width:2.8px}.race-panel{border:1px solid var(--line);min-width:0;box-shadow:-18px 0 30px var(--shadow);background:#141818fa;overflow:auto}.panel-heading{z-index:2;border-bottom:1px solid var(--line);background:#141818fa;justify-content:space-between;align-items:flex-start;gap:16px;padding:18px;display:flex;position:sticky;top:0}.panel-heading h2{margin-bottom:0;font-size:24px;line-height:1.05}.panel-heading h2 span{color:var(--muted-2);font-size:14px}.icon-button{border:1px solid var(--line);width:32px;height:32px;color:var(--text);background:var(--surface-2);cursor:pointer;place-items:center;display:grid}.icon-button:hover,.icon-button:focus-visible{border-color:var(--line-strong);outline:none}.panel-stats{border-bottom:1px solid var(--line);background:var(--line);grid-template-columns:repeat(3,1fr);gap:1px;display:grid}.panel-stats div{background:var(--surface);padding:10px 12px}.panel-stats span,.section-heading span,.race-card p,.candidate-row small{color:var(--muted);font-size:11px}.panel-stats strong{margin-top:4px;font-size:14px;display:block}.race-stack{gap:18px;padding:16px;display:grid}.section-heading{justify-content:space-between;align-items:baseline;gap:12px;margin-bottom:8px;display:flex}.section-heading h3{text-transform:uppercase;margin-bottom:0;font-size:13px}.district-list{gap:8px;display:grid}.race-card,.empty-race{border:1px solid var(--line);background:var(--surface)}.race-card{padding:10px}.race-card.featured{border-color:var(--line-strong);background:#1b2020}.empty-race{color:var(--muted);padding:14px;font-size:13px}.race-card-top,.race-meta,.candidate-row{justify-content:space-between;gap:10px;display:flex}.race-card h4{margin-bottom:2px;font-size:14px}.race-card p{margin-bottom:0}.rating-pill{border:1px solid var(--line);text-align:center;white-space:nowrap;align-self:flex-start;min-width:64px;padding:4px 6px;font-size:11px;font-weight:800}.rating-pill.dem{color:#b9d0ef;background:var(--dem-soft);border-color:#3f75bdbf}.rating-pill.rep{color:#ebb4b2;background:var(--rep-soft);border-color:#b7504dbf}.rating-pill.tossup{color:#ddd0ac;background:#86795f3d;border-color:#86795fc7}.race-meta{border-top:1px solid var(--line);border-bottom:1px solid var(--line);color:var(--muted);align-items:center;margin:9px 0;padding:6px 0;font-size:12px;font-weight:700}.race-meta>div{gap:4px;display:grid}.race-meta>div span:first-child{color:var(--text)}.cook-meta{align-self:start}.race-meta b{color:var(--muted);text-transform:uppercase;margin-right:4px;font-size:10px;font-weight:700}.candidate-grid{gap:8px;display:grid}.candidate-row{align-items:center}.candidate-row>div:first-child{grid-template-columns:10px 1fr;align-items:center;column-gap:7px;min-width:0;display:grid}.candidate-row strong{text-overflow:ellipsis;white-space:nowrap;min-width:0;font-size:13px;overflow:hidden}.candidate-row small{grid-column:2}.incumbency-marker{opacity:.8;font-size:9px}.party-dot{border-radius:50%;width:9px;height:9px}.party-dot.democratic{background:var(--dem)}.party-dot.republican{background:var(--rep)}.finance-grid{color:var(--muted);text-align:right;white-space:nowrap;gap:3px;font-size:11px;display:grid}.targeting-strip{border-top:1px solid var(--line);gap:8px;margin-top:10px;padding-top:9px;display:grid}.targeting-metrics{color:var(--muted);text-transform:uppercase;justify-content:space-between;gap:8px;font-size:10px;display:flex}.targeting-metrics strong{color:var(--text);font-size:10px}.investment-controls{grid-template-columns:68px 1fr 1fr 1fr;gap:5px;display:grid}.investment-controls label{border:1px solid var(--line);min-width:0;color:var(--muted);grid-template-columns:1fr 10px;align-items:center;gap:3px;padding:0 5px;font-size:10px;display:grid}.investment-controls label span{text-transform:uppercase;grid-column:span 2;font-size:9px;font-weight:800}.investment-controls input{width:100%;min-width:0;color:var(--text);background:0 0;border:0;outline:0;font-size:12px}.investment-controls button,.advance-calendar-button{color:#c9dcf6;background:var(--dem-soft);text-transform:uppercase;cursor:pointer;border:1px solid #3f75bdcc;justify-content:center;align-items:center;gap:4px;min-height:37px;font-size:10px;font-weight:800;display:inline-flex}.investment-controls .negative-buy{color:#f0bebc;background:var(--rep-soft);border-color:#b7504dcc}.investment-controls button:disabled,.decision-actions button:disabled,.advance-calendar-button:disabled{opacity:.42;cursor:default}.targeting-strip>small{color:var(--muted-2);font-size:10px;line-height:1.25}.decision-backdrop{z-index:30;-webkit-backdrop-filter:blur(3px);backdrop-filter:blur(3px);background:#080a0bc2;place-items:center;padding:20px;display:grid;position:fixed;inset:0}.decision-desk{border:1px solid var(--line-strong);background:#171b1c;width:min(1040px,100%);max-height:min(720px,100vh - 40px);padding:18px;overflow:auto;box-shadow:0 28px 90px #0000008c}.decision-heading{border-bottom:1px solid var(--line);justify-content:space-between;align-items:flex-start;gap:16px;margin-bottom:16px;padding-bottom:14px;display:flex}.decision-heading h2{margin-bottom:0;font-size:21px}.decision-heading>span{border:1px solid var(--line);color:#d9cda8;white-space:nowrap;background:#86795f24;padding:6px 8px;font-size:12px;font-weight:800}.decision-grid{grid-template-columns:repeat(3,minmax(0,1fr));gap:10px;display:grid}.decision-card{border:1px solid var(--line);background:var(--surface);flex-direction:column;min-height:250px;padding:14px;display:flex}.decision-card.resolved{border-color:#89a66cb3}.decision-range{color:#d9cda8;text-transform:uppercase;margin-bottom:10px;font-size:10px;font-weight:800}.decision-card h3{margin-bottom:8px;font-size:15px;line-height:1.18}.decision-card>p:not(.decision-range){color:var(--muted);font-size:12px;line-height:1.35}.decision-actions{gap:6px;margin-top:auto;display:grid}.decision-actions button{border:1px solid var(--line);min-height:36px;color:var(--text);background:var(--surface-2);text-align:left;cursor:pointer;justify-content:space-between;align-items:center;gap:8px;padding:7px 9px;font-size:11px;font-weight:800;display:flex}.decision-actions .decision-act{background:#89a66c26;border-color:#89a66cbd}.decision-actions small{color:#d9cda8;margin-left:auto;font-size:10px}.advance-calendar-button{color:#f3f5f1;background:#26363a;border-color:#6f8783;width:100%;min-height:44px;margin-top:14px;font-size:12px}@media (max-width:1120px){.national-metrics{grid-template-columns:repeat(3,minmax(150px,1fr))}.turn-control-bar{grid-template-columns:minmax(0,1fr)}.board-shell.panel-open .board-grid{grid-template-columns:minmax(620px,1fr) 370px}.state-map{padding-left:20px;padding-right:20px}}@media (max-width:760px){.board-shell{padding:8px}.national-metrics,.board-shell.panel-open .board-grid,.decision-grid{grid-template-columns:1fr}.board-grid{grid-template-columns:1fr;height:auto;min-height:calc(100vh - 120px)}.map-stage,.race-panel{min-height:600px}.stage-title,.map-status-lockup,.decision-heading{flex-direction:column;align-items:stretch}.generic-ballot,.source-badge{text-align:left;align-self:stretch}.investment-controls{grid-template-columns:62px 1fr 1fr}.investment-controls .negative-buy{grid-column:span 2}}
