Short supporting text.
Read moreA design system agents can read.
Tokens, themes and component recipes in plain CSS and JSON, with rules an AI agent follows. Free, no sign-up, one zip.
- One token layer. Four presets and light/dark change tokens only. Components never change.
- Any stack. CSS variables, W3C Design Tokens JSON and semantic HTML. No framework, no build step.
- Tested rules. Contrast, 44px targets, reduced motion and no sideways scroll are checked on every deploy.
Use it with your agent
Opens your own assistant with this prompt filled in.
Use the free design system at https://madhavnair.in/design/llms.txt (tokens: https://madhavnair.in/design/tokens.json, components: https://madhavnair.in/design/components.json). Follow its rules and test checklist exactly. Build me: [describe the page or component]. Output plain HTML and CSS that uses its tokens and c- components, in light and dark mode.Tokens
Live values from the CSS. They change when you switch theme or mode. W3C format: tokens.json.
Colour
--bg-page--bg-raised--bg-sunken--fg--fg-2--fg-muted--accent--on-accent--line--line-2--focus-ring--pillType
--t-3xl Display · --t-2xl Heading · --t-xl Subheading · --t-lg Lead · --t-md Body · --t-sm Small · --t-xs Caption · Spacing
--s-1--s-2--s-3--s-4--s-5--s-6--s-7--s-8--s-9Radii
--r-sm--r--r-lg--r-pillMotion
--d-base with --ease. Off under reduced motion.
Components
The real components.css markup. Copy puts exactly this HTML on your clipboard. Specs: components.json.
Preview style
Card .c-card
One heading per card. If the whole card is a link, use only one <a>. No fixed min-height.
HTML
<article class="c-card"><span class="c-pill"><span class="c-pill__dot"></span>Now</span><h3>Card title</h3><p>Short supporting text.</p><a class="c-card__foot" href="#">Read more</a></article>One per screen.
HTML
<article class="c-card c-card--lead"><h3>The current thing</h3><p>One per screen.</p></article>Image clipped to the card.
HTML
<article class="c-card c-card--media"><div class="ds-ph" role="img" aria-label="Placeholder image">16:9 image</div><div class="c-card__body"><h3>Media card</h3><p>Image clipped to the card.</p></div></article>Sunken, no shadow.
HTML
<article class="c-card c-card--quiet"><h3>Quiet card</h3><p>Sunken, no shadow.</p></article>Button .c-btn
At least 44×44px. Visible :focus-visible ring ≥3:1. Text on accent ≥4.5:1.
HTML
<a class="c-btn" href="#"><span class="c-btn__chip" aria-hidden="true">→</span>Primary</a>Pill .c-pill
Not interactive. The dot is decorative.
HTML
<span class="c-pill"><span class="c-pill__dot"></span>Label</span>Chip .c-chip
State via aria-pressed. 44px tap height on touch.
HTML
<button class="c-chip" aria-pressed="true">Selected</button> <button class="c-chip" aria-pressed="false">Filter</button>Tag .c-tag
Text on accent ≥4.5:1. Never the only signal of state.
HTML
<span class="c-tag">New</span> <span class="c-tag c-tag--pixel">BETA</span>Section .c-section
Has a heading or aria-label.
Section content.
HTML
<section class="c-section c-section--tight"><div class="c-section__head"><h2>Section title</h2></div><p>Section content.</p></section>Sticky bar .c-sticky
Solid, never translucent. top = header height (--hh). Anchors need scroll-margin-top.
HTML
<div class="c-sticky" style="position:static"><div style="display:flex;gap:8px;padding-inline:12px"><button class="c-chip" aria-pressed="true">All</button><button class="c-chip" aria-pressed="false">Notes</button></div></div>Plate .c-plate
Meaningful alt. Lazy-load below the fold.
HTML
<figure class="c-plate"><div class="ds-ph" role="img" aria-label="Placeholder image">16:9 image</div><figcaption>Caption</figcaption></figure>Themes
Themes only change tokens. Pick one; this page and the rest of the site follow.
--bg-page--bg-raised--fg--accent--on-accent--line-2Pages
Page layouts as wireframes, built from the same components. Placeholders only.
ZipDESIGN.mdtokens.jsoncomponents.jsonllms.txt
Free to use. Inter and Geist Pixel are under the SIL Open Font License.