/* ─── Scroll-reveal system ────────────────────────────────────────
   Usage: add data-reveal="up|left|right|fade" to any element.
   Optionally add data-reveal-delay="150" (ms) for stagger.
   JS adds .is-revealed when element enters viewport.
   Progressive enhancement: without JS elements stay visible.
──────────────────────────────────────────────────────────────── */

/* ── Base hidden state ───────────────────────────────────────── */

[data-reveal] {
  opacity: 0;
  transition:
    opacity   0.85s cubic-bezier(0.4, 0, 0.2, 1),
    transform 0.85s cubic-bezier(0.4, 0, 0.2, 1);
  will-change: opacity, transform;
}

[data-reveal="up"] {
  transform: translateY(30px);
}

[data-reveal="left"] {
  transform: translateX(-44px);
}

[data-reveal="right"] {
  transform: translateX(44px);
}

[data-reveal="fade"] {
  transform: none;
}

/* ── Revealed state ──────────────────────────────────────────── */

[data-reveal].is-revealed {
  opacity: 1;
  transform: none;
}

/* ════════════════════════════════════════════════════════════════
   GROW ANIMATIONS — clip-path reveals (opacity stays 1, clip hides)
   grow-down : reveals top → bottom (stripes, vertical lines)
   grow-right: reveals left → right (horizontal lines)
════════════════════════════════════════════════════════════════ */

[data-reveal="grow-down"],
[data-reveal="grow-right"] {
  opacity: 1;          /* clip-path handles hiding, not opacity */
  transform: none;
  will-change: clip-path;
  transition: clip-path 2.4s cubic-bezier(0.4, 0, 0.2, 1);
}

[data-reveal="grow-down"] {
  clip-path: inset(0 0 100% 0);
}

[data-reveal="grow-right"] {
  clip-path: inset(0 100% 0 0);
}

[data-reveal="grow-down"].is-revealed,
[data-reveal="grow-right"].is-revealed {
  clip-path: inset(0 0 0% 0);
}
