.reveal {
  opacity: 0;
  transform: translateY(34px);
  transition:
    opacity 700ms cubic-bezier(0.21, 1, 0.3, 1),
    transform 700ms cubic-bezier(0.21, 1, 0.3, 1);
}

.reveal.is-visible {
  opacity: 1;
  transform: translateY(0);
}

@keyframes fadeLift {
  to {
    opacity: 1;
    transform: translateY(0);
  }
}

@keyframes drift {
  0%,
  100% {
    transform: perspective(1200px) rotateY(-10deg) rotateX(4deg) translateY(0);
  }
  50% {
    transform: perspective(1200px) rotateY(-7deg) rotateX(2deg) translateY(-10px);
  }
}

@keyframes rotateSlow {
  from {
    transform: rotate(0deg);
  }
  to {
    transform: rotate(360deg);
  }
}

@keyframes floatBlob {
  0%,
  100% {
    transform: translate3d(0, 0, 0) scale(1);
  }
  50% {
    transform: translate3d(1.3rem, 1.8rem, 0) scale(1.08);
  }
}

@keyframes driftMobile {
  0%,
  100% {
    transform: translateY(0);
  }
  50% {
    transform: translateY(-6px);
  }
}

@media (prefers-reduced-motion: reduce) {
  body::before,
  body::after,
  .device-shell,
  .hero-orbit,
  .hero-copy > * {
    animation: none !important;
  }

  .hero-copy > * {
    opacity: 1;
    transform: none;
  }

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