/* App glue for the hi-fi styles: no inline styles anywhere (CSP style-src 'self'). */
.sprite{position:absolute;width:0;height:0;overflow:hidden}
.boot,.noscript{padding:48px;font:500 16px var(--mono, monospace)}
#app{min-height:100dvh}
.vh{position:absolute!important;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap}
.input input{flex:1;min-width:0;border:0;background:transparent;font:500 18px var(--mono);color:var(--ink);outline:none;letter-spacing:.06em}
.otp-wrap{position:relative}
.otp-wrap input{position:absolute;inset:0;width:100%;height:100%;opacity:0;font-size:16px;border:0;cursor:text}
.otp-wrap:focus-within .otp span{border-color:var(--ink)}
.btn[disabled],.obtn[disabled],button[disabled]{opacity:.45;pointer-events:none}
.legend i.lg-done{background:#8C968E;opacity:.55}
.legend i.lg-next{background:#C6EA4E;border:1.5px solid #151B17}
.legend i.lg-covered{background:#151B17}
.legend i.lg-card{border:1.5px solid #D5DBCF}
.focusbar .spacer-110{width:110px}
.toast{position:fixed}
.toast[hidden]{display:none}
.toast .linkish{color:var(--lime);margin-left:6px}
.err-msg[hidden]{display:none}
.form-stack{display:flex;flex-direction:column;gap:12px;margin-top:12px;max-width:420px}
.paste{width:100%;min-height:160px;border-radius:14px;border:2px solid var(--line-2);padding:12px;font:500 14px var(--mono);background:var(--surface)}
.help.warn{color:var(--tomato-ink)}
.seg button{height:36px;padding:0 14px;border-radius:var(--r-pill);font-size:14px;font-weight:500;color:var(--ink-2)}
.seg button.on{background:var(--ink);color:var(--surface)}
.mb[hidden]{display:none}
@media (prefers-reduced-motion:no-preference){
  .otp.is-err{animation:cv-shake .28s 1}
  .coupon.swap{animation:cv-in .36s cubic-bezier(.16,1,.3,1)}
  .conf{animation:cv-pop .9s cubic-bezier(.34,1.56,.64,1) 1 both}
}
@keyframes cv-shake{0%,100%{transform:none}20%,60%{transform:translateX(-6px)}40%,80%{transform:translateX(6px)}}
@keyframes cv-in{from{opacity:0;transform:translateX(24px)}to{opacity:1;transform:none}}
@keyframes cv-pop{from{opacity:0;transform:scale(.4)}to{opacity:1}}
