:root{--bg-base:#0d1117;--bg-surface:#121922;--bg-surface-2:#161f2a;--line:#243042;--line-strong:#33455d;--text-main:#e7edf5;--text-muted:#95a4ba;--emerald:#2fd67a;--gold:#e3b75b;--danger:#ff6a6a;--tg-viewport-height:100dvh;--radius-sm:10px;--radius-md:14px;--radius-lg:18px;--font-native:-apple-system, BlinkMacSystemFont, "SF Pro Text", "SF Pro Display", "Segoe UI", Roboto, "Noto Sans", "Helvetica Neue", Arial, sans-serif}*{box-sizing:border-box}html,body,#root{width:100%;height:100%;margin:0;padding:0}body{background:radial-gradient(120% 90% at 10% -20%, #2fd67a1f, transparent 45%), radial-gradient(120% 90% at 100% -20%, #e3b75b17, transparent 40%), var(--bg-base);color:var(--text-main);font-family:var(--font-native);-webkit-font-smoothing:antialiased;text-rendering:optimizelegibility;overflow:hidden}button,input{font-family:var(--font-native)}.flex-center{justify-content:center;align-items:center;display:inline-flex}.app-shell{width:min(100%,560px);height:var(--tg-viewport-height);background:color-mix(in srgb, var(--bg-base) 92%, #0c141f 8%);border-left:1px solid color-mix(in srgb, var(--line) 70%, transparent);border-right:1px solid color-mix(in srgb, var(--line) 70%, transparent);grid-template-rows:auto minmax(0,1fr) auto;margin:0 auto;display:grid}.app-content{min-height:0;padding:10px 12px;overflow:auto}.hub{flex-direction:column;gap:12px;min-height:100%;display:flex}.hub-head{text-align:center;padding:8px 6px 2px}.hub-kicker{letter-spacing:.14em;text-transform:uppercase;color:color-mix(in srgb, var(--text-muted) 88%, #fff 12%);margin:0;font-size:11px;font-weight:700}.hub-logo{letter-spacing:.04em;color:var(--text-main);margin:6px 0 0;font-size:30px;font-weight:800}.hub-subtitle{color:var(--text-muted);margin:6px 0 0;font-size:13px}.hub-grid{grid-template-columns:repeat(2,minmax(0,1fr));gap:10px;display:grid}.gc{border:1px solid var(--line-strong);background:linear-gradient(180deg, var(--bg-surface), var(--bg-surface-2));border-radius:var(--radius-lg);text-align:left;cursor:pointer;flex-direction:column;align-items:center;gap:8px;padding:10px;transition:border-color .18s cubic-bezier(.22,1,.36,1),transform .18s cubic-bezier(.22,1,.36,1),background-color .18s cubic-bezier(.22,1,.36,1);display:flex;overflow:hidden}.gc:hover{border-color:color-mix(in srgb, var(--emerald) 55%, var(--line-strong));transform:translateY(-1px)}.gc:active{transform:translateY(0)scale(.985)}.gc-icon-wrap{aspect-ratio:4/3;border:1px solid var(--line);background:#0f1721;border-radius:12px;justify-content:center;align-items:center;width:100%;height:auto;display:flex;overflow:hidden}.gc-img{object-fit:cover;opacity:1;width:100%;height:100%;display:block}.gc-meta{border:1px solid var(--line-strong);color:var(--text-muted);letter-spacing:.08em;text-transform:uppercase;background:#0f1620;border-radius:999px;align-self:start;padding:4px 8px;font-size:10px;font-weight:700}.gc-name-wrap{min-width:0}.gc-name{color:var(--text-main);text-align:center;font-size:15px;font-weight:700;line-height:1.2;display:block}.gc-sub{color:var(--text-muted);margin-top:4px;font-size:12px;line-height:1.35;display:block}.gc-card-emerald{border-color:color-mix(in srgb, var(--line-strong) 70%, var(--emerald) 30%)}.gc-card-ocean{border-color:color-mix(in srgb, var(--line-strong) 80%, #5ea3ff 20%)}.gc-card-gold{border-color:color-mix(in srgb, var(--line-strong) 70%, var(--gold) 30%)}.gc-card-steel{border-color:color-mix(in srgb, var(--line-strong) 80%, #8aa0ba 20%)}.profile-bar{z-index:40;padding:calc(env(safe-area-inset-top,0px) + 10px) 12px 10px;border-bottom:1px solid var(--line);background:#0e141ceb;justify-content:space-between;align-items:center;gap:10px;display:flex;position:sticky;top:0}.profile-bar-left,.profile-bar-right{align-items:center;gap:8px;min-width:0;display:flex}.profile-bar-icon{border:1px solid var(--line-strong);width:24px;height:24px;color:var(--emerald);border-radius:999px;justify-content:center;align-items:center;display:inline-flex}.profile-bar-name{white-space:nowrap;text-overflow:ellipsis;font-size:13px;font-weight:600;overflow:hidden}.profile-bar-stat{flex-direction:column;align-items:flex-end;line-height:1.15;display:flex}.profile-bar-stat-label{color:var(--text-muted);text-transform:uppercase;font-size:10px}.profile-bar-stat-value{font-size:13px;font-weight:700}.balance-value{color:var(--emerald)}.wl-value{color:color-mix(in srgb, var(--text-main) 90%, #fff 10%)}.profile-bar-divider{background:var(--line-strong);width:1px;height:22px}.profile-bar-loading{color:var(--text-muted);font-size:12px}.bottom-nav{padding:8px 10px calc(env(safe-area-inset-bottom,0px) + 10px);border-top:1px solid var(--line);background:#0e141cf2;grid-template-columns:repeat(3,minmax(0,1fr));gap:8px;display:grid}.nav-tab{border:1px solid var(--line);background:var(--bg-surface);color:var(--text-muted);cursor:pointer;border-radius:12px;flex-direction:column;justify-content:center;align-items:center;gap:2px;min-height:46px;transition:border-color .16s,color .16s;display:inline-flex}.nav-tab-active{border-color:color-mix(in srgb, var(--emerald) 45%, var(--line-strong));color:var(--text-main)}.nav-tab-label{font-size:11px;font-weight:600}.lobby-page,.stats-page,.pvp-match-wrap{flex-direction:column;gap:12px;min-height:100%;padding-bottom:10px;display:flex}.lobby-section{flex-direction:column;gap:8px;display:flex}.lobby-section-header{align-items:center;gap:8px;font-size:16px;font-weight:700;display:flex}.lobby-count{border:1px solid var(--line-strong);color:var(--text-muted);border-radius:999px;margin-left:auto;padding:2px 8px;font-size:11px}.create-card,.duel-card,.stats-card,.lb-row,.pvp-match-head,.game-mode-block{background:linear-gradient(180deg, var(--bg-surface), var(--bg-surface-2));border:1px solid var(--line);border-radius:var(--radius-md)}.create-card{flex-direction:column;gap:12px;padding:12px;display:flex}.create-row{flex-direction:column;gap:8px;display:flex}.create-label{color:var(--text-muted);text-transform:uppercase;letter-spacing:.06em;font-size:11px;font-weight:600}.pill-group{flex-wrap:wrap;gap:8px;display:flex}.pill,.mode-button,.btn-create,.btn-join{border:1px solid var(--line-strong);color:var(--text-main);cursor:pointer;background:#0f1721;border-radius:10px;font-weight:600}.pill{padding:8px 12px;font-size:13px}.pill-active{border-color:color-mix(in srgb, var(--emerald) 45%, var(--line-strong));color:#f0fff7}.bet-input{border:1px solid var(--line-strong);width:100%;min-height:38px;color:var(--text-main);background:#0e151f;border-radius:10px;outline:none;padding:0 12px}.bet-input:focus{border-color:color-mix(in srgb, var(--emerald) 50%, var(--line-strong))}.btn-create{justify-content:center;align-items:center;gap:6px;min-height:42px;padding:0 12px;display:inline-flex}.btn-create:disabled,.btn-join:disabled,.mode-button:disabled,.pill:disabled{opacity:.55;cursor:not-allowed}.duel-list{flex-direction:column;gap:8px;display:flex}.duel-card{justify-content:space-between;align-items:center;gap:10px;padding:10px;display:flex}.duel-card-left{flex-direction:column;gap:6px;min-width:0;display:flex}.duel-card-right{flex-direction:column;align-items:flex-end;gap:6px;display:flex}.duel-card-creator{align-items:center;font-size:14px;font-weight:600;display:flex}.duel-card-meta{color:var(--text-muted);flex-wrap:wrap;align-items:center;gap:6px;font-size:12px;display:flex}.duel-mode-badge{border:1px solid var(--line-strong);border-radius:999px;padding:2px 8px;font-size:11px}.duel-mode-glow{border-color:color-mix(in srgb, var(--emerald) 35%, var(--line-strong))}.duel-bet{color:var(--gold);font-weight:700}.duel-own-badge{color:var(--gold);font-size:10px}.btn-join{padding:7px 11px;font-size:12px}.btn-cancel{border-color:color-mix(in srgb, var(--danger) 60%, var(--line-strong))!important;color:#ffd6d6!important}.lobby-empty{color:var(--text-muted);text-align:center;padding:14px 0}.lobby-error{color:#ffb8b8}.lobby-toast{z-index:100;border:1px solid var(--line-strong);background:#101925;border-radius:999px;padding:8px 14px;font-size:12px;position:fixed;top:12px;left:50%;transform:translate(-50%)}.toast-success{color:#bff7d9;border-color:color-mix(in srgb, var(--emerald) 50%, var(--line-strong))}.toast-error{color:#ffd0d0;border-color:color-mix(in srgb, var(--danger) 50%, var(--line-strong))}.pvp-match-wrap{min-height:100%}.pvp-match-wrap.mines-game{grid-template-rows:auto minmax(0,1fr) auto;display:grid;overflow:hidden}.pvp-match-wrap.mines-game .game-mode-block{grid-template-rows:auto minmax(0,1fr) auto;height:100%;display:grid;overflow:hidden}.pvp-match-head{flex-direction:column;gap:4px;padding:12px;display:flex}.pvp-match-title{margin:0;font-size:18px}.pvp-match-meta{color:var(--text-muted);margin:0;font-size:13px}.game-mode-block{flex-direction:column;gap:10px;min-height:0;padding:10px;display:flex}.mode-header h3{margin:0;font-size:16px}.mode-header p{color:var(--text-muted);margin:4px 0 0;font-size:13px}.mode-header.compact{flex-direction:column;gap:2px;display:flex}.mode-action-row{flex-wrap:wrap;align-items:center;gap:8px;display:flex}.mode-button{min-height:38px;padding:0 12px}.mode-button-small{min-height:34px;font-size:12px}.mode-button-accent{border-color:color-mix(in srgb, var(--emerald) 55%, var(--line-strong))}.mode-button-gold{border-color:color-mix(in srgb, var(--gold) 55%, var(--line-strong))}.mode-button-danger{border-color:color-mix(in srgb, var(--danger) 60%, var(--line-strong));color:#ffd8d8}.mode-button.is-active{border-color:color-mix(in srgb, var(--emerald) 65%, var(--line-strong))}.mode-hint,.mode-summary{color:var(--text-muted);font-size:13px}.mode-result{font-size:14px;font-weight:700}.result-win{color:#bff7d9}.result-lose{color:#ffd0d0}.result-draw{color:#ffe8be}.mode-board{border:1px solid var(--line);background:#0f1721;border-radius:12px;min-width:0;padding:10px}.mode-board-head{color:var(--text-muted);justify-content:space-between;align-items:center;margin-bottom:8px;font-size:12px;display:flex}.mode-board-score{color:var(--text-main);font-weight:700}.mines-dual-layout{z-index:2;flex:1;grid-template-columns:repeat(2,minmax(0,1fr));align-items:stretch;gap:10px;min-height:0;display:grid;position:relative}.mode-board-mines{grid-template-rows:auto minmax(0,1fr);min-height:0;display:grid}.mines-grid{z-index:2;pointer-events:auto;touch-action:manipulation;grid-template-columns:repeat(5,minmax(0,1fr));align-content:center;gap:6px;width:100%;max-width:440px;margin:0 auto;display:grid;position:relative}.mines-cell{aspect-ratio:1;border:1px solid var(--line-strong);touch-action:manipulation;pointer-events:auto;background:#0c141d;border-radius:10px;justify-content:center;align-items:center;min-width:0;transition:transform .18s cubic-bezier(.22,1,.36,1),border-color .18s cubic-bezier(.22,1,.36,1),background-color .18s cubic-bezier(.22,1,.36,1);display:inline-flex}.mines-cell.is-interactive:hover{border-color:color-mix(in srgb, var(--emerald) 50%, var(--line-strong));transform:translateY(-1px)}.mines-cell.is-picked{animation:.2s cubic-bezier(.18,.95,.22,1) mineReveal}.mines-cell.is-safe{background:color-mix(in srgb, var(--emerald) 18%, #101922)}.mines-cell.is-mine{background:color-mix(in srgb, var(--danger) 20%, #101922)}.mode-cell-icon{width:66%;height:66%}@keyframes mineReveal{0%{opacity:.6;transform:scale(.82)}to{opacity:1;transform:scale(1)}}.rps-arena{grid-template-columns:1fr auto 1fr;align-items:stretch;gap:8px;display:grid}.rps-side{border:1px solid var(--line);background:#0f1721;border-radius:10px;flex-direction:column;justify-content:center;align-items:center;gap:6px;min-height:120px;padding:10px;display:flex}.rps-label{color:var(--text-muted);font-size:12px}.rps-hand{color:var(--text-main);border:1px solid color-mix(in srgb, var(--line) 78%, #7f97b2 22%);background:linear-gradient(#111c28,#0d1723);border-radius:12px;justify-content:center;align-items:center;min-width:80px;min-height:80px;display:inline-flex}.rps-center{border:1px solid var(--line);border-radius:10px;justify-content:center;align-items:center;min-width:72px;font-size:13px;font-weight:700;display:inline-flex}.rps-pick-row{justify-content:center}.rps-option{justify-content:center;align-items:center;gap:6px;display:inline-flex}.rps-emoji-token{border:1px solid color-mix(in srgb, var(--line) 70%, #86a3bf 30%);background:linear-gradient(#132334,#0e1b2a);border-radius:999px;justify-content:center;align-items:center;line-height:1;display:inline-flex}.bj-table-grid{grid-template-columns:repeat(2,minmax(0,1fr));gap:8px;display:grid}.bj-hand-block{border:1px solid var(--line);background:#0f1721;border-radius:10px;padding:10px}.bj-hand-top{color:var(--text-muted);justify-content:space-between;margin-bottom:8px;font-size:12px;display:flex}.bj-hand-cards{flex-wrap:wrap;gap:6px;min-height:72px;display:flex}.bj-card{color:#0f1821;background:linear-gradient(#f7fafc,#e9eff5);border:1px solid #cfd8e5;border-radius:8px;flex-direction:column;justify-content:center;align-items:center;width:44px;height:62px;font-weight:700;line-height:1.05;display:flex}.bj-card.is-red{color:#8f1d1d}.bj-card-back{background:radial-gradient(120% 90% at 0 0,#2fd67a38,#0000 45%),linear-gradient(135deg,#1c2b3a,#101721);border-color:#38516e}.bj-rank{font-size:14px}.bj-suit{font-size:13px}.bj-card-empty{opacity:.75}.naval-layout{flex-direction:column;gap:10px;display:flex}.naval-grid{grid-template-columns:repeat(10,minmax(0,1fr));gap:4px;display:grid}.naval-cell{aspect-ratio:1;border:1px solid var(--line);min-width:0;color:var(--text-main);background:linear-gradient(#0e1b2a,#0b1521);border-radius:6px;justify-content:center;align-items:center;padding:0;display:inline-flex}.naval-cell.is-interactive{cursor:crosshair}.naval-cell.is-interactive:hover{border-color:color-mix(in srgb, var(--emerald) 45%, var(--line-strong))}.naval-cell.is-ship{border-color:color-mix(in srgb, #88bfff 40%, var(--line));background:#213753}.naval-cell.is-hit{background:color-mix(in srgb, var(--danger) 24%, #101923);border-color:color-mix(in srgb, var(--danger) 60%, var(--line))}.naval-cell.is-miss{border-color:color-mix(in srgb, #8aa0ba 45%, var(--line));background:#222d3a}.naval-dot{color:#9ab0c7;font-size:15px;line-height:1}.keno-stats{color:var(--text-muted);justify-content:space-between;font-size:12px;display:flex}.keno-grid{grid-template-columns:repeat(8,minmax(0,1fr));gap:6px;display:grid}.keno-cell{border:1px solid var(--line);min-height:34px;color:var(--text-main);touch-action:manipulation;background:#0d151f;border-radius:8px;font-size:12px;font-weight:600;transition:transform .16s cubic-bezier(.22,1,.36,1),border-color .16s cubic-bezier(.22,1,.36,1),background-color .16s cubic-bezier(.22,1,.36,1)}.keno-cell.is-picked{border-color:color-mix(in srgb, var(--emerald) 55%, var(--line-strong));animation:.2s cubic-bezier(.22,1,.36,1) kenoPick}.keno-cell.is-drawn{border-color:color-mix(in srgb, var(--gold) 65%, var(--line-strong))}.keno-cell.is-my-hit{background:color-mix(in srgb, var(--emerald) 20%, #111b24)}.keno-cell.is-op-hit{background:color-mix(in srgb, var(--danger) 20%, #111b24)}.keno-cell:active{transform:scale(.95)}@keyframes kenoPick{0%{opacity:.65;transform:scale(.86)}to{opacity:1;transform:scale(1)}}.crash-meter{border:1px solid var(--line);background:#0f1721;border-radius:10px;flex-direction:column;justify-content:center;align-items:center;gap:4px;min-height:72px;display:flex}.crash-multi{color:var(--emerald);font-size:26px}.crash-multi.is-final{color:var(--gold)}.crash-point{color:var(--text-muted);font-size:12px}.crash-race-track{border:1px solid var(--line);background:linear-gradient(#101a26,#0b141f);border-radius:10px;min-height:228px;padding:10px;position:relative;overflow:hidden}.crash-track-line{border:1px dashed color-mix(in srgb, var(--line-strong) 70%, #7da8d5 30%);background:linear-gradient(#141f2cbf,#0b131dbf),repeating-linear-gradient(#0000001f 0 8px,#ffffff05 8px 16px);border-radius:999px;width:72px;position:absolute;top:12px;bottom:12px;left:50%;transform:translate(-50%)}.crash-finish-flag{color:var(--gold);z-index:2;position:absolute;top:8px;left:50%;transform:translate(-50%)}.crash-car{bottom:calc(18px + var(--progress,0%));border:1px solid color-mix(in srgb, var(--line-strong) 70%, #5ea3ff 30%);z-index:3;background:linear-gradient(#152232,#0f1a28);border-radius:10px;justify-content:center;align-items:center;width:30px;height:30px;transition:bottom .18s cubic-bezier(.22,1,.36,1),border-color .18s cubic-bezier(.22,1,.36,1),transform .18s cubic-bezier(.22,1,.36,1);display:inline-flex;position:absolute}.crash-car-me{color:#7dd5b7;left:calc(50% - 34px)}.crash-car-opponent{color:#95b8ff;left:calc(50% + 4px)}.crash-car.is-bust{border-color:color-mix(in srgb, var(--danger) 60%, var(--line-strong));color:#ff9ea0;transform:rotate(-6deg)}.result-modal-backdrop{z-index:120;background:#070a10ad;justify-content:center;align-items:center;padding:18px;display:flex;position:fixed;inset:0}.result-modal-card{border:1px solid var(--line-strong);background:linear-gradient(180deg, var(--bg-surface), var(--bg-surface-2));text-align:center;border-radius:14px;flex-direction:column;gap:8px;width:min(92vw,360px);padding:16px;display:flex}.result-modal-title{margin:0;font-size:24px;line-height:1.1}.result-modal-mode{color:var(--text-muted);margin:0;font-size:13px}.result-modal-summary{color:color-mix(in srgb, var(--text-main) 90%, #fff 10%);margin:0;font-size:13px}.crash-status-grid{grid-template-columns:repeat(2,minmax(0,1fr));gap:8px;display:grid}.crash-status-card{border:1px solid var(--line);background:#0f1721;border-radius:10px;padding:10px}.crash-status-card h4{margin:0;font-size:13px}.crash-status-card p{color:var(--text-muted);margin:6px 0 0;font-size:12px}.crash-status-card strong{margin-top:6px;font-size:14px;display:block}.stats-tabs{gap:8px;display:flex}.stats-tab{border:1px solid var(--line);min-height:40px;color:var(--text-muted);background:#0f1721;border-radius:10px;flex:1;font-weight:600}.stats-tab-active{color:var(--text-main);border-color:color-mix(in srgb, var(--emerald) 45%, var(--line-strong))}.stats-card{flex-direction:column;gap:14px;padding:12px;display:flex}.stats-highlight-row,.stat-row,.lb-row{justify-content:space-between;align-items:center;display:flex}.stats-highlight{flex-direction:column;align-items:center;gap:4px;display:flex}.sh-value{font-size:22px;font-weight:700}.sh-label{color:var(--text-muted);text-transform:uppercase;letter-spacing:.06em;font-size:11px}.win-color{color:var(--emerald)}.loss-color{color:#ff9d9d}.winrate-bar-wrap{border:1px solid var(--line);background:#0f1721;border-radius:999px;height:18px;position:relative;overflow:hidden}.winrate-bar-fill{background:linear-gradient(90deg, color-mix(in srgb, var(--emerald) 80%, #6db7ff 20%), var(--gold));height:100%}.winrate-bar-label{color:#0f1721;justify-content:center;align-items:center;font-size:11px;font-weight:700;display:flex;position:absolute;inset:0}.stats-rows{flex-direction:column;gap:8px;display:flex}.stat-row{border-bottom:1px solid var(--line);padding-bottom:8px}.stat-row:last-child{border-bottom:none;padding-bottom:0}.stat-row-label{color:var(--text-muted);font-size:13px}.stat-row-value{font-size:14px;font-weight:700}.stat-accent{color:var(--gold)}.leaderboard{flex-direction:column;gap:8px;display:flex}.lb-row{border:1px solid var(--line);background:linear-gradient(180deg, var(--bg-surface), var(--bg-surface-2));border-radius:12px;padding:10px}.lb-top{border-color:color-mix(in srgb, var(--gold) 45%, var(--line-strong))}.medal{border:1px solid var(--line-strong);border-radius:999px;justify-content:center;align-items:center;width:28px;height:28px;font-size:12px;font-weight:700;display:inline-flex}.medal-gold{color:#302000;background:color-mix(in srgb, var(--gold) 92%, #fff4cf 8%)}.medal-silver{color:#151d27;background:#cad6e5}.medal-bronze{color:#2f1a0a;background:#d49a70}.medal-plain{color:var(--text-muted)}.lb-name{text-overflow:ellipsis;white-space:nowrap;flex:1;margin-left:8px;font-size:14px;font-weight:600;overflow:hidden}.lb-wins{color:var(--emerald);font-size:13px;font-weight:600}.stats-loading,.stats-error{text-align:center;color:var(--text-muted);padding:20px 0}.stats-error{color:#fcc}.duel-meta-sep{opacity:.45}@media (width<=560px){.app-shell{border-left:none;border-right:none;width:100%}}@media (width<=480px){.hub-grid{grid-template-columns:repeat(2,minmax(0,1fr))}.mines-dual-layout,.bj-table-grid,.crash-status-grid,.rps-arena{grid-template-columns:1fr}.rps-center{min-height:42px}.keno-grid{grid-template-columns:repeat(5,minmax(0,1fr))}}@media (prefers-reduced-motion:reduce){*,:before,:after{transition:none!important;animation:none!important}}
