Interactive State Color Theory
UI elements exist in discrete states, each requiring distinct visual feedback. Flow Colors provide a systematic way to derive these states from Core Colors.Copy
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β INTERACTIVE STATE MACHINE β
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β β
β βββββββββββ mouse enter βββββββββββ mouse down ββββββββββββ β
β β DEFAULT β βββββββββββββββββ-> β HOVER β βββββββββββββββββ>β ACTIVE β β
β β STATE β <βββββββββββββββββ β STATE β <ββββββββββββββββββ STATE β β
β βββββββββββ mouse leave βββββββββββ mouse up ββββββββββββ β
β β β β β
β β β β β
β β click β β β
β β ββββββββββββββββββββββββ΄βββββββββββββββββββββββββββββββ β
β β β β
β β v β
β β βββββββββββ β
β β β SELECTEDβ (toggle state) β
β β β STATE β β
β β βββββββββββ β
β β β β
β β β (can still have hover/active when selected) β
β β β β
β β v β
β β βββββββββββββββ β
β βββ>β DISABLED β (blocks all other states) β
β β STATE β β
β βββββββββββββββ β
β β
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
Color Intensity Progression
Each state modifies the base color in a predictable way.Copy
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β STATE COLOR INTENSITY PROGRESSION β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β β
β Default ββββ-> Hover ββββ-> Active ββββ-> Selected ββββ-> Disabled β
β β β β β β β
β v v v v v β
β ######## ..######.. ########## ++++#### ........ β
β Base +15% white +20% black +20% tint 60% gray β
β 100% Lighter Darker Tinted Desaturated β
β β
β STATE MODIFIER COLOR SPACE AMOUNT β
β βββββ ββββββββ βββββββββββ ββββββ β
β Default None OKLCH 100% β
β Hover + white OKLCH 15% (10% for warning) β
β Active + black OKLAB 20% β
β Disabled + gray OKLAB 60% β
β Muted + transparent OKLAB 80% β
β β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
Hover State: Lightening
Hover states use OKLCH to preserve hue while increasing lightness.Copy
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β HOVER STATE COLOR DERIVATION β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β β
β WHY OKLCH FOR HOVER? β
β ==================== β
β β
β 1. HUE PRESERVATION: OKLCH mixing with white preserves hue angle β
β 2. PREDICTABLE LIGHTENING: L value increases proportionally β
β 3. NO CHROMA SHIFT: Maintains saturation while lightening β
β β
β VISUAL EXAMPLE: β
β β
β DEFAULT (55% Lightness) HOVER (~63% Lightness) β
β ######################## ....################.... β
β Stable color Lightened, hue intact β
β β
β The blue stays blue - just brighter! β
β β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
Warning Exception
Warning uses 10% instead of 15% white.Copy
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β WARNING HOVER EXCEPTION β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β β
β Normal Colors: DEFAULT +15% white -> HOVER β
β Warning Color: DEFAULT +10% white -> HOVER β
β β
β Why? Warning already has higher lightness (65% vs 55%) β
β Adding 15% white would wash it out β
β β
β Primary (55% L): ######## --> ..######.. (15% works) β
β Warning (65% L): ######## --> ..######.. (10% needed) β
β β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
Active State: Darkening
Active states (mouse down, pressed) use OKLAB for perceptually uniform darkening.Copy
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β ACTIVE STATE DERIVATION β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β β
β WHY OKLAB FOR ACTIVE? β
β ===================== β
β β
β 1. PERCEPTUAL DARKENING: OKLAB provides uniform perceived darkness β
β 2. NO HUE ROTATION: Mixing with black in OKLAB preserves hue better β
β 3. PREDICTABLE CONTRAST: Linear relationship with added darkness β
β β
β STATE PROGRESSION: β
β β
β HOVER DEFAULT ACTIVE β
β ....####.... ############ ################ β
β (lighter) (base) (darker) β
β ~63% L 55% L ~44% L β
β β
β ^ +15% white baseline v +20% black β
β β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
Disabled State: Desaturation
Disabled states communicate non-interactivity through reduced chroma.Copy
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β DISABLED STATE DERIVATION β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β β
β WHY OKLAB WITH GRAY? β
β ==================== β
β β
β 1. PERCEPTUAL DESATURATION: Mixing with gray reduces chroma uniformly β
β 2. HUE HINT PRESERVED: Original color is still slightly visible β
β 3. UNIVERSAL SIGNAL: Gray = inactive in UI convention β
β β
β EXAMPLE: β
β β
β ENABLED DISABLED β
β ######################## ........................ β
β 100% chroma 40% chroma (60% gray) β
β Full saturation Desaturated β
β Interactive Non-interactive β
β β
β cursor: pointer cursor: not-allowed β
β β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
Theme-Specific State Inversions
Light and dark themes handle hover differently!Copy
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β THEME-SPECIFIC STATE COLORS β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β β
β DARK THEME: β
β =========== β
β β
β DEFAULT HOVER β
β ############ ..############.. β
β Base LIGHTER (more visible) β
β β
β LIGHT THEME: β
β ============ β
β β
β DEFAULT HOVER β
β ############ ##############.. β
β Base DARKER (more contrast) β
β β
β WHY THE INVERSION? β
β ================== β
β β
β Dark theme: lighter = more visible = better feedback β
β Light theme: darker = more contrast = better feedback β
β β
β The goal is always "MORE VISIBLE ON HOVER" β
β β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
Color Space Selection Rules
Copy
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β STATE COLOR SPACE SELECTION RULES β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β β
β USE OKLCH FOR: β
β =============== β
β β
β * Hover states with white (hue preservation) β
β * Any adjustment where HUE must be preserved exactly β
β * Lightness adjustments on identity colors β
β β
β βββββββββββββββββββββββββββββ β
β β Hover = OKLCH β β
β β "Keep the color identity" β β
β βββββββββββββββββββββββββββββ β
β β
β USE OKLAB FOR: β
β =============== β
β β
β * Active states with black (uniform darkening) β
β * Disabled states with gray (uniform desaturation) β
β * Transparency mixing β
β * Any blending operation between two colors β
β β
β βββββββββββββββββββββββββββββ β
β β Everything else = OKLAB β β
β β "Blend smoothly" β β
β βββββββββββββββββββββββββββββ β
β β
β MNEMONIC: "OKLCH for Identity, OKLAB for Blending" β
β β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
Summary: State Pattern Reference
Copy
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β STATE TRANSITION SUMMARY β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β β
β STATE MODIFIER SPACE AMOUNT VISUAL β
β βββββββ ββββββββ βββββ ββββββ ββββββββββββββββββββββ β
β Default None OKLCH 100% ################ β
β Hover + white OKLCH 15%* ....############.... β
β Active + black OKLAB 20% ################## β
β Disabled + gray OKLAB 60% ................ β
β Muted + transparent OKLAB 80% ....####............ β
β β
β * Warning uses 10% white (already light) β
β β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
Muted Variants
Learn about muted background colors and semantic backgrounds