/* =============================================================================
   design-system.css — The Cookie Book's design system: the foundation every
   redesigned page builds on
   -----------------------------------------------------------------------------
   Born on the game-mode build hubs (/arena-teams/, /guild-boss/,
   /cookie-alliance/, October 2026) and split out of team-hub.css so the rest of
   the site can wear the same design without loading the hubs' components.
   design/README.md is the guide (direction, tokens, patterns, the page
   playbook); this file is the code.

   NAMESPACE. The system kept the hubs' prefix: tokens are --th-*, classes are
   th-*, the root is .th. "th" is simply the system's name now.

   HOW A PAGE USES IT
     <body class="th-page">              page-level rules + the dark shell re-skin
     <div class="th"> ... </div>         the root: tokens, container, wrap, type
   Link order: shared-shell.css, design-system.css, then the page's own sheet
   (team-hub.css on the hubs). The root is an inline-size container named `th`,
   so a component's responsive rules are @container th queries, never viewport
   media queries, wherever the component can sit in a narrower column.

   WHAT IS HERE (and nothing page-specific is)
      0  Fonts (CookieRun KR, both unicode-range halves)
      1  Tokens: the ink dark theme, gold, parchment, interaction, fills, the
         plate/card/opened-build surfaces, depth, layout, MODE accents (one line
         per game mode), ELEMENT and RARITY tones
      2  Page: body.th-page + the shell's dark tokens re-pointed to ink
      3  Base, root, utilities: the .th root, headings, kicker, label, separators
      4  Atoms: buttons, links, tags, switch, segmented control + density
         toggle, votes, avatars, author by-line, cookie faces, ornament diamonds
      5  The framed page header: gold frame over a blurred picture, the copy
         and the emblem, the side panels' shell (moved from team-hub.css)
      7  Sections: band heads (kicker, CookieRun name, meta, gold rule, count,
         collapse), alternating full-width band strips (.th-bands > .th-band),
         collapsed bands, band labels, the honest empty state, Show more
     16  Toasts (the always-present aria-live status region)
     17  Page-level: band scroll margin, the dashed note, the preview-clock
         notice, the route base (font, border-box, route-main/route-footer)
      L  Light theme: tokens, element tones, literal overrides of the above
   Section numbers are team-hub.css's own (that file holds the panels'
   contents under 5, then 6, 8-15 and its own L3) so the two read as one sequence.

   CHANGING THIS FILE. Every redesigned page links it, so:
   - Additive by default: add a token or an atom; never change an existing
     value. Changing a token or an atom's look changes every page at once, which
     is an owner decision, verified on every page that links this file.
   - Page-specific components live in the page's own stylesheet, built from
     these tokens. Promote one here only when a second page needs it.
   - Every rule leads with .th or body.th-page; every light rule leads with
     :root[data-theme="light"] and never changes a border width (CLAUDE.md,
     light theme).
   - Bump its ?v= with scripts/bump-version-tags.mjs (which cascades to every
     page that links it) and SW_VERSION.
   ========================================================================== */

/* ---------- 0 · fonts ---------- */
/* The site's display face, declared here too so a hub page does not depend on
   feature-page.css for it. Two halves, exactly as feature-page.css has them:
   the 46KB subset for everything outside CJK, the full font only for CJK
   (CLAUDE.md, "CookieRun is TWO @font-face rules"). Same URLs, so a page that
   loads both stylesheets downloads each file once. */
@font-face {
  font-family: "CookieRun KR";
  src: url("/cookie-dex/assets/fonts/CookieRun-Bold-subset.woff2") format("woff2");
  font-style: normal;
  font-weight: 700;
  font-display: swap;
  unicode-range: U+0000-2FFF, U+E000-F8FF;
}
@font-face {
  font-family: "CookieRun KR";
  src: url("/cookie-dex/assets/fonts/CookieRun-Bold.woff2") format("woff2");
  font-style: normal;
  font-weight: 700;
  font-display: swap;
  unicode-range: U+3000-33FF, U+AC00-D7AF, U+FF00-FFEF;
}

/* ---------- 1 · tokens ---------- */
.th {
  /* a cookie face's element badge, as a share of the face (owner's call,
     2026-10-26: at ~41% it covered the faces of many cookies) */
  --th-face-el-scale: 0.3;
  /* page + surfaces */
  --th-ground: #0a0b0f;
  --th-ground-rgb: 10, 11, 15;
  --th-ground-hi: #171a24;
  --th-abyss-rgb: 4, 5, 8;
  --th-surface-1: #14161d;          /* rows, toolbar, panels */
  --th-surface-2: #1b1e27;          /* hover row, open row */
  --th-surface-3: #252935;          /* wells, chips */
  --th-surface-sunk: #0e1015;       /* table heads, sunk wells */
  --th-glass: rgba(var(--th-ground-rgb), 0.88);
  --th-veil: rgba(var(--th-ground-rgb), 0.78);
  --th-veil-strong: rgba(var(--th-ground-rgb), 0.96);
  --th-line: rgba(255, 255, 255, 0.07);
  --th-line-2: rgba(255, 255, 255, 0.12);
  --th-line-3: rgba(255, 255, 255, 0.22);
  --th-ink: #eceef2;                /* 16.9:1 on the ground */
  --th-ink-2: #d4d7df;
  --th-ink-3: #9ba2b0;              /* >= 5.6:1 on every surface */
  --th-ink-faint: #5f6676;          /* separators only, never copy */
  --th-heading: #f8f9fb;
  --th-heading-shadow: 0 2px 0 rgba(0, 0, 0, 0.5);
  --th-text-on-art: 0 1px 0 rgba(0, 0, 0, 0.55);

  /* gold: frames, gems, the primary button */
  --th-gold: #f0cd7e;
  --th-gold-2: #c99b46;
  --th-gold-line: rgba(240, 205, 126, 0.45);
  --th-gold-faint: rgba(240, 205, 126, 0.16);
  --th-gold-glow: rgba(240, 190, 90, 0.45);
  --th-gold-fill: linear-gradient(180deg, #ffe39a 0%, #f6b64c 55%, #e8963a 100%);
  --th-gold-soft-fill: linear-gradient(180deg, #fff1cb, #efc874);
  --th-gold-gem: linear-gradient(135deg, #fff2c8 0%, #f0cd7e 45%, #c99b46 100%);
  --th-on-gold: #2a1206;
  --th-orn-ring: 0 0 0 2px var(--th-ground), 0 0 10px rgba(240, 205, 126, 0.6);

  /* parchment: treasure details */
  --th-parch: #fbefd6;
  --th-parch-2: #f3e0b8;
  --th-parch-line: #e2b866;
  --th-parch-ink: #3d2a1a;
  --th-parch-ink-2: #8a5210;

  /* interaction: a SELECTED option is a plain chip (pale on ink, grape on
     light), so gold is left to the primary action alone */
  --th-sel-bg: #eceef2;
  --th-sel-ink: #14161d;
  --th-sel-shadow: 0 1px 2px rgba(0, 0, 0, 0.45);
  --th-switch-on: #f2b555;
  --th-switch-on-edge: transparent;
  --th-switch-knob-on: #ffffff;
  --th-link: var(--th-gold);
  --th-match: var(--th-gold);
  --th-focus-ring: 0 0 0 3px rgba(240, 205, 126, 0.42);
  --th-focus-color: #f0cd7e;
  --th-up: #5fe0a5;
  --th-down: #ff9aa0;
  --th-dens-ic: var(--th-ink-3);
  --th-dens-ic-on: var(--th-sel-ink);

  /* buttons are soft pills: a fill that brightens on hover and gives a
     little on press, no outline, no bevel (owner's pick, 2026-10-25) */
  --th-btn-bg: rgba(255, 255, 255, 0.075);
  --th-btn-hover: rgba(255, 255, 255, 0.125);
  --th-btn-press: rgba(255, 255, 255, 0.055);
  --th-btn-line: transparent;
  --th-btn-shadow: none;
  --th-btn-icon: #c9ced8;
  --th-btn-track: rgba(255, 255, 255, 0.055);
  --th-btn-divide: rgba(255, 255, 255, 0.1);
  --th-btn-focus: rgba(240, 205, 126, 0.6);
  --th-gold-btn: linear-gradient(180deg, #ffd98a 0%, #f4ad4b 100%);
  --th-gold-btn-hover: linear-gradient(180deg, #ffe4a6 0%, #f7b95d 100%);
  --th-gold-btn-press: linear-gradient(180deg, #f3c26c 0%, #e89c3c 100%);
  --th-gold-btn-glow: 0 6px 16px -8px rgba(245, 175, 75, 0.85);
  --th-field-bg: rgba(255, 255, 255, 0.04);
  --th-wash: rgba(255, 255, 255, 0.02);
  --th-track: rgba(255, 255, 255, 0.09);
  --th-av-ini: linear-gradient(135deg, #4c5468, #2c3141);
  --th-ledge: transparent;
  --th-art-drop: drop-shadow(0 2px 3px rgba(0, 0, 0, 0.5));

  /* opened build */
  --th-ob-1: #181b24;
  --th-ob-2: #111319;
  --th-veil-rgb: 24, 27, 36;

  /* art surfaces: Comfy plates, hub cards, the team plate */
  --th-plate-1: #1c2029;
  --th-plate-2: #13161d;
  --th-plate-edge: rgba(240, 205, 126, 0.5);
  --th-plate-ring-rgb: 4, 5, 8;
  --th-plate-gem-edge: #0d0f14;
  --th-stage-floor-rgb: 3, 4, 7;
  --th-card-1: #1a1d27;
  --th-card-2: #13151c;
  --th-card-veil-rgb: 19, 21, 28;
  --th-card-ring-rgb: 4, 5, 8;
  --th-card-spot-1: #1e1e24;
  --th-card-spot-2: #15151a;
  --th-card-spot-ring: #0b0b0f;
  --th-team-plate-1: #1e2230;
  --th-team-plate-2: #14161e;
  --th-sunk-on-art: rgba(var(--th-abyss-rgb), 0.42);
  --th-on-art-chip: rgba(10, 11, 16, 0.88);
  --th-crown-edge: #0d0f14;
  --th-dark-art-face: #171a26;
  --th-dark-art-fan: #1a1d2b;
  --th-dark-stage-rgb: 12, 14, 22;

  /* depth */
  --th-shadow-1: 0 10px 24px -14px rgba(0, 0, 0, 0.8);
  --th-shadow-2: 0 24px 50px -24px rgba(0, 0, 0, 0.85);
  --th-shadow-pop: 0 0 0 3px rgba(var(--th-ground-rgb), 0.9), 0 26px 44px -14px rgba(0, 0, 0, 0.8);

  /* layout */
  --th-wrap: 1392px;
  --th-radius: 14px;
  --th-panel-w: 318px;
  /* the site header is sticky; the toolbar sticks under it */
  --th-sticky-top: calc(var(--tcb-header-height, 64px) + 12px);

  /* MODE (default Arena). Re-pointed by the .th-m-* classes below. */
  --th-m1: #ff6a4c;
  --th-m2: #ffb54a;
  --th-m-rgb: 255, 106, 76;
  --th-m-ink: #ffb8a4;
  --th-m-btn1: #cf4630;
  --th-m-btn2: #9c2622;
  --th-m-art: url("/assets/arena-landing-page-bg.webp");

  /* default element (none) and rarity */
  --th-el: 206, 200, 188;
  --th-el-band: 0.3;
}

/* MODES: same layout, different accent and art. One line per mode (plus its
   light text ink in section L). Each class works on the ROOT (a page about one
   mode) and on any element INSIDE a .th root (a tile for one mode on a page
   about several - the landing page's directory, 2026-10-26). */
.th.th-m-arena, .th .th-m-arena { --th-m1: #ff6a4c; --th-m2: #ffb54a; --th-m-rgb: 255, 106, 76; --th-m-ink: #ffb8a4; --th-m-btn1: #cf4630; --th-m-btn2: #9c2622; --th-m-art: url("/assets/arena-landing-page-bg.webp"); }
/* Guild Boss: the magenta sigils and cyan flame of its battle art, so it reads
   apart from Arena's ember and Alliance's lavender at a glance */
.th.th-m-guild, .th .th-m-guild { --th-m1: #d064ff; --th-m2: #4fd1ff; --th-m-rgb: 208, 100, 255; --th-m-ink: #e7b8ff; --th-m-btn1: #9b3fd6; --th-m-btn2: #5f1f94; --th-m-art: url("/assets/guild%20boss/guild-boss-battles-background.webp"); }
.th.th-m-alliance, .th .th-m-alliance { --th-m1: #9a86ff; --th-m2: #5ec6ff; --th-m-rgb: 154, 134, 255; --th-m-ink: #c9bfff; --th-m-btn1: #6f56e2; --th-m-btn2: #43289e; --th-m-art: url("/assets/cookie-alliance/3-teams.webp"); }
/* The other destinations (first worn by the baked build pages, 2026-10-25).
   Hues from each mode's `accent` in assets/js/game-modes.js (events: the
   event kind's lavender). No art of their own: a page that has a picture for
   its destination (an event's spotlight image) sets it itself, and `none`
   keeps Arena's default art off a Story or Cake Towers page. */
.th.th-m-story, .th .th-m-story { --th-m1: #46d37f; --th-m2: #ffcf5a; --th-m-rgb: 70, 211, 127; --th-m-ink: #a8efc6; --th-m-btn1: #23a35a; --th-m-btn2: #136b3b; --th-m-art: none; }
.th.th-m-trial, .th .th-m-trial { --th-m1: #ff7a3d; --th-m2: #ffd166; --th-m-rgb: 255, 122, 61; --th-m-ink: #ffc2a0; --th-m-btn1: #d2541f; --th-m-btn2: #8f3112; --th-m-art: none; }
.th.th-m-nether, .th .th-m-nether { --th-m1: #8a7dff; --th-m2: #ff6fb5; --th-m-rgb: 138, 125, 255; --th-m-ink: #c8c1ff; --th-m-btn1: #5d4fe0; --th-m-btn2: #3a2c9e; --th-m-art: none; }
.th.th-m-cake, .th .th-m-cake { --th-m1: #c47dff; --th-m2: #ff9ac8; --th-m-rgb: 196, 125, 255; --th-m-ink: #e2c2ff; --th-m-btn1: #9246d6; --th-m-btn2: #5e2394; --th-m-art: none; }
.th.th-m-arcade, .th .th-m-arcade { --th-m1: #9fe33a; --th-m2: #41d6ff; --th-m-rgb: 159, 227, 58; --th-m-ink: #cdf29a; --th-m-btn1: #5f9e14; --th-m-btn2: #3a6909; --th-m-art: none; }
.th.th-m-events, .th .th-m-events { --th-m1: #b98cff; --th-m2: #ffb4e1; --th-m-rgb: 185, 140, 255; --th-m-ink: #dcc6ff; --th-m-btn1: #8250e0; --th-m-btn2: #4f2aa0; --th-m-art: none; }

/* ELEMENTS: the site's TRUE element colours, as rgb triplets. Source: the
   ELEMENT_COLORS table in www/scripts/convert-cookie-abilities-to-effect-refs.mjs
   (the colours the Cookie-Dex paints ability values in) - keep the two in step.
   --th-el-band is how strongly the element tints a name banner under white
   CookieRun type on the dark plates; the bright hues (Electricity and Light
   are both yellow, by the game's design) tint less so the name keeps >= 4.6:1.
   ids as the site spells them (darkness, electricity ...); el-none = no element. */
.th .el-chaos { --th-el: 210, 91, 255; --th-el-band: 0.42; }
.th .el-darkness { --th-el: 104, 79, 230; --th-el-band: 0.5; }
.th .el-earth { --th-el: 178, 107, 36; --th-el-band: 0.44; }
.th .el-electricity { --th-el: 242, 202, 18; --th-el-band: 0.27; }
.th .el-fire { --th-el: 233, 87, 53; --th-el-band: 0.44; }
.th .el-grass { --th-el: 0, 179, 116; --th-el-band: 0.4; }
.th .el-ice { --th-el: 49, 205, 236; --th-el-band: 0.3; }
.th .el-light { --th-el: 242, 209, 99; --th-el-band: 0.26; }
.th .el-poison { --th-el: 169, 215, 82; --th-el-band: 0.28; }
.th .el-steel { --th-el: 131, 146, 195; --th-el-band: 0.42; }
.th .el-water { --th-el: 71, 168, 255; --th-el-band: 0.4; }
.th .el-wind { --th-el: 124, 201, 164; --th-el-band: 0.3; }
.th .el-none { --th-el: 206, 200, 188; --th-el-band: 0.24; }

/* RARITY: --th-rc paints portrait edges; --th-rc-ink is the rarity word as
   text (light re-points it to deeper inks in section L); --th-rc-rgb is the
   same hue as a triplet for washes and stage light, rgba(var(--th-rc-rgb), a).
   The hues follow the game's own rarity badges (owner's call, 2026-10-26:
   "rarity colors should match the game"): Common is the game's tan, Witch its
   magenta, Ancient its violet, Dragon its orange-red, Beast its crimson. Each
   edge clears 5:1 on --th-surface-1. */
.th .r-common { --th-rc: #c49769; --th-rc-rgb: 196, 151, 105; }
.th .r-rare { --th-rc: #5fb0ff; --th-rc-rgb: 95, 176, 255; }
.th .r-epic { --th-rc: #f483cf; --th-rc-rgb: 244, 131, 207; }
.th .r-super-epic { --th-rc: #c294ff; --th-rc-rgb: 194, 148, 255; }
.th .r-legendary { --th-rc: #4fdcc9; --th-rc-rgb: 79, 220, 201; }
.th .r-ancient { --th-rc: #a173ff; --th-rc-rgb: 161, 115, 255; }
.th .r-dragon { --th-rc: #f27a4b; --th-rc-rgb: 242, 122, 75; }
.th .r-beast { --th-rc: #ef4b5f; --th-rc-rgb: 239, 75, 95; }
.th .r-witch { --th-rc: #e05cd6; --th-rc-rgb: 224, 92, 214; }
.th .r-special { --th-rc: #ecca62; --th-rc-rgb: 236, 202, 98; }

/* ---------- 2 · page ---------- */
/* The page around the hub reads as the same design: on a .th-page in the DARK
   theme the shell's tokens (shared-shell.css) are re-pointed from its violet
   night to the ink family, so the site header, menu and footer match. Guarded
   by :root:not([data-theme="light"]) - the light theme already is the site's. */
body.th-page { margin: 0; min-height: 100vh; }
:root:not([data-theme="light"]) body.th-page {
  --tcb-bg: #0a0b0f;
  --tcb-surface: #14161d;
  --tcb-surface-strong: #0e1015;
  --tcb-ink: #eceef2;
  --tcb-ink-soft: #a7adba;
  --tcb-ink-faint: #8a91a0;
  --tcb-line: #262a35;
  --tcb-line-strong: #353a48;
  --tcb-shadow: 0 20px 42px rgba(0, 0, 0, 0.5);
  --tcb-page-backdrop:
    radial-gradient(1200px 520px at 50% -160px, rgba(255, 106, 76, 0.1), transparent 70%),
    radial-gradient(1500px 900px at 50% 560px, #171a24 0%, transparent 70%),
    #0a0b0f;
  --tcb-orb-a: radial-gradient(circle, rgba(120, 128, 150, 0.12) 0, rgba(120, 128, 150, 0) 72%);
  --tcb-orb-b: radial-gradient(circle, rgba(120, 128, 150, 0.1) 0, rgba(120, 128, 150, 0) 70%);
  background: var(--tcb-page-backdrop);
  color: #eceef2;
}
:root:not([data-theme="light"]) body.th-page .bento-header {
  background: linear-gradient(180deg, rgba(9, 10, 13, 0.97), rgba(9, 10, 13, 0.82));
}
:root[data-theme="light"] body.th-page {
  background: var(--tcb-page-backdrop, #f7f3fd);
}

/* Ad-supported tier list and generated team build pages leave room for side rails. */
body.tier-list-page .th,
body[data-community-build-id] .th.th-bp { max-width: 1000px; }

/* ---------- 3 · base, root, utilities ---------- */
.th {
  container: th / inline-size;
  position: relative;
  box-sizing: border-box;
  max-width: var(--th-wrap);
  margin: 0 auto;
  padding: 0 24px 8px;
  color: var(--th-ink);
  font: 400 15px/1.5 "Outfit", system-ui, sans-serif;
  font-variant-numeric: tabular-nums;
  -webkit-font-smoothing: antialiased;
}
.th *, .th *::before, .th *::after { box-sizing: border-box; }
.th :is(h1, h2, h3, h4, h5, h6) {
  margin: 0;
  font-family: "CookieRun KR", "Outfit", sans-serif;
  font-weight: 700;
  letter-spacing: 0.1px;
  line-height: 1.15;
  color: var(--th-heading);
  text-shadow: var(--th-heading-shadow);
}
.th :is(p, ul, ol, figure, dl, dd) { margin: 0; }
.th :is(ul, ol) { padding: 0; list-style: none; }
.th img { display: block; max-width: none; }
.th a { color: inherit; text-decoration: none; }
.th button { font: inherit; color: inherit; cursor: pointer; margin: 0; }
.th input { font: inherit; color: inherit; }
.th svg { width: 18px; height: 18px; fill: none; stroke: currentColor; stroke-width: 1.9; stroke-linecap: round; stroke-linejoin: round; flex: none; }
.th :is(a, button, input, [tabindex]):focus-visible { outline: 2px solid var(--th-focus-color); outline-offset: 2px; }
.th .th-sr { position: absolute; width: 1px; height: 1px; padding: 0; margin: -1px; overflow: hidden; clip: rect(0 0 0 0); white-space: nowrap; border: 0; }
.th .th-kicker { display: inline-flex; align-items: center; gap: 8px; margin: 0; font-size: 12px; font-weight: 700; letter-spacing: 0.14em; text-transform: uppercase; color: var(--th-gold); }
.th .th-kicker::before { content: ""; width: 7px; height: 7px; transform: rotate(45deg); background: var(--th-gold); box-shadow: 0 0 8px var(--th-gold-glow); flex: none; }
.th .th-kicker--plain::before { display: none; }
.th .th-label { font-size: 11px; font-weight: 700; letter-spacing: 0.12em; text-transform: uppercase; color: var(--th-ink-3); }
.th .th-label--gold { color: var(--th-gold); }
.th .th-dot, .th .th-sep { color: var(--th-ink-faint); padding: 0 6px; }
/* "none" in a table cell is information, so it takes the muted INK, not the
   separator tone */
.th .th-nil { color: var(--th-ink-3); }
.th .th-nil--text { color: var(--th-ink-3); font-size: 12.5px; font-style: italic; }
/* a label with a shorter phone form (team-hub-view.js responsiveLabel) */
.th .th-label-short { display: none; }
@media (max-width: 700px) {
  .th { padding: 0 16px 8px; }
}

/* ---------- 4 · atoms ---------- */
/* buttons: neutral · gold (primary) · mode · sm · icon */
.th .th-btn { display: inline-flex; align-items: center; justify-content: center; gap: 8px; height: 38px; padding: 0 17px; border-radius: 999px; border: 1px solid var(--th-btn-line); background: var(--th-btn-bg); box-shadow: var(--th-btn-shadow); color: var(--th-ink); font-size: 14px; font-weight: 600; line-height: 1; white-space: nowrap; text-decoration: none; transition: background-color 0.15s ease, box-shadow 0.15s ease, transform 0.08s ease; }
.th .th-btn svg { width: 16px; height: 16px; color: var(--th-btn-icon); }
.th .th-btn:hover { background: var(--th-btn-hover); }
.th .th-btn:active { background: var(--th-btn-press); transform: scale(0.97); }
/* the focus ring hugs the pill (an outline follows border-radius, and unlike
   a box-shadow it survives forced colours) */
.th :is(.th-btn, .th-seg button, .th-band-toggle, .th-more):focus-visible { outline: 3px solid var(--th-btn-focus); outline-offset: 0; }
.th .th-btn--gold { border-color: transparent; color: var(--th-on-gold); background: var(--th-gold-btn); box-shadow: var(--th-gold-btn-glow); }
.th .th-btn--gold svg { color: currentColor; }
.th .th-btn--gold:hover { background: var(--th-gold-btn-hover); }
.th .th-btn--gold:active { background: var(--th-gold-btn-press); box-shadow: none; }
.th .th-btn--sm { height: 32px; padding: 0 13px; font-size: 13px; gap: 6px; }
.th .th-btn--sm svg { width: 15px; height: 15px; }
.th .th-btn--icon { width: 38px; padding: 0; }
.th .th-btn--sm.th-btn--icon { width: 32px; }
.th .th-btn.is-reported { color: var(--th-ink-3); cursor: default; }
.th .th-link { display: inline-flex; align-items: center; gap: 5px; font-size: 13px; font-weight: 600; color: var(--th-link); }
.th .th-link svg { width: 14px; height: 14px; }

/* tags */
.th .th-tag { display: inline-flex; align-items: center; gap: 5px; height: 22px; padding: 0 8px; border-radius: 999px; font-size: 11.5px; font-weight: 700; letter-spacing: 0.01em; line-height: 1; white-space: nowrap; color: var(--th-ink-2); border: 1px solid var(--th-line-2); background: var(--th-field-bg); flex: none; }
.th .th-tag svg { width: 13px; height: 13px; stroke-width: 2.1; }
.th .th-tag--spot { border-color: transparent; color: #3a2208; background: linear-gradient(180deg, #ffeaa9, #e2a849); box-shadow: inset 0 -1px 0 rgba(120, 70, 10, 0.35); }
.th .th-tag--spot svg { fill: currentColor; }
.th .th-tag--guide { border-color: transparent; color: var(--th-parch-ink); background: linear-gradient(180deg, #fff6e0, #f0dbb0); box-shadow: inset 0 -1px 0 rgba(120, 80, 20, 0.3); }
.th .th-tag--shared { color: var(--th-ink); border-color: var(--th-line-3); }
.th .th-tag--live { color: #fff; border-color: rgba(var(--th-m-rgb), 0.75); background: rgba(var(--th-m-rgb), 0.26); letter-spacing: 0.08em; text-transform: uppercase; font-size: 11px; }
.th .th-tag--live::before { content: ""; width: 7px; height: 7px; border-radius: 50%; background: #ffe2d6; box-shadow: 0 0 8px var(--th-m1); }
.th .th-tag--season { color: var(--th-m-ink); border-color: rgba(var(--th-m-rgb), 0.45); background: rgba(var(--th-m-rgb), 0.12); }
.th .th-tag--quiet { border-style: dashed; color: var(--th-ink-3); background: none; font-weight: 600; }
.th .th-tag--onart { background: var(--th-on-art-chip); color: var(--th-ink-2); border-style: solid; }
/* a boss's build names its boss */
.th .th-tag--ctx { padding-left: 3px; color: var(--th-m-ink); border-color: rgba(var(--th-m-rgb), 0.45); background: rgba(var(--th-m-rgb), 0.12); }
.th .th-tag--ctx.th-tag--onart { background: var(--th-on-art-chip); }
.th .th-tag-ic { width: 16px; height: 16px; border-radius: 5px; object-fit: cover; flex: none; }

/* switch: a real checkbox; the knob reads its :checked state */
.th .th-switch { position: relative; display: inline-flex; align-items: center; gap: 9px; height: 36px; padding: 0 4px; font-size: 13.5px; font-weight: 600; color: var(--th-ink-2); white-space: nowrap; cursor: pointer; }
.th .th-switch input { position: absolute; opacity: 0; width: 1px; height: 1px; margin: 0; }
.th .th-switch-knob { position: relative; width: 36px; height: 21px; border-radius: 999px; background: var(--th-btn-hover); border: 1px solid transparent; flex: none; transition: background-color 0.15s ease; }
.th .th-switch-knob::after { content: ""; position: absolute; top: 1px; left: 1px; width: 17px; height: 17px; border-radius: 50%; background: #ffffff; box-shadow: 0 1px 2px rgba(0, 0, 0, 0.4); transition: left 0.15s ease; }
.th .th-switch input:checked + .th-switch-knob { background: var(--th-switch-on); border-color: var(--th-switch-on-edge); }
.th .th-switch input:checked + .th-switch-knob::after { left: 16px; background: var(--th-switch-knob-on); }
.th .th-switch input:focus-visible + .th-switch-knob { outline: 3px solid var(--th-btn-focus); outline-offset: 1px; }

/* segmented control (Sort) and the density toggle (View) */
.th .th-seg-group { display: inline-flex; align-items: center; gap: 8px; }
.th .th-seg { display: inline-flex; padding: 3px; gap: 2px; border-radius: 999px; background: var(--th-btn-track); border: 1px solid transparent; }
.th .th-seg button { display: inline-flex; align-items: center; gap: 7px; height: 30px; padding: 0 14px; border: 0; border-radius: 999px; background: none; font-size: 13.5px; font-weight: 600; line-height: 1; color: var(--th-ink-3);; transition: color 0.15s ease, background-color 0.15s ease; }
.th .th-seg button:hover { color: var(--th-ink); }
.th .th-seg button[aria-pressed="true"] { color: var(--th-sel-ink); background: var(--th-sel-bg); box-shadow: var(--th-sel-shadow); }
.th .th-seg svg { width: 15px; height: 15px; }
/* the density icons: inactive = muted ink, active = on the selected fill */
.th .th-seg--density .th-dens-ic { width: 20px; height: 20px; color: var(--th-dens-ic); stroke-width: 1.9; }
.th .th-seg--density button[aria-pressed="true"] .th-dens-ic { color: var(--th-dens-ic-on); }
.th .th-dens-ic .df { fill: currentColor; stroke: none; }
.th .th-dens-ic .dt { stroke-width: 1.5; }

/* votes (the opened build's control) */
.th .th-votes { display: inline-flex; height: 38px; border-radius: 999px; border: 1px solid var(--th-btn-line); background: var(--th-btn-bg); box-shadow: var(--th-btn-shadow); overflow: hidden; flex: none; }
.th .th-votes button { display: inline-flex; align-items: center; gap: 5px; padding: 0 12px 0 11px; border: 0; background: none; font-size: 14px; font-weight: 700; color: var(--th-ink-2); }
.th .th-votes button + button { border-left: 1px solid var(--th-btn-divide); }
.th .th-votes button:hover { background: var(--th-btn-bg); }
/* the pair clips its children, so a vote's focus ring is drawn inside it */
.th .th-votes button:focus-visible { outline: 2px solid var(--th-btn-focus); outline-offset: -3px; }
.th .th-votes svg { width: 14px; height: 14px; fill: currentColor; stroke-width: 1; }
.th .th-votes .th-v-up svg { color: var(--th-up); }
.th .th-votes .th-v-dn svg { color: var(--th-ink-3); }
.th .th-votes .th-v-up[aria-pressed="true"] { color: var(--th-up); background: rgba(95, 224, 165, 0.12); }
.th .th-votes .th-v-dn[aria-pressed="true"] { color: var(--th-down); background: rgba(255, 154, 160, 0.12); }
.th .th-votes .th-v-dn[aria-pressed="true"] svg { color: var(--th-down); }

/* avatars */
.th .th-av { position: relative; display: inline-grid; place-items: center; width: 22px; height: 22px; border-radius: 50%; flex: none; overflow: hidden; font-size: 11.5px; font-weight: 700; line-height: 1; }
.th .th-av img { position: absolute; inset: 0; width: 100%; height: 100%; object-fit: cover; }
.th .th-av img.is-missing { display: none; }
.th .th-av-ini { color: var(--th-ink); }
.th .th-av--sm { width: 18px; height: 18px; font-size: 11px; }
.th .th-av--md { width: 20px; height: 20px; font-size: 11px; }
.th .th-av--lg { width: 34px; height: 34px; font-size: 14px; }
.th .th-av--ini, .th .th-av:has(img) { color: var(--th-ink); background: var(--th-av-ini); border: 1px solid rgba(255, 255, 255, 0.2); }
.th .th-av--ph { color: var(--th-ink-3); background: rgba(255, 255, 255, 0.07); border: 1px dashed var(--th-line-3); }
.th .th-av--creator { border: 1.5px solid #f3d590; box-shadow: 0 0 8px rgba(240, 205, 126, 0.5); }
.th .th-by { display: inline-flex; align-items: center; gap: 6px; min-width: 0; }
.th .th-by-name { min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; color: var(--th-ink-2); font-weight: 600; }
.th a.th-by-name:hover { text-decoration: underline; }
.th .th-by-name.is-unknown { color: var(--th-ink-3); font-style: italic; font-weight: 500; }
.th .th-seal { display: inline-flex; align-items: center; height: 19px; padding: 0 7px; border-radius: 6px; font-size: 11px; font-weight: 800; letter-spacing: 0.06em; text-transform: uppercase; color: var(--th-gold); border: 1px solid var(--th-gold-line); flex: none; }

/* face: a square portrait. Sizes 24 · 28 · 32 · 40 (default) · 44. The rarity
   paints the bottom edge; the element badge sits bottom-right; a near-black
   crop (.is-dark-art) is drawn from the full-body art over its element glow;
   .is-filter-match rings the cookies the toolbar filter matched. */
.th .th-face { position: relative; isolation: isolate; display: inline-block; flex: none; width: 40px; height: 40px; border-radius: 9px; background: var(--th-surface-3); }
.th .th-face > .th-face-img { position: relative; width: 100%; height: 100%; object-fit: cover; border-radius: inherit; }
.th .th-face::after { content: ""; position: absolute; inset: 0; border-radius: inherit; pointer-events: none; box-shadow: inset 0 0 0 1px rgba(255, 255, 255, 0.16), inset 0 -2.5px 0 var(--th-rc, transparent); }
.th .th-face-ini { position: absolute; inset: 0; display: grid; place-items: center; font-size: 11px; font-weight: 800; color: var(--th-ink-3); visibility: hidden; }
.th .th-face:has(img.is-missing) .th-face-ini { visibility: visible; }
.th .th-face img.is-missing { opacity: 0; }
/* the element badge is a share of the face at every size, so one number sizes
   it everywhere; a third of it hangs outside the corner, and it sits ABOVE the
   face's ::after ring and rarity edge, which paint after it otherwise */
.th .th-face-el { position: absolute; z-index: 1; right: calc(var(--th-face-el-scale) * -30%); bottom: calc(var(--th-face-el-scale) * -30%); width: calc(var(--th-face-el-scale) * 100%); height: calc(var(--th-face-el-scale) * 100%); min-width: 9px; min-height: 9px; border-radius: 50%; box-shadow: 0 0 0 1.5px var(--th-surface-1); }
.th .th-face--24 { width: 24px; height: 24px; border-radius: 6px; }
.th .th-face--28 { width: 28px; height: 28px; border-radius: 7px; }
.th .th-face--32 { width: 32px; height: 32px; border-radius: 8px; }
.th .th-face--44 { width: 44px; height: 44px; border-radius: 10px; }
.th .th-face-crop { position: absolute; inset: 0; overflow: hidden; border-radius: inherit; }
/* the full-body art at a fixed 2.5 frames wide, its face (--th-hx/--th-hy, a
   share of the art's own width and height, from HERO_ART_FOCUS) moved to the
   frame's centre: placed at the centre, then pulled back by that share of
   itself, which holds whatever the art's proportions */
.th .th-face-hero { position: absolute; width: 250%; max-width: none; left: 50%; top: 50%; transform: translate(calc(-1 * var(--th-hx, 50%)), calc(-1 * var(--th-hy, 30%))); filter: drop-shadow(0 0 1px rgba(236, 228, 255, 0.9)); }
/* a focused portrait (SQUARE_ART_FOCUS in team-hub-view.js): scaled about the
   face's centre (--th-fx/--th-fy) by --th-fz and moved to the frame's centre,
   inside the crop so the element badge can still hang outside the corner. The
   round fan head in team-hub.css reads the same three properties. */
.th .th-face-crop > .th-face-img { display: block; width: 100%; height: 100%; object-fit: cover; }
.th .th-face.has-art-focus .th-face-img { transform-origin: var(--th-fx) var(--th-fy); transform: translate(calc(50% - var(--th-fx)), calc(50% - var(--th-fy))) scale(var(--th-fz)); }
.th .th-face.is-dark-art { background: radial-gradient(circle at 50% 42%, rgba(var(--th-el), 1) 0%, rgba(var(--th-el), 0.55) 45%, var(--th-dark-art-face) 100%); }
.th .th-face.is-dark-art::after { box-shadow: inset 0 0 0 1px rgba(var(--th-el), 0.9), inset 0 -2.5px 0 var(--th-rc, transparent); }
.th .th-face.is-filter-match { outline: 2px solid var(--th-match); outline-offset: 2px; }
.th .th-face--hole { background: none; border: 1.5px dashed var(--th-line-3); }
.th .th-face--hole::after { display: none; }


.th .th-orn { position: absolute; z-index: 3; width: 9px; height: 9px; transform: rotate(45deg); background: var(--th-gold); box-shadow: var(--th-orn-ring); }
.th .th-orn--tl { top: -5px; left: 40px; }
.th .th-orn--tr { top: -5px; right: 40px; }

/* ---------- 5 · the framed page header ---------- */
/* The strongest "this is the new site" signal: a gold-framed panel over a
   picture (blurred and veiled), the page's art breaking out of it, the kicker,
   a CookieRun title, a lede, facts, the primary CTAs, and up to two side
   panels. Built on the hubs (team-hub.css section 5) and promoted here
   2026-10-26 when the tier lists became its second user; moved VERBATIM, so
   the hubs did not move a pixel. Markup:
     <section class="th-hub-head [th-hub-head--soft-art]">
       <div class="th-hub-head-clip"><img class="th-hub-head-art"><span class="th-hub-head-veil"></span></div>
       <i class="th-orn th-orn--tl|tr|bl|br"></i>
       <div class="th-hub-head-in" data-panels="0|1|2">
         <div class="th-hub-copy"><img class="th-hub-emblem"> kicker, h1.th-hub-title,
           p.th-hub-lede, p.th-hub-facts, div.th-hub-cta</div>
         <aside class="th-hub-panel"> .th-hub-panel-k, h2, .th-hub-panel-sub ... .th-hub-panel-foot</aside>
     </div></section>
   What a hub draws INSIDE its panels (the season progress, featured cookies,
   last season's core) stays in team-hub.css. */
.th .th-hub-head { position: relative; margin-top: 22px; border-radius: 22px; border: 1px solid var(--th-gold-line); box-shadow: inset 0 0 0 4px rgba(var(--th-abyss-rgb), 0.55), inset 0 0 0 5px var(--th-gold-faint), var(--th-shadow-2); }
.th .th-hub-head-clip { position: absolute; inset: 0; border-radius: 21px; overflow: hidden; }
.th .th-hub-head-art { position: absolute; inset: -18px; width: calc(100% + 36px); height: calc(100% + 36px); object-fit: cover; object-position: 50% 38%; filter: blur(4px) saturate(1.15); }
/* a small capture (the mode pages' event screenshots): blurred until its
   lettering reads as colour, and drawn a touch darker to match */
.th .th-hub-head--soft-art .th-hub-head-art { inset: -40px; width: calc(100% + 80px); height: calc(100% + 80px); filter: blur(14px) saturate(1.2) brightness(0.85); }
.th .th-hub-head-veil { position: absolute; inset: 0; background:
    linear-gradient(90deg, var(--th-veil-strong) 0%, var(--th-veil-strong) 28%, rgba(var(--th-m-rgb), 0.12) 47%, var(--th-veil) 58%, var(--th-veil-strong) 100%),
    linear-gradient(180deg, transparent 45%, var(--th-veil) 100%); }
.th .th-orn--bl { bottom: -5px; left: 40px; }
.th .th-orn--br { bottom: -5px; right: 40px; }
.th .th-hub-head-in { position: relative; z-index: 2; display: grid; grid-template-columns: minmax(0, 1fr) var(--th-panel-w) var(--th-panel-w); gap: 16px; align-items: stretch; padding: 24px 24px 24px 32px; }
/* the copy stops short of the emblem (absolute, at the column's right edge):
   a wide emblem (Guild Boss's) would otherwise sit under the lede's last words */
.th .th-hub-copy { display: flex; flex-direction: column; justify-content: center; max-width: min(470px, calc(100% - 200px)); }
/* no emblem (a page that leaves it out): nothing to stop short of */
.th .th-hub-copy--bare { max-width: min(560px, 100%); }
/* the mode emblem stands between the copy and the panels (absolute against
   .th-hub-head-in; the panels paint over its edge) */
.th .th-hub-emblem { position: absolute; z-index: 0; right: calc(2 * var(--th-panel-w) + 14px); bottom: -8px; height: 252px; width: auto; filter: drop-shadow(0 14px 22px rgba(0, 0, 0, 0.6)); pointer-events: none; }
/* one panel, or none, beside the copy (renderHubHeader states the count);
   only the wide layout needs telling - narrower ones already stack */
@container th (min-width: 1181px) {
  .th .th-hub-head-in[data-panels="1"] { grid-template-columns: minmax(0, 1fr) var(--th-panel-w); }
  .th .th-hub-head-in[data-panels="1"] .th-hub-emblem { right: calc(var(--th-panel-w) + 14px); }
  .th .th-hub-head-in[data-panels="0"] { grid-template-columns: minmax(0, 1fr); }
  .th .th-hub-head-in[data-panels="0"] .th-hub-emblem { right: 24px; }
}
.th .th-hub-copy > :not(.th-hub-emblem) { position: relative; z-index: 1; }
.th .th-hub-title { margin-top: 8px; font-size: 48px; line-height: 1; text-shadow: var(--th-heading-shadow), 0 0 30px rgba(var(--th-m-rgb), 0.35); }
.th .th-hub-lede { margin-top: 12px; font-size: 15px; line-height: 1.55; color: var(--th-ink-2); }
.th .th-hub-facts { margin-top: 12px; display: flex; flex-wrap: wrap; gap: 2px 18px; font-size: 13.5px; color: var(--th-ink-3); }
.th .th-hub-facts b { color: var(--th-ink); font-weight: 700; }
.th .th-hub-cta { margin-top: 16px; display: flex; flex-wrap: wrap; gap: 10px; }
.th .th-hub-panel { position: relative; z-index: 1; display: flex; flex-direction: column; padding: 16px 18px 14px; border-radius: 16px; background: var(--th-glass); border: 1px solid var(--th-gold-line); box-shadow: inset 0 0 0 3px rgba(0, 0, 0, 0.3), inset 0 0 0 4px var(--th-gold-faint); }
.th .th-hub-panel-k { display: flex; align-items: center; justify-content: space-between; gap: 8px; }
.th .th-hub-panel h2 { margin-top: 8px; font-size: 23px; line-height: 1.08; }
.th .th-hub-panel-sub { margin-top: 3px; font-size: 13.5px; color: var(--th-ink-2); }
.th .th-hub-panel-foot { margin-top: auto; padding-top: 10px; border-top: 1px dashed var(--th-line-2); display: flex; align-items: center; gap: 7px; font-size: 12.5px; color: var(--th-ink-3); }
.th .th-hub-panel-foot svg { width: 14px; height: 14px; color: var(--th-gold); }
.th .th-hub-panel-foot b { color: var(--th-ink-2); font-weight: 600; }
@container th (max-width: 1180px) {
  .th .th-hub-head-in { grid-template-columns: minmax(0, 1fr) minmax(0, 1fr); padding: 22px 22px 20px 26px; }
  .th .th-hub-copy { grid-column: 1 / -1; display: block; max-width: none; padding-right: 210px; min-height: 200px; }
  .th .th-hub-copy--bare { padding-right: 0; min-height: 0; }
  .th .th-hub-emblem { right: 24px; top: 6px; bottom: auto; height: 210px; }
}
@container th (max-width: 700px) {
  .th .th-hub-head { margin-top: 14px; border-radius: 20px; }
  .th .th-hub-head-clip { border-radius: 19px; }
  .th .th-hub-head-art { object-position: 64% 30%; }
  .th .th-hub-head-veil { background:
      radial-gradient(260px 220px at 82% 70px, rgba(var(--th-m-rgb), 0.16), rgba(0, 0, 0, 0) 70%),
      linear-gradient(180deg, rgba(var(--th-ground-rgb), 0.5) 0%, var(--th-veil) 22%, var(--th-veil-strong) 44%, var(--th-veil-strong) 100%); }
  .th .th-orn--tl, .th .th-orn--bl { left: 26px; }
  .th .th-orn--tr, .th .th-orn--br { right: 26px; }
  .th .th-hub-head-in { display: flex; flex-direction: column; gap: 10px; padding: 18px 12px 12px; }
  .th .th-hub-copy { display: block; max-width: none; min-height: 0; padding: 0 4px 6px; }
  .th .th-hub-copy::after { content: ""; display: block; clear: both; }
  .th .th-hub-emblem { position: static; float: right; height: 112px; margin: -8px -8px 0 2px; shape-outside: inset(0 0 0 16px); }
  /* block-level (a flex box avoids the floated emblem and its text wraps
     beside it, where an inline kicker would drop below it) */
  .th .th-hub-copy .th-kicker { display: flex; font-size: 11.5px; letter-spacing: 0.12em; }
  .th .th-hub-copy .th-kicker .th-label-long, .th .th-hub-cta .th-label-long { position: absolute; width: 1px; height: 1px; overflow: hidden; clip: rect(0 0 0 0); white-space: nowrap; }
  .th .th-hub-copy .th-kicker .th-label-short, .th .th-hub-cta .th-label-short { display: inline; }
  .th .th-hub-title { font-size: 38px; }
  .th .th-hub-lede { margin-top: 10px; font-size: 15px; line-height: 1.5; }
  .th .th-hub-facts { margin-top: 10px; gap: 2px 16px; font-size: 14px; }
  .th .th-hub-cta { clear: both; display: grid; grid-template-columns: minmax(0, 1fr) minmax(0, 1fr); gap: 8px; margin-top: 14px; }
  .th .th-hub-cta .th-btn { height: 44px; padding: 0 14px; font-size: 15px; }
  .th .th-hub-panel { padding: 14px 14px 11px; border-radius: 15px; }
  .th .th-hub-panel h2 { margin-top: 6px; font-size: 23px; }
  .th .th-hub-panel-sub { font-size: 14px; }
  .th .th-hub-panel-foot { font-size: 13px; }
}

/* ---------- 7 · season bands ---------- */
.th .th-band { margin-top: 30px; }
/* SECTION BANDING. Every second band in a list of bands sits on a full-width
   strip one step off the page ground, so where one section ends and the next
   begins reads at a glance rather than only from the headings. On the hubs the
   bands are seasons in the build list (.th-list); any other page opts in by
   putting its sections, as .th-band, directly inside a .th-bands wrapper. The step is as
   small as still tells two strips apart: lighter on the dark ink ground (a
   darker step is lost against near-black), darker on the light lilac one (a
   lighter step would take contrast from the white cards).
   HOW: a pseudo-element on the band, spread to the window's edges by a
   box-shadow and cut back to the band's own height by clip-path. The clip is
   on the PSEUDO, so nothing inside the band is clipped - a treasure popover
   can still overhang the band's foot - and the spread needs no 100vw, which
   counts the scrollbar. z-index -1 puts it behind every band's content within
   the hub root's stacking context (.th's container-type gives it layout
   containment, which makes one). The band must NOT isolate: a stacking context
   there would paint a popover that overhangs one band beneath the next band's
   strip. Bands carry their spacing as padding so the strip includes it. */
.th { --th-band-alt: rgba(255, 255, 255, 0.028); --th-band-alt-solid: #111216; }
.th :is(.th-list, .th-bands) > .th-band { position: relative; margin-top: 0; padding: 26px 0 30px; }
.th :is(.th-list, .th-bands) > .th-band:nth-child(even)::before { content: ""; position: absolute; inset: 0; z-index: -1; background: var(--th-band-alt); box-shadow: 0 0 0 100vmax var(--th-band-alt); clip-path: inset(0 -100vmax); pointer-events: none; }
/* the rule's diamond is filled to hide the line behind it: fill it with the strip */
.th :is(.th-list, .th-bands) > .th-band:nth-child(even) .th-band-rule::before { background: var(--th-band-alt-solid); }
.th .th-band-head { display: flex; align-items: center; gap: 14px; min-height: 44px; margin-bottom: 12px; padding: 0 2px; }
.th .th-band-id { display: flex; align-items: baseline; gap: 12px; min-width: 0; white-space: nowrap; }
.th .th-band-k { align-self: center; display: inline-flex; align-items: center; height: 22px; padding: 0 9px; border-radius: 6px; font-size: 11px; font-weight: 800; letter-spacing: 0.12em; text-transform: uppercase; color: var(--th-gold); border: 1px solid var(--th-gold-line); background: var(--th-gold-faint); flex: none; }
.th .th-band-id .th-tag--live { align-self: center; }
.th .th-band-name { font-size: 22px; line-height: 1.15; min-width: 0; overflow: hidden; text-overflow: ellipsis; }
.th .th-band-meta { font-size: 13.5px; color: var(--th-ink-3); }
.th .th-band-rule { position: relative; flex: 1; height: 1px; min-width: 40px; background: linear-gradient(90deg, var(--th-gold-line), rgba(240, 205, 126, 0)); }
.th .th-band-rule::before { content: ""; position: absolute; left: -4px; top: -4px; width: 7px; height: 7px; transform: rotate(45deg); border: 1px solid var(--th-gold); background: var(--th-ground); }
.th .th-band-count { font-size: 13.5px; color: var(--th-ink-3); white-space: nowrap; }
.th .th-band-count b { color: var(--th-ink); font-weight: 700; }
.th .th-band-toggle { display: inline-flex; align-items: center; gap: 5px; height: 30px; padding: 0 12px; border-radius: 999px; border: 1px solid var(--th-btn-line); background: var(--th-btn-bg); box-shadow: var(--th-btn-shadow); font-size: 13px; font-weight: 600; color: var(--th-ink); white-space: nowrap; flex: none; transition: background-color 0.15s ease; }
.th .th-band-toggle:hover { background: var(--th-btn-hover); }
.th .th-band-toggle svg { width: 15px; height: 15px; color: var(--th-btn-icon); }
.th .th-band--live .th-band-name { text-shadow: var(--th-heading-shadow), 0 0 22px rgba(var(--th-m-rgb), 0.55); }
.th .th-band--live .th-band-rule { background: linear-gradient(90deg, rgba(var(--th-m-rgb), 0.7), rgba(var(--th-m-rgb), 0)); }
.th .th-band--live .th-band-rule::before { border-color: var(--th-m1); }
/* a collapsed band (the window rule's counted row): one dashed row with faces */
.th .th-band--collapsed .th-band-head { margin-bottom: 0; padding: 8px 10px 8px 16px; border-radius: 14px; border: 1px dashed var(--th-line-3); background: var(--th-wash); }
.th .th-band--collapsed .th-band-name { font-size: 19px; }
.th .th-band-faces { display: flex; }
.th .th-band-faces img { width: 28px; height: 28px; border-radius: 50%; margin-left: -8px; border: 1.5px solid rgba(240, 205, 126, 0.6); box-shadow: 0 0 0 1.5px var(--th-surface-1); }
.th .th-band-faces img:first-child { margin-left: 0; }

/* the label that leads a band's Community Spotlight builds */
.th .th-band-label { display: flex; align-items: center; gap: 7px; margin: 0 0 10px 2px; font-size: 11.5px; font-weight: 800; letter-spacing: 0.12em; text-transform: uppercase; color: var(--th-gold); }
.th .th-band-label svg { width: 13px; height: 13px; fill: currentColor; stroke-width: 1.4; }
.th .th-cards > .th-band-label { grid-column: 1 / -1; margin: 0 0 -6px 2px; }
.th .th-rows + .th-band-label, .th .th-ob + .th-band-label { margin-top: 14px; }

/* the empty current season */
.th .th-season-empty { position: relative; display: flex; align-items: center; gap: 20px; padding: 14px 18px 14px 14px; border-radius: 18px; border: 1px dashed rgba(240, 205, 126, 0.42); background: radial-gradient(520px 200px at 0% 50%, rgba(var(--th-m-rgb), 0.17), rgba(0, 0, 0, 0) 70%), var(--th-wash); }
.th .th-season-empty-art { width: 64px; height: 64px; flex: none; display: grid; place-items: center; border-radius: 50%; background: radial-gradient(circle, rgba(var(--th-m-rgb), 0.35), rgba(var(--th-m-rgb), 0) 70%); }
.th .th-season-empty-art img { height: 74px; width: auto; filter: drop-shadow(0 6px 10px rgba(0, 0, 0, 0.6)); }
.th .th-season-empty h3 { font-size: 19px; line-height: 1.2; }
.th .th-season-empty p { margin-top: 3px; font-size: 14.5px; color: var(--th-ink-2); max-width: 760px; }
.th .th-season-empty-acts { margin-left: auto; display: flex; flex-wrap: wrap; gap: 10px; flex: none; }

/* LIST WINDOW: "Show N more", directly after a band's last drawn build. Dashed
   like a collapsed band, because it stands for builds that are not drawn. */
.th .th-more { display: flex; align-items: center; gap: 11px; width: 100%; min-height: 50px; margin-top: 12px; padding: 0 18px 0 8px; border-radius: 999px; border: 0; background: var(--th-btn-track); text-align: left; color: var(--th-ink); transition: background-color 0.15s ease; }
.th .th-more:hover { background: var(--th-btn-hover); }
.th .th-cards > .th-more { grid-column: 1 / -1; margin-top: 0; }
.th .th-more-ic { display: grid; place-items: center; width: 34px; height: 34px; flex: none; border-radius: 50%; background: var(--th-sel-bg); color: var(--th-sel-ink); }
.th .th-more-ic svg { width: 16px; height: 16px; stroke-width: 2.3; }
.th .th-more-tx { font-size: 15px; font-weight: 700; }
.th .th-more-n { margin-left: auto; font-size: 13px; color: var(--th-ink-3); white-space: nowrap; }

@container th (max-width: 1080px) and (min-width: 701px) {
  /* mid width: the dates drop under the name rather than cutting it short */
  .th .th-band-id { flex-wrap: wrap; row-gap: 0; }
  .th .th-band-meta { flex-basis: 100%; }
}
@container th (max-width: 700px) {
  .th .th-band { margin-top: 26px; }
  .th :is(.th-list, .th-bands) > .th-band { padding: 22px 0 26px; }
  /* three lines: kicker ◇──── count [toggle] / name / meta */
  .th .th-band-head { display: grid; grid-template-columns: auto minmax(24px, 1fr) auto auto; grid-template-areas: "k rule count tog" "name name name name" "meta meta meta meta"; align-items: center; column-gap: 10px; row-gap: 0; min-height: 0; margin-bottom: 12px; padding: 0; }
  .th .th-band-id { display: contents; }
  .th .th-band-id > .th-band-k, .th .th-band-id > .th-tag { grid-area: k; justify-self: start; }
  .th .th-band-name { grid-area: name; margin-top: 7px; font-size: 21px; white-space: normal; }
  .th .th-band-meta { grid-area: meta; margin-top: 2px; font-size: 13.5px; white-space: normal; }
  .th .th-band-rule { grid-area: rule; min-width: 24px; }
  .th .th-band-count { grid-area: count; font-size: 13px; }
  .th .th-band-toggle { grid-area: tog; height: 36px; padding: 0 13px; }
  .th .th-band--collapsed .th-band-head { grid-template-areas: "k rule rule tog" "name name faces faces" "meta meta count count"; padding: 12px 12px 12px 14px; }
  .th .th-band--collapsed .th-band-name { font-size: 19px; }
  .th .th-band--collapsed .th-band-faces { grid-area: faces; justify-self: end; margin-top: 7px; }
  .th .th-band--collapsed .th-band-count { justify-self: end; margin-top: 2px; }
  .th .th-band-faces img { width: 26px; height: 26px; margin-left: -7px; }
  /* empty current season: art + title row, copy, then two 44 px actions */
  .th .th-season-empty { display: grid; grid-template-columns: 52px minmax(0, 1fr); align-items: center; column-gap: 12px; row-gap: 8px; padding: 14px 14px 14px 12px; border-radius: 16px; }
  .th .th-season-empty-tx { display: contents; }
  .th .th-season-empty-art { width: 52px; height: 52px; }
  .th .th-season-empty-art img { height: 62px; }
  .th .th-season-empty h3 { font-size: 18px; line-height: 1.22; }
  .th .th-season-empty:not(:has(.th-season-empty-art)) h3 { grid-column: 1 / -1; }
  .th .th-season-empty p { grid-column: 1 / -1; margin-top: 0; font-size: 15px; line-height: 1.48; }
  .th .th-season-empty-acts { grid-column: 1 / -1; display: grid; grid-template-columns: minmax(0, 1fr) auto; gap: 8px; margin: 4px 0 0; }
  .th .th-season-empty-acts .th-btn { height: 44px; padding: 0 18px; font-size: 15px; }
}


/* ---------- 16 · toasts ---------- */
/* The always-present live region: today's hubs only print status inside an
   opened build, so most messages were invisible. */
.th .th-toasts { position: fixed; z-index: 120; left: 50%; bottom: 20px; transform: translateX(-50%); display: flex; flex-direction: column; align-items: center; gap: 8px; width: max-content; max-width: calc(100vw - 32px); pointer-events: none; }
.th .th-toast { display: inline-flex; align-items: center; gap: 9px; max-width: 520px; min-height: 42px; padding: 9px 16px 9px 13px; border-radius: 12px; font-size: 14px; font-weight: 600; color: var(--th-ink); background: var(--th-surface-1); border: 1px solid var(--th-line-3); box-shadow: var(--th-shadow-pop); pointer-events: auto; }
.th .th-toast svg { width: 16px; height: 16px; color: var(--th-gold); }
.th .th-toast--success svg { color: var(--th-up); }
.th .th-toast--error { border-color: rgba(255, 154, 160, 0.55); }
.th .th-toast--error svg { color: var(--th-down); }


/* ---------- 17 · page-level states shared by every design-system page ---------- */
.th .th-band { scroll-margin-top: calc(var(--th-sticky-top) + 74px); }
.th .th-note { margin-top: 26px; padding: 12px 16px; border-radius: 14px; border: 1px dashed var(--th-line-3); background: var(--th-wash); font-size: 14.5px; color: var(--th-ink-2); }

/* the preview-clock notice (site-clock.js) - non-production hosts only, and
   only with ?at= set. Its usual styles live in team-surface.css, which a hub
   page does not load. */
.th > .tbs-clock-override { display: flex; flex-wrap: wrap; align-items: baseline; gap: 4px 9px; margin: 18px 0 0; padding: 9px 13px; border-radius: 12px; border: 1px dashed rgba(255, 196, 84, 0.55); background: rgba(255, 176, 32, 0.1); font-size: 13.5px; line-height: 1.45; color: var(--th-ink-2); }
.th > .tbs-clock-override .tbs-clock-override-tag { font-size: 11px; font-weight: 800; letter-spacing: 0.09em; text-transform: uppercase; color: #ffc454; }
.th > .tbs-clock-override code { font-size: 12.5px; }

/* motion: a reader who asked for less gets no transitions anywhere in the
   system. A page with movements of its own (a hover lift, an animation) adds
   its own lines beside them, as team-hub.css does. */
@media (prefers-reduced-motion: reduce) {
  .th *, .th *::before, .th *::after { transition: none !important; }
  .th .th-btn:active { transform: none; }
}

/* the page: a design-system page links shared-shell.css, this file and its
   own stylesheet, and no longer feature-page.css, so the route base it used to
   borrow from there is restated here */
body.th-page { font-family: "Outfit", system-ui, sans-serif; overflow-x: clip; }
/* the shell's injected chrome (contact footer, account pill, menu) is written
   for border-box sizing, which feature-page.css used to set page-wide */
body.th-page, body.th-page *, body.th-page *::before, body.th-page *::after { box-sizing: border-box; }
body.th-page .route-main { display: block; max-width: none; margin: 0; padding: 0 0 44px; }
body.th-page .route-footer { padding: 2rem 16px; text-align: center; font-size: 0.9rem; color: var(--tcb-ink-soft, #a7adba); }

/* ============================================================================
   L · LIGHT THEME
   ----------------------------------------------------------------------------
   The site's light palette (shared-shell.css): a lilac ground, white cards on a
   lavender ledge (a solid 3px offset), grape ink, the violet brand for every
   SELECTED and interactive state, jam as the second accent, gold kept as
   ORNAMENT (frames, gems, medallions, Spotlight, the primary button) with a
   deeper gold for gold TEXT. The Comfy team is a LIGHT game card carrying its
   cookie's element. Every rule leads with :root[data-theme="light"]; none
   changes a border width.
   ========================================================================== */


/* ---------- L1 · tokens ---------- */
:root[data-theme="light"] .th {
  color-scheme: light;
  --th-ground: #f7f3fd;
  --th-ground-rgb: 247, 243, 253;
  --th-band-alt: rgba(106, 63, 220, 0.04);
  --th-band-alt-solid: #f1ecfc;
  --th-ground-hi: #ffffff;
  --th-abyss-rgb: 255, 255, 255;
  --th-surface-1: #ffffff;
  --th-surface-2: #f8f4ff;
  --th-surface-3: #efe8fb;
  --th-surface-sunk: #f5f0fd;
  --th-glass: rgba(255, 255, 255, 0.93);
  --th-veil: rgba(250, 247, 254, 0.72);
  --th-veil-strong: rgba(250, 247, 254, 0.95);
  --th-line: #efe9f8;
  --th-line-2: #e2d8f3;
  --th-line-3: #c9b8ea;
  --th-ink: #23173b;                /* 16.7:1 on white */
  --th-ink-2: #4b3e67;              /* 9.6:1 */
  --th-ink-3: #5f527a;              /* 7.1:1 on white, 5.9 on #efe8fb */
  --th-ink-faint: #857aa6;          /* separators only */
  --th-heading: #2a1652;
  --th-heading-shadow: none;
  --th-text-on-art: none;

  --th-gold: #855400;               /* gold TEXT: 6.4:1 on white */
  --th-gold-2: #d39a3c;
  --th-gold-line: rgba(176, 116, 20, 0.42);
  --th-gold-faint: rgba(200, 140, 30, 0.13);
  --th-gold-glow: rgba(240, 170, 60, 0.4);
  --th-gold-gem: linear-gradient(135deg, #fff2c8 0%, #f2c96a 48%, #c4862a 100%);
  --th-orn-ring: 0 0 0 2px var(--th-ground), 0 0 0 3px rgba(176, 116, 20, 0.6);

  --th-sel-bg: #2a1652;
  --th-sel-ink: #ffffff;
  --th-sel-shadow: 0 1px 2px rgba(42, 22, 82, 0.35);
  --th-switch-on: #6a3fdc;
  --th-switch-on-edge: transparent;
  --th-switch-knob-on: #ffffff;
  --th-link: #6a3fdc;
  --th-match: #6a3fdc;
  --th-focus-ring: 0 0 0 3px rgba(106, 63, 220, 0.26);
  --th-focus-color: #6a3fdc;
  --th-up: #0e7450;
  --th-down: #c92d64;
  --th-dens-ic: #66598a;            /* 6.0:1 on the segment track */
  --th-dens-ic-on: #ffffff;

  --th-btn-bg: #efe8fb;
  --th-btn-hover: #e4d9f8;
  --th-btn-press: #dacdf4;
  --th-btn-line: transparent;
  --th-btn-shadow: none;
  --th-btn-icon: #4b3e67;
  --th-btn-track: #efe8fb;
  --th-btn-divide: rgba(42, 22, 82, 0.12);
  --th-btn-focus: rgba(106, 63, 220, 0.42);
  --th-gold-btn-glow: 0 6px 14px -8px rgba(200, 120, 30, 0.7);
  --th-field-bg: #ffffff;
  --th-wash: rgba(106, 63, 220, 0.035);
  --th-track: #e8dff7;
  --th-av-ini: linear-gradient(135deg, #5c3f9e, #3a2670);
  --th-ledge: #d6c8f2;
  --th-art-drop: drop-shadow(0 2px 3px rgba(60, 30, 110, 0.26));

  --th-ob-1: #ffffff;
  --th-ob-2: #fcfaff;
  --th-veil-rgb: 252, 250, 255;

  --th-plate-1: #ffffff;
  --th-plate-2: #fdfbff;
  --th-plate-ring-rgb: 255, 255, 255;
  --th-plate-gem-edge: #ffffff;
  --th-stage-floor-rgb: 92, 60, 150;
  --th-card-1: #ffffff;
  --th-card-2: #fdfbff;
  --th-card-veil-rgb: 255, 255, 255;
  --th-card-spot-1: #fffaf0;
  --th-card-spot-2: #fff3df;
  --th-team-plate-1: #ffffff;
  --th-team-plate-2: #fdfbff;
  --th-sunk-on-art: #f6f1fd;
  --th-on-art-chip: rgba(255, 255, 255, 0.94);
  --th-crown-edge: #ffffff;
  --th-dark-art-face: #211646;
  --th-dark-art-fan: #241a4d;
  --th-dark-stage-rgb: 232, 224, 252;

  --th-shadow-1: 0 3px 0 var(--th-ledge), 0 1px 2px rgba(60, 30, 120, 0.06), 0 12px 28px rgba(76, 40, 150, 0.1);
  --th-shadow-2: 0 3px 0 var(--th-ledge), 0 1px 2px rgba(60, 30, 120, 0.06), 0 24px 44px -22px rgba(76, 40, 150, 0.32);
  --th-shadow-pop: 0 0 0 3px rgba(255, 255, 255, 0.85), 0 26px 44px -14px rgba(46, 22, 96, 0.45);

  /* light-only */
  --th-el-edge: #a7a298;            /* no element (overridden by the .el-* tones, L2) */
  --th-el-ledge: #d8d4ca;
  --th-el-band-a: 0.9;
  --th-card-edge: rgba(196, 140, 40, 0.34);
  --th-card-mode-ledge: 0 3px 0 rgba(var(--th-m-rgb), 0.34);
}
/* mode text inks on light (the hue itself is unchanged) */
:root[data-theme="light"] .th.th-m-arena, :root[data-theme="light"] .th .th-m-arena { --th-m-ink: #a8321f; }      /* 6.7:1 on white */
:root[data-theme="light"] .th.th-m-alliance, :root[data-theme="light"] .th .th-m-alliance { --th-m-ink: #5536c8; }   /* 7.4:1 on white */
:root[data-theme="light"] .th.th-m-guild, :root[data-theme="light"] .th .th-m-guild { --th-m-ink: #8a22c4; }      /* 6.5:1 on white */
:root[data-theme="light"] .th.th-m-story, :root[data-theme="light"] .th .th-m-story { --th-m-ink: #17784a; }      /* 5.6:1 on white */
:root[data-theme="light"] .th.th-m-trial, :root[data-theme="light"] .th .th-m-trial { --th-m-ink: #a8401a; }      /* 6.3:1 on white */
:root[data-theme="light"] .th.th-m-nether, :root[data-theme="light"] .th .th-m-nether { --th-m-ink: #4b3cc4; }     /* 7.6:1 on white */
:root[data-theme="light"] .th.th-m-cake, :root[data-theme="light"] .th .th-m-cake { --th-m-ink: #7a2fc0; }       /* 7.0:1 on white */
:root[data-theme="light"] .th.th-m-arcade, :root[data-theme="light"] .th .th-m-arcade { --th-m-ink: #4a730c; }     /* 5.6:1 on white */
:root[data-theme="light"] .th.th-m-events, :root[data-theme="light"] .th .th-m-events { --th-m-ink: #6a3fdc; }     /* 6.1:1 on white */
/* rarity words as TEXT take deeper inks (>= 4.5:1 on white and the hover row) */
:root[data-theme="light"] .th .r-common { --th-rc-ink: #7a5a3a; }
:root[data-theme="light"] .th .r-rare { --th-rc-ink: #1f69b8; }
:root[data-theme="light"] .th .r-epic { --th-rc-ink: #b0328a; }
:root[data-theme="light"] .th .r-super-epic { --th-rc-ink: #7a45c8; }
:root[data-theme="light"] .th .r-legendary { --th-rc-ink: #0b7a6e; }
:root[data-theme="light"] .th .r-ancient { --th-rc-ink: #5b2fc4; }
:root[data-theme="light"] .th .r-dragon { --th-rc-ink: #b0421c; }
:root[data-theme="light"] .th .r-beast { --th-rc-ink: #b8323b; }
:root[data-theme="light"] .th .r-witch { --th-rc-ink: #a0249a; }
:root[data-theme="light"] .th .r-special { --th-rc-ink: #866400; }

/* ---------- L2 · element tones for the light plates ---------- */
/* On white the hue alone carries the stage, banner and ring tints (rgba of
   --th-el), but a 1px edge and the 3px ledge need SOLID tones per element: the
   same alpha that makes Darkness a clear violet leaves Light or Ice a ghost.
   Each pair is the TRUE element hue taken to one lightness: --th-el-edge
   ~2.6:1 against white (a crisp edge, never text), --th-el-ledge ~1.45:1 (the
   site ledge is 1.5:1). --th-el-band-a is how strongly the element fills the
   name banner under grape type (defaults for "no element" sit in L1, on the
   root, so a strip inherits its item's tone), so every element reads as its own colour at a
   similar strength while grape stays >= 4.5:1 (most >= 6.9:1). Electricity
   (a saturated gold) and Light (a paler cream-gold) are both yellow by the
   game's design; the band strength keeps them apart. */
:root[data-theme="light"] .th .el-chaos { --th-el-edge: #d975ff; --th-el-ledge: #efc6ff; --th-el-band-a: 0.62; }
:root[data-theme="light"] .th .el-darkness { --th-el-edge: #a394f0; --th-el-ledge: #d8d1f8; --th-el-band-a: 0.5; }
:root[data-theme="light"] .th .el-earth { --th-el-edge: #c89664; --th-el-ledge: #e7d1bb; --th-el-band-a: 0.56; }
:root[data-theme="light"] .th .el-electricity { --th-el-edge: #bfa00e; --th-el-ledge: #f4d33a; --th-el-band-a: 0.66; }
:root[data-theme="light"] .th .el-fire { --th-el-edge: #ee8168; --th-el-ledge: #f8cbc0; --th-el-band-a: 0.6; }
:root[data-theme="light"] .th .el-grass { --th-el-edge: #0ab67a; --th-el-ledge: #a1e3cc; --th-el-band-a: 0.62; }
:root[data-theme="light"] .th .el-ice { --th-el-edge: #2ab0cb; --th-el-ledge: #88e2f4; --th-el-band-a: 0.66; }
:root[data-theme="light"] .th .el-light { --th-el-edge: #b89f4b; --th-el-ledge: #f2d268; --th-el-band-a: 0.82; }
:root[data-theme="light"] .th .el-poison { --th-el-edge: #89ae42; --th-el-ledge: #bee17c; --th-el-band-a: 0.72; }
:root[data-theme="light"] .th .el-steel { --th-el-edge: #919eca; --th-el-ledge: #cfd4e8; --th-el-band-a: 0.72; }
:root[data-theme="light"] .th .el-water { --th-el-edge: #46a6fc; --th-el-ledge: #b0daff; --th-el-band-a: 0.66; }
:root[data-theme="light"] .th .el-wind { --th-el-edge: #6caf8f; --th-el-ledge: #b0dfc8; --th-el-band-a: 0.78; }
:root[data-theme="light"] .th .el-none { --th-el-edge: #a7a298; --th-el-ledge: #d8d4ca; --th-el-band-a: 0.9; }

/* ---------- L3 · literal overrides (the atoms, sections and toasts above) ---------- */
/* ornaments: the bright gem fill with a crisp amber edge (a glow alone
   disappears on white) */
:root[data-theme="light"] .th .th-kicker::before { background: var(--th-gold-gem); box-shadow: 0 0 0 1px rgba(150, 95, 10, 0.55); }
:root[data-theme="light"] .th .th-orn { background: var(--th-gold-gem); }
:root[data-theme="light"] .th .th-tag--season { background: #fff3ef; }
:root[data-theme="light"] .th.th-m-alliance .th-tag--season, :root[data-theme="light"] .th .th-m-alliance .th-tag--season { background: #f4f1ff; }
/* the mode's own button pair (Arena's is the ember it always was; white on
   each mode's lighter stop is 4.5:1 or better) */
:root[data-theme="light"] .th .th-tag--live { color: #ffffff; border-color: transparent; background: linear-gradient(180deg, var(--th-m-btn1), var(--th-m-btn2)); box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.2); }
:root[data-theme="light"] .th .th-tag--live::before { box-shadow: 0 0 6px #ffd0c0; }
:root[data-theme="light"] .th .th-tag--spot { box-shadow: inset 0 -1px 0 rgba(120, 70, 10, 0.35), inset 0 0 0 1px rgba(170, 110, 20, 0.4); }
:root[data-theme="light"] .th .th-tag--guide { box-shadow: inset 0 -1px 0 rgba(120, 80, 20, 0.3), inset 0 0 0 1px rgba(160, 105, 25, 0.36); }
:root[data-theme="light"] .th .th-av--ini, :root[data-theme="light"] .th .th-av:has(img) { color: #ffffff; border-color: rgba(42, 22, 82, 0.2); }
:root[data-theme="light"] .th .th-av--ph { background: rgba(106, 63, 220, 0.07); }
:root[data-theme="light"] .th .th-face::after { box-shadow: inset 0 0 0 1px rgba(42, 22, 82, 0.14), inset 0 -2.5px 0 var(--th-rc, transparent); }
:root[data-theme="light"] .th .th-face.is-dark-art::after { box-shadow: inset 0 0 0 1px rgba(var(--th-el), 0.9), inset 0 -2.5px 0 var(--th-rc, transparent); }
:root[data-theme="light"] .th .th-face-el { box-shadow: 0 0 0 1.5px #ffffff; }
:root[data-theme="light"] .th .th-votes .th-v-up[aria-pressed="true"] { color: #0b6346; background: rgba(14, 116, 80, 0.08); }
:root[data-theme="light"] .th .th-votes .th-v-dn[aria-pressed="true"] { background: rgba(201, 45, 100, 0.08); }
/* season bands */
:root[data-theme="light"] .th .th-band--live .th-band-name { text-shadow: none; }
:root[data-theme="light"] .th .th-band--collapsed .th-band-head { background: rgba(255, 255, 255, 0.55); }
:root[data-theme="light"] .th .th-season-empty { border-color: rgba(176, 116, 20, 0.42); background: radial-gradient(520px 200px at 0% 50%, rgba(var(--th-m-rgb), 0.13), rgba(255, 255, 255, 0) 70%), rgba(255, 255, 255, 0.6); }
:root[data-theme="light"] .th .th-season-empty-art img { filter: drop-shadow(0 6px 8px rgba(120, 40, 10, 0.3)); }
:root[data-theme="light"] .th .th-toast { box-shadow: 0 3px 0 var(--th-ledge), 0 16px 30px -12px rgba(46, 22, 96, 0.35); }
:root[data-theme="light"] .th > .tbs-clock-override { border-color: rgba(176, 116, 20, 0.5); background: #fff7e6; }
:root[data-theme="light"] .th > .tbs-clock-override .tbs-clock-override-tag { color: #8a5210; }
/* the framed page header (section 5): a white veil with an open window
   where the emblem stands (a hub emblem's baked glow needs its scene behind it) */
:root[data-theme="light"] .th .th-hub-head { box-shadow: inset 0 0 0 4px rgba(255, 255, 255, 0.6), inset 0 0 0 5px var(--th-gold-faint), var(--th-shadow-2); }
:root[data-theme="light"] .th .th-hub-head-art { filter: blur(4px) saturate(1.12) brightness(1.04); }
:root[data-theme="light"] .th .th-hub-head-veil { background:
    radial-gradient(640px 300px at 0% 0%, rgba(var(--th-m-rgb), 0.11), rgba(var(--th-m-rgb), 0) 72%),
    linear-gradient(90deg, var(--th-veil-strong) 0%, var(--th-veil-strong) 29%, rgba(255, 248, 243, 0.62) 35%, rgba(255, 248, 243, 0.08) 41.5%, rgba(255, 248, 243, 0.08) 46%, rgba(255, 248, 243, 0.5) 51.5%, rgba(250, 247, 254, 0.86) 57%, var(--th-veil-strong) 100%),
    linear-gradient(180deg, rgba(250, 247, 254, 0) 62%, rgba(250, 247, 254, 0.38) 100%); }
:root[data-theme="light"] .th .th-hub-emblem { filter: drop-shadow(0 14px 18px rgba(80, 20, 10, 0.38)); }
:root[data-theme="light"] .th .th-hub-title { text-shadow: 0 2px 0 rgba(255, 255, 255, 0.9); }
:root[data-theme="light"] .th .th-hub-panel { box-shadow: inset 0 0 0 3px rgba(255, 255, 255, 0.9), inset 0 0 0 4px var(--th-gold-faint), 0 3px 0 var(--th-ledge), 0 16px 28px -18px rgba(76, 40, 150, 0.4); }
/* the phone's framed header on light: the veil runs top to bottom (the
   desktop window would sit behind the copy) */
@container th (max-width: 700px) {
  :root[data-theme="light"] .th .th-hub-head-veil { background:
      radial-gradient(260px 220px at 82% 70px, rgba(var(--th-m-rgb), 0.12), rgba(var(--th-m-rgb), 0) 70%),
      linear-gradient(180deg, rgba(250, 247, 254, 0.6) 0%, var(--th-veil) 18%, var(--th-veil-strong) 36%, var(--th-veil-strong) 100%); }
}
