A personal design system
Warm, bookish colour
that stays readable.
Wana is a small palette with a gruvbox soul and a Flexoki-paper light mode. Ten semantic roles, two variants, every foreground/background pair locked to WCAG AA. It is authored in OKLCH, so the accent re-lights by arithmetic, not by eye.
The palette
Ten roles, shown in both variants. Ratios are contrast against that
variant's bg; every text role clears AA (4.5:1).
Light · Flexoki paper
Dark · Gruvbox
The idea
Colours are defined in OKLCH, not hex. Lightness in OKLCH is perceptual, so the accent can be re-lit for dark mode by lowering the lightness and keeping the hue and chroma. The contrast ratio comes out predictable instead of guessed. Every text-on-background pair is checked against WCAG AA.
The look is warm. Dark mode uses Gruvbox's soft, low-glare greys. Light mode uses Flexoki's paper, a warm off-white that reads like a page instead of a screen. Green is the accent in both variants.
Under the roles it is a base24 scheme: sixteen ANSI colours plus extra background and bright ramps. Every app theme is generated from it, and the web tokens expose ten of those colours as semantic roles. One source of truth; everything else regenerates.
In use
The same tokens, rendering real UI.
Reading on screens
Body text sits at --text on --bg, a
measure capped at 65 characters. Links use the
accent; secondary text drops to
--muted, still AA.
def relight(accent, target):
"""Darken until contrast ≥ target."""
while contrast(accent, bg) < target:
accent = darken(accent) # AA or bust
return accent
In the terminal
Wana ships a base24 scheme, so it themes far past the browser: kitty, alacritty, tmux, fzf, delta, bat, btop, yazi, Neovim, and more, all generated from the same palette.
wana@forest ~/repos/wana $ git status On branch main modified: tokens/base.css new file: themes/eza/wana-dark.yml