/* Fonts (Bodoni Moda + Newsreader) load via preconnect + <link> in each page's
   <head> — an @import here would serialize behind the stylesheet download. */

/* ─────────────────────────────────────────────────────────────
   The Gothic Times — newspaper components, broadsheet edition.
   Builds on styles.css design tokens (styles.css owns --paper,
   --ink, --prussian, --royal, --navy, --gray, --rule, --rule-strong,
   --band, --accent, --accent-soft, --mono and the legacy hooks).
   Loaded only by daily/ pages.
   ───────────────────────────────────────────────────────────── */

/* ── daily-owned supplementary tokens ───────────────────────── */
/* Ledger ink: gains are "in the black" (Prussian), losses "in the
   red" (madder). Party colors are engraved, not neon.
   --panel-3 is a legacy hook from the old styles.css — kept alive
   here for the map fills below. */
:root {
  --dem: #2c5d9e;
  --rep: #9e3a41;
  --gt-up: var(--prussian);
  --gt-dn: #8c2f39;
  --sec-sports: var(--royal);
  --sec-ai: #45406e;
  --sec-markets: #8a6a1c;
  --sec-elections: #8c2f39;
  --panel-3: #e9e6dc;
}
html[data-theme="dark"] {
  --dem: #7fa8d9;
  --rep: #cf8b92;
  --gt-dn: #d08e96;
  --sec-ai: #a9a3d6;
  --sec-markets: #cbb26a;
  --sec-elections: #d08e96;
  --panel-3: #16222f;
}

/* section accents (same mechanism as before: desks tint --accent) */
body[data-paper="ai"]        { --accent: var(--sec-ai);        --accent-soft: rgba(69, 64, 110, 0.09); }
body[data-paper="markets"]   { --accent: var(--sec-markets);   --accent-soft: rgba(138, 106, 28, 0.1); }
body[data-paper="elections"] { --accent: var(--sec-elections); --accent-soft: rgba(140, 47, 57, 0.09); }
html[data-theme="dark"] body[data-paper="ai"]        { --accent-soft: rgba(169, 163, 214, 0.14); }
html[data-theme="dark"] body[data-paper="markets"]   { --accent-soft: rgba(203, 178, 106, 0.14); }
html[data-theme="dark"] body[data-paper="elections"] { --accent-soft: rgba(208, 142, 150, 0.14); }

/* ledger colors for deltas (JS emits .up / .down) */
.up { color: var(--gt-up); }
.down { color: var(--gt-dn); }

/* ── masthead ───────────────────────────────────────────────── */
.gt-masthead { margin: 0.5rem 0 1rem; text-align: center; }
.gt-masthead-top {
  display: grid;
  grid-template-columns: 1fr auto 1fr;
  align-items: end;
  gap: 1rem;
  padding: 0.65rem 0 0.5rem;
}
.gt-ear {
  text-align: left;
  color: var(--gray);
  font-size: 0.72rem;
  font-style: italic;
  line-height: 1.5;
}
.gt-ear.right { text-align: right; }
.gt-ear strong { color: var(--ink); font-weight: 600; font-style: normal; }
.gt-title {
  margin: 0;
  font-family: "Bodoni Moda", "Bodoni 72", Didot, serif;
  font-optical-sizing: auto;
  font-size: clamp(1.9rem, 6vw, 3.3rem);
  font-weight: 700;
  letter-spacing: 0.045em;
  text-transform: uppercase;
  line-height: 1;
  white-space: nowrap;
}
.gt-title a { color: var(--ink); text-decoration: none; }
.gt-title a:hover { color: var(--ink); }
.gt-tagline { margin: 0.3rem 0 0; color: var(--gray); font-size: 0.78rem; font-style: italic; }

/* folio line: the Oxford rule frames the date */
.gt-dateline {
  display: flex;
  justify-content: center;
  align-items: baseline;
  flex-wrap: wrap;
  gap: 0.3rem 0.9rem;
  padding: 0.5rem 0;
  border-top: 3px solid var(--ink);
  border-bottom: 1px solid var(--ink);
  color: var(--gray);
  font-family: var(--mono);
  font-size: 0.66rem;
  letter-spacing: 0.08em;
  text-transform: uppercase;
}
.gt-dateline .sep { opacity: 0.45; }
.gt-dateline a { color: var(--gray); text-decoration: none; transition: color 0.25s ease; }
.gt-dateline a:hover { color: var(--royal); }
.gt-dateline a.disabled { opacity: 0.3; pointer-events: none; }
.gt-dateline strong { color: var(--ink); font-weight: 600; }

/* compact masthead for section pages */
.gt-masthead.compact .gt-title { font-size: clamp(1.3rem, 3.5vw, 1.9rem); }
.gt-masthead.compact .gt-masthead-top { padding: 0.4rem 0 0.35rem; }

/* ── paper nav: the section index ───────────────────────────── */
.gt-nav {
  display: flex;
  justify-content: center;
  flex-wrap: wrap;
  gap: 0.2rem 2rem;
  padding: 0.55rem 0;
  margin: -0.6rem 0 1.2rem;
  border-bottom: 1px solid var(--rule-strong);
}
.gt-nav a {
  padding: 0.1rem 0;
  color: var(--ink);
  font-size: 0.7rem;
  font-weight: 600;
  letter-spacing: 0.18em;
  text-transform: uppercase;
  text-decoration: none;
  transition: color 0.25s ease;
}
.gt-nav a:hover { color: var(--royal); }
.gt-nav a.active { color: var(--accent); }
.gt-nav a.active::after { content: " ●"; font-size: 0.5em; vertical-align: 0.25em; }

/* ── game-day bulletin ──────────────────────────────────────── */
.gt-gameday {
  display: flex;
  justify-content: center;
  align-items: baseline;
  flex-wrap: wrap;
  gap: 0.35rem 0.9rem;
  margin: 0 0 1rem;
  padding: 0.45rem 0.9rem;
  border: 1px solid var(--rule-strong);
  background: var(--accent-soft);
  font-size: 0.82rem;
}
.gt-gameday .tag { letter-spacing: 0.16em; }
.gt-gameday strong { font-weight: 600; }
.gt-gameday span.when {
  color: var(--gray);
  font-family: var(--mono);
  font-size: 0.68rem;
  letter-spacing: 0.08em;
  font-variant-numeric: tabular-nums;
}

/* ── the brief: index strip with column rules ───────────────── */
.gt-brief {
  display: grid;
  grid-template-columns: repeat(4, minmax(0, 1fr));
  margin-bottom: 1.2rem;
  border-top: 1px solid var(--rule);
  border-bottom: 1px solid var(--rule);
}
.gt-brief-item {
  position: relative;
  padding: 0.7rem 0.9rem 0.75rem 2rem;
  font-size: 0.85rem;
  line-height: 1.4;
}
.gt-brief-item:not(:first-child) { border-left: 1px solid var(--rule); }
.gt-brief-item .n {
  position: absolute;
  left: 0.7rem;
  top: 0.55rem;
  color: var(--accent);
  font-family: "Bodoni Moda", "Bodoni 72", Didot, serif;
  font-size: 1.1rem;
  font-weight: 700;
  font-variant-numeric: tabular-nums;
}
.gt-brief-item a {
  color: var(--ink);
  font-weight: 600;
  text-decoration: none;
  transition: color 0.25s ease;
}
.gt-brief-item a:hover { color: var(--royal); }
.gt-brief-item .src {
  display: block;
  margin-top: 0.2rem;
  color: var(--gray);
  font-family: var(--mono);
  font-size: 0.62rem;
  text-transform: uppercase;
  letter-spacing: 0.08em;
}

/* ── the fold (lead + rail) ─────────────────────────────────── */
.gt-fold {
  display: grid;
  grid-template-columns: minmax(0, 2fr) minmax(0, 1fr);
  gap: 1.6rem;
  align-items: start;
  margin-bottom: 0.5rem;
}
.gt-fold > * { min-width: 0; }
.gt-lead { padding: 0.4rem 0 0.6rem; }
.gt-lead .kicker { display: flex; align-items: center; gap: 0.6rem; margin-bottom: 0.6rem; }
.gt-lead h2.headline {
  margin: 0 0 0.6rem;
  font-family: "Bodoni Moda", "Bodoni 72", Didot, serif;
  font-optical-sizing: auto;
  font-size: clamp(1.6rem, 3.4vw, 2.4rem);
  font-weight: 700;
  letter-spacing: 0.005em;
  line-height: 1.1;
  text-transform: none;
  text-wrap: balance;
  color: var(--ink);
}
.gt-lead h2.headline a { color: var(--ink); text-decoration: none; transition: color 0.25s ease; }
.gt-lead h2.headline a:hover { color: var(--royal); }
.gt-lead p.deck { margin: 0 0 0.6rem; color: var(--gray); font-size: 1.02rem; line-height: 1.5; max-width: 56rem; }
.gt-lead .meta {
  color: var(--gray);
  font-family: var(--mono);
  font-size: 0.66rem;
  letter-spacing: 0.08em;
  text-transform: uppercase;
}
.gt-lead .meta a { color: var(--gray); font-weight: 600; transition: color 0.25s ease; }
.gt-lead .meta a:hover { color: var(--royal); }

/* newspaper column rule between fold halves */
@media (min-width: 761px) {
  .gt-fold > aside { border-left: 1px solid var(--rule); padding-left: 1.6rem; }
}

/* rail modules */
.gt-rail .card { padding: 0.8rem 0.9rem; }
.gt-rail h2 { margin-bottom: 0.5rem; }
.gt-mini-quotes { display: grid; grid-template-columns: 1fr 1fr; gap: 0.15rem 0.9rem; }
.gt-quote-line {
  display: flex;
  justify-content: space-between;
  align-items: baseline;
  gap: 0.4rem;
  padding: 0.14rem 0;
  border-bottom: 1px solid var(--rule);
  font-family: var(--mono);
  font-size: 0.68rem;
  letter-spacing: 0.04em;
  font-variant-numeric: tabular-nums;
}
.gt-quote-line .lbl { color: var(--gray); }
.gt-quote-line .val { font-weight: 600; }

/* control-of-congress bars */
.gt-control { display: grid; gap: 0.65rem; }
.gt-control-row .lbl-row {
  display: flex;
  justify-content: space-between;
  align-items: baseline;
  margin-bottom: 0.25rem;
  font-size: 0.76rem;
}
.gt-control-row .lbl-row .chamber {
  font-weight: 600;
  text-transform: uppercase;
  letter-spacing: 0.16em;
  font-size: 0.66rem;
}
.gt-control-row .lbl-row .odds {
  color: var(--gray);
  font-family: var(--mono);
  font-size: 0.68rem;
  font-variant-numeric: tabular-nums;
}
.gt-control-row .odds b.d { color: var(--dem); }
.gt-control-row .odds b.r { color: var(--rep); }
.gt-control-bar {
  display: flex;
  height: 0.45rem;
  overflow: hidden;
  border: 1px solid var(--rule);
  background: var(--panel-2);
}
.gt-control-bar .d { background: var(--dem); }
.gt-control-bar .r { background: var(--rep); }

/* ── fold rule: Oxford rules flank the slug ─────────────────── */
.gt-foldrule {
  display: flex;
  align-items: center;
  gap: 1rem;
  margin: 1.4rem 0 1.2rem;
  color: var(--ink);
  font-size: 0.66rem;
  font-weight: 600;
  letter-spacing: 0.35em;
  text-transform: uppercase;
}
.gt-foldrule::before,
.gt-foldrule::after {
  content: "";
  flex: 1;
  height: 6px;
  border-top: 3px solid var(--ink);
  border-bottom: 1px solid var(--ink);
}

/* ── section blocks (front page) ────────────────────────────── */
.gt-sections {
  display: grid;
  grid-template-columns: repeat(2, minmax(0, 1fr));
  gap: 1.2rem;
  margin-bottom: 1.2rem;
}
.gt-section-block { border-top: 3px solid var(--ink); }
.gt-section-block .section-title-row { margin-bottom: 0.3rem; }
.gt-section-block .section-title-row h2 { color: var(--sec, var(--accent)); }
.gt-section-block .more {
  font-size: 0.68rem;
  font-weight: 600;
  letter-spacing: 0.14em;
  text-transform: uppercase;
  white-space: nowrap;
  color: var(--sec, var(--accent));
  text-decoration: none;
  transition: color 0.25s ease;
}
.gt-section-block .more:hover { color: var(--royal); }
.gt-section-block[data-sec="sports"]    { --sec: var(--sec-sports); }
.gt-section-block[data-sec="ai"]        { --sec: var(--sec-ai); }
.gt-section-block[data-sec="markets"]   { --sec: var(--sec-markets); }
.gt-section-block[data-sec="elections"] { --sec: var(--sec-elections); }

/* headline entries */
.gt-entry { padding: 0.6rem 0; border-bottom: 1px solid var(--rule); }
.gt-entry:last-child { border-bottom: 0; padding-bottom: 0.2rem; }
.gt-entry h3 {
  margin: 0;
  font-family: "Bodoni Moda", "Bodoni 72", Didot, serif;
  font-optical-sizing: auto;
  font-size: 1.02rem;
  font-weight: 600;
  line-height: 1.25;
}
.gt-entry h3 a { color: var(--ink); text-decoration: none; transition: color 0.25s ease; }
.gt-entry h3 a:visited { color: var(--gray); }
.gt-entry h3 a:hover { color: var(--royal); }
.gt-entry .meta {
  margin-top: 0.2rem;
  color: var(--gray);
  font-family: var(--mono);
  font-size: 0.64rem;
  letter-spacing: 0.06em;
}
.gt-entry .meta .src { font-weight: 600; text-transform: uppercase; letter-spacing: 0.08em; }
.gt-entry .meta .team { color: var(--sec, var(--accent)); font-weight: 600; }
.gt-entry p.blurb { margin: 0.3rem 0 0; color: var(--gray); font-size: 0.85rem; line-height: 1.45; }
.gt-entry.lead-of-block h3 { font-size: 1.25rem; }

/* compact one-line entries: the wire */
.gt-wire { margin: 0; padding: 0; list-style: none; }
.gt-wire li {
  display: flex;
  justify-content: space-between;
  gap: 0.6rem;
  padding: 0.3rem 0;
  font-size: 0.85rem;
  border-bottom: 1px solid var(--rule);
}
.gt-wire li:last-child { border-bottom: 0; }
.gt-wire a {
  color: var(--ink);
  flex: 1 1 auto;
  min-width: 0;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
  text-decoration: none;
  transition: color 0.25s ease;
}
.gt-wire a:hover { color: var(--royal); }
.gt-wire a:visited { color: var(--gray); }
.gt-wire .src {
  flex: 0 0 auto;
  align-self: center;
  color: var(--gray);
  font-family: var(--mono);
  font-size: 0.62rem;
  text-transform: uppercase;
  letter-spacing: 0.08em;
}
.gt-wire .sec {
  flex: 0 0 4.6rem;
  align-self: center;
  font-family: var(--mono);
  font-size: 0.6rem;
  font-weight: 600;
  letter-spacing: 0.08em;
  text-transform: uppercase;
}
.gt-wire .sec-sports { color: var(--sec-sports); }
.gt-wire .sec-ai { color: var(--sec-ai); }
.gt-wire .sec-markets { color: var(--sec-markets); }
.gt-wire .sec-elections { color: var(--sec-elections); }
.gt-wire .sec-math { color: var(--gray); }

/* lock for paywalled */
.lock { font-size: 0.68rem; opacity: 0.7; }

/* ── race board (elections) ─────────────────────────────────── */
.gt-races td:first-child { font-weight: 600; }
.gt-races .office {
  color: var(--gray);
  font-family: var(--mono);
  font-size: 0.62rem;
  text-transform: uppercase;
  letter-spacing: 0.08em;
}
.gt-races .pq { font-family: var(--mono); font-variant-numeric: tabular-nums; font-weight: 600; }
.gt-races .pq.d { color: var(--dem); }
.gt-races .pq.r { color: var(--rep); }
.gt-races .pq .side { font-size: 0.66rem; font-weight: 600; letter-spacing: 0.03em; }
.gt-races .fav { font-size: 0.78rem; }
.gt-races a.mkt { font-size: 0.7rem; color: var(--gray); transition: color 0.25s ease; }
.gt-races a.mkt:hover { color: var(--royal); }

/* lean scale: flat two-tint track, engraved needle (no gradients) */
.gt-lean {
  position: relative;
  display: inline-block;
  vertical-align: middle;
  width: 5.2rem;
  height: 0.34rem;
  margin-left: auto;
  border: 1px solid var(--rule);
  background: var(--panel-2);
}
.gt-lean::before,
.gt-lean::after {
  content: "";
  position: absolute;
  top: 0;
  bottom: 0;
}
.gt-lean::before { left: 0; width: 38%; background: rgba(158, 58, 65, 0.28); }
.gt-lean::after { right: 0; width: 38%; background: rgba(44, 93, 158, 0.28); }
html[data-theme="dark"] .gt-lean::before { background: rgba(207, 139, 146, 0.32); }
html[data-theme="dark"] .gt-lean::after { background: rgba(127, 168, 217, 0.32); }
.gt-lean i {
  position: absolute;
  top: 50%;
  z-index: 1;
  width: 2px;
  height: 0.7rem;
  background: var(--ink);
  transform: translate(-50%, -50%);
}

/* ── election tile map ──────────────────────────────────────── */
.gt-map-tabs { display: flex; gap: 0.35rem; }
.gt-map-tab {
  padding: 0.4rem 0.85rem;
  border: 1px solid var(--rule-strong);
  background: none;
  color: var(--ink);
  font-family: inherit;
  font-size: 0.62rem;
  font-weight: 600;
  letter-spacing: 0.16em;
  text-transform: uppercase;
  cursor: pointer;
  transition: color 0.25s ease, background-color 0.25s ease, border-color 0.25s ease;
}
.gt-map-tab:hover { color: var(--royal); border-color: var(--royal); }
.gt-map-tab.active { color: var(--paper); background: var(--accent); border-color: var(--accent); }
.gt-map-wrap { position: relative; }
.gt-map-grid { margin: 0.4rem 0 0.2rem; text-align: center; }
.gt-tile {
  position: relative;
  aspect-ratio: 1;
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  gap: 0.05rem;
  border: 1px solid var(--rule);
  background: var(--panel-2);
  color: var(--ink);
  font: inherit;
  font-size: 0.72rem;
  font-weight: 600;
  cursor: default;
  padding: 0;
}
.gt-tile .pc {
  font-family: var(--mono);
  font-size: 0.6rem;
  font-weight: 600;
  color: rgba(255, 255, 255, 0.9);
  font-variant-numeric: tabular-nums;
}
.gt-tile.norace { opacity: 0.32; }
.gt-tile.norace .pc { display: none; }
.gt-tile.live { cursor: pointer; border-color: transparent; color: #fff; text-shadow: 0 1px 2px rgba(0, 0, 0, 0.45); }
.gt-tile.live:hover, .gt-tile.live:focus-visible { outline: 2px solid var(--royal); outline-offset: 1px; z-index: 2; }

/* tooltip: paper mat, hairline frame */
.gt-map-tooltip {
  position: absolute;
  z-index: 30;
  min-width: 13rem;
  max-width: 17rem;
  padding: 0.6rem 0.75rem;
  border: 1px solid var(--rule-strong);
  background: var(--paper);
  box-shadow: 0 0 0 4px var(--paper);
  font-size: 0.78rem;
  pointer-events: none;
}
.gt-map-tooltip h4 {
  margin: 0 0 0.3rem;
  font-family: "Bodoni Moda", "Bodoni 72", Didot, serif;
  font-size: 0.88rem;
  font-weight: 600;
}
.gt-map-tooltip .row {
  display: flex;
  justify-content: space-between;
  gap: 0.8rem;
  padding: 0.08rem 0;
  font-family: var(--mono);
  font-size: 0.68rem;
  letter-spacing: 0.04em;
}
.gt-map-tooltip .row span:first-child { color: var(--gray); }
.gt-map-tooltip .row b { font-variant-numeric: tabular-nums; }
.gt-map-tooltip .row b.d { color: var(--dem); }
.gt-map-tooltip .row b.r { color: var(--rep); }
.gt-map-tooltip .hint { margin: 0.35rem 0 0; color: var(--gray); font-size: 0.7rem; font-style: italic; }
.gt-map-legend {
  display: flex;
  align-items: center;
  flex-wrap: wrap;
  gap: 0.5rem;
  color: var(--gray);
  font-family: var(--mono);
  font-size: 0.64rem;
  letter-spacing: 0.04em;
}
.gt-map-legend .swatches { display: inline-flex; border: 1px solid var(--rule); }
.gt-map-legend .swatches i { width: 1.3rem; height: 0.7rem; }

/* district chips (house view) */
.gt-districts { display: flex; flex-wrap: wrap; gap: 0.35rem; margin-top: 0.6rem; }
.gt-district {
  display: inline-flex;
  align-items: baseline;
  gap: 0.35rem;
  padding: 0.22em 0.65em;
  border: 1px solid var(--rule);
  color: var(--ink);
  font-family: var(--mono);
  font-size: 0.66rem;
  letter-spacing: 0.06em;
  font-variant-numeric: tabular-nums;
  text-decoration: none;
  transition: border-color 0.25s ease, color 0.25s ease;
}
.gt-district:hover { border-color: var(--rule-strong); color: var(--royal); }
.gt-district .pq { font-weight: 600; }

/* ── sports team desks ──────────────────────────────────────── */
.gt-team-desks {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(290px, 1fr));
  gap: 1.2rem;
  margin-bottom: 1.2rem;
}
.gt-team-desk {
  border-top: 3px solid var(--team, var(--ink));
  display: flex;
  flex-direction: column;
}
.gt-team-desk .desk-head {
  display: flex;
  align-items: center;
  gap: 0.6rem;
  margin-bottom: 0.4rem;
  padding-bottom: 0.4rem;
  border-bottom: 1px solid var(--rule);
}
.gt-team-desk .desk-head img {
  width: 30px;
  height: 30px;
  object-fit: contain;
  padding: 2px;
  border: 1px solid var(--rule);
  background: #fff;
}
.gt-team-desk .desk-head .who { min-width: 0; }
.gt-team-desk .desk-head h3 {
  margin: 0;
  font-family: "Bodoni Moda", "Bodoni 72", Didot, serif;
  font-size: 1rem;
  font-weight: 600;
}
.gt-team-desk .desk-head .rec {
  color: var(--gray);
  font-family: var(--mono);
  font-size: 0.64rem;
  letter-spacing: 0.06em;
  font-variant-numeric: tabular-nums;
}
/* quant chip */
.tag.quant { background: var(--accent-soft); color: var(--accent); }

/* hot markets */
.gt-hot .vol {
  color: var(--gray);
  font-family: var(--mono);
  font-size: 0.62rem;
  letter-spacing: 0.06em;
  font-variant-numeric: tabular-nums;
}
.gt-hot .out { color: var(--gray); font-size: 0.78rem; }
.gt-hot .out b { color: var(--ink); font-family: var(--mono); font-size: 0.72rem; font-variant-numeric: tabular-nums; }

/* ── back page ──────────────────────────────────────────────── */
.gt-backpage {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(240px, 1fr));
  gap: 1.2rem;
  margin-bottom: 1.2rem;
}
.gt-poem blockquote {
  margin: 0.3rem 0 0.5rem;
  padding-left: 0.9rem;
  border-left: 1px solid var(--rule-strong);
  font-size: 0.88rem;
  line-height: 1.6;
  white-space: pre-line;
}
.gt-poem .attr { color: var(--gray); font-size: 0.78rem; font-style: italic; }
.gt-poem .attr em { color: var(--ink); font-style: italic; }
.gt-reading h3 {
  margin: 0 0 0.15rem;
  font-family: "Bodoni Moda", "Bodoni 72", Didot, serif;
  font-size: 0.95rem;
  font-weight: 600;
}
.gt-reading .who { color: var(--gray); font-size: 0.76rem; font-style: italic; margin: 0 0 0.3rem; }
.gt-reading p.note { margin: 0; color: var(--gray); font-size: 0.8rem; line-height: 1.45; }

/* colophon */
.gt-colophon {
  margin: 1.2rem 0 0.5rem;
  padding-top: 0.7rem;
  border-top: 1px solid var(--rule-strong);
  color: var(--gray);
  font-size: 0.74rem;
  font-style: italic;
  line-height: 1.6;
  text-align: center;
}

/* snapshot strip on markets page reuses .stat-strip; add delta line */
.stat-box .stat-delta {
  display: block;
  font-family: var(--mono);
  font-size: 0.66rem;
  font-weight: 600;
  letter-spacing: 0.04em;
  font-variant-numeric: tabular-nums;
}

/* error / stale notice */
.gt-notice {
  margin-bottom: 1rem;
  padding: 0.55rem 0.9rem;
  border: 1px solid var(--rule-strong);
  color: var(--gray);
  font-size: 0.82rem;
  font-style: italic;
  background: var(--accent-soft);
}

/* ── hex map ────────────────────────────────────────────────── */
.gt-hexmap { width: 100%; max-width: 720px; height: auto; display: block; margin: 0.5rem auto 0.25rem; }
.gt-hexmap.house { max-width: 920px; }
.gt-hexmap polygon { stroke: var(--paper); stroke-width: 1; }
.gt-hexmap polygon.norace { fill: var(--panel-3); opacity: 0.45; }
.gt-hexmap polygon.live { cursor: pointer; }
.gt-hexmap polygon.live:hover, .gt-hexmap polygon.live:focus { stroke: var(--ink); stroke-width: 1.6; outline: none; }
.gt-hexmap text { font-family: var(--mono); text-anchor: middle; pointer-events: none; }
.gt-hexmap .hexlbl { font-size: 11px; font-weight: 700; fill: var(--gray); }
.gt-hexmap .hexpc { font-size: 9px; font-weight: 600; }
.gt-hexmap .hexlbl.on-dark, .gt-hexmap .hexpc.on-dark { fill: rgba(255, 255, 255, 0.92); }
.gt-hexmap .hexlbl.on-light, .gt-hexmap .hexpc.on-light { fill: #14213d; }
.gt-hexmap .hexstate { font-size: 11px; font-weight: 700; fill: var(--gray); }

/* ── AI desk ────────────────────────────────────────────────── */
.gt-lab-board {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(190px, 1fr));
  gap: 0.9rem;
  margin-bottom: 1.2rem;
}
.gt-lab {
  display: flex;
  flex-direction: column;
  gap: 0.3rem;
  padding: 0.7rem 0.8rem;
  border: 1px solid var(--rule);
  border-top: 3px solid var(--lab, var(--accent));
  background: var(--panel);
  color: var(--ink);
  text-decoration: none;
  transition: border-color 0.25s ease;
}
.gt-lab:hover { border-color: var(--rule-strong); }
.gt-lab.quiet { opacity: 0.55; pointer-events: none; }
.gt-lab .lab-head { display: flex; align-items: center; gap: 0.45rem; }
.gt-lab .lab-dot { width: 0.5rem; height: 0.5rem; background: var(--lab, var(--accent)); }
.gt-lab .lab-name { font-size: 0.66rem; font-weight: 600; letter-spacing: 0.16em; text-transform: uppercase; }
.gt-lab .lab-latest {
  margin: 0;
  font-family: "Bodoni Moda", "Bodoni 72", Didot, serif;
  font-size: 0.88rem;
  font-weight: 600;
  line-height: 1.3;
}
.gt-lab .lab-when { color: var(--gray); font-family: var(--mono); font-size: 0.62rem; letter-spacing: 0.06em; }
.gt-ai-feature {
  padding: 0.6rem 0 1rem;
  border-bottom: 1px solid var(--rule-strong);
  margin-bottom: 1.2rem;
}
.gt-ai-feature h2.headline {
  margin: 0 0 0.5rem;
  font-family: "Bodoni Moda", "Bodoni 72", Didot, serif;
  font-optical-sizing: auto;
  font-size: clamp(1.4rem, 3vw, 2rem);
  font-weight: 700;
  letter-spacing: 0.005em;
  line-height: 1.12;
  text-transform: none;
  text-wrap: balance;
  color: var(--ink);
}
.gt-ai-feature h2.headline a { color: var(--ink); text-decoration: none; transition: color 0.25s ease; }
.gt-ai-feature h2.headline a:hover { color: var(--royal); }
.gt-ai-feature .kicker { margin-bottom: 0.5rem; }
.gt-ai-feature p.deck { margin: 0 0 0.5rem; color: var(--gray); font-size: 0.98rem; line-height: 1.5; }
.gt-ai-feature .meta {
  margin: 0;
  color: var(--gray);
  font-family: var(--mono);
  font-size: 0.66rem;
  letter-spacing: 0.08em;
  text-transform: uppercase;
}
.gt-paper { padding: 0.5rem 0; border-bottom: 1px solid var(--rule); }
.gt-paper:last-child { border-bottom: 0; }
.gt-paper h3 { margin: 0; font-size: 0.85rem; font-weight: 600; line-height: 1.35; }
.gt-paper h3 a { color: var(--ink); text-decoration: none; transition: color 0.25s ease; }
.gt-paper h3 a:hover { color: var(--royal); }
.gt-paper h3 a:visited { color: var(--gray); }
.gt-paper .meta {
  margin-top: 0.15rem;
  color: var(--gray);
  font-family: var(--mono);
  font-size: 0.62rem;
  text-transform: uppercase;
  letter-spacing: 0.06em;
}
.gt-paper .votebar { height: 3px; margin-top: 0.35rem; background: var(--panel-2); overflow: hidden; }
.gt-paper .votebar span { display: block; height: 100%; background: var(--accent); }

/* ── ticker sparklines ──────────────────────────────────────── */
.gt-quote-card { position: relative; padding-bottom: 0.4rem; }
.spark { display: block; width: 100%; height: 30px; margin-top: 0.35rem; }
.spark polyline { stroke-width: 1.5; vector-effect: non-scaling-stroke; }
.spark.up polyline { stroke: var(--gt-up); }
.spark.down polyline { stroke: var(--gt-dn); }
.spark .fillarea { opacity: 0.08; }
.spark.up .fillarea { fill: var(--gt-up); }
.spark.down .fillarea { fill: var(--gt-dn); }

/* ── geographic map ─────────────────────────────────────────── */
.gt-geomap { width: 100%; max-width: 860px; height: auto; display: block; margin: 0.4rem auto 0.2rem; }
.gt-geomap path { fill: var(--panel-3); stroke: var(--paper); stroke-width: 1; opacity: 0.5; }
.gt-geomap path.live { opacity: 1; cursor: pointer; }
.gt-geomap path.live:hover { stroke: var(--ink); stroke-width: 1.5; }

/* per-state drill panel */
.gt-drill { margin-top: 0.7rem; padding: 0.7rem 0.85rem; border: 1px solid var(--rule-strong); background: var(--accent-soft); }
.gt-drill .drill-head { display: flex; justify-content: space-between; align-items: center; margin-bottom: 0.4rem; }
.gt-drill h3 { margin: 0; font-family: "Bodoni Moda", "Bodoni 72", Didot, serif; font-size: 0.95rem; font-weight: 600; }
.drill-row {
  display: flex;
  align-items: baseline;
  gap: 0.7rem;
  padding: 0.32rem 0;
  border-bottom: 1px solid var(--rule);
  color: var(--ink);
  text-decoration: none;
  font-size: 0.82rem;
  transition: color 0.25s ease;
}
.drill-row:last-child { border-bottom: 0; }
.drill-row:hover { color: var(--royal); }
.drill-row .race { flex: 0 0 7rem; font-weight: 600; }
.drill-row .pq { font-family: var(--mono); font-size: 0.72rem; font-variant-numeric: tabular-nums; font-weight: 600; }
.drill-row .vol {
  margin-left: auto;
  color: var(--gray);
  font-family: var(--mono);
  font-size: 0.66rem;
  font-variant-numeric: tabular-nums;
}

/* balance-of-power scenarios */
.gt-scenarios { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 0.5rem; }
.gt-scenario {
  display: flex;
  flex-direction: column;
  gap: 0.15rem;
  padding: 0.5rem 0.65rem;
  border: 1px solid var(--rule);
  color: var(--ink);
  text-decoration: none;
  transition: border-color 0.25s ease;
}
.gt-scenario:hover { border-color: var(--rule-strong); }
.gt-scenario .pct {
  font-family: "Bodoni Moda", "Bodoni 72", Didot, serif;
  font-size: 1.15rem;
  font-weight: 700;
  color: var(--accent);
  font-variant-numeric: tabular-nums;
}
.gt-scenario .lbl { color: var(--gray); font-size: 0.72rem; line-height: 1.3; }

/* AI release timeline */
.gt-timeline { display: flex; gap: 0.5rem; overflow-x: auto; padding: 0.35rem 0 0.35rem; }
.gt-timeline::before { content: ""; }
.gt-release {
  flex: 0 0 auto;
  display: flex;
  flex-direction: column;
  gap: 0.1rem;
  padding: 0.45rem 0.65rem;
  border: 1px solid var(--rule);
  border-top: 2px solid var(--accent);
  min-width: 8rem;
}
.gt-release .when {
  color: var(--gray);
  font-family: var(--mono);
  font-size: 0.6rem;
  font-variant-numeric: tabular-nums;
  letter-spacing: 0.08em;
}
.gt-release .what { font-size: 0.8rem; font-weight: 600; }
.gt-release .who { color: var(--gray); font-size: 0.68rem; font-style: italic; }

/* sparkline extras */
.spark-wrap { position: relative; display: block; }
.spark-readout {
  position: absolute;
  top: -2px;
  right: 0;
  color: var(--gray);
  font-family: var(--mono);
  font-size: 0.62rem;
  font-variant-numeric: tabular-nums;
  background: var(--panel);
  padding: 0 0.2rem;
}
.spark .dot.hi { fill: var(--gt-up); }
.spark .dot.lo { fill: var(--gt-dn); }
.spark .xhair { stroke: var(--gray); stroke-width: 0.75; opacity: 0.8; }

/* scoreboard odds + puzzle + permalink */
.odds-line { color: var(--gray); font-family: var(--mono); font-size: 0.64rem; letter-spacing: 0.04em; }
.puzzle-answer summary { cursor: pointer; color: var(--accent); font-size: 0.78rem; font-weight: 600; transition: color 0.25s ease; }
.puzzle-answer summary:hover { color: var(--royal); }
.puzzle-answer { margin-top: 0.3rem; }
.gt-entry .permalink { margin-left: 0.35rem; color: var(--gray); opacity: 0; font-weight: 400; transition: opacity 0.2s ease, color 0.25s ease; }
.gt-entry:hover .permalink, .gt-entry .permalink:focus { opacity: 1; }
.gt-entry .permalink:hover { color: var(--royal); }

/* ── district map, history chart, seats, geo labels ─────────── */
.gt-distmap { width: 100%; max-width: 980px; height: auto; display: block; margin: 0.4rem auto 0.2rem; }
.gt-distmap path, .gt-distmap rect { fill: var(--panel-3); stroke: var(--paper); stroke-width: 0.6; opacity: 0.45; }
.gt-distmap rect { fill: none; stroke: var(--rule); opacity: 1; }
.gt-distmap path.live { opacity: 1; cursor: pointer; }
.gt-distmap path.live:hover { stroke: var(--ink); stroke-width: 1.4; }
.gt-geomap .geolbl {
  font-family: var(--mono);
  font-size: 13px;
  font-weight: 700;
  fill: var(--ink);
  paint-order: stroke;
  stroke: var(--paper);
  stroke-width: 2.5px;
  text-anchor: middle;
  pointer-events: none;
}
.gt-histchart { width: 100%; height: auto; display: block; }
.gt-histchart .mid { stroke: var(--rule-strong); stroke-dasharray: 3 3; }
.gt-histchart .serie { stroke-width: 2; vector-effect: non-scaling-stroke; }
.gt-histchart .serie.sen { stroke: var(--dem); }
.gt-histchart .serie.hou { stroke: var(--dem); opacity: 0.55; stroke-dasharray: 5 4; }
.gt-histchart text { font-family: var(--mono); fill: var(--gray); letter-spacing: 0.06em; }
.gt-seatrows { display: grid; gap: 0.3rem; }
.seat-row {
  display: flex;
  align-items: center;
  gap: 0.5rem;
  color: var(--ink);
  text-decoration: none;
  font-family: var(--mono);
  font-size: 0.68rem;
  font-variant-numeric: tabular-nums;
  transition: color 0.25s ease;
}
.seat-row:hover { color: var(--royal); }
.seat-row .lbl { flex: 0 0 3.2rem; color: var(--gray); }
.seat-row .bar { flex: 1; height: 0.5rem; border: 1px solid var(--rule); background: var(--panel-2); overflow: hidden; }
.seat-row .bar i { display: block; height: 100%; background: var(--rep); }
.seat-row .pq { flex: 0 0 2.6rem; text-align: right; font-weight: 600; }

/* story keyboard focus + new dots + shelf */
.gt-entry.knav { outline: 2px solid var(--royal); outline-offset: 3px; }
.newdot { display: inline-block; width: 0.4rem; height: 0.4rem; margin-right: 0.35rem; background: var(--royal); vertical-align: 2px; }
.shelfbtn {
  margin-left: 0.3rem;
  padding: 0 0.15rem;
  border: 0;
  background: none;
  color: var(--gray);
  font: inherit;
  font-size: 0.8rem;
  cursor: pointer;
  opacity: 0;
  transition: color 0.25s ease, opacity 0.2s ease;
}
.gt-entry:hover .shelfbtn, .shelfbtn:focus { opacity: 1; }
.shelfbtn:hover { color: var(--royal); }
.gt-team-desk .form-strip { margin-top: 0.2rem; }

/* ── print: make it an actual broadsheet ────────────────────── */
@media print {
  .site-header, .gt-nav, .gt-dateline a, .gt-colophon .tools { display: none !important; }
  .gt-masthead-top { padding-top: 0; }
  .gt-fold { grid-template-columns: 2fr 1fr; }
  .gt-sections { grid-template-columns: 1fr 1fr; }
  .gt-entry h3 a, .gt-wire a { color: #000; }
  .gt-lean { display: none; }
}

/* ── responsive ─────────────────────────────────────────────── */
@media (max-width: 980px) {
  .gt-brief { grid-template-columns: repeat(2, minmax(0, 1fr)); }
  .gt-brief-item:nth-child(odd) { border-left: 0; }
  .gt-brief-item:nth-child(n + 3) { border-top: 1px solid var(--rule); }
  .gt-backpage { grid-template-columns: 1fr; }
}
@media (max-width: 560px) {
  .gt-tile { font-size: 0.55rem; }
  .gt-tile .pc { display: none; }   /* color carries the lean; tooltip has the number */
  .gt-map-grid { gap: 0.18rem; }
}
@media (max-width: 760px) {
  .gt-masthead-top { grid-template-columns: 1fr; gap: 0.25rem; }
  .gt-ear, .gt-ear.right { text-align: center; }
  .gt-title { white-space: normal; }
  .gt-nav { gap: 0.2rem 1.1rem; }
  .gt-fold { grid-template-columns: 1fr; }
  .gt-fold > aside { border-left: 0; padding-left: 0; }
  .gt-sections { grid-template-columns: 1fr; }
  .gt-brief { grid-template-columns: 1fr; }
  .gt-brief-item { border-left: 0; }
  .gt-brief-item:not(:first-child) { border-left: 0; border-top: 1px solid var(--rule); }
  .gt-races .fav { display: none; }
}

/* ── reduced motion ─────────────────────────────────────────── */
@media (prefers-reduced-motion: reduce) {
  .gt-nav a, .gt-dateline a, .gt-map-tab, .gt-entry .permalink, .shelfbtn,
  .gt-lab, .gt-scenario, .gt-district, .drill-row, .seat-row,
  .gt-brief-item a, .gt-lead h2.headline a, .gt-entry h3 a, .gt-wire a,
  .gt-section-block .more, .puzzle-answer summary { transition: none !important; }
}

/* ── season trackers (folded in from the old standalone sports
   page). The card components — .tier-grid, .team-card, .form-strip,
   .rank-bar, .recent-results — live in styles.css, which daily
   pages already load; below are the rules that were page-local on
   sports.html plus the compact treatment for tier 2–3 cards. ── */
.tier-grid.tier-compact {
  grid-template-columns: repeat(auto-fill, minmax(220px, 1fr));
  gap: 0.7rem;
  margin-bottom: 0.8rem;
}
.tier-grid.tier-compact .team-card { gap: 0.45rem; padding: 0.6rem 0.75rem 0.7rem; }
.tier-grid.tier-compact .team-head img { width: 26px; height: 26px; }
.tier-grid.tier-compact .team-id h3 { font-size: 0.92rem; }
.tier-grid.tier-compact .team-record { font-size: 0.84rem; }
.tier-grid.tier-compact .team-lines { padding-top: 0.45rem; }
.tier-grid.tier-compact .team-line { font-size: 0.8rem; }

/* three-column upcoming schedules */
.sched-cols {
  display: grid;
  grid-template-columns: repeat(3, minmax(0, 1fr));
  gap: 1.4rem 1.8rem;
}
.sched-col h3 {
  display: flex;
  align-items: baseline;
  justify-content: space-between;
  gap: 0.6rem;
  margin: 0 0 0.3rem;
  padding-bottom: 0.4rem;
  border-bottom: 1px solid var(--rule-strong);
  font-family: "Newsreader", Georgia, serif;
  font-size: 0.72rem;
  font-weight: 700;
  letter-spacing: 0.2em;
  text-transform: uppercase;
  color: var(--ink);
}
.sched-col .sched-league {
  font-family: var(--mono);
  font-size: 0.62rem;
  font-weight: 400;
  letter-spacing: 0.08em;
  color: var(--gray);
  white-space: nowrap;
}
.sched-col ul { margin: 0; padding: 0; list-style: none; }
.sched-col li {
  display: flex;
  align-items: baseline;
  gap: 0.55rem;
  padding: 0.38rem 0;
  border-bottom: 1px solid var(--rule);
  font-size: 0.85rem;
  font-variant-numeric: tabular-nums;
}
.sched-col li:last-child { border-bottom: 0; }
.sched-date {
  flex: 0 0 5rem;
  font-family: var(--mono);
  font-size: 0.66rem;
  letter-spacing: 0.08em;
  text-transform: uppercase;
  color: var(--gray);
}
.sched-opp { flex: 1 1 auto; min-width: 0; }
.sched-time {
  margin-left: auto;
  font-family: var(--mono);
  font-size: 0.66rem;
  letter-spacing: 0.08em;
  color: var(--ink);
  white-space: nowrap;
}
.sched-empty { padding: 0.5rem 0; font-size: 0.82rem; }
@media (max-width: 700px) {
  .sched-cols { grid-template-columns: 1fr; gap: 1.3rem; }
}

/* ── math desk: broadsheet preprint page ────────────────────── */
.gt-math-lead { padding: 0.3rem 0 0.9rem; margin-bottom: 1.1rem; border-bottom: 1px solid var(--rule-strong); }
.gt-math-lead .kicker { display: flex; align-items: baseline; gap: 0.6rem; margin-bottom: 0.55rem; }
.gt-math-lead .cat,
.gt-math-rubric .cat {
  color: var(--gray);
  font-family: var(--mono);
  font-size: 0.64rem;
  letter-spacing: 0.08em;
  text-transform: uppercase;
  font-variant-numeric: tabular-nums;
  white-space: nowrap;
}
.gt-math-lead h3 {
  margin: 0 0 0.5rem;
  font-size: clamp(1.5rem, 3.2vw, 2.2rem);
  font-weight: 700;
  line-height: 1.12;
  letter-spacing: 0.005em;
  text-wrap: balance;
}
.gt-math-lead p.deck {
  margin: 0 0 0.55rem;
  color: var(--gray);
  font-size: 0.98rem;
  line-height: 1.55;
  max-width: 56rem;
  display: -webkit-box;
  -webkit-line-clamp: 4;
  -webkit-box-orient: vertical;
  overflow: hidden;
}
.gt-math-lead .meta { margin: 0; text-transform: uppercase; }
.gt-math-lead .meta a { color: var(--gray); font-weight: 600; transition: color 0.25s ease; }
.gt-math-lead .meta a:hover { color: var(--royal); }

.gt-math-rubric { margin-bottom: 1.5rem; border-top: 3px solid var(--ink); padding-top: 0.55rem; }
.gt-math-rubric .section-title-row { margin-bottom: 0; }
.gt-math-rubric .rubric-note { margin: 0 0 0.15rem; color: var(--gray); font-size: 0.78rem; font-style: italic; }
.gt-math-cols { column-gap: 2.2rem; }
.gt-math-cols .gt-entry { break-inside: avoid; }
.gt-math-cols .gt-entry p.blurb {
  display: -webkit-box;
  -webkit-line-clamp: 2;
  -webkit-box-orient: vertical;
  overflow: hidden;
}
@media (min-width: 761px) {
  .gt-math-cols { columns: 2; column-rule: 1px solid var(--rule); }
}
