← All posts

Lean web components: warm paper, 7 variables, no framework

2026-08-10Tech5 min read

I love web development because it's immediate. You change a variable, you see the page warm up.

This site is intentionally lean — a single design system of CSS variables, no framework, no build step. Just HTML, CSS, and a little JS.

The variables

:root{
  --bg:#020810;
  --surface:#0A1628;
  --border:#1A2F4A;
  --cyan:#22D3EE;
  --green:#10B981;
  --text:#F0F9FF;
  --light:#8BAFC9;
}

That's most of it. --bg is the deep water everything sits on, --text is the ink you trust, --cyan is the one bright color that means "look here". The light theme flips the same seven roles — two worlds, one system.

Typography

Instrument Serif for the editorial moments — headlines, project titles, the odd italic. DM Sans for body. Space Mono for the small stuff: labels, dates, meta. All variable-font safe, all system-fallback safe.

Constraint is a feature. One accent pair, two type voices, one mono. The rest is whitespace.

Components, not pages

Each work card is border:1px solid var(--border) + background:var(--surface) + a radius. No shadow until hover. The story timeline is a grid: 140px 1fr. The blog is just max-width:720px + line-height:1.75.

The stack is simpler than most portfolios: static HTML, two stylesheets, one small JS file for the reveal observer, theme toggle, and scroll progress. When I need a markdown build step, I'll add Eleventy — but not before I need it. Properly means not adding what I don't need.

View source, copy the variables, make them yours. Change --cyan for a different energy, --bg for a different depth. The web is still the best place to build properly.