:root{--ease:cubic-bezier(.2,.8,.2,1);--t-fast:120ms;--t-med:220ms;--focus:#7a2fb0}


.press{transition:transform var(--t-fast) var(--ease),box-shadow var(--t-med) var(--ease),background-color var(--t-med) var(--ease)}
@media (hover:hover){.press:hover{transform:translateY(-1px)}}
.press:active{transform:scale(.97)}
:focus-visible{outline:2px solid var(--focus);outline-offset:2px}

@keyframes rise{from{opacity:0;transform:translateY(10px)}to{opacity:1;transform:none}}
.enter{animation:rise 320ms var(--ease) both}
.stagger>*{animation:rise 320ms var(--ease) both}
.stagger>*:nth-child(2){animation-delay:40ms}
.stagger>*:nth-child(3){animation-delay:80ms}
.stagger>*:nth-child(4){animation-delay:120ms}
.stagger>*:nth-child(5){animation-delay:160ms}

@keyframes shake{20%{transform:translateX(-5px)}40%{transform:translateX(5px)}60%{transform:translateX(-3px)}80%{transform:translateX(3px)}}
.shake{animation:shake 260ms var(--ease)}

@keyframes spin{to{transform:rotate(360deg)}}
.spinner{display:none;width:18px;height:18px;border-radius:50%;border:2px solid currentColor;border-right-color:transparent;animation:spin 700ms linear infinite}
.is-loading .spinner{display:inline-block}
.is-loading .btn-label{opacity:.85}

@keyframes shimmer{from{background-position:-200px 0}to{background-position:200px 0}}
.skeleton{border-radius:14px;height:18px;background:linear-gradient(90deg,var(--skel-a) 0,var(--skel-b) 50%,var(--skel-a) 100%);background-size:400px 100%;animation:shimmer 1.2s linear infinite}

@keyframes draw{to{stroke-dashoffset:0}}
.tick path{stroke-dasharray:28;stroke-dashoffset:28;animation:draw 380ms var(--ease) 120ms forwards}

@keyframes toast-in{from{opacity:0;transform:translate(-50%,10px)}to{opacity:1;transform:translate(-50%,0)}}

@media (prefers-reduced-motion:reduce){
  *,*::before,*::after{animation-duration:.01ms!important;animation-iteration-count:1!important;animation-delay:0ms!important;transition-duration:.01ms!important;scroll-behavior:auto!important}
  .skeleton{animation:none}
  .tick path{stroke-dashoffset:0}
}
