/* ============================================================================
   frutiger-aero.css  —  "Cascadia Aero" skin  (EXPLORATION / preview)
   ----------------------------------------------------------------------------
   A non-destructive reskin that walks the Cascadia OS chrome forward ~a decade,
   from flat Windows-95 bevels into the early-2000s glossy-glass OS look:

       Mac OS X "Aqua"      — lickable lozenge gloss, gel controls + scrollbars,
                              water-droplet reflections, the reflective dock
       Windows XP "Luna"     — candy taskbar, rounded glossy pills, Bliss sky/hill
       Windows Vista/7 "Aero"— frosted glass (backdrop-filter), bright top sheen,
                              the superbar with big glossy pinned icons, aurora

   OUR TWIST: it stays Cascadia / Pacific-Northwest, rendered in glossy chrome — not
   XP's literal blue-and-green. The 2026-06-26 palette is multi-hue (see L38-46 + docs/
   aero-design-system.md "## Locked palette"): SKY (#5AB4EC/#1E7FC4/#125E9E) is the
   chrome on title bars/taskbar/orb/selection; EVERGREEN (#1B7A3F/#43C463) is the link +
   accent pop; AQUA (#3FC4DA/#0FA3B1/#0A5C6A) is the gel-icon/disc hue. There is NO
   orange/tangerine/coral in Aero. Structure, layout, and behaviour are UNTOUCHED;
   this only restyles surfaces.

   ACTIVATION: everything is scoped under :root[data-skin="aero"]. With no skin
   attribute the base Win95 look is byte-for-byte unchanged. Imported LAST in
   Layout.astro so the cascade lands on top.

   ⚠ STRUCTURE RULE (learned the hard way): Astro's dev CSS pipeline DROPS a whole
   rule that mixes custom properties with regular declarations. So every token
   block below is PURE custom-properties; real declarations (font-smoothing) live
   in their own rule (§2). Don't merge them.

   Font discipline (the "layered-era" call): chrome + reading text become a
   humanist sans (the actual era faces). --font-mono (Departure Mono) is left
   ALONE, so the genuinely-retro surfaces that already use it — the contact
   terminal, BBS reader, LCD clock, timestamps, code — keep their period type.
   That mismatch then reads as "old app running on a newer OS", which is exactly
   the lived-in computing texture we want.
   ============================================================================ */

/* ============================================================
   1. TOKENS — LIGHT  ("Cascadia Aero — Daylight")   [pure custom-props]
   ------------------------------------------------------------
   PALETTE (multi-hue, refactored 2026-06-26 — full ramps + role split + tokens
   live in docs/aero-design-system.md "## Locked palette"). Cascadia / PNW landscape:
     Glacier      #F4FBFE   glass white — paper, gloss highlights
     Mist         #DFF1FA   pale sky — chrome surface / light fills
     SKY          #5AB4EC / #1E7FC4 / deep #125E9E   chrome: titlebars, taskbar, orb, buttons, selection
     AQUA         #3FC4DA / #0FA3B1 / #0A5C6A   gel icons + disc transport (support hue, the old teal)
     EVERGREEN    #1B7A3F links / #43C463 bright   the accent/pop — replaces the retired tangerine
     Deep Fjord   #06212F   night ground + ink
   THERE IS NO ORANGE IN AERO. (Cascadia 95 retro keeps teal+tangerine — base tokens.css.)
   ============================================================ */
:root[data-skin="aero"] {
  --color-desktop:        #BFEFFF;

  --color-surface:        #E4F2FC;
  --color-surface-2:      #FBFDFF;
  --color-surface-sunken: #D5E8F5;
  --color-surface-hover:  #F3FAFF;

  --color-text:           #0E2A38;
  --color-text-muted:     #45616F;
  --color-text-inverse:   #FFFFFF;
  --color-on-accent:      #FFFFFF;

  --color-titlebar-a:     #0C7C8C;
  --color-titlebar-b:     #41C4D7;
  --color-titlebar-text:  #FFFFFF;
  --color-titlebar-inactive: #9FBEC8;

  /* === Frutiger Aero multi-hue palette (Elisha 2026-06-26) ===
     Retire the static teal-everything + the tangerine pop. Three nature-grounded
     hues so the UI reads as the Cascadia landscape, not one flat color:
       SKY     chrome  — titlebars, taskbar, primary buttons, start orb
       AQUA    gel     — icons, scrollbar (the existing teal, demoted to a support hue)
       EVERGREEN accent — links, CTAs, selected/active (the pop; replaces orange)
     Rolling out surface by surface (proof: home chrome first). */
  --aero-sky-light:    #5AB4EC;
  --aero-sky:          #1E7FC4;
  --aero-sky-deep:     #125E9E;
  --aero-green-bright: #43C463;
  --aero-green:        #2E9E4F;
  --aero-green-deep:   #1B7A3F;

  /* Accent = evergreen (links/pop). Deep enough for AA on the near-white paper;
     bright grass for decorative/hover. Tangerine is retired. */
  --color-accent:         #1B7A3F;
  --color-accent-hover:   #14622F;
  --color-accent-soft:    #DCF2E2;
  --color-accent-bright:  #43C463;

  /* Category-chip tints stay a VARIED set (they color-code media types), but the
     two that were tied to the old tangerine accent (book, art-music) are recolored
     to cool/nature hues so no orange survives. Retro keeps the base terracotta. */
  --tint-book:        #2C6FA8;   /* lake blue (was terracotta) */
  --tint-art-music:   #11857C;   /* deep teal-green (was coral) */

  /* Bevels → gloss/glass edges (the ~50-surface lever). */
  --bevel-light:   rgba(255, 255, 255, 0.95);
  --bevel-dark:    rgba(70, 130, 170, 0.42);
  --bevel-darker:  rgba(86, 150, 190, 0.55);
  --bevel-out:  inset 0 1px 0 rgba(255, 255, 255, 0.92), inset 0 -9px 13px -9px rgba(12, 70, 110, 0.18);
  --bevel-in:   inset 0 1px 3px rgba(12, 70, 110, 0.20), inset 0 -1px 0 rgba(255, 255, 255, 0.55);

  --shadow-hard:    0 2px 8px rgba(16, 70, 110, 0.22);
  --shadow-hard-lg: 0 10px 30px rgba(16, 70, 110, 0.32);

  /* Humanist sans for chrome + reading; mono left untouched on purpose. */
  --font-display-mega: "Segoe UI", "Lucida Grande", -apple-system, system-ui, "Helvetica Neue", Arial, sans-serif;
  --font-display:      "Segoe UI", "Lucida Grande", -apple-system, system-ui, "Helvetica Neue", Arial, sans-serif;
  --font-body:         "Segoe UI", "Lucida Grande", -apple-system, system-ui, "Helvetica Neue", Arial, sans-serif;
  /* Aero body stays 20px: its humanist outline face scales cleanly; the base
     token dropped to 16px for retro's bitmap grid (tokens.css). */
  --text-base: 1.25rem;
  /* SHELL BLUR — one knob for the big glass surfaces (windows, dialogs,
     menus; formerly hardcoded blur(18px) on each). 14px is visually
     indistinguishable from 18px over the photo wallpapers (A/B verified)
     and meaningfully cheaper to composite; phones drop to 10px because the
     weakest GPUs pay the most for backdrop re-sampling on scroll. */
  --aero-shell-blur: 14px;

  --window-border: 1px;

  /* Skin-local helpers. */
  --aero-radius:    8px;
  --aero-radius-lg: 13px;
  --aero-pill:      999px;
  /* Button gloss: a SOFT convex sheen (calmed from the old hard-break "candy cap"
     so on-paper buttons read like the player's gel, not plastic). Gentle white
     top, smooth midbody, faint rim-bounce — NO glary 50% specular step. */
  --aero-gloss:
    linear-gradient(180deg,
      rgba(255,255,255,0.60) 0%, rgba(255,255,255,0.36) 24%,
      rgba(255,255,255,0.10) 50%, rgba(222,239,250,0.03) 62%,
      rgba(198,226,244,0.16) 83%, rgba(223,240,251,0.40) 100%);
  --aero-gloss-hover:
    linear-gradient(180deg,
      rgba(255,255,255,0.74) 0%, rgba(255,255,255,0.48) 24%,
      rgba(255,255,255,0.16) 50%, rgba(226,242,252,0.05) 62%,
      rgba(206,232,248,0.24) 83%, rgba(232,245,255,0.50) 100%);
  --aero-gloss-press:
    linear-gradient(180deg,
      rgba(255,255,255,0.28) 0%, rgba(190,224,243,0.48) 42%,
      rgba(166,210,236,0.50) 72%, rgba(186,222,243,0.56) 100%);
  /* Sky candy base (chrome) — primary buttons / start orb / active tab / selected.
     Was Aurora-Teal; moved to sky so chrome reads blue, green carries links/life. */
  --aero-sky-base:       linear-gradient(180deg, #5AB4EC 0%, #2E8FCE 49%, #1E7FC4 50%, #1668AE 100%);
  --aero-sky-base-hover: linear-gradient(180deg, #6FC2F2 0%, #3C9CD8 49%, #2589CE 50%, #1B72BA 100%);
  --aero-sky-base-press: linear-gradient(180deg, #1A72B6 0%, #155F9C 100%);
  --aero-teal-gloss:
    linear-gradient(180deg,
      rgba(255,255,255,0.85) 0%, rgba(255,255,255,0.55) 18%,
      rgba(255,255,255,0.18) 45%, rgba(255,255,255,0.05) 50%,
      rgba(255,255,255,0.00) 50%, rgba(255,255,255,0.10) 82%,
      rgba(255,255,255,0.22) 100%);
  --aero-teal-gloss-hover:
    linear-gradient(180deg,
      rgba(255,255,255,0.95) 0%, rgba(255,255,255,0.66) 18%,
      rgba(255,255,255,0.24) 45%, rgba(255,255,255,0.08) 50%,
      rgba(255,255,255,0.00) 50%, rgba(255,255,255,0.14) 82%,
      rgba(255,255,255,0.30) 100%);
  /* Bigger bar in Aero (Elisha: retro's 44px reads too small here). This wins over
     the :root base on the same <html> element, so --taskbar-height recomputes and
     every layout calc that references it follows. Retro stays 44px. */
  --taskbar-core-height: 52px;
  /* Dark-glass taskbar (the bar reads dark-glass in BOTH themes — Skyweaver redux). */
  --aero-tb-blur:   blur(20px) saturate(1.6) brightness(1.06);
  --aero-tb-base:   rgba(14, 34, 52, 0.62);
  --aero-tb-base-2: rgba(8, 22, 38, 0.74);
  --aero-tb-hair:   rgba(255, 255, 255, 0.85);
  --aero-tb-glow:   rgba(150, 205, 245, 0.22);
  /* Gel app-tile + scrollbar thumb (Aqua-dock convex). */
  --gel-spec:
    radial-gradient(140% 90% at 50% -28%,
      rgba(255,255,255,0.95) 0%, rgba(255,255,255,0.78) 18%,
      rgba(255,255,255,0.30) 40%, rgba(255,255,255,0.04) 50%,
      rgba(255,255,255,0) 52%);
  --gel-floor:
    radial-gradient(120% 70% at 50% 122%,
      rgba(255,255,255,0.34) 0%, rgba(255,255,255,0.10) 34%, rgba(255,255,255,0) 60%);
  --gel-tint:
    linear-gradient(180deg,
      rgba(232,246,255,0.30) 0%, rgba(190,226,248,0.16) 50%, rgba(150,205,240,0.22) 100%);
  --gel-shadow:
    inset 0 1px 0 rgba(255,255,255,0.92),
    inset 0 -3px 6px -2px rgba(12,70,110,0.22),
    0 2px 3px rgba(16,70,110,0.16),
    0 6px 14px -4px rgba(16,70,110,0.26);
  --gel-glow: 0 0 16px rgba(80,200,230,0.55);
  /* Shared idioms (the critic's "tokenize first" — stops 40 selectors drifting):
     ONE focus ring, ONE hover signal, a 3-step elevation scale, a reusable specular
     sweep gradient for interior ::before pseudos. */
  --aero-focus:     #0E7C93;  /* darkened from #1F9DC4: the lighter cyan was only 2.5:1 on sunken fills (WCAG 1.4.11 wants 3:1); still reads Aero-cyan, clears 3:1 on all light fills + the dark taskbar */
  /* Unified HOVER signal (Elisha: the outer cyan bloom read cliché; the music-track
     row that "kinda works" lights up CONTAINED inside its well). So this is no longer
     an outer halo — it's a Win7-explorer-style contained edge: a crisp 1px inner
     cyan border + a soft inner bottom-up fill-light. Pairs with each surface's own
     background:hover fill. Reused ~45 places, so they all stay consistent. */
  --aero-glow-cyan:
    inset 0 0 0 1px rgba(130, 208, 234, 0.52),
    inset 0 -8px 10px -8px rgba(120, 208, 234, 0.34);
  --aero-elev-1: 0 2px 6px rgba(16, 70, 110, 0.16);
  --aero-elev-2: 0 6px 16px rgba(16, 70, 110, 0.22);
  --aero-elev-3: 0 14px 38px rgba(16, 70, 110, 0.30);
  --aero-sweep:
    radial-gradient(140% 100% at 50% -28%,
      rgba(255,255,255,0.70) 0%, rgba(255,255,255,0.16) 50%, rgba(255,255,255,0) 80%);
}

/* ============================================================
   1b. TOKENS — DARK  ("Cascadia Aero — Nightfall")   [pure custom-props]
   ============================================================ */
:root[data-skin="aero"][data-theme="dark"] {
  --color-desktop:        #061A2A;
  --color-surface:        #103247;
  --color-surface-2:      #0E2B3D;
  --color-surface-sunken: #0A2334;
  --color-surface-hover:  #16455F;
  --color-text:           #DCEEF6;
  --color-text-muted:     #93B6C6;
  --color-text-inverse:   #FFFFFF;
  --color-on-accent:      #04141F;
  --color-titlebar-a:     #12568C;
  --color-titlebar-b:     #2E84C0;
  --color-titlebar-text:  #EAF6FF;
  --color-titlebar-inactive: #243F5A;
  /* accent = bright evergreen for dark (links on dark glass + green-on-dark CTAs) */
  --color-accent:         #45C46E;
  --color-accent-hover:   #6AD98D;
  --color-accent-soft:    #123424;
  --color-accent-bright:  #5BD082;
  --bevel-light:   rgba(160, 220, 245, 0.35);
  --bevel-dark:    rgba(2, 14, 24, 0.65);
  --bevel-darker:  rgba(120, 195, 225, 0.30);
  --bevel-out:  inset 0 1px 0 rgba(180, 230, 250, 0.30), inset 0 -9px 13px -9px rgba(0, 10, 20, 0.55);
  --bevel-in:   inset 0 1px 4px rgba(0, 12, 22, 0.55), inset 0 -1px 0 rgba(160, 220, 245, 0.18);
  --shadow-hard:    0 2px 10px rgba(0, 14, 26, 0.5);
  --shadow-hard-lg: 0 12px 36px rgba(0, 14, 26, 0.62);
  /* dark candy (white-blue sheen over dark surfaces so buttons aren't blinding) */
  --aero-gloss:
    linear-gradient(180deg,
      rgba(200,238,255,0.40) 0%, rgba(150,205,235,0.22) 18%,
      rgba(110,170,205,0.10) 45%, rgba(40,90,120,0.06) 50%,
      rgba(20,60,84,0.00) 50%, rgba(20,60,84,0.30) 82%, rgba(28,72,100,0.46) 100%);
  --aero-gloss-hover:
    linear-gradient(180deg,
      rgba(210,244,255,0.52) 0%, rgba(160,212,240,0.30) 18%,
      rgba(120,180,212,0.14) 45%, rgba(48,100,130,0.08) 50%,
      rgba(24,66,90,0.00) 50%, rgba(28,74,100,0.40) 82%, rgba(36,84,112,0.56) 100%);
  --aero-gloss-press:
    linear-gradient(180deg,
      rgba(20,60,84,0.55) 0%, rgba(14,46,66,0.6) 50%, rgba(20,60,84,0.5) 100%);
  --aero-tb-blur:   blur(22px) saturate(1.5) brightness(1.02);
  --aero-tb-base:   rgba(6, 20, 34, 0.70);
  --aero-tb-base-2: rgba(3, 12, 24, 0.82);
  --aero-tb-hair:   rgba(190, 232, 255, 0.55);
  --aero-tb-glow:   rgba(120, 190, 230, 0.16);
  --gel-spec:
    radial-gradient(140% 90% at 50% -28%,
      rgba(190,235,255,0.70) 0%, rgba(190,235,255,0.46) 18%,
      rgba(190,235,255,0.18) 40%, rgba(190,235,255,0.03) 50%,
      rgba(190,235,255,0) 52%);
  --gel-tint:
    linear-gradient(180deg,
      rgba(34,86,118,0.34) 0%, rgba(18,56,82,0.22) 50%, rgba(12,46,68,0.30) 100%);
  --gel-shadow:
    inset 0 1px 0 rgba(180,230,250,0.30),
    inset 0 -3px 6px -2px rgba(0,12,22,0.40),
    0 2px 3px rgba(0,12,22,0.30),
    0 6px 14px -4px rgba(0,12,22,0.55);
  --gel-glow: 0 0 16px rgba(70,190,225,0.45);
  --aero-focus:     #6FDDF2;
  --aero-glow-cyan:
    inset 0 0 0 1px rgba(125, 205, 235, 0.42),
    inset 0 -8px 10px -8px rgba(110, 198, 228, 0.30);
  --aero-elev-1: 0 2px 8px rgba(0, 12, 22, 0.40);
  --aero-elev-2: 0 6px 18px rgba(0, 12, 22, 0.50);
  --aero-elev-3: 0 14px 40px rgba(0, 14, 26, 0.55);
  --aero-sweep:
    radial-gradient(140% 100% at 50% -28%,
      rgba(190,235,255,0.30) 0%, rgba(190,235,255,0.10) 50%, rgba(190,235,255,0) 80%);
}

@media (prefers-color-scheme: dark) {
  :root[data-skin="aero"]:not([data-theme]) {
    --color-desktop:        #061A2A;
    --color-surface:        #103247;
    --color-surface-2:      #0E2B3D;
    --color-surface-sunken: #0A2334;
    --color-surface-hover:  #16455F;
    --color-text:           #DCEEF6;
    --color-text-muted:     #93B6C6;
    --color-text-inverse:   #FFFFFF;
    --color-on-accent:      #04141F;
    --color-titlebar-a:     #12568C;
    --color-titlebar-b:     #2E84C0;
    --color-titlebar-text:  #EAF6FF;
    --color-titlebar-inactive: #243F5A;
    --color-accent:         #45C46E;
    --color-accent-hover:   #6AD98D;
    --color-accent-soft:    #123424;
    --color-accent-bright:  #5BD082;
    --bevel-light:   rgba(160, 220, 245, 0.35);
    --bevel-dark:    rgba(2, 14, 24, 0.65);
    --bevel-darker:  rgba(120, 195, 225, 0.30);
    --bevel-out:  inset 0 1px 0 rgba(180, 230, 250, 0.30), inset 0 -9px 13px -9px rgba(0, 10, 20, 0.55);
    --bevel-in:   inset 0 1px 4px rgba(0, 12, 22, 0.55), inset 0 -1px 0 rgba(160, 220, 245, 0.18);
    --shadow-hard:    0 2px 10px rgba(0, 14, 26, 0.5);
    --shadow-hard-lg: 0 12px 36px rgba(0, 14, 26, 0.62);
    --aero-gloss:
      linear-gradient(180deg,
        rgba(200,238,255,0.40) 0%, rgba(150,205,235,0.22) 18%,
        rgba(110,170,205,0.10) 45%, rgba(40,90,120,0.06) 50%,
        rgba(20,60,84,0.00) 50%, rgba(20,60,84,0.30) 82%, rgba(28,72,100,0.46) 100%);
    --aero-gloss-hover:
      linear-gradient(180deg,
        rgba(210,244,255,0.52) 0%, rgba(160,212,240,0.30) 18%,
        rgba(120,180,212,0.14) 45%, rgba(48,100,130,0.08) 50%,
        rgba(24,66,90,0.00) 50%, rgba(28,74,100,0.40) 82%, rgba(36,84,112,0.56) 100%);
    --aero-gloss-press:
      linear-gradient(180deg,
        rgba(20,60,84,0.55) 0%, rgba(14,46,66,0.6) 50%, rgba(20,60,84,0.5) 100%);
    --aero-tb-blur:   blur(22px) saturate(1.5) brightness(1.02);
    --aero-tb-base:   rgba(6, 20, 34, 0.70);
    --aero-tb-base-2: rgba(3, 12, 24, 0.82);
    --aero-tb-hair:   rgba(190, 232, 255, 0.55);
    --aero-tb-glow:   rgba(120, 190, 230, 0.16);
    --gel-spec:
      radial-gradient(140% 90% at 50% -28%,
        rgba(190,235,255,0.70) 0%, rgba(190,235,255,0.46) 18%,
        rgba(190,235,255,0.18) 40%, rgba(190,235,255,0.03) 50%,
        rgba(190,235,255,0) 52%);
    --gel-tint:
      linear-gradient(180deg,
        rgba(34,86,118,0.34) 0%, rgba(18,56,82,0.22) 50%, rgba(12,46,68,0.30) 100%);
    --gel-shadow:
      inset 0 1px 0 rgba(180,230,250,0.30),
      inset 0 -3px 6px -2px rgba(0,12,22,0.40),
      0 2px 3px rgba(0,12,22,0.30),
      0 6px 14px -4px rgba(0,12,22,0.55);
    --gel-glow: 0 0 16px rgba(70,190,225,0.45);
    --aero-focus:     #6FDDF2;
    --aero-glow-cyan:
      inset 0 0 0 1px rgba(125, 205, 235, 0.42),
      inset 0 -8px 10px -8px rgba(110, 198, 228, 0.30);
    --aero-elev-1: 0 2px 8px rgba(0, 12, 22, 0.40);
    --aero-elev-2: 0 6px 18px rgba(0, 12, 22, 0.50);
    --aero-elev-3: 0 14px 40px rgba(0, 14, 26, 0.55);
    --aero-sweep:
      radial-gradient(140% 100% at 50% -28%,
        rgba(190,235,255,0.30) 0%, rgba(190,235,255,0.10) 50%, rgba(190,235,255,0) 80%);
  }
}

/* ============================================================
   2. FONT RENDERING  [real-props only — kept separate by the structure rule]
   Base :root forces -webkit-font-smoothing:none for the pixel bitmap; a humanist
   sans needs antialiasing. (No `font-smooth` — it's the non-standard prop that
   helped poison the mixed rule.)
   ============================================================ */
:root[data-skin="aero"] { -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; }

/* ============================================================
   3. WINDOWS / DIALOGS — frosted glass frame + curved specular sweep
   (no overflow:hidden — the ::before self-clips via its own radius, and
   clipping the window would eat resize/maximize/mobile-sheet affordances)
   ============================================================ */
:root[data-skin="aero"] .window,
:root[data-skin="aero"] .os-dialog {
  position: relative;
  /* §41 LIGHT-MODE GLASS: the old near-white, low-range surface read as flat
     frosted-plastic. Deeper tonal range top→bottom + a crisp dark bottom edge +
     a soft inner-bottom deepening give the body real glass depth, and the
     specular below now has a mid-tone to pop against. (Dark mode is unaffected —
     it's overridden at L401.) */
  border: 1px solid rgba(70, 136, 178, 0.62);
  border-radius: var(--aero-radius-lg);
  background:
    linear-gradient(180deg,
      rgba(247, 252, 255, 0.66) 0%,
      rgba(212, 233, 247, 0.56) 46%,
      rgba(190, 218, 239, 0.62) 100%);
  -webkit-backdrop-filter: blur(var(--aero-shell-blur, 14px)) saturate(1.6) brightness(1.02);
          backdrop-filter: blur(var(--aero-shell-blur, 14px)) saturate(1.6) brightness(1.02);
  box-shadow:
    inset 0 1px 0 rgba(255, 255, 255, 0.90),
    inset 0 0 0 1px rgba(255, 255, 255, 0.20),
    inset 0 -14px 22px rgba(60, 122, 168, 0.12),
    inset 0 -1px 0 rgba(16, 70, 110, 0.22),
    0 12px 34px rgba(16, 70, 110, 0.32),
    0 2px 8px rgba(16, 70, 110, 0.20);
}
:root[data-skin="aero"] .window.is-active,
:root[data-skin="aero"] .os-dialog {
  box-shadow:
    inset 0 1px 0 rgba(255, 255, 255, 0.92),
    inset 0 0 0 1px rgba(255, 255, 255, 0.22),
    0 18px 48px rgba(16, 70, 110, 0.38),
    0 3px 10px rgba(16, 70, 110, 0.22);
}
:root[data-skin="aero"] .window::before,
:root[data-skin="aero"] .os-dialog::before {
  content: "";
  position: absolute;
  inset: 0 0 auto 0;
  height: 38%;
  pointer-events: none;
  z-index: 0;
  border-radius: calc(var(--aero-radius-lg) - 1px) calc(var(--aero-radius-lg) - 1px) 0 0;
  background:
    radial-gradient(140% 100% at 50% -28%,
      rgba(255, 255, 255, 0.85) 0%, rgba(255, 255, 255, 0.55) 34%,
      rgba(255, 255, 255, 0.16) 62%, rgba(255, 255, 255, 0) 80%),
    linear-gradient(180deg,
      rgba(255, 255, 255, 0.45) 0%, rgba(255, 255, 255, 0.10) 50%,
      rgba(255, 255, 255, 0) 100%);
  mix-blend-mode: screen;
}
:root[data-skin="aero"][data-theme="dark"] .window,
:root[data-skin="aero"][data-theme="dark"] .os-dialog {
  border-color: rgba(120, 195, 225, 0.30);
  background:
    linear-gradient(180deg,
      rgba(16, 50, 71, 0.62) 0%, rgba(14, 43, 61, 0.55) 46%, rgba(10, 35, 52, 0.58) 100%);
  -webkit-backdrop-filter: blur(var(--aero-shell-blur, 14px)) saturate(1.5) brightness(0.92);
          backdrop-filter: blur(var(--aero-shell-blur, 14px)) saturate(1.5) brightness(0.92);
  box-shadow:
    inset 0 1px 0 rgba(180, 230, 250, 0.28),
    inset 0 0 0 1px rgba(160, 220, 245, 0.10),
    0 14px 40px rgba(0, 14, 26, 0.55),
    0 3px 10px rgba(0, 14, 26, 0.40);
}
:root[data-skin="aero"][data-theme="dark"] .window::before,
:root[data-skin="aero"][data-theme="dark"] .os-dialog::before {
  background:
    radial-gradient(140% 100% at 50% -28%,
      rgba(190, 235, 255, 0.30) 0%, rgba(190, 235, 255, 0.16) 38%,
      rgba(190, 235, 255, 0) 78%),
    linear-gradient(180deg,
      rgba(190, 235, 255, 0.14) 0%, rgba(190, 235, 255, 0) 100%);
}

/* ---- Text selection → cool deep-teal (the base highlights with the warm accent;
   in a cool Aero OS that clashes, and real Aero/Vista used a cool selection). #0E7C93
   is the AQUA-family / --aero-focus(light) value — deliberately a different hue family
   from the SKY-chrome selected rows/tabs (selection is reading-text highlight, not a
   selected control). Outranks the bare base `::selection` (0,0,0,1) via the skin scope.
   Retro keeps its tangerine. -------- */
:root[data-skin="aero"] ::selection {
  /* #0E7C93 (was #1C8CA6): white-on = 4.86:1, clears WCAG 2.1 SC 1.4.3 (4.5:1) for
     selected reading text in BOTH themes; the old teal was 3.92:1. Same token as
     --aero-focus(light). Adversarial-audit finding #1 (2026-06-27). */
  background: #0E7C93;
  color: #fff;
  text-shadow: none;
}

/* ============================================================
   4. TITLE BARS + BODY — teal glass titlebar w/ specular; near-opaque
   reading body (translucent enough to read as glass, opaque enough for text)
   ============================================================ */
:root[data-skin="aero"] .window__titlebar,
:root[data-skin="aero"] .os-dialog__bar {
  position: relative;
  z-index: 1;
  background:
    linear-gradient(180deg,
      rgba(255, 255, 255, 0.50) 0%, rgba(255, 255, 255, 0.12) 46%,
      rgba(255, 255, 255, 0.00) 50%, rgba(255, 255, 255, 0.08) 100%),
    linear-gradient(90deg, rgba(18, 94, 158, 0.92), rgba(90, 180, 236, 0.88));
  border-bottom: 1px solid rgba(10, 58, 96, 0.45);
  border-radius: calc(var(--aero-radius-lg) - 1px) calc(var(--aero-radius-lg) - 1px) 0 0;
  /* Full-perimeter bright inner rim (the doc's glass tell: a perimeter rim
     sandwiched by the dark bottom hairline) — not a top-only highlight. */
  box-shadow:
    inset 0 0 0 1px rgba(255, 255, 255, 0.22),
    inset 0 1px 0 rgba(255, 255, 255, 0.55);
  text-shadow: 0 1px 1px rgba(0, 40, 55, 0.45);
}
:root[data-skin="aero"] .window__titlebar::before,
:root[data-skin="aero"] .os-dialog__bar::before {
  content: "";
  position: absolute;
  inset: 0;
  pointer-events: none;
  border-radius: inherit;
  /* Gentle top REFLECTION band (a glass tell), not the strong painted spotlight
     that read as the "fake highlighted top." */
  background: linear-gradient(180deg,
    rgba(255, 255, 255, 0.22) 0%, rgba(255, 255, 255, 0.06) 42%,
    rgba(255, 255, 255, 0) 62%);
}
:root[data-skin="aero"] .window:not(.is-active) .window__titlebar {
  /* inactive = ghostlier glass (more transmissive, desaturated) than the active bar */
  background:
    linear-gradient(180deg, rgba(255,255,255,0.24) 0%, rgba(255,255,255,0) 50%),
    linear-gradient(90deg, rgba(150,180,192,0.44), rgba(186,208,216,0.30));
}
/* Title TEXT — kill the inherited Win95 treatment (UPPERCASE + 1.5px tracking +
   hard 1px black shadow). Real Aqua/Aero titlebars are TITLE-CASE, ~semibold,
   with a soft cool shadow. The titles are already nicely cased in source
   ("Build Log", "CD Player", "resume.doc"), so text-transform:none reads right. */
:root[data-skin="aero"] .window__title,
:root[data-skin="aero"] .os-dialog__title {
  text-transform: none;
  letter-spacing: normal;
  font-weight: 600;
  /* dark halo (not a single soft shadow) — carries AA for the white glyphs now
     that the glass bar lets the bright wallpaper through behind them. .os-dialog__title
     shares the identical transmissive glass bar (404 page, contact "Message sent" toast)
     so it needs the same halo — it was missing it. Adversarial-audit finding #2. */
  text-shadow:
    0 1px 1px rgba(0, 30, 42, 0.70),
    0 0 4px rgba(0, 26, 38, 0.55);
}
:root[data-skin="aero"] .window__body,
:root[data-skin="aero"] .os-dialog__body {
  position: relative;
  z-index: 1;
  /* §41 LIGHT-MODE BODY: a subtle top-light → bottom-blue gradient + a faint inner
     edge so the body reads as glass with depth, not a flat white plastic panel.
     Stays light enough for body-text AA. */
  background:
    linear-gradient(180deg,
      rgba(253, 254, 255, 0.96) 0%,
      rgba(237, 247, 254, 0.94) 42%,
      rgba(224, 240, 251, 0.93) 100%);
  border-radius: 0 0 calc(var(--aero-radius-lg) - 2px) calc(var(--aero-radius-lg) - 2px);
  box-shadow:
    inset 0 1px 0 rgba(255, 255, 255, 0.70),
    inset 0 2px 6px rgba(16, 70, 110, 0.12),
    inset 0 0 0 1px rgba(120, 175, 210, 0.12);
}
:root[data-skin="aero"][data-theme="dark"] .window__titlebar,
:root[data-skin="aero"][data-theme="dark"] .os-dialog__bar {
  background:
    linear-gradient(180deg,
      rgba(190,235,255,0.30) 0%, rgba(190,235,255,0.08) 46%,
      rgba(255,255,255,0) 50%, rgba(10,40,60,0.20) 100%),
    linear-gradient(90deg, rgba(14,74,124,0.92), rgba(46,124,180,0.88));
}
:root[data-skin="aero"][data-theme="dark"] .window__body,
:root[data-skin="aero"][data-theme="dark"] .os-dialog__body {
  background:
    linear-gradient(180deg, rgba(16,50,71,0.95) 0%, rgba(14,43,61,0.93) 100%);
  box-shadow:
    inset 0 1px 0 rgba(160, 220, 245, 0.16),
    inset 0 2px 5px rgba(0, 12, 22, 0.45);
}

/* ============================================================
   5. GLOSSY CANDY BUTTONS — .btn / .window__btn / .btn--primary  (3-state)
   (.taskbar__item is NOT here — it's a dark-bar glass lozenge in §6)
   ============================================================ */
:root[data-skin="aero"] .btn,
:root[data-skin="aero"] .window__btn {
  border: 1px solid rgba(120, 170, 205, 0.75);
  border-radius: var(--aero-radius);
  background: var(--aero-gloss), var(--color-surface);
  box-shadow:
    inset 0 1px 0 rgba(255, 255, 255, 0.95),
    inset 0 -6px 8px -6px rgba(255, 255, 255, 0.55),
    inset 0 0 0 1px rgba(255, 255, 255, 0.30),
    0 1px 2px rgba(16, 70, 110, 0.22);
  transition: background var(--speed-fast) var(--ease-soft),
              box-shadow var(--speed-fast) var(--ease-soft);
}
:root[data-skin="aero"] .btn:hover,
:root[data-skin="aero"] .window__btn:hover {
  background: var(--aero-gloss-hover), var(--color-surface-hover);
  box-shadow:
    inset 0 1px 0 rgba(255, 255, 255, 1),
    inset 0 -7px 9px -6px rgba(255, 255, 255, 0.70),
    inset 0 0 0 1px rgba(255, 255, 255, 0.40),
    0 2px 5px rgba(16, 70, 110, 0.26);
}
:root[data-skin="aero"] .btn:active,
:root[data-skin="aero"] .window__btn:active {
  background: var(--aero-gloss-press), var(--color-surface-sunken);
  box-shadow:
    inset 0 1px 3px rgba(16, 70, 110, 0.34),
    inset 0 -1px 0 rgba(255, 255, 255, 0.45),
    0 1px 1px rgba(16, 70, 110, 0.16);
}
:root[data-skin="aero"] .window.is-maximized .window__btn[data-action="maximize"] {
  background: var(--aero-gloss-press), var(--color-surface-hover);
  box-shadow:
    inset 0 1px 3px rgba(16, 70, 110, 0.30),
    inset 0 -1px 0 rgba(255, 255, 255, 0.50),
    inset 0 0 0 1px rgba(63, 196, 214, 0.55);
}
:root[data-skin="aero"] .window__btn { border-radius: 7px; }

/* R4-2 — CTA buttons read as convex Aqua/Vista GLASS buttons, not flat uppercase
   lozenges. (a) title-case text on every .btn (kills the base Win95 uppercase +
   1px tracking); (b) secondary .btn (not primary) gets a wet pale-aqua body + a
   teal bottom rim-bounce so it reads convex, not white-on-white. .window__btn is a
   separate element (untouched); .btn--primary keeps its teal gel (excluded). */
:root[data-skin="aero"] .btn {
  text-transform: none;
  letter-spacing: normal;
  font-size: var(--text-sm);
  font-weight: 600;
}
:root[data-skin="aero"] .btn:not(.btn--primary) {
  color: #0b4754;
  background:
    var(--aero-gloss),
    linear-gradient(180deg, #FCFEFF 0%, #ECF7FD 54%, #DBEEF8 100%);
  box-shadow:
    inset 0 1px 0 rgba(255, 255, 255, 0.95),
    inset 0 -7px 9px -7px rgba(120, 205, 232, 0.55),
    inset 0 0 0 1px rgba(255, 255, 255, 0.45),
    0 2px 5px rgba(16, 70, 110, 0.20),
    0 1px 1px rgba(16, 70, 110, 0.14);
}
:root[data-skin="aero"] .btn:not(.btn--primary):hover {
  background:
    var(--aero-gloss-hover),
    linear-gradient(180deg, #FFFFFF 0%, #F1FAFE 54%, #E2F4FC 100%);
  box-shadow:
    inset 0 1px 0 rgba(255, 255, 255, 1),
    inset 0 -8px 10px -7px rgba(130, 212, 238, 0.60),
    inset 0 0 0 1px rgba(255, 255, 255, 0.55),
    0 3px 7px rgba(16, 70, 110, 0.24),
    0 1px 1px rgba(16, 70, 110, 0.16);
}
:root[data-skin="aero"] .btn:not(.btn--primary):active {
  background:
    var(--aero-gloss-press),
    linear-gradient(180deg, #DCEFF8 0%, #CCE6F3 100%);
  box-shadow:
    inset 0 1px 3px rgba(16, 70, 110, 0.30),
    inset 0 -1px 0 rgba(255, 255, 255, 0.50),
    0 1px 1px rgba(16, 70, 110, 0.14);
}
/* DARK siblings (audit: the secondary .btn hardcoded a near-white body + #0b4754 ink
   with NO dark variant, so the "About me" / "Read the blog" / "Read on Substack" CTAs
   blew out white on Nightfall. Mirror the §17 .work-item dark teal-glass: deep teal
   body, light-cyan ink, light-cyan inner sheen instead of white. */
:root[data-skin="aero"][data-theme="dark"] .btn:not(.btn--primary) {
  color: rgba(214, 244, 255, 0.96);
  background: linear-gradient(180deg, rgba(120,200,235,0.16) 0%, rgba(20,58,80,0.42) 54%, rgba(12,40,58,0.52) 100%);
  box-shadow:
    inset 0 1px 0 rgba(160,220,245,0.22),
    inset 0 -7px 9px -7px rgba(70,165,195,0.38),
    inset 0 0 0 1px rgba(160,220,245,0.14),
    0 2px 5px rgba(0,14,26,0.42),
    0 1px 1px rgba(0,14,26,0.30);
}
:root[data-skin="aero"][data-theme="dark"] .btn:not(.btn--primary):hover {
  background: linear-gradient(180deg, rgba(140,212,245,0.22) 0%, rgba(26,66,90,0.48) 54%, rgba(16,46,64,0.56) 100%);
  box-shadow:
    inset 0 1px 0 rgba(180,230,250,0.30),
    inset 0 -8px 10px -7px rgba(90,185,215,0.44),
    inset 0 0 0 1px rgba(170,225,248,0.20),
    0 3px 7px rgba(0,14,26,0.46),
    0 1px 1px rgba(0,14,26,0.32);
}
:root[data-skin="aero"][data-theme="dark"] .btn:not(.btn--primary):active {
  background: linear-gradient(180deg, rgba(14,44,62,0.60) 0%, rgba(10,34,50,0.66) 100%);
  box-shadow:
    inset 0 1px 3px rgba(0,16,28,0.50),
    inset 0 -1px 0 rgba(160,220,245,0.16),
    0 1px 1px rgba(0,14,26,0.30);
}

:root[data-skin="aero"] .btn--primary {
  color: #fff;
  border-color: rgba(8, 90, 110, 0.60);
  background: var(--aero-teal-gloss), var(--aero-sky-base);
  box-shadow:
    inset 0 1px 0 rgba(255, 255, 255, 0.80),
    inset 0 -7px 9px -7px rgba(255, 255, 255, 0.40),
    0 1px 2px rgba(6, 60, 74, 0.40);
  text-shadow: 0 1px 1px rgba(0, 40, 55, 0.45);
}
:root[data-skin="aero"] .btn--primary:hover {
  background: var(--aero-teal-gloss-hover), var(--aero-sky-base-hover);
  box-shadow:
    inset 0 1px 0 rgba(255, 255, 255, 0.92),
    inset 0 -8px 10px -7px rgba(255, 255, 255, 0.55),
    0 2px 6px rgba(6, 60, 74, 0.44);
}
:root[data-skin="aero"] .btn--primary:active {
  background:
    linear-gradient(180deg, rgba(255,255,255,0.30) 0%, rgba(255,255,255,0.06) 50%, rgba(255,255,255,0.16) 100%),
    var(--aero-sky-base-press);
  box-shadow:
    inset 0 1px 4px rgba(0, 40, 55, 0.45),
    inset 0 -1px 0 rgba(255, 255, 255, 0.30),
    0 1px 1px rgba(6, 60, 74, 0.30);
}

/* ============================================================
   6. TASKBAR / START — Aero "redux" DARK glass bar (in BOTH themes)
   ============================================================ */
:root[data-skin="aero"] .taskbar {
  /* NB: base .taskbar is position:fixed (full-width, welded to the bottom). Do
     NOT set position here — it drops the bar out of fixed into grid flow. The
     ::after anchors to the base-fixed element fine. */
  background:
    radial-gradient(140% 90% at 50% -28%,
      rgba(255, 255, 255, 0.28) 0%, rgba(255, 255, 255, 0.10) 26%,
      rgba(255, 255, 255, 0) 52%),
    linear-gradient(180deg,
      var(--aero-tb-base) 0%, var(--aero-tb-base) 46%, var(--aero-tb-base-2) 100%);
  -webkit-backdrop-filter: var(--aero-tb-blur);
          backdrop-filter: var(--aero-tb-blur);
  border-top: 1px solid var(--aero-tb-hair);
  box-shadow:
    inset 0  1px 0  var(--aero-tb-hair),
    inset 0  6px 14px -6px var(--aero-tb-glow),
    inset 0 -1px 0  rgba(0, 0, 0, 0.35),
    0 -3px 18px rgba(10, 40, 70, 0.30);
}
:root[data-skin="aero"] .taskbar::after {
  content: "";
  position: absolute;
  inset: 1px 0 auto 0;
  height: 60%;
  pointer-events: none;
  background:
    radial-gradient(120% 200% at 18% -120%,
      rgba(255, 255, 255, 0.30) 0%, rgba(255, 255, 255, 0.08) 34%,
      rgba(255, 255, 255, 0) 60%);
  mix-blend-mode: screen;
}
:root[data-skin="aero"]:not([data-theme="dark"]) .taskbar {
  --aero-tb-base:   rgba(14, 34, 52, 0.58);
  --aero-tb-base-2: rgba(8, 22, 38, 0.70);
}

:root[data-skin="aero"] .taskbar__start {
  color: #fff;
  /* R4-4: the start button IS a round Win7-style Aero orb now — no pill, no
     shouty wordmark. Keeps the teal gel + gloss it already had; the conifer
     emblem + the a11y-only label are below. Retro keeps its pill + "CASCADIA OS".
     46px (was 40) — Elisha wanted the orb bigger + more prominent; still clears the
     52px taskbar core with a few px of margin. */
  width: 46px;
  min-width: 46px;
  height: 46px;
  padding: 0;
  gap: 0;
  justify-content: center;
  flex-shrink: 0;
  border: 1px solid rgba(12, 70, 116, 0.65);
  border-radius: 50%;
  background:
    linear-gradient(180deg,
      rgba(255, 255, 255, 0.62) 0%, rgba(255, 255, 255, 0.18) 46%,
      rgba(255, 255, 255, 0.00) 50%, rgba(255, 255, 255, 0.06) 100%),
    linear-gradient(180deg, #5AB4EC 0%, #1E7FC4 50%, #1668AE 51%, #135A98 100%);
  box-shadow:
    inset 0  1px 0  rgba(255, 255, 255, 0.95),
    inset 0 -7px 9px -5px rgba(120, 235, 255, 0.55),
    0 1px 2px rgba(6, 30, 50, 0.45),
    0 0 0 1px rgba(6, 60, 78, 0.35);
  text-shadow: 0 1px 1px rgba(0, 40, 55, 0.5);
  position: relative;
  overflow: hidden;
  transition: filter var(--speed) var(--ease-soft),
              box-shadow var(--speed) var(--ease-soft);
}
:root[data-skin="aero"] .taskbar__start::before {
  content: "";
  position: absolute;
  left: 16%; right: 16%; top: 8%;
  height: 42%;
  border-radius: 50%;
  pointer-events: none;
  /* round wet-orb top cap (its own inset shape — a sliver of rim shows around it) */
  background: linear-gradient(180deg,
    rgba(255, 255, 255, 0.92) 0%, rgba(255, 255, 255, 0.12) 100%);
}
:root[data-skin="aero"] .taskbar__start:hover {
  /* contained gel response (brighten + inner under-glow), no outer cyan halo */
  filter: brightness(1.08) saturate(1.08);
  box-shadow:
    inset 0  1px 0  rgba(255, 255, 255, 1),
    inset 0 -8px 11px -5px rgba(140, 240, 255, 0.7),
    0 2px 5px rgba(6, 30, 50, 0.5),
    0 0 0 1px rgba(6, 60, 78, 0.4);
}
:root[data-skin="aero"] .taskbar__start:active {
  filter: brightness(0.94);
  box-shadow:
    inset 0 2px 6px rgba(0, 40, 60, 0.45),
    inset 0 1px 0 rgba(255, 255, 255, 0.35),
    0 1px 2px rgba(6, 30, 50, 0.4);
}
/* R4-4 — the Cascadia conifer emblem inside the orb (white vector, engraved). */
:root[data-skin="aero"] .taskbar__start::after {
  content: "";
  position: absolute;
  inset: 0;
  margin: auto;
  width: 25px;
  height: 25px;
  pointer-events: none;
  background: #fff;
  -webkit-mask: center / contain no-repeat;
  mask: center / contain no-repeat;
  -webkit-mask-image: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'><path d='M12 2 L16 9 L13.6 9 L17.5 15 L14 15 L14 19 L10 19 L10 15 L6.5 15 L10.4 9 L8 9 Z' fill='%23fff'/></svg>");
  mask-image: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'><path d='M12 2 L16 9 L13.6 9 L17.5 15 L14 15 L14 19 L10 19 L10 15 L6.5 15 L10.4 9 L8 9 Z' fill='%23fff'/></svg>");
  filter: drop-shadow(0 1px 0 rgba(255, 255, 255, 0.30)) drop-shadow(0 -1px 1px rgba(6, 33, 47, 0.45));
  opacity: 0.96;
}
/* Keep the "Cascadia OS" wordmark for screen readers; the orb carries it visually. */
:root[data-skin="aero"] .taskbar__start > span:not(.taskbar__start-led) {
  position: absolute;
  width: 1px;
  height: 1px;
  overflow: hidden;
  clip: rect(0 0 0 0);
  clip-path: inset(50%);
  white-space: nowrap;
}

:root[data-skin="aero"] .taskbar__item {
  color: #DBEDF6;
  text-transform: none;
  letter-spacing: normal;
  /* base tabs are 30px/10px — too small in the bigger Aero bar; scale to match */
  height: 36px;
  font-size: 12px;
  /* Win7 Superbar tab (adapted to our dark-teal bar): tight radius + a dual
     border (dark outer hairline + light inner rim) + a diagonal lit-glass sheen
     + the Superbar inset top line. Not the old 8px candy lozenge. */
  border: 1px solid rgba(6, 18, 30, 0.55);
  border-radius: 3px;
  background:
    linear-gradient(-40deg, rgba(255, 255, 255, 0) 66%, rgba(196, 232, 250, 0.13) 102%),
    linear-gradient(180deg, rgba(116, 168, 208, 0.16) 0%, rgba(24, 60, 92, 0.30) 100%);
  box-shadow:
    inset 0 0 0 1px rgba(255, 255, 255, 0.16),
    inset 0 1px 0.3px rgba(0, 0, 0, 0.30),
    0 1px 2px rgba(6, 30, 50, 0.32);
  text-shadow: 0 1px 1px rgba(0, 28, 44, 0.50);
  position: relative;
  transition: background var(--speed) var(--ease-soft),
              box-shadow var(--speed) var(--ease-soft);
}
/* Superbar HOVER bloom — HOT-TRACKING (audit §6, Elisha-approved): the soft
   radial pool now FOLLOWS the pointer. aero-peek.js stamps the pointer's
   in-tab position as --mx/--my on pointermove; the fallbacks (50% 110%) ARE
   the previous static bottom-centre bloom, so no-JS and keyboard hover keep
   exactly the old look. Win7 tinted the pool from the icon's hue — Cascadia's
   tab glyphs are one aqua/sky gel by palette design, so the single sky tint
   IS the faithful derivation. Contained inside the tab (not an outer halo),
   hidden at rest, faded in on hover. */
:root[data-skin="aero"] .taskbar__item::after {
  content: "";
  position: absolute;
  inset: 0;
  border-radius: inherit;
  pointer-events: none;
  opacity: 0;
  /* Sky-family bloom (was cyan rgba(190,236,255) — a pre-refactor leftover that sat
     ~5-7° off the new sky chrome). rgba(150,210,255) brightens within the sky family
     so hover reads as the active sky tab lifting, not a competing cyan. Audit #6. */
  background: radial-gradient(82% 92% at var(--mx, 50%) var(--my, 110%),
    rgba(150, 210, 255, 0.45) 0%, rgba(150, 210, 255, 0) 64%);
  transition: opacity var(--speed) var(--ease-soft);
}
:root[data-skin="aero"] .taskbar__item:hover::after { opacity: 1; }
:root[data-skin="aero"] .taskbar__item:hover {
  border-color: rgba(180, 225, 248, 0.30);
  background:
    linear-gradient(-40deg, rgba(255, 255, 255, 0) 62%, rgba(210, 240, 255, 0.18) 102%),
    linear-gradient(180deg, rgba(140, 190, 226, 0.22) 0%, rgba(30, 70, 104, 0.36) 100%);
  box-shadow:
    inset 0 0 0 1px rgba(255, 255, 255, 0.26),
    inset 0 1px 0.3px rgba(0, 0, 0, 0.26),
    0 1px 3px rgba(6, 30, 50, 0.36);
}
:root[data-skin="aero"] .taskbar__item:active:not(.is-active) {
  background:
    linear-gradient(180deg, rgba(20, 50, 76, 0.50) 0%, rgba(14, 40, 62, 0.55) 100%);
  box-shadow:
    inset 0 2px 5px rgba(0, 26, 44, 0.50),
    inset 0 0 0 1px rgba(255, 255, 255, 0.10);
}
:root[data-skin="aero"] .taskbar__item:active:not(.is-active)::after { opacity: 0.4; }
:root[data-skin="aero"] .taskbar__item.is-active {
  color: #fff;
  border-color: rgba(6, 60, 76, 0.60);
  /* The lit, "running + focused" Superbar tab: a strong diagonal glass sheen + a
     bottom up-glow over a saturated sky body (#5AB4EC→#155F9C), with the inset top line. */
  background:
    linear-gradient(-40deg, rgba(255, 255, 255, 0) 56%, rgba(222, 248, 255, 0.50) 104%),
    radial-gradient(120% 84% at 50% 116%, rgba(150, 210, 255, 0.34) 0%, rgba(150, 210, 255, 0) 60%),
    linear-gradient(180deg, #5AB4EC 0%, #1E7FC4 52%, #155F9C 100%);
  box-shadow:
    inset 0 0 0 1px rgba(255, 255, 255, 0.32),
    inset 0 1px 0.3px rgba(0, 0, 0, 0.25),
    0 1px 2px rgba(6, 30, 50, 0.45);
}
/* Kill the base orange "running" LED square (.is-active::before, an 8px
   --color-accent block) — Elisha flagged the orange on the active tab. The lit
   teal Superbar tab above IS the active indicator (Win7 idiom: no separate LED),
   so the square is redundant + clashing. Retro keeps its square. */
:root[data-skin="aero"] .taskbar__item.is-active::before { display: none; }
/* Per-window taskbar glyphs (Elisha: real little icons for the windows, not the
   square). Injected by windows.js as .taskbar__item-ic[data-tbicon]; base hides it
   so retro stays text-only. Teal gel on the dark bar; the flex gap handles spacing. */
:root[data-skin="aero"] .taskbar__item-ic {
  display: inline-block;
  width: 18px;
  height: 18px;
  flex: none;
  background-repeat: no-repeat;
  background-position: center;
  background-image:
    radial-gradient(120% 80% at 38% 28%, rgba(255,255,255,0.55) 0%, rgba(255,255,255,0) 44%),
    radial-gradient(130% 130% at 50% 28%, #54CFE6 0%, #1A9AB1 52%, #0A6376 100%);
  filter: drop-shadow(0 0 1px rgba(150,225,250,0.35)) drop-shadow(0 1px 1px rgba(0,18,30,0.55));
}
:root[data-skin="aero"] .taskbar__item-ic[data-tbicon="person"]   { -webkit-mask: var(--gico-about)   center / 17px no-repeat; mask: var(--gico-about)   center / 17px no-repeat; }
:root[data-skin="aero"] .taskbar__item-ic[data-tbicon="doc"]      { -webkit-mask: var(--gico-blog)    center / 16px no-repeat; mask: var(--gico-blog)    center / 16px no-repeat; }
:root[data-skin="aero"] .taskbar__item-ic[data-tbicon="cup"]      { -webkit-mask: var(--gico-cup)     center / 17px no-repeat; mask: var(--gico-cup)     center / 17px no-repeat; }
:root[data-skin="aero"] .taskbar__item-ic[data-tbicon="star"]     { -webkit-mask: var(--gico-star)    center / 18px no-repeat; mask: var(--gico-star)    center / 18px no-repeat; }
:root[data-skin="aero"] .taskbar__item-ic[data-tbicon="folder"]   { -webkit-mask: var(--gico-folder)  center / 18px no-repeat; mask: var(--gico-folder)  center / 18px no-repeat; }
:root[data-skin="aero"] .taskbar__item-ic[data-tbicon="camera"]   { -webkit-mask: var(--gico-camera)  center / 18px no-repeat; mask: var(--gico-camera)  center / 18px no-repeat; }
:root[data-skin="aero"] .taskbar__item-ic[data-tbicon="note"]     { -webkit-mask: var(--gico-note)    center / 18px no-repeat; mask: var(--gico-note)    center / 18px no-repeat; }
:root[data-skin="aero"] .taskbar__item-ic[data-tbicon="tag"]      { -webkit-mask: var(--gico-tag)     center / 17px no-repeat; mask: var(--gico-tag)     center / 17px no-repeat; }
:root[data-skin="aero"] .taskbar__item-ic[data-tbicon="envelope"] { -webkit-mask: var(--gico-contact) center / 18px no-repeat; mask: var(--gico-contact) center / 18px no-repeat; }
/* Hovering the ACTIVE task: brighten the inner rim (the bottom bloom also fades
   in via the shared :hover::after) so the focused tab still responds. */
:root[data-skin="aero"] .taskbar__item.is-active:hover {
  box-shadow:
    inset 0 0 0 1px rgba(255, 255, 255, 0.42),
    inset 0 1px 0.3px rgba(0, 0, 0, 0.25),
    0 1px 3px rgba(6, 30, 50, 0.45);
}
/* (active gloss cap removed — the active sheen now lives in the background
   diagonal; the shared ::after is the Superbar hover bloom, which the active tab
   reuses on hover. Its ::before LED dot is unchanged.) */
@media (prefers-reduced-motion: reduce) {
  :root[data-skin="aero"] .taskbar__start,
  :root[data-skin="aero"] .taskbar__item { transition: none; }
}

:root[data-skin="aero"] .systray {
  border: 1px solid rgba(120, 175, 210, 0.55);
  border-radius: var(--aero-radius);
  background: rgba(255, 255, 255, 0.22);
  box-shadow: inset 0 1px 5px rgba(16, 70, 110, 0.20);
}
:root[data-skin="aero"] .taskbar__clock {
  border-radius: 6px;
  border: 1px solid rgba(8, 70, 90, 0.5);
}

/* ============================================================
   7. START MENU — frosted panel + curved sweep + aqua candy rows
   ============================================================ */
:root[data-skin="aero"] .start-menu {
  /* base .start-menu is position:fixed (anchored above the Start button) — keep
     it; isolation:isolate gives the -z sweep a stacking context without it. */
  isolation: isolate;
  border: 1px solid rgba(255, 255, 255, 0.65);
  border-radius: var(--aero-radius-lg);
  background-color: rgba(228, 244, 254, 0.62);
  background-image:
    radial-gradient(125% 70% at 50% -22%,
      rgba(255,255,255,0.95) 0%, rgba(255,255,255,0.55) 18%,
      rgba(255,255,255,0.12) 38%, rgba(255,255,255,0) 52%),
    linear-gradient(180deg,
      rgba(244,251,254,0.55) 0%, rgba(223,241,250,0.30) 30%,
      rgba(206,232,250,0.18) 60%, rgba(196,228,248,0.34) 100%);
  background-repeat: no-repeat;
  -webkit-backdrop-filter: blur(var(--aero-shell-blur, 14px)) saturate(1.55) brightness(1.06);
          backdrop-filter: blur(var(--aero-shell-blur, 14px)) saturate(1.55) brightness(1.06);
  box-shadow:
    inset 0 1px 0 0 rgba(255,255,255,0.92),
    inset 0 0 0 1px rgba(255,255,255,0.28),
    inset 0 -10px 16px -10px rgba(12,70,110,0.20),
    0 18px 46px rgba(16,70,110,0.34),
    0 2px 8px rgba(16,70,110,0.20);
}
:root[data-skin="aero"] .start-menu::before {
  content: "";
  position: absolute;
  left: 1px; right: 1px; top: 1px;
  height: 42%;
  z-index: -1;
  pointer-events: none;
  border-radius: calc(var(--aero-radius-lg) - 1px) calc(var(--aero-radius-lg) - 1px) 0 0;
  background: radial-gradient(140% 90% at 50% -34%,
    rgba(255,255,255,0.85) 0%, rgba(255,255,255,0.40) 30%,
    rgba(255,255,255,0.10) 55%, rgba(255,255,255,0) 72%);
}
:root[data-skin="aero"] .start-menu__item {
  position: relative;
  border-radius: 6px;
  transition: background var(--speed-fast) var(--ease-soft),
              box-shadow var(--speed-fast) var(--ease-soft);
}
:root[data-skin="aero"] .start-menu__item:hover,
:root[data-skin="aero"] .start-menu__item:focus-visible,
:root[data-skin="aero"] .start-menu__item[aria-expanded="true"] {
  color: #fff;
  border-color: rgba(8,96,118,0.55);
  /* Kill the green flash on hover-OUT: the base rule sets background:var(--color-accent)
     (now evergreen) as the background-COLOR; our aqua gradient only overrides the
     background-IMAGE. Image can't animate so it snaps away instantly on un-hover,
     but the green color DOES animate via the `background` transition — exposing a
     green fade. Setting the color transparent here means there's no green underneath
     the gradient to reveal. (Elisha: start-menu flashed green on hover-out.) */
  background-color: transparent;
  background-image:
    linear-gradient(180deg,
      rgba(255,255,255,0.70) 0%, rgba(255,255,255,0.34) 8%,
      rgba(255,255,255,0.08) 46%, rgba(255,255,255,0) 50%),
    linear-gradient(180deg, #5BD0E2 0%, #34BBD0 49%, #1597AD 50%, #0E8197 100%);
  box-shadow:
    inset 0 1px 0 rgba(255,255,255,0.85),
    inset 0 -7px 9px -6px rgba(120,235,255,0.50),
    inset 0 0 0 1px rgba(255,255,255,0.18),
    0 1px 2px rgba(8,60,84,0.30);
  text-shadow: 0 1px 1px rgba(0,42,56,0.42);
  outline: none;
}
:root[data-skin="aero"] .start-menu__item:active,
:root[data-skin="aero"] .fl-menu__pop button:active:not([disabled]) {
  background-color: transparent;  /* same green-flash guard as :hover above */
  background-image:
    linear-gradient(180deg,
      rgba(255,255,255,0.34) 0%, rgba(255,255,255,0.06) 46%, rgba(255,255,255,0) 50%),
    linear-gradient(180deg, #1294AA 0%, #128FA6 49%, #0C7A8F 50%, #0A6E82 100%);
  box-shadow:
    inset 0 1px 3px rgba(6,46,66,0.45),
    inset 0 -1px 0 rgba(255,255,255,0.20);
}
/* Green-flash guard (the same bug as start-menu, "elsewhere across the UI" — Elisha).
   Every menu/list item whose BASE :hover/active/expanded sets background:var(--color-accent)
   (now evergreen) but whose AERO override swaps only the background-IMAGE will flash green
   on un-hover (image snaps, the green color animates out). Force the backing color
   transparent on each so there's no green to reveal. Only image-only overrides are listed
   — rules that use the `background` shorthand (e.g. .filelist__row:hover) already set their
   own color and must NOT be forced transparent. */
:root[data-skin="aero"] .fl-menu__pop button:hover:not([disabled]),
:root[data-skin="aero"] .fl-menu__pop button:focus-visible,
:root[data-skin="aero"] .filelist__menu-item:hover,
:root[data-skin="aero"] .filelist__menu-item[aria-expanded="true"],
:root[data-skin="aero"] .readme__reveal:hover {
  background-color: transparent;
}
@media (max-width: 520px) {
  :root[data-skin="aero"] .start-menu::before { display: none; }
  /* W7 "small taskbar" mode: at phone widths the tab LABELS come off and the
     gel glyph carries the button (Win7's icon-only Superbar). font-size:0 hides
     the text node (windows.js appends the title as a text node); the glyph span
     keeps its own 18px box, textContent + title= still give the a11y name and
     the long-press tooltip. Only tabs that HAVE a glyph collapse — an unmatched
     window title keeps its text (:has guard). Kills the off-screen-tab scroll
     on 3-window pages (About/Art). Retro keeps its text tabs. */
  :root[data-skin="aero"] .taskbar__item:has(.taskbar__item-ic) {
    font-size: 0;
    min-width: 44px;
    flex: 0 1 auto;
    justify-content: center;
    padding: 0 12px;
  }
}

/* ============================================================
   8. SIDEBAR ICONS → teal-gel GLYPHS on a bubble-on-demand tile
   The launcher icons are gel OBJECTS (see below) sitting directly on the
   wallpaper — no resting tile, so the colours read against the background
   (Elisha's call: the gel "bubble" is an affordance, not a frame). The tile
   materialises on hover/focus and stays lit for the current page only.
   ============================================================ */
:root[data-skin="aero"] .desktop-icon {
  position: relative;
  border-radius: 14px;
  border: 1px solid transparent;     /* REST: bare — no tile, no frame */
  transition:
    transform    var(--speed) var(--ease-soft),
    box-shadow   var(--speed) var(--ease-soft),
    border-color var(--speed) var(--ease-soft),
    background   var(--speed) var(--ease-soft);
}
:root[data-skin="aero"] .desktop-icon::before {
  content: "";
  position: absolute;
  inset: 0;
  border-radius: inherit;
  background: var(--gel-spec);
  opacity: 0;                        /* tile sheen hidden until the bubble shows */
  pointer-events: none;
  z-index: 0;
  transition: opacity var(--speed) var(--ease-soft);
}
:root[data-skin="aero"] .desktop-icon__img,
:root[data-skin="aero"] .desktop-icon__label { position: relative; z-index: 1; }
:root[data-skin="aero"] .desktop-icon:hover,
:root[data-skin="aero"] .desktop-icon:focus-visible {
  transform: translateY(-2px) scale(1.03);
  border-color: rgba(255,255,255,0.65);
  background: var(--gel-floor), var(--gel-tint);   /* the bubble materialises */
  box-shadow:
    inset 0 1px 0 rgba(255,255,255,1),
    inset 0 -3px 7px -2px rgba(12,70,110,0.26),
    0 3px 5px rgba(16,70,110,0.20),
    0 10px 22px -4px rgba(16,70,110,0.34);
}
:root[data-skin="aero"] .desktop-icon:hover::before,
:root[data-skin="aero"] .desktop-icon:focus-visible::before {
  opacity: 1;
  background:
    radial-gradient(150% 96% at 50% -26%,
      rgba(255,255,255,1) 0%, rgba(255,255,255,0.88) 18%,
      rgba(255,255,255,0.38) 42%, rgba(255,255,255,0.06) 50%,
      rgba(255,255,255,0) 53%);
}
:root[data-skin="aero"] .desktop-icon:active {
  transform: translateY(0) scale(0.99);
  box-shadow:
    inset 0 2px 5px rgba(12,70,110,0.30),
    inset 0 1px 0 rgba(255,255,255,0.5),
    0 1px 2px rgba(16,70,110,0.18);
}
:root[data-skin="aero"] .desktop-icon:active::before { opacity: 0.6; }
@media (prefers-reduced-motion: reduce) {
  :root[data-skin="aero"] .desktop-icon,
  :root[data-skin="aero"] .desktop-icon:hover,
  :root[data-skin="aero"] .desktop-icon:focus-visible,
  :root[data-skin="aero"] .desktop-icon:active { transform: none; }
}
/* Label: legible chip on the bright wallpaper, glassier than the flat black pill. */
:root[data-skin="aero"] .desktop-icon__label {
  background: rgba(8, 40, 58, 0.62);
  border-radius: 5px;
  text-shadow: 0 1px 2px rgba(0, 0, 0, 0.5);
  -webkit-backdrop-filter: blur(3px);
  backdrop-filter: blur(3px);
}
/* LIGHT theme (audit §4): over the day wallpaper's snowfield the 0.62 chip
   washes toward mid-gray and the white glyphs lose their footing ("ABOUT" on
   the snow). Denser plate in light only; dark keeps 0.62 — the night sky is
   its own contrast. */
:root[data-skin="aero"]:not([data-theme="dark"]) .desktop-icon__label {
  background: rgba(8, 40, 58, 0.82);
}

/* Launcher GLYPHS — one wet-teal gel body, six silhouettes.
   The gel body (3 radials, one light @ 38%/30%, bottom rim-bounce) is shared on
   .desktop-icon__img; each [data-icon] only swaps the mask that clips it. A white
   object knocked out of teal gel — the same idiom as the Start orb + the home
   house Elisha approved. License-clean (no PNG), works in both themes. The
   injected pixel SVG/img is hidden. Masks live in --gico-* so the same silhouettes
   can be reused by other surfaces (favorites, start menu) later. */
:root[data-skin="aero"] {
  --gico-home:    url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'><path fill='%23fff' d='M12 3 L22 12 L19 12 L19 21 L14 21 L14 15 L10 15 L10 21 L5 21 L5 12 L2 12 Z'/></svg>");
  --gico-about:   url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'><path fill='%23fff' d='M8.4 7.6 a3.6 3.6 0 1 0 7.2 0 a3.6 3.6 0 1 0 -7.2 0 Z'/><path fill='%23fff' d='M4.5 20.5 C4.5 15.4 7.8 13.3 12 13.3 C16.2 13.3 19.5 15.4 19.5 20.5 Z'/></svg>");
  --gico-work:    url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'><path fill='%23fff' d='M3.5 9 a1.5 1.5 0 0 1 1.5 -1.5 h14 a1.5 1.5 0 0 1 1.5 1.5 v9.5 a1.5 1.5 0 0 1 -1.5 1.5 h-14 a1.5 1.5 0 0 1 -1.5 -1.5 Z'/><path fill='%23fff' fill-rule='evenodd' d='M8.5 8 V6.4 A2 2 0 0 1 10.5 4.4 h3 A2 2 0 0 1 15.5 6.4 V8 H14 V6.6 A.6 .6 0 0 0 13.4 6 h-2.8 A.6 .6 0 0 0 10 6.6 V8 Z'/></svg>");
  --gico-blog:    url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'><path fill='%23fff' fill-rule='evenodd' d='M5.5 3.2 a1.2 1.2 0 0 1 1.2 -1.2 h10.6 a1.2 1.2 0 0 1 1.2 1.2 v17.6 a1.2 1.2 0 0 1 -1.2 1.2 H6.7 a1.2 1.2 0 0 1 -1.2 -1.2 Z M8.2 6.5 h7.6 v1.5 h-7.6 Z M8.2 10 h7.6 v1.5 h-7.6 Z M8.2 13.5 h7.6 v1.5 h-7.6 Z M8.2 17 h4.8 v1.5 h-4.8 Z'/></svg>");
  --gico-contact: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'><path fill='%23fff' fill-rule='evenodd' d='M3.5 6.5 a1.5 1.5 0 0 1 1.5 -1.5 h14 a1.5 1.5 0 0 1 1.5 1.5 v11 a1.5 1.5 0 0 1 -1.5 1.5 h-14 a1.5 1.5 0 0 1 -1.5 -1.5 Z M5.4 8 L12 12.3 L18.6 8 L18.6 9.8 L12 14.1 L5.4 9.8 Z'/></svg>");
  --gico-art:     url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'><path fill='%23fff' fill-rule='evenodd' d='M12 3.4 C6.6 3.4 2.6 7 2.6 11.4 C2.6 14.5 4.9 16.4 7.5 16.4 C8.9 16.4 9.6 17.3 9.6 18.4 C9.6 20 11.1 21 12.8 21 C17.7 21 21.4 17 21.4 11.8 C21.4 6.9 17.3 3.4 12 3.4 Z M6.6 10.2 a1.2 1.2 0 1 0 2.4 0 a1.2 1.2 0 1 0 -2.4 0 Z M10 6.9 a1.2 1.2 0 1 0 2.4 0 a1.2 1.2 0 1 0 -2.4 0 Z M14.6 7.2 a1.2 1.2 0 1 0 2.4 0 a1.2 1.2 0 1 0 -2.4 0 Z M16.8 11 a1.2 1.2 0 1 0 2.4 0 a1.2 1.2 0 1 0 -2.4 0 Z'/></svg>");
  /* utility glyphs (start menu / readme). Disc-with-cutout reads at small sizes. */
  --gico-info:    url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'><path fill='%23fff' fill-rule='evenodd' d='M12 2.5 a9.5 9.5 0 1 0 0 19 a9.5 9.5 0 1 0 0 -19 Z M12 6 a1.5 1.5 0 1 0 0 3 a1.5 1.5 0 1 0 0 -3 Z M10.6 10.6 h2.8 v7 h-2.8 Z'/></svg>");
  --gico-power:   url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'><path fill='%23fff' fill-rule='evenodd' d='M12 2.5 a9.5 9.5 0 1 0 0 19 a9.5 9.5 0 1 0 0 -19 Z M11 5.5 h2 v7 h-2 Z M8.6 7.4 l1.5 1.45 a4.6 4.6 0 1 0 3.8 0 l1.5 -1.45 a6.6 6.6 0 1 1 -6.8 0 Z'/></svg>");
  --gico-folder:  url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'><path fill='%23fff' d='M2.5 6.6 a1.6 1.6 0 0 1 1.6 -1.6 h4.7 l2 2 h8.6 a1.6 1.6 0 0 1 1.6 1.6 v8.6 a1.6 1.6 0 0 1 -1.6 1.6 h-15.3 a1.6 1.6 0 0 1 -1.6 -1.6 Z'/></svg>");
  /* trophy-case glyphs (cup / rosette / star) — the one place the warm accent earns its keep. */
  --gico-cup:     url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'><path fill='%23fff' d='M7 3.5 h10 v2.3 a5 5 0 0 1 -3.6 4.8 V13.2 h2.4 v1.6 h-7.6 v-1.6 h2.4 V10.6 A5 5 0 0 1 7 5.8 Z'/><path fill='%23fff' fill-rule='evenodd' d='M7 4.4 a2.8 2.8 0 0 0 0 5.6 v-1.6 a1.3 1.3 0 0 1 0 -2.4 Z'/><path fill='%23fff' fill-rule='evenodd' d='M17 4.4 a2.8 2.8 0 0 1 0 5.6 v-1.6 a1.3 1.3 0 0 0 0 -2.4 Z'/></svg>");
  --gico-rosette: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'><path fill='%23fff' d='M9.2 12.6 L7.4 21 L10.4 19.1 L12 22 L13.6 19.1 L16.6 21 L14.8 12.6 Z'/><path fill='%23fff' fill-rule='evenodd' d='M12 1.8 a6 6 0 1 0 0 12 a6 6 0 1 0 0 -12 Z M12 4.9 a2.9 2.9 0 1 0 0 5.8 a2.9 2.9 0 1 0 0 -5.8 Z'/></svg>");
  --gico-star:    url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'><path fill='%23fff' d='M12 2.5 L14.6 9 L21.5 9.4 L16.2 13.8 L18 20.5 L12 16.7 L6 20.5 L7.8 13.8 L2.5 9.4 L9.4 9 Z'/></svg>");
  /* Work app glyphs (placeholders for her project brand marks). */
  --gico-q:       url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'><path fill='%23fff' fill-rule='evenodd' d='M12 2.4 a9.6 9.6 0 1 0 0 19.2 a9.6 9.6 0 1 0 0 -19.2 Z M8.7 8.4 a3.3 3.3 0 0 1 6.6 -.2 c0 1.7 -1.3 2.5 -2.1 3.1 c-.6 .5 -.9 .8 -.9 1.6 v.5 h-1.9 v-.7 c0 -1.4 .8 -2.1 1.6 -2.7 c.7 -.5 1.3 -.9 1.3 -1.6 a1.4 1.4 0 0 0 -2.8 -.1 Z M11.1 15.2 h2 v2 h-2 Z'/></svg>");
  --gico-play:    url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'><path fill='%23fff' d='M7.5 5.2 C7.5 4.4 8.4 3.9 9.1 4.3 L18.4 10.6 C19.1 11.1 19.1 12.9 18.4 13.4 L9.1 19.7 C8.4 20.1 7.5 19.6 7.5 18.8 Z'/></svg>");
  --gico-bot:     url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'><path fill='%23fff' fill-rule='evenodd' d='M11 2.6 h2 v2.2 h-2 Z M6.5 5.6 h11 a2 2 0 0 1 2 2 v8.6 a2 2 0 0 1 -2 2 h-11 a2 2 0 0 1 -2 -2 V7.6 a2 2 0 0 1 2 -2 Z M9 9.4 a1.5 1.5 0 1 0 0 3 a1.5 1.5 0 1 0 0 -3 Z M15 9.4 a1.5 1.5 0 1 0 0 3 a1.5 1.5 0 1 0 0 -3 Z M8.5 14.4 h7 v1.5 h-7 Z'/></svg>");
  --gico-cap:     url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'><path fill='%23fff' d='M12 4 L22.5 8 L12 12 L1.5 8 Z'/><path fill='%23fff' d='M5.5 10 L5.5 14.2 C5.5 15.6 8.4 16.8 12 16.8 C15.6 16.8 18.5 15.6 18.5 14.2 L18.5 10 L12 12.5 Z'/></svg>");
  --gico-camera:  url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'><path fill='%23fff' fill-rule='evenodd' d='M8.6 5 L9.8 3.3 h4.4 L15.4 5 H19 a2 2 0 0 1 2 2 v9.4 a2 2 0 0 1 -2 2 H5 a2 2 0 0 1 -2 -2 V7 a2 2 0 0 1 2 -2 Z M12 8.2 a3.6 3.6 0 1 0 0 7.2 a3.6 3.6 0 1 0 0 -7.2 Z'/></svg>");
  /* beamed double eighth-note (♫): two filled heads + stems + a slanted beam.
     Redrawn from simple shapes — the old hand-pathed version read "messed up"
     at small sizes (Elisha). */
  --gico-note:    url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'><g fill='%23fff'><path d='M8.6 5.2 L18 3.2 L18 6.2 L8.6 8.2 Z'/><rect x='8.2' y='6' width='1.6' height='11'/><rect x='16.4' y='4' width='1.6' height='11'/><ellipse cx='6.4' cy='17' rx='2.9' ry='2.2'/><ellipse cx='14.6' cy='15' rx='2.9' ry='2.2'/></g></svg>");
  /* luggage/price tag with a punched hole (blog Tags taskbar tab). */
  --gico-tag:     url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'><path fill='%23fff' fill-rule='evenodd' d='M8.5 4.5 L21 4.5 L21 19.5 L8.5 19.5 L2.5 12 Z M8 12 a1.5 1.5 0 1 0 -3 0 a1.5 1.5 0 1 0 3 0 Z'/></svg>");
  /* mini-player transport glyphs (replace the ◄◄ ► ►► text arrows, vector-matching §39). */
  --gico-prev:    url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'><path fill='%23fff' d='M11.5 5 L5.5 12 L11.5 19 Z M18.5 5 L12.5 12 L18.5 19 Z'/></svg>");
  --gico-next:    url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'><path fill='%23fff' d='M5.5 5 L11.5 12 L5.5 19 Z M12.5 5 L18.5 12 L12.5 19 Z'/></svg>");
  --gico-play:    url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'><path fill='%23fff' d='M7 4.6 L19 12 L7 19.4 Z'/></svg>");
  --gico-pause:   url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'><path fill='%23fff' d='M7.4 5 h3.3 v14 h-3.3 Z M13.3 5 h3.3 v14 h-3.3 Z'/></svg>");
}
:root[data-skin="aero"] .desktop-icon__img > svg,
:root[data-skin="aero"] .desktop-icon__img > img { display: none; }
:root[data-skin="aero"] .desktop-icon__img {
  background-repeat: no-repeat;
  background-position: center;
  background-image:
    radial-gradient(120% 80% at 38% 30%, rgba(255,255,255,0.60) 0%, rgba(255,255,255,0) 40%),
    radial-gradient(135% 120% at 50% 122%, #7FE0F0 0%, rgba(127,224,240,0) 46%),
    radial-gradient(130% 130% at 50% 30%, #3FC4DA 0%, #0FA3B1 52%, #0A5C6A 100%);
  filter:
    drop-shadow(0 1px 0 rgba(255,255,255,0.45))
    drop-shadow(0 1px 2px rgba(6,33,47,0.50));
}
/* LIGHT MODE only: the bright sky wallpaper washes the teal glyphs out (Elisha
   flagged the CONTACT envelope reading faint; dark mode is clean). Deepen + saturate
   the gel ramp so the body separates from the pale sky, and add a crisp dark contour
   halo so both the silhouette edges AND the negative-space cutouts (envelope crease,
   doc lines) get definition. Dark mode keeps the lighter ramp above. */
:root[data-skin="aero"]:not([data-theme="dark"]) .desktop-icon__img {
  background-image:
    radial-gradient(120% 80% at 38% 30%, rgba(255,255,255,0.58) 0%, rgba(255,255,255,0) 40%),
    radial-gradient(135% 120% at 50% 122%, #5ECEE5 0%, rgba(94,206,229,0) 46%),
    radial-gradient(130% 130% at 50% 30%, #2BA6BE 0%, #0B7C90 52%, #06404B 100%);
  /* The dark contour handles the pale-sky zone; the faint BRIGHT ambient
     (3px glacier bloom) handles the opposite case — the deepened gel was
     sinking into the dark forest band at the bottom of the Rainier photo
     (WORK/BLOG/CONTACT sit over trees at most viewports). Low alpha so the
     sky zone doesn't wash. */
  filter:
    drop-shadow(0 0 1.4px rgba(4, 38, 52, 0.82))
    drop-shadow(0 0 3px rgba(226, 248, 255, 0.55))
    drop-shadow(0 1px 0 rgba(255, 255, 255, 0.5))
    drop-shadow(0 2px 3px rgba(6, 33, 47, 0.55));
}
/* Glyph sizes bumped (Elisha: make the icons more prominent without growing the
   88px hover tile). The mask only fills part of the 48px --icon-size box, so a
   larger mask = bigger glyph, same container, same hover perimeter. 40px (denser
   person/doc glyphs at 38px) still leaves ~4px for the drop-shadow bloom. */
:root[data-skin="aero"] .desktop-icon__img[data-icon="home"]    { -webkit-mask: var(--gico-home)    center / 40px no-repeat; mask: var(--gico-home)    center / 40px no-repeat; }
:root[data-skin="aero"] .desktop-icon__img[data-icon="about"]   { -webkit-mask: var(--gico-about)   center / 38px no-repeat; mask: var(--gico-about)   center / 38px no-repeat; }
:root[data-skin="aero"] .desktop-icon__img[data-icon="work"]    { -webkit-mask: var(--gico-work)    center / 40px no-repeat; mask: var(--gico-work)    center / 40px no-repeat; }
:root[data-skin="aero"] .desktop-icon__img[data-icon="blog"]    { -webkit-mask: var(--gico-blog)    center / 38px no-repeat; mask: var(--gico-blog)    center / 38px no-repeat; }
:root[data-skin="aero"] .desktop-icon__img[data-icon="contact"] { -webkit-mask: var(--gico-contact) center / 40px no-repeat; mask: var(--gico-contact) center / 40px no-repeat; }
:root[data-skin="aero"] .desktop-icon__img[data-icon="art"]     { -webkit-mask: var(--gico-art)     center / 40px no-repeat; mask: var(--gico-art)     center / 40px no-repeat; }
/* Poetry .txt document icon (icons-view, 30px) → reuse the document glyph: hide the
   injected pixel SVG, paint the shared gel body clipped to the lined-page mask. The
   visual poem keeps its painted thumbnail (.filelist__icon--art, untouched). The
   16px viewer-header icons (.np__ic / .vpv__ic) stay as-is — gel muddies <=16px;
   those want a flat treatment, queued for the icon-library phase. */
:root[data-skin="aero"] .filelist__icon[data-icon="poem"] > svg { display: none; }
:root[data-skin="aero"] .filelist__icon[data-icon="poem"] {
  background-repeat: no-repeat;
  background-image:
    radial-gradient(120% 80% at 38% 30%, rgba(255,255,255,0.60) 0%, rgba(255,255,255,0) 40%),
    radial-gradient(135% 120% at 50% 122%, #7FE0F0 0%, rgba(127,224,240,0) 46%),
    radial-gradient(130% 130% at 50% 30%, #3FC4DA 0%, #0FA3B1 52%, #0A5C6A 100%);
  -webkit-mask: var(--gico-blog) center / 26px no-repeat;
          mask: var(--gico-blog) center / 26px no-repeat;
  filter: drop-shadow(0 1px 0 rgba(255,255,255,0.4)) drop-shadow(0 1px 2px rgba(6,33,47,0.5));
}
/* Light mode: same wash-out fix as the sidebar glyphs — deeper ramp + dark contour
   so the doc + its text-line cutouts read on the pale Poetry window body. */
:root[data-skin="aero"]:not([data-theme="dark"]) .filelist__icon[data-icon="poem"] {
  background-image:
    radial-gradient(120% 80% at 38% 30%, rgba(255,255,255,0.58) 0%, rgba(255,255,255,0) 40%),
    radial-gradient(135% 120% at 50% 122%, #5ECEE5 0%, rgba(94,206,229,0) 46%),
    radial-gradient(130% 130% at 50% 30%, #2BA6BE 0%, #0B7C90 52%, #06404B 100%);
  filter: drop-shadow(0 0 1.2px rgba(4,38,52,0.8)) drop-shadow(0 1px 2px rgba(6,33,47,0.55));
}
/* The dashed active outline made sense for flat pixel icons; drop it on the gel
   tile in favour of a resting LIT tile body (below) that marks the current page. */
:root[data-skin="aero"] .desktop-icon.is-active .desktop-icon__img { outline: none; }
/* Current-page tile reads SELECTED at rest: a teal-tinted frame + soft under-glow
   + a gentle top sheen — deliberately weaker than :hover (which adds the lift +
   scale + brighter bloom), so the hierarchy is rest < current(lit) < hover. Scoped
   :not(:hover):not(:focus-visible) so hovering the current icon still lifts above
   its lit state instead of fighting it. (Fixes the old comment's false claim that a
   lit state already existed — it did not; a hovered non-current icon out-sang the
   current page.) */
:root[data-skin="aero"] .desktop-icon.is-active:not(:hover):not(:focus-visible) {
  border-color: rgba(120, 200, 225, 0.62);
  background: var(--gel-floor), var(--gel-tint);   /* "you are here" keeps a calm lit tile */
  box-shadow:
    inset 0 1px 0 rgba(255, 255, 255, 0.82),
    inset 0 -3px 7px -3px rgba(63, 196, 214, 0.50),
    0 2px 5px rgba(16, 70, 110, 0.18),
    0 0 0 1px rgba(63, 196, 214, 0.22);
}
:root[data-skin="aero"] .desktop-icon.is-active:not(:hover):not(:focus-visible)::before {
  background: radial-gradient(150% 96% at 50% -26%,
    rgba(255, 255, 255, 0.80) 0%, rgba(255, 255, 255, 0.42) 24%,
    rgba(255, 255, 255, 0.10) 46%, rgba(255, 255, 255, 0) 52%);
  opacity: 1;
}
/* Active/hover label: base uses var(--color-on-accent) which is DARK in the dark
   theme (the "some labels dark, some white" bug). Pin a glossy teal chip + white
   text so every label state is consistent and legible in both themes. */
:root[data-skin="aero"] .desktop-icon:hover .desktop-icon__label,
:root[data-skin="aero"] .desktop-icon:focus-visible .desktop-icon__label,
:root[data-skin="aero"] .desktop-icon.is-active .desktop-icon__label {
  background: linear-gradient(180deg, rgba(63,196,214,0.94) 0%, rgba(14,130,149,0.96) 100%);
  color: #fff;
  text-shadow: 0 1px 1px rgba(0,40,55,0.55);
}

/* ============================================================
   8b. AERO ICON SYSTEM — reusable .aero-ico tile (R4-7 Phase 0 foundation)
   ------------------------------------------------------------
   A wet teal GEL object (Aqua-dock / Win7 glass-button idiom), NOT a tinted
   square. Per-icon, only the hue tokens + the inline <svg> glyph change. Pure
   CSS + currentColor → works in both themes, CSP-safe (no inline script). Nothing
   consumes this yet — Phase 1+ apply it per surface (see docs/aero-icon-system.md).
   Build recipe + the 10 "rules" + the inventory + the phased rollout live there. */
:root[data-skin="aero"] .aero-ico {
  --ico-size: 48px;            /* the named tell — prove this size first */
  --ico-h1: #3FC4DA;           /* bright gel top   (per-icon override) */
  --ico-h2: #0FA3B1;           /* mid body */
  --ico-h3: #0A5C6A;           /* deep lower rim */
  position: relative;
  width: var(--ico-size);
  aspect-ratio: 1;
  border-radius: 24%;          /* Aqua rounded-square; 50% for an orb */
  isolation: isolate;
  /* convex body — non-monotonic (dark lower-mid, lighter bottom rim-bounce) over
     the proven sphere math: origin 50% 28% + off-centre hotspot 38% 30%. */
  background:
    radial-gradient(120% 80% at 38% 30%,
      rgba(255,255,255,0.55) 0%, rgba(255,255,255,0) 38%),
    radial-gradient(135% 120% at 50% 122%,
      color-mix(in srgb, var(--ico-h1) 70%, #fff) 0%, transparent 46%),
    radial-gradient(130% 130% at 50% 28%,
      var(--ico-h1) 0%, var(--ico-h2) 52%, var(--ico-h3) 100%);
  box-shadow:
    inset 0 1px 0 rgba(255,255,255,0.85),
    inset 0 0 0 1px rgba(255,255,255,0.30),
    inset 0 -6px 12px -6px rgba(6,33,47,0.45),
    0 6px 14px rgba(16,70,110,0.34),
    0 1px 3px rgba(16,70,110,0.30);
}
:root[data-skin="aero"] .aero-ico::before {   /* gloss cap — top only, crisp lower edge (the wet meniscus) */
  content: "";
  position: absolute;
  inset: 6% 8% 52% 8%;
  border-radius: 22% 22% 50% 50% / 30% 30% 100% 100%;
  background: linear-gradient(180deg,
    rgba(255,255,255,0.92) 0%, rgba(255,255,255,0.55) 55%, rgba(255,255,255,0.06) 100%);
  z-index: 2;
  pointer-events: none;
}
:root[data-skin="aero"] .aero-ico::after {    /* faint teal ambient under-glow */
  content: "";
  position: absolute;
  inset: -18%;
  z-index: -1;
  background: radial-gradient(50% 50% at 50% 78%, rgba(52,187,208,0.30) 0%, transparent 70%);
  pointer-events: none;
}
:root[data-skin="aero"] .aero-ico > svg {     /* glyph — vector, engraved, optically centred */
  position: absolute;
  inset: 22%;
  z-index: 3;
  fill: #fff;
  filter: drop-shadow(0 1px 0 rgba(255,255,255,0.33)) drop-shadow(0 -1px 1px rgba(6,33,47,0.40));
}
:root[data-skin="aero"] .aero-ico[data-size="sm"] {   /* 24px nav/taskbar — no cast shadow (Vista: none <=24px) */
  --ico-size: 24px;
  box-shadow:
    inset 0 1px 0 rgba(255,255,255,0.85),
    inset 0 -5px 10px -6px rgba(6,33,47,0.45);
}

/* ============================================================
   9. CUSTOM SCROLLBARS → Aqua/Aero blue gel
   ============================================================ */
:root[data-skin="aero"] .cscroll__track {
  background: rgba(120, 180, 210, 0.18);
  border-radius: var(--aero-radius); /* = 8px; tokenized (round-2 audit #8) */
  border: 1px solid rgba(120, 175, 210, 0.30);
}
:root[data-skin="aero"] .cscroll__thumb {
  position: relative;
  border-radius: 7px;
  border: 1px solid rgba(8,90,110,0.45);
  background:
    radial-gradient(85% 150% at 28% 50%,
      rgba(255,255,255,0.92) 0%, rgba(255,255,255,0.55) 22%,
      rgba(255,255,255,0.12) 46%, rgba(255,255,255,0) 50%),
    radial-gradient(60% 130% at 100% 50%,
      rgba(255,255,255,0.22) 0%, rgba(255,255,255,0) 55%),
    linear-gradient(90deg, #7FD8EC 0%, #3FB4C9 50%, #1483A0 100%);
  box-shadow:
    inset 0 1px 0 rgba(255,255,255,0.85),
    inset 0 -1px 0 rgba(8,70,90,0.35),
    0 1px 2px rgba(16,70,110,0.30);
  cursor: grab;
}
:root[data-skin="aero"] .cscroll__thumb::after {
  content: "";
  position: absolute;
  left: 2px; right: 2px; top: 1px;
  height: 40%;
  border-radius: 6px 6px 60% 60% / 6px 6px 8px 8px;
  background: linear-gradient(180deg,
    rgba(255,255,255,0.55) 0%, rgba(255,255,255,0) 100%);
  pointer-events: none;
}
:root[data-skin="aero"] .cscroll__thumb:hover { filter: brightness(1.09) saturate(1.06); }
:root[data-skin="aero"] .cscroll__thumb:active {
  cursor: grabbing;
  filter: brightness(0.96);
  box-shadow:
    inset 0 2px 4px rgba(8,60,80,0.40),
    inset 0 -1px 0 rgba(255,255,255,0.3),
    0 1px 1px rgba(16,70,110,0.25);
}
:root[data-skin="aero"] .cscroll__btn {
  border: 1px solid rgba(120, 170, 205, 0.7);
  border-radius: 6px;
  background: var(--aero-gloss), var(--color-surface);
  box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.9);
}
/* The arrow buttons had only a rest state, so base Win95 hover/active bled
   through over the candy rest. Give them the §5 .btn hover/press deltas. */
:root[data-skin="aero"] .cscroll__btn:hover {
  background: var(--aero-gloss-hover), var(--color-surface-hover);
  box-shadow: inset 0 1px 0 rgba(255, 255, 255, 1), var(--aero-glow-cyan);
}
:root[data-skin="aero"] .cscroll__btn:active {
  background: var(--aero-gloss-press), var(--color-surface-sunken);
  box-shadow: inset 0 1px 3px rgba(16, 70, 110, 0.32);
}

/* ============================================================
   10. CONTENT SURFACES — gel wells, glossy tiles, candy chips
   ============================================================ */
:root[data-skin="aero"] .panel,
:root[data-skin="aero"] .avatar {
  border: 1px solid rgba(120, 175, 210, 0.55);
  border-radius: var(--aero-radius);
  box-shadow: inset 0 1px 5px rgba(16, 70, 110, 0.12);
}
/* Blog-post / project list rows + project tiles read as glossy app tiles. */
:root[data-skin="aero"] .project-tile,
:root[data-skin="aero"] .panel-list > * {
  border-radius: var(--aero-radius);
}
:root[data-skin="aero"] .project-tile {
  border: 1px solid rgba(120, 175, 210, 0.5);
  background: linear-gradient(180deg, rgba(255,255,255,0.6), rgba(232,245,253,0.25));
  box-shadow: inset 0 1px 0 rgba(255,255,255,0.8), 0 2px 8px rgba(16,70,110,0.16);
}
:root[data-skin="aero"] .project-tile:hover {
  box-shadow: inset 0 1px 0 rgba(255,255,255,0.95), 0 6px 16px rgba(16,70,110,0.28);
}
/* §41 REFINEMENT (design-agent pass, 2026-06-29) — the inner logo holder is the
   glossy OS app-tile: the real project logo becomes the tile FACE (rounded,
   candy-gloss sweep with the hard ~50% specular break, soft drop) instead of a
   flat favicon-in-a-square. The outer .project-tile stays the shelf + label. */
:root[data-skin="aero"] .project-tile__logo {
  position: relative;
  padding: 0;
  overflow: hidden;
  border-radius: 24%;
  box-shadow:
    inset 0 0 0 1px rgba(255, 255, 255, 0.55),
    inset 0 -2px 4px rgba(16, 70, 110, 0.16),
    0 2px 6px rgba(8, 40, 66, 0.40);
  /* (audit 2026-07-03: these had no DURATION — `transform var(--ease-soft)`
     parses the easing into the timing slot and leaves duration 0s, so the
     hover lift SNAPPED. Same fast/soft pair every other control uses.) */
  transition:
    transform var(--speed-fast) var(--ease-soft),
    box-shadow var(--speed-fast) var(--ease-soft);
}
:root[data-skin="aero"] .project-tile__logo img {
  width: 100%;
  height: 100%;
  object-fit: cover;
  border-radius: inherit;
  display: block;
}
:root[data-skin="aero"] .project-tile__logo::after {
  content: "";
  position: absolute;
  inset: 0;
  border-radius: inherit;
  pointer-events: none;
  background: linear-gradient(to bottom,
    rgba(255, 255, 255, 0.45) 0%, rgba(255, 255, 255, 0.12) 47%,
    rgba(255, 255, 255, 0) 48%);
}
:root[data-skin="aero"] .project-tile:hover .project-tile__logo {
  transform: translateY(-1px);
  box-shadow:
    inset 0 0 0 1px rgba(255, 255, 255, 0.75),
    inset 0 -2px 4px rgba(16, 70, 110, 0.18),
    0 5px 11px rgba(8, 40, 66, 0.50);
}
/* Content rows (Build Log posts) → recessed inset WELLS, not hairline-outlined
   boxes. A sunken inner shadow + a thin light bottom rim = the authentic Aqua
   inset field, so the rows read as carved into the window glass. */
:root[data-skin="aero"] .post {
  border-color: rgba(16, 70, 110, 0.14);
  box-shadow:
    inset 0 2px 4px rgba(8, 40, 66, 0.24),
    inset 0 -1px 0 rgba(255, 255, 255, 0.18);
}
:root[data-skin="aero"][data-theme="dark"] .post {
  border-color: rgba(0, 0, 0, 0.28);
  background: linear-gradient(180deg, rgba(0, 12, 24, 0.32), rgba(0, 12, 24, 0.14));
  box-shadow:
    inset 0 2px 5px rgba(0, 8, 18, 0.50),
    inset 0 -1px 0 rgba(120, 175, 210, 0.14);
}
/* §41 TYPE: window headings (h2/h3 — attention.log "CURRENTLY READING", section
   titles) carried a hard 1px-offset accent-soft shadow — a Win95/pixel idiom that
   made every Aero heading read heavy + retro (the "everything shouts at one volume"
   tell). On glass, clean tracked caps need no pixel drop; tighten the tracking a
   hair so they read as refined section LABELS. Retro keeps its chiseled headings. */
/* THE VOICE SPLIT (Elisha's §7-menu decision, 2026-07-07): Cascadia 95 keeps
   shouting (caps + tracking is the terminal voice); Aero speaks Vista —
   sentence case, natural tracking, no chiseled shadow. Sources are already
   sentence-cased ("All posts", "Currently reading", real post titles), so
   dropping the transform IS the whole split. Scope = CONTENT voice only:
   window headings, post titles, the Favorites detail title. OS chrome
   (icon labels, folder chips, systray, buttons) stays uppercase per skin. */
:root[data-skin="aero"] .window__body h2,
:root[data-skin="aero"] .window__body h3,
:root[data-skin="aero"] .post__title,
:root[data-skin="aero"] .fav__detail-title {
  text-transform: none;
  letter-spacing: normal;
  text-shadow: none;
}
/* Category / tag chips → glossy candy pills. */
:root[data-skin="aero"] .tag,
:root[data-skin="aero"] [class*="kind--"] {
  border-radius: var(--aero-pill);
  box-shadow: inset 0 1px 0 rgba(255,255,255,0.55), 0 1px 2px rgba(16,70,110,0.2);
}
/* Cover art (attention.log, favorites, art) → rounded with soft depth.
   NB: the live Home cover tile is .attn__cov (no "e") — this rule long said
   .attn__cover, so it never matched and the resting Home tiles kept the flat
   Win95 bevel + hard offset shadow (only their §26 selected/hover/focus states,
   which DO use .attn__cov, were skinned). Fixed the class below. */
:root[data-skin="aero"] .attn__cov,
:root[data-skin="aero"] [class*="cover"] img,
:root[data-skin="aero"] .fav__cover {
  border-radius: 6px;
  box-shadow: 0 3px 10px rgba(16, 70, 110, 0.28);
}
/* attention.log resting tiles: round + soft-drop above; here the Aero blue frame
   (over the base 2px bevel-darker chisel) + a dark-theme drop, matching their
   About twin .fav__cover. The §26 patches own selected/hover/focus. */
:root[data-skin="aero"] .attn__cov { border: 1px solid rgba(120, 175, 210, 0.55); }
:root[data-skin="aero"][data-theme="dark"] .attn__cov {
  border-color: rgba(120, 195, 225, 0.30);
  box-shadow: 0 4px 14px rgba(0, 14, 26, 0.50);
}
/* ---- Vista breadcrumb address bar (Favorites › <category>) ---------------
   The base markup is path SEGMENTS (retro reconstructs C:\Favorites\<cat>); here
   we re-present the SAME spans as a Vista/7 breadcrumb — humanist sans (overrides
   §27's --font-mono pin, which would otherwise render the path as terminal text),
   a muted teal "›" chevron, the current (leaf) crumb inked stronger, the ancestor
   muted, and the retro drive prefix dropped. Owner-chosen address-bar metaphor.
   (The old rule here targeted .crumb/[class*=breadcrumb] — classes that don't
   exist in our markup, so it was dead and no breadcrumb ever rendered.) */
:root[data-skin="aero"] .fav__path {
  font-family: var(--font-body);
  font-size: var(--text-sm);
  letter-spacing: 0.1px;
  color: var(--color-text-muted);
}
:root[data-skin="aero"] .fav__crumb--root::before { content: none; } /* drop C:\ */
:root[data-skin="aero"] .fav__crumb[data-fav-leaf] {
  color: var(--color-text);
  font-weight: 600;
}
:root[data-skin="aero"] .fav__crumb + .fav__crumb::before {
  content: "\203A"; /* › */
  margin: 0 6px;
  color: rgba(12, 124, 140, 0.70);
  font-weight: 700;
}
:root[data-skin="aero"][data-theme="dark"] .fav__path { color: rgba(196, 226, 240, 0.62); }
:root[data-skin="aero"][data-theme="dark"] .fav__crumb[data-fav-leaf] { color: rgba(233, 245, 252, 0.96); }
:root[data-skin="aero"][data-theme="dark"] .fav__crumb + .fav__crumb::before { color: rgba(95, 205, 230, 0.78); }

/* ============================================================
   11. PAGE TITLE — glossy chrome lettering instead of pixel outline
   ============================================================ */
/* §41 WORDMARK round 3 — LUMINOUS GLASS, Elisha's pick (2026-07-01) over the
   glass nameplate, which she read as a gaudy slab. NO container at all now:
   the glyphs themselves are the material — a bright gloss ramp clipped to the
   letterforms, a tight dark contour so they hold on any wallpaper (the reason
   the plate existed), and a soft aurora bloom. Same language as the boot
   wordmark. One treatment for both themes; the contour + bloom carry
   legibility on the bright Rainier sky and the dark aurora alike. */
:root[data-skin="aero"] .page-title {
  color: transparent;
  -webkit-text-fill-color: transparent;
  background: linear-gradient(180deg, #F4FCFF 0%, #CFECFB 36%, #86C8EA 62%, #4E9ED2 100%);
  -webkit-background-clip: text;
  background-clip: text;
  text-shadow: none;
  letter-spacing: -0.01em;
  filter:
    drop-shadow(0 1px 1.5px rgba(5, 24, 44, 0.62))
    drop-shadow(0 3px 8px rgba(6, 28, 50, 0.35))
    drop-shadow(0 0 18px rgba(130, 210, 245, 0.38));
}

/* ============================================================
   12. WALLPAPER — public-domain Cascadia photos + drifting gel bubbles
   DAY = Mt Rainier over Bench Lake; NIGHT = Alaskan aurora. Both PD (see below).
   The CSS bubble drift (::after) rides on top of whichever photo is showing.
   ============================================================ */
/* Real Aero wallpapers — both PUBLIC DOMAIN, cleared for the public repo:
   DAY   = Mount Rainier reflected in Bench Lake — NPS / Steve Redman (US Gov work, PD).
   NIGHT = Aurora over Eielson AFB, Alaska — USAF / Joshua Strang (US Gov work, PD).
   Sourced from Wikimedia Commons, downscaled to 1920w. The base wallpaper.css
   cross-fades day↔night by opacity on theme; we only swap the image URLs and
   drop pixel-art rendering (these are photos). The bubble drift (::after) rides
   on top. Attributed in the right-click → Credits dialog (startmenu.js). */
:root[data-skin="aero"] .wallpaper__layer { image-rendering: auto; }
:root[data-skin="aero"] .wallpaper__layer--day   { background-image: url("/aero/wall-day.webp"); }
:root[data-skin="aero"] .wallpaper__layer--night { background-image: url("/aero/wall-night.webp"); }
:root[data-skin="aero"] .wallpaper { background-color: #BCEEFF; }
/* TRUE refraction-bubbles (reworked from the flat-white-dot single sheet).
   Each bubble is ONE radial-gradient built like a real Vista glass bead, NOT a
   solid dot: a faint Aurora-Teal-tinted *refraction body* (very low alpha so it
   never darkens the wallpaper), a near-clear ring so the center reads as
   "looking through glass," then a BRIGHT Glacier specular RIM just inside the
   edge, fading out through a soft Glacier halo. Two layers ride independently —
   ::after = larger/slower beads sway up-and-right, ::before = smaller/faster
   beads sway up-and-left, fainter — so they never move as one mechanical sheet.
   Gradient + compositor transform/opacity ONLY; no blur (the skin watches blur
   cost). In-palette: Glacier #F4FBFE rims, faint Aurora-Teal #0FA3B1 body, all
   very low alpha, behind everything (pointer-events:none). */
:root[data-skin="aero"] .wallpaper::before,
:root[data-skin="aero"] .wallpaper::after {
  content: "";
  position: absolute;
  left: 0; right: 0; bottom: 0;
  pointer-events: none;
  background-repeat: no-repeat;
  will-change: transform;
}
/* FOREGROUND beads — bigger, slower, drift up-and-right. */
:root[data-skin="aero"] .wallpaper::after {
  height: 170%;
  opacity: 0.62;
  background-image:
    radial-gradient(circle at 14% 86%,
      rgba(15,163,177,0.05) 0 7px, rgba(244,251,254,0.00) 7px 8.5px,
      rgba(244,251,254,0.70) 8.5px 10px, rgba(244,251,254,0.16) 11px 13px,
      rgba(244,251,254,0) 15px),
    radial-gradient(circle at 28% 70%,
      rgba(15,163,177,0.05) 0 10px, rgba(244,251,254,0.00) 10px 12px,
      rgba(244,251,254,0.78) 12px 13.5px, rgba(244,251,254,0.14) 15px 18px,
      rgba(244,251,254,0) 21px),
    radial-gradient(circle at 63% 64%,
      rgba(15,163,177,0.05) 0 13px, rgba(244,251,254,0.00) 13px 15.5px,
      rgba(244,251,254,0.72) 15.5px 17px, rgba(244,251,254,0.12) 19px 23px,
      rgba(244,251,254,0) 27px),
    radial-gradient(circle at 78% 82%,
      rgba(15,163,177,0.04) 0 7px, rgba(244,251,254,0.00) 7px 9px,
      rgba(244,251,254,0.70) 9px 10.5px, rgba(244,251,254,0.14) 12px 14px,
      rgba(244,251,254,0) 16px),
    radial-gradient(circle at 38% 50%,
      rgba(15,163,177,0.04) 0 5px, rgba(244,251,254,0.00) 5px 7px,
      rgba(244,251,254,0.62) 7px 8px, rgba(244,251,254,0) 11px);
  animation: aero-bubbles-rise-a 34s linear infinite;
}
/* BACKGROUND beads — smaller, faster, drift up-and-left, fainter (depth). */
:root[data-skin="aero"] .wallpaper::before {
  height: 150%;
  opacity: 0.40;
  background-image:
    radial-gradient(circle at 47% 88%,
      rgba(15,163,177,0.04) 0 3px, rgba(244,251,254,0.00) 3px 4px,
      rgba(244,251,254,0.68) 4px 5px, rgba(244,251,254,0) 7px),
    radial-gradient(circle at 90% 60%,
      rgba(15,163,177,0.04) 0 4px, rgba(244,251,254,0.00) 4px 5px,
      rgba(244,251,254,0.66) 5px 6px, rgba(244,251,254,0) 8px),
    radial-gradient(circle at 8% 58%,
      rgba(15,163,177,0.04) 0 5px, rgba(244,251,254,0.00) 5px 6.5px,
      rgba(244,251,254,0.62) 6.5px 7.5px, rgba(244,251,254,0.10) 9px 11px,
      rgba(244,251,254,0) 13px),
    radial-gradient(circle at 55% 40%,
      rgba(15,163,177,0.04) 0 3px, rgba(244,251,254,0.00) 3px 4px,
      rgba(244,251,254,0.60) 4px 5px, rgba(244,251,254,0) 7px),
    radial-gradient(circle at 72% 24%,
      rgba(15,163,177,0.03) 0 4px, rgba(244,251,254,0.00) 4px 5px,
      rgba(244,251,254,0.55) 5px 6px, rgba(244,251,254,0) 8px);
  animation: aero-bubbles-rise-b 22s linear infinite;
}
:root[data-skin="aero"][data-theme="dark"] .wallpaper { background-color: #04141F; }
:root[data-skin="aero"][data-theme="dark"] .wallpaper::after  { opacity: 0.38; }
:root[data-skin="aero"][data-theme="dark"] .wallpaper::before { opacity: 0.24; }

/* ============================================================
   13. MOTION
   ============================================================ */
/* Two independent drifts: vertical rise + a gentle OPPOSITE horizontal sway
   (translateX differs in sign, durations differ), so the two bead layers never
   march in lockstep. TRANSFORM ONLY — the per-theme static opacity on ::after/
   ::before governs (an animated `opacity` here would OVERRIDE the [data-theme=dark]
   dimming and wash the dark wallpaper; verified live). Compositor-only. */
@keyframes aero-bubbles-rise-a {
  from { transform: translate3d(0, 0, 0); }
  to   { transform: translate3d(2.5%, -42%, 0); }
}
@keyframes aero-bubbles-rise-b {
  from { transform: translate3d(0, 0, 0); }
  to   { transform: translate3d(-3%, -52%, 0); }
}
@media (prefers-reduced-motion: reduce) {
  :root[data-skin="aero"] .wallpaper::before,
  :root[data-skin="aero"] .wallpaper::after {
    animation: none;
    transform: none;
    will-change: auto;
  }
}

/* ============================================================
   14. TINT ICONS → glossy Vista-core gel
   Flat colored swatches (the category folder icons + the kind chips) were the
   "bare rectangle, no Vista core" offender. Re-cast each as a CONVEX candy gel
   in its identity tint: bright specular top half, hard ~50% break, darker convex
   lower half, bright rim, soft drop. The tint color is preserved as the base;
   the gloss layers over it.
   ============================================================ */
/* Category icons → real glossy-teal Aero OBJECTS (GPT-generated, traced of bg +
   normalized) replacing the colored glass chips Elisha flagged as an AI cliché.
   The .fav__folder-ic becomes a transparent icon slot; each [data-cat] paints its
   object. Soft drop-shadow for separation; the object carries its own gloss so no
   gel mask. */
:root[data-skin="aero"] .fav__folder-ic {
  width: 22px;
  height: 22px;
  border: 0;
  border-radius: 0;
  background: none;
  box-shadow: none;
  background-repeat: no-repeat;
  background-position: center;
  background-size: contain;
  filter: drop-shadow(0 1px 1.5px rgba(6, 33, 47, 0.45));
}
:root[data-skin="aero"] .fav__folder[data-cat="book"]  .fav__folder-ic { background-image: url("/aero/icons/cat-book.png"); }
:root[data-skin="aero"] .fav__folder[data-cat="film"]  .fav__folder-ic { background-image: url("/aero/icons/cat-film.png"); }
:root[data-skin="aero"] .fav__folder[data-cat="show"]  .fav__folder-ic { background-image: url("/aero/icons/cat-show.png"); }
:root[data-skin="aero"] .fav__folder[data-cat="game"]  .fav__folder-ic { background-image: url("/aero/icons/cat-game.png"); }
:root[data-skin="aero"] .fav__folder[data-cat="album"] .fav__folder-ic { background-image: url("/aero/icons/cat-album.png"); }
:root[data-skin="aero"] .fav__folder[data-cat="paper"] .fav__folder-ic { background-image: url("/aero/icons/cat-paper.png"); }
/* Start-menu Settings → the glossy-teal gear object (hide the injected pixel SVG). */
:root[data-skin="aero"] .start-menu__icon[data-icon="settings"] > svg { display: none; }
:root[data-skin="aero"] .start-menu__icon[data-icon="settings"] {
  background-image: url("/aero/icons/settings.png");
  background-repeat: no-repeat;
  background-position: center;
  background-size: contain;
  image-rendering: auto;
  filter: drop-shadow(0 1px 1.5px rgba(6, 33, 47, 0.45));
}
/* About (info) + Shut Down (power) → hand-drawn teal-gel glyphs (Elisha greenlit my
   own placeholders over waiting on GPT). Hide the injected pixel SVG; paint the
   shared gel body clipped to a disc-with-cutout mask. Flat-disc shapes read at 22px
   where a full sphere would muddy. No longer the pixel/old aesthetic. */
:root[data-skin="aero"] .start-menu__icon[data-icon="info"] > svg,
:root[data-skin="aero"] .start-menu__icon[data-icon="power"] > svg { display: none; }
:root[data-skin="aero"] .start-menu__icon[data-icon="info"],
:root[data-skin="aero"] .start-menu__icon[data-icon="power"] {
  background-repeat: no-repeat;
  background-position: center;
  background-image:
    radial-gradient(120% 80% at 38% 30%, rgba(255,255,255,0.55) 0%, rgba(255,255,255,0) 42%),
    radial-gradient(130% 130% at 50% 30%, #3FC4DA 0%, #0FA3B1 52%, #0A5C6A 100%);
  image-rendering: auto;
  filter: drop-shadow(0 1px 1.5px rgba(6, 33, 47, 0.5));
}
:root[data-skin="aero"] .start-menu__icon[data-icon="info"]  { -webkit-mask: var(--gico-info)  center / 22px no-repeat; mask: var(--gico-info)  center / 22px no-repeat; }
:root[data-skin="aero"] .start-menu__icon[data-icon="power"] { -webkit-mask: var(--gico-power) center / 22px no-repeat; mask: var(--gico-power) center / 22px no-repeat; }
/* System Properties / Credits dialog icon → the SAME aqua-gel "i" the Start menu
   uses. The base .os-dialog__icon (48px, image-rendering:pixelated) renders the
   pixel SVG; Aero hides it and paints the gel disc so the dialog 'i' isn't the
   lone pixel holdout (Elisha flagged it on the Credits dialog). */
:root[data-skin="aero"] .os-dialog__icon[data-icon="info"] > svg { display: none; }
:root[data-skin="aero"] .os-dialog__icon[data-icon="info"] {
  image-rendering: auto;
  background-repeat: no-repeat;
  background-position: center;
  background-image:
    radial-gradient(120% 80% at 38% 30%, rgba(255,255,255,0.55) 0%, rgba(255,255,255,0) 42%),
    radial-gradient(130% 130% at 50% 30%, #3FC4DA 0%, #0FA3B1 52%, #0A5C6A 100%);
  -webkit-mask: var(--gico-info) center / 40px no-repeat;
          mask: var(--gico-info) center / 40px no-repeat;
  filter: drop-shadow(0 1px 2px rgba(6, 33, 47, 0.5));
}
/* README.txt heading glyph: base is an orange ▤ box-char (reads pixel/old). Aero
   swaps it for the teal-gel document glyph, inline before the filename. */
:root[data-skin="aero"] .readme__name::before {
  content: "";
  display: inline-block;
  width: 0.92em;
  height: 0.92em;
  margin-right: 0.34em;
  vertical-align: -0.12em;
  -webkit-text-fill-color: initial;
  background:
    radial-gradient(120% 80% at 38% 30%, rgba(255,255,255,0.58) 0%, rgba(255,255,255,0) 42%),
    radial-gradient(130% 130% at 50% 30%, #2BA6BE 0%, #0B7C90 52%, #06404B 100%);
  -webkit-mask: var(--gico-blog) center / contain no-repeat;
          mask: var(--gico-blog) center / contain no-repeat;
  filter: drop-shadow(0 0 1px rgba(4, 38, 52, 0.65)) drop-shadow(0 1px 1px rgba(6,33,47,0.4));
}
/* Work app TITLES wore --color-accent (tangerine) — Elisha flagged the orange app
   names. Headings aren't links, so use the normal ink (same call as fav__detail-title). */
:root[data-skin="aero"] .work-item h3 { color: var(--color-text); }
/* Folder icon (path bar + folder heads) → teal-gel folder, not the pixel SVG.
   Small (16-18px) but the folder silhouette is simple enough to read. */
:root[data-skin="aero"] .explorer__bar-icon[data-icon="folder"] > svg,
:root[data-skin="aero"] .folder__icon[data-icon="folder"] > svg { display: none; }
:root[data-skin="aero"] .explorer__bar-icon[data-icon="folder"],
:root[data-skin="aero"] .folder__icon[data-icon="folder"] {
  background-repeat: no-repeat;
  background-position: center;
  background-image:
    radial-gradient(120% 80% at 38% 30%, rgba(255,255,255,0.55) 0%, rgba(255,255,255,0) 42%),
    radial-gradient(130% 130% at 50% 30%, #3FC4DA 0%, #0FA3B1 52%, #0A5C6A 100%);
  -webkit-mask: var(--gico-folder) center / contain no-repeat;
          mask: var(--gico-folder) center / contain no-repeat;
  image-rendering: auto;
  filter: drop-shadow(0 0 1px rgba(4,38,52,0.6)) drop-shadow(0 1px 1px rgba(6,33,47,0.42));
}
/* Trophy Case icons (cup / rosette / star) → wet gel in each award's REAL
   material (Elisha's metal-tint call, 2026-07-03). The icon names already say
   what each award is made of: the WINNER cup is gold, the FINALIST cup is
   silver, the monthly star is aqua crystal (acrylic star awards — the palette's
   third hue), and the nominee rosettes stay EVERGREEN gel (prize rosettes are
   ribbon, not metal — and they keep the accent alive in the cabinet). All four
   share the same three-layer wet-gel structure (identical specular, material
   up-glow, material body) so they read as one family. Champagne gold / platinum
   silver are material reads, not palette hues — the no-orange rule is about
   chrome + accents, not what a trophy is made of.
   Hide the injected pixel SVG; the gel body is sized on .tc-ic (34px, 40 featured). */
:root[data-skin="aero"] .tc-ic > svg { display: none; }
:root[data-skin="aero"] .tc-ic {
  width: 34px;
  height: 34px;
  background-repeat: no-repeat;
  background-position: center;
  background-image:
    radial-gradient(120% 80% at 38% 30%, rgba(255,255,255,0.62) 0%, rgba(255,255,255,0) 42%),
    radial-gradient(135% 120% at 50% 122%, #8FE3AC 0%, rgba(143,227,172,0) 46%),
    radial-gradient(130% 130% at 50% 30%, #7FD89A 0%, #2E9E4F 52%, #1B6535 100%);
  filter: drop-shadow(0 1px 0 rgba(255,255,255,0.4)) drop-shadow(0 1px 2px rgba(6,33,47,0.42));
}
:root[data-skin="aero"] .tc-row--featured .tc-ic { width: 40px; height: 40px; }
:root[data-skin="aero"] .tc-ic[data-ic="goldcup"],
:root[data-skin="aero"] .tc-ic[data-ic="silvercup"] { -webkit-mask: var(--gico-cup)     center / 30px no-repeat; mask: var(--gico-cup)     center / 30px no-repeat; }
:root[data-skin="aero"] .tc-ic[data-ic="rosette"]   { -webkit-mask: var(--gico-rosette) center / 30px no-repeat; mask: var(--gico-rosette) center / 30px no-repeat; }
:root[data-skin="aero"] .tc-ic[data-ic="star"]      { -webkit-mask: var(--gico-star)    center / 30px no-repeat; mask: var(--gico-star)    center / 30px no-repeat; }
:root[data-skin="aero"] .tc-row--featured .tc-ic[data-ic="goldcup"],
:root[data-skin="aero"] .tc-row--featured .tc-ic[data-ic="silvercup"] { -webkit-mask-size: 36px; mask-size: 36px; }
:root[data-skin="aero"] .tc-row--featured .tc-ic[data-ic="rosette"] { -webkit-mask-size: 36px; mask-size: 36px; }
:root[data-skin="aero"] .tc-row--featured .tc-ic[data-ic="star"] { -webkit-mask-size: 36px; mask-size: 36px; }
/* material bodies — rosette keeps the evergreen base recipe above */
:root[data-skin="aero"] .tc-ic[data-ic="goldcup"] {
  background-image:
    radial-gradient(120% 80% at 38% 30%, rgba(255,255,255,0.62) 0%, rgba(255,255,255,0) 42%),
    radial-gradient(135% 120% at 50% 122%, #F2DE9E 0%, rgba(242,222,158,0) 46%),
    radial-gradient(130% 130% at 50% 30%, #EFD489 0%, #C9A23C 52%, #7E5E12 100%);
}
:root[data-skin="aero"] .tc-ic[data-ic="silvercup"] {
  background-image:
    radial-gradient(120% 80% at 38% 30%, rgba(255,255,255,0.62) 0%, rgba(255,255,255,0) 42%),
    radial-gradient(135% 120% at 50% 122%, #EAF2F6 0%, rgba(234,242,246,0) 46%),
    radial-gradient(130% 130% at 50% 30%, #EDF2F5 0%, #A9BCC7 52%, #5B6C77 100%);
}
:root[data-skin="aero"] .tc-ic[data-ic="star"] {
  background-image:
    radial-gradient(120% 80% at 38% 30%, rgba(255,255,255,0.62) 0%, rgba(255,255,255,0) 42%),
    radial-gradient(135% 120% at 50% 122%, #9FE8F5 0%, rgba(159,232,245,0) 46%),
    radial-gradient(130% 130% at 50% 30%, #7FDCEC 0%, #0FA3B1 52%, #0A5C6A 100%);
}
/* Tone the featured (lead) award down. The humanist sans renders the base --text-lg
   (24px) title much taller than the retro pixel face, so the hero card ballooned to
   several wrapped lines in the narrow column (Elisha: "a bit too big tall"). 1.2rem
   keeps it the clear lead without dominating the case. */
:root[data-skin="aero"] .tc-row--featured .tc-title { font-size: 1.2rem; }
/* Work app-card icons (22px) → teal-gel placeholders for the project brand marks,
   replacing the pixel SVGs. (The 16px .pixel-link__icon stays for now — gel muddies
   <=16px; flagged.) */
:root[data-skin="aero"] .work-item__icon[data-icon] > svg { display: none; }
:root[data-skin="aero"] .work-item__icon[data-icon="idk"],
:root[data-skin="aero"] .work-item__icon[data-icon="play"],
:root[data-skin="aero"] .work-item__icon[data-icon="bot"],
:root[data-skin="aero"] .work-item__icon[data-icon="cce"] {
  background-repeat: no-repeat;
  background-position: center;
  background-image:
    radial-gradient(120% 80% at 38% 30%, rgba(255,255,255,0.55) 0%, rgba(255,255,255,0) 42%),
    radial-gradient(130% 130% at 50% 30%, #3FC4DA 0%, #0FA3B1 52%, #0A5C6A 100%);
  image-rendering: auto;
  filter: drop-shadow(0 0 1px rgba(4,38,52,0.6)) drop-shadow(0 1px 1px rgba(6,33,47,0.42));
}
:root[data-skin="aero"] .work-item__icon[data-icon="idk"]  { -webkit-mask: var(--gico-q)    center / 22px no-repeat; mask: var(--gico-q)    center / 22px no-repeat; }
:root[data-skin="aero"] .work-item__icon[data-icon="play"] { -webkit-mask: var(--gico-play) center / 20px no-repeat; mask: var(--gico-play) center / 20px no-repeat; }
:root[data-skin="aero"] .work-item__icon[data-icon="bot"]  { -webkit-mask: var(--gico-bot)  center / 22px no-repeat; mask: var(--gico-bot)  center / 22px no-repeat; }
:root[data-skin="aero"] .work-item__icon[data-icon="cce"]  { -webkit-mask: var(--gico-cap)  center / 22px no-repeat; mask: var(--gico-cap)  center / 22px no-repeat; }
/* R4-6 — the Favorites detail-pane TITLE is a heading, not a link, so it must not
   wear --color-accent (tangerine). Use the normal title ink + title-case (kill the
   Win95 UPPERCASE). Tangerine stays the single warm pop on actual <a> links. */
:root[data-skin="aero"] .fav__detail-title {
  color: var(--color-text);
  text-transform: none;
  letter-spacing: normal;
}
/* Folder rows: rounded, with a glossy teal selected row (matches start-menu rows)
   instead of the flat coral fill. */
:root[data-skin="aero"] .fav__folder { border-radius: 6px; }
:root[data-skin="aero"] .fav__folder:hover {
  background:
    linear-gradient(180deg, rgba(255,255,255,0.30) 0%, rgba(255,255,255,0) 50%),
    var(--color-surface-hover);
}
/* Selected category → the lickable AQUA selection capsule (Mac OS X Finder
   source-list idiom, recolored to the locked Aurora-Teal ramp). The load-bearing
   Aqua tell is the HARD ~48→50% gloss step + a crisp 1px inner top highlight; a
   4px radius with a small horizontal inset keeps the capsule off the rail edges
   like Finder. Same teal gloss as the cover .is-sel + the start-menu rows, so all
   selections read as one accent (the Win×Mac "one material" fusion principle). */
:root[data-skin="aero"] .fav__folder.is-active {
  color: #fff;
  margin: 0 3px;
  border-radius: 4px;
  border-color: rgba(8, 96, 118, 0.5);
  background:
    linear-gradient(180deg, rgba(255,255,255,0.55) 0, rgba(255,255,255,0) 1px),
    linear-gradient(180deg, #34BBD0 0%, #1597AD 48%, #0E8197 50%, #0A5C6A 100%);
  box-shadow:
    inset 0 1px 0 rgba(255,255,255,0.55),
    inset 0 -1px 0 rgba(0,42,56,0.18),
    0 1px 2px rgba(8,60,84,0.30);
  text-shadow: 0 1px 1px rgba(0,42,56,0.4);
}

/* Kind chips (BOOK / FILM / SHOW / GAME / ALBUM / PAPER badges): glossy gel over
   their tint (don't touch background-color — that carries the tint from .kind--*). */
:root[data-skin="aero"] .kind {
  border: 1px solid rgba(0, 0, 0, 0.24);
  border-radius: var(--aero-pill);
  background-image:
    linear-gradient(180deg,
      rgba(255,255,255,0.58) 0%, rgba(255,255,255,0.20) 44%,
      rgba(255,255,255,0.03) 50%, rgba(255,255,255,0.00) 51%,
      rgba(255,255,255,0.12) 100%);
  box-shadow:
    inset 0 1px 0 rgba(255,255,255,0.65),
    inset 0 -3px 5px -2px rgba(0,0,0,0.30),
    0 1px 2px rgba(8,60,84,0.24);
  text-shadow: 0 1px 1px rgba(0,0,0,0.28);
}

/* The §14 white gloss film lightens the chip's upper glyph band, so white ink on the
   Aero lake-blue book tint (#2C6FA8) dips to ~2.7-3.2:1 there. Dark ink #050D18 reads
   ~10.6:1 in that gloss-heavy upper band where the 9px uppercase glyphs actually sit;
   it dips to ~3.7:1 only in the thin zero-film valley (~50-51% of the gradient), which
   the white 0.30 text-shadow halo carries, recovering to ~4.6:1 at the bottom — net a
   clear, legible win over white, matching base game/album dark-ink for light tints.
   Aero-only: retro book is terracotta where white passes, so it keeps white.
   Round-1 audit #3; banding corrected round-2 #2. */
:root[data-skin="aero"] .kind--book {
  color: #050D18;
  text-shadow: 0 1px 0 rgba(255, 255, 255, 0.30);
}

/* ============================================================
   15. FOCUS RINGS + persistent-chrome clashes
   (a11y: ONE focus idiom across every candy control — the widest hole — plus the
   three most-visible flat-beside-glass clashes: clock, counter, Settings submenu)
   ============================================================ */
/* One cyan focus ring everywhere. outline doesn't disturb the gloss box-shadow;
   2px solid + offset reads on both bright glass and the dark taskbar. */
:root[data-skin="aero"] .btn:focus-visible,
:root[data-skin="aero"] .btn--primary:focus-visible,
:root[data-skin="aero"] .window__btn:focus-visible,
:root[data-skin="aero"] .taskbar__item:focus-visible,
:root[data-skin="aero"] .taskbar__start:focus-visible,
:root[data-skin="aero"] .cscroll__thumb:focus-visible,
:root[data-skin="aero"] .cscroll__btn:focus-visible,
:root[data-skin="aero"] .fav__folder:focus-visible,
:root[data-skin="aero"] .fav__cover:focus-visible {
  outline: 2px solid var(--aero-focus);
  outline-offset: 2px;
}

/* Clock + visitor counter: a dark-GLASS bezel instead of a bare black brick. Keeps
   the LCD readout character (intentional retro device) but seats it in the dark
   glass taskbar. NB: readout colour left as-is — softening to cyan is a taste call
   flagged for Elisha, not decided here. */
:root[data-skin="aero"] .taskbar__clock,
:root[data-skin="aero"] .hit-counter {
  background: rgba(6, 26, 40, 0.55);
  border: 1px solid rgba(150, 210, 240, 0.35);
  border-radius: 6px;
  box-shadow:
    inset 0 1px 0 rgba(180, 225, 250, 0.30),
    inset 0 -2px 5px rgba(0, 0, 0, 0.40),
    0 1px 2px rgba(0, 0, 0, 0.30);
  -webkit-backdrop-filter: blur(4px);
          backdrop-filter: blur(4px);
}

/* Settings cascading submenu → mirror the frosted Start-menu panel (was a flat
   Win95 flyout beside the glass menu; .context-menu already inherits .start-menu). */
:root[data-skin="aero"] .start-menu__submenu {
  border: 1px solid rgba(255, 255, 255, 0.6);
  border-radius: var(--aero-radius);
  background-color: rgba(228, 244, 254, 0.62);
  background-image:
    radial-gradient(125% 70% at 50% -22%,
      rgba(255,255,255,0.95) 0%, rgba(255,255,255,0.50) 18%,
      rgba(255,255,255,0.10) 38%, rgba(255,255,255,0) 52%),
    linear-gradient(180deg, rgba(244,251,254,0.50) 0%, rgba(206,232,250,0.20) 100%);
  background-repeat: no-repeat;
  -webkit-backdrop-filter: blur(var(--aero-shell-blur, 14px)) saturate(1.5);
          backdrop-filter: blur(var(--aero-shell-blur, 14px)) saturate(1.5);
  box-shadow:
    inset 0 1px 0 rgba(255,255,255,0.9),
    inset 0 0 0 1px rgba(255,255,255,0.25),
    var(--aero-elev-3);
}
/* Embossed glass separator instead of a flat bevel line. */
:root[data-skin="aero"] .start-menu__sep {
  background: none;
  border: 0;
  border-top: 1px solid rgba(8, 60, 84, 0.16);
  box-shadow: 0 1px 0 rgba(255, 255, 255, 0.55);
}

/* Reduced-motion: quiet the candy gloss/filter transitions too. */
@media (prefers-reduced-motion: reduce) {
  :root[data-skin="aero"] .btn,
  :root[data-skin="aero"] .btn--primary,
  :root[data-skin="aero"] .window__btn,
  :root[data-skin="aero"] .taskbar__item,
  :root[data-skin="aero"] .taskbar__start,
  :root[data-skin="aero"] .cscroll__thumb,
  :root[data-skin="aero"] .start-menu__item,
  :root[data-skin="aero"] .fav__folder { transition: none; }
}

/* ============================================================
   16. ART PAGE INTERIORS — CD player, file list, cork board, notepad +
       visual-poem viewers. Token-first (loop principle 1); one specular
       sweep on standalone modal frames (P2/P3); dark siblings inherited
       through the tokens wherever the active fill is teal candy (P4); cyan
       --aero-focus on every clickable row/tab/track (P6); cork + pins kept
       authentic — frame-only glass — and surfaced to Elisha (P7).
   ============================================================ */

/* ---- shared 3-state candy chrome button (CD transport, nav chevrons,
   close X) — one recipe, mirrors §5 .btn so it can never drift -------------- */
:root[data-skin="aero"] .cdp__btn,
:root[data-skin="aero"] .vpv__nav,
:root[data-skin="aero"] .np__x,
:root[data-skin="aero"] .vpv__x {
  border: 1px solid rgba(120, 170, 205, 0.75);
  border-radius: 7px;
  background: var(--aero-gloss), var(--color-surface);
  box-shadow:
    inset 0 1px 0 rgba(255, 255, 255, 0.95),
    inset 0 -6px 8px -6px rgba(255, 255, 255, 0.55),
    inset 0 0 0 1px rgba(255, 255, 255, 0.30),
    var(--aero-elev-1);
  transition: background var(--speed-fast) var(--ease-soft),
              box-shadow var(--speed-fast) var(--ease-soft);
}
:root[data-skin="aero"] .cdp__btn:hover,
:root[data-skin="aero"] .vpv__nav:hover:not(:disabled) {
  background: var(--aero-gloss-hover), var(--color-surface-hover);
  box-shadow:
    inset 0 1px 0 rgba(255, 255, 255, 1),
    inset 0 -7px 9px -6px rgba(255, 255, 255, 0.70),
    inset 0 0 0 1px rgba(255, 255, 255, 0.40),
    var(--aero-elev-2),
    var(--aero-glow-cyan);
}
:root[data-skin="aero"] .cdp__btn:active,
:root[data-skin="aero"] .vpv__nav:active:not(:disabled),
:root[data-skin="aero"] .np__x:active,
:root[data-skin="aero"] .vpv__x:active {
  background: var(--aero-gloss-press), var(--color-surface-sunken);
  box-shadow:
    inset 0 1px 3px rgba(16, 70, 110, 0.34),
    inset 0 -1px 0 rgba(255, 255, 255, 0.45),
    var(--aero-elev-1);
}
/* dark theme: only the bevel-line rgba differs; the gloss/elev/glow tokens
   re-resolve themselves, so this is the whole dark delta */
:root[data-skin="aero"][data-theme="dark"] .cdp__btn,
:root[data-skin="aero"][data-theme="dark"] .vpv__nav,
:root[data-skin="aero"][data-theme="dark"] .np__x,
:root[data-skin="aero"][data-theme="dark"] .vpv__x {
  border-color: rgba(120, 195, 225, 0.50);
  box-shadow:
    inset 0 1px 0 rgba(180, 230, 250, 0.30),
    inset 0 -6px 8px -6px rgba(180, 230, 250, 0.40),
    inset 0 0 0 1px rgba(180, 230, 250, 0.15),
    var(--aero-elev-1);
}
:root[data-skin="aero"][data-theme="dark"] .cdp__btn:hover,
:root[data-skin="aero"][data-theme="dark"] .vpv__nav:hover:not(:disabled) {
  box-shadow:
    inset 0 1px 0 rgba(190, 235, 255, 0.45),
    inset 0 -7px 9px -6px rgba(190, 235, 255, 0.50),
    inset 0 0 0 1px rgba(190, 235, 255, 0.25),
    var(--aero-elev-2),
    var(--aero-glow-cyan);
}
:root[data-skin="aero"][data-theme="dark"] .cdp__btn:active,
:root[data-skin="aero"][data-theme="dark"] .vpv__nav:active:not(:disabled),
:root[data-skin="aero"][data-theme="dark"] .np__x:active,
:root[data-skin="aero"][data-theme="dark"] .vpv__x:active {
  box-shadow:
    inset 0 1px 3px rgba(0, 12, 22, 0.45),
    inset 0 -1px 0 rgba(180, 230, 250, 0.20),
    var(--aero-elev-1);
}

/* Play button = the PRIMARY action: teal candy via the brand tokens, plus a
   resting cyan glow + size lead (flex:1.4 from base) so the eye lands here
   first instead of reading as one more chrome key. Dark comes free (tokens). */
:root[data-skin="aero"] .cdp__btn--play {
  color: #fff;
  border-color: rgba(8, 90, 110, 0.60);
  background: var(--aero-teal-gloss), var(--aero-sky-base);
  box-shadow:
    inset 0 1px 0 rgba(255, 255, 255, 0.80),
    inset 0 -7px 9px -7px rgba(255, 255, 255, 0.40),
    var(--aero-elev-1),
    var(--aero-glow-cyan);
  text-shadow: 0 1px 1px rgba(0, 40, 55, 0.45);
}
:root[data-skin="aero"] .cdp__btn--play:hover {
  background: var(--aero-teal-gloss-hover), var(--aero-sky-base-hover);
  box-shadow:
    inset 0 1px 0 rgba(255, 255, 255, 0.92),
    inset 0 -8px 10px -7px rgba(255, 255, 255, 0.55),
    var(--aero-elev-2),
    var(--gel-glow);
}
:root[data-skin="aero"] .cdp__btn--play:active {
  background: var(--aero-teal-gloss), var(--aero-sky-base-press);
  box-shadow:
    inset 0 1px 4px rgba(0, 40, 55, 0.45),
    inset 0 -1px 0 rgba(255, 255, 255, 0.30),
    var(--aero-elev-1);
}

/* CD transport / nav / X focus → the one cyan ring (overrides base coral).
   .np__x added (audit: it was the one candy close/nav sibling missing the cyan
   ring, so keyboard focus fell through to the tangerine global ring). */
:root[data-skin="aero"] .cdp__btn:focus-visible,
:root[data-skin="aero"] .vpv__nav:focus-visible,
:root[data-skin="aero"] .np__x:focus-visible,
:root[data-skin="aero"] .vpv__x:focus-visible {
  outline: 2px solid var(--aero-focus);
  outline-offset: -2px;
}
/* Home project-tile launcher had Aero hover + active but no focus-visible, so a
   focused tile showed the tangerine global ring while sibling launchers (.tc-row)
   use the cyan one. Match the §15 focus idiom (outset offset, it's not in a
   scroll-clipping container). */
:root[data-skin="aero"] .project-tile:focus-visible {
  outline: 2px solid var(--aero-focus);
  outline-offset: 2px;
}

/* ---- Seek slider thumb → gel convex tile, built from the shared --gel-*
   recipe (same as §9 .cscroll__thumb), NOT a fourth hand-tuned copy -------- */
:root[data-skin="aero"] .cdp__seek::-webkit-slider-thumb {
  border: 1px solid rgba(8, 90, 110, 0.45);
  border-radius: 3px;
  background:
    var(--gel-spec),
    linear-gradient(90deg, #7FD8EC 0%, #3FB4C9 50%, #1483A0 100%);
  box-shadow: var(--gel-shadow);
}
:root[data-skin="aero"] .cdp__seek::-webkit-slider-thumb:hover {
  filter: brightness(1.09) saturate(1.06);
  box-shadow: var(--gel-shadow), var(--aero-glow-cyan);
}
:root[data-skin="aero"] .cdp__seek::-webkit-slider-thumb:active {
  filter: brightness(0.96);
}
:root[data-skin="aero"] .cdp__seek::-moz-range-thumb {
  border: 1px solid rgba(8, 90, 110, 0.45);
  border-radius: 3px;
  background:
    var(--gel-spec),
    linear-gradient(90deg, #7FD8EC 0%, #3FB4C9 50%, #1483A0 100%);
  box-shadow: var(--gel-shadow);
}
/* sunken seek RUNNABLE track → glass-blue well (was a flat Win95 sunken bar) */
:root[data-skin="aero"] .cdp__seek::-webkit-slider-runnable-track {
  border: 1px solid rgba(120, 175, 210, 0.45);
  border-radius: 4px;
  background: rgba(120, 180, 210, 0.18);
  box-shadow: inset 0 1px 3px rgba(16, 70, 110, 0.22);
}
:root[data-skin="aero"] .cdp__seek::-moz-range-track {
  border: 1px solid rgba(120, 175, 210, 0.45);
  border-radius: 4px;
  background: rgba(120, 180, 210, 0.18);
}
:root[data-skin="aero"] .cdp__seek:focus-visible {
  outline: 2px solid var(--aero-focus);
  outline-offset: 2px;
}

/* ---- Tracklist well + rows ------------------------------------------------ */
/* The sunken tracklist reads as a glass-blue well (mirrors the seek track) */
:root[data-skin="aero"] .cdp__tracks {
  border: 1px solid rgba(120, 175, 210, 0.45);
  border-radius: var(--aero-radius);
  background: rgba(120, 180, 210, 0.14);
  box-shadow: inset 0 1px 4px rgba(16, 70, 110, 0.14);
}
:root[data-skin="aero"][data-theme="dark"] .cdp__tracks {
  border-color: rgba(120, 195, 225, 0.28);
  background: rgba(8, 30, 46, 0.40);
  box-shadow: inset 0 1px 4px rgba(0, 12, 22, 0.45);
}
:root[data-skin="aero"] .cdp__track {
  border-radius: 6px;
  transition: background var(--speed-fast) var(--ease-soft),
              box-shadow var(--speed-fast) var(--ease-soft);
}
:root[data-skin="aero"] .cdp__track:hover:not(.is-playing) {
  background: var(--color-surface-hover);
  box-shadow: var(--aero-glow-cyan);
}
:root[data-skin="aero"] .cdp__track:focus-visible {
  outline: 2px solid var(--aero-focus);
  outline-offset: -2px;
}
/* "Now playing" = teal candy (brand tokens → dark free) PLUS more life than a
   static selection: a brighter inner cyan glow + a slow drifting top sheen so
   the playing row out-sings the selected file row / active tab (notBeautiful #2) */
:root[data-skin="aero"] .cdp__track.is-playing {
  position: relative;
  color: #fff;
  background: var(--aero-teal-gloss), var(--aero-sky-base);
  box-shadow:
    inset 0 1px 0 rgba(255, 255, 255, 0.55),
    inset 0 0 10px rgba(120, 235, 255, 0.30),
    var(--aero-elev-1);
  text-shadow: 0 1px 1px rgba(0, 40, 55, 0.40);
}
:root[data-skin="aero"] .cdp__track.is-playing .cdp__track-n,
:root[data-skin="aero"] .cdp__track.is-playing .cdp__track-title,
:root[data-skin="aero"] .cdp__track.is-playing .cdp__track-dur { color: #fff; }
:root[data-skin="aero"] .cdp__track.is-playing::after {
  content: "";
  position: absolute;
  inset: 0;
  pointer-events: none;
  border-radius: inherit;
  background: linear-gradient(100deg,
    rgba(255,255,255,0) 32%, rgba(255,255,255,0.22) 50%, rgba(255,255,255,0) 68%);
  background-size: 220% 100%;
  mix-blend-mode: screen;
  animation: aero-nowplaying 3.6s linear infinite;
}
@keyframes aero-nowplaying {
  0%   { background-position: 130% 0; }
  100% { background-position: -30% 0; }
}

/* ---- File list rows (Poetry) — candy rows, cyan hover bloom, teal selected,
   cyan focus ring. Selected fill uses the brand tokens (dark free). --------- */
:root[data-skin="aero"] .filelist__row {
  border-radius: var(--aero-radius);
  transition: background var(--speed-fast) var(--ease-soft),
              box-shadow var(--speed-fast) var(--ease-soft);
}
:root[data-skin="aero"] .filelist__row:hover:not(.is-sel) {
  background: var(--color-surface-hover);
  box-shadow: var(--aero-glow-cyan);
}
/* Both selectors: the plain one (list view) AND the icons-view one. The base
   `.filelist[data-view="icons"] .filelist__row.is-sel` (orange --color-accent)
   TIES the plain aero rule on specificity and loads later, so in icons view the
   retro tangerine leaked through (the Poetry list reads orange, not teal). The
   data-view selector here outranks it so the selected file is teal in both views. */
:root[data-skin="aero"] .filelist__row.is-sel,
:root[data-skin="aero"] .filelist[data-view="icons"] .filelist__row.is-sel {
  color: #fff;
  background: var(--aero-teal-gloss), var(--aero-sky-base);
  box-shadow:
    inset 0 1px 0 rgba(255, 255, 255, 0.55),
    var(--aero-elev-1);
  text-shadow: 0 1px 1px rgba(0, 40, 55, 0.40);
}
:root[data-skin="aero"] .filelist__row:focus-visible {
  outline: 2px solid var(--aero-focus);
  outline-offset: -2px;
}
/* glass-blue rows well (mirrors the tracklist) */
:root[data-skin="aero"] .filelist__rows {
  background: rgba(120, 180, 210, 0.14);
  border-color: rgba(120, 175, 210, 0.45);
  box-shadow: inset 0 1px 4px rgba(16, 70, 110, 0.14);
}
:root[data-skin="aero"][data-theme="dark"] .filelist__rows {
  background: rgba(8, 30, 46, 0.40);
  border-color: rgba(120, 195, 225, 0.28);
  box-shadow: inset 0 1px 4px rgba(0, 12, 22, 0.45);
}

/* ---- Cork board: TASTE CALL — frame-only glass ---------------------------
   The window FRAME around the board is already frosted glass (§3 .window).
   The cork .board__surface, the pushpins, and the paper pin-cards are LEFT
   AUTHENTIC: no backdrop-filter on the cork, no gloss overlay on the cards —
   glossing them would erase the cork texture + fight the pushpin/paper
   metaphor (loop principle 7). Surfaced to Elisha below. No .board__surface
   rule is emitted (an empty selector is dead CSS). ------------------------- */

/* Board tabs → candy pills (rest/hover via §5 recipe; active = teal brand
   tokens, dark free) + cyan focus ring. */
:root[data-skin="aero"] .board__tab {
  border: 1px solid rgba(120, 170, 205, 0.75);
  border-bottom: none;
  border-radius: var(--aero-radius) var(--aero-radius) 0 0;
  background: var(--aero-gloss), var(--color-surface);
  box-shadow:
    inset 0 1px 0 rgba(255, 255, 255, 0.95),
    inset 0 -6px 8px -6px rgba(255, 255, 255, 0.55),
    var(--aero-elev-1);
  transition: background var(--speed-fast) var(--ease-soft),
              box-shadow var(--speed-fast) var(--ease-soft);
}
:root[data-skin="aero"] .board__tab:hover:not(.is-active) {
  background: var(--aero-gloss-hover), var(--color-surface-hover);
  box-shadow:
    inset 0 1px 0 rgba(255, 255, 255, 1),
    inset 0 -7px 9px -6px rgba(255, 255, 255, 0.70),
    var(--aero-elev-2),
    var(--aero-glow-cyan);
}
:root[data-skin="aero"] .board__tab.is-active {
  color: #fff;
  border-color: rgba(8, 96, 118, 0.55);
  background: var(--aero-teal-gloss), var(--aero-sky-base);
  box-shadow:
    inset 0 1px 0 rgba(255, 255, 255, 0.70),
    var(--aero-elev-1);
  text-shadow: 0 1px 1px rgba(0, 42, 56, 0.42);
}
:root[data-skin="aero"] .board__tab:focus-visible {
  outline: 2px solid var(--aero-focus);
  outline-offset: -2px;
}
:root[data-skin="aero"][data-theme="dark"] .board__tab {
  border-color: rgba(120, 195, 225, 0.50);
  box-shadow:
    inset 0 1px 0 rgba(180, 230, 250, 0.30),
    inset 0 -6px 8px -6px rgba(180, 230, 250, 0.40),
    var(--aero-elev-1);
}
:root[data-skin="aero"][data-theme="dark"] .board__tab:hover:not(.is-active) {
  box-shadow:
    inset 0 1px 0 rgba(190, 235, 255, 0.45),
    inset 0 -7px 9px -6px rgba(190, 235, 255, 0.50),
    var(--aero-elev-2),
    var(--aero-glow-cyan);
}

/* ---- Album tabs (CD player) → same candy + teal-active idiom + cyan focus - */
:root[data-skin="aero"] .cdp__albumtab {
  border: 1px solid rgba(120, 170, 205, 0.75);
  border-radius: var(--aero-radius);
  background: var(--aero-gloss), var(--color-surface);
  box-shadow:
    inset 0 1px 0 rgba(255, 255, 255, 0.95),
    inset 0 -6px 8px -6px rgba(255, 255, 255, 0.55),
    var(--aero-elev-1);
  transition: background var(--speed-fast) var(--ease-soft),
              box-shadow var(--speed-fast) var(--ease-soft);
}
:root[data-skin="aero"] .cdp__albumtab:hover:not(.is-active) {
  background: var(--aero-gloss-hover), var(--color-surface-hover);
  box-shadow:
    inset 0 1px 0 rgba(255, 255, 255, 1),
    inset 0 -7px 9px -6px rgba(255, 255, 255, 0.70),
    var(--aero-elev-2),
    var(--aero-glow-cyan);
}
:root[data-skin="aero"] .cdp__albumtab.is-active {
  color: #fff;
  border-color: rgba(8, 96, 118, 0.55);
  background: var(--aero-teal-gloss), var(--aero-sky-base);
  box-shadow:
    inset 0 1px 0 rgba(255, 255, 255, 0.70),
    var(--aero-elev-1);
  text-shadow: 0 1px 1px rgba(0, 42, 56, 0.42);
}
:root[data-skin="aero"] .cdp__albumtab:focus-visible {
  outline: 2px solid var(--aero-focus);
  outline-offset: -2px;
}
:root[data-skin="aero"][data-theme="dark"] .cdp__albumtab {
  border-color: rgba(120, 195, 225, 0.50);
  box-shadow:
    inset 0 1px 0 rgba(180, 230, 250, 0.30),
    inset 0 -6px 8px -6px rgba(180, 230, 250, 0.40),
    var(--aero-elev-1);
}
:root[data-skin="aero"][data-theme="dark"] .cdp__albumtab:hover:not(.is-active) {
  box-shadow:
    inset 0 1px 0 rgba(190, 235, 255, 0.45),
    inset 0 -7px 9px -6px rgba(190, 235, 255, 0.50),
    var(--aero-elev-2),
    var(--aero-glow-cyan);
}

/* ---- Notepad + Visual-poem viewers — STANDALONE .os-modal frames, so each
   IS the frame and legitimately owns the single backdrop-filter (P3). Must
   explicitly null the base Win95 border + 2px chiseled bevel insets or the
   square chisel reads through the glass at the corners (P2). One specular
   sweep ::before via --aero-sweep (P2). ------------------------------------ */
:root[data-skin="aero"] .np__win,
:root[data-skin="aero"] .vpv__win {
  position: relative;
  border: 1px solid rgba(86, 150, 190, 0.55);
  border-radius: var(--aero-radius-lg);
  background:
    linear-gradient(180deg,
      rgba(244, 251, 254, 0.62) 0%,
      rgba(223, 241, 250, 0.50) 46%,
      rgba(213, 232, 245, 0.55) 100%);
  -webkit-backdrop-filter: blur(var(--aero-shell-blur, 14px)) saturate(1.6) brightness(1.06);
          backdrop-filter: blur(var(--aero-shell-blur, 14px)) saturate(1.6) brightness(1.06);
  box-shadow:
    inset 0 1px 0 rgba(255, 255, 255, 0.92),
    inset 0 0 0 1px rgba(255, 255, 255, 0.22),
    var(--aero-elev-3);
}
:root[data-skin="aero"] .np__win::before,
:root[data-skin="aero"] .vpv__win::before {
  content: "";
  position: absolute;
  inset: 0 0 auto 0;
  height: 38%;
  pointer-events: none;
  z-index: 0;
  border-radius: calc(var(--aero-radius-lg) - 1px) calc(var(--aero-radius-lg) - 1px) 0 0;
  background: var(--aero-sweep);
  mix-blend-mode: screen;
}
/* keep every real layer above the sweep */
:root[data-skin="aero"] .np__bar,
:root[data-skin="aero"] .np__menubar,
:root[data-skin="aero"] .np__paper,
:root[data-skin="aero"] .np__status,
:root[data-skin="aero"] .np__x,
:root[data-skin="aero"] .vpv__bar,
:root[data-skin="aero"] .vpv__stage,
:root[data-skin="aero"] .vpv__hint,
:root[data-skin="aero"] .vpv__x { position: relative; z-index: 1; }

/* Glass teal titlebar — reuses the §4 idiom; its own sweep is the SHARED
   --aero-sweep token (not a re-typed radial). */
:root[data-skin="aero"] .np__bar,
:root[data-skin="aero"] .vpv__bar {
  background:
    linear-gradient(180deg,
      rgba(255, 255, 255, 0.50) 0%, rgba(255, 255, 255, 0.12) 46%,
      rgba(255, 255, 255, 0.00) 50%, rgba(255, 255, 255, 0.08) 100%),
    linear-gradient(90deg, rgba(18, 94, 158, 0.92), rgba(90, 180, 236, 0.88));
  border-bottom: 1px solid rgba(10, 58, 96, 0.45);
  box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.55);
  text-shadow: 0 1px 1px rgba(0, 40, 55, 0.45);
}
:root[data-skin="aero"] .np__bar::before,
:root[data-skin="aero"] .vpv__bar::before {
  content: "";
  position: absolute;
  inset: 0;
  pointer-events: none;
  border-radius: inherit;
  background: var(--aero-sweep);
  z-index: -1;
}
:root[data-skin="aero"] .np__menubar {
  background: rgba(244, 251, 254, 0.30);
  border-bottom: 1px solid rgba(120, 175, 210, 0.35);
}

/* Reading wells (.np__paper / .vpv__stage): dropped to ~0.82 so the frosted
   frame reads THROUGH the well (was 0.95 → glass wasted, notBeautiful #1), and
   given a single soft top→down light falloff so the well feels lit under the
   same glass as the frame instead of a white box pasted in. NO second blur. */
:root[data-skin="aero"] .np__paper,
:root[data-skin="aero"] .vpv__stage {
  background:
    linear-gradient(180deg,
      rgba(255, 255, 255, 0.30) 0%, rgba(255, 255, 255, 0.00) 22%),
    linear-gradient(180deg, rgba(251, 253, 255, 0.84) 0%, rgba(236, 246, 254, 0.80) 100%);
  border-radius: var(--aero-radius);
  box-shadow:
    inset 0 1px 0 rgba(255, 255, 255, 0.70),
    inset 0 2px 6px rgba(16, 70, 110, 0.10);
}

/* Visual-poem nav chevrons get the candy recipe above; keep the disabled dim */
:root[data-skin="aero"] .vpv__nav:disabled { opacity: 0.3; }

/* Notepad / viewer DARK siblings — frame tint + sweep + wells */
:root[data-skin="aero"][data-theme="dark"] .np__win,
:root[data-skin="aero"][data-theme="dark"] .vpv__win {
  border-color: rgba(120, 195, 225, 0.30);
  background:
    linear-gradient(180deg,
      rgba(16, 50, 71, 0.62) 0%, rgba(14, 43, 61, 0.55) 46%, rgba(10, 35, 52, 0.58) 100%);
  -webkit-backdrop-filter: blur(var(--aero-shell-blur, 14px)) saturate(1.5) brightness(0.92);
          backdrop-filter: blur(var(--aero-shell-blur, 14px)) saturate(1.5) brightness(0.92);
  box-shadow:
    inset 0 1px 0 rgba(180, 230, 250, 0.28),
    inset 0 0 0 1px rgba(160, 220, 245, 0.10),
    var(--aero-elev-3);
}
:root[data-skin="aero"][data-theme="dark"] .np__bar,
:root[data-skin="aero"][data-theme="dark"] .vpv__bar {
  background:
    linear-gradient(180deg,
      rgba(190,235,255,0.30) 0%, rgba(190,235,255,0.08) 46%,
      rgba(255,255,255,0) 50%, rgba(10,40,60,0.20) 100%),
    linear-gradient(90deg, rgba(14,74,124,0.92), rgba(46,124,180,0.88));
}
:root[data-skin="aero"][data-theme="dark"] .np__menubar {
  background: rgba(16, 50, 71, 0.30);
  border-bottom-color: rgba(120, 195, 225, 0.22);
}
:root[data-skin="aero"][data-theme="dark"] .np__paper,
:root[data-skin="aero"][data-theme="dark"] .vpv__stage {
  background:
    linear-gradient(180deg,
      rgba(190, 235, 255, 0.10) 0%, rgba(190, 235, 255, 0.00) 22%),
    linear-gradient(180deg, rgba(16,50,71,0.82) 0%, rgba(12,40,58,0.80) 100%);
  box-shadow:
    inset 0 1px 0 rgba(160, 220, 245, 0.16),
    inset 0 2px 6px rgba(0, 12, 22, 0.45);
}

/* Visual-poem text + nav focus → cyan ring (overrides base coral) */
:root[data-skin="aero"] .vpv__text:focus-visible {
  outline: 2px solid var(--aero-focus);
  outline-offset: 2px;
}

/* NB: .cdp__lcd and .vpv__screen are intentionally UNTOUCHED — the dark green
   readouts are correct retro device character (loop principle 6/7). */

/* ---- Reduced motion: quiet the interior transitions + the now-playing sheen */
@media (prefers-reduced-motion: reduce) {
  :root[data-skin="aero"] .cdp__btn,
  :root[data-skin="aero"] .cdp__albumtab,
  :root[data-skin="aero"] .cdp__track,
  :root[data-skin="aero"] .board__tab,
  :root[data-skin="aero"] .filelist__row,
  :root[data-skin="aero"] .vpv__nav { transition: none; }
  :root[data-skin="aero"] .cdp__track.is-playing::after { animation: none; }
}
/* ============================================================
   17. FAVORITES + WORK EXPLORER INTERIORS
       Token-first (loop principle 1). These containers live INSIDE
       .window, which already owns the single backdrop-filter for this
       stacking context, so NOTHING here gets its own blur (P3) — glass =
       translucent gradient only, exactly like the §16 .np__paper wells.
       Wells + candy buttons JOIN the existing §16/§5 selector lists so
       they can't drift (P1). Every light-rgba rule has a dark sibling
       (P4); elevation via --aero-elev-* (P5); cyan --aero-focus + hover
       bloom on every interactive row/tile/link, teal candy on selected/
       open states (P6). Cover art + resume prose kept legible (P7).
   ============================================================ */

/* ---- Shared glass-blue WELL — the Work folder boxes reuse the §16
   .cdp__tracks / .filelist__rows recipe verbatim (one well, never drifts).
   (The ADDRESS BARS used to ride this too — they moved to the real Vista
   breadcrumb FIELD in §54; folders are content containers, not location
   fields, so they deliberately stay on the well.) ---------------------------- */
:root[data-skin="aero"] .folder {
  border: 1px solid rgba(120, 175, 210, 0.45);
  border-radius: var(--aero-radius);
  background: rgba(120, 180, 210, 0.14);
  box-shadow:
    inset 0 1px 0 rgba(255, 255, 255, 0.55),
    inset 0 1px 4px rgba(16, 70, 110, 0.14);
}
:root[data-skin="aero"][data-theme="dark"] .folder {
  border-color: rgba(120, 195, 225, 0.28);
  background: rgba(8, 30, 46, 0.40);
  box-shadow:
    inset 0 1px 0 rgba(160, 220, 245, 0.14),
    inset 0 1px 4px rgba(0, 12, 22, 0.45);
}

/* ---- Favorites sidebar well — frosted panel, TRANSLUCENT ONLY (no blur:
   it's inside .window). Light falloff like the §16 reading wells. ----------- */
:root[data-skin="aero"] .fav__side {
  border: 1px solid rgba(120, 175, 210, 0.55);
  border-radius: var(--aero-radius);
  background:
    linear-gradient(180deg,
      rgba(255, 255, 255, 0.30) 0%, rgba(255, 255, 255, 0.00) 22%),
    linear-gradient(180deg,
      rgba(244, 251, 254, 0.48) 0%, rgba(223, 241, 250, 0.34) 100%);
  box-shadow:
    inset 0 1px 0 rgba(255, 255, 255, 0.80),
    inset 0 0 0 1px rgba(255, 255, 255, 0.16),
    var(--aero-elev-1);
}
:root[data-skin="aero"][data-theme="dark"] .fav__side {
  border-color: rgba(120, 195, 225, 0.28);
  background:
    linear-gradient(180deg,
      rgba(120, 200, 235, 0.10) 0%, rgba(120, 200, 235, 0.00) 22%),
    linear-gradient(180deg,
      rgba(16, 50, 71, 0.48) 0%, rgba(10, 35, 52, 0.40) 100%);
  box-shadow:
    inset 0 1px 0 rgba(160, 220, 245, 0.18),
    inset 0 0 0 1px rgba(160, 220, 245, 0.08),
    var(--aero-elev-2);
}

/* Mobile category combo — candy control, reuses the §5 .btn token stack. */
:root[data-skin="aero"] .fav__select {
  border: 1px solid rgba(120, 170, 205, 0.75);
  border-radius: var(--aero-radius);
  background: var(--aero-gloss), var(--color-surface);
  box-shadow:
    inset 0 1px 0 rgba(255, 255, 255, 0.95),
    inset 0 -6px 8px -6px rgba(255, 255, 255, 0.55),
    inset 0 0 0 1px rgba(255, 255, 255, 0.30),
    var(--aero-elev-1);
}
:root[data-skin="aero"][data-theme="dark"] .fav__select {
  border-color: rgba(120, 195, 225, 0.50);
  box-shadow:
    inset 0 1px 0 rgba(180, 230, 250, 0.30),
    inset 0 -6px 8px -6px rgba(180, 230, 250, 0.40),
    inset 0 0 0 1px rgba(180, 230, 250, 0.15),
    var(--aero-elev-1);
}
:root[data-skin="aero"] .fav__select:focus-visible {
  outline: 2px solid var(--aero-focus);
  outline-offset: 2px;
}

/* ---- Cover tiles — §10 already owns the radius + soft drop. Add ONLY the
   hover-bloom delta; selected = teal candy frame (mirrors .filelist__row.is-sel)
   so SELECTED out-sings HOVER (fixes the inverted hierarchy). ---------------- */
:root[data-skin="aero"] .fav__cover {
  transition: box-shadow var(--speed-fast) var(--ease-soft),
              transform var(--speed-fast) var(--ease-soft);
}
:root[data-skin="aero"] .fav__cover:hover {
  box-shadow: var(--aero-elev-2), var(--aero-glow-cyan);
  transform: translateY(-2px);
}
/* R4-9 — selection ring is INSET (drawn inside the tile), not an outset 0 0 0 2px:
   the .fav__grids scroll container (overflow-y:auto → clips both axes) was cropping
   the outset ring on edge covers, so it read "not even around." An inset ring sits
   on the cover art's inner edge — even all the way round, never clipped — and the
   recolored 1px border + restored top-sheen keep the cover reading as glossy. */
:root[data-skin="aero"] .fav__cover.is-sel {
  border-color: rgba(8, 124, 140, 0.90);
  outline: none;
  box-shadow:
    inset 0 1px 0 rgba(255, 255, 255, 0.55),
    inset 0 0 0 2px rgba(8, 124, 140, 0.92),
    var(--aero-elev-2);
}
:root[data-skin="aero"][data-theme="dark"] .fav__cover.is-sel {
  border-color: rgba(63, 196, 214, 0.80);
  box-shadow:
    inset 0 1px 0 rgba(180, 230, 250, 0.28),
    inset 0 0 0 2px rgba(63, 196, 214, 0.85),
    var(--aero-elev-2);
}

/* ---- Detail pane — frosted panel, TRANSLUCENT ONLY (inside .window). ------ */
:root[data-skin="aero"] .fav__detail {
  border: 1px solid rgba(120, 175, 210, 0.55);
  border-radius: var(--aero-radius);
  background:
    linear-gradient(180deg,
      rgba(255, 255, 255, 0.30) 0%, rgba(255, 255, 255, 0.00) 22%),
    linear-gradient(180deg,
      rgba(251, 253, 255, 0.50) 0%, rgba(236, 246, 254, 0.42) 100%);
  box-shadow:
    inset 0 1px 0 rgba(255, 255, 255, 0.80),
    inset 0 0 0 1px rgba(255, 255, 255, 0.16),
    var(--aero-elev-2);
}
:root[data-skin="aero"][data-theme="dark"] .fav__detail {
  border-color: rgba(120, 195, 225, 0.30);
  background:
    linear-gradient(180deg,
      rgba(120, 200, 235, 0.10) 0%, rgba(120, 200, 235, 0.00) 22%),
    linear-gradient(180deg,
      rgba(16, 50, 71, 0.50) 0%, rgba(10, 35, 52, 0.44) 100%);
  box-shadow:
    inset 0 1px 0 rgba(160, 220, 245, 0.20),
    inset 0 0 0 1px rgba(160, 220, 245, 0.08),
    var(--aero-elev-3);
}

/* Detail back button — candy control, §5 .btn token stack, 3-state + dark. */
:root[data-skin="aero"] .fav__detail-back {
  border: 1px solid rgba(120, 170, 205, 0.75);
  border-radius: var(--aero-radius);
  background: var(--aero-gloss), var(--color-surface);
  box-shadow:
    inset 0 1px 0 rgba(255, 255, 255, 0.95),
    inset 0 -6px 8px -6px rgba(255, 255, 255, 0.55),
    inset 0 0 0 1px rgba(255, 255, 255, 0.30),
    var(--aero-elev-1);
  transition: background var(--speed-fast) var(--ease-soft),
              box-shadow var(--speed-fast) var(--ease-soft);
}
:root[data-skin="aero"] .fav__detail-back:hover {
  background: var(--aero-gloss-hover), var(--color-surface-hover);
  box-shadow:
    inset 0 1px 0 rgba(255, 255, 255, 1),
    inset 0 -7px 9px -6px rgba(255, 255, 255, 0.70),
    inset 0 0 0 1px rgba(255, 255, 255, 0.40),
    var(--aero-elev-2),
    var(--aero-glow-cyan);
}
:root[data-skin="aero"] .fav__detail-back:active {
  background: var(--aero-gloss-press), var(--color-surface-sunken);
  box-shadow:
    inset 0 1px 3px rgba(16, 70, 110, 0.34),
    inset 0 -1px 0 rgba(255, 255, 255, 0.45),
    var(--aero-elev-1);
}
:root[data-skin="aero"] .fav__detail-back:focus-visible {
  outline: 2px solid var(--aero-focus);
  outline-offset: 2px;
}
:root[data-skin="aero"][data-theme="dark"] .fav__detail-back {
  border-color: rgba(120, 195, 225, 0.50);
  box-shadow:
    inset 0 1px 0 rgba(180, 230, 250, 0.30),
    inset 0 -6px 8px -6px rgba(180, 230, 250, 0.40),
    inset 0 0 0 1px rgba(180, 230, 250, 0.15),
    var(--aero-elev-1);
}
:root[data-skin="aero"][data-theme="dark"] .fav__detail-back:hover {
  box-shadow:
    inset 0 1px 0 rgba(190, 235, 255, 0.45),
    inset 0 -7px 9px -6px rgba(190, 235, 255, 0.50),
    inset 0 0 0 1px rgba(190, 235, 255, 0.25),
    var(--aero-elev-2),
    var(--aero-glow-cyan);
}
:root[data-skin="aero"][data-theme="dark"] .fav__detail-back:active {
  box-shadow:
    inset 0 1px 3px rgba(0, 12, 22, 0.45),
    inset 0 -1px 0 rgba(180, 230, 250, 0.20),
    var(--aero-elev-1);
}

/* ---- WORK EXPLORER -------------------------------------------------------- */
/* .explorer__bar + .folder share the glass-blue WELL above. Here: only the
   folder header candy + open state + work-item tiles + pixel-link pills. ---- */

/* Folder header (<summary>) — candy hover bloom + cyan focus (mirrors
   .cdp__track:hover). The well's own border handles the box. */
:root[data-skin="aero"] .folder__head {
  border-radius: 6px;
  transition: background var(--speed-fast) var(--ease-soft),
              box-shadow var(--speed-fast) var(--ease-soft);
}
:root[data-skin="aero"] .folder__head:hover {
  background: var(--color-surface-hover);
  box-shadow: var(--aero-glow-cyan);
}
:root[data-skin="aero"] .folder__head:focus-visible {
  outline: 2px solid var(--aero-focus);
  outline-offset: -2px;
}
/* Open state = teal candy (brand tokens → dark free), matching the Start-menu
   active row + .filelist__row.is-sel. Wins over the base border-bottom rule. */
:root[data-skin="aero"] .folder[open] > .folder__head {
  color: #fff;
  border-bottom: 1px solid rgba(8, 70, 90, 0.45);
  background: var(--aero-teal-gloss), var(--aero-sky-base);
  box-shadow:
    inset 0 1px 0 rgba(255, 255, 255, 0.55),
    var(--aero-elev-1);
  text-shadow: 0 1px 1px rgba(0, 40, 55, 0.40);
}
:root[data-skin="aero"] .folder[open] > .folder__head .folder__count,
:root[data-skin="aero"] .folder[open] > .folder__head::before {
  color: rgba(255, 255, 255, 0.85);
}

/* Work-item cards = glossy app tiles. SHARE the §10 .project-tile recipe
   instead of a flatter rgba wash; hover bloom unified on --aero-glow-cyan. */
:root[data-skin="aero"] .work-item {
  border: 1px solid rgba(120, 175, 210, 0.5);
  border-radius: var(--aero-radius);
  background: linear-gradient(180deg, rgba(255,255,255,0.6), rgba(232,245,253,0.25));
  box-shadow:
    inset 0 1px 0 rgba(255,255,255,0.8),
    var(--aero-elev-1);
  transition: box-shadow var(--speed-fast) var(--ease-soft);
}
:root[data-skin="aero"] .work-item:hover {
  box-shadow:
    inset 0 1px 0 rgba(255,255,255,0.95),
    var(--aero-elev-2),
    var(--aero-glow-cyan);
}
:root[data-skin="aero"][data-theme="dark"] .work-item {
  border-color: rgba(120, 195, 225, 0.28);
  background: linear-gradient(180deg, rgba(120,200,235,0.14), rgba(16,50,71,0.30));
  box-shadow:
    inset 0 1px 0 rgba(160,220,245,0.18),
    var(--aero-elev-1);
}
:root[data-skin="aero"][data-theme="dark"] .work-item:hover {
  box-shadow:
    inset 0 1px 0 rgba(160,220,245,0.28),
    var(--aero-elev-2),
    var(--aero-glow-cyan);
}
/* Deep-link scroll-flash: keep the BASE 2s outline-fade; only recolor the
   keyframe endpoints to the cyan focus idiom so it still fades out. */
:root[data-skin="aero"] .work-item.is-target {
  outline-color: var(--aero-focus);
  animation: aero-work-item-target 2s var(--ease-soft) forwards;
}
@keyframes aero-work-item-target {
  from { outline-color: var(--aero-focus); }
  to   { outline-color: transparent; }
}

/* Project-link pills — gel convex tiles. Scoped to .project-links (bare
   .pixel-link is a layout grid, left flat). Built on the §9 .cscroll__thumb
   aqua gel (same base + --gel-spec/--gel-shadow/--gel-glow tokens → dark free).
   Label forced to #fff + text-shadow, coral underline nulled, so text reads. */
:root[data-skin="aero"] .project-links .pixel-link {
  border: 1px solid rgba(8, 90, 110, 0.45);
  border-radius: 7px;
  background:
    var(--gel-spec),
    linear-gradient(90deg, #7FD8EC 0%, #3FB4C9 50%, #1483A0 100%);
  box-shadow: var(--gel-shadow);
  transition: filter var(--speed-fast) var(--ease-soft),
              box-shadow var(--speed-fast) var(--ease-soft);
}
/* Kill the tangerine ANCHOR underline (Elisha's AI-cliché flag). The base
   `.window__body a:not(.btn)…` (0,4,1) underlines all content anchors in accent and
   out-specifies the rule above (0,3,1), and since the Aero sheet loads BEFORE base,
   a tie wouldn't win either — so this needs (0,4,2): add .window__body + the `a`
   element. The label's own decoration is already none; this clears the anchor. */
:root[data-skin="aero"] .window__body .project-links a.pixel-link { text-decoration: none; }
/* Drop the 16px pixel link-icons on the Work cards — gel muddies that small, and the
   gel header glyph + the "Website"/"GitHub" label already carry the link. Collapse the
   grid so the label isn't offset by an empty icon column. (Contact "Elsewhere" socials
   are bare .pixel-link, not .project-links — untouched.) */
:root[data-skin="aero"] .project-links .pixel-link__icon { display: none; }
:root[data-skin="aero"] .project-links .pixel-link { grid-template-columns: auto; }
:root[data-skin="aero"] .project-links .pixel-link__label,
:root[data-skin="aero"] .project-links .pixel-link:hover .pixel-link__label {
  color: #fff;
  text-decoration: none;
  text-shadow: 0 1px 1px rgba(0, 40, 55, 0.45);
}
:root[data-skin="aero"] .project-links .pixel-link:hover {
  filter: brightness(1.09) saturate(1.06);
  box-shadow: var(--gel-shadow), var(--aero-glow-cyan);
}
:root[data-skin="aero"] .project-links .pixel-link:active {
  filter: brightness(0.96);
}
:root[data-skin="aero"] .project-links .pixel-link:focus-visible {
  outline: 2px solid var(--aero-focus);
  outline-offset: 2px;
}
/* Dark: only the aqua BASE gradient is overridden (the gel tokens re-resolve). */
:root[data-skin="aero"][data-theme="dark"] .project-links .pixel-link {
  border-color: rgba(120, 195, 225, 0.40);
  background:
    var(--gel-spec),
    linear-gradient(90deg, #5FC4DC 0%, #2895B3 50%, #0D6E8A 100%);
}

/* ---- RESUME — RESTRAINED default (taste call surfaced to Elisha) ----------
   The base resume is a clean typed document inside the glass window; sections
   are flush flow blocks split by dashed .resume__rule, and several are
   collapsible <details>. Wrapping each in a bordered frosted card would double-
   frame against the dashes and mis-place a sweep on collapsed sections. So we
   leave the prose FLAT and let the window body be the glass — we only soften
   the dashed rule into a glassy divider so it reads as the same OS. ---------- */
:root[data-skin="aero"] .resume__rule {
  border-top: 1px solid rgba(120, 175, 210, 0.45);
  box-shadow: 0 1px 0 rgba(255, 255, 255, 0.55);
}
:root[data-skin="aero"][data-theme="dark"] .resume__rule {
  border-top-color: rgba(120, 195, 225, 0.28);
  box-shadow: 0 1px 0 rgba(160, 220, 245, 0.12);
}
/* resume.doc TYPE — the résumé reads as a period Aero-era document (humanist
   body, like WordPad/Word 2007 output), not terminal text. These six classes
   carry explicit --font-mono in the base skin (components.css), which §27 pins
   to a real monospace — undo it here the same way §10 un-pins the Favorites
   path bar. Everything else in the résumé (headings, ul.cli bullets) already
   inherits the Aero body font. Retro keeps the typed-mono document. */
:root[data-skin="aero"] .resume__tagline,
:root[data-skin="aero"] .resume__sub,
:root[data-skin="aero"] .resume__contact,
:root[data-skin="aero"] .resume__summary,
:root[data-skin="aero"] .resume__date,
:root[data-skin="aero"] .resume__org {
  font-family: var(--font-body);
  letter-spacing: normal;
}

/* Reduce motion: quiet the interior transitions. */
@media (prefers-reduced-motion: reduce) {
  :root[data-skin="aero"] .fav__cover,
  :root[data-skin="aero"] .folder__head,
  :root[data-skin="aero"] .work-item,
  :root[data-skin="aero"] .project-links .pixel-link { transition: none; }
  :root[data-skin="aero"] .work-item.is-target { animation: none; }
}
/* ============================================================
   18. CONTENT ROWS + TROPHY CASE — the last flat Win95 surfaces
       (Home/Blog/Contact list rows + the About Trophy Case).
       Token-first (loop principle 1): every interactive surface JOINS an
       existing recipe (§5 candy / §14 chip / §16 well / §17 well+sidebar)
       rather than re-typing a drifted near-clone. These live INSIDE .window
       (or, for the Trophy gallery, inside the standalone .tcg__win overlay),
       so the single backdrop-filter is already owned upstream — NOTHING here
       gets its own blur (P3). Glass = inset gloss + hover bloom only. Every
       light-rgba rule has a [data-theme="dark"] sibling (P4); elevation via
       --aero-elev-* (P5); rows/links get the cyan --aero-focus ring + hover
       --aero-glow-cyan bloom + pressed sink (P6); selected/featured = teal
       candy (--aero-teal-*). Prose + trophy text/imagery kept legible (P7).

       DRY NOTE for the maintainer: §18 declares four shared rules that JOIN a
       new trophy/contact selector onto an existing canonical block by re-listing
       that block's selector here (the §17 .fav__bar well, the §17 .fav__side
       panel, the §16 dark .cdp__tracks well, the §14 .kind chip). The later
       §18 rule wins the cascade with identical values, so the earlier copy is
       now redundant-but-harmless. If you'd rather keep ONE home, delete the
       re-listed selector from §18 and append the new selector to the original
       §14/§16/§17 list instead — both forms render byte-identically. They are
       grouped here only so this append-only block stays self-contained.
   ============================================================ */

/* ---- Blog / Home post rows (.panel.post) -------------------------------
   COLLISION-SAFE: §10 already styles bare .panel as a recessed gel WELL, and
   .panel is ALSO the Home intro container + the .panel.work-item cards (which
   §17 already raises). So the raised post-row tile is scoped to .panel.post —
   it layers ON the §10 well's border, never clobbers the intro/work surfaces.
   Row = light top-falloff gloss; hover = cyan bloom; pressed/:active sink. */
:root[data-skin="aero"] .panel.post {
  border-color: rgba(120, 175, 210, 0.55);
  border-radius: var(--aero-radius);
  background:
    linear-gradient(180deg,
      rgba(255, 255, 255, 0.30) 0%, rgba(255, 255, 255, 0.00) 22%),
    linear-gradient(180deg,
      rgba(251, 253, 255, 0.50) 0%, rgba(236, 246, 254, 0.42) 100%);
  box-shadow:
    inset 0 1px 0 rgba(255, 255, 255, 0.80),
    inset 0 0 0 1px rgba(255, 255, 255, 0.16),
    var(--aero-elev-1);
  transition: box-shadow var(--speed-fast) var(--ease-soft);
}
:root[data-skin="aero"] .panel.post:hover {
  box-shadow:
    inset 0 1px 0 rgba(255, 255, 255, 0.92),
    inset 0 0 0 1px rgba(255, 255, 255, 0.26),
    var(--aero-elev-2),
    var(--aero-glow-cyan);
}
:root[data-skin="aero"][data-theme="dark"] .panel.post {
  border-color: rgba(120, 195, 225, 0.30);
  background:
    linear-gradient(180deg,
      rgba(120, 200, 235, 0.10) 0%, rgba(120, 200, 235, 0.00) 22%),
    linear-gradient(180deg,
      rgba(16, 50, 71, 0.50) 0%, rgba(10, 35, 52, 0.44) 100%);
  box-shadow:
    inset 0 1px 0 rgba(160, 220, 245, 0.20),
    inset 0 0 0 1px rgba(160, 220, 245, 0.08),
    var(--aero-elev-1);
}
:root[data-skin="aero"][data-theme="dark"] .panel.post:hover {
  box-shadow:
    inset 0 1px 0 rgba(160, 220, 245, 0.30),
    inset 0 0 0 1px rgba(160, 220, 245, 0.16),
    var(--aero-elev-2),
    var(--aero-glow-cyan);
}

/* ---- Filter pill ("Tagged with X" header) → §5 candy control, 3-state ----
   Reuses the --aero-gloss* token stack verbatim. Adds the :active sink +
   focus ring its candy siblings (§5 .btn, §16 .cdp__btn) all carry. The pill
   is a container with an inner <a> clear button, so the ring is :focus-within. */
:root[data-skin="aero"] .filter-pill {
  border-color: rgba(120, 170, 205, 0.75);
  border-radius: var(--aero-pill);
  background: var(--aero-gloss), var(--color-surface);
  box-shadow:
    inset 0 1px 0 rgba(255, 255, 255, 0.95),
    inset 0 -6px 8px -6px rgba(255, 255, 255, 0.55),
    inset 0 0 0 1px rgba(255, 255, 255, 0.30),
    var(--aero-elev-1);
  transition: background var(--speed-fast) var(--ease-soft),
              box-shadow var(--speed-fast) var(--ease-soft);
}
:root[data-skin="aero"] .filter-pill:hover {
  background: var(--aero-gloss-hover), var(--color-surface-hover);
  box-shadow:
    inset 0 1px 0 rgba(255, 255, 255, 1),
    inset 0 -7px 9px -6px rgba(255, 255, 255, 0.70),
    inset 0 0 0 1px rgba(255, 255, 255, 0.40),
    var(--aero-elev-2),
    var(--aero-glow-cyan);
}
:root[data-skin="aero"] .filter-pill:active {
  background: var(--aero-gloss-press), var(--color-surface-sunken);
  box-shadow:
    inset 0 1px 3px rgba(16, 70, 110, 0.34),
    inset 0 -1px 0 rgba(255, 255, 255, 0.45),
    var(--aero-elev-1);
}
:root[data-skin="aero"] .filter-pill:focus-within {
  outline: 2px solid var(--aero-focus);
  outline-offset: 2px;
}
:root[data-skin="aero"][data-theme="dark"] .filter-pill {
  border-color: rgba(120, 195, 225, 0.50);
  box-shadow:
    inset 0 1px 0 rgba(180, 230, 250, 0.30),
    inset 0 -6px 8px -6px rgba(180, 230, 250, 0.40),
    inset 0 0 0 1px rgba(180, 230, 250, 0.15),
    var(--aero-elev-1);
}
:root[data-skin="aero"][data-theme="dark"] .filter-pill:hover {
  box-shadow:
    inset 0 1px 0 rgba(190, 235, 255, 0.45),
    inset 0 -7px 9px -6px rgba(190, 235, 255, 0.50),
    inset 0 0 0 1px rgba(190, 235, 255, 0.25),
    var(--aero-elev-2),
    var(--aero-glow-cyan);
}
:root[data-skin="aero"][data-theme="dark"] .filter-pill:active {
  box-shadow:
    inset 0 1px 3px rgba(0, 12, 22, 0.45),
    inset 0 -1px 0 rgba(180, 230, 250, 0.20),
    var(--aero-elev-1);
}
/* Clear "×" → small candy key (mirrors the §14 selected-row teal on hover). */
:root[data-skin="aero"] .filter-pill__clear {
  border-color: rgba(120, 170, 205, 0.60);
  border-radius: 5px;
  background: var(--aero-gloss), var(--color-surface);
}
:root[data-skin="aero"] .filter-pill__clear:hover {
  color: #fff;
  border-color: rgba(8, 96, 118, 0.55);
  background: var(--aero-teal-gloss), var(--aero-sky-base);
  text-shadow: 0 1px 1px rgba(0, 40, 55, 0.40);
}
:root[data-skin="aero"][data-theme="dark"] .filter-pill__clear {
  border-color: rgba(120, 195, 225, 0.50);
}

/* ---- Tag links (.tag) — ALREADY gel'd in §10/§14. Only ADD the focus ring +
   a hover bloom + the teal-candy active state (was flat coral fill). --------- */
:root[data-skin="aero"] .tag {
  border-radius: var(--aero-pill);
  /* All three legs use --ease-soft: --ease is steps(4,end), the pixel staircase
     reserved for sprite surfaces (tokens.css) — on a continuous color/bg crossfade it
     chops visibly. The box-shadow leg was already correct; color+bg were a copy-typo.
     Round-2 audit #3. */
  transition: color var(--speed-fast) var(--ease-soft),
              box-shadow var(--speed-fast) var(--ease-soft),
              background-color var(--speed-fast) var(--ease-soft);
}
:root[data-skin="aero"] .tag:hover { box-shadow: var(--aero-glow-cyan); }
/* Pressed sink — .tag is a navigating <a> on the same candy-pill surface as
   .filter-pill, but the §32 interaction-state closer missed it. :not(.is-active)
   keeps the press off the selected teal-candy fill. Round-2 audit #6. */
:root[data-skin="aero"] .tag:active:not(.is-active) {
  box-shadow: inset 0 1px 3px rgba(16, 70, 110, 0.30);
}
:root[data-skin="aero"][data-theme="dark"] .tag:active:not(.is-active) {
  box-shadow: inset 0 1px 3px rgba(0, 12, 22, 0.40);
}
:root[data-skin="aero"] .tag:focus-visible {
  outline: 2px solid var(--aero-focus);
  outline-offset: 2px;
}
/* Active tag = teal candy (mirrors .filelist__row.is-sel; brand tokens → dark free). */
:root[data-skin="aero"] .tag.is-active {
  color: #fff;
  border-bottom-color: transparent;
  background: var(--aero-teal-gloss), var(--aero-sky-base);
  box-shadow:
    inset 0 1px 0 rgba(255, 255, 255, 0.55),
    var(--aero-elev-1);
  text-shadow: 0 1px 1px rgba(0, 40, 55, 0.40);
}

/* ---- Contact link rows — TASTE CALL: glass the ROW, not the link ----------
   .pixel-link is a flat inline-grid icon+label (email / socials), NOT a pill;
   §17 already owns the only .pixel-link background recipe (.project-links gel).
   To stay DRY *and* not over-glass a prose-y link list (P7), the subtle list-row
   well + cyan hover bloom lives on the .link-list > li container; the link text
   stays flat. Selected/active n/a here. Surfaced to Elisha below. */
/* Elisha: the WHOLE menu option is one clickable button with ONE persistent hover —
   not a row-well on the <li> plus a separate inline text-highlight on the label. So
   the button treatment lives on the <a> itself (hover area == click area), the <li>
   is bare, and the label is plain text (the legacy accent-underline + the inner
   :hover text-recolor are removed below). Same fix applies anywhere a label-link
   sat inside a wider clickable row. */
:root[data-skin="aero"] .link-list > li {
  border: 0;
  background: none;
  box-shadow: none;
  padding: 0;
}
:root[data-skin="aero"] .link-list .pixel-link {
  display: grid;
  width: 100%;
  padding: 7px 10px;
  border: 1px solid rgba(120, 175, 210, 0.45);
  border-radius: var(--aero-radius);
  background:
    linear-gradient(180deg,
      rgba(255, 255, 255, 0.22) 0%, rgba(255, 255, 255, 0.00) 50%),
    rgba(120, 180, 210, 0.10);
  box-shadow:
    inset 0 1px 0 rgba(255, 255, 255, 0.55),
    inset 0 1px 4px rgba(16, 70, 110, 0.10);
  transition: box-shadow var(--speed-fast) var(--ease-soft),
              background var(--speed-fast) var(--ease-soft);
}
:root[data-skin="aero"] .link-list .pixel-link:hover,
:root[data-skin="aero"] .link-list .pixel-link:focus-visible {
  background:
    linear-gradient(180deg,
      rgba(255, 255, 255, 0.30) 0%, rgba(255, 255, 255, 0.00) 50%),
    var(--color-surface-hover);
  box-shadow:
    inset 0 1px 0 rgba(255, 255, 255, 0.70),
    var(--aero-elev-1),
    var(--aero-glow-cyan);
}
/* Label = plain text. Kill the legacy accent color + underline + the inner text
   hover that doubled up on the row hover. The whole anchor's decoration too. */
:root[data-skin="aero"] .window__body .link-list a.pixel-link { text-decoration: none; }
:root[data-skin="aero"] .link-list .pixel-link__label,
:root[data-skin="aero"] .link-list .pixel-link:hover .pixel-link__label {
  color: var(--color-text);
  text-decoration: none;
}
:root[data-skin="aero"][data-theme="dark"] .link-list .pixel-link {
  border-color: rgba(120, 195, 225, 0.28);
  background:
    linear-gradient(180deg,
      rgba(160, 220, 245, 0.08) 0%, rgba(160, 220, 245, 0.00) 50%),
    rgba(8, 30, 46, 0.34);
  box-shadow:
    inset 0 1px 0 rgba(160, 220, 245, 0.14),
    inset 0 1px 4px rgba(0, 12, 22, 0.40);
}
:root[data-skin="aero"][data-theme="dark"] .link-list .pixel-link:hover,
:root[data-skin="aero"][data-theme="dark"] .link-list .pixel-link:focus-visible {
  background:
    linear-gradient(180deg,
      rgba(160, 220, 245, 0.10) 0%, rgba(160, 220, 245, 0.00) 50%),
    var(--color-surface-hover);
  box-shadow:
    inset 0 1px 0 rgba(160, 220, 245, 0.20),
    var(--aero-elev-1),
    var(--aero-glow-cyan);
}
/* Elsewhere list ICONS → aqua gel glyphs. The base list ships inline pixel-art
   SVGs (kept for retro); under Aero they were the last pixel sprites inside
   glass chrome. Same recipe as .taskbar__item-ic: hide the sprite, paint the
   shared gel body, cut the mark out of it with a per-icon vector mask.
   Email reuses the sidebar envelope (--gico-contact); the other five marks are
   hand-drawn here (single-use, so inline — not worth gico tokens). */
:root[data-skin="aero"] .link-list .pixel-link__icon svg { display: none; }
:root[data-skin="aero"] .link-list .pixel-link__icon {
  image-rendering: auto;
  background-repeat: no-repeat;
  background-position: center;
  background-image:
    radial-gradient(120% 80% at 38% 28%, rgba(255,255,255,0.55) 0%, rgba(255,255,255,0) 44%),
    radial-gradient(130% 130% at 50% 28%, #54CFE6 0%, #1A9AB1 52%, #0A6376 100%);
  filter: drop-shadow(0 0 1px rgba(150,225,250,0.35)) drop-shadow(0 1px 1px rgba(0,18,30,0.55));
}
:root[data-skin="aero"] .link-list .pixel-link__icon[data-icon="email"] {
  -webkit-mask: var(--gico-contact) center / 19px no-repeat;
          mask: var(--gico-contact) center / 19px no-repeat;
}
/* Substack — the stacked masthead bars, bottom one an open pennant. */
:root[data-skin="aero"] .link-list .pixel-link__icon[data-icon="substack"] {
  -webkit-mask: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'><path d='M5 4h14v2.6H5zM5 8.7h14v2.6H5zM5 13.4h14V20l-7-3.2L5 20z' fill='%23fff'/></svg>") center / 16px no-repeat;
          mask: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'><path d='M5 4h14v2.6H5zM5 8.7h14v2.6H5zM5 13.4h14V20l-7-3.2L5 20z' fill='%23fff'/></svg>") center / 16px no-repeat;
}
/* LinkedIn — the "in" mark. */
:root[data-skin="aero"] .link-list .pixel-link__icon[data-icon="linkedin"] {
  -webkit-mask: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'><circle cx='6.6' cy='6.4' r='1.9' fill='%23fff'/><path d='M4.9 9.5h3.4V19H4.9zM10.2 9.5h3.2v1.4c.6-.9 1.7-1.7 3.3-1.7 2.4 0 3.9 1.6 3.9 4.5V19h-3.4v-4.9c0-1.3-.6-2.2-1.8-2.2-1.1 0-1.9.8-1.9 2.3V19h-3.3z' fill='%23fff'/></svg>") center / 17px no-repeat;
          mask: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'><circle cx='6.6' cy='6.4' r='1.9' fill='%23fff'/><path d='M4.9 9.5h3.4V19H4.9zM10.2 9.5h3.2v1.4c.6-.9 1.7-1.7 3.3-1.7 2.4 0 3.9 1.6 3.9 4.5V19h-3.4v-4.9c0-1.3-.6-2.2-1.8-2.2-1.1 0-1.9.8-1.9 2.3V19h-3.3z' fill='%23fff'/></svg>") center / 17px no-repeat;
}
/* GitHub — the octocat mark (Octicons mark-github outline, MIT). */
:root[data-skin="aero"] .link-list .pixel-link__icon[data-icon="github"] {
  -webkit-mask: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'><path d='M8 0C3.58 0 0 3.58 0 8c0 3.54 2.29 6.53 5.47 7.59.4.07.55-.17.55-.38 0-.19-.01-.82-.01-1.49-2.01.37-2.53-.49-2.69-.94-.09-.23-.48-.94-.82-1.13-.28-.15-.68-.52-.01-.53.63-.01 1.08.58 1.23.82.72 1.21 1.87.87 2.33.66.07-.52.28-.87.51-1.07-1.78-.2-3.64-.89-3.64-3.95 0-.87.31-1.59.82-2.15-.08-.2-.36-1.02.08-2.12 0 0 .67-.21 2.2.82.64-.18 1.32-.27 2-.27s1.36.09 2 .27c1.53-1.04 2.2-.82 2.2-.82.44 1.1.16 1.92.08 2.12.51.56.82 1.27.82 2.15 0 3.07-1.87 3.75-3.65 3.95.29.25.54.73.54 1.48 0 1.07-.01 1.93-.01 2.2 0 .21.15.46.55.38A8.01 8.01 0 0 0 16 8c0-4.42-3.58-8-8-8z' fill='%23fff'/></svg>") center / 16px no-repeat;
          mask: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'><path d='M8 0C3.58 0 0 3.58 0 8c0 3.54 2.29 6.53 5.47 7.59.4.07.55-.17.55-.38 0-.19-.01-.82-.01-1.49-2.01.37-2.53-.49-2.69-.94-.09-.23-.48-.94-.82-1.13-.28-.15-.68-.52-.01-.53.63-.01 1.08.58 1.23.82.72 1.21 1.87.87 2.33.66.07-.52.28-.87.51-1.07-1.78-.2-3.64-.89-3.64-3.95 0-.87.31-1.59.82-2.15-.08-.2-.36-1.02.08-2.12 0 0 .67-.21 2.2.82.64-.18 1.32-.27 2-.27s1.36.09 2 .27c1.53-1.04 2.2-.82 2.2-.82.44 1.1.16 1.92.08 2.12.51.56.82 1.27.82 2.15 0 3.07-1.87 3.75-3.65 3.95.29.25.54.73.54 1.48 0 1.07-.01 1.93-.01 2.2 0 .21.15.46.55.38A8.01 8.01 0 0 0 16 8c0-4.42-3.58-8-8-8z' fill='%23fff'/></svg>") center / 16px no-repeat;
}
/* Threads — the @ loop, stroked. */
:root[data-skin="aero"] .link-list .pixel-link__icon[data-icon="threads"] {
  -webkit-mask: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'><path d='M17.5 18.2A7.7 7.7 0 1 1 19.7 12v1.4c0 1.6-.9 2.6-2.2 2.6s-2.1-1-2.1-2.6V12a3.4 3.4 0 1 0-1 2.4' fill='none' stroke='%23fff' stroke-width='2.1' stroke-linecap='round'/></svg>") center / 17px no-repeat;
          mask: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'><path d='M17.5 18.2A7.7 7.7 0 1 1 19.7 12v1.4c0 1.6-.9 2.6-2.2 2.6s-2.1-1-2.1-2.6V12a3.4 3.4 0 1 0-1 2.4' fill='none' stroke='%23fff' stroke-width='2.1' stroke-linecap='round'/></svg>") center / 17px no-repeat;
}
/* Brielle Builds — a PC tower (drive slots + power dot knocked out). */
:root[data-skin="aero"] .link-list .pixel-link__icon[data-icon="pc"] {
  -webkit-mask: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'><path fill-rule='evenodd' d='M6 2.5h12A1.5 1.5 0 0 1 19.5 4v16a1.5 1.5 0 0 1-1.5 1.5H6A1.5 1.5 0 0 1 4.5 20V4A1.5 1.5 0 0 1 6 2.5zm1.5 3.5h9v2.2h-9zm0 4.4h9v2.2h-9zm5.9 6.4a1.4 1.4 0 1 1-2.8 0 1.4 1.4 0 0 1 2.8 0z' fill='%23fff'/></svg>") center / 16px no-repeat;
          mask: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'><path fill-rule='evenodd' d='M6 2.5h12A1.5 1.5 0 0 1 19.5 4v16a1.5 1.5 0 0 1-1.5 1.5H6A1.5 1.5 0 0 1 4.5 20V4A1.5 1.5 0 0 1 6 2.5zm1.5 3.5h9v2.2h-9zm0 4.4h9v2.2h-9zm5.9 6.4a1.4 1.4 0 1 1-2.8 0 1.4 1.4 0 0 1 2.8 0z' fill='%23fff'/></svg>") center / 16px no-repeat;
}

/* .watch__meta (attention-detail metadata) is a flex TEXT column — intentionally
   left FLAT prose (P7). No rule emitted (an empty / transition-only selector is
   dead CSS). The detail bar's chrome already comes from .window + the §14 .kind
   chip + the §10 cover-art rounding. */

/* ---- Project tiles (Home intro grid) — §10 .project-tile already owns the
   radius + gloss + hover bloom. No rule emitted here; nothing to add. -------- */


/* ============================================================
   TROPHY CASE — launcher rows + maximized gallery
   ============================================================ */

/* ---- Address bar (.tc-addr) → styled by the §54 Vista breadcrumb FIELD
   (one recipe for every location bar — .tc-addr, .fav__bar, .explorer__bar). */

/* ---- Launcher rows (.tc-row) → JOIN the §17 .fav__side frosted-panel recipe
   verbatim; layer ONLY the hover-bloom + pressed-sink delta (mirrors how §16
   .filelist__row sits on the shared well). ---------------------------------- */
:root[data-skin="aero"] .fav__side,
:root[data-skin="aero"] .tc-row {
  border: 1px solid rgba(120, 175, 210, 0.55);
  border-radius: var(--aero-radius);
  background:
    linear-gradient(180deg,
      rgba(255, 255, 255, 0.30) 0%, rgba(255, 255, 255, 0.00) 22%),
    linear-gradient(180deg,
      rgba(244, 251, 254, 0.48) 0%, rgba(223, 241, 250, 0.34) 100%);
  box-shadow:
    inset 0 1px 0 rgba(255, 255, 255, 0.80),
    inset 0 0 0 1px rgba(255, 255, 255, 0.16),
    var(--aero-elev-1);
}
:root[data-skin="aero"][data-theme="dark"] .fav__side,
:root[data-skin="aero"][data-theme="dark"] .tc-row {
  border-color: rgba(120, 195, 225, 0.28);
  background:
    linear-gradient(180deg,
      rgba(120, 200, 235, 0.10) 0%, rgba(120, 200, 235, 0.00) 22%),
    linear-gradient(180deg,
      rgba(16, 50, 71, 0.48) 0%, rgba(10, 35, 52, 0.40) 100%);
  box-shadow:
    inset 0 1px 0 rgba(160, 220, 245, 0.18),
    inset 0 0 0 1px rgba(160, 220, 245, 0.08),
    var(--aero-elev-2);
}
/* hover + pressed deltas (only .tc-row is interactive; .fav__side is a panel) */
:root[data-skin="aero"] .tc-row {
  transition: box-shadow var(--speed-fast) var(--ease-soft);
}
:root[data-skin="aero"] .tc-row:hover {
  box-shadow:
    inset 0 1px 0 rgba(255, 255, 255, 0.92),
    inset 0 0 0 1px rgba(255, 255, 255, 0.26),
    var(--aero-elev-2),
    var(--aero-glow-cyan);
}
:root[data-skin="aero"] .tc-row:active {
  box-shadow:
    inset 0 1px 3px rgba(16, 70, 110, 0.30),
    inset 0 -1px 0 rgba(255, 255, 255, 0.45),
    var(--aero-elev-1);
}
:root[data-skin="aero"] .tc-row:focus-visible {
  outline: 2px solid var(--aero-focus);
  outline-offset: 2px;
}
:root[data-skin="aero"][data-theme="dark"] .tc-row:hover {
  box-shadow:
    inset 0 1px 0 rgba(160, 220, 245, 0.30),
    inset 0 0 0 1px rgba(160, 220, 245, 0.16),
    var(--aero-elev-2),
    var(--aero-glow-cyan);
}
:root[data-skin="aero"][data-theme="dark"] .tc-row:active {
  box-shadow:
    inset 0 1px 3px rgba(0, 12, 22, 0.40),
    inset 0 -1px 0 rgba(160, 220, 245, 0.20),
    var(--aero-elev-1);
}

/* ---- Featured row (.tc-row--featured) — the District finalist hero.
   Teal candy + elevation ALONE distinguish it (mirrors .filelist__row.is-sel).
   NO resting cyan glow: a row that already blooms at rest reads as a stuck
   hover and kills the hover feedback. Bloom is reserved for :hover. --------- */
:root[data-skin="aero"] .tc-row--featured,
:root[data-skin="aero"][data-theme="dark"] .tc-row--featured {
  color: #fff;
  border-color: rgba(8, 96, 118, 0.55);
  background: var(--aero-teal-gloss), var(--aero-sky-base);
  box-shadow:
    inset 0 1px 0 rgba(255, 255, 255, 0.55),
    var(--aero-elev-2);
  /* Dual dark halo (parity with the §22 window titles), NOT the weak single drop it
     had: white text sits on the sky-candy whose 0.85 gloss makes the upper band
     near-white — white-on-that was ~2.2:1. The 0 0 4px dark glow outlines each glyph
     so the white reads cleanly over the light gloss band, the skin's accepted
     white-on-glass treatment. Found in the round-3 visual pass. */
  text-shadow:
    0 1px 1px rgba(0, 30, 42, 0.70),
    0 0 4px rgba(0, 26, 38, 0.55);
}
:root[data-skin="aero"][data-theme="dark"] .tc-row--featured {
  border-color: rgba(120, 195, 225, 0.55);
}
/* (The white featured-text rule that lived here was a relic of the retired
   sky-candy slab: §47 replaced the slab with the frosted plaque + intended
   the base ACCENT title as the distinction, but white-on-frosted survived —
   near-invisible in the light theme. Removed 2026-07-03; the title falls
   back to the base accent, the sub/count to their muted ink.) */
:root[data-skin="aero"] .tc-row--featured:hover {
  box-shadow:
    inset 0 1px 0 rgba(255, 255, 255, 0.65),
    var(--aero-elev-2),
    var(--aero-glow-cyan);
}

/* ---- Award chips (.tc-chip) → JOIN the §14 .kind candy-gel chip recipe -----
   The per-variant tint is carried by .tc-chip--win/finalist/nominee/month
   background-color, exactly like .kind--*. ONE difference: .kind text is white,
   .tc-chip ink is DARK — so the §14 dark text-shadow is overridden off here so
   the small badge label stays crisp. Fixed pale tints don't shift by theme, so
   no dark fill sibling is needed; the dark-theme legibility note is surfaced
   to Elisha (P7). */
:root[data-skin="aero"] .kind,
:root[data-skin="aero"] .tc-chip {
  border: 1px solid rgba(0, 0, 0, 0.24);
  border-radius: var(--aero-pill);
  background-image:
    linear-gradient(180deg,
      rgba(255,255,255,0.58) 0%, rgba(255,255,255,0.20) 44%,
      rgba(255,255,255,0.03) 50%, rgba(255,255,255,0.00) 51%,
      rgba(255,255,255,0.12) 100%);
  box-shadow:
    inset 0 1px 0 rgba(255,255,255,0.65),
    inset 0 -3px 5px -2px rgba(0,0,0,0.30),
    0 1px 2px rgba(8,60,84,0.24);
  text-shadow: 0 1px 1px rgba(0,0,0,0.28);
}
/* dark ink chip: drop the dark text-shadow so small labels stay crisp; keep the
   variant border tint already set by .tc-chip--* (don't flatten it to black). */
:root[data-skin="aero"] .tc-chip {
  border-color: currentColor;
  text-shadow: none;
}

/* ---- Maximized gallery (inside the standalone .tcg__win overlay) ----------- */

/* Stage media well (.tcg__stage) is intrinsically DARK (#0E1A22) in BOTH themes,
   so it JOINS the §16 *dark* .cdp__tracks well recipe — recessed inset glow on
   dark glass — not the light well. Re-listed (see DRY note). No blur: the
   .tcg__win overlay owns the stacking context. */
:root[data-skin="aero"][data-theme="dark"] .cdp__tracks,
:root[data-skin="aero"][data-theme="dark"] .filelist__rows,
:root[data-skin="aero"] .tcg__stage {
  border-color: rgba(120, 195, 225, 0.28);
  background: rgba(8, 30, 46, 0.40);
  box-shadow: inset 0 1px 4px rgba(0, 12, 22, 0.45);
}
:root[data-skin="aero"] .tcg__stage {
  border: 1px solid rgba(120, 195, 225, 0.28);
}

/* Thumbnail strip (.tcg__strip) → the §17 glass-blue well, top-border only so it
   reads as the shelf under the dark stage. Light/dark siblings. */
:root[data-skin="aero"] .tcg__strip {
  border-top: 1px solid rgba(120, 175, 210, 0.45);
  background:
    linear-gradient(180deg,
      rgba(255, 255, 255, 0.22) 0%, rgba(255, 255, 255, 0.00) 50%),
    rgba(120, 180, 210, 0.14);
  box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.55);
}
:root[data-skin="aero"][data-theme="dark"] .tcg__strip {
  border-top-color: rgba(120, 195, 225, 0.28);
  background:
    linear-gradient(180deg,
      rgba(160, 220, 245, 0.08) 0%, rgba(160, 220, 245, 0.00) 50%),
    rgba(8, 30, 46, 0.34);
  box-shadow: inset 0 1px 0 rgba(160, 220, 245, 0.12);
}

/* Active thumbnail → INSET teal selection ring (audit: the old OUTSET cyan ring
   clipped on edge thumbs in the overflow-x:auto strip, and used the focus color, not
   the teal accent its .fav__cover.is-sel sibling uses). Inset like R4-9; the trophy
   stage is dark in BOTH themes, so the bright-teal ring reads without a theme split. */
:root[data-skin="aero"] .tcg__thumb.is-active {
  border-color: rgba(63, 196, 214, 0.85);
  box-shadow:
    inset 0 1px 0 rgba(180, 230, 250, 0.28),
    inset 0 0 0 2px rgba(63, 196, 214, 0.88),
    var(--aero-elev-2);
}
:root[data-skin="aero"] .tcg__thumb:focus-visible {
  outline: 2px solid var(--aero-focus);
  outline-offset: 2px;
}

/* Prev/next chevrons (.tcg__nav) — these float ON the near-black stage, so they
   get DARK-glass candy (the taskbar-lozenge idiom), NOT the bright on-paper §5
   .btn gloss, which would glare white-blue over the dark backdrop. Same dark
   lozenge in both themes (the stage is dark in both). */
:root[data-skin="aero"] .tcg__nav {
  color: #EAF6FC;
  border: 1px solid rgba(180, 220, 245, 0.45);
  border-radius: var(--aero-radius);
  background:
    linear-gradient(180deg,
      rgba(255, 255, 255, 0.45) 0%, rgba(255, 255, 255, 0.12) 46%,
      rgba(255, 255, 255, 0.00) 50%, rgba(200, 232, 250, 0.10) 100%),
    linear-gradient(180deg,
      rgba(40, 90, 122, 0.62) 0%, rgba(16, 40, 60, 0.74) 100%);
  box-shadow:
    inset 0 1px 0 rgba(255, 255, 255, 0.55),
    inset 0 -6px 9px -6px rgba(150, 210, 245, 0.30),
    0 2px 6px rgba(0, 12, 22, 0.45);
  text-shadow: 0 1px 1px rgba(0, 20, 32, 0.55);
  transition: background var(--speed-fast) var(--ease-soft),
              box-shadow var(--speed-fast) var(--ease-soft);
}
:root[data-skin="aero"] .tcg__nav:hover:not(:disabled) {
  background:
    linear-gradient(180deg,
      rgba(255, 255, 255, 0.55) 0%, rgba(255, 255, 255, 0.18) 46%,
      rgba(255, 255, 255, 0.02) 50%, rgba(210, 240, 255, 0.16) 100%),
    linear-gradient(180deg,
      rgba(50, 102, 138, 0.66) 0%, rgba(20, 50, 74, 0.78) 100%);
  box-shadow:
    inset 0 1px 0 rgba(255, 255, 255, 0.70),
    inset 0 -7px 10px -6px rgba(170, 225, 250, 0.45),
    0 2px 8px rgba(0, 12, 22, 0.50),
    var(--aero-glow-cyan);
}
:root[data-skin="aero"] .tcg__nav:active:not(:disabled) {
  box-shadow:
    inset 0 2px 6px rgba(0, 12, 22, 0.55),
    inset 0 1px 0 rgba(255, 255, 255, 0.25);
}
:root[data-skin="aero"] .tcg__nav:disabled { opacity: 0.3; }
:root[data-skin="aero"] .tcg__nav:focus-visible {
  outline: 2px solid var(--aero-focus);
  outline-offset: 2px;
}

/* Reduced motion: quiet the row/pill/nav transitions. */
@media (prefers-reduced-motion: reduce) {
  :root[data-skin="aero"] .panel.post,
  :root[data-skin="aero"] .filter-pill,
  :root[data-skin="aero"] .filter-pill__clear,
  :root[data-skin="aero"] .tag,
  :root[data-skin="aero"] .link-list > li,
  :root[data-skin="aero"] .tc-row,
  :root[data-skin="aero"] .tcg__nav { transition: none; }
}
/* ============================================================
   19. CHROME POLISH + MOTION
   ---------------------------------------------------------------------------
   The remaining Aero chrome touch-ups + the motion pass. Everything here is
   token-driven (--aero-*), every theme has a dark sibling (or re-resolves a
   token that carries both), and every animation is quieted under
   prefers-reduced-motion. The structuring rule:

     • ONE blur per stacking context. The dialog/window BODIES get NO own blur
       (they sit inside the §3 frosted frame, which owns the single blur). Only
       the systray flyout — a standalone popup with its own stacking context —
       is allowed a backdrop-filter, mirroring §7 .start-menu.
     • The dialog BODY is already a frosted reading interior in §4 (it shares
       the .os-dialog__body / .window__body rule) — NOT re-declared here.

   Covers:
     1. Dialog close button → §5 candy 3-state + cyan focus (was flat bevel).
     2. Systray flyout → frosted glass panel mirroring §7 .start-menu.
     3. Minimize thunk → soft additive cyan-glow bloom (no skin-swap mid-beat).
     4. Native ::-webkit-scrollbar fallback → §9 glass-blue track + teal gel.
     5. Start-menu entrance → frosted panel BLOOMS in (scale + Y + opacity).
     6. Window open/close → glass settling (gentle mount; soft restore + exit).
   ============================================================ */

/* ---- 1. Dialog close button: 3-state candy gloss (mirrors §5 .window__btn) ---
   The base .os-dialog__close is a flat Win95 bevel. Reskin it to the same candy
   recipe the window controls use, with the shared cyan focus ring. */
:root[data-skin="aero"] .os-dialog__close {
  border: 1px solid rgba(120, 170, 205, 0.75);
  border-radius: 7px;
  background: var(--aero-gloss), var(--color-surface);
  box-shadow:
    inset 0 1px 0 rgba(255, 255, 255, 0.95),
    inset 0 -6px 8px -6px rgba(255, 255, 255, 0.55),
    inset 0 0 0 1px rgba(255, 255, 255, 0.30),
    0 1px 2px rgba(16, 70, 110, 0.22);
  transition: background var(--speed-fast) var(--ease-soft),
              box-shadow var(--speed-fast) var(--ease-soft);
}
:root[data-skin="aero"] .os-dialog__close:hover {
  background: var(--aero-gloss-hover), var(--color-surface-hover);
  box-shadow:
    inset 0 1px 0 rgba(255, 255, 255, 1),
    inset 0 -7px 9px -6px rgba(255, 255, 255, 0.70),
    inset 0 0 0 1px rgba(255, 255, 255, 0.40),
    0 2px 5px rgba(16, 70, 110, 0.26);
}
:root[data-skin="aero"] .os-dialog__close:active {
  background: var(--aero-gloss-press), var(--color-surface-sunken);
  box-shadow:
    inset 0 1px 3px rgba(16, 70, 110, 0.34),
    inset 0 -1px 0 rgba(255, 255, 255, 0.45),
    0 1px 1px rgba(16, 70, 110, 0.16);
}
:root[data-skin="aero"] .os-dialog__close:focus-visible {
  outline: 2px solid var(--aero-focus);
  outline-offset: 2px;
}
:root[data-skin="aero"][data-theme="dark"] .os-dialog__close {
  border-color: rgba(120, 195, 225, 0.50);
  box-shadow:
    inset 0 1px 0 rgba(180, 230, 250, 0.30),
    inset 0 -6px 8px -6px rgba(180, 230, 250, 0.40),
    inset 0 0 0 1px rgba(180, 230, 250, 0.15),
    var(--aero-elev-1);
}
:root[data-skin="aero"][data-theme="dark"] .os-dialog__close:hover {
  box-shadow:
    inset 0 1px 0 rgba(190, 235, 255, 0.45),
    inset 0 -7px 9px -6px rgba(190, 235, 255, 0.50),
    inset 0 0 0 1px rgba(190, 235, 255, 0.25),
    var(--aero-elev-2),
    var(--aero-glow-cyan);
}
:root[data-skin="aero"][data-theme="dark"] .os-dialog__close:active {
  box-shadow:
    inset 0 1px 3px rgba(0, 12, 22, 0.45),
    inset 0 -1px 0 rgba(180, 230, 250, 0.20),
    var(--aero-elev-1);
}

/* ---- 2. Systray flyout: frosted glass panel (mirrors §7 .start-menu) ---------
   Standalone popup (own stacking context) → ONE backdrop-filter allowed here.
   Base is position:absolute (right:0; bottom:calc(100%+6px)) — do NOT touch
   position; isolation:isolate gives the -z ::before sweep a stacking context
   (exactly what §7 does), and the big drop layer comes from --aero-elev-3. */
:root[data-skin="aero"] .systray__flyout {
  isolation: isolate;
  border: 1px solid rgba(255, 255, 255, 0.65);
  border-radius: var(--aero-radius-lg);
  background-color: rgba(228, 244, 254, 0.62);
  background-image:
    radial-gradient(125% 70% at 50% -22%,
      rgba(255,255,255,0.95) 0%, rgba(255,255,255,0.55) 18%,
      rgba(255,255,255,0.12) 38%, rgba(255,255,255,0) 52%),
    linear-gradient(180deg,
      rgba(244,251,254,0.55) 0%, rgba(223,241,250,0.30) 30%,
      rgba(206,232,250,0.18) 60%, rgba(196,228,248,0.34) 100%);
  background-repeat: no-repeat;
  -webkit-backdrop-filter: blur(var(--aero-shell-blur, 14px)) saturate(1.55) brightness(1.06);
          backdrop-filter: blur(var(--aero-shell-blur, 14px)) saturate(1.55) brightness(1.06);
  box-shadow:
    inset 0 1px 0 0 rgba(255,255,255,0.92),
    inset 0 0 0 1px rgba(255,255,255,0.28),
    inset 0 -10px 16px -10px rgba(12,70,110,0.20),
    var(--aero-elev-3),
    var(--aero-elev-1);
}
:root[data-skin="aero"] .systray__flyout::before {
  content: "";
  position: absolute;
  left: 1px; right: 1px; top: 1px;
  height: 42%;
  z-index: -1;
  pointer-events: none;
  border-radius: calc(var(--aero-radius-lg) - 1px) calc(var(--aero-radius-lg) - 1px) 0 0;
  background: radial-gradient(140% 90% at 50% -34%,
    rgba(255,255,255,0.85) 0%, rgba(255,255,255,0.40) 30%,
    rgba(255,255,255,0.10) 55%, rgba(255,255,255,0) 72%);
}
:root[data-skin="aero"][data-theme="dark"] .systray__flyout {
  border-color: rgba(120, 195, 225, 0.30);
  background-color: rgba(16, 50, 71, 0.62);
  background-image:
    radial-gradient(125% 70% at 50% -22%,
      rgba(190,235,255,0.40) 0%, rgba(190,235,255,0.16) 18%,
      rgba(190,235,255,0.04) 38%, rgba(190,235,255,0) 52%),
    linear-gradient(180deg,
      rgba(16,50,71,0.55) 0%, rgba(14,43,61,0.30) 30%,
      rgba(10,35,52,0.18) 60%, rgba(8,28,42,0.34) 100%);
  -webkit-backdrop-filter: blur(var(--aero-shell-blur, 14px)) saturate(1.5) brightness(0.92);
          backdrop-filter: blur(var(--aero-shell-blur, 14px)) saturate(1.5) brightness(0.92);
  box-shadow:
    inset 0 1px 0 0 rgba(180, 230, 250, 0.28),
    inset 0 0 0 1px rgba(160, 220, 245, 0.10),
    inset 0 -10px 16px -10px rgba(0,12,22,0.30),
    var(--aero-elev-3),
    var(--aero-elev-1);
}
:root[data-skin="aero"][data-theme="dark"] .systray__flyout::before {
  background: radial-gradient(140% 90% at 50% -34%,
    rgba(190,235,255,0.30) 0%, rgba(190,235,255,0.16) 30%,
    rgba(190,235,255,0) 55%);
}

/* ---- 3. Minimize thunk: additive cyan-glow bloom ----------------------------
   Replaces the Win95 steps(1) pressed-bevel flicker. The §6 .taskbar__item glass
   gloss is left completely intact — the bloom adds ONLY an outer glow that rises
   and fades on --ease-soft, driven by the theme-resolving --aero-glow-cyan token
   (light + dark values baked in). 0%/100% sit at "no glow"; 50% swells. */
@keyframes aero-minimize-bloom {
  0%   { box-shadow: 0 0 0 0 transparent; }
  50%  { box-shadow: var(--aero-glow-cyan); }
  100% { box-shadow: 0 0 0 0 transparent; }
}
:root[data-skin="aero"] .taskbar__item.is-receiving {
  /* --speed (180ms) so the glow has room to rise + fall; the §6 gloss box-shadow
     stays painted because this keyframe only ADDS an outer-glow layer and the
     base box-shadow re-applies the instant the animation ends. */
  animation: aero-minimize-bloom var(--speed) var(--ease-soft);
}

/* ---- 4. Native scrollbar fallback: glass-blue track + teal gel thumb ---------
   The custom DOM scrollbar (§9) is the desktop path; this styles the NATIVE
   ::-webkit-scrollbar for the touch / no-JS fallback so it matches .cscroll. */
:root[data-skin="aero"] .window__body::-webkit-scrollbar-track {
  background: rgba(120, 180, 210, 0.18);
  box-shadow: inset 0 1px 3px rgba(16, 70, 110, 0.22);
}
:root[data-skin="aero"] .window__body::-webkit-scrollbar-thumb {
  background:
    radial-gradient(85% 150% at 28% 50%,
      rgba(255,255,255,0.92) 0%, rgba(255,255,255,0.55) 22%,
      rgba(255,255,255,0.12) 46%, rgba(255,255,255,0) 50%),
    radial-gradient(60% 130% at 100% 50%,
      rgba(255,255,255,0.22) 0%, rgba(255,255,255,0) 55%),
    linear-gradient(90deg, #7FD8EC 0%, #3FB4C9 50%, #1483A0 100%);
  border: 1px solid rgba(8,90,110,0.45);
  box-shadow:
    inset 0 1px 0 rgba(255,255,255,0.85),
    inset 0 -1px 0 rgba(8,70,90,0.35),
    0 1px 2px rgba(16,70,110,0.30);
}
:root[data-skin="aero"] .window__body::-webkit-scrollbar-thumb:hover {
  filter: brightness(1.09) saturate(1.06);
}
:root[data-skin="aero"] .window__body::-webkit-scrollbar-thumb:active {
  filter: brightness(0.96);
  box-shadow:
    inset 0 2px 4px rgba(8,60,80,0.40),
    inset 0 -1px 0 rgba(255,255,255,0.3),
    0 1px 1px rgba(16,70,110,0.25);
}
:root[data-skin="aero"][data-theme="dark"] .window__body::-webkit-scrollbar-track {
  background: rgba(8, 30, 46, 0.40);
  box-shadow: inset 0 1px 3px rgba(0, 12, 22, 0.45);
}

/* ---- 5. Start-menu entrance: frosted panel blooms in -------------------------
   Base inherits the plain fade/8px-slide of start-menu-in. Override with a bloom
   that grows up out of the Start-button corner (transform-origin bottom-left).
   :not(.context-menu) so the right-click context menu — which reuses .start-menu
   but anchors at the cursor — keeps its own inherited origin. */
:root[data-skin="aero"] .start-menu:not(.context-menu) {
  transform-origin: bottom left;
  animation: aero-start-menu-bloom var(--speed) var(--ease-soft);
}
@keyframes aero-start-menu-bloom {
  from { opacity: 0; transform: translateY(8px) scale(0.96); }
  to   { opacity: 1; transform: translateY(0)   scale(1); }
}

/* ---- 6. Window open/close: glass settling -----------------------------------
   The base window.css mount (window-pop) is a hard pixel pop (scale 0.88, +8px);
   restore/minimize (window-open/window-close) slide 60vh + scale to 0.1 — a
   Win95 vacuum. Aero softens all three:

     • MOUNT (base .window) — calm settle: opacity + ~8px lift + a gentle
       0.97→1.005→1 scale. NO 60vh travel (that would fling every freshly-loaded
       window two-thirds up the viewport — theatrical, not "glass settling").
     • RESTORE (.is-opening) — keeps the 60vh rise from the taskbar but lands on
       a soft scale floor (0.92, not 0.1) so it glides up rather than zooming.
     • MINIMIZE (.is-closing) — mirrors the restore: sinks 60vh to a 0.88 floor,
       a glass dissolve toward the bar, not a hard vacuum to a dot.

   Drag offsets (--drag-x/--drag-y) are composed in every frame so a manually-
   positioned window never snaps to (0,0) — same contract as window.css. */
@keyframes aero-window-mount {
  0%   { opacity: 0; transform: translate(var(--drag-x, 0px), calc(var(--drag-y, 0px) + 8px)) scale(0.97); }
  60%  { opacity: 1; transform: translate(var(--drag-x, 0px), var(--drag-y, 0px))              scale(1.005); }
  100% { opacity: 1; transform: translate(var(--drag-x, 0px), var(--drag-y, 0px))              scale(1); }
}
/* DIRECTIONAL (2026-07-07): windows.js stamps --min-dx/--min-dy (window ->
   its own taskbar tab) + --min-scale before each run — the Seven-style
   morph into the specific tab, not a generic 60vh sink. Fallbacks preserve
   the previous glass-dissolve exactly for any tab-less path (dialogs). The
   directional scale floor is the stamped tab ratio (~0.12-0.3): with a real
   target to fly to, shrinking far reads as Win7's minimize, not a vacuum. */
@keyframes aero-window-restore {
  0%   { opacity: 0; transform: translate(calc(var(--drag-x, 0px) + var(--min-dx, 0px)), calc(var(--drag-y, 0px) + var(--min-dy, 60vh))) scale(var(--min-scale, 0.92)); }
  60%  { opacity: 1; transform: translate(var(--drag-x, 0px), var(--drag-y, 0px))              scale(1.005); }
  100% { opacity: 1; transform: translate(var(--drag-x, 0px), var(--drag-y, 0px))              scale(1); }
}
@keyframes aero-window-close {
  0%   { opacity: 1; transform: translate(var(--drag-x, 0px), var(--drag-y, 0px))              scale(1); }
  100% { opacity: 0; transform: translate(calc(var(--drag-x, 0px) + var(--min-dx, 0px)), calc(var(--drag-y, 0px) + var(--min-dy, 60vh))) scale(var(--min-scale, 0.88)); }
}
:root[data-skin="aero"] .window {
  animation: aero-window-mount var(--speed-window) var(--ease-soft);
}
/* Preserve window.css's post-mount guard so the mount doesn't replay when the
   animation-name reverts (e.g. .is-opening ends). */
:root[data-skin="aero"] .window[data-mounted] { animation-name: none; }
:root[data-skin="aero"] .window.is-opening {
  animation: aero-window-restore var(--speed-window) var(--ease-soft);
}
:root[data-skin="aero"] .window.is-closing {
  animation: aero-window-close var(--speed-window) var(--ease-soft) forwards;
}

/* ---- Reduced motion: quiet everything --------------------------------------
   tokens.css already squashes --speed* to 0.01ms and forces animation/transition
   duration to 0.01ms globally, but we also neutralize the transforms + filters so
   the reduced state is fully still (no residual scale/glow/brightness shift). */
@media (prefers-reduced-motion: reduce) {
  :root[data-skin="aero"] .os-dialog__close { transition: none; }
  :root[data-skin="aero"] .taskbar__item.is-receiving { animation: none; }
  :root[data-skin="aero"] .start-menu:not(.context-menu) {
    animation: none;
    transform: none;
  }
  :root[data-skin="aero"] .window,
  :root[data-skin="aero"] .window.is-opening,
  :root[data-skin="aero"] .window.is-closing {
    animation: none;
  }
  :root[data-skin="aero"] .window__body::-webkit-scrollbar-thumb:hover,
  :root[data-skin="aero"] .window__body::-webkit-scrollbar-thumb:active {
    filter: none;
  }
}
/* ============================================================
   20. PAGE-UNIQUE WINDOWS + CONTROLS — the surfaces the per-surface
       passes missed (found by the completeness review). Each still rendered
       flat Win95 under the all-glass skin. Token-first, JOIN-don't-clone
       (loop principle 1): every selector here is appended onto an existing
       canonical block by re-listing that block's selectors (same DRY device
       §18 uses — the later rule wins the cascade with byte-identical token
       values, so no recipe is ever re-typed and nothing can drift). ONE blur
       per stacking context (only the standalone .fl-menu__pop popup blurs);
       every light-rgba rule rides a token that re-resolves dark or has an
       explicit [data-theme="dark"] sibling; cyan --aero-focus rings; LCD kept
       period-green (taste call, flagged).
   ============================================================ */

/* ---- "Means to an End" reader + Trophy gallery WINDOWS + the live drag state
   → JOIN the §16 standalone-glass-frame recipe (.np__win / .vpv__win): frosted
   tint + --aero-elev-3 drop + the SHARED --aero-sweep specular ::before (not a
   re-typed, hotter radial). .window.is-dragging joins too so the frame never
   snaps to Win95 mid-drag — it is the same .window box, so the §3 frame already
   paints; re-listing here keeps it explicit + token-locked. ------------------ */
:root[data-skin="aero"] .np__win,
:root[data-skin="aero"] .vpv__win,
:root[data-skin="aero"] .mte__win,
:root[data-skin="aero"] .tcg__win,
:root[data-skin="aero"] .window.is-dragging {
  position: relative;
  border: 1px solid rgba(86, 150, 190, 0.55);
  border-radius: var(--aero-radius-lg);
  background:
    linear-gradient(180deg,
      rgba(244, 251, 254, 0.62) 0%,
      rgba(223, 241, 250, 0.50) 46%,
      rgba(213, 232, 245, 0.55) 100%);
  -webkit-backdrop-filter: blur(var(--aero-shell-blur, 14px)) saturate(1.6) brightness(1.06);
          backdrop-filter: blur(var(--aero-shell-blur, 14px)) saturate(1.6) brightness(1.06);
  box-shadow:
    inset 0 1px 0 rgba(255, 255, 255, 0.92),
    inset 0 0 0 1px rgba(255, 255, 255, 0.22),
    var(--aero-elev-3);
}
/* .is-dragging must KEEP the base drag transform (translate + scale 1.01) — the
   §3/window.css rule already owns it; re-listing the frame above does not touch
   transform, so the compositor-promoted drag still composes correctly. */
:root[data-skin="aero"] .np__win::before,
:root[data-skin="aero"] .vpv__win::before,
:root[data-skin="aero"] .mte__win::before,
:root[data-skin="aero"] .tcg__win::before,
:root[data-skin="aero"] .window.is-dragging::before {
  content: "";
  position: absolute;
  inset: 0 0 auto 0;
  height: 38%;
  pointer-events: none;
  z-index: 0;
  border-radius: calc(var(--aero-radius-lg) - 1px) calc(var(--aero-radius-lg) - 1px) 0 0;
  background: var(--aero-sweep);
  mix-blend-mode: screen;
}
:root[data-skin="aero"][data-theme="dark"] .np__win,
:root[data-skin="aero"][data-theme="dark"] .vpv__win,
:root[data-skin="aero"][data-theme="dark"] .mte__win,
:root[data-skin="aero"][data-theme="dark"] .tcg__win,
:root[data-skin="aero"][data-theme="dark"] .window.is-dragging {
  border-color: rgba(120, 195, 225, 0.30);
  background:
    linear-gradient(180deg,
      rgba(16, 50, 71, 0.62) 0%, rgba(14, 43, 61, 0.55) 46%, rgba(10, 35, 52, 0.58) 100%);
  -webkit-backdrop-filter: blur(var(--aero-shell-blur, 14px)) saturate(1.5) brightness(0.92);
          backdrop-filter: blur(var(--aero-shell-blur, 14px)) saturate(1.5) brightness(0.92);
  box-shadow:
    inset 0 1px 0 rgba(180, 230, 250, 0.28),
    inset 0 0 0 1px rgba(160, 220, 245, 0.10),
    var(--aero-elev-3);
}
/* keep every real child layer above the sweep (mirrors §16) */
:root[data-skin="aero"] .mte__bar,
:root[data-skin="aero"] .mte__stage,
:root[data-skin="aero"] .mte__x,
:root[data-skin="aero"] .tcg__bar,
:root[data-skin="aero"] .tcg__x { position: relative; z-index: 1; }

/* ---- Reader + gallery TITLE BARS → JOIN the §4 titlebar VERBATIM
   (.np__bar / .vpv__bar / .mte__bar / .tcg__bar). These are the same window
   chrome in a modal frame, so they carry the identical recipe: full-perimeter
   bright rim + the gentle top reflection band. They previously kept the old
   --aero-sweep spotlight and skipped the rim — the audit's "dialogs wear a
   quieter header" drift. .tcg__bar's base gradient runs titlebar-b→a; this
   overrides with the canonical a→b teal glass. ------------------------------ */
:root[data-skin="aero"] .np__bar,
:root[data-skin="aero"] .vpv__bar,
:root[data-skin="aero"] .mte__bar,
:root[data-skin="aero"] .tcg__bar {
  background:
    linear-gradient(180deg,
      rgba(255, 255, 255, 0.50) 0%, rgba(255, 255, 255, 0.12) 46%,
      rgba(255, 255, 255, 0.00) 50%, rgba(255, 255, 255, 0.08) 100%),
    linear-gradient(90deg, rgba(18, 94, 158, 0.92), rgba(90, 180, 236, 0.88));
  border-bottom: 1px solid rgba(10, 58, 96, 0.45);
  box-shadow:
    inset 0 0 0 1px rgba(255, 255, 255, 0.22),
    inset 0 1px 0 rgba(255, 255, 255, 0.55);
  text-shadow: 0 1px 1px rgba(0, 40, 55, 0.45);
}
:root[data-skin="aero"] .np__bar::before,
:root[data-skin="aero"] .vpv__bar::before,
:root[data-skin="aero"] .mte__bar::before,
:root[data-skin="aero"] .tcg__bar::before {
  content: "";
  position: absolute;
  inset: 0;
  pointer-events: none;
  border-radius: inherit;
  background: linear-gradient(180deg,
    rgba(255, 255, 255, 0.22) 0%, rgba(255, 255, 255, 0.06) 42%,
    rgba(255, 255, 255, 0) 62%);
  z-index: -1;
}
/* title TEXT parity with .window__title: semibold, natural case, and the
   dark halo that carries AA over the transmissive glass bar */
:root[data-skin="aero"] .np__title,
:root[data-skin="aero"] .vpv__title,
:root[data-skin="aero"] .mte__title,
:root[data-skin="aero"] .tcg__title {
  text-transform: none;
  letter-spacing: normal;
  font-weight: 600;
  text-shadow:
    0 1px 1px rgba(0, 30, 42, 0.70),
    0 0 4px rgba(0, 26, 38, 0.55);
}
:root[data-skin="aero"][data-theme="dark"] .np__bar,
:root[data-skin="aero"][data-theme="dark"] .vpv__bar,
:root[data-skin="aero"][data-theme="dark"] .mte__bar,
:root[data-skin="aero"][data-theme="dark"] .tcg__bar {
  background:
    linear-gradient(180deg,
      rgba(190,235,255,0.30) 0%, rgba(190,235,255,0.08) 46%,
      rgba(255,255,255,0) 50%, rgba(10,40,60,0.20) 100%),
    linear-gradient(90deg, rgba(14,74,124,0.92), rgba(46,124,180,0.88));
}

/* ---- Reader BODY (.mte__stage) → JOIN the §16 reading-well recipe
   (.np__paper / .vpv__stage): translucent so the frosted frame reads THROUGH it,
   single top→down light falloff, NO own blur. The base .mte__stage is a sunken
   --bevel-in box; this re-casts it as the same lit glass well as every reader. - */
:root[data-skin="aero"] .np__paper,
:root[data-skin="aero"] .vpv__stage,
:root[data-skin="aero"] .mte__stage {
  background:
    linear-gradient(180deg,
      rgba(255, 255, 255, 0.30) 0%, rgba(255, 255, 255, 0.00) 22%),
    linear-gradient(180deg, rgba(251, 253, 255, 0.84) 0%, rgba(236, 246, 254, 0.80) 100%);
  border-radius: var(--aero-radius);
  box-shadow:
    inset 0 1px 0 rgba(255, 255, 255, 0.70),
    inset 0 2px 6px rgba(16, 70, 110, 0.10);
}
:root[data-skin="aero"][data-theme="dark"] .np__paper,
:root[data-skin="aero"][data-theme="dark"] .vpv__stage,
:root[data-skin="aero"][data-theme="dark"] .mte__stage {
  background:
    linear-gradient(180deg,
      rgba(190, 235, 255, 0.10) 0%, rgba(190, 235, 255, 0.00) 22%),
    linear-gradient(180deg, rgba(16,50,71,0.82) 0%, rgba(12,40,58,0.80) 100%);
  box-shadow:
    inset 0 1px 0 rgba(160, 220, 245, 0.16),
    inset 0 2px 6px rgba(0, 12, 22, 0.45);
}

/* R4-8 — the Poetry NOTEPAD is an AUTHENTIC OBJECT: its "paper" stays light warm
   stationery in BOTH themes (the way the corkboard stays cork + the terminal stays
   black), NOT dark teal-glass. So pin the .np__paper opaque-light + the on-paper
   ink dark regardless of theme. The .np__win FRAME keeps its frosted glass (above)
   — frame-only glass, exactly like the board. NB: .vpv__stage / .mte__stage are
   content READERS, not paper, so they're deliberately NOT included here (they keep
   the glass-well treatment). Placed after §32 so it wins on source order. */
:root[data-skin="aero"] .np__paper,
:root[data-skin="aero"][data-theme="dark"] .np__paper {
  background: linear-gradient(180deg, #FBFAF4 0%, #F1EFE4 100%);
  box-shadow:
    inset 0 1px 0 rgba(255, 255, 255, 0.92),
    inset 0 2px 6px rgba(80, 70, 40, 0.12);
}
:root[data-skin="aero"] .np__text,
:root[data-skin="aero"][data-theme="dark"] .np__text { color: #1f2a23; }
:root[data-skin="aero"] .np__attr,
:root[data-skin="aero"][data-theme="dark"] .np__attr { color: #5e6a5c; }

/* ---- Reader + gallery CLOSE pills (.mte__x / .tcg__x) + reader nav chevrons
   (.mte__nav) → JOIN the §16 candy close/nav list (.cdp__btn / .vpv__nav /
   .np__x / .vpv__x): rest gloss + gloss-press :active + the dark sibling, all via
   the --aero-gloss* / --aero-elev-* tokens. The close pills get NO hover bloom
   (matches §16's .np__x/.vpv__x); .mte__nav DOES (it shares the .vpv__nav nav
   idiom incl. the :disabled dim). ------------------------------------------- */
:root[data-skin="aero"] .cdp__btn,
:root[data-skin="aero"] .vpv__nav,
:root[data-skin="aero"] .np__x,
:root[data-skin="aero"] .vpv__x,
:root[data-skin="aero"] .mte__nav,
:root[data-skin="aero"] .mte__x,
:root[data-skin="aero"] .tcg__x {
  border: 1px solid rgba(120, 170, 205, 0.75);
  border-radius: 7px;
  background: var(--aero-gloss), var(--color-surface);
  box-shadow:
    inset 0 1px 0 rgba(255, 255, 255, 0.95),
    inset 0 -6px 8px -6px rgba(255, 255, 255, 0.55),
    inset 0 0 0 1px rgba(255, 255, 255, 0.30),
    var(--aero-elev-1);
  transition: background var(--speed-fast) var(--ease-soft),
              box-shadow var(--speed-fast) var(--ease-soft);
}
:root[data-skin="aero"] .cdp__btn:hover,
:root[data-skin="aero"] .vpv__nav:hover:not(:disabled),
:root[data-skin="aero"] .mte__nav:hover:not(:disabled) {
  background: var(--aero-gloss-hover), var(--color-surface-hover);
  box-shadow:
    inset 0 1px 0 rgba(255, 255, 255, 1),
    inset 0 -7px 9px -6px rgba(255, 255, 255, 0.70),
    inset 0 0 0 1px rgba(255, 255, 255, 0.40),
    var(--aero-elev-2),
    var(--aero-glow-cyan);
}
:root[data-skin="aero"] .cdp__btn:active,
:root[data-skin="aero"] .vpv__nav:active:not(:disabled),
:root[data-skin="aero"] .np__x:active,
:root[data-skin="aero"] .vpv__x:active,
:root[data-skin="aero"] .mte__nav:active:not(:disabled),
:root[data-skin="aero"] .mte__x:active,
:root[data-skin="aero"] .tcg__x:active {
  background: var(--aero-gloss-press), var(--color-surface-sunken);
  box-shadow:
    inset 0 1px 3px rgba(16, 70, 110, 0.34),
    inset 0 -1px 0 rgba(255, 255, 255, 0.45),
    var(--aero-elev-1);
}
:root[data-skin="aero"] .mte__nav:disabled { opacity: 0.3; }
:root[data-skin="aero"][data-theme="dark"] .cdp__btn,
:root[data-skin="aero"][data-theme="dark"] .vpv__nav,
:root[data-skin="aero"][data-theme="dark"] .np__x,
:root[data-skin="aero"][data-theme="dark"] .vpv__x,
:root[data-skin="aero"][data-theme="dark"] .mte__nav,
:root[data-skin="aero"][data-theme="dark"] .mte__x,
:root[data-skin="aero"][data-theme="dark"] .tcg__x {
  border-color: rgba(120, 195, 225, 0.50);
  box-shadow:
    inset 0 1px 0 rgba(180, 230, 250, 0.30),
    inset 0 -6px 8px -6px rgba(180, 230, 250, 0.40),
    inset 0 0 0 1px rgba(180, 230, 250, 0.15),
    var(--aero-elev-1);
}
:root[data-skin="aero"][data-theme="dark"] .cdp__btn:hover,
:root[data-skin="aero"][data-theme="dark"] .vpv__nav:hover:not(:disabled),
:root[data-skin="aero"][data-theme="dark"] .mte__nav:hover:not(:disabled) {
  box-shadow:
    inset 0 1px 0 rgba(190, 235, 255, 0.45),
    inset 0 -7px 9px -6px rgba(190, 235, 255, 0.50),
    inset 0 0 0 1px rgba(190, 235, 255, 0.25),
    var(--aero-elev-2),
    var(--aero-glow-cyan);
}
:root[data-skin="aero"][data-theme="dark"] .cdp__btn:active,
:root[data-skin="aero"][data-theme="dark"] .vpv__nav:active:not(:disabled),
:root[data-skin="aero"][data-theme="dark"] .np__x:active,
:root[data-skin="aero"][data-theme="dark"] .vpv__x:active,
:root[data-skin="aero"][data-theme="dark"] .mte__nav:active:not(:disabled),
:root[data-skin="aero"][data-theme="dark"] .mte__x:active,
:root[data-skin="aero"][data-theme="dark"] .tcg__x:active {
  box-shadow:
    inset 0 1px 3px rgba(0, 12, 22, 0.45),
    inset 0 -1px 0 rgba(180, 230, 250, 0.20),
    var(--aero-elev-1);
}
/* cyan focus ring (overrides base coral) — JOINS the §16 close/nav focus list */
:root[data-skin="aero"] .mte__nav:focus-visible,
:root[data-skin="aero"] .mte__x:focus-visible,
:root[data-skin="aero"] .tcg__x:focus-visible {
  outline: 2px solid var(--aero-focus);
  outline-offset: -2px;
}

/* ---- Taskbar mini-player CONTAINER (.taskbar__player) → JOIN the §6 dark-glass
   .taskbar__item lozenge (the bar is dark glass in BOTH themes, so this is ONE
   rule, no [data-theme] swap — exactly like §6). The whole strip then reads as
   one lit dark-glass instrument instead of a flat Win95 applet. -------------- */
:root[data-skin="aero"] .taskbar__player {
  color: #EAF6FC;
  border: 1px solid rgba(180, 220, 245, 0.45);
  border-radius: var(--aero-radius);
  background:
    linear-gradient(180deg,
      rgba(255, 255, 255, 0.55) 0%, rgba(255, 255, 255, 0.16) 46%,
      rgba(255, 255, 255, 0.00) 50%, rgba(200, 232, 250, 0.10) 100%),
    linear-gradient(180deg,
      rgba(120, 180, 220, 0.30) 0%, rgba(36, 86, 122, 0.42) 100%);
  box-shadow:
    inset 0  1px 0  rgba(255, 255, 255, 0.75),
    inset 0 -6px 9px -6px rgba(150, 210, 245, 0.35),
    0 1px 2px rgba(6, 30, 50, 0.35);
}

/* Transport keys (.taskbar__player-btn) → dark-bar candy on the §6 .taskbar__item
   3-state (rest / hover bloom / pressed sink), so they don't glare bright-white
   §5 candy over the dark bar. Same lozenge in both themes. */
:root[data-skin="aero"] .taskbar__player-btn {
  color: #EAF6FC;
  border: 1px solid rgba(180, 220, 245, 0.45);
  border-radius: var(--aero-radius);
  background:
    linear-gradient(180deg,
      rgba(255, 255, 255, 0.55) 0%, rgba(255, 255, 255, 0.16) 46%,
      rgba(255, 255, 255, 0.00) 50%, rgba(200, 232, 250, 0.10) 100%),
    linear-gradient(180deg,
      rgba(120, 180, 220, 0.30) 0%, rgba(36, 86, 122, 0.42) 100%);
  box-shadow:
    inset 0  1px 0  rgba(255, 255, 255, 0.75),
    inset 0 -6px 9px -6px rgba(150, 210, 245, 0.35),
    0 1px 2px rgba(6, 30, 50, 0.35);
  text-shadow: 0 1px 1px rgba(0, 30, 45, 0.45);
  transition: background var(--speed) var(--ease-soft),
              box-shadow var(--speed) var(--ease-soft);
}
:root[data-skin="aero"] .taskbar__player-btn:hover {
  background:
    linear-gradient(180deg,
      rgba(255, 255, 255, 0.7) 0%, rgba(255, 255, 255, 0.22) 46%,
      rgba(255, 255, 255, 0.02) 50%, rgba(210, 240, 255, 0.16) 100%),
    linear-gradient(180deg,
      rgba(150, 205, 240, 0.40) 0%, rgba(46, 102, 140, 0.50) 100%);
  box-shadow:
    inset 0  1px 0  rgba(255, 255, 255, 0.95),
    inset 0 -7px 10px -6px rgba(170, 225, 250, 0.5),
    0 1px 2px rgba(6, 30, 50, 0.4);
}
:root[data-skin="aero"] .taskbar__player-btn:active {
  background:
    linear-gradient(180deg,
      rgba(255, 255, 255, 0.18) 0%, rgba(180, 218, 242, 0.10) 100%),
    linear-gradient(180deg,
      rgba(30, 72, 104, 0.55) 0%, rgba(20, 52, 78, 0.6) 100%);
  box-shadow:
    inset 0 2px 6px rgba(0, 30, 50, 0.5),
    inset 0 1px 0 rgba(255, 255, 255, 0.25);
}
:root[data-skin="aero"] .taskbar__player-btn:focus-visible {
  outline: 2px solid var(--aero-focus);
  outline-offset: 2px;
}
@media (prefers-reduced-motion: reduce) {
  :root[data-skin="aero"] .taskbar__player-btn { transition: none; }
}
/* Vector transport glyphs (replace the ◄◄ ► ►► text arrows so the mini-player
   matches the §39 CD-player transport). CSS-only: hide the text span, paint a
   currentColor-filled ::before masked to the glyph; the toggle flips play↔pause off
   the existing .taskbar__player.is-playing class (taskbar-player.js sets it). The
   span's textContent still swaps under the hood — harmless, it's hidden. */
:root[data-skin="aero"] .taskbar__player-btn > span { display: none; }
:root[data-skin="aero"] .taskbar__player-btn::before {
  content: "";
  width: 13px;
  height: 13px;
  background: currentColor;
  -webkit-mask-repeat: no-repeat; mask-repeat: no-repeat;
  -webkit-mask-position: center; mask-position: center;
  -webkit-mask-size: contain; mask-size: contain;
  filter: drop-shadow(0 1px 1px rgba(0, 30, 45, 0.4));
}
:root[data-skin="aero"] .taskbar__player-btn[data-mp-act="prev"]::before { -webkit-mask-image: var(--gico-prev); mask-image: var(--gico-prev); }
:root[data-skin="aero"] .taskbar__player-btn[data-mp-act="next"]::before { -webkit-mask-image: var(--gico-next); mask-image: var(--gico-next); }
:root[data-skin="aero"] .taskbar__player-btn[data-mp-act="toggle"]::before { -webkit-mask-image: var(--gico-play); mask-image: var(--gico-play); }
:root[data-skin="aero"] .taskbar__player.is-playing .taskbar__player-btn[data-mp-act="toggle"]::before { -webkit-mask-image: var(--gico-pause); mask-image: var(--gico-pause); }

/* "Now playing" LCD (.taskbar__player-lcd) → JOIN the §15 dark-glass clock bezel
   (.taskbar__clock / .hit-counter): same frosted bezel, readout LEFT period-green
   (color:var(--color-success) untouched — softening to cyan is a taste call,
   flagged for Elisha). The base :hover/:focus brightness ride is kept. */
:root[data-skin="aero"] .taskbar__clock,
:root[data-skin="aero"] .hit-counter,
:root[data-skin="aero"] .taskbar__player-lcd {
  background: rgba(6, 26, 40, 0.55);
  border: 1px solid rgba(150, 210, 240, 0.35);
  border-radius: 6px;
  box-shadow:
    inset 0 1px 0 rgba(180, 225, 250, 0.30),
    inset 0 -2px 5px rgba(0, 0, 0, 0.40),
    0 1px 2px rgba(0, 0, 0, 0.30);
  -webkit-backdrop-filter: blur(4px);
          backdrop-filter: blur(4px);
}

/* R4-5 — SYSTRAY de-Win95. The clock + visitor counter read as a green-phosphor
   LED in a black box (Win95). Win7's systray is plain light Segoe text sitting on
   the glass bar — no box, no LED, no mono. Override (later than §15/§32 so it wins)
   the clock + hit-counter ONLY. (The now-playing .taskbar__player-lcd kept its
   green device readout here until 2026-07-07 — Elisha's LCD-dialect decision
   unifies it on the §39 cool-teal recessed recipe; see the block at file end.) */
:root[data-skin="aero"] .taskbar__clock,
:root[data-skin="aero"] .hit-counter {
  background: none;
  border: none;
  border-radius: 0;
  box-shadow: none;
  -webkit-backdrop-filter: none;
          backdrop-filter: none;
  font-family: var(--font-body);
  color: #EAF6FC;
}
:root[data-skin="aero"] .taskbar__clock {
  font-size: var(--text-xs);
  letter-spacing: normal;
  font-variant-numeric: tabular-nums;
  /* the subtle Win7 systray text emboss + a dark seat for legibility on the bar */
  text-shadow: 0.7px 0 0 rgba(255, 255, 255, 0.22), -0.7px 0 0 rgba(255, 255, 255, 0.22),
               0 1px 1px rgba(0, 20, 34, 0.55);
}
:root[data-skin="aero"] .hit-counter__label {
  color: rgba(210, 235, 248, 0.80);
  font-family: var(--font-body);
  font-size: 11px;
  letter-spacing: 0.2px;
  text-transform: none;
  text-shadow: none;
}
:root[data-skin="aero"] .hit-counter__digits {
  font-family: var(--font-body);
  color: #F2FBFF;
  font-size: var(--text-xs);
  letter-spacing: normal;
  font-variant-numeric: tabular-nums;
  text-shadow: 0.7px 0 0 rgba(255, 255, 255, 0.22), -0.7px 0 0 rgba(255, 255, 255, 0.22),
               0 1px 1px rgba(0, 20, 34, 0.55);
}
:root[data-skin="aero"] .hit-counter__digits.is-rolling {
  color: #C2F2FF;
  text-shadow: 0 0 6px rgba(140, 225, 255, 0.55);
}

/* ---- Settings radio segments (.tweaks-radio > button) + Art switch chips
   (.art-switch__chip) → JOIN the §16 candy 3-state list (rest/hover/active/dark)
   and the §16 teal-active idiom (mirrors .board__tab.is-active). -------------- */
:root[data-skin="aero"] .board__tab,
:root[data-skin="aero"] .cdp__albumtab,
:root[data-skin="aero"] .tweaks-radio > button,
:root[data-skin="aero"] .art-switch__chip {
  border: 1px solid rgba(120, 170, 205, 0.75);
  border-radius: var(--aero-radius);
  background: var(--aero-gloss), var(--color-surface);
  box-shadow:
    inset 0 1px 0 rgba(255, 255, 255, 0.95),
    inset 0 -6px 8px -6px rgba(255, 255, 255, 0.55),
    var(--aero-elev-1);
  transition: background var(--speed-fast) var(--ease-soft),
              box-shadow var(--speed-fast) var(--ease-soft);
}
:root[data-skin="aero"] .board__tab:hover:not(.is-active),
:root[data-skin="aero"] .cdp__albumtab:hover:not(.is-active),
:root[data-skin="aero"] .tweaks-radio > button:hover:not(.is-active),
:root[data-skin="aero"] .art-switch__chip:hover:not(.is-active) {
  background: var(--aero-gloss-hover), var(--color-surface-hover);
  box-shadow:
    inset 0 1px 0 rgba(255, 255, 255, 1),
    inset 0 -7px 9px -6px rgba(255, 255, 255, 0.70),
    var(--aero-elev-2),
    var(--aero-glow-cyan);
}
:root[data-skin="aero"] .tweaks-radio > button:active:not(.is-active),
:root[data-skin="aero"] .art-switch__chip:active:not(.is-active),
:root[data-skin="aero"] .board__tab:active:not(.is-active),
:root[data-skin="aero"] .cdp__albumtab:active:not(.is-active) {
  background: var(--aero-gloss-press), var(--color-surface-sunken);
  box-shadow:
    inset 0 1px 3px rgba(16, 70, 110, 0.34),
    inset 0 -1px 0 rgba(255, 255, 255, 0.45),
    var(--aero-elev-1);
}
:root[data-skin="aero"] .tweaks-radio > button.is-active,
:root[data-skin="aero"] .art-switch__chip.is-active {
  color: #fff;
  border-color: rgba(8, 96, 118, 0.55);
  background: var(--aero-teal-gloss), var(--aero-sky-base);
  box-shadow:
    inset 0 1px 0 rgba(255, 255, 255, 0.70),
    var(--aero-elev-1);
  text-shadow: 0 1px 1px rgba(0, 42, 56, 0.42);
}
:root[data-skin="aero"] .tweaks-radio > button:focus-visible,
:root[data-skin="aero"] .art-switch__chip:focus-visible {
  outline: 2px solid var(--aero-focus);
  outline-offset: 2px;
}
/* R4-11 — the Settings segmented control read as 3 floating candy chips because
   each button carried the shared 8px radius while the base overlaps them by -2px.
   Square the interior joins + round only the outer ends → ONE joined Aqua/Win7
   segmented control; lift the active segment so its teal border sits over its
   neighbours. Scoped to .tweaks-radio (board/album/art-switch chips keep radius). */
:root[data-skin="aero"] .tweaks-radio > button { border-radius: 0; }
:root[data-skin="aero"] .tweaks-radio > button:first-child {
  border-radius: var(--aero-radius) 0 0 var(--aero-radius);
}
:root[data-skin="aero"] .tweaks-radio > button:last-child {
  border-radius: 0 var(--aero-radius) var(--aero-radius) 0;
}
:root[data-skin="aero"] .tweaks-radio > button.is-active {
  position: relative;
  z-index: 1;
}
:root[data-skin="aero"][data-theme="dark"] .board__tab,
:root[data-skin="aero"][data-theme="dark"] .cdp__albumtab,
:root[data-skin="aero"][data-theme="dark"] .tweaks-radio > button,
:root[data-skin="aero"][data-theme="dark"] .art-switch__chip {
  border-color: rgba(120, 195, 225, 0.50);
  box-shadow:
    inset 0 1px 0 rgba(180, 230, 250, 0.30),
    inset 0 -6px 8px -6px rgba(180, 230, 250, 0.40),
    var(--aero-elev-1);
}
:root[data-skin="aero"][data-theme="dark"] .board__tab:hover:not(.is-active),
:root[data-skin="aero"][data-theme="dark"] .cdp__albumtab:hover:not(.is-active),
:root[data-skin="aero"][data-theme="dark"] .tweaks-radio > button:hover:not(.is-active),
:root[data-skin="aero"][data-theme="dark"] .art-switch__chip:hover:not(.is-active) {
  box-shadow:
    inset 0 1px 0 rgba(190, 235, 255, 0.45),
    inset 0 -7px 9px -6px rgba(190, 235, 255, 0.50),
    var(--aero-elev-2),
    var(--aero-glow-cyan);
}
/* dark .is-active sibling (the brief asked for it explicitly; the --aero-teal-*
   fill is theme-stable so only the border/text-shadow seam is re-stated, mirroring
   how §18 .tc-row--featured handles its dark .is-active). */
:root[data-skin="aero"][data-theme="dark"] .tweaks-radio > button.is-active,
:root[data-skin="aero"][data-theme="dark"] .art-switch__chip.is-active {
  border-color: rgba(120, 195, 225, 0.55);
  text-shadow: 0 1px 1px rgba(0, 20, 32, 0.50);
}

/* ---- Art status strip (.art-status) → JOIN the §17 glass-blue WELL
   (.fav__bar / .explorer__bar / .folder): gloss + the inset-white top sheen that
   keeps it from reading as a dead inset rectangle (notBeautiful #3) + the well's
   inset depth. Base .art-status is a sunken --bevel-in box. -------------------- */
:root[data-skin="aero"] .fav__bar,
:root[data-skin="aero"] .explorer__bar,
:root[data-skin="aero"] .folder,
:root[data-skin="aero"] .tc-addr,
:root[data-skin="aero"] .art-status {
  border: 1px solid rgba(120, 175, 210, 0.45);
  border-radius: var(--aero-radius);
  background: rgba(120, 180, 210, 0.14);
  box-shadow:
    inset 0 1px 0 rgba(255, 255, 255, 0.55),
    inset 0 1px 4px rgba(16, 70, 110, 0.14);
}
:root[data-skin="aero"][data-theme="dark"] .fav__bar,
:root[data-skin="aero"][data-theme="dark"] .explorer__bar,
:root[data-skin="aero"][data-theme="dark"] .folder,
:root[data-skin="aero"][data-theme="dark"] .tc-addr,
:root[data-skin="aero"][data-theme="dark"] .art-status {
  border-color: rgba(120, 195, 225, 0.28);
  background: rgba(8, 30, 46, 0.40);
  box-shadow:
    inset 0 1px 0 rgba(160, 220, 245, 0.14),
    inset 0 1px 4px rgba(0, 12, 22, 0.45);
}

/* ---- Art file-list dropdown (.fl-menu__pop) → JOIN the §19 systray frosted
   panel (a standalone position:absolute popup = its own stacking context, so it
   legitimately owns the ONE blur here, like §7/.start-menu). Its rows JOIN the
   §7 .start-menu__item teal hover row (no re-typed #5BD0E2…#0E8197 gradient). -- */
:root[data-skin="aero"] .systray__flyout,
:root[data-skin="aero"] .fl-menu__pop {
  isolation: isolate;
  border: 1px solid rgba(255, 255, 255, 0.65);
  border-radius: var(--aero-radius-lg);
  background-color: rgba(228, 244, 254, 0.62);
  background-image:
    radial-gradient(125% 70% at 50% -22%,
      rgba(255,255,255,0.95) 0%, rgba(255,255,255,0.55) 18%,
      rgba(255,255,255,0.12) 38%, rgba(255,255,255,0) 52%),
    linear-gradient(180deg,
      rgba(244,251,254,0.55) 0%, rgba(223,241,250,0.30) 30%,
      rgba(206,232,250,0.18) 60%, rgba(196,228,248,0.34) 100%);
  background-repeat: no-repeat;
  -webkit-backdrop-filter: blur(var(--aero-shell-blur, 14px)) saturate(1.55) brightness(1.06);
          backdrop-filter: blur(var(--aero-shell-blur, 14px)) saturate(1.55) brightness(1.06);
  box-shadow:
    inset 0 1px 0 0 rgba(255,255,255,0.92),
    inset 0 0 0 1px rgba(255,255,255,0.28),
    inset 0 -10px 16px -10px rgba(12,70,110,0.20),
    var(--aero-elev-3),
    var(--aero-elev-1);
}
:root[data-skin="aero"] .systray__flyout::before,
:root[data-skin="aero"] .fl-menu__pop::before {
  content: "";
  position: absolute;
  left: 1px; right: 1px; top: 1px;
  height: 42%;
  z-index: -1;
  pointer-events: none;
  border-radius: calc(var(--aero-radius-lg) - 1px) calc(var(--aero-radius-lg) - 1px) 0 0;
  background: radial-gradient(140% 90% at 50% -34%,
    rgba(255,255,255,0.85) 0%, rgba(255,255,255,0.40) 30%,
    rgba(255,255,255,0.10) 55%, rgba(255,255,255,0) 72%);
}
:root[data-skin="aero"][data-theme="dark"] .systray__flyout,
:root[data-skin="aero"][data-theme="dark"] .fl-menu__pop {
  border-color: rgba(120, 195, 225, 0.30);
  background-color: rgba(16, 50, 71, 0.62);
  background-image:
    radial-gradient(125% 70% at 50% -22%,
      rgba(190,235,255,0.40) 0%, rgba(190,235,255,0.16) 18%,
      rgba(190,235,255,0.04) 38%, rgba(190,235,255,0) 52%),
    linear-gradient(180deg,
      rgba(16,50,71,0.55) 0%, rgba(14,43,61,0.30) 30%,
      rgba(10,35,52,0.18) 60%, rgba(8,28,42,0.34) 100%);
  -webkit-backdrop-filter: blur(var(--aero-shell-blur, 14px)) saturate(1.5) brightness(0.92);
          backdrop-filter: blur(var(--aero-shell-blur, 14px)) saturate(1.5) brightness(0.92);
  box-shadow:
    inset 0 1px 0 0 rgba(180, 230, 250, 0.28),
    inset 0 0 0 1px rgba(160, 220, 245, 0.10),
    inset 0 -10px 16px -10px rgba(0,12,22,0.30),
    var(--aero-elev-3),
    var(--aero-elev-1);
}
:root[data-skin="aero"][data-theme="dark"] .systray__flyout::before,
:root[data-skin="aero"][data-theme="dark"] .fl-menu__pop::before {
  background: radial-gradient(140% 90% at 50% -34%,
    rgba(190,235,255,0.30) 0%, rgba(190,235,255,0.16) 30%,
    rgba(190,235,255,0) 55%);
}
/* Dropdown rows → JOIN the §7 .start-menu__item teal candy hover/focus row. */
:root[data-skin="aero"] .start-menu__item:hover,
:root[data-skin="aero"] .start-menu__item:focus-visible,
:root[data-skin="aero"] .start-menu__item[aria-expanded="true"],
:root[data-skin="aero"] .fl-menu__pop button:hover:not([disabled]),
:root[data-skin="aero"] .fl-menu__pop button:focus-visible {
  color: #fff;
  border-color: rgba(8,96,118,0.55);
  background-image:
    linear-gradient(180deg,
      rgba(255,255,255,0.70) 0%, rgba(255,255,255,0.34) 8%,
      rgba(255,255,255,0.08) 46%, rgba(255,255,255,0) 50%),
    linear-gradient(180deg, #5BD0E2 0%, #34BBD0 49%, #1597AD 50%, #0E8197 100%);
  box-shadow:
    inset 0 1px 0 rgba(255,255,255,0.85),
    inset 0 -7px 9px -6px rgba(120,235,255,0.50),
    inset 0 0 0 1px rgba(255,255,255,0.18),
    0 1px 2px rgba(8,60,84,0.30);
  text-shadow: 0 1px 1px rgba(0,42,56,0.42);
  outline: none;
}
@media (max-width: 520px) {
  :root[data-skin="aero"] .fl-menu__pop::before { display: none; }
}
/* ============================================================================
   21. MOBILE — Cascadia Aero stacked-mode fidelity (the windowing gate's
       negation: width OR height OR portrait — matches mobile.css)
   ----------------------------------------------------------------------------
   Token-driven, dark-sibling-FREE-by-construction (every fill is color-mix on a
   theme token or an --aero-* token, so §1/§1b/prefers-dark resolve the dark case
   automatically — no hand-copied dark block, no drift).
     A) Attention bottom sheet -> the frosted-glass SHEET (its own stacking
        context, so it carries the ONE blur here). Backdrop stays a FLAT tinted
        scrim (no second backdrop-filter — perf).
     B) Candy-pill close button (.attn__detail-close): §5 gloss stack + cyan
        --aero-focus + a >=44px hit pseudo. Carries NO blur (lives inside the
        already-blurred sheet — principle 3).
     C) Perf blur trims: taskbar 20px->12px, window/dialog 18px->10px, start menu
        18px->10px, sheet ~12px; window ::before sweep 38%->28%. Per-theme
        brightness preserved (dark windows stay 0.92, never milky 1.04).
   DOES NOT touch .taskbar position/bottom -> the iOS --vv-inset-bottom pin (mobile
   taskbar script, PR #206) is untouched.
   ============================================================================ */

@media (max-width: 61.99em), (max-height: 35.99em), (orientation: portrait) {

  /* --- Mobile blur tokens: per-theme so dark keeps its own brightness. The
     light scope sets the daylight values; the dark + system-dark scopes below
     re-point them so a dark window never jumps to brightness(1.04). --- */
  :root[data-skin="aero"] {
    --aero-tb-blur-m:    blur(12px) saturate(1.5) brightness(1.04);
    --aero-win-blur-m:   blur(10px) saturate(1.5) brightness(1.04);
    --aero-sheet-blur-m: blur(12px) saturate(1.45) brightness(1.05);
  }
  :root[data-skin="aero"][data-theme="dark"] {
    --aero-tb-blur-m:    blur(12px) saturate(1.45) brightness(1.0);
    --aero-win-blur-m:   blur(10px) saturate(1.45) brightness(0.92);
    --aero-sheet-blur-m: blur(12px) saturate(1.4)  brightness(0.94);
  }

  /* ---- A) Attention detail -> frosted-glass bottom sheet ------------------- */
  /* Fill = the theme surface token at ~92% opacity (color-mix -> auto dark; bumped
     above the §3 window's 0.62 so body text on the sheet stays legible). The ONE
     blur for this stacking context rides here; the sweep is the shared --aero-sweep. */
  :root[data-skin="aero"] .attn__detail {
    border-top: none;
    border-radius: var(--aero-radius-lg) var(--aero-radius-lg) 0 0;
    /* Progressive enhancement: opaque fallback first so a pre-color-mix browser
       (Safari <16.2) still gets a readable sheet; modern browsers override with the
       translucent color-mix below. The only color-mix() in the skin. */
    background: var(--color-surface);
    background: color-mix(in srgb, var(--color-surface) 92%, transparent);
    -webkit-backdrop-filter: var(--aero-sheet-blur-m);
            backdrop-filter: var(--aero-sheet-blur-m);
    box-shadow:
      inset 0 1px 0 var(--bevel-light),               /* top specular line */
      inset 0 0 0 1px rgba(255, 255, 255, 0.10),       /* 1px translucent rim */
      0 -14px 38px rgba(16, 70, 110, 0.28),
      var(--aero-elev-2);
  }
  /* Specular gloss sweep on the top band (shared sweep token -> auto dark). */
  :root[data-skin="aero"] .attn__detail::before {
    content: "";
    position: absolute;
    inset: 0 0 auto 0;
    height: 30%;
    pointer-events: none;
    z-index: 0;
    border-radius: var(--aero-radius-lg) var(--aero-radius-lg) 0 0;
    background: var(--aero-sweep);
  }
  /* Content + close sit ABOVE the sweep. NB: neither carries backdrop-filter —
     they live inside the already-blurred sheet (principle 3: one blur / context). */
  :root[data-skin="aero"] .attn__detail-content { position: relative; z-index: 1; }

  /* ---- B) Close button -> candy pill (mirrors §5 .btn token stack) --------- */
  :root[data-skin="aero"] .attn__detail-close {
    position: relative;
    z-index: 2;
    border: 1px solid rgba(120, 170, 205, 0.85);   /* crisper rim so it doesn't dissolve into the gloss */
    border-radius: var(--aero-radius);
    background: var(--aero-gloss), var(--color-surface);
    box-shadow:
      inset 0 1px 0 rgba(255, 255, 255, 0.95),
      inset 0 -6px 8px -6px rgba(255, 255, 255, 0.55),
      inset 0 0 0 1px rgba(255, 255, 255, 0.30),
      var(--aero-elev-1);
    color: var(--color-text);
    transition: background var(--speed-fast) var(--ease-soft),
                box-shadow var(--speed-fast) var(--ease-soft);
  }
  /* Touch target: the visible pill is 30x28px; this invisible pseudo grows the
     hit area to ~48x46px (>=44px, mirrors the §3 window__btn -13px precedent). */
  :root[data-skin="aero"] .attn__detail-close::before {
    content: "";
    position: absolute;
    inset: -9px -8px;
  }
  :root[data-skin="aero"][data-theme="dark"] .attn__detail-close {
    border-color: rgba(120, 195, 225, 0.55);
  }
  :root[data-skin="aero"] .attn__detail-close:hover {
    background: var(--aero-gloss-hover), var(--color-surface-hover);
    box-shadow:
      inset 0 1px 0 rgba(255, 255, 255, 1),
      inset 0 -7px 9px -6px rgba(255, 255, 255, 0.70),
      inset 0 0 0 1px rgba(255, 255, 255, 0.40),
      var(--aero-elev-2),
      var(--aero-glow-cyan);
  }
  :root[data-skin="aero"] .attn__detail-close:active {
    background: var(--aero-gloss-press), var(--color-surface-sunken);
    box-shadow:
      inset 0 1px 3px rgba(16, 70, 110, 0.34),
      inset 0 -1px 0 rgba(255, 255, 255, 0.45),
      var(--aero-elev-1);
  }
  :root[data-skin="aero"] .attn__detail-close:focus-visible {
    outline: 2px solid var(--aero-focus);
    outline-offset: 2px;
  }

  /* ---- Backdrop -> FLAT tinted glass scrim (NO backdrop-filter: the sheet owns
     the only blur; a full-viewport second blur janks scroll on a narrow GPU). The
     teal tint over the base ink reads as glass without the compositor cost. ---- */
  :root[data-skin="aero"] .attn__backdrop {
    background:
      linear-gradient(180deg,
        rgba(15, 80, 110, 0.22) 0%, rgba(5, 40, 65, 0.30) 100%),
      rgba(5, 13, 24, 0.42);
  }
  :root[data-skin="aero"][data-theme="dark"] .attn__backdrop {
    background:
      linear-gradient(180deg,
        rgba(20, 60, 90, 0.30) 0%, rgba(10, 30, 50, 0.40) 100%),
      rgba(2, 10, 20, 0.48);
  }

  /* ---- C) Perf blur trims (override the desktop §3/§6/§7 props at mobile width;
     desktop rules untouched). Tokens above carry the per-theme brightness. ---- */
  :root[data-skin="aero"] .taskbar {
    -webkit-backdrop-filter: var(--aero-tb-blur-m);
            backdrop-filter: var(--aero-tb-blur-m);
  }
  :root[data-skin="aero"] .window,
  :root[data-skin="aero"] .os-dialog {
    -webkit-backdrop-filter: var(--aero-win-blur-m);
            backdrop-filter: var(--aero-win-blur-m);
  }
  /* Trim the §3 specular sweep height so narrow text stays crisp + scroll doesn't
     jank. 38% -> 28%. (Token-free: it's a geometry override, not a colour.) */
  :root[data-skin="aero"] .window::before,
  :root[data-skin="aero"] .os-dialog::before {
    height: 28%;
  }
  :root[data-skin="aero"] .start-menu {
    -webkit-backdrop-filter: blur(10px) saturate(1.5) brightness(1.05);
            backdrop-filter: blur(10px) saturate(1.5) brightness(1.05);
  }

  /* ---- Coverage: mobile-collapse summary uses the base coral focus ring; swap
     it to the one cyan --aero-focus idiom so the disclosure matches every other
     aero control. (The summary row itself has no flat-Win95 surface to skin.) ---- */
  :root[data-skin="aero"] .m-collapse > summary:focus-visible {
    outline: 2px solid var(--aero-focus);
    outline-offset: -2px;
  }
}

/* Reduced-motion: the sheet slide is driven by mobile.css; quiet the candy
   gloss/shadow transitions added here so they don't animate either. */
@media ((max-width: 61.99em) or (max-height: 35.99em) or (orientation: portrait)) and (prefers-reduced-motion: reduce) {
  :root[data-skin="aero"] .attn__detail,
  :root[data-skin="aero"] .attn__detail-close { transition: none; }
}
/* ============================================================================
   §22. FINAL CLEANUP — last flat surfaces + dark-sibling precision audit
   (Cascadia Aero — Daylight + Nightfall)
   Append-only overrides EXCEPT the two surgical edits flagged inline (§4 + §18).
   ============================================================================ */

/* ============================================================
   1. DARK-SIBLING PRECISION AUDIT (§16-§21)
   Net result WITHIN §16-§21: 0 hardcoded-light-fill blowouts (every light
   surface already carries a [data-theme="dark"] sibling or a theme-resolving
   token). The one genuine light-fill-without-dark-sibling blowout found lives
   in §7 (.start-menu__submenu, OUTSIDE the requested range) — fixed below and
   labelled honestly. The .tcg__stage malformation (§18) is a surgical clean,
   not a sibling. See darkSiblingAudit field for the full per-rule pass.
   ============================================================ */

/* FIX A (out-of-range catch, §7 ~line 1150): .start-menu__submenu — frosted
   panel with background-color rgba(228,244,254,0.62) + a rgba(255,255,255,0.95)
   radial gloss and NO dark sibling, no theme token. Blows white-hot in dark.
   Add the dark twin (mirrors the §3 dark window recipe). */
:root[data-skin="aero"][data-theme="dark"] .start-menu__submenu {
  border-color: rgba(120, 195, 225, 0.30);
  background-color: rgba(16, 50, 71, 0.62);
  background-image:
    radial-gradient(125% 70% at 50% -22%,
      rgba(190,235,255,0.40) 0%, rgba(190,235,255,0.16) 18%,
      rgba(190,235,255,0.04) 38%, rgba(190,235,255,0) 52%),
    linear-gradient(180deg, rgba(16,50,71,0.50) 0%, rgba(10,35,52,0.25) 100%);
  box-shadow:
    inset 0 1px 0 rgba(160, 220, 245, 0.28),
    inset 0 0 0 1px rgba(160, 220, 245, 0.10),
    var(--aero-elev-3);
}

/* ============================================================
   2. CONTRAST — .kind--book  →  dark ink in AERO (see the override at the §14 .kind
   block). In RETRO/base the book tint is terracotta #C8451A and white #FFF passes
   (4.86:1) — base keeps white. But the AERO skin overrides --tint-book to lake-blue
   #2C6FA8 AND adds the §14 white gloss film, which lightens the chip's upper glyph
   band so white ink dips below AA (~2.7-3.2:1) there. The shipped fix gives Aero book
   the same dark ink (#050D18) base already uses for the light game/album tints — see
   `:root[data-skin="aero"] .kind--book` near the §14 chip block. (film #6B4FA0 / show
   #0F6F8F stay white: dark enough to keep white legible under the gloss.)
   ============================================================ */

/* ============================================================
   3. CONTRAST — .window__titlebar  (worst case = the BRIGHT gradient end)
   The titlebar is a 90deg teal gradient; the title text spans full width, so
   the worst case is the LIGHTEST teal, not the dark anchor. Cap BOTH ends dark
   enough that the brightest pixel (plus the white sheen lift) still clears AA.
   Surgical-style override of the BASE active selector (line 391) + the DARK
   sibling (line 432). No '.is-active' selector exists in the base file, so the
   bare selector below IS the active titlebar; inactive is untouched.
   ------------------------------------------------------------ */
/* REAL glass (2026-06-25, Elisha): drop the near-opaque teal so the window's
   own backdrop-filter shows THROUGH the bar — you now read the blurred wallpaper
   tint behind the titlebar, like an actual Aero/Aqua frame. The white title can
   no longer rely on a solid dark fill for AA (the backdrop is wallpaper-variable),
   so legibility moves to a dark text-halo on .window__title (§4) plus a left-dense
   tint where the title actually sits. Light from the right reads as the glassier
   (more transmissive) end toward the controls. */
:root[data-skin="aero"] .window__titlebar,
:root[data-skin="aero"] .os-dialog__bar {
  background:
    linear-gradient(180deg,
      rgba(255, 255, 255, 0.30) 0%, rgba(255, 255, 255, 0.08) 44%,
      rgba(255, 255, 255, 0.00) 52%, rgba(255, 255, 255, 0.12) 100%),
    linear-gradient(90deg, rgba(9, 86, 99, 0.70) 0%, rgba(16, 120, 136, 0.50) 100%);
  border-bottom: 1px solid rgba(6, 60, 78, 0.50);
}
/* DARK titlebar — same idea; the night backdrop is already dim so it stays legible
   at a lower tint, but keep the left end denser behind the EAFBFF title. */
:root[data-skin="aero"][data-theme="dark"] .window__titlebar,
:root[data-skin="aero"][data-theme="dark"] .os-dialog__bar {
  background:
    linear-gradient(180deg,
      rgba(190,235,255,0.26) 0%, rgba(190,235,255,0.07) 46%,
      rgba(255,255,255,0) 50%, rgba(10,40,60,0.22) 100%),
    linear-gradient(90deg, rgba(8, 74, 87, 0.72) 0%, rgba(14, 104, 120, 0.52) 100%);
}

/* ============================================================
   4. SURGICAL EDIT (§18, lines 2421-2434) — .tcg__stage → one clean block
   The original is malformed: .tcg__stage is grouped INTO the dark
   .cdp__tracks/.filelist__rows selector (themeless, so it leaks into both
   themes — which happens to be correct for the stage but wrong intent), then
   re-declared a second time just to add a border. Append-only canNOT remove the
   stray grouping, so this MUST be a surgical §18 edit.

   REPLACE lines 2425-2434 with the single themeless block below
   (the stage is intrinsically dark #0E1A22 in BOTH themes, so themeless — NOT
   [data-theme="dark"] — is correct; remove .tcg__stage from the dark group):

     :root[data-skin="aero"][data-theme="dark"] .cdp__tracks,
     :root[data-skin="aero"][data-theme="dark"] .filelist__rows {
       border-color: rgba(120, 195, 225, 0.28);
       background: rgba(8, 30, 46, 0.40);
       box-shadow: inset 0 1px 4px rgba(0, 12, 22, 0.45);
     }
     :root[data-skin="aero"] .tcg__stage {            /* themeless: dark in both */
       border: 1px solid rgba(120, 195, 225, 0.28);
       background: rgba(8, 30, 46, 0.40);
       box-shadow: inset 0 1px 4px rgba(0, 12, 22, 0.45);
     }

   If a no-touch path is required, the §22 override below restates the clean
   themeless rule (later source order wins) — but the stray .tcg__stage in the
   2425 group then lingers as dead-but-harmless CSS, so the surgical edit is
   preferred. */
:root[data-skin="aero"] .tcg__stage {
  border: 1px solid rgba(120, 195, 225, 0.28);
  background: rgba(8, 30, 46, 0.40);
  box-shadow: inset 0 1px 4px rgba(0, 12, 22, 0.45);
}

/* ============================================================
   5. DRY-COLLAPSE (§18 .tc-addr / .tc-row / .tc-chip) — LEAVE AS-IS
   These re-list the §16/§17/§14 well/panel/chip recipes verbatim and JOIN them
   via grouped selectors. The file's own DRY note (lines 2045-2055) already
   declares this intentional + byte-identical (the later §18 copy wins with the
   same values, so the earlier copy is harmless). Append-only is the documented
   house style here. No action. (To single-source instead: delete each §18
   re-listed selector and add it to the original §14/§16/§17 grouped selector —
   renders identical; not done, per the standing DRY note.)

   Same stance covers the SUPERSEDED @keyframes (aero-minimize-bloom and
   aero-start-menu-bloom each keep their original §19 copy plus a later
   re-definition that wins): CSS uses the LAST definition, so the earlier §19
   copies are inert, and windows.js references only the NAME (which persists).
   Knowingly left per append-only. An automated audit
   (workflow w0xs3j39q) re-flagged BOTH these and the well-block dup for deletion;
   the answer is "see this decision" — not a bug, do not re-litigate.
   ============================================================ */

/* ============================================================
   6. LAST FLAT SURFACES
   ============================================================ */

/* A) .attn__detail — DESKTOP sticky/detail bar (NOT the mobile sheet).
   The existing aero .attn__detail sheet rule lives inside the §21
   stacked-mode block, so this top-level rule skins the desktop bar with no
   collision (the sheet still overrides in stacked mode). Frosted glass well,
   reusing the §17 light-well recipe + --aero-elev. No new backdrop-filter (it
   lives inside the already-blurred .window frame — principle 3). */
:root[data-skin="aero"] .attn__detail {
  border: 1px solid rgba(120, 175, 210, 0.60);
  /* Near-opaque frosted WELL (was 0.34-0.48 = the list bled straight through —
     Elisha: "transparency a little hefty / too exaggerative"). Now ~0.92 fill +
     its OWN backdrop-filter, so content scrolls UNDER as a soft frost, not a
     legible bleed. The bar is position:sticky inside the already-blurred .window,
     but its blur targets the IN-WINDOW list behind it (the mobile sheet at L3445
     does the same — nesting is fine + supported). Top gloss highlight retained. */
  background:
    linear-gradient(180deg,
      rgba(255, 255, 255, 0.42) 0%, rgba(255, 255, 255, 0.00) 26%),
    linear-gradient(180deg,
      rgba(247, 252, 255, 0.93) 0%, rgba(231, 244, 251, 0.91) 100%);
  -webkit-backdrop-filter: blur(10px) saturate(1.4) brightness(1.04);
          backdrop-filter: blur(10px) saturate(1.4) brightness(1.04);
  box-shadow:
    inset 0 1px 0 rgba(255, 255, 255, 0.85),
    inset 0 0 0 1px rgba(255, 255, 255, 0.18),
    0 -8px 20px rgba(16, 70, 110, 0.12),   /* soft lift: reads as a shelf above the list */
    var(--aero-elev-1);
}
:root[data-skin="aero"][data-theme="dark"] .attn__detail {
  border-color: rgba(120, 195, 225, 0.30);
  background:
    linear-gradient(180deg,
      rgba(120, 200, 235, 0.12) 0%, rgba(120, 200, 235, 0.00) 26%),
    linear-gradient(180deg,
      rgba(19, 55, 77, 0.93) 0%, rgba(13, 42, 60, 0.91) 100%);
  -webkit-backdrop-filter: blur(10px) saturate(1.3) brightness(0.95);
          backdrop-filter: blur(10px) saturate(1.3) brightness(0.95);
  box-shadow:
    inset 0 1px 0 rgba(160, 220, 245, 0.20),
    inset 0 0 0 1px rgba(160, 220, 245, 0.08),
    0 -8px 20px rgba(0, 14, 26, 0.30),
    var(--aero-elev-2);
}

/* B) .project-tile:active — gloss-press invert. §10 skins .project-tile but has
   no :active, and the base :active (components.css:580) is a flat sunken bevel.
   Fill the gap with the §5 candy-press recipe (--aero-gloss-press resolves per
   theme, so a single rule covers light AND dark — but an explicit dark rule is
   added for the press shadow ink). */
:root[data-skin="aero"] .project-tile:active {
  background: var(--aero-gloss-press), var(--color-surface-sunken);
  box-shadow:
    inset 0 1px 3px rgba(16, 70, 110, 0.34),
    inset 0 -1px 0 rgba(255, 255, 255, 0.45),
    var(--aero-elev-1);
}
:root[data-skin="aero"][data-theme="dark"] .project-tile:active {
  box-shadow:
    inset 0 1px 3px rgba(0, 12, 22, 0.45),
    inset 0 -1px 0 rgba(180, 230, 250, 0.20),
    var(--aero-elev-1);
}

/* ════════════════════════════════════════════════════════════════════════════
   §23 — HOLISTIC-AUDIT FIXES (append-only; all :root[data-skin="aero"] scoped)
   From the whole-file adversarial audit (workflow w512crwbg). ONLY the objective,
   empirically-verified fixes are applied here: three genuine DARK-THEME blowouts
   (light fill + no dark sibling, confirmed in source + live render) plus one
   low-risk motion-settle. Every VISIBLE / signature change the audit proposed
   (window-glass sweep tokenization, page-title meniscus, btn hover-glow, the
   LCD-green a11y recolor, the elevation-scale collapse, the radius tokenizations,
   the 7 beauty taste-calls) is HELD for Elisha — see docs/aero-redesign-loop.md
   "Decisions to surface". The skeptic rejected 5 phantom fixes (taskbar-glow hue
   flip, .btn drop swap → near-black in dark, titlebar sheen → re-breaks §22 AA).
   ════════════════════════════════════════════════════════════════════════════ */

/* [dark-start-menu-panel] §7 .start-menu had a near-white frosted fill
   (background-color rgba(228,244,254,0.62) + white gloss, line 707) and NO dark
   sibling — it paints white-hot in Nightfall when the menu is open. (Missed in
   the visual sweep: the menu is closed by default.) Re-tint to §3 dark teal-navy
   glass; dimmer cool insets + darker drop. Dark-only; background/border/shadow
   only — the base backdrop-filter blur (one-per-context) is preserved. */
:root[data-skin="aero"][data-theme="dark"] .start-menu {
  border-color: rgba(120, 195, 225, 0.30);
  background-color: rgba(16, 50, 71, 0.62);
  background-image:
    radial-gradient(125% 70% at 50% -22%,
      rgba(190,235,255,0.30) 0%, rgba(190,235,255,0.14) 18%,
      rgba(190,235,255,0.04) 38%, rgba(190,235,255,0) 52%),
    linear-gradient(180deg,
      rgba(16,50,71,0.55) 0%, rgba(14,43,61,0.40) 30%,
      rgba(12,40,58,0.34) 60%, rgba(10,35,52,0.46) 100%);
  box-shadow:
    inset 0 1px 0 0 rgba(160, 220, 245, 0.28),
    inset 0 0 0 1px rgba(160, 220, 245, 0.10),
    inset 0 -10px 16px -10px rgba(6, 24, 40, 0.40),
    0 18px 46px rgba(6, 18, 30, 0.50),
    0 2px 8px rgba(6, 18, 30, 0.40);
}
:root[data-skin="aero"][data-theme="dark"] .start-menu::before {
  background: radial-gradient(140% 90% at 50% -34%,
    rgba(190,235,255,0.30) 0%, rgba(190,235,255,0.12) 38%,
    rgba(190,235,255,0) 72%);
}

/* [dark-inactive-window-titlebar] §4 .window:not(.is-active) .window__titlebar
   (line 416) is a themeless pale grey-blue that blows out on dark glass — an
   inactive window in Nightfall shows a bright bar. Dark sibling pulls it to the
   dim inactive teal-navy. Dark-only. */
:root[data-skin="aero"][data-theme="dark"] .window:not(.is-active) .window__titlebar {
  background:
    linear-gradient(180deg, rgba(190,235,255,0.10) 0%, rgba(190,235,255,0) 50%),
    linear-gradient(90deg, rgba(30,62,76,0.56), rgba(40,80,94,0.42));
}

/* [dark-project-tile-fill] §10 .project-tile (Home intro grid + blog rows) resting
   fill (line 942) is rgba(255,255,255,0.6) near-white with no dark sibling — paints
   light on the dark window body in Nightfall. (.work-item is a separate class and
   already has its dark sibling, which is why Work looked fine.) Mirror the §17 dark
   .work-item glass. :hover sets only box-shadow, so this resting fill persists. */
:root[data-skin="aero"][data-theme="dark"] .project-tile {
  border-color: rgba(120, 195, 225, 0.28);
  background: linear-gradient(180deg, rgba(120,200,235,0.14), rgba(16,50,71,0.30));
  box-shadow:
    inset 0 1px 0 rgba(160,220,245,0.18),
    var(--aero-elev-1);
}

/* [no-overshoot-soft-settle] the Start-menu bloom used --ease-soft (a pure
   decelerator) with no overshoot — real Aero/Aqua surfaces settle with a tiny
   swell. Bake a 1.2% overshoot into the keyframe (same name → later source wins
   over §19's). Reduced-motion already neutralizes start-menu animation, so this
   is motion-safe. Context-menu excluded (it shares .start-menu but isn't a bloom). */
:root[data-skin="aero"] .start-menu:not(.context-menu) {
  animation: aero-start-menu-bloom var(--speed) var(--ease-soft);
}
@keyframes aero-start-menu-bloom {
  from { opacity: 0; transform: translateY(8px) scale(0.96); }
  70%  { opacity: 1; transform: translateY(0)   scale(1.012); }
  to   { opacity: 1; transform: translateY(0)   scale(1); }
}

/* ════════════════════════════════════════════════════════════════════════════
   §24 — MAXIMIZE POSITION FIX (skin regression caught by the maximize/FLIP check)
   Base .window.is-maximized (window.css:479) sets `position: fixed` WITHOUT
   !important (only top/left/width/height got it). The skin's §3
   `:root[data-skin="aero"] .window { position: relative }` (specificity 0,3,0,
   itself REDUNDANT — base .window is already position:relative, window.css:26)
   out-specifies `.window.is-maximized` (0,2,0), so the maximized window stayed
   position:relative; the surviving `left:112px !important` then offset it from
   its in-flow spot instead of pinning to the viewport, and the window overflowed
   the right screen edge (verified: skin off → fixed/x:112/fits; skin on →
   relative/x:629/overflows). Restore fixed for the maximized case (0,4,0 beats
   both base and the §3 .window rule). `fixed` is still a positioned value, so the
   ::before specular sweep keeps its containing block. Mobile hides the maximize
   button (mobile.css:148) and only sets height:auto, so this is desktop-only in
   practice and matches the non-media-scoped base. */
:root[data-skin="aero"] .window.is-maximized {
  position: fixed;
}

/* ════════════════════════════════════════════════════════════════════════════
   §25 — A11Y + PERF (append-only; objective audit fixes, workflow wjgx4jjic)
   4 skeptic-confirmed objective fixes (7 phantoms rejected — they were PASS
   results mislabelled as findings). The 1 taste call (drag-window backdrop blur
   cost) is HELD → loop doc Decisions to surface.
   ════════════════════════════════════════════════════════════════════════════ */

/* [aero-focus-desktop-icon-no-distinct-ring | HIGH] sidebar nav links lost the
   base dotted focus border (the skin's solid border wins on equal specificity +
   later load, and base outline:none was never restored) — a keyboard-focused
   icon was pixel-identical to a hovered one. Restore the one cyan focus idiom. */
:root[data-skin="aero"] .desktop-icon:focus-visible {
  outline: 2px solid var(--aero-focus);
  outline-offset: 2px;
}

/* [aero-perf-02-nowplaying-background-position-loop | low] the now-playing sheen
   ran an infinite background-position loop (per-frame REPAINT). Re-express as a
   compositor transform sweep: a fixed gradient band translated across the row,
   clipped by overflow:hidden — this removes the REPAINT (the heavy part).
   NB: §16's mix-blend-mode:screen on this same ::after still cascades through
   (not redeclared here), so the band keeps its screen-blend sheen — a cheap
   single-row recomposite, kept intentionally for the look (do NOT read this as
   "zero recomposite"). EXPLICIT reduced-motion guard below (the base guard does
   NOT out-specify this skin rule, so the synthesis's "still applies" was unsafe). */
:root[data-skin="aero"] .cdp__track.is-playing { overflow: hidden; }
:root[data-skin="aero"] .cdp__track.is-playing::after {
  background: linear-gradient(100deg,
    rgba(255,255,255,0) 0%, rgba(255,255,255,0.22) 50%, rgba(255,255,255,0) 100%);
  background-size: auto;
  background-position: 0 0;
  width: 60%;
  inset: 0 auto 0 0;
  animation: aero-nowplaying-sweep 3.6s linear infinite;
}
@keyframes aero-nowplaying-sweep {
  0%   { transform: translateX(-100%); }
  100% { transform: translateX(266%); }
}
@media (prefers-reduced-motion: reduce) {
  :root[data-skin="aero"] .cdp__track.is-playing::after { animation: none; }
}

/* [aero-perf-03-resting-backdrop-blur-on-icon-labels | low] drop the always-on
   backdrop-filter:blur(3px) on the 6 persistent sidebar labels — they sit over
   the wallpaper whose ::after bubble layer animates continuously, so each blur
   chip re-rasterized every frame for no visible gain behind the near-opaque
   plate. Bump the plate 0.62→0.72 + the existing text-shadow keep legibility;
   hover/focus/active already override the background entirely. */
:root[data-skin="aero"] .desktop-icon__label {
  background: rgba(8, 40, 58, 0.72);
  -webkit-backdrop-filter: none;
          backdrop-filter: none;
}

/* [bf-menu-panels-readable-no-blur | low] dark frosted menu/flyout panels: text
   #DCEEF6 on a 0.62-alpha base drops below AA over bright night-wallpaper
   highlights even with the blur+brightness composite. Raise the dark base fill
   to 0.82 (worst-case 6.41:1) + an opaque fallback for engines without
   backdrop-filter. Dark-scoped only; no new blur. (Supersedes the §23 .start-menu
   0.62 base — the §23 dark gradient image still layers on top.) */
:root[data-skin="aero"][data-theme="dark"] .start-menu,
:root[data-skin="aero"][data-theme="dark"] .start-menu__submenu,
:root[data-skin="aero"][data-theme="dark"] .systray__flyout,
:root[data-skin="aero"][data-theme="dark"] .fl-menu__pop {
  background-color: rgba(16, 50, 71, 0.82);
}
/* The Start menu alone plates PAST the shared 0.82 (audit §4): it opens over
   the nav column, and the desktop-icon label chips behind it are themselves
   high-contrast plates — at 0.82 "CONTACT" still ghosted through "Work".
   0.90 kills the bleed-through; the §23 gradients + blur above keep glass. */
:root[data-skin="aero"][data-theme="dark"] .start-menu {
  background-color: rgba(14, 44, 63, 0.90);
}
@supports not ((-webkit-backdrop-filter: blur(1px)) or (backdrop-filter: blur(1px))) {
  :root[data-skin="aero"][data-theme="dark"] .start-menu,
  :root[data-skin="aero"][data-theme="dark"] .start-menu__submenu,
  :root[data-skin="aero"][data-theme="dark"] .systray__flyout,
  :root[data-skin="aero"][data-theme="dark"] .fl-menu__pop {
    background-color: #103247; /* opaque — 11.22:1 against #DCEEF6 */
  }
}

/* ════════════════════════════════════════════════════════════════════════════
   §26 — COMPLETENESS-SWEEP FIXES (append-only; all :root[data-skin="aero"] scoped,
   no light-theme regression, no new backdrop-filter on already-blurred descendants,
   reduced-motion-guarded where animating). Skeptic-confirmed objective findings,
   ordered high → low severity.
   ════════════════════════════════════════════════════════════════════════════ */

/* [attn-tile-selected-coral · high] Home attention.log SELECTED cover kept the flat
   base coral outline (components.css:368) — the §10 cover rule misspells the class
   (.attn__cover vs the live .attn__cov) and [class*="cover"] img never matches
   .attn__cov-img. Restyle to the Aero teal candy ring (mirrors .fav__cover.is-sel
   + .tcg__thumb.is-active). Static box-shadow → no reduced-motion guard. */
/* R4-9 — same INSET selection-ring fix as .fav__cover.is-sel (the Home attention.log
   grid also scrolls, so the old outset ring clipped on edge tiles). */
:root[data-skin="aero"] .attn__tile.is-sel .attn__cov {
  outline: none;
  box-shadow:
    inset 0 1px 0 rgba(255, 255, 255, 0.55),
    inset 0 0 0 2px rgba(8, 124, 140, 0.92),
    var(--aero-elev-2);
}
:root[data-skin="aero"][data-theme="dark"] .attn__tile.is-sel .attn__cov {
  box-shadow:
    inset 0 1px 0 rgba(180, 230, 250, 0.28),
    inset 0 0 0 2px rgba(63, 196, 214, 0.85),
    var(--aero-elev-2);
}

/* [attn-tile-focus-coral · high] Home attention.log cover tile is a live <button>
   but the one focusable AttentionLog control left on base coral :focus-visible
   (reset.css:44). Join the one --aero-focus idiom (both themes resolve the token). */
:root[data-skin="aero"] .attn__tile:focus-visible {
  outline: 2px solid var(--aero-focus);
  outline-offset: 2px;
}

/* [filelist-menubar-trigger-open-coral · high] Art Poetry menu-bar triggers
   (.filelist__menu-item) hover + open (art.css:281/330) were flat coral welded onto
   their already-frosted .fl-menu__pop dropdown. Join the teal-candy idiom. Theme-
   agnostic candy (sits on the opaque .filelist__menu bar → no new backdrop-filter). */
:root[data-skin="aero"] .filelist__menu-item:hover,
:root[data-skin="aero"] .filelist__menu-item[aria-expanded="true"] {
  color: #fff;
  border-radius: calc(var(--aero-radius) - 4px);
  background-image:
    linear-gradient(180deg,
      rgba(255, 255, 255, 0.70) 0%, rgba(255, 255, 255, 0.34) 8%,
      rgba(255, 255, 255, 0.08) 46%, rgba(255, 255, 255, 0) 50%),
    linear-gradient(180deg, #5BD0E2 0%, #34BBD0 49%, #1597AD 50%, #0E8197 100%);
  box-shadow:
    inset 0 1px 0 rgba(255, 255, 255, 0.85),
    inset 0 -7px 9px -6px rgba(120, 235, 255, 0.50),
    inset 0 0 0 1px rgba(255, 255, 255, 0.18),
    0 1px 2px rgba(8, 60, 84, 0.30);
  text-shadow: 0 1px 1px rgba(0, 42, 56, 0.42);
}

/* [aero-mount-keyframe-overrides-maximized-transform-important · med] A maximized
   window pins transform: translate(0,0) !important (window.css:502); a RUNNING CSS
   animation overrides !important. Because data-mounted is never stamped under aero
   (the windows.js name guard checks "window-pop", the aero keyframe is
   "aero-window-mount"), the §6 .window[data-mounted]{animation-name:none} guard
   (line 2768) is inert and the mount keyframe can re-fire on a maximized window,
   jumping it to the drag offset + scale before settling. Hard-disable every
   mount/restore/close keyframe while maximized so the pinned translate can never be
   overridden. (0,4,0)+!important beats the §6 .window rule and a concurrent
   .is-opening/.is-closing. The maximize/restore FLIP is a WAAPI win.animate() on the
   individual translate/scale props (windows.js), NOT the CSS `animation` property,
   so it is unaffected. Disable-only → no motion introduced → reduced-motion safe. */
:root[data-skin="aero"] .window.is-maximized {
  animation: none !important;
}

/* [filelist-menubar-trigger-focus-coral · med] Same triggers inherit the global coral
   :focus-visible (reset.css) while their own dropdown rows get cyan. Unify. */
:root[data-skin="aero"] .filelist__menu-item:focus-visible {
  outline: 2px solid var(--aero-focus);
  outline-offset: -2px;
}

/* [cdp-listing-row-live-hover · med] Inert liner-notes rows (art-player.js stamps
   .cdp__track--listing + aria-disabled on non-playable tracks; base art.css:235
   neutralizes :hover) get lit by the §16 .cdp__track:hover:not(.is-playing) rule
   (line 1363, spec 0,4,1) which out-specifies base (0,2,0) — a false "clickable" cue
   on an aria-disabled control. Re-neutralize in both themes. */
:root[data-skin="aero"] .cdp__track--listing[aria-disabled="true"]:hover {
  background: none;
  box-shadow: none;
  cursor: default;
}

/* [aero-readme-rule-dashed-win95-divider · med] The About README divider stayed a
   flat 2px dashed Win95 rule (components.css:899) on the glossy README window, while
   its intentional twin .resume__rule was reskinned to a glassy hairline (§17:2014).
   Soften .readme__rule to the same hairline so both read as the same OS. Static. */
:root[data-skin="aero"] .readme__rule {
  border-top: 1px solid rgba(120, 175, 210, 0.45);
  box-shadow: 0 1px 0 rgba(255, 255, 255, 0.55);
}
:root[data-skin="aero"][data-theme="dark"] .readme__rule {
  border-top-color: rgba(120, 195, 225, 0.28);
  box-shadow: 0 1px 0 rgba(160, 220, 245, 0.12);
}

/* [attn-tile-hover-win95-nudge · med] Home cover-tile hover kept the base Win95
   pixel-nudge (components.css:367) while the About favorites grid hovers in Aero
   (lift + cyan bloom). Unify to .fav__cover:hover. Live class is .attn__cov.
   Animating → reduced-motion guarded below. */
:root[data-skin="aero"] .attn__tile .attn__cov {
  transition: box-shadow var(--speed-fast) var(--ease-soft),
              transform var(--speed-fast) var(--ease-soft);
}
:root[data-skin="aero"] .attn__tile:hover .attn__cov {
  filter: none;
  transform: translateY(-2px);
  box-shadow: var(--aero-elev-2), var(--aero-glow-cyan);
}

/* [aero-minimize-bloom-not-additive-replaces-base-shadow · low] @keyframes
   aero-minimize-bloom (line 2672) animates the FULL box-shadow property, so it
   REPLACES (not adds to) the §6 .taskbar__item rest stack (lines 617-620) for the
   ~180ms bloom — the candy lozenge loses its inset gloss + drop shadow and flattens.
   Bake the rest stack into every keyframe; only the appended 4th (cyan-glow) layer
   rises/falls. The existing reduced-motion guard (line 2782) still sets
   .is-receiving { animation: none }, so this animates only when motion is allowed. */
@keyframes aero-minimize-bloom {
  0% {
    box-shadow:
      inset 0 0 0 1px rgba(255, 255, 255, 0.16),
      inset 0 1px 0.3px rgba(0, 0, 0, 0.30),
      0 1px 2px rgba(6, 30, 50, 0.32),
      0 0 0 0 transparent;
  }
  50% {
    box-shadow:
      inset 0 0 0 1px rgba(255, 255, 255, 0.16),
      inset 0 1px 0.3px rgba(0, 0, 0, 0.30),
      0 1px 2px rgba(6, 30, 50, 0.32),
      var(--aero-glow-cyan);
  }
  100% {
    box-shadow:
      inset 0 0 0 1px rgba(255, 255, 255, 0.16),
      inset 0 1px 0.3px rgba(0, 0, 0, 0.30),
      0 1px 2px rgba(6, 30, 50, 0.32),
      0 0 0 0 transparent;
  }
}

/* [fav-select-no-hover-active · low] Mobile category combo (.fav__select) has the
   Aero candy rest + cyan focus (lines 1759/1777) but no :hover/:active, so it stays
   at rest gloss while every sibling candy control has a 3-state press. Add the
   missing hover-bloom + press-sink (mirrors §5 .btn / §17 .fav__detail-back). */
:root[data-skin="aero"] .fav__select {
  transition: background var(--speed-fast) var(--ease-soft),
              box-shadow var(--speed-fast) var(--ease-soft);
}
:root[data-skin="aero"] .fav__select:hover {
  background: var(--aero-gloss-hover), var(--color-surface-hover);
  box-shadow:
    inset 0 1px 0 rgba(255, 255, 255, 1),
    inset 0 -7px 9px -6px rgba(255, 255, 255, 0.70),
    inset 0 0 0 1px rgba(255, 255, 255, 0.40),
    var(--aero-elev-2),
    var(--aero-glow-cyan);
}
:root[data-skin="aero"][data-theme="dark"] .fav__select:hover {
  box-shadow:
    inset 0 1px 0 rgba(180, 230, 250, 0.40),
    inset 0 -7px 9px -6px rgba(180, 230, 250, 0.45),
    inset 0 0 0 1px rgba(180, 230, 250, 0.18),
    var(--aero-elev-2),
    var(--aero-glow-cyan);
}
:root[data-skin="aero"] .fav__select:active {
  background: var(--aero-gloss-press), var(--color-surface-sunken);
  box-shadow:
    inset 0 1px 3px rgba(16, 70, 110, 0.34),
    inset 0 -1px 0 rgba(255, 255, 255, 0.45),
    var(--aero-elev-1);
}

/* Reduced-motion guard for the two animating §26 additions above
   (attn-tile hover transition; the fav__select hover/press is box-shadow-only and
   already squashed by tokens.css, but neutralized here for parity). */
@media (prefers-reduced-motion: reduce) {
  :root[data-skin="aero"] .attn__tile .attn__cov { transition: none; }
  :root[data-skin="aero"] .attn__tile:hover .attn__cov { transform: none; }
  :root[data-skin="aero"] .fav__select { transition: none; }
}

/* ════════════════════════════════════════════════════════════════════════════
   §27 — FONT-RENDERING CONSISTENCY (the retro pixel/anti-aliased toggle in Aero)
   The "Font rendering" control is a Win95-retro concept; under Aero the skin already
   forces antialiased Segoe UI, so the toggle only confuses (Elisha flagged it).
   (1) PIN --font-mono to a CLEAN monospace so mono surfaces (terminal / code /
   timestamps / data) render CRISP, never the Departure-Mono pixel face — Elisha:
   "get rid of all the pixel text." The 2004-2013 Aero era used smooth monospace
   (Consolas/Monaco), so this is period-correct FOR AERO. Still monospace, so ASCII
   art + tabular columns stay aligned. (Retro theme keeps Departure Mono.)
   (2) HIDE the rendering control in the Aero Settings submenu (kept for the retro theme).
   ════════════════════════════════════════════════════════════════════════════ */
:root[data-skin="aero"] {
  /* !important: the base bundle loads AFTER this skin <link>, so an equal-specificity
     (0,2,0) pin loses the source-order tie to base :root[data-smoothing="pixel"]
     (tokens.css:130, Departure Mono). !important wins regardless of order, keeping
     Aero on a clean mono whatever the stored smoothing value is. */
  --font-mono: ui-monospace, "SF Mono", "Menlo", "Consolas", "Liberation Mono", monospace !important;
}
:root[data-skin="aero"] .tweaks-group--rendering {
  display: none;
}

/* ════════════════════════════════════════════════════════════════════════════
   §28 — BOOT WELCOME: the Vista-era luminous LIGHT-ORB moment  (append-only)
   Base boot.css paints a flat #03070e CRT/POST terminal. Under Aero we walk that
   one moment forward ~a decade: a deep-fjord→black radial vignette ground + ONE
   soft light orb glowing UP from BELOW the wordmark as the OS comes online.
   We do NOT touch the boot-out / boot-fill / boot-log timing or the data-skip
   session lock — inherited as-is.
   PALETTE (locked): Glacier #F4FBFE · Aurora Teal #0FA3B1 / deep #0A5C6A · Deep
   Fjord #06212F (vignette center #061521 = a Fjord-family darkening, no new hue).
   PERF: single static gradient layer; only animation is compositor-cheap
   transform:scale() + opacity (NO backdrop-filter, NO per-frame blur/box-shadow).
   REDUCED MOTION: orb renders STATIC at its resting size/opacity.
   AA (re-verified 2026-06-27 after the evergreen recolor): the orb is seated BELOW the
   wordmark and dimmed so its screen-blend never lifts the background behind the glyphs
   into a failing band. On the boot ground, the new glyph colors clear AA — dark/default:
   "Cascadia" #5BD082 = 9.49:1, "OS" #2E84C0 = 4.55:1; light: #43C463 = 8.19:1, #41C4D7
   = 8.89:1 (worst 4.55:1 ≥ 4.5). The vignette center is kept NO lighter than #03070e.
   ════════════════════════════════════════════════════════════════════════════ */

/* Ground: deep-fjord → black radial vignette. Center kept dark (≤ base #03070e
   luminance) so the centred wordmark keeps its contrast; falls to near-black. */
:root[data-skin="aero"] .boot-splash {
  background:
    radial-gradient(120% 100% at 50% 50%,
      #061521 0%, #051019 40%, #030b12 70%, #020a10 100%);
}

/* Keep CRT scanlines but ease WAY back — Vista's welcome was glassy, not a CRT. */
:root[data-skin="aero"] .boot-splash::after { opacity: 0.28; }

/* ── THE LIGHT ORB — on .boot-splash__inner::before, seated LOW (top:64%) so it
   glows up from BEHIND/BELOW the wordmark rather than blooming through the glyphs.
   z-index:-1 drops it behind the logo; screen-blended so light adds, never muddies.
   Alphas are tuned so the teal body has faded out before it reaches the logo band. */
:root[data-skin="aero"] .boot-splash__inner {
  position: relative;
  isolation: isolate; /* scope the screen-blend orb to this column */
}
:root[data-skin="aero"] .boot-splash__inner::before {
  content: "";
  position: absolute;
  z-index: -1;
  left: 50%;
  top: 64%;
  width: min(560px, 92vw);
  aspect-ratio: 1;
  transform: translate(-50%, -50%) scale(0.72);
  pointer-events: none;
  border-radius: 50%;
  mix-blend-mode: screen;
  background:
    /* Glacier core — small + low-alpha so it never whites-out behind glyphs */
    radial-gradient(circle at 50% 50%,
      rgba(244, 251, 254, 0.38) 0%,
      rgba(244, 251, 254, 0.18) 6%,
      rgba(223, 241, 250, 0.10) 13%,
      transparent 22%),
    /* Aurora-Teal luminous body — fades out by ~48% so it stays below the word */
    radial-gradient(circle at 50% 50%,
      rgba(15, 163, 177, 0.34) 0%,
      rgba(15, 163, 177, 0.18) 26%,
      rgba(10, 92, 106, 0.10) 38%,
      transparent 48%);
  animation: aero-boot-orb 2.6s var(--ease-soft) forwards;
}

@keyframes aero-boot-orb {
  0%   { opacity: 0;    transform: translate(-50%, -50%) scale(0.62); }
  22%  { opacity: 0.85; transform: translate(-50%, -50%) scale(0.92); }
  70%  { opacity: 1;    transform: translate(-50%, -50%) scale(1.04); }
  82%  { opacity: 0.92; transform: translate(-50%, -50%) scale(1.00); }
  100% { opacity: 0.78; transform: translate(-50%, -50%) scale(1.00); }
}

/* Seat the wordmark IN the light: a GENTLE teal-weighted bloom under the kept hard
   pixel-shadow. Low alpha + teal (not bright Glacier) so it never forms a bright
   ring right at the glyph edge that would erode contrast. text-shadow only. */
:root[data-skin="aero"] .boot-splash__logo {
  text-shadow:
    4px 4px 0 #02060d,
    0 0 22px rgba(15, 163, 177, 0.30),
    0 0 52px rgba(10, 92, 106, 0.28);
}

/* Reduced motion: orb STATIC at resting size/opacity — no breathing. */
@media (prefers-reduced-motion: reduce) {
  :root[data-skin="aero"] .boot-splash__inner::before {
    animation: none;
    opacity: 0.82;
    transform: translate(-50%, -50%) scale(1.00);
  }
}

/* ════════════════════════════════════════════════════════════════════════════
   §29 — CD PLAYER: glossy-glass media FACE  (Skyweaver-grounded; ONE instance)
   ----------------------------------------------------------------------------
   [RE-GROUNDED 2026-06-23 in Skyweaver's "Aero OS :: redux" CLV player
   (docs/skyweaver-extract.md, Recipe 1), recolored Skyweaver-blue → our teal:
   the brushed-metal face below was REPLACED with a teal glossy-glass deck — a
   teal base + a separate white gloss layer blended OVER it (background-blend-
   mode: overlay) with a HARD ~50% specular break. That blend + break is the
   "designed" tell the hand-rolled metal lacked. Theme-following so the interior
   tracklist/meta keep AA contrast; .cdp__lcd stays authentic. Attribution:
   Skyweaver (CC) — clear before public ship. The brushed-metal prose below is
   HISTORICAL — ignore it.]

   WHY ONLY HERE: Apple's HIG reserved brushed metal for media *appliances*
   (QuickTime / iTunes). The Art "CD Player" is the one literal appliance in this
   OS, so it — and nothing else — gets the milled-aluminium face. Every other
   window stays the §3/§4 frosted glass. This is the guardrail (the "period rule"
   = brushed metal == a media device, never decoration).

   TARGET (read from the live DOM — there is NO .cdp__win / .cdp__body):
   Window.astro renders  <section.window#art-music> > <div.window__body> >
   <div.cdp data-cdp>.  The painted reading surface is that ONE window's body.
   We override the §4 generic glass body (the .window__body rule near line 421)
   for this window ONLY via the #art-music ID (specificity 1,0,1 cleanly beats
   the base 0,2,0). No new selector touches any other .window__body.

   WHAT WE DO NOT TOUCH (sits ON the metal, keeps its own §16 rules):
     - .cdp__lcd  — the dark-green LCD (pinned UNTOUCHED near line 1686).
     - .cdp__btn / .cdp__btn--play — the glossy candy transport (§16).
     - .cdp__albumtab / .cdp__seek / .cdp__tracks — already skinned in §16.

   THE SURFACE: a COOL-blue brushed face tuned to the locked surface #E4F2FC
   (NOT warm aluminium). Three stacked repeating-linear-gradients at 90deg give a
   fine vertical mill grain (alternating 1-3px hairlines), over a top-lit
   surface->surface-sunken base. A radial top sheen + an inset bottom shadow give
   the rolled-metal curvature.

   PERF / CONSTRAINTS: gradients + box-shadow ONLY. NO backdrop-filter is added
   here — the base body rule we override never had one (the single blur lives on
   the §3 .window frame), so the face introduces zero new blur cost. NO animation
   in this section at all (the reduced-motion guard at the end is a no-op safety
   net only). Palette stays inside Glacier/Mist-Aqua/surface/Deep-Fjord. AA is
   preserved: --color-text (#0E2A38) on the lightest grain stop (~#EEF6FD) and on
   the darkest (~#D8E9F6) both clear 4.5:1; dark theme keeps #DCEEF6 on the
   #0E2B3D-family metal.
   ════════════════════════════════════════════════════════════════════════════ */

/* LIGHT — cool brushed-aluminium face (milled vertical grain). */
:root[data-skin="aero"] #art-music .window__body {
  /* Skyweaver glossy-glass deck (Recipe 1, recolored teal): a white gloss layer
     blended OVER the teal base with a HARD ~50% specular break — the grounded
     tell that the brushed metal lacked. */
  background:
    linear-gradient(180deg,
      rgba(255, 255, 255, 0.46) 0%, rgba(255, 255, 255, 0.12) 49%,
      rgba(255, 255, 255, 0.00) 50%, rgba(255, 255, 255, 0.06) 100%),
    linear-gradient(180deg, #DCEFF7 0%, var(--color-surface) 46%, #C2E2F0 100%);
  background-blend-mode: overlay, normal;
  box-shadow:
    inset 0 1px 1px rgba(255, 255, 255, 0.60),     /* top light rim */
    inset 0 -1px 1px rgba(16, 70, 110, 0.25),       /* bottom dark rim */
    inset 0 0 0 1px rgba(120, 175, 210, 0.30);      /* glass bezel edge */
}

/* The inner .cdp root carries the same grain so the exposed face padding (the
   chassis around the LCD / transport / tracklist) reads as one milled plate,
   not a glass body peeking past a metal frame. Sheen omitted here (the body
   already owns it) — grain + faint base only. */
:root[data-skin="aero"] #art-music .cdp {
  /* inner deck — same glossy-glass, fainter sheen (the body owns the strong one) */
  background:
    linear-gradient(180deg,
      rgba(255, 255, 255, 0.28) 0%, rgba(255, 255, 255, 0.06) 49%,
      rgba(255, 255, 255, 0) 50%),
    linear-gradient(180deg, rgba(244, 251, 254, 0.50) 0%, rgba(213, 232, 245, 0.34) 100%);
  background-blend-mode: overlay, normal;
}

/* DARK — deep-fjord brushed face (cool steel, not warm). Same grain recipe,
   tinted to the dark surface family so #DCEEF6 text keeps its AA margin. */
:root[data-skin="aero"][data-theme="dark"] #art-music .window__body {
  /* deep-fjord glossy-glass deck — the closest to Skyweaver's dark media chassis */
  background:
    linear-gradient(180deg,
      rgba(255, 255, 255, 0.22) 0%, rgba(255, 255, 255, 0.05) 49%,
      rgba(255, 255, 255, 0.00) 50%, rgba(160, 220, 245, 0.04) 100%),
    linear-gradient(180deg, #0E5063 0%, #0A3A4A 46%, #06222F 100%);
  background-blend-mode: overlay, normal;
  box-shadow:
    inset 0 1px 1px rgba(180, 230, 250, 0.28),
    inset 0 -1px 1px rgba(0, 12, 22, 0.50),
    inset 0 0 0 1px rgba(120, 195, 225, 0.22);
}
:root[data-skin="aero"][data-theme="dark"] #art-music .cdp {
  background:
    linear-gradient(180deg,
      rgba(180, 230, 250, 0.14) 0%, rgba(180, 230, 250, 0.03) 49%,
      rgba(180, 230, 250, 0) 50%),
    linear-gradient(180deg, rgba(16, 50, 71, 0.50) 0%, rgba(10, 35, 52, 0.42) 100%);
  background-blend-mode: overlay, normal;
}

/* No animation is declared in §29; this guard is a defensive no-op so any future
   edit that adds motion to the metal face stays reduced-motion-safe by default. */
@media (prefers-reduced-motion: reduce) {
  :root[data-skin="aero"] #art-music .window__body,
  :root[data-skin="aero"] #art-music .cdp { animation: none; }
}

/* ============================================================
   30. FAVORITES/WORK EXPLORER — OBJECT TREATMENT + STAGE DEPTH
   ----------------------------------------------------------------------------
   §17 made the explorer's wells + buttons glass, but Elisha flagged it as not
   translating like Frutiger Aero: the cover tiles read as flat thumbnails, the
   review metadata reads as terminal mono, and the content stage is washed pale
   so the art has nothing to pop against. This pass treats the covers as real
   glossy framed OBJECTS (iTunes / WMP 11 library), deepens the stage, and
   de-terminalizes the metadata. Cover-art legibility kept (P7); every rule is
   aero-scoped so the retro look is untouched.
   ============================================================ */

/* ---- Cover tiles → glossy framed objects --------------------------------- */
/* A light glass frame + top bevel + a deeper grounded drop, overriding §10's
   flat soft shadow so each cover reads as a physical glossy case, not a sticker. */
:root[data-skin="aero"] .fav__cover {
  border: 1px solid rgba(255, 255, 255, 0.50);
  box-shadow:
    inset 0 1px 0 rgba(255, 255, 255, 0.65),    /* top bevel sheen */
    inset 0 0 0 1px rgba(8, 60, 90, 0.22),        /* thin inner rim defines the edge */
    0 5px 14px rgba(16, 70, 110, 0.34),           /* grounded drop */
    0 1px 3px rgba(16, 70, 110, 0.22);
}
:root[data-skin="aero"][data-theme="dark"] .fav__cover {
  border-color: rgba(150, 205, 235, 0.32);
  box-shadow:
    inset 0 1px 0 rgba(180, 230, 250, 0.28),
    inset 0 0 0 1px rgba(0, 14, 26, 0.40),
    0 6px 16px rgba(0, 14, 26, 0.55),
    0 1px 3px rgba(0, 14, 26, 0.40);
}
/* The glass FRONT: repurpose the base scrim ::after into a full-cover overlay
   carrying BOTH a diagonal specular sweep (top-left) AND the title scrim
   (bottom), so the cover reads as glossy glass while the title stays legible.
   (Base ::after is bottom-only; doc/paper tiles keep content:none = no overlay.) */
:root[data-skin="aero"] .fav__cover::after {
  inset: 0;
  height: auto;
  background:
    linear-gradient(133deg,
      rgba(255, 255, 255, 0.44) 0%, rgba(255, 255, 255, 0.10) 19%,
      rgba(255, 255, 255, 0) 40%),
    linear-gradient(to top,
      rgba(2, 18, 32, 0.80) 0%, rgba(2, 18, 32, 0.30) 24%, transparent 50%);
}

/* ---- Stage depth → the cover grid sits on a faint aurora wash, not stark
   white, so the art has something to lift off of (the washed-pale fix). ------ */
:root[data-skin="aero"] .fav__content {
  border-radius: var(--aero-radius);
  background:
    radial-gradient(120% 90% at 50% -6%,
      rgba(176, 220, 244, 0.22) 0%, rgba(210, 236, 248, 0.08) 44%, transparent 78%);
}
:root[data-skin="aero"][data-theme="dark"] .fav__content {
  background:
    radial-gradient(120% 90% at 50% -6%,
      rgba(40, 120, 150, 0.22) 0%, rgba(20, 60, 84, 0.10) 44%, transparent 78%);
}
/* Slightly larger tiles + more air = media-library density (iTunes / WMP),
   not a sparse icon scatter lost in the maximized stage. GATED to >=48em: at the
   mobile drill-in width the grid container is ~219px, where minmax(112px) forces
   ONE giant column (2x112 > 219) — the base 96px keeps 2 columns there. So the
   bump applies only where there's room for it; phones keep the base grid. */
@media (min-width: 48em) {
  :root[data-skin="aero"] .fav__grid {
    grid-template-columns: repeat(auto-fill, minmax(112px, 1fr));
    gap: var(--space-3);
  }
}

/* ---- Metadata → humanist sans, not terminal mono ------------------------- */
/* §27 pins --font-mono so the terminal/LCD/code stay period-correct; the
   favorites library metadata is NOT terminal text, so de-mono it (the title is
   already --font-display = Segoe under aero; the note is body). Scoped to the
   explorer so the LCD readouts + terminal keep Departure Mono BY DESIGN — the
   whole point of the §27 pin (do not over-glass those authentic objects).
   The folder count (.fav__folder-ct) + the doc-tile extension (.fav__cover-ext)
   were the gap an adversarial research pass caught — both still rode the mono
   pin, reading as terminal text in a WMP/Zune-style library. */
:root[data-skin="aero"] .fav__detail-sub,
:root[data-skin="aero"] .fav__folder-ct,
:root[data-skin="aero"] .fav__cover-ext,
:root[data-skin="aero"] .folder__count,
:root[data-skin="aero"] .explorer__path,
:root[data-skin="aero"] .tc-sub,
:root[data-skin="aero"] .tcg__meta {
  font-family: var(--font-body);
  letter-spacing: 0.1px;
}
/* (.folder__count "3 items" + .explorer__path "C:\Work" are the Work explorer's
   twins of the favorites metadata above — same §27 mono-pin gap. The Work path's
   full Vista-breadcrumb T2 is a deferred follow-up; this de-monos it. The
   .folder__head [+]/[−] toggle + every LCD/terminal surface stay Departure Mono
   BY DESIGN — do not add them here.) */

/* ============================================================
   31. CONTACT TERMINAL — keep the black console, not glass
   ----------------------------------------------------------------------------
   The Contact form window is an AUTHENTIC object: a near-black BBS/terminal
   console (contact-terminal.css sets [data-window="form"] .window__body to
   #0a0e14, padding:0). But the §4 generic glass body
   (:root[data-skin="aero"] .window__body, 0,3,0) out-specifies that base rule
   (0,2,0), so it repainted the console body light glass + rounded corners +
   inset sheen — a light HALO framing the black terminal. Re-assert the bleed
   with a per-window guardrail (0,4,0 > 0,3,0), exactly like the #art-music
   brushed-metal precedent (§29). The §3 glass FRAME (border/blur/specular) is
   untouched; the interior is NOT glassified.
   ============================================================ */
:root[data-skin="aero"] [data-window="form"] .window__body {
  padding: 0;
  background: #0a0e14;
  border-radius: 0 0 calc(var(--aero-radius-lg) - 2px) calc(var(--aero-radius-lg) - 2px);
  box-shadow: none;
}
/* Green-phosphor CRT in Aero (Elisha): amber → green so the terminal joins the new
   evergreen-accent palette while staying a period-correct console (green phosphor is
   as authentic as amber). Retro keeps its amber CRT — base file is shared, override
   here only (0,3,0 > .term 0,1,0). Accent green clears ~11:1 on the near-black bg;
   the body ink goes pale phosphor-green. Error --term-amber stays (a warning hue). */
:root[data-skin="aero"] .term {
  --term-accent: #3FE07A;
  --term-ink:    #D8F2DD;
}
/* Kill the one-sided coloured GUTTER on the message field (Elisha flagged it as
   the same AI-cliché coloured-spine as the old File Explorer card). The message
   well goes to a uniform recessed border in Aero — the terminal keeps its accent
   in the caret + focus ring (now phosphor-GREEN via the --term-accent #3FE07A
   override above; retro stays amber), just not as a resting left stripe.
   Aero only (0,4,1 > the base 0,2,1); retro's terminal is untouched. The base file
   is shared, so this can't be removed there without changing the retro look. */
:root[data-skin="aero"] .term .field--msg textarea {
  border-left: 1px solid rgba(242, 239, 230, 0.12);
}

/* ============================================================
   32. INTERACTION-STATE CLOSER — content rows gain a pressed (:active) state
   ----------------------------------------------------------------------------
   File-list rows, tracklist rows, favorites folders, and work folder heads had
   rest/hover/selected/focus but no PRESSED feedback (their launcher siblings
   .tc-row / .project-tile do). Add the §18 sunken press ink. Guarded off the
   selected/playing/open states so a press doesn't fight the current item. Placed
   last so :active wins source-order ties against :hover during the press.
   ============================================================ */
:root[data-skin="aero"] .filelist__row:active:not(.is-sel),
:root[data-skin="aero"] .cdp__track:active:not(.is-playing),
:root[data-skin="aero"] .fav__folder:active:not(.is-active),
:root[data-skin="aero"] .folder__head:active {
  box-shadow: inset 0 1px 3px rgba(16, 70, 110, 0.30);
}

/* ============================================================
   33. GLOBAL CHROME CLOSERS — flat-95 bits welded onto glass neighbours
   ----------------------------------------------------------------------------
   Four small shell-layer elements the chrome passes skipped, each sitting on an
   already-glassified neighbour: the boot progress brick under the §28 luminous
   wordmark, the flat black mono crumb over the glass taskbar, the square Start
   banner against the frosted panel, and the square LED on the candy Start pill.
   All reuse existing tokens; no new JS, no new keyframes (the boot-fill width
   animation + timing are untouched — only the look changes).
   ============================================================ */
:root[data-skin="aero"] .boot-splash__bar {
  border-radius: var(--aero-pill);
  background: rgba(6, 21, 33, 0.62);
  border: 1px solid rgba(150, 210, 240, 0.30);
  box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.5), inset 0 0 0 1px rgba(0, 0, 0, 0.28);
}
:root[data-skin="aero"] .boot-splash__bar-fill {
  border-radius: var(--aero-pill);
  background:
    linear-gradient(180deg,
      rgba(255, 255, 255, 0.55) 0%, rgba(255, 255, 255, 0.12) 48%,
      rgba(255, 255, 255, 0) 50%, rgba(255, 255, 255, 0.06) 100%),
    linear-gradient(180deg, #3CC4D9 0%, #1597AD 50%, #0E8197 100%);
  box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.6), 0 0 6px rgba(63, 196, 214, 0.5);
}

/* File-path crumb → small frosted dark-glass address chip (mono + coral ▸ kept). */
:root[data-skin="aero"] .crumb {
  border-radius: var(--aero-radius);
  background: rgba(6, 26, 40, 0.55);
  border: 1px solid rgba(150, 210, 240, 0.32);
  -webkit-backdrop-filter: blur(4px);
          backdrop-filter: blur(4px);
  box-shadow: inset 0 1px 0 rgba(180, 230, 250, 0.18);
  text-shadow: 0 1px 1px rgba(0, 0, 0, 0.6);
}
/* R4-6 — the taskbar path-crumb chevron was coral (--color-accent) on the dark
   glass bar; recolor to the muted teal the Vista breadcrumb chevron uses, so the
   warm pop is reserved for real links. */
:root[data-skin="aero"] .crumb::before { color: rgba(95, 205, 230, 0.78); }

/* The teal "Cascadia OS" strip is painted as the MENU's own background (see the
   .start-menu:not(.context-menu) rule just below) so it clips to the panel's
   border-radius for free and can never protrude past the rounded corners — the old
   opaque-child banner fought the corners at the sub-pixel level (the menu can't use
   overflow:hidden; #30 needs the Settings submenu to escape it). This element is now
   ONLY the rotated wordmark, laid over that strip. Keep it shrunk + padded so the
   text clears the rounded corners. */
:root[data-skin="aero"] .start-menu__banner {
  font-size: 13px;
  letter-spacing: 1px;
  padding: 14px 0;
  background: transparent;
  border-radius: 0;
  box-shadow: none;
}
:root[data-skin="aero"] .start-menu__banner span { color: var(--color-accent-bright); }

/* The 34px sky gel strip + its left sheen, as the menu background's first two
   layers (then the shared top-gloss + frost). :not(.context-menu) so right-click
   menus — which reuse .start-menu but have no banner — don't get a stray strip. */
:root[data-skin="aero"] .start-menu:not(.context-menu) {
  background-image:
    linear-gradient(90deg,
      rgba(255,255,255,0.42) 0%, rgba(255,255,255,0.06) 30%, rgba(255,255,255,0) 66%),
    linear-gradient(0deg, #135A98 0%, #1E7FC4 60%, #5AB4EC 100%),
    radial-gradient(125% 70% at 50% -22%,
      rgba(255,255,255,0.95) 0%, rgba(255,255,255,0.55) 18%,
      rgba(255,255,255,0.12) 38%, rgba(255,255,255,0) 52%),
    linear-gradient(180deg,
      rgba(244,251,254,0.55) 0%, rgba(223,241,250,0.30) 30%,
      rgba(206,232,250,0.18) 60%, rgba(196,228,248,0.34) 100%);
  background-position: left top, left top, center, center;
  background-size: 34px 100%, 34px 100%, auto, auto;
  background-repeat: no-repeat;
}

/* R4-4: the whole start button is the round teal orb now (see §6 .taskbar__start),
   so the inner LED dot is redundant in Aero. Retro keeps its coral power-LED. */
:root[data-skin="aero"] .taskbar__start-led {
  display: none;
}

/* ============================================================
   34. ART PAGE — surface + object parity (token-reuse, one page)
   ----------------------------------------------------------------------------
   Four Art selectors the chrome passes skipped, each welding a flat/chiseled 95
   element onto frosted glass or the §29 brushed-metal face. All reuse the §16
   glass-blue well, the §30 cover-object stack, and the §15 cyan focus idiom. The
   LCD readout, cork board, and notepad TEXT are authentic objects — untouched.
   ============================================================ */

/* Poetry file-list column header → §16 glass-blue well; its sort <button>s get a
   cyan hover bloom + focus ring so they read clickable. */
:root[data-skin="aero"] .filelist__head {
  border: 1px solid rgba(120, 175, 210, 0.45);
  border-radius: var(--aero-radius);
  background: rgba(120, 180, 210, 0.14);
  box-shadow:
    inset 0 1px 0 rgba(255, 255, 255, 0.55),
    inset 0 1px 4px rgba(16, 70, 110, 0.14);
}
:root[data-skin="aero"][data-theme="dark"] .filelist__head {
  border-color: rgba(120, 195, 225, 0.28);
  background: rgba(8, 30, 46, 0.40);
  box-shadow:
    inset 0 1px 0 rgba(160, 220, 245, 0.14),
    inset 0 1px 4px rgba(0, 12, 22, 0.45);
}
:root[data-skin="aero"] .filelist__col {
  border-radius: 4px;
  transition: background var(--speed-fast) var(--ease-soft);
}
:root[data-skin="aero"] .filelist__col:hover {
  background:
    linear-gradient(180deg, rgba(255, 255, 255, 0.30) 0%, rgba(255, 255, 255, 0) 60%),
    rgba(120, 200, 230, 0.18);
}
:root[data-skin="aero"] .filelist__col:focus-visible {
  outline: 2px solid var(--aero-focus);
  outline-offset: 1px;
}

/* CD album cover → §30 glossy framed object (replaces the flat 95 chisel on the
   brushed-metal face). */
:root[data-skin="aero"] #art-music .cdp__cover img {
  border: 1px solid rgba(255, 255, 255, 0.50);
  border-radius: 4px;
  box-shadow:
    inset 0 1px 0 rgba(255, 255, 255, 0.60),
    inset 0 0 0 1px rgba(8, 60, 90, 0.22),
    0 5px 14px rgba(16, 70, 110, 0.34);
}
:root[data-skin="aero"][data-theme="dark"] #art-music .cdp__cover img {
  border-color: rgba(150, 205, 235, 0.32);
  box-shadow:
    inset 0 1px 0 rgba(180, 230, 250, 0.28),
    inset 0 0 0 1px rgba(0, 14, 26, 0.40),
    0 6px 16px rgba(0, 14, 26, 0.55);
}

/* "Listen on" links → hover underline + brightness, cyan focus ring (interaction
   only — no fill/glass on the metal face). */
:root[data-skin="aero"] .cdp__link:hover { text-decoration: underline; filter: brightness(1.12); }
:root[data-skin="aero"] .cdp__link:focus-visible {
  outline: 2px solid var(--aero-focus);
  outline-offset: 2px;
  border-radius: 2px;
}

/* Notepad status strip → §16 glass-blue well (its .art-status twin already has
   it). Keeps its mono status readout. */
:root[data-skin="aero"] .np__status {
  background: rgba(120, 180, 210, 0.14);
  border-top-color: rgba(120, 175, 210, 0.45);
  box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.55);
}
:root[data-skin="aero"][data-theme="dark"] .np__status {
  background: rgba(8, 30, 46, 0.40);
  border-top-color: rgba(120, 195, 225, 0.28);
  box-shadow: inset 0 1px 0 rgba(160, 220, 245, 0.14);
}

/* ============================================================
   35. README "A Means to an End" inline launcher → glossy candy highlight
   ----------------------------------------------------------------------------
   The one About-page launcher left flat: an inline <button> highlight in the
   README prose. Keep the inline-highlight metaphor but glossify it — a candy
   sheen over its coral-soft fill at rest, the teal candy gloss on hover. The
   §candy gloss layers via background-IMAGE so the base's accent-soft / accent
   background-COLOR still shows through per theme; box-decoration-break:clone
   (base) keeps the gloss continuous when the line wraps.
   ============================================================ */
:root[data-skin="aero"] .readme__reveal {
  border-radius: var(--aero-radius);
  background-image:
    linear-gradient(180deg,
      rgba(255, 255, 255, 0.55) 0%, rgba(255, 255, 255, 0.12) 48%,
      rgba(255, 255, 255, 0) 50%, rgba(255, 255, 255, 0.10) 100%);
  box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.6);
}
:root[data-skin="aero"] .readme__reveal:hover {
  color: #fff;
  background-image:
    linear-gradient(180deg,
      rgba(255, 255, 255, 0.50) 0%, rgba(255, 255, 255, 0.12) 49%,
      rgba(255, 255, 255, 0) 50%, rgba(255, 255, 255, 0.08) 100%),
    linear-gradient(180deg, #3CC4D9 0%, #1597AD 50%, #0E8197 100%);
  text-shadow: 0 1px 1px rgba(0, 40, 55, 0.40);
}
:root[data-skin="aero"] .readme__reveal:focus-visible {
  outline: 2px solid var(--aero-focus);
  outline-offset: 2px;
}

/* ============================================================
   36. CONTACT "elsewhere" pixel-links — let long tokens wrap on mobile
   ----------------------------------------------------------------------------
   The ELSEWHERE links are an inline-grid (22px icon + 1fr label/note). The long
   email token (ebriellelucero@gmail.com — no break opportunities) expands the
   1fr track past the window's overflow-x:hidden edge, so on a 375px phone the
   email + "PC builds" clipped ("…gmail.co", "PC buil"). Aero-EXPOSED: Segoe is
   wider than the retro pixel font, which fit; so this is scoped to the skin.
   Fix: min-width:0 lets the track shrink, overflow-wrap lets the token break.
   Found by the mobile regression sweep. Layout only — no style change.
   ============================================================ */
:root[data-skin="aero"] .pixel-link { max-width: 100%; }
:root[data-skin="aero"] .pixel-link > * { min-width: 0; }
:root[data-skin="aero"] .pixel-link__label,
:root[data-skin="aero"] .pixel-link__note { overflow-wrap: anywhere; }

/* ============================================================
   37. EXPLORER × Mac-OS-X FUSION (additive to the Vista breadcrumb) — phase 1
   ----------------------------------------------------------------------------
   Frutiger Aero = Windows (Luna/Aero) + Mac OS X (Aqua) fused. We already ship
   the Vista half (chevron breadcrumb §10 + frosted source-rail §17 + glossy
   selection capsule above). This restates the favorites rail as an Aqua Finder
   SOURCE LIST: a small all-caps embossed section header over the category group,
   so it reads as a curated source list, not an undifferentiated button stack.
   Aero-only — base/retro hides the header (see favorites.css) so the Win95
   sidebar is byte-identical. [Phase 2 — Aqua category-icon silhouettes + the
   Finder view-switcher (reuse the Art .filelist[data-view] pattern, do NOT fork)
   — is gated on Elisha's calls; see docs/aero-redesign-loop.md.] */
:root[data-skin="aero"] .fav__side-head {
  display: block;
  margin: 2px 0 4px;
  padding: 2px 0 3px 8px;
  font: 700 10px/1 var(--font-body);
  letter-spacing: 0.06em;
  text-transform: uppercase;
  color: #0A5C6A;                         /* Deep Fjord (dark Aurora-Teal) */
  text-shadow: 0 1px 0 rgba(255, 255, 255, 0.6);  /* the locked glass emboss */
}
:root[data-skin="aero"][data-theme="dark"] .fav__side-head {
  color: rgba(150, 210, 235, 0.78);
  text-shadow: 0 1px 0 rgba(0, 20, 32, 0.5);
}

/* ════════════════════════════════════════════════════════════════════════════
   §38 — CD PLAYER → AERO MEDIA-PLAYER RECONCEPTION  (Skyweaver concept, teal)
   ----------------------------------------------------------------------------
   Elisha's direction (2026-06-23): don't just reskin — lean on Skyweaver's CLV
   *media player* as a whole CONCEPT so the AERO player reads as a different
   OBJECT than the retro CD applet (which stays as-is). We borrow the COMPOSITION,
   not just the gloss: album art centered as a poster, a recessed now-playing
   field, a thin track-bar, and a centered transport cluster with a glowing hero
   play disc on a glossy controls deck. Scoped to [data-skin="aero"], CSS-only on
   the shared DOM (retro inherits none of this). Recipes: docs/skyweaver-extract.md.

   NOTE 1: in AERO the green CRT LCD becomes the recessed now-playing slot (Recipe
   4) — Elisha asked for that recessed Aero look here; retro keeps the green LCD.
   NOTE 2: re-flow via flex `order` (aero-only): tabs → poster → now-playing →
   track-bar → transport → playlist. Visual order of seek/transport differs from
   DOM focus order — acceptable for a media deck; revisit if flagged.
   ════════════════════════════════════════════════════════════════════════════ */

/* re-flow the column (aero only): tabs + poster on top, the PLAYLIST scrolls in
   the middle, and the now-playing + track-bar + transport pin as a control deck
   at the bottom — the media-player shape (art up top, controls docked below). */
:root[data-skin="aero"] .cdp__albums    { order: 1; }
:root[data-skin="aero"] .cdp__head      { order: 2; }
:root[data-skin="aero"] .cdp__tracks    { order: 3; }   /* playlist — the scroller */
:root[data-skin="aero"] .cdp__lcd       { order: 4; }   /* now-playing (docked) */
:root[data-skin="aero"] .cdp__note      { order: 5; }
:root[data-skin="aero"] .cdp__seek      { order: 6; }   /* track-bar */
:root[data-skin="aero"] .cdp__transport { order: 7; }   /* transport deck */
:root[data-skin="aero"] .cdp .art-status { order: 8; }  /* status strip stays the footer (else order:0 floats it up) */

/* ---- the POSTER: album art centered + enlarged, meta as a centered caption -- */
:root[data-skin="aero"] .cdp__head {
  flex-direction: column; align-items: center; text-align: center; gap: var(--space-2);
}
:root[data-skin="aero"] .cdp__cover { position: relative; display: inline-block; }
:root[data-skin="aero"] .cdp__cover img {
  width: 128px; height: 128px;
  border: 1px solid rgba(120, 170, 205, 0.65); border-radius: 6px;
  box-shadow: 0 8px 18px -7px rgba(16, 70, 110, 0.55), inset 0 1px 0 rgba(255, 255, 255, 0.65);
}
:root[data-skin="aero"] .cdp__cover::after {            /* poster gloss sweep */
  content: ""; position: absolute; inset: 0; border-radius: 6px; pointer-events: none;
  background: linear-gradient(133deg,
    rgba(255, 255, 255, 0.46) 0%, rgba(255, 255, 255, 0.08) 22%, rgba(255, 255, 255, 0) 42%);
}
:root[data-skin="aero"] .cdp__meta { align-items: center; text-align: center; }
:root[data-skin="aero"] .cdp__links { justify-content: center; }

/* ---- the NOW-PLAYING display (T7): a recessed BACKLIT cool-teal LCD. Inverted
   lighting (inner shadow at TOP, catch-light at BOTTOM), faint self-backlight, an
   outer bottom metal lip, and tabular text that GLOWS rather than drop-shadows.
   "The screen" of the player — theme-independent (like the retro green LCD it
   replaces in aero; retro keeps #08130d/#57e08a via the base rule). NB §39 supersedes
   the §38 Recipe-4 translucent pill above. Elisha floated that translucent Skyweaver
   look too — surfaced as a taste call at presentation. ------------------------- */
:root[data-skin="aero"] .cdp__lcd {
  align-self: center; max-width: min(100%, 32rem); padding: 6px 16px; border-radius: 10px;
  border: 1px solid rgba(0, 22, 32, 0.7);
  background:
    linear-gradient(180deg, rgba(120, 210, 235, 0.16) 0%, rgba(120, 210, 235, 0) 34%),       /* backlight enters at top */
    radial-gradient(120% 140% at 50% -10%, rgba(60, 180, 205, 0.16), rgba(60, 180, 205, 0) 60%),
    linear-gradient(180deg, #07212E 0%, #0B3242 100%);                                          /* cool dark display glass */
  box-shadow:
    inset 0 2px 6px rgba(0, 12, 20, 0.72),       /* pressed-in TOP shadow */
    inset 0 -1px 0 rgba(120, 210, 235, 0.34),     /* catch-light BOTTOM */
    inset 0 0 16px rgba(60, 180, 205, 0.1),       /* faint self-backlight */
    0 1px 0 rgba(255, 255, 255, 0.4);             /* outer bottom metal lip */
  color: #CFF4FE;
}
:root[data-skin="aero"] .cdp__lcd-no {
  font-family: var(--font-body); font-weight: 700; font-size: var(--text-sm);
  color: #7FE0FA; text-shadow: 0 0 6px rgba(120, 224, 250, 0.55); font-variant-numeric: tabular-nums;
}
:root[data-skin="aero"] .cdp__lcd-title {
  font-family: var(--font-body); font-size: var(--text-sm); color: #DCF6FE; text-shadow: 0 0 4px rgba(120, 210, 235, 0.4);
}
:root[data-skin="aero"] .cdp__lcd-time {
  font-family: var(--font-body); font-size: var(--text-sm); letter-spacing: 0;
  color: #A8E6F5; text-shadow: 0 0 4px rgba(120, 210, 235, 0.4); font-variant-numeric: tabular-nums;
}

/* ---- the TRACK BAR: thin teal gradient progress (Skyweaver progress recipe) -- */
:root[data-skin="aero"] .cdp__seek { height: 14px; }
:root[data-skin="aero"] .cdp__seek::-webkit-slider-runnable-track {
  height: 4px; border: none; border-radius: 99px;
  background: linear-gradient(90deg, rgba(120, 205, 230, 0.85), rgba(199, 229, 255, 0.62));
  box-shadow: inset 0 1px 2px rgba(16, 70, 110, 0.28);
}
:root[data-skin="aero"] .cdp__seek::-moz-range-track {
  height: 4px; border: none; border-radius: 99px;
  background: linear-gradient(90deg, rgba(120, 205, 230, 0.85), rgba(199, 229, 255, 0.62));
}
:root[data-skin="aero"] .cdp__seek::-webkit-slider-thumb { width: 13px; height: 13px; margin-top: -4.5px; border-radius: 999px; }
:root[data-skin="aero"] .cdp__seek::-moz-range-thumb { width: 13px; height: 13px; border-radius: 999px; }

/* ---- the CONTROLS DECK: a glossy teal bar (Recipe 6) holding a centered, round
   transport cluster — replaces the old full-width stretched candy bars. -------- */
:root[data-skin="aero"] .cdp__transport {
  justify-content: center; align-items: center; gap: 12px;
  padding: 9px 14px; border-radius: 13px;
  background:
    radial-gradient(135% 220% at 50% 145%, rgba(190, 235, 255, 0.16) 0%, rgba(190, 235, 255, 0) 55%),
    linear-gradient(180deg, #0E4E60 0%, #0A3C4B 100%);
  box-shadow:
    inset 0 1px 1px rgba(190, 235, 255, 0.30), inset 0 -1px 1px rgba(0, 16, 26, 0.50),
    inset 0 0 0 1px rgba(120, 195, 225, 0.18), var(--aero-elev-1);
}
/* round gel discs — light-glass pills on the dark deck (Skyweaver pill, both
   themes), killing the base flex:1 stretch + the §16 rounded-rect radius. */
:root[data-skin="aero"] .cdp__transport .cdp__btn {
  flex: 0 0 auto; width: 42px; height: 42px; min-height: 0;
  border-radius: 999px; font-size: 15px; color: #fff;
  border: 1px solid rgba(255, 255, 255, 0.32);
  background: linear-gradient(180deg,
    rgba(255, 255, 255, 0.55) 0%, rgba(255, 255, 255, 0.10) 50%,
    rgba(255, 255, 255, 0.02) 51%, rgba(255, 255, 255, 0.14) 100%);
  box-shadow:
    inset 0 1px 0 rgba(255, 255, 255, 0.60), inset 0 0 6px rgba(255, 255, 255, 0.16),
    0 1px 2px rgba(0, 0, 0, 0.40);
  text-shadow: 0 1px 1px rgba(0, 0, 0, 0.50);
}
/* R4-11 dedup: the §38 .cdp__transport .cdp__btn:hover here was fully superseded by
   the §39 sphere hover below (same selector, later, sets bg + box-shadow), and still
   carried the old 0 0 8px outer bloom. Removed — the §39 hover owns this state. */
:root[data-skin="aero"] .cdp__transport .cdp__btn:active {
  background: linear-gradient(180deg, rgba(255, 255, 255, 0.20) 0%, rgba(255, 255, 255, 0.05) 100%);
  box-shadow: inset 0 1px 4px rgba(0, 20, 30, 0.50), inset 0 -1px 0 rgba(255, 255, 255, 0.20);
}
/* the GLOWING hero play disc (Recipe 3) — bigger, teal-filled, a teal glow ring */
:root[data-skin="aero"] .cdp__transport .cdp__btn--play {
  width: 60px; height: 60px; font-size: 22px; color: #fff;
  border: 1px solid rgba(255, 255, 255, 0.42);
  background:
    linear-gradient(180deg, rgba(255, 255, 255, 0.50) 0%, rgba(255, 255, 255, 0.08) 50%,
      rgba(120, 210, 232, 0.10) 51%, rgba(120, 210, 232, 0.22) 100%),
    linear-gradient(180deg, #46C8DC 0%, #1597AD 50%, #0E8197 100%);
  box-shadow:
    0 0 14px 1px rgba(64, 205, 228, 0.60),
    inset 0 1px 0 rgba(255, 255, 255, 0.85), inset 0 -9px 11px -7px rgba(255, 255, 255, 0.45),
    0 1px 2px rgba(0, 0, 0, 0.40);
}
:root[data-skin="aero"] .cdp__transport .cdp__btn--play:hover {
  box-shadow:
    0 0 20px 2px rgba(72, 215, 238, 0.72),
    inset 0 1px 0 rgba(255, 255, 255, 0.92), inset 0 -10px 12px -7px rgba(255, 255, 255, 0.55),
    0 1px 3px rgba(0, 0, 0, 0.45);
}
:root[data-skin="aero"] .cdp__transport .cdp__btn--play:active {
  box-shadow:
    0 0 10px 1px rgba(64, 205, 228, 0.45),
    inset 0 1px 4px rgba(0, 40, 55, 0.45), inset 0 -1px 0 rgba(255, 255, 255, 0.30);
}

/* ════════════════════════════════════════════════════════════════════════════
   §39 — CD PLAYER v2: REAL material (sphere disc + vector icons + gel transport)
   ----------------------------------------------------------------------------
   The disciplined rebuild per docs/aero-design-language.md (research + adversarial
   critic). Supersedes the §38 button/disc gloss (later in file → wins). The named
   #1 tell (play triangle not centered in a fake-bevel disc) is fixed here:
   - DISC = a real shaded SPHERE (layered radials: off-center hotspot 38%/30%,
     Fresnel rim, bottom up-bounce, body darker at the lower rim) — NOT a rounded
     rectangle with a centered linear highlight. Ref: arc.id.au sphere-shading.
   - ICONS = optically-centered vector SVG (centroid-centered play triangle), white
     with an engraved emboss — never the pixel ◄◄ ► ■ ►► glyphs (those stay for
     retro; hidden here). The play↔pause swap is driven by [data-cdp-state] which
     art-player.js now toggles instead of overwriting the icon.
   Light source is the locked azimuth-235 / elevation-55 key (every hotspot up-left).
   ════════════════════════════════════════════════════════════════════════════ */

/* ---- vector icons: hide retro glyph, show the centroid-centered SVG ---------- */
:root[data-skin="aero"] .cdp__btn > span[aria-hidden="true"] { display: none; }
:root[data-skin="aero"] .cdp__ico {
  display: block; width: 17px; height: 17px; fill: #fff;
  filter: drop-shadow(0 1px 0 rgba(255, 255, 255, 0.4)) drop-shadow(0 -1px 0.5px rgba(6, 33, 47, 0.5));
}
:root[data-skin="aero"] .cdp__btn--play .cdp__ico { width: 25px; height: 25px; }
:root[data-skin="aero"] .cdp__btn--play .cdp__ico--pause { display: none; }
:root[data-skin="aero"] .cdp__btn--play[data-cdp-state="playing"] .cdp__ico--play { display: none; }
:root[data-skin="aero"] .cdp__btn--play[data-cdp-state="playing"] .cdp__ico--pause { display: block; }

/* ---- transport gel buttons: teal candy (non-monotonic: cap + rim-bounce) ----- */
:root[data-skin="aero"] .cdp__transport .cdp__btn {
  position: relative; overflow: hidden;
  flex: 0 0 auto; width: 40px; height: 40px; min-height: 0; border-radius: 50%;
  border: 1px solid rgba(8, 90, 110, 0.65);
  /* same shaded-sphere recipe as the disc (scaled) so the row reads as ONE
     material — calmer per Elisha: a soft top sheen, no glaring hotspot or bright
     Fresnel ring; gentle bottom up-bounce; body darker at the lower rim. */
  background:
    radial-gradient(120% 70% at 50% -8%, rgba(255, 255, 255, 0.5) 0%, rgba(255, 255, 255, 0.12) 40%, rgba(255, 255, 255, 0) 64%),
    radial-gradient(120% 80% at 50% 122%, rgba(125, 228, 248, 0.28) 0%, rgba(125, 228, 248, 0) 56%),
    radial-gradient(circle at 50% 34%, #3CC0D6 0%, #15879D 58%, #0A5466 100%);
  box-shadow:
    inset 0 1px 1px rgba(255, 255, 255, 0.55),
    inset 0 -6px 10px -7px rgba(0, 40, 55, 0.4),
    inset 0 0 0 1px rgba(255, 255, 255, 0.1),
    0 1px 3px rgba(4, 33, 47, 0.38), 0 3px 7px rgba(15, 163, 177, 0.13);
  text-shadow: none;
}
:root[data-skin="aero"] .cdp__transport .cdp__btn::before { content: none; }  /* sphere owns its highlight; no flat cap */
:root[data-skin="aero"] .cdp__transport .cdp__btn:hover {
  background:
    radial-gradient(120% 70% at 50% -8%, rgba(255, 255, 255, 0.6) 0%, rgba(255, 255, 255, 0.16) 40%, rgba(255, 255, 255, 0) 64%),
    radial-gradient(120% 80% at 50% 122%, rgba(150, 238, 255, 0.34) 0%, rgba(150, 238, 255, 0) 56%),
    radial-gradient(circle at 50% 34%, #46CFE4 0%, #1796AB 58%, #0C6678 100%);
  box-shadow:
    inset 0 1px 1px rgba(255, 255, 255, 0.62),
    inset 0 -6px 10px -7px rgba(0, 40, 55, 0.38),
    inset 0 0 0 1px rgba(255, 255, 255, 0.14),
    0 1px 3px rgba(4, 33, 47, 0.4);
}
:root[data-skin="aero"] .cdp__transport .cdp__btn:active {
  background: radial-gradient(circle at 50% 40%, #1B93A8 0%, #126F83 60%, #084B58 100%);
  box-shadow:
    inset 0 2px 5px rgba(0, 30, 42, 0.6), inset 0 -1px 0 rgba(255, 255, 255, 0.18),
    inset 0 0 0 1px rgba(255, 255, 255, 0.1);
}

/* ---- the PLAY DISC: a real shaded sphere (T2), the locked reference material -- */
:root[data-skin="aero"] .cdp__transport .cdp__btn--play {
  position: relative; overflow: visible;
  width: 60px; height: 60px; border-radius: 50%;
  border: 1px solid rgba(8, 90, 110, 0.7);
  background:
    radial-gradient(120% 72% at 50% -6%, rgba(255, 255, 255, 0.62) 0%, rgba(255, 255, 255, 0.16) 42%, rgba(255, 255, 255, 0) 66%),  /* soft top sheen */
    radial-gradient(120% 82% at 50% 124%, rgba(125, 228, 248, 0.4) 0%, rgba(125, 228, 248, 0) 56%),                                 /* gentle up-bounce */
    radial-gradient(circle at 50% 34%, #46C8DC 0%, #1796AB 56%, #0B6273 100%);                                                       /* body, darker lower rim */
  box-shadow:
    inset 0 1px 1px rgba(255, 255, 255, 0.72),
    inset 0 -8px 13px -7px rgba(0, 40, 55, 0.46),
    inset 0 0 0 1px rgba(255, 255, 255, 0.12),
    0 2px 5px rgba(4, 33, 47, 0.42),
    0 0 10px rgba(52, 187, 208, 0.28);                 /* soft resting glow */
}
:root[data-skin="aero"] .cdp__transport .cdp__btn--play::before { content: none; }  /* sphere owns its own highlight */
:root[data-skin="aero"] .cdp__transport .cdp__btn--play:hover {
  box-shadow:
    inset 0 1px 1px rgba(255, 255, 255, 0.8),
    inset 0 -8px 13px -7px rgba(0, 40, 55, 0.44),
    inset 0 0 0 1px rgba(255, 255, 255, 0.16),
    0 2px 6px rgba(4, 33, 47, 0.44),
    0 0 16px rgba(64, 205, 228, 0.42);
}
:root[data-skin="aero"] .cdp__transport .cdp__btn--play:active {
  background:
    radial-gradient(circle 14px at 42% 34%, rgba(255, 255, 255, 0.7) 0%, rgba(255, 255, 255, 0) 70%),
    radial-gradient(circle at 50% 34%, #1F9DB2 0%, #137E92 56%, #084B58 100%);
  box-shadow:
    inset 0 2px 6px rgba(0, 30, 42, 0.6),
    inset 0 0 0 1px rgba(255, 255, 255, 0.14),
    0 1px 3px rgba(4, 33, 47, 0.4),
    0 0 12px rgba(52, 187, 208, 0.4);
}
:root[data-skin="aero"] .cdp__btn--play .cdp__ico {
  filter: drop-shadow(0 1px 0 rgba(255, 255, 255, 0.5)) drop-shadow(0 -1px 1px rgba(6, 33, 47, 0.45));
}

/* (Grain removed — Elisha read it as distracting static, and its rectangular
   SVG-filter region showed as a square behind the overflow:visible play disc.
   The sphere radials are smooth enough without it.) */
:root[data-skin="aero"] .cdp__transport .cdp__btn > .cdp__ico { position: relative; z-index: 1; }

/* ---- SEEK: a colored progress HIGHLIGHT (no orb) — the Skyweaver scrubber read.
   The played portion is a glowing teal fill (painted from --seek-pct, published by
   art-player.js); the handle is a slim playhead, not a bead. ----------------- */
:root[data-skin="aero"] .cdp__seek { height: 16px; --seek-pct: 0%; }
:root[data-skin="aero"] .cdp__seek::-webkit-slider-runnable-track {
  height: 7px; border-radius: 4px; border: 1px solid rgba(0, 20, 30, 0.5);
  background: linear-gradient(90deg,
    #6FDCEF 0%, #2BA7BE var(--seek-pct), rgba(6, 33, 47, 0.85) var(--seek-pct), rgba(14, 60, 80, 0.85) 100%);
  box-shadow: inset 0 1px 2px rgba(0, 15, 25, 0.6), inset 0 -1px 0 rgba(120, 210, 235, 0.22), inset 0 0 6px rgba(60, 200, 225, 0.1);
}
:root[data-skin="aero"] .cdp__seek::-moz-range-track {
  height: 7px; border-radius: 4px; border: 1px solid rgba(0, 20, 30, 0.5);
  background: rgba(10, 44, 60, 0.88); box-shadow: inset 0 1px 2px rgba(0, 15, 25, 0.6);
}
:root[data-skin="aero"] .cdp__seek::-moz-range-progress {
  height: 7px; border-radius: 4px 0 0 4px;
  background: linear-gradient(90deg, #6FDCEF, #2BA7BE); box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.32);
}
:root[data-skin="aero"] .cdp__seek::-webkit-slider-thumb {
  -webkit-appearance: none; width: 4px; height: 14px; margin-top: -4px; border-radius: 2px; border: none;
  background: linear-gradient(180deg, #EAFBFF 0%, #BDEFFB 50%, #8FE0F2 100%);
  box-shadow: 0 0 5px rgba(120, 224, 250, 0.55), 0 1px 2px rgba(4, 33, 47, 0.5);
}
:root[data-skin="aero"] .cdp__seek::-moz-range-thumb {
  width: 4px; height: 14px; border-radius: 2px; border: none;
  background: linear-gradient(180deg, #EAFBFF 0%, #BDEFFB 50%, #8FE0F2 100%);
  box-shadow: 0 0 5px rgba(120, 224, 250, 0.55), 0 1px 2px rgba(4, 33, 47, 0.5);
}
:root[data-skin="aero"] .cdp__seek::-webkit-slider-thumb:hover { filter: brightness(1.1); }

/* ---- ALBUM TABS: translucent glass lozenges with a depth RANK — the active
   album sits forward (teal gel + up-glow), the others recede (frosted, dimmer).
   Retires the §16/§38 flat-candy tab (the critic's "tabs look like the buttons"
   tell). Last albumtab rules in the file → win on source order, both themes. -- */
:root[data-skin="aero"] .cdp__albumtab {
  position: relative;
  border: 1px solid rgba(120, 175, 210, 0.5);
  border-radius: 9px 9px 6px 6px;
  color: var(--color-text);
  background-color: rgba(120, 175, 205, 0.1);
  /* inactive reads as a calm frosted pane, not a glossy button (no white cap) */
  background-image: linear-gradient(180deg,
    rgba(255, 255, 255, 0.16) 0%, rgba(255, 255, 255, 0.03) 50%, rgba(255, 255, 255, 0.07) 100%);
  box-shadow:
    inset 0 1px 0 rgba(255, 255, 255, 0.28),
    inset 0 0 0 1px rgba(255, 255, 255, 0.05),
    inset 0 -2px 4px -2px rgba(6, 33, 47, 0.14);
  opacity: 0.8;
  transition: background-color var(--speed-fast) var(--ease-soft),
              box-shadow var(--speed-fast) var(--ease-soft), opacity var(--speed-fast) var(--ease-soft);
}
:root[data-skin="aero"][data-theme="dark"] .cdp__albumtab {
  border-color: rgba(120, 195, 225, 0.4);
  color: var(--color-text);
  background-color: rgba(20, 58, 76, 0.34);
  box-shadow:
    inset 0 1px 0 rgba(190, 235, 255, 0.18),
    inset 0 0 0 1px rgba(190, 235, 255, 0.05),
    inset 0 -2px 4px -2px rgba(0, 12, 22, 0.3);
}
:root[data-skin="aero"] .cdp__albumtab:hover:not(.is-active),
:root[data-skin="aero"][data-theme="dark"] .cdp__albumtab:hover:not(.is-active) {
  opacity: 0.97;
  box-shadow:
    inset 0 1px 0 rgba(255, 255, 255, 0.66),
    0 1px 3px rgba(6, 33, 47, 0.2), var(--aero-glow-cyan);
}
:root[data-skin="aero"] .cdp__albumtab.is-active,
:root[data-skin="aero"][data-theme="dark"] .cdp__albumtab.is-active {
  opacity: 1; z-index: 2; color: #fff;
  margin-bottom: -1px;                              /* eat the seam, merge into the body */
  border-color: rgba(8, 96, 118, 0.62);
  background-color: transparent;
  background-image:
    radial-gradient(120% 130% at 50% 122%, rgba(125, 228, 248, 0.42) 0%, rgba(125, 228, 248, 0) 60%),
    linear-gradient(180deg, rgba(255, 255, 255, 0.5) 0%, rgba(255, 255, 255, 0.12) 46%,
      rgba(120, 210, 232, 0.12) 54%, rgba(120, 210, 232, 0.24) 100%),
    radial-gradient(circle at 50% 30%, #2FB4CC 0%, #15879D 60%, #0C6678 100%);
  box-shadow:
    inset 0 1px 0 rgba(255, 255, 255, 0.7),
    inset 0 0 0 1px rgba(255, 255, 255, 0.14),
    0 1px 3px rgba(6, 33, 47, 0.3);
  text-shadow: 0 1px 1px rgba(0, 42, 56, 0.45);
}

/* ---- ALBUM SELECTOR hierarchy — Elisha: "Embroidered is the one we really care
   about; Fragments just shows that sample." So it's NOT two equal tabs. The newest
   / featured record (.cdp__albumtab--primary) is the hero: wider, keeps its cover
   art, stays present even when the sample is cued. The rest (.cdp__albumtab--sample)
   recede to a slim chip with no cover and a small "sample" tag. Selecting either
   still lights it (.is-active) so playback is never ambiguous. Aero-only — retro
   keeps the two flat equal tabs (the tag is hidden in art.css). ---------------- */
:root[data-skin="aero"] .cdp__albumtab--primary { flex: 2.4 1 0; }
:root[data-skin="aero"] .cdp__albumtab--primary:not(.is-active) { opacity: 0.95; }
:root[data-skin="aero"] .cdp__albumtab--primary img { width: 30px; height: 30px; }

:root[data-skin="aero"] .cdp__albumtab--sample { flex: 1 1 0; opacity: 0.74; }
:root[data-skin="aero"] .cdp__albumtab--sample img { display: none; }
:root[data-skin="aero"] .cdp__albumtab--sample:hover:not(.is-active) { opacity: 0.96; }
:root[data-skin="aero"] .cdp__albumtab--sample.is-active { opacity: 1; }

/* the "sample" tag: a tiny lit pill that reads as a label, not a button */
:root[data-skin="aero"] .cdp__albumtab-tag {
  display: inline-flex; align-items: center; flex: none;
  margin-left: 1px; padding: 1px 5px 0;
  font-family: var(--font-body); font-size: 8.5px; font-weight: 700;
  text-transform: uppercase; letter-spacing: 0.7px;
  color: rgba(8, 64, 80, 0.82); border-radius: 999px;
  background: rgba(255, 255, 255, 0.46);
  box-shadow: inset 0 0 0 1px rgba(255, 255, 255, 0.55), 0 1px 1px rgba(6, 33, 47, 0.12);
}
:root[data-skin="aero"][data-theme="dark"] .cdp__albumtab-tag {
  color: rgba(206, 242, 255, 0.88); background: rgba(40, 92, 114, 0.52);
  box-shadow: inset 0 0 0 1px rgba(190, 235, 255, 0.24);
}
:root[data-skin="aero"] .cdp__albumtab--sample.is-active .cdp__albumtab-tag {
  color: #fff; background: rgba(255, 255, 255, 0.24);
  box-shadow: inset 0 0 0 1px rgba(255, 255, 255, 0.42);
}

/* ---- RESTORED (small) window: the big centered poster + the docked controls
   crushed the tracklist to ~2 rows when the window wasn't maximized (Elisha's
   note). Shrink the poster to the WINDOW's available height (container query, so
   it tracks the window, not the viewport) and tighten the head when short, which
   gives the playlist its rows back. Desktop only — on mobile .cdp is display:block
   / height:auto, where container-type:size would collapse it (and mobile already
   scrolls freely). ----------------------------------------------------------- */
@media (min-width: 62em) and (min-height: 36em) and (orientation: landscape) {
  :root[data-skin="aero"] .cdp { container-type: size; }
  :root[data-skin="aero"] .cdp__cover img {
    width: clamp(60px, 17cqh, 128px); height: clamp(60px, 17cqh, 128px);
  }
}
@container (max-height: 520px) {
  :root[data-skin="aero"] .cdp__head { gap: 3px; }
  :root[data-skin="aero"] .cdp__meta { gap: 1px; }
  :root[data-skin="aero"] .cdp__lcd { padding-top: 4px; padding-bottom: 4px; }
}
/* COMPACT mode — too short for the poster at all: drop the big art + meta so the
   playlist gets real rows. The active tab's thumbnail + the now-playing LCD still
   carry the album + track, so nothing essential is lost. Also slim the transport
   so the deck doesn't dominate a short window. */
@container (max-height: 430px) {
  :root[data-skin="aero"] .cdp__head { display: none; }
  :root[data-skin="aero"] .cdp__transport { padding-top: 6px; padding-bottom: 6px; gap: 9px; }
  :root[data-skin="aero"] .cdp__transport .cdp__btn { width: 34px; height: 34px; }
  :root[data-skin="aero"] .cdp__transport .cdp__btn .cdp__ico { width: 15px; height: 15px; }
  :root[data-skin="aero"] .cdp__transport .cdp__btn--play { width: 48px; height: 48px; }
  :root[data-skin="aero"] .cdp__transport .cdp__btn--play .cdp__ico { width: 21px; height: 21px; }
}

/* ---- kill leftover pixel/mono text in the Aero player — humanist throughout
   (Elisha: "still some pixel text in that CD player"). Durations/time keep
   tabular figures so columns still line up. -------------------------------- */
:root[data-skin="aero"] .cdp__sub,
:root[data-skin="aero"] .cdp__link,
:root[data-skin="aero"] .cdp__track-n,
:root[data-skin="aero"] .cdp__track-title,
:root[data-skin="aero"] .cdp__track-dur,
:root[data-skin="aero"] .cdp .art-status,
:root[data-skin="aero"] .cdp .art-status__cell { font-family: var(--font-body); }
:root[data-skin="aero"] .cdp__track-n,
:root[data-skin="aero"] .cdp__track-dur,
:root[data-skin="aero"] .cdp__lcd-no,
:root[data-skin="aero"] .cdp__lcd-time { font-variant-numeric: tabular-nums; }

/* ---- mobile: .cdp is display:block there, so the flex gap collapses and the
   stacked tabs / LCD / poster TOUCH (Elisha: tabs hitting the track text).
   Restore the vertical rhythm with margins. -------------------------------- */
@media (max-width: 61.99em), (max-height: 35.99em), (orientation: portrait) {
  :root[data-skin="aero"] .cdp > * + * { margin-top: 9px; }
}

/* ════════════════════════════════════════════════════════════════════════════
   §40 — ART-SWITCH (mobile medium selector) → frosted segmented control
   ----------------------------------------------------------------------------
   Elisha: the Photography/Music/Poetry chips sat on a flat var(--color-desktop)
   strip ("weird border that doesn't feel aero"). Make the sticky bar a real
   FROSTED-GLASS toolbar (page content blurs under it as it sticks), and give the
   chips the calm album-tab material (active = lit teal, inactive = frosted glass)
   instead of the old §16 candy. The .art-switch ancestor lifts specificity over
   the §16 shared chip list so these win in both themes. Mobile only. --------- */
@media (max-width: 61.99em), (max-height: 35.99em), (orientation: portrait) {
  :root[data-skin="aero"] .art-switch {
    background: linear-gradient(180deg, rgba(190, 224, 240, 0.24), rgba(130, 185, 212, 0.14));
    backdrop-filter: blur(14px) saturate(1.5);
    -webkit-backdrop-filter: blur(14px) saturate(1.5);
    border-bottom: 1px solid rgba(120, 175, 210, 0.45);
    box-shadow: 0 3px 10px rgba(6, 33, 47, 0.16), inset 0 1px 0 rgba(255, 255, 255, 0.5);
  }
  :root[data-skin="aero"][data-theme="dark"] .art-switch {
    background: linear-gradient(180deg, rgba(22, 62, 82, 0.52), rgba(10, 40, 56, 0.4));
    border-bottom-color: rgba(120, 195, 225, 0.32);
    box-shadow: 0 3px 10px rgba(0, 12, 22, 0.4), inset 0 1px 0 rgba(190, 235, 255, 0.22);
  }
}
:root[data-skin="aero"] .art-switch .art-switch__chip {
  border: 1px solid rgba(120, 175, 210, 0.5); border-radius: 8px; color: var(--color-text);
  background-color: rgba(150, 200, 225, 0.1);
  background-image: linear-gradient(180deg, rgba(255, 255, 255, 0.18) 0%, rgba(255, 255, 255, 0.03) 50%, rgba(255, 255, 255, 0.07) 100%);
  box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.4), inset 0 -2px 4px -2px rgba(6, 33, 47, 0.12);
}
:root[data-skin="aero"][data-theme="dark"] .art-switch .art-switch__chip {
  border-color: rgba(120, 195, 225, 0.4); background-color: rgba(20, 58, 76, 0.34);
  box-shadow: inset 0 1px 0 rgba(190, 235, 255, 0.2), inset 0 -2px 4px -2px rgba(0, 12, 22, 0.3);
}
:root[data-skin="aero"] .art-switch .art-switch__chip:hover:not(.is-active) {
  box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.5), inset 0 -2px 4px -2px rgba(6, 33, 47, 0.12), var(--aero-glow-cyan);
}
:root[data-skin="aero"] .art-switch .art-switch__chip.is-active {
  color: #fff; border-color: rgba(8, 96, 118, 0.6); background-color: transparent;
  background-image:
    radial-gradient(120% 130% at 50% 120%, rgba(125, 228, 248, 0.4) 0%, rgba(125, 228, 248, 0) 60%),
    linear-gradient(180deg, rgba(255, 255, 255, 0.4) 0%, rgba(255, 255, 255, 0.1) 46%, rgba(120, 210, 232, 0.12) 54%, rgba(120, 210, 232, 0.22) 100%),
    radial-gradient(circle at 50% 30%, #2FB4CC 0%, #15879D 60%, #0C6678 100%);
  box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.6), 0 1px 3px rgba(6, 33, 47, 0.28);
  text-shadow: 0 1px 1px rgba(0, 42, 56, 0.45);
}

/* ════════════════════════════════════════════════════════════════════════════
   §41 — WINDOW CONTROL BUTTONS: crisp icon masks (replace the _ / ▢ glyphs)
   ----------------------------------------------------------------------------
   The min/max buttons rendered Unicode glyphs (_ and ▢) — the same pixel-glyph
   tell the transport had. Mask in clean vector marks (a minimize bar, a maximize
   squircle) colored by the button's own text color, so they read crisp on every
   window. Aero only (font-size:0 hides the glyph; retro keeps it). data: masks are
   CSP-ok (img-src 'self' https: data:). ------------------------------------- */
:root[data-skin="aero"] .window__btn {
  font-size: 0;
  /* calmer than the §5 candy cap (which other .btn keep): a soft top sheen, not a
     strong white gloss — matches the player's restraint. Surface + border stay
     (from §5) so the control is still clearly visible. */
  box-shadow:
    inset 0 1px 0 rgba(255, 255, 255, 0.55),
    inset 0 -5px 7px -6px rgba(255, 255, 255, 0.28),
    inset 0 0 0 1px rgba(255, 255, 255, 0.13),
    0 1px 2px rgba(16, 70, 110, 0.2);
}
:root[data-skin="aero"][data-theme="dark"] .window__btn {
  box-shadow:
    inset 0 1px 0 rgba(180, 230, 250, 0.32),
    inset 0 -5px 7px -6px rgba(180, 230, 250, 0.28),
    inset 0 0 0 1px rgba(180, 230, 250, 0.1),
    0 1px 2px rgba(0, 12, 22, 0.3);
}
/* Icon goes on ::after — ::before is the base hit-area extender (window.css:247,
   position:absolute inset:-3px -2px; widened again on mobile). Reusing ::before
   pinned the 12px icon box to the button's top-left AND ate the WCAG touch target.
   ::after is centered with the absolute inset:0/margin:auto trick, pointer-events
   off so clicks still fall through to the button + its ::before hit area. */
:root[data-skin="aero"] .window__btn::after {
  content: ""; position: absolute; inset: 0; margin: auto;
  width: 12px; height: 12px; pointer-events: none;
  background: currentColor;
  -webkit-mask: center / contain no-repeat; mask: center / contain no-repeat;
}
:root[data-skin="aero"] .window__btn[data-action="minimize"]::after {
  -webkit-mask-image: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'><rect x='3.4' y='10.3' width='9.2' height='1.7' rx='.85' fill='%23fff'/></svg>");
  mask-image: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'><rect x='3.4' y='10.3' width='9.2' height='1.7' rx='.85' fill='%23fff'/></svg>");
}
:root[data-skin="aero"] .window__btn[data-action="maximize"]::after {
  -webkit-mask-image: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'><rect x='3.5' y='3.5' width='9' height='9' rx='1.4' fill='none' stroke='%23fff' stroke-width='1.7'/></svg>");
  mask-image: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'><rect x='3.5' y='3.5' width='9' height='9' rx='1.4' fill='none' stroke='%23fff' stroke-width='1.7'/></svg>");
}

/* ============================================================
   42. VISTA DESKTOP GADGET — the glass analog clock (Home)
   A Windows-Sidebar homage: a frosted glass puck sitting ON the desktop
   (fixed, --z-stickers layer, under every window), showing Pacific time
   under a "Cascadia" chip while the taskbar clock stays visitor-local.
   Markup lives in Layout.astro (ships [hidden]); gadgets.js reveals it
   under this skin only and drives --gad-h/m/s. Deployed on HOME by
   default; on other pages it folds into the taskbar tray (§51 dock) —
   click the tray clock to pop it out / put it back, remembered per
   page-class. The face follows the GLASS
   recipe: low-alpha tinted body over backdrop-blur, full-perimeter bright
   inner rim inside a dark hairline, hard-break gloss cap, bottom rim-bounce,
   tinted drop. Hands are white vector bars with the engraved emboss.
   DRAGGABLE (Elisha): a real gadget moves. clock-gadget.js owns the
   --gad-x/--gad-y offsets (pointer drag + localStorage), CSS owns the
   transform — the same drag architecture as the windows. It rests UNDER
   windows (--z-stickers; desktop furniture gets covered, that's the
   metaphor) and lifts above them only mid-drag so you can see the drop.
   Desktop-only furniture: deploys only inside the compound windowing gate
   (width + height + landscape) — phones and squat viewports keep the
   wallpaper clean.
   ============================================================ */
/* Shared gadget shell — the clock rides this today; any future gadget
   rides it too (per-gadget rules below set only the default berth). */
:root[data-skin="aero"] .gadget { display: none; }
@media (min-width: 62em) and (min-height: 36em) and (orientation: landscape) {
  :root[data-skin="aero"] .gadget:not([hidden]) {
    position: fixed;
    bottom: calc(var(--taskbar-height) + var(--space-3));
    z-index: var(--z-stickers);
    display: flex;
    flex-direction: column;
    align-items: center;
    gap: 7px;
    transform: translate3d(var(--gad-x, 0px), var(--gad-y, 0px), 0);
    cursor: grab;
    touch-action: none;      /* pointer drag, not page scroll, on touch */
    -webkit-user-select: none;
    user-select: none;
  }
  /* default berth — clear of the icon rail (~150px) */
  :root[data-skin="aero"] .gadget--clock:not([hidden])   { left: 196px; }
  :root[data-skin="aero"] .gadget.is-dragging {
    cursor: grabbing;
    z-index: calc(var(--z-icons) + 10);
  }
  /* fresh pop-out from the §51 dock rides above the windows until the next
     press elsewhere (Vista's bring-gadgets-to-front tray behavior) */
  :root[data-skin="aero"] .gadget.is-peek {
    z-index: calc(var(--z-icons) + 10);
  }
}
:root[data-skin="aero"] .gadget__face {
  position: relative;
  width: 132px;
  height: 132px;
  border-radius: 50%;
  border: 1px solid rgba(8, 42, 68, 0.60);
  background:
    /* tick ring (quarters heavier) */
    url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 132 132'><g stroke='%23E9F8FF' stroke-opacity='0.80' stroke-linecap='round'><g stroke-width='3.4'><line x1='66' y1='18' x2='66' y2='8'/><line x1='114' y1='66' x2='124' y2='66'/><line x1='66' y1='114' x2='66' y2='124'/><line x1='18' y1='66' x2='8' y2='66'/></g><g stroke-width='2'><line x1='91.5' y1='21.8' x2='95' y2='15.8'/><line x1='110.2' y1='40.5' x2='116.2' y2='37'/><line x1='110.2' y1='91.5' x2='116.2' y2='95'/><line x1='91.5' y1='110.2' x2='95' y2='116.2'/><line x1='40.5' y1='110.2' x2='37' y2='116.2'/><line x1='21.8' y1='91.5' x2='15.8' y2='95'/><line x1='21.8' y1='40.5' x2='15.8' y2='37'/><line x1='40.5' y1='21.8' x2='37' y2='15.8'/></g></g></svg>") center / 100% 100% no-repeat,
    radial-gradient(120% 120% at 50% 24%, rgba(196, 238, 252, 0.18) 0%, rgba(196, 238, 252, 0) 46%),
    radial-gradient(150% 150% at 50% 118%, rgba(90, 200, 230, 0.30) 0%, rgba(90, 200, 230, 0) 54%),
    linear-gradient(180deg, rgba(15, 50, 78, 0.62) 0%, rgba(9, 32, 54, 0.55) 55%, rgba(6, 24, 44, 0.64) 100%);
  -webkit-backdrop-filter: blur(9px) saturate(1.5);
          backdrop-filter: blur(9px) saturate(1.5);
  box-shadow:
    inset 0 0 0 1px rgba(255, 255, 255, 0.30),
    inset 0 10px 14px -8px rgba(255, 255, 255, 0.32),
    inset 0 -12px 18px -10px rgba(90, 200, 230, 0.28),
    0 4px 16px rgba(4, 20, 38, 0.42),
    0 1px 2px rgba(4, 20, 38, 0.55);
}
/* Hard-break gloss cap — the Aero specular tell, shaped to the dome. */
:root[data-skin="aero"] .gadget__face::before {
  content: "";
  position: absolute;
  inset: 5px 12px auto 12px;
  height: 46%;
  border-radius: 100px 100px 58px 58px / 90px 90px 34px 34px;
  pointer-events: none;
  background: linear-gradient(180deg,
    rgba(255, 255, 255, 0.42) 0%, rgba(255, 255, 255, 0.10) 88%,
    rgba(255, 255, 255, 0) 100%);
}
:root[data-skin="aero"] .gadget__hand {
  position: absolute;
  left: 50%;
  bottom: 50%;
  transform-origin: 50% 100%;
  border-radius: 3px;
  background: #F2FBFF;
  box-shadow: 0 0 2px rgba(6, 33, 47, 0.60), 0 1px 1px rgba(6, 33, 47, 0.40);
}
:root[data-skin="aero"] .gadget__hand--h { width: 5px;   height: 32px; margin-left: -2.5px;  transform: rotate(var(--gad-h, 300deg)); }
:root[data-skin="aero"] .gadget__hand--m { width: 3.5px; height: 46px; margin-left: -1.75px; transform: rotate(var(--gad-m, 60deg)); }
:root[data-skin="aero"] .gadget__hand--s { width: 2px;   height: 50px; margin-left: -1px;    background: #7FE0F0; transform: rotate(var(--gad-s, 0deg)); }
:root[data-skin="aero"] .gadget__cap {
  position: absolute;
  left: 50%;
  top: 50%;
  width: 10px;
  height: 10px;
  margin: -5px 0 0 -5px;
  border-radius: 50%;
  background: radial-gradient(circle at 35% 30%, #FFFFFF 0%, #BFEAF5 55%, #4FB6CE 100%);
  box-shadow: 0 1px 2px rgba(4, 20, 38, 0.50);
}
/* Label chip — same glass-chip idiom as the desktop-icon labels. */
:root[data-skin="aero"] .gadget__label {
  font-family: var(--font-body);
  font-size: 11px;
  letter-spacing: 0.6px;
  color: #EAF6FD;
  background: rgba(8, 40, 58, 0.62);
  border-radius: 5px;
  padding: 2px 9px;
  text-shadow: 0 1px 2px rgba(0, 0, 0, 0.5);
  -webkit-backdrop-filter: blur(3px);
          backdrop-filter: blur(3px);
}
/* LIGHT theme — paler glass, slate hands/ticks so the face reads on the sky. */
:root[data-skin="aero"]:not([data-theme="dark"]) .gadget__face {
  border-color: rgba(70, 136, 178, 0.62);
  background:
    url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 132 132'><g stroke='%23113C58' stroke-opacity='0.74' stroke-linecap='round'><g stroke-width='3.4'><line x1='66' y1='18' x2='66' y2='8'/><line x1='114' y1='66' x2='124' y2='66'/><line x1='66' y1='114' x2='66' y2='124'/><line x1='18' y1='66' x2='8' y2='66'/></g><g stroke-width='2'><line x1='91.5' y1='21.8' x2='95' y2='15.8'/><line x1='110.2' y1='40.5' x2='116.2' y2='37'/><line x1='110.2' y1='91.5' x2='116.2' y2='95'/><line x1='91.5' y1='110.2' x2='95' y2='116.2'/><line x1='40.5' y1='110.2' x2='37' y2='116.2'/><line x1='21.8' y1='91.5' x2='15.8' y2='95'/><line x1='21.8' y1='40.5' x2='15.8' y2='37'/><line x1='40.5' y1='21.8' x2='37' y2='15.8'/></g></g></svg>") center / 100% 100% no-repeat,
    radial-gradient(120% 120% at 50% 24%, rgba(255, 255, 255, 0.30) 0%, rgba(255, 255, 255, 0) 46%),
    radial-gradient(150% 150% at 50% 118%, rgba(96, 168, 205, 0.24) 0%, rgba(96, 168, 205, 0) 54%),
    linear-gradient(180deg, rgba(247, 252, 255, 0.60) 0%, rgba(214, 234, 248, 0.52) 55%, rgba(190, 218, 239, 0.60) 100%);
  box-shadow:
    inset 0 0 0 1px rgba(255, 255, 255, 0.55),
    inset 0 10px 14px -8px rgba(255, 255, 255, 0.55),
    inset 0 -12px 18px -10px rgba(60, 122, 168, 0.22),
    0 4px 16px rgba(30, 70, 110, 0.28),
    0 1px 2px rgba(30, 70, 110, 0.35);
}
:root[data-skin="aero"]:not([data-theme="dark"]) .gadget__hand {
  background: #123C5A;
  box-shadow: 0 0 2px rgba(255, 255, 255, 0.55), 0 1px 1px rgba(30, 70, 110, 0.35);
}
:root[data-skin="aero"]:not([data-theme="dark"]) .gadget__hand--s { background: #0E8197; }
/* Reduced motion: a once-a-second ticking hand is still motion — drop it and
   keep the hour/minute readout (they move once a minute at most). */
@media (prefers-reduced-motion: reduce) {
  :root[data-skin="aero"] .gadget__hand--s { display: none; }
}

/* ============================================================
   43. START MENU → VISTA TWO-PANE  (places | system)
   The Win9x single column becomes the Vista anatomy: a BRIGHT places pane
   on the left (the six pages as "programs", gel glyphs) and a DARK glass
   system pane on the right (user tile, Settings flyout, About, Shut Down).
   The vertical "CASCADIA OS" banner is a Win9x idiom — hidden here; retro
   keeps it. Markup ships in Layout.astro; base startmenu.css hides the two
   new blocks so the classic menu is untouched. startmenu.js needs no
   changes (the links are role="menuitem").
   ============================================================ */
/* HOTFIX (same-night): two guards this rule originally missed —
   (1) :not([hidden]) — display:grid beat the UA's [hidden]{display:none}, so
       the CLOSED menu rendered permanently on the desktop;
   (2) :not(.context-menu) — the right-click menu REUSES .start-menu
       (context-menu.js:150) and was getting the 500px two-column grid. */
:root[data-skin="aero"] .start-menu:not(.context-menu):not([hidden]) {
  display: grid;
  grid-template-columns: 1fr;
  padding: 0;
  /* NO overflow here (regression fix): the Settings flyout is position:absolute
     and must ESCAPE the menu box — any non-visible overflow clips it dead
     (startmenu.css documents this; task #30 was this exact bug in retro).
     Corner-fit is handled by rounding the system pane itself, below. */
}
@media (min-width: 62em) and (min-height: 36em) and (orientation: landscape) {
  :root[data-skin="aero"] .start-menu:not(.context-menu):not([hidden]) {
    grid-template-columns: minmax(198px, 0.92fr) minmax(248px, 1fr);
    width: 500px;
    max-width: calc(100vw - 24px);
  }
}
:root[data-skin="aero"] .start-menu__banner { display: none; }

/* LEFT — places pane rides the menu's bright glass; just a hairline seam. */
:root[data-skin="aero"] .start-menu__places {
  display: block;
  padding: 8px 7px;
  border-right: 1px solid rgba(120, 175, 210, 0.40);
  box-shadow: inset -1px 0 0 rgba(255, 255, 255, 0.55);
}
:root[data-skin="aero"] .start-menu__places-list {
  list-style: none;
  margin: 0;
  padding: 0;
  display: flex;
  flex-direction: column;
  gap: 2px;
}
:root[data-skin="aero"] .start-menu__places .start-menu__item {
  display: flex;
  align-items: center;
  gap: 11px;
  padding: 8px 10px;
  font-size: 14.5px;
  font-weight: 500;
  color: var(--color-text);
  text-decoration: none;
}
/* Places GLYPHS — the same six gel silhouettes as the desktop rail. icons.js
   injects the retro pixel sprite into every .start-menu__icon[data-icon]; hide
   it here (exactly like .desktop-icon__img) so the gel body + mask show. */
:root[data-skin="aero"] .start-menu__places .start-menu__icon > svg,
:root[data-skin="aero"] .start-menu__places .start-menu__icon > img { display: none; }
:root[data-skin="aero"] .start-menu__places .start-menu__icon {
  width: 25px;
  height: 25px;
  flex: none;
  background-repeat: no-repeat;
  background-position: center;
  background-image:
    radial-gradient(120% 80% at 38% 28%, rgba(255,255,255,0.55) 0%, rgba(255,255,255,0) 44%),
    radial-gradient(130% 130% at 50% 28%, #3FC4DA 0%, #0FA3B1 52%, #0A5C6A 100%);
  filter: drop-shadow(0 1px 1.5px rgba(6, 33, 47, 0.45));
}
:root[data-skin="aero"] .start-menu__places .start-menu__icon[data-icon="home"]    { -webkit-mask: var(--gico-home)    center / 23px no-repeat; mask: var(--gico-home)    center / 23px no-repeat; }
:root[data-skin="aero"] .start-menu__places .start-menu__icon[data-icon="about"]   { -webkit-mask: var(--gico-about)   center / 22px no-repeat; mask: var(--gico-about)   center / 22px no-repeat; }
:root[data-skin="aero"] .start-menu__places .start-menu__icon[data-icon="work"]    { -webkit-mask: var(--gico-work)    center / 23px no-repeat; mask: var(--gico-work)    center / 23px no-repeat; }
:root[data-skin="aero"] .start-menu__places .start-menu__icon[data-icon="blog"]    { -webkit-mask: var(--gico-blog)    center / 22px no-repeat; mask: var(--gico-blog)    center / 22px no-repeat; }
:root[data-skin="aero"] .start-menu__places .start-menu__icon[data-icon="contact"] { -webkit-mask: var(--gico-contact) center / 23px no-repeat; mask: var(--gico-contact) center / 23px no-repeat; }
:root[data-skin="aero"] .start-menu__places .start-menu__icon[data-icon="art"]     { -webkit-mask: var(--gico-art)     center / 23px no-repeat; mask: var(--gico-art)     center / 23px no-repeat; }

/* RIGHT — dark glass system pane (Vista's right column, in our fjord teal).
   The pane rounds its own OUTER corners to sit flush inside the menu's 13px
   radius (single column: it's the bottom block → bottom corners; two-pane
   inside the windowing gate: it's the right column → right corners) — the
   menu itself must stay
   overflow:visible for the Settings flyout. */
:root[data-skin="aero"] .start-menu__system {
  display: flex;
  flex-direction: column;
  padding: 8px 7px;
  border-radius: 0 0 calc(var(--aero-radius-lg) - 1px) calc(var(--aero-radius-lg) - 1px);
  background:
    linear-gradient(180deg,
      rgba(196, 232, 250, 0.10) 0%, rgba(196, 232, 250, 0) 18%),
    linear-gradient(180deg, rgba(12, 42, 66, 0.86) 0%, rgba(7, 28, 50, 0.88) 60%, rgba(5, 22, 42, 0.90) 100%);
  box-shadow:
    inset 0 1px 0 rgba(255, 255, 255, 0.16),
    inset 1px 0 0 rgba(0, 0, 0, 0.25);
}
@media (min-width: 62em) and (min-height: 36em) and (orientation: landscape) {
  :root[data-skin="aero"] .start-menu__system {
    border-radius: 0 calc(var(--aero-radius-lg) - 1px) calc(var(--aero-radius-lg) - 1px) 0;
  }
}
:root[data-skin="aero"] .start-menu__system .start-menu__list { flex: 1; }
:root[data-skin="aero"] .start-menu__system .start-menu__item { color: #E6F4FB; }
:root[data-skin="aero"] .start-menu__system .start-menu__sep {
  border-color: rgba(160, 220, 245, 0.22);
  box-shadow: 0 1px 0 rgba(0, 0, 0, 0.30);
}
/* USER TILE — glossy rounded frame around the pixel avatar, Vista-style. */
:root[data-skin="aero"] .start-menu__user {
  display: flex;
  align-items: center;
  gap: 10px;
  padding: 6px 8px 10px;
  margin-bottom: 4px;
  border-bottom: 1px solid rgba(160, 220, 245, 0.20);
}
:root[data-skin="aero"] .start-menu__user-frame {
  position: relative;
  width: 48px;
  height: 48px;
  flex: none;
  border-radius: 10px;
  overflow: hidden;
  border: 1px solid rgba(255, 255, 255, 0.55);
  box-shadow:
    inset 0 1px 0 rgba(255, 255, 255, 0.65),
    0 2px 6px rgba(2, 14, 26, 0.55);
}
:root[data-skin="aero"] .start-menu__user-frame img {
  display: block;
  width: 100%;
  height: 100%;
  image-rendering: pixelated;  /* her pixel avatar stays crisp */
}
/* candy gloss sweep over the portrait (same hard break as the app tiles) */
:root[data-skin="aero"] .start-menu__user-frame::after {
  content: "";
  position: absolute;
  inset: 0;
  pointer-events: none;
  background: linear-gradient(to bottom,
    rgba(255, 255, 255, 0.38) 0%, rgba(255, 255, 255, 0.10) 47%,
    rgba(255, 255, 255, 0) 48%);
}
:root[data-skin="aero"] .start-menu__user-name {
  font-family: var(--font-body);
  font-size: 14.5px;
  font-weight: 600;
  letter-spacing: 0.2px;
  color: #F0F8FD;
  text-shadow: 0 1px 2px rgba(0, 10, 20, 0.55);
}
/* DARK theme — the bright pane dims with the menu's dark glass (§ dark
   .start-menu handles the shell); places ink + seam adapt. */
:root[data-skin="aero"][data-theme="dark"] .start-menu__places {
  border-right-color: rgba(120, 195, 225, 0.24);
  box-shadow: inset -1px 0 0 rgba(160, 220, 245, 0.10);
}

/* §43 continued — the R4 wordmark STRIP (34px sky-gel background layers on
   .start-menu:not(.context-menu), above) backed the rotated "CASCADIA OS"
   banner this two-pane menu no longer shows. Repaint the menu shell with the
   §7 frost stack sans strip, per theme (equal specificity, later = wins). */
:root[data-skin="aero"] .start-menu:not(.context-menu) {
  background-image:
    radial-gradient(125% 70% at 50% -22%,
      rgba(255,255,255,0.95) 0%, rgba(255,255,255,0.55) 18%,
      rgba(255,255,255,0.12) 38%, rgba(255,255,255,0) 52%),
    linear-gradient(180deg,
      rgba(244,251,254,0.55) 0%, rgba(223,241,250,0.30) 30%,
      rgba(206,232,250,0.18) 60%, rgba(196,228,248,0.34) 100%);
  background-position: center, center;
  background-size: auto, auto;
}
:root[data-skin="aero"][data-theme="dark"] .start-menu:not(.context-menu) {
  background-image:
    radial-gradient(125% 70% at 50% -22%,
      rgba(190,235,255,0.30) 0%, rgba(190,235,255,0.14) 18%,
      rgba(190,235,255,0.04) 38%, rgba(190,235,255,0) 52%),
    linear-gradient(180deg,
      rgba(16,50,71,0.55) 0%, rgba(14,43,61,0.40) 30%,
      rgba(12,40,58,0.34) 60%, rgba(10,35,52,0.46) 100%);
  background-position: center, center;
  background-size: auto, auto;
}

/* ============================================================
   44. SKIN-AWARE OS VERSION — Cascadia 7
   The retro skin is Cascadia 95; this skin is Cascadia 7 (the Aero era).
   boot.css hides [data-ver-aero] by default; flip the pair here. The About
   dialog string is handled at open time in startmenu.js. The BIOS POST line
   stays v95 in both skins — firmware doesn't change with the OS.
   ============================================================ */
:root[data-skin="aero"] [data-ver-retro] { display: none; }
:root[data-skin="aero"] [data-ver-aero] { display: inline; }

/* ============================================================
   45. SHELL-BLUR MOBILE TIER — see --aero-shell-blur (token block).
   ============================================================ */
@media (max-width: 61.99em), (max-height: 35.99em), (orientation: portrait) {
  :root[data-skin="aero"] { --aero-shell-blur: 10px; }
}

/* ============================================================
   46. (retired 2026-07-02) NOW READING GADGET — duplicated the
   attention.log's information, Elisha's call. The §42 shell it rode
   stays generic; the §51 dock is where gadgets live when folded away.
   ============================================================ */

/* ============================================================
   47. ABOUT — VISTA USER-ACCOUNT HERO + EVEN TROPHY PLAQUES
   (Elisha's picks from the rendered comparison, 2026-07-02.)
   The README window leads with the PERSON, not a .txt file: her avatar in
   the §43 glossy user-frame idiom, the name in big humanist type, a role
   line in her own README words, and an MSN-wink presence row. Retro keeps
   README.txt untouched (base CSS hides .about-hero; the flip lives here).
   Her prose below — including the "where a system ends and their agency
   begins" reveal — is untouched: this is chrome above her words.
   ============================================================ */
:root[data-skin="aero"] .readme__head,
:root[data-skin="aero"] .readme__rule { display: none; }
:root[data-skin="aero"] .about-hero {
  display: flex;
  align-items: center;
  gap: 16px;
  margin: 2px 0 20px;
}
:root[data-skin="aero"] .about-hero__frame {
  position: relative;
  width: 86px;
  height: 86px;
  flex: none;
  border-radius: 14px;
  overflow: hidden;
  border: 1px solid rgba(255, 255, 255, 0.55);
  box-shadow:
    inset 0 1px 0 rgba(255, 255, 255, 0.65),
    0 3px 10px rgba(2, 14, 26, 0.45);
}
:root[data-skin="aero"] .about-hero__frame img {
  display: block;
  width: 100%;
  height: 100%;
  image-rendering: pixelated;
}
/* candy gloss sweep over the portrait (same hard break as the §43 user tile) */
:root[data-skin="aero"] .about-hero__frame::after {
  content: "";
  position: absolute;
  inset: 0;
  pointer-events: none;
  background: linear-gradient(to bottom,
    rgba(255, 255, 255, 0.34) 0%, rgba(255, 255, 255, 0.08) 46%,
    rgba(255, 255, 255, 0) 47%);
}
:root[data-skin="aero"] .about-hero__id { min-width: 0; }
:root[data-skin="aero"] .about-hero__name {
  display: block;
  font-family: var(--font-body);
  font-size: 27px;
  font-weight: 600;
  letter-spacing: 0.2px;
  line-height: 1.15;
  color: var(--color-text);
}
:root[data-skin="aero"] .about-hero__role {
  display: block;
  margin-top: 4px;
  font-size: 14.5px;
  color: var(--color-text-muted);
}
:root[data-skin="aero"] .about-hero__status {
  display: inline-flex;
  align-items: center;
  margin-top: 7px;
  font-family: var(--font-mono);
  font-size: 12px;
  letter-spacing: 0.8px;
  color: var(--color-text-muted);
}
:root[data-skin="aero"][data-theme="dark"] .about-hero__name {
  color: #F2FAFF;
  text-shadow: 0 1px 2px rgba(0, 10, 20, 0.55);
}
:root[data-skin="aero"][data-theme="dark"] .about-hero__role {
  color: rgba(178, 214, 232, 0.92);
}

/* §47 continued — TROPHY PLAQUES: fold the featured District row back into
   the shared frosted-plaque recipe (the sky-candy slab read as a STUCK
   SELECTION — Elisha's call from the comparison). Its slightly larger gel
   glyph + 1.2rem accent title (earlier rules) stay as the quiet distinction;
   the WINNER/FINALIST chips do the ranking. Same-specificity, later-in-file:
   these re-declarations beat the §"featured candy" block above, and the
   hover/active deltas are restated so the plaque keeps live feedback. */
:root[data-skin="aero"] .tc-row--featured {
  color: var(--color-text);
  border: 1px solid rgba(120, 175, 210, 0.55);
  background:
    linear-gradient(180deg,
      rgba(255, 255, 255, 0.30) 0%, rgba(255, 255, 255, 0.00) 22%),
    linear-gradient(180deg,
      rgba(244, 251, 254, 0.48) 0%, rgba(223, 241, 250, 0.34) 100%);
  box-shadow:
    inset 0 1px 0 rgba(255, 255, 255, 0.80),
    inset 0 0 0 1px rgba(255, 255, 255, 0.16),
    var(--aero-elev-1);
}
:root[data-skin="aero"][data-theme="dark"] .tc-row--featured {
  color: var(--color-text);
  border-color: rgba(120, 195, 225, 0.28);
  background:
    linear-gradient(180deg,
      rgba(120, 200, 235, 0.10) 0%, rgba(120, 200, 235, 0.00) 22%),
    linear-gradient(180deg,
      rgba(16, 50, 71, 0.48) 0%, rgba(10, 35, 52, 0.40) 100%);
  box-shadow:
    inset 0 1px 0 rgba(160, 220, 245, 0.18),
    inset 0 0 0 1px rgba(160, 220, 245, 0.08),
    var(--aero-elev-2);
}
:root[data-skin="aero"] .tc-row--featured:hover {
  box-shadow:
    inset 0 1px 0 rgba(255, 255, 255, 0.92),
    inset 0 0 0 1px rgba(255, 255, 255, 0.26),
    var(--aero-elev-2),
    var(--aero-glow-cyan);
}
:root[data-skin="aero"] .tc-row--featured:active {
  box-shadow:
    inset 0 1px 3px rgba(16, 70, 110, 0.30),
    inset 0 -1px 0 rgba(255, 255, 255, 0.45),
    var(--aero-elev-1);
}
:root[data-skin="aero"][data-theme="dark"] .tc-row--featured:hover {
  box-shadow:
    inset 0 1px 0 rgba(160, 220, 245, 0.30),
    inset 0 0 0 1px rgba(160, 220, 245, 0.16),
    var(--aero-elev-2),
    var(--aero-glow-cyan);
}
:root[data-skin="aero"][data-theme="dark"] .tc-row--featured:active {
  box-shadow:
    inset 0 1px 3px rgba(0, 12, 22, 0.40),
    inset 0 -1px 0 rgba(160, 220, 245, 0.20),
    var(--aero-elev-1);
}
/* With the slab gone, the 1.2rem featured title just wraps three ragged
   lines in its squeezed column — the accent color + 40px glyph are enough
   distinction. Same size as its siblings under aero. */
:root[data-skin="aero"] .tc-row--featured .tc-title { font-size: var(--text-sm); }

/* ============================================================
   49. FAVORITES → COVER FLOW  (the era's signature shelf)
   Elisha: the About redesign was "tamer than I thought, especially the
   favorites tab." So: iTunes-7 Cover Flow, full anatomy — source list on
   the left (already ours), the shelf spanning the full body width, and
   the caption strip UNDER the flow instead of a side pane (that pane both
   crushed the shelf and repeated the center cover). The SAME .fav__cover
   buttons the grid uses (same data, same focus order) rearrange into a 3D
   carousel on black glass — iTunes shelved covers on black even in light
   UIs. favorites-explorer.js writes each cover's signed distance from the
   selection to --d; every transform derives from that one number, so
   clicking a side cover swings it to center in one glide. Retro + mobile
   keep the flat grid + drill-in detail (aero + ≥75em scoped, matching the
   3-pane breakpoint); reduced-motion keeps the arrangement, drops the glide.
   ============================================================ */
@media (min-width: 75em) and (min-height: 36em) and (orientation: landscape) {
  /* Cover Flow needs runway — lift the 660px About cap (that bound exists
     for the retro 2-column cover GRID; a shelf wants width). The About
     grid's 1.5fr track already has the room on desktop. */
  :root[data-skin="aero"] .layout__grid.page-about .about__favorites .window {
    max-width: 900px;
  }
  /* …and the ≥86em right-lean grid sizes the favorites TRACK at 660 to match
     the retro window — widen the track too or the window can't take the room. */
  @media (min-width: 86em) {
    :root[data-skin="aero"] .layout__grid.page-about {
      grid-template-columns: minmax(0, 1fr) minmax(0, 520px) minmax(0, 900px) minmax(0, 0.55fr);
    }
  }
}
/* THE SHELF — every aero width (2026-07-04, Elisha: "we have some beautiful
   Cover Flow features that just don't show up on mobile"). The 75em gate above
   keeps only the About GRID sizing; the flow itself now rides --cf-* size
   tokens, compacted by the ≤720px tier below. Retro keeps grid + drill-in
   at every width. Indentation kept from the old media wrapper. */
  /* content column: shelf on top, caption strip under it */
  :root[data-skin="aero"] .fav__content {
    flex-direction: column;
  }
  :root[data-skin="aero"] .fav__grids { flex: none; width: 100%; }
  :root[data-skin="aero"] .fav__grid:not([hidden]) {
    --cf-h: 312px;      /* stage height        */
    --cf-persp: 1100px; /* camera distance     */
    --cf-w: 168px;      /* cover width         */
    --cf-gap: 118px;    /* per-step spread     */
    --cf-z: 112px;      /* center pop-forward  */
    display: block;
    position: relative;
    height: var(--cf-h);
    perspective: var(--cf-persp);
    touch-action: pan-y; /* vertical page scroll stays native; horizontal swipes feed the flow */
    /* clip, not hidden: an overflow:hidden box can still be SCROLLED — when a
       click focuses a side cover that pokes past the edge, the browser
       auto-scrolls this box to reveal it and the whole shelf paints shifted
       by the stale scrollLeft. clip forbids scrolling outright (the JS also
       zeroes scroll as a belt for engines without clip). */
    overflow: clip;
    border-radius: var(--aero-radius);
    background:
      radial-gradient(120% 90% at 50% 0%, rgba(140, 210, 240, 0.10) 0%, rgba(140, 210, 240, 0) 55%),
      linear-gradient(180deg, rgba(5, 16, 28, 0.60) 0%, rgba(3, 10, 18, 0.78) 100%);
    box-shadow:
      inset 0 1px 0 rgba(255, 255, 255, 0.10),
      inset 0 0 44px rgba(0, 0, 0, 0.35);
  }
  :root[data-skin="aero"] .fav__grid:not([hidden]) .fav__cover {
    position: absolute;
    left: 50%;
    /* 47%, not 40% (Elisha: "sitting right on the top line") — a 2:3 book at
       168px wide is 252px tall, and centered at 40% its top edge landed at
       -1px, kissing the stage border. 47% gives tall covers ~20px of headroom
       and lets the shelf read cover-first, reflection-second. */
    top: 47%;
    width: var(--cf-w);
    transform:
      translate(-50%, -50%)
      translateX(calc(var(--d, 0) * var(--cf-gap)))
      rotateY(calc(clamp(-1, var(--d, 0), 1) * -55deg))
      translateZ(calc((1 - min(1, var(--d, 0) * var(--d, 0))) * var(--cf-z)));
    transition: transform 0.38s var(--ease-soft, ease-out);
    -webkit-box-reflect: below 2px
      linear-gradient(transparent 55%, rgba(255, 255, 255, 0.30) 100%);
  }
  /* being front-and-center IS the selection — the cyan ring is noise here
     (keyboard users keep the :focus-visible ring) */
  :root[data-skin="aero"] .fav__grid:not([hidden]) .fav__cover.is-sel {
    outline: none;
    border-color: var(--bevel-darker);
    box-shadow: var(--shadow-hard, 3px 3px 0 rgba(0, 0, 0, 0.35));
  }
  /* bare art on the shelf, like the era — tiles that HAVE art drop their
     caption strip (coverless/doc tiles keep their text, it IS their face) */
  :root[data-skin="aero"] .fav__grid:not([hidden]) .fav__cover:has(img) .fav__cover-t {
    display: none;
  }
  /* detail pane → the caption strip under the shelf (iTunes put the title
     under the flow). The big pane cover dies — the shelf center IS it. */
  :root[data-skin="aero"] .fav__detail {
    flex: none;
    width: auto;
    margin-top: 10px;
    padding: 2px 0 0;
    display: flex;
    flex-direction: row;
    flex-wrap: wrap;
    align-items: baseline;
    justify-content: center;
    gap: 4px 14px;
    text-align: center;
    background: transparent;
    border: none;
    box-shadow: none;
  }
  :root[data-skin="aero"] .fav__detail-cover,
  :root[data-skin="aero"] .fav__detail-back { display: none; }
  :root[data-skin="aero"] .fav__detail-title { font-size: 17px; }
  :root[data-skin="aero"] .fav__detail-note {
    flex: 0 1 100%;
    max-width: 62ch;
    margin: 2px auto 0;
  }
  @media (prefers-reduced-motion: reduce) {
    :root[data-skin="aero"] .fav__grid:not([hidden]) .fav__cover { transition: none; }
  }

/* the drill-in layer (favorites.css ≤74.99em) hides the grid when a cover
   opens and shows a full-pane detail with a Back button — right for retro,
   wrong for the shelf, where the caption strip and the flow coexist. Keep
   the shelf on stage and let the caption strip BE the detail. */
@media (max-width: 74.99em) {
  :root[data-skin="aero"] .fav.is-detail-open .fav__grids { display: block; }
  :root[data-skin="aero"] .fav.is-detail-open .fav__detail-back { display: none; }
}
/* compact tier — phone-sized stage, same anatomy */
@media (max-width: 720px) {
  :root[data-skin="aero"] .fav__grid:not([hidden]) {
    --cf-h: 236px;
    --cf-persp: 760px;
    --cf-w: 116px;
    --cf-gap: 76px;
    --cf-z: 72px;
  }
  :root[data-skin="aero"] .fav__detail-title { font-size: 15px; }
  :root[data-skin="aero"] .fav__detail-note { max-width: 100%; }
}

/* ============================================================
   50. SAME-PAGE ACK — the nav-ack.js pulse, Aero voice
   Clicking the sidebar icon of the page you're already on gets an
   acknowledgment instead of a silent swap (see nav-ack.js). Retro
   answers with the hard Win95 label blink (desktop.css); here that
   blink is suppressed and the gel glyph does a soft springy pulse.
   ============================================================ */
:root[data-skin="aero"] .desktop-icon.is-ack .desktop-icon__label { animation: none; }
:root[data-skin="aero"] .desktop-icon.is-ack .desktop-icon__img {
  animation: aero-icon-ack 0.5s cubic-bezier(0.34, 1.56, 0.64, 1);
}
@keyframes aero-icon-ack {
  0%   { transform: scale(1); }
  38%  { transform: scale(1.16); }
  100% { transform: scale(1); }
}
@media (prefers-reduced-motion: reduce) {
  :root[data-skin="aero"] .desktop-icon.is-ack .desktop-icon__img { animation: none; }
}

/* ============================================================
   51. GADGET DOCK — gadgets folded into the taskbar tray
   The Windows-Sidebar notification-area idiom: on pages other than
   Home the desktop gadgets live in this tray button; clicking pops
   them out / puts them back (gadgets.js owns the state — the button
   ships [hidden] and stays hidden under retro / mobile / no-JS).
   The face is a LIVE miniature of the §42 clock: same --gad-h/m
   hands, same glass material at 22px. aria-pressed = deployed.
   ============================================================ */
:root[data-skin="aero"] .gadget-dock:not([hidden]) {
  display: grid;
  place-items: center;
  width: 30px;
  height: 30px;
  padding: 0;
  border-radius: 8px;
  border: 1px solid transparent;
  background: transparent;
}
:root[data-skin="aero"] .gadget-dock:not([hidden]):hover,
:root[data-skin="aero"] .gadget-dock:not([hidden]):focus-visible {
  border-color: rgba(255, 255, 255, 0.30);
  background: linear-gradient(180deg, rgba(255, 255, 255, 0.20) 0%, rgba(255, 255, 255, 0.06) 100%);
}
/* latched = gadgets deployed on this page (same pressed language as the
   Settings segmented controls: darker well, sunk highlight) */
:root[data-skin="aero"] .gadget-dock[aria-pressed="true"]:not([hidden]) {
  border-color: rgba(8, 42, 68, 0.55);
  background: linear-gradient(180deg, rgba(6, 26, 44, 0.38) 0%, rgba(10, 36, 58, 0.24) 100%);
  box-shadow: inset 0 1px 3px rgba(2, 14, 26, 0.45);
}
:root[data-skin="aero"] .gadget-dock__face {
  position: relative;
  width: 22px;
  height: 22px;
  border-radius: 50%;
  border: 1px solid rgba(8, 42, 68, 0.60);
  background:
    radial-gradient(120% 120% at 50% 24%, rgba(196, 238, 252, 0.20) 0%, rgba(196, 238, 252, 0) 50%),
    linear-gradient(180deg, rgba(15, 50, 78, 0.72) 0%, rgba(9, 32, 54, 0.66) 55%, rgba(6, 24, 44, 0.74) 100%);
  box-shadow:
    inset 0 0 0 1px rgba(255, 255, 255, 0.30),
    inset 0 3px 4px -2px rgba(255, 255, 255, 0.38),
    0 1px 2px rgba(4, 20, 38, 0.45);
}
:root[data-skin="aero"] .gadget-dock__hand {
  position: absolute;
  left: 50%;
  bottom: 50%;
  transform-origin: 50% 100%;
  border-radius: 1px;
  background: #F2FBFF;
}
:root[data-skin="aero"] .gadget-dock__hand--h { width: 2px;   height: 6px;   margin-left: -1px;    transform: rotate(var(--gad-h, 300deg)); }
:root[data-skin="aero"] .gadget-dock__hand--m { width: 1.5px; height: 8.5px; margin-left: -0.75px; transform: rotate(var(--gad-m, 60deg)); }
/* LIGHT theme — the paler face + slate hands of the §42 light clock. */
:root[data-skin="aero"]:not([data-theme="dark"]) .gadget-dock__face {
  border-color: rgba(70, 136, 178, 0.62);
  background:
    radial-gradient(120% 120% at 50% 24%, rgba(255, 255, 255, 0.34) 0%, rgba(255, 255, 255, 0) 50%),
    linear-gradient(180deg, rgba(247, 252, 255, 0.72) 0%, rgba(214, 234, 248, 0.62) 55%, rgba(190, 218, 239, 0.70) 100%);
  box-shadow:
    inset 0 0 0 1px rgba(255, 255, 255, 0.55),
    inset 0 3px 4px -2px rgba(255, 255, 255, 0.60),
    0 1px 2px rgba(30, 70, 110, 0.32);
}
:root[data-skin="aero"]:not([data-theme="dark"]) .gadget-dock__hand { background: #123C5A; }
:root[data-skin="aero"]:not([data-theme="dark"]) .gadget-dock[aria-pressed="true"]:not([hidden]) {
  border-color: rgba(70, 136, 178, 0.55);
  background: linear-gradient(180deg, rgba(120, 170, 205, 0.30) 0%, rgba(160, 200, 228, 0.18) 100%);
  box-shadow: inset 0 1px 3px rgba(30, 70, 110, 0.30);
}

/* Pop-out entrance — the gadget glides up from the tray's direction and
   settles. Runs whenever a gadget goes hidden→shown (page load, skin flip,
   dock click); transition:persist keeps it from replaying on every nav. */
:root[data-skin="aero"] .gadget:not([hidden]) {
  animation: gadget-arrive 0.26s ease-out;
}
@keyframes gadget-arrive {
  from {
    opacity: 0;
    transform: translate3d(var(--gad-x, 0px), calc(var(--gad-y, 0px) + 14px), 0) scale(0.94);
  }
}
@media (prefers-reduced-motion: reduce) {
  :root[data-skin="aero"] .gadget:not([hidden]) { animation: none; }
}

/* ============================================================
   52. HOME INTRO — the welcome tile gets the user-frame glass
   Elisha: "the glass bubble thing... on the readme with the profile
   picture — I feel like you could bring that to the introduction."
   Same §43/§47 user-frame material — white glass rim, inset top
   highlight, hard-break candy sweep, tinted drop — at HERO scale:
   128px, the biggest user tile in the OS. About's account card stays
   86px with its role/location column, so the two surfaces read as one
   idiom at two ranks (welcome screen vs. user account), not clones.
   The sweep sits ABOVE the block-dissolve canvas (z 2 > 1) but with
   pointer-events:none so hover-to-reveal still reaches the tile.
   ============================================================ */
:root[data-skin="aero"] .avatar--photo {
  border: 1px solid rgba(255, 255, 255, 0.55);
  border-radius: 18px;
  box-shadow:
    inset 0 1px 0 rgba(255, 255, 255, 0.65),
    0 4px 14px rgba(2, 14, 26, 0.45);
}
:root[data-skin="aero"] .avatar--photo::after {
  content: "";
  position: absolute;
  inset: 0;
  z-index: 2;
  pointer-events: none;
  border-radius: inherit;
  background: linear-gradient(to bottom,
    rgba(255, 255, 255, 0.34) 0%, rgba(255, 255, 255, 0.08) 46%,
    rgba(255, 255, 255, 0) 47%);
}

/* ============================================================
   53. TROPHY CABINET — the Trophy Case becomes a display case
   (Elisha's greenlit tier-3.) At desktop widths under Aero the
   plaque rows become a glass display cabinet: the featured honor
   stands alone on the top shelf, the rest in pairs below — each
   award a gel statuette standing ON a glass ledge with its placard
   beneath it. Ledges are drawn per grid cell with column-gap 0, so
   a pair's two segments meet into one continuous shelf; the
   featured cell spans the full row for its own shelf. Grounding
   comes from the trophy-shaped drop-shadow (filter applies AFTER
   the mask, so it follows the silhouette — a ::after would be
   clipped by the mask). Retro + mobile Aero keep the plaque rows.
   Everything §17/§47 gave .tc-row is restated here to win by
   source order, including the [data-theme=dark] doubles (higher
   specificity than the plain rules — they must be beaten in kind).
   ============================================================ */
@media (min-width: 721px) {
  /* cabinet interior — a quiet inset well behind the shelves */
  :root[data-skin="aero"] .tc-list {
    display: grid;
    grid-template-columns: 1fr 1fr;
    column-gap: 0;
    row-gap: 30px;
    padding: 22px 14px 12px;
    border-radius: 12px;
    border: 1px solid rgba(120, 175, 210, 0.42);
    background: linear-gradient(180deg,
      rgba(255, 255, 255, 0.30) 0%, rgba(226, 243, 251, 0.14) 100%);
    box-shadow: inset 0 2px 6px rgba(16, 70, 110, 0.10);
  }
  :root[data-skin="aero"][data-theme="dark"] .tc-list {
    border-color: rgba(120, 195, 225, 0.22);
    background: linear-gradient(180deg,
      rgba(120, 200, 235, 0.07) 0%, rgba(8, 30, 46, 0.38) 100%);
    box-shadow: inset 0 2px 8px rgba(0, 12, 22, 0.30);
  }

  /* stands + shelves. Each li draws its ledge segment; the pair meets in the
     middle (gap 0). Rounded ends only at the outer edges: featured (full
     span) rounds both; even cells are LEFT segments, odd (non-first) RIGHT.
     (5 honors today = featured + two full pairs; a future unpaired last
     honor would show a single left segment with a square right end — fine.) */
  :root[data-skin="aero"] .tc-list > li {
    position: relative;
    padding-bottom: 11px; /* room for the ledge below the placard */
  }
  :root[data-skin="aero"] .tc-list > li:first-child { grid-column: 1 / -1; }
  :root[data-skin="aero"] .tc-list > li::after {
    content: "";
    position: absolute;
    left: 0;
    right: 0;
    bottom: 0;
    height: 7px;
    background: linear-gradient(180deg,
      rgba(255, 255, 255, 0.92) 0%, rgba(255, 255, 255, 0.92) 14%,
      rgba(205, 233, 246, 0.75) 15%, rgba(150, 200, 226, 0.60) 60%,
      rgba(103, 152, 182, 0.62) 100%);
    box-shadow: 0 3px 7px rgba(16, 70, 110, 0.28);
  }
  :root[data-skin="aero"][data-theme="dark"] .tc-list > li::after {
    background: linear-gradient(180deg,
      rgba(185, 232, 250, 0.55) 0%, rgba(185, 232, 250, 0.55) 14%,
      rgba(96, 156, 190, 0.42) 15%, rgba(48, 96, 126, 0.44) 60%,
      rgba(18, 48, 68, 0.60) 100%);
    box-shadow: 0 3px 8px rgba(0, 10, 20, 0.45);
  }
  :root[data-skin="aero"] .tc-list > li:first-child::after { border-radius: 3px; }
  :root[data-skin="aero"] .tc-list > li:nth-child(even)::after { border-radius: 3px 0 0 3px; }
  :root[data-skin="aero"] .tc-list > li:nth-child(odd):not(:first-child)::after { border-radius: 0 3px 3px 0; }

  /* the launcher button becomes a stand: statuette over placard, centered,
     resting on the ledge. Undo the §17/§47 plaque chrome in BOTH themes. */
  :root[data-skin="aero"] .tc-row,
  :root[data-skin="aero"][data-theme="dark"] .tc-row,
  :root[data-skin="aero"] .tc-row--featured,
  :root[data-skin="aero"][data-theme="dark"] .tc-row--featured {
    display: flex;
    flex-direction: column;
    align-items: center;
    justify-content: flex-end;
    gap: 0;
    width: 100%;
    padding: 0 10px 8px;
    border: none;
    border-radius: 8px;
    background: none;
    box-shadow: none;
    color: inherit;
    text-shadow: none;
  }
  :root[data-skin="aero"] .tc-row:hover,
  :root[data-skin="aero"][data-theme="dark"] .tc-row:hover,
  :root[data-skin="aero"] .tc-row--featured:hover,
  :root[data-skin="aero"][data-theme="dark"] .tc-row--featured:hover,
  :root[data-skin="aero"] .tc-row:active,
  :root[data-skin="aero"][data-theme="dark"] .tc-row:active,
  :root[data-skin="aero"] .tc-row--featured:active,
  :root[data-skin="aero"][data-theme="dark"] .tc-row--featured:active {
    background: none;
    box-shadow: none;
  }

  /* statuette: bigger gel award, grounded by a silhouette shadow; hover
     lifts it off the shelf (the shadow softens + falls further below).
       The shared --gico-* masks live on a 24×24 canvas with AIR around each
     glyph (right for inline icons; here the cup's empty canvas bottom read
     as a dead void and shrank the award to ~60% of its box). These are the
     SAME paths on TIGHT viewBoxes, rendered contain + bottom-anchored, so
     every statuette stands full-size on its box bottom at its natural
     proportions — squat cups, slender rosette, square star. */
  :root[data-skin="aero"] .tc-list {
    --tcab-cup: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='4.2 3.5 15.6 11.3'><path fill='%23fff' d='M7 3.5 h10 v2.3 a5 5 0 0 1 -3.6 4.8 V13.2 h2.4 v1.6 h-7.6 v-1.6 h2.4 V10.6 A5 5 0 0 1 7 5.8 Z'/><path fill='%23fff' fill-rule='evenodd' d='M7 4.4 a2.8 2.8 0 0 0 0 5.6 v-1.6 a1.3 1.3 0 0 1 0 -2.4 Z'/><path fill='%23fff' fill-rule='evenodd' d='M17 4.4 a2.8 2.8 0 0 1 0 5.6 v-1.6 a1.3 1.3 0 0 0 0 -2.4 Z'/></svg>");
    --tcab-rosette: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='6 1.8 12 20.2'><path fill='%23fff' d='M9.2 12.6 L7.4 21 L10.4 19.1 L12 22 L13.6 19.1 L16.6 21 L14.8 12.6 Z'/><path fill='%23fff' fill-rule='evenodd' d='M12 1.8 a6 6 0 1 0 0 12 a6 6 0 1 0 0 -12 Z M12 4.9 a2.9 2.9 0 1 0 0 5.8 a2.9 2.9 0 1 0 0 -5.8 Z'/></svg>");
    --tcab-star: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='2.5 2.5 19 18'><path fill='%23fff' d='M12 2.5 L14.6 9 L21.5 9.4 L16.2 13.8 L18 20.5 L12 16.7 L6 20.5 L7.8 13.8 L2.5 9.4 L9.4 9 Z'/></svg>");
  }
  :root[data-skin="aero"] .tc-row .tc-ic {
    width: 52px;
    height: 46px;
    margin: 0 0 8px; /* explicit — no base side margins survive into the stack */
    filter:
      drop-shadow(0 1px 0 rgba(255, 255, 255, 0.40))
      drop-shadow(0 5px 4px rgba(6, 33, 47, 0.38));
    transition: transform var(--speed-fast) var(--ease-soft), filter var(--speed-fast) var(--ease-soft);
  }
  :root[data-skin="aero"] .tc-row .tc-ic[data-ic="goldcup"],
  :root[data-skin="aero"] .tc-row .tc-ic[data-ic="silvercup"] {
    -webkit-mask: var(--tcab-cup) center bottom / contain no-repeat;
    mask: var(--tcab-cup) center bottom / contain no-repeat;
  }
  :root[data-skin="aero"] .tc-row .tc-ic[data-ic="rosette"] {
    -webkit-mask: var(--tcab-rosette) center bottom / contain no-repeat;
    mask: var(--tcab-rosette) center bottom / contain no-repeat;
  }
  :root[data-skin="aero"] .tc-row .tc-ic[data-ic="star"] {
    -webkit-mask: var(--tcab-star) center bottom / contain no-repeat;
    mask: var(--tcab-star) center bottom / contain no-repeat;
  }
  /* featured = a bigger box; contain rescales the same masks, no size rules */
  :root[data-skin="aero"] .tc-row--featured .tc-ic {
    width: 66px;
    height: 56px;
  }
  :root[data-skin="aero"] .tc-row:hover .tc-ic {
    transform: translateY(-4px);
    filter:
      drop-shadow(0 1px 0 rgba(255, 255, 255, 0.40))
      drop-shadow(0 9px 7px rgba(6, 33, 47, 0.30));
  }
  :root[data-skin="aero"] .tc-row:active .tc-ic {
    transform: translateY(-1px);
    transition-duration: 60ms;
  }

  /* placard: quiet centered engraving under each statuette. flex 0 kills the
     base row layout's flex:1 — grown, it opened a dead void between the
     statuette and its title in the column stack. */
  :root[data-skin="aero"] .tc-row .tc-info {
    flex: 0 0 auto;
    display: flex;
    flex-direction: column;
    align-items: center;
    gap: 2px;
    text-align: center;
    min-width: 0;
  }
  /* (sizes bumped 2026-07-03 — Elisha: "some text too small, though icons
     are sized well") */
  :root[data-skin="aero"] .tc-row .tc-title,
  :root[data-skin="aero"] .tc-row--featured .tc-title {
    font-size: 14.5px;
    font-weight: 600;
    line-height: 1.3;
  }
  :root[data-skin="aero"] .tc-row--featured .tc-title { font-size: 16.5px; }
  :root[data-skin="aero"] .tc-row .tc-sub {
    font-size: 12px;
    color: var(--color-text-muted);
  }
  /* the tier chip shrinks to a placard medal — row-scale it out-shouted the
     engraving on a centered stand */
  :root[data-skin="aero"] .tc-row .tc-chip {
    margin-top: 6px;
    font-size: 10.5px;
    padding: 2.5px 10px;
  }
  /* the media-count caption folds away in the cabinet — the address line
     already says awards open into photos & video; the placard stays clean */
  :root[data-skin="aero"] .tc-row .tc-count { display: none; }

  @media (prefers-reduced-motion: reduce) {
    :root[data-skin="aero"] .tc-row .tc-ic { transition: none; }
    :root[data-skin="aero"] .tc-row:hover .tc-ic { transform: none; }
  }
}

/* ============================================================
   54. THE ADDRESS BAR — one Vista breadcrumb field, everywhere
   Elisha: the location bars ("Recognition › awards", C:\Work, the
   Favorites path) each improvised, looked different from each other,
   and none hit the era. This is the real Vista Explorer anatomy,
   shared by every window with a location: a NEAR-WHITE recessed
   FIELD (Vista's address bar stayed a white well even on glass
   chrome — it must read as a field, not one more decorative glass
   panel), the location's gel icon at the left, crumb text in the
   humanist UI face (never mono — mono is the retro skin's DOS
   voice), solid ▸ triangle separators (Vista's chevrons, not a
   typed ›), all crumbs full-ink REGULAR weight (Vista never bolded
   the leaf), and any usage hint pushed to the right edge, muted,
   where the search zone lived. Dark theme keeps the same anatomy on
   a recessed dark field — Vista never shipped dark; this is the
   equivalent, not an invention. Crumb segments stay non-interactive
   because none of them navigate anywhere real; hover-button chrome
   on a dead crumb would be a lie.
   (The Work .folder boxes deliberately KEEP the §17 glass well —
   they're content containers, not location fields.)
   ============================================================ */
:root[data-skin="aero"] .tc-addr,
:root[data-skin="aero"] .fav__bar,
:root[data-skin="aero"] .explorer__bar {
  display: flex;
  align-items: center;
  gap: 8px;
  min-height: 30px;
  padding: 4px 10px;
  border: 1px solid rgba(96, 130, 155, 0.62);
  border-radius: 3px;
  background: linear-gradient(180deg, #FFFFFF 0%, #F2F7FA 100%);
  box-shadow: inset 0 1px 2px rgba(20, 60, 90, 0.14);
  font-family: var(--font-body);
  font-size: 13px;
  letter-spacing: 0.1px;
  color: var(--color-text);
}
:root[data-skin="aero"][data-theme="dark"] .tc-addr,
:root[data-skin="aero"][data-theme="dark"] .fav__bar,
:root[data-skin="aero"][data-theme="dark"] .explorer__bar {
  border-color: rgba(140, 200, 230, 0.26);
  background: linear-gradient(180deg, rgba(4, 18, 30, 0.66) 0%, rgba(9, 30, 46, 0.52) 100%);
  box-shadow: inset 0 1px 2px rgba(0, 10, 20, 0.40);
}

/* location icon — the place's gel glyph at the field's left edge (the aqua
   folder recipe verbatim; the Work bar already has its span-based folder). */
:root[data-skin="aero"] .tc-addr::before,
:root[data-skin="aero"] .fav__bar::before {
  content: "";
  width: 17px;
  height: 17px;
  flex: none;
  background-repeat: no-repeat;
  background-position: center;
  background-image:
    radial-gradient(120% 80% at 38% 30%, rgba(255,255,255,0.55) 0%, rgba(255,255,255,0) 42%),
    radial-gradient(130% 130% at 50% 30%, #3FC4DA 0%, #0FA3B1 52%, #0A5C6A 100%);
  filter: drop-shadow(0 0 1px rgba(4,38,52,0.6)) drop-shadow(0 1px 1px rgba(6,33,47,0.42));
}
:root[data-skin="aero"] .tc-addr::before {
  -webkit-mask: var(--gico-cup) center / 21px no-repeat;
          mask: var(--gico-cup) center / 21px no-repeat;
}
:root[data-skin="aero"] .fav__bar::before {
  -webkit-mask: var(--gico-star) center / 19px no-repeat;
          mask: var(--gico-star) center / 19px no-repeat;
}
:root[data-skin="aero"] .explorer__bar-icon {
  width: 17px;
  height: 17px;
  flex: none;
}

/* crumbs — one voice: full ink, regular weight, no mono */
:root[data-skin="aero"] .fav__path {
  font-size: 13px;
  color: var(--color-text);
}
:root[data-skin="aero"] .fav__crumb,
:root[data-skin="aero"] .addr-crumb,
:root[data-skin="aero"] .explorer__path {
  font-family: var(--font-body);
  font-weight: 400;
  color: var(--color-text);
  white-space: nowrap;
}
:root[data-skin="aero"] .fav__crumb[data-fav-leaf] {
  font-weight: 400;
  color: var(--color-text);
}
:root[data-skin="aero"][data-theme="dark"] .fav__path { color: var(--color-text); }
:root[data-skin="aero"][data-theme="dark"] .fav__crumb[data-fav-leaf] { color: var(--color-text); }

/* separators — Vista's solid ▸, drawn (clip-path), never typed */
:root[data-skin="aero"] .fav__crumb + .fav__crumb::before,
:root[data-skin="aero"] .addr-crumb + .addr-crumb::before {
  content: "";
  display: inline-block;
  width: 6px;
  height: 9px;
  margin: 0 8px -0.5px;
  clip-path: polygon(0 0, 100% 50%, 0 100%);
  background: currentColor;
  opacity: 0.5;
}
:root[data-skin="aero"][data-theme="dark"] .fav__crumb + .fav__crumb::before {
  color: inherit; /* kill the old teal chevron tint; currentColor everywhere */
}

/* the tc bar's usage hint rides the right edge, muted — the search zone */
:root[data-skin="aero"] .tc-addr [data-ver-aero] { display: contents; }
:root[data-skin="aero"] .addr-hint {
  margin-left: auto;
  flex: 0 1 auto;
  min-width: 0;
  font-size: 12px;
  color: var(--color-text-muted);
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}

/* ============================================================
   55. README → RENDERED MARKDOWN (aero)
   Elisha: "three bulleted points of text with a weird highlight
   look... use markdown effects to carry the metaphor farther, keep
   the copy." Retro's README is a .txt — ▸ markers and a marker-pen
   highlight are its voice, untouched. Aero's README renders as the
   era's OTHER readme: a rendered .md document (GitHub is a 2008
   artifact — period-correct). Zero copy changes:
   • paragraphs lose the ▸ list dressing — markdown paragraphs are
     just prose
   • the `---` horizontal rule returns under the user tile (§47 hid
     the .txt file-header DRESSING; a rule is document structure)
   • the closing paragraph — her thesis — renders as a markdown
     BLOCKQUOTE: soft evergreen left bar, full ink
   • the "where a system ends…" reveal renders as a markdown LINK
     (underlined accent, no highlight wash) — same button, still
     opens the A-Means-to-an-End reader
   ============================================================ */
:root[data-skin="aero"] .readme__body > p {
  padding-left: 0;
}
:root[data-skin="aero"] .readme__body > p::before { content: none; }
:root[data-skin="aero"] .readme__rule { display: block; }
:root[data-skin="aero"] .readme__body > p:last-child {
  margin-top: var(--space-3);
  padding: 2px 0 2px 14px;
  border-left: 3px solid color-mix(in srgb, var(--color-accent) 45%, transparent);
}
:root[data-skin="aero"] .readme__reveal {
  padding: 0;
  border-radius: 0;
  background: none;
  box-shadow: none;
  color: var(--color-accent);
  text-decoration: underline;
  text-decoration-thickness: 1px;
  text-underline-offset: 3px;
  text-decoration-color: color-mix(in srgb, var(--color-accent) 55%, transparent);
}
:root[data-skin="aero"] .readme__reveal:hover {
  background: none;
  color: var(--color-accent);
  text-shadow: none;
  text-decoration-thickness: 2px;
  text-decoration-color: var(--color-accent);
}

/* ============================================================
   56. PHOTOGRAPHY → WINDOWS PHOTO GALLERY
   Elisha's research pick ("do the photo gallery"). The cork board
   is retro's photography voice — cork + paper is materially wrong
   for a glass-and-light skin, so at desktop widths Aero renders the
   era's canonical photo app instead (Windows Photo Gallery, Vista
   2006): an ACHROMATIC gallery canvas (neutral, never teal — the
   neutrality is what makes photographs pop), upright prints in thin
   white frames on a grid, hover-grow, album stacks as a second
   print peeking from behind, and the signature bottom CONTROL BAR —
   info left, the big round slide-show button dead center (wired by
   art-gallery.js to the existing viewer; its next/prev IS the slide
   show), and a WORKING thumbnail-size slider right (--pg-thumb
   drives the grid's fixed tracks). Only real controls — no fake
   rotate/delete. Retro keeps the cork board at every width.
   EVERY aero width since 2026-07-04 (Elisha: mobile was losing the
   tier-3 metaphors) — the ≤720px tier at the section tail compacts
   the thumb size; art-gallery.js reads the computed --pg-thumb so
   the slider starts where the CSS default sits.
   ============================================================ */
  /* canvas — achromatic recessed gallery well. Tracks are FIXED at
     --pg-thumb (not minmax + 1fr): Photo Gallery's zoom scales every
     thumbnail continuously, rows re-wrap, leftover space sits right.
     A stretchy 1fr floor only reflowed at column-count thresholds, so
     dragging the slider felt dead until release (Elisha-flagged). */
  :root[data-skin="aero"] .board__surface {
    --pg-thumb: 148px;
    display: grid;
    grid-template-columns: repeat(auto-fill, var(--pg-thumb));
    gap: 20px 16px;
    align-content: start;
    padding: 16px;
    background-color: #EDF1F5;
    background-image: none;
    border: 1px solid rgba(96, 130, 155, 0.45);
    border-radius: 4px;
    box-shadow: inset 0 1px 3px rgba(20, 60, 90, 0.14);
  }
  :root[data-skin="aero"][data-theme="dark"] .board__surface {
    background-color: #151A21;
    border-color: rgba(140, 200, 230, 0.20);
    box-shadow: inset 0 1px 3px rgba(0, 8, 16, 0.50);
  }

  /* prints — upright, thin white frame, no cork paraphernalia */
  :root[data-skin="aero"] .board__surface .pin {
    width: auto;
    margin: 0;
    padding: 0;
    background: none;
    border: none;
    box-shadow: none;
    color: var(--color-text);
    transform: none;
    transition: transform var(--speed-fast) var(--ease-soft);
  }
  :root[data-skin="aero"] .board__surface .pin:hover,
  :root[data-skin="aero"] .board__surface .pin:focus-visible {
    transform: scale(1.05);
    box-shadow: none;
    z-index: 4;
  }
  :root[data-skin="aero"] .board__surface .pin:focus-visible {
    outline: 2px solid var(--aero-focus);
    outline-offset: 3px;
  }
  :root[data-skin="aero"] .pin__pushpin { display: none; }
  :root[data-skin="aero"] .pin__photo {
    border: 4px solid #FFFFFF;
    border-radius: 2px;
    box-shadow:
      0 1px 2px rgba(10, 25, 40, 0.35),
      0 3px 9px rgba(10, 25, 40, 0.22);
    transition: box-shadow var(--speed-fast) var(--ease-soft);
  }
  :root[data-skin="aero"] .board__surface .pin:hover .pin__photo {
    box-shadow:
      0 1px 2px rgba(10, 25, 40, 0.38),
      0 6px 16px rgba(10, 25, 40, 0.30),
      var(--aero-glow-cyan);
  }
  /* album = a second print peeking from behind (Vista grouped photos as
     STACKS; the retro paper ::before underlay retires) */
  :root[data-skin="aero"] .pin--stack::before { content: none; }
  :root[data-skin="aero"] .pin--stack .pin__photo {
    box-shadow:
      4px 4px 0 -1px #F2F5F8,
      4px 4px 0 0 rgba(96, 130, 155, 0.45),
      0 1px 2px rgba(10, 25, 40, 0.35),
      0 3px 9px rgba(10, 25, 40, 0.22);
  }
  :root[data-skin="aero"] .pin__count {
    top: 9px;
    right: 9px;
    border: none;
    border-radius: 3px;
    padding: 2px 6px;
    background: rgba(8, 24, 38, 0.78);
  }
  :root[data-skin="aero"] .pin__cap {
    margin-top: 7px;
    font-family: var(--font-body);
    font-size: 12px;
    line-height: 1.25;
    text-transform: none;
    letter-spacing: 0;
    color: var(--color-text-muted);
  }
  :root[data-skin="aero"] .board__view {
    font-family: var(--font-body);
    font-size: 12px;
  }

  /* control bar replaces the retro status strip */
  :root[data-skin="aero"] .board .art-status { display: none; }
  :root[data-skin="aero"] .pg-bar {
    display: grid;
    grid-template-columns: 1fr auto 1fr;
    align-items: center;
    flex-shrink: 0;
    margin: var(--space-2) var(--space-3) var(--space-3);
    padding: 5px 12px;
    min-height: 48px;
    border: 1px solid rgba(96, 130, 155, 0.45);
    border-radius: 5px;
    background: linear-gradient(180deg, #FAFCFE 0%, #E9EFF4 100%);
    box-shadow:
      inset 0 1px 0 rgba(255, 255, 255, 0.85),
      0 1px 3px rgba(20, 60, 90, 0.10);
  }
  :root[data-skin="aero"][data-theme="dark"] .pg-bar {
    border-color: rgba(140, 200, 230, 0.20);
    background: linear-gradient(180deg, rgba(24, 34, 45, 0.92) 0%, rgba(13, 21, 30, 0.88) 100%);
    box-shadow:
      inset 0 1px 0 rgba(160, 220, 245, 0.12),
      0 1px 3px rgba(0, 8, 16, 0.30);
  }
  /* THE round slide-show button — Vista's signature control. Explicit grid
     placement: the counts cell died (Elisha: "I don't even know if that's
     really that useful... a little AI cliché"), so play pins to the center
     track and zoom to the right one by name, not by flow order. */
  :root[data-skin="aero"] .pg-bar__play { grid-column: 2; }
  :root[data-skin="aero"] .pg-bar__zoom { grid-column: 3; }
  :root[data-skin="aero"] .pg-bar__play {
    position: relative;
    width: 38px;
    height: 38px;
    padding: 0;
    border: 1px solid rgba(8, 60, 84, 0.65);
    border-radius: 50%;
    cursor: pointer;
    background:
      radial-gradient(circle at 34% 26%, rgba(255, 255, 255, 0.85) 0%, rgba(255, 255, 255, 0) 40%),
      radial-gradient(circle at 50% 120%, rgba(120, 220, 245, 0.50) 0%, rgba(120, 220, 245, 0) 55%),
      linear-gradient(180deg, #56B9DC 0%, #2388B4 52%, #10618C 100%);
    box-shadow:
      inset 0 1px 0 rgba(255, 255, 255, 0.55),
      0 2px 6px rgba(8, 40, 66, 0.40);
    transition: filter var(--speed-fast) var(--ease-soft), box-shadow var(--speed-fast) var(--ease-soft);
  }
  :root[data-skin="aero"] .pg-bar__play::after {
    content: "";
    position: absolute;
    left: 55%;
    top: 50%;
    width: 13px;
    height: 15px;
    transform: translate(-50%, -50%);
    clip-path: polygon(0 0, 100% 50%, 0 100%);
    background: #FFFFFF;
    filter: drop-shadow(0 1px 1px rgba(0, 30, 45, 0.4));
  }
  :root[data-skin="aero"] .pg-bar__play:hover {
    filter: brightness(1.08);
    box-shadow:
      inset 0 1px 0 rgba(255, 255, 255, 0.65),
      0 2px 8px rgba(8, 40, 66, 0.45),
      var(--aero-glow-cyan);
  }
  :root[data-skin="aero"] .pg-bar__play:active {
    filter: brightness(0.96);
    box-shadow:
      inset 0 2px 5px rgba(4, 24, 40, 0.45),
      0 1px 3px rgba(8, 40, 66, 0.35);
  }
  :root[data-skin="aero"] .pg-bar__play:focus-visible {
    outline: 2px solid var(--aero-focus);
    outline-offset: 2px;
  }

  /* thumbnail-size slider (a REAL zoom — drives --pg-thumb) */
  :root[data-skin="aero"] .pg-bar__zoom {
    justify-self: end;
    display: inline-flex;
    align-items: center;
    gap: 8px;
  }
  :root[data-skin="aero"] .pg-bar__zoom-ic {
    display: inline-block;
    border: 1.5px solid currentColor;
    border-radius: 1.5px;
    color: var(--color-text-muted);
    opacity: 0.75;
  }
  :root[data-skin="aero"] .pg-bar__zoom-ic--small { width: 7px;  height: 7px; }
  :root[data-skin="aero"] .pg-bar__zoom-ic--big   { width: 12px; height: 12px; }
  :root[data-skin="aero"] .pg-bar__zoom input[type="range"] {
    -webkit-appearance: none;
    appearance: none;
    width: 108px;
    height: 4px;
    border-radius: 2px;
    background: rgba(96, 130, 155, 0.35);
    box-shadow: inset 0 1px 1px rgba(20, 60, 90, 0.25);
    outline-offset: 4px;
  }
  :root[data-skin="aero"][data-theme="dark"] .pg-bar__zoom input[type="range"] {
    background: rgba(140, 200, 230, 0.22);
    box-shadow: inset 0 1px 1px rgba(0, 8, 16, 0.45);
  }
  :root[data-skin="aero"] .pg-bar__zoom input[type="range"]::-webkit-slider-thumb {
    -webkit-appearance: none;
    width: 15px;
    height: 15px;
    border-radius: 50%;
    border: 1px solid rgba(8, 60, 84, 0.6);
    background: radial-gradient(circle at 35% 30%, #FFFFFF 0%, #BFE9F7 55%, #4FB6D8 100%);
    box-shadow: 0 1px 2px rgba(8, 40, 66, 0.4);
    cursor: pointer;
  }
  :root[data-skin="aero"] .pg-bar__zoom input[type="range"]::-moz-range-thumb {
    width: 14px;
    height: 14px;
    border-radius: 50%;
    border: 1px solid rgba(8, 60, 84, 0.6);
    background: radial-gradient(circle at 35% 30%, #FFFFFF 0%, #BFE9F7 55%, #4FB6D8 100%);
    box-shadow: 0 1px 2px rgba(8, 40, 66, 0.4);
    cursor: pointer;
  }
/* compact tier — smaller default prints so two columns fit a phone;
   the slider still zooms from here (art-gallery.js syncs its start
   value to this computed default) */
@media (max-width: 720px) {
  :root[data-skin="aero"] .board__surface {
    /* the gallery well's CONTENT box measures 215px at a 375px viewport
       (sidebar inset + window + well padding) — 100px tracks + 12px gap
       give a true 2-up gallery; 100 also sits on the slider's step-4 grid
       (min 92), so the synced thumb starts on a legal notch */
    --pg-thumb: 100px;
    gap: 16px 12px;
    padding: 12px;
  }
  /* the ~230px bar can't center the play button honestly beside the zoom
     cluster (its 1fr twin would need negative space) — compact toolbar
     instead: play seats left, zoom right */
  :root[data-skin="aero"] .pg-bar { grid-template-columns: auto 1fr; }
  :root[data-skin="aero"] .pg-bar__play { grid-column: 1; }
  :root[data-skin="aero"] .pg-bar__zoom { grid-column: 2; }
}

/* ============================================================
   57. AERO PEEK — taskbar thumbnail previews (the Seven signature)
   Hover a taskbar window button and a glass flyout rises with a
   scaled DOM-clone snapshot of that window (aero-peek.js builds +
   positions it; created only under aero + desktop + hover, so
   retro/mobile never see one). Dark glass in BOTH themes — it is
   taskbar furniture, and the bar is the dark-glass band always.
   The clone is scenery: motion frozen, per-window backdrop blur
   dropped (the flyout's own glass is the backdrop; nested
   backdrop-filters are wasted paint).
   ============================================================ */
:root[data-skin="aero"] .aero-peek {
  position: fixed;
  z-index: 9100; /* above --z-taskbar 9000, below --z-tweaks 9500 */
  padding: 7px 8px 8px;
  border: 1px solid rgba(255, 255, 255, 0.34);
  border-radius: 6px;
  background:
    linear-gradient(180deg,
      rgba(255, 255, 255, 0.16) 0%, rgba(255, 255, 255, 0.04) 42%,
      rgba(255, 255, 255, 0) 56%),
    linear-gradient(180deg, rgba(24, 58, 86, 0.86), rgba(10, 32, 50, 0.90));
  -webkit-backdrop-filter: blur(10px) saturate(1.4);
          backdrop-filter: blur(10px) saturate(1.4);
  box-shadow:
    inset 0 0 0 1px rgba(255, 255, 255, 0.14),
    0 10px 26px rgba(0, 14, 26, 0.45),
    0 2px 8px rgba(0, 14, 26, 0.35);
  pointer-events: none;
  opacity: 0;
  transform: translateY(5px);
}
:root[data-skin="aero"] .aero-peek.is-in {
  opacity: 1;
  transform: none;
  transition: opacity 130ms ease-out, transform 130ms ease-out;
}
:root[data-skin="aero"] .aero-peek__head {
  display: flex;
  align-items: center;
  gap: 7px;
  margin: 0 1px 6px;
  max-width: 224px;
  overflow: hidden;
  font-family: var(--font-body);
  font-size: 12px;
  line-height: 1.2;
  white-space: nowrap;
  text-overflow: ellipsis;
  color: #FFFFFF;
  text-shadow: 0 1px 1px rgba(0, 30, 42, 0.70);
}
:root[data-skin="aero"] .aero-peek__thumb {
  position: relative;
  overflow: hidden;
  border: 1px solid rgba(255, 255, 255, 0.30);
  border-radius: 3px;
  background: var(--color-desktop);
  box-shadow: inset 0 0 0 1px rgba(0, 10, 20, 0.30);
}
:root[data-skin="aero"] .aero-peek__thumb .window {
  position: absolute;
  top: 0;
  left: 0;
  margin: 0;
  max-width: none;
  transform-origin: top left;
  pointer-events: none;
}
/* freeze the snapshot */
:root[data-skin="aero"] .aero-peek__thumb .window,
:root[data-skin="aero"] .aero-peek__thumb .window * {
  animation-play-state: paused !important;
  transition: none !important;
}
:root[data-skin="aero"] .aero-peek__thumb .window,
:root[data-skin="aero"] .aero-peek__thumb .window *,
:root[data-skin="aero"] .aero-peek__thumb .window *::before,
:root[data-skin="aero"] .aero-peek__thumb .window *::after {
  -webkit-backdrop-filter: none !important;
          backdrop-filter: none !important;
}
@media (prefers-reduced-motion: reduce) {
  :root[data-skin="aero"] .aero-peek { transform: none; }
  :root[data-skin="aero"] .aero-peek.is-in { transition: none; }
}

/* ==========================================================================
   §55 — FOCUS ENCODING: the halo + the desaturation
   (audit §6, both Elisha-approved 2026-07-07)
   Real Aero told you which window was alive in two ways beyond the border:
   the caption text GLOWED, and unfocused glass lost its color punch. Both
   land here, at the end of the file, so they win the cascade over the §4
   title halo (:501) and the base window filters (:381/:423).
   ------------------------------------------------------------------------
   1. TITLE GLOW — zero-offset white bloom behind the ACTIVE window's title
      glyphs, layered UNDER the §4 dark contact-shadows (shadow list renders
      first-entry-on-top: dark edge stays crisp for AA, bloom radiates
      beneath). Inactive windows keep the plain §4 dark halo — the missing
      glow IS the unfocused state. Dialogs (.os-dialog) are always "active"
      chrome, so they glow too. Dark theme blooms in sky (190,235,255), not
      white — a white aura on night glass read like a phosphor burn.
   2. DESATURATION — inactive windows drop the backdrop saturation boost
      (1.6→1.05 light, 1.5→1.05 dark) and a touch of brightness; blur stays
      (blur is the skin, saturation is the FOCUS). Deliberately NOT
      transitioned: Vista snapped focus, and animating backdrop-filter
      repaints the whole glass stack. Scoped to .window only — .os-dialog
      never desaturates. Window BODIES plate near-opaque fills (0.93+), so
      content contrast is untouched (Elisha's caveat: chrome only, content
      stays readable). The aero-peek clone freeze above still neutralizes
      every filter on snapshots via !important.
   ========================================================================== */
:root[data-skin="aero"] .window.is-active .window__title,
:root[data-skin="aero"] .os-dialog__title {
  text-shadow:
    0 1px 1px rgba(0, 30, 42, 0.70),
    0 0 4px rgba(0, 26, 38, 0.45),
    0 0 10px rgba(255, 255, 255, 0.85),
    0 0 18px rgba(255, 255, 255, 0.40);
}
:root[data-skin="aero"][data-theme="dark"] .window.is-active .window__title,
:root[data-skin="aero"][data-theme="dark"] .os-dialog__title {
  text-shadow:
    0 1px 1px rgba(0, 20, 32, 0.80),
    0 0 4px rgba(0, 16, 28, 0.50),
    0 0 10px rgba(190, 235, 255, 0.55),
    0 0 20px rgba(140, 215, 245, 0.28);
}
:root[data-skin="aero"] .window:not(.is-active) {
  -webkit-backdrop-filter: blur(var(--aero-shell-blur, 14px)) saturate(1.05) brightness(0.99);
          backdrop-filter: blur(var(--aero-shell-blur, 14px)) saturate(1.05) brightness(0.99);
}
:root[data-skin="aero"][data-theme="dark"] .window:not(.is-active) {
  -webkit-backdrop-filter: blur(var(--aero-shell-blur, 14px)) saturate(1.05) brightness(0.86);
          backdrop-filter: blur(var(--aero-shell-blur, 14px)) saturate(1.05) brightness(0.86);
}

/* §55 default-action pulse — RETCONNED (Elisha, 2026-07-08). The Vista-style
   breathing glow on the contact send chip shipped a day and came back out:
   "it just does not feel like a terminal... the background glowing stuff is
   an AI cliché." The send chip keeps its plain §27 terminal treatment; no
   glow, no pulse, hover included. Don't re-pitch button glows. */

/* Menu accelerator underlines (audit §4) are a 95-only idiom: the <u> first
   letters in the poetry File/Edit/View/Sort bar and the Notepad menubar read
   as period accelerators under Cascadia 95, but Vista/7 HID them until Alt —
   so Aero suppresses the underline entirely. */
:root[data-skin="aero"] .filelist__menu-item u,
:root[data-skin="aero"] .np__menu u {
  text-decoration: none;
}

/* ONE LCD DIALECT (Elisha's §7-menu decision, 2026-07-07): the taskbar dock's
   now-playing pill drops its green device-glass and joins the CD player's §39
   cool-teal recessed LCD — same inverted lighting (pressed-in top, catch-light
   bottom), same backlit tabular text, scaled to the bar. Green survives ONLY
   in the contact terminal (period phosphor is that fiction's material).
   Retro's pill keeps the 95 green LCD — the dialect split is per-skin voice,
   and this rule is aero-only. */
:root[data-skin="aero"] .taskbar__player-lcd {
  border: 1px solid rgba(0, 22, 32, 0.7);
  background:
    linear-gradient(180deg, rgba(120, 210, 235, 0.16) 0%, rgba(120, 210, 235, 0) 34%),
    radial-gradient(120% 140% at 50% -10%, rgba(60, 180, 205, 0.16), rgba(60, 180, 205, 0) 60%),
    linear-gradient(180deg, #07212E 0%, #0B3242 100%);
  box-shadow:
    inset 0 2px 5px rgba(0, 12, 20, 0.72),
    inset 0 -1px 0 rgba(120, 210, 235, 0.34),
    inset 0 0 12px rgba(60, 180, 205, 0.10),
    0 1px 0 rgba(255, 255, 255, 0.22);
  color: #CFF4FE;
}
:root[data-skin="aero"] .taskbar__player-title {
  color: #DCF6FE;
  text-shadow: 0 0 4px rgba(120, 210, 235, 0.4);
}
:root[data-skin="aero"] .taskbar__player-eq {
  background:
    linear-gradient(#7FE0FA, #7FE0FA) 0    100% / 2px 40% no-repeat,
    linear-gradient(#7FE0FA, #7FE0FA) 4px  100% / 2px 70% no-repeat,
    linear-gradient(#7FE0FA, #7FE0FA) 8px  100% / 2px 50% no-repeat;
}

/* ════════════════════════════════════════════════════════════════════════════
   §56b — 404 ERROR ORB (audit §4: the retro pixel X inside Aero glass)
   ----------------------------------------------------------------------------
   The 404 dialog's icon keeps the pixel X on retro (icons.js), but on glass it
   becomes a shaded RED SPHERE with a rounded white ✕ — the §39 sphere recipe
   verbatim (soft top sheen at the locked up-left key, bottom up-bounce, body
   darker at the lower rim), only the hue moved from teal to error red. The X
   is a data-URI mask (the --gico-* pattern) painted white with the §39 icon
   emboss, so no new asset file and no CSP change. Error red is semantic
   material (like the trophy metals) — identical in both themes.
   ════════════════════════════════════════════════════════════════════════════ */
:root[data-skin="aero"] .os-dialog__icon[data-icon="error"] {
  position: relative;
  image-rendering: auto;      /* a sphere must not pixelate */
}
:root[data-skin="aero"] .os-dialog__icon[data-icon="error"] > svg { display: none; }
:root[data-skin="aero"] .os-dialog__icon[data-icon="error"]::before {
  content: "";
  position: absolute;
  inset: 2px;
  border-radius: 50%;
  border: 1px solid rgba(110, 14, 10, 0.65);
  background:
    radial-gradient(120% 70% at 50% -8%, rgba(255, 255, 255, 0.5) 0%, rgba(255, 255, 255, 0.12) 40%, rgba(255, 255, 255, 0) 64%),
    radial-gradient(120% 80% at 50% 122%, rgba(255, 150, 138, 0.30) 0%, rgba(255, 150, 138, 0) 56%),
    radial-gradient(circle at 50% 34%, #E0554B 0%, #B5211B 58%, #7C120F 100%);
  box-shadow:
    inset 0 1px 1px rgba(255, 255, 255, 0.55),
    inset 0 -6px 10px -7px rgba(55, 0, 0, 0.4),
    inset 0 0 0 1px rgba(255, 255, 255, 0.1),
    0 1px 3px rgba(47, 4, 4, 0.38), 0 3px 7px rgba(177, 33, 15, 0.18);
}
:root[data-skin="aero"] .os-dialog__icon[data-icon="error"]::after {
  content: "";
  position: absolute;
  inset: 0;
  background: #fff;
  -webkit-mask: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'><path d='M7 7 L17 17 M17 7 L7 17' stroke='%23fff' stroke-width='3.6' stroke-linecap='round' fill='none'/></svg>") center / 24px no-repeat;
  mask: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'><path d='M7 7 L17 17 M17 7 L7 17' stroke='%23fff' stroke-width='3.6' stroke-linecap='round' fill='none'/></svg>") center / 24px no-repeat;
  filter: drop-shadow(0 1px 0 rgba(255, 255, 255, 0.25)) drop-shadow(0 -1px 0.5px rgba(60, 4, 4, 0.5));
}
