Note
Lucid color palette
Version: v2.0.0
Status: Stable (2026-04-02)
- cybrdots -- Dotfiles for Arch Linux
- cybrpapers -- Wallpaper collection
- cybrcore -- The source
Left-to-right: Neovim, rofi-launcher, cava, fastfetch, custom script ↗
Left-to-right: stacked micro, yazi, broot ↗
Left-to-right: clock, btop, ls ↗
Obsidian ↗
Obsidian ↗ (some possible color combinations)
Recommended usage of colors:
no0 background
re0 main text, outlines
gr0 success state
ye0 warning
bl0 ---
cy0 ---
wh0 small text
og0 ---
no1 & no2 hover, states, depth
re1 & re2 hover, states, depth
gr1 & gr2 hover, states, depth
ye1 & ye2 hover, states, depth
bl1 & bl2 hover, states, depth
pu1 & pu2 hover, states, depth
cy1 & cy2 hover, states, depth
wh1 & wh2 hover, states, depth
me1 & me2 hover, states, depth
og1 & og2 hover, states, depth
Recommended combinations:
I used hsb color space (hue, saturation, brightness) to define starting values,
to then generate the palette. Final exported colors differ after contrast
adjustments and black-overlay blending (more on that below).
Starting values:
Main:
red hsb(0, 80%, 95%)
green hsb(150, 80%, 95%)
yellow hsb(50, 80%, 95%)
blue hsb(225, 80%, 95%)
violet hsb(275, 80%, 95%)
cyan hsb(185, 80%, 80%)
orange hsb(10, 80%, 95%)
UI:
black hsb(225, 60%, 3%)
white hsb(225, 10%, 60%)
grey hsb(225, 40%, 50%)
Main colors are hsb(x, 80%, 95%), where x is the hue.
Except for:
Cyan brightness 80 to accommodate for its perceived brightness
Orange saturation 90 to better distinguish it from red
Naming convention is optimized for simplicity and for auto-complete use.
The goal was for each color to have a different first letter.
Color names:
red re
green gr
yellow ye
blue bl
violet vi
cyan cy
orange or
pink pi
black no as in: no-signal
grey me as in: metal
Main goal was to hit at least AA score in contrast ratio on black:
re0 on no0 (AA)
gr0 on no0 (AAA)
ye0 on no0 (AAA)
bl0 on no0 (AA Large)
vi0 on no0 (AA Large)
cy0 on no0 (AAA)
wh0 on no0 (AA)
me0 on no0 (AA Large)
og0 on no0 (AA)
pi0 on no0 (AA)
Darker shades (xy1 and xy2) are created by mixing each base color (xy0) with
the black base (no0). This guarantees consistent darkening across the palette
and avoids potential issues with semi-transparent rgba overlays.
Opacity settings:
xy1 40%
xy2 20%
Example:
re1 = color-mix(in srgb, var(--no0), var(--no0) 40%);
re2 = color-mix(in srgb, var(--no0), var(--no0) 20%);
Resulting colors are then used to define the final hexadecimal and HSL values.
After mixing base color with black base, these are the resulting colors:
Black:
no0 hsl(228, 63%, 3%)
no1 hsl(225, 44%, 4%)
no2 hsl(225, 44%, 7%)
Red:
re0 hsl(0, 87%, 62%)
re1 hsl(358, 52%, 25%)
re2 hsl(355, 48%, 14%)
Green:
gr0 hsl(150, 88%, 57%)
gr1 hsl(152, 65%, 24%)
gr2 hsl(155, 62%, 13%)
Yellow:
ye0 hsl(50, 88%, 57%)
ye1 hsl(50, 61%, 24%)
ye2 hsl(50, 52%, 13%)
Blue:
bl0 hsl(225, 87%, 57%)
bl1 hsl(225, 66%, 24%)
bl2 hsl(225, 64%, 13%)
Violet:
vi0 hsl(275, 88%, 57%)
vi1 hsl(273, 65%, 24%)
vi2 hsl(271, 62%, 13%)
Cyan:
cy0 hsl(185, 67%, 48%)
cy1 hsl(187, 65%, 20%)
cy2 hsl(190, 62%, 11%)
White:
wh0 hsl(225, 7%, 57%)
wh1 hsl(227, 7%, 24%)
wh2 hsl(223, 10%, 13%)
Grey:
me0 hsl(225, 25%, 40%)
me1 hsl(227, 26%, 17%)
me2 hsl(227, 42%, 9%)
Orange:
og0 hsl(20, 89%, 52%)
og1 hsl(19, 75%, 22%)
og2 hsl(18, 65%, 12%)
Pink:
pi0 hsl(320, 88%, 57%)
pi1 hsl(318, 64%, 24%)
pi2 hsl(314, 59%, 13%)
- Validate contrast and distinguishability under simulated color vision deficiency (CVD) conditions.
- Adjust og0 to be more recognizable next to re0


