*,:before,:after{box-sizing:border-box}body{color:#e2e2f0;-webkit-font-smoothing:antialiased;background:#0f0f13;margin:0;font-family:Segoe UI,system-ui,-apple-system,sans-serif}#root{min-height:100svh}*,:before,:after{box-sizing:border-box;margin:0;padding:0}:root{--bg:#0d0d14;--surface:#16161f;--surface2:#1f1f2e;--border:#2a2a40;--text:#e4e4f0;--muted:#7a7a99;--accent:#7c6af7;--accent-h:#9885ff;--pink:#f76aae;--teal:#6af7c8;--x:#f76aae;--o:#6af7c8;--win:#6af7a0;--lose:#f76a6a;--draw:#f7d96a;--r:12px;--r-sm:8px;--sh:0 8px 40px #00000080;--tr:.15s ease;-webkit-font-smoothing:antialiased;font-family:Segoe UI,system-ui,-apple-system,sans-serif}body{background:var(--bg);color:var(--text);min-height:100svh}#root{flex-direction:column;min-height:100svh;display:flex}.screen{flex-direction:column;width:100%;max-width:460px;min-height:100svh;margin:0 auto;padding:0 16px 40px;display:flex}.center-screen{justify-content:center;align-items:center}.card{background:var(--surface);border:1px solid var(--border);border-radius:var(--r);width:100%;max-width:380px;box-shadow:var(--sh);flex-direction:column;gap:18px;padding:36px 28px;display:flex}.logo{letter-spacing:-1.5px;text-align:center;background:linear-gradient(135deg, var(--accent) 0%, var(--pink) 100%);-webkit-text-fill-color:transparent;-webkit-background-clip:text;background-clip:text;font-size:clamp(32px,8vw,44px);font-weight:900;line-height:1.1}.logo-sub{text-align:center;color:var(--muted);margin-top:-10px;font-size:13px}.btn{border-radius:var(--r-sm);cursor:pointer;transition:background var(--tr), opacity var(--tr), transform var(--tr);text-align:center;white-space:nowrap;border:none;justify-content:center;align-items:center;gap:8px;width:100%;padding:12px 20px;font-size:15px;font-weight:600;display:inline-flex}.btn:active:not(:disabled){transform:scale(.97)}.btn:disabled{opacity:.4;cursor:not-allowed}.btn.primary{background:var(--accent);color:#fff}.btn.primary:hover:not(:disabled){background:var(--accent-h)}.btn.primary.voted{background:var(--surface2);color:var(--muted);border:1px solid var(--border)}.btn.secondary{background:var(--surface2);color:var(--text);border:1px solid var(--border)}.btn.secondary:hover:not(:disabled){background:var(--border)}.btn.ghost{color:var(--muted);background:0 0;width:auto;padding:8px 12px;font-size:13px}.btn.ghost:hover{color:var(--text)}.btn.btn-sm{width:auto;padding:6px 12px;font-size:12px}.icon-btn{width:auto;padding:8px;font-size:20px}.input{background:var(--surface2);border:1px solid var(--border);border-radius:var(--r-sm);width:100%;color:var(--text);transition:border-color var(--tr);outline:none;padding:12px 16px;font-size:15px}.input:focus{border-color:var(--accent)}.input::placeholder{color:var(--muted)}.err{color:var(--lose);text-align:center;padding:4px 0;font-size:13px}.field{flex-direction:column;gap:6px;display:flex}.field label{color:var(--muted);text-transform:uppercase;letter-spacing:.5px;font-size:12px;font-weight:600}.tag-preview{background:var(--surface2);border:1px solid var(--border);border-radius:var(--r-sm);flex-wrap:wrap;align-items:center;gap:8px;padding:10px 14px;font-size:13px;display:flex}.tag-label{color:var(--muted);flex-shrink:0}.tag-value{color:var(--accent);flex:1;font-weight:700}.tag-note{color:var(--muted);font-size:11px}.topbar{border-bottom:1px solid var(--border);justify-content:space-between;align-items:center;gap:8px;margin-bottom:8px;padding:14px 0;display:flex}.topbar h2{font-size:18px;font-weight:700}.my-wins-badge{color:var(--accent);font-size:13px;font-weight:700}.mode-badge{background:var(--surface2);border:1px solid var(--border);color:var(--muted);border-radius:20px;padding:3px 10px;font-size:12px}.lobby-screen{justify-content:flex-start;padding-top:0}.lobby-header{border-bottom:1px solid var(--border);justify-content:space-between;align-items:center;width:100%;margin-bottom:28px;padding:14px 0;display:flex}.my-tag-info{flex-direction:column;gap:2px;display:flex}.name-display{font-size:15px;font-weight:700}.tag-chip{color:var(--accent);background:#7c6af71f;border:1px solid #7c6af740;border-radius:20px;align-self:flex-start;padding:2px 8px;font-size:11px}.lobby-btns{flex-direction:column;gap:12px;width:100%;margin-top:32px;display:flex}.big-btn{border-radius:var(--r);text-align:left;justify-content:flex-start;gap:16px;padding:18px 22px}.big-btn .btn-icon{flex-shrink:0;font-size:28px}.big-btn span:last-child{flex-direction:column;gap:2px;display:flex}.big-btn strong{font-size:17px}.big-btn small{color:var(--muted);font-size:12px;font-weight:400}.btn.primary.big-btn small{color:#ffffffa6}.search-card{align-items:center;gap:14px}.search-card h2{font-size:20px;font-weight:700}.search-sub{color:var(--muted);text-align:center;font-size:14px}.cancel-btn{margin-top:4px}.search-timer{background:var(--surface2);border-radius:20px;width:100%;height:6px;position:relative;overflow:hidden}.search-fill{background:var(--accent);height:100%;transition:width 1s linear, background var(--tr);border-radius:20px;position:absolute;top:0;left:0}.search-timer.urgent .search-fill{background:var(--lose)}.search-secs{text-align:center;color:var(--muted);margin-top:6px;font-size:12px;display:block}.search-timer.urgent .search-secs{color:var(--lose)}.spinner{border:3px solid var(--border);border-top-color:var(--accent);border-radius:50%;width:40px;height:40px;animation:.7s linear infinite spin}.spinner.sm{border-width:2px;width:18px;height:18px}@keyframes spin{to{transform:rotate(360deg)}}.room-card{gap:16px}.back-link{color:var(--muted);cursor:pointer;background:0 0;border:none;align-self:flex-start;padding:0;font-size:13px}.back-link:hover{color:var(--text)}.room-card h2{font-size:22px;font-weight:700}.divider{color:var(--muted);align-items:center;gap:12px;font-size:12px;display:flex}.divider:before,.divider:after{content:"";background:var(--border);flex:1;height:1px}.code-join-row{gap:8px;display:flex}.code-join-row .input{letter-spacing:4px;text-align:center;flex:1;font-size:20px;font-weight:700}.local-btn{flex-direction:column;align-items:center;gap:2px;display:flex}.local-btn-sub{opacity:.65;font-size:11px;font-weight:400}.code-join-row .btn{width:auto;padding:12px 20px}.waiting-card{align-items:center;gap:14px}.waiting-sub{color:var(--muted);text-align:center;font-size:14px}.room-code-display{gap:8px;display:flex}.code-digit{background:var(--surface2);border:2px solid var(--accent);border-radius:var(--r-sm);width:44px;height:54px;color:var(--accent);letter-spacing:0;justify-content:center;align-items:center;font-size:26px;font-weight:900;display:flex}.copy-btn{margin-top:-4px}.waiting-dots{color:var(--muted);align-items:center;gap:10px;font-size:14px;display:flex}.waiting-note{color:var(--muted);font-size:11px}.game-screen{gap:0;padding-top:0}.players-row{justify-content:space-between;align-items:center;gap:10px;padding:14px 0;display:flex}.pcard{background:var(--surface);border-radius:var(--r);transition:border-color var(--tr), background var(--tr);border:2px solid #0000;flex-direction:column;flex:1;align-items:center;gap:3px;padding:12px 8px;display:flex}.pcard.my-turn-card{border-color:var(--accent);background:#7c6af714}.psymbol{font-size:30px;font-weight:900;line-height:1}.psymbol.x{color:var(--x)}.psymbol.o{color:var(--o)}.ptag{color:var(--text);text-overflow:ellipsis;white-space:nowrap;max-width:100%;font-size:12px;font-weight:700;overflow:hidden}.pname-sub{color:var(--muted);text-overflow:ellipsis;white-space:nowrap;max-width:100%;font-size:11px;overflow:hidden}.you-chip{text-transform:uppercase;letter-spacing:.8px;color:var(--accent);font-size:9px;font-weight:800}.vs-col{flex-direction:column;flex-shrink:0;align-items:center;gap:4px;display:flex}.vs{color:var(--muted);font-size:12px;font-weight:800}.game-num{color:var(--muted);font-size:10px}.timer-wrap{margin:10px 0 6px}.timer-track{background:var(--surface2);border-radius:20px;height:6px;margin-bottom:5px;position:relative;overflow:hidden}.timer-fill{background:var(--accent);height:100%;transition:width 1s linear, background var(--tr);border-radius:20px;position:absolute;top:0;left:0}.timer-wrap.urgent .timer-fill{background:var(--lose)}.timer-label{color:var(--muted);text-align:center;font-size:12px;font-weight:600;display:block}.timer-wrap.urgent .timer-label{color:var(--lose)}.skip-notice{text-align:center;color:var(--draw);border-radius:var(--r-sm);background:#f7d96a1a;border:1px solid #f7d96a40;margin:4px 0;padding:8px 14px;font-size:13px;font-weight:600;animation:.3s fadein}@keyframes fadein{0%{opacity:0;transform:translateY(-4px)}to{opacity:1;transform:none}}.turn-label{text-align:center;color:var(--muted);padding:6px 0;font-size:14px;font-weight:500}.turn-label.active{color:var(--accent);font-weight:700}.status-pulse{text-align:center;color:var(--muted);padding:10px 0;font-size:14px;animation:2s infinite pulse}@keyframes pulse{0%,to{opacity:1}50%{opacity:.45}}.result-banner{text-align:center;border-radius:var(--r-sm);margin:8px 0;padding:14px;font-size:20px;font-weight:900;animation:.3s fadein}.result-banner.win{color:var(--win);background:#6af7a01a;border:1px solid #6af7a04d}.result-banner.lose{color:var(--lose);background:#f76a6a1a;border:1px solid #f76a6a4d}.result-banner.draw{color:var(--draw);background:#f7d96a1a;border:1px solid #f7d96a4d}.result-banner.x-win{color:var(--x);background:#f76aae1a;border:1px solid #f76aae59}.result-banner.o-win{color:var(--o);background:#6af7c81a;border:1px solid #6af7c859}.result-main{font-size:22px;font-weight:900}.result-sub{opacity:.75;margin-top:3px;font-size:13px;font-weight:400}.auto-restart{text-align:center;color:var(--muted);padding:4px 0;font-size:13px}.board{aspect-ratio:1;grid-template-columns:repeat(3,1fr);gap:10px;margin:10px 0;display:grid}.cell{background:var(--surface);border:2px solid var(--border);border-radius:var(--r);cursor:default;transition:background var(--tr), border-color var(--tr), transform var(--tr);aspect-ratio:1;color:#0000;justify-content:center;align-items:center;font-size:clamp(30px,9vw,54px);font-weight:900;display:flex}.cell.x{color:var(--x);background:#f76aae0f;border-color:#f76aae4d}.cell.o{color:var(--o);background:#6af7c80f;border-color:#6af7c84d}.cell.hot{cursor:pointer;border-color:var(--surface2)}.cell.hot:hover{background:var(--surface2);border-color:var(--accent);transform:scale(1.05)}.postgame{flex-direction:column;gap:10px;margin-top:6px;display:flex}.room-code-bar{background:var(--surface2);border:1px solid var(--border);border-radius:var(--r-sm);justify-content:space-between;align-items:center;margin-top:8px;padding:10px 14px;font-size:14px;display:flex}.room-code-bar strong{color:var(--accent);letter-spacing:3px;font-size:18px}.lb-list{flex-direction:column;gap:8px;padding-top:8px;display:flex}.lb-row{background:var(--surface);border:1px solid var(--border);border-radius:var(--r-sm);align-items:center;gap:12px;padding:14px 16px;display:flex}.lb-row.me{border-color:var(--accent);background:#7c6af714}.lb-rank{text-align:center;flex-shrink:0;width:32px;font-size:18px}.lb-name{text-overflow:ellipsis;white-space:nowrap;flex:1;font-size:15px;font-weight:700;overflow:hidden}.lb-wins{color:var(--accent);flex-shrink:0;font-size:13px;font-weight:800}.empty{text-align:center;color:var(--muted);padding:40px 0;font-size:14px}@media (width<=400px){.card{padding:28px 20px}.code-digit{width:38px;height:48px;font-size:22px}.big-btn{padding:14px 16px}}
