
/* shared motion system */
[data-animate]{opacity:0;transform:translateY(28px);transition:opacity .7s ease,transform .7s ease}
[data-animate].is-visible{opacity:1;transform:none}
[data-animate="fade-left"]{transform:translateX(-34px)}
[data-animate="fade-right"]{transform:translateX(34px)}
[data-animate="zoom"]{transform:scale(.96)}
[data-animate="fade-left"].is-visible,[data-animate="fade-right"].is-visible,[data-animate="zoom"].is-visible{transform:none}
.motion-card{transition:transform .28s ease,box-shadow .28s ease,border-color .28s ease}
.motion-card:hover{transform:translateY(-6px)}
.motion-float{animation:motionFloat 6s ease-in-out infinite}
.motion-pulse{animation:motionPulse 3.8s ease-in-out infinite}
.motion-shine{position:relative;overflow:hidden}
.motion-shine:after{content:"";position:absolute;inset:-120% auto -120% -45%;width:25%;background:linear-gradient(90deg,transparent,rgba(255,255,255,.12),transparent);transform:rotate(18deg);animation:motionShine 5.8s linear infinite;pointer-events:none}
@keyframes motionFloat{0%,100%{transform:translateY(0)}50%{transform:translateY(-10px)}}
@keyframes motionPulse{0%,100%{filter:brightness(1)}50%{filter:brightness(1.15)}}
@keyframes motionShine{0%{left:-45%}55%,100%{left:125%}}
@media (prefers-reduced-motion:reduce){[data-animate]{opacity:1!important;transform:none!important;transition:none!important}.motion-float,.motion-pulse,.motion-shine:after{animation:none!important}}
