/* QeepX · qx-refresh.css   Interaction foundation, loaded after the app kit on every page (Sep 21 2026).
 * Only behaviour and state rules live here (touch, focus, pressed, disabled, reduced motion). Sizes and layout stay in qx-app.css,
 * so this file can never move the top bar, wallet strip or tab bar. */
:root{--qx-ease:cubic-bezier(.2,.8,.2,1)}
html{-webkit-text-size-adjust:100%}
body{min-width:280px;text-rendering:optimizeLegibility}
button,a,input,select,textarea,[role=button]{touch-action:manipulation}
button,a,[role=button]{-webkit-tap-highlight-color:rgba(125,19,123,.12)}
button:focus-visible,a:focus-visible,input:focus-visible,select:focus-visible,textarea:focus-visible,[tabindex]:focus-visible{outline:3px solid rgba(125,19,123,.3);outline-offset:2px}
/* pressed · disabled · busy: the same answer everywhere */
.btn,button.btn,.top-icon-btn,.nav-item,.pill-tab,.profile-tab,.gift-cat,.zoo-tab,.dash-tab,.arena-tab,.vip-tab,.rbtn,.act-btn{transition:background-color .16s var(--qx-ease),color .16s var(--qx-ease),opacity .16s var(--qx-ease),transform .12s var(--qx-ease)}
.btn:active,button.btn:active,.rbtn:active,.act-btn:active{transform:scale(.97)}
.top-icon-btn:active,.nav-item:active{opacity:.7}
.btn:disabled,button:disabled,.btn[aria-disabled=true]{opacity:.45;cursor:not-allowed;pointer-events:none}
.btn.is-busy,button.is-busy{position:relative;color:transparent!important;pointer-events:none}
.btn.is-busy::after,button.is-busy::after{content:"";position:absolute;left:50%;top:50%;width:16px;height:16px;margin:-8px 0 0 -8px;border-radius:50%;border:2px solid rgba(255,255,255,.45);border-top-color:#fff;animation:qx-spin .7s linear infinite}
@media (prefers-reduced-motion:reduce){html{scroll-behavior:auto}*,*::before,*::after{animation-duration:.01ms!important;animation-iteration-count:1!important;transition-duration:.01ms!important}}
