/* Shared feedback for controls, without changing their selected state or size. */
:is(button,[role="button"],summary,a.btn,a.small-btn,a.icon-btn,a.upgrade,nav a,.lobby-action,.lobby-back,.lobby-account-link,.room-text-link,.score-text-link,.rule-category,.rule-page-link){
 --interaction-ring:#82dff2;
 -webkit-tap-highlight-color:transparent;
 touch-action:manipulation;
 transition:filter 120ms ease,translate 100ms ease,box-shadow 120ms ease;
}
:is(.danger,[data-action="gg"],[data-action="cancel"]){--interaction-ring:#ffabb4}
:is(button,[role="button"],summary,a.btn,a.small-btn,a.icon-btn,a.upgrade,nav a,.lobby-action,.lobby-back,.lobby-account-link,.room-text-link,.score-text-link,.rule-category,.rule-page-link):focus-visible{
 outline:2px solid var(--interaction-ring,#82dff2);
 outline-offset:3px;
}
/* Hover feedback belongs to a pointer that can actually hover. */
@media(hover:hover) and (pointer:fine){
 :is(button,[role="button"],summary,a.btn,a.small-btn,a.icon-btn,a.upgrade,nav a,.lobby-action,.lobby-back,.lobby-account-link,.room-text-link,.score-text-link,.rule-category,.rule-page-link):hover:not(:disabled):not([aria-disabled="true"]):not(.is-busy):not([aria-busy="true"]){filter:brightness(1.10)}
}
/* The optional class lets quick taps retain their feedback briefly after release. */
:is(button,[role="button"],summary,a.btn,a.small-btn,a.icon-btn,a.upgrade,nav a,.lobby-action,.lobby-back,.lobby-account-link,.room-text-link,.score-text-link,.rule-category,.rule-page-link):is(:active,.is-pressed):not(:disabled):not([aria-disabled="true"]):not(.is-busy):not([aria-busy="true"]){
 translate:0 1px;
 filter:brightness(.82) saturate(1.10);
 box-shadow:inset 0 2px 5px #0006,0 0 0 2px #83dff22b;
 transition-duration:65ms;
}
/* Labels for native radio/checkbox cards retain their existing checked treatment. */
label.draft-card{touch-action:manipulation;transition:filter 100ms ease,translate 100ms ease}
label.draft-card:active:not(:has(input:disabled)){filter:brightness(.86);translate:0 1px}
:is(button,[role="button"],summary,a.btn,a.small-btn,a.icon-btn,a.upgrade,nav a,.lobby-action,.lobby-back,.lobby-account-link,.room-text-link,.score-text-link,.rule-category,.rule-page-link):is(:disabled,[aria-disabled="true"]){
 translate:none;
 filter:none;
 transition:none;
 animation:none;
 cursor:not-allowed;
}
:is(button,.btn,[role="button"]):is(.is-busy,[aria-busy="true"]){
 translate:none;
 filter:saturate(.8);
 box-shadow:inset 0 -2px 0 #b0ecfb;
 transition:none;
 cursor:progress;
}
a[data-navigation-pending]{
 outline:1px solid #80d8ed;
 outline-offset:2px;
 filter:brightness(1.10);
 box-shadow:inset 0 -2px 0 #80d8ed;
 cursor:progress;
}
.navigation-progress{
 position:fixed;
 inset:0 0 auto;
 height:2px;
 overflow:hidden;
 opacity:0;
 background:#173546;
 pointer-events:none;
 z-index:10000;
 transition:opacity 100ms ease;
}
.navigation-progress:after{
 content:"";
 display:block;
 width:38%;
 height:100%;
 background:linear-gradient(90deg,transparent,#87e4f7 35%,#d6faff 65%,transparent);
 transform:translateX(-110%);
}
body.is-navigating .navigation-progress{opacity:1}
body.is-navigating .navigation-progress:after{animation:navigation-pending 950ms linear infinite}
@keyframes navigation-pending{to{transform:translateX(365%)}}
@media(prefers-reduced-motion:reduce){
 :is(button,[role="button"],summary,a.btn,a.small-btn,a.icon-btn,a.upgrade,nav a,.lobby-action,.lobby-back,.lobby-account-link,.room-text-link,.score-text-link,.rule-category,.rule-page-link),label.draft-card{transition:none!important}
 :is(button,[role="button"],summary,a.btn,a.small-btn,a.icon-btn,a.upgrade,nav a,.lobby-action,.lobby-back,.lobby-account-link,.room-text-link,.score-text-link,.rule-category,.rule-page-link):is(:active,.is-pressed),label.draft-card:active{translate:none!important}
 .navigation-progress{transition:none}
 body.is-navigating .navigation-progress:after{animation:none;transform:none;width:100%;background:#91e6f8}
}
@media print{.navigation-progress{display:none!important}}
.action-status{margin:10px 0 0;color:#9abaca;font:500 12px/1.6 'DM Sans','Noto Sans KR',sans-serif;overflow-wrap:anywhere}
.action-status.error{color:#ffb2ba}
.action-status.pending{color:#8ed9ed}
