:root{--green-deep:#0f3d24;--green-mid:#1b6b3a;--green-light:#2d8f52;--gold:#c9a227;--gold-bright:#e8c547;--paper:#f4efe4;--paper-dark:#e8e0d0;--ink:#1a1612;--ink-muted:#5c5348;--card-shadow:0 4px 24px #0f3d241f;--radius:12px;color:var(--ink);background-color:var(--paper);font-synthesis:none;text-rendering:optimizelegibility;-webkit-font-smoothing:antialiased;font-family:Segoe UI,system-ui,-apple-system,sans-serif;font-weight:400;line-height:1.5}*,:before,:after{box-sizing:border-box}body{background:radial-gradient(ellipse at 20% 0%, #c9a22726 0%, transparent 50%), radial-gradient(ellipse at 80% 100%, #1b6b3a1a 0%, transparent 50%), repeating-linear-gradient(0deg, transparent, transparent 28px, #00000005 28px, #00000005 29px), var(--paper);min-height:100vh;margin:0}#root{min-height:100vh}h1,h2,h3{margin:0;line-height:1.2}button{cursor:pointer;font-family:inherit}button:disabled{cursor:not-allowed;opacity:.55}.app{max-width:1440px;margin:0 auto;padding:2rem 1.25rem 3rem}.header{text-align:center;margin-bottom:1.5rem;padding:1rem 0 0}.header-title-row{grid-template-columns:1fr auto 1fr;align-items:start;gap:1rem;margin-bottom:.75rem;display:grid}.header-title-row .header-title{grid-column:2;margin-bottom:0}.header-upload{flex-shrink:0;grid-column:3;justify-self:end;gap:.45rem;display:flex}.header-eyebrow{text-transform:uppercase;letter-spacing:.2em;color:var(--green-mid);margin:0 0 .5rem;font-size:.75rem;font-weight:600}.header-title{color:var(--green-deep);text-transform:uppercase;letter-spacing:.04em;text-shadow:2px 2px 0 var(--gold);margin-bottom:.75rem;font-size:clamp(2rem,6vw,3.25rem);font-weight:800}.header-tagline{color:var(--ink-muted);margin:0;font-size:1.1rem;font-style:italic}.main{flex-direction:column;gap:1.25rem;display:flex}.action-bar{justify-content:space-between;align-items:center;gap:1.25rem;padding:.85rem 1.25rem;display:flex}.action-bar-hint{color:var(--ink-muted);text-align:center;width:100%;margin:0;font-size:.9rem;font-style:italic}.dashboard{grid-template-columns:minmax(280px,360px) minmax(0,1fr);align-items:start;gap:1.25rem;display:grid}.charts-panel{flex-direction:column;gap:1.25rem;min-width:0;display:flex}.card{border-radius:var(--radius);box-shadow:var(--card-shadow);border:1px solid var(--paper-dark);background:#fff;padding:1.5rem}.header-upload .btn-sm{white-space:nowrap}.btn{border:2px solid #0000;border-radius:8px;justify-content:center;align-items:center;padding:.65rem 1.25rem;font-size:.95rem;font-weight:600;transition:transform .15s,box-shadow .15s,background .15s;display:inline-flex}.btn:hover:not(:disabled){transform:translateY(-1px)}.btn-sm{border-radius:6px;padding:.38rem .7rem;font-size:.78rem}.btn-primary{background:var(--green-mid);color:#fff}.btn-primary:hover:not(:disabled){background:var(--green-light);box-shadow:0 4px 12px #1b6b3a59}.btn-secondary{background:var(--paper);color:var(--green-deep);border-color:var(--green-mid)}.btn-secondary:hover:not(:disabled){background:var(--paper-dark)}.btn-hero{background:linear-gradient(135deg, var(--green-mid), var(--green-deep));color:#fff;width:100%;max-width:360px;padding:.85rem 2rem;font-size:1.15rem;box-shadow:0 6px 20px #0f3d244d}.btn-hero:hover:not(:disabled){box-shadow:0 8px 28px #0f3d2466}.btn-ghost{color:var(--ink-muted);background:0 0;border:none;margin-top:.5rem;padding:.5rem;font-size:.85rem}.btn-ghost--inline{margin-top:0;padding:.38rem .5rem;font-size:.78rem}.btn-disabled{pointer-events:none;opacity:.55}.ballot-summary{flex-wrap:wrap;flex:1;align-items:center;gap:1rem;min-width:0;display:flex}.ballot-summary-label{text-transform:uppercase;letter-spacing:.06em;color:var(--green-deep);white-space:nowrap;font-size:.8rem;font-weight:700}.summary-inline{flex-wrap:wrap;align-items:center;gap:1rem;display:flex}.stat--inline{text-align:left;background:0 0;align-items:baseline;gap:.3rem;padding:0;display:flex}.stat--inline .stat-value{font-size:1.15rem;display:inline}.stat--inline .stat-label{font-size:.75rem}.summary-grid{grid-template-columns:repeat(auto-fit,minmax(120px,1fr));gap:1rem;margin-bottom:1.25rem;display:grid}.stat{text-align:center;background:var(--paper);border-radius:8px;padding:.75rem}.stat-value{color:var(--green-deep);font-size:1.75rem;font-weight:800;display:block}.stat-label{color:var(--ink-muted);font-size:.8rem}.candidate-chips{flex-wrap:wrap;gap:.5rem;display:flex}.chip{background:var(--green-deep);color:#fff;border-radius:999px;padding:.35rem .85rem;font-size:.85rem;font-weight:600}.chip--sm{padding:.2rem .6rem;font-size:.75rem}.controls--inline{text-align:right;flex-shrink:0;align-items:center;gap:.5rem;display:flex}.controls{text-align:center}.controls--muted p,.controls-hint{color:var(--ink-muted);margin:.75rem 0 0;font-size:.9rem}.controls-done{color:var(--green-deep);margin:0 0 1rem;font-size:1.1rem;font-weight:600}.controls-done--inline{white-space:nowrap;margin:0;font-size:.85rem}.election-stage{position:sticky;top:1rem}.election-stage--victory{border-color:var(--gold);background:linear-gradient(#fffef8 0%,#fff 100%);position:relative;overflow:hidden}.stage-eyebrow{text-transform:uppercase;letter-spacing:.15em;color:var(--gold);margin:0 0 .25rem;font-size:.7rem;font-weight:700}.stage-header{flex-wrap:wrap;justify-content:space-between;align-items:flex-start;gap:.75rem;margin-bottom:.75rem;display:flex}.stage-meta{flex-wrap:wrap;gap:.4rem;display:flex}.meta-pill{color:var(--green-deep);background:#1b6b3a1f;border-radius:999px;padding:.25rem .65rem;font-size:.75rem;font-weight:600;display:inline-block}.meta-pill--muted{background:var(--paper);color:var(--ink-muted)}.stage-title{color:var(--green-deep);margin-bottom:0;font-size:1.35rem}.stage-quip,.elimination-quip{color:var(--ink-muted);background:var(--paper);border-left:3px solid var(--gold);border-radius:8px;margin:0 0 1rem;padding:.65rem .85rem;font-size:.9rem;font-style:italic}.winner-name{color:var(--green-deep);margin:.25rem 0;font-size:2.5rem;animation:.6s ease-out pop-in}.victory-banner{text-align:center;margin-bottom:1.5rem;position:relative}.no-winner h2{color:var(--ink-muted);margin-bottom:.5rem}.tally-list{flex-direction:column;gap:.65rem;margin:0;padding:0;list-style:none;display:flex}.tally-row{background:var(--paper);border:1px solid #0000;border-radius:10px;padding:.75rem .85rem;transition:border-color .2s,opacity .2s}.tally-row--winner{border-color:var(--gold);background:#c9a22714}.tally-row--eliminated{opacity:.5}.tally-row-top{justify-content:space-between;align-items:baseline;gap:.5rem;margin-bottom:.45rem;display:flex}.tally-name{color:var(--ink);font-size:.95rem;font-weight:600;line-height:1.3}.tally-row--eliminated .tally-name{text-decoration:line-through}.tally-votes{flex-shrink:0;align-items:baseline;gap:.35rem;display:flex}.tally-votes strong{color:var(--green-deep);font-size:1.1rem}.tally-pct{color:var(--ink-muted);font-size:.75rem}.tally-bar-track{background:var(--paper-dark);border-radius:3px;height:6px;margin-bottom:.4rem;overflow:hidden}.tally-bar-fill{background:linear-gradient(90deg, var(--green-mid), var(--green-light));border-radius:3px;min-width:2px;height:100%;transition:width .6s ease-out;display:block}.tally-row--winner .tally-bar-fill{background:linear-gradient(90deg, var(--gold), var(--gold-bright))}.tally-status{min-height:1.25rem}.badge{text-transform:uppercase;letter-spacing:.03em;border-radius:4px;padding:.2rem .55rem;font-size:.75rem;font-weight:600;display:inline-block}.badge-green{color:var(--green-deep);background:#1b6b3a26}.badge-gold{color:#7a5c00;background:#c9a22740}.badge-muted{color:var(--ink-muted);background:#0000000f}.exhausted-note{color:var(--ink-muted);margin:1rem 0 0;font-size:.85rem;font-style:italic}.chart-card{min-width:0}.chart-card h3{color:var(--green-deep);margin-bottom:.25rem;font-size:1.1rem}.chart-card--highlight{background:linear-gradient(#fffef8 0%,#fff 100%);border-color:#c9a22773}.round-charts{grid-template-columns:minmax(0,1fr) minmax(0,1.2fr);align-items:center;gap:1rem;display:grid}.round-chart{min-width:0}.round-chart--donut{justify-content:center;align-items:center;gap:1.25rem;display:flex}.donut-chart-wrap{flex:0 0 168px;width:168px;height:168px}.donut-center-label{fill:var(--green-deep);font-size:1.5rem;font-weight:800}.donut-center-sublabel{fill:var(--ink-muted);text-transform:uppercase;letter-spacing:.08em;font-size:.65rem}.donut-legend{flex-direction:column;flex:0 auto;gap:.4rem;min-width:0;margin:0;padding:0;list-style:none;display:flex}.donut-legend li{color:var(--ink);grid-template-columns:10px minmax(0,1fr) auto;align-items:center;gap:.5rem;font-size:.85rem;display:grid}.donut-legend-swatch{border-radius:2px;width:10px;height:10px}.donut-legend-name{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.donut-legend-value{color:var(--green-deep);font-variant-numeric:tabular-nums;align-items:baseline;gap:.35rem;font-weight:700;display:flex}.donut-legend-pct{color:var(--ink-muted);font-size:.75rem;font-weight:500}.chart-subtitle{color:var(--ink-muted);margin:0 0 1rem;font-size:.85rem}.chart-empty{color:var(--ink-muted);text-align:center;padding:2rem;font-style:italic}.tpp-bar-wrap{margin-bottom:1.25rem}.tpp-bar{border-radius:6px;height:28px;display:flex;overflow:hidden;box-shadow:inset 0 1px 3px #0000001a}.tpp-bar-segment{min-width:2px;transition:width .8s ease-out}.tpp-bar-segment--a{background:linear-gradient(90deg, var(--green-mid), var(--green-light))}.tpp-bar-segment--b{background:linear-gradient(90deg, var(--gold), var(--gold-bright))}.tpp-labels{justify-content:space-between;gap:1rem;margin-top:.65rem;font-size:.9rem;display:flex}.tpp-label strong{color:var(--green-deep);font-size:1.1rem}.tpp-votes{color:var(--ink-muted);font-size:.8rem;font-weight:400;display:block}.chart-footnote{color:var(--ink-muted);margin:.75rem 0 0;font-size:.85rem;font-style:italic}.error-banner{color:#9b1c1c;border-radius:var(--radius);background:#fde8e8;border:1px solid #f5c6c6;margin-bottom:1.25rem;padding:.85rem 1.25rem}.footer{text-align:center;color:var(--ink-muted);margin-top:2.5rem;font-size:.85rem}.footer p{margin:0}.confetti{pointer-events:none;position:absolute;inset:0;overflow:hidden}.confetti-piece{width:8px;height:8px;top:-10px;left:calc(var(--i) * 4.2%);background:var(--gold);animation:2.5s ease-in forwards confetti-fall;animation-delay:calc(var(--i) * 80ms);border-radius:1px;position:absolute}.confetti-piece:nth-child(odd){background:var(--green-mid);width:6px;height:10px}@keyframes confetti-fall{0%{opacity:1;transform:translateY(0)rotate(0)}to{opacity:0;transform:translateY(180px)rotate(720deg)}}@keyframes pop-in{0%{opacity:0;transform:scale(.8)}60%{transform:scale(1.05)}to{opacity:1;transform:scale(1)}}@media (width<=960px){.dashboard{grid-template-columns:1fr}.election-stage{position:static}.round-charts{grid-template-columns:1fr}.header-title-row{grid-template-columns:1fr;justify-items:center}.header-title-row .header-title{grid-column:1}.header-upload{grid-column:1;justify-self:center}.action-bar{flex-direction:column;align-items:stretch}.controls--inline{justify-content:center}}@media (width<=600px){.app{padding:1.25rem 1rem 2rem}.header-title{font-size:1.75rem}}
