/* ============================================================================
 * DIC awwwards upgrade — ADDITIVE layer (upgrade, not rewrite). Dialed up so
 * the before/after is obvious; press U (or click the badge) to toggle.
 * ==========================================================================*/

/* Bridge DIC's palette → the token names grimoire/Veil expects. */
:root{
  --toxic-green-rgb: 166,242,58;
  --gold-rgb:        255,210,58;
  --blood-red-rgb:   216,65,47;
  --near-black-rgb:  10,10,10;
}

/* ---- Branded preloader (load theatre) ------------------------------------ */
#dic-preloader{
  position:fixed; inset:0; z-index:100000; display:grid; place-items:center;
  background:#070707; transition:opacity .62s ease, visibility .62s ease;
}
#dic-preloader.dp-done{ opacity:0; visibility:hidden; pointer-events:none; }
#dic-preloader .dp-inner{ display:flex; flex-direction:column; align-items:center; gap:14px; }
#dic-preloader .dp-ecg{ width:min(58vw,280px); height:auto; filter:drop-shadow(0 0 6px rgb(166 242 58 / .8)); }
#dic-preloader .dp-ecg path{
  stroke-dasharray:600; stroke-dashoffset:600;
  animation:dp-trace 1.15s cubic-bezier(.6,.0,.2,1) forwards;
}
#dic-preloader .dp-word{
  font-family:'Permanent Marker','Special Elite',ui-monospace,monospace;
  font-size:clamp(34px,7vw,64px); color:#a6f23a; letter-spacing:.02em; line-height:1;
  text-shadow:0 0 22px rgb(166 242 58 / .55); opacity:0; animation:dp-rise .7s .55s ease forwards;
}
#dic-preloader .dp-epitaph{
  font-family:'Special Elite',ui-monospace,monospace; font-size:11px; letter-spacing:.42em;
  color:rgb(242 237 225 / .5); text-transform:uppercase; opacity:0; animation:dp-rise .7s .8s ease forwards;
}
@keyframes dp-trace{ to{ stroke-dashoffset:0; } }
@keyframes dp-rise{ from{ opacity:0; transform:translateY(8px); } to{ opacity:1; transform:none; } }
#dic-preloader.dp-reduced .dp-ecg path{ animation:none; stroke-dashoffset:0; }
#dic-preloader.dp-reduced .dp-word,
#dic-preloader.dp-reduced .dp-epitaph{ animation:none; opacity:1; }
@media (prefers-reduced-motion: reduce){
  #dic-preloader .dp-ecg path{ animation:none; stroke-dashoffset:0; }
  #dic-preloader .dp-word, #dic-preloader .dp-epitaph{ animation:none; opacity:1; }
}

/* Descent rail — a glowing toxic-green spine on the left, ALWAYS visible
   (a faint full-height track + a bright fill that tracks scroll depth). */
/* The descent rail is now a WebGL green-fire canvas (#dic-flamerail) created in
   makeFlameRail() in dic-upgrade.js — flows top->bottom with scroll. */

/* scroll-spy: the nav link for the section you're in lights up. */
nav a[aria-current="true"]{ color:#a6f23a !important; text-shadow:0 0 12px rgb(166 242 58 / .7); }

/* Heartbeat removed by request — hide the original hero EKG canvas while upgraded
   (reversible: toggling the upgrade off restores it). */
body.dic-upgraded canvas.flatline{ opacity:0 !important; }

/* ============================================================================
   ONE CONTINUOUS BACKGROUND — make the site-wide smoke flow seam-to-seam.
   (1) kill the 1px section hairlines; (2) crossfade each section's OWN scene
   (Pit-of-Souls, Hell's-Gate fire) into the smoke at its top/bottom edges, so
   the scene merges in and back out instead of hard-cutting. Scene middles and
   all UI/content stay untouched. Reversible (scoped to .dic-upgraded).
   ==========================================================================*/
body.dic-upgraded .sec{ border-top:0 !important; }

/* Death Swap — blend its Pit-of-Souls scene fully into the site-wide smoke (no
   hard edges), keeping the scene as the section's "extra". Hide the frame outline. */
body.dic-upgraded #swap .ds-frame{ display:none !important; }
/* kill the perspective floor-grid: its receding 1px lines stacked a visible seam where #swap meets the Death Sale */
body.dic-upgraded #swap .ds-grid{ display:none !important; }
body.dic-upgraded #swap .ds-fog,
body.dic-upgraded #swap .ds-grid,
body.dic-upgraded #swap .ds-skull,
body.dic-upgraded #swap .ds-fire,
body.dic-upgraded #swap .ds-embers,
body.dic-upgraded #swap .ds-vig,
body.dic-upgraded #swap .ds-souls,
body.dic-upgraded #swap .ds-amtfx,
body.dic-upgraded #swap .ds-scan{
  /* longer, earlier bottom fade so the green Swap scene fully dissolves WELL before the
     Death-Sale boundary (no hard green->orange horizon). ds-amtfx added so it stops
     spilling its unmasked edge past the seam. Middle (the swap UI band) stays solid. */
  -webkit-mask-image:linear-gradient(to bottom, transparent 0, #000 22%, #000 60%, transparent 92%) !important;
          mask-image:linear-gradient(to bottom, transparent 0, #000 22%, #000 60%, transparent 92%) !important;
}
/* Death Swap — premium ember-glass on the swap card + the Ferryman's Toll. */
body.dic-upgraded #swap .ds-card{
  border-radius:16px !important;
  border:1px solid rgba(var(--acc-rgb),.30) !important;
  box-shadow:0 26px 64px -24px rgba(0,0,0,.85), 0 0 46px -18px rgba(var(--acc-rgb),.40) !important;
}
body.dic-upgraded #swap .ds-toll{
  border-radius:12px !important;
  border:1px solid rgba(var(--acc-rgb),.45) !important;
  box-shadow:0 0 30px -10px rgba(var(--acc-rgb),.42) !important;
}

/* Death Sale — LOSE the old contained fire "card" entirely. The morphing
   background (smoke->fire via uHeat) + the new soul swarm become the death pit,
   seamlessly — no boxed scene edges. Keep the headline/countdown (.hero-content). */
body.dic-upgraded #saleHero{ background:transparent !important; }
body.dic-upgraded #saleHero .hero-fire,
body.dic-upgraded #saleHero .hero-grade,
body.dic-upgraded #saleHero .hero-rays,
body.dic-upgraded #saleHero .hero-particles,
body.dic-upgraded #saleHero .hero-veil,
body.dic-upgraded #saleHero .hero-gate{ display:none !important; }

/* HERO — NO FRAME. The card's border, corner brackets and shadow are stripped; the
   panel becomes a single EDGELESS radial scrim that darkens behind the copy (left)
   and fades to transparent on every side, so the headline/lede stay legible but no
   rectangle/box ever shows. The skull (right) reads through the fading edge. */
body.dic-upgraded .hero-card{
  background:none !important;   /* NO scrim — any box-bounded gradient gets clipped to straight edges. The
                                   plasma already darkens behind the headline; text-shadows carry the rest. */
  border:0 !important; border-radius:0 !important; box-shadow:none !important;
}
body.dic-upgraded .hero-card::before,
body.dic-upgraded .hero-card::after{ display:none !important; }   /* drop the corner brackets — no frame */
body.dic-upgraded .hero-card .copy,
body.dic-upgraded .hero-card h1{ position:relative; z-index:3; }
/* legibility on the bare fire — dark halos on the hero copy (the huge headline reads
   on its own; $DIC + the lede get shadows). fx-effect headlines set their own shadow. */
body.dic-upgraded .hero h1{ text-shadow:0 2px 14px rgb(0 0 0 / .6), 0 0 30px rgb(0 0 0 / .45); }
body.dic-upgraded .hero .tick{ text-shadow:0 2px 10px rgb(0 0 0 / .72), 0 0 22px rgb(166 242 58 / .3) !important; }
body.dic-upgraded .hero p.lede{ text-shadow:0 1px 3px rgb(0 0 0 / .92), 0 0 14px rgb(0 0 0 / .6); }

/* Cinematic vignette — a single STATIC radial gradient (no per-frame work). */
#dic-vignette{
  position:fixed; inset:0; z-index:9990; pointer-events:none;
  background:radial-gradient(ellipse 125% 105% at 50% 42%, transparent 50%, rgb(10 10 10 / .80) 100%);
}

/* Toggle badge — bottom-left, so you always know the state. */
#dic-badge{
  position:fixed; left:14px; bottom:14px; z-index:10001;
  font:600 11px/1 ui-monospace,Menlo,monospace; letter-spacing:.04em;
  color:#0a0a0a; background:#a6f23a; border:0; border-radius:999px;
  padding:7px 12px; cursor:pointer; box-shadow:0 0 16px rgb(166 242 58 / .6);
}
#dic-badge:hover{ filter:brightness(1.08); }

/* ---- Accessibility (juror gate: keyboard / focus / SR) -------------------- */
/* Skip-link: visually hidden until focused, then a real toxic-green pill that
   jumps keyboard/SR users straight past the full-viewport canvas. */
#dic-skip{
  position:fixed; left:14px; top:-60px; z-index:10002;
  font:600 12px/1 ui-monospace,Menlo,monospace; color:#0a0a0a; background:#a6f23a;
  padding:10px 16px; border-radius:8px; text-decoration:none; transition:top .18s ease;
}
#dic-skip:focus{ top:14px; outline:3px solid #f2ede1; outline-offset:2px; }
/* Visible focus ring on every interactive control once the upgrade is on. */
body.dic-upgraded a:focus-visible,
body.dic-upgraded button:focus-visible,
body.dic-upgraded [role="button"]:focus-visible{
  outline:2px solid #a6f23a; outline-offset:3px;
  box-shadow:0 0 0 4px rgb(166 242 58 / .25); border-radius:4px;
}

/* ============================================================================
   THE DEATH SALE — visual/UX overhaul (additive · reversible · scoped to #buy).
   Class-level restyle ONLY — every money hook (#saleAmt/#saleBtn/#sgFill width/
   #saleOfferFill height/#claimBtn/#refundBtn/#svBtn, [data-show], [data-phase])
   is untouched. Everything consumes --sacc / --sacc-rgb so it auto-themes per
   phase (green → gold → blood).
   ==========================================================================*/

/* Frosted ember-glass cards — semi-transparent so the continuous fire/smoke
   ghosts through (cohesion), with a light blur for legibility over the motion. */
body.dic-upgraded #buy .card{
  background:linear-gradient(180deg, rgb(20 18 14 / .80), rgb(10 9 7 / .74)) !important;
  border:1px solid rgba(var(--sacc-rgb),.18) !important;
  border-radius:14px !important;
  -webkit-backdrop-filter:blur(5px) saturate(1.12); backdrop-filter:blur(5px) saturate(1.12);
  box-shadow:0 18px 50px -24px rgb(0 0 0 / .8), inset 0 1px 0 rgb(255 255 255 / .03) !important;
  transition:border-color .2s, box-shadow .2s, transform .2s !important;
}
body.dic-upgraded #buy .card:hover{
  border-color:rgba(var(--sacc-rgb),.4) !important;
  box-shadow:0 24px 60px -22px rgb(0 0 0 / .85), 0 0 30px -12px rgba(var(--sacc-rgb),.4), inset 0 1px 0 rgb(255 255 255 / .04) !important;
}

/* PRIMARY money cards — deposit / claim / refund get an ember frame + corner
   brackets (the hero-card language) so the action stands apart from messaging. */
body.dic-upgraded #buy .sale-deposit,
body.dic-upgraded #buy .sale-claim{
  position:relative;
  border-color:rgba(var(--sacc-rgb),.42) !important;
  background:linear-gradient(180deg, rgb(26 22 15 / .84), rgb(12 10 7 / .80)) !important;
  box-shadow:0 24px 60px -22px rgb(0 0 0 / .85), 0 0 44px -16px rgba(var(--sacc-rgb),.45), inset 0 0 60px -34px rgba(var(--sacc-rgb),.7) !important;
}
body.dic-upgraded #buy .sale-deposit::before, body.dic-upgraded #buy .sale-deposit::after,
body.dic-upgraded #buy .sale-claim::before,   body.dic-upgraded #buy .sale-claim::after{
  content:""; position:absolute; width:17px; height:17px; pointer-events:none;
  border:2px solid rgba(var(--sacc-rgb),.65);
}
body.dic-upgraded #buy .sale-deposit::before, body.dic-upgraded #buy .sale-claim::before{ top:9px; left:9px; border-right:0; border-bottom:0; }
body.dic-upgraded #buy .sale-deposit::after,  body.dic-upgraded #buy .sale-claim::after{ bottom:9px; right:9px; border-left:0; border-top:0; }

/* RAISE GAUGE — taller and alive. (#sgFill width + #sgFloor left stay JS-driven.) */
body.dic-upgraded #buy .sg-bar{
  height:20px !important; border-radius:11px !important;
  background:linear-gradient(180deg,#06090b,#0c1108) !important;
  border:1px solid rgba(var(--sacc-rgb),.22) !important;
  box-shadow:inset 0 2px 8px rgb(0 0 0 / .6) !important;
}
body.dic-upgraded #buy .sg-fill{
  border-radius:11px !important; position:relative; overflow:hidden;
  background:linear-gradient(90deg, rgba(var(--sacc-rgb),.35), rgba(var(--sacc-rgb),.92) 72%, #fff8e0) !important;
  box-shadow:0 0 18px rgba(var(--sacc-rgb),.6), 0 0 42px rgba(var(--sacc-rgb),.3) !important;
}
body.dic-upgraded #buy .sg-fill::after{          /* shimmer sweep */
  content:""; position:absolute; inset:0;
  background:linear-gradient(90deg, transparent, rgb(255 255 255 / .45), transparent);
  background-size:42% 100%; background-repeat:no-repeat; animation:dic-shimmer 2.6s linear infinite;
}
@keyframes dic-shimmer{ 0%{background-position:-45% 0;} 100%{background-position:145% 0;} }
body.dic-upgraded #buy .sg-floor{ width:2px !important; background:var(--bone) !important; opacity:.85 !important; box-shadow:0 0 8px rgb(255 255 255 / .5); }
body.dic-upgraded #buy .sg-top b{ text-shadow:0 0 14px rgba(var(--sacc-rgb),.3); }

/* DEPOSIT FIELD — ritual input with a focus aura. */
body.dic-upgraded #buy .sd-input{
  border:1px solid rgba(var(--sacc-rgb),.3) !important; border-radius:10px !important;
  background:linear-gradient(180deg, rgb(8 11 7 / .92), rgb(4 6 4 / .92)) !important;
  transition:border-color .2s, box-shadow .2s !important;
}
body.dic-upgraded #buy .sd-input:focus-within{
  border-color:rgba(var(--sacc-rgb),.75) !important;
  box-shadow:0 0 0 3px rgba(var(--sacc-rgb),.18), 0 0 24px -6px rgba(var(--sacc-rgb),.5) !important;
}
/* the value proposition reads like a headline */
body.dic-upgraded #buy .sd-get b{ font-size:22px !important; color:var(--sacc) !important; text-shadow:0 0 16px rgba(var(--sacc-rgb),.45); }

/* COMMIT / CLAIM / REFUND buttons — more monumental. */
body.dic-upgraded #buy .sd-btn{ font-size:16px !important; padding:17px 26px !important; letter-spacing:3px !important; border-radius:10px !important; }

/* COUNTDOWN — carved iron gate-board: each unit a beveled tombstone slab with a
   glowing digit + colon separators. Reads as a deliberate sealed-vault clock even
   when empty ("--"); monumental when a real date is set. Phase-themed via --sacc. */
body.dic-upgraded #buy .gate-board{
  width:min(94%,460px) !important; padding:20px 24px 17px !important; gap:13px !important;
  border:1.5px solid rgba(var(--sacc-rgb),.45) !important; border-radius:15px !important;
  background:linear-gradient(180deg, rgba(15,13,9,.84), rgba(6,5,4,.88)) !important;
  -webkit-backdrop-filter:blur(4px); backdrop-filter:blur(4px);
  box-shadow:0 22px 54px -20px rgb(0 0 0 / .85), 0 0 56px -16px rgba(var(--sacc-rgb),.45), inset 0 1px 0 rgb(255 255 255 / .05) !important;
}
body.dic-upgraded #buy .gate-board .sc-eyebrow{
  font-size:11px !important; letter-spacing:4px !important; color:var(--sacc) !important;
  text-shadow:var(--dic-glyph-halo) !important;
}
body.dic-upgraded #buy .gate-board .sc-clock{ gap:12px !important; }
/* each unit = live text, no slab box */
body.dic-upgraded #buy .gate-board .sc-clock span{
  position:relative; min-width:64px; padding:11px 8px 9px !important; gap:4px !important;
  background:none !important; border:0 !important; border-radius:0 !important; box-shadow:none !important;
  font-size:9.5px !important; letter-spacing:2px !important; color:#e8b15a !important; text-transform:uppercase;
  text-shadow:0 1px 2px rgba(0,0,0,.6),0 0 7px rgba(255,150,52,.42) !important;
}
/* the digit — SAME fire as the Death Swap numbers: bright cream-gold core, a warm molten halo
   with a gentle upward flame, and the shared dic-numflick flicker. Solid fill, NOT bg-clip:text
   (the gate sits over the live WebGL fire + a backdrop blur, where a clipped gradient goes black). */
body.dic-upgraded #buy .gate-board .sc-clock b{
  font-size:clamp(36px,7vw,54px) !important; line-height:.92 !important;
  color:#ffe39a !important; -webkit-text-fill-color:#ffe39a !important;
  text-shadow:0 1px 2px rgba(0,0,0,.6),0 0 4px rgba(0,0,0,.4),0 -2px 7px rgba(255,212,122,.74),0 0 17px rgba(255,150,52,.54),0 -10px 20px rgba(255,92,32,.32) !important;
  animation:dic-numflick 2.7s ease-in-out infinite;
}
/* colon separators between the slabs */
/* colon as a LEADING separator (::before on :not(:first-child)), so the hidden seconds span hides
   its own colon and the armed 6 6 6 never shows a dangling trailing ":" after the minutes. */
body.dic-upgraded #buy .gate-board .sc-clock span:not(:first-child)::before{
  content:":"; position:absolute; left:-9px; top:42%; transform:translateY(-50%);
  font-family:var(--display); font-size:30px; color:rgba(255,176,74,.6); pointer-events:none; text-shadow:0 0 7px rgba(255,150,52,.4);
}
body.dic-upgraded #buy .gate-board .sc-note{
  font-size:10.5px !important; letter-spacing:1.5px !important; color:rgb(242 237 225 / .5) !important; margin-top:5px !important;
  text-shadow:var(--dic-glyph-halo) !important;
}

/* TOKEN SPLIT + PROMISES — hover life + accent rhythm. */
body.dic-upgraded #buy .sale-split .ss{ transition:background .2s; }
/* no hover box on the 49 / 49 / 2 allocation stats — let them sit in the smoke */
body.dic-upgraded #buy .sale-split .ss:hover{ background:transparent; }
body.dic-upgraded #buy .promise{ transition:transform .2s, border-color .2s, box-shadow .2s; }
body.dic-upgraded #buy .promise:hover{
  transform:translateY(-3px); border-color:rgba(var(--sacc-rgb),.4) !important;
  box-shadow:0 16px 40px -20px rgb(0 0 0 / .8), 0 0 24px -12px rgba(var(--sacc-rgb),.4) !important;
}

/* SECTION HEADER eyebrow + verify card authority. */
body.dic-upgraded #buy .shead .n{ color:var(--sacc) !important; text-shadow:0 0 14px rgba(var(--sacc-rgb),.5); }
body.dic-upgraded #buy .sale-verify{ border-color:rgba(var(--sacc-rgb),.3) !important; }

/* ============================================================================
   DEATH SALE v2 — STRUCTURE: one clear focal column (simpler for users).
   The single action (deposit / claim / refund) is the centered hero; the gauge
   sits right above it; the token split + promises drop BELOW as a calm trust
   strip instead of competing side-by-side. Pure layout — no markup / money hooks.
   ==========================================================================*/
body.dic-upgraded #buy .sale-gauge{ max-width:600px; margin-left:auto !important; margin-right:auto !important; }
body.dic-upgraded #buy .sale-main{ grid-template-columns:1fr !important; max-width:600px; margin-left:auto !important; margin-right:auto !important; gap:18px !important; }
body.dic-upgraded #buy .sale-promises{ max-width:940px; margin-left:auto !important; margin-right:auto !important; }
body.dic-upgraded #buy .sale-verify{ max-width:600px; margin-left:auto !important; margin-right:auto !important; }
/* the deposit / claim action — give the altar more presence + breathing room */
body.dic-upgraded #buy .sale-deposit, body.dic-upgraded #buy .sale-claim{ padding:28px !important; }
body.dic-upgraded #buy .sale-deposit .ct, body.dic-upgraded #buy .sale-claim .ct{ font-size:19px !important; }
body.dic-upgraded #buy .sd-input input{ font-size:34px !important; }
body.dic-upgraded #buy .sd-input{ padding:4px 16px !important; }
/* token split reads as one clean strip under the action */
body.dic-upgraded #buy .sale-split{ border-radius:14px !important; overflow:hidden; }
body.dic-upgraded #buy .sale-fine{ text-align:center; max-width:520px; margin-left:auto; margin-right:auto; }

/* ============================================================================
   SOULS LEDGER — ember-glass cards, dramatic soul counter, carved holder rows,
   prominent copyable contract. Additive, scoped. Toxic-green accents.
   ==========================================================================*/
body.dic-upgraded #ledger .card{
  background:linear-gradient(180deg, rgb(20 18 14 / .80), rgb(10 9 7 / .72)) !important;
  border:1px solid rgb(166 242 58 / .18) !important; border-radius:14px !important;
  -webkit-backdrop-filter:blur(5px) saturate(1.1); backdrop-filter:blur(5px) saturate(1.1);
  box-shadow:0 18px 50px -24px rgb(0 0 0 / .8), inset 0 1px 0 rgb(255 255 255 / .03) !important;
  transition:border-color .2s, box-shadow .2s !important;
}
body.dic-upgraded #ledger .card:hover{ border-color:rgb(166 242 58 / .38) !important; box-shadow:0 24px 60px -22px rgb(0 0 0 / .85), 0 0 30px -12px rgb(166 242 58 / .35), inset 0 1px 0 rgb(255 255 255 / .04) !important; }
/* the soul-cloud card is the centerpiece — stronger ember frame + inner aura */
body.dic-upgraded #ledger .card.soulskull{ border-color:rgb(166 242 58 / .34) !important; box-shadow:0 24px 60px -22px rgb(0 0 0 / .85), 0 0 44px -16px rgb(166 242 58 / .42), inset 0 0 70px -38px rgb(166 242 58 / .6) !important; }
/* dramatic soul counter — SAME fire numbering as the Death Swap amounts + the gate 6 6 6: bright
   cream-gold core (gold-on-green = high contrast, so it actually reads over the soul cloud), warm
   molten glow with a dark depth for legibility, and the shared dic-numflick flicker. */
body.dic-upgraded #ledger .soulcount #soulnum{ font-size:clamp(46px,7.5vw,76px) !important;
  color:#ffe39a !important; -webkit-text-fill-color:#ffe39a !important;
  text-shadow:0 1px 2px rgba(0,0,0,.62),0 0 5px rgba(0,0,0,.42),0 -2px 8px rgba(255,212,122,.7),0 0 18px rgba(255,150,52,.5),0 -11px 22px rgba(255,92,32,.3) !important;
  animation:dic-numflick 2.7s ease-in-out infinite; }
/* carved Reaper's-Ledger holder rows */
body.dic-upgraded #ledger .holders .h-row{ border-radius:10px !important; }
body.dic-upgraded #ledger .holders .h-row:hover{ background:rgb(166 242 58 / .08) !important; box-shadow:0 0 22px -10px rgb(166 242 58 / .4) !important; }
body.dic-upgraded #ledger .holders .h-row .p{ text-shadow:0 0 12px rgb(166 242 58 / .4); }
/* prominent, copyable contract / wallet rows */
body.dic-upgraded #ledger .addr{ border:1px solid rgb(166 242 58 / .24) !important; border-radius:9px !important; background:rgb(8 11 7 / .6) !important; padding:10px 12px !important; }
body.dic-upgraded #ledger .addr .copy{ border:1px solid rgb(166 242 58 / .5) !important; color:#a6f23a !important; border-radius:6px !important; background:rgb(166 242 58 / .06) !important; transition:background .16s; }
body.dic-upgraded #ledger .addr .copy:hover{ background:rgb(166 242 58 / .18) !important; }
/* the skull-cloud of souls breathes/glows (the drifting galaxy sits behind it) */
body.dic-upgraded #soulcloud{ animation:dic-soulpulse 4.2s ease-in-out infinite; }
@keyframes dic-soulpulse{ 0%,100%{ filter:drop-shadow(0 0 7px rgb(166 242 58 / .4)); } 50%{ filter:drop-shadow(0 0 18px rgb(166 242 58 / .72)); } }
@media (prefers-reduced-motion: reduce){ body.dic-upgraded #soulcloud{ animation:none; } }

/* ============================================================================
   BODY COHESION — propagate the bespoke hero/ledger language (ember-glass cards,
   skull-mark watermark, real SVG icon medallions) onto the three sections the
   upgrade layer never reached: PROOF OF DEATH (.badges), DEATH-ENOMICS, FOOTER.
   Reuse only; literal toxic-green (166 242 58) since --sacc is scoped to #buy.
   ==========================================================================*/
/* BORDERLESS / EDGELESS — no panels at all: the icon medallions + labels sit directly
   ON the fire (like the Death-Sale copy), legible via dark glyph-halos. The bespoke
   icons carry the cohesion; nothing boxes the fire in. */
body.dic-upgraded .badge,
body.dic-upgraded #death-economics .de-stat,
body.dic-upgraded #death-economics .de-nblk{
  background:none !important; border:0 !important; border-radius:0 !important;
  box-shadow:none !important; -webkit-backdrop-filter:none !important; backdrop-filter:none !important;
  position:relative;
}
/* PROOF badges: a recessed ember medallion (its own small seal) + halo'd labels */
body.dic-upgraded .badge{ padding:18px 12px !important; }
body.dic-upgraded .badge .ic{
  display:flex; align-items:center; justify-content:center;
  width:50px; height:50px; margin:0 auto 14px; border-radius:50%; font-size:0 !important;
  background:radial-gradient(circle at 50% 34%, rgb(166 242 58 / .16), rgb(8 10 8 / .7));
  border:1px solid rgb(166 242 58 / .3);
  box-shadow:0 2px 10px rgb(0 0 0 / .6), inset 0 0 12px -6px rgb(166 242 58 / .55);
  transition:border-color .2s, box-shadow .2s;
}
body.dic-upgraded .badge:hover .ic{ border-color:rgb(166 242 58 / .5); box-shadow:0 2px 10px rgb(0 0 0 / .6), 0 0 20px -6px rgb(166 242 58 / .5), inset 0 0 12px -6px rgb(166 242 58 / .6); }
body.dic-upgraded .badge .ic svg{
  width:25px; height:25px; display:block; color:#a6f23a; stroke:#a6f23a;
  filter:drop-shadow(0 0 4px rgb(166 242 58 / .5));
}
/* legibility on the bare fire — dark halos on every label/number */
body.dic-upgraded .badge .t{ color:var(--bone) !important; text-shadow:0 1px 2px rgb(0 0 0 / .95), 0 0 12px rgb(0 0 0 / .8) !important; }
body.dic-upgraded .badge .s{ text-shadow:0 1px 2px rgb(0 0 0 / .9), 0 0 10px rgb(0 0 0 / .7) !important; }
body.dic-upgraded #death-economics .de-stat .v{ text-shadow:0 1px 3px rgb(0 0 0 / .95), 0 0 16px rgb(0 0 0 / .72) !important; }
body.dic-upgraded #death-economics .de-stat .k{ text-shadow:0 1px 2px rgb(0 0 0 / .92), 0 0 10px rgb(0 0 0 / .66) !important; }
body.dic-upgraded #death-economics .de-nblk h3{ text-shadow:0 1px 2px rgb(0 0 0 / .9), 0 0 10px rgb(0 0 0 / .6) !important; }
/* FOOTER: shared ember hairline + watermark (the closing crescendo is a later pass) */
body.dic-upgraded footer{ border-top:0 !important; position:relative; overflow:hidden; }
body.dic-upgraded footer::before{ display:none; }   /* removed: the green hairline read as a harsh section-separation line */
body.dic-upgraded footer::after{
  content:""; position:absolute; right:-24px; bottom:-30px; width:170px; height:170px; pointer-events:none;
  background:url('assets/skull-mark.svg') center/contain no-repeat; opacity:.04;
}

/* ---- STAGGERED CHILD-REVEAL — the section .reveal still fades the whole block in,
   but its cards/rows/stats now CASCADE (per-child --rd set by the observer) so the
   body inherits the hero's choreographic rhythm instead of arriving as one slab.
   Flat children get a rise+fade; cards/promises (which own hover transforms) fade
   only, so the animation's forwards-fill can never freeze their :hover transform. */
body.dic-upgraded .reveal .badge,
body.dic-upgraded .reveal .de-stat,
body.dic-upgraded .reveal .h-row,
body.dic-upgraded .reveal .dj{ opacity:0; }
body.dic-upgraded .reveal.in .badge,
body.dic-upgraded .reveal.in .de-stat,
body.dic-upgraded .reveal.in .h-row,
body.dic-upgraded .reveal.in .dj{ animation:dic-rise .46s var(--rd,0ms) both; }
@keyframes dic-rise{ from{ opacity:0; transform:translateY(8px); } to{ opacity:1; transform:none; } }
body.dic-upgraded .reveal .card,
body.dic-upgraded .reveal .promise{ opacity:0; }
body.dic-upgraded .reveal.in .card,
body.dic-upgraded .reveal.in .promise{ animation:dic-cfade .52s var(--rd,0ms) both; }
@keyframes dic-cfade{ from{ opacity:0; } to{ opacity:1; } }
@media (prefers-reduced-motion:reduce){
  body.dic-upgraded .reveal .badge, body.dic-upgraded .reveal .de-stat, body.dic-upgraded .reveal .h-row,
  body.dic-upgraded .reveal .dj, body.dic-upgraded .reveal .card, body.dic-upgraded .reveal .promise{ opacity:1 !important; animation:none !important; }
}

/* ============================================================================
   CURSOR — soul-fire halo (Noomo-elegant follow, our flame). A soft green
   ember-glow trails the site's precise #cur ember with heavy lag and blooms
   open on hover. The outer element carries JS translate; the inner <i> carries
   the bloom + a gentle flicker (so the two never fight over `transform`).
   Fine-pointer only; the native cursor is already hidden site-wide.
   ==========================================================================*/
#dic-flame{ position:fixed; top:0; left:0; z-index:9997; pointer-events:none; will-change:transform; mix-blend-mode:screen; }
#dic-flame i{
  display:block; width:30px; height:30px; margin:-15px;
  border-radius:54% 46% 50% 50% / 60% 60% 40% 40%;       /* faint teardrop — a flame, not a disc */
  background:radial-gradient(circle at 50% 62%, rgb(226 255 184 / .55) 0%, rgb(166 242 58 / .34) 40%, rgb(120 220 40 / 0) 72%);
  filter:blur(2px); opacity:.82;
  transition:width .3s cubic-bezier(.2,.8,.3,1), height .3s cubic-bezier(.2,.8,.3,1), margin .3s cubic-bezier(.2,.8,.3,1), opacity .3s;
  animation:dic-flameflick 1.7s ease-in-out infinite;
}
#dic-flame.hot i{                                          /* Noomo's hover-grow, as a flare-up */
  width:64px; height:64px; margin:-32px; opacity:1;
  background:radial-gradient(circle at 50% 62%, rgb(255 255 255 / .5) 0%, rgb(200 255 120 / .4) 36%, rgb(166 242 58 / 0) 72%);
}
#dic-flame.down i{ width:20px; height:20px; margin:-10px; }
@keyframes dic-flameflick{ 0%,100%{ filter:blur(2px) brightness(1); } 50%{ filter:blur(3px) brightness(1.22); } }
@media (hover:none),(pointer:coarse){ #dic-flame{ display:none !important; } }
@media (prefers-reduced-motion: reduce){ #dic-flame i{ animation:none; } }

/* ============================================================================
   P0 CRAFT PASS — hero CTA hierarchy, Death-Sale legibility scrim, contrast
   floor, cursor affordance fallback. Additive + scoped to .dic-upgraded.
   ==========================================================================*/
/* RANK 3 — hero CTA hierarchy: a filled, bracketed primary vs a quiet ghost secondary.
   Only the REST state is restyled; the existing .btn.go:hover btnEmber escalation stays. */
body.dic-upgraded .hero .ctas .btn.go{
  background:linear-gradient(135deg, var(--toxic), #d6ff7a) !important;
  color:var(--ink) !important; border-color:transparent !important;
  box-shadow:0 0 28px -6px rgb(166 242 58 / .55);
}
body.dic-upgraded .hero .ctas .btn.go::before,
body.dic-upgraded .hero .ctas .btn.go::after{
  content:""; position:absolute; width:9px; height:9px; pointer-events:none; border:2px solid rgb(10 10 10 / .5);
}
body.dic-upgraded .hero .ctas .btn.go::before{ top:5px; left:5px; border-right:0; border-bottom:0; }
body.dic-upgraded .hero .ctas .btn.go::after{ bottom:5px; right:5px; border-left:0; border-top:0; }
body.dic-upgraded .hero .ctas a.btn:not(.go){ opacity:.82; letter-spacing:1.8px; }
body.dic-upgraded .hero .ctas a.btn:not(.go):hover{ opacity:1; }

/* RANK 5 (no box) — keep the fire fully visible; make the money-shot copy legible
   with strong multi-layer DARK HALOS on the glyphs themselves, not a dark panel. */
body.dic-upgraded #saleHero .hero-content{ background:none !important; }
body.dic-upgraded #saleHero .sale-eyebrow{ text-shadow:0 1px 2px rgb(0 0 0 / .95), 0 0 10px rgb(0 0 0 / .9), 0 0 18px rgb(0 0 0 / .7) !important; }
body.dic-upgraded #saleHero .sale-title{ text-shadow:var(--dic-glyph-halo) !important; -webkit-text-stroke:.5px rgba(0,0,0,.35); paint-order:stroke fill; }
body.dic-upgraded #saleHero .sale-sub{ color:#f4efe3 !important; font-size:15px !important; text-shadow:0 1px 2px rgb(0 0 0 / 1), 0 2px 7px rgb(0 0 0 / .96), 0 0 20px rgb(0 0 0 / .8), 0 0 34px rgb(0 0 0 / .55) !important; }

/* RANK 6 — lift small-text contrast above AA (token bump + over-fire shadows) */
body.dic-upgraded{ --ash:#8b867d; }
body.dic-upgraded .sale-fine, body.dic-upgraded .sc-note, body.dic-upgraded .sg-note{ color:rgb(242 237 225 / .66) !important; }
body.dic-upgraded #buy .sale-fine, body.dic-upgraded #buy .promise p{ text-shadow:0 1px 3px rgb(0 0 0 / .9), 0 0 14px rgb(0 0 0 / .5); }

/* RANK 7 — cursor affordance fallback (the global cursor:none is now class-gated in
   HTML so a script failure can't strand a mouse user; native defaults restore pointer/
   text when the flame is off; this only adds the non-default disabled affordance). */
body.dic-upgraded :disabled, body.dic-upgraded [aria-disabled="true"]{ cursor:not-allowed; }

/* RANK 8 — section ledes carry the ferryman voice into the body (Proof / Ledger) */
body.dic-upgraded .dic-lede{ max-width:560px; margin:-10px 0 16px; font-family:var(--body); font-size:14.5px; line-height:1.62; color:rgb(242 237 225 / .74); }

/* ============================================================================
   P1 PASS — mobile grids, footer crescendo, count-up bloom, enomics bar polish.
   ==========================================================================*/
/* RANK 17 — mobile grid fixes (Proof orphan, holder-map reflow, enomics tiles, safe-area) */
@media (max-width:480px){ body.dic-upgraded .badges{ grid-template-columns:1fr; } }
@media (max-width:560px){
  body.dic-upgraded #ledger .holders .h-row,
  body.dic-upgraded #ledger .holders .h-head{ grid-template-columns:30px 1fr 52px; gap:9px; }
  body.dic-upgraded #ledger .holders .h-bar{ grid-column:1 / -1; margin-top:7px; }
  body.dic-upgraded #ledger .holders .h-head .hh-l{ grid-column:1 / 3; }
  body.dic-upgraded #ledger .holders .h-head .hh-r{ grid-column:3; }
}
@media (max-width:460px){
  body.dic-upgraded #death-economics .de-stats{ grid-template-columns:1fr; }
  body.dic-upgraded #death-economics .de-stat .v{ font-size:34px !important; }
}

/* RANK 14-lite — beef the Death-enomics split bars so the brand reads (no grid restructure) */
body.dic-upgraded #death-economics .alloc .bar{ height:22px !important; border-radius:6px; }
body.dic-upgraded #death-economics .alloc .lab{ font-size:19px !important; margin-bottom:8px; }

/* RANK 13 — one-shot bloom when the +66.6% finishes counting */
body.dic-upgraded #death-economics .bignum.lit{ animation:dic-numlit .9s ease; }
@keyframes dic-numlit{ 0%{ text-shadow:0 0 40px rgb(166 242 58 / .12); } 42%{ text-shadow:0 0 54px rgb(166 242 58 / .6), 0 0 16px rgb(166 242 58 / .5); } 100%{ text-shadow:0 0 40px rgb(166 242 58 / .12); } }
@media (prefers-reduced-motion:reduce){ body.dic-upgraded #death-economics .bignum.lit{ animation:none; } }

/* RANK 9 — footer as a deliberate closing crescendo (re-entry CTA + bigger brand + sign-off) */
body.dic-upgraded footer{ padding:clamp(80px,12vh,140px) 0 calc(44px + env(safe-area-inset-bottom)) !important; }
body.dic-upgraded footer .f-cta{ display:flex; flex-direction:column; align-items:center; gap:18px; margin-bottom:42px; position:relative; z-index:1; }
body.dic-upgraded footer .f-cta-line{ font-family:var(--display); text-transform:uppercase; letter-spacing:1px; font-size:clamp(30px,5.5vw,62px); line-height:1; color:var(--bone); text-shadow:0 0 30px rgb(166 242 58 / .25); margin:0; }
body.dic-upgraded footer .f-cta a.btn.go{
  font-family:var(--display); text-transform:uppercase; letter-spacing:2px; font-size:16px; padding:15px 34px;
  border:2px solid transparent; cursor:pointer; position:relative; transition:.16s;
  background:linear-gradient(135deg, var(--toxic), #d6ff7a) !important; color:var(--ink) !important;
  box-shadow:0 0 30px -6px rgb(166 242 58 / .55);
}
body.dic-upgraded footer .f-cta a.btn.go:hover{ transform:translateY(-2px); box-shadow:0 8px 30px -8px rgb(166 242 58 / .7); }
body.dic-upgraded footer .tagstrip{ font-size:clamp(28px,5vw,54px) !important; text-shadow:0 0 30px rgb(166 242 58 / .35); position:relative; z-index:1; }
body.dic-upgraded footer .f-signoff{ font-family:var(--hand); color:rgb(242 237 225 / .6); font-size:clamp(16px,2.4vw,22px); transform:rotate(-1deg); margin-top:16px; position:relative; z-index:1; }

/* ============================================================================
   P1b — copy-flash + SR confirm, honest empty states, scroll-spy + folios.
   ==========================================================================*/
.sr-only{ position:absolute; width:1px; height:1px; padding:0; margin:-1px; overflow:hidden; clip:rect(0 0 0 0); clip-path:inset(50%); white-space:nowrap; border:0; }
/* RANK 15 — the anti-scam COPY action gets a real confirmation flash */
body.dic-upgraded .copy.ok{ background:rgb(166 242 58 / .92) !important; color:#0a0a0a !important; border-color:#a6f23a !important; animation:dic-copyflash .55s ease; }
@keyframes dic-copyflash{ 0%{ box-shadow:0 0 0 0 rgb(166 242 58 / .55); } 100%{ box-shadow:0 0 0 13px rgb(166 242 58 / 0); } }
@media(prefers-reduced-motion:reduce){ body.dic-upgraded .copy.ok{ animation:none; } }
/* RANK 16 — honest pre-launch empty state: copy buttons read disabled until addrs land */
body.dic-upgraded .addr[data-addr=""] .copy{ opacity:.4; border-color:transparent !important; cursor:not-allowed; pointer-events:none; }
/* RANK 19 — scroll-spy active >= hover + bolder 01-05 section folios */
body.dic-upgraded nav .links a[aria-current="true"]::after{ width:100%; box-shadow:0 0 8px var(--toxic); }
@media(max-width:780px){ body.dic-upgraded nav .links a[aria-current="true"]{ border-left:2px solid var(--toxic); padding-left:14px; } }
body.dic-upgraded .shead .n{ font-size:clamp(26px,3vw,42px) !important; color:var(--toxic); text-shadow:0 0 16px rgb(166 242 58 / .35); }

/* RANK 18 — the swap card pulses the instant the travelling skull docks under the sign */
body.dic-upgraded #dsCard.dic-docked{ animation:dic-dockpulse .72s cubic-bezier(.2,.8,.3,1); }
@keyframes dic-dockpulse{
  0%{ box-shadow:0 0 0 0 rgb(166 242 58 / 0); }
  24%{ box-shadow:0 18px 50px -24px rgb(0 0 0 / .8), 0 0 42px -6px rgb(166 242 58 / .55); transform:scale(1.012); }
  100%{ box-shadow:0 0 0 0 rgb(166 242 58 / 0); transform:scale(1); }
}
@media(prefers-reduced-motion:reduce){ body.dic-upgraded #dsCard.dic-docked{ animation:none; } }

/* RANK 20 — back-to-top button REMOVED (collided with the bottom-left summoned soul). */

/* RANK 10 reverted — the editorial 2-col split the Death Swap left/right and broke
   the site's centred vertical flow (every other section runs down the middle). The
   swap stays centred: heading + tagline + lede stacked, card below, skull docks centre. */

/* ============================================================================
   LOSE THE CARDS — extend the borderless / fire-forward treatment to the remaining
   DECORATIVE content cards: the Death-Sale PROMISES and the Ledger INFO panels.
   Icons + (now-condensed) copy + numbers sit straight on the fire, legible via
   glyph-halos. Functional forms (swap widget, deposit/claim altar, countdown gate-
   board) keep their light container — people type + click there.
   ==========================================================================*/
body.dic-upgraded #buy .promise,
body.dic-upgraded #ledger .card{
  background:none !important; border:0 !important; border-radius:0 !important;
  box-shadow:none !important; -webkit-backdrop-filter:none !important; backdrop-filter:none !important;
}
body.dic-upgraded #buy .promise:hover,
body.dic-upgraded #ledger .card:hover,
body.dic-upgraded #ledger .card.soulskull{ transform:none !important; box-shadow:none !important; border:0 !important; }
body.dic-upgraded #buy .promise::after{ display:none !important; }   /* drop the corner watermark with the card */
/* halos so the on-fire copy + numbers stay legible without a panel behind them */
body.dic-upgraded #buy .promise h3,
body.dic-upgraded #ledger .ct,
body.dic-upgraded #ledger .soulcount small,
body.dic-upgraded #ledger .h-head{ text-shadow:0 1px 2px rgb(0 0 0 / .92), 0 0 12px rgb(0 0 0 / .7) !important; }
body.dic-upgraded #buy .promise p,
body.dic-upgraded #ledger .note,
body.dic-upgraded #ledger .holders .w,
body.dic-upgraded #ledger .holders .tag{ text-shadow:0 1px 2px rgb(0 0 0 / .9), 0 0 10px rgb(0 0 0 / .6) !important; }

/* ---- FUNCTIONAL FORMS go fire-forward too — the OUTER container drops near-
   transparent (a faint tint + blur so the fire ghosts through and the busy flame
   doesn't fight the controls), the corner brackets frame it, and the input fields
   + buttons keep their own backing so the swap / deposit stay readable + usable. */
body.dic-upgraded #swap .ds-card{
  background:rgb(8 9 6 / .3) !important; border-color:rgba(var(--acc-rgb),.16) !important;
  box-shadow:none !important; -webkit-backdrop-filter:blur(3px); backdrop-filter:blur(3px);
}
body.dic-upgraded #swap .ds-leg{ background:rgb(8 9 7 / .82) !important; }   /* input rows stay readable */
body.dic-upgraded #buy .sale-deposit,
body.dic-upgraded #buy .sale-claim{
  background:rgb(8 7 5 / .3) !important; box-shadow:none !important;
  -webkit-backdrop-filter:blur(3px); backdrop-filter:blur(3px);
}
body.dic-upgraded #buy .gate-board{
  background:rgb(8 7 5 / .3) !important; box-shadow:none !important;
  -webkit-backdrop-filter:blur(3px); backdrop-filter:blur(3px);
}

/* ---- MENU + the last Swap/Sale sub-panels go fire-forward ---- */
/* main menu: a soft TOP-SCRIM that fades down, not a hard dark bar (no bottom edge,
   no frosted band); links get halos so they stay legible over the fire. */
body.dic-upgraded nav{
  background:linear-gradient(180deg, rgb(8 8 8 / .72) 0%, rgb(8 8 8 / .34) 58%, transparent 100%) !important;
  border-bottom:0 !important;
  -webkit-backdrop-filter:none !important; backdrop-filter:none !important;
}
body.dic-upgraded nav .links a,
body.dic-upgraded nav .brand{ text-shadow:0 1px 3px rgb(0 0 0 / .9), 0 0 10px rgb(0 0 0 / .55); }
/* DEATH SWAP — the Ferryman's Toll row */
body.dic-upgraded #swap .ds-toll{ background:rgb(8 9 6 / .34) !important; border-color:rgba(var(--acc-rgb),.2) !important; box-shadow:none !important; }
/* DEATH SALE — the Death Sign verifier + the token split strip */
body.dic-upgraded #buy .sale-verify{ background:rgb(8 7 5 / .3) !important; border-color:rgba(var(--sacc-rgb),.22) !important; box-shadow:none !important; -webkit-backdrop-filter:blur(3px); backdrop-filter:blur(3px); }
body.dic-upgraded #buy .sale-split{ background:none !important; border:0 !important; box-shadow:none !important; }
/* DEATH SALE — the phase message ("THE GATES ARE SEALED" etc.) goes borderless on the fire */
body.dic-upgraded #buy .sale-msg{ background:none !important; border:0 !important; box-shadow:none !important; -webkit-backdrop-filter:none !important; backdrop-filter:none !important; }
body.dic-upgraded #buy .sale-msg h4{ text-shadow:var(--dic-glyph-halo) !important; }
body.dic-upgraded #buy .sale-msg p{ text-shadow:var(--dic-glyph-halo) !important; }
/* No backing under the sealed phase message + the split stats: kill the injected smoke cloud
   (the soft dark "card" you saw) and the stats fill, and let the title's glyph-halo carry the
   text the same way the title does. The interactive deposit/claim/swap panels KEEP their smoke
   (legibility under the live amount inputs + buttons). */
body.dic-upgraded #buy .sale-msg > .dic-smoke-fx,
body.dic-upgraded #buy .gate-board > .dic-smoke-fx{ display:none !important; }
body.dic-upgraded #buy .sale-split .ss{ border-right:0 !important; }
body.dic-upgraded #buy .sale-split .ss b,
body.dic-upgraded #buy .sale-split .ss span{ text-shadow:var(--dic-glyph-halo) !important; }

/* ============================================================================
   THE SMOKE BACKING — the card replacement. A soft, organic, EDGELESS dark-smoke
   cloud: layered radial gradients that fade to TRANSPARENT before the element's
   rectangle, so no box edge / corner ever shows — it reads as a wisp of black
   smoke holding the text, not a card. Darkens the area just enough to lay copy on
   top. Reusable via .dic-smoke; here applied to the Death-Sale groupings.
   ==========================================================================*/
/* the card-like groups go fully transparent; a LIVING smoke layer is injected behind */
body.dic-upgraded #swap .ds-card,
body.dic-upgraded #buy .sale-deposit,
body.dic-upgraded #buy .sale-claim,
body.dic-upgraded #buy .gate-board,
body.dic-upgraded #buy .sale-msg,
body.dic-upgraded #buy .sale-verify{
  background:none !important; border:0 !important; box-shadow:none !important; border-radius:0 !important;
  -webkit-backdrop-filter:none !important; backdrop-filter:none !important;
}
/* ditch the swap's corner brackets + gradient border + the deposit brackets */
body.dic-upgraded #swap .ds-card .ds-cnr,
body.dic-upgraded #swap .ds-card::before,
body.dic-upgraded #buy .sale-deposit::before, body.dic-upgraded #buy .sale-deposit::after,
body.dic-upgraded #buy .sale-claim::before,   body.dic-upgraded #buy .sale-claim::after{ display:none !important; }
/* the LIVING-smoke layer — injected as the first child of each smoke target. Two
   counter-drifting GPU-composited layers of dark radial smoke that billow behind the
   content; z-index:-1 within an isolated context, radials fade out before the edges
   so it stays edgeless.
   ⚠ MONEY-CRITICAL: this span is injected INSIDE the swap card + Death-Sale deposit/
   claim/verify panels (the elements carrying the amount inputs and the "offer/claim"
   buttons). z-index:-1 and pointer-events:none are PINNED with !important so no later
   rule can ever float the smoke in front of those controls and swallow a real click.
   Do not relax these two declarations. */
.dic-smoke-fx{ position:absolute; inset:0; z-index:-1 !important; overflow:hidden; pointer-events:none !important; }
.dic-smoke-fx::before, .dic-smoke-fx::after{
  content:""; position:absolute; inset:-14%; will-change:transform;
  background:
    radial-gradient(38% 42% at 30% 32%, rgb(6 8 5 / .82), transparent 60%),
    radial-gradient(42% 46% at 72% 42%, rgb(3 5 3 / .74), transparent 62%),
    radial-gradient(48% 54% at 44% 72%, rgb(4 6 3 / .70), transparent 64%),
    radial-gradient(64% 60% at 58% 54%, rgb(3 5 3 / .52), transparent 70%);
}
.dic-smoke-fx::before{ animation:dic-smoke1 24s ease-in-out infinite; }
.dic-smoke-fx::after{ animation:dic-smoke2 31s ease-in-out infinite; opacity:.72; }
@keyframes dic-smoke1{ 0%,100%{ transform:translate3d(-4%,2%,0) scale(1.06) rotate(-2deg); } 50%{ transform:translate3d(5%,-3%,0) scale(1.17) rotate(2deg); } }
@keyframes dic-smoke2{ 0%,100%{ transform:translate3d(4%,-2%,0) scale(1.13) rotate(2deg); } 50%{ transform:translate3d(-5%,3%,0) scale(1.03) rotate(-2deg); } }
@media(prefers-reduced-motion:reduce){ .dic-smoke-fx::before,.dic-smoke-fx::after{ animation:none; } }
/* reusable STATIC variant for any CSS-only grouping */
.dic-smoke{ background:radial-gradient(62% 60% at 50% 50%, rgb(5 7 4 / .72), transparent 72%) !important; border:0 !important; box-shadow:none !important; }
/* MENU fully transparent now — just the logo + halo'd links over the fire, no bar */
/* MENU — transparent (no bar) + AUTO-HIDE: it slides away when you scroll DOWN (so
   nothing collides with the links while reading) and slides back when you scroll UP
   to navigate. A light feathered smoke-fade rides with it for legibility when it IS
   shown over content (it hides with the nav, so it never reads as a standalone bar). */
body.dic-upgraded nav{ background:none !important; transition:transform .35s cubic-bezier(.4,0,.2,1); will-change:transform; }
body.dic-upgraded nav.dic-nav-hidden{ transform:translateY(-120%); pointer-events:none; }
body.dic-upgraded nav::before{
  content:""; position:absolute; left:0; right:0; top:0; height:205%; z-index:-1; pointer-events:none;
  background:linear-gradient(180deg, rgb(6 7 5 / .82) 0%, rgb(6 7 5 / .46) 44%, rgb(6 7 5 / .14) 76%, transparent 100%);
  -webkit-mask:linear-gradient(90deg, transparent, #000 9%, #000 91%, transparent);
          mask:linear-gradient(90deg, transparent, #000 9%, #000 91%, transparent);
}

/* ============================================================================
   DEATH-SWAP · LIVING-SMOKE POCKETS  (fluid / edgeless input rows)
   Appended at the END of dic-upgrade.css so it wins the cascade over the
   .ds-leg refill at line 574 and the inline box at index.html:709.
   CSS-ONLY. No JS hooks, money logic, markup, or canvas touched.
   Scoped to body.dic-upgraded #swap. Reuses the shipped dic-smoke1/dic-smoke2
   keyframes (dic-upgrade.css:642-643) so each row breathes like the card smoke.
   ============================================================================ */

/* 1 — DE-BOX THE ROWS.
   Kill the inline 1px #21241c border + radius (index.html:709), the focus ring
   (710-711), AND the .82 dark fill forced at dic-upgrade.css:574 (needs the
   !important to beat it). The geometry stays a normal rectangular padding box
   (so the amount field can NEVER clip) — the NON-rectangular, organic silhouette
   is carried entirely by the masked smoke pseudo-elements below. */
body.dic-upgraded #swap .ds-leg{
  background:transparent !important;
  border:0 !important;
  border-radius:0 !important;
  box-shadow:none !important;
  position:relative;
  isolation:isolate;          /* own stacking context: smoke sits behind content, above card smoke */
  z-index:1;
  padding:14px 15px !important;
  transition:transform .3s ease, filter .3s ease;
}
/* the per-bank shoreline radii (index.html:741-742) are dead box corners now */
body.dic-upgraded #swap .ds-leg[data-bank="pay"],
body.dic-upgraded #swap .ds-leg[data-bank="receive"]{
  border-radius:0 !important;
}

/* 2 — THE SMOKE POCKET (::before): the SAME four-stop dark-radial recipe as
   .dic-smoke-fx (dic-upgrade.css:635-638) plus a faint toxic underglow, drifting
   on the shipped dic-smoke1 keyframe. An organic asymmetric border-radius + a
   matching radial MASK clip it into a soft cloud that fades to transparent well
   inside every edge — no rectangle or corner ever resolves. Sits UNDER content. */
body.dic-upgraded #swap .ds-leg::before{
  content:"";
  position:absolute;
  inset:-12%;
  z-index:-1;
  pointer-events:none;
  will-change:transform;
  border-radius:46% 54% 56% 44% / 54% 46% 56% 46%;
  background:
    radial-gradient(38% 42% at 30% 32%, rgb(6 8 5 / .86), transparent 60%),
    radial-gradient(42% 46% at 72% 42%, rgb(3 5 3 / .80), transparent 62%),
    radial-gradient(48% 54% at 44% 72%, rgb(4 6 3 / .76), transparent 64%),
    radial-gradient(60% 58% at 56% 52%, rgba(var(--acc-rgb),.05), transparent 66%);
  -webkit-mask:radial-gradient(78% 86% at 50% 50%, #000 50%, transparent 84%);
          mask:radial-gradient(78% 86% at 50% 50%, #000 50%, transparent 84%);
  animation:dic-smoke1 26s ease-in-out infinite;
}
/* 3 — SECOND COUNTER-DRIFT LAYER (::after) on dic-smoke2, opacity-staggered
   exactly like .dic-smoke-fx::after, for the billowing parallax. */
body.dic-upgraded #swap .ds-leg::after{
  content:"";
  position:absolute;
  inset:-12%;
  z-index:-1;
  pointer-events:none;
  opacity:.7;
  will-change:transform;
  border-radius:54% 46% 48% 52% / 46% 54% 46% 54%;
  background:
    radial-gradient(40% 44% at 66% 36%, rgb(5 7 4 / .72), transparent 62%),
    radial-gradient(50% 52% at 38% 64%, rgb(3 5 3 / .68), transparent 64%);
  -webkit-mask:radial-gradient(80% 88% at 50% 50%, #000 46%, transparent 86%);
          mask:radial-gradient(80% 88% at 50% 50%, #000 46%, transparent 86%);
  animation:dic-smoke2 33s ease-in-out infinite;
}

/* 4 — FOCUS / TYPING AFFORDANCE WITHOUT A BORDER.
   Re-kill the inline focus border+shadow (index.html:710-711); the pocket
   instead BRIGHTENS toward toxic-green and lifts a hair — a glow-in-the-smoke,
   not an outline. This is a stronger "this row is active" cue than the old 1px. */
body.dic-upgraded #swap .ds-leg:focus-within{
  border:0 !important;
  box-shadow:none !important;
  transform:scale(1.012);
}
body.dic-upgraded #swap .ds-leg:focus-within::before{
  background:
    radial-gradient(40% 44% at 32% 34%, rgb(8 11 6 / .9), transparent 60%),
    radial-gradient(44% 48% at 70% 44%, rgb(4 7 4 / .84), transparent 62%),
    radial-gradient(50% 56% at 46% 70%, rgb(5 8 4 / .80), transparent 64%),
    radial-gradient(72% 66% at 54% 50%, rgba(var(--acc-rgb),.16), transparent 70%);
  filter:drop-shadow(0 0 16px rgba(var(--acc-rgb),.34));
}
/* gilded (blessed) parity with the existing gold focus treatment */
body.dic-upgraded #swap .ds.blessed .ds-leg:focus-within::before{
  filter:drop-shadow(0 0 16px rgb(255 206 92 / .4));
}

/* 5 — THE RIVER GUTTER.
   Drop the framed inset-shadow "banks" + radius (index.html:727-728) so the Styx
   window becomes an edgeless smoke gap between the two pockets. A vertical mask
   feathers the top+bottom into the legs so the boat sits in a continuous flow.
   Canvas (#dsSouls/#dsEkg) + flip button untouched. */
body.dic-upgraded #swap .ds-river{
  box-shadow:none !important;
  background:transparent !important;
  border-radius:0 !important;
}
body.dic-upgraded #swap .ds-river::after{
  content:"";
  position:absolute;
  inset:-14% -6%;
  z-index:0;                  /* below the boat canvas(z-context) + flip(z7); pure backing */
  pointer-events:none;
  opacity:.62;
  will-change:transform;
  border-radius:50% 50% 48% 52% / 60% 60% 40% 40%;
  background:
    radial-gradient(46% 52% at 50% 50%, rgb(4 6 3 / .6), transparent 66%),
    radial-gradient(40% 38% at 30% 60%, rgb(3 5 3 / .48), transparent 64%);
  -webkit-mask:linear-gradient(180deg, transparent 0%, #000 26%, #000 74%, transparent 100%);
          mask:linear-gradient(180deg, transparent 0%, #000 26%, #000 74%, transparent 100%);
  animation:dic-smoke2 29s ease-in-out infinite;
}

/* 6 — KEEP THE CONTROLS CRISP & TAPPABLE.
   The interactive bits become the ONLY hard-edged objects floating in the smoke,
   so the eye always knows where to click/type. No geometry change → zero JS impact. */

/* token pill (#dsFromToken / #dsToToken): firmer edge + a dark "moat" so it reads
   as an unmistakable button on the now-bgless row; hover/focus brighten to --acc. */
body.dic-upgraded #swap .ds-token{
  background:rgba(var(--acc-rgb),.1) !important;
  border-color:rgba(var(--acc-rgb),.34) !important;
  box-shadow:0 0 0 3px rgb(6 8 5 / .55), 0 2px 12px -4px rgb(0 0 0 / .7);
  text-shadow:0 1px 3px rgb(0 0 0 / .8);
}
body.dic-upgraded #swap .ds-token:hover{
  background:rgba(var(--acc-rgb),.16) !important;
  border-color:var(--acc) !important;
}
body.dic-upgraded #swap .ds-token:focus-visible{
  outline:0;
  border-color:var(--acc) !important;
  box-shadow:0 0 0 2px rgba(var(--acc-rgb),.5), 0 0 0 5px rgb(6 8 5 / .55) !important;
}

/* 50% / MAX chips (.ds-mini): faint dark backing so they never wash out in the
   bloom; explicit focus ring keeps them obviously clickable + keyboard-reachable. */
body.dic-upgraded #swap .ds-mini{
  background:rgb(8 11 6 / .5) !important;
  border-color:rgba(var(--acc-rgb),.26) !important;
  text-shadow:0 1px 3px rgb(0 0 0 / .8);
}
body.dic-upgraded #swap .ds-mini:hover,
body.dic-upgraded #swap .ds-mini:focus-visible{
  color:var(--acc) !important;
  border-color:var(--acc) !important;
  outline:0;
  box-shadow:0 0 0 2px rgba(var(--acc-rgb),.3) !important;
}

/* R4 — MONEY-TEXT LEGIBILITY (no boxes). The bright readout numbers (swap in/out,
   countdown digits, the gauge, your allocation/offer) sit directly on the live fire,
   where bright-on-bright drops contrast to ~1:1. Instead of a card we hug each GLYPH:
   a stacked tight→wide dark halo darkens only the fire immediately around the digits
   (a feathered smoke that follows the letterforms, never a rectangle), plus a thin
   behind-the-fill text-stroke (paint-order:stroke fill) to crisp the edges without
   thinning the number. Edgeless, and readable over the brightest flame. */
body.dic-upgraded{
  --dic-glyph-halo:
    0 0 1px #000,
    0 0 3px rgba(0,0,0,.98),
    0 0 7px rgba(0,0,0,.9),
    0 0 13px rgba(0,0,0,.74),
    0 0 22px rgba(0,0,0,.5),
    0 1px 2px rgba(0,0,0,.98);
}
/* (countdown digits are excluded — they sit on the carved dark gate-board slabs at
   dic-upgrade.css:247, already high-contrast; no fire shows through them.) */
body.dic-upgraded #swap .ds-amt,
body.dic-upgraded #swap .ds-amt-out,
body.dic-upgraded #buy .sg-top b,
body.dic-upgraded #buy .sd-get b,
body.dic-upgraded #buy .sd-yours b{
  text-shadow:var(--dic-glyph-halo);
  -webkit-text-stroke:.7px rgba(0,0,0,.45);
  paint-order:stroke fill;
}
body.dic-upgraded #swap .ds-amt,
body.dic-upgraded #swap .ds-amt-out{ transition:text-shadow .25s ease; }
body.dic-upgraded #swap .ds-amt:focus{
  text-shadow:var(--dic-glyph-halo), 0 0 22px rgba(var(--acc-rgb),.5);
}
/* the sale headline is consolidated into its authoritative rule below (dic-upgrade.css:450). */

/* flip medallion (#dsFlip): untouched size + its inset:-7px ≥48px hit-pad (744)
   preserved; only deepen its dark moat + add a focus-visible double ring so it
   pops as the band's focal object. (Native :focus-visible at index.html:77 stays.) */
body.dic-upgraded #swap .ds-flip{
  z-index:7;
}
body.dic-upgraded #swap .ds-flip:focus-visible{
  box-shadow:0 0 0 4px rgb(5 8 5 / .7), 0 0 0 6px rgba(var(--acc-rgb),.5), 0 0 20px rgba(var(--acc-rgb),.4) !important;
}

/* CTA "SUMMON YOUR WALLET" (.ds-action): untouched — it stays the one confident
   solid-green block. (No rule needed.) */

/* 7 — REDUCED MOTION: freeze every drift + the focus lift; the static smoke pocket
   and the focus brightening (a motion-free background swap + drop-shadow) remain,
   so the form is just as edgeless and just as legible, with zero animation.
   (.dic-smoke-fx already self-disables at dic-upgrade.css:644.) */
@media (prefers-reduced-motion:reduce){
  body.dic-upgraded #swap .ds-leg::before,
  body.dic-upgraded #swap .ds-leg::after,
  body.dic-upgraded #swap .ds-river::after{ animation:none !important; }
  body.dic-upgraded #swap .ds-leg{ transition:none !important; }
  body.dic-upgraded #swap .ds-leg:focus-within{ transform:none; }
  body.dic-upgraded #swap .ds-amt,
  body.dic-upgraded #swap .ds-amt-out,
  body.dic-upgraded #swap .ds-amt:focus{ transition:none !important; }
}

/* 8 — COARSE-POINTER / FPS GUARD: drop the 2nd drift layer + the river drift on
   touch to spare the compositor; the pocket, focus glow, and all control
   definition stay, so nothing becomes unreadable or untappable. */
@media (pointer:coarse){
  body.dic-upgraded #swap .ds-leg::after,
  body.dic-upgraded #swap .ds-river::after{ animation:none !important; }
  body.dic-upgraded #swap .ds-leg{ transition:none; }
  body.dic-upgraded #swap .ds-leg:focus-within{ transform:none; }
}

/* 9 — MOBILE: override the re-box at index.html:693
   (.ds-leg{background:..!important;border-color:..!important}) so the row stays
   edgeless on phones too; the smoke pocket + amount text-shadow keep it readable. */
@media(max-width:560px){
  body.dic-upgraded #swap .ds-leg{
    background:transparent !important;
    border-color:transparent !important;
    border:0 !important;
  }
}

/* ============================================================================
   DEATH-SWAP control de-box FIX. The fluid-swap rules wrote rgb(var(--acc-rgb) / .a),
   which is INVALID for the comma-format --acc-rgb (166,242,58) → the browser dropped
   them and .ds-token / .ds-mini / .ds-chip / .ds-toll fell back to their base bone/grey
   1px outlines (the boxes still visible). Re-soften every control with valid rgba() —
   soft glowing pills, no hard outlines — and de-box the Ferryman's Toll entirely.
   ============================================================================ */
body.dic-upgraded #swap .ds-token{
  border:1px solid rgba(var(--acc-rgb),.2) !important;
  background:rgba(8,11,6,.5) !important;
  box-shadow:0 0 16px -7px rgba(0,0,0,.75) !important;
}
body.dic-upgraded #swap .ds-mini,
body.dic-upgraded #swap .ds-chip{
  border:1px solid rgba(var(--acc-rgb),.14) !important;
  background:rgba(8,11,6,.36) !important;
  box-shadow:none !important;
}
body.dic-upgraded #swap .ds-chip.ds-slipchip.on{
  border-color:rgba(var(--acc-rgb),.42) !important; background:rgba(var(--acc-rgb),.09) !important;
}
body.dic-upgraded #swap .ds-token:hover,   body.dic-upgraded #swap .ds-token:focus-visible,
body.dic-upgraded #swap .ds-mini:hover,    body.dic-upgraded #swap .ds-mini:focus-visible,
body.dic-upgraded #swap .ds-chip:hover,    body.dic-upgraded #swap .ds-chip:focus-visible{ border-color:var(--acc) !important; }
/* the Ferryman's Toll row: de-boxed — floats on the card's living smoke */
body.dic-upgraded #swap .ds-toll{ background:transparent !important; border:0 !important; box-shadow:none !important; }
/* slippage popover bits (.ds-seg segment + .ds-cust custom input) — soften their grey edges too */
body.dic-upgraded #swap .ds-seg,
body.dic-upgraded #swap .ds-cust{ border-color:rgba(var(--acc-rgb),.16) !important; }

/* ============================================================================
   DEATH-SALE de-box round 2 — the inner pieces the container de-box missed, plus
   making every smoke pocket truly edgeless (it was reading as a soft rectangle).
   ============================================================================ */
/* countdown digit slabs (.sc-clock span) → floating D/H/M/S digits, no carved boxes */
body.dic-upgraded #buy .gate-board .sc-clock span{ background:transparent !important; border:0 !important; box-shadow:none !important; }
/* token split → no panel fill, no column dividers; the % stats just float on the fire */
body.dic-upgraded #buy .sale-split{ background:transparent !important; border:0 !important; }
body.dic-upgraded #buy .sale-split .ss{ border-right:0 !important; }
/* EVERY living-smoke pocket gets masked to a soft oval so it fades to nothing at the
   corners/edges — kills the residual rectangle on the gates message + the forms. */
.dic-smoke-fx{
  -webkit-mask:radial-gradient(78% 84% at 50% 48%, #000 26%, transparent 82%) !important;
          mask:radial-gradient(78% 84% at 50% 48%, #000 26%, transparent 82%) !important;
}

/* ============================================================================
   WHOLE-SITE de-box sweep — the last bordered inner elements (Ledger copy rows +
   chart, Death-enomics bars + journey divider, swap slippage-popover bits).
   ============================================================================ */
/* Ledger contract/wallet copy rows → edgeless soft field (the COPY button is the control) */
body.dic-upgraded #ledger .addr{ border:0 !important; background:rgba(8,11,7,.42) !important; border-radius:10px !important; }
/* Ledger live chart → drop the wireframe border; the EKG floats on the card smoke */
body.dic-upgraded #ledger #chart{ border:0 !important; }
/* Death-enomics allocation bars → soften the track outline so the fills float */
body.dic-upgraded #death-economics .alloc .bar{ border-color:rgba(166,242,58,.1) !important; }
body.dic-upgraded #death-economics .de-journey{ border-top-color:rgba(166,242,58,.12) !important; }
/* swap slippage-popover bits (only seen when the popover opens) → soften */
body.dic-upgraded #swap .ds-knob,
body.dic-upgraded #swap .ds-seg,
body.dic-upgraded #swap .ds-cust,
body.dic-upgraded #swap .ds-pop-note{ border-color:rgba(var(--acc-rgb),.16) !important; }
/* fully clear the last visible thin-borders (bars + journey divider); popover bits stay soft (hidden until opened) */
body.dic-upgraded #death-economics .alloc .bar{ border:0 !important; }
body.dic-upgraded #death-economics .de-journey{ border-top:0 !important; }

/* ============================================================================
   SWAP — kill the two dark REGIONS that read as boxes: the boat-band rectangle
   (.ds-river::after, vertical-masked = hard L/R edges) and the tall card-smoke
   layer. The controls float on the dim plasma; the per-row input pockets stay
   (fainter) for legibility, and labels get halos. No dark rectangle remains.
   ============================================================================ */
body.dic-upgraded #swap .ds-river::after{ display:none !important; }
body.dic-upgraded #swap .ds-card > .dic-smoke-fx{ display:none !important; }
body.dic-upgraded #swap .ds-leg::before{ opacity:.6 !important; }
body.dic-upgraded #swap .ds-leg::after{ opacity:.4 !important; }
/* legibility for the now-floating labels/amounts over the dim plasma */
body.dic-upgraded #swap .ds-leg-top,
body.dic-upgraded #swap .ds-tagline,
body.dic-upgraded #swap .ds-foot,
body.dic-upgraded #swap .ds-toll{ text-shadow:0 1px 3px rgb(0 0 0 / .88), 0 0 10px rgb(0 0 0 / .6); }

/* ============================================================================
   SITE-WIDE DE-BOX (final mop-up) — the last surfaces the sweep never reached.
   Same approach as the sealed Death-Sale screen: the PANEL goes (fill/border/
   radius/shadow), the copy wears the title --dic-glyph-halo. #quiz is hidden until
   played + carries no money. .sale-gauge is a raise INSTRUMENT (active states only)
   — its bar (.sg-bar/.sg-fill/.sg-floor) is DATA and is preserved.
   ============================================================================ */
/* QUIZ — display cards fully boxless + haloed */
body.dic-upgraded #quiz .quiz-card,
body.dic-upgraded #quiz .quiz-result{
  background:none !important; border:0 !important; border-radius:0 !important;
  box-shadow:none !important; -webkit-backdrop-filter:none !important; backdrop-filter:none !important;
}
body.dic-upgraded #quiz .quiz-prog,
body.dic-upgraded #quiz .quiz-q,
body.dic-upgraded #quiz .qr-label,
body.dic-upgraded #quiz .qr-arche,
body.dic-upgraded #quiz .qr-cause,
body.dic-upgraded #quiz .qr-line,
body.dic-upgraded #quiz .qr-verdict{ text-shadow:var(--dic-glyph-halo) !important; }
/* QUIZ answer rows keep an obvious tappable affordance (toxic hairline + faint moat) */
body.dic-upgraded #quiz .quiz-a{
  background:rgb(8 11 7 / .55) !important; border:1px solid rgb(166 242 58 / .22) !important;
  border-radius:8px !important; box-shadow:none !important; text-shadow:0 1px 3px rgb(0 0 0 / .8) !important;
}
body.dic-upgraded #quiz .quiz-a:hover,
body.dic-upgraded #quiz .quiz-a:focus-visible{ border-color:#a6f23a !important; background:rgb(166 242 58 / .1) !important; }
body.dic-upgraded #quiz .qr-alt{ text-shadow:0 1px 3px rgb(0 0 0 / .85) !important; }
/* SALE GAUGE — de-box the instrument panel, keep the bar (data) + halo the readouts */
body.dic-upgraded #buy .sale-gauge{
  background:none !important; border:0 !important; box-shadow:none !important;
  -webkit-backdrop-filter:none !important; backdrop-filter:none !important;
}
body.dic-upgraded #buy .sale-gauge .sg-top b,
body.dic-upgraded #buy .sale-gauge .sg-top i,
body.dic-upgraded #buy .sale-gauge .sg-note{ text-shadow:var(--dic-glyph-halo) !important; }

/* Center the "02 · The Death Sale" section heading — it was left-aligned (text-align:start in a
   full-width flex row) while the rest of the sealed Death-Sale screen is centered. */
body.dic-upgraded #buy .shead{ justify-content:center !important; text-align:center !important; }

/* ============================================================================
   TIGHTEN THE DEATH SWAP — trim the vertical air so it fits the screen with less
   scroll (first pass; the river HEIGHT is left alone since it drives the ferryman
   canvas geometry). Conservative; verify on a real screen + dial from there.
   ============================================================================ */
body.dic-upgraded #swap{ padding-top:12px !important; padding-bottom:44px !important; }
body.dic-upgraded #swap .ds-tagline{ margin-top:6px !important; margin-bottom:4px !important; }
body.dic-upgraded #swap .ds-lede{ margin-bottom:16px !important; }
body.dic-upgraded #swap .ds-leg{ padding-top:11px !important; padding-bottom:11px !important; }
body.dic-upgraded #swap .ds-river{ margin:3px 0 !important; }
body.dic-upgraded #swap .ds-slide{ margin-top:12px !important; }
body.dic-upgraded #swap .ds-statusline{ margin-top:7px !important; }
body.dic-upgraded #swap .ds-toll{ margin-top:10px !important; }
body.dic-upgraded #swap .ds-trust{ margin-top:7px !important; }

/* ===== TEXT-BACKING SWEEP — full-site legibility pass (v=49) ===== */
body.dic-upgraded{
--dic-glyph-halo-strong:0 0 1px #000,0 0 4px rgba(0,0,0,.98),0 0 9px rgba(0,0,0,.86),0 0 16px rgba(0,0,0,.56),0 0 26px rgba(0,0,0,.3),0 2px 3px rgba(0,0,0,.95);
nav .links a,nav .brand,nav .navtog{text-shadow:var(--dic-glyph-halo)!important}
.hero .tick{text-shadow:var(--dic-glyph-halo-strong)!important;filter:drop-shadow(0 0 2px #000) drop-shadow(0 0 5px rgba(0,0,0,.9)) drop-shadow(0 1px 2px rgba(0,0,0,.95))}
.hero p.lede b,.hero .ctas a.btn:not(.go){text-shadow:var(--dic-glyph-halo)!important}
#swap .ds-glitch{filter:drop-shadow(0 0 2px #000) drop-shadow(0 0 6px rgba(0,0,0,.92)) drop-shadow(0 0 14px rgba(0,0,0,.7)) drop-shadow(0 1px 2px rgba(0,0,0,.95))!important}
#swap .ds-tagline{text-shadow:none!important;filter:drop-shadow(0 0 2px #000) drop-shadow(0 1px 2px rgba(0,0,0,.9))!important}
#swap .shead .n,#proof .shead .n,#ledger .shead .n,#death-economics .shead .n{text-shadow:var(--dic-glyph-halo),0 0 16px rgb(166 242 58 / .35)!important}
#buy .shead h2,#proof .shead h2,#ledger .shead h2,#death-economics .shead h2{text-shadow:var(--dic-glyph-halo-strong)!important}
#buy .shead .n{text-shadow:var(--dic-glyph-halo),0 0 14px rgba(var(--sacc-rgb),.5)!important}
#ledger .holders .h-row .p{text-shadow:var(--dic-glyph-halo),0 0 12px rgb(166 242 58 / .4)!important}
#death-economics .bignum{filter:drop-shadow(0 1px 2px rgba(0,0,0,.98)) drop-shadow(0 0 10px rgba(0,0,0,.92)) drop-shadow(0 0 26px rgba(0,0,0,.6))!important}
#death-economics .de-stat .v.t{text-shadow:var(--dic-glyph-halo),0 0 16px rgba(166,242,58,.3)!important}
#swap .ds-lede,#swap .ds-leg-top,#swap .ds-leg-bot,#swap .ds-trust,#swap .ds-toll-t,#swap .ds-toll-d,#swap .ds-toll-amt,#swap .ds-foot,#swap .ds-statusline,#swap .ds-summary,#swap .ds-mini,#swap .ds-chip,#swap .ds-slide-label,#swap .ds-seg button,#swap .ds-rites-top,#swap .ds-rites-l,#swap .ds-pop-note,#swap .ds-ferry-l,#buy .sale-eyebrow,#buy .promise h3,#buy .promise p,#buy .promise p b,#buy .sale-fine a,#proof .dic-lede,#proof .badge .t,#proof .badge .s,#ledger .dic-lede,#ledger .card .ct,#ledger .soulcount small,#ledger .h-head,#ledger .note,#ledger .holders .h-row .w,#ledger .holders .h-row .tag,#ledger .addr,#ledger .card>p,#death-economics .bignum small,#death-economics .de-cap,#death-economics .alloc .lab,#death-economics .alloc .lab .pct,#death-economics .alloc .lab em,#death-economics .de-stat .v,#death-economics .de-stat .k,#death-economics .dj,#death-economics .dj b,#death-economics .de-nblk .facts li,#death-economics .de-act,#death-economics .de-pid,#death-economics .de-foot,footer .fs a,footer .mm,footer .f-signoff,footer .dis{text-shadow:var(--dic-glyph-halo)!important}
footer .f-cta-line{text-shadow:var(--dic-glyph-halo-strong),0 0 30px rgb(166 242 58 / .25)!important}
footer .tagstrip{text-shadow:var(--dic-glyph-halo-strong),0 0 30px rgb(166 242 58 / .35)!important}
}/* ===== TEXT-BACKING SWEEP — patch (v=50): ledger CA/wallet labels, COPY buttons, ghost CTAs ===== */
body.dic-upgraded #ledger .copy,
body.dic-upgraded #ledger .card div:has(+ .addr){ text-shadow:var(--dic-glyph-halo)!important }
/* ===== CONTRAST FIX (v=51) — the dark glyph-halo is the WRONG tool on BRIGHT surfaces ===== */
/* (1) Solid bright-green CTAs (BUY $DIC, SUMMON, OFFER YOUR SOUL) + the swap summon slide + the active
   gold toll chip carry their own contrast (dark text on bright fill); the black halo only muddied them.
   Strip it. The halo STAYS on ghost/outline buttons that sit over the dark fire. */
body.dic-upgraded .btn.go,
body.dic-upgraded #swap .ds-slide-label,
body.dic-upgraded #swap .ds-seg button.on{ text-shadow:none !important; }
/* (2) Death Sale copy sits over the BRIGHT gold fire pit — the wide 6-layer halo reads as a smudge and
   the mid-grey ink washes out. Use a TIGHT crisp halo (thin dark outline, no wide smear) + brighter ink
   so it pops on gold AND stays readable when the flame drops dark. */
body.dic-upgraded{ --dic-glyph-halo-tight:0 0 1px #000,0 0 2px rgba(0,0,0,.98),0 1px 2px rgba(0,0,0,.96),0 0 5px rgba(0,0,0,.66); }
body.dic-upgraded #buy .promise h3,
body.dic-upgraded #buy .sale-msg h4,
body.dic-upgraded #buy .sale-split .ss span,
body.dic-upgraded #buy .sale-eyebrow{ text-shadow:var(--dic-glyph-halo-tight) !important; }
body.dic-upgraded #buy .promise p,
body.dic-upgraded #buy .sale-msg p,
body.dic-upgraded #buy .sale-fine{ color:#dad5c9 !important; text-shadow:var(--dic-glyph-halo-tight) !important; }
/* ===== THE DEATH-SALE BOX (v=52) — .sale-split carries backdrop-filter:blur(5px) saturate(1.12) +
   14px radius. Invisible on the dark bg, but against the raised bright fire it reads as a hard frosted
   rounded rectangle. Kill the blur so the stats float on the fire like everything else (their numbers
   are bold + the labels now carry the tight halo, so they stay legible without the frosted pane). ===== */
body.dic-upgraded #buy .sale-split{ -webkit-backdrop-filter:none !important; backdrop-filter:none !important; border-radius:0 !important; }
/* ===== TEXT POP + HOVER DE-BOX (v=53) ===== */
/* (1) Stronger, still box-free backing over the bright fire: denser TIGHT halo (solid dark casing at
   1-3px, no wide wash) + brighter ink so the sale copy actually pops. */
body.dic-upgraded{ --dic-glyph-halo-tight:0 0 1px #000,0 0 2px #000,0 0 3px rgba(0,0,0,.95),0 1px 1px #000,0 0 6px rgba(0,0,0,.82),0 0 11px rgba(0,0,0,.5); }
body.dic-upgraded #buy .promise p,
body.dic-upgraded #buy .sale-msg p,
body.dic-upgraded #buy .sale-fine{ color:#e8e3d7 !important; }
body.dic-upgraded #buy .sale-split .ss span,
body.dic-upgraded #buy .sale-eyebrow{ color:#d2ccbe !important; }
/* (2) Hover must NOT re-box the de-boxed informational cards. The "clear cutout that pops on hover" is
   #buy .card:hover adding a green border + shadow; neutralize it on promise / sealed msg / stats so
   nothing frames on hover (the real money cards keep their intentional frame). */
body.dic-upgraded #buy .promise:hover,
body.dic-upgraded #buy .sale-msg:hover,
body.dic-upgraded #buy .sale-split:hover{ border-color:transparent !important; box-shadow:none !important; -webkit-backdrop-filter:none !important; backdrop-filter:none !important; transform:none !important; }

/* ============================================================================
   STRAY HARD-LINE + HOVER-OUTLINE SWEEP (2026-06-22)
   The fire-forward layer already de-boxes every major panel; these are the few
   genuinely-rendered hard rules / hover outlines that slipped through. Goal:
   kill the lines, let non-interactive labels float, keep real affordances.
   ==========================================================================*/
/* top ticker: drop the hard L-R rule; a feathered ember hairline separates instead */
body.dic-upgraded .marquee{ border-bottom:0 !important; }
body.dic-upgraded .marquee::after{
  content:""; position:absolute; left:0; right:0; bottom:0; height:1px; pointer-events:none;
  background:linear-gradient(90deg, transparent, rgb(166 242 58 / .16), transparent);
}
/* wallet-picker rows: hover must not light an outline — brighten the fill, keep the nudge */
body.dic-upgraded .ds-wrow:hover{ border-color:#1c1e17 !important; background:rgba(var(--acc-rgb), .1) !important; }
/* death-economics phase labels: float the text off its pill (non-interactive labels) */
body.dic-upgraded #death-economics .de-act{ border:0 !important; background:none !important; padding:5px 3px !important; }
/* AUDIO REMOVED 2026-06-22 — sound is disabled (ARCADE ac()=>null); hide the now-pointless sound toggle. */
body.dic-upgraded .sndtog{ display:none !important; }

/* ============================================================================
   LIVING-FIRE SWAP NUMBERS (2026-06-22)
   The amounts are the heart of the crossing. Typed SOL + computed $DIC become
   living fire: flame-fill glyphs (a mirror span carries the typed value, since
   wallet webviews won't background-clip a raw <input>), the existing count-up
   gets a bloom, and keystrokes throw embers (desktop). @supports-gated so a
   digit is NEVER invisible; the dark glyph-halo + .7px stroke (dic-upgrade.css
   :848) stay on for legibility over the fire.
   ==========================================================================*/
body.dic-upgraded #swap .ds-amtwrap{ position:relative; flex:1; min-width:0; display:flex; }
body.dic-upgraded #swap .ds-amtwrap input{ flex:1; min-width:0; }
body.dic-upgraded #swap .ds-amt-fill{
  position:absolute; inset:0; pointer-events:none; overflow:hidden; white-space:nowrap;
  display:flex; align-items:center; justify-content:flex-end;
}
/* the input only goes ink-less once JS has wired the mirror (.ds-fx-on); if the
   script never runs the input keeps its normal solid digits — never invisible. */
body.dic-upgraded #swap.ds-fx-on #dsAmtIn{
  color:transparent !important; -webkit-text-fill-color:transparent !important;
  text-shadow:none !important; -webkit-text-stroke:0 !important; caret-color:#ff9a3c;
}
body.dic-upgraded #swap.ds-fx-on.blessed #dsAmtIn{ caret-color:#ffce5c; }
body.dic-upgraded #swap.ds-fx-on #dsAmtIn::placeholder{ -webkit-text-fill-color:#3b3a33 !important; color:#3b3a33 !important; }
@supports ((-webkit-background-clip:text) or (background-clip:text)){
  body.dic-upgraded #swap.ds-fx-on .ds-amt-fill,
  body.dic-upgraded #swap #dsAmtOut{
    -webkit-background-clip:text !important; background-clip:text !important;
    -webkit-text-fill-color:transparent !important; color:transparent !important;
    background-size:100% 100%;
    background-image:linear-gradient(0deg,#a4ec42,#c2f85f 33%,#e6ffbe 73%,#f9ffe8);
    -webkit-text-stroke:0 !important;
    text-shadow:0 1px 2px rgba(0,0,0,.5),0 0 4px rgba(0,0,0,.32),0 0 18px rgba(166,242,58,.5) !important;
  }
  body.dic-upgraded #swap.ds-fx-on .ds-amt-fill{
    background-image:linear-gradient(0deg,#ff962f,#ffbf5f 27%,#ffdf98 61%,#fff8ea);
    text-shadow:0 1px 2px rgba(0,0,0,.5),0 0 4px rgba(0,0,0,.32),0 0 18px rgba(255,150,52,.5) !important;
  }
  body.dic-upgraded #swap.blessed.ds-fx-on .ds-amt-fill,
  body.dic-upgraded #swap.blessed #dsAmtOut{
    background-image:linear-gradient(0deg,#f4c648,#ffdb82 42%,#fff6d2) !important;
    text-shadow:0 1px 2px rgba(0,0,0,.5),0 0 4px rgba(0,0,0,.32),0 0 19px rgba(255,206,92,.58) !important;
  }
  body.dic-upgraded #swap.ds-fx-on .ds-amt-fill,
  body.dic-upgraded #swap #dsAmtOut{ animation:dic-numflick 2.7s ease-in-out infinite; }
}
@keyframes dic-numflick{
  0%,100%{ filter:brightness(1.12) saturate(1.04); }
  45%{ filter:brightness(1.24) saturate(1.11); }
  70%{ filter:brightness(1.16) saturate(1.06); }
}
body.dic-upgraded #swap #dsAmtOut.charged{ animation:dic-numflick 2.7s ease-in-out infinite, dic-numbloom .62s ease-out; }
@keyframes dic-numbloom{ 0%{ filter:brightness(1.95) drop-shadow(0 0 10px rgba(166,242,58,.6)); transform:scale(1.05); } 100%{ filter:brightness(1); transform:scale(1); } }
body.dic-upgraded #swap.blessed #dsAmtOut.charged{ animation:dic-numflick 2.7s ease-in-out infinite, dic-numbloom-g .62s ease-out; }
@keyframes dic-numbloom-g{ 0%{ filter:brightness(1.95) drop-shadow(0 0 12px rgba(255,206,92,.7)); transform:scale(1.05); } 100%{ filter:brightness(1); transform:scale(1); } }
body.dic-upgraded #swap .ds-amtfx{ position:absolute; inset:0; z-index:6; pointer-events:none; }
@media (prefers-reduced-motion:reduce){
  body.dic-upgraded #swap.ds-fx-on .ds-amt-fill,
  body.dic-upgraded #swap #dsAmtOut,
  body.dic-upgraded #swap #dsAmtOut.charged{ animation:none !important; filter:none !important; }
  body.dic-upgraded #swap .ds-amtfx{ display:none !important; }
}

/* ============================================================================
   DEATH SWAP TEXT CONTRAST (2026-06-22)
   Kill the black-on-black. Death-green (#a6f23a) for every label + copy line,
   ferryman-gold (#ffce5c) for the secondary numbers (rate / min / values). The
   big amount fields keep their living flame-fill — not touched here. When the
   crossing is blessed (toll on) the whole panel gilds green -> gold to match.
   ==========================================================================*/
body.dic-upgraded #swap .ds-leg-top,
body.dic-upgraded #swap .ds-leg-bot,
body.dic-upgraded #swap .ds-lede,
body.dic-upgraded #swap .ds-summary,
body.dic-upgraded #swap .ds-toll-d,
body.dic-upgraded #swap .ds-toll-amt,
body.dic-upgraded #swap .ds-chip{ color:#a6f23a !important; }
/* secondary numbers gild */
body.dic-upgraded #swap .ds-summary .ds-sm b,
body.dic-upgraded #swap .ds-summary b{ color:#ffce5c !important; }
/* blessed crossing — everything turns gold */
body.dic-upgraded #swap.blessed .ds-leg-top,
body.dic-upgraded #swap.blessed .ds-leg-bot,
body.dic-upgraded #swap.blessed .ds-lede,
body.dic-upgraded #swap.blessed .ds-summary,
body.dic-upgraded #swap.blessed .ds-summary .ds-sm b,
body.dic-upgraded #swap.blessed .ds-summary b,
body.dic-upgraded #swap.blessed .ds-toll-d,
body.dic-upgraded #swap.blessed .ds-toll-amt,
body.dic-upgraded #swap.blessed .ds-chip{ color:#ffce5c !important; }

/* ===========================================================================
   EMBERGLASS — re-box the sale cards, proof badges and stat tiles as SOLID
   obsidian. Replaces the earlier frameless / translucent-glass passes: the fire
   blazes AROUND the slabs, it never washes THROUGH them. Appended last so it
   wins the cascade over every prior de-box pass. Phase-aware via --sacc-rgb.
   ==========================================================================*/
/* the shared obsidian recipe — opaque, faint inner ember pool, deep drop shadow */
body.dic-upgraded #buy .card,
body.dic-upgraded #buy .sale-gauge,
body.dic-upgraded #buy .sale-msg,
body.dic-upgraded #buy .sale-verify{
  background:linear-gradient(168deg, #16140f 0%, #0c0b08 100%) !important;
  border:1px solid rgba(var(--sacc-rgb),.20) !important;
  border-radius:14px !important;
  -webkit-backdrop-filter:none !important; backdrop-filter:none !important;
  box-shadow:inset 0 1px 0 rgb(255 240 210 / .05), inset 0 -26px 48px -30px rgb(255 124 42 / .22), 0 24px 56px -24px rgb(0 0 0 / .8) !important;
}
/* the gates / ferryman / settled message SIGNS are NOT obsidian slabs — de-box for real.
   .card.sale-msg out-specifies the #buy .card recipe above, and sits after it in source order. */
body.dic-upgraded #buy .card.sale-msg{ background:none !important; border:0 !important; box-shadow:none !important; -webkit-backdrop-filter:none !important; backdrop-filter:none !important; }
/* the money slabs — deposit / claim get a stronger ember floor-glow + keep their corner brackets */
body.dic-upgraded #buy .sale-deposit,
body.dic-upgraded #buy .sale-claim{
  background:linear-gradient(168deg, #17150f 0%, #0c0b08 100%) !important;
  border:1px solid rgba(var(--sacc-rgb),.4) !important;
  border-radius:14px !important;
  -webkit-backdrop-filter:none !important; backdrop-filter:none !important;
  box-shadow:inset 0 1px 0 rgb(255 240 210 / .06), inset 0 -30px 56px -30px rgba(var(--sacc-rgb),.26), inset 0 -16px 40px -26px rgb(255 124 42 / .3), 0 26px 60px -22px rgb(0 0 0 / .85) !important;
}
/* the ONE hover law: the edge heats up (border brightens + a warm bloom blooms) */
body.dic-upgraded #buy .card:hover,
body.dic-upgraded #buy .sale-deposit:hover,
body.dic-upgraded #buy .sale-claim:hover{
  border-color:rgba(var(--sacc-rgb),.6) !important;
  box-shadow:inset 0 1px 0 rgb(255 240 210 / .07), inset 0 -30px 56px -30px rgba(var(--sacc-rgb),.34), 0 30px 64px -22px rgb(0 0 0 / .85), 0 0 34px -12px rgb(255 140 50 / .5) !important;
}
/* the 49/49/2 split strip stays frameless (a stat row reads cleaner without a box) */
body.dic-upgraded #buy .sale-split{ background:none !important; border:0 !important; box-shadow:none !important; }

/* proof badges + deathenomics stat tiles — same obsidian; badges lift, stat slabs hold still */
body.dic-upgraded .badge,
body.dic-upgraded #death-economics .de-stat{
  background:linear-gradient(168deg, #16140f 0%, #0c0b08 100%) !important;
  border:1px solid rgb(166 242 58 / .15) !important;
  border-radius:13px !important;
  -webkit-backdrop-filter:none !important; backdrop-filter:none !important;
  box-shadow:inset 0 1px 0 rgb(255 240 210 / .05), inset 0 -22px 42px -28px rgb(255 124 42 / .2), 0 18px 44px -22px rgb(0 0 0 / .72) !important;
  transition:transform .18s ease, border-color .2s ease, box-shadow .2s ease !important;
}
body.dic-upgraded .badge{ padding:22px 14px !important; }
body.dic-upgraded .badge:hover,
body.dic-upgraded #death-economics .de-stat:hover{
  border-color:rgb(166 242 58 / .42) !important;
  box-shadow:inset 0 1px 0 rgb(255 240 210 / .06), inset 0 -24px 46px -28px rgb(255 140 52 / .32), 0 24px 52px -22px rgb(0 0 0 / .78), 0 0 30px -12px rgb(255 140 50 / .42) !important;
}
body.dic-upgraded .badge:hover{ transform:translateY(-3px); }
body.dic-upgraded #death-economics .de-stat:hover{ transform:none; }

/* GAUGE — the 666 "floor met" gold payoff + a molten landing pulse (override the upgrade gauge) */
body.dic-upgraded #buy .sg-floor.met{ background:var(--gold) !important; opacity:1 !important; width:3px !important; box-shadow:0 0 12px var(--gold), 0 0 4px var(--gold) !important; }
body.dic-upgraded #buy .sg-floor.met::after{ content:"floor met" !important; color:var(--gold) !important; }
body.dic-upgraded #buy .floor-hit .sg-fill,
body.dic-upgraded #buy .soul-land .sg-fill{ animation:dic-floorpay 1s ease-out !important; }
body.dic-upgraded #buy .floor-hit .sg-floor.met{ animation:dic-floorflare 1.45s ease-out !important; }
@keyframes dic-floorpay{ 0%,100%{ filter:brightness(1); } 28%{ filter:brightness(1.62) saturate(1.28); } }
@keyframes dic-floorflare{ 0%,100%{ box-shadow:0 0 12px var(--gold); } 30%{ box-shadow:0 0 28px 5px var(--gold); } }
@media(prefers-reduced-motion:reduce){
  body.dic-upgraded #buy .floor-hit .sg-fill,
  body.dic-upgraded #buy .soul-land .sg-fill,
  body.dic-upgraded #buy .floor-hit .sg-floor.met{ animation:none !important; }
}

/* ===========================================================================
   EMBERGLASS pt.2 — the Ledger of Souls + quiz cards were still on the old
   translucent-glass / de-boxed treatment (harsh thin edges at rest, clear-glass
   on hover). Bring them onto the SAME solid obsidian slab + edge-heat hover as
   the Death Sale so the whole site reads as one. (Swap ds-card, the sealed
   gate-board, and the frameless 49/49/2 split keep their deliberate looks.)
   ==========================================================================*/
body.dic-upgraded #ledger .card,
body.dic-upgraded #ledger .card.soulskull,
body.dic-upgraded #ledger .card.holders,
body.dic-upgraded #quiz .quiz-card,
body.dic-upgraded .quiz-card{
  background:linear-gradient(168deg, #16140f 0%, #0c0b08 100%) !important;
  border:1px solid rgb(166 242 58 / .16) !important;
  border-radius:14px !important;
  -webkit-backdrop-filter:none !important; backdrop-filter:none !important;
  box-shadow:inset 0 1px 0 rgb(255 240 210 / .05), inset 0 -24px 46px -30px rgb(255 124 42 / .2), 0 22px 52px -24px rgb(0 0 0 / .78) !important;
  transition:border-color .2s ease, box-shadow .2s ease !important;
}
body.dic-upgraded #ledger .card:hover,
body.dic-upgraded #ledger .card.soulskull:hover,
body.dic-upgraded #ledger .card.holders:hover,
body.dic-upgraded #quiz .quiz-card:hover,
body.dic-upgraded .quiz-card:hover{
  border-color:rgb(166 242 58 / .42) !important;
  -webkit-backdrop-filter:none !important; backdrop-filter:none !important;
  transform:none !important;
  box-shadow:inset 0 1px 0 rgb(255 240 210 / .06), inset 0 -26px 48px -30px rgb(255 140 52 / .3), 0 26px 56px -22px rgb(0 0 0 / .82), 0 0 30px -12px rgb(255 140 50 / .42) !important;
}

/* ===========================================================================
   EDGELESS RESTORE (owner 2026-06-23) — pull the obsidian/EMBERGLASS slab OFF
   the content cards so they read as words on the dark smoke: no box, no border,
   no ember ring, no hover-reveal. Later source order + equal specificity beats
   the EMBERGLASS rules above. NOT touched: the money panels (#buy .sale-deposit
   / .sale-claim), the swap card, sale-msg / sale-split (already edgeless), the
   KEEP-list affordances (.sg-bar / .h-bar tracks, .sd-input, pills/chips), and
   the mobile re-box (index.html @max-width:560px). Desktop-forward.
   ==========================================================================*/
body.dic-upgraded #buy .sale-gauge,
body.dic-upgraded #buy .sale-verify,
body.dic-upgraded #ledger .card,
body.dic-upgraded #ledger .card.soulskull,
body.dic-upgraded #ledger .card.holders,
body.dic-upgraded .badge,
body.dic-upgraded #death-economics .de-stat,
body.dic-upgraded #quiz .quiz-card,
body.dic-upgraded .quiz-card{
  background:none !important; border:0 !important; border-radius:0 !important;
  box-shadow:none !important; -webkit-backdrop-filter:none !important; backdrop-filter:none !important;
  transform:none !important;
}
/* kill the masked ember-ring pseudo (index.html .card::before / .badge::before / .de-stat::before) */
body.dic-upgraded #buy .sale-gauge::before,
body.dic-upgraded #buy .sale-verify::before,
body.dic-upgraded #ledger .card::before,
body.dic-upgraded #ledger .card.soulskull::before,
body.dic-upgraded #ledger .card.holders::before,
body.dic-upgraded .badge::before,
body.dic-upgraded #death-economics .de-stat::before,
body.dic-upgraded #quiz .quiz-card::before,
body.dic-upgraded .quiz-card::before{ display:none !important; }
/* no hover-reveal: the edge stays cold — no border, no bloom, no lift, no ring */
body.dic-upgraded #buy .sale-gauge:hover,
body.dic-upgraded #buy .sale-verify:hover,
body.dic-upgraded #ledger .card:hover,
body.dic-upgraded #ledger .card.soulskull:hover,
body.dic-upgraded #ledger .card.holders:hover,
body.dic-upgraded .badge:hover,
body.dic-upgraded #death-economics .de-stat:hover,
body.dic-upgraded #quiz .quiz-card:hover,
body.dic-upgraded .quiz-card:hover{
  border-color:transparent !important; box-shadow:none !important; transform:none !important;
}
body.dic-upgraded .badge:hover::before,
body.dic-upgraded #death-economics .de-stat:hover::before,
body.dic-upgraded #ledger .card:hover::before,
body.dic-upgraded #ledger .card.soulskull:hover::before,
body.dic-upgraded #ledger .card.holders:hover::before,
body.dic-upgraded .quiz-card:hover::before{ display:none !important; }

/* ===========================================================================
   EDGELESS RESTORE pt.2 (owner-confirmed 2026-06-23) — also de-box the deposit /
   claim money altars, de-glass the soul-panel widget, and drop the modal backdrop
   blur. (The swap slippage/MEV/minimum popovers were intentionally LEFT as-is.)
   Money panels keep their injected .dic-smoke-fx legibility span + .sd-input field
   + buttons (inner, untouched); their corner brackets were already off (line 630).
   ==========================================================================*/
body.dic-upgraded #buy .sale-deposit,
body.dic-upgraded #buy .sale-claim{
  background:none !important; border:0 !important; border-radius:0 !important; box-shadow:none !important;
}
body.dic-upgraded #buy .sale-deposit:hover,
body.dic-upgraded #buy .sale-claim:hover{
  border-color:transparent !important; box-shadow:none !important; transform:none !important;
}
/* soul-panel: drop the frosted glass (blur) + border + radius + ember shadow; keep the
   opaque dark fill (legibility) + a plain dark depth shadow so the floating widget reads */
body.dic-upgraded .soul-panel{
  border:0 !important; border-radius:0 !important;
  -webkit-backdrop-filter:none !important; backdrop-filter:none !important;
  box-shadow:0 24px 70px rgba(0,0,0,.72) !important;
}
body.dic-upgraded .soul-panel::before{ border-radius:0 !important; }
/* modal scrim: drop the frosted blur, keep the dark dim (the opaque .ds-modal-card stays) */
body.dic-upgraded .ds-modal{ -webkit-backdrop-filter:none !important; backdrop-filter:none !important; }

/* ===========================================================================
   EDGELESS RESTORE pt.3 (owner 2026-06-23) — the .card.promise value-prop cards
   ("Marked +66.6%", "Keys go in the grave", "Blessing not a cliff", "Know the real
   from the fake") were STILL solid obsidian: the EMBERGLASS "#buy .card" recipe
   (line 1226) out-sources the earlier .promise de-box (line 543), and "#buy .card
   :hover" (1249) was the clear backing-on-hover. Strip them here (later source +
   equal specificity wins) and kill the hover. The existing glyph-halos (553-561)
   already carry the copy on the fire — NO smoke backing (owner removed those, 600).
   ==========================================================================*/
body.dic-upgraded #buy .promise,
body.dic-upgraded #buy .card.promise{
  background:none !important; border:0 !important; border-radius:0 !important;
  box-shadow:none !important; -webkit-backdrop-filter:none !important; backdrop-filter:none !important;
}
body.dic-upgraded #buy .promise::before,
body.dic-upgraded #buy .promise::after,
body.dic-upgraded #buy .promise:hover::before,
body.dic-upgraded #buy .promise:hover::after{ display:none !important; }
body.dic-upgraded #buy .promise:hover,
body.dic-upgraded #buy .card.promise:hover{
  border-color:transparent !important; box-shadow:none !important; transform:none !important;
}

/* ===========================================================================
   EDGELESS RESTORE pt.4 (owner 2026-06-23) — kill the EMBERGLASS "ONE hover law"
   (#buy .card:hover, line 1249) for good. It out-sourced the 1107 neutralizer
   (equal specificity, later in source) and still popped a glowing clear box that
   raises up on hover over the sealed message AND the 49/49/2 split (both are
   class="card …"). No #buy card/sign/stat reveals a box, border, shadow, or lift
   on hover anymore. Money-panel inputs/buttons keep their own backings (inner).
   ==========================================================================*/
body.dic-upgraded #buy .card:hover,
body.dic-upgraded #buy .card.sale-msg:hover,
body.dic-upgraded #buy .card.sale-split:hover,
body.dic-upgraded #buy .sale-msg:hover,
body.dic-upgraded #buy .sale-split:hover,
body.dic-upgraded #buy .sale-split .ss:hover,
body.dic-upgraded #buy .gate-board:hover,
body.dic-upgraded #buy .sale-count:hover{
  border-color:transparent !important; box-shadow:none !important; transform:none !important;
  background:none !important; -webkit-backdrop-filter:none !important; backdrop-filter:none !important;
}
body.dic-upgraded #buy .card:hover::before,
body.dic-upgraded #buy .card:hover::after{ display:none !important; }
