Themes click a card to inspect it
Hex values come from each project's own source files (linked in the explorer). Every theme uses its default style, with editor colours taken from the Neovim port.
Explorer
Palette
Contrast matrix — row = text colour, column = background, WCAG 2 ratio
Perceptual distance — ΔE2000 between every pair, under the selected vision mode and size
Compare click a column to sort
Palette scores use the editor foreground colours: fg, comment, and every syntax accent. min ΔE is the smallest CIEDE2000 distance between any two of them. A low value means two token types can be mistaken for each other. The CVD columns repeat that check after simulating full protanopia, deuteranopia, and tritanopia (Machado 2009, severity 1.0), which is the worst case. The ANSI columns cover terminal colours 1–6 and 9–14.
Cassette a soft, retro-inspired theme built to clear every check above
Cream text and soft accents over two backgrounds: Dusk on warm espresso, Indigo on a deep blue-violet. Each comes in two versions. Soft keeps the soft background and lets accents sit at WCAG AA (≥ 4.5:1). Its yellow is a bright lemon, with green and magenta toned down. Deep darkens the background so every accent and terminal colour reaches AAA (≥ 7:1). Colours were placed in OKLCH with a max-min optimiser, inside hue bands that keep their meaning and a chroma cap (≤ 0.13; ≤ 0.17 for the Soft yellow) that keeps them soft. In every version all foreground colours (fg, comment, eight accents) are more than 20 ΔE2000 apart at text size (see Method), and the optimiser then pushed colour-blind separation as high as it could. The terminal palette is tuned alongside the editor: each hue has a normal and a lighter bright shade, at least 10 ΔE apart at text size, so normal and bright never blur together.
Export
Method
- WCAG 2 contrast ratio
- (L1 + 0.05) / (L2 + 0.05) on sRGB relative luminance. AA requires 4.5:1 for body text and 3:1 for large text and UI components. AAA requires 7:1. Code sits at body-text size, so 4.5 is the real floor for every token colour.
- APCA Lc
- Accessible Perceptual Contrast Algorithm 0.0.98G-4g, the WCAG 3 candidate. It is polarity-aware: negative values mean light text on a dark background. Rough guide: |Lc| 75 for body text, 60 for content text, 45 for large text or code highlights.
- Perceptual distance (ΔE2000)
- CIEDE2000 in CIELAB (D65). ΔE ≈ 2 is a just-noticeable difference for large adjacent patches. Thin glyphs need much more, so ≥ 10 is used as "distinct" and ≥ 20 as "very distinct" for syntax tokens that must be told apart at a glance.
- Colour-vision deficiency simulation
- Machado, Oliveira & Fernandes (2009) matrices at severity 1.0, applied in linear sRGB. Achromatopsia maps to luminance only. No palette of eight colours at text-friendly contrast can stay distinct in pure greyscale, so that mode is shown for reference and never scored.
- Text-size distance
- CIEDE2000 is calibrated on large patches, but code is drawn in thin glyphs. Stone, Szafir & Setlur (2014, An Engineering Model for Color Difference as a Function of Size, IS&T CIC) measured how much CIELAB difference is needed per axis as targets shrink: ND(50%, s) = C + K/s. At ⅓° (their smallest fitted size, about one 13px glyph at 60 cm) a*/b* differences are worth less than L* differences. The "Text ⅓°" size mode keeps L* at full weight and scales a* by 0.82 and b* by 0.65 before computing ΔE2000. Pairs that differ mostly in yellowness, such as red/orange and green/cyan, shrink the most.
- Colour map
- OKLab a (green↔red) on x and b (blue↔yellow) on y. Distance from the centre is chroma and the angle is hue. The bar on the right shows OKLab lightness. Points that cluster together get confused.