/* VEYLENX: the violet beat. Both waves are anchored to the metal, not the page.
   No canvas, timer, soundtrack or network call is required for this animation. */
.hero .vx9-stage{position:absolute;z-index:0;left:71%;top:52%;width:clamp(376px,48vw,790px);transform:translate(-50%,-50%);pointer-events:none;user-select:none}
.hero .vx9-scene{display:block;width:100%;height:auto;overflow:visible}
.hero .hero-inner{z-index:1}
.hero .hero-art::after{z-index:1}
.vx9-halo,.vx9-wave-a,.vx9-wave-b,.vx9-edge,.vx9-glint{opacity:0}
.vx9-halo,.vx9-wave-a,.vx9-wave-b,.vx9-mark{transform-box:fill-box;transform-origin:50% 50%}
.vx9-mark{transform-box:view-box;transform-origin:480px 400px;transform:scale(1)}
/* Quiet resting state even without scripts. The existing motion switch remains authoritative. */
@media(prefers-reduced-motion:no-preference){
 body[data-motion=on] .vx9-mark{animation:vx9-beat 8s ease-in-out infinite}
 body[data-motion=on] .vx9-edge{animation:vx9-ignite 8s ease-in-out infinite}
 body[data-motion=on] .vx9-halo{animation:vx9-halo 8s ease-in-out infinite}
 body[data-motion=on] .vx9-wave-a{animation:vx9-wave 8s linear infinite}
 body[data-motion=on] .vx9-wave-b{animation:vx9-echo 8s linear infinite}
 body[data-motion=on] .vx9-glint{animation:vx9-glint 8s linear infinite}
 body[data-motion=on] .hero .hero-art>img.vx9-field{animation:float-slow 22s ease-in-out infinite alternate}
 /* The pulse gets the stage; avoid a competing bounce in the button and arrow. */
 body[data-motion=on] .hero-actions .primary,body[data-motion=on] .hero .scroll-cue span:last-child{animation:none}
}
@keyframes vx9-beat{0%,4%,38%,100%{transform:scale(1)}7%{transform:scale(.99)}13.5%{transform:scale(1.061)}22%{transform:scale(1.022)}30%{transform:scale(1.007)}}
@keyframes vx9-ignite{0%,5%,39%,100%{opacity:0}14%{opacity:.94}23%{opacity:.36}32%{opacity:.08}}
@keyframes vx9-halo{0%,4%,45%,100%{opacity:0;transform:scale(.85)}14%{opacity:.76;transform:scale(1)}26%{opacity:.37;transform:scale(1.13)}38%{opacity:.06;transform:scale(1.21)}}
@keyframes vx9-wave{0%,6%{opacity:0;transform:scale(.62)}13%{opacity:.94;transform:scale(.86)}23%{opacity:.79;transform:scale(1.18)}34%{opacity:.31;transform:scale(1.43)}45%,100%{opacity:0;transform:scale(1.62)}}
@keyframes vx9-echo{0%,12%{opacity:0;transform:scale(.72)}20%{opacity:.62;transform:scale(.96)}32%{opacity:.46;transform:scale(1.27)}46%,100%{opacity:0;transform:scale(1.51)}}
@keyframes vx9-glint{0%,55%{opacity:0;transform:translateX(0)}59%{opacity:.66;transform:translateX(48px)}69%{opacity:.7;transform:translateX(200px)}77%,100%{opacity:0;transform:translateX(325px)}}
@media(min-width:1800px){.hero .vx9-stage{left:calc(50% + 365px)}}
@media(min-width:761px) and (max-width:1100px){.hero .vx9-stage{left:75%;width:46vw;top:51%}}
@media(max-width:760px){
 .hero .vx9-stage{top:auto;bottom:72px;left:50%;width:min(82vw,390px);transform:translateX(-50%)}
 .hero .hero-inner{min-height:730px}
}
@media(max-width:480px){.hero .vx9-stage{width:min(83vw,334px);bottom:86px}.hero .hero-inner{min-height:704px}}
@media(max-width:360px){.hero .vx9-stage{bottom:82px}.hero .hero-inner{min-height:700px}}
@media(prefers-reduced-motion:reduce){.vx9-pulse-layer,.vx9-edge,.vx9-glint{display:none!important}.vx9-mark{transform:none!important}}
body[data-motion=off] :is(.vx9-pulse-layer,.vx9-edge,.vx9-glint){display:none}
@media print{.vx9-stage{display:none!important}}
