/* COYNTOSS design system v4: editorial reset.
   Loaded last on every page. Presentation only: no forecast value, label or
   route is created here. One flat page color, hairline rules between
   sections, no boxed cards, and one nav bar. Party and rating colors match
   the map palettes in house-map.js and localized-map.js. */

:root {
  --shell: 1280px;
  --paper: #121314;
  --surface: #121314;
  --surface-2: #1a1c1e;
  --surface-3: #232528;
  --rule: #34373b;
  --rule-faint: #25282b;
  --rule-strong: #4a4e53;
  --masthead: #121314;
  --ink: #f2f2f2;
  --ink-soft: #c6cacf;
  --muted: #949ba3;
  --muted-light: #7a828b;
  --blue-pale: #172a3a;
  --red-pale: #362221;
  --amber: #d6b25e;
  --amber-pale: #2c2616;
  --gold: #e6bf5c;
  --radius: 0;
  --radius-sm: 3px;
  --radius-xs: 2px;
  --gap-section: clamp(40px, 5vw, 64px);

  /* Rating scale, identical to the map fills. */
  --r-solid-d: #2f78b7;
  --r-likely-d: #5c9bd1;
  --r-lean-d: #96bee0;
  --r-tilt-d: #c4dbef;
  --r-toss: #858b91;
  --r-tilt-r: #efcdca;
  --r-lean-r: #e2a5a0;
  --r-likely-r: #cf7771;
  --r-solid-r: #b44f49;
}

html, body { background: var(--paper); }
::selection { background: rgba(82, 165, 223, .35); color: #fff; }

/* ---------------------------------------------------------------- Masthead */
/* One bar: wordmark, sections, search and the Election Day countdown. */
.site-header { border-bottom: 1px solid var(--rule); background: var(--masthead); }
.site-header__inner { gap: 20px; }
.page-race:not(.page-txsim) .site-header__inner { width: min(1600px, calc(100% - 48px)); }
.identity { align-items: baseline !important; flex: none; }
.brand, .site-brand { font-weight: 800 !important; letter-spacing: .2em !important; }
.site-nav { margin-left: auto; gap: 2px; }
.site-nav a { padding: 8px 10px; color: rgba(255, 255, 255, .74) !important; font-size: 13.5px !important; font-weight: 600 !important; }
.site-nav a:hover { color: #fff !important; background: transparent !important; box-shadow: none; }
.site-nav a[aria-current="page"] { color: #fff !important; background: transparent !important; box-shadow: inset 0 -2px 0 #fff; }
.site-nav .nav-note {
  margin: -8px 0 0 -2px;
  color: var(--amber);
  font-size: 9px;
  font-weight: 700;
  letter-spacing: .06em;
  text-transform: uppercase;
}
.site-countdown {
  flex: none;
  margin: 0;
  color: var(--muted);
  font-size: 12px;
  font-weight: 600;
  white-space: nowrap;
}
.site-countdown__days { color: var(--ink-soft); }
.site-search {
  display: inline-flex;
  flex: none;
  align-items: center;
  gap: 8px;
  min-height: 32px;
  padding: 0 10px;
  border: 1px solid var(--rule);
  border-radius: var(--radius-sm);
  background: transparent;
  color: var(--ink-soft);
  font: 600 12.5px var(--sans);
  cursor: pointer;
}
.site-search::before {
  content: "";
  width: 13px;
  height: 13px;
  background: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' viewBox='0 0 16 16'%3E%3Ccircle cx='7' cy='7' r='5.2' fill='none' stroke='%23c6cacf' stroke-width='1.8'/%3E%3Cpath d='M11 11l3.6 3.6' stroke='%23c6cacf' stroke-width='1.8' stroke-linecap='round'/%3E%3C/svg%3E") no-repeat center / contain;
}
.site-search:hover { border-color: var(--rule-strong); color: var(--ink); }
.site-search kbd { padding: 0 5px; border: 1px solid var(--rule); border-radius: var(--radius-xs); color: var(--muted); font: 600 10.5px var(--sans); }
@media (max-width: 1100px) {
  .site-countdown { display: none; }
}
@media (max-width: 800px) {
  .site-header__inner { gap: 8px; }
  .site-search { order: 2; min-height: 36px; margin-left: auto; padding: 0 10px; }
  .menu-toggle { min-height: 36px !important; padding: 0 12px !important; border: 1px solid var(--rule) !important; border-radius: var(--radius-sm) !important; font: 600 13px var(--sans); }
  .site-search span, .site-search kbd { display: none; }
  .menu-toggle { order: 3; }
  .site-nav { margin-left: 0; }
  .site-nav .nav-note { margin: 0 0 0 6px; }
  .site-nav a[aria-current="page"] { box-shadow: inset 2px 0 0 #fff; padding-left: 12px; }
}

/* ------------------------------------------------------------- Typography */
h1 { letter-spacing: -.02em; }
.forecast-page .page-hero h1 {
  font-size: clamp(28px, 2.6vw, 36px) !important;
  line-height: 1.04;
  letter-spacing: -.024em;
}
.forecast-page .page-hero .lede { color: var(--ink-soft); font-size: clamp(1.02rem, 1.4vw, 1.15rem); line-height: 1.55; }
.home-house__dem-word, .senate-democrats-word { color: var(--blue) !important; }

/* Kickers: plain small caps. */
.forecast-page .page-hero .eyebrow,
.forecast-page .panel-header .eyebrow,
.forecast-page .section-heading .eyebrow,
.forecast-page .house-outlook > .eyebrow,
.forecast-page .house-methodology > .eyebrow {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: 10px;
  margin: 0 0 8px;
  color: var(--ink-soft);
  font-size: 11.5px !important;
  font-weight: 800 !important;
  letter-spacing: .1em !important;
  text-transform: uppercase !important;
}
.status-badge--experimental {
  padding: 2px 6px !important;
  border: 1px solid var(--amber) !important;
  border-radius: var(--radius-xs) !important;
  background: transparent !important;
  color: var(--amber) !important;
  font-size: 10px !important;
  letter-spacing: .08em !important;
}

/* ------------------------------------------------- Sections, not cards */
.forecast-page > .panel,
.forecast-page > .content-section,
.forecast-page > .governor-seat-panel {
  margin-top: var(--gap-section);
  padding: 0;
  border: 0 !important;
  border-radius: 0;
  background: none;
  box-shadow: none;
}
.forecast-page > .panel > .panel-header:first-child,
.forecast-page > .content-section > .section-heading:first-child { padding-top: 14px; border-top: 1px solid var(--rule-strong); }
.forecast-page .panel-header { border-bottom-color: var(--rule); }
.forecast-page .panel-header h2,
.forecast-page .section-heading h2,
.forecast-page .house-outlook h2,
.forecast-page .house-methodology h2 {
  margin: 0;
  font-size: clamp(1.45rem, 2.2vw, 1.85rem) !important;
  letter-spacing: -.012em;
  line-height: 1.12;
}
.forecast-page .section-heading {
  display: flex;
  flex-wrap: wrap;
  align-items: flex-end;
  justify-content: space-between;
  gap: 8px 24px;
  padding-bottom: 12px;
  border-bottom: 1px solid var(--rule);
  text-align: left !important;
}
.forecast-page .section-heading > div { flex: 1 1 auto; }
.forecast-page .section-heading .section-note { margin: 0; color: var(--muted); font-family: var(--sans) !important; font-size: 13.5px; }
.forecast-page .panel-note { color: var(--muted) !important; font-family: var(--sans) !important; font-size: 14px !important; }
.forecast-page .latest { padding: 0; border: 0; background: none; line-height: 1.35; }

/* Experimental disclosure: a ruled note, not a billboard. */
.forecast-page .model-disclosure,
.page-race .model-disclosure {
  margin-top: 20px;
  padding: 2px 0 2px 16px;
  border: 0 !important;
  border-left: 2px solid var(--amber) !important;
  border-radius: 0;
  background: none !important;
}
.forecast-page .model-disclosure h2 { margin: 2px 0 4px; font-size: 1.02rem !important; }
.forecast-page .model-disclosure__kicker { margin: 0; color: var(--amber); font-size: 10.5px; font-weight: 800; letter-spacing: .1em; text-transform: uppercase; }
.forecast-page .model-disclosure__body { margin: 0; max-width: 680px; color: var(--ink-soft); font-size: 14px; line-height: 1.55; }
.forecast-page .model-disclosure__points { gap: 4px 18px; margin: 8px 0 0; font-size: 12.5px; }

/* ----------------------------------------------------------- Rating labels */
body .rating-badge {
  display: inline-flex !important;
  align-items: center;
  padding: 2px 7px !important;
  border: 0 !important;
  border-radius: var(--radius-xs) !important;
  font-size: 11.5px !important;
  font-weight: 700 !important;
  letter-spacing: .01em !important;
  line-height: 1.3;
  white-space: nowrap;
  text-transform: none !important;
}
body .rating-badge.rating-solid-d, body .rating-badge.rating-safe-d, body .rating-badge.rating-safe-dem { color: #fff !important; background: var(--r-solid-d) !important; }
body .rating-badge.rating-likely-d, body .rating-badge.rating-likely-dem { color: #fff !important; background: var(--r-likely-d) !important; }
body .rating-badge.rating-lean-d, body .rating-badge.rating-lean-dem { color: #0b1a29 !important; background: var(--r-lean-d) !important; }
body .rating-badge.rating-tilt-d, body .rating-badge.rating-tilt-dem { color: #0b1a29 !important; background: var(--r-tilt-d) !important; }
body .rating-badge.rating-toss-up, body .rating-badge.rating-tossup { color: #fff !important; background: var(--r-toss) !important; }
body .rating-badge.rating-tilt-r, body .rating-badge.rating-tilt-rep { color: #2a0f0d !important; background: var(--r-tilt-r) !important; }
body .rating-badge.rating-lean-r, body .rating-badge.rating-lean-rep { color: #2a0f0d !important; background: var(--r-lean-r) !important; }
body .rating-badge.rating-likely-r, body .rating-badge.rating-likely-rep { color: #fff !important; background: var(--r-likely-r) !important; }
body .rating-badge.rating-solid-r, body .rating-badge.rating-safe-r, body .rating-badge.rating-safe-rep { color: #fff !important; background: var(--r-solid-r) !important; }

/* ----------------------------------------------------------------- Tables */
.forecast-page table thead th {
  color: var(--muted) !important;
  font-size: 10.5px !important;
  font-weight: 800 !important;
  letter-spacing: .08em !important;
  text-transform: uppercase !important;
  border-bottom: 1px solid var(--rule-strong) !important;
}
.forecast-page table tbody th,
.forecast-page table tbody td { border-bottom: 1px solid var(--rule-faint) !important; vertical-align: middle; }
.forecast-page table tbody tr:hover { background: rgba(255, 255, 255, .03) !important; }
.forecast-page table tbody tr:last-child > * { border-bottom: 0 !important; }
.forecast-page .dem-margin, .forecast-page .margin-dem { color: var(--blue); font-weight: 800; font-variant-numeric: tabular-nums; }
.forecast-page .rep-margin, .forecast-page .margin-rep { color: var(--red); font-weight: 800; font-variant-numeric: tabular-nums; }

/* ------------------------------------------------------------ Form controls */
.forecast-page select,
.house-scenario-control select {
  -webkit-appearance: none;
  appearance: none;
  min-height: 36px;
  padding: 6px 32px 6px 10px !important;
  border: 1px solid var(--rule-strong) !important;
  border-radius: var(--radius-sm) !important;
  background: var(--paper) url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='8' viewBox='0 0 12 8'%3E%3Cpath d='M1 1.5l5 5 5-5' fill='none' stroke='%23c6cacf' stroke-width='1.6' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E") no-repeat right 10px center !important;
  color: var(--ink) !important;
  font-size: 13.5px;
  font-weight: 600;
  cursor: pointer;
}
.forecast-page select:hover { border-color: var(--muted-light) !important; }
.forecast-page select:disabled { opacity: .55; cursor: not-allowed; }
.forecast-page .house-control-button {
  min-height: 36px;
  padding: 6px 12px;
  border: 1px solid var(--rule-strong) !important;
  border-radius: var(--radius-sm) !important;
  background: transparent !important;
  color: var(--ink);
  font-weight: 700;
  cursor: pointer;
}
.forecast-page .house-control-button:hover { border-color: var(--muted-light) !important; }

/* Zoom controls on every map: a small flat button group. */
.forecast-page, .forecast-page > .page-hero { border-top: 0 !important; }
.map-zoom-controls,
.house-map-controls.map-zoom-controls {
  gap: 0 !important;
  padding: 0 !important;
  overflow: hidden;
  border: 1px solid var(--rule-strong) !important;
  border-radius: var(--radius-sm) !important;
  background: var(--paper) !important;
  box-shadow: none;
}
.map-zoom-controls button { min-height: 32px !important; margin: 0 !important; border: 0 !important; border-right: 1px solid var(--rule) !important; border-radius: 0 !important; background: transparent !important; }
.map-zoom-controls button:last-child { border-right: 0 !important; }
.map-zoom-controls button:hover:not(:disabled) { background: rgba(255, 255, 255, .07) !important; }

/* Maps sit directly on the page: no frames, no tinted canvases. */
.senate-map-shell, .senate-map-canvas, .house-map-shell, .house-map-canvas,
.governor-map-shell, .governor-map-canvas, .localized-map, .home-map-widget .senate-map-shell, .home-map-widget .senate-map-canvas {
  border-radius: 0 !important;
  background: var(--paper) !important;
  box-shadow: none !important;
}
.senate-map-legend { gap: 6px 14px !important; }
.senate-map-legend i { border-radius: 1px !important; }

/* Office toggle on the homepage map: text tabs with an underline. */
.map-office-toggle { gap: 16px; padding: 0; border: 0; border-bottom: 1px solid var(--rule); border-radius: 0; background: none; }
.map-office-toggle button { padding: 6px 0 8px !important; border: 0 !important; border-radius: 0 !important; background: none !important; color: var(--muted) !important; font-weight: 700; }
.map-office-toggle button:hover { color: var(--ink) !important; }
.map-office-toggle button[aria-pressed="true"] { background: none !important; color: var(--ink) !important; box-shadow: inset 0 -2px 0 var(--ink); }

.text-link, .fh-more { text-decoration-thickness: 1px; text-underline-offset: 4px; }

/* ======================================================= House page */
@media (min-width: 1000px) {
  .forecast-page--house,
  .forecast-page--governor {
    display: grid;
    grid-template-columns: minmax(0, 1.2fr) minmax(0, 1fr);
    column-gap: 56px;
    align-items: start;
  }
  .forecast-page--house > *,
  .forecast-page--governor > * { grid-column: 1 / -1; min-width: 0; }
  .forecast-page--house > .page-hero,
  .forecast-page--governor > .page-hero { grid-column: 1; grid-row: 1; }
  .forecast-page--house > .model-disclosure,
  .forecast-page--governor > .model-disclosure { grid-column: 1; grid-row: 2; }
  .forecast-page--house > .house-summary-panel,
  .forecast-page--governor > .governor-seat-panel { grid-column: 2; grid-row: 1 / span 2; align-self: start; margin-top: 36px; padding-left: 40px; border-left: 1px solid var(--rule) !important; }
  .forecast-page--house > .house-summary-panel > .panel-header:first-child,
  .forecast-page--governor > .governor-seat-panel > .panel-header:first-child { padding-top: 0; border-top: 0; }
}
.forecast-page--house > .house-summary-panel { position: relative; }
.forecast-page--house .home-house__control--rail { border: 0 !important; padding: 0 !important; }
.forecast-page--house .home-house__bar { height: 10px !important; overflow: hidden; border-radius: 0 !important; }
.forecast-page--house .home-house__bar span:first-child { box-shadow: 2px 0 0 var(--paper); }
.forecast-page--house .home-house__expected { display: grid !important; grid-template-columns: 1fr 1fr; gap: 0; margin-top: 12px; border-top: 1px solid var(--rule); }
.forecast-page--house .home-house__expected > span { padding: 10px 0 0; color: var(--muted); font-size: 12px; line-height: 1.3; }
.forecast-page--house .home-house__expected > span:last-child { text-align: right; }
.forecast-page--house .home-house__expected strong { display: block; font-size: 1.4rem; font-variant-numeric: tabular-nums; }
.forecast-page--house .home-house__expected > span:first-child strong { color: var(--blue); }
.forecast-page--house .home-house__expected > span:last-child strong { color: var(--red); }

/* Outlook: figures in a ruled row. */
.forecast-page .house-outlook__metrics,
.forecast-page .house-scenario-metrics { gap: 0 !important; border: 0 !important; border-bottom: 1px solid var(--rule) !important; }
.forecast-page .house-outlook__metrics > div,
.forecast-page .house-scenario-metrics > div { position: relative; padding: 14px 20px 14px 0 !important; border: 0 !important; border-radius: 0; background: none !important; }
.forecast-page .house-outlook__metrics > div + div,
.forecast-page .house-scenario-metrics > div + div { padding-left: 20px !important; border-left: 1px solid var(--rule) !important; }
.forecast-page .house-outlook__metrics > div:first-child,
.forecast-page .house-scenario-metrics > div:first-child { padding-left: 0 !important; border-left: 0 !important; }
.forecast-page .house-outlook dt, .forecast-page .house-scenario-metrics dt { font-size: 10.5px !important; letter-spacing: .08em !important; }
.forecast-page .house-outlook dd { margin-top: 4px !important; font-size: clamp(1.6rem, 2.6vw, 2.1rem) !important; font-weight: 800; letter-spacing: -.02em; }
.forecast-page .house-scenario-metrics dd { font-size: clamp(1.35rem, 2.2vw, 1.75rem) !important; }
.forecast-page .house-diagnostics { border-top: 1px solid var(--rule); }
.forecast-page .house-diagnostics table tr.is-selected { background: rgba(82, 165, 223, .12) !important; box-shadow: inset 2px 0 0 var(--blue); }
.forecast-page .house-diagnostics details { padding: 10px 0; border: 0; border-top: 1px solid var(--rule-faint); border-radius: 0; background: none; }

/* District map: toolbar as a plain row, map flush with the page. */
.forecast-page--house .house-map-toolbar {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: 10px 14px;
  margin: 14px 0 0;
  padding: 0 0 12px !important;
  border: 0 !important;
  border-bottom: 1px solid var(--rule-faint) !important;
  border-radius: 0;
  background: none;
}
.forecast-page--house .house-breadcrumb { margin-right: auto; color: var(--ink-soft); font-size: 13px; font-weight: 700; }
.forecast-page--house .house-select-label { display: inline-flex; align-items: center; gap: 8px; color: var(--muted); font-size: 11px; font-weight: 800; letter-spacing: .08em; text-transform: uppercase; }
.forecast-page--house .house-map-shell { margin-top: 12px; overflow: hidden; border: 0 !important; }
.forecast-page--house .house-map-detail { border-left: 1px solid var(--rule) !important; background: none !important; }
.forecast-page--house .house-map-detail > strong:first-child { font-family: var(--serif); font-size: 1.25rem; }
.forecast-page--house .house-map-legend { margin-top: 12px; }

/* Closest districts. */
.forecast-page--house .house-close-table tbody th,
.forecast-page--house .house-close-table tbody td:first-child { font-weight: 800; font-variant-numeric: tabular-nums; }
.forecast-page--house .house-row-button {
  padding: 0 !important;
  border: 0 !important;
  background: none !important;
  color: var(--ink) !important;
  font-size: 12.5px !important;
  font-weight: 700 !important;
  text-decoration: underline !important;
  text-underline-offset: 3px;
  white-space: nowrap;
  cursor: pointer;
}
.forecast-page--house .house-row-button:hover { color: var(--blue) !important; }
.forecast-page--house .house-close-table td:last-child { text-align: right; }

/* ===================================================== Governor page */
.forecast-page--governor > .governor-seat-panel { position: relative; }
.forecast-page--governor .governor-simulation-status { font-size: 11.5px !important; }
.forecast-page--governor .governor-outlook-grid {
  display: grid !important;
  grid-template-columns: repeat(2, minmax(0, 1fr)) !important;
  gap: 0;
  margin-top: 12px;
  border: 0 !important;
  border-top: 1px solid var(--rule) !important;
}
.forecast-page--governor .governor-outlook-grid .stat-card {
  display: flex;
  flex-direction: column-reverse;
  justify-content: flex-end;
  gap: 4px;
  padding: 12px 16px 12px 0 !important;
  border: 0 !important;
  border-bottom: 1px solid var(--rule-faint) !important;
  border-radius: 0;
  background: none !important;
  box-shadow: none !important;
}
.forecast-page--governor .governor-outlook-grid .stat-card:nth-child(even) { padding-left: 16px !important; border-left: 1px solid var(--rule-faint) !important; }
.forecast-page--governor .governor-outlook-grid .stat-card > strong {
  font-family: var(--sans) !important;
  font-size: clamp(1.5rem, 2.4vw, 2rem) !important;
  font-weight: 800 !important;
  letter-spacing: -.02em;
  line-height: 1.05;
  font-variant-numeric: tabular-nums;
}
.forecast-page--governor .governor-outlook-grid .stat-card:nth-child(1) > strong { color: var(--blue); }
.forecast-page--governor .governor-outlook-grid .stat-card:nth-child(3) > strong { color: var(--red); }
.forecast-page--governor .governor-outlook-grid .stat-card:nth-child(4) > strong { font-size: clamp(1.2rem, 1.8vw, 1.45rem) !important; }
.forecast-page--governor .governor-outlook-grid .stat-card > span { font-size: 11px !important; font-weight: 800 !important; letter-spacing: .08em; text-transform: uppercase; }
.forecast-page--governor .governor-seat-bar,
.forecast-page .governor-seat-bar { overflow: hidden; height: 26px !important; border-radius: 0; gap: 2px; background: transparent !important; }
.forecast-page--governor .governor-seat-totals strong { font-size: 1.5rem; }
.forecast-page--governor .race-board .row-link,
.forecast-page--governor .race-board a { font-weight: 700; }
.forecast-page--governor .method-summary ol { counter-reset: step; padding-left: 0 !important; list-style: none; display: grid; grid-template-columns: repeat(auto-fit, minmax(220px, 1fr)); gap: 0 28px; max-width: none !important; font-size: .95rem !important; }
.forecast-page--governor .method-summary li {
  counter-increment: step;
  position: relative;
  margin: 0 !important;
  padding: 12px 0 16px 34px;
  border-top: 1px solid var(--rule);
  color: var(--ink-soft);
  line-height: 1.5;
}
.forecast-page--governor .method-summary li::before {
  content: counter(step);
  position: absolute;
  top: 12px;
  left: 0;
  color: var(--muted);
  font: 700 1.2rem/1.2 var(--serif);
}
.forecast-page--governor .method-summary li strong { display: block; margin-bottom: 2px; color: var(--ink); }
.forecast-page .panel-footer .button-secondary {
  display: inline-flex;
  align-items: center;
  gap: 8px;
  padding: 0 !important;
  border: 0 !important;
  background: none !important;
  color: var(--ink) !important;
  font-weight: 700;
  text-decoration: underline !important;
  text-underline-offset: 4px;
}

@media (max-width: 950px) {
  .forecast-page--governor .governor-map-canvas,
  .forecast-page--governor .governor-map-shell #senate-map { height: auto; aspect-ratio: 960 / 520; }
  .forecast-page--governor .governor-map-canvas .map-zoom-controls { position: static; margin: 0 0 8px; width: fit-content; }
}

/* ===================================================== Methodology */
.mx-model__tag { padding: 0; border: 0; border-radius: 0; }
.mx-pipeline { gap: 6px 10px; }
.mx-pipeline a { padding: 0; border: 0; border-radius: 0; background: none; text-decoration: underline; text-decoration-color: var(--rule-strong); text-underline-offset: 4px; }
.mx-pipeline a:hover { text-decoration-color: var(--ink); }
.mx-formula { border-radius: var(--radius-sm); background: var(--surface-2); }

/* ===================================================== Senate overview */
.sd-page { padding-bottom: 48px; }
.sd-top { padding: 28px 0 0; }
.sd-top__head { display: flex; flex-wrap: wrap; align-items: baseline; justify-content: space-between; gap: 6px 32px; padding-bottom: 18px; }
.sd-top__head .sd-kicker { flex-basis: 100%; }
.sd-kicker { margin: 0 0 8px; color: var(--ink-soft); font: 800 11.5px/1.3 var(--sans); letter-spacing: .1em; }
.sd-top h1 { margin: 0; max-width: none; font-size: clamp(2.1rem, 3.8vw, 3.1rem); line-height: 1.04; letter-spacing: -.024em; }
.sd-top .sd-updated { margin: 0; max-width: 480px; color: var(--muted); font: 400 12.5px/1.45 var(--sans); }

/* Page sections: forecast vs. track record. */
.sd-pagetabs { display: flex; gap: 26px; margin: 0 0 24px; border-bottom: 1px solid var(--rule); }
.sd-pagetabs [role="tab"] { position: relative; padding: 10px 0 12px; border: 0; background: none; color: var(--muted); font: 700 14.5px/1 var(--sans); cursor: pointer; }
.sd-pagetabs [role="tab"]:hover { color: var(--ink); }
.sd-pagetabs [role="tab"][aria-selected="true"] { color: var(--ink); }
.sd-pagetabs [role="tab"][aria-selected="true"]::after { content: ""; position: absolute; left: 0; right: 0; bottom: -1px; height: 2px; background: var(--ink); }
.sd-pagetabs [role="tab"]:focus-visible { outline: 2px solid var(--focus, #68b7f0); outline-offset: 4px; }
.sd-panel[hidden] { display: none !important; }

/* Headline: odds on the left, the chamber on the right, one rule between. */
.sd-hero {
  display: grid;
  grid-template-columns: minmax(0, 1fr) minmax(0, 1fr);
  grid-template-areas: "odds chamber";
  align-items: stretch;
  gap: 0;
  padding: 0;
  border: 0;
}
.sd-odds, .sd-chamber { margin: 0; padding: 0; border: 0; border-radius: 0; background: none; }
.sd-odds { grid-area: odds; display: flex; flex-direction: column; padding-right: 40px; }
.sd-chamber { grid-area: chamber; display: flex; flex-direction: column; padding-left: 40px; border-left: 1px solid var(--rule); }
.sd-odds__figures { margin-top: 8px; align-items: flex-end; }
.sd-odds__num { font-size: clamp(3.2rem, 5.6vw, 4.8rem); line-height: .92; letter-spacing: -.03em; }
.sd-odds__side span { margin-top: 6px; font-size: 13px; }
.sd-odds__bar { height: 12px; margin-top: 16px; border-radius: 0; overflow: hidden; }
.sd-odds__tick { top: -3px; bottom: -3px; }
.sd-odds__caption { margin-top: 8px; color: var(--muted); font-size: 12px; }
.sd-odds__facts { display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); margin: auto 0 0; padding-top: 22px; }
.sd-odds__facts:empty { display: none; }
.sd-odds__fact { padding: 12px 12px 0 0; border-top: 1px solid var(--rule); }
.sd-odds__fact + .sd-odds__fact { padding-left: 12px; border-left: 1px solid var(--rule-faint); }
.sd-odds__fact dt { color: var(--muted); font: 800 10.5px/1.3 var(--sans); letter-spacing: .08em; text-transform: uppercase; }
.sd-odds__fact dd { margin: 5px 0 0; color: var(--ink); font: 700 1.35rem/1.1 var(--serif); font-variant-numeric: tabular-nums; }
.sd-odds__fact dd small { display: block; margin-top: 3px; color: var(--muted); font: 400 11.5px/1.3 var(--sans); }
.sd-chamber__bar { display: flex; flex-wrap: wrap; align-items: center; justify-content: space-between; gap: 8px 16px; margin-bottom: 6px; }
.sd-chamber__plot { width: 100%; max-width: 540px; margin: 0 auto; }
.sd-chamber__totals { max-width: 540px; width: 100%; margin-inline: auto; }
.sd-chamber__total strong { font-size: clamp(1.9rem, 2.8vw, 2.4rem); }
.sd-chamber__tip { min-height: 34px; margin-top: 10px; padding: 8px 0 0; border: 0; border-top: 1px solid var(--rule-faint); border-radius: 0; background: none; }
.sd-chamber .sd-note { margin-top: 8px; }
.sd-chamber .sd-tiles { padding-top: 4px; }
.sd-chamber__legend[hidden] { display: none !important; }
.sd-chamber__legend { margin-top: 10px; padding-top: 10px; border-top: 1px solid var(--rule-faint); font-size: 11.5px; }
.sd-view--map .senate-map-shell { height: auto; min-height: 0; margin: 0; padding: 0; border: 0; }
.sd-view--map .senate-map-canvas { aspect-ratio: 960 / 520; height: auto; }
.sd-view--map svg { width: 100%; height: 100%; }
.sd-view--map .senate-map-controls { transform: scale(.9); transform-origin: top left; }

.sd-top .sd-label { margin: 0 0 4px; color: var(--ink); font: 800 11.5px/1.3 var(--sans); letter-spacing: .08em; text-transform: uppercase; }
.sd-eyebrow { margin: 0 0 6px; color: var(--muted); font: 800 11px/1.3 var(--sans); letter-spacing: .1em; text-transform: uppercase; }
.sd-section { margin-top: var(--gap-section); }
.sd-section__head { display: flex; flex-wrap: wrap; align-items: flex-end; justify-content: space-between; gap: 14px 40px; margin-bottom: 18px; padding-top: 14px; border-top: 1px solid var(--rule-strong); }
.sd-section__head > div:first-child { max-width: 720px; }
.sd-section__head h2 { font-size: clamp(1.5rem, 2.4vw, 2rem); letter-spacing: -.015em; }

/* Small view switches (Seats/Map/Tiles, Ratings/Table, 2024/2022): text tabs. */
.sd-views { display: inline-flex; gap: 18px; padding: 0; border: 0; border-radius: 0; background: none; }
.sd-views [role="tab"] { padding: 6px 0 7px; border: 0; border-radius: 0; background: transparent; color: var(--muted); font: 700 13px/1 var(--sans); cursor: pointer; }
.sd-views [role="tab"]:hover { color: var(--ink); }
.sd-views [role="tab"][aria-selected="true"] { background: none; color: var(--ink); box-shadow: inset 0 -2px 0 var(--ink); }
.sd-views [role="tab"]:focus-visible { outline: 2px solid var(--focus, #68b7f0); outline-offset: 2px; }
.sd-views--small [role="tab"] { font-size: 12.5px; }
.sd-view[hidden] { display: none !important; }

/* Polls vs. fundamentals chart, on the page itself. */
.sd-ingredients__chart { padding: 0; border: 0; border-radius: 0; background: none; }
.sd-ing__row { min-height: 50px; }
.sd-ing__name a { font-size: 15px; }
.sd-ing__out strong { font-size: 1.12rem; }
.sd-ing__mark--fund, .sd-ing__mark--poll { background: var(--paper); }
.sd-ing__mark--model { border-color: var(--paper); }
.sd-ing__row:last-child { border-bottom: 0; }

.sd-overview .senate-map-shell { height: clamp(360px, 46vw, 640px); }
.sd-overview .senate-map-legend { margin-top: 12px; padding-top: 12px; border-top: 1px solid var(--rule-faint); }
.sd-ratings .sd-rboard { border-bottom: 0; }
.sd-chip__link { border-radius: 0; background: none; }
.sd-chip__link:hover, .sd-chip__link:focus-visible { background: var(--surface-2); }

/* Every race: the first ten rows, then the rest on request. */
.sd-board.is-collapsed .sd-board__table tbody tr:nth-child(n+11) { display: none; }
.sd-board__table tbody tr:hover th, .sd-board__table tbody tr:hover td { background: var(--surface-2); }
.sd-board__more { display: block; width: 100%; margin-top: 0; padding: 12px; border: 0; border-top: 1px solid var(--rule); border-bottom: 1px solid var(--rule); border-radius: 0; background: transparent; color: var(--ink); font: 700 13px/1 var(--sans); cursor: pointer; }
.sd-board__more:hover { background: var(--surface-2); }
.sd-board__more[hidden] { display: none; }

.sd-poll { border: 0; border-top: 1px solid var(--rule); border-radius: 0; background: none; box-shadow: none; }
.sd-next { gap: 0; margin-top: var(--gap-section); border-top: 1px solid var(--rule-strong); }
.sd-next__item { padding: 16px 24px 4px 0; border: 0; background: none; }
.sd-next__item + .sd-next__item { padding-left: 24px; border-left: 1px solid var(--rule-faint); }
.sd-next__item:hover { background: none; }
.sd-next__item:hover strong { text-decoration: underline; text-underline-offset: 4px; }

/* Track record */
.sd-record__intro { max-width: 760px; }
.sd-record__intro h2 { margin: 0; font-size: clamp(1.8rem, 3vw, 2.4rem); letter-spacing: -.02em; }
.sd-record__stats { display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); margin: 24px 0 0; border: 0; border-top: 1px solid var(--rule-strong); border-bottom: 1px solid var(--rule); border-radius: 0; background: none; }
.sd-record__stat { padding: 16px 20px 16px 0; }
.sd-record__stat + .sd-record__stat { padding-left: 20px; border-left: 1px solid var(--rule-faint); }
.sd-record__stat dt { color: var(--muted); font: 800 10.5px/1.3 var(--sans); letter-spacing: .08em; text-transform: uppercase; }
.sd-record__stat dd { margin: 6px 0 0; color: var(--ink); font: 700 clamp(1.6rem, 2.6vw, 2.1rem)/1.05 var(--serif); font-variant-numeric: tabular-nums; }
.sd-record__stat dd small { display: block; margin-top: 5px; color: var(--muted); font: 400 12px/1.35 var(--sans); }
.sd-record__chart, .sd-record__scatter { padding: 0; border: 0; border-radius: 0; background: none; }
.sd-rec__row { display: grid; grid-template-columns: 110px minmax(0, 1fr) 120px; align-items: center; gap: 18px; min-height: 50px; border-bottom: 1px solid var(--rule-faint); }
.sd-rec__row:last-child { border-bottom: 0; }
.sd-rec__row--axis { min-height: 32px; color: var(--muted); font: 600 11px/1 var(--sans); }
.sd-rec__name strong { display: block; color: var(--ink); font: 700 1.12rem/1.1 var(--serif); }
.sd-rec__name small { color: var(--muted); font: 400 11.5px/1.3 var(--sans); }
.sd-rec__track { position: relative; height: 30px; }
.sd-rec__tick { position: absolute; top: 50%; transform: translate(-50%, -50%); white-space: nowrap; }
.sd-rec__tick:first-child { transform: translate(0, -50%); }
.sd-rec__grid { position: absolute; top: 0; bottom: 0; width: 1px; background: var(--rule-faint); }
.sd-rec__span { position: absolute; top: 50%; height: 2px; margin-top: -1px; background: var(--rule-strong); }
.sd-rec__mark { position: absolute; top: 50%; width: 13px; height: 13px; margin: -6.5px 0 0 -6.5px; border-radius: 50%; }
.sd-rec__mark--fund { width: 10px; height: 10px; margin: -5px 0 0 -5px; border-radius: 1px; border: 1.5px solid var(--ink-soft); background: var(--paper); transform: rotate(45deg); }
.sd-rec__mark--poll { border: 1.5px solid var(--ink-soft); background: var(--paper); }
.sd-rec__mark--model { width: 15px; height: 15px; margin: -7.5px 0 0 -7.5px; border: 2px solid var(--paper); background: var(--gold); }
.sd-rec__out { text-align: right; }
.sd-rec__out strong { display: block; color: var(--ink); font: 700 1.15rem/1.1 var(--serif); }
.sd-rec__out small { color: var(--muted); font: 400 11.5px/1.3 var(--sans); }
.sd-rec__out small.is-best { color: var(--gold); font-weight: 700; }
.sd-record__seats { display: grid; grid-template-columns: repeat(6, minmax(0, 1fr)); gap: 0; border-bottom: 1px solid var(--rule); }
.sd-seatcard { padding: 12px 16px 14px 0; border: 0; border-top: 1px solid var(--rule); border-radius: 0; background: none; }
.sd-seatcard + .sd-seatcard { padding-left: 16px; border-left: 1px solid var(--rule-faint); }
.sd-seatcard__year { color: var(--muted); font: 800 11px/1 var(--sans); letter-spacing: .08em; }
.sd-seatcard__nums { display: flex; align-items: baseline; gap: 8px; margin: 8px 0 0; }
.sd-seatcard__nums strong { color: var(--blue, #5c9bd1); font: 700 2rem/1 var(--serif); }
.sd-seatcard__vs { color: var(--muted); font: 400 12px/1 var(--sans); }
.sd-seatcard__actual { margin: 5px 0 0; color: var(--ink-soft); font: 400 12.5px/1.3 var(--sans); }
.sd-seatcard__actual strong { color: var(--ink); }
.sd-seatcard__diff { display: inline-block; margin: 8px 0 0; padding: 0; border-radius: 0; background: none; color: var(--muted); font: 700 11.5px/1 var(--sans); }
.sd-seatcard.is-exact .sd-seatcard__diff { background: none; color: var(--gold); }
.sd-record__scatter { position: relative; display: grid; grid-template-columns: minmax(0, 1.25fr) minmax(0, 1fr); gap: 40px; padding-block: 8px 0; }
.sd-record__scatter .sd-view { grid-column: 1; grid-row: 1; }
.sd-scatter { display: block; width: 100%; max-width: 560px; height: auto; overflow: visible; }
.sd-scatter__wrong { fill: var(--gold); fill-opacity: .045; }
.sd-scatter__grid { stroke: var(--rule-faint); stroke-width: 1; }
.sd-scatter__grid.is-zero { stroke: var(--rule-strong); }
.sd-scatter__diag { stroke: var(--ink-soft); stroke-width: 1; stroke-dasharray: 4 4; }
.sd-scatter__tick { fill: var(--muted); font: 600 10.5px var(--sans); }
.sd-scatter__axis { fill: var(--ink-soft); font: 700 11px var(--sans); }
.sd-scatter__dot { stroke: var(--paper); stroke-width: 1.5; }
.sd-scatter__dot.is-dem { fill: var(--r-likely-d); }
.sd-scatter__dot.is-rep { fill: var(--r-likely-r); }
.sd-scatter__dot.is-unscored { fill: var(--paper); stroke: var(--muted); }
.sd-scatter__ring { fill: none; stroke: var(--gold); stroke-width: 2; }
.sd-scatter__label { fill: var(--ink); font: 700 11.5px var(--sans); }
.sd-scatter__hit { fill: transparent; cursor: pointer; }
.sd-scatter__pt { outline: none; }
.sd-scatter__pt:focus-visible .sd-scatter__dot, .sd-scatter__pt:hover .sd-scatter__dot { stroke: var(--ink); stroke-width: 2; }
.sd-scatter__tip { position: absolute; z-index: 3; display: grid; gap: 2px; min-width: 170px; padding: 8px 10px; border: 1px solid var(--rule-strong); border-radius: var(--radius-sm); background: var(--paper); color: var(--ink-soft); font: 400 12px/1.4 var(--sans); pointer-events: none; }
.sd-scatter__tip strong { color: var(--ink); }
.sd-scatter__tip[hidden] { display: none; }
.sd-record__misses { grid-column: 2; grid-row: 1; align-self: start; padding-left: 40px; border-left: 1px solid var(--rule); }
.sd-record__misses h3 { margin: 0 0 8px; font: 700 1.12rem/1.2 var(--serif); }
.sd-record__misses h3 + .sd-record__glance, .sd-record__glance + h3 { margin-top: 0; }
.sd-record__glance { display: grid; grid-template-columns: auto 1fr; gap: 6px 16px; margin: 0 0 20px; padding-bottom: 16px; border-bottom: 1px solid var(--rule-faint); font: 400 13px/1.35 var(--sans); }
.sd-record__glance dt { color: var(--muted); }
.sd-record__glance dd { margin: 0; color: var(--ink); font-weight: 700; text-align: right; }
.sd-record__misslist { display: grid; gap: 0; margin: 0 0 12px; padding: 0; list-style: none; }
.sd-record__misslist li { display: grid; gap: 2px; padding: 9px 0 9px 12px; border-left: 2px solid var(--gold); border-bottom: 1px solid var(--rule-faint); border-radius: 0; background: none; font: 400 12.5px/1.35 var(--sans); }
.sd-record__misslist strong { color: var(--ink); font-size: 14px; }
.sd-record__misslist small { color: var(--muted); }
.sd-record__note { max-width: 860px; margin-top: 24px; }

@media (max-width: 980px) {
  .sd-hero { grid-template-columns: minmax(0, 1fr); grid-template-areas: "odds" "chamber"; }
  .sd-odds { padding-right: 0; padding-bottom: 24px; }
  .sd-chamber { padding-left: 0; padding-top: 20px; border-left: 0; border-top: 1px solid var(--rule); }
  .sd-record__stats { grid-template-columns: repeat(2, minmax(0, 1fr)); }
  .sd-record__stat:nth-child(3) { padding-left: 0; border-left: 0; }
  .sd-record__stat:nth-child(n+3) { border-top: 1px solid var(--rule-faint); }
  .sd-record__seats { grid-template-columns: repeat(3, minmax(0, 1fr)); }
  .sd-seatcard:nth-child(4) { padding-left: 0; border-left: 0; }
  .sd-record__scatter { grid-template-columns: minmax(0, 1fr); gap: 24px; }
  .sd-record__misses { grid-column: 1; grid-row: 2; padding-left: 0; border-left: 0; }
}
@media (max-width: 640px) {
  .sd-top { padding-top: 20px; }
  .sd-top__head { padding-bottom: 14px; }
  .sd-top h1 { font-size: clamp(1.9rem, 8.6vw, 2.3rem); }
  .sd-odds__num { font-size: 3.2rem; }
  .sd-odds__facts { grid-template-columns: repeat(2, minmax(0, 1fr)); padding-top: 16px; }
  .sd-odds__fact:nth-child(odd) { padding-left: 0; border-left: 0; }
  .sd-odds__fact dd { font-size: 1.2rem; }
  .sd-section__head { gap: 12px; }
  .sd-ing__row { min-height: 46px; }
  .sd-overview .senate-map-shell { height: auto; }
  .sd-next { grid-template-columns: minmax(0, 1fr); }
  .sd-pagetabs { gap: 22px; margin-bottom: 18px; }
  .sd-record__stat { padding: 14px 12px 14px 0; }
  .sd-record__stat + .sd-record__stat { padding-left: 12px; }
  .sd-record__stat:nth-child(3) { padding-left: 0; }
  .sd-record__seats { grid-template-columns: repeat(2, minmax(0, 1fr)); }
  .sd-seatcard:nth-child(4) { padding-left: 16px; border-left: 1px solid var(--rule-faint); }
  .sd-seatcard:nth-child(odd) { padding-left: 0; border-left: 0; }
  .sd-rec__row { grid-template-columns: 58px minmax(0, 1fr) 64px; gap: 10px; }
  .sd-rec__row--axis .sd-rec__tick:not(:first-child):not(:last-child) { font-size: 0; }
  .sd-next__item, .sd-next__item + .sd-next__item { padding: 14px 0; border-left: 0; border-bottom: 1px solid var(--rule-faint); }
}

/* ===================================================== Race pages */
main > .race-hero h1 { letter-spacing: -.022em; }

/* ===================================================== Footer */
.site-footer { margin-top: var(--gap-section); border-top: 1px solid var(--rule); background: var(--paper); }
.site-footer .brand { display: inline-flex; align-items: center; }
.site-footer .footer-group h2 { color: var(--muted); font-size: 10.5px; letter-spacing: .12em; }
.site-footer .footer-group a { color: var(--ink-soft); text-decoration: none; }
.site-footer .footer-group a:hover { color: var(--ink); text-decoration: underline; text-underline-offset: 3px; }

/* ===================================================== Homepage */
.home-page > .shell { width: min(var(--shell), calc(100% - 32px)); }
.flagship-story { border-top: 0 !important; }
.home-house, .fh-home {
  margin-top: var(--gap-section);
  padding: 14px 0 0 !important;
  border: 0 !important;
  border-top: 1px solid var(--rule-strong) !important;
  border-radius: 0;
  background: none !important;
  box-shadow: none;
}
.home-house__disclosure { border-radius: 0; }

/* The three outlooks, as one ruled row under the masthead. */
.scoreboard { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 0; margin: 0 0 32px; border-bottom: 1px solid var(--rule); }
.scoreboard__card {
  position: relative; display: flex; flex-direction: column; gap: 8px; padding: 16px 28px 14px 0;
  border: 0; border-radius: 0; background: none; box-shadow: none; color: var(--ink); text-decoration: none;
}
.scoreboard__card + .scoreboard__card { padding-left: 28px; border-left: 1px solid var(--rule); }
.scoreboard__card:hover .scoreboard__go { text-decoration: underline; text-underline-offset: 3px; }
.scoreboard__kicker { display: flex; align-items: center; gap: 8px; color: var(--ink); font: 800 11.5px var(--sans); letter-spacing: .1em; text-transform: uppercase; }
.scoreboard__kicker em { color: var(--amber); font-size: 9px; font-style: normal; letter-spacing: .06em; }
.scoreboard__lead { display: flex; justify-content: space-between; gap: 12px; color: var(--muted); font-size: 13px; }
.scoreboard__num { display: flex; flex-direction: column; font: 800 clamp(1.5rem, 2.4vw, 1.9rem) var(--sans); letter-spacing: -.02em; line-height: 1; font-variant-numeric: tabular-nums; }
.scoreboard__num small { margin-top: 3px; color: var(--muted); font-size: 11.5px; font-weight: 600; letter-spacing: 0; }
.scoreboard__num--d { color: var(--blue); }
.scoreboard__num--r { align-items: flex-end; color: var(--red); }
.scoreboard__bar { display: flex; gap: 2px; height: 8px; overflow: hidden; border-radius: 0; background: var(--surface-3); }
.scoreboard__seg--d { background: var(--blue); }
.scoreboard__seg--r { background: var(--red); }
.scoreboard__seg--split { background: var(--r-toss); }
.scoreboard__meta { color: var(--ink-soft); font-size: 12.5px; font-variant-numeric: tabular-nums; }
.scoreboard__go { margin-top: auto; padding-top: 2px; color: var(--ink); font-size: 13px; font-weight: 700; }
@media (max-width: 860px) {
  .scoreboard { grid-template-columns: 1fr; margin-bottom: 24px; }
  .scoreboard__card, .scoreboard__card + .scoreboard__card { padding: 14px 0; border-left: 0; }
  .scoreboard__card + .scoreboard__card { border-top: 1px solid var(--rule-faint); }
}

/* ===================================================== Small screens */
@media (max-width: 640px) {
  :root { --gap-section: 36px; }
  .forecast-page .section-heading { display: block !important; }
  .forecast-page .section-heading .section-note { margin-top: 6px; }
  .forecast-page .latest { text-align: left !important; }
  .forecast-page .house-outlook__metrics > div,
  .forecast-page .house-scenario-metrics > div { padding: 10px 10px 10px 0 !important; }
  .forecast-page .house-outlook__metrics > div + div,
  .forecast-page .house-scenario-metrics > div + div { padding-left: 10px !important; }
  .forecast-page .house-outlook dd, .forecast-page .house-scenario-metrics dd { font-size: 1.4rem !important; }
  .forecast-page--house .house-select-label { width: 100%; justify-content: space-between; }
  .forecast-page--house .house-select-label select { flex: 1; max-width: 72%; }
  .forecast-page--house .house-control-button { width: 100%; }
  .forecast-page--house .house-map-detail { border-top: 1px solid var(--rule) !important; border-left: 0 !important; }
  .forecast-page--house .house-close-table th:nth-child(2),
  .forecast-page--house .house-close-table td:nth-child(2) { font-size: 12.5px !important; }
  .forecast-page--governor .governor-outlook-grid .stat-card { padding: 10px 10px 10px 0 !important; }
  .forecast-page--governor .governor-outlook-grid .stat-card:nth-child(even) { padding-left: 10px !important; }
  .forecast-page--governor .governor-outlook-grid .stat-card:nth-child(4) > strong { font-size: 1.1rem !important; }
  .forecast-page .house-diagnostics table { font-size: 12.5px; }
  /* Closest districts become two-line rows: district, margin, rating / candidates, view. */
  .forecast-page--house .house-close-table { width: 100%; }
  .forecast-page--house .house-close-table thead { display: none; }
  .forecast-page--house .house-close-table tbody tr {
    display: grid;
    grid-template-columns: minmax(0, 1fr) auto auto;
    grid-template-areas: "dist margin rating" "cand cand open";
    align-items: center;
    gap: 6px 12px;
    padding: 12px 2px;
    border-bottom: 1px solid var(--rule-faint);
  }
  .forecast-page--house .house-close-table tbody tr > * { padding: 0 !important; border: 0 !important; }
  .forecast-page--house .house-close-table tbody th { grid-area: dist; font-size: 15px !important; }
  .forecast-page--house .house-close-table tbody td:nth-of-type(1) { grid-area: cand; color: var(--ink-soft); }
  .forecast-page--house .house-close-table tbody td:nth-of-type(2) { grid-area: margin; text-align: right; }
  .forecast-page--house .house-close-table tbody td:nth-of-type(3) { grid-area: rating; text-align: right; }
  .forecast-page--house .house-close-table tbody td:nth-of-type(4) { grid-area: open; text-align: right; }
}

/* ===================================================== House extras */
.hx-seats__head { display: flex; flex-wrap: wrap; align-items: flex-end; justify-content: space-between; gap: 14px 32px; }
.hx-seats__head > div:first-child { flex: 1 1 420px; }
.hx-seats__finder { flex: 0 1 340px; width: 100%; }
.hx-seats__chart { position: relative; max-width: 900px; margin: 12px auto 0; }
.hx-seats__note { max-width: 720px; margin: 4px auto 0; color: var(--muted); font-size: 13px; text-align: center; }
.hx-seats__bar { max-width: 900px; margin: 18px auto 0; }
.hx-hemi { display: block; width: 100%; height: auto; overflow: visible; }
.hx-dot { cursor: pointer; transition: opacity .2s ease; }
.hx-dot.is-hot { stroke: #fff; stroke-width: 2; }
.hx-dot.is-dim { opacity: .13; }
.hx-hemi__majority { stroke: var(--ink-soft); stroke-width: 1.5; stroke-dasharray: 3 4; }
.hx-hemi__label { fill: var(--ink-soft); font: 700 13px var(--sans); letter-spacing: .04em; }
.hx-hemi__big { font: 800 60px var(--sans); letter-spacing: -.03em; }
.hx-hemi__big.is-d { fill: var(--blue); }
.hx-hemi__big.is-r { fill: var(--red); }
.hx-hemi__cap { fill: var(--muted); font: 700 13px var(--sans); letter-spacing: .08em; text-transform: uppercase; }
.hx-hemi__small { fill: var(--ink-soft); font: 700 15px var(--sans); }

/* Filters: text buttons with counts; the active one is underlined. */
.hx-chips { display: flex; flex-wrap: wrap; gap: 4px 20px; margin: 14px 0 0; border-bottom: 1px solid var(--rule); }
.hx-chips--table { margin: 12px 0 6px; }
.hx-chip {
  display: inline-flex; align-items: center; gap: 6px; min-height: 34px; padding: 4px 0 6px;
  border: 0; border-radius: 0; background: none;
  color: var(--muted); font: 700 13px var(--sans); cursor: pointer;
}
.hx-chip b { color: var(--muted-light); font-size: 11.5px; font-weight: 600; }
.hx-chip:hover { color: var(--ink); }
.hx-chip[aria-pressed="true"] { color: var(--ink); background: none; box-shadow: inset 0 -2px 0 var(--ink); }
.hx-chip[aria-pressed="true"] b { color: var(--ink-soft); background: none; }

.hx-bar { position: relative; display: flex; gap: 2px; height: 26px; overflow: visible; }
.hx-bar__seg { display: flex; min-width: 3px; align-items: center; justify-content: center; color: #fff; font: 800 12px var(--sans); }
.hx-bar__seg--lean-d, .hx-bar__seg--lean-r { color: #10151b; }
.hx-bar__marker { position: absolute; top: -6px; bottom: -6px; width: 2px; margin-left: -1px; background: var(--ink); box-shadow: 0 0 0 2px var(--paper); }
.hx-bar__legend { display: flex; flex-wrap: wrap; justify-content: center; gap: 6px 18px; margin: 12px 0 0; padding: 0; list-style: none; color: var(--ink-soft); font-size: 12.5px; }
.hx-bar__legend li { display: inline-flex; align-items: center; gap: 6px; }
.hx-bar__legend i { width: 10px; height: 10px; border-radius: 1px; }
.hx-bar__legend b { color: var(--ink); font-variant-numeric: tabular-nums; }

.hx-find { position: relative; }
.hx-find__input {
  width: 100%; min-height: 40px; padding: 8px 12px 8px 36px;
  border: 1px solid var(--rule-strong); border-radius: var(--radius-sm); outline: 0;
  background: var(--paper) url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' viewBox='0 0 16 16'%3E%3Ccircle cx='7' cy='7' r='5.2' fill='none' stroke='%23949ba3' stroke-width='1.7'/%3E%3Cpath d='M11 11l3.6 3.6' stroke='%23949ba3' stroke-width='1.7' stroke-linecap='round'/%3E%3C/svg%3E") no-repeat 12px center;
  color: var(--ink); font: 500 14px var(--sans);
}
.hx-find__input:focus { border-color: var(--ink-soft); }
.hx-find__input::placeholder { color: var(--muted); }
.hx-find__list {
  position: absolute; z-index: 60; top: calc(100% + 4px); right: 0; left: 0; margin: 0; padding: 4px; list-style: none;
  border: 1px solid var(--rule-strong); border-radius: var(--radius-sm); background: var(--surface-2); box-shadow: 0 16px 32px -16px rgba(0, 0, 0, .8);
}
.hx-find__item { display: flex; align-items: center; gap: 10px; padding: 8px; border-radius: var(--radius-xs); cursor: pointer; }
.hx-find__item[aria-selected="true"], .hx-find__item:hover { background: var(--surface-3); }
.hx-find__item i { flex: none; width: 10px; height: 10px; border-radius: 1px; }
.hx-find__main { display: flex; min-width: 0; flex: 1; flex-direction: column; }
.hx-find__main strong { font-size: 14px; }
.hx-find__main span { overflow: hidden; color: var(--muted); font-size: 12.5px; text-overflow: ellipsis; white-space: nowrap; }
.hx-find__side { font-weight: 800; font-size: 13px; font-variant-numeric: tabular-nums; }
.is-d { color: var(--blue); }
.is-r { color: var(--red); }

.hx-tip {
  position: fixed; z-index: 200; width: 260px; overflow: hidden; pointer-events: none;
  border: 1px solid var(--rule-strong); border-radius: var(--radius-sm); background: var(--surface-2); box-shadow: 0 16px 32px -16px rgba(0, 0, 0, .85);
}
.hx-tip__head { display: flex; justify-content: space-between; gap: 8px; padding: 8px 12px; background: var(--hx-tip); color: #fff; font: 800 13px var(--sans); text-shadow: 0 1px 1px rgba(0, 0, 0, .35); }
.hx-tip__body { padding: 10px 12px 12px; }
.hx-tip__label { margin: 0 0 6px; color: var(--muted); font-size: 12px; }
.hx-tip__cands { display: grid; gap: 2px; font-size: 13.5px; font-weight: 700; }
.hx-tip__d { color: var(--blue); }
.hx-tip__r { color: var(--red); }
.hx-tip__stats { display: grid; grid-template-columns: repeat(3, 1fr); gap: 0; margin: 10px 0 0; border-top: 1px solid var(--rule); }
.hx-tip__stats div { padding: 6px 8px 0 0; border-radius: 0; background: none; }
.hx-tip__stats dt { color: var(--muted); font-size: 10px; font-weight: 800; letter-spacing: .06em; text-transform: uppercase; }
.hx-tip__stats dd { margin: 2px 0 0; color: var(--ink); font-size: 14px; font-weight: 800; font-variant-numeric: tabular-nums; }
.hx-tip__meta { margin: 8px 0 0; color: var(--muted); font-size: 12px; }

/* Toss-up races: a ruled grid of entries, each topped by its rating color. */
.hx-cards { display: grid; grid-template-columns: repeat(auto-fill, minmax(220px, 1fr)); gap: 0 28px; margin-top: 14px; }
.hx-cards .is-extra { display: none; }
.hx-cards.is-open .is-extra { display: flex; }
.hx-card {
  position: relative; display: flex; flex-direction: column; gap: 8px; padding: 12px 0 16px;
  border: 0; border-top: 2px solid var(--hx-card); border-radius: 0; background: none; color: var(--ink);
  font: inherit; text-align: left; cursor: pointer;
}
.hx-card:hover .hx-card__top strong { text-decoration: underline; text-underline-offset: 3px; }
.hx-card__top { display: flex; align-items: center; justify-content: space-between; gap: 8px; }
.hx-card__top strong { font-size: 16px; letter-spacing: -.01em; }
.hx-card__names { display: grid; gap: 2px; font-size: 13.5px; font-weight: 700; }
.hx-meter { display: flex; gap: 2px; height: 6px; overflow: hidden; border-radius: 0; background: var(--surface-3); }
.hx-meter__d { background: var(--blue); }
.hx-meter__r { margin-left: auto; background: var(--red); }
.hx-card__odds { display: flex; justify-content: space-between; font-size: 13px; font-weight: 800; font-variant-numeric: tabular-nums; }
.hx-card__foot { display: flex; flex-wrap: wrap; justify-content: space-between; gap: 4px 8px; padding-top: 6px; border-top: 1px solid var(--rule-faint); color: var(--muted); font-size: 11.5px; font-weight: 600; }
.hx-card__foot em { color: var(--gold); font-style: normal; font-weight: 800; }
.hx-more, .gx-more {
  display: block; width: 100%; margin: 4px 0 0; padding: 12px; border: 0; border-top: 1px solid var(--rule); border-bottom: 1px solid var(--rule); border-radius: 0;
  background: none; color: var(--ink); font: 700 13px var(--sans); cursor: pointer;
}
.hx-more:hover { background: var(--surface-2); }

.hx-flips { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 0 40px; margin-top: 14px; }
.hx-flipcol { padding: 12px 0 0; border: 0; border-radius: 0; background: none; min-width: 0; }
.hx-flipcol--d { box-shadow: none; border-top: 2px solid var(--blue); }
.hx-flipcol--r { box-shadow: none; border-top: 2px solid var(--red); }
.hx-flipcol__head { display: flex; align-items: baseline; gap: 10px; margin-bottom: 6px; flex-wrap: wrap; }
.hx-flipcol__head b { font-size: 2rem; font-weight: 800; letter-spacing: -.03em; line-height: 1; }
.hx-flipcol--d .hx-flipcol__head b { color: var(--blue); }
.hx-flipcol--r .hx-flipcol__head b { color: var(--red); }
.hx-flipcol__head span { color: var(--ink-soft); font-size: 13.5px; font-weight: 700; }
.hx-fliplist { max-height: 420px; margin: 0; padding: 0; overflow-y: auto; list-style: none; scrollbar-width: thin; }
.hx-flip {
  display: flex; width: 100%; align-items: center; gap: 10px; padding: 8px 0; border: 0; border-bottom: 1px solid var(--rule-faint);
  background: none; color: var(--ink); font: inherit; text-align: left; cursor: pointer;
}
.hx-flip:hover { background: rgba(255, 255, 255, .03); }
.hx-flip i { flex: none; width: 9px; height: 9px; border-radius: 1px; }
.hx-flip__main { display: flex; min-width: 0; flex: 1; flex-direction: column; }
.hx-flip__main strong { font-size: 13.5px; }
.hx-flip__main span { overflow: hidden; color: var(--muted); font-size: 12px; text-overflow: ellipsis; white-space: nowrap; }
.hx-flip__m { font-size: 13px; font-weight: 800; font-variant-numeric: tabular-nums; }
.hx-empty { color: var(--muted); font-size: 13px; }

@media (max-width: 760px) {
  .hx-flips { grid-template-columns: minmax(0, 1fr); gap: 24px; }
  .hx-hemi__big { font-size: 52px; }
  .hx-seats__finder { flex-basis: 100%; }
  .hx-chips { flex-wrap: nowrap; overflow-x: auto; scrollbar-width: none; gap: 18px; }
  .hx-chips::-webkit-scrollbar { display: none; }
  .hx-chip { flex: none; }
  .hx-flip .rating-badge { display: none !important; }
}
@media (prefers-reduced-motion: reduce) {
  .hx-dot { transition: none; }
}

/* ===================================================== Governor extras */
.gx-tiles { display: grid; grid-template-columns: repeat(11, minmax(0, 1fr)); gap: 4px; max-width: 820px; margin: 18px auto 0; }
.gx-tile {
  display: flex; aspect-ratio: 1; flex-direction: column; align-items: center; justify-content: center; gap: 2px;
  border-radius: 2px; color: #fff; text-decoration: none;
  text-shadow: 0 1px 1px rgba(0, 0, 0, .3);
}
a.gx-tile:hover, a.gx-tile:focus-visible { z-index: 2; box-shadow: 0 0 0 2px var(--ink); }
.gx-tile strong { font-size: clamp(11px, 1.5vw, 16px); font-weight: 800; letter-spacing: .02em; }
.gx-tile span { font-size: clamp(8.5px, 1vw, 11px); font-weight: 700; font-variant-numeric: tabular-nums; opacity: .92; }
.gx-tile.is-light { color: #10151b; text-shadow: none; }
.gx-tile--none, .gx-none-swatch {
  border: 1px solid var(--rule);
  background: transparent;
  color: var(--muted);
  text-shadow: none;
}
.gx-tile--none span { font-weight: 600; opacity: .75; }
.gx-tile__ind { font-size: 8.5px; font-style: normal; font-weight: 800; letter-spacing: .08em; opacity: .9; }

.gx-controls { display: flex; flex-wrap: wrap; align-items: flex-end; justify-content: space-between; gap: 12px 24px; margin-top: 14px; }
.gx-controls .hx-chips { margin: 0; }
.gx-search { max-width: 320px; }
.gx-table-wrap { margin-top: 10px; }
.gx-table { width: 100%; border-collapse: collapse; }
.gx-table th, .gx-table td { padding: 10px 12px 10px 0; text-align: left; }
.gx-sort {
  display: inline-flex; align-items: center; gap: 6px; padding: 0; border: 0; background: none;
  color: inherit; font: inherit; letter-spacing: inherit; text-transform: inherit; cursor: pointer;
}
.gx-sort::after { content: "↕"; opacity: .35; font-size: 11px; }
.gx-sort.is-active { color: var(--ink); }
th[aria-sort="ascending"] .gx-sort::after { content: "↑"; opacity: 1; }
th[aria-sort="descending"] .gx-sort::after { content: "↓"; opacity: 1; }
.gx-state { color: var(--ink); font-weight: 800; text-decoration: none; }
.gx-state:hover { text-decoration: underline; text-underline-offset: 3px; }
.gx-match { display: grid; gap: 1px; font-size: 13px; font-weight: 700; }
.gx-num { font-weight: 800; font-variant-numeric: tabular-nums; white-space: nowrap; }
.gx-chance { min-width: 170px; }
.gx-chance .hx-card__odds { margin-top: 5px; font-size: 12px; }
.gx-muted { color: var(--muted); font-size: 12.5px; }
.gx-count { margin: 10px 0 0; color: var(--muted); font-size: 12.5px; }
@media (max-width: 760px) {
  .gx-tiles { gap: 3px; }
  .gx-tile span { display: none; }
  .gx-search { max-width: none; }
  .gx-table thead th:nth-child(2), .gx-table td.gx-match, .gx-table thead th:nth-child(6), .gx-table tbody td:last-child { display: none; }
  .gx-chance { min-width: 110px; }
}

/* ===================================================== Site-wide finder */
html.finder-open { overflow: hidden; }
.finder {
  position: fixed; inset: 0; z-index: 300; display: flex; align-items: flex-start; justify-content: center; padding: 10vh 16px 16px;
  background: rgba(5, 6, 8, .72);
}
.finder[hidden] { display: none; }
.finder__panel {
  width: min(620px, 100%); overflow: hidden; border: 1px solid var(--rule-strong); border-radius: var(--radius-sm);
  background: var(--surface-2); box-shadow: 0 32px 64px -24px rgba(0, 0, 0, .9);
}
.finder__input {
  width: 100%; padding: 16px 18px 16px 46px; border: 0; border-bottom: 1px solid var(--rule); outline: 0;
  background: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='18' height='18' viewBox='0 0 16 16'%3E%3Ccircle cx='7' cy='7' r='5.2' fill='none' stroke='%23949ba3' stroke-width='1.6'/%3E%3Cpath d='M11 11l3.6 3.6' stroke='%23949ba3' stroke-width='1.6' stroke-linecap='round'/%3E%3C/svg%3E") no-repeat 18px center;
  color: var(--ink); font: 500 16px var(--sans);
}
.finder__input::placeholder { color: var(--muted); }
.finder__list { max-height: min(56vh, 520px); margin: 0; padding: 6px; overflow-y: auto; list-style: none; }
.finder__item a { display: flex; align-items: center; gap: 12px; padding: 9px 10px; border-radius: var(--radius-xs); color: var(--ink); text-decoration: none; }
.finder__item[aria-selected="true"] a { background: var(--surface-3); }
.finder__kind {
  flex: none; min-width: 66px; padding: 2px 0 2px 8px; border-left: 3px solid var(--finder, var(--rule-strong));
  color: var(--muted); font: 800 10.5px var(--sans); letter-spacing: .06em; text-transform: uppercase;
}
.finder__main { display: flex; min-width: 0; flex: 1; flex-direction: column; }
.finder__main strong { overflow: hidden; font-size: 14.5px; text-overflow: ellipsis; white-space: nowrap; }
.finder__main span { overflow: hidden; color: var(--muted); font-size: 12.5px; text-overflow: ellipsis; white-space: nowrap; }
.finder__margin { font-size: 13px; font-weight: 800; font-variant-numeric: tabular-nums; }
.finder__empty { padding: 18px 12px; color: var(--muted); font-size: 14px; }
.finder__foot { margin: 0; padding: 9px 16px; border-top: 1px solid var(--rule); color: var(--muted); font-size: 11.5px; }
@media (max-width: 720px) {
  .finder { padding-top: 12px; }
}

.hx-tip__i, .is-i { color: var(--purple); }
.forecast-page--house .house-map-panel, #house-seats, #house-tossups, #house-flips { scroll-margin-top: 72px; }

/* ===================================================== Mobile polish */
@media (max-width: 640px) {
  .sd-chip__link { grid-template-columns: auto minmax(0, 1fr); grid-template-areas: "state state" "margin tier"; column-gap: 8px; row-gap: 1px; }
  .sd-chip__state { white-space: normal; overflow: visible; line-height: 1.2; }
  .sd-chip__tier { align-self: center; margin-top: 0; }
  .page-polls .poll-table tr { gap: 4px 12px; padding: 12px 0; }
  .page-polls .poll-table td { padding-top: 0; padding-bottom: 0; }
  .page-polls .poll-table td:nth-child(5) { padding-top: 6px; }

  /* Polls archive filters: label on its own line, filters in one swipeable row. */
  .page-polls .poll-controls { display: grid; grid-template-columns: minmax(0, 1fr); gap: 8px; }
  .page-polls .filter-label, .page-polls .poll-search-label { grid-column: 1; }
  .page-polls .filter-buttons { grid-column: 1; flex-wrap: nowrap; gap: 6px; overflow-x: auto; scrollbar-width: none; }
  .page-polls .filter-buttons::-webkit-scrollbar { display: none; }
  .page-polls .poll-filter { flex: none; padding: 6px 12px; border: 1px solid var(--rule-strong); border-radius: var(--radius-sm); }
  .page-polls .poll-filter[aria-pressed="true"], .page-polls .poll-filter.is-active { border-color: var(--ink); background: var(--ink); color: var(--paper); }
  .page-polls .poll-search { grid-column: 1; width: 100%; padding: 8px 12px; border: 1px solid var(--rule-strong); border-radius: var(--radius-sm); background: var(--paper); }

  /* House scenario table: keep the scenario names readable. */
  .forecast-page--house .house-diagnostics .data-table { min-width: 520px; }
  .forecast-page--house .house-diagnostics .data-table th[scope="row"] { min-width: 150px; }
  .forecast-page--house .house-diagnostics caption { text-align: left; }
}


/* =====================================================================
   v8 (Oct 18): editorial unification.
   Replaces the v6 module-card layer. One page color, hairline and heavy
   rules instead of boxes, column rules instead of gutters-with-cards,
   square rating tags instead of pills, underlined text tabs instead of
   segmented controls. One content width on every page. Presentation only:
   no forecast value, label or route is created here.
   ===================================================================== */
:root {
  --shell: 1320px;
  --shell-w: min(var(--shell), calc(100% - 48px));
  --col-gap: clamp(28px, 3vw, 44px);
  --gap-section: clamp(44px, 4.4vw, 60px);
  --rule-heavy: transparent;
  --tag-ink-dark: #0b1a29;
  /* Old module tokens, kept so scripts and page sheets that read them still
     resolve, now pointing at the flat page. */
  --card: var(--paper);
  --card-2: var(--paper);
  --card-rule: var(--rule);
  --card-rule-strong: var(--rule-strong);
  --card-radius: 0;
  --card-pad: 0;
  --grid-gap: var(--col-gap);
  --pill: 2px;
}
@media (max-width: 760px) {
  :root { --shell-w: calc(100% - 32px); --gap-section: 36px; --col-gap: 20px; }
}

/* ------------------------------------------------------------ Shell */
/* Header, ticker, content and footer share one measure on every page. */
.site-header__inner,
.page-race:not(.page-txsim) .site-header__inner,
.page-race:not(.page-txsim) .site-header-inner,
.ticker__inner,
.home-page > .shell,
body:has(main.home-page) .site-header__inner,
body:has(main.home-page) .ticker__inner,
.site-footer .wrap,
.page-race:not(.page-txsim) .site-footer .wrap { width: var(--shell-w) !important; max-width: none !important; }
.forecast-page.shell, main.forecast-page, .sd-page > .shell, .sd-page.shell { width: var(--shell-w); max-width: none; }

/* ------------------------------------------------------------ Masthead */
.site-header { position: sticky; top: 0; z-index: 60; border-bottom: 1px solid var(--rule); background: var(--masthead); }
.site-header__inner { min-height: 56px; }

/* Ticker: a line of type under the masthead, not a row of chips. */
.ticker { border-top: 1px solid var(--rule-faint); }
.ticker__inner { display: flex; align-items: center; gap: 18px; min-height: 36px; margin: 0 auto; }
.ticker__label { flex: none; color: var(--muted); font: 800 10.5px/1 var(--sans); letter-spacing: .12em; text-transform: uppercase; }
.ticker__track { display: flex; gap: 0; min-width: 0; overflow-x: auto; scrollbar-width: none; -webkit-mask-image: linear-gradient(90deg, #000 94%, transparent); mask-image: linear-gradient(90deg, #000 94%, transparent); }
.ticker__track::-webkit-scrollbar { display: none; }
.ticker__item { display: inline-flex; flex: none; align-items: center; gap: 6px; padding: 2px 14px; border: 0; border-left: 1px solid var(--rule); color: var(--ink-soft); font: 700 12.5px/1.2 var(--sans); text-decoration: none; white-space: nowrap; }
.ticker__item:first-child { padding-left: 0; border-left: 0; }
.ticker__item:hover span { color: var(--ink); text-decoration: underline; text-underline-offset: 3px; }
.ticker__item i { width: 8px; height: 8px; border-radius: 1px; }
.ticker__item b { font-weight: 800; font-variant-numeric: tabular-nums; }
.ticker__item .is-d { color: var(--blue); }
.ticker__item .is-r { color: var(--red); }
.ticker__item .is-i { color: var(--purple, #a283e0); }
.ticker__more { flex: none; color: var(--ink-soft); font: 700 12.5px var(--sans); text-decoration: none; }
.ticker__more:hover { color: var(--ink); text-decoration: underline; text-underline-offset: 3px; }
@media (max-width: 800px) {
  .ticker__inner { gap: 10px; min-height: 34px; }
  .ticker__label, .ticker__more { display: none; }
  .ticker__item { padding: 2px 10px; }
}

/* ------------------------------------------------------------ Section system */
/* A section opens on a heavy rule; sub-blocks inside it use hairlines. */
.home-page .closest-races,
.home-page .fh-home,
.home-page .home-house,
.sd-page .sd-section,
.forecast-page > .panel,
.forecast-page > .content-section,
.forecast-page > .rc-section {
  margin-top: var(--gap-section) !important;
  padding: 14px 0 0 !important;
  border: 0 !important;
  border-top: 2px solid var(--rule-heavy) !important;
  border-radius: 0 !important;
  background: none !important;
  box-shadow: none !important;
}
.forecast-page > .panel > .panel-header:first-child,
.forecast-page > .content-section > .section-heading:first-child,
.sd-page .sd-section > .sd-section__head:first-child,
.home-page .fh-home__head,
.home-page .home-house__header { padding-top: 0 !important; border-top: 0 !important; }
.forecast-page > .governor-seat-panel { border-radius: 0 !important; background: none !important; box-shadow: none !important; }

/* Kickers: one treatment everywhere. */
.module-kicker, .home-page .fh-kicker, .sd-section__head .sd-kicker, .sd-kicker, .home-feature__kicker,
.page-race .eyebrow, .page-race .detail-kicker, .page-race .cg-range__title {
  color: var(--ink-soft) !important;
  font: 800 11px/1.3 var(--sans) !important;
  letter-spacing: .1em !important;
  text-transform: uppercase !important;
}
.page-race .eyebrow::first-letter, .page-race .detail-kicker::first-letter, .page-race .cg-range__title::first-letter { text-transform: none; }

/* Experimental disclosure: a ruled note with an amber edge. */
.forecast-page > .model-disclosure,
.page-race .model-disclosure {
  margin-top: 20px !important;
  padding: 2px 0 2px 16px !important;
  border: 0 !important;
  border-left: 2px solid var(--amber) !important;
  border-radius: 0 !important;
  background: none !important;
  box-shadow: none !important;
}

/* ------------------------------------------------------------ Tags and tabs */
/* Rating as a square swatch and a word, the way a map key reads. */
.rc-card__rating, .sd-tipping__rating {
  display: inline-flex; flex: none; align-items: center; gap: 6px; padding: 0; border: 0; border-radius: 0; background: none;
  color: var(--ink-soft); font: 700 11.5px/1.3 var(--sans); white-space: nowrap;
}
.rc-card__rating::before, .sd-tipping__rating::before { content: ""; width: 9px; height: 9px; border-radius: 1px; background: var(--rc-dot, #858b91); }
.rc-card__tag { padding: 0; border: 0; border-radius: 0; color: var(--amber); font: 800 10px/1.2 var(--sans); letter-spacing: .08em; text-transform: uppercase; }
.home-page .home-closest .rating-badge { padding: 2px 6px !important; border: 0 !important; border-radius: var(--radius-xs) !important; }

/* Every view switch is a row of underlined words. */
.map-office-toggle, .sd-views, .rc-filters {
  display: inline-flex !important; gap: 18px !important; padding: 0 !important;
  border: 0 !important; border-radius: 0 !important; background: none !important;
}
.map-office-toggle button, .sd-views [role="tab"], .rc-filters button {
  padding: 6px 0 7px !important; border: 0 !important; border-radius: 0 !important; background: none !important; box-shadow: none !important;
  color: var(--muted) !important; font: 700 13px/1 var(--sans) !important; cursor: pointer;
}
.map-office-toggle button:hover, .sd-views [role="tab"]:hover, .rc-filters button:hover { color: var(--ink) !important; }
.map-office-toggle button[aria-pressed="true"], .sd-views [role="tab"][aria-selected="true"], .rc-filters button[aria-pressed="true"] {
  background: none !important; color: var(--ink) !important; box-shadow: inset 0 -2px 0 var(--ink) !important;
}

/* ------------------------------------------------------------ Homepage */
.home-page > .shell { display: block; padding-top: 0; }
.home-page > .shell > * { min-width: 0; }

/* The three outlooks: one ruled row of columns. */
.home-page .scoreboard { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 0; margin: 0 !important; border: 0 !important; border-bottom: 1px solid var(--rule) !important; background: none !important; }
.home-page .scoreboard__card, .home-page .scoreboard__card + .scoreboard__card {
  padding: 18px var(--col-gap) 16px !important; border: 0 !important; border-left: 1px solid var(--rule) !important; border-radius: 0 !important; background: none !important; box-shadow: none !important; transform: none !important;
}
.home-page .scoreboard__card:first-child { padding-left: 0 !important; border-left: 0 !important; }
.home-page .scoreboard__card:last-child { padding-right: 0 !important; }
.home-page .scoreboard__bar { height: 8px; border-radius: 0; }
.home-page .scoreboard__go { color: var(--ink-soft); font-size: 12.5px; }
.home-page .scoreboard__card:hover .scoreboard__go { color: var(--ink); }

/* Flagship: the verdict column, a column rule, and the map. */
.home-page .flagship-story {
  display: grid !important;
  grid-template-columns: minmax(300px, 340px) minmax(0, 1fr) !important;
  gap: 0 !important;
  align-items: start !important;
  margin-top: 0 !important;
  padding: 0 !important;
  border: 0 !important;
}
.home-page .flagship-copy,
.home-page .home-map-widget { margin: 0 !important; border: 0 !important; border-radius: 0 !important; background: none !important; box-shadow: none !important; }
.home-page .flagship-copy { display: flex; flex-direction: column; padding: 26px var(--col-gap) 0 0 !important; }
.home-page .home-map-widget { display: flex; flex-direction: column; align-self: stretch; padding: 20px 0 0 var(--col-gap) !important; border-left: 1px solid var(--rule) !important; }
.home-page .flagship-copy > .eyebrow { justify-content: flex-start !important; text-align: left !important; }
.home-page .flagship-copy > #home-title, .home-page .flagship-copy > .story-meta { text-align: left !important; }
.home-page .flagship-copy #home-title { white-space: normal !important; font-size: clamp(1.8rem, 2.5vw, 2.35rem) !important; line-height: 1.06; }
.home-page .flagship-copy .story-meta { margin-bottom: 18px; cursor: help; }
.home-page .flagship-copy .home-needle { max-width: 100%; }
.home-page .flagship-copy .seat-figures { margin-top: 4px; padding-top: 12px; border-top: 1px solid var(--rule-faint); }
.home-page .flagship-copy .seat-figure { grid-template-columns: 1fr; gap: 2px; }
.home-page .flagship-copy .seat-figure--rep { text-align: right; }
.home-page .home-map-widget__header { display: flex; flex-wrap: wrap; align-items: center; justify-content: space-between; gap: 8px 16px; margin-bottom: 4px; border-bottom: 1px solid var(--rule); }
.home-page .home-map-widget__header .map-office-toggle { border-bottom: 0 !important; }
.home-page .home-map-widget .senate-map-shell, .home-page .home-map-widget .senate-map-canvas { background: transparent !important; }
.home-page .home-map-widget__figure { display: flex; flex-direction: column; margin: 0; }
/* The map keeps its drawing's proportions, so it never floats in a letterbox. */
.home-page .home-map-widget:not(.is-house) .senate-map-shell { flex: none; width: 100%; height: auto !important; min-height: 0 !important; aspect-ratio: 960 / 520; }
.home-page .home-map-widget .senate-map-legend { margin-top: 8px; padding-top: 10px; border-top: 1px solid var(--rule-faint); }
.home-page .home-map-widget .map-caption { margin-top: 6px; }
.home-page .home-map-widget__figure[hidden] { display: none !important; }
.home-page .home-map-widget.is-house .home-house__map-wrap { position: relative; flex: none; height: auto; min-height: 0; padding: 0 !important; aspect-ratio: 960 / 520; }
.home-page .home-map-widget.is-house #home-house-map { display: block; width: 100%; height: 100%; background: transparent; }

/* Lead-column footer: the tipping-point race, set as a ruled block. */
.home-feature { margin-top: 18px; padding-top: 0; }
.home-feature__race, .home-feature__house {
  position: relative; display: flex; flex-direction: column; gap: 9px; padding: 12px 0 0; overflow: visible;
  border: 0; border-top: 2px solid var(--rc-accent, var(--rule-strong)); border-radius: 0; background: none; color: var(--ink); text-decoration: none;
}
.home-feature__house { border-top-color: var(--rule-strong); }
.home-feature__race::before { content: none; }
.home-feature__race:hover, .home-feature__house:hover { background: none; }
.home-feature__race:hover .home-feature__head strong, .home-feature__house:hover .home-feature__cta { text-decoration: underline; text-underline-offset: 3px; }
.home-feature__head { display: flex; align-items: baseline; justify-content: space-between; gap: 10px; }
.home-feature__head strong { font: 700 1.4rem/1.1 var(--serif); }
.home-feature__note { margin: -2px 0 2px; color: var(--muted); font-size: 13px; line-height: 1.4; }
.home-feature__cta { display: inline-flex; align-self: flex-start; gap: 4px; margin-top: 2px; padding: 0; border-radius: 0; background: none; box-shadow: none; color: var(--ink); font: 700 13px/1.2 var(--sans); text-decoration: underline; text-decoration-color: var(--rule-strong); text-underline-offset: 4px; }
.home-feature__race:hover .home-feature__cta, .home-feature__house:hover .home-feature__cta { background: none; text-decoration-color: var(--ink); }
.home-feature__arc svg { display: block; width: 100%; height: auto; }
.home-feature__majority { stroke: var(--ink); stroke-width: 1.2; stroke-dasharray: 2 3; }
.home-feature__keys { display: flex; flex-wrap: wrap; gap: 4px 10px; margin-top: 6px; color: var(--ink-soft); font: 600 11px/1.3 var(--sans); }
.home-feature__keys span { display: inline-flex; align-items: center; gap: 5px; }
.home-feature__keys i { width: 8px; height: 8px; border-radius: 1px; }

/* Governor and House leads in the explorer. */
.home-gov-odds { display: grid; gap: 10px; margin: 6px 0 6px; }
.home-gov-odds__title { margin: 0; color: var(--ink); font: 700 14px var(--sans); }
.home-gov-odds .scoreboard__lead { font-size: 13px; }
.home-gov-odds .scoreboard__num { font-size: 2.15rem; }
.home-gov-odds .scoreboard__bar { height: 10px; border-radius: 0; }
.home-gov-odds .scoreboard__meta { color: var(--ink-soft); font-size: 13px; }
.home-house-needle .cg-slot { width: 100%; }
.home-page .home-house.is-map-lent .home-house__content { grid-template-columns: 1fr !important; }
.home-page .home-house.is-map-lent > .house-map-legend { display: none; }
.home-gov-odds[hidden], .home-house-needle[hidden], .home-page .flagship-copy .home-needle[hidden] { display: none !important; }

/* Closest races: five columns between rules, every column the same rows. */
.home-closest .race-table-wrap[hidden] { display: none !important; }
.home-page .flagship-races-heading { display: flex; align-items: baseline; justify-content: space-between; gap: 16px; margin-bottom: 0; padding: 0 0 12px !important; border: 0 !important; }
.home-page .flagship-races-heading h2 { font-size: clamp(1.3rem, 1.8vw, 1.55rem) !important; }
.hc-grid { display: grid; grid-template-columns: repeat(5, minmax(0, 1fr)); gap: 0; margin-top: 0; border-top: 1px solid var(--rule); }
.hc-card {
  position: relative; display: grid; grid-template-rows: auto auto auto auto 1fr; gap: 10px; min-width: 0; padding: 14px 20px 6px;
  overflow: visible; border: 0; border-left: 1px solid var(--rule); border-radius: 0; background: none; color: var(--ink); text-decoration: none; transform: none !important;
}
.hc-card:first-child { padding-left: 0; border-left: 0; }
.hc-card:last-child { padding-right: 0; }
.hc-card::before { content: ""; position: absolute; top: -1px; left: 20px; right: 20px; height: 3px; background: var(--rc-accent, #858b91); }
.hc-card:first-child::before { left: 0; }
.hc-card:last-child::before { right: 0; }
.hc-card:hover, .hc-card:focus-visible { border-color: var(--rule); }
.hc-card:hover .hc-card__title strong { text-decoration: underline; text-underline-offset: 3px; }
.hc-card__top { display: flex; align-items: flex-start; justify-content: space-between; gap: 8px; }
.hc-card__title { display: flex; flex-wrap: wrap; align-items: baseline; gap: 2px 7px; min-width: 0; color: var(--ink); }
.hc-card__title strong { display: inline; font: 800 16px/1.2 var(--sans); letter-spacing: -.005em; }
.hc-card__title span, .hc-card__title small { display: inline; margin: 0; color: var(--muted); font-size: 11px; font-weight: 700; letter-spacing: .06em; text-transform: uppercase; }
.hc-card__title .rc-card__tag { color: var(--amber); }
.hc-card__margin { display: flex; align-items: baseline; gap: 6px; color: var(--muted); font-size: 10.5px; font-weight: 700; letter-spacing: .08em; text-transform: uppercase; }
.hc-card__margin strong { font-size: 30px; font-weight: 800; letter-spacing: -.02em; line-height: 1; text-transform: none; font-variant-numeric: tabular-nums; color: var(--ink-soft); }
.hc-card__margin strong.is-d { color: var(--blue); }
.hc-card__margin strong.is-r { color: var(--red); }
.hc-card__margin strong.is-i { color: var(--purple, #a88be6); }
.hc-card__range { display: grid; gap: 4px; }
.hc-card__label { color: var(--muted); font-size: 10px; font-weight: 800; letter-spacing: .08em; text-transform: uppercase; }
.hc-range { display: block; width: 100%; height: 34px; overflow: visible; }
.hc-range__side { opacity: .2; }
.hc-range__side--d { fill: #2f78b7; }
.hc-range__side--r { fill: #b44f49; }
.hc-range__side--i { fill: #7a5cc4; }
.hc-range__band { fill: rgba(236, 235, 232, .3); }
.hc-range__zero { stroke: #6b7076; stroke-width: 1; }
.hc-range__dot { stroke: var(--paper); stroke-width: 2; fill: #858b91; }
.hc-range__dot.is-d { fill: #4f93cf; }
.hc-range__dot.is-r { fill: #d0625a; }
.hc-range__dot.is-i { fill: #9878dd; }
.hc-range__tick { fill: var(--muted); font-size: 10px; font-weight: 700; font-variant-numeric: tabular-nums; }
.hc-card .rc-card__foot { align-self: end; margin-top: 0; }
@media (max-width: 1100px) {
  .hc-grid { grid-template-columns: repeat(3, minmax(0, 1fr)); }
  .hc-card:nth-child(3n + 1) { padding-left: 0; border-left: 0; }
  .hc-card:nth-child(3n + 1)::before { left: 0; }
  .hc-card:nth-child(n + 4) { margin-top: 18px; }
}
@media (max-width: 700px) {
  .hc-grid { display: flex; overflow-x: auto; scroll-snap-type: x mandatory; gap: 0; padding-bottom: 6px; border-top: 0; scrollbar-width: thin; }
  .hc-card, .hc-card:nth-child(n) { flex: 0 0 76%; margin-top: 0; padding: 14px 16px 6px; border-top: 1px solid var(--rule); scroll-snap-align: start; }
  .hc-card:first-child { padding-left: 0; }
  .hc-card:nth-child(n)::before { left: 16px; right: 16px; }
  .hc-card:first-child::before { left: 0; }
}

/* Over time and House modules keep their internals. */
.home-page .fh-home__foot { background: transparent !important; }
.home-page .home-house__content .home-house__races { border-top: 0; }
.home-page .home-house__forecast-link { justify-self: end; margin-bottom: 12px; }
@media (min-width: 901px) {
  .home-page .home-house { display: grid; grid-template-columns: minmax(0, 1fr) 360px; column-gap: 0; }
  .home-page .home-house__header { grid-column: 1; grid-row: 1; padding-right: var(--col-gap); }
  .home-page .home-house__content { display: contents; }
  .home-page .home-house__content .home-house__map-wrap { grid-column: 1; grid-row: 2; width: calc(100% - var(--col-gap)); height: auto; min-height: 0; margin-top: 14px; aspect-ratio: 960 / 520; }
  .home-page .home-house__content .home-house__races { grid-column: 2; grid-row: 1 / span 2; grid-template-rows: auto auto auto minmax(0, 1fr); align-self: stretch; height: auto; padding-left: 28px; border-left: 1px solid var(--rule); border-top: 0 !important; }
  .home-page .home-house__races > * { min-width: 0; max-width: 100%; }
  .home-page .home-house__races table { width: 100%; }
  .home-page .home-house > .house-map-legend, .home-page .home-house > .house-map-status { grid-column: 1 / -1; }
}
@media (max-width: 900px) {
  .home-page .home-house__content .home-house__races { grid-template-rows: auto auto auto 380px; }
}
/* Over time: headline and chart on the left, the race shifts as a rail that
   starts at the headline instead of below it. */
@media (min-width: 1000px) {
  .home-page .fh-home { display: grid; grid-template-columns: minmax(0, 1.55fr) minmax(0, 1fr); column-gap: 0; }
  .home-page .fh-home__head { grid-column: 1; grid-row: 1; max-width: none !important; padding-right: var(--col-gap); }
  .home-page .fh-home__body { display: contents; }
  .home-page .fh-home__figure { grid-column: 1; grid-row: 2; margin-top: 22px; padding-right: var(--col-gap); }
  .home-page .fh-home__rail { grid-column: 2; grid-row: 1 / span 2; align-self: start; padding-left: var(--col-gap); border-left: 1px solid var(--rule); }
  .home-page .fh-home__foot { grid-column: 1 / -1; grid-row: 3; }
}

@media (max-width: 900px) {
  .home-page .flagship-story { grid-template-columns: minmax(0, 1fr) !important; }
  .home-page .flagship-story > * { min-width: 0; }
  .home-page .flagship-copy { padding: 22px 0 0 !important; }
  .home-page .home-map-widget { margin-top: 26px !important; padding: 14px 0 0 !important; border-left: 0 !important; border-top: 2px solid var(--rule-heavy) !important; }
  .home-page .flagship-copy .home-needle, .home-page .flagship-copy .cg-needle__svg { max-width: 100%; }
  .home-page .flagship-copy .home-needle { width: min(100%, 420px); margin-inline: auto; }
}
@media (max-width: 860px) {
  .home-page .scoreboard { grid-template-columns: 1fr; }
  .home-page .scoreboard__card, .home-page .scoreboard__card + .scoreboard__card { padding: 14px 0 !important; border-left: 0 !important; }
  .home-page .scoreboard__card + .scoreboard__card { border-top: 1px solid var(--rule-faint) !important; }
}

/* ------------------------------------------------------------ Senate overview */
.sd-hero { gap: 0 !important; }
.sd-hero > .sd-odds, .sd-hero > .sd-chamber { margin: 0 !important; padding-top: 18px !important; padding-bottom: 0 !important; border-radius: 0 !important; background: none !important; box-shadow: none !important; border-top: 0 !important; border-right: 0 !important; border-bottom: 0 !important; }
.sd-hero > .sd-odds { padding-left: 0 !important; padding-right: var(--col-gap) !important; border-left: 0 !important; }
.sd-hero > .sd-chamber { padding-left: var(--col-gap) !important; padding-right: 0 !important; border-left: 1px solid var(--rule) !important; }
.sd-hero { border-top: 2px solid var(--rule-heavy); }
@media (max-width: 980px) {
  .sd-hero > .sd-odds { padding-right: 0 !important; padding-bottom: 24px !important; }
  .sd-hero > .sd-chamber { padding-left: 0 !important; border-left: 0 !important; border-top: 1px solid var(--rule) !important; }
}
/* The national map fills the section width at its drawing's proportions. */
.sd-overview .senate-map-shell { height: auto !important; aspect-ratio: 960 / 520; max-height: 760px; }
.sd-overview .senate-map-canvas { height: 100%; }

/* Tipping-point seat: a ruled block inside the odds column. */
.sd-tipping { display: grid; gap: 10px; margin: 22px 0 0; padding: 12px 0 0; border: 0; border-top: 2px solid var(--rule-strong); border-radius: 0; background: none; color: var(--ink); text-decoration: none; }
.sd-tipping:hover, .sd-tipping:focus-visible { border-color: var(--rule-strong); }
.sd-tipping:hover .sd-tipping__state { text-decoration: underline; text-underline-offset: 4px; text-decoration-thickness: 1px; }
.sd-tipping__head { display: flex; align-items: center; justify-content: space-between; gap: 10px; }
.sd-tipping__kicker { margin: 0 !important; }
.sd-tipping__rating--safe-d { --rc-dot: #2f78b7; } .sd-tipping__rating--likely-d { --rc-dot: #5c9bd1; } .sd-tipping__rating--lean-d { --rc-dot: #96bee0; } .sd-tipping__rating--tilt-d { --rc-dot: #c4dbef; }
.sd-tipping__rating--safe-r { --rc-dot: #b44f49; } .sd-tipping__rating--likely-r { --rc-dot: #cf7771; } .sd-tipping__rating--lean-r { --rc-dot: #e2a5a0; } .sd-tipping__rating--tilt-r { --rc-dot: #efcdca; }
.sd-tipping__main { display: flex; align-items: baseline; justify-content: space-between; gap: 12px; }
.sd-tipping__state { font-family: var(--serif); font-size: clamp(26px, 2.6vw, 34px); font-weight: 700; letter-spacing: -.015em; line-height: 1; }
.sd-tipping__margin { font-size: clamp(22px, 2.2vw, 28px); font-weight: 800; font-variant-numeric: tabular-nums; letter-spacing: -.02em; color: var(--ink-soft); }
.sd-tipping__margin--dem { color: var(--blue); } .sd-tipping__margin--rep { color: var(--red); } .sd-tipping__margin--ind { color: var(--purple, #a88be6); }
.sd-tipping__note { margin: 0; color: var(--muted); font-size: 14px; line-height: 1.45; }
.sd-tipping__ladder { display: grid; grid-template-columns: repeat(7, minmax(0, 1fr)); gap: 0; margin: 2px 0 0; padding: 0; list-style: none; border-bottom: 1px solid var(--rule-faint); }
.sd-tipping__step { display: grid; justify-items: center; gap: 1px; padding: 7px 2px 7px; border: 0; border-top: 3px solid #858b91; border-radius: 0; background: none; }
.sd-tipping__step + .sd-tipping__step { box-shadow: inset 1px 0 0 var(--rule-faint); }
.sd-tipping__step--dem { border-top-color: #2f78b7; } .sd-tipping__step--rep { border-top-color: #b44f49; } .sd-tipping__step--ind { border-top-color: #7a5cc4; }
.sd-tipping__step b { font-size: 14px; font-weight: 800; }
.sd-tipping__step small { color: var(--muted); font-size: 11px; font-weight: 700; font-variant-numeric: tabular-nums; }
.sd-tipping__seat { color: #6b7076; font-size: 10px; font-weight: 700; letter-spacing: .04em; }
.sd-tipping__step.is-tip { background: var(--surface-2); box-shadow: inset 0 0 0 1px var(--ink-soft); }
.sd-tipping__step.is-tip .sd-tipping__seat { color: var(--ink); }
.sd-tipping__cta { justify-self: start; padding: 0; border: 0; border-radius: 0; background: none; font-size: 13px; font-weight: 700; text-decoration: underline; text-decoration-color: var(--rule-strong); text-underline-offset: 4px; }
.sd-tipping:hover .sd-tipping__cta { text-decoration-color: var(--ink); }
@media (max-width: 560px) { .sd-tipping__step small { font-size: 9.5px; } }

/* ------------------------------------------------------------ Race cards */
/* Senate and governor pages: a ruled grid of race entries. Each entry is
   topped by its rating color; columns are separated by hairlines. */
.rc-section__head { display: flex; flex-wrap: wrap; align-items: flex-end; justify-content: space-between; gap: 14px 32px; margin-bottom: 4px; }
.rc-section__head h2 { margin: 4px 0 0; font-family: var(--serif); font-size: clamp(1.45rem, 2.2vw, 1.85rem); letter-spacing: -.012em; line-height: 1.12; }
.rc-section__dek { max-width: 640px; margin: 6px 0 0; color: var(--muted); font-size: 14px; line-height: 1.45; }
.rc-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(232px, 1fr)); gap: 0 var(--col-gap); }
.rc-card {
  position: relative; display: flex; flex-direction: column; gap: 10px; min-width: 0; padding: 12px 0 14px;
  overflow: visible; border: 0; border-top: 2px solid var(--rc-accent, #858b91); border-radius: 0; background: none;
  color: var(--ink); text-decoration: none; transform: none !important; margin-top: 18px;
}
.rc-card::before { content: none; }
.rc-card:hover { background: none; }
.rc-card:hover .rc-card__title strong { text-decoration: underline; text-underline-offset: 3px; }
.rc-card:focus-visible { outline: 2px solid var(--focus, #68b7f0); outline-offset: 2px; }
.rc-card[hidden] { display: none; }
.rc-card__head { display: flex; align-items: baseline; justify-content: space-between; gap: 10px; }
.rc-card__title { display: flex; flex-wrap: wrap; align-items: baseline; gap: 2px 7px; min-width: 0; }
.rc-card__title strong { font: 800 15.5px/1.2 var(--sans); letter-spacing: -.005em; }
.rc-card__code { color: var(--muted); font-size: 11px; font-weight: 700; letter-spacing: .06em; }
.rc-card__rows { display: grid; gap: 7px; }
.rc-row { display: grid; grid-template-columns: minmax(0, 1fr) auto; align-items: baseline; gap: 3px 10px; }
.rc-row__name { overflow: hidden; color: var(--ink-soft); font: 600 13.5px/1.25 var(--sans); text-overflow: ellipsis; white-space: nowrap; }
.rc-row__name small { margin-left: 5px; color: var(--muted); font-size: 11px; font-weight: 700; }
.rc-row__val { font: 800 14px/1 var(--sans); font-variant-numeric: tabular-nums; }
.rc-row__bar { grid-column: 1 / -1; height: 4px; overflow: hidden; border-radius: 0; background: var(--surface-3); }
.rc-row__bar i { display: block; height: 100%; border-radius: 0; background: var(--rc-party); opacity: .45; }
.rc-row--d { --rc-party: var(--blue); }
.rc-row--r { --rc-party: var(--red); }
.rc-row--i { --rc-party: var(--purple, #a283e0); }
.rc-row.is-leading .rc-row__name { color: var(--ink); font-weight: 800; }
.rc-row.is-leading .rc-row__val { color: var(--rc-party); }
.rc-row.is-leading .rc-row__bar i { opacity: 1; }
.rc-card__foot { display: flex; justify-content: space-between; gap: 10px; margin: 2px 0 0; padding-top: 9px; border-top: 1px solid var(--rule-faint); }
.rc-card__foot > div:last-child:not(:first-child) { text-align: right; }
.rc-card__foot dt { color: var(--muted); font-size: 9.5px; font-weight: 800; letter-spacing: .05em; text-transform: uppercase; white-space: nowrap; }
.rc-card__foot dd { margin: 2px 0 0; color: var(--ink-soft); font: 700 13px/1.2 var(--sans); font-variant-numeric: tabular-nums; }
.rc-card__foot dd.is-d { color: var(--blue); }
.rc-card__foot dd.is-r { color: var(--red); }
.rc-card__foot dd.is-i { color: var(--purple, #a283e0); }
.rc-card__note { margin: 0; color: var(--muted); font-size: 11.5px; }
@media (max-width: 760px) {
  .rc-grid { grid-template-columns: 1fr; }
  .rc-filters { width: 100%; justify-content: flex-start; }
}

/* ------------------------------------------------------------ Hover cards */
/* Dark body under the party banner, so the map never flashes white. */
.senate-map-tooltip, .house-map-tooltip, .map-tooltip, .polling-trend-tooltip, .forecast-history-tooltip {
  --ink: #f2f2f0;
  --ink-soft: #d9dadb;
  --muted: #9a9fa5;
  --muted-light: #b4b8bd;
  --rule: #2f3236;
  --rule-faint: #26292c;
  --blue: #6aa6dc;
  --red: #e2756d;
  --purple: #a88be6;
  --neutral: #a3a8ae;
  --amber: #d9b45a;
  --bg: #18191b;
  --tip-paper: #18191b;
  border: 1px solid #3a3e43 !important;
  border-radius: 2px;
  box-shadow: 0 12px 28px rgba(0, 0, 0, .55) !important;
}
.senate-map-tooltip [data-lean="d"], .senate-map-tooltip[data-lean="d"], .house-map-tooltip[data-lean="d"], .map-tooltip[data-lean="d"] { --tip-band: #1f5d96; }
.senate-map-tooltip [data-lean="r"], .senate-map-tooltip[data-lean="r"], .house-map-tooltip[data-lean="r"], .map-tooltip[data-lean="r"] { --tip-band: #9c2f29; }
.tip-head { border-bottom: 1px solid rgba(0, 0, 0, .35); }
.tip-cand-bar { background: #2a2d31; border-radius: 0; }
.tip-cand-bar i { border-radius: 0; }
.tip-cand.is-leading .tip-cand-name { color: #fff; }
.tip-verdict { background: #1f2124; }
.tip-stats > div:nth-child(even) { background: #1d1f22; }
.tip-section { color: var(--muted-light); }

/* ------------------------------------------------------------ Map loading */
.map-loading { position: absolute; inset: 0; z-index: 3; display: flex; flex-direction: column; align-items: center; justify-content: center; gap: 10px; background: transparent; pointer-events: none; }
.map-loading[hidden] { display: none !important; }
.map-loading__wheel { width: 28px; height: 28px; border: 2px solid var(--rule); border-top-color: var(--ink-soft); border-radius: 50%; animation: map-spin .9s linear infinite; }
.map-loading__label { color: var(--muted); font-size: 11px; font-weight: 700; letter-spacing: .1em; text-transform: uppercase; }
@keyframes map-spin { to { transform: rotate(360deg); } }
@media (prefers-reduced-motion: reduce) { .map-loading__wheel { animation-duration: 2.4s; } }

/* ------------------------------------------------------------ Race pages */
/* Chance of winning: verdict, needle and outcome range in one ruled block. */
.page-race .race-odds {
  grid-template-columns: minmax(0, 1fr) !important;
  grid-template-areas: "head" "needle" "range" !important;
  gap: 6px !important;
  margin-top: 22px;
  padding: 16px 0 14px !important;
  border: 0 !important;
  border-top: 2px solid var(--rule-heavy) !important;
  border-radius: 0;
  background: none;
}
.page-race .race-odds__copy { align-self: start !important; }
.page-race .race-odds__copy h2 { margin-bottom: 6px !important; }
.page-race .race-odds__needle { justify-self: center; width: 100%; max-width: 380px; margin: 0 auto !important; }
.page-race .race-odds__range { margin-top: 8px; padding-top: 14px; border-top: 1px solid var(--rule-faint); }
.page-race .race-odds + .race-summary-strip { margin-top: 0 !important; border-top: 1px solid var(--rule) !important; }
.page-race .race-summary-strip { padding: 0 !important; border: 0; border-radius: 0 !important; background: none !important; box-shadow: none !important; }
.page-race .wrap > .panel,
.page-race .race-intro + .race-detail ~ .panel { padding: 14px 0 0 !important; border: 0 !important; border-top: 2px solid var(--rule-heavy) !important; border-radius: 0 !important; background: none !important; box-shadow: none !important; }
.page-race #localized-forecast { border-top: 2px solid var(--rule-heavy) !important; }

@media (min-width: 1100px) {
  .page-race:not(.page-txsim) main > .wrap {
    width: var(--shell-w);
    grid-template-columns: minmax(380px, .8fr) minmax(0, 1.2fr);
    column-gap: var(--col-gap);
  }
  /* The map column ends with the forecast column: the map takes the rows the
     verdict, needle and summary use, and nothing hangs below either side. */
  .page-race:not(.page-txsim) #localized-forecast { grid-row: 5 / span 3; align-self: stretch; margin-top: 22px; padding-left: var(--col-gap) !important; border-left: 1px solid var(--rule) !important; border-top: 0 !important; display: flex; flex-direction: column; }
  .page-race:not(.page-txsim) #localized-forecast .localized-layout { flex: 1 1 auto; }
  .page-race:not(.page-txsim) #localized-forecast .localized-map { max-height: 720px; }
  /* History: the two time series side by side, under both columns. */
  .page-race:not(.page-txsim) #forecast-history-preview,
  .page-race:not(.page-txsim) #win-probability-panel { grid-row: 9; align-self: stretch; margin-top: var(--gap-section) !important; }
  .page-race:not(.page-txsim) #forecast-history-preview { grid-column: 1; }
  .page-race:not(.page-txsim) #win-probability-panel { grid-column: 2; padding-left: var(--col-gap) !important; border-left: 1px solid var(--rule) !important; border-top-color: var(--rule-heavy) !important; }
  .page-race:not(.page-txsim) #polling-trend { grid-row: 10; }
  .page-race:not(.page-txsim) #model-breakdown { grid-row: 11; }
  .page-race:not(.page-txsim) #state-polls { grid-row: 12; }
  .page-race:not(.page-txsim) .race-bottom-link { grid-row: 13; }
}
.page-race .forecast-history,
.page-race .polling-trend,
.page-race .model-breakdown,
.page-race .state-polls { margin-top: var(--gap-section); }

/* ------------------------------------------------------------ Editorial nav */
@media (min-width: 801px) {
  .site-header .site-nav {
    align-self: stretch;
    align-items: stretch;
    gap: 26px !important;
    margin-left: auto;
    padding: 0 !important;
    border: 0 !important;
    border-radius: 0 !important;
    background: none !important;
    box-shadow: none !important;
  }
}
.site-header .site-nav a {
  position: relative;
  display: inline-flex;
  align-self: stretch;
  align-items: center;
  min-height: 0 !important;
  padding: 0 !important;
  border: 0 !important;
  border-radius: 0 !important;
  background: none !important;
  box-shadow: none !important;
  color: var(--muted) !important;
  font-size: 14px !important;
  font-weight: 600 !important;
  line-height: 1.2;
  text-decoration: none;
  white-space: nowrap;
}
.site-header .site-nav a:hover,
.site-header .site-nav a:focus-visible { color: var(--ink) !important; background: none !important; box-shadow: none !important; }
.site-header .site-nav a[aria-current="page"] { color: var(--ink) !important; background: none !important; box-shadow: none !important; }
.site-header .site-nav a[aria-current="page"]::after { content: ""; position: absolute; right: 0; bottom: 0; left: 0; height: 2px; background: var(--ink); }
.site-header .site-nav .nav-note {
  position: relative; top: -.55em; margin: 0 0 0 3px !important; padding: 0 !important; border: 0 !important; border-radius: 0 !important; background: none !important;
  color: var(--muted) !important; font-size: 10px !important; font-weight: 600 !important; letter-spacing: .02em !important; line-height: 1; text-transform: lowercase !important;
}
.site-header .site-search {
  gap: 7px; min-height: 32px; padding: 0 0 4px !important; border: 0 !important; border-bottom: 1px solid var(--rule-strong) !important; border-radius: 0 !important;
  background: none !important; color: var(--muted) !important; font: 600 13px var(--sans) !important;
}
.site-header .site-search:hover { border-bottom-color: var(--ink-soft) !important; color: var(--ink) !important; }
.site-header .site-search kbd { padding: 0 !important; border: 0 !important; border-radius: 0 !important; background: none !important; color: var(--muted) !important; font: 600 12px var(--sans) !important; }
.site-header .site-countdown { padding: 0 !important; border: 0 !important; border-radius: 0 !important; background: none !important; color: var(--muted) !important; font-size: 13px !important; font-weight: 600 !important; }
.site-header .site-countdown__days { display: inline; color: var(--muted) !important; }
@media (max-width: 800px) {
  .site-header .menu-toggle { border-radius: 0 !important; }
  .site-header.menu-open .site-nav {
    display: flex; flex-direction: column; align-items: flex-start; gap: 0 !important; padding: 6px 16px 14px !important;
    border-bottom: 1px solid var(--rule) !important; background: var(--masthead) !important;
  }
  .site-header .site-nav a { align-self: flex-start; width: auto !important; min-height: 44px !important; justify-content: flex-start; }
  .site-header .site-nav a[aria-current="page"]::after { bottom: 8px; }
  .site-header .site-nav .nav-note { margin: 0 0 0 4px !important; }
  .site-header.menu-open .ticker { display: none !important; }
}

/* Needles: the gauge and its labels sit on the column's centre line. */
.cg-needle { margin-inline: auto !important; }
.cg-needle__title, .cg-needle__note { text-align: center !important; }

/* ------------------------------------------------------------ National maps */
/* Senate and governor pages: the section's heading, key and note sit in a
   rail at the left; the map takes the rest of the measure at its drawing's
   proportions. Phones and tablets stack them. */
@media (min-width: 1000px) {
  #senate-map-section.sd-map-tile,
  .forecast-page--governor > .governor-map-panel {
    display: grid !important;
    grid-template-columns: minmax(250px, 300px) minmax(0, 1fr);
    grid-template-rows: auto auto 1fr;
    column-gap: 0;
    align-items: start;
  }
  #senate-map-section > .sd-section__head,
  .governor-map-panel > .panel-header { grid-column: 1; grid-row: 1; display: block !important; margin: 0 !important; padding: 0 var(--col-gap) 0 0 !important; border: 0 !important; }
  #senate-map-section > .sd-section__head h2,
  .governor-map-panel > .panel-header h2 { font-size: clamp(1.45rem, 2vw, 1.75rem) !important; }
  #senate-map-section > .sd-section__head .sd-section__note,
  .governor-map-panel > .panel-header .panel-note { margin-top: 10px !important; font-size: 14px !important; line-height: 1.5; }
  .governor-map-panel > .panel-header .latest { display: none; }
  #senate-map-section > .senate-map-shell,
  .governor-map-panel > .governor-map-shell { grid-column: 2; grid-row: 1 / span 3; width: 100%; height: auto !important; min-height: 0 !important; margin: 0 !important; padding: 0 0 0 var(--col-gap) !important; border: 0 !important; border-left: 1px solid var(--rule) !important; aspect-ratio: auto; }
  #senate-map-section .senate-map-canvas,
  .governor-map-panel .governor-map-canvas { width: 100%; height: auto !important; aspect-ratio: 960 / 520; }
  #senate-map-section .senate-map-canvas svg,
  .governor-map-panel .governor-map-canvas svg { width: 100%; height: 100%; }
  /* The key reads down the rail: Democratic ratings, then Republican. */
  #senate-map-section > .senate-map-legend,
  .governor-map-panel > .senate-map-legend { grid-column: 1; grid-row: 2; display: grid !important; grid-template-columns: minmax(0, 1fr); gap: 7px !important; margin: 22px 0 0 !important; padding: 14px var(--col-gap) 0 0 !important; border-top: 1px solid var(--rule) !important; font-size: 12.5px; }
  .governor-map-panel > .map-caption { grid-column: 1; grid-row: 3; margin: 14px 0 0 !important; padding-right: var(--col-gap); color: var(--muted); font-size: 12.5px; line-height: 1.45; }
  #senate-map-section .map-zoom-controls,
  .governor-map-panel .map-zoom-controls { top: 0 !important; left: auto !important; right: 0 !important; }
}

/* ------------------------------------------------------------ House and governor pages */
/* Same skeleton as the Senate page: the verdict, then the topline figures
   beside the seat picture under one heavy rule, then full-width sections.
   Paired sections share a column rule instead of sitting in boxes. */
.forecast-page--house > .house-summary-panel,
.forecast-page--governor > .governor-seat-panel,
.forecast-page--house > #house-seats { border-radius: 0 !important; background: none !important; box-shadow: none !important; }
.forecast-page--governor .rc-grid > .rc-card { flex: none; }
@media (min-width: 1000px) {
  main.forecast-page--house, main.forecast-page--governor {
    display: grid; grid-template-columns: repeat(12, minmax(0, 1fr)); column-gap: 0; align-items: start;
  }
  main.forecast-page--house > *, main.forecast-page--governor > * { grid-column: 1 / -1; grid-row: auto; min-width: 0; }
  /* Verdict at the left; the experimental-model note as a sidenote beside it. */
  main.forecast-page--house > .page-hero, main.forecast-page--governor > .page-hero { grid-column: 1 / span 8; grid-row: 1; padding-right: var(--col-gap); }
  main.forecast-page--house > .model-disclosure, main.forecast-page--governor > .model-disclosure { grid-column: 9 / -1; grid-row: 1; align-self: end; max-width: none; margin: 0 0 4px !important; padding: 2px 0 2px 20px !important; }
  main.forecast-page--house > .model-disclosure .model-disclosure__body,
  main.forecast-page--governor > .model-disclosure .model-disclosure__body { font-size: 13.5px; line-height: 1.5; }

  /* House: control odds | seat-by-seat chart. */
  main.forecast-page--house > .house-summary-panel,
  main.forecast-page--house > #house-seats { grid-row: 3; align-self: stretch; margin-top: var(--gap-section) !important; padding-top: 18px !important; border: 0 !important; border-top: 2px solid var(--rule-heavy) !important; }
  main.forecast-page--house > .house-summary-panel { grid-column: 1 / span 5; display: flex !important; flex-direction: column; justify-content: flex-start; gap: 16px; padding-right: var(--col-gap) !important; padding-left: 0 !important; }
  main.forecast-page--house > #house-seats { grid-column: 6 / -1; padding-left: var(--col-gap) !important; padding-right: 0 !important; border-left: 1px solid var(--rule) !important; }
  /* Seat bar settles at the foot of its column, level with the table beside it. */
  main.forecast-page--governor > .governor-seat-panel .governor-seat-totals { margin-top: 10px !important; }
  main.forecast-page--governor > .governor-race-board-panel tbody th,
  main.forecast-page--governor > .governor-race-board-panel tbody td { padding-top: 6px !important; padding-bottom: 6px !important; }
  main.forecast-page--governor > .governor-race-board-panel .panel-note { font-size: 13px !important; }
  /* House: the figure row settles level with the seat legend beside it. */
  main.forecast-page--house > .house-summary-panel > :last-child { margin-top: auto !important; }
  main.forecast-page--house > .house-map-panel { grid-row: 4; }
  main.forecast-page--house > #house-pull { grid-row: 5; }
  main.forecast-page--house > #house-tossups { grid-row: 6; }
  main.forecast-page--house > #house-states { grid-row: 7; }
  main.forecast-page--house > #house-outlook-dashboard { grid-row: 8; }
  main.forecast-page--house > .house-methodology { grid-row: 9; }
  main.forecast-page--house > .snapshot-static { grid-row: 10; }

  /* Governors: control odds and seat bar | the closest races. */
  main.forecast-page--governor > .governor-seat-panel,
  main.forecast-page--governor > .governor-race-board-panel { grid-row: 3; align-self: stretch; margin-top: var(--gap-section) !important; padding-top: 18px !important; border: 0 !important; border-top: 2px solid var(--rule-heavy) !important; }
  main.forecast-page--governor > .governor-seat-panel { grid-column: 1 / span 5; display: flex !important; flex-direction: column; gap: 14px; padding-right: var(--col-gap) !important; padding-left: 0 !important; }
  main.forecast-page--governor > .governor-race-board-panel { grid-column: 6 / -1; padding-left: var(--col-gap) !important; border-left: 1px solid var(--rule) !important; }
  main.forecast-page--governor > .governor-map-panel { grid-row: 4; }
  main.forecast-page--governor > .rc-section { grid-row: 5; }
  main.forecast-page--governor > #governor-all-races { grid-row: 6; }
  main.forecast-page--governor > .methodology-panel,
  main.forecast-page--governor > .poll-context-panel { grid-row: 7; align-self: stretch; }
  main.forecast-page--governor > .methodology-panel { grid-column: 1 / span 5; padding-right: var(--col-gap) !important; }
  main.forecast-page--governor > .poll-context-panel { grid-column: 6 / -1; padding-left: var(--col-gap) !important; border-left: 1px solid var(--rule) !important; }
  main.forecast-page--governor > .snapshot-static { grid-row: 8; }
}

/* Race-page history pair: both charts carry the same heading size and rule. */
.page-race .forecast-history-header h2,
.page-race .forecast-history--compact .forecast-history-header h2 { font-size: clamp(1.35rem, 1.9vw, 1.65rem) !important; line-height: 1.15; }
.page-race .forecast-history-header { padding-top: 0 !important; border-top: 0 !important; }

/* Masthead between phone and desktop: the byline and the search label give
   way before the section links do, so the bar never runs off the page. */
@media (min-width: 801px) and (max-width: 1180px) {
  .site-header .site-nav { gap: 18px !important; }
  .site-header .identity .byline { display: none; }
}
@media (min-width: 801px) and (max-width: 1000px) {
  .site-header .site-nav { gap: 14px !important; }
  .site-header .site-nav a { font-size: 13.5px !important; }
  .site-header .site-search span, .site-header .site-search kbd { display: none; }
}

/* House: the frozen outlook as one band (figures | seat range), then the
   conditional scenarios as chart | table, so no column runs on alone. */
@media (min-width: 1000px) {
  .forecast-page--house #house-outlook-dashboard { display: grid; grid-template-columns: minmax(0, 1fr) minmax(0, 1fr); column-gap: 0; align-items: start; }
  .forecast-page--house #house-outlook-dashboard > * { grid-column: 1 / -1; }
  .forecast-page--house #house-outlook-dashboard > .house-outlook__metrics { grid-column: 1; grid-row: 3 / span 3; margin-right: var(--col-gap); }
  .forecast-page--house #house-outlook-dashboard > .house-outlook__range { grid-column: 2; grid-row: 3; display: block; width: 100%; max-width: none; margin: 14px 0 4px; padding-left: var(--col-gap); }
  .forecast-page--house #house-outlook-dashboard > .house-outlook__note { grid-column: 2; padding-left: var(--col-gap); font-size: 13px; }
  .forecast-page--house #house-outlook-dashboard > .house-outlook__review { grid-column: 2; padding-left: var(--col-gap); }
  .forecast-page--house #house-outlook-dashboard .house-outlook__metrics > div { padding-right: 14px !important; }
  .forecast-page--house #house-outlook-dashboard .house-outlook__metrics > div + div { padding-left: 14px !important; }
  .forecast-page--house #house-outlook-dashboard > .house-diagnostics {
    display: grid; grid-template-columns: minmax(0, 1fr) minmax(0, 1fr); column-gap: 0; align-items: start;
    margin-top: 36px !important; padding-top: 14px !important; border-top: 1px solid var(--rule) !important;
  }
  .forecast-page--house .house-diagnostics > * { grid-column: 1; padding-right: var(--col-gap); }
  .forecast-page--house .house-diagnostics > .table-wrap { grid-column: 2; grid-row: 1 / span 5; margin: 0 !important; padding: 0 0 0 var(--col-gap); border-left: 1px solid var(--rule); }
  .forecast-page--house .house-diagnostics > details { grid-column: 2; grid-row: 6 / span 3; align-self: start; padding: 10px 0 0 var(--col-gap) !important; border-left: 1px solid var(--rule) !important; }
  .forecast-page--house .house-diagnostics .table-wrap caption { text-align: left; padding: 0 0 8px; color: var(--ink-soft); font-size: 13px; font-weight: 700; }
  .forecast-page--house .house-diagnostics .table-wrap th[scope="row"] { font-weight: 700; }
  .forecast-page--house .house-diagnostics .table-wrap th[scope="row"] { min-width: 168px; }
  .forecast-page--house .house-diagnostics .house-scenario-metrics > div { padding-right: 14px !important; }
  .forecast-page--house .house-diagnostics .house-scenario-metrics > div + div { padding-left: 14px !important; }
  .forecast-page--house .house-diagnostics .house-scenario-metrics dt { letter-spacing: .05em !important; }
  .forecast-page--house #house-scenario-histogram svg { display: block; width: 100%; max-width: none; height: auto; margin: 10px 0 0; }
}

/* State House pages: the district deep dive set in rules, not boxes. */
.hs-dd-odds, .hs-dd-strip, .hs-factor { padding: 14px 0 0 !important; border: 0 !important; border-top: 1px solid var(--rule) !important; border-radius: 0 !important; background: none !important; }
.hs-factor--result { border-top: 2px solid var(--rule-heavy) !important; }
.hs-factors { column-gap: var(--col-gap) !important; }
.hs-dd-top { column-gap: var(--col-gap) !important; }
.hs-picker select { border-radius: var(--radius-sm) !important; background-color: var(--paper) !important; }
.hs-badge { border-radius: var(--radius-xs) !important; padding: 2px 6px !important; }
.hs-map-panel .map-tooltip { border-radius: 2px !important; }
/* A delegation of more than sixteen seats is too narrow for numbers in every
   cell; the district is in each cell's label and hover card. */
.hs-seats:has(.hs-seat:nth-child(17)) .hs-seat span { display: none; }

/* Methodology: notes as ruled asides; the rating scale uses the site palette. */
.mx-notes { padding: 16px 0 0 !important; border: 0 !important; border-top: 2px solid var(--rule-heavy) !important; border-radius: 0 !important; background: none !important; }
.mx-warning { padding: 2px 0 2px 16px !important; border-left: 2px solid var(--amber) !important; background: none !important; }
.mx-model__tag { padding: 0 !important; border: 0 !important; border-radius: 0 !important; }
.mx-model__tag::before { border-radius: 1px !important; }
.mx-badge, .ab-tag { border-radius: var(--radius-xs) !important; }
.mx-formula { border-radius: var(--radius-sm) !important; }
.mx-weights, .mx-scale { border-radius: 0 !important; }
.mx-scale .sd { background: var(--r-solid-d) !important; } .mx-scale .ld { background: var(--r-likely-d) !important; } .mx-scale .lnd { background: var(--r-lean-d) !important; }
.mx-scale .tu { background: var(--r-toss) !important; }
.mx-scale .lnr { background: var(--r-lean-r) !important; } .mx-scale .lr { background: var(--r-likely-r) !important; } .mx-scale .sr { background: var(--r-solid-r) !important; }

/* =====================================================================
   v9 (Oct 21): compact newsroom layout.
   Tighter measure and rhythm on every page: a 48px masthead, a thin
   ticker, page headings that sit on the content instead of above a band
   of empty space, section heads with the heading and dek on one rule,
   denser tables and grids, and one short footer. Presentation only: no
   forecast value, label or route is created here.
   ===================================================================== */
:root {
  --shell: 1280px;
  --shell-w: min(var(--shell), calc(100% - 40px));
  --gap-section: 34px;
  --col-gap: 28px;
  --paper: #121314;
  --rule: #2f3236;
  --rule-faint: #222528;
  --rule-strong: #4a4e53;
  --h1: 700 clamp(28px, 2.6vw, 36px)/1.08 var(--serif);
  --h2: 700 22px/1.18 var(--serif);
  --dek: 400 15px/1.45 var(--serif);
}
@media (max-width: 760px) {
  :root { --shell-w: calc(100% - 32px); --gap-section: 26px; --col-gap: 18px; }
}
body { font-size: 14px; }

/* ------------------------------------------------------------ Masthead */
.site-header__inner { min-height: 48px !important; gap: 16px !important; }
.brand, .site-brand { font-size: 15px !important; letter-spacing: .24em !important; }
.identity .byline { font-size: 11.5px !important; }
.site-nav a { padding: 6px 9px !important; font-size: 13px !important; }
.site-nav .nav-note { margin-top: -9px; font-size: 8.5px; }
.site-search { min-height: 28px; font-size: 12px; }
.ticker__inner { min-height: 30px !important; gap: 14px !important; }
.ticker__item { padding: 1px 12px !important; font-size: 12px !important; }
.ticker__label { font-size: 10px !important; }

/* ------------------------------------------------------------ Page headings */
/* The page title sits close under the ticker; date lines are one quiet row. */
.sd-top, .hero.page-hero, .fh-masthead, .race-intro, .forecast-page > .hero, .page-hero {
  padding-top: 22px !important;
  padding-bottom: 0 !important;
  margin-bottom: 0 !important;
  min-height: 0 !important;
}
.sd-top h1, .page-hero h1, .hero h1, .race-intro h1, .fh-masthead h1, main h1 {
  margin: 4px 0 6px !important;
  font: var(--h1) !important;
  letter-spacing: -.01em !important;
  max-width: 22ch;
}
.page-hero .lede, .page-hero .dek, .hero .lede, .hero p.dek, .fh-dek, .race-writeup {
  max-width: 68ch !important;
  margin: 0 0 6px !important;
  color: var(--ink-soft) !important;
  font: var(--dek) !important;
}
.sd-updated, .updated, .hero .updated, .page-hero .updated, .fh-byline { margin: 2px 0 0 !important; color: var(--muted) !important; font: 500 12px/1.4 var(--sans) !important; }

/* ------------------------------------------------------------ Sections */
.home-page .closest-races,
.home-page .fh-home,
.home-page .home-house,
.sd-page .sd-section,
.forecast-page > .panel,
.forecast-page > .content-section,
.forecast-page > .rc-section,
.fh-section, .fh-recent, .fh-split {
  margin-top: var(--gap-section) !important;
  padding-top: 12px !important;
  border-top: 1px solid var(--rule-strong) !important;
}
.sd-section__head, .fh-section__head, .forecast-page .panel-header, .forecast-page .section-heading {
  margin: 0 0 14px !important;
  padding: 0 !important;
  gap: 6px 24px !important;
}
.sd-section h2, .fh-section h2, .forecast-page .panel-header h2, .forecast-page .section-heading h2,
.home-page .closest-races h2, .home-page .fh-home h2, .home-page .home-house h2, .fh-recent h2 {
  margin: 2px 0 4px !important;
  font: var(--h2) !important;
  letter-spacing: -.005em !important;
}
.sd-section__head p, .fh-section__dek, .forecast-page .panel-header p:not(.module-kicker):not(.eyebrow),
.forecast-page .section-heading p:not(.module-kicker):not(.eyebrow) {
  max-width: 72ch !important;
  margin: 0 !important;
  color: var(--muted) !important;
  font: 400 13.5px/1.45 var(--sans) !important;
}
.module-kicker, .sd-kicker, .fh-kicker, .page-race .eyebrow, .eyebrow {
  margin: 0 0 2px !important;
  font-size: 10.5px !important;
  letter-spacing: .1em !important;
}

/* ------------------------------------------------------------ Tables */
table { font-size: 13px; }
.data-table th, .data-table td, .fh-table th, .fh-table td, .fh-race-table th, .fh-race-table td,
.hs-table th, .hs-table td, table.compact th, table.compact td {
  padding-top: 6px !important; padding-bottom: 6px !important;
}
th { font-size: 10.5px; letter-spacing: .06em; }

/* ------------------------------------------------------------ Maps */
.map-zoom-controls, .house-map-controls, .hs-zoom { gap: 0 !important; }
.map-zoom-controls button, .house-map-controls button, .hs-zoom button {
  min-width: 30px !important; height: 28px !important; padding: 0 8px !important; font-size: 13px !important;
}
.map-zoom-hint {
  position: absolute; left: 50%; top: 50%; z-index: 5; margin: 0; padding: 8px 12px; transform: translate(-50%, -50%);
  border-radius: 3px; background: rgba(10, 11, 12, .86); color: #fff; font: 600 13px/1.2 var(--sans);
  opacity: 0; pointer-events: none; transition: opacity .18s ease;
}
.map-zoom-hint.is-visible { opacity: 1; }
#house-map.is-zoomed, #hs-map.is-zoomed { cursor: grab; }
#house-map.is-panning, #hs-map.is-panning { cursor: grabbing; }

/* ------------------------------------------------------------ Footer */
.site-footer { margin-top: 44px !important; padding: 22px 0 18px !important; }
.site-footer .footer-grid { gap: 12px 28px !important; padding-bottom: 14px !important; }
.site-footer .footer-grid h2 { margin: 0 0 6px !important; font-size: 10.5px !important; }
.site-footer .footer-grid a { padding: 2px 0 !important; font-size: 13px !important; }
.site-footer .footer-note { padding-top: 12px !important; font-size: 11.5px !important; }
.site-footer .brand { font-size: 14px !important; }

/* ------------------------------------------------------------ v9 Homepage */
.home-page .scoreboard__card, .home-page .scoreboard__card + .scoreboard__card { padding-top: 14px !important; padding-bottom: 12px !important; }
.home-page .scoreboard__card:first-child { padding-left: 0 !important; }
.home-page .scoreboard__num { font-size: 2rem !important; }
.home-page .scoreboard__bar { height: 6px !important; margin: 6px 0 !important; }
.home-page .scoreboard__meta { font-size: 12.5px !important; }
@media (min-width: 901px) {
  /* Verdict column on the left for the full height; the map and the five
     closest races stack on the right so neither column ends in empty space. */
  .home-page .flagship-story { grid-template-columns: 300px minmax(0, 1fr) !important; grid-template-rows: auto 1fr; }
  .home-page .flagship-copy { grid-column: 1; grid-row: 1 / span 2; padding: 18px var(--col-gap) 0 0 !important; }
  .home-page .home-map-widget { grid-column: 2; grid-row: 1; padding: 14px 0 0 var(--col-gap) !important; }
  .home-page .flagship-story > .home-closest { grid-column: 2; grid-row: 2; margin-top: 18px !important; padding: 12px 0 0 var(--col-gap) !important; border-top: 0 !important; border-left: 1px solid var(--rule) !important; }
  .home-page .flagship-story > .home-closest::before { content: ""; display: block; margin: -12px 0 12px; border-top: 1px solid var(--rule); }
}
.home-page .flagship-copy #home-title { font-size: clamp(1.6rem, 2.1vw, 2rem) !important; line-height: 1.08 !important; margin: 4px 0 6px !important; }
.home-page .flagship-copy .story-meta { margin-bottom: 10px !important; font-size: 12px !important; }
.home-page .flagship-copy .home-needle { width: 100%; max-width: 280px; margin: 0 auto; }
.home-page .flagship-copy .seat-figures { padding-top: 8px !important; }
.home-page .flagship-copy .seat-figure strong { font-size: 1.6rem !important; }
.home-page .flagship-copy .seat-figure span { font-size: 12px !important; }
.home-feature { margin-top: 12px !important; }
.home-feature__head strong { font-size: 1.2rem !important; }
.home-page .home-map-widget .senate-map-legend { margin-top: 4px !important; padding-top: 8px !important; }
.home-page .home-map-widget figcaption { margin-top: 4px !important; font-size: 12px !important; }
.home-page .flagship-races-heading { padding-bottom: 8px !important; }
.home-page .flagship-races-heading h2 { font: var(--h2) !important; font-size: 19px !important; }
/* Five closest races as ruled rows: race, margin, both candidates, the
   80% range and the two ingredients, read across like a results table. */
@media (min-width: 901px) {
  .home-page .hc-grid { display: block; border-top: 1px solid var(--rule); }
  .home-page .hc-card, .home-page .hc-card:nth-child(n) {
    display: grid; grid-template-columns: 128px 64px minmax(0, 1fr) 150px 168px; grid-template-rows: auto; align-items: center; gap: 0 16px;
    margin: 0; padding: 8px 0 8px 12px !important; border: 0; border-bottom: 1px solid var(--rule-faint);
  }
  .home-page .hc-card::before { top: 8px; bottom: 8px; left: 0 !important; right: auto !important; width: 3px; height: auto; }
  .home-page .hc-card__top { flex-direction: column; align-items: flex-start; gap: 3px; }
  .home-page .hc-card__title strong { font-size: 14.5px; }
  .home-page .hc-card .rc-card__rating { font-size: 11px; }
  .home-page .hc-card__margin { display: block; }
  .home-page .hc-card__margin strong { display: block; font-size: 21px; }
  .home-page .hc-card__margin span { display: none; }
  .home-page .hc-card .rc-card__rows { display: grid; gap: 3px; }
  .home-page .hc-card .rc-row { font-size: 12.5px; }
  .home-page .hc-card__range { gap: 0; }
  .home-page .hc-card__label { font-size: 11.5px; letter-spacing: .06em; }
  .home-page .hc-range { height: 40px; }
  .home-page .hc-range__tick { font-size: 13.5px; }
  .home-page .hc-card .rc-card__foot { align-self: center; padding: 0 !important; border: 0 !important; }
}
.home-page .fh-home__figure { margin-top: 12px !important; }
.home-page .fh-home__dek { font-size: 14.5px !important; margin: 4px 0 0 !important; }
.home-page > .shell { padding-top: 0 !important; }
.home-page .scoreboard { margin-top: 0 !important; padding-top: 0 !important; }
.home-page .scoreboard__card { gap: 2px !important; }
.home-page .scoreboard__go { margin-top: 4px !important; }
@media (min-width: 901px) {
  .home-page .hc-card, .home-page .hc-card:nth-child(n) { grid-template-columns: 112px 56px minmax(0, 1fr) 200px 150px; gap: 0 14px; }
  .home-page .hc-card .rc-card__foot { gap: 0 10px; }
  .home-page .hc-card .rc-card__foot dt { font-size: 9px; }
}
/* One short gap between the ticker and every page's first line. */
body > main, main#main { padding-top: 14px !important; padding-bottom: 0 !important; }
.home-page .home-house__header { margin-bottom: 8px !important; }
.home-page .home-house__disclosure { margin-top: 4px !important; font-size: 12.5px !important; }
.site-footer .footer-grid a + a { margin-top: 0 !important; }
.site-footer .footer-group, .site-footer .footer-grid > div { gap: 2px !important; }
.site-footer .footer-meta { margin-top: 10px !important; }

/* ------------------------------------------------------------ v9 Senate */
.sd-top { padding-top: 6px !important; }
.sd-top__head { display: grid !important; grid-template-columns: minmax(0, 1fr) auto; align-items: end; gap: 2px 24px !important; padding-bottom: 10px !important; }
.sd-top__head .sd-kicker { grid-column: 1 / -1; }
.sd-top h1 { max-width: none !important; }
.sd-top .sd-updated { max-width: 420px !important; text-align: right; }
.sd-pagetabs { gap: 22px !important; }
.sd-pagetabs [role="tab"] { padding: 6px 0 8px !important; font-size: 14px !important; }
.sd-hero > .sd-odds, .sd-hero > .sd-chamber { padding-top: 14px !important; }
.sd-odds__num { font-size: clamp(2.6rem, 4vw, 3.4rem) !important; }
.sd-odds__bar { height: 10px !important; margin-top: 10px !important; }
.sd-odds__facts { padding-top: 14px !important; }
.sd-odds__fact { padding-top: 8px !important; }
.sd-odds__fact dd { font-size: 1.2rem !important; }
.sd-tipping { margin-top: 14px !important; padding-top: 10px !important; }
.sd-tipping h3, .sd-tipping__name { font-size: 1.45rem !important; }
.sd-chamber .sd-note { margin-top: 4px !important; font-size: 12px !important; }
.sd-chamber__plot svg { max-height: 300px; }
@media (min-width: 1000px) {
  #senate-map-section.sd-map-tile, .forecast-page--governor > .governor-map-panel { grid-template-columns: 240px minmax(0, 1fr) !important; }
  #senate-map-section > .sd-section__head h2, .governor-map-panel > .panel-header h2 { font-size: 21px !important; }
  #senate-map-section > .senate-map-legend, .governor-map-panel > .senate-map-legend {
    grid-template-columns: repeat(2, minmax(0, 1fr)) !important; gap: 6px 10px !important; margin-top: 14px !important; padding-top: 10px !important; font-size: 12px !important;
  }
}
.sd-ingredients .sd-section__head, .sd-board .sd-section__head { margin-bottom: 8px !important; }
.sd-polls__grid { gap: 0 24px !important; }
.sd-next { margin-top: var(--gap-section) !important; padding-top: 10px !important; }
.sd-next__item { padding: 8px 0 !important; }

.sd-rcol__head { margin-bottom: 4px !important; padding: 6px 0 !important; border-top-width: 3px !important; }
.sd-rcol__list { gap: 0 !important; }
.sd-rcol__list li > a, .sd-rcol__list > li { padding-top: 4px !important; padding-bottom: 4px !important; }
.sd-rcol { padding-bottom: 4px !important; }
.footer-group a, .footer-grid > div:not(:first-child) a, .site-footer .footer-grid a { min-height: 0 !important; padding: 2px 0 !important; line-height: 1.4 !important; }
.site-footer .footer-grid h2 { margin-bottom: 4px !important; }
.sd-section__head .sd-kicker, .sd-kicker, .fh-kicker { color: var(--ink-soft) !important; font: 800 10.5px/1.3 var(--sans) !important; letter-spacing: .1em !important; text-transform: uppercase !important; }
.sd-poll, .sd-polls__grid > * { padding-top: 10px !important; padding-bottom: 10px !important; }
[data-clamp].is-clamped { max-height: var(--clamp, 520px); overflow: hidden !important; }
.clamp-toggle {
  display: block; width: 100%; margin: 0; padding: 9px 0; border: 0; border-top: 1px solid var(--rule); background: none;
  color: var(--ink); font: 700 13px/1.2 var(--sans); text-align: center; cursor: pointer;
}
.clamp-toggle:hover { text-decoration: underline; text-underline-offset: 3px; }
.clamp-toggle[hidden] { display: none; }

/* ------------------------------------------------------------ v9 House */
/* First screen: verdict, then the control gauge beside the district map.
   The seat-by-seat chart follows with its filters in a side column. */
.forecast-page--house > .page-hero h1 { max-width: 26ch !important; }
.forecast-page--house > .page-hero .lede { margin-bottom: 2px !important; font-size: 14.5px !important; }
.forecast-page > .model-disclosure h2, .forecast-page > .model-disclosure .model-disclosure__points { display: none !important; }
.forecast-page > .model-disclosure .model-disclosure__kicker { margin: 0 0 2px !important; color: var(--amber) !important; font: 800 10.5px/1.3 var(--sans) !important; letter-spacing: .1em; text-transform: uppercase; }
.forecast-page > .model-disclosure .model-disclosure__body { margin: 0 !important; color: var(--ink-soft) !important; font: 400 12.5px/1.45 var(--sans) !important; }
.status-badge--experimental { padding: 1px 5px !important; font-size: 9.5px !important; }
@media (min-width: 1000px) {
  main.forecast-page--house > .page-hero { grid-column: 1 / span 8; grid-row: 1; }
  main.forecast-page--house > .model-disclosure { grid-column: 9 / -1; grid-row: 1; }
  main.forecast-page--house > .house-summary-panel {
    grid-column: 1 / span 4 !important; grid-row: 3 !important; gap: 10px !important; margin-top: 20px !important; padding: 14px var(--col-gap) 0 0 !important;
    border-top: 1px solid var(--rule-strong) !important;
  }
  main.forecast-page--house > .house-map-panel {
    grid-column: 5 / -1 !important; grid-row: 3 !important; align-self: stretch; margin-top: 20px !important; padding: 12px 0 0 var(--col-gap) !important;
    border-top: 1px solid var(--rule-strong) !important; border-left: 1px solid var(--rule) !important;
  }
  main.forecast-page--house > #house-seats {
    grid-column: 1 / -1 !important; grid-row: 4 !important; display: grid !important; grid-template-columns: 320px minmax(0, 1fr); grid-template-rows: auto auto auto 1fr; column-gap: var(--col-gap);
    margin-top: var(--gap-section) !important; padding: 12px 0 0 !important; border-left: 0 !important; border-top: 1px solid var(--rule-strong) !important;
  }
  main.forecast-page--house > #house-seats > .hx-seats__head { grid-column: 1; grid-row: 1; display: block !important; text-align: left !important; }
  main.forecast-page--house > #house-seats > [data-hx="filters"] { grid-column: 1; grid-row: 2; }
  main.forecast-page--house > #house-seats > .hx-seats__note { grid-column: 1; grid-row: 3; text-align: left !important; }
  main.forecast-page--house > #house-seats > .hx-seats__chart { grid-column: 2; grid-row: 1 / span 4; align-self: start; }
  main.forecast-page--house > #house-seats > .hx-seats__bar { grid-column: 1 / -1; grid-row: 5; }
  main.forecast-page--house > #house-pull { grid-row: 5 !important; }
  main.forecast-page--house > #house-tossups { grid-row: 6 !important; }
  main.forecast-page--house > #house-states { grid-row: 7 !important; }
  main.forecast-page--house > #house-outlook-dashboard { grid-row: 8 !important; }
  main.forecast-page--house > .house-methodology { grid-row: 9 !important; }
  main.forecast-page--house > .snapshot-static { grid-row: 10 !important; }
}
.forecast-page--house > .house-summary-panel .cg-slot { max-width: 330px !important; }
.forecast-page--house .hn-stats { grid-template-columns: repeat(2, minmax(0, 1fr)) !important; margin-top: 6px !important; }
.forecast-page--house .hn-stat { padding: 8px 6px !important; text-align: left !important; border-top: 1px solid var(--rule-faint); }
.forecast-page--house .hn-stat + .hn-stat { border-left: 0 !important; }
.forecast-page--house .hn-stat:nth-child(even) { padding-left: 12px !important; border-left: 1px solid var(--rule-faint) !important; }
.forecast-page--house .hn-stat dd { font-size: 1.2rem !important; margin: 2px 0 0 !important; }
.forecast-page--house .house-map-panel .panel-header { display: flex !important; align-items: end; justify-content: space-between; margin-bottom: 6px !important; }
.forecast-page--house .house-map-panel .panel-header .latest { margin: 0; color: var(--muted); font-size: 11.5px; text-align: right; }
.forecast-page--house .house-map-toolbar { display: flex !important; flex-wrap: wrap; align-items: center; gap: 6px 12px !important; margin: 0 0 6px !important; padding: 6px 0 !important; border-top: 1px solid var(--rule-faint) !important; border-bottom: 1px solid var(--rule-faint) !important; }
.forecast-page--house .house-breadcrumb { margin-right: auto; font-size: 12.5px !important; }
.forecast-page--house .house-map-toolbar select { min-height: 28px !important; padding-top: 2px !important; padding-bottom: 2px !important; font-size: 12.5px !important; }
.forecast-page--house .house-select-label { gap: 6px !important; font-size: 10.5px !important; }
.forecast-page--house .house-control-button { min-height: 28px !important; padding: 2px 10px !important; font-size: 12px !important; }
.forecast-page--house .house-map-panel .house-map-legend { margin-top: 6px !important; padding-top: 6px !important; }
.forecast-page--house .house-map-status { margin: 4px 0 0 !important; font-size: 12px !important; }
.house-inset-frame { stroke: none !important; fill: none !important; }
.forecast-page--house #house-seats h2 { font-size: 20px !important; text-align: left !important; }
.forecast-page--house .hx-seats__finder { margin-top: 10px !important; max-width: none !important; }
.forecast-page--house .house-map-shell, .forecast-page--house .house-map-canvas { min-height: 0 !important; height: auto !important; border: 0 !important; }
.forecast-page--house #house-map { width: 100% !important; height: auto !important; min-height: 0 !important; aspect-ratio: 1100 / 620; }
.forecast-page--house .house-map-controls { top: 4px !important; left: 0 !important; }
@media (min-width: 1000px) {
  main.forecast-page--house > #house-seats > .hx-seats__bar { grid-column: 2; grid-row: 5; }
}
@media (min-width: 1000px) {
  main.forecast-page--house > .house-summary-panel > :last-child { margin-top: 8px !important; }
}
.hn-pull__name { font-size: 13px !important; }
.hn-pull__sub { font-size: 12px !important; }
.hn-pull__val { font-size: 13px !important; }
.hn-pull__row:nth-of-type(even) .hn-pull__hit { fill: rgba(255, 255, 255, .018); }
#house-tossups .hx-cards { display: grid !important; grid-template-columns: repeat(auto-fill, minmax(190px, 1fr)) !important; gap: 0 20px !important; margin-top: 8px !important; }
#house-tossups .hx-cards > .hx-card { gap: 4px !important; padding: 8px 0 10px !important; }
#house-tossups .hx-cards > .hx-card[hidden] { display: none !important; }
.hx-card__top strong { font-size: 14.5px !important; }
.hx-card__names { font-size: 12.5px !important; gap: 0 !important; }
.hx-card__odds { font-size: 12px !important; }
.hx-card__foot { padding-top: 4px !important; font-size: 11px !important; }
.hx-card .rating-badge, .hx-card__top .rating-badge { padding: 1px 5px !important; font-size: 10px !important; }
.hn-states { row-gap: 0 !important; }
.hn-state { gap: 4px !important; padding: 7px 0 8px !important; }
.hn-state__head strong, .hn-state__head a { font-size: 14px !important; }
.hn-state__foot { font-size: 11.5px !important; }
.forecast-page .house-outlook__metrics > div, .forecast-page .house-scenario-metrics > div { padding-top: 8px !important; padding-bottom: 8px !important; }
.forecast-page .house-outlook dd, .forecast-page .house-outlook__metrics dd, .forecast-page .house-scenario-metrics dd { margin-top: 2px !important; font-size: 1.45rem !important; }
.house-outlook .house-diagnostics { margin-top: var(--gap-section) !important; }
.house-diagnostics__intro p, .house-outlook__note { font-size: 13px !important; line-height: 1.45 !important; }
.house-scenario-control { margin: 8px 0 !important; }

/* ------------------------------------------------------------ v9 State House pages */
/* Header, then the delegation outlook in a narrow column beside a large
   district map; the district deep dive and every-district table follow. */
.page-house-state .race-intro { display: block !important; margin-top: 0 !important; padding-top: 6px !important; }
.page-house-state .hs-outlook .race-odds__copy .eyebrow { text-align: left !important; }
.page-house-state .hs-map-more { margin-top: 10px !important; }
.page-house-state .race-intro .updated { margin: 0 !important; }
.page-house-state .race-intro h1 { margin: 2px 0 4px !important; }
.page-house-state .back-link { display: inline-block; margin: 0 18px 0 0 !important; font-size: 12.5px !important; }
.page-house-state .race-intro .office-switch { display: inline-flex !important; margin: 6px 0 0 !important; border-bottom: 0 !important; vertical-align: baseline; }
.page-house-state .race-writeup { margin: 8px 0 0 !important; font-size: 15px !important; }
.page-house-state .model-disclosure { margin: 10px 0 0 !important; padding: 0 0 0 12px !important; }
.page-house-state .model-disclosure .model-disclosure__kicker { display: inline; margin-right: 6px; color: var(--amber); font: 800 10.5px/1.3 var(--sans); letter-spacing: .1em; text-transform: uppercase; }
.page-house-state .model-disclosure .model-disclosure__body { display: inline; color: var(--ink-soft); font: 400 12.5px/1.45 var(--sans) !important; }
.page-house-state main > .wrap > section { border-radius: 0 !important; background: none !important; box-shadow: none !important; }
.page-house-state main > .wrap > section:not(.race-summary-strip) { padding: 12px 0 0 !important; border: 0 !important; border-top: 1px solid var(--rule-strong) !important; }
.page-house-state .race-summary-strip { padding: 0 !important; border: 0 !important; }
@media (min-width: 1100px) {
  .page-house-state main > .wrap { display: grid !important; grid-template-columns: 330px minmax(0, 1fr) !important; column-gap: var(--col-gap) !important; row-gap: 0 !important; align-items: start; }
  :where(.page-house-state main > .wrap > *) { grid-column: 1 / -1; margin: var(--gap-section) 0 0; }
  .page-house-state .race-intro { grid-row: 1 !important; margin-top: 0 !important; }
  .page-house-state .model-disclosure { grid-row: 2 !important; margin-top: 10px !important; }
  .page-house-state .hs-outlook { grid-column: 1 !important; grid-row: 3 !important; margin-top: 18px !important; }
  .page-house-state .race-summary-strip#race-detail { grid-column: 1 !important; grid-row: 4 !important; margin-top: 14px !important; }
  .page-house-state #localized-forecast { grid-column: 2 !important; grid-row: 3 / span 3 !important; display: block !important; margin-top: 18px !important; padding-left: var(--col-gap) !important; border-left: 1px solid var(--rule) !important; }
  .page-house-state #hs-watch { grid-row: 6 !important; }
  .page-house-state #district-forecast { grid-row: 7 !important; }
  .page-house-state #hs-districts { grid-row: 8 !important; }
  .page-house-state #state-polls { grid-row: 9 !important; }
  .page-house-state .race-bottom-link { grid-row: 10 !important; }
}
.page-house-state .hs-outlook h2 { font: var(--h2) !important; font-size: 20px !important; text-align: left !important; }
.page-house-state .hs-seats { margin-top: 8px !important; gap: 2px !important; }
.page-house-state .hs-seat { height: 34px !important; border-radius: 2px !important; font-size: 11px !important; }
.page-house-state .hs-rating-key { margin-top: 8px !important; padding-top: 8px !important; gap: 4px 12px !important; font-size: 12px !important; }
.page-house-state .race-summary-grid { display: grid !important; grid-template-columns: repeat(2, minmax(0, 1fr)) !important; gap: 0 !important; margin: 0 !important; }
.page-house-state .race-summary-item { padding: 8px 0 !important; border: 0 !important; border-top: 1px solid var(--rule-faint) !important; background: none !important; }
.page-house-state .race-summary-item:nth-child(even) { padding-left: 12px !important; border-left: 1px solid var(--rule-faint) !important; }
.page-house-state .race-summary-item--matchup { grid-column: 1 / -1; padding-left: 0 !important; border-left: 0 !important; }
.page-house-state .race-summary-item dt { font-size: 11px !important; }
.page-house-state .race-summary-item dd { margin: 2px 0 0 !important; font-size: 1.15rem !important; }
.page-house-state .hs-map-panel .panel-header { margin-bottom: 4px !important; }
.page-house-state .hs-map-panel .panel-header h2 { font-size: 20px !important; }
.page-house-state .hs-map-panel .localized-subtitle { margin: 2px 0 0 !important; font-size: 12.5px !important; color: var(--muted) !important; }
.page-house-state .hs-map-panel .localized-layout { grid-template-columns: minmax(0, 1fr) 250px !important; gap: 0 18px !important; align-items: start; }
.page-house-state .hs-map-wrap { min-height: 0 !important; }
.page-house-state .hs-map { width: 100% !important; height: auto !important; max-height: 640px; touch-action: pan-x pan-y; user-select: none; }
.page-house-state .hs-map-wrap .map-zoom-controls { position: absolute; top: 0; left: 0; z-index: 2; display: inline-flex; }
.page-house-state .hs-map-detail { gap: 4px !important; padding-left: 18px !important; }
.page-house-state .hs-map-detail .hs-needle--map { max-width: 230px !important; margin: 0 auto; }
.page-house-state .hs-map-stats div { padding: 5px 0 !important; }
.page-house-state .hs-map-legend { margin-top: 6px !important; font-size: 11.5px !important; }
.page-house-state .localized-source { margin: 4px 0 0 !important; font-size: 11.5px !important; color: var(--muted) !important; }
/* Races to watch: dense ruled entries, five across. */
.page-house-state .hs-watch .rc-grid { grid-template-columns: repeat(auto-fill, minmax(200px, 1fr)) !important; gap: 0 20px !important; }
.page-house-state .hs-watch .rc-card { padding: 8px 0 10px !important; gap: 4px !important; }
/* District deep dive: flat, ruled, no tiles. */
.page-house-state .hs-dd-odds, .page-house-state .hs-dd-strip, .page-house-state .hs-factor { padding: 10px 0 !important; border: 0 !important; border-radius: 0 !important; background: none !important; }
.page-house-state .hs-dd-top { grid-template-columns: 300px minmax(0, 1fr) !important; gap: var(--col-gap) !important; margin-top: 8px !important; }
.page-house-state .hs-dd-odds .hs-needle { max-width: 280px !important; }
.page-house-state .hs-stat { padding: 8px 12px !important; }
.page-house-state .hs-stat dd { font-size: 1.15rem !important; }
.page-house-state .hs-factors { gap: 0 !important; border-top: 1px solid var(--rule-faint); }
.page-house-state .hs-factor + .hs-factor { padding-left: 16px !important; border-left: 1px solid var(--rule-faint) !important; }
.page-house-state .hs-factor__value { font-size: 1.5rem !important; }
.page-house-state .hs-subhead { margin: 14px 0 6px !important; }
.page-house-state .hs-inputs div { padding: 5px 0 !important; font-size: 13px; }
.page-house-state .hs-table th, .page-house-state .hs-table td { padding: 6px 8px !important; font-size: 13px; }
.page-house-state .hs-table td br + small { display: inline; margin-left: 6px; }
.page-house-state .hs-table td br { display: none; }
.page-house-state .hs-badge { padding: 2px 6px !important; border-radius: 2px !important; font-size: 10.5px !important; }
@media (max-width: 1099px) {
  .page-house-state .hs-map-panel .localized-layout { grid-template-columns: minmax(0, 1fr) !important; }
  .page-house-state .hs-map-detail { padding: 10px 0 0 !important; border-left: 0 !important; border-top: 1px solid var(--rule-faint) !important; }
  .page-house-state .hs-dd-top { grid-template-columns: minmax(0, 1fr) !important; }
}
.page-house-state #hs-watch, .page-house-state #district-forecast, .page-house-state #hs-districts, .page-house-state #state-polls, .page-house-state .race-bottom-link { margin-top: var(--gap-section) !important; }
.page-house-state .race-bottom-link { margin-bottom: 0 !important; font-size: 13px; }
.page-house-state .hs-table thead th { padding-top: 7px !important; padding-bottom: 7px !important; font-size: 10.5px !important; }
/* Governor board: one line per race. */
.gx-table th, .gx-table td { padding-top: 5px !important; padding-bottom: 5px !important; }
.gx-table .gx-match > * + * { margin-left: 4px; }
.gx-table .gx-match > * { display: inline !important; }
.gx-table .gx-match > * + *::before { content: "v. "; color: var(--muted); font-weight: 400; }
.gx-table .gx-chance { padding-top: 2px; }
.gx-table .rating-badge { padding: 1px 5px !important; font-size: 10.5px !important; }
.forecast-page--governor .rc-grid { gap: 0 20px !important; }
.forecast-page--governor .rc-card { padding-top: 8px !important; padding-bottom: 10px !important; gap: 6px !important; }

/* ------------------------------------------------------------ v9 Race pages */
@media (min-width: 1100px) {
  /* The map spans into the flexible last row, so a tall state map adds space
     under the forecast column instead of between its blocks. */
  .page-race:not(.page-txsim):not(.page-house-state) #localized-forecast { grid-row: 5 / span 4 !important; align-self: start !important; margin-top: 14px !important; }
  .page-race:not(.page-house-state) .race-intro .back-link { margin-top: 6px !important; }
  .page-race:not(.page-house-state) .race-intro h1 { margin-top: 4px !important; }
  .page-race:not(.page-house-state) .race-intro .updated { margin-top: 4px !important; padding-bottom: 8px !important; }
  .page-race:not(.page-house-state) .race-writeup { margin-top: 14px !important; font-size: 15.5px !important; line-height: 1.55 !important; }
  .page-race .race-odds { margin-top: 16px !important; }
}
.page-race #localized-forecast .localized-map { max-height: 600px !important; }
.page-race .race-odds__needle { max-width: 320px !important; }
.page-race .race-odds__copy h2 { font-size: 24px !important; }
.page-race .race-summary-item, .page-race .race-summary-item + .race-summary-item { padding-top: 8px !important; padding-bottom: 8px !important; }
.page-race .localized-detail { margin-top: 8px !important; }
.page-race .localized-detail, .page-race #localized-forecast .localized-detail { min-height: 0 !important; }
.page-race .localized-detail p { margin-top: 4px !important; }

/* ------------------------------------------------------------ v9 Methodology and polls */
.mx-masthead { max-width: none !important; margin: 0 auto !important; padding: 8px 0 12px !important; text-align: left !important; }
.mx-masthead .eyebrow { justify-content: flex-start !important; }
.mx-masthead .mx-dek, .mx-masthead p:not(.eyebrow):not(.mx-byline) { max-width: 68ch; margin: 4px 0 !important; text-align: left !important; font-size: 15px !important; }
.mx-step { gap: 14px !important; padding-bottom: 16px !important; }
.mx-step h3 { margin: 0 0 4px !important; font-size: 18px !important; }
.mx-step p { margin: 0 0 6px !important; font-size: 15px !important; line-height: 1.55 !important; }
.mx-formula { margin: 6px 0 !important; padding: 6px 10px !important; }
.mx-glance > * { padding-top: 10px !important; padding-bottom: 10px !important; }
.mx-glance strong, .mx-glance dd { font-size: 1.9rem !important; }
.page-polls h2, .polls-page h2, main .poll-archive h2 { font: var(--h2) !important; }
.poll-results td, .poll-results th, table.poll-table td, table.poll-table th { padding-top: 5px !important; padding-bottom: 5px !important; }
.poll-candidate { line-height: 1.35 !important; }
.polls-archive h2, #snapshot-title { font: var(--h2) !important; font-size: 24px !important; }
.polls-archive .panel-header { margin-bottom: 8px !important; }
/* Phones: the three outlooks as three short rows. */
@media (max-width: 860px) {
  .home-page .scoreboard__card, .home-page .scoreboard__card + .scoreboard__card { padding: 8px 0 !important; gap: 0 !important; }
  .home-page .scoreboard__num { font-size: 1.5rem !important; }
  .home-page .scoreboard__bar { height: 4px !important; margin: 4px 0 2px !important; }
  .home-page .scoreboard__meta { font-size: 11.5px !important; }
  .home-page .scoreboard__go { display: none !important; }
  .home-page .flagship-copy .home-needle { max-width: 260px; }
}
@media (max-width: 760px) {
  .forecast-page > .model-disclosure .model-disclosure__body { font-size: 12px !important; }
  .hn-pull__name { font-size: 12px !important; }
}
@media (max-width: 760px) {
  .sd-top__head { grid-template-columns: minmax(0, 1fr) !important; }
  .sd-top .sd-updated { max-width: none !important; text-align: left !important; }
}
@media (max-width: 999px) {
  #senate-map-section .senate-map-shell, .governor-map-panel .governor-map-shell { height: auto !important; min-height: 0 !important; }
  #senate-map-section .senate-map-canvas, .governor-map-panel .governor-map-canvas { height: auto !important; min-height: 0 !important; aspect-ratio: 960 / 520; }
  #senate-map-section .senate-map-canvas svg, .governor-map-panel .governor-map-canvas svg { width: 100%; height: 100%; }
  #senate-map-section .map-zoom-controls, .governor-map-panel .map-zoom-controls { top: 0 !important; left: 0 !important; }
}
#senate-map-section .senate-map-canvas, .governor-map-panel .governor-map-canvas { position: relative !important; }
#senate-map-section .map-zoom-controls, .governor-map-panel .map-zoom-controls { position: absolute !important; z-index: 3; }
@media (min-width: 1100px) {
  .page-house-state .race-intro, .page-house-state .model-disclosure, .page-house-state #hs-watch, .page-house-state #district-forecast,
  .page-house-state #hs-districts, .page-house-state #state-polls, .page-house-state .race-bottom-link { grid-column: 1 / -1 !important; }
}
.page-house-state .hs-outlook .race-odds__copy h2 { text-align: left !important; }
.page-house-state .race-intro { width: auto !important; max-width: none !important; margin-left: 0 !important; margin-right: 0 !important; justify-self: stretch !important; text-align: left !important; }

/* ------------------------------------------------------------ v9 Senate: one page */
/* The forecast, its history, every race and the archive read as one page:
   every section uses the same kicker, heading, rule and spacing. */
.sd-page .sd-section .sd-section__note { max-width: 78ch; margin: 2px 0 0 !important; color: var(--ink-soft) !important; font: 400 14.5px/1.5 var(--serif) !important; }
.sd-history .fh-status:empty, .sd-history .fh-status[hidden] { display: none !important; }
.sd-history .fh-status { margin: 4px 0 0 !important; color: var(--muted); font-size: 12px; }
.sd-history__charts { display: grid; grid-template-columns: minmax(0, 1fr) minmax(0, 1fr); gap: 0 var(--col-gap); margin-top: 10px; }
.sd-history__chart { min-width: 0; }
.sd-history__chart + .sd-history__chart { padding-left: var(--col-gap); border-left: 1px solid var(--rule); }
.sd-page h3#fh-control-title, .sd-page h3#fh-seats-title, .sd-page h3#fh-recent-title, .sd-page h3#fh-ratings-title, .sd-page h3#fh-ratingmix-title, .sd-page h3#fh-releases-title {
  margin: 0 0 2px !important; color: var(--ink) !important; font: 700 15px/1.3 var(--sans) !important;
}
.sd-page .fh-section__head { margin: 0 0 6px !important; padding: 0 !important; border: 0 !important; }
.sd-page .fh-section__head--split { display: flex; flex-wrap: wrap; align-items: end; justify-content: space-between; gap: 6px 16px; }
.sd-page .fh-section__dek { margin: 0 !important; color: var(--muted) !important; font: 400 12.5px/1.4 var(--sans) !important; }
.sd-page .fh-chart-wrap { margin-top: 4px; }
.sd-page .fh-note { font-size: 12px !important; }
.sd-history__recent { margin-top: 16px !important; padding-top: 10px !important; border-top: 1px solid var(--rule) !important; }
.sd-history__recent .fh-recent__head { display: flex; align-items: baseline; justify-content: space-between; margin-bottom: 6px; }
.sd-page .fh-recent__list { margin-top: 0 !important; }
.sd-page .fh-split { margin-top: 4px; }
.sd-page .fh-split > .fh-section { margin: 0 !important; padding: 0 !important; border: 0 !important; }
.sd-archive__block + .sd-archive__block { margin-top: 18px; padding-top: 10px; border-top: 1px solid var(--rule); }
.sd-page .fh-notes .fh-section__head h2 { font: var(--h2) !important; }
.sd-page .fh-notes .analysis-card { padding: 10px 0 !important; border: 0 !important; border-top: 1px solid var(--rule-faint) !important; border-radius: 0 !important; background: none !important; box-shadow: none !important; }
.sd-page .fh-notes .analysis-card h3 { margin: 2px 0 4px !important; font: 700 16px/1.25 var(--serif) !important; }
.sd-page .fh-notes .analysis-summary { margin: 0 0 4px !important; max-width: 80ch; font-size: 14px !important; line-height: 1.5 !important; }
.sd-page .fh-wrap, .sd-page .fh-section.wrap { width: auto !important; margin: 0 !important; padding-left: 0 !important; padding-right: 0 !important; }
@media (max-width: 860px) {
  .sd-history__charts { grid-template-columns: minmax(0, 1fr); }
  .sd-history__chart + .sd-history__chart { margin-top: 16px; padding: 12px 0 0; border-left: 0; border-top: 1px solid var(--rule); }
}
.sd-page .sd-eyebrow { margin: 0 0 2px !important; color: var(--ink-soft) !important; font: 800 10.5px/1.3 var(--sans) !important; letter-spacing: .1em !important; text-transform: uppercase !important; }
.sd-ing__row { padding-top: 3px !important; padding-bottom: 3px !important; min-height: 0 !important; }
.sd-ing__name strong, .sd-ing__name { font-size: 13.5px !important; line-height: 1.2 !important; }
.sd-ing__name small, .sd-ing__name span { font-size: 11px !important; }
.sd-ing__out strong { font-size: 16px !important; }
.sd-ing__out small, .sd-ing__out span { font-size: 11px !important; }
.sd-history > .sd-section__head, .sd-archive > .sd-section__head, .sd-closehist > .sd-section__head { display: block !important; }
.sd-page .fh-split { border-top: 0 !important; padding-top: 0 !important; }
/* Race pages: the area estimate sits beside the map, so the map column ends
   level with the forecast column instead of running long under it. */
@media (min-width: 1100px) {
  .page-race:not(.page-house-state):not(.page-txsim) #localized-forecast .localized-layout { display: grid !important; grid-template-columns: minmax(0, 1fr) 210px; gap: 0 18px; align-items: start; }
  .page-race:not(.page-house-state):not(.page-txsim) #localized-forecast .localized-detail { margin-top: 0 !important; padding: 0 0 0 16px !important; border: 0 !important; border-left: 1px solid var(--rule-faint) !important; }
  .page-race:not(.page-house-state):not(.page-txsim) #localized-forecast .localized-detail h2, .page-race:not(.page-house-state):not(.page-txsim) #localized-forecast .localized-detail h3 { font-size: 17px !important; }
  .page-race:not(.page-house-state):not(.page-txsim) #localized-forecast .localized-map { max-height: 520px !important; }
}
/* Race pages without a published chance of winning have a short forecast
   column: the model-margin history moves up into it, beside the map. */
@media (min-width: 1100px) {
  .page-race:not(.page-house-state):not(.page-txsim) main > .wrap:not(:has(> .race-odds:not([hidden]))) #forecast-history-preview {
    grid-column: 1 !important; grid-row: 7 !important; align-self: start !important; margin-top: 18px !important;
  }
  .page-race:not(.page-house-state):not(.page-txsim) main > .wrap:not(:has(> .race-odds:not([hidden]))) #polling-trend { grid-row: 9 !important; }
  .page-race:not(.page-house-state):not(.page-txsim) main > .wrap:not(:has(> .race-odds:not([hidden]))) #win-probability-panel {
    grid-column: 1 !important; grid-row: 10 !important; padding-left: 0 !important; border-left: 0 !important;
  }
  .page-race:not(.page-house-state):not(.page-txsim) main > .wrap:not(:has(> .race-odds:not([hidden]))) #model-breakdown {
    grid-column: 2 !important; grid-row: 10 !important; align-self: stretch; margin-top: var(--gap-section) !important; padding-left: var(--col-gap) !important; border-left: 1px solid var(--rule) !important;
  }
  .page-race:not(.page-house-state):not(.page-txsim) main > .wrap:not(:has(> .race-odds:not([hidden]))) #state-polls { grid-row: 11 !important; }
  .page-race:not(.page-house-state):not(.page-txsim) main > .wrap:not(:has(> .race-odds:not([hidden]))) .race-bottom-link { grid-row: 12 !important; }
  .page-race:not(.page-house-state):not(.page-txsim) main > .wrap:not(:has(> .race-odds:not([hidden]))) .race-summary-strip { grid-row: 6 !important; }
}
/* The experimental note is one compact line on race pages too. */
.page-race .model-disclosure { margin-top: 10px !important; padding: 0 0 0 12px !important; }
.page-race .model-disclosure .model-disclosure__kicker { display: inline; margin-right: 6px; color: var(--amber) !important; font: 800 10.5px/1.3 var(--sans) !important; letter-spacing: .1em; text-transform: uppercase; }
.page-race .model-disclosure .model-disclosure__body { display: inline; color: var(--ink-soft) !important; font: 400 12.5px/1.45 var(--sans) !important; }
.geography-tabs { overflow-y: hidden !important; scrollbar-width: none; }
.geography-tabs::-webkit-scrollbar { display: none; }
.forecast-page > .page-hero, .forecast-page > .hero { padding-top: 4px !important; }
@media (min-width: 1000px) {
  main.forecast-page--governor > .governor-seat-panel { gap: 10px !important; justify-content: flex-start !important; margin-top: 20px !important; }
  main.forecast-page--governor > .governor-seat-panel > * { margin-top: 0 !important; margin-bottom: 0 !important; }
  main.forecast-page--governor > .governor-race-board-panel { margin-top: 20px !important; }
}

/* Homepage: the closest House races as a sideways-scrolling row of tiles.
   The tiles replace the short district table in the control column. */
.home-page .home-house__races-header, .home-page .home-house__races-scroll { display: none !important; }
.home-house__tiles { margin-top: 16px; padding-top: 10px; border-top: 1px solid var(--rule); }
.home-house__tiles-head { display: flex; align-items: baseline; gap: 12px; margin-bottom: 8px; }
.home-house__tiles-head h3 { margin: 0; font: 700 15px/1.3 var(--sans); }
.home-house__tiles-count { color: var(--muted); font-size: 12px; }
.home-house__tiles-nav { display: inline-flex; margin-left: auto; }
.home-house__tiles-nav button { width: 30px; height: 26px; padding: 0; border: 1px solid var(--rule-strong); background: none; color: var(--ink); font: 700 13px/1 var(--sans); cursor: pointer; }
.home-house__tiles-nav button + button { border-left: 0; }
.home-house__tiles-nav button:disabled { color: var(--muted-light); cursor: default; }
.hht-strip { display: grid; grid-auto-flow: column; grid-auto-columns: 196px; gap: 0; overflow-x: auto; scroll-snap-type: x proximity; scrollbar-width: thin; padding-bottom: 6px; }
.hht-strip:focus-visible { outline: 2px solid var(--focus); outline-offset: 2px; }
.hht { display: flex; flex-direction: column; gap: 4px; min-width: 0; padding: 8px 14px 8px; border-left: 1px solid var(--rule-faint); border-top: 3px solid var(--hht, #858b91); color: var(--ink); text-decoration: none; scroll-snap-align: start; }
.hht:first-child { border-left: 0; padding-left: 0; }
.hht:hover .hht__top strong { text-decoration: underline; text-underline-offset: 3px; }
.hht__top { display: flex; align-items: baseline; justify-content: space-between; gap: 6px; }
.hht__top strong { font: 800 14px/1.2 var(--sans); }
.hht__rating { color: var(--muted); font: 700 11px/1.2 var(--sans); white-space: nowrap; }
.hht__margin { font: 800 20px/1.1 var(--sans); font-variant-numeric: tabular-nums; color: var(--ink-soft); }
.hht__margin.is-d { color: var(--blue); }
.hht__margin.is-r { color: var(--red); }
.hht__row { position: relative; display: flex; justify-content: space-between; gap: 6px; padding-bottom: 4px; font-size: 12px; }
.hht__name { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.hht__val { flex: none; font-weight: 700; font-variant-numeric: tabular-nums; }
.hht__bar { position: absolute; left: 0; bottom: 0; height: 2px; background: var(--blue); }
.hht__row--r .hht__bar { background: var(--red); }
.hht__row::after { content: ""; position: absolute; left: 0; right: 0; bottom: 0; height: 2px; background: var(--rule-faint); z-index: -1; }
.hht__foot { margin: 2px 0 0; color: var(--muted); font-size: 11px; }
.home-page .home-house > .home-house__tiles { grid-column: 1 / -1; grid-row: 3; min-width: 0; }
.home-page .home-house > .house-map-legend { grid-column: 1 / -1; grid-row: 4; }
.home-page .home-house > .map-caption { grid-column: 1 / -1; grid-row: 5; }
.home-page .home-house__content .home-house__races { align-self: start !important; }
.home-page .home-house__races { grid-template-rows: none !important; height: auto !important; min-height: 0 !important; }
.home-page .home-house__control--rail { min-height: 0 !important; }

/* ------------------------------------------------------------ v10 Homepage */
/* Lead column: the closest race, then the tipping-point seat, each with the
   same rating-colored spine as the five closest races beside them. */
.home-feature { display: grid; gap: 16px; margin-top: 14px !important; }
.home-feature__item { padding-top: 10px; border-top: 1px solid var(--rule); }
.home-feature__item > .home-feature__kicker { margin: 0 0 8px; }
.home-feature .home-feature__race { gap: 7px; padding: 0 0 0 12px; border-top: 0; }
.home-feature .home-feature__race::before { content: ""; position: absolute; top: 2px; bottom: 2px; left: 0; width: 3px; background: var(--rc-accent, #858b91); }
.home-feature .home-feature__note { margin: 0; font-size: 12.5px; }
/* The five closest races drop the 80% strip on narrower desktops so the row
   never pushes the page wider than the window. */
@media (min-width: 901px) and (max-width: 1279px) {
  .home-page .hc-card, .home-page .hc-card:nth-child(n) { grid-template-columns: 104px 54px minmax(0, 1fr) minmax(0, 150px); gap: 0 12px; }
  .home-page .hc-card__range { display: none !important; }
  .home-page .hc-card .rc-card__foot { min-width: 0; }
}
@media (min-width: 901px) and (max-width: 1080px) {
  .home-page .hc-card, .home-page .hc-card:nth-child(n) { grid-template-columns: 96px 50px minmax(0, 1fr); }
  .home-page .hc-card .rc-card__foot { display: none !important; }
}

/* The Senate forecast, over time: the link sits top right like every other
   homepage section, chart titles carry no white rule, there is no grey rule
   under the charts, and the whole module is tighter. */
.home-page .fh-home { margin-top: 28px !important; }
.home-page .fh-home__head h2 { margin-bottom: 2px !important; }
.home-page .fh-home__dek { font-size: 14px !important; line-height: 1.45 !important; }
.home-page .fh-home__more { justify-self: end; align-self: start; margin-top: 2px; color: var(--ink); font: 700 13px/1.2 var(--sans); white-space: nowrap; }
.home-page .fh-home__figure .fh-figure-title,
.home-page .fh-home__rail .fh-figure-title { margin: 0 0 4px !important; padding: 0 !important; border: 0 !important; }
.home-page .fh-home .fh-shift-list--compact { border-top: 0 !important; }
.home-page .fh-home__foot { margin-top: 6px !important; padding-top: 0 !important; border-top: 0 !important; }
.home-page .fh-home .fh-home__rail .fh-note { margin-top: 6px !important; }
@media (min-width: 1000px) {
  .home-page .fh-home { grid-template-columns: minmax(0, 1.55fr) minmax(0, 1fr); grid-template-rows: auto auto auto; }
  .home-page .fh-home__head { grid-column: 1; grid-row: 1; }
  .home-page .fh-home__more { grid-column: 2; grid-row: 1; }
  .home-page .fh-home__figure { grid-column: 1; grid-row: 2; margin-top: 14px !important; padding-right: 28px; }
  .home-page .fh-home__rail { grid-column: 2; grid-row: 2 / span 2; margin-top: 14px; padding-left: 28px; }
  .home-page .fh-home__foot { grid-column: 1; grid-row: 3; }
}
@media (max-width: 999px) {
  .home-page .fh-home { display: flex; flex-direction: column; }
  .home-page .fh-home__more { order: 3; align-self: flex-start; margin-top: 12px; }
  .home-page .fh-home__foot { order: 2; }
  .home-page .fh-home__body { margin-top: 14px !important; gap: 24px !important; }
}
/* Five closest races: let the stat footer size to its content. */
@media (min-width: 901px) and (max-width: 1359px) {
  .home-page .hc-card, .home-page .hc-card:nth-child(n) { grid-template-columns: 104px 54px minmax(0, 1fr) auto; gap: 0 12px; }
  .home-page .hc-card__range { display: none !important; }
}
@media (min-width: 901px) and (max-width: 1080px) {
  .home-page .hc-card, .home-page .hc-card:nth-child(n) { grid-template-columns: 96px 50px minmax(0, 1fr); }
  .home-page .hc-card .rc-card__foot { display: none !important; }
}

/* ------------------------------------------------------------ v10 Senate */
/* Chance of control set like the homepage scoreboard: heavy sans figures
   with the percent sign at full size and a short label tight underneath. */
.sd-odds__figures { align-items: flex-end; }
.sd-odds__side { gap: 2px !important; }
.sd-odds__num {
  font: 800 clamp(2.4rem, 3.6vw, 3rem)/1 var(--sans) !important;
  letter-spacing: -.02em !important;
  font-variant-numeric: tabular-nums;
}
.sd-odds__num .sd-odds__pct { margin: 0 !important; color: inherit !important; font: inherit !important; vertical-align: baseline; }
.sd-odds__side span:not(.sd-odds__pct) { margin-top: 0 !important; color: var(--muted) !important; font: 600 12px/1.3 var(--sans) !important; }
.sd-odds__bar { height: 6px !important; margin-top: 8px !important; }
/* The close-race charts run the full width now that the change log is gone. */
.sd-page .fh-split--solo { display: block !important; }
.sd-page .fh-split--solo .fh-multiples { grid-template-columns: repeat(auto-fill, minmax(200px, 1fr)); }
/* Seat totals and the odds facts use the same heavy sans figures. */
.sd-chamber__total strong { font: 800 clamp(1.8rem, 2.6vw, 2.2rem)/1 var(--sans) !important; letter-spacing: -.02em; }
.sd-odds__fact dd { font: 800 1.2rem/1.1 var(--sans) !important; letter-spacing: -.01em; }
.sd-odds__fact dd small { font: 400 11.5px/1.3 var(--sans) !important; letter-spacing: 0; }

/* ------------------------------------------------------------ v10 Maps */
/* Every map follows the homepage Senate map: shapes outlined in the page
   color, zoom buttons at the top left of the drawing, and the rating key as
   one row under the map. */
.home-house__district { stroke: var(--paper) !important; stroke-width: 1.1 !important; }
.home-house__district:hover, .home-house__district:focus-visible { stroke: var(--ink) !important; stroke-width: 1.5 !important; }
.home-house__state { stroke: var(--paper) !important; stroke-width: 2 !important; }
#senate-map-section .map-zoom-controls, .governor-map-panel .map-zoom-controls { top: 0 !important; right: auto !important; left: 0 !important; }
.senate-map-legend, .house-map-legend { font-size: 12px !important; }
@media (min-width: 1000px) {
  #senate-map-section > .senate-map-legend,
  .governor-map-panel > .senate-map-legend {
    grid-column: 2 !important; grid-row: 4 !important; display: flex !important; flex-wrap: wrap; justify-content: flex-start !important; gap: 6px 14px !important;
    margin: 0 !important; padding: 10px 0 0 var(--col-gap) !important; border-top: 0 !important; border-left: 1px solid var(--rule) !important; font-size: 12px !important;
  }
  #senate-map-section > .senate-map-legend::before,
  .governor-map-panel > .senate-map-legend::before { content: ""; flex: 0 0 100%; margin: -10px 0 4px; border-top: 1px solid var(--rule-faint); }
}
@media (min-width: 901px) {
  .home-page .home-house > .house-map-legend { grid-column: 1 !important; grid-row: 3 !important; justify-content: flex-start !important; margin: 4px var(--col-gap) 0 0 !important; padding-top: 8px !important; border-top: 1px solid var(--rule-faint) !important; }
  .home-page .home-house > .home-house__tiles { grid-row: 4 !important; }
}
.home-page .fh-home .fh-shift-axis--compact, .home-page .fh-home .fh-shift-row--compact { grid-template-columns: minmax(0, 112px) minmax(0, 1fr) 56px !important; }
.home-page .fh-home__rail, .home-page .fh-home__figure { min-width: 0; }
@media (max-width: 999px) { .home-page .fh-home__body { grid-template-columns: minmax(0, 1fr) !important; } }

/* ------------------------------------------------------------ v11 Homepage */
/* No rules above the expected-seat figures in any of the three views. */
.home-page .flagship-copy .seat-figures, .home-page .flagship-copy .seat-figure { border-top: 0 !important; box-shadow: none !important; }
.home-page .flagship-copy .seat-figures::before, .home-page .flagship-copy .seat-figures::after, .home-page .flagship-copy .seat-figure::before { content: none !important; }
.home-page .flagship-story > .home-closest[hidden] { display: none !important; }
/* House section rail: no stray rules beside the gauge (the rail is size-
   contained, so its bottom rule was drawing at the top). The seat semicircle
   fills the space under the figures. */
.home-page .home-house__content .home-house__races { border-top: 0 !important; border-bottom: 0 !important; }
.home-page .home-house__control--rail { border-bottom: 0 !important; }
.home-page .home-house__races .home-feature__house { margin-top: 18px; padding-top: 0; border-top: 0 !important; }
.home-page .home-house__content .home-house__races { contain: none !important; display: block !important; }
.home-page .home-house__races > * + * { margin-top: 0; }
/* House maps: finer district outlines so small districts keep their color. */
.home-house__district, #house-map .house-district { stroke: var(--paper) !important; stroke-width: .5 !important; }
.home-house__state, #house-map .house-state-outline { stroke: var(--paper) !important; stroke-width: 1.3 !important; }

/* ------------------------------------------------------------ v11 State pages */
/* Senate, House and Governor pages for a state share one skeleton: back
   link, title, update line and the office tabs; then the verdict column
   beside the map; then the full-width sections. The Senate page set the
   pattern; House and Governor pages now follow it exactly. */
body.page-race:not(.page-txsim) .race-intro .back-link { display: inline-block !important; margin: 0 !important; color: var(--blue) !important; font: 600 13px/1.3 var(--sans) !important; }
body.page-race:not(.page-txsim) .race-intro h1 { margin: 6px 0 0 !important; font-size: clamp(1.9rem, 3vw, 2.4rem) !important; line-height: 1.1 !important; }
body.page-race:not(.page-txsim) .race-intro .updated { margin: 6px 0 0 !important; padding: 0 !important; color: var(--muted) !important; font: 500 12px/1.4 var(--sans) !important; }
body.page-race:not(.page-txsim) .race-intro .office-switch {
  display: flex !important; gap: 22px !important; margin: 14px 0 0 !important; padding: 0 !important; border-bottom: 1px solid var(--rule) !important; vertical-align: baseline;
}
body.page-race:not(.page-txsim) .office-switch a { padding: 0 0 9px !important; font: 700 14px/1.2 var(--sans) !important; }
body.page-race:not(.page-txsim) .model-disclosure { margin: 12px 0 0 !important; padding: 0 0 0 12px !important; border-left: 2px solid var(--amber) !important; }
body.page-race:not(.page-txsim) .race-writeup { margin: 18px 0 0 !important; font: 400 15.5px/1.55 var(--serif) !important; }
/* Two :not(#…) lift this layout above the older race-page layers. */
@media (min-width: 1100px) {
  body.page-race:not(.page-txsim):not(#v11a):not(#v11b) main > .wrap {
    display: grid !important; width: var(--shell-w) !important; max-width: none !important;
    grid-template-columns: minmax(360px, .8fr) minmax(0, 1.2fr) !important; grid-template-rows: none !important;
    column-gap: var(--col-gap) !important; row-gap: 0 !important; align-items: start !important;
  }
  :where(body.page-race:not(.page-txsim) main > .wrap) > * { grid-column: 1 / -1; }
  body.page-race:not(.page-txsim):not(#v11a):not(#v11b) .race-intro { display: contents !important; }
  body.page-race:not(.page-txsim):not(#v11a):not(#v11b) .race-intro .back-link { grid-column: 1 / -1 !important; grid-row: 1 !important; justify-self: start; margin-top: 14px !important; }
  body.page-race:not(.page-txsim):not(#v11a):not(#v11b) .race-intro h1 { grid-column: 1 / -1 !important; grid-row: 2 !important; }
  body.page-race:not(.page-txsim):not(#v11a):not(#v11b) .race-intro .updated { grid-column: 1 / -1 !important; grid-row: 3 !important; }
  body.page-race:not(.page-txsim):not(#v11a):not(#v11b) .race-intro .office-switch { grid-column: 1 / -1 !important; grid-row: 4 !important; }
  body.page-race:not(.page-txsim):not(#v11a):not(#v11b) .model-disclosure { grid-column: 1 / -1 !important; grid-row: 5 !important; }
  /* Verdict column. */
  body.page-race:not(.page-txsim):not(#v11a):not(#v11b) .race-writeup { grid-column: 1 !important; grid-row: 6 !important; }
  body.page-race:not(.page-txsim):not(#v11a):not(#v11b) .race-odds { grid-column: 1 !important; grid-row: 7 !important; margin-top: 16px !important; }
  body.page-race:not(.page-txsim):not(#v11a):not(#v11b) .race-summary-strip { grid-column: 1 !important; grid-row: 8 !important; margin-top: 14px !important; }
  /* Map column, level with the verdict column. */
  body.page-race:not(.page-txsim):not(#v11a):not(#v11b) #localized-forecast,
  body.page-race:not(.page-txsim):not(#v11a):not(#v11b) #localized-unavailable { grid-column: 2 !important; grid-row: 6 / span 4 !important; align-self: start !important; margin-top: 18px !important; padding: 0 0 0 var(--col-gap) !important; border: 0 !important; border-left: 1px solid var(--rule) !important; }
  /* Full-width sections, in the Senate page's order. */
  body.page-race:not(.page-txsim):not(#v11a):not(#v11b) #forecast-history-preview { grid-column: 1 !important; grid-row: 10 !important; align-self: stretch !important; margin-top: var(--gap-section) !important; padding-left: 0 !important; border-left: 0 !important; }
  body.page-race:not(.page-txsim):not(#v11a):not(#v11b) #win-probability-panel { grid-column: 2 !important; grid-row: 10 !important; align-self: stretch !important; margin-top: var(--gap-section) !important; padding-left: var(--col-gap) !important; border-left: 1px solid var(--rule) !important; }
  body.page-race:not(.page-txsim):not(#v11a):not(#v11b) #polling-trend { grid-column: 1 / -1 !important; grid-row: 11 !important; }
  body.page-race:not(.page-txsim):not(#v11a):not(#v11b) #model-breakdown { grid-column: 1 / -1 !important; grid-row: 12 !important; margin-top: var(--gap-section) !important; padding-left: 0 !important; border-left: 0 !important; }
  body.page-race:not(.page-txsim):not(#v11a):not(#v11b) #hs-watch { grid-row: 10 !important; margin-top: var(--gap-section) !important; }
  body.page-race:not(.page-txsim):not(#v11a):not(#v11b) #district-forecast { grid-row: 11 !important; margin-top: var(--gap-section) !important; }
  body.page-race:not(.page-txsim):not(#v11a):not(#v11b) #hs-districts { grid-row: 12 !important; margin-top: var(--gap-section) !important; }
  body.page-race:not(.page-txsim):not(#v11a):not(#v11b) #state-polls { grid-column: 1 / -1 !important; grid-row: 13 !important; margin-top: var(--gap-section) !important; }
  body.page-race:not(.page-txsim):not(#v11a):not(#v11b) .race-bottom-link { grid-column: 1 / -1 !important; grid-row: 14 !important; }
  /* House pages: the delegation outlook takes the verdict slot. */
  body.page-race:not(.page-txsim):not(#v11a):not(#v11b).page-house-state .hs-outlook { grid-column: 1 !important; grid-row: 7 !important; margin-top: 16px !important; }
  /* No published chance of winning (most governor races): the model-margin
     history fills the verdict column; win chance and the model sit side by side. */
  body.page-race:not(.page-txsim):not(#v11a):not(#v11b) main > .wrap:not(:has(> .race-odds:not([hidden]))) .race-summary-strip { grid-row: 7 !important; }
  body.page-race:not(.page-txsim):not(#v11a):not(#v11b) main > .wrap:not(:has(> .race-odds:not([hidden]))) #forecast-history-preview { grid-column: 1 !important; grid-row: 8 / span 2 !important; align-self: start !important; margin-top: 18px !important; }
  body.page-race:not(.page-txsim):not(#v11a):not(#v11b) main > .wrap:not(:has(> .race-odds:not([hidden]))) #win-probability-panel { grid-column: 1 !important; padding-left: 0 !important; border-left: 0 !important; }
  body.page-race:not(.page-txsim):not(#v11a):not(#v11b) main > .wrap:not(:has(> .race-odds:not([hidden]))) #model-breakdown { grid-column: 2 !important; grid-row: 10 !important; align-self: stretch !important; padding-left: var(--col-gap) !important; border-left: 1px solid var(--rule) !important; }
  body.page-race:not(.page-txsim):not(#v11a):not(#v11b) main > .wrap:not(:has(> .race-odds:not([hidden]))) #polling-trend { grid-row: 11 !important; }
}
/* Governor pages: no county side panel; the map takes the column and the
   tooltip carries the county estimate. Phones have no hover tooltip, so they
   keep the panel for taps. */
@media (min-width: 761px) {
  body.page-race:has(#race-back-link[href="governors.html"]) #localized-detail { display: none !important; }
  body.page-race:has(#race-back-link[href="governors.html"]) #localized-forecast .localized-layout { display: block !important; }
}
body.page-race:has(#race-back-link[href="governors.html"]) #localized-forecast .localized-map { max-height: 560px !important; }
/* House pages: no rule above the district gauge beside the map. */
.page-house-state .hs-map-detail, .page-house-state #hs-map-detail { border-top: 0 !important; box-shadow: none !important; }
.page-house-state .hs-map-detail::before { content: none !important; }

/* ------------------------------------------------------------ v11 House district maps */
/* District numbers: the size is set in map units by the script so it stays
   11px on screen at every zoom; numbers that do not fit inside their district
   wait for the reader to zoom in. */
#hs-map .house-district-label, #house-map .house-district-label { font-size: inherit !important; font-weight: 700 !important; fill: #fff !important; stroke: rgba(14, 15, 16, .78) !important; stroke-width: .28em !important; paint-order: stroke; stroke-linejoin: round; }
#hs-map .house-label-leader, #hs-map .house-label-dot, #house-map .house-label-leader, #house-map .house-label-dot { display: none !important; }
/* The zoom buttons read as off at full extent, like the county maps. */
.page-house-state .map-zoom-controls button:disabled { opacity: .45; cursor: default; }

/* ------------------------------------------------------------ v11 Home precinct view and full screen */
.home-page .senate-map-modes { display: flex; flex-wrap: wrap; align-items: center; gap: 6px 8px; margin: 0 0 8px; }
.home-page .senate-map-mode { min-height: 30px; padding: 5px 11px; border: 1px solid var(--rule-strong); border-radius: 2px; background: transparent; color: var(--ink-soft); font: 700 12.5px/1 var(--sans); cursor: pointer; }
.home-page .senate-map-mode:hover { border-color: var(--ink-soft); color: var(--ink); }
.home-page .senate-map-mode[aria-pressed="true"] { border-color: var(--ink); background: var(--ink); color: var(--paper); }
.home-page .senate-map-mode[hidden] { display: none; }
.home-page .senate-map-precinct-status { flex: 1 1 220px; margin: 0; color: var(--muted); font: 500 12px/1.35 var(--sans); }
.home-page .senate-map-precinct-status[hidden] { display: none; }
.senate-map-canvas > canvas.senate-map-precincts { position: absolute; inset: 0; z-index: 0; width: 100%; height: 100%; pointer-events: none; }
.senate-map-canvas > canvas.senate-map-precincts[hidden] { display: none; }
.senate-map-canvas > #senate-map { position: relative; z-index: 1; }
/* Precinct view: race states show the canvas under them; their outlines stay. */
#senate-map.is-precincts { background: transparent !important; }
.has-precincts .senate-map-canvas { background: var(--paper); }
#senate-map.is-precincts .senate-map-state:not(.is-no-race) { fill-opacity: 0; stroke: rgba(18, 19, 20, .9); stroke-width: 1.1; }
#senate-map.is-precincts .senate-map-state:not(.is-no-race):hover, #senate-map.is-precincts .senate-map-state.is-active { filter: none; stroke: #fff; stroke-width: 1.6; }
.has-precincts .senate-map-legend { display: none !important; }
.has-precincts .senate-map-legend + figcaption::before { content: "Precinct view: expected two-party margin, shaded from even (white) to D+40 or R+40. "; color: var(--ink-soft); }
/* Full screen: the map fills the window; Esc or the button exits. */
.home-page .home-map-widget__figure.is-fullscreen { position: fixed; inset: 0; z-index: 2000; display: flex; flex-direction: column; margin: 0; padding: 14px 18px; background: var(--paper); }
.home-page .home-map-widget__figure.is-fullscreen .senate-map-shell { flex: 1 1 auto; min-height: 0; height: auto !important; }
.home-page .home-map-widget__figure.is-fullscreen .senate-map-canvas { height: 100% !important; aspect-ratio: auto !important; }
.home-page .home-map-widget__figure.is-fullscreen #senate-map { width: 100%; height: 100% !important; max-height: none !important; }
.home-page .home-map-widget__figure.is-fullscreen figcaption { flex: none; }
html.has-map-fullscreen { overflow: hidden; }
.senate-map-tooltip { z-index: 2100; }

/* Homepage House mode: closest House races scroller under the map (Oct 23). */
/* In House mode the scroller moves into the flagship column where the five-closest table sits. */
.home-page .home-house.is-map-lent { display: none !important; }
.home-page .flagship-story > .home-house__tiles { min-width: 0; max-width: 100%; margin: 0; padding: 0; border: 0; }
.home-page .flagship-story > .home-house__tiles .hht-strip { width: 100%; min-width: 0; max-width: 100%; box-sizing: border-box; overflow-x: auto; }
@media (min-width: 901px) {
  .home-page .flagship-story > .home-house__tiles { grid-column: 2; grid-row: 2; margin-top: 18px !important; padding: 12px 0 0 var(--col-gap); border-left: 1px solid var(--rule); }
}
@media (max-width: 900px) {
  .home-page .flagship-story > .home-house__tiles { margin-top: 26px; padding-top: 14px; border-top: 2px solid var(--rule-heavy); }
}

/* ------------------------------------------------------------ Hover cards: mini table (Oct 23)
   Every map and chart hover card is one small table: a one-line title with a
   party-colored rule on top, one row per candidate (or measure), and a column
   of movement on the right (30 days, vs. 2024, or the poll range).
   Markup: .tip5-head (.tip5-title, .tip5-meta), table.tip5 (thead th; tbody
   tr[.is-leading] > th[scope=row] (.tip5-dot) + td[.tip5-sub|.dem-margin|
   .rep-margin|.ind-margin]), .tip5-foot. data-lean on the container sets the
   rule color. */
.senate-map-tooltip:has(> .tip5-head), .house-map-tooltip:has(> .tip5-head), .map-tooltip:has(> .tip5-head),
.polling-trend-tooltip:has(> .tip5-head), .forecast-history-tooltip:has(> .tip5-head) {
  --tip5-lean: #858b91;
  width: max-content !important; min-width: 0 !important; max-width: min(420px, calc(100vw - 24px)) !important;
  display: block !important; gap: 0 !important;
}
[data-lean="d"] { --tip5-lean: #6aa6dc; }
[data-lean="r"] { --tip5-lean: #e2756d; }
[data-lean="i"] { --tip5-lean: #a88be6; }
[data-lean="even"] { --tip5-lean: #858b91; }
.tip5-head { display: flex; align-items: baseline; justify-content: space-between; gap: 14px; padding: 8px 12px 4px; border-top: 3px solid var(--tip5-lean, #858b91); }
.tip5-head .tip5-title { min-width: 0; color: var(--ink); font: 700 21px/1.15 var(--serif, 'Source Serif 4', Georgia, serif); letter-spacing: -.01em; }
.tip5-head .tip5-meta { flex: none; color: var(--muted); font-size: 14px; font-weight: 600; white-space: nowrap; }
.tip5-wrap { padding: 0 12px 6px; }
table.tip5 { width: 100%; border-collapse: collapse; font-variant-numeric: tabular-nums; }
table.tip5 thead th { padding: 0 0 3px 14px; color: var(--muted); font-size: 11.5px; font-weight: 800; letter-spacing: .05em; text-align: right; text-transform: uppercase; white-space: nowrap; }
table.tip5 thead th:first-child { text-align: left; }
table.tip5 tbody th, table.tip5 tbody td { padding: 3px 0; border-top: 1px solid var(--rule); font-size: 16px; line-height: 1.3; vertical-align: baseline; }
table.tip5 tbody th { max-width: 190px; overflow: hidden; color: var(--ink-soft); font-weight: 600; text-align: left; text-overflow: ellipsis; white-space: nowrap; }
table.tip5 tbody th small { margin-left: 4px; color: var(--muted); font-size: 12px; font-weight: 700; }
table.tip5 tbody td { padding-left: 14px; color: var(--ink); font-weight: 800; text-align: right; white-space: nowrap; }
table.tip5 tbody tr.is-leading th { color: #fff; font-weight: 800; }
table.tip5 tbody tr.tip5-total th, table.tip5 tbody tr.tip5-total td { border-top-color: #4a4e53; }
table.tip5 td.tip5-sub { color: var(--muted); font-weight: 600; }
table.tip5 .dem-margin { color: var(--blue); }
table.tip5 .rep-margin { color: var(--red); }
table.tip5 .ind-margin { color: var(--purple); }
.tip5-dot { display: inline-block; width: 9px; height: 9px; margin-right: 7px; border-radius: 50%; background: var(--neutral, #a3a8ae); vertical-align: 1px; }
.tip5-dot--d { background: var(--blue); } .tip5-dot--r { background: var(--red); } .tip5-dot--i { background: var(--purple); }
.tip5-foot { margin: 0; padding: 5px 12px 6px; border-top: 1px solid var(--rule); color: var(--muted); font-size: 13px; font-weight: 600; line-height: 1.35; }
.tip5-foot b { font-weight: 800; }
.tip5-foot .dem-margin { color: var(--blue); } .tip5-foot .rep-margin { color: var(--red); } .tip5-foot .ind-margin { color: var(--purple); }
.tip5-foot + .tip5-foot { border-top: 0; padding-top: 0; }
.fh-readout:has(> .tip5-head) {
  --ink: #f2f2f0; --ink-soft: #d9dadb; --muted: #9a9fa5; --rule: #2f3236; --blue: #6aa6dc; --red: #e2756d; --purple: #a88be6;
  min-width: 0; width: max-content; max-width: min(340px, calc(100vw - 24px)); padding: 0; overflow: hidden;
  border: 1px solid #3a3e43; border-radius: 2px; background: #18191b; box-shadow: 0 12px 28px rgba(0, 0, 0, .55);
}
.hx-tip:has(> .tip5-head) {
  --ink: #f2f2f0; --ink-soft: #d9dadb; --muted: #9a9fa5; --rule: #2f3236; --blue: #6aa6dc; --red: #e2756d; --purple: #a88be6;
  width: max-content; min-width: 0; max-width: min(380px, calc(100vw - 24px)); padding: 0; overflow: hidden;
  border: 1px solid #3a3e43; border-radius: 2px; background: #18191b; box-shadow: 0 12px 28px rgba(0, 0, 0, .55);
}
table.tip5 .margin-dem, .tip5-foot .margin-dem { color: var(--blue); }
table.tip5 .margin-rep, .tip5-foot .margin-rep { color: var(--red); }

/* ------------------------------------------------ Oct 24 design checklist */
/* National maps on the Senate and governor pages: the same detail toggles and
   Full screen button as the homepage map, in a bar above the map. */
.senate-map-mode { min-height: 30px; padding: 5px 11px; border: 1px solid var(--rule-strong); border-radius: 2px; background: transparent; color: var(--ink-soft); font: 700 12.5px/1 var(--sans); cursor: pointer; }
.senate-map-mode:hover { border-color: var(--ink-soft); color: var(--ink); }
.senate-map-mode[aria-pressed="true"] { border-color: var(--ink); background: var(--ink); color: var(--paper); }
.sd-map-tile > .senate-map-modes { display: flex !important; flex-wrap: wrap; align-items: center; gap: 6px 14px; margin: 0 0 8px !important; }
.sd-map-tile .senate-map-precinct-status { margin: 0; color: var(--muted); font: 500 12px/1.3 var(--sans); }
.sd-map-tile .senate-map-precinct-status[hidden] { display: none; }
.sd-map-tile .senate-map-shell { position: relative; height: auto !important; min-height: 0 !important; }
.sd-map-tile .senate-map-canvas { position: relative; width: 100%; height: auto !important; aspect-ratio: 960 / 520; }
.sd-map-tile .senate-map-canvas svg { width: 100%; height: 100%; }
@media (min-width: 1000px) {
  .sd-map-tile, #senate-map-section.sd-map-tile {
    display: grid !important; grid-template-columns: 240px minmax(0, 1fr) !important; grid-template-rows: auto auto auto 1fr; column-gap: 0; align-items: start;
  }
  .sd-map-tile > .sd-section__head { grid-column: 1 !important; grid-row: 1 / span 4 !important; margin: 0 !important; padding: 0 var(--col-gap, 32px) 0 0 !important; border: 0 !important; }
  .sd-map-tile > .sd-section__head h2 { font-size: 21px !important; }
  .sd-map-tile > .sd-section__head .sd-section__note { margin-top: 10px !important; font-size: 14px !important; line-height: 1.5; }
  .sd-map-tile > .senate-map-modes, .sd-map-tile > .senate-map-shell, .sd-map-tile > .senate-map-legend { grid-column: 2 !important; padding-left: 0 !important; border-left: 0 !important; }
  .sd-map-tile > .senate-map-modes { grid-row: 1 !important; margin: 0 !important; padding-bottom: 8px !important; }
  .sd-map-tile > .senate-map-shell { grid-row: 2 !important; width: auto !important; margin: 0 !important; padding-top: 0 !important; padding-bottom: 0 !important; border-top: 0 !important; border-right: 0 !important; border-bottom: 0 !important; }
  .sd-map-tile > .senate-map-legend { grid-row: 3 !important; display: flex !important; flex-wrap: wrap; justify-content: center; gap: 6px 16px !important; margin: 0 !important; padding-top: 12px !important; font-size: 12px !important; }
}
/* Full screen: the whole map section fills the window; Esc or the button exits. */
.sd-map-tile.is-fullscreen { position: fixed !important; inset: 0; z-index: 2000; display: flex !important; flex-direction: column; margin: 0 !important; padding: 14px 18px !important; background: var(--paper); }
.sd-map-tile.is-fullscreen > .sd-section__head { display: none !important; }
.sd-map-tile.is-fullscreen > .senate-map-modes, .sd-map-tile.is-fullscreen > .senate-map-shell, .sd-map-tile.is-fullscreen > .senate-map-legend { padding-left: 0 !important; border-left: 0 !important; }
.sd-map-tile.is-fullscreen > .senate-map-shell { flex: 1 1 auto; min-height: 0; }
.sd-map-tile.is-fullscreen .senate-map-canvas { height: 100% !important; aspect-ratio: auto !important; }
.sd-map-tile.is-fullscreen #senate-map { width: 100%; height: 100% !important; max-height: none !important; }

/* Governor page: built on the Senate page's layout. */
.gv-page .sd-top__head { padding-bottom: 10px; }
.gv-page .sd-top .sd-updated { align-self: end; text-align: right; }
.gv-note { margin: 0 0 18px; padding: 8px 0 10px; border-top: 1px solid var(--rule); border-bottom: 1px solid var(--rule); color: var(--muted); font: 400 12.5px/1.5 var(--sans); }
.gv-note strong { color: var(--amber); font-weight: 800; }
.gv-page .sd-hero { grid-template-areas: "odds closest"; }
.gv-odds { grid-area: odds; }
.gv-odds .sd-odds__figures { display: grid; grid-template-columns: 1fr auto 1fr; align-items: end; }
.gv-odds .sd-odds__side--rep { justify-self: end; }
.gv-odds__split { justify-self: center; text-align: center; }
.gv-odds__splitnum { color: var(--ink-soft); font: 700 clamp(1.6rem, 2.4vw, 2rem)/1 var(--sans); letter-spacing: -.02em; }
.gv-odds__split span { color: var(--muted); }
.gv-odds .sd-odds__bar { display: flex; position: relative; }
.gv-odds__seg--split { background: #6b7076; }
.gv-odds .sd-odds__facts { grid-template-columns: repeat(3, minmax(0, 1fr)); margin: 0; padding-top: 16px !important; }
.gv-odds .sd-odds__fact dd strong { font: inherit; }
.gv-odds .gv-dem { color: var(--blue); }
.gv-odds .gv-rep { color: var(--red); }
.gv-odds .governor-seat-bar { margin-top: 14px; }
.gv-seat-note { margin: 6px 0 0; color: var(--muted); font: 400 12px/1.4 var(--sans); }
.gv-closest { grid-area: closest; display: flex; flex-direction: column; padding-left: 40px; border-left: 1px solid var(--rule); }
.gv-closest .gv-closest__table { width: 100%; margin-top: 8px; border-collapse: collapse; }
.gv-closest thead th { padding: 6px 8px 6px 0 !important; background: none !important; border-bottom: 1px solid var(--rule) !important; color: var(--muted); font: 800 10.5px/1.3 var(--sans) !important; letter-spacing: .08em; text-align: left; text-transform: uppercase; }
.gv-closest tbody th, .gv-closest tbody td { padding: 6px 8px 6px 0 !important; border-bottom: 1px solid var(--rule-faint) !important; font-size: 14px; }
.gv-closest tbody td:last-child { text-align: right; padding-right: 0 !important; }
.gv-closest .row-link { color: var(--ink-soft); font-size: 12.5px; }
.gv-closest .sd-note { margin: 8px 0 0; color: var(--muted); font-size: 12px; }
.gv-page .sd-section { margin-top: 36px !important; padding-top: 14px; border-top: 1px solid var(--rule); }
.gv-page .sd-section__head { margin-bottom: 10px; }
.gv-page .sd-section__head h2 { margin: 2px 0 4px; font-size: 22px; }
.gv-page .sd-section__dek { margin: 0; max-width: 760px; color: var(--muted); font: 400 13.5px/1.5 var(--sans); }
/* Polls and methodology side by side under the board. */
.gv-lower { display: grid; grid-template-columns: minmax(0, 1.5fr) minmax(0, 1fr); gap: 0; }
.gv-lower > .gv-polls { padding-right: 32px; }
.gv-lower > .gv-method { padding-left: 32px; border-left: 1px solid var(--rule); }
.gv-polls__head { display: flex; justify-content: space-between; align-items: flex-end; gap: 16px; }
.gv-polls__head .latest { margin: 0; color: var(--muted); font: 400 12px/1.4 var(--sans); text-align: right; }
.gv-polls .poll-table th, .gv-polls .poll-table td { padding: 6px 10px 6px 0 !important; font-size: 13px !important; line-height: 1.35 !important; vertical-align: top; }
.gv-method .method-summary ol { display: grid; gap: 8px; margin: 0; padding-left: 18px; color: var(--ink-soft); font: 400 13.5px/1.5 var(--sans); }
.gv-method .methodology-limit { margin: 12px 0 0; padding: 8px 10px; border-left: 2px solid var(--amber); color: var(--ink-soft); font: 400 12.5px/1.5 var(--sans); }
.gv-more { margin: 10px 0 0; font-size: 13px; }
@media (max-width: 999px) {
  .gv-page .sd-hero { grid-template-columns: minmax(0, 1fr); grid-template-areas: "odds" "closest"; }
  .gv-odds { padding-right: 0 !important; }
  .gv-closest { margin-top: 20px; padding: 14px 0 0; border-left: 0; border-top: 1px solid var(--rule); }
  .gv-lower { grid-template-columns: minmax(0, 1fr); }
  .gv-lower > .gv-polls { padding-right: 0; }
  .gv-lower > .gv-method { margin-top: 24px; padding: 14px 0 0; border-left: 0; border-top: 1px solid var(--rule); }
  .gv-page .sd-top .sd-updated { text-align: left; }
}
@media (max-width: 640px) {
  .gv-odds .sd-odds__fact { padding-right: 8px !important; }
  .gv-odds .sd-odds__fact + .sd-odds__fact { padding-left: 8px !important; }
  .gv-odds .sd-odds__fact dd { font-size: 1.1rem !important; }
  .gv-closest thead th:nth-child(5), .gv-closest tbody td:last-child { display: none; }
  .gv-odds__splitnum { font-size: 1.3rem; }
}
.gv-method > .sd-section__head { display: block !important; }
.gv-page .gx-match span { display: inline !important; }
.gv-page .gx-match span + span { margin-left: 6px; }
.gv-page .gx-table th, .gv-page .gx-table td { padding-top: 6px !important; padding-bottom: 6px !important; }
.gv-page .gx-table td.gx-match { display: table-cell !important; white-space: nowrap; }
@media (max-width: 760px) { .gv-page .gx-table td.gx-match { display: none !important; } }
.gv-polls .poll-table td[data-label="Date"] { white-space: nowrap; color: var(--muted); font-size: 12.5px !important; }
.gv-polls .poll-table thead th { font: 800 10.5px/1.3 var(--sans) !important; letter-spacing: .08em; }
.gv-lower > section > .sd-section__head { border-top: 0 !important; }

/* House page: Senate-page header and tighter sections; the map row is unchanged. */
.hp-page .hp-top { padding-top: 14px; }
.hp-page .hp-top .sd-top__head { padding-bottom: 12px; border-bottom: 1px solid var(--rule); }
.hp-page .hp-top .sd-updated { align-self: end; text-align: right; }
.hp-page > section.panel, .hp-page > .content-section { margin-top: 28px !important; padding-top: 14px !important; }
.hp-page .hx-seats__chart { max-width: 600px; margin-inline: auto; }
.hp-page .hx-seats__chart svg { max-height: 300px; }
.hp-page .hn-pull .panel-header, .hp-page .hx-tossups .panel-header, .hp-page .hn-states-panel .panel-header { margin-bottom: 8px !important; }
.hp-page #house-outlook-dashboard .house-outlook__note { margin-top: 6px !important; }
@media (min-width: 1000px) {
  .hp-page #house-outlook-dashboard > .house-outlook__metrics { grid-row: 3 !important; }
  .hp-page #house-outlook-dashboard > .house-outlook__note ~ .house-outlook__note { grid-column: 1 !important; grid-row: 4 !important; margin: 8px var(--col-gap) 0 0 !important; padding-left: 0 !important; color: var(--muted); font-size: 12px !important; }
}
@media (max-width: 999px) { .hp-page .hp-top .sd-updated { text-align: left; } }

/* ==========================================================================
   Sitewide polish (Oct 26): tooltips, map toolbar, legends, footer, headers.
   ========================================================================== */

/* Hover cards always sit above map controls and toolbars. */
.map-tooltip, .hx-tip, .house-map-tooltip, .senate-map-tooltip { z-index: 2100 !important; }
.map-tooltip.is-placed { transform: none !important; }

/* Homepage map: one toolbar row for every office, with the forecast link at its right. */
.map-cta {
  display: inline-flex; align-items: center; gap: 6px; min-height: 30px; margin-left: auto; padding: 5px 12px;
  border: 1px solid var(--ink); border-radius: 2px; background: var(--ink); color: var(--paper) !important;
  font: 700 12.5px/1 var(--sans); text-decoration: none !important; white-space: nowrap;
}
.map-cta:hover { background: transparent; color: var(--ink) !important; }
.map-cta:focus-visible { outline: 2px solid var(--ink); outline-offset: 2px; }
.home-page .home-map-widget.is-house .senate-map-geo { display: flex !important; visibility: hidden; }
.home-page .home-map-widget.is-house #senate-map-fullscreen,
.home-page .home-map-widget.is-house .senate-map-precinct-status { visibility: hidden; }
.home-page .home-map-widget.is-house .home-map-widget__figure > .senate-map-shell,
.home-page .home-map-widget.is-house .home-map-widget__figure > .senate-map-legend,
.home-page .home-map-widget.is-house .home-map-widget__figure > figcaption,
.home-page .home-map-widget.is-house .home-map-widget__figure > .senate-map-tooltip { display: none !important; }
.home-page .home-map-widget.is-house .home-map-widget__figure > .house-map-legend { margin-top: 8px; padding-top: 10px; border-top: 1px solid var(--rule-faint); }
@media (max-width: 640px) {
  .home-page .senate-map-modes .map-cta { order: -1; width: 100%; justify-content: center; margin: 0 0 4px; }
}

/* Search button: a full-size touch target on phones and tablets. */
@media (max-width: 1000px) {
  .site-header .site-search { justify-content: center; min-width: 44px !important; min-height: 44px !important; padding: 0 10px !important; border-bottom: 0 !important; }
  .site-header .site-search::before { width: 18px; height: 18px; }
}
.site-header .site-search:focus-visible, .site-header .menu-toggle:focus-visible { outline: 2px solid var(--ink) !important; outline-offset: 2px; }

/* Compact footer: brand, links and the release line in two short rows. */
.site-footer { margin-top: 36px !important; padding: 14px 0 12px !important; }
.site-footer .footer-grid { display: flex !important; flex-wrap: wrap; align-items: baseline; gap: 6px 22px !important; padding-bottom: 10px !important; }
.site-footer .footer-brand { display: flex; flex-wrap: wrap; align-items: baseline; gap: 4px 12px; margin-right: auto; }
.site-footer .footer-brand p { margin: 0 !important; color: var(--muted); font-size: 12.5px; }
.site-footer .footer-group, .site-footer .footer-grid > div.footer-group { display: flex !important; flex-direction: row !important; flex-wrap: wrap; align-items: baseline; gap: 2px 16px !important; }
.site-footer .footer-group h2 { position: absolute !important; width: 1px; height: 1px; margin: -1px !important; overflow: hidden; clip: rect(0 0 0 0); white-space: nowrap; }
.site-footer .footer-grid a { padding: 4px 0 !important; font-size: 13px !important; }
.site-footer .footer-note { display: flex; flex-wrap: wrap; justify-content: space-between; gap: 4px 16px; padding-top: 8px !important; font-size: 11.5px !important; line-height: 1.45; }
@media (max-width: 700px) {
  .site-footer .footer-grid { gap: 4px 18px !important; }
  .site-footer .footer-brand { width: 100%; margin: 0 0 2px; }
}

/* Office page headers: one rule under the header, the same headline measure on
   Senate, House and Governor pages, no second rule under it. */
.sd-top__head h1 { max-width: 640px; }
main.forecast-page--house > .house-summary-panel,
main.forecast-page--house > .house-map-panel { border-top: 0 !important; }
.gv-page .sd-top .gv-note, .hp-page .sd-top .gv-note { margin-top: 2px !important; padding-top: 0 !important; border-top: 0 !important; }

/* Senate and governor maps: no side panel; the map uses the full section width.
   The section heading stays for screen readers. */
.sd-map-tile > .sd-section__head { position: absolute !important; width: 1px !important; height: 1px !important; margin: -1px !important; padding: 0 !important; overflow: hidden !important; clip: rect(0 0 0 0) !important; white-space: nowrap !important; border: 0 !important; }
@media (min-width: 1000px) {
  .sd-map-tile, #senate-map-section.sd-map-tile, #governor-map-section.sd-map-tile { display: block !important; position: relative; }
  .sd-map-tile > .senate-map-modes, .sd-map-tile > .senate-map-shell, .sd-map-tile > .senate-map-legend { padding-left: 0 !important; border-left: 0 !important; }
  .sd-map-tile > .senate-map-modes { margin: 0 0 8px !important; }
  .sd-map-tile > .senate-map-shell { max-width: 1180px; margin: 0 auto !important; }
}
/* No rule between the tipping-point link and the figures under it. */
#senate-odds-facts .sd-odds__fact { border-top: 0 !important; }
#senate-odds-facts { margin-top: 14px !important; }

/* Senate forecast history: both charts start on the same line and share a
   height, so their top rules and 50-percent / 50-seat reference lines align. */
.sd-page #fh-dek { max-width: none !important; }
.sd-page .fh-dek__note { color: var(--muted); }
.sd-page #fh-archive-note[hidden] { display: none !important; }
@media (min-width: 861px) {
  .sd-history__charts { grid-template-rows: auto auto; align-items: stretch; }
  .sd-history__chart { display: grid; grid-row: span 2; grid-template-rows: subgrid; align-content: start; }
  .sd-history__chart > .fh-section__head { align-self: stretch; display: flex; flex-direction: column; justify-content: flex-start; margin-bottom: 0 !important; padding-bottom: 6px !important; border-bottom: 1px solid var(--ink-soft) !important; }
  .sd-history__chart > .fh-section__head--split { flex-direction: row; align-items: end; }
  .sd-history__chart > .fh-chart-wrap { margin-top: 0 !important; border-top: 0 !important; }
  .sd-page #fh-seats-tabs .fh-tab, .sd-page #fh-seats-tabs button { margin-bottom: -7px; }
}

/* "How every race has moved": compare with any archived release. */
.fh-compare-pick { display: inline-flex; align-items: center; gap: 6px; margin-left: 4px; }
.fh-compare-pick::before { content: "or"; color: var(--muted); font: 500 12px var(--sans); }
.fh-compare-pick__select {
  appearance: none; -webkit-appearance: none; min-height: 32px; padding: 4px 30px 4px 10px;
  border: 1px solid var(--rule-strong); border-radius: 2px; color: var(--ink); font: 600 13px/1.2 var(--sans); cursor: pointer;
  background: var(--paper) url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='10' height='6' viewBox='0 0 10 6'%3E%3Cpath d='M1 1l4 4 4-4' fill='none' stroke='%23c6cacf' stroke-width='1.6'/%3E%3C/svg%3E") no-repeat right 10px center / 10px 6px;
}
.fh-compare-pick__select:hover { border-color: var(--ink-soft); }
.fh-compare-pick__select:focus-visible { outline: 2px solid var(--ink); outline-offset: 2px; }
.sd-page .fh-race-table tbody th, .sd-page .fh-race-table tbody td,
.sd-page .fh-table tbody th, .sd-page .fh-table tbody td { border-bottom: 1px solid var(--rule-faint) !important; background: none !important; }

/* Archive: the latest four releases, then one clear button for the rest. */
.sd-archive .fh-table-wrap { border-top: 1px solid var(--rule-strong) !important; max-height: none !important; }
.sd-archive .fh-table-wrap::after { content: none !important; }
.sd-more-button {
  display: flex; align-items: center; justify-content: center; gap: 8px; width: 100%; min-height: 40px; margin: 12px 0 0; padding: 8px 16px;
  border: 1px solid var(--rule-strong); border-radius: 2px; background: transparent; color: var(--ink); font: 700 13px/1.2 var(--sans); cursor: pointer;
}
.sd-more-button::after { content: ""; width: 7px; height: 7px; border-right: 1.6px solid currentColor; border-bottom: 1.6px solid currentColor; transform: translateY(-2px) rotate(45deg); }
.sd-more-button[aria-expanded="true"]::after { transform: translateY(2px) rotate(-135deg); }
.sd-more-button:hover { border-color: var(--ink-soft); background: var(--paper-2, rgba(255,255,255,.03)); }
.sd-more-button:focus-visible { outline: 2px solid var(--ink); outline-offset: 2px; }
.sd-more-button[hidden] { display: none; }
.sd-page .fh-notes[hidden] { display: none !important; }

/* One short methodology summary at the foot of each forecast page, with links
   into the matching sections of the methodology page. */
.method-brief, .house-methodology {
  display: grid !important; grid-template-columns: minmax(0, 1fr) minmax(0, auto); align-items: end; gap: 10px 40px;
  margin-top: var(--gap-section, 40px) !important; padding: 14px 0 0 !important;
  border: 0 !important; border-top: 2px solid var(--rule-heavy) !important; border-radius: 0 !important; background: none !important; box-shadow: none !important;
}
:is(.method-brief, .house-methodology) .sd-kicker { margin: 0 0 2px !important; }
:is(.method-brief, .house-methodology) h2 { margin: 0 !important; font: var(--h2) !important; }
.method-brief__copy p:not(.sd-kicker) { max-width: 76ch; margin: 4px 0 0 !important; color: var(--ink-soft) !important; font: 400 14.5px/1.5 var(--serif) !important; }
.method-brief__links { display: flex; flex-wrap: wrap; justify-content: flex-end; align-items: baseline; gap: 4px 14px; max-width: 520px; font: 600 13px/1.4 var(--sans); }
.method-brief__links a { padding: 3px 0; color: var(--ink-soft); text-decoration: underline; text-decoration-color: var(--rule-strong); text-underline-offset: 3px; }
.method-brief__links a:hover { color: var(--ink); text-decoration-color: var(--ink); }
.method-brief__links .method-brief__all { color: var(--ink); font-weight: 700; }
.method-brief--stacked { grid-template-columns: minmax(0, 1fr); margin-top: 0 !important; padding-top: 0 !important; border-top: 0 !important; }
.method-brief--stacked .method-brief__links, .method-brief--stacked .method-brief__links { justify-content: flex-start; }
@media (max-width: 860px) {
  .method-brief, .house-methodology { grid-template-columns: minmax(0, 1fr); }
  .method-brief__links { justify-content: flex-start; }
}

/* Seats and Tiles share one slot sized to the taller view, so switching views
   never moves the sections below. The inactive view is invisible and inert. */
.sd-chamber { display: grid !important; grid-template-columns: minmax(0, 1fr); grid-template-rows: auto 1fr; align-content: start; }
.sd-chamber > .sd-chamber__bar { grid-row: 1; }
.sd-chamber > .sd-view { grid-row: 2; grid-column: 1; min-width: 0; }
.sd-chamber > .sd-view[hidden] { display: block !important; visibility: hidden; pointer-events: none; }

/* Methodology: margin-based rating scale with Tilt bands. */
.mx-scale.mx-scale--margin { grid-template-columns: repeat(9, minmax(0, 1fr)) !important; }
.mx-scale .td { background: var(--r-tilt-d) !important; color: #0b1a29; }
.mx-scale .tr { background: var(--r-tilt-r) !important; color: #2a0f0d; }
.mx-scale-ticks--margin { display: grid !important; grid-template-columns: repeat(9, minmax(0, 1fr)); justify-content: initial; }
.mx-scale-ticks--margin span { grid-row: 1; justify-self: end; transform: translateX(50%); white-space: nowrap; font-variant-numeric: tabular-nums; }
.mx-scale-ticks--margin span:nth-child(1) { grid-column: 1; } .mx-scale-ticks--margin span:nth-child(2) { grid-column: 2; }
.mx-scale-ticks--margin span:nth-child(3) { grid-column: 3; } .mx-scale-ticks--margin span:nth-child(4) { grid-column: 4; }
.mx-scale-ticks--margin span:nth-child(5) { grid-column: 5; } .mx-scale-ticks--margin span:nth-child(6) { grid-column: 6; }
.mx-scale-ticks--margin span:nth-child(7) { grid-column: 7; } .mx-scale-ticks--margin span:nth-child(8) { grid-column: 8; }
@media (max-width: 640px) {
  .mx-scale.mx-scale--margin { height: 44px; font-size: 9px !important; line-height: 1.1 !important; }
  .mx-scale.mx-scale--margin span { display: flex; align-items: center; justify-content: center; white-space: normal; padding: 0 1px; }
  .mx-scale-ticks--margin { font-size: 9.5px !important; }
}

/* Map rating legends, sitewide: one continuous rating scale (Democratic side,
   toss-up, Republican side) with labels under each step, and the extra keys
   (independent, no race) set apart as small swatches. */
html body .senate-map-legend,
html body .house-map-legend,
html body #senate-map-section > .senate-map-legend,
html body .governor-map-panel > .senate-map-legend {
  display: flex !important; flex-wrap: wrap !important; align-items: flex-start !important; justify-content: flex-start !important;
  gap: 8px 0 !important; max-width: 760px; margin-top: 10px !important; padding: 0 !important; border: 0 !important;
  color: var(--muted) !important; font: 600 11px/1.2 var(--sans) !important; letter-spacing: .01em;
}
html body .senate-map-legend::before, html body .house-map-legend::before { content: none !important; display: none !important; }
html body .senate-map-legend > span, html body .house-map-legend > span {
  display: flex !important; flex: 1 1 0 !important; flex-direction: column !important; align-items: center !important; gap: 5px !important;
  min-width: 0; padding: 0 !important; white-space: nowrap !important; text-align: center;
}
html body .senate-map-legend > span > i, html body .house-map-legend > span > i {
  display: block !important; width: 100% !important; height: 8px !important; margin: 0 !important; border: 0 !important; border-radius: 0 !important;
}
html body .senate-map-legend > span + span > i, html body .house-map-legend > span + span > i { box-shadow: inset 1px 0 0 var(--paper); }
html body .senate-map-legend > span:has(> .legend-toss), html body .house-map-legend > span:has(> .house-legend-toss) { color: var(--ink-soft) !important; }
html body .senate-map-legend > span:has(> .legend-ind),
html body .senate-map-legend > span:has(> .legend-none) {
  flex: 0 0 auto !important; flex-direction: row !important; gap: 6px !important; align-self: flex-end; margin-left: 16px;
}
html body .senate-map-legend > span:has(> .legend-ind) { margin-left: 22px; }
html body .senate-map-legend > span:has(> .legend-ind) > i,
html body .senate-map-legend > span:has(> .legend-none) > i { width: 10px !important; height: 10px !important; box-shadow: none; }
html body .senate-map-legend > span:has(> .legend-none) > i { background: transparent !important; outline: 1px solid var(--rule-strong); outline-offset: -1px; }
@media (max-width: 640px) {
  html body .senate-map-legend, html body .house-map-legend { font-size: 9.5px !important; letter-spacing: 0; }
  html body .senate-map-legend > span, html body .house-map-legend > span { flex: 1 1 10% !important; white-space: normal !important; }
  html body .senate-map-legend > span:has(> .legend-ind) { margin-left: 0; }
  html body .senate-map-legend > span:has(> .legend-ind),
  html body .senate-map-legend > span:has(> .legend-none) { order: 2; font-size: 11px; }
  html body .senate-map-legend::after { content: ""; order: 1; flex: 0 0 100%; }
}

/* State House pages: "Races to watch" as a sideways-scrolling strip under the
   delegation outlook, in the column beside the district map. */
.page-house-state #hs-watch { min-width: 0; padding-top: 10px !important; }
.page-house-state #hs-watch .panel-header { margin: 0 0 6px !important; }
.page-house-state #hs-watch h2 { margin: 0 !important; font: var(--h2) !important; font-size: 17px !important; }
.page-house-state #hs-watch .race-section-note { margin: 2px 0 0 !important; color: var(--muted) !important; font: 500 11.5px/1.35 var(--sans) !important; }
.page-house-state .hs-watch .hs-watch__strip {
  display: flex !important; gap: 0 !important; overflow-x: auto; overscroll-behavior-x: contain; scroll-snap-type: x mandatory;
  margin: 0 !important; padding: 0 0 8px !important; scrollbar-width: thin; scrollbar-color: var(--rule-strong) transparent;
  -webkit-mask-image: linear-gradient(90deg, #000 calc(100% - 28px), transparent); mask-image: linear-gradient(90deg, #000 calc(100% - 28px), transparent);
}
.page-house-state .hs-watch .hs-watch__strip:focus-visible { outline: 2px solid var(--gold); outline-offset: 3px; }
.page-house-state .hs-watch .hs-watch__strip > .rc-card {
  flex: 0 0 196px; scroll-snap-align: start; padding: 8px 14px 10px 0 !important; margin-right: 14px; border-right: 1px solid var(--rule-faint) !important;
}
.page-house-state .hs-watch .hs-watch__strip > .rc-card:last-child { margin-right: 28px; border-right: 0 !important; }

/* State and race pages: the title sits right under "See all … races". The link
   keeps a 28px tap height (above the 24px minimum) instead of a 44px block. */
body.page-race .race-intro .back-link { display: inline-flex !important; align-items: center; min-height: 28px !important; margin-bottom: 0 !important; }
body.page-race .race-intro h1 { margin-top: 2px !important; }

/* Senate and governor state pages: no county-estimate side panel; the map takes
   the full width and the hover/tap card carries the county detail. */
body.page-race:not(.page-house-state):not(.page-txsim) #localized-forecast .localized-layout { display: block !important; grid-template-columns: minmax(0, 1fr) !important; min-height: 0 !important; }
body.page-race:not(.page-house-state):not(.page-txsim) #localized-forecast #localized-detail { display: none !important; }
body.page-race:not(.page-house-state):not(.page-txsim) #localized-forecast .localized-map-wrap { width: 100% !important; max-width: none !important; }
body.page-race:not(.page-house-state):not(.page-txsim) #localized-forecast #localized-map { width: 100% !important; height: auto !important; }
body.page-race:not(.page-txsim) #localized-forecast .localized-subtitle { font-size: 12.5px !important; line-height: 1.4 !important; }
body.page-race:not(.page-txsim) #localized-forecast .localized-note { margin-top: 6px !important; font-size: 11.5px !important; line-height: 1.45 !important; color: var(--muted) !important; }
body.page-race:not(.page-txsim) #localized-forecast .localized-source { font-size: 11px !important; }

/* Homepage feature cards: a pure-white silhouette of the state above each race. */
.home-feature .home-feature__shape { display: flex; justify-content: center; align-items: center; height: 92px; margin: 2px 0 4px; }
.home-feature .home-feature__shape svg { display: block; width: auto; height: 100%; max-width: 100%; }
.home-feature .home-feature__shape path { fill: #fff; }
@media (max-width: 900px) { .home-feature .home-feature__shape { height: 76px; } }

/* Governor page: seat bar with a majority line and a labeled key. */
.gv-page .governor-seat-bar { position: relative; }
.gv-page .governor-seat-bar::after { content: ""; position: absolute; top: 0; bottom: 0; left: 50%; width: 0; border-left: 2px solid var(--ink); pointer-events: none; }
.gv-page .governor-seat-key { display: flex; flex-wrap: wrap; gap: 5px 14px; margin: 10px 0 0; padding: 0; list-style: none; color: var(--ink-soft); font: 600 11.5px/1.3 var(--sans); }
.gv-page .governor-seat-key li { display: inline-flex; align-items: center; gap: 5px; }
.gv-page .governor-seat-key i { display: inline-block; width: 10px; height: 10px; }
.gv-page .governor-seat-key b { color: var(--ink); font-variant-numeric: tabular-nums; }
.gv-page .governor-seat-key::after { content: "Line marks 25 seats, a majority"; display: inline-flex; align-items: center; padding-left: 12px; border-left: 2px solid var(--ink); color: var(--muted); }
.gv-polls .poll-table { table-layout: auto !important; }
.gv-polls .poll-table td[data-label="Date"] { min-width: 92px; white-space: normal !important; }
.gv-polls .poll-table th[data-label="Race"] { white-space: nowrap; }

/* House battleground: 35 cards, seven across on wide screens. */
@media (min-width: 1200px) { #house-tossups .hx-cards { grid-template-columns: repeat(7, minmax(0, 1fr)) !important; gap: 0 16px !important; } }
#house-tossups .hx-card.is-near { opacity: .92; }

/* House page: the map section is just the map. */
.forecast-page--house .sd-kicker strong { font-weight: inherit; }
.forecast-page--house .house-map-toolbar[hidden], .forecast-page--house .house-map-detail[hidden] { display: none !important; }
.forecast-page--house .house-map-panel .house-map-shell { display: block !important; grid-template-columns: minmax(0, 1fr) !important; }
.forecast-page--house .house-map-panel .house-map-canvas { width: 100% !important; max-width: none !important; }
.forecast-page--house .house-map-panel #house-map-status:not(.is-error) { position: absolute !important; width: 1px; height: 1px; overflow: hidden; clip: rect(0 0 0 0); white-space: nowrap; }

/* House conditional scenarios: full-width layout with a quantile dot plot. */
.forecast-page--house .house-dotplot { display: block; width: 100%; height: auto; max-width: 100%; margin: 12px 0 0; overflow: visible; font: 600 12px var(--sans); }
.forecast-page--house .house-dotplot text { fill: var(--muted); }
.forecast-page--house .house-dotplot .house-dot-threshold-label { fill: var(--ink-soft); font-weight: 700; }
.forecast-page--house .house-dot-axis { stroke: var(--rule-strong); }
.forecast-page--house .house-dot-tick { stroke: var(--rule-strong); }
.forecast-page--house .house-dot { transition: opacity .12s; }
.forecast-page--house .house-dot--dem { fill: var(--r-likely-d); }
.forecast-page--house .house-dot--rep { fill: var(--r-likely-r); }
.forecast-page--house .house-dotplot.has-active .house-dot:not(.is-active) { opacity: .35; }
.forecast-page--house .house-dot.is-active { stroke: var(--ink); stroke-width: 1.5; }
.forecast-page--house .house-dot-hit { fill: transparent; cursor: crosshair; }
.forecast-page--house .house-dot-baseline { stroke: var(--ink-soft); stroke-width: 1; stroke-dasharray: 3 3; }
.forecast-page--house .house-dotplot .house-dot-baseline-label { fill: var(--ink-soft); font-size: 11px; }
.forecast-page--house .house-dotplot:focus-visible { outline: 2px solid var(--gold); outline-offset: 4px; }
.forecast-page--house .house-dotplot__readout { min-height: 1.4em; margin: 6px 0 0 !important; color: var(--ink-soft); font: 600 13px/1.4 var(--sans); }
@media (min-width: 1000px) {
  .forecast-page--house #house-outlook-dashboard > .house-diagnostics { grid-template-columns: minmax(0, 1.3fr) minmax(0, 1fr) !important; }
  .forecast-page--house .house-diagnostics > * { grid-column: 1 / -1 !important; grid-row: auto !important; padding-right: 0 !important; }
  .forecast-page--house .house-diagnostics > .house-diagnostics__intro { grid-column: 1 !important; padding-right: var(--col-gap) !important; }
  .forecast-page--house .house-diagnostics > .house-scenario-control { grid-column: 2 !important; grid-row: 3 !important; align-self: end; }
  .forecast-page--house .house-diagnostics > .table-wrap { grid-column: 1 !important; margin-top: 16px !important; padding: 0 var(--col-gap) 0 0 !important; border-left: 0 !important; }
  .forecast-page--house .house-diagnostics > details { grid-column: 2 !important; margin-top: 16px !important; padding: 0 0 0 var(--col-gap) !important; border-left: 1px solid var(--rule) !important; }
  .forecast-page--house #house-scenario-histogram svg { margin: 14px 0 0 !important; }
}
.forecast-page--house .house-dotplot .house-hist-threshold { stroke: var(--ink); stroke-width: 1.5; }

/* Footer, Oct 27: one tidy row of brand and links, one muted release line.
   The same rules fit every footer variant on the site (grouped or plain
   link columns, a release line as its own row or inside the last column). */
.site-footer { margin-top: 40px !important; padding: 18px 0 16px !important; border-top: 1px solid var(--rule) !important; background: var(--paper) !important; }
.site-footer .footer-grid { display: flex !important; flex-wrap: wrap !important; align-items: center !important; gap: 8px 22px !important; padding: 0 0 14px !important; grid-template-columns: none !important; }
.site-footer .footer-grid > div:first-child { display: flex !important; flex-wrap: wrap; align-items: baseline; gap: 2px 12px !important; margin: 0 auto 0 0 !important; padding: 0 !important; }
.site-footer .footer-grid > div:first-child .brand,
.site-footer .footer-grid > div:first-child .footer-brand { color: var(--ink) !important; font: 800 13.5px/1 var(--sans) !important; letter-spacing: .2em !important; text-decoration: none; }
.site-footer .footer-grid > div:first-child p { max-width: none !important; margin: 0 !important; color: var(--muted) !important; font: 500 12px/1.3 var(--sans) !important; letter-spacing: 0 !important; }
.site-footer .footer-grid > div:not(:first-child) { display: contents !important; }
.site-footer .footer-grid > div:not(:first-child) h2 { position: absolute !important; width: 1px !important; height: 1px !important; margin: -1px !important; padding: 0 !important; overflow: hidden !important; clip: rect(0 0 0 0) !important; white-space: nowrap !important; border: 0 !important; }
.site-footer .footer-grid > div:not(:first-child) a { display: inline-flex !important; align-items: center; width: auto !important; min-height: 28px !important; margin: 0 !important; padding: 0 !important; color: var(--ink-soft) !important; font: 600 12.5px/1 var(--sans) !important; letter-spacing: .01em; text-decoration: none !important; white-space: nowrap; }
.site-footer .footer-grid > div:not(:first-child) a:hover { color: var(--ink) !important; text-decoration: underline !important; text-underline-offset: 4px; }
.site-footer .footer-grid > div:not(:first-child) a[aria-current="page"] { color: var(--ink) !important; box-shadow: inset 0 -2px 0 var(--ink); }
/* The release line: its own ruled row, whichever element carries it. */
.site-footer .footer-grid p.footer-note { order: 10; flex: 1 0 100%; margin: 6px 0 -14px !important; padding: 10px 0 0 !important; border-top: 1px solid var(--rule) !important; }
.site-footer > .footer-meta,
.site-footer > .footer-note,
.site-footer .footer-grid p.footer-note { display: flex !important; flex-wrap: wrap !important; justify-content: space-between !important; align-items: baseline !important; gap: 4px 20px !important; margin-top: 0 !important; padding-top: 10px !important; border-top: 1px solid var(--rule) !important; color: var(--muted) !important; font: 500 11.5px/1.5 var(--sans) !important; }
.site-footer > .footer-meta > *,
.site-footer > .footer-note > * { flex: 0 0 auto; white-space: nowrap; }
.site-footer > .footer-meta > [id],
.site-footer > .footer-note > span:first-child { flex: 1 1 320px; white-space: normal; text-wrap: pretty; }
.site-footer > .footer-meta > span:first-child:not([id]) { order: 2; }
.site-footer > .footer-meta > [id] { order: 1; }
.site-footer > .footer-meta > span:last-child:not([id]) { order: 3; }
.site-footer > .footer-meta a, .site-footer > .footer-note a { color: var(--ink-soft) !important; text-decoration: none; }
.site-footer > .footer-meta a:hover, .site-footer > .footer-note a:hover { color: var(--ink) !important; text-decoration: underline; }
@media (max-width: 700px) {
  .site-footer { padding: 16px 0 14px !important; }
  .site-footer .footer-grid { display: grid !important; grid-template-columns: repeat(3, minmax(0, 1fr)) !important; gap: 0 12px !important; padding-bottom: 10px !important; }
  .site-footer .footer-grid > div:first-child { grid-column: 1 / -1; margin: 0 0 6px !important; }
  .site-footer .footer-grid > div:not(:first-child) a { min-height: 36px !important; white-space: normal; line-height: 1.2 !important; }
  .site-footer .footer-grid p.footer-note { grid-column: 1 / -1; margin: 6px 0 -10px !important; }
  .site-footer > .footer-meta > *, .site-footer > .footer-note > * { white-space: normal; }
}

/* Homepage update line, Oct 27: a short line over each model's inputs date. */
.home-page .flagship-copy .story-meta { cursor: default; }
.home-page .flagship-copy .story-meta__main { display: block; }
.home-page .flagship-copy .story-meta__chain { display: block; margin-top: 3px; color: var(--muted); font-size: 11.5px; line-height: 1.4; text-wrap: pretty; }

/* Homepage, Governors selected (Oct 27): the expected-governors figures sit
   as one tight pair of rows right under the majority odds, so the closest
   governor race moves up and the column ends with the map. */
.home-page .flagship-copy[data-explorer="governor"] .home-gov-odds { gap: 8px; margin: 4px 0 0; }
.home-page .flagship-copy[data-explorer="governor"] .home-gov-odds .scoreboard__meta { font-size: 12.5px; }
.home-page .flagship-copy[data-explorer="governor"] .seat-figures { display: grid !important; grid-template-columns: 1fr !important; gap: 0; margin: 6px 0 0 !important; padding-top: 0 !important; }
.home-page .flagship-copy[data-explorer="governor"] .seat-figure { display: flex !important; justify-content: space-between; align-items: baseline; margin: 0 !important; padding: 3px 0 !important; text-align: left !important; }
.home-page .flagship-copy[data-explorer="governor"] .seat-figure span { font-size: 12.5px !important; }
.home-page .flagship-copy[data-explorer="governor"] .seat-figure strong { font-size: 1.05rem !important; }
.home-page .flagship-copy[data-explorer="governor"] .home-feature { margin-top: 12px !important; }

/* House page header, Oct 27: the headline sets on two lines, like the Senate
   page, with a little more room above and below it. */
.hp-page .hp-top { padding-top: 22px !important; }
.hp-page .hp-top .sd-top__head { padding-bottom: 18px !important; row-gap: 8px; }
.hp-page .hp-top h1 { max-width: 14em !important; text-wrap: balance; }

/* Conditional scenarios, Oct 27: buttons for the national environment, the
   dot plot and readout on the left, the scenario table and notes on the right. */
.house-scenario-control.has-seg { display: grid !important; gap: 6px; }
.house-scenario-control.has-seg label { color: var(--ink) !important; font: 700 13px/1.2 var(--sans) !important; }
.house-scenario-control.has-seg select { position: absolute !important; width: 1px !important; height: 1px !important; margin: -1px !important; padding: 0 !important; overflow: hidden !important; clip: rect(0 0 0 0) !important; border: 0 !important; }
.house-scenario-seg { display: grid; grid-template-columns: repeat(5, minmax(0, 1fr)); border: 1px solid var(--rule-strong); }
.house-scenario-seg button { min-height: 38px; padding: 6px 4px; border: 0; border-left: 1px solid var(--rule-strong); background: transparent; color: var(--ink-soft); font: 700 12.5px/1.15 var(--sans); cursor: pointer; transition: background .12s, color .12s; }
.house-scenario-seg button:first-child { border-left: 0; }
.house-scenario-seg button.is-rep { color: color-mix(in srgb, var(--red) 75%, var(--ink-soft)); }
.house-scenario-seg button.is-dem { color: color-mix(in srgb, var(--blue) 75%, var(--ink-soft)); }
.house-scenario-seg button:hover:not(:disabled) { background: var(--surface-2); color: var(--ink); }
.house-scenario-seg button[aria-pressed="true"] { background: var(--ink); color: var(--paper); }
.house-scenario-seg button.is-rep[aria-pressed="true"] { background: var(--red); color: #fff; }
.house-scenario-seg button.is-dem[aria-pressed="true"] { background: var(--blue); color: #fff; }
.house-scenario-seg button:disabled { cursor: default; opacity: .55; }
.house-scenario-seg button:focus-visible { position: relative; z-index: 1; outline: 2px solid var(--gold); outline-offset: 2px; }
.house-scenario-seg__hint { margin: 0 !important; color: var(--muted); font: 500 12px/1.35 var(--sans) !important; }
.forecast-page--house .house-diagnostics #house-scenario-label { margin: 14px 0 0 !important; color: var(--ink); font: 700 14px/1.3 var(--sans); }
.forecast-page--house .house-diagnostics tr.is-pickable { cursor: pointer; }
.forecast-page--house .house-diagnostics tr.is-pickable:hover { background: var(--surface-2); }
.forecast-page--house .house-diagnostics__status { color: var(--muted) !important; font: 500 12px/1.4 var(--sans) !important; }
@media (min-width: 1000px) {
  .forecast-page--house #house-outlook-dashboard > .house-diagnostics.has-columns { grid-template-columns: minmax(0, 1.3fr) minmax(0, 1fr) !important; column-gap: 0 !important; }
  .forecast-page--house .house-diagnostics.has-columns > * { grid-row: auto !important; padding-right: 0 !important; }
  .forecast-page--house .house-diagnostics.has-columns > .eyebrow,
  .forecast-page--house .house-diagnostics.has-columns > h2 { grid-column: 1 / -1 !important; }
  .forecast-page--house .house-diagnostics.has-columns > .house-diagnostics__intro { grid-column: 1 !important; grid-row: 3 !important; max-width: 68ch; padding-right: var(--col-gap) !important; }
  .forecast-page--house .house-diagnostics.has-columns > .house-scenario-control { grid-column: 2 !important; grid-row: 3 !important; align-self: end; margin: 0 !important; padding-left: var(--col-gap) !important; }
  .forecast-page--house .house-diagnostics.has-columns > .hd-main { grid-column: 1 !important; grid-row: 4 !important; padding-right: var(--col-gap) !important; }
  .forecast-page--house .house-diagnostics.has-columns > .hd-side { grid-column: 2 !important; grid-row: 4 !important; align-self: stretch; margin-top: 14px; padding-left: var(--col-gap) !important; border-left: 1px solid var(--rule); }
  .forecast-page--house .house-diagnostics .hd-side .table-wrap { margin: 0 !important; padding: 0 !important; border: 0 !important; }
  .forecast-page--house .house-diagnostics .hd-side .data-table { min-width: 0 !important; width: 100%; font-size: 12.5px !important; }
  .forecast-page--house .house-diagnostics .hd-side .data-table th, .forecast-page--house .house-diagnostics .hd-side .data-table td { padding: 8px 6px !important; }
  .forecast-page--house .house-diagnostics .hd-side .data-table th[scope="row"] { min-width: 0 !important; width: 34%; padding-left: 8px !important; }
  .forecast-page--house .house-diagnostics .hd-side .data-table thead th { white-space: normal !important; font-size: 10px !important; letter-spacing: .06em !important; line-height: 1.25 !important; vertical-align: bottom; }
  .forecast-page--house .house-diagnostics .hd-side .data-table td { white-space: nowrap; }
  .forecast-page--house .house-diagnostics .hd-side .data-table tbody th[scope="row"] { width: 40%; line-height: 1.3; }
  .forecast-page--house .house-diagnostics .hd-side .house-diagnostics__status { margin: 10px 0 0 !important; }
  .forecast-page--house .house-diagnostics .hd-side details { padding: 10px 0 0 !important; border-left: 0 !important; }
  .forecast-page--house .house-diagnostics .hd-main details { margin-top: 10px !important; padding: 10px 0 0 !important; border-left: 0 !important; }
}
@media (max-width: 999px) {
  .forecast-page--house .house-diagnostics .hd-side { margin-top: 12px; }
  .forecast-page--house .house-diagnostics .hd-side .data-table { min-width: 0 !important; width: 100%; font-size: 12px !important; }
  .forecast-page--house .house-diagnostics .hd-side .data-table th, .forecast-page--house .house-diagnostics .hd-side .data-table td { padding: 7px 4px !important; }
  .forecast-page--house .house-diagnostics .hd-side .data-table thead th { white-space: normal !important; font-size: 9.5px !important; letter-spacing: .04em !important; line-height: 1.2 !important; vertical-align: bottom; }
  .forecast-page--house .house-diagnostics .hd-side .data-table td { white-space: nowrap; }
  .forecast-page--house .house-diagnostics .hd-side .data-table tbody th[scope="row"] { min-width: 0 !important; width: 36%; padding-left: 6px !important; line-height: 1.25; }
  .forecast-page--house .house-diagnostics .house-scenario-metrics { display: grid !important; grid-template-columns: repeat(3, minmax(0, 1fr)) !important; }
  .forecast-page--house .house-diagnostics .house-scenario-metrics > div,
  .forecast-page--house .house-diagnostics .house-scenario-metrics > div + div { display: block !important; padding: 8px 8px 8px 0 !important; border-left: 0 !important; text-align: left !important; }
  .forecast-page--house .house-diagnostics .house-scenario-metrics > div + div { padding-left: 8px !important; border-left: 1px solid var(--rule) !important; }
  .forecast-page--house .house-diagnostics .house-scenario-metrics dt { font-size: 9.5px !important; letter-spacing: .05em !important; line-height: 1.25; }
  .forecast-page--house .house-diagnostics .house-scenario-metrics dd { margin: 4px 0 0 !important; font-size: 1.2rem !important; text-align: left !important; }
}

/* Tooltips stay hidden while the page scrolls or a map zooms under the wheel
   (theme.js "quiet" mode), until the pointer moves again. */
html.coyn-tip-quiet :is(.map-tooltip, .senate-map-tooltip, .house-map-tooltip, .gx-tip, .hx-tip, .sr-tip, [role="tooltip"]):not([data-tip-persist]) { visibility: hidden !important; opacity: 0 !important; }

/* Needle tick labels never take a map outline stroke (it thinned and dimmed
   them on House state pages). */
.cg-needle .cg-band-label { stroke: none !important; }

/* Homepage: the Senate history and House forecast links use the map's white button, top right. */
.home-page .fh-home__more.map-cta, .home-page .home-house__forecast-link.map-cta { display: flex; width: max-content; margin-left: auto; justify-self: end; align-self: start; color: var(--paper) !important; font: 700 12.5px/1 var(--sans); }
.home-page .fh-home__more.map-cta:hover, .home-page .home-house__forecast-link.map-cta:hover { color: var(--ink) !important; }
@media (max-width: 900px) {
  .home-page .fh-home__more.map-cta { margin-left: 0; }
}

/* Governors: the eight closest races, polished (Oct 27). */
.gv-closest tbody tr { transition: background .12s; }
.gv-closest tbody tr:hover { background: rgba(255,255,255,.03); }
.gv-closest tbody th a { display: block; color: var(--ink); font-weight: 700; text-decoration: none; }
.gv-closest tbody th a:hover { text-decoration: underline; }
.gv-closest__match { display: block; margin-top: 2px; color: var(--muted); font: 600 11.5px/1.25 var(--sans); white-space: nowrap; }
.gv-closest tbody td.margin-dem, .gv-closest tbody td.margin-rep, .gv-closest tbody td.margin-even { font-weight: 800; font-variant-numeric: tabular-nums; white-space: nowrap; }
.gv-closest__chance { min-width: 120px; }
.gv-closest__pcts { display: flex; justify-content: space-between; gap: 8px; font: 700 12px/1.2 var(--sans); font-variant-numeric: tabular-nums; }
.gv-closest__bar { display: flex; height: 5px; margin-top: 4px; overflow: hidden; background: var(--rule-faint); }
.gv-closest__bar i { display: block; height: 100%; }
.gv-closest__bar .is-d { background: var(--blue); }
.gv-closest__bar .is-r { background: var(--red); margin-left: auto; }
.gv-closest tbody td:last-child .row-link { display: inline-block; padding: 2px 4px; color: var(--muted); font-size: 15px; text-decoration: none; }
.gv-closest tbody tr:hover td:last-child .row-link { color: var(--ink); }
.gv-closest tbody th, .gv-closest tbody td { vertical-align: middle; }
@media (max-width: 640px) {
  .gv-closest__chance { min-width: 92px; }
  .gv-closest__match { white-space: normal; }
}
.gv-closest__chance.is-empty { color: var(--muted); font-size: 12px; }

/* Senate track record: expected vs. actual maps and the miss table (Oct 27). */
.sd-recmap .sd-section__head { display: flex; flex-wrap: wrap; justify-content: space-between; align-items: flex-end; gap: 12px 24px; }
.sd-recmap__cycles { display: inline-flex; border: 1px solid var(--rule); }
.sd-recmap__cycles button { padding: 6px 14px; border: 0; background: transparent; color: var(--muted); font: 700 12.5px/1 var(--sans); cursor: pointer; }
.sd-recmap__cycles button[aria-pressed="true"] { background: var(--ink); color: var(--paper); }
.sd-recmap__pair { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 0; margin-top: 12px; }
.sd-recmap__fig { margin: 0; padding: 0 20px 0 0; min-width: 0; }
.sd-recmap__fig + .sd-recmap__fig { padding: 0 0 0 20px; border-left: 1px solid var(--rule-faint); }
.sd-recmap__cap { margin: 0 0 6px; color: var(--ink); font: 700 13px/1.3 var(--sans); }
.sd-recmap__fig svg { display: block; width: 100%; height: auto; }
.sd-recmap__state { stroke: var(--paper, #121314); stroke-width: 1; }
.sd-recmap__state.has-race { cursor: default; }
.sd-recmap__state.has-race:hover, .sd-recmap__state.has-race:focus { stroke: var(--ink); stroke-width: 1.5; outline: none; }
.sd-recmap__miss { fill: none; stroke: var(--amber, #e0a33a); stroke-width: 3; pointer-events: none; }
.sd-recmap__keys { display: grid; gap: 6px; margin-top: 10px; }
.sd-recmap__key { display: flex; flex-wrap: wrap; gap: 4px 14px; margin: 0; padding: 0; list-style: none; color: var(--muted); font: 600 11.5px/1.3 var(--sans); }
.sd-recmap__key b { min-width: 92px; color: var(--ink-soft); }
.sd-recmap__key i { display: inline-block; width: 11px; height: 11px; margin-right: 5px; vertical-align: -1px; }
.sd-recmap__key i.is-miss { border: 2px solid var(--amber, #e0a33a); background: transparent; }
.sd-recmap__key i.is-none { background: #26292d; border: 1px solid var(--rule); }
.sd-recmap__tip { position: fixed; z-index: 2100; }
.sd-recmap__tip .is-miss, .sd-rechist .is-miss { color: var(--amber, #e0a33a); font-weight: 700; }
.sd-rechist { display: grid; grid-template-columns: minmax(0, 1.6fr) minmax(0, 1fr); gap: 0; margin-top: 8px; }
.sd-rechist__wrap { min-width: 0; padding-right: 28px; overflow-x: auto; }
.sd-rechist__table { width: 100%; border-collapse: collapse; font: 400 13.5px/1.4 var(--sans); }
.sd-rechist__table th, .sd-rechist__table td { padding: 7px 10px 7px 0; border-bottom: 1px solid var(--rule-faint); text-align: left; vertical-align: top; }
.sd-rechist__table thead th { color: var(--muted); font: 800 10.5px/1.3 var(--sans); letter-spacing: .08em; text-transform: uppercase; border-bottom: 1px solid var(--rule); }
.sd-rechist__table tbody th { color: var(--ink); font-weight: 800; }
.sd-rechist__table td small { color: var(--muted); }
.sd-rechist .sd-muted { color: var(--muted); }
.sd-rechist__off { min-width: 0; padding-left: 28px; border-left: 1px solid var(--rule-faint); }
.sd-rechist__sub { margin: 0 0 6px; font: 700 13px/1.3 var(--sans); color: var(--ink); }
.sd-rechist__list { margin: 0; padding: 0; list-style: none; counter-reset: off; }
.sd-rechist__list li { display: grid; grid-template-columns: minmax(0, 1fr) auto; gap: 0 10px; padding: 6px 0; border-bottom: 1px solid var(--rule-faint); font-size: 13px; }
.sd-rechist__list li span { grid-column: 1; color: var(--muted); font-size: 12px; }
.sd-rechist__list li b { grid-column: 2; grid-row: 1 / span 2; align-self: center; font-variant-numeric: tabular-nums; }
@media (max-width: 760px) {
  .sd-recmap__pair, .sd-rechist { grid-template-columns: minmax(0, 1fr); }
  .sd-recmap__fig { padding: 0; }
  .sd-recmap__fig + .sd-recmap__fig { margin-top: 14px; padding: 14px 0 0; border-left: 0; border-top: 1px solid var(--rule-faint); }
  .sd-rechist__wrap { padding-right: 0; }
  .sd-rechist__off { margin-top: 16px; padding: 14px 0 0; border-left: 0; border-top: 1px solid var(--rule-faint); }
  .sd-rechist__table th:nth-child(2), .sd-rechist__table td:nth-child(2), .sd-rechist__table th:nth-child(3), .sd-rechist__table td:nth-child(3) { display: none; }
  .sd-rechist__table td small { display: block; }
}
.sd-rechist__miss { display: block; } .sd-rechist__miss + .sd-rechist__miss { margin-top: 4px; }

/* Senate page: no rule beside the map at any width (Oct 27). */
#senate-map-section.sd-map-tile > .senate-map-shell, #senate-map-section.sd-map-tile > .senate-map-modes, #senate-map-section.sd-map-tile > .senate-map-legend { border-left: 0 !important; padding-left: 0 !important; }
/* Phones: the Senate map is the first thing in the forecast tab. */
@media (max-width: 760px) {
  #sd-panel-forecast:not([hidden]) { display: flex; flex-direction: column; }
  #sd-panel-forecast > * { order: 1; min-width: 0; }
  #sd-panel-forecast > #senate-map-section { order: 0; margin-top: 0 !important; }
}

/* Senate page (Oct 29): the map is the hero's main view (Map, Tiles, Seats);
   the odds column is condensed to give it room. */
@media (min-width: 1000px) {
  .sd-hero.sd-hero--map { grid-template-columns: minmax(300px, 0.58fr) minmax(0, 1.42fr) !important; }
}
.sd-hero--map .sd-odds__num { font-size: clamp(2.2rem, 3.6vw, 3rem) !important; }
.sd-hero--map .sd-view--map #senate-map-section { margin: 0 !important; padding: 0 !important; border: 0 !important; display: block !important; }
.sd-hero--map .sd-view--map #senate-map-section > .sd-section__head { display: none !important; }
.sd-hero--map .sd-view--map #senate-map-section > .senate-map-modes { display: flex !important; flex-wrap: wrap; align-items: center; gap: 6px 12px; margin: 0 0 6px !important; padding: 0 !important; }
.sd-hero--map .sd-view--map #senate-map-section > .senate-map-shell { height: auto !important; margin: 0 !important; padding: 0 !important; }
.sd-hero--map .sd-view--map #senate-map-section .senate-map-canvas { aspect-ratio: 960 / 520; height: auto !important; }
.sd-hero--map .sd-view--map #senate-map-section svg#senate-map { width: 100% !important; height: auto !important; }
.sd-hero--map .sd-view--map #senate-map-section > .senate-map-legend { margin: 8px 0 0 !important; padding: 0 !important; justify-content: center; }
.sd-hero--map .sd-view--map #senate-map-section.is-fullscreen { position: fixed !important; inset: 0; padding: 14px 18px !important; display: flex !important; }
.sd-hero--map .sd-chamber__plot { max-width: 760px; margin: 0 auto; }
.sd-hero--map .sd-tiles .gx-tiles { max-width: 820px; margin-left: auto; margin-right: auto; }
@media (min-width: 1000px) {
  .sd-hero--map .sd-tipping__note { font-size: 13px !important; line-height: 1.45 !important; }
  .sd-hero--map .sd-odds__facts { display: grid !important; grid-template-columns: repeat(2, minmax(0, 1fr)) !important; row-gap: 10px !important; }
  .sd-hero--map .sd-odds__fact { border-left: 0 !important; padding-left: 0 !important; }
  .sd-hero--map .sd-odds__fact:nth-child(even) { padding-left: 14px !important; border-left: 1px solid var(--rule-faint) !important; }
}
@media (max-width: 999px) {
  .sd-hero.sd-hero--map { grid-template-areas: "chamber" "odds" !important; }
  .sd-hero--map > .sd-chamber { order: -1; padding-top: 4px !important; border-top: 0 !important; }
  .sd-hero--map > .sd-odds { border-top: 1px solid var(--rule) !important; margin-top: 16px !important; }
}
/* Home page on phones: the map comes first (Oct 29). */
@media (max-width: 760px) {
  .home-page > .shell { display: flex !important; flex-direction: column !important; }
  .home-page > .shell > * { order: 2; min-width: 0; }
  .home-page > .shell > .flagship-story { order: 0; margin-top: 0 !important; }
  .home-page > .shell > .scoreboard { order: 1; }
  .home-page .flagship-story { display: flex !important; flex-direction: column !important; }
  .home-page .flagship-story > * { order: 2; min-width: 0; width: 100%; max-width: 100%; }
  .home-page .flagship-story > .home-map-widget { order: 0; margin-top: 0 !important; padding-top: 4px !important; border-top: 0 !important; }
  .home-page .flagship-story > .flagship-copy { order: 1; margin-top: 18px !important; padding-top: 16px !important; border-top: 1px solid var(--rule) !important; }
}
/* House page: the control needle and its figures sit centered in their column (Oct 29). */
@media (min-width: 1000px) {
  .hp-page .house-summary-panel.forecast-summary { justify-content: center !important; }
}
/* Track record maps: every cycle shown; richer hover cards (Oct 29). */
.sd-recmap__cycle + .sd-recmap__cycle { margin-top: 18px; padding-top: 14px; border-top: 1px solid var(--rule-faint); }
.sd-recmap__year { margin: 0 0 4px; font: 800 15px/1.2 var(--sans); color: var(--ink); }
.sd-recmap__tip { position: fixed; z-index: 2100; display: grid; gap: 6px; width: min(270px, calc(100vw - 24px)); padding: 12px; border: 1px solid #4b5055; background: rgba(31,32,33,.98); box-shadow: 0 8px 24px rgba(0,0,0,.34); color: var(--ink-soft); font: 400 12px/1.35 var(--sans); pointer-events: none; }
.sd-recmap__tip[hidden] { display: none; }
.sd-rtip__head { display: flex; align-items: baseline; justify-content: space-between; gap: 10px; }
.sd-rtip__state { color: var(--ink); font: 700 18px/1.1 var(--serif); }
.sd-rtip__cycle { color: var(--muted); font: 800 10px/1.2 var(--sans); letter-spacing: .1em; text-transform: uppercase; }
.sd-rtip__badge { justify-self: start; padding: 2px 7px; border-radius: 2px; font: 800 10.5px/1.4 var(--sans); letter-spacing: .04em; text-transform: uppercase; }
.sd-rtip__badge.is-hit { background: rgba(255,255,255,.08); color: var(--ink); }
.sd-rtip__badge.is-miss { background: var(--amber, #e0a33a); color: #141516; }
.sd-rtip__badge.is-unscored { background: transparent; border: 1px solid var(--rule); color: var(--muted); }
.sd-rtip__grid { margin: 0; }
.sd-rtip__note { margin: 0; color: var(--muted); font-size: 11.5px; }
.sd-recmap__all { margin-top: 12px; }
.sd-rtip__grid { display: grid !important; grid-template-columns: minmax(0, 1fr) !important; gap: 0 !important; padding-top: 6px; border-top: 1px solid var(--rule); }
.sd-rtip__grid > div { display: flex; justify-content: space-between; gap: 12px; padding: 3px 0; }
.sd-rtip__grid dt { color: var(--muted); }
.sd-rtip__grid dd { margin: 0; font-weight: 700; font-variant-numeric: tabular-nums; color: var(--ink); }
.sd-rtip__grid dd.dem-margin { color: var(--blue); } .sd-rtip__grid dd.rep-margin { color: var(--red); }

/* State race pages, polling section downward (Oct 29): numbers use the site's
   sans figures (as in the homepage header), tighter, cleaner panels. */
.page-race:not(.page-house-state) .polling-trend-summary { max-width: 860px; margin: 10px 0 0; color: var(--muted); font: 400 13px/1.5 var(--sans); }
.page-race:not(.page-house-state) #model-breakdown { padding-top: 22px !important; }
.page-race:not(.page-house-state) .model-breakdown-intro { color: var(--muted); font-size: 13.5px; }
.page-race:not(.page-house-state) .model-breakdown-flow { display: grid !important; grid-template-columns: minmax(0, 1fr) 28px minmax(0, 1fr) 28px minmax(0, 1fr) !important; align-items: stretch !important; gap: 0 !important; margin-top: 14px !important; border-top: 1px solid var(--rule) !important; border-bottom: 1px solid var(--rule) !important; }
.page-race:not(.page-house-state) .model-factor { display: flex !important; flex-direction: column; gap: 6px; padding: 14px 0 !important; border: 0 !important; background: none !important; }
.page-race:not(.page-house-state) .model-factor--result { padding-left: 16px !important; border-left: 1px solid var(--rule) !important; }
.page-race:not(.page-house-state) .model-factor-label { color: var(--muted); font: 800 10.5px/1.2 var(--sans) !important; letter-spacing: .1em; text-transform: uppercase; }
.page-race:not(.page-house-state) .model-factor-value { font: 800 clamp(1.7rem, 2.6vw, 2.15rem)/1 var(--sans) !important; letter-spacing: -.02em; font-variant-numeric: tabular-nums; }
.page-race:not(.page-house-state) .model-factor-detail { color: var(--muted); font: 600 12px/1.35 var(--sans); font-variant-numeric: tabular-nums; }
.page-race:not(.page-house-state) .model-flow-operator { align-self: center; justify-self: center; color: var(--muted); font: 700 20px/1 var(--sans) !important; }
.page-race:not(.page-house-state) .model-weight-track { height: 8px !important; margin-top: 14px !important; border-radius: 0 !important; }
.page-race:not(.page-house-state) .model-weight-key { margin-top: 6px !important; color: var(--muted); font: 600 11.5px/1.3 var(--sans); }
.page-race:not(.page-house-state) .model-breakdown-note { color: var(--muted); font-size: 12px; }
.page-race:not(.page-house-state) .model-adjustment strong { font-family: var(--sans) !important; font-variant-numeric: tabular-nums; }
/* Polls table */
.page-race:not(.page-house-state) #state-polls { padding-top: 22px !important; }
.page-race:not(.page-house-state) .state-polls-header strong, .page-race:not(.page-house-state) .state-polls-header .polling-average-value { font-family: var(--sans) !important; font-weight: 800; font-variant-numeric: tabular-nums; }
.page-race:not(.page-house-state) .state-poll-table-wrap { max-height: 620px; overflow: auto; border-top: 1px solid var(--rule); border-bottom: 1px solid var(--rule); }
.page-race:not(.page-house-state) .state-poll-table { width: 100%; border-collapse: collapse; font: 400 13px/1.35 var(--sans); }
.page-race:not(.page-house-state) .state-poll-table thead th { position: sticky; top: 0; z-index: 1; padding: 8px 12px 8px 0 !important; background: var(--paper, #121314) !important; border-bottom: 1px solid var(--rule) !important; color: var(--muted); font: 800 10.5px/1.3 var(--sans) !important; letter-spacing: .1em; text-transform: uppercase; text-align: left; }
.page-race:not(.page-house-state) .state-poll-table td { padding: 7px 12px 7px 0 !important; border-bottom: 1px solid var(--rule-faint) !important; vertical-align: middle; }
.page-race:not(.page-house-state) .state-poll-table tbody tr:hover td { background: rgba(255,255,255,.025); }
.page-race:not(.page-house-state) .state-poll-table td:first-child { color: var(--muted); white-space: nowrap; font-variant-numeric: tabular-nums; }
.page-race:not(.page-house-state) .state-poll-table td:nth-child(2) a { color: var(--ink); font-weight: 700; text-decoration: none; }
.page-race:not(.page-house-state) .state-poll-table td:nth-child(2) a:hover { text-decoration: underline; }
.page-race:not(.page-house-state) .state-poll-table td:nth-child(3) { color: var(--muted); white-space: nowrap; font-variant-numeric: tabular-nums; }
.page-race:not(.page-house-state) .state-poll-results { display: flex; flex-wrap: wrap; gap: 4px 16px; margin: 0; padding: 0; list-style: none; }
.page-race:not(.page-house-state) .state-poll-results li { display: inline-flex; align-items: baseline; gap: 5px; white-space: nowrap; }
.page-race:not(.page-house-state) .state-poll-results strong { font: 800 13.5px/1 var(--sans); font-variant-numeric: tabular-nums; }
.page-race:not(.page-house-state) .state-poll-results .is-dem strong { color: var(--blue); }
.page-race:not(.page-house-state) .state-poll-results .is-rep strong { color: var(--red); }
.page-race:not(.page-house-state) .state-poll-results .is-other { color: var(--muted); }
.page-race:not(.page-house-state) .state-polls-note { margin-top: 8px !important; padding: 0 !important; color: var(--muted); font-size: 12px; }
@media (max-width: 760px) {
  .page-race:not(.page-house-state) .model-breakdown-flow { grid-template-columns: minmax(0, 1fr) !important; }
  .page-race:not(.page-house-state) .model-flow-operator { display: none !important; }
  .page-race:not(.page-house-state) .model-factor + .model-factor, .page-race:not(.page-house-state) .model-factor--result { padding-left: 0 !important; border-left: 0 !important; border-top: 1px solid var(--rule-faint) !important; }
  .page-race:not(.page-house-state) .state-poll-table-wrap { max-height: none; }
}
