prose
Paragraphs at a readable measure. Narrow column.
preset: corporate
Professional monotone. Near-grey, one restrained accent, tight grid, no decoration. Every page in this guide carries identical copy - so anything that reads differently is the design doing the work, not the words.
Not a colour swap. A whole design language.
A preset owns the palette, the type pairing, the type scale, the border weight, the corner radius, any texture, and the motion. Components ship neutral structure and a handful of op-* hook classes; every decision with taste in it lives in presets.css.
That split is what makes this maintainable. Adding a tenth preset means adding one block of CSS and one registry entry - never touching a component. And a component fix improves all nine at once.
Mix and repeat them. Nine card grids in a row is how a page starts looking generated.
Paragraphs at a readable measure. Narrow column.
A grid of short claims. Two, three or four up.
Numbered sequence on a vertical rule.
Large figures with small labels under them.
One line given a whole screen to breathe.
Native details/summary. No JavaScript.
new.sh --name builds the folder, installs, runs a verification build and commits.
Edit src/page.ts. One file. It is a typed structure, so a wrong section kind is a build error, not a broken page.
bun run dev for hot reload while you argue about the wording.
./deploy.sh puts it on CloudFlare at and waits until the live HTML is genuinely yours.
The default look is the tell. Pick a language and commit to it.
Yes - theme.accent in page.ts, any hex. Readable text on top of it is computed for you. The presets are tuned, though, so try them as-shipped first.
No, and deliberately. A preset owns whether it is light or dark because the palettes are built as wholes. Inverting one produced worse results than choosing a different preset.
An entry in src/lib/presets.ts and a block in src/styles/presets.css. Then redeploy this guide so it shows up here.
CloudFlare Workers static assets on the Duplo account, at by default. --zone takes any domain on that account.