/* Dimensions inside a game are relative to its portrait container, never to the window width. */
#play-view{--outer-gap:24px;gap:clamp(20px,4vw,64px);padding:12px;min-height:100dvh;overflow:hidden;align-items:center}
.game-shell{container-type:inline-size;width:min(100%,calc((100dvh - var(--outer-gap))*0.5),534px);height:calc(100dvh - var(--outer-gap));max-height:1068px;flex-shrink:0;border-radius:17px;position:relative}
.play-header{height:11cqw;padding:1cqw 2cqw;gap:.5cqw}.play-header .icon-button{width:9cqw;height:9cqw;max-width:44px;max-height:44px}.play-header svg{width:4.8cqw;height:4.8cqw}.play-wallet{gap:2cqw;padding:0 1.5cqw}.play-wallet .coin{width:5.5cqw;height:5.5cqw;font-size:3.5cqw}.play-wallet small{font-size:2cqw;letter-spacing:.4cqw}.play-wallet b{font-size:3.6cqw;margin-top:.4cqw}.play-wallet>span:last-child{font-size:5cqw;margin-left:2cqw}
.game-scene{flex:1;min-height:30cqw;max-height:none;overflow:hidden}.scene-art{background-size:100% auto;height:calc(100% + 1px);background-color:#101421}.game-shell.dust .scene-art{background-size:100% auto}.scene-shade{background:linear-gradient(90deg,#08070d99,transparent 80%),linear-gradient(0deg,var(--scene-bottom,#141219) 0,transparent 70%)}.game-title{left:5cqw;bottom:9cqw;z-index:1}.game-title h1{font-size:12cqw;max-width:58cqw;line-height:.83;font-weight:400;letter-spacing:-.4cqw;text-transform:none;margin-top:2cqw}.game-title>span{font-size:2cqw;letter-spacing:.5cqw}.demo-stamp{font-size:1.7cqw;padding:1.5cqw;right:3cqw;top:3cqw}
.theme-feature{position:absolute;bottom:2cqw;left:5cqw;right:5cqw;display:flex;align-items:center;justify-content:space-between;gap:3cqw;z-index:2}.theme-feature>small{font-size:1.7cqw;letter-spacing:.4cqw;color:var(--accent)}.feature-lights{display:flex;align-items:center;gap:1.6cqw}.feature-lights i{font-style:normal;font-size:3cqw;color:#e3bc7455;transition:color .25s,filter .25s}.feature-lights i.on{color:#ffe6a8;filter:drop-shadow(0 0 4px #ffce67)}
.game-status{min-height:7cqw;font-size:2.45cqw;padding:1.4cqw 2cqw;gap:1.5cqw;text-align:center;z-index:2}.status-light{width:1cqw;height:1cqw;flex-shrink:0}.board-wrap{padding:2cqw;flex-shrink:0;position:relative;isolation:isolate}.board{gap:.6cqw;padding:.7cqw;border-radius:1cqw}.cell{border-radius:1cqw}.symbol{mix-blend-mode:screen}.wild-overlay{inset:2.9cqw;gap:.6cqw}.wild-reel span{font-size:4.5cqw;letter-spacing:1cqw}.wild-reel b{font-size:6cqw;margin-top:3cqw}.wild-reel:before{font-size:7cqw;margin-bottom:3cqw}.reward-value{font-size:5cqw}
.win-panel{min-height:14cqw;padding:2cqw 5cqw 1cqw;gap:2cqw}.win-panel small{font-size:2cqw;letter-spacing:.3cqw;margin-bottom:.6cqw}.win-panel strong{font-size:7cqw}.feature-button{font-size:1.95cqw;padding:1.5cqw 2cqw;border-radius:1.5cqw;letter-spacing:.1cqw;line-height:1.6}.feature-button>span{font-size:5cqw;margin-right:1.5cqw}
.game-controls{min-height:25cqw;padding:1cqw 4cqw 2cqw;gap:3cqw}.bet-control{width:29cqw;flex-shrink:0}.bet-control>span{font-size:2.1cqw;letter-spacing:.3cqw}.bet-control>div{margin-top:1.5cqw;border-radius:2cqw}.bet-control button{width:9cqw;min-height:10cqw;font-size:5cqw}.bet-control b{font-size:3.8cqw;min-width:7cqw}.spin-button{width:21cqw;height:21cqw;max-width:none;max-height:none;border-width:.7cqw}.spin-button svg{width:10cqw;height:10cqw}.aux-controls{width:24cqw;gap:1.5cqw}.aux-controls .icon-button{width:10cqw;height:10cqw}.aux-controls svg{width:5cqw;height:5cqw}.play-footer{padding:1.2cqw 4cqw 2cqw;min-height:5cqw;font-size:1.7cqw;letter-spacing:.1cqw}
.win-burst strong{font-size:12cqw}.win-burst small{font-size:3cqw;letter-spacing:1cqw}.desktop-aside{max-width:17vw}.desktop-game-note{max-width:16vw}.card-title span{font-size:14px;letter-spacing:2px}.card-title h2{font-size:44px;font-weight:400;letter-spacing:0}.card-moon .card-title h2,.card-moon .card-title span{font-family:'Berkshire Swash',serif}.card-dust .card-title h2,.card-dust .card-title span{font-family:Rye,serif}.card-vault .card-title h2,.card-vault .card-title span{font-family:Oxanium,sans-serif;font-weight:800}.card-vault .card-title h2{letter-spacing:2px}
/* Moon Raid: warm carved tray, handwritten title, soft cascading motion. */
.game-shell.moon{--accent:#efcf8f;--scene-bottom:#24182e;background:radial-gradient(ellipse at 50% 100%,#442346,#1c1627 65%);border-color:#8d6c5555;border-radius:23px}.moon .play-header{background:#1c1424;border-color:#a5855c44}.moon .game-title h1{font-family:'Berkshire Swash',serif;color:#ffebbd;text-shadow:0 .6cqw 0 #593b45,0 2cqw 4cqw #120817}.moon .game-title{transform:rotate(-4deg);bottom:10cqw}.moon .scene-art{animation:moon-parallax 15s ease-in-out infinite alternate}.moon .game-status{background:#392639;color:#f3d7a2;border-color:#b9935f66;box-shadow:inset 0 1px #e3c29822}.moon .board-wrap{margin:0 1.4cqw;padding:2.4cqw;border:1cqw solid #67452f;border-top-color:#aa7e51;border-bottom-color:#3b2724;border-radius:4cqw;background:repeating-linear-gradient(3deg,#3c292c 0 3px,#462e30 4px 6px);box-shadow:inset 0 0 0 .4cqw #ca9b6244,0 1.5cqw 2cqw #0007}.moon .board{background:#1c1729;gap:.5cqw;border-color:#ba854b44;border-radius:2cqw}.moon .cell{background:#241d32;box-shadow:inset 0 0 0 1px #c7a46b09}.moon .cell.is-marked{background:#62422d;box-shadow:inset 0 0 0 1px #ffd08977}.moon .cell.is-match{box-shadow:inset 0 0 0 .5cqw #ffe09a,0 0 4cqw #ffb64377}.moon .cell.is-match .symbol{animation:moon-hop .55s ease both}.moon .cell.drop .symbol{animation:moon-tumble .65s cubic-bezier(.2,.6,.25,1.2) both;animation-delay:var(--delay)}.moon .board.is-spinning .symbol{animation:moon-shuffle .35s linear infinite;filter:blur(.5px)}.moon .win-panel{border-bottom:1px solid #c3a97914}.moon .win-panel strong{font-family:'Berkshire Swash',serif;font-weight:400}.moon .bet-control>div{background:#38243c;border-color:#b9956955}.moon .spin-button{background:radial-gradient(circle at 30% 25%,#fff1c1,#dcad57 65%,#9a642e);box-shadow:inset 0 0 0 1cqw #f9d99555,0 0 0 1cqw #3b243a,0 1cqw 4cqw #0008}.moon .spin-button svg{transform:rotate(-15deg)}.moon .aux-controls .icon-button{background:#30213a;border-color:#a8815f55}.moon .play-footer{color:#b29aa9}
/* Dust Duel: five brass-separated reels, letterpress western title and harsh impacts. */
.game-shell.dust{--accent:#ebb979;--scene-bottom:#21160f;background:repeating-linear-gradient(2deg,#20170f 0 5px,#241a12 6px 8px);border-color:#8c633c;border-radius:5px}.dust .play-header{background:#1c1511;border-bottom:2px solid #61492d}.dust .game-title{left:50%;bottom:10cqw;transform:translateX(-50%);text-align:center;width:90%;}.dust .game-title h1{font-family:Rye,serif;color:#efd09c;text-shadow:1px 2px #25150d,0 1cqw #5d3821,0 2cqw 2cqw #000a;line-height:.95;font-size:11cqw;max-width:none;letter-spacing:-.2cqw}.dust .game-title>span{color:#f1c584}.dust .scene-art{animation:dust-camera 20s ease-in-out infinite alternate}.dust .scene-shade{background:linear-gradient(0deg,#21160f,transparent 90%),#120c0940}.dust .scene-sparks{background:radial-gradient(circle at 10% 80%,#ddaa6d55 0 1px,transparent 2px),radial-gradient(circle at 70% 60%,#ddaa6d44 0 2px,transparent 3px);animation:dust-wind 3s linear infinite}.dust .game-status{background:#b78b59;color:#24170e;border-block:2px solid #4f3520;font-weight:700;letter-spacing:.1cqw}.dust .status-light{background:#603b20}.dust .board-wrap{padding:2.4cqw 2cqw;background:linear-gradient(90deg,#51321b,#9d7041 4%,#3a2719 6%,#3a2719 94%,#9d7041 96%,#51321b);border-block:1.2cqw solid #8d6138;box-shadow:inset 0 0 0 1px #dfb77a66}.dust .board{background:repeating-linear-gradient(90deg,#1b1510 0 calc(20% - 1px),#94734c 20%);border:0;gap:0;padding:.5cqw}.dust .cell{border-radius:0;background:none;box-shadow:none}.dust .cell .symbol{inset:3%;mix-blend-mode:screen}.dust .cell:nth-child(5n+1){border-left:1px solid #bc925955}.dust .cell.is-match{background:#d9953322;box-shadow:inset 0 0 0 1px #e2b36b}.dust .cell.is-match .symbol{animation:duel-hit .3s steps(2) both}.dust .cell.drop .symbol{animation:reel-brake .38s ease-out both;animation-delay:var(--delay)}.dust .board.is-spinning .symbol{animation:reel-roll .13s linear infinite;filter:blur(2px)}.dust .wild-overlay{inset:2.8cqw 2.5cqw;gap:0}.dust .wild-reel{border-radius:0;background:repeating-linear-gradient(3deg,#934726e8 0 4px,#ad5c2cde 5px 7px);border:2px solid #e8ba71;box-shadow:0 0 6cqw #f4942766,inset 0 0 8cqw #180b04;font-family:Rye,serif;animation:duel-slam .5s ease-out}.dust .wild-reel span{font-family:Rye,serif;font-size:5cqw;letter-spacing:1.3cqw}.dust .wild-reel:before{content:'✺';font-size:10cqw}.dust .wild-reel b{font-family:Rye,serif;font-size:6cqw;font-weight:400}.dust .win-panel{background:#1c140e;border-top:1px solid #b38c4c44}.dust .win-panel strong{font-family:Rye,serif;font-weight:400;font-size:6.5cqw}.dust .win-panel small{color:#c3a37c}.dust .feature-button{border-radius:0;background:#8f623c22;border:1px dashed #b79363}.dust .game-controls{background:#1c140e}.dust .bet-control>div{background:#36291d;border-color:#b18a5e66;border-radius:2px}.dust .spin-button{border-radius:9%;transform:rotate(-3deg);background:linear-gradient(135deg,#d9b77e,#9d713f);border:.7cqw solid #634124;outline:1px solid #dbb77a;box-shadow:inset 0 0 0 .7cqw #b18750,0 1cqw 3cqw #0009;color:#352014;width:23cqw;height:18cqw}.dust .spin-button:hover:enabled{transform:rotate(0deg) scale(1.04)}.dust .spin-button svg{stroke-width:2.4}.dust .aux-controls .icon-button{border-radius:3px;background:#36291d;border-color:#ae845844}.dust .play-footer{background:#1c140e;color:#a18a71}.dust .feature-lights i{width:1.6cqw;height:3.8cqw;border:1px solid #bc8e55;border-radius:50% 50% 2px 2px;font-size:0;background:#59452d}.dust .feature-lights i.on{background:#e6bb76;box-shadow:0 0 2cqw #e3a350}
/* Neon Vault: octagonal chassis, round sockets, scan and energy transfers. */
.game-shell.vault{--accent:#87e9ed;--scene-bottom:#0c1c24;background:#0c1c24;border:1px solid #579298;border-radius:12px;box-shadow:0 0 0 4px #172e36,0 0 80px #1eb6c217}.vault .play-header{background:#0d222c;border-bottom:1px solid #6edfe766}.vault .play-wallet b,.vault .win-panel strong,.vault .bet-control b,.vault .reward-value{font-family:Oxanium,sans-serif;font-weight:700}.vault .game-title h1{font-family:Oxanium,sans-serif;font-weight:800;font-size:12cqw;line-height:.83;letter-spacing:-.6cqw;color:#d9fbff;text-shadow:0 .4cqw 0 #276d80,0 0 5cqw #5deaff66}.vault .game-title h1 span{color:#ffca70}.vault .game-title{left:4cqw;bottom:11cqw}.vault .game-title>span{color:#86d7e5}.vault .scene-shade{background:linear-gradient(0deg,#0c1c24,transparent 100%),linear-gradient(90deg,#00111d77,transparent)}.vault .scene-art{animation:none}.vault .scene-sparks{background:repeating-linear-gradient(0deg,#6de7ff03 0 1px,transparent 2px 5px);animation:vault-flicker 4s steps(3) infinite}.vault .game-status{background:#14333e;border:1px solid #3f7a8466;color:#abedf3;text-transform:uppercase;font-family:Manrope,sans-serif}.vault .board-wrap{padding:3cqw;background:linear-gradient(135deg,#48717b 0,#162c35 3%,#1c3841 97%,#4e7984);border-block:1cqw solid #375761;clip-path:polygon(4% 0,96% 0,100% 4%,100% 96%,96% 100%,4% 100%,0 96%,0 4%)}.vault .board{background:#09181e;border:1px solid #4e899866;gap:1.1cqw;padding:1cqw;border-radius:0}.vault .cell{border-radius:50%;background:radial-gradient(circle,#12242b 48%,#42737b 51%,#102229 56%,#376572 61%,#07151b 65%);box-shadow:none;overflow:hidden}.vault .symbol{inset:7%;mix-blend-mode:screen}.vault .cell.is-match{box-shadow:inset 0 0 0 2px #78f0ff,0 0 3cqw #4ad0e366}.vault .cell.empty{background:radial-gradient(circle,#09151c 42%,#345b65 44%,#0c1e27 51%,#557a83 54%,#142d37 60%)}.vault .cell.held{box-shadow:inset 0 0 0 2px #d3a750,0 0 3cqw #dea32133}.vault .cell.collector{box-shadow:inset 0 0 0 2px #67e4f6,0 0 4cqw #54e8ff99}.vault .cell.double{box-shadow:inset 0 0 0 2px #ff9d42,0 0 4cqw #ff792a88}.vault .cell.drop .symbol{animation:vault-materialize .55s steps(5) both;animation-delay:var(--delay)}.vault .board.is-spinning .symbol{animation:vault-scan-symbol .4s steps(4) infinite;filter:none}.vault .cell.new-coin{animation:vault-lock .6s ease both}.vault .cell.empty.new-coin{animation:vault-search .35s ease infinite}.vault .board.collecting .cell.held{animation:vault-discharge .8s ease infinite alternate}.vault .win-panel{background:#112a34;border-bottom:1px solid #43798466;padding-block:2cqw}.vault .win-panel strong{color:#92f4fd;font-size:8cqw;line-height:1}.vault .feature-button{background:#19414c;border:1px solid #62d6d977;border-radius:0;color:#8bedf1;clip-path:polygon(9% 0,100% 0,100% 78%,91% 100%,0 100%,0 22%)}.vault .game-controls{background:linear-gradient(#10232c,#0b1a23)}.vault .bet-control>div{background:#112e3a;border-color:#4c9baf66;border-radius:0}.vault .bet-control b{color:#a8f0ff;font-size:4.5cqw}.vault .spin-button{border-radius:0;clip-path:polygon(28% 0,72% 0,100% 28%,100% 72%,72% 100%,28% 100%,0 72%,0 28%);background:radial-gradient(circle,#c2feff,#5ac6d9 55%,#1a647a);color:#08303f;border:.8cqw solid #65d7e8;outline:0;box-shadow:inset 0 0 0 1cqw #173d50,inset 0 0 0 1.7cqw #80e5ed}.vault .aux-controls .icon-button{border-radius:3px;background:#14313e;border-color:#4b8999}.vault .play-footer{color:#69a2b1;background:#0b1a23}.vault .feature-lights i{font-family:Oxanium,sans-serif;border:1px solid #407b8b;padding:.2cqw 1.6cqw;line-height:1.3;font-size:2.5cqw;color:#557984;background:#0b1c26}.vault .feature-lights i.on{background:#2d7883;color:#b9ffff;box-shadow:0 0 3cqw #60e5ff44}.vault .theme-feature>small{font-family:Oxanium,sans-serif;font-size:2cqw;color:#82ccdd}
/* Each theme has its own transient FX layer, independent from symbols. */
.theme-fx{position:absolute;inset:0;pointer-events:none;z-index:6;overflow:hidden}.fx-spark{position:absolute;border-radius:50%;background:var(--accent);width:1.2cqw;height:1.2cqw;left:var(--x);top:var(--y);animation:coin-spark .8s ease-out both;animation-delay:var(--wait,0ms)}.dust .fx-spark{width:8cqw;height:.5cqw;background:#ffdfa4;transform-origin:left;animation:duel-spark .45s ease-out both}.fx-dust{position:absolute;inset:0;background:radial-gradient(ellipse at 50% 75%,#cba76b55,transparent 68%);animation:dust-cloud .8s ease-out both}.fx-scan{position:absolute;top:-10%;height:5%;left:0;right:0;background:linear-gradient(transparent,#b5ffffbb);box-shadow:0 0 5cqw #39d7ff;animation:scanner 1s linear both}.fx-beam{position:absolute;left:var(--x);top:var(--y);height:.6cqw;width:var(--length);transform:rotate(var(--angle));transform-origin:0 50%;background:#96f5ff;box-shadow:0 0 3cqw #3fe0ff;animation:energy-transfer .8s ease both}.fx-wave{position:absolute;inset:25%;border:.8cqw solid var(--accent);border-radius:50%;animation:energy-wave .7s ease-out both}.dust .board-wrap.impact{animation:duel-shake .3s ease}.moon .board-wrap.reveal-glow{box-shadow:0 0 8cqw #dfa35366,inset 0 0 0 .4cqw #ca9b6244}
@keyframes moon-parallax{to{transform:scale(1.06) translateX(-1%)}}@keyframes moon-tumble{0%{transform:translateY(-160%) rotate(-12deg);opacity:0}65%{transform:translateY(7%) rotate(3deg);opacity:1}85%{transform:translateY(-4%) rotate(-2deg)}100%{transform:none;opacity:1}}@keyframes moon-hop{45%{transform:translateY(-10%) rotate(-6deg) scale(1.08);filter:brightness(1.4)}80%{transform:translateY(3%) rotate(3deg)}}@keyframes moon-shuffle{from{transform:translateY(-90%) rotate(-7deg);opacity:.3}to{transform:translateY(80%) rotate(7deg);opacity:1}}
@keyframes dust-camera{to{transform:scale(1.08)}}@keyframes dust-wind{to{transform:translateX(35%) translateY(-5%)}}@keyframes reel-brake{0%{transform:translateY(-110%);filter:blur(5px)}65%{transform:translateY(8%);filter:blur(0)}82%{transform:translateY(-4%)}100%{transform:none}}@keyframes duel-hit{25%{transform:translateX(-5%);filter:brightness(2)}70%{transform:translateX(4%)}}@keyframes duel-slam{0%{transform:scaleY(.05);filter:brightness(4)}40%{transform:scaleY(1.08)}60%{transform:scaleY(.95)}100%{transform:scaleY(1);filter:brightness(1)}}@keyframes duel-shake{25%{transform:translateX(-3px)}50%{transform:translateX(3px)}75%{transform:translateX(-2px)}}@keyframes duel-spark{to{transform:translate(var(--dx),var(--dy)) rotate(35deg);opacity:0}}@keyframes dust-cloud{from{transform:scale(.5);opacity:0}40%{opacity:1}to{transform:scale(1.4);opacity:0}}
@keyframes vault-flicker{50%{opacity:.2}}@keyframes vault-materialize{0%{opacity:0;filter:brightness(5);transform:scale(.8)}30%{opacity:1}40%{opacity:.2}100%{opacity:1;filter:none;transform:none}}@keyframes vault-scan-symbol{50%{filter:brightness(2);transform:scale(.8);opacity:.4}}@keyframes vault-search{50%{filter:brightness(2.5)}}@keyframes vault-lock{0%{transform:scale(1.2);filter:brightness(3)}55%{transform:scale(.9)}100%{transform:none;filter:none}}@keyframes vault-discharge{to{filter:brightness(1.6);box-shadow:0 0 4cqw #64e8ff66}}@keyframes scanner{to{top:105%}}@keyframes energy-transfer{0%{opacity:0;scale:0 1}20%,60%{opacity:1;scale:1 1}100%{opacity:0;scale:1 1}}@keyframes energy-wave{to{inset:-20%;opacity:0}}@keyframes coin-spark{to{transform:translate(var(--dx),var(--dy)) scale(.2);opacity:0}}
@media(max-width:1000px){.desktop-aside,.desktop-game-note{display:none}.card-title h2{font-size:39px}}
.game-scene{container-type:size}.scene-art,.game-shell.dust .scene-art{background-size:max(100cqw,220cqh) auto;background-position:70% top;background-repeat:no-repeat}.game-shell.dust .scene-art{background-size:max(100cqw,200cqh) auto}.game-shell.fast .cell .symbol{animation-duration:.2s!important;animation-delay:calc(var(--delay,0ms)*.25)!important}.game-shell.fast .wild-reel{animation-duration:.2s}
@media(max-width:680px){#play-view{--outer-gap:0px;padding:0}.game-shell{height:100dvh;width:min(100%,calc(100dvh * .5));max-height:none;border-radius:0!important;border:0!important}.game-shell.vault{box-shadow:none}.card-title h2{font-size:49px}.card-title span{font-size:16px}}
@media(max-height:500px){#play-view{--outer-gap:0px;padding:0}.game-shell{height:100dvh;width:calc(100dvh * .5);border-radius:0!important}.desktop-aside,.desktop-game-note{display:none}}
@media(prefers-reduced-motion:reduce){.theme-fx{display:none}.symbol,.cell,.wild-reel,.scene-art,.scene-sparks,.board-wrap,.spin-button svg{animation:none!important;transition:none!important}}
