@import url('https://fonts.googleapis.com/css2?family=Press+Start+2P&display=swap');
:root{
  --bg:#0a0a0c; --line:#1c2033; --panel:#0c0f18;
  --cyan:#00f0ff; --green:#39ff14; --pink:#ff007f; --gold:#ffd54a;
  --red:#e82e2e; --ink:#1a1a28; --card:#f5f0e6;
}
*{box-sizing:border-box;margin:0;padding:0}
html,body{height:100%;overflow:hidden}
body{background:radial-gradient(ellipse at 50% 130%,#121214 0%,#0a0a0c 62%);font-family:'Press Start 2P','Courier New',monospace;color:#e8ecff;display:flex;align-items:center;justify-content:center}
.frame{position:relative;width:98vw;height:98vh;max-width:1500px;display:flex;flex-direction:column;gap:.8vh;padding:.8vh 1.1vw;border:2px solid var(--line);border-radius:14px;background:linear-gradient(180deg,rgba(10,12,22,.94),rgba(6,7,12,.97));box-shadow:0 0 50px rgba(0,240,255,.14),inset 0 0 80px rgba(0,240,255,.05);overflow:hidden;z-index:0}
.frame::after{content:'';position:absolute;inset:0;background:repeating-linear-gradient(0deg,rgba(255,255,255,.022) 0 1px,transparent 1px 3px);pointer-events:none;z-index:30}
.grid{position:absolute;left:-30%;right:-30%;bottom:-10%;height:60%;background:repeating-linear-gradient(90deg,rgba(0,240,255,.15) 0 2px,transparent 2px 5vw),repeating-linear-gradient(0deg,rgba(0,240,255,.15) 0 2px,transparent 2px 4vh);transform:perspective(45vh) rotateX(60deg);transform-origin:top;pointer-events:none;z-index:0;animation:gridmove 2.4s linear infinite;mask-image:linear-gradient(180deg,transparent,#000 32%);-webkit-mask-image:linear-gradient(180deg,transparent,#000 32%)}
@keyframes gridmove{to{background-position:0 0,0 4vh}}
.topbar{display:flex;align-items:stretch;gap:.8vw;z-index:2}
.led{background:#05070d;border:2px solid var(--line);border-radius:8px;padding:.6vh .7vw;display:flex;flex-direction:column;justify-content:center;min-width:12vw;box-shadow:inset 0 0 18px rgba(0,0,0,.8),0 0 12px rgba(0,240,255,.08)}
.led .lbl{font-size:.4rem;letter-spacing:2px;color:#5a6480;margin-bottom:.4vh}
.led .val{font-size:.95rem;letter-spacing:1px;white-space:nowrap}
.led.credits .val{color:var(--green);text-shadow:0 0 12px rgba(57,255,20,.8)}
.led.bet .val{color:var(--cyan);text-shadow:0 0 12px rgba(0,240,255,.8)}
.title{flex:1;text-align:center;display:flex;flex-direction:column;justify-content:center;gap:.4vh;min-width:0}
.title .t1{font-size:.48rem;color:var(--pink);text-shadow:0 0 10px var(--pink);letter-spacing:4px}
.title .t2{font-size:clamp(.68rem,1.5vw,1.02rem);color:#fff;text-shadow:0 0 16px var(--cyan),0 0 34px rgba(0,240,255,.55);letter-spacing:3px;white-space:nowrap}
.status{text-align:center;font-size:.48rem;letter-spacing:2px;color:#5f6a8a;z-index:2;min-height:1.6vh}
.status.win{color:var(--green);text-shadow:0 0 10px rgba(57,255,20,.7)}
.status.bad{color:var(--pink);text-shadow:0 0 10px rgba(255,0,127,.7)}
.status.blink{animation:blink 1s step-end infinite}
@keyframes blink{50%{opacity:.25}}
/* ==== TABLE LAYOUT ==== */
.table{flex:1;display:flex;flex-direction:column;align-items:center;justify-content:space-evenly;position:relative;z-index:2;min-height:0;gap:.4vh}
.hand-row{display:flex;align-items:center;justify-content:center;gap:1.2vw;width:100%}
.row-label{font-size:.5rem;letter-spacing:2px;color:#5a6480;min-width:7vw;text-align:right;white-space:nowrap}
.row-label.dealer-l{color:#7a86a8}
.cards{display:flex;gap:.8vw;align-items:center;min-height:16vh}
.divider{display:flex;align-items:center;gap:1vw;width:70%;z-index:2}
.divider .rule{flex:1;height:1px;background:linear-gradient(90deg,transparent,rgba(0,240,255,.35),transparent)}
.divider .mid{font-size:.38rem;letter-spacing:2px;color:#48527a;white-space:nowrap}
.player-area{display:flex;flex-direction:column;gap:.6vh}
.hand-row .active{animation:none}
/* ==== CARDS ==== */
.card{flex:0 0 auto;width:11vw;max-width:150px;aspect-ratio:5/7;perspective:900px;position:relative;container-type:inline-size;transition:transform .3s ease}
.card-inner{position:absolute;inset:0;transform-style:preserve-3d;transform:rotateY(180deg);transition:transform .55s cubic-bezier(.35,1.2,.55,1)}
.card.reveal .card-inner{transform:rotateY(0deg)}
.card-face{position:absolute;inset:0;backface-visibility:hidden;-webkit-backface-visibility:hidden;border-radius:2.5cqw;display:flex;flex-direction:column;justify-content:space-between;padding:4cqw 3.5cqw}
.card-back{background:repeating-linear-gradient(45deg,#101528 0 .9cqw,#0b0f1e .9cqw 1.8cqw);border:.7cqw solid #2a3560;box-shadow:inset 0 0 4cqw rgba(0,240,255,.25),0 1cqw 3cqw rgba(0,0,0,.6);transform:rotateY(0deg)}
.card-front{background:linear-gradient(160deg,#fffdf5,#efe9d6);border:.7cqw solid #d8d0b8;box-shadow:0 1cqw 3cqw rgba(0,0,0,.5);transform:rotateY(180deg);backface-visibility:hidden;-webkit-backface-visibility:hidden}
.card-back .gem{position:absolute;inset:0;display:flex;align-items:center;justify-content:center;font-size:26cqw;color:var(--cyan);text-shadow:0 0 3cqw var(--cyan)}
.corner{display:flex;flex-direction:column;align-items:center;line-height:1.15;font-size:13cqw;z-index:1}
.corner.bottom{transform:rotate(180deg)}
.pip{position:absolute;inset:0;display:flex;align-items:center;justify-content:center;font-size:42cqw;z-index:0}
.red .corner,.red .pip{color:var(--red)}
.black .corner,.black .pip{color:var(--ink)}
/* deal-in animation: card flies from deck position */
.card.deal{animation:dealIn .45s cubic-bezier(.2,.9,.3,1.2) backwards}
.card.deal.reveal .card-inner{animation:innerFlip .6s cubic-bezier(.35,1.15,.55,1) .12s backwards}
@keyframes innerFlip{from{transform:rotateY(180deg)}to{transform:rotateY(0deg)}}
@keyframes dealIn{from{transform:translate(14vw,-18vh) scale(.55) rotate(18deg);opacity:0}to{transform:translate(0,0) scale(1) rotate(0);opacity:1}}
/* winning hand pulse */
.card.winner .card-front{animation:winpulse .6s ease-in-out infinite alternate}
@keyframes winpulse{from{box-shadow:0 0 0 1cqw var(--gold),0 0 3cqw rgba(255,213,74,.5)}to{box-shadow:0 0 0 1.2cqw #fff,0 0 7cqw rgba(255,213,74,.95)}}
/* split-hand tag */
.split-tag{position:absolute;top:-7cqw;left:50%;transform:translateX(-50%) scale(.7);background:linear-gradient(90deg,var(--cyan),#1898ff);color:#001018;font-size:6cqw;padding:1.2cqw 3cqw;border-radius:1cqw;letter-spacing:.4cqw;opacity:0;transition:.18s;box-shadow:0 0 3cqw rgba(0,240,255,.8);z-index:5;white-space:nowrap}
.card.split .split-tag{opacity:1;transform:translateX(-50%) scale(1)}
.card.split .card-front{box-shadow:0 0 0 1cqw var(--cyan),0 0 5cqw rgba(0,240,255,.55),inset 0 0 5cqw rgba(0,240,255,.2)}
/* ==== HAND TOTAL READOUTS ==== */
.total{min-width:8vw;text-align:center;padding:.5vh .4vw;border:2px solid var(--line);border-radius:8px;background:#05070d;font-size:1rem;letter-spacing:1px;color:#5a6480;box-shadow:inset 0 0 14px rgba(0,0,0,.7)}
.total[data-state="hidden"]{color:#2f3650}
.total[data-state="ok"]{color:var(--green);text-shadow:0 0 12px rgba(57,255,20,.75);border-color:rgba(57,255,20,.5)}
.total[data-state="bust"]{color:var(--pink);text-shadow:0 0 12px rgba(255,0,127,.8);border-color:rgba(255,0,127,.55)}
.total[data-state="bj"]{color:var(--gold);text-shadow:0 0 14px rgba(255,213,74,.9);border-color:rgba(255,213,74,.6);animation:hitpulse .7s ease-in-out infinite alternate}
@keyframes hitpulse{to{box-shadow:inset 0 0 18px rgba(255,213,74,.3),0 0 16px rgba(255,213,74,.5)}}
.total .tlabel{display:block;font-size:.34rem;letter-spacing:2px;color:#48527a;margin-bottom:.4vh}
/* ==== CONTROLS / BUTTONS ==== */
.controls{display:flex;align-items:center;justify-content:center;gap:.9vw;z-index:2;padding:.4vh 0;flex-wrap:wrap}
.ctl-gap{width:.6vw}
.btn{font-family:inherit;font-size:.54rem;letter-spacing:2px;padding:1.1vh 1.3vw;border-radius:10px;border:2px solid #2a3560;background:linear-gradient(180deg,#1a2140,#0d1126);color:#9fb0d8;cursor:pointer;box-shadow:0 4px 0 #05070f,0 6px 16px rgba(0,0,0,.6),inset 0 1px 0 rgba(255,255,255,.08);transition:transform .08s,box-shadow .08s,color .15s,border-color .15s}
.btn:hover:not(:disabled){color:#fff}
.btn:active:not(:disabled){transform:translateY(3px);box-shadow:0 1px 0 #05070f,0 3px 8px rgba(0,0,0,.6)}
.btn:disabled{opacity:.32;cursor:default}
.btn.big{font-size:.72rem;padding:1.4vh 2.6vw;border-color:var(--green);color:var(--green);box-shadow:0 4px 0 #053020,0 0 22px rgba(57,255,20,.35),0 6px 16px rgba(0,0,0,.6)}
.btn.big:hover:not(:disabled){color:#eafff5;box-shadow:0 4px 0 #053020,0 0 34px rgba(57,255,20,.6),0 6px 16px rgba(0,0,0,.6)}
.btn.sfx{min-width:11vw;font-size:.44rem}
/* action color variants */
.btn.act.cyan{border-color:var(--cyan);color:var(--cyan);box-shadow:0 4px 0 #042226,0 0 16px rgba(0,240,255,.3),0 6px 16px rgba(0,0,0,.6)}
.btn.act.cyan:hover:not(:disabled){color:#eafffe;box-shadow:0 4px 0 #042226,0 0 30px rgba(0,240,255,.55),0 6px 16px rgba(0,0,0,.6)}
.btn.act.green{border-color:var(--green);color:var(--green);box-shadow:0 4px 0 #053020,0 0 16px rgba(57,255,20,.3),0 6px 16px rgba(0,0,0,.6)}
.btn.act.green:hover:not(:disabled){color:#eafff5;box-shadow:0 4px 0 #053020,0 0 30px rgba(57,255,20,.55),0 6px 16px rgba(0,0,0,.6)}
.btn.act.gold{border-color:var(--gold);color:var(--gold);box-shadow:0 4px 0 #3a2a00,0 0 16px rgba(255,213,74,.28),0 6px 16px rgba(0,0,0,.6)}
.btn.act.gold:hover:not(:disabled){color:#fff2c8;box-shadow:0 4px 0 #3a2a00,0 0 30px rgba(255,213,74,.55),0 6px 16px rgba(0,0,0,.6)}
.btn.act.pink{border-color:var(--pink);color:var(--pink);box-shadow:0 4px 0 #30001c,0 0 16px rgba(255,0,127,.3),0 6px 16px rgba(0,0,0,.6)}
.btn.act.pink:hover:not(:disabled){color:#ffd0e8;box-shadow:0 4px 0 #30001c,0 0 30px rgba(255,0,127,.55),0 6px 16px rgba(0,0,0,.6)}
/* ==== FX / BANNER ==== */
#fx{position:absolute;inset:0;pointer-events:none;z-index:10}
.flash{position:absolute;inset:0;pointer-events:none;z-index:15;opacity:0}
.flash.go{animation:flash .55s ease-out}
@keyframes flash{from{opacity:.5}to{opacity:0}}
.banner{position:absolute;inset:0;display:flex;flex-direction:column;align-items:center;justify-content:center;z-index:20;pointer-events:none;opacity:0;transition:opacity .2s}
.banner.show{opacity:1}
.banner .b-main{font-size:clamp(.95rem,3vw,2.3rem);letter-spacing:.3em;color:var(--gold);text-shadow:0 0 18px rgba(255,213,74,.9),0 0 50px rgba(255,0,127,.6);animation:bannerpop .55s cubic-bezier(.2,1.6,.4,1) both;text-align:center;padding:0 2vw}
.banner .b-sub{margin-top:1.4vh;font-size:clamp(.48rem,1.2vw,.85rem);color:var(--green);text-shadow:0 0 12px rgba(57,255,20,.8);letter-spacing:.25em}
.banner.lose .b-main{color:var(--pink);text-shadow:0 0 18px rgba(255,0,127,.9),0 0 50px rgba(255,0,127,.4)}
.banner.lose .b-sub{color:#8c8c9a;text-shadow:none}
.banner.push .b-main{color:var(--cyan);text-shadow:0 0 18px var(--cyan),0 0 50px rgba(0,240,255,.5)}
.banner.push .b-sub{color:#9fb0d8;text-shadow:none}
@keyframes bannerpop{from{transform:scale(.15);opacity:0}to{transform:scale(1);opacity:1}}
.frame.shake{animation:shake .45s}
@keyframes shake{10%{transform:translate(-9px,5px)}30%{transform:translate(8px,-6px)}50%{transform:translate(-6px,4px)}70%{transform:translate(5px,-3px)}90%{transform:translate(-2px,1px)}}

