Design system
A living reference for the system this site is built on, built in the open as proof of craft. Four token modules (type, spacing, color, motion), then the execute layer: how the system is run, the decisions behind it, and one component documented end to end.
Typography
Display / hero42→88px · lh 1 · -0.025em
Building products people trust
Page title (H1)40→76px · lh 1.05 · -0.025em
Selected work
Feature card title26→44px · lh 1.1 · -0.015em
Drive, modernized
Section title (H2)26→36px · lh 1.12 · -0.015em
How I work
Sub-item title (H3)22→28px · lh 1.2 · -0.01em
Lead with the problem
Standfirst / lead23→30px · lh 1.32 · 0em
A design leader and maker who ships the work, not just the strategy.
Body21→24px · lh 1.4 · 0em
This portfolio is hand-built rather than assembled from a template, so the system underneath gets the same care as the work it presents. Design and code stay one source of truth, and the whole thing is kept deliberately simple.
Pull-quote21→24px · lh 1.6 · 0em
“He reframed the problem before anyone had written a line of code.”
Secondary / meta16→17px · lh 1.45 · 0em
Eyebrow (caps)16→18px · lh 1.15 · 0.08em
Selected work
Micro label (caps)14→15px · lh 1.15 · 0.1em
Role
Fine print12px · lh 1.4 · 0em
© 2026 Ryan Spohn. All rights reserved.
Color
--background#F4F4F2
paper surface--foreground#1A1A1A
primary ink, headings--medium#515150
soft body--muted#6E6E6A
meta, captions, labels--accent#7A1F1F
oxblood: links, accents--accent-hover#5C1717
button hover (accent, darker)--bg-inverse#1A1A1A
dark surface (cards, sections)--ink-inverse#EAE8E2
text on dark surfaces--ink-inverse-medium#A7A5A0
soft body on dark--ink-inverse-muted#888680
captions on dark--accent-inverse#D8766F
oxblood on dark (lightness lift)--status-production#3F7332
shipped / production--status-development#284B6D
in developmentSpacing
--space-3xshairline nudges, icon gaps (the half-step)
4px
--space-2xstight inline gaps
8px
--space-xslabel / value pairs, small gaps
12px
--space-smdefault element gap
16px
--space-mdcomfortable gap, card padding
24px
--space-lggroup spacing
32px
--space-xlsub-section
48px
--space-2xlsection
64px
--space-3xlmajor section
96px
--space-4xlpage-level
128px
Motion
--motion-instantpress / tap feedback
80ms
--motion-fasthover, release, dialog close, micro
150ms
--motion-basestandard UI: card lift-in, dialog open
200ms
--motion-moderaterest-settle, opacity fades
300ms
--motion-slowentrance / reveal transform
400ms
--motion-deliberatelarge, deliberate transitions
800ms
Easing roles (at --motion-deliberate)
standard
spring
settle
Component: the button
Outlinesecondary / quieter CTA
Filled darkprimary action on a light page
Filled oxbloodloudest, brand-forward, used sparingly
Operating model
TypographyGoverned
ColorGoverned
SpacingTokenized → governing
MotionTokenized
Shape / radiusGoverned (one token)
ComponentsDocumented (one exemplar)
Decisions & non-goals
Single 4px radius, no scale
Flat cards, no elevation
No dark mode
AA across the board, AAA only where free
Single accent (oxblood)
Golden ratio only on visible proportions
One button geometry, three fills
No component library at scale
No baseline grid; rhythm on the 8px grid