/* ============================================================
   THE SIDELINE REPORT — design system
   ------------------------------------------------------------
   THEMING:
   · Two themes share one token set. :root holds LIGHT (the
     default); [data-theme="dark"] overrides with the dark
     palette. JS sets data-theme on <html> from the toggle
     (saved in localStorage, key tsr_theme). Never hardcode a
     palette color in a component — add a token to BOTH blocks.

   COLOR SYSTEM (when to use what — don't drift):
   · --bg          page background only
   · --surface     raised planes: cards, ticker, modal, newsletter
   · --border      hairlines between planes; never for text
   · Sport accents (--basketball orange / --baseball blue /
     --soccer green): flags, card top-borders, eyebrows, nav
     underline, banner tints. Scoped via [data-sport] so a card
     inherits its sport's color automatically. Never mix two
     accents inside one component.
   · --live        red BACKGROUNDS only (ticker badge). AA-safe
                   with white text at any size, both themes.
   · --live-text   red TEXT/borders (opinion flag, form errors).
                   Never use as a background.
   · --chip-ink    text ON accent chips (flags). White in light
                   mode, near-black in dark mode.
   · --wordmark    the orange of "SIDELINE" in the logo. The ONE
                   color that never changes between themes
                   (3:1+ on both backgrounds). Wordmark only.
   · --text / --text-muted / --text-faint: three-step text
     hierarchy. All AA-safe on --bg and --surface at body sizes.

   TYPE SYSTEM:
   · Arvo (--font-display): headlines, wordmark, flags, buttons,
     section labels. The voice of the site.
   · Source Sans 3 (--font-body): body copy, deks, meta, bylines,
     inputs. The workhorse.
   · Fixed scale (--fs-1..7): 13 / 16 / 19 / 24 / 32 / 44 / 64.
     Every font-size on the site is one of these steps (large
     headlines clamp BETWEEN two adjacent steps).

   ============================================================ */

:root {
  /* LIGHT theme (default) */
  color-scheme: light;
  --bg: #f7f6f3;
  --surface: #ffffff;
  --surface-2: #eef0f3;
  --border: #dfe3e9;
  --text: #1a2028;
  --text-muted: #4a5464;
  --text-faint: #5d6878;
  --ink-strong: #232a34;
  --ink-body: #2b323d;

  --basketball: #b93d0a;
  --baseball: #1d5bd8;
  --soccer: #127437;
  --accent: var(--basketball);
  --live: #d6291d;
  --live-text: #c22218;
  --chip-ink: #ffffff;

  --header-bg: rgba(247, 246, 243, 0.94);
  --shadow-1: 0 1px 2px rgba(16, 24, 40, 0.06), 0 6px 18px rgba(16, 24, 40, 0.09);

  /* theme-constant: same in light and dark */
  --wordmark: #dd5712;

  --font-display: "Arvo", Georgia, "Times New Roman", serif;
  --font-body: "Source Sans 3", -apple-system, "Segoe UI", sans-serif;

  --fs-1: 13px;
  --fs-2: 16px;
  --fs-3: 19px;
  --fs-4: 24px;
  --fs-5: 32px;
  --fs-6: 44px;
  --fs-7: 64px;

  --radius: 4px;
  --container: 1280px;
  --header-h: 68px;
  --ticker-h: 38px;
}

[data-theme="dark"] {
  /* DARK theme (unchanged from the original design) */
  color-scheme: dark;
  --bg: #0a0d12;
  --surface: #151a23;
  --surface-2: #1a2029;
  --border: #232a35;
  --text: #f5f3ee;
  --text-muted: #97a0b0;
  --text-faint: #7a8494;
  --ink-strong: #e7e5df;
  --ink-body: #dcdad4;

  --basketball: #ff6b1a;
  --baseball: #2f80ed;
  --soccer: #2fbf71;
  --live: #d6291d;
  --live-text: #ff5a50;
  --chip-ink: #0a0d12;

  --header-bg: rgba(10, 13, 18, 0.94);
  --shadow-1: 0 1px 2px rgba(0, 0, 0, 0.4), 0 6px 18px rgba(0, 0, 0, 0.28);
}

/* ============================================================
   Reset
   ============================================================ */

*, *::before, *::after { box-sizing: border-box; }

html { -webkit-text-size-adjust: 100%; }

body {
  margin: 0;
  background: var(--bg);
  color: var(--text);
  font-family: var(--font-body);
  font-size: var(--fs-2);
  line-height: 1.6;
  -webkit-font-smoothing: antialiased;
}

img, svg { display: block; max-width: 100%; }

a { color: inherit; text-decoration: none; }

ul { list-style: none; margin: 0; padding: 0; }

button { font: inherit; color: inherit; background: none; border: 0; cursor: pointer; }

h1, h2, h3, h4, p { margin: 0; }

h1, h2, h3, h4 { font-family: var(--font-display); }

input { font-family: var(--font-body); }

:focus-visible {
  outline: 2px solid var(--accent);
  outline-offset: 3px;
}

.wrap {
  max-width: var(--container);
  margin: 0 auto;
  padding: 0 24px;
}

@media (prefers-reduced-motion: reduce) {
  *, *::before, *::after {
    animation-duration: 0.001ms !important;
    animation-iteration-count: 1 !important;
    transition-duration: 0.001ms !important;
    scroll-behavior: auto !important;
  }
}

/* ============================================================
   Ticker — the "on air" strip
   ============================================================ */

.ticker {
  height: var(--ticker-h);
  background: var(--surface);
  border-bottom: 1px solid var(--border);
  display: flex;
  align-items: center;
  overflow: hidden;
}

.ticker__badge {
  position: relative;
  z-index: 2;
  flex: none;
  display: flex;
  align-items: center;
  gap: 7px;
  height: 100%;
  padding: 0 14px;
  background: var(--live);
  color: #fff;
  font-family: var(--font-display);
  font-size: var(--fs-1);
  font-weight: 700;
  letter-spacing: 0.06em;
  text-transform: uppercase;
}

.ticker__dot {
  width: 6px;
  height: 6px;
  border-radius: 50%;
  background: #fff;
  animation: pulse 1.6s ease-in-out infinite;
}

@keyframes pulse {
  0%, 100% { opacity: 1; }
  50% { opacity: 0.25; }
}

.ticker__track {
  display: flex;
  align-items: center;
  gap: 48px;
  white-space: nowrap;
  animation: scroll-ticker 34s linear infinite;
  padding-left: 48px;
}

.ticker:hover .ticker__track,
.ticker:focus-within .ticker__track { animation-play-state: paused; }

@keyframes scroll-ticker {
  from { transform: translateX(0); }
  to { transform: translateX(-50%); }
}

.ticker__item { font-size: var(--fs-1); color: var(--text-muted); }
.ticker__item b { color: var(--text); font-weight: 700; margin-right: 8px; }

/* ============================================================
   Header / nav / auth
   ============================================================ */

.site-header {
  min-height: var(--header-h);
  padding: 8px 0;
  display: flex;
  align-items: center;
  border-bottom: 1px solid var(--border);
  position: sticky;
  top: 0;
  background: var(--header-bg);
  backdrop-filter: blur(8px);
  z-index: 40;
}

.header__inner {
  display: flex;
  align-items: center;
  gap: 40px;
  width: 100%;
}

.logo {
  display: flex;
  flex-direction: column;
  line-height: 1;
  flex: 0 1 auto;
  min-width: 0;
  font-family: var(--font-display);
}

.logo b {
  font-size: 20px; /* wordmark: intentionally off-scale, it's a logo */
  font-weight: 700;
  letter-spacing: -0.01em;
  text-transform: uppercase;
}

.logo b em { font-style: normal; color: var(--wordmark); }

.logo span {
  font-family: var(--font-body);
  font-size: var(--fs-1);
  font-weight: 400;
  letter-spacing: 0.01em;
  color: var(--text-faint);
  margin-top: 6px;
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
  max-width: 100%;
}

.nav { display: flex; align-items: center; gap: 2px; }

.nav a {
  display: block;
  padding: 9px 12px;
  font-family: var(--font-display);
  font-size: var(--fs-1);
  font-weight: 700;
  letter-spacing: 0.02em;
  text-transform: uppercase;
  color: var(--text-muted);
  border-bottom: 2px solid transparent;
  transition: color 0.15s ease, border-color 0.15s ease;
}

.nav a:hover { color: var(--text); }

.nav a.is-active {
  color: var(--text);
  border-color: var(--nav-accent, var(--basketball));
}

.auth {
  margin-left: auto;
  display: flex;
  align-items: center;
  gap: 10px;
  flex: none;
}

.auth__login {
  font-size: var(--fs-1);
  font-weight: 700;
  color: var(--text-muted);
  padding: 8px 4px;
  transition: color 0.15s ease;
}

.auth__login:hover { color: var(--text); }

.auth__signup {
  padding: 9px 18px;
  font-family: var(--font-display);
  font-size: var(--fs-1);
  font-weight: 700;
  background: var(--text);
  color: var(--bg);
  border-radius: var(--radius);
  transition: transform 0.15s ease;
}

.auth__signup:hover { transform: translateY(-1px); }

.auth__user { display: flex; align-items: center; gap: 12px; }

.auth__hi { font-size: var(--fs-1); font-weight: 700; color: var(--text); }
.auth__hi span { color: var(--basketball); }

.auth__logout {
  font-size: var(--fs-1);
  font-weight: 700;
  letter-spacing: 0.04em;
  text-transform: uppercase;
  color: var(--text-faint);
  border: 1px solid var(--border);
  padding: 7px 12px;
  border-radius: var(--radius);
  transition: color 0.15s ease, border-color 0.15s ease;
}

.auth__logout:hover { color: var(--text); border-color: var(--text-muted); }

.theme-toggle {
  flex: none;
  width: 36px;
  height: 36px;
  display: flex;
  align-items: center;
  justify-content: center;
  border: 1px solid var(--border);
  border-radius: 50%;
  color: var(--text-muted);
  font-size: 15px;
  line-height: 1;
  transition: color 0.15s ease, border-color 0.15s ease, transform 0.15s ease;
}

.theme-toggle:hover {
  color: var(--text);
  border-color: var(--text-muted);
  transform: translateY(-1px);
}

/* sun shown in dark mode (click for light), moon in light mode */
.theme-toggle__icon::before { content: "\263E"; }
[data-theme="dark"] .theme-toggle__icon::before { content: "\2600"; }

.nav-toggle {
  display: none;
  flex-direction: column;
  gap: 4px;
  padding: 8px;
  flex: none;
}

.nav-toggle span { width: 20px; height: 2px; background: var(--text); }

@media (max-width: 860px) {
  .header__inner { gap: 16px; }
  .nav-toggle { display: flex; order: 3; }
  .auth { margin-left: auto; }

  .nav {
    position: fixed;
    top: calc(var(--header-h) + var(--ticker-h));
    left: 0;
    right: 0;
    background: var(--surface);
    border-bottom: 1px solid var(--border);
    flex-direction: column;
    align-items: stretch;
    padding: 8px 0;
    transform: translateY(-8px);
    opacity: 0;
    pointer-events: none;
    transition: transform 0.18s ease, opacity 0.18s ease;
    z-index: 30;
  }

  .nav.is-open { transform: translateY(0); opacity: 1; pointer-events: auto; }
  .nav a { padding: 14px 24px; }
}

/* The one-line tagline under the logo only shows where there's room for it */
@media (max-width: 1200px) {
  .logo span { display: none; }
}

@media (max-width: 460px) {
  .auth__login { display: none; }
}

/* ============================================================
   Buttons / flags
   ============================================================ */

.btn {
  display: inline-flex;
  align-items: center;
  gap: 8px;
  padding: 12px 22px;
  font-family: var(--font-display);
  font-size: var(--fs-1);
  font-weight: 700;
  letter-spacing: 0.03em;
  text-transform: uppercase;
  border-radius: var(--radius);
  background: var(--text);
  color: var(--bg);
  transition: transform 0.15s ease;
}

.btn:hover { transform: translateY(-1px); }

.flag {
  display: inline-flex;
  align-items: center;
  height: 21px;
  padding: 0 8px;
  font-family: var(--font-display);
  font-size: 10px; /* chip label: intentionally off-scale, decorative chip */
  font-weight: 700;
  letter-spacing: 0.07em;
  text-transform: uppercase;
  color: var(--chip-ink);
  background: var(--accent-color, var(--basketball));
  border-radius: 2px;
}

.flag--opinion {
  background: transparent;
  color: var(--live-text);
  border: 1px solid var(--live-text);
}

[data-sport="basketball"] { --accent-color: var(--basketball); }
[data-sport="baseball"] { --accent-color: var(--baseball); }
[data-sport="soccer"] { --accent-color: var(--soccer); }

/* ============================================================
   Media placeholder + photo credit
   Drop-in: replace <span class="media__ph"> with
   <img src="your-photo.jpg" alt="describe the photo">
   ============================================================ */

.media { margin: 0; }

.media__frame {
  position: relative;
  aspect-ratio: 16 / 9;
  border: 1px solid var(--border);
  border-radius: var(--radius);
  overflow: hidden;
  display: flex;
  align-items: center;
  justify-content: center;
  background:
    linear-gradient(135deg,
      color-mix(in srgb, var(--accent-color, #3a4250) 32%, var(--surface)),
      var(--surface-2));
}

.media__frame img { width: 100%; height: 100%; object-fit: cover; }

.media__ph {
  font-size: var(--fs-1);
  font-weight: 700;
  letter-spacing: 0.14em;
  text-transform: uppercase;
  color: color-mix(in srgb, var(--text) 55%, transparent);
  display: flex;
  align-items: center;
  gap: 7px;
}

.media__ph::before {
  content: "";
  width: 15px;
  height: 12px;
  border: 1.5px solid currentColor;
  border-radius: 2px;
  background:
    radial-gradient(circle at 50% 55%, currentColor 2px, transparent 2.5px);
  opacity: 0.85;
}

.media__credit {
  margin-top: 7px;
  font-size: var(--fs-1);
  letter-spacing: 0.02em;
  color: var(--text-faint);
}

/* ============================================================
   Lead story + headline rail (BBC-style top block)
   ============================================================ */

.lead { padding: 36px 0; border-bottom: 1px solid var(--border); }

.lead__grid {
  display: grid;
  grid-template-columns: 1.85fr 1fr;
  gap: 44px;
  align-items: start;
}

.lead__media .media__frame { aspect-ratio: 16 / 9; }

.lead__text { padding-top: 18px; }

.lead__text .flag { margin-bottom: 14px; }

.lead__title {
  font-size: clamp(var(--fs-5), 3.2vw, var(--fs-6));
  font-weight: 700;
  line-height: 1.12;
  letter-spacing: -0.01em;
}

.lead__title a:hover { text-decoration: underline; text-underline-offset: 4px; }

.lead__dek {
  margin-top: 12px;
  font-size: var(--fs-2);
  color: var(--text-muted);
  max-width: 60ch;
}

.lead__byline {
  margin-top: 16px;
  display: flex;
  gap: 14px;
  flex-wrap: wrap;
  font-size: var(--fs-1);
  color: var(--text-faint);
  letter-spacing: 0.02em;
}

.rail__label {
  font-family: var(--font-display);
  font-size: var(--fs-1);
  font-weight: 700;
  letter-spacing: 0.1em;
  text-transform: uppercase;
  color: var(--text);
  padding-bottom: 14px;
  border-bottom: 2px solid var(--basketball);
  margin-bottom: 4px;
}

.headline-item {
  display: block;
  padding: 16px 0;
  border-bottom: 1px solid var(--border);
}

.headline-item:hover .headline-item__title { color: var(--text); text-decoration: underline; text-underline-offset: 3px; }

.headline-item__eye {
  font-size: 10px; /* chip-scale eyebrow, matches .flag */
  font-weight: 700;
  letter-spacing: 0.1em;
  text-transform: uppercase;
  color: var(--accent-color, var(--basketball));
}

.headline-item__title {
  margin-top: 6px;
  font-family: var(--font-display);
  font-size: var(--fs-2);
  font-weight: 700;
  line-height: 1.3;
  color: var(--ink-strong);
  transition: color 0.15s ease;
}

.headline-item__meta {
  margin-top: 7px;
  font-size: var(--fs-1);
  color: var(--text-faint);
  letter-spacing: 0.02em;
}

@media (max-width: 900px) {
  .lead__grid { grid-template-columns: 1fr; gap: 32px; }
}

/* ============================================================
   Feed (Latest) — one grid of all stories
   ============================================================ */

.feed { padding: 44px 0; }

.feed__head {
  display: flex;
  align-items: baseline;
  justify-content: space-between;
  gap: 20px;
  flex-wrap: wrap;
  margin-bottom: 24px;
  padding-bottom: 14px;
  border-bottom: 1px solid var(--border);
}

.feed__title {
  font-size: var(--fs-4);
  font-weight: 700;
  letter-spacing: -0.01em;
}

.filter-tabs { display: flex; flex-wrap: wrap; gap: 4px; }

.filter-tabs button,
.filter-tabs a {
  padding: 8px 14px;
  font-family: var(--font-display);
  font-size: var(--fs-1);
  font-weight: 700;
  letter-spacing: 0.03em;
  text-transform: uppercase;
  color: var(--text-faint);
  border: 1px solid var(--border);
  border-radius: 100px;
  transition: color 0.15s ease, border-color 0.15s ease, background 0.15s ease;
}

.filter-tabs button:hover,
.filter-tabs a:hover { color: var(--text); }

.filter-tabs button.is-active,
.filter-tabs a.is-active {
  color: var(--bg);
  background: var(--text);
  border-color: var(--text);
}

.card-grid {
  display: grid;
  grid-template-columns: repeat(3, 1fr);
  gap: 24px;
}

.card-grid--2 { grid-template-columns: repeat(2, 1fr); }

.card {
  display: flex;
  flex-direction: column;
  background: var(--surface);
  border: 1px solid var(--border);
  border-top: 3px solid var(--accent-color, var(--border));
  border-radius: var(--radius);
  overflow: hidden;
  box-shadow: var(--shadow-1);
  transition: transform 0.15s ease;
}

.card:hover { transform: translateY(-3px); }

.card .media__frame { border: 0; border-radius: 0; border-bottom: 1px solid var(--border); }

.card__body { padding: 18px 20px 20px; display: flex; flex-direction: column; gap: 10px; flex: 1; }

.card__title { font-size: var(--fs-3); font-weight: 700; line-height: 1.3; }

.card__title a:hover { text-decoration: underline; text-underline-offset: 3px; }

.card__dek { font-size: var(--fs-2); color: var(--text-muted); line-height: 1.55; }

.card__meta {
  margin-top: auto;
  padding-top: 12px;
  border-top: 1px solid var(--border);
  display: flex;
  justify-content: space-between;
  font-size: var(--fs-1);
  color: var(--text-faint);
  letter-spacing: 0.02em;
}

.feed__empty {
  display: none;
  padding: 48px 0;
  text-align: center;
  color: var(--text-muted);
  font-size: var(--fs-2);
}

@media (max-width: 900px) {
  .card-grid, .card-grid--2 { grid-template-columns: 1fr 1fr; }
}

@media (max-width: 600px) {
  .card-grid, .card-grid--2 { grid-template-columns: 1fr; }
}

/* ============================================================
   Category banner (basketball / baseball / soccer pages)
   ============================================================ */

.banner {
  padding: 48px 0 34px;
  border-bottom: 1px solid var(--border);
  background: linear-gradient(180deg, color-mix(in srgb, var(--accent-color) 12%, transparent), transparent);
}

.banner__eye {
  font-size: var(--fs-1);
  font-weight: 700;
  letter-spacing: 0.14em;
  text-transform: uppercase;
  color: var(--accent-color);
  margin-bottom: 10px;
}

.banner__title {
  font-size: clamp(var(--fs-6), 5.4vw, var(--fs-7));
  font-weight: 700;
  letter-spacing: -0.02em;
  text-transform: uppercase;
  line-height: 1;
}

.banner__dek { margin-top: 12px; color: var(--text-muted); max-width: 56ch; font-size: var(--fs-2); }

.section-pad { padding: 36px 0 60px; }

/* ============================================================
   Article page
   ============================================================ */

/* The whole article reads as one centered column: headline block,
   hero, body, figures, and take meter all share the same measure. */
.article-head .wrap,
article > .wrap { max-width: 700px; }

.article-head { padding: 44px 0 30px; border-bottom: 1px solid var(--border); }

.article-head__meta-row { display: flex; align-items: center; gap: 12px; margin-bottom: 18px; }

.article-head__title {
  font-size: clamp(var(--fs-5), 4.4vw, var(--fs-6));
  font-weight: 700;
  line-height: 1.1;
  letter-spacing: -0.015em;
  max-width: 22ch;
  margin-bottom: 16px;
}

.article-head__dek { font-size: var(--fs-3); color: var(--text-muted); max-width: 56ch; margin-bottom: 22px; }

.byline { display: flex; align-items: center; gap: 14px; font-size: var(--fs-1); color: var(--text-faint); }
.byline strong { color: var(--text); font-weight: 700; }

.article-hero { padding: 32px 0 0; }

.article-hero .media__frame { aspect-ratio: 16 / 9; }

.article-body {
  padding: 36px 0 20px;
  font-size: 17px; /* body reading size: SS3 sits between fs-2 and fs-3 */
  line-height: 1.75;
}

.article-body p { margin-bottom: 22px; color: var(--ink-body); }
.article-body p:first-of-type { font-size: var(--fs-3); color: var(--text); }

.figure { margin: 34px 0; }
.figure__credit { margin-top: 8px; font-size: var(--fs-1); color: var(--text-faint); }

.pullquote {
  margin: 36px 0;
  padding: 6px 0 6px 24px;
  border-left: 3px solid var(--accent-color, var(--basketball));
  font-family: var(--font-display);
  font-size: var(--fs-4);
  font-weight: 700;
  line-height: 1.35;
}

.related { padding: 44px 0 60px; border-top: 1px solid var(--border); }

.related__title {
  font-size: var(--fs-4);
  font-weight: 700;
  letter-spacing: -0.01em;
  margin-bottom: 24px;
  padding-bottom: 14px;
  border-bottom: 2px solid var(--accent-color, var(--border));
}

/* ============================================================
   Take Meter — reader-voted heat rating for opinion pieces.
   OPTIONAL per article: delete the whole .take-vote <section>
   from any piece that shouldn't carry one (news, analysis).
   The average comes from reader votes, never the author.
   ============================================================ */

.take-vote {
  margin: 40px 0 8px;
  background: var(--surface);
  border: 1px solid var(--border);
  border-radius: var(--radius);
  box-shadow: var(--shadow-1);
  padding: 24px;
}

.take-vote__head {
  font-family: var(--font-display);
  font-size: var(--fs-3);
  font-weight: 700;
  margin-bottom: 6px;
}

.take-vote__sub {
  font-size: var(--fs-1);
  color: var(--text-muted);
  margin-bottom: 18px;
}

.take-meter { display: flex; flex-direction: column; gap: 6px; margin-bottom: 18px; }

.take-meter__row { display: flex; align-items: center; gap: 12px; }

.take-meter__label {
  font-family: var(--font-display);
  font-size: 10px;
  font-weight: 700;
  letter-spacing: 0.1em;
  text-transform: uppercase;
  color: var(--text-faint);
  flex: none;
}

.take-meter__track {
  position: relative;
  flex: 1;
  height: 8px;
  border-radius: 4px;
  background: linear-gradient(90deg, #4c6b8a, var(--live-text));
}

.take-meter__marker {
  position: absolute;
  top: 50%;
  left: var(--heat, 50%);
  width: 16px;
  height: 16px;
  border-radius: 50%;
  background: var(--bg);
  border: 3px solid var(--text);
  transform: translate(-50%, -50%);
  transition: left 0.3s ease;
}

.take-meter__reading {
  font-size: var(--fs-2);
  font-weight: 700;
  color: var(--text);
  flex: none;
  min-width: 3.5ch;
  text-align: right;
  font-variant-numeric: tabular-nums;
}

.take-vote__count { font-size: var(--fs-1); color: var(--text-faint); margin-bottom: 14px; }

.take-vote__buttons { display: flex; flex-wrap: wrap; gap: 6px; }

.take-vote__buttons button {
  min-width: 38px;
  padding: 8px 0;
  font-size: var(--fs-1);
  font-weight: 700;
  color: var(--text-muted);
  border: 1px solid var(--border);
  border-radius: var(--radius);
  transition: color 0.15s ease, border-color 0.15s ease, background 0.15s ease, transform 0.15s ease;
  font-variant-numeric: tabular-nums;
}

.take-vote__buttons button:hover {
  color: var(--text);
  border-color: var(--text-muted);
  transform: translateY(-1px);
}

.take-vote__buttons button.is-picked {
  color: var(--bg);
  background: var(--text);
  border-color: var(--text);
}

.take-vote__done {
  display: none;
  font-size: var(--fs-1);
  color: var(--soccer);
  margin-top: 12px;
}

.take-vote__done.is-visible { display: block; }

/* ============================================================
   About / masthead page
   ============================================================ */

.mast { padding: 52px 0 38px; border-bottom: 1px solid var(--border); }

.mast__title {
  font-size: clamp(var(--fs-5), 5vw, var(--fs-6));
  font-weight: 700;
  letter-spacing: -0.02em;
  text-transform: uppercase;
  margin-bottom: 18px;
}

.mast__body { max-width: 62ch; color: var(--text-muted); font-size: var(--fs-2); }
.mast__body p { margin-bottom: 16px; }

.team-grid { display: grid; grid-template-columns: repeat(3, 1fr); gap: 24px; }

.team-card {
  border: 1px solid var(--border);
  border-radius: var(--radius);
  padding: 20px;
  background: var(--surface);
  box-shadow: var(--shadow-1);
}

.team-card__role {
  font-size: 10px; /* chip-scale label, matches .flag */
  font-weight: 700;
  letter-spacing: 0.1em;
  text-transform: uppercase;
  color: var(--text-faint);
  margin-bottom: 8px;
}

.team-card__name { font-family: var(--font-display); font-size: var(--fs-3); font-weight: 700; margin-bottom: 8px; }
.team-card__bio { font-size: var(--fs-2); color: var(--text-muted); }

@media (max-width: 780px) { .team-grid { grid-template-columns: 1fr 1fr; } }
@media (max-width: 480px) { .team-grid { grid-template-columns: 1fr; } }

/* ============================================================
   Newsletter
   ============================================================ */

.newsletter {
  padding: 44px 0;
  border-top: 1px solid var(--border);
  border-bottom: 1px solid var(--border);
  background: var(--surface);
}

.newsletter__grid { display: flex; align-items: center; justify-content: space-between; gap: 32px; flex-wrap: wrap; }

.newsletter__title { font-family: var(--font-display); font-size: var(--fs-4); font-weight: 700; letter-spacing: -0.01em; margin-bottom: 6px; }
.newsletter__body { color: var(--text-muted); font-size: var(--fs-2); }

.newsletter__form { display: flex; gap: 10px; flex: none; }

.newsletter__form input {
  width: 260px;
  padding: 12px 14px;
  background: var(--bg);
  border: 1px solid var(--border);
  border-radius: var(--radius);
  color: var(--text);
  font-size: var(--fs-2);
}

.newsletter__form input::placeholder { color: var(--text-faint); }

@media (max-width: 620px) {
  .newsletter__form { width: 100%; }
  .newsletter__form input { width: 100%; }
}

/* ============================================================
   Footer
   ============================================================ */

.site-footer { padding: 44px 0 32px; }

.site-footer__grid { display: flex; justify-content: space-between; align-items: flex-start; gap: 32px; flex-wrap: wrap; margin-bottom: 28px; }

.site-footer__brand { max-width: 34ch; }

.site-footer__cols { display: flex; gap: 56px; }

.site-footer__col h4 {
  font-size: var(--fs-1);
  font-weight: 700;
  letter-spacing: 0.1em;
  text-transform: uppercase;
  color: var(--text-faint);
  margin-bottom: 12px;
}

.site-footer__col li { margin-bottom: 8px; }
.site-footer__col a { font-size: var(--fs-2); color: var(--text-muted); }
.site-footer__col a:hover { color: var(--text); }

.site-footer__bottom {
  padding-top: 20px;
  border-top: 1px solid var(--border);
  display: flex;
  justify-content: space-between;
  font-size: var(--fs-1);
  color: var(--text-faint);
  flex-wrap: wrap;
  gap: 8px;
  letter-spacing: 0.02em;
}

@media (max-width: 620px) { .site-footer__cols { gap: 32px; flex-wrap: wrap; } }

/* ============================================================
   404
   ============================================================ */

.notfound {
  padding: 96px 0;
  text-align: left;
}

.notfound__code {
  font-family: var(--font-display);
  font-size: clamp(var(--fs-6), 10vw, 128px);
  font-weight: 700;
  line-height: 1;
  color: var(--basketball);
  margin-bottom: 12px;
}

.notfound__title { font-size: var(--fs-4); font-weight: 700; margin-bottom: 10px; }

.notfound__body { color: var(--text-muted); font-size: var(--fs-2); max-width: 48ch; margin-bottom: 28px; }

.notfound__actions { display: flex; gap: 12px; flex-wrap: wrap; }

/* ============================================================
   Auth modal (login / sign up)
   ============================================================ */

.modal {
  position: fixed;
  inset: 0;
  z-index: 100;
  display: none;
  align-items: center;
  justify-content: center;
  padding: 20px;
}

.modal.is-open { display: flex; }

.modal__backdrop { position: absolute; inset: 0; background: rgba(4, 6, 9, 0.72); backdrop-filter: blur(4px); }

.modal__dialog {
  position: relative;
  z-index: 1;
  width: 100%;
  max-width: 430px;
  background: var(--surface);
  border: 1px solid var(--border);
  border-radius: 10px;
  padding: 34px 32px 30px;
  box-shadow: 0 24px 60px rgba(0, 0, 0, 0.5);
}

.modal__close {
  position: absolute;
  top: 14px;
  right: 14px;
  width: 32px;
  height: 32px;
  display: flex;
  align-items: center;
  justify-content: center;
  border-radius: var(--radius);
  color: var(--text-muted);
  font-size: 20px;
  line-height: 1;
}

.modal__close:hover { color: var(--text); background: var(--surface-2); }

.modal__brand {
  font-family: var(--font-display);
  font-size: 10px;
  font-weight: 700;
  letter-spacing: 0.18em;
  text-transform: uppercase;
  color: var(--basketball);
  margin-bottom: 10px;
}

.modal__title { font-family: var(--font-display); font-size: var(--fs-4); font-weight: 700; letter-spacing: -0.01em; margin-bottom: 6px; }
.modal__sub { color: var(--text-muted); font-size: var(--fs-2); margin-bottom: 22px; }

.field { margin-bottom: 14px; }

.field label {
  display: block;
  font-size: var(--fs-1);
  font-weight: 700;
  letter-spacing: 0.08em;
  text-transform: uppercase;
  color: var(--text-faint);
  margin-bottom: 6px;
}

.field input {
  width: 100%;
  padding: 12px 14px;
  background: var(--bg);
  border: 1px solid var(--border);
  border-radius: var(--radius);
  color: var(--text);
  font-size: var(--fs-2);
}

.field input::placeholder { color: var(--text-faint); }
.field input:focus-visible { border-color: var(--accent); outline: none; }

.modal__error {
  display: none;
  color: var(--live-text);
  font-size: var(--fs-1);
  margin-bottom: 12px;
}

.modal__error.is-visible { display: block; }

.modal__note {
  display: none;
  color: var(--soccer);
  font-size: var(--fs-1);
  margin-bottom: 12px;
}

.modal__note.is-visible { display: block; }

.modal__submit { width: 100%; justify-content: center; margin-top: 6px; }

.modal__switch { margin-top: 18px; text-align: center; font-size: var(--fs-2); color: var(--text-muted); }
.modal__switch button { color: var(--basketball); font-weight: 700; text-decoration: underline; text-underline-offset: 2px; }

.modal__disclaimer {
  margin-top: 16px;
  padding-top: 14px;
  border-top: 1px solid var(--border);
  font-size: var(--fs-1);
  color: var(--text-faint);
  line-height: 1.5;
}

/* ============================================================
   Admin dashboard (admin.html) — owner-only article manager.
   Uses the same tokens, so it themes light/dark automatically.
   ============================================================ */

.admin { padding: 44px 0 72px; }

.admin__bar {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 16px;
  flex-wrap: wrap;
  margin-bottom: 28px;
  padding-bottom: 16px;
  border-bottom: 1px solid var(--border);
}

.admin__title { font-size: var(--fs-5); font-weight: 700; letter-spacing: -0.01em; }
.admin__who { font-size: var(--fs-1); color: var(--text-muted); }
.admin__who b { color: var(--text); font-weight: 700; }

.admin__panel {
  max-width: 640px;
  margin: 0 auto;
  background: var(--surface);
  border: 1px solid var(--border);
  border-radius: 8px;
  box-shadow: var(--shadow-1);
  padding: 32px;
}

.admin__panel--center { text-align: center; }

.admin__lede { color: var(--text-muted); font-size: var(--fs-2); margin: 8px 0 22px; }

.admin__status {
  display: none;
  margin: 0 0 18px;
  padding: 12px 14px;
  border-radius: var(--radius);
  font-size: var(--fs-1);
  border: 1px solid var(--border);
}
.admin__status.is-error { display: block; color: var(--live-text); border-color: var(--live-text); }
.admin__status.is-ok { display: block; color: var(--soccer); border-color: var(--soccer); }

.admin__layout { display: grid; grid-template-columns: 300px 1fr; gap: 28px; align-items: start; }

.admin__list { display: flex; flex-direction: column; gap: 8px; }

.admin__list h3 {
  font-family: var(--font-display);
  font-size: var(--fs-1);
  letter-spacing: 0.1em;
  text-transform: uppercase;
  color: var(--text-faint);
  margin-bottom: 4px;
}

.admin__item {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 8px;
  padding: 10px 12px;
  background: var(--surface);
  border: 1px solid var(--border);
  border-left: 3px solid var(--accent-color, var(--border));
  border-radius: var(--radius);
}

.admin__item-title { font-size: var(--fs-1); font-weight: 700; line-height: 1.3; }
.admin__item-meta { font-size: 11px; color: var(--text-faint); margin-top: 2px; }
.admin__item-actions { display: flex; gap: 6px; flex: none; }

.admin__mini {
  font-size: 11px;
  font-weight: 700;
  letter-spacing: 0.04em;
  text-transform: uppercase;
  padding: 5px 9px;
  border: 1px solid var(--border);
  border-radius: var(--radius);
  color: var(--text-muted);
}
.admin__mini:hover { color: var(--text); border-color: var(--text-muted); }
.admin__mini--danger:hover { color: var(--live-text); border-color: var(--live-text); }

.admin__form { display: flex; flex-direction: column; gap: 14px; }

.admin__row { display: grid; grid-template-columns: 1fr 1fr; gap: 14px; }

.admin__field label {
  display: block;
  font-size: 11px;
  font-weight: 700;
  letter-spacing: 0.08em;
  text-transform: uppercase;
  color: var(--text-faint);
  margin-bottom: 6px;
}

.admin__field input,
.admin__field select,
.admin__field textarea {
  width: 100%;
  padding: 11px 13px;
  background: var(--bg);
  border: 1px solid var(--border);
  border-radius: var(--radius);
  color: var(--text);
  font-size: var(--fs-2);
  font-family: var(--font-body);
}

.admin__field textarea { min-height: 200px; resize: vertical; line-height: 1.6; }
.admin__field input:focus-visible,
.admin__field select:focus-visible,
.admin__field textarea:focus-visible { border-color: var(--accent); outline: none; }

.admin__hint { font-size: 11px; color: var(--text-faint); margin-top: 5px; }

.admin__checks { display: flex; gap: 24px; flex-wrap: wrap; }
.admin__check { display: flex; align-items: center; gap: 8px; font-size: var(--fs-2); color: var(--text); }
.admin__check input { width: auto; }

.admin__actions { display: flex; gap: 10px; flex-wrap: wrap; margin-top: 6px; }

.btn--ghost {
  background: transparent;
  color: var(--text);
  border: 1px solid var(--border);
}
.btn--ghost:hover { border-color: var(--text-muted); }

@media (max-width: 760px) {
  .admin__layout { grid-template-columns: 1fr; }
  .admin__row { grid-template-columns: 1fr; }
}

/* ============================================================
   Banner sub-navigation (e.g. Soccer → World Cup)
   ============================================================ */

.banner__nav { display: flex; flex-wrap: wrap; gap: 20px; margin-top: 18px; }

.banner__nav a {
  font-family: var(--font-display);
  font-size: var(--fs-1);
  font-weight: 700;
  letter-spacing: 0.04em;
  text-transform: uppercase;
  color: var(--text-muted);
  padding-bottom: 5px;
  border-bottom: 2px solid transparent;
  transition: color 0.15s ease, border-color 0.15s ease;
}

.banner__nav a:hover { color: var(--text); }
.banner__nav a.is-active { color: var(--text); border-color: var(--accent-color, var(--soccer)); }
