/* ==========================================================================
   Goat Debate — liquid glass, gold-on-gold.
   Premium, human, "fun serious about being fun". A single translucent
   material system (blur+saturate, inner-highlight border, soft depth
   shadow, glossy sheen) over a fixed embossed-gold portrait, with a
   restrained animated iridescent ring reserved for the highest-polish
   surfaces. Fonts loaded in App.razor <head>: Fraunces (display/serif,
   the "GOAT" swagger) + Inter (UI sans, tabular numerals for money).
   Only transform/opacity (+ occasional filter, masked gradients) animate.
   No build step. Mobile-first; dark mode via html[data-theme="dark"].
   ========================================================================== */

:root {
  --row-h: 58px;

  /* palette — light ---------------------------------------------------- */
  --gold-100: #fdf0c8;
  --gold-300: #f4d97e;
  --gold-500: #d9ac33;
  --gold-600: #b98c21;
  --gold-700: #8a6316;
  --accent: #9c2145;
  --accent-soft: rgba(156, 33, 69, 0.12);
  --good: #1c9d63;
  --good-soft: rgba(28, 157, 99, 0.16);
  --bad: #c0392b;
  --bad-soft: rgba(192, 57, 43, 0.14);

  --ink: #241c0b;
  --ink-soft: #4d4227;
  --ink-mute: rgba(36, 28, 11, 0.72);
  --ink-faint: rgba(36, 28, 11, 0.52);
  --on-gold: #34260a;

  /* glass — light -------------------------------------------------------- */
  --glass: rgba(255, 255, 255, 0.68);
  --glass-strong: rgba(255, 255, 255, 0.87);
  --glass-soft: rgba(255, 255, 255, 0.5);
  --glass-border: rgba(255, 255, 255, 0.78);
  --glass-sheen: rgba(255, 255, 255, 0.9);
  --glass-blur: blur(22px) saturate(1.6);
  --scrim: rgba(18, 14, 6, 0.3);
  --scrim-mid: rgba(18, 14, 6, 0.13);

  /* iridescent ring -------------------------------------------------------- */
  --iris-a: rgba(244, 217, 126, 0.95);
  --iris-b: rgba(190, 222, 255, 0.6);
  --iris-c: rgba(255, 205, 226, 0.62);
  --iris-d: rgba(217, 172, 51, 0.95);
  --border-angle: 0deg;

  /* shape / shadow / motion ------------------------------------------------ */
  --radius: 24px;
  --radius-md: 18px;
  --radius-sm: 13px;
  --radius-pill: 999px;
  --shadow-soft: 0 10px 32px rgba(20, 16, 8, 0.14);
  --shadow-lift: 0 20px 54px rgba(20, 16, 8, 0.22);
  --shadow-gold: 0 12px 30px rgba(185, 140, 33, 0.4);
  --ease-spring: cubic-bezier(0.22, 1.26, 0.34, 1);
  --ease-out: cubic-bezier(0.23, 1, 0.32, 1);
  --ease-in-out: cubic-bezier(0.77, 0, 0.175, 1);

  /* type -------------------------------------------------------------------- */
  --font-display: "Fraunces", ui-serif, Georgia, "Times New Roman", serif;
  --font-body: "Inter", system-ui, -apple-system, "Segoe UI", sans-serif;
  /* institutional grotesk — leaderboard names/meta/tabs/action bar only, shares
     a foundry with the mono numerals for a calm, official register. */
  --font-institutional: "IBM Plex Sans", "Inter", system-ui, -apple-system, "Segoe UI", sans-serif;
  --font-mono: "IBM Plex Mono", "SFMono-Regular", ui-monospace, Menlo, Consolas, monospace;

  /* 8px grid ------------------------------------------------------------- */
  --sp-1: 4px; --sp-2: 8px; --sp-3: 12px; --sp-4: 16px; --sp-5: 20px;
  --sp-6: 24px; --sp-8: 32px; --sp-10: 40px; --sp-12: 48px; --sp-16: 64px;
}
@media (max-width: 640px) { :root { --row-h: 72px; } }

html[data-theme="dark"] {
  --ink: #f3ecdb;
  --ink-soft: rgba(243, 236, 219, 0.84);
  --ink-mute: rgba(243, 236, 219, 0.62);
  --ink-faint: rgba(243, 236, 219, 0.4);

  --glass: rgba(24, 19, 12, 0.46);
  --glass-strong: rgba(24, 19, 12, 0.68);
  --glass-soft: rgba(24, 19, 12, 0.3);
  --glass-border: rgba(255, 255, 255, 0.14);
  --glass-sheen: rgba(255, 255, 255, 0.16);
  --scrim: rgba(0, 0, 0, 0.38);
  --scrim-mid: rgba(0, 0, 0, 0.2);

  --iris-a: rgba(244, 217, 126, 0.85);
  --iris-b: rgba(140, 190, 255, 0.42);
  --iris-c: rgba(255, 176, 210, 0.4);
  --iris-d: rgba(217, 172, 51, 0.85);

  --shadow-soft: 0 12px 34px rgba(0, 0, 0, 0.45);
  --shadow-lift: 0 22px 58px rgba(0, 0, 0, 0.55);
  --shadow-gold: 0 12px 30px rgba(0, 0, 0, 0.5);
  color-scheme: dark;
}
html[data-theme="dark"] body { background: #171009; }

@property --border-angle { syntax: "<angle>"; inherits: false; initial-value: 0deg; }

/* ==========================================================================
   Reset & base
   ========================================================================== */
* { box-sizing: border-box; }
html, body { margin: 0; min-height: 100%; }
html.no-scroll { overflow: hidden; }
html, body { overflow-x: clip; }
body { touch-action: pan-y; }
html { scroll-behavior: smooth; }

body {
  font-family: var(--font-body);
  color: var(--ink);
  background: var(--gold-100);
  -webkit-font-smoothing: antialiased;
  /* fallback if .bg's image is slow/unavailable — .bg (fixed) covers this during normal use */
  text-rendering: optimizeLegibility;
  font-variant-numeric: tabular-nums;
  overflow-x: hidden;
  transition: color 260ms var(--ease-out);
}
a { color: inherit; }
h1, h2, h3, h4 { font-family: var(--font-display); }
::selection { background: var(--gold-300); color: var(--on-gold); }

:focus-visible { outline: 2px solid var(--gold-600); outline-offset: 2px; border-radius: 6px; }

.page { position: relative; display: flex; flex-direction: column; min-height: 100vh; z-index: 1; }
.page__main { flex: 1; }

/* ==========================================================================
   Background — fixed portrait, vignette, slow sheen + light blobs.
   `.bg` is the first child of body (MainLayout). Transform/opacity only.
   ========================================================================== */
.bg {
  position: fixed; inset: 0; z-index: 0; overflow: hidden; pointer-events: none;
  background-color: var(--gold-100);
  background-image: url("/img/bg-gold.jpg");
  background-image: image-set(url("/img/bg-gold.webp") type("image/webp") 1x, url("/img/bg-gold.jpg") type("image/jpeg") 1x);
  background-size: cover; background-position: center 32%; background-repeat: no-repeat;
  filter: saturate(1) brightness(1);
  transition: filter 320ms var(--ease-out);
}
@media (max-width: 640px) {
  .bg {
    background-image:
      url("/img/bg-gold.jpg"),
      linear-gradient(180deg, var(--gold-100) 0%, var(--gold-300) 55%, var(--gold-500) 100%);
    background-image:
      image-set(url("/img/bg-gold-1000.webp") type("image/webp") 1x, url("/img/bg-gold.jpg") type("image/jpeg") 1x),
      linear-gradient(180deg, var(--gold-100) 0%, var(--gold-300) 55%, var(--gold-500) 100%);
    background-size: auto 110vh, cover;
    background-position: center top, center;
    background-repeat: no-repeat, no-repeat;
  }
}
html[data-theme="dark"] .bg { filter: saturate(0.72) brightness(0.46); }

.bg__vignette {
  position: absolute; inset: 0;
  background:
    linear-gradient(180deg, var(--scrim) 0%, var(--scrim-mid) 18%, var(--scrim-mid) 70%, var(--scrim) 100%),
    radial-gradient(120% 90% at 50% 8%, transparent 30%, var(--scrim) 100%);
}
@media (max-width: 640px) {
  .bg__vignette {
    background:
      linear-gradient(180deg, var(--scrim) 0%, var(--scrim-mid) 16%, rgba(18, 14, 6, 0.42) 46%, rgba(18, 14, 6, 0.56) 78%, rgba(18, 14, 6, 0.68) 100%),
      radial-gradient(120% 90% at 50% 8%, transparent 30%, var(--scrim) 100%);
  }
}
.bg__sheen {
  /* static gloss band parked mid-viewport — its old sweep animation is gone,
     so it now needs to rest somewhere visible rather than at the sweep's
     off-canvas starting mark (translateX(-30vw), fully offscreen). */
  position: absolute; top: -30%; left: -35%; width: 70%; height: 160%;
  background: linear-gradient(102deg, transparent 42%, rgba(255, 250, 230, 0.5) 50%, transparent 58%);
  filter: blur(18px);
  transform: translateX(38vw) rotate(9deg);
}
html[data-theme="dark"] .bg__sheen { background: linear-gradient(102deg, transparent 42%, rgba(255, 235, 190, 0.22) 50%, transparent 58%); }

.bg__blob { position: absolute; border-radius: 50%; filter: blur(70px); will-change: transform, opacity; }
.bg__blob--a { width: 48vmax; height: 48vmax; top: -20vmax; right: -16vmax; background: radial-gradient(circle at 35% 35%, rgba(253, 231, 158, 0.55), transparent 70%);  }
.bg__blob--b { width: 36vmax; height: 36vmax; bottom: -16vmax; left: -12vmax; background: radial-gradient(circle at 40% 40%, rgba(255, 255, 255, 0.32), transparent 70%);  }
html[data-theme="dark"] .bg__blob--a { background: radial-gradient(circle at 35% 35%, rgba(217, 172, 51, 0.28), transparent 70%); }
html[data-theme="dark"] .bg__blob--b { background: radial-gradient(circle at 40% 40%, rgba(255, 255, 255, 0.08), transparent 70%); }
@keyframes drift-a { from { transform: translate(0, 0) scale(1); opacity: 0.8; } to { transform: translate(-4%, 3%) scale(1.08); opacity: 1; } }
@keyframes drift-b { from { transform: translate(0, 0) scale(1); opacity: 0.7; } to { transform: translate(3%, -4%) scale(1.05); opacity: 0.95; } }

/* ==========================================================================
   Glass material + iridescent ring system
   ========================================================================== */
.glass {
  background: var(--glass);
  border: 1px solid var(--glass-border);
  backdrop-filter: var(--glass-blur);
  -webkit-backdrop-filter: var(--glass-blur);
  border-radius: var(--radius);
  box-shadow: var(--shadow-soft), inset 0 1px 0 var(--glass-sheen);
}

/* Reusable rotating conic-gradient ring, masked to a thin band, no clipping
   issues on scrollable/overflow surfaces (ring sits flush inside inset:0). */
.row--first, .modal, .action, .btn--gold, .earnings__amount { position: relative; isolation: isolate; }
.row--first::after, .modal::after, .action::after, .btn--gold::after, .earnings__amount::after {
  content: ""; position: absolute; inset: 0; z-index: 2; border-radius: inherit;
  padding: 1.5px;
  background: conic-gradient(from var(--border-angle), var(--iris-a), var(--iris-c), var(--iris-b), var(--iris-d), var(--iris-a));
  -webkit-mask: linear-gradient(#000 0 0) content-box, linear-gradient(#000 0 0);
  -webkit-mask-composite: xor; mask-composite: exclude;
  pointer-events: none;
}
@keyframes iris-spin { to { --border-angle: 360deg; } }

.row--first::after { opacity: 0.9; }  /* static ring — continuous conic repaint was a per-frame CPU tax */
.modal::after { padding: 2px; opacity: 0.85; }
.action::after { opacity: 0; transition: opacity 260ms var(--ease-out); animation: iris-spin 8s linear infinite; animation-play-state: paused; }
.action:focus-within::after { opacity: 1; animation-play-state: running; }
.btn--gold::after { opacity: 0; transition: opacity 220ms var(--ease-out); animation: iris-spin 5s linear infinite; animation-play-state: paused; }
.btn--gold:hover::after, .btn--gold:focus-visible::after { opacity: 0.9; animation-play-state: running; }
.earnings__amount::after { opacity: 0.5; }

/* ==========================================================================
   Top bar
   ========================================================================== */
.topbar {
  position: sticky; top: 0; z-index: 20;
  background: color-mix(in srgb, var(--glass) 72%, transparent);
  backdrop-filter: var(--glass-blur); -webkit-backdrop-filter: var(--glass-blur);
  border-bottom: 1px solid var(--glass-border);
  box-shadow: 0 1px 0 var(--glass-sheen) inset, 0 8px 24px rgba(20, 16, 8, 0.06);
}
.topbar__inner { max-width: 1180px; margin: 0 auto; padding: 12px 20px; display: flex; align-items: center; justify-content: space-between; gap: 16px; }
.topbar__left { display: flex; align-items: center; gap: 18px; min-width: 0; }
.brand { display: flex; align-items: center; gap: 13px; text-decoration: none; flex: none; }
.brand__statue { display: block; width: 20px; height: 32px; object-fit: contain; flex: none; filter: drop-shadow(0 3px 6px rgba(185, 140, 33, 0.4)); }
.brand__icon { display: block; width: 28px; height: 28px; border-radius: 7px; flex: none; box-shadow: 0 2px 6px rgba(20, 16, 8, 0.3); }
.feature-btn {
  border: 1px solid var(--glass-border); background: var(--glass-soft); color: var(--ink-soft); cursor: pointer;
  font-family: var(--font-institutional); font-weight: 600; font-size: 12px; padding: 6px 12px; border-radius: var(--radius-pill);
  transition: background 180ms var(--ease-out), color 180ms var(--ease-out);
  white-space: nowrap;
}
.feature-btn:hover { background: var(--glass-strong); color: var(--ink); }
@media (max-width: 900px) { .feature-btn { display: none; } }
.feature-input, .feature-contact {
  width: 100%; border: 1px solid var(--glass-border); background: var(--glass-soft); color: var(--ink);
  font-family: var(--font-institutional); font-size: 14px; border-radius: 12px; padding: 10px 12px; resize: vertical;
}
.feature-input:focus, .feature-contact:focus { outline: 2px solid var(--gold-500); outline-offset: 1px; }
.robot--privacy { background: var(--glass-soft); color: var(--ink-soft); }
.robot__fade { animation: robot-fade 500ms var(--ease-out); }
@keyframes robot-fade { from { opacity: 0; transform: translateY(3px); } }
.brand__text { display: flex; flex-direction: column; line-height: 1.3; gap: 3px; min-width: 0; }
.brand__tag { font-family: var(--font-institutional); font-weight: 600; font-size: 9.5px; letter-spacing: 0.04em; color: var(--ink-mute); white-space: nowrap; }
@media (max-width: 760px) { .brand__tag { display: none; } }
.brand__mark { display: block; width: 26px; height: 26px; flex: none; filter: drop-shadow(0 3px 6px rgba(185, 140, 33, 0.35)); }
.brand__name { font-family: var(--font-display); font-weight: 600; font-size: 18px; letter-spacing: -0.025em; color: var(--ink); white-space: nowrap; }

.seg { display: flex; gap: 2px; padding: 3px; border-radius: var(--radius-pill); background: var(--glass-soft); border: 1px solid var(--glass-border); }
.seg__btn {
  border: 0; background: transparent; color: var(--ink-mute); cursor: pointer;
  font-family: var(--font-body); font-weight: 700; font-size: 12.5px; letter-spacing: 0.01em;
  padding: 7px 13px; border-radius: var(--radius-pill); white-space: nowrap;
  transition: background 220ms var(--ease-out), color 220ms var(--ease-out), box-shadow 220ms var(--ease-out), transform 140ms var(--ease-out);
}
.seg__btn:hover { color: var(--ink); }
.seg__btn:active { transform: scale(0.96); }
.seg__btn--active { background: linear-gradient(180deg, var(--gold-300), var(--gold-500)); color: var(--on-gold); box-shadow: 0 4px 12px rgba(185, 140, 33, 0.35), inset 0 1px 0 rgba(255, 255, 255, 0.7); }

.topbar__nav { display: flex; align-items: center; gap: 22px; }
.topbar__nav a { text-decoration: none; font-weight: 600; font-size: 14px; color: var(--ink-soft); transition: color 180ms var(--ease-out); }
.topbar__nav a:hover { color: var(--ink); }
.iconbtn {
  display: grid; place-items: center; width: 36px; height: 36px; border-radius: 50%; border: 1px solid var(--glass-border);
  background: var(--glass-soft); cursor: pointer; font-size: 15px; line-height: 1;
  transition: transform 200ms var(--ease-spring), background 200ms var(--ease-out);
}
.iconbtn:hover { background: rgba(255, 255, 255, 0.5); }
.iconbtn:active { transform: scale(0.9) rotate(-12deg); }
@media (max-width: 720px) { .topbar__nav a:not(.iconbtn) { display: none; } }
@media (max-width: 460px) { .brand__name { display: none; } .seg__btn { padding: 7px 10px; } }

/* ==========================================================================
   Hero — a statement again, but still disciplined: stats pill + H1 + subtext
   must clear comfortably within the first viewport at 1440×900 so the board
   starts with a few rows visible. `.hero` isolates its own stacking context
   so `.hero__statue` (position:absolute, z-index:1) can paint above the
   hero's own copy while still losing to `.board-section` (next sibling,
   painted after `.hero` as a whole) — that's how the statue ends up
   genuinely *behind* the board/feed glass where it dips under them.
   ========================================================================== */
.hero { position: relative; isolation: isolate; padding: clamp(17px, 3.1vh, 31px) 20px clamp(12px, 2.4vh, 22px); }
.hero__inner { max-width: 1040px; margin: 0 auto; display: flex; flex-direction: column; align-items: center; text-align: center; gap: 14px; }
.hero__copy { display: flex; flex-direction: column; gap: 10px; max-width: 640px; }

/* ≥1100px the page becomes board-column + 312px live-tips rail
   (.board-layout). Mirror that exact two-column shape here — a real
   312px phantom column, not a guessed transform offset — so the hero
   copy's centering axis lands on .board-col's axis instead of the
   viewport's. Both .hero__inner and .board-layout's content box are
   symmetric-padding-centered on the viewport, so matching the column
   math is enough; no extra offset math needed. Mobile is untouched. */
@media (min-width: 1100px) {
  .hero__inner {
    max-width: 1148px;
    display: grid; grid-template-columns: minmax(0, 1fr) 312px;
    row-gap: 14px; column-gap: 22px; align-items: start;
  }
  .hero__inner > * { grid-column: 1; justify-self: center; }
}

/* Statue — taken out of flow entirely: bigger, floated top-right, dipping
   below the hero's own box so its lower half sits behind the board/feed
   glass that follows in the DOM (their backdrop-filter frosts right over
   it). Never intercepts clicks. Hidden below 900px — no room to breathe. */
.hero__statue {
  display: none;
  pointer-events: none;
}
@media (min-width: 901px) {
  .hero__statue {
    display: flex; flex-direction: column; align-items: center;
    position: absolute; z-index: 1; right: clamp(174px, calc(8vw + 150px), 278px);
    bottom: -148px;
    justify-content: flex-end;
  }
}
.hero__statue::before {
  content: ""; position: absolute; left: 50%; top: 40%; width: 250%; height: 190%;
  transform: translate(-50%, -50%); z-index: -1;
  background: radial-gradient(closest-side, rgba(253, 231, 158, 0.6), transparent 72%);
  filter: blur(6px);
}
html[data-theme="dark"] .hero__statue::before { background: radial-gradient(closest-side, rgba(217, 172, 51, 0.3), transparent 72%); }
.hero__statue-img {
  display: block; width: auto; height: clamp(368px, 30vw, 483px);
  filter: drop-shadow(0 20px 26px rgba(20, 16, 8, 0.34));
}
.hero__statue-shadow {
  display: block; width: 58%; height: 14px; margin-top: 2px; border-radius: 50%;
  background: radial-gradient(closest-side, rgba(20, 16, 8, 0.4), transparent 75%);
  filter: blur(2px);

}
@keyframes statue-float { 0%, 100% { transform: translateY(0); } 50% { transform: translateY(-7px); } }
@keyframes statue-shadow-pulse { 0%, 100% { transform: scaleX(1); opacity: 0.6; } 50% { transform: scaleX(0.86); opacity: 0.4; } }

.stats-pill {
  display: inline-flex; align-items: center; gap: 8px; max-width: 100%;
  padding: 8px 16px; border-radius: var(--radius-pill); text-decoration: none; color: var(--ink-soft);
  font-size: 12.5px; font-weight: 600; white-space: nowrap; overflow-x: auto; scrollbar-width: none;
  background: var(--glass-strong); border: 1px solid var(--glass-border);
  backdrop-filter: var(--glass-blur); -webkit-backdrop-filter: var(--glass-blur);
  box-shadow: var(--shadow-soft), inset 0 1px 0 var(--glass-sheen);
  transition: transform 200ms var(--ease-out), box-shadow 200ms var(--ease-out), background 200ms var(--ease-out);
}
.stats-pill::-webkit-scrollbar { display: none; }
.stats-pill:hover { transform: translateY(-1px); box-shadow: var(--shadow-lift), inset 0 1px 0 var(--glass-sheen); }
@media (max-width: 640px) {
  .stats-pill {
    flex-wrap: wrap; justify-content: center; row-gap: 5px; column-gap: 7px;
    white-space: normal; overflow-x: visible; text-align: center;
    max-width: calc(100vw - 40px); padding: 9px 16px; font-size: 11.5px;
  }
  .stats-pill__tips { flex-basis: 100%; }
  .stats-pill__sep--2 { display: none; }
}
.stats-pill__dot { flex: none; width: 7px; height: 7px; border-radius: 50%; background: var(--good); box-shadow: 0 0 0 3px var(--good-soft); animation: live-pulse 2.2s var(--ease-in-out) infinite; }
@keyframes live-pulse { 0%, 100% { transform: scale(1); opacity: 1; } 50% { transform: scale(1.4); opacity: 0.6; } }
.stats-pill__online, .stats-pill__visitors, .stats-pill__tips { font-family: var(--font-mono); letter-spacing: -0.01em; }
.stats-pill__online { color: var(--ink); font-weight: 600; }
.stats-pill__sep { color: var(--ink-faint); font-family: var(--font-body); }
.stats-pill__link { color: var(--gold-700); font-weight: 700; }
html[data-theme="dark"] .stats-pill__link { color: var(--gold-300); }

.hero__title {
  font-weight: 600; font-optical-sizing: auto;
  font-size: clamp(34px, 4.1vw, 50px); letter-spacing: -0.02em; line-height: 1.14;
  margin: 0; color: var(--ink); max-width: 23ch;
}
.hero__goat {
  font-style: italic; font-weight: 600; white-space: nowrap;
  padding-inline: 0.06em; margin-inline: -0.06em;
  background:
    linear-gradient(105deg, transparent 44%, rgba(255, 248, 214, 0.95) 50%, transparent 56%),
    /* White-gold ramp: the anchor stops (0/74/100%) are deliberately desaturated and
       lightened from a saturated yellow-gold (hsl ~43°,73%,61% / ~40°,79%,65%) toward
       a pale warm champagne (hsl ~46°,58%,78% / ~44°,63%,83%) — same warm hue family
       as the near-white mid-ramp stops, just a shade less pale, so the whole fill reads
       as crisp pale metal rather than saturated brass. Shimmer sweep above is untouched. */
    linear-gradient(105deg, #e8d9a8 0%, #fdeeb0 30%, #fff6d8 50%, #efe0b8 74%, #e8d9a8 100%);
  background-size: 300% 100%, 220% 100%;
  background-position: -160% 0, 0 0;
  animation: goat-glint 7s linear infinite;   /* value only changes in the last second — no repaint the rest of the cycle */
  -webkit-background-clip: text; background-clip: text; -webkit-text-fill-color: transparent;
  /* ONE crisp contour + one soft ambient glow — not a stack of them. Several near-zero-offset
     shadow layers on a thin clipped-text glyph don't outline it, they sit almost directly on
     top of it and their opacity compounds, smothering the pale fill into a muddy blur. */
  text-shadow: 0 1.5px 1.5px rgba(52, 38, 10, 0.65);
  filter: drop-shadow(0 3px 5px rgba(185, 140, 33, 0.45));
  /* static gradient — repainting clipped H1 text every frame is not worth it */
}
@keyframes goat-glint { 0%, 92% { background-position: -160% 0, 0 0; } 100% { background-position: 260% 0, 0 0; } }
html[data-theme="dark"] .hero__goat {
  /* same bright champagne ramp as the hover pill — the fill must never go muddy in dark mode */
  background-image:
    linear-gradient(105deg, transparent 44%, rgba(255, 250, 224, 0.95) 50%, transparent 56%),
    linear-gradient(105deg, #e8bd4e 0%, #fdeeb0 40%, #fff6d8 55%, #ecc75e 76%, #e8bd4e 100%);
  text-shadow:
    0 1px 0 rgba(18, 12, 4, 0.3),
    0 8px 22px rgba(0, 0, 0, 0.28),
    0 -1px 0 rgba(255, 244, 208, 0.38);
}
@keyframes goat-shine { 0%, 100% { background-position: 0% 50%; } 50% { background-position: 100% 50%; } }
.hero__once { display: inline-block; white-space: nowrap; }
.hero__ellipsis { font-style: italic; color: var(--ink-mute); }
.hero__sub-line { display: block; font-family: var(--font-institutional); }
.hero__sub-line--argue { font-weight: 460; font-size: 0.98em; color: var(--ink-soft); margin-bottom: 5px; }
.hero__sub-line--dare { font-weight: 520; font-size: 1.08em; color: var(--ink); margin-bottom: 5px; }
.hero__sub-line--dare em { font-style: normal; color: var(--gold-700); font-weight: 650; }

html[data-theme="dark"] .hero__sub-line--dare em { color: var(--gold-300); }

.hero__sub { font-size: clamp(16px, 1.6vw, 18.5px); line-height: 1.5; color: var(--ink-soft); margin: 0; max-width: 54ch; }

/* action row — lives inside .board.glass, above .tabs: flat toolbar, not a
   second floating glass card (avoids double-blur mud), but z-index-raised
   so its .suggest dropdown always overlays the tabs/rows below it. -------- */
.action {
  width: 100%; max-width: none; display: flex; gap: 8px; align-items: stretch;
  padding: 3px; margin-bottom: 0; border-radius: 14px;
  background: var(--glass-soft); border: 1px solid var(--glass-border);
  box-shadow: inset 0 1px 0 var(--glass-sheen);
  transition: box-shadow 240ms var(--ease-out), background 240ms var(--ease-out);
  z-index: 6;
}
.action:focus-within { background: var(--glass-strong); box-shadow: inset 0 1px 0 var(--glass-sheen), 0 0 0 4px rgba(217, 172, 51, 0.18); }

.action__field { position: relative; display: flex; align-items: center; min-width: 0; }
.action__field--name { flex: 1 1 auto; }
.action__icon { position: absolute; left: 16px; font-size: 15px; opacity: 0.55; pointer-events: none; }
.action__input {
  width: 100%; border: 0; background: transparent; outline: none; color: var(--ink);
  font-family: var(--font-institutional); font-size: 13.5px; font-weight: 500; padding: 7px 34px 7px 46px;
}
.action__input::placeholder { color: var(--ink-faint); }
.action__clear {
  position: absolute; right: 8px; top: 50%; transform: translateY(-50%);
  display: grid; place-items: center; width: 22px; height: 22px; border-radius: 50%; flex: none;
  border: 0; background: rgba(0, 0, 0, 0.08); color: var(--ink-mute);
  font-size: 14px; line-height: 1; cursor: pointer;
  transition: background 160ms var(--ease-out), color 160ms var(--ease-out), transform 160ms var(--ease-spring);
}
.action__clear:hover { background: rgba(0, 0, 0, 0.14); color: var(--ink); }
.action__clear:active { transform: translateY(-50%) scale(0.88); }
html[data-theme="dark"] .action__clear { background: rgba(255, 255, 255, 0.1); }
html[data-theme="dark"] .action__clear:hover { background: rgba(255, 255, 255, 0.18); }

/* Not-ranked status chip — replaces the sport <select> when the typed name
   matches nobody on the board; quiet, factual, not an error. */
.action__notranked {
  flex: none; display: inline-flex; align-items: center; white-space: nowrap;
  padding: 0 15px; border-radius: var(--radius-pill);
  background: rgba(217, 83, 79, 0.14); border: 1px solid rgba(217, 83, 79, 0.4); color: #a03a36;
  font-family: var(--font-institutional); font-weight: 700; font-size: 12.5px; letter-spacing: 0.02em;
}
html[data-theme="dark"] .action__notranked { background: rgba(240, 128, 120, 0.16); border-color: rgba(240, 128, 120, 0.45); color: #f2a49e; }

.action__field--sport { flex: 0 0 auto; }
.action__select {
  appearance: none; border: 0; border-left: 1px solid var(--glass-border); background: transparent; outline: none;
  color: var(--ink-soft); font-family: var(--font-institutional); font-weight: 600; font-size: 13.5px; letter-spacing: 0.01em;
  padding: 10px 30px 10px 16px; border-radius: var(--radius-pill); cursor: pointer;
  background-image: linear-gradient(45deg, transparent 50%, currentColor 50%), linear-gradient(135deg, currentColor 50%, transparent 50%);
  background-position: calc(100% - 16px) 55%, calc(100% - 11px) 55%; background-size: 5px 5px; background-repeat: no-repeat;
  max-width: 152px; text-overflow: ellipsis;
  transition: background-color 200ms var(--ease-out);
}
.action__select:hover { background-color: rgba(255, 255, 255, 0.25); }
.action__btn { border-radius: 11px; padding-top: 7px; padding-bottom: 7px; font-size: 13.5px; flex: none; white-space: nowrap; padding-top: 12px; padding-bottom: 12px; font-size: 14px; font-family: var(--font-institutional); letter-spacing: 0.005em; }

/* add-mode: distinct but harmonious — swaps the gold fill for the accent
   burgundy already in the palette, so "adding someone new" reads as a
   different, deliberate action rather than the default tip. */
.btn--gold.action__btn--add {
  background: linear-gradient(180deg, #b6295a 0%, var(--accent) 55%, #7c1836 100%);
  color: #fff;
  box-shadow: 0 12px 26px rgba(156, 33, 69, 0.4), inset 0 1px 0 rgba(255, 255, 255, 0.35), inset 0 -2px 4px rgba(90, 15, 40, 0.35);
}
.btn--gold.action__btn--add:hover:not(:disabled) { box-shadow: 0 18px 34px rgba(156, 33, 69, 0.5), inset 0 1px 0 rgba(255, 255, 255, 0.4); }

.action__select.nudge { animation: nudge-shake 520ms var(--ease-spring); box-shadow: 0 0 0 4px rgba(217, 172, 51, 0.4); border-radius: var(--radius-pill); }
@keyframes nudge-shake { 0%, 100% { transform: translateX(0); } 20% { transform: translateX(-5px); } 40% { transform: translateX(4px); } 60% { transform: translateX(-3px); } 80% { transform: translateX(2px); } }

@media (min-width: 700px) {
  .action { flex-wrap: nowrap; }
}
@media (max-width: 699px) {
  .action { flex-direction: column; border-radius: var(--radius-md); }
  .action__field--sport { border-top: 1px solid var(--glass-border); }
  .action__select { border-left: 0; max-width: none; width: 100%; }
  .action__btn { width: 100%; }
}

/* ==========================================================================
   Buttons
   ========================================================================== */
.btn {
  border: 0; border-radius: var(--radius-pill); font-family: var(--font-body); font-weight: 700; font-size: 15px;
  padding: 14px 26px; cursor: pointer; isolation: isolate;
  transition: transform 160ms var(--ease-out), box-shadow 220ms var(--ease-out), filter 200ms var(--ease-out), background 200ms var(--ease-out);
}
.btn:active { transform: scale(0.97); }
.btn:disabled { opacity: 0.5; cursor: not-allowed; transform: none; }

.btn--gold {
  position: relative; overflow: hidden;
  background: linear-gradient(180deg, var(--gold-300) 0%, var(--gold-500) 46%, var(--gold-600) 100%);
  color: var(--on-gold);
  box-shadow: var(--shadow-gold), inset 0 1px 0 rgba(255, 255, 255, 0.75), inset 0 -2px 4px rgba(120, 84, 12, 0.25);
}
.btn--gold::before {
  content: ""; position: absolute; inset: 0; z-index: 1;
  background: linear-gradient(115deg, transparent 32%, rgba(255, 255, 255, 0.8) 48%, transparent 62%);
  background-size: 220% 100%; background-position: 120% 0;
  transition: background-position 700ms var(--ease-out);
}
.btn--gold:hover:not(:disabled) { transform: translateY(-2px); box-shadow: 0 18px 36px rgba(185, 140, 33, 0.45), inset 0 1px 0 rgba(255, 255, 255, 0.8); }
.btn--gold:hover:not(:disabled)::before { background-position: -20% 0; }

.btn--glass {
  background: var(--glass-strong); border: 1px solid var(--glass-border); color: var(--ink);
  backdrop-filter: var(--glass-blur); -webkit-backdrop-filter: var(--glass-blur);
  box-shadow: 0 6px 16px rgba(20, 16, 8, 0.1), inset 0 1px 0 var(--glass-sheen);
  text-decoration: none; display: inline-block;
}
.btn--glass:hover:not(:disabled) { transform: translateY(-1px); background: rgba(255, 255, 255, 0.16); }

.btn--block { display: block; width: 100%; text-align: center; text-decoration: none; }

/* "Tip" → "That's my GOAT" — the pill widens and deepens on hover/focus.
   Both labels are absolutely stacked inset:0 and independently flex-centered
   inside that identical box, so each reads as perfectly centered at every
   width instead of the old grid-cell-vs-inset-box mismatch. The two gradient
   stops (rest/hover) share the same structure (2 stops, same positions) so
   `background` interpolates smoothly instead of snapping. The row's cta
   column already reserves the expanded width so growth eats into empty
   space instead of shoving the row's other columns around. */
.btn--tip {
  position: relative; display: inline-block; height: 34px; padding: 0;
  font-size: 12.5px; border-radius: var(--radius-pill); font-weight: 700;
  min-width: 52px; max-width: 52px; overflow: hidden;
  background: linear-gradient(180deg, var(--gold-300) 0%, var(--gold-600) 100%); color: var(--on-gold);
  box-shadow: 0 4px 12px rgba(185, 140, 33, 0.35), inset 0 1px 0 rgba(255, 255, 255, 0.7);
  transition: min-width 260ms var(--ease-out), max-width 260ms var(--ease-out), background 320ms var(--ease-out), box-shadow 220ms var(--ease-out), transform 160ms var(--ease-out);
}
.btn--tip__label, .btn--tip__hover {
  position: absolute; inset: 0; display: flex; align-items: center; justify-content: center;
  padding-inline: 6px; white-space: nowrap;
  transition: opacity 200ms var(--ease-out), transform 240ms var(--ease-spring);
}
.btn--tip__hover { opacity: 0; transform: translateY(6px) scale(0.97); }
.row:hover .btn--tip, .row:focus-visible .btn--tip {
  min-width: 100px; max-width: 100px;
  /* fixed bright champagne golds — NOT theme tokens, which flip dark in dark mode */
  background: linear-gradient(180deg, #fdeeb0 0%, #ecc75e 100%);
  color: #3a2c08;
  box-shadow: 0 10px 26px rgba(236, 199, 94, 0.6), inset 0 1px 0 rgba(255, 255, 255, 0.9);
}
.row:hover .btn--tip .btn--tip__label, .row:focus-visible .btn--tip .btn--tip__label { opacity: 0; transform: translateY(-6px) scale(0.97); }
.row:hover .btn--tip .btn--tip__hover, .row:focus-visible .btn--tip .btn--tip__hover { opacity: 1; transform: translateY(0) scale(1); }
.linkbtn { background: none; border: 0; padding: 0; color: var(--gold-700); text-decoration: underline; text-underline-offset: 2px; cursor: pointer; font: inherit; font-weight: 700; }
.linkbtn:hover { color: var(--accent); }
html[data-theme="dark"] .linkbtn { color: var(--gold-300); }

/* ==========================================================================
   Board layout — board card + live-tips sidebar. Sidebar is a permanent
   sticky rail on ≥1100px; below that it drops under the board as a
   capped-height section. board-section must stay wide enough to fit both
   without ever setting overflow:hidden (the .suggest dropdown must clip
   against nothing).
   ========================================================================== */
.board-section { position: relative; padding: 0 16px; max-width: 1180px; margin: 0 auto; }
.board-layout { display: flex; flex-direction: column; gap: 16px; align-items: flex-start; }
.board-col { width: 100%; min-width: 0; flex: 1 1 auto; }
@media (min-width: 1100px) {
  .board-layout { flex-direction: row; gap: 22px; }
  .board-col { flex: 1 1 auto; }
}

/* Board / sport chips ----------------------------------------------------- */
.board { display: flex; flex-direction: column; gap: 5px; padding: 20px 16px 16px; border-radius: var(--radius); background: color-mix(in srgb, var(--glass) 78%, transparent); border: 1px solid var(--glass-border); backdrop-filter: var(--glass-blur); -webkit-backdrop-filter: var(--glass-blur); box-shadow: var(--shadow-soft), inset 0 1px 0 var(--glass-sheen); }

.tabs {
  display: flex; flex-wrap: wrap; gap: 4px;
  padding: 4px; border-radius: 14px; background: var(--glass-soft); border: 1px solid var(--glass-border);
}
.tabs::-webkit-scrollbar { display: none; }
.tab {
  border: 0; background: transparent; color: var(--ink-soft); cursor: pointer;
  border-radius: var(--radius-pill); padding: 8px 10px; font-family: var(--font-institutional); font-weight: 600; font-size: 12.5px; letter-spacing: 0.02em;
  display: inline-flex; gap: 6px; align-items: center; white-space: nowrap; flex: none;
  transition: background 200ms var(--ease-out), color 200ms var(--ease-out), transform 140ms var(--ease-out);
}
@media (hover: hover) { .tab:hover:not(.tab--active) { background: rgba(255, 255, 255, 0.18); } }
.tab:active { transform: scale(0.96); }
.tabs .tab--active, .tabs .tab--active:hover { background: linear-gradient(180deg, var(--gold-300), var(--gold-500)); color: var(--on-gold); font-weight: 700; box-shadow: 0 6px 16px rgba(185, 140, 33, 0.35), inset 0 1px 0 rgba(255, 255, 255, 0.75); }
@media (max-width: 560px) { .tab { padding: 8px 12px; } }

.board__head { display: flex; flex-wrap: wrap; gap: 12px; align-items: baseline; justify-content: space-between; margin: 0 2px; }
.board__title { font-weight: 600; margin: 0; font-size: clamp(16.5px, 1.6vw, 19px); color: var(--ink); }
.board__sub { margin: 2px 0 0; color: var(--ink-mute); font-size: 12.5px; }
.board__empty { margin-top: 14px; padding: 28px 20px; text-align: center; color: var(--ink-soft); }
.board__empty strong { color: var(--ink); }

/* ==========================================================================
   Rows — reorder mechanism relies on `.rows` height + absolute `.row`
   transform. DO NOT change: only --row-h, easing and the state classes.
   ========================================================================== */
.rows { position: relative; height: calc(var(--count) * var(--row-h) + var(--extra-total, 0) * 1px); margin-top: 0; transition: height 420ms var(--ease-spring); }
.row {
  position: absolute; left: 0; right: 0; top: 0; height: calc(var(--row-h) - 8px);
  transform: translateY(calc(var(--i) * var(--row-h) + var(--extra, 0) * 1px));
  transition: transform 680ms var(--ease-spring), background 260ms var(--ease-out), box-shadow 260ms var(--ease-out), border-color 260ms var(--ease-out);
  display: grid; grid-template-columns: 62px 40px minmax(0, 1fr) auto 106px auto 56px; align-items: center; gap: 8px;
  padding: 0 12px; border-radius: var(--radius-sm);
  background: rgba(255, 255, 255, 0.16); border: 1px solid var(--glass-border);
  cursor: pointer; will-change: transform;
}
html[data-theme="dark"] .row { background: rgba(255, 255, 255, 0.045); }
.row { background-image: linear-gradient(270deg, rgba(var(--sport-rgb), 0.13), transparent 34%); background-repeat: no-repeat; }
.row > * { position: relative; z-index: 1; }
.row:hover { background: rgba(255, 255, 255, 0.32); box-shadow: var(--shadow-soft); transform: translateY(calc(var(--i) * var(--row-h) + var(--extra, 0) * 1px)) translateY(-2px); }
html[data-theme="dark"] .row:hover { background: rgba(255, 255, 255, 0.1); }
.row:focus-visible { outline-offset: -2px; }

.row--first {
  height: calc(var(--row-h) + 12px);   /* slot is +20px, gap stays 8px */
  background: linear-gradient(90deg, rgba(253, 231, 158, 0.55), rgba(240, 205, 100, 0.24));
  border-color: rgba(217, 172, 51, 0.7);
  box-shadow: 0 10px 26px rgba(185, 140, 33, 0.26), inset 0 1px 0 rgba(255, 255, 255, 0.45);
}
.row--first .row__pos-badge {
  background: linear-gradient(180deg, var(--gold-300) 0%, var(--gold-500) 46%, var(--gold-600) 100%);
  color: var(--on-gold);
  border-color: rgba(217, 172, 51, 0.6);
}

/* #2 silver, #3 bronze — medal tiers under the gold champion */
.row--p2 {
  height: calc(var(--row-h) + 4px);   /* slot +12px */
  background: linear-gradient(90deg, rgba(226, 230, 236, 0.42), rgba(255, 255, 255, 0.16));
  border-color: rgba(186, 194, 205, 0.65);
  box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.4);
}
.row--p3 {
  height: calc(var(--row-h) - 2px);   /* slot +6px */
  background: linear-gradient(90deg, rgba(205, 148, 92, 0.34), rgba(255, 255, 255, 0.12));
  border-color: rgba(176, 118, 62, 0.6);
  box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.3);
}

/* Positions 6+ drop the country line and tighten up (slot is 14px shorter) */
.row--compact { height: calc(var(--row-h) - 22px); }
.row--compact .row__country { display: none; }

html[data-theme="dark"] .row--first { background: linear-gradient(90deg, rgba(240, 205, 100, 0.22), rgba(255, 255, 255, 0.05)); border-color: rgba(217, 172, 51, 0.45); }
html[data-theme="dark"] .row--p2 { background: linear-gradient(90deg, rgba(200, 208, 218, 0.16), rgba(255, 255, 255, 0.05)); border-color: rgba(186, 194, 205, 0.42); }
html[data-theme="dark"] .row--p3 { background: linear-gradient(90deg, rgba(205, 148, 92, 0.2), rgba(255, 255, 255, 0.04)); border-color: rgba(196, 138, 82, 0.45); }
.row--p2 .row__pos-badge { color: #6e7683; border-color: rgba(186, 194, 205, 0.75); background: rgba(236, 240, 245, 0.5); }
.row--p3 .row__pos-badge { color: #8a5a2e; border-color: rgba(176, 118, 62, 0.65); background: rgba(226, 186, 148, 0.35); }
html[data-theme="dark"] .row--p2 .row__pos-badge { color: #cfd6df; background: rgba(255, 255, 255, 0.09); }
html[data-theme="dark"] .row--p3 .row__pos-badge { color: #e0aa74; background: rgba(205, 148, 92, 0.16); }
.row--first .row__pos { position: relative; display: flex; flex-direction: row; align-items: baseline; justify-content: center; gap: 5px; } /* gap nudged 4→5px so the ▲/▼ delta reads centered between badge and flag, not hugging the badge */

.row--up { animation: row-up 1.6s var(--ease-out) 1; }
@keyframes row-up {
  0% { box-shadow: 0 0 0 0 rgba(28, 157, 99, 0.55), var(--shadow-soft); background: rgba(28, 157, 99, 0.22); }
  35% { box-shadow: 0 0 0 10px rgba(28, 157, 99, 0), var(--shadow-lift); }
  100% { box-shadow: var(--shadow-soft); }
}
.row--down { animation: row-down 1.1s var(--ease-out) 1; }
@keyframes row-down {
  0% { box-shadow: inset 0 0 0 2px rgba(192, 57, 43, 0.4); }
  100% { box-shadow: inset 0 0 0 2px rgba(192, 57, 43, 0); }
}

/* Rank badge — small mono chip, financial-terminal feel. --------------- */
.row__pos { text-align: center; }
.row__pos-badge {
  display: inline-flex; align-items: center; justify-content: center;
  min-width: 34px; height: 26px; padding: 0 7px; border-radius: var(--radius-sm); font-size: 15px;
  background: rgba(255, 255, 255, 0.3); border: 1px solid var(--glass-border);
  font-family: var(--font-mono); font-weight: 600; font-size: 12px; letter-spacing: -0.02em; color: var(--ink-soft);
}
html[data-theme="dark"] .row__pos-badge { background: rgba(255, 255, 255, 0.06); }
html[data-theme="dark"] .row--first .row__pos-badge {
  background: linear-gradient(180deg, var(--gold-300) 0%, var(--gold-500) 46%, var(--gold-600) 100%);
  color: var(--on-gold);
  border-color: rgba(217, 172, 51, 0.6);
}
.row__flag img { display: block; width: 26px; height: 19px; border-radius: 4px; box-shadow: 0 2px 6px rgba(0, 0, 0, 0.3), inset 0 0 0 1px rgba(255, 255, 255, 0.5); }
.row__main { min-width: 0; display: flex; flex-direction: column; gap: 2px; }
.row__name { font-family: var(--font-institutional); font-weight: 600; font-size: 14.5px; letter-spacing: -0.005em; color: var(--ink); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.row__sport { margin-left: 6px; font-size: 12.5px; }
.row__meta { display: flex; align-items: center; gap: 6px; flex-wrap: wrap; font-family: var(--font-institutional); font-weight: 500; font-size: 11.5px; letter-spacing: 0.01em; color: var(--ink-mute); }
.row__cc { font-family: var(--font-mono); font-weight: 600; letter-spacing: 0.04em; color: var(--ink-faint); }
.row__dot { opacity: 0.5; }
.row__country { display: block; font-family: var(--font-institutional); font-size: 11.5px; color: var(--ink-mute); margin-top: 1px; }
.row__stats { display: flex; align-items: center; gap: 5px; overflow: hidden; font-size: 11px; font-family: var(--font-institutional); font-size: 11.5px; color: var(--ink-mute); white-space: nowrap; }
.row__statsdot { opacity: 0.55; }
.row__delta--empty { visibility: hidden; }
.row__total { font-family: var(--font-mono); font-weight: 600; font-size: 14.5px; letter-spacing: -0.01em; white-space: nowrap; color: var(--ink); text-align: right; }
.row__delta {
  font-family: var(--font-mono); font-weight: 600; font-size: 10.5px; letter-spacing: -0.01em;
  color: var(--good); background: var(--good-soft); padding: 2px 7px 2px 6px; border-radius: var(--radius-pill);
  white-space: nowrap; justify-self: center; width: max-content;
}
/* cta column reserves the pill's expanded width up front so the morph on
   hover grows leftward into already-allotted space — the name/meta column
   never reflows when the pill widens. */
.row__cta { display: flex; justify-content: center; min-width: 158px; }
.row:hover .btn--tip, .row:focus-visible .btn--tip { transform: translateY(-1px); }

@media (max-width: 640px) {
  .row { grid-template-columns: 48px 26px minmax(0, 1fr) auto auto; gap: 6px; padding: 0 9px; }
  .row__sport { display: none; }               /* the sport tint edge carries this on phones */
  .row__name { font-size: 13.5px; }
  .row__total { font-size: 15px; }
  .row__pos-badge { min-width: 28px; height: 22px; font-size: 12.5px; padding: 0 4px; }
  .row__rankdelta { font-size: 9px; }
  .row--first .row__name, .row--p2 .row__name, .row--p3 .row__name { font-size: 14px; }
  .row--first .row__total, .row--p2 .row__total, .row--p3 .row__total { font-size: 15.5px; }
  .row__stats, .row__delta { display: none; }
  .row__cta { display: none; }
  .row__name { font-size: 14px; }
  .row__meta { font-size: 11px; }
}

.row--shimmer { background: rgba(255, 255, 255, 0.1); }
.row--shimmer .shimmer, .verify__skeleton .shimmer {
  display: block; height: 15px; border-radius: 8px;
  background: linear-gradient(90deg, rgba(255, 255, 255, 0.08) 20%, rgba(253, 231, 158, 0.5) 50%, rgba(255, 255, 255, 0.08) 80%);
  background-size: 200% 100%; animation: shimmer-sweep 1.5s ease-in-out infinite;
}
.verify__skeleton { display: flex; flex-direction: column; gap: 8px; margin-top: 6px; }
.verify__skeleton .shimmer { height: 44px; border-radius: var(--radius-sm); }
@keyframes shimmer-sweep { 0% { background-position: 200% 0; } 100% { background-position: -200% 0; } }

/* ==========================================================================
   Modal
   ========================================================================== */
.modal-backdrop {
  position: fixed; inset: 0; z-index: 40;
  background: radial-gradient(1200px 800px at 50% 30%, rgba(20, 14, 6, 0.4), rgba(6, 8, 16, 0.62));
  backdrop-filter: blur(8px); -webkit-backdrop-filter: blur(8px);
  animation: fade-in 220ms var(--ease-out);
}
.modal-backdrop--closing { animation: fade-out 200ms var(--ease-out) forwards; }
@keyframes fade-in { from { opacity: 0; } }
@keyframes fade-out { to { opacity: 0; } }

.modal {
  position: fixed; left: 50%; top: 50%; transform: translate(-50%, -50%); transform-origin: center;
  width: min(460px, calc(100vw - 24px)); max-height: calc(100vh - 24px); overflow-x: hidden; overflow-y: auto;
  padding: 20px 22px; z-index: 41;
  background: var(--glass-strong);
  backdrop-filter: var(--glass-blur); -webkit-backdrop-filter: var(--glass-blur);
  border: 1px solid var(--glass-border);
  border-radius: var(--radius);
  box-shadow: var(--shadow-lift), inset 0 1px 0 var(--glass-sheen);
  animation: modal-pop 360ms var(--ease-spring);
}
.modal--closing { animation: modal-popout 200ms var(--ease-out) forwards; }
@keyframes modal-pop { from { opacity: 0; transform: translate(-50%, -50%) scale(0.94); filter: blur(6px); } }
@keyframes modal-popout { to { opacity: 0; transform: translate(-50%, -50%) scale(0.96); filter: blur(4px); } }

.modal__close {
  position: absolute; right: 14px; top: 14px; z-index: 3; border: 1px solid var(--glass-border);
  background: var(--glass-soft); width: 34px; height: 34px; border-radius: 50%; cursor: pointer; font-size: 18px; color: var(--ink-soft);
  transition: transform 200ms var(--ease-spring), background 200ms var(--ease-out);
}
.modal__close:hover { background: rgba(255, 255, 255, 0.2); }
.modal__close:active { transform: scale(0.9) rotate(90deg); }

.modal__head { display: flex; gap: 13px; align-items: center; margin-bottom: 12px; padding-right: 30px; }
.modal__flag { border-radius: 7px; flex: none; box-shadow: 0 3px 10px rgba(0, 0, 0, 0.3), inset 0 0 0 1px rgba(255, 255, 255, 0.5); }
.modal__flag--add {
  display: grid; place-items: center; width: 36px; height: 27px; border-radius: 7px; flex: none; font-weight: 800; color: var(--on-gold);
  background: linear-gradient(180deg, var(--gold-300), var(--gold-500));
}
.modal__eyebrow { margin: 0; font-size: 12px; font-weight: 600; color: var(--ink-mute); }
.modal__title { font-weight: 600; margin: 2px 0 0; font-size: 20px; color: var(--ink); }
.modal__body { display: grid; grid-template-columns: minmax(0, 1fr); gap: 10px; }

.chips { display: flex; flex-wrap: wrap; gap: 6px; }
.chip {
  flex: 1 1 76px; min-width: 0; border-radius: var(--radius-pill); border: 1px solid var(--glass-border);
  background: var(--glass-soft); padding: 9px 8px; font-family: var(--font-body); font-weight: 700; color: var(--ink-soft);
  cursor: pointer; transition: transform 160ms var(--ease-out), background 200ms var(--ease-out), border-color 200ms var(--ease-out), box-shadow 200ms var(--ease-out);
}
.chip:hover { transform: translateY(-1px); background: rgba(255, 255, 255, 0.2); }
.chip:active { transform: scale(0.97); }
.chip--active { background: linear-gradient(180deg, var(--gold-300), var(--gold-500)); border-color: var(--gold-600); color: var(--on-gold); box-shadow: 0 6px 16px rgba(185, 140, 33, 0.35), inset 0 1px 0 rgba(255, 255, 255, 0.75); }

.amount {
  display: flex; align-items: center; background: var(--glass-soft); border: 1px solid var(--glass-border);
  border-radius: var(--radius-md); padding: 0 16px; box-shadow: inset 0 1px 4px rgba(0, 0, 0, 0.12);
  transition: box-shadow 200ms var(--ease-out), border-color 200ms var(--ease-out);
}
.amount:focus-within { border-color: var(--gold-600); box-shadow: 0 0 0 4px rgba(217, 172, 51, 0.25); }
.amount__currency { font-family: var(--font-display); font-weight: 600; font-size: 20px; color: var(--ink-faint); }
.amount__input { flex: 1; border: 0; background: transparent; font-family: var(--font-display); font-size: 26px; font-weight: 600; color: var(--ink); padding: 9px 8px; outline: none; min-width: 0; }
.amount__hint { margin: 0; font-size: 12px; color: var(--ink-mute); }
.amount__hint code { background: rgba(0, 0, 0, 0.14); padding: 1px 5px; border-radius: 5px; }

.robot {
  display: flex; gap: 8px; align-items: center; font-size: 12px; font-weight: 600; color: var(--ink-soft);
  padding: 7px 12px; border-radius: var(--radius-pill); background: var(--glass-soft); border: 1px solid var(--glass-border);
  transition: background 260ms var(--ease-out), border-color 260ms var(--ease-out);
}
.robot--human { background: var(--good-soft); border-color: rgba(28, 157, 99, 0.3); color: var(--good); }
.robot--failed { background: var(--bad-soft); border-color: rgba(192, 57, 43, 0.3); color: var(--bad); }
.robot__spinner { width: 13px; height: 13px; border-radius: 50%; border: 2px solid rgba(0, 0, 0, 0.15); border-top-color: currentColor; animation: spin 0.8s linear infinite; flex: none; }
.robot__spinner--big { width: 32px; height: 32px; margin: 4px auto; border-width: 3px; color: var(--gold-600); }
@keyframes spin { to { transform: rotate(360deg); } }
.robot__ok, .robot__bad { display: inline-flex; align-items: center; justify-content: center; width: 16px; height: 16px; border-radius: 50%; flex: none; font-size: 11px; font-weight: 800; animation: pop-check 320ms var(--ease-spring); }
.robot__ok { background: var(--good); color: #fff; }
.robot__bad { background: var(--bad); color: #fff; }
@starting-style { .robot__ok, .robot__bad { opacity: 0; transform: scale(0.6); } }
@keyframes pop-check { from { opacity: 0; transform: scale(0.6); } }

.modal__error { margin: 0; color: var(--bad); font-size: 13px; font-weight: 600; }
.modal__amount { margin: 0; font-size: 14px; color: var(--ink-soft); }
/* Reserves the ~290px height the mounted Stripe card form takes so the modal
   doesn't jump when it finishes loading; the faint static panel behind it
   (no animation — a running shimmer here would be exactly the kind of
   continuous repaint we just removed) reads as a placeholder in the gap
   before Stripe paints over it. */
.payment-element { position: relative; min-height: 230px; padding: 4px 0 2px; border-radius: var(--radius-md); }
.payment-element::before {
  content: ""; position: absolute; inset: 4px 0 2px; z-index: -1; border-radius: var(--radius-md);
  background: var(--glass-soft); border: 1px solid var(--glass-border); opacity: 0.6;
}
.modal__secure { margin: 0; font-size: 12px; color: var(--ink-faint); text-align: center; }

.modal__body--success { text-align: center; padding-top: 4px; }
.success__badge { position: relative; margin: 4px auto 6px; width: 88px; height: 88px; display: grid; place-items: center; border-radius: 50%; background: radial-gradient(circle, rgba(253, 231, 158, 0.5), transparent 70%); animation: badge-in 480ms var(--ease-spring); }
.success__badge-img { display: block; width: auto; height: 76px; filter: drop-shadow(0 6px 12px rgba(185, 140, 33, 0.45)); }
.success__badge::before { content: ""; position: absolute; inset: -14px; border-radius: 50%; box-shadow: 0 0 0 1px rgba(217, 172, 51, 0.4); animation: ring-pulse 1.8s var(--ease-out) infinite; }
@keyframes badge-in { from { opacity: 0; transform: scale(0.7) rotate(-8deg); } }
@keyframes ring-pulse { 0% { opacity: 0.6; transform: scale(0.9); } 100% { opacity: 0; transform: scale(1.55); } }
.success__title { font-weight: 600; margin: 0; font-size: 20px; color: var(--ink); }
.success__text { margin: 0; color: var(--ink-soft); line-height: 1.55; }

.verify__lede { margin: 0; font-size: 13.5px; color: var(--ink-soft); line-height: 1.55; }
.verify__list { list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; gap: 6px; max-height: 320px; overflow-y: auto; }
.verify__item {
  width: 100%; display: flex; align-items: center; gap: 12px; padding: 10px 12px; text-align: left;
  border: 1px solid var(--glass-border); background: var(--glass-soft); border-radius: var(--radius-sm); cursor: pointer;
  transition: background 160ms var(--ease-out), transform 160ms var(--ease-out);
}
.verify__item:hover:not(:disabled) { background: rgba(217, 172, 51, 0.16); }
.verify__item:active:not(:disabled) { transform: scale(0.99); }
.verify__item img { border-radius: 4px; flex: none; box-shadow: 0 1px 3px rgba(0, 0, 0, 0.25); }
.verify__name { font-weight: 700; font-size: 14px; color: var(--ink); display: block; }
.verify__name small { font-weight: 500; color: var(--ink-mute); margin-left: 6px; }
.verify__desc { font-size: 12px; color: var(--ink-mute); margin-left: auto; text-align: right; max-width: 40%; }
.verify__none { margin: 0; font-size: 13.5px; color: var(--ink-soft); line-height: 1.55; }
.verify__foot { margin: 0; font-size: 11.5px; color: var(--ink-faint); }

/* ==========================================================================
   Snackbars — replaced by the permanent sidebar on wide screens.
   ========================================================================== */
.snacks { position: fixed; left: 50%; bottom: 18px; transform: translateX(-50%); display: flex; flex-direction: column-reverse; gap: 8px; z-index: 30; width: min(380px, calc(100vw - 24px)); pointer-events: none; }
.snack {
  display: flex; gap: 10px; align-items: center; padding: 12px 16px; font-size: 13.5px; color: var(--ink);
  animation: snack-in 420ms var(--ease-spring);
}
.snack--leaving { animation: snack-out 400ms var(--ease-out) forwards; }
.snack__flag { border-radius: 4px; flex: none; box-shadow: 0 1px 4px rgba(0, 0, 0, 0.3), inset 0 0 0 1px rgba(255, 255, 255, 0.5); }
.snack__text { line-height: 1.4; }
.snack__pos { margin-left: 6px; color: var(--ink-mute); font-weight: 600; }
@keyframes snack-in { from { opacity: 0; transform: translateY(18px) scale(0.94); filter: blur(4px); } }
@keyframes snack-out { to { opacity: 0; transform: translateY(-8px) scale(0.96); filter: blur(3px); } }
@media (min-width: 1100px) { .snacks { display: none; } }

.wallet-element:empty { display: none; }
.pay-divider { display: flex; align-items: center; gap: 10px; margin: 4px 0; color: var(--ink-mute); font-family: var(--font-institutional); font-size: 11.5px; letter-spacing: 0.04em; text-transform: uppercase; }
.pay-divider::before, .pay-divider::after { content: ""; flex: 1; height: 1px; background: var(--glass-border); }
.payment-element--card {
  min-height: 0; padding: 13px 14px; border-radius: 12px;
  background: var(--glass-soft); border: 1px solid var(--glass-border);
}

.postal-input {
  width: 100%; border: 1px solid var(--glass-border); background: var(--glass-soft); color: var(--ink);
  font-family: var(--font-institutional); font-size: 15px; border-radius: 12px; padding: 12px 14px;
}
.postal-input:focus { outline: 2px solid var(--gold-500); outline-offset: 1px; }
.postal-input::placeholder { color: var(--ink-mute); }

.consent {
  display: flex; align-items: flex-start; gap: 8px; cursor: pointer; user-select: none;
  font-family: var(--font-institutional); font-size: 12.5px; line-height: 1.4; color: var(--ink-soft);
}
.consent input[type="checkbox"] {
  flex: none; width: 16px; height: 16px; margin-top: 1px; accent-color: var(--gold-600); cursor: pointer;
}
.consent a { color: var(--gold-700); font-weight: 600; text-decoration: underline; text-underline-offset: 2px; }
html[data-theme="dark"] .consent a { color: var(--gold-300); }

/* Canonical board order everywhere: title → tabs → search → subline (web) → rows */
.board > .board__head { order: 1; margin: 0; }
.board > .tabs { order: 2; }
.board > .tabs .tab { flex: 1 1 0; justify-content: center; }
.board > .action { order: 3; }
.board > .board__inner { order: 4; margin-top: 0; }

.pager { display: flex; align-items: center; justify-content: center; gap: 14px; margin-top: 14px; }
.pager__btn {
  border: 1px solid var(--glass-border); background: var(--glass-soft); color: var(--ink);
  font-family: var(--font-institutional); font-weight: 700; font-size: 12.5px;
  padding: 7px 14px; border-radius: var(--radius-pill); cursor: pointer;
  transition: background 180ms var(--ease-out), transform 140ms var(--ease-out);
}
.pager__btn:hover:not(:disabled) { background: var(--glass-strong); transform: translateY(-1px); }
.pager__btn:disabled { opacity: 0.4; cursor: default; }
.pager__info { font-family: var(--font-mono); font-size: 12px; color: var(--ink-mute); }

/* ==========================================================================
   Live tips sidebar — permanent sticky rail on ≥1100px, capped scrollable
   section under the board below that.
   ========================================================================== */
.feed {
  background: color-mix(in srgb, var(--glass) 78%, transparent);
  padding: 14px 14px 12px;
  display: flex; flex-direction: column;
  min-height: 0;
}
@media (min-width: 1100px) {
  .feed {
    flex: 0 0 312px; width: 312px;
    position: sticky; top: 76px;
    max-height: calc(100vh - 96px);
  }
  .feed__list { overflow-y: auto; scrollbar-width: thin; margin-right: -6px; padding-right: 6px; }
}
@media (max-width: 1099px) {
  .feed__list { max-height: 340px; overflow-y: auto; scrollbar-width: thin; }
}

.feed__title {
  display: flex; align-items: center; gap: 8px; margin: 0 0 10px; flex: none;
  font-family: var(--font-display); font-weight: 600; font-size: 14.5px; color: var(--ink);
}
.feed__dot { width: 7px; height: 7px; border-radius: 50%; background: var(--good); box-shadow: 0 0 0 3px var(--good-soft); animation: live-pulse 2.2s var(--ease-in-out) infinite; flex: none; }
.feed__empty { margin: 0; padding: 10px 2px; color: var(--ink-mute); font-size: 13px; line-height: 1.5; }

.feed__list { list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; gap: 6px; }
.feed__item {
  display: flex; gap: 9px; align-items: flex-start; padding: 8px 9px;
  border-radius: var(--radius-sm); background: rgba(255, 255, 255, 0.18); border: 1px solid var(--glass-border);
  animation: feed-item-in 320ms var(--ease-out);
}
html[data-theme="dark"] .feed__item { background: rgba(255, 255, 255, 0.05); }
.feed__item--fresh { animation: feed-item-in 320ms var(--ease-out), feed-fresh-fade 1800ms var(--ease-out) forwards; }
@keyframes feed-item-in { from { opacity: 0; transform: translateY(-10px); } }
@keyframes feed-fresh-fade {
  0% { background: rgba(28, 157, 99, 0.24); border-color: rgba(28, 157, 99, 0.5); box-shadow: 0 0 0 1px rgba(28, 157, 99, 0.2); }
  65% { background: rgba(28, 157, 99, 0.12); border-color: rgba(28, 157, 99, 0.28); }
  100% { background: rgba(255, 255, 255, 0.18); border-color: var(--glass-border); box-shadow: none; }
}
html[data-theme="dark"] .feed__item--fresh { animation-name: feed-item-in, feed-fresh-fade-dark; }
@keyframes feed-fresh-fade-dark {
  0% { background: rgba(28, 157, 99, 0.3); border-color: rgba(28, 157, 99, 0.55); box-shadow: 0 0 0 1px rgba(28, 157, 99, 0.25); }
  65% { background: rgba(28, 157, 99, 0.16); border-color: rgba(28, 157, 99, 0.32); }
  100% { background: rgba(255, 255, 255, 0.05); border-color: var(--glass-border); box-shadow: none; }
}

.feed__flag { display: block; margin-top: 2px; border-radius: 4px; flex: none; box-shadow: 0 1px 4px rgba(0, 0, 0, 0.3), inset 0 0 0 1px rgba(255, 255, 255, 0.5); }
.feed__body { display: flex; flex-direction: column; gap: 2px; min-width: 0; flex: 1 1 auto; }
.feed__line { font-size: 12.5px; line-height: 1.35; color: var(--ink); }
.feed__amount { font-family: var(--font-mono); font-weight: 600; color: var(--gold-700); }
html[data-theme="dark"] .feed__amount { color: var(--gold-300); }
.feed__name { font-weight: 600; color: var(--ink); }
.feed__meta { font-size: 10.5px; color: var(--ink-faint); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }

/* ==========================================================================
   Earnings callout — the "outbid" honesty stat, before the footer. Centered,
   generous whitespace, a single huge mono figure in a glass pill so the
   number itself carries the section.
   ========================================================================== */
.earnings {
  max-width: 640px; margin: 10px auto; padding: 14px 20px;
  display: flex; flex-direction: column; align-items: center; text-align: center; gap: 9px;
}
.earnings__lede, .earnings__since { margin: 0 !important; }
.earnings__amount { margin: 0; }
.earnings__lede { margin: 0; font-family: var(--font-institutional); font-weight: 600; font-size: 13.5px; letter-spacing: 0.01em; color: var(--ink-mute); }
.earnings__lede a { color: var(--gold-700); font-weight: 700; text-decoration: underline; text-underline-offset: 2px; }
html[data-theme="dark"] .earnings__lede a { color: var(--gold-300); }
.earnings__amount {
  display: inline-flex; align-items: baseline; gap: 2px;
  padding: 18px 40px; border-radius: var(--radius-pill);
  font-family: var(--font-mono); font-weight: 600; font-size: clamp(40px, 6.4vw, 68px); letter-spacing: -0.02em;
  color: var(--ink); line-height: 1;
}
.earnings__currency { font-size: 0.46em; font-weight: 600; color: var(--gold-600); align-self: flex-start; margin-top: 0.22em; }
html[data-theme="dark"] .earnings__currency { color: var(--gold-300); }
.earnings__since { margin: 0; font-size: 13px; color: var(--ink-mute); }

/* ==========================================================================
   Footer
   ========================================================================== */
.footer {
  position: relative; margin-top: 0; padding: 16px 16px 30px; font-size: 12.5px; color: var(--ink-mute);
  background: var(--glass-strong); border-top: 1px solid var(--glass-border);
  backdrop-filter: var(--glass-blur); -webkit-backdrop-filter: var(--glass-blur);
  box-shadow: inset 0 1px 0 var(--glass-sheen), 0 -10px 28px rgba(20, 16, 8, 0.06);
}
.footer__inner { max-width: 860px; margin: 0 auto; display: grid; gap: 8px; padding-top: 4px; text-align: center; }
.footer__brand { display: flex; align-items: center; justify-content: center; gap: 6px; margin-bottom: 4px; opacity: 0.85; }
.footer__mark { width: 17px; height: 17px; flex: none; }
.footer__brand-name { font-family: var(--font-display); font-weight: 600; font-size: 12.5px; letter-spacing: -0.005em; color: var(--ink-soft); }
.footer__line { margin: 0; }
.footer__line--strong { color: var(--ink-soft); font-weight: 600; }
.footer__line--meta { opacity: 0.92; }
.footer__line--meta a { text-decoration: underline; text-underline-offset: 2px; font-weight: 600; }
.footer__line--meta code { background: rgba(0, 0, 0, 0.12); padding: 1px 5px; border-radius: 5px; }

/* ==========================================================================
   About / Legal
   ========================================================================== */
.legal, .about { max-width: 780px; margin: 40px auto; padding: 36px clamp(22px, 5vw, 44px); line-height: 1.65; }
.legal h1, .about h1 { font-weight: 600; margin-top: 0; font-size: clamp(28px, 4vw, 38px); color: var(--ink); }
.legal h2, .about h2 { font-weight: 600; font-size: 19px; color: var(--ink); margin: 28px 0 8px; }
.legal p, .legal li, .about p, .about li { color: var(--ink-soft); }
.legal__lede, .about__lede { color: var(--ink-mute); font-size: 15px; }
.legal code { background: rgba(0, 0, 0, 0.12); padding: 1px 5px; border-radius: 5px; }
.legal__back, .about__back a {
  display: inline-flex; align-items: center; gap: 6px; margin-bottom: 18px; font-size: 13.5px; font-weight: 700;
  padding: 8px 15px; border-radius: var(--radius-pill); background: var(--glass-soft); border: 1px solid var(--glass-border);
  text-decoration: none; color: var(--ink-soft); transition: transform 160ms var(--ease-out), background 200ms var(--ease-out);
}
.legal__back:hover, .about__back a:hover { background: rgba(255, 255, 255, 0.2); transform: translateX(-2px); }
.about__back { margin-top: 8px; }

.ledger {
  margin: 22px auto; padding: 20px 24px 26px; position: relative;
  max-width: 460px;
  background: linear-gradient(165deg, rgba(253, 231, 158, 0.14), var(--glass-strong) 50%);
  border: 1px solid var(--glass-border); box-shadow: var(--shadow-soft), inset 0 1px 0 var(--glass-sheen);
  /* till-slip: perforated top and bottom edges */
  --tooth: 12px;
  clip-path: polygon(
    0 8px, 3.5% 0, 7% 8px, 10.5% 0, 14% 8px, 17.5% 0, 21% 8px, 24.5% 0, 28% 8px, 31.5% 0, 35% 8px, 38.5% 0, 42% 8px, 45.5% 0, 49% 8px, 52.5% 0, 56% 8px, 59.5% 0, 63% 8px, 66.5% 0, 70% 8px, 73.5% 0, 77% 8px, 80.5% 0, 84% 8px, 87.5% 0, 91% 8px, 94.5% 0, 98% 8px, 100% 4px,
    100% calc(100% - 8px), 96.5% 100%, 93% calc(100% - 8px), 89.5% 100%, 86% calc(100% - 8px), 82.5% 100%, 79% calc(100% - 8px), 75.5% 100%, 72% calc(100% - 8px), 68.5% 100%, 65% calc(100% - 8px), 61.5% 100%, 58% calc(100% - 8px), 54.5% 100%, 51% calc(100% - 8px), 47.5% 100%, 44% calc(100% - 8px), 40.5% 100%, 37% calc(100% - 8px), 33.5% 100%, 30% calc(100% - 8px), 26.5% 100%, 23% calc(100% - 8px), 19.5% 100%, 16% calc(100% - 8px), 12.5% 100%, 9% calc(100% - 8px), 5.5% 100%, 2% calc(100% - 8px), 0 calc(100% - 4px)
  );
  transform: rotate(-0.6deg);
}
.ledger__head { margin: 4px 0 12px; text-align: center; font-family: var(--font-mono); font-size: 10.5px; letter-spacing: 0.14em; color: var(--ink-mute); }
.ledger__foot { margin: 14px 0 0; text-align: center; font-family: var(--font-mono); font-size: 10.5px; letter-spacing: 0.14em; color: var(--ink-mute); }
.ledger__hero { display: flex; flex-direction: column; align-items: center; gap: 2px; padding-bottom: 16px; margin-bottom: 6px; border-bottom: 1px solid var(--glass-border); }
.ledger__hero-num {
  font-family: var(--font-mono); font-weight: 600; font-size: clamp(30px, 5vw, 40px); letter-spacing: -0.02em;
  background: linear-gradient(180deg, var(--gold-500), var(--gold-700));
  -webkit-background-clip: text; background-clip: text; -webkit-text-fill-color: transparent;
}
html[data-theme="dark"] .ledger__hero-num { background: linear-gradient(180deg, #fdeeb0, #e8c35a); -webkit-background-clip: text; background-clip: text; }
.ledger__hero-lbl { font-family: var(--font-institutional); font-weight: 600; font-size: 11px; letter-spacing: 0.1em; text-transform: uppercase; color: var(--ink-mute); }
.ledger__rows { display: flex; flex-direction: column; }
.ledger__row { display: flex; align-items: baseline; gap: 10px; padding: 9px 2px; }
.ledger__row + .ledger__row { border-top: 1px dashed color-mix(in srgb, var(--glass-border) 60%, transparent); }
.ledger__key { font-family: var(--font-institutional); font-weight: 550; font-size: 13.5px; color: var(--ink-soft); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.ledger__dots { flex: 1; border-bottom: 2px dotted color-mix(in srgb, var(--ink-mute) 35%, transparent); transform: translateY(-4px); }
.ledger__val { font-family: var(--font-mono); font-weight: 600; font-size: 15px; color: var(--gold-700); white-space: nowrap; }
html[data-theme="dark"] .ledger__val { color: var(--gold-300); }

.about__note { font-size: 13px; color: var(--ink-faint); }

/* ==========================================================================
   Misc — Blazor chrome
   ========================================================================== */
#blazor-error-ui {
  display: none; position: fixed; bottom: 0; left: 0; right: 0; z-index: 100;
  background: var(--glass-strong); backdrop-filter: var(--glass-blur); -webkit-backdrop-filter: var(--glass-blur);
  border-top: 1px solid var(--glass-border); padding: 12px 18px; font-size: 14px; color: var(--ink);
}
#blazor-error-ui .reload { font-weight: 700; color: var(--gold-700); }
#blazor-error-ui .dismiss { cursor: pointer; float: right; opacity: 0.6; }
#blazor-error-ui .dismiss:hover { opacity: 1; }

/* ==========================================================================
   Reduced motion
   ========================================================================== */
@media (prefers-reduced-motion: reduce) {
  *, *::before, *::after { animation-duration: 0.01ms !important; animation-iteration-count: 1 !important; transition-duration: 0.01ms !important; scroll-behavior: auto !important; }
  .bg__sheen, .bg__blob { display: none; }
  .row { transition: background 0.01ms, box-shadow 0.01ms; }
}

/* ==========================================================================
   Mobile: sticky most-recent-tip bar (replaces sidebar + snackbars < 1100px)
   ========================================================================== */
.mobiletip {
  display: none;
  position: sticky; top: 55px; z-index: 18;
  margin: 0; padding: 7px 16px; border-radius: 0;
  border-left: 0; border-right: 0; border-top: 0;
  background: color-mix(in srgb, var(--glass) 55%, transparent);
  align-items: center; gap: 8px; font-family: var(--font-institutional); font-size: 12px; color: var(--ink);
  transition: box-shadow 300ms var(--ease-out), border-color 300ms var(--ease-out), background 300ms var(--ease-out);
}
.mobiletip--fresh { background: color-mix(in srgb, rgba(253, 231, 158, 0.55) 60%, transparent); }
.mobiletip__dot { width: 7px; height: 7px; border-radius: 50%; background: var(--good); box-shadow: 0 0 0 3px var(--good-soft); flex: none; }
.mobiletip__flag { border-radius: 3px; flex: none; }
.mobiletip__text { white-space: nowrap; overflow: hidden; text-overflow: ellipsis; min-width: 0; }
.mobiletip--fresh { border-color: rgba(217, 172, 51, 0.65); box-shadow: 0 8px 22px rgba(217, 172, 51, 0.3); }
@media (max-width: 1099px) {
  .mobiletip { display: flex; }
  .feed { display: none; }
  .snacks { display: none; }
}
@media (max-width: 640px) {
  .hero__sub { font-size: 14px; }
  .hero__sub-line--dare { font-size: 1.04em; }
}

.gd-confetti { position: fixed; width: 7px; height: 10px; border-radius: 2px; pointer-events: none; z-index: 95; }

/* ==========================================================================
   Mobile polish: fold density, statue, search-first, money-forward rows
   ========================================================================== */
@media (max-width: 900px) {
  /* Anchored from the TOP (not bottom) on purpose: .hero has no explicit
     height, so it's only ever as tall as its content (stats pill + title +
     sub), and that content height shifts with copy length / font scaling.
     A `bottom` offset chases that moving edge and is what caused the old
     statue to spill past it into the leaderboard card below.

     Re-measured directly off a hand-annotated screenshot (pixel-sampled, not
     re-derived from the cascade) rather than the old guess of ~269px total /
     a 48px 2-row stats pill: at 390pt width the pill is actually a single
     row (~27pt tall — .stats-pill__link fits alongside the rest, it doesn't
     wrap), so hero-top-to-pill-top is ~10px padding, title spans roughly
     36–166px from hero's top padding edge (matches the 130px 3-line estimate
     well), subtitle ~189–239px, and the hero's own visible bottom (transition
     into the leaderboard card) sits at ~250px — noticeably less than the old
     269px estimate. The user's hand-drawn "statue lane" box measured out to
     roughly top:40px/bottom:242px, right-inset ~2px (nearly flush with the
     hero's right padding edge), width ~104px. That's narrower than the old
     246px-tall statue (which renders ~152px wide) would allow, so the statue
     is now sized to the box's width first (height follows from the fixed
     0.6167 aspect ratio) with a few pt of margin on every side, then
     bottom-aligned within the box: top:80px + height:159px puts its bottom
     edge at ~239px, ~11px shy of the hero's measured ~250px bottom edge —
     comfortably inside both the drawn box and the old overflow danger zone. */
  .hero__statue { display: block; position: absolute; right: -3px; top: 68px; bottom: auto; z-index: 0; opacity: 0.8; }   /* shifted 3px down per instruction */
  .hero__statue-img { height: 191px; filter: none; }   /* 159px +20%; also drop the desktop drop-shadow — it bled ~40px of visible shadow past the image's own box, past the hero, and into the card below */
  .hero__statue::before, .hero__statue-shadow { display: none; }   /* the spotlight read as a dark box on phones */
  .hero__copy { position: relative; z-index: 1; transform: translateX(-16px); }   /* nudge left so the statue (pulled left too, above) sits behind the text instead of beside it */
  .hero__title { transform: translateX(-35px); }   /* extra nudge on top of .hero__copy's shared -16px; slightly more than .hero__sub's so the two don't read as one flat block */
  .hero__sub { transform: translateX(-6px); }       /* extra nudge on top of .hero__copy's shared -16px */
}
@media (max-width: 640px) {
  .hero { padding-top: 10px; padding-bottom: 4px; }
  .hero__inner { row-gap: 8px; }
  .hero__title { font-size: 38px; }
  .hero__sub { font-size: 12.5px; max-width: 34ch; margin-left: auto; margin-right: auto; line-height: 1.5; }
  .hero__sub-line--dare { font-size: 1.05em; }
  .stats-pill { font-size: 11px; padding: 7px 14px; gap: 6px; flex-wrap: wrap; justify-content: center; row-gap: 2px; white-space: normal; }
  .stats-pill__visitors, .stats-pill__sep:first-of-type, .stats-pill__sep:last-of-type { display: none; }
  .stats-pill__tips { flex-basis: auto; }
  .stats-pill__link { flex-basis: 100%; text-align: center; }
  .hero__sub-line--argue { display: none; }   /* one clean line of copy on phones */
  .board__sub { display: none; }
  .board__head { margin: 0; }
  .board__head .board__title { margin-left: 2px; font-size: 19.5px; padding-top: 5px; }   /* +3px over the 16.5px mobile-clamped size, plus breathing room above */
  .board > .action { order: 2; }                  /* search above tabs on mobile (was tabs-first) */
  .board > .tabs { order: 3; }
  .board > .tabs .tab { flex: 0 0 auto; }         /* pack tabs tight; rows fill before wrapping */
  .board > .tabs { justify-content: center; }     /* shorter last row sits centered */
  .board { gap: 4px; }
  .action { flex-direction: row; flex-wrap: wrap; align-items: stretch; gap: 6px; }
  .action__field--name { flex: 1 1 100%; }        /* the input always keeps its own full-width line */
  .action__btn { width: auto; flex: 1 1 auto; font-size: 12px; padding: 8px 10px; }
  .action__notranked { flex: 0 0 auto; font-size: 11.5px; padding: 0 10px; }
  .tab { padding: 6px 7.5px; font-size: 11px; letter-spacing: 0.01em; }
  .tabs { gap: 2px; padding: 3px; }
  .board { gap: 5px; padding: 10px 10px 14px; }
  /* money-forward rows: no boxes, big rank, big gold amount */
  .row { background: transparent; background-image: linear-gradient(270deg, rgba(var(--sport-rgb), 0.12), transparent 40%); border-color: transparent; border-radius: 10px; }
  .row:not(.row--first):not(.row--p2):not(.row--p3) { border-bottom: 1px solid color-mix(in srgb, var(--glass-border) 55%, transparent); }
  .row__pos-badge { background: transparent; border: 0; font-size: 16px; font-weight: 700; padding: 0; }
  .row__total { font-size: 17px; color: var(--gold-700); }
  html[data-theme="dark"] .row__total { color: var(--gold-300); }
  .row__country { font-size: 10.5px; }
  .earnings { margin: 10px 12px; padding: 14px 16px; }
  .board-section { padding-bottom: 0; }
}

/* Light mode, mobile only: the desktop-tuned .hero__goat blur radii (sized for the
   ~50px clamped desktop glyphs) are far too large relative to the 38px mobile glyphs
   set above, so the shadow dominates the thin italic strokes and reads as blur rather
   than crisp text. Same one-shadow-plus-glow recipe as desktop, scaled down further. */
@media (max-width: 640px) {
  html:not([data-theme="dark"]) .hero__goat {
    text-shadow: 0 1px 1px rgba(52, 38, 10, 0.5);
    filter: drop-shadow(0 1.5px 2px rgba(185, 140, 33, 0.3));
  }
}

/* Light mode, mobile only: the hero copy sits on the darker gold vignette in the
   mobile crop — lift it to cream there. Desktop/web uses the dark-ink default
   below (with a halo shadow) instead, since the desktop crop is lighter/tan
   and cream text washes out on it. */
@media (max-width: 640px) {
  html:not([data-theme="dark"]) .hero__sub-line--argue { color: rgba(255, 250, 232, 0.78); text-shadow: 0 1px 2px rgba(36, 28, 11, 0.35); }
  html:not([data-theme="dark"]) .hero__sub-line--dare { color: #fdf8ea; text-shadow: 0 1px 3px rgba(36, 28, 11, 0.45); }
  html:not([data-theme="dark"]) .hero__sub-line--dare em { color: #f4cf5e; }
}

/* Light mode, desktop/web only: keep the base dark-ink color (see .hero__sub-line--argue/
   --dare above) for contrast against the lighter/tan desktop crop, but add a soft pale
   halo behind the text so it still separates from the busy multi-tone gold background. */
@media (min-width: 641px) {
  html:not([data-theme="dark"]) .hero__sub-line--argue { text-shadow: 0 1px 3px rgba(255, 252, 235, 0.5); }
  html:not([data-theme="dark"]) .hero__sub-line--dare { text-shadow: 0 1px 3px rgba(255, 252, 235, 0.5); }
}

html:not([data-theme="dark"]) .earnings__lede, html:not([data-theme="dark"]) .earnings__since { color: rgba(60, 48, 20, 0.9); }

/* Earnings band: readable on any background */
.earnings {
  background: color-mix(in srgb, var(--glass) 62%, transparent);
  border: 1px solid var(--glass-border); border-radius: var(--radius-md);
  box-shadow: inset 0 1px 0 var(--glass-sheen);
}

/* Concentric rounding: 14px frame − 3px padding = 11px button */
.action .action__btn, .action .action__btn--add { border-radius: 11px; }

.row__delta--zero { color: var(--ink-faint); background: color-mix(in srgb, var(--ink-faint) 12%, transparent); }

.row__pos { position: relative; display: flex; flex-direction: row; align-items: baseline; justify-content: center; gap: 5px; } /* gap nudged 4→5px so the ▲/▼ delta reads centered between badge and flag, not hugging the badge */
.row__rankdelta { font-family: var(--font-mono); font-weight: 600; font-size: 10.5px; line-height: 1; color: var(--ink-faint); }
.row__rankdelta--up { color: var(--good); }
.row__rankdelta--down { color: #d9534f; }
