/* GovThatWorks.org V46 shared lab and simulator styles. */

/* ===== merged from /assets/css/simulations-v23.css ===== */
/* V23 simulation and civic-map refinements */
.ballot-dot.d,.vote-fill.d{background:#d9a441}.ballot-dot.e,.vote-fill.e{background:#8d72b7}
.vote-row.winner{outline:2px solid rgba(255,255,255,.32);outline-offset:4px;border-radius:6px;text-decoration:none;opacity:1}
.vote-row.tie{outline:2px dashed rgba(255,255,255,.45);outline-offset:4px;border-radius:6px;text-decoration:none;opacity:1}
.district-map-card{overflow:hidden}.district-map-card svg{width:100%;height:auto;min-height:300px;display:block;background:#f7f5ef}
.district-map-caption a{font-weight:700;color:#1c3d5a}.district-map-caption a:focus-visible{outline:3px solid #b71c1c;outline-offset:3px}
.map-focus{stroke:#fff;stroke-width:2.4;fill-opacity:.68}.map-city-dot{fill:#0c1a2a;stroke:#fff;stroke-width:1.8}.map-road{fill:none;stroke-linecap:round;stroke-linejoin:round}.map-label{font:700 12px -apple-system,BlinkMacSystemFont,"Segoe UI",sans-serif;fill:#0c1a2a}.map-candidate{font:600 10.5px -apple-system,BlinkMacSystemFont,"Segoe UI",sans-serif;fill:#405765}.map-route-label{font:700 9.5px -apple-system,BlinkMacSystemFont,"Segoe UI",sans-serif;fill:#7a623d}.map-terrain-label{font:italic 11px Georgia,serif;fill:#60717c}
@media(max-width:720px){.district-map-card{padding:10px}.district-map-card svg{min-height:235px}.map-label{font-size:10.5px}.map-candidate{font-size:9px}.vote-row{grid-template-columns:92px 1fr 52px;gap:8px}.ballot-grid{grid-template-columns:repeat(15,1fr)}}
.gtw-slider input[type="range"]{touch-action:pan-y;cursor:pointer}.gtw-slider input[type="range"]:focus-visible{outline:3px solid #b71c1c;outline-offset:4px}.gtw-simulator__balance[data-state="negative"]{color:#8f1d1d}.gtw-simulator__balance[data-state="positive"]{color:#1f6a32}

/* ===== merged from /assets/css/labs-v27.css ===== */
/* V27 simulation system — shared by every upgraded lab. Built on the site's existing
   palette (navy / paper / teal) and type (Georgia headings, system UI body). */
:root{
  --l27-ink:#0c1a2a;--l27-ink-2:#263e50;--l27-muted:#5c6b78;--l27-line:#dbe1e5;--l27-soft:#f6f3ec;
  --l27-card:#fff;--l27-blue:#225d92;--l27-teal:#1f6b6b;--l27-good:#1f6a32;--l27-good-bg:#e7f2ea;
  --l27-bad:#8f1d1d;--l27-bad-bg:#f7e9e7;--l27-accent:#c8a467;--l27-base:#8d5c47;--l27-reform:#1f6b6b;
  --l27-radius:18px;--l27-shadow:0 14px 32px rgba(12,26,42,.06);
}
.l27-lab{background:var(--l27-card);border:1px solid var(--l27-line);border-radius:var(--l27-radius);padding:clamp(1.1rem,3vw,2rem);box-shadow:var(--l27-shadow);color:var(--l27-ink)}
.l27-lab + .l27-lab{margin-top:28px}
.l27-head{max-width:860px;margin-bottom:22px}
.l27-eyebrow{display:inline-block;font:800 .72rem/1.2 -apple-system,BlinkMacSystemFont,"Segoe UI",sans-serif;letter-spacing:.14em;text-transform:uppercase;color:var(--l27-blue);margin-bottom:10px}
.l27-head h2{font-family:Georgia,"Times New Roman",serif;font-weight:400;font-size:clamp(1.6rem,3.4vw,2.4rem);line-height:1.1;letter-spacing:-.02em;margin:0 0 10px}
.l27-head p{color:var(--l27-muted);font-size:1rem;line-height:1.6;margin:0}
.l27-grid{display:grid;grid-template-columns:minmax(260px,.85fr) minmax(0,1.4fr);gap:28px;align-items:start}
.l27-grid.even{grid-template-columns:1fr 1fr}
@media(max-width:900px){.l27-grid,.l27-grid.even{grid-template-columns:1fr}}
.l27-controls{display:flex;flex-direction:column;gap:14px}
.l27-control{display:block}
.l27-control > span:first-child,.l27-control .l27-label{display:flex;justify-content:space-between;align-items:baseline;gap:10px;font:800 .82rem/1.3 -apple-system,BlinkMacSystemFont,"Segoe UI",sans-serif;color:var(--l27-ink-2);margin-bottom:6px}
.l27-control output,.l27-control .l27-val{font-variant-numeric:tabular-nums;color:var(--l27-blue);font-weight:800;white-space:nowrap}
.l27-control input[type=range]{width:100%;accent-color:var(--l27-blue);touch-action:pan-y;cursor:pointer}
.l27-control input[type=number],.l27-control select{width:100%;padding:10px 12px;border:1px solid #adbbc3;border-radius:8px;background:#fff;color:var(--l27-ink);font:inherit;font-size:.95rem}
.l27-control small,.l27-help{display:block;color:var(--l27-muted);font-size:.8rem;line-height:1.45;margin-top:4px}
.l27-check{display:flex;gap:10px;align-items:flex-start;font-size:.88rem;line-height:1.4;color:var(--l27-ink-2);cursor:pointer}
.l27-check input{margin-top:3px;accent-color:var(--l27-blue);width:16px;height:16px;flex:none}
.l27-row2{display:grid;grid-template-columns:1fr 1fr;gap:12px}
@media(max-width:520px){.l27-row2{grid-template-columns:1fr}}
.l27-seg{display:flex;flex-wrap:wrap;gap:8px;margin:0 0 16px}
.l27-seg button,.l27-btn{appearance:none;border:1px solid #b8c5cd;background:#fff;color:var(--l27-ink);border-radius:999px;padding:9px 16px;font:700 .85rem/1 -apple-system,BlinkMacSystemFont,"Segoe UI",sans-serif;cursor:pointer;transition:background .15s,border-color .15s}
.l27-seg button:hover,.l27-btn:hover{border-color:var(--l27-blue)}
.l27-seg button[aria-pressed=true],.l27-btn.primary{background:var(--l27-ink);border-color:var(--l27-ink);color:#fff}
.l27-btn:focus-visible,.l27-seg button:focus-visible,.l27-control input:focus-visible,.l27-check input:focus-visible{outline:3px solid #b71c1c;outline-offset:3px}
.l27-btn[disabled]{opacity:.55;cursor:not-allowed}
.l27-actions{display:flex;flex-wrap:wrap;gap:10px;margin-top:6px}
.l27-kpis{display:grid;grid-template-columns:repeat(auto-fit,minmax(150px,1fr));gap:12px;margin-bottom:16px}
.l27-kpi{background:var(--l27-soft);border-radius:14px;padding:14px 16px}
.l27-kpi span{display:block;font:800 .7rem/1.3 -apple-system,BlinkMacSystemFont,"Segoe UI",sans-serif;letter-spacing:.08em;text-transform:uppercase;color:var(--l27-muted);margin-bottom:6px}
.l27-kpi strong{display:block;font-family:Georgia,serif;font-weight:400;font-size:clamp(1.35rem,2.6vw,1.9rem);line-height:1.1;font-variant-numeric:tabular-nums}
.l27-kpi small{display:block;color:var(--l27-muted);font-size:.78rem;margin-top:4px;line-height:1.35}
.l27-kpi.good{background:var(--l27-good-bg)}.l27-kpi.good strong{color:var(--l27-good)}
.l27-kpi.bad{background:var(--l27-bad-bg)}.l27-kpi.bad strong{color:var(--l27-bad)}
.l27-kpi.big strong{font-size:clamp(1.9rem,4vw,2.8rem)}
.l27-chart{width:100%;height:auto;display:block;background:#fbfaf6;border:1px solid var(--l27-line);border-radius:14px}
.l27-chart text{font:600 11px -apple-system,BlinkMacSystemFont,"Segoe UI",sans-serif;fill:#60717c}
.l27-chart .grid{stroke:rgba(39,61,78,.12)}
.l27-chart .zero{stroke:#223;stroke-width:1.2}
.l27-chart .ln{fill:none;stroke-width:3;stroke-linecap:round;stroke-linejoin:round}
.l27-chart .ln.base{stroke:var(--l27-base)}.l27-chart .ln.cbo{stroke:#9aa7b0;stroke-dasharray:5 5;stroke-width:2}.l27-chart .ln.reform{stroke:var(--l27-reform)}
.l27-legend{display:flex;flex-wrap:wrap;gap:16px;margin:10px 2px 0;font-size:.82rem;color:var(--l27-muted)}
.l27-legend i{display:inline-block;width:18px;height:4px;border-radius:2px;vertical-align:middle;margin-right:6px}
.l27-say{margin:14px 0 0;padding:14px 16px;border-left:4px solid var(--l27-teal);background:#eef5f4;border-radius:0 12px 12px 0;font-size:.95rem;line-height:1.55;color:var(--l27-ink-2)}
.l27-say.warn{border-left-color:#b36b00;background:#fbf2e3}
.l27-note{font-size:.8rem;color:var(--l27-muted);line-height:1.5;margin:12px 0 0}
.l27-note a{color:var(--l27-blue);font-weight:700}
/* Line-item budget builder */
.l27-ledger{width:100%;border-collapse:collapse;font-size:.88rem}
.l27-ledger caption{text-align:left;font:800 .75rem/1.3 -apple-system,BlinkMacSystemFont,"Segoe UI",sans-serif;letter-spacing:.1em;text-transform:uppercase;color:var(--l27-blue);padding:6px 0 10px}
.l27-ledger th,.l27-ledger td{padding:8px 6px;border-bottom:1px solid var(--l27-line);vertical-align:middle}
.l27-ledger th{font-size:.72rem;letter-spacing:.06em;text-transform:uppercase;color:var(--l27-muted);text-align:left}
.l27-ledger td.num,.l27-ledger th.num{text-align:right;font-variant-numeric:tabular-nums;white-space:nowrap}
.l27-ledger tr.off td{opacity:.45}
.l27-ledger tfoot td{font-weight:800;border-bottom:0;border-top:2px solid var(--l27-ink)}
.l27-ledger input[type=range]{width:100%;min-width:90px;accent-color:var(--l27-blue)}
.l27-ledger .tag{display:inline-block;font-size:.66rem;font-weight:800;letter-spacing:.06em;text-transform:uppercase;border-radius:999px;padding:3px 7px;background:#eef2f5;color:#40515e;margin-left:4px}
.l27-ledger .tag.administrative{background:#fbf2e3;color:#7a4b00}.l27-ledger .tag.contingent{background:var(--l27-bad-bg);color:var(--l27-bad)}.l27-ledger .tag.notcounted{background:#eee;color:#666}
.l27-ledger-wrap{overflow-x:auto;-webkit-overflow-scrolling:touch}
.l27-tabs{display:flex;gap:6px;border-bottom:1px solid var(--l27-line);margin-bottom:14px;flex-wrap:wrap}
.l27-tabs button{appearance:none;border:0;background:none;padding:10px 14px;font:800 .82rem/1 -apple-system,BlinkMacSystemFont,"Segoe UI",sans-serif;color:var(--l27-muted);border-bottom:3px solid transparent;cursor:pointer}
.l27-tabs button[aria-selected=true]{color:var(--l27-ink);border-bottom-color:var(--l27-ink)}
/* Stacked bars / breakdown */
.l27-break{display:flex;flex-direction:column;gap:8px;margin:6px 0 4px}
.l27-break div{display:grid;grid-template-columns:minmax(120px,1fr) auto;gap:10px;align-items:baseline;padding:8px 0;border-bottom:1px dashed var(--l27-line);font-size:.92rem}
.l27-break div b{font-variant-numeric:tabular-nums;white-space:nowrap}
.l27-break div.total{border-bottom:0;border-top:2px solid var(--l27-ink);font-weight:800;font-size:1rem}
.l27-break .plus{color:var(--l27-good)}.l27-break .minus{color:var(--l27-bad)}
.l27-details{margin-top:12px;border:1px solid var(--l27-line);border-radius:12px;padding:0 14px}
.l27-details summary{cursor:pointer;padding:12px 0;font:800 .85rem/1.3 -apple-system,BlinkMacSystemFont,"Segoe UI",sans-serif;color:var(--l27-ink-2)}
.l27-details[open]{padding-bottom:14px}
/* Election spatial map */
.l27-spatial{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1fr);gap:18px;margin:16px 0}
@media(max-width:820px){.l27-spatial{grid-template-columns:1fr}}
.l27-compare{display:grid;grid-template-columns:repeat(3,1fr);gap:10px}
@media(max-width:620px){.l27-compare{grid-template-columns:1fr}}
.l27-compare article{background:rgba(255,255,255,.08);border:1px solid rgba(255,255,255,.18);border-radius:12px;padding:12px 14px;color:#fff}
.l27-compare article span{display:block;font:800 .68rem/1.3 -apple-system,sans-serif;letter-spacing:.1em;text-transform:uppercase;opacity:.75;margin-bottom:4px}
.l27-compare article strong{font-family:Georgia,serif;font-weight:400;font-size:1.3rem}
.l27-compare article small{display:block;opacity:.8;font-size:.78rem;margin-top:3px;line-height:1.35}
.lab-card .l27-control > span:first-child,.lab-card .l27-check{color:#e9eef2}
.lab-card .l27-control output{color:#e5c9a7}
.lab-card .l27-control small{color:#b9c6cf}
.lab-card .l27-seg button{background:transparent;color:#fff;border-color:rgba(255,255,255,.35)}
.lab-card .l27-seg button[aria-pressed=true]{background:#fff;color:var(--l27-ink)}
.l27-election-controls{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:16px;margin:16px 0}
@media(max-width:820px){.l27-election-controls{grid-template-columns:1fr}}
.l27-spatial svg{width:100%;height:auto;background:rgba(255,255,255,.04);border:1px solid rgba(255,255,255,.14);border-radius:12px}
/* Seat bench (Supreme Court) */
.l27-bench{display:grid;grid-template-columns:repeat(9,minmax(0,1fr));gap:6px;margin:12px 0}
.l27-bench div{border-radius:10px;padding:10px 4px;text-align:center;font-size:.72rem;font-weight:800;background:#eef2f5;color:#40515e}
.l27-bench div.reg{background:var(--l27-good-bg);color:var(--l27-good)}
@media(max-width:620px){.l27-bench{grid-template-columns:repeat(5,minmax(0,1fr))}}
@media (prefers-reduced-motion: reduce){.l27-lab *{transition:none!important;animation:none!important}}
.l27-lab [hidden]{display:none!important}
@media(max-width:620px){.l27-ledger th:nth-child(3),.l27-ledger td:nth-child(3),.l27-ledger th:nth-child(5),.l27-ledger td:nth-child(5){display:none}.l27-ledger{font-size:.8rem}.l27-ledger input[type=range]{min-width:70px}.l27-ledger th,.l27-ledger td{padding:7px 3px}}

/* ===== merged from /assets/css/election-sandbox-v43.css ===== */
/* GovThatWorks.org — Phase 2 / V43 election & representation sandbox */
:root{
  --p2-c1:#0d9488;
  --p2-c2:#d97706;
  --p2-c3:#7c3aed;
  --p2-c4:#b91c1c;
  --p2-c5:#2563eb;
}
.p2-shell{background:var(--gtw-surface-base);color:var(--gtw-ink)}
.p2-wrap{max-width:var(--gtw-content-max);margin:0 auto;padding:0 24px}
.p2-section{padding:clamp(48px,7vw,88px) 0;border-top:1px solid var(--gtw-border-subtle)}
.p2-section--dark{background:var(--gtw-navy-950);color:#fff}
.p2-section--dark .p2-kicker,.p2-section--dark .p2-note{color:#cbd5e1}
.p2-kicker{font:800 .74rem/1.2 var(--gtw-font-sans);letter-spacing:.16em;text-transform:uppercase;color:var(--gtw-teal-dark);margin-bottom:10px}
.p2-title{font-family:var(--gtw-font-serif);font-size:clamp(2.2rem,5vw,4.7rem);line-height:.98;letter-spacing:-.045em;margin:0;max-width:980px}
.p2-lede{max-width:820px;color:var(--gtw-text);font:400 1.03rem/1.7 var(--gtw-font-sans);margin:18px 0 0}
.p2-section--dark .p2-lede{color:#d8e1ea}
.p2-grid{display:grid;gap:18px}
.p2-grid--2{grid-template-columns:repeat(2,minmax(0,1fr))}
.p2-grid--4{grid-template-columns:repeat(4,minmax(0,1fr))}
.p2-card{background:var(--gtw-surface-raised);border:1px solid var(--gtw-border-subtle);border-radius:var(--gtw-radius-lg);box-shadow:var(--gtw-shadow-1);padding:20px;min-width:0}
.p2-card--dark{background:#14243f;border-color:rgba(255,255,255,.15);box-shadow:none;color:#fff}
.p2-card h3{font:700 1.04rem/1.25 var(--gtw-font-sans);margin:0 0 8px;color:inherit}
.p2-card p{font:400 .9rem/1.55 var(--gtw-font-sans);color:var(--gtw-text);margin:0}
.p2-card--dark p{color:#cbd5e1}
.p2-metric{display:grid;gap:4px}
.p2-metric span{font:800 .67rem/1.2 var(--gtw-font-sans);letter-spacing:.09em;text-transform:uppercase;color:var(--gtw-muted)}
.p2-metric strong{font:800 clamp(1.4rem,3vw,2.2rem)/1 var(--gtw-font-sans);font-variant-numeric:tabular-nums}
.p2-button{min-height:var(--gtw-touch);border:1px solid var(--gtw-border-strong);background:#fff;color:var(--gtw-ink);border-radius:var(--gtw-radius-md);font:800 .86rem/1 var(--gtw-font-sans);padding:0 15px;cursor:pointer}
.p2-button:hover{border-color:var(--gtw-teal);color:var(--gtw-teal-dark)}
.p2-button--primary{background:var(--gtw-teal);border-color:var(--gtw-teal);color:#fff}
.p2-button--primary:hover{background:var(--gtw-teal-dark);color:#fff}
.p2-button[aria-pressed="true"],.p2-segment button[aria-pressed="true"]{background:var(--gtw-navy-950);border-color:var(--gtw-navy-950);color:#fff}
.p2-button:focus-visible,.p2-segment button:focus-visible,.p2-select:focus-visible,.p2-range:focus-visible,.p2-coalition-bloc:focus-visible{outline:3px solid rgba(13,148,136,.35);outline-offset:2px}
.p2-toolbar{display:flex;align-items:center;gap:10px;flex-wrap:wrap;margin:24px 0}
.p2-segment{display:inline-flex;gap:5px;padding:5px;background:var(--gtw-slate-100);border:1px solid var(--gtw-border-subtle);border-radius:var(--gtw-radius-pill)}
.p2-segment button{min-height:40px;border:0;background:transparent;color:var(--gtw-slate-700);border-radius:var(--gtw-radius-pill);padding:0 14px;font:800 .75rem/1 var(--gtw-font-sans);cursor:pointer}
.p2-note{font:500 .78rem/1.5 var(--gtw-font-sans);color:var(--gtw-muted)}
.p2-input-card{display:grid;gap:12px;background:#fff;border:1px solid var(--gtw-border-subtle);border-radius:var(--gtw-radius-lg);padding:18px}
.p2-input-card__top{display:flex;align-items:center;justify-content:space-between;gap:10px}
.p2-input-card__name{display:flex;align-items:center;gap:9px;font:800 .9rem/1.2 var(--gtw-font-sans)}
.p2-shape{display:inline-grid;place-items:center;width:25px;height:25px;color:#fff;font:900 .7rem/1 var(--gtw-font-sans);background:var(--shape-color,var(--p2-c1));border:2px solid rgba(15,30,54,.18)}
.p2-shape--circle{border-radius:50%}.p2-shape--square{border-radius:4px}.p2-shape--diamond{transform:rotate(45deg);border-radius:3px}.p2-shape--diamond>span{transform:rotate(-45deg)}.p2-shape--hex{clip-path:polygon(25% 5%,75% 5%,100% 50%,75% 95%,25% 95%,0 50%)}
.p2-range-row{display:grid;grid-template-columns:1fr auto;gap:8px;align-items:center}
.p2-range{width:100%;accent-color:var(--gtw-teal)}
.p2-range-value{min-width:54px;text-align:right;font:800 .84rem/1 var(--gtw-font-sans);font-variant-numeric:tabular-nums}
.p2-rank-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:8px}
.p2-rank-grid label{display:grid;gap:5px;font:700 .67rem/1.2 var(--gtw-font-sans);text-transform:uppercase;letter-spacing:.06em;color:var(--gtw-muted)}
.p2-select{width:100%;min-height:42px;border:1px solid var(--gtw-border-strong);border-radius:var(--gtw-radius-sm);background:#fff;color:var(--gtw-ink);padding:0 8px;font:700 .78rem/1 var(--gtw-font-sans)}
.p2-system-results{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:12px;margin-top:18px}
.p2-system-card{position:relative;overflow:hidden;background:#fff;border:1px solid var(--gtw-border-subtle);border-radius:var(--gtw-radius-lg);padding:17px;min-height:150px}
.p2-system-card::before{content:"";position:absolute;left:0;top:0;bottom:0;width:4px;background:var(--system-accent,var(--gtw-teal))}
.p2-system-card span{display:block;font:800 .67rem/1.2 var(--gtw-font-sans);letter-spacing:.07em;text-transform:uppercase;color:var(--gtw-muted)}
.p2-system-card strong{display:block;font:800 1.18rem/1.25 var(--gtw-font-sans);margin:10px 0 6px}
.p2-system-card p{font:500 .78rem/1.45 var(--gtw-font-sans);color:var(--gtw-text);margin:0}
.p2-bars{display:grid;gap:8px;margin-top:11px}
.p2-bar{display:grid;grid-template-columns:minmax(90px,.45fr) minmax(120px,1fr) 56px;gap:9px;align-items:center;font:700 .72rem/1.2 var(--gtw-font-sans)}
.p2-bar__track{height:11px;background:var(--gtw-slate-100);border-radius:999px;overflow:hidden}
.p2-bar__fill{display:block;height:100%;width:0;background:var(--bar-color,var(--gtw-teal));border-radius:inherit;transition:width .35s ease}
.p2-bar__value{text-align:right;font-variant-numeric:tabular-nums}
.p2-flow-shell{display:grid;grid-template-columns:minmax(0,1fr) 270px;gap:18px;margin-top:18px}
.p2-flow-viz{background:#fff;border:1px solid var(--gtw-border-subtle);border-radius:var(--gtw-radius-lg);padding:12px;min-height:390px}
.p2-flow-viz svg{display:block;width:100%;height:auto;min-height:360px}
.p2-flow-path{fill:none;stroke-linecap:round;opacity:.62;animation:p2-flow-in .6s ease both}
@keyframes p2-flow-in{from{stroke-dasharray:5 16;opacity:.15}to{stroke-dasharray:0;opacity:.62}}
.p2-flow-side{display:grid;align-content:start;gap:12px}
.p2-flow-step{background:#fff;border:1px solid var(--gtw-border-subtle);border-radius:var(--gtw-radius-md);padding:15px}
.p2-flow-step strong{display:block;font:800 .88rem/1.35 var(--gtw-font-sans);margin-bottom:6px}
.p2-flow-step p{font:500 .78rem/1.45 var(--gtw-font-sans);margin:0;color:var(--gtw-text)}
.p2-step-controls{display:flex;gap:8px}
.p2-step-controls button{flex:1}
.p2-spoiler{display:grid;grid-template-columns:minmax(0,1.15fr) minmax(320px,.85fr);gap:18px;margin-top:20px}
.p2-spoiler-chart{display:grid;gap:10px}
.p2-winner-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:8px}
.p2-winner-pill{border:1px solid var(--gtw-border-subtle);border-radius:var(--gtw-radius-md);padding:12px;background:#fff}
.p2-winner-pill span{display:block;font:800 .62rem/1.2 var(--gtw-font-sans);text-transform:uppercase;letter-spacing:.07em;color:var(--gtw-muted)}
.p2-winner-pill strong{display:block;margin-top:5px;font:800 .9rem/1.2 var(--gtw-font-sans)}
.p2-method-note{margin-top:16px;border-left:4px solid var(--gtw-amber);background:#fff8eb;padding:13px 15px;font:500 .78rem/1.5 var(--gtw-font-sans);color:#65400d}

/* Congress fairness metrics */
.p2-metrics-grid{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:12px;margin:20px 0}
.p2-viz-grid{display:grid;grid-template-columns:1fr 1fr;gap:18px}
.p2-chart{background:#fff;border:1px solid var(--gtw-border-subtle);border-radius:var(--gtw-radius-lg);padding:15px}
.p2-chart h3{font:800 .92rem/1.3 var(--gtw-font-sans);margin:0 0 8px}
.p2-chart svg{display:block;width:100%;height:auto}
.p2-legend{display:flex;gap:14px;flex-wrap:wrap;font:700 .7rem/1.2 var(--gtw-font-sans);color:var(--gtw-muted);margin-top:9px}
.p2-key{display:inline-flex;align-items:center;gap:6px}.p2-key i{width:18px;height:3px;background:currentColor}.p2-key i.dashed{background:repeating-linear-gradient(90deg,currentColor 0 5px,transparent 5px 9px)}
.p2-compactness-outline{fill:rgba(13,148,136,.10);stroke:var(--gtw-teal-dark);stroke-width:3}
.p2-axis{stroke:#94a3b8;stroke-width:1}.p2-gridline{stroke:#e2e8f0;stroke-width:1}.p2-axis-text{font:600 10px/1 var(--gtw-font-sans);fill:#64748b}.p2-curve-a{fill:none;stroke:var(--gtw-amber);stroke-width:3}.p2-curve-b{fill:none;stroke:var(--gtw-teal);stroke-width:4}.p2-diagonal{fill:none;stroke:#94a3b8;stroke-width:1.5;stroke-dasharray:5 5}

/* Coalition builder */
.p2-coalition-grid{display:grid;grid-template-columns:minmax(0,.9fr) minmax(360px,1.1fr);gap:18px;margin-top:20px}
.p2-bloc-bank{display:grid;gap:10px}
.p2-coalition-bloc{display:grid;grid-template-columns:1fr auto;gap:12px;align-items:center;width:100%;text-align:left;border:1px solid var(--gtw-border-subtle);background:#fff;border-radius:var(--gtw-radius-md);padding:13px 14px;cursor:grab;color:var(--gtw-ink)}
.p2-coalition-bloc[aria-pressed="true"]{border-color:var(--gtw-teal);box-shadow:inset 4px 0 0 var(--gtw-teal);background:#f0fdfa}
.p2-coalition-bloc strong{font:800 .88rem/1.25 var(--gtw-font-sans)}
.p2-coalition-bloc small{display:block;margin-top:4px;font:500 .7rem/1.35 var(--gtw-font-sans);color:var(--gtw-muted)}
.p2-coalition-seats{font:900 1rem/1 var(--gtw-font-sans);font-variant-numeric:tabular-nums}
.p2-coalition-tray{min-height:250px;border:2px dashed var(--gtw-border-strong);border-radius:var(--gtw-radius-lg);background:var(--gtw-surface-subtle);padding:18px;display:grid;align-content:start;gap:12px}
.p2-coalition-tray.is-over{border-color:var(--gtw-teal);background:#ecfdf5}
.p2-coalition-meter{height:18px;background:#e2e8f0;border-radius:999px;overflow:hidden;position:relative}
.p2-coalition-meter span{display:block;height:100%;width:0;background:var(--gtw-teal);transition:width .3s ease}
.p2-coalition-meter::after{content:"";position:absolute;top:-3px;bottom:-3px;width:2px;background:var(--gtw-navy-950);left:50%}
.p2-coalition-summary{display:grid;grid-template-columns:1fr auto;gap:10px;align-items:end}
.p2-coalition-summary strong{font:900 2rem/1 var(--gtw-font-sans);font-variant-numeric:tabular-nums}
.p2-priority-list{display:flex;flex-wrap:wrap;gap:7px}.p2-priority-list span{font:800 .66rem/1 var(--gtw-font-sans);padding:7px 9px;border-radius:999px;background:#e2e8f0;color:#334155}
.p2-coalition-status{font:700 .8rem/1.45 var(--gtw-font-sans)}

@media(max-width:1000px){
  .p2-grid--4,.p2-system-results,.p2-metrics-grid{grid-template-columns:repeat(2,minmax(0,1fr))}
  .p2-flow-shell,.p2-spoiler,.p2-viz-grid,.p2-coalition-grid{grid-template-columns:1fr}
}
@media(max-width:680px){
  .p2-wrap{padding:0 16px}
  .p2-grid--2,.p2-grid--4,.p2-system-results,.p2-metrics-grid{grid-template-columns:1fr}
  .p2-rank-grid{grid-template-columns:1fr}
  .p2-winner-grid{grid-template-columns:1fr}
  .p2-bar{grid-template-columns:82px 1fr 52px}
  .p2-segment{width:100%;overflow-x:auto;border-radius:var(--gtw-radius-md)}
  .p2-segment button{flex:0 0 auto}
}
@media(prefers-reduced-motion:reduce){
  .p2-flow-path{animation:none}.p2-bar__fill,.p2-coalition-meter span{transition:none}
}

/* ===== merged from /assets/css/policy-tools-v45.css ===== */
/* Phase 4 policy simulators — V45 */
.v45-tool{--v45-ink:var(--ink-primary,#0f1e36);--v45-muted:var(--ink-muted,#64748b);--v45-surface:var(--surface-raised,#fff);--v45-bg:var(--surface-base,#f8f9fa);--v45-border:var(--border-subtle,#dbe2ea);--v45-accent:var(--action-primary,#0d9488);--v45-warn:var(--action-secondary,#d97706);background:var(--v45-surface);border:1px solid var(--v45-border);border-radius:20px;padding:clamp(18px,3vw,30px);box-shadow:0 18px 48px rgba(15,30,54,.08);font-variant-numeric:tabular-nums}
.v45-tool h3,.v45-tool h4{color:var(--v45-ink)}
.v45-tool__header{display:flex;justify-content:space-between;gap:24px;align-items:flex-end;margin-bottom:20px}
.v45-tool__header p{max-width:760px;margin:6px 0 0;color:var(--v45-muted);line-height:1.6}
.v45-kicker{text-transform:uppercase;letter-spacing:.13em;font-size:.7rem;font-weight:900;color:var(--v45-accent)}
.v45-grid{display:grid;grid-template-columns:minmax(250px,.82fr) minmax(0,1.18fr);gap:24px;align-items:start}
.v45-controls{display:grid;gap:14px}.v45-control{display:grid;gap:8px}.v45-control>span,.v45-control>label{font-weight:800;color:var(--v45-ink);font-size:.86rem}.v45-control small{color:var(--v45-muted);line-height:1.45}.v45-control output{float:right;color:var(--v45-accent);font-weight:900}
.v45-control input[type=range]{width:100%;accent-color:var(--v45-accent)}
.v45-control select,.v45-control input[type=number]{width:100%;min-height:48px;border:1px solid var(--v45-border);border-radius:12px;background:#fff;color:var(--v45-ink);padding:10px 12px;font:inherit}
.v45-actions{display:flex;gap:10px;flex-wrap:wrap}.v45-btn{appearance:none;border:1px solid var(--v45-border);background:#fff;color:var(--v45-ink);border-radius:999px;min-height:46px;padding:10px 16px;font-weight:850;cursor:pointer}.v45-btn.primary{background:var(--v45-accent);border-color:var(--v45-accent);color:#fff}.v45-btn[aria-pressed=true]{background:var(--v45-ink);border-color:var(--v45-ink);color:#fff}.v45-btn:focus-visible,.v45-map-state:focus-visible{outline:3px solid rgba(13,148,136,.28);outline-offset:2px}
.v45-kpis{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:12px;margin:14px 0}.v45-kpi{background:var(--v45-bg);border:1px solid var(--v45-border);border-radius:14px;padding:16px}.v45-kpi span{display:block;color:var(--v45-muted);font-size:.7rem;text-transform:uppercase;letter-spacing:.08em;font-weight:800}.v45-kpi strong{display:block;margin-top:5px;font-size:clamp(1.4rem,3vw,2.1rem);color:var(--v45-ink)}.v45-kpi small{display:block;color:var(--v45-muted);margin-top:4px;line-height:1.4}.v45-kpi.accent{border-top:4px solid var(--v45-accent)}.v45-kpi.warn{border-top:4px dashed var(--v45-warn)}
.v45-chart{width:100%;min-height:300px;border:1px solid var(--v45-border);border-radius:16px;background:linear-gradient(180deg,#fff,#f8fafc);overflow:hidden}.v45-chart text{font-family:Inter,Public Sans,system-ui,sans-serif;fill:#475569}.v45-chart .grid{stroke:#e2e8f0;stroke-width:1}.v45-chart .axis{stroke:#94a3b8;stroke-width:1.2}.v45-chart .series-a{fill:none;stroke:var(--v45-warn);stroke-width:3;stroke-dasharray:8 5}.v45-chart .series-b{fill:none;stroke:var(--v45-accent);stroke-width:4}.v45-chart .marker-a{fill:var(--v45-warn)}.v45-chart .marker-b{fill:var(--v45-accent)}
.v45-note{margin-top:14px;color:var(--v45-muted);font-size:.82rem;line-height:1.55;border-left:3px solid var(--v45-border);padding-left:12px}
.v45-pill-row{display:flex;gap:8px;flex-wrap:wrap}.v45-pill{display:inline-flex;align-items:center;gap:6px;border:1px solid var(--v45-border);border-radius:999px;padding:7px 10px;font-size:.75rem;background:#fff}.v45-pill i{width:10px;height:10px;border-radius:50%;background:var(--v45-accent)}

/* SCOTUS clock */
.v45-clock{display:grid;gap:16px}.v45-clock-row{display:grid;grid-template-columns:140px 1fr;gap:12px;align-items:center}.v45-clock-label{font-weight:800;font-size:.82rem;color:var(--v45-ink)}.v45-timeline{position:relative;height:62px;border:1px solid var(--v45-border);border-radius:14px;background:repeating-linear-gradient(90deg,#fff 0,#fff calc(10% - 1px),#e2e8f0 calc(10% - 1px),#e2e8f0 10%)}.v45-timeline-point{position:absolute;top:15px;transform:translateX(-50%);width:17px;height:17px;border-radius:50%;background:var(--v45-warn);border:3px solid #fff;box-shadow:0 0 0 2px var(--v45-warn)}.v45-timeline-point.regular{background:var(--v45-accent);box-shadow:0 0 0 2px var(--v45-accent)}.v45-timeline-point span{position:absolute;top:24px;left:50%;transform:translateX(-50%);font-size:.62rem;color:var(--v45-muted);white-space:nowrap}

/* Opportunity */
.v45-balance-bars{display:grid;gap:12px;margin-top:16px}.v45-balance-row{display:grid;grid-template-columns:70px 1fr 110px;gap:10px;align-items:center}.v45-balance-track{height:18px;border-radius:999px;background:#e2e8f0;overflow:hidden}.v45-balance-track i{display:block;height:100%;width:0;background:var(--v45-accent);transition:width .25s ease}.v45-use-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:10px;margin-top:16px}.v45-use-card{border:1px solid var(--v45-border);border-radius:14px;padding:14px;background:#fff}.v45-use-card strong{display:block;color:var(--v45-ink);margin-bottom:4px}.v45-use-card span{font-size:.8rem;color:var(--v45-muted);line-height:1.45}

/* Reorganization network */
.v45-network-wrap{display:grid;grid-template-columns:minmax(0,1.25fr) minmax(250px,.75fr);gap:18px}.v45-network{width:100%;min-height:470px;border:1px solid var(--v45-border);border-radius:18px;background:#f8fafc}.v45-network .edge{stroke:#94a3b8;stroke-width:1.5}.v45-network .edge.overlap{stroke:var(--v45-warn);stroke-width:2.5;stroke-dasharray:6 5}.v45-network .node circle{fill:#fff;stroke:#334155;stroke-width:2}.v45-network .node.mission circle{fill:#e6fffb;stroke:var(--v45-accent);stroke-width:3}.v45-network .node text{font:700 11px/1.2 Inter,Public Sans,system-ui,sans-serif;fill:#0f172a;text-anchor:middle;pointer-events:none}.v45-network-detail{display:grid;gap:12px}.v45-overlap-list{display:grid;gap:8px}.v45-overlap-item{padding:10px 12px;border:1px solid var(--v45-border);border-radius:12px;background:#fff;font-size:.82rem;color:#475569}.v45-overlap-item strong{color:var(--v45-ink)}

/* Benefit cliff */
.v45-wage-readout{font-size:1.55rem;font-weight:900;color:var(--v45-accent)}.v45-legend{display:flex;gap:16px;flex-wrap:wrap;margin:10px 0;font-size:.78rem;color:#475569}.v45-legend span{display:inline-flex;align-items:center;gap:7px}.v45-legend i{width:24px;height:0;border-top:3px solid var(--v45-accent)}.v45-legend .current i{border-top-color:var(--v45-warn);border-top-style:dashed}

/* Ratification tile map */
.v45-ratify-controls{display:grid;grid-template-columns:1fr 1fr;gap:12px;margin-bottom:14px}.v45-state-map{display:grid;grid-template-columns:repeat(12,minmax(34px,1fr));grid-auto-rows:42px;gap:5px;max-width:920px;margin:0 auto}.v45-map-state{appearance:none;border:1px solid #cbd5e1;background:#fff;color:#334155;border-radius:8px;font-weight:900;font-size:.72rem;cursor:pointer;min-width:34px}.v45-map-state[data-status=ratify]{background:#ccfbf1;border-color:#0d9488;color:#115e59}.v45-map-state[data-status=apply]{background:#ffedd5;border-color:#d97706;color:#9a3412}.v45-map-state[data-status=both]{background:linear-gradient(135deg,#ccfbf1 0 50%,#ffedd5 50%);border-color:#0f1e36;color:#0f1e36}.v45-map-state[aria-pressed=true]{box-shadow:inset 0 0 0 2px currentColor}.v45-threshold{margin-top:14px;display:grid;gap:10px}.v45-threshold-row{display:grid;grid-template-columns:150px 1fr 74px;gap:10px;align-items:center}.v45-threshold-track{height:16px;background:#e2e8f0;border-radius:999px;overflow:hidden}.v45-threshold-track i{display:block;height:100%;background:var(--v45-accent);width:0;transition:width .2s ease}.v45-threshold-row.application .v45-threshold-track i{background:var(--v45-warn)}

@media(max-width:900px){.v45-grid,.v45-network-wrap{grid-template-columns:1fr}.v45-kpis{grid-template-columns:1fr 1fr}.v45-state-map{grid-template-columns:repeat(8,minmax(34px,1fr))}.v45-map-state{grid-column:auto!important;grid-row:auto!important}.v45-ratify-controls{grid-template-columns:1fr}}
@media(max-width:620px){.v45-tool{padding:16px}.v45-kpis,.v45-use-grid{grid-template-columns:1fr}.v45-clock-row{grid-template-columns:1fr}.v45-balance-row{grid-template-columns:56px 1fr 86px}.v45-state-map{grid-template-columns:repeat(5,minmax(42px,1fr));grid-auto-rows:46px}.v45-threshold-row{grid-template-columns:1fr}.v45-tool__header{display:block}.v45-chart{min-height:260px}}
@media(prefers-reduced-motion:reduce){.v45-balance-track i,.v45-threshold-track i{transition:none}}
