/* ══════════════════════════════
   REVEAL
══════════════════════════════ */
.reveal {
  opacity: 0; transform: translateY(40px) perspective(600px) rotateX(8deg);
  transition: opacity 0.7s ease, transform 0.7s cubic-bezier(0.22,1,0.36,1);
}
.reveal.visible { opacity: 1; transform: translateY(0) perspective(600px) rotateX(0deg); }
.reveal-delay-1 { transition-delay: 0.15s; }
.reveal-delay-2 { transition-delay: 0.3s; }
.reveal-delay-3 { transition-delay: 0.45s; }

/* KEYFRAMES */
@keyframes gridScroll {
  from { background-position: 0 0; }
  to { background-position: 0 60px; }
}

@keyframes particleFloat {
  0% { opacity: 0; transform: translateY(100vh) scale(0); }
  10% { opacity: 0.8; }
  90% { opacity: 0.4; }
  100% { opacity: 0; transform: translateY(-20vh) scale(1); }
}

@keyframes beamSwing {
  0%, 100% { opacity: 0.4; transform: rotate(var(--r, -20deg)) scaleY(0.9); }
  50% { opacity: 0.8; transform: rotate(calc(var(--r, -20deg) + 10deg)) scaleY(1.1); }
}

@keyframes pingPulse {
  0%, 100% { opacity: 0.6; transform: scale(1); }
  50% { opacity: 0; transform: scale(2.2); }
}

@keyframes fadeInDown {
  from { opacity: 0; transform: translateY(-20px); }
  to { opacity: 1; transform: translateY(0); }
}

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

@keyframes fadeIn {
  from { opacity: 0; }
  to { opacity: 1; }
}

@keyframes floatBadge {
  0%, 100% { transform: perspective(600px) rotateX(5deg) rotateY(-10deg) translateZ(20px) translateY(0); }
  50% { transform: perspective(600px) rotateX(5deg) rotateY(-10deg) translateZ(20px) translateY(-8px); }
}

@keyframes hintRotate {
  0%, 100% { transform: rotateY(0deg); }
  50% { transform: rotateY(30deg); }
}

@keyframes ringPulse {
  0%, 100% { opacity: 0.15; transform: scale(1); }
  50% { opacity: 0.3; transform: scale(1.05); }
}

@keyframes labelFade {
  0%, 100% { opacity: 0.3; }
  50% { opacity: 0.7; }
}

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