:root{--bg: #1a1a2e;--bg-elevated: #232347;--fg: #f4f1de;--fg-muted: #a3a3c2;--accent: #e9c46a;--accent-hover: #f3d27a;--danger: #e63946;--p0: #e63946;--p1: #457b9d;--p2: #2a9d8f;--p3: #e9c46a;--border: rgba(255, 255, 255, .08);--shadow: 0 6px 24px rgba(0, 0, 0, .3);--radius: 12px;--radius-sm: 6px;--focus-ring: 0 0 0 2px var(--bg-elevated), 0 0 0 4px var(--accent);font-family:Inter,system-ui,-apple-system,Segoe UI,Roboto,sans-serif;color-scheme:dark}@media (prefers-reduced-motion: reduce){*,*:before,*:after{animation-duration:.01ms!important;animation-iteration-count:1!important;transition-duration:.01ms!important;scroll-behavior:auto!important}}*{box-sizing:border-box}html,body,#root{height:100%;margin:0;background:var(--bg);color:var(--fg)}button{font-family:inherit;font-size:1rem;background:var(--bg-elevated);color:var(--fg);border:1px solid var(--border);border-radius:var(--radius-sm);padding:.6rem 1rem;cursor:pointer;transition:background .12s ease,transform .12s ease}button:hover:not(:disabled){background:#2a2a55}button:active:not(:disabled){transform:translateY(1px)}button:disabled{opacity:.5;cursor:not-allowed}button:focus-visible,input:focus-visible{outline:none;box-shadow:var(--focus-ring)}button.primary{background:var(--accent);color:#1a1a2e;border-color:var(--accent);font-weight:600}button.primary:hover:not(:disabled){background:var(--accent-hover)}button.danger{background:var(--danger);color:#fff;border-color:var(--danger)}input[type=text]{font-family:inherit;font-size:1rem;background:var(--bg-elevated);color:var(--fg);border:1px solid var(--border);border-radius:var(--radius-sm);padding:.6rem .8rem;outline:none;transition:border-color .12s ease}input[type=text]:focus{border-color:var(--accent)}.app-shell{min-height:100vh;display:grid;place-items:center;padding:1rem;position:relative}@keyframes slide-up{0%{opacity:0;transform:translateY(12px)}to{opacity:1;transform:translateY(0)}}.lobby.card,.waiting.card{animation:slide-up .28s ease-out}.brand{font-size:clamp(2.5rem,6vw,4rem);letter-spacing:.02em;margin:0 0 .25rem;background:linear-gradient(120deg,#e63946,#e9c46a,#2a9d8f,#457b9d);background-size:300% 300%;-webkit-background-clip:text;background-clip:text;color:transparent;animation:brand-shift 8s ease-in-out infinite}@keyframes brand-shift{0%,to{background-position:0% 50%}50%{background-position:100% 50%}}.tagline{color:var(--fg-muted);margin:0 0 1.5rem;font-size:.95rem}.card{background:var(--bg-elevated);border:1px solid var(--border);border-radius:var(--radius);padding:1.5rem;box-shadow:var(--shadow);width:min(420px,92vw)}.lobby h2,.waiting h2{margin:0 0 1rem;font-size:1.25rem}.field{display:flex;flex-direction:column;gap:.35rem;margin-bottom:1rem}.field label{font-size:.85rem;color:var(--fg-muted)}.row{display:flex;gap:.5rem;flex-wrap:wrap}.row>*{flex:1;min-width:0}.row.tight{gap:.4rem}.divider{height:1px;background:var(--border);margin:1.25rem 0}.help{font-size:.85rem;color:var(--fg-muted);margin-top:.5rem}.error{font-size:.85rem;color:var(--danger);margin-top:.5rem;min-height:1.2em}.code-display{font-family:JetBrains Mono,ui-monospace,Menlo,Consolas,monospace;font-size:1.6rem;font-weight:700;letter-spacing:.18em;padding:.6rem .8rem;background:var(--bg);border:1px solid var(--border);border-radius:var(--radius-sm);text-align:center;color:var(--accent)}.code-display.copy-button{display:flex;align-items:center;justify-content:center;gap:.7rem;cursor:pointer;transition:background .2s ease,border-color .2s ease,color .2s ease,transform .12s ease}.code-display.copy-button:hover{background:#0d0d1f;border-color:var(--accent)}.code-display.copy-button:active{transform:translateY(1px)}.code-display .code-icon{font-size:1.1rem;opacity:.7;font-weight:400;transition:transform .2s ease}.code-display.copy-button:hover .code-icon{transform:scale(1.15);opacity:1}.code-display.is-copied{background:#2a9d8f2e;border-color:var(--p2);color:var(--p2)}.code-display.is-copied .code-icon{color:var(--p2);opacity:1}.player-list{list-style:none;padding:0;margin:0;display:flex;flex-direction:column;gap:.4rem}.player-row{display:flex;align-items:center;gap:.6rem;padding:.5rem .7rem;border-radius:var(--radius-sm);background:var(--bg);border:1px solid var(--border)}.player-dot{width:14px;height:14px;border-radius:50%;flex-shrink:0}.player-name{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.player-tag{font-size:.7rem;padding:.15rem .5rem;border-radius:999px;background:var(--bg-elevated);color:var(--fg-muted);border:1px solid var(--border)}.player-tag.host{background:var(--accent);color:#1a1a2e;border-color:transparent}.player-tag.ready{background:var(--p2);color:#1a1a2e;border-color:transparent}.player-tag.disconnected{background:#4a3a3a;color:#ffb4b4;border-color:transparent}.settings-button{position:fixed;top:1rem;right:1rem;width:44px;height:44px;border-radius:50%;display:grid;place-items:center;font-size:1.2rem;padding:0;z-index:50}.settings-panel{position:fixed;top:4rem;right:1rem;background:var(--bg-elevated);border:1px solid var(--border);border-radius:var(--radius);padding:1rem;width:320px;max-width:calc(100vw - 2rem);box-shadow:var(--shadow);z-index:60}.settings-panel h3{margin:0 0 .75rem;font-size:1rem}.settings-row{display:flex;flex-direction:column;gap:.4rem;margin-bottom:1rem}.settings-row>label{font-size:.85rem;color:var(--fg-muted)}.settings-row-controls{display:flex;align-items:center;gap:.4rem}.mute-button{padding:.3rem .5rem;min-width:36px}.vol-value{display:inline-flex;align-items:baseline;gap:1px;font-variant-numeric:tabular-nums;font-size:.85rem;color:var(--fg-muted);flex-shrink:0}.vol-value-input{width:3.5ch;padding:.1rem .2rem;font:inherit;font-variant-numeric:tabular-nums;text-align:right;background:transparent;color:var(--fg);border:1px solid transparent;border-radius:4px;outline:none;transition:background .12s ease,border-color .12s ease;flex-shrink:0}.vol-value-input:hover{border-color:var(--border)}.vol-value-input:focus,.vol-value-input:focus-visible{background:var(--bg);border-color:var(--accent);box-shadow:none;color:var(--fg)}.vol-value-input::-webkit-outer-spin-button,.vol-value-input::-webkit-inner-spin-button{-webkit-appearance:none;margin:0}.vol-value-input{-moz-appearance:textfield;appearance:textfield}.settings-track{background:var(--bg);border:1px solid var(--border);padding:.5rem .7rem;border-radius:var(--radius-sm);margin-bottom:.75rem}.settings-track-name{margin:0 0 .4rem;font-size:.9rem;color:var(--accent);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.settings-track button{width:100%}.settings-actions{display:flex;justify-content:flex-end}.lang-row{display:grid;grid-template-columns:repeat(2,1fr);gap:.3rem}.lang-button{font-size:.85rem;padding:.4rem .5rem}.lang-button.active{background:var(--accent);color:#1a1a2e;border-color:var(--accent);font-weight:600}.settings-toggle-row{gap:.3rem;margin-bottom:.85rem}.settings-toggle-label{display:flex;align-items:center;gap:.5rem;cursor:pointer;font-size:.9rem;color:var(--fg)}.settings-toggle-label input[type=checkbox]{width:16px;height:16px;accent-color:var(--accent);cursor:pointer}.settings-toggle-hint{margin:0;padding-left:1.5rem;font-size:.78rem;color:var(--fg-muted);line-height:1.35}.resume-overlay{position:fixed;inset:0;background:#0d0d1fe0;backdrop-filter:blur(4px);display:grid;place-items:center;z-index:250;padding:1rem;animation:fadeOverlay .2s ease-out}.resume-content{width:min(440px,96vw);text-align:center}.resume-content h2{margin:0 0 .5rem;background:linear-gradient(120deg,#e9c46a,#2a9d8f);-webkit-background-clip:text;background-clip:text;color:transparent}.resume-summary{margin:.6rem 0;font-size:1rem}.resume-summary code,.resume-summary strong{font-family:JetBrains Mono,ui-monospace,Menlo,Consolas,monospace;font-weight:700;letter-spacing:.1em;color:var(--accent)}.resume-meta{color:var(--fg-muted);font-size:.85rem;margin:0 0 1.25rem}.resume-actions{display:flex;gap:.5rem;justify-content:center;flex-wrap:wrap}.resume-actions button{min-width:140px}.help-button{position:fixed;top:1rem;right:calc(1.5rem + 44px);width:44px;height:44px;border-radius:50%;display:grid;place-items:center;font-size:1.3rem;font-weight:700;padding:0;z-index:50}.help-overlay{position:fixed;inset:0;background:#0d0d1fd9;backdrop-filter:blur(4px);display:grid;place-items:center;padding:1rem;z-index:200;animation:fadeOverlay .2s ease-out}@keyframes fadeOverlay{0%{opacity:0}to{opacity:1}}.help-content{background:var(--bg-elevated);border:1px solid var(--border);border-radius:var(--radius);box-shadow:var(--shadow);width:min(640px,96vw);max-height:90vh;display:flex;flex-direction:column;animation:slide-up .22s ease-out}.help-header{display:flex;align-items:center;justify-content:space-between;padding:1rem 1.25rem;border-bottom:1px solid var(--border)}.help-header h2{margin:0;font-size:1.25rem;background:linear-gradient(120deg,#e63946,#e9c46a,#2a9d8f,#457b9d);background-size:200% 200%;-webkit-background-clip:text;background-clip:text;color:transparent;animation:brand-shift 6s ease-in-out infinite}.help-close-x{width:36px;height:36px;border-radius:50%;padding:0;font-size:1.4rem;line-height:1}.help-body{padding:1rem 1.25rem;overflow-y:auto;flex:1}.help-section{margin-bottom:1.25rem}.help-section:last-child{margin-bottom:0}.help-section h3{margin:0 0 .4rem;font-size:1rem;color:var(--accent)}.help-paragraph{margin:0 0 .5rem;color:var(--fg);line-height:1.55;font-size:.95rem}.help-paragraph:last-child{margin-bottom:0}.help-footer{padding:.85rem 1.25rem;border-top:1px solid var(--border);display:flex;justify-content:flex-end}@keyframes spin{0%{transform:rotate(0)}to{transform:rotate(360deg)}}.spinner{width:14px;height:14px;border-radius:50%;border:2px solid var(--fg-muted);border-top-color:transparent;animation:spin .8s linear infinite;display:inline-block}.app-shell:has(.game-screen){align-items:start;padding-top:1.25rem}.game-screen{width:min(1080px,96vw);display:flex;flex-direction:column;gap:1rem}.game-toolbar{display:flex;justify-content:space-between;align-items:center;gap:1rem;background:var(--bg-elevated);border:1px solid var(--border);border-radius:var(--radius);padding:.6rem 1rem}.status strong{font-size:1.1rem}.status-sub{color:var(--fg-muted);margin-left:.4rem}.toolbar-actions{display:flex;gap:.5rem}.game-grid{display:grid;grid-template-columns:minmax(220px,260px) minmax(0,1fr);gap:1rem;align-items:start}@media (max-width: 960px){.game-grid{grid-template-columns:1fr}.game-grid .player-info{order:2}.board-area{order:1}}@media (max-width: 480px){.game-toolbar{flex-direction:column;align-items:stretch;gap:.5rem}.toolbar-actions{justify-content:flex-end}}.player-info{padding:1rem}.player-info.card{width:auto;max-width:none;box-sizing:border-box}.phase-row{display:flex;justify-content:space-between;align-items:baseline;margin-bottom:.6rem}.phase-label{font-size:1rem;font-weight:600}.phase-sub{color:var(--fg-muted);font-size:.85rem}.timer{display:flex;align-items:center;gap:.6rem;margin-bottom:1rem}.timer-bar-wrap{flex:1;height:8px;background:var(--bg);border-radius:999px;overflow:hidden}.timer-bar{height:100%;transition:width 1s linear,background .2s ease;border-radius:999px}.timer-text{font-variant-numeric:tabular-nums;font-size:.9rem;min-width:3ch;text-align:right}.player-info .player-row{padding:.4rem .5rem}.player-row.is-current{outline:2px solid var(--accent);outline-offset:1px}@keyframes turn-pulse{0%,to{transform:translate(0);opacity:1}50%{transform:translate(2px);opacity:.55}}.turn-arrow{color:var(--accent);margin-left:auto;animation:turn-pulse 1.4s ease-in-out infinite}.player-row{transition:outline .2s ease,background .2s ease}.board-area{display:flex;flex-direction:column;gap:.75rem;align-items:center;min-width:0}.board-wrap{background:#0d0d1f;padding:1rem;border-radius:var(--radius);border:1px solid var(--border);width:100%;max-width:min(800px,85vmin,100%);margin:0 auto;box-sizing:border-box}@media (max-width: 480px){.board-wrap{padding:.5rem;max-width:96vmin}}.board-help{text-align:center;color:var(--fg-muted);font-size:.9rem;min-height:1.4em}.wb-hint{color:var(--danger);font-weight:600}.board-area .error{width:100%;text-align:center}.ws-banner{position:fixed;top:0;left:0;right:0;background:var(--danger);color:#fff;padding:.5rem 1rem;text-align:center;z-index:100;font-size:.9rem}.game-over-banner{margin:1rem auto;text-align:center;width:min(420px,92vw)}.game-over-banner h2{background:linear-gradient(120deg,#e9c46a,#2a9d8f);-webkit-background-clip:text;background-clip:text;color:transparent}.endgame-overlay{position:fixed;inset:0;background:#0d0d1feb;display:grid;place-items:center;z-index:200;padding:1rem;backdrop-filter:blur(4px)}.endgame-content{background:var(--bg-elevated);border:1px solid var(--border);border-radius:var(--radius);box-shadow:var(--shadow);padding:1.25rem;width:min(540px,96vw);max-height:92vh;overflow:auto;text-align:center}.endgame-content h2{margin:0 0 .75rem;font-size:1.1rem;color:var(--fg-muted);font-weight:500}.endgame-scores{list-style:none;padding:0;margin:1rem 0 0;display:flex;flex-direction:column;gap:.4rem}.endgame-score{display:flex;align-items:center;gap:.5rem;padding:.5rem .7rem;background:var(--bg);border:1px solid var(--border);border-radius:var(--radius-sm);transition:outline .2s ease,transform .2s ease}.endgame-score.is-winner{outline:2px solid var(--accent);outline-offset:1px;transform:scale(1.02)}.endgame-dot{width:14px;height:14px;border-radius:50%}.endgame-name{flex:1;text-align:left}.endgame-points{font-size:1.4rem;font-weight:700;font-variant-numeric:tabular-nums;min-width:2ch;color:var(--accent)}.endgame-winner{position:relative;margin-top:1rem}.endgame-winner h3{margin:0;font-size:1.5rem;background:linear-gradient(120deg,#e63946,#e9c46a,#2a9d8f,#457b9d);background-size:200% 200%;-webkit-background-clip:text;background-clip:text;color:transparent;animation:brand-shift 4s ease-in-out infinite}.endgame-actions{display:flex;justify-content:center;gap:.5rem;margin-top:1.25rem}.endgame-replay{margin-top:1.25rem;text-align:center}.endgame-replay button{font-size:1.05rem;padding:.6rem 1.2rem}.endgame-replay-hint{margin:.5rem 0 0;color:var(--fg-muted);font-size:.85rem}.confetti{position:absolute;inset:0;pointer-events:none;overflow:visible}.confetti-piece{position:absolute;top:-10px;width:8px;height:14px;border-radius:2px;opacity:.85;animation:fall 2.4s linear forwards}@keyframes fall{0%{transform:translateY(-20px) rotate(0);opacity:1}to{transform:translateY(180px) rotate(540deg);opacity:0}}@keyframes fadeIn{0%{opacity:0;transform:scale(.85)}to{opacity:.55;transform:scale(1)}}
