/* GENERATED by tools/build-vein-css.mjs — do not edit.
   20 stylesheets concatenated in cascade order from index.html.
   Edit the source .css files and rebuild. */

/* ===== inline <style> in index.html (cascade position preserved) ===== */
:root{--bg:#080604;--ink:#f8ecdc;--muted:#a4937d;--gold:#ffc857;--amber:#f5a623;--ember:#f97316;--green:#32d46d;--edge:rgba(255,190,76,.18);--display:Unbounded,sans-serif;--mono:"Geist Mono",monospace;--sans:Geist,system-ui,sans-serif}
    *{box-sizing:border-box}html,body{margin:0;min-height:100%;background:var(--bg);color:var(--ink)}body{font-family:var(--sans);overflow-x:hidden}.ob{min-height:100svh;position:relative;display:grid;isolation:isolate;background:#080604;overflow:hidden}
    .ob-bg{position:absolute;inset:0;width:100%;height:100%;object-fit:cover;object-position:56% 50%;z-index:-10;filter:saturate(.95) brightness(.56);transform:scale(1.015)}
    .ob-poster{position:absolute;inset:0;z-index:-11;background:url('assets/vein/bg-vein.webp') 56% 50%/cover no-repeat}
    .ob::before{content:"";position:absolute;inset:0;z-index:-8;background:radial-gradient(circle at 72% 46%,rgba(255,151,39,.15),transparent 29%),linear-gradient(90deg,rgba(4,3,2,.99) 0%,rgba(4,3,2,.94) 29%,rgba(4,3,2,.62) 52%,rgba(4,3,2,.42) 68%,rgba(4,3,2,.72) 100%),linear-gradient(0deg,rgba(5,4,3,.9),transparent 48%)}
    .ob::after{content:"";position:absolute;inset:0;z-index:-7;pointer-events:none;background:linear-gradient(180deg,rgba(0,0,0,.15),transparent 20%,transparent 75%,rgba(0,0,0,.38));box-shadow:inset 0 0 190px rgba(0,0,0,.45)}
    .glow{position:absolute;left:51%;top:27%;width:min(58vw,960px);aspect-ratio:1;border-radius:50%;z-index:-6;background:radial-gradient(circle,rgba(255,171,55,.13),rgba(249,115,22,.04) 38%,transparent 69%);filter:blur(18px);animation:pulse 5.8s ease-in-out infinite}
    .dust{position:absolute;inset:0;z-index:-5;pointer-events:none;opacity:.56;background-image:radial-gradient(circle at 17% 22%,rgba(255,194,94,.62) 0 1px,transparent 1.5px),radial-gradient(circle at 73% 18%,rgba(255,147,45,.48) 0 1px,transparent 1.4px),radial-gradient(circle at 84% 67%,rgba(255,194,94,.46) 0 1px,transparent 1.4px),radial-gradient(circle at 42% 82%,rgba(255,194,94,.28) 0 1px,transparent 1.5px);background-size:170px 190px,230px 210px,280px 240px,330px 290px;animation:drift 20s linear infinite}
    @keyframes pulse{50%{transform:scale(1.08);opacity:.72}}@keyframes drift{to{background-position:90px -110px,-80px -120px,50px -145px,-40px -90px}}
    .top{width:min(1510px,calc(100% - 48px));margin:0 auto;padding:21px 0;display:flex;align-items:center;justify-content:space-between;gap:20px;position:relative;z-index:8}.brand{display:flex;align-items:center;gap:12px;text-decoration:none;color:var(--ink)}.brand img{width:39px;height:42px;object-fit:contain;filter:drop-shadow(0 5px 15px rgba(249,115,22,.18))}.brand strong{font-family:var(--display);font-size:18px;letter-spacing:-.055em}.brand strong b{color:var(--gold)}.brand small{display:block;margin-top:3px;font:600 8.5px/1 var(--mono);letter-spacing:.19em;color:#8f7a62;text-transform:uppercase}
    .topright{display:flex;align-items:center;gap:8px}.audiobtn{width:39px;height:39px;display:grid;place-items:center;border-radius:11px;border:1px solid rgba(255,255,255,.075);background:rgba(11,8,6,.58);backdrop-filter:blur(12px);color:#a89478;cursor:pointer;transition:.17s}.audiobtn:hover,.audiobtn[aria-pressed="true"]{color:var(--gold);border-color:rgba(255,200,87,.3);background:rgba(255,200,87,.06)}.audiobtn svg{width:18px;height:18px}.audiobtn .off{display:none}.audiobtn[aria-pressed="false"] .on{display:none}.audiobtn[aria-pressed="false"] .off{display:block}.topnote{font:600 9px/1 var(--mono);letter-spacing:.15em;text-transform:uppercase;color:#c6ad8b;display:flex;align-items:center;gap:8px;padding:8px 10px;border:1px solid rgba(255,200,87,.13);border-radius:999px;background:rgba(9,7,5,.42);backdrop-filter:blur(10px)}.topnote i{width:6px;height:6px;border-radius:50%;background:var(--gold);box-shadow:0 0 14px rgba(255,200,87,.7)}
    .hero{width:min(1510px,calc(100% - 48px));margin:auto;display:grid;grid-template-columns:minmax(0,790px) minmax(340px,460px);justify-content:space-between;align-items:center;gap:clamp(42px,6vw,90px);min-height:calc(100svh - 90px);padding:clamp(30px,4vh,55px) 0 70px}.copy{padding:10px 0}.eyebrow{display:inline-flex;align-items:center;gap:9px;font:700 9px/1 var(--mono);letter-spacing:.2em;text-transform:uppercase;color:#d8b774}.eyebrow i{width:22px;height:1px;background:linear-gradient(90deg,var(--gold),transparent)}
    h1{font:900 clamp(55px,6.7vw,108px)/.89 var(--display);letter-spacing:-.075em;margin:19px 0 18px;max-width:850px}h1 em{display:block;font-style:normal;background:linear-gradient(180deg,#fff1c5 3%,#ffc857 52%,#ef8c17 100%);-webkit-background-clip:text;background-clip:text;color:transparent;text-shadow:0 15px 54px rgba(249,115,22,.12)}
    .lead{max-width:705px;font-size:clamp(16px,1.28vw,19px);line-height:1.55;color:#c7b7a2;margin:0 0 24px}.lead b{color:#f8e9d4;font-weight:650}.lead strong{color:var(--gold);font-weight:700}.cta{display:flex;align-items:center;gap:14px;flex-wrap:wrap}.enter{appearance:none;text-decoration:none;border:1px solid #ffd47a;border-radius:14px;display:inline-flex;align-items:center;justify-content:center;gap:12px;min-height:58px;padding:0 28px;background:linear-gradient(180deg,#ffd168,#f3a515 72%,#d77a09);box-shadow:0 16px 44px rgba(230,124,10,.28),inset 0 1px 0 rgba(255,255,255,.6);color:#171009;font:800 13px/1 var(--display);letter-spacing:-.015em;transition:.22s}.enter:hover{transform:translateY(-2px);box-shadow:0 21px 54px rgba(230,124,10,.42),0 0 0 5px rgba(255,200,87,.035)}.enter svg{width:19px;height:19px}.micro{font:500 10px/1.5 var(--mono);color:#897764;max-width:280px}
    .rewards{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:10px;margin-top:28px;max-width:760px}.reward{position:relative;overflow:hidden;min-height:114px;border:1px solid rgba(255,190,76,.16);border-radius:16px;background:linear-gradient(150deg,rgba(28,20,12,.74),rgba(9,7,5,.62));backdrop-filter:blur(14px);padding:15px;display:grid;grid-template-columns:48px minmax(0,1fr);align-items:center;gap:12px;box-shadow:inset 0 1px 0 rgba(255,255,255,.04),0 14px 34px rgba(0,0,0,.18);transition:.2s}.reward::after{content:"";position:absolute;right:-30px;bottom:-58px;width:130px;height:130px;border-radius:50%;background:radial-gradient(circle,rgba(255,175,50,.09),transparent 68%)}.reward:hover{transform:translateY(-3px);border-color:rgba(255,200,87,.3);background:linear-gradient(150deg,rgba(36,25,14,.82),rgba(11,8,6,.68))}.reward img{width:48px;height:48px;object-fit:contain;filter:drop-shadow(0 7px 15px rgba(249,115,22,.23))}.reward b{display:block;color:#f8e8cc;font:750 12px/1.15 var(--display);letter-spacing:-.025em}.reward span{display:block;color:#91816d;font-size:10px;line-height:1.4;margin-top:5px}.reward.stock{border-color:rgba(34,197,94,.14);background:radial-gradient(circle at 5% 50%,rgba(34,197,94,.055),transparent 36%),linear-gradient(150deg,rgba(28,20,12,.74),rgba(9,7,5,.62))}
    .network{display:inline-flex;align-items:center;gap:8px;margin-top:15px;padding:7px 10px 7px 8px;border:1px solid rgba(34,197,94,.14);border-radius:999px;background:rgba(6,11,7,.34);font:650 8.5px/1 var(--mono);letter-spacing:.105em;text-transform:uppercase;color:#a6b49e}.network img{width:64px;height:17px;object-fit:contain;object-position:left center}.network small{font:700 7.5px/1 var(--mono);letter-spacing:.14em;color:#9ca996}.network i{width:6px;height:6px;border-radius:50%;background:#22c55e;box-shadow:0 0 9px rgba(34,197,94,.7)}
    .jackpot{position:relative;overflow:hidden;align-self:center;min-height:520px;padding:21px;border:1px solid rgba(255,200,87,.24);border-radius:25px;background:radial-gradient(circle at 50% 28%,rgba(255,166,39,.13),transparent 38%),linear-gradient(155deg,rgba(28,19,10,.83),rgba(8,7,5,.82));box-shadow:0 35px 100px rgba(0,0,0,.38),inset 0 1px 0 rgba(255,255,255,.06);backdrop-filter:blur(14px)}.jackpot::before{content:"";position:absolute;inset:-50%;background:conic-gradient(from 0deg,transparent 0 74%,rgba(255,200,87,.13) 86%,transparent 100%);animation:spin 15s linear infinite;pointer-events:none}@keyframes spin{to{transform:rotate(360deg)}}.jackpot>*{position:relative;z-index:1}.jphead{display:flex;align-items:center;justify-content:space-between;gap:12px}.jphead span:first-child{font:700 8px/1 var(--mono);letter-spacing:.16em;color:#b99b6d;text-transform:uppercase}.livepill{display:inline-flex;align-items:center;gap:6px;padding:6px 8px;border-radius:999px;border:1px solid rgba(34,197,94,.16);background:rgba(34,197,94,.045);font:700 7px/1 var(--mono);letter-spacing:.12em;color:#9fb99e;text-transform:uppercase}.livepill i{width:5px;height:5px;border-radius:50%;background:#22c55e;box-shadow:0 0 8px #22c55e}.jpmachine{display:block;width:min(285px,85%);aspect-ratio:1;object-fit:contain;margin:3px auto -22px;filter:drop-shadow(0 18px 35px rgba(249,115,22,.25));pointer-events:none}.jplabel{text-align:center;font:700 8px/1 var(--mono);letter-spacing:.17em;text-transform:uppercase;color:#88755e}.jptotal{text-align:center;font:900 clamp(46px,4.6vw,72px)/1 var(--display);letter-spacing:-.065em;color:#ffd36b;margin-top:7px;text-shadow:0 0 35px rgba(249,115,22,.15)}.jptotal small{font-size:.24em;letter-spacing:.12em;margin-left:7px;color:#c5a066}.jpsplit{display:grid;grid-template-columns:1fr 1fr;gap:9px;margin-top:18px}.jpsplit span{padding:12px;border:1px solid rgba(255,255,255,.055);border-radius:12px;background:rgba(0,0,0,.18)}.jpsplit small{display:block;font:650 7px/1 var(--mono);letter-spacing:.13em;color:#7c6a55;text-transform:uppercase}.jpsplit b{display:block;margin-top:6px;font:750 14px/1 var(--display);color:#ead7b8}.jpnote{display:flex;align-items:center;justify-content:center;gap:7px;margin-top:17px;font:600 8px/1.35 var(--mono);color:#7d6f5e;text-align:center}.jpnote i{width:5px;height:5px;border-radius:50%;background:var(--gold);box-shadow:0 0 8px rgba(255,200,87,.65)}
    .socialrail{position:fixed;right:max(18px,env(safe-area-inset-right));bottom:max(18px,env(safe-area-inset-bottom));z-index:20;display:flex;flex-direction:column;gap:8px}.socialrail a{width:42px;height:42px;border-radius:13px;display:grid;place-items:center;color:#bbaa91;text-decoration:none;border:1px solid rgba(255,190,76,.14);background:rgba(13,10,7,.72);backdrop-filter:blur(14px);box-shadow:0 12px 30px rgba(0,0,0,.3);transition:.18s}.socialrail a:hover{color:var(--gold);border-color:rgba(255,200,87,.38);transform:translateY(-2px)}.socialrail svg{width:18px;height:18px}
    @media(max-width:1180px){.hero{grid-template-columns:minmax(0,720px) minmax(320px,390px);gap:35px}.jackpot{min-height:470px}.copy{max-width:720px}.rewards{max-width:690px}}
    @media(max-width:930px){.ob-bg{object-position:58% 24%}.ob::before{background:linear-gradient(180deg,rgba(4,3,2,.35),rgba(4,3,2,.68) 35%,rgba(4,3,2,.95) 68%,#080604 100%)}.top{width:min(100% - 30px,1510px);padding:16px 0}.topnote{display:none}.hero{width:min(100% - 30px,1510px);display:flex;flex-direction:column;align-items:stretch;justify-content:flex-end;gap:22px;min-height:calc(100svh - 70px);padding:27vh 0 74px}.copy{width:100%;max-width:none}.jackpot{min-height:0;padding:15px;display:grid;grid-template-columns:145px 1fr;align-items:center;gap:12px}.jphead{grid-column:1/-1}.jpmachine{width:140px;margin:-4px auto}.jpbody{min-width:0}.jptotal{text-align:left;font-size:45px}.jplabel{text-align:left}.jpsplit{margin-top:11px}.jpnote{grid-column:1/-1;margin-top:3px}.socialrail{right:14px;bottom:14px}}
    @media(max-width:620px){.brand img{width:33px;height:36px}.brand strong{font-size:15px}.brand small{font-size:8px}.audiobtn{width:36px;height:36px}.hero{padding-top:25vh;padding-bottom:70px}.eyebrow{font-size:8px}h1{font-size:clamp(43px,15vw,65px);line-height:.91;margin-top:16px}.lead{font-size:14px;margin-bottom:21px}.enter{width:100%;min-height:56px}.micro{max-width:none}.rewards{display:flex;overflow-x:auto;scroll-snap-type:x mandatory;gap:8px;margin-right:-15px;padding-right:15px;scrollbar-width:none}.rewards::-webkit-scrollbar{display:none}.reward{flex:0 0 205px;min-height:96px;scroll-snap-align:start;grid-template-columns:42px 1fr;padding:12px}.reward img{width:42px;height:42px}.network{margin-bottom:4px}.jackpot{grid-template-columns:105px 1fr;border-radius:18px}.jpmachine{width:105px}.jptotal{font-size:36px}.jpsplit span{padding:9px}.jpsplit b{font-size:12px}.socialrail a{width:38px;height:38px}.socialrail svg{width:16px;height:16px}}
    @media(prefers-reduced-motion:reduce){.glow,.dust,.jackpot::before{animation:none}.enter,.reward,.socialrail a,.audiobtn{transition:none}.ob-bg{display:none}}

/* ===== vein-cinematic.css ===== */
/* ==========================================================================
   CaveWatch · The Vein · Cinematic polish REV17
   Cosmetic state only: no contract writes, odds, reward math or wallet logic.
   ========================================================================== */
:root{
  --vxc-green:#35df73;--vxc-gold:#ffc857;--vxc-amber:#f59e0b;--vxc-blue:#70d8ff;
  --vxc-red:#e65c47;--vxc-cubic:cubic-bezier(.2,.8,.2,1)
}
body{--vxc-room-accent:255,180,65}
body[data-vxp-view="lucky"]{--vxc-room-accent:255,145,32}
body[data-vxp-view="stock"]{--vxc-room-accent:52,223,115}
body[data-vxp-view="vault"]{--vxc-room-accent:95,182,255}
body[data-vxp-view="forge"]{--vxc-room-accent:255,151,34}
body[data-vxp-view="trade"]{--vxc-room-accent:81,207,255}

/* Brand: The Vein deliberately carries the Robinhood-green accent. */
.brand small,.vxp-brand small{color:var(--vxc-green)!important;text-shadow:0 0 15px rgba(53,223,115,.18)}

/* -------------------------- micro interaction language -------------------- */
.vx-btn,.vxs-btn,.vxs-ticket button,.vx-tabs button,.vx-sq,.vxp-wallet,.vxs-qbtn,.vx-quick button,.vx-num,.vx-max{
  position:relative;isolation:isolate;overflow:hidden
}
.vx-btn::after,.vxs-btn::after,.vxs-ticket button::after,.vx-tabs button::after,.vxp-wallet::after{
  content:"";position:absolute;inset:-55% -20%;z-index:-1;pointer-events:none;
  background:linear-gradient(105deg,transparent 35%,rgba(255,211,113,.105) 49%,transparent 63%);
  transform:translateX(-80%) rotate(2deg);transition:transform .55s var(--vxc-cubic)
}
.vx-btn:hover::after,.vxs-btn:hover::after,.vxs-ticket button:hover::after,.vx-tabs button:hover::after,.vxp-wallet:hover::after{transform:translateX(80%) rotate(2deg)}
.vx-btn:active,.vxs-btn:active,.vxs-ticket button:active,.vx-quick button:active,.vx-num:active{transform:translateY(1px) scale(.992)!important}
.vx-tabs button.on{filter:drop-shadow(0 0 12px rgba(var(--vxc-room-accent),.11))}
.vx-tabs button.on::before{content:"";position:absolute;left:14%;right:14%;bottom:2px;height:1px;background:linear-gradient(90deg,transparent,rgba(var(--vxc-room-accent),.8),transparent);box-shadow:0 0 8px rgba(var(--vxc-room-accent),.35)}
body.vxc-wallet-flash .vx-portalbar{animation:vxcWalletSweep .75s var(--vxc-cubic)}
@keyframes vxcWalletSweep{0%{box-shadow:inset -900px 0 60px -60px rgba(53,223,115,0)}40%{box-shadow:inset -140px 0 60px -60px rgba(53,223,115,.25)}100%{box-shadow:inset 0 0 0 rgba(53,223,115,0)}}

/* ------------------------------- video media ------------------------------- */
.vxc-media{position:relative;display:grid;place-items:center;flex:none;isolation:isolate}
.vxc-media>img,.vxc-media>video{grid-area:1/1;width:100%;height:100%;object-fit:contain;display:block}
.vxc-media>video{opacity:0;pointer-events:none;transition:opacity .16s ease;transform:scale(var(--vxc-scale,1.12));transform-origin:center}
.vxc-media.vxc-playing>video,.vxc-media:hover>video,.vxc-media:focus-within>video{opacity:1}
.vxc-media.vxc-playing>img,.vxc-media:hover>img,.vxc-media:focus-within>img{opacity:.12}
.vxc-media>img{transition:opacity .16s ease,transform .2s var(--vxc-cubic)}
.vxc-media:hover>img{transform:scale(1.025)}
.vxc-card-media{width:52px;height:52px}
.vxc-stock-media{width:78px;height:78px;--vxc-scale:1.34}
.vxc-item-media{width:132px;height:132px;margin:0 auto;--vxc-scale:1.28}
.vxc-vault-media{width:64px;height:64px;--vxc-scale:1.26}
.vxc-guide-media{width:58px;height:58px;--vxc-scale:1.24}
.vxc-media video::-webkit-media-controls{display:none!important}

/* WebKit decodes alpha WebM as opaque black (it ignores Matroska AlphaMode),
   so on iOS every one of these videos is a black rectangle. Fall back to the
   paired poster, which is the same art as a transparent RGBA WebP. Set by the
   capability probe in the page head. Mirrors the reduced-motion rule below. */
html.no-webm-alpha .vxc-media>video{display:none!important}
html.no-webm-alpha .vxc-media>img,
html.no-webm-alpha .vxc-media.vxc-playing>img,
html.no-webm-alpha .vxc-media.vxc-always>img,
html.no-webm-alpha .vxc-media:hover>img{opacity:1!important;transform:none!important}

/* --------------------------- live number reactions ------------------------- */
.vxc-value-up{animation:vxcValueUp .85s ease}.vxc-value-down{animation:vxcValueDown .85s ease}
@keyframes vxcValueUp{0%,100%{text-shadow:none}30%{color:#9cf1bb;text-shadow:0 0 17px rgba(53,223,115,.42)}}
@keyframes vxcValueDown{0%,100%{text-shadow:none}30%{color:#e18b78;text-shadow:0 0 14px rgba(225,87,67,.25)}}
.vxc-number-pulse{animation:vxcNum .62s ease}@keyframes vxcNum{35%{transform:translateY(-1px) scale(1.025);text-shadow:0 0 16px rgba(255,200,87,.32)}}
body.vxc-stock-soon .vxs-dropvault{box-shadow:0 0 0 1px rgba(53,223,115,.13),0 24px 65px rgba(19,145,67,.08)!important}
body.vxc-stock-soon .vxs-crate{animation:vxcStockBreathe 2.2s ease-in-out infinite}@keyframes vxcStockBreathe{50%{filter:drop-shadow(0 0 12px rgba(53,223,115,.16))}}

/* -------------------------------- timers ---------------------------------- */
body.vxc-hunt-ten .vx-stage{box-shadow:inset 0 0 60px rgba(255,145,25,.045)}
body.vxc-hunt-five .vx-stage{animation:vxcPressure 1s ease-in-out infinite}
body.vxc-lucky-ten .vx-lstage{box-shadow:inset 0 0 55px rgba(255,145,25,.05)}
body.vxc-lucky-five .vx-lstage{animation:vxcPressure 1s ease-in-out infinite}
@keyframes vxcPressure{50%{box-shadow:inset 0 0 72px rgba(255,139,21,.09),0 0 0 1px rgba(255,173,44,.10)}}

/* ------------------------------- Hunt world ------------------------------- */
.vx-stage{transition:filter .55s ease,box-shadow .4s ease}
body.vxc-golden .vx-stage{filter:saturate(1.06) sepia(.09) brightness(1.02)}
body.vxc-golden .vx-stage::after{content:"";position:absolute;inset:0;pointer-events:none;z-index:4;background:radial-gradient(circle at 52% 47%,rgba(255,193,58,.10),transparent 38%);mix-blend-mode:screen;animation:vxcGoldWorld 2.7s ease-in-out infinite}
@keyframes vxcGoldWorld{50%{opacity:.55}}
.vxc-golden-banner{position:absolute;z-index:20;left:50%;top:20%;transform:translate(-50%,-50%);display:flex;align-items:center;gap:9px;padding:8px 11px;border-radius:999px;border:1px solid rgba(255,211,90,.24);background:rgba(20,13,4,.72);backdrop-filter:blur(10px);font:700 8px/1 var(--mono);letter-spacing:.14em;color:#ffd35f;text-transform:uppercase;box-shadow:0 10px 32px rgba(0,0,0,.25),0 0 24px rgba(255,188,35,.08)}
.vxc-golden-banner i{width:7px;height:7px;border-radius:50%;background:#ffd45c;box-shadow:0 0 11px #ffc94a}

/* Chamber hover remains coded and immediate. */
.vx-node{transition:transform .2s var(--vxc-cubic),filter .2s ease}
.vx-node:hover{transform:translateY(-2px) scale(1.04)!important;filter:drop-shadow(0 0 9px rgba(255,174,43,.22))}
.vx-node:hover::after{content:"";position:absolute;inset:13%;border-radius:50%;pointer-events:none;background:radial-gradient(circle,rgba(255,177,49,.13),transparent 67%);animation:vxcNode .8s ease}
@keyframes vxcNode{0%{opacity:0;transform:scale(.86)}60%{opacity:1}100%{opacity:.45;transform:scale(1.05)}}

/* --------------------------- portal room set pieces ------------------------ */
.vxc-roompiece{position:relative;overflow:hidden;border:1px solid rgba(var(--vxc-room-accent),.12);border-radius:18px;background:
  radial-gradient(circle at 20% 30%,rgba(var(--vxc-room-accent),.065),transparent 34%),
  linear-gradient(145deg,rgba(20,15,9,.74),rgba(7,6,5,.56));box-shadow:inset 0 1px rgba(255,255,255,.035),0 18px 45px rgba(0,0,0,.18)}
.vxc-roompiece::after{content:"";position:absolute;inset:0;pointer-events:none;background:linear-gradient(112deg,transparent 40%,rgba(255,255,255,.025) 50%,transparent 60%);transform:translateX(-80%);animation:vxcSheen 8s ease-in-out infinite}
@keyframes vxcSheen{0%,62%{transform:translateX(-90%)}84%,100%{transform:translateX(90%)}}
.vxc-roompiece-copy small{display:block;font:700 8px/1 var(--mono);letter-spacing:.17em;color:rgba(var(--vxc-room-accent),.76);text-transform:uppercase}
.vxc-roompiece-copy b{display:block;margin-top:7px;font:750 17px/1.12 var(--display);color:#f6e7d1}
.vxc-roompiece-copy span{display:block;margin-top:6px;color:#8f7d67;font-size:11px;line-height:1.45}
.vxc-vault-stage,.vxc-forge-stage,.vxc-trade-stage{display:grid;grid-template-columns:minmax(170px,260px) 1fr;align-items:center;gap:18px;padding:14px 22px;margin:0 0 13px}
.vxc-vault-stage .vxc-hero-media,.vxc-forge-stage .vxc-hero-media,.vxc-trade-stage .vxc-hero-media{height:165px;--vxc-scale:1.12}
.vxc-lucky-core{position:absolute;z-index:9;left:50%;bottom:2.2%;width:92px;height:92px;transform:translateX(-50%);opacity:.88;filter:drop-shadow(0 10px 20px rgba(0,0,0,.4));--vxc-scale:1.35}
.vxc-lucky-core:hover{opacity:1}
.vxc-refinery-piece{display:flex;align-items:center;gap:10px;margin-top:11px;padding:9px;border:1px solid rgba(255,177,54,.11);border-radius:12px;background:rgba(0,0,0,.15)}
.vxc-refinery-piece .vxc-media{width:64px;height:64px;--vxc-scale:1.35}.vxc-refinery-piece span{font:600 9px/1.4 var(--mono);color:#806f5d}.vxc-refinery-piece b{display:block;color:#d9c09a;margin-bottom:4px}
.vxs-crate .vxc-media{flex:none}
.vx-vault>header .vxc-media{margin-right:0}
.vx-item .vxc-item-media img,.vx-item .vxc-item-media video{width:100%!important;height:100%!important;margin:0!important;align-self:auto!important;filter:drop-shadow(0 14px 25px rgba(249,115,22,.20))}
.vx-item:hover .vxc-item-media img{transform:none!important}

/* ----------------------- onboarding living-world pass ---------------------- */
.ob .brand small{color:var(--vxc-green)!important}
.ob .hero{position:relative;z-index:3}
.ob .reward{cursor:default;transition:transform .24s var(--vxc-cubic),border-color .24s ease,box-shadow .24s ease}
.ob .reward:hover{transform:translateY(-5px)}
.ob .reward[data-vxc-kind="orix"]:hover{box-shadow:0 18px 40px rgba(225,134,24,.08),inset 0 0 28px rgba(255,174,39,.035)}
.ob .reward[data-vxc-kind="eth"]:hover{border-color:rgba(91,197,255,.25);box-shadow:0 18px 40px rgba(61,173,255,.06),inset 0 0 28px rgba(79,186,255,.035)}
.ob .reward[data-vxc-kind="stock"]:hover{border-color:rgba(53,223,115,.24);box-shadow:0 18px 40px rgba(39,185,91,.06),inset 0 0 28px rgba(53,223,115,.035)}
.ob .jackpot{transition:box-shadow .35s ease,border-color .35s ease,transform .35s var(--vxc-cubic)}
.ob .jackpot.vxc-jp-pulse{animation:vxcJackpot .9s ease}
@keyframes vxcJackpot{35%{border-color:rgba(255,209,100,.48);box-shadow:0 35px 100px rgba(0,0,0,.38),0 0 45px rgba(247,155,22,.11),inset 0 0 44px rgba(255,192,56,.05)}}
.ob .jptotal{animation:vxcJackBreath 3.8s ease-in-out infinite}@keyframes vxcJackBreath{50%{text-shadow:0 0 22px rgba(255,198,81,.11)}}
.vxc-jp-mote{position:absolute;z-index:2;top:29%;width:4px;height:4px;border-radius:50%;background:#ffcc69;box-shadow:0 0 9px rgba(255,181,52,.55);pointer-events:none;animation:vxcMote 1.75s ease-in forwards}@keyframes vxcMote{0%{opacity:0;transform:translate(0,-9px) scale(.7)}22%{opacity:.8}100%{opacity:0;transform:translate(var(--dx),120px) scale(.35)}}
.vxc-beacon{position:absolute;z-index:1;left:56.5%;bottom:13%;width:104px;height:104px;opacity:.58;filter:drop-shadow(0 13px 25px rgba(0,0,0,.35));pointer-events:none}
.vxc-beacon video{width:100%;height:100%;object-fit:contain}
.vxc-activity{margin-top:10px;max-width:600px;display:flex;align-items:center;gap:9px;padding:8px 10px;border:1px solid rgba(255,188,65,.10);border-radius:10px;background:rgba(8,6,4,.35);backdrop-filter:blur(10px);font:600 8.5px/1.2 var(--mono);color:#80705d;overflow:hidden}
.vxc-activity>span:first-child{display:inline-flex;align-items:center;gap:7px;color:#bd9d6a;letter-spacing:.12em;white-space:nowrap}.vxc-activity>span:first-child i{width:6px;height:6px;border-radius:50%;background:var(--vxc-green);box-shadow:0 0 9px rgba(53,223,115,.55)}
.vxc-activity-msg{min-width:0;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;animation:vxcTickerIn .35s ease}@keyframes vxcTickerIn{from{opacity:0;transform:translateY(5px)}}
.vxc-descend{position:fixed;inset:0;z-index:99999;pointer-events:none;opacity:0;background:
 radial-gradient(circle at 50% 54%,rgba(255,194,85,.27),rgba(241,119,13,.08) 20%,rgba(2,2,1,.91) 66%),
 linear-gradient(#090603,#020201);transition:opacity .2s ease}
.vxc-descend::before{content:"";position:absolute;inset:-16%;background:radial-gradient(ellipse at center,transparent 0 14%,rgba(255,172,43,.10) 31%,rgba(0,0,0,.82) 69%);transform:scale(1.18);filter:blur(10px)}
.vxc-descend.go{opacity:1}.vxc-descend.go::before{animation:vxcDescend .78s var(--vxc-cubic) forwards}@keyframes vxcDescend{to{transform:scale(.55);filter:blur(22px)}}

/* ----------------------------- event cinematics ---------------------------- */
.vxc-event{position:fixed;inset:0;z-index:99990;display:grid;place-items:center;pointer-events:none;opacity:0;transition:opacity .18s ease;background:radial-gradient(circle at center,rgba(13,8,3,.18),rgba(0,0,0,.48) 72%)}
.vxc-event.on{opacity:1}
.vxc-event-inner{width:min(720px,92vw);height:min(720px,76vh);position:relative;display:grid;place-items:center}
.vxc-event video{position:absolute;inset:0;width:100%;height:100%;object-fit:contain;filter:drop-shadow(0 36px 70px rgba(0,0,0,.55))}
.vxc-event-copy{position:absolute;left:50%;bottom:3%;transform:translateX(-50%);min-width:min(440px,88vw);text-align:center;padding:10px 15px;border:1px solid rgba(255,196,75,.13);border-radius:12px;background:rgba(7,5,3,.65);backdrop-filter:blur(13px)}
.vxc-event-copy small{display:block;font:700 7.5px/1 var(--mono);letter-spacing:.18em;color:#a88554;text-transform:uppercase}.vxc-event-copy b{display:block;margin-top:5px;font:800 clamp(18px,3vw,28px)/1.05 var(--display);color:#ffe2a3}.vxc-event-copy span{display:block;margin-top:5px;color:#907d66;font-size:10px}
.vxc-event.major{background:radial-gradient(circle at center,rgba(245,144,24,.16),rgba(0,0,0,.58) 72%)}.vxc-event.major .vxc-event-copy b{font-size:clamp(23px,4vw,38px);color:#ffd15b;text-shadow:0 0 25px rgba(255,179,31,.25)}
.vxc-event.stock .vxc-event-copy b,.vxc-event.trade .vxc-event-copy b{color:#a7f0bf}
.vxc-event.eth .vxc-event-copy b{color:#a7ddff}
.vxc-event.sealed .vxc-event-copy b{color:#c99d62}
.vxc-screenflash{position:fixed;inset:0;z-index:99989;pointer-events:none;opacity:0;background:radial-gradient(circle at 50% 50%,rgba(var(--vxc-room-accent),.18),transparent 58%)}.vxc-screenflash.on{animation:vxcFlash .48s ease}@keyframes vxcFlash{35%{opacity:1}100%{opacity:0}}

/* ----------------------------- responsive ---------------------------------- */
@media(max-width:1000px){
  .vxc-beacon{left:auto;right:22%;bottom:25%;width:82px;height:82px;opacity:.42}
  .vxc-vault-stage,.vxc-forge-stage,.vxc-trade-stage{grid-template-columns:150px 1fr}
  .vxc-vault-stage .vxc-hero-media,.vxc-forge-stage .vxc-hero-media,.vxc-trade-stage .vxc-hero-media{height:135px}
}
@media(max-width:680px){
  .vxc-beacon{display:none}
  .vxc-activity{max-width:100%;font-size:7.8px}
  .vxc-activity>span:first-child{font-size:7px}
  .vxc-vault-stage,.vxc-forge-stage,.vxc-trade-stage{grid-template-columns:108px 1fr;padding:11px 13px;gap:10px}
  .vxc-vault-stage .vxc-hero-media,.vxc-forge-stage .vxc-hero-media,.vxc-trade-stage .vxc-hero-media{height:106px}
  .vxc-roompiece-copy b{font-size:13px}.vxc-roompiece-copy span{font-size:9.5px}
  .vxc-lucky-core{width:70px;height:70px;bottom:3%}
  .vxc-event-inner{height:min(560px,70vh)}.vxc-event-copy{bottom:1%}
}
@media(prefers-reduced-motion:reduce){
  .vxc-media>video{display:none!important}.vxc-roompiece::after,.jptotal,.vxc-stock-soon .vxs-crate{animation:none!important}
  .vx-btn::after,.vxs-btn::after,.vx-tabs button::after,.vxp-wallet::after{display:none}
  .vxc-event video{display:none}
}

.vxp-benefits .vxc-media{flex:none}.vxp-era-orb .vxc-media{margin:auto}.vxp-burnmap header .vxc-media{flex:none}

/* --------------------- dynamic state VFX: real positions ------------------ */
.vx-view.active{animation:vxcRoomIn .34s var(--vxc-cubic) both}
@keyframes vxcRoomIn{from{opacity:.65;transform:translateY(5px);filter:saturate(.85)}to{opacity:1;transform:none;filter:none}}
.vx-node.vxc-fed{animation:vxcFed .78s ease}.vx-node.vxc-struck{animation:vxcStruck 1.15s ease}
@keyframes vxcFed{35%{filter:drop-shadow(0 0 18px rgba(92,200,255,.62)) brightness(1.18);transform:scale(1.055)}}
@keyframes vxcStruck{20%{filter:brightness(1.8) drop-shadow(0 0 23px rgba(255,205,88,.8));transform:scale(1.08)}55%{filter:brightness(1.2) drop-shadow(0 0 14px rgba(255,166,35,.45))}100%{filter:none}}
.vxc-deploy-cart{position:absolute;z-index:28;width:34px;height:34px;pointer-events:none;left:0;top:0;will-change:transform,opacity;filter:drop-shadow(0 6px 12px rgba(0,0,0,.5))}
.vxc-deploy-cart img{width:100%;height:100%;object-fit:contain}.vxc-deploy-cart::after{content:"";position:absolute;inset:7px;border-radius:50%;background:radial-gradient(circle,#b7edff 0 12%,#57bfff 26%,rgba(74,177,255,.12) 58%,transparent 72%);box-shadow:0 0 12px rgba(73,185,255,.72);mix-blend-mode:screen}
.vxc-deploy-trail{position:absolute;z-index:16;height:2px;transform-origin:left center;pointer-events:none;background:linear-gradient(90deg,rgba(78,186,255,0),rgba(78,186,255,.7),rgba(255,181,51,.35),transparent);filter:blur(.2px);opacity:0;animation:vxcTrail .8s ease}
@keyframes vxcTrail{20%{opacity:.8}100%{opacity:0}}
.vxc-fly{position:fixed;z-index:99988;width:7px;height:7px;border-radius:50%;pointer-events:none;will-change:transform,opacity}
.vxc-fly.eth{background:#8fdcff;box-shadow:0 0 10px rgba(92,199,255,.85)}.vxc-fly.orix{background:#ffbf49;box-shadow:0 0 10px rgba(255,162,39,.8)}
.vx-num.vxc-scan,.vx-node.vxc-scan{animation:vxcScan .34s ease}@keyframes vxcScan{45%{filter:brightness(1.7) drop-shadow(0 0 12px rgba(255,185,57,.65));transform:scale(1.07)}}
.cwchat-trigger.vxc-chat-ping{animation:vxcChatPing .75s ease!important}@keyframes vxcChatPing{35%{box-shadow:0 0 0 4px rgba(255,171,38,.06),0 0 35px rgba(255,167,32,.45);transform:translateY(-2px)}}


/* ==========================================================================
   REV19 · premium motion / composition corrections
   ========================================================================== */

/* Generated videos must occupy the EXACT same box as their static fallback.
   No hidden scale compensation: that was the source of the down/offset swap. */
.vxc-media>img,.vxc-media>video{
  position:relative;
  grid-area:1/1;
  width:100%!important;
  height:100%!important;
  max-width:100%!important;
  max-height:100%!important;
  object-fit:contain!important;
  object-position:50% 50%!important;
  margin:0!important;
  inset:auto!important;
  transform:none!important;
  transform-origin:50% 50%!important
}
.vxc-media.vxc-playing>video,.vxc-media.vxc-always>video{opacity:1!important}
.vxc-media.vxc-playing>img,.vxc-media.vxc-always>img{opacity:0!important}
.vxc-media.vxc-always{pointer-events:none}

/* --------------------------- shared Robinhood loader ---------------------- */
.vxc-loader{
  position:fixed;inset:0;z-index:100500;display:grid;place-items:center;
  align-content:center;gap:8px;background:
  radial-gradient(circle at 50% 48%,rgba(35,220,105,.075),transparent 19%),
  radial-gradient(circle at 50% 52%,rgba(245,158,11,.055),transparent 31%),
  #040403;
  opacity:1;visibility:visible;transition:opacity .34s ease,visibility .34s ease;
  pointer-events:all
}
.vxc-loader.out{opacity:0;visibility:hidden;pointer-events:none}
.vxc-loader video{width:124px;height:124px;object-fit:contain;filter:drop-shadow(0 16px 34px rgba(0,0,0,.55))}
.vxc-loader-ring{
  position:absolute;left:50%;top:50%;width:166px;height:166px;transform:translate(-50%,-61%);
  border:1px solid rgba(53,223,115,.13);border-radius:50%;
  box-shadow:0 0 38px rgba(53,223,115,.035),inset 0 0 25px rgba(255,181,47,.02)
}
.vxc-loader-ring:before,.vxc-loader-ring:after{content:"";position:absolute;border-radius:50%;inset:9px;border-top:1px solid rgba(53,223,115,.55);animation:vxcLoaderSpin 2.1s linear infinite}
.vxc-loader-ring:after{inset:19px;border-top-color:rgba(255,190,62,.43);animation-duration:3.4s;animation-direction:reverse}
@keyframes vxcLoaderSpin{to{transform:rotate(360deg)}}
.vxc-loader small{margin-top:2px;font:700 7px/1 var(--mono);letter-spacing:.2em;color:#58d984;text-transform:uppercase}
.vxc-loader b{font:700 9px/1.2 var(--display);letter-spacing:.04em;color:#c7af88}
body.vxc-booting{overflow:hidden!important}

/* ------------------------ onboarding foreground depth -------------------- */
.ob .hero{position:relative;z-index:4}
.ob .socialrail{z-index:7}
.vxc-vines{
  position:absolute;inset:0 0 auto;z-index:2;height:min(48vh,430px);
  pointer-events:none;overflow:visible;opacity:.72;
  filter:drop-shadow(0 14px 18px rgba(0,0,0,.42));
  transform-origin:50% 0;animation:vxcVinesLayer 6.4s ease-in-out infinite alternate
}
.vxc-vines img{display:block;width:100%;height:auto;object-fit:contain;object-position:top center}
@keyframes vxcVinesLayer{
  0%{transform:translate3d(-1px,-2px,0) scale(1.003)}
  50%{transform:translate3d(2px,1px,0) scale(1.006)}
  100%{transform:translate3d(-1px,0,0) scale(1.002)}
}
.ob-kickers{display:flex;flex-direction:column;align-items:flex-start;gap:8px}
.ob-kickers .network{margin:0;padding:5px 8px 5px 7px;background:rgba(4,11,6,.48);border-color:rgba(53,223,115,.18)}
.ob-kickers .network img{width:58px;height:15px}
.ob-kickers .network small{font-size:6.8px}
.ob .vxc-activity{margin-top:10px}

/* No tiny decorative Robinhood device remains in the cave world. */
.ob .vxc-beacon{display:none!important}

/* ----------------------------- Hunt Golden Vein -------------------------- */
.vxc-golden-banner{
  top:11.5%!important;
  padding:10px 16px!important;
  border-color:rgba(255,211,90,.34)!important;
  font-size:10px!important;
  letter-spacing:.16em!important;
  box-shadow:0 14px 40px rgba(0,0,0,.32),0 0 34px rgba(255,188,35,.13)!important
}
.vxc-golden-banner i{width:8px!important;height:8px!important}

/* ----------------------------- Stock Drop hero --------------------------- */
.vxc-stock-media{width:116px!important;height:116px!important;flex:0 0 116px!important}
.vxs-crate{min-height:144px!important;align-items:center!important}
.vxs-crate .vxc-media{margin:-7px 3px -7px -5px!important}
.vxs-crate>img{width:116px!important;height:116px!important}
.vxs-hero::before{opacity:.025!important}

/* ----------------------- permanent living room anchors ------------------- */
.vxc-vault-stage,.vxc-forge-stage,.vxc-trade-stage{
  grid-template-columns:minmax(210px,290px) 1fr!important;
  min-height:190px;
  padding:16px 24px!important
}
.vxc-vault-stage .vxc-hero-media,.vxc-forge-stage .vxc-hero-media,.vxc-trade-stage .vxc-hero-media{
  height:176px!important;width:100%;pointer-events:none
}
.vxc-vault-stage .vxc-hero-media video,.vxc-forge-stage .vxc-hero-media video,.vxc-trade-stage .vxc-hero-media video{opacity:1!important}

/* Refinery is its own row now; it can no longer break the Withdraw metric. */
.vxc-refinery-stage{
  display:grid;grid-template-columns:120px minmax(0,1fr);align-items:center;gap:15px;
  min-height:118px;padding:10px 18px;margin:-3px 0 14px
}
.vxc-refinery-stage .vxc-refinery-media{width:112px;height:96px}
.vxc-refinery-stage:hover{border-color:rgba(255,184,55,.22)}
.vxc-refinery-stage .vxc-roompiece-copy b{font-size:15px}

/* Workshop withdrawal: balance and MAX are readable without adding clutter. */
.vx-withdrawcell{justify-content:center}
.vx-wd-head{display:flex;align-items:center;justify-content:space-between;gap:10px}
.vx-wd-title{display:flex!important;align-items:center;gap:8px!important}
.vx-wd-title>img{width:33px;height:33px;object-fit:contain;filter:drop-shadow(0 5px 10px rgba(249,115,22,.2))}
.vx-wd-title>span{display:block!important}
.vx-wd-title small{display:block}
.vx-wd-title em{display:block;margin-top:4px;font:600 8px/1.2 var(--mono);font-style:normal;color:#766856;text-transform:none;letter-spacing:.03em}
.vx-wd-title em b{display:inline!important;font:700 9px/1 var(--mono)!important;color:#e4bd72!important}
.vx-wline .vx-max{
  flex:0 0 auto;height:34px;padding:0 9px;border:1px solid rgba(255,200,87,.18);border-radius:8px;
  background:rgba(255,200,87,.04);color:#d4aa64;font:750 7px/1 var(--mono);letter-spacing:.08em;cursor:pointer
}
.vx-wline .vx-max:hover{border-color:rgba(255,200,87,.38);background:rgba(255,200,87,.08);color:#ffd071}

/* --------------------------- How It Works flows --------------------------- */
.vxp-valueflow{margin:10px 0 12px;padding:14px;border:1px solid rgba(255,200,87,.105);border-radius:15px;background:linear-gradient(145deg,rgba(255,198,80,.025),rgba(0,0,0,.13))}
.vxp-valueflow>header{display:flex;align-items:flex-end;justify-content:space-between;gap:16px;margin-bottom:10px}
.vxp-valueflow h3{margin:4px 0 0;font:780 14px/1.15 var(--display);color:#e5d0b1}
.vxp-valueflow>header p{max-width:390px;margin:0;font-size:8px;line-height:1.4;text-align:right;color:#796b59}
.vxp-flowcard{padding:11px;border:1px solid rgba(255,255,255,.04);border-radius:11px;background:rgba(0,0,0,.15)}
.vxp-flowcard+.vxp-flowcard{margin-top:7px}
.vxp-flowtitle{display:flex;align-items:end;justify-content:space-between;gap:12px;margin-bottom:8px}
.vxp-flowtitle b{display:block;font:730 9.5px/1.15 var(--display);color:#d9c3a1}
.vxp-flowtitle small{display:block;margin-top:3px;font-size:7.2px;color:#746655}
.vxp-flowtitle em{font:650 7px/1 var(--mono);font-style:normal;color:#8b795f;white-space:nowrap}
.vxp-splitbar{display:flex;width:100%;height:25px;overflow:hidden;border:1px solid rgba(255,255,255,.055);border-radius:8px;background:#0b0806}
.vxp-splitbar>i{position:relative;display:flex;align-items:center;min-width:3px;width:calc(var(--w) * 1%);font-style:normal;overflow:hidden}
.vxp-splitbar>i span{padding:0 8px;font:700 6.7px/1 var(--mono);letter-spacing:.04em;white-space:nowrap;color:#160f07}
.vxp-huntbar>i:nth-child(1){background:linear-gradient(90deg,#e99819,#ffc85a)}
.vxp-huntbar>i:nth-child(2){background:#75b7d6}.vxp-huntbar>i:nth-child(3){background:#c17824}.vxp-huntbar>i:nth-child(4){background:#9b6b29}.vxp-huntbar>i:nth-child(5){background:#55483b}
.vxp-huntbar>i:nth-child(n+2) span{display:none}
.vxp-flowlegend{display:flex;flex-wrap:wrap;gap:8px 12px;margin-top:7px}
.vxp-flowlegend span{display:flex;align-items:center;gap:4px;font-size:6.8px;color:#746654}
.vxp-flowlegend i{width:6px;height:6px;border-radius:2px;background:#ffc857}.vxp-flowlegend span:nth-child(2) i{background:#75b7d6}.vxp-flowlegend span:nth-child(3) i{background:#c17824}.vxp-flowlegend span:nth-child(4) i{background:#9b6b29}.vxp-flowlegend span:nth-child(5) i{background:#55483b}
.vxp-orixbar>i:first-child{background:linear-gradient(90deg,#f0a22b,#ffd36a)}.vxp-orixbar>i:last-child{background:linear-gradient(90deg,#665344,#3d342d)}
.vxp-stockbar>i:first-child{background:linear-gradient(90deg,#37c96c,#6ee796)}.vxp-stockbar>i:last-child{background:#5c5145}
.vxp-flowcard>p{margin:7px 1px 0;font-size:7.5px;line-height:1.45;color:#786a59}.vxp-flowcard>p b{color:#d8bf98}

/* ------------------------------ responsive ------------------------------- */
@media(max-width:930px){
  .vxc-vines{height:min(34vh,260px);opacity:.58}
  .ob-kickers{gap:6px}
  .vxc-vault-stage,.vxc-forge-stage,.vxc-trade-stage{grid-template-columns:160px 1fr!important;min-height:150px}
  .vxc-vault-stage .vxc-hero-media,.vxc-forge-stage .vxc-hero-media,.vxc-trade-stage .vxc-hero-media{height:138px!important}
}
@media(max-width:700px){
  .vxc-loader video{width:105px;height:105px}.vxc-loader-ring{width:142px;height:142px}
  .vxc-vines{height:180px;opacity:.44}
  .vxc-golden-banner{top:9%!important;font-size:8px!important;padding:8px 11px!important;max-width:82%;white-space:nowrap}
  .vxc-stock-media{width:96px!important;height:96px!important;flex-basis:96px!important}
  .vxs-crate{min-height:120px!important}
  .vxc-vault-stage,.vxc-forge-stage,.vxc-trade-stage{grid-template-columns:112px 1fr!important;padding:11px 13px!important}
  .vxc-vault-stage .vxc-hero-media,.vxc-forge-stage .vxc-hero-media,.vxc-trade-stage .vxc-hero-media{height:108px!important}
  .vxc-refinery-stage{grid-template-columns:84px 1fr;padding:9px 11px}.vxc-refinery-stage .vxc-refinery-media{width:80px;height:74px}
  .vxp-valueflow>header{display:block}.vxp-valueflow>header p{margin-top:6px;max-width:none;text-align:left}
  .vxp-flowtitle{align-items:flex-start}.vxp-flowtitle em{font-size:6.5px}
}
@media(max-width:430px){
  .vxc-vines{height:145px;opacity:.34}
  .vxc-stock-media{width:88px!important;height:88px!important;flex-basis:88px!important}
  .vx-wline{flex-wrap:wrap}.vx-wline input{flex:1 1 100px}.vx-wline #vx-wd-go{flex:1 0 100%}
  .vxp-splitbar>i span{font-size:5.8px;padding:0 5px}
}
@media(prefers-reduced-motion:reduce){
  .vxc-loader-ring:before,.vxc-loader-ring:after,.vxc-vines{animation:none!important}
}

#vxp-guide-flows{scroll-margin-top:56px}

/* Dedicated Lucky Jackpot is a full-room 16:9 cinematic, not a square prop. */
.vxc-event.lucky{background:radial-gradient(circle at 50% 45%,rgba(255,143,28,.13),rgba(0,0,0,.68) 74%)}
.vxc-event.lucky .vxc-event-inner{width:min(1180px,94vw);height:auto;aspect-ratio:16/9}
.vxc-event.lucky video{border-radius:20px;overflow:hidden;box-shadow:0 34px 100px rgba(0,0,0,.52),0 0 50px rgba(244,144,25,.08)}
.vxc-event.lucky .vxc-event-copy{bottom:2%}
.vxc-event.lucky .vxc-event-copy b{color:#ffd066;font-size:clamp(21px,3.2vw,34px);text-shadow:0 0 22px rgba(255,175,35,.22)}

/* Card text selectors must never leak onto the media wrapper itself. */
.ob .reward>.vxc-media{display:grid!important;margin:0!important;color:inherit!important;font-size:initial!important;line-height:normal!important}
.vxs-crate>.vxc-media{display:grid!important;margin-top:0!important}
.vxp-benefits article>.vxc-media{display:grid!important;margin:0!important}

/* ===== vein-responsive-rev20.css ===== */
/* ========================================================================== 
   CaveWatch · The Vein · REV20 responsive system
   Geometry-first: exact 2752×1536 Hunt/Lucky art ratio on every viewport.
   Phone HUDs shrink; gameplay coordinates never chase a cropped `cover` image.
   ========================================================================== */
:root{--v20-board-ratio:1.791666667;--v20-safe-l:max(8px,env(safe-area-inset-left));--v20-safe-r:max(8px,env(safe-area-inset-right));--v20-safe-b:max(12px,env(safe-area-inset-bottom))}
html{-webkit-text-size-adjust:100%;text-size-adjust:100%}
img,video{max-width:100%}
button,a,input{touch-action:manipulation}

/* =============================== LANDING ================================ */
.ob .top,.ob .hero{width:min(1780px,calc(100% - clamp(28px,4vw,76px)))}
.ob .hero{grid-template-columns:minmax(0,1.42fr) minmax(330px,.72fr);gap:clamp(28px,4.8vw,90px)}
.ob .copy{min-width:0;position:relative;z-index:5}
.v20-networkline{display:inline-flex!important;align-items:center!important;gap:8px!important;white-space:nowrap}
.v20-networkline>b{font-weight:700;color:#d8b774}
.v20-networkline>small{font:700 8px/1 var(--mono);letter-spacing:.13em;color:#8ecb9b}
.v20-networkline>img{width:66px;height:18px;object-fit:contain;object-position:left center;filter:drop-shadow(0 0 8px rgba(41,213,104,.18))}
.vxc-vines{height:min(43vh,400px)!important;overflow:hidden!important;opacity:.64!important;z-index:2!important}
.vxc-vines video{display:block;width:100%;height:auto;min-width:100%;object-fit:contain;object-position:top center;filter:drop-shadow(0 15px 20px rgba(0,0,0,.34));transform:translateZ(0)}
.ob .hero,.ob .top,.ob .socialrail{z-index:5}
.ob .rewards{max-width:820px}
.ob .reward{min-width:0}
.ob .jackpot{width:100%;max-width:480px;justify-self:end}

/* Tall/large displays: use more space without turning typography into signage. */
@media(min-width:2200px){
  .ob .top,.ob .hero{width:min(2050px,calc(100% - 110px))}
  .ob .hero{grid-template-columns:minmax(0,1040px) minmax(420px,530px);gap:120px}
  .ob h1{font-size:clamp(92px,5vw,128px)}
  .ob .lead{font-size:20px;max-width:790px}.ob .reward{min-height:122px}.ob .jackpot{max-width:530px}
  .vx-shell{max-width:2140px!important}
}
/* Short 13–15 inch laptop band. */
@media(min-width:1000px) and (max-height:850px){
  .ob .top{padding:12px 0}.ob .hero{min-height:calc(100svh - 64px);padding:8px 0 28px;align-items:center}
  .ob h1{font-size:clamp(54px,6vw,82px);margin:11px 0 12px}.ob .lead{font-size:14px;margin-bottom:15px;max-width:650px}
  .ob .enter{min-height:48px}.ob .rewards{margin-top:16px}.ob .reward{min-height:84px;padding:10px}.ob .jackpot{min-height:430px;padding:16px;max-width:410px}.ob .jpmachine{width:min(215px,75%)}
  .vxc-vines{height:min(38vh,270px)!important;opacity:.5!important}
}
/* Square-ish desktop/tablet windows. */
@media(max-aspect-ratio:5/4) and (min-width:780px) and (max-width:1200px){
  .ob .hero{grid-template-columns:minmax(0,1fr) minmax(300px,350px);gap:28px}.ob h1{font-size:clamp(48px,6.3vw,74px)}
  .ob .lead{font-size:14px}.ob .rewards{grid-template-columns:1fr;max-width:440px}.ob .reward{min-height:72px}.ob .jackpot{min-height:450px}
}

/* ========================= VEIN GLOBAL / TOOLBAR ======================== */
.vx-shell{width:100%!important;max-width:2140px!important;margin-inline:auto!important;padding-left:max(10px,1.35vw,env(safe-area-inset-left))!important;padding-right:max(10px,1.35vw,env(safe-area-inset-right))!important}
.vx-portalbar{max-width:100%;min-width:0}.vx-portalbar>*{min-width:0}
.vx-portalbar .vx-tabs{min-width:0}.vx-portalbar .vx-tabs button{min-width:0}
.vxp-gamehead,.vx-pagehead,.vxs-hero,.vx-ghero{max-width:100%;overflow:hidden}
.vxp-gamecopy,.vxp-gamecopy p,.vx-pagehead>div,.vxs-copy{min-width:0}
.vxp-gamecopy p,.vx-pagehead p,.vxs-copy p{overflow-wrap:anywhere}

/* Exact map geometry.  The JS's `coverXform()` becomes a 1:1 mapping because
   the stage and the source art now share the exact same aspect ratio. */
.vx-stagewrap,.vx-lwrap{width:100%!important;margin-inline:auto!important;overflow:hidden!important}
.vx-stage,.vx-lstage{
  width:100%!important;height:auto!important;min-height:0!important;max-height:none!important;aspect-ratio:2752/1536!important;
  contain:layout paint;isolation:isolate
}
.vx-stage .vx-bgimg,.vx-lstage .vx-lbg{inset:0!important;background-position:center!important;background-size:100% 100%!important;transform:none!important}
.vx-stage .vx-bgimg{background-repeat:no-repeat!important}.vx-lstage .vx-lbg{background-repeat:no-repeat!important}

/* Keep the desktop board inside short laptop viewports while preserving ratio. */
@media(min-width:1181px) and (max-height:920px){
  .vx-stagewrap,.vx-lwrap{max-width:calc((100svh - 178px) * var(--v20-board-ratio))!important}
}

/* Header/set-piece loops: responsive but always visually substantial. */
.vxc-vault-stage,.vxc-forge-stage,.vxc-trade-stage{width:100%;grid-template-columns:clamp(190px,19vw,320px) minmax(0,1fr)!important;min-height:clamp(155px,12vw,220px)!important}
.vxc-vault-stage .vxc-hero-media,.vxc-forge-stage .vxc-hero-media,.vxc-trade-stage .vxc-hero-media{height:clamp(140px,11vw,205px)!important}
.vxc-roompiece-copy{min-width:0}.vxc-roompiece-copy b{font-size:clamp(14px,1.15vw,20px)}.vxc-roompiece-copy span{font-size:clamp(9px,.75vw,12px)}

/* Never blank the static fallback before an always-loop has produced frames. */
.vxc-media.vxc-always>img{opacity:.12!important}.vxc-media.vxc-always>video{opacity:1!important}

/* ========================== HUNT / LUCKY DESKTOP ========================= */
@media(min-width:1181px){
  .vx-hud-pool{left:clamp(10px,1.1vw,22px)!important;top:clamp(10px,1.1vw,22px)!important}
  .vx-hud-clock{right:clamp(10px,1.1vw,22px)!important;top:clamp(10px,1.1vw,22px)!important}
  .vx-hud-motherlode{left:clamp(10px,1.1vw,22px)!important;bottom:clamp(10px,1.1vw,22px)!important}
  .vx-hud-kit{right:clamp(10px,1.1vw,22px)!important;bottom:clamp(10px,1.1vw,22px)!important}
}

/* ============================= TABLET =================================== */
@media(max-width:1180px){
  .vx-shell{padding-left:var(--v20-safe-l)!important;padding-right:var(--v20-safe-r)!important}
  .vxp-gamehead{gap:12px!important}.vxp-gamechips{gap:5px!important}
  .vx-hud-pool{min-width:190px!important;padding:10px 12px!important}.vx-hudbig{font-size:22px!important}
  .vx-hud-clock{padding:8px 10px!important}.vx-hud-clock .vx-dial{width:52px!important;height:52px!important}
  .vx-hud-kit{padding:8px!important;gap:8px!important}.vx-kitart{width:44px!important;height:44px!important}
  .vxc-vault-stage,.vxc-forge-stage,.vxc-trade-stage{grid-template-columns:160px minmax(0,1fr)!important}
}

/* =========================== PHONE / PHABLET ============================ */
@media(max-width:820px){
  .vx-shell{padding:5px var(--v20-safe-r) calc(74px + env(safe-area-inset-bottom)) var(--v20-safe-l)!important}
  .vx-portalbar{top:max(4px,env(safe-area-inset-top))!important;margin-bottom:5px!important;padding:5px!important;min-height:52px!important}
  .vxp-actions{gap:4px!important}.vxp-menu,.vxp-help,.vxp-sound,.vxp-wallet,.vxp-connect{min-height:40px!important}
  .vxp-gamehead{padding:9px 10px!important;margin-bottom:5px!important}.vxp-gamecopy h1{font-size:20px!important}.vxp-gamecopy p{font-size:8.4px!important;line-height:1.42!important}
  .vxp-gamechips{margin-top:7px!important;display:flex!important;overflow-x:auto;flex-wrap:nowrap!important;scrollbar-width:none}.vxp-gamechips::-webkit-scrollbar{display:none}.vxp-gamechips>span{flex:0 0 auto;min-height:27px!important;font-size:7.2px!important;padding:0 7px!important}
  .vx-ticker{overflow-x:auto!important;white-space:nowrap!important;scrollbar-width:none}.vx-ticker::-webkit-scrollbar{display:none}.vx-ticker .vx-seg{flex:0 0 auto}

  /* Board is the art ratio, not a tall cropped desktop canvas. */
  .vx-stagewrap,.vx-lwrap{padding:3px!important;border-radius:11px!important}
  .vx-stage,.vx-lstage{border-radius:9px!important}

  /* Hunt HUDs become compact overlays so they do not swallow the quarry. */
  .vx-hud{backdrop-filter:blur(6px)!important;-webkit-backdrop-filter:blur(6px)!important;border-radius:9px!important;box-shadow:0 7px 18px rgba(0,0,0,.38)!important}
  .vx-hud-pool{left:5px!important;top:5px!important;min-width:0!important;width:auto!important;max-width:38%!important;padding:5px 7px!important;gap:1px!important}
  .vx-hudlbl{font-size:5.8px!important;letter-spacing:.12em!important}.vx-hudbig{font-size:clamp(12px,3.3vw,18px)!important}.vx-hudsub{font-size:6.2px!important}.vx-hudchips{gap:3px!important;margin-top:3px!important}.vx-hchip{padding:2px 4px!important;font-size:5.3px!important}.vx-hudnote{display:none!important}
  .vx-hud-clock{right:5px!important;top:5px!important;padding:4px 6px!important;gap:5px!important}.vx-hud-clock .vx-dial{width:34px!important;height:34px!important}.vx-dial-core strong{font-size:7px!important}.vx-clocktxt small{font-size:5px!important}.vx-clocktxt b{font-size:8px!important}.vx-clocktxt span{font-size:5.5px!important}
  .vx-hud-motherlode{display:flex!important;left:5px!important;right:auto!important;bottom:5px!important;width:min(62%,310px)!important;min-width:0!important;padding:4px 6px!important;gap:5px!important;border-radius:9px!important}.vx-hud-motherlode>img{width:28px!important;height:28px!important}.vxp-mltitle{margin-bottom:2px!important}.vxp-mltitle>span{font-size:5px!important}.vxp-mltitle>b{font-size:6.5px!important}.vx-mldraws{gap:3px!important}.vx-mldraws>span{padding:3px 4px!important;border-radius:6px!important}.vx-mldraws>span b{font-size:7px!important}.vx-mldraws>span small{display:none!important}
  .vx-hud-kit{right:5px!important;bottom:5px!important;padding:4px 5px!important;gap:4px!important;max-width:34%!important}.vx-hud-kit .vx-kitart{width:26px!important;height:26px!important}.vx-kittxt small,.vx-kittxt span{display:none!important}.vx-kittxt b{font-size:7px!important;max-width:58px;overflow:hidden;text-overflow:ellipsis}.vx-hud-kit .vx-btn{min-height:25px!important;padding:0 6px!important;font-size:6px!important}
  .vx-ethplate{display:none!important}

  /* Chamber art + number stay large enough to read without covering neighbors. */
  .vx-houses .vx-house{width:42px!important;height:37px!important;margin:-18.5px 0 0 -21px!important}
  .vx-node{width:38px!important;height:34px!important;margin:-17px 0 0 -19px!important;border-radius:8px!important}
  .vx-node .vx-nno{font-size:10.5px!important}.vx-node:hover,.vx-node.hov,.vx-node:focus-visible{transform:translateY(-2px) scale(1.03)!important}.vx-node.sel{transform:translateY(-1px) scale(1.02)!important}

  /* Lucky room overlays become compact. Tunnel zones remain untouched. */
  .vx-tplate{width:29px!important;height:29px!important;border-radius:8px!important;font-size:10px!important}.vx-selchip{padding:4px 7px!important;font-size:6px!important;gap:4px!important}
  .vx-lstats{position:absolute!important;left:5px!important;right:5px!important;top:5px!important;margin:0!important;display:grid!important;grid-template-columns:1fr 1fr!important;gap:4px!important;pointer-events:none}.vx-lstat{min-height:0!important;padding:4px 6px!important;gap:5px!important;border-radius:8px!important}.vx-lstat img{width:23px!important;height:23px!important}.vx-lstat small{font-size:5.3px!important;letter-spacing:.08em!important}.vx-lstat b{font-size:8.5px!important}.vx-lstat-bal .vx-btn{pointer-events:auto;min-height:24px!important;padding:0 5px!important;font-size:6px!important}.vx-lstat:nth-child(n+3){margin-top:0!important}
  .vx-lconsole-shell{position:static!important;margin-top:7px!important;border-radius:12px!important}.vx-lhud{margin-top:0!important}.vx-lhud-in{padding:8px!important}.vx-numrail{gap:5px!important}.vx-numrail .vx-num{min-width:42px!important;width:42px!important;height:42px!important}.vx-num b{font-size:14px!important;line-height:42px!important}

  /* Every secondary page compresses before stacking. */
  .vx-metrics{grid-template-columns:repeat(2,minmax(0,1fr))!important;gap:6px!important;margin-bottom:7px!important}.vx-metrics>article{padding:10px!important;min-height:74px}.vx-metrics small{font-size:7px!important}.vx-metrics b{font-size:17px!important}.vx-metrics span{font-size:8px!important}
  .vxc-vault-stage,.vxc-forge-stage,.vxc-trade-stage{grid-template-columns:96px minmax(0,1fr)!important;min-height:108px!important;padding:8px 10px!important;gap:8px!important;margin-bottom:7px!important}.vxc-vault-stage .vxc-hero-media,.vxc-forge-stage .vxc-hero-media,.vxc-trade-stage .vxc-hero-media{height:94px!important}.vxc-roompiece-copy small{font-size:6px!important}.vxc-roompiece-copy b{font-size:11px!important;margin-top:4px!important}.vxc-roompiece-copy span{font-size:7.5px!important;line-height:1.35!important;margin-top:4px!important}
  .vxc-refinery-stage{grid-template-columns:70px 1fr!important;min-height:82px!important;padding:6px 8px!important;gap:6px!important}.vxc-refinery-stage .vxc-refinery-media{width:66px!important;height:66px!important}
  .vxs-hero{padding:14px 12px!important}.vxs-copy h2{font-size:26px!important}.vxs-copy p{font-size:9px!important;line-height:1.45!important}.vxs-hero-tags{gap:4px!important}.vxs-hero-tags span{font-size:6.5px!important}.vxs-threshold{padding:10px!important}.vxs-threshold b{font-size:18px!important}
  .vxc-stock-media{width:82px!important;height:82px!important;flex-basis:82px!important}.vxs-crate{min-height:104px!important}
  .vx-items{gap:7px!important}.vx-item{padding:11px!important}.vxc-item-media{width:92px!important;height:92px!important}
  .vxp-valueflow{padding:9px!important}.vxp-flowcard{padding:8px!important}.vxp-splitbar{height:21px!important}
}

/* Narrow phones: iPhone 8/SE through S8 width class. */
@media(max-width:430px){
  .vx-shell{padding-left:max(4px,env(safe-area-inset-left))!important;padding-right:max(4px,env(safe-area-inset-right))!important}
  .vxp-gamehead{padding:7px 8px!important}.vxp-gamecopy h1{font-size:18px!important}.vxp-gamecopy p{font-size:7.7px!important}.vxp-gamechips>span{font-size:6.6px!important;min-height:25px!important}
  .vx-houses .vx-house{width:36px!important;height:32px!important;margin:-16px 0 0 -18px!important}.vx-node{width:32px!important;height:30px!important;margin:-15px 0 0 -16px!important}.vx-node .vx-nno{font-size:9px!important}
  .vx-hud-pool{max-width:40%!important;padding:4px 5px!important}.vx-hudsub{display:none!important}.vx-hudchips .vx-hchip:nth-child(3){display:none!important}
  .vx-hud-clock .vx-dial{width:30px!important;height:30px!important}.vx-clocktxt span{display:none!important}
  .vx-hud-motherlode{width:65%!important}.vx-hud-motherlode>img{display:none!important}.vx-hud-kit{max-width:31%!important}.vx-hud-kit .vx-btn{display:none!important}
  .vx-tplate{width:25px!important;height:25px!important;font-size:9px!important}.vx-selchip{display:none!important}
  .vx-lstats{grid-template-columns:1fr 1fr!important}.vx-lstat{padding:3px 4px!important}.vx-lstat img{display:none!important}.vx-lstat b{font-size:7.5px!important}
  .vx-metrics{gap:4px!important}.vx-metrics>article{padding:8px!important;min-height:66px}.vx-metrics b{font-size:15px!important}
  .vxc-vault-stage,.vxc-forge-stage,.vxc-trade-stage{grid-template-columns:78px minmax(0,1fr)!important;padding:6px 7px!important}.vxc-vault-stage .vxc-hero-media,.vxc-forge-stage .vxc-hero-media,.vxc-trade-stage .vxc-hero-media{height:78px!important}
  .vxc-roompiece-copy span{font-size:7px!important}.vxc-roompiece-copy b{font-size:10px!important}
  .vxc-stock-media{width:72px!important;height:72px!important;flex-basis:72px!important}
}
@media(max-width:375px){
  .vx-houses .vx-house{width:32px!important;height:28px!important;margin:-14px 0 0 -16px!important}.vx-node{width:29px!important;height:27px!important;margin:-13.5px 0 0 -14.5px!important}.vx-node .vx-nno{font-size:8px!important}
  .vx-hud-motherlode{width:68%!important}.vx-hudbig{font-size:11px!important}.vxp-mltitle>span{display:none!important}
}

/* Phone landscape: maximize the quarry, keep controls scrollable below. */
@media(max-height:520px) and (orientation:landscape){
  .vx-portalbar{position:relative!important;top:0!important}.vxp-gamehead{display:flex!important;padding:5px 8px!important}.vxp-gamecopy p{display:none!important}.vxp-gamechips{margin-top:0!important}
  .vx-stagewrap,.vx-lwrap{max-width:calc((100svh - 105px) * var(--v20-board-ratio))!important}.vx-stage,.vx-lstage{min-height:0!important;max-height:none!important}
  .vxc-vault-stage,.vxc-forge-stage,.vxc-trade-stage{min-height:88px!important}.vxc-vault-stage .vxc-hero-media,.vxc-forge-stage .vxc-hero-media,.vxc-trade-stage .vxc-hero-media{height:78px!important}
}

/* ========================= LANDING PHONE ================================ */
@media(max-width:760px){
  .ob{overflow-x:hidden;overflow-y:auto}.ob .top{width:calc(100% - 24px);padding:max(11px,env(safe-area-inset-top)) 0 8px}.ob .brand img{width:31px;height:34px}.ob .brand strong{font-size:14px}.ob .brand small{font-size:6.5px}.ob .topnote{display:none}.ob .audiobtn{width:36px;height:36px}
  .ob .hero{width:calc(100% - 24px);grid-template-columns:1fr;min-height:0;padding:28px 0 max(68px,env(safe-area-inset-bottom));gap:18px;align-items:start}.ob .copy{padding:0}.ob h1{font-size:clamp(43px,14vw,66px);margin:12px 0 12px;line-height:.91}.ob .lead{font-size:12.5px;line-height:1.45;margin-bottom:15px;max-width:94%}.ob .enter{min-height:48px;padding:0 20px;font-size:11px}
  .v20-networkline{gap:6px!important;font-size:7.5px!important;letter-spacing:.13em!important}.v20-networkline>small{font-size:6.4px}.v20-networkline>img{width:56px;height:15px}.v20-networkline>i{width:15px!important}
  .ob .rewards{grid-template-columns:repeat(3,minmax(0,1fr));gap:5px;margin-top:14px;max-width:none}.ob .reward{min-height:74px;padding:7px 5px;grid-template-columns:30px minmax(0,1fr);gap:5px;border-radius:10px}.ob .reward img,.ob .vxc-card-media{width:30px!important;height:30px!important}.ob .reward b{font-size:7.5px}.ob .reward span{font-size:6.6px;line-height:1.25;margin-top:3px}
  .ob .jackpot{justify-self:stretch;max-width:none;min-height:310px;padding:13px;border-radius:18px}.ob .jpmachine{width:min(180px,55%);margin:-4px auto -20px}.ob .jptotal{font-size:43px}.ob .jpsplit{margin-top:10px}.ob .jpnote{font-size:6.5px}.ob .socialrail{right:8px;bottom:max(8px,env(safe-area-inset-bottom))}
  .vxc-vines{height:130px!important;opacity:.45!important}.vxc-vines video{width:150%;max-width:none;transform:translateX(-16.7%)}
}
@media(max-width:390px){
  .ob .hero{width:calc(100% - 18px)}.ob h1{font-size:clamp(40px,13.8vw,56px)}.ob .lead{font-size:11.5px}.ob .reward{grid-template-columns:26px 1fr}.ob .reward img,.ob .vxc-card-media{width:26px!important;height:26px!important}.ob .reward span{display:none}.ob .reward{min-height:58px}.ob .jackpot{min-height:286px}.ob .jpmachine{width:155px}.ob .jptotal{font-size:38px}
}

@media(prefers-reduced-motion:reduce){
  .vxc-vines video{display:none!important}.vxc-vines{background:url('assets/vein/cinematic/entrance-vines-rev20.webp') top center/100% auto no-repeat;animation:none!important}
}

/* ===== vein-responsive-rev21.css ===== */
/* ========================================================================== 
   CaveWatch · The Vein · REV21 phone correction
   Screenshot-driven pass: mobile Hunt/Lucky readability, landing composition,
   permanent room animations and larger Robinhood transition.
   ========================================================================== */

/* The leafy foreground is intentionally removed from onboarding in REV21. */
.vxc-vines{display:none!important}

/* Essential game media is still allowed to play when a phone OS advertises
   reduced motion. Reduced-motion continues to suppress decorative CSS motion. */
@media(prefers-reduced-motion:reduce){
  .vxc-media>video{display:block!important}
  .ob-bg{display:block!important}
}
.vxc-media.vxc-playing:not(.vxc-video-ready)>img,
.vxc-media.vxc-always:not(.vxc-video-ready)>img{opacity:1!important}
.vxc-media.vxc-playing:not(.vxc-video-ready)>video,
.vxc-media.vxc-always:not(.vxc-video-ready)>video{opacity:0!important}
.vxc-media.vxc-video-ready.vxc-playing>img,
.vxc-media.vxc-video-ready.vxc-always>img{opacity:0!important}
.vxc-media.vxc-video-ready.vxc-playing>video,
.vxc-media.vxc-video-ready.vxc-always>video{opacity:1!important}

/* Bigger branded loading state between entrance / Vein transitions. */
.vxc-loader video{width:190px!important;height:190px!important}
.vxc-loader-ring{width:250px!important;height:250px!important;transform:translate(-50%,-58%)!important}
.vxc-loader small{font-size:8px!important;letter-spacing:.22em!important}
.vxc-loader b{font-size:11px!important;letter-spacing:.06em!important}

/* =======================================================================
   LANDING — phone composition
   ======================================================================= */
@media(max-width:700px){
  .ob{overflow-x:hidden!important;overflow-y:auto!important;min-height:100svh!important}
  .ob .top{width:calc(100% - 24px)!important;padding:13px 0 6px!important}
  .ob .brand img{width:34px!important;height:37px!important}.ob .brand strong{font-size:16px!important}.ob .brand small{font-size:7.5px!important}
  .ob .hero{width:calc(100% - 24px)!important;min-height:0!important;padding:clamp(116px,20vh,165px) 0 14px!important;gap:14px!important;overflow:visible!important}
  .ob .copy,.ob .lead,.ob .cta,.ob .rewards,.ob .jackpot,.ob .jpbody,.ob .jpsplit{min-width:0!important;max-width:100%!important;width:100%!important}
  .ob .eyebrow{font-size:7.2px!important;letter-spacing:.14em!important;gap:6px!important;max-width:100%;white-space:nowrap}.ob .eyebrow i{width:15px!important}.v20-networkline>img{width:57px!important;height:15px!important}.v20-networkline>small{font-size:6.5px!important}
  .ob h1{font-size:clamp(40px,12.3vw,54px)!important;line-height:.92!important;letter-spacing:-.068em!important;margin:12px 0 12px!important;max-width:100%!important}
  .ob .lead{font-size:12.2px!important;line-height:1.48!important;margin:0 0 16px!important;overflow-wrap:anywhere!important}
  .ob .enter{width:100%!important;min-height:52px!important;border-radius:13px!important;font-size:11px!important;padding:0 18px!important;justify-content:space-between!important}

  /* Three benefits are visible at once. Stock Drops can no longer sit off-screen. */
  .ob .rewards{display:grid!important;grid-template-columns:repeat(3,minmax(0,1fr))!important;gap:6px!important;margin:13px 0 0!important;padding:0!important;overflow:visible!important;scroll-snap-type:none!important}
  .ob .reward{min-width:0!important;min-height:76px!important;padding:8px 6px!important;display:flex!important;flex-direction:column!important;align-items:center!important;justify-content:center!important;gap:5px!important;text-align:center!important;border-radius:12px!important}
  .ob .reward .vxc-card-media,.ob .reward>img{width:36px!important;height:36px!important;flex:0 0 36px!important}.ob .reward b{font-size:8.5px!important;line-height:1.1!important}.ob .reward span{display:none!important}

  /* Motherlode stays premium but fits one phone width with both jackpot tiers. */
  .ob .jackpot{box-sizing:border-box!important;display:grid!important;grid-template-columns:88px minmax(0,1fr)!important;gap:8px!important;padding:12px!important;border-radius:17px!important;min-height:0!important;overflow:hidden!important;justify-self:stretch!important}
  .ob .jphead{grid-column:1/-1!important}.ob .jpmachine{width:86px!important;height:86px!important;margin:0 auto!important;align-self:center!important}.ob .jptotal{font-size:clamp(28px,8vw,36px)!important;text-align:left!important;white-space:nowrap!important;margin-top:5px!important}.ob .jplabel{text-align:left!important;font-size:6.5px!important}.ob .jpsplit{display:grid!important;grid-template-columns:1fr 1fr!important;gap:5px!important;margin-top:8px!important}.ob .jpsplit span{min-width:0!important;padding:7px 6px!important}.ob .jpsplit small{font-size:5.4px!important;letter-spacing:.07em!important}.ob .jpsplit b{font-size:8.7px!important;white-space:nowrap!important}.ob .jpnote{grid-column:1/-1!important;font-size:6px!important;overflow:hidden!important}.ob .livepill{font-size:5.8px!important;padding:5px 7px!important}

  /* Community links become part of document flow instead of covering jackpot UI. */
  .ob .socialrail{position:relative!important;right:auto!important;bottom:auto!important;inset:auto!important;display:flex!important;flex-direction:row!important;justify-content:center!important;gap:7px!important;width:100%!important;margin:4px auto calc(12px + env(safe-area-inset-bottom))!important;z-index:8!important}.ob .socialrail a{width:36px!important;height:36px!important;border-radius:11px!important}.ob .socialrail svg{width:15px!important;height:15px!important}
}
@media(max-width:370px){
  .ob .hero{width:calc(100% - 18px)!important;padding-top:110px!important}.ob h1{font-size:39px!important}.ob .lead{font-size:11.5px!important}.ob .reward{min-height:70px!important}.ob .reward .vxc-card-media,.ob .reward>img{width:31px!important;height:31px!important;flex-basis:31px!important}.ob .reward b{font-size:7.5px!important}.ob .jackpot{grid-template-columns:76px minmax(0,1fr)!important}.ob .jpmachine{width:72px!important;height:72px!important}.ob .jptotal{font-size:27px!important}
}

/* =======================================================================
   HUNT — mobile summary outside the art + smaller chamber furniture
   ======================================================================= */
@media(max-width:820px){
  .v21-hunt-summary{display:grid;grid-template-columns:minmax(0,.85fr) minmax(0,1.35fr);gap:6px;margin:0 0 6px;align-items:stretch}
  .v21-hunt-summary>.vx-hud{position:relative!important;inset:auto!important;left:auto!important;right:auto!important;top:auto!important;bottom:auto!important;transform:none!important;width:100%!important;max-width:none!important;min-width:0!important;height:auto!important;margin:0!important;box-sizing:border-box!important;display:flex!important;background:linear-gradient(150deg,rgba(22,16,10,.92),rgba(8,7,5,.94))!important;border:1px solid rgba(255,190,76,.13)!important;backdrop-filter:blur(12px)!important;-webkit-backdrop-filter:blur(12px)!important;box-shadow:0 9px 22px rgba(0,0,0,.25)!important}
  .v21-hunt-summary>.vx-hud-pool{padding:8px 9px!important;max-width:none!important;justify-content:center!important}.v21-hunt-summary .vx-hudlbl{font-size:6px!important}.v21-hunt-summary .vx-hudbig{font-size:16px!important}.v21-hunt-summary .vx-hudsub{display:block!important;font-size:5.8px!important}.v21-hunt-summary .vx-hudchips{margin-top:4px!important;gap:3px!important}.v21-hunt-summary .vx-hchip{font-size:5.2px!important;padding:2px 4px!important}.v21-hunt-summary .vx-hudnote{display:none!important}
  .v21-hunt-summary>.vx-hud-motherlode{padding:7px 8px!important;gap:6px!important}.v21-hunt-summary>.vx-hud-motherlode>img{display:block!important;width:33px!important;height:33px!important;flex:0 0 33px!important}.v21-hunt-summary .vx-mlcopy{min-width:0;flex:1}.v21-hunt-summary .vxp-mltitle{display:flex!important;justify-content:space-between!important;gap:5px!important;margin-bottom:4px!important}.v21-hunt-summary .vxp-mltitle>span{font-size:5.2px!important}.v21-hunt-summary .vxp-mltitle>b{font-size:7.2px!important}.v21-hunt-summary .vx-mldraws{display:grid!important;grid-template-columns:1fr 1fr!important;gap:3px!important}.v21-hunt-summary .vx-mldraws>span{padding:4px!important;min-width:0}.v21-hunt-summary .vx-mldraws>span b{font-size:7px!important;white-space:nowrap}.v21-hunt-summary .vx-mldraws>span small{display:none!important}

  /* With the two big cards gone, the map itself can stay visually clean. */
  .vx-stage .vx-hud-clock{right:4px!important;top:4px!important;padding:3px 5px!important;gap:3px!important;max-width:29%!important}.vx-stage .vx-hud-clock .vx-dial{width:27px!important;height:27px!important}.vx-stage .vx-dial-core strong{font-size:6.2px!important}.vx-stage .vx-clocktxt small{display:none!important}.vx-stage .vx-clocktxt b{font-size:6.5px!important}.vx-stage .vx-clocktxt span{display:none!important}
  .vx-stage .vx-hud-kit{right:4px!important;bottom:4px!important;max-width:27%!important;padding:3px 4px!important}.vx-stage .vx-hud-kit .vx-kitart{width:22px!important;height:22px!important}.vx-stage .vx-kittxt b{font-size:6px!important}.vx-stage .vx-hud-kit .vx-btn{display:none!important}
  .vx-stage .vx-ethplate{display:none!important}

  /* Chamber visual is deliberately smaller than REV20. The anchor/coordinate is
     untouched; only the art/badge footprint changes. */
  .vx-houses .vx-house{width:32px!important;height:28px!important;margin:-14px 0 0 -16px!important}
  .vx-node{width:29px!important;height:27px!important;margin:-13.5px 0 0 -14.5px!important;border-radius:7px!important;overflow:visible!important}
  .vx-node .vx-nno{font-size:8px!important;letter-spacing:.02em!important}
  .vx-node:before{content:"";position:absolute;inset:-8px;z-index:-1;border-radius:12px}
  .vx-node:hover,.vx-node.hov,.vx-node:focus-visible{transform:translateY(-1px) scale(1.025)!important}.vx-node.sel{transform:translateY(-1px) scale(1.02)!important}
}
@media(max-width:430px){
  .v21-hunt-summary{grid-template-columns:.82fr 1.38fr!important;gap:5px!important}.v21-hunt-summary>.vx-hud-pool{padding:6px!important}.v21-hunt-summary .vx-hudbig{font-size:14px!important}.v21-hunt-summary>.vx-hud-motherlode{padding:6px!important}.v21-hunt-summary>.vx-hud-motherlode>img{width:28px!important;height:28px!important;flex-basis:28px!important}.v21-hunt-summary .vx-mldraws>span b{font-size:6.4px!important}
  .vx-houses .vx-house{width:28px!important;height:25px!important;margin:-12.5px 0 0 -14px!important}.vx-node{width:25px!important;height:24px!important;margin:-12px 0 0 -12.5px!important;border-radius:6px!important}.vx-node .vx-nno{font-size:7.2px!important}
}

/* =======================================================================
   LUCKY VEIN — keep stats in the room, but spread them into small corners
   ======================================================================= */
@media(max-width:820px){
  .vx-lstage .vx-lhead{position:absolute!important;left:50%!important;top:4px!important;transform:translateX(-50%)!important;margin:0!important;display:block!important;z-index:19!important}
  .vx-lstage .vx-lclock{padding:3px 5px!important;gap:4px!important;border-radius:9px!important;background:rgba(12,9,6,.86)!important;box-shadow:0 7px 18px rgba(0,0,0,.32)!important}.vx-lstage .vx-lclock .vx-dial{width:27px!important;height:27px!important}.vx-lstage .vx-dial-core strong{font-size:6.2px!important}.vx-lstage .vx-lclocktxt small,.vx-lstage .vx-lclocktxt span{display:none!important}.vx-lstage .vx-lclocktxt b{font-size:6.6px!important;white-space:nowrap!important}
  .vx-lstage .vx-lstats{position:absolute!important;inset:0!important;left:0!important;right:0!important;top:0!important;transform:none!important;margin:0!important;display:block!important;z-index:18!important;pointer-events:none!important}
  .vx-lstage .vx-lstat{position:absolute!important;width:29%!important;min-width:0!important;max-width:29%!important;min-height:27px!important;padding:3px 5px!important;gap:3px!important;border-radius:7px!important;pointer-events:auto!important;background:rgba(11,8,6,.79)!important;box-shadow:0 6px 15px rgba(0,0,0,.3)!important}.vx-lstage .vx-lstat img{display:none!important}.vx-lstage .vx-lstat small{font-size:4.7px!important;letter-spacing:.06em!important;white-space:nowrap!important}.vx-lstage .vx-lstat b{font-size:6.7px!important;white-space:nowrap!important;overflow:hidden!important;text-overflow:ellipsis!important}.vx-lstage .vx-lstat-bal .vx-btn,.vx-lstage .vx-lroll{display:none!important}
  .vx-lstage .vx-lstat-jack{left:4px!important;top:4px!important}.vx-lstage .vx-lstat-burn{left:4px!important;top:36px!important}.vx-lstage .vx-lstat-bal{right:4px!important;top:4px!important}.vx-lstage .vx-lstat-pot{right:4px!important;top:36px!important}
  .vx-tplate{width:23px!important;height:23px!important;font-size:8px!important;border-radius:6px!important}.vx-selchip{display:none!important}
  .vx-lconsole-shell{margin-top:6px!important}.vx-lhud-in{padding:7px!important}.vx-lamount{min-height:52px!important}.vx-linput{font-size:21px!important}.vx-quick{gap:4px!important}.vx-quick button{min-height:39px!important;font-size:8px!important}.vx-hsec{padding:10px!important}.vx-hsec>small{font-size:7px!important}.vx-bd span{font-size:9px!important}.vx-bd img{width:19px!important;height:19px!important}
}
@media(max-width:430px){
  .vx-lstage .vx-lstat{width:27%!important;max-width:27%!important;padding:2px 4px!important;min-height:24px!important}.vx-lstage .vx-lstat small{font-size:4.2px!important}.vx-lstage .vx-lstat b{font-size:6px!important}.vx-lstage .vx-lstat-burn,.vx-lstage .vx-lstat-pot{top:31px!important}.vx-lstage .vx-lclock .vx-dial{width:24px!important;height:24px!important}.vx-lstage .vx-lclocktxt b{font-size:5.8px!important}.vx-tplate{width:21px!important;height:21px!important;font-size:7.5px!important}
}

/* Secondary rooms: preserve the living header identity on phones instead of
   allowing it to collapse into a tiny thumbnail. */
@media(max-width:700px){
  .vxc-vault-stage,.vxc-forge-stage,.vxc-trade-stage{grid-template-columns:105px minmax(0,1fr)!important;min-height:112px!important;padding:8px!important;gap:8px!important}.vxc-vault-stage .vxc-hero-media,.vxc-forge-stage .vxc-hero-media,.vxc-trade-stage .vxc-hero-media{height:96px!important}.vxc-roompiece-copy b{font-size:11px!important}.vxc-roompiece-copy span{font-size:7.2px!important}
  .vxs-crate .vxc-stock-media{width:92px!important;height:92px!important;flex-basis:92px!important}
}

@media(max-width:820px){
  .vx-ticker{display:flex!important;gap:6px!important;overflow-x:auto!important;scroll-snap-type:x mandatory!important;padding-right:0!important}
  .vx-ticker .vx-seg{flex:0 0 calc((100% - 6px)/2)!important;width:calc((100% - 6px)/2)!important;scroll-snap-align:start!important;min-width:0!important}
}
@media(max-width:380px){.vx-ticker .vx-seg{flex-basis:calc((100% - 5px)/2)!important;width:calc((100% - 5px)/2)!important}.vx-ticker{gap:5px!important}}

/* ===== vein-animation-rev22.css ===== */
/* ========================================================================== 
   CaveWatch · The Vein · REV22 animation reliability
   ========================================================================== */

/* Game/media motion is functional content. OS reduced-motion may disable CSS
   flourishes, but it must never remove the user's actual animated game props. */
.vxc-media>video,.vxc-event video,.jpmachine,.vx-lode-machine,.vxc-loader video,.ob-bg{display:block!important}

/* Keep the static poster visible until the browser has produced a real video
   frame. This prevents black/empty flashes on slower mobile connections. */
.vxc-media.vxc-playing:not(.vxc-video-ready):not(.v22-fallback-playing)>img,
.vxc-media.vxc-always:not(.vxc-video-ready):not(.v22-fallback-playing)>img{opacity:1!important}
.vxc-media.vxc-playing:not(.vxc-video-ready):not(.v22-fallback-playing)>video,
.vxc-media.vxc-always:not(.vxc-video-ready):not(.v22-fallback-playing)>video{opacity:0!important}
.vxc-media.vxc-video-ready:not(.v22-fallback-playing)>video{opacity:1!important}
.vxc-media.vxc-video-ready:not(.v22-fallback-playing)>img{opacity:0!important}

/* If WebM/VP9 autoplay is unavailable, transparent animated WebP becomes the
   visual layer. The video stays hidden until it recovers. */
.vxc-media.v22-fallback-playing>img{opacity:1!important;visibility:visible!important}
.vxc-media.v22-fallback-playing>video{opacity:0!important;visibility:hidden!important}
.v22-video-hidden{display:none!important}
.v22-standalone-fallback{display:block!important;object-fit:contain!important;object-position:center!important;pointer-events:none!important}

/* Static and animated states use one geometry box — no position/scale jump. */
.vxc-media{overflow:visible}
.vxc-media>img,.vxc-media>video{
  grid-area:1/1!important;position:relative!important;inset:auto!important;
  width:100%!important;height:100%!important;max-width:100%!important;max-height:100%!important;
  margin:0!important;transform:none!important;object-fit:contain!important;object-position:50% 50%!important
}

/* Golden Vein now uses the dedicated generated loop while the state is active. */
.vxc-golden-banner{gap:8px!important}
.v22-golden-media{width:32px;height:32px;flex:0 0 32px;margin:-7px 0!important;filter:drop-shadow(0 0 9px rgba(255,190,47,.28))}
.v22-golden-media>img,.v22-golden-media>video{width:32px!important;height:32px!important}

/* Card hover/touch is the interaction surface, not the tiny media itself. */
.reward,.vx-item,.vx-vault,.vxs-crate,.vxp-benefits article,.vxp-howgrid article,
.vxp-burnmap,.vx-statmark,.vx-withdrawcell,.vxc-roompiece,.vxp-era-card,.vx-hud-kit,.vx-glass{touch-action:manipulation}

@media(max-width:700px){
  .v22-golden-media{width:25px;height:25px;flex-basis:25px;margin:-5px 0!important}
  .v22-golden-media>img,.v22-golden-media>video{width:25px!important;height:25px!important}
}

@media(prefers-reduced-motion:reduce){
  /* Functional game loops remain. Only CSS motion is reduced elsewhere. */
  .vxc-media>video,.vxc-event video,.jpmachine,.vx-lode-machine,.vxc-loader video,.ob-bg{display:block!important}
}

/* ===== vein-rev23.css ===== */
/* ========================================================================== 
   CaveWatch · The Vein REV23
   Missions drawer + Robinhood loader composition.
   UI only; no Hunt/Lucky/reward-contract execution lives here.
   ========================================================================== */

/* ------------------------- Robinhood loading core ------------------------- */
.vxc-loader{display:grid!important;place-items:center!important;align-content:center!important}
.vxc-loader-core{
  position:relative;z-index:2;width:250px;height:250px;border-radius:50%;
  display:flex;flex-direction:column;align-items:center;justify-content:center;
  padding:24px 24px 22px;text-align:center;pointer-events:none
}
.vxc-loader-ring{
  width:316px!important;height:316px!important;left:50%!important;top:50%!important;
  transform:translate(-50%,-50%)!important;border-color:rgba(53,223,115,.15)!important;
  box-shadow:0 0 70px rgba(53,223,115,.055),0 0 120px rgba(244,161,25,.035),inset 0 0 38px rgba(255,181,47,.025)!important
}
.vxc-loader-core video{
  width:158px!important;height:158px!important;flex:none;object-fit:contain!important;
  margin:-7px 0 -3px!important;filter:drop-shadow(0 18px 38px rgba(0,0,0,.6)) drop-shadow(0 0 22px rgba(53,223,115,.08))!important
}
.vxc-loader-core small{
  display:block!important;margin:0!important;font:750 7.5px/1.15 var(--mono,"Geist Mono",monospace)!important;
  letter-spacing:.21em!important;color:#5ce287!important;text-transform:uppercase!important
}
.vxc-loader-core b{
  display:block!important;max-width:190px;margin:7px auto 0!important;
  font:750 10px/1.25 var(--display,Unbounded,sans-serif)!important;letter-spacing:.055em!important;
  color:#dcc59e!important;text-wrap:balance
}

/* ------------------------------- Missions -------------------------------- */
:root{
  --vxm-amber:#ffc857;--vxm-orange:#f59e0b;--vxm-green:#36df77;--vxm-ink:#f5e7d0;
  --vxm-muted:#98856d;--vxm-edge:rgba(255,194,79,.14);--vxm-glass:rgba(13,10,7,.89)
}
.vxm-trigger{
  position:fixed;left:74px;bottom:max(18px,env(safe-area-inset-bottom));z-index:9445;
  width:46px;height:46px;padding:0;border:1px solid rgba(255,194,79,.22);border-radius:14px;
  display:grid;place-items:center;cursor:pointer;color:#ffc857;
  background:linear-gradient(155deg,rgba(23,17,11,.94),rgba(8,7,5,.96));
  box-shadow:0 16px 42px rgba(0,0,0,.45),0 0 25px rgba(245,158,11,.075);
  backdrop-filter:blur(17px);-webkit-backdrop-filter:blur(17px);transition:.18s ease
}
.vxm-trigger:hover{transform:translateY(-2px);border-color:rgba(255,200,87,.42);box-shadow:0 19px 48px rgba(0,0,0,.5),0 0 28px rgba(245,158,11,.13)}
.vxm-trigger svg{width:21px;height:21px}.vxm-trigger .vxm-badge{
  position:absolute;right:-5px;top:-5px;min-width:19px;height:19px;padding:0 5px;border-radius:999px;
  display:none;place-items:center;background:#f59e0b;color:#161008;border:2px solid #080604;
  font:850 9px/1 "Geist",sans-serif;box-shadow:0 0 15px rgba(245,158,11,.4)
}
.vxm-trigger.has-missions .vxm-badge{display:grid}.vxm-trigger:after{
  content:"Missions";position:absolute;left:53px;top:50%;transform:translate(5px,-50%);opacity:0;pointer-events:none;
  padding:7px 9px;border:1px solid var(--vxm-edge);border-radius:8px;background:rgba(8,6,4,.94);color:#cdb58e;
  font:700 7px/1 var(--mono,"Geist Mono",monospace);letter-spacing:.13em;text-transform:uppercase;white-space:nowrap;transition:.16s
}
.vxm-trigger:hover:after{opacity:1;transform:translate(0,-50%)}

.vxm-backdrop{position:fixed;inset:0;z-index:9510;background:rgba(2,2,1,.54);backdrop-filter:blur(3px);-webkit-backdrop-filter:blur(3px);opacity:0;pointer-events:none;transition:.22s ease}
.vxm-backdrop.open{opacity:1;pointer-events:auto}
.vxm-drawer{
  position:fixed;left:0;top:0;bottom:0;z-index:9511;width:min(470px,96vw);transform:translateX(-103%);
  display:flex;flex-direction:column;overflow:hidden;color:var(--vxm-ink);
  background:linear-gradient(165deg,rgba(24,17,10,.975),rgba(8,7,5,.985) 57%,rgba(8,13,9,.98));
  border-right:1px solid rgba(255,194,79,.18);box-shadow:28px 0 85px rgba(0,0,0,.62),0 0 60px rgba(245,158,11,.025);
  backdrop-filter:blur(25px) saturate(1.16);-webkit-backdrop-filter:blur(25px) saturate(1.16);
  transition:transform .28s cubic-bezier(.2,.75,.2,1);font-family:"Geist",system-ui,sans-serif
}
.vxm-drawer.open{transform:none}.vxm-drawer:before{content:"";position:absolute;inset:0;pointer-events:none;background:radial-gradient(circle at 13% 0,rgba(245,158,11,.09),transparent 32%),radial-gradient(circle at 95% 28%,rgba(54,223,119,.045),transparent 26%)}
.vxm-head{position:relative;z-index:1;padding:18px 18px 13px;border-bottom:1px solid rgba(255,255,255,.055)}
.vxm-headtop{display:flex;align-items:center;gap:12px}.vxm-headicon{width:44px;height:44px;display:grid;place-items:center;flex:none;border-radius:14px;border:1px solid rgba(255,194,79,.22);background:rgba(245,158,11,.075);color:#ffc857}.vxm-headicon svg{width:22px;height:22px}
.vxm-headcopy{min-width:0}.vxm-eyebrow{display:flex;align-items:center;gap:7px;font:750 7px/1 var(--mono,"Geist Mono",monospace);letter-spacing:.2em;color:#b18b52;text-transform:uppercase}.vxm-eyebrow i{width:6px;height:6px;border-radius:50%;background:var(--vxm-green);box-shadow:0 0 10px rgba(54,223,119,.65)}
.vxm-head h2{margin:5px 0 0;font:780 18px/1.08 Unbounded,"Geist",sans-serif;letter-spacing:-.035em}.vxm-head p{margin:6px 0 0;color:#8d7c67;font-size:10.5px;line-height:1.45}.vxm-close{margin-left:auto;width:36px;height:36px;display:grid;place-items:center;border-radius:11px;border:1px solid rgba(255,255,255,.08);background:rgba(255,255,255,.035);color:#9d8b75;cursor:pointer;font-size:20px}.vxm-close:hover{color:#ffc857;border-color:rgba(255,194,79,.24)}

.vxm-me{position:relative;z-index:1;margin:12px 14px 0;padding:11px;border:1px solid rgba(255,194,79,.1);border-radius:14px;background:linear-gradient(145deg,rgba(255,194,79,.04),rgba(0,0,0,.15));display:grid;grid-template-columns:minmax(0,1fr) repeat(3,auto);gap:9px;align-items:center}
.vxm-wallet{min-width:0}.vxm-wallet small,.vxm-stat small{display:block;font:700 6.7px/1 var(--mono,"Geist Mono",monospace);letter-spacing:.13em;color:#776955;text-transform:uppercase}.vxm-wallet b{display:block;margin-top:4px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;font:730 10px/1.2 "Geist",sans-serif;color:#d9c39f}.vxm-stat{min-width:59px;padding-left:9px;border-left:1px solid rgba(255,255,255,.055)}.vxm-stat b{display:block;margin-top:5px;font:780 13px/1 Unbounded,"Geist",sans-serif;color:#f0d59c}.vxm-stat.green b{color:#70e49a}

.vxm-tabs{position:relative;z-index:1;margin:10px 14px 0;padding:3px;display:grid;grid-template-columns:1fr 1fr;gap:3px;border:1px solid rgba(255,255,255,.055);border-radius:11px;background:rgba(0,0,0,.27)}.vxm-tabs button{height:34px;border:0;border-radius:8px;background:transparent;color:#81715f;cursor:pointer;font:700 9px/1 "Geist",sans-serif}.vxm-tabs button.on{background:linear-gradient(180deg,rgba(255,194,79,.13),rgba(245,158,11,.055));color:#f0c36e;box-shadow:inset 0 0 0 1px rgba(255,194,79,.10)}
.vxm-body{position:relative;z-index:1;flex:1;min-height:0;overflow-y:auto;padding:12px 14px calc(18px + env(safe-area-inset-bottom));scrollbar-width:thin;scrollbar-color:rgba(255,194,79,.2) transparent}.vxm-panel{display:none}.vxm-panel.on{display:block}
.vxm-sectionline{display:flex;align-items:center;justify-content:space-between;gap:10px;margin:2px 2px 9px}.vxm-sectionline span{font:730 7px/1 var(--mono,"Geist Mono",monospace);letter-spacing:.16em;color:#8c795e;text-transform:uppercase}.vxm-sectionline b{font:650 8px/1 var(--mono,"Geist Mono",monospace);color:#5ddf87}

.vxm-card{position:relative;display:grid;grid-template-columns:42px minmax(0,1fr) auto;gap:10px;align-items:center;padding:11px;margin-bottom:8px;border:1px solid rgba(255,255,255,.055);border-radius:13px;background:linear-gradient(145deg,rgba(255,255,255,.027),rgba(0,0,0,.14));transition:.16s}.vxm-card:hover{border-color:rgba(255,194,79,.14);transform:translateY(-1px);background:linear-gradient(145deg,rgba(255,194,79,.045),rgba(0,0,0,.15))}.vxm-card.done{border-color:rgba(54,223,119,.11);background:linear-gradient(145deg,rgba(54,223,119,.035),rgba(0,0,0,.14))}
.vxm-platform{width:42px;height:42px;border-radius:12px;display:grid;place-items:center;background:#110d09;border:1px solid rgba(255,194,79,.11);color:#ffc857}.vxm-platform svg{width:19px;height:19px}.vxm-card.done .vxm-platform{color:#5cdf88;border-color:rgba(54,223,119,.16);background:rgba(54,223,119,.045)}
.vxm-copy{min-width:0}.vxm-copy small{display:block;font:700 6.5px/1 var(--mono,"Geist Mono",monospace);letter-spacing:.14em;color:#776855;text-transform:uppercase}.vxm-copy h3{margin:5px 0 3px;font:720 11.5px/1.2 Unbounded,"Geist",sans-serif;color:#e4ceb0;letter-spacing:-.02em}.vxm-copy p{margin:0;color:#8e7c67;font-size:9.5px;line-height:1.4}.vxm-rewards{display:flex;gap:5px;flex-wrap:wrap;margin-top:7px}.vxm-reward{display:inline-flex;align-items:center;gap:4px;height:20px;padding:0 7px;border-radius:999px;background:rgba(255,194,79,.055);border:1px solid rgba(255,194,79,.10);font:720 6.5px/1 var(--mono,"Geist Mono",monospace);color:#caa665;white-space:nowrap}.vxm-reward.oxr{color:#67df91;border-color:rgba(54,223,119,.12);background:rgba(54,223,119,.04)}.vxm-reward.queued{color:#9ee8b7}
.vxm-action{min-width:78px;height:35px;padding:0 10px;border-radius:9px;border:1px solid rgba(255,194,79,.18);background:linear-gradient(180deg,rgba(255,194,79,.11),rgba(245,158,11,.055));color:#efc56e;font:750 7px/1 "Geist",sans-serif;text-transform:uppercase;letter-spacing:.07em;cursor:pointer}.vxm-action:hover{border-color:rgba(255,194,79,.36);background:linear-gradient(180deg,rgba(255,194,79,.17),rgba(245,158,11,.08))}.vxm-action.claim{background:linear-gradient(180deg,#ffd36a,#e99b16);border-color:#ffd875;color:#191008}.vxm-action:disabled{cursor:default;opacity:.55;filter:none}.vxm-action.done{color:#68df92;border-color:rgba(54,223,119,.13);background:rgba(54,223,119,.035)}

.vxm-connect{margin:20px 0;padding:23px 17px;border:1px solid rgba(255,194,79,.12);border-radius:15px;text-align:center;background:radial-gradient(circle at 50% 0,rgba(245,158,11,.07),transparent 50%),rgba(0,0,0,.12)}.vxm-connect .ico{width:52px;height:52px;margin:auto;display:grid;place-items:center;border-radius:16px;border:1px solid rgba(255,194,79,.16);color:#ffc857;background:rgba(245,158,11,.055)}.vxm-connect .ico svg{width:25px}.vxm-connect h3{margin:13px 0 7px;font:750 14px/1.2 Unbounded,"Geist",sans-serif}.vxm-connect p{max-width:310px;margin:0 auto 14px;color:#8e7d69;font-size:10px;line-height:1.5}.vxm-connect button{height:39px;border:1px solid #ffd36a;border-radius:10px;background:linear-gradient(#ffd46e,#e99b17);color:#181007;font:800 8px/1 "Geist",sans-serif;text-transform:uppercase;letter-spacing:.08em;padding:0 16px;cursor:pointer}
.vxm-empty{padding:28px 15px;text-align:center;color:#796a58;font-size:10px}.vxm-empty b{display:block;margin-bottom:6px;color:#ba9d70;font-family:Unbounded,"Geist",sans-serif}

.vxm-rankrow{display:grid;grid-template-columns:30px minmax(0,1fr) auto;gap:9px;align-items:center;padding:9px 10px;margin-bottom:6px;border:1px solid rgba(255,255,255,.045);border-radius:11px;background:rgba(255,255,255,.02)}.vxm-rankrow.top{border-color:rgba(255,194,79,.11);background:linear-gradient(90deg,rgba(255,194,79,.05),rgba(0,0,0,.08))}.vxm-rankno{font:800 10px/1 Unbounded,"Geist",sans-serif;color:#806f5a;text-align:center}.vxm-rankrow.top .vxm-rankno{color:#ffc857}.vxm-rankwho{min-width:0}.vxm-rankwho b{display:block;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;color:#d7c1a1;font-size:10px}.vxm-rankwho span{display:block;margin-top:3px;color:#756755;font:600 6.5px/1 var(--mono,"Geist Mono",monospace);letter-spacing:.04em}.vxm-rankxp{text-align:right}.vxm-rankxp b{display:block;color:#e8bf70;font:780 10px/1 Unbounded,"Geist",sans-serif}.vxm-rankxp small{display:block;margin-top:3px;color:#6f6252;font:600 6px/1 var(--mono,"Geist Mono",monospace);text-transform:uppercase;letter-spacing:.08em}
.vxm-note{margin:10px 2px 0;color:#65594b;font:600 6.5px/1.45 var(--mono,"Geist Mono",monospace)}
.vxm-toast{position:absolute;left:14px;right:14px;bottom:15px;z-index:5;padding:10px 12px;border:1px solid rgba(54,223,119,.15);border-radius:10px;background:rgba(8,13,9,.96);color:#8ee7ac;font:650 8px/1.35 var(--mono,"Geist Mono",monospace);box-shadow:0 14px 40px rgba(0,0,0,.45);opacity:0;transform:translateY(8px);pointer-events:none;transition:.18s}.vxm-toast.show{opacity:1;transform:none}.vxm-toast.bad{color:#e99582;border-color:rgba(233,120,95,.18);background:rgba(17,8,6,.96)}

@media(max-width:700px){
  .vxc-loader-core{width:220px;height:220px}.vxc-loader-ring{width:280px!important;height:280px!important}.vxc-loader-core video{width:138px!important;height:138px!important}.vxc-loader-core small{font-size:7px!important}.vxc-loader-core b{font-size:9px!important}
  .vxm-trigger{left:62px;bottom:max(12px,env(safe-area-inset-bottom));width:42px;height:42px;border-radius:13px}.vxm-trigger svg{width:19px;height:19px}.vxm-trigger:after{display:none}
  .vxm-drawer{width:100vw;max-width:none;padding-top:env(safe-area-inset-top)}.vxm-head{padding:15px 14px 12px}.vxm-me{margin:10px 10px 0;grid-template-columns:minmax(0,1fr) repeat(3,auto);gap:5px;padding:9px}.vxm-stat{min-width:52px;padding-left:6px}.vxm-stat b{font-size:11px}.vxm-tabs{margin:8px 10px 0}.vxm-body{padding:10px 10px calc(14px + env(safe-area-inset-bottom))}.vxm-card{grid-template-columns:38px minmax(0,1fr);gap:9px;padding:10px}.vxm-platform{width:38px;height:38px}.vxm-action{grid-column:1/-1;width:100%;height:34px}.vxm-copy h3{font-size:10.5px}.vxm-copy p{font-size:9px}
}
@media(max-width:390px){
  .vxc-loader-core{width:204px;height:204px}.vxc-loader-ring{width:260px!important;height:260px!important}.vxc-loader-core video{width:128px!important;height:128px!important}
  .vxm-me{grid-template-columns:minmax(0,1fr) auto auto}.vxm-stat.oxr{display:none}.vxm-head p{font-size:9.5px}.vxm-head h2{font-size:16px}
}
@media(prefers-reduced-motion:reduce){.vxm-trigger,.vxm-drawer,.vxm-backdrop,.vxm-card,.vxm-toast{transition:none!important}.vxc-loader-ring:before,.vxc-loader-ring:after{animation:none!important}}
.vxm-progress{position:relative;z-index:1;margin:8px 14px 0}.vxm-progress>div{display:flex;align-items:center;justify-content:space-between;gap:10px;margin:0 2px 6px}.vxm-progress span,.vxm-progress b{font:680 6.4px/1 var(--mono,"Geist Mono",monospace);letter-spacing:.11em;text-transform:uppercase}.vxm-progress span{color:#756653}.vxm-progress b{color:#b99359}.vxm-progress>i{display:block;height:4px;border-radius:99px;overflow:hidden;background:rgba(255,255,255,.055)}.vxm-progress>i>em{display:block;height:100%;border-radius:inherit;background:linear-gradient(90deg,#e99517,#ffd365 66%,#5fe28c);box-shadow:0 0 11px rgba(255,190,70,.2);transition:width .35s ease}
@media(max-width:700px){.vxm-progress{margin:7px 10px 0}}

/* ===== vein-rev26-visual-polish.css ===== */
/* ========================================================================== 
   CaveWatch · The Vein · REV26 premium visibility / scale pass
   20 Aug 2026

   UI/VFX only. No odds, contracts, payout math, result selection, wallet or
   transaction behavior is changed here.
   ========================================================================== */

/* --------------------------------------------------------------------------
   1. GAME HEADER CHIPS — Hunt + Lucky Vein stay compact but clearly readable.
   -------------------------------------------------------------------------- */
@media (min-width:1181px){
  .vxp-gamechips{gap:9px!important}
  .vxp-gamechips>span{
    min-height:42px!important;padding:0 14px!important;gap:9px!important;
    border-radius:12px!important;font-size:10px!important;
    box-shadow:inset 0 1px 0 rgba(255,255,255,.025),0 8px 18px rgba(0,0,0,.14)
  }
  .vxp-gamechips img{width:29px!important;height:29px!important}
  .vxp-gamechips .vx-ethmark{width:22px!important;height:22px!important}
}
@media (min-width:821px) and (max-width:1180px){
  .vxp-gamechips>span{min-height:37px!important;padding:0 11px!important;font-size:9px!important;gap:7px!important}
  .vxp-gamechips img{width:25px!important;height:25px!important}
  .vxp-gamechips .vx-ethmark{width:19px!important;height:19px!important}
}
@media (max-width:820px){
  .vxp-gamechips>span{min-height:31px!important;padding:0 8px!important;font-size:7.8px!important;gap:6px!important}
  .vxp-gamechips img{width:21px!important;height:21px!important}
  .vxp-gamechips .vx-ethmark{width:16px!important;height:16px!important}
}

/* --------------------------------------------------------------------------
   2. HUNT ENERGY CORE — larger, raised slightly, no visible square video matte.
   -------------------------------------------------------------------------- */
.vx-ethplate.v24-eth-core{
  width:158px!important;height:158px!important;
  transform:translate(-50%,-59%)!important;
}
.v24-core-stack{width:142px!important;height:142px!important}
.v24-core-idle-media>video,
.v24-core-release{
  mix-blend-mode:screen!important;
  -webkit-mask-image:radial-gradient(circle at 50% 50%,#000 0 58%,rgba(0,0,0,.98) 66%,rgba(0,0,0,.74) 73%,transparent 82%);
  mask-image:radial-gradient(circle at 50% 50%,#000 0 58%,rgba(0,0,0,.98) 66%,rgba(0,0,0,.74) 73%,transparent 82%);
}
.v24-core-idle-media>video{filter:saturate(1.14) contrast(1.13) brightness(1.05) drop-shadow(0 0 12px rgba(67,184,255,.34))!important}
.v24-core-stack{filter:drop-shadow(0 13px 23px rgba(0,0,0,.62)) drop-shadow(0 0 22px rgba(63,177,255,.25))!important}
.v24-core-aura{inset:19%!important;filter:blur(10px)!important}
.v24-core-value{
  bottom:-7px!important;min-width:124px!important;padding:6px 12px 7px!important;
  border-color:rgba(88,191,255,.27)!important;background:rgba(5,9,14,.9)!important;
  box-shadow:0 10px 28px rgba(0,0,0,.56),0 0 22px rgba(55,163,255,.08),inset 0 1px rgba(255,255,255,.05)!important
}
.v24-core-value small{font-size:7.5px!important;color:#91a6b7!important}
.v24-core-value b{font-size:13.5px!important;color:#d9f2ff!important;text-shadow:0 0 16px rgba(82,187,255,.56)!important}

/* --------------------------------------------------------------------------
   3. HUNT CHAMBERS — +20% visual presence for chest + number in normal state.
      Hover/selected states keep the same premium motion on top of the larger base.
   -------------------------------------------------------------------------- */
@media (min-width:1101px){
  .vx-houses .vx-house{width:77px!important;height:67px!important;margin:-33.5px 0 0 -38.5px!important}
  .vx-node{width:67px!important;height:58px!important;margin:-29px 0 0 -33.5px!important;border-radius:13px!important}
  .vx-node .vx-nno{font-size:18px!important}
  .vx-namt{font-size:8.4px!important;padding:4px 7px!important}
  .vx-nparticles{width:82px!important;height:72px!important}
}
@media (min-width:821px) and (max-width:1100px){
  .vx-houses .vx-house{width:65px!important;height:58px!important;margin:-29px 0 0 -32.5px!important}
  .vx-node{width:65px!important;height:58px!important;margin:-29px 0 0 -32.5px!important;border-radius:13px!important}
  .vx-node .vx-nno{font-size:17px!important}
}
.vx-node:hover,.vx-node.hov,.vx-node:focus-visible{transform:translateY(-5px) scale(1.06)!important}
.vx-node.sel{transform:translateY(-3px) scale(1.045)!important}
.vx-node.won .vx-nno{font-size:21px!important}

/* --------------------------------------------------------------------------
   4. STOCK DROP HERO — make the reward chest the visual anchor of the header.
   -------------------------------------------------------------------------- */
@media (min-width:1181px){
  .vxs-dropvault{min-width:min(570px,47vw)!important;grid-template-columns:minmax(280px,1.18fr) minmax(195px,.82fr)!important}
  .vxs-crate{min-height:184px!important;padding:17px 18px!important;gap:15px!important}
  .vxc-stock-media{width:158px!important;height:158px!important;flex-basis:158px!important}
  .vxs-crate .vxc-media{margin:-10px 2px -10px -8px!important}
  .vxs-crate b{font-size:24px!important}
  .vxs-crate small{font-size:7.5px!important}.vxs-crate em{font-size:8px!important}
}
.vxs-crate .vxc-stock-media>video{
  mix-blend-mode:screen!important;
  -webkit-mask-image:radial-gradient(circle at 50% 50%,#000 0 60%,rgba(0,0,0,.9) 70%,transparent 84%);
  mask-image:radial-gradient(circle at 50% 50%,#000 0 60%,rgba(0,0,0,.9) 70%,transparent 84%);
  filter:saturate(1.12) brightness(1.07) drop-shadow(0 11px 22px rgba(249,115,22,.24))!important
}
.vxs-crate::before{content:"";position:absolute;left:-2%;top:50%;width:58%;aspect-ratio:1;transform:translateY(-50%);border-radius:50%;background:radial-gradient(circle,rgba(255,174,42,.14),rgba(249,115,22,.055) 38%,transparent 69%);filter:blur(5px);pointer-events:none}

/* --------------------------------------------------------------------------
   5. WORKSHOP + TRADE LIVING HEADERS — larger motion anchor, same clean layout.
   -------------------------------------------------------------------------- */
@media (min-width:1181px){
  .vxc-forge-stage,.vxc-trade-stage{
    grid-template-columns:minmax(260px,340px) minmax(0,1fr)!important;
    min-height:224px!important;padding:18px 28px!important;gap:22px!important
  }
  .vxc-forge-stage .vxc-hero-media,.vxc-trade-stage .vxc-hero-media{height:214px!important}
}
.vxc-forge-stage .vxc-hero-media,.vxc-trade-stage .vxc-hero-media{filter:drop-shadow(0 12px 24px rgba(0,0,0,.34)) drop-shadow(0 0 17px rgba(249,115,22,.08))}

/* --------------------------------------------------------------------------
   6. UPGRADE MID-HUNT — use the real loop continuously instead of CSS bobbing.
   -------------------------------------------------------------------------- */
.v26-upgrade-media{
  width:96px!important;height:82px!important;flex:0 0 96px!important;
  overflow:visible!important;filter:drop-shadow(0 11px 22px rgba(0,0,0,.52)) drop-shadow(0 0 18px rgba(249,115,22,.22))
}
.v26-upgrade-media>img,.v26-upgrade-media>video{width:100%!important;height:100%!important;object-fit:contain!important;transform:none!important}
.v26-upgrade-media>video{
  mix-blend-mode:screen!important;
  -webkit-mask-image:radial-gradient(ellipse at 50% 50%,#000 0 58%,rgba(0,0,0,.94) 68%,transparent 86%);
  mask-image:radial-gradient(ellipse at 50% 50%,#000 0 58%,rgba(0,0,0,.94) 68%,transparent 86%);
  filter:saturate(1.12) contrast(1.08) brightness(1.06)!important
}
.vx-qfhead{gap:18px!important}

/* --------------------------------------------------------------------------
   7. LANDING REWARD CARDS — icons read at a glance, especially Win ETH/Stocks.
   -------------------------------------------------------------------------- */
@media (min-width:761px){
  .ob .reward{grid-template-columns:66px minmax(0,1fr)!important;gap:13px!important;padding:15px 16px!important}
  .ob .reward img{width:54px!important;height:54px!important}
  .ob .reward:nth-child(2) img,.ob .reward.stock img{width:62px!important;height:62px!important}
}
@media (max-width:760px){
  .ob .reward{grid-template-columns:38px minmax(0,1fr)!important;gap:7px!important}
  .ob .reward img{width:34px!important;height:34px!important}
  .ob .reward:nth-child(2) img,.ob .reward.stock img{width:39px!important;height:39px!important}
}

/* --------------------------------------------------------------------------
   8. RESPONSIVE RETUNING — keep larger assets legible without covering gameplay.
   -------------------------------------------------------------------------- */
@media (max-width:1180px){
  .vx-ethplate.v24-eth-core{width:126px!important;height:126px!important;transform:translate(-50%,-58%)!important}
  .v24-core-stack{width:114px!important;height:114px!important}
  .v24-core-value{min-width:100px!important;padding:5px 9px 6px!important}.v24-core-value b{font-size:11px!important}.v24-core-value small{font-size:6.6px!important}
  .vxc-stock-media{width:128px!important;height:128px!important;flex-basis:128px!important}.vxs-crate{min-height:148px!important}
  .vxc-forge-stage,.vxc-trade-stage{grid-template-columns:190px minmax(0,1fr)!important}.vxc-forge-stage .vxc-hero-media,.vxc-trade-stage .vxc-hero-media{height:164px!important}
  .v26-upgrade-media{width:84px!important;height:72px!important;flex-basis:84px!important}
}
/* REV91: Revenue Drop dashboard. Same card language as the rest of the page;
   tabular figures so columns line up down the strip. */
.vxs-dash .vxs-dashgrid{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:14px;margin-top:12px}
.vxs-dash .vxs-dashgrid>span{display:flex;flex-direction:column;gap:3px;min-width:0}
.vxs-dash .vxs-dashgrid small{font-size:11px;letter-spacing:.14em;text-transform:uppercase;color:var(--faint)}
.vxs-dash .vxs-dashgrid b{font-family:var(--display);font-weight:800;font-size:20px;color:var(--gold);
  font-variant-numeric:tabular-nums;overflow-wrap:anywhere}
.vxs-dash .vxs-dashgrid em{font-style:normal;font-size:11.5px;color:var(--dim);overflow-wrap:anywhere}
.vxs-tokens{display:flex;flex-wrap:wrap;gap:8px;margin-top:14px;padding-top:14px;border-top:1px solid var(--gline-2)}
.vxs-tok{display:flex;align-items:center;gap:8px;padding:7px 11px;min-width:0;
  border:1px solid var(--edge);border-radius:var(--rad-pill);background:rgba(255,255,255,.03)}
.vxs-tok img{width:20px;height:20px;object-fit:contain;flex:none}
.vxs-tok b{font-size:12.5px;font-weight:600}
.vxs-tok strong{font-family:var(--mono);font-size:12.5px;color:var(--gold);font-variant-numeric:tabular-nums}
.vxs-tok em{font-style:normal;font-size:11px;color:var(--faint)}
.vxs-tok-empty{font-size:12.5px;color:var(--dim)}

@media (max-width:820px){
  .vxs-dash .vxs-dashgrid{grid-template-columns:repeat(2,minmax(0,1fr));gap:12px}
  .vxs-dash .vxs-dashgrid b{font-size:17px}
  .vxs-tok img{width:18px;height:18px}
}

/* ===========================================================================
   REV89 — mobile formatting. Two faults, both only visible below 820px.

   1. CARD OVERFLOW. .vx-metrics is repeat(2,minmax(0,1fr)) here, so the tracks
      can shrink — but a grid/flex ITEM defaults to min-width:auto, meaning
      "never shrink below your content". A long figure therefore pushes out of
      a ~180px card instead of wrapping. min-width:0 on the items and their
      children is the fix; overflow-wrap lets an unbroken number wrap inside
      the card. Font sizes are deliberately NOT reduced — shrinking a financial
      figure to hide an overflow is a worse bug than the overflow.

   2. DESKTOP ICON SIZES LEAKING DOWN. Resolved at 390px: .vx-item img is
      118x118 (a third of the screen), .vxs-crate>img 116x116, .vx-mart img
      96x96, .vx-lode-seal 78x78 — none had a mobile override.
   =========================================================================== */
@media (max-width:820px){
  /* 1 — let card contents shrink and wrap */
  .vx-metrics>article,
  .vx-transparency>article,
  .vx-facts>span,
  .vxs-fact,
  .vx-comp-fig{min-width:0}

  .vx-metrics>article>*,
  .vx-transparency>article>*,
  .vx-facts>span>*,
  .vx-comp-fig>*{min-width:0;max-width:100%}

  /* Values are the long ones: tabular figures with a unit suffix. Allow a
     break inside the number rather than letting it leave the card. */
  .vx-metrics>article b,
  .vx-transparency>article b,
  .vx-facts b,
  .vx-comp-fig b{overflow-wrap:anywhere;word-break:normal;line-height:1.15}

  /* Labels and notes truncate instead of forcing the card open. */
  .vx-metrics>article small,
  .vx-transparency>article small,
  .vx-facts small{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;max-width:100%}

  .vx-metrics>article span,
  .vx-transparency>article span{overflow-wrap:anywhere}

  /* 2 — clamp the icons that never got a phone size */
  .vx-item img{width:76px!important;height:76px!important}
  .vx-mart img{width:64px!important;height:64px!important}
  .vxs-crate>img{width:84px!important;height:84px!important}
  .vx-lode-seal{width:56px!important;height:56px!important}
}

@media (max-width:430px){
  .vx-item img{width:64px!important;height:64px!important}
  .vx-mart img{width:56px!important;height:56px!important}
  .vxs-crate>img{width:72px!important;height:72px!important}
  .vx-lode-seal{width:48px!important;height:48px!important}
}

/* REV88: mobile chamber list. Hidden on desktop, where the map's 80x70 nodes
   already clear 44x44 comfortably. Rows are 52px so the target is ~358x52 at a
   390px viewport; a vertical list cannot overlap. */
.vx-chlist{display:none}
@media (max-width:820px){
  .vx-chlist{display:grid;gap:6px;margin:12px 0 0}
  .vx-chrow{display:grid;grid-template-columns:44px minmax(0,1fr) auto;align-items:center;gap:10px;
    width:100%;min-height:52px;padding:6px 12px;text-align:left;cursor:pointer;
    border:1px solid var(--edge);border-radius:var(--rad-md);
    background:linear-gradient(160deg,rgba(36,29,22,.92),rgba(11,10,8,.94));
    color:var(--ink);font:inherit;-webkit-tap-highlight-color:transparent}
  .vx-chrow-no{font-family:var(--mono);font-weight:700;font-size:15px;color:var(--gold);
    text-align:center;font-variant-numeric:tabular-nums}
  .vx-chrow-main{min-width:0;display:flex;flex-direction:column;gap:2px}
  .vx-chrow-region{font-size:13px;font-weight:600;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
  .vx-chrow-you{font-size:11px;color:var(--gold);font-style:normal}
  .vx-chrow-eth{font-family:var(--mono);font-size:12.5px;color:var(--dim);font-variant-numeric:tabular-nums}
  .vx-chrow.sel{border-color:var(--amber);box-shadow:0 0 0 1px var(--amber) inset}
  .vx-chrow.sel .vx-chrow-region{color:var(--gold)}
}

/* REV85: protocol-wide figures sit under the wallet's own metrics. The rule
   is a visual separation only — these numbers are about the protocol, and
   nothing here should read as "your" balance. */
.vx-transparency{margin-top:18px;padding-top:18px;border-top:1px solid var(--gline-2)}
.vx-transparency b{font-variant-numeric:tabular-nums}

@media (max-width:820px){
  .vx-transparency{margin-top:12px;padding-top:12px}

  /* The plate stays laid out and stays transparent: layoutHuntEnergyBeam()
     measures #vx-hunt-core to place the winner beam and does not guard against
     a zero rect, so display:none here would fire the beam from the map corner.
     Only the visuals come off. */
  .vx-ethplate.v24-eth-core{display:grid!important;width:76px!important;height:76px!important;transform:translate(-50%,-57%)!important}
  /* The crystal renders as an opaque black rectangle on iOS (WebKit ignores
     WebM AlphaMode), and #vx-plate-eth is the same number already shown in the
     top HUD by #vx-pot. Both come off the small screen. */
  .v24-core-stack,.v24-core-value{display:none!important}
  .vx-houses .vx-house{width:50px!important;height:44px!important;margin:-22px 0 0 -25px!important}
  .vx-node{width:46px!important;height:41px!important;margin:-20.5px 0 0 -23px!important;border-radius:9px!important}
  .vx-node .vx-nno{font-size:12.5px!important}
  .vxc-stock-media{width:100px!important;height:100px!important;flex-basis:100px!important}.vxs-crate{min-height:118px!important}
  .vxc-forge-stage,.vxc-trade-stage{grid-template-columns:112px minmax(0,1fr)!important}.vxc-forge-stage .vxc-hero-media,.vxc-trade-stage .vxc-hero-media{height:108px!important}
  .v26-upgrade-media{width:68px!important;height:58px!important;flex-basis:68px!important}
}
@media (max-width:430px){
  .vx-houses .vx-house{width:43px!important;height:38px!important;margin:-19px 0 0 -21.5px!important}
  .vx-node{width:38px!important;height:36px!important;margin:-18px 0 0 -19px!important}
  .vx-node .vx-nno{font-size:10.8px!important}
  .vxc-stock-media{width:86px!important;height:86px!important;flex-basis:86px!important}
  .vxc-forge-stage,.vxc-trade-stage{grid-template-columns:90px minmax(0,1fr)!important}.vxc-forge-stage .vxc-hero-media,.vxc-trade-stage .vxc-hero-media{height:88px!important}
  .v26-upgrade-media{width:58px!important;height:50px!important;flex-basis:58px!important}
}
@media (max-width:375px){
  .vx-houses .vx-house{width:38px!important;height:34px!important;margin:-17px 0 0 -19px!important}
  .vx-node{width:35px!important;height:32px!important;margin:-16px 0 0 -17.5px!important}.vx-node .vx-nno{font-size:9.6px!important}
}

@media (prefers-reduced-motion:reduce){
  .v26-upgrade-media>video{display:none!important}.v26-upgrade-media>img{opacity:1!important}
}

/* ===== vein-rev27-premium-finishing.css ===== */
/* ========================================================================== 
   CaveWatch · The Vein · REV27 premium finishing pass
   20 Aug 2026

   Visual / presentation only. Keeps REV24–REV26 gameplay, contracts, payouts,
   randomness and wallet transaction wiring untouched.
   ========================================================================== */

/* 1) Hunt ETH core: use the alpha-clean source itself. No blend-mode or CSS
      mask is allowed to create a rectangular matte around the animation. */
.v24-core-idle-media,.v24-core-stack,.v24-core-release{background:transparent!important}
.v24-core-idle-media>video,.v24-core-release{
  mix-blend-mode:normal!important;
  -webkit-mask-image:none!important;mask-image:none!important;
  background:transparent!important
}
.v24-core-idle-media>video{
  filter:saturate(1.13) contrast(1.07) brightness(1.06) drop-shadow(0 0 14px rgba(66,185,255,.34))!important
}
.v24-core-release{filter:saturate(1.16) brightness(1.08) drop-shadow(0 0 18px rgba(72,194,255,.48))!important}

/* 2) Burn supply is a first-class live economy card, never an invisible middle
      fact. The IDs remain identical, so the current chain adapter owns values. */
.vxp-econ-supply{
  display:grid!important;grid-template-columns:34px minmax(0,1fr)!important;
  grid-template-rows:auto auto auto!important;column-gap:10px!important;
  align-items:center!important;min-width:150px!important;
  border-color:rgba(255,104,61,.17)!important;
  background:radial-gradient(circle at 12% 50%,rgba(255,89,43,.10),transparent 38%),rgba(255,255,255,.018)!important
}
.vxp-econ-supply .v27-burn-icon{grid-column:1;grid-row:1/4;width:32px;height:32px;display:grid;place-items:center;border-radius:10px;border:1px solid rgba(255,111,64,.16);background:rgba(255,82,35,.045)}
.vxp-econ-supply .v27-burn-icon img{width:26px;height:26px;object-fit:contain;filter:drop-shadow(0 0 10px rgba(255,96,39,.32))}
.vxp-econ-supply>small,.vxp-econ-supply>b,.vxp-econ-supply>em{grid-column:2;min-width:0}
.vxp-econ-supply>small{grid-row:1}.vxp-econ-supply>b{grid-row:2;font-size:13px!important}.vxp-econ-supply>em{grid-row:3}

/* 3) Upgrade mid-hunt: the actual WebM keeps looping AND the complete prop
      gently floats like the old static treatment. Bigger art, more copy room. */
.vx-qfhead{gap:27px!important;min-height:126px!important}
.v26-upgrade-media{
  width:132px!important;height:112px!important;flex:0 0 132px!important;
  animation:v27-upgrade-float 3.2s ease-in-out infinite!important;
  filter:drop-shadow(0 14px 28px rgba(0,0,0,.56)) drop-shadow(0 0 22px rgba(249,115,22,.26))!important
}
.v26-upgrade-media>video{mix-blend-mode:screen!important;filter:saturate(1.14) contrast(1.08) brightness(1.07)!important}
@keyframes v27-upgrade-float{0%,100%{transform:translateY(4px)}50%{transform:translateY(-8px)}}

/* 4) Bring a Crew: make the referral machine a living prop instead of a tiny
      decal. The copy moves right naturally through the larger grid column. */
.vx-ref{grid-template-columns:172px minmax(0,1fr) auto!important;gap:24px!important;min-height:188px!important;padding:18px 22px!important}
.v27-referral-media{width:160px!important;height:142px!important;overflow:visible!important;filter:drop-shadow(0 15px 28px rgba(0,0,0,.48)) drop-shadow(0 0 18px rgba(249,115,22,.16))}
.v27-referral-media>img,.v27-referral-media>video{width:100%!important;height:100%!important;object-fit:contain!important}
.v27-referral-media>video{mix-blend-mode:screen!important;filter:saturate(1.1) brightness(1.05)!important}
.vx-refcopy h3{font-size:21px!important;line-height:1.18!important}.vx-refcopy p{font-size:13px!important}

/* 5) Landing page: stronger reward props and a premium live Hunt clock beside
      the main CTA. It reads the same VeinChain snapshot as the game. */
.ob .cta{align-items:stretch!important;gap:12px!important}
.v27-livehunt{position:relative;overflow:hidden;min-width:330px;min-height:62px;display:grid;grid-template-columns:minmax(118px,.82fr) minmax(118px,1fr);align-items:stretch;border:1px solid rgba(255,200,87,.18);border-radius:15px;background:radial-gradient(circle at 9% 50%,rgba(255,171,46,.10),transparent 36%),linear-gradient(150deg,rgba(25,18,11,.76),rgba(8,7,5,.72));box-shadow:inset 0 1px rgba(255,255,255,.04),0 15px 34px rgba(0,0,0,.22);backdrop-filter:blur(15px)}
.v27-livehunt::after{content:"";position:absolute;inset:-80% -25%;pointer-events:none;background:linear-gradient(110deg,transparent 43%,rgba(255,216,133,.055) 50%,transparent 57%);animation:v27-live-sweep 5.5s ease-in-out infinite}
@keyframes v27-live-sweep{0%,58%{transform:translateX(-34%)}100%{transform:translateX(34%)}}
.v27-live-main,.v27-live-pool{position:relative;z-index:1;padding:10px 13px;display:flex;flex-direction:column;justify-content:center;min-width:0}
.v27-live-pool{border-left:1px solid rgba(255,255,255,.055)}
.v27-livehunt small{font:700 7px/1 var(--mono);letter-spacing:.14em;text-transform:uppercase;color:#8e785d;white-space:nowrap}
.v27-livehunt b{display:block;margin-top:4px;font:850 18px/1 var(--display);letter-spacing:-.04em;color:#ffd36b;white-space:nowrap}
.v27-livehunt em{display:block;margin-top:4px;font:600 7.5px/1.2 var(--mono);font-style:normal;color:#7f715f;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.v27-livehunt[data-phase="solve"]{border-color:rgba(87,184,255,.24);background:radial-gradient(circle at 10% 50%,rgba(73,167,255,.09),transparent 36%),linear-gradient(150deg,rgba(16,22,27,.79),rgba(7,8,9,.74))}.v27-livehunt[data-phase="solve"] .v27-live-main b{color:#9fdcff}
.v27-livehunt[data-phase="ready"]{border-color:rgba(63,213,112,.22)}.v27-livehunt[data-phase="ready"] .v27-live-main b{color:#83e7a1}

@media (min-width:761px){
  .ob .rewards{gap:12px!important;max-width:790px!important}.ob .reward{min-height:132px!important;grid-template-columns:88px minmax(0,1fr)!important;padding:16px 17px!important;gap:14px!important}
  .ob .reward img,.ob .reward:nth-child(2) img,.ob .reward.stock img{width:78px!important;height:78px!important}
  .ob .reward b{font-size:13px!important}.ob .reward span{font-size:10.5px!important}
}

/* 6) Desktop economy ribbon must fit all six live facts, including Burned. */
@media (min-width:1181px){
  .vxp-economybar:not(.v24-test-economy){grid-template-columns:minmax(185px,1.05fr) repeat(5,minmax(132px,.72fr))!important}
}
@media (min-width:821px) and (max-width:1180px){
  .vx-qfhead{gap:21px!important}.v26-upgrade-media{width:110px!important;height:94px!important;flex-basis:110px!important}
  .vx-ref{grid-template-columns:132px minmax(0,1fr)!important}.v27-referral-media{width:124px!important;height:112px!important}.vx-refstats{grid-column:2;justify-content:flex-start!important}
  .v27-livehunt{min-width:285px}
}
@media (max-width:820px){
  .vx-qfhead{gap:15px!important;min-height:88px!important}.v26-upgrade-media{width:86px!important;height:74px!important;flex-basis:86px!important}
  .vx-ref{grid-template-columns:92px minmax(0,1fr)!important;gap:14px!important;min-height:0!important;padding:14px!important}.v27-referral-media{width:88px!important;height:80px!important}.vx-refstats{grid-column:1/-1!important}.vx-refcopy h3{font-size:16px!important}.vx-refcopy p{font-size:11.5px!important}
  .v27-livehunt{width:100%;min-width:0;min-height:58px}.v27-livehunt b{font-size:15px}
}
@media(max-width:620px){
  .ob .cta{display:grid!important;grid-template-columns:1fr!important}.v27-livehunt{grid-template-columns:1fr 1fr}.ob .reward img,.ob .reward:nth-child(2) img,.ob .reward.stock img{width:50px!important;height:50px!important}
}
@media(max-width:430px){
  .vxp-econ-supply{grid-template-columns:27px minmax(0,1fr)!important}.vxp-econ-supply .v27-burn-icon{width:25px;height:25px}.vxp-econ-supply .v27-burn-icon img{width:21px;height:21px}
  .v27-livehunt{grid-template-columns:1fr}.v27-live-pool{border-left:0;border-top:1px solid rgba(255,255,255,.055)}
}
@media(prefers-reduced-motion:reduce){.v26-upgrade-media,.v27-livehunt::after{animation:none!important}}

/* ===== vein-rev28-visibility-guide.css ===== */
/* ========================================================================== 
   CaveWatch · The Vein · REV28 visibility + guide pass
   20 Aug 2026

   Presentation / information architecture only. No game odds, payout math,
   randomness, wallet transaction construction or deployed addresses change.
   ========================================================================== */

/* 1) HUNT ETH CORE — truly transparent. REV24 inherited backdrop-filter from
      the old glass ETH pill; that blurred the cave into a visible square even
      while the WebM itself had alpha. Kill the inherited blur/matte completely. */
.vx-ethplate.v24-eth-core{
  background:transparent!important;
  backdrop-filter:none!important;-webkit-backdrop-filter:none!important;
  box-shadow:none!important;filter:none!important;
}
.v24-core-stack,.v24-core-idle-media,.v24-core-release{
  background:transparent!important;
  backdrop-filter:none!important;-webkit-backdrop-filter:none!important;
}
.v24-core-stack{filter:none!important}
.v24-core-idle-media>video,.v24-core-release{
  mix-blend-mode:normal!important;
  -webkit-mask-image:none!important;mask-image:none!important;
  filter:saturate(1.08) contrast(1.06) brightness(1.03)!important;
}
.v24-core-idle-media>img{background:transparent!important}
.v24-core-aura{display:none!important}

/* 2) HUNT CHAMBERS — another +20% from REV26 desktop sizing. The number plate,
      persistent ETH amount and particle orbit scale with the chamber itself. */
@media (min-width:1101px){
  .vx-houses .vx-house{width:92px!important;height:80px!important;margin:-40px 0 0 -46px!important}
  .vx-node{width:80px!important;height:70px!important;margin:-35px 0 0 -40px!important;border-radius:15px!important}
  .vx-node .vx-nno{font-size:22px!important;line-height:1!important}
  .vx-namt{font-size:9.6px!important;padding:5px 8px!important;top:calc(100% + 4px)!important}
  .vx-nparticles{width:98px!important;height:86px!important}
  .vx-node.won .vx-nno{font-size:26px!important}
}
@media (min-width:821px) and (max-width:1100px){
  .vx-houses .vx-house{width:78px!important;height:70px!important;margin:-35px 0 0 -39px!important}
  .vx-node{width:76px!important;height:68px!important;margin:-34px 0 0 -38px!important;border-radius:14px!important}
  .vx-node .vx-nno{font-size:20px!important}
  .vx-namt{font-size:8.8px!important;padding:4px 7px!important}
  .vx-nparticles{width:90px!important;height:80px!important}
  .vx-node.won .vx-nno{font-size:24px!important}
}
@media (min-width:581px) and (max-width:820px){
  .vx-houses .vx-house{width:58px!important;height:51px!important;margin:-25.5px 0 0 -29px!important}
  .vx-node{width:54px!important;height:48px!important;margin:-24px 0 0 -27px!important;border-radius:10px!important}
  .vx-node .vx-nno{font-size:14px!important}
}
@media (max-width:580px){
  /* Keep phone hit targets usable without letting 15 enlarged props overlap. */
  .vx-houses .vx-house{width:48px!important;height:42px!important;margin:-21px 0 0 -24px!important}
  .vx-node{width:43px!important;height:39px!important;margin:-19.5px 0 0 -21.5px!important}
  .vx-node .vx-nno{font-size:12px!important}
}

/* 3) HUNT CORNER HUD — slightly larger than REV24 so the live state reads from
      the whole map without returning to the old oversized UI. */
@media (min-width:1101px){
  .vx-hud-pool{padding:11px 15px!important;min-width:262px!important;gap:3px!important}
  .vx-hud-pool .vx-hudlbl{font-size:9.5px!important}
  .vx-hudbig{font-size:clamp(28px,1.9vw,34px)!important}
  .vx-hudsub{font-size:11.5px!important}.vx-hudnote{font-size:11px!important}
  .vx-hchip{padding:5px 10px!important;font-size:9px!important}.vx-hchip b{font-size:12px!important}

  .vx-hud-clock{padding:10px 15px 10px 11px!important;gap:11px!important}
  .vx-hud-clock .vx-dial{width:66px!important;height:66px!important}
  .vx-hud-clock .vx-clocktxt b,.vx-hud-clock b{font-size:16px!important}
  .vx-hud-clock small{font-size:8.7px!important}.vx-clocktxt span{font-size:9.5px!important}

  .vx-hud-motherlode{padding:10px 13px!important;min-width:382px!important;gap:13px!important}
  .vx-hud-motherlode>img{width:48px!important;height:48px!important}
  .vx-mlcopy>small{font-size:9px!important}.vx-mlcopy>small b{font-size:11px!important}
  .vx-mldraws>span{padding:7px 9px!important}.vx-mldraws b{font-size:13.5px!important}.vx-mldraws small{font-size:7.4px!important}

  .vx-hud-kit{padding:9px 12px 9px 10px!important;gap:9px!important}
  .vx-kitart{width:48px!important;height:48px!important}
  .vx-kittxt{min-width:118px!important}.vx-kittxt small{font-size:9px!important}.vx-kittxt b{font-size:15px!important}
  .vx-hud-kit .vx-btn{min-height:36px!important;padding:0 13px!important;font-size:11px!important}
}

/* 4) WORKSHOP BALANCE — Scanner art has more transparent visual mass than the
      other props, so reduce only its rendered artwork a touch. */
#vx-items .vx-item:nth-child(3) .vxc-item-media{transform:scale(.91)!important}
#vx-qitems [data-qforge="scanner"] img{transform:scale(.90)!important}
.vx-itemguide span:has(img[src$="ic-crystal-scanner.webp"]) img{transform:scale(.91)!important;transform-origin:center!important}

/* 5) LANDING — visually center the Mine OIX prop and keep all three reward
      cards deliberately balanced. */
.ob .reward:first-child>img{transform:translateY(7px)!important}
@media (max-width:760px){.ob .reward:first-child>img{transform:translateY(4px)!important}}

/* 6) HOW IT WORKS — wider drawer, larger reading scale, still responsive. */
@media (min-width:981px){
  .vxp-howdrawer{width:min(1080px,94vw)!important;padding:clamp(28px,3vw,42px)!important}
}
.vxp-howhead h2{font-size:clamp(34px,3.2vw,48px)!important}
.vxp-howhead p{max-width:760px!important;font-size:13px!important;line-height:1.55!important}
.vxp-guide-nav{gap:8px!important;padding-top:10px!important;padding-bottom:10px!important}
.vxp-guide-nav a{padding:8px 12px!important;font-size:8.4px!important}
.vxp-emission-deep{padding:19px!important}.vxp-emission-deep>header img{width:46px!important;height:46px!important}
.vxp-emission-deep>header b{font-size:14px!important}.vxp-emission-deep>header small{font-size:10.5px!important;max-width:760px!important}
.vxp-emission-stats small{font-size:7.5px!important}.vxp-emission-stats b{font-size:13px!important}.vxp-emission-stats em{font-size:7.8px!important}
.vxp-emission-flow span b{font-size:14px!important}.vxp-emission-flow span small{font-size:8.4px!important}.vxp-emission-deep>p{font-size:10.5px!important}
.vxp-valueflow header p,.vxp-flowcard p{font-size:10.5px!important;line-height:1.55!important}
.vxp-benefits article{min-height:86px!important}.vxp-benefits article img{width:52px!important;height:52px!important}.vxp-benefits article b{font-size:11.5px!important}.vxp-benefits article small{font-size:9px!important;line-height:1.42!important}
.vxp-loop{padding:16px!important}.vxp-loop>header>b{font-size:12px!important}.vxp-loop i{font-size:7.4px!important}.vxp-loop b{font-size:10.5px!important}.vxp-loop small{font-size:8.6px!important;line-height:1.42!important}
.vxp-burnmap header small{font-size:9.5px!important}.vxp-burnmap>div small{font-size:9px!important;line-height:1.45!important}
.vxp-howgrid{gap:12px!important}.vxp-howgrid article{min-height:196px!important;grid-template-columns:66px minmax(0,1fr)!important;gap:15px!important;padding:18px!important}.vxp-howgrid article>img{width:60px!important;height:60px!important}.vxp-howgrid h3{font-size:17px!important}.vxp-howgrid p{font-size:11px!important;line-height:1.55!important}.vxp-howgrid small{font-size:8.8px!important;line-height:1.5!important}.vxp-howstep{font-size:7.8px!important}
.vxp-whygrid b{font-size:11px!important}.vxp-whygrid p{font-size:9.7px!important;line-height:1.52!important}.vxp-whygrid article{padding:14px 15px!important}
.vxp-fair{padding:17px!important}.vxp-fair h3{font-size:16px!important}.vxp-fair b{font-size:10.5px!important}.vxp-fair small{font-size:9px!important;line-height:1.46!important}
.vxp-guide-faq summary{font-size:10.5px!important;padding-top:12px!important;padding-bottom:12px!important}.vxp-guide-faq p{font-size:9.7px!important;line-height:1.55!important}
.vxp-howtruth b{font-size:11px!important}.vxp-howtruth span{font-size:10px!important;line-height:1.5!important}

/* Contract register inside the player guide. Same live deployment registry as
   the full protocol explanation — no duplicated/hard-coded addresses. */
.v28-guide-contracts{scroll-margin-top:72px;margin-top:14px!important;padding:20px!important}
.v28-guide-contracts .vxi-contract-intro{font-size:11px!important;line-height:1.55!important;max-width:90ch!important}
#vxp-how-contracts{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:9px;margin-top:14px}
#vxp-how-contracts .vxi-caddr{min-width:0;padding:12px 13px!important}
#vxp-how-contracts .vxi-caddr b{font-size:10.5px!important}
#vxp-how-contracts .vxi-caddr small{font-size:8.4px!important;line-height:1.35!important}
#vxp-how-contracts .vxi-caddr code{font-size:8px!important}

@media (max-width:980px){
  .vxp-howdrawer{width:min(860px,100%)!important}
  #vxp-how-contracts{grid-template-columns:repeat(2,minmax(0,1fr))}
}
@media (max-width:700px){
  .vxp-howdrawer{width:100%!important;padding:18px!important}
  .vxp-howhead h2{font-size:32px!important}.vxp-howhead p{font-size:11.5px!important}
  .vxp-howgrid article{min-height:0!important;grid-template-columns:52px minmax(0,1fr)!important;padding:15px!important}.vxp-howgrid article>img{width:48px!important;height:48px!important}
  .vxp-howgrid p{font-size:10.5px!important}.vxp-howgrid small{font-size:8.6px!important}
  #vxp-how-contracts{grid-template-columns:1fr}
}

@media (prefers-reduced-motion:reduce){
  .v24-core-aura{display:none!important}
}

/* Runtime wraps landing reward images in .vxc-card-media; keep the first prop
   visually centered after that enhancement too. */
.ob .reward:first-child>.vxc-card-media{transform:translateY(7px)!important}
@media (max-width:760px){.ob .reward:first-child>.vxc-card-media{transform:translateY(4px)!important}}

/* Live era card participates in the guide readability pass as well. */
.vxp-era-card{grid-template-columns:72px minmax(0,1fr) auto!important;gap:18px!important;padding:18px 20px!important}
.vxp-era-orb{width:68px!important;height:68px!important}.vxp-era-orb img{width:50px!important;height:50px!important}
.vxp-era-copy>small,.vxp-era-release small{font-size:8px!important}.vxp-era-copy>b{font-size:23px!important}.vxp-era-copy>span{font-size:9.5px!important}.vxp-era-release b{font-size:18px!important}.vxp-era-release span{font-size:8px!important}
@media(max-width:700px){
  .vxp-era-card{grid-template-columns:54px minmax(0,1fr)!important;padding:14px!important;gap:12px!important}
  .vxp-era-orb{width:52px!important;height:52px!important}.vxp-era-orb img{width:38px!important;height:38px!important}
  .vxp-era-copy>b{font-size:20px!important}
}

/* ===== vein-rev29-landing-refinery-guide.css ===== */
/* ========================================================================
   CAVEWATCH · THE VEIN · REV29
   Landing foreground vines + Workshop refinery order + How To grid finish
   ======================================================================== */

/* Landing page only. The supplied VP9 carries a real alpha channel. */
.ob{isolation:isolate}
.ob .hero{position:relative;z-index:5}
.ob-vines{
  position:absolute;inset:0;width:100%;height:100%;
  object-fit:cover;object-position:center top;
  z-index:7;pointer-events:none;opacity:1;
  filter:none!important;mix-blend-mode:normal!important;
  transform:none!important;background:transparent!important;
}
/* Navigation remains above the decorative foreground; hero content sits under it. */
.ob .top{z-index:8}.ob .socialrail{z-index:8}

/* Orixium Refinery now sits immediately above Raw / tax / liquid / withdraw. */
.vxc-refinery-stage{
  margin:0 0 14px!important;min-height:126px!important;
  grid-template-columns:132px minmax(0,1fr)!important;gap:18px!important;
  padding:12px 20px!important;
  background:radial-gradient(circle at 8% 50%,rgba(249,115,22,.065),transparent 28%),linear-gradient(145deg,rgba(27,19,11,.7),rgba(7,6,5,.66))!important;
}
.vxc-refinery-stage .vxc-refinery-media{width:124px!important;height:106px!important}
.vxc-refinery-stage .vxc-roompiece-copy small{font-size:7.8px!important;letter-spacing:.18em!important}
.vxc-refinery-stage .vxc-roompiece-copy b{font-size:17px!important}
.vxc-refinery-stage .vxc-roompiece-copy span{max-width:78ch;font-size:10px!important;line-height:1.5!important}

/* Seven How-To cards used to leave an empty half-row. Finish with one wide card. */
#vxp-guide-games>article:last-child{
  grid-column:1/-1;min-height:164px!important;
  grid-template-columns:78px minmax(0,1fr)!important;align-items:center;
  background:radial-gradient(circle at 6% 50%,rgba(255,184,55,.06),transparent 26%),linear-gradient(145deg,rgba(255,255,255,.026),rgba(0,0,0,.1))!important;
}
#vxp-guide-games>article:last-child>img{width:72px!important;height:72px!important}
#vxp-guide-games>article:last-child h3{font-size:18px!important}
#vxp-guide-games>article:last-child p{max-width:104ch}
.vxp-howtruth{margin-top:16px!important}

@media(max-width:980px){
  .ob-vines{object-position:58% top}
  .vxc-refinery-stage{grid-template-columns:110px minmax(0,1fr)!important;padding:10px 16px!important}
  .vxc-refinery-stage .vxc-refinery-media{width:104px!important;height:92px!important}
}
@media(max-width:700px){
  #vxp-guide-games>article:last-child{grid-column:auto;min-height:0!important;grid-template-columns:52px minmax(0,1fr)!important;align-items:start}
  #vxp-guide-games>article:last-child>img{width:48px!important;height:48px!important}
  #vxp-guide-games>article:last-child h3{font-size:17px!important}
  .vxc-refinery-stage{grid-template-columns:76px minmax(0,1fr)!important;min-height:88px!important;padding:7px 9px!important;gap:8px!important}
  .vxc-refinery-stage .vxc-refinery-media{width:72px!important;height:72px!important}
  .vxc-refinery-stage .vxc-roompiece-copy b{font-size:12px!important}
  .vxc-refinery-stage .vxc-roompiece-copy span{font-size:8px!important}
  .ob-vines{object-position:62% top}
}

/* ===== vein-rev30-landing-vines.css ===== */
/* ========================================================================
   CAVEWATCH · THE VEIN · REV30
   Landing vines: background-layer placement, smaller scale, warmer grade.
   ======================================================================== */

/*
 * Keep the animation decorative and behind every interactive/readable layer.
 * The source is 1916x1080 VP9+alpha; limiting rendered width avoids the soft
 * look caused by stretching it across ultra-wide displays.
 */
.ob-vines{
  left:50%!important;
  right:auto!important;
  top:-10px!important;
  bottom:auto!important;
  width:min(86vw,2360px)!important;
  height:auto!important;
  aspect-ratio:1916/1080;
  object-fit:contain!important;
  object-position:center top!important;
  z-index:-4!important;
  opacity:.88!important;
  transform:translate3d(-50%,0,0)!important;
  transform-origin:50% 0!important;
  background:transparent!important;
  mix-blend-mode:normal!important;
  filter:url("#ob-vines-grade")!important;
  pointer-events:none!important;
  image-rendering:auto;
  backface-visibility:hidden;
  will-change:transform;
}

/* Content remains unequivocally above the animated foliage. */
.ob .hero,.ob .copy,.ob .jackpot{position:relative;z-index:5}
.ob .top,.ob .socialrail{position:relative;z-index:8}

/* Ultra-wide screens: stop enlarging the source beyond its useful detail. */
@media (min-width:2600px){
  .ob-vines{width:min(72vw,2360px)!important;top:-18px!important;opacity:.86!important}
}

@media (max-width:980px){
  .ob-vines{width:96vw!important;top:0!important;opacity:.78!important}
}

@media (max-width:700px){
  .ob-vines{width:118vw!important;left:54%!important;top:0!important;opacity:.68!important}
}

@media (prefers-reduced-motion:reduce){
  .ob-vines{opacity:.58!important}
}

/* ===== vein-rev31-vines-smooth-fullwidth.css ===== */
/* ========================================================================
   CAVEWATCH · THE VEIN · REV31
   Landing foliage: full-width, background-only, de-magenta + softened.
   ======================================================================== */

/*
 * REV31 deliberately overrides the REV30 size cap. The alpha video now spans
 * the full viewport width again, but its visual weight is lowered so the cave,
 * headline and live Motherlode remain the focal layer.
 */
.ob-vines{
  left:50%!important;
  right:auto!important;
  top:0!important;
  bottom:auto!important;
  width:100vw!important;
  min-width:100vw!important;
  max-width:none!important;
  height:auto!important;
  aspect-ratio:1916/1080!important;
  object-fit:contain!important;
  object-position:center top!important;
  transform:translate3d(-50%,0,0)!important;
  transform-origin:50% 0!important;
  z-index:-4!important;
  opacity:.58!important;
  filter:none!important;
  mix-blend-mode:normal!important;
  background:transparent!important;
  pointer-events:none!important;
  image-rendering:auto!important;
  backface-visibility:hidden;
  will-change:transform,opacity;
}

/* Readability remains above the vegetation without adding blur to the vines. */
.ob .hero,.ob .copy,.ob .jackpot{position:relative;z-index:5}
.ob .top,.ob .socialrail{position:relative;z-index:8}

/* On very wide desktops keep edge-to-edge coverage, just soften it further. */
@media (min-width:2200px){
  .ob-vines{width:100vw!important;min-width:100vw!important;opacity:.56!important}
}

@media (max-width:980px){
  .ob-vines{width:106vw!important;min-width:106vw!important;left:50%!important;opacity:.54!important}
}

@media (max-width:700px){
  .ob-vines{width:126vw!important;min-width:126vw!important;left:51%!important;opacity:.46!important}
}

@media (prefers-reduced-motion:reduce){
  .ob-vines{opacity:.42!important}
}

/* ===== vein-rev32-vines-subtle.css ===== */
/* ========================================================================
   CAVEWATCH · THE VEIN · REV32
   Landing foliage: full-width, background-only, extra-subtle opacity pass.
   ======================================================================== */

/*
 * Keep the cleaned REV31 alpha footage full-width, but reduce its visual
 * weight substantially so it reads as atmospheric framing rather than a
 * foreground illustration. No blur, masks, or blend modes are added.
 */
.ob-vines{
  left:50%!important;
  right:auto!important;
  top:0!important;
  bottom:auto!important;
  width:100vw!important;
  min-width:100vw!important;
  max-width:none!important;
  height:auto!important;
  aspect-ratio:1916/1080!important;
  object-fit:contain!important;
  object-position:center top!important;
  transform:translate3d(-50%,0,0)!important;
  transform-origin:50% 0!important;
  z-index:-4!important;
  opacity:.36!important;
  filter:none!important;
  mix-blend-mode:normal!important;
  background:transparent!important;
  pointer-events:none!important;
  image-rendering:auto!important;
  backface-visibility:hidden;
  will-change:transform,opacity;
}

.ob .hero,.ob .copy,.ob .jackpot{position:relative;z-index:5}
.ob .top,.ob .socialrail{position:relative;z-index:8}

@media (min-width:2200px){
  .ob-vines{width:100vw!important;min-width:100vw!important;opacity:.34!important}
}

@media (max-width:980px){
  .ob-vines{width:106vw!important;min-width:106vw!important;left:50%!important;opacity:.32!important}
}

@media (max-width:700px){
  .ob-vines{width:126vw!important;min-width:126vw!important;left:51%!important;opacity:.28!important}
}

@media (prefers-reduced-motion:reduce){
  .ob-vines{opacity:.24!important}
}

/* ===== vein-rev33-premium-hud.css ===== */
/* ========================================================================== 
   CaveWatch · The Vein · REV33 premium persistent HUD
   21 Aug 2026
   Presentation only: no odds, payout math, wallet signing, RPC or contract
   addresses are changed here.
   ========================================================================== */

/* Robinhood Chain loading beacon: REV34 uses a true VP9-alpha source.
   No blend-mode keying is used; wrappers remain genuinely transparent. */
.vxc-loader-core,
.vxc-loader-core::before,
.vxc-loader-core::after{
  background:transparent!important;
  box-shadow:none!important;
  border-color:transparent!important;
  backdrop-filter:none!important;
  -webkit-backdrop-filter:none!important;
}
.vxc-loader-core video,
.vxc-loader-core img{
  background:transparent!important;
  mix-blend-mode:normal!important;
  isolation:auto!important;
  border:0!important;
  border-radius:0!important;
  box-shadow:none!important;
}

/* ----------------------- persistent five-card command HUD ---------------- */
.vxp-economybar.v33-commandbar{
  position:sticky!important;
  top:82px!important;
  z-index:920!important;
  display:grid!important;
  grid-template-columns:minmax(220px,1.12fr) repeat(4,minmax(170px,.88fr))!important;
  gap:8px!important;
  padding:8px!important;
  margin:0 0 12px!important;
  border:1px solid rgba(255,197,88,.18)!important;
  border-radius:18px!important;
  background:
    radial-gradient(circle at 7% -25%,rgba(255,185,62,.10),transparent 34%),
    linear-gradient(180deg,rgba(18,13,9,.955),rgba(8,6,4,.93))!important;
  box-shadow:
    0 18px 42px rgba(0,0,0,.34),
    0 1px 0 rgba(255,215,133,.05) inset,
    0 -1px 0 rgba(0,0,0,.55) inset!important;
  backdrop-filter:blur(20px) saturate(1.08)!important;
  -webkit-backdrop-filter:blur(20px) saturate(1.08)!important;
  overflow:visible!important;
}
.vxp-economybar.v33-commandbar::before{
  content:"";position:absolute;left:18px;right:18px;top:-1px;height:1px;
  background:linear-gradient(90deg,transparent,rgba(255,209,113,.62) 24%,rgba(255,145,42,.36) 72%,transparent);
  pointer-events:none;
}
.v33-commandbar .v33-stat{
  position:relative!important;
  min-width:0!important;
  min-height:68px!important;
  display:grid!important;
  grid-template-columns:42px minmax(0,1fr)!important;
  align-items:center!important;
  column-gap:10px!important;
  padding:9px 12px!important;
  border:1px solid rgba(255,255,255,.055)!important;
  border-radius:13px!important;
  background:
    radial-gradient(circle at 0 50%,rgba(255,188,67,.055),transparent 54%),
    linear-gradient(145deg,rgba(255,255,255,.027),rgba(255,255,255,.008))!important;
  box-shadow:inset 0 1px 0 rgba(255,255,255,.025),0 8px 22px rgba(0,0,0,.10)!important;
  overflow:hidden!important;
  transition:border-color .18s ease,background .18s ease,box-shadow .18s ease!important;
}
.v33-commandbar .v33-stat::before{
  content:""!important;position:absolute!important;left:0!important;top:12px!important;bottom:12px!important;width:2px!important;
  border-radius:2px!important;background:linear-gradient(#ffc857,#f97316)!important;opacity:.58!important;
}
.v33-commandbar .v33-stat::after{
  content:"";position:absolute;right:-30px;bottom:-48px;width:100px;height:100px;border-radius:50%;
  background:radial-gradient(circle,rgba(255,180,58,.055),transparent 68%);pointer-events:none
}
.v33-commandbar .v33-stat:hover{
  border-color:rgba(255,204,105,.13)!important;
  background:radial-gradient(circle at 0 50%,rgba(255,188,67,.075),transparent 58%),rgba(255,255,255,.023)!important;
  box-shadow:inset 0 1px 0 rgba(255,255,255,.035),0 10px 26px rgba(0,0,0,.16)!important;
}
.v33-commandbar .v33-icon,
.v33-commandbar .vxp-econicon.v33-icon{
  width:38px!important;height:38px!important;display:grid!important;place-items:center!important;flex:none!important;
  border:1px solid rgba(255,193,72,.12)!important;border-radius:11px!important;
  background:radial-gradient(circle,rgba(255,195,82,.075),rgba(255,255,255,.012) 68%)!important;
  box-shadow:inset 0 1px rgba(255,255,255,.025)!important;
}
.v33-commandbar .v33-icon img,
.v33-commandbar .vxp-econicon.v33-icon img{
  width:27px!important;height:27px!important;object-fit:contain!important;
  filter:drop-shadow(0 5px 10px rgba(255,154,35,.20))!important;
}
.v33-commandbar .v33-copy{
  min-width:0!important;display:flex!important;flex-direction:column!important;align-items:flex-start!important;justify-content:center!important;gap:3px!important
}
.v33-commandbar small{
  font:750 7.4px/1 var(--mono)!important;letter-spacing:.145em!important;color:#88765f!important;text-transform:uppercase!important
}
.v33-commandbar b{
  max-width:100%!important;font:800 15px/1.08 var(--display)!important;letter-spacing:-.035em!important;color:#f3dfbd!important;
  white-space:nowrap!important;overflow:hidden!important;text-overflow:ellipsis!important
}
.v33-commandbar em{
  max-width:100%!important;font:520 7.4px/1.15 var(--mono)!important;font-style:normal!important;color:#756858!important;
  white-space:nowrap!important;overflow:hidden!important;text-overflow:ellipsis!important
}
.v33-commandbar .v33-stat-oxr b{color:#ffcb66!important}
.v33-commandbar .vxp-econ-yield::before{background:linear-gradient(#7fe5a2,#d9b85f)!important}
.v33-commandbar .vxp-econ-yield b{color:#afe7bd!important}
.v33-commandbar .vxp-econ-stock::before{background:linear-gradient(#57e08b,#b7ee79)!important}
.v33-commandbar .vxp-econ-stock b{color:#83e5a6!important;font-family:var(--mono)!important;letter-spacing:.025em!important}
.v33-commandbar .vxp-econ-hunt::before{background:linear-gradient(#ffc857,#ff8a32)!important}
.v33-commandbar .vxp-econ-lucky::before{background:linear-gradient(#ffca63,#ff6750)!important}
.v33-commandbar .v33-timer b{
  font-family:var(--mono)!important;font-size:18px!important;letter-spacing:.055em!important;color:#ffe09a!important;
  text-shadow:0 0 18px rgba(255,187,69,.10)
}
.v33-commandbar .vxp-econ-lucky b{color:#ffc86b!important}
.v33-telemetry-sink{display:none!important}

/* The old second telemetry ticker is retired in REV33. If a stale cached HTML
   somehow still contains it, do not let it reappear below the premium HUD. */
#vx-ticker{display:none!important}

/* ---------------------- Lucky Vein tunnel number plates ------------------
   The 1–5 plates are intentionally much larger on desktop. The user taps the
   tunnel, not the label, so this improves legibility without changing game hit
   geometry or tunnel positions. */
@media (min-width:1101px){
  .vx-tplate{
    width:74px!important;height:62px!important;border-radius:15px!important;
    font-size:24px!important;font-weight:900!important;
    border-width:2px!important;
    box-shadow:0 12px 28px rgba(0,0,0,.48),0 0 0 1px rgba(255,191,69,.08),inset 0 1px rgba(255,255,255,.055)!important;
  }
  .vx-tunnel.hov .vx-tplate{transform:translate(-50%,-62%) scale(1.08)!important}
  .vx-tunnel.picked .vx-tplate{transform:translate(-50%,-58%) scale(1.07)!important}
  .vx-tunnel.winner .vx-tplate{transform:translate(-50%,-60%) scale(1.12)!important}
}
@media (min-width:821px) and (max-width:1100px){
  .vx-tplate{width:62px!important;height:52px!important;border-radius:12px!important;font-size:20px!important;border-width:2px!important}
}
@media (min-width:581px) and (max-width:820px){
  .vx-tplate{width:55px!important;height:48px!important;border-radius:11px!important;font-size:18px!important}
}
/* Keep phones practical; still notably larger than the previous 21–23px plates. */
@media (max-width:580px){
  .vx-tplate{width:42px!important;height:38px!important;border-radius:9px!important;font-size:14px!important}
}

@media (max-width:1100px){
  .vxp-economybar.v33-commandbar{
    top:73px!important;display:flex!important;overflow-x:auto!important;overflow-y:hidden!important;
    scroll-snap-type:x proximity!important;scrollbar-width:none!important;padding:7px!important
  }
  .vxp-economybar.v33-commandbar::-webkit-scrollbar{display:none!important}
  .v33-commandbar .v33-stat{flex:0 0 205px!important;scroll-snap-align:start!important;min-height:62px!important}
  .v33-commandbar .v33-stat-oxr{flex-basis:230px!important}
}
@media (max-width:700px){
  .vxp-economybar.v33-commandbar{top:69px!important;border-radius:14px!important;margin-bottom:8px!important}
  .v33-commandbar .v33-stat{flex-basis:184px!important;min-height:58px!important;grid-template-columns:34px minmax(0,1fr)!important;gap:8px!important;padding:7px 9px!important}
  .v33-commandbar .v33-stat-oxr{flex-basis:205px!important}
  .v33-commandbar .v33-icon,.v33-commandbar .vxp-econicon.v33-icon{width:32px!important;height:32px!important;border-radius:9px!important}
  .v33-commandbar .v33-icon img,.v33-commandbar .vxp-econicon.v33-icon img{width:23px!important;height:23px!important}
  .v33-commandbar b{font-size:12.5px!important}.v33-commandbar .v33-timer b{font-size:15px!important}
  .v33-commandbar em{font-size:6.8px!important}
}
@media (prefers-reduced-motion:reduce){.v33-commandbar .v33-stat{transition:none!important}}

/* ===== vein-rev35-visual-recovery.css ===== */
/* ==========================================================================
   CaveWatch · The Vein · REV35 visual recovery
   Restores transparent media and removes missing chamber/refinery dependencies.
   Presentation only.
   ========================================================================== */

/* Never paint a matte behind transparent cinematic media. */
.vxc-media,
.vxc-media>video,
.vxc-media>img,
.v24-item-media,
.vxc-hero-media,
.vxc-stock-media,
.v24-vault-hover-media{
  background:transparent!important;
  background-color:transparent!important;
}
.vxc-media>video{border:0!important;box-shadow:none!important}
.v35-static-anim>img{opacity:1!important;visibility:visible!important;transform:none!important}

/* The clean source never shipped chamber.webp / chamber-r.webp. Render the
   chamber housings in CSS so a clean browser cache cannot produce broken-image
   boxes. Existing selection/winner classes continue to drive off/on opacity. */
.vx-houses .vx-house.vx-house-css{
  pointer-events:auto!important;
  perspective:420px;
}
.vx-houses .vx-house.vx-house-css .vx-house-shell{
  position:absolute!important;inset:0!important;display:block!important;
  overflow:visible!important;
  opacity:1;
  clip-path:polygon(18% 0,82% 0,100% 20%,96% 100%,4% 100%,0 20%);
  background:
    linear-gradient(90deg,rgba(0,0,0,.42),transparent 17%,transparent 83%,rgba(0,0,0,.42)),
    linear-gradient(180deg,#4a2b1b 0%,#2a1811 18%,#100b09 38%,#070605 100%);
  border:1px solid rgba(198,118,48,.55);
  box-shadow:
    inset 0 0 0 3px rgba(58,31,19,.9),
    inset 0 11px 18px rgba(255,144,48,.08),
    0 9px 18px rgba(0,0,0,.55);
  transition:opacity .18s ease,filter .18s ease,transform .18s ease;
}
.vx-houses .vx-house.vx-house-css .vx-house-shell::before{
  content:"";position:absolute;left:19%;right:19%;top:20%;bottom:5%;
  clip-path:polygon(16% 0,84% 0,100% 17%,94% 100%,6% 100%,0 17%);
  background:
    radial-gradient(ellipse at 50% 18%,rgba(255,128,31,.07),transparent 36%),
    linear-gradient(180deg,#17100c,#050403 72%);
  border:1px solid rgba(114,69,39,.72);
  box-shadow:inset 0 0 18px rgba(0,0,0,.9),0 0 0 3px rgba(35,20,14,.72);
}
.vx-houses .vx-house.vx-house-css .vx-house-shell::after{
  content:"";position:absolute;left:25%;right:25%;top:8%;height:5px;border-radius:8px;
  background:linear-gradient(90deg,transparent,#b3662e 20%,#ef9b45 50%,#b3662e 80%,transparent);
  box-shadow:0 0 8px rgba(238,130,48,.28);opacity:.52;
}
.vx-houses .vx-house.vx-house-r .vx-house-shell{transform:scaleX(-1)}
.vx-houses .vx-house.vx-house-css .vx-h-on{
  opacity:0!important;
  filter:brightness(1.28) saturate(1.35) drop-shadow(0 0 12px rgba(255,151,45,.62));
  background:
    radial-gradient(ellipse at 50% 40%,rgba(255,142,39,.26),transparent 52%),
    linear-gradient(180deg,#6a361c 0%,#3b1f12 20%,#180d08 43%,#080504 100%);
}
.vx-houses .vx-house.vx-house-css.lit .vx-h-on,
.vx-houses .vx-house.vx-house-css.sel .vx-h-on,
.vx-houses .vx-house.vx-house-css.winner .vx-h-on{opacity:1!important}
.vx-houses .vx-house.vx-house-css.lit .vx-h-off,
.vx-houses .vx-house.vx-house-css.sel .vx-h-off,
.vx-houses .vx-house.vx-house-css.winner .vx-h-off{opacity:.16!important}

/* Suppress browser broken-image glyphs in any optional cinematic decoration. */
.vxc-media img:not([src]),.vxc-media img[src=""]{display:none!important}

/* ===== vein-rev36-chambers-seo-polish.css ===== */
/* ========================================================================== 
   CaveWatch · REV36 · chamber restoration + landing reward alignment
   Presentation only. No game logic, odds, contracts or transaction paths.
   ========================================================================== */

/* --- Hunt chambers: restore real transparent mine-door art ---------------- */
.vx-houses .vx-house{
  background:none!important;
  border:0!important;
  border-radius:0!important;
  box-shadow:none!important;
  overflow:visible!important;
  isolation:isolate;
}
.vx-houses .vx-house::before,
.vx-houses .vx-house::after{content:none!important;display:none!important}
.vx-houses .vx-house img{
  position:absolute!important;
  inset:0!important;
  width:100%!important;
  height:100%!important;
  object-fit:contain!important;
  object-position:center center!important;
  background:transparent!important;
  border:0!important;
  box-shadow:none!important;
  pointer-events:none!important;
  transform:none!important;
  transition:opacity .17s ease,filter .17s ease!important;
}
.vx-houses .vx-house .vx-h-off{
  opacity:1!important;
  filter:drop-shadow(0 7px 15px rgba(0,0,0,.62))!important;
}
.vx-houses .vx-house .vx-h-on{
  opacity:0!important;
  filter:drop-shadow(0 0 8px rgba(255,198,84,.48)) drop-shadow(0 8px 21px rgba(255,125,18,.42))!important;
}
.vx-houses .vx-house.lit .vx-h-on,
.vx-houses .vx-house.sel .vx-h-on,
.vx-houses .vx-house.winner .vx-h-on{opacity:1!important}
.vx-houses .vx-house.lit .vx-h-off,
.vx-houses .vx-house.sel .vx-h-off,
.vx-houses .vx-house.winner .vx-h-off{opacity:.13!important}
.vx-houses .vx-house.winner .vx-h-on{
  filter:drop-shadow(0 0 14px rgba(255,218,112,.9)) drop-shadow(0 10px 30px rgba(255,133,17,.68))!important;
}

/* --- Landing reward cards: identical visual wells and centered art -------- */
.ob .reward{
  align-items:center!important;
}
@media (min-width:761px){
  .ob .reward{
    grid-template-columns:82px minmax(0,1fr)!important;
    gap:14px!important;
  }
  .ob .reward>img,
  .ob .reward:nth-child(2)>img,
  .ob .reward.stock>img{
    display:block!important;
    width:78px!important;
    height:78px!important;
    min-width:78px!important;
    min-height:78px!important;
    max-width:78px!important;
    max-height:78px!important;
    object-fit:contain!important;
    object-position:50% 50%!important;
    place-self:center!important;
    margin:auto!important;
    transform:none!important;
  }
}
@media (max-width:760px){
  .ob .reward>img,
  .ob .reward:nth-child(2)>img,
  .ob .reward.stock>img{
    display:block!important;
    width:38px!important;
    height:38px!important;
    min-width:38px!important;
    min-height:38px!important;
    max-width:38px!important;
    max-height:38px!important;
    object-fit:contain!important;
    object-position:50% 50%!important;
    margin:0 auto!important;
    transform:none!important;
  }
}
@media (max-width:370px){
  .ob .reward>img,
  .ob .reward:nth-child(2)>img,
  .ob .reward.stock>img{
    width:34px!important;height:34px!important;
    min-width:34px!important;min-height:34px!important;
    max-width:34px!important;max-height:34px!important;
  }
}

/* ===== vein-rev54-launch-polish.css ===== */
/* CaveWatch REV54 · launch UI polish · 2026-08-21
   UI only. No Hunt/Lucky/Vault/Motherlode contract logic is changed. */

/* 1) Account / balance drawer is an overlay and must never fall behind a room. */
.vx-portalbar,
.vxp-actions,
#vx-pod,
#vx-pod .vx-podbtn { overflow:visible!important; }
.vx-portalbar{position:relative!important;z-index:2147483000!important;isolation:auto!important;}
.vxp-actions{position:relative!important;z-index:2147483100!important;}
#vx-pod{position:relative!important;z-index:2147483200!important;}
#vx-podsheet{
  z-index:2147483600!important;
  position:absolute!important;
  isolation:isolate!important;
  filter:drop-shadow(0 24px 55px rgba(0,0,0,.72));
}
.vxp-walletmask,.vx-mmask{z-index:2147483640!important;}

/* 2) Lucky selected/hover artwork calibration ONLY. Number plates stay untouched. */
.vx-tunnel[data-t="2"] .vx-tover{translate:-5px 0!important;}
.vx-tunnel[data-t="3"] .vx-tover{translate:4px 4px!important;}
.vx-tunnel[data-t="4"] .vx-tover{translate:0 -6px!important;}

/* 3) Equipment action becomes Equip / Change, while Workshop remains the upgrade path. */
#vx-kit-action{min-width:92px;}
.vx-quickforge.v54-attention{animation:v54-qf-attn .72s ease-out 1;}
@keyframes v54-qf-attn{
  0%{box-shadow:0 0 0 0 rgba(255,190,65,.55)}
  100%{box-shadow:0 0 0 18px rgba(255,190,65,0)}
}

/* 4) Lighter Robinhood loader. */
.vxc-loader-core>video{display:none!important;}
.vxc-loader-core .v54-rh-loader-logo{
  display:block!important;
  width:88px!important;height:88px!important;object-fit:contain!important;
  margin:0 auto 12px!important;
  filter:drop-shadow(0 0 22px rgba(0,220,35,.25));
  animation:v54-rh-pulse 2.35s ease-in-out infinite;
}
.vxc-loader-core small{opacity:.55!important;letter-spacing:.18em!important;}
.vxc-loader-core b{font-size:11px!important;letter-spacing:.13em!important;opacity:.82!important;}
.vxc-loader-ring{opacity:.48!important;filter:saturate(.75)!important;}
@keyframes v54-rh-pulse{0%,100%{transform:scale(.96);opacity:.78}50%{transform:scale(1.045);opacity:1}}
@media(prefers-reduced-motion:reduce){.vxc-loader-core .v54-rh-loader-logo{animation:none!important;}}

/* 5) Revenue Drop presentation. The contract/claim wiring comes in the next pass. */
.v54-revenue-note{
  margin-top:12px;padding:11px 13px;border:1px solid rgba(255,190,65,.16);
  border-radius:12px;background:rgba(255,190,65,.045);color:#a8977d;
  font:600 10px/1.55 var(--mono,monospace);letter-spacing:.03em;
}
.v54-revenue-note b{color:#f2d9aa;}
.v54-token-universe{display:grid!important;grid-template-columns:repeat(4,minmax(0,1fr));gap:10px!important;}
.v54-token{
  min-height:70px;display:flex;align-items:center;gap:10px;padding:10px 12px;
  border:1px solid rgba(255,255,255,.075);border-radius:13px;
  background:linear-gradient(145deg,rgba(255,255,255,.035),rgba(255,255,255,.012));
}
.v54-token img,.v54-token .v54-fallback{
  width:36px;height:36px;object-fit:contain;border-radius:50%;flex:0 0 36px;
}
.v54-token .v54-fallback{display:grid;place-items:center;background:#17130e;border:1px solid rgba(255,190,65,.2);color:#ffc44d;font:800 9px var(--mono,monospace)}
.v54-token span{min-width:0}.v54-token b{display:block;color:#f7ead6;font-size:12px}.v54-token small{display:block;color:#7e705d;font:700 8px var(--mono,monospace);margin-top:3px}
.v54-token.mystery .v54-fallback{font-size:18px;color:#ffe49b;box-shadow:0 0 22px rgba(255,190,65,.12)}
.v54-revenue-econ{grid-template-columns:repeat(3,1fr)!important;}
.v54-revenue-econ span{min-width:0!important;}
.v54-revenue-econ span small{white-space:normal!important;}
.v54-revenue-econ span b{font-size:20px!important;}
.v54-revenue-pending{display:grid;gap:8px;padding:18px;border:1px solid rgba(255,190,65,.13);border-radius:14px;background:rgba(255,190,65,.03)}
.v54-revenue-pending b{color:#f1d49d;font-size:14px}.v54-revenue-pending span{color:#8d806c;font-size:11px;line-height:1.55}

/* 6) Landing reward art: OIX / ETH / Revenue Drop use one visual footprint. */
.reward>img,.rewards .reward>img,.reward-grid .reward>img{
  width:82px!important;height:82px!important;min-width:82px!important;max-width:82px!important;
  object-fit:contain!important;object-position:center!important;margin:0!important;
  transform:none!important;filter:none;
}
.reward.stock>img{width:82px!important;height:82px!important;}

@media(max-width:900px){
  .v54-token-universe{grid-template-columns:repeat(2,minmax(0,1fr));}
  .reward>img,.rewards .reward>img,.reward-grid .reward>img{width:68px!important;height:68px!important;min-width:68px!important;max-width:68px!important;}
}

.v54-token img:not([src]),.v54-token img[src=""]{display:none!important;}

/* Revenue Drop V1: LINK is registered on-chain but launch-paused until its
   liquidity is recertified. Keep it visible as part of the future universe
   without presenting it as selectable today. */
.v54-token.is-paused{opacity:.46;filter:saturate(.45)}
.v54-token.is-paused small{letter-spacing:.06em}

/* ===== vein-rev56-revenue-claim.css ===== */
/* CaveWatch REV56 · Revenue Drop live-claim polish + landing media balance */

/* Revenue layout: no implementation-note boxes; claim state gets the visual weight. */
.v56-revenue-grid{align-items:stretch!important;grid-template-columns:minmax(0,1.08fr) minmax(420px,.92fr)!important;gap:16px!important}
.v56-revenue-grid>.vxs-card{height:100%!important;min-height:360px!important}
.v56-revenue-grid .vxs-live{display:flex!important;flex-direction:column!important}
.v56-revenue-grid .vxs-live .vxs-state{flex:1!important;display:flex!important}
.v56-revenue-grid .vxs-live .vxs-state>.vxs-user,.v56-revenue-grid .vxs-live .vxs-state>.vxs-loading{width:100%!important}
.v54-revenue-note,.v54-revenue-pending{display:none!important}

/* Equal baseline for 2 / 1 / 1. No inherited separator offsets. */
.v56-revenue-econ{display:grid!important;grid-template-columns:repeat(3,minmax(0,1fr))!important;gap:8px!important;padding:10px!important;align-items:stretch!important}
.v56-revenue-econ>i{display:none!important}
.v56-revenue-econ>span{min-height:78px!important;display:flex!important;flex-direction:column!important;align-items:center!important;justify-content:center!important;text-align:center!important;margin:0!important;padding:10px 8px!important;border:1px solid rgba(255,255,255,.055)!important;border-radius:11px!important;background:rgba(255,255,255,.015)!important;transform:none!important}
.v56-revenue-econ>span small{display:block!important;min-height:13px!important;margin:0 0 6px!important;line-height:1.15!important;white-space:normal!important}
.v56-revenue-econ>span b{font-size:24px!important;line-height:1!important;margin:0!important}

/* Premium Revenue questions. */
.v56-revenue-faq{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:10px;margin:14px 0}
.v56-revenue-faq details{padding:0!important;overflow:hidden!important;border-color:rgba(255,190,65,.11)!important;background:linear-gradient(145deg,rgba(255,190,65,.025),rgba(255,255,255,.012))!important}
.v56-revenue-faq summary{list-style:none;cursor:pointer;min-height:58px;display:flex;align-items:center;justify-content:space-between;gap:12px;padding:15px 17px;color:#f0dfc5;font:700 12px/1.25 var(--display,"Unbounded",sans-serif)}
.v56-revenue-faq summary::-webkit-details-marker{display:none}
.v56-revenue-faq summary i{width:22px;height:22px;border:1px solid rgba(255,190,65,.18);border-radius:50%;position:relative;flex:0 0 22px}
.v56-revenue-faq summary i:before,.v56-revenue-faq summary i:after{content:"";position:absolute;left:6px;right:6px;top:10px;height:1px;background:#ffc857;transition:.2s ease}
.v56-revenue-faq summary i:after{transform:rotate(90deg)}
.v56-revenue-faq details[open] summary i:after{transform:rotate(0)}
.v56-revenue-faq p{margin:0;padding:0 17px 16px;color:#8d806d;font-size:11px;line-height:1.55}

/* Token badges must never show a broken-image icon. */
.v54-token img{background:transparent!important}
.v54-token .v54-fallback{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}

/* Landing: smaller cards, but enlarge the actual transparent ETH / chest loops. */
@media(min-width:761px){
  .ob .rewards{max-width:940px!important;gap:10px!important}
  .ob .rewards .reward{min-height:112px!important;padding:11px 14px!important;grid-template-columns:92px minmax(0,1fr)!important;gap:10px!important;overflow:hidden!important}
  .ob .rewards .reward-mine>img{width:72px!important;height:72px!important;min-width:72px!important;max-width:72px!important}
  .ob .rewards .reward-eth>.reward-loop{width:150px!important;height:150px!important;transform:scale(1.02)!important}
  .ob .rewards .reward-stock>.reward-loop{width:138px!important;height:138px!important;transform:scale(1.03)!important}
  .ob .rewards .reward b{font-size:12.5px!important}
  .ob .rewards .reward span{font-size:10px!important;line-height:1.42!important}
}
@media(max-width:900px){.v56-revenue-grid{grid-template-columns:1fr!important}.v56-revenue-grid>.vxs-card{min-height:0!important}}
@media(max-width:700px){
  .v56-revenue-faq{grid-template-columns:1fr}
  .v56-revenue-econ>span{min-height:68px!important}.v56-revenue-econ>span b{font-size:20px!important}
  .ob .rewards .reward-mine>img{width:44px!important;height:44px!important;min-width:44px!important;max-width:44px!important}
  .ob .rewards .reward-eth>.reward-loop{width:86px!important;height:86px!important}
  .ob .rewards .reward-stock>.reward-loop{width:80px!important;height:80px!important}
}

/* Revenue Drop: reveal actual purchased assets for a published wallet claim */
.vxs-revealed-row{
  display:grid;
  grid-template-columns:repeat(2,minmax(0,1fr));
  gap:12px;
}
.vxs-revealed-token{
  min-height:92px;
  display:flex;
  align-items:center;
  justify-content:center;
  gap:12px;
  padding:12px 16px;
  border:1px solid rgba(255,200,87,.24);
  border-radius:14px;
  background:rgba(10,9,7,.58);
}
.vxs-revealed-token img{
  width:46px;
  height:46px;
  object-fit:contain;
  flex:0 0 46px;
}
.vxs-revealed-token>span{
  display:flex;
  flex-direction:column;
  min-width:0;
}
.vxs-revealed-token b{
  font-size:12px;
  letter-spacing:.08em;
}
.vxs-revealed-token strong{
  margin-top:2px;
  font-size:17px;
  line-height:1.15;
  overflow-wrap:anywhere;
}
.vxs-revealed-token small{
  margin-top:2px;
  opacity:.55;
}
.vxs-claim-preview.is-revealed .vxs-claim-preview-head b{
  color:#8ff0a4;
}

/* ===== vein-rev62-responsive-scope-calibration.css ===== */
/* ========================================================================== 
   CaveWatch · REV62 · responsive calibration + landing-only viewport scope
   Presentation-only layer over REV61.

   Fixes:
   - Win ETH + Revenue Drop are reduced again on every viewport family while
     keeping the genuine REV60 looping WebM behavior untouched.
   - Community rails are explicitly fixed to the RIGHT and kept fully visible
     across desktop, tablet and phone breakpoints.
   - Robinhood transition keeps the exact existing ring/circle/text; ONLY the
     green feather image is reduced for more breathing room.
   - One-screen/no-scroll behavior is scoped ONLY to body.cw-landing. /vein and
     /test-vein retain normal document height and scrolling/flexibility.
   ========================================================================== */

/* -------------------- Robinhood transition: logo only -------------------- */
/* REV61 = 70px. REV62 = 54px (~22.9% smaller). Ring/core/text are untouched. */
.vxc-loader-core .v54-rh-loader-logo{
  width:54px!important;
  height:54px!important;
  max-width:54px!important;
  max-height:54px!important;
  object-fit:contain!important;
  margin:0 auto 14px!important;
}

/* ----------------------- Landing reward calibration ---------------------- */
/* Desktop / tablet landscape: preserve compact card band, but reduce the two
   animated props from REV61's 134px canvas to 114px (~15% smaller). */
@media (min-width:761px){
  body.cw-landing .ob .rewards{
    margin-top:12px!important;
    max-width:940px!important;
    gap:10px!important;
  }

  body.cw-landing .ob .rewards .reward{
    height:108px!important;
    min-height:108px!important;
    max-height:108px!important;
    padding:5px 12px!important;
    gap:9px!important;
    align-items:center!important;
  }

  body.cw-landing .ob .rewards .reward:nth-child(2),
  body.cw-landing .ob .rewards .reward:nth-child(3),
  body.cw-landing .ob .rewards .reward-eth,
  body.cw-landing .ob .rewards .reward-stock{
    grid-template-columns:92px minmax(0,1fr)!important;
    overflow:hidden!important;
  }

  body.cw-landing .ob .rewards .reward:nth-child(2)>.vxc-card-media,
  body.cw-landing .ob .rewards .reward:nth-child(3)>.vxc-card-media,
  body.cw-landing .ob .rewards .reward-eth>.vxc-card-media,
  body.cw-landing .ob .rewards .reward-stock>.vxc-card-media{
    position:relative!important;
    width:92px!important;
    height:88px!important;
    min-width:92px!important;
    min-height:88px!important;
    max-width:92px!important;
    max-height:88px!important;
    place-self:center!important;
    margin:0!important;
    overflow:hidden!important;
    transform:none!important;
    border-radius:0!important;
    background:transparent!important;
  }

  body.cw-landing .ob .rewards .reward:nth-child(2)>.vxc-card-media>img,
  body.cw-landing .ob .rewards .reward:nth-child(2)>.vxc-card-media>video,
  body.cw-landing .ob .rewards .reward:nth-child(3)>.vxc-card-media>img,
  body.cw-landing .ob .rewards .reward:nth-child(3)>.vxc-card-media>video,
  body.cw-landing .ob .rewards .reward-eth>.vxc-card-media>img,
  body.cw-landing .ob .rewards .reward-eth>.vxc-card-media>video,
  body.cw-landing .ob .rewards .reward-stock>.vxc-card-media>img,
  body.cw-landing .ob .rewards .reward-stock>.vxc-card-media>video{
    position:absolute!important;
    left:50%!important;
    top:50%!important;
    width:114px!important;
    height:114px!important;
    min-width:114px!important;
    min-height:114px!important;
    max-width:none!important;
    max-height:none!important;
    margin:0!important;
    object-fit:contain!important;
    object-position:center!important;
    transform:translate(-50%,-50%)!important;
    transform-origin:center!important;
  }

  body.cw-landing .ob .rewards .reward:nth-child(2)>div,
  body.cw-landing .ob .rewards .reward:nth-child(3)>div,
  body.cw-landing .ob .rewards .reward-eth>div,
  body.cw-landing .ob .rewards .reward-stock>div{
    position:relative!important;
    z-index:3!important;
    min-width:0!important;
  }

  body.cw-landing .ob .vxc-activity{margin-top:7px!important;}
}

/* Phone / narrow tablet: REV61 used an 80px movie canvas. REV62 uses 68px
   and a 54px crop viewport so the two props stay balanced with Mine OIX. */
@media (max-width:760px){
  body.cw-landing .ob .rewards{margin-top:10px!important}
  body.cw-landing .ob .rewards .reward{
    min-height:70px!important;
    padding-top:4px!important;
    padding-bottom:4px!important;
  }
  body.cw-landing .ob .rewards .reward:nth-child(2)>.vxc-card-media,
  body.cw-landing .ob .rewards .reward:nth-child(3)>.vxc-card-media,
  body.cw-landing .ob .rewards .reward-eth>.vxc-card-media,
  body.cw-landing .ob .rewards .reward-stock>.vxc-card-media{
    position:relative!important;
    width:54px!important;
    height:54px!important;
    min-width:54px!important;
    min-height:54px!important;
    max-width:54px!important;
    max-height:54px!important;
    flex:0 0 54px!important;
    margin:0!important;
    overflow:hidden!important;
    transform:none!important;
    background:transparent!important;
  }
  body.cw-landing .ob .rewards .reward:nth-child(2)>.vxc-card-media>img,
  body.cw-landing .ob .rewards .reward:nth-child(2)>.vxc-card-media>video,
  body.cw-landing .ob .rewards .reward:nth-child(3)>.vxc-card-media>img,
  body.cw-landing .ob .rewards .reward:nth-child(3)>.vxc-card-media>video,
  body.cw-landing .ob .rewards .reward-eth>.vxc-card-media>img,
  body.cw-landing .ob .rewards .reward-eth>.vxc-card-media>video,
  body.cw-landing .ob .rewards .reward-stock>.vxc-card-media>img,
  body.cw-landing .ob .rewards .reward-stock>.vxc-card-media>video{
    position:absolute!important;
    left:50%!important;
    top:50%!important;
    width:68px!important;
    height:68px!important;
    min-width:68px!important;
    min-height:68px!important;
    max-width:none!important;
    max-height:none!important;
    margin:0!important;
    object-fit:contain!important;
    object-position:center!important;
    transform:translate(-50%,-50%)!important;
    transform-origin:center!important;
  }
}

/* ------------------------- Community rail placement ---------------------- */
/* Old responsive layers moved these into document flow. REV62 makes placement
   deterministic: fixed, vertical, right-side, safe-area aware and fully seen. */
body.cw-landing .ob .socialrail,
body[data-cw-chrome="portal"] .vxp-socialrail{
  position:fixed!important;
  left:auto!important;
  right:max(14px,env(safe-area-inset-right))!important;
  top:auto!important;
  bottom:max(14px,env(safe-area-inset-bottom))!important;
  inset:auto max(14px,env(safe-area-inset-right)) max(14px,env(safe-area-inset-bottom)) auto!important;
  width:auto!important;
  max-width:none!important;
  height:auto!important;
  margin:0!important;
  padding:0!important;
  display:flex!important;
  flex-direction:column!important;
  align-items:center!important;
  justify-content:flex-end!important;
  gap:8px!important;
  transform:none!important;
  z-index:9500!important;
  overflow:visible!important;
}

@media (max-width:700px){
  body.cw-landing .ob .socialrail,
  body[data-cw-chrome="portal"] .vxp-socialrail{
    right:max(10px,env(safe-area-inset-right))!important;
    bottom:max(12px,env(safe-area-inset-bottom))!important;
    inset:auto max(10px,env(safe-area-inset-right)) max(12px,env(safe-area-inset-bottom)) auto!important;
    gap:6px!important;
  }
  body.cw-landing .ob .socialrail a,
  body[data-cw-chrome="portal"] .vxp-socialrail a{
    width:36px!important;
    height:36px!important;
    min-width:36px!important;
    min-height:36px!important;
    border-radius:11px!important;
  }
  body.cw-landing .ob .socialrail svg,
  body[data-cw-chrome="portal"] .vxp-socialrail svg{
    width:15px!important;
    height:15px!important;
  }
}

/* ------------------- Landing-only one-viewport behavior ------------------ */
/* CRITICAL: do not target generic html/body. Only the dedicated landing body
   class is locked. /vein and /test-vein remain naturally scrollable. */
@media (min-width:901px) and (min-height:760px){
  html.cw-landing-root,
  body.cw-landing{
    height:100%!important;
    min-height:0!important;
    max-height:100%!important;
    overflow-y:hidden!important;
    overscroll-behavior-y:none!important;
  }
  body.cw-landing>.ob,
  body.cw-landing .ob{
    height:100dvh!important;
    min-height:100dvh!important;
    max-height:100dvh!important;
    grid-template-rows:auto minmax(0,1fr)!important;
    overflow:hidden!important;
  }
  body.cw-landing .ob .top{
    padding-top:13px!important;
    padding-bottom:8px!important;
  }
  body.cw-landing .ob .hero{
    min-height:0!important;
    height:100%!important;
    max-height:100%!important;
    align-self:stretch!important;
    align-items:center!important;
    padding-top:0!important;
    padding-bottom:16px!important;
  }
  body.cw-landing .ob .copy{padding-top:0!important;padding-bottom:0!important}
}

@media (min-width:901px) and (min-height:760px) and (max-height:900px){
  body.cw-landing .ob h1{margin-top:13px!important;margin-bottom:13px!important}
  body.cw-landing .ob .lead{margin-bottom:17px!important;line-height:1.48!important}
  body.cw-landing .ob .rewards{margin-top:11px!important}
  body.cw-landing .ob .jackpot{min-height:470px!important}
}

/* /vein and /test-vein intentionally receive NO viewport-height or overflow
   overrides here. Their existing application layout remains authoritative. */

/* Functional landing loops stay visible under reduced-motion preference.
   REV60/REV22 still own autoplay + poster-until-playing behavior. */
@media (prefers-reduced-motion:reduce){
  body.cw-landing .ob .rewards .reward:nth-child(2)>.vxc-card-media>video,
  body.cw-landing .ob .rewards .reward:nth-child(3)>.vxc-card-media>video,
  body.cw-landing .ob .rewards .reward-eth>.vxc-card-media>video,
  body.cw-landing .ob .rewards .reward-stock>.vxc-card-media>video{
    display:block!important;
  }
}

/* ===== vein-rev77-landing.css ===== */
/* ===========================================================================
   REV77 — landing page.

   MEASURED with tools/motion-audit.cjs and the surface audit, at 1440 and 390:

   1. FIVE VIDEOS, ALL preload="auto", ALL PLAYING ON FIRST PAINT.
      the-hunt-bg.mp4 (611 KB), landing-vines-smooth.webm, eth-core-idle-alpha,
      stock-closed-hover, oryx-machine-loop. Every one autoplays and loops from
      load, so a first-time visitor on a phone decodes five video streams
      concurrently before they have read a word. Video decode is the single
      most expensive thing on this page and none of it is under any condition.

      Handled in vein-landing-perf.js: only the background stays running; the
      rest start when they scroll into view and pause when they leave.
      preload is dropped to metadata so the bytes are not fetched up front.

   2. TWO ALWAYS-RUNNING ANIMATIONS THAT REPAINT EVERY FRAME, FOREVER:
        drift          on .dust     -> background-position
        vxcJackBreath  on .jptotal  -> text-shadow
      Neither is compositor-accelerated. Both are decorative. They are gated to
      on-screen below, and the dust drift is rebuilt on transform, which is.

   3. TAP TARGETS UNDER THE 44px MINIMUM ON A PHONE — six of them, including
      the audio toggles at 36x36 and .brand at 124x37. These are the controls a
      thumb has to hit.

   NOT CHANGED, deliberately: .reward, .vxc-media and #ob all report
   scrollWidth > clientWidth, but every one of them is overflow-x:hidden. That
   is decorative bleed behind a clip, not a layout fault, and "fixing" it would
   remove an intended effect.
   =========================================================================== */

/* ── 1. dust drift: same look, on the compositor ─────────────────────────
   Animating background-position repaints the layer every frame. Translating a
   doubled tile is visually identical and runs on the compositor. The element
   is oversized and offset so the wrap point stays off-screen. */
@keyframes vxDustDrift {
  /* Embers rise. This used to translate -50% on X, which read as particles
     blowing in from the side rather than lifting off the cave floor. The tile
     is stacked double-height above the layer (see .ob .dust::after) so a 50%
     upward translate loops seamlessly. */
  from { transform: translate3d(0, 0, 0); }
  to   { transform: translate3d(0, -50%, 0); }
}
.ob .dust {
  /* The original "drift" keyframes moved background-position on BOTH axes
     (90px/-80px/50px/-40px horizontally), which is where the sideways motion
     came from. Killing the animation entirely left these four gradient layers
     frozen on screen instead. Keep the layer animated, purely vertical. */
  animation: vxDustRise 34s linear infinite !important;
}
@keyframes vxDustRise {
  to { background-position: 0 -190px, 0 -210px, 0 -240px, 0 -290px; }
}
.ob .dust::after {
  content: "";
  position: absolute;
  /* Double HEIGHT, extending above the layer, so the upward translate always
     has fresh tile to pull down from. Was "0 -100% 0 0" (double width beside
     it), which only ever worked for a horizontal drift. */
  inset: -100% 0 0 0;
  pointer-events: none;
  background: inherit;
  animation: vxDustDrift 42s linear infinite;
}

/* ── 2. the jackpot figure breathes on opacity, not text-shadow ──────────
   text-shadow forces a repaint of the glyphs every frame. A sibling glow at
   varying opacity gives the same pulse for free. */
.jptotal { animation: none !important; position: relative; }
.jptotal::after {
  content: "";
  position: absolute;
  inset: -8% -6%;
  pointer-events: none;
  border-radius: 40%;
  background: radial-gradient(ellipse at center, rgba(243, 166, 15, .28), transparent 70%);
  opacity: .35;
  animation: vxJackBreath 4.2s ease-in-out infinite;
}
@keyframes vxJackBreath {
  0%, 100% { opacity: .22; }
  50%      { opacity: .58; }
}

/* ── 3. tap targets ─────────────────────────────────────────────────────
   44px is the Apple HIG minimum and the one a thumb actually needs. The audio
   toggles measured 36x36 on a phone and 39x39 on desktop. The visual size of
   the button is unchanged — the hit area is grown with a pseudo-element, so
   nothing in the layout shifts. */
.audiobtn { position: relative; }
.audiobtn::after {
  content: "";
  position: absolute;
  top: 50%;
  left: 50%;
  width: 44px;
  height: 44px;
  transform: translate(-50%, -50%);
}
@media (max-width: 760px) {
  .audiobtn::after { width: 48px; height: 48px; }
  /* The brand lockup is a link; give it a real row height rather than 37px. */
  .top .brand { min-height: 44px; display: inline-flex; align-items: center; }
}

/* ── 4. respect the setting ─────────────────────────────────────────────── */
@media (prefers-reduced-motion: reduce) {
  .ob .dust::after,
  .jptotal::after { animation: none; }
  .jptotal::after { opacity: .3; }
}

/* ===== vein-rev78-polish.css ===== */
/* ===========================================================================
   REV78 — site-wide polish.

   Two halves, in this order on purpose: take cost away, then spend it.

   MEASURED per view with tools/motion-audit.cjs before writing any of this:

       view     idle fps   backdrop-filter on screen
       forge       49        1.20 Mpx
       vault       45        1.20 Mpx
       trade        8        3.19 Mpx     <- worst surface on the site

   ═══ PART A — SUBTRACT ═══════════════════════════════════════════════════

   A1. CLOSED DRAWERS ARE STILL COMPOSITING A BLUR.
       Both side drawers are moved off-screen with a transform, not hidden:

           #vxm-drawer     display:flex  opacity:1  blur(25px)  471x1000
           .cwchat-drawer  display:flex  opacity:1  blur(28px)  421x1000

       A transform does not stop backdrop-filter. The compositor snapshots and
       blurs ~900k pixels every frame for two panels nobody can see. Same fault
       as the two scrims fixed in rev75, one layer further in.

   A2. THE BLUR RADII ARE LARGER THAN THEY NEED TO BE.
       backdrop-filter cost scales with radius. 28px and 25px on a full-height
       panel is the single most expensive thing on those surfaces, and past
       roughly 16px the difference is not visible against these dark, low-detail
       backgrounds — the panels are already 86% opaque. Radius is reduced ONLY
       on the large surfaces; small chips keep theirs, where the cost is
       negligible and the glassiness reads.

   ═══ PART B — ADD ════════════════════════════════════════════════════════

   cavewatch-motion.js already provides card hover lift and button press, so
   none of that is duplicated here. What was missing is the part that makes an
   interface feel considered rather than merely animated:

     B1  keyboard focus states — there were none, so tabbing through the game
         was invisible. This is both an accessibility fix and the thing that
         separates a polished product from a decorated one.
     B2  selection emphasis on the game controls (chambers, tunnels, tiers) so
         a chosen lane reads as chosen at a glance, not just tinted.
     B3  a view transition, so switching tabs resolves instead of cutting.
     B4  staggered entrance on grids, so a board assembles rather than appears.
     B5  press feedback on the primary game actions.

   Every effect animates ONLY transform and opacity, so none of it costs layout
   or paint. Nothing runs on a timer: everything is triggered by hover, focus,
   selection or entrance, and an idle page animates nothing it did not before.
   =========================================================================== */

/* ═══ PART A ═════════════════════════════════════════════════════════════ */

/* A1 — a drawer that is not open composites nothing. */
.vxm-drawer:not(.open),
.cwchat-drawer:not(.open) {
  backdrop-filter: none;
  -webkit-backdrop-filter: none;
}

/* A2 — cheaper radii on the large glass surfaces only. */
.vxm-drawer.open {
  backdrop-filter: blur(16px) saturate(1.16);
  -webkit-backdrop-filter: blur(16px) saturate(1.16);
}
.cwchat-drawer.open {
  backdrop-filter: blur(16px) saturate(1.3);
  -webkit-backdrop-filter: blur(16px) saturate(1.3);
}
#vxp-economybar {
  backdrop-filter: blur(14px) saturate(1.08);
  -webkit-backdrop-filter: blur(14px) saturate(1.08);
}
#vx-portalbar.vx-topline {
  backdrop-filter: blur(13px) saturate(1.15);
  -webkit-backdrop-filter: blur(13px) saturate(1.15);
}

/* ═══ PART B ═════════════════════════════════════════════════════════════ */

/* B1 — keyboard focus. :focus-visible only, so a mouse click never draws a
   ring, but a Tab key always does. Drawn with outline rather than box-shadow
   so it cannot be clipped by an ancestor's overflow. */
.vx-guide a:focus-visible,
.vx-view button:focus-visible,
.vx-view a:focus-visible,
.vx-view input:focus-visible,
.vx-view select:focus-visible,
.vx-tabs button:focus-visible,
.vxt-figs a:focus-visible,
.vx-gnav a:focus-visible,
#vx-chlist [role="button"]:focus-visible,
.vx-node:focus-visible,
.vx-chrow:focus-visible {
  outline: 2px solid var(--gold, #f3a60f);
  outline-offset: 2px;
  border-radius: 8px;
}
/* Never leave a control with no focus indication at all. */
.vx-view :focus-visible { outline-color: var(--gold, #f3a60f); }

/* B2 — selection emphasis on the game controls.
   A selected lane should read as selected from across the room. The ring is a
   pseudo-element so it cannot disturb the element's own transform, which the
   chamber map animates. */
.vx-tiers button.on,
.vx-comp-modebtn.on,
.vx-node.selected,
.vx-chrow.selected,
.vx-tunnel.selected {
  position: relative;
}
.vx-tiers button.on::after,
.vx-comp-modebtn.on::after,
.vx-node.selected::after,
.vx-chrow.selected::after,
.vx-tunnel.selected::after {
  content: "";
  position: absolute;
  inset: -2px;
  border-radius: inherit;
  pointer-events: none;
  box-shadow: 0 0 0 1.5px rgba(243, 166, 15, .55), 0 0 22px rgba(243, 166, 15, .18);
  animation: vxSelectIn .32s cubic-bezier(.2, .9, .3, 1);
}
@keyframes vxSelectIn {
  from { opacity: 0; transform: scale(.96); }
  to   { opacity: 1; transform: scale(1); }
}

/* B3 — view transition. The tab panels are toggled with display, which cannot
   be transitioned, so the entrance is an animation on the panel that becomes
   visible. Short and slight: a page that swoops on every tab press is
   tiresome by the third press. */
@keyframes vxViewIn {
  from { opacity: 0; transform: translate3d(0, 6px, 0); }
  to   { opacity: 1; transform: none; }
}
.vx-view[style*="block"] {
  animation: vxViewIn .3s cubic-bezier(.2, .8, .3, 1);
}

/* B4 — staggered entrance for boards and grids. Six steps only: beyond that
   the last card arrives late enough to feel broken rather than choreographed,
   and every extra nth-child rule is more selector matching for no gain. */
@keyframes vxCardIn {
  from { opacity: 0; transform: translate3d(0, 8px, 0); }
  to   { opacity: 1; transform: none; }
}
.vxt-figs > article,
.vx-metrics > article,
.vxs-grid > article,
.vx-gamepillars > article {
  animation: vxCardIn .42s cubic-bezier(.2, .8, .3, 1) both;
}
.vxt-figs > article:nth-child(2),
.vx-metrics > article:nth-child(2),
.vxs-grid > article:nth-child(2),
.vx-gamepillars > article:nth-child(2) { animation-delay: .05s; }
.vxt-figs > article:nth-child(3),
.vx-metrics > article:nth-child(3),
.vx-gamepillars > article:nth-child(3) { animation-delay: .1s; }
.vx-metrics > article:nth-child(4) { animation-delay: .15s; }
.vx-metrics > article:nth-child(5) { animation-delay: .2s; }

/* B5 — press feedback on the primary game actions. cavewatch-motion.js covers
   generic buttons; these are the ones that move money and deserve a firmer,
   more deliberate response. */
.vx-btn-primary:active,
.vx-btn-danger:active,
#vx-lock-go:active,
#vx-sac-go:active,
#vx-v-claimgo:active,
#vx-comp-now:active {
  transform: scale(.975);
  transition: transform .08s ease;
}
.vx-btn-primary,
.vx-btn-danger {
  transition: transform .18s cubic-bezier(.2, .8, .3, 1);
}

/* A control that is disabled must not pretend to respond. */
.vx-btn:disabled,
.vx-btn[disabled],
button:disabled {
  transform: none !important;
  cursor: not-allowed;
}

/* ═══ reduced motion ═════════════════════════════════════════════════════
   Everything decorative stops. Focus rings and selection emphasis STAY — they
   carry information, and a user who asked for less motion still needs to see
   where the keyboard is and which lane is chosen. */
@media (prefers-reduced-motion: reduce) {
  .vx-view[style*="block"],
  .vxt-figs > article,
  .vx-metrics > article,
  .vxs-grid > article,
  .vx-gamepillars > article,
  .vx-tiers button.on::after,
  .vx-comp-modebtn.on::after,
  .vx-node.selected::after,
  .vx-chrow.selected::after,
  .vx-tunnel.selected::after {
    animation: none;
  }
  .vx-btn-primary,
  .vx-btn-danger { transition: none; }
}

/* ═══ A3 — THE SINGLE MOST EXPENSIVE ELEMENT ON THE SITE ═════════════════

   MEASURED on the trade view: hiding #vxs-wait alone takes idle frame rate
   from 9 fps to 58 fps. Nothing else came close — removing every other
   backdrop-filter, every mote and every video moved it by 1-2 fps combined.

   #vxs-wait is the "awaiting liquidity" veil over the trade terminal. It is
   position:absolute inset:0 across the whole panel — measured 1448x1372, just
   under 2 megapixels — and carries backdrop-filter:blur(2px).

   A small radius is not a cheap blur. Cost scales with the AREA the compositor
   has to re-snapshot, and this one covers a live-updating terminal, so the
   snapshot is invalidated and redone on every frame. Two megapixels of that is
   an entire frame budget.

   The veil does not need it. Its own background is already a near-opaque
   gradient (72% to 86% black); at that opacity a 2px blur of what is behind it
   is not perceptible. Removing the filter keeps the veil looking identical and
   returns the terminal to 60 fps. */
#vxs-wait {
  backdrop-filter: none;
  -webkit-backdrop-filter: none;
}
