Styleguide
Every design partial, rendered with the live theme CSS and tied back to its DESIGN.md source.
This theme is generated from DESIGN.md - the single source of truth for colors, type, spacing, radius, and component recipes. Change a token there and the whole SCSS system + this page regenerate. To adjust:
edit DESIGN.md→npm run tokens→npm run build→reload
Colors
DESIGN.md colors → --color-*. The value under each swatch is the source hex.
Typography
DESIGN.md typography.<role> → --type-<role>-*. The source fontSize is the desktop target; the build turns it into a fluid clamp().
Spacing scale (fluid)
DESIGN.md spacing → --space-*. Source px shown; the bar is the resolved fluid width.
Radius
DESIGN.md rounded → --radius-*. Match radius to element size.
0px
12px
18px
24px
32px
9999px
Layout - breakout grid
DESIGN.md layout → --layout-*. Viewport-relative widths, so each level steps at any screen size. One .content-grid; each child opts into a width with one class.
layout.gutter 1.75rem
layout.gutter-lg 2.5rem
layout.content-width min(72.5rem, 90vw)
layout.content-width-lg min(72.5rem, 88vw)
layout.content-width-2xl min(76rem, 82vw)
layout.breakout-width min(100rem, 96vw)
layout.breakout-width-2xl min(110rem, 94vw)
layout.prose-width min(38rem, 90vw)
layout.section-gap clamp(3.5rem, 6vw, 4.5rem)
layout.section-gap-tight clamp(1.75rem, 3vw, 2.5rem)
Buttons (variant × size × state, via coolstep_btn)
DESIGN.md recipes button-primary / button-secondary / button-accent.
Components
DESIGN.md recipes card / note, plus form controls.
Card
The default content surface, from the card recipe in DESIGN.md.
Form controls
DESIGN.md recipe control. Every one is a NATIVE element restyled, not a div - so focus, keyboard and screen-reader behaviour are the browser's, not ours.
Checkbox
Radio
Switch
Segmented
Select
Input group
Range
File
Guidelines (from DESIGN.md)
- Do use `surface-raised` for anything that should read as lifted: inputs, cards, popovers.
- Do use `ink` for headings and `text` for body. They are different tokens on purpose.
- Do use `border-strong` on anything a visitor can click or type into, and `border` only for rules.
- Do reach for the spacing and type scales before typing a raw pixel value.
- Don't put `primary` text on a `subtle` band (4.31:1). Use `ink` there.
- Don't use `accent-cyan` or `accent-gold` for text at any size. They are card borders.
- Don't add a new colour, radius or type size in CSS. Add it here and run `npm run tokens`.
Blocks (19)
| Hero | blocks/_block-hero.scss | block_hero |
| Text | blocks/_block-text.scss | block_text |
| Media + text | blocks/_block-media-text.scss | block_media_text |
| Cards | blocks/_block-cards.scss | block_cards |
| CTA | blocks/_block-cta.scss | block_cta |
| Form | blocks/_block-form.scss | block_form |
| Video | blocks/_block-video.scss | block_video |
| Quote | blocks/_block-quote.scss | block_quote |
| Contact | blocks/_block-contact.scss | block_contact |
| About band | blocks/_block-about-band.scss | block_about_band |
| Service paths | blocks/_block-service-paths.scss | block_service_paths |
| About me | blocks/_block-about-me.scss | block_about_me |
| FAQ | blocks/_block-faq.scss | block_faq |
| Calendar | blocks/_block-calendar.scss | block_calendar |
| Article text | blocks/_block-article-text.scss | block_article_text |
| Article image | blocks/_block-article-image.scss | block_article_image |
| Article gallery | blocks/_block-article-gallery.scss | block_article_gallery |
| Article table | blocks/_block-article-table.scss | block_article_table |
| Article callout | blocks/_block-article-callout.scss | block_article_callout |