/* ==========================================================================
   OFC — Official Fan Collectibles
   Design system v2 — "Daylight & Lightbox"
   Pages are light, clean and easy to operate.
   Cards live inside dark .stage zones where the neon actually glows.
   ========================================================================== */

/* ---------- 1. TOKENS — LIGHT (default) ---------- */
:root{
  /* ground + surfaces */
  --ground:#FBF8FC;
  --surface-1:#FFFFFF;
  --surface-2:#F6F0F9;
  --surface-3:#EFE6F4;
  --hairline:rgba(24,16,32,.11);
  --hairline-strong:rgba(24,16,32,.18);
  --hairline-lit:rgba(194,16,126,.38);

  /* ink */
  --ink:#15101C;          /* 16.3:1 on --ground */
  --ink-2:#4B4257;        /*  8.1:1 */
  --ink-3:#776E85;        /*  4.6:1 — metadata only */
  --ink-inv:#FFFFFF;

  /* pink — the brand */
  --pink-900:#7A0850;
  --pink-700:#A00B68;     /* hover fill */
  --pink-600:#C2107E;     /* PRIMARY fill + links · 6.2:1 on light */
  --pink-500:#E8189B;     /* accents, glow, decorative only */
  --pink-300:#FF7FC4;     /* on dark stages */
  --pink-100:#FDEAF5;     /* tint */
  --pink-050:#FEF5FA;

  /* electric — secondary light source */
  --volt-700:#0B63C9;     /* text-safe on light · 5.6:1 */
  --volt-500:#3E9BFF;
  --volt-300:#8CC4FF;
  --volt-100:#E8F2FF;

  /* semantic */
  --ok:#0A7D52;  --ok-100:#E6F6EF;
  --warn:#8A5A00; --warn-100:#FFF6E3;
  --bad:#B3261E; --bad-100:#FDECEA;

  /* glow */
  --glow-pink:rgba(232,24,155,.30);
  --glow-volt:rgba(62,155,255,.28);

  /* spacing · 8px base */
  --s1:4px; --s2:8px; --s3:12px; --s4:16px; --s5:24px;
  --s6:32px; --s7:48px; --s8:64px; --s9:96px; --s10:128px;

  /* radii */
  --r-sm:8px; --r-md:14px; --r-lg:22px; --r-card:12px; --r-pill:999px;

  /* type */
  --font-display:"Archivo","Inter",system-ui,sans-serif;
  --font-ui:"Inter",system-ui,-apple-system,"Segoe UI",Roboto,sans-serif;
  --font-mono:"JetBrains Mono",ui-monospace,"SF Mono",Menlo,Consolas,monospace;

  /* motion */
  --m-instant:80ms; --m-fast:160ms; --m-base:240ms; --m-slow:400ms;
  --ease:cubic-bezier(.2,0,0,1);
  --ease-out:cubic-bezier(.16,1,.3,1);

  /* layout */
  --max:1240px; --max-read:760px; --header-h:76px;
  --card-ratio:5/7;

  /* elevation */
  --lift-1:0 1px 2px rgba(24,16,32,.06), 0 2px 8px rgba(24,16,32,.05);
  --lift-2:0 2px 6px rgba(24,16,32,.07), 0 12px 28px rgba(24,16,32,.08);
  --lift-3:0 8px 20px rgba(24,16,32,.10), 0 28px 60px rgba(24,16,32,.12);
}

/* ---------- 2. THE STAGE — dark zone where neon lives ----------
   Redefining the same tokens inside .stage flips every component that
   uses them. One class, whole subtree goes dark. */
.stage{
  --ground:#0A0610;
  --surface-1:#150D1E;
  --surface-2:#1D1229;
  --surface-3:#271836;
  --hairline:rgba(255,255,255,.10);
  --hairline-strong:rgba(255,255,255,.20);
  --hairline-lit:rgba(255,127,196,.45);
  --ink:#FBF6FA;
  --ink-2:#C9BBD4;
  --ink-3:#9385A0;
  --ink-inv:#15101C;
  --pink-600:#FF4FA3;
  --pink-700:#FF7FC4;
  --volt-700:#8CC4FF;
  --ok:#4FE0A6; --warn:#FFC46B; --bad:#FF8A8A;
  --lift-1:none; --lift-2:none; --lift-3:none;
  background:
    radial-gradient(90% 70% at 18% 0%, rgba(232,24,155,.20), transparent 62%),
    radial-gradient(80% 60% at 88% 12%, rgba(62,155,255,.16), transparent 60%),
    linear-gradient(180deg,#120A1B,#0A0610 70%);
  color:var(--ink);
  border-radius:var(--r-lg);
  position:relative;
  overflow:hidden;
}
.stage::before{
  content:"";position:absolute;inset:0;pointer-events:none;
  background:
    repeating-linear-gradient(90deg,rgba(255,255,255,.028) 0 1px,transparent 1px 46px),
    repeating-linear-gradient(0deg,rgba(255,255,255,.028) 0 1px,transparent 1px 46px);
  mask-image:radial-gradient(70% 60% at 50% 40%,#000,transparent 78%);
}
.stage-flush{border-radius:0}
.stage>*{position:relative;z-index:1}

/* ---------- 3. RESET ---------- */
*,*::before,*::after{box-sizing:border-box}
html{-webkit-text-size-adjust:100%;scroll-behavior:smooth}
body{margin:0;background:var(--ground);color:var(--ink);
  font-family:var(--font-ui);font-size:17px;line-height:1.65;
  -webkit-font-smoothing:antialiased;overflow-x:hidden}
img,svg,video{max-width:100%;height:auto;display:block}
button,input,select,textarea{font:inherit;color:inherit}
h1,h2,h3,h4,h5{margin:0;line-height:1.14;font-weight:750;letter-spacing:-.022em;color:var(--ink)}
p{margin:0 0 var(--s4)}
ul,ol{margin:0 0 var(--s4);padding-left:1.25em}
li{margin-bottom:var(--s2)}
a{color:var(--pink-600);text-decoration:none;text-underline-offset:3px;
  transition:color var(--m-fast)}
a:hover{text-decoration:underline;color:var(--pink-700)}
hr{border:0;border-top:1px solid var(--hairline);margin:var(--s7) 0}
:focus-visible{outline:3px solid var(--pink-500);outline-offset:2px;border-radius:4px}
::selection{background:var(--pink-100);color:var(--pink-900)}
.stage ::selection{background:var(--pink-600);color:#fff}

/* ---------- 4. LAYOUT ---------- */
.wrap{width:100%;max-width:var(--max);margin-inline:auto;padding-inline:var(--s5)}
.wrap-read{max-width:var(--max-read)}
.section{padding-block:var(--s9)}
.section-sm{padding-block:var(--s7)}
.grid{display:grid;gap:var(--s5)}
.g2{grid-template-columns:repeat(2,1fr)}
.g3{grid-template-columns:repeat(3,1fr)}
.g4{grid-template-columns:repeat(4,1fr)}
.split{display:grid;grid-template-columns:7fr 5fr;gap:var(--s8);align-items:center}
.stack>*+*{margin-top:var(--s4)}
.center{text-align:center}
.mt0{margin-top:0}.mb0{margin-bottom:0}
.muted{color:var(--ink-2)}
.dim{color:var(--ink-3)}
.small{font-size:14.5px;line-height:1.6}
.tiny{font-size:13px;line-height:1.5}
.mono{font-family:var(--font-mono);font-variant-numeric:tabular-nums}
.hide{display:none !important}
.skip{position:absolute;left:-9999px;top:0;z-index:200;background:var(--pink-600);
  color:#fff;padding:var(--s3) var(--s4);border-radius:0 0 var(--r-sm) 0;font-weight:650}
.skip:focus{left:0}
.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;
  clip:rect(0 0 0 0);white-space:nowrap;border:0}

/* ---------- 5. TYPE ---------- */
.display{font-family:var(--font-display);font-weight:700;letter-spacing:-.03em}
h1,.h1{font-size:clamp(36px,5.6vw,60px);line-height:1.04}
h2,.h2{font-size:clamp(27px,3.6vw,42px);line-height:1.1}
h3,.h3{font-size:clamp(19px,2vw,25px)}
h4,.h4{font-size:17.5px;font-weight:700}
.lead{font-size:clamp(17px,1.5vw,20px);color:var(--ink-2);max-width:56ch;line-height:1.6}
.eyebrow{font-size:12px;font-weight:750;letter-spacing:.13em;text-transform:uppercase;
  color:var(--pink-600);margin-bottom:var(--s3)}
.eyebrow-volt{color:var(--volt-700)}
.glow-text{color:var(--pink-600)}
.stage .glow-text{color:var(--pink-300);text-shadow:0 0 18px var(--glow-pink),0 0 44px rgba(232,24,155,.28)}
.prose{max-width:74ch}
.prose h2{margin-top:var(--s7);margin-bottom:var(--s3)}
.prose h3{margin-top:var(--s6);margin-bottom:var(--s2)}

/* ---------- 6. HEADER ---------- */
.header{position:sticky;top:0;z-index:100;height:var(--header-h);
  background:rgba(251,248,252,.82);backdrop-filter:blur(18px) saturate(1.4);
  -webkit-backdrop-filter:blur(18px) saturate(1.4);
  border-bottom:1px solid transparent;transition:border-color var(--m-base),box-shadow var(--m-base)}
.header.scrolled{border-bottom-color:var(--hairline);box-shadow:var(--lift-1)}
.header-inner{display:flex;align-items:center;gap:var(--s5);height:100%;
  max-width:var(--max);margin-inline:auto;padding-inline:var(--s5)}
.logo{display:flex;align-items:center;gap:11px;font-family:var(--font-display);
  font-weight:700;font-size:21px;color:var(--ink);letter-spacing:-.01em;text-decoration:none;flex:none}
.logo:hover{text-decoration:none;color:var(--ink)}
.logo-mark{width:34px;height:34px;border-radius:9px;flex:none;
  background:linear-gradient(145deg,#FF4FA3,#C2107E 48%,#3E9BFF 135%);
  box-shadow:0 0 0 1px rgba(194,16,126,.25), 0 4px 14px var(--glow-pink), 0 0 26px rgba(255,79,163,.30);
  display:grid;place-items:center;font-size:11px;color:#fff;font-weight:800;letter-spacing:.02em}
.logo small{font-family:var(--font-ui);font-size:11px;font-weight:500;color:var(--ink-3);
  letter-spacing:.03em;display:block;margin-top:-4px}
.nav{display:flex;gap:2px;margin-inline:auto}
.nav a{position:relative;padding:9px 15px;border-radius:var(--r-pill);font-size:15px;
  font-weight:550;color:var(--ink-2);text-decoration:none;
  transition:color var(--m-fast),background var(--m-fast)}
.nav a:hover{color:var(--ink);background:var(--pink-050);text-decoration:none}
.nav a[aria-current="page"]{color:var(--pink-600);background:var(--pink-100)}
.utility{display:flex;align-items:center;gap:var(--s2);flex:none}
.burger{display:none;background:var(--surface-1);border:1px solid var(--hairline);
  border-radius:var(--r-sm);width:44px;height:44px;cursor:pointer}
.burger span{display:block;width:18px;height:2px;background:var(--ink);margin:3.5px auto;border-radius:2px}

/* ---------- 7. BUTTONS ---------- */
.btn{display:inline-flex;align-items:center;justify-content:center;gap:9px;
  min-height:46px;padding:12px 22px;border-radius:var(--r-pill);border:1.5px solid transparent;
  font-size:15px;font-weight:650;cursor:pointer;text-decoration:none;letter-spacing:-.005em;
  transition:background var(--m-fast),border-color var(--m-fast),transform var(--m-instant),
             box-shadow var(--m-fast),color var(--m-fast)}
.btn:hover{text-decoration:none}
.btn:active{transform:scale(.985)}
.btn-primary{background:var(--pink-600);color:#fff;box-shadow:0 2px 10px var(--glow-pink)}
.btn-primary:hover{background:var(--pink-700);color:#fff;box-shadow:0 4px 20px var(--glow-pink)}
/* On stage the fill stays #C2107E so white label keeps 5.7:1 (AA for normal
   text). The neon comes from the glow ring, not from a lighter fill. */
.stage .btn-primary{background:#C2107E;color:#fff;
  box-shadow:0 0 0 1.5px rgba(255,127,196,.55),0 0 30px rgba(255,79,163,.55)}
.stage .btn-primary:hover{background:#E8189B;color:#fff;
  box-shadow:0 0 0 1.5px rgba(255,159,210,.8),0 0 44px rgba(255,79,163,.75)}
.btn-secondary{background:var(--surface-1);border-color:var(--hairline-strong);color:var(--ink)}
.btn-secondary:hover{border-color:var(--pink-600);color:var(--pink-600);background:var(--pink-050)}
.stage .btn-secondary{background:transparent;border-color:var(--hairline-lit);color:var(--pink-300)}
.stage .btn-secondary:hover{background:rgba(255,79,163,.12);color:#fff}
.btn-ghost{background:transparent;color:var(--ink-2);padding-inline:12px;border-color:transparent}
.btn-ghost:hover{color:var(--pink-600);background:var(--pink-050)}
.btn-lg{min-height:56px;padding:16px 32px;font-size:16.5px}
.btn-sm{min-height:38px;padding:8px 16px;font-size:14px}
.btn-block{width:100%}
.btn[disabled],.btn[aria-disabled="true"]{opacity:.45;cursor:not-allowed;pointer-events:none;box-shadow:none}
.btn-row{display:flex;flex-wrap:wrap;gap:var(--s3)}

/* ---------- 8. SURFACES ---------- */
.panel{background:var(--surface-1);border:1px solid var(--hairline);
  border-radius:var(--r-lg);padding:var(--s5);box-shadow:var(--lift-1)}
.panel-2{background:var(--surface-2);box-shadow:none}
.panel-lit{border-color:var(--hairline-lit);
  background:linear-gradient(180deg,var(--pink-050),var(--surface-1) 55%);
  box-shadow:0 2px 14px rgba(232,24,155,.10)}
.stage .panel{background:var(--surface-1);border-color:var(--hairline);box-shadow:none}
.stage .panel-lit{background:linear-gradient(180deg,rgba(255,79,163,.14),transparent 60%),var(--surface-1);
  border-color:var(--hairline-lit);box-shadow:0 0 28px rgba(255,79,163,.16)}
.panel-warn{border-color:rgba(138,90,0,.28);background:var(--warn-100);box-shadow:none}
.panel-hover{transition:transform var(--m-base) var(--ease),box-shadow var(--m-base),border-color var(--m-base)}
.panel-hover:hover{transform:translateY(-4px);box-shadow:var(--lift-2);border-color:var(--hairline-lit)}
.band{background:var(--surface-2);border-block:1px solid var(--hairline)}
.rule{height:1px;background:var(--hairline);margin-block:var(--s6)}

/* ---------- 9. THE CARD ---------- */
.card-obj{position:relative;aspect-ratio:var(--card-ratio);width:100%;
  border-radius:var(--r-card);overflow:hidden;
  background:#150D1E;border:1px solid rgba(255,255,255,.14);
  transform-style:preserve-3d;
  box-shadow:0 10px 30px rgba(10,6,16,.45);
  transition:transform var(--m-base) var(--ease-out),box-shadow var(--m-base)}
.card-obj::after{content:"";position:absolute;inset:0;pointer-events:none;
  background:radial-gradient(120% 80% at var(--mx,50%) var(--my,15%),rgba(255,255,255,.17),transparent 55%)}
.card-obj .card-art{position:absolute;inset:0;background:linear-gradient(160deg,#2A1636,#0E0716 62%);
  background-size:cover;background-position:center}
.card-obj .card-photo{position:absolute;inset:0;object-fit:cover;width:100%;height:100%;display:none}
.card-obj.has-photo .card-photo{display:block}
.card-obj.has-photo .card-art{opacity:.35}
.card-obj .card-frame{position:absolute;inset:7px;border:1px solid rgba(255,255,255,.18);
  border-radius:8px;pointer-events:none}
.card-obj .card-meta{position:absolute;left:0;right:0;bottom:0;padding:11px 13px;
  background:linear-gradient(0deg,rgba(8,4,14,.94),rgba(8,4,14,.6) 60%,transparent)}
.card-obj .card-name{font-size:12.5px;font-weight:750;margin:0;line-height:1.2;color:#fff}
.card-obj .card-sub{font-size:9.5px;color:rgba(255,255,255,.62);letter-spacing:.09em;
  text-transform:uppercase;margin:2px 0 0;font-family:var(--font-mono)}
.card-obj .card-serial{position:absolute;top:10px;right:12px;font-family:var(--font-mono);
  font-size:10px;color:var(--pink-300);letter-spacing:.04em;z-index:2}
.card-obj .card-tier{position:absolute;top:10px;left:12px;font-family:var(--font-mono);
  font-size:9px;letter-spacing:.13em;text-transform:uppercase;color:rgba(255,255,255,.6);z-index:2}
.card-obj .sheen{position:absolute;inset:-40%;pointer-events:none;opacity:0;transition:opacity var(--m-base)}
.card-obj:hover .sheen,.card-obj.lit .sheen{opacity:1}

.f-base .card-art{background-image:linear-gradient(160deg,#2A1636,#0E0716 62%)}
.f-base .sheen{background:linear-gradient(115deg,transparent 42%,rgba(255,255,255,.06) 50%,transparent 58%)}
.f-gloss .card-art{background-image:linear-gradient(160deg,#35204A,#100819 62%)}
.f-gloss .sheen{background:linear-gradient(115deg,transparent 38%,rgba(255,255,255,.16) 50%,transparent 62%)}
.f-foil{border-color:rgba(140,196,255,.45)}
.f-foil .card-art{background-image:linear-gradient(160deg,#17355A,#0A1524 65%)}
.f-foil .sheen{background:linear-gradient(110deg,transparent 30%,rgba(140,196,255,.34) 46%,rgba(255,255,255,.26) 52%,transparent 70%)}
.f-prismatic{border-color:rgba(255,79,163,.5)}
.f-prismatic .card-art{background-image:linear-gradient(160deg,#1E2A5C,#4A1149 55%,#0B0714 100%)}
.f-prismatic .sheen{background:linear-gradient(105deg,transparent 22%,rgba(62,155,255,.38) 36%,rgba(255,255,255,.3) 50%,rgba(255,79,163,.42) 64%,transparent 80%)}
.f-relic .card-art{background-image:linear-gradient(160deg,#35291A,#120D07 62%)}
.f-relic .card-frame{border-color:rgba(255,181,71,.45)}
.f-relic .sheen{background:linear-gradient(115deg,transparent 40%,rgba(255,181,71,.2) 50%,transparent 60%)}
.f-signed .card-art{background-image:linear-gradient(160deg,#26193A,#0D0716 62%)}
.f-signed .card-art::after{content:"";position:absolute;left:14%;right:22%;bottom:26%;height:38px;
  background:
    radial-gradient(closest-side,rgba(255,255,255,.85),transparent 72%) 6% 62%/22% 34% no-repeat,
    radial-gradient(closest-side,rgba(255,255,255,.7),transparent 72%) 34% 30%/26% 46% no-repeat,
    radial-gradient(closest-side,rgba(255,255,255,.78),transparent 72%) 66% 66%/30% 38% no-repeat;
  filter:blur(.4px);transform:rotate(-6deg);opacity:.9}
.f-serial .card-art{background-image:linear-gradient(160deg,#1E1730,#0A0713 62%)}
.f-serial .card-serial{color:#fff;text-shadow:0 1px 0 rgba(0,0,0,.9),0 -1px 0 rgba(255,255,255,.22);font-weight:700}
.f-oneofone{border-color:rgba(255,79,163,.65);
  box-shadow:0 0 0 1px rgba(255,79,163,.25),0 12px 44px rgba(255,79,163,.30)}
.f-oneofone .card-art{background-image:radial-gradient(90% 70% at 50% 20%,#3D0E31,#07040C 70%)}
.f-oneofone .card-frame{border-color:rgba(255,79,163,.55)}
.f-oneofone .sheen{background:radial-gradient(60% 40% at var(--mx,50%) var(--my,30%),rgba(255,79,163,.42),transparent 70%)}

.card-fan{display:flex;justify-content:center;align-items:flex-end}
.card-fan .card-slot{width:136px;flex:none;transition:transform var(--m-base) var(--ease-out)}
.card-fan .card-slot:not(:first-child){margin-left:-36px}
.card-fan .card-slot:nth-child(1){transform:rotate(-8deg)}
.card-fan .card-slot:nth-child(2){transform:rotate(-4deg)}
.card-fan .card-slot:nth-child(3){z-index:2}
.card-fan .card-slot:nth-child(4){transform:rotate(4deg)}
.card-fan .card-slot:nth-child(5){transform:rotate(8deg)}
.card-fan .card-slot:hover{transform:translateY(-16px);z-index:3}
.card-fan .card-slot:nth-child(1):hover{transform:rotate(-8deg) translateY(-16px)}
.card-fan .card-slot:nth-child(2):hover{transform:rotate(-4deg) translateY(-16px)}
.card-fan .card-slot:nth-child(4):hover{transform:rotate(4deg) translateY(-16px)}
.card-fan .card-slot:nth-child(5):hover{transform:rotate(8deg) translateY(-16px)}

/* ---------- 10. CHIPS ---------- */
.chip{display:inline-flex;align-items:center;gap:7px;padding:5px 13px;border-radius:var(--r-pill);
  font-size:12.5px;font-weight:650;letter-spacing:.01em;border:1px solid var(--hairline);
  background:var(--surface-2);color:var(--ink-2)}
.chip-neon{border-color:var(--hairline-lit);color:var(--pink-600);background:var(--pink-100)}
.stage .chip-neon{background:rgba(255,79,163,.16);color:var(--pink-300);
  box-shadow:0 0 16px rgba(255,79,163,.28)}
.chip-volt{border-color:rgba(11,99,201,.3);color:var(--volt-700);background:var(--volt-100)}
.chip-ok{border-color:rgba(10,125,82,.3);color:var(--ok);background:var(--ok-100)}
.chip-warn{border-color:rgba(138,90,0,.3);color:var(--warn);background:var(--warn-100)}
.chip-dot::before{content:"";width:6px;height:6px;border-radius:50%;background:currentColor;
  box-shadow:0 0 8px currentColor}

/* ---------- 11. STATS ---------- */
.statrail{display:flex;flex-wrap:wrap;gap:var(--s7);padding-block:var(--s5);
  border-top:1px solid var(--hairline)}
.stat .num{font-family:var(--font-mono);font-variant-numeric:tabular-nums;
  font-size:clamp(26px,3vw,36px);font-weight:700;line-height:1.1;letter-spacing:-.03em;color:var(--ink)}
.stat .lbl{font-size:12.5px;color:var(--ink-3);letter-spacing:.03em;margin-top:2px}
.stat-neon .num{color:var(--pink-600)}
.stage .stat-neon .num{color:var(--pink-300);text-shadow:0 0 22px var(--glow-pink)}
.stat-ok .num{color:var(--ok)}

/* ---------- 12. TABLES ---------- */
.table-scroll{overflow-x:auto;-webkit-overflow-scrolling:touch}
table.data{width:100%;border-collapse:collapse;font-size:14.5px}
table.data caption{text-align:left;color:var(--ink-3);font-size:13px;padding-bottom:var(--s3)}
table.data th{text-align:left;font-size:11.5px;letter-spacing:.09em;text-transform:uppercase;
  color:var(--ink-3);font-weight:700;padding:11px 13px;border-bottom:1.5px solid var(--hairline);white-space:nowrap}
table.data td{padding:12px 13px;border-bottom:1px solid var(--hairline);vertical-align:top}
table.data tbody tr:nth-child(even){background:var(--surface-2)}
.stage table.data tbody tr:nth-child(even){background:rgba(255,255,255,.03)}
table.data td.num,table.data th.num{text-align:right;font-family:var(--font-mono);
  font-variant-numeric:tabular-nums;white-space:nowrap}
table.data tfoot td{font-weight:700;border-top:2px solid var(--hairline-lit);border-bottom:0}

/* ---------- 13. FORMS ---------- */
.field{margin-bottom:var(--s5)}
.field label,.field-label{display:block;font-size:15px;font-weight:700;margin-bottom:7px;color:var(--ink)}
.field .help{font-size:13.5px;color:var(--ink-3);margin:-3px 0 9px}
.field .req{font-size:12px;color:var(--pink-600);font-weight:650;margin-left:7px}
.input,select.input,textarea.input{width:100%;min-height:50px;padding:13px 15px;
  background:var(--surface-1);border:1.5px solid var(--hairline-strong);border-radius:var(--r-sm);
  color:var(--ink);font-size:16px;
  transition:border-color var(--m-fast),box-shadow var(--m-fast)}
textarea.input{min-height:112px;resize:vertical;line-height:1.55}
.input::placeholder{color:var(--ink-3)}
.input:hover{border-color:var(--ink-3)}
.input:focus{outline:none;border-color:var(--pink-600);box-shadow:0 0 0 4px rgba(232,24,155,.15)}
.input[aria-invalid="true"]{border-color:var(--bad);background:var(--bad-100)}
.field .err{display:none;font-size:13.5px;color:var(--bad);margin-top:7px;font-weight:600}
.field.invalid .err{display:block}

/* handle field — Instagram: @______ */
.handle{display:flex;align-items:stretch;border:1.5px solid var(--hairline-strong);
  border-radius:var(--r-sm);background:var(--surface-1);overflow:hidden;
  transition:border-color var(--m-fast),box-shadow var(--m-fast)}
.handle:focus-within{border-color:var(--pink-600);box-shadow:0 0 0 4px rgba(232,24,155,.15)}
.handle .plat{display:flex;align-items:center;gap:9px;padding:0 14px;background:var(--surface-2);
  border-right:1.5px solid var(--hairline);font-size:14px;font-weight:650;color:var(--ink-2);
  white-space:nowrap;min-width:132px}
.handle .at{display:grid;place-items:center;padding-left:13px;color:var(--ink-3);font-size:16px;font-weight:600}
.handle input{flex:1;min-height:50px;border:0;background:transparent;padding:13px 14px 13px 5px;font-size:16px}
.handle input:focus{outline:none}
.handle-grid{display:grid;gap:10px}

.choices{display:grid;gap:10px}
.choice{display:flex;gap:13px;align-items:flex-start;padding:15px;border:1.5px solid var(--hairline-strong);
  border-radius:var(--r-md);background:var(--surface-1);cursor:pointer;
  transition:border-color var(--m-fast),background var(--m-fast),box-shadow var(--m-fast)}
.choice:hover{border-color:var(--ink-3)}
.choice input{margin-top:3px;accent-color:var(--pink-600);width:19px;height:19px;flex:none}
.choice:has(input:checked){border-color:var(--pink-600);background:var(--pink-050);
  box-shadow:0 0 0 3px rgba(232,24,155,.10)}
.choice strong{display:block;font-size:15.5px}
.choice span{font-size:13.5px;color:var(--ink-2)}
.consent{display:flex;gap:13px;align-items:flex-start;padding:15px;border:1.5px solid var(--hairline-strong);
  border-radius:var(--r-md);background:var(--surface-1);margin-bottom:var(--s4)}
.consent input{margin-top:4px;accent-color:var(--pink-600);width:19px;height:19px;flex:none}
.consent label{font-size:14.5px;line-height:1.55;font-weight:500}
.consent:has(input:checked){border-color:var(--pink-600);background:var(--pink-050)}
.inline-2{display:grid;grid-template-columns:1fr 1fr;gap:var(--s4)}

/* ---------- 14. THEME TILES ---------- */
.tiles{display:grid;grid-template-columns:repeat(auto-fill,minmax(168px,1fr));gap:12px}
.tile{position:relative;border:1.5px solid var(--hairline-strong);border-radius:var(--r-md);
  background:var(--surface-1);padding:0;cursor:pointer;text-align:left;overflow:hidden;
  transition:border-color var(--m-fast),transform var(--m-fast),box-shadow var(--m-fast)}
.tile:hover{transform:translateY(-2px);box-shadow:var(--lift-2);border-color:var(--ink-3)}
.tile .swatchbar{height:62px;background:linear-gradient(135deg,#2A1636,#0E0716)}
.tile .tname{display:block;padding:11px 13px 13px;font-size:14.5px;font-weight:700;line-height:1.25}
.tile .tcheck{position:absolute;top:9px;right:9px;width:24px;height:24px;border-radius:50%;
  background:rgba(255,255,255,.9);border:1.5px solid var(--hairline-strong);
  display:grid;place-items:center;font-size:13px;color:transparent;transition:all var(--m-fast)}
.tile[aria-pressed="true"]{border-color:var(--pink-600);box-shadow:0 0 0 3px rgba(232,24,155,.16)}
.tile[aria-pressed="true"] .tcheck{background:var(--pink-600);border-color:var(--pink-600);color:#fff}
.tile[aria-pressed="true"] .tname{color:var(--pink-600)}
.tilecount{font-size:13.5px;color:var(--ink-3);margin-top:10px}

/* ---------- 15. UPLOADS ---------- */
.drop{border:2px dashed var(--hairline-strong);border-radius:var(--r-lg);background:var(--surface-2);
  padding:var(--s7) var(--s5);text-align:center;cursor:pointer;
  transition:border-color var(--m-fast),background var(--m-fast)}
.drop:hover,.drop.over{border-color:var(--pink-600);background:var(--pink-050)}
.drop .dicon{width:56px;height:78px;margin:0 auto var(--s4);border-radius:8px;
  border:2px dashed var(--hairline-strong);display:grid;place-items:center;color:var(--ink-3);font-size:22px}
.drop:hover .dicon,.drop.over .dicon{border-color:var(--pink-600);color:var(--pink-600)}
.drop h4{margin-bottom:5px}
.sources{display:flex;flex-wrap:wrap;gap:8px;justify-content:center;margin-top:var(--s4)}
.source{display:inline-flex;align-items:center;gap:7px;padding:7px 14px;border-radius:var(--r-pill);
  border:1px solid var(--hairline-strong);background:var(--surface-1);font-size:13.5px;font-weight:600;
  color:var(--ink-2);cursor:pointer;transition:all var(--m-fast)}
.source:hover{border-color:var(--pink-600);color:var(--pink-600)}

.photogrid{display:grid;grid-template-columns:repeat(auto-fill,minmax(150px,1fr));gap:14px;margin-top:var(--s5)}
.photo{position:relative;border-radius:var(--r-md);overflow:hidden;background:var(--surface-3);
  border:1.5px solid var(--hairline);aspect-ratio:var(--card-ratio);cursor:grab;
  transition:transform var(--m-fast),box-shadow var(--m-fast),border-color var(--m-fast)}
.photo:hover{box-shadow:var(--lift-2);border-color:var(--pink-600)}
.photo.dragging{opacity:.45;cursor:grabbing}
.photo.dragover{border-color:var(--pink-600);box-shadow:0 0 0 3px rgba(232,24,155,.25)}
.photo img{width:100%;height:100%;object-fit:cover}
.photo .rank{position:absolute;top:8px;left:8px;min-width:30px;height:30px;padding:0 8px;
  border-radius:var(--r-pill);background:var(--pink-600);color:#fff;font-family:var(--font-mono);
  font-size:13px;font-weight:700;display:grid;place-items:center;
  box-shadow:0 2px 10px rgba(0,0,0,.35)}
.photo .rank.best{background:linear-gradient(135deg,#FF4FA3,#C2107E);
  box-shadow:0 0 0 2px rgba(255,255,255,.85),0 3px 16px var(--glow-pink)}
.photo .kill{position:absolute;top:8px;right:8px;width:30px;height:30px;border-radius:50%;
  background:rgba(10,6,16,.72);color:#fff;border:0;cursor:pointer;font-size:15px;line-height:1;
  display:grid;place-items:center}
.photo .kill:hover{background:var(--bad)}
.photo .ptheme{position:absolute;left:0;right:0;bottom:0;padding:7px 9px;
  background:linear-gradient(0deg,rgba(8,4,14,.9),transparent);
  color:#fff;font-size:11px;font-weight:650;letter-spacing:.03em}
.photo .movers{position:absolute;bottom:8px;right:8px;display:flex;gap:4px;opacity:0;transition:opacity var(--m-fast)}
.photo:hover .movers,.photo:focus-within .movers{opacity:1}
.photo .movers button{width:28px;height:28px;border-radius:6px;border:0;cursor:pointer;
  background:rgba(255,255,255,.92);color:var(--ink);font-size:13px;line-height:1;display:grid;place-items:center}
.photo .movers button:hover{background:var(--pink-600);color:#fff}
.photo-empty{display:grid;place-items:center;border:2px dashed var(--hairline);border-radius:var(--r-md);
  aspect-ratio:var(--card-ratio);color:var(--ink-3);font-size:13px;text-align:center;padding:10px;
  background:var(--surface-2)}
.slotcount{display:flex;justify-content:space-between;align-items:center;gap:var(--s4);
  margin-top:var(--s4);font-size:14px;color:var(--ink-2)}

/* single image slot (rookie card) */
.oneshot{display:grid;grid-template-columns:150px 1fr;gap:var(--s5);align-items:start}
.oneshot .slot{aspect-ratio:var(--card-ratio);border-radius:var(--r-md);overflow:hidden;
  border:2px dashed var(--hairline-strong);background:var(--surface-2);display:grid;place-items:center;
  cursor:pointer;color:var(--ink-3);font-size:13px;text-align:center;padding:12px;position:relative}
.oneshot .slot:hover{border-color:var(--pink-600);color:var(--pink-600)}
.oneshot .slot img{width:100%;height:100%;object-fit:cover;position:absolute;inset:0}

/* ---------- 16. STEPS ---------- */
.steps{display:flex;gap:7px;margin-bottom:var(--s5)}
.steps .bar{flex:1;height:6px;border-radius:var(--r-pill);background:var(--surface-3);overflow:hidden}
.steps .bar.done{background:var(--pink-600)}
.steps .bar.now{background:linear-gradient(90deg,var(--pink-600) 50%,var(--surface-3) 50%);
  box-shadow:0 0 12px var(--glow-pink)}
.step-label{font-size:13px;color:var(--ink-3);margin-bottom:var(--s3);font-family:var(--font-mono);
  letter-spacing:.02em}
.fs{display:none}
.fs.active{display:block;animation:fadeUp var(--m-base) var(--ease-out)}
@keyframes fadeUp{from{opacity:0;transform:translateY(10px)}to{opacity:1;transform:none}}

.formstatus{display:none;padding:15px 17px;border-radius:var(--r-md);margin-bottom:var(--s4);font-size:14.5px;font-weight:600}
.formstatus.show{display:block}
.formstatus.ok{background:var(--ok-100);border:1.5px solid rgba(10,125,82,.35);color:var(--ok)}
.formstatus.bad{background:var(--bad-100);border:1.5px solid rgba(179,38,30,.35);color:var(--bad)}
.formstatus.info{background:var(--pink-050);border:1.5px solid var(--hairline-lit);color:var(--pink-600)}

/* ---------- 17. NOTICES ---------- */
.notice{border-left:4px solid var(--pink-600);background:var(--pink-050);
  padding:var(--s4) var(--s5);border-radius:0 var(--r-md) var(--r-md) 0;margin-block:var(--s5)}
.notice-warn{border-left-color:var(--warn);background:var(--warn-100)}
.notice-volt{border-left-color:var(--volt-700);background:var(--volt-100)}
.notice h4{margin-bottom:7px;font-size:15.5px}
.notice p:last-child{margin-bottom:0}
.disclaimer{font-size:14px;color:var(--ink-2);border:1px solid var(--hairline);
  background:var(--surface-2);border-radius:var(--r-md);padding:var(--s4)}
.draftbar{background:linear-gradient(90deg,var(--pink-100),var(--volt-100));
  border-bottom:1px solid var(--hairline);font-size:13px;padding:9px 0;color:var(--pink-900);
  text-align:center;font-weight:550}
.draftbar strong{color:var(--pink-700)}

/* ---------- 18. ACCORDION ---------- */
details.acc{border:1px solid var(--hairline);border-radius:var(--r-md);
  background:var(--surface-1);margin-bottom:11px;overflow:hidden;box-shadow:var(--lift-1)}
details.acc summary{cursor:pointer;padding:16px 19px;font-weight:700;font-size:15.5px;
  list-style:none;display:flex;justify-content:space-between;gap:var(--s4);align-items:center}
details.acc summary::-webkit-details-marker{display:none}
details.acc summary::after{content:"+";color:var(--pink-600);font-size:22px;font-weight:400;
  transition:transform var(--m-fast);flex:none;line-height:1}
details.acc[open] summary::after{transform:rotate(45deg)}
details.acc[open] summary{color:var(--pink-600)}
details.acc .acc-body{padding:0 19px 17px;color:var(--ink-2);font-size:15px}
details.acc .acc-body p:last-child{margin-bottom:0}

/* ---------- 19. PROCESS / TIMELINE ---------- */
.processrail{display:grid;grid-template-columns:repeat(6,1fr);gap:var(--s3)}
.pstep{background:var(--surface-1);border:1px solid var(--hairline);border-radius:var(--r-md);
  padding:var(--s4);box-shadow:var(--lift-1)}
.pstep .n{font-family:var(--font-mono);font-size:12px;color:var(--pink-600);
  letter-spacing:.1em;margin-bottom:9px;display:block;font-weight:700}
.pstep h4{font-size:15px;margin-bottom:5px}
.pstep p{font-size:13.5px;color:var(--ink-2);margin:0}
.timeline{position:relative;padding-left:var(--s6)}
.timeline::before{content:"";position:absolute;left:9px;top:8px;bottom:8px;width:2px;
  background:linear-gradient(180deg,var(--pink-600),rgba(232,24,155,.15))}
.tl-item{position:relative;margin-bottom:var(--s6)}
.tl-item::before{content:"";position:absolute;left:calc(-1 * var(--s6) + 3px);top:6px;
  width:14px;height:14px;border-radius:50%;background:var(--ground);border:3px solid var(--pink-600);
  box-shadow:0 0 0 3px var(--pink-050)}
.tl-item h4{margin-bottom:4px}
.tl-meta{font-family:var(--font-mono);font-size:12px;color:var(--ink-3);margin-bottom:6px}

/* ---------- 20. STUDIO ---------- */
.studio{display:grid;grid-template-columns:310px 1fr 310px;gap:var(--s5);align-items:start}
.studio-stage{padding:var(--s8) var(--s5);display:grid;place-items:center;min-height:480px}
.studio-card{width:min(268px,62vw)}
.ctrl{margin-bottom:var(--s5)}
.ctrl>label,.ctrl>.ctrl-label{display:block;font-size:11.5px;letter-spacing:.11em;text-transform:uppercase;
  color:var(--ink-3);font-weight:750;margin-bottom:10px}
.swatches{display:flex;flex-wrap:wrap;gap:9px}
.swatch{width:42px;height:42px;border-radius:10px;border:2.5px solid transparent;cursor:pointer;
  padding:0;box-shadow:var(--lift-1);transition:transform var(--m-fast),border-color var(--m-fast)}
.swatch:hover{transform:scale(1.08)}
.swatch[aria-pressed="true"]{border-color:var(--pink-600);box-shadow:0 0 0 3px rgba(232,24,155,.2)}
.optlist{display:grid;gap:7px}
.opt{display:flex;justify-content:space-between;align-items:center;gap:11px;width:100%;
  padding:11px 14px;background:var(--surface-1);border:1.5px solid var(--hairline-strong);
  border-radius:var(--r-sm);cursor:pointer;font-size:14.5px;text-align:left;font-weight:600;
  color:var(--ink);transition:all var(--m-fast)}
.opt:hover{border-color:var(--ink-3)}
.opt[aria-pressed="true"]{border-color:var(--pink-600);background:var(--pink-050);color:var(--pink-600);
  box-shadow:0 0 0 3px rgba(232,24,155,.12)}
.opt .tag{font-family:var(--font-mono);font-size:11px;color:var(--ink-3);font-weight:500}
.opt[aria-pressed="true"] .tag{color:var(--pink-600)}
input[type=range]{width:100%;accent-color:var(--pink-600);height:26px}
.readout{display:flex;justify-content:space-between;font-family:var(--font-mono);
  font-size:12.5px;color:var(--ink-3);margin-top:4px}
.readout strong{color:var(--pink-600);font-size:15px}

/* ---------- 21. FOOTER ---------- */
.footer{border-top:1px solid var(--hairline);background:var(--surface-2);
  padding-block:var(--s8) var(--s6);margin-top:var(--s9)}
.footer-grid{display:grid;grid-template-columns:1.6fr repeat(4,1fr);gap:var(--s6)}
.footer h5{font-size:11.5px;letter-spacing:.11em;text-transform:uppercase;color:var(--ink-3);
  margin:0 0 var(--s3);font-weight:750}
.footer ul{list-style:none;margin:0;padding:0}
.footer li{margin-bottom:9px}
.footer a{color:var(--ink-2);font-size:14.5px;text-decoration:none}
.footer a:hover{color:var(--pink-600);text-decoration:underline}
.footer-legal{margin-top:var(--s7);padding-top:var(--s5);border-top:1px solid var(--hairline);
  font-size:13px;color:var(--ink-3)}
.footer-legal p{margin-bottom:9px;max-width:82ch}
.footer-legal strong{color:var(--ink-2)}

/* ---------- 22. MOTION ---------- */
.reveal{opacity:0;transform:translateY(16px)}
.reveal.in{opacity:1;transform:none;
  transition:opacity var(--m-slow) var(--ease-out),transform var(--m-slow) var(--ease-out)}
@media (prefers-reduced-motion:reduce){
  *,*::before,*::after{animation-duration:.001ms !important;animation-iteration-count:1 !important;
    transition-duration:.001ms !important;scroll-behavior:auto !important}
  .reveal{opacity:1;transform:none}
  .card-obj{transform:none !important}
  .card-obj .sheen{opacity:.4 !important}
}

/* ---------- 23. RESPONSIVE ---------- */
@media (max-width:1180px){
  .studio{grid-template-columns:1fr 1fr;}
  .studio-stage{grid-column:1 / -1;order:-1;min-height:400px}
}
@media (max-width:1080px){
  .split{grid-template-columns:1fr;gap:var(--s6)}
  .split > aside{position:static !important;top:auto !important}
  .processrail{grid-template-columns:repeat(3,1fr)}
  .footer-grid{grid-template-columns:1fr 1fr 1fr}
}
@media (max-width:860px){
  .g4,.g3{grid-template-columns:repeat(2,1fr)}
  .nav{position:fixed;inset:var(--header-h) 0 auto 0;flex-direction:column;gap:0;
    background:var(--surface-1);border-bottom:1px solid var(--hairline);padding:var(--s3);
    display:none;max-height:calc(100vh - var(--header-h));overflow:auto;box-shadow:var(--lift-3)}
  .nav.open{display:flex}
  .nav a{padding:14px 16px;font-size:16.5px;border-radius:var(--r-sm)}
  .burger{display:block}
  .utility .btn-hide-sm{display:none}
  .section{padding-block:var(--s7)}
  .studio{grid-template-columns:1fr}
  .oneshot{grid-template-columns:120px 1fr}
}
@media (max-width:620px){
  body{font-size:16px}
  .g2,.g3,.g4{grid-template-columns:1fr}
  .inline-2{grid-template-columns:1fr}
  .processrail{grid-template-columns:1fr}
  .footer-grid{grid-template-columns:1fr}
  .statrail{gap:var(--s5)}
  .card-fan .card-slot{width:100px}
  .card-fan .card-slot:not(:first-child){margin-left:-28px}
  .wrap{padding-inline:var(--s4)}
  .panel{padding:var(--s4)}
  .tiles{grid-template-columns:repeat(2,1fr)}
  .photogrid{grid-template-columns:repeat(2,1fr)}
  .handle .plat{min-width:104px;font-size:13px;padding:0 10px}
  .oneshot{grid-template-columns:1fr}
  .oneshot .slot{max-width:170px}
}

/* ---------- 24. PRINT / FORCED COLORS ---------- */
@media print{
  .header,.footer,.draftbar,.btn{display:none}
  body{background:#fff;color:#000}
  .panel{border-color:#ccc;box-shadow:none}
  .stage{background:#fff !important;color:#000 !important}
}
@media (forced-colors:active){
  .card-obj,.panel,.chip,.tile,.photo{border:1px solid CanvasText}
  .btn-primary{border:1px solid CanvasText}
  .stage{background:Canvas !important;color:CanvasText !important}
}

/* ==========================================================================
   25. THE 3D CARD VIEWER — rotate, and light it four ways
   Front + back. Back content switches between THE MOMENT and HOW I FELT.
   Light modes reveal what a flat image cannot: raised ridges, foil
   behaviour, and UV-reactive ink.
   ========================================================================== */
.viewer{display:grid;gap:var(--s5);justify-items:center;align-content:center;grid-template-rows:1fr auto}
.card3d-wrap{perspective:2200px;perspective-origin:50% 38%;
  height:min(845px,93vh,62vw);width:auto;aspect-ratio:var(--card-ratio);
  position:relative;touch-action:none}
.card3d{position:absolute;inset:0;transform-style:preserve-3d;
  transform:rotateY(var(--spin,0deg)) rotateX(var(--tiltx,0deg));
  transition:transform var(--m-slow) var(--ease-out)}
.card3d.dragging{transition:none}
.card3d .face{position:absolute;inset:0;border-radius:var(--r-card);overflow:hidden;
  backface-visibility:hidden;-webkit-backface-visibility:hidden;
  border:1px solid rgba(255,255,255,.16);background:#150D1E;
  box-shadow:0 18px 48px rgba(6,3,12,.6)}
.card3d .face.back{transform:rotateY(180deg)}

/* ---- edge thickness so it reads as an object, not a decal ---- */
.card3d .edge{position:absolute;top:2%;bottom:2%;width:7px;background:
  linear-gradient(180deg,#4A3358,#1A0F26 40%,#3A2846);
  transform-style:preserve-3d;opacity:.95}
.card3d .edge.l{left:0;transform:translateX(-3.5px) rotateY(90deg)}
.card3d .edge.r{right:0;transform:translateX(3.5px) rotateY(90deg)}

/* ---- FRONT ---- */
.face .fr-art{position:absolute;inset:0;background:linear-gradient(160deg,#2A1636,#0E0716 62%);
  background-size:cover;background-position:center}
.face .fr-photo{position:absolute;inset:0;width:100%;height:100%;display:none;
  object-fit:var(--ph-fit,cover);
  object-position:var(--ph-x,50%) var(--ph-y,50%);
  transform:scale(var(--ph-scale,1));transform-origin:var(--ph-x,50%) var(--ph-y,50%)}
.card3d.has-photo .fr-photo{display:block}
.card3d.has-photo .fr-art{opacity:.3}
.face .holo-border{position:absolute;inset:0;border-radius:var(--r-card);pointer-events:none;
  padding:5px;background:linear-gradient(135deg,#7CF3E4,#B7A6FF 25%,#FF9BD2 50%,#FFE08A 75%,#7CF3E4);
  -webkit-mask:linear-gradient(#000 0 0) content-box,linear-gradient(#000 0 0);
  -webkit-mask-composite:xor;mask-composite:exclude;opacity:.9}
.face .fr-inner{position:absolute;inset:5px;border-radius:8px;overflow:hidden}
.face .fr-shine{position:absolute;inset:-40%;pointer-events:none;opacity:0;transition:opacity var(--m-base);
  background:linear-gradient(112deg,transparent 26%,rgba(140,196,255,.34) 42%,rgba(255,255,255,.34) 50%,rgba(255,79,163,.36) 58%,transparent 76%)}
.face .nameplate{position:absolute;left:8%;right:8%;bottom:11%;background:#fff;border-radius:3px;
  padding:5px 8px;text-align:center;box-shadow:0 3px 12px rgba(0,0,0,.5)}
.face .nameplate b{display:block;font-family:var(--font-display);font-size:14px;letter-spacing:.02em;
  color:#12070F;line-height:1.1;text-transform:uppercase}
.face .locbadge{position:absolute;left:9%;bottom:24%;background:rgba(255,255,255,.94);
  border-radius:3px;padding:3px 7px;font-size:9.5px;font-weight:750;color:#12070F;
  display:flex;align-items:center;gap:5px;box-shadow:0 2px 8px rgba(0,0,0,.45)}
.face .sigmark{position:absolute;left:11%;bottom:33%;font-family:"Segoe Script","Brush Script MT",cursive;
  font-size:17px;color:#fff;opacity:.92;transform:rotate(-7deg);text-shadow:0 1px 4px rgba(0,0,0,.6)}
.face .fr-brand{position:absolute;left:8%;bottom:5.5%;font-family:var(--font-mono);font-size:8px;
  letter-spacing:.14em;color:rgba(255,255,255,.75)}
.face .fr-serial{position:absolute;right:8%;bottom:5.5%;font-family:var(--font-mono);font-size:8px;
  letter-spacing:.08em;color:rgba(255,255,255,.75)}

/* ---- BACK ---- */
.face.back{background:
  linear-gradient(180deg,#1B1226,#0C0714 70%);
  padding:9%;display:flex;flex-direction:column;color:#F4EEF8}
.face.back .bk-frame{position:absolute;inset:5px;border-radius:8px;
  border:1px solid rgba(140,196,255,.28);pointer-events:none}
.bk-head{display:flex;align-items:center;gap:8px;padding-bottom:7px;
  border-bottom:1px solid rgba(255,255,255,.18);margin-bottom:9px}
.bk-logo{width:22px;height:22px;border-radius:5px;flex:none;display:grid;place-items:center;
  font-size:7.5px;font-weight:800;color:#fff;background:linear-gradient(145deg,#FF4FA3,#3E9BFF)}
.bk-id{flex:1;min-width:0}
.bk-name{display:block;font-family:var(--font-display);font-size:11px;line-height:1.15;
  text-transform:uppercase;letter-spacing:.02em;color:#fff;
  white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.bk-loc{display:block;font-size:8px;color:rgba(244,238,248,.72);margin-top:1px}
.bk-serial{font-family:var(--font-mono);font-size:8px;padding:2px 6px;border-radius:3px;
  border:1px solid rgba(255,255,255,.35);color:#fff;flex:none}
.bk-title{font-family:var(--font-display);font-size:10.5px;letter-spacing:.16em;text-align:center;
  text-transform:uppercase;color:#fff;margin:0 0 7px}
.bk-body{font-size:8.6px;line-height:1.55;text-align:center;color:rgba(244,238,248,.94);
  margin:0;flex:1;overflow:hidden}
.bk-foot{text-align:center;padding-top:7px;border-top:1px solid rgba(255,255,255,.14)}
.bk-foot span{display:block;font-size:8.5px;font-weight:800;color:#8CC4FF;letter-spacing:.04em}
.bk-foot small{font-size:6.2px;letter-spacing:.15em;color:rgba(140,196,255,.85)}

/* ---- RAISED RIDGES (emboss) — only readable under raking light ---- */
.emboss{position:absolute;inset:0;pointer-events:none;opacity:0;transition:opacity var(--m-base);
  background:
    repeating-linear-gradient(58deg,
      rgba(255,255,255,.16) 0 1.5px, rgba(0,0,0,.22) 1.5px 3px, transparent 3px 13px);
  mix-blend-mode:overlay}
.emboss-plate{position:absolute;left:8%;right:8%;bottom:11%;height:34px;border-radius:3px;
  pointer-events:none;opacity:0;transition:opacity var(--m-base);
  box-shadow:inset 0 1.5px 0 rgba(255,255,255,.85), inset 0 -1.5px 0 rgba(0,0,0,.55),
             0 2px 3px rgba(0,0,0,.4)}

/* ---- UV / BLACK LIGHT layer — the secret message ---- */
.uv{position:absolute;inset:0;pointer-events:none;opacity:0;transition:opacity var(--m-base);
  display:grid;place-items:center;text-align:center;padding:14%}
.uv .uvtext{font-family:var(--font-mono);font-size:9px;letter-spacing:.18em;line-height:1.7;
  text-transform:uppercase;color:#B6FF6A;
  text-shadow:0 0 8px rgba(182,255,106,.9),0 0 22px rgba(120,255,60,.55)}
.uv .uvglyph{position:absolute;inset:6%;border-radius:8px;border:1px dashed rgba(182,255,106,.55);
  box-shadow:inset 0 0 26px rgba(182,255,106,.22)}

/* ================= LIGHT MODES ================= */
.lightbox{position:relative;border-radius:var(--r-lg);padding:var(--s8) var(--s5);
  display:grid;place-items:center;min-height:min(110vh,1060px);overflow:hidden;transition:background var(--m-slow)}

/* studio — neutral, even */
.light-studio{background:
  radial-gradient(80% 60% at 50% 0%,rgba(255,255,255,.10),transparent 60%),
  linear-gradient(180deg,#171021,#0A0610 75%)}
.light-studio .fr-shine{opacity:.55}

/* raking — low hard side light, ridges pop */
.light-rake{background:
  linear-gradient(100deg,rgba(255,236,200,.20) 0%,transparent 42%),
  linear-gradient(180deg,#100B18,#060409 80%)}
.light-rake .card3d .face{box-shadow:26px 10px 60px rgba(0,0,0,.8), -4px 0 0 rgba(255,240,214,.13)}
.light-rake .emboss{opacity:.95}
.light-rake .emboss-plate{opacity:1}
.light-rake .fr-shine{opacity:.18}
.light-rake .holo-border{opacity:.45;filter:saturate(.5)}

/* spotlight — max holo/foil */
.light-spot{background:
  radial-gradient(46% 40% at 50% 26%,rgba(255,255,255,.42),rgba(255,255,255,.05) 55%,transparent 72%),
  linear-gradient(180deg,#1D1329,#08050D 78%)}
.light-spot .fr-shine{opacity:1}
.light-spot .holo-border{opacity:1;filter:saturate(1.5) brightness(1.25)}
.light-spot .card3d .face{box-shadow:0 24px 70px rgba(0,0,0,.75),0 0 60px rgba(255,255,255,.10)}

/* black light — UV reveal */
.light-uv{background:
  radial-gradient(60% 50% at 50% 18%,rgba(120,60,255,.34),transparent 62%),
  linear-gradient(180deg,#0B0524,#04020A 78%)}
.light-uv .card3d{filter:brightness(.52) saturate(.55) hue-rotate(-12deg)}
.light-uv .uv{opacity:1}
.light-uv .holo-border{opacity:.35;filter:saturate(.3)}
.light-uv .fr-shine{opacity:.1}
.light-uv .card3d .face{box-shadow:0 20px 60px rgba(40,0,90,.8),0 0 44px rgba(150,80,255,.35)}

/* ---- viewer controls ---- */
.vctrl{display:flex;flex-wrap:wrap;gap:8px;justify-content:center}
.vbtn{display:inline-flex;align-items:center;gap:7px;padding:9px 15px;border-radius:var(--r-pill);
  border:1.5px solid var(--hairline-strong);background:var(--surface-1);color:var(--ink);
  font-size:13.5px;font-weight:650;cursor:pointer;transition:all var(--m-fast)}
.vbtn:hover{border-color:var(--pink-600);color:var(--pink-600)}
.vbtn[aria-pressed="true"]{background:var(--pink-600);border-color:var(--pink-600);color:#fff;
  box-shadow:0 2px 14px var(--glow-pink)}
.vbtn .dot{width:9px;height:9px;border-radius:50%;flex:none}
.spinrow{display:flex;align-items:center;gap:var(--s4);width:min(420px,88vw)}
.spinrow input[type=range]{flex:1}
.spinrow .deg{font-family:var(--font-mono);font-size:12.5px;color:var(--ink-3);min-width:52px;text-align:right}
.hint{font-size:13px;color:var(--ink-3);text-align:center;max-width:46ch}

/* ---- AI assist ---- */
.ai{border:1.5px solid var(--hairline-lit);border-radius:var(--r-md);
  background:linear-gradient(180deg,var(--pink-050),var(--surface-1) 60%);padding:var(--s4);margin-top:11px}
.ai-head{display:flex;align-items:center;gap:9px;margin-bottom:11px;flex-wrap:wrap}
.ai-badge{display:inline-flex;align-items:center;gap:6px;font-size:11px;font-weight:750;
  letter-spacing:.07em;text-transform:uppercase;color:var(--pink-600);
  background:var(--pink-100);border:1px solid var(--hairline-lit);padding:4px 9px;border-radius:var(--r-pill)}
.ai-seeds{display:grid;grid-template-columns:1fr 1fr;gap:9px;margin-bottom:11px}
.ai-out{display:grid;gap:9px;margin-top:11px}
.ai-opt{text-align:left;width:100%;padding:12px 14px;border-radius:var(--r-sm);cursor:pointer;
  border:1.5px solid var(--hairline-strong);background:var(--surface-1);font-size:14px;line-height:1.55;
  color:var(--ink);transition:all var(--m-fast)}
.ai-opt:hover{border-color:var(--pink-600);background:var(--pink-050)}
.ai-opt .tone{display:block;font-size:10.5px;font-weight:750;letter-spacing:.09em;text-transform:uppercase;
  color:var(--pink-600);margin-bottom:5px}
.charcount{font-family:var(--font-mono);font-size:12px;color:var(--ink-3);text-align:right;margin-top:5px}
.charcount.over{color:var(--bad);font-weight:700}

@media (max-width:620px){
  .ai-seeds{grid-template-columns:1fr}
  .card3d-wrap{height:min(560px,66vh,120vw)}
  .lightbox{min-height:400px;padding:var(--s6) var(--s4)}
}

/* ==========================================================================
   26. ZOOM STAGE — scroll to magnify, drag to pan
   ========================================================================== */
.zoomstage{position:relative;width:100%;min-height:min(95vh,890px);
  display:grid;place-items:center;overflow:hidden;border-radius:var(--r-lg);
  cursor:grab;touch-action:none;overscroll-behavior:contain}
.zoomstage.zoomed{cursor:move}
.zoomstage.grabbing{cursor:grabbing}
.zoomstage:focus-visible{outline:3px solid var(--pink-500);outline-offset:-3px}
.zoomlayer{transform-origin:50% 50%;will-change:transform;backface-visibility:visible;
  display:grid;place-items:center;width:100%;height:100%}
.zoomrow{display:flex;align-items:center;gap:9px;flex-wrap:wrap;justify-content:center}
.zoomrow .zval{font-family:var(--font-mono);font-size:13px;font-weight:700;color:var(--pink-600);
  min-width:56px;text-align:center;padding:6px 10px;border-radius:var(--r-pill);
  background:var(--pink-100);border:1px solid var(--hairline-lit)}
.stage .zoomrow .zval,.lightbox .zoomrow .zval{background:rgba(255,79,163,.15);color:#FF9FD2;
  border-color:rgba(255,127,196,.4)}
.zoomtip{font-size:12.5px;color:var(--ink-3);text-align:center;max-width:52ch;margin:0}
.zoomwarn{font-size:12.5px;text-align:center;max-width:56ch;margin:0;color:var(--warn);font-weight:600}
.lightbox .vbtn{background:rgba(255,255,255,.07);border-color:rgba(255,255,255,.22);color:#F4EEF8}
.lightbox .vbtn:hover{border-color:#FF7FC4;color:#FF9FD2;background:rgba(255,79,163,.14)}
.lightbox .vbtn[aria-pressed="true"]{background:#C2107E;border-color:#FF7FC4;color:#fff;
  box-shadow:0 0 22px rgba(255,79,163,.5)}
.lightbox .vbtn[disabled]{opacity:.35;cursor:not-allowed}
.lightbox .hint,.lightbox .zoomtip{color:rgba(244,238,248,.62)}
.lightbox .spinrow .deg{color:rgba(244,238,248,.7)}
.lightbox input[type=range]{accent-color:#FF4FA3}

/* ==========================================================================
   27. TOPIC-TREE WRITING ASSIST — bubbles, three tiers deep
   ========================================================================== */
.bubrow{display:flex;flex-wrap:wrap;gap:8px;margin-bottom:12px}
.bubrow[hidden]{display:none}
.bublabel{font-size:11.5px;font-weight:750;letter-spacing:.09em;text-transform:uppercase;
  color:var(--pink-600);margin:0 0 8px}
.bublabel[hidden]{display:none}
.bub{border-radius:var(--r-pill);cursor:pointer;font-family:inherit;
  border:1.5px solid var(--hairline-strong);background:var(--surface-1);color:var(--ink);
  transition:all var(--m-fast);text-align:left}
.bub:hover{border-color:var(--pink-600);color:var(--pink-600);transform:translateY(-1px)}
.bub[aria-pressed="true"]{background:var(--pink-600);border-color:var(--pink-600);color:#fff;
  box-shadow:0 2px 12px var(--glow-pink)}
.bub-t{padding:9px 16px;font-size:14px;font-weight:700}
.bub-s{padding:7px 14px;font-size:13.5px;font-weight:650;
  border-style:dashed;background:var(--surface-2)}
.bub-s[aria-pressed="true"]{border-style:solid}
.bub-o{padding:11px 15px;font-size:14px;font-weight:500;line-height:1.5;width:100%;
  background:var(--pink-050);border-color:var(--hairline-lit);border-radius:var(--r-md)}
.bub-o::before{content:"\201C";color:var(--pink-600);font-weight:700;margin-right:3px}
.bub-o::after{content:"\2026";color:var(--ink-3)}
.bub-o:hover{background:var(--surface-1);border-color:var(--pink-600)}
.assist-clear{margin-left:auto}

/* edition quick-picks */
.edrow{display:flex;flex-wrap:wrap;gap:7px;margin-top:11px}
.edbtn{padding:7px 13px;border-radius:var(--r-pill);border:1.5px solid var(--hairline-strong);
  background:var(--surface-1);color:var(--ink-2);font-size:13px;font-weight:650;cursor:pointer;
  font-family:var(--font-mono);transition:all var(--m-fast)}
.edbtn:hover{border-color:var(--pink-600);color:var(--pink-600)}
.edbtn[aria-pressed="true"]{background:var(--pink-600);border-color:var(--pink-600);color:#fff}

/* dual-axis rotation controls */
.axisrow{display:grid;grid-template-columns:auto 1fr auto;gap:12px;align-items:center;
  width:min(430px,90vw)}
.axisrow .axlabel{font-size:11.5px;font-weight:750;letter-spacing:.08em;text-transform:uppercase;
  color:var(--ink-3);min-width:34px}
.lightbox .axisrow .axlabel{color:rgba(244,238,248,.6)}
.axisrow .deg{font-family:var(--font-mono);font-size:12.5px;color:var(--ink-3);min-width:46px;text-align:right}

/* finish treatments on the 3D card so the selector visibly does something */
.card3d.f-base .fr-shine{opacity:.10}
.card3d.f-base .holo-border{opacity:.22;filter:saturate(.25)}
.card3d.f-gloss .holo-border{opacity:.4;filter:saturate(.6)}
.card3d.f-foil .holo-border{opacity:.85}
.card3d.f-prismatic .holo-border{opacity:1;filter:saturate(1.5) contrast(1.15)}
.card3d.f-signed .face.front::after{content:"";position:absolute;left:12%;right:20%;bottom:29%;height:44px;
  pointer-events:none;transform:rotate(-6deg);opacity:.85;filter:blur(.3px);
  background:
    radial-gradient(closest-side,rgba(255,255,255,.9),transparent 70%) 4% 60%/20% 40% no-repeat,
    radial-gradient(closest-side,rgba(255,255,255,.75),transparent 70%) 30% 26%/24% 52% no-repeat,
    radial-gradient(closest-side,rgba(255,255,255,.85),transparent 70%) 60% 66%/28% 42% no-repeat,
    radial-gradient(closest-side,rgba(255,255,255,.6),transparent 70%) 84% 40%/16% 34% no-repeat}
.card3d.f-serial .fr-serial{color:#fff;font-weight:700;
  text-shadow:0 1px 0 rgba(0,0,0,.9),0 -1px 0 rgba(255,255,255,.3)}
.card3d.f-oneofone .face{border-color:rgba(255,79,163,.7);
  box-shadow:0 0 0 1px rgba(255,79,163,.3),0 16px 52px rgba(255,79,163,.35)}
.card3d.f-oneofone .holo-border{
  background:linear-gradient(135deg,#FF4FA3,#FFD86B 40%,#FF4FA3 70%,#8A4BFF)}

/* state / country flag artwork inside the card badge */
.locbadge .flagart{width:15px;height:10px;object-fit:cover;border-radius:1.5px;
  box-shadow:0 0 0 .5px rgba(0,0,0,.35);flex:none}
.locbadge{max-width:62%}
.locbadge span:last-child{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}

/* ==========================================================================
   29 · THE STUDIO EXPERIENCE — velvet platform, spotlight, side deck
   The card no longer floats in a void. It hovers over a black-velvet plinth
   with a hard light coming straight down. Series colour drives the bubbles
   and panel tints; content rating drives the card border.
   ========================================================================== */

.lightbox{
  --s1:#C2107E; --s2:#1B0B3A;          /* set per series from JS */
  --bubop:.62;                          /* bubble/panel background opacity */
  --stage-bright:1.10;                  /* +10% over the source photo, isolated to the art layer */
  position:relative;isolation:isolate;
  background:linear-gradient(178deg,#0B0710 0%,#100A18 52%,#070409 100%);
}
/* the platform photo lives on its own layer so brightness() never touches
   the card, the text, or the controls sitting above it */
.lightbox::after{
  content:"";position:absolute;inset:0;border-radius:inherit;z-index:0;pointer-events:none;
  background:
    radial-gradient(120% 80% at 50% -10%, rgba(255,255,255,.09), transparent 60%),
    radial-gradient(90% 70% at 50% 115%, color-mix(in srgb, var(--s1) 22%, transparent), transparent 70%),
    url("../img/stage-bg.jpg") center 62% / cover no-repeat;
  filter:brightness(var(--stage-bright)) saturate(1.04);
}

.studiogrid{display:grid;grid-template-columns:230px minmax(0,1fr) 230px;gap:var(--s5);align-items:stretch}
@media (max-width:1180px){.studiogrid{grid-template-columns:200px minmax(0,1fr) 200px;gap:var(--s4)}}
@media (max-width:900px){.studiogrid{grid-template-columns:1fr}}
.sidedeck-left{order:-1}
@media (max-width:900px){.sidedeck-left{order:0}}

/* ---------- the stage: your background art ---------- */
.viewer{position:relative}
/* vignette sits above the art layer, below the card and decks */
.lightbox::before{
  content:"";position:absolute;inset:0;border-radius:inherit;z-index:0;pointer-events:none;
  background:
    linear-gradient(180deg, rgba(6,4,10,.30), rgba(6,4,10,.10) 40%, rgba(6,4,10,.55)),
    radial-gradient(120% 90% at 50% 40%, transparent 38%, rgba(4,3,7,.62) 100%);
}
.lightbox > *{position:relative;z-index:1}

/* the beam is part of the artwork now; this only reacts to light mode */
.spotlight{position:absolute;inset:0;pointer-events:none;z-index:0;overflow:hidden;border-radius:inherit;
  transition:opacity var(--m-base) var(--ease-out)}
.spotlight .beam{
  position:absolute;left:50%;top:-10%;transform:translateX(-50%);
  width:min(420px,86%);height:74%;
  background:linear-gradient(180deg, rgba(255,228,160,.26), rgba(255,220,150,.07) 48%, transparent 92%);
  clip-path:polygon(43% 0, 57% 0, 100% 100%, 0 100%);
  filter:blur(11px);opacity:.55;
}
.spotlight .pool{display:none}
.light-studio .spotlight{opacity:.5}
.light-spot{--stage-bright:1.18}
.light-rake{--stage-bright:1.02}
.light-spot   .spotlight .beam{opacity:1;filter:blur(6px)}
.light-rake   .spotlight .beam{left:18%;clip-path:polygon(30% 0, 46% 0, 100% 100%, 6% 100%);opacity:.8}
.light-uv     .spotlight .beam{opacity:.9;
  background:linear-gradient(180deg, rgba(150,80,255,.34), rgba(120,60,240,.09) 50%, transparent 92%)}
.light-uv{--stage-bright:.7}
.light-uv.lightbox::before{background:
    linear-gradient(180deg, rgba(40,6,80,.34), rgba(20,3,50,.20) 40%, rgba(20,3,50,.55)),
    radial-gradient(120% 90% at 50% 40%, transparent 32%, rgba(30,4,60,.62) 100%)}

.zoomstage{position:relative;z-index:1;min-height:min(890px,95vh)}
@media (max-width:900px){.zoomstage{min-height:min(600px,72vh)}}

/* ---------- the plinth, in 3D ----------
   Two stacked discs rotated in X so they read as a real cylinder from a
   slightly-above camera, matching the perspective of the background art. */
.card3d-wrap{position:relative}
.platform{
  position:absolute;left:50%;bottom:-58px;transform:translateX(-50%);
  width:150%;height:130px;pointer-events:none;
  transform-style:preserve-3d;perspective:600px;
}
/* ==========================================================================
   30 · SIDE DECK — controls on the same plane as the card
   ========================================================================== */
.sidedeck{
  border-radius:var(--r-lg);padding:var(--s5);position:relative;z-index:2;
  --deckbg:.62;                       /* fixed panel opacity, 20% below the previous .78 baseline */
  background:color-mix(in srgb, var(--s2) calc(var(--deckbg) * 56%), rgba(12,8,18,.44));
  border:1px solid color-mix(in srgb, var(--s1) 42%, rgba(255,255,255,.14));
  box-shadow:0 18px 50px rgba(0,0,0,.55), inset 0 1px 0 rgba(255,255,255,.08);
  color:#F4EEF8;
}
.sd-tabs{display:flex;gap:6px;align-items:center;flex-wrap:wrap;margin-bottom:var(--s4)}
.sd-tab{
  font:inherit;font-size:12px;font-weight:800;letter-spacing:.02em;cursor:pointer;
  padding:7px 15px;border-radius:999px;color:#F4EEF8;
  background:color-mix(in srgb, var(--s1) calc(var(--bubop) * 26%), rgba(255,255,255,.06));
  border:1px solid rgba(255,255,255,.20);transition:all var(--m-fast) var(--ease-out);
}
.sd-tab:hover{border-color:color-mix(in srgb, var(--s1) 80%, white)}
.sd-tab[aria-pressed="true"]{
  background:linear-gradient(135deg, var(--s1), color-mix(in srgb, var(--s1) 55%, var(--s2)));
  border-color:color-mix(in srgb, var(--s1) 70%, white);
  box-shadow:0 0 16px color-mix(in srgb, var(--s1) 55%, transparent);
}
.sd-live{font-size:10.5px;color:rgba(244,238,248,.5);margin-left:auto}

.sd-pane{display:none}
.sidedeck[data-face-mode="front"] .sd-pane[data-pane="front"],
.sidedeck[data-face-mode="back"]  .sd-pane[data-pane="back"]{display:block;animation:sdIn var(--m-base) var(--ease-out)}
@keyframes sdIn{from{opacity:0;transform:translateY(6px)}to{opacity:1;transform:none}}
@media (prefers-reduced-motion:reduce){.sd-pane{animation:none !important}}

.sd-block{margin-bottom:var(--s5)}
.sd-block:last-child{margin-bottom:0}
.sd-label{display:block;font-size:11px;font-weight:800;text-transform:uppercase;
  letter-spacing:.09em;color:rgba(244,238,248,.72);margin-bottom:9px}
.sd-label b{color:#fff;text-transform:none;letter-spacing:0;font-size:12.5px}
.sd-val{float:right;text-transform:none;letter-spacing:0;color:#fff;font-size:12px}

/* deck bubbles — tinted by the active series */
.bubrow-deck{display:flex;flex-wrap:wrap;gap:6px}
.bubrow-deck .bub{
  font-size:11.5px;padding:6px 12px;border-radius:999px;cursor:pointer;font-weight:700;
  color:#F4EEF8;border:1px solid rgba(255,255,255,.20);
  background:color-mix(in srgb, var(--s1) calc(var(--bubop) * 24%), rgba(255,255,255,.05));
  transition:all var(--m-fast) var(--ease-out);
}
.bubrow-deck .bub:hover{border-color:color-mix(in srgb, var(--s1) 85%, white);transform:translateY(-1px)}
.bubrow-deck .bub[aria-pressed="true"]{
  background:linear-gradient(135deg, var(--s1), color-mix(in srgb, var(--s1) 50%, var(--s2)));
  border-color:color-mix(in srgb, var(--s1) 75%, white);color:#fff;
  box-shadow:0 0 14px color-mix(in srgb, var(--s1) 50%, transparent);
}
.bubrow-deck .bub .sw{display:inline-block;width:9px;height:9px;border-radius:2px;margin-right:6px;
  vertical-align:-1px;box-shadow:0 0 0 1px rgba(255,255,255,.3)}
/* rating bubbles keep their own semantics regardless of series colour */

.sidedeck input[type=range]{width:100%;accent-color:var(--s1)}
.sd-caption{
  width:100%;min-height:160px;resize:vertical;font-size:13px;line-height:1.55;
  background:rgba(8,5,12,.55);color:#F4EEF8;
  border:1px solid color-mix(in srgb, var(--s1) 40%, rgba(255,255,255,.18));
}
.sd-caption:focus{outline:none;border-color:color-mix(in srgb, var(--s1) 90%, white);
  box-shadow:0 0 0 3px color-mix(in srgb, var(--s1) 28%, transparent)}
.sd-caption::placeholder{color:rgba(244,238,248,.35)}
.sidedeck .charcount{color:rgba(244,238,248,.6);text-align:right;font-size:11px;margin-top:5px}
.sidedeck .charcount.over{color:#FF7A7A}
.sidedeck .tiny.dim{color:rgba(244,238,248,.5)}

.colorrow{display:flex;gap:10px;margin-top:9px;flex-wrap:wrap}
.swatchpick{display:flex;align-items:center;gap:7px;font-size:11px;color:rgba(244,238,248,.75);cursor:pointer}
.swatchpick input[type=color]{
  width:34px;height:26px;padding:0;border-radius:7px;cursor:pointer;
  border:1px solid rgba(255,255,255,.28);background:transparent}
.bwrow{display:flex;gap:6px;margin-top:9px}

/* ==========================================================================
   31 · BACK TEXT — fills the card, styled by the creator's choices
   ========================================================================== */
.face.back{
  --ink1:#FF4FA3; --ink2:#7A2FF2; --bkfont:'Helvetica Neue',Helvetica,Arial,sans-serif;
}
.bk-body{
  font-family:var(--bkfont);
  /* size is set inline by the auto-fit routine; this is the floor */
  font-size:8.6px;
  /* justified on both edges, always — this is a printed card, not a webpage.
     last-line centred so a short tail does not leave a lopsided block. */
  text-align:justify;
  text-align-last:center;
  text-justify:inter-word;
  hyphens:auto;-webkit-hyphens:auto;
  word-break:normal;overflow-wrap:anywhere;
}
.card3d[data-ink="gradient"] .bk-body{
  background:linear-gradient(105deg, var(--ink1), var(--ink2));
  -webkit-background-clip:text;background-clip:text;
  color:transparent;-webkit-text-fill-color:transparent;
}
.card3d[data-ink="single"] .bk-body{color:var(--ink1);-webkit-text-fill-color:var(--ink1)}
.card3d[data-ink="bw"][data-bw="white"] .bk-body{color:#FFFFFF;-webkit-text-fill-color:#FFFFFF}
.card3d[data-ink="bw"][data-bw="black"] .bk-body{color:#0A0710;-webkit-text-fill-color:#0A0710;
  text-shadow:0 0 6px rgba(255,255,255,.35)}
.card3d[data-ink="bw"][data-bw="black"] .face.back{background:linear-gradient(168deg,#E9E2F0,#CFC6DA)}
.card3d[data-ink="bw"][data-bw="black"] .bk-head,
.card3d[data-ink="bw"][data-bw="black"] .bk-foot,
.card3d[data-ink="bw"][data-bw="black"] .bk-title{color:#1A1222}

/* the back text box the auto-fit measures against */
.bk-fit{position:absolute;
  left:var(--safe-x,7.5%);right:var(--safe-x,7.5%);
  top:var(--safe-t,21%);bottom:var(--safe-b,14.5%);
  display:flex;align-items:center;justify-content:center;overflow:hidden}
.bk-fit .bk-body{margin:0;width:100%;max-height:100%}

/* flag mark inside the location badge */
.flagwrap{display:inline-flex;align-items:center;gap:3px}
.flagemoji{font-size:1.05em;line-height:1}
.flagabbr{font-family:var(--font-mono);font-size:.72em;font-weight:800;letter-spacing:.04em;
  padding:1px 3px;border-radius:3px;background:rgba(255,255,255,.16);line-height:1}
.flagart{width:1.6em;height:1.07em;object-fit:cover;border-radius:2px;display:block;flex:none;
  box-shadow:0 0 0 .5px rgba(0,0,0,.35)}
.flagabbr{font-family:var(--font-mono);font-size:.74em;font-weight:800;letter-spacing:.04em;
  padding:1px 4px;border-radius:3px;background:rgba(255,255,255,.20);line-height:1.3}
.fr-origin .flagart{width:1.5em;height:1em}


/* ==========================================================================
   32 · LEFT DECK — compact front-of-card controls, same visual language
   ========================================================================== */
.sidedeck .sd-input{
  font-size:12.5px;padding:8px 10px;
  background:rgba(8,5,12,.55);color:#F4EEF8;
  border:1px solid color-mix(in srgb, var(--s1) 40%, rgba(255,255,255,.18));
}
.sidedeck .sd-input:focus{outline:none;border-color:color-mix(in srgb, var(--s1) 90%, white)}
.sidedeck select.sd-input option{color:#111;background:#fff}
.sidedeck .btn-row{gap:8px}
@media (max-width:900px){.sidedeck,.sidedeck-left{order:0}}

/* ==========================================================================
   33 · SERIES FRAME ART — Season 1's own border, from the physical mockup.
   Sits above everything else on its face; hidden unless that series is
   selected, so every other series keeps its plain generated border.
   ========================================================================== */
.series-frame{position:absolute;inset:0;background-size:100% 100%;background-repeat:no-repeat;
  background-position:center;pointer-events:none;opacity:0;transition:opacity var(--m-base) var(--ease-out);z-index:5}
.card3d[data-series="season1"] .series-frame-front{opacity:1;background-image:url("../img/season1-frame-front.webp")}
.card3d[data-series="season1"] .series-frame-back{opacity:1;background-image:url("../img/season1-frame-back.webp")}
/* the mockup's own border replaces the generated holo edge so they don't fight */
.card3d[data-series="season1"] .holo-border,
.card3d[data-series="season1"] .bk-frame{opacity:0}


/* ==========================================================================
   34 · CONTROL DECK — zoom, rotate and lighting as one bottom-centre node,
   in the same material as the left and right decks.
   ========================================================================== */
.ctrldeck{
  width:100%;max-width:760px;justify-self:center;
  border-radius:var(--r-lg);padding:var(--s4) var(--s5);
  display:grid;gap:var(--s3);justify-items:center;
  --deckbg:.56;
  background:color-mix(in srgb, var(--s2) calc(var(--deckbg) * 56%), rgba(12,8,18,.40));
  border:1px solid color-mix(in srgb, var(--s1) 38%, rgba(255,255,255,.12));
  box-shadow:0 18px 50px rgba(0,0,0,.5), inset 0 1px 0 rgba(255,255,255,.07);
  color:#F4EEF8;position:relative;z-index:2;
}
.ctrldeck .zoomtip{max-width:56ch;text-align:center;margin:0}
.ctrldeck .axisrow{width:100%;max-width:520px}
.ctrldeck .hint{text-align:center;margin:0}
.ctrldeck .zoomwarn{text-align:center;margin:0}

/* the studio stage runs wider than the page column so the card has room */
.studio-stage{max-width:1680px}
@media (max-width:1740px){.studio-stage{max-width:100%}}

/* Bare series — every border layer off, front and back */
.card3d[data-series="bare"] .holo-border,
.card3d[data-series="bare"] .bk-frame,
.card3d[data-series="bare"] .series-frame{opacity:0}
.card3d[data-series="bare"] .face{border-color:rgba(255,255,255,.10)}

/* ==========================================================================
   35 · BORDER SAFE AREA
   Series frame art eats into the card. Each series declares how far, and
   every element that carries text is pushed inside that line — otherwise
   the caption runs under the neon and the title, which is what happened
   the moment the Season 1 frame went on.
   ========================================================================== */
.card3d[data-series="season1"]{
  --safe-x:15%;      /* the double neon rail down each side */
  --safe-t:34%;      /* OFC mark, key badge, SEASON 1 / PREMIERE EDITION */
  --safe-b:23%;      /* palm-sunset logo and OFFICIAL FAN COLLECTIBLES */
}
/* The back's head/title/foot are flow children of a flex column, so they
   move with padding — not with top/left offsets. Padding it is. */
.card3d[data-series="season1"] .face.back{padding:19% 15% 22%}
.card3d[data-series="season1"] .bk-foot{display:none}   /* the frame already prints it */
.card3d[data-series="season1"] .bk-head{border-bottom-color:rgba(255,255,255,.10)}

/* The front's plate and badges are absolutely positioned, so these do apply. */
.card3d[data-series="season1"] .nameplate{left:17%;right:17%;bottom:12.5%}
.card3d[data-series="season1"] .locbadge{left:16%;bottom:27%}
.card3d[data-series="season1"] .fr-serial{right:15%;bottom:9.5%}
.card3d[data-series="season1"] .fr-brand{opacity:0}      /* the frame has its own OFC */

/* the photo itself should sit inside the window the frame leaves open */
.card3d[data-series="season1"] .fr-photo,
.card3d[data-series="season1"] .fr-art{
  inset:11% 11% 13%;width:auto;height:auto;border-radius:6px;
}

/* ==========================================================================
   36 · SIDE DECKS — no background at all, controls float on the stage
   ========================================================================== */
.sidedeck{
  background:none !important;
  border:none !important;
  box-shadow:none !important;
  padding:var(--s3) var(--s2);
}
/* nothing behind the text now, so the text has to carry its own legibility */
.sidedeck .sd-label,
.sidedeck .tiny,
.sidedeck .sd-live,
.sidedeck .charcount{text-shadow:0 1px 3px rgba(0,0,0,.85), 0 0 12px rgba(0,0,0,.6)}
.sidedeck .sd-label{color:rgba(255,255,255,.9)}
.sidedeck .tiny.dim{color:rgba(244,238,248,.72)}

/* ==========================================================================
   37 · LIVE TEXT ABOVE SERIES FRAME ART
   The Season 1 artwork has "#1/100", an empty name plate and an OFC mark
   printed into the PNG. Those are fixed pixels — they cannot follow the
   edition size or the creator's name. So the live values render on top,
   each behind a small backdrop that hides the printed one underneath.
   ========================================================================== */
.fr-origin,.fr-plate,.fr-serial-live{position:absolute;z-index:6;display:none;
  font-family:var(--bkfont,'Helvetica Neue',Helvetica,Arial,sans-serif)}

.card3d[data-framed] .fr-origin,
.card3d[data-framed] .fr-plate,
.card3d[data-framed] .fr-serial-live{display:flex}

/* origin — bottom-left corner, in the creator's own font and colour */
.fr-origin{left:14.5%;bottom:12.4%;align-items:center;gap:6px;
  font-size:clamp(11px,2.7cqw,30px);font-weight:800;letter-spacing:.05em;text-transform:uppercase;
  text-shadow:0 0 10px rgba(0,0,0,.9),0 1px 2px rgba(0,0,0,.9);white-space:nowrap}

/* name — the centre plate. No fill: the frame's own neon box is the container,
   and the interior of that box is transparent in the artwork now. */
.fr-plate{left:28%;right:29.33%;bottom:4.64%;height:6.47%;
  align-items:center;justify-content:center;overflow:hidden;padding:0 6px}
.fr-plate-name{font-size:var(--plate-fs,26px);font-weight:800;line-height:1;
  letter-spacing:.05em;text-transform:uppercase;white-space:nowrap;
  color:#fff;-webkit-text-fill-color:#fff;
  text-shadow:0 0 9px rgba(0,0,0,.85),0 0 22px rgba(255,79,163,.45)}

/* card number — sits inside the frame's own box, no fill of its own */
.fr-serial-live{left:75.5%;right:7.17%;bottom:4.64%;height:6.47%;overflow:hidden;
  align-items:center;justify-content:center;padding:0 4px;
  font-family:var(--font-mono);font-size:var(--serial-fs,24px);font-weight:800;
  letter-spacing:0;white-space:nowrap;
  color:#fff;-webkit-text-fill-color:#fff;
  text-shadow:0 0 9px rgba(0,0,0,.85),0 0 20px rgba(255,79,163,.4)}

/* white on both, always — the ink choice drives the ORIGIN line only */
.card3d[data-ink="gradient"] .fr-origin{
  background:linear-gradient(105deg,var(--ink1,#FF4FA3),var(--ink2,#7A2FF2));
  -webkit-background-clip:text;background-clip:text;color:transparent;-webkit-text-fill-color:transparent}
.card3d[data-ink="single"] .fr-origin{color:var(--ink1,#FF4FA3);-webkit-text-fill-color:var(--ink1,#FF4FA3)}
.card3d[data-ink="bw"] .fr-origin{color:#fff;-webkit-text-fill-color:#fff}

/* the card is the sizing context for the clamp()s above */
.card3d .face{container-type:inline-size}

/* Any series that ships its own border art carries its own name plate,
   location line and card number. The card's generated ones would double
   them — so they come off for every framed series, not just Season 1. */
.card3d[data-framed] .nameplate,
.card3d[data-framed] .locbadge,
.card3d[data-framed] .fr-serial{display:none}

/* ==========================================================================
   38 · BOTTOM DECK — lighting only, no panel
   Zoom, turn/tilt and the face buttons are visually removed but kept in the
   DOM and keyboard-reachable, so the scroll-to-zoom, drag-to-turn and
   arrow-key controls all still work exactly as before.
   ========================================================================== */
.ctrldeck{
  background:none;
  border:none;
  box-shadow:none;
  padding:0;
  max-width:none;
}
.ctrldeck .vctrl-light{margin:0}
.ctrldeck .hint{
  color:rgba(244,238,248,.72);
  text-shadow:0 1px 3px rgba(0,0,0,.85), 0 0 12px rgba(0,0,0,.6);
}
/* the lighting bubbles now stand alone, so they carry their own weight */
.ctrldeck .vctrl-light .vbtn{
  background:rgba(10,6,16,.55);
  backdrop-filter:blur(6px);-webkit-backdrop-filter:blur(6px);
  border-color:rgba(255,255,255,.24);
}
.ctrldeck .vctrl-light .vbtn[aria-pressed="true"]{
  background:linear-gradient(135deg,var(--s1),color-mix(in srgb,var(--s1) 55%,var(--s2)));
  border-color:color-mix(in srgb,var(--s1) 75%,white);
}

/* the serial's inner element is what the auto-fit measures */
.fr-serial-live b{font-weight:inherit;font-size:inherit;line-height:1;white-space:nowrap}

/* ==========================================================================
   39 · THE SCROLL STORY — the landing sequence
   Every cinematic value reads --p, a 0..1 scroll progress set by story.js.
   Sections are tall; the stage inside them is sticky, so the page scrolls
   while the picture holds and changes. Under reduced-motion --p parks at
   0.5 and nothing moves.
   ========================================================================== */
.story{background:#07050B;color:#F4EEF8;position:relative;overflow:clip}
.story .wrap{position:relative;z-index:2}

/* a tall scroll track with a pinned stage inside it */
.track{position:relative}
.track .stagepin{position:sticky;top:0;height:100vh;display:grid;place-items:center;overflow:hidden}
@supports not (position:sticky){.track .stagepin{position:relative;height:auto;min-height:80vh}}

/* image slots — artwork drops in here; the gradient shows until it does */
.slot{position:absolute;inset:0;overflow:hidden;background:
  radial-gradient(70% 60% at 50% 35%, rgba(255,79,163,.20), transparent 65%),
  linear-gradient(170deg,#1B1226,#08050D 72%)}
.slot img{width:100%;height:100%;object-fit:cover;display:block}
.slot.empty::after{content:attr(data-label);position:absolute;inset:auto 0 12% 0;text-align:center;
  font-family:var(--font-mono);font-size:11px;letter-spacing:.22em;text-transform:uppercase;
  color:rgba(244,238,248,.28)}
.slot::after{pointer-events:none}
/* a readable scrim so type always clears the picture */
.scrim{position:absolute;inset:0;pointer-events:none;background:
  linear-gradient(180deg,rgba(4,3,8,.72) 0%,rgba(4,3,8,.25) 35%,rgba(4,3,8,.35) 60%,rgba(4,3,8,.88) 100%)}

/* ---------- ACT 1 · the opening ---------- */
.act-open{min-height:100vh;display:grid;place-items:center;text-align:center;position:relative}
.act-open .kicker{font-family:var(--font-mono);font-size:12px;letter-spacing:.3em;text-transform:uppercase;
  color:#FF8FCB;margin-bottom:var(--s4)}
.act-open h1{font-size:clamp(34px,6.4vw,84px);line-height:1.02;letter-spacing:-.02em;margin:0 0 var(--s4);
  text-wrap:balance}
.act-open h1 em{font-style:normal;background:linear-gradient(100deg,#FF4FA3,#8A4BFF 55%,#3EE0FF);
  -webkit-background-clip:text;background-clip:text;color:transparent}
.act-open .sub{max-width:60ch;margin:0 auto var(--s6);color:rgba(244,238,248,.78);font-size:clamp(15px,1.7vw,20px)}
.scrollcue{position:absolute;bottom:28px;left:50%;transform:translateX(-50%);
  font-family:var(--font-mono);font-size:10.5px;letter-spacing:.24em;text-transform:uppercase;
  color:rgba(244,238,248,.5);display:grid;justify-items:center;gap:9px}
.scrollcue span.bar{width:1px;height:42px;background:linear-gradient(180deg,#FF4FA3,transparent)}
@media (prefers-reduced-motion:no-preference){
  .scrollcue span.bar{animation:cueDrop 2.1s var(--ease-out) infinite}
  @keyframes cueDrop{0%{opacity:0;transform:scaleY(.2);transform-origin:top}
                     40%{opacity:1;transform:scaleY(1)}
                     100%{opacity:0;transform:scaleY(1);transform-origin:bottom}}
}

/* ---------- scene copy ---------- */
.scenecopy{position:relative;z-index:3;text-align:center;padding:0 var(--s5);max-width:820px}
.scenecopy .step-k{font-family:var(--font-mono);font-size:11px;letter-spacing:.26em;
  text-transform:uppercase;color:#FF8FCB;margin-bottom:var(--s3)}
.scenecopy h2{font-size:clamp(26px,4.4vw,54px);line-height:1.06;margin:0 0 var(--s3);letter-spacing:-.015em;
  text-wrap:balance}
.scenecopy p{color:rgba(244,238,248,.82);font-size:clamp(15px,1.6vw,19px);margin:0 auto;max-width:52ch}

/* ---------- ACT 2 · capture: image drifts, copy rises ---------- */
.act-capture .slot{transform:scale(calc(1.14 - var(--p,0) * .14));
  filter:saturate(calc(.72 + var(--p,0) * .38))}
.act-capture .scenecopy{opacity:clamp(0, calc(var(--p,0) * 3 - .18), 1);
  transform:translateY(calc((1 - clamp(0, var(--p,0) * 3, 1)) * 34px))}

/* ---------- ACT 3 · the moment becomes a card ---------- */
.act-card .cardrise{position:relative;z-index:3;width:min(340px,62vw);aspect-ratio:var(--card-ratio);
  border-radius:var(--r-card);overflow:hidden;
  box-shadow:0 40px 90px rgba(0,0,0,.7), 0 0 0 1px rgba(255,255,255,.14);
  transform:perspective(1200px)
            rotateX(calc((1 - var(--p,0)) * 26deg))
            translateY(calc((1 - var(--p,0)) * 90px))
            scale(calc(.82 + var(--p,0) * .18));
  opacity:clamp(0, calc(var(--p,0) * 2.4), 1)}
.act-card .cardrise .slot{background:linear-gradient(165deg,#2A1636,#0E0716 62%)}
.act-card .cardglow{position:absolute;inset:-14%;z-index:2;pointer-events:none;
  background:radial-gradient(45% 40% at 50% 50%, rgba(255,79,163,calc(var(--p,0) * .5)), transparent 70%);
  filter:blur(30px)}

/* ---------- ACT 4 · theme sequence, one picture stepping through ---------- */
.act-themes .layers{position:absolute;inset:0}
.act-themes .layers .slot{opacity:0;transition:opacity .7s var(--ease-out);transform:scale(1.04)}
.act-themes .layers .slot.on{opacity:1}
.act-themes .themelabel{position:absolute;left:0;right:0;bottom:16%;z-index:4;text-align:center}
.act-themes .themelabel b{display:inline-block;font-family:var(--font-display);
  font-size:clamp(22px,4vw,48px);letter-spacing:.04em;text-transform:uppercase}
.themechips{display:flex;flex-wrap:wrap;gap:7px;justify-content:center;margin-top:var(--s4)}
.themechips i{font-style:normal;font-size:11.5px;font-weight:700;padding:5px 12px;border-radius:999px;
  border:1px solid rgba(255,255,255,.22);color:rgba(244,238,248,.62);transition:all .3s var(--ease-out)}
.themechips i.on{background:linear-gradient(135deg,#FF4FA3,#8A4BFF);border-color:transparent;color:#fff}

/* ---------- ACT 5 · display + unboxing ---------- */
.act-display .slot{transform:translateY(calc((.5 - var(--p,0)) * 60px)) scale(1.06)}
.act-unbox .slot{transform:scale(calc(1.02 + var(--p,0) * .1))}
.act-unbox .scenecopy{opacity:clamp(0, calc(1.25 - var(--p,0) * 1.6), 1)}

/* ---------- ACT 6 · fade to black, logo lights up ---------- */
.act-logo .stagepin{background:#000}
.act-logo .mark{position:relative;z-index:3;text-align:center;
  opacity:clamp(0, calc(var(--p,0) * 2.2 - .25), 1);
  transform:scale(calc(.92 + var(--p,0) * .08))}
.act-logo .mark .glyph{font-family:var(--font-display);font-size:clamp(56px,13vw,170px);
  line-height:1;letter-spacing:.02em;
  background:linear-gradient(100deg,#FF4FA3,#8A4BFF 52%,#3EE0FF);
  -webkit-background-clip:text;background-clip:text;color:transparent;
  filter:drop-shadow(0 0 calc(var(--p,0) * 46px) rgba(255,79,163,.55))}
.act-logo .mark small{display:block;margin-top:var(--s3);font-family:var(--font-mono);
  font-size:clamp(9px,1.2vw,13px);letter-spacing:.36em;text-transform:uppercase;
  color:rgba(244,238,248,calc(var(--p,0) * .68))}

/* ---------- the path split ---------- */
.paths{display:grid;grid-template-columns:repeat(auto-fit,minmax(260px,1fr));gap:var(--s5)}
.pathcard{position:relative;border-radius:var(--r-lg);padding:var(--s6);overflow:hidden;
  background:linear-gradient(165deg,rgba(255,255,255,.07),rgba(255,255,255,.02));
  border:1px solid rgba(255,255,255,.15);transition:all var(--m-base) var(--ease-out)}
.pathcard:hover{border-color:rgba(255,79,163,.6);transform:translateY(-3px);
  box-shadow:0 22px 60px rgba(255,79,163,.18)}
.pathcard h3{margin:0 0 var(--s2);font-size:22px}
.pathcard p{color:rgba(244,238,248,.74);font-size:14.5px;margin:0 0 var(--s5)}
.pathcard .who{font-family:var(--font-mono);font-size:10.5px;letter-spacing:.2em;
  text-transform:uppercase;color:#FF8FCB;margin-bottom:var(--s3)}

/* ---------- reveal primitive ---------- */
[data-reveal]{opacity:0;transform:translateY(22px);
  transition:opacity .7s var(--ease-out), transform .7s var(--ease-out)}
[data-reveal].in{opacity:1;transform:none}
@media (prefers-reduced-motion:reduce){
  [data-reveal]{opacity:1;transform:none;transition:none}
  .track .stagepin{position:relative;height:auto;min-height:74vh}
  .act-card .cardrise{transform:none;opacity:1}
  .act-logo .mark{opacity:1;transform:none}
  .act-themes .layers .slot:first-child{opacity:1}
}


/* ==========================================================================
   40 · THE CREATOR WALLET
   Two balances and one button — the shape creators already know. Everything
   else is explanation, not finance.
   ========================================================================== */
.wallet{max-width:560px;margin:0 auto;border-radius:var(--r-lg);overflow:hidden;
  background:linear-gradient(168deg,#150D22,#0A0611);color:#F4EEF8;
  box-shadow:0 30px 80px rgba(10,4,20,.45), inset 0 1px 0 rgba(255,255,255,.10);
  border:1px solid rgba(255,255,255,.14)}
.wallet-head{display:flex;align-items:center;justify-content:space-between;
  padding:14px var(--s5);border-bottom:1px solid rgba(255,255,255,.10)}
.wallet-live{display:inline-flex;align-items:center;gap:7px;font-size:11px;font-weight:800;
  letter-spacing:.14em;text-transform:uppercase;color:#FF9FD2}
.wallet-live i{width:7px;height:7px;border-radius:50%;background:#3EE08A;display:inline-block}
@media (prefers-reduced-motion:no-preference){
  .wallet-live i{animation:wpulse 2s ease-in-out infinite}
  @keyframes wpulse{0%,100%{opacity:1;box-shadow:0 0 0 0 rgba(62,224,138,.6)}
                    50%{opacity:.65;box-shadow:0 0 0 6px rgba(62,224,138,0)}}
}
.wallet-name{font-size:12px;color:rgba(244,238,248,.55)}
.wallet-main{padding:var(--s6) var(--s5) var(--s5);text-align:center}
.wallet-k{font-size:12px;font-weight:800;letter-spacing:.18em;text-transform:uppercase;
  color:rgba(244,238,248,.6);margin:0 0 6px}
.wallet-big{font-size:clamp(44px,9vw,68px);font-weight:800;line-height:1;margin:0 0 var(--s5);
  background:linear-gradient(100deg,#FF4FA3,#8A4BFF 55%,#3EE0FF);
  -webkit-background-clip:text;background-clip:text;color:transparent;
  filter:drop-shadow(0 0 26px rgba(255,79,163,.30))}
.wallet .btn-primary[disabled]{opacity:.55;cursor:not-allowed}
.wallet-rows{border-top:1px solid rgba(255,255,255,.10)}
.wallet-rows > div{display:grid;grid-template-columns:1fr auto;gap:2px var(--s4);
  padding:13px var(--s5);border-bottom:1px solid rgba(255,255,255,.07)}
.wallet-rows > div:last-child{border-bottom:0;background:rgba(255,255,255,.04)}
.wallet-rows span{font-size:13.5px;font-weight:600}
.wallet-rows b{font-size:17px;font-weight:800;text-align:right}
.wallet-rows small{grid-column:1/-1;font-size:11.5px;color:rgba(244,238,248,.5)}

/* cash vs credit split */
.splitbar{display:flex;height:18px;border-radius:999px;overflow:hidden;
  background:rgba(0,0,0,.10);margin-bottom:var(--s4);--cash:80%}
.splitbar .s-cash{width:var(--cash);background:linear-gradient(90deg,#C2107E,#FF4FA3);
  transition:width var(--m-base) var(--ease-out)}
.splitbar .s-credit{flex:1;background:linear-gradient(90deg,#3EA0FF,#3EE0FF)}
.splitkey{display:grid;grid-template-columns:1fr 1fr;gap:var(--s4)}
.splitkey > div{display:grid;gap:2px}
.splitkey b{font-size:22px;font-weight:800;line-height:1.1}
.splitkey small{font-size:11.5px;color:var(--ink-3)}
.splitkey .dot{width:9px;height:9px;border-radius:50%;display:inline-block;margin-bottom:4px}
.splitkey .dot-cash{background:#FF4FA3}
.splitkey .dot-credit{background:#3EE0FF}
.magicline{margin:var(--s4) 0 0;font-size:15px;text-align:center;
  padding:11px;border-radius:var(--r-md);
  background:linear-gradient(120deg,rgba(255,79,163,.10),rgba(62,224,255,.10));
  border:1px solid rgba(255,79,163,.22)}
.magicline strong{font-size:19px;color:var(--pink-600)}

/* the two sliders that do something surprising */
.ctrl-magic{position:relative;padding:var(--s4);border-radius:var(--r-md);
  background:linear-gradient(120deg,rgba(255,79,163,.06),rgba(122,47,242,.06));
  border:1px solid rgba(255,79,163,.20)}
#advance .ctrl label strong{float:right;font-family:var(--font-mono);color:var(--pink-600)}


/* ==========================================================================
   41 · STUDIO RESPONSIVENESS
   The card is sized by height AND capped by viewport width, so it never
   outgrows a phone or a narrow tablet column.
   ========================================================================== */
@media (max-width:1180px){
  .card3d-wrap{height:min(700px,78vh,68vw)}
}
@media (max-width:900px){
  .studiogrid{gap:var(--s4)}
  .card3d-wrap{height:min(560px,64vh,122vw)}
  .lightbox{min-height:auto;padding:var(--s5) var(--s3)}
}
@media (max-width:620px){
  .card3d-wrap{height:min(440px,58vh,128vw)}
  .zoomstage{min-height:min(470px,62vh)}
  .sidedeck{padding:var(--s3) 0}
  .splitkey{grid-template-columns:1fr}
  .wallet-big{font-size:clamp(38px,13vw,54px)}
}

/* ==========================================================================
   42 · PACKAGE RARITY PICKER
   ========================================================================== */
.tierpicker{display:flex;gap:8px;justify-content:center;margin-bottom:var(--s6);flex-wrap:wrap}
.tierbtn{font:inherit;font-size:15px;font-weight:800;padding:11px 26px;border-radius:var(--r-pill);
  cursor:pointer;background:var(--surface);border:1.5px solid var(--hairline);color:var(--ink);
  transition:all var(--m-fast) var(--ease-out)}
.tierbtn:hover{border-color:var(--pink-500)}
.tierbtn[aria-pressed="true"]{background:linear-gradient(135deg,var(--pink-600),#7A2FF2);
  border-color:transparent;color:#fff;box-shadow:0 8px 24px rgba(194,16,126,.28)}
.raritylist{display:grid;gap:1px;background:var(--hairline);border:1px solid var(--hairline);
  border-radius:var(--r-md);overflow:hidden;margin-top:var(--s4)}
.rar{display:grid;grid-template-columns:150px 1fr;gap:var(--s4);padding:12px var(--s4);
  background:var(--surface);align-items:baseline}
.rar b{font-size:14px}
.rar span{font-size:13.5px;color:var(--ink-2)}
.rar-off{opacity:.45}
.rar-off b{text-decoration:line-through}
.rar-dia{background:linear-gradient(100deg,rgba(122,47,242,.07),rgba(62,160,255,.07))}
.rar-dia b{color:#6B2FD6}
@media (max-width:620px){.rar{grid-template-columns:1fr;gap:2px}}

/* ==========================================================================
   43 · RELEASE CONTROL — direct vs sealed
   ========================================================================== */
.relbar{display:flex;height:18px;border-radius:999px;overflow:hidden;background:rgba(0,0,0,.08);
  margin:var(--s4) 0 var(--s4);--direct:30%}
.relbar .r-direct{width:var(--direct);background:linear-gradient(90deg,#1F7FEA,#3EC8FF);
  transition:width var(--m-base) var(--ease-out)}
.relbar .r-sealed{flex:1;background:linear-gradient(90deg,#C2107E,#FF4FA3)}
.relkey{display:grid;grid-template-columns:1fr 1fr;gap:var(--s4)}
.relkey > div{display:grid;gap:2px}
.relkey b{font-size:22px;font-weight:800;line-height:1.1}
.relkey small{font-size:11.5px;color:var(--ink-3)}
.relkey .dot{width:9px;height:9px;border-radius:50%;display:inline-block;margin-bottom:4px}
.relkey .dot-direct{background:#3EC8FF}
.relkey .dot-sealed{background:#FF4FA3}
.relmodes .bub{background:var(--surface);border:1.5px solid var(--hairline);color:var(--ink);
  font-size:13.5px;padding:9px 16px;border-radius:var(--r-pill);font-weight:700;cursor:pointer;
  transition:all var(--m-fast) var(--ease-out)}
.relmodes .bub:hover{border-color:var(--pink-500)}
.relmodes .bub[aria-pressed="true"]{background:linear-gradient(135deg,var(--pink-600),#7A2FF2);
  border-color:transparent;color:#fff;box-shadow:0 6px 18px rgba(194,16,126,.25)}
#releaseCtl .ctrl label strong{float:right;font-family:var(--font-mono);color:var(--pink-600)}

/* ==========================================================================
   44 · GLASS + CHROME — the membership surface
   Dark synthwave stage, frosted glass panels, chrome gradient type.
   ========================================================================== */
.glassstage{
  position:relative;overflow:hidden;color:#F4EEF8;
  background:
    radial-gradient(120% 80% at 50% -10%, rgba(255,79,163,.16), transparent 62%),
    radial-gradient(90% 70% at 12% 110%, rgba(62,224,255,.12), transparent 66%),
    radial-gradient(80% 60% at 88% 105%, rgba(138,75,255,.16), transparent 66%),
    linear-gradient(178deg,#0A0713 0%,#0D0A1A 48%,#060410 100%);
}
/* starfield */
.glassstage::before{
  content:"";position:absolute;inset:0;pointer-events:none;opacity:.5;
  background-image:
    radial-gradient(1px 1px at 12% 18%, #fff, transparent),
    radial-gradient(1px 1px at 32% 62%, #fff, transparent),
    radial-gradient(1px 1px at 58% 24%, #fff, transparent),
    radial-gradient(1px 1px at 74% 71%, #fff, transparent),
    radial-gradient(1px 1px at 88% 38%, #fff, transparent),
    radial-gradient(1px 1px at 22% 86%, #fff, transparent),
    radial-gradient(1px 1px at 46% 92%, #fff, transparent),
    radial-gradient(1px 1px at 66% 8%,  #fff, transparent);
  background-size:100% 100%;
}
.glassstage > *{position:relative;z-index:1}

/* ---------- chrome type ---------- */
.chrome{
  font-family:var(--font-display);
  text-transform:uppercase;letter-spacing:.01em;line-height:.98;
  background:linear-gradient(180deg,
    #FFE9F6 0%, #FFB3DE 16%, #F58FD0 30%,
    #FFFFFF 47%, #EAF4FF 52%,
    #8FD4FF 62%, #5B8CF0 76%, #2E3A9E 90%, #141A5E 100%);
  -webkit-background-clip:text;background-clip:text;
  color:transparent;-webkit-text-fill-color:transparent;
  filter:drop-shadow(0 0 18px rgba(255,79,163,.45)) drop-shadow(0 2px 0 rgba(255,255,255,.28));
  paint-order:stroke fill;
}
.chrome-lg{font-size:clamp(38px,7vw,86px)}
.chrome-md{font-size:clamp(26px,4vw,46px)}
.chrome-sm{font-size:clamp(19px,2.4vw,30px)}
.chrome-glow{position:relative}
.chrome-glow::after{
  content:"";position:absolute;left:50%;top:50%;transform:translate(-50%,-50%);
  width:120%;height:170%;pointer-events:none;z-index:-1;
  background:radial-gradient(closest-side, rgba(255,79,163,.22), transparent 72%);
  filter:blur(24px)}

/* ---------- glass panel ---------- */
.glass{
  position:relative;border-radius:22px;padding:var(--s6);
  background:linear-gradient(168deg, rgba(255,255,255,.10), rgba(255,255,255,.035));
  backdrop-filter:blur(18px) saturate(140%);
  -webkit-backdrop-filter:blur(18px) saturate(140%);
  border:1px solid rgba(255,255,255,.16);
  box-shadow:
    0 24px 60px rgba(4,2,12,.55),
    inset 0 1px 0 rgba(255,255,255,.28),
    inset 0 -1px 0 rgba(255,255,255,.06);
  transition:transform var(--m-base) var(--ease-out), box-shadow var(--m-base) var(--ease-out),
             border-color var(--m-base) var(--ease-out);
  display:flex;flex-direction:column;
}
.glass:hover{transform:translateY(-4px);border-color:rgba(255,143,203,.55);
  box-shadow:0 30px 74px rgba(255,79,163,.20), inset 0 1px 0 rgba(255,255,255,.34)}
/* top edge light */
.glass::before{
  content:"";position:absolute;inset:0 0 auto 0;height:1px;border-radius:22px 22px 0 0;
  background:linear-gradient(90deg,transparent,rgba(255,255,255,.65),transparent)}
.glass-hero{
  background:linear-gradient(168deg, rgba(255,79,163,.16), rgba(122,47,242,.10) 55%, rgba(255,255,255,.04));
  border-color:rgba(255,143,203,.45);
  box-shadow:0 30px 80px rgba(255,79,163,.24), inset 0 1px 0 rgba(255,255,255,.36)}

.glass-tag{align-self:flex-start;font-family:var(--font-mono);font-size:10.5px;font-weight:700;
  letter-spacing:.16em;text-transform:uppercase;padding:5px 11px;border-radius:999px;
  background:rgba(255,255,255,.12);border:1px solid rgba(255,255,255,.22);
  color:rgba(255,255,255,.86);margin-bottom:var(--s4)}
.glass-hero .glass-tag{background:linear-gradient(135deg,#FF4FA3,#8A4BFF);border-color:transparent;color:#fff}
.glass h3{margin:0 0 6px;font-size:26px;letter-spacing:-.01em}
.glass .blurb{color:rgba(244,238,248,.72);font-size:14px;margin:0 0 var(--s5)}

/* price block */
.priceblk{margin-bottom:var(--s5)}
.priceblk .now{display:flex;align-items:baseline;gap:8px;flex-wrap:wrap}
.priceblk .amt{font-size:44px;font-weight:800;line-height:1;
  background:linear-gradient(180deg,#FFFFFF,#FFC7E6 55%,#9FD0FF);
  -webkit-background-clip:text;background-clip:text;color:transparent;-webkit-text-fill-color:transparent}
.priceblk .per{font-size:14px;color:rgba(244,238,248,.6)}
.priceblk .was{font-size:14px;color:rgba(244,238,248,.45);text-decoration:line-through}
.priceblk .then{font-size:12px;color:rgba(244,238,248,.55);margin-top:7px}
.priceblk .save{display:inline-block;margin-top:9px;font-size:11px;font-weight:800;
  letter-spacing:.1em;text-transform:uppercase;padding:4px 10px;border-radius:999px;
  background:linear-gradient(135deg,rgba(62,224,138,.22),rgba(62,224,255,.18));
  border:1px solid rgba(62,224,138,.45);color:#8FF3BE}

/* perks */
.perks{list-style:none;margin:0 0 var(--s5);padding:0;display:grid;gap:9px}
.perks li{display:grid;grid-template-columns:auto 1fr;gap:9px;align-items:start;
  font-size:13.5px;color:rgba(244,238,248,.86);line-height:1.45}
.perks .st{font-family:var(--font-mono);font-size:9px;font-weight:700;letter-spacing:.1em;
  text-transform:uppercase;padding:3px 6px;border-radius:4px;margin-top:1px;white-space:nowrap}
.perks .st-now{background:rgba(62,224,138,.18);color:#8FF3BE;border:1px solid rgba(62,224,138,.35)}
.perks .st-soon{background:rgba(255,196,84,.16);color:#FFD79A;border:1px solid rgba(255,196,84,.34)}
.perks .st-future{background:rgba(255,255,255,.08);color:rgba(244,238,248,.55);border:1px solid rgba(255,255,255,.16)}
.glass .btn{margin-top:auto}

/* ---------- billing toggle ---------- */
.billtoggle{display:inline-flex;align-items:center;gap:4px;padding:5px;border-radius:999px;
  background:rgba(255,255,255,.08);border:1px solid rgba(255,255,255,.18);
  backdrop-filter:blur(12px);-webkit-backdrop-filter:blur(12px)}
.billtoggle button{font:inherit;font-size:14px;font-weight:700;padding:10px 22px;border-radius:999px;
  cursor:pointer;background:transparent;border:0;color:rgba(244,238,248,.72);
  transition:all var(--m-fast) var(--ease-out);white-space:nowrap}
.billtoggle button:hover{color:#fff}
.billtoggle button[aria-pressed="true"]{
  background:linear-gradient(135deg,#FF4FA3,#8A4BFF);color:#fff;
  box-shadow:0 6px 20px rgba(255,79,163,.38)}
.billnote{font-size:12.5px;color:rgba(244,238,248,.6);margin-top:11px}

.tiergrid{display:grid;grid-template-columns:repeat(auto-fit,minmax(280px,1fr));gap:var(--s5);align-items:stretch}
@media (max-width:620px){.glass{padding:var(--s5)}.priceblk .amt{font-size:38px}}
