:root{font-family:Inter,'Segoe UI',sans-serif;color:#effbf5;background:#092e32;font-synthesis:none;--lime:#d7f67a;--ink:#082c31;--muted:#adcac4}*{box-sizing:border-box}body{margin:0}button,a{-webkit-tap-highlight-color:transparent}button{font:inherit;cursor:pointer}button:focus-visible,a:focus-visible{outline:4px solid #fff;outline-offset:5px}button{min-height:64px;border:1px solid #789c94;border-radius:12px;color:#f5fff8;background:#17464a;padding:15px 22px;text-align:left;font-weight:650;transition:background .15s}button:hover{background:#265c5b}button:disabled{opacity:.45;cursor:default}.primary{background:var(--lime);color:var(--ink);border-color:var(--lime)}.primary:hover{background:#e7ffab}.quiet{background:#0c343ce8}a{color:var(--lime)}[hidden]{display:none!important}#scene{position:fixed;inset:0}#scene canvas{display:block;width:100%;height:100%}#app{position:relative;min-height:100svh;background:linear-gradient(90deg,#072c33f5 0%,#072c33dd 25%,#092e3218 68%)}body.playing #app{background:linear-gradient(180deg,#071f2875,transparent 30%,transparent 60%,#071f2880)}.topbar{height:106px;display:flex;align-items:center;justify-content:space-between;padding:0 4.5vw;gap:20px;position:relative;z-index:2}.brand{display:flex;gap:13px;align-items:center;font-weight:850;font-size:19px;letter-spacing:2px;color:inherit;text-decoration:none}.brand-mark{display:grid;place-items:center;background:var(--lime);color:#082c31;width:43px;height:43px;border-radius:50%;font-size:26px;font-style:italic;letter-spacing:-3px;padding-right:3px}.brand-sub{display:block;font-size:10px;letter-spacing:2.5px;margin-top:5px}.venue{font-size:12px;letter-spacing:2.4px;font-weight:750}.venue span{display:block;font-size:9px;color:#d3e4d9;letter-spacing:2px;margin-top:7px}#pauseButton{min-width:122px}.menu-shell{padding:4vh 7vw 100px;display:flex;gap:7vw;min-height:calc(100svh - 160px);align-items:center}.menu-content{width:440px;max-width:100%}.eyebrow{color:var(--lime);font-size:11px;font-weight:800;letter-spacing:2.6px;margin:0 0 16px}h1{font-size:clamp(52px,6.5vw,90px);font-weight:750;letter-spacing:-5px;line-height:.97;margin:0 0 26px}h1 em{color:var(--lime);font-style:normal}h1.small{font-size:45px;line-height:1.1;letter-spacing:-1.6px}p{line-height:1.6}.description{color:#d0e1dc;font-size:17px;max-width:390px;margin:0 0 26px}.menu-items{display:grid;gap:10px}.menu-items button{display:flex;justify-content:space-between;gap:18px;align-items:center;width:100%}.menu-items button span{display:block}.menu-items button small{color:#b2ccc5;font-size:12px;font-weight:450;line-height:1.4;display:block;margin-top:5px}.menu-items button.primary small{color:#35544c}.menu-items button .arrow{font-size:24px;font-weight:400}.scan-focus{outline:5px solid #ffdf72;outline-offset:3px;box-shadow:0 0 0 8px #082c31;background:#275e60}.scan-focus.primary{background:#e8ffad}.menu-hint{font-size:12px;color:#b4cdc5;margin-top:20px}.edition{font-size:9px;letter-spacing:1.8px;color:#b2ccc6;margin-top:24px}.hero-note{position:absolute;right:6%;bottom:17%;max-width:310px;background:#09343acc;backdrop-filter:blur(10px);border:1px solid #adddcc40;border-radius:16px;padding:24px;box-shadow:0 18px 50px #001e3130}.tiny-label{font-size:9px;letter-spacing:2px;color:var(--lime);display:block;margin-bottom:12px}.hero-note strong{font-size:23px;line-height:1.25;letter-spacing:-.6px}.hero-note p{font-size:12px;color:#c2d9ce;margin-bottom:0}footer{position:fixed;bottom:0;width:100%;padding:18px 4.5vw;display:flex;justify-content:space-between;align-items:center;gap:15px;font-size:10px;letter-spacing:1.4px;background:#062a30df;color:#c1d8cf;z-index:3}kbd{font:10px 'Segoe UI',sans-serif;border:1px solid #698f88;background:#19494d;padding:4px 7px;border-radius:4px;color:white;margin:0 6px 0 15px}.status-dot{display:inline-block;width:6px;height:6px;background:var(--lime);border-radius:50%;margin-right:9px}
/* In play, the court is the control surface. HUD never intercepts a shot. */
body.playing{overflow:hidden}body.playing #app{height:100svh;min-height:0;pointer-events:none;background:linear-gradient(180deg,#071f2855,transparent 22%,transparent 75%,#071f2844)}
body.playing .topbar{height:88px;padding:0 28px;pointer-events:none}body.playing .brand{pointer-events:auto}body.playing .venue{display:none}#pauseButton{pointer-events:auto;width:64px;min-width:64px;height:64px;padding:0;text-align:center;border-radius:50%;font-size:25px;backdrop-filter:blur(10px)}#pauseButton span{font-size:11px;display:block;line-height:1}
body.playing #footer{display:none}#play{position:absolute;inset:0;pointer-events:none}#courtSurface{position:absolute;inset:0;width:100%;height:100%;border:0;border-radius:0;background:transparent;pointer-events:auto;touch-action:none;cursor:crosshair;padding:0}#courtSurface:hover{background:transparent}#courtSurface.scan-focus{outline:4px solid #ffe68b;outline-offset:-12px;box-shadow:inset 0 0 45px #ffe68b33;background:transparent}#courtSurface:focus-visible{outline:4px solid white;outline-offset:-12px}
.scoreboard{position:absolute;top:20px;left:50%;transform:translateX(-50%);display:flex;align-items:center;gap:20px;padding:10px 22px;border:1px solid #ffffff44;border-radius:12px;background:#062d36e6;backdrop-filter:blur(12px);box-shadow:0 6px 30px #062c3222;text-align:center}.scoreboard strong{font-size:32px;line-height:1.1;display:block;font-variant-numeric:tabular-nums}.scoreboard>div>span{font-size:10px;font-weight:700;letter-spacing:1.7px;display:block;color:#d3e6dd}.scoreboard>div:first-child strong{color:var(--lime)}.score-mid b{font-size:9px;letter-spacing:1.7px;font-weight:600;display:block;margin-top:8px;color:var(--lime)}.score-mid{min-width:116px}
.rally-badge{position:absolute;right:30px;top:110px;display:flex;align-items:baseline;gap:8px;text-shadow:0 2px 7px #082c31}.rally-badge span,.rally-badge small{font-size:9px;letter-spacing:1.4px}.rally-badge b{font-size:25px}.rally-badge small{display:none}.feedback{position:absolute;left:50%;top:115px;transform:translateX(-50%);text-align:center;color:#fff8d9;font-size:22px;font-weight:750;text-shadow:0 2px 4px #072b31,0 3px 18px #072b31;max-width:65%}.feedback:empty{display:none}
.shot-kit{position:absolute;bottom:28px;left:28px;display:flex;gap:8px;pointer-events:auto}.shot-kit button{height:64px;min-width:72px;padding:7px 15px;text-align:center;background:#082d35cc;border-color:#a7c8b366;border-radius:12px;font-size:11px;backdrop-filter:blur(10px)}.shot-kit button span{display:block;font-size:24px;line-height:1.2}.shot-kit button[aria-pressed="true"]{color:var(--lime);border:2px solid var(--lime);background:#123c40ec}.shot-kit button:disabled{opacity:.4}
.court-hint{position:absolute;bottom:28px;left:50%;transform:translateX(-50%);font-size:12px;text-align:center;color:#fff9de;text-shadow:0 2px 4px #082c31,0 0 8px #082c31;margin:0;max-width:43%;letter-spacing:.3px}.court-hint:empty{display:none}#playStatus{position:absolute;left:28px;top:108px;min-block-size:0;padding:0}#holdRing{--hold:0;position:absolute;left:50%;top:65%;transform:translate(-50%,-50%);width:62px;height:62px;border-radius:50%;background:conic-gradient(#d7f67a calc(var(--hold)*1turn),#082c3180 0);display:none;place-items:center}#holdRing span{background:#082c31;width:50px;height:50px;border-radius:50%;display:grid;place-items:center}#holdRing.active{display:grid}
.narbe-scan-status-badge{font-size:13px!important}#menuStatus{min-block-size:28px;padding:0}body.submenu .menu-shell{align-items:flex-start;padding-top:3vh}body.submenu #heroNote{display:none}body.submenu .menu-content{width:620px}body.submenu #app{background:linear-gradient(90deg,#072c33fc 0%,#072c33ed 38%,#092e3260 85%)}body.submenu .menu-items{grid-template-columns:1fr 1fr}body.submenu .menu-items button{min-height:78px}body.submenu .description{max-width:550px}.error{padding:40px;background:#0a343b;position:relative;z-index:10;max-width:600px;margin:40px auto}.error button,.error a{display:block;margin-top:20px}
@media(max-width:1000px){.topbar{height:92px}.hero-note{right:4%;bottom:13%;max-width:250px}body.playing .brand-sub,body.playing .brand>span:last-child{display:none}.court-hint{bottom:110px;max-width:80%;width:80%}}
@media(max-width:700px){#app{background:linear-gradient(90deg,#072c33f2,#072c33ab)}.topbar{padding:0 6vw;height:88px}.venue{font-size:9px}.venue span{font-size:8px}.brand{font-size:15px}.brand-mark{width:36px;height:36px}.brand-sub{font-size:8px}.menu-shell{padding:24px 6vw 95px;min-height:calc(100svh - 110px)}h1{font-size:64px;letter-spacing:-3px}.hero-note{display:none}.description{font-size:15px}.menu-content{width:100%}.menu-items button{min-height:66px}footer{font-size:9px;justify-content:center;padding:18px 12px}footer>span:first-child{display:none}body.submenu .menu-items{grid-template-columns:1fr}body.submenu .menu-shell{padding-top:20px}.menu-content .small{font-size:39px}body.playing .topbar{padding:0 12px}body.playing .brand{display:none}.topbar #pauseButton{margin-left:auto}.scoreboard{top:15px;left:12px;transform:none;padding:10px 15px;gap:13px}.score-mid{min-width:92px}.score-mid span{font-size:8px!important}.scoreboard strong{font-size:28px}.rally-badge{top:95px;right:18px}.feedback{top:133px;max-width:90%;width:90%;font-size:18px}.shot-kit{bottom:20px;left:16px}.shot-kit button{min-width:66px;padding:7px 11px}.court-hint{font-size:11px;bottom:97px}#playStatus{left:16px;top:98px}}
@media(max-height:650px) and (min-width:701px){.topbar{height:75px}.menu-shell{padding-top:8px}h1{font-size:55px;margin-bottom:16px}.description{margin-bottom:15px}.menu-items{gap:8px}.menu-items button{min-height:64px;padding:12px 18px}.menu-hint,.edition{margin-top:12px}.hero-note{bottom:18%}.scoreboard{top:12px}.feedback{top:94px}.rally-badge{top:100px}.court-hint{bottom:92px;max-width:80%;width:80%}.shot-kit{bottom:14px}body.submenu .menu-shell{padding-top:12px}}
@media(prefers-reduced-motion:reduce){*{transition:none!important;scroll-behavior:auto!important}}

#chargeCue{position:absolute;right:32px;bottom:110px;text-align:right;color:#edffb1;text-shadow:0 2px 6px #082c31;pointer-events:none}#chargeCue strong{display:block;font-size:28px}#chargeCue>span{font-size:15px;font-variant-numeric:tabular-nums}#chargeCue small{display:block;font-size:11px;color:white;margin-top:5px}#manualKit button{touch-action:none}#manualKit button[aria-pressed="true"]{border-color:var(--lime)}@media(max-width:700px){#chargeCue{right:18px;bottom:150px}#chargeCue strong{font-size:22px}}

@media(min-width:1001px) and (max-width:1100px){.court-hint{bottom:110px;max-width:80%;width:80%}}

/* Compact mechanic feedback: the next single-switch hold, or the held direction. */
.direction-cue{position:absolute;left:28px;bottom:28px;display:flex;align-items:center;gap:12px;min-width:148px;height:64px;padding:9px 14px;border:1px solid #a7c8b366;border-radius:12px;background:#082d35eb;color:var(--lime);pointer-events:none;text-align:left}.direction-arrow{font:700 34px/1 'Segoe UI',sans-serif}.direction-cue small{display:block;font-size:10px;line-height:1.4;letter-spacing:1.1px;color:#e4f2ec}.direction-cue strong{display:block;font-size:18px;line-height:1.2;letter-spacing:1px}.direction-cue[data-direction="1"]{flex-direction:row-reverse;text-align:right}.direction-cue.is-held{border-color:var(--lime)}
@media(max-width:700px){.direction-cue{left:16px;bottom:20px}}
@media(max-height:650px) and (min-width:701px){.direction-cue{bottom:14px}}
