/* Landing animations - used by the spectacular templates (aurora, midnight, neon, …).
   Scroll reveals are driven by the `reveal` Stimulus controller; the rest are pure CSS.
   Everything is disabled under prefers-reduced-motion. */

/* Scroll-in reveal: start hidden, the controller adds .is-visible when it enters the viewport.
   Add inline `style="transition-delay: .1s"` to stagger siblings. */
.reveal {
  opacity: 0;
  transform: translateY(24px);
  transition: opacity 0.7s cubic-bezier(0.16, 1, 0.3, 1), transform 0.7s cubic-bezier(0.16, 1, 0.3, 1);
  will-change: opacity, transform;
}
.reveal.is-visible {
  opacity: 1;
  transform: none;
}

/* Floating blobs / orbs */
@keyframes lk-float {
  0%, 100% { transform: translateY(0) translateX(0); }
  50%      { transform: translateY(-26px) translateX(14px); }
}
.lk-float       { animation: lk-float 7s ease-in-out infinite; }
.lk-float-slow  { animation: lk-float 11s ease-in-out infinite; }

/* Animated gradient (text or background); pair with bg-[length:200%_auto] + a gradient. */
@keyframes lk-gradient {
  0%   { background-position: 0% 50%; }
  100% { background-position: 200% 50%; }
}
.lk-gradient { background-size: 200% auto; animation: lk-gradient 5s linear infinite; }

/* Slow rotation for conic glows */
@keyframes lk-spin { to { transform: rotate(360deg); } }
.lk-spin-slow { animation: lk-spin 18s linear infinite; }

/* Pulsing glow */
@keyframes lk-pulse-glow {
  0%, 100% { opacity: 0.5; }
  50%      { opacity: 1; }
}
.lk-pulse-glow { animation: lk-pulse-glow 4s ease-in-out infinite; }

/* Marquee row (logos / words) - wrap two identical tracks for a seamless loop. */
@keyframes lk-marquee { to { transform: translateX(-50%); } }
.lk-marquee { animation: lk-marquee 22s linear infinite; }

/* Blinking terminal caret */
@keyframes lk-blink { 0%, 49% { opacity: 1; } 50%, 100% { opacity: 0; } }
.lk-blink { animation: lk-blink 1.1s steps(1) infinite; }

/* Twinkling stars (cosmic) */
@keyframes lk-twinkle { 0%, 100% { opacity: 0.2; } 50% { opacity: 1; } }
.lk-twinkle { animation: lk-twinkle 3s ease-in-out infinite; }

/* Scrolling perspective floor grid (retro/synthwave) */
@keyframes lk-grid-pan { to { background-position: 0 60px; } }
.lk-grid-pan { animation: lk-grid-pan 1.5s linear infinite; }

@media (prefers-reduced-motion: reduce) {
  .reveal { opacity: 1; transform: none; transition: none; }
  .lk-float, .lk-float-slow, .lk-gradient, .lk-spin-slow, .lk-pulse-glow, .lk-marquee, .lk-blink, .lk-twinkle, .lk-grid-pan { animation: none; }
}
