/* ===== Global base, typography, motion, atmosphere ===== */
/* ============================================================================
   cw-lux.css — GROUP: Global base / typography / motion / atmosphere
   Additive elevation layer, loaded LAST. Reuses cw.css tokens; overrides only
   PAINT (never geometry) so layout + light theme stay intact.
   ============================================================================ */

/* --- Shared refined vars (additive only; never overwrite cw.css tokens) --- */
:root {
  color-scheme: dark;
  /* soft accent focus halo */
  --lux-ring: 0 0 0 4px color-mix(in srgb, var(--cw-accent) 22%, transparent);
  /* top-lit inner highlight for surfaces (white sheen; vanishes on light) */
  --lux-elev-grad: linear-gradient(180deg, rgba(255,255,255,.05), rgba(255,255,255,0) 44%);
  /* hairline gradient border image (light edge -> faint) */
  --lux-hairline: linear-gradient(180deg, rgba(255,255,255,.14), rgba(255,255,255,.03));
  /* subtle brand glow for key/hover states */
  --lux-glow-accent: 0 8px 30px -10px color-mix(in srgb, var(--cw-accent) 55%, transparent);
}
/* [QA] data-theme sits on <body>; keep the html canvas in sync for light mode */
:root[data-theme="light"],
:root:has(body[data-theme="light"]) { color-scheme: light; }
body[data-theme="light"] { color-scheme: light; }

/* --- Global base: crisp rendering + on-brand native controls --- */
body.cw-body {
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
  text-rendering: optimizeLegibility;
  -webkit-tap-highlight-color: transparent;
  -webkit-text-size-adjust: 100%;
  text-size-adjust: 100%;
  accent-color: var(--cw-accent);
}
.cw-body input, .cw-body textarea, .cw-body select { caret-color: var(--cw-accent); }

/* --- Atmosphere: richer radial glow mesh (DARK ONLY — light keeps its own
   rule; the trailing linear-gradient is a hardcoded dark, so we gate the whole
   override to :not([data-theme="light"]) to protect the light theme). We touch
   ONLY `background` — position/inset/z-index/content/pointer-events remain
   owned by cw.css. The ::after tactical grid is intentionally left untouched. */
body.cw-body:not([data-theme="light"])::before {
  background:
    radial-gradient(58% 42% at 5% -8%,  color-mix(in srgb, var(--cw-accent) 18%, transparent), transparent 62%),
    radial-gradient(52% 40% at 104% -4%, rgba(150,96,255,.13), transparent 58%),
    radial-gradient(82% 55% at 50% 118%, rgba(37,211,238,.06), transparent 62%),
    radial-gradient(120% 92% at 50% -22%, color-mix(in srgb, var(--cw-accent-2) 8%, transparent), transparent 55%),
    linear-gradient(180deg, #0b0d15 0%, #07080f 58%, #05060b 100%);
}

/* --- Custom scrollbar: thin, bg-3 track / border-2 thumb, accent on hover.
   `.cw-side-nav` keeps its own 4px scrollbar (more specific — untouched). --- */
* { scrollbar-width: thin; scrollbar-color: var(--cw-border-2) var(--cw-bg-3); }
::-webkit-scrollbar { width: 10px; height: 10px; }
::-webkit-scrollbar-track { background: var(--cw-bg-3); }
::-webkit-scrollbar-corner { background: var(--cw-bg-3); }
::-webkit-scrollbar-thumb {
  background: var(--cw-border-2);
  border-radius: 10px;
  border: 2px solid var(--cw-bg-3);
  background-clip: padding-box;
}
::-webkit-scrollbar-thumb:hover {
  background: color-mix(in srgb, var(--cw-accent) 55%, var(--cw-border-2));
  background-clip: padding-box;
}

/* --- Selection: on-brand accent, theme-safe text colour --- */
::selection    { background: color-mix(in srgb, var(--cw-accent) 32%, transparent); color: var(--cw-fg); }
::-moz-selection { background: color-mix(in srgb, var(--cw-accent) 32%, transparent); color: var(--cw-fg); }

/* --- Focus-visible: crisp accent outline + soft halo (transient, keyboard
   only). Scoped to elements that don't carry their own resting box-shadow. -- */
a:focus-visible,
button:focus-visible,
summary:focus-visible,
.cw-btn:focus-visible,
[tabindex]:focus-visible {
  outline: 2px solid var(--cw-accent);
  outline-offset: 2px;
  box-shadow: var(--lux-ring);
}

/* --- Numerics: guarantee tabular figures on ratings / MMR / scores / stats -- */
.cw-num, .cw-score, .cw-mmr, .cw-rating,
[class*="rating"], [class*="mmr"], [class*="score"], [class*="elo"] {
  font-variant-numeric: tabular-nums;
  font-feature-settings: "tnum" 1;
}

/* --- Typography: tighten display headings a touch for a premium, dense feel -- */
h1, h2, .cw-card-h h2, .cw-card-h h3 { letter-spacing: -.024em; }
h1 { letter-spacing: -.03em; }
.cw-page-title, .cw-hero h1 { letter-spacing: -.034em; }
.cw-card-h h2, .cw-card-h h3 { letter-spacing: -.015em; }
h1, h2, .cw-hero h1, .cw-page-title { text-wrap: balance; }

/* ============================================================================
   MOTION — reusable staggered fade-up reveal on cards (first paint only).
   Fully gated behind reduced-motion; animates transform/opacity only. Wins by
   source order over cw.css's cw-arena-rise; stagger re-declared so it is
   self-contained. A reduce-motion request removes all of it.
   ============================================================================ */
@media (prefers-reduced-motion: no-preference) {
  @keyframes lux-rise {
    from { opacity: 0; transform: translate3d(0, 10px, 0) scale(.996); }
    to   { opacity: 1; transform: none; }
  }
  html { scroll-behavior: smooth; }
  .cw-card { animation: lux-rise .5s cubic-bezier(.22,.7,.2,1) both; }
  .cw-card:nth-of-type(1)   { animation-delay: .02s; }
  .cw-card:nth-of-type(2)   { animation-delay: .07s; }
  .cw-card:nth-of-type(3)   { animation-delay: .12s; }
  .cw-card:nth-of-type(4)   { animation-delay: .17s; }
  .cw-card:nth-of-type(5)   { animation-delay: .22s; }
  .cw-card:nth-of-type(6)   { animation-delay: .27s; }
  .cw-card:nth-of-type(n+7) { animation-delay: .3s;  }
}

/* Mobile: soften the reveal distance so it never feels heavy on a phone. */
@media (prefers-reduced-motion: no-preference) and (max-width: 560px) {
  @keyframes lux-rise {
    from { opacity: 0; transform: translate3d(0, 6px, 0); }
    to   { opacity: 1; transform: none; }
  }
}

/* ===== Homepage hero + stat tiles ===== */
/* =====================================================================
   cw-lux.css — HOMEPAGE HERO + STAT TILES  (additive elevation layer)
   Targets: .cw-home-hero (hero panel) + .cw-home-statbar .cw-home-stat.
   Composes over cw.css without changing markup or layout.
   Verified: hero is .cw-home-hero (position:relative; overflow:hidden),
   its bg is set with !important upstream -> we glow via ::before instead.
   ===================================================================== */

/* ---- Hero panel: deeper material + self-contained stacking ---------- */
.cw-home-hero {
  isolation: isolate;                 /* keep glow/content order inside hero */
  border-color: var(--cw-border-2);   /* crisper hairline (skin's is not !imp) */
  box-shadow:
    inset 0 1px 0 color-mix(in srgb, var(--cw-fg) 7%, transparent),
    var(--cw-shadow-lg);
}

/* Dramatic layered glow painted OVER the panel bg, UNDER the content:
   strong orange bloom bottom-left + a subtle violet on the right. */
.cw-home-hero::before {
  content: "";
  position: absolute;
  inset: 0;
  z-index: 0;
  pointer-events: none;
  background:
    radial-gradient(560px 380px at 6% 116%, rgba(255,92,0,.32), transparent 62%),
    radial-gradient(300px 210px at 3% 106%, rgba(255,140,60,.20), transparent 60%),
    radial-gradient(440px 340px at 99% 110%, rgba(150,96,255,.15), transparent 60%);
}

/* every bit of hero content stays crisply above the glow */
.cw-home-hero-main,
.cw-home-statbar {
  position: relative;
  z-index: 1;
}

/* keep the bloom a whisper on the light theme */
body[data-theme="light"] .cw-home-hero::before { opacity: .5; }

/* headline: subtle warm drop-shadow (dark only, static, GPU-friendly) */
body:not([data-theme="light"]) .cw-home-hero h1 span {
  filter: drop-shadow(0 3px 20px rgba(255,85,0,.28));
}

/* ---- Premium stat tiles (scoped to the homepage statbar) ------------ */
.cw-home-statbar .cw-home-stat {
  position: relative;
  /* top-lit surface (padding-box) + gradient hairline border (border-box) */
  background:
    linear-gradient(180deg, var(--cw-bg-3), var(--cw-bg-2)) padding-box,
    linear-gradient(180deg,
      var(--cw-border-2),
      color-mix(in srgb, var(--cw-border) 70%, transparent)) border-box;
  border: 1px solid transparent;
  border-radius: var(--cw-radius);
  box-shadow:
    inset 0 1px 0 color-mix(in srgb, var(--cw-fg) 6%, transparent),
    0 10px 22px -16px rgba(0,0,0,.6);
  transition:
    transform .16s cubic-bezier(.2,.7,.2,1),
    box-shadow .16s ease,
    border-color .16s ease;
}

/* thin accent top-line — quiet by default, brightens on hover */
.cw-home-statbar .cw-home-stat::before {
  content: "";
  position: absolute;
  top: -1px;
  left: 16px;
  right: 16px;
  height: 2px;
  border-radius: 2px;
  background: linear-gradient(90deg,
    transparent,
    color-mix(in srgb, var(--cw-accent) 85%, transparent),
    transparent);
  opacity: .35;
  transition: opacity .16s ease;
  pointer-events: none;
}

/* big number: tighter tracking + tabular figures + warm glow (dark only) */
.cw-home-statbar .cw-home-stat .n {
  letter-spacing: -.5px;
  font-variant-numeric: tabular-nums;
}
body:not([data-theme="light"]) .cw-home-statbar .cw-home-stat .n:not(.is-zero) {
  text-shadow: 0 0 20px rgba(255,120,45,.28);
}

/* dim, slightly wider uppercase label */
.cw-home-statbar .cw-home-stat .l {
  letter-spacing: .8px;
  font-weight: 700;
}

/* accent sub-labels ("Online", "Be the first"...) pop harder */
.cw-home-statbar .cw-home-stat .sub {
  color: var(--cw-accent);
  letter-spacing: .6px;
  font-weight: 800;
}
body:not([data-theme="light"]) .cw-home-statbar .cw-home-stat .sub {
  text-shadow: 0 0 14px color-mix(in srgb, var(--cw-accent) 45%, transparent);
}

/* hover: gentle lift + stronger orange-tinted border & glow */
.cw-home-statbar .cw-home-stat:hover {
  transform: translateY(-2px);
  background:
    linear-gradient(180deg,
      color-mix(in srgb, var(--cw-accent) 6%, var(--cw-bg-3)),
      var(--cw-bg-2)) padding-box,
    linear-gradient(180deg,
      color-mix(in srgb, var(--cw-accent) 55%, var(--cw-border-2)),
      color-mix(in srgb, var(--cw-accent) 18%, var(--cw-border))) border-box;
  box-shadow:
    inset 0 1px 0 color-mix(in srgb, var(--cw-fg) 9%, transparent),
    0 16px 30px -18px color-mix(in srgb, var(--cw-accent) 70%, #000),
    0 0 0 1px color-mix(in srgb, var(--cw-accent) 22%, transparent);
}
.cw-home-statbar .cw-home-stat:hover::before { opacity: .9; }

/* focus: keyboard ring on the hero's welcome card */
.cw-home-me:focus-visible {
  outline: 2px solid var(--cw-accent);
  outline-offset: 3px;
}

/* reduced-motion: no lift, no tile transitions */
@media (prefers-reduced-motion: reduce) {
  .cw-home-statbar .cw-home-stat,
  .cw-home-statbar .cw-home-stat::before { transition: none; }
  .cw-home-statbar .cw-home-stat:hover { transform: none; }
}


/* ===== Cards / panels / section headers (.cw-card, .cw-card-h, .cw-card-b, .cw-card-more) ===== */
/* ===================================================================
   cw-lux.css  —  GROUP: CARDS / PANELS / SECTION HEADERS
   Additive elevation. Loaded LAST (after cw.css / cw-shell / cw-skin /
   cw-elite). Scoped strictly to .cw-card / .cw-card-h / .cw-card-b /
   .cw-card-more. Background is NOT redeclared (special cards keep theirs);
   depth comes from layered shadow + inset highlight + a hairline ring.
   =================================================================== */

/* ---- Panel material: soft layered shadow + faint top-lit inset highlight
        + hairline inset ring. The winning base shadow lower in the cascade
        is an !important (cw-skin), so elevating it requires !important. ---- */
.cw-card{
  box-shadow:
    inset 0 1px 0 rgba(255,255,255,.06),           /* top-lit edge highlight */
    inset 0 0 0 1px rgba(255,255,255,.02),          /* faint glass hairline ring */
    0 2px 5px -3px rgba(0,0,0,.5),                  /* tight contact shadow */
    0 22px 46px -26px rgba(0,0,0,.82) !important;   /* soft ambient depth */
}

/* Slightly larger radius on tablet/desktop only. cw-skin forces radius-sm at
   <=560px, so bump strictly >=561px to keep the mobile corners intact. */
@media (min-width:561px){
  .cw-card{ border-radius:12px !important; }
}

/* ---- Interactive cards ONLY: gentle accent-tinted border + glow on hover.
        Static + section.cw-card (home grid keeps its per-section colour) stay
        calm. Overrides the !important hover shadow set lower in the cascade. ---- */
a.cw-card:hover,
.cw-card[href]:hover,
.cw-card[onclick]:hover{
  border-color: color-mix(in srgb, var(--cw-accent) 45%, var(--cw-border-2)) !important;
  box-shadow:
    inset 0 1px 0 rgba(255,255,255,.08),
    0 0 0 1px color-mix(in srgb, var(--cw-accent) 38%, transparent),
    0 12px 30px -12px color-mix(in srgb, var(--cw-accent) 45%, transparent),
    0 26px 58px -26px rgba(0,0,0,.9) !important;
}
a.cw-card:focus-visible,
.cw-card[href]:focus-visible,
.cw-card[onclick]:focus-visible{
  outline:2px solid var(--cw-accent); outline-offset:3px;
}

/* ---- Section header: refined left accent tick + uppercase tracking.
        Tick inherits the division/clan colour where one is set, else brand
        orange. h2 is flex (ARENA layer) so the tick sits as its first child. ---- */
.cw-card-h h2{ text-transform:uppercase; letter-spacing:1px; }
.cw-card-h h2::before{
  content:""; flex:0 0 auto;
  width:3px; height:13px; border-radius:2px;
  background:linear-gradient(180deg,
    var(--cw-clan-c, var(--cw-accent)),
    color-mix(in srgb, var(--cw-clan-c, var(--cw-accent)) 60%, #000));
  box-shadow:0 0 10px -1px color-mix(in srgb, var(--cw-clan-c, var(--cw-accent)) 70%, transparent);
}
.cw-card-h small{ font-variant-numeric:tabular-nums; }

/* ---- Hairline divider: a short accent under-glow segment sitting on the
        header's existing bottom border, brighter at the tick, fading out.
        Claims .cw-card-h::after (declared content:none in cw.css). ---- */
.cw-card-h{ position:relative; }
.cw-card-h::after{
  content:""; position:absolute; left:0; bottom:-1px;
  height:1px; width:min(140px, 46%); pointer-events:none;
  background:linear-gradient(90deg,
    color-mix(in srgb, var(--cw-clan-c, var(--cw-accent)) 50%, transparent),
    transparent);
}

/* ---- "Full leaderboard" / "All matches" link -> crisp accent pill. ---- */
.cw-card-more{
  display:inline-flex; align-items:center; gap:6px; line-height:1;
  padding:5px 11px; border-radius:999px;
  border:1px solid var(--cw-border);
  background:color-mix(in srgb, var(--cw-bg-3) 55%, transparent);
  color:var(--cw-fg-2); font-variant-numeric:tabular-nums;
  transition:color .15s ease, border-color .15s ease,
             background .15s ease, box-shadow .15s ease;
}
.cw-card-more:hover{
  color:var(--cw-accent);
  border-color:color-mix(in srgb, var(--cw-accent) 45%, var(--cw-border-2));
  background:color-mix(in srgb, var(--cw-accent) 12%, transparent);
  box-shadow:0 0 0 3px color-mix(in srgb, var(--cw-accent) 10%, transparent);
}
.cw-card-more:focus-visible{
  outline:2px solid var(--cw-accent); outline-offset:2px;
}

/* ---- Reduced motion: drop the hover transitions. ---- */
@media (prefers-reduced-motion: reduce){
  .cw-card, .cw-card-more,
  a.cw-card, .cw-card[href], .cw-card[onclick]{ transition:none !important; }
}

/* ===== Data rows, format badges, avatars, rank positions ===== */
/* ============================================================================
   cw-lux.css — ELEVATION LAYER
   GROUP: Data rows · format badges · avatars · rank positions
   Loaded LAST. index.php ships a page-local <style> in <body> (after the
   stylesheet links), so it sits after this file in source order — every rule
   here is prefixed with `.cw-body` so it wins on specificity (0,2,0+) without
   !important. Dark-only glows are gated under :not([data-theme="light"]).
   Additive only: visual depth, hover, motion — no layout/flow changes.
   [QA] --cw-red / --cw-green given fallbacks to documented --cw-bad / --cw-good.
   ============================================================================ */

/* ---- Data rows: material hover, left accent hairline, refined dividers ---- */
.cw-body .cw-home-rank,
.cw-body .cw-home-match,
.cw-body .cw-home-live-row {
  position: relative;
  border-radius: var(--cw-radius-sm);
  text-decoration: none;
  transition: background-color .16s ease;
}
/* hairline divider between rows (inset from edges; no layout shift) */
.cw-body .cw-home-rank::after,
.cw-body .cw-home-match::after {
  content: "";
  position: absolute;
  left: 12px; right: 12px; bottom: 0; height: 1px;
  pointer-events: none;
  background: linear-gradient(90deg,
    transparent,
    var(--cw-border) 12%, var(--cw-border) 88%,
    transparent);
}
.cw-body .cw-home-rank:last-child::after,
.cw-body .cw-home-match:last-child::after { display: none; }
/* left accent bar — scales in on hover (transform/opacity only) */
.cw-body .cw-home-rank::before,
.cw-body .cw-home-match::before {
  content: "";
  position: absolute;
  left: 0; top: 6px; bottom: 6px; width: 2.5px;
  border-radius: 0 3px 3px 0;
  background: linear-gradient(180deg, var(--cw-accent), var(--cw-accent-2));
  opacity: 0;
  transform: scaleY(.35);
  transform-origin: center;
  transition: opacity .16s ease, transform .18s cubic-bezier(.3,.9,.3,1);
  pointer-events: none;
  z-index: 1;
}
.cw-body .cw-home-rank:hover,
.cw-body .cw-home-match:hover,
.cw-body .cw-home-live-row:hover {
  background: linear-gradient(90deg,
    color-mix(in srgb, var(--cw-accent) 11%, transparent),
    color-mix(in srgb, var(--cw-accent) 4%, transparent) 60%,
    transparent);
}
.cw-body .cw-home-rank:hover::before,
.cw-body .cw-home-match:hover::before { opacity: 1; transform: scaleY(1); }
.cw-body a.cw-home-rank:focus-visible,
.cw-body a.cw-home-match:focus-visible {
  outline: 2px solid var(--cw-accent);
  outline-offset: -2px;
}

/* ---- Rank position: gild #1/#2/#3 with a subtle glow, tabular ------------- */
.cw-body .cw-home-rank-pos {
  font-family: var(--cw-font-display, inherit);
  font-variant-numeric: tabular-nums;
  font-weight: 800;
}
.cw-body .cw-home-rank-pos.gold   { color: var(--cw-gold); font-weight: 900; }
.cw-body .cw-home-rank-pos.silver { color: #cdd6e6; }
.cw-body .cw-home-rank-pos.bronze { color: #e07a1f; }
.cw-body:not([data-theme="light"]) .cw-home-rank-pos.gold {
  text-shadow: 0 0 10px color-mix(in srgb, var(--cw-gold) 55%, transparent);
}
.cw-body:not([data-theme="light"]) .cw-home-rank-pos.silver {
  text-shadow: 0 0 9px rgba(205,214,230,.40);
}
.cw-body:not([data-theme="light"]) .cw-home-rank-pos.bronze {
  text-shadow: 0 0 9px color-mix(in srgb, #e07a1f 45%, transparent);
}

/* ---- Rank name + rating (bold tabular; rating warms up on hover) ---------- */
.cw-body .cw-home-rank-name {
  letter-spacing: -.005em;
  transition: color .16s ease;
}
.cw-body .cw-home-rank-rating {
  font-family: var(--cw-font-display, inherit);
  font-variant-numeric: tabular-nums;
  letter-spacing: .2px;
  transition: color .16s ease;
}
.cw-body .cw-home-rank:hover .cw-home-rank-rating {
  color: color-mix(in srgb, var(--cw-accent) 32%, var(--cw-fg));
}

/* ---- Avatars in rows: refined ring + soft shadow, accent ring on hover ---- */
.cw-body .cw-avatar-small {
  box-shadow: 0 0 0 1px var(--cw-border), 0 2px 6px -3px rgba(0,0,0,.55);
}
.cw-body .cw-home-rank .cw-avatar,
.cw-body .cw-home-match .cw-avatar {
  border-radius: 50%;
  box-shadow: 0 0 0 2px var(--cw-border), 0 2px 8px -3px rgba(0,0,0,.55);
  transition: box-shadow .16s ease;
}
.cw-body .cw-home-rank:hover .cw-avatar,
.cw-body .cw-home-match:hover .cw-avatar {
  box-shadow:
    0 0 0 2px color-mix(in srgb, var(--cw-accent) 60%, var(--cw-border)),
    0 4px 14px -4px color-mix(in srgb, var(--cw-accent) 45%, transparent);
}
/* Podium gild on the top-3 avatars (progressive — :has, degrades cleanly) */
.cw-body .cw-home-rank:has(.cw-home-rank-pos.gold) .cw-avatar {
  box-shadow:
    0 0 0 2px color-mix(in srgb, var(--cw-gold) 72%, transparent),
    0 3px 12px -4px color-mix(in srgb, var(--cw-gold) 45%, transparent);
}
.cw-body .cw-home-rank:has(.cw-home-rank-pos.silver) .cw-avatar {
  box-shadow:
    0 0 0 2px color-mix(in srgb, #cdd6e6 62%, transparent),
    0 3px 12px -4px rgba(205,214,230,.34);
}
.cw-body .cw-home-rank:has(.cw-home-rank-pos.bronze) .cw-avatar {
  box-shadow:
    0 0 0 2px color-mix(in srgb, #e07a1f 62%, transparent),
    0 3px 12px -4px color-mix(in srgb, #e07a1f 40%, transparent);
}

/* ---- Country flag: crisp hairline + hair-thin shadow so it reads on any bg */
.cw-body .cw-flag {
  border-radius: 2px;
  object-fit: cover;
  box-shadow: 0 0 0 1px var(--cw-border), 0 1px 2px rgba(0,0,0,.35);
}

/* ---- MMR chip (Premier): crisp numerals + display tier, light touch ------- */
.cw-body .cw-prem-tier { font-family: var(--cw-font-display, inherit); }
.cw-body .cw-prem-mmr  {
  font-family: var(--cw-font-display, inherit);
  font-variant-numeric: tabular-nums;
  letter-spacing: .2px;
}

/* ---- Format badge: crisp MONO pill, status/format-tinted ------------------ */
.cw-body .cw-home-match-fmt,
.cw-body .cw-home-live-fmt {
  font-family: ui-monospace, "SFMono-Regular", Menlo, Consolas, monospace;
  font-variant-numeric: tabular-nums;
  font-weight: 800;
  letter-spacing: .5px;
  border-radius: 999px;
  padding: 3px 8px;
  box-shadow: inset 0 1px 0 color-mix(in srgb, #fff 12%, transparent);
}
.cw-body .cw-home-match-fmt {
  color: color-mix(in srgb, var(--cw-accent) 82%, var(--cw-fg));
  background: color-mix(in srgb, var(--cw-accent) 13%, transparent);
  border: 1px solid color-mix(in srgb, var(--cw-accent) 30%, var(--cw-border));
}
.cw-body .cw-home-live-fmt {
  color: color-mix(in srgb, var(--cw-red, var(--cw-bad)) 84%, var(--cw-fg));
  background: color-mix(in srgb, var(--cw-red, var(--cw-bad)) 13%, transparent);
  border: 1px solid color-mix(in srgb, var(--cw-red, var(--cw-bad)) 32%, var(--cw-border));
}

/* ---- Match teams + timestamp: tabular scores, aligned "ago" --------------- */
.cw-body .cw-home-match-teams strong { font-variant-numeric: tabular-nums; }
.cw-body .cw-home-match-when {
  font-variant-numeric: tabular-nums;
  letter-spacing: .2px;
}

/* ---- Server rows: top-lit material card, green online energy -------------- */
.cw-body .cw-home-server {
  background:
    linear-gradient(180deg, color-mix(in srgb, var(--cw-fg) 4%, transparent), transparent 58%),
    var(--cw-bg-3);
  border: 1px solid var(--cw-border);
  box-shadow: var(--cw-shadow), inset 0 1px 0 color-mix(in srgb, #fff 5%, transparent);
  transition: border-color .16s ease, box-shadow .16s ease, transform .12s ease;
}
.cw-body .cw-home-server:hover {
  border-color: color-mix(in srgb, var(--cw-green, var(--cw-good)) 45%, var(--cw-border));
  box-shadow:
    0 10px 26px -18px color-mix(in srgb, var(--cw-green, var(--cw-good)) 70%, transparent),
    inset 0 1px 0 color-mix(in srgb, #fff 7%, transparent);
  transform: translateY(-1px);
}
.cw-body .cw-home-server-dot.on {
  box-shadow:
    0 0 0 3px color-mix(in srgb, var(--cw-green, var(--cw-good)) 18%, transparent),
    0 0 10px color-mix(in srgb, var(--cw-green, var(--cw-good)) 70%, transparent);
}
.cw-body .cw-home-server-addr { font-variant-numeric: tabular-nums; }

/* CONNECT: crisp outline pill that fills on hover, with a lift + glow */
.cw-body .cw-home-server-join {
  color: var(--cw-green, var(--cw-good));
  border: 1px solid color-mix(in srgb, var(--cw-green, var(--cw-good)) 42%, var(--cw-border));
  background: color-mix(in srgb, var(--cw-green, var(--cw-good)) 10%, transparent);
  box-shadow: inset 0 1px 0 color-mix(in srgb, #fff 10%, transparent);
  text-decoration: none;
  transition: color .16s ease, background-color .16s ease,
              border-color .16s ease, box-shadow .16s ease, transform .12s ease;
}
.cw-body .cw-home-server-join:hover {
  color: #04140d;
  background: linear-gradient(180deg,
    color-mix(in srgb, var(--cw-green, var(--cw-good)) 92%, #fff), var(--cw-green, var(--cw-good)));
  border-color: var(--cw-green, var(--cw-good));
  box-shadow:
    0 5px 16px -5px color-mix(in srgb, var(--cw-green, var(--cw-good)) 62%, transparent),
    inset 0 1px 0 rgba(255,255,255,.42);
  transform: translateY(-1px);
}
.cw-body .cw-home-server-join:active { transform: translateY(0); }
.cw-body a.cw-home-server-join:focus-visible {
  outline: 2px solid var(--cw-accent);
  outline-offset: 2px;
}

/* ---- Reduced-motion: kill transitions/transforms (same specificity wins) -- */
@media (prefers-reduced-motion: reduce) {
  .cw-body .cw-home-rank,
  .cw-body .cw-home-match,
  .cw-body .cw-home-live-row,
  .cw-body .cw-home-rank-name,
  .cw-body .cw-home-rank-rating,
  .cw-body .cw-home-rank .cw-avatar,
  .cw-body .cw-home-match .cw-avatar,
  .cw-body .cw-home-server,
  .cw-body .cw-home-server-join {
    transition: none;
  }
  .cw-body .cw-home-rank::before,
  .cw-body .cw-home-match::before {
    transition: none;
    transform: none;
  }
  .cw-body .cw-home-server:hover,
  .cw-body .cw-home-server-join:hover,
  .cw-body .cw-home-server-join:active { transform: none; }
}

/* ===== Left sidebar, nav, topbar, primary CTA (cw-lux.css slice) ===== */
/* =====================================================================
   CW-LUX — ELEVATION LAYER  ·  GROUP: Sidebar / Nav / Topbar / Primary CTA
   Loaded LAST (after cw.css, cw-shell.css, cw-skin.css, cw-elite.css).
   Additive only: no display:none, no layout/flow changes — depth, glow,
   crisp type, micro-interactions. Every rule namespaced under real cw-
   classes. Theme-safe (semantic tokens), reduced-motion guarded,
   tabular-nums on counts, accent focus rings.
   ===================================================================== */

/* ---- Sidebar rail: slim, calm custom scrollbar --------------------- */
.cw-side, .cw-side-nav { scrollbar-width: thin; scrollbar-color: var(--cw-border-2) transparent; }
.cw-side::-webkit-scrollbar, .cw-side-nav::-webkit-scrollbar { width: 9px; }
.cw-side::-webkit-scrollbar-track, .cw-side-nav::-webkit-scrollbar-track { background: transparent; }
.cw-side::-webkit-scrollbar-thumb, .cw-side-nav::-webkit-scrollbar-thumb {
  background: var(--cw-border-2); border-radius: 99px;
  border: 2px solid transparent; background-clip: padding-box;
}
.cw-side::-webkit-scrollbar-thumb:hover, .cw-side-nav::-webkit-scrollbar-thumb:hover {
  background: color-mix(in srgb, var(--cw-accent) 45%, var(--cw-border-2)); background-clip: padding-box;
}

/* ---- Brand / logo tile: crisper edge + reactive glow --------------- */
.cw-brand-icon { transition: box-shadow .18s ease, transform .18s ease; }
.cw-brand:hover .cw-brand-icon {
  box-shadow:
    0 12px 26px -6px rgba(255,90,40,.7),
    inset 0 1px 0 rgba(255,255,255,.45),
    inset 0 0 0 1px rgba(255,255,255,.14);
}
.cw-brand-text small { transition: color .18s ease; }
.cw-brand:focus-visible { outline: 2px solid var(--cw-accent); outline-offset: 3px; border-radius: 13px; }

/* ---- PRIMARY CTA "Play now / Find a match" ------------------------- */
/* Layered material: soft accent glow + drop + inner top-light + hairline
   ring. Text/icon lifted above the shell's sheen (::after) + the shine. */
.cw-side-play {
  isolation: isolate;
  box-shadow:
    0 10px 26px -10px color-mix(in srgb, var(--cw-accent) 75%, transparent),
    0 2px 6px rgba(0,0,0,.25),
    inset 0 1px 0 rgba(255,255,255,.35),
    inset 0 0 0 1px rgba(255,255,255,.10);
  transition: transform .16s ease, box-shadow .2s ease, filter .16s ease;
}
.cw-side-play:hover {
  box-shadow:
    0 16px 38px -10px color-mix(in srgb, var(--cw-accent) 92%, transparent),
    0 3px 10px rgba(0,0,0,.3),
    inset 0 1px 0 rgba(255,255,255,.42),
    inset 0 0 0 1px rgba(255,255,255,.16);
}
.cw-side-play-t, .cw-side-play-sub, .cw-side-play .cw-ico { position: relative; z-index: 1; }
.cw-side-play-t   { text-shadow: 0 1px 0 rgba(90,25,0,.28); }
.cw-side-play-sub { text-shadow: 0 1px 0 rgba(90,25,0,.22); }
/* accent ring sits on the dark rail (offset) so it stays visible on orange */
.cw-side-play:focus-visible { outline: 2px solid var(--cw-accent); outline-offset: 3px; }

/* ---- Nav links: calm rest, accent left-bar + tint on hover --------- */
/* Uses each section's --sec accent (falls back to brand accent) so the
   indicator matches the section colour. Bar + faint wash via inset shadow
   — no bg override needed, no !important. */
.cw-side-link { transition: background .15s ease, color .15s ease, box-shadow .18s ease; }
.cw-side-link:hover {
  box-shadow:
    inset 3px 0 0 color-mix(in srgb, var(--sec, var(--cw-accent)) 72%, transparent),
    inset 0 0 0 999px color-mix(in srgb, var(--sec, var(--cw-accent)) 7%, transparent);
}
.cw-side-link.active {
  box-shadow:
    inset 0 0 0 1px color-mix(in srgb, var(--sec, var(--cw-accent)) 24%, transparent),
    inset 0 1px 0 rgba(255,255,255,.05);
}
.cw-side-link:focus-visible { outline: 2px solid var(--cw-accent); outline-offset: -2px; border-radius: 9px; }
.cw-side-label { transition: color .15s ease; }
.cw-side-link .cw-ico, .cw-side-sublink .cw-ico { transition: background-color .15s ease, transform .15s ease; }
/* Admin block reads red, keep its hover indicator red too */
.cw-nsec--admin .cw-side-link:hover {
  box-shadow:
    inset 3px 0 0 color-mix(in srgb, var(--cw-red, var(--cw-bad, #ff5a5a)) 72%, transparent),
    inset 0 0 0 999px color-mix(in srgb, var(--cw-red, var(--cw-bad, #ff5a5a)) 7%, transparent);
}
/* Nested store sub-links: matching thin indicator */
.cw-side-sublink:hover {
  box-shadow: inset 2px 0 0 color-mix(in srgb, var(--sec, var(--cw-accent)) 55%, transparent);
}

/* ---- Section group headers + count pills -------------------------- */
.cw-nsec-count, .cw-side-pill { font-variant-numeric: tabular-nums; }
.cw-nsec-count {
  background: linear-gradient(180deg, var(--cw-bg-4), var(--cw-bg-3));
  box-shadow: inset 0 1px 0 rgba(255,255,255,.05), 0 1px 2px rgba(0,0,0,.22);
}
.cw-nsec-chev { transition: transform .2s ease, opacity .2s ease; }
.cw-nsec > summary.cw-nsec-h:hover .cw-nsec-chev { opacity: .95; }
.cw-nsec > summary.cw-nsec-h:focus-visible { outline: 2px solid var(--cw-accent); outline-offset: -2px; border-radius: 9px; }

/* ---- Topbar: float depth + crisp bottom hairline (keeps shell blur) - */
.cw-topbar { box-shadow: 0 1px 0 var(--cw-border), 0 12px 30px -26px rgba(0,0,0,.7); }

/* ---- Search: glassy inset + orange focus glow + icon reacts -------- */
.cw-search input {
  box-shadow: inset 0 1px 2px rgba(0,0,0,.22), inset 0 1px 0 rgba(255,255,255,.03);
  transition: border-color .16s ease, box-shadow .16s ease;
}
.cw-search input:focus {
  box-shadow: 0 0 0 3px color-mix(in srgb, var(--cw-accent) 22%, transparent), inset 0 1px 2px rgba(0,0,0,.18);
}
.cw-search input::placeholder { color: var(--cw-fg-dim); opacity: 1; }
.cw-search .cw-ico { transition: background-color .16s ease; }
.cw-search:focus-within .cw-ico { background-color: var(--cw-accent); }

/* ---- Sign in with Steam: Steam-blue gradient + subtle blue glow ---- */
/* Deep steel-navy reads as the Steam provider; white masked logo stays
   legible. NOTE: single !important overrides the earlier orange gradient
   set with !important in cw-shell.css — required by the group brief.
   Steam navy is a deliberate brand colour, intentionally dark in both themes. */
.cw-side-signin {
  background: linear-gradient(140deg, #2a4b6b 0%, #1b2838 100%) !important;
  /* The label colour must be repainted together with the background. This rule
     overrides cw-shell.css's orange gradient but NOT its
     `color: var(--cw-on-accent) !important`, so the dark ink meant for orange
     was landing on Steam navy: 2.04:1, effectively unreadable. White on this
     navy is 9.06:1 -- and is what the comment above already assumed. */
  color: #fff !important;
  box-shadow:
    0 8px 20px -8px color-mix(in srgb, var(--cw-blue) 55%, transparent),
    inset 0 1px 0 rgba(255,255,255,.12),
    inset 0 0 0 1px color-mix(in srgb, var(--cw-blue) 20%, transparent);
  transition: transform .12s ease, box-shadow .2s ease, filter .16s ease;
}
.cw-side-signin:hover {
  box-shadow:
    0 12px 28px -8px color-mix(in srgb, var(--cw-blue) 72%, transparent),
    inset 0 1px 0 rgba(255,255,255,.16),
    inset 0 0 0 1px color-mix(in srgb, var(--cw-blue) 30%, transparent);
  filter: brightness(1.06);
}
.cw-side-signin .cw-steam-logo { filter: drop-shadow(0 0 6px color-mix(in srgb, var(--cw-blue) 60%, transparent)); }
.cw-side-signin:focus-visible { outline: 2px solid var(--cw-blue); outline-offset: 3px; }

/* ---- Logged-in player chip: gentle depth (keeps arena violet hover) - */
.cw-side-me { box-shadow: 0 2px 10px -6px rgba(0,0,0,.5), inset 0 1px 0 rgba(255,255,255,.03); }

/* =====================================================================
   MOTION — transform/opacity/filter only, opt-in so reduced-motion is calm
   ===================================================================== */
@media (prefers-reduced-motion: no-preference) {
  .cw-brand:hover .cw-brand-icon { transform: translateY(-1px) rotate(-2deg); }
  .cw-side-link:hover .cw-ico { transform: scale(1.06); }

  /* CTA diagonal shine sweep on hover (clipped by shell's overflow:hidden) */
  .cw-side-play::before {
    content: ""; position: absolute; top: 0; bottom: 0; left: -40%; width: 35%;
    z-index: 0; pointer-events: none;
    background: linear-gradient(100deg, transparent, rgba(255,255,255,.4), transparent);
    transform: skewX(-16deg); opacity: 0;
    transition: transform .7s cubic-bezier(.4,0,.2,1), opacity .3s ease;
  }
  .cw-side-play:hover::before { transform: skewX(-16deg) translateX(560%); opacity: 1; }
}

/* ===== Queue/format cards + global buttons ===== */
/* =====================================================================
   cw-lux.css — ELEVATION LAYER · GROUP: Queue/format cards + global buttons
   Loaded LAST. Additive only. Reuses cw.css tokens (--cw-orange, --fmt per
   card, --cw-shadow, --cw-fg*, --cw-bg-3, --cw-border*). No new class names.
   [QA] --cw-orange given a fallback to the documented --cw-accent so the
   !important primary background can never collapse to transparent.
   ===================================================================== */

/* ---------------------------------------------------------------------
   1. QUEUE / FORMAT CARDS  (.cw-home-fmt)
   Each card already carries a per-format hue in --fmt (violet/cyan/gold/
   orange). We turn the flat surface into layered material: top-lit sheen +
   faint hue wash + resting depth, a glowing gradient top-edge, and an own-
   colour radial glow that blooms on hover while the whole card lifts.
   The card is already position:relative; overflow:hidden with an unused
   ::after — safe to claim. Children get z-index:1 so glows sit behind text.
   --------------------------------------------------------------------- */
.cw-home-fmt {
  background-color: var(--cw-bg-3);
  background-image:
    linear-gradient(180deg, rgba(255,255,255,.05), rgba(255,255,255,0) 44%),
    radial-gradient(130% 72% at 50% -18%,
      color-mix(in srgb, var(--fmt) 12%, transparent), transparent 58%);
  box-shadow: var(--cw-shadow), inset 0 1px 0 rgba(255,255,255,.05);
  -webkit-tap-highlight-color: transparent;
  transition: transform .16s ease, box-shadow .16s ease, border-color .16s ease;
}

/* Glowing gradient top-edge — hot lit core, soft downward bloom. */
.cw-home-fmt::before {
  height: 3px;
  z-index: 2;
  background: linear-gradient(90deg,
    transparent,
    var(--fmt) 14%,
    color-mix(in srgb, var(--fmt) 55%, #fff) 50%,
    var(--fmt) 86%,
    transparent) !important;   /* override cw.css edge fade (its rule is !important) */
  box-shadow: 0 0 12px color-mix(in srgb, var(--fmt) 55%, transparent);
  opacity: .9;
  transition: opacity .18s ease;
}

/* Own-colour radial glow, faint at rest, blooms on hover. Sits behind text. */
.cw-home-fmt::after {
  content: "";
  position: absolute;
  inset: 0;
  z-index: 0;
  pointer-events: none;
  border-radius: inherit;
  background: radial-gradient(120% 78% at 50% -6%,
    color-mix(in srgb, var(--fmt) 20%, transparent), transparent 62%);
  opacity: .45;
  transition: opacity .18s ease;
}

/* Keep all card content crisply above the glow layer. */
.cw-home-fmt .cw-ico,
.cw-home-fmt .cw-home-fmt-name,
.cw-home-fmt .cw-home-fmt-blurb,
.cw-home-fmt .cw-home-fmt-q { position: relative; z-index: 1; }

.cw-home-fmt .cw-ico { transition: filter .18s ease, transform .18s ease; }

/* Confident display name. */
.cw-home-fmt .cw-home-fmt-name {
  font-family: var(--cw-font-display, inherit);
  font-size: 14.5px;
  font-weight: 800;
  letter-spacing: .2px;
}

/* Dim, quiet blurb — brightens a touch on hover for hierarchy. */
.cw-home-fmt .cw-home-fmt-blurb {
  color: var(--cw-fg-dim);
  transition: color .16s ease;
}

/* "N in queue" — a compact, self-hugging pill instead of loose coloured text. */
.cw-home-fmt .cw-home-fmt-q {
  display: inline-flex;
  align-items: center;
  align-self: flex-start;
  padding: 3px 9px;
  border-radius: 999px;
  font-size: 10.5px;
  font-weight: 800;
  letter-spacing: .3px;
  line-height: 1;
  font-variant-numeric: tabular-nums;
  background: color-mix(in srgb, var(--fmt) 14%, transparent);
  border: 1px solid color-mix(in srgb, var(--fmt) 30%, transparent);
  transition: background .16s ease, border-color .16s ease;
}
/* Empty queue: mute the pill chrome (cw.css already dims the count text). */
.cw-home-fmt .cw-home-fmt-q.empty,
.cw-home-fmt .cw-home-fmt-q[data-empty] {
  background: color-mix(in srgb, var(--cw-fg-dim) 12%, transparent);
  border-color: color-mix(in srgb, var(--cw-fg-dim) 22%, transparent);
}

/* ---- Hover: lift, intensify accent, bloom the glow --------------------- */
.cw-home-fmt:hover { transform: translateY(-3px); }
.cw-home-fmt:hover::after  { opacity: 1; }
.cw-home-fmt:hover::before { opacity: 1; }
.cw-home-fmt:hover .cw-ico {
  filter: drop-shadow(0 0 6px color-mix(in srgb, var(--fmt) 70%, transparent));
}
.cw-home-fmt:hover .cw-home-fmt-blurb { color: var(--cw-fg-2); }
.cw-home-fmt:hover .cw-home-fmt-q:not(.empty):not([data-empty]) {
  background: color-mix(in srgb, var(--fmt) 22%, transparent);
  border-color: color-mix(in srgb, var(--fmt) 45%, transparent);
}

/* ---------------------------------------------------------------------
   2. GLOBAL BUTTONS  (.cw-btn — the real, project-wide button class)
   cw.css already ships an orange primary + glass ghost, both locked with
   !important, so genuine elevation here requires !important on the same
   declarations (see notes). Scoped to .cw-btn only — never bare <button> /
   [class*="btn"], which would wreck the burger, theme toggle & Steam button.
   --------------------------------------------------------------------- */

/* Primary: richer vertical gradient with a lit crown + layered glow. */
.cw-btn:not(.cw-btn-steam):not(.ghost):not(.danger) {
  background: linear-gradient(180deg,
    color-mix(in srgb, var(--cw-orange, var(--cw-accent)) 86%, #fff) 0%,
    var(--cw-orange, var(--cw-accent)) 46%,
    #f5491f 100%) !important;
  box-shadow:
    inset 0 1px 0 rgba(255,255,255,.35),
    0 8px 22px -10px rgba(255,90,40,.7),
    0 2px 6px -3px rgba(0,0,0,.45) !important;
}
.cw-btn:not(.cw-btn-steam):not(.ghost):not(.danger):hover {
  box-shadow:
    inset 0 1px 0 rgba(255,255,255,.4),
    0 12px 30px -10px rgba(255,90,40,.9),
    0 2px 6px -3px rgba(0,0,0,.45) !important;
}

/* Crisp press. !important is needed only to beat the concurrent :hover
   filter/box-shadow (which cw.css marks !important) while the button is
   both hovered and active. */
.cw-btn:not(.cw-btn-steam):active {
  transform: translateY(1px);
  filter: brightness(.97) !important;
  box-shadow:
    inset 0 1px 0 rgba(255,255,255,.2),
    0 3px 10px -6px rgba(255,90,40,.7) !important;
}

/* Ghost / secondary: proper glass — layered sheen + hairline highlight,
   hover brightens toward the accent. */
.cw-btn.ghost {
  background:
    linear-gradient(180deg, rgba(255,255,255,.055), rgba(255,255,255,.012)),
    color-mix(in srgb, var(--cw-bg-3) 55%, transparent) !important;
  box-shadow: inset 0 1px 0 rgba(255,255,255,.06) !important;
}
.cw-btn.ghost:hover {
  border-color: color-mix(in srgb, var(--cw-orange, var(--cw-accent)) 70%, var(--cw-border-2)) !important;
  box-shadow:
    inset 0 1px 0 rgba(255,255,255,.08),
    0 6px 18px -12px rgba(255,90,40,.6) !important;
}

/* Focus: strong, accent-coloured, keyboard-only ring (outline can't be
   suppressed by the base !important box-shadow, so no !important needed). */
.cw-btn:focus-visible {
  outline: 2px solid var(--cw-orange, var(--cw-accent));
  outline-offset: 2px;
}

/* Touch: guarantee a >=44px tap target on coarse pointers without bloating
   dense desktop toolbars. [QA] scoped to :not(.sm) so intentionally-dense
   small buttons stay compact (honours the mobile group's :not(.sm) intent
   and avoids overflow in tight action rows on touch laptops/tablets). */
@media (pointer: coarse) {
  .cw-btn:not(.sm) { min-height: 44px; }
}

/* ---------------------------------------------------------------------
   3. REDUCED MOTION — kill all non-trivial motion for this group.
   --------------------------------------------------------------------- */
@media (prefers-reduced-motion: reduce) {
  .cw-home-fmt,
  .cw-home-fmt::before,
  .cw-home-fmt::after,
  .cw-home-fmt .cw-ico,
  .cw-home-fmt .cw-home-fmt-blurb,
  .cw-home-fmt .cw-home-fmt-q,
  .cw-btn { transition: none !important; }
  .cw-home-fmt:hover { transform: none; }
  .cw-btn:not(.cw-btn-steam):active { transform: none; }
}

/* ===== Mobile + responsive hardening ===== */
/* =====================================================================
   cw-lux.css — GROUP: MOBILE + RESPONSIVE HARDENING
   Loaded LAST. Additive elevation only. Builds on the existing
   900/720/560/520 breakpoints in cw.css — never re-flows layout, only
   tightens, scales type, guards against horizontal scroll, enlarges
   touch targets, and lightens GPU cost on phones.
   ===================================================================== */

/* ---- Focus visibility (global req) on the interactive surfaces this
   group touches. Harmless where the node isn't focusable. --------------- */
.cw-burger:focus-visible,
.cw-home-fmt:focus-visible,
.cw-home-rank:focus-visible,
.cw-home-server:focus-visible,
.cw-home-cta .cw-btn:focus-visible {
  outline: 2px solid var(--cw-accent);
  outline-offset: 2px;
  border-radius: var(--cw-radius-sm);
}

/* Keep resized numbers aligned everywhere they shrink on mobile. */
.cw-home-stat .n,
.cw-home-rank-rating,
.cw-home-match-when,
.cw-home-fmt-q { font-variant-numeric: tabular-nums; }

/* =====================================================================
   TABLET / PHONE  (<= 768px)
   The 900px rules already stacked the hero + grid; here we refine.
   ===================================================================== */
@media (max-width: 768px) {

  /* ---- Horizontal-scroll guard (wrapper-only, never body). [QA] use
     `clip` not `hidden`: `overflow-x:hidden` forces overflow-y to compute to
     `auto`, creating a scroll container that breaks sticky descendants. ---- */
  .cw-content { overflow-x: clip; }
  .cw-content img { max-width: 100%; }

  /* ---- Home hero: crisp, clean type down-scale --------------------- */
  .cw-home-hero { padding: 26px 20px; }
  .cw-home-hero h1 { font-size: clamp(24px, 6.4vw, 30px); line-height: 1.08; }
  .cw-home-hero p  { font-size: 14px; line-height: 1.6; }
  .cw-hero h1      { font-size: clamp(22px, 5.6vw, 30px); }

  /* Full-width, easy-to-hit CTAs */
  .cw-home-cta { gap: 10px; }
  .cw-home-cta .cw-btn { flex: 1 1 auto; justify-content: center; min-height: 44px; }

  /* ---- Stat tiles: tidy 2-col, comfortable padding ---------------- */
  .cw-home-statbar { gap: 10px; }
  .cw-home-stat { padding: 14px 10px; }
  .cw-home-stat .n { font-size: 24px; }

  /* ---- Data rows never overflow: allow shrink + ellipsis ---------- */
  .cw-home-rank, .cw-home-match, .cw-home-live-row { padding: 9px 10px; gap: 8px; }
  .cw-home-rank-name, .cw-home-server-name { min-width: 0; }
  .cw-home-match-teams { font-size: 12.5px; gap: 6px; }
  .cw-home-match-when  { font-size: 10.5px; padding-left: 6px; }
  .cw-home-server      { padding: 9px 4px; }
  .cw-home-server-addr { font-size: 11px; }

  /* ---- Cards: tighter chrome on small screens --------------------- */
  .cw-card { margin-bottom: 14px; }
  .cw-card-h { padding: 12px 14px; }
  .cw-card-b.padded { padding: 14px; }

  /* ---- Queue cards -------------------------------------------------- */
  .cw-home-fmt { padding: 14px; }

  /* ---- Content-area buttons: >=44px tap (leave dense .sm alone) ---- */
  .cw-content .cw-btn:not(.sm) { min-height: 44px; }

  /* ---- Drawer nav links: larger, thumb-friendly rows -------------- */
  .cw-side-link { min-height: 44px; }
  .cw-side-play { min-height: 48px; }

  /* ---- Hamburger: expand hit area to 44px, keep 26px bars --------- */
  .cw-burger {
    box-sizing: content-box;
    width: 26px; height: 20px;
    padding: 12px 10px;
    margin-left: -8px;
  }

  /* ---- Top bar: lighter blur = faster paint/scroll on phones ------ */
  .cw-topbar {
    backdrop-filter: blur(8px);
    -webkit-backdrop-filter: blur(8px);
  }
}

/* =====================================================================
   SMALL PHONE  (<= 430px)
   ===================================================================== */
@media (max-width: 430px) {

  /* ---- Hero: pack tighter, keep heading legible ------------------- */
  .cw-home-hero { padding: 22px 16px; }
  .cw-home-hero h1 { font-size: clamp(22px, 7.4vw, 27px); }
  .cw-home-hero p  { font-size: 13.5px; }

  /* CTAs stack full-width for the biggest, cleanest tap targets */
  .cw-home-cta { flex-direction: column; align-items: stretch; }
  .cw-home-cta .cw-btn { width: 100%; min-height: 46px; }

  /* ---- Stat tiles stay 2-col but denser --------------------------- */
  .cw-home-stat { padding: 12px 8px; }
  .cw-home-stat .n { font-size: 22px; }
  .cw-home-stat .l { font-size: 9.5px; letter-spacing: 0.4px; }

  /* ---- Data rows: final tighten; every column keeps its lane ------ */
  .cw-home-rank, .cw-home-match, .cw-home-live-row { padding: 8px; gap: 7px; }
  .cw-home-match-fmt, .cw-home-live-fmt { min-width: 32px; padding: 3px 5px; }
  .cw-home-match-teams { font-size: 12px; }
  .cw-home-match-when  { font-size: 10px; padding-left: 5px; }
  .cw-home-rank-rating { margin-left: 8px; }
  .cw-home-rank-pos    { width: 18px; }
  /* Server row: name ellipsizes, address can shrink — no overflow */
  .cw-home-server-name {
    min-width: 0; overflow: hidden;
    text-overflow: ellipsis; white-space: nowrap;
  }
  .cw-home-server-addr {
    min-width: 0; flex-shrink: 1;
    overflow: hidden; text-overflow: ellipsis; white-space: nowrap;
    font-size: 10.5px;
  }

  /* ---- Queue cards: full-width stack ------------------------------ */
  .cw-home-fmts { grid-template-columns: 1fr; }
  .cw-home-fmt  { padding: 13px; }

  /* ---- Cards: minimal padding ------------------------------------- */
  .cw-card-h { padding: 11px 12px; }
  .cw-card-h h2 { font-size: 11px; letter-spacing: 1px; }
  .cw-card-b.padded { padding: 12px; }

  /* ---- Top bar: reclaim edge space so controls never clip --------- */
  .cw-topbar { padding: 0 10px !important; }   /* beats cw-shell 900px 14px!important */
  .cw-top-actions { gap: 6px !important; }      /* beats cw-shell base 8px!important */
}