@import "https://fonts.googleapis.com/css2?family=Nunito:wght@400;700;800;900&display=swap";*{box-sizing:border-box;margin:0;padding:0}:root{--bg:#020617;--card:#0f172a;--border:#1e3a5f;--text:#f0f9ff;--muted:#64748b;--blue:#38bdf8}body{background:var(--bg);flex-direction:column;align-items:center;min-height:100vh;padding:28px 16px 40px;font-family:Nunito,sans-serif;display:flex}.app-title{color:var(--text);text-shadow:0 0 40px #38bdf8b3;letter-spacing:-1px;margin-bottom:4px;font-size:2.5rem;font-weight:900}.app-sub{color:#7dd3fc;text-align:center;margin-bottom:30px;font-size:1rem;font-weight:700}.card{background:var(--card);border:2px solid var(--border);border-radius:20px;width:100%;max-width:460px;padding:28px 32px;box-shadow:0 8px 50px #00000080}.card h2{color:var(--text);margin-bottom:18px;font-size:1.2rem;font-weight:800}.back-btn{color:#94a3b8;cursor:pointer;background:0 0;border:none;align-items:center;gap:7px;margin-bottom:20px;padding:4px 0;font:700 .9rem Nunito,sans-serif;transition:color .15s;display:inline-flex}.back-btn:hover{color:var(--blue)}input[type=text]{background:var(--bg);border:2px solid var(--border);width:100%;color:var(--text);border-radius:12px;outline:none;margin-bottom:12px;padding:11px 16px;font:700 1rem Nunito,sans-serif;transition:border-color .2s}input[type=text]:focus{border-color:var(--blue)}input[type=text]::placeholder{color:#334155}.btn{cursor:pointer;border:none;border-radius:13px;width:100%;padding:14px;font:900 1.1rem Nunito,sans-serif;transition:transform .15s,box-shadow .15s}.btn:hover{transform:translateY(-2px)}.btn:disabled{opacity:.35;cursor:not-allowed;transform:none}.btn-primary{color:#fff;background:linear-gradient(135deg,#f97316,#ef4444);box-shadow:0 4px 20px #f9731666}.btn-blue{color:#fff;background:linear-gradient(135deg,#0ea5e9,#6366f1);box-shadow:0 3px 14px #0ea5e959}.btn-ghost{background:var(--card);color:#94a3b8;border:1px solid var(--border)}@keyframes popIn{0%{opacity:0;transform:scale(.4)}to{opacity:1;transform:scale(1)}}@keyframes slideIn{0%{opacity:0;transform:translateY(-4px)}to{opacity:1;transform:translateY(0)}}#menu-screen{width:100%;max-width:860px}.menu-label{color:#334155;letter-spacing:3px;text-transform:uppercase;text-align:center;margin-bottom:20px;font-size:.75rem;font-weight:800}.game-grid{grid-template-columns:repeat(auto-fill,minmax(190px,1fr));gap:16px;display:grid}.game-card{background:var(--card);border:2px solid var(--border);border-radius:22px;flex-direction:column;align-items:center;gap:10px;min-height:200px;padding:26px 20px 22px;transition:transform .2s,box-shadow .2s,border-color .2s;display:flex;position:relative;overflow:hidden}.card-bg{opacity:.07;pointer-events:none;filter:blur(2px);justify-content:center;align-items:center;font-size:7rem;display:flex;position:absolute;inset:0}.card-icon{z-index:1;font-size:3rem;line-height:1}.card-name{color:#e2e8f0;z-index:1;text-align:center;font-size:1.1rem;font-weight:900}.card-desc{color:var(--muted);text-align:center;z-index:1;font-size:.8rem;font-weight:700;line-height:1.4}.game-card.playable{cursor:pointer}.game-card.playable:hover{border-color:var(--accent,var(--blue));transform:translateY(-6px)scale(1.02);box-shadow:0 12px 40px #00000080}.game-card.playable:hover .card-name{color:var(--accent,var(--blue))}.play-btn{background:var(--accent,var(--blue));color:#020617;cursor:pointer;z-index:1;border:none;border-radius:10px;width:100%;margin-top:auto;padding:9px 22px;font:800 .9rem Nunito,sans-serif}.game-card.soon{opacity:.4;cursor:not-allowed}.soon-badge{background:var(--border);color:#7dd3fc;letter-spacing:1.5px;text-transform:uppercase;z-index:2;border-radius:100px;padding:3px 9px;font-size:.65rem;font-weight:800;position:absolute;top:14px;right:14px}#lobby-screen{width:100%;max-width:640px;display:none}.room-code-box{text-align:center;background:var(--card);border:2px solid var(--border);border-radius:20px;margin-bottom:16px;padding:24px}.room-code-box .label{color:#94a3b8;letter-spacing:2px;text-transform:uppercase;margin-bottom:8px;font-size:.75rem;font-weight:800}.room-code{letter-spacing:12px;color:var(--text);font-size:3.5rem;font-weight:900;line-height:1}.room-url{color:#475569;word-break:break-all;margin-top:8px;font-size:.8rem}.room-url a{color:var(--blue);text-decoration:none}.qr-img{border:3px solid var(--border);border-radius:12px;margin-top:12px}.players-box{background:var(--card);border:2px solid var(--border);border-radius:16px;margin-bottom:16px;padding:18px 20px}.players-box h3{color:#94a3b8;letter-spacing:2px;text-transform:uppercase;margin-bottom:12px;font-size:.75rem;font-weight:800}#lobby-player-list{flex-wrap:wrap;gap:8px;display:flex}.lobby-player{background:var(--bg);color:var(--text);border-radius:10px;align-items:center;gap:8px;padding:8px 14px;font-size:.9rem;font-weight:700;display:flex}.lobby-player .dot{border-radius:50%;flex-shrink:0;width:12px;height:12px}.waiting-msg{color:#94a3b8;font-size:.9rem;font-style:italic;font-weight:700}#battle-screen{width:100%;max-width:900px;display:none}#canvas-wrap{border-radius:20px;width:100%;margin-bottom:14px;position:relative;overflow:hidden;box-shadow:0 8px 60px #000000b3}#battle-canvas{width:100%;display:block}#round-badge{-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);color:var(--text);pointer-events:none;letter-spacing:1px;white-space:nowrap;background:#020617bf;border:1px solid #ffffff1f;border-radius:100px;padding:5px 20px;font:800 .95rem Nunito,sans-serif;position:absolute;top:12px;left:50%;transform:translate(-50%)}.ctrl-row{flex-wrap:wrap;justify-content:center;gap:10px;margin-bottom:14px;display:flex}.btn-ctrl{cursor:pointer;border:none;border-radius:12px;padding:11px 24px;font:800 1rem Nunito,sans-serif;transition:transform .15s}.btn-ctrl:hover{transform:translateY(-2px)}.btn-play{color:#fff;background:linear-gradient(135deg,#22c55e,#16a34a);box-shadow:0 3px 14px #22c55e66}.btn-speed{color:#fff;background:linear-gradient(135deg,#a855f7,#7c3aed)}.btn-back{background:var(--card);color:#94a3b8;border:1px solid var(--border)}#log-wrap{background:var(--card);border:1px solid var(--border);border-radius:16px;max-height:150px;padding:14px 18px;overflow-y:auto}#log-wrap h3{color:#334155;letter-spacing:2px;text-transform:uppercase;margin-bottom:8px;font-size:.72rem;font-weight:800}.log-line{color:#94a3b8;border-bottom:1px solid var(--bg);padding:3px 0;font-size:.88rem;font-weight:700;animation:.25s slideIn}.log-line:last-child{border:none}.log-line.sunk{color:#ef4444}#race-screen{width:100%;max-width:900px;display:none}#race-status-bar{text-align:center;color:var(--text);letter-spacing:1px;padding:8px 0 10px;font:800 1rem Nunito,sans-serif}#race-canvas-wrap{border-radius:20px;width:100%;position:relative;overflow:hidden;box-shadow:0 8px 60px #000000b3}#race-canvas{width:100%;display:block}#race-bottom-bar{min-height:120px;padding-top:14px}#race-event-banner{-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);pointer-events:none;white-space:nowrap;background:#020617e0;border:1px solid #ffffff1f;border-radius:14px;justify-content:center;align-items:center;gap:10px;min-height:44px;margin:10px auto;padding:10px 22px;transition:opacity .25s;display:flex}#race-event-banner .ev-emoji{font-size:1.4rem}#race-event-banner .ev-text{color:#f0f9ff;font:900 .95rem Nunito,sans-serif}#race-event-banner .ev-sub{color:#7dd3fc;margin-left:4px;font:700 .75rem Nunito,sans-serif}#boost-row{flex-wrap:wrap;justify-content:center;gap:10px;margin-bottom:14px;display:flex}.boost-indicator{color:#020617;text-align:center;border-radius:12px;min-width:100px;padding:10px 14px;font:800 .85rem Nunito,sans-serif;transition:transform .1s,box-shadow .1s;box-shadow:0 3px #0006}.boost-indicator.pulsed{animation:.25s boostPulse}@keyframes boostPulse{0%{transform:scale(1)}50%{transform:scale(1.15)}to{transform:scale(1)}}#player-screen{flex-direction:column;justify-content:center;align-items:center;width:100%;min-height:100vh;padding:20px;display:none}#player-screen.active{display:flex}.player-name-badge{color:var(--text);margin-bottom:8px;font-size:1.4rem;font-weight:900}.player-status{color:#64748b;text-align:center;margin-bottom:32px;font-size:.9rem;font-weight:700}#boost-big-btn{cursor:pointer;-webkit-tap-highlight-color:transparent;-webkit-user-select:none;user-select:none;border:none;border-radius:50%;justify-content:center;align-items:center;width:min(340px,90vw);height:min(340px,90vw);font-size:5rem;transition:transform 80ms,box-shadow 80ms;display:flex;box-shadow:0 10px #0006}#boost-big-btn:active{transform:translateY(8px);box-shadow:0 2px #0006}#boost-count{color:#475569;margin-top:18px;font-size:1rem;font-weight:800}#player-winner-screen{text-align:center;display:none}#player-winner-screen .big-emoji{margin-bottom:12px;font-size:5rem;display:block}#player-winner-screen h2{color:var(--text);margin-bottom:8px;font-size:2rem;font-weight:900}#player-winner-screen p{color:#7dd3fc;font-weight:700}#winner-overlay{-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);z-index:100;background:#000000bf;justify-content:center;align-items:center;display:none;position:fixed;inset:0}#winner-overlay.show{display:flex}.winner-box{background:var(--card);border:2px solid var(--border);text-align:center;border-radius:28px;max-width:400px;padding:44px 52px;animation:.45s cubic-bezier(.17,.67,.36,1.3) popIn;box-shadow:0 20px 80px #0009}.w-emoji{margin-bottom:10px;font-size:5rem;display:block}.w-label{color:#334155;letter-spacing:2px;text-transform:uppercase;margin-bottom:6px;font-size:.8rem;font-weight:800}.w-name{color:var(--text);margin-bottom:6px;font-size:2.5rem;font-weight:900}.w-sub{color:#7dd3fc;margin-bottom:26px;font-size:.95rem;font-weight:700}.winner-actions{flex-wrap:wrap;justify-content:center;gap:10px;display:flex}.btn-again{color:#fff;cursor:pointer;background:linear-gradient(135deg,#f97316,#ef4444);border:none;border-radius:12px;padding:13px 28px;font:800 1.05rem Nunito,sans-serif;transition:transform .15s;box-shadow:0 4px 16px #f9731666}.btn-again:hover{transform:scale(1.06)}.btn-menu{color:#94a3b8;cursor:pointer;background:#1e293b;border:1px solid #334155;border-radius:12px;padding:13px 22px;font:800 1.05rem Nunito,sans-serif;transition:background .15s}.btn-menu:hover{background:var(--bg)}#leaderboard-overlay{-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);z-index:100;background:#000000bf;justify-content:center;align-items:center;display:none;position:fixed;inset:0}#leaderboard-overlay.show{display:flex}.lb-box{background:var(--card);border:2px solid var(--border);text-align:center;border-radius:28px;width:90%;max-width:440px;padding:36px 44px;animation:.45s cubic-bezier(.17,.67,.36,1.3) popIn;box-shadow:0 20px 80px #0009}.lb-title{color:var(--text);margin-bottom:4px;font-size:1.6rem;font-weight:900}.lb-sub{color:#7dd3fc;margin-bottom:20px;font-size:.9rem;font-weight:700}.lb-list{text-align:left;margin-bottom:24px;list-style:none}.lb-item{color:var(--text);border-radius:12px;align-items:center;gap:12px;margin-bottom:6px;padding:10px 14px;font:800 1rem Nunito,sans-serif;display:flex}.lb-item:first-child{background:#facc151f;border:1px solid #facc1540}.lb-item:last-child{background:#ef44441f;border:1px solid #ef444440}.lb-rank{text-align:center;min-width:32px;font-size:1.3rem}.lb-name{flex:1}.lb-badge{border-radius:100px;padding:2px 8px;font-size:.75rem;font-weight:800}#confetti-canvas{pointer-events:none;z-index:99;position:fixed;inset:0}
