/* Preserve light sweeps and pulses using compositor transforms/opacity. */
/* Raster-only accents need fewer updates; motion paths stay full frame rate. */
.li-refresh .li-hero h1 em{animation-timing-function:steps(140,end)}
.li-refresh .li-network-lines>g:first-of-type>path{animation-timing-function:steps(90,end)}
.li-refresh .li-button-primary:before{left:0;will-change:transform;animation-name:li-button-energy-composite}
@keyframes li-button-energy-composite{0%,65%{transform:translateX(-180%) skewX(-22deg);opacity:0}70%{opacity:1}95%,100%{transform:translateX(480%) skewX(-22deg);opacity:0}}
.li-refresh .li-network-core{box-shadow:0 0 34px #508dff28;animation-name:li-core-composite}
.li-refresh .li-network-core:before{content:"";position:absolute;inset:-1px;border-radius:inherit;box-shadow:0 0 44px #508dff40;pointer-events:none;opacity:.2;will-change:opacity;animation:li-core-glow 6s ease-in-out infinite}
@keyframes li-core-composite{0%,100%{transform:translateY(0)}50%{transform:translateY(-5px)}}
@keyframes li-core-glow{0%,100%{opacity:.2}50%{opacity:1}}
.li-front .li-scroll-active .li-feature-label{animation-name:li-label-composite}
@keyframes li-label-composite{from{opacity:.35;transform:translateX(-12px)}to{opacity:1;transform:translateX(0)}}
.li-front .li-process-step>span{position:relative;display:inline-block}
.li-front .li-scroll-active .li-process-step>span{animation-name:li-step-composite}
.li-front .li-process-step>span:after{content:"";position:absolute;inset:-10px;border:1px solid #77b5ff60;border-radius:50%;opacity:0;pointer-events:none}
.li-front .li-scroll-active .li-process-step>span:after{animation:li-step-ring 1.2s ease-out both;animation-delay:inherit}
@keyframes li-step-composite{0%{transform:scale(.8)}45%{transform:scale(1.12)}100%{transform:scale(1)}}
@keyframes li-step-ring{from{opacity:.8;transform:scale(.6)}to{opacity:0;transform:scale(1.7)}}
/* Decorations cannot trigger layout outside their own clipped scene. */
.li-scroll-flight,.li-meteor-field{contain:layout paint style}
.li-refresh .li-motion-paused .li-network-core:before{animation-play-state:paused!important}
@media(prefers-reduced-motion:reduce){.li-refresh .li-network-core:before,.li-front .li-process-step>span:after{animation:none!important}.li-refresh .li-network-core:before{opacity:.3}.li-refresh .li-button-primary:before{will-change:auto}}
