Skip to main content

What is OKLCH?

OKLCH is a way to describe colors that matches how humans actually perceive them. Unlike traditional color systems, when you change one value, you get predictable visual results.
+-----------------------------------------------------------------------------+
|                           HOW OKLCH WORKS                                    |
+-----------------------------------------------------------------------------+
|                                                                             |
|   Think of color as a 3D space:                                             |
|                                                                             |
|                     LIGHTNESS (L)                                           |
|                         ^                                                   |
|                         |    100% White                                     |
|                         |       .                                           |
|                         |      /|\                                          |
|                         |     / | \                                         |
|                         |    /  |  \                                        |
|                         |   /   |   \                                       |
|                         |  / -- + -- \  <-- HUE (H) goes around             |
|                         | /     |     \     the circle (0-360)              |
|                         |       |                                           |
|                         |       .                                           |
|                         |    0% Black                                       |
|                         |                                                   |
|                     CHROMA (C) = Distance from center                       |
|                     (0 = gray, 0.4 = vivid)                                 |
|                                                                             |
+-----------------------------------------------------------------------------+

The Three Components

+-----------------------------------------------------------------------------+
|                                                                             |
|   L = LIGHTNESS                                                             |
|   +------------------------------------------------------------------+      |
|   |  0%                        50%                        100%       |      |
|   |  [========================================================]      |      |
|   |  Black -----------------> Gray -----------------> White          |      |
|   |                                                                  |      |
|   |  Key insight: L = 50% looks equally "medium" for ALL colors      |      |
|   +------------------------------------------------------------------+      |
|                                                                             |
|   C = CHROMA (Color Intensity)                                              |
|   +------------------------------------------------------------------+      |
|   |  0                        0.15                       0.4         |      |
|   |  [========================================================]      |      |
|   |  Gray -----------------> Subtle -----------------> Vivid         |      |
|   |                                                                  |      |
|   |  Monolex uses 0.12-0.15 for professional, readable colors        |      |
|   +------------------------------------------------------------------+      |
|                                                                             |
|   H = HUE (Color Wheel Position)                                            |
|   +------------------------------------------------------------------+      |
|   |                                                                  |      |
|   |              0 (Red)                                             |      |
|   |                 |                                                |      |
|   |      300 -------.------- 60                                      |      |
|   |     (Magenta)   |      (Yellow)                                  |      |
|   |                 |                                                |      |
|   |      240 -------.------- 120                                     |      |
|   |      (Blue)     |      (Green)                                   |      |
|   |                 |                                                |      |
|   |              180 (Cyan)                                          |      |
|   |                                                                  |      |
|   +------------------------------------------------------------------+      |
|                                                                             |
+-----------------------------------------------------------------------------+

Why OKLCH Matters

Traditional color systems like HSL have a problem: the same “lightness” value produces different perceived brightness for different colors.
+-----------------------------------------------------------------------------+
|                       THE HSL PROBLEM                                        |
+-----------------------------------------------------------------------------+
|                                                                             |
|   Using HSL with L=50% for both colors:                                     |
|                                                                             |
|   Yellow (H=60):   [XXXXXXXXXXXXXXXXXXXXXXXX]  <-- Appears BRIGHT           |
|   Blue (H=240):    [........................]  <-- Appears DARK             |
|                                                                             |
|   Same L=50%, but completely different perceived brightness!                |
|                                                                             |
+-----------------------------------------------------------------------------+
|                       THE OKLCH SOLUTION                                     |
+-----------------------------------------------------------------------------+
|                                                                             |
|   Using OKLCH with L=55% for both colors:                                   |
|                                                                             |
|   Yellow (H=85):   [XXXXXXXXXXXXXXXXXXXX]  <-- Equal perceived brightness   |
|   Blue (H=230):    [XXXXXXXXXXXXXXXXXXXX]  <-- Equal perceived brightness   |
|                                                                             |
|   L=55% means the SAME perceived brightness for ALL hues.                   |
|                                                                             |
+-----------------------------------------------------------------------------+

Color Conversion Flow

+-----------------------------------------------------------------------------+
|                    FROM SCREEN TO PERCEPTION                                 |
+-----------------------------------------------------------------------------+
|                                                                             |
|       RGB                 Oklab                  OKLCH                      |
|   (Screen Pixels)    (Perceptual Space)     (Human-Friendly)                |
|                                                                             |
|   +----------+        +----------+          +----------+                    |
|   |  R: 35   |        |  L: 0.55 |          |  L: 55%  |                    |
|   |  G: 128  |  --->  |  a: -0.02|  --->    |  C: 0.15 |                    |
|   |  B: 199  |        |  b: -0.10|          |  H: 230  |                    |
|   +----------+        +----------+          +----------+                    |
|                                                                             |
|   What hardware        Math space           What designers                  |
|   understands          (accurate)           work with                       |
|                                                                             |
+-----------------------------------------------------------------------------+

Safe Ranges for UI

+-----------------------------------------------------------------------------+
|                    PRACTICAL OKLCH VALUES                                    |
+-----------------------------------------------------------------------------+
|                                                                             |
|   LIGHTNESS (L):                                                            |
|   +------------------------------------------------------------------+      |
|   |                                                                  |      |
|   |   Dark Theme Text:     L = 70%  (readable on dark backgrounds)   |      |
|   |   Light Theme Text:    L = 40%  (readable on light backgrounds)  |      |
|   |   Semantic Colors:     L = 55%  (balanced for both themes)       |      |
|   |                                                                  |      |
|   +------------------------------------------------------------------+      |
|                                                                             |
|   CHROMA (C):                                                               |
|   +------------------------------------------------------------------+      |
|   |                                                                  |      |
|   |   UI Elements:         C = 0.12  (subtle, professional)          |      |
|   |   Semantic Colors:     C = 0.15  (noticeable but not loud)       |      |
|   |   Maximum Safe:        C = 0.18  (danger/error only)             |      |
|   |                                                                  |      |
|   |   Above 0.18 risks "clipping" - colors may not display correctly |      |
|   +------------------------------------------------------------------+      |
|                                                                             |
+-----------------------------------------------------------------------------+

Key Takeaways

+-----------------------------------------------------------------------------+
|                                                                             |
|   1. OKLCH uses three values: Lightness, Chroma, Hue                        |
|                                                                             |
|   2. Unlike HSL, equal L values = equal perceived brightness                |
|                                                                             |
|   3. Chroma controls vividness (0 = gray, higher = more colorful)           |
|                                                                             |
|   4. Hue is position on color wheel (0-360 degrees)                         |
|                                                                             |
|   5. Monolex uses L=55%, C=0.12-0.15 for consistent UI colors               |
|                                                                             |
+-----------------------------------------------------------------------------+

Golden Angle Distribution

Learn how colors are distributed for maximum distinction