@keyframes vx-in{0%{opacity:0;transform:translateY(12px)}to{opacity:1;transform:none}}.vx-card{animation:.5s cubic-bezier(.22,.61,.36,1) both vx-in}@keyframes vx-breathe{0%,to{box-shadow:0 0 0 10px #d8b46a14,0 30px 60px -20px #000c}50%{box-shadow:0 0 0 16px #d8b46a24,0 30px 60px -20px #000c}}.vx-lock-idle{animation:3.2s ease-in-out infinite vx-breathe}.vx-shackle{transform-box:fill-box;transform-origin:85% 100%;transition:transform .5s cubic-bezier(.34,1.56,.64,1)}.vx-lock-open .vx-shackle{transform:translateY(-5px)rotate(-28deg)}@keyframes vx-pop{0%{transform:scale(1)}40%{transform:scale(1.12)}to{opacity:0;transform:scale(.9)}}.vx-lock-open{animation:.9s cubic-bezier(.22,.61,.36,1) .35s forwards vx-pop}@keyframes vx-fade-out{to{opacity:0}}.vx-lock-out{animation:.5s .5s forwards vx-fade-out}@keyframes vx-flash{0%{opacity:0}15%{opacity:.55}to{opacity:0}}.vx-flash{background:radial-gradient(circle,#ffecb4e6,#ffdc9633 40%,#0000 70%);animation:1.4s ease-out forwards vx-flash}@keyframes vx-ring{0%{opacity:.95;transform:scale(.2)}to{opacity:0;transform:scale(4.2)}}.vx-ring{animation:1.5s cubic-bezier(.22,.61,.36,1) forwards vx-ring}.vx-ring-2{animation-duration:1.8s;animation-delay:.22s}@keyframes vx-spark{0%{opacity:0;transform:translate(0)scale(.4)}12%{opacity:1}to{transform:translate(var(--x), calc(var(--y) - 40px)) scale(1);opacity:0}}.vx-spark{opacity:0;animation:1.6s cubic-bezier(.22,.61,.36,1) forwards vx-spark;box-shadow:0 0 10px 2px #f3da9ccc}@keyframes vx-toast{0%{opacity:0;transform:translate(-50%,-10px)}12%,82%{opacity:1;transform:translate(-50%)}to{opacity:0;transform:translate(-50%,-6px)}}.vx-toast{animation:3.4s forwards vx-toast}.vx-scan:after{content:"";background:linear-gradient(90deg,#0000,#2e7a70,#0000);height:2px;animation:1.1s ease-in-out infinite alternate vx-scanline;position:absolute;top:6px;left:4px;right:4px;box-shadow:0 0 12px 2px #2e7a708c}@keyframes vx-scanline{to{top:calc(100% - 8px)}}@keyframes vm-pulse{0%,to{box-shadow:0 0 0 4px #8a4b2a2e}50%{box-shadow:0 0 0 10px #8a4b2a0a}}.vm-ready{animation:2.4s ease-in-out infinite vm-pulse}@keyframes vm-draw{0%{stroke-dashoffset:1px}to{stroke-dashoffset:0}}.vm-trail{stroke-dasharray:1;animation:1.6s cubic-bezier(.22,.61,.36,1) .2s both vm-draw}@media (prefers-reduced-motion:reduce){.vx-card,.vx-lock-idle,.vx-lock-open,.vx-lock-out,.vm-ready,.vm-trail,.vx-scan:after{animation:none!important}.vx-shackle{transition:none}.vx-toast{animation:.3s 3s forwards vx-fade-out;transform:translate(-50%)}}
