/* BTAPL — Animation utilities (GSAP-driven reveals use these as base states) */

[data-reveal] { opacity: 0; }
.reveal-up { transform: translateY(28px); }
.reveal-fade { transform: none; }
.reveal-scale { transform: scale(0.94); }
.reveal-left { transform: translateX(-32px); }
.reveal-right { transform: translateX(32px); }

.no-js [data-reveal] { opacity: 1 !important; transform: none !important; }

@keyframes pulse-ring {
  0% { box-shadow: 0 0 0 0 rgba(3, 105, 161, 0.35); }
  100% { box-shadow: 0 0 0 14px rgba(3, 105, 161, 0); }
}
.pulse { animation: pulse-ring 2.2s var(--ease-out) infinite; }

@keyframes float-y {
  0%, 100% { transform: translateY(0); }
  50% { transform: translateY(-10px); }
}
.float { animation: float-y 5s ease-in-out infinite; }

@keyframes marquee-scroll {
  from { transform: translateX(0); }
  to { transform: translateX(-50%); }
}
.marquee-track { display: flex; width: max-content; animation: marquee-scroll 32s linear infinite; }
.marquee:hover .marquee-track { animation-play-state: paused; }
.marquee { overflow: hidden; mask-image: linear-gradient(90deg, transparent, #000 8%, #000 92%, transparent); -webkit-mask-image: linear-gradient(90deg, transparent, #000 8%, #000 92%, transparent); }

@keyframes spin-slow {
  to { transform: rotate(360deg); }
}
.spin-slow { animation: spin-slow 18s linear infinite; }

@keyframes counter-glow {
  0%, 100% { opacity: 1; }
  50% { opacity: 0.75; }
}

.hairline-draw {
  stroke-dasharray: 1;
  stroke-dashoffset: 1;
  pathLength: 1;
}

@media (prefers-reduced-motion: reduce) {
  .pulse, .float, .marquee-track, .spin-slow { animation: none !important; }
}
