.view-controls{position:fixed;z-index:4;right:18px;top:84px;display:flex;align-items:center;gap:6px;flex-wrap:wrap;max-width:540px;padding:7px 9px;border:1px solid #80c7b67a;border-radius:11px;background:#092537d9;box-shadow:0 8px 20px #0005;color:#dffbf2;font-size:11px}.view-controls label{display:flex;align-items:center;gap:5px;margin:0;color:#dffbf2}.view-controls select,.view-controls button{border:1px solid #70b7ad;border-radius:6px;background:#173e4b;color:#effffb;padding:6px 8px;font-size:11px}.view-controls button{cursor:pointer;font-weight:800}.view-controls strong{min-width:43px;text-align:center;color:#ffe6aa}.view-controls input{accent-color:#81d7c7}.view-controls button:disabled{opacity:.42;cursor:default}.panel-toggle{position:fixed;z-index:5;left:20px;top:83px;border:1px solid #65bfae;border-radius:8px;background:#153a45;color:#eafff8;padding:8px 12px;font-size:11px;font-weight:800;cursor:pointer}#practice-panel{top:127px;transition:transform .2s ease}#practice-panel.collapsed{transform:translate(calc(-100% - 26px));pointer-events:none}@media(max-width:800px){.view-controls{top:57px;right:8px;max-width:calc(100vw - 16px);font-size:10px}.view-controls label:last-child{display:none}.panel-toggle{top:57px;left:8px}#practice-panel{top:96px}}.control-notice{position:fixed;z-index:5;left:50%;top:17%;transform:translate(-50%);padding:11px 18px;border-radius:10px;background:#103747ef;border:1px solid #8ce9d1a8;color:#ecfff8;font:800 17px Inter,ui-sans-serif,system-ui,sans-serif;white-space:nowrap}.top-assist{display:flex;align-items:center;gap:7px;margin:0;color:#d5eee7;font-size:12px;font-weight:700;white-space:nowrap}.top-assist select,header #calibrate-reach{background:#143647;border:1px solid #70baa9;border-radius:7px;color:#f4fffd;padding:6px 8px;font-size:12px}header #calibrate-reach{cursor:pointer;white-space:nowrap}.reach-calibration{position:fixed;z-index:20;left:50%;top:50%;transform:translate(-50%,-50%);width:min(370px,90vw);padding:24px;border:1px solid #80e8cf;border-radius:18px;background:#092733f5;color:#fff;text-align:center;box-shadow:0 20px 80px #000b}.reach-calibration .reach-picture{font-size:50px;line-height:1.5}.reach-calibration h2{margin:8px 0}.reach-calibration p{min-height:2em}.reach-calibration button{padding:8px 20px;border:1px solid #80e8cf;border-radius:8px;background:#175c56;color:#fff;cursor:pointer}@media(max-width:700px){header #calibrate-reach{font-size:10px;padding:5px}.top-assist{font-size:10px}.top-assist select{font-size:10px;padding:5px}}body.attract>:not(#view):not(script){display:none!important}body.drills #practice-panel,body.drills #panel-toggle,body.drills .bottom{display:none}body.drills.custom #practice-panel,body.drills.custom #panel-toggle{display:revert}body.drill-open>header,body.drill-open .view-controls,body.drill-open #start-prompt{visibility:hidden}.drill-screen{position:fixed;inset:0;z-index:30;color:var(--ink);font-family:var(--font-body);background:linear-gradient(90deg,#040c16eb,#040c16b8 48%,#040c1659)}.drill-screen[hidden]{display:none}.drill-screen .ui-header{position:absolute}.drill-layout{position:absolute;left:var(--edge-x);right:var(--edge-x);top:calc(170 * var(--u));bottom:calc(60 * var(--u));display:grid;grid-template-columns:minmax(0,calc(700 * var(--u))) minmax(0,1fr);grid-template-rows:minmax(0,1fr);gap:calc(60 * var(--u))}.drill-list-wrap{display:flex;flex-direction:column;min-height:0}.drill-list{display:flex;flex-direction:column;gap:calc(4 * var(--u));overflow-y:auto;padding-right:calc(10 * var(--u))}.drill-item{display:grid;grid-template-columns:calc(52 * var(--u)) 1fr auto;align-items:center;gap:calc(16 * var(--u));border:0;cursor:pointer;text-align:left;background:none;color:var(--ink);padding:calc(14 * var(--u)) calc(18 * var(--u));font-family:var(--font-display);font-size:calc(46 * var(--u));line-height:1;border-radius:calc(10 * var(--u))}.drill-item .num{font-family:var(--font-label);font-size:calc(26 * var(--u));color:var(--muted);font-weight:700}.drill-item .ticks{display:flex;gap:calc(6 * var(--u))}.drill-item .ticks i{width:calc(14 * var(--u));height:calc(14 * var(--u));border-radius:50%;border:calc(2 * var(--u)) solid var(--muted)}.drill-item .ticks i.on{background:var(--accent);border-color:var(--accent)}.drill-item[aria-current=true]{background:var(--accent);color:var(--navy)}.drill-item .best{font-family:var(--font-label);font-size:calc(24 * var(--u));font-weight:700;color:var(--muted)}.drill-item[aria-current=true] .num,.drill-item[aria-current=true] .best{color:var(--navy)}.drill-item[aria-current=true] .ticks i.on{background:var(--navy)}.drill-item:not([aria-current=true]):hover{background:#ffffff0f}.drill-item:focus-visible,.drill-item[data-focus]{background:var(--accent);color:var(--navy);outline:3px solid var(--ink);outline-offset:2px}.drill-item:focus-visible .num,.drill-item:focus-visible .ticks i{color:var(--navy);border-color:var(--navy)}.drill-item.unavailable{opacity:.45}.drill-extra{margin-top:calc(18 * var(--u));padding-top:calc(14 * var(--u));border-top:1px solid rgba(255,255,255,.12);display:flex;flex-wrap:wrap;gap:calc(10 * var(--u))}.drill-extra button,.drill-extra a{border:1px solid rgba(255,255,255,.22);background:none;color:var(--ink-soft);font-family:var(--font-label);font-weight:700;font-size:calc(24 * var(--u));letter-spacing:.08em;padding:calc(12 * var(--u)) calc(20 * var(--u));border-radius:999px;cursor:pointer;text-decoration:none}.drill-extra button:focus-visible,.drill-extra a:focus-visible{background:var(--accent);color:var(--navy);outline:none}.drill-detail{align-self:start;max-height:100%;overflow-y:auto;padding:calc(40 * var(--u));border-radius:calc(24 * var(--u));display:grid;gap:calc(22 * var(--u));max-width:calc(820 * var(--u))}.drill-detail .ui-title{font-size:calc(84 * var(--u))}.drill-detail .how{font-size:calc(30 * var(--u));line-height:1.45;color:var(--ink-soft);margin:0}.drill-detail .note{font-size:calc(26 * var(--u));color:var(--accent);margin:0}.drill-detail .best{font-family:var(--font-label);font-weight:700;font-size:calc(26 * var(--u));letter-spacing:.08em;color:var(--muted)}.drill-detail .row{display:flex;flex-wrap:wrap;align-items:center;gap:calc(20 * var(--u))}.drill-hud{position:fixed;z-index:20;top:calc(64px + env(safe-area-inset-top));left:calc(20px + env(safe-area-inset-left));display:grid;justify-items:start;gap:4px;pointer-events:none;color:var(--ink);text-align:left}body.play-drill .drill-hud{top:calc(20px + env(safe-area-inset-top))}.drill-hud>.name,.drill-hud>.count{padding:0 14px;background:#040c169e;border-radius:8px}.drill-hud>.name{padding:3px 14px}.drill-hud[hidden]{display:none}.drill-hud .name{font-family:var(--font-label);font-weight:700;font-size:13px;letter-spacing:.14em;color:var(--muted)}.drill-hud .count{font-family:var(--font-display);font-size:40px;line-height:1}.drill-hud .count small{font-size:20px;color:var(--muted)}.drill-hud .streak{font-family:var(--font-label);font-size:12px;letter-spacing:.12em;color:var(--accent);min-height:14px}.drill-hud .flag{margin-top:6px;padding:6px 14px;border-radius:999px;background:#040c16c7;font-family:var(--font-label);font-weight:700;font-size:15px;letter-spacing:.06em;opacity:0;transition:opacity .18s}.drill-hud .flag.on{opacity:1}.drill-hud .flag.good{color:#7ef0b0}.drill-hud .flag.bad{color:#ffb4a4}.drill-hud .countdown{position:fixed;left:50%;top:30vh;transform:translate(-50%);font-family:var(--font-display);font-size:96px;line-height:1}.drill-card{position:fixed;inset:0;z-index:35;display:grid;place-items:center;background:#040c168c}.drill-card[hidden]{display:none}.drill-card .drill-panel{width:min(calc(980 * var(--u)),calc(100vw - 32px));max-height:calc(100dvh - 32px);overflow-y:auto;padding:calc(48 * var(--u));border-radius:calc(24 * var(--u));display:grid;gap:calc(24 * var(--u));color:var(--ink)}.drill-card .ui-title{font-size:calc(92 * var(--u))}.drill-card .stats{display:grid;grid-template-columns:repeat(4,1fr);gap:calc(14 * var(--u))}.drill-card .stats div{padding:calc(18 * var(--u));border-radius:calc(14 * var(--u));background:#ffffff0f;text-align:center}.drill-card .stats strong{display:block;font-family:var(--font-display);font-size:calc(64 * var(--u));line-height:1}.drill-card .stats span{font-family:var(--font-label);font-weight:700;font-size:calc(20 * var(--u));letter-spacing:.1em;color:var(--muted)}.drill-card .verdict{font-family:var(--font-label);font-weight:700;font-size:calc(32 * var(--u));letter-spacing:.08em}.drill-card .verdict.pass{color:#7ef0b0}.drill-card .verdict.fail{color:var(--accent)}.drill-card .lines{margin:0;padding:0;list-style:none;display:grid;gap:calc(8 * var(--u));font-size:calc(28 * var(--u));color:var(--ink-soft)}.drill-card .buttons{display:flex;flex-wrap:wrap;gap:calc(14 * var(--u));position:sticky;bottom:calc(-48 * var(--u));margin:0 calc(-48 * var(--u)) calc(-48 * var(--u));padding:calc(18 * var(--u)) calc(48 * var(--u)) calc(30 * var(--u));background:linear-gradient(180deg,#08142200,#081422f5 38%)}.drill-card .ghost{background:none;border:1px solid rgba(255,255,255,.3);color:var(--ink)}.drill-card .ghost:focus-visible{background:var(--accent);color:var(--navy)}.drill-card .diagram{display:block;height:min(34vh,calc(420 * var(--u)));width:auto;justify-self:center}@media(max-width:700px){.drill-layout{grid-template-columns:1fr;grid-template-rows:none;top:calc(140 * var(--u));overflow-y:auto;gap:calc(24 * var(--u))}.drill-list-wrap{min-height:auto}.drill-list{overflow:visible}.drill-item{font-size:calc(54 * var(--u))}.drill-detail{max-width:none}.drill-card .stats{grid-template-columns:repeat(2,1fr)}}body.play-drill .pg-scorebug{visibility:hidden}body.drills #zoom-out,body.drills #zoom-in,body.drills #step-in,body.drills #step-back,body.drills #stance-label,body.drills #warmup-btn,body.drills #targets-btn,body.drills .play-match,body.drills .view-controls label{display:none}body.drills #practice-pause{margin-left:auto}body.drills #practice-panel #pause{display:none}.stroke-demo{display:grid;justify-items:center;gap:10px;pointer-events:none}.drill-hud~.stroke-demo,body>.stroke-demo{position:fixed;z-index:21;left:50%;bottom:calc(18px + env(safe-area-inset-bottom));transform:translate(-50%);width:min(560px,calc(100vw - 32px));padding:14px 16px 12px;border-radius:18px;background:#040c16b8}.stroke-demo[hidden]{display:none}.stroke-demo .stage{position:relative;width:240px;height:170px}.stroke-demo[data-hand=left] .stage{transform:scaleX(-1)}.stroke-demo .phone{position:absolute;left:0;top:0;width:34px;height:62px;margin:-31px 0 0 -17px;border-radius:9px;border:3px solid #1a1d22;background:radial-gradient(circle at 50% 40%,#e2493f,#a8141a);box-shadow:0 6px 18px #000a,0 0 14px #ff5a4a66;animation:1.9s cubic-bezier(.45,0,.2,1) infinite both}.stroke-demo .trail{position:absolute;inset:0;border-radius:50%;opacity:0}.stroke-demo .caption{margin:0;text-align:center;font-family:var(--font-body);font-size:15px;line-height:1.4;color:var(--ink)}.stroke-demo[data-motion=forehand] .phone{animation-name:demo-forehand}.stroke-demo[data-motion=backhand] .phone{animation-name:demo-backhand}.stroke-demo[data-motion=switch] .phone{animation-name:demo-switch;animation-duration:3.4s}.stroke-demo[data-motion=push] .phone{animation-name:demo-push}.stroke-demo[data-motion=loop] .phone{animation-name:demo-loop}.stroke-demo[data-motion=block] .phone{animation-name:demo-block;animation-duration:1.2s}.stroke-demo[data-motion=smash] .phone{animation-name:demo-smash;animation-duration:1.5s}@keyframes demo-forehand{0%,12%{transform:translate(196px,140px) rotate(28deg) scale(1);opacity:1}55%{transform:translate(92px,46px) rotate(-18deg) scale(.82);opacity:1}72%{transform:translate(84px,38px) rotate(-22deg) scale(.8);opacity:0}to{transform:translate(196px,140px) rotate(28deg) scale(1);opacity:0}}@keyframes demo-backhand{0%,12%{transform:translate(96px,118px) rotate(-30deg) scale(1);opacity:1}55%{transform:translate(176px,58px) rotate(12deg) scale(.82);opacity:1}72%{transform:translate(182px,52px) rotate(16deg) scale(.8);opacity:0}to{transform:translate(96px,118px) rotate(-30deg) scale(1);opacity:0}}@keyframes demo-switch{0%,6%{transform:translate(196px,140px) rotate(28deg) scale(1);opacity:1}28%{transform:translate(92px,46px) rotate(-18deg) scale(.82);opacity:1}36%{transform:translate(88px,42px) rotate(-20deg) scale(.8);opacity:0}44%,50%{transform:translate(96px,118px) rotate(-30deg) scale(1);opacity:1}78%{transform:translate(176px,58px) rotate(12deg) scale(.82);opacity:1}88%,to{transform:translate(180px,54px) rotate(14deg) scale(.8);opacity:0}}@keyframes demo-push{0%,15%{transform:translate(140px,100px) rotate(8deg) scaleY(.62) scale(1);opacity:1}55%{transform:translate(128px,70px) rotate(4deg) scaleY(.55) scale(.82);opacity:1}72%,to{transform:translate(126px,66px) rotate(4deg) scaleY(.55) scale(.8);opacity:0}}@keyframes demo-loop{0%,12%{transform:translate(190px,156px) rotate(40deg) scale(1.02);opacity:1}48%{transform:translate(110px,22px) rotate(-30deg) scale(.8);opacity:1}66%,to{transform:translate(100px,14px) rotate(-34deg) scale(.78);opacity:0}}@keyframes demo-block{0%,20%{transform:translate(132px,92px) rotate(-6deg) scale(1);opacity:1}55%{transform:translate(128px,78px) rotate(-8deg) scale(.9);opacity:1}80%,to{transform:translate(128px,76px) rotate(-8deg) scale(.9);opacity:0}}@keyframes demo-smash{0%,18%{transform:translate(168px,18px) rotate(-12deg) scale(1.08);opacity:1}45%{transform:translate(112px,140px) rotate(14deg) scale(.86);opacity:1}62%,to{transform:translate(108px,148px) rotate(16deg) scale(.84);opacity:0}}@media(prefers-reduced-motion:reduce){.stroke-demo .phone{animation-duration:4s}}.drill-card .stroke-demo{margin:4px 0}.drill-card .drill-score{font-family:var(--font-display);font-size:clamp(64px,14vw,120px);line-height:1;text-align:center;color:var(--ink)}.drill-card .drill-score small{font-size:.42em;color:var(--muted)}.drill-card .drill-score+.label{text-align:center;font-family:var(--font-label);font-weight:700;letter-spacing:.14em;color:var(--muted);margin-top:-6px}.review-dialog{width:min(92vw,520px);box-sizing:border-box;padding:24px;border:1px solid rgba(255,255,255,.14);border-radius:16px;background:#0b1626;color:#f3f7fb;font-family:Barlow,system-ui,sans-serif;text-align:center}.review-dialog::backdrop{background:#040910c7}.review-dialog h2{margin:0 0 14px;font:400 30px/1.1 Anton,Impact,sans-serif;letter-spacing:.5px}.review-stars{display:flex;justify-content:center;gap:6px;margin-bottom:14px}.review-stars button{width:52px;height:52px;padding:0;border:0;border-radius:10px;background:transparent;cursor:pointer;font-size:40px;line-height:52px;color:#f3f7fb47;transition:color .12s,transform .12s}.review-stars button.on{color:#ff8a2a}.review-stars button:hover{transform:scale(1.1)}.review-stars button:focus-visible{outline:2px solid #ff8a2a;outline-offset:2px}.review-dialog textarea{width:100%;box-sizing:border-box;resize:vertical;min-height:96px;padding:12px;border-radius:10px;border:1px solid rgba(255,255,255,.18);background:#ffffff0f;color:inherit;font-family:inherit;font-size:16px;line-height:1.4}.review-dialog textarea:focus{outline:2px solid #ff8a2a;outline-offset:1px}.review-status{min-height:1.4em;margin:10px 0;color:#d6e2ee}.review-actions{display:flex;gap:10px;justify-content:center;flex-wrap:wrap}.review-dialog .review-send,.review-dialog .review-cancel{min-width:150px;padding:12px 18px;border-radius:10px;cursor:pointer;font:700 17px/1 Barlow Condensed,Barlow,sans-serif;letter-spacing:.6px;text-transform:uppercase}.review-dialog .review-send{border:0;background:#ff8a2a;color:#0b1626}.review-dialog .review-cancel{border:1px solid rgba(255,255,255,.3);background:transparent;color:inherit}.review-dialog .review-send:disabled{opacity:.6;cursor:default}.review-dialog button:focus-visible{outline:2px solid #f3f7fb;outline-offset:2px}
