:root{
  --state-red:#c9213c;
  --state-blue:#155b8b;
  --state-teal:#007d7a;
  --state-amber:#b76a16;
  --state-line:#cbd9e2;
  --state-soft:#e8f1f5;
  --state-muted:#506879;
}

.state-main{min-height:70vh}
.state-main>h1{max-width:920px}
.state-main>.lead{max-width:900px}
.state-main .section{scroll-margin-top:18px}
.section-heading-row{display:flex;align-items:end;justify-content:space-between;gap:1rem;flex-wrap:wrap;margin:0 0 .45rem}
.section-heading-row h2{margin:.15rem 0 0}
.section-link{font-weight:750;font-size:.9rem}
.section-intro{max-width:830px;color:var(--state-muted);margin:.35rem 0 1rem}
.eyebrow{display:block;font-size:.72rem;font-weight:800;letter-spacing:.08em;color:#467789;text-transform:uppercase}
.update-stamp{border-top:1px solid var(--state-line);color:var(--state-muted);font-size:.84rem;margin-top:2rem;padding-top:1rem}
.anchor-target{scroll-margin-top:20px}
.utility-facts{display:flex;flex-wrap:wrap;gap:.35rem 1rem}
.utility-facts span+span{border-left:1px solid #9eb2bf;padding-left:1rem}
.footer-inline-links{display:flex;flex-wrap:wrap;gap:.35rem 1rem}

/* Alabama home: a working race browser, not a marketing hero. */
.race-browser{border-top:4px solid var(--state-blue)}
.race-index{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:.65rem;margin-top:1rem}
.race-index-card{display:grid;grid-template-columns:minmax(160px,.8fr) minmax(0,1.2fr) auto;align-items:center;gap:.75rem;background:#f7fafc;border:1px solid #d7e2e8;border-radius:.45rem;color:#17364d;padding:.8rem .9rem;text-decoration:none}
.race-index-card:hover{background:#edf6f8;border-color:#8eb5c4}
.race-office{font-weight:800;line-height:1.25}
.race-names{display:flex;gap:.25rem 1rem;flex-wrap:wrap;color:#38576a;font-size:.88rem}
.race-names span{display:inline-flex;align-items:center;gap:.35rem}
.party-dot{display:inline-block;width:.55rem;height:.55rem;border-radius:50%;background:#748797;flex:none}
.party-dot.democratic{background:#2872b8}.party-dot.republican{background:#bf4554}
.race-open{font-size:.82rem;font-weight:750;color:#075b81;white-space:nowrap}
.action-grid{grid-template-columns:repeat(3,minmax(0,1fr))}
.action-grid .card{border-top:3px solid var(--state-teal)}
.vote-start{display:flex;align-items:center;justify-content:space-between;gap:1.5rem;border-left:4px solid var(--state-red)}
.vote-start>div:first-child{max-width:650px}.vote-start h2{font-size:1.65rem}

/* Candidate roster. */
.race-list{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:.85rem}
.ballot-race{padding:1rem 1.1rem;scroll-margin-top:18px}
.race-card-heading{display:flex;align-items:start;justify-content:space-between;gap:.75rem;border-bottom:1px solid #dce6eb;padding-bottom:.72rem;margin-bottom:.35rem}
.race-card-heading h2{margin:.18rem 0 0;line-height:1.22}
.race-card-heading>a{font-size:.84rem;font-weight:750;text-align:right}
.candidate-slate{display:grid;gap:0}
.candidate-row{display:grid;grid-template-columns:minmax(0,1fr) auto;align-items:center;gap:.75rem;padding:.85rem 0;border-top:1px solid #e1e9ed}
.candidate-row:first-child{border-top:0}
.candidate-row h3{font-size:1.09rem;margin:.25rem 0 0}
.candidate-finance-link{font-size:.84rem;font-weight:750;text-align:right}
.warning-link{color:#8a4d08}
.party{display:inline-block;border-radius:999px;padding:.18rem .52rem;font-size:.69rem;font-weight:820;line-height:1.2;white-space:nowrap;letter-spacing:.02em}
.party.democratic{background:#e2effb;color:#174f84}.party.republican{background:#f9e7ea;color:#8d2634}.party.other{background:#e8eef2;color:#40586a}
.write-in-card{border-left:4px solid var(--state-amber)}
.write-in-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:.7rem;margin:1rem 0}
.write-in-grid article{background:#f8fbfc;border:1px solid #d8e3e9;border-radius:.4rem;padding:.75rem .85rem}
.write-in-grid h3{margin:0 0 .35rem}.write-in-grid ul{margin:0;padding-left:1.2rem}.write-in-grid li{margin:.25rem 0}

/* Reusable official-source links. */
.source-link-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:.65rem;margin-top:.9rem}
.source-link-grid>a{display:block;border:1px solid #d8e3e9;border-radius:.4rem;padding:.75rem .8rem;text-decoration:none;background:#f8fbfc}
.source-link-grid>a:hover{border-color:#90b4c2;background:#f0f7f9}
.source-link-grid strong{display:block;color:#075b81}
.source-link-grid span{display:block;color:var(--state-muted);font-size:.82rem;line-height:1.4;margin-top:.2rem}
.stacked-links{display:grid;gap:.05rem;margin-top:.65rem}
.stacked-links a{padding:.5rem .1rem;border-top:1px solid #e1e9ed;font-weight:720}
.stacked-links a:first-child{border-top:0}
.source-category-grid{grid-template-columns:repeat(3,minmax(0,1fr))}

/* Race-first campaign-finance comparison. */
.finance-key{display:flex;flex-wrap:wrap;gap:.5rem 1.2rem;margin:1rem 0 1.4rem;color:#38576a;font-size:.86rem}
.finance-key span{display:inline-flex;align-items:center;gap:.42rem}
.finance-key i{display:inline-block;width:.9rem;height:.9rem;border-radius:2px}
.money-in{background:#126c73}.money-out{background:#b65d39}.unknown-key{background:#fff;border:2px dashed var(--state-amber)}
.finance-race-list>.finance-race{margin-top:.85rem}
.finance-race{padding:1.1rem 1.2rem;border-top:4px solid var(--state-blue);scroll-margin-top:18px}
.finance-race.federal-race{border-top-color:#6659a6}
.source-system{background:#e7f0f4;border-radius:999px;color:#31556a;font-size:.75rem;font-weight:780;padding:.25rem .55rem;white-space:nowrap}
.race-explainer{font-size:.86rem;color:var(--state-muted);max-width:780px;margin:.45rem 0 1rem}
.finance-pair{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:.75rem}
.finance-candidate{background:#f8fbfc;border:1px solid #d7e2e8;border-radius:.5rem;padding:1rem;min-width:0}
.candidate-head{display:flex;align-items:start;justify-content:space-between;gap:.75rem;flex-wrap:wrap}
.candidate-head h3{font-size:1.2rem;margin:.28rem 0 0}
.candidate-head>a{font-size:.82rem;font-weight:750}
.headline-money{margin:.9rem 0 .3rem}
.headline-money strong{display:block;font-size:1.55rem;line-height:1.12;font-variant-numeric:tabular-nums;color:#17364d}
.headline-money span{display:block;color:var(--state-muted);font-size:.82rem;margin-top:.18rem}
.finance-track{display:flex;height:.76rem;width:100%;overflow:hidden;background:#e1ebef;border-radius:2px;margin:.35rem 0 .18rem}
.finance-track>span{display:block;height:100%;flex:none}
.finance-window{font-size:.81rem;color:var(--state-muted)}
.finance-two-ledgers{display:grid;grid-template-columns:4.3rem 1fr;gap:.26rem .65rem;align-items:center;margin:.8rem 0}
.finance-two-ledgers .ledger-label{font-size:.8rem;color:#354f62;font-weight:720}
.finance-two-ledgers .finance-track{margin:0}
.finance-two-ledgers .ledger-value{grid-column:2;font-size:.8rem;color:#405b70;font-variant-numeric:tabular-nums}
.ending-balance{display:flex;align-items:baseline;justify-content:space-between;gap:.75rem;background:#eaf2f5;border-radius:.35rem;padding:.58rem .65rem;margin:.7rem 0}
.ending-balance span{font-size:.79rem;color:#3c596b}.ending-balance strong{font-variant-numeric:tabular-nums}
.candidate-warning{background:#fff4e6;border-left:3px solid var(--state-amber);color:#6f4517;font-size:.84rem;line-height:1.45;padding:.65rem .7rem;margin:.75rem 0}
.finance-deep-dive{margin-top:.8rem;border-top:1px solid #d6e2e8;padding-top:.72rem}
.finance-deep-dive summary{font-size:.88rem}
.finance-deep-dive p{font-size:.84rem;color:#456074}
.finance-metric-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:.45rem;margin:.65rem 0}
.finance-metric-grid div{padding:.55rem .6rem;background:#eaf2f5;border:1px solid #d5e2e7;border-radius:.3rem}
.finance-metric-grid b{display:block;font-size:.94rem;font-variant-numeric:tabular-nums}
.finance-metric-grid span{display:block;color:#3b5768;font-size:.77rem;line-height:1.35;margin-top:.12rem}
.finance-unknown{border:2px dashed #d49a54;background:#fffaf2}
.unknown-total{border-left:4px solid var(--state-amber);padding:.5rem .7rem;margin:.85rem 0;background:#fff3df}
.unknown-total strong,.unknown-total span{display:block}.unknown-total span{font-size:.82rem;color:#6b4b27;margin-top:.12rem}
.period-snapshot{display:grid;gap:.14rem;background:#fff;border:1px solid #ead2ac;border-radius:.35rem;padding:.7rem .75rem;margin:.7rem 0}
.period-snapshot span,.period-snapshot small{color:#66513a}.period-snapshot a{font-size:.82rem;font-weight:750;margin-top:.25rem}
.identity-note{border-top:1px solid #ead2ac;margin-top:.75rem;padding-top:.7rem}
.identity-note strong{font-size:.84rem}.identity-note p{color:#66513a;font-size:.84rem;margin:.2rem 0 .35rem}.identity-note a{font-size:.82rem;font-weight:750}
.full-source-table{background:#fff;border:1px solid var(--state-line);border-radius:.55rem;padding:.9rem 1rem}
.full-source-table>summary{font-size:1rem}
.full-source-table>p{font-size:.86rem;color:var(--state-muted)}

/* Audit tables remain available, but never lead the experience. */
.table-scroll{overflow-x:auto;margin:1rem 0;border:1px solid var(--state-line);border-radius:.45rem;background:#fff}
.table-scroll:focus-visible{outline:3px solid #eea65a;outline-offset:3px}
.data-table{width:100%;border-collapse:collapse;font-size:.83rem;line-height:1.4}
.data-table caption{text-align:left;padding:.75rem .8rem;background:#e7f0f4;font-weight:780;color:#17364d}
.data-table th{background:#17364d;color:#fff;text-align:left;font-size:.72rem;letter-spacing:.02em;vertical-align:bottom}
.data-table th,.data-table td{padding:.65rem .7rem;border-bottom:1px solid #dce6eb;vertical-align:top}
.data-table tbody th[scope="row"]{background:#fff;color:#17364d;font-size:.83rem;letter-spacing:0;font-weight:720}
.data-table td.money,.data-table th.money{text-align:right;white-space:nowrap;font-variant-numeric:tabular-nums}
.finance-name{display:block;font-size:.73rem;color:var(--state-muted);font-weight:500;margin-top:.2rem;max-width:460px}
.row-warning{background:#fff4e6;border-left:3px solid var(--state-amber);color:#70440d;padding:.4rem .48rem;margin-top:.45rem}
.match{color:#146b4a;font-weight:730}.unmatched{color:#91550a;font-weight:730}.federal{color:#445a70;font-weight:730}

/* Voting, sources, methodology and scope. */
.election-stats .statcard:nth-child(3){border-top-color:var(--state-red)}
.timeline-card{border-top:4px solid var(--state-blue)}
.timeline{list-style:none;padding:0;margin:1.2rem 0 .2rem;max-width:850px;border-left:3px solid var(--state-blue)}
.timeline li{position:relative;padding:0 0 1.45rem 1.55rem}
.timeline li::before{content:"";position:absolute;left:-.52rem;top:.28rem;width:.78rem;height:.78rem;background:#fff;border:3px solid var(--state-blue);border-radius:50%}
.timeline li:last-child{padding-bottom:0}
.timeline time{font-size:.76rem;font-weight:820;color:#a3263a;letter-spacing:.045em;text-transform:uppercase}
.timeline h3{margin:.15rem 0 .2rem;font-size:1.04rem}.timeline p{margin:0;color:var(--state-muted);font-size:.88rem}
.measure-card{grid-column:1/-1}
.measure-list{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:.55rem;list-style:none;padding:0;margin:1rem 0}
.measure-list li{display:grid;grid-template-columns:auto minmax(0,1fr);gap:.55rem;background:#f8fbfc;border:1px solid #d8e3e9;border-radius:.4rem;padding:.65rem .75rem}
.measure-list strong{color:#17364d}.measure-list span{color:var(--state-muted);font-size:.88rem;line-height:1.45}
.method-card{border-top:4px solid var(--state-teal)}
.method-steps{padding-left:1.6rem;margin:1rem 0 .2rem;max-width:900px}
.method-steps li{padding:.75rem 0 .75rem .35rem;border-top:1px solid #dce6eb}
.method-steps li::marker{color:#17364d;font-size:1rem;font-weight:850}
.method-steps strong,.method-steps span{display:block}.method-steps span{color:var(--state-muted);font-size:.86rem;margin-top:.12rem}
.coverage-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:.85rem}
.coverage-card{background:#fff;border:1px solid var(--state-line);border-radius:.6rem;padding:1.1rem 1.2rem}
.coverage-card.included{border-top:5px solid #187455}.coverage-card.missing{border-top:5px solid var(--state-amber)}
.coverage-card li{margin:.45rem 0;color:#3d5668}
.coverage-limits{list-style:none;padding:0;margin:.85rem 0}
.coverage-limits li{border-top:1px solid #dce6eb;padding:.65rem 0}
.coverage-limits li:first-child{border-top:0;padding-top:0}
.coverage-limits strong,.coverage-limits span{display:block}
.coverage-limits span{color:var(--state-muted);font-size:.86rem;line-height:1.5;margin-top:.15rem}
.version-row{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:.6rem;margin:.9rem 0}
.version-row div{background:#eaf2f5;border-radius:.35rem;padding:.65rem}.version-row span,.version-row strong{display:block}.version-row span{font-size:.76rem;color:var(--state-muted)}.version-row strong{margin-top:.16rem}

@media(max-width:900px){
  .race-index,.race-list,.finance-pair,.coverage-grid{grid-template-columns:1fr}
  .action-grid,.source-category-grid{grid-template-columns:1fr}
  .race-index-card{grid-template-columns:minmax(150px,.75fr) minmax(0,1.25fr) auto}
}
@media(max-width:650px){
  .utility-facts{display:grid;gap:.2rem}.utility-facts span+span{border-left:0;padding-left:0}
  .race-index-card{grid-template-columns:1fr}.race-open{white-space:normal}
  .candidate-row{grid-template-columns:1fr}.candidate-finance-link{text-align:left}
  .vote-start{display:block}.vote-start .quicklinks{margin-top:1rem}
  .source-link-grid,.version-row,.write-in-grid,.measure-list{grid-template-columns:1fr}
  .race-card-heading{display:block}.race-card-heading>a{display:inline-block;text-align:left;margin-top:.45rem}
  .finance-candidate{padding:.85rem}.finance-race{padding:.9rem}
  .headline-money strong{font-size:1.35rem}
}

@media print{
  .mast,.utility,.w4-footer,.quicklinks,.coverage-notice{display:none!important}
  body{background:#fff}.main{padding:0}.card,.finance-candidate{box-shadow:none;break-inside:avoid}
  a{color:#000;text-decoration:none}.full-source-table{display:none}
}
