@import "https://fonts.googleapis.com/css2?family=Noto+Sans+KR:wght@400;500;600;700;800;900&display=swap";:root{color:#eeeeda;font-synthesis:none;--gold:#e7c486;--muted:#a7b5ad;--mint:#91c8b7;--panel:#102126d1;background:#12232b;font-family:Noto Sans KR,system-ui,sans-serif}*{box-sizing:border-box}body{margin:0;overflow:hidden}button,input,a{-webkit-tap-highlight-color:transparent}button,input{font:inherit}button{cursor:pointer;color:inherit}button:disabled{cursor:wait;opacity:.55}button:focus-visible,a:focus-visible,input:focus-visible{outline:2px solid var(--gold);outline-offset:4px}button{border:0}button svg{flex-shrink:0;width:23px;height:23px}a{color:inherit;text-decoration:none}#app{isolation:isolate;height:100dvh;min-height:560px;position:relative}#scene{z-index:-3;position:absolute;inset:0}#scene canvas{touch-action:none;width:100%;height:100%;display:block}.vignette,.lobby-shade{pointer-events:none;z-index:-2;position:absolute;inset:0}.vignette{background:radial-gradient(at 58% 43%,#0000 30%,#050f1594 100%)}.lobby-shade{background:linear-gradient(90deg,#0a171ded,#0b191fc2 28%,#0b191f0d 67%);transition:opacity .6s}.playing .lobby-shade{opacity:0}.topbar{justify-content:space-between;align-items:center;gap:20px;height:100px;padding:0 4.3vw;display:flex;position:relative}.brand{align-items:center;gap:13px;display:flex}.brand svg{width:38px;height:38px;color:var(--gold)}.brand>span{letter-spacing:-1px;font-size:21px;font-weight:800;line-height:1.2}.brand small{letter-spacing:2.4px;color:#b8c4b8;margin-top:6px;font-size:8px;font-weight:600;display:block}.top-actions{align-items:center;gap:25px;display:flex}.open-sign{letter-spacing:.3px;color:#c2ccc0;align-items:center;gap:8px;font-size:11px;display:flex}.open-sign i,.preview-dot{background:var(--mint);border-radius:50%;width:5px;height:5px;display:inline-block;box-shadow:0 0 10px #a7d0b66b}.icon-button{color:#d0d9ca;background:0 0;align-items:center;gap:8px;padding:8px;font-size:12px;display:flex}.icon-button:hover{color:var(--gold)}.sound-glyph{font-size:20px}.lobby{width:385px;position:absolute;top:clamp(126px,18vh,195px);left:7.5vw}.eyebrow{letter-spacing:2.2px;color:var(--gold);align-items:center;gap:12px;font-size:9px;font-weight:600;display:flex}.tiny-line{background:var(--gold);width:24px;height:1px}h1{letter-spacing:-3px;margin:24px 0 18px;font-size:clamp(43px,4.5vw,68px);font-weight:800;line-height:1.23}h1 em{color:var(--gold);font-style:normal}.intro{color:#b8c1b6;margin:0 0 29px;font-size:13px;font-weight:400;line-height:1.9}.mode-list{flex-direction:column;gap:8px;display:flex}.mode{text-align:left;background:#162a2e94;border:1px solid #bdd2bc1f;border-radius:7px;align-items:center;gap:14px;width:100%;min-height:65px;padding:13px 16px;transition:background .2s,border-color .2s;display:flex}.mode:hover{background:#324741b3;border-color:#98ae8d80}.mode.selected{background:#51584073;border-color:#d9bd7d8a}.mode-num{color:#8c9f96;font-variant-numeric:tabular-nums;font-size:11px;font-weight:500}.selected .mode-num{color:var(--gold)}.mode-copy{flex-direction:column;gap:5px;display:flex}.mode-copy strong{letter-spacing:-.3px;font-size:14px;font-weight:600}.mode-copy small{color:#9caf9f;font-size:10px}.mode-tag{letter-spacing:1px;color:#9bad9f;white-space:nowrap;margin-left:auto;font-size:8px}.mode-dot{border:1px solid #a4b49c4d;border-radius:50%;width:9px;height:9px}.selected .mode-dot{background:var(--gold);border-color:var(--gold);box-shadow:0 0 8px #e6c38444}.primary{background:var(--gold);color:#25352f;border:1px solid #ebce9e;border-radius:6px;justify-content:center;align-items:center;gap:12px;width:100%;min-height:51px;padding:13px 20px;font-size:13px;font-weight:700;transition:background .15s,transform .15s;display:flex}.primary:hover{background:#f1d6a7;transform:translateY(-1px)}.enter{justify-content:space-between;min-height:53px;margin-top:16px}.text-button{color:#94a69c;background:0 0;width:100%;padding:17px 0;font-size:10px;display:block}.text-button span{color:#c2cebd;margin-left:5px}.text-button:hover span{color:var(--gold)}.lobby-note{text-shadow:0 2px 12px #06131c;position:absolute;bottom:14vh;right:5.5vw}.note-kicker{letter-spacing:1.6px;color:#b6c7bd;font-size:8px}.lobby-note p{letter-spacing:-.5px;color:#e5e8d5;margin:17px 0 25px;font-size:19px;line-height:1.65}.lobby-note>div{color:#aebeb1;letter-spacing:.7px;align-items:center;gap:8px;font-size:9px;display:flex}.note-line{background:#9fbaaa6b;width:35px;height:1px;margin:0 6px}#lobby-footer{letter-spacing:.3px;color:#9aada1;justify-content:space-between;font-size:9px;display:flex;position:absolute;bottom:28px;left:4.3vw;right:4.3vw}#lobby-footer b{color:#b6c4ad66;margin:0 10px;font-weight:400}.hidden{display:none!important}.playing .topbar{height:78px}.playing .open-sign{display:none}.playing .brand{transform-origin:0;transform:scale(.9)}.game-top{align-items:center;gap:16px;display:flex;position:absolute;top:84px;left:4vw;right:4vw}.glass-button{-webkit-backdrop-filter:blur(12px);backdrop-filter:blur(12px);color:#cbd3bf;background:#14272dcc;border:1px solid #b6ccb12e;border-radius:6px;padding:10px 13px;font-size:10px}.glass-button:hover{border-color:#e6c58980}.game-mode{letter-spacing:.3px;color:#d1d7c1;text-shadow:0 2px 5px #000;font-size:10px}.room-actions{align-items:center;gap:14px;margin-left:auto;display:flex}.latency{color:#bac9ad;font-size:9px}.scoreboard{-webkit-backdrop-filter:blur(18px);backdrop-filter:blur(18px);background:linear-gradient(135deg,#132d31e8,#1b3334cc);border:1px solid #a2b9ac36;border-radius:12px;align-items:center;gap:28px;min-width:410px;padding:12px 26px;display:flex;position:absolute;top:137px;left:50%;transform:translate(-50%);box-shadow:0 12px 35px #07141844}.score-person{white-space:nowrap;align-items:center;gap:10px;min-width:105px;font-size:11px;display:flex}.score-person strong{text-align:center;font-variant-numeric:tabular-nums;min-width:24px;margin-left:auto;font-size:36px;font-weight:600}.score-person.opponent strong{margin-left:0;margin-right:auto}.player-marker{border-radius:50%;width:6px;height:6px;display:block}.amber{background:var(--gold)}.mint{background:var(--mint)}.score-middle{text-align:center;min-width:70px}.score-middle span{letter-spacing:1.5px;color:#abc4b2;white-space:nowrap;font-size:7px;display:block}.score-middle b{color:var(--gold);font-size:28px;font-weight:600;line-height:1.4;display:block}.score-middle #score-subtitle{letter-spacing:0;color:#8eaa9d;font-size:8px}.game-message{text-align:center;color:#efe9c9;text-shadow:0 2px 10px #061114;white-space:nowrap;font-size:12px;position:absolute;top:239px;left:50%;transform:translate(-50%)}.game-bottom{justify-content:space-between;align-items:flex-end;gap:15px;display:flex;position:absolute;bottom:28px;left:4vw;right:4vw}.best{flex-direction:column;gap:7px;display:flex}.best>span{letter-spacing:.3px;color:#bac7b6;font-size:9px}.best strong{color:var(--gold);font-variant-numeric:tabular-nums;font-size:25px;font-weight:500}.best small{color:#b9c5ad;font-size:11px;font-weight:400}.desktop-guide{-webkit-backdrop-filter:blur(12px);backdrop-filter:blur(12px);background:#142a2ac2;border:1px solid #abc4ac25;border-radius:8px;align-items:center;gap:18px;padding:13px 18px;display:flex}.desktop-guide>span{color:#b1c3ae;align-items:center;gap:7px;font-size:9px;display:flex}kbd{letter-spacing:.5px;color:#dfe7cb;background:#94b5a119;border:1px solid #adc5af3b;border-bottom-width:2px;border-radius:3px;padding:4px 5px;font-family:inherit;font-size:9px;font-weight:500;display:inline-block}.aim-guide{color:#acbea9;padding-bottom:15px;font-size:9px}.aim-guide span{color:var(--gold);margin-left:6px;font-size:19px}#aim-reticle{--aim:50%;text-align:center;pointer-events:none;position:absolute;bottom:95px;left:50%;transform:translate(-50%)}#aim-reticle>span{color:#c6d4b8;letter-spacing:1px;font-size:7px}#aim-reticle>div{background:#d5e1b84d;width:140px;height:1px;margin-top:9px;position:relative}#aim-reticle i{background:var(--gold);width:5px;height:5px;left:var(--aim);border-radius:50%;position:absolute;top:-2px;transform:translate(-50%)}.waiting{-webkit-backdrop-filter:blur(20px);backdrop-filter:blur(20px);text-align:center;background:#142a2ee8;border:1px solid #aec6ad4a;border-radius:14px;width:370px;padding:32px;position:absolute;top:50%;left:50%;transform:translate(-50%,-43%);box-shadow:0 20px 70px #04161b77}.waiting .eyebrow{justify-content:center;font-size:8px}.waiting h2{letter-spacing:-.7px;margin:20px 0 12px;font-size:21px;font-weight:600}.waiting p{color:#aebfac;font-size:10px;line-height:1.7}.waiting #room-code{letter-spacing:7px;color:var(--gold);background:0 0;margin:15px 0 22px;padding:6px 0 6px 7px;font-size:28px;font-weight:500}.waiting small{color:#93aa9c;margin-top:18px;font-size:9px;line-height:1.8;display:block}.waiting .primary{font-size:12px}dialog{color:#e7ecd6;background:linear-gradient(145deg,#233e3d,#152d33);border:1px solid #b2c8ad45;border-radius:16px;width:440px;max-width:calc(100vw - 36px);max-height:90dvh;padding:38px;overflow:auto;box-shadow:0 25px 100px #0008}dialog::backdrop{-webkit-backdrop-filter:blur(6px);backdrop-filter:blur(6px);background:#07151bb8}.modal-close{color:#aec1b0;background:0 0;padding:6px;font-size:27px;font-weight:300;line-height:1;position:absolute;top:10px;right:14px}dialog h2{letter-spacing:-.9px;margin:18px 0 14px;font-size:25px;font-weight:600;line-height:1.45}dialog p{color:#b9caba;margin:0 0 20px;font-size:12px;line-height:1.9}dialog input:not([type=checkbox]){color:#e9eedb;outline-offset:2px;background:#0e252c86;border:1px solid #a2bfa242;border-radius:6px;width:100%;margin:8px 0 20px;padding:13px 14px;font-size:13px}input::placeholder{color:#7f9b8a}.field-label{color:#b3c5b0;margin-top:16px;font-size:10px;display:block}.secondary{color:#c6d5bf;background:0 0;border:1px solid #9cbaa844;border-radius:6px;width:100%;min-height:47px;margin-top:10px;font-size:11px}.secondary:hover{background:#a6c5ab12}.fine,dialog .fine{color:#97b09e;margin-top:20px;font-size:9px;line-height:1.8}.error,dialog .error{color:#f0b59d;min-height:2px;margin-top:12px;margin-bottom:0;font-size:11px}.code-input{letter-spacing:6px;text-transform:uppercase;font-size:20px!important}.checkbox{color:#b4cab5;align-items:center;gap:8px;margin-bottom:20px;font-size:11px;display:flex}.checkbox input{accent-color:#e3c083;width:15px;height:15px}.help-grid{color:#c4d4c0;grid-template-columns:auto 1fr;align-items:center;gap:12px 14px;margin:25px 0;font-size:10px;display:grid}.help-grid kbd{max-width:-moz-fit-content;max-width:fit-content;font-size:9px}.help-tip{border-left:2px solid var(--gold);color:#b8cdb8;padding-left:12px;font-size:10px;line-height:1.9}.result-score{text-align:center;color:var(--gold);letter-spacing:-3px;padding:10px 0 24px;font-size:65px;font-weight:500}.result-score span{color:#789b8c;margin:0 24px;font-size:35px}.toast{z-index:20;-webkit-backdrop-filter:blur(12px);backdrop-filter:blur(12px);color:#e6e9ce;text-align:center;background:#1a3736f2;border:1px solid #acc3aa4d;border-radius:8px;width:max-content;max-width:calc(100vw - 40px);padding:13px 22px;font-size:11px;line-height:1.7;position:fixed;bottom:25px;left:50%;transform:translate(-50%);box-shadow:0 8px 30px #0004}#mobile-controls{display:none}.webgl-error{z-index:50;text-align:center;background:#152b32;flex-direction:column;justify-content:center;align-items:center;padding:30px;display:flex;position:fixed;inset:0}.webgl-error .primary{max-width:200px}.webgl-error p{color:#b5c7b4;font-size:13px}.spectating #mobile-controls,.spectating .desktop-guide,.spectating #aim-reticle,.spectating .aim-guide{display:none!important}@media (min-width:1450px){.lobby{width:420px}.mode{min-height:72px}.intro{font-size:14px}.lobby-note p{font-size:23px}}@media (max-height:800px) and (min-width:761px){.topbar{height:80px}.lobby{top:110px}h1{margin:18px 0 13px;font-size:48px}.intro{margin-bottom:22px;font-size:12px}.mode{min-height:59px;padding:10px 15px}.mode-list{gap:7px}.enter{min-height:48px;margin-top:12px}.text-button{padding:13px 0}.lobby-note{bottom:13vh}}@media (max-height:670px) and (min-width:761px){#app{min-height:500px}.lobby{top:95px}h1{margin:13px 0;font-size:39px}.intro{margin-bottom:14px;font-size:11px}.mode{min-height:53px;padding:8px 13px}.mode-copy small{font-size:9px}.mode-copy{gap:3px}.enter{min-height:44px}#lobby-footer{bottom:17px}}@media (max-width:1100px){.lobby{width:355px;left:5vw}.lobby-note{bottom:13vh;right:4vw}.lobby-note p{font-size:17px}.top-actions{gap:14px}.desktop-guide{gap:11px;padding:12px}.aim-guide{display:none}}@media (pointer:coarse),(max-width:760px){#mobile-controls{bottom:max(30px,env(safe-area-inset-bottom));pointer-events:none;touch-action:none;justify-content:space-between;align-items:flex-end;display:flex;position:absolute;left:28px;right:28px}#joystick{-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);pointer-events:auto;touch-action:none;background:#233e3b77;border:1px solid #b6ccae45;border-radius:50%;width:112px;height:112px;position:relative}#stick{background:#dfcb978c;border:1px solid #efe2ba66;border-radius:50%;width:45px;height:45px;position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);box-shadow:0 4px 15px #0002}#joystick small{color:#b8cdb0;font-size:8px;position:absolute;bottom:10px;left:50%;transform:translate(-50%)}.shot-buttons{pointer-events:auto;align-items:flex-end;gap:8px;display:flex}.shot-buttons button{touch-action:none}.shot-small{background:#25423ee0;border:1px solid #a5c1a855;border-radius:50%;width:52px;height:52px;font-size:10px}.shot-small small{color:#9fbaa6;margin-top:3px;font-size:7px;display:block}.shot-main{background:var(--gold);color:#274137;border-radius:50%;flex-direction:column;justify-content:center;align-items:center;gap:3px;width:76px;height:76px;font-size:9px;font-weight:700;display:flex}.shot-main svg{width:27px;height:27px}.desktop-guide,.aim-guide{display:none}.game-bottom{bottom:160px}#aim-reticle{bottom:166px}.toast{bottom:165px}}@media (max-width:760px){#app{min-height:580px}.topbar{height:77px;padding:0 24px}.brand>span{font-size:19px}.brand svg{width:31px;height:31px}.brand{gap:8px}.brand small{letter-spacing:1.9px;font-size:6px}.top-actions{gap:5px}.icon-button{padding:6px;font-size:11px}.icon-button span:not(.sound-glyph),.open-sign{display:none}.lobby-shade{background:linear-gradient(90deg,#0d202be0,#12282f4a),linear-gradient(#12283330 0%,#10252acd 64%,#11272bfa 100%)}.lobby{width:auto;max-width:440px;inset:auto 24px 67px}.eyebrow{letter-spacing:1.6px;gap:8px;font-size:7px}.tiny-line{width:18px}h1{letter-spacing:-2px;margin:16px 0 12px;font-size:43px}.intro{margin-bottom:22px;font-size:11px;line-height:1.8}.mode{border-radius:6px;min-height:58px;padding:10px 14px}.mode-copy strong{font-size:12px}.mode-copy small{font-size:9px}.mode-num{font-size:10px}.mode-tag{font-size:7px}.mode-list{gap:7px}.enter{min-height:49px;margin-top:13px;font-size:12px}.text-button{padding:14px 0;font-size:9px}.lobby-note{display:none}#lobby-footer{font-size:8px;bottom:20px;left:24px;right:24px}#lobby-footer>span:first-child{display:none}#lobby-footer>span:last-child{margin:auto}#lobby-footer b{margin:0 9px}.playing .topbar{height:65px}.game-top{gap:10px;top:73px;left:18px;right:18px}.glass-button{padding:8px 9px;font-size:8px}.game-mode{font-size:8px}.room-actions{gap:8px}.latency{font-size:8px}.scoreboard{border-radius:9px;justify-content:space-between;gap:13px;width:calc(100% - 44px);min-width:0;max-width:400px;padding:12px 16px;top:124px}.score-person{gap:6px;min-width:80px;max-width:120px;font-size:9px}.score-person>span:not(.player-marker){text-overflow:ellipsis;max-width:75px;overflow:hidden}.score-person strong{font-size:28px}.score-middle b{font-size:25px}.score-middle span{font-size:6px}.score-middle{min-width:60px}.score-middle #score-subtitle{font-size:7px}.game-message{white-space:normal;width:max-content;max-width:90vw;font-size:10px;top:218px}.game-bottom{left:22px;right:22px}.best>span{font-size:8px}.best strong{font-size:22px}#mobile-controls{left:22px;right:22px}.waiting{width:calc(100% - 40px);max-width:360px;padding:27px;top:51%}.waiting h2{font-size:20px}.waiting .primary{min-height:45px;font-size:11px}.waiting #room-code{margin:9px 0 16px;font-size:26px}.waiting p{font-size:10px}dialog{border-radius:12px;padding:31px 25px}dialog h2{font-size:23px}.toast{max-width:calc(100vw - 30px);padding:11px 15px;font-size:10px}}@media (max-width:760px) and (max-height:720px){.lobby{bottom:43px}h1{margin:12px 0 8px;font-size:35px}.intro{margin-bottom:15px;font-size:10px}.mode{min-height:52px;padding:8px 13px}.mode-copy{gap:3px}.enter{min-height:44px}.topbar{height:67px}.lobby .eyebrow{font-size:6px}.game-bottom{bottom:143px}#mobile-controls{bottom:20px}#joystick{width:95px;height:95px}.shot-main{width:69px;height:69px}#aim-reticle{bottom:145px}}@media (max-height:500px) and (orientation:landscape){#app{min-height:320px}.topbar{height:58px}.lobby{width:350px;top:76px;bottom:auto;left:5vw}.lobby h1{margin:10px 0;font-size:27px;line-height:1.1}.lobby h1 br{display:none}.lobby .intro{margin-bottom:10px;font-size:9px;line-height:1.6}.lobby .intro br{display:none}.mode-list{gap:4px}.mode{min-height:38px;padding:6px 12px}.mode-copy small{display:none}.mode-copy strong{font-size:11px}.enter{min-height:35px;margin-top:8px;padding:8px 12px}.text-button{padding:10px 0}#lobby-footer{display:none!important}.playing .topbar{height:50px}.game-top{top:54px}.scoreboard{width:320px;padding:8px 15px;top:12px;transform:translate(-50%)scale(.85)}.game-message{top:91px}.game-bottom{bottom:110px}.waiting{width:330px;padding:20px;top:55%}.waiting h2{margin:12px 0 7px;font-size:17px}.waiting #room-code{margin:0 0 6px;font-size:23px}.waiting small{margin-top:9px;font-size:8px}.waiting p{margin:6px 0}.waiting .primary{min-height:36px;padding:8px}#mobile-controls{bottom:16px}#joystick{width:90px;height:90px}.shot-main{width:65px;height:65px}.shot-small{width:47px;height:47px}#aim-reticle{bottom:30px}.toast{bottom:110px}}@media (prefers-reduced-motion:reduce){*{scroll-behavior:auto!important;transition:none!important}}#impact-flash{pointer-events:none;opacity:0;background:radial-gradient(#0000 48%,#e5c88933 100%);position:absolute;inset:0}#impact-flash.active{animation:.16s ease-out both impact-flash}#contact-feedback{pointer-events:none;color:#fff1b6;text-shadow:0 2px 12px #2f2910,0 0 24px #f7d48377;letter-spacing:-.6px;opacity:0;white-space:nowrap;font-size:22px;font-weight:800;position:absolute;top:59%;left:50%;transform:translate(-50%)}#contact-feedback[data-shot=smash]{color:#ffd19a;font-size:25px}#contact-feedback.active{animation:.65s ease-out both contact-pop}@keyframes impact-flash{0%{opacity:.8}to{opacity:0}}@keyframes contact-pop{0%{opacity:1;transform:translate(-50%,8px)scale(.8)}12%{opacity:1;transform:translate(-50%)scale(1.12)}35%{opacity:1;transform:translate(-50%,-4px)scale(1)}to{opacity:0;transform:translate(-50%,-22px)scale(1)}}.jump-button{color:#f4dfac;background:#56583be6!important;border-color:#e7c48699!important}.jump-button:disabled{cursor:default;opacity:.42}@media (pointer:coarse),(max-width:760px){.shot-buttons{grid-template-rows:52px 76px;grid-template-columns:52px 76px;place-items:center;gap:8px;display:grid}.shot-buttons [data-shot=drop]{grid-area:1/1}.shot-buttons [data-shot=smash]{grid-area:1/2}.shot-buttons .jump-button{grid-area:2/1}.shot-buttons .shot-main{grid-area:2/2}#contact-feedback{font-size:19px;top:57%}#contact-feedback[data-shot=smash]{font-size:21px}}@media (max-height:500px) and (orientation:landscape){.shot-buttons{grid-template-rows:47px 65px;grid-template-columns:47px 65px;gap:6px}}@media (prefers-reduced-motion:reduce){#impact-flash.active{animation:none}#contact-feedback.active{animation:.65s linear both contact-fade}@keyframes contact-fade{0%,65%{opacity:1}to{opacity:0}}}
