/* Phone polish shared by every phone page: works the same on iPhone (Safari) and Android (Chrome, Samsung Internet). */
html { -webkit-text-size-adjust: 100%; text-size-adjust: 100%; }
* { -webkit-tap-highlight-color: transparent; }
body { min-height: 100vh; min-height: 100dvh; overscroll-behavior-y: none; padding-left: env(safe-area-inset-left); padding-right: env(safe-area-inset-right); }
@media (display-mode: standalone) { body { padding-top: env(safe-area-inset-top); } }
button, a, select, label, .pick, .opt, .btn, [data-tab] { touch-action: manipulation; }
.btn, .pick, .opt, .tabs button { min-height: 44px; }
input, select, textarea { font-size: max(16px, 1em) !important; }
img, svg image { -webkit-user-drag: none; -webkit-touch-callout: none; }
/* Full-screen overlays stay clear of the notch and the home bar. */
#race, #prace, .bagwrap { padding-top: max(16px, env(safe-area-inset-top)) !important; padding-bottom: max(24px, env(safe-area-inset-bottom)) !important; }
/* While the keyboard is open, hide fixed bottom bars so they don't float over the text box. */
body.kb .tabs { display: none; }
@media (hover: none) { .btn:hover, .pick:hover, .opt:hover { filter: none; transform: none; } }
/* Hardcore's sticky top bar sits under the status bar when installed as an app. */
.top { padding-top: env(safe-area-inset-top); }
@media (display-mode: standalone) { body:has(.top) { padding-top: 0; } }
/* Every tap answers: tappable things dip a little under your finger. */
button:not(.btn):not(:disabled), .pick, .opt, [data-cell], [data-chest], [data-door] { transition: transform .08s ease-out; }
button:not(.btn):not(:disabled):active, .pick:active, .opt:active { transform: scale(.95); }
@media (prefers-reduced-motion: reduce) { button:not(.btn):active, .pick:active, .opt:active { transform: none; } }
