@keyframes rail-flow{0%{transform:translateY(-6px)}to{transform:translateY(6px)}}@keyframes settle-flash{0%,55%{opacity:.35;transform:scale(1)}70%{opacity:1;transform:scale(1.15)}to{opacity:.85;transform:scale(1)}}@keyframes card-in{0%{opacity:0;transform:translateY(14px)}to{opacity:1;transform:translateY(0)}}@keyframes thread-dash{to{stroke-dashoffset:-24px}}@keyframes status-swap{0%,28%{opacity:1;transform:translateY(0)}33%,61%{opacity:0;transform:translateY(-6px)}66%,to{opacity:0;transform:translateY(6px)}}@keyframes status-swap-b{0%,28%{opacity:0;transform:translateY(6px)}33%,61%{opacity:1;transform:translateY(0)}66%,to{opacity:0;transform:translateY(-6px)}}@keyframes status-swap-c{0%,61%{opacity:0;transform:translateY(6px)}66%,94%{opacity:1;transform:translateY(0)}to{opacity:0;transform:translateY(-6px)}}.ov-rail{animation:8s ease-in-out infinite alternate rail-flow}.ov-enter{animation:.8s cubic-bezier(.22,1,.36,1) both card-in}.ov-settle{transform-box:fill-box;transform-origin:50%;animation:4.5s ease-in-out infinite settle-flash}.ov-thread{stroke-dasharray:6 8;animation:1.2s linear infinite thread-dash}.ov-status-a{animation:5.4s ease-in-out infinite status-swap}.ov-status-b{animation:5.4s ease-in-out infinite status-swap-b}.ov-status-c{animation:5.4s ease-in-out infinite status-swap-c}@media (prefers-reduced-motion:reduce){.ov-rail,.ov-enter,.ov-settle,.ov-thread,.ov-status-a,.ov-status-b,.ov-status-c{opacity:1!important;animation:none!important;transform:none!important}.ov-status-b,.ov-status-c{opacity:0!important}}
