/* Animations — kept subtle; disabled for reduced-motion users */
@keyframes lineUp{to{transform:none}}
@keyframes floaty{0%,100%{transform:translateY(0) rotate(0)}50%{transform:translateY(-16px) rotate(.4deg)}}
@keyframes marquee{to{transform:translateX(-50%)}}
@keyframes pulse{0%,100%{opacity:1}50%{opacity:.45}}
@keyframes ring{0%{transform:scale(1);opacity:.7}100%{transform:scale(1.6);opacity:0}}
@keyframes fade{from{opacity:0}to{opacity:1}}
@keyframes modalIn{from{opacity:0;transform:translateY(40px) scale(.97)}to{opacity:1;transform:none}}
@keyframes msgIn{from{opacity:0;transform:translateY(10px)}to{opacity:1;transform:none}}
@keyframes blink{0%,100%{opacity:.25}50%{opacity:1}}
@keyframes spin{to{transform:rotate(360deg)}}
@keyframes drift{0%,100%{transform:translate(0,0)}50%{transform:translate(30px,-24px)}}
@keyframes dash{to{stroke-dashoffset:-40}}
.glow.drift{animation:drift 14s ease-in-out infinite}
.spin-slow{animation:spin 40s linear infinite}
.dash-line{stroke-dasharray:6 8;animation:dash 1.4s linear infinite}
.page-fade{animation:fade .5s ease both}
.loader{position:fixed;inset:0;background:var(--bg);z-index:5000;display:grid;place-items:center;transition:opacity .6s,visibility .6s}
.loader.done{opacity:0;visibility:hidden}
.loader span{width:42px;height:42px;border:3px solid rgba(255,255,255,.1);border-top-color:var(--orange);border-radius:50%;animation:spin .8s linear infinite}
@media (prefers-reduced-motion:reduce){
  *,*::before,*::after{animation-duration:.01ms!important;animation-iteration-count:1!important;transition-duration:.01ms!important;scroll-behavior:auto!important}
  .reveal{opacity:1;transform:none}.hero h1 .line > span{transform:none}.marquee-track{animation:none}
}
