Serif · body · --font-serif
Design & build, from the type scale to the cloud deploy.
Regular 400 · Italic 400 · Semibold 600 · Bold 700
davidsuker.com · design system
The living style guide — every design token and every component, in every state. It's built from the tokens it documents (every value in rem, never px; no hard-coded colors or sizes), so the page is itself the proof.
Tab through this page. Every focusable element has a designed :focus-visible ring; hover and press controls to see their states; all motion honors prefers-reduced-motion.
Warm-neutral base, one terracotta accent. Every text and UI pairing meets WCAG 2.2 AA (text 4.5:1, UI 3:1); ratios noted under each chip.
Two self-hosted families (latin woff2): Source Serif 4 for reading/body copy (--font-serif), Inter for headings, UI and data labels (--font-sans). Code uses the system monospace stack.
Serif · body · --font-serif
Design & build, from the type scale to the cloud deploy.
Regular 400 · Italic 400 · Semibold 600 · Bold 700
Sans · UI · --font-sans
Design & build, from the type scale to the cloud deploy.
400500600700
How rendered markdown reads — serif body, sans headings, generous line-height, a constrained measure. Content pages (reading notes, project write-ups) inherit this .prose layer.
The site is built as a design system: tokens are the single source of truth, and every component consumes them rather than hard-coding a color or a size. Body copy is set in Source Serif 4, a transitional serif chosen for comfortable long-form reading.
Whitespace is the aesthetic. Favor generous margins and breathing room over decoration.
Headings switch to Inter for a crisp, systematic feel, while inline tokens such as --color-accent render in monospace so code reads as code. Lists stay comfortable:
1.7 for running text..button {
color: var(--color-on-accent);
background: var(--color-accent);
}4px-base scale expressed in rem. Layouts use tokens only — no arbitrary values.
Surgical only, and gated behind prefers-reduced-motion. Hover or focus the button — with reduced motion requested, the change is instant.
Each interactive component in its states. Hover, tab to focus, and press to see the live hover / :focus-visible / active states — this page is the interaction-craft proof.
Inline links inherit the accent with an offset underline — a link in running text — each with a live hover and :focus-visible state. Standalone examples (tab to them):
| Prop | Type | Default | Notes |
|---|---|---|---|
| variant | 'primary' | 'secondary' | 'primary' | Visual weight. |
| to | string | — | Internal route → renders NuxtLink. |
| href | string | — | External / mailto → renders an anchor. |
| type | 'button' | 'submit' | 'button' | Only when rendering a <button>. |
| disabled | boolean | false | Sets disabled / aria-disabled. |
| loading | boolean | false | Shows spinner, sets aria-busy, blocks activation. |