Plain, fully editable Etch tree: a heading whose text is authored normally (edit it directly, no special markup needed) inside a wrapper that carries every behaviour as a data attribute (edit it in Etch's attributes panel): data-effect (fade-up|blur|scale-pop|mask|cascade|wave|soft|typewriter) the reveal style; data-unit (word|char) split granularity — most effects default to word, scale-pop/wave/typewriter default to char; data-trigger (inview|load|hover|click) when the reveal runs; data-stagger (ms between units, default 45); data-duration (ms per unit, default 650); data-delay (ms before the first unit starts, default 0); data-once (true|false; false re-runs every time it re-enters view); data-threshold (0-1, how much of the block must be visible to trigger, default 0.4). Inline JS (no library) splits the authored text into word or character units on first run, wraps a visually-hidden duplicate holding the real text for screen readers around them, and — once the block crosses the chosen intersection threshold — reveals each unit with a per-unit stagger using one of eight CSS-transition styles: fade-up (rises and fades in), blur (comes into focus), scale-pop (overshoots in from slightly large), mask (each word slides up out of a clipped band, like a blind lifting), cascade (a longer, gentler diagonal drift), wave (units ride an alternating up/down offset), soft (a barely-there blur+fade for quiet copy) and typewriter (characters appear instantly left to right with a blinking caret). Runs once by default (data-once) or every time it re-enters view; data-trigger can fire it on load, on hover or on click instead of on scroll. Under prefers-reduced-motion every unit is simply shown, fully revealed, with no stagger, no caret and no transition. :focus-visible ring when data-trigger="click" (the block becomes a keyboard-operable button), AA contrast, and the text stays selectable and reachable by screen readers throughout.