“Brutalist” web design gets used loosely, but the useful version of it isn’t about looking unfinished — it’s about a design system with almost no decorative override layers, where every component’s appearance traces back to a small set of variables instead of one-off styles scattered across templates.

The variable layer

:root {
    --space-1: 0.5rem;
    --space-2: 1rem;
    --space-3: 2rem;
    --border-width: 2px;
    --color-ink: #111;
    --color-paper: #fdfdf9;
    --color-accent: #ff3b00;
    --font-mono: 'JetBrains Mono', monospace;
}

Components reference variables, never raw values

.card {
    border: var(--border-width) solid var(--color-ink);
    padding: var(--space-2);
    background: var(--color-paper);
    font-family: var(--font-mono);
}

.button {
    border: var(--border-width) solid var(--color-ink);
    padding: var(--space-1) var(--space-2);
    background: var(--color-accent);
    color: var(--color-paper);
}

The discipline is in never writing padding: 17px directly inside a component rule — if a value isn’t in the variable set, either it’s genuinely a one-off exception (rare, and worth a comment explaining why) or the variable set is missing something and should be extended.

Why this matters for maintenance

When a client asks to change the accent color six months later, it’s one line in :root, not a find-and-replace across forty template files. That’s the actual payoff — not the aesthetic, but that a full rebrand of spacing or color becomes a five-minute change instead of a half-day audit.

Where it breaks down

This approach assumes a small, disciplined team. On a site where multiple developers with different habits are adding CSS over time without review, the variable system erodes fast — someone always reaches for a hardcoded value under deadline pressure. It works because of the discipline, not because of the CSS itself.