Rough it out.
One system, every component.
The sketch style redraws the system freehand in
design-system-sketch.css:
handwriting type, wobble borders, sticky-note labels and marker highlights,
everything a degree or two off square. Same components, same markup —
the notebook the classic skin was ruled up from.
Specimen
One card, re-inked and re-shaped by whatever the two columns say.
Set — Sketch / Flow
Foundations
Color
Core neutrals carry the layout; accents are used sparingly: lines, links,
hovers. Colour is the palette axis of the theme engine: Classic keeps ink
and periwinkle, Sketch draws in marker red, yellow and blue on paper, and
the Flow palette — Deep Ocean and Tidal Blue warmed by Ivory Sand and
Golden Dune — can re-ink either style. Semantic colors exist only for
callouts and feedback. Every swatch is a token, so components restyle by
palette, not by hand.
Flow palette — the seas
Flow palette — the sands
Sketch palette — marker on paper
Semantic tokens — in the active style & palette
Foundations
Typography
Inter everywhere, weights 200–900. The scale maps one-to-one onto the sizes
already used across the resume (14, 16, 18, 20, 24, 30, 34, 46, 64).
Foundations
Spacing, borders & radii
A 4px-base spacing scale. Borders are the signature: 2px solid ink. Radii come in
exactly three sizes, lifted from the original cards (5), chips (10) and buttons (12).
Foundations
Grid & layout
Arrangement is systematic now, in three layers. A container from the ladder
(.ds-container with
--narrow,
--wide and
--fluid steps) caps the width;
a row divides it — the fixed 12-column grid
(.ds-grid-12 +
.ds-col-*) for deliberate spans,
or an equal-column row (.ds-cols-2/3/4/6)
where the count lives on the row and the cells carry nothing; cells span tracks and may nest
a fresh row inside themselves.
.ds-col-md-* re-spans at tablet
width and everything stacks on phones unless a
.ds-col-sm-* says otherwise;
gutters are the --ds-gutter-x/y
tokens, retunable per row or per axis. Three breakpoint tiers govern it all
— full compositions above 991px, tablet re-spans to 991px, phones at 640px —
and cells can align (.ds-self-*,
row --top/--center/--bottom) and
reorder (.ds-order-first/last)
independent of the markup. An auto row
(.ds-cols-auto) sizes cells to
their content; the fluid auto-fill grid
(.ds-grid)
stays for card rails where the item count is unknown.
The container ladder
Inside this demo the wider steps clamp to the demo’s own width — the labels carry the true caps. All steps share the same side padding, so content never touches the viewport edge.
The 12 tracks
Composed spans
Equal rows: the count lives on the row
Auto row: cells size to their content
Alignment: row modifiers & .ds-self-*
sets the row
Whole rows align with .ds-grid-12--top / --center / --bottom;
without a modifier, cells stretch to the row.
Order: presentation over source
Nested rows
Gutters: flush · tight · default · loose
One axis at a time: gutters are tokens
Foundations
Using the system
Add design-system.css and the
ds-page body class, then compose. Posts are plain Markdown
files in /Posts with a small front-matter block. Drop a file in, and it’s published.
<link rel="stylesheet" href="/css/design-system.css">
<body class="ds-page">
<article class="ds-card">...</article>
</body>
---
title: My next post
summary: One sentence that earns the click.
date: 2026-06-12
category: Azure & DevOps
tags: azure, dotnet
hero: /images/blog/hero-azure-deploy.svg
---