*,*:before,*:after{box-sizing:border-box;margin:0;padding:0}html{overflow-x:hidden}:root{--bg: #0a0a0a;--surface: #111;--border: #1e1e1e;--border2: #2a2a2a;--text: #e8e0d0;--muted: #444;--dim: #333;--ghost: #222;--red: #ff4444;--green: #44bb88;--gold: #c8a84b;--gold-dim:#6b5520;--silver: #8a8a8a;--bronze: #8b5e3c;--mono: "IBM Plex Mono", "Courier New", monospace}body,#root{width:100vw;max-width:100%;overflow-x:hidden;background:var(--bg);color:var(--text);font-family:var(--mono);min-height:100vh;display:flex;flex-direction:column;align-items:center}::-webkit-scrollbar{width:4px}::-webkit-scrollbar-track{background:var(--bg)}::-webkit-scrollbar-thumb{background:var(--ghost)}.page{display:none;width:100%;max-width:100%;overflow-x:hidden;box-sizing:border-box}.page.active{display:flex;flex-direction:column;align-items:center;animation:pageFadeIn .2s ease}@keyframes pageFadeIn{0%{opacity:0;transform:translateY(5px)}to{opacity:1;transform:translateY(0)}}header{width:100%;max-width:100%;border-bottom:1px solid var(--border2);padding:0 40px;display:flex;align-items:stretch;justify-content:space-between;position:sticky;top:0;background:var(--bg);z-index:100;box-sizing:border-box;overflow-x:hidden}.header-left{display:flex;align-items:stretch}.logo{font-size:13px;letter-spacing:.35em;text-transform:uppercase;cursor:pointer;-webkit-user-select:none;user-select:none;display:flex;align-items:center;padding-right:32px}.logo span{color:var(--red)}nav{display:flex;align-items:stretch;border-left:1px solid var(--border2)}.nav-item{display:flex;align-items:center;padding:0 22px;font-size:10px;letter-spacing:.3em;text-transform:uppercase;color:var(--muted);cursor:pointer;-webkit-user-select:none;user-select:none;border-right:1px solid var(--border2);transition:color .15s,background .15s;position:relative}.nav-item:hover,.nav-item.active{color:var(--text);background:var(--surface)}.nav-item.active:after{content:"";position:absolute;bottom:-1px;left:0;right:0;height:1px;background:var(--bg)}.header-right{display:flex;align-items:center;gap:12px;padding:20px 0}.badge{font-size:10px;letter-spacing:.2em;text-transform:uppercase;border:1px solid var(--border2);padding:4px 10px;color:var(--muted)}#page-game{padding:40px 20px;max-width:460px}.eyebrow{font-size:11px;letter-spacing:.4em;text-transform:uppercase;color:var(--muted);margin-bottom:32px}.wallet-bar{width:100%;padding:10px 16px;font-size:10px;letter-spacing:.15em;color:var(--muted);border:1px solid var(--border);border-bottom:none;display:flex;align-items:center;justify-content:space-between;gap:8px}.wallet-bar-btns{display:flex;gap:8px}.ghost-btn{padding:6px 14px;font-size:10px;letter-spacing:.2em;text-transform:uppercase;border:1px solid var(--border2);background:transparent;color:var(--text);cursor:pointer;font-family:var(--mono);transition:border-color .15s}.ghost-btn:hover{border-color:var(--text)}.status-bar{width:100%;border:1px solid var(--border);border-bottom:none;padding:12px 16px;font-size:11px;letter-spacing:.15em;text-transform:uppercase;display:flex;align-items:center;justify-content:space-between}.status-left{display:flex;align-items:center;gap:8px}.dot{width:6px;height:6px;background:var(--dim);display:inline-block;transition:background .2s}.dot.active{background:var(--green);animation:pulse 1.8s ease-in-out infinite}.move-count{font-size:10px;color:var(--dim)}.board{width:100%;border:1px solid var(--border2);display:grid;grid-template-columns:1fr 1fr 1fr;grid-template-rows:1fr 1fr 1fr;aspect-ratio:1 / 1;position:relative;overflow:hidden}.cell{position:relative;display:flex;align-items:center;justify-content:center;border-right:1px solid var(--border);border-bottom:1px solid var(--border);cursor:crosshair;transition:background .1s;-webkit-user-select:none;user-select:none}.cell:nth-child(3n){border-right:none}.cell:nth-child(n+7){border-bottom:none}.cell.occupied,.cell.game-over{cursor:default}.cell:not(.occupied):not(.game-over):hover{background:var(--surface)}.cell.win-cell{background:var(--surface)}svg.mark{overflow:visible}.x-line1,.x-line2{stroke:var(--red);stroke-width:2.5;stroke-linecap:square;stroke-dasharray:40;stroke-dashoffset:40}.x-line1.animate{animation:drawLine .18s ease-out forwards}.x-line2.animate{animation:drawLine .18s .05s ease-out forwards}.x-line1.static,.x-line2.static{stroke-dashoffset:0}.o-circle{stroke:var(--text);stroke-width:2.5;fill:none;stroke-dasharray:87.96;stroke-dashoffset:87.96}.o-circle.animate{animation:drawCircle .22s ease-out forwards}.o-circle.static{stroke-dashoffset:0}.board-overlay{position:absolute;top:0;right:0;bottom:0;left:0;background:#0a0a0ab3;display:flex;align-items:center;justify-content:center;z-index:10;pointer-events:none;font-size:10px;letter-spacing:.3em;text-transform:uppercase;color:var(--muted)}.info-row{width:100%;border:1px solid var(--border);border-top:none;display:flex}.info-cell{flex:1;padding:10px 16px;font-size:10px;letter-spacing:.2em;text-transform:uppercase;border-right:1px solid var(--border);color:var(--muted)}.info-cell:last-child{border-right:none}.info-cell .mark-x{color:var(--red)}.info-cell .mark-o{color:var(--text)}.btn-row{width:100%;display:flex;border:1px solid var(--border2);border-top:none}.btn{flex:1;padding:14px;font-size:10px;letter-spacing:.3em;text-transform:uppercase;cursor:pointer;border:none;font-family:var(--mono);transition:background .15s,color .15s;border-right:1px solid var(--border)}.btn:last-child{border-right:none}.btn-primary{background:var(--red);color:#fff}.btn-primary:hover{background:#c33}.btn-secondary{background:var(--surface);color:var(--muted)}.btn-secondary:hover{background:#1a1a1a;color:#aaa}.contract-info{width:100%;padding:10px 16px;font-size:9px;letter-spacing:.15em;color:var(--ghost);border:1px solid var(--border);border-top:none;word-break:break-all}.log-wrap{width:100%;margin-top:16px;box-sizing:border-box}.log-title{font-size:9px;letter-spacing:.25em;text-transform:uppercase;color:var(--ghost);padding-bottom:6px}.log{border:1px solid var(--border);max-height:120px;overflow-y:auto;overflow-x:hidden;width:100%;box-sizing:border-box}.log-line{padding:6px 14px;font-size:10px;letter-spacing:.1em;border-bottom:1px solid var(--bg);animation:pageFadeIn .2s;box-sizing:border-box;word-break:break-word}.log-line.info{color:var(--muted)}.log-line.success{color:var(--green)}.log-line.error{color:var(--red)}#points-toast{position:fixed;bottom:32px;left:50%;transform:translate(-50%) translateY(20px);background:var(--surface);border:1px solid var(--border2);padding:12px 24px;font-size:11px;letter-spacing:.2em;text-transform:uppercase;opacity:0;transition:opacity .25s,transform .25s;pointer-events:none;z-index:999;white-space:nowrap}#points-toast.show{opacity:1;transform:translate(-50%) translateY(0)}#points-toast .pts{color:var(--gold);font-weight:500}#page-leaderboard{padding:40px 20px;max-width:780px;width:100%}.nft-banner{width:100%;border:1px solid var(--gold-dim);background:linear-gradient(135deg,#c8a84b0f,#c8a84b05);padding:0;margin-bottom:0;position:relative;overflow:hidden}.nft-banner:before{content:"";position:absolute;top:0;left:0;right:0;height:1px;background:linear-gradient(90deg,transparent,var(--gold),transparent)}.nft-banner-inner{padding:18px 24px;display:flex;align-items:center;justify-content:space-between;gap:16px}.nft-banner-left{display:flex;align-items:center;gap:16px}.nft-icon{width:36px;height:36px;border:1px solid var(--gold-dim);display:flex;align-items:center;justify-content:center;font-size:16px;flex-shrink:0;position:relative}.nft-icon:after{content:"";position:absolute;top:2px;right:2px;bottom:2px;left:2px;border:1px solid rgba(200,168,75,.15)}.nft-label{font-size:9px;letter-spacing:.3em;text-transform:uppercase;color:var(--gold);margin-bottom:4px}.nft-desc{font-size:10px;letter-spacing:.08em;color:var(--muted);line-height:1.5}.nft-desc strong{color:var(--text);font-weight:400}.nft-timer-wrap{text-align:right;flex-shrink:0}.nft-timer-label{font-size:9px;letter-spacing:.25em;text-transform:uppercase;color:var(--muted);margin-bottom:4px}.nft-timer{font-size:18px;letter-spacing:.04em;color:var(--gold);font-weight:300;font-variant-numeric:tabular-nums}.nft-qualifiers{border-top:1px solid var(--gold-dim);padding:10px 24px;display:flex;align-items:center;gap:8px}.nft-q-label{font-size:9px;letter-spacing:.25em;text-transform:uppercase;color:var(--gold-dim);white-space:nowrap;margin-right:4px}.nft-slot{flex:1;height:28px;border:1px solid var(--border2);display:flex;align-items:center;padding:0 8px;font-size:9px;letter-spacing:.05em;color:var(--muted);min-width:0;overflow:hidden;position:relative}.nft-slot.filled{border-color:var(--gold-dim);color:var(--text)}.nft-slot.you-slot{border-color:var(--gold);background:#c8a84b0f;color:var(--gold)}.nft-slot-rank{font-size:8px;letter-spacing:.15em;color:var(--gold);margin-right:6px;flex-shrink:0}.nft-slot-addr{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.lb-header{width:100%;border:1px solid var(--border2);border-top:none;border-bottom:none;padding:14px 24px;display:flex;align-items:center;justify-content:space-between}.lb-header-left{display:flex;align-items:baseline;gap:16px}.lb-title{font-size:11px;letter-spacing:.4em;text-transform:uppercase;color:var(--text)}.lb-week,.lb-meta{font-size:9px;letter-spacing:.2em;text-transform:uppercase;color:var(--muted)}.pts-legend{width:100%;border:1px solid var(--border2);border-top:none;border-bottom:none;display:flex}.pts-item{flex:1;padding:10px 16px;border-right:1px solid var(--border);display:flex;align-items:center;gap:10px}.pts-item:last-child{border-right:none}.pts-badge{font-size:14px;font-weight:300;letter-spacing:-.01em;min-width:28px;text-align:center}.pts-badge.win{color:var(--green)}.pts-badge.draw{color:var(--gold)}.pts-badge.loss{color:var(--dim)}.pts-detail{font-size:9px;letter-spacing:.15em;text-transform:uppercase;color:var(--muted);line-height:1.6}.pts-detail strong{color:var(--text);font-weight:400;display:block}.lb-stats{width:100%;display:grid;grid-template-columns:repeat(4,1fr);border:1px solid var(--border2);border-bottom:none}.lb-stat{padding:14px 20px;border-right:1px solid var(--border)}.lb-stat:last-child{border-right:none}.lb-stat-label{font-size:9px;letter-spacing:.25em;text-transform:uppercase;color:var(--muted);margin-bottom:6px}.lb-stat-val{font-size:22px;letter-spacing:-.02em;color:var(--text);font-weight:300}.lb-stat-val.green{color:var(--green)}.lb-stat-val.red{color:var(--red)}.lb-stat-val.gold{color:var(--gold)}.lb-table{width:100%;border:1px solid var(--border2);border-collapse:collapse}.lb-table thead tr{border-bottom:1px solid var(--border2)}.lb-table th{padding:10px 18px;font-size:9px;letter-spacing:.3em;text-transform:uppercase;color:var(--muted);text-align:left;font-weight:400;border-right:1px solid var(--border);background:var(--surface)}.lb-table th:last-child{border-right:none}.lb-table td{padding:12px 18px;font-size:11px;letter-spacing:.04em;border-right:1px solid var(--border);border-bottom:1px solid var(--border);vertical-align:middle}.lb-table td:last-child{border-right:none}.lb-table tr:last-child td{border-bottom:none}.lb-table tbody tr{transition:background .1s}.lb-table tbody tr:hover{background:var(--surface)}.lb-table tbody tr.nft-eligible{border-left:2px solid rgba(200,168,75,.3)}.lb-table tbody tr.nft-eligible:hover{background:#c8a84b0a}.lb-rank-cell{display:flex;align-items:center;gap:8px}.lb-medal{width:22px;height:22px;display:flex;align-items:center;justify-content:center;font-size:9px;font-weight:500;flex-shrink:0}.medal-1{color:var(--gold);border:1px solid var(--gold)}.medal-2{color:var(--silver);border:1px solid var(--silver)}.medal-3{color:var(--bronze);border:1px solid var(--bronze)}.medal-nft{color:var(--gold-dim);border:1px solid var(--gold-dim)}.medal-n{color:var(--dim);border:1px solid var(--border)}.nft-pip{width:5px;height:5px;background:var(--gold);flex-shrink:0;opacity:.6}.lb-addr-cell{display:flex;align-items:center;gap:8px;font-size:10px;letter-spacing:.06em}.lb-you{font-size:8px;letter-spacing:.2em;text-transform:uppercase;color:var(--red);border:1px solid var(--red);padding:1px 5px}.lb-anon{color:var(--muted)}.pts-col{color:var(--gold);font-size:13px;font-weight:500}.win-col{color:var(--green)}.loss-col{color:var(--red)}.draw-col{color:var(--muted)}.winrate-wrap{min-width:70px}.wr-bar{width:100%;height:3px;background:var(--border);margin-bottom:4px;position:relative}.wr-fill{position:absolute;left:0;top:0;height:100%;background:var(--green);transition:width .6s ease}.wr-pct{font-size:10px;letter-spacing:.06em;color:var(--muted)}.lb-empty{width:100%;border:1px solid var(--border);border-top:none;padding:56px 24px;text-align:center;font-size:10px;letter-spacing:.25em;text-transform:uppercase;color:var(--dim);line-height:2.2}.lb-actions{width:100%;border:1px solid var(--border2);border-top:none;display:flex}.lb-action-btn{flex:1;padding:13px;font-size:10px;letter-spacing:.3em;text-transform:uppercase;cursor:pointer;border:none;font-family:var(--mono);background:var(--surface);color:var(--muted);border-right:1px solid var(--border);transition:background .15s,color .15s}.lb-action-btn:last-child{border-right:none}.lb-action-btn:hover{background:#1a1a1a;color:var(--text)}.lb-action-btn.danger:hover{color:var(--red)}.footer{margin:24px 0 16px;font-size:9px;letter-spacing:.2em;text-transform:uppercase;color:var(--ghost);text-align:center}@keyframes drawLine{0%{stroke-dashoffset:40}to{stroke-dashoffset:0}}@keyframes drawCircle{0%{stroke-dashoffset:87.96}to{stroke-dashoffset:0}}@keyframes pulse{0%,to{opacity:1}50%{opacity:.3}}@media (max-width: 479px){html,body,#root{width:100vw;max-width:100%;overflow-x:hidden}header{padding:0 12px;overflow-x:hidden}.header-left{flex:1;min-width:0}.logo{font-size:11px;padding-right:12px;letter-spacing:.25em;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}nav{flex:1;min-width:0}.nav-item{padding:0 10px;font-size:9px;letter-spacing:.15em;white-space:nowrap}.badge{font-size:8px;padding:3px 8px}.page{width:100vw;max-width:100%;padding:0;box-sizing:border-box}#page-game{padding:12px;max-width:100vw;width:100vw;box-sizing:border-box}.eyebrow{font-size:9px;margin-bottom:12px}.wallet-bar{padding:8px 10px;font-size:9px;flex-wrap:wrap;width:100%;max-width:100%;box-sizing:border-box}.wallet-bar-btns{width:100%;gap:4px;margin-top:4px}.ghost-btn{padding:5px 10px;font-size:8px;flex:1;min-width:0}.status-bar{padding:10px;font-size:9px;width:100%;max-width:100%;box-sizing:border-box}.move-count{font-size:8px}.board{max-width:calc(100vw - 24px);margin:0 auto}svg.mark{width:100%;height:100%}.x-line1,.x-line2{stroke-width:2}.info-row{font-size:9px;width:100%;max-width:100%;box-sizing:border-box}.info-cell{padding:8px 10px;font-size:8px;min-width:0;overflow:hidden;text-overflow:ellipsis}.info-cell .mark-x,.info-cell .mark-o{font-size:10px}.btn-row{width:100%;max-width:100%;box-sizing:border-box}.btn{padding:12px;font-size:9px;min-width:0;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.contract-info{font-size:8px;padding:8px 10px;width:100%;max-width:100%;box-sizing:border-box}.log-wrap{width:100%;max-width:100%;margin-top:12px;box-sizing:border-box}.log-title{font-size:8px}.log{max-height:80px;width:100%;max-width:100%;box-sizing:border-box}.log-line{padding:5px 10px;font-size:9px;box-sizing:border-box;white-space:pre-wrap;word-break:break-word}footer{width:100%;max-width:100%;box-sizing:border-box}#page-leaderboard{padding:12px;max-width:100vw;width:100vw;box-sizing:border-box}.nft-banner{padding:0;width:100%;max-width:100%;box-sizing:border-box}.nft-banner-inner{padding:12px;flex-direction:column;gap:8px;width:100%;box-sizing:border-box}.nft-icon{width:28px;height:28px;font-size:12px;flex-shrink:0}.nft-label{font-size:8px}.nft-desc{font-size:9px}.nft-timer-label{font-size:8px}.nft-timer{font-size:14px}.nft-banner-left{width:100%}.nft-qualifiers{padding:8px 10px;gap:4px;flex-wrap:wrap;width:100%;box-sizing:border-box}.nft-q-label{font-size:8px;flex-shrink:0}.nft-slot{min-width:calc(50% - 4px);height:24px;font-size:8px;padding:0 6px;box-sizing:border-box}.lb-header{padding:10px 12px;width:100%;box-sizing:border-box}.lb-title{font-size:10px}.lb-week,.lb-meta{font-size:8px}.pts-legend{flex-direction:column;width:100%;box-sizing:border-box}.pts-item{min-width:100%;padding:8px 10px;box-sizing:border-box}.pts-badge{font-size:12px}.pts-detail{font-size:8px}.lb-stats{grid-template-columns:repeat(2,1fr);gap:0;width:100%;box-sizing:border-box}.lb-stat{padding:10px 12px;box-sizing:border-box}.lb-stat-label{font-size:8px;margin-bottom:4px}.lb-stat-val{font-size:18px}.lb-stat:nth-child(2){border-right:none}.lb-stat:nth-child(3){border-right:1px solid var(--border);border-top:1px solid var(--border)}.lb-stat:nth-child(4){border-top:1px solid var(--border)}.lb-table{font-size:9px;width:100%;box-sizing:border-box}.lb-table thead{font-size:8px}.lb-table th{padding:8px 10px;font-size:8px;box-sizing:border-box}.lb-table td{padding:10px 8px;font-size:9px;box-sizing:border-box;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.lb-table th:nth-child(n+4),.lb-table td:nth-child(n+4){display:none}.lb-medal{width:20px;height:20px;font-size:8px;flex-shrink:0}.nft-pip{width:4px;height:4px;flex-shrink:0}.lb-empty{padding:32px 12px;font-size:9px;width:100%;box-sizing:border-box}.lb-actions{flex-wrap:wrap;width:100%;box-sizing:border-box}.lb-action-btn{flex:1;min-width:calc(50% - .5px);padding:10px;font-size:8px;box-sizing:border-box;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.footer{margin:12px 0 8px;font-size:8px;width:100%;box-sizing:border-box}}@media (min-width: 480px) and (max-width: 1024px){.page{max-width:100%;box-sizing:border-box}header{padding:0 24px}.logo{font-size:12px;padding-right:24px}.nav-item{padding:0 16px;font-size:9px}.badge{font-size:9px;padding:4px 10px}#page-game{padding:32px 16px;max-width:100%}.eyebrow{font-size:10px;margin-bottom:24px}.wallet-bar{padding:10px 14px;font-size:9px;gap:6px}.wallet-bar-btns{gap:6px}.ghost-btn{padding:6px 12px;font-size:9px}.status-bar{padding:11px 14px;font-size:10px}.move-count{font-size:9px}.board{max-width:380px;margin:0 auto}.info-row{font-size:9px}.info-cell{padding:9px 14px;font-size:9px}.btn{padding:13px;font-size:9px}.contract-info,.log-line{font-size:9px}#page-leaderboard{padding:32px 16px;max-width:100%}.nft-banner-inner{padding:16px 20px;flex-direction:column;gap:12px}.nft-icon{width:32px;height:32px}.nft-timer{font-size:16px}.nft-qualifiers{padding:10px 20px;gap:6px;flex-wrap:wrap}.nft-slot{min-width:calc(50% - 6px);height:26px}.lb-header{padding:12px 20px}.lb-title{font-size:10px}.pts-legend{flex-wrap:wrap}.pts-item{min-width:50%;padding:10px 14px}.lb-stats{grid-template-columns:repeat(2,1fr)}.lb-stat{padding:12px 16px}.lb-stat:nth-child(2){border-right:none}.lb-stat:nth-child(3){border-right:1px solid var(--border);border-top:1px solid var(--border)}.lb-stat:nth-child(4){border-top:1px solid var(--border)}.lb-table{font-size:10px}.lb-table th:nth-child(n+6),.lb-table td:nth-child(n+6){display:none}.lb-addr-cell{font-size:9px}.lb-empty{padding:48px 20px;font-size:10px}.lb-actions{flex-wrap:wrap}.lb-action-btn{flex:1;min-width:calc(50% - .5px);padding:11px;font-size:9px}.footer{margin:20px 0 14px;font-size:9px}}@media (min-width: 1025px){.page{max-width:100%;box-sizing:border-box}header{padding:0 40px}.logo{font-size:13px;padding-right:32px}.nav-item{padding:0 22px;font-size:10px}.badge{font-size:10px;padding:4px 10px}#page-game{padding:40px 20px;max-width:460px}.eyebrow{font-size:11px;margin-bottom:32px}.wallet-bar{padding:10px 16px;font-size:10px;gap:8px}.wallet-bar-btns{gap:8px}.ghost-btn{padding:6px 14px;font-size:10px}.status-bar{padding:12px 16px;font-size:11px}.move-count,.info-row{font-size:10px}.info-cell{padding:10px 16px;font-size:10px}.btn{padding:14px;font-size:10px}.contract-info{font-size:9px;padding:10px 16px}.log-line{padding:6px 14px;font-size:10px}#page-leaderboard{padding:40px 20px;max-width:780px;width:100%}.nft-banner-inner{padding:18px 24px;flex-direction:row;gap:16px}.nft-icon{width:36px;height:36px;font-size:16px}.nft-timer{font-size:18px}.nft-qualifiers{padding:10px 24px;gap:8px}.nft-slot{min-width:auto;flex:1;height:28px}.lb-header{padding:14px 24px}.lb-title{font-size:11px}.pts-legend{flex-wrap:nowrap}.pts-item{min-width:auto;flex:1;padding:10px 16px}.lb-stats{grid-template-columns:repeat(4,1fr)}.lb-stat{padding:14px 20px}.lb-stat:nth-child(2){border-right:1px solid var(--border)}.lb-stat:nth-child(3){border-right:1px solid var(--border);border-top:none}.lb-stat:nth-child(4){border-top:none}.lb-table{font-size:11px}.lb-table th:nth-child(n+6),.lb-table td:nth-child(n+6){display:table-cell}.lb-addr-cell{font-size:10px}.lb-empty{padding:56px 24px;font-size:10px}.lb-actions{flex-wrap:nowrap}.lb-action-btn{flex:1;min-width:auto;padding:13px;font-size:10px}.footer{margin:24px 0 16px;font-size:9px}}
