/* Motion layer: only active when <html class="anim"> (JS on + no reduced-motion). Transform/opacity only. */
.stats .bar{display:block;height:4px;background:#2c4a9a;margin:-.3rem 0 1rem;overflow:hidden;border-radius:2px}
.stats .bar i{display:block;height:100%;background:#ff5a5f;transform-origin:left;transform:scaleX(var(--v))}
[data-count]{font-variant-numeric:tabular-nums}
@keyframes up{from{opacity:0;transform:translateY(28px)}to{opacity:1;transform:none}}
@keyframes heroIn{from{opacity:0;transform:translateY(40px) scale(.94)}to{opacity:1;transform:none}}
@keyframes float{0%,100%{transform:translateY(0)}50%{transform:translateY(-10px)}}
@keyframes pop{0%{opacity:0;transform:rotate(8deg) scale(.2)}60%{opacity:1;transform:rotate(-4deg) scale(1.15)}80%{transform:rotate(10deg) scale(.95)}100%{transform:rotate(8deg) scale(1)}}
@keyframes slideUp{from{transform:translateY(110%)}to{transform:none}}
@keyframes draw{to{stroke-dashoffset:0}}
.anim .hero__copy>*,.anim .formcard{animation:up .7s cubic-bezier(.2,.7,.2,1) both}
.anim .hero__copy>:nth-child(2){animation-delay:.08s}.anim .hero__copy>:nth-child(3){animation-delay:.16s}
.anim .hero__copy>:nth-child(4){animation-delay:.24s}.anim .hero__copy>:nth-child(5){animation-delay:.32s}
.anim .hero__grid>.formcard{animation-delay:.3s}
.anim .hero__product img{animation:heroIn .9s .15s cubic-bezier(.2,.7,.2,1) both,float 6s 1.1s ease-in-out infinite}
.anim .badge30{animation:pop .7s .85s cubic-bezier(.3,1.4,.5,1) both}
.anim .mbar{animation:slideUp .5s 1.2s cubic-bezier(.2,.8,.2,1) both}
/* section reveals: children stagger */
.anim [data-reveal] .wrap>*{opacity:0;transform:translateY(28px);transition:opacity .7s cubic-bezier(.2,.7,.2,1),transform .7s cubic-bezier(.2,.7,.2,1)}
.anim [data-reveal].in .wrap>*{opacity:1;transform:none}
.anim [data-reveal].in .wrap>:nth-child(2){transition-delay:.12s}.anim [data-reveal].in .wrap>:nth-child(3){transition-delay:.24s}.anim [data-reveal].in .wrap>:nth-child(4){transition-delay:.36s}
.anim [data-reveal] .wrap>.why__grid>*,.anim [data-reveal] .stats__row>div,.anim [data-reveal] .ox>div,.anim [data-reveal] .quotes>figure,.anim [data-reveal] .safe__list li,.anim [data-reveal] .ticks--light li{opacity:0;transform:translateY(22px);transition:opacity .6s,transform .6s cubic-bezier(.2,.7,.2,1)}
.anim [data-reveal].in .stats__row>div,.anim [data-reveal].in .ox>div,.anim [data-reveal].in .quotes>figure,.anim [data-reveal].in .safe__list li,.anim [data-reveal].in .ticks--light li{opacity:1;transform:none;transition-delay:calc(var(--i,0)*110ms + .2s)}
/* bars */
.anim .stats .bar i{transform:scaleX(0);transition:transform 1.6s cubic-bezier(.2,.7,.2,1) .35s}
.anim .stats.in .bar i{transform:scaleX(var(--v))}
/* comparison rows in sequence + check draw */
.anim .compare tbody tr{opacity:0;transform:translateX(-18px);transition:opacity .5s,transform .5s cubic-bezier(.2,.7,.2,1)}
.anim .compare.in tbody tr{opacity:1;transform:none;transition-delay:calc(var(--i,0)*160ms + .35s)}
.chk{width:1em;height:1em;vertical-align:-.15em;margin-right:.3rem;fill:none;stroke:var(--navy);stroke-width:3;stroke-linecap:round;stroke-linejoin:round}
.anim .chk path{stroke-dasharray:24;stroke-dashoffset:24}
.anim .compare.in .chk path{animation:draw .5s ease-out both;animation-delay:calc(var(--i,0)*160ms + .7s)}
.anim .offer.in [data-count]{animation:up .6s both}
@media (prefers-reduced-motion:reduce){.anim *{animation:none!important;transition:none!important}}
