/* Shared motion. Hidden-until-revealed states only apply under .motion,
   which the inline head script sets and removes again if motion.js never ran. */
@keyframes rise {
  from { opacity: 0; transform: translateY(18px); }
  to { opacity: 1; transform: none; }
}
@keyframes float {
  0%, 100% { transform: translateY(0) rotate(0deg); }
  50% { transform: translateY(-10px) rotate(-1.5deg); }
}
@keyframes drift {
  from { transform: translate(0, 0) scale(1); }
  to { transform: translate(-8%, 6%) scale(1.15); }
}
@keyframes pulse {
  0%, 100% { opacity: 1; transform: scale(1); }
  50% { opacity: 0.35; transform: scale(0.7); }
}

.motion .rise {
  animation: rise 0.9s cubic-bezier(0.2, 0.7, 0.2, 1) both;
  animation-delay: calc(var(--i, 0) * 120ms + 80ms);
}
.motion [data-reveal] {
  opacity: 0;
  transform: translateY(24px);
  transition: opacity 0.8s cubic-bezier(0.2, 0.7, 0.2, 1), transform 0.8s cubic-bezier(0.2, 0.7, 0.2, 1);
  transition-delay: calc(var(--i, 0) * 90ms);
}
.motion [data-reveal].in { opacity: 1; transform: none; }

.brand svg { transition: transform 0.5s cubic-bezier(0.3, 1.6, 0.5, 1); transform-origin: 50% 90%; }
.brand:hover svg { transform: rotate(-10deg); }

@media (prefers-reduced-motion: reduce) {
  *, *::before, *::after { animation: none !important; transition: none !important; }
  .motion [data-reveal] { opacity: 1; transform: none; }
  html { scroll-behavior: auto !important; }
}
