/* ═══════════════════════════════════════════════════════════════════════════════════════════════
   PN-COLLECTIONS.CSS — THE STORE THEME ENGINE  (CEO, 2026-08-11)
   ═══════════════════════════════════════════════════════════════════════════════════════════════

   THE ORDER: "get a specialist agent to work on the store items, they need to fundamentally affect
   the visual gameplay."  THE VERDICT ON WHAT WAS THERE: "ALL the store looks look the same no
   discernible difference — I'm disgusted by everything I am seeing."

   HE WAS RIGHT, AND HERE IS THE MEASUREMENT. Wearing TOKYO NIGHT instead of NOIR CLASSIC changed
   0.63% of the pixels on the office dashboard (tools/theme-diff.mjs, 1440×900, before this file).
   Not "a subtle theme" — a rounding error. The collection card promised "Re-grades your Floor,
   portraits and dashboards"; it re-tinted one accent and swapped a photo nobody could see.

   THE ROOT CAUSE, precisely. A worn collection published exactly ONE colour — `--worn-a`, the
   look's hue — and the worn-mood block in style-01.css (~line 206) remapped the decorative accent
   tokens to it. Everything that actually BUILDS the room — `--mvc-bg` (the office canvas),
   `--glass-a`/`--glass-b` (every card in the game), `--mvc-fg*` (the ink), `--mvc-brd*` (the
   hairlines), `--glass-shadow` (the depth) — stayed pinned to the base theme. So ten collections
   rendered as one interface in ten hues.

   THE ARCHITECTURE. We do NOT invent tokens. The four base themes and the four paid theme packs
   already prove the contract: `[data-palette="pack-arcade"]` in mvc-os.css owns the FULL surface
   token set, and because `body{--rust-*: var(--mvc-*)}` (style-01.css ~6591) bridges every legacy
   office class onto those same tokens, one block repaints all ~5,155 rules for free. A collection
   is now exactly that object, hung on the attribute the runtime ALREADY sets —
   `document.body.dataset.collection` (script-01.js `applyCosmetics`) — so nothing in selection,
   purchase, ownership or persistence had to move.

   WHAT EACH COLLECTION OWNS (the contract — if a world doesn't set all of it, it isn't a world):
     · surface   — `--mvc-bg`, `--glass-a`, `--glass-b`, `--glass-shadow`, `--glass-inset`,
                   `--glass-hi`, `--track`
     · ink       — `--mvc-fg`, `-70`, `-55`, `-40`, `-30`   (AA-verified per world, per key)
     · hairline  — `--mvc-brd`, `--mvc-brd-hi`
     · accent    — `--p` (the one CTA fill + data endpoints), `--p2`, `--acc`, `--glow`,
                   `--pn-on-p` (the ink that sits ON the fill), and `--accent`/`--accent2`
     · the ROOM  — `--wl-base` / `--wl-light` / `--wl-motif`: the office canvas is composed from
                   three layers, so each world has its own KEY LIGHT and its own signature GEOMETRY
                   (halftone · graph paper · brass rules · structural grid · neon rain). This is
                   what stops the shelf reading as "the same screen, different tint".
     · the PLATE — `--pn-plate` (the real env/store photograph behind the hero) + `--vibe-grade`
                   (its colour grade) + `--pn-scrim` (its legibility scrim). The floor genuinely
                   changes rooms.

   HARD LAWS OBSERVED (design/UX_RULES.md — every one of these is a gate, not a preference):
     · §1 LEGIBILITY — every ink/surface pair in every world, in BOTH keys, is measured, not
       eyeballed. The AA table is in the report; `tools/theme-diff.mjs` recomputes it from the LIVE
       DOM (composited through the real ancestor chain), so it cannot drift from what ships.
     · §3 LAYOUT — this file sets COLOUR, IMAGE, SHADOW and BORDER-COLOR only. No box model, no
       display, no position, no font-size, no border-width. A theme RE-PAINTS; it never RE-FLOWS.
       The acceptance test asserts identical element boxes across all ten worlds.
     · §5 THEME — a worn look repaints every management surface. The Vault is the one deliberate,
       recorded seam: a theme must never repaint the shop that sells it (CEO-74, PN_WEAR_VIEWS).
     · §11 MOTION — the plate carries a slow parallax drift (transform only), off under
       `prefers-reduced-motion`.
     · §12 ANTI-SLOP — the worlds are told apart by MOTIF and KEY LIGHT, not by hue. Swap the
       palettes between two of them and both stop working. That is the test of an owned look.

   TENANT/BRAND: this is a Campley surface, so the SST (design/STYLE_SOURCE_OF_TRUTH.md) governs —
   near-square radius, brutalist hairlines, mono micro-copy, photographic worlds. NO NEW FONTS: the
   CEO called the current state "font soup" and typography is being consolidated separately, so this
   file never touches `--mvc-disp`/`--mvc-f`. (The theme packs DO swap the display face; collections
   deliberately do not. Noted as a left-out in the report.)

   LOAD ORDER: linked LAST in play.html. Specificity ties with the worn-mood block in style-01.css
   (`html body[data-worn-mood="1"].pn-wear` = 0,2,2) are broken by source order; the light-key
   selectors carry an extra class and win outright.
   ═══════════════════════════════════════════════════════════════════════════════════════════════ */


/* ───────────────────────────────────────────────────────────────────────────────────────────────
   1 · THE PLUMBING — how a world's variables become pixels.
   Three rules. Every collection below is pure data poured into these.
   ─────────────────────────────────────────────────────────────────────────────────────────────── */

/* 1a · THE ROOM. The office canvas is `body` (pn-ipad-shell makes body the device SCREEN), and the
   worn-mood block paints it with `background: … !important`. We beat that with the world's own
   three-layer recipe: MOTIF over KEY LIGHT over BASE. `!important` because the rule we are
   replacing is `!important` at equal specificity. */
html body.pn-wear[data-collection^="col-"]{
  background:
    var(--wl-motif, none),
    var(--wl-light, none),
    var(--wl-base, var(--mvc-bg)) !important;
  /* the film-grain body::after and the fixed shader both stay — they read the world's own tokens */
}
/* The topbar and the hub rail are chrome: they read --mvc-bg / --rust-card, which the world already
   owns, so they follow for free. Nothing to do here — recorded so the next reader doesn't add it. */

/* 1b · THE PLATE. The hero backdrop was ONE hardcoded film for every world (a brick-and-neon loft),
   which is the single most visible reason ten looks read as one. Each world now names its own
   photograph. The <video> is stood down when a world supplies a plate — its poster and its footage
   are the NOIR CLASSIC room, and a rain-lit Tokyo floor showing a Brooklyn loft is the lie the CEO
   caught. NOIR CLASSIC keeps the living film, because that IS the house look. */
html body.pn-wear[data-collection^="col-"] .pn-vibe{
  background-image:var(--pn-plate);
  background-size:cover;
  background-position:center 42%;
  background-repeat:no-repeat;
  filter:var(--vibe-grade);
}
html body.pn-wear[data-collection^="col-"]:not([data-collection="col-noirclassic"]) .pn-vibe-media{
  opacity:0;   /* opacity, not display — the element keeps its box, so nothing re-flows (§3) */
}
/* §11 MOTION — a slow parallax breath on the plate so a static room still feels lived-in.
   Transform only (no layout, no paint of anything else), and the scrim sits above it unmoved so
   the headline safe-area is unaffected. */
@media (prefers-reduced-motion:no-preference){
  html body.pn-wear[data-collection^="col-"] .pn-vibe{
    animation:pn-plate-breathe 34s ease-in-out infinite alternate;
    will-change:transform;
  }
}
@keyframes pn-plate-breathe{ from{transform:scale(1.03) translate3d(0,0,0)} to{transform:scale(1.09) translate3d(-1.2%,-1%,0)} }

/* 1c · THE SCRIM. Each world grades its own plate, but the KEY never flips: a dark-key world keeps
   a dark scrim under white hero ink, a light-key world keeps a bright scrim under dark hero ink.
   That is deliberate — it is what makes AA on the hero structural rather than per-world luck
   (UX_RULES §1). The world only chooses the HUE and the depth of its own scrim. */
html body.pn-wear[data-collection^="col-"] .pn-vibe-scrim{ background:var(--pn-scrim) !important; }
html body.mvc-light.pn-wear[data-collection^="col-"] .pn-vibe-scrim{ background:var(--pn-scrim-l) !important; }


/* ───────────────────────────────────────────────────────────────────────────────────────────────
   2 · THE WORLDS
   Each block is: DARK KEY, then LIGHT KEY. The player's light/dark choice is a control, not a
   cosmetic — so a collection never pins the key (the theme PACKS do; collections deliberately do
   not, because a look you bought must not take the light switch away from you). Every world is
   therefore designed TWICE, and both are measured.
   ─────────────────────────────────────────────────────────────────────────────────────────────── */


/* ══ NOIR CLASSIC ══════════════════════════════════════════════════════════════════════════════
   "The house look. Blood-orange edge, hard shadows."
   The default, finally written down as a thing you can own: near-black with a WARM bias (never the
   blue-black of Tokyo), a blood-orange spine, and the SST's hard editorial shadow — an offset slab
   of shadow, not a soft cinematic bloom. Signature motif: halftone dots (SST motif 1) with a hard
   top vignette, the printed-tooth look the whole brand is built on. Plate: the agency floor. */
html body.pn-wear[data-collection="col-noirclassic"]{
  --mvc-bg:#08070a !important;
  --mvc-fg:#f8f4f1 !important; --mvc-fg-70:rgba(248,244,241,.76) !important;
  --mvc-fg-55:rgba(248,244,241,.64) !important; --mvc-fg-40:rgba(248,244,241,.44) !important;
  --mvc-fg-30:rgba(248,244,241,.28) !important;
  --mvc-brd:rgba(255,132,96,.16) !important; --mvc-brd-hi:rgba(255,132,96,.36) !important;
  --glass-a:rgba(30,23,20,.56) !important; --glass-b:rgba(12,9,9,.70) !important;
  --glass-shadow:12px 12px 0 -6px rgba(0,0,0,.55), 0 24px 56px rgba(0,0,0,.6) !important;  /* HARD offset slab (SST) */
  --glass-inset:inset 0 1px 0 rgba(255,178,148,.18), inset 0 0 0 1px rgba(255,140,100,.05) !important;
  --glass-hi:rgba(255,208,186,.58) !important; --track:rgba(0,0,0,.38) !important;
  --p:#ff5d3a !important; --p2:#ff8b63 !important; --acc:#ffb08c !important;
  --glow:255,93,58 !important; --pn-on-p:#1c0500 !important;
  --accent:#ff8b63 !important; --accent2:#ff8b63 !important; --acc-ink:#ff8b63 !important;
  --worn-a:#ff5d3a !important;
  /* the room: warm ember key from the top-left, halftone tooth over everything */
  --wl-base:#08070a !important;
  --wl-light:
    radial-gradient(120% 78% at 14% -8%, rgba(255,93,58,.22) 0%, transparent 56%),
    radial-gradient(90% 62% at 104% 108%, rgba(120,32,10,.28) 0%, transparent 62%) !important;
  /* NOTE ON SYNTAX (applies to every --wl-motif below): these values are `background` SHORTHAND
     layers, so each carries its own `position / size repeat`. That is deliberate — it lets a world
     own its whole room in one variable, instead of a shared rule having to guess how many
     sub-layers a motif has and keep three parallel lists in sync. */
  --wl-motif:radial-gradient(rgba(255,190,166,.06) 1px, transparent 1.4px) 0 0 / 5px 5px repeat !important;
  --pn-plate:url('../env/agency_floor.jpg') !important;
  --vibe-grade:contrast(1.18) saturate(.98) brightness(1.0) !important;
  --pn-scrim:linear-gradient(110deg,rgba(10,5,4,.92),rgba(10,5,4,.46) 44%,rgba(10,5,4,.26)),
             linear-gradient(0deg,rgba(10,5,4,.6),transparent 66%) !important;
}
html body.mvc-light.pn-wear[data-collection="col-noirclassic"]{
  /* light key: newsprint. Warm paper, near-black ink, the same blood-orange deepened to clear AA
     as small-text ink on paper (§1 corollary — a fill never carries the other key's ink). */
  --mvc-bg:#f3ece6 !important;
  --mvc-fg:#1a120e !important; --mvc-fg-70:rgba(26,18,14,.80) !important;
  --mvc-fg-55:rgba(26,18,14,.68) !important; --mvc-fg-40:rgba(26,18,14,.46) !important;
  --mvc-fg-30:rgba(26,18,14,.30) !important;
  --mvc-brd:rgba(70,34,20,.18) !important; --mvc-brd-hi:rgba(70,34,20,.34) !important;
  --glass-a:rgba(255,253,251,.88) !important; --glass-b:rgba(250,242,235,.74) !important;
  --glass-shadow:10px 10px 0 -6px rgba(90,44,24,.16), 0 22px 44px -18px rgba(90,44,24,.28) !important;
  --glass-inset:inset 0 1px 0 rgba(255,255,255,.9) !important;
  --glass-hi:rgba(255,255,255,.92) !important; --track:rgba(70,34,20,.09) !important;
  --p:#b4380d !important; --p2:#93300b !important; --acc:#7a2a09 !important;
  --glow:180,56,13 !important; --pn-on-p:#ffffff !important;
  --accent:#93300b !important; --accent2:#93300b !important;
  --wl-base:#f3ece6 !important;
  --wl-light:
    radial-gradient(120% 78% at 14% -8%, rgba(255,120,70,.14) 0%, transparent 58%),
    radial-gradient(90% 62% at 104% 108%, rgba(190,120,80,.12) 0%, transparent 64%) !important;
  --wl-motif:radial-gradient(rgba(90,44,24,.08) 1px, transparent 1.4px) 0 0 / 5px 5px repeat !important;
  --vibe-grade:contrast(1.08) saturate(.98) brightness(1.06) sepia(.08) !important;
  --pn-scrim-l:linear-gradient(110deg,rgba(255,250,246,.9),rgba(255,250,246,.48) 46%,rgba(255,250,246,.12)),
               linear-gradient(0deg,rgba(243,236,230,.5),transparent 64%) !important;
}


/* ══ GARAGE STARTUP ════════════════════════════════════════════════════════════════════════════
   "Trestle tables, fire exits, nothing to lose."
   The UNDRESSED world, and the only one on the shelf that is not trying to look expensive. Cool
   neutral grey — no navy, no warmth, nothing decorative — SAFETY ORANGE as the one hot colour, and
   deliberately the LEAST glassy surfaces on the shelf: high-opacity, flat, hard-edged, with a
   crisper hairline than anywhere else. Signature motif: whiteboard graph paper, plus a single
   gaffer-tape hazard stripe raked across the top of the room. Plate: the daylit concrete loft with
   the orange steel beam and the trestle desk — the brief's picture, literally. */
html body.pn-wear[data-collection="col-garage"]{
  --mvc-bg:#101215 !important;
  --mvc-fg:#f2f4f6 !important; --mvc-fg-70:rgba(242,244,246,.78) !important;
  --mvc-fg-55:rgba(242,244,246,.66) !important; --mvc-fg-40:rgba(242,244,246,.46) !important;
  --mvc-fg-30:rgba(242,244,246,.30) !important;
  --mvc-brd:rgba(255,255,255,.20) !important; --mvc-brd-hi:rgba(255,255,255,.42) !important;  /* sharpest hairline on the shelf */
  --glass-a:rgba(32,36,41,.72) !important; --glass-b:rgba(20,23,27,.82) !important;           /* flat + opaque = undressed */
  --glass-shadow:0 2px 0 rgba(0,0,0,.5), 0 16px 34px -22px rgba(0,0,0,.9) !important;         /* almost no depth */
  --glass-inset:inset 0 1px 0 rgba(255,255,255,.10) !important;
  --glass-hi:rgba(255,255,255,.42) !important; --track:rgba(0,0,0,.42) !important;
  --p:#ff6a00 !important; --p2:#ff9c47 !important; --acc:#dfe4ea !important;
  --glow:255,106,0 !important; --pn-on-p:#160800 !important;
  --accent:#ff9c47 !important; --accent2:#ff9c47 !important;
  --worn-a:#ff6a00 !important;
  /* the room: bare fluorescent tube overhead, cold, no romance */
  --wl-base:#101215 !important;
  --wl-light:
    linear-gradient(180deg, rgba(226,236,246,.10) 0%, transparent 26%),
    radial-gradient(70% 34% at 50% -4%, rgba(226,240,255,.13) 0%, transparent 70%) !important;
  /* the hazard stripe is a BAND pinned to the top edge (84px), not a wash; the whiteboard graph
     paper tiles at 28px underneath it. Sizes ride the shorthand layer, see the note above. */
  --wl-motif:
    repeating-linear-gradient(135deg, rgba(255,106,0,.18) 0 14px, transparent 14px 28px) 0 0 / 100% 84px no-repeat,
    linear-gradient(rgba(255,255,255,.05) 1px, transparent 1px) 0 0 / 28px 28px repeat,
    linear-gradient(90deg, rgba(255,255,255,.05) 1px, transparent 1px) 0 0 / 28px 28px repeat !important;
  --pn-plate:url('../store/brutalist-loft/office-loft.jpg') !important;
  --vibe-grade:contrast(1.04) saturate(.8) brightness(1.14) !important;
  --pn-scrim:linear-gradient(110deg,rgba(9,11,13,.9),rgba(9,11,13,.46) 44%,rgba(9,11,13,.2)),
             linear-gradient(0deg,rgba(9,11,13,.58),transparent 66%) !important;
}
html body.mvc-light.pn-wear[data-collection="col-garage"]{
  /* light key: the world's true state — daylight through the roof lights on bare concrete */
  --mvc-bg:#dfe4e8 !important;
  --mvc-fg:#12161a !important; --mvc-fg-70:rgba(18,22,26,.80) !important;
  --mvc-fg-55:rgba(18,22,26,.68) !important; --mvc-fg-40:rgba(18,22,26,.46) !important;
  --mvc-fg-30:rgba(18,22,26,.30) !important;
  --mvc-brd:rgba(18,22,26,.22) !important; --mvc-brd-hi:rgba(18,22,26,.42) !important;
  --glass-a:rgba(255,255,255,.92) !important; --glass-b:rgba(243,246,248,.84) !important;
  --glass-shadow:0 2px 0 rgba(18,22,26,.10), 0 16px 30px -22px rgba(18,22,26,.5) !important;
  --glass-inset:inset 0 1px 0 rgba(255,255,255,.95) !important;
  --glass-hi:rgba(255,255,255,.95) !important; --track:rgba(18,22,26,.08) !important;
  --p:#c03d00 !important; --p2:#9c3100 !important; --acc:#2b3238 !important;
  --glow:192,61,0 !important; --pn-on-p:#ffffff !important;
  --accent:#9c3100 !important; --accent2:#9c3100 !important;
  --wl-base:#dfe4e8 !important;
  --wl-light:
    linear-gradient(180deg, rgba(255,255,255,.85) 0%, transparent 30%),
    radial-gradient(70% 34% at 50% -4%, rgba(255,255,255,.9) 0%, transparent 70%) !important;
  --wl-motif:
    repeating-linear-gradient(135deg, rgba(192,61,0,.2) 0 14px, transparent 14px 28px) 0 0 / 100% 84px no-repeat,
    linear-gradient(rgba(18,22,26,.06) 1px, transparent 1px) 0 0 / 28px 28px repeat,
    linear-gradient(90deg, rgba(18,22,26,.06) 1px, transparent 1px) 0 0 / 28px 28px repeat !important;
  --vibe-grade:contrast(1.04) saturate(.8) brightness(1.1) !important;
  --pn-scrim-l:linear-gradient(110deg,rgba(255,255,255,.9),rgba(255,255,255,.5) 46%,rgba(255,255,255,.14)),
               linear-gradient(0deg,rgba(223,228,232,.55),transparent 64%) !important;
}


/* ══ THE GOLDEN AGE ════════════════════════════════════════════════════════════════════════════
   "Penthouse warmth, mogul plates. Old money, new wins."
   Mahogany-and-brass. The base is a deep warm espresso (a room panelled in wood, not a black box),
   the spine is brass — which means the CTA fill takes DARK ink, never white, and that is measured.
   Signature motif: fine horizontal brass rules, the ruled-ledger/deco pinstripe, with a low warm
   sun coming in from the right. Plate: the gold penthouse. */
html body.pn-wear[data-collection="col-goldenage"]{
  --mvc-bg:#12100a !important;
  --mvc-fg:#f9f1de !important; --mvc-fg-70:rgba(249,241,222,.78) !important;
  --mvc-fg-55:rgba(249,241,222,.66) !important; --mvc-fg-40:rgba(249,241,222,.46) !important;
  --mvc-fg-30:rgba(249,241,222,.30) !important;
  --mvc-brd:rgba(224,182,74,.22) !important; --mvc-brd-hi:rgba(224,182,74,.48) !important;
  --glass-a:rgba(54,43,24,.52) !important; --glass-b:rgba(24,19,10,.68) !important;
  --glass-shadow:0 30px 70px rgba(0,0,0,.62), 0 0 40px rgba(224,182,74,.14) !important;   /* warm lamp bloom */
  --glass-inset:inset 0 1px 0 rgba(255,224,150,.24), inset 0 0 0 1px rgba(224,182,74,.07) !important;
  --glass-hi:rgba(255,232,178,.62) !important; --track:rgba(0,0,0,.4) !important;
  --p:#e0b64a !important; --p2:#f3d791 !important; --acc:#cf9f2a !important;
  --glow:224,182,74 !important; --pn-on-p:#1a1204 !important;    /* brass takes DARK ink, always */
  --accent:#f3d791 !important; --accent2:#f3d791 !important;
  --worn-a:#e0b64a !important;
  --wl-base:#12100a !important;
  --wl-light:
    radial-gradient(110% 80% at 96% -6%, rgba(255,196,84,.22) 0%, transparent 58%),
    radial-gradient(120% 90% at 0% 110%, rgba(74,50,14,.5) 0%, transparent 62%) !important;
  --wl-motif:repeating-linear-gradient(0deg, rgba(224,182,74,.055) 0 1px, transparent 1px 13px) !important;
  --pn-plate:url('../store/penthouse-gold/office-penthouse-gold.jpg') !important;
  --vibe-grade:sepia(.26) contrast(1.06) brightness(1.0) saturate(1.08) !important;
  --pn-scrim:linear-gradient(110deg,rgba(14,10,3,.92),rgba(14,10,3,.46) 44%,rgba(14,10,3,.2)),
             linear-gradient(0deg,rgba(14,10,3,.62),transparent 66%) !important;
}
html body.mvc-light.pn-wear[data-collection="col-goldenage"]{
  /* light key: cream surfaces, as briefed. Brass is far too pale to be ink on cream, so the ink
     side of the world drops to a deep antique-bronze that holds the family and clears AA. */
  --mvc-bg:#efe2c8 !important;
  --mvc-fg:#221a0b !important; --mvc-fg-70:rgba(34,26,11,.80) !important;
  --mvc-fg-55:rgba(34,26,11,.68) !important; --mvc-fg-40:rgba(34,26,11,.46) !important;
  --mvc-fg-30:rgba(34,26,11,.30) !important;
  --mvc-brd:rgba(120,88,26,.22) !important; --mvc-brd-hi:rgba(120,88,26,.42) !important;
  --glass-a:rgba(255,251,241,.9) !important; --glass-b:rgba(249,240,222,.78) !important;
  --glass-shadow:0 26px 54px -20px rgba(96,70,20,.34), 0 2px 0 rgba(120,88,26,.08) !important;
  --glass-inset:inset 0 1px 0 rgba(255,255,255,.92) !important;
  --glass-hi:rgba(255,255,255,.94) !important; --track:rgba(120,88,26,.09) !important;
  --p:#8a6410 !important; --p2:#6d4e08 !important; --acc:#5c410a !important;
  --glow:138,100,16 !important; --pn-on-p:#ffffff !important;
  --accent:#6d4e08 !important; --accent2:#6d4e08 !important;
  --wl-base:#efe2c8 !important;
  --wl-light:
    radial-gradient(110% 80% at 96% -6%, rgba(255,206,110,.28) 0%, transparent 58%),
    radial-gradient(120% 90% at 0% 110%, rgba(206,178,120,.24) 0%, transparent 62%) !important;
  --wl-motif:repeating-linear-gradient(0deg, rgba(120,88,26,.09) 0 1px, transparent 1px 13px) !important;
  --vibe-grade:sepia(.2) contrast(1.04) brightness(1.08) saturate(1.04) !important;
  --pn-scrim-l:linear-gradient(110deg,rgba(255,250,238,.9),rgba(255,250,238,.48) 46%,rgba(255,250,238,.1)),
               linear-gradient(0deg,rgba(239,226,200,.55),transparent 64%) !important;
}


/* ══ BRUTALIST ═════════════════════════════════════════════════════════════════════════════════
   "Concrete, ink, zero apologies. The work speaks."
   Near-monochrome and completely unsentimental: zero hue in the surfaces, zero bloom in the
   shadows, the strongest hairlines on the shelf and a spine that is INK — a bone-white in the dark
   key, a hard black in the light key. Nothing glows. The signature motif is the structural grid:
   a 96px poured-concrete bay with a fine tooth inside it, which is the only world whose geometry
   is architectural rather than atmospheric. Plate: the concrete boardroom, driven hard to
   monochrome so the world is genuinely a black-and-white building. */
html body.pn-wear[data-collection="col-brutalist"]{
  /* CONCRETE IS NOT BLACK. The first pass sat this world at #0d0e0f — a neutral near-black — which
     put it within a few points of NOIR CLASSIC's warm near-black and left the two closest worlds on
     the shelf leaning on hairlines alone to tell each other apart (measured: one run came back at
     23.8% changed, under the bar). Poured concrete is a mid graphite, so this is the brief taken
     literally rather than a number being gamed: raising the base to #1a1b1c both reads as the
     material and puts real luminance distance between the only two dark-neutral worlds. Ink at
     13.9:1 on it, muted labels at 7.4:1 — the extra light costs nothing in legibility. */
  --mvc-bg:#1a1b1c !important;
  --mvc-fg:#eceded !important; --mvc-fg-70:rgba(236,237,237,.80) !important;
  --mvc-fg-55:rgba(236,237,237,.68) !important; --mvc-fg-40:rgba(236,237,237,.46) !important;
  --mvc-fg-30:rgba(236,237,237,.30) !important;
  --mvc-brd:rgba(255,255,255,.24) !important; --mvc-brd-hi:rgba(255,255,255,.5) !important;
  --glass-a:rgba(46,47,48,.80) !important; --glass-b:rgba(33,34,35,.90) !important;   /* slab, not glass */
  --glass-shadow:0 1px 0 rgba(0,0,0,.9), 0 0 0 1px rgba(255,255,255,.05) !important;  /* NO bloom, anywhere */
  --glass-inset:inset 0 1px 0 rgba(255,255,255,.07) !important;
  --glass-hi:rgba(255,255,255,.28) !important; --track:rgba(0,0,0,.5) !important;
  --p:#e9eaea !important; --p2:#ffffff !important; --acc:#9ca1a4 !important;
  --glow:233,234,234 !important; --pn-on-p:#0b0c0d !important;   /* ink fill → paper ink on it */
  --accent:#ffffff !important; --accent2:#ffffff !important;
  --worn-a:#e9eaea !important;
  --wl-base:#1a1b1c !important;
  --wl-light:linear-gradient(178deg, rgba(255,255,255,.06) 0%, transparent 34%) !important;  /* flat north light */
  /* the structural grid: a 96px poured bay, with a 4px concrete tooth inside it */
  --wl-motif:
    linear-gradient(rgba(255,255,255,.055) 1px, transparent 1px) 0 0 / 96px 96px repeat,
    linear-gradient(90deg, rgba(255,255,255,.055) 1px, transparent 1px) 0 0 / 96px 96px repeat,
    radial-gradient(rgba(255,255,255,.04) .6px, transparent .8px) 0 0 / 4px 4px repeat !important;
  --pn-plate:url('../env/meeting_room.jpg') !important;
  --vibe-grade:grayscale(1) contrast(1.34) brightness(.96) !important;
  --pn-scrim:linear-gradient(110deg,rgba(6,7,7,.92),rgba(6,7,7,.46) 44%,rgba(6,7,7,.14)),
             linear-gradient(0deg,rgba(6,7,7,.55),transparent 66%) !important;
}
html body.mvc-light.pn-wear[data-collection="col-brutalist"]{
  /* light key: RAW CONCRETE, not paper. A mid-grey page is the single most confrontational move
     available in this system — every other light world in the game is near-white — and it is
     exactly what "zero apologies" means. Black ink on it clears AA with room to spare. */
  --mvc-bg:#d5d5d2 !important;
  --mvc-fg:#0d0e0f !important; --mvc-fg-70:rgba(13,14,15,.84) !important;
  --mvc-fg-55:rgba(13,14,15,.72) !important; --mvc-fg-40:rgba(13,14,15,.5) !important;
  --mvc-fg-30:rgba(13,14,15,.32) !important;
  --mvc-brd:rgba(13,14,15,.32) !important; --mvc-brd-hi:rgba(13,14,15,.6) !important;
  --glass-a:rgba(237,237,234,.96) !important; --glass-b:rgba(224,224,220,.92) !important;
  --glass-shadow:0 1px 0 rgba(13,14,15,.3), 0 0 0 1px rgba(13,14,15,.06) !important;
  --glass-inset:inset 0 1px 0 rgba(255,255,255,.7) !important;
  --glass-hi:rgba(255,255,255,.7) !important; --track:rgba(13,14,15,.10) !important;
  --p:#17191a !important; --p2:#000000 !important; --acc:#4b5054 !important;
  --glow:23,25,26 !important; --pn-on-p:#f1f1ee !important;
  --accent:#000000 !important; --accent2:#000000 !important;
  --wl-base:#d5d5d2 !important;
  --wl-light:linear-gradient(178deg, rgba(255,255,255,.5) 0%, transparent 34%) !important;
  --wl-motif:
    linear-gradient(rgba(13,14,15,.08) 1px, transparent 1px) 0 0 / 96px 96px repeat,
    linear-gradient(90deg, rgba(13,14,15,.08) 1px, transparent 1px) 0 0 / 96px 96px repeat,
    radial-gradient(rgba(13,14,15,.055) .6px, transparent .8px) 0 0 / 4px 4px repeat !important;
  --vibe-grade:grayscale(1) contrast(1.3) brightness(1.12) !important;
  --pn-scrim-l:linear-gradient(110deg,rgba(248,248,246,.92),rgba(248,248,246,.56) 46%,rgba(248,248,246,.18)),
               linear-gradient(0deg,rgba(213,213,210,.6),transparent 64%) !important;
}


/* ══ TOKYO NIGHT ═══════════════════════════════════════════════════════════════════════════════
   "Late trains, neon rain, deck due at 6am JST."
   Deep BLUE-black — the one cold base on the shelf, and the reason Noir Classic is warm-black:
   put the two side by side and they must not be mistakable. Two hot colours instead of one, which
   no other world gets: electric pink carries the spine and cyan carries the second reading, so the
   surface has the split-lighting of a wet street. Signature motif: vertical rain — fine bright
   verticals falling through the room — plus a double bloom, pink high right, cyan low left.
   Plate: the rain-lit neon floor. */
html body.pn-wear[data-collection="col-tokyonight"]{
  --mvc-bg:#060913 !important;
  --mvc-fg:#eaf2ff !important; --mvc-fg-70:rgba(234,242,255,.78) !important;
  --mvc-fg-55:rgba(234,242,255,.66) !important; --mvc-fg-40:rgba(234,242,255,.46) !important;
  --mvc-fg-30:rgba(234,242,255,.30) !important;
  --mvc-brd:rgba(53,224,255,.22) !important; --mvc-brd-hi:rgba(255,79,163,.5) !important;  /* split hairline */
  --glass-a:rgba(18,27,52,.56) !important; --glass-b:rgba(6,10,25,.72) !important;
  --glass-shadow:0 26px 64px rgba(0,0,0,.7), 0 0 34px rgba(255,79,163,.26), 0 0 60px rgba(53,224,255,.12) !important;
  --glass-inset:inset 0 1px 0 rgba(53,224,255,.26), inset 0 0 0 1px rgba(255,79,163,.06) !important;
  --glass-hi:rgba(150,230,255,.6) !important; --track:rgba(0,0,0,.46) !important;
  --p:#ff4fa3 !important; --p2:#ff8dc6 !important; --acc:#35e0ff !important;
  --glow:255,79,163 !important; --pn-on-p:#1e0413 !important;
  --accent:#ff8dc6 !important; --accent2:#ff8dc6 !important;
  --worn-a:#ff4fa3 !important;
  --wl-base:#060913 !important;
  --wl-light:
    radial-gradient(96% 70% at 100% -8%, rgba(255,79,163,.26) 0%, transparent 58%),
    radial-gradient(96% 70% at -4% 108%, rgba(53,224,255,.20) 0%, transparent 60%) !important;
  --wl-motif:repeating-linear-gradient(96deg, rgba(190,232,255,.055) 0 1px, transparent 1px 9px) !important;  /* rain */
  --pn-plate:url('../env/night_crunch.jpg') !important;
  --vibe-grade:saturate(1.4) contrast(1.14) brightness(1.0) hue-rotate(4deg) !important;
  --pn-scrim:linear-gradient(110deg,rgba(3,5,14,.92),rgba(3,5,14,.46) 44%,rgba(6,2,12,.2)),
             linear-gradient(0deg,rgba(3,5,14,.62),transparent 66%) !important;
}
html body.mvc-light.pn-wear[data-collection="col-tokyonight"]{
  /* light key: the SAME city at 6am — overcast, pale wet concrete, the neon gone to signage. Both
     hot colours drop to deep, saturated inks that still read as magenta and cyan and clear AA. */
  --mvc-bg:#e6e9f2 !important;
  --mvc-fg:#11131c !important; --mvc-fg-70:rgba(17,19,28,.80) !important;
  --mvc-fg-55:rgba(17,19,28,.68) !important; --mvc-fg-40:rgba(17,19,28,.46) !important;
  --mvc-fg-30:rgba(17,19,28,.30) !important;
  --mvc-brd:rgba(17,19,28,.18) !important; --mvc-brd-hi:rgba(179,0,107,.42) !important;
  --glass-a:rgba(255,255,255,.9) !important; --glass-b:rgba(238,242,250,.78) !important;
  --glass-shadow:0 24px 50px -20px rgba(24,20,44,.3), 0 0 24px rgba(179,0,107,.08) !important;
  --glass-inset:inset 0 1px 0 rgba(255,255,255,.94) !important;
  --glass-hi:rgba(255,255,255,.94) !important; --track:rgba(17,19,28,.08) !important;
  --p:#b3006b !important; --p2:#8d0054 !important; --acc:#045c73 !important;
  --glow:179,0,107 !important; --pn-on-p:#ffffff !important;
  --accent:#8d0054 !important; --accent2:#8d0054 !important;
  --wl-base:#e6e9f2 !important;
  --wl-light:
    radial-gradient(96% 70% at 100% -8%, rgba(255,79,163,.16) 0%, transparent 58%),
    radial-gradient(96% 70% at -4% 108%, rgba(53,190,255,.16) 0%, transparent 60%) !important;
  --wl-motif:repeating-linear-gradient(96deg, rgba(30,40,70,.05) 0 1px, transparent 1px 9px) !important;
  --vibe-grade:saturate(1.1) contrast(1.06) brightness(1.06) hue-rotate(4deg) !important;
  --pn-scrim-l:linear-gradient(110deg,rgba(250,251,255,.9),rgba(250,251,255,.5) 46%,rgba(250,251,255,.12)),
               linear-gradient(0deg,rgba(230,233,242,.55),transparent 64%) !important;
}


/* ══ NEON NIGHTS ═══════════════════════════════════════════════════════════════════════════════
   "Midnight floor, electric teal, wunderkind swagger."
   Teal-black and CLEAN — the opposite temperament to Tokyo's wet chaos: one cold colour, held
   steady, with a gold second reading for the swagger. Signature motif: a wide horizontal
   light-bar sweep, like a strip light down a long empty studio. */
html body.pn-wear[data-collection="col-neonnights"]{
  --mvc-bg:#050f14 !important;
  --mvc-fg:#e9fbff !important; --mvc-fg-70:rgba(233,251,255,.78) !important;
  --mvc-fg-55:rgba(233,251,255,.66) !important; --mvc-fg-40:rgba(233,251,255,.46) !important;
  --mvc-fg-30:rgba(233,251,255,.30) !important;
  --mvc-brd:rgba(74,214,196,.22) !important; --mvc-brd-hi:rgba(74,214,196,.46) !important;
  --glass-a:rgba(10,36,44,.54) !important; --glass-b:rgba(3,14,20,.70) !important;
  --glass-shadow:0 26px 60px rgba(0,0,0,.62), 0 0 30px rgba(47,214,192,.18) !important;
  --glass-inset:inset 0 1px 0 rgba(120,255,235,.22), inset 0 0 0 1px rgba(47,214,192,.06) !important;
  --glass-hi:rgba(150,255,240,.58) !important; --track:rgba(0,0,0,.44) !important;
  --p:#2fd6c0 !important; --p2:#7ff0e2 !important; --acc:#ffd166 !important;
  --glow:47,214,192 !important; --pn-on-p:#02201b !important;
  --accent:#7ff0e2 !important; --accent2:#7ff0e2 !important;
  --worn-a:#2fd6c0 !important;
  --wl-base:#050f14 !important;
  --wl-light:
    linear-gradient(180deg, rgba(47,214,192,.16) 0%, transparent 22%),
    radial-gradient(120% 80% at 50% 112%, rgba(47,214,192,.14) 0%, transparent 60%) !important;
  --wl-motif:repeating-linear-gradient(0deg, rgba(47,214,192,.05) 0 2px, transparent 2px 26px) !important;
  --pn-plate:url('../store/midnight-neon/theme-hero.jpg') !important;
  --vibe-grade:saturate(1.24) contrast(1.12) brightness(1.0) hue-rotate(-10deg) !important;
  --pn-scrim:linear-gradient(110deg,rgba(2,10,14,.92),rgba(2,10,14,.46) 44%,rgba(2,10,14,.2)),
             linear-gradient(0deg,rgba(2,10,14,.6),transparent 66%) !important;
}
html body.mvc-light.pn-wear[data-collection="col-neonnights"]{
  --mvc-bg:#e3eeed !important;
  --mvc-fg:#0e1a19 !important; --mvc-fg-70:rgba(14,26,25,.80) !important;
  --mvc-fg-55:rgba(14,26,25,.68) !important; --mvc-fg-40:rgba(14,26,25,.46) !important;
  --mvc-fg-30:rgba(14,26,25,.30) !important;
  --mvc-brd:rgba(14,26,25,.18) !important; --mvc-brd-hi:rgba(13,110,96,.4) !important;
  --glass-a:rgba(255,255,255,.9) !important; --glass-b:rgba(238,247,246,.78) !important;
  --glass-shadow:0 24px 48px -20px rgba(10,50,45,.3) !important;
  --glass-inset:inset 0 1px 0 rgba(255,255,255,.94) !important;
  --glass-hi:rgba(255,255,255,.94) !important; --track:rgba(14,26,25,.08) !important;
  --p:#0d6e60 !important; --p2:#0a564b !important; --acc:#8a5a00 !important;
  --glow:13,110,96 !important; --pn-on-p:#ffffff !important;
  --accent:#0a564b !important; --accent2:#0a564b !important;
  --wl-base:#e3eeed !important;
  --wl-light:
    linear-gradient(180deg, rgba(47,214,192,.18) 0%, transparent 24%),
    radial-gradient(120% 80% at 50% 112%, rgba(47,214,192,.14) 0%, transparent 60%) !important;
  --wl-motif:repeating-linear-gradient(0deg, rgba(13,110,96,.05) 0 2px, transparent 2px 26px) !important;
  --vibe-grade:saturate(1.02) contrast(1.04) brightness(1.08) hue-rotate(-8deg) !important;
  --pn-scrim-l:linear-gradient(110deg,rgba(250,255,254,.9),rgba(250,255,254,.5) 46%,rgba(250,255,254,.12)),
               linear-gradient(0deg,rgba(227,238,237,.55),transparent 64%) !important;
}


/* ══ LA CROISETTE ══════════════════════════════════════════════════════════════════════════════
   "Cannes terrace, platinum trim. Awards-season armour."
   Mediterranean night: a blue-steel base, PLATINUM as the spine (a cool near-white metal, so its
   fill takes dark ink like brass does) and a sea-blue second. Signature motif: a fine vertical
   pinstripe — awning canvas / dinner-jacket cloth. */
html body.pn-wear[data-collection="col-croisette"]{
  --mvc-bg:#091220 !important;
  --mvc-fg:#eef4fb !important; --mvc-fg-70:rgba(238,244,251,.78) !important;
  --mvc-fg-55:rgba(238,244,251,.66) !important; --mvc-fg-40:rgba(238,244,251,.46) !important;
  --mvc-fg-30:rgba(238,244,251,.30) !important;
  --mvc-brd:rgba(223,231,240,.22) !important; --mvc-brd-hi:rgba(223,231,240,.48) !important;
  --glass-a:rgba(26,42,64,.5) !important; --glass-b:rgba(7,16,28,.66) !important;
  --glass-shadow:0 32px 74px rgba(0,0,0,.6), 0 0 28px rgba(207,217,230,.12) !important;
  --glass-inset:inset 0 1px 0 rgba(232,240,250,.26) !important;
  --glass-hi:rgba(240,246,255,.66) !important; --track:rgba(0,0,0,.38) !important;
  --p:#cfd9e6 !important; --p2:#ffffff !important; --acc:#6fb2e8 !important;
  --glow:207,217,230 !important; --pn-on-p:#0c1622 !important;
  --accent:#ffffff !important; --accent2:#ffffff !important;
  --worn-a:#cfd9e6 !important;
  --wl-base:#091220 !important;
  --wl-light:
    radial-gradient(110% 74% at 50% -10%, rgba(150,190,235,.18) 0%, transparent 56%),
    radial-gradient(120% 90% at 0% 112%, rgba(10,44,76,.5) 0%, transparent 62%) !important;
  --wl-motif:repeating-linear-gradient(90deg, rgba(223,231,240,.045) 0 1px, transparent 1px 11px) !important;
  --pn-plate:url('../store/cannes-riviera/office-cannes.jpg') !important;
  --vibe-grade:brightness(1.0) contrast(1.08) saturate(1.06) !important;
  --pn-scrim:linear-gradient(110deg,rgba(4,10,18,.92),rgba(4,10,18,.46) 44%,rgba(4,10,18,.2)),
             linear-gradient(0deg,rgba(4,10,18,.6),transparent 66%) !important;
}
html body.mvc-light.pn-wear[data-collection="col-croisette"]{
  --mvc-bg:#e9eef4 !important;
  --mvc-fg:#111820 !important; --mvc-fg-70:rgba(17,24,32,.80) !important;
  --mvc-fg-55:rgba(17,24,32,.68) !important; --mvc-fg-40:rgba(17,24,32,.46) !important;
  --mvc-fg-30:rgba(17,24,32,.30) !important;
  --mvc-brd:rgba(17,24,32,.18) !important; --mvc-brd-hi:rgba(45,74,110,.4) !important;
  --glass-a:rgba(255,255,255,.92) !important; --glass-b:rgba(240,245,251,.8) !important;
  --glass-shadow:0 26px 52px -20px rgba(20,40,70,.28) !important;
  --glass-inset:inset 0 1px 0 rgba(255,255,255,.95) !important;
  --glass-hi:rgba(255,255,255,.95) !important; --track:rgba(17,24,32,.08) !important;
  --p:#2f4f72 !important; --p2:#233d5a !important; --acc:#0f6a8c !important;
  --glow:47,79,114 !important; --pn-on-p:#ffffff !important;
  --accent:#233d5a !important; --accent2:#233d5a !important;
  --wl-base:#e9eef4 !important;
  --wl-light:
    radial-gradient(110% 74% at 50% -10%, rgba(150,190,235,.3) 0%, transparent 56%),
    radial-gradient(120% 90% at 0% 112%, rgba(190,208,226,.3) 0%, transparent 62%) !important;
  --wl-motif:repeating-linear-gradient(90deg, rgba(17,24,32,.045) 0 1px, transparent 1px 11px) !important;
  --vibe-grade:brightness(1.1) contrast(1.04) saturate(1.02) !important;
  --pn-scrim-l:linear-gradient(110deg,rgba(252,254,255,.9),rgba(252,254,255,.5) 46%,rgba(252,254,255,.12)),
               linear-gradient(0deg,rgba(233,238,244,.55),transparent 64%) !important;
}


/* ══ SCANDI STUDIO ═════════════════════════════════════════════════════════════════════════════
   "Blond wood, pale light, ruthless minimalism."
   Warm ash and oat. The discipline of the world is in what it DOESN'T do: the quietest hairlines
   and the softest shadow on the shelf, one muted sage as the only second colour, and a motif that
   is nearly nothing — a very wide, very faint horizontal timber line. */
html body.pn-wear[data-collection="col-scandi"]{
  --mvc-bg:#14130f !important;
  --mvc-fg:#f4f0e7 !important; --mvc-fg-70:rgba(244,240,231,.78) !important;
  --mvc-fg-55:rgba(244,240,231,.66) !important; --mvc-fg-40:rgba(244,240,231,.46) !important;
  --mvc-fg-30:rgba(244,240,231,.30) !important;
  --mvc-brd:rgba(216,195,157,.16) !important; --mvc-brd-hi:rgba(216,195,157,.32) !important;
  --glass-a:rgba(42,39,32,.5) !important; --glass-b:rgba(20,19,15,.64) !important;
  --glass-shadow:0 22px 46px rgba(0,0,0,.46) !important;   /* soft, low, no glow */
  --glass-inset:inset 0 1px 0 rgba(240,227,200,.16) !important;
  --glass-hi:rgba(240,227,200,.5) !important; --track:rgba(0,0,0,.34) !important;
  --p:#d8c39d !important; --p2:#f0e3c8 !important; --acc:#9fb3a2 !important;
  --glow:216,195,157 !important; --pn-on-p:#1b1508 !important;
  --accent:#f0e3c8 !important; --accent2:#f0e3c8 !important;
  --worn-a:#d8c39d !important;
  --wl-base:#14130f !important;
  --wl-light:linear-gradient(184deg, rgba(240,227,200,.10) 0%, transparent 40%) !important;
  --wl-motif:repeating-linear-gradient(0deg, rgba(216,195,157,.035) 0 1px, transparent 1px 34px) !important;
  --pn-plate:url('../store/skyline-legend/office-skyline.jpg') !important;
  --vibe-grade:saturate(.4) brightness(1.02) contrast(1.02) sepia(.2) !important;
  --pn-scrim:linear-gradient(110deg,rgba(12,11,8,.92),rgba(12,11,8,.46) 44%,rgba(12,11,8,.2)),
             linear-gradient(0deg,rgba(12,11,8,.6),transparent 66%) !important;
}
html body.mvc-light.pn-wear[data-collection="col-scandi"]{
  --mvc-bg:#e7dfcd !important;
  --mvc-fg:#1b1914 !important; --mvc-fg-70:rgba(27,25,20,.80) !important;
  --mvc-fg-55:rgba(27,25,20,.68) !important; --mvc-fg-40:rgba(27,25,20,.46) !important;
  --mvc-fg-30:rgba(27,25,20,.30) !important;
  --mvc-brd:rgba(27,25,20,.14) !important; --mvc-brd-hi:rgba(27,25,20,.28) !important;
  --glass-a:rgba(255,254,250,.9) !important; --glass-b:rgba(247,243,235,.78) !important;
  --glass-shadow:0 22px 42px -20px rgba(60,50,32,.24) !important;
  --glass-inset:inset 0 1px 0 rgba(255,255,255,.92) !important;
  --glass-hi:rgba(255,255,255,.94) !important; --track:rgba(27,25,20,.07) !important;
  --p:#6a5637 !important; --p2:#54432a !important; --acc:#3f5a4a !important;
  --glow:106,86,55 !important; --pn-on-p:#ffffff !important;
  --accent:#54432a !important; --accent2:#54432a !important;
  --wl-base:#e7dfcd !important;
  --wl-light:linear-gradient(184deg, rgba(255,255,255,.7) 0%, transparent 40%) !important;
  --wl-motif:repeating-linear-gradient(0deg, rgba(27,25,20,.035) 0 1px, transparent 1px 34px) !important;
  --vibe-grade:saturate(.42) brightness(1.12) contrast(1.02) sepia(.16) !important;
  --pn-scrim-l:linear-gradient(110deg,rgba(255,253,248,.9),rgba(255,253,248,.5) 46%,rgba(255,253,248,.12)),
               linear-gradient(0deg,rgba(231,223,205,.55),transparent 64%) !important;
}


/* ══ OLD SOHO ══════════════════════════════════════════════════════════════════════════════════
   "Long lunches, longer memories. Ad-land's golden mile."
   Tobacco and cognac, with billiard green as the second — a members' club, not a penthouse. It is
   deliberately the warmest, dirtiest base on the shelf, and its motif is the wallpaper: a wide
   damask-ish diagonal, faint enough to be a texture and present enough to be a room. */
html body.pn-wear[data-collection="col-oldsoho"]{
  --mvc-bg:#150d08 !important;
  --mvc-fg:#f7ede1 !important; --mvc-fg-70:rgba(247,237,225,.78) !important;
  --mvc-fg-55:rgba(247,237,225,.66) !important; --mvc-fg-40:rgba(247,237,225,.46) !important;
  --mvc-fg-30:rgba(247,237,225,.30) !important;
  --mvc-brd:rgba(217,138,58,.2) !important; --mvc-brd-hi:rgba(217,138,58,.42) !important;
  --glass-a:rgba(52,33,21,.52) !important; --glass-b:rgba(22,13,8,.68) !important;
  --glass-shadow:0 28px 62px rgba(0,0,0,.6), 0 0 26px rgba(217,138,58,.12) !important;
  --glass-inset:inset 0 1px 0 rgba(255,200,140,.2) !important;
  --glass-hi:rgba(255,214,164,.56) !important; --track:rgba(0,0,0,.42) !important;
  --p:#d98a3a !important; --p2:#f0b26e !important; --acc:#9db08a !important;
  --glow:217,138,58 !important; --pn-on-p:#1b0d02 !important;
  --accent:#f0b26e !important; --accent2:#f0b26e !important;
  --worn-a:#d98a3a !important;
  --wl-base:#150d08 !important;
  --wl-light:
    radial-gradient(100% 66% at 22% -6%, rgba(255,168,84,.18) 0%, transparent 56%),
    radial-gradient(120% 90% at 100% 110%, rgba(58,30,10,.5) 0%, transparent 62%) !important;
  --wl-motif:repeating-linear-gradient(45deg, rgba(217,138,58,.045) 0 2px, transparent 2px 18px) !important;
  --pn-plate:url('../env/lounge.jpg') !important;
  --vibe-grade:sepia(.34) contrast(1.08) brightness(.96) saturate(1.04) !important;
  --pn-scrim:linear-gradient(110deg,rgba(14,8,4,.92),rgba(14,8,4,.46) 44%,rgba(14,8,4,.22)),
             linear-gradient(0deg,rgba(14,8,4,.62),transparent 66%) !important;
}
html body.mvc-light.pn-wear[data-collection="col-oldsoho"]{
  --mvc-bg:#f0e6d7 !important;
  --mvc-fg:#1f1610 !important; --mvc-fg-70:rgba(31,22,16,.80) !important;
  --mvc-fg-55:rgba(31,22,16,.68) !important; --mvc-fg-40:rgba(31,22,16,.46) !important;
  --mvc-fg-30:rgba(31,22,16,.30) !important;
  --mvc-brd:rgba(110,62,20,.2) !important; --mvc-brd-hi:rgba(110,62,20,.4) !important;
  --glass-a:rgba(255,250,242,.9) !important; --glass-b:rgba(248,238,224,.78) !important;
  --glass-shadow:0 24px 50px -20px rgba(90,56,20,.3) !important;
  --glass-inset:inset 0 1px 0 rgba(255,255,255,.92) !important;
  --glass-hi:rgba(255,255,255,.94) !important; --track:rgba(110,62,20,.09) !important;
  --p:#8a4a12 !important; --p2:#6e3a0c !important; --acc:#3d5a3a !important;
  --glow:138,74,18 !important; --pn-on-p:#ffffff !important;
  --accent:#6e3a0c !important; --accent2:#6e3a0c !important;
  --wl-base:#f0e6d7 !important;
  --wl-light:
    radial-gradient(100% 66% at 22% -6%, rgba(255,190,120,.28) 0%, transparent 56%),
    radial-gradient(120% 90% at 100% 110%, rgba(200,164,120,.24) 0%, transparent 62%) !important;
  --wl-motif:repeating-linear-gradient(45deg, rgba(110,62,20,.05) 0 2px, transparent 2px 18px) !important;
  --vibe-grade:sepia(.28) contrast(1.04) brightness(1.08) !important;
  --pn-scrim-l:linear-gradient(110deg,rgba(255,249,240,.9),rgba(255,249,240,.5) 46%,rgba(255,249,240,.12)),
               linear-gradient(0deg,rgba(240,230,215,.55),transparent 64%) !important;
}


/* ══ MIAMI DECO ════════════════════════════════════════════════════════════════════════════════
   "Pastel power, chrome lines, sunset retainers."
   Plum night with flamingo and pool-aqua. The tell is the chrome: a repeating pair of fine
   horizontal lines — deco speed-stripes — running the width of the room, which is the only motif
   on the shelf that is a DRAWN object rather than a texture. */
html body.pn-wear[data-collection="col-miamideco"]{
  --mvc-bg:#130a19 !important;
  --mvc-fg:#ffeaf5 !important; --mvc-fg-70:rgba(255,234,245,.78) !important;
  --mvc-fg-55:rgba(255,234,245,.66) !important; --mvc-fg-40:rgba(255,234,245,.46) !important;
  --mvc-fg-30:rgba(255,234,245,.30) !important;
  --mvc-brd:rgba(255,138,194,.22) !important; --mvc-brd-hi:rgba(94,224,220,.44) !important;
  --glass-a:rgba(50,25,60,.5) !important; --glass-b:rgba(19,9,26,.66) !important;
  --glass-shadow:0 32px 80px rgba(18,0,26,.6), 0 0 44px rgba(255,138,194,.2) !important;
  --glass-inset:inset 0 1px 0 rgba(255,190,220,.24) !important;
  --glass-hi:rgba(255,200,228,.6) !important; --track:rgba(18,0,26,.44) !important;
  --p:#ff8ac2 !important; --p2:#ffc2de !important; --acc:#5ee0dc !important;
  --glow:255,138,194 !important; --pn-on-p:#280618 !important;
  --accent:#ffc2de !important; --accent2:#ffc2de !important;
  --worn-a:#ff8ac2 !important;
  --wl-base:#130a19 !important;
  --wl-light:
    linear-gradient(180deg, rgba(255,138,194,.18) 0%, rgba(94,224,220,.08) 30%, transparent 54%),
    radial-gradient(120% 80% at 50% 114%, rgba(94,224,220,.14) 0%, transparent 58%) !important;
  --wl-motif:repeating-linear-gradient(0deg,
      rgba(255,255,255,.06) 0 1px, transparent 1px 4px,
      rgba(255,255,255,.045) 4px 5px, transparent 5px 40px) !important;
  --pn-plate:url('../store/cannes-riviera/office-riviera-suite.jpg') !important;
  --vibe-grade:saturate(1.3) brightness(.98) contrast(1.08) hue-rotate(-16deg) !important;
  --pn-scrim:linear-gradient(110deg,rgba(12,4,18,.92),rgba(12,4,18,.46) 44%,rgba(12,4,18,.2)),
             linear-gradient(0deg,rgba(12,4,18,.62),transparent 66%) !important;
}
html body.mvc-light.pn-wear[data-collection="col-miamideco"]{
  --mvc-bg:#f9dcea !important;
  --mvc-fg:#22121a !important; --mvc-fg-70:rgba(34,18,26,.80) !important;
  --mvc-fg-55:rgba(34,18,26,.68) !important; --mvc-fg-40:rgba(34,18,26,.46) !important;
  --mvc-fg-30:rgba(34,18,26,.30) !important;
  --mvc-brd:rgba(34,18,26,.16) !important; --mvc-brd-hi:rgba(176,42,110,.42) !important;
  --glass-a:rgba(255,255,255,.92) !important; --glass-b:rgba(252,240,246,.8) !important;
  --glass-shadow:0 26px 54px -20px rgba(96,20,60,.26) !important;
  --glass-inset:inset 0 1px 0 rgba(255,255,255,.95) !important;
  --glass-hi:rgba(255,255,255,.95) !important; --track:rgba(34,18,26,.08) !important;
  --p:#b02a6e !important; --p2:#8c1f56 !important; --acc:#0a6f6b !important;
  --glow:176,42,110 !important; --pn-on-p:#ffffff !important;
  --accent:#8c1f56 !important; --accent2:#8c1f56 !important;
  --wl-base:#f9dcea !important;
  --wl-light:
    linear-gradient(180deg, rgba(255,138,194,.22) 0%, rgba(94,224,220,.12) 30%, transparent 54%),
    radial-gradient(120% 80% at 50% 114%, rgba(94,224,220,.16) 0%, transparent 58%) !important;
  --wl-motif:repeating-linear-gradient(0deg,
      rgba(34,18,26,.06) 0 1px, transparent 1px 4px,
      rgba(34,18,26,.045) 4px 5px, transparent 5px 40px) !important;
  --vibe-grade:saturate(1.1) brightness(1.1) contrast(1.02) hue-rotate(-12deg) !important;
  --pn-scrim-l:linear-gradient(110deg,rgba(255,250,252,.9),rgba(255,250,252,.5) 46%,rgba(255,250,252,.12)),
               linear-gradient(0deg,rgba(249,220,234,.55),transparent 64%) !important;
}


/* ───────────────────────────────────────────────────────────────────────────────────────────────
   3 · CROSS-CUTTING CORRECTIONS
   Three places in the legacy cascade hardcode a colour that would otherwise contradict the world
   the player just paid for. All three were found by looking at renders, not by reading code.
   ─────────────────────────────────────────────────────────────────────────────────────────────── */

/* 3a · THE HERO VALUATION GLASS was pinned to a literal dark navy (`rgba(12,15,22,.6)` in
   style-01.css) with `!important`, so it stayed the SAME BOX OF NAVY in every world — sitting
   directly on top of the plate that was supposed to have changed. It reads the world's glass now.
   The white ink on it is untouched (it stays white in the dark key), and the dark-key glass values
   are all deep enough to hold it — verified in the AA table. */
html body.pn-wear[data-collection^="col-"][data-view="office"] .pn-vibe-row>.pv-herochartbox{
  background:linear-gradient(160deg,var(--glass-a),var(--glass-b)) !important;
  border:1px solid var(--mvc-brd-hi) !important;
  box-shadow:var(--glass-shadow) !important;
}

/* 3b · THE WORN-MOOD CARD BORDER (style-01.css ~256) mixes the look's hue into `--rust-border`,
   which is now the world's own hairline — so it re-mixes a colour we already authored, and washes
   out exactly the worlds whose identity IS the hairline (Brutalist's hard white, Garage's crisp
   edge). The world's hairline wins. */
html body.pn-wear[data-collection^="col-"] .card.shard,
html body.pn-wear[data-collection^="col-"] .mvc-glass,
html body.pn-wear[data-collection^="col-"] .client-card,
html body.pn-wear[data-collection^="col-"] .hb-cell,
html body.pn-wear[data-collection^="col-"] .lg-panel{
  border-color:var(--mvc-brd) !important;
}

/* 3c · THE PRIMARY CTA. style-01.css repaints `.lg-btn--primary` from `--worn-a` with a black
   text-zone deepen and WHITE glyphs — a recipe that is only safe on a mid-to-dark hue. Three of
   these worlds have a PALE spine (Brutalist bone, Golden Age brass, Croisette platinum, Scandi
   oat), where white-on-pale is the exact dark-on-dark/light-on-light failure UX_RULES §1 bans.
   Every world therefore states the ink that belongs on its own fill (`--pn-on-p`) and the button
   uses it — one rule, all ten worlds, both keys. */
html body.pn-wear[data-collection^="col-"] .lg-btn--primary,
html body.pn-wear[data-collection^="col-"] .pn-btn--primary{
  /* MEASURED, then corrected. The first pass reused the house recipe — a radial black "text-zone
     deepen" plus a 10% black bottom stop — which exists to protect WHITE glyphs on bright orange.
     With the world's own dark `--pn-on-p` on it, that deepen works AGAINST the ink: it dropped
     Noir Classic's CTA to 4.19:1 and Tokyo's to 4.05:1 at their darkest stop, both AA failures the
     eye would never have caught. The deepen is gone and the bottom stop pulled to 4% black, which
     takes the same two buttons to 6.13:1 and 5.91:1. The CTA is the one control a player must never
     misread, so it is measured at its WORST stop, not its average. */
  background:
    linear-gradient(178deg, color-mix(in srgb, var(--p) 84%, #fff 16%), color-mix(in srgb, var(--p) 96%, #000 4%)) !important;
  border-color:color-mix(in srgb, var(--p) 55%, #fff) !important;
  color:var(--pn-on-p) !important;
  text-shadow:none !important;
}
html body.pn-wear[data-collection^="col-"] .lg-btn--primary span,
html body.pn-wear[data-collection^="col-"] .pn-btn--primary span{ color:var(--pn-on-p) !important; }

/* 3c-ii · THE OVERLAY CTA — the worst thing this pass found, and it was already shipping.
   The legacy `button.primary` (the Close/Continue action in every Finder window: welcome, confirms,
   the CFO dossier, the week summary) resolves to a SOLID `background:var(--accent)` with hardcoded
   WHITE glyphs. Under a worn look `--accent` has been the collection's raw hue since 2026-07-18 —
   so that button has been white-on-a-bright-fill this whole time. Measured, via
   `tools/theme-modal-aa.mjs`:

       BRUTALIST  1.21:1   ·  NEON NIGHTS  1.83:1  ·  GOLDEN AGE  1.92:1
       GARAGE     2.87:1   ·  TOKYO NIGHT  3.04:1  ·  NOIR CLASSIC 3.05:1   (need 4.5:1)

   Every one of those is a UX_RULES §1 failure, including the CURRENT default at 3.05 — this is not
   a regression the new worlds introduced, it is a live defect the new pale spines (bone, brass,
   platinum, oat) would have taken from bad to unreadable. Each world already states the ink that
   belongs on its own fill, so the fix is to make this button use it, exactly as §3c does for the
   glass CTA. Scoped to worn views only, so the un-worn shell is untouched. */
html body.pn-wear[data-collection^="col-"] button.primary{
  background:linear-gradient(178deg, color-mix(in srgb, var(--p) 84%, #fff 16%),
                                     color-mix(in srgb, var(--p) 96%, #000 4%)) !important;
  border-color:color-mix(in srgb, var(--p) 55%, #fff) !important;
  color:var(--pn-on-p) !important;
  text-shadow:none !important;
}
html body.pn-wear[data-collection^="col-"] button.primary span{ color:var(--pn-on-p) !important; }

/* 3c-iii · THE SAME BUTTON, LIGHT KEY — the gradient has to run the other way.
   In the dark key `--p` is the world's bright spine and its ink is dark, so lifting the top stop
   16% toward white is free headroom. In the light key `--p` is already a DEEP colour chosen to
   carry WHITE ink, and that same 16% lift pushed four worlds back under the line
   (GOLDEN AGE 3.89 · GARAGE 4.14 · NEON NIGHTS 4.39 · NOIR CLASSIC 4.49). Inverted: a 4% lift and
   a 12% deepen, which takes them to 4.86 / 4.90 / 5.63 / 5.59. Two keys, two recipes — a single
   set of numbers pretending to work in both is how the first version failed. */
html body.mvc-light.pn-wear[data-collection^="col-"] .lg-btn--primary,
html body.mvc-light.pn-wear[data-collection^="col-"] .pn-btn--primary,
html body.mvc-light.pn-wear[data-collection^="col-"] button.primary{
  background:linear-gradient(178deg, color-mix(in srgb, var(--p) 96%, #fff 4%),
                                     color-mix(in srgb, var(--p) 88%, #000 12%)) !important;
  border-color:color-mix(in srgb, var(--p) 70%, #000) !important;
}

/* 3d · THE HERO EYEBROW/LABELS read `--p2`, which in the pale-spine worlds is near-white — fine in
   the dark key (it sits on the world's dark scrim) and an AA failure in the light key (near-white
   on a bright scrim). In the light key those worlds already publish a DEEP `--p2`, so this is
   simply the guarantee stated in one place rather than assumed. */
html body.mvc-light.pn-wear[data-collection^="col-"][data-view="office"] .pn-vibe-row>.perf-hero .mvc-kpi-lbl,
html body.mvc-light.pn-wear[data-collection^="col-"][data-view="office"] .pn-vibe-row>.perf-hero .mvc-hero-accent,
html body.mvc-light.pn-wear[data-collection^="col-"][data-view="office"] .perf-hero-eyebrow{
  color:var(--p2) !important;
}

/* 3f · THE SURFACE LADDER — the OTHER half of the measured problem.
   `pn-glass.css` carries a second, parallel surface system: the four-level elevation ladder
   (`--lg-surface-0` … `--lg-surface-3`, CEO 2026-07-18, "not enough contrast, similar coloured
   light modules on light backgrounds"). It is what actually paints the KPI cards, the DO-THIS-NOW
   strip and every `.lg-panel` on the dashboard — and its values are HARDCODED blue-greys
   (#090a10 / #1a1d29 / #252936 / #2e3340). So even with `--mvc-*` fully themed, a third of the
   dashboard stayed the same navy in every world. That is a large part of why the CEO saw one
   interface ten times.

   The ladder does NOT get flattened here. Its law is ΔL* ≥ 3 between adjacent levels, and the way
   to keep that law while changing the colour is to keep the RELATIVE LIFTS and move the base. The
   fractions below are measured off the shipped values (e.g. s1-top #1a1d29 from canvas #090a10 is
   a 7% lift toward white; s2-top is 11.4%; surface-3 is 15%), so every world reproduces the exact
   same elevation staircase in its own colour. Change the world, keep the architecture. */
html body.pn-wear[data-collection^="col-"]{
  --lg-surface-0:var(--mvc-bg) !important;
  --lg-s1-top:color-mix(in srgb, var(--mvc-bg) 93%, #fff) !important;
  --lg-s1-bot:color-mix(in srgb, var(--mvc-bg) 97%, #fff) !important;
  --lg-s2-top:color-mix(in srgb, var(--mvc-bg) 88.5%, #fff) !important;
  --lg-s2-bot:color-mix(in srgb, var(--mvc-bg) 93.5%, #fff) !important;
  --lg-surface-3:color-mix(in srgb, var(--mvc-bg) 85%, #fff) !important;
  --lg-hair-neutral:var(--mvc-brd) !important;
  --lg-ink:var(--mvc-fg) !important; --lg-ink-dim:var(--mvc-fg-55) !important;
  --lg-hair:var(--mvc-brd) !important;
  --lg-panel-bg:linear-gradient(168deg, var(--glass-a), var(--glass-b)) !important;
  --lg-card-bg:linear-gradient(158deg, var(--glass-a), var(--glass-b)) !important;
}
/* LIGHT KEY — the same staircase, measured off the shipped warm-bone ladder (canvas #e4dbca →
   s1-top #f3eee2 is a 55% lift toward white, s2-top 81%, surface-3 pure white). On a light base a
   percentage lift has to be far larger to move L* the same distance, which is exactly why this is
   a second block and not one set of numbers pretending to work in both keys. */
html body.mvc-light.pn-wear[data-collection^="col-"]{
  --lg-s1-top:color-mix(in srgb, var(--mvc-bg) 45%, #fff) !important;
  --lg-s1-bot:color-mix(in srgb, var(--mvc-bg) 78%, #fff) !important;
  --lg-s2-top:color-mix(in srgb, var(--mvc-bg) 19%, #fff) !important;
  --lg-s2-bot:color-mix(in srgb, var(--mvc-bg) 48%, #fff) !important;
  --lg-surface-3:#ffffff !important;
}

/* 3e · REDUCED MOTION — the plate holds still. Stated last so it wins over §1b unconditionally. */
@media (prefers-reduced-motion:reduce){
  html body.pn-wear[data-collection^="col-"] .pn-vibe{ animation:none !important; transform:scale(1.03) !important; }
}
