/* ═══════════════════════════════════════════
   ANIMATIONS — keyframes & scroll reveals
   ═══════════════════════════════════════════ */

@keyframes aurora {
  0%   { transform: rotate(0deg) scale(1); }
  50%  { transform: rotate(4deg) scale(1.1); }
  100% { transform: rotate(-3deg) scale(1.05); }
}

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

@keyframes blink { 50% { opacity: 0; } }

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

@keyframes float {
  0%, 100% { transform: translateY(0) translateX(0); }
  33% { transform: translateY(-26px) translateX(14px); }
  66% { transform: translateY(12px) translateX(-10px); }
}

@keyframes floatSpin {
  0%   { transform: rotate(0deg) translateY(0); }
  50%  { transform: rotate(180deg) translateY(-20px); }
  100% { transform: rotate(360deg) translateY(0); }
}

@keyframes cubeSpin {
  from { transform: rotateX(0) rotateY(0); }
  to   { transform: rotateX(360deg) rotateY(360deg); }
}

@keyframes drop {
  0%   { transform: translateY(0); opacity: 1; }
  100% { transform: translateY(18px); opacity: 0; }
}

/* ── Scroll reveal ── */
.reveal {
  opacity: 0;
  transform: translateY(44px);
  transition: opacity var(--dur) var(--ease-out), transform var(--dur) var(--ease-out);
  transition-delay: var(--d, 0s);
}
.reveal.visible { opacity: 1; transform: translateY(0); }

/* hero title line mask reveal */
.reveal-line > span {
  transform: translateY(110%);
  transition: transform 1.1s var(--ease-out);
}
.reveal-line.visible > span { transform: translateY(0); }

/* card scale-in variant */
.reveal-scale {
  opacity: 0;
  transform: scale(0.92) translateY(24px);
  transition: opacity var(--dur) var(--ease-out), transform var(--dur) var(--ease-spring);
  transition-delay: var(--d, 0s);
}
.reveal-scale.visible { opacity: 1; transform: scale(1) translateY(0); }

/* directional slide reveals (photo from left, copy from right) */
.reveal.reveal-left {
  opacity: 0;
  transform: translateX(-160px) scale(0.96);
  transition: opacity 1s var(--ease-out), transform 1.1s var(--ease-out);
  transition-delay: var(--d, 0s);
}
.reveal.reveal-left.visible { opacity: 1; transform: translateX(0) scale(1); }
.reveal.reveal-right {
  opacity: 0;
  transform: translateX(90px);
  transition: opacity 0.85s var(--ease-out), transform 0.95s var(--ease-out);
  transition-delay: var(--d, 0s);
}
.reveal.reveal-right.visible { opacity: 1; transform: translateX(0); }

/* ── Reduced motion ── */
@media (prefers-reduced-motion: reduce) {
  html { scroll-behavior: auto; }
  *, *::before, *::after {
    animation-duration: 0.001s !important;
    animation-iteration-count: 1 !important;
    transition-duration: 0.001s !important;
  }
  .reveal, .reveal-scale, .reveal-left, .reveal-right, .reveal-line > span, .titem .tcard { opacity: 1 !important; transform: none !important; }
  .cursor-dot, .cursor-ring, .mouse-glow { display: none; }
}
