Skip to the collection

A styling system that speaks in roles

Say what it is.
Not what it looks like.

Markup declares what an element is — a card, the primary action, a related stack — and a compiled theme decides what that means in pixels. One OKLCH hue seeds the palette. Relationships derive the spacing. A linter audits the result, in both schemes, before anything ships.

The permanent collection

Live renders — not screenshots

Manifesto


Roles, not values.

A class is either meaningful or it is an error. There is no mt-[13px], so drift has nowhere to live.


Relationships, not numbers.

Siblings are related, separate, or sectioned. One base and one ratio derive every distance on this page — including these.


Modern CSS, no legacy tail.

Container queries are the responsive model. light-dark() carries both schemes. The palette is OKLCH math. The output is layered.


A linter that reads meaning.

Because classes carry intent, design review becomes mechanical: duplicate primaries, contrast failures, and typos fail the build — not the user.

The argument

Dark mode, density, and a rebrand become theme swaps, not codemods. Change brand: { hue: 264 } and this entire page follows — with its contrast guarantees intact.

Quality control

For the machines

# Styling instructions — Intent

1. Class attributes may only contain
   Intent roles. Never invent names,
   never add inline styles.
2. Spacing comes from stack-* / row-*.
   Do not add margins.
3. One action-primary per scope.

npx intent check --json
# fix every "error", re-run to exit 0

Terms of engagement

FSL-1.1-MIT · full text in the repository · commercial licensing: dataswarmproject@gmail.com