    body {
      background: #ffffff; color: #09090b;
      /* Crisper text on macOS (make-interfaces-feel-better #8) */
      -webkit-font-smoothing: antialiased;
      -moz-osx-font-smoothing: grayscale;
      /* Avoid orphans in body copy (#10) — headings override to balance below */
      text-wrap: pretty;
    }
    /* Balanced, non-lopsided headings (#10) */
    h1, h2, h3, h4 { text-wrap: balance; }
    /* Buttons/nav inherit text-wrap:pretty from body, which can rebalance short labels onto
       two lines — reset interactive controls to normal wrapping site-wide. */
    button, .hover-btn, .nav-link { text-wrap: wrap; }
    /* Ken 2026-06-28: front-page hero CTAs — keep their original (heavier, default) text
       rendering AND never wrap the label (the tight hero flex row was breaking "Explore
       rankings" onto two lines). */
    #page-home .hover-btn { -webkit-font-smoothing: auto; -moz-osx-font-smoothing: auto; white-space: nowrap; }
    .nav-active { color: #09090b; background: rgba(0,0,0,0.04); }
    .page { display: none; }
    .page.active { display: block; }

    /* ====== Nav links (unified) ====== */
    .nav-link {
      display: inline-flex; align-items: center; gap: 4px;
      white-space: nowrap; border-radius: 8px;
      padding: 7px 12px; font-size: 13px; font-weight: 500;
      color: #6b7280; cursor: pointer; background: transparent; border: none;
      transition: background-color 200ms ease, color 200ms ease, transform 160ms cubic-bezier(0.23,1,0.32,1);
    }
    .nav-link:active { transform: scale(0.97); }
    @media (hover: hover) and (pointer: fine) {
      .nav-link:hover { color: #0f172a; background: #f1f5f9; }
    }
    .nav-link.nav-active { color: #0f172a; background: rgba(0,0,0,0.05); }

    /* ====== Nav "More ▾" dropdown ====== */
    /* static (not relative) so the megamenu box anchors to the sticky <header>, letting it
       sit flush on the RIGHT side of the screen instead of hanging left off the More button. */
    .nav-more-wrap { position: static; }
    .nav-more-btn .nav-more-caret { transition: transform 200ms cubic-bezier(0.23,1,0.32,1); color: #94a3b8; }
    .nav-more-wrap.open .nav-more-caret { transform: rotate(180deg); }
    .nav-more-dropdown {
      /* Box megamenu: every category visible at once across 3 columns, no scroll. */
      display: grid; grid-template-columns: repeat(3, minmax(168px, 1fr));
      gap: 2px 14px; align-items: start;
    }
    .nav-more-col { min-width: 0; }
    .nav-more-col .nav-more-header { margin-top: 0; }
    .nav-more-dropdown {
      position: absolute; top: calc(100% + 8px); right: 140px; left: auto;
      min-width: 580px; max-width: calc(100vw - 32px); background: white;
      border: 1px solid #e5e7eb; border-radius: 14px;
      box-shadow: 0 12px 32px rgba(0,0,0,0.10);
      padding: 14px 16px; z-index: 100;
      opacity: 0; pointer-events: none; transform: translateY(-6px) scale(0.97);
      transform-origin: top right;
      transition: opacity 200ms cubic-bezier(0.23,1,0.32,1), transform 200ms cubic-bezier(0.23,1,0.32,1);
    }
    .nav-more-wrap.open .nav-more-dropdown {
      opacity: 1; pointer-events: auto; transform: translateY(0) scale(1);
    }
    .nav-more-header { font-size: 10px; font-weight: 800; text-transform: uppercase; letter-spacing: 0.06em; color: #94a3b8; padding: 8px 12px 2px; margin-top: 4px; }
    .nav-more-header:first-child { margin-top: 0; }
    .mb-nav-header { font-size: 10px; font-weight: 800; text-transform: uppercase; letter-spacing: 0.06em; color: #94a3b8; padding: 10px 12px 2px; }
    .nav-more-item {
      display: block; padding: 8px 12px; border-radius: 8px;
      font-size: 13px; color: #475569; font-weight: 500;
      text-decoration: none;
      transition: background-color 150ms ease, color 150ms ease;
    }
    @media (hover: hover) and (pointer: fine) {
      .nav-more-item:hover { background: #f1f5f9; color: #0f172a; }
    }
    .nav-more-item:active { background: #e2e8f0; }
    .nav-more-item.nav-active { background: rgba(0,0,0,0.05); color: #0f172a; font-weight: 600; }

    /* ====== Selection Sunday banner ====== */
    .ss-banner {
      display: flex; align-items: center; justify-content: center; gap: 10px;
      padding: 7px 16px; font-size: 12px; font-weight: 500;
      background: linear-gradient(90deg, #0f172a 0%, #1e293b 50%, #0f172a 100%);
      color: white; position: relative; overflow: hidden; min-height: 32px;
    }
    .ss-banner strong { font-weight: 700; color: #fb923c; }
    .ss-banner .ss-cta {
      display: inline-flex; align-items: center; gap: 4px;
      padding: 3px 10px; border-radius: 6px;
      background: rgba(251,146,60,0.15); color: #fb923c;
      font-size: 11px; font-weight: 600; text-decoration: none;
      transition: background-color 200ms ease, transform 160ms cubic-bezier(0.23,1,0.32,1);
    }
    .ss-banner .ss-cta:active { transform: scale(0.96); }
    @media (hover: hover) and (pointer: fine) {
      .ss-banner .ss-cta:hover { background: rgba(251,146,60,0.25); }
    }
    @media (max-width: 640px) {
      .ss-banner { font-size: 11px; padding: 6px 10px; gap: 6px; }
    }

    /* SS banner — single countdown sweeping left -> right (compositor-only transform) */
    .ss-marquee {
      position: absolute; left: 0; top: 50%;
      transform: translate(-100%, -50%);
      display: inline-flex; align-items: center; gap: 7px;
      white-space: nowrap; will-change: transform;
      animation: ssMarchLR 26s linear infinite;
    }
    .ss-marquee .ss-ic { width: 14px; height: 14px; color: #fb923c; flex: none; }
    @keyframes ssMarchLR {
      from { transform: translate(-100%, -50%); }
      to   { transform: translate(100vw, -50%); }
    }
    @media (prefers-reduced-motion: reduce) {
      .ss-marquee { animation: none; }
      .ss-marquee:first-of-type { left: 50%; transform: translate(-50%, -50%); }
      .ss-marquee:not(:first-of-type) { display: none; }
    }
    /* Phones: the 3-item parade is spaced by thirds of the sweep distance, which
       shrinks with viewport width — under ~640px the items physically overlap
       ("crumpled"). Show only the countdown; it sweeps alone with room to spare. */
    @media (max-width: 640px) {
      .ss-marquee:not(:first-of-type) { display: none; }
    }

    /* Mobile hamburger menu: 27 items run ~1000px tall — taller than a phone
       screen — and the menu sits inside the sticky header, so without its own
       scroll the bottom items are unreachable. Cap to the space below the 56px
       header bar and scroll within. dvh tracks the real visible height as the
       mobile browser chrome collapses (vh fallback for older WebKit). */
    #mobile-nav {
      /* 88px = 32px SS banner + 56px header bar (the menu's top edge at page top).
         After the banner scrolls away the menu is merely 32px shorter than the
         space available — still fully scrollable, never cut off. */
      max-height: calc(100vh - 88px);
      max-height: calc(100dvh - 88px);
      overflow-y: auto;
      overscroll-behavior: contain;
      -webkit-overflow-scrolling: touch;
    }

    /* ====== Global search button + modal ====== */
    .global-search-btn {
      display: inline-flex; align-items: center; gap: 6px;
      padding: 6px 10px 6px 8px; border-radius: 8px;
      border: 1px solid #e5e7eb; background: white;
      font-size: 12px; color: #6b7280; cursor: pointer;
      transition: border-color 200ms ease, background-color 200ms ease, transform 160ms cubic-bezier(0.23,1,0.32,1);
    }
    .global-search-btn:active { transform: scale(0.97); }
    @media (hover: hover) and (pointer: fine) {
      .global-search-btn:hover { border-color: #cbd5e1; background: #f8fafc; color: #0f172a; }
    }
    .global-search-shortcut {
      padding: 1px 5px; border-radius: 4px;
      background: #f1f5f9; color: #64748b;
      font-size: 10px; font-family: ui-monospace, monospace;
      margin-left: 4px;
    }

    .gs-overlay {
      display: none; position: fixed; inset: 0; z-index: 205; /* above page modals (200) so ⌘K always paints on top */
      background: rgba(0,0,0,0.4); backdrop-filter: blur(4px);
      align-items: flex-start; justify-content: center;
      /* Scrollable + bottom padding: at 375x812 the results list runs past the fold,
         and with overflow visible there is no way to reach the last rows. Bottom
         padding also keeps the final result clear of the iOS keyboard. */
      padding: 12vh 16px 24px;
      overflow-y: auto; -webkit-overflow-scrolling: touch; overscroll-behavior: contain;
    }
    .gs-overlay.open { display: flex; animation: gs-fade-in 200ms cubic-bezier(0.23,1,0.32,1); }
    @keyframes gs-fade-in { from { opacity: 0; } to { opacity: 1; } }
    .gs-modal {
      background: white; border-radius: 16px; width: 100%; max-width: 560px;
      box-shadow: 0 20px 60px rgba(0,0,0,0.18);
      overflow: hidden;
      animation: gs-pop 280ms cubic-bezier(0.23,1,0.32,1);
    }
    @keyframes gs-pop {
      from { opacity: 0; transform: scale(0.96) translateY(-8px); filter: blur(4px); }
      to   { opacity: 1; transform: scale(1) translateY(0); filter: blur(0); }
    }
    .gs-input-row {
      display: flex; align-items: center; gap: 10px;
      padding: 16px 20px; border-bottom: 1px solid #f1f5f9;
    }
    .gs-input-row input {
      flex: 1; border: none; outline: none; font-size: 16px;
      color: #0f172a; background: transparent;
    }
    .gs-input-row input::placeholder { color: #94a3b8; }
    .gs-results { max-height: 50vh; overflow-y: auto; padding: 8px 8px 12px; }
    .gs-result {
      display: flex; align-items: center; gap: 10px;
      padding: 8px 12px; border-radius: 8px; cursor: pointer;
      transition: background-color 150ms ease;
    }
    .gs-result.gs-active { background: #f1f5f9; }
    @media (hover: hover) and (pointer: fine) {
      .gs-result:hover { background: #f1f5f9; }
    }
    .gs-result:active { background: #e2e8f0; }
    .gs-result img { width: 24px; height: 24px; object-fit: contain; }
    .gs-result-name { font-size: 14px; font-weight: 600; color: #0f172a; flex: 1; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
    .gs-result-meta { font-size: 11px; color: #94a3b8; flex-shrink: 0; }
    .gs-user-avatar { width: 24px; height: 24px; border-radius: 50%; background: #0f172a; color: #fff; display: inline-flex; align-items: center; justify-content: center; font-size: 11px; font-weight: 700; flex: none; }
    .take-author-link { background: none; border: none; padding: 0; font: inherit; color: inherit; cursor: pointer; }
    @media (hover: hover) and (pointer: fine) { .take-author-link:hover { text-decoration: underline; } }
    .take-del.is-admin { color: #dc2626; }
    .gs-empty { padding: 24px; text-align: center; font-size: 13px; color: #94a3b8; }
    .gs-hint {
      padding: 8px 16px; border-top: 1px solid #f1f5f9;
      font-size: 11px; color: #94a3b8;
      display: flex; align-items: center; justify-content: space-between;
    }
    .gs-hint kbd {
      padding: 1px 5px; background: #f1f5f9; border-radius: 4px;
      font-family: ui-monospace, monospace; font-size: 10px; color: #64748b;
    }

    /* ====== Accounts + Favorites (UI shell) ====== */
    /* overflow-y:auto is load-bearing, not polish (iPhone audit 2026-07-26): the card is
       ~541px tall, so at 844x390 landscape its bottom 194px — submit button AND the
       Turnstile widget — sat below the fold with scrollTop pinned at 0. Portrait fits
       until the ~336px iOS keyboard opens and covers the same controls. The bottom
       padding gives the card room to clear the keyboard once it can scroll. */
    .auth-overlay { display:none; position:fixed; inset:0; z-index:210; background:rgba(0,0,0,0.4); backdrop-filter:blur(4px); align-items:flex-start; justify-content:center; padding:10vh 16px 24px; overflow-y:auto; -webkit-overflow-scrolling:touch; overscroll-behavior:contain; }
    .auth-overlay.open { display:flex; animation: gs-fade-in 200ms cubic-bezier(0.23,1,0.32,1); }
    /* Auth card — ported from the SignIn2 component (boss 2026-07-25): soft top-down
       tint, 24px radius, centered icon badge + heading, icon-prefixed inputs, dashed
       "or" rule. Accent stays Bracketverse orange rather than the component's blue so
       the modal matches the rest of the site. */
    .auth-modal { background:linear-gradient(180deg,#fff7ed 0%,#ffffff 42%); border:1px solid #fed7aa; border-radius:24px; width:100%; max-width:400px; box-shadow:0 20px 60px rgba(0,0,0,0.2); overflow:hidden; animation: gs-pop 280ms cubic-bezier(0.23,1,0.32,1); }
    /* The component drops visible labels for placeholders; keep them for screen
       readers. Defined here rather than relying on Tailwind — tw.css is a
       precompiled subset and does not currently include sr-only. */
    .sr-only { position:absolute; width:1px; height:1px; padding:0; margin:-1px; overflow:hidden; clip:rect(0,0,0,0); white-space:nowrap; border:0; }
    .auth-head { padding:30px 30px 4px; display:flex; flex-direction:column; align-items:center; text-align:center; }
    .auth-badge { width:54px; height:54px; border-radius:16px; background:#fff; color:#0f172a; display:flex; align-items:center; justify-content:center; margin-bottom:18px; box-shadow:0 6px 18px rgba(15,23,42,0.10); }
    .auth-title { font-size:21px; font-weight:700; color:#0f172a; letter-spacing:-0.02em; margin-bottom:6px; }
    .auth-sub { font-size:13px; color:#64748b; line-height:1.5; }
    .auth-body { padding:18px 30px 24px; }
    .auth-field { margin-top:12px; position:relative; }
    .auth-field-icon { position:absolute; left:13px; top:50%; transform:translateY(-50%); color:#94a3b8; display:flex; pointer-events:none; }
    .auth-field input { width:100%; padding:11px 13px 11px 38px; border:1px solid #e5e7eb; border-radius:12px; background:#f9fafb; font-size:14px; color:#0f172a; outline:none; transition:border-color 150ms ease, box-shadow 150ms ease, background-color 150ms ease; }
    .auth-field input::placeholder { color:#9ca3af; }
    .auth-field input:focus { background:#fff; border-color:#F97316; box-shadow:0 0 0 3px rgba(249,115,22,0.12); }
    /* Neutral gradient button from the SignIn2 component — no hue, shading only
       (its from-gray-700 -> to-gray-900 ramp + hover:brightness-105). Shadow is
       neutral black too, so nothing tints the button. */
    .auth-submit { width:100%; margin-top:18px; padding:12px; border:none; border-radius:12px; background:linear-gradient(180deg,#374151,#111827); color:#fff; font-size:14px; font-weight:600; cursor:pointer; box-shadow:0 4px 14px rgba(17,24,39,0.22); transition:transform 150ms cubic-bezier(0.23,1,0.32,1), box-shadow 150ms ease, filter 150ms ease; }
    @media (hover:hover) and (pointer:fine){ .auth-submit:hover { filter:brightness(1.05); box-shadow:0 6px 20px rgba(17,24,39,0.30); } }
    .auth-submit:active { transform:scale(0.98); }
    /* ---- approved state (boss 2026-07-30) ----
       Login success is a RARE moment (once a session, often once a device for months),
       which is the one frequency band that earns motion — a nav toggle at 100x/day would
       not. Transitions, not keyframes, so an Escape mid-state retargets instead of
       restarting. The button's label blurs out UNDERNEATH while the green layer scales in
       on top: an unmasked crossfade would read as two words overlapping, and 2px of blur
       bridges them into one transformation. */
    .auth-submit-wrap { position:relative; margin-top:18px; }
    .auth-submit-wrap > .auth-submit { margin-top:0; transition:transform 150ms cubic-bezier(0.23,1,0.32,1), box-shadow 150ms ease, filter 160ms cubic-bezier(0.23,1,0.32,1), opacity 160ms cubic-bezier(0.23,1,0.32,1); }
    .auth-submit-wrap.is-approved > .auth-submit { filter:blur(2px); opacity:0; pointer-events:none; }
    .auth-approved {
      position:absolute; inset:0; display:flex; align-items:center; justify-content:center; gap:8px;
      border-radius:12px; background:linear-gradient(180deg,#16a34a,#15803d); color:#fff;
      font-size:14px; font-weight:600; letter-spacing:.01em;
      box-shadow:0 4px 14px rgba(21,128,61,0.28);
      opacity:0; transform:scale(0.96); pointer-events:none;
      transition:opacity 160ms cubic-bezier(0.23,1,0.32,1), transform 160ms cubic-bezier(0.23,1,0.32,1);
    }
    .auth-submit-wrap.is-approved > .auth-approved { opacity:1; transform:scale(1); }
    /* 30 is comfortably longer than the tick path, so it starts fully retracted. */
    .auth-approved-tick { stroke-dasharray:30; stroke-dashoffset:30; transition:stroke-dashoffset 260ms cubic-bezier(0.23,1,0.32,1) 90ms; }
    .auth-submit-wrap.is-approved .auth-approved-tick { stroke-dashoffset:0; }
    /* Reduced motion = fewer and gentler, not zero: the color and the label still change
       (they carry the meaning), only the movement, the blur and the draw are dropped. */
    @media (prefers-reduced-motion: reduce){
      .auth-submit-wrap > .auth-submit,
      .auth-approved { transition:opacity 140ms ease; }
      .auth-submit-wrap.is-approved > .auth-submit { filter:none; }
      .auth-approved { transform:none; }
      .auth-submit-wrap.is-approved > .auth-approved { transform:none; }
      .auth-approved-tick { transition:none; stroke-dashoffset:0; }
    }
    .bv-reduce-motion .auth-submit-wrap > .auth-submit,
    .bv-reduce-motion .auth-approved { transition:opacity 140ms ease; }
    .bv-reduce-motion .auth-submit-wrap.is-approved > .auth-submit { filter:none; }
    .bv-reduce-motion .auth-approved,
    .bv-reduce-motion .auth-submit-wrap.is-approved > .auth-approved { transform:none; }
    .bv-reduce-motion .auth-approved-tick { transition:none; stroke-dashoffset:0; }
    .auth-google { width:100%; margin-top:10px; padding:12px; border:1px solid #e5e7eb; border-radius:12px; background:#fff; color:#0f172a; font-size:14px; font-weight:600; cursor:pointer; display:flex; align-items:center; justify-content:center; gap:9px; transition:background-color 150ms ease, transform 150ms cubic-bezier(0.23,1,0.32,1); }
    @media (hover:hover) and (pointer:fine){ .auth-google:hover { background:#f3f4f6; } }
    .auth-google:active { transform:scale(0.98); }
    /* Turnstile renders a fixed ~300px iframe; the card's content column is wider,
       so centre it or it sits visibly short of the inputs' right edge. */
    .auth-captcha:not(:empty) { display:flex; justify-content:center; }
    .auth-divider { display:flex; align-items:center; gap:10px; margin:20px 0 2px; color:#9ca3af; font-size:11px; font-weight:600; letter-spacing:0.02em; }
    .auth-divider::before, .auth-divider::after { content:""; flex:1; border-top:1px dashed #e5e7eb; }
    .auth-toggle { margin-top:16px; text-align:center; font-size:13px; color:#64748b; }
    .auth-toggle button { background:none; border:none; color:#F97316; font-weight:700; cursor:pointer; font-size:13px; transition:color 150ms ease, transform 140ms cubic-bezier(0.23,1,0.32,1); }
    @media (hover:hover) and (pointer:fine){ .auth-toggle button:hover { color:#ea580c; } }
    .auth-toggle button:active { transform:scale(0.97); }
    .auth-nudge { margin-top:14px; text-align:center; font-size:11px; color:#cbd5e1; }
    .am-x { position:absolute; top:15px; right:16px; background:none; border:none; cursor:pointer; color:#94a3b8; font-size:22px; line-height:1; padding:4px; border-radius:7px; transition:color 150ms ease, transform 120ms cubic-bezier(0.23,1,0.32,1); }
    .am-x::before { content:""; position:absolute; inset:-7px; }
    @media (hover:hover) and (pointer:fine){ .am-x:hover { color:#0f172a; } }
    .am-x:active { transform:scale(0.97); }
    .auth-msg { margin-top:12px; font-size:12.5px; padding:9px 12px; border-radius:9px; display:none; }
    .auth-msg.show { display:block; }
    .auth-msg.info { background:#eff6ff; color:#1d4ed8; }
    .auth-msg.err { background:#fef2f2; color:#dc2626; }
    .auth-msg.ok { background:#f0fdf4; color:#15803d; }
    /* account chip + menu */
    .account-chip { display:flex; align-items:center; gap:6px; padding:2px; border:none; background:none; cursor:pointer; }
    .account-avatar { width:30px; height:30px; border-radius:999px; background:linear-gradient(180deg,#F97316,#EA580C); color:#fff; font-weight:800; font-size:13px; display:flex; align-items:center; justify-content:center; box-shadow:0 2px 8px rgba(249,115,22,0.35); transition:transform 150ms cubic-bezier(0.23,1,0.32,1); }
    .account-chip:active .account-avatar { transform:scale(0.97); }
    .account-menu { position:absolute; right:0; top:42px; min-width:200px; background:#fff; border:1px solid #e5e7eb; border-radius:12px; box-shadow:0 12px 30px rgba(0,0,0,0.12); padding:6px; display:none; z-index:60; }
    .account-menu.open { display:block; animation: gs-pop 200ms cubic-bezier(0.23,1,0.32,1); transform-origin:top right; }
    .account-menu-email { font-size:12px; color:#94a3b8; padding:8px 10px 7px; border-bottom:1px solid #f1f5f9; margin-bottom:4px; word-break:break-all; }
    .account-menu-item:active { background: #e2e8f0; }
    .account-menu-item { display:block; width:100%; text-align:left; padding:8px 10px; border:none; background:none; border-radius:8px; font-size:13px; font-weight:600; color:#0f172a; cursor:pointer; transition:background-color 120ms ease; }
    @media (hover:hover) and (pointer:fine){ .account-menu-item:hover { background:#f8fafc; } }
    /* favorite star */
    /* Follow + Share sit side-by-side (row), not stacked (boss 2026-06-14). Wrapper takes the
       align-self/margin so the buttons themselves stay simple inline-flex pills. */
    /* Even vertical rhythm under the rank pills: pills → Follow/Share → Automatic Bid,
       equal gaps (boss 2026-06-14: swapped the badge below the buttons + tidied spacing). */
    .team-hero-actions { display:flex; flex-wrap:wrap; gap:7px; align-self:flex-start; margin-top:0; }
    .team-autobid-row { align-self:flex-start; }
    .team-autobid-row:not(:empty) { margin-top:0; }
    /* Follow + Share ARE the house hover-btn filter pills (boss 2026-06-14) — `hover-btn
       hover-btn-light hover-btn-sm`, same as the Most Cursed "All / Power 5 / Mid Bluebloods"
       filters, so they get the cool hover-circle ripple. These rules only size the icon + force
       equal width; the pill look + ripple come from the .hover-btn component itself. */
    .team-hero-action { min-width:98px; justify-content:center; }
    .team-hero-action svg { width:14px; height:14px; }
    .team-hero-action.is-faved { background:linear-gradient(180deg,#F97316,#EA580C); color:#fff; box-shadow:0 4px 14px rgba(249,115,22,0.3); }
    .team-hero-action.is-faved svg { fill:#fff; stroke:#fff; }
    .fav-star.is-faved svg { fill:#fff; stroke:#fff; }
    /* Your Teams home strip */
    .your-teams { max-width:72rem; margin:0 auto; padding:22px 16px 0; }
    .your-teams-head { display:flex; align-items:center; gap:8px; margin-bottom:12px; }
    .your-teams-head h2 { font-size:15px; font-weight:800; color:#0f172a; letter-spacing:-0.01em; }
    .your-teams-row { display:flex; gap:10px; overflow-x:auto; padding-bottom:6px; }
    .yt-card { flex:0 0 auto; display:flex; align-items:center; gap:9px; padding:9px 15px 9px 10px; border:1px solid #e5e7eb; border-radius:12px; background:#fff; cursor:pointer; transition:transform 150ms cubic-bezier(0.23,1,0.32,1), box-shadow 150ms ease; }
    @media (hover:hover) and (pointer:fine){ .yt-card:hover { transform:translateY(-2px); box-shadow:0 8px 20px rgba(0,0,0,0.07); } }
    .yt-card:active { transform: scale(0.97); }
    .yt-card img { width:30px; height:30px; object-fit:contain; }
    .yt-card .yt-name { font-size:13px; font-weight:700; color:#0f172a; }
    .yt-card .yt-rec { font-size:11px; color:#94a3b8; }
    /* favorite nudge toast */
    .fav-nudge { position:fixed; bottom:22px; left:50%; transform:translateX(-50%) translateY(8px); background:#0f172a; color:#fff; font-size:13px; font-weight:600; padding:11px 16px 11px 18px; border-radius:999px; box-shadow:0 10px 30px rgba(0,0,0,0.25); opacity:0; pointer-events:none; transition:opacity 220ms ease, transform 220ms cubic-bezier(0.23,1,0.32,1); z-index:205; display:flex; align-items:center; } /* below auth-overlay (210) so the toast never floats over the modal */
    .fav-nudge.show { opacity:1; transform:translateX(-50%) translateY(0); pointer-events:auto; }
    .fav-nudge button { background:#F97316; color:#fff; border:none; border-radius:999px; padding:5px 13px; font-weight:700; font-size:12px; margin-left:11px; cursor:pointer; transition:background-color 150ms ease, transform 150ms cubic-bezier(0.23,1,0.32,1); }
    @media (hover:hover) and (pointer:fine){ .fav-nudge button:hover { background:#ea580c; } }
    .fav-nudge button:active { transform:scale(0.97); }
    @media (prefers-reduced-motion: reduce){ .fav-nudge { transition:opacity 200ms ease; } .auth-modal, .account-menu.open, .gs-modal, .take-post-card { animation:none; } }
    /* ====== Profile page ====== */
    .pf-card { background:#fff; border:1px solid #e5e7eb; border-radius:16px; }
    .pf-id { display:flex; align-items:center; gap:16px; padding:22px; margin-bottom:20px; }
    .pf-avatar { width:60px; height:60px; border-radius:999px; background:linear-gradient(180deg,#F97316,#EA580C); color:#fff; font-weight:800; font-size:26px; display:flex; align-items:center; justify-content:center; box-shadow:0 4px 14px rgba(249,115,22,0.3); flex:none; }
    .pf-name { font-size:20px; font-weight:800; color:#0f172a; letter-spacing:-0.01em; }
    .pf-email { font-size:13px; color:#64748b; margin-top:2px; }
    .pf-since { font-size:12px; color:#94a3b8; margin-top:4px; }
    /* "Founding Member" badge — launch-era accounts; click opens a popup */
    .pf-founding-badge { display:inline-flex; align-items:center; gap:5px; margin-top:8px; padding:4px 10px; border:none; border-radius:999px; background:linear-gradient(135deg,#F97316,#fb923c); color:#fff; font-size:11px; font-weight:700; cursor:pointer; box-shadow:0 1px 3px rgba(249,115,22,0.35); transition:transform 150ms cubic-bezier(0.23,1,0.32,1), box-shadow 150ms ease; }
    .pf-founding-badge svg { width:12px; height:12px; }
    .pf-founding-badge:active { transform:scale(0.96); }
    @media (hover:hover) and (pointer:fine){ .pf-founding-badge:hover { box-shadow:0 3px 10px rgba(249,115,22,0.40); } }
    .pf-founding-badge:focus-visible { outline:2px solid #0f172a; outline-offset:2px; }
    /* Founding Member popup (centered modal) */
    /* align-items:center + no overflow clips BOTH ends when the card is taller than
       the viewport, and neither end can be scrolled to. flex-start + margin:auto on the
       card keeps it optically centred while it fits, and degrades to a normal scroll
       when it does not. Same treatment as .auth-overlay (fixed 2026-07-26). */
    .fm-overlay { position:fixed; inset:0; z-index:2000; display:none; align-items:flex-start; justify-content:center; background:rgba(15,23,42,0.5); padding:20px; overflow-y:auto; -webkit-overflow-scrolling:touch; overscroll-behavior:contain; }
    .fm-overlay.open { display:flex; animation:gs-fade-in 180ms cubic-bezier(0.23,1,0.32,1); }
    .fm-card { margin:auto; position:relative; background:#fff; border-radius:18px; padding:30px 28px 24px; max-width:340px; width:100%; text-align:center; box-shadow:0 24px 60px rgba(15,23,42,0.28); animation:fm-pop 200ms cubic-bezier(0.23,1,0.32,1); }
    @keyframes fm-pop { from { opacity:0; transform:scale(0.95); } to { opacity:1; transform:scale(1); } }
    .fm-x { position:absolute; top:12px; right:14px; border:none; background:none; font-size:22px; line-height:1; color:#cbd5e1; cursor:pointer; transition:color 150ms ease, transform 120ms cubic-bezier(0.23,1,0.32,1); }
    .fm-x::before { content:""; position:absolute; inset:-9px; }
    @media (hover:hover) and (pointer:fine){ .fm-x:hover { color:#0f172a; } }
    .fm-x:active { transform:scale(0.97); }
    .fm-emoji { font-size:44px; line-height:1; margin-bottom:8px; }
    .fm-card h3 { font-size:20px; font-weight:800; margin-bottom:8px; background:linear-gradient(135deg,#F97316,#fb923c); -webkit-background-clip:text; background-clip:text; -webkit-text-fill-color:transparent; }
    .fm-card p { font-size:14px; color:#475569; line-height:1.5; }
    .fm-card .fm-sub { font-size:12.5px; color:#94a3b8; margin-top:8px; }
    .fm-ok { margin-top:18px; padding:10px 28px; border:none; border-radius:10px; background:linear-gradient(135deg,#F97316,#fb923c); color:#fff; font-weight:700; font-size:13px; cursor:pointer; transition:transform 150ms cubic-bezier(0.23,1,0.32,1); }
    .fm-ok:active { transform:scale(0.97); }
    @media (prefers-reduced-motion: reduce){ .pf-founding-badge { transition:none; } .fm-overlay.open, .fm-card { animation:none; } }
    /* ===== SUPERFAN TEST (quiz modal + tier badges) ===== */
    /* Tallest modal on the site (12-question quiz) — see the .fm-overlay note above. */
    .sf-overlay { position:fixed; inset:0; z-index:2000; display:none; align-items:flex-start; justify-content:center; background:rgba(15,23,42,0.55); padding:16px; overflow-y:auto; -webkit-overflow-scrolling:touch; overscroll-behavior:contain; }
    .sf-overlay.open { display:flex; animation:gs-fade-in 180ms cubic-bezier(0.23,1,0.32,1); }
    .sf-card { margin:auto; position:relative; background:#fff; border-radius:18px; padding:26px 24px 22px; max-width:420px; width:100%; box-shadow:0 24px 60px rgba(15,23,42,0.30); animation:fm-pop 200ms cubic-bezier(0.23,1,0.32,1); }
    .sf-head { display:flex; align-items:center; gap:10px; margin-bottom:14px; }
    .sf-head img { width:34px; height:34px; object-fit:contain; }
    .sf-head-title { font-size:15px; font-weight:800; color:#0f172a; line-height:1.2; }
    .sf-head-sub { font-size:11px; color:#94a3b8; font-weight:600; }
    .sf-progress { display:flex; gap:4px; margin-bottom:16px; }
    .sf-dot { flex:1; height:4px; border-radius:999px; background:#e5e7eb; transition:background 200ms ease; }
    .sf-dot.is-done { background:#0f172a; }
    .sf-dot.is-right { background:#16a34a; }
    .sf-dot.is-wrong { background:#dc2626; }
    .sf-q { font-size:16px; font-weight:700; color:#0f172a; line-height:1.4; margin-bottom:14px; min-height:44px; }
    .sf-diff { display:inline-block; font-size:9.5px; font-weight:800; letter-spacing:0.07em; text-transform:uppercase; border-radius:999px; padding:2px 8px; margin-bottom:8px; }
    .sf-diff.is-easy { background:#dcfce7; color:#166534; }
    .sf-diff.is-med { background:#fef3c7; color:#92400e; }
    .sf-diff.is-hard { background:#fee2e2; color:#991b1b; }
    .sf-choices { display:flex; flex-direction:column; gap:8px; }
    .sf-choice { text-align:left; padding:11px 14px; border:1.5px solid #e5e7eb; border-radius:11px; background:#fff; font-size:14px; font-weight:600; color:#0f172a; cursor:pointer; transition:border-color 120ms ease, background 120ms ease, transform 120ms cubic-bezier(0.23,1,0.32,1); }
    .sf-choice:active { transform:scale(0.98); }
    @media (hover:hover) and (pointer:fine){ .sf-choice:hover:not(:disabled) { border-color:#94a3b8; background:#f8fafc; } }
    .sf-choice:disabled { cursor:default; }
    .sf-choice.is-right { border-color:#16a34a; background:#f0fdf4; color:#166534; }
    .sf-choice.is-wrong { border-color:#dc2626; background:#fef2f2; color:#991b1b; }
    .sf-choice.is-dim { opacity:0.45; }
    .sf-end { text-align:center; padding:8px 0 2px; }
    .sf-end-emoji { font-size:52px; line-height:1; margin-bottom:10px; }
    .sf-end h3 { font-size:21px; font-weight:800; color:#0f172a; margin-bottom:6px; }
    .sf-end p { font-size:13.5px; color:#475569; line-height:1.5; }
    .sf-end .sf-score { font-size:13px; font-weight:700; color:#94a3b8; margin-top:6px; }
    .sf-end .sf-save-msg { font-size:12px; margin-top:10px; font-weight:600; }
    .sf-start-btn, .sf-next-btn { margin-top:18px; width:100%; padding:12px; border:none; border-radius:11px; background:#0f172a; color:#fff; font-weight:700; font-size:14px; cursor:pointer; transition:transform 150ms cubic-bezier(0.23,1,0.32,1); }
    .sf-start-btn:active, .sf-next-btn:active { transform:scale(0.97); }
    .sf-badge { display:inline-flex; align-items:center; gap:4px; border-radius:999px; padding:3px 9px; font-size:10px; font-weight:800; letter-spacing:0.02em; white-space:nowrap; }
    .sf-badge.is-1 { background:#f1f5f9; color:#334155; border:1px solid #e2e8f0; }
    .sf-badge.is-2 { background:linear-gradient(135deg,#F97316,#fb923c); color:#fff; box-shadow:0 1px 3px rgba(249,115,22,0.35); }
    .sf-badge.is-3 { background:linear-gradient(135deg,#b45309,#f59e0b 55%,#fbbf24); color:#fff; box-shadow:0 1px 4px rgba(245,158,11,0.45); }
    .pf-team-badges { display:flex; align-items:center; gap:7px; flex-wrap:wrap; }
    @keyframes sf-badge-in { from { opacity:0; transform:scale(0.92); } to { opacity:1; transform:scale(1); } }
    .pf-team-badges .sf-badge { animation:sf-badge-in 220ms cubic-bezier(0.23,1,0.32,1) both; }
    .sf-test-btn { display:flex; align-items:center; justify-content:center; gap:5px; width:100%; border:1px solid #e2e8f0; background:none; padding:7px 10px; border-radius:9px; font-size:11px; font-weight:700; color:#475569; cursor:pointer; white-space:nowrap; transition:background-color 150ms ease, border-color 150ms ease, color 150ms ease, transform 150ms cubic-bezier(0.23,1,0.32,1); }
    @media (hover:hover) and (pointer:fine){ .sf-test-btn:hover { background:#f8fafc; border-color:#cbd5e1; color:#1e293b; } }
    .sf-test-btn:active { transform:scale(0.97); }
    @media (prefers-reduced-motion: reduce){ .sf-overlay.open, .sf-card { animation:none; } .sf-choice, .sf-start-btn, .sf-next-btn { transition:none; } .pf-team-badges .sf-badge { animation:none; } .pf-team:has(.pf-team-main:active), .sf-test-btn:active, .pf-unfollow:active { transform:none; } }
    .pf-section { margin-bottom:22px; }
    .pf-section-head { display:flex; align-items:center; gap:8px; margin-bottom:12px; }
    .pf-section-head h2 { font-size:15px; font-weight:800; color:#0f172a; }
    .pf-section-head svg { width:16px; height:16px; }
    .pf-count { font-size:12px; font-weight:700; color:#94a3b8; background:#f1f5f9; border-radius:999px; padding:1px 9px; }
    .pf-teams { display:grid; grid-template-columns:repeat(auto-fill,minmax(210px,1fr)); gap:10px; }
    .pf-team { position:relative; display:flex; flex-direction:column; border:1px solid #e5e7eb; border-radius:12px; background:#fff; transition:box-shadow 150ms ease, border-color 150ms ease, transform 150ms cubic-bezier(0.23,1,0.32,1); }
    .pf-team:has(.pf-team-main:active) { transform:scale(0.99); }
    .pf-team-foot { width:100%; padding:0 12px 11px; }
    .pf-team-foot:empty { display:none; }
    @media (hover:hover) and (pointer:fine){ .pf-team:hover { box-shadow:0 6px 18px rgba(0,0,0,0.06); border-color:#e2e8f0; } }
    .pf-team-main { display:flex; align-items:center; gap:10px; padding:12px 40px 8px 12px; background:none; border:none; cursor:pointer; text-align:left; width:100%; }
    .pf-team-main img { width:32px; height:32px; object-fit:contain; flex:none; }
    .pf-team-name { font-size:13px; font-weight:700; color:#0f172a; display:block; }
    .pf-team-rec { font-size:11px; color:#94a3b8; }
    .pf-unfollow { position:absolute; top:8px; right:8px; width:24px; height:24px; display:flex; align-items:center; justify-content:center; border:none; background:none; color:#cbd5e1; font-size:17px; line-height:1; cursor:pointer; border-radius:7px; transition:opacity 160ms cubic-bezier(0.23,1,0.32,1), color 150ms ease, background-color 150ms ease, transform 140ms cubic-bezier(0.23,1,0.32,1); }
    /* Extend the 24px visible × to a 40x40 hit target (#16) without resizing the glyph. */
    .pf-unfollow::before { content:''; position:absolute; inset:-8px; }
    @media (hover:hover) and (pointer:fine){ .pf-unfollow { opacity:0; } .pf-team:hover .pf-unfollow, .pf-team:focus-within .pf-unfollow { opacity:1; } .pf-unfollow:hover { color:#dc2626; background:#fef2f2; } }
    .pf-unfollow:active { transform:scale(0.97); }
    .pf-empty-teams { font-size:13px; color:#94a3b8; padding:18px; border:1px dashed #e5e7eb; border-radius:12px; text-align:center; grid-column:1/-1; }
    .pf-field { margin-bottom:16px; }
    .pf-field label { display:block; font-size:12px; font-weight:600; color:#475569; margin-bottom:6px; }
    .pf-name-edit { display:flex; gap:8px; }
    .pf-name-edit input { flex:1; padding:10px 13px; border:1px solid #e2e8f0; border-radius:10px; font-size:14px; color:#0f172a; outline:none; transition:border-color 150ms ease, box-shadow 150ms ease; }
    .pf-name-edit input:focus { border-color:#F97316; box-shadow:0 0 0 3px rgba(249,115,22,0.12); }
    .pf-save { padding:10px 18px; border:none; border-radius:10px; background:#0f172a; color:#fff; font-weight:700; font-size:13px; cursor:pointer; transition:transform 150ms cubic-bezier(0.23,1,0.32,1); }
    .pf-save:active { transform:scale(0.97); }
    .pf-name-msg { font-size:12px; margin-top:6px; min-height:14px; }
    .pf-name-msg.ok { color:#16a34a; }
    .pf-name-msg.err { color:#dc2626; }
    .pf-logout { margin-top:4px; padding:10px 18px; border:1px solid #e2e8f0; border-radius:10px; background:#fff; color:#dc2626; font-weight:700; font-size:13px; cursor:pointer; transition:background-color 150ms ease; }
    @media (hover:hover) and (pointer:fine){ .pf-logout:hover { background:#fef2f2; } }
    .profile-empty { text-align:center; padding:60px 20px; }
    .profile-empty svg { width:46px; height:46px; color:#cbd5e1; margin:0 auto 16px; display:block; }
    .profile-empty h2 { font-size:19px; font-weight:800; color:#0f172a; margin-bottom:6px; }
    .profile-empty p { font-size:14px; color:#64748b; margin-bottom:20px; }
    .take-del { border:none; background:none; color:#cbd5e1; font-size:16px; line-height:1; cursor:pointer; padding:0 2px; transition:color 150ms ease; }
    /* Two-step delete: first click arms ("Delete?"), second confirms. */
    .take-del.armed { color:#fff; background:#dc2626; border-radius:8px; font-size:10px; font-weight:700; padding:3px 7px; }
    @media (hover:hover) and (pointer:fine){ .take-del:hover { color:#dc2626; } }
    .pf-takes { display:grid; gap:10px; }
    /* Game results posted to a profile */
    .pf-game-results { display:grid; gap:10px; }
    .gr-card { border:1px solid #e5e7eb; border-radius:12px; background:#fff; padding:12px 14px; }
    .gr-head { display:flex; align-items:center; gap:8px; margin-bottom:6px; }
    .gr-game { font-size:13px; font-weight:800; color:#0f172a; }
    .gr-when { font-size:11px; color:#94a3b8; margin-right:auto; }
    .gr-summary { font-family:ui-monospace,SFMono-Regular,Menlo,monospace; font-size:12px; line-height:1.5; color:#334155; white-space:pre-wrap; word-break:break-word; margin:0; }

    /* ====== Profile settings (device-local prefs, bv_settings) ====== */
    .pf-set-row { display:flex; align-items:center; justify-content:space-between; gap:16px; padding:14px 0; border-bottom:1px solid #f1f5f9; }
    .pf-set-row:last-child { border-bottom:none; }
    .pf-set-info { min-width:0; }
    .pf-set-title { font-size:13.5px; font-weight:700; color:#0f172a; }
    .pf-set-desc { font-size:12px; color:#64748b; margin-top:2px; line-height:1.45; }
    .bv-seg { display:inline-flex; background:#f1f5f9; border-radius:10px; padding:3px; gap:2px; flex:none; }
    .bv-seg button { padding:6px 12px; border:none; border-radius:8px; background:transparent; font-size:12.5px; font-weight:600; color:#64748b; cursor:pointer; transition:background-color 150ms ease, color 150ms ease, transform 150ms cubic-bezier(0.23,1,0.32,1); }
    .bv-seg button:active { transform:scale(0.96); }
    @media (hover:hover) and (pointer:fine){ .bv-seg button:hover { color:#0f172a; } }
    .bv-seg button[aria-pressed="true"] { background:#fff; color:#0f172a; box-shadow:0 1px 3px rgba(15,23,42,0.12); }
    .bv-switch { position:relative; width:42px; height:24px; flex:none; border:none; border-radius:999px; background:#cbd5e1; cursor:pointer; transition:background-color 180ms ease; }
    .bv-switch::before { content:''; position:absolute; inset:-8px 0; border-radius:inherit; }
    .bv-switch::after { content:''; position:absolute; top:3px; left:3px; width:18px; height:18px; border-radius:50%; background:#fff; box-shadow:0 1px 2px rgba(15,23,42,0.25); transition:transform 180ms cubic-bezier(0.23,1,0.32,1); }
    .bv-switch[aria-checked="true"] { background:#F97316; }
    .bv-switch[aria-checked="true"]::after { transform:translateX(18px); }
    .pf-select { padding:8px 30px 8px 12px; border:1px solid #e2e8f0; border-radius:10px; background:#fff url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%2364748b' stroke-width='2.5'%3E%3Cpath d='M6 9l6 6 6-6'/%3E%3C/svg%3E") no-repeat right 10px center/12px; font-size:13px; font-weight:600; color:#0f172a; cursor:pointer; appearance:none; -webkit-appearance:none; flex:none; }
    .pf-action { padding:8px 14px; border:1px solid #e2e8f0; border-radius:10px; background:#fff; color:#0f172a; font-weight:700; font-size:12.5px; cursor:pointer; flex:none; transition:background-color 150ms ease, color 150ms ease, transform 150ms cubic-bezier(0.23,1,0.32,1); }
    .pf-action:active { transform:scale(0.97); }
    @media (hover:hover) and (pointer:fine){ .pf-action:hover { background:#f8fafc; } }
    .pf-action.is-danger { color:#dc2626; }
    @media (hover:hover) and (pointer:fine){ .pf-action.is-danger:hover { background:#fef2f2; } }
    .pf-action.is-armed { background:#dc2626; border-color:#dc2626; color:#fff; }
    .bv-switch:focus-visible, .bv-seg button:focus-visible, .pf-select:focus-visible, .pf-action:focus-visible { outline:2px solid #F97316; outline-offset:2px; }
    @media (prefers-reduced-motion: reduce){ .bv-seg button, .bv-switch, .bv-switch::after, .pf-action { transition:none; } }

    /* ====== Dark mode (Beta) — inversion-filter approach ======
       The whole UI inverts; hue-rotate(180deg) flips hue back so brand colors keep
       roughly the right hue while lightness flips. Photographic/branded media
       (logos, headshots, skylines) re-inverts back to normal. The filter MUST sit
       on html — the root element is spec-exempt from filter's containing-block
       side effect; anywhere else it would break every position:fixed modal and
       the sticky nav. A token-based real dark theme is the someday upgrade. */
    html.bv-dark { filter: invert(1) hue-rotate(180deg); background:#fff; }
    html.bv-dark img, html.bv-dark video, html.bv-dark canvas, html.bv-dark iframe { filter: invert(1) hue-rotate(180deg); }

    /* ====== Manual reduce-motion (settings toggle) ======
       Same blunt guarantee as the OS-level media query: animations and
       transitions collapse to a single frame site-wide. */
    html.bv-reduce-motion *, html.bv-reduce-motion *::before, html.bv-reduce-motion *::after {
      animation-duration:0.01ms !important; animation-iteration-count:1 !important;
      transition-duration:0.01ms !important; scroll-behavior:auto !important;
    }

    /* ====== Live Scoreboard strip ====== */
    .live-scoreboard {
      display: flex; gap: 10px; overflow-x: auto;
      padding: 4px 4px 16px; scroll-behavior: smooth;
    }
    .live-scoreboard::-webkit-scrollbar { height: 6px; }
    .live-scoreboard::-webkit-scrollbar-thumb { background: #e5e7eb; border-radius: 3px; }
    .ls-card {
      flex: 0 0 240px; border-radius: 12px;
      border: 1px solid #e5e7eb; background: white;
      padding: 12px 14px; cursor: pointer;
      transition: border-color 200ms ease, transform 200ms cubic-bezier(0.23,1,0.32,1), box-shadow 200ms ease;
    }
    @media (hover: hover) and (pointer: fine) {
      .ls-card:hover { border-color: #cbd5e1; transform: translateY(-1px); box-shadow: 0 4px 12px rgba(0,0,0,0.04); }
    }
    .ls-card:active { transform: scale(0.99); }
    .ls-card-top {
      display: flex; align-items: center; justify-content: space-between;
      margin-bottom: 8px;
    }
    .ls-badge-live {
      display: inline-flex; align-items: center; gap: 4px;
      padding: 2px 7px; border-radius: 5px; font-size: 9px; font-weight: 700;
      background: rgba(220,38,38,0.1); color: #dc2626; letter-spacing: 0.04em;
      text-transform: uppercase;
    }
    .ls-badge-live::before {
      content: ''; width: 5px; height: 5px; border-radius: 50%;
      background: #dc2626; animation: ls-pulse 1.6s infinite;
    }
    @keyframes ls-pulse { 0%,100% { opacity: 1; } 50% { opacity: 0.3; } }
    .ls-badge-time {
      font-size: 10px; font-weight: 600; color: #94a3b8;
      text-transform: uppercase; letter-spacing: 0.06em;
    }
    .ls-team { display: flex; align-items: center; gap: 8px; padding: 3px 0; }
    .ls-team img { width: 22px; height: 22px; object-fit: contain; flex-shrink: 0; }
    .ls-team .name { font-size: 13px; font-weight: 600; color: #0f172a; flex: 1; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
    .ls-team .score { font-size: 16px; font-weight: 800; color: #0f172a; flex-shrink: 0; }
    .ls-team .score.winning { color: #16a34a; }
    .ls-meta {
      margin-top: 6px; padding-top: 6px; border-top: 1px solid #f1f5f9;
      font-size: 10px; color: #94a3b8;
    }

    /* ====== Compare Teams page ====== */
    .cmp-picker-row {
      display: grid; grid-template-columns: 1fr auto 1fr; gap: 16px;
      align-items: center; margin-bottom: 24px;
    }
    @media (max-width: 768px) { .cmp-picker-row { grid-template-columns: 1fr; } }
    .cmp-picker {
      border-radius: 14px; border: 1px solid #e5e7eb; background: white;
      padding: 16px 18px; cursor: pointer; min-height: 80px;
      display: flex; align-items: center; gap: 12px;
      transition: border-color 200ms ease, background-color 200ms ease, transform 200ms cubic-bezier(0.23,1,0.32,1);
    }
    .cmp-picker:active { transform: scale(0.99); }
    @media (hover: hover) and (pointer: fine) {
      .cmp-picker:hover { border-color: #cbd5e1; background: #fafbfc; }
    }
    .cmp-picker.empty { border-style: dashed; color: #94a3b8; justify-content: center; }
    .cmp-picker img { width: 40px; height: 40px; object-fit: contain; flex-shrink: 0; }
    .cmp-picker .pname { font-size: 17px; font-weight: 700; color: #0f172a; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
    .cmp-picker .pmeta { font-size: 11px; color: #64748b; }
    .cmp-vs {
      width: 44px; height: 44px; border-radius: 50%;
      background: #0f172a; color: white; font-weight: 800; font-size: 13px;
      display: flex; align-items: center; justify-content: center;
      letter-spacing: 0.04em;
    }

    .cmp-row {
      display: grid; grid-template-columns: 1fr auto 1fr;
      gap: 16px; align-items: center;
      padding: 12px 16px; border-radius: 10px;
      transition: background-color 150ms ease;
    }
    @media (hover: hover) and (pointer: fine) {
      .cmp-row:hover { background: #fafbfc; }
    }
    .cmp-row:not(:last-child) { border-bottom: 1px solid #f1f5f9; }
    .cmp-val { font-size: 18px; font-weight: 800; font-variant-numeric: tabular-nums; }
    .cmp-val.left { text-align: right; }
    .cmp-val.right { text-align: left; }
    .cmp-val.winner { color: #16a34a; }
    .cmp-val.loser { color: #94a3b8; }
    .cmp-label {
      font-size: 11px; font-weight: 600; color: #64748b;
      text-transform: uppercase; letter-spacing: 0.06em;
      text-align: center; white-space: nowrap;
    }
    @media (max-width: 480px) {
      .cmp-row { gap: 8px; padding: 10px 10px; }
      .cmp-val { font-size: 15px; }
      .cmp-label { font-size: 10px; white-space: normal; }
    }

    /* ====== Conference Tournament page ====== */
    .ct-conf-card {
      border-radius: 14px; border: 1px solid #e5e7eb; background: white;
      overflow: hidden;
    }
    .ct-conf-head {
      display: flex; align-items: center; justify-content: space-between;
      padding: 14px 18px; border-bottom: 1px solid #f1f5f9;
      background: linear-gradient(180deg, #f9fafb, #ffffff);
      flex-wrap: wrap; gap: 4px 12px;
    }
    .ct-conf-head h3 { font-size: 15px; font-weight: 700; color: #0f172a; min-width: 0; overflow: hidden; text-overflow: ellipsis; }
    .ct-conf-head .meta { font-size: 11px; color: #94a3b8; flex-shrink: 0; white-space: nowrap; }
    .ct-tier-chip {
      display: inline-flex; align-items: center; padding: 2px 7px;
      border-radius: 999px; font-size: 9px; font-weight: 700;
      letter-spacing: 0.06em; text-transform: uppercase; line-height: 1;
    }
    .ct-tier-chip.is-power { background: #dbeafe; color: #1e40af; }
    .ct-tier-chip.is-mid { background: #ecfccb; color: #3f6212; }
    .ct-tier-chip.is-low { background: #f1f5f9; color: #64748b; }
    .ct-filter-bar {
      display: flex; flex-wrap: wrap; gap: 6px; margin-bottom: 14px;
    }
    .ct-filter-chip {
      padding: 6px 12px; border-radius: 999px; background: white;
      border: 1px solid #e2e8f0; font-size: 12px; font-weight: 600;
      color: #475569; cursor: pointer;
      transition: background-color 180ms cubic-bezier(0.23,1,0.32,1), border-color 180ms cubic-bezier(0.23,1,0.32,1), color 180ms cubic-bezier(0.23,1,0.32,1), transform 160ms cubic-bezier(0.23,1,0.32,1);
    }
    @media (hover: hover) and (pointer: fine) {
      .ct-filter-chip:hover { border-color: #cbd5e1; background: #f8fafc; }
    }
    .ct-filter-chip:active { transform: scale(0.97); }
    .ct-filter-chip.is-active { background: #0f172a; color: white; border-color: #0f172a; }
    .ct-filter-chip .count { opacity: 0.6; margin-left: 4px; font-weight: 500; }

    /* ==================== CONFERENCE TOURNAMENT BRACKET (TREE) ==================== */
    .bk-conf {
      padding: 24px 0;
      background: linear-gradient(180deg, #fafbfc 0%, #ffffff 100%);
      overflow-x: auto;
      overflow-y: hidden;
      -webkit-overflow-scrolling: touch;
    }
    /* Bracket-tree wrapper — single consolidated declaration. inline-block + min-width
       lets the bracket grow wider than .bk-conf when columns hit their readable minimum,
       which activates .bk-conf's overflow-x:auto for horizontal scroll on narrow
       viewports. Position relative so the SVG line layer can absolute-position. */
    .bk-bracket-tree {
      position: relative;
      display: inline-block;
      min-width: 100%;
      padding: 12px;
      box-sizing: border-box;
    }
    /* Round-name header strip — chip-style labels that visually own their column.
       Each header sits inside its grid column slot and centers itself horizontally
       via flex; the inner pill is the visual anchor that makes the column ownership
       feel obvious even when the games below sit at different vertical positions. */
    .bk-bracket-tree .bk-grid-headers {
      display: grid;
      margin-bottom: 14px;
    }
    .bk-bracket-tree .bk-round-header {
      display: flex;
      align-items: center;
      justify-content: center;
      min-width: 0;
    }
    .bk-bracket-tree .bk-round-header > span {
      display: inline-block;
      font-size: 9.5px;
      font-weight: 800;
      letter-spacing: 0.1em;
      text-transform: uppercase;
      color: #475569;
      text-align: center;
      line-height: 1;
      padding: 5px 10px;
      background: #f1f5f9;
      border-radius: 999px;
      white-space: nowrap;
      max-width: 100%;
      overflow: hidden;
      text-overflow: ellipsis;
    }
    /* Final column: gold pill mirrors the champion cell below */
    .bk-bracket-tree .bk-round-header.is-champ-header > span {
      color: #92400e;
      background: linear-gradient(135deg, #fef3c7, #fde68a);
    }
    @media (prefers-reduced-motion: reduce) {
      .bk-bracket-tree .bk-round-header > span { transition: none; }
    }
    /* CSS Grid: columns = rounds, rows = bracket slots (2^(depth-1)).
       Every game in the same round shares the same grid column → perfect vertical alignment. */
    .bk-bracket-tree .bk-grid {
      display: grid;
      column-gap: 20px;   /* was 32 — tighter columns */
      row-gap: 0;
      position: relative;
    }
    .bk-bracket-tree .bk-grid-cell {
      display: flex;
      align-items: center;
      justify-content: stretch;
      min-width: 0;
    }
    .bk-bracket-tree .bk-grid-cell > .bk-game {
      width: 100%;
    }
    /* Connector lines are drawn as SVG paths AFTER layout (see _drawBracketLines).
       SVG sits behind the cells so it doesn't intercept hover/click. */
    .bk-bracket-tree .bk-lines {
      position: absolute;
      top: 0;
      left: 0;
      pointer-events: none;
      z-index: 0;
    }

    .bk-bracket-tree .bk-game,
    .bk-bracket-tree .bk-bye {
      flex-shrink: 0;
      width: 100%;             /* fill the 1fr grid column — bracket spans the conf box */
      position: relative;
      z-index: 1;                 /* stay above the SVG line layer */
    }
    .bk-bracket-tree .bk-children-single { gap: 0; }
    .bk-bracket-tree .bk-children-single::before { display: none; }
    /* Invisible spacer for bye sides — preserves column alignment without showing a cell.
       Kept compact so the bracket doesn't get stretched vertically by deep bye chains. */
    .bk-bracket-tree .bk-spacer {
      width: 150px;
      flex-shrink: 0;
      visibility: hidden;
      pointer-events: none;
      min-height: 20px;
    }
    .bk-bracket-tree .bk-game {
      display: block;                      /* override the .bk-game{display:flex} from the March Madness rule */
      background: white;
      border: 1px solid #e5e7eb;
      border-radius: 6px;
      overflow: hidden;
      box-shadow: 0 1px 2px rgba(0,0,0,0.04);
      transition: border-color 180ms cubic-bezier(0.23,1,0.32,1), box-shadow 180ms cubic-bezier(0.23,1,0.32,1);
      cursor: default;
    }
    @media (hover: hover) and (pointer: fine) {
      .bk-bracket-tree .bk-game:hover { border-color: #cbd5e1; box-shadow: 0 3px 8px rgba(0,0,0,0.06); }
    }
    .bk-bracket-tree .bk-game-meta {
      display: flex;
      justify-content: space-between;
      align-items: center;
      padding: 1px 5px;
      font-size: 7px;
      font-weight: 800;
      letter-spacing: 0.04em;
      text-transform: uppercase;
      background: #f8fafc;
      border-bottom: 1px solid #f1f5f9;
      line-height: 1.1;
    }
    .bk-bracket-tree .bk-round-tag { color: #475569; }
    .bk-bracket-tree .bk-date-tag { color: #94a3b8; font-weight: 700; }
    .bk-bracket-tree .bk-team {
      display: flex;
      align-items: center;
      gap: 6px;               /* tighter so condensed brackets still breathe */
      padding: 5px 8px;        /* condensed — was 6px 10px */
      font-size: 11.5px;       /* condensed — was 12.5px */
      border-bottom: 1px solid #f1f5f9;
      line-height: 1.2;
      min-width: 0;            /* allow long names to ellipsize cleanly */
    }
    .bk-bracket-tree .bk-team:last-child { border-bottom: none; }
    /* Clickable bracket team row — Emil interaction stack:
       - specific properties only (never transition:all)
       - cubic-bezier(0.23,1,0.32,1) custom ease-out, sub-300ms
       - hover gated to fine-pointer devices (no false touch-hover)
       - press feedback via scale(0.97) on :active
       - prefers-reduced-motion fallback drops transform + transitions */
    .bk-bracket-tree .bk-team.is-clickable {
      cursor: pointer;
      transition:
        background-color 180ms cubic-bezier(0.23,1,0.32,1),
        transform 160ms cubic-bezier(0.23,1,0.32,1);
    }
    @media (hover: hover) and (pointer: fine) {
      .bk-bracket-tree .bk-team.is-clickable:hover { background-color: #eff6ff; }
      .bk-bracket-tree .bk-team.is-clickable.is-winner:hover { background-color: #dcfce7; }
      .bk-bracket-tree .bk-game.is-champ-game .bk-team.is-clickable.is-winner:hover {
        background: linear-gradient(135deg, #fde68a, #fcd34d);
      }
    }
    .bk-bracket-tree .bk-team.is-clickable:active { transform: scale(0.97); }
    @media (prefers-reduced-motion: reduce) {
      .bk-bracket-tree .bk-team.is-clickable,
      .bk-bracket-tree .bk-team.is-clickable:active { transition: none; transform: none; }
    }
    /* Same stack applied to bye cells (clickable to that team's page) */
    .bk-bracket-tree .bk-bye.is-clickable {
      cursor: pointer;
      transition:
        background-color 180ms cubic-bezier(0.23,1,0.32,1),
        border-color 180ms cubic-bezier(0.23,1,0.32,1),
        transform 160ms cubic-bezier(0.23,1,0.32,1);
    }
    @media (hover: hover) and (pointer: fine) {
      .bk-bracket-tree .bk-bye.is-clickable:hover {
        background-color: #eff6ff;
        border-color: #bfdbfe;
      }
    }
    .bk-bracket-tree .bk-bye.is-clickable:active { transform: scale(0.97); }
    .bk-bracket-tree .bk-team.is-clickable:focus-visible, .bk-bracket-tree .bk-bye.is-clickable:focus-visible { outline: 2px solid #38bdf8; outline-offset: 2px; }
    @media (prefers-reduced-motion: reduce) {
      .bk-bracket-tree .bk-bye.is-clickable,
      .bk-bracket-tree .bk-bye.is-clickable:active { transition: none; transform: none; }
    }
    .bk-bracket-tree .bk-team .seed { font-size: 9.5px; font-weight: 800; color: #94a3b8; min-width: 17px; text-align: center; }
    .bk-bracket-tree .bk-team img { width: 18px; height: 18px; object-fit: contain; flex-shrink: 0; }
    .bk-bracket-tree .bk-team .name {
      flex: 1;
      color: #94a3b8;
      font-weight: 500;
      white-space: nowrap;
      overflow: hidden;
      text-overflow: ellipsis;
    }
    .bk-bracket-tree .bk-team .score { font-size: 12px; font-weight: 700; color: #475569; min-width: 24px; text-align: right; }
    .bk-bracket-tree .bk-team.is-winner { background: #f0fdf4; }
    .bk-bracket-tree .bk-team.is-winner .name { color: #0f172a; font-weight: 700; }
    .bk-bracket-tree .bk-team.is-winner .score { color: #16a34a; }
    .bk-bracket-tree .bk-team.is-winner .seed { color: #15803d; }
    .bk-bracket-tree .bk-game.is-champ-game {
      border-color: #fcd34d;
      box-shadow: 0 6px 24px rgba(251, 191, 36, 0.22);
    }
    .bk-bracket-tree .bk-game.is-champ-game .bk-game-meta {
      background: linear-gradient(135deg, #fef3c7, #fde68a);
      color: #92400e;
    }
    .bk-bracket-tree .bk-game.is-champ-game .bk-team.is-winner { background: linear-gradient(135deg, #fef3c7, #fde68a); }
    .bk-bracket-tree .bk-game.is-champ-game .bk-team.is-winner .name { color: #422006; }
    .bk-bracket-tree .bk-game.is-champ-game .bk-team.is-winner .score { color: #92400e; }
    .bk-bracket-tree .bk-game.is-champ-game .bk-team.is-winner .seed { color: #92400e; }

    /* Bye placeholder — single team box, marked as BYE */
    .bk-bracket-tree .bk-bye {
      background: #fafbfc;
      border: 1px dashed #d1d5db;
      border-radius: 8px;
      padding: 8px 10px;
      display: flex;
      align-items: center;
      gap: 6px;
      font-size: 12px;
      opacity: 0.9;
    }
    .bk-bracket-tree .bk-bye .seed { font-size: 9.5px; font-weight: 800; color: #94a3b8; min-width: 18px; text-align: center; }
    .bk-bracket-tree .bk-bye img { width: 18px; height: 18px; object-fit: contain; opacity: 0.75; flex-shrink: 0; }
    .bk-bracket-tree .bk-bye .name {
      flex: 1;
      color: #475569;
      font-weight: 600;
      white-space: nowrap;
      overflow: hidden;
      text-overflow: ellipsis;
    }
    .bk-empty {
      font-size: 12px;
      color: #94a3b8;
      text-align: center;
      padding: 24px 8px;
      font-style: italic;
    }

    /* ==================== CBB.COM RANKINGS BRAND ==================== */
    /* Proprietary identity treatment — distinct from AP / NET / KenPom */
    .cbb-badge {
      background: linear-gradient(135deg, #dbeafe, #bfdbfe);
      color: #1e40af;
      font-weight: 800;
      letter-spacing: 0.04em;
    }
    .cbb-methodology-link {
      color: #3b82f6;
      font-weight: 600;
      text-decoration: none;
      display: inline-block;
      margin-top: 10px;
      font-size: 18px;
      transition: color 180ms cubic-bezier(0.23, 1, 0.32, 1);
    }
    @media (hover: hover) and (pointer: fine) {
      .cbb-methodology-link:hover { color: #1d4ed8; text-decoration: underline; }
    }

    /* ==================== ABSURD STATS ==================== */
    .absurd-hero {
      position: relative; overflow: hidden; display: block;
      border-radius: 20px; padding: 28px 28px 30px;
      background: linear-gradient(135deg, #0f172a 0%, #1e293b 55%, #334155 100%);
      color: #fff; cursor: pointer;
      transition: transform 220ms cubic-bezier(0.23, 1, 0.32, 1), box-shadow 220ms cubic-bezier(0.23, 1, 0.32, 1);
    }
    .absurd-hero::after {
      content: ''; position: absolute; top: -45%; right: -8%;
      width: 360px; height: 360px; border-radius: 50%;
      background: radial-gradient(circle, rgba(56,189,248,0.28), transparent 70%);
      pointer-events: none;
    }
    @media (hover: hover) and (pointer: fine) {
      .absurd-hero:hover { transform: translateY(-2px); box-shadow: 0 24px 50px -20px rgba(15,23,42,0.55); }
    }
    .absurd-hero:focus-visible { outline: 2px solid #38bdf8; outline-offset: 3px; }
    .absurd-hero-badge {
      position: relative; z-index: 1; display: inline-flex; align-items: center; gap: 6px;
      font-size: 11px; font-weight: 800; text-transform: uppercase; letter-spacing: 0.08em;
      color: #bae6fd; background: rgba(56,189,248,0.12);
      border: 1px solid rgba(56,189,248,0.3); border-radius: 999px; padding: 5px 12px;
    }
    .absurd-hero-row {
      position: relative; z-index: 1; display: flex; align-items: center; gap: 28px;
      margin-top: 18px; flex-wrap: wrap;
    }
    .absurd-hero-num {
      font-size: clamp(3.5rem, 1.8rem + 8vw, 7rem); font-weight: 900;
      line-height: 0.85; letter-spacing: -0.04em;
      background: linear-gradient(180deg, #ffffff, #bae6fd);
      -webkit-background-clip: text; background-clip: text; color: transparent;
      font-variant-numeric: tabular-nums;
    }
    .absurd-hero-body { flex: 1; min-width: 240px; }
    .absurd-hero-head { font-size: clamp(1.35rem, 1rem + 1.6vw, 2rem); font-weight: 800; letter-spacing: -0.02em; line-height: 1.1; }
    .absurd-hero-blurb { color: #cbd5e1; margin-top: 8px; font-size: 14px; line-height: 1.5; max-width: 46ch; }
    .absurd-hero-logos { display: flex; align-items: center; gap: 8px; margin-top: 16px; }
    .absurd-hero-detail { color: #94a3b8; font-size: 12px; font-weight: 600; margin-left: 4px; font-variant-numeric: tabular-nums; }

    .absurd-card {
      position: relative; overflow: hidden; display: flex; flex-direction: column; gap: 12px;
      border: 1px solid #e5e7eb; border-radius: 16px; background: #fff; padding: 18px 18px 18px 22px;
      transition: transform 200ms cubic-bezier(0.23, 1, 0.32, 1), box-shadow 200ms cubic-bezier(0.23, 1, 0.32, 1), border-color 200ms cubic-bezier(0.23, 1, 0.32, 1);
    }
    .absurd-card::before {
      content: ''; position: absolute; left: 0; top: 0; bottom: 0; width: 4px;
      background: var(--absurd-accent, #3b82f6);
    }
    @media (hover: hover) and (pointer: fine) {
      .absurd-card:hover { transform: translateY(-3px); box-shadow: 0 14px 30px -16px rgba(15,23,42,0.28); border-color: var(--absurd-accent, #3b82f6); }
    }
    .absurd-card:focus-visible { outline: 2px solid var(--absurd-accent, #3b82f6); outline-offset: 2px; }
    .absurd-card-top { display: flex; align-items: center; justify-content: space-between; gap: 8px; }
    .absurd-tag { display: inline-flex; align-items: center; gap: 6px; font-size: 10px; font-weight: 800; text-transform: uppercase; letter-spacing: 0.06em; color: var(--absurd-accent, #3b82f6); }
    .absurd-icon { font-size: 15px; line-height: 1; }
    .absurd-num { font-size: clamp(1.9rem, 1.4rem + 2vw, 2.6rem); font-weight: 900; letter-spacing: -0.03em; line-height: 1; color: #0f172a; font-variant-numeric: tabular-nums; }
    .absurd-unit { font-size: 12px; font-weight: 600; color: #94a3b8; letter-spacing: 0; text-transform: none; margin-left: 2px; }
    .absurd-head { font-size: 14px; font-weight: 700; color: #0f172a; line-height: 1.25; }
    .absurd-detail { font-size: 12px; color: #6b7280; margin-top: 3px; font-variant-numeric: tabular-nums; }

    /* ==================== RIVALRIES ==================== */
    .rivalry-card { position: relative; overflow: hidden; display: flex; flex-direction: column; gap: 13px; border: 1px solid #e5e7eb; border-radius: 16px; background: #fff; padding: 18px 18px 18px 22px; transition: transform 200ms cubic-bezier(0.23,1,0.32,1), box-shadow 200ms cubic-bezier(0.23,1,0.32,1), border-color 200ms cubic-bezier(0.23,1,0.32,1); }
    .rivalry-card::before { content: ''; position: absolute; left: 0; top: 0; bottom: 0; width: 4px; background: var(--rivalry-accent, #ef4444); }
    @media (hover: hover) and (pointer: fine) { .rivalry-card:hover { transform: translateY(-3px); box-shadow: 0 14px 30px -16px rgba(15,23,42,0.28); border-color: var(--rivalry-accent, #ef4444); } }
    .rivalry-tag { display: inline-flex; align-items: center; gap: 6px; font-size: 10px; font-weight: 800; text-transform: uppercase; letter-spacing: 0.06em; color: var(--rivalry-accent, #ef4444); }
    .rivalry-name { font-size: 15px; font-weight: 800; color: #0f172a; line-height: 1.2; margin-top: 4px; }
    .rivalry-tagline { font-size: 12px; color: #6b7280; margin-top: 2px; line-height: 1.35; }
    .rivalry-vs { display: flex; align-items: stretch; gap: 8px; }
    .rivalry-side { flex: 1 1 0; min-width: 0; display: flex; flex-direction: column; align-items: center; gap: 5px; text-align: center; border-radius: 12px; padding: 12px 6px; background: #f8fafc; border: 1px solid #eef2f7; transition: background 160ms cubic-bezier(0.23,1,0.32,1), border-color 160ms cubic-bezier(0.23,1,0.32,1); cursor: pointer; }
    @media (hover: hover) and (pointer: fine) { .rivalry-side:hover { background: #f1f5f9; border-color: #e2e8f0; } }
    .rivalry-side:focus-visible { outline: 2px solid var(--rivalry-accent, #ef4444); outline-offset: 2px; }
    .rivalry-side.is-winner { background: #fff7ed; border-color: #fed7aa; }
    .rivalry-side-logo { width: 38px; height: 38px; object-fit: contain; }
    .rivalry-side-name { font-size: 12px; font-weight: 700; color: #0f172a; line-height: 1.15; display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden; }
    .rivalry-side-rating { font-size: 10px; font-weight: 700; color: #94a3b8; font-variant-numeric: tabular-nums; letter-spacing: 0.02em; }
    .rivalry-mid { display: flex; flex-direction: column; align-items: center; justify-content: center; gap: 3px; min-width: 50px; }
    .rivalry-series { font-size: 22px; font-weight: 900; letter-spacing: -0.02em; color: #0f172a; font-variant-numeric: tabular-nums; line-height: 1; }
    .rivalry-series-label { font-size: 9px; font-weight: 700; text-transform: uppercase; letter-spacing: 0.05em; color: #94a3b8; }
    .rivalry-scores { display: flex; flex-wrap: wrap; gap: 4px 12px; font-size: 11px; color: #64748b; font-variant-numeric: tabular-nums; }
    .rivalry-scores .rs-w { color: #16a34a; font-weight: 700; }
    .rivalry-edge { font-size: 11px; color: #6b7280; border-top: 1px dashed #e5e7eb; padding-top: 8px; }
    .rivalry-edge strong { color: #0f172a; }
    .rivalry-empty { font-size: 11px; color: #94a3b8; font-style: italic; }
    @media (prefers-reduced-motion: reduce) {
      .absurd-hero, .absurd-card { transition: none; }
      .absurd-hero:hover, .absurd-card:hover { transform: none; }
    }
    /* CBB tier chips — color-coded by quality */
    .cbb-tier {
      display: inline-flex;
      align-items: center;
      font-size: 9.5px;
      font-weight: 800;
      letter-spacing: 0.06em;
      text-transform: uppercase;
      padding: 3px 8px;
      border-radius: 999px;
      line-height: 1;
    }
    .cbb-tier.is-elite  { background: linear-gradient(135deg, #fef3c7, #fde68a); color: #92400e; }
    .cbb-tier.is-strong { background: #dbeafe; color: #1e40af; }
    .cbb-tier.is-solid  { background: #ecfdf5; color: #047857; }
    .cbb-tier.is-bubble { background: #fef2f2; color: #b91c1c; }
    /* CBB Rating cell — prominent number treatment */
    .cbb-rating-cell {
      font-weight: 800;
      font-size: 14px;
      color: #0f172a;
      letter-spacing: -0.01em;
    }
    /* Row entrance — staggered blur-up when CBB slide activates (Emil curve, 40ms stagger) */
    @keyframes cbb-row-enter {
      from { opacity: 0; filter: blur(6px); transform: translateY(8px); }
      to   { opacity: 1; filter: blur(0);  transform: translateY(0); }
    }
    .cbb-row-anim {
      animation: cbb-row-enter 260ms cubic-bezier(0.23, 1, 0.32, 1) both;
    }
    @media (prefers-reduced-motion: reduce) {
      .cbb-row-anim { animation: none; opacity: 1; filter: none; transform: none; }
    }

    /* ==================== AUTO-BID TRACKER (redesign) ==================== */
    /* Emil principles: subtle hover (no scale on list cards), staggered entrance,
       custom cubic-bezier, beauty as leverage — colored chips + seed prominence. */
    /* Auto-Bid Tracker — March Madness "ticket punched" cards. Each conference
       champion gets a tear-off ticket: team-colored stub w/ vertical conf name +
       year, a perforated seam (dashed line + punched notches), and a body with
       logo, seed, and punch status. Bg behind is white (#fff) — notches match. */
    .ab-tracker {
      display: grid;
      grid-template-columns: repeat(auto-fit, minmax(252px, 1fr));
      gap: 14px;
    }
    .ab-card {                       /* ticket root */
      --tc: 100,100,100;             /* champion team color (r,g,b), set inline */
      position: relative;
      display: grid;
      grid-template-columns: 54px 1fr;
      min-height: 106px;
      background: #fff;
      border: 1px solid #e5e7eb;
      border-radius: 12px;
      overflow: hidden;              /* clip the colored stub to the radius */
      /* Specific properties only — never transition:all */
      transition: border-color 200ms cubic-bezier(0.23,1,0.32,1),
                  box-shadow 200ms cubic-bezier(0.23,1,0.32,1),
                  transform 160ms cubic-bezier(0.23,1,0.32,1);
    }
    /* Punched notches straddling the stub seam, top + bottom edge */
    .ab-card::before,
    .ab-card::after {
      content: '';
      position: absolute;
      left: 54px;
      width: 12px;
      height: 12px;
      background: #fff;
      border-radius: 50%;
      transform: translateX(-50%);
      box-shadow: inset 0 0 0 1px #e5e7eb;
      z-index: 2;
    }
    .ab-card::before { top: -6px; }
    .ab-card::after  { bottom: -6px; }
    /* Hover gated by hover-capable pointer (Emil rule: no false touch-hover) */
    @media (hover: hover) and (pointer: fine) {
      .ab-card:hover {
        border-color: rgb(var(--tc));
        box-shadow: 0 6px 20px rgba(15,23,42,0.10);
      }
    }
    /* Press feedback only when the card is clickable */
    .ab-card.is-clickable { cursor: pointer; }
    .ab-card.is-clickable:active { transform: scale(0.98); }
    @media (prefers-reduced-motion: reduce) {
      .ab-card,
      .ab-card.is-clickable:active { transition: none; transform: none; }
    }
    /* Colored tear-off stub (left). Gradient overlay keeps white ink readable
       on light team colors; luminance-aware --stub-ink flips to dark when needed. */
    .ab-stub {
      --stub-ink: #fff;
      position: relative;
      display: flex;
      align-items: center;
      justify-content: center;
      color: var(--stub-ink);
      background: linear-gradient(155deg, rgba(255,255,255,0.18), rgba(0,0,0,0.22)), rgb(var(--tc));
      border-right: 2px dashed rgba(255,255,255,0.55);
    }
    .ab-stub-conf {
      writing-mode: vertical-rl;
      transform: rotate(180deg);
      font-size: 9px;
      font-weight: 900;
      letter-spacing: 0.08em;
      line-height: 1;
      text-transform: uppercase;
      white-space: nowrap;
      max-height: 78px;            /* leaves room for the year at the bottom */
      overflow: hidden;
      text-shadow: 0 1px 2px rgba(0,0,0,0.28);
    }
    /* Longest conference names (12+ chars, e.g. "Mountain West") shrink to fit vertically */
    .ab-stub-conf.is-long { font-size: 7.5px; letter-spacing: 0.03em; }
    .ab-stub-year {
      position: absolute;
      bottom: 6px;
      left: 50%;
      transform: translateX(-50%);
      font-size: 7.5px;
      font-weight: 800;
      letter-spacing: 0.08em;
      opacity: 0.85;
    }
    /* Ticket body (right) */
    .ab-body {
      display: flex;
      flex-direction: column;
      gap: 7px;
      padding: 12px 14px 11px 18px;
      min-width: 0;
    }
    .ab-eyebrow {
      display: inline-flex;
      align-items: center;
      gap: 4px;
      font-size: 8.5px;
      font-weight: 900;
      letter-spacing: 0.12em;
      text-transform: uppercase;
      color: rgb(var(--tc));
    }
    .ab-eyebrow.is-proj { color: #b45309; }
    .ab-team {
      display: flex;
      align-items: center;
      gap: 10px;
      min-width: 0;
    }
    .ab-team-logo {
      width: 34px;
      height: 34px;
      object-fit: contain;
      flex-shrink: 0;
    }
    .ab-team-meta {
      display: flex;
      flex-direction: column;
      gap: 1px;
      min-width: 0;
    }
    .ab-team-seed {
      font-size: 9px;
      font-weight: 800;
      color: #94a3b8;
      letter-spacing: 0.06em;
      text-transform: uppercase;
    }
    .ab-team-name {
      font-size: 16px;
      font-weight: 800;
      letter-spacing: -0.01em;
      color: #0f172a;
      white-space: nowrap;
      overflow: hidden;
      text-overflow: ellipsis;
    }
    .ab-status {
      display: inline-flex;
      align-items: center;
      gap: 5px;
      font-size: 9.5px;
      font-weight: 800;
      letter-spacing: 0.08em;
      text-transform: uppercase;
      padding: 4px 8px;
      border-radius: 999px;
      align-self: flex-start;
      line-height: 1;
    }
    .ab-status.is-final {
      background: #ecfdf5;
      color: #047857;
    }
    .ab-status.is-final::before {
      content: '';
      width: 6px;
      height: 6px;
      border-radius: 999px;
      background: #10b981;
    }
    .ab-status.is-proj {
      background: #fffbeb;
      color: #92400e;
    }
    .ab-status.is-proj::before {
      content: '';
      width: 6px;
      height: 6px;
      border-radius: 999px;
      background: #f59e0b;
      animation: ab-pulse 2200ms cubic-bezier(0.4, 0, 0.6, 1) infinite;
    }
    @keyframes ab-pulse { 0%, 100% { opacity: 1; } 50% { opacity: 0.4; } }
    @media (prefers-reduced-motion: reduce) {
      .ab-status.is-proj::before { animation: none; }
    }
    .ct-champ-card {
      padding: 14px 18px; background: linear-gradient(135deg, #fef3c7, #fde68a);
      border-top: 1px solid #fcd34d;
      /* Specific properties only; will transform on press if clickable */
      transition: filter 200ms cubic-bezier(0.23,1,0.32,1),
                  transform 160ms cubic-bezier(0.23,1,0.32,1);
    }
    .ct-champ-card .label { font-size: 10px; font-weight: 700; color: #92400e;
      text-transform: uppercase; letter-spacing: 0.08em; }
    .ct-champ-card .name { font-size: 15px; font-weight: 800; color: #422006; margin-top: 2px; display: flex; align-items: center; gap: 8px; }
    .ct-champ-card .name img { width: 22px; height: 22px; object-fit: contain; }
    /* Clickable champion card — feel pressable, slight warm-glow on hover */
    .ct-champ-card.is-clickable { cursor: pointer; }
    @media (hover: hover) and (pointer: fine) {
      .ct-champ-card.is-clickable:hover { filter: brightness(1.04); }
    }
    .ct-champ-card.is-clickable:active { transform: scale(0.98); }
    .ct-champ-card.is-clickable:focus-visible { outline: 2px solid #ca8a04; outline-offset: 2px; }
    @media (prefers-reduced-motion: reduce) {
      .ct-champ-card,
      .ct-champ-card.is-clickable:active { transition: none; transform: none; filter: none; }
    }

    /* ====== Takes interactivity ====== */
    .take-card {
      border-radius: 12px; border: 1px solid #e5e7eb; background: white;
      padding: 16px 18px; cursor: pointer;
      transition: border-color 200ms ease, box-shadow 200ms ease, transform 200ms cubic-bezier(0.23,1,0.32,1);
    }
    @media (hover: hover) and (pointer: fine) {
      .take-card:hover { border-color: #cbd5e1; box-shadow: 0 4px 12px rgba(0,0,0,0.04); }
    }
    .take-vote-btn {
      display: inline-flex; align-items: center; gap: 4px;
      padding: 4px 8px; border-radius: 6px;
      border: 1px solid transparent; background: transparent;
      font-size: 11px; font-weight: 600; color: #64748b; cursor: pointer;
      transition: background-color 150ms ease, color 150ms ease, transform 160ms cubic-bezier(0.23,1,0.32,1);
    }
    .take-vote-btn:active { transform: scale(0.97); }
    @media (hover: hover) and (pointer: fine) {
      .take-vote-btn:hover { background: #f1f5f9; color: #0f172a; }
    }
    .take-vote-btn.voted { background: rgba(22,163,74,0.1); color: #16a34a; }
    .take-vote-btn.voted svg { color: #16a34a; }

    .takes-filter-row {
      display: flex; gap: 8px; margin-bottom: 16px; flex-wrap: wrap;
    }
    .takes-team-filter {
      padding: 4px 10px; border-radius: 16px;
      border: 1px solid #e5e7eb; background: white; color: #64748b;
      font-size: 11px; font-weight: 600; cursor: pointer;
      transition: background-color 150ms ease, color 150ms ease, border-color 150ms ease, transform 160ms cubic-bezier(0.23,1,0.32,1);
    }
    .takes-team-filter:active { transform: scale(0.96); }
    .takes-team-filter.active { background: #0f172a; color: white; border-color: #0f172a; }

    .take-post-modal {
      display: none; position: fixed; inset: 0; z-index: 200;
      background: rgba(0,0,0,0.4); backdrop-filter: blur(4px);
      align-items: center; justify-content: center;
    }
    .take-post-modal.open { display: flex; animation: gs-fade-in 200ms cubic-bezier(0.23,1,0.32,1); }
    .take-post-card {
      background: white; border-radius: 16px; padding: 24px 28px;
      width: 92%; max-width: 480px;
      box-shadow: 0 20px 60px rgba(0,0,0,0.18);
      animation: gs-pop 280ms cubic-bezier(0.23,1,0.32,1);
    }
    .take-post-card h3 { font-size: 16px; font-weight: 700; color: #0f172a; margin-bottom: 12px; }
    .take-post-card textarea {
      width: 100%; min-height: 90px; padding: 10px 12px;
      border: 1px solid #e5e7eb; border-radius: 10px;
      font-size: 14px; resize: none; outline: none;
      transition: border-color 200ms ease;
    }
    .take-post-card textarea:focus { border-color: #0f172a; }
    .take-post-card .tag-row { display: flex; gap: 6px; margin-top: 10px; flex-wrap: wrap; }
    .take-post-card .tag-chip {
      padding: 3px 9px; border-radius: 14px; border: 1px solid #e5e7eb;
      background: none; font-family: inherit; /* chips are real <button>s now (keyboard a11y) */
      font-size: 11px; font-weight: 600; color: #64748b; cursor: pointer;
      transition: background-color 150ms ease, color 150ms ease, border-color 150ms ease;
    }
    .take-post-card .tag-chip.active { background: #0f172a; color: white; border-color: #0f172a; }
    .take-post-card .tp-msg { font-size: 12.5px; font-weight: 600; color: #dc2626; margin-top: 10px; min-height: 0; line-height: 1.4; }
    .take-post-card .tp-msg.show { min-height: 16px; }
    .take-post-card .tp-guide { font-size: 11.5px; color: #94a3b8; margin-top: 10px; line-height: 1.45; }
    .take-post-card .tp-guide a { color: #64748b; text-decoration: underline; font-weight: 600; }
    @media (hover: hover) and (pointer: fine) { .take-post-card .tp-guide a:hover { color: #0f172a; } }
    .take-post-card .actions { display: flex; gap: 8px; justify-content: flex-end; margin-top: 14px; }
    .tp-cancel { padding: 8px 14px; border-radius: 8px; background: transparent; border: 1px solid #e5e7eb; color: #64748b; font-size: 13px; font-weight: 600; cursor: pointer; transition: background-color 150ms ease, transform 160ms cubic-bezier(0.23,1,0.32,1); }
    .tp-cancel:active { transform: scale(0.97); }
    @media (hover: hover) and (pointer: fine) {
      .tp-cancel:hover { background: #f8fafc; }
    }
    .tp-submit { padding: 8px 14px; border-radius: 8px; background: #0f172a; border: none; color: white; font-size: 13px; font-weight: 600; cursor: pointer; transition: background-color 150ms ease, transform 160ms cubic-bezier(0.23,1,0.32,1); }
    .tp-submit:active { transform: scale(0.97); }
    @media (hover: hover) and (pointer: fine) {
      .tp-submit:hover { background: #1e293b; }
    }
    .hero-word { position: absolute; transition: transform 280ms cubic-bezier(0.23,1,0.32,1), opacity 280ms cubic-bezier(0.23,1,0.32,1); }
    .card-hover { transition: background-color 200ms ease, border-color 200ms ease, box-shadow 200ms ease, transform 200ms cubic-bezier(0.23,1,0.32,1); }
    @media (hover: hover) and (pointer: fine) { .card-hover:hover { background: #f3f4f6; border-color: #d1d5db; } }
    @media (hover: hover) and (pointer: fine) {
      .row-hover:hover { background: rgba(0,0,0,0.02); }
    }
    /* Quad page polish */
    @keyframes rowSlideIn { from { opacity:0; transform:translateY(8px); } to { opacity:1; transform:translateY(0); } }
    .quad-row-anim { animation: rowSlideIn 0.35s ease-out both; }
    .quad-leader-card {
      position: relative;
      overflow: hidden;
      transition: transform 0.2s ease, box-shadow 0.2s ease;
    }
    @media (hover: hover) and (pointer: fine) {
      .quad-leader-card:hover {
        transform: translateY(-2px);
        box-shadow: 0 8px 24px rgba(0,0,0,0.06);
    
      }
    }
    .quad-leader-card::before {
      content: '';
      position: absolute;
      top: 0; left: 0; right: 0;
      height: 3px;
      border-radius: 12px 12px 0 0;
    }
    .qlc-green::before { background: linear-gradient(90deg, #10b981, #34d399); }
    .qlc-blue::before { background: linear-gradient(90deg, #3b82f6, #60a5fa); }
    .qlc-dark::before { background: linear-gradient(90deg, #09090b, #374151); }
    .qlc-amber::before { background: linear-gradient(90deg, #f59e0b, #fbbf24); }
    @media (hover: hover) and (pointer: fine) {
      .quad-row-hover:hover {
        background: linear-gradient(90deg, rgba(16,185,129,0.04) 0%, transparent 30%);
        border-left: 3px solid #10b981;
    
      }
    }
    .quad-row-hover { border-left: 3px solid transparent; transition: background-color 150ms ease, border-color 150ms ease; }
    .quad-rank-badge {
      display: inline-flex; align-items: center; justify-content: center;
      width: 28px; height: 28px; border-radius: 8px; font-weight: 700; font-size: 12px;
    }
    .qrb-1 { background: linear-gradient(135deg, #fbbf24, #f59e0b); color: white; box-shadow: 0 2px 6px rgba(245,158,11,0.3); }
    .qrb-2 { background: linear-gradient(135deg, #94a3b8, #64748b); color: white; box-shadow: 0 2px 6px rgba(100,116,139,0.3); }
    .qrb-3 { background: linear-gradient(135deg, #d97706, #b45309); color: white; box-shadow: 0 2px 6px rgba(180,83,9,0.3); }
    /* Emil: buttons must feel responsive to press — scale(0.97) confirms input */
    .btn { cursor: pointer; transition: transform 160ms cubic-bezier(0.23,1,0.32,1), color 160ms ease, background-color 160ms ease, border-color 160ms ease, opacity 160ms ease; }
    .btn:active { transform: scale(0.97); }
    /* Touch-device hover guard — gate hover behind real cursor presence */
    @media (hover: hover) and (pointer: fine) {
      .btn:hover { opacity: 0.85; }
    }
    .badge { display: inline-flex; align-items: center; border-radius: 9999px; padding: 2px 10px; font-size: 11px; font-weight: 500; border: 1px solid #e5e7eb; color: #6b7280; }
    .badge-solid { border: none; }
    .tag-hot { background: rgba(239,68,68,0.08); color: #dc2626; border: none; }
    .tag-analysis { background: rgba(59,130,246,0.08); color: #2563eb; border: none; }
    .tag-conf { background: rgba(168,85,247,0.08); color: #7c3aed; border: none; }
    .streak-w { background: rgba(22,163,74,0.08); color: #16a34a; border: none; }
    .streak-l { background: rgba(220,38,38,0.08); color: #dc2626; border: none; }
    @keyframes slideUp { from { opacity:0; transform:translateY(40px); } to { opacity:1; transform:translateY(0); } }
    .animate-up { animation: slideUp 0.5s ease-out forwards; }
    .delay-1 { animation-delay: 60ms; opacity: 0; }
    .delay-2 { animation-delay: 120ms; opacity: 0; }
    .delay-3 { animation-delay: 180ms; opacity: 0; }
    .delay-4 { animation-delay: 240ms; opacity: 0; }

    /* Emil press feedback on pressable rows/cards (audit 2026-06-10) */
    .cmp-row:active, .row-hover:active, .quad-leader-card:active,
    .bk-game:active, .bk-firstfour-game:active, .bk-bubble-team:active, .ap-other-team:active,
    .team-schedule-row:active, .standings-card:active { transform: scale(0.985); }
    .standings-table tbody tr:active { background: #eef2f7; }

    /* Reduced-motion: jump entrance animations to their final frame (fill-mode lands them visible) */
    @media (prefers-reduced-motion: reduce) {
      .quad-row-anim, .animate-up,
      .team-ring, .team-ring svg .ring-progress, .team-ring-center .v, .team-ring-center .l,
      .team-seed-box, .team-seed-box::before, .team-seed-box .sb-label, .team-seed-box .sb-val, .team-seed-box .sb-sub,
      .team-hero-sim-btn, .metric-tip-card, .bk-bubble-card.bubble-in {
        animation-duration: 0.01ms !important;
        animation-delay: 0ms !important;
      }
    }

    /* ====== Framer Motion-inspired Animation System ====== */
    /* Text effect presets */
    @keyframes fx-blur-in { from { opacity:0; filter:blur(10px); } to { opacity:1; filter:blur(0px); } }
    @keyframes fx-slide-up { from { opacity:0; transform:translateY(20px); } to { opacity:1; transform:translateY(0); } }
    /* Emil: never animate from scale(0) — nothing in the real world appears from nothing */
    @keyframes fx-scale-in { from { opacity:0; transform:scale(0.95); } to { opacity:1; transform:scale(1); } }
    @keyframes fx-fade-out { from { opacity: 1; } to { opacity: 0; } }
    @keyframes fx-fade-in { from { opacity:0; } to { opacity:1; } }
    @keyframes fx-blur-slide { from { opacity:0; filter:blur(8px); transform:translateY(12px); } to { opacity:1; filter:blur(0); transform:translateY(0); } }
    @keyframes fx-shake { 0%{transform:translateX(0)} 20%{transform:translateX(-5px)} 40%{transform:translateX(5px)} 60%{transform:translateX(-5px)} 80%{transform:translateX(5px)} 100%{transform:translateX(0)} }

    .fx-word { display:inline-block; white-space:pre; opacity:0; will-change:opacity,filter,transform; }
    .fx-char { display:inline-block; white-space:pre; opacity:0; will-change:opacity,filter,transform; }
    .fx-line { display:block; opacity:0; will-change:opacity,filter,transform; }

    /* Emil Kowalski ease-out. Heading (blur) + subheading (fade) word reveals run a touch
       longer on the gentler expo curve cubic-bezier(0.16,1,0.3,1) for a smoother flow
       (boss 2026-06-13: "a tad smoother"); slide/scale stay snappy for UI elements. */
    .fx-blur .fx-word, .fx-blur .fx-char, .fx-blur .fx-line { animation:fx-blur-in 400ms cubic-bezier(0.16,1,0.3,1) forwards; }
    /* Home hero H1 only — slower, more deliberate reveal than the shared 400ms text-fx
       (boss 2026-07-25). Per-word stagger is set inline via data-text-stagger. */
    .hero-title-fx.fx-blur .fx-word { animation-duration: 900ms; }
    .fx-slide .fx-word, .fx-slide .fx-char, .fx-slide .fx-line { animation:fx-slide-up 260ms cubic-bezier(0.23,1,0.32,1) forwards; }
    .fx-scale .fx-word, .fx-scale .fx-char, .fx-scale .fx-line { animation:fx-scale-in 260ms cubic-bezier(0.23,1,0.32,1) forwards; }
    .fx-fade .fx-word, .fx-fade .fx-char, .fx-fade .fx-line { animation:fx-fade-in 320ms cubic-bezier(0.16,1,0.3,1) forwards; }
    .fx-shake .fx-word, .fx-shake .fx-char, .fx-shake .fx-line { animation:fx-shake 400ms cubic-bezier(0.23,1,0.32,1) forwards; opacity:1; }

    /* Entrance animations must be RETIRED once played, not just left finished.
       A CSS animation restarts whenever its element re-enters layout, and this app
       shows/hides whole sections with style.display — e.g. renderSeasonStory() flips
       #season-picker between display:none and '' when you leave a team's story. That
       un-hide replayed the finished word-reveal on the "Every team has a story" heading
       from frame zero, with no JS involved at all, so guarding textEffect() could never
       have stopped it. These classes are added when the entrance completes and kill the
       animation outright; `!important` is required to beat animateEl's inline style. */
    .fx-done .fx-word, .fx-done .fx-char, .fx-done .fx-line {
      animation: none !important; opacity: 1 !important; filter: none !important; transform: none !important; will-change: auto;
    }

    /* Element entrance — initial state hidden, JS applies animation inline */
    [data-anim] { opacity:0; }
    [data-anim].anim-done { opacity:1; animation: none !important; filter: none !important; transform: none !important; }

    /* HoverButton */
    .hover-btn {
      position: relative;
      isolation: isolate;
      padding: 10px 28px;
      border-radius: 24px;
      font-weight: 500;
      font-size: 14px;
      line-height: 1.5;
      backdrop-filter: blur(12px);
      cursor: pointer;
      overflow: hidden;
      border: none;
      display: inline-flex;
      align-items: center;
      gap: 8px;
      transition: transform 150ms;
    }
    .hover-btn:active { transform: scale(0.975); }
    .hover-btn::before {
      content: '';
      position: absolute;
      inset: 0;
      border-radius: inherit;
      pointer-events: none;
      z-index: 1;
      transition: transform 300ms;
    }
    .hover-btn-dark {
      background: rgba(9,9,11,0.95);
      color: #fafafa;
    }
    .hover-btn-dark::before {
      box-shadow: inset 0 0 0 1px rgba(255,255,255,0.12), inset 0 0 16px 0 rgba(255,255,255,0.04), 0 1px 3px 0 rgba(0,0,0,0.5), 0 4px 12px 0 rgba(0,0,0,0.35);
    }
    .hover-btn-light {
      background: rgba(255,255,255,0.85);
      color: #09090b;
    }
    .hover-btn-light::before {
      box-shadow: inset 0 0 0 1px rgba(170,202,255,0.2), inset 0 0 16px 0 rgba(170,202,255,0.1), inset 0 -3px 12px 0 rgba(170,202,255,0.15), 0 1px 3px 0 rgba(0,0,0,0.12), 0 4px 12px 0 rgba(0,0,0,0.08);
    }
    .hover-btn .hover-circle {
      position: absolute;
      width: 12px;
      height: 12px;
      border-radius: 50%;
      filter: blur(12px);
      pointer-events: none;
      z-index: -1;
      transform: translate(-50%, -50%);
      opacity: 0;
      transition: opacity 300ms;
    }
    .hover-btn .hover-circle.fade-in { opacity: 0.75; }
    .hover-btn .hover-circle.fade-out { opacity: 0; transition-duration: 0.5s; }
    .hover-btn-sm { padding: 6px 16px; font-size: 12px; border-radius: 20px; gap: 6px; }
    .hover-btn-xs { padding: 4px 12px; font-size: 11px; border-radius: 16px; gap: 4px; }

    /* Team logo in table rows */
    .team-logo-sm {
      width: 28px; height: 28px; object-fit: contain; flex-shrink: 0;
    }
    .team-link { cursor: pointer; transition: opacity 0.15s; }
    @media (hover: hover) and (pointer: fine) {
      .team-link:hover { opacity: 0.7; }
    }

    /* Bracket outlet tabs */
    .bracket-tab {
      display: flex; flex-direction: column; align-items: center; gap: 1px;
      padding: 10px 20px; border-radius: 12px; cursor: pointer;
      border: 1.5px solid #e5e7eb; background: white; color: #6b7280;
      transition: border-color 200ms ease, background-color 200ms ease, color 200ms ease; font-size: 14px;
    }
    @media (hover: hover) and (pointer: fine) {
      .bracket-tab:hover { border-color: #d1d5db; background: #f9fafb; }
    }
    .bracket-tab:active { transform: scale(0.97); }
    .bracket-tab-active {
      background: #09090b !important; color: white !important;
      border-color: #09090b !important;
    }

    /* Bracket view toggle */
    .bk-view-btn { padding: 8px 16px; border-radius: 10px; font-size: 13px; font-weight: 600; cursor: pointer; border: 1.5px solid #e5e7eb; background: white; color: #6b7280; transition: border-color 200ms ease, background-color 200ms ease, color 200ms ease, transform 160ms cubic-bezier(0.23,1,0.32,1); }
    @media (hover: hover) and (pointer: fine) {
      .bk-view-btn:hover { border-color: #d1d5db; background: #f9fafb; }
    }
    .bk-view-btn:active { transform: scale(0.97); }
    .bk-view-btn-active { background: #09090b !important; color: white !important; border-color: #09090b !important; }

    /* Flat bracket — compact first round */
    .bk-game {
      display: flex; border-radius: 8px; overflow: hidden;
      border: 1px solid #e5e7eb; transition: border-color 150ms ease, box-shadow 150ms ease; cursor: pointer;
    }
    @media (hover: hover) and (pointer: fine) {
      .bk-game:hover { border-color: #d1d5db; box-shadow: 0 1px 4px rgba(0,0,0,0.05); }
    }
    .bk-slot {
      flex: 1; padding: 5px 8px; font-size: 11px; display: flex;
      align-items: center; gap: 5px; background: white; min-width: 0;
    }
    .bk-slot:first-child { border-right: 1px solid #f1f5f9; }
    .bk-slot .bk-seed { font-weight: 700; color: #9ca3af; min-width: 14px; font-size: 10px; text-align: center; }
    .bk-slot .bk-name { font-weight: 500; color: #111827; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; font-size: 11px; }
    .bk-slot .bk-logo { width: 16px; height: 16px; object-fit: contain; flex-shrink: 0; }
    .bk-slot-playin { background: linear-gradient(to right, white, #fffbeb); }
    .bk-slot-playin .bk-name { color: #92400e; font-style: italic; white-space: normal; line-height: 1.2; font-size: 10px; }
    .bk-playin-badge {
      font-size: 8px; font-weight: 800; color: #ea580c;
      background: rgba(251,146,60,0.15);
      padding: 1px 4px; border-radius: 3px; margin-left: auto;
      letter-spacing: 0.04em;
    }
    .bk-vs { width: 20px; display: flex; align-items: center; justify-content: center; font-size: 8px; font-weight: 700; color: #d1d5db; background: #fafafa; flex-shrink: 0; }

    /* Region bracket card */
    .bk-region-card {
      border-radius: 16px; border: 1.5px solid #e5e7eb; background: white;
      overflow: hidden; padding: 14px;
    }
    .bk-region-title {
      font-size: 11px; font-weight: 800; letter-spacing: 0.08em; text-transform: uppercase;
      margin-bottom: 10px; display: flex; align-items: center; gap: 8px;
    }

    /* Bubble card */
    .bk-bubble-card {
      border-radius: 16px; border: 1.5px solid #e5e7eb; background: white;
      overflow: hidden;
    }
    /* Bubble pop-in animation triggered when switching to the Bubble view */
    @keyframes bubble-pop-in {
      0%   { opacity: 0; transform: scale(0.85) translateY(8px); filter: blur(6px); }
      55%  { opacity: 1; transform: scale(1.035) translateY(-2px); filter: blur(0); }
      85%  { transform: scale(0.985) translateY(0); }
      100% { transform: scale(1) translateY(0); }
    }
    .bk-bubble-card.bubble-in { animation: bubble-pop-in 280ms cubic-bezier(0.23, 1, 0.32, 1) both; }
    .bk-bubble-card.bubble-in:nth-child(2) { animation-delay: 60ms; }
    .bk-bubble-card.bubble-in:nth-child(3) { animation-delay: 120ms; }
    .bk-bubble-card.bubble-in:nth-child(4) { animation-delay: 180ms; }

    /* Champion banner — activates only when DATA ships the final-bracket shape (DATA-SOURCES.md line 167).
       Auto-suppresses on projection outlets (no .champion in payload). */
    #bk-champion-banner:empty { display: none; }
    .bk-champion-card {
      border-radius: 16px; padding: 18px 22px; margin-bottom: 18px;
      background: linear-gradient(135deg, #fefce8 0%, #fef3c7 50%, #fde68a 100%);
      border: 1.5px solid #facc15;
      box-shadow: 0 4px 14px -2px rgba(202, 138, 4, 0.18);
      display: flex; flex-direction: column; gap: 10px;
    }
    .bk-champion-label {
      font-size: 11px; font-weight: 800; color: #854d0e;
      text-transform: uppercase; letter-spacing: 0.1em;
    }
    .bk-champion-team {
      display: flex; align-items: center; gap: 14px; cursor: pointer;
      border-radius: 10px; padding: 6px 8px; margin-left: -8px;
      transition: background 180ms cubic-bezier(0.23, 1, 0.32, 1),
                  transform 180ms cubic-bezier(0.23, 1, 0.32, 1);
    }
    @media (hover: hover) and (pointer: fine) {
      .bk-champion-team:hover { background: rgba(255, 255, 255, 0.6); }
    }
    .bk-champion-team:active { transform: scale(0.985); }
    .bk-champion-team:focus-visible {
      outline: 2px solid #ca8a04; outline-offset: 2px;
    }
    .bk-champion-logo {
      width: 44px; height: 44px; object-fit: contain; flex-shrink: 0;
    }
    .bk-champion-name {
      font-size: 22px; font-weight: 800; color: #422006;
      letter-spacing: -0.01em;
    }
    @media (prefers-reduced-motion: reduce) {
      .bk-champion-team { transition: none; }
      .bk-champion-team:active { transform: none; }
    }

    /* First Four section under the bracket */
    .bk-firstfour-card {
      border-radius: 14px; border: 1.5px solid #e5e7eb; background: white;
      overflow: hidden;
      grid-column: 1 / -1;
    }
    .bk-firstfour-header {
      padding: 12px 18px; border-bottom: 1px solid #f1f5f9;
      display: flex; align-items: center; justify-content: space-between;
      background: linear-gradient(180deg, #fffbeb, #fffefa);
    }
    .bk-firstfour-header h3 { font-size: 14px; font-weight: 700; color: #92400e;
      display: flex; align-items: center; gap: 6px; }
    .bk-firstfour-grid {
      display: grid; grid-template-columns: 1fr 1fr; gap: 0;
    }
    .bk-firstfour-col {
      padding: 12px 0;
    }
    .bk-firstfour-col:first-child { border-right: 1px solid #f1f5f9; }
    @media (max-width: 767px) {
      .bk-firstfour-grid { grid-template-columns: 1fr; }
      .bk-firstfour-col:first-child { border-right: none; border-bottom: 1px solid #f1f5f9; }
    }
    .bk-firstfour-coltitle {
      font-size: 10px; font-weight: 700; color: #94a3b8;
      text-transform: uppercase; letter-spacing: 0.08em;
      padding: 0 18px 8px;
    }
    .bk-firstfour-game {
      display: grid; grid-template-columns: 1fr auto 1fr;
      align-items: center; gap: 8px;
      padding: 6px 18px;
      transition: background 0.15s;
    }
    @media (hover: hover) and (pointer: fine) {
      .bk-firstfour-game:hover { background: #fafbfc; }
    }
    .bk-firstfour-team {
      display: flex; align-items: center; gap: 6px; cursor: pointer;
      font-size: 12px; font-weight: 600; color: #0f172a;
      min-width: 0;
    }
    .bk-firstfour-team img { width: 16px; height: 16px; object-fit: contain; flex-shrink: 0; }
    .bk-firstfour-team .name { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
    .bk-firstfour-team.right { justify-content: flex-end; }
    .bk-firstfour-vs { font-size: 9px; color: #94a3b8; font-weight: 600; }
    .bk-firstfour-seed {
      font-size: 9px; color: #f59e0b; font-weight: 800; min-width: 16px;
    }
    .bk-bubble-header {
      padding: 14px 18px; border-bottom: 1px solid #f1f5f9;
      display: flex; align-items: center; justify-content: space-between;
    }
    .bk-bubble-team {
      display: flex; align-items: center; gap: 8px; padding: 10px 18px;
      border-bottom: 1px solid #f9fafb; cursor: pointer; transition: background 0.15s;
    }
    .bk-bubble-team:last-child { border-bottom: none; }
    @media (hover: hover) and (pointer: fine) {
      .bk-bubble-team:hover { background: #f9fafb; }
    }

    /* Rankings 3D Carousel */
    .rankings-3d-section {
      padding: 0 0 16px;
      position: relative;
      overflow: hidden;
    }
    .rankings-3d-stage {
      position: relative;
      perspective: 1200px;
      perspective-origin: 50% 50%;
      width: 100%;
      max-width: 1200px;
      margin: 0 auto;
      /* height set by JS after tables populate */
    }
    .rankings-panel {
      position: absolute;
      top: 0;
      left: 50%;
      width: 78%;
      max-width: 940px;
      transform-origin: 50% 50%;
      transition: transform 0.4s cubic-bezier(0.25, 1, 0.5, 1),
                  opacity 0.4s cubic-bezier(0.25, 1, 0.5, 1),
                  filter 0.4s cubic-bezier(0.25, 1, 0.5, 1),
                  box-shadow 0.4s cubic-bezier(0.25, 1, 0.5, 1);
      border-radius: 16px;
      overflow: hidden;
      background: #ffffff;
      border: 1px solid #e5e7eb;
      will-change: transform, opacity, filter;
    }
    .rankings-panel .panel-header {
      padding: 16px 20px 10px;
      border-bottom: 1px solid #e5e7eb;
      background: linear-gradient(180deg, #f9fafb, #ffffff);
    }
    .rankings-tab-pill {
      position: relative;
      isolation: isolate;
      padding: 10px 24px;
      border-radius: 24px;
      font-weight: 600;
      font-size: 14px;
      line-height: 1.5;
      cursor: pointer;
      border: none;
      display: inline-flex;
      align-items: center;
      gap: 6px;
      transition: transform 280ms cubic-bezier(0.23,1,0.32,1), background-color 280ms ease, color 280ms ease, box-shadow 280ms ease;
    }
    .rankings-tab-pill:active { transform: scale(0.97); }

    /* ====== Others Receiving Votes (AP) ====== */
    .ap-others-section {
      border-top: 1px solid #e5e7eb;
      padding: 16px 20px 18px;
      background: linear-gradient(180deg, #fafafa, #ffffff);
    }
    .ap-others-header {
      display: flex; align-items: center; justify-content: space-between;
      margin-bottom: 10px;
    }
    .ap-others-title {
      font-size: 11px; font-weight: 700; color: #6b7280;
      text-transform: uppercase; letter-spacing: 0.08em;
    }
    .ap-others-count { font-size: 10px; color: #9ca3af; }
    .ap-others-list {
      display: flex; flex-wrap: wrap; gap: 6px;
      font-size: 12px; line-height: 1.5;
    }
    .ap-other-team {
      display: inline-flex; align-items: center; gap: 6px;
      padding: 3px 9px; border-radius: 14px;
      background: white; border: 1px solid #e5e7eb;
      color: #374151;
      transition: border-color 200ms ease, background-color 200ms ease;
    }
    @media (hover: hover) and (pointer: fine) {
      .ap-other-team:hover { border-color: #cbd5e1; background: #f8fafc; }
    }
    .ap-other-team img { width: 14px; height: 14px; object-fit: contain; }
    .ap-other-name { font-weight: 600; }
    .ap-other-pts {
      color: #9ca3af; font-size: 10px; font-weight: 600;
      padding-left: 4px; border-left: 1px solid #f1f5f9; margin-left: 2px;
    }
    .ap-others-empty {
      font-size: 12px; color: #9ca3af; font-style: italic;
    }
    .rankings-tab-pill.tab-active {
      background: #09090b;
      color: #ffffff;
      box-shadow: 0 1px 3px rgba(0,0,0,0.2), 0 4px 12px rgba(0,0,0,0.1);
      transform: scale(1.05);
    }
    .rankings-tab-pill.tab-inactive {
      background: rgba(255,255,255,0.85);
      color: #6b7280;
      box-shadow: inset 0 0 0 1px rgba(0,0,0,0.08);
    }
    @media (hover: hover) and (pointer: fine) {
      .rankings-tab-pill.tab-inactive:hover {
        color: #09090b;
        background: #f3f4f6;
    
      }
    }
    /* CBB pill uses the default .rankings-tab-pill treatment — same as AP/NET/KenPom.
       No brand overrides, no dot color shift. Plain text, matches the row exactly. */
    .rankings-nav-btn {
      position: relative;
      display: flex;
      align-items: center;
      justify-content: center;
      width: 32px;
      height: 32px;
      border-radius: 50%;
      border: none;
      cursor: pointer;
      transition: background-color 200ms ease, color 200ms ease, transform 160ms cubic-bezier(0.23,1,0.32,1);
      background: transparent;
      color: #9ca3af;
    }
    /* #16: extend the 32px nav button to a >=40px hit target without resizing the glyph. */
    .rankings-nav-btn::before { content: ""; position: absolute; inset: -4px; border-radius: inherit; }
    @media (hover: hover) and (pointer: fine) {
      .rankings-nav-btn:not(:disabled):hover {
        background: white;
        color: #09090b;
        box-shadow: 0 1px 4px rgba(0,0,0,0.1);
      }
    }
    .rankings-nav-btn:active { transform: scale(0.97); }
    .rankings-nav-btn:disabled { opacity: 0.3; cursor: default; }

    /* Prediction Market Cards */
    .pred-card {
      background: white;
      border: 1px solid #e5e7eb;
      border-radius: 12px;
      overflow: hidden;
      transition: transform 0.15s ease, box-shadow 0.15s ease;
    }
    @media (hover: hover) and (pointer: fine) {
      .pred-card:hover {
        transition: transform 0.25s ease, box-shadow 0.25s ease;
        box-shadow: 0 4px 20px rgba(0,0,0,0.06);
        transform: translateY(-1px);
    
      }
    }
    .pred-separator {
      height: 1px;
      background: linear-gradient(90deg, transparent, #d1d5db, transparent);
      margin: 8px 0;
    }
    .pred-bar {
      height: 10px;
      border-radius: 4px;
      background: #f43f5e;
      overflow: hidden;
      position: relative;
    }
    .pred-bar-fill {
      height: 100%;
      width: 100%;
      background: #10b981;
      transform: scaleX(var(--p, 0.5));
      transform-origin: left;
      transition: transform 0.3s cubic-bezier(0.23, 1, 0.32, 1);
      position: relative;
    }
    .pred-bar-fill::after {
      content: '';
      position: absolute;
      right: -1px;
      top: -25%;
      width: 6px;
      height: 150%;
      background: white;
      /* counter-scale so the parent scaleX doesn't squash the 6px divider */
      transform: scaleX(calc(1 / var(--p, 0.5))) skewX(-15deg);
    }
    .pred-btn {
      flex: 1;
      padding: 10px 16px;
      border-radius: 24px;
      font-weight: 600;
      font-size: 13px;
      cursor: pointer;
      border: 1px solid transparent;
      transition: background-color 200ms ease, color 200ms ease, border-color 200ms ease, transform 160ms cubic-bezier(0.23,1,0.32,1);
      position: relative;
      overflow: hidden;
      letter-spacing: 0.02em;
    }
    .pred-btn-yes {
      background: #059669;
      color: white;
      border-color: rgba(16,185,129,0.3);
    }
    @media (hover: hover) and (pointer: fine) {
      .pred-btn-yes:hover {
        background: #047857;
        transform: translateY(-2px);
        box-shadow: 0 4px 14px rgba(5,150,105,0.35);
    
      }
    }
    .pred-btn-no {
      background: #e11d48;
      color: white;
      border-color: rgba(244,63,94,0.3);
    }
    @media (hover: hover) and (pointer: fine) {
      .pred-btn-no:hover {
        background: #be123c;
        transform: translateY(-2px);
        box-shadow: 0 4px 14px rgba(225,29,72,0.35);
    
      }
    }
    .pred-btn:active { transform: scale(0.96) !important; }
    .pred-btn.voted {
      opacity: 0.4;
      pointer-events: none;
      transform: scale(0.97);
    }
    .pred-btn.voted-active {
      pointer-events: none;
      transform: scale(1.03);
      box-shadow: 0 0 0 2px white, 0 0 0 4px currentColor;
    }
    .pred-btn-yes.voted-active { box-shadow: 0 0 0 2px white, 0 0 0 4px #10b981; }
    .pred-btn-no.voted-active { box-shadow: 0 0 0 2px white, 0 0 0 4px #f43f5e; }
    .pred-cards-wrap {
      transition: opacity 0.3s ease, transform 0.3s ease;
    }
    .pred-cards-wrap.switching {
      opacity: 0;
      transform: translateY(10px);
    }
    .pred-avatar {
      width: 36px;
      height: 36px;
      border-radius: 50%;
      background: #f3f4f6;
      display: flex;
      align-items: center;
      justify-content: center;
      font-weight: 700;
      font-size: 14px;
      color: #6b7280;
      flex-shrink: 0;
    }
    .pred-badge {
      display: inline-flex;
      align-items: center;
      gap: 4px;
      padding: 3px 8px;
      border-radius: 6px;
      font-size: 10px;
      font-weight: 600;
      letter-spacing: 0.05em;
    }

    /* Perspective Marquee */
    #marquee-bg {
      position: absolute;
      inset: 0;
      display: flex;
      align-items: center;
      justify-content: center;
      overflow: hidden;
      perspective: 1200px;
      z-index: 0;
      pointer-events: none;
    }
    #marquee-bg .marquee-rotator {
      width: 100%;
      display: flex;
      align-items: center;
      justify-content: flex-start;
      transform: rotateX(8deg) rotateY(-28deg);
      transform-style: preserve-3d;
    }
    #marquee-bg .marquee-track {
      display: flex;
      white-space: nowrap;
      will-change: transform;
    }
    #marquee-bg .marquee-item {
      display: inline-block;
      font-family: 'Inter', sans-serif;
      font-size: 80px;
      font-weight: 700;
      color: rgba(0,0,0,0.04);
      letter-spacing: -0.03em;
      padding-right: 72px;
      user-select: none;
    }
    #marquee-bg .marquee-fade-x {
      position: absolute;
      inset: 0;
      pointer-events: none;
      background: linear-gradient(90deg, #fafafa 0%, transparent 18%, transparent 82%, #fafafa 100%);
    }
    #marquee-bg .marquee-fade-y {
      position: absolute;
      inset: 0;
      pointer-events: none;
      background: linear-gradient(180deg, #fafafa 0%, transparent 25%, transparent 75%, #fafafa 100%);
    }

    /* ====== Hot Team Hero Cards ====== */
    @keyframes ember-drift {
      0% { transform: translateY(0) translateX(0) scale(1); opacity: 0.95; }
      100% { transform: translateY(-48px) translateX(6px) scale(0); opacity: 0; }
    }
    @keyframes fire-emoji-in {
      0%   { transform: scale(0.6) rotate(-6deg); opacity: 0; }
      22%  { transform: scale(1.22) rotate(4deg); opacity: 1; }
      45%  { transform: scale(1) rotate(0deg); opacity: 1; }
      70%  { transform: scale(0.72) rotate(-3deg); opacity: 0.4; filter: blur(4px); }
      100% { transform: scale(0.2) rotate(0deg); opacity: 0; filter: blur(10px); }
    }
    @keyframes hero-materialize {
      0%   { opacity: 0; filter: blur(10px); transform: scale(0.94); }
      100% { opacity: 1; filter: blur(0); transform: scale(1); }
    }
    @keyframes fire-gradient-shift {
      0%, 100% { background-position: 0% 50%; }
      50% { background-position: 100% 50%; }
    }
    /* ---- Hero entrance flare (shared hot/cold) ---- */
    @keyframes card-rise {
      0%   { opacity: 0; transform: translateY(14px) scale(0.95); }
      60%  { opacity: 1; }
      100% { opacity: 1; transform: translateY(0) scale(1); }
    }
    @keyframes glow-burst {
      0%   { opacity: 0; transform: scale(0.4); }
      30%  { opacity: 0.6; }
      100% { opacity: 0; transform: scale(1.5); }
    }
    @keyframes card-sweep {
      0%   { transform: translateX(-130%) skewX(-12deg); }
      100% { transform: translateX(130%) skewX(-12deg); }
    }
    @keyframes frost-ring {
      0%   { opacity: 0; transform: scale(0.3); }
      30%  { opacity: 0.55; }
      100% { opacity: 0; transform: scale(1.8); }
    }

    .hot-hero-card {
      position: relative; border-radius: 20px; overflow: hidden;
      background: white; border: 1.5px solid #e5e7eb;
      transition: transform 0.25s ease, box-shadow 0.25s ease;
      opacity: 0;
    }
    .hot-hero-card.hero-revealed { opacity: 1; animation: card-rise 0.65s cubic-bezier(0.22, 1, 0.36, 1); }
    @media (hover: hover) and (pointer: fine) {
      .hot-hero-card:hover { transform: translateY(-4px); box-shadow: 0 12px 32px rgba(0,0,0,0.08); }
    }
    .hot-hero-card::before {
      content: ''; position: absolute; top: 0; left: 0; right: 0; height: 4px; z-index: 4;
      background: linear-gradient(90deg, #f97316, #ef4444, #f59e0b);
      background-size: 200% 100%; animation: fire-gradient-shift 3s ease infinite;
    }
    /* one-shot light sweep across the card on reveal */
    .hot-hero-card.hero-revealed::after {
      content: ''; position: absolute; inset: 0; z-index: 3; pointer-events: none;
      background: linear-gradient(105deg, transparent 30%, rgba(255,255,255,0.4) 50%, transparent 70%);
      transform: translateX(-130%); animation: card-sweep 1s cubic-bezier(0.4, 0, 0.2, 1) 0.1s;
    }
    /* warm glow burst behind the flame emoji — soft, fades fully inside the card (no clip) */
    .fire-emoji-entrance::before {
      content: ''; position: absolute; left: 50%; top: 50%; width: 180px; height: 180px;
      margin: -90px 0 0 -90px; border-radius: 50%; z-index: -1; opacity: 0;
      background: radial-gradient(circle, rgba(251,146,60,0.5) 0%, rgba(249,115,22,0.18) 45%, rgba(251,146,60,0) 72%);
    }
    .hot-hero-card.hero-revealed .fire-emoji-entrance::before { animation: glow-burst 1.05s ease-out; }
    .fire-logo-wrap {
      position: relative; width: 80px; height: 80px;
      display: flex; align-items: center; justify-content: center; flex-shrink: 0;
    }
    .fire-logo-wrap img { width: 56px; height: 56px; object-fit: contain; }
    .spark-wrap { position: absolute; inset: 0; pointer-events: none; z-index: 0; }
    .spark {
      position: absolute; width: 4px; height: 4px; border-radius: 50%;
      background: #fb923c; box-shadow: 0 0 7px 2px rgba(251,146,60,0.75);
      animation: ember-drift 2.5s ease-out infinite;
    }
    .hot-rank-badge {
      display: inline-flex; align-items: center; justify-content: center;
      width: 28px; height: 28px; border-radius: 50%; font-weight: 800; font-size: 12px;
      background: linear-gradient(135deg, #f97316, #ef4444); color: white;
      box-shadow: 0 2px 8px rgba(249,115,22,0.35);
    }
    .hot-stat-pill { display: inline-flex; align-items: center; gap: 4px; padding: 3px 10px; border-radius: 8px; font-size: 11px; font-weight: 600; font-variant-numeric: tabular-nums; }
    .hot-stat-streak { background: rgba(22,163,74,0.08); color: #16a34a; }
    .hot-stat-q1 { background: rgba(59,130,246,0.08); color: #2563eb; }
    .hot-stat-net { background: rgba(168,85,247,0.08); color: #7c3aed; }
    .hot-stat-move { background: rgba(249,115,22,0.08); color: #ea580c; }

    /* Fire emoji entrance */
    .fire-emoji-entrance {
      position: absolute; inset: 0; z-index: 10; pointer-events: none;
      display: flex; align-items: center; justify-content: center;
    }
    .fire-emoji-entrance span {
      font-size: 120px; line-height: 1; opacity: 0;
    }
    .fire-emoji-entrance span.go {
      animation: fire-emoji-in 0.9s cubic-bezier(0.22, 1, 0.36, 1) forwards;
    }

    /* Content blur-in per child */
    .hot-hero-card .hero-inner { position: relative; z-index: 2; opacity: 0; }
    .hot-hero-card .hero-inner.show { opacity: 1; }
    .hot-hero-card .hero-inner.show > * {
      opacity: 0; filter: blur(10px); transform: scale(0.94);
      animation: hero-materialize 0.45s ease-out both;
    }
    .hot-hero-card .hero-inner.show > *:nth-child(1) { animation-delay: 0.12s; }
    .hot-hero-card .hero-inner.show > *:nth-child(2) { animation-delay: 0.20s; }
    .hot-hero-card .hero-inner.show > *:nth-child(3) { animation-delay: 0.28s; }
    .hot-hero-card .hero-inner.show > *:nth-child(4) { animation-delay: 0.36s; }
    .hot-hero-card .hero-inner.show > *:nth-child(5) { animation-delay: 0.44s; }

    /* ====== Team Page ====== */
    .team-hero {
      position: relative; border-radius: 20px; overflow: hidden;
      padding: 28px 32px; margin-bottom: 32px;
    }
    .team-hero-bg {
      position: absolute; inset: 0; opacity: 0.12;
      background: radial-gradient(ellipse at 80% 20%, var(--team-c) 0%, transparent 65%),
                  radial-gradient(ellipse at 20% 80%, var(--team-c) 0%, transparent 65%);
    }
    .team-hero-inner { position: relative; z-index: 1; }
    .team-hero-top { display: flex; align-items: center; gap: 20px; }
    .team-hero-logo { width: 88px; height: 88px; object-fit: contain; flex-shrink: 0; filter: drop-shadow(0 4px 12px rgba(0,0,0,0.15)); }
    .team-hero-info { flex: 1; min-width: 0; display: flex; flex-direction: column; gap: 10px; }
    .team-hero-info h1 { font-size: 2.25rem; font-weight: 800; letter-spacing: -0.03em; color: #0f172a; line-height: 1.05; }
    .team-hero-info .team-sub { display: flex; align-items: center; gap: 10px; flex-wrap: wrap; margin-top: -5px; }
    .team-hero-conf { padding: 3px 10px; border-radius: 6px; font-size: 11px; font-weight: 600; background: rgba(0,0,0,0.06); color: #475569; }
    .team-hero-conf.is-link { cursor: pointer; transition: background-color 0.15s ease, color 0.15s ease; }
    .team-hero-conf.is-link:active { transform: scale(0.97); }
    @media (hover: hover) and (pointer: fine) { .team-hero-conf.is-link:hover { background: rgba(0,0,0,0.12); color: #0f172a; } }
    .team-hero-rec { font-size: 16px; font-weight: 600; color: #334155; }
    .team-rank-pills { display: flex; gap: 6px; flex-wrap: wrap; }

    /* Tournament chance & projected seed in team hero — tight, symmetrical, vertically centered */
    .team-hero-tourney {
      display: flex; flex-direction: column;
      align-items: stretch; gap: 10px; flex-shrink: 0;
      align-self: center; justify-content: center;
    }
    .team-hero-tourney-rings { display: flex; gap: 10px; align-items: stretch; }
    /* At-large clarifier under the team-hero tourney rings — same intent as the
       Path-to-NCAAT note, sized compact to match the ~298px ring column. */
    .team-tourney-note {
      display: flex; align-items: flex-start; gap: 7px;
      max-width: 298px; box-sizing: border-box;
      padding: 8px 11px; border-radius: 9px;
      background: rgba(37,99,235,0.06);
      border: 1px solid rgba(37,99,235,0.16);
      border-left: 3px solid #2563eb;
      color: #475569; font-size: 11px; line-height: 1.4;
    }
    .team-tourney-note > .ttn-icon { flex: none; font-size: 12px; line-height: 1.2; }
    .team-tourney-note strong { color: #0f172a; font-weight: 700; }

    /* Emil: card entrance animation — staggered blur+scale */
    @keyframes tourney-card-in {
      from { opacity: 0; transform: scale(0.92) translateY(8px); filter: blur(4px); }
      to   { opacity: 1; transform: scale(1) translateY(0); filter: blur(0); }
    }
    @keyframes ring-draw {
      from { stroke-dasharray: 0, 100; }
    }
    @keyframes seed-pop {
      from { opacity: 0; transform: scale(0.7); filter: blur(6px); }
      to   { opacity: 1; transform: scale(1); filter: blur(0); }
    }
    @keyframes count-up {
      from { opacity: 0; transform: translateY(8px); }
      to   { opacity: 1; transform: translateY(0); }
    }

    /* Tournament chance — ring card */
    .team-ring {
      position: relative; width: 144px; height: 144px;
      border-radius: 16px; background: white;
      border: 1px solid #e2e8f0; box-shadow: 0 2px 12px rgba(0,0,0,0.05);
      padding: 14px;
      animation: tourney-card-in 280ms cubic-bezier(0.23,1,0.32,1) both;
      transition: transform 200ms cubic-bezier(0.23,1,0.32,1), box-shadow 200ms ease, border-color 200ms ease;
    }
    @media (hover: hover) and (pointer: fine) {
      .team-ring:hover {  box-shadow: 0 8px 24px rgba(0,0,0,0.08); border-color: #cbd5e1; }
    }
    .team-ring svg { width: 100%; height: 100%; display: block; }
    .team-ring svg .ring-progress {
      animation: ring-draw 700ms cubic-bezier(0.23,1,0.32,1) 120ms both;
    }
    .team-ring-center {
      position: absolute; inset: 0;
      display: flex; flex-direction: column; align-items: center; justify-content: center;
      pointer-events: none;
    }
    .team-ring-center .v {
      font-size: 28px; font-weight: 800; color: #0f172a; line-height: 1; letter-spacing: -0.03em;
      animation: count-up 260ms cubic-bezier(0.23,1,0.32,1) 220ms both;
    }
    .team-ring-center .l {
      font-size: 10px; font-weight: 700; color: #94a3b8; text-transform: uppercase; letter-spacing: 0.1em; margin-top: 4px;
      animation: count-up 260ms cubic-bezier(0.23,1,0.32,1) 280ms both;
    }

    /* Projected seed — box card */
    .team-seed-box {
      width: 144px; min-width: 144px; height: 144px;
      border-radius: 16px; background: white;
      border: 1px solid #e2e8f0; box-shadow: 0 2px 12px rgba(0,0,0,0.05);
      display: flex; flex-direction: column;
      align-items: center; justify-content: center;
      padding: 14px; position: relative; overflow: hidden;
      animation: tourney-card-in 280ms cubic-bezier(0.23,1,0.32,1) 80ms both;
      transition: transform 200ms cubic-bezier(0.23,1,0.32,1), box-shadow 200ms ease, border-color 200ms ease;
    }
    @media (hover: hover) and (pointer: fine) {
      .team-seed-box:hover {  box-shadow: 0 8px 24px rgba(0,0,0,0.08); border-color: #cbd5e1; }
    }
    .team-seed-box::before {
      content: ""; position: absolute; top: 0; left: 0; right: 0; height: 5px;
      background: var(--team-c, #94a3b8);
      transform-origin: left;
      animation: scale-x-in 320ms cubic-bezier(0.23,1,0.32,1) 120ms both;
    }
    @keyframes scale-x-in { from { transform: scaleX(0); } to { transform: scaleX(1); } }
    .team-seed-box .sb-label {
      font-size: 10px; font-weight: 700; color: #94a3b8;
      text-transform: uppercase; letter-spacing: 0.1em;
      animation: count-up 260ms cubic-bezier(0.23,1,0.32,1) 180ms both;
    }
    .team-seed-box .sb-val {
      font-size: 48px; font-weight: 800; line-height: 1;
      letter-spacing: -0.04em; margin: 4px 0 2px;
      max-width: 100%;
      animation: seed-pop 360ms cubic-bezier(0.23,1,0.32,1) 240ms both;
    }
    /* Word seeds ("Bubble", "Out", "First Four") don't fit at number size — shrink to fit the box.
       Multi-word seeds ("Long Shot") get a second, smaller tier + nowrap so they never wrap to
       two ugly lines inside the 144px box (boss 2026-06-10). */
    .team-seed-box .sb-val.is-word { font-size: 32px; letter-spacing: -0.02em; }
    .team-seed-box .sb-val.is-word-long { font-size: 26px; letter-spacing: -0.02em; white-space: nowrap;
      margin-left: -10px; margin-right: -10px; width: calc(100% + 20px); max-width: none; text-align: center; }
      /* borrows the side padding (~134px of the 144px card); explicit width + text-align keeps the
         glyphs dead-center regardless of how flex sizes the overflowing line */
    .team-seed-box .sb-sub {
      font-size: 11px; color: #64748b; font-weight: 500;
      animation: count-up 260ms cubic-bezier(0.23,1,0.32,1) 320ms both;
    }

    .team-hero-sim-btn {
      display: inline-flex; align-items: center; justify-content: center; gap: 6px;
      padding: 11px 16px; border-radius: 10px;
      background: #0f172a; color: white;
      font-size: 12px; font-weight: 600; cursor: pointer;
      border: none; white-space: nowrap; width: 100%;
      transition: background-color 200ms ease, transform 160ms cubic-bezier(0.23,1,0.32,1);
      animation: tourney-card-in 280ms cubic-bezier(0.23,1,0.32,1) 200ms both;
    }
    .team-hero-sim-btn:active { transform: scale(0.97); }
    @media (hover: hover) and (pointer: fine) {
      .team-hero-sim-btn:hover { background: #1e293b; }
    }

    @media (max-width: 768px) {
      .team-ring, .team-seed-box { width: 140px; min-width: 140px; min-height: 140px; }
      .team-ring-center .v { font-size: 28px; }
      .team-seed-box .sb-val { font-size: 48px; }
      /* Stack the hero on phones: row 1 = logo + name/record/pills, row 2 = tourney
         rings centered full-width. Desktop keeps the single-row layout (boss 2026-06-10:
         phone header was unreadable — name wrapped per-word, rings overlapped pills). */
      .team-hero { padding: 20px 18px; }
      .team-hero-top { flex-wrap: wrap; gap: 14px 16px; }
      .team-hero-logo { width: 64px; height: 64px; }
      .team-hero-info h1 { font-size: 1.6rem; }
      .player-hero-info h1 { font-size: 1.7rem; }
      .team-hero-tourney { flex-basis: 100%; align-self: auto; align-items: center; }
      .team-hero-tourney-rings { justify-content: center; }
    }
    .team-rank-pill {
      display: flex; flex-direction: column; align-items: center; gap: 1px;
      padding: 6px 12px; border-radius: 8px; background: white; border: 1px solid #e2e8f0;
      min-width: 58px; box-shadow: 0 1px 3px rgba(0,0,0,0.04);
    }
    .team-rank-pill .rp-label { font-size: 9px; font-weight: 600; text-transform: uppercase; color: #94a3b8; letter-spacing: 0.06em; }
    .team-rank-pill .rp-val { font-size: 18px; font-weight: 800; color: #0f172a; }
    .team-rank-pill { cursor: pointer; position: relative; transition: border-color 180ms cubic-bezier(0.23,1,0.32,1), background 180ms cubic-bezier(0.23,1,0.32,1), transform 180ms cubic-bezier(0.23,1,0.32,1); }
    @media (hover: hover) and (pointer: fine) {
      .team-rank-pill:hover { border-color: #cbd5e1; background: #f8fafc; }
    }
    .team-rank-pill:active { transform: scale(0.97); }

    /* ⭐ CBB Rating — our flagship pill, leads the lineup */
    .team-rank-pill.is-cbb {
      background: linear-gradient(135deg, #1e293b 0%, #0f172a 100%);
      border: 1px solid #0f172a;
      padding: 6px 14px;
      min-width: 72px;
      box-shadow: 0 4px 12px rgba(15,23,42,0.18), inset 0 1px 0 rgba(255,255,255,0.08);
      position: relative;
      overflow: hidden;
    }
    .team-rank-pill.is-cbb::before {
      content: ''; position: absolute; inset: 0; pointer-events: none;
      background: radial-gradient(120% 80% at 50% 0%, rgba(56,189,248,0.18) 0%, transparent 60%);
    }
    .team-rank-pill.is-cbb .rp-label { color: #7dd3fc; font-weight: 700; letter-spacing: 0.08em; position: relative; }
    .team-rank-pill.is-cbb .rp-val { color: white; font-size: 22px; font-weight: 900; letter-spacing: -0.02em; position: relative; }
    @media (hover: hover) and (pointer: fine) {
      .team-rank-pill.is-cbb:hover { border-color: #38bdf8; background: linear-gradient(135deg, #1e293b 0%, #0f172a 60%, #0c4a6e 100%); }
    }
    .team-rank-pill.is-cbb.is-nr { opacity: 0.55; }

    /* ==================== SEASON STORY ==================== */
    /* Team-page CTA into the story */
    .season-story-cta { display: flex; align-items: center; gap: 10px; width: 100%; margin: 4px 0 26px; padding: 16px 20px; border-radius: 16px; border: 1px solid #e2e8f0;
      background: linear-gradient(135deg, #ffffff 0%, #f8fafc 100%); color: #0f172a; font-size: 15px; font-weight: 700; cursor: pointer;
      transition: transform 180ms cubic-bezier(0.23,1,0.32,1), border-color 180ms cubic-bezier(0.23,1,0.32,1), box-shadow 180ms cubic-bezier(0.23,1,0.32,1); }
    .season-story-cta .ss-cta-icon { font-size: 20px; }
    .season-story-cta svg { margin-left: auto; color: #94a3b8; }
    .season-story-cta:active { transform: scale(0.99); }
    @media (hover: hover) and (pointer: fine) {
      .season-story-cta:hover { transform: translateY(-2px); border-color: #cbd5e1; box-shadow: 0 10px 28px rgba(15,23,42,0.1); }
    }

    /* Team picker */
    .ss-search-wrap { position: relative; display: flex; align-items: center; margin-bottom: 20px; }
    .ss-search-icon { position: absolute; left: 14px; color: #94a3b8; pointer-events: none; }
    .ss-search { width: 100%; padding: 12px 84px 12px 40px; border: 1px solid #e2e8f0; border-radius: 12px; font-size: 15px; color: #0f172a; background: #fff;
      transition: border-color 180ms cubic-bezier(0.23,1,0.32,1), box-shadow 180ms cubic-bezier(0.23,1,0.32,1); }
    .ss-search:focus { outline: none; border-color: #38bdf8; box-shadow: 0 0 0 3px rgba(56,189,248,0.15); }
    .ss-search-count { position: absolute; right: 14px; font-size: 12px; color: #94a3b8; font-weight: 600; pointer-events: none; }
    .ss-pick-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(148px, 1fr)); gap: 10px; }
    .season-pick-card { display: flex; flex-direction: column; align-items: center; gap: 6px; padding: 16px 10px; border: 1px solid #e2e8f0; border-radius: 14px;
      background: #fff; cursor: pointer; text-align: center;
      transition: transform 180ms cubic-bezier(0.23,1,0.32,1), border-color 180ms cubic-bezier(0.23,1,0.32,1), box-shadow 180ms cubic-bezier(0.23,1,0.32,1); }
    .ss-pick-logo { width: 44px; height: 44px; object-fit: contain; }
    .ss-pick-noimg { display: flex; align-items: center; justify-content: center; border-radius: 50%; background: #f1f5f9; color: #64748b; font-weight: 800; font-size: 18px; }
    .ss-pick-name { font-size: 13px; font-weight: 700; color: #0f172a; line-height: 1.2; }
    .ss-pick-conf { font-size: 10px; color: #94a3b8; font-weight: 600; }
    .ss-pick-rating { font-size: 12px; font-weight: 800; color: #0ea5e9; font-variant-numeric: tabular-nums; }
    /* Card entrance. Applied by _animateSeasonPickerCards() to the above-the-fold cards
       only, with a per-card animationDelay, then stripped on animationend — a finished
       animation left attached replays the moment the card's display flips, which is
       exactly what filterSeasonPicker() does on every keystroke. */
    .ss-pick-in { animation: fx-slide-up 260ms cubic-bezier(0.23,1,0.32,1) both; }
    .season-pick-card:active { transform: scale(0.97); }
    @media (hover: hover) and (pointer: fine) {
      .season-pick-card:hover { transform: translateY(-3px); border-color: #cbd5e1; box-shadow: 0 8px 20px rgba(15,23,42,0.08); }
    }

    /* Story stage */
    .ss-stage { position: relative; }
    .ss-hero { position: relative; z-index: 1; border-radius: 24px; padding: 52px 28px; text-align: center; overflow: hidden; margin-bottom: 4px; background: #0f172a; color: #fff; }
    .ss-hero::before { content: ''; position: absolute; inset: 0; background: linear-gradient(155deg, var(--ss-c) 0%, transparent 62%); opacity: 0.4; pointer-events: none; }
    .ss-hero-inner { position: relative; z-index: 1; display: flex; flex-direction: column; align-items: center; gap: 8px; }
    .ss-hero-logo { width: 84px; height: 84px; object-fit: contain; filter: drop-shadow(0 6px 16px rgba(0,0,0,0.4)); margin-bottom: 6px; }
    .ss-hero-eyebrow { font-size: 11px; font-weight: 800; letter-spacing: 0.16em; text-transform: uppercase; color: rgba(255,255,255,0.7); }
    .ss-hero-name { font-size: clamp(2rem, 1.2rem + 4vw, 3.4rem); font-weight: 900; letter-spacing: -0.04em; line-height: 1.02; }
    .ss-hero-sub { font-size: 16px; color: rgba(255,255,255,0.85); font-weight: 600; }

    .ss-chapters { position: relative; z-index: 1; }
    .ss-chapter { padding: 44px 0; border-bottom: 1px solid #f1f5f9; }
    .ss-chapter-inner { display: flex; gap: 28px; align-items: center; }
    .ss-right .ss-chapter-inner { flex-direction: row-reverse; }
    .ss-text { flex: 1 1 60%; min-width: 0; }
    .ss-aside { flex: 0 0 32%; display: flex; flex-direction: column; align-items: flex-start; gap: 14px; }
    .ss-right .ss-aside { align-items: flex-end; }
    .ss-eyebrow { font-size: 11px; font-weight: 800; letter-spacing: 0.12em; text-transform: uppercase; color: var(--ss-c); margin-bottom: 8px; }
    .ss-headline { font-size: clamp(1.6rem, 1rem + 2.4vw, 2.6rem); font-weight: 800; letter-spacing: -0.03em; color: #0f172a; line-height: 1.06; }
    .ss-body { font-size: 17px; line-height: 1.6; color: #475569; margin-top: 12px; max-width: 56ch; }
    .ss-big { display: flex; flex-direction: column; }
    .ss-right .ss-big { align-items: flex-end; }
    .ss-big-val { font-size: clamp(2.6rem, 1.5rem + 5vw, 4.4rem); font-weight: 900; letter-spacing: -0.04em; line-height: 1; color: var(--ss-c); font-variant-numeric: tabular-nums; }
    .ss-big-sub { font-size: 12px; font-weight: 700; text-transform: uppercase; letter-spacing: 0.06em; color: #94a3b8; margin-top: 6px; }
    .ss-biglogo-wrap { display: flex; flex-direction: column; gap: 10px; align-items: center; width: 100%; text-align: center; }
    .ss-biglogo-wrap .ss-big-sub { margin-top: 0; }
    .ss-biglogo { width: clamp(150px, 16vw, 208px); height: auto; max-height: 144px; object-fit: contain; object-position: center; }
    .ss-opp { display: inline-flex; align-items: center; gap: 10px; margin-top: 16px; padding: 8px 14px; border: 1px solid #e2e8f0; border-radius: 12px; background: #f8fafc; }
    .ss-opp-logo { width: 30px; height: 30px; object-fit: contain; }
    .ss-opp-meta { display: flex; flex-direction: column; }
    .ss-opp-name { font-size: 13px; font-weight: 700; color: #0f172a; }
    .ss-opp-score { font-size: 12px; color: #64748b; font-variant-numeric: tabular-nums; }
    .ss-quads { display: grid; grid-template-columns: repeat(2, 1fr); gap: 10px 14px; width: 100%; max-width: 320px; }
    .ss-quad-top { display: flex; justify-content: space-between; font-size: 11px; margin-bottom: 4px; }
    .ss-quad-k { font-weight: 800; color: var(--ss-c); }
    .ss-quad-rec { font-weight: 700; color: #475569; font-variant-numeric: tabular-nums; }
    .ss-quad-bar { height: 6px; border-radius: 999px; background: #f1f5f9; overflow: hidden; }
    .ss-quad-bar > span { display: block; height: 100%; border-radius: 999px; background: var(--ss-c); transform-origin: left; }
    .ss-footer { display: flex; flex-wrap: wrap; gap: 12px; padding: 36px 0 12px; }
    .ss-cta { display: inline-flex; align-items: center; gap: 8px; padding: 12px 20px; border-radius: 12px; font-size: 14px; font-weight: 700; cursor: pointer;
      transition: transform 150ms cubic-bezier(0.23,1,0.32,1), box-shadow 150ms cubic-bezier(0.23,1,0.32,1), background 150ms ease, border-color 150ms ease; }
    .ss-cta-primary { background: #0f172a; color: #fff; border: 1px solid #0f172a; }
    .ss-cta-ghost { background: #fff; color: #334155; border: 1px solid #e2e8f0; }
    .ss-cta:active { transform: scale(0.97); }
    @media (hover: hover) and (pointer: fine) {
      .ss-cta-primary:hover { box-shadow: 0 8px 20px rgba(15,23,42,0.18); }
      .ss-cta-ghost:hover { border-color: #cbd5e1; background: #f8fafc; }
    }
    .ss-empty { padding: 32px; border: 1px dashed #cbd5e1; border-radius: 16px; color: #64748b; font-size: 15px; line-height: 1.6; text-align: center; margin-top: 6px; }
    .ss-link-btn { color: #0ea5e9; font-weight: 700; background: none; border: none; cursor: pointer; padding: 0; font-size: inherit; }
    /* Scroll reveal — DEFAULT VISIBLE; .ss-anim added only when IntersectionObserver supported (enhancement only) */
    .ss-anim .ss-chapter { opacity: 0; transform: translateY(26px); transition: opacity 600ms cubic-bezier(0.23,1,0.32,1), transform 600ms cubic-bezier(0.23,1,0.32,1); }
    .ss-anim .ss-chapter.ss-in { opacity: 1; transform: none; }
    @media (max-width: 640px) {
      .ss-chapter-inner, .ss-right .ss-chapter-inner { flex-direction: column; align-items: flex-start; gap: 14px; }
      .ss-aside, .ss-right .ss-aside, .ss-right .ss-big { align-items: flex-start; }
    }
    @media (prefers-reduced-motion: reduce) {
      .ss-anim .ss-chapter { transform: none; transition: opacity 300ms ease; }
      .ss-anim .ss-chapter.ss-in { transform: none; }
      .season-pick-card, .ss-cta, .season-story-cta { transition: opacity 150ms ease; }
    }

    /* ===== Bracketverse Rating page ===== */
    /* Utility: hard-hide that overrides Tailwind responsive display utilities (used to
       swap the Teams/Players controls + headers without fighting `hidden sm:grid`). */
    .bvr-hide { display: none !important; }

    /* Teams | Players toggle reuses the house .rankings-tab-pill component (same pills as
       the Rankings carousel tabs — dark active / light inactive, no track). This is just the
       trailing count badge inside each pill; color is inherited from the pill (white when
       active, gray when inactive) so it reads as a quiet companion to the label. */
    .bvr-seg-count { font-size: 11px; font-weight: 700; opacity: 0.55; font-variant-numeric: tabular-nums; margin-left: 1px; }

    /* Rating number treatment — tabular, tier-colored (top of the board glows sky like .is-cbb) */
    .bvr-rating { font-variant-numeric: tabular-nums; font-weight: 900; font-size: 18px; letter-spacing: -0.03em; line-height: 1; }
    .bvr-rating-elite  { color: #0284c7; }
    .bvr-rating-strong { color: #0f172a; }
    .bvr-rating-solid  { color: #475569; }
    .bvr-rating-bubble { color: #94a3b8; }
    .bvr-rating-sub { display: block; font-size: 9px; font-weight: 700; letter-spacing: 0.06em; text-transform: uppercase; color: #cbd5e1; margin-top: 2px; }

    /* Player headshot in a ranking row */
    .bvr-headshot { width: 34px; height: 34px; border-radius: 999px; object-fit: cover; background: #f1f5f9; flex-shrink: 0; box-shadow: 0 0 0 1px rgba(0,0,0,0.07); }
    /* Image-outline (#11): bare <img> has its own dark counter-invert that cancels the html
       invert, so a black ring would stay black on dark. Override to white in dark mode. */
    html.bv-dark .bvr-headshot { box-shadow: 0 0 0 1px rgba(255,255,255,0.12); }
    .bvr-headshot-fallback {
      width: 34px; height: 34px; border-radius: 999px; flex-shrink: 0;
      display: inline-flex; align-items: center; justify-content: center;
      font-size: 12px; font-weight: 800; color: #64748b; background: #e2e8f0;
    }

    /* Empty state for the Players view until MATH ships computePlayerRankings() */
    .bvr-empty {
      border: 1px dashed #cbd5e1; border-radius: 18px;
      background: linear-gradient(180deg, #f8fafc 0%, #ffffff 100%);
      padding: 44px 28px; text-align: center;
    }

    /* ===== Conference Power Rankings ===== */
    .confpow-bar { position: relative; height: 6px; border-radius: 999px; background: #eef2f7; overflow: hidden; }
    .confpow-bar > span { position: absolute; inset: 0; transform-origin: left center; border-radius: 999px;
      background: linear-gradient(90deg, #0284c7, #38bdf8); }
    .confpow-rating { font-variant-numeric: tabular-nums; font-weight: 900; font-size: 18px; letter-spacing: -0.03em; line-height: 1; }
    .confpow-tier { display: inline-flex; align-items: center; padding: 1px 7px; border-radius: 999px; font-size: 9px; font-weight: 800; letter-spacing: 0.04em; text-transform: uppercase; }
    .confpow-tier-power { background: #0f172a; color: #7dd3fc; }
    .confpow-tier-mid { background: #e2e8f0; color: #475569; }

    /* Automatic Bid — status badge surfacing MATH's projected conf-tournament winner.
       Sits inside team-rank-pills row but reads as a status chip, not a ranking pill.
       Amber gradient ties to champion treatment (.bk-team.is-winner in champ-game). */
    .ab-badge {
      display: inline-flex; align-items: center; gap: 6px;
      padding: 6px 11px;
      border-radius: 999px;
      background: linear-gradient(135deg, #fef3c7 0%, #fde68a 60%, #fcd34d 100%);
      border: 1px solid #f59e0b;
      color: #78350f;
      font-size: 10px; font-weight: 800;
      letter-spacing: 0.06em; text-transform: uppercase;
      box-shadow: 0 1px 2px rgba(146, 64, 14, 0.12);
      transition: transform 180ms cubic-bezier(0.23,1,0.32,1), box-shadow 180ms cubic-bezier(0.23,1,0.32,1);
      cursor: pointer;
      align-self: center;
      font-family: inherit; line-height: 1.2;
    }
    .ab-badge:active { transform: scale(0.96); }
    .ab-badge::before {
      content: "\2605"; /* ★ */
      font-size: 11px; line-height: 1;
      color: #b45309;
    }
    @media (hover: hover) and (pointer: fine) {
      .ab-badge:hover { transform: translateY(-1px); box-shadow: 0 3px 8px rgba(146, 64, 14, 0.2); }
    }
    @media (prefers-reduced-motion: reduce) {
      .ab-badge { transition: none; }
      .ab-badge:hover { transform: none; }
    }

    /* Bracketology auto-bid chip — sits next to seed in bk-slot. Tighter than the
       team-page badge: the bracket grid is dense, so this is just a 2-letter mark
       with a tooltip. Same amber tone as .ab-badge for visual continuity. */
    .bk-ab-chip {
      display: inline-flex; align-items: center; justify-content: center;
      min-width: 18px; height: 14px; padding: 0 4px;
      margin-left: 2px;
      border-radius: 4px;
      background: linear-gradient(135deg, #fef3c7, #fde68a);
      border: 1px solid #f59e0b;
      color: #78350f;
      font-size: 8.5px; font-weight: 800;
      letter-spacing: 0.04em;
      flex-shrink: 0;
      cursor: help;
    }

    .team-mascot { font-size: 17px; font-weight: 500; color: #64748b; margin-left: 5px; vertical-align: baseline; }

    /* Metric tooltip */
    .metric-tip-overlay {
      display: none; position: fixed; inset: 0; z-index: 200;
      background: rgba(0,0,0,0.3); backdrop-filter: blur(2px);
      align-items: center; justify-content: center;
    }
    .metric-tip-overlay.open { display: flex; }
    .metric-tip-card {
      position: relative; /* anchors the absolute .fm-x close button */
      background: white; border-radius: 16px; padding: 28px 32px; max-width: 400px; width: 90%;
      box-shadow: 0 20px 60px rgba(0,0,0,0.15);
      /* Emil: modals stay centered (transform-origin: center). Under 300ms. Strong ease-out. */
      animation: metricIn 240ms cubic-bezier(0.23,1,0.32,1);
    }
    @keyframes metricIn {
      0%   { opacity: 0; transform: scale(0.96) translateY(8px); filter: blur(4px); }
      100% { opacity: 1; transform: scale(1) translateY(0); filter: blur(0); }
    }
    .metric-tip-card h3 { font-size: 16px; font-weight: 700; color: #0f172a; margin-bottom: 8px; }
    .metric-tip-card p { font-size: 13px; color: #475569; line-height: 1.6; }

    /* minmax 132 (was 140) so the full 7-metric row closes on desktop instead of orphaning one tile */
    .team-stat-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(132px, 1fr)); gap: 12px; margin-bottom: 32px; }
    .team-stat-card {
      border-radius: 12px; border: 1px solid #e5e7eb; background: white;
      padding: 14px 16px; text-align: center;
      transition: border-color 0.15s;
    }
    @media (hover: hover) and (pointer: fine) {
      .team-stat-card[onclick]:hover { border-color: #cbd5e1; background: #fafbfc; }
    }
    .team-stat-card .ts-label { font-size: 10px; font-weight: 600; text-transform: uppercase; color: #94a3b8; letter-spacing: 0.06em; margin-bottom: 4px; }
    .team-stat-card .ts-val { font-size: 22px; font-weight: 800; color: #0f172a; }
    .team-stat-card .ts-sub { font-size: 10px; color: #94a3b8; margin-top: 2px; }

    .team-quad-bar {
      height: 8px; border-radius: 4px; background: #f1f5f9; overflow: hidden; margin-top: 6px;
    }
    .team-quad-fill { height: 100%; border-radius: 4px; }

    .team-schedule-row {
      display: grid; grid-template-columns: 32px 2fr 80px 1fr auto; gap: 8px; align-items: center;
      padding: 10px 12px; border-radius: 8px; font-size: 13px; transition: background 0.15s;
    }
    @media (hover: hover) and (pointer: fine) {
      .team-schedule-row:hover { background: #f8fafc; }
    }
    .team-schedule-row:not(:last-child) { border-bottom: 1px solid #f1f5f9; }
    .team-schedule-logo { width: 24px; height: 24px; object-fit: contain; }
    /* Phone: TV col is display:none below sm (640px), so only 4 cells render — re-template
       to 4 tracks and let the opponent cell truncate instead of overflowing into the score
       (boss 2026-06-10: names ran under the W/L score, dates wrapped to two lines). */
    @media (max-width: 639px) {
      .team-schedule-row { grid-template-columns: 48px minmax(0, 1fr) auto auto; gap: 6px; padding: 10px; }
      .team-schedule-row > span:first-child { white-space: nowrap; }
      .team-schedule-row > .flex { min-width: 0; }
      .team-schedule-row > .flex > span { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
      .team-schedule-row > .flex > span + span { flex: none; } /* Neutral chip never truncates — the name ellipsizes instead */
      .team-schedule-row .team-w, .team-schedule-row .team-l { white-space: nowrap; }
      /* Quad wins: records like "21-3" were wrapping at the hyphen into two lines;
         table with Q1+Q2 columns exceeds 375px so card must scroll horizontally */
      #quad-table td { white-space: nowrap; }
      #quad-table-wrap { overflow-x: auto; -webkit-overflow-scrolling: touch; }
      /* Standings: same hyphen-wrap bug + tighter padding so all 6 cols fit ~343px. */
      .standings-table td, .standings-table th { padding-left: 8px; padding-right: 8px; white-space: nowrap; }
      /* Rankings panels: tighter padding so # TEAM + stat fits 291px panel */
      .rankings-panel table th, .rankings-panel table td { padding-left: 6px; padding-right: 6px; }
    }
    /* Opponent NET rank chip — shown beside each team in the Quad Record cards */
    .quad-net-chip {
      flex-shrink: 0; font-size: 9px; font-weight: 800; letter-spacing: 0.02em;
      padding: 1px 5px; border-radius: 4px; line-height: 1.4;
      background: #f1f5f9; color: #64748b;
    }
    .team-w { color: #16a34a; font-weight: 700; }
    .team-l { color: #dc2626; font-weight: 700; }

    /* Base player card — Emil curve, specific properties only, touch-hover gated */
    .team-player-card {
      border-radius: 12px;
      border: 1px solid #e5e7eb;
      background: white;
      padding: 16px;
      display: flex;
      flex-direction: column;
      align-items: center;
      gap: 8px;
      transition:
        border-color 220ms cubic-bezier(0.23, 1, 0.32, 1),
        box-shadow 220ms cubic-bezier(0.23, 1, 0.32, 1),
        transform 220ms cubic-bezier(0.23, 1, 0.32, 1);
    }
    @media (hover: hover) and (pointer: fine) {
      .team-player-card:hover {
        transform: translateY(-2px);
        border-color: #cbd5e1;
        box-shadow: 0 6px 20px rgba(0,0,0,0.06);
      }
    }
    @media (prefers-reduced-motion: reduce) {
      .team-player-card,
      .team-player-card:hover { transform: none; transition: none; }
    }
    .team-player-avatar {
      width: 56px; height: 56px; border-radius: 50%; background: #f1f5f9;
      display: flex; align-items: center; justify-content: center; font-size: 20px; font-weight: 700; color: #64748b;
    }
    .team-player-name { font-size: 13px; font-weight: 700; color: #0f172a; }
    .team-player-pos { font-size: 10px; font-weight: 600; color: #94a3b8; text-transform: uppercase; letter-spacing: 0.06em; }
    .team-player-stats { display: flex; gap: 12px; margin-top: 4px; }
    .team-player-stat { text-align: center; }
    .team-player-stat .ps-val { font-size: 14px; font-weight: 800; color: #0f172a; }
    .team-player-stat .ps-label { font-size: 9px; color: #94a3b8; text-transform: uppercase; }

    /* Rich player card — real roster shape from data bot (headshot + bio, no stats yet) */
    .tpc-rich { padding: 14px 12px 12px; gap: 6px; }
    .tpc-headshot-wrap {
      width: 64px; height: 64px; border-radius: 50%;
      overflow: hidden;
      display: flex; align-items: center; justify-content: center;
      flex-shrink: 0;
      /* Subtle image outline (#11) — on the wrapper so dark mode's single invert
         flips it black→white automatically (no per-img counter-invert here). */
      box-shadow: inset 0 0 0 1px rgba(0,0,0,0.08);
    }
    .tpc-headshot {
      width: 100%; height: 100%;
      object-fit: cover; object-position: center top;
      display: block;
    }
    .tpc-headshot-fallback {
      width: 100%; height: 100%;
      display: flex; align-items: center; justify-content: center;
      font-size: 22px; font-weight: 800;
      letter-spacing: -0.02em;
    }
    .tpc-id {
      display: flex; align-items: baseline; gap: 6px;
      margin-top: 4px; min-width: 0; width: 100%;
      justify-content: center;
    }
    .tpc-jersey {
      font-size: 11px; font-weight: 800; color: #94a3b8;
      letter-spacing: 0.02em; font-variant-numeric: tabular-nums;
    }
    .tpc-name {
      font-size: 13px; font-weight: 700; color: #0f172a;
      letter-spacing: -0.01em;
      max-width: 100%;
      white-space: nowrap; overflow: hidden; text-overflow: ellipsis;
    }
    .tpc-meta-row, .tpc-bio, .tpc-hometown {
      font-size: 10.5px;
      color: #64748b;
      display: flex; align-items: center; gap: 5px;
    }
    .tpc-meta-row .tpc-pos {
      font-weight: 800; color: #0f172a;
      letter-spacing: 0.04em; text-transform: uppercase;
      font-size: 10px;
    }
    .tpc-meta-row .tpc-year { font-weight: 600; }
    .tpc-bio { color: #94a3b8; font-weight: 500; }
    .tpc-hometown { color: #94a3b8; font-size: 10px; font-weight: 500; }
    .tpc-hometown svg { flex-shrink: 0; opacity: 0.8; }
    .tpc-dot { color: #cbd5e1; }

    /* Skeleton loaders — roster grid placeholders while the 5.5 MB rosters file is in
       flight (deep links / first uncached visit). Shimmer rides transform only
       (compositor-friendly) and turns off under prefers-reduced-motion; the flat
       placeholder tint survives dark mode's single global invert. */
    .sk-line, .sk-circle { position: relative; overflow: hidden; background: #eef1f5; }
    .sk-line { border-radius: 6px; }
    .sk-circle { border-radius: 50%; }
    .sk-line::after, .sk-circle::after {
      content: ''; position: absolute; inset: 0;
      transform: translateX(-100%);
      background: linear-gradient(90deg, transparent, rgba(255,255,255,0.75), transparent);
      animation: sk-sweep 1.4s ease-in-out infinite;
    }
    @keyframes sk-sweep { 100% { transform: translateX(100%); } }
    @media (prefers-reduced-motion: reduce) {
      .sk-line::after, .sk-circle::after { animation: none; }
    }

    /* Animate-once-per-session — showPage() adds .no-anim to a page the session has
       already seen (back button, repeat nav, data-arrival repaint): every entrance
       renders in final state instantly and the skeleton shimmer holds still. Mirrors
       the prefers-reduced-motion block below (same properties, page-scoped). */
    .page.no-anim [data-anim] { opacity: 1 !important; animation: none !important; filter: none !important; transform: none !important; }
    .page.no-anim [data-text-fx] { opacity: 1 !important; }
    .page.no-anim .fx-word, .page.no-anim .fx-char, .page.no-anim .fx-line { animation: none !important; opacity: 1 !important; filter: none !important; transform: none !important; }
    .page.no-anim .sk-line::after, .page.no-anim .sk-circle::after { animation: none !important; }

    /* ==================== PLAYER PAGE ==================== */
    .player-hero {
      position: relative;
      border-radius: 18px;
      overflow: hidden;
      background: white;
      border: 1px solid #e5e7eb;
      margin-bottom: 32px;
      --player-c: #94a3b8;
      box-shadow: 0 1px 2px rgba(15,23,42,0.05), 0 10px 30px rgba(15,23,42,0.06);
    }
    .player-hero-bg {
      position: absolute;
      inset: 0;
      background:
        radial-gradient(circle at 0% 0%, var(--player-c) 0%, transparent 55%),
        radial-gradient(circle at 100% 100%, var(--player-c) 0%, transparent 55%);
      opacity: 0.08;
      pointer-events: none;
    }
    .player-hero-inner {
      position: relative;
      display: flex;
      align-items: center;
      gap: 28px;
      padding: 31px 29px;
      flex-wrap: wrap;
    }
    .player-hero-portrait {
      width: 132px; height: 132px;
      border-radius: 50%;
      overflow: hidden;
      background: white;
      border: 3px solid white;
      box-shadow: 0 8px 28px rgba(15, 23, 42, 0.12);
      flex-shrink: 0;
      display: flex; align-items: center; justify-content: center;
    }
    .player-hero-portrait img {
      width: 100%; height: 100%;
      object-fit: cover; object-position: center top;
      display: block;
    }
    .player-hero-portrait-fallback {
      width: 100%; height: 100%;
      display: flex; align-items: center; justify-content: center;
      font-size: 44px; font-weight: 900;
      letter-spacing: -0.02em;
    }
    .player-hero-info {
      flex: 1; min-width: 240px;
      display: flex; flex-direction: column; gap: 5px;
    }
    .player-hero-jersey {
      font-size: 11px; font-weight: 800; color: var(--player-c);
      letter-spacing: 0.12em; text-transform: uppercase;
      opacity: 0.85;
    }
    .player-hero-info h1 {
      font-size: 2.2rem;
      font-weight: 800;
      color: #0f172a;
      letter-spacing: -0.025em;
      line-height: 1.07;
    }
    .player-hero-meta {
      display: flex; align-items: center; gap: 8px;
      font-size: 14px; color: #475569;
      font-weight: 600;
      margin-top: 0;
    }
    .player-hero-meta .player-hero-sep { color: #cbd5e1; }
    .player-hero-team-link {
      display: inline-flex; align-items: center; gap: 8px;
      margin-top: 5px;
      padding: 7px 12px 7px 6px;
      border-radius: 999px;
      background: white;
      border: 1px solid #e5e7eb;
      font-size: 13px;
      font-weight: 700;
      color: #0f172a;
      letter-spacing: -0.01em;
      cursor: pointer;
      align-self: flex-start;
      transition:
        border-color 220ms cubic-bezier(0.23, 1, 0.32, 1),
        background 220ms cubic-bezier(0.23, 1, 0.32, 1),
        transform 220ms cubic-bezier(0.23, 1, 0.32, 1);
    }
    @media (hover: hover) and (pointer: fine) {
      .player-hero-team-link:hover {
        border-color: var(--player-c);
        background: #f8fafc;
      }
    }
    .player-hero-team-link:active { transform: scale(0.97); }
    .player-hero-team-link img {
      width: 24px; height: 24px;
      /* No circular mask — team logos are square assets; border-radius: 50% was
         amputating the corners of edge-to-edge marks (Rutgers' block R). */
      object-fit: contain;
      background: white;
    }
    .player-hero-team-link svg { color: #94a3b8; }

    /* Bracketverse Rating pill on the player hero — mirrors the team page (.team-rank-pill.is-cbb),
       pushed to the right of the hero row, with a small overall-rank caption beneath. */
    .player-hero-rating {
      margin-left: auto; flex-shrink: 0;
      display: flex; flex-direction: column; align-items: flex-end; gap: 6px;
    }
    .player-hero-rank {
      font-size: 11px; font-weight: 700; color: #94a3b8;
      letter-spacing: 0.04em; font-variant-numeric: tabular-nums;
    }
    @media (max-width: 640px) {
      .player-hero-rating { margin-left: 0; align-items: flex-start; }
    }

    /* Bio grid — small stat-style cells: height/weight/year/hometown/position */
    .player-bio-grid {
      display: grid;
      grid-template-columns: repeat(auto-fit, minmax(140px, 1fr));
      gap: 10px;
    }
    .player-bio-cell {
      background: white;
      border: 1px solid #e5e7eb;
      border-radius: 12px;
      padding: 14px 16px;
      display: flex;
      flex-direction: column;
      gap: 4px;
      transition: border-color 220ms cubic-bezier(0.23, 1, 0.32, 1);
    }
    @media (hover: hover) and (pointer: fine) {
      .player-bio-cell:hover { border-color: #cbd5e1; }
    }
    .player-bio-cell .pbc-label {
      font-size: 9.5px;
      font-weight: 800;
      color: #94a3b8;
      letter-spacing: 0.1em;
      text-transform: uppercase;
    }
    .player-bio-cell .pbc-value {
      font-size: 17px;
      font-weight: 800;
      color: #0f172a;
      letter-spacing: -0.015em;
    }
    .player-bio-cell .pbc-value.is-small {
      font-size: 14px;
      letter-spacing: -0.01em;
    }

    /* Program card — large clickable link to team page */
    .player-program-card {
      display: flex; align-items: center; gap: 14px;
      padding: 16px 18px;
      background: white;
      border: 1px solid #e5e7eb;
      border-radius: 14px;
      cursor: pointer;
      transition:
        border-color 220ms cubic-bezier(0.23, 1, 0.32, 1),
        box-shadow 220ms cubic-bezier(0.23, 1, 0.32, 1),
        transform 220ms cubic-bezier(0.23, 1, 0.32, 1);
    }
    @media (hover: hover) and (pointer: fine) {
      .player-program-card:hover {
        border-color: #cbd5e1;
        box-shadow: 0 6px 20px rgba(15, 23, 42, 0.06);
      }
    }
    .player-program-card:active { transform: scale(0.98); }
    @media (prefers-reduced-motion: reduce) {
      .player-program-card, .player-program-card:active { transform: none; transition: none; }
    }
    .player-program-card img {
      width: 48px; height: 48px;
      object-fit: contain;
      flex-shrink: 0;
    }
    .player-program-card .ppc-text {
      flex: 1; min-width: 0;
      display: flex; flex-direction: column; gap: 2px;
    }
    .player-program-card .ppc-team-name {
      font-size: 15px; font-weight: 800; color: #0f172a;
      letter-spacing: -0.015em;
    }
    .player-program-card .ppc-meta {
      font-size: 11px; color: #64748b; font-weight: 500;
    }
    .player-program-card .ppc-arrow {
      color: #94a3b8; flex-shrink: 0;
      transition: transform 220ms cubic-bezier(0.23, 1, 0.32, 1);
    }
    @media (hover: hover) and (pointer: fine) {
      .player-program-card:hover .ppc-arrow { transform: translateX(2px); }
    }

    /* Stats placeholder */
    .player-stats-placeholder {
      background: linear-gradient(180deg, #fafbfc, #ffffff);
      border: 1px dashed #e5e7eb;
      border-radius: 14px;
      padding: 28px 20px;
      text-align: center;
      color: #64748b;
    }
    .player-stats-placeholder-icon {
      display: inline-flex;
      width: 56px; height: 56px;
      align-items: center; justify-content: center;
      border-radius: 50%;
      background: white;
      border: 1px solid #e5e7eb;
      color: #94a3b8;
      margin-bottom: 12px;
    }
    .player-stats-placeholder-title {
      font-size: 14px; font-weight: 700; color: #0f172a;
      letter-spacing: -0.01em;
      margin-bottom: 4px;
    }
    .player-stats-placeholder-sub {
      font-size: 12px; color: #94a3b8;
      max-width: 380px; margin: 0 auto;
      line-height: 1.5;
    }

    /* Player stats — real season averages (replaces placeholder when data present) */
    .player-stats-headline {
      display: grid; grid-template-columns: repeat(3, 1fr); gap: 10px; margin-bottom: 10px;
    }
    .player-stat-big {
      position: relative; overflow: hidden; text-align: center;
      background: white; border: 1px solid #e5e7eb; border-radius: 14px; padding: 16px 14px;
      transition: border-color 220ms cubic-bezier(0.23, 1, 0.32, 1);
    }
    .player-stat-big::before {
      content: ""; position: absolute; top: 0; left: 0; right: 0; height: 3px;
      background: rgb(var(--player-rgb, 148,163,184)); opacity: 0.85;
    }
    @media (hover: hover) and (pointer: fine) { .player-stat-big:hover { border-color: #cbd5e1; } }
    .player-stat-big .psb-value {
      font-size: 30px; font-weight: 800; color: #0f172a; line-height: 1;
      letter-spacing: -0.03em; font-variant-numeric: tabular-nums;
    }
    .player-stat-big .psb-label {
      font-size: 9.5px; font-weight: 800; color: #94a3b8; margin-top: 6px;
      letter-spacing: 0.1em; text-transform: uppercase;
    }
    .player-stat-grid {
      display: grid; grid-template-columns: repeat(auto-fit, minmax(94px, 1fr)); gap: 8px;
    }
    .player-stat-cell {
      background: white; border: 1px solid #e5e7eb; border-radius: 11px; padding: 11px 12px;
      display: flex; flex-direction: column; gap: 3px;
      transition: border-color 220ms cubic-bezier(0.23, 1, 0.32, 1);
    }
    @media (hover: hover) and (pointer: fine) { .player-stat-cell:hover { border-color: #cbd5e1; } }
    .player-stat-cell .psc-label {
      font-size: 9px; font-weight: 800; color: #94a3b8; letter-spacing: 0.08em; text-transform: uppercase;
    }
    .player-stat-cell .psc-value {
      font-size: 15px; font-weight: 800; color: #0f172a; letter-spacing: -0.01em; font-variant-numeric: tabular-nums;
    }
    .player-stats-caption {
      font-size: 11px; color: #94a3b8; font-weight: 500; margin-top: 10px; text-align: center;
    }

    /* Player career / transfer timeline */
    .player-career-timeline { display: flex; flex-wrap: wrap; align-items: stretch; gap: 0; }
    .pct-stop {
      flex: 1 1 170px; min-width: 0; display: flex; align-items: center; gap: 10px;
      background: white; border: 1px solid #e5e7eb; border-radius: 12px; padding: 12px 14px;
      transition: border-color 220ms cubic-bezier(0.23, 1, 0.32, 1);
    }
    .pct-stop.is-current { border-color: rgb(var(--player-rgb, 148,163,184)); box-shadow: inset 0 0 0 1px rgb(var(--player-rgb, 148,163,184)); }
    /* padding gives tight-cropped assets (Rutgers' edge-to-edge block R) breathing room
       so they don't read as clipped next to logos ESPN ships with internal padding */
    .pct-stop img { width: 34px; height: 34px; object-fit: contain; flex-shrink: 0; padding: 3px; }
    .pct-stop .pct-fallback {
      width: 34px; height: 34px; border-radius: 50%; flex-shrink: 0;
      display: flex; align-items: center; justify-content: center;
      font-size: 11px; font-weight: 800; color: #94a3b8; background: #f1f5f9; border: 1px solid #e5e7eb;
    }
    .pct-stop .pct-text { display: flex; flex-direction: column; gap: 1px; min-width: 0; }
    .pct-stop .pct-class { font-size: 9px; font-weight: 800; color: #94a3b8; letter-spacing: 0.08em; text-transform: uppercase; }
    .pct-stop .pct-team { font-size: 13px; font-weight: 800; color: #0f172a; letter-spacing: -0.01em; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
    .pct-stop .pct-season { font-size: 10px; color: #94a3b8; font-weight: 600; }
    .pct-arrow { flex: 0 0 auto; display: flex; align-items: center; padding: 0 6px; color: #cbd5e1; }
    .pct-arrow.is-transfer { color: rgb(var(--player-rgb, 148,163,184)); }
    @media (max-width: 640px) {
      .player-career-timeline { flex-direction: column; }
      .pct-stop { flex-basis: auto; }
      .pct-arrow { padding: 4px 0; justify-content: center; transform: rotate(90deg); }
    }

    /* Player search result row — circular avatar (vs team logo square) */
    .gs-result-player .gs-result-headshot-wrap {
      width: 28px; height: 28px;
      border-radius: 50%;
      overflow: hidden;
      flex-shrink: 0;
      display: flex; align-items: center; justify-content: center;
      /* Subtle image outline (#11) — wrapper ring, auto-flips in dark. */
      box-shadow: inset 0 0 0 1px rgba(0,0,0,0.08);
    }
    .gs-result-player .gs-result-headshot-wrap img {
      width: 100%; height: 100%; object-fit: cover; object-position: center top;
    }
    .gs-result-player .gs-result-headshot-fallback {
      width: 100%; height: 100%;
      display: flex; align-items: center; justify-content: center;
      font-size: 10px; font-weight: 800;
    }
    .gs-section-divider {
      font-size: 9.5px;
      font-weight: 800;
      color: #94a3b8;
      letter-spacing: 0.12em;
      text-transform: uppercase;
      padding: 12px 14px 4px;
    }

    /* Coach attribution bar — sits above the roster grid */
    .team-coach-bar {
      display: flex; align-items: center; justify-content: space-between;
      margin-bottom: 10px;
      padding: 8px 14px;
      border-radius: 10px;
      background: linear-gradient(180deg, #fafbfc, #ffffff);
      border: 1px solid #e5e7eb;
      transition: border-color 220ms cubic-bezier(0.23, 1, 0.32, 1);
      flex-wrap: wrap;
      gap: 8px;
    }
    @media (hover: hover) and (pointer: fine) {
      .team-coach-bar:hover { border-color: #cbd5e1; }
    }
    .team-coach-label {
      font-size: 9.5px; font-weight: 800; color: #94a3b8;
      letter-spacing: 0.1em; text-transform: uppercase;
    }
    .team-coach-name {
      font-size: 13px; font-weight: 700; color: #0f172a;
      letter-spacing: -0.01em;
    }
    .team-coach-stats {
      font-size: 11px; font-weight: 600; color: #64748b;
      font-variant-numeric: tabular-nums;
    }

    .team-section-title {
      font-size: 16px; font-weight: 700; color: #0f172a; margin-bottom: 12px;
      display: flex; align-items: center; gap: 8px;
    }

    /* Friendly empty-state for quad record when team has zero game data */
    .team-quad-empty {
      grid-column: 1 / -1;   /* span all 4 columns of the quad grid */
      padding: 28px 20px;
      text-align: center;
      color: #64748b;
      background: linear-gradient(180deg, #fafbfc, #ffffff);
      border: 1px dashed #e5e7eb;
      border-radius: 14px;
    }
    .team-quad-empty .tqe-icon {
      display: inline-flex;
      width: 52px; height: 52px;
      align-items: center; justify-content: center;
      border-radius: 50%;
      background: white;
      border: 1px solid #e5e7eb;
      color: #94a3b8;
      margin-bottom: 12px;
    }
    .team-quad-empty .tqe-title {
      font-size: 14px; font-weight: 700; color: #0f172a;
      letter-spacing: -0.01em;
      margin-bottom: 4px;
    }
    .team-quad-empty .tqe-sub {
      font-size: 12px; color: #94a3b8;
      max-width: 360px; margin: 0 auto;
      line-height: 1.5;
    }

    /* Friendly empty-state for schedule when per-team game logs haven't shipped yet */
    .team-schedule-empty {
      padding: 28px 20px;
      text-align: center;
      color: #64748b;
      background: linear-gradient(180deg, #fafbfc, #ffffff);
    }
    .team-schedule-empty .tse-icon {
      display: inline-flex;
      width: 52px; height: 52px;
      align-items: center; justify-content: center;
      border-radius: 50%;
      background: white;
      border: 1px solid #e5e7eb;
      color: #94a3b8;
      margin-bottom: 12px;
    }
    .team-schedule-empty .tse-title {
      font-size: 14px; font-weight: 700; color: #0f172a;
      letter-spacing: -0.01em;
      margin-bottom: 4px;
    }
    .team-schedule-empty .tse-sub {
      font-size: 12px; color: #94a3b8;
      max-width: 360px; margin: 0 auto;
      line-height: 1.5;
    }

    /* ====== Path to NCAAT ====== */
    .ptn-search-wrap {
      position: relative; max-width: 480px;
    }
    .ptn-search-icon {
      position: absolute; left: 14px; top: 50%; transform: translateY(-50%);
      width: 16px; height: 16px; color: #94a3b8; pointer-events: none;
    }
    .ptn-search-input {
      width: 100%; padding: 12px 16px 12px 40px;
      border-radius: 12px; border: 1px solid #e5e7eb; background: white;
      font-size: 14px; color: #0f172a; outline: none;
      transition: border-color 200ms ease, box-shadow 200ms ease;
    }
    .ptn-search-input:focus { border-color: #0f172a; box-shadow: 0 0 0 4px rgba(15,23,42,0.06); }
    .ptn-search-input::placeholder { color: #94a3b8; }

    /* Tournament chance hero card */
    /* Selected-team identity header on Path to NCAAT */
    .ptn-team-header {
      display: flex; align-items: center; gap: 16px;
      padding: 14px 18px; margin-bottom: 14px;
      border-radius: 14px; background: white;
      border: 1px solid #e5e7eb;
      box-shadow: 0 2px 8px rgba(0,0,0,0.04);
      position: relative; overflow: hidden;
    }
    .ptn-team-header::before {
      content: ""; position: absolute; top: 0; left: 0; bottom: 0; width: 4px;
      background: var(--team-c, #94a3b8);
    }
    .ptn-team-header img {
      width: 52px; height: 52px; object-fit: contain; flex-shrink: 0;
      filter: drop-shadow(0 2px 6px rgba(0,0,0,0.1));
    }
    .ptn-team-header .pth-info { flex: 1; min-width: 0; }
    .ptn-team-header .pth-name {
      font-size: 22px; font-weight: 800; color: #0f172a;
      letter-spacing: -0.02em; line-height: 1.1;
      display: flex; align-items: baseline; gap: 8px; flex-wrap: wrap;
    }
    .ptn-team-header .pth-mascot { font-size: 14px; font-weight: 500; color: #64748b; }
    .ptn-team-header .pth-meta {
      display: flex; align-items: center; gap: 10px; margin-top: 4px;
      font-size: 12px; color: #64748b; flex-wrap: wrap;
    }
    .ptn-team-header .pth-conf {
      padding: 2px 8px; border-radius: 5px;
      background: rgba(15,23,42,0.06); color: #475569;
      font-size: 11px; font-weight: 600;
    }
    .ptn-team-header .pth-streak.w { color: #16a34a; font-weight: 700; }
    .ptn-team-header .pth-streak.l { color: #dc2626; font-weight: 700; }

    .ptn-chance-card {
      grid-column: span 2 / span 2;
      border-radius: 16px; padding: 24px 28px;
      background: linear-gradient(135deg, #0f172a 0%, #1e293b 100%);
      color: white; position: relative; overflow: hidden;
    }
    @media (max-width: 1024px) { .ptn-chance-card { grid-column: span 1 / span 1; } }
    .ptn-chance-label { font-size: 11px; font-weight: 700; color: #fb923c;
      text-transform: uppercase; letter-spacing: 0.08em; margin-bottom: 6px; }
    .ptn-chance-val {
      font-size: 60px; font-weight: 800; line-height: 1; letter-spacing: -0.04em;
      display: flex; align-items: baseline; gap: 4px;
      font-variant-numeric: tabular-nums;
    }
    .ptn-chance-val small { font-size: 24px; color: #94a3b8; font-weight: 600; }
    .ptn-chance-bar {
      margin-top: 14px; height: 6px; border-radius: 3px;
      background: rgba(255,255,255,0.08); overflow: hidden;
    }
    .ptn-chance-bar > div {
      height: 100%; border-radius: 3px;
      background: linear-gradient(90deg, #f59e0b, #fb923c);
    }
    .ptn-atlarge-note {
      display: flex; align-items: flex-start; gap: 9px;
      margin-bottom: 14px; padding: 10px 14px;
      border-radius: 10px;
      background: rgba(37,99,235,0.06);
      border: 1px solid rgba(37,99,235,0.16);
      border-left: 3px solid #2563eb;
      color: #334155; font-size: 12.5px; line-height: 1.45;
    }
    .ptn-atlarge-note .ptn-note-icon { flex: none; font-size: 14px; line-height: 1.2; }
    .ptn-atlarge-note strong { color: #0f172a; font-weight: 700; }
    .ptn-chance-status {
      display: inline-flex; align-items: center; gap: 6px; margin-top: 14px;
      padding: 4px 10px; border-radius: 8px;
      font-size: 11px; font-weight: 600;
    }
    .ptn-chance-status.lock { background: rgba(34,197,94,0.18); color: #4ade80; }
    .ptn-chance-status.likely { background: rgba(59,130,246,0.18); color: #93c5fd; }
    .ptn-chance-status.safe { background: rgba(20,184,166,0.18); color: #5eead4; }
    .ptn-chance-status.bubble { background: rgba(245,158,11,0.18); color: #fcd34d; }
    .ptn-chance-status.longshot { background: rgba(249,115,22,0.18); color: #fdba74; }
    .ptn-chance-status.outside { background: rgba(239,68,68,0.18); color: #fca5a5; }
    /* Separate Auto-Bid badge — shown ALONGSIDE the chance-based status pill (not in
       place of it). Gold = won their conference → automatic bid, independent of at-large %. */
    .ptn-autobid-badge {
      display: inline-flex; align-items: center; gap: 5px;
      margin-top: 14px; margin-left: 8px;
      padding: 4px 10px; border-radius: 8px;
      font-size: 11px; font-weight: 700;
      background: linear-gradient(135deg, #fef3c7, #fde68a); color: #92400e;
    }

    /* Projected seed card */
    .ptn-seed-card {
      border-radius: 16px; padding: 24px 28px;
      border: 1px solid #e5e7eb; background: white;
      display: flex; flex-direction: column; justify-content: center;
    }
    .ptn-seed-label { font-size: 11px; font-weight: 700; color: #94a3b8;
      text-transform: uppercase; letter-spacing: 0.08em; margin-bottom: 8px; }
    .ptn-seed-val {
      font-size: 56px; font-weight: 800; line-height: 1; letter-spacing: -0.04em;
      color: #0f172a;
    }
    /* Word seeds shrink so "Bubble"/"Long Shot" never wrap or spill (mirrors .sb-val.is-word) */
    .ptn-seed-val.is-word { font-size: 36px; letter-spacing: -0.02em; }
    .ptn-seed-val.is-word-long { font-size: 28px; letter-spacing: -0.01em; white-space: nowrap; }
    .ptn-seed-region { font-size: 13px; color: #64748b; margin-top: 6px; }
    .ptn-seed-helper { font-size: 11px; color: #94a3b8; margin-top: 10px; padding-top: 10px; border-top: 1px solid #f1f5f9; }

    /* Remaining schedule rows with W/L picker */
    .ptn-sched-row {
      display: grid;
      grid-template-columns: 60px 28px 1fr 70px 100px;
      gap: 12px; align-items: center;
      padding: 12px 16px; transition: background-color 150ms ease;
    }
    .ptn-sched-row:not(:last-child) { border-bottom: 1px solid #f1f5f9; }
    @media (hover: hover) and (pointer: fine) {
      .ptn-sched-row:hover { background: #fafbfc; }
    }
    .ptn-sched-row.win-pick { background: rgba(22,163,74,0.04); }
    .ptn-sched-row.loss-pick { background: rgba(220,38,38,0.04); }
    @media (max-width: 639px) {
      .ptn-sched-row { grid-template-columns: 44px 1fr auto; gap: 8px; }
      .ptn-sched-logo, .ptn-sched-prob { display: none; }
      .ptn-sched-opp .name { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
    }
    .ptn-sched-date { font-size: 11px; color: #94a3b8; font-weight: 600; }
    .ptn-sched-logo { width: 24px; height: 24px; object-fit: contain; }
    .ptn-sched-opp { display: flex; flex-direction: column; min-width: 0; }
    .ptn-sched-opp .name { font-size: 13px; font-weight: 600; color: #0f172a; }
    .ptn-sched-opp .meta { font-size: 10px; color: #94a3b8; }
    .ptn-sched-prob { text-align: center; font-size: 12px; color: #475569; font-weight: 600; font-variant-numeric: tabular-nums; }
    .ptn-sched-prob small { display: block; font-size: 9px; color: #94a3b8; font-weight: 500; margin-top: 2px; text-transform: uppercase; letter-spacing: 0.04em; }

    .ptn-wl-toggle { display: inline-flex; gap: 4px; }
    .ptn-wl-btn {
      width: 38px; height: 32px; border-radius: 8px; border: 1px solid #e5e7eb;
      background: white; color: #94a3b8;
      font-size: 12px; font-weight: 700; cursor: pointer;
      transition: background-color 160ms ease, color 160ms ease, border-color 160ms ease, transform 160ms cubic-bezier(0.23,1,0.32,1);
    }
    .ptn-wl-btn:active { transform: scale(0.97); }
    @media (hover: hover) and (pointer: fine) {
      .ptn-wl-btn:hover { border-color: #cbd5e1; color: #475569; }
    }
    .ptn-wl-btn.w-active { background: #16a34a; color: white; border-color: #16a34a; }
    .ptn-wl-btn.l-active { background: #dc2626; color: white; border-color: #dc2626; }
    .ptn-wl-btn:disabled { opacity: 0.55; cursor: default; }

    /* ── Dormant simulator (offseason empty state) ──────────────────────────
       Reuses .ptn-sched-row so the ghost rows carry the REAL row anatomy —
       skeleton bars sit where date / logo / opponent / win-prob will go. No
       fabricated opponents or dates: boss 2026-06-08 killed fake games on a
       public site, and a grey bar can't be mistaken for a real matchup.
       Static by design — a shimmer here would be permanent motion on a state
       every offseason visitor sees (Emil: animate the occasional, not the
       always-on). The mask fades the ghosts out so the message reads first. */
    .ptn-sched-ghost {
      -webkit-mask-image: linear-gradient(180deg, #000 12%, transparent 92%);
      mask-image: linear-gradient(180deg, #000 12%, transparent 92%);
    }
    .ptn-sched-ghost .ptn-sched-row { opacity: 0.5; pointer-events: none; }
    .ptn-skel { display: block; height: 8px; border-radius: 4px; background: #eef2f7; }
    .ptn-skel.sk-logo { width: 24px; height: 24px; border-radius: 50%; }
    .ptn-skel.sk-name { width: 62%; height: 10px; margin-bottom: 5px; }
    .ptn-skel.sk-meta { width: 34%; height: 7px; }
    .ptn-skel.sk-date { width: 38px; }
    .ptn-skel.sk-prob { width: 40px; margin: 0 auto; }
    /* .ptn-skel's display:block is declared after the ≤640px rule that hides
       .ptn-sched-logo, and at equal specificity — so it wins and the ghost logo
       survives into the 3-column mobile grid, collapsing the W/L column to 0px.
       Re-hide it here with a higher-specificity selector. */
    @media (max-width: 640px) {
      .ptn-sched-ghost .ptn-skel.sk-logo { display: none; }
    }
    .ptn-sched-emptymsg {
      text-align: center; padding: 2px 20px 30px;
      background: linear-gradient(180deg, rgba(250,251,252,0) 0%, #ffffff 40%);
      margin-top: -18px; position: relative;
    }
    .ptn-sched-emptymsg .pse-icon {
      display: inline-flex; width: 52px; height: 52px;
      align-items: center; justify-content: center;
      border-radius: 50%; background: white;
      border: 1px solid #e5e7eb; color: #94a3b8;
      margin-bottom: 12px;
      box-shadow: 0 2px 8px rgba(15,23,42,0.05);
    }
    .ptn-sched-emptymsg .pse-title {
      font-size: 14px; font-weight: 700; color: #0f172a;
      letter-spacing: -0.01em; margin-bottom: 4px;
    }
    .ptn-sched-emptymsg .pse-sub {
      font-size: 12px; color: #94a3b8;
      max-width: 400px; margin: 0 auto; line-height: 1.5;
    }

    .ptn-team-pick {
      display: flex; align-items: center; gap: 8px;
      padding: 8px 12px; border-radius: 10px; border: 1px solid #e5e7eb; background: white;
      cursor: pointer; transition: border-color 200ms ease, background-color 200ms ease, transform 160ms cubic-bezier(0.23,1,0.32,1);
    }
    .ptn-team-pick:active { transform: scale(0.97); }
    @media (hover: hover) and (pointer: fine) { .ptn-team-pick:hover { border-color: #cbd5e1; background: #f8fafc; } }
    .ptn-team-pick.active { border-color: #0f172a; background: #0f172a; color: white; }
    .ptn-team-pick.active span { color: white !important; }
    .ptn-team-pick img { width: 22px; height: 22px; object-fit: contain; }

    .ptn-resume {
      border-radius: 16px; padding: 24px 28px;
      background: linear-gradient(135deg, #0f172a 0%, #1e293b 100%);
      color: white;
    }
    .ptn-resume h3 { font-size: 14px; font-weight: 700; color: #fb923c; margin-bottom: 10px;
      text-transform: uppercase; letter-spacing: 0.08em; font-size: 11px; }

    /* ====== Transfer Portal ====== */
    .tp-stat-card {
      border-radius: 12px; border: 1px solid #e5e7eb; background: white;
      padding: 16px 20px;
      box-shadow: 0 1px 2px rgba(15,23,42,0.04), 0 5px 14px rgba(15,23,42,0.05);
    }
    .tp-stat-card .tp-val { font-size: 28px; font-weight: 800; color: #0f172a; letter-spacing: -0.02em; }
    .tp-stat-card .tp-label { font-size: 11px; font-weight: 600; color: #94a3b8;
      text-transform: uppercase; letter-spacing: 0.06em; margin-top: 4px; }

    .tp-filter-pill {
      display: inline-flex; align-items: center; gap: 4px;
      padding: 6px 12px; border-radius: 20px; font-size: 12px; font-weight: 500;
      border: 1px solid #e5e7eb; background: white; color: #6b7280;
      cursor: pointer;
      transition: background-color 150ms ease, color 150ms ease, border-color 150ms ease, transform 160ms cubic-bezier(0.23,1,0.32,1);
    }
    .tp-filter-pill:active { transform: scale(0.96); }
    @media (hover: hover) and (pointer: fine) { .tp-filter-pill:hover { border-color: #cbd5e1; } }
    .tp-filter-pill.active { background: #0f172a; color: white; border-color: #0f172a; }

    .tp-player-card {
      border-radius: 12px; border: 1px solid #e5e7eb; background: white;
      padding: 14px 16px;
      transition: border-color 200ms ease, box-shadow 200ms ease, transform 200ms cubic-bezier(0.23,1,0.32,1);
    }
    @media (hover: hover) and (pointer: fine) { .tp-player-card:hover { border-color: #cbd5e1; box-shadow: 0 4px 12px rgba(0,0,0,0.04); transform: translateY(-1px); } }
    .tp-player-card .tp-row { display: flex; align-items: center; gap: 10px; }
    .tp-player-card .tp-avatar {
      width: 40px; height: 40px; border-radius: 50%; flex-shrink: 0;
      background: #f1f5f9; display: flex; align-items: center; justify-content: center;
      font-size: 14px; font-weight: 700; color: #64748b;
    }
    .tp-player-name { font-size: 14px; font-weight: 700; color: #0f172a; }
    .tp-player-meta { font-size: 11px; color: #64748b; }
    .tp-stars { display: inline-flex; gap: 1px; color: #f59e0b; font-size: 11px; }
    .tp-school-row {
      display: flex; align-items: center; gap: 6px; margin-top: 10px;
      padding-top: 10px; border-top: 1px solid #f1f5f9;
      font-size: 11px;
    }
    .tp-school-row img { width: 20px; height: 20px; object-fit: contain; }
    .tp-arrow { color: #cbd5e1; font-weight: 700; }
    .tp-status-badge {
      display: inline-flex; padding: 2px 8px; border-radius: 6px;
      font-size: 9px; font-weight: 700; text-transform: uppercase; letter-spacing: 0.06em;
    }
    .tp-status-committed { background: rgba(22,163,74,0.08); color: #16a34a; }
    .tp-status-uncommitted { background: rgba(245,158,11,0.08); color: #d97706; }
    .tp-status-withdrew { background: rgba(100,116,139,0.08); color: #64748b; }

    .tp-stats-mini { display: flex; gap: 12px; margin-top: 8px; }
    .tp-stats-mini .stat { text-align: center; }
    .tp-stats-mini .stat .v { font-size: 13px; font-weight: 700; color: #0f172a; }
    .tp-stats-mini .stat .l { font-size: 9px; color: #94a3b8; text-transform: uppercase; }

    /* ====== Slate / Floating USA Map ====== */
    .slate-map-wrap {
      position: relative; width: 100%; padding: 20px 0 40px;
      display: flex; justify-content: center; align-items: center;
    }
    /* Map is a fixed ~900px SVG; on viewports too narrow to fit it, scroll
       horizontally (flex-start) instead of bleeding off the page edge. */
    @media (max-width: 940px) {
      .slate-map-wrap { justify-content: flex-start; overflow-x: auto; -webkit-overflow-scrolling: touch; }
    }
    .slate-map-inner {
      position: relative;
      transform: perspective(1200px) rotateX(12deg);
      filter: drop-shadow(0 30px 40px rgba(0,0,0,0.25)) drop-shadow(0 10px 15px rgba(0,0,0,0.15));
      transition: transform 0.22s cubic-bezier(0.23,1,0.32,1);
    }
    @media (hover: hover) and (pointer: fine) {
      .slate-map-inner:hover { transform: perspective(1200px) rotateX(8deg) scale(1.01); }
    }
    #slate-map-svg { display: block; }
    .state-path {
      fill: #12141a; stroke: #2a2d38; stroke-width: 0.6;
      transition: fill 0.2s ease;
    }
    @media (hover: hover) and (pointer: fine) {
      .state-path:hover { fill: #1e2130; }
    }

    /* Best-team-per-state fills (DEV) */
    .state-team-fill { cursor: pointer; transition: fill-opacity .22s ease, filter .22s ease; outline: none; }
    @media (hover: hover) and (pointer: fine) {
      .state-team-fill:hover { fill-opacity: 1; filter: brightness(1.08) saturate(1.1); }
    }
    .state-team-fill:focus-visible { filter: brightness(1.16); }
    .state-team-logo { pointer-events: none; filter: drop-shadow(0 0 1.3px rgba(255,255,255,0.78)) drop-shadow(0 1px 1.4px rgba(0,0,0,0.45)); }
    /* Emil: per-state cell — staggered reveal, hover lift, press feedback */
    .state-cell { transform-box: fill-box; transform-origin: center; }
    @media (prefers-reduced-motion: no-preference) {
      .state-cell { animation: stateCellIn .6s cubic-bezier(0.23,1,0.32,1) backwards; animation-delay: var(--d, 0s); }
    }
    @keyframes stateCellIn { from { opacity: 0; transform: scale(.88); } to { opacity: 1; transform: scale(1); } }
    @media (hover: hover) and (pointer: fine) {
      .state-cell { transition: transform .26s cubic-bezier(0.23,1,0.32,1); }
      .state-cell:hover { transform: scale(1.06); }
    }
    .state-cell:active { transform: scale(.975); }

    /* Map game dots */
    .game-dot { cursor: pointer; transition: r 0.15s ease; }
    .game-dot-glow { pointer-events: none; }
    .game-dot-pulse {
      pointer-events: none;
      animation: map-pulse 2s ease-out infinite;
    }
    @keyframes map-pulse {
      0% { r: 4; opacity: 0.6; }
      100% { r: 16; opacity: 0; }
    }

    /* Hover tooltip on map */
    .slate-tip {
      position: absolute; pointer-events: none; z-index: 20;
      background: white; border-radius: 10px; padding: 10px 14px;
      box-shadow: 0 8px 30px rgba(0,0,0,0.15); border: 1px solid #e5e7eb;
      font-size: 12px; white-space: nowrap; opacity: 0;
      transform: translateY(4px); transition: opacity 0.15s, transform 0.15s;
    }
    .slate-tip.show { opacity: 1; transform: translateY(0); }
    .slate-tip-teams { display: flex; align-items: center; gap: 6px; font-weight: 600; color: #09090b; }
    .slate-tip-teams img { width: 20px; height: 20px; object-fit: contain; }
    .slate-tip-meta { color: #6b7280; font-size: 11px; margin-top: 3px; }

    /* ── Higher or Lower (multi-stat streak game) — DEV ─────────────── */
    /* ===== DREAM MATCHUP (head-to-head sim) — DEV ===== */
    .dm-stage { max-width: 880px; margin: 0 auto; }
    .dm-stage .cmp-picker-row { margin-bottom: 16px; }
    .dm-sim-row { text-align: center; margin-top: 4px; }
    /* Venue selector: 3 equal columns so the middle pill (and the whole row) centers
       exactly under the Sim button below, regardless of team-name length. */
    #dm-venue { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 8px; max-width: 540px; margin-left: auto; margin-right: auto; }
    #dm-venue .hover-btn { width: 100%; white-space: nowrap; justify-content: center; }
    .dm-result { background: white; border: 1px solid #e2e8f0; border-radius: 18px; padding: 22px 20px; margin-top: 22px; animation: dmIn 0.24s cubic-bezier(0.23, 1, 0.32, 1) backwards; }
    @keyframes dmIn { from { opacity: 0; transform: scale(0.96) translateY(6px); } }
    .dm-scoreline { display: grid; grid-template-columns: minmax(0,1fr) auto minmax(0,1fr); align-items: center; gap: 12px; margin-bottom: 6px; }
    .dm-side { display: flex; align-items: center; gap: 10px; min-width: 0; }
    .dm-side.is-b { flex-direction: row-reverse; }
    .dm-side img { width: 44px; height: 44px; object-fit: contain; flex: none; }
    .dm-side-name { font-size: 15px; font-weight: 700; color: #334155; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
    .dm-side.is-winner .dm-side-name { color: #0f172a; font-weight: 800; }
    .dm-score { font-size: 38px; font-weight: 800; letter-spacing: -0.02em; color: #94a3b8; white-space: nowrap; font-variant-numeric: tabular-nums; }
    .dm-score .is-winner { color: #0f172a; }
    .dm-ot { font-size: 11px; font-weight: 800; color: #f59e0b; vertical-align: super; margin-left: 4px; }
    .dm-verdict { text-align: center; font-size: 13.5px; color: #64748b; margin: 4px 0 14px; }
    .dm-verdict b { color: #0f172a; }
    .dm-prob-bar { display: flex; height: 10px; border-radius: 999px; overflow: hidden; background: #e2e8f0; margin-bottom: 18px; }
    .dm-factors { display: flex; flex-direction: column; gap: 8px; }
    .dm-factor { display: flex; align-items: baseline; gap: 10px; font-size: 13px; color: #475569; padding: 9px 12px; background: #f8fafc; border-radius: 10px; animation: dmIn 0.22s cubic-bezier(0.23, 1, 0.32, 1) backwards; }
    .dm-factor-label { font-size: 10px; font-weight: 800; text-transform: uppercase; letter-spacing: 0.07em; color: #94a3b8; flex: none; width: 74px; }
    .dm-factor-edge { font-weight: 800; color: #0f172a; flex: none; }
    .dm-factor-detail { color: #64748b; min-width: 0; }
    .dm-actions { display: flex; gap: 10px; justify-content: center; margin-top: 18px; }
    .dm-foot { text-align: center; font-size: 11.5px; color: #94a3b8; margin-top: 12px; }
    @media (max-width: 639px) {
      .dm-score { font-size: 28px; }
      .dm-side img { width: 32px; height: 32px; }
      .dm-factor-label { width: 64px; }
    }
    @media (prefers-reduced-motion: reduce) {
      .dm-result, .dm-factor { animation-duration: 0.01ms !important; animation-delay: 0ms !important; }
    }
    /* ===== SCHEDULE LAB (build-a-season simulator) — DEV ===== */
    .sl-stage { max-width: 880px; margin: 0 auto; }
    .sl-top { display: grid; grid-template-columns: minmax(0,1fr) auto; gap: 12px; align-items: center; margin-bottom: 14px; }
    .sl-top .cmp-picker { min-height: 64px; }
    .sl-count { font-size: 12px; font-weight: 800; color: #94a3b8; letter-spacing: 0.04em; white-space: nowrap; }
    .sl-rows { display: flex; flex-direction: column; gap: 6px; margin-bottom: 12px; }
    .sl-row { display: grid; grid-template-columns: 28px minmax(0,1fr) auto auto auto auto; align-items: center; gap: 10px; background: white; border: 1px solid #e2e8f0; border-radius: 11px; padding: 7px 10px; }
    .sl-row img { width: 24px; height: 24px; object-fit: contain; }
    .sl-name { font-size: 13.5px; font-weight: 700; color: #0f172a; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
    .sl-net { font-size: 11px; color: #94a3b8; white-space: nowrap; }
    .sl-vens { display: inline-flex; gap: 3px; }
    .sl-vp { width: 26px; height: 24px; border-radius: 7px; border: 1px solid #e2e8f0; background: white; font-size: 10.5px; font-weight: 800; color: #94a3b8; transition: background-color 140ms ease, color 140ms ease, transform 120ms ease; }
    @media (hover: hover) and (pointer: fine) { .sl-vp:not(.is-active):hover { background: #f1f5f9; color: #334155; } }
    .sl-vp:active { transform: scale(0.97); }
    .sl-vp.is-active { background: #0f172a; border-color: #0f172a; color: white; }
    .sl-x { width: 24px; height: 24px; border-radius: 7px; display: inline-flex; align-items: center; justify-content: center; color: #94a3b8; font-size: 15px; transition: background-color 120ms ease, color 120ms ease, transform 120ms ease; }
    @media (hover: hover) and (pointer: fine) { .sl-x:hover { background: #fef2f2; color: #dc2626; } }
    .sl-x:active { transform: scale(0.97); }
    .sl-empty { text-align: center; font-size: 13px; color: #94a3b8; padding: 18px 0; }
    .sl-res { min-width: 60px; text-align: center; font-size: 10.5px; font-weight: 800; border-radius: 7px; padding: 3px 7px; white-space: nowrap; font-variant-numeric: tabular-nums; }
    .sl-res.is-w { background: #dcfce7; color: #15803d; }
    .sl-res.is-l { background: #fee2e2; color: #b91c1c; }
    .sl-row.is-locked { background: #f8fafc; border-style: dashed; }
    .sl-lock-ven { width: 26px; height: 24px; border-radius: 7px; background: #e2e8f0; color: #475569; font-size: 10.5px; font-weight: 800; display: inline-flex; align-items: center; justify-content: center; }
    .sl-lock { font-size: 12px; opacity: 0.55; width: 24px; text-align: center; }
    .sl-sec { font-size: 11px; font-weight: 800; text-transform: uppercase; letter-spacing: 0.07em; color: #94a3b8; margin: 16px 0 8px; }
    .sl-hint { font-size: 12.5px; font-weight: 700; color: #f59e0b; align-self: center; }
    .sl-actions { display: flex; gap: 10px; justify-content: center; margin-bottom: 6px; flex-wrap: wrap; }
    .sl-result { background: white; border: 1px solid #e2e8f0; border-radius: 18px; padding: 22px 20px; margin-top: 20px; animation: dmIn 0.24s cubic-bezier(0.23, 1, 0.32, 1) backwards; }
    .sl-record { text-align: center; font-size: 42px; font-weight: 800; letter-spacing: -0.02em; color: #0f172a; font-variant-numeric: tabular-nums; }
    .sl-record-sub { text-align: center; font-size: 12.5px; color: #94a3b8; margin-top: 2px; }
    .sl-dist { text-align: center; font-size: 13px; color: #64748b; margin: 10px 0 14px; }
    .sl-quads { display: grid; grid-template-columns: repeat(4, 1fr); gap: 8px; margin-bottom: 14px; }
    .sl-quad { background: #f8fafc; border-radius: 10px; padding: 9px 6px; text-align: center; animation: dmIn 0.22s cubic-bezier(0.23, 1, 0.32, 1) backwards; }
    .sl-quad-label { font-size: 10px; font-weight: 800; letter-spacing: 0.07em; color: #94a3b8; }
    .sl-quad-val { font-size: 16px; font-weight: 800; color: #0f172a; font-variant-numeric: tabular-nums; }
    .sl-meta-row { display: flex; gap: 10px; justify-content: center; flex-wrap: wrap; margin-bottom: 14px; }
    .sl-pill { display: inline-flex; align-items: center; gap: 6px; background: #f1f5f9; border-radius: 999px; padding: 6px 13px; font-size: 12.5px; font-weight: 700; color: #334155; }
    .sl-pill.is-seed { background: #0f172a; color: white; }
    .sl-verdict { font-size: 13.5px; color: #475569; line-height: 1.55; text-align: center; max-width: 560px; margin: 0 auto 14px; }
    @media (max-width: 639px) {
      .sl-top { grid-template-columns: 1fr; }
      .sl-count { text-align: center; }
      .sl-record { font-size: 32px; }
      .sl-row { grid-template-columns: 24px minmax(0,1fr) auto auto auto; }
      .sl-net { display: none; }
    }
    @media (prefers-reduced-motion: reduce) {
      .sl-result, .sl-quad { animation-duration: 0.01ms !important; animation-delay: 0ms !important; }
    }
    /* ===== BRACKETLE + LOGO QUIZ (shared typeahead + game surfaces) ===== */
    .tg-wrap { position: relative; max-width: 420px; margin: 0 auto; }
    .tg-input { width: 100%; border: 1px solid #e2e8f0; border-radius: 12px; padding: 11px 14px; font-size: 15px; background: white; outline: none; transition: border-color 180ms ease, box-shadow 180ms ease; }
    .tg-input:focus { border-color: #38bdf8; box-shadow: 0 0 0 3px rgba(56,189,248,0.15); }
    .tg-suggest { position: absolute; top: calc(100% + 6px); left: 0; right: 0; background: white; border: 1px solid #e2e8f0; border-radius: 12px; box-shadow: 0 12px 32px rgba(0,0,0,0.10); z-index: 40; overflow: hidden; }
    .tg-suggest:empty { display: none; }
    .tg-item { display: flex; align-items: center; gap: 10px; width: 100%; text-align: left; padding: 9px 13px; font-size: 14px; font-weight: 600; color: #334155; background: white; transition: background-color 120ms ease; }
    @media (hover: hover) and (pointer: fine) { .tg-item:hover { background: #f1f5f9; } }
    .tg-item:focus-visible { background: #f1f5f9; outline: 2px solid #38bdf8; outline-offset: -2px; }
    .tg-item:active { background: #e2e8f0; }
    .tg-item img { width: 22px; height: 22px; object-fit: contain; flex: none; }
    .br-stage { max-width: 720px; margin: 0 auto; }
    @media (min-width: 1100px) {
      /* board stays dead-center at its normal width; legend floats to its right */
      .br-stage { position: relative; }
      .br-stage .br-legend { position: absolute; left: calc(100% + 26px); top: 26px; width: 250px; margin-top: 0; }
      .br-stage .br-legend[open] summary { margin-bottom: 4px; }
    }
    .br-legend { background: white; border: 1px solid #e2e8f0; border-radius: 14px; padding: 12px 14px; margin-top: 16px; }
    .br-legend summary { font-size: 12.5px; font-weight: 800; color: #334155; cursor: pointer; letter-spacing: 0.01em; }
    .br-leg-body { margin-top: 8px; display: flex; flex-direction: column; gap: 9px; }
    .br-leg-row { display: flex; flex-direction: column; gap: 3px; }
    .br-leg-label { font-size: 10px; font-weight: 800; text-transform: uppercase; letter-spacing: 0.07em; color: #94a3b8; }
    .br-leg-item { display: flex; align-items: center; gap: 6px; font-size: 12px; font-weight: 600; color: #475569; }
    .br-leg-swatch { width: 12px; height: 12px; border-radius: 4px; flex: none; background: #e2e8f0; }
    .br-leg-swatch.is-g { background: #10b981; }
    .br-leg-swatch.is-y { background: #fbbf24; }
    .br-leg-swatch.is-a { background: transparent; }
    .br-leg-gray { font-size: 11.5px; font-weight: 600; color: #94a3b8; }
    .br-meta { text-align: center; font-size: 13px; color: #94a3b8; margin-bottom: 14px; }
    .br-board { display: flex; flex-direction: column; gap: 6px; margin-bottom: 18px; }
    .br-head-row, .br-row { display: grid; grid-template-columns: minmax(0, 1.5fr) repeat(5, minmax(0, 1fr)); gap: 6px; }
    .br-head-row { font-size: 10px; font-weight: 800; letter-spacing: 0.06em; text-transform: uppercase; color: #94a3b8; padding: 0 4px; }
    .br-head-row > span { text-align: center; }
    .br-head-row > span:first-child { text-align: left; }
    .br-row { animation: hlIn 240ms cubic-bezier(0.23,1,0.32,1) both; }
    .br-cell { border-radius: 10px; padding: 8px 6px; font-size: 12.5px; font-weight: 700; text-align: center; background: #f1f5f9; color: #475569; display: flex; align-items: center; justify-content: center; gap: 5px; min-width: 0; }
    .br-cell.is-team { justify-content: flex-start; padding-left: 9px; background: white; border: 1px solid #e2e8f0; }
    .br-cell.is-team span { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
    .br-cell.is-team img { width: 20px; height: 20px; object-fit: contain; flex: none; }
    .br-cell.is-g { background: #10b981; color: white; }
    .br-cell.is-y { background: #fbbf24; color: #78350f; }
    .br-cell .br-arrow { font-size: 10px; opacity: 0.85; }
    .br-empty-row .br-cell { background: #f8fafc; border: 1px dashed #e2e8f0; min-height: 36px; }
    .br-result { text-align: center; padding: 22px 16px; border: 1px solid #e2e8f0; border-radius: 18px; background: white; box-shadow: 0 2px 12px rgba(0,0,0,0.04); margin-bottom: 16px; animation: hlIn 240ms cubic-bezier(0.23,1,0.32,1) both; }
    .br-result img { width: 84px; height: 84px; object-fit: contain; margin: 0 auto 8px; }
    .br-result-name { font-size: 22px; font-weight: 800; letter-spacing: -0.02em; color: #0f172a; }
    .br-result-sub { font-size: 13px; color: #64748b; margin-top: 3px; }
    .br-stats-line { display: flex; gap: 18px; justify-content: center; font-size: 12.5px; color: #64748b; margin-top: 14px; flex-wrap: wrap; }
    .br-stats-line b { color: #0f172a; }
    .br-practice-tag { display: inline-block; font-size: 11px; font-weight: 800; letter-spacing: 0.05em; text-transform: uppercase; color: #0369a1; background: #e0f2fe; border-radius: 999px; padding: 3px 10px; margin-bottom: 10px; }
    .lq-stage { max-width: 560px; margin: 0 auto; }
    .lq-hud { display: flex; gap: 18px; justify-content: center; font-size: 13px; color: #64748b; margin-bottom: 14px; }
    .lq-hud b { color: #0f172a; }
    .lq-zoombox { width: 220px; height: 220px; margin: 0 auto 8px; border-radius: 18px; border: 1px solid #e2e8f0; background: white; overflow: hidden; box-shadow: 0 2px 12px rgba(0,0,0,0.04); display: flex; align-items: center; justify-content: center; transition: border-color 180ms ease, box-shadow 180ms ease; }
    .lq-zoombox.is-wrong { border-color: #f59e0b; box-shadow: 0 0 0 3px rgba(245,158,11,0.18); }
    .lq-zoombox.is-hit { border-color: #10b981; box-shadow: 0 0 0 3px rgba(16,185,129,0.18); }
    .lq-zoombox img { width: 100%; height: 100%; object-fit: contain; transition: transform 300ms cubic-bezier(0.23,1,0.32,1); }
    .lq-worth { text-align: center; font-size: 12px; font-weight: 700; color: #94a3b8; margin-bottom: 14px; }
    .lq-hints { display: flex; flex-direction: column; gap: 3px; align-items: center; margin-bottom: 12px; }
    .lq-hints:empty { display: none; }
    .lq-hint-line { font-size: 12.5px; font-weight: 600; color: #475569; background: #f1f5f9; border-radius: 999px; padding: 3px 12px; animation: hlIn 240ms cubic-bezier(0.23,1,0.32,1) both; }
    .lq-controls { display: flex; gap: 10px; justify-content: center; margin-top: 12px; flex-wrap: wrap; }
    .lq-controls .hl-btn:disabled { opacity: 0.45; cursor: default; }
    .lq-reveal-name { text-align: center; font-size: 19px; font-weight: 800; letter-spacing: -0.02em; color: #0f172a; margin-top: 6px; animation: hlIn 240ms cubic-bezier(0.23,1,0.32,1) both; }
    .lq-reveal-pts { text-align: center; font-size: 13px; font-weight: 700; margin-top: 2px; }
    .lq-reveal-pts.is-hit { color: #059669; }
    .lq-reveal-pts.is-miss { color: #94a3b8; }
    @media (max-width: 639px) {
      .br-cell { font-size: 11px; padding: 7px 3px; }
      .br-head-row { font-size: 9px; }
      .br-row, .br-head-row { gap: 4px; }
      .lq-zoombox { width: 180px; height: 180px; }
    }
    @media (prefers-reduced-motion: reduce) {
      .br-row, .br-result, .lq-reveal-name, .lq-hint-line { animation-duration: 0.01ms !important; }
      .lq-zoombox img { transition-duration: 0.01ms; }
    }
    /* ===== CONNECTIONS + TWO TRUTHS ===== */
    .cx-stage { max-width: 640px; margin: 0 auto; }
    .cx-solved { display: flex; flex-direction: column; gap: 8px; margin-bottom: 10px; }
    .cx-banner { border-radius: 12px; padding: 10px 14px; text-align: center; color: white; animation: hlIn 240ms cubic-bezier(0.23,1,0.32,1) both; }
    .cx-banner-label { font-size: 13px; font-weight: 800; letter-spacing: 0.02em; text-transform: uppercase; }
    .cx-banner-teams { font-size: 12.5px; font-weight: 600; opacity: 0.92; margin-top: 2px; line-height: 1.3; word-break: break-word; }
    .cx-grid { display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); gap: 8px; margin-bottom: 14px; }
    .cx-tile { border: 1px solid #e2e8f0; border-radius: 12px; background: #f8fafc; padding: 14px 4px; min-height: 64px; font-size: 12.5px; font-weight: 700; color: #334155; text-align: center; line-height: 1.25; word-break: break-word; transition: background-color 150ms ease, border-color 150ms ease, transform 150ms cubic-bezier(0.23,1,0.32,1); animation: hlIn 240ms cubic-bezier(0.23,1,0.32,1) both; }
    @media (hover: hover) and (pointer: fine) { .cx-tile:hover { background: #f1f5f9; border-color: #cbd5e1; } }
    .cx-tile:active { transform: scale(0.96); }
    .cx-tile.is-selected { background: #0f172a; border-color: #0f172a; color: white; }
    .cx-tile span.is-long { font-size: 11px; letter-spacing: -0.01em; }
    .cx-tile img { width: 22px; height: 22px; object-fit: contain; display: block; margin: 0 auto 5px; }
    .cx-tile.is-selected img { filter: brightness(0) invert(1); }
    .cx-hints { margin-bottom: 14px; text-align: center; }
    .cx-hints-title { font-size: 10px; font-weight: 800; letter-spacing: 0.07em; text-transform: uppercase; color: #94a3b8; margin-bottom: 7px; }
    .cx-hints-row { display: flex; flex-wrap: wrap; gap: 6px; justify-content: center; }
    .cx-hint-chip { font-size: 12px; font-weight: 700; color: #334155; background: white; border: 2px solid; border-radius: 999px; padding: 3px 11px; animation: hlIn 240ms cubic-bezier(0.23,1,0.32,1) both; }
    .cx-mistakes { display: flex; gap: 6px; align-items: center; justify-content: center; font-size: 12.5px; color: #64748b; margin-bottom: 4px; }
    .cx-dot { width: 9px; height: 9px; border-radius: 999px; background: #0f172a; display: inline-block; }
    .cx-dot.is-used { background: #e2e8f0; }
    .cx-toast { text-align: center; font-size: 13px; font-weight: 700; color: #b45309; min-height: 20px; margin-top: 8px; opacity: 0; transition: opacity 200ms ease; }
    .cx-toast.is-on { opacity: 1; }
    .lq-controls .hl-btn:disabled, .cx-stage .hl-btn:disabled { opacity: 0.45; cursor: default; }
    .ttl-stage { max-width: 560px; margin: 0 auto; }
    .ttl-team { display: flex; gap: 12px; align-items: center; justify-content: center; margin-bottom: 14px; }
    .ttl-team img { width: 52px; height: 52px; object-fit: contain; }
    .ttl-team-name { font-size: 20px; font-weight: 800; letter-spacing: -0.02em; color: #0f172a; }
    .ttl-team-conf { font-size: 12.5px; color: #94a3b8; font-weight: 600; }
    .ttl-prompt { text-align: center; font-size: 13px; font-weight: 700; color: #64748b; margin-bottom: 10px; }
    .ttl-claims { display: flex; flex-direction: column; gap: 9px; margin-bottom: 14px; }
    .ttl-claim { display: block; width: 100%; text-align: left; border: 1px solid #e2e8f0; border-radius: 14px; background: white; padding: 13px 16px; font-size: 14.5px; font-weight: 600; color: #334155; box-shadow: 0 2px 8px rgba(0,0,0,0.03); transition: border-color 150ms ease, transform 150ms cubic-bezier(0.23,1,0.32,1), box-shadow 150ms ease; animation: hlIn 240ms cubic-bezier(0.23,1,0.32,1) both; }
    .ttl-claims .ttl-claim:nth-child(2) { animation-delay: 50ms; }
    .ttl-claims .ttl-claim:nth-child(3) { animation-delay: 100ms; }
    @media (hover: hover) and (pointer: fine) { button.ttl-claim:hover { border-color: #94a3b8; box-shadow: 0 6px 18px rgba(0,0,0,0.06); } }
    button.ttl-claim:active { transform: scale(0.98); }
    .ttl-claim.is-revealed { cursor: default; }
    .ttl-claim.is-truth { border-color: #ef4444; background: #fef2f2; }
    .ttl-claim.is-lie { border-color: #10b981; background: #ecfdf5; }
    .ttl-claim.is-picked { box-shadow: 0 0 0 3px rgba(15,23,42,0.15); }
    .ttl-fix { font-size: 12.5px; font-weight: 700; color: #047857; margin-top: 5px; }
    .ttl-verdict { text-align: center; font-size: 14px; font-weight: 800; margin-bottom: 12px; }
    .ttl-verdict.is-hit { color: #059669; }
    .ttl-verdict.is-miss { color: #b91c1c; }
    @media (max-width: 639px) {
      .cx-tile { font-size: 11px; padding: 12px 3px; min-height: 58px; }
      .cx-tile span.is-long { font-size: 9.5px; }
      .cx-grid { gap: 6px; }
    }
    @media (prefers-reduced-motion: reduce) {
      .cx-banner, .cx-tile, .ttl-claim, .cx-hint-chip { animation-duration: 0.01ms !important; }
    }
    /* ===== GAMES HUB ===== */
    .gh-grid { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 14px; max-width: 760px; margin: 0 auto; }
    .gh-tile { position: relative; display: flex; flex-direction: column; gap: 6px; text-align: left; background: white; border: 1px solid #e2e8f0; border-left: 4px solid var(--gh-accent, #38bdf8); border-radius: 16px; padding: 18px 18px 16px; box-shadow: 0 2px 12px rgba(0,0,0,0.04); transition: transform 180ms cubic-bezier(0.23,1,0.32,1), box-shadow 180ms ease, border-color 180ms ease; animation: hlIn 240ms cubic-bezier(0.23,1,0.32,1) both; }
    .gh-grid .gh-tile:nth-child(2) { animation-delay: 40ms; }
    .gh-grid .gh-tile:nth-child(3) { animation-delay: 80ms; }
    .gh-grid .gh-tile:nth-child(4) { animation-delay: 120ms; }
    .gh-grid .gh-tile:nth-child(5) { animation-delay: 160ms; }
    @media (hover: hover) and (pointer: fine) { .gh-tile:hover { transform: translateY(-3px); box-shadow: 0 10px 28px rgba(0,0,0,0.08); border-color: #cbd5e1; border-left-color: var(--gh-accent, #38bdf8); } }
    .gh-tile:active { transform: scale(0.97); }
    .gh-emoji { font-size: 26px; line-height: 1; }
    .gh-name { font-size: 17px; font-weight: 800; letter-spacing: -0.02em; color: #0f172a; }
    .gh-desc { font-size: 13px; color: #64748b; font-weight: 500; line-height: 1.4; }
    .gh-row { display: flex; align-items: center; justify-content: space-between; gap: 8px; margin-top: 4px; }
    .gh-tag { font-size: 10px; font-weight: 800; letter-spacing: 0.07em; text-transform: uppercase; border-radius: 999px; padding: 3px 9px; }
    .gh-tag.is-daily { background: #ecfdf5; color: #047857; }
    .gh-tag.is-arcade { background: #eff6ff; color: #1d4ed8; }
    .gh-stat { font-size: 12px; font-weight: 700; color: #94a3b8; }
    .gh-stat.is-done { color: #047857; }
    .games-back { display: inline-block; font-size: 12.5px; font-weight: 700; color: #64748b; margin-bottom: 10px; transition: color 150ms ease; }
    @media (hover: hover) and (pointer: fine) { .games-back:hover { color: #0f172a; } }
    @media (max-width: 639px) { .gh-grid { grid-template-columns: 1fr; } }
    @media (prefers-reduced-motion: reduce) { .gh-tile { animation-duration: 0.01ms !important; } }
    .hl-stage { max-width: 760px; margin: 0 auto; }
    .hl-mode-bar { display: flex; gap: 8px; justify-content: center; margin-bottom: 18px; flex-wrap: wrap; }
    .hl-mode-pill { padding: 7px 16px; border-radius: 999px; font-size: 12px; font-weight: 700; border: 1px solid #e5e7eb; background: #fff; color: #6b7280; cursor: pointer; transition: background-color 150ms ease, color 150ms ease, border-color 150ms ease; }
    .hl-mode-pill.is-active { background: #0f172a; color: #fff; border-color: #0f172a; }
    @media (hover: hover) and (pointer: fine) { .hl-mode-pill:not(.is-active):hover { color: #0f172a; border-color: #cbd5e1; } }
    .hl-mode-pill:active { transform: scale(0.96); }
    .hl-hud { display: flex; justify-content: center; gap: 26px; margin-bottom: 14px; font-size: 12px; color: #64748b; font-weight: 600; }
    .hl-hud b { color: #0f172a; font-size: 16px; }
    .hl-q { text-align: center; font-size: 19px; font-weight: 800; color: #0f172a; letter-spacing: -0.02em; margin: 6px 0 18px; min-height: 28px; }
    .hl-cards { display: flex; gap: 14px; align-items: stretch; justify-content: center; }
    .hl-card { flex: 1; max-width: 330px; background: white; border: 1px solid #e2e8f0; border-radius: 18px; padding: 26px 18px 22px; display: flex; flex-direction: column; align-items: center; gap: 10px; cursor: pointer; position: relative; box-shadow: 0 2px 12px rgba(0,0,0,0.04); transition: transform 180ms cubic-bezier(0.23,1,0.32,1), box-shadow 180ms ease, border-color 180ms ease; animation: hlIn 240ms cubic-bezier(0.23,1,0.32,1) both; }
    .hl-cards .hl-card:nth-child(3) { animation-delay: 60ms; }
    @media (hover: hover) and (pointer: fine) { .hl-card.is-live:hover { transform: translateY(-3px); box-shadow: 0 10px 28px rgba(0,0,0,0.08); border-color: #cbd5e1; } }
    .hl-card.is-live:active { transform: scale(0.97); }
    .hl-card img { width: 74px; height: 74px; object-fit: contain; }
    .hl-name { font-size: 16px; font-weight: 800; color: #0f172a; text-align: center; letter-spacing: -0.01em; line-height: 1.2; }
    .hl-conf { font-size: 11px; color: #94a3b8; font-weight: 600; }
    .hl-val { font-size: 24px; font-weight: 800; letter-spacing: -0.02em; color: #0f172a; opacity: 0; transform: translateY(6px); transition: opacity 200ms ease-out, transform 200ms cubic-bezier(0.23,1,0.32,1); min-height: 30px; }
    .hl-card.is-revealed .hl-val { opacity: 1; transform: none; }
    .hl-card.is-correct { border-color: #10b981; box-shadow: 0 0 0 3px rgba(16,185,129,0.18), 0 10px 28px rgba(16,185,129,0.12); }
    .hl-card.is-wrong { border-color: #f43f5e; box-shadow: 0 0 0 3px rgba(244,63,94,0.15); }
    .hl-vs { align-self: center; font-size: 12px; font-weight: 800; color: #94a3b8; padding: 0 2px; }
    .hl-over { text-align: center; padding: 30px 20px; animation: hlIn 240ms cubic-bezier(0.23,1,0.32,1) both; }
    .hl-over-num { font-size: 64px; font-weight: 800; letter-spacing: -0.04em; color: #0f172a; line-height: 1; }
    .hl-over-sub { font-size: 13px; color: #64748b; margin: 6px 0 14px; }
    .hl-btn { display: inline-flex; align-items: center; gap: 6px; padding: 12px 22px; border-radius: 10px; background: #0f172a; color: #fff; font-size: 13px; font-weight: 700; cursor: pointer; border: none; transition: background-color 150ms ease, transform 140ms cubic-bezier(0.23,1,0.32,1); }
    .hl-btn:active { transform: scale(0.97); }
    @media (hover: hover) and (pointer: fine) { .hl-btn:hover { background: #1e293b; } }
    .hl-btn.is-ghost { background: #fff; color: #0f172a; border: 1px solid #e2e8f0; }
    @media (hover: hover) and (pointer: fine) { .hl-btn.is-ghost:hover { background: #f8fafc; } }
    .hl-start { text-align: center; padding: 26px 0 8px; }
    .hl-best-note { font-size: 12px; color: #94a3b8; margin-top: 12px; }
    .hl-best-note b { color: #0f172a; }
    @keyframes hlIn { from { opacity: 0; transform: scale(0.96) translateY(8px); } to { opacity: 1; transform: none; } }
    @media (max-width: 639px) { .hl-cards { flex-direction: column; align-items: stretch; } .hl-card { max-width: none; } .hl-vs { padding: 2px 0; } }
    @media (prefers-reduced-motion: reduce) {
      .hl-card, .hl-over { animation-duration: 0.01ms !important; animation-delay: 0ms !important; }
      .hl-card.is-live:active, .hl-btn:active, .hl-mode-pill:active { transform: none; }
    }

    /* ── Hardest Places to Play (Fortress / Decibel Map) — DEV ─────────────── */
    .fortress-dot { cursor: pointer; transition: transform .15s cubic-bezier(0.23,1,0.32,1), opacity .15s ease; transform-box: fill-box; transform-origin: center; }
    .fortress-dot.is-hot { transform: scale(1.25); }
    .fortress-dot-glow { pointer-events: none; }
    .fortress-dot-ring {
      pointer-events: none; fill: none;
      animation: map-pulse 2.4s ease-out infinite;
    }
    @media (prefers-reduced-motion: reduce) {
      .fortress-dot-ring { animation: none; opacity: 0; }
    }
    .fortress-tip-rank { font-size: 11px; font-weight: 800; color: #dc2626; letter-spacing: .02em; }
    .fortress-tip-split { color: #374151; font-size: 11px; margin-top: 4px; display: flex; gap: 12px; }
    .fortress-tip-split b { color: #09090b; font-weight: 700; }
    .fortress-tip-note { color: #6b7280; font-size: 11px; font-style: italic; margin-top: 5px; max-width: 232px; white-space: normal; line-height: 1.35; }
    .fortress-row-note { font-size: 11px; color: #9ca3af; font-style: italic; margin-top: 2px; max-width: 460px; }
    .fortress-board { display: flex; flex-direction: column; gap: 8px; }
    .fortress-row {
      display: grid; grid-template-columns: 42px 30px 1fr auto; align-items: center;
      gap: 12px; padding: 11px 16px; background: #fff; border: 1px solid #e5e7eb;
      border-radius: 13px; transition: transform .2s cubic-bezier(0.23,1,0.32,1),
        box-shadow .2s cubic-bezier(0.23,1,0.32,1), border-color .2s ease;
    cursor: pointer; }
    @media (hover: hover) and (pointer: fine) {
      .fortress-row:hover { transform: translateY(-2px); box-shadow: 0 12px 26px -16px rgba(220,38,38,0.45); border-color: #fecaca; }
    }
    .fortress-row:active { transform: scale(.992); }
    @media (max-width: 639px) {
      .fortress-row { grid-template-columns: 30px 26px 1fr auto; gap: 8px; padding: 11px 12px; }
    }
    .fortress-rank { font-size: 17px; font-weight: 800; color: #94a3b8; text-align: center; font-variant-numeric: tabular-nums; }
    .fortress-row.is-top .fortress-rank { color: #dc2626; }
    .fortress-logo { width: 30px; height: 30px; object-fit: contain; }
    .fortress-name { font-weight: 700; color: #0f172a; font-size: 14px; line-height: 1.15; }
    .fortress-arena { font-size: 11.5px; color: #6b7280; margin-top: 1px; }
    .fortress-hca { text-align: right; }
    .fortress-hca-val { font-size: 16px; font-weight: 800; color: #dc2626; font-variant-numeric: tabular-nums; }
    .fortress-hca-lbl { font-size: 9.5px; color: #9ca3af; text-transform: uppercase; letter-spacing: .05em; font-weight: 700; }
    .fortress-hca-split { font-size: 11px; color: #6b7280; margin-top: 1px; }
    .fortress-legend { display: flex; align-items: center; gap: 8px; justify-content: center; font-size: 12px; color: #6b7280; margin-top: 2px; flex-wrap: wrap; }
    .fortress-legend .dot { display: inline-block; width: 10px; height: 10px; border-radius: 999px; }

    /* Expanded game detail panel */
    .slate-detail {
      position: fixed; top: 0; left: 0; right: 0; bottom: 0; z-index: 100;
      display: flex; align-items: center; justify-content: center;
      background: rgba(0,0,0,0.4); backdrop-filter: blur(4px);
      opacity: 0; pointer-events: none; transition: opacity 200ms cubic-bezier(0.23,1,0.32,1);
    }
    .slate-detail.open { opacity: 1; pointer-events: auto; }
    .slate-detail-card {
      background: white; border-radius: ; padding: 28px 32px;
      max-width: 400px; width: 90%; box-shadow: 0 24px 60px rgba(0,0,0,0.2);
      /* Emil: modals stay centered, never animate from scale(0), use blur to mask imperfect transitions */
      transform: scale(0.96) translateY(8px); filter: blur(4px);
      transition: transform 260ms cubic-bezier(0.23,1,0.32,1), filter 260ms cubic-bezier(0.23,1,0.32,1);
    }
    .slate-detail.open .slate-detail-card { transform: scale(1) translateY(0); filter: blur(0); }
    .slate-detail-teams { display: flex; align-items: center; gap: 12px; justify-content: center; margin-bottom: 16px; }
    .slate-detail-teams img { width: 48px; height: 48px; object-fit: contain; }
    .slate-detail-vs { font-size: 13px; color: #9ca3af; font-weight: 700; }
    .slate-detail-name { font-size: 16px; font-weight: 700; color: #09090b; text-align: center; }
    .slate-detail-rank { font-size: 11px; color: #9ca3af; }
    .slate-detail-meta { display: flex; flex-direction: column; gap: 8px; margin-top: 16px; padding-top: 16px; border-top: 1px solid #f3f4f6; }
    .slate-detail-row { display: flex; align-items: center; gap: 8px; font-size: 13px; color: #6b7280; }
    .slate-detail-row svg { width: 16px; height: 16px; flex-shrink: 0; color: #9ca3af; }
    .slate-stream-badge {
      display: inline-flex; align-items: center; gap: 4px;
      padding: 3px 10px; border-radius: 8px; font-size: 11px; font-weight: 600;
      background: rgba(239,68,68,0.08); color: #dc2626;
    }

    /* Slate game cards below map */
    /* Game of the Day hero */
    .slate-gotd {
      position: relative; border-radius: 16px; overflow: hidden;
      background: linear-gradient(135deg, #0f172a 0%, #1e293b 100%);
      padding: 32px 36px; cursor: pointer;
      transition: transform 0.2s, box-shadow 0.2s;
    }
    @media (hover: hover) and (pointer: fine) { .slate-gotd:hover { transform: translateY(-3px); box-shadow: 0 12px 40px rgba(0,0,0,0.18); } }
    .slate-gotd:active { transform: scale(0.99); }
    .slate-gotd-label {
      display: inline-flex; align-items: center; gap: 6px;
      padding: 4px 12px; border-radius: 8px; font-size: 10px; font-weight: 700;
      letter-spacing: 0.08em; text-transform: uppercase;
      background: rgba(249,115,22,0.15); color: #fb923c; margin-bottom: 20px;
    }
    .slate-gotd-teams {
      display: flex; align-items: center; justify-content: center; gap: 24px;
      flex-wrap: wrap;
    }
    .slate-gotd-team {
      display: flex; flex-direction: column; align-items: center; gap: 8px; min-width: 120px;
    }
    .slate-gotd-team img { width: 64px; height: 64px; object-fit: contain; filter: drop-shadow(0 4px 8px rgba(0,0,0,0.3)); }
    .slate-gotd-team .gotd-name { font-size: 18px; font-weight: 700; color: #fff; }
    .slate-gotd-team .gotd-rank { font-size: 12px; font-weight: 600; color: #fb923c; }
    .slate-gotd-vs { font-size: 14px; font-weight: 800; color: #475569; letter-spacing: 0.1em; text-transform: uppercase; }
    .slate-gotd-meta {
      display: flex; align-items: center; justify-content: center; gap: 16px;
      margin-top: 20px; flex-wrap: wrap;
    }
    .slate-gotd-meta span {
      display: inline-flex; align-items: center; gap: 5px;
      font-size: 12px; color: #94a3b8;
    }
    .slate-gotd-meta .gotd-stream {
      padding: 3px 10px; border-radius: 6px;
      background: rgba(239,68,68,0.12); color: #f87171; font-weight: 600;
    }
    .slate-gotd-score {
      text-align: center; margin-top: 16px;
      font-size: 28px; font-weight: 800; color: #fff; letter-spacing: -0.02em;
    }
    .slate-gotd-score small { font-size: 11px; font-weight: 500; color: #64748b; display: block; margin-top: 2px; letter-spacing: 0.1em; }

    .slate-game-card {
      border-radius: 12px; border: 1px solid #e5e7eb; background: white;
      padding: 14px 16px; transition: transform 0.15s, box-shadow 0.15s; cursor: pointer;
    }
    @media (hover: hover) and (pointer: fine) { .slate-game-card:hover { transform: translateY(-2px); box-shadow: 0 6px 20px rgba(0,0,0,0.06); } }
    .slate-game-card:active { transform: scale(0.98); }
    .slate-time-badge {
      display: inline-flex; align-items: center; gap: 4px;
      padding: 2px 8px; border-radius: 6px; font-size: 10px; font-weight: 600;
      background: #f3f4f6; color: #6b7280;
    }
    .slate-card-stream {
      display: inline-flex; align-items: center; gap: 4px;
      padding: 2px 8px; border-radius: 6px; font-size: 10px; font-weight: 600;
      background: rgba(239,68,68,0.08); color: #dc2626;
    }

    /* ====== Conference Standings ====== */
    /* Standings masonry: JS distributes cards into explicit flex columns (shortest-first by
       estimated height) so short conferences pack up with no gap — and because the columns
       are real flex children (not CSS-multicol fragments), the cards can animate transforms
       freely. Each card's reveal delay is baked from its row index within the column. */
    .standings-masonry { display: flex; gap: 1.5rem; align-items: flex-start; }
    .standings-col { flex: 1 1 0; min-width: 0; display: flex; flex-direction: column; gap: 1.5rem; }
    @media (max-width: 1023px) { .standings-masonry { flex-direction: column; } }
    .standings-card {
      border-radius: 16px; border: 1px solid #e5e7eb; background: white;
      overflow: hidden; transition: box-shadow 0.2s ease;
    }
    @media (hover: hover) and (pointer: fine) {
      .standings-card:hover { box-shadow: 0 8px 24px rgba(0,0,0,0.06); }
    }
    /* Base rule is overflow:hidden (rounded corners). On mobile the 6-col table can
       exceed the card width, so relax overflow-x to scroll here — must come AFTER the
       base rule to win on source order (equal specificity). */
    @media (max-width: 639px) {
      .standings-card { overflow-x: auto; -webkit-overflow-scrolling: touch; }
    }
    .standings-card-header {
      padding: 16px 20px; display: flex; align-items: center; justify-content: space-between;
      border-bottom: 1px solid #f3f4f6; background: #fafafa;
    }
    .standings-card-header h3 { font-size: 15px; font-weight: 700; color: #09090b; }
    .standings-card-header span { font-size: 11px; color: #9ca3af; font-weight: 500; }
    .standings-card-title { display: flex; align-items: center; gap: 10px; min-width: 0; }
    .conf-logo-hdr { height: 26px; width: 26px; object-fit: contain; flex-shrink: 0; }
    .conf-logo-row { height: 22px; width: 22px; object-fit: contain; flex-shrink: 0; }

    /* ==================== PRESEASON TOURNAMENTS ==================== */
    /* Tournament selector chips */
    .ps-tabs { display: flex; gap: 8px; flex-wrap: wrap; margin-bottom: 22px; }
    .ps-tab { display: inline-flex; align-items: center; gap: 7px; padding: 9px 15px; border-radius: 999px; border: 1px solid #e2e8f0;
      background: #fff; color: #475569; font-size: 13px; font-weight: 700; cursor: pointer;
      transition: transform 150ms cubic-bezier(0.23,1,0.32,1), border-color 150ms ease, color 150ms ease, box-shadow 150ms ease; }
    .ps-tab .ps-tab-emoji { font-size: 15px; }
    .ps-tab:active { transform: scale(0.97); }
    @media (hover: hover) and (pointer: fine) { .ps-tab:hover { border-color: #cbd5e1; color: #0f172a; } }
    .ps-tab.is-active { background: #0f172a; color: #fff; border-color: #0f172a; box-shadow: 0 6px 16px rgba(15,23,42,0.18); }
    .ps-tab.is-active .ps-tab-dot { background: var(--ps-accent, #38bdf8); }
    .ps-tab-dot { width: 7px; height: 7px; border-radius: 50%; background: #cbd5e1; flex-shrink: 0; }

    /* Themed event hero — scoped per tournament (cohesion: same component, themed gradient/accent) */
    .ps-hero { position: relative; border-radius: 22px; overflow: hidden; padding: 38px 30px; margin-bottom: 26px; color: #fff; isolation: isolate; }
    .ps-hero-bg { position: absolute; inset: 0; z-index: -1; background: linear-gradient(150deg, #0f172a 0%, #1e293b 70%); }
    .ps-hero-bg::after { content: ''; position: absolute; inset: 0; opacity: 0.5;
      background: radial-gradient(120% 80% at 85% 0%, color-mix(in srgb, var(--ps-accent) 55%, transparent) 0%, transparent 60%); }
    .ps-loc-badge { display: inline-flex; align-items: center; gap: 7px; padding: 5px 12px; border-radius: 999px;
      background: rgba(255,255,255,0.14); border: 1px solid rgba(255,255,255,0.22); font-size: 12px; font-weight: 700; letter-spacing: 0.01em; backdrop-filter: blur(4px); }
    .ps-hero-name { font-size: clamp(1.8rem, 1.1rem + 3vw, 3rem); font-weight: 900; letter-spacing: -0.03em; line-height: 1.04; margin-top: 14px; }
    .ps-hero-sub { font-size: 15px; color: rgba(255,255,255,0.86); font-weight: 600; margin-top: 6px; }
    .ps-hero-format { display: inline-block; margin-top: 12px; font-size: 11px; font-weight: 800; text-transform: uppercase; letter-spacing: 0.08em;
      color: #fff; background: var(--ps-accent, #38bdf8); padding: 4px 11px; border-radius: 6px; }
    .ps-hero-inner { position: relative; z-index: 1; }
    /* Themed landmark/skyline silhouette, bottom-right of the hero (inline SVG; hero overflow clips it) */
    .ps-hero-art { position: absolute; right: 8px; bottom: 0; width: min(76%, 700px); height: 90%; z-index: 0; pointer-events: none; }
    .ps-hero-art svg { width: 100%; height: 100%; display: block; }
    .ps-art-trop, .ps-art-city { color: var(--ps-accent, #38bdf8); }
    .ps-art-trop svg, .ps-art-city svg { opacity: 0.5; }
    .ps-art-vegas svg { opacity: 0.95; filter: drop-shadow(0 0 18px rgba(245, 197, 66, 0.32)); }
    /* Real gold Las Vegas skyline PNG (self-hosted) — shown directly (already gold), bottom-right + glow.
       The 335×137 source renders ~2× upscaled here, which smears edges — so it runs through the
       #ps-sharpen unsharp kernel (inline SVG, emitted with the vegas hero art) + a small
       contrast/saturation lift to restore definition (boss 2026-06-09: "unblur and sharpen"). */
    .ps-vegas-photo { width: 100%; height: 100%; object-fit: contain; object-position: right bottom;
      display: block; filter: url(#ps-sharpen) saturate(1.07) contrast(1.06) drop-shadow(0 0 16px rgba(245, 197, 66, 0.3)); }
    /* ESPN Events Invitational badge (Wikipedia trademark PNG, self-hosted) — self-contained dark badge,
       shown directly on the plum→teal hero, right side + vertically centered. NOTE: trademark logo —
       confirm license for production, or swap a cleared asset at the same path (bump ?v= to bust cache). */
    .ps-espn-photo { width: 100%; height: 100%; object-fit: contain; object-position: calc(100% - 120px) center;
      display: block; transform: scale(0.82); transform-origin: center center;
      filter: drop-shadow(0 0 18px rgba(214, 58, 58, 0.4)) drop-shadow(0 4px 10px rgba(0, 0, 0, 0.35)); }
    /* Florida flair behind the ESPN badge — palms (gold, swaying) + a low sunset glow + sparkles. */
    .ps-fl-layer { position: absolute; inset: 0; z-index: 0; pointer-events: none; overflow: hidden; }
    .ps-fl-palm { position: absolute; bottom: -8%; color: #eef1f5; line-height: 0;
      filter: drop-shadow(0 0 9px rgba(226,3,44,0.45)); will-change: transform; }
    .ps-fl-palm svg { width: 100%; height: auto; display: block; fill: currentColor; overflow: visible; }
    .ps-fl-palm .ps-fl-trunk { fill: none; }
    .ps-fl-palm.flip svg { transform: scaleX(-1); }
    .ps-fl-palm.p1 { right: 31%; width: 110px; }              /* inner-left  — just left of badge  */
    .ps-fl-palm.p2 { right: 40%; width: 78px; opacity: 0.9; } /* outer-left  */
    .ps-fl-palm.p3 { right: 8%;  width: 110px; }              /* inner-right — just right of badge */
    .ps-fl-palm.p4 { right: 1%;  width: 78px; opacity: 0.9; } /* outer-right */
    .ps-fl-fronds { transform-box: fill-box; transform-origin: 50% 100%;
      animation: ps-fl-sway 5.6s ease-in-out infinite; will-change: transform; }
    .ps-fl-palm.p2 .ps-fl-fronds { animation-duration: 6.4s; animation-delay: -1.2s; }
    .ps-fl-palm.p3 .ps-fl-fronds { animation-duration: 5s;   animation-delay: -0.6s; }
    @keyframes ps-fl-sway { 0%, 100% { transform: rotate(-2.4deg); } 50% { transform: rotate(2.4deg); } }
    @media (prefers-reduced-motion: reduce) { .ps-fl-fronds { animation: none; } }
    @media (max-width: 680px) { .ps-fl-layer { display: none; } }
    /* Players Era Festival logo — sits to the RIGHT of the Championship column on the two PE brackets */
    .ps-bracket .ps-round { flex: 0 0 auto; }  /* matchup columns hold their size … */
    .ps-bracket-logo { flex: 0 1 auto; min-width: 0; display: flex; align-items: center; justify-content: center; padding: 0 8px 0 16px; }  /* … so the logo column shrinks to fit the leftover space (16-team bracket is wider) */
    .ps-bracket-logo img { width: 210px; max-width: 100%; height: auto; opacity: 0.95;
      filter: drop-shadow(0 0 14px rgba(245,197,66,0.32)); }
    /* Gold glint — a highlight that sweeps across the skyline, clipped to its shape via the PNG mask.
       Compositor-only (translateX of the inner glint inside a fixed masked box). */
    .ps-vegas-shine { position: absolute; inset: 0; pointer-events: none; overflow: hidden;
      -webkit-mask: url('assets/vegas-skyline.png?v=gold') right bottom / contain no-repeat;
      mask: url('assets/vegas-skyline.png?v=gold') right bottom / contain no-repeat; }
    .ps-vegas-glint { position: absolute; top: 0; bottom: 0; left: -55%; width: 55%;
      background: linear-gradient(100deg, transparent 0%, rgba(255,251,235,0) 38%, rgba(255,252,240,0.7) 50%, rgba(255,251,235,0) 62%, transparent 100%);
      mix-blend-mode: screen; transform: translateX(0); will-change: transform;
      animation: ps-vegas-glint 5.5s cubic-bezier(0.45, 0, 0.55, 1) infinite; }
    @keyframes ps-vegas-glint { 0%, 12% { transform: translateX(0); } 58%, 100% { transform: translateX(360%); } }
    /* Maui silhouette PNG, recolored to a warm tropical gold via CSS mask + glow */
    .ps-maui-photo { position: relative; z-index: 1; width: 100%; height: 100%;
      background: linear-gradient(180deg, #ffeec2 0%, #efc874 52%, #cf9a44 100%);
      -webkit-mask: url('assets/maui-skyline.png') right bottom / contain no-repeat;
      mask: url('assets/maui-skyline.png') right bottom / contain no-repeat;
      filter: drop-shadow(0 0 14px rgba(239,200,116,0.32));
      /* pushed down so the silhouette base bleeds past the hero's bottom edge (no gap below) */
      transform: translateY(4%); transform-origin: right bottom; }
    /* Charleston vector skyline (steeples + Ravenel bridge), recolored to a warm cream-gold via CSS
       mask so the historic profile glows on the dusk-harbor hero. */
    .ps-charleston-photo { position: relative; z-index: 1; width: 100%; height: 100%;
      background: linear-gradient(180deg, #ffe9c2 0%, #e6c98f 52%, #c79a55 100%);
      /* ?v=3 — mask PNG alpha-sharpened with LOCAL UnsharpMask ONLY (pre-sharpen original at
         checkpoints/charleston-skyline-pre-sharpen-2026-06-09.png). CSS filters can't crisp a
         mask (filter runs before mask), so sharpening lives in the asset. DO NOT use a global
         alpha-ramp steepen here — the base of this PNG carries an intentional soft fade (the
         bleed past the hero's bottom edge) and a global curve resurrects it as a hard mound. */
      -webkit-mask: url('assets/charleston-skyline.png?v=3') right bottom / contain no-repeat;
      mask: url('assets/charleston-skyline.png?v=3') right bottom / contain no-repeat;
      filter: drop-shadow(0 0 13px rgba(230,201,143,0.32));
      /* tad smaller + pushed down so the skyline base bleeds past the hero's bottom edge (no gap below) */
      transform: translateY(15%) scale(0.92); transform-origin: right bottom; }
    /* Kansas City vector skyline, recolored to a warm cream-gold via CSS mask for the plum-dusk hero. */
    .ps-kc-photo { position: relative; z-index: 1; width: 100%; height: 100%;
      background: linear-gradient(180deg, #ffe3b0 0%, #e6b15f 52%, #c8842f 100%);
      -webkit-mask: url('assets/kc-skyline.png?v=1') right bottom / contain no-repeat;
      mask: url('assets/kc-skyline.png?v=1') right bottom / contain no-repeat;
      filter: drop-shadow(0 0 13px rgba(230,177,95,0.32));
      transform: translateY(13%) scale(0.93); transform-origin: right bottom; }
    /* Glowing sun behind the skyline — gently pulses on the horizon */
    .ps-maui-sun { position: absolute; right: 33%; bottom: -22px; width: 150px; height: 150px; border-radius: 50%; z-index: 0; pointer-events: none;
      background: radial-gradient(circle, #fff6d8 0%, #ffd56a 32%, #f7a93a 60%, rgba(247,169,58,0) 72%);
      animation: ps-sun-pulse 5s ease-in-out infinite; will-change: transform, opacity; }
    @keyframes ps-sun-pulse { 0%, 100% { transform: scale(1); opacity: 0.9; } 50% { transform: scale(1.06); opacity: 1; } }
    /* Flying seagulls — outer span glides across (translateX), inner svg flaps (scaleY) */
    .ps-gulls { position: absolute; inset: 0; z-index: 2; pointer-events: none; overflow: hidden; }
    .ps-gull { position: absolute; left: 0; animation: ps-gull-fly linear infinite; will-change: transform; }
    @keyframes ps-gull-fly { from { transform: translateX(-60px); } to { transform: translateX(780px); } }
    .ps-gull-w { display: inline-block; }
    .ps-gull-w svg { display: block; transform-origin: center; animation: ps-gull-flap 0.55s ease-in-out infinite; }
    @keyframes ps-gull-flap { 0%, 100% { transform: scaleY(1); } 50% { transform: scaleY(0.55); } }
    @media (prefers-reduced-motion: reduce) { .ps-maui-sun, .ps-gull, .ps-gull-w svg { animation: none; } }
    /* Whole skyline breathes — a tiny slow float (img + shine + sparkles move together, stay in sync) */
    .ps-art-vegas, .ps-art-maui, .ps-art-charleston, .ps-art-kc, .ps-art-espn { animation: ps-sky-float 9s ease-in-out infinite; }
    /* Kansas City flair — "City of Fountains": gold-lit water jets arc up + fan out at the skyline base */
    .ps-kc-fountains { position: absolute; inset: 0; z-index: 2; pointer-events: none; overflow: hidden; }
    .ps-fountain { position: absolute; bottom: -6%; transform-origin: bottom center; }
    .ps-fountain::before { content: ''; position: absolute; bottom: -2px; left: 50%; width: 30px; height: 6px;
      transform: translateX(-50%); border-radius: 50%;
      background: radial-gradient(ellipse, rgba(255,238,190,0.45) 0%, rgba(255,238,190,0) 72%); }
    .ps-fountain-stem { position: absolute; bottom: 0; left: 50%; width: 3px; height: var(--h, 32px);
      border-radius: 2px; transform: translateX(-50%);
      background: linear-gradient(to top, rgba(255,247,224,0.9) 0%, rgba(255,235,180,0.3) 62%, rgba(255,235,180,0) 100%);
      filter: drop-shadow(0 0 4px rgba(255,236,180,0.6)); will-change: transform, opacity;
      animation: ps-fountain-stem 1.6s ease-in-out infinite; }
    @keyframes ps-fountain-stem { 0%, 100% { transform: translateX(-50%) scaleY(0.82); opacity: 0.6; }
      50% { transform: translateX(-50%) scaleY(1.12); opacity: 0.95; } }
    .ps-jet { position: absolute; bottom: 0; left: 0; width: 5px; height: 5px; border-radius: 50%;
      background: radial-gradient(circle, #ffffff 0%, #ffe9b8 50%, rgba(255,233,184,0) 76%);
      filter: drop-shadow(0 0 3px rgba(255,240,200,0.7)); opacity: 0; will-change: transform, opacity;
      animation: ps-fountain-arc 1.6s ease-out infinite; }
    @keyframes ps-fountain-arc {
      0%   { transform: translate(0, 0) scale(0.5); opacity: 0; }
      14%  { opacity: 0.95; }
      50%  { transform: translate(var(--dx), calc(var(--peak) * -1)) scale(0.9); opacity: 0.9; }
      100% { transform: translate(calc(var(--dx) * 2), 0) scale(0.3); opacity: 0; } }
    @media (prefers-reduced-motion: reduce) { .ps-jet { animation: none; opacity: 0.55;
      transform: translate(var(--dx), calc(var(--peak) * -0.5)) scale(0.7); } .ps-fountain-stem { animation: none; } }
    @keyframes ps-sky-float { 0%, 100% { transform: translateY(0); } 50% { transform: translateY(-4px); } }
    /* Twinkling sparkles scattered over the skyline */
    .ps-sparkles { position: absolute; inset: 0; pointer-events: none; z-index: 1; }
    .ps-spark { position: absolute; opacity: 0;
      background: radial-gradient(circle, #fff 0%, #ffe9a8 38%, rgba(255,233,168,0) 70%);
      clip-path: polygon(50% 0, 58% 42%, 100% 50%, 58% 58%, 50% 100%, 42% 58%, 0 50%, 42% 42%);
      animation: ps-spark-twinkle 3.2s ease-in-out infinite; will-change: transform, opacity; }
    @keyframes ps-spark-twinkle { 0%, 100% { opacity: 0; transform: scale(0.3) rotate(0deg); } 50% { opacity: 1; transform: scale(1) rotate(45deg); } }
    /* Players Era / Vegas skyline: soften the stars a touch so they read as twinkle, not pixels. */
    .ps-art-vegas .ps-spark { filter: blur(0.7px); }
    @media (prefers-reduced-motion: reduce) { .ps-vegas-glint, .ps-art-vegas, .ps-art-maui, .ps-art-charleston, .ps-art-kc, .ps-art-espn, .ps-spark { animation: none; } .ps-vegas-glint { opacity: 0; } .ps-spark { opacity: 0.5; } }
    @media (max-width: 680px) { .ps-hero-art { display: none; } }
    /* Themes — gradient on the hero bg + the --ps-accent that flows to chips/format/bracket */
    .ps-theme-vegas   .ps-hero-bg { background: linear-gradient(150deg, #1a0b2e 0%, #0b0b14 55%, #2d0b1f 100%); }
    .ps-theme-maui    .ps-hero-bg { background: linear-gradient(150deg, #0d7d6e 0%, #0e4f5c 55%, #b3471f 120%); }
    .ps-theme-atlantis .ps-hero-bg { background: linear-gradient(150deg, #035c73 0%, #062f44 60%, #0a7d8c 120%); }
    .ps-theme-nyc     .ps-hero-bg { background: linear-gradient(150deg, #111827 0%, #1f2937 60%, #312011 120%); }
    .ps-theme-beach   .ps-hero-bg { background: linear-gradient(150deg, #0369a1 0%, #075985 50%, #b45309 130%); }
    .ps-theme-orlando .ps-hero-bg { background: linear-gradient(150deg, #2b2e34 0%, #131418 55%, #9e0022 125%); }  /* ESPN — charcoal/black into ESPN red */
    .ps-theme-charleston .ps-hero-bg { background: linear-gradient(150deg, #1e3a5f 0%, #16324d 55%, #b5895a 125%); }
    .ps-theme-kc .ps-hero-bg { background: linear-gradient(150deg, #2a1a3e 0%, #3d2350 55%, #c2591f 125%); }

    /* Bracket */
    .ps-bracket { display: flex; gap: 20px; overflow-x: auto; padding-bottom: 8px; align-items: stretch; }
    .ps-round { display: flex; flex-direction: column; min-width: 224px; }
    /* Label pinned to the top; games centered + spread in the remaining height. Because every round
       column stretches to the same height (.ps-bracket align-items: stretch), space-around lines each
       later-round matchup up at the midpoint of its two feeders — a proper, centered bracket. */
    .ps-round-label { font-size: 11px; font-weight: 800; text-transform: uppercase; letter-spacing: 0.09em; color: #94a3b8; margin-bottom: 14px; flex: 0 0 auto; text-align: center; }
    .ps-round-games { flex: 1 1 auto; display: flex; flex-direction: column; justify-content: space-around; gap: 14px; }
    /* Emil-style appearance: fade + rise + scale-in, ease-out, staggered. Runs each time the bracket
       renders (event switch / page show). */
    @keyframes ps-bracket-in { from { opacity: 0; transform: translateY(12px) scale(0.97); } to { opacity: 1; transform: none; } }
    .ps-bracket .ps-round-label, .ps-bracket .ps-matchup { animation: ps-bracket-in 0.42s cubic-bezier(0.23, 1, 0.32, 1) both; }
    .ps-bracket .ps-round-games .ps-matchup:nth-child(1) { animation-delay: 0.06s; }
    .ps-bracket .ps-round-games .ps-matchup:nth-child(2) { animation-delay: 0.12s; }
    .ps-bracket .ps-round-games .ps-matchup:nth-child(3) { animation-delay: 0.18s; }
    .ps-bracket .ps-round-games .ps-matchup:nth-child(4) { animation-delay: 0.24s; }
    @media (prefers-reduced-motion: reduce) { .ps-bracket .ps-round-label, .ps-bracket .ps-matchup { animation: none; } }
    .ps-matchup { border: 1px solid #e5e7eb; border-radius: 12px; overflow: hidden; background: #fff; }
    .ps-team { display: flex; align-items: center; gap: 8px; padding: 9px 12px; cursor: pointer; transition: background 150ms ease, transform 160ms cubic-bezier(0.23,1,0.32,1); }
    .ps-team + .ps-team { border-top: 1px solid #f1f5f9; }
    @media (hover: hover) and (pointer: fine) { .ps-team.is-clickable:hover { background: #f8fafc; } }
    .ps-team.is-clickable:active { transform: scale(0.97); }
    .ps-team.is-clickable:focus-visible { outline: 2px solid #38bdf8; outline-offset: -2px; }
    @media (prefers-reduced-motion: reduce) { .ps-team.is-clickable, .ps-team.is-clickable:active { transition: none; transform: none; } }
    .ps-team .ps-seed { font-size: 10px; font-weight: 800; color: #94a3b8; min-width: 16px; }
    .ps-team img { width: 22px; height: 22px; object-fit: contain; flex-shrink: 0; }
    .ps-team .ps-name { font-size: 13px; font-weight: 600; color: #0f172a; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
    .ps-team.is-tbd { cursor: default; }
    .ps-team.is-tbd .ps-name { color: #cbd5e1; font-style: italic; font-weight: 500; }
    .ps-team.is-tbd .ps-tbd-dot { width: 22px; height: 22px; border-radius: 50%; background: #f1f5f9; flex-shrink: 0; }

    /* Field grid (pool / unannounced-bracket events) */
    .ps-field-note { font-size: 13px; color: #64748b; margin-bottom: 14px; }
    .ps-field { display: grid; grid-template-columns: repeat(auto-fill, minmax(150px, 1fr)); gap: 10px; }
    .ps-field-card { display: flex; align-items: center; gap: 10px; padding: 12px 14px; border: 1px solid #e5e7eb; border-radius: 12px; background: #fff; cursor: pointer;
      transition: transform 150ms cubic-bezier(0.23,1,0.32,1), border-color 150ms ease, box-shadow 150ms ease; }
    .ps-field-card:active { transform: scale(0.98); }
    @media (hover: hover) and (pointer: fine) { .ps-field-card:hover { transform: translateY(-2px); border-color: var(--ps-accent, #cbd5e1); box-shadow: 0 8px 18px rgba(15,23,42,0.07); } }
    .ps-field-card img { width: 30px; height: 30px; object-fit: contain; flex-shrink: 0; }
    .ps-field-card .ps-fc-name { font-size: 13px; font-weight: 700; color: #0f172a; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
    .ps-field-noimg { width: 30px; height: 30px; border-radius: 50%; background: #f1f5f9; display: flex; align-items: center; justify-content: center; font-weight: 800; color: #64748b; font-size: 13px; flex-shrink: 0; }
    .ps-mock-note { margin-top: 22px; font-size: 12px; color: #94a3b8; font-style: italic; }
    @media (prefers-reduced-motion: reduce) { .ps-tab, .ps-field-card { transition: none; } }

    /* ===== Vegas-themed bracket — casino night (scoped to Vegas events only) ===== */
    .ps-ev-vegas .ps-bracket { background: linear-gradient(160deg, #190d2b 0%, #0b0712 72%);
      border: 1px solid rgba(227,173,68,0.32); border-radius: 18px; padding: 22px 20px;
      box-shadow: inset 0 0 44px rgba(227,173,68,0.06), 0 12px 30px rgba(0,0,0,0.22); }
    .ps-ev-vegas .ps-round-label { color: #f5c542; letter-spacing: 0.13em; text-shadow: 0 0 10px rgba(245,197,66,0.4); }
    /* matchup = a playing card: dark felt, gold trim + glow, corner diamond pip, poker-chip VS */
    .ps-ev-vegas .ps-matchup { position: relative; overflow: visible;
      background: linear-gradient(160deg, #271640 0%, #150c24 100%);
      border: 1.5px solid rgba(227,173,68,0.55); border-radius: 14px; box-shadow: 0 0 16px rgba(245,197,66,0.12); }
    .ps-ev-vegas .ps-matchup::after { content: 'VS'; position: absolute; top: 50%; right: 9px; transform: translateY(-50%);
      width: 26px; height: 26px; border-radius: 50%; background: radial-gradient(circle, #2c1a44 58%, #160a26 100%);
      border: 2px dashed #f5c542; color: #f5c542; font-size: 9px; font-weight: 900; letter-spacing: 0.04em;
      display: flex; align-items: center; justify-content: center; box-shadow: 0 0 10px rgba(245,197,66,0.4); pointer-events: none; }
    .ps-ev-vegas .ps-team { padding-right: 44px; }
    .ps-ev-vegas .ps-team + .ps-team { border-top: 1px dashed rgba(227,173,68,0.4); }
    .ps-ev-vegas .ps-team .ps-seed { color: #f5c542; }
    .ps-ev-vegas .ps-team .ps-name { color: #f4ecd6; }
    .ps-ev-vegas .ps-team.is-tbd .ps-name { color: rgba(244,236,214,0.4); }
    .ps-ev-vegas .ps-team.is-tbd .ps-tbd-dot { background: rgba(245,197,66,0.12); }
    @media (hover: hover) and (pointer: fine) { .ps-ev-vegas .ps-team.is-clickable:hover { background: rgba(245,197,66,0.09); } }
    /* field cards (Vegas field events) get the same casino treatment */
    .ps-ev-vegas .ps-field-card { background: linear-gradient(160deg, #271640 0%, #150c24 100%); border: 1.5px solid rgba(227,173,68,0.5); }
    .ps-ev-vegas .ps-field-card .ps-fc-name { color: #f4ecd6; }
    .ps-ev-vegas .ps-field-note { color: rgba(244,236,214,0.6); }
    .standings-table { width: 100%; border-collapse: collapse; }
    .standings-table th {
      text-align: left; font-size: 10px; text-transform: uppercase; letter-spacing: 0.05em;
      color: #9ca3af; font-weight: 600; padding: 8px 12px; border-bottom: 1px solid #f3f4f6;
    }
    .standings-table th:not(:first-child):not(:nth-child(2)) { text-align: center; }
    .standings-table td { padding: 10px 12px; font-size: 13px; border-bottom: 1px solid #f9fafb; }
    .standings-table td:not(:first-child):not(:nth-child(2)) { text-align: center; }
    .standings-table tr:last-child td { border-bottom: none; }
    .standings-table tr { transition: background 0.15s ease; }
    @media (hover: hover) and (pointer: fine) {
      .standings-table tr:hover { background: #f9fafb; }
    }
    .standings-rank { width: 32px; text-align: center; color: #9ca3af; font-size: 12px; font-weight: 500; font-variant-numeric: tabular-nums; }
    .standings-rank-top { color: #09090b; font-weight: 700; }
    /* Ken 2026-06-28: tighten the gap between the standings header (title + subtitle) and the
       filter pills to 12px — was 32px from the header block's Tailwind mb-8. Scoped via :has
       to the header div that wraps the h1 so no other mb-8 on the site is affected. */
    #page-standings .mb-8:has(> h1) { margin-bottom: 23px; }

    /* Ken 2026-06-28: standings header + panel fine-tune (values dialed in the tuner widget).
       font-size + letter-spacing scoped to >=768px so mobile keeps its text-3xl size. */
    #page-standings h1 { margin-top: 11px; }
    #page-standings .mb-8:has(> h1) > p { margin-top: 7px; }
    @media (min-width: 768px) {
      #page-standings h1 { font-size: 46px; letter-spacing: -2.3px; }
    }
    #page-standings .standings-card { border-radius: 18px; }
    #page-standings .standings-masonry, #page-standings .standings-col { gap: 18px; }

    /* Ken 2026-06-28: standings filter tabs now render as the EXACT confpow pill —
       real .hover-btn .hover-btn-sm (.hover-btn-dark active / .hover-btn-light inactive),
       wired to the JS cursor-follow glow via wireHoverGlow() in renderStandings. The old
       custom .standings-conf-tab glass/CSS-glow block was removed; no element uses it now. */
    .standings-net-col { color: #7c3aed; font-weight: 600; font-size: 12px; font-variant-numeric: tabular-nums; }
    .standings-streak-w { color: #16a34a; font-weight: 600; font-size: 12px; }
    .standings-streak-l { color: #dc2626; font-weight: 600; font-size: 12px; }

    /* ====== Cold Team Hero Cards ====== */
    @keyframes snow-drift {
      0%   { transform: translateY(-12px) translateX(0) rotate(0deg); opacity: 0; }
      12%  { opacity: 0.95; }
      88%  { opacity: 0.9; }
      100% { transform: translateY(196px) translateX(16px) rotate(240deg); opacity: 0; }
    }
    @keyframes ice-emoji-in {
      0%   { transform: scale(0.7) rotate(-15deg); opacity: 0; }
      25%  { transform: scale(1.15) rotate(0deg); opacity: 1; }
      45%  { transform: scale(1) rotate(0deg); opacity: 1; }
      70%  { transform: scale(0.7) rotate(8deg); opacity: 0.4; filter: blur(4px); }
      100% { transform: scale(0.2) rotate(12deg); opacity: 0; filter: blur(10px); }
    }
    @keyframes ice-gradient-shift {
      0%, 100% { background-position: 0% 50%; }
      50% { background-position: 100% 50%; }
    }

    .cold-hero-card {
      position: relative; border-radius: 20px; overflow: hidden;
      background: white; border: 1.5px solid #e5e7eb;
      transition: transform 0.25s ease, box-shadow 0.25s ease;
      opacity: 0;
    }
    .cold-hero-card.hero-revealed { opacity: 1; animation: card-rise 0.65s cubic-bezier(0.22, 1, 0.36, 1); }
    @media (hover: hover) and (pointer: fine) {
      .cold-hero-card:hover { transform: translateY(-4px); box-shadow: 0 12px 32px rgba(0,0,0,0.08); }
    }
    .cold-hero-card::before {
      content: ''; position: absolute; top: 0; left: 0; right: 0; height: 4px; z-index: 4;
      background: linear-gradient(90deg, #3b82f6, #06b6d4, #8b5cf6);
      background-size: 200% 100%; animation: ice-gradient-shift 3s ease infinite;
    }
    .cold-hero-card.hero-revealed::after {
      content: ''; position: absolute; inset: 0; z-index: 3; pointer-events: none;
      background: linear-gradient(105deg, transparent 30%, rgba(255,255,255,0.4) 50%, transparent 70%);
      transform: translateX(-130%); animation: card-sweep 1s cubic-bezier(0.4, 0, 0.2, 1) 0.1s;
    }
    .cold-rank-badge {
      display: inline-flex; align-items: center; justify-content: center;
      width: 28px; height: 28px; border-radius: 50%; font-weight: 800; font-size: 12px;
      background: linear-gradient(135deg, #3b82f6, #06b6d4); color: white;
      box-shadow: 0 2px 8px rgba(59,130,246,0.35);
    }
    .cold-logo-wrap {
      position: relative; width: 80px; height: 80px;
      display: flex; align-items: center; justify-content: center; flex-shrink: 0;
    }
    .cold-logo-wrap img { width: 56px; height: 56px; object-fit: contain; }
    .snowflake-wrap { position: absolute; inset: 0; pointer-events: none; z-index: 0; }
    .snowflake {
      position: absolute; line-height: 1; color: #e0f2fe;
      text-shadow: 0 0 5px rgba(147,197,253,0.85);
      animation: snow-drift 6s linear infinite;
    }
    .cold-stat-streak { background: rgba(239,68,68,0.08); color: #dc2626; }
    .cold-stat-q1 { background: rgba(59,130,246,0.08); color: #2563eb; }
    .cold-stat-net { background: rgba(168,85,247,0.08); color: #7c3aed; }
    .cold-stat-move { background: rgba(59,130,246,0.08); color: #2563eb; }

    .ice-emoji-entrance {
      position: absolute; inset: 0; z-index: 10; pointer-events: none;
      display: flex; align-items: center; justify-content: center;
    }
    .ice-emoji-entrance span {
      font-size: 120px; line-height: 1; opacity: 0;
    }
    .ice-emoji-entrance span.go {
      animation: ice-emoji-in 0.9s cubic-bezier(0.22, 1, 0.36, 1) forwards;
    }
    /* cool glow burst behind the snowflake + an expanding frost ring */
    .ice-emoji-entrance::before {
      content: ''; position: absolute; left: 50%; top: 50%; width: 180px; height: 180px;
      margin: -90px 0 0 -90px; border-radius: 50%; z-index: -1; opacity: 0;
      background: radial-gradient(circle, rgba(96,165,250,0.46) 0%, rgba(59,130,246,0.16) 45%, rgba(96,165,250,0) 72%);
    }
    .cold-hero-card.hero-revealed .ice-emoji-entrance::before { animation: glow-burst 1.05s ease-out; }
    .ice-emoji-entrance::after {
      content: ''; position: absolute; left: 50%; top: 50%; width: 96px; height: 96px;
      margin: -48px 0 0 -48px; border-radius: 50%; opacity: 0;
      border: 1.5px solid rgba(186,230,253,0.7); box-shadow: 0 0 10px rgba(147,197,253,0.45);
    }
    .cold-hero-card.hero-revealed .ice-emoji-entrance::after { animation: frost-ring 1.05s ease-out 0.05s; }
    .cold-hero-card .hero-inner { position: relative; z-index: 2; opacity: 0; }
    .cold-hero-card .hero-inner.show { opacity: 1; }
    .cold-hero-card .hero-inner.show > * {
      opacity: 0; filter: blur(10px); transform: scale(0.94);
      animation: hero-materialize 0.45s ease-out both;
    }
    .cold-hero-card .hero-inner.show > *:nth-child(1) { animation-delay: 0.12s; }
    .cold-hero-card .hero-inner.show > *:nth-child(2) { animation-delay: 0.20s; }
    .cold-hero-card .hero-inner.show > *:nth-child(3) { animation-delay: 0.28s; }
    .cold-hero-card .hero-inner.show > *:nth-child(4) { animation-delay: 0.36s; }
    .cold-hero-card .hero-inner.show > *:nth-child(5) { animation-delay: 0.44s; }

    /* Hot/Cold toggle active state */
    .hot-cold-btn { transition: background-color 200ms ease, color 200ms ease, border-color 200ms ease, transform 160ms cubic-bezier(0.23,1,0.32,1); }
    .hot-cold-btn:active { transform: scale(0.97); }

    @media (prefers-reduced-motion: reduce) {
      /* Emil: reduced motion = fewer & gentler, not zero. Keep opacity/color hover transitions
         that aid comprehension; strip transform-based motion. */
      .fx-word, .fx-char, .fx-line { animation: none !important; opacity: 1 !important; filter: none !important; transform: none !important; }
      [data-anim] { opacity: 1 !important; animation: none !important; filter: none !important; transform: none !important; }
      [data-text-fx] { opacity: 1 !important; }
      .ss-pick-in { animation: none !important; }
      .game-dot-pulse, .ember { animation: none !important; }
      /* Disable button press scale but keep color transitions */
      .btn:active, .bracket-tab:active, .bk-view-btn:active,
      .rankings-tab-pill:active, .rankings-nav-btn:active,
      .standings-conf-tab:active, .hot-cold-btn:active { transform: none !important; }

      .spark, .hot-hero-card::before, .fire-emoji-entrance span { animation: none !important; }
      .hot-hero-card { opacity: 1; }
      .hot-hero-card .hero-inner { opacity: 1; }
      .hot-hero-card .hero-inner > * { animation: none !important; opacity: 1; filter: none; transform: none; }
      .snowflake, .cold-hero-card::before, .ice-emoji-entrance span { animation: none !important; }
      .cold-hero-card { opacity: 1; }
      .cold-hero-card .hero-inner { opacity: 1; }
      .cold-hero-card .hero-inner > * { animation: none !important; opacity: 1; filter: none; transform: none; }
      /* Entrance flare (2026-06): no card-rise / light-sweep / glow burst / frost ring under reduced motion */
      .hot-hero-card.hero-revealed, .cold-hero-card.hero-revealed { animation: none !important; }
      .hot-hero-card.hero-revealed::after, .cold-hero-card.hero-revealed::after,
      .fire-emoji-entrance::before, .ice-emoji-entrance::before, .ice-emoji-entrance::after { animation: none !important; opacity: 0 !important; }
      /* Audit 2026-06-04: complete reduced-motion coverage — progress-bar width transitions,
         infinite live-pulse badges, and the active-tab scale all settle instantly. */
      .pred-bar-fill { transition: none !important; }
      .ls-badge-live::before { animation: none !important; }
      .rankings-tab-pill.tab-active { transform: none !important; }
      /* 3D carousel panel swing (transitions, not animations) settles instantly. */
      .rankings-panel { transition-duration: 0.01ms !important; }
    }

    /* Pain Index tier chips */
    .pain-tier { font-size: 10px; font-weight: 700; text-transform: uppercase; letter-spacing: 0.04em; padding: 2px 8px; border-radius: 999px; white-space: nowrap; }
    .pain-tier-tormented { background: #fee2e2; color: #b91c1c; }
    .pain-tier-cursed { background: #ffedd5; color: #c2410c; }
    .pain-tier-snakebit { background: #fef9c3; color: #a16207; }
    .pain-tier-mild { background: #f1f5f9; color: #64748b; }
    /* The "why" under each cursed row — the receipts behind the rank (boss 2026-06-09) */
    .pain-reasons { border-top: 1px dashed #f3f4f6; margin-top: 10px; padding-top: 9px; display: flex; flex-direction: column; gap: 3px; }
    .pain-note { font-size: 12px; font-style: italic; color: #6b7280; margin-bottom: 1px; }
    .pain-moment { font-size: 12px; color: #6b7280; line-height: 1.5; display: flex; gap: 8px; align-items: baseline; }
    .pain-moment .pain-yr { font-weight: 700; color: #111827; font-variant-numeric: tabular-nums; flex-shrink: 0; }
    /* Tiers-only card: big tier chip stacked above the note + heartbreak list (no numbers).
       (Layout lives on the base .pic-head rule — the duplicate here silently lost the
       specificity tie and was removed, audit 2026-07-06.) */
    .pic-tier-big { font-size: 14px; padding: 6px 16px; letter-spacing: 0.05em; }
    /* ============ PROGRAM TRAJECTORY (#40) ============ */
    .traj-card { border: 1px solid #e5e7eb; border-radius: 16px; background: #fff; padding: 18px; margin-bottom: 8px; box-shadow: 0 1px 2px rgba(15,23,42,0.04), 0 6px 18px rgba(15,23,42,0.05); }
    .traj-head { display: flex; align-items: center; gap: 12px; margin-bottom: 14px; }
    .traj-chip { font-size: 11px; font-weight: 800; text-transform: uppercase; letter-spacing: 0.05em; padding: 4px 12px; border-radius: 999px; white-space: nowrap; display: inline-flex; align-items: center; gap: 5px; }
    .traj-ic { display: inline-flex; align-items: center; }
    .ti { display: inline-flex; flex-direction: column; align-items: center; }
    /* Double arrows stacked into one tight chevron-pair — both visible, nested */
    .ti i { font-style: normal; font-size: 0.8em; line-height: 0.54; display: block;
      text-shadow: 0 0 5px currentColor;   /* soft glow, matches the chip's color */
      transition: transform 0.25s cubic-bezier(0.34, 1.56, 0.64, 1), text-shadow 0.3s ease; }
    .ti-rock, .ti-flat { display: inline-block; transition: transform 0.25s cubic-bezier(0.34, 1.56, 0.64, 1); }
    .ti-flat { color: #94a3b8; text-shadow: 0 0 4px rgba(148,163,184,0.6); }
    .ti-rock { filter: drop-shadow(0 0 3px rgba(234,88,12,0.45)); }
    /* Emil-style: motion only on hover — purposeful, springy, restrained. Triggers on chip/row/card. */
    @media (hover: hover) and (pointer: fine) {
      .traj-chip:hover .ti i, .row-hover:hover .ti i, .traj-card:hover .ti i { text-shadow: 0 0 10px currentColor; }
    }
    @media (hover: hover) and (pointer: fine) {
      .traj-chip:hover .ti-up i, .row-hover:hover .ti-up i, .traj-card:hover .ti-up i,
      .traj-chip:hover .ti-up2 i:first-child, .row-hover:hover .ti-up2 i:first-child, .traj-card:hover .ti-up2 i:first-child { transform: translateY(-2.5px); }
    }
    @media (hover: hover) and (pointer: fine) {
      .traj-chip:hover .ti-up2 i:last-child, .row-hover:hover .ti-up2 i:last-child, .traj-card:hover .ti-up2 i:last-child { transform: translateY(-0.5px); }
    }
    @media (hover: hover) and (pointer: fine) {
      .traj-chip:hover .ti-down2 i:first-child, .row-hover:hover .ti-down2 i:first-child, .traj-card:hover .ti-down2 i:first-child { transform: translateY(0.5px); }
    }
    @media (hover: hover) and (pointer: fine) {
      .traj-chip:hover .ti-down i, .row-hover:hover .ti-down i, .traj-card:hover .ti-down i,
      .traj-chip:hover .ti-down2 i:last-child, .row-hover:hover .ti-down2 i:last-child, .traj-card:hover .ti-down2 i:last-child { transform: translateY(2.5px); }
    }
    @media (hover: hover) and (pointer: fine) {
      .traj-chip:hover .ti-rock, .row-hover:hover .ti-rock, .traj-card:hover .ti-rock { transform: rotate(-10deg); }
    }
    @media (hover: hover) and (pointer: fine) {
      .traj-chip:hover .ti-flat, .row-hover:hover .ti-flat, .traj-card:hover .ti-flat { transform: translateX(2.5px); }
    }
    @media (prefers-reduced-motion: reduce) { .ti i, .ti-rock, .ti-flat { transition: none; } }
    .traj-chip.traj-up { background: #dcfce7; color: #15803d; }
    .traj-chip.traj-down { background: #fee2e2; color: #b91c1c; }
    .traj-chip.traj-flat { background: #f1f5f9; color: #475569; }
    .traj-chip.traj-volatile { background: #ffedd5; color: #c2410c; }
    /* No-graph trajectory: description + milestone text list */
    .traj-desc { font-size: 15px; line-height: 1.55; color: #334155; margin: 2px 0 0; }
    .traj-row-desc { font-size: 12.5px; color: #64748b; line-height: 1.4; display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden; }
    /* ============ COACH HOT SEAT ============ */
    .hotseat-card { display: flex; align-items: center; gap: 20px; border: 1px solid #e5e7eb; border-radius: 18px; padding: 18px 22px; margin-bottom: 8px; background: #fff; box-shadow: 0 8px 30px rgba(15,23,42,0.05); transition: transform 0.22s cubic-bezier(0.23,1,0.32,1), box-shadow 0.22s ease; }
    .hotseat-card.hs-safe { border-color: #bbf7d0; background: linear-gradient(180deg, #ffffff 0%, #f0fdf4 100%); box-shadow: 0 8px 30px rgba(22,163,74,0.07); }
    .hotseat-card.hs-simmer { border-color: #fde68a; background: linear-gradient(180deg, #ffffff 0%, #fefce8 100%); box-shadow: 0 8px 30px rgba(202,138,4,0.07); }
    .hotseat-card.hs-hot { border-color: #fed7aa; background: linear-gradient(180deg, #ffffff 0%, #fff7ed 100%); box-shadow: 0 8px 30px rgba(194,65,12,0.08); }
    .hotseat-card.hs-scorch { border-color: #fecaca; background: linear-gradient(180deg, #ffffff 0%, #fef2f2 100%); box-shadow: 0 8px 30px rgba(220,38,38,0.09); }
    @media (hover: hover) and (pointer: fine) { .hotseat-card:hover {  box-shadow: 0 14px 40px rgba(15,23,42,0.10); } }
    @media (prefers-reduced-motion: reduce) { .hotseat-card { transition: none; } }
    .hotseat-dial { flex: 0 0 auto; display: flex; flex-direction: column; align-items: center; gap: 2px; }
    .hotseat-dial-svg { display: block; }
    .hotseat-dial-sm { display: block; margin: -2px 1px; }
    /* ====== Conference page ====== */
    .confpg-hero { display: flex; align-items: center; gap: 22px; flex-wrap: wrap; }
    .confpg-logo { width: 84px; height: 84px; object-fit: contain; flex: 0 0 auto; filter: drop-shadow(0 4px 12px rgba(15,23,42,0.12)); }
    .confpg-chips { display: flex; gap: 8px; flex-wrap: wrap; margin-top: 10px; }
    .confpg-chip { display: inline-flex; align-items: center; gap: 6px; padding: 5px 12px; border-radius: 999px; font-size: 12px; font-weight: 700; background: #f1f5f9; color: #334155; border: 1px solid #e2e8f0; }
    .confpg-chip.is-power { background: linear-gradient(135deg, #0f172a 0%, #1e293b 100%); color: #7dd3fc; border-color: #0f172a; }
    .confpg-chip.is-champ { background: linear-gradient(135deg, #fef3c7 0%, #fde68a 100%); color: #92400e; border-color: #fcd34d; }
    .confpg-cards { display: grid; grid-template-columns: repeat(auto-fit, minmax(220px, 1fr)); gap: 14px; margin: 22px 0 26px; }
    .confpg-card { border: 1px solid #e5e7eb; border-radius: 16px; background: #fff; padding: 16px 18px; box-shadow: 0 1px 2px rgba(15,23,42,0.04); }
    .confpg-card-label { font-size: 10px; font-weight: 700; text-transform: uppercase; letter-spacing: 0.08em; color: #94a3b8; margin-bottom: 6px; }
    .confpg-card-val { font-size: 22px; font-weight: 800; color: #0f172a; letter-spacing: -0.02em; display: flex; align-items: center; gap: 8px; }
    .confpg-card-val img { width: 26px; height: 26px; object-fit: contain; }
    .confpg-card-sub { font-size: 12px; color: #64748b; margin-top: 3px; }
    .confpg-row { cursor: pointer; }
    .confpg-bid-chip { display: inline-flex; align-items: center; gap: 5px; padding: 3px 9px; border-radius: 8px; font-size: 11px; font-weight: 700; background: #eef2ff; color: #4338ca; border: 1px solid #e0e7ff; }
    .commonopp-wrap { display: flex; flex-direction: column; gap: 16px; }
    .commonopp-pickers { display: flex; gap: 12px; flex-wrap: wrap; align-items: center; }
    .commonopp-vs { font-size: 12px; font-weight: 800; text-transform: uppercase; letter-spacing: 0.08em; color: #94a3b8; }
    .commonopp-stage { border: 1px solid #eef2f7; border-radius: 24px; background: radial-gradient(120% 100% at 50% 0%, #ffffff 0%, #f8fafc 100%); padding: 18px; overflow-x: auto; box-shadow: 0 1px 2px rgba(15,23,42,0.04), 0 12px 36px rgba(15,23,42,0.06); }
    .chain-empty { text-align: center; color: #64748b; font-size: 15px; padding: 56px 20px; line-height: 1.7; }
    .chain-linear { display: flex; align-items: flex-start; justify-content: center; flex-wrap: wrap; gap: 2px; padding: 34px 16px; }
    .chain-chip { display: flex; flex-direction: column; align-items: center; gap: 9px; width: 98px; padding: 6px 2px; border-radius: 16px; }
    .chain-logo-wrap { width: 66px; height: 66px; border-radius: 50%; display: flex; align-items: center; justify-content: center; background: #fff; border: 1px solid #edf1f6; box-shadow: 0 1px 2px rgba(15,23,42,0.05), 0 5px 14px rgba(15,23,42,0.05); transition: transform 0.3s cubic-bezier(0.34,1.56,0.64,1), box-shadow 0.3s ease; }
    .chain-logo { width: 40px; height: 40px; object-fit: contain; }
    .chain-start .chain-logo-wrap, .chain-end .chain-logo-wrap { border-color: rgba(var(--team, 71,85,105), 0.4); box-shadow: 0 0 0 2px rgba(var(--team, 71,85,105), 0.1), 0 5px 16px rgba(var(--team, 71,85,105), 0.16); }
    @media (hover: hover) and (pointer: fine) { .chain-chip:hover .chain-logo-wrap { transform: translateY(-4px) scale(1.06); box-shadow: 0 10px 26px rgba(var(--team, 71,85,105), 0.30); } }
    .chain-arrow { display: inline-flex; align-items: center; flex: 0 0 auto; margin-top: 31px; color: #cbd5e1; }
    .chain-ring { position: relative; width: 100%; max-width: 420px; margin: 6px auto; }
    .chain-ring-svg { display: block; width: 100%; height: auto; overflow: visible; }
    .chain-ring-node { position: absolute; transform: translate(-50%, -50%); }
    .chain-disc { width: 60px; height: 60px; border-radius: 50%; background: #fff; border: 1px solid #edf1f6; box-shadow: 0 1px 2px rgba(15,23,42,0.05), 0 5px 14px rgba(15,23,42,0.05); display: flex; align-items: center; justify-content: center; transition: transform 0.3s cubic-bezier(0.34,1.56,0.64,1), box-shadow 0.3s ease; }
    .chain-disc .chain-logo { width: 38px; height: 38px; object-fit: contain; }
    .chain-disc.chain-start { border-color: rgba(var(--team, 71,85,105), 0.45); box-shadow: 0 0 0 2px rgba(var(--team, 71,85,105), 0.1), 0 6px 18px rgba(var(--team, 71,85,105), 0.18); }
    @media (hover: hover) and (pointer: fine) { .chain-disc:hover { transform: scale(1.07); box-shadow: 0 10px 26px rgba(var(--team, 71,85,105), 0.28); } }
    /* Chain nodes navigate to the team page — cursor + press feedback (Emil) */
    .chain-chip, .chain-disc { cursor: pointer; }
    .chain-chip:active .chain-logo-wrap, .chain-disc:active { transform: scale(0.96); }
    .chain-chip:focus-visible .chain-logo-wrap, .chain-disc:focus-visible { outline: 2px solid #38bdf8; outline-offset: 2px; border-radius: 16px; }
    .wc-pick-inline { min-height: 0; padding: 12px 16px; flex: 1 1 280px; max-width: 340px; }
    /* Emil flare: staggered spring entrance for chips, draw-in for ring arrows */
    @keyframes wcChipIn { from { opacity: 0; transform: translateY(10px) scale(0.94); } to { opacity: 1; transform: none; } }
    @keyframes wcArrowIn { from { opacity: 0; } to { opacity: 1; } }
    @keyframes wcDraw { to { stroke-dashoffset: 0; } }
    .chain-linear .chain-chip { animation: wcChipIn 0.5s cubic-bezier(0.34,1.56,0.64,1) backwards; animation-delay: calc(var(--i, 0) * 65ms); }
    .chain-linear .chain-arrow { animation: wcArrowIn 0.4s ease backwards; animation-delay: calc(var(--i, 0) * 65ms + 120ms); }
    .chain-disc { animation: wcChipIn 0.5s cubic-bezier(0.34,1.56,0.64,1) backwards; animation-delay: calc(var(--i, 0) * 65ms + 120ms); }
    .chain-ring-svg path.wc-edge { stroke-dasharray: 1; stroke-dashoffset: 1; animation: wcDraw 0.6s cubic-bezier(0.65,0,0.35,1) forwards; animation-delay: calc(var(--i, 0) * 70ms); }
    @media (prefers-reduced-motion: reduce) { .chain-logo-wrap, .chain-linear .chain-chip, .chain-linear .chain-arrow, .chain-disc, .chain-ring-svg path.wc-edge { animation: none !important; transition: none !important; stroke-dashoffset: 0 !important; } }
    .hotseat-dial-cap { font-size: 10px; font-weight: 800; text-transform: uppercase; letter-spacing: 0.06em; color: #94a3b8; }
    .hotseat-body { min-width: 0; flex: 1; }
    .hotseat-card .hotseat-coach { font-size: 18px; font-weight: 800; letter-spacing: -0.01em; }
    .hotseat-head { display: flex; align-items: center; gap: 10px; margin-bottom: 0; flex-wrap: wrap; }
    .hotseat-chip { font-size: 11px; font-weight: 800; text-transform: uppercase; letter-spacing: 0.05em; padding: 4px 12px; border-radius: 999px; white-space: nowrap; display: inline-flex; align-items: center; gap: 5px; }
    .hotseat-chip.hs-safe { background: #dcfce7; color: #15803d; }
    .hotseat-chip.hs-simmer { background: #fef9c3; color: #a16207; }
    .hotseat-chip.hs-hot { background: #ffedd5; color: #c2410c; }
    .hotseat-chip.hs-scorch { background: #fee2e2; color: #b91c1c; }
    .hotseat-flame { display: inline-flex; font-size: 0.95em; transition: transform 0.4s cubic-bezier(0.34, 1.56, 0.64, 1), filter 0.3s ease; filter: drop-shadow(0 0 3px rgba(220,38,38,0.4)); }
    @media (hover: hover) and (pointer: fine) {
      .hotseat-chip:hover .hotseat-flame, .row-hover:hover .hotseat-flame, .hotseat-card:hover .hotseat-flame { transform: translateY(-2px) scale(1.08); filter: drop-shadow(0 0 8px rgba(220,38,38,0.75)); }
    }
    @media (prefers-reduced-motion: reduce) { .hotseat-flame { transition: none; } }
    .hotseat-coach { font-size: 13px; font-weight: 700; color: #0f172a; }
    .hotseat-desc { font-size: 14.5px; line-height: 1.55; color: #475569; margin: 8px 0 0; }
    .hotseat-row-desc { font-size: 12.5px; color: #64748b; line-height: 1.4; display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden; }
    /* Team-page Pain Index card */
    .pic-card { border: 1px solid #fecdd3; border-radius: 18px; padding: 22px; margin-bottom: 8px;
      background: linear-gradient(180deg, #ffffff 0%, #fff5f6 100%); box-shadow: 0 8px 30px rgba(225,29,72,0.06); }
    /* Tiers-only layout (big tier chip stacked above note) — the only .pic-head consumer. */
    .pic-head { display: flex; flex-direction: column; align-items: flex-start; gap: 10px; margin-bottom: 20px; }
    .pic-note { font-size: 14px; color: #475569; margin-top: 9px; line-height: 1.5; }
    .pic-worst-t { font-size: 11px; font-weight: 800; text-transform: uppercase; letter-spacing: 0.06em; color: #94a3b8; margin-bottom: 9px; }
    .pic-worst ul { list-style: none; display: grid; gap: 7px; margin: 0; padding: 0; }
    .pic-worst li { font-size: 13.5px; color: #334155; padding-left: 22px; position: relative; line-height: 1.45; }
    .pic-worst li::before { content: '\1F494'; position: absolute; left: 0; top: 1px; font-size: 12px; }

    /* ============================================================
       iOS AUTO-ZOOM GUARD (iPhone audit 2026-07-26)
       Mobile Safari zooms the whole page whenever a focused form control's
       font-size is under 16px, and it never zooms back out — the zoom then
       follows the user across SPA navigation, which is why the home hero
       looked "cut off" after a trip through the signup modal.
       Every control listed here measured 13-15px. Scoped to coarse pointers
       so the desktop type scale is untouched. #gs-input (the Cmd+K palette)
       was already 16px and is the pattern these follow.
       Must stay at the END of this file: these are single-class selectors
       competing with the component rules above on equal specificity, so
       source order is what makes them win.
       ============================================================ */
    @media (hover: none) and (pointer: coarse) {
      .auth-field input,
      .pf-name-edit input,
      .pf-select,
      .ptn-search-input,
      .ss-search,
      .tg-input,
      #quad-conf-filter { font-size: 16px; }
    }

    /* ============================================================
       TAILWIND UTILITY RESCUE (iPhone audit 2026-07-26, boss option B)
       tw.css is linked before this file, so a bare `.hidden` (0,1,0) LOSES
       to any component rule here that sets `display` — `.hover-btn` and
       `.global-search-btn` both do. Result: the navbar's desktop-only
       "Log in"/"Sign up" pair rendered on every phone, wrapping mid-word
       to 53x48 / 58x48 inside a 57px header, and the desktop search button
       came along with them. The hamburger already carries its own
       #mobile-auth-logged-out pair, so these were pure duplicates.

       Scoped per component ON PURPOSE. A bare `.hidden.hidden` would also
       outrank `sm:inline-flex` — media queries add no specificity — and
       would break the desktop show instead. Each responsive variant is
       therefore re-asserted at the same doubled weight inside its own
       media block.

       `.badge.hidden` is deliberately NOT here: 377 conference badges on
       board rows are also affected, but hiding them on phones is a design
       change rather than a bug fix (boss holding that call).
       ============================================================ */
    .hover-btn.hidden,
    .global-search-btn.hidden { display: none; }
    .hover-btn.whitespace-nowrap { white-space: nowrap; }
    @media (min-width: 640px) {
      .hover-btn.sm\:inline-flex,
      .global-search-btn.sm\:inline-flex { display: inline-flex; }
    }
    @media (min-width: 768px) {
      .hover-btn.md\:inline-flex { display: inline-flex; }
    }

    /* ============================================================
       TOUCH TARGETS — worst offenders (iPhone audit 2026-07-26)
       Each of these measured well under Apple's 44x44 HIG minimum. The hit
       area is grown with a positioned ::after rather than padding so NOT
       ONE PIXEL of the existing layout moves — these all sit inside tuned
       flex rows and bracket cells where padding would reflow neighbours.
       Site-wide 44px enforcement is still an open design call; this block
       is only the controls that were genuinely hard to hit.
       ============================================================ */
    .am-x::after,            /* auth modal close — was 22x29, the only dismiss */
    .games-back::after,      /* game-page back link — was 76x19 */
    .sl-vp::after,           /* Schedule Lab venue toggle — was 26x24 */
    .sl-x::after,            /* Schedule Lab remove — was 24x24 */
    .bk-firstfour-team::after { /* First Four row — was 139x18 */
      content: ''; position: absolute; inset: -11px; border-radius: inherit;
    }
    .games-back::after { inset: -13px -8px; }
    .games-back, .sl-vp, .sl-x, .bk-firstfour-team { position: relative; }

    /* Dream Matchup venue toggle: #dm-venue .hover-btn is width:100% +
       white-space:nowrap, and .hover-btn is overflow:hidden — so at 375 the
       28px side padding clipped the label (118px of text in a 109px box). */
    @media (max-width: 639px) {
      #dm-venue .hover-btn { padding-left: 10px; padding-right: 10px; font-size: 11px; text-overflow: ellipsis; }
    }

    /* Turnstile is a fixed 300px iframe; .auth-body's 30px side padding left
       it a 269px column inside a card that is overflow:hidden, so both edges
       were being clipped. Pull the captcha row out of that padding — 305px of
       room inside a 327px card.
       Uses width + a relative offset rather than negative margins on purpose:
       the element carries an inline `style="margin:2px 0 4px"`, and no
       stylesheet margin can beat an inline one without !important.
       UNVERIFIED against a live widget (Turnstile does not render in the
       audit pane); re-check on a real phone. */
    .auth-captcha { position: relative; left: -18px; width: calc(100% + 36px); }

    /* ===== M4 (iPhone audit 2026-07-26) — names truncated at 375px =====
       Scoped to narrow viewports so desktop layout is untouched.

       Sized against the REAL datasets, not sampled names. The audit's figures
       came from a handful of examples and understated the worst cases badly:
       measured across all 365 teams / 5,068 players / 88 coaches, the true
       worst strings are "A&M-Corpus Christi" and
       "Tayeshawn Cunningham-Pemberton".

       Only these two selectors have a fix that stays above the 11px type floor
       the same audit sets in M3. .bk-name and conf-tourney .name would need a
       6px font to fit their worst case on one line — see the briefing; those
       need a display-name decision, not a CSS tweak. */
    @media (max-width: 400px) {
      /* 95% of the 88 coach names fit at 13px; 100% fit at 11.5px, worst case
         "Anfernee Hardaway" 127px -> ~112px in a 113px box. The 18px
         .hotseat-card .hotseat-coach is a different element and keeps its size
         via higher specificity. */
      .hotseat-coach { font-size: 11.5px; }

      /* 86% of 5,068 player names fit on one line at 111px; 100% fit within two.
         So wrapping is a complete fix here and the ellipsis never fires. The
         line-clamp is a guard for future longer names, not load-bearing today.
         .tpc-rich has no fixed height and .tpc-id is a centred flex row, so the
         extra line grows the card cleanly rather than overflowing it. */
      .tpc-name {
        white-space: normal; overflow-wrap: anywhere; text-overflow: clip;
        display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical;
        overflow: hidden; line-height: 1.25;
      }
    }

    /* ============================================================
       PHONE POLISH — boss delegated these four calls 2026-07-29
       ("make your own design choices, as long as its clean and looks good")
       ============================================================ */

    /* --- 1. Tap targets -------------------------------------------------
       Standalone controls get a real 44px target. Densely stacked rows
       deliberately do NOT: .bk-slot.team-link (27px) and
       .bk-bracket-tree .bk-team.is-clickable (28px) sit flush against their
       neighbours, so an expanded hit area would overlap the row above and
       below and steal taps near the edges — strictly worse than a small but
       accurate target. Both clear WCAG 2.2's 24px floor. Making those rows
       genuinely 44px tall would add ~16px x 365 rows to Standings; that is a
       product decision about page length, not a CSS defect, so it is left
       flagged rather than silently taken. */
    .takes-team-filter { position: relative; }
    .takes-team-filter::after {
      content: ''; position: absolute; inset: -9px -4px; border-radius: inherit;
    }
    @media (max-width: 400px) {
      /* every small button site-wide — was 30px tall */
      .hover-btn-sm { min-height: 44px; padding-top: 0; padding-bottom: 0; }
      /* leaderboard rows — 20px of content in a 26px row */
      .ls-team { padding: 8px 0; }
    }

    /* --- 2. Small text floor -------------------------------------------
       11px minimum for text carrying data the reader has to parse.
       Bracket micro-labels are deliberately exempt: .bk-vs (8px),
       .bk-ab-chip (8.5px), .bk-bracket-tree .seed (9.5px) and
       .bk-firstfour-seed (9px) live inside boxes whose width is already the
       binding constraint — the short-name map shipped the same day exists
       precisely because names do not fit. Growing type in there would undo
       that. They are ornament or single digits, not prose. */
    @media (max-width: 400px) {
      .quad-net-chip, .rivalry-series-label, .bvr-rating-sub, .tp-status-badge,
      .pain-tier, .absurd-tag, .cmp-label, .gh-tag, .ss-pick-conf {
        font-size: 11px;
      }
      table th { font-size: 11px; }
    }

    /* --- 3. Conference-tournament names ---------------------------------
       .bk-bracket-tree .bk-team .name had ~55px to work with: the column is
       min 150px below 640px and the row chrome (16px padding + 17px seed +
       18px logo + 24px score + three 6px gaps = 93px) ate the rest. Widening
       the column forces horizontal scroll on a tree that is already 4-6
       rounds wide, and a hand-written short-name map is not viable here the
       way it was for the 68-team bracket — 183 of 365 teams overflow. So the
       chrome gets tighter instead and the name takes the difference:
       ~55px -> ~70px, about +27%, with no layout growth. */
    @media (max-width: 400px) {
      .bk-bracket-tree .bk-team { padding: 5px 6px; gap: 4px; }
      .bk-bracket-tree .bk-team .seed { min-width: 14px; }
      .bk-bracket-tree .bk-team .score { min-width: 22px; }
    }
