/* Content reveal: the entry phase of the Visual System word-wave. */
:root { --ds-reveal-offset: .4em; --ds-reveal-entry: 640ms; --ds-reveal-stagger: 160ms; }
.ds-content-reveal .project-text-word { opacity:.18; transform:translateY(var(--ds-reveal-offset)); }
.ds-content-reveal.is-starlit .project-text-word {
 animation:ds-content-enter var(--ds-reveal-entry) var(--ds-ease-soft) both;
 animation-delay:var(--word-delay,0ms);
}
@keyframes ds-content-enter {
 from { opacity:.18; transform:translateY(var(--ds-reveal-offset)); }
 to { opacity:1; transform:translateY(0); }
}
/* The specimen repeats the same entry so its motion can be inspected. */
.reveal-demo b { animation:ds-content-preview 3.2s var(--ds-ease-soft) infinite; }
.reveal-demo b:nth-child(2) { animation-delay:var(--ds-reveal-stagger); }
.reveal-demo b:nth-child(3) { animation-delay:calc(var(--ds-reveal-stagger) * 2); }
@keyframes ds-content-preview {
 0%,55%,100% { opacity:.18; transform:translateY(var(--ds-reveal-offset)); }
 20%,40% { opacity:1; transform:translateY(0); }
}
@media(prefers-reduced-motion:reduce) {
 .ds-content-reveal .project-text-word,.reveal-demo b { animation:none; opacity:1; transform:none; }
}
