~/writing · post

two skins, one site

Before building this site I collected a folder of screenshots from personal sites I admire — statement heroes, digital gardens, all-monospace icon libraries, 88×31 badge walls. They split into camps that didn’t obviously mix, and I couldn’t pick one. So I didn’t.

The whole design is CSS custom properties. One skeleton, two coats of paint:

  • lab notebook — layered near-blacks, warm orange, sharp corners, mono labels.
  • catppuccin garden — mocha base, mauve accents, gradient name, rounder everything.

The switcher in the corner sets a data-skin attribute on <html> and writes your choice to localStorage; an inline script applies it before first paint so there’s no flash. Everything downstream — the heatmap, the pixel widget, the filter pills, even the generative project thumbnails — reads the same variables, so the entire site re-tints from one attribute.

[data-skin='garden'] {
  --canvas: #181825;
  --accent: #cba6f7;
  /* ...and the rest is just CSS doing its job */
}

Total cost of the second theme: one block of variables and a 15-line script. Pick both. It’s allowed.