/* ============================================================
   The generated /c/ and /s/ pages (scripts/build-share-pages.js)
   ============================================================
   Loaded only by the pages build-share-pages.js writes, after css/style.css,
   each stamped with its own ?v= content hash (candidate-pages-2026-09-24,
   PLAN.v2 P4.2 and P4.6, D-11). Tokens come from style.css :root.

   The first block is page()'s old inline <style>, moved here as it was, so
   the /s/ pages look as they did. Everything after it is the /c/ template
   (design/DESIGN-PROPOSAL.md §2 and its mockups), the shared nav and footer
   as these pages carry them, and the accessibility baseline (D-13). */

/* ── page()'s inline rules, moved (CP-10) ── */
.sharewrap{max-width:760px;margin:0 auto;padding:48px 20px 80px}
.sharewrap h1{margin-bottom:4px}
.share-sub{font-family:var(--font-mono);font-size:.85rem;color:var(--mid-gray);margin-bottom:28px}
.share-body p{margin-bottom:14px;line-height:1.65}
.share-cta{display:inline-block;margin-top:26px;padding:12px 22px;border:1px solid var(--yellow);color:var(--yellow);text-decoration:none;font-family:var(--font-mono);font-size:.85rem;letter-spacing:1px;text-transform:uppercase}
.share-note{margin-top:34px;font-size:.8rem;color:var(--mid-gray)}
.share-row{display:flex;flex-wrap:wrap;gap:8px;align-items:center;margin:-16px 0 26px}
.share-row-label{font-family:var(--font-mono);font-size:.72rem;letter-spacing:1px;text-transform:uppercase;color:var(--mid-gray)}
.share-btn{display:inline-flex;align-items:center;font-family:var(--font-body);font-size:12px;line-height:1.2;padding:6px 10px;border-radius:4px;border:1px solid #3f3f3f;background:rgba(255,255,255,0.03);color:#eaeaea;text-decoration:none;cursor:pointer}
.share-btn:hover{background:rgba(255,255,255,0.07);border-color:#6a6a6a;color:#fff}
.share-btn:focus-visible{outline:2px solid var(--yellow);outline-offset:2px}
/* display:inline-flex would otherwise beat the user agent's [hidden] rule,
   and the two buttons ship hidden until their script has run. */
.share-btn[hidden]{display:none}

/* Anything shipped hidden stays hidden, whatever display a class gives it:
   the footer's sign-up (no handler on these pages yet, R-013), the ask's
   follow-up and its copy button, and the share row's two buttons. */
[hidden]{display:none!important}

/* 44px targets on every share button (D-5). */
.share-btn{min-height:44px;padding:0 14px;font-size:.85rem}

/* ── The /s/ roster (T-SHARE-ANSWER B, RULINGS-2026-09-25 §55 item 1) ──
   Each listed name leads with its mark and word and carries its lead line
   below, in a row inset from the edge: no bullets hanging at 375, and room
   under each race heading. The "Also on the ballot" line is unchanged. */
.share-body>h2{margin:34px 0 12px;font-size:1.3rem;letter-spacing:.3px;line-height:1.25}
.st-roster{list-style:none;margin:0 0 14px;padding:0;display:grid;gap:8px}
.st-roster>li{padding:10px 12px;border:1px solid #2e2e2e;border-radius:6px;background:#151515;line-height:1.45;color:#cfcfcf}
.st-roster a{color:var(--white);font-weight:600;text-decoration:underline;text-underline-offset:3px}
.st-mk{display:inline-flex;align-items:center;gap:6px;margin-right:6px;white-space:nowrap;vertical-align:middle}
.st-mark{flex:none;display:inline-flex;align-items:center;justify-content:center;width:26px;height:26px;border-radius:50%;font:700 14px/1 var(--font-body)}
.st-mark.fyv-mark-neg{background:var(--red);color:#fff}
.st-mark.fyv-mark-unsure{background:var(--yellow);color:#111}
.st-mark.fyv-mark-pos{background:var(--green);color:#0B2A17}
.st-mark.fyv-mark-undetermined{background:rgba(255,255,255,.05);color:#cfcfcf;border:1px solid rgba(255,255,255,.14);box-sizing:border-box}
.st-lead{display:block;margin-top:4px;font-size:.88rem;line-height:1.45;color:#cfcfcf}
.st-lead em{font-style:italic}
.share-also{font-size:.92rem;color:#cfcfcf}

/* ── The all-✗ race box (T-OPPONENTS, RULINGS-2026-09-25 §56) ──
   Under a race's list on /s/, and in the race block of a /c/ page, where
   every candidate on the ballot is ✗: the heading, the state's write-in rule,
   and any declared write-ins with their marks. The notice style of the
   no-public-position callout (the yellow rule and tint). Two classes deep, so
   .share-body p's margins do not reach it. */
.fyv-allneg{margin:4px 0 18px;padding:12px 14px;border-left:3px solid var(--yellow);background:rgba(255,197,0,.06)}
.fyv-allneg .fyv-allneg-head{margin:0 0 6px;font-weight:600;line-height:1.5;color:var(--white)}
.fyv-allneg .fyv-allneg-rule,.fyv-allneg .fyv-allneg-wi{margin:0 0 6px;font-size:.92rem;line-height:1.6;color:#cfcfcf}
.fyv-allneg .fyv-allneg-wi{line-height:2}
.fyv-allneg p:last-child{margin-bottom:0}
.fyv-allneg a{color:var(--white);text-decoration:underline;text-underline-offset:3px;overflow-wrap:anywhere}
.fyv-allneg .st-mk{margin-right:4px}
.cp-race .fyv-allneg{margin:0 0 14px}

/* ── The shared nav, in the flow ──
   style.css fixes it to the top and relies on main.js to slide it away on
   scroll. These pages load no script file, so it sits in the flow instead of
   covering 60px of a phone screen for good. */
.nav{position:relative}

/* ── Skip link, context line, breadcrumb ── */
.skip-link{position:absolute;left:-9999px;top:0}
.skip-link:focus{left:12px;top:12px;z-index:1100;display:inline-flex;align-items:center;min-height:44px;padding:0 14px;border-radius:4px;background:var(--yellow);color:#111;font-weight:600}
.cp-context{padding:10px 0 0;color:#cfcfcf;font-size:.82rem;line-height:1.5}
.cp-context a{color:var(--white);text-decoration:underline;text-underline-offset:3px}
.cp-crumbs ol{list-style:none;display:flex;flex-wrap:wrap;align-items:center;gap:6px;font-family:var(--font-mono);font-size:.74rem;color:#9a9a9a}
.cp-crumbs li+li::before{content:"/";margin-right:6px;color:#666}
.cp-crumbs a{display:inline-flex;align-items:center;min-height:44px;color:#cfcfcf}
.sharewrap>.cp-context+h1,.sharewrap>.cp-context+*{margin-top:8px}

/* ── The /c/ page ── */
.sharewrap:has(>.cp-summary){max-width:1120px;padding:0 16px 64px}
.sharewrap:has(>.cp-summary) h1{font-size:clamp(2.2rem,10vw,3.6rem);line-height:.98;margin:8px 0 8px}
.sharewrap:has(>.cp-summary) .share-sub{margin-bottom:14px;color:#c4c4c4}

/* The summary: the collapsed card, as a page (D-3). */
.cp-summary{background:var(--charcoal);border:1px solid rgba(255,255,255,.09);border-radius:6px;padding:16px}
.cp-verdict{display:flex;align-items:center;gap:12px;padding:12px;border:1px solid rgba(255,255,255,.16);border-radius:6px;color:#fff;text-decoration:none;min-height:44px}
a.cp-verdict:hover{opacity:1;filter:brightness(1.12)}
a.cp-verdict::after{content:"\203A";margin-left:auto;font-size:1.4rem;line-height:1;color:#cfcfcf}
.cp-verdict.is-neg{background:rgba(255,65,54,.1);border-color:rgba(255,65,54,.45)}
.cp-verdict.is-pos{background:rgba(46,204,113,.1);border-color:rgba(46,204,113,.45)}
.cp-verdict.is-unsure{background:rgba(255,255,255,.04);border-color:rgba(255,197,0,.45)}
/* Undetermined (stance-marks, PLAN.v3 §4.3): neutral, no side's colour. */
.cp-verdict.is-undetermined{background:rgba(255,255,255,.04);border-color:rgba(255,255,255,.22)}
.cp-mark{flex:none;display:inline-flex;align-items:center;justify-content:center;width:40px;height:40px;border-radius:50%;font:700 22px/1 var(--font-body)}
.cp-mark.fyv-mark-neg{background:var(--red);color:#fff}
.cp-mark.fyv-mark-unsure{background:var(--yellow);color:#111}
.cp-mark.fyv-mark-pos{background:var(--green);color:#0B2A17}
.cp-mark.fyv-mark-undetermined{background:rgba(255,255,255,.05);color:#cfcfcf;border:1px solid rgba(255,255,255,.14);box-sizing:border-box}
.cp-verdict-text{font-size:1.08rem;font-weight:600;line-height:1.35}
/* The mark's word (T-SHARE-ANSWER A, RULINGS-2026-09-25 §55 item 2), the
   card's fyvMarkWordHtml: in the mark's colour, smaller than the text beside
   it, never wrapped away from its glyph. Shared by /c/, /s/ and /ratings/. */
.fyv-mark-word{font-family:var(--font-body);font-weight:700;font-size:.85rem;line-height:1.2;letter-spacing:0;text-transform:none;white-space:nowrap}
.fyv-mark-word-neg{color:var(--red)}
.fyv-mark-word-unsure{color:var(--yellow)}
.fyv-mark-word-pos{color:var(--green)}
.fyv-mark-word-undetermined{color:#cfcfcf}
/* In the verdict box the word sits over the box's words, beside the glyph;
   with no words of the box's own it sits level with the glyph. */
.cp-verdict:has(>.cp-mark){display:grid;grid-template-columns:auto minmax(0,1fr) auto;column-gap:12px;row-gap:2px;align-items:center}
.cp-verdict>.cp-mark{grid-row:1/span 2}
.cp-verdict>.fyv-mark-word{grid-column:2;grid-row:1;align-self:end;font-size:.92rem}
.cp-verdict>.fyv-mark-word:last-child{grid-row:1/span 2;align-self:center}
.cp-verdict>.fyv-mark-word+.cp-verdict-text{grid-column:2;grid-row:2;align-self:start}
a.cp-verdict:has(>.cp-mark)::after{grid-column:3;grid-row:1/span 2}
.cp-hl{list-style:none;margin:10px 0 0;display:grid;gap:8px}
.cp-verdict+.cp-hl{margin-top:8px}
.cp-summary>.cp-hl:first-child{margin-top:0}
.cp-hl a,.cp-hl .cp-hl-row{display:flex;align-items:center;gap:12px;min-height:44px;padding:10px 12px;border:1px solid;border-radius:6px;font-size:.9rem;line-height:1.45;text-decoration:none}
.cp-hl a:hover{opacity:1;filter:brightness(1.15)}
.cp-hl a::after{content:"\203A";margin-left:auto;font-size:1.3rem;line-height:1;opacity:.8;flex:none}
.cp-hl .k-money>*{background:rgba(255,197,0,.07);border-color:rgba(255,197,0,.38);color:#ffdd75}
.cp-hl .k-money strong{color:var(--yellow);font-size:1.18rem;font-weight:700}
.cp-hl .k-against>*{border-style:dashed}
.cp-hl .k-neg>*{background:rgba(255,65,54,.09);border-color:rgba(255,65,54,.38);color:#ffa39d}
.cp-hl .k-pos>*{background:rgba(46,204,113,.1);border-color:rgba(46,204,113,.38);color:#9BE8BC}
.cp-hl .k-cmte>*,.cp-hl .k-note>*{background:rgba(255,255,255,.04);border-color:rgba(255,255,255,.16);color:#d8d8d8}
.cp-lead p{font-size:1.04rem;line-height:1.62;color:#ededed;margin:14px 0 0}
.cp-summary>.cp-lead:first-child p{margin-top:0}
.cp-lead .fyv-stance-empty strong{color:var(--yellow)}
.cp-lead .fyv-stance-pending{color:#c8c8c8}
.cp-lead .fyv-stance-pending strong{color:#fff}
.cp-more{margin:12px 0 0}
.cp-more>summary{display:inline-flex;align-items:center;gap:6px;min-height:44px;cursor:pointer;color:#cfcfcf;font-family:var(--font-mono);font-size:.76rem;letter-spacing:.04em;text-transform:uppercase}
.cp-more>summary::after{content:"\25BE"}
.cp-more[open]>summary::after{content:"\25B4"}
.cp-more>div{padding:4px 0 6px;color:#dcdcdc;font-size:.93rem}
.fyv-checked-what{font-size:.9rem;line-height:1.6;color:#b9b9b9}

/* The ask, with the card's own route (D-4). */
.cp-ask{margin:16px 0 0}
.cp-actions{display:flex;flex-wrap:wrap;gap:8px}
.cp-btn{display:inline-flex;align-items:center;justify-content:center;gap:6px;min-height:44px;padding:0 16px;border:1px solid #4a4a4a;border-radius:6px;background:rgba(255,255,255,.03);color:#eee;font:500 .92rem/1.2 var(--font-body);text-decoration:none;cursor:pointer}
.cp-btn:hover{opacity:1;border-color:#888;color:#fff}
.cp-btn-primary{flex:1 1 100%;background:var(--yellow);border-color:var(--yellow);color:#111;font-weight:700;font-size:1rem}
.cp-btn-primary:hover{background:#ffd23f;border-color:#ffd23f;color:#111}
.cp-copy{flex:1 1 100%}
.cp-copy>summary{list-style:none;width:100%}
.cp-copy>summary::-webkit-details-marker,.cp-more>summary::-webkit-details-marker{display:none}
.cp-copy-panel{margin-top:10px;padding:12px;border:1px solid #3a3a3a;border-radius:6px;background:#141414;font-size:.88rem;line-height:1.55;color:#cfcfcf}
.cp-copy-panel textarea{display:block;width:100%;min-height:200px;margin:10px 0;padding:8px;font:13px/1.5 var(--font-body);background:#0d0d0d;color:#eee;border:1px solid #3a3a3a;border-radius:4px}
.cp-asked{margin-top:10px;padding:10px 12px;background:rgba(255,197,0,.05);border-left:2px solid rgba(255,197,0,.45)}
.cp-asked p{margin:0 0 8px;font-size:.9rem}
/* The note to the sender, outside the message (T-FIX-1003, RULINGS-2026-09-24 R2). */
.cp-ask-note{margin:8px 0 0;font-size:.84rem;line-height:1.5;color:#a8a8a8}
@media (min-width:600px){.cp-btn-primary{flex:0 1 auto}.cp-copy{flex:0 1 auto}.cp-copy[open]{flex:1 1 100%}.cp-copy>summary{width:auto}}

/* The share row follows the actions, behind a hairline rule (D-5). */
.cp-ask+.share-row,.cp-summary+.share-row{margin:18px 0 0;padding-top:14px;border-top:1px solid rgba(255,255,255,.09)}
/* T-QUICKWINS #10 (fresh-eyes review 2026-10-03 quick win 10): that row has no
   bottom margin, so the send-5 panel's -12px top margin (css/style.css, sized
   for the /s/ row's 26px) pulled it up over the row's last line of buttons
   (WhatsApp, on desktop). Here it sits one row gap below. /s/ is unchanged. */
.cp-ask+.share-row+.share-send5-panel,.cp-summary+.share-row+.share-send5-panel{margin-top:8px}
/* T-QUICKWINS (orchestrator's item, 2026-10-05): a bare URL or another long
   unbroken token in the depth sections (the Research log's source lines) ran
   past a 375px screen and the page scrolled sideways (/c/ga-sen-ossoff/,
   /c/ca-gov-becerra/). break-word breaks such a token only where it would
   overflow; unlike `anywhere` it leaves min-content sizes, and so every
   flex row and button, as they were. */
.share-body{overflow-wrap:break-word}

/* "On this page" (D-6). */
.cp-toc{margin:24px 0 0}
.cp-toc-label{margin:0 0 6px;font-family:var(--font-mono);font-size:.72rem;letter-spacing:1px;text-transform:uppercase;color:#9a9a9a}
.cp-toc ul{list-style:none;display:flex;flex-wrap:nowrap;gap:8px;margin:0 -16px;padding:0 16px 4px;overflow-x:auto;scrollbar-width:none}
.cp-toc ul::-webkit-scrollbar{display:none}
.cp-toc li{flex:none}
.cp-toc a{display:inline-flex;align-items:center;min-height:44px;padding:0 14px;border:1px solid #3a3a3a;border-radius:999px;color:#cfcfcf;font-size:.86rem;text-decoration:none}
.cp-toc a:hover{opacity:1;border-color:#777;color:#fff}

/* The depth: the card's foldouts, open (D-6). */
.cp-sec{margin-top:48px;scroll-margin-top:12px}
.cp-sec>h2{font-size:1.55rem;letter-spacing:.3px;margin:0 0 8px}
.cp-sec-sum,.cp-research-lead{color:#cfcfcf;font-size:.96rem;line-height:1.55;margin:0 0 12px}
.cp-sec h3{font-size:1.1rem;letter-spacing:.3px;margin:26px 0 8px}
.cp-sec ul{padding-left:20px;margin:0 0 14px}
.cp-sec li{margin:0 0 10px;line-height:1.6;font-size:.95rem}
.cp-sec p{overflow-wrap:anywhere}
.fyv-detail-label{margin:20px 0 6px;font-family:var(--font-mono);font-size:.72rem;letter-spacing:1px;text-transform:uppercase;color:#9a9a9a}
.cp-sec>h2+.fyv-detail-label,.cp-sec-sum+.fyv-detail-label{margin-top:8px}
.fyv-committees{font-size:0.82rem;color:var(--light-gray);margin-bottom:4px}
.fyv-vote-row{padding:12px 0 4px;border-bottom:1px solid rgba(255,255,255,.07)}
.fyv-vote-main{display:flex;justify-content:space-between;gap:12px;align-items:baseline}
.fyv-vote-bill{min-width:0}
.fyv-vote-title{display:block;font-size:.92rem;font-weight:500;line-height:1.45}
.fyv-vote-date{display:block;margin-top:2px;font-family:var(--font-mono);font-size:.72rem;color:#9a9a9a}
.fyv-vote-value{flex:none;font-weight:700;font-size:.9rem;white-space:nowrap}
.fyv-vote-meaning{margin-top:4px;font-size:.84rem;font-style:italic}
.fyv-vote-meaning.is-support{color:#ff8a80}
.fyv-vote-meaning.is-oppose{color:#9BE8BC}
.fyv-dir-note{display:block;font-size:.72rem;font-weight:400;color:#9a9a9a;text-align:right;white-space:normal}
.fyv-vote-value:has(.fyv-dir-note){flex:0 1 42%;text-align:right;white-space:normal}
.fyv-badge-unverified{display:inline-block;margin-left:6px;padding:1px 6px;border:1px solid rgba(255,197,0,.35);border-radius:3px;background:rgba(255,197,0,.12);color:var(--yellow);font-size:.68rem}
.fyv-money-block{padding:10px 14px;border-left:3px solid rgba(255,197,0,.5);background:rgba(255,197,0,.05);font-size:.95rem;line-height:1.6;color:#e8e8e8}
.fyv-money-block .text-muted{color:#9a9a9a!important;font-size:.8rem!important}
.cp-pop{padding:2px 0 10px;font-size:.88rem;line-height:1.55;color:#dcdcdc}
.fyv-pop-row{display:block;margin-top:8px;font-weight:600;color:#f2f2f2}
.fyv-pop-amt{margin-left:6px;color:#ffdd75}
.fyv-pop-blurb{display:block;margin-top:2px;font-weight:400;color:#cfcfcf}
.fyv-pop-note{display:block;margin-top:8px;color:#9a9a9a;font-size:.84rem}
.fyv-pop-src a{font-size:.8rem}
.fyv-notable{font-size:.92rem;line-height:1.6;color:var(--light-gray);margin-bottom:6px}
.fyv-quote{border-left:3px solid rgba(255,255,255,.28);padding:2px 0 2px 16px;margin:0 0 18px;font-size:1rem;line-height:1.6;color:#f0f0f0}
.fyv-quote-source{margin-top:6px;font-family:var(--font-mono);font-size:.74rem;color:#9a9a9a}
.fyv-quote-source a{display:inline-flex;align-items:center;min-height:44px;color:#b9b9b9}
.fyv-stance-rest,.fyv-profile-rest{line-height:1.7;color:#eaeaea}

/* The race, then onward (D-7). */
.cp-race{margin-top:52px;padding:18px 16px;border:1px solid rgba(255,255,255,.09);border-radius:6px;background:#151515}
.cp-race h2{font-size:1.3rem;letter-spacing:.3px;margin:0 0 12px}
.cp-race-list{list-style:none;display:grid;gap:8px;margin:0 0 12px}
.cp-race-list li{display:flex;flex-wrap:wrap;align-items:center;gap:4px 8px;min-height:48px;padding:8px 12px;border:1px solid #333;border-radius:6px;font-family:var(--font-mono);font-size:.74rem;color:#9a9a9a}
.cp-race-list a{display:inline-flex;align-items:center;min-height:32px;color:var(--white);font:500 1rem/1.3 var(--font-body)}
.cp-statelink{margin:0 0 10px;font-size:.92rem;color:#cfcfcf}
.cp-statelink a{display:inline-flex;align-items:center;min-height:44px;color:var(--white);text-decoration:underline;text-underline-offset:3px}
.cp-race .share-cta{display:flex;align-items:center;justify-content:center;min-height:48px;margin-top:4px;padding:8px 12px;border:2px solid var(--yellow);border-radius:6px;font:600 .95rem/1.25 var(--font-body);letter-spacing:0;text-transform:none;text-align:center}
.cp-race .share-cta:hover{opacity:1;background:rgba(255,197,0,.08)}
.sharewrap>.share-row+.cp-race{margin-top:16px}

/* Departed: the banner leads, in the evidence colour (D-8). */
.departed-note{margin:0 0 14px;padding:14px 16px;border:1px solid rgba(255,197,0,.5);border-left:4px solid var(--yellow);border-radius:6px;background:rgba(255,197,0,.06);font-size:.98rem;line-height:1.6;color:#f0f0f0}
.departed-note strong{display:block;margin-bottom:4px;font-family:var(--font-headline);font-size:1.3rem;letter-spacing:.3px;text-transform:uppercase;color:var(--yellow)}
.departed-note a{display:inline-block;padding:10px 0;font-weight:600;color:var(--yellow);text-decoration:underline;text-underline-offset:3px}

/* ── The footer, scoped to these pages (P4.6) ──
   The first two rules hold the corrections line (the <div> after the follow
   links) at #9A9A9A and its links at underlined #CFCFCF: 7.0:1 and 12.7:1 on
   #0A0A0A. Since site-trust F8, components/footer.html carries the same
   values inline, so here they only restate them. The Sign up button needs no
   rule: style.css's .btn-red reaches 4.5:1 site-wide (site-trust X9). The
   third rule gives the links in the footer's two link lists a 44px tap
   target. */
.footer .footer-social + div{color:#9A9A9A!important}
.footer .footer-social + div a{color:#CFCFCF!important;text-decoration:underline}
.footer .footer-links a{display:inline-flex;align-items:center;min-height:44px}

/* ── Desktop: the race becomes a sticky side rail (D-7) ──
   DOM order is unchanged; the grid places the race beside the page. */
@media (min-width:1024px){
  .sharewrap:has(>.cp-summary){display:grid;grid-template-columns:minmax(0,1fr) 320px;column-gap:48px;align-items:start}
  .sharewrap:has(>.cp-summary)>*{grid-column:1}
  .sharewrap:has(>.cp-summary)>.cp-race{grid-column:2;grid-row:2/span 40;position:sticky;top:24px;margin-top:24px}
  .cp-summary{padding:24px}
  .cp-hl{grid-template-columns:1fr 1fr}
  .cp-hl .k-money{grid-column:1/-1}
  .cp-hl li{display:flex}
  .cp-hl li>*{flex:1}
  .cp-toc ul{flex-wrap:wrap;margin:0;padding:0;overflow:visible}
}

/* ── Reduced motion (D-13) ── */
@media (prefers-reduced-motion:reduce){
  html{scroll-behavior:auto}
  *,*::before,*::after{transition:none!important;animation:none!important}
}

/* ── /ratings/ (national-ratings-2026-10-01, PLAN.v2 §4, §5) ──
   The national ratings page, built by scripts/build-ratings-page.js through
   build-share-pages.js. The headline sentence and the Congress bar lead the
   first screen; the marks are the /c/ page's colours (.cp-mark above), and the
   map's fills are the same tokens. Every link and button is a 44px target. */
.sharewrap:has(>.nr-head){max-width:980px;padding:0 16px 64px}
.nr-head h1{font-size:clamp(2rem,8.5vw,3.4rem);line-height:1;margin:22px 0 10px}
.nr-lead{margin:0;max-width:46em;font-size:1rem;line-height:1.55;color:#d8d8d8}
.nr-sec{margin-top:48px}
.nr-sec>h2{font-size:1.5rem;letter-spacing:.3px;margin:0 0 10px}
.nr-sec-lead{margin:0 0 14px;max-width:46em;font-size:.95rem;line-height:1.55;color:#cfcfcf}
.nr-sec-favorites{margin-top:22px}
.nr-sec-favorites>h2{margin:0 0 6px;font-family:var(--font-mono);font-size:.78rem;font-weight:500;letter-spacing:1px;color:#9a9a9a}
.nr-headline{margin:0 0 18px;font-size:clamp(1.3rem,4.8vw,2.05rem);font-weight:600;line-height:1.3;color:#fff}
.nr-headline .nr-n-neg{color:var(--red)}
.nr-headline .nr-n-pos{color:var(--green)}
/* The odds' source, directly under the headline at every width (T-SMALL4,
   FINAL_REVIEW N-2): it sits in the headline's bottom margin, so the bar does
   not move far. */
.nr-attrib{margin:-12px 0 16px;font-size:.8rem;line-height:1.5;color:#a8a8a8}

/* The bars: ✗, ?, ✓, – left to right; the counts sit in the legend below. */
.nr-bar-block{margin:0 0 18px}
.nr-bar-label{display:flex;align-items:baseline;gap:8px;margin:0 0 6px;font-size:.95rem;color:#e8e8e8}
.nr-bar-label span{font-family:var(--font-mono);font-size:.74rem;color:#9a9a9a}
.nr-bar{display:flex;height:18px;overflow:hidden;border-radius:4px;background:#1c1c1c}
.nr-bar-big .nr-bar{height:44px}
.nr-seg{display:block;height:100%}
.nr-seg+.nr-seg{border-left:2px solid var(--black)}
.nr-seg-neg{background:var(--red)}
.nr-seg-unsure{background:var(--yellow)}
.nr-seg-pos{background:var(--green)}
.nr-seg-undetermined{background:rgba(255,255,255,.14);box-shadow:inset 0 0 0 1px rgba(255,255,255,.35)}
.nr-legend,.nr-map-legend{list-style:none;display:flex;flex-wrap:wrap;gap:4px 16px;margin:8px 0 0;padding:0;font-size:.88rem;line-height:1.5;color:#d8d8d8}
.nr-legend b{color:#fff;font-weight:700}
.nr-key,.nr-swatch{display:inline-flex;align-items:center;justify-content:center;width:20px;height:20px;border-radius:50%;font:700 12px/1 var(--font-body);vertical-align:-4px}
.nr-key-neg,.nr-swatch.nr-f-neg{background:var(--red);color:#fff}
.nr-key-unsure,.nr-swatch.nr-f-unsure{background:var(--yellow);color:#111}
.nr-key-pos,.nr-swatch.nr-f-pos{background:var(--green);color:#0B2A17}
.nr-key-undetermined,.nr-swatch.nr-f-undetermined{background:rgba(255,255,255,.08);color:#cfcfcf;border:1.5px solid #cfcfcf;box-sizing:border-box}
.nr-swatch{border-radius:3px}
.nr-swatch.nr-f-none{background:#2B2B2B}
.nr-swatch.nr-f-undetermined{background:rgba(255,255,255,.24)}
.nr-bars-two{display:grid;gap:0 28px}
@media (min-width:700px){.nr-bars-two{grid-template-columns:1fr 1fr}}
.nr-note{margin:6px 0 0;font-size:.8rem;line-height:1.6;color:#a8a8a8}

/* The Senate map (§5): js/map.js's shapes, filled by where the favorite
   stands; "undetermined" carries a light outline so it never reads as "no
   Senate race". The glyph's colour is the /c/ mark's for its fill. */
.nr-map-legend{margin:0 0 6px}
.nr-caption{margin:0 0 10px;font-size:.84rem;color:#a8a8a8}
.nr-map{display:block;width:100%;height:auto}
.nr-st{stroke:var(--black);stroke-width:.8;stroke-linejoin:round}
.nr-f-neg{fill:var(--red)}
.nr-f-unsure{fill:var(--yellow)}
.nr-f-pos{fill:var(--green)}
/* "Undetermined" is a lighter neutral than "no Senate race" (#4a4a4a against
   #2b2b2b once composited on the page, about 1.6:1), and its outline stays
   1.5px on screen at every width (FINAL_REVIEW M-3). */
.nr-f-undetermined{fill:rgba(255,255,255,.24);stroke:#cfcfcf;stroke-width:1.5px;vector-effect:non-scaling-stroke}
.nr-f-none{fill:#2B2B2B}
.nr-map a:hover .nr-st,.nr-map a:focus-visible .nr-st{stroke:#fff;stroke-width:2.5px}
.nr-map a:focus-visible{outline:none}
.nr-labels text{pointer-events:none}
.nr-gl{font:700 18px/1 var(--font-body)}
.nr-gl-chip{font-size:11px}
.nr-gl-neg{fill:#fff}
.nr-gl-pos{fill:#0B2A17}
.nr-gl-unsure{fill:#111}
.nr-gl-undetermined{fill:#cfcfcf}
.nr-leader{stroke:#777;stroke-width:.8;stroke-dasharray:2,2}
/* At phone width the map is a third of its size: the glyphs grow to about
   14px on screen, and the small states' chips are the larger column that
   mapHtml draws for this width (FINAL_REVIEW M-2). */
.nr-off-sm{display:none}
@media (max-width:480px){
  .nr-gl{font-size:34px}
  .nr-gl-chip{font-size:32px}
  .nr-off{display:none}
  .nr-off-sm{display:inline}
  .nr-leader{stroke-width:2;stroke-dasharray:5,4}
}

/* The rows: close races, same party, every Senate and governor race. */
.nr-rows{list-style:none;display:grid;gap:10px;margin:0;padding:0}
@media (min-width:760px){.nr-rows{grid-template-columns:1fr 1fr}}
.nr-row{padding:12px 14px 8px;border:1px solid #2e2e2e;border-radius:6px;background:#151515}
.nr-seat{margin:0 0 4px;font-family:var(--font-mono);font-size:.74rem;letter-spacing:.04em;color:#a8a8a8}
.nr-nofav{margin:0 0 2px;font-size:.84rem;color:#cfcfcf}
.nr-cands{list-style:none;display:grid;gap:0;margin:0;padding:0}
.nr-cand{display:flex;flex-wrap:wrap;align-items:center;gap:0 8px}
.nr-mk{flex:none;display:inline-flex;align-items:center;justify-content:center;width:28px;height:28px;border-radius:50%;font:700 15px/1 var(--font-body)}
.nr-mk.fyv-mark-neg{background:var(--red);color:#fff}
.nr-mk.fyv-mark-unsure{background:var(--yellow);color:#111}
.nr-mk.fyv-mark-pos{background:var(--green);color:#0B2A17}
.nr-mk.fyv-mark-undetermined{background:rgba(255,255,255,.05);color:#cfcfcf;border:1px solid rgba(255,255,255,.14);box-sizing:border-box}
/* The mark's word in a row (T-SHARE-ANSWER A): tucked against its glyph. */
.nr-mk+.fyv-mark-word{margin-left:-2px}
.nr-name{display:inline-flex;align-items:center;min-height:44px;color:#fff;font-weight:600;text-decoration:underline;text-underline-offset:3px}
.nr-name:hover{opacity:1;color:var(--yellow)}
.nr-party{font-family:var(--font-mono);font-size:.78rem;color:#9a9a9a}
.nr-pct{margin-left:auto;font-family:var(--font-mono);font-size:.86rem;color:#e8e8e8}
.nr-ask{flex:1 1 100%;padding-left:36px;font-size:.84rem;color:#cfcfcf}
.nr-ask a,.nr-see{display:inline-flex;align-items:center;min-height:44px;color:var(--yellow);text-decoration:underline;text-underline-offset:3px}
.nr-see{font-size:.88rem}
.nr-empty{margin:0;color:#cfcfcf}

/* The House, the table, the share row and the way on. */
.nr-btn{display:inline-flex;align-items:center;justify-content:center;min-height:48px;margin-top:6px;padding:0 20px;border:2px solid var(--yellow);border-radius:6px;color:var(--yellow);font:600 .95rem/1.25 var(--font-body);text-decoration:none}
.nr-btn:hover{opacity:1;background:rgba(255,197,0,.08)}
.nr-btn-primary{background:var(--yellow);color:#111}
.nr-btn-primary:hover{background:#ffd23f;color:#111}
.nr-table-wrap{max-width:100%;overflow-x:auto}
.nr-table{width:100%;border-collapse:collapse;font-size:.86rem}
.nr-table th,.nr-table td{padding:10px 3px;border-bottom:1px solid #2a2a2a;text-align:right;white-space:nowrap}
.nr-table thead th{font-family:var(--font-mono);font-size:.6rem;font-weight:500;letter-spacing:0;color:#9a9a9a;white-space:normal;vertical-align:bottom}
.nr-table th[scope="row"],.nr-table thead th:first-child{text-align:left}
.nr-table th[scope="row"]{font-weight:600;color:#e8e8e8}
.nr-total th,.nr-total td{border-bottom:none;font-weight:700;color:#fff}
@media (min-width:600px){.nr-table{font-size:.95rem}.nr-table th,.nr-table td{padding:10px 8px}.nr-table thead th{font-size:.68rem;letter-spacing:.03em}}
.nr-share{margin-top:44px;padding-top:16px;border-top:1px solid rgba(255,255,255,.09)}
.nr-share .share-row{margin:0 0 14px}
.nr-foot{margin:28px 0 0;font-size:.8rem;line-height:1.6;color:#a8a8a8}
.nr-foot a{color:#cfcfcf;text-decoration:underline;text-underline-offset:3px}
