/* ===================================================================
   NOVA · animations.css
   Keyframes + reveal/scroll animation primitives
   =================================================================== */

/* ─── Reusable keyframes ──────────────────────────────────────────── */
@keyframes fadeIn {
  from { opacity: 0; }
  to   { opacity: 1; }
}

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

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

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

@keyframes flicker {
  0%, 19%, 21%, 23%, 25%, 54%, 56%, 100% { opacity: 1; }
  20%, 24%, 55%                          { opacity: 0.85; }
}

@keyframes scrollDown {
  0%   { transform: translateY(0); }
  100% { transform: translateY(330%); }
}

@keyframes shimmer {
  from { background-position: -200% 0; }
  to   { background-position: 200% 0; }
}

/* ─── Reveal-on-scroll primitive ──────────────────────────────────── */
[data-reveal] {
  opacity: 0;
  transform: translateY(40px);
  transition:
    opacity var(--dur-slow) var(--ease-out-expo),
    transform var(--dur-slow) var(--ease-out-expo);
  will-change: opacity, transform;
}

[data-reveal].is-revealed {
  opacity: 1;
  transform: translateY(0);
}

/* Variant: hero title lines — slide up from below the line */
.hero__title-line {
  display: block;
  transform: translateY(110%);
  opacity: 0;
  transition:
    transform var(--dur-cinematic) var(--ease-out-expo),
    opacity var(--dur-cinematic) var(--ease-out-expo);
}

.hero__title-line.is-revealed {
  transform: translateY(0);
  opacity: 1;
}

/* (former scroll-margin-top rule removed — those legacy sections
   (.about, .philosophy, .live, .lifestyle, .gallery) are not built
   in this iteration, and the 80px offset broke the snap target for
   .cta, leaving a strip of Reality visible at the top when snapping
   to the CTA screen.) */
