` | final value is in the HTML, counted in the reader's format |
| Bars, progress, donut, pie | `bar` · `ring` · `pie` (all `--pct`) | value lives in a CSS variable, label is text |
| Line chart, connector lines, icons | `draw` (SVG `pathLength="1"`) | strokes draw in order |
| Cards, steps, list items | `stagger` (children) | reading order made visible |
| Image (decoration only) | `wipe` · `wipe-up` · `settle` · `zoom-out` | reveal without moving the layout |
| Buttons, links, cards | classes `webmovie-lift` `webmovie-press` `webmovie-sheen` `webmovie-nudge` `webmovie-pulse` `webmovie-border-glow` | CSS only, no JS |
| Something inserted or opened (toast, popover, dialog, new message) | class `webmovie-appear` | CSS `@starting-style`, no JS |
| Scroll-linked | classes `webmovie-scroll` · `webmovie-progress` | CSS `animation-timeline`, no JS |
Newer CSS worth using — `linear()` springs/bounces, `@property` gradients, masks, `offset-path`, scroll-driven and scroll-triggered animations, `sibling-index()`, `@starting-style`, `interpolate-size`, view transitions, WAAPI — with support status: [references/techniques.md](references/techniques.md). Infographic patterns (numbers, bars, rings, charts, timelines, maps, how to sequence a scene): [references/infographics.md](references/infographics.md). Buttons, colors, images, page and state transitions: [references/ui.md](references/ui.md). The CSS animation language itself (properties, shorthand order, fill modes, events, `@property`, scroll timelines, view transitions, WAAPI): [references/css-animation.md](references/css-animation.md).
## The kit in one minute
```html
Start small.
Every word is HTML.
Ship often.
12,500 learners
Text that moves — and stays text.
Made for search engines, translators, editors
72%
- Write
- Pick one shot
- Check
```
- Options: `data-webmovie-split` (`chars|words|lines|children|paths|none`), `data-webmovie-from` (`start|end|center|edges|random`), `data-webmovie-delay|dur|stagger|max` (ms), `data-webmovie-trigger` (`view|load|hover|click|manual`), `data-webmovie-repeat`.
- Power: `data-webmovie-power="calm|bold|wild"` on any container (bold = default: distances, blur and scale × 1.6 with an overshoot curve; wild × 2.4 with a spring; calm × 1 for reading-heavy pages). Impact: `data-webmovie-burst="14"` throws sparks when the element lands (`data-webmovie-burst-at="ms"`, colors from `--webmovie-burst: #f90, #fff`). A `count` ends with a punch.
- Spotlight: `data-webmovie-spotlight=""` on a block, members `data-webmovie-cue` (own cue list allowed: `data-webmovie-cue="tada"`), `data-webmovie-hold` (ms between cues, 1700), `data-webmovie-loops` (rounds, 2), `data-webmovie-delay` (ms after the entrance, 700), `--webmovie-cue-color`, `--webmovie-cue-partner` (the partners' keyframes). Whole cues need a box (block, inline-block, a button); `ripple` works on inline text. `webmovie.replay(block)` starts it again. Recipes and rules: [references/acting.md](references/acting.md#spotlight--take-turns).
- Elements that enter the view together cascade 100 ms apart in reading order (`--webmovie-cascade`).
- Content added later (Alpine, fetch) is picked up by itself; `webmovie.replay(el)` after changing an element's text (language switch).
- `?webmovie-t=0.4` on any page plays everything and freezes it at 0.4 s — for screenshots and review (`&webmovie-scene=2` for a movie's third scene).
## Check
```bash
node scripts/check.mjs https://example.com/page # or a local .html file
node scripts/check.mjs page.html --times 0.2,0.5,3 --width 390 --eval "document.title"
```
It opens the page three times in headless Chrome and prints errors (✗, exit code 1) and warnings (!):
| Kind | Meaning |
| --- | --- |
| ✗ `hidden-without-js` | text invisible when JS does not run (hidden in plain CSS) |
| ✗ `stuck-hidden` | still invisible after scrolling through and waiting |
| ✗ `text-changed` | after the animation the text differs from the HTML |
| ✗ `split-left` | letter/word spans were not put back |
| ✗ `hidden-reduced-motion` · `moving-reduced-motion` | reduced-motion users get hidden or moving content |
| ✗ `movie-no-pause` | a movie without its play/pause button |
| ! `reflow` | lines break differently while split → the text jumps when restored |
| ! `layout-property` | an animation moves width/top/margin/font-size … |
| ! `endless-text` | moving text that never stops (WCAG 2.2.2) |
| ! `js-only-content` | animated text created by JS, not in the HTML |
| ! `pixels` | video / canvas / GIF on the page — keep the words as HTML |
Before reading the final text the check stops movies and spotlights (`webmovie.stopSpotlights()`).
Frames go to `./webmovie-check/t-.png`; open them and look — a check cannot see an ugly frame.
## Files
| File | Use |
| --- | --- |
| `assets/webmovie.css` · `assets/webmovie.js` | the kit — copy unchanged |
| `assets/demo.html` | a 4-scene movie + every shot + infographic + buttons; `demo.html?lang=ar` / `ko` / `ja` |
| `scripts/check.mjs` | the browser check above |
| [references/acting.md](references/acting.md) | **strong motion** — power levels, the 8 acting principles (anticipation, squash, overshoot, follow-through, arcs, secondary, impact, camera) with keyframes, amplitude numbers, recipes, safety limits |
| [references/principles.md](references/principles.md) | timing, easing, stagger, choreography, performance, accessibility, SEO, i18n — with numbers |
| [references/html.md](references/html.md) | which HTML element for which content, charts as data, multilingual markup, SEO checklist |
| [references/movie.md](references/movie.md) | **the player** — markup, how a movie plays, storyboarding and directing scenes, recipes, core code |
| [references/picture.md](references/picture.md) | **the picture movie** — a still illustration split into plate + cut-out layers (image-model prompts), places in %, the one-clock timeline, crop, replay, core code |
| [references/techniques.md](references/techniques.md) | modern CSS techniques with snippets and browser support (checked 2026-10-25) |
| [references/presets.md](references/presets.md) | every shot (preset): values, attributes, the core code of webmovie.js/css, adding a preset |
| [references/infographics.md](references/infographics.md) | counters, bars, rings, charts, timelines, sequencing a data scene |
| [references/ui.md](references/ui.md) | buttons, hover, color, images, page/state transitions |
| [references/css-animation.md](references/css-animation.md) | CSS animation and transition reference, scroll-driven, view transitions, WAAPI |
| [references/projects/sonub.md](references/projects/sonub.md) | **SONUB (sonub.com)** — read first when working in that repository |