:root{color-scheme:dark;font-family:ui-sans-serif,system-ui,-apple-system,Segoe UI,sans-serif;font-size:15px;--bg-0: #05070e;--fg-0: #e7eef8;--fg-1: #9fb0cc;--x: #ff5d6c;--x-2: #c0303f;--o: #4aa3ff;--o-2: #1e6fd0;--good: #54e09a;--bad: #ff6b7a;--warn: #ffce6b;--glass-bg: rgba(10, 16, 28, .62);--glass-border: rgba(255, 255, 255, .14)}*{box-sizing:border-box}html,body,#root{margin:0;padding:0;height:100%;background:var(--bg-0);color:var(--fg-0)}#root{min-height:100vh}.stage-root{position:relative;width:100vw;height:100vh;overflow:hidden}.board-stage{position:absolute;inset:0}.board3d{width:100%;height:100%}.board3d canvas{display:block}.board-stage.inactive3d .board3d canvas{filter:grayscale(.35) brightness(.9);transition:filter .25s ease}.glass{background:var(--glass-bg);-webkit-backdrop-filter:blur(12px) saturate(1.15);backdrop-filter:blur(12px) saturate(1.15);border:1px solid var(--glass-border);border-radius:16px;box-shadow:0 18px 60px #0000008c,inset 0 1px #ffffff0f}button{font:inherit;cursor:pointer;border-radius:12px;border:1px solid var(--glass-border);background:#ffffff0f;color:var(--fg-0);padding:10px 16px;transition:transform .05s ease,filter .15s ease,background .15s ease,border-color .15s ease}button:hover{filter:brightness(1.12)}button:active{transform:translateY(1px)}button:disabled{opacity:.4;cursor:not-allowed;filter:none}.btn-x{background:linear-gradient(160deg,var(--x),var(--x-2));border-color:#ff788280;box-shadow:0 6px 22px #c0303f73;color:#fff;font-weight:600}.btn-o{background:linear-gradient(160deg,var(--o),var(--o-2));border-color:#5aa0ff80;box-shadow:0 6px 22px #1e6fd073;color:#fff;font-weight:600}.btn-glass{background:#ffffff12}.btn-warn{background:#ffce6b24;border-color:#ffce6b66;color:var(--warn)}.btn-block{width:100%}.btn-sm{padding:6px 12px;font-size:13px;border-radius:9px}input[type=text]{background:#00000059;color:var(--fg-0);border:1px solid var(--glass-border);border-radius:10px;padding:10px 12px;font-family:ui-monospace,SF Mono,monospace;font-size:13px;width:100%}input[type=text]::placeholder{color:#5d6b86}.row{display:flex;gap:10px;align-items:center}.col{display:flex;flex-direction:column;gap:10px}.spread{display:flex;gap:12px;justify-content:space-between;align-items:center}.muted{color:var(--fg-1);font-size:13px;line-height:1.5}.term{position:relative;color:var(--fg-0);cursor:help;text-decoration:underline dotted;text-decoration-thickness:1px;text-underline-offset:3px}.term:hover{color:#fff}.tip{position:absolute;left:50%;bottom:calc(100% + 8px);transform:translate(-50%);width:240px;max-width:70vw;padding:9px 12px;border-radius:10px;background:#060a14f7;border:1px solid var(--glass-border);-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);box-shadow:0 12px 32px #0000008c;font-size:12px;line-height:1.45;font-weight:400;color:var(--fg-0);text-align:left;text-decoration:none;opacity:0;visibility:hidden;transition:opacity .15s ease,visibility .15s ease;z-index:60}.term:hover .tip{opacity:1;visibility:visible}.error{color:var(--bad);font-size:13px;margin-top:10px}.landing{position:absolute;inset:0;display:grid;place-items:center;padding:20px;pointer-events:none;z-index:10}.landing-card{pointer-events:auto;width:min(450px,92vw);padding:28px 28px 24px}.brand{font-size:12px;letter-spacing:3px;text-transform:uppercase;color:var(--o);margin:0;font-weight:700}.brand .x{color:var(--x)}.title{font-size:26px;font-weight:800;margin:4px 0 6px}.choices{display:grid;gap:12px;margin-top:22px}.choices button{padding:14px 16px;font-size:15px;font-weight:600}.choices .btn-sm{padding:9px 14px;font-size:13px;font-weight:500}.wallet-status{text-align:center;font-size:12px;color:var(--fg-1);padding:4px 0}.link-btn{background:none;border:none;color:var(--o);padding:0;font-size:12px;text-decoration:underline;cursor:pointer}.link-btn:hover{filter:brightness(1.2)}.repo-note{margin:20px 0 0;padding-top:14px;border-top:1px solid var(--glass-border);text-align:center;font-size:12px;color:var(--fg-1);line-height:1.5}.repo-note a{color:var(--o);text-decoration:none}.repo-note a:hover{text-decoration:underline}.field{display:flex;gap:10px;margin-top:16px;align-items:center}.field>input[type=text]{flex:1;min-width:0}.field>.seg,.field>button{flex-shrink:0}.seg button{min-width:38px}.back-link{background:none;border:none;color:var(--fg-1);padding:8px 0;align-self:flex-start}.back-link:hover{color:var(--fg-0);filter:none;text-decoration:underline}.seg{display:inline-flex;border:1px solid var(--glass-border);border-radius:10px;overflow:hidden}.seg button{border:0;border-radius:0;background:transparent;padding:8px 16px;font-weight:600}.seg button.active.x{background:linear-gradient(160deg,var(--x),var(--x-2));color:#fff}.seg button.active.o{background:linear-gradient(160deg,var(--o),var(--o-2));color:#fff}.session-list{display:flex;flex-direction:column;gap:10px;margin-top:16px;max-height:320px;overflow-y:auto}.session{display:flex;align-items:center;gap:12px;padding:11px 13px;border-radius:12px;border:1px solid var(--glass-border);background:#ffffff0a}.session .meta{flex:1;min-width:0}.session code{font-family:ui-monospace,monospace;font-size:12px;color:var(--fg-0)}.session .sub{font-size:11px;color:var(--fg-1);margin-top:3px}.role-chip{font-size:10px;font-weight:700;padding:2px 8px;border-radius:999px;letter-spacing:.5px}.role-chip.x{background:#ff5d6c2e;color:var(--x);border:1px solid rgba(255,93,108,.4)}.role-chip.o{background:#4aa3ff2e;color:var(--o);border:1px solid rgba(74,163,255,.4)}.session-del{color:var(--fg-1);padding:6px 9px}.session-del:hover{color:var(--bad);border-color:#ff6b7a80;filter:none}.loading-overlay{position:absolute;inset:0;z-index:40;display:grid;place-items:center;background:#000000d1;-webkit-backdrop-filter:blur(4px);backdrop-filter:blur(4px)}.loading-card{padding:26px 32px;text-align:center;display:flex;flex-direction:column;align-items:center;gap:14px}.spinner{width:34px;height:34px;border-radius:50%;border:3px solid rgba(255,255,255,.15);border-top-color:var(--o);animation:spin .8s linear infinite}@keyframes spin{to{transform:rotate(360deg)}}.hamburger{position:absolute;top:16px;left:16px;z-index:20;width:44px;height:44px;display:grid;place-items:center;font-size:18px;padding:0}.gi-stack{position:absolute;top:62px;right:16px;z-index:18;display:flex;flex-direction:column;gap:10px;width:min(248px,72vw)}.game-info{width:100%;padding:10px 12px;display:flex;flex-direction:column;gap:7px}.game-info .gi-head{display:flex;align-items:center;justify-content:space-between;gap:8px}.gi-label{font-size:10px;font-weight:700;letter-spacing:2px;text-transform:uppercase;color:var(--fg-1)}.vsai-inline{font-size:10px;font-weight:700;letter-spacing:1.5px;text-transform:uppercase;color:var(--fg-1)}.vsai-inline .accent{color:var(--o)}.gi-id{display:flex;align-items:center;justify-content:space-between;gap:8px;width:100%;padding:6px 10px;border-radius:9px;background:#ffffff0d}.gi-id .mono{font-family:ui-monospace,monospace;font-size:12px;color:var(--fg-0)}.gi-id .gi-copy{font-size:10px;font-weight:600;color:var(--o);text-transform:uppercase;letter-spacing:.5px;flex-shrink:0}.gi-invite{margin:0;font-size:11px;line-height:1.5;color:var(--fg-1)}.gi-invite strong{color:var(--fg-0)}.win-token-panel{position:relative;display:flex;align-items:center;gap:8px;padding:9px 12px;cursor:help;outline:none}.win-token-icon{font-size:15px;line-height:1}.win-token-label{flex:1;font-size:10px;font-weight:700;letter-spacing:1.5px;text-transform:uppercase;color:#ffd76a}.win-token-count{font-family:ui-monospace,monospace;font-size:15px;font-weight:800;color:#ffd76a;text-shadow:0 0 10px rgba(255,200,60,.45)}.win-token-panel .tip{left:0;transform:none;top:calc(100% + 8px);bottom:auto}.win-token-panel:hover .tip,.win-token-panel:focus .tip,.win-token-panel:focus-visible .tip{opacity:1;visibility:visible}.drawer-backdrop{position:absolute;inset:0;z-index:30;background:#0006;animation:fade-in .18s ease}@keyframes fade-in{0%{opacity:0}to{opacity:1}}.drawer{position:absolute;top:0;left:0;height:100%;width:min(380px,92vw);z-index:31;border-radius:0 18px 18px 0;padding:16px 18px 24px;overflow-y:auto;animation:drawer-in .18s ease}@keyframes drawer-in{0%{transform:translate(-100%)}to{transform:none}}.drawer-head{display:flex;align-items:center;justify-content:space-between;margin-bottom:12px}.drawer-head h2{font-size:13px;letter-spacing:2px;text-transform:uppercase;color:var(--o);margin:0}.section-title{font-size:11px;letter-spacing:1.4px;text-transform:uppercase;color:var(--fg-1);margin:20px 0 9px}.board-overlay{position:absolute;left:0;right:0;display:flex;flex-direction:column;align-items:center;gap:10px;pointer-events:none;z-index:15}.board-overlay.top{top:18px;padding:0 70px}.board-overlay.bottom{bottom:26px}.board-overlay button{pointer-events:auto}.toast{pointer-events:none;max-width:min(640px,90%);text-align:center;padding:10px 18px;font-size:14px;line-height:1.4;animation:toast-in .25s ease}.toast .mono{font-family:ui-monospace,monospace}.piece-color{font-weight:700}.piece-color.x{color:var(--x)}.piece-color.o{color:var(--o)}.thinking{color:var(--o);font-weight:600;animation:think-pulse 1.5s ease-in-out infinite}@keyframes think-pulse{0%,to{opacity:.6}50%{opacity:1}}@keyframes toast-in{0%{opacity:0;transform:translateY(-8px)}to{opacity:1;transform:none}}.win-overlay{position:absolute;inset:0;z-index:25;display:grid;place-items:center;pointer-events:none;padding:20px}.win-card{pointer-events:auto;width:min(420px,92vw);padding:26px;text-align:center;animation:toast-in .25s ease}.win-headline{font-size:30px;font-weight:800;margin:0 0 4px}.win-headline.x{color:var(--x)}.win-headline.o{color:var(--o)}.win-headline.draw{color:var(--fg-0)}.win-token-earned{font-size:15px;font-weight:700;color:#ffd76a;text-shadow:0 0 12px rgba(255,200,60,.55)}.modal-overlay{position:absolute;inset:0;z-index:26;display:grid;place-items:center;padding:20px;background:#00000073;animation:fade-in .18s ease}.modal-card{width:min(380px,92vw);padding:26px;text-align:center;animation:toast-in .25s ease}.modal-title{font-size:21px;font-weight:800;margin:0 0 8px;color:var(--fg-0)}.wallet-btn{position:fixed;top:14px;right:16px;z-index:22;display:inline-flex;align-items:center;gap:8px;padding:8px 14px;font-size:13px;font-weight:600;border-radius:999px;max-width:244px}.wallet-btn.connected{font-family:ui-monospace,monospace;font-size:12px}.wallet-btn .wallet-label{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.wallet-dot{width:8px;height:8px;border-radius:50%;flex-shrink:0;background:#5d6b86}.wallet-dot.wallet{background:var(--good);box-shadow:0 0 8px #54e09ab3}.wallet-dot.local{background:var(--warn);box-shadow:0 0 8px #ffce6b99}.wallet-modal,.wallet-modal .modal-title{text-align:left}.wallet-list{display:flex;flex-direction:column;gap:10px;margin:6px 0 4px}.wallet-row{display:flex;align-items:center;gap:12px;width:100%;padding:12px 14px;border-radius:12px;border:1px solid var(--glass-border);background:#ffffff0a;text-align:left}.wallet-row:hover{background:#ffffff14}.wallet-row.static,.wallet-row.static:hover{background:transparent;cursor:default;filter:none}.wallet-row .name{font-weight:600;font-size:14px;flex:1;min-width:0}.wallet-row .pay{font-size:11px;color:var(--fg-1);text-transform:uppercase;letter-spacing:.5px;flex-shrink:0}.wallet-icon{width:26px;height:26px;border-radius:7px;object-fit:cover;display:grid;place-items:center;font-size:15px;flex-shrink:0}.wallet-icon.ph{background:#ffffff14;border:1px solid var(--glass-border)}.wallet-addr-full{font-size:11px;color:var(--fg-1);word-break:break-all;margin:6px 0 2px}.wallet-net-note{margin:16px 0 0;padding-top:14px;border-top:1px solid var(--glass-border);font-size:12px;color:var(--fg-1);text-align:center}.wallet-net-note strong{color:var(--o);text-transform:uppercase;letter-spacing:.5px}.faucet-log{margin:8px 0 0;padding:10px 12px;border-radius:10px;background:#00000059;border:1px solid var(--glass-border);font-size:11px;line-height:1.5;color:var(--fg-1);white-space:pre-wrap;word-break:break-all;max-height:160px;overflow-y:auto}.die-stage{position:absolute;right:26px;bottom:26px;z-index:16;display:flex;flex-direction:column;align-items:center;gap:10px;pointer-events:none}.die-scene{width:58px;height:58px;perspective:340px}.die{position:relative;width:58px;height:58px;transform-style:preserve-3d}.die.rolling{animation:die-tumble .85s linear infinite}.die.settled{transition:transform .5s cubic-bezier(.18,.9,.28,1);transform:rotateX(-17deg) rotateY(15deg)}@keyframes die-tumble{0%{transform:rotateX(0) rotateY(0) rotate(0)}to{transform:rotateX(360deg) rotateY(360deg) rotate(180deg)}}.die-face{position:absolute;width:58px;height:58px;display:grid;grid-template-columns:repeat(3,1fr);grid-template-rows:repeat(3,1fr);padding:7px;background:linear-gradient(155deg,#182136f7,#090e1af7);border:1px solid var(--glass-border);border-radius:12px;box-shadow:inset 0 1px #ffffff12}.f-front{transform:translateZ(29px)}.f-back{transform:rotateY(180deg) translateZ(29px)}.f-right{transform:rotateY(90deg) translateZ(29px)}.f-left{transform:rotateY(-90deg) translateZ(29px)}.f-top{transform:rotateX(90deg) translateZ(29px)}.f-bottom{transform:rotateX(-90deg) translateZ(29px)}.pip{display:grid;place-items:center}.pip:after{content:"";width:8px;height:8px;border-radius:50%;background:transparent}.pip.on:after{background:var(--fg-1);box-shadow:0 0 4px #9fb0cc80}.die.settled.play .pip.on:after{background:var(--good);box-shadow:0 0 6px #54e09abf}.die.settled.remove .pip.on:after{background:var(--warn);box-shadow:0 0 6px #ffce6bbf}.die.settled.play .f-front{border-color:#54e09a8c;box-shadow:inset 0 1px #ffffff12,0 0 18px #54e09a59}.die.settled.remove .f-front{border-color:#ffce6b8c;box-shadow:inset 0 1px #ffffff12,0 0 18px #ffce6b59}.die-label{font-size:11px;font-weight:700;letter-spacing:2px;text-transform:uppercase;color:var(--fg-1)}.die-label.play{color:var(--good)}.die-label.remove{color:var(--warn)}.die-stage.left{left:26px;right:auto}.die-caption{font-size:10px;font-weight:700;letter-spacing:2px;text-transform:uppercase;color:var(--fg-1);opacity:.7}.die-q{grid-column:1 / -1;grid-row:1 / -1;display:grid;place-items:center;font-size:26px;font-weight:800;color:var(--fg-1)}.die-stage.throwable .die-scene{pointer-events:auto;cursor:pointer}.die-stage.throwable .die-scene:hover .die{filter:brightness(1.18)}.die.ready{animation:die-idle 2s ease-in-out infinite}.die.ready .f-front{border-color:#4aa3ffb3;animation:die-glow 1.15s ease-in-out infinite}@keyframes die-idle{0%,to{transform:rotateX(-17deg) rotateY(13deg) translateY(0)}50%{transform:rotateX(-17deg) rotateY(18deg) translateY(-4px)}}@keyframes die-glow{0%,to{box-shadow:inset 0 1px #ffffff14,0 0 12px #4aa3ff66}50%{box-shadow:inset 0 1px #ffffff24,0 0 28px 5px #4aa3ffe6}}.die-stage.throwable .die-label{color:var(--o);font-weight:700;animation:die-prompt 1.15s ease-in-out infinite}.die-stage.throwable .die-caption{color:var(--o);opacity:.95}@keyframes die-prompt{0%,to{opacity:.65}50%{opacity:1}}.kvs{display:grid;grid-template-columns:max-content 1fr;gap:6px 14px;font-size:13px}.kvs .k{color:var(--fg-1)}.kvs .v{font-family:ui-monospace,monospace;word-break:break-all}.tag{display:inline-block;padding:2px 8px;border-radius:999px;font-size:11px;font-weight:600;text-transform:uppercase;letter-spacing:.5px}.tag.good{background:#54e09a29;color:var(--good)}.tag.warn{background:#ffce6b29;color:var(--warn)}.tag.bad{background:#ff6b7a29;color:var(--bad)}.tag.x{background:#ff5d6c2e;color:var(--x)}.tag.o{background:#4aa3ff2e;color:var(--o)}.copy-btn{font-size:11px;padding:2px 8px;margin-left:8px;border-radius:6px}.ledger{max-height:200px;overflow-y:auto;display:grid;grid-template-columns:auto 1fr auto;gap:4px 10px;font-size:12px}.ledger .lk{color:var(--fg-1)}.ledger .lv{font-family:ui-monospace,monospace}
