Split text reveal
A small line-by-line headline reveal that avoids a runtime text-splitting dependency.
[data-sc-effect="split-text"] [data-sc-line] {
display: block; clip-path: inset(0 0 100% 0); transform: translateY(1em);
transition: clip-path 700ms cubic-bezier(.2, .8, .2, 1), transform 700ms cubic-bezier(.2, .8, .2, 1);
transition-delay: calc(var(--sc-index, 0) * 90ms);
}
[data-sc-effect="split-text"].is-visible [data-sc-line] { clip-path: inset(0); transform: none; }
@media (prefers-reduced-motion: reduce) {
[data-sc-effect="split-text"] [data-sc-line] { clip-path: inset(0); transform: none; transition: none; }
}
document.querySelectorAll('[data-sc-effect="split-text"]').forEach((heading) => {
heading.querySelectorAll('[data-sc-line]').forEach((line, index) => line.style.setProperty('--sc-index', index));
requestAnimationFrame(() => heading.classList.add('is-visible'));
});