Fade-up reveal
A lightweight reveal that respects reduced motion and needs no JavaScript library.
/* CSS */
[data-sc-effect="fade-up"] {
opacity: 0;
transform: translateY(18px);
transition: opacity 600ms ease, transform 600ms ease;
}
[data-sc-effect="fade-up"].is-visible {
opacity: 1;
transform: none;
}
@media (prefers-reduced-motion: reduce) {
[data-sc-effect="fade-up"] { opacity: 1; transform: none; transition: none; }
}
/* JS */
const revealObserver = new IntersectionObserver((entries, observer) => {
entries.forEach(({isIntersecting, target}) => {
if (!isIntersecting) return;
target.classList.add('is-visible');
observer.unobserve(target);
});
}, { threshold: 0.15 });
document.querySelectorAll('[data-sc-effect="fade-up"]').forEach((el) => revealObserver.observe(el));