/* ==========================================================================
   SWASLife · Animations
   Keyframes + scroll-reveal states. Respects prefers-reduced-motion.
   ========================================================================== */

/* -------- Keyframes -------- */
@keyframes drift {
  0%   { transform: translate3d(0, 0, 0)    scale(1);    }
  50%  { transform: translate3d(3%, -2%, 0) scale(1.05); }
  100% { transform: translate3d(-2%, 3%, 0) scale(0.98); }
}

@keyframes floaty {
  0%, 100% { transform: translateY(0)     rotate(0);     }
  50%      { transform: translateY(-22px) rotate(18deg); }
}

@keyframes fadeInUp {
  from { opacity: 0; transform: translateY(12px); }
  to   { opacity: 1; transform: translateY(0);    }
}

/* -------- Scroll-reveal -------- */
.reveal {
  opacity: 0;
  transform: translateY(28px);
  transition:
    opacity var(--duration-slow) var(--ease-out-soft),
    transform var(--duration-slow) var(--ease-out-soft);
}
.reveal.in {
  opacity: 1;
  transform: translateY(0);
}
.reveal-delay-1 { transition-delay: 0.08s; }
.reveal-delay-2 { transition-delay: 0.16s; }
.reveal-delay-3 { transition-delay: 0.24s; }
.reveal-delay-4 { transition-delay: 0.32s; }

/* ==========================================================================
   Reduced motion
   Kills movement but preserves visibility and functional state. The carousel
   and accordion still WORK — they just switch instantly instead of animating.
   ========================================================================== */
@media (prefers-reduced-motion: reduce) {
  .mesh-bg,
  .float-dot,
  .reveal,
  .cycle .item,
  .carousel__slide,
  .accordion__panel,
  .confirmation.is-visible {
    animation: none !important;
    transition: none !important;
  }

  .reveal { opacity: 1; transform: none; }

  .cycle .item          { opacity: 0; transform: none; }
  .cycle .item.active   { opacity: 1; transform: none; }
  .cycle .item.leaving  { opacity: 0; transform: none; }

  .carousel__slide            { transform: none; }
  .carousel__slide.is-active  { transform: none; }
}
