> linacre.site

Dynamic HSL Theme Customization in React

By David Linacre · 2026-07-02 · 4 min read · React, CSS, Tailwind, Motion

Styling terminal aesthetics requires absolute precision. In this guide, we break down how to implement the dynamic branding identity customizer found in this portfolio.

1. Why HSL Variables?

HSL (Hue, Saturation, Lightness) is the optimal color space for programmatically computing themes. By storing the base Hue value, we can compute borders, shadows, backgrounds, and text accents dynamically:

:root {
  --color-primary-hue: 215;
  --color-primary-sat: 20%;

  --color-primary: hsl(var(--color-primary-hue), var(--color-primary-sat), 10%);
  --color-accent: hsl(var(--color-accent-hue), 90%, 60%);
  --color-border: hsl(var(--color-primary-hue), var(--color-primary-sat), 25%);
}

2. Updating Properties in React

When a user adjusts a dial in our Identity panel, we update the HTML element style directly:

const applyTheme = (hue: number) => {
  document.documentElement.style.setProperty('--color-accent-hue', String(hue));
  localStorage.setItem('theme_hue', String(hue));
};

Conclusion

This approach avoids bundling massive CSS selectors, keeps the bundle lightweight, and leverages native browser CSS variables for instantaneous runtime adjustments.

← All engineering notes