Skip to main content

Interactive State Color Theory

UI elements exist in discrete states, each requiring distinct visual feedback. The primary states form a progression of color intensity.

Flow Color State Derivation Principle

This establishes:
  • Hover: OKLCH adjustment (preserve hue, increase lightness)
  • Active/Disabled: OKLAB mixing (perceptual color blending)

Hover State Implementation

Hover states make elements lighter to indicate interactivity. The color “approaches” brightness.

Hover State Color Analysis

Legacy Hex Hover Fallbacks

These fallbacks provide:
  • Browser compatibility for systems without color-mix() support
  • Explicit hex values matching the intended OKLCH hover result
  • Documentation of target color values

Active State Derivation

Active states (mouse down, pressed) use darkening rather than lightening. This creates the illusion of the element being “pressed in.”

Active State Pattern


Disabled State Derivation

Disabled states communicate non-interactivity through:
  1. Reduced chroma (desaturation)
  2. Reduced contrast (closer to background)
  3. Grayed appearance (universal “inactive” signal)

Disabled State Pattern


TypeScript State Color Utilities

Both utility functions wrap colorMix() with appropriate defaults — colorDarker mixes with black, colorLighter mixes with white, both using OkLab for perceptual uniformity.

Utility Function Analysis


State Color Consistency Across Semantic Colors

State Derivation Consistency


Theme-Specific State Adjustments

Light themes require inverted state logic because darker elements provide better feedback on light backgrounds.

Light vs Dark Theme State Comparison


Color Space Selection Rules


THE CENTER

How State Changes Visualize Information Flow

State changes are the most immediate form of information flow feedback. When a user moves their cursor over a button, the hover state color change says “this element responds to you.” When they click, the active state darkening says “action registered.” When an element is disabled, the grayed appearance says “not available.” This creates a visual language where:
  • Lighter colors = approaching, available, inviting
  • Darker colors = pressed, confirmed, committed
  • Grayer colors = unavailable, blocked, inactive
The color “flows” through these states in response to user intention, creating a feedback loop that feels natural and responsive.

Muted Colors and Variants

Learn how muted colors create subtle backgrounds and contextual relationships