/*
 * Initial "before reveal" state only. The reveal itself (opacity/transform to
 * their natural values) is driven by GSAP in js/modules/reveals.js, which also
 * owns the prefers-reduced-motion branch — keep this file limited to the
 * from-state so there is only one system deciding how a reveal actually plays.
 */
.js [data-reveal] { opacity: 0; transform: translateY(22px); }
.js [data-reveal-group] > * { opacity: 0; transform: translateY(18px); }
