/* Motion — subtle and precise. Nothing bounces. */
:root{
--ease-precise:cubic-bezier(.2,.7,.1,1); /* @kind other */
--ease-out:cubic-bezier(.16,1,.3,1); /* @kind other */
--ease-in-out:cubic-bezier(.65,0,.35,1); /* @kind other */
--dur-instant:80ms; /* @kind other */ --dur-fast:140ms; /* @kind other */ --dur-base:220ms; /* @kind other */ --dur-slow:420ms; /* @kind other */ --dur-shaft:900ms; /* @kind other */
}
@keyframes vx-shaft-in{from{transform:translateX(-24%);opacity:0;clip-path:inset(0 100% 0 0)}to{transform:none;opacity:1;clip-path:inset(0 0 0 0)}}
@keyframes vx-fade-up{from{opacity:0;transform:translateY(16px)}to{opacity:1;transform:none}}
@keyframes vx-fade{from{opacity:0}to{opacity:1}}
@keyframes vx-line-draw{from{transform:scaleX(0)}to{transform:scaleX(1)}}
.vx-anim-shaft{animation:vx-shaft-in var(--dur-shaft) var(--ease-out) both}
.vx-anim-fade-up{animation:vx-fade-up var(--dur-slow) var(--ease-out) both}
.vx-reveal{opacity:0;transform:translateY(16px);transition:opacity var(--dur-slow) var(--ease-out),transform var(--dur-slow) var(--ease-out)}
.vx-reveal.is-visible{opacity:1;transform:none}
@media (prefers-reduced-motion:reduce){
*,*::before,*::after{animation-duration:1ms!important;animation-iteration-count:1!important;transition-duration:1ms!important;scroll-behavior:auto!important}
.vx-reveal{opacity:1;transform:none}
}
