system.cssthe engine GitHub

The rhythm ladder

THE RHYTHM LADDER (gf-231, per Mike — "prevent drift")

--gap takes ONLY these rungs — a usage site picks a rung, never a number: block rhythm 0 · 0.25lh (default) · 0.5lh · 1lh; inline rows (chip/button rows) 0.25em · 0.5em · 1em. 419 inline gaps across 23 values had crept in before this; TestGapLadderRatchet counts off-ladder values per .templ and the count may only go down (event/home are clean; admin/settings carry the grandfathered debt — snap values when you touch a site). Same spirit for every knob: the engine owns the scale, templates pick steps.

THE CONTENT LADDER (2026-10-01, the Open Props spelling; it replaced .measure + --measure): .content-1 · .content-2 · .content-3 centre a surface at a width the engine owns — 1 a column (a wizard station, a confirm, a form alone; 40ch) · 2 reading (a settings leaf, prose, a report; 70ch) · 3 working (a record page's grid, a workbench; 100ch), in the wearer's own ch so a surface grows with --type and the text-size preference, filling anything narrower. THE DIALOG WEARS THE SAME WORDS: .modal is .content-2 by default, a confirm is .modal.content-1, a workbench .modal.content-3 (.sm/.lg are gone). Rosters take no rung: they fill the canvas. A width written as a length is a regression.