/* Block Tennis / Center Court — typography, color and spacing from the club concept. */
:root{--paper:#f4f4e9;--ink:#103b32;--pine:#123b31;--lime:#d5ef62;--muted:#667870;--line:#c7d0c5;--coral:#df846c;--display:Impact,'Arial Narrow',sans-serif;--ui:'Segoe UI','Yu Gothic UI','Hiragino Sans',sans-serif;color-scheme:light}
*{box-sizing:border-box}html,body{margin:0;width:100%;height:100%;overflow:hidden}body{background:var(--pine);color:var(--ink);font-family:var(--ui);-webkit-tap-highlight-color:transparent}button,input,a{touch-action:manipulation}button,input{font:inherit}button,a,input{outline-offset:5px}button{cursor:pointer}button:disabled{cursor:wait;opacity:.55}button:focus-visible,a:focus-visible,input:focus-visible{outline:3px solid #7caa38}button{color:inherit}button:active{transform:translateY(1px)}[hidden]{display:none!important}h1,h2,h3,p{margin:0}#canvas-container{position:fixed;inset:0;touch-action:none}canvas{display:block;width:100%;height:100%}#mobile-controls{position:fixed;inset:0;touch-action:none;z-index:1}body.in-menu #mobile-controls,body.is-paused #mobile-controls{pointer-events:none}
#message-overlay{position:fixed;inset:0;z-index:10;display:flex;background:var(--paper);transition:opacity .32s ease;overflow:hidden}#message-overlay.menu-hidden{opacity:0;pointer-events:none}.menu-art{position:absolute;inset:0 0 0 35.2%;background:#3c6d64}.menu-art img{width:100%;height:100%;object-fit:cover;object-position:52% center}.court-caption{position:absolute;bottom:34px;right:34px;padding:12px 18px;background:var(--pine);color:var(--paper);font-size:10px;letter-spacing:.28em}.menu-wrap{position:relative;z-index:1;display:flex;flex-direction:column;width:35.2%;height:100%;padding:46px clamp(26px,3.6vw,58px) 30px;background:var(--paper)}.studio-brand{display:flex;align-items:center;gap:18px;color:var(--ink);text-decoration:none;white-space:nowrap;font-size:11px;font-weight:800;letter-spacing:.23em}.tennis-mark{display:inline-block;position:relative;flex-shrink:0;width:37px;height:37px;border:2px solid currentColor;border-radius:50%;overflow:hidden;transform:rotate(-30deg)}.tennis-mark:before,.tennis-mark:after{content:'';position:absolute;top:-2px;width:28px;height:36px;border:2px solid currentColor;border-radius:50%}.tennis-mark:before{left:-20px}.tennis-mark:after{right:-20px}.menu-main{margin:auto 0}.game-title{font-family:var(--display);font-weight:900;letter-spacing:-.045em;line-height:.98;font-size:clamp(62px,8.7vw,142px);margin:40px 0 30px;transform:scaleX(.89);transform-origin:left;width:112%}.game-title span{color:var(--lime)}#menu-tagline{font-size:clamp(20px,2.15vw,34px);font-weight:800;letter-spacing:.04em;margin-bottom:13px}#menu-description{font-size:clamp(11px,1.03vw,15px);line-height:1.9;white-space:nowrap}.mode-picker{display:flex;gap:8px;margin-top:34px}.mode-picker button{flex:1;min-width:0;padding:12px 3px;border:1px solid #7a8b7f;border-radius:2px;background:transparent;font-size:11px;font-weight:800;letter-spacing:.08em;transition:background .15s,color .15s}.mode-picker button[aria-pressed=true]{background:var(--pine);color:var(--paper);border-color:var(--pine)}.mode-picker button:hover{border-color:var(--pine);box-shadow:inset 0 0 0 1px var(--pine)}#mode-description{font-size:12px;line-height:1.8;min-height:44px;margin:12px 0 16px}.btn{position:relative;display:block;width:100%;border:0;border-radius:3px;background:var(--lime);color:var(--ink);min-height:66px;padding:18px 25px;font-size:18px;font-weight:800;text-align:left;transition:background .15s,transform .15s}.btn:after{content:'⟶';position:absolute;right:24px;top:50%;transform:translateY(-50%);font-size:30px;font-weight:400}.btn:hover{background:#cbe74c}#start-btn{font-family:var(--display);font-weight:400;font-size:29px;letter-spacing:.02em}.menu-secondary{display:flex;gap:34px;margin-top:14px}.text-button{padding:13px 0;border:0;background:transparent;font-size:11px;letter-spacing:.11em;font-weight:800;text-align:left}.text-button:hover{color:#668323}.menu-foot{margin-top:auto;padding-top:30px;font-size:9px;letter-spacing:.02em}.menu-foot p{line-height:1.8}.menu-foot b{font-size:9px;letter-spacing:.1em;margin-right:5px}.menu-foot b:not(:first-child){margin-left:14px}#personal-best{margin-top:6px;color:var(--muted)}#load-error{padding:12px 0;color:#ad493b;font-size:12px}.btn-selected:focus-visible{outline:3px solid #7caa38}
/* Minimal broadcast HUD, with a dedicated safe area for controls. */
body.in-result #ui-layer{visibility:hidden}
#ui-layer{position:fixed;inset:0;z-index:3;pointer-events:none;color:var(--paper);padding:max(22px,env(safe-area-inset-top)) 26px}body.in-menu #ui-layer{visibility:hidden}.scoreboard{width:252px;background:#123b31ee;border-radius:5px;overflow:hidden;box-shadow:0 5px 20px #0b2e261a}.scoreboard-header{display:flex;align-items:center;justify-content:space-between;padding:11px 14px;border-bottom:1px solid #ffffff24;color:#cfdbca;font-size:9px;font-weight:700;letter-spacing:.13em}.score-row{display:flex;align-items:center;justify-content:space-between;padding:10px 14px;gap:18px}.score-row+.score-row{border-top:1px solid #ffffff16}.row-topline{display:flex;align-items:center;gap:8px}.player-name{font-size:12px;font-weight:800;letter-spacing:.06em}.server-dot{display:inline-block;width:5px;height:5px;border-radius:50%;background:transparent}.active-server .server-dot{background:var(--lime)}.row-meta{display:flex;gap:14px;margin:5px 0 0 13px;color:#b6c8bc;font-size:9px}.row-meta b{margin-left:5px;color:#fff;font-weight:700}.difficulty-tag{font-size:8px;color:#b6c8bc;letter-spacing:.05em}#comDifficultyCaption{display:none}.score-val{font-family:var(--display);font-size:31px;line-height:1;font-weight:400;min-width:32px;text-align:right;color:var(--paper)}#p1Box .score-val{color:var(--lime)}body[data-format=quick] .row-meta,body[data-format=practice] .row-meta{display:none}.score-flash{animation:scoreFlash .45s ease-out}@keyframes scoreFlash{0%{background:#d5ef6255}100%{background:transparent}}.game-tools{position:absolute;top:max(22px,env(safe-area-inset-top));right:26px;display:flex;gap:8px;pointer-events:auto}.game-tools button{width:42px;height:42px;border:1px solid #f4f4e955;border-radius:4px;background:#123b31dd;color:var(--paper);font-size:22px}.game-tools button:hover{background:var(--pine)}#sound-toggle[aria-pressed=true]{color:var(--coral)}#rally-counter{position:absolute;right:28px;top:85px;display:flex;align-items:baseline;gap:9px;text-shadow:0 2px 12px #123b3188}#rally-counter span{font-size:9px;letter-spacing:.2em;font-weight:800}#rally-counter strong{font-family:var(--display);font-size:36px;font-weight:400;color:var(--lime)}#shot-feedback{position:absolute;left:50%;top:24%;transform:translate(-50%,8px);font-weight:900;letter-spacing:.12em;font-size:17px;opacity:0;transition:opacity .14s,transform .14s;text-shadow:0 2px 10px #103b32}#shot-feedback.visible{opacity:1;transform:translate(-50%,0)}.bottom-hud{position:absolute;bottom:max(24px,env(safe-area-inset-bottom));left:50%;transform:translateX(-50%);width:min(510px,80vw);text-align:center}.hint-text{font-size:12px;line-height:1.8;min-height:34px;display:flex;align-items:center;justify-content:center;background:#123b31e8;border-radius:3px;padding:8px 18px;white-space:pre-line}.status-msg{position:absolute;top:31%;left:50%;max-width:80vw;transform:translate(-50%,-5px);background:#123b31ee;border-radius:4px;padding:12px 22px;font-size:16px;font-weight:800;letter-spacing:.04em;opacity:0;transition:opacity .14s,transform .14s;text-align:center}.status-msg.status-show{opacity:1;transform:translate(-50%,0)}#big-overlay-container{position:absolute;inset:0;display:flex;align-items:center;justify-content:center;pointer-events:none}.big-overlay-text{font-family:var(--display);font-size:64px;text-align:center;color:var(--paper);text-shadow:0 3px 15px #123b3177;animation:pop .3s ease both}.text-sub{font-family:var(--ui);font-size:11px;letter-spacing:.2em;margin-top:8px}.text-gradient-gold{color:var(--lime)}@keyframes pop{from{opacity:0;transform:translateY(8px) scale(.96)}to{opacity:1;transform:none}}#serve-meter{width:220px;margin:0 auto 12px;padding:12px 16px;background:#123b31ee;border-radius:4px}.meter-label{display:flex;justify-content:space-between;font-size:10px;margin-bottom:10px}.meter-label b{font-size:8px;letter-spacing:.08em;color:var(--lime)}.meter-track{position:relative;height:5px;background:#ffffff35;border-radius:3px}.meter-zone{position:absolute;left:35%;right:35%;height:100%;background:var(--lime)}#serve-needle{position:absolute;left:0;top:-4px;width:3px;height:13px;background:#fff;border-radius:2px;will-change:transform}#fx-fade{position:fixed;inset:0;background:var(--pine);opacity:0;pointer-events:none}#fx-flash,#fx-confetti{display:none}
/* Dialogs use the same paper, ink and lime, without a second visual language. */
.help-modal{position:fixed;inset:0;z-index:20;display:none;align-items:center;justify-content:center;padding:24px;background:#0a2827b8}.help-modal.show{display:flex}#settings-modal{z-index:24}#help-modal{z-index:25}.help-panel{width:min(680px,100%);max-height:90vh;max-height:90dvh;background:var(--paper);border-radius:6px;box-shadow:0 20px 80px #08251f3d;overflow:hidden}.help-header{display:flex;justify-content:space-between;align-items:center;padding:22px 28px;border-bottom:1px solid var(--line)}.help-header h2{font-size:18px;letter-spacing:.02em;font-weight:800}.help-close{display:flex;align-items:center;justify-content:center;width:36px;height:36px;border:1px solid var(--line);background:transparent;border-radius:3px;font-size:25px;font-weight:400}.help-close:hover{background:#e6eadb}.help-body{padding:28px;max-height:calc(90dvh - 81px);overflow-y:auto;overscroll-behavior:contain;font-size:13px;line-height:1.9}.help-foot{margin-top:24px;padding-top:18px;border-top:1px solid var(--line);font-size:10px;color:var(--muted);text-align:center;letter-spacing:.03em}.help-steps section{position:relative;padding:0 0 24px 45px}.help-steps section>span{position:absolute;left:0;top:0;font-family:var(--display);font-size:28px;color:#889b71}.help-steps h3,.rule-note h3{font-size:15px;margin-bottom:5px}.help-steps p,.rule-note p{color:#526960}.rule-note{padding-top:20px;border-top:1px solid var(--line)}fieldset{border:0;margin:0;padding:0}fieldset+fieldset{margin-top:23px}legend{font-size:12px;font-weight:800;margin-bottom:10px}.setting-options{display:flex;gap:8px}.setting-options label{flex:1;position:relative;display:flex;align-items:flex-start;gap:9px;padding:13px 12px;border:1px solid var(--line);border-radius:3px;cursor:pointer;line-height:1.5}.setting-options label:has(input:checked){background:#e4edc6;border-color:#8faa59}.setting-options b{font-size:11px;letter-spacing:.04em}.setting-options small{display:block;margin-top:4px;font-size:10px;line-height:1.7;color:#647760}.setting-options input{flex-shrink:0;width:13px;height:13px;margin:2px 0 0;accent-color:var(--pine)}.setting-toggles{display:grid;grid-template-columns:1fr 1fr;gap:8px 24px}.setting-toggles label{display:flex;justify-content:space-between;align-items:center;gap:8px;cursor:pointer;font-size:12px;padding:8px 0}.setting-toggles input{width:17px;height:17px;accent-color:var(--pine)}.volume-row{display:flex;gap:30px;align-items:center;font-size:12px;margin-top:10px}.volume-row input{flex:1;accent-color:var(--pine)}.settings-selected{outline:2px solid #729b44;outline-offset:2px}.compact-panel,.result-panel{width:min(440px,100%);padding:38px;text-align:center;overflow-y:auto}.compact-panel h2{font-size:30px;margin:8px 0 12px}.compact-panel p{font-size:12px;line-height:1.8;color:var(--muted);margin-bottom:28px}.compact-panel .text-button,.result-panel .text-button{display:block;margin:10px auto 0;text-align:center}.compact-panel .btn,.result-panel .btn{font-size:15px;min-height:58px}.pause-symbol{color:#95ad4f;font-size:32px}.result-panel .tennis-mark{width:35px;height:35px}#result-eyebrow{margin:14px 0 8px;font-size:9px;letter-spacing:.2em}#result-title{font-family:var(--display);font-size:48px;font-weight:400;letter-spacing:-.02em}#result-score{font-size:16px;font-weight:700;letter-spacing:.06em;margin:12px 0 23px}.result-stats{display:grid;grid-template-columns:repeat(3,1fr);border-top:1px solid var(--line);border-bottom:1px solid var(--line);padding:19px 0}.result-stats strong{display:block;font-family:var(--display);font-size:31px;font-weight:400}.result-stats span{display:block;color:var(--muted);font-size:9px;margin-top:6px}#result-tip{font-size:12px;line-height:1.9;color:var(--muted);margin:20px 0}body.is-paused #ui-layer{opacity:.45}body.reduced-motion *,body.reduced-motion *:before,body.reduced-motion *:after{animation:none!important;transition:none!important}noscript{position:fixed;z-index:100;inset:0;background:var(--paper);padding:30px}
@media(min-width:1600px){.menu-wrap{padding-top:60px;padding-bottom:40px}.game-title{font-size:160px}.mode-picker{margin-top:46px}.mode-picker button{font-size:13px}.btn{min-height:78px}.studio-brand{font-size:13px}}
@media(max-height:780px) and (min-width:761px){.menu-wrap{padding-top:26px;padding-bottom:20px}.game-title{font-size:clamp(68px,9vw,130px);margin:24px 0 18px}.mode-picker{margin-top:23px}.mode-picker button{padding:10px 2px}#menu-tagline{font-size:24px}#mode-description{margin:9px 0 12px;min-height:35px}.btn{min-height:57px}#start-btn{font-size:26px}.menu-secondary{margin-top:8px}.menu-foot{padding-top:18px}}
@media(max-width:1050px) and (min-width:761px){.menu-wrap{width:42%;padding-left:30px;padding-right:30px}.menu-art{left:42%}.game-title{font-size:100px}#menu-description{font-size:11px}.studio-brand{font-size:10px}.menu-secondary{gap:22px}}
@media(max-width:760px){.menu-wrap{width:100%;height:auto;min-height:100%;padding:26px 26px 20px;background:transparent}.menu-art{inset:0 0 auto 38%;height:45%;opacity:1}.menu-art:after{content:'';position:absolute;inset:0;background:linear-gradient(to right,var(--paper),transparent 45%),linear-gradient(to top,var(--paper),transparent 30%)}.menu-art img{object-position:58% center}.court-caption{display:none}.studio-brand{font-size:9px;gap:10px;letter-spacing:.17em}.tennis-mark{width:29px;height:29px}.tennis-mark:before,.tennis-mark:after{height:29px}.menu-main{margin:0;position:relative}.game-title{font-size:clamp(68px,17vw,110px);margin:40px 0 24px;width:80%}.menu-wrap #menu-tagline{font-size:24px}#menu-description{font-size:12px;white-space:normal}#message-overlay{overflow-y:auto}.mode-picker{margin-top:28px}.mode-picker button{font-size:11px;padding:13px 0}#mode-description{font-size:11px;min-height:35px;margin:10px 0 15px}.btn{min-height:60px}#start-btn{font-size:28px}.menu-secondary{justify-content:space-between;margin-top:11px}.text-button{font-size:11px}.menu-foot{font-size:9px;padding-top:24px;margin-top:auto}.menu-foot b:not(:first-child){margin-left:7px}#ui-layer{padding:16px}.scoreboard{width:198px}.scoreboard-header{font-size:8px;padding:9px 12px}.score-row{padding:9px 12px}.player-name{font-size:11px}.score-val{font-size:28px}.difficulty-tag{font-size:7px}.game-tools{top:16px;right:16px;gap:6px}.game-tools button{width:36px;height:36px;font-size:20px}#rally-counter{right:18px;top:67px}#rally-counter strong{font-size:30px}#rally-counter span{font-size:8px}.bottom-hud{bottom:max(20px,env(safe-area-inset-bottom));width:calc(100% - 32px)}.hint-text{font-size:10px;padding:9px 12px;min-height:32px}#serve-meter{width:188px;padding:10px 13px}#shot-feedback{font-size:14px;top:24%}.status-msg{font-size:12px;padding:11px 16px;top:30%;max-width:90vw}.big-overlay-text{font-size:50px}.help-modal{padding:16px}.help-header{padding:16px 20px}.help-body{padding:21px;max-height:calc(90dvh - 70px)}.setting-options{gap:5px}.setting-options label{padding:10px 8px;gap:6px}.setting-options small{font-size:9px}.setting-options b{font-size:10px}.compact-panel,.result-panel{padding:29px}}
@media(pointer:coarse){.bottom-hud{width:min(510px,calc(100% - 32px))}#serve-meter{margin-left:calc(50% - 110px)}}
@media(max-height:540px) and (orientation:landscape){.menu-wrap{width:45%;padding:18px 27px}.menu-art{inset:0 0 0 45%;height:100%}.menu-art:after{display:none}.game-title{font-size:55px;margin:18px 0 12px;line-height:.92}.studio-brand{font-size:8px}.studio-brand .tennis-mark{width:22px;height:22px}.menu-wrap #menu-tagline{font-size:17px;margin-bottom:4px}#menu-description{font-size:9px}.mode-picker{margin-top:14px;gap:5px}.mode-picker button{font-size:8px;padding:8px 0}#mode-description{font-size:9px;min-height:20px;margin:6px 0 8px}.btn{min-height:40px;padding:9px 16px}#start-btn{font-size:21px}.menu-secondary{margin-top:3px}.text-button{font-size:9px;padding:9px 0}.menu-foot{padding-top:8px;font-size:7px}.menu-foot b{font-size:7px}.menu-foot #personal-best{display:none}.game-tools{top:12px;right:16px}#ui-layer{padding:12px 16px}.scoreboard{width:190px}.score-row{padding:6px 11px}.scoreboard-header{padding:7px 11px}.bottom-hud{bottom:12px;width:340px}.hint-text{padding:6px 10px;font-size:10px}#serve-meter{margin-bottom:7px;padding:8px 12px}.row-meta{font-size:8px}.compact-panel,.result-panel{max-height:94dvh;padding:23px}.result-stats{padding:10px 0}#result-title{font-size:38px}.result-panel .tennis-mark,#result-eyebrow{display:none}#result-score{margin:8px 0 12px}#result-tip{margin:12px 0}.big-overlay-text{font-size:40px}}
@media(prefers-reduced-motion:reduce){*,*:before,*:after{animation:none!important;transition:none!important}}

/* Touch targets also remain available in narrow windows. */
.game-tools button{display:grid;place-items:center}
@media(max-width:760px){.big-overlay-text{font-size:clamp(27px,7vw,50px);max-width:94vw}}
@media(max-width:380px){.scoreboard{width:165px}.game-tools{right:12px}.game-tools button{width:33px;height:34px}.difficulty-tag{font-size:6px}.score-row{gap:7px}.player-name{font-size:10px}}

/* Online lobby shares the court's restrained cream/green palette. */
.online-menu-button { width:100%; margin-top:10px; min-height:44px; border:1px solid #8b9e7e; border-radius:3px; color:#244738; background:transparent; font-family:inherit; font-weight:700; font-size:12px; letter-spacing:.08em; cursor:pointer; }
.online-menu-button:hover { background:#e7edda; border-color:#688d43; }
.online-panel { max-width:450px; padding:24px 30px 20px; overflow-y:auto; }
.online-panel h2 { font-size:27px; letter-spacing:-.04em; margin:8px 0; }
.online-panel .help-header { padding:0; margin-bottom:2px; }
.online-eyebrow { display:flex; align-items:center; gap:8px; font-size:10px; letter-spacing:.17em; color:#6b8d6c; }
.online-eyebrow span { width:6px; height:6px; border-radius:50%; background:#80a349; }
#online-description { color:#747c70; font-size:12px; margin:0 0 18px; }
.online-field { display:block; font-size:10px; font-weight:700; letter-spacing:.07em; color:#657063; margin:12px 0 6px; }
.online-field input, .online-code-entry input { display:block; width:100%; margin-top:7px; min-height:42px; border:1px solid #cad0be; border-radius:5px; background:#fffdf6; padding:9px 12px; font:inherit; font-size:14px; color:#1b3b30; box-sizing:border-box; }
.online-panel .btn { width:100%; margin:12px 0 8px; min-height:46px; padding:13px 20px; font-size:14px; }
.online-friend-button { width:100%; min-height:40px; border:1px solid #b7c3a7; border-radius:5px; background:transparent; color:#244738; font:inherit; font-size:12px; cursor:pointer; }
.online-code-entry { display:flex; gap:8px; }
.online-code-entry input { margin:0; letter-spacing:.24em; min-width:0; text-transform:uppercase; }
.online-code-entry button { min-width:76px; background:#e4e9d9; color:#294331; border:0; border-radius:5px; font:inherit; font-size:12px; cursor:pointer; }
#online-room { margin-top:15px; background:#e7edda; border-radius:6px; padding:12px; text-align:center; }
#online-room > span { color:#647457; font-size:10px; }
#online-room > div { display:flex; justify-content:center; gap:12px; align-items:center; }
#online-room-code { color:#244738; font-size:25px; letter-spacing:.19em; font-variant-numeric:tabular-nums; user-select:all; }
#online-status { min-height:2.6em; margin:14px 0 5px; color:#44603f; font-size:12px; line-height:1.6; }
#online-status.online-error { color:#a54b36; }
#online-note { color:#7b8275; font-size:10px; line-height:1.65; margin:0 0 9px; }
#online-cancel-btn { display:block; margin:auto; }
.online-panel button:disabled, .online-panel input:disabled { opacity:.45; cursor:default; }
.online-panel input:focus-visible { outline:2px solid #74934a; outline-offset:2px; }
#online-connection { position:absolute; left:38px; top:208px; font-size:9px; letter-spacing:.06em; color:#e5f69d; background:#15372edb; border-radius:3px; padding:6px 8px; font-variant-numeric:tabular-nums; }
.is-online .player-name { max-width:115px; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }
.is-online .difficulty-tag { display:none; }
@media (max-height:700px) { .online-panel { padding:14px 24px; } .online-panel h2 { font-size:23px; } #online-description { margin-bottom:8px; } .online-panel .btn { margin-top:8px; } }
@media (max-width:760px) { #online-connection { left:18px; top:176px; } }
@media (max-width:500px) { .online-panel { padding:18px 22px; } .online-menu-button { min-height:40px; font-size:11px; } }

/* Club membership and the playable, three-dimensional character collection. */
.menu-wrap{overflow-y:auto;scrollbar-width:thin}.profile-menu-button{display:flex;align-items:center;gap:12px;flex-shrink:0;width:100%;margin-top:24px;padding:8px 12px 8px 6px;border:1px solid #c9d1c2;background:#e9eddf;border-radius:4px;text-align:left}.profile-menu-button:hover{border-color:#7c9470;background:#e3e9d6}.profile-menu-avatar{position:relative;width:45px;height:44px;overflow:hidden;background:#d9e2c9;border-radius:3px}.profile-menu-avatar img{position:absolute;width:67px;height:87px;max-width:none;left:-10px;top:-5px;object-fit:contain}.profile-menu-copy{display:flex;flex-direction:column;min-width:0;gap:3px}.profile-menu-copy small{font-size:9px;letter-spacing:.08em;color:#65765c}.profile-menu-copy strong{font-size:13px;letter-spacing:.05em;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.profile-menu-arrow{margin-left:auto;font-size:20px}.game-title{font-size:clamp(60px,7.3vw,120px);margin:26px 0 20px}#menu-description{white-space:normal}.mode-picker{margin-top:20px}.team-mode-control{display:flex;align-items:center;gap:12px;margin-top:22px}.team-mode-control>span{font-size:10px;font-weight:700;white-space:nowrap}.team-mode-picker{display:flex;flex:1;padding:3px;background:#e4e8da;border-radius:4px}.team-mode-picker button{flex:1;border:0;border-radius:3px;background:transparent;padding:9px 4px;font-size:11px;font-weight:750;white-space:nowrap}.team-mode-picker button[aria-pressed=true]{background:var(--pine);color:var(--paper)}#team-mode-note{margin:8px 0 0;font-size:10px;color:#6f7c68}.menu-foot{padding-top:20px}.profile-panel{width:min(100%,1020px);max-width:1020px;padding:30px;overflow-y:auto;max-height:calc(100dvh - 48px);border-radius:7px}.profile-heading{display:flex;align-items:flex-start;justify-content:space-between;gap:16px;margin-bottom:25px}.profile-eyebrow{font-size:9px;font-weight:800;letter-spacing:.19em;color:#6c7c65;margin-bottom:12px}.profile-heading h2{font-size:clamp(23px,3vw,31px);letter-spacing:-.025em;margin:0 0 8px}.profile-heading>div>p:last-child{font-size:12px;color:#6c7966;line-height:1.7}.profile-body{display:grid;grid-template-columns:minmax(0,.8fr) minmax(0,1.2fr);gap:30px}.profile-preview{--avatar-accent:#b8d84d;display:flex;flex-direction:column;position:relative;overflow:hidden;min-width:0;border-radius:4px;background:#dce4d1;background:linear-gradient(150deg,#e8eddf 5%,#d0dbc2 100%);border:1px solid #d0dac4;padding:20px}.profile-preview-tag{font-size:8px;letter-spacing:.16em;color:#688059;position:relative;z-index:1}.profile-stage{position:relative;flex:1;min-height:275px;display:grid;place-items:center}.profile-stage:before{content:'';position:absolute;width:74%;height:72%;border:1px solid #adbe9e;border-radius:50%;transform:rotate(-24deg);opacity:.5}.profile-stage-ring{position:absolute;width:58%;height:12%;background:#9bb38730;border:1px solid #a6b992;border-radius:50%;bottom:8%;transform:rotate(-7deg);box-shadow:0 14px 20px #738a4e16}.profile-stage img{position:relative;z-index:1;width:100%;height:100%;max-height:325px;object-fit:contain;filter:drop-shadow(7px 12px 7px #54734321)}.profile-preview-copy{position:relative;z-index:1;border-top:1px solid #b4c4a3;padding-top:14px}.profile-preview h3{font-size:27px;letter-spacing:.04em;font-weight:800}.profile-preview-copy p{font-size:11px;line-height:1.9;color:#516947;min-height:42px;margin-top:7px}.profile-options{min-width:0}.profile-name-field{display:block}.profile-name-field span{display:block;font-size:10px;font-weight:800;letter-spacing:.09em;margin-bottom:9px}.profile-name-field input{display:block;width:100%;height:46px;background:#fffdf4;border:1px solid #bfcab4;border-radius:3px;color:var(--ink);padding:10px 13px;font-size:16px;font-weight:650}.roster-label{display:flex;justify-content:space-between;font-size:8px;font-weight:800;letter-spacing:.12em;color:#6d7f61;margin:23px 0 10px}#character-roster{display:grid;grid-template-columns:repeat(5,minmax(0,1fr));gap:9px}.character-choice{position:relative;display:flex;flex-direction:column;align-items:center;justify-content:flex-end;min-width:0;aspect-ratio:.71;background:#e8eadf;border:1px solid #cbd3c2;border-radius:4px;padding:4px 2px 8px;overflow:hidden;transition:background .15s,border .15s}.character-choice:before{content:'';position:absolute;width:66%;height:43%;border-radius:50%;background:var(--avatar-color);opacity:.25;top:18%}.character-choice img{position:absolute;top:1px;width:112%;height:89%;object-fit:contain;max-width:none;z-index:1}.character-choice span{position:relative;z-index:2;font-size:9px;font-weight:850;letter-spacing:.07em}.character-choice:hover{border-color:#879d70;background:#dfe7d3}.character-choice[aria-pressed=true]{background:#dfe9c6;border:2px solid #43623c;padding-bottom:7px;box-shadow:0 0 0 2px #dfe9c6}.character-choice[aria-pressed=true]:after{content:'✓';position:absolute;right:3px;top:3px;z-index:3;width:15px;height:15px;line-height:15px;text-align:center;background:var(--pine);border-radius:50%;color:var(--lime);font-size:9px}#profile-note{font-size:10px;line-height:1.8;color:#798271;margin:14px 0 19px}.profile-actions{display:flex;gap:18px;align-items:center;justify-content:space-between}.profile-actions .btn{flex:1;min-height:51px;font-size:13px;padding:15px 42px 15px 17px}.profile-actions .btn:after{right:13px;font-size:24px}.profile-actions .text-button{white-space:nowrap;font-size:10px}.online-format-label{font-size:10px;font-weight:800;color:#3c654a;letter-spacing:.06em;background:#e1e8d5;padding:8px 12px;border-radius:3px}#online-roster{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:7px;margin-top:14px}.online-seat{display:grid;grid-template-columns:24px minmax(0,1fr);column-gap:6px;row-gap:4px;border:1px solid #ccd4c1;border-radius:4px;padding:9px;background:#e9edde}.online-seat>span{grid-row:span 2;font-weight:800;font-size:10px;color:#3c664b}.online-seat strong{font-size:11px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.online-seat small{font-size:8px;color:#728064}.online-seat.team-1{background:#ede6db;border-color:#d9caba}.online-seat.team-1>span{color:#9b654c}.row-left{min-width:0}.player-name{max-width:160px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.server-dot{flex-shrink:0}.is-online .player-name{max-width:160px}
@media(min-width:761px) and (max-height:870px){.menu-wrap{padding-top:24px;padding-bottom:16px}.profile-menu-button{margin-top:18px}.game-title{font-size:clamp(58px,6.5vw,89px);margin:21px 0 16px}#menu-tagline{font-size:24px;margin-bottom:7px}.team-mode-control{margin-top:16px}.mode-picker{margin-top:15px}#mode-description{margin:8px 0 9px;min-height:32px}.menu-foot{padding-top:10px}.menu-secondary{margin-top:6px}.btn{min-height:56px}}
@media(max-width:760px){.profile-menu-button{position:absolute;top:18px;right:22px;width:auto;min-width:135px;margin:0;padding:5px 9px;gap:8px}.profile-menu-avatar{width:30px;height:33px}.profile-menu-avatar img{width:49px;height:63px;left:-10px}.profile-menu-copy small{font-size:8px}.profile-menu-copy strong{font-size:10px;max-width:110px}.profile-menu-arrow{font-size:15px}.menu-wrap{padding-top:30px}.game-title{margin-top:30px}.team-mode-control{margin-top:17px}.profile-panel{padding:20px;max-height:calc(100dvh - 24px)}.profile-body{gap:18px;grid-template-columns:minmax(0,.7fr) minmax(0,1fr)}.profile-preview{padding:14px}.profile-stage{min-height:220px}.profile-heading{margin-bottom:20px}.profile-heading h2{font-size:22px}.character-choice{aspect-ratio:.68}#character-roster{gap:6px}.profile-actions{gap:10px;flex-wrap:wrap}.profile-actions .btn{min-width:180px}.is-online .player-name,.player-name{max-width:112px}.profile-eyebrow{font-size:8px}}
@media(max-width:560px){.profile-body{grid-template-columns:1fr}.profile-heading h2{font-size:21px}.profile-heading>div>p:last-child{font-size:10px}.profile-preview{display:grid;grid-template-columns:43% 57%;padding:12px;min-height:167px}.profile-preview-tag{position:absolute;left:12px;top:10px;font-size:6px}.profile-stage{grid-row:span 2;min-height:150px;height:157px}.profile-stage img{max-height:158px;width:122%;max-width:none}.profile-stage-ring{bottom:4%}.profile-preview-copy{align-self:center;border-top:0;border-left:1px solid #b4c4a3;padding:12px}.profile-preview h3{font-size:24px}.profile-preview-copy p{font-size:10px;min-height:0}.profile-name-field input{height:42px}.roster-label{margin-top:19px}.character-choice{aspect-ratio:.71}#profile-note{font-size:9px;margin:13px 0}.profile-actions .btn{font-size:12px}.profile-heading{margin-bottom:17px}.profile-panel{border-radius:5px}.studio-brand{gap:8px;font-size:8px;letter-spacing:.1em}.studio-brand .tennis-mark{width:24px;height:24px}.profile-menu-button{right:24px;top:19px}}
@media(prefers-reduced-motion:reduce){.character-choice{transition:none}}
@media(min-width:761px){.profile-menu-button{position:fixed;right:30px;top:26px;width:210px;margin:0;background:#f4f4e9f2;box-shadow:0 4px 20px #15372e18}.profile-menu-button:hover{background:#f1f3e4}}
@media(min-width:761px) and (max-height:780px){.profile-panel{padding:24px}.profile-heading{margin-bottom:18px}.character-choice{aspect-ratio:.80}.profile-stage{min-height:225px}.profile-stage img{max-height:290px}.roster-label{margin-top:18px}#profile-note{margin:12px 0 14px}}
#profile-pad-note{font-size:8px;color:#7a8670;line-height:1.8;text-align:right;margin-top:10px}
#result-modal{justify-content:flex-end;background:linear-gradient(90deg,#082b2310 15%,#082b2355 70%,#082b2370);padding-right:max(5vw,24px)}
#result-modal .result-panel{width:min(430px,44vw);box-shadow:0 20px 70px #092d2738}
@media(max-width:760px) and (orientation:portrait){#result-modal{align-items:flex-end;padding:14px;background:linear-gradient(0deg,#082b2355,transparent 75%)}#result-modal .result-panel{width:100%;max-height:59dvh;padding:22px}.result-panel .tennis-mark{display:none}#result-modal #result-title{font-size:40px}#result-modal .result-stats{padding:13px 0}#result-modal #result-tip{margin:12px 0}}
/* Controller focus uses the complete control, including radio/checkbox labels. */
body.using-gamepad .pad-focus{outline:3px solid #7caa38!important;outline-offset:4px;box-shadow:0 0 0 6px #d5ef625c!important}
body.using-gamepad input.pad-focus{outline-offset:3px}
body.using-gamepad .pad-focus input{outline:none}
.pad-focus{scroll-margin:16px}
#controller-hint{position:fixed;z-index:61;left:50%;bottom:max(9px,env(safe-area-inset-bottom));transform:translateX(-50%);max-width:calc(100% - 24px);width:max-content;padding:10px 16px;border:1px solid #d5ef6240;border-radius:5px;background:#103b32f5;color:#f4f4e9;font-size:11px;font-weight:600;line-height:1.7;text-align:center;white-space:pre-wrap;pointer-events:none;box-shadow:0 4px 18px #08251f24}
body.gamepad-layout .help-modal{padding-bottom:78px}
body.gamepad-layout .help-panel{max-height:calc(100dvh - 110px)}
body.gamepad-layout .help-body{max-height:calc(100dvh - 195px)}
body.gamepad-layout .menu-wrap{padding-bottom:76px}
#pad-keyboard{z-index:60}
.pad-key-panel{width:min(640px,100%);padding:25px;overflow-y:auto}
.pad-key-panel h2{font-size:23px;letter-spacing:-.02em}
#pad-key-description{margin:8px 0 15px;font-size:11px;line-height:1.7;color:var(--muted)}
.pad-text-row{display:flex;align-items:center;gap:12px;padding:9px 12px;border:1px solid #a6b99a;border-radius:4px;background:#fffdf6}
#pad-text-value{min-width:0;width:100%;font-size:20px;font-weight:700;letter-spacing:.06em;color:var(--pine);border:0;background:transparent;outline-offset:3px}
#pad-text-count{flex-shrink:0;font-size:11px;color:var(--muted);font-variant-numeric:tabular-nums}
.pad-text-editor{position:relative;min-width:0;width:100%}
#pad-text-visual{display:none;position:absolute;inset:0;overflow:hidden;white-space:pre;background:#fffdf6;font-size:20px;font-weight:700;letter-spacing:.06em;pointer-events:none}
body.using-gamepad #pad-text-visual{display:block}
.pad-text-caret{display:inline-block;width:3px;height:1.1em;margin:0 1px;background:#608932;vertical-align:-.13em}
.pad-key-pages{display:flex;gap:8px;margin:18px 0 15px}
.pad-key-panel button{min-height:38px;border:1px solid var(--line);border-radius:4px;background:#e8ecdf;font-weight:700}
.pad-key-panel button:hover{background:#dce6c3}
.pad-key-pages button{flex:1;font-size:12px}
.pad-key-pages button[aria-pressed=true]{background:var(--pine);color:var(--paper);border-color:var(--pine)}
.pad-key-grid{display:grid;grid-template-columns:repeat(10,minmax(0,1fr));gap:8px}
.pad-key-grid button{font-size:17px;background:#fffdf6;padding:5px 0}
.pad-key-edit{display:flex;gap:8px;padding:15px 0;border-bottom:1px solid var(--line)}
.pad-key-edit button{flex:1;font-size:11px;padding:5px}
.pad-key-actions{display:flex;gap:8px;margin-top:15px}
.pad-key-actions button{flex:1;font-size:11px;padding:6px}
#pad-key-done{background:var(--lime);border-color:#a7c854}
@media(max-width:500px){.pad-key-panel{padding:19px 16px}.pad-key-grid{gap:6px}.pad-key-grid button{min-height:33px;font-size:15px}.pad-key-pages,.pad-key-edit,.pad-key-actions{gap:6px}.pad-key-actions button{font-size:10px;padding:4px}.pad-key-panel h2{font-size:20px}#controller-hint{font-size:10px;padding:8px 10px}}
