/* ============================================================
   Gen ex Gen — Animations
   ============================================================ */

/* ── Scroll Reveal ─────────────────────── */
.reveal {
  opacity: 0; transform: translateY(50px);
  transition: opacity var(--dur-slow) var(--ease-out),
              transform var(--dur-slow) var(--ease-out);
}
.reveal.visible { opacity: 1; transform: translateY(0); }

/* ── Staggered children ────────────────── */
.reveal-stagger > * {
  opacity: 0; transform: translateY(40px);
  transition: opacity 0.7s var(--ease-out), transform 0.7s var(--ease-out);
}
.reveal-stagger.visible > *:nth-child(1) { transition-delay: 0s; }
.reveal-stagger.visible > *:nth-child(2) { transition-delay: 0.12s; }
.reveal-stagger.visible > *:nth-child(3) { transition-delay: 0.24s; }
.reveal-stagger.visible > *:nth-child(4) { transition-delay: 0.36s; }
.reveal-stagger.visible > *:nth-child(5) { transition-delay: 0.48s; }
.reveal-stagger.visible > * {
  opacity: 1; transform: translateY(0);
}

/* ── Philosophy specific ────────────────── */
.pf-block.reveal { transform: translateY(60px); }
.pf-block.pf-left.reveal  { transform: translateX(-40px); opacity: 0; }
.pf-block.pf-right.reveal { transform: translateX(40px); opacity: 0; }
.pf-block.pf-center.reveal { transform: translateY(60px); opacity: 0; }
.pf-block.visible { transform: translate(0, 0) !important; opacity: 1 !important; }

/* ── Float ──────────────────────────────── */
@keyframes float { 0%,100%{transform:translateY(0)} 50%{transform:translateY(-8px)} }
.float { animation: float 5s ease-in-out infinite; }

/* ── Pulse ──────────────────────────────── */
@keyframes pulse { 0%,100%{opacity:.3} 50%{opacity:.6} }
.pulse { animation: pulse 3s ease-in-out infinite; }

/* ── Fade in up ─────────────────────────── */
@keyframes fadeUp { from{opacity:0;transform:translateY(30px)} to{opacity:1;transform:translateY(0)} }
.fade-up { animation: fadeUp 0.6s var(--ease-out) forwards; }
