/* ── Clip reveal — left to right ─────────────────────────────────────────── */
[data-reveal] {
    clip-path: inset(0 100% 0 0);
    transition: clip-path 1.2s cubic-bezier(0.19, 1, 0.22, 1);
    transition-delay: var(--reveal-delay, 0s);
}

[data-reveal].is-visible {
    clip-path: inset(0 0% 0 0);
}

/* ── Fade up ─────────────────────────────────────────────────────────────── */
[data-fade] {
  opacity: 0;
  transform: translateY(40px);
  transition: opacity 0.8s ease, transform 0.8s ease;
  transition-delay: var(--reveal-delay, 0s);
}

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

/* ── Reduced motion ──────────────────────────────────────────────────────── */
@media (prefers-reduced-motion: reduce) {
  [data-reveal],
  [data-fade] {
    transition: none;
    clip-path: none;
    opacity: 1;
    transform: none;
  }
}
