Open numbers
Design health of every site
Read from each site's own code: motion through the kit's timings and curves, colours from the theme, a pause for people who ask for less movement, and nothing that spins. 100 is a site that follows the kit everywhere it was read. Measured Nov 1, 2026, at each site's main branch.
Every site
Most to fix first. A site's page shows where, line by line.
All 47 sites 32 more
How it is measured
- Spinners −4 each
- A keyframe that turns a whole circle, or an animation that runs one forever. Nothing on OpenVibe spins: a loading state breathes, bobs or fills.
- No reduced motion −2 each
- A stylesheet that animates and never asks for prefers-reduced-motion, so a person who asked for less movement still gets it.
- Hand-set timings −0.25 each
- A transition or animation time written by hand (.25s, 300ms) where the kit says var(--ov-dur-1…4), so a look's motion and Calm cannot change it.
- Hand-set curves −0.25 each
- A cubic-bezier() or an ease keyword where the kit says var(--ov-ease-out), var(--ov-ease-spring) or var(--ov-ease-in-out).
- Colours outside the theme −0.05 each
- A colour written by hand in a file that already uses the theme's variables: it stays put when a person changes their look.
A site's score is 100 minus what its findings cost, never below 0. The rules read every stylesheet, and every <style> in a page or script, under a site's public/ and server/views/; a site with none there is left out. The kit's own tokens and the fallback inside var(--name, fallback) never count. The rules are open: server/design-health/scan.js, run by scripts/design-health.js. The same numbers: /api/v1/design-health.