/* M65.1 player-facing responsive, accessibility, and visual closure. */
.player-shell { overflow-x: clip; }
.player-shell :is(.btn, .nav-link, .player-bottom-nav__item, .form-control, .form-select) { min-height: 2.75rem; }
.player-shell :is(.card, .alert, .list-group-item, .modal-content) { overflow-wrap: anywhere; }
.player-shell :is(.badge, .text-nowrap) { max-width: 100%; }
.player-shell .player-filter-strip { flex-wrap: nowrap; max-width: 100%; padding-block: .125rem; overflow-x: auto; overscroll-behavior-inline: contain; scrollbar-width: thin; }
.player-shell .player-filter-strip > .nav-item { flex: 0 0 auto; }
.player-shell .player-filter-strip .nav-link { white-space: nowrap; }
.player-shell .room-card .badge { white-space: normal; text-align: start; }
.player-shell .table-responsive { max-width: 100%; overscroll-behavior-inline: contain; -webkit-overflow-scrolling: touch; }
.player-shell .modal { padding: max(.5rem, env(safe-area-inset-top)) max(.5rem, env(safe-area-inset-right)) max(.5rem, env(safe-area-inset-bottom)) max(.5rem, env(safe-area-inset-left)); overflow: hidden auto; }
.player-shell .modal-dialog { margin-inline: auto; }
.player-shell .modal-content { max-height: calc(100dvh - max(1rem, env(safe-area-inset-top)) - max(1rem, env(safe-area-inset-bottom))); }
.player-shell .modal-body { min-height: 0; overflow-y: auto; overscroll-behavior: contain; }
.player-shell .live-sync-banner { width: min(100%, 52rem); }
.player-shell [aria-busy="true"] { cursor: progress; }
.player-shell .current-number { contain: layout paint; }
.player-shell .recent-numbers { min-height: 2.5rem; }
.player-shell .tambola-ticket { width: 100%; min-width: 0; }
.player-shell .ticket-cell { overflow: hidden; }
@media (max-width: 575.98px) {
    .player-shell .container, .player-shell .container-fluid { --bs-gutter-x: 1.25rem; }
    .player-shell :is(h1, .h1) { font-size: clamp(1.55rem, 8vw, 2rem); }
    .player-shell .display-5, .player-shell .display-6 { font-size: clamp(1.65rem, 9vw, 2.35rem); }
    .player-shell .modal-dialog { width: 100%; max-width: none; margin-block: 0; }
    .player-shell .modal-footer { display: grid; grid-template-columns: 1fr; gap: .5rem; }
    .player-shell .modal-footer > :is(.btn, a) { width: 100%; margin: 0 !important; }
    .player-shell .live-room > .d-flex:first-child > div:first-child { min-width: 0; flex: 1 1 100%; }
    .player-shell .live-game-alert-banner { width: calc(100% - 1rem); }
}
@media (max-width: 379.98px) {
    .player-shell .player-header-action { min-width: 2.5rem; min-height: 2.5rem; padding-inline: .5rem; }
    .player-shell .current-number { width: 5.75rem; height: 5.75rem; font-size: 2.65rem; }
    .player-shell .tambola-ticket .ticket-cell { padding-inline: .125rem; font-size: clamp(.68rem, 3.5vw, .82rem); }
}
@media (max-height: 520px) and (orientation: landscape) {
    .player-shell .modal-dialog { align-items: flex-start; min-height: auto; }
    .player-shell .modal-content { max-height: calc(100dvh - 1rem); }
}
@media (prefers-reduced-motion: reduce) {
    .player-shell .room-card, .player-shell .current-number, .player-shell .winner-notice__card { animation: none !important; transition: none !important; transform: none; }
}
@media (forced-colors: active) {
    .player-shell :is(.number-cell--called, .ticket-cell--marked, .nav-link.active) { border: 2px solid CanvasText; forced-color-adjust: auto; }
}
