/* Shared interaction polish. Artwork, card proportions and match pacing belong to their modules. */
:root { --ui-ease: cubic-bezier(.23,1,.32,1); --ui-press:120ms; --ui-enter:240ms; --ui-exit:180ms; }
html { -webkit-tap-highlight-color:transparent; -webkit-text-size-adjust:100%; }
html,body { overscroll-behavior:none; }
body { -webkit-user-select:text; user-select:text; }
button,[role=button],.screen-button,.menu-settings__links a { touch-action:manipulation; user-select:none; -webkit-user-select:none; -webkit-touch-callout:none; }
a { touch-action:manipulation; }
button img,button canvas { -webkit-user-drag:none; }
button:focus-visible,a:focus-visible,input:focus-visible,select:focus-visible,[role=button]:focus-visible { outline:3px solid #fff0b7; outline-offset:4px; }
button:disabled { cursor:default; }
input,select,textarea,.app-screen input { font-size:16px; }
dialog,.archipelago-panel,.journal,.turn-hand--wide .turn-hand__cards,#characterGrid { overscroll-behavior:contain; }
dialog { max-height:calc(100dvh - 24px - env(safe-area-inset-top) - env(safe-area-inset-bottom)); }
.app-screen,.arcade-select { max-height:none; padding-left:max(24px,env(safe-area-inset-left)); padding-right:max(24px,env(safe-area-inset-right)); }
.app-screen .screen-button,.arcade-select .screen-button,.sheet-tools button,.dialog-close,.effect-notice button,.card-reveal__close,.menu-back,.menu-settings__links :is(a,button),.card-filters button { min-width:44px; min-height:44px; }
.dialog-close { display:grid; place-items:center; padding:0; }
:is(.screen-button,.primary,.secondary,.text-btn,.sheet-tools button,.game-menu-button,.pouch-button,#focusBtn,.menu-setting,.menu-back,.menu-settings__links a,.menu-settings__links button,.card-filters button,.effect-notice button) {
  transition:transform var(--ui-press) var(--ui-ease),background-color var(--ui-press) var(--ui-ease),opacity var(--ui-press) var(--ui-ease);
}
:is(.screen-button,.primary,.secondary,.text-btn,.sheet-tools button,.game-menu-button,.pouch-button,#focusBtn,.menu-setting,.menu-back,.menu-settings__links a,.menu-settings__links button,.card-filters button,.effect-notice button):active:not(:disabled) { transform:scale(.97); }
.screen-status { overflow-wrap:anywhere; }
.screen-status:empty { min-height:0; margin:0; }
.app-screen[aria-busy=true] { cursor:progress; }
.app-screen[aria-busy=true] button { cursor:progress; }
.app-screen .social-player > span,.app-screen .lobby-seat b { overflow-wrap:anywhere; }
.app-screen .room-code { user-select:all; font-variant-numeric:tabular-nums; }
.app-screen .lobby-seats { grid-template-columns:repeat(3,minmax(0,1fr)); }
.rules-grid p { color:#d0d7c2; }
.game-sheet { padding-bottom:max(24px,env(safe-area-inset-bottom)); }
.game-sheet .sheet-tools button { font-size:14px; }
.card-gallery-header { padding-top:max(24px,env(safe-area-inset-top)); padding-left:max(24px,env(safe-area-inset-left)); padding-right:max(24px,env(safe-area-inset-right)); }
.card-gallery-header > a,.card-gallery__item > a { display:inline-flex; align-items:center; min-height:44px; }
.card-filters { gap:8px; }
.card-gallery { padding-bottom:max(24px,env(safe-area-inset-bottom)); }
.card-gallery-page { overscroll-behavior-y:auto; }
@media(hover:hover) and (pointer:fine) {
  .screen-button:hover:enabled,.menu-setting:hover:enabled,.menu-back:hover,.menu-settings__links :is(a,button):hover { background-color:#335a49; }
  .screen-button.gold:hover:enabled { background:#ffe0a0; }
}
/* Keyboard users receive the same raised hand card, even on devices without hover. */
.turn-hand :is(.hand-card,#searchBtn,#endBtn):focus-visible:not(:disabled) { z-index:20!important; transform:translateY(calc(-32px - var(--hand-rest-offset))) rotate(0deg) scale(1.1); }
.arcade-select--cards .explorer-card:active { scale:.97; }
.arcade-select--cards .explorer-card { transition:transform 160ms var(--ui-ease),scale var(--ui-press) var(--ui-ease); }
.turn-hand,.turn-hand :is(.hand-card,#searchBtn,#endBtn) { transition-timing-function:var(--ui-ease); }
/* Game setting and OS preference govern the same UI, not just the renderer. */
html[data-ui-motion=reduced] :is(button,a,dialog,.turn-hand,.menu-scene,.menu-motes i,.gb-card,.hand-card--arriving),
html[data-input=keyboard] :is(button,a,.turn-hand) { transition:none!important; }
html[data-ui-motion=reduced] :is(.menu-scene,.menu-motes i,.hand-card--arriving,.hand-card--search-ready .gb-card,.hand-card--search-ready::before) { animation:none!important; }
html[data-ui-motion=reduced] .hand-card--search-ready::before { opacity:.45; }
@media(prefers-reduced-motion:reduce) {
  .menu-scene,.menu-motes i,.hand-card--arriving,.hand-card--search-ready .gb-card,.hand-card--search-ready::before { animation:none!important; }
  .hand-card--search-ready::before { opacity:.45; }
}
