DESIGN SYSTEM / FOUNDATIONS
Most design systems in a portfolio are a screenshot. This one is live. Every value below is read straight from the running stylesheet, not retyped, so it can never drift from the real system. If a token is referenced but missing, the page says so out loud.
Checking tokens…
THE CONTRACT
Design.md is the human-facing source of truth. globals.css is the runtime source of truth. A validation script holds them to account: if the two ever disagree, the build fails. So the contract I read is the same one my agents in Cursor and Claude build against, and neither of us can quietly drift off-system.
- --base……--base
- --cta-fill……--cta-fill
- --apricot……--apricot
- --divider……--divider
EXPORT
Left is what the browser renders. Right is the contract that produces it, read live from this page.
Reading live values from the stylesheet…COLOR
Brand · Human Signal
…--hero-apricot · --signal-humanThe brand color and HUMAN SIGNAL — the human pulse. Highlights insights, quotes, and friction. This is emphasis, NOT action…--hero-apricot-deepDeeper apricot for emphasis hover / dim states…--hero-sageResolves to apricot. The name says green, the value is notSignals · the working colors
…--signal-velocity · --accent-blueVELOCITY — the SECONDARY interactive layer (high-frequency, calm). Links, nav, secondary buttons, focus rings. You see blue far more often than mint…--signal-velocity-deepHover / pressed for the secondary interactive layer…--logic-pulse · --cta-fillPRIMARY action (scarce, loud) — the single most important CTA; --cta-fill resolves here. Earns its intensity by being rare. Also telemetry, success, AI output…--logic-pulse-deepHover / pressed for the primary action fill…--hero-errorCrimson, hue-separated from the action color so destructive never reads as primaryStructure · Anchor & Framework
…--anchor · --accent-taupeCONTEXTUAL ANCHOR — secondary depth, container borders. Large / UI only; below AA (~3.6:1) for body text on base…--framework · --accent-slateSYSTEM FRAMEWORK — structural panels, code containers, shells. Large / UI only; below AA (~3:1) for body textNeutrals
…--hero-baseThe single page background (Obsidian Warm)…--hero-elevatedElevated containers, cards, button fills (Raw Basalt)…--border-cardQuiet 1px container edges (Dark Anodized)…--grid-hairlineVisible structural rules…--hero-textHeadings and body…--hero-mutedSecondary text, descriptions, captions…--hero-faintFootnotes / labels. Lifted to ~4.7:1 on base for AA…--text-disabledDisabled states and structural placeholders only…--cta-fill-fgObsidian ink on the mint CTA — dark type on light fill, AA-safeTYPOGRAPHY
Proof
…--text-display-xlProof
…--text-display-lgProof
…--text-display-mdProof
…--text-headline-lgProof
…--text-headline-mdProof
…--text-headline-smThe work is the receipt.
…--text-body-lgThe work is the receipt.
…--text-body-mdThe work is the receipt.
…--text-body-smPROOF OVER PERFORMANCE
…--text-mono-mdPROOF OVER PERFORMANCE
…--text-mono-smPROOF OVER PERFORMANCE
…--text-mono-xsSPACING
The base ramp climbs in 8px steps. The marked rows are the 4px sub-grid aliases that sit off the base, kept for components that need finer control. Naming them honestly is the point.
1…4…8…12…16…20…24…28…32…40…48…64…80…120…LAYOUT
The same discipline as the spacing scale, made visible. The spread below is a Müller-Brockmann modular field: twelve columns, a 24px leading on an 8px baseline, every element placed by column line. Press G — or the toggle — to see the grid it sits on.
Layout / the modular field
Built on the grid.
Most grids are a screenshot in a slide. This one is load-bearing: every element on this spread is placed by column line, and its rhythm is locked to the 8px baseline.
12
columns · 8px baseline
Each band spans all twelve columns and re-exposes them as a subgrid, so its children snap to the same lines as everything else. Nothing is eyeballed.
The overlay is not painted on top — it reads the same tokens and shares this content box, so the columns it draws are the columns the content sits in, at every width.
[ FIELD_SPEC ]
- Columns12
- Gutter24px
- Margin48px
- Baseline8px
- Leading24px
Press G to measure it.
Velocity = columns · Logic = baseline · Human Signal = margins
RADIUS
Intent
…--radius-lgSubtle insets and tiles…--radius-surface · --radius-buttonOne 8px corner, two intents — a box and a control. Same value, named for where it's used.Primitives — framework scaffolding, not currently used
…--radius-sm…--radius-md…--radius-xl…--radius-2xl…--radius-3xl…--radius-4xlSURFACES & ELEVATION
The stack is deliberately shallow. One page background, one lifted surface for cards and popovers, and a single hairline between them. Depth comes from that 1px edge and the shared grain — never a shadow ladder.
…--hero-baseThe single page background. Every full-width section sits on this one ground.…--hero-elevatedCards, popovers, plates, and embeds — the only lift above base. Never a full-width section.…--grid-hairlineThe 1px rule that separates surfaces. Depth is this edge, not a drop shadow.ElevationNo drop-shadow tokens ship. A surface earns lift from --hero-elevated plus a --grid-hairline border and shared grain. The only shadows in the system are optical ones on floating media (work covers), never on flat UI.
MOTION & MEASURE
…Entrance: fade + 14px lift…scaleX(0) to scaleX(1)…Full marketing measure…Reading measure……COMPONENTS
Every specimen below is the real component, styled only by the tokens above. Nothing here is a screenshot or a one-off — change a token and these change with it.
--cta-fill · --radius-buttonOne apricot fill for primary, a hairline ghost for secondary. 44px touch floor.--font-mono · --text-mono-smMono, uppercase, tracked. The system’s section signature.--hero-elevated · --radius-surface · --grainElevated ground, one hairline, shared grain. The base box every cover and card is cut from.- UI/UX
- 0→1
- Design system
--hero-muted · --grid-hairlineNeutral metadata pills — never tinted, never the loud thing on the card.GUIDELINES
Do
- Read tokens, never retype values — every surface pulls from the CSS variables so the system can’t drift from itself.
- Keep one page background (
--hero-base). Reserve--hero-elevatedfor cards and popovers, never full-width sections. - Treat apricot (
--hero-apricot) as the brand color and Human Signal (emphasis, insights, quotes). The interactive layer is Velocity blue (--signal-velocity), which--cta-fillresolves to. - Snap spacing to the 8px scale. When you must go off-grid, use a named 4px alias and mark it honestly.
- Hold body copy at the 18px floor (
--text-body-md); labels go mono, uppercase, tracked.
Don’t
- Don’t hardcode a hex or a px. If it isn’t a token, it doesn’t ship.
- Don’t invent green:
--hero-sageis a legacy alias that resolves to apricot. Reach for--hero-apricotin new code. - Don’t stack shadows for depth — lift is one elevated surface plus a 1px hairline, not an elevation ladder.
- Don’t drop type below the floors (
--text-mono-xsat 12px, body at 18px). - Don’t use
--hero-faintfor body text — it’s tuned for footnotes and labels at ~4.7:1.