@font-face{font-family:Gilroy;src:url(/fonts/Gilroy-Medium.woff) format("woff"),url(/fonts/Gilroy-Medium.ttf) format("truetype");font-weight:400;font-style:normal;font-display:swap}@font-face{font-family:Gilroy;src:url(/fonts/Gilroy-Bold.otf) format("opentype");font-weight:700;font-style:normal;font-display:swap}@font-face{font-family:Gilroy;src:url(/fonts/Gilroy-Black.woff) format("woff"),url(/fonts/Gilroy-Black.ttf) format("truetype");font-weight:900;font-style:normal;font-display:swap}@font-face{font-family:Gilroy;src:url(/fonts/Gilroy-BlackItalic.woff) format("woff"),url(/fonts/Gilroy-BlackItalic.ttf) format("truetype");font-weight:900;font-style:italic;font-display:swap}:root{--color-ink: #000000;--color-ink-soft: #0a0a0a;--color-ink-lifted: #141414;--color-paper: #ffffff;--color-paper-muted: rgba(255, 255, 255, .64);--color-paper-faint: rgba(255, 255, 255, .32);--color-hairline: rgba(255, 255, 255, .12);--color-scrim: rgba(0, 0, 0, .7);--coral: #ff7a69;--pink: #ff4470;--gradient-accent: linear-gradient(45deg, #ff7a69 0%, #ff4470 100%);--gradient-accent-soft: linear-gradient(45deg, rgba(255, 122, 105, .15), rgba(255, 68, 112, .15));--gradient-selection: #ff4470;--font-sans: "Gilroy", Helvetica, Arial, sans-serif;--fw-medium: 400;--fw-regular: 400;--fw-bold: 700;--fw-black: 900;--fs-body: 16px;--fs-meta: 14px;--fs-micro: 12px;--tracking-wide: .06em;--dur-fast: .16s;--dur-base: .3s;--dur-slow: .6s;--ease-standard: cubic-bezier(.4, 0, .2, 1);--ease-entry: cubic-bezier(.2, .8, .2, 1)}*,*:before,*:after{box-sizing:border-box}html,body,#root{height:100%;margin:0;padding:0}html{background:var(--color-ink);color:var(--color-paper);font-family:var(--font-sans);font-weight:var(--fw-regular);font-size:var(--fs-body);line-height:1.2;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}body{background:var(--color-ink);color:var(--color-paper);font-family:var(--font-sans);overflow:hidden}::selection{background:var(--gradient-selection);color:var(--color-paper)}.gradient-text{background:var(--gradient-accent);-webkit-background-clip:text;background-clip:text;-webkit-text-fill-color:transparent;color:transparent}.bold{font-weight:var(--fw-bold)}.stage-viewport{position:fixed;top:0;right:0;bottom:0;left:0;display:flex;align-items:center;justify-content:center;background:var(--color-ink);overflow:hidden}.stage-scaler{width:1280px;height:800px;flex:0 0 auto;transform-origin:center center}.fs-screen{width:1280px;height:800px;background:var(--color-ink);color:var(--color-paper);position:relative;overflow:hidden;font-family:var(--font-sans)}.fs-nav{position:absolute;top:0;left:0;right:0;height:72px;padding:0 40px;display:flex;align-items:center;justify-content:space-between;z-index:10}.fs-nav .logo{font-weight:900;font-size:20px;letter-spacing:-.02em;display:inline-flex;align-items:center;gap:10px}.fs-nav .logo .dot{width:12px;height:12px;border-radius:50%;background:var(--gradient-accent);display:inline-block}.fs-nav .logo .gradient-period{background:var(--gradient-accent);-webkit-background-clip:text;-webkit-text-fill-color:transparent}.fs-nav .meta-row{display:flex;gap:32px;align-items:center;font-size:12px;letter-spacing:.08em;text-transform:uppercase;color:var(--color-paper-muted)}.fs-nav .meta-row .room-code{color:var(--color-paper);font-weight:700}.fs-watermark{position:absolute;pointer-events:none;top:0;right:0;bottom:0;left:0;display:flex;align-items:center;justify-content:center;opacity:.04;z-index:0;font-size:260px;font-weight:900;letter-spacing:-.04em;color:transparent;-webkit-text-stroke:1px var(--color-paper);-webkit-user-select:none;user-select:none}.h2-dot{position:relative;padding-left:30px}.h2-dot:before{content:"";position:absolute;left:0;top:50%;transform:translateY(-50%);width:15px;height:15px;border-radius:50%;background:var(--gradient-accent)}.meta-label{font-size:12px;letter-spacing:.08em;text-transform:uppercase;color:var(--color-paper-faint);font-weight:400}.fs-btn{font-family:var(--font-sans);font-weight:700;font-size:14px;letter-spacing:.04em;text-transform:uppercase;padding:18px 34px;border:none;border-radius:999px;cursor:pointer;transition:.3s;display:inline-block;text-decoration:none}.fs-btn:disabled{opacity:.4;cursor:not-allowed}.fs-btn-primary{background:var(--gradient-accent);color:#fff}.fs-btn-primary:not(:disabled):hover{transform:translateY(-2px);box-shadow:0 10px 30px -10px #ff447099}.fs-btn-ghost{background:transparent;color:#fff;border:1px solid rgba(255,255,255,.2);padding:17px 33px}.fs-btn-ghost:not(:disabled):hover{border-color:transparent;background:var(--gradient-accent)}.gradient-link{font-weight:700;font-size:14px;background:var(--gradient-accent);-webkit-background-clip:text;-webkit-text-fill-color:transparent;text-decoration:none;cursor:pointer;border:none;background-color:transparent;padding:0;font-family:var(--font-sans)}.code-input{display:flex;gap:12px}.code-input .cell{width:64px;height:88px;border:1px solid var(--color-hairline);border-radius:2px;background:var(--color-ink-soft);display:flex;align-items:center;justify-content:center;font-size:44px;font-weight:700;color:var(--color-paper);transition:.3s}.code-input .cell.filled{border-color:#ffffff47;background:var(--color-ink-lifted)}.code-input .cell.active{border-color:transparent;background:linear-gradient(var(--color-ink-lifted),var(--color-ink-lifted)) padding-box,var(--gradient-accent) border-box;border:1px solid transparent}.v-line{width:1px;background:var(--gradient-accent);flex-shrink:0}.player-chip{display:inline-flex;align-items:center;gap:12px}.player-avatar{width:36px;height:36px;border-radius:50%;display:inline-flex;align-items:center;justify-content:center;font-size:14px;font-weight:700;color:#000;background:#fff;flex-shrink:0}.race-canvas{font-family:var(--font-sans);font-weight:700;font-size:44px;letter-spacing:-.01em;line-height:1.5;color:#ffffff38;position:relative}.race-canvas .char{position:relative;display:inline-block;transition:color .15s}.race-canvas .char.is-space{width:.3em}.race-canvas .char.correct{color:var(--color-paper)}.race-canvas .char.wrong{color:#f35;background:#ff33551f;border-radius:2px}.race-cursor{position:absolute;left:0;right:0;bottom:-6px;height:3px;border-radius:1px;pointer-events:none;transition:background .15s}.race-cursor.is-you{bottom:-6px;height:4px}.race-cursor-label{position:absolute;top:-28px;left:50%;transform:translate(-50%);font-size:10px;font-weight:700;letter-spacing:.08em;text-transform:uppercase;white-space:nowrap;padding:3px 8px;border-radius:2px;background:var(--color-ink-lifted);border:1px solid var(--color-hairline);pointer-events:none}.race-typing-caret{position:absolute;top:0;bottom:0;width:3px;background:#fff;animation:blink 1s infinite steps(2,start);pointer-events:none}@keyframes blink{0%,50%{opacity:1}50.01%,to{opacity:0}}.mini-lb{display:flex;flex-direction:column;gap:14px}.mini-lb-row{display:grid;grid-template-columns:24px 1fr auto;gap:12px;align-items:center;font-size:14px}.mini-lb-row .rank{font-weight:700;font-size:12px;color:var(--color-paper-faint)}.mini-lb-row .name{font-weight:700;color:var(--color-paper)}.mini-lb-row .wpm{font-family:ui-monospace,monospace;font-size:12px;color:var(--color-paper-muted)}.countdown-digit{font-size:440px;font-weight:900;line-height:.9;letter-spacing:-.06em;background:var(--gradient-accent);-webkit-background-clip:text;-webkit-text-fill-color:transparent}.fs-input{background:transparent;border:none;outline:none;color:#fff;font-family:var(--font-sans);font-weight:700;font-size:16px;padding:0;width:100%}.fs-input::placeholder{color:var(--color-paper-faint);font-weight:400}.fs-textarea{background:transparent;border:none;outline:none;resize:none;color:var(--color-paper);font-family:var(--font-sans);font-weight:400;font-size:15px;line-height:1.5;width:100%}.fs-textarea::placeholder{color:var(--color-paper-faint)}.viz-toggle{display:inline-flex;gap:4px;padding:4px;border:1px solid var(--color-hairline);border-radius:999px;background:var(--color-ink-soft)}.viz-toggle button{font-family:var(--font-sans);font-weight:700;font-size:10px;letter-spacing:.08em;text-transform:uppercase;padding:7px 14px;border:none;border-radius:999px;cursor:pointer;color:var(--color-paper-muted);background:transparent;transition:.2s}.viz-toggle button.on{background:var(--gradient-accent);color:#fff}.scene-in{animation:sceneIn var(--dur-slow) var(--ease-entry) both}@keyframes sceneIn{0%{opacity:0;transform:translateY(8px)}to{opacity:1;transform:translateY(0)}}.setting-chip{transition:.2s}.setting-chip:hover{border-color:#ffffff47}.setting-chip.on:hover{border-color:transparent}button.reset{font:inherit;color:inherit;background:none;border:none;padding:0;cursor:pointer}.mobile-shell{position:fixed;top:0;right:0;bottom:0;left:0;overflow:hidden;background:var(--color-ink)}.fs-phone{--safe-top: env(safe-area-inset-top, 0px);--safe-bottom: env(safe-area-inset-bottom, 0px);--content-top: calc(var(--safe-top) + 56px);width:100%;max-width:520px;height:100%;margin:0 auto;background:var(--color-ink);color:var(--color-paper);position:relative;overflow:hidden;font-family:var(--font-sans)}.fs-status,.fs-island,.fs-home-ind{display:none}.fs-status{position:absolute;top:0;left:0;right:0;height:54px;padding:0 32px;display:flex;align-items:center;justify-content:space-between;z-index:40;font-size:15px;font-weight:700;color:#fff;pointer-events:none}.fs-status .clock{letter-spacing:.02em}.fs-status .icons{display:flex;gap:7px;align-items:center}.fs-status .icons svg{display:block}.fs-island{position:absolute;top:12px;left:50%;transform:translate(-50%);width:108px;height:30px;background:#000;border-radius:999px;z-index:45}.fs-home-ind{position:absolute;bottom:9px;left:50%;transform:translate(-50%);width:134px;height:5px;border-radius:999px;background:#fff6;z-index:45}.fs-m-bar{position:absolute;top:var(--safe-top);left:0;right:0;height:56px;padding:0 22px;display:flex;align-items:center;justify-content:space-between;z-index:20}.fs-m-bar .logo{font-weight:900;font-size:17px;letter-spacing:-.02em;display:inline-flex;align-items:center;gap:8px}.fs-m-bar .logo .dot{width:10px;height:10px;border-radius:50%;background:var(--gradient-accent)}.fs-m-bar .logo .gp{background:var(--gradient-accent);-webkit-background-clip:text;-webkit-text-fill-color:transparent}.fs-m-bar .tag{font-size:10px;letter-spacing:.08em;text-transform:uppercase;color:var(--color-paper-muted);display:inline-flex;align-items:center;gap:7px}.fs-m-bar .tag .rc{color:#fff;font-weight:700}.fs-m-body{position:absolute;left:0;right:0;top:var(--content-top);bottom:0;padding:0 22px;overflow:hidden}.fs-m-dock{position:absolute;left:0;right:0;bottom:0;padding:18px 22px calc(18px + var(--safe-bottom));display:flex;flex-direction:column;gap:12px;background:linear-gradient(to top,var(--color-ink) 62%,rgba(0,0,0,0));z-index:30}.fs-m-btn{width:100%;font-family:var(--font-sans);font-weight:700;font-size:15px;letter-spacing:.04em;text-transform:uppercase;padding:18px 24px;border:none;border-radius:999px;cursor:pointer;transition:.3s;text-align:center}.fs-m-btn:disabled{opacity:.4;cursor:not-allowed}.fs-m-btn-primary{background:var(--gradient-accent);color:#fff}.fs-m-btn-ghost{background:transparent;color:#fff;border:1px solid rgba(255,255,255,.2);padding:17px 23px}.fs-m-code{display:flex;gap:8px}.fs-m-code .cell{flex:1;height:68px;border:1px solid var(--color-hairline);border-radius:2px;background:var(--color-ink-soft);display:flex;align-items:center;justify-content:center;font-size:30px;font-weight:700}.fs-m-code .cell.filled{border-color:#ffffff47;background:var(--color-ink-lifted)}.fs-m-code .cell.active{border:1px solid transparent;background:linear-gradient(var(--color-ink-lifted),var(--color-ink-lifted)) padding-box,var(--gradient-accent) border-box}.fs-m-race{font-family:var(--font-sans);font-weight:700;font-size:30px;letter-spacing:-.01em;line-height:1.55;color:#ffffff38}.fs-m-race .char{position:relative;display:inline-block;transition:color .15s}.fs-m-race .char.is-space{width:.28em}.fs-m-race .char.correct{color:var(--color-paper)}.fs-m-race .char.wrong{color:#f35;background:#ff33551f;border-radius:2px}.fs-m-caret{position:absolute;top:0;bottom:0;left:-2px;width:3px;background:#fff;animation:blink 1s infinite steps(2,start);pointer-events:none}.fs-m-cursor{position:absolute;left:0;right:0;height:3px;border-radius:1px;pointer-events:none}.fs-m-cursor-label{position:absolute;top:-22px;left:50%;transform:translate(-50%);font-size:8px;font-weight:700;letter-spacing:.06em;text-transform:uppercase;white-space:nowrap;padding:2px 6px;border-radius:2px;background:var(--color-ink-lifted);border:1px solid var(--color-hairline);pointer-events:none}.fs-m-keyboard{display:flex;flex-direction:column;gap:7px}.fs-m-keyboard .krow{display:flex;gap:5px;justify-content:center}.fs-m-keyboard .key{flex:1;height:40px;border-radius:5px;background:var(--color-ink-lifted);border:1px solid var(--color-hairline);display:flex;align-items:center;justify-content:center;font-size:14px;font-weight:700;color:var(--color-paper-muted);cursor:pointer;user-select:none;-webkit-user-select:none;-webkit-tap-highlight-color:transparent;transition:transform .08s var(--ease-standard),background .15s,border-color .15s,color .15s;font-family:var(--font-sans);padding:0;-webkit-appearance:none;-moz-appearance:none;appearance:none;outline-offset:-2px}.fs-m-keyboard .key.wide{flex:2.4}.fs-m-keyboard .key:active{transform:translateY(1px) scale(.97)}.fs-m-keyboard .key.lit{background:linear-gradient(var(--color-ink-lifted),var(--color-ink-lifted)) padding-box,var(--gradient-accent) border-box;border:1px solid transparent;color:#fff}.fs-m-keyboard .key.held{background:linear-gradient(45deg,#ff7a6938,#ff447038);color:#fff}.fs-m-keyboard .key.dead{opacity:.5;cursor:default}.fs-m-keyboard .key.dead:active{transform:none}.viz-toggle.compact button{padding:6px 11px;font-size:9px}button,.key,.cell,[role=button]{touch-action:manipulation;-webkit-tap-highlight-color:transparent}.fs-btn,.fs-m-btn,.setting-chip,.viz-toggle button{-webkit-user-select:none;user-select:none}:focus:not(:focus-visible){outline:none}:focus-visible{outline:2px solid var(--pink);outline-offset:2px;border-radius:2px}@media(prefers-reduced-motion:reduce){*,*:before,*:after{animation-duration:.001ms!important;animation-iteration-count:1!important;transition-duration:.001ms!important;scroll-behavior:auto!important}.scene-in{animation:none!important;opacity:1!important;transform:none!important}.race-typing-caret,.fs-m-caret{animation:none!important;opacity:1!important}}.rotate-hint{position:fixed;top:0;right:0;bottom:0;left:0;z-index:100000;background:var(--color-ink);display:flex;flex-direction:column;align-items:center;justify-content:center;gap:18px;text-align:center;padding:40px}.rotate-hint .glyph{font-size:44px;animation:rotateNudge 2.4s var(--ease-standard) infinite}@keyframes rotateNudge{0%,40%{transform:rotate(0)}60%,to{transform:rotate(-90deg)}}.error-screen{position:fixed;top:0;right:0;bottom:0;left:0;background:var(--color-ink);display:flex;flex-direction:column;align-items:center;justify-content:center;gap:20px;text-align:center;padding:40px}
