/* Keep navigation in place while the page remains the ordinary scroll surface. */
html{scroll-padding-block:88px 88px}
body{overscroll-behavior-y:none}
.ludo-shell .topbar{position:sticky!important;top:0;z-index:60;flex-shrink:0;background:var(--sidebar,#13264b)}
.bottom-nav{position:fixed!important;inset:auto 0 0;z-index:60;transform:none!important;overscroll-behavior:none}
@media(max-width:1000px){
 .ludo-mobile-menu{position:fixed;top:78px;left:0;right:0;z-index:59;max-height:calc(100dvh - 160px);overflow-y:auto;overscroll-behavior:contain}
}
html:has(body[data-route=game]){height:100%;overflow:hidden;overscroll-behavior:none}
body[data-route=game] .game-topline,body[data-route=game] .my-hand{flex-shrink:0;overscroll-behavior:contain}

/* Matching supports and identity-based positions; only the active seat thinks. */
body[data-route=game] .game-route .table-arena.room3d-ready[data-crowded=false] .opponent{width:112px!important;min-height:40px!important;justify-content:flex-start!important;padding:5px 8px!important;gap:7px!important}
body[data-route=game] .game-route .table-arena.room3d-ready[data-crowded=true] .opponent{width:106px!important;min-height:34px!important;justify-content:flex-start!important}
body[data-route=game] .game-route .table-arena.room3d-ready .opponent strong{flex:1 1 auto!important;max-width:none!important;color:var(--text)!important}
body[data-route=game] .game-route .opponent .profile-avatar,body[data-route=game] .game-route .opponent .robot-emblem{display:inline-flex!important;flex-shrink:0}
body[data-route=game] .game-route .opponent.current{border-color:var(--gold)!important}
body[data-route=game] .game-route .opponent .thinking-dots{display:inline-flex!important;position:absolute;left:50%;bottom:-7px;transform:translateX(-50%);align-items:center;justify-content:center;gap:3px;width:30px;height:13px;padding:2px 5px;border-radius:5px;background:#10234b;pointer-events:none}
body[data-route=game] .game-route .opponent .thinking-dots i{display:block!important;width:4px;height:4px;border-radius:50%;background:var(--gold);opacity:.35;animation:player-thinking 1.05s ease-in-out infinite}
body[data-route=game] .game-route .opponent .thinking-dots i:nth-child(2){animation-delay:.14s}
body[data-route=game] .game-route .opponent .thinking-dots i:nth-child(3){animation-delay:.28s}
body[data-route=game] .game-route .opponent .player-finished{position:absolute;right:-5px;top:-5px;width:16px;height:16px;display:grid;place-items:center;border-radius:50%;background:#10234b;color:var(--success)}
.player-finished svg{width:12px;height:12px}
@keyframes player-thinking{0%,65%,100%{transform:translateY(0);opacity:.35}30%{transform:translateY(-3px);opacity:1}}
body[data-motion=off] .game-route .opponent .thinking-dots i{animation:none!important;opacity:1}
body[data-distributing=true] .game-route .opponent .thinking-dots{visibility:hidden}
@media(prefers-reduced-motion:reduce){body[data-route=game] .game-route .opponent .thinking-dots i{animation:none!important;opacity:1}}
