@keyframes rise{from{opacity:0;transform:translateY(28px)}to{opacity:1;transform:none}}
@keyframes drift{to{background-position:56px 56px}}
@keyframes flow{to{stroke-dashoffset:-56}}
@keyframes bob{50%{transform:translateY(-8px)}}
@keyframes wheel{0%{opacity:0;transform:translateY(0)}40%{opacity:1}100%{opacity:0;transform:translateY(14px)}}
@keyframes draw{to{stroke-dashoffset:0}}
.hero-grid-bg{animation:drift 14s linear infinite}
.hero h1 span:nth-child(1){animation:rise .9s .1s both cubic-bezier(.2,.7,.2,1)}.hero h1 span:nth-child(2){animation:rise .9s .3s both cubic-bezier(.2,.7,.2,1)}
.hero .lead{animation:rise .9s .5s both}.hero .cta-row{animation:rise .9s .65s both}.hero-art{animation:rise 1.1s .35s both}
.traces path{animation:flow 2.4s linear infinite}.fp1{animation:bob 6s ease-in-out infinite}.fp2{animation:bob 7s 1s ease-in-out infinite}
.scroll-ind span{animation:wheel 1.8s infinite}
.bp-lines path{stroke-dasharray:2400;stroke-dashoffset:2400}.bp-lines.in path{animation:draw 3s ease forwards}
.js .reveal{opacity:0;transform:translateY(24px);transition:opacity .8s,transform .8s}.js .reveal.in{opacity:1;transform:none}
@media (prefers-reduced-motion:reduce){*,*::before,*::after{animation:none!important;transition:none!important;scroll-behavior:auto!important}.js .reveal{opacity:1;transform:none}.bp-lines path{stroke-dashoffset:0}}
