/* COYNTOSS off-season hub: homepage, trackers and archive.
   Presentation only. Every number on these pages is written into the HTML by
   scripts/build-offseason-hub.py; this file only lays it out.
   Layout rule: every row fills edge to edge. Grids use fixed column counts
   that match their item counts, side-by-side panels stretch to equal height,
   and the latest-polls list is clipped to the approval panel's height. */

.page-hub {
  --card: #161819;
  --card-2: #1c1f21;
  --line: #26292c;
  --line-2: #33373b;
  --r: 0;
  --gap: 22px;
  --approve: #4fb88a;
  --disapprove: #e07a5f;
  --dem: #5c9bd1;
  --rep: #d0736c;
}
.hub { padding-bottom: 28px; }
.visually-hidden {
  position: absolute !important; width: 1px !important; height: 1px !important;
  padding: 0 !important; margin: -1px !important; overflow: hidden !important;
  clip: rect(0, 0, 0, 0) !important; white-space: nowrap !important; border: 0 !important;
}
.hub-d { color: var(--dem) !important; }
.hub-r { color: var(--rep) !important; }
.hub-neg { color: var(--disapprove) !important; }
.hub-pos { color: var(--approve) !important; }

/* ------------------------------------------------------------ type */
.hub .hub-h1 { margin: 0 0 6px !important; max-width: none !important; color: var(--ink); font: 700 clamp(30px, 3.6vw, 42px)/1.05 var(--serif) !important; letter-spacing: -.02em !important; }
.hub-dek { max-width: 64ch; margin: 0; color: var(--ink-soft); font: 400 15.5px/1.5 var(--serif); }
.hub-dek a, .hub-sub a, .hub-prose a, .hub-foot a { color: var(--ink); text-decoration: underline; text-decoration-color: var(--line-2); text-underline-offset: 3px; }
.hub-band { margin: 24px 0 10px; padding-top: 14px; border-top: 1px solid var(--line-2); color: var(--ink); font: 700 24px/1.15 var(--serif); letter-spacing: -.01em; }
.hub-kicker { margin: 0 0 4px; color: var(--muted); font: 700 13px/1.3 var(--sans); }
.hub-h2 { margin: 2px 0 6px; color: var(--ink); font: 700 20px/1.2 var(--serif); }
.hub-note { margin: 12px 0 0; color: var(--muted); font: 400 12.5px/1.5 var(--sans); }
.hub-pill { display: inline-block; padding: 0; color: var(--ink-soft); font: 700 12px/1.5 var(--sans); font-variant-numeric: tabular-nums; }
.hub-tag { display: inline-block; padding: 0 4px; border: 1px solid var(--line-2); border-radius: 0; color: var(--muted); font: 700 9.5px/14px var(--sans); vertical-align: 1px; }

.hub-updated { display: inline-flex; align-items: center; gap: 7px; margin: 0; color: var(--muted); font: 600 12px/1.2 var(--sans); white-space: nowrap; }
.hub-dot { width: 7px; height: 7px; border-radius: 50%; background: var(--approve); }

/* ------------------------------------------------------------ panels */
.hub-intro { display: flex; align-items: flex-end; justify-content: space-between; gap: 16px; padding: 28px 0 0; }
.hub-pagebar { display: flex; justify-content: flex-end; padding: 22px 0 0; }
.hub-card, .hub-section {
  margin-top: var(--gap); padding: 14px 0 0; border: 0; border-top: 2px solid var(--ink-soft); background: none;
}
.hub-head { display: flex; align-items: baseline; justify-content: space-between; gap: 14px; margin-bottom: 14px; }
.hub-title { margin: 0; color: var(--ink); font: 700 17px/1.25 var(--sans) !important; letter-spacing: -.005em !important; max-width: none !important; }
h1.hub-title { font: 700 clamp(24px, 2.6vw, 30px)/1.15 var(--serif) !important; letter-spacing: -.015em !important; }
.hub-sub { margin: 3px 0 0; color: var(--muted); font: 500 12.5px/1.45 var(--sans); }
.hub-more { flex: none; color: var(--ink-soft); font: 600 12.5px/1.2 var(--sans); text-decoration: none; white-space: nowrap; }
.hub-more:hover, .hub-more:focus-visible { color: var(--ink); text-decoration: underline; text-underline-offset: 3px; }
.hub-foot { margin: 12px 0 0; color: var(--muted); font: 400 12px/1.5 var(--sans); }

.hub-row { display: grid; gap: var(--gap); margin-top: var(--gap); align-items: stretch; }
.hub-row > * { min-width: 0; margin-top: 0 !important; }
.hub-row--main { grid-template-columns: minmax(0, 1fr) 360px; }
.hub-row--two { grid-template-columns: 1fr 1fr; }
.hub-row--two > .hub-card { display: flex; flex-direction: column; }
.hub-primary__grid { display: grid; grid-template-columns: minmax(0, 1fr) minmax(0, 1.1fr); gap: 28px; align-items: stretch; }
.hub-primary__chart { display: flex; flex-direction: column; padding-left: 28px; border-left: 1px solid var(--line); }
.hub-primary__chart .hub-range { display: flex; flex: 1 1 auto; flex-direction: column; }
.hub-primary__chart .hub-chart:not([hidden]) { display: flex; flex: 1 1 auto; flex-direction: column; }
.hub-primary__chart .hub-chart__plot { flex: 1 1 auto; height: auto; min-height: 240px; }
.hub-legend-row { display: flex; flex-wrap: wrap; align-items: flex-start; justify-content: space-between; gap: 8px 16px; margin-bottom: 10px; }
.hub-legend-row > .hub-range__bar { margin: 0; }
.hub-row--verdict { grid-template-columns: minmax(0, 1fr) minmax(0, 1fr); margin-bottom: var(--gap); }
.hub-row--verdict > * { display: flex; flex-direction: column; }
.hub-odds-history .hub-chart { flex: 1 1 auto; display: flex; flex-direction: column; }
.hub-odds-history .hub-chart__plot { flex: 1 1 auto; height: auto; min-height: 200px; }

/* ------------------------------------------------------------ archive verdicts */
.hub-verdict { padding: 14px 0 0; border-top: 2px solid var(--ink-soft); }
.hub-verdict__head { display: flex; align-items: center; justify-content: space-between; gap: 12px; margin-bottom: 14px; }
.hub-verdict__head h3 { margin: 0; color: var(--ink); font: 700 17px/1.2 var(--sans); }
.hub-verdict__badge { padding: 0; font: 700 13px/1 var(--sans); }
.hub-verdict__badge--hit { color: var(--approve); }
.hub-verdict__badge--miss { color: var(--disapprove); }
.hub-verdict__nums { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 1px; overflow: hidden; border-top: 1px solid var(--line); border-bottom: 1px solid var(--line); background: var(--line); }
.hub-verdict__nums > div { display: flex; flex-direction: column; gap: 4px; padding: 12px 14px 12px 0; background: var(--paper); }
.hub-verdict__nums > div + div { padding-left: 14px; }
.hub-verdict__big { color: var(--ink); font: 700 30px/1 var(--sans); font-variant-numeric: tabular-nums; letter-spacing: -.01em; }
.hub-scale { position: relative; height: 22px; margin: 26px 0 30px; border-radius: 0; background: var(--card-2); }
.hub-scale > span { position: absolute; top: 0; bottom: 0; }
.hub-scale__band { background: rgba(92,155,209,.28); border-left: 1px solid var(--dem); border-right: 1px solid var(--dem); }
.hub-scale__median { width: 3px; margin-left: -1.5px; background: #a9cdef; }
.hub-scale__maj { top: -6px !important; bottom: -6px !important; width: 0; border-left: 2px dashed var(--muted); }
.hub-scale__called { top: 6px !important; bottom: 6px !important; background: repeating-linear-gradient(135deg, rgba(236,236,236,.55) 0 2px, transparent 2px 5px); }
.hub-scale__result { top: 3px !important; bottom: 3px !important; width: 4px; margin-left: -2px; border-radius: 0; background: var(--ink); box-shadow: 0 0 0 2px var(--paper); }
.hub-scale__ticks { position: absolute; left: 0; right: 0; top: 100%; height: 18px; }
.hub-scale__tick { position: absolute; top: 5px; transform: translateX(-50%); color: var(--muted); font: 500 11px/1 var(--sans); font-variant-numeric: tabular-nums; }
.hub-scale__key { display: flex; flex-wrap: wrap; gap: 6px 16px; color: var(--muted); font: 500 11.5px/1.3 var(--sans); }
.hub-scale__key i { display: inline-block; width: 12px; height: 10px; margin-right: 5px; vertical-align: -1px; border-radius: 0; }
.hub-scale__key .k-band { background: rgba(92,155,209,.35); border: 1px solid var(--dem); }
.hub-scale__key .k-med { width: 3px; background: #a9cdef; }
.hub-scale__key .k-res { width: 4px; background: var(--ink); }
.hub-scale__key .k-maj { width: 0; height: 12px; border-left: 2px dashed var(--muted); border-radius: 0; }
.hub-verdict__score { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 1px; margin-top: auto; overflow: hidden; border-top: 1px solid var(--line); border-bottom: 1px solid var(--line); background: var(--line); }
.hub-verdict__score > div { display: flex; flex-direction: column; gap: 4px; padding: 10px 14px 10px 0; background: var(--paper); }
.hub-verdict__score > div + div { padding-left: 14px; }
.hub-verdict__score b { color: var(--ink); font: 700 17px/1.1 var(--sans); font-variant-numeric: tabular-nums; }
.hub-verdict__call { margin: 14px 0 14px; padding-top: 12px; border-top: 1px solid var(--line); color: var(--ink-soft); font: 400 14.5px/1.5 var(--serif); }

/* ------------------------------------------------------------ faces */
.hub-face { display: inline-grid; place-items: center; flex: none; width: 34px; height: 34px; border-radius: 50%; object-fit: cover; object-position: 50% 20%; background: var(--card-2); box-shadow: 0 0 0 1px var(--line-2); }
.hub-face--sm { width: 26px; height: 26px; }
/* Party ring on headshots, as on VoteHub. */
.hub-party--dem .hub-face, .hub-mu__side:not(.hub-mu__side--r) .hub-face { box-shadow: 0 0 0 2px var(--paper), 0 0 0 3.5px var(--dem); }
.hub-party--rep .hub-face, .hub-mu__side--r .hub-face { box-shadow: 0 0 0 2px var(--paper), 0 0 0 3.5px var(--rep); }
.hub-face--initials { color: var(--ink-soft); font: 700 11px/1 var(--sans); letter-spacing: .02em; }
.hub-face--sm.hub-face--initials { font-size: 9.5px; }

/* ------------------------------------------------------------ stat strip */
.hub-strip { display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); gap: 1px; margin-top: 20px; border: 1px solid var(--line); border-radius: 0; background: var(--line); overflow: hidden; }
.hub-stat { display: flex; flex-direction: column; gap: 6px; padding: 14px 18px; background: var(--card); color: inherit; text-decoration: none; transition: background .15s; }
.hub-stat:hover, .hub-stat:focus-visible { background: var(--card-2); }
.hub-stat__label { color: var(--muted); font: 700 11.5px/1.2 var(--sans); }
.hub-stat__row { display: flex; align-items: center; gap: 10px; min-height: 38px; }
.hub-stat__big { color: var(--ink); font: 800 28px/1 var(--sans); font-variant-numeric: tabular-nums; letter-spacing: -.02em; }
.hub-stat__who { display: flex; flex-direction: column; min-width: 0; }
.hub-stat__who b { overflow: hidden; color: var(--ink); font: 700 15px/1.2 var(--sans); text-overflow: ellipsis; white-space: nowrap; }
.hub-stat__who span { color: var(--ink-soft); font: 600 12.5px/1.3 var(--sans); font-variant-numeric: tabular-nums; }
.hub-stat__sub { color: var(--muted); font: 500 12px/1.3 var(--sans); }
.hub-spark { flex: 1 1 auto; min-width: 40px; max-width: 110px; height: 30px; margin-left: auto; overflow: visible; }
.hub-spark polyline { fill: none; stroke-width: 1.8; stroke-linejoin: round; stroke-linecap: round; vector-effect: non-scaling-stroke; }
.hub-delta { color: var(--muted); font: 700 11.5px/1 var(--sans); font-variant-numeric: tabular-nums; white-space: nowrap; }
.hub-delta--up { color: #7fcaa5; }
.hub-delta--down { color: #e7967f; }

/* ------------------------------------------------------------ approval */
.hub-figs { display: flex; flex-wrap: wrap; gap: 8px 36px; margin-bottom: 14px; }
.hub-fig { display: flex; flex-direction: column; gap: 4px; }
.hub-fig__label { display: inline-flex; align-items: center; gap: 6px; color: var(--muted); font: 600 12px/1.2 var(--sans); }
.hub-fig__label i { width: 9px; height: 9px; border-radius: 0; }
.hub-fig__num { color: var(--ink); font: 800 32px/1 var(--sans); font-variant-numeric: tabular-nums; letter-spacing: -.02em; }
.hub-fig__note { color: var(--muted); font: 500 11.5px/1.2 var(--sans); }

/* ------------------------------------------------------------ charts */
.hub-legend, .hub-series-key { display: flex; flex-wrap: wrap; gap: 6px 16px; margin: 0 0 10px; padding: 0; list-style: none; color: var(--ink-soft); font: 600 12px/1.3 var(--sans); }
.hub-legend li, .hub-series-key li { display: inline-flex; align-items: center; gap: 6px; }
.hub-swatch { display: inline-block; width: 10px; height: 10px; border-radius: 0; }
.hub-series-key .hub-swatch { width: 16px; height: 3px; }
.hub-swatch--empty { background: var(--surface-3); box-shadow: inset 0 0 0 1px var(--line-2); }
.hub-chart { position: relative; margin: 0; }
.hub-range { position: relative; }
.hub-figs > .hub-range__bar { align-self: flex-end; margin: 0 0 2px auto; }
.hub-range__bar { display: flex; justify-content: flex-end; gap: 14px; margin: 0 0 6px auto; width: max-content; padding: 0; }
.hub-range__btn { min-width: 0; padding: 4px 0 5px; border: 0; border-bottom: 2px solid transparent; border-radius: 0; background: transparent; color: var(--muted); font: 600 12.5px/1 var(--sans); cursor: pointer; }
.hub-range__btn:hover { color: var(--ink); }
.hub-range__btn[aria-pressed="true"] { border-bottom-color: var(--ink); color: var(--ink); }
.hub-range__btn:focus-visible { outline: 2px solid var(--ink); outline-offset: 2px; }
.hub-chart[hidden] { display: none !important; }
.hub-chart__plot { position: relative; height: 290px; margin: 0 48px 0 30px; }
.hub-chart__plot svg { display: block; position: absolute; inset: 0; width: 100%; height: 100%; overflow: visible; }
.hub-chart__grid { stroke: #222527; stroke-width: 1; vector-effect: non-scaling-stroke; }
.hub-chart__tick { stroke: var(--line-2); stroke-width: 1; vector-effect: non-scaling-stroke; }
.hub-chart__line { fill: none; stroke-width: 2.5; stroke-linejoin: round; stroke-linecap: round; vector-effect: non-scaling-stroke; }
.hub-chart__dots circle { opacity: .14; }
.hub-chart__cursor { stroke: var(--ink-soft); stroke-width: 1; stroke-dasharray: 3 3; vector-effect: non-scaling-stroke; }
.hub-chart__ylab, .hub-chart__xlab, .hub-chart__end { position: absolute; color: var(--muted-light); font: 500 11px/1 var(--sans); font-variant-numeric: tabular-nums; white-space: nowrap; pointer-events: none; }
.hub-chart__ylab { left: -32px; width: 26px; text-align: right; transform: translateY(-50%); }
.hub-chart__xlab { top: 92.1%; transform: translateX(-50%); padding-top: 8px; }
.hub-chart__end { right: -48px; transform: translateY(-50%); font: 700 12.5px/1 var(--sans); }
.hub-chart__data, .hub-chart__cursor[hidden] { display: none; }
.hub-map__tip, .hub-chart__tip {
  position: absolute; z-index: 5; pointer-events: none; min-width: 150px; max-width: 260px;
  padding: 9px 11px; border: 1px solid var(--line-2); border-radius: 0;
  background: #0d0e0f; box-shadow: 0 2px 8px rgba(0,0,0,.4); color: var(--ink); font: 500 12.5px/1.5 var(--sans);
}
.hub-map__tip strong, .hub-chart__tip strong { display: block; margin-bottom: 3px; font: 700 13px/1.3 var(--sans); }
.hub-map__tip .row, .hub-chart__tip .row { display: flex; justify-content: space-between; gap: 14px; }
.hub-map__tip .row span:last-child, .hub-chart__tip .row span:last-child { font-variant-numeric: tabular-nums; font-weight: 700; }
.hub-map__tip .meta { margin-top: 4px; color: var(--muted); font-size: 11.5px; }
.hub-gcb .hub-chart { flex: 1 1 auto; display: flex; flex-direction: column; }
.hub-gcb .hub-chart__plot { flex: 1 1 auto; height: auto; min-height: 170px; }

/* ------------------------------------------------------------ latest polls */
/* Clipped to the approval panel's height: the panel sizes the row, this list fills it. */
.hub-row--main > .hub-latest { display: flex; flex-direction: column; height: 0; min-height: 100%; overflow: hidden; }
.hub-polls { flex: 1 1 auto; min-height: 0; margin: 0; padding: 0; list-style: none; overflow: hidden;
  -webkit-mask-image: linear-gradient(#000 calc(100% - 18px), transparent); mask-image: linear-gradient(#000 calc(100% - 18px), transparent); }
.hub-poll-day { padding: 12px 0 5px; border-top: 1px solid var(--line); color: var(--muted); font: 700 12px/1.2 var(--sans); }
.hub-poll-day + .hub-poll { border-top: 0; }
.hub-poll { display: flex; align-items: center; justify-content: space-between; gap: 10px; padding: 9px 0; border-top: 1px solid var(--line); }
.hub-poll__main { display: flex; flex-direction: column; gap: 2px; min-width: 0; }
.hub-poll__who { overflow: hidden; color: var(--ink); font: 700 13.5px/1.3 var(--sans); text-overflow: ellipsis; white-space: nowrap; }
.hub-poll__who a { color: inherit; text-decoration: none; }
.hub-poll__who a:hover { text-decoration: underline; text-underline-offset: 3px; }
.hub-poll__meta { overflow: hidden; color: var(--muted); font: 500 11.5px/1.3 var(--sans); text-overflow: ellipsis; white-space: nowrap; }
.hub-poll__res { display: flex; flex: none; align-items: baseline; gap: 10px; }
.hub-res { color: var(--ink-soft); font: 600 12.5px/1 var(--sans); font-variant-numeric: tabular-nums; }
.hub-netv { min-width: 46px; color: var(--ink); font: 700 13px/1 var(--sans); font-variant-numeric: tabular-nums; text-align: right; }
.hub-netv--d { color: var(--dem); }
.hub-netv--r { color: var(--rep); }

/* ------------------------------------------------------------ betting markets */
.hub-odds__grid { display: grid; grid-template-columns: 1fr 1fr; gap: 0 32px; }
.hub-odds__title { display: flex; align-items: baseline; justify-content: space-between; margin: 0 0 6px; padding-bottom: 8px; border-bottom: 1px solid var(--line); color: var(--ink-soft); font: 700 12.5px/1.2 var(--sans); }
.hub-odds__title a { color: var(--muted); font-weight: 600; font-size: 11.5px; text-decoration: none; }
.hub-odds__title a:hover { color: var(--ink); text-decoration: underline; }
.hub-odds { display: grid; gap: 2px; margin: 0; padding: 0; list-style: none; }
.hub-odds__row { display: grid; grid-template-columns: 26px minmax(0, 170px) minmax(0, 1fr) 44px; gap: 10px; align-items: center; padding: 5px 0; }
.hub-odds__name { overflow: hidden; color: var(--ink); font: 600 13.5px/1.2 var(--sans); text-overflow: ellipsis; white-space: nowrap; }
.hub-odds__bar { height: 6px; border-radius: 0; background: var(--card-2); overflow: hidden; }
.hub-odds__bar span { display: block; height: 100%; border-radius: 0; opacity: .9; }
.hub-odds__val { color: var(--ink); font: 800 14px/1 var(--sans); font-variant-numeric: tabular-nums; text-align: right; }

/* ------------------------------------------------------------ primaries */
.hub-cand__cols { display: grid; grid-template-columns: minmax(0, 1fr) 54px 46px; gap: 12px; padding-bottom: 6px; border-bottom: 1px solid var(--line); color: var(--muted); font: 600 11px/1.2 var(--sans); }
.hub-cand__cols span:not(:first-child) { text-align: right; }
.hub-cands { display: grid; margin: 0; padding: 0; list-style: none; }
.hub-cand { display: grid; grid-template-columns: 34px minmax(0, 170px) minmax(0, 1fr) 54px 46px; gap: 12px; align-items: center; padding: 7px 0; border-bottom: 1px solid var(--line); }
.hub-cand:last-child { border-bottom: 0; }
.hub-cand__name { overflow: hidden; color: var(--ink); font: 600 14px/1.25 var(--sans); text-overflow: ellipsis; white-space: nowrap; }
.hub-cand--lead .hub-cand__name { font-weight: 800; }
.hub-cand__bar { height: 8px; border-radius: 0; background: var(--card-2); overflow: hidden; }
.hub-cand__bar span { display: block; height: 100%; border-radius: 0; }
.hub-cand__val { color: var(--ink); font: 800 15px/1 var(--sans); font-variant-numeric: tabular-nums; text-align: right; }
.hub-cand .hub-delta { text-align: right; }
.hub-primary .hub-series-key { margin-top: 20px; }

/* ------------------------------------------------------------ matchups */
.hub-mu-grid { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 1px; border-top: 1px solid var(--line); border-bottom: 1px solid var(--line); background: var(--line); }
.hub-mu { display: grid; grid-template-columns: minmax(0, 1fr) minmax(0, 1fr); align-items: center; gap: 8px 10px; padding: 14px 18px; background: var(--paper); }
.hub-mu:nth-child(3n+1) { padding-left: 4px; }
.hub-mu:nth-child(3n) { padding-right: 4px; }
.hub-mu__side { display: flex; align-items: center; gap: 8px; min-width: 0; }
.hub-mu__side--r { justify-content: flex-end; }
.hub-mu__name { overflow: hidden; color: var(--ink); font: 600 13px/1.2 var(--sans); text-overflow: ellipsis; white-space: nowrap; }
.hub-mu__short { display: none; text-decoration: none; }
.hub-mu__val { font: 700 17px/1 var(--sans); font-variant-numeric: tabular-nums; }
.hub-margin { padding: 0; color: var(--ink); font: 700 12.5px/1.2 var(--sans); white-space: nowrap; }
.hub-margin--d { color: var(--dem); }
.hub-margin--r { color: var(--rep); }
.hub-mu__bar { grid-column: 1 / -1; height: 5px; border-radius: 0; background: var(--rep); overflow: hidden; }
.hub-mu__bar span { display: block; height: 100%; background: var(--dem); box-shadow: 1px 0 0 var(--paper); }
.hub-mu__meta { display: flex; align-items: center; justify-content: space-between; gap: 8px; grid-column: 1 / -1; margin: 0; color: var(--muted); font: 500 11.5px/1.2 var(--sans); }

/* ------------------------------------------------------------ results, explore */
.hub-then { display: grid; grid-template-columns: repeat(6, minmax(0, 1fr)); gap: 0 18px; margin-top: 16px; }
.hub-then__cell { display: flex; flex-direction: column; gap: 3px; padding: 9px 0; border-top: 1px solid var(--line); }
.hub-then__label { color: var(--muted); font: 600 11px/1.2 var(--sans); }
.hub-then__num { color: var(--ink); font: 700 17px/1.1 var(--sans); font-variant-numeric: tabular-nums; }
.hub-then__date { color: var(--muted-light); font: 400 10.5px/1.2 var(--sans); }
.hub-results__list { display: grid; flex: 1 1 auto; grid-auto-rows: 1fr; }
.hub-result { display: flex; flex-direction: column; justify-content: center; padding: 12px 0; border-top: 1px solid var(--line); }
.hub-result h3 { display: flex; justify-content: space-between; gap: 12px; margin: 0 0 8px; color: var(--ink); font: 700 14px/1.2 var(--sans); }
.hub-result h3 span { color: var(--muted); font-weight: 500; font-size: 12.5px; text-align: right; }
.hub-result p { margin: 0; color: var(--ink); font: 400 14.5px/1.45 var(--serif); }
.hub-result p.hub-result__src { margin-top: 6px; color: var(--muted); font: 400 11.5px/1.3 var(--sans); }
.hub-seats { position: relative; display: flex; height: 14px; overflow: visible; border-radius: 0; background: var(--card-2); }
.hub-seats > span { height: 100%; }
.hub-seats__d { background: var(--dem); border-radius: 0; }
.hub-seats__r { background: var(--rep); border-radius: 0; margin-left: auto; }
.hub-seats__u { background: repeating-linear-gradient(135deg, var(--line-2) 0 3px, transparent 3px 6px); }
.hub-seats__called { background: var(--muted); border-radius: 0; opacity: .55; }
.hub-seats i { position: absolute; top: -4px; bottom: -4px; width: 2px; margin-left: -1px; background: var(--ink); }
.hub-seats__key { display: flex; justify-content: space-between; gap: 10px; margin-top: 7px; color: var(--muted); font: 500 12px/1.2 var(--sans); font-variant-numeric: tabular-nums; }
.hub-seats__key .d { color: var(--dem); font-weight: 700; }
.hub-seats__key .r { color: var(--rep); font-weight: 700; }
.hub-explore { margin-top: var(--gap); }
.hub-cards { display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); gap: 0 24px; border-top: 2px solid var(--ink-soft); }
.hub-section .hub-cards { grid-template-columns: repeat(3, minmax(0, 1fr)); }
.hub-tile { display: block; padding: 14px 0 16px; border-bottom: 1px solid var(--line); color: inherit; text-decoration: none; }
.hub-tile:hover h3, .hub-tile:focus-visible h3 { text-decoration: underline; text-underline-offset: 3px; }
.hub-tile h3 { margin: 0 0 4px; color: var(--ink); font: 700 15px/1.25 var(--sans); }
.hub-tile p { margin: 0; color: var(--muted); font: 400 12.5px/1.45 var(--sans); }

/* ------------------------------------------------------------ map (approval page) */
.hub-row--map { grid-template-columns: minmax(0, 1.25fr) minmax(0, 1fr); align-items: center; margin-top: 0; }
.hub-map { position: relative; margin: 0; }
.hub-map__svg { display: block; width: 100%; height: auto; overflow: visible; }
.hub-map__state { fill: var(--surface-3); stroke: var(--card); stroke-width: .9; stroke-linejoin: round; transition: opacity .12s ease; }
.hub-map__state.has-data { cursor: pointer; }
.hub-map__state.has-data:hover, .hub-map__state.has-data:focus { stroke: var(--ink); stroke-width: 1.6; outline: none; }
.hub-map__svg:hover .hub-map__state.has-data:not(:hover) { opacity: .82; }
.hub-map__key { margin: 10px 0 0; }

/* ------------------------------------------------------------ tables */
.hub-table-wrap { overflow-x: auto; -webkit-overflow-scrolling: touch; }
.hub-table { width: 100%; border-collapse: collapse; font: 500 13px/1.35 var(--sans); font-variant-numeric: tabular-nums; }
.hub-table th, .hub-table td { padding: 8px 12px 8px 0; border-bottom: 1px solid var(--line); text-align: left; vertical-align: middle; }
.hub-table thead th { border-bottom: 1px solid var(--line-2); background: none !important; color: var(--muted); font: 600 12px/1.3 var(--sans) !important; letter-spacing: 0 !important; text-transform: none !important; white-space: nowrap; }
.hub-table tbody th { color: var(--ink); font-weight: 600; }
.hub-table td { color: var(--ink-soft); }
.hub-table .num { text-align: right; white-space: nowrap; }
.hub-table .hub-spread { font-weight: 700; }
.hub-table__avg th, .hub-table__avg td { background: var(--surface-2); color: var(--ink) !important; font-weight: 700; border-bottom: 1px solid var(--line-2); }
.hub-table__avg th { padding-left: 10px; }
.hub-table td:last-child, .hub-table th:last-child { padding-right: 0; }
.hub-table a { color: var(--ink); text-decoration: none; }
.hub-table a:hover { text-decoration: underline; text-underline-offset: 3px; }
.hub-table tbody tr:last-child th, .hub-table tbody tr:last-child td { border-bottom: 0; }
.hub-details { margin-top: 10px; border: 0; border-top: 1px solid var(--line); border-bottom: 1px solid var(--line); background: none; }
.hub-details + .hub-details { margin-top: 0; border-top: 0; }
.hub-details > summary { padding: 10px 0; cursor: pointer; color: var(--ink); font: 600 13.5px/1.3 var(--sans); }
.hub-details[open] > summary { border-bottom: 1px solid var(--line); }
.hub-details .hub-table-wrap { padding: 2px 0 8px; }
.hub-credits { columns: 2; column-gap: 32px; padding-left: 18px; }
.hub-credits li { break-inside: avoid; font-size: 13px !important; line-height: 1.5 !important; }

/* ------------------------------------------------------------ archive */
.hub-intro > .hub-kicker { display: none; }
.hub-tabs { display: flex; gap: 22px; margin-top: 18px; border-bottom: 1px solid var(--line-2); overflow-x: auto; }
.hub-tab { flex: none; padding: 8px 0 10px; border-bottom: 2px solid transparent; margin-bottom: -1px; color: var(--muted); font: 700 13.5px/1.2 var(--sans); text-decoration: none; white-space: nowrap; }
.hub-tab:hover { color: var(--ink); }
.hub-tab[aria-current="page"] { color: var(--ink); border-bottom-color: var(--ink); }
section.hub-intro:has(.hub-tabs) { display: block; }
.hub-state-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(150px, 1fr)); gap: 0 18px; }
.hub-state-grid a { display: flex; gap: 10px; align-items: center; padding: 8px 0; border-bottom: 1px solid var(--line); color: var(--ink-soft); text-decoration: none; font: 500 13px/1.3 var(--sans); }
.hub-state-grid a strong { min-width: 24px; color: var(--ink); font-weight: 800; }
.hub-state-grid a:hover { color: var(--ink); }
.hub-section__head { margin-bottom: 12px; }
.hub-log { margin: 0; padding: 0; list-style: none; }
.hub-log__item { display: grid; grid-template-columns: 130px 1fr; gap: 24px; padding: 16px 0; border-bottom: 1px solid var(--line); }
.hub-log__item:last-child { border-bottom: 0; }
.hub-log__item time { color: var(--muted); font: 700 12.5px/1.6 var(--sans); }
.hub-log__item h3 { margin: 0 0 6px; color: var(--ink); font: 700 17px/1.3 var(--sans); }
.hub-log__item ul { margin: 0; padding-left: 18px; color: var(--ink-soft); font: 400 14.5px/1.55 var(--serif); }
.hub-log__item li + li { margin-top: 4px; }
.hub-log__area { display: flex; gap: 8px; align-items: center; margin: 0 0 4px; color: var(--muted); font: 700 11.5px/1.3 var(--sans); }
.hub-log--compact .hub-log__item { padding: 12px 0; }
.hub-log--compact .hub-log__item h3 { font-size: 14.5px; margin-bottom: 4px; }
.hub-log--compact .hub-log__item p { margin: 0 0 6px; max-width: 80ch; color: var(--ink-soft); font: 400 13.5px/1.5 var(--sans); }
.hub-log--inset { padding: 0 14px 10px; }
/* Timeline rail for the changelog: a line down the date column with a dot per entry. */
.hub-log--timeline .hub-log__item { position: relative; grid-template-columns: 110px 1fr; gap: 40px; border-bottom: 0; padding: 14px 0 18px; }
.hub-log--timeline .hub-log__item::before { content: ""; position: absolute; left: 130px; top: 0; bottom: 0; width: 1px; background: var(--line-2); }
.hub-log--timeline .hub-log__item:first-child::before { top: 20px; }
.hub-log--timeline .hub-log__item:last-child::before { bottom: auto; height: 20px; }
.hub-log--timeline .hub-log__item::after { content: ""; position: absolute; left: 127px; top: 19px; width: 8px; height: 8px; border-radius: 50%; background: var(--dot, var(--muted)); }
.hub-log--timeline .hub-log__item > div { padding: 0 0 14px; border-bottom: 1px solid var(--line); }
.hub-log--timeline .hub-log__item time { text-align: right; padding-top: 1px; }
.hub-log__item--polling-averages { --dot: var(--ink-soft); }
.hub-log__item--senate-forecast { --dot: var(--dem); }
.hub-log__item--2026-forecast { --dot: var(--rep); }
.hub-log__item--site { --dot: var(--approve); }

/* ------------------------------------------------------------ methodology */
.hub-prose .hub-section { max-width: none; }
.hub-prose .hub-section > * { max-width: 760px; }
.hub-prose .hub-section .hub-credits { max-width: none; }
.hub-prose .hub-section .hub-h2 { margin-top: 24px; }
.hub-prose .hub-section .hub-h2:first-child { margin-top: 0; }
.hub-prose p, .hub-prose li { color: var(--ink-soft); font: 400 16px/1.6 var(--serif); }
.hub-prose li + li { margin-top: 6px; }
.hub-prose strong { color: var(--ink); }

/* ------------------------------------------------------------ responsive */
@media (max-width: 1100px) {
  .hub-row--main { grid-template-columns: 1fr; }
  .hub-row--main > .hub-latest { height: auto; min-height: 0; }
  .hub-polls { -webkit-mask-image: none; mask-image: none; }
  .hub-poll--extra { display: none !important; }
  .hub-strip { grid-template-columns: repeat(2, minmax(0, 1fr)); }
  .hub-cards { grid-template-columns: repeat(2, minmax(0, 1fr)); }
  .hub-section .hub-cards { grid-template-columns: repeat(2, minmax(0, 1fr)); }
}
@media (max-width: 860px) {
  .hub-row--two, .hub-row--map, .hub-odds__grid, .hub-row--verdict, .hub-primary__grid { grid-template-columns: 1fr; }
  .hub-primary__chart { padding-left: 0; border-left: 0; }
  .hub-odds__col + .hub-odds__col { margin-top: 16px; }
  .hub-mu-grid { grid-template-columns: 1fr; }
  .hub-mu, .hub-mu:nth-child(n) { padding-left: 4px; padding-right: 4px; }
  .hub-results__list { grid-auto-rows: auto; }
  .hub-credits { columns: 1; }
}
@media (max-width: 640px) {
  .page-hub { --gap: 12px; }
  .hub-intro { flex-direction: column; align-items: flex-start; gap: 10px; padding-top: 20px; }
  .hub .hub-h1 { font-size: 30px !important; }
  .hub-dek { font-size: 15px; }
  .hub-card, .hub-section { padding: 12px 0 0; }
  .hub-head { flex-wrap: wrap; gap: 4px 12px; }
  .hub-stat { padding: 12px; }
  .hub-stat__big { font-size: 22px; }
  .hub-stat .hub-spark { display: none; }
  .hub-stat .hub-face { width: 28px; height: 28px; }
  .hub-stat__who b { font-size: 13px; }
  .hub-stat__who span, .hub-stat__sub { font-size: 11.5px; }
  .hub-figs { gap: 8px 22px; }
  .hub-then { grid-template-columns: repeat(3, minmax(0, 1fr)); }
  .hub-verdict { padding: 12px 0 0; }
  .hub-tabs { gap: 8px !important; overflow: visible !important; }
  .hub-tab { flex: 1 1 0 !important; white-space: normal !important; text-align: center; font-size: 12.5px !important; }
  .hub-verdict__nums > div { padding: 10px; }
  .hub-verdict__big { font-size: 22px; }
  .hub-figs > .hub-range__bar { width: 100%; margin: 4px 0 0; }
  .hub-range__btn { flex: 1 1 0; }
  .hub-mu__long { display: none; }
  .hub-mu__short { display: inline; }
  .hub-fig__num { font-size: 26px; }
  .hub-chart__plot { height: 220px; margin-right: 44px; }
  .hub-chart__end { right: -44px; font-size: 11.5px; }
  .hub-chart__xlab--minor { display: none; }
  .hub-cand { grid-template-columns: 30px minmax(0, 1fr) 50px 40px; gap: 4px 10px; }
  .hub-cand .hub-face { width: 30px; height: 30px; grid-row: span 2; }
  .hub-cand__bar { grid-column: 2 / 5; grid-row: 2; height: 6px; }
  .hub-cand__cols { grid-template-columns: minmax(0, 1fr) 50px 40px; }
  .hub-odds__row { grid-template-columns: 26px minmax(0, 1fr) 70px 40px; }
  .hub-cards, .hub-section .hub-cards { grid-template-columns: 1fr; }
  .hub-log__item { grid-template-columns: 1fr; gap: 4px; }
  .hub-log--timeline .hub-log__item { grid-template-columns: 1fr; gap: 6px; padding-left: 26px; }
  .hub-log--timeline .hub-log__item::before { left: 5px; }
  .hub-log--timeline .hub-log__item::after { left: 0; top: 16px; }
  .hub-log--timeline .hub-log__item time { text-align: left; }
  .hub-table { font-size: 12.5px; }
}

/* The poll-data credit line is longer than the 2026 footer text; let it wrap. */
.page-hub .site-footer > .footer-meta > * { white-space: normal !important; min-width: 0; }
.page-hub .site-footer > .footer-meta > span:first-child { flex: 1 1 260px; order: 1; }

/* ------------------------------------------------------------ methodology layout */
.hub-method { display: grid; grid-template-columns: minmax(0, 1fr) 460px; gap: var(--gap); align-items: start; margin-top: var(--gap); }
.hub-method > .hub-section { margin-top: 0; }
.hub-method__aside { position: sticky; top: 16px; display: grid; gap: var(--gap); }
.hub-method__aside .hub-card { margin: 0; }
.hub-table--glance th span { display: inline-block; margin-left: 6px; color: var(--muted); font: 600 10.5px/1 var(--sans); }
.hub-table--glance td, .hub-table--glance th { padding-top: 7px; padding-bottom: 7px; font-size: 12.5px; }
.hub-versions { display: grid; gap: 0; margin: 0; padding: 0; list-style: none; }
.hub-versions li { display: grid; grid-template-columns: 44px minmax(0, 1fr) auto; gap: 10px; align-items: baseline; padding: 9px 0; border-top: 1px solid var(--line); color: var(--ink); font: 600 13px/1.35 var(--sans) !important; }
.hub-versions li + li { margin-top: 0 !important; }
.hub-versions time { color: var(--muted); font: 500 12px/1 var(--sans); white-space: nowrap; }
@media (max-width: 1100px) {
  .hub-method { grid-template-columns: minmax(0, 1fr); }
  .hub-method__aside { position: static; grid-row: 1; grid-template-columns: minmax(0, 1fr); min-width: 0; }
}
.hub-prose .hub-method__aside p { color: var(--muted); font: 400 12.5px/1.45 var(--sans); }
.hub-prose .hub-method__aside .hub-sub { font-size: 13px; }
.hub-table--glance th[scope="row"] { white-space: nowrap; }
.hub-sources { margin: 0; padding: 0; list-style: none; }
.hub-sources li { display: flex; justify-content: space-between; align-items: baseline; gap: 12px; margin: 0 !important; padding: 9px 0; border-top: 1px solid var(--line); color: var(--ink); font: 600 13px/1.3 var(--sans) !important; }
.hub-sources small { margin-left: 8px; color: var(--muted); font: 500 11px/1 var(--sans); }
.hub-sources b { font: 700 15px/1 var(--sans); font-variant-numeric: tabular-nums; }
.hub-sources__total { border-top: 1px solid var(--line-2) !important; }
.hub-sources__total span { color: var(--muted); }
@media (max-width: 640px) {
  .hub-table--glance th:nth-child(3), .hub-table--glance td:nth-child(3) { display: none; }
  .hub-table--glance th, .hub-table--glance td { padding-right: 8px; font-size: 12px; }
  .hub-table--glance th[scope="row"] { white-space: normal; }
  .hub-table--glance th span { display: block; margin: 2px 0 0; }
}

/* ============================================================ scoreboard pages (rounds 5 and 6)
   Full-width bands separated by hairline rules, in the manner of a newspaper
   graphics desk: flat colour, square corners, no glows or gradients, sentence-case
   labels, numbers set in the text face. */
.sb-jump { position: sticky; top: 0; z-index: 20; border-bottom: 1px solid var(--line); background: var(--paper); }
.sb-jump .shell { display: flex; gap: 24px; overflow-x: auto; scrollbar-width: none; }
.sb-jump a { flex: none; padding: 9px 0 8px; border-bottom: 2px solid transparent; color: var(--muted); font: 600 13px/1 var(--sans); text-decoration: none; }
.sb-jump a:hover { color: var(--ink); border-bottom-color: var(--ink); }

.sb-hero { padding: 22px 0 24px; border-bottom: 1px solid var(--line-2); }
.sb-hero__grid { display: grid; grid-template-columns: minmax(0, 5fr) minmax(0, 7fr); gap: 48px; align-items: stretch; }
.sb-hero__score { display: flex; flex-direction: column; }
.sb-hero__title { margin: 0 0 4px; color: var(--ink); font: 700 clamp(26px, 2.4vw, 32px)/1.1 var(--serif); letter-spacing: -.015em; }
.sb-hero__dek { margin: 0 0 12px; color: var(--ink-soft); font: 400 15px/1.45 var(--serif); }
.sb-eyebrow { margin: 0 0 4px; color: var(--muted); font: 700 13px/1.3 var(--sans); }
.sb-net { display: flex; align-items: flex-end; gap: 12px; margin: 0 0 12px; }
.sb-net__num { font: 700 clamp(60px, 6vw, 86px)/.9 var(--sans); letter-spacing: -.035em; font-variant-numeric: tabular-nums; }
.sb-net__label { padding-bottom: 6px; color: var(--ink-soft); font: 600 14px/1.15 var(--sans); }
.sb-split { display: flex; height: 12px; overflow: hidden; background: var(--line); }
.sb-split > span { height: 100%; }
.sb-split__a { background: var(--approve); }
.sb-split__o { background: #3b3f43; }
.sb-split__d { background: var(--disapprove); }
.sb-split > span + span { box-shadow: inset 1px 0 0 var(--paper); }
.sb-split__labels { display: flex; justify-content: space-between; margin-top: 7px; color: var(--muted); font: 500 13px/1.2 var(--sans); }
.sb-split__labels b { margin-right: 4px; font: 700 20px/1 var(--sans); font-variant-numeric: tabular-nums; }
.sb-split__labels span:first-child b { color: var(--approve); }
.sb-split__labels span:last-child b { color: var(--disapprove); }
.sb-split--party .sb-split__a { background: var(--dem); }
.sb-split--party .sb-split__d { background: var(--rep); }
.sb-split__labels.sb-split--party span:first-child b { color: var(--dem); }
.sb-split__labels.sb-split--party span:last-child b { color: var(--rep); }
.sb-hero__note { margin: 14px 0 0; color: var(--muted); font: 400 13px/1.55 var(--sans); }
.sb-hero__note a { color: var(--ink); font-weight: 600; text-decoration: underline; text-decoration-color: var(--line-2); text-underline-offset: 3px; }
.sb-hero__score .hub-then { margin-top: auto; padding-top: 12px; grid-template-columns: repeat(3, minmax(0, 1fr)); }
.sb-hero__chart { display: flex; flex-direction: column; min-width: 0; }
.sb-hero__chartbar { display: flex; align-items: center; justify-content: space-between; gap: 12px; margin-bottom: 8px; }
.sb-hero__chartbar .hub-range__bar, .sb-hero__chartbar .hub-series-key { margin: 0; }
.sb-hero__chart .hub-range { display: flex; flex: 1 1 auto; flex-direction: column; }
.sb-hero__chart .hub-chart:not([hidden]) { display: flex; flex: 1 1 auto; flex-direction: column; }
.sb-hero__chart .hub-chart__plot { flex: 1 1 auto; height: auto; min-height: 300px; }

.sb-band { padding: 20px 0 24px; border-bottom: 1px solid var(--line-2); }
.sb-head { display: flex; align-items: flex-end; justify-content: space-between; gap: 16px; margin-bottom: 10px; padding-bottom: 8px; border-bottom: 1px solid var(--line); }
.sb-title { margin: 0; color: var(--ink); font: 700 24px/1.1 var(--serif); letter-spacing: -.012em; }
.sb-sub { max-width: 120ch; margin: 3px 0 0; color: var(--muted); font: 400 13.5px/1.4 var(--serif); }
.sb-sub a { color: var(--ink-soft); text-decoration: underline; text-decoration-color: var(--line-2); text-underline-offset: 3px; }
.sb-more { flex: none; color: var(--ink); font: 600 13px/1 var(--sans); text-decoration: none; white-space: nowrap; }
.sb-more:hover { text-decoration: underline; text-underline-offset: 3px; }
.sb-subhead { margin: 20px 0 8px; color: var(--ink); font: 700 18px/1.2 var(--serif); }

/* latest polls: four columns of plain rows, hairlines between */
.sb-ticker { display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); column-gap: 28px; margin: 0; padding: 0; list-style: none; }
.sb-poll { display: grid; grid-template-columns: minmax(0, 1fr) auto; grid-template-areas: "kind res" "who res" "meta res"; gap: 2px 12px; align-items: center; padding: 11px 0; border-bottom: 1px solid var(--line); }
.sb-poll__kind { grid-area: kind; color: var(--muted); font: 600 11.5px/1.2 var(--sans); }
.sb-poll__who { grid-area: who; overflow: hidden; color: var(--ink); font: 700 14px/1.25 var(--sans); text-overflow: ellipsis; white-space: nowrap; }
.sb-poll__who a { color: inherit; text-decoration: none; }
.sb-poll__who a:hover { text-decoration: underline; text-underline-offset: 3px; }
.sb-poll__meta { grid-area: meta; color: var(--muted); font: 400 12px/1.2 var(--sans); }
.sb-poll__res { grid-area: res; display: flex; flex-direction: column; align-items: flex-end; gap: 4px; }
.sb-poll__res .hub-res { color: var(--ink-soft); font-size: 12.5px; }
.sb-poll__res .hub-netv { font-size: 16px; font-weight: 700; }

/* 2028 board: two columns split by a rule */
.sb-races { display: grid; grid-template-columns: minmax(0, 1fr) minmax(0, 1fr); gap: 0 40px; }
.sb-race { min-width: 0; }
.sb-race__title { margin: 0 0 10px; padding-bottom: 6px; border-bottom: 2px solid var(--party); color: var(--ink); font: 700 19px/1.2 var(--serif); }
.sb-leaders { display: grid; grid-template-columns: 1fr 1fr; gap: 0 20px; margin-bottom: 8px; padding-bottom: 8px; border-bottom: 1px solid var(--line); }
.sb-leader { display: flex; align-items: center; gap: 12px; }
.sb-leader + .sb-leader { padding-left: 20px; border-left: 1px solid var(--line); }
.sb-leader .hub-face { width: 44px; height: 44px; }
.sb-leader div { display: flex; flex-direction: column; gap: 2px; min-width: 0; }
.sb-leader__k { color: var(--muted); font: 600 12px/1.2 var(--sans); }
.sb-leader b { overflow: hidden; color: var(--ink); font: 700 17px/1.15 var(--sans); text-overflow: ellipsis; white-space: nowrap; }
.sb-leader__v { color: var(--ink-soft); font: 400 13px/1.2 var(--sans); font-variant-numeric: tabular-nums; }
.sb-race__table { width: 100%; border-collapse: collapse; font: 500 13.5px/1.3 var(--sans); font-variant-numeric: tabular-nums; }
.sb-race__table thead th { padding: 0 0 6px; border: 0; background: none !important; color: var(--muted); font: 600 12px/1.2 var(--sans) !important; letter-spacing: 0 !important; text-align: left; text-transform: none !important; }
.sb-race__table thead a { color: inherit; text-decoration: underline; text-decoration-color: var(--line-2); text-underline-offset: 3px; }
.sb-race__table th[scope="row"] { padding: 5px 12px 5px 0; color: var(--ink); font-weight: 500; white-space: nowrap; text-align: left; vertical-align: middle; }
.sb-race__who { display: flex; align-items: center; gap: 10px; }
.sb-race__table thead th + th { padding-left: 12px; }
.sb-race__table td { padding: 5px 0 5px 12px; }
.sb-race__table tbody th, .sb-race__table td { border: 0; border-top: 1px solid var(--line); }
.sb-race__table tbody tr { border-top: 1px solid var(--line); }
.sb-race__table .num { text-align: right; }
.sb-race__bar { width: 38%; }
.sb-race__bar span { display: block; height: 8px; }
.sb-race__val { color: var(--ink); font-weight: 700; }
.sb-race__odds { color: var(--ink-soft); font-weight: 500; }
.sb-race__table tbody tr:first-child th { font-weight: 700; }

.sb-two { margin-top: 0; }
.hub > .sb-band:last-child { border-bottom: 0; }
.hub:has(> .sb-hero) + .site-footer { margin-top: 0 !important; }

/* page heads */
.sb-pagehead { padding: 22px 0 20px; border-bottom: 1px solid var(--line-2); }
.sb-pagehead__grid { display: grid; grid-template-columns: minmax(0, 1fr); gap: 40px; align-items: center; }
.sb-pagehead__grid:has(> .sb-stats), .sb-pagehead__grid:has(> .sb-tabs) { grid-template-columns: minmax(0, 7fr) minmax(0, 5fr); }
.sb-pagehead__title { margin: 2px 0 8px; color: var(--ink); font: 700 clamp(30px, 3.2vw, 42px)/1.06 var(--serif); letter-spacing: -.02em; }
.sb-pagehead__dek { max-width: 72ch; margin: 0; color: var(--ink-soft); font: 400 16px/1.45 var(--serif); }
.sb-pagehead__dek a { color: var(--ink); text-decoration: underline; text-decoration-color: var(--line-2); text-underline-offset: 3px; }
.sb-pagehead .hub-updated { margin-top: 10px; }
.sb-stats { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 0 24px; border-top: 2px solid var(--ink-soft); }
.sb-stat { display: flex; flex-direction: column; gap: 3px; padding: 8px 0 9px; border-bottom: 1px solid var(--line); }
.sb-stat__k { color: var(--muted); font: 600 12px/1.2 var(--sans); }
.sb-stat__v { color: var(--ink); font: 700 24px/1.05 var(--sans); font-variant-numeric: tabular-nums; letter-spacing: -.015em; }
.sb-stat__sub { color: var(--ink-soft); font: 400 13px/1.3 var(--sans); }
.sb-pagehead .sb-tabs { display: block; margin: 0; overflow: visible; border: 0; border-top: 2px solid var(--ink-soft); }
.sb-pagehead .sb-tabs .hub-tab { display: flex; align-items: baseline; justify-content: space-between; margin: 0; padding: 9px 0; border: 0; border-bottom: 1px solid var(--line); color: var(--muted); font: 600 16px/1.2 var(--sans); }
.sb-pagehead .sb-tabs .hub-tab:hover { color: var(--ink); }
.sb-pagehead .sb-tabs .hub-tab[aria-current="page"] { color: var(--ink); font-weight: 700; }
.sb-pagehead .sb-tabs .hub-tab[aria-current="page"]::after { content: "You are here"; color: var(--muted); font: 400 12.5px/1 var(--sans); }

/* 2028 trends, details lists, map band */
.sb-trends { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 0 40px; }
.sb-trend { display: flex; flex-direction: column; min-width: 0; }
.sb-trend__sub { margin: -4px 0 12px; color: var(--muted); font: 400 13px/1.4 var(--sans); }
.sb-trend .hub-chart { flex: 1 1 auto; }
.sb-trend .hub-details { margin-top: auto; }
.sb-trend .hub-chart + .hub-details, .sb-trend .hub-range + .hub-details { margin-top: 14px; }
.sb-details { margin-top: 12px; border-top: 1px solid var(--line); }
.sb-details .hub-details { margin: 0; border-top: 0; }
.sb-map { align-items: center; gap: 36px; }
.sb-scroll { max-height: 560px; overflow: auto; border-top: 2px solid var(--ink-soft); border-bottom: 1px solid var(--line); }
.sb-scroll thead th { position: sticky; top: 0; z-index: 1; background: var(--paper); }
.sb-body { padding-top: 6px; }
.sb-body > .hub-method { margin-top: 20px; }

@media (max-width: 1100px) {
  .sb-hero__grid { grid-template-columns: 1fr; gap: 26px; }
  .sb-hero__score .hub-then { grid-template-columns: repeat(6, minmax(0, 1fr)); margin-top: 18px; }
  .sb-ticker { grid-template-columns: repeat(2, minmax(0, 1fr)); }
  .sb-races, .sb-trends { grid-template-columns: minmax(0, 1fr); }
  .sb-race + .sb-race, .sb-trend + .sb-trend { margin-top: 30px; }
  .sb-map { grid-template-columns: minmax(0, 1fr); }
  .sb-pagehead__grid:has(> .sb-stats), .sb-pagehead__grid:has(> .sb-tabs) { grid-template-columns: minmax(0, 1fr); gap: 24px; }
}
@media (max-width: 640px) {
  .sb-hero { padding: 22px 0 24px; }
  .sb-hero__title { font-size: 26px; }
  .sb-net__num { font-size: 68px; }
  .sb-hero__score .hub-then { grid-template-columns: repeat(3, minmax(0, 1fr)); }
  .sb-hero__chart .hub-chart__plot { min-height: 220px; }
  .sb-title { font-size: 24px; }
  .sb-head { flex-wrap: wrap; align-items: flex-start; }
  .sb-ticker { grid-template-columns: 1fr; }
  .sb-leaders { gap: 0 14px; }
  .sb-leader { flex-direction: column; align-items: flex-start; gap: 8px; }
  .sb-leader + .sb-leader { padding-left: 14px; }
  .sb-leader .hub-face { width: 40px; height: 40px; }
  .sb-leader b { font-size: 15px; white-space: normal; }
  .sb-race__bar { display: none; }
  .sb-race__table th[scope="row"] { white-space: normal; }
  .sb-race__table td, .sb-race__table thead th + th { padding-left: 8px; }
  .sb-jump .shell { gap: 18px; }
  .sb-pagehead { padding: 24px 0 22px; }
  .sb-pagehead__dek { font-size: 16px; }
  .sb-scroll { max-height: 420px; }
  .sb-stat__v { font-size: 23px; }
  .sb-pagehead .sb-tabs .hub-tab { padding: 11px 0; font-size: 15px !important; text-align: left; }
}

/* ------------------------------------------------------------ poll tables (round 7) */
.hub-pt { font-size: 13.5px; }
.hub-pt thead th { padding-top: 0; padding-bottom: 8px; border-bottom: 1px solid var(--ink-soft); color: var(--muted); font: 600 11.5px/1.2 var(--sans) !important; }
.hub-pt th, .hub-pt td { padding: 10px 16px 10px 0; }
.hub-pt .hub-pt__date { width: 1%; white-space: nowrap; color: var(--muted); font-size: 12.5px; }
.hub-pt .hub-pt__who { font-weight: 600; color: var(--ink); }
.hub-pt .hub-pt__who a { color: var(--ink); }
.hub-pt .hub-pt__meta { display: none; }
.hub-pt .hub-pt__n { width: 1%; color: var(--muted); font-size: 12.5px; }
.hub-pt .hub-pt__v { width: 1%; min-width: 3.2em; color: var(--ink-soft); font-weight: 500; }
.hub-pt .hub-pt__v--lead { color: var(--ink); font-weight: 700; }
.hub-pt .hub-pt__v--lead.hub-pt__v--pos { color: var(--approve); }
.hub-pt .hub-pt__v--lead.hub-pt__v--neg { color: var(--disapprove); }
.hub-pt .hub-pt__v--lead.hub-pt__v--d { color: var(--dem); }
.hub-pt .hub-pt__v--lead.hub-pt__v--r { color: var(--rep); }
.hub-pt .hub-pt__net { width: 1%; padding-left: 8px; font-weight: 700; color: var(--ink); }
.hub-pt tbody tr:hover th, .hub-pt tbody tr:hover td { background: var(--surface-2); }
.hub-pt .hub-table__avg th, .hub-pt .hub-table__avg td { background: none; border-bottom: 2px solid var(--ink-soft); padding-top: 12px; padding-bottom: 12px; }
.hub-pt .hub-table__avg th { padding-left: 0; }
.hub-pt .hub-table__avg .hub-pt__date { color: var(--muted) !important; font-weight: 500; }
.hub-pt .hub-table__avg .hub-pt__v { color: var(--ink) !important; }
.hub-pt .hub-table__avg .hub-pt__v--lead.hub-pt__v--pos { color: var(--approve) !important; }
.hub-pt .hub-table__avg .hub-pt__v--lead.hub-pt__v--neg { color: var(--disapprove) !important; }
.hub-pt .hub-table__avg .hub-pt__v--lead.hub-pt__v--d { color: var(--dem) !important; }
.hub-pt .hub-table__avg .hub-pt__v--lead.hub-pt__v--r { color: var(--rep) !important; }
@media (max-width: 640px) {
  .hub-pt .hub-pt__date, .hub-pt .hub-pt__n { display: none; }
  .hub-pt .hub-pt__meta { display: block; margin-top: 3px; color: var(--muted); font: 500 11.5px/1.3 var(--sans); }
  .hub-pt th, .hub-pt td { padding-right: 10px; }
  .hub-pt .hub-pt__v { min-width: 2.6em; }
}
.hub-table .hub-pt__sp { color: var(--muted); font-weight: 400; }

/* ------------------------------------------------------------ polls desk */
.hub-ink { color: var(--ink) !important; }
.sb-desk { padding: 18px 0 0; border-bottom: 1px solid var(--line-2); }
.sb-desk__line { display: flex; align-items: baseline; justify-content: space-between; gap: 4px 20px; flex-wrap: wrap; padding-bottom: 8px; border-bottom: 2px solid var(--ink-soft); }
.sb-desk__title { margin: 0; color: var(--ink); font: 700 24px/1.1 var(--serif); letter-spacing: -.012em; }
.sb-desk__date { margin: 0; color: var(--muted); font: 500 12.5px/1.3 var(--sans); }
.sb-scores { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)) minmax(0, 1.5fr) repeat(2, minmax(0, 1fr)); }
.sb-score { display: flex; flex-direction: column; gap: 3px; min-width: 0; padding: 12px 16px 14px; border-left: 1px solid var(--line); color: inherit; text-decoration: none; transition: background-color .12s; }
.sb-score:first-child { padding-left: 0; border-left: 0; }
.sb-score:hover { background: var(--surface-2); }
.sb-score:first-child:hover { background: none; }
.sb-score:hover .sb-score__k { color: var(--ink); }
.sb-score__k { margin-bottom: 2px; color: var(--muted); font: 700 12px/1.25 var(--sans); }
.sb-score__v { overflow: hidden; font: 700 28px/1.05 var(--sans); font-variant-numeric: tabular-nums; letter-spacing: -.02em; text-overflow: ellipsis; white-space: nowrap; }
.sb-score__sub { color: var(--ink-soft); font: 400 13px/1.3 var(--sans); }
.sb-score__chg { margin-top: auto; padding-top: 3px; color: var(--muted); font: 500 12px/1.3 var(--sans); }
.sb-score__chg .hub-delta { font-weight: 700; }
.sb-score__tag { color: var(--muted); font: 600 11px/1.2 var(--sans); }
.sb-score__top, .sb-score__bottom { display: flex; flex-direction: column; gap: 2px; }
.sb-score__bottom { margin-top: auto; padding-top: 8px; }
.sb-score__pair { display: flex; align-items: baseline; gap: 8px; min-width: 0; }
.sb-score__odds { color: var(--ink); font: 700 17px/1 var(--sans); font-variant-numeric: tabular-nums; }
.sb-score__line { overflow: hidden; color: var(--ink-soft); font: 400 13px/1.3 var(--sans); text-overflow: ellipsis; white-space: nowrap; font-variant-numeric: tabular-nums; }
.sb-score__line b { color: var(--ink); font-weight: 700; }
.sb-score__list { display: flex; flex-direction: column; gap: 0; margin: 2px 0 0; padding: 0; list-style: none; }
.sb-score__list li { display: grid; grid-template-columns: minmax(0, 1fr) auto auto; align-items: baseline; gap: 10px; padding: 5px 0; font: 500 13px/1.25 var(--sans); font-variant-numeric: tabular-nums; }
.sb-score__list li + li { box-shadow: inset 0 1px 0 var(--rule-faint, rgba(255,255,255,.06)); }
.sb-score__mu { overflow: hidden; color: var(--ink); text-overflow: ellipsis; white-space: nowrap; }
.sb-score__n { color: var(--muted); font-size: 11.5px; }
.sb-score__list b { min-width: 3.4em; font-weight: 700; text-align: right; }

/* latest-polls ledger */
.hub-desk__filters { display: flex; flex-wrap: wrap; gap: 6px 20px; margin: 0 0 8px; }
.hub-desk__f { min-width: 0; padding: 4px 0 6px; border: 0; border-bottom: 2px solid transparent; border-radius: 0; background: transparent; color: var(--muted); font: 600 13px/1 var(--sans); cursor: pointer; }
.hub-desk__f:hover { color: var(--ink); }
.hub-desk__f[aria-pressed="true"] { border-bottom-color: var(--ink); color: var(--ink); }
.hub-desk__f:focus-visible { outline: 2px solid var(--ink); outline-offset: 2px; }
.hub-desk__table { font-size: 13px; }
.hub-desk__table th, .hub-desk__table td { padding: 7px 18px 7px 0; border: 0; vertical-align: top; }
.hub-desk__table thead th { padding: 0 18px 6px 0; border-bottom: 1px solid var(--ink-soft); color: var(--muted); font: 600 11.5px/1.2 var(--sans) !important; }
.hub-desk__table thead th:last-child { padding-right: 0; }
.hub-desk__table .hub-desk__day th { padding: 6px 10px; background: var(--surface-2); color: var(--ink-soft); font: 700 12px/1.2 var(--sans); letter-spacing: .01em; text-align: left; }
.hub-desk__table tbody tr.hub-desk__day ~ tr.hub-desk__day th { border-top: 10px solid var(--paper); }
.hub-desk__table tr[data-kind] + tr[data-kind] > * { border-top: 1px solid var(--rule-faint, rgba(255,255,255,.06)); }
.hub-desk__table .hub-desk__topic { width: 23%; padding-left: 10px; }
.hub-desk__table .hub-desk__topic a { color: var(--ink); font-weight: 600; text-decoration: none; }
.hub-desk__table .hub-desk__topic a:hover { text-decoration: underline; text-underline-offset: 3px; }
.hub-desk__table .hub-desk__poll { width: 33%; color: var(--ink); font-weight: 600; text-align: left; }
.hub-desk__table .hub-desk__poll a { color: var(--ink); }
.hub-desk__meta { display: block; margin-top: 1px; color: var(--muted); font: 400 11.5px/1.3 var(--sans); }
.hub-desk__table .hub-desk__res { width: 30%; }
.hub-desk__ans { display: flex; justify-content: space-between; gap: 12px; max-width: 220px; color: var(--muted); font: 400 13px/1.35 var(--sans); font-variant-numeric: tabular-nums; }
.hub-desk__ans b { color: var(--ink-soft); font-weight: 500; }
.hub-desk__ans--lead { color: var(--ink); }
.hub-desk__ans--lead b { color: var(--ink); font-weight: 700; }
.hub-desk__table .hub-desk__spread { width: 1%; padding-right: 0; font-weight: 700; white-space: nowrap; text-align: right; vertical-align: middle; }
.hub-desk__table tr[hidden] { display: none; }

.hub-pt .hub-pt__moe { width: 1%; color: var(--muted); font-size: 12.5px; white-space: nowrap; }
.hub-pt abbr { text-decoration: none; cursor: help; }

.hub-he { font-size: 13.5px; }
.hub-he thead th { padding: 0 16px 8px 0; border-bottom: 1px solid var(--ink-soft); color: var(--muted); font: 600 11.5px/1.2 var(--sans) !important; }
.hub-he th, .hub-he td { padding: 7px 16px 7px 0; vertical-align: middle; }
.hub-he tbody th { color: var(--ink); font-weight: 600; text-align: left; }
.hub-he td.num { width: 1%; white-space: nowrap; }
.hub-he td.num:last-child { padding-right: 0; }
.hub-he .hub-he__bar { width: 46%; }
.hub-he__track { position: relative; display: block; height: 12px; }
.hub-he__track::before { content: ""; position: absolute; top: -4px; bottom: -4px; left: 50%; width: 1px; background: var(--ink-soft); }
.hub-he__fill { position: absolute; top: 0; bottom: 0; }
.hub-he__fill--pos { background: var(--approve); }
.hub-he__fill--neg { background: var(--disapprove); }
.hub-he__fill--d { background: var(--dem); }
.hub-he__fill--r { background: var(--rep); }

/* compact approval hero (homepage) */
.sb-hero--compact { padding: 18px 0 20px; }
.sb-hero--compact .sb-hero__grid { grid-template-columns: minmax(0, 4.3fr) minmax(0, 6.5fr) minmax(0, 2.6fr); gap: 28px; }
main .sb-hero--compact .sb-hero__title { max-width: none; margin: 0 0 3px !important; font: 700 clamp(22px, 1.8vw, 26px)/1.1 var(--serif) !important; letter-spacing: -.012em !important; }
.sb-hero--compact .sb-hero__dek { margin-bottom: 10px; font-size: 13.5px; }
.sb-hero--compact .sb-net { margin-bottom: 10px; }
.sb-hero--compact .sb-net__num { font-size: clamp(56px, 5.6vw, 78px); }
.sb-hero--compact .sb-split { height: 10px; }
.sb-hero--compact .sb-split__labels b { font-size: 18px; }
.sb-hero--compact .sb-hero__note { margin-top: 10px; font-size: 12.5px; }
.sb-hero--compact .sb-hero__chart .hub-chart__plot { min-height: 190px; }
.sb-hero__then { display: flex; flex-direction: column; min-width: 0; }
.sb-hero__then .hub-then { display: flex; flex-direction: column; flex: 1 1 auto; justify-content: space-between; gap: 0; margin: 0; padding: 0; border-top: 2px solid var(--ink-soft); }
.sb-hero__then .hub-then__cell { display: grid; grid-template-columns: auto minmax(0, 1fr) auto; grid-template-areas: "label date num"; gap: 0 6px; align-items: baseline; padding: 0; border-top: 0; border-bottom: 1px solid var(--line); flex: 1 1 0; align-content: center; }
.sb-hero__then .hub-then__label { grid-area: label; }
.sb-hero__then .hub-then__date { grid-area: date; }
.sb-hero__then .hub-then__num { grid-area: num; font-size: 14.5px; }
.sb-hero__then .hub-then__label { font-size: 11px; white-space: nowrap; }
.sb-hero__then .hub-then__date { font-size: 10.5px; }
.sb-hero__then .hub-then__cell { min-height: 24px; }
.sb-hero__then .hub-then__date { overflow: hidden; white-space: nowrap; text-overflow: ellipsis; }

@media (max-width: 1100px) {
  .sb-scores { grid-template-columns: repeat(3, minmax(0, 1fr)); }
  .sb-score:nth-child(3n + 1) { padding-left: 0; border-left: 0; }
  .sb-score:nth-child(n + 4) { border-top: 1px solid var(--line); }
  .sb-score:nth-child(3n + 1):hover { background: none; }
  .sb-hero--compact .sb-hero__grid { grid-template-columns: minmax(0, 1fr) minmax(0, 1fr); grid-template-areas: "score then" "chart chart"; gap: 18px 36px; }
  .sb-hero--compact .sb-hero__score { grid-area: score; }
  .sb-hero--compact .sb-hero__chart { grid-area: chart; }
  .sb-hero--compact .sb-hero__then { grid-area: then; }
}
@media (max-width: 640px) {
  .sb-hero--compact .sb-hero__grid { grid-template-columns: minmax(0, 1fr); grid-template-areas: "score" "chart" "then"; }
  .sb-hero__then .hub-then { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 0 18px; border-top: 2px solid var(--ink-soft); }
  .sb-hero__then .hub-then__cell { grid-template-columns: minmax(0, 1fr) auto; grid-template-areas: "label num" "date num"; gap: 1px 8px; padding: 6px 0; }
}
@media (max-width: 760px) {
  .hub-desk__table thead { display: none; }
  .hub-desk__table, .hub-desk__table tbody { display: block; }
  .hub-desk__table tr[data-kind] { display: grid; grid-template-columns: minmax(0, 1fr) auto; grid-template-areas: "topic spread" "poll spread" "res res"; gap: 2px 12px; padding: 9px 0; }
  .hub-desk__table tr[data-kind] + tr[data-kind] { border-top: 1px solid var(--rule-faint, rgba(255,255,255,.06)); }
  .hub-desk__table tr[data-kind][hidden] { display: none; }
  .hub-desk__table tr.hub-desk__day, .hub-desk__table .hub-desk__day th { display: block; }
  .hub-desk__table tbody tr.hub-desk__day ~ tr.hub-desk__day th { border-top: 0; margin-top: 8px; }
  .hub-desk__table tr[data-kind] > * { display: block; width: auto !important; padding: 0; border: 0 !important; }
  .hub-desk__table .hub-desk__topic { grid-area: topic; }
  .hub-desk__table .hub-desk__poll { grid-area: poll; font-weight: 500; }
  .hub-desk__table .hub-desk__res { grid-area: res; margin-top: 4px; }
  .hub-desk__table .hub-desk__spread { grid-area: spread; align-self: center; font-size: 15px; }
  .hub-pt .hub-pt__moe { display: none; }
  .hub-he .hub-he__bar { width: 44%; }
}
@media (max-width: 640px) {
  .sb-scores { grid-template-columns: repeat(2, minmax(0, 1fr)); }
  .sb-scores .sb-score { padding: 11px 0 12px 14px; border-top: 1px solid var(--line); border-left: 1px solid var(--line); }
  .sb-scores .sb-score:nth-child(1), .sb-scores .sb-score:nth-child(3) { padding-left: 0; border-left: 0; }
  .sb-scores .sb-score:nth-child(1), .sb-scores .sb-score:nth-child(2) { border-top: 0; }
  .sb-scores .sb-score--list, .sb-scores .sb-score--week { grid-column: 1 / -1; padding-left: 0; border-left: 0; }
  .sb-score--list { order: 5; }
  .sb-score--week { order: 6; }
  .sb-score:hover { background: none; }
  .sb-score__v { font-size: 23px; }
  .sb-desk__date { font-size: 12px; }
  .hub-he th, .hub-he td { padding-right: 10px; }
  .hub-he thead th:nth-child(2), .hub-he tbody td:nth-child(2) { display: none; }
}

/* approval map: estimates for every state, finer layers on demand */
.hub-map__bar { display: flex; flex-wrap: wrap; align-items: center; justify-content: space-between; gap: 6px 16px; margin: 0 0 8px; }
.hub-map__levels { display: flex; gap: 16px; }
.hub-map__status { margin: 0; color: var(--muted); font: 500 12px/1.3 var(--sans); }
.hub-map__stage { position: relative; }
.hub-map__canvas { position: absolute; top: 0; left: 0; pointer-events: none; }
.hub-map__state.is-polled { stroke: var(--ink); stroke-width: 1.4; }
.hub-map.is-fine .hub-map__state:not([data-state="DC"]) { fill: transparent !important; stroke: rgba(18, 19, 20, .55); stroke-width: .7; }
.hub-map.is-fine .hub-map__state.is-polled { stroke: rgba(18, 19, 20, .55); stroke-width: .7; }
.hub-map.is-fine .hub-map__svg:hover .hub-map__state.has-data:not(:hover) { opacity: 1; }
.hub-map.is-fine .hub-map__state.has-data:hover { stroke: rgba(18, 19, 20, .55); stroke-width: .7; }
.hub-map.is-fine .hub-map__state { cursor: crosshair; }
.hub-swatch--polled { background: transparent; box-shadow: inset 0 0 0 1.5px var(--ink); }
.hub-table .hub-basis { color: var(--ink-soft); white-space: nowrap; }
.hub-table .hub-basis--est { color: var(--muted); font-style: italic; }
@media (max-width: 640px) {
  .hub-table .hub-basis { white-space: normal; }
  .hub-map__status { flex-basis: 100%; }
}
