:root{--vh: 1vh}html{-webkit-text-size-adjust:100%;text-size-adjust:100%;overscroll-behavior:none;background-color:var(--bg, #0b1220)}html,body{touch-action:manipulation;overflow-x:hidden;max-width:100%}body{-webkit-tap-highlight-color:transparent;-webkit-touch-callout:none;user-select:none;-webkit-user-select:none;padding:env(safe-area-inset-top) env(safe-area-inset-right) env(safe-area-inset-bottom) env(safe-area-inset-left);box-sizing:border-box}input,textarea,[contenteditable],.selectable{user-select:text;-webkit-user-select:text;-webkit-touch-callout:default}button,[role=button],a,label,summary{touch-action:manipulation}button,input,select,textarea{font-family:inherit;font-size:inherit}input,textarea,select{font-size:max(16px,1em)}button,[role=button]{min-height:44px;min-width:44px;cursor:pointer}.board,.field,canvas,.drag-surface{touch-action:none}body.playing .site-footer{display:none!important}.control-layer{position:fixed;inset:0;z-index:30;pointer-events:none;touch-action:none}.control-layer>*{pointer-events:auto}.safe-inset{padding:env(safe-area-inset-top) env(safe-area-inset-right) env(safe-area-inset-bottom) env(safe-area-inset-left)}@media(prefers-reduced-motion:reduce){*,*:before,*:after{animation-duration:.01ms!important;animation-iteration-count:1!important;transition-duration:.01ms!important;scroll-behavior:auto!important}}:root{--bg: #101826;--bg-deep: #0a111c;--wall: #6b7c93;--panel: #16233a;--panel-deep: #0e1828;--edge: #2b3d57;--text: #eef3f8;--muted: #9fb3c6;--marble: #f4b23f;--gem: #5fe6d6;--exit: #e56fd0;--start: #7fd4ff;--danger: #ff7a6b;--font: system-ui, -apple-system, "Segoe UI", Roboto, Helvetica, Arial, sans-serif}[hidden]{display:none!important}*{box-sizing:border-box}html,body{margin:0;padding:0;background:var(--bg-deep);color:var(--text);font-family:var(--font);-webkit-font-smoothing:antialiased;overscroll-behavior:none}#app{min-height:100vh;min-height:100dvh;display:flex;flex-direction:column;background:radial-gradient(120% 90% at 50% 0%,#16233a 0%,var(--bg-deep) 70%)}.main-content{flex:1 0 auto;display:flex;flex-direction:column;min-height:0;width:100%;max-width:640px;margin:0 auto;padding:calc(env(safe-area-inset-top) + 8px) 14px 8px}body.playing #app{height:100vh;height:100dvh;min-height:0}body.playing .main-content{flex:1 1 auto;min-height:0;padding-bottom:calc(env(safe-area-inset-bottom) + 6px)}.site-footer{flex-shrink:0;text-align:center;font-size:12px;color:var(--muted);padding:10px 14px calc(env(safe-area-inset-bottom) + 10px)}.site-footer a{color:var(--muted)}.screen{display:flex;flex-direction:column;gap:14px}.btn{appearance:none;border:1px solid var(--edge);background:var(--panel);color:var(--text);font:600 16px/1 var(--font);padding:15px 18px;border-radius:14px;cursor:pointer;min-height:48px;transition:transform .08s ease,background .15s ease,filter .15s ease}.btn:active{transform:translateY(1px) scale(.99)}.btn.primary{background:linear-gradient(180deg,#ffce7a,var(--marble));color:#201200;border-color:transparent;font-weight:800}.btn.ghost{background:transparent}.btn:disabled{opacity:.6;cursor:default}.linkbtn{appearance:none;border:0;background:none;color:var(--muted);font:600 14px/1 var(--font);padding:8px 10px;cursor:pointer;min-height:40px}.linkbtn:hover{color:var(--text)}.iconbtn{appearance:none;border:1px solid var(--edge);background:var(--panel);color:var(--text);border-radius:10px;width:40px;height:40px;font-size:15px;cursor:pointer}.menu-actions{display:flex;flex-direction:column;gap:10px}.menu{gap:20px;padding-top:6vh;text-align:center}.brand h1{font-size:clamp(38px,12vw,60px);margin:6px 0 2px;letter-spacing:-.02em}.brand .tagline{color:var(--muted);margin:0}.logo{width:72px;height:72px;margin:0 auto;border-radius:20px;background:radial-gradient(circle at 30% 26%,#ffe3a6 0 5%,var(--marble) 6% 15%,transparent 16%),linear-gradient(var(--wall),var(--wall));-webkit-mask:linear-gradient(#000 0 0);position:relative;box-shadow:inset 0 0 0 2px var(--edge);overflow:hidden}.logo:before,.logo:after{content:"";position:absolute;background:var(--bg)}.logo:before{left:22%;top:30%;width:56%;height:12%;box-shadow:0 200% 0 var(--bg),-30% 340% 0 var(--bg)}.logo:after{left:22%;top:30%;width:12%;height:62%;box-shadow:300% 60% 0 var(--bg)}.chips{display:flex;gap:8px;justify-content:center;flex-wrap:wrap}.chip{appearance:none;border:1px solid var(--edge);background:var(--panel-deep);color:var(--muted);padding:10px 16px;border-radius:999px;font:700 14px/1 var(--font);cursor:pointer;min-height:42px}.chip.on{background:var(--marble);color:#201200;border-color:transparent}.mode-blurb{color:var(--muted);font-size:14px;margin:10px 4px 0;min-height:2.4em}.mode-best{color:var(--start);font-weight:700;margin:2px}.menu-links{display:flex;justify-content:center;gap:6px;flex-wrap:wrap}.game{flex:1 1 auto;min-height:0;gap:8px}.hud{display:flex;align-items:center;gap:8px;font-weight:700}.hud-mode{color:var(--marble)}.hud-timer{font-variant-numeric:tabular-nums;font-size:18px}.hud-extra{color:var(--gem);font-variant-numeric:tabular-nums}.hud-quit{margin-left:auto}.timer-wrap{height:6px;background:var(--panel-deep);border-radius:4px;overflow:hidden}.timer-bar{display:block;height:100%;width:100%;background:linear-gradient(90deg,var(--gem),var(--start));transition:width .12s linear}.timer-bar.low{background:linear-gradient(90deg,var(--danger),#ffb45c)}.rivals{display:flex;gap:6px;flex-wrap:wrap;font-size:12px}.rival{background:var(--panel-deep);border:1px solid var(--edge);border-radius:999px;padding:3px 9px;color:var(--muted)}.rival.done{color:var(--gem);border-color:var(--gem)}.rival b{color:var(--text)}.board-host{position:relative;flex:1 1 auto;min-height:0;border-radius:16px;overflow:hidden;background:var(--bg);border:1px solid var(--edge);touch-action:none}.board-host canvas{position:absolute;inset:0;width:100%;height:100%;display:block}.announce{position:absolute;left:50%;bottom:16px;transform:translate(-50%);background:#0a111cdb;border:1px solid var(--edge);color:var(--text);padding:9px 16px;border-radius:999px;font-size:13px;font-weight:600;pointer-events:none;max-width:90%;text-align:center}.countdown{position:absolute;inset:0;display:flex;align-items:center;justify-content:center;font-size:clamp(60px,22vw,130px);font-weight:900;color:var(--marble);text-shadow:0 4px 24px rgba(0,0,0,.6);pointer-events:none;z-index:5}.countdown.pop{animation:cd-pop .6s ease-out}@keyframes cd-pop{0%{transform:scale(.4);opacity:0}30%{transform:scale(1.1);opacity:1}to{transform:scale(1);opacity:.85}}.pause-ov{position:absolute;inset:0;z-index:6;background:#080e18b8;backdrop-filter:blur(3px);display:flex;align-items:center;justify-content:center}.pause-card{display:flex;flex-direction:column;gap:10px;min-width:210px;padding:22px;background:var(--panel);border:1px solid var(--edge);border-radius:16px;text-align:center}.pause-card h2{margin:0 0 6px}.results{text-align:center;gap:8px;padding-top:3vh}.res-mode{color:var(--muted);font-weight:700;margin:0}.res-time{font-size:clamp(44px,15vw,72px);margin:4px 0;font-variant-numeric:tabular-nums}.res-time.win{color:var(--gem)}.res-time.dnf{color:var(--danger)}.res-sub{color:var(--start);font-weight:700;margin:0}.res-falls{color:var(--muted);margin:0}.res-list{list-style:none;margin:6px 0;padding:0;display:flex;flex-direction:column;gap:6px}.res-row{display:grid;grid-template-columns:30px 1fr auto auto;gap:8px;align-items:center;background:var(--panel-deep);border:1px solid var(--edge);border-radius:12px;padding:10px 12px;text-align:left}.res-row.me{border-color:var(--marble)}.res-row.gone{opacity:.5}.res-name{font-weight:700}.res-name em{color:var(--muted);font-style:normal;font-weight:500}.res-out{font-variant-numeric:tabular-nums;color:var(--gem)}.res-wins{color:var(--marble)}.waiting-note{color:var(--muted);font-size:13px;min-height:1.2em;margin:2px 0}.overlay{position:fixed;inset:0;z-index:40;background:#060b12b8;backdrop-filter:blur(3px);display:flex;align-items:flex-end;justify-content:center;padding:12px}@media(min-width:620px){.overlay{align-items:center}}.sheet{position:relative;width:100%;max-width:460px;max-height:86vh;overflow:auto;background:var(--panel);border:1px solid var(--edge);border-radius:18px;padding:22px;display:flex;flex-direction:column;gap:12px}.sheet h2{margin:0}.sheet p{color:var(--muted);line-height:1.5;margin:0}.sheet a{color:var(--start)}.help-list{margin:0;padding-left:18px;color:var(--muted);line-height:1.55;display:flex;flex-direction:column;gap:8px}.help-list strong{color:var(--text)}.help-foot{font-size:13px}.sheet-close.x{position:absolute;top:12px;right:12px;width:34px;height:34px;border-radius:8px;border:1px solid var(--edge);background:var(--panel-deep);color:var(--text);cursor:pointer}.toast{position:fixed;left:50%;bottom:calc(env(safe-area-inset-bottom) + 24px);transform:translate(-50%,20px);background:var(--panel);border:1px solid var(--edge);color:var(--text);padding:10px 18px;border-radius:999px;font-weight:600;opacity:0;transition:opacity .2s ease,transform .2s ease;z-index:60}.toast.show{opacity:1;transform:translate(-50%)}.lobby-searching{display:flex;align-items:center;justify-content:center;gap:10px;color:var(--muted);padding:40px 0;font-weight:600}.spinner{width:20px;height:20px;border:3px solid var(--edge);border-top-color:var(--marble);border-radius:50%;animation:spin .8s linear infinite}@keyframes spin{to{transform:rotate(360deg)}}.lobby-modes{display:flex;flex-wrap:wrap;gap:8px;justify-content:center}.mode-btn{min-height:40px}.host-pick{text-align:center;color:var(--muted)}.host-pick strong{color:var(--marble)}.room-entry,.lobby{display:flex;flex-direction:column;gap:12px}.re-field,.lobby-link{width:100%;padding:13px 14px;border-radius:12px;border:1px solid var(--edge);background:var(--panel-deep);color:var(--text);font:600 16px/1 var(--font)}.re-row{display:flex;gap:8px}.re-title,.lobby h2,.lobby h3{text-align:center}.re-sub,.lobby-sub{color:var(--muted);text-align:center;font-size:14px}.lobby-roster{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:6px}.lobby-qr{display:flex;justify-content:center;padding:8px 0}.lobby-qr svg{width:190px;height:190px;max-width:70%}@media(prefers-reduced-motion:reduce){.spinner,.countdown.pop{animation-duration:1ms}.btn,.timer-bar{transition:none}}
