@font-face{font-family:Archivo;src:url('/fonts/archivo-regular.ttf');font-weight:400;font-display:swap}@font-face{font-family:Archivo;src:url('/fonts/archivo-extrabold.ttf');font-weight:800;font-display:swap}
:root{font-family:Archivo,Arial,sans-serif;color:#102951;background:#1559d3}*{box-sizing:border-box}html,body{margin:0;width:100%;height:100%;overflow:hidden;overscroll-behavior:none}[hidden]{display:none!important}button{font:inherit;cursor:pointer;-webkit-tap-highlight-color:transparent;touch-action:manipulation}button:focus-visible{outline:3px solid #ffd938;outline-offset:4px}#game{width:100%;height:100dvh;position:relative;overflow:hidden}#court{width:100%;height:100%;display:block;touch-action:none;outline:none}header{position:absolute;left:max(24px,env(safe-area-inset-left));right:max(24px,env(safe-area-inset-right));top:max(18px,env(safe-area-inset-top));height:48px;display:flex;justify-content:space-between;align-items:center;pointer-events:none}.brand{width:154px;background:white;padding:11px 12px;border-radius:6px;transform:rotate(-2deg);box-shadow:0 4px 0 #0e2f7420}.brand img{width:100%;display:block}.brand i{display:block;height:4px;margin-top:5px;background:linear-gradient(90deg,#2569ed 0 50%,#fa694d 50% 76%,#ffda36 76%)}.tools{display:flex;gap:8px;pointer-events:auto}.tools button{border:1px solid #ffffff50;background:#143f9400;border-radius:22px;color:#fff;padding:10px 14px;min-height:42px;font-size:14px}.tools button:hover{background:#ffffff20}#score{position:absolute;left:50%;transform:translateX(-50%);display:flex;align-items:center;gap:18px;color:#fff}#score b{font-size:38px;font-weight:800}#score span{font-size:13px;font-weight:800;letter-spacing:1px}#score em{font-style:normal;color:#99c3ff}#you{color:#ffde3b}.panel{position:absolute;left:50%;top:50%;transform:translate(-50%,-50%);width:330px;max-width:calc(100% - 32px);padding:27px;background:#fff;border-radius:12px;text-align:center;box-shadow:9px 10px 0 #07296850}.eyebrow{font-size:12px;font-weight:800;letter-spacing:2px;color:#50688d;margin:0 0 10px}h1{font-size:40px;line-height:1.05;letter-spacing:-1.6px;font-weight:800;margin:0}h1 span{color:#2468ed}#portrait{display:block;width:230px;height:161px;margin:0 auto -12px}h2{font-size:34px;letter-spacing:-1px;margin:8px 0 18px}.choose{display:flex;align-items:center;justify-content:center;gap:26px}.choose button{border:0;border-radius:50%;background:#edf2fd;color:#143663;font-size:29px;width:42px;height:42px;line-height:1}.choose span{font-size:16px;font-weight:800;min-width:60px;letter-spacing:2px}.instruction{font-size:16px;line-height:1.45;margin:17px 0}.primary{display:block;width:100%;border:0;border-radius:7px;background:#ffdb36;color:#112d4a;font-size:18px;font-weight:800;padding:15px 18px;box-shadow:0 4px 0 #dbb327;min-height:52px}.primary:hover{background:#ffe96a}.primary:active{transform:translateY(3px);box-shadow:0 1px 0 #dbb327}.small{font-size:12px;color:#687e9d;margin:13px 0 0}.quiet{font-size:14px;color:#50688d;background:transparent;border:0;padding:14px 8px 0;min-height:40px}#callout{position:absolute;left:50%;top:17%;transform:translateX(-50%) rotate(-2deg);background:#ffdf3b;color:#163864;font-size:24px;font-weight:800;padding:9px 18px;border-radius:5px;opacity:0;pointer-events:none;box-shadow:0 4px 0 #0e397b30;transition:opacity .12s;white-space:nowrap}#callout.show{opacity:1}footer{position:absolute;bottom:max(12px,env(safe-area-inset-bottom));left:max(25px,env(safe-area-inset-left));right:max(25px,env(safe-area-inset-right));display:flex;align-items:center;justify-content:space-between;color:#d9eaff;pointer-events:none}footer button{pointer-events:auto;color:#d9eaff;background:none;border:0;padding:10px 0;min-height:44px;font-size:14px}footer p{font-size:14px;margin:0;text-align:center}#streak{font-size:12px;letter-spacing:1px}#streak b{font-size:23px;margin-left:5px;color:#ffdf3b}#summary,#lesson{font-size:16px;line-height:1.5}#lesson{color:#52708c}.compact{width:300px}.compact h2{margin-bottom:25px}
@media(max-width:600px){header{left:14px;right:14px;top:12px}.brand{width:125px;padding:9px}.tools button{font-size:12px;padding:8px 10px;min-height:40px}#score{top:59px;gap:15px}#score b{font-size:30px}.panel{padding:22px;width:305px}h1{font-size:35px}#portrait{width:210px;height:147px}footer{left:18px;right:18px;bottom:max(7px,env(safe-area-inset-bottom))}footer p{position:absolute;bottom:47px;left:0;right:0;font-size:12px}#callout{top:23%;font-size:19px}}
@media(orientation:landscape) and (max-height:550px){header{top:9px;left:18px;right:18px}.brand{width:132px;padding:8px 10px}.tools button{min-height:36px;font-size:12px;padding:7px 11px}#score{top:0;gap:15px}#score b{font-size:30px}.panel{width:500px;padding:19px 24px;display:grid;grid-template-columns:1fr 1fr;column-gap:20px;align-items:center}.panel>.eyebrow,.panel>h1,.panel>.instruction,.panel>#play,.panel>.small{grid-column:2}.panel>.eyebrow{font-size:10px;letter-spacing:1px;margin:0 0 5px}.panel>h1{font-size:31px}.panel>#portrait{grid-column:1;grid-row:1/5;width:220px;height:154px;margin:0}.panel>.choose{grid-column:1;grid-row:5/7;gap:17px}.panel>.instruction{font-size:14px;margin:12px 0}.panel>.small{font-size:11px}.primary{font-size:15px;min-height:45px;padding:11px 14px}#finished,#paused{display:block;width:330px}#finished h2{font-size:25px;margin:5px 0 10px}#finished p{font-size:14px;margin:8px 0 12px}footer{bottom:4px;left:20px;right:20px}footer p{position:static;font-size:12px}footer button{font-size:12px;min-height:36px}#streak b{font-size:19px}#callout{top:18%;font-size:20px}}
/* White surrounds keep the court distinct from the controls. */
:root{background:#f8fbff}.brand{box-shadow:none}.tools button{color:#193b66;background:#fff;border-color:#ccd9e9}.tools button:hover{background:#eef4fc}#score{color:#183b68}#score em{color:#6d829d}#you{color:#1e62d5}.panel{box-shadow:6px 8px 0 #153f7920}.lessons{display:flex;gap:6px;margin:13px 0 0}.lessons button{flex:1;border:1px solid #d1dcec;background:#f5f8ff;color:#183b68;padding:10px 5px;border-radius:6px;font-size:14px;min-height:44px}.lessons button[aria-pressed=true]{background:#183d73;color:white;border-color:#183d73}#brief{margin:9px 0 13px;line-height:1.4}footer{color:#173c6d;display:grid;grid-template-columns:70px 1fr 80px;gap:7px;bottom:max(10px,env(safe-area-inset-bottom))}footer button{color:#173c6d}footer p{grid-column:2;grid-row:2;position:static;min-height:34px;display:flex;align-items:center;justify-content:center;font-size:14px;line-height:1.35}#challenge-status{grid-column:1/-1;text-align:center;font-size:13px;font-weight:800;color:#174c97;letter-spacing:.15px}#shot-controls{grid-column:1/-1;display:flex;justify-content:center;gap:16px;pointer-events:auto;grid-row:3}.shot-group{display:flex;gap:5px}.shot-group button{min-width:76px;min-height:44px;padding:9px 15px;border-radius:7px;border:1px solid #c5d6ed;background:#fff;color:#244e7d;font-size:14px;font-weight:800}.shot-group button[aria-pressed=true]{background:#185ece;color:white;border-color:#185ece}.shot-group button[data-style=attack][aria-pressed=true]{background:#ffda38;color:#173865;border-color:#d8b722}#players{grid-column:1;grid-row:2}#streak{grid-column:3;grid-row:2;text-align:right}#streak b{color:#185ece}.instruction{margin:10px 0;font-size:14px}.panel{padding:20px 25px}#portrait{height:126px;width:180px}.choose button{min-width:42px}#callout{font-size:20px}
@media(max-width:600px){footer{left:12px;right:12px;gap:4px}footer p{font-size:13px;min-height:49px}#challenge-status{font-size:12px}#shot-controls{gap:10px}.shot-group{gap:4px}.shot-group button{min-width:0;padding:10px 11px;font-size:13px;min-height:44px}.panel{padding:18px 22px}#portrait{height:112px;width:160px}.instruction{margin:9px 0}#brief{font-size:12px}.small{margin-top:9px}#callout{font-size:17px}.lessons button{font-size:13px}}
@media(orientation:landscape) and (max-height:550px){.panel{width:570px;padding:15px 22px;grid-template-columns:180px 1fr;column-gap:20px}.panel>#portrait{grid-row:1/6;width:180px;height:126px}.panel>.choose{grid-row:6/9}.panel>.lessons,.panel>#brief{grid-column:2}.panel>.instruction{margin:7px 0;font-size:13px}.panel>.lessons{margin-top:0}.lessons button{min-height:36px;padding:6px;font-size:12px}#brief{margin:6px 0 8px;font-size:12px}.panel>.small{margin-top:8px}.panel>h1{font-size:28px}.panel>.eyebrow{font-size:12px}.primary{min-height:41px}footer{bottom:3px;gap:2px}footer p{min-height:27px;font-size:13px}.shot-group button{min-height:38px;padding:7px 15px}#challenge-status{font-size:12px}#callout{font-size:17px}#finished{width:430px;padding:15px 24px}}

.brand{pointer-events:auto;text-decoration:none}#portrait{image-rendering:auto}
/* Match and practice extend the approved court layout. */
#set-score{position:absolute;top:100%;left:50%;transform:translateX(-50%);white-space:nowrap;font-size:11px;letter-spacing:.5px;font-weight:800;color:#456181}
.mode-choice{display:flex;gap:6px;margin:10px 0}.mode-choice button{flex:1;border:1px solid #c6d5e7;border-radius:7px;padding:10px 5px;min-height:44px;font-size:14px;font-weight:800;background:#f5f8ff;color:#173c6d}.mode-choice button[aria-pressed=true]{background:#185ece;color:#fff;border-color:#185ece}
#match-options{text-align:left}#match-options label{font-size:12px;font-weight:800;display:block;margin:8px 0 5px}#scenario{font:inherit;font-size:14px;width:100%;min-height:40px;padding:8px;border:1px solid #c6d5e7;border-radius:6px;color:#173c6d;background:white}.coach-toggle{display:flex;justify-content:center;align-items:center;gap:7px;font-size:14px;min-height:35px;margin-top:6px}.coach-toggle input{width:18px;height:18px;accent-color:#185ece}
#menu{max-height:calc(100dvh - 24px);overflow-y:auto}#menu #portrait{height:98px;width:140px}#menu h1{font-size:33px}#menu .eyebrow{margin-bottom:5px}#menu .instruction{font-size:13px;line-height:1.3}
#serve-button{grid-column:2;grid-row:2;justify-self:center;min-width:140px;border:0;border-radius:7px;background:#ffda38;color:#173865;font-weight:800;padding:10px 24px}
#finish-practice{position:absolute;bottom:100%;right:0;font-size:11px;min-height:30px;padding:0 3px;transform:translateY(-12px)}
.shot-group button[data-style=slice][aria-pressed=true]{background:#12385f;color:white}
@media(max-width:600px){#shot-controls{gap:7px}.shot-group button{padding:10px 8px;font-size:12px}#set-score{font-size:10px}#menu{padding:15px 20px}#menu #portrait{height:84px;width:120px}#menu .instruction{font-size:12px}#finish-practice{transform:translateY(-13px);font-size:10px}#challenge-status{padding-right:0}}
@media(orientation:landscape) and (max-height:550px){#menu{width:620px;grid-template-columns:160px 1fr;padding:14px 22px;column-gap:24px;max-height:calc(100dvh - 16px)}#menu>.mode-choice,#menu>#match-options,#menu>#practice-options,#menu>.coach-toggle{grid-column:2}#menu #portrait{grid-column:1;grid-row:1/7;width:160px;height:112px}#menu>.choose{grid-column:1;grid-row:7/10}#menu h1{font-size:25px}#menu .instruction{font-size:12px;margin:4px 0}#menu .eyebrow{display:none}.mode-choice{margin:4px 0}.mode-choice button{min-height:36px;padding:6px;font-size:13px}#match-options label{display:none}#scenario{min-height:34px;padding:5px}.coach-toggle{margin:0;min-height:27px;font-size:12px}#menu #brief{margin:3px 0 6px}#set-score{font-size:10px}#finish-practice{transform:translateY(-4px)}}
#finish-practice{position:static;grid-column:1;grid-row:2;transform:none;font-size:12px;line-height:1.3;min-height:44px;padding:4px 0;text-align:left}

#serve-button{position:relative;touch-action:none;user-select:none;-webkit-user-select:none;padding-bottom:15px}#serve-button.charging{background:#173c6d;color:white}#serve-button.charging::before{content:"";position:absolute;left:10%;right:10%;bottom:5px;height:6px;border-radius:3px;background:linear-gradient(90deg,#668ab4 0 55.7%,#ffda38 55.7% 82.1%,#fa7056 82.1%)}#serve-button.charging::after{content:"";position:absolute;left:calc(10% + var(--charge)*.8);bottom:2px;height:12px;width:3px;background:white;border-radius:2px}

#court,#serve-button{-webkit-touch-callout:none;-webkit-user-select:none;user-select:none}
