/* 1960 Table Games — visuals */
.games-app{padding:40px 0 60px;background:radial-gradient(1000px 420px at 90% 0%,rgba(255,77,141,.18),transparent 60%),radial-gradient(700px 400px at 0% 30%,rgba(216,178,90,.12),transparent 60%),radial-gradient(rgba(255,255,255,.06) 1px,transparent 1px) 0 0/22px 22px}
.games-head{margin-bottom:24px}
.games-head h1{text-shadow:0 0 18px rgba(255,77,141,.45),0 0 40px rgba(255,77,141,.25)}
.neon-sign{display:inline-block;padding:6px 14px;border:2px solid var(--pink);border-radius:12px;color:#fff;letter-spacing:.2em;font-weight:800;font-size:.8rem;text-transform:uppercase;box-shadow:0 0 12px rgba(255,77,141,.6),inset 0 0 12px rgba(255,77,141,.35);animation:neon 2.8s ease-in-out infinite}
@keyframes neon{0%,100%{opacity:1}92%{opacity:1}94%{opacity:.55}96%{opacity:1}}
.av{display:inline-grid;place-items:center;width:28px;height:28px;border-radius:50%;color:#0b0b0c;font-weight:800;font-size:.85rem;font-style:normal;flex:none;box-shadow:0 2px 6px rgba(0,0,0,.4)}
.av.sm{width:22px;height:22px;font-size:.7rem}
.games-setup{margin-bottom:28px;background:linear-gradient(160deg,var(--card2),var(--card));box-shadow:var(--shadow)}
.setup-row{display:grid;grid-template-columns:1.4fr 1fr;gap:20px}
@media (max-width:760px){.setup-row{grid-template-columns:1fr}}
.player-chips{display:flex;flex-wrap:wrap;gap:8px;margin:10px 0}
.pchip{display:inline-flex;align-items:center;gap:8px;background:var(--bg);border:1px solid var(--line2);border-radius:999px;padding:4px 8px 4px 4px;font-size:.92rem;font-weight:600}
.pchip button{background:none;border:0;color:var(--muted);cursor:pointer;font-size:1.1rem;line-height:1;padding:0 2px}
.pchip button:hover{color:var(--fire)}
.player-add{display:flex;gap:8px}
.player-add input{flex:1;background:var(--bg);border:1px solid var(--line2);border-radius:10px;padding:10px 12px;color:var(--text);font-size:1rem;font-family:inherit;min-width:0}
.player-add input:focus{outline:2px solid var(--gold);border-color:transparent}
.count-row{display:flex;align-items:center;gap:12px;margin-top:12px;flex-wrap:wrap}
.stepper{display:inline-flex;align-items:center;border:1px solid var(--line2);border-radius:999px;overflow:hidden}
.stepper button{background:none;border:0;color:var(--text);font-size:1.3rem;width:40px;height:36px;cursor:pointer}
.stepper button:hover{background:rgba(255,255,255,.08)}
.stepper output{min-width:34px;text-align:center;font-weight:700}
.setup-toggles{display:flex;flex-direction:column;gap:14px}
.toggle-group{display:flex;flex-direction:column;gap:6px}
.seg{display:inline-flex;border:1px solid var(--line2);border-radius:999px;overflow:hidden;width:max-content;max-width:100%;background:var(--bg)}
.seg button{background:none;border:0;color:var(--muted);padding:8px 14px;font-size:.88rem;cursor:pointer;font-family:inherit;font-weight:600}
.seg button.active{background:var(--gold);color:#141005}

/* game tiles */
.game-cat{margin:28px 0 12px;font-size:.8rem;letter-spacing:.18em;text-transform:uppercase;color:var(--gold);display:flex;align-items:center;gap:10px}
.game-cat::after{content:"";flex:1;height:1px;background:linear-gradient(90deg,var(--line2),transparent)}
.game-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:14px}
@media (max-width:900px){.game-grid{grid-template-columns:repeat(3,1fr)}}
@media (max-width:600px){.game-grid{grid-template-columns:repeat(2,1fr);gap:10px}}
.game-card{--c:var(--pink);position:relative;overflow:hidden;background:linear-gradient(165deg,color-mix(in srgb,var(--c) 26%,#17171b) 0%,#141418 55%,#0f0f12 100%);border:1px solid color-mix(in srgb,var(--c) 35%,var(--line));border-radius:20px;padding:16px 14px 14px;text-align:left;cursor:pointer;color:var(--text);font-family:inherit;display:flex;flex-direction:column;gap:6px;transition:transform .18s,box-shadow .25s,border-color .2s;min-height:190px;box-shadow:0 10px 24px rgba(0,0,0,.35)}
.game-card::before{content:"";position:absolute;right:-40px;top:-40px;width:150px;height:150px;border-radius:50%;background:radial-gradient(circle,color-mix(in srgb,var(--c) 45%,transparent),transparent 70%);pointer-events:none}
.game-card:hover,.game-card:focus-visible{transform:translateY(-4px);border-color:var(--c);box-shadow:0 16px 34px rgba(0,0,0,.5),0 0 0 3px color-mix(in srgb,var(--c) 30%,transparent)}
.game-card .ga{width:72px;height:72px;display:block;filter:drop-shadow(0 8px 12px rgba(0,0,0,.5));transition:transform .25s}
.game-card:hover .ga{transform:scale(1.08) rotate(-4deg)}
.game-card .ga svg{width:100%;height:100%}
.game-card .gt{font-weight:800;font-size:1.05rem;line-height:1.25;margin-top:4px}
.game-card .gd{color:var(--muted);font-size:.82rem;line-height:1.4}
.scoreboard{margin-top:32px}
.score-list{display:flex;flex-direction:column;gap:8px;margin-top:10px}
.score-row{display:flex;align-items:center;gap:10px;background:var(--bg);border:1px solid var(--line);border-radius:12px;padding:8px 12px}
.score-row .bar{flex:1;height:10px;background:rgba(255,255,255,.06);border-radius:5px;overflow:hidden}
.score-row .bar i{display:block;height:100%;background:linear-gradient(90deg,var(--gold),var(--pink));border-radius:5px}
.score-row.top{border-color:var(--gold);background:linear-gradient(90deg,rgba(216,178,90,.12),var(--bg))}
.score-row.top .nm{color:var(--gold2);font-weight:800}

/* panel */
.game-panel{position:fixed;inset:0;z-index:90;background:var(--bg);display:flex;flex-direction:column;overflow:hidden}
.game-panel::before{content:"";position:absolute;inset:0;background:radial-gradient(900px 500px at 50% -10%,var(--theme,rgba(255,77,141,.16)),transparent 60%);pointer-events:none}
.theme-croc{--theme:rgba(76,175,80,.22)}.theme-roulette{--theme:rgba(216,178,90,.2)}.theme-bomb{--theme:rgba(255,94,58,.2)}.theme-finger{--theme:rgba(255,77,141,.2)}.theme-bottle{--theme:rgba(67,176,74,.18)}.theme-dice{--theme:rgba(77,163,255,.18)}.theme-updown{--theme:rgba(181,140,255,.2)}.theme-cards{--theme:rgba(255,77,141,.2)}.theme-kfood{--theme:rgba(255,94,58,.18)}.theme-kword{--theme:rgba(51,209,201,.18)}.theme-chosung{--theme:rgba(216,178,90,.18)}.theme-menu{--theme:rgba(216,178,90,.22)}.theme-rules{--theme:rgba(138,201,38,.16)}
.panel-head{position:relative;display:flex;align-items:center;justify-content:space-between;gap:8px;padding:10px 12px;border-bottom:1px solid var(--line);background:rgba(18,18,20,.85);backdrop-filter:blur(8px)}
.panel-head h2{font-size:1.05rem;margin:0;text-align:center;flex:1;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.panel-hint{position:relative;padding:8px 16px 0;margin:0;text-align:center}
.panel-body{position:relative;flex:1;overflow:auto;padding:14px 16px calc(24px + env(safe-area-inset-bottom));display:flex;flex-direction:column;align-items:center;gap:14px;-webkit-overflow-scrolling:touch}
.panel-body.nofit{justify-content:flex-start}
.turn{display:flex;align-items:center;gap:8px;font-weight:700;color:var(--gold2);font-size:1.05rem;text-align:center;margin:0}
.turn.fb{display:block;color:var(--text);font-weight:600}
.big-btn{font-size:1.15rem;padding:16px 30px;box-shadow:0 8px 22px rgba(0,0,0,.4)}
.result{position:absolute;inset:0;background:rgba(11,11,12,.9);backdrop-filter:blur(4px);display:flex;flex-direction:column;align-items:center;justify-content:center;gap:12px;padding:24px;text-align:center;z-index:5;animation:pop .3s cubic-bezier(.2,1.4,.5,1);overflow:hidden}
.result.soft{background:rgba(11,11,12,.55);pointer-events:none}.result.soft .btn{pointer-events:auto}
.result.fixedv{position:fixed;inset:0;justify-content:center;padding:70px 24px 90px;background:radial-gradient(ellipse at 50% 55%,rgba(11,11,12,.92),rgba(11,11,12,.55) 60%,rgba(11,11,12,.25))}
.result.low{justify-content:flex-end;padding-bottom:12%;background:linear-gradient(180deg,rgba(11,11,12,0) 0%,rgba(11,11,12,.15) 35%,rgba(11,11,12,.92) 70%)}.result.low .result-emoji{display:none}
.result-emoji{font-size:4.5rem;line-height:1;animation:bounce .7s cubic-bezier(.2,1.6,.4,1)}
.result h3{font-size:clamp(1.5rem,6vw,2.4rem);margin:0;text-shadow:0 4px 20px rgba(0,0,0,.6)}
.result .btns{display:flex;gap:10px;flex-wrap:wrap;justify-content:center;position:relative;z-index:2}
.result .btn{touch-action:manipulation}
@keyframes pop{from{opacity:0;transform:scale(.92)}to{opacity:1;transform:none}}
@keyframes bounce{0%{transform:scale(.2) rotate(-20deg)}60%{transform:scale(1.25) rotate(6deg)}100%{transform:none}}
.stage{position:relative;width:100%;max-width:520px;flex:1;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:12px;min-height:320px}
.flash{animation:flash .5s}
@keyframes flash{0%{background:#ff2d2d}100%{background:var(--bg)}}
.shake{animation:shake .5s}
@keyframes shake{10%,90%{transform:translate3d(-2px,0,0)}20%,80%{transform:translate3d(4px,0,0)}30%,50%,70%{transform:translate3d(-8px,0,0)}40%,60%{transform:translate3d(8px,0,0)}}
.burst{position:absolute;left:50%;top:40%;transform:translate(-50%,-50%);font-size:clamp(2.4rem,12vw,4.5rem);font-weight:900;color:#fff;letter-spacing:.04em;text-shadow:0 0 14px rgba(255,255,255,.6),4px 4px 0 var(--fire);animation:burst 1.1s ease-out forwards;pointer-events:none;z-index:6;font-family:"Bodoni Moda",Impact,sans-serif;font-style:italic}
.burst.chomp{color:#fff;text-shadow:0 0 14px rgba(255,255,255,.5),4px 4px 0 #2e7d32}
@keyframes burst{0%{opacity:0;transform:translate(-50%,-50%) scale(.3) rotate(-12deg)}25%{opacity:1;transform:translate(-50%,-50%) scale(1.15) rotate(3deg)}80%{opacity:1;transform:translate(-50%,-50%) scale(1)}100%{opacity:0;transform:translate(-50%,-70%) scale(1.1)}}
.confetti{position:absolute;inset:0;pointer-events:none;overflow:hidden;z-index:1}
.confetti i{position:absolute;top:-12px;display:block;border-radius:2px;animation:fall linear forwards;opacity:.95}
@keyframes fall{0%{transform:translateY(0) rotate(0)}100%{transform:translateY(110vh) rotate(720deg);opacity:.6}}

/* croc */
.croc-stage{background:radial-gradient(circle at 50% 42%,rgba(255,244,200,.14),transparent 62%)}
.croc-svg{width:100%;max-width:480px;height:auto;touch-action:manipulation;user-select:none;overflow:visible}
.croc-stage{gap:6px;max-width:560px}
.croc-stage .turn{margin-bottom:0}
.tooth{cursor:pointer;transition:transform .12s}
.tooth:hover rect:first-child,.tooth:hover polygon:first-child{fill:#fff7d6}
.tooth.pressed rect:first-child,.tooth.pressed polygon:first-child{fill:#8a8378;stroke:#6b6357}
.tooth.pressed rect:nth-child(2){opacity:.2}
.tooth.pressed{pointer-events:none;opacity:.85}
.tooth:focus{outline:none}
.tooth:focus-visible rect:first-child,.tooth:focus-visible polygon:first-child{stroke:#fff;stroke-width:3}

/* pirate */
.pirate-stage{background:radial-gradient(circle at 50% 45%,rgba(255,236,190,.12),transparent 62%)}
.pirate-svg{width:100%;max-width:380px;height:auto;overflow:visible;user-select:none;touch-action:manipulation}
.slot{cursor:pointer}
.slot:hover rect:first-child{fill:#5d4037}
.slot.in{pointer-events:none}
.slot:focus{outline:none}
.sword{filter:drop-shadow(0 3px 3px rgba(0,0,0,.5))}
.burst.pop{text-shadow:0 0 14px rgba(255,255,255,.5),4px 4px 0 #b71c1c}
.theme-pirate{--theme:rgba(197,139,74,.22)}.theme-gumball{--theme:rgba(239,83,80,.2)}

/* gumball */
.gumball-svg{width:100%;max-width:340px;height:auto;overflow:visible}
.gball{transform-box:fill-box;transform-origin:center}
#gbBalls.shaking .gball{animation:jiggle .35s infinite alternate;animation-delay:var(--d)}
@keyframes jiggle{from{transform:translate(-3px,-6px) rotate(-6deg)}to{transform:translate(3px,4px) rotate(6deg)}}
.gb-counter{font-weight:800;color:var(--gold2);font-size:1.1rem;text-align:center}
.gb-list{display:flex;flex-wrap:wrap;gap:6px;justify-content:center;max-width:460px}
.gb-chip{display:inline-grid;place-items:center;min-width:34px;height:34px;padding:0 6px;border-radius:50%;background:var(--c);color:#0b0b0c;font-weight:800;font-size:.85rem;box-shadow:inset -3px -4px 6px rgba(0,0,0,.18),0 4px 8px rgba(0,0,0,.4)}
.gb-big{width:140px;height:140px;border-radius:50%;background:radial-gradient(circle at 35% 30%,#fff,var(--c) 45%,color-mix(in srgb,var(--c) 70%,#000));display:grid;place-items:center;font-size:2.6rem;font-weight:900;color:#0b0b0c;box-shadow:0 20px 40px rgba(0,0,0,.6);animation:bounce .7s cubic-bezier(.2,1.6,.4,1);padding:10px;text-align:center;line-height:1.05;overflow:hidden}

/* roulette */
.wheel-wrap{position:relative;width:min(90vw,400px);aspect-ratio:1}
.wheel-wrap canvas{width:100%;height:100%;border-radius:50%;box-shadow:0 26px 50px rgba(0,0,0,.6)}
.wheel-ptr{position:absolute;top:-14px;left:50%;transform:translateX(-50%);width:0;height:0;border-left:18px solid transparent;border-right:18px solid transparent;border-top:40px solid var(--gold2);filter:drop-shadow(0 4px 6px rgba(0,0,0,.7));z-index:2}
.wheel-ptr::after{content:"";position:absolute;left:-8px;top:-42px;width:16px;height:16px;border-radius:50%;background:#fff3b0;box-shadow:0 0 12px #ffe08a}
.wheel-hub{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);width:64px;height:64px;border-radius:50%;background:radial-gradient(circle at 35% 30%,#fff2c2,#d8b25a 45%,#8a6a1e);border:3px solid #0b0b0c;display:grid;place-items:center;font-family:"Bodoni Moda",serif;font-weight:700;letter-spacing:.05em;color:#1a1305;box-shadow:0 6px 14px rgba(0,0,0,.6);font-size:.95rem}
.num-row{display:flex;align-items:center;gap:10px}

/* bomb */
.bomb-art{width:min(70vw,260px);aspect-ratio:1;transition:transform .1s;position:relative}
.bomb-svg{width:100%;height:100%;overflow:visible}
.bomb-art .spark{opacity:.55;transform-origin:162px 16px}
.bomb-art.lit .spark{opacity:1;animation:spark .25s infinite alternate}
.bomb-art.lit{animation:tremble .6s infinite}
.bomb-art.fast{animation-duration:.25s}
.bomb-art.panic{animation-duration:.12s}
@keyframes spark{0%{transform:scale(.8) rotate(0)}100%{transform:scale(1.4) rotate(25deg)}}
@keyframes tremble{0%,100%{transform:translate(0,0) rotate(0)}25%{transform:translate(-2px,1px) rotate(-1.5deg)}50%{transform:translate(2px,-1px) rotate(1.5deg)}75%{transform:translate(-1px,2px) rotate(-1deg)}}
.boom-art{width:100%;height:100%}
.boom-art svg{width:100%;height:100%;overflow:visible}
.boom-art .bx1{transform-origin:150px 150px;animation:boom1 .8s ease-out forwards}
.boom-art .bx2{transform-origin:150px 150px;animation:boom2 .8s ease-out forwards}
@keyframes boom1{0%{transform:scale(.2) rotate(0);opacity:0}40%{transform:scale(1.5) rotate(20deg);opacity:1}100%{transform:scale(1.2) rotate(30deg);opacity:.9}}
@keyframes boom2{0%{transform:scale(.1) rotate(0);opacity:0}50%{transform:scale(1.2) rotate(-30deg);opacity:1}100%{transform:scale(.9) rotate(-45deg);opacity:.95}}
.theme-box{background:var(--card);border:1px dashed var(--line2);border-radius:12px;padding:10px 14px;color:var(--gold2);font-weight:600;text-align:center}

/* finger */
.finger-zone{position:relative;width:100%;flex:1;min-height:62vh;border:2px dashed rgba(255,77,141,.5);border-radius:24px;touch-action:none;overflow:hidden;background:radial-gradient(circle at center,rgba(255,77,141,.12),transparent 65%),radial-gradient(rgba(255,255,255,.05) 1px,transparent 1px) 0 0/18px 18px}
.finger-msg{position:absolute;inset:0;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:10px;text-align:center;color:var(--muted);font-size:1.1rem;pointer-events:none;padding:20px}
.finger-msg.big .finger-txt{font-size:5rem;color:var(--gold2);font-weight:900;line-height:1;text-shadow:0 0 30px rgba(216,178,90,.5)}
.finger-hand{width:120px;height:120px;animation:handpulse 1.6s ease-in-out infinite}
.finger-hand svg{width:100%;height:100%}
@keyframes handpulse{0%,100%{transform:scale(1);opacity:.9}50%{transform:scale(1.08);opacity:1}}
.fdot{position:absolute;width:96px;height:96px;margin:-48px 0 0 -48px;border-radius:50%;border:6px solid var(--c);background:radial-gradient(circle,color-mix(in srgb,var(--c) 45%,transparent),color-mix(in srgb,var(--c) 10%,transparent) 70%);pointer-events:none;transition:opacity .3s,transform .3s;animation:ripple 1.6s infinite}
.fdot.win{transform:scale(1.5);animation:winpulse 1s infinite alternate;box-shadow:0 0 50px var(--c);z-index:2}
.fdot.lose{opacity:.12;animation:none}
.fdot .crown{position:absolute;left:50%;top:-14px;transform:translate(-50%,-100%);font-size:1.8rem;animation:bounce .8s}
@keyframes ripple{0%{box-shadow:0 0 0 0 color-mix(in srgb,var(--c) 60%,transparent)}100%{box-shadow:0 0 0 26px transparent}}
@keyframes winpulse{from{box-shadow:0 0 30px var(--c)}to{box-shadow:0 0 70px var(--c)}}

/* bottle */
.bottle-wrap{position:relative;width:min(90vw,400px);aspect-ratio:1;display:grid;place-items:center}
.table-top{position:absolute;inset:6%;border-radius:50%;background:radial-gradient(circle at 40% 35%,#8a5a2b,#5b3a1a 55%,#3a2410 100%);box-shadow:inset 0 0 0 10px #2b1a0b,inset 0 0 40px rgba(0,0,0,.6),0 24px 50px rgba(0,0,0,.6)}
.table-top::after{content:"";position:absolute;inset:14%;border-radius:50%;border:2px dashed rgba(255,255,255,.12)}
.bottle{position:relative;height:60%;width:auto;max-width:36%;transition:transform 4.2s cubic-bezier(.12,.7,.08,1);transform-origin:50% 50%;display:block;z-index:1}
.seat{position:absolute;left:50%;top:50%;transform:translate(-50%,-50%) rotate(var(--a)) translateY(calc(-1 * var(--r))) rotate(calc(-1 * var(--a)));display:flex;align-items:center;gap:6px;background:var(--card2);border:2px solid color-mix(in srgb,var(--c) 60%,var(--line2));border-radius:999px;padding:3px 10px 3px 3px;font-size:.8rem;font-weight:700;white-space:nowrap;max-width:120px;z-index:2;box-shadow:0 6px 14px rgba(0,0,0,.5)}
.seat span{overflow:hidden;text-overflow:ellipsis}
.seat.hit{background:var(--gold);color:#141005;border-color:#fff;transform:translate(-50%,-50%) rotate(var(--a)) translateY(calc(-1 * var(--r))) rotate(calc(-1 * var(--a))) scale(1.15);box-shadow:0 0 24px var(--gold)}

/* dice */
.dice-row{display:flex;gap:18px}
.die{width:min(30vw,120px);height:min(30vw,120px);filter:drop-shadow(0 10px 14px rgba(0,0,0,.55));transition:transform .1s}
.die.rolling{animation:roll .35s infinite}
@keyframes roll{0%{transform:rotate(0) translateY(0)}50%{transform:rotate(20deg) translateY(-14px) scale(1.06)}100%{transform:rotate(-20deg) translateY(0)}}
.dice-sum{font-size:1.4rem;font-weight:800;color:var(--gold2);min-height:1.6em}
.dice-table{width:100%;max-width:420px;border-collapse:collapse;font-size:.95rem}
.dice-table td{padding:6px 8px;border-bottom:1px solid var(--line)}
.dice-table td:first-child{display:flex;align-items:center;gap:8px}
.dice-table td:last-child{text-align:right;font-weight:700;color:var(--gold2)}

/* updown */
.range-bar{font-size:1.3rem;font-weight:800;color:var(--gold2);margin:0}
.ud-track{position:relative;width:100%;max-width:420px;height:16px;border-radius:8px;background:rgba(255,255,255,.08);margin:14px 0 22px}
.ud-fill{position:absolute;top:0;bottom:0;border-radius:8px;background:linear-gradient(90deg,var(--gold),var(--pink));transition:left .3s,width .3s;box-shadow:0 0 14px rgba(255,77,141,.5)}
.ud-lo,.ud-hi{position:absolute;top:20px;transform:translateX(-50%);font-size:.75rem;color:var(--muted);transition:left .3s}
.guess-row{display:flex;gap:8px;width:100%;max-width:360px}
.guess-row input{flex:1;font-size:1.5rem;text-align:center;background:var(--card);border:1px solid var(--line2);border-radius:12px;color:var(--text);padding:10px;font-family:inherit;min-width:0;font-weight:700}
.hist{display:flex;flex-wrap:wrap;gap:6px;justify-content:center}
.hist span{background:var(--card);border:1px solid var(--line);border-radius:999px;padding:4px 10px;font-size:.85rem}
.hist span.up{color:#a6e5b5;border-color:rgba(63,174,90,.5)}.hist span.down{color:#ffb39f;border-color:rgba(255,94,58,.5)}.hist span.hit{background:var(--gold);color:#141005}

/* cards */
.tabs{display:flex;gap:6px;flex-wrap:wrap;justify-content:center}
.tabs button{background:var(--card);border:1px solid var(--line2);color:var(--muted);border-radius:999px;padding:8px 14px;cursor:pointer;font-family:inherit;font-weight:600;font-size:.88rem}
.tabs button.active{background:var(--pink);border-color:var(--pink);color:#fff;box-shadow:0 0 16px rgba(255,77,141,.5)}
.qflip{position:relative;width:100%;max-width:460px;min-height:240px;perspective:1000px;--k:var(--pink)}
.qflip.kind-truth{--k:#4da3ff}.qflip.kind-dare{--k:#ff5e3a}.qflip.kind-balance{--k:#d8b25a}.qflip.kind-likely{--k:#ff4d8d}
.qback,.qcard{position:absolute;inset:0;backface-visibility:hidden;-webkit-backface-visibility:hidden;border-radius:22px;transition:transform .55s cubic-bezier(.4,.2,.2,1)}
.qback{background:repeating-linear-gradient(45deg,#1d1d22 0 10px,#17171b 10px 20px);border:2px solid var(--k);display:grid;place-items:center;transform:rotateY(0)}
.qback-in{border:2px dashed color-mix(in srgb,var(--k) 60%,transparent);border-radius:16px;padding:22px 30px;text-align:center}
.qb-num{display:block;font-family:"Bodoni Moda",serif;font-size:2.2rem;color:var(--k);letter-spacing:.1em}
.qb-sub{font-size:.65rem;letter-spacing:.3em;color:var(--muted)}
.qcard{transform:rotateY(180deg);background:linear-gradient(160deg,var(--card2),var(--card));border:2px solid var(--k);padding:28px 24px;display:flex;flex-direction:column;align-items:center;justify-content:center;text-align:center;gap:14px;box-shadow:var(--shadow)}
.qcard::before,.qcard::after{content:"❖";position:absolute;color:var(--k);font-size:.8rem;opacity:.7}
.qcard::before{left:12px;top:10px}.qcard::after{right:12px;bottom:8px}
.qflip.show .qback{transform:rotateY(-180deg)}
.qflip.show .qcard{transform:rotateY(0)}
.qcard .qt{font-size:clamp(1.15rem,4.5vw,1.5rem);font-weight:700;line-height:1.35;margin:0}
.qcard .lbl{font-size:.75rem;letter-spacing:.16em;text-transform:uppercase;color:var(--k,var(--pink));font-weight:700;margin:0}
.qcard.quiz-q,.qcard.chosung-card{position:relative;transform:none;width:100%;max-width:460px;min-height:0;--k:var(--gold);animation:pop .25s}
.balance{display:grid;grid-template-columns:1fr auto 1fr;gap:12px;align-items:center;width:100%}
.balance .opt{background:var(--bg);border:2px solid var(--line2);border-radius:14px;padding:18px 12px;font-weight:700;font-size:1rem;min-height:110px;display:grid;place-items:center}
.balance .opt.a{border-color:var(--gold)}.balance .opt.b{border-color:var(--pink)}
.balance .vs{font-weight:900;color:var(--gold2);font-style:italic}

/* quiz */
.progress-dots{display:flex;gap:6px}
.progress-dots i{width:10px;height:10px;border-radius:50%;background:rgba(255,255,255,.12);display:block}
.progress-dots i.done{background:var(--gold)}.progress-dots i.cur{background:var(--pink);box-shadow:0 0 10px var(--pink)}
.quiz-opts{display:grid;gap:8px;width:100%;max-width:460px}
.quiz-opts button{display:flex;align-items:center;gap:12px;background:var(--card);border:1px solid var(--line2);color:var(--text);border-radius:14px;padding:12px 14px;font-size:1rem;cursor:pointer;font-family:inherit;text-align:left;transition:transform .1s}
.quiz-opts button b{display:inline-grid;place-items:center;width:30px;height:30px;border-radius:50%;background:rgba(255,255,255,.08);color:var(--gold2);flex:none}
.quiz-opts button:hover{border-color:var(--gold);transform:translateX(3px)}
.quiz-opts button.ok{background:rgba(63,174,90,.25);border-color:var(--green)}.quiz-opts button.ok b{background:var(--green);color:#fff}
.quiz-opts button.bad{background:rgba(255,94,58,.25);border-color:var(--fire)}.quiz-opts button.bad b{background:var(--fire);color:#fff}
.quiz-opts button:disabled{cursor:default}

/* kwords */
.kgrid{display:grid;grid-template-columns:repeat(2,1fr);gap:10px;width:100%;max-width:640px}
@media (min-width:700px){.kgrid{grid-template-columns:repeat(3,1fr)}}
.kcard{perspective:800px;height:156px;cursor:pointer}
.kcard .in{position:relative;width:100%;height:100%;transition:transform .55s cubic-bezier(.4,.2,.2,1);transform-style:preserve-3d}
.kcard.flip .in{transform:rotateY(180deg)}
.kcard .f,.kcard .b{position:absolute;inset:0;backface-visibility:hidden;-webkit-backface-visibility:hidden;border-radius:16px;padding:12px;display:flex;flex-direction:column;align-items:center;justify-content:center;text-align:center;gap:4px;border:2px solid var(--c)}
.kcard .f{background:linear-gradient(160deg,color-mix(in srgb,var(--c) 22%,#17171b),#121215)}
.kcard .f .ko{font-size:1.5rem;font-weight:800;color:#fff}
.kcard .f .rom{color:var(--muted);font-size:.85rem}
.kcard .f .tap{position:absolute;right:10px;bottom:6px;color:var(--c);font-size:.9rem}
.kcard .b{background:var(--c);color:#0b0b0c;transform:rotateY(180deg)}
.kcard .b .m{font-weight:800;font-size:1.05rem}
.kcard .b .tip{font-size:.78rem;opacity:.85}

/* chosung */
.chosung{display:flex;gap:8px;justify-content:center;margin:0}
.chosung span{display:grid;place-items:center;width:clamp(44px,14vw,64px);height:clamp(56px,18vw,80px);border-radius:12px;background:var(--bg);border:2px solid var(--gold);font-size:clamp(1.8rem,8vw,2.8rem);font-weight:900;color:var(--gold2);box-shadow:0 8px 16px rgba(0,0,0,.4)}
.chosung-ans{font-size:1.9rem;font-weight:800;min-height:1.4em;margin:0;color:#fff}
.chosung-card.revealed .chosung span{border-color:var(--green);color:#a6e5b5}

/* menu roulette */
.slot{position:relative;width:100%;max-width:460px;background:linear-gradient(180deg,#2a2210,#171307);border:3px solid var(--gold);border-radius:22px;padding:14px;box-shadow:0 0 0 6px #0b0b0c,0 0 0 8px rgba(216,178,90,.4),0 20px 40px rgba(0,0,0,.6);overflow:hidden}
.slot::before,.slot::after{content:"";position:absolute;left:0;right:0;height:26px;pointer-events:none;z-index:1}
.slot::before{top:14px;background:linear-gradient(180deg,#171307,transparent)}.slot::after{bottom:14px;background:linear-gradient(0deg,#171307,transparent)}
.slot-win{position:relative;background:var(--bg);border-radius:14px;min-height:120px;display:flex;flex-direction:column;align-items:center;justify-content:center;text-align:center;padding:16px;gap:4px}
.slot .sn{font-size:1.4rem;font-weight:800}
.slot .sp{color:var(--gold2);font-weight:700;font-size:1.1rem}
.slot img{width:min(66vw,240px);aspect-ratio:1;object-fit:cover;border-radius:14px;margin-bottom:8px;box-shadow:0 10px 24px rgba(0,0,0,.5)}
.slot.spin .sn{animation:reel .12s infinite}
@keyframes reel{0%{transform:translateY(-6px);opacity:.5;filter:blur(1px)}50%{transform:translateY(0);opacity:1}100%{transform:translateY(6px);opacity:.5;filter:blur(1px)}}
.slot .pick-badge{display:inline-block;background:var(--pink);color:#fff;font-size:.68rem;font-weight:800;letter-spacing:.15em;padding:4px 12px;border-radius:999px;margin-bottom:8px;box-shadow:0 4px 10px rgba(0,0,0,.4)}

/* rules */
.rules{width:100%;max-width:640px;display:flex;flex-direction:column;gap:8px}
.rule{background:var(--card);border:1px solid var(--line);border-left:4px solid var(--c);border-radius:14px;padding:4px 14px}
.rule summary{cursor:pointer;font-weight:700;padding:10px 0;list-style:none;display:flex;align-items:center;gap:10px}
.rule summary::-webkit-details-marker{display:none}
.rule summary::after{content:"+";color:var(--muted);font-size:1.2rem;margin-left:auto}
.rule[open] summary::after{content:"−"}
.rule p{color:#cfc9bd;font-size:.92rem}
.helper{background:var(--bg);border:1px dashed var(--line2);border-radius:12px;padding:14px;margin:0 0 12px;display:flex;flex-direction:column;align-items:center;gap:8px}
.helper .hn{font-size:3.2rem;font-weight:900;line-height:1;color:var(--gold2)}
.helper .hn.clap{color:var(--pink)}

/* modal */
.modal{position:fixed;inset:0;z-index:120;background:rgba(0,0,0,.78);backdrop-filter:blur(4px);display:flex;align-items:center;justify-content:center;padding:16px}
.modal-card{position:relative;background:linear-gradient(160deg,#1f1f25,#141418);border:2px solid var(--pink);border-radius:24px;padding:30px 22px 22px;width:min(100%,480px);text-align:center;box-shadow:0 0 0 6px rgba(255,77,141,.15),var(--shadow);animation:pop .25s}
.modal-card.stamp .penalty-text{animation:stamp .35s cubic-bezier(.2,1.5,.5,1)}
@keyframes stamp{0%{transform:scale(1.6) rotate(-6deg);opacity:0}100%{transform:none;opacity:1}}
.modal-close{position:absolute;top:8px;right:10px;background:none;border:0;color:var(--muted);font-size:1.8rem;cursor:pointer;width:40px;height:40px}
.penalty-icon{font-size:3rem;line-height:1;margin-bottom:6px}
.penalty-text{font-size:clamp(1.25rem,5vw,1.6rem);font-weight:800;line-height:1.35;margin:12px 0}
#penalty-who{justify-content:center}
#penalty-who .chip{display:inline-flex;align-items:center;gap:6px;padding:4px 10px 4px 4px}
#penalty-who .chip.active{background:var(--pink);border-color:var(--pink);color:#fff}

/* liar's dice (大话骰) */
.theme-dahua{--theme:rgba(229,57,53,.22)}
.dh{width:100%;max-width:560px;display:flex;flex-direction:column;gap:12px}
.dh .card{padding:16px}
.dh-lobby{display:flex;flex-direction:column;gap:12px;align-items:stretch;text-align:center}
.dh-field{display:flex;flex-direction:column;gap:6px;text-align:left;font-size:.85rem;color:var(--muted)}
.dh input{background:var(--bg);border:1px solid var(--line2);border-radius:10px;padding:12px;color:var(--text);font-size:1.1rem;font-family:inherit;text-align:center}
.dh-or{color:var(--muted);font-size:.85rem}
.dh-joinrow{display:grid;grid-template-columns:1fr auto;gap:8px}
.dh-head{display:flex;align-items:center;gap:12px;flex-wrap:wrap;justify-content:space-between}
.dh-code{display:flex;flex-direction:column;line-height:1.1}
.dh-code b{font-size:1.8rem;letter-spacing:.22em;color:var(--gold2);font-family:"Bodoni Moda",serif}
.dh-round{font-weight:700;color:var(--muted)}
.dh-headbtns{display:flex;gap:6px}
.dh-players{display:flex;gap:8px;overflow-x:auto;padding-bottom:4px;scrollbar-width:none}
.dh-p{position:relative;flex:0 0 auto;display:flex;flex-direction:column;align-items:center;gap:4px;background:var(--card);border:1px solid var(--line);border-radius:14px;padding:10px 12px;min-width:84px}
.dh-p.turn{border-color:var(--gold);box-shadow:0 0 0 2px rgba(216,178,90,.35)}
.dh-p.me{background:linear-gradient(160deg,var(--card2),var(--card))}
.dh-pn{font-size:.8rem;font-weight:700;max-width:96px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.dh-ps{font-size:.8rem;color:var(--gold2);font-weight:800}
.dh-tag{font-size:.65rem;letter-spacing:.08em;text-transform:uppercase;padding:2px 7px;border-radius:999px;background:rgba(255,255,255,.08);color:var(--muted)}
.dh-tag.turn{background:var(--gold);color:#141005}.dh-tag.wild{background:rgba(229,57,53,.25);color:#ffb3b3}
.dh-kick{position:absolute;top:2px;right:4px;background:none;border:0;color:var(--muted);cursor:pointer;font-size:1rem}
.dh-cup{text-align:center;display:flex;flex-direction:column;align-items:center;gap:10px}
.dh-cupart{width:150px}
.dh-cupart svg{width:100%;height:auto}
.dh-cupart.shaking{animation:cupshake .12s 6}
@keyframes cupshake{0%,100%{transform:rotate(0) translateY(0)}25%{transform:rotate(-12deg) translateY(-8px)}75%{transform:rotate(12deg) translateY(-4px)}}
.dh-mydice{display:flex;gap:8px;justify-content:center;flex-wrap:wrap}
.dh-mydice .dh-die{width:56px;height:56px;animation:pop .35s cubic-bezier(.2,1.5,.5,1)}
.dh-mydice.hidden .dh-die{filter:blur(8px) brightness(.4)}
.dh-die{width:40px;height:40px;filter:drop-shadow(0 4px 6px rgba(0,0,0,.5))}
.dh-die.big{width:64px;height:64px}
.dh-die.hit{outline:3px solid var(--gold);outline-offset:-2px;border-radius:9px}
.dh-die.dim{opacity:.35}
.dh-call .row{width:100%}
.dh-bid{display:flex;align-items:center;justify-content:center;gap:12px;margin:8px 0}
.dh-count{font-size:3rem;font-weight:900;color:var(--gold2);line-height:1}
.dh-x{font-size:1.6rem;color:var(--muted)}
.dh-ctl{display:flex;flex-direction:column;gap:12px;border-color:var(--gold)}
.dh-yourturn{color:var(--gold2)}
.dh-ctlrow{display:flex;align-items:center;gap:10px;flex-wrap:wrap}
.dh-ctlrow output{font-size:1.6rem;font-weight:800;min-width:2ch;text-align:center}
.dh-faces{display:flex;gap:6px;flex-wrap:wrap}
.dh-face{background:none;border:2px solid transparent;border-radius:12px;padding:2px;cursor:pointer}
.dh-face.on{border-color:var(--gold);background:rgba(216,178,90,.15)}
.dh-wait{text-align:center;color:var(--muted);font-weight:600;padding:8px}
.dh-result{display:flex;flex-direction:column;gap:8px;position:relative;overflow:hidden;border-color:var(--fire)}
.dh-actual{font-size:1.3rem;font-weight:800;color:var(--gold2);margin:0}
.dh-reveal{display:flex;align-items:center;gap:8px;background:var(--bg);border-radius:12px;padding:6px 10px}
.dh-reveal.loser{outline:2px solid var(--fire)}.dh-reveal.winner{outline:2px solid var(--green)}
.dh-reveal .dh-pn{flex:0 0 70px}
.dh-rdice{display:flex;gap:4px;flex:1}
.dh-rdice .dh-die{width:30px;height:30px}
.dh-hits{color:var(--gold2);font-size:1.1rem}
.dh-verdict{font-weight:800;font-size:1.05rem;margin:4px 0 0;text-align:center}
.dh-you{text-align:center;font-weight:800;margin:0}
.dh-you.lose{color:#ffb39f}.dh-you.win{color:#a6e5b5}
.dh-hist{color:var(--muted)}

/* ladder */
.theme-ladder{--theme:rgba(77,163,255,.2)}
.ladder{position:relative;width:100%;max-width:560px;display:flex;flex-direction:column;align-items:center;gap:10px}
.ladder-cv{width:100%;border-radius:18px;background:linear-gradient(180deg,rgba(255,255,255,.03),rgba(255,255,255,.01));border:1px solid var(--line);touch-action:manipulation;cursor:pointer}

/* apartment */
.theme-apart{--theme:rgba(126,87,194,.22)}
.burst.good{text-shadow:0 0 14px rgba(255,255,255,.55),4px 4px 0 #e05267}
.burst.bad{text-shadow:0 0 14px rgba(255,255,255,.55),4px 4px 0 #b71c1c}
.apart-left{margin:-2px 0 2px}
.apart-wrap{width:100%;max-width:420px;display:flex;flex-direction:column;gap:6px;padding:14px 12px 0;border-radius:20px 20px 0 0;background:linear-gradient(180deg,#3a2f57,#241d38);border:1px solid rgba(126,87,194,.5);border-bottom:0;box-shadow:0 18px 36px rgba(0,0,0,.45)}
.apart-floor{display:grid;grid-template-columns:auto repeat(4,1fr);align-items:center;gap:6px}
.apart-fno{font-size:.68rem;color:var(--muted);width:2.6em;text-align:right;letter-spacing:.02em}
.apart-win{position:relative;aspect-ratio:1/1.1;border:0;padding:0;border-radius:6px;background:#191430;box-shadow:inset 0 0 0 2px rgba(126,87,194,.55);cursor:pointer;overflow:hidden;touch-action:manipulation;transition:transform .12s ease}
.apart-win:active{transform:scale(.94)}
.apart-win .pane{position:absolute;inset:0;display:flex;background:linear-gradient(145deg,#6d5ba8,#453a72);transition:transform .32s cubic-bezier(.3,1.4,.5,1)}
.apart-win .pane i{flex:1;border:1px solid rgba(0,0,0,.35);background:linear-gradient(160deg,rgba(255,255,255,.3),rgba(255,255,255,.04) 55%)}
.apart-win .reveal{position:absolute;inset:0;display:flex;align-items:center;justify-content:center;opacity:0;transition:opacity .2s ease .14s}
.apart-win .reveal svg{width:100%;height:100%}
.apart-win.open .pane{transform:perspective(220px) rotateY(-108deg);transform-origin:left center}
.apart-win.open .reveal{opacity:1}
.apart-win.open{box-shadow:inset 0 0 0 2px rgba(126,87,194,.3);cursor:default}
.apart-win.empty{background:#120e24}
.apart-win.beauty{background:radial-gradient(circle at 50% 40%,#ffe6c7,#f0a8b4);box-shadow:inset 0 0 0 2px #ffd166,0 0 18px rgba(255,209,102,.6)}
.apart-win.monster{background:radial-gradient(circle at 50% 40%,#ff8a80,#8e1414);box-shadow:inset 0 0 0 2px #ff5252,0 0 22px rgba(255,82,82,.7);animation:apartShake .45s ease}
.apart-win.peek{opacity:.72}
.apart-base{height:30px;max-width:420px;width:100%;border-radius:0 0 8px 8px;background:linear-gradient(180deg,#241d38,#17122a);border:1px solid rgba(126,87,194,.5);border-top:0;display:flex;align-items:flex-end;justify-content:center}
.apart-door{width:38px;height:22px;border-radius:5px 5px 0 0;background:linear-gradient(180deg,#8d6e63,#4e342e);box-shadow:inset 0 0 0 1px rgba(0,0,0,.4)}
@keyframes apartShake{0%,100%{transform:translateX(0)}20%{transform:translateX(-4px)}40%{transform:translateX(4px)}60%{transform:translateX(-3px)}80%{transform:translateX(3px)}}

/* time watch */
.theme-timer{--theme:rgba(51,209,201,.2)}
.tw-target output{min-width:4.6em;text-align:center;font-variant-numeric:tabular-nums}
.tw-who{min-height:1.8em}
.tw-dial{position:relative;display:flex;align-items:center;justify-content:center;width:100%;max-width:360px;padding:26px 18px;border-radius:24px;background:radial-gradient(circle at 50% 35%,#182029,#0c0f14);border:3px solid rgba(51,209,201,.55);box-shadow:0 0 28px rgba(51,209,201,.18),inset 0 0 30px rgba(0,0,0,.6)}
.tw-num{font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:clamp(2.2rem,13vw,3.4rem);font-weight:700;letter-spacing:.03em;color:#8fe9e3;text-shadow:0 0 16px rgba(51,209,201,.55);font-variant-numeric:tabular-nums}
.tw-dial.hidden-run .tw-num{color:#5c7078;text-shadow:none;animation:twPulse 1s ease-in-out infinite}
.tw-dial.pop{animation:twPop .4s ease}
@keyframes twPulse{0%,100%{opacity:.45}50%{opacity:.9}}
@keyframes twPop{0%{transform:scale(1)}40%{transform:scale(1.06)}100%{transform:scale(1)}}
.tw-btn{min-width:200px}
.tw-list{display:flex;flex-direction:column;gap:5px;width:100%;max-width:360px}
.tw-row{display:grid;grid-template-columns:auto 1fr auto auto;align-items:center;gap:8px;padding:7px 11px;border-radius:12px;background:rgba(255,255,255,.05);border:1px solid var(--line);font-size:.86rem}
.tw-row.top{border-color:rgba(51,209,201,.6);background:rgba(51,209,201,.12)}
.tw-row .nm{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.tw-row .tm{font-family:ui-monospace,Menlo,monospace;font-variant-numeric:tabular-nums;color:#8fe9e3}
.tw-row .df{font-family:ui-monospace,Menlo,monospace;font-variant-numeric:tabular-nums;color:var(--muted);min-width:4.4em;text-align:right}

/* casino war */
.theme-war{--theme:rgba(31,157,85,.2)}
.war-meta{display:flex;align-items:center;gap:12px;flex-wrap:wrap;justify-content:center;min-height:1.4em}
.war-shoe{margin:0}
.war-streak{font-size:.82rem;font-weight:700;color:#ffd166;letter-spacing:.02em}
.war-felt{position:relative;display:flex;align-items:center;justify-content:center;gap:clamp(8px,4vw,20px);width:100%;max-width:400px;padding:22px 16px;border-radius:22px;background:radial-gradient(ellipse at 50% 30%,#13764a,#0a3d27 70%);border:2px solid rgba(255,209,102,.35);box-shadow:0 16px 36px rgba(0,0,0,.5),inset 0 0 40px rgba(0,0,0,.35)}
.war-vs{font-family:"Bodoni Moda",Georgia,serif;font-style:italic;font-weight:700;font-size:.9rem;color:rgba(255,209,102,.75);letter-spacing:.06em}
.war-slot{width:clamp(88px,30vw,116px);aspect-ratio:5/7;perspective:800px}
.war-card{position:relative;width:100%;height:100%;transform-style:preserve-3d;transition:transform .42s cubic-bezier(.3,1.2,.5,1)}
.war-card.down{transform:rotateY(180deg)}
.war-card .face{position:absolute;inset:0;border-radius:9px;backface-visibility:hidden;-webkit-backface-visibility:hidden;display:flex;align-items:center;justify-content:center;box-shadow:0 6px 14px rgba(0,0,0,.45)}
.war-card .front{background:#fdfcf7;border:1px solid #b9b1a0}
.war-card .front.r{color:#c62828}.war-card .front.b{color:#1a1a1f}
.war-card .back{transform:rotateY(180deg);background:repeating-linear-gradient(45deg,#2b2340 0 7px,#3a2f57 7px 14px);border:1px solid #15452a}
.war-card .back span{width:62%;height:74%;border-radius:5px;border:1.5px solid rgba(126,87,194,.75)}
.war-card .big{font-size:clamp(2rem,10vw,2.8rem);line-height:1;font-style:normal}
.war-card .ix{position:absolute;display:flex;flex-direction:column;align-items:center;line-height:1;font-family:Georgia,serif;font-weight:700;font-size:clamp(.72rem,3.2vw,.92rem);font-style:normal}
.war-card .ix b{font-weight:400;font-size:.9em}
.war-card .ix.tl{top:6px;left:6px}
.war-card .ix.br{bottom:6px;right:6px;transform:rotate(180deg)}
.war-card.bust .front{box-shadow:0 0 0 3px #ff5252,0 8px 18px rgba(255,82,82,.5);animation:apartShake .45s ease}
.war-card.tie .front{box-shadow:0 0 0 3px #ffd166,0 8px 20px rgba(255,209,102,.55);animation:apartShake .45s ease}
.war-calls{display:flex;gap:10px;width:100%;max-width:340px}
.war-call{flex:1;font-size:1.05rem;padding:14px 10px}

/* casino war — draw button + dramatic fail / jackpot fx */
.war-call.war-draw{border:2px solid rgba(255,209,102,.6);color:#ffd166;background:rgba(255,209,102,.08)}
.war-call.war-draw:not(:disabled):hover{background:rgba(255,209,102,.16)}
.war-calls{max-width:380px}
.war-call{padding:14px 6px;font-size:1rem}
.war-card.gone .face{opacity:0;transition:opacity .25s ease .05s}
.fx-flash{position:fixed;inset:0;pointer-events:none;z-index:40;animation:fxFlash .9s ease-out forwards}
.fx-flash.red{background:radial-gradient(circle at 50% 45%,rgba(255,40,40,.75),rgba(140,0,0,.55) 60%,rgba(60,0,0,.85))}
.fx-flash.gold{background:radial-gradient(circle at 50% 45%,rgba(255,236,160,.85),rgba(255,190,60,.5) 55%,rgba(120,80,0,.6))}
@keyframes fxFlash{0%{opacity:0}8%{opacity:1}30%{opacity:.75}100%{opacity:0}}
.fx-shake{animation:fxShake .65s cubic-bezier(.36,.07,.19,.97) both}
@keyframes fxShake{10%,90%{transform:translate3d(-2px,0,0) rotate(-.4deg)}20%,80%{transform:translate3d(5px,0,0) rotate(.6deg)}30%,50%,70%{transform:translate3d(-9px,1px,0) rotate(-1deg)}40%,60%{transform:translate3d(9px,-1px,0) rotate(1deg)}}
.shards{position:absolute;inset:0;pointer-events:none;z-index:7;overflow:visible}
.shards i{position:absolute;display:block;border-radius:2px;background:linear-gradient(135deg,#fdfcf7,#d9d3c4);box-shadow:0 2px 6px rgba(0,0,0,.5);transform:translate(-50%,-50%);animation:shard 1.2s cubic-bezier(.2,.7,.3,1) forwards}
.shards i:nth-child(3n){background:linear-gradient(135deg,#ff8a80,#c62828)}
.shards i:nth-child(4n){background:linear-gradient(135deg,#3a2f57,#2b2340)}
@keyframes shard{0%{opacity:1;transform:translate(-50%,-50%) rotate(0)}100%{opacity:0;transform:translate(calc(-50% + var(--dx)),calc(-50% + var(--dy))) rotate(var(--r))}}
