/* Match geometry is fixed across serves, rallies, results and the next point. */
#rally-game.dy-edition.pro-v2.battle-playing{
 --court-header-height:98px;--coach-dock-height:32px;
 --court-dock-height:calc(72px + env(safe-area-inset-bottom,0px));
 --move-size:clamp(72px,23vw,92px);--shot-pad-size:132px;--shot-button-size:47px;--lock-size:clamp(56px,17vw,72px);
}
#rally-game.dy-edition.pro-v2.battle-playing .battle-shell{
 display:grid!important;grid-template-columns:minmax(0,1fr);
 grid-template-rows:var(--court-header-height) minmax(0,1fr) var(--court-dock-height);
}
#rally-game.dy-edition.pro-v2.battle-playing .battle-shell>.battle-court-wrap{
 position:relative!important;inset:auto!important;grid-area:2/1/3/2;min-width:0;min-height:0;overflow:hidden;
}
#rally-game.dy-edition.pro-v2.battle-playing .battle-shell>.battle-court-wrap canvas{
 display:block;height:100%!important;width:100%!important;max-height:none!important;aspect-ratio:auto!important;
}
#rally-game.dy-edition.pro-v2.battle-playing .battle-shell>.battle-controls{
 grid-area:2/1/3/2;position:absolute!important;inset:0!important;min-height:0;
}
/* One message strip replaces overlapping on-court result and instruction cards. */
#rally-game.dy-edition.pro-v2.battle-playing .pro-live-hud,
#rally-game.dy-edition.pro-v2.battle-playing .dy-contact-label{display:none!important}
#rally-game.dy-edition.pro-v2.battle-playing .battle-shell>.battle-status,
#rally-game.dy-edition.pro-v2.battle-playing .battle-shell>.hh-point-feedback{
 position:absolute!important;inset:38px 0 auto!important;transform:none!important;width:100%!important;
 height:28px!important;min-height:0;max-width:none!important;box-sizing:border-box;margin:0!important;
 padding:5px 12px!important;background:#132a3b!important;border:0!important;border-radius:0!important;
 box-shadow:none!important;color:#e3edf0;font:600 10px/18px Arial!important;text-align:center;
 white-space:nowrap;overflow:hidden;text-overflow:ellipsis;z-index:14;pointer-events:none;
}
#rally-game.dy-edition.pro-v2.battle-playing .battle-shell>.hh-point-feedback{display:flex;justify-content:center;align-items:center;gap:12px}
#rally-game.dy-edition.pro-v2.battle-playing .hh-point-feedback strong{min-width:0;max-width:45%;font:900 11px/18px Arial;overflow:hidden;text-overflow:ellipsis;color:#9cebd4}
#rally-game.dy-edition.pro-v2.battle-playing .hh-point-feedback span{min-width:0;margin:0;font:10px/18px Arial;overflow:hidden;text-overflow:ellipsis;color:#d8e7ed}
#rally-game.dy-edition.pro-v2.battle-playing .hh-point-feedback[hidden]{display:none!important}
#rally-game.dy-edition.pro-v2.battle-playing[data-point-feedback=true] .battle-shell>.battle-status{visibility:hidden}
#rally-game.dy-edition.pro-v2.battle-playing .pro-coach-live{height:32px!important}
#rally-game.dy-edition.pro-v2.battle-playing .pro-coach-live .pro-coach-avatar{height:25px!important;flex-basis:24px!important}
#rally-game.dy-edition.pro-v2.battle-playing .pro-coach-live .pro-coach-cloud{min-height:22px!important;border-radius:10px!important;white-space:nowrap;overflow:hidden}
#rally-game.dy-edition.pro-v2.battle-playing .pro-coach-live .pro-coach-message{font-size:9px!important;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.pro-court-dock{display:none}
#rally-game.dy-edition.pro-v2.battle-playing .battle-shell>.pro-court-dock{
 grid-area:3/1/4/2;display:flex;align-items:center;gap:12px;min-width:0;min-height:0!important;
 height:100%!important;max-height:100%;overflow:hidden;box-sizing:border-box;
 padding:6px max(12px,env(safe-area-inset-right,0px)) calc(6px + env(safe-area-inset-bottom,0px)) max(12px,env(safe-area-inset-left,0px));
 background:#102333;border-top:1px solid #67828f;color:#e4eef0;z-index:10;
}
#rally-game.dy-edition.pro-v2.battle-playing .pro-court-dock>.pro-authenticity{
 position:static!important;inset:auto!important;transform:none!important;max-width:none;flex:1 1 160px;
 min-width:0;padding:0;background:none;border:0;border-radius:0;gap:3px;letter-spacing:.3px;font-size:9px;
}
#rally-game.dy-edition.pro-v2.battle-playing .pro-auth-phase,
#rally-game.dy-edition.pro-v2.battle-playing .pro-auth-ball{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;font-size:9px}
#rally-game.dy-edition.pro-v2.battle-playing .pro-court-dock>.pro-authenticity label{display:flex;flex-wrap:wrap;gap:3px 7px;font-size:9px}
#rally-game.dy-edition.pro-v2.battle-playing .pro-court-dock>.pro-skill-panel{
 position:static!important;inset:auto!important;transform:none!important;flex:1 1 210px;min-width:0!important;
 width:auto!important;max-width:290px!important;pointer-events:auto;text-align:center;max-height:100%;overflow:hidden;
 border:0;box-shadow:none;
}
#rally-game.dy-edition.pro-v2.battle-playing .pro-court-dock #pro-finish-panel>div{padding:0;border:0;background:none;gap:8px;min-height:0}
#rally-game.dy-edition.pro-v2.battle-playing .pro-court-dock .pro-focus-info{display:block!important;min-width:0;flex:1}
#rally-game.dy-edition.pro-v2.battle-playing .pro-court-dock #pro-finish-cue,
#rally-game.dy-edition.pro-v2.battle-playing .pro-court-dock #pro-serve-cue{display:block!important;font:700 8px/12px Arial;letter-spacing:.2px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
#rally-game.dy-edition.pro-v2.battle-playing .pro-court-dock #pro-return-panel{color:#99ecd7;font:800 9px/15px Arial,sans-serif;letter-spacing:.3px}
#rally-game.dy-edition.pro-v2.battle-playing .pro-court-dock>.pro-desktop-shotbar{
 position:static!important;inset:auto!important;transform:none!important;margin:0;max-width:none;min-width:0;
 flex:0 1 auto;padding:0;background:none;border:0;gap:6px;box-shadow:none;
}
#rally-game.dy-edition.pro-v2.battle-playing .pro-court-dock>.battle-actions{
 position:static!important;inset:auto!important;transform:none!important;flex:0 0 auto;width:auto!important;
 margin:0;display:flex!important;pointer-events:auto;
}
.pro-lockin-control{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:5px;pointer-events:none}
.pro-lockin-value{font:800 8px/12px Arial;color:#b0e8db;white-space:nowrap;pointer-events:none}
#rally-game.dy-edition.pro-v2.battle-playing .pro-lockin-control>#pro-finish{
 display:flex!important;align-items:center;justify-content:center;pointer-events:auto;touch-action:manipulation;
 min-width:0!important;min-height:44px!important;width:94px;height:44px;padding:6px!important;font:900 10px/1.1 Arial!important;
}
#rally-game:not(.battle-touch) .pro-lockin-value,#rally-game:not(.battle-touch) .pro-lockin-control .hh-handheld-top{display:none!important}
/* The middle control has its own grid cell, independent from movement and shots. */
#rally-game.dy-edition.pro-v2.battle-touch.battle-playing{--court-dock-height:calc(60px + env(safe-area-inset-bottom,0px))}
#rally-game.dy-edition.pro-v2.battle-touch.battle-playing .battle-shell>.pro-court-dock{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1.2fr) auto;gap:8px}
#rally-game.dy-edition.pro-v2.battle-touch.battle-playing .pro-court-dock>.pro-desktop-shotbar{display:none!important}
#rally-game.dy-edition.pro-v2.battle-touch.battle-playing .battle-shell>.battle-controls .battle-thumb-row{
 display:grid!important;grid-template-columns:var(--move-size) minmax(56px,1fr) var(--shot-pad-size);
 height:var(--shot-pad-size)!important;align-items:center!important;gap:8px!important;
 left:max(16px,env(safe-area-inset-left,0px))!important;right:max(16px,env(safe-area-inset-right,0px))!important;bottom:14px!important;
}
#rally-game.dy-edition.pro-v2.battle-touch.battle-playing .battle-thumb-row>.pro-move-control{display:block!important;grid-column:1;grid-row:1;min-width:0;text-align:center}
#rally-game.dy-edition.pro-v2.battle-touch.battle-playing .battle-thumb-row>.pro-abilities{display:none!important}
#rally-game.dy-edition.pro-v2.battle-touch.battle-playing .battle-thumb-row>.pro-lockin-control{display:flex!important;grid-column:2;grid-row:1;justify-self:center;min-width:0;max-width:100%}
#rally-game.dy-edition.pro-v2.battle-touch.battle-playing .pro-lockin-control>#pro-finish{width:var(--lock-size)!important;height:var(--lock-size)!important;border-radius:14px!important;font-size:9px!important}
#rally-game.dy-edition.pro-v2.battle-touch.battle-playing .pro-lockin-control>.hh-handheld-top{
 position:static!important;inset:auto!important;transform:none!important;display:flex!important;margin:0!important;
 width:var(--lock-size);max-width:100%;height:18px;flex-direction:column;gap:3px!important;pointer-events:none;
}
#rally-game.dy-edition.pro-v2.battle-touch.battle-playing .pro-lockin-control .pro-charge-track{width:100%!important;height:5px!important;flex-shrink:0}
#rally-game.dy-edition.pro-v2.battle-touch.battle-playing .pro-lockin-control #hh-timing{font-size:7px!important}
#rally-game.dy-edition.pro-v2.battle-touch.battle-playing .battle-thumb-row #battle-joystick{width:var(--move-size)!important;height:var(--move-size)!important}
#rally-game.dy-edition.pro-v2.battle-touch.battle-playing .battle-thumb-row>.hh-face-buttons{
 display:block!important;grid-column:3;grid-row:1;position:relative!important;inset:auto!important;
 width:var(--shot-pad-size)!important;height:var(--shot-pad-size)!important;flex:none!important;
}
#rally-game.dy-edition.pro-v2.battle-touch.battle-playing .battle-thumb-row .hh-face-buttons button{width:var(--shot-button-size)!important;height:var(--shot-button-size)!important;min-height:44px!important}
#rally-game.dy-edition.pro-v2.battle-touch.battle-playing .battle-thumb-row .hh-face-buttons .hh-y{left:calc((var(--shot-pad-size) - var(--shot-button-size))/2)!important;top:0!important;right:auto!important;bottom:auto!important}
#rally-game.dy-edition.pro-v2.battle-touch.battle-playing .battle-thumb-row .hh-face-buttons .hh-x{left:0!important;top:calc((var(--shot-pad-size) - var(--shot-button-size))/2)!important;right:auto!important;bottom:auto!important}
#rally-game.dy-edition.pro-v2.battle-touch.battle-playing .battle-thumb-row .hh-face-buttons .hh-b{right:0!important;top:calc((var(--shot-pad-size) - var(--shot-button-size))/2)!important;left:auto!important;bottom:auto!important}
#rally-game.dy-edition.pro-v2.battle-touch.battle-playing .battle-thumb-row .hh-face-buttons .hh-a{left:calc((var(--shot-pad-size) - var(--shot-button-size))/2)!important;bottom:0!important;right:auto!important;top:auto!important}
@media(max-width:1000px){
 #rally-game.dy-edition.pro-v2.battle-playing:not(.battle-touch){--court-dock-height:calc(108px + env(safe-area-inset-bottom,0px))}
 #rally-game.dy-edition.pro-v2.battle-playing:not(.battle-touch) .battle-shell>.pro-court-dock{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1fr) auto;grid-template-rows:44px 44px;gap:4px 8px}
 #rally-game.dy-edition.pro-v2.battle-playing:not(.battle-touch) .pro-court-dock>.pro-desktop-shotbar{grid-column:1/-1;grid-row:2;justify-content:center}
}
@media(max-width:600px){
 #rally-game.dy-edition.pro-v2.battle-playing .pro-court-dock>.pro-authenticity,
 #rally-game.dy-edition.pro-v2.battle-playing .pro-court-dock .pro-auth-phase,
 #rally-game.dy-edition.pro-v2.battle-playing .pro-court-dock .pro-auth-ball,
 #rally-game.dy-edition.pro-v2.battle-playing .pro-court-dock>.pro-authenticity label{font-size:8px}
 #rally-game.dy-edition.pro-v2.battle-playing .pro-court-dock>.pro-authenticity meter{width:50px;height:6px}
 #rally-game.dy-edition.pro-v2.battle-playing .pro-court-dock #pro-focus-value{font-size:8px}
 #rally-game.dy-edition.pro-v2.battle-playing .hh-point-feedback strong{max-width:48%;font-size:10px}
 #rally-game.dy-edition.pro-v2.battle-playing .hh-point-feedback span{font-size:9px}
}
@media(max-width:360px){#rally-game.dy-edition.pro-v2.battle-touch.battle-playing{--shot-pad-size:124px;--shot-button-size:44px;--move-size:72px;--lock-size:56px}}
@media(max-height:600px) and (min-aspect-ratio:1/1){
 #rally-game.dy-edition.pro-v2.battle-touch.battle-playing{--court-header-height:38px;--coach-dock-height:0px;--court-dock-height:calc(54px + env(safe-area-inset-bottom,0px));--move-size:80px;--shot-pad-size:124px;--shot-button-size:44px;--lock-size:60px}
 #rally-game.dy-edition.pro-v2.battle-touch.battle-playing .battle-shell>.battle-controls>.battle-touch-panel{inset:0!important;height:auto!important}
 #rally-game.dy-edition.pro-v2.battle-touch.battle-playing .battle-shell>.battle-status,
 #rally-game.dy-edition.pro-v2.battle-touch.battle-playing .battle-shell>.hh-point-feedback{inset:0 max(140px,18%) auto!important;height:38px!important;width:auto!important;padding:10px 6px!important;font-size:9px!important}
 #rally-game.dy-edition.pro-v2.battle-touch.battle-playing .pro-score-center{visibility:hidden}
 #rally-game.dy-edition.pro-v2.battle-touch.battle-playing .pro-lockin-control>.hh-handheld-top{display:none!important}
 #rally-game.dy-edition.pro-v2.battle-touch.battle-playing .battle-shell>.pro-court-dock{padding-top:4px;padding-bottom:calc(4px + env(safe-area-inset-bottom,0px))}
}
/* Achievements share the coaching row instead of covering the game or controls. */
#rally-game.dy-edition.pro-v2.battle-playing .dy-practice-hint,
#rally-game.dy-edition.pro-v2.battle-touch.battle-playing .pro-contact-meter{display:none!important}
#rally-game.dy-edition.pro-v2.battle-playing .dy-toast{
 position:fixed!important;inset:66px 0 auto!important;transform:none!important;box-sizing:border-box;
 width:100%!important;max-width:none!important;height:32px;min-height:0;padding:4px 12px!important;
 display:flex;align-items:center;justify-content:center;gap:10px;background:#173847;border:0;border-radius:0;box-shadow:none;
 white-space:nowrap;overflow:hidden;pointer-events:none;z-index:100000;
}
#rally-game.dy-edition.pro-v2.battle-playing .dy-toast strong{margin:0;font:800 10px/18px Arial;overflow:hidden;text-overflow:ellipsis}
#rally-game.dy-edition.pro-v2.battle-playing .dy-toast small{margin:0;font:9px/18px Arial;overflow:hidden;text-overflow:ellipsis}
#rally-game.dy-edition.pro-v2.battle-playing .dy-toast>span{display:none}
#rally-game.dy-edition.pro-v2.battle-playing .dy-toast[hidden]{display:none!important}
#rally-game.dy-edition.pro-v2.battle-playing:has(.dy-toast:not([hidden])) .pro-coach-live{visibility:hidden}
@media(max-height:600px) and (min-aspect-ratio:1/1){#rally-game.dy-edition.pro-v2.battle-touch.battle-playing .dy-toast{display:none!important}}
/* Warm-up is playable; unfinished exploration no longer occupies the play entrance. */
.pro-warmup{display:flex;align-items:center;gap:20px;flex-wrap:wrap;border:1px solid #60847e;background:#142d33;padding:24px;border-radius:12px;margin:12px 0 24px;color:#e8efdf}
.pro-warmup>div{flex:1;min-width:220px}.pro-warmup h3{font-size:26px;margin:8px 0}.pro-warmup p{max-width:600px;line-height:1.6;margin:0}.pro-warmup small{color:#b6e8cc;letter-spacing:1px}.pro-warmup button{min-height:48px}
.pro-renderer-status{font:14px/1.6 Arial,sans-serif;color:#bfd9d5}
/* Landscape keeps every action in the side gutters, including Focus. */
@media(max-height:600px) and (min-aspect-ratio:1/1){
 #rally-game.dy-edition.pro-v2.battle-touch.battle-playing .battle-thumb-row>.pro-lockin-control{position:absolute!important;left:0!important;right:auto!important;bottom:calc(var(--move-size) + 34px)!important;width:var(--move-size)!important;height:44px!important;gap:0!important}
 #rally-game.dy-edition.pro-v2.battle-touch.battle-playing .pro-lockin-control>#pro-finish{width:var(--move-size)!important;height:44px!important;min-height:44px!important;border-radius:10px!important}
 #rally-game.dy-edition.pro-v2.battle-touch.battle-playing .pro-lockin-value{display:none!important}
}
