:root{--background: rgb(255, 255, 255);--foreground: rgb(10, 10, 10);--muted: rgb(245, 245, 245);--muted-foreground: rgb(135, 131, 131);--border: rgb(212, 212, 212);--accent: oklch(.666 .179 58.318);--democratic: oklch(.596 .165 253.9);--republican: oklch(.61 .194 25.7);--radius: .5rem}*{box-sizing:border-box}html,body{min-width:0;min-height:100%;margin:0}body{background:var(--background);color:var(--foreground);font-family:Inter,ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,sans-serif;font-synthesis:none;line-height:1.5;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}button{font:inherit}::selection{background:#da770038;background:oklch(.666 .179 58.318 / .22)}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}.stepper-page{min-height:100svh;display:grid;place-items:center;padding:clamp(1rem,3vw,2rem)}.stepper{width:min(100%,1160px)}.stepper-layout{display:grid;grid-template-columns:44px minmax(0,1fr) 44px;gap:clamp(.75rem,2vw,1.5rem);align-items:center}.stepper-stage{grid-column:2;display:grid;min-width:0;min-height:min(48rem,calc(100svh - 8rem))}.stepper-stage:has(.visualization-panel.is-active){min-height:0}#previous-step{grid-column:1}#next-step{grid-column:3}.step-panel{grid-area:1 / 1;min-width:0;opacity:0;visibility:hidden;pointer-events:none;transition:opacity .3s cubic-bezier(.25,.46,.45,.94),visibility 0s linear .3s}.step-panel.is-active{opacity:1;visibility:visible;pointer-events:auto;transition-delay:0s}.intro-panel{display:grid;align-content:center;width:min(100%,840px);margin-inline:auto}.intro-panel h1{max-width:840px;font-size:clamp(2.25rem,4.25vw,3.5rem)}h1{margin:0;max-width:760px;font-size:clamp(2.25rem,5vw,4rem);font-weight:600;letter-spacing:-.025em;line-height:1.05;text-wrap:balance}.dek{max-width:60ch;margin:1.25rem 0 0;color:var(--muted-foreground);font-size:1rem;text-wrap:pretty}.visualization-panel{display:grid;grid-template-rows:auto auto;row-gap:.75rem;align-content:center;align-items:start}.visualization-step-copy{display:flex;flex-direction:column;justify-content:flex-start;gap:.5rem;width:min(80.87%,744px,calc((100svh - 16rem)*.9789));height:auto;margin-inline:auto}.visualization-step-copy h1{max-width:none;font-size:clamp(1.4rem,2.6vw,2rem);line-height:1.1;text-wrap:wrap}.visualization-step-copy .dek{max-width:none;margin:0}.visualization-step-copy .dek:empty{display:none}.bubble-chart{width:min(100%,920px,calc((100svh - 16rem)*1.2105));margin-inline:auto}.bubble-chart svg{display:block;width:100%;height:auto;overflow:visible}.bubble-enclosure{fill:none;stroke:var(--border);stroke-width:1}.state-enclosure{fill:var(--background);stroke:#a1a1a1;stroke-width:.5}.state-donut-segment{stroke:var(--background);stroke-width:1}.state-donut-outline{fill:none;stroke:#a1a1a1;stroke-width:.5}.donut-democratic{fill:var(--democratic)}.donut-republican{fill:var(--republican)}.donut-contested{fill:var(--muted)}.state-donut-label{fill:var(--foreground);font-weight:650;dominant-baseline:middle;text-anchor:middle;pointer-events:none}.state-donut-percent{fill:var(--muted-foreground);font-weight:550;font-variant-numeric:tabular-nums}.state-label{fill:var(--muted-foreground);stroke:var(--background);stroke-width:3px;paint-order:stroke;text-anchor:middle;font-size:10px;font-weight:600;pointer-events:none}.seat{stroke:var(--background);stroke-width:1}.seat-democratic{fill:var(--democratic)}.seat-republican{fill:var(--republican)}.seat-contested{fill:var(--muted)}.party-title{text-decoration-line:underline;text-decoration-thickness:.14em;text-underline-offset:.12em;text-decoration-skip-ink:none}.democratic-text{color:var(--democratic)}.republican-text{color:var(--republican)}.party-title-democratic{text-decoration-color:var(--democratic)}.party-title-republican{text-decoration-color:var(--republican)}.visualization-panel.is-party-reveal .party-title{position:relative;display:inline-block;text-decoration-color:transparent}.visualization-panel.is-party-reveal .party-title:after{position:absolute;right:0;bottom:-.02em;left:0;height:.14em;content:"";transform:scaleX(0);transform-origin:left;animation:reveal-party-underline .5s cubic-bezier(.19,1,.22,1) forwards}.visualization-panel.is-party-reveal .party-title-republican:after{background:var(--republican);animation-delay:.12s}.visualization-panel.is-party-reveal .party-title-democratic:after{background:var(--democratic);animation-delay:1.25s}@keyframes reveal-party-underline{to{transform:scaleX(1)}}.stepper-button{width:44px;height:44px;display:grid;place-items:center;padding:0;border:1px solid rgb(10 10 10 / .12);border-radius:999px;background:var(--background);color:var(--foreground);cursor:pointer;transition:background-color .15s ease,color .15s ease,transform .15s ease;box-shadow:0 1px 2px #0a0a0a0a}.stepper-button[hidden]{display:none}.stepper-button svg{width:20px;height:20px;fill:none;stroke:currentColor;stroke-width:1.5;stroke-linecap:round;stroke-linejoin:round}.stepper-button:focus-visible{outline:2px solid;outline-offset:2px}.stepper-button:active:not(:disabled){transform:scale(.97)}.stepper-button:disabled{color:var(--muted-foreground);cursor:not-allowed;opacity:.35}.stepper-footer{display:grid;justify-items:center;gap:.55rem;margin-top:1rem}.step-progress{display:flex;gap:.35rem}.step-progress i{width:1.25rem;height:3px;border-radius:999px;background:var(--border);transition:background-color .18s ease}.step-progress i.is-complete{background:var(--muted-foreground)}.step-progress i.is-active{background:var(--foreground)}.keyboard-hint{margin:0;color:var(--muted-foreground);font-size:.75rem;text-align:center}.error{color:#e40014;color:oklch(.577 .245 27.325)}@media(hover:hover)and (pointer:fine){.stepper-button:hover:not(:disabled){background:var(--muted)}}@media(max-width:42rem){.stepper-page{padding:1rem}.stepper-layout{grid-template-columns:44px minmax(0,1fr) 44px;grid-template-rows:minmax(0,1fr) 44px;column-gap:.75rem;row-gap:.75rem}.stepper-stage{grid-column:1 / -1;grid-row:1;min-height:min(37rem,calc(100svh - 8.5rem))}#previous-step,#next-step{grid-row:2}#previous-step{grid-column:1}#next-step{grid-column:3}.stepper-button{position:relative;border-color:transparent;background:transparent;box-shadow:none}.stepper-button:before{position:absolute;inset:4px;z-index:0;border:1px solid rgb(10 10 10 / .12);border-radius:999px;background:var(--background);box-shadow:0 1px 2px #0a0a0a0a;content:"";pointer-events:none}.stepper-button svg{position:relative;z-index:1;width:18px;height:18px}.bubble-chart{width:100%}.visualization-step-copy{width:80.87%}.visualization-panel{grid-template-rows:auto auto;row-gap:.5rem}.visualization-step-copy{min-height:0;height:auto}.visualization-step-copy h1{font-size:clamp(1.15rem,5.1vw,1.45rem)}.visualization-step-copy .dek{font-size:.85rem;line-height:1.4}.keyboard-hint{display:none}}@media(max-width:42rem)and (hover:hover)and (pointer:fine){.stepper-button:hover:not(:disabled){background:transparent}.stepper-button:hover:not(:disabled):before{background:var(--muted)}}@media(max-height:50rem)and (min-width:42.001rem){.visualization-panel{grid-template-rows:auto auto;row-gap:.5rem}.visualization-step-copy{min-height:0;height:auto}.visualization-step-copy h1{font-size:clamp(1.4rem,2.4vw,1.75rem)}.visualization-step-copy .dek{font-size:.9rem;line-height:1.4}}@media(max-height:42rem)and (min-width:42.001rem){.stepper-page{align-items:start}.stepper-stage{min-height:0}.bubble-chart{width:min(100%,620px)}}@media(prefers-reduced-motion:reduce){.step-panel{transition:opacity .16s ease,visibility 0s linear .16s}.step-panel.is-active{transition-delay:0s}.stepper-button{transition-duration:.01ms}}
