.table-screen{--frame:16.7ms;--banner-scale:1}.hit-stop,.hit-stop *,.hit-stop :before,.hit-stop :after{transition:none!important;animation-play-state:paused!important}.banner{transform:scale(var(--banner-scale));transform-origin:50%;will-change:transform}.banner-entering{animation:.1s steps(3,end) forwards banner-enter,50ms steps(3,end) .1s banner-shake}@keyframes banner-enter{0%{transform:translateX(-130%) scale(var(--banner-scale))}to{transform:translateX(0) scale(var(--banner-scale))}}@keyframes banner-shake{0%{transform:translate(6px, 0) scale(var(--banner-scale))}50%{transform:translate(-4px, 0) scale(var(--banner-scale))}to{transform:translate(0, 0) scale(var(--banner-scale))}}.banner-held{transform:scale(calc(1 + (var(--banner-scale) - 1) * .35))}.banner-payout{font-family:var(--ui-face);letter-spacing:.08em;color:var(--accent);-webkit-text-stroke:0;font-size:15px;font-weight:700}.badge-flourish{animation:.1s steps(2,end) 2 badge-flourish}@keyframes badge-flourish{0%{transform:scale(1.25)}to{transform:scale(1)}}.speed-lines{pointer-events:none;animation:speed-lines calc(var(--frame) * 4) steps(1, end) 1 forwards;background:repeating-linear-gradient(90deg,#ffffff8c 0 2px,#0000 2px 22px);position:absolute;inset:0 -10%}@keyframes speed-lines{0%{opacity:1}to{opacity:0}}.palette-flash{pointer-events:none;mix-blend-mode:screen;animation:palette-flash var(--frame) steps(1, end) 1 forwards;background:#fff;border-radius:10px;position:absolute;inset:0}@keyframes palette-flash{0%{opacity:.85}to{opacity:0}}.felt-shake{animation:felt-shake calc(var(--frame) * var(--shake-frames,3)) steps(3) 1}@keyframes felt-shake{0%{transform:translate(var(--shake-px,4px), 0)}50%{transform:translate(calc(var(--shake-px,4px) * -.66), 0)}to{transform:translate(0)}}@media (prefers-reduced-motion:reduce){.banner,.banner-entering,.badge-flourish,.speed-lines,.palette-flash,.felt-shake,.card-flip{animation:none!important;transform:none!important}.speed-lines,.palette-flash{display:none}}.roadmap-frame{background:var(--panel-bg);border:1px solid var(--panel-edge);border-radius:4px;padding:10px;container-type:inline-size}.roadmap-panel{--u:calc(100cqw / 38);gap:var(--u);flex-direction:column;display:flex}.road{grid-template-columns:repeat(var(--cols), var(--pitch));grid-template-rows:repeat(6, var(--pitch));background:var(--road-bg);outline:1px solid var(--road-grid);outline-offset:0;grid-auto-flow:row;display:grid}.cell{width:var(--pitch);height:var(--pitch);box-shadow:inset -1px 0 0 var(--road-grid), inset 0 -1px 0 var(--road-grid)}.mark{width:100%;height:100%;display:block}.road-big{--pitch:var(--u)}.road-bead{--pitch:calc(var(--u) * 2)}.road-derived{--pitch:calc(var(--u) / 2)}.lower-band{gap:var(--u);height:calc(var(--u) * 12);display:flex}.derived-stack{width:calc(var(--u) * 15);flex-direction:column;justify-content:space-between;display:flex}.bead-letter{fill:#fff;font-size:52px;font-weight:700}.mark-count{fill:var(--road-green);paint-order:stroke;stroke:var(--road-bg);stroke-width:12px;font-size:46px;font-weight:700}.panel-foot{color:var(--panel-text);flex-wrap:wrap;justify-content:space-between;align-items:center;gap:8px 18px;margin-top:10px;font-size:12px;display:flex}.legend{flex-wrap:wrap;gap:4px 14px;display:flex}.legend-item{white-space:nowrap;align-items:center;gap:5px;display:inline-flex}.legend-item em{color:var(--panel-text-strong);font-style:normal;font-weight:700}.swatch{border-radius:50%;width:11px;height:11px;display:inline-block}.swatch-red{background:var(--road-red)}.swatch-blue{background:var(--road-blue)}.swatch-green{background:var(--road-green)}.swatch-hollow{border:2px solid var(--road-blue)}.swatch-red-dot{background:var(--panel-edge);box-shadow:inset 4px 4px 0 -1px var(--road-red)}.swatch-blue-dot{background:var(--panel-edge);box-shadow:inset -4px -4px 0 -1px var(--road-blue)}.swatch-gold-dot{background:var(--panel-edge);box-shadow:inset 4px 4px 0 -1px var(--road-gold)}.probes{gap:14px;display:flex}.probe{align-items:center;gap:6px;display:inline-flex}.probe-label{letter-spacing:.04em;text-transform:uppercase;color:var(--panel-text);font-size:11px}.probe-banker .probe-label,.probe-dragon .probe-label{color:var(--road-red)}.probe-player .probe-label,.probe-tiger .probe-label{color:var(--road-blue)}.probe-marks{gap:3px;display:inline-flex}.probe-slot{background:var(--road-bg);outline:1px solid var(--road-grid);width:14px;height:14px}.table-screen{--card-w:76px;flex-direction:column;gap:12px;display:flex}.felt{flex-direction:column;align-items:center;gap:14px;min-height:300px;padding:14px 18px 22px;display:flex;position:relative}.felt-meta{color:#ffffff9e;letter-spacing:.06em;justify-content:space-between;width:100%;font-size:13px;display:flex}.shoe-counter{color:#ffffffc7;order:2;font-size:20px;font-weight:700}.shoe-counter-unit{letter-spacing:.06em;color:#ffffff8c;font-size:12px;font-weight:400}.shoe-index{order:1;align-self:center}.felt-idle{flex:1;place-items:center;min-height:200px;display:grid}.felt-idle-text{color:#fff6;letter-spacing:.14em;text-transform:uppercase;font-size:22px}.vs-frame{font-family:var(--display-face);letter-spacing:.02em;justify-content:center;align-items:baseline;gap:44px;font-size:34px;display:flex}.vs-side{align-items:baseline;gap:12px;display:inline-flex}.vs-player{color:#6ba4ff}.vs-banker{color:#ff8b86}.vs-total{font-size:42px}.hands{--shoe-dx:200px;--shoe-dy:-150px;flex-wrap:wrap;justify-content:center;gap:40px;display:flex}.hand{grid-auto-flow:column;grid-template-columns:repeat(var(--hand-slots,3), var(--card-w));min-height:calc(var(--card-w) * 1.5);align-items:start;gap:6px;display:grid}@media (width<=720px){.table-screen{--card-w:54px}.hands{--shoe-dx:110px;--shoe-dy:-90px}}.card{--card-paper:#f6f1e4;--card-radius:calc(var(--card-w) * .0832);--card-rule-inset:calc(var(--card-w) * .045);width:var(--card-w);height:calc(var(--card-w) * 1.5);padding:calc(var(--card-w) * .06);border-radius:var(--card-radius);background:var(--card-paper);flex:none;grid-template-rows:1fr;grid-template-columns:auto 1fr auto;font-weight:700;display:grid;position:relative;overflow:hidden;box-shadow:0 1px 1px #0000006b,0 3px 7px #00000042,0 9px 20px #0000002e}.card-face-up:after{content:"";inset:var(--card-rule-inset);border-radius:calc(var(--card-radius) - var(--card-rule-inset));pointer-events:none;border:1px solid #261e1421;position:absolute}.card-back{padding:0;display:block}.card-red{color:#d0201c}.card-black{color:#16181c}.card-index{line-height:1;font-size:calc(var(--card-w) * .19);flex-direction:column;align-items:center;display:flex}.card-index-tl{grid-area:1/1;align-self:start}.card-index-br{grid-area:1/3;align-self:end;transform:rotate(180deg)}.card-suit{font-size:calc(var(--card-w) * .16)}.card-art{width:100%;height:100%;display:block}.card-face{grid-area:1/2;grid-template-rows:repeat(7,1fr);grid-template-columns:repeat(3,1fr);place-items:center;min-width:0;min-height:0;display:grid}.card-pip{font-size:calc(var(--card-w) * .15);line-height:1}.card-pip-inverted{transform:rotate(180deg)}.card-court{justify-content:center;align-items:center;gap:calc(var(--card-w) * .045);flex-direction:column;grid-area:1/1/-1/-1;min-width:0;display:flex}.card-court-rank{font-size:calc(var(--card-w) * .46);line-height:.78}.card-court-suit{font-size:calc(var(--card-w) * .26);line-height:1}.card-throw{will-change:transform;perspective:900px;flex:none}.throw-toss{animation:throw-toss var(--settle-ms,.52s) 1 both}.throw-flick{animation:throw-flick var(--settle-ms,.24s) 1 both}.throw-float{animation:throw-float var(--settle-ms,.9s) 1 both}@keyframes throw-toss{0%{opacity:0;transform:translate(var(--shoe-dx), var(--shoe-dy)) rotate(-9deg) scale(.94);animation-timing-function:cubic-bezier(.24,.62,.28,1)}16%{opacity:1}74%{animation-timing-function:cubic-bezier(.36,0,.2,1);transform:translate(-5px,4px)rotate(1.4deg)scale(1.015)}to{transform:translate(0)rotate(0)scale(1)}}@keyframes throw-flick{0%{opacity:0;transform:translate(calc(var(--shoe-dx) * .7), calc(var(--shoe-dy) * .6)) rotate(-5deg) scale(.97);animation-timing-function:cubic-bezier(.2,.7,.3,1)}22%{opacity:1}78%{animation-timing-function:cubic-bezier(.4,0,.2,1);transform:translate(-3px,2px)rotate(.8deg)scale(1.008)}to{transform:translate(0)rotate(0)scale(1)}}@keyframes throw-float{0%{opacity:0;transform:translate(calc(var(--shoe-dx) * 1.15), calc(var(--shoe-dy) * 1.1)) rotate(-13deg) scale(.9);animation-timing-function:cubic-bezier(.3,.55,.22,1)}12%{opacity:1}70%{animation-timing-function:cubic-bezier(.33,0,.2,1);transform:translate(-7px,5px)rotate(2deg)scale(1.02)}to{transform:translate(0)rotate(0)scale(1)}}.card-turn{width:var(--card-w);height:calc(var(--card-w) * 1.5);transform-style:preserve-3d;position:relative}.card-turn-side{backface-visibility:hidden;position:absolute;inset:0}.card-turn-rear{transform:rotateY(180deg)}.card-turn-up{animation:card-turn var(--turn-ms,.6s) 1 both}@keyframes card-turn{0%{animation-timing-function:cubic-bezier(.4,0,.55,.6);transform:rotateY(0)translateZ(0)scale(1)}50%{animation-timing-function:cubic-bezier(.45,.4,.25,1);transform:rotateY(90deg)translateZ(10px)scale(1.04)}to{transform:rotateY(180deg)translateZ(0)scale(1)}}@media (prefers-reduced-motion:reduce){.card-throw{animation:none!important}.card-turn-up{transform:rotateY(180deg);animation:none!important}}.vs-total-pending{opacity:.35}.banner{font-family:var(--display-face);letter-spacing:.06em;-webkit-text-stroke:2px #0000008c;paint-order:stroke fill;align-items:center;gap:12px;font-size:40px;display:flex}.banner-player{color:#6ba4ff}.banner-banker,.banner-dragon{color:#ff7d78}.banner-tiger{color:#6ba4ff}.banner-tie{color:#4ade80}.badge{font-family:var(--ui-face);letter-spacing:.1em;background:var(--accent);color:var(--accent-ink);-webkit-text-stroke:0;border-radius:3px;padding:4px 8px;font-size:12px;font-weight:700}.money-bar{background:var(--ui-panel);border:1px solid var(--ui-edge);color:var(--ui-muted);border-radius:5px;justify-content:flex-end;align-items:center;gap:14px;padding:8px 14px;display:flex}.money-balance{color:var(--accent);font-size:16px}.money-bet{color:#63d0e8;font-size:16px}.money-divider{background:var(--ui-edge);width:1px;height:16px}.money-up{color:#4ade80}.money-down{color:#f87171}.money-flat{color:var(--ui-text)}.bust-offer{border:1px solid var(--accent);background:color-mix(in srgb, var(--accent) 10%, var(--ui-bg));border-radius:5px;align-items:center;gap:14px;padding:12px 14px;display:flex}.bet-layout{flex-direction:column;gap:6px;display:flex}.bet-row{grid-template-columns:repeat(var(--spots), 1fr);gap:6px;display:grid}.spot{background:var(--ui-panel);color:#ffffffe0;text-align:center;border:1px solid #ffffff57;border-radius:4px;flex-direction:column;justify-content:center;align-items:center;gap:3px;min-height:74px;padding:10px 8px;display:flex;position:relative}.spot:disabled{cursor:default;opacity:.75}.spot-label{letter-spacing:.05em;font-size:17px;font-weight:700}.spot-player .spot-label{color:#7fb0ff}.spot-banker .spot-label{color:#ff8b86}.spot-payout{color:#ffffffad;font-size:12px}.spot-stake{background:var(--accent);color:var(--accent-ink);border-radius:999px;margin-top:4px;padding:3px 10px;font-size:13px;font-weight:700}.spot-won{border-color:var(--accent);box-shadow:0 0 0 2px var(--accent) inset}.spot-refused{cursor:not-allowed;opacity:.6;border-style:dashed}.chip-rail{background:var(--ui-panel);border:1px solid var(--ui-edge);border-radius:5px;flex-wrap:wrap;align-items:center;gap:16px;padding:10px 14px;display:flex}.chips{gap:10px;display:flex}.chip{color:#fff;background:#4b525c;border:3px dashed #ffffff8c;border-radius:50%;width:46px;height:46px;font-size:13px;font-weight:700}.chip-1{background:#8d949d}.chip-5{background:#b4443f}.chip-10{background:#2f6fd0}.chip-100{background:#55606d}.chip-500{background:#6b4fbe}.chip-1000{background:#c9a227}.chip-selected{outline:2px solid var(--accent);outline-offset:2px;transform:translateY(-3px)}.chip-unaffordable{opacity:.35}.rail-actions{gap:8px;margin-left:auto;display:flex}.rail-button{border:1px solid var(--ui-edge);color:var(--ui-text);background:#232830;border-radius:4px;padding:10px 20px}.rail-button:disabled{opacity:.4;cursor:default}.rail-primary{background:var(--accent);border-color:var(--accent);color:var(--accent-ink);font-weight:700}.felt-note{color:var(--ui-muted);margin:0;font-size:12px}.verify-screen{flex-direction:column;gap:16px;display:flex}.verify-screen h2{color:var(--accent);margin:0;font-size:20px}.verify-screen h3{letter-spacing:.06em;text-transform:uppercase;color:var(--ui-muted);margin:0 0 8px;font-size:14px}.verify-block{background:var(--ui-panel);border:1px solid var(--ui-edge);border-radius:6px;padding:14px}.hash-row{flex-wrap:wrap;align-items:baseline;gap:12px;padding:4px 0;display:flex}.hash-label{min-width:210px;color:var(--ui-muted);font-size:13px}.hash-value{color:var(--ui-text);word-break:break-all;font-family:ui-monospace,SF Mono,Menlo,Consolas,monospace;font-size:13px}.check{margin:10px 0 4px;font-weight:700}.check-ok{color:#4ade80}.check-bad{color:#f87171}.boundary{border:1px solid var(--accent);background:#e8c37a12;border-radius:6px;padding:14px}.boundary h3{color:var(--accent)}.boundary p{margin:6px 0;font-size:13px;line-height:1.5}.history-wrap{border:1px solid var(--ui-edge);border-radius:4px;max-height:420px;overflow:auto}.history{border-collapse:collapse;color:#1b1e22;background:#f7f6f3;width:100%;font-size:13px}.history thead th{text-align:left;background:#e9e7e2;border-bottom:1px solid #cfccc5;padding:8px 10px;font-weight:700;position:sticky;top:0}.history td{border-bottom:1px solid #e2dfd9;padding:7px 10px}.col-round{color:#6b7078;width:64px}.col-win{width:120px;font-weight:700}.col-date{color:#6b7078;width:96px}.win-player,.win-tiger{color:#2f6fd0}.win-banker,.win-dragon{color:#cf2b26}.win-tie,.win-suited-tie{color:#12924c}.win-lucky6{color:#d98600}.cards{letter-spacing:.02em;font-family:ui-monospace,SF Mono,Menlo,Consolas,monospace}.card-text+.card-text{margin-left:6px}.card-text-red{color:#d0201c}.card-text-black{color:#1b1e22}.history-empty{text-align:center;color:#6b7078;padding:18px}.probe-inputs{flex-wrap:wrap;gap:8px;margin-top:8px;display:flex}.probe-input{border:1px solid var(--ui-edge);color:var(--ui-text);background:#0f1216;border-radius:4px;flex:340px;padding:9px 10px;font-family:ui-monospace,SF Mono,Menlo,Consolas,monospace;font-size:13px}.probe-salt{flex:0 180px}.probe-error{color:#f87171;font-size:13px}.probe-result{margin-top:10px;font-size:13px}:root{--road-red:#cf2b26;--road-blue:#1f66c4;--road-green:#12924c;--road-gold:#e0a92b;--road-bg:#eceae4;--road-grid:#c3c0b8;--panel-bg:#14171c;--panel-edge:#2b3038;--panel-text:#9aa3ad;--panel-text-strong:#eef1f4;--ui-bg:#0d0f12;--ui-panel:#171b21;--ui-edge:#262c35;--ui-text:#e6e9ed;--ui-muted:#8a929c;--accent:#b03a2e;--accent-ink:#f6f1e4;--ui-face:system-ui, -apple-system, "Segoe UI", Roboto, sans-serif;--display-face:"Arial Black", "Helvetica Neue", Impact, system-ui, sans-serif;--cjk-face:"Noto Sans CJK SC", "Noto Sans SC", "Microsoft YaHei", system-ui, sans-serif}.theme-macau{--accent:#b03a2e;--accent-ink:#f6f1e4}.theme-dragontiger{--accent:#f0cd72;--accent-ink:#16181c}*{box-sizing:border-box}body{background:var(--ui-bg);color:var(--ui-text);font-family:var(--ui-face);-webkit-font-smoothing:antialiased;margin:0;font-size:14px}button{font-family:inherit;font-size:inherit;cursor:pointer}.app{max-width:1180px;margin:0 auto;padding:12px}.app-head{flex-wrap:wrap;align-items:center;gap:16px;padding:8px 4px 12px;display:flex}.app-title{letter-spacing:.04em;color:var(--accent);font-size:18px;font-weight:700}.app-balance{color:var(--ui-muted);margin-left:auto}.app-balance b{color:var(--accent);font-size:16px}.view-toggle{border:1px solid var(--ui-edge);border-radius:4px;display:flex;overflow:hidden}.view-toggle button{background:var(--ui-panel);color:var(--ui-muted);border:0;padding:6px 14px}.view-toggle .view-active{background:var(--accent);color:var(--accent-ink);font-weight:700}.table-strip{gap:8px;padding:8px 0 14px;display:flex}.strip-button{border:1px solid var(--ui-edge);color:#8d949d;letter-spacing:.08em;text-transform:uppercase;background:linear-gradient(#20242b,#171a1f);border-radius:5px;flex:1;padding:12px 8px;font-size:15px}.strip-button.strip-active{border-color:var(--accent);color:var(--accent);box-shadow:inset 0 0 0 1px #ffffff14}.tempo-picker{gap:6px;display:flex}.tempo-button{background:var(--ui-panel);border:1px solid var(--ui-edge);color:var(--ui-muted);border-radius:4px;padding:5px 12px}.tempo-button.tempo-active{border-color:var(--accent);color:var(--accent)}.tempo-fixed{color:var(--ui-muted);font-size:13px}.app-main{display:block}.muted{color:var(--ui-muted);font-size:12px}
