@keyframes fadeInUp{from{opacity:0;transform:translateY(32px)}to{opacity:1;transform:none}}
@keyframes fadeInLeft{from{opacity:0;transform:translateX(-42px)}to{opacity:1;transform:none}}
@keyframes fadeInRight{from{opacity:0;transform:translateX(42px)}to{opacity:1;transform:none}}
@keyframes marquee{from{transform:translateX(0)}to{transform:translateX(-50%)}}
@keyframes pulse{0%,100%{transform:scale(1);box-shadow:0 18px 60px rgba(37,211,102,.25)}50%{transform:scale(1.045);box-shadow:0 26px 80px rgba(37,211,102,.42)}}
@keyframes cartBounce{0%,100%{transform:scale(1)}35%{transform:scale(1.22)}65%{transform:scale(.92)}}
@keyframes floatBlob{0%,100%{transform:translate3d(0,0,0) scale(1)}50%{transform:translate3d(-22px,18px,0) scale(1.08)}}
@keyframes spinSoft{from{transform:rotate(0deg)}to{transform:rotate(360deg)}}
@keyframes modelIdle{0%,100%{transform:rotateX(0) rotateY(-7deg) translateY(0)}50%{transform:rotateX(3deg) rotateY(10deg) translateY(-12px)}}
@keyframes chipFloat{0%,100%{transform:translateY(0)}50%{transform:translateY(-14px)}}
@keyframes mosaicPulse{0%,100%{transform:scale(1);filter:saturate(1)}50%{transform:scale(.92);filter:saturate(1.7)}}
@keyframes slideDownFade{from{opacity:0;transform:translateY(-12px)}to{opacity:1;transform:none}}
@keyframes checkDraw{0%{stroke-dashoffset:100}100%{stroke-dashoffset:0}}
.reveal{opacity:0;transform:translateY(34px);transition:opacity .75s ease,transform .75s cubic-bezier(.16,1,.3,1)}
.reveal.is-visible{opacity:1;transform:none}
.reveal.delay-1{transition-delay:.12s}.reveal.delay-2{transition-delay:.24s}.reveal.delay-3{transition-delay:.36s}.reveal.delay-4{transition-delay:.48s}
.reveal-group .reveal:nth-child(2){transition-delay:.1s}.reveal-group .reveal:nth-child(3){transition-delay:.2s}.reveal-group .reveal:nth-child(4){transition-delay:.3s}.reveal-group .reveal:nth-child(5){transition-delay:.4s}
.magnetic{will-change:transform}
a{text-decoration:none;color:inherit}
.page-fade{position:fixed;inset:0;background:#050505;z-index:3000;pointer-events:none;opacity:0;transition:opacity .28s ease}.page-fade.active{opacity:1}
@media(prefers-reduced-motion:reduce){*,*::before,*::after{animation-duration:.01ms!important;animation-iteration-count:1!important;transition-duration:.01ms!important}.reveal{opacity:1!important;transform:none!important}}
