/* Rae Studio — animations */

.reveal {
  opacity: 0;
  transform: translateY(26px);
  transition: opacity 0.8s cubic-bezier(0.22, 0.61, 0.36, 1),
    transform 0.8s cubic-bezier(0.22, 0.61, 0.36, 1);
  will-change: opacity, transform;
}
.reveal.is-visible { opacity: 1; transform: none; }

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

@keyframes fadeInDown {
  from { opacity: 0; transform: translateY(-12px); }
  to { opacity: 1; transform: none; }
}
.primary-nav.is-open { animation: fadeInDown 0.35s ease both; }

@keyframes ripple {
  to { transform: scale(3.2); opacity: 0; }
}
.order-btn { position: relative; overflow: hidden; }
.order-btn .ripple {
  position: absolute; border-radius: 50%; width: 12px; height: 12px;
  background: currentColor; opacity: 0.28; transform: scale(0);
  animation: ripple 0.65s ease-out forwards; pointer-events: none;
}

.card, .feature, .gallery-item, .btn, .chip { will-change: transform; }

@media (prefers-reduced-motion: reduce) {
  html { scroll-behavior: auto; }
  .reveal { opacity: 1; transform: none; transition: none; }
  .float, .primary-nav.is-open { animation: none; }
  .order-btn .ripple { display: none; }
  *, *::before, *::after { transition-duration: 0.01ms !important; }
}
