OKLCH Design Tokens: What They Are and Why the AI Website Cloner Template Uses Them

OKLCH design tokens are CSS custom properties using the OKLCH color model—where O represents perceptual lightness, K represents chroma, and L represents hue—to enable perceptually uniform colors that support consistent theming and precise visual reproduction.

The JCodesMore/ai-website-cloner-template implements OKLCH design tokens as its core color architecture, defining them in src/app/globals.css to power Tailwind CSS v4 utilities. This system provides the perceptual accuracy necessary to clone target websites with exact color fidelity while supporting seamless light and dark mode transitions.

Understanding the OKLCH Color Model

OKLCH is a modern, perceptually uniform color space built on the CIE LCH model. Unlike legacy sRGB or HEX values, OKLCH separates color into three independent components that match human visual perception:

  • O (Perceptual Lightness): Controls brightness in a way that aligns with how humans actually perceive luminance
  • K (Chroma): Represents color intensity or saturation
  • L (Hue): Defines the angle on the color wheel

This separation allows designers to adjust lightness without accidentally shifting hue or saturation, ensuring predictable results when modifying the color palette.

Why This Repository Uses OKLCH Design Tokens

The template stores all colors as design tokens—CSS custom properties like --background, --foreground, and --primary—expressed in OKLCH format. According to the repository's README.md, this choice provides four critical advantages:

1. Consistent Theming All components reference var(--primary), var(--background), and other tokens instead of hardcoded values. Changing a single token in src/app/globals.css updates the entire UI instantly.

2. Native Dark Mode Support The CSS defines light mode values in the :root block and dark mode overrides in a .dark block. Switching themes requires only toggling the .dark class, with no additional JavaScript logic or complex color calculations.

3. Precision for Website Cloning OKLCH's perceptual uniformity ensures that color relationships remain accurate across different displays. This precision is essential when the template is used to exactly reproduce a target website's visual design.

4. Tailwind CSS v4 Integration Tailwind's theme configuration references these custom properties directly, allowing utility classes like bg-background and text-foreground to automatically pull the correct OKLCH values.

Implementation in src/app/globals.css

The complete token system lives in src/app/globals.css, where each variable is declared with OKLCH values for both light and dark contexts:

/* src/app/globals.css */
:root {
  --background: oklch(1 0 0);
  --foreground: oklch(0.145 0 0);
  --primary:    oklch(0.205 0 0);
  /* … additional tokens … */
}

.dark {
  --background: oklch(0.145 0 0);
  --foreground: oklch(0.985 0 0);
  --primary:    oklch(0.922 0 0);
  /* … dark mode overrides … */
}

The .dark class redefines the same token names with different OKLCH values, creating an immediate theme switch without modifying component code.

Consuming Tokens in Components

Components reference these tokens through Tailwind utility classes. In src/components/ui/button.tsx, the button uses the background and foreground tokens to adapt automatically to the current theme:

// src/components/ui/button.tsx
export function Button({ children }) {
  return (
    <button
      className="
        rounded-md px-4 py-2
        bg-background text-foreground
        hover:bg-muted hover:text-foreground
        dark:border-input dark:bg-input/30
      "
    >
      {children}
    </button>
  );
}

The bg-background and text-foreground classes resolve to var(--background) and var(--foreground), ensuring the button renders correctly in both light and dark modes.

Runtime Customization

The template supports dynamic theme adjustments by manipulating the CSS custom properties at runtime. The src/app/layout.tsx file demonstrates how to override the --primary token based on user input:

// src/app/layout.tsx
"use client";

export default function RootLayout({ children }: { children: React.ReactNode }) {
  const setAccent = (color: string) => {
    document.documentElement.style.setProperty("--primary", color);
  };

  return (
    <html lang="en">
      <body>
        <input
          type="color"
          onChange={e => setAccent(`oklch(${e.target.value})`)}
        />
        {children}
      </body>
    </html>
  );
}

Calling setProperty("--primary", ...) updates every component using bg-primary or text-primary classes instantly, without requiring a page reload or React state updates.

Summary

  • OKLCH design tokens in src/app/globals.css provide perceptually uniform colors that maintain accurate relationships when adjusted
  • The JCodesMore/ai-website-cloner-template uses these tokens to ensure precise color fidelity when reproducing target websites
  • Dark mode is implemented by redefining token values in the .dark class, requiring no JavaScript logic
  • Tailwind CSS v4 integration allows utility classes to reference these tokens directly via var(--token-name) resolution
  • Runtime theming is possible by manipulating CSS custom properties with standard DOM APIs

Frequently Asked Questions

What do the letters in OKLCH stand for?

According to the source code analysis, OKLCH stands for O (perceptual lightness), K (chroma), and L (hue). This color space is built on the CIE LCH model but adds perceptual lightness that matches how humans actually perceive brightness, unlike traditional RGB or HEX values.

How do OKLCH design tokens improve dark mode implementation?

The template defines light mode values in the :root selector and dark mode overrides in the .dark class within src/app/globals.css. Because components reference tokens like var(--background) rather than static colors, switching themes requires only adding or removing the .dark class from the document root, instantly updating all colors without complex JavaScript logic or flash-of-unstyled-content issues.

Can I override OKLCH design tokens at runtime?

Yes. As demonstrated in src/app/layout.tsx, you can update tokens dynamically using document.documentElement.style.setProperty("--primary", "oklch(...)"). This immediately updates all components using that token, enabling features like user-selected accent colors or theme customization panels without reloading the application.

Why use OKLCH instead of HEX or RGB for design tokens?

OKLCH provides perceptual uniformity, meaning that adjusting the lightness value produces a brightness change that looks consistent to human eyes across different hues. This is critical for the AI Website Cloner Template because it ensures that cloned websites maintain their exact visual hierarchy and color relationships across different devices and display calibrations, which legacy sRGB or HEX values cannot guarantee.

Have a question about this repo?

These articles cover the highlights, but your codebase questions are specific. Give your agent direct access to the source. Share this with your agent to get started:

Share the following with your agent to get started:
curl -s "https://instagit.com/install.md"

Works with
Claude Codex Cursor VS Code OpenClaw Any MCP Client

Maintain an open-source project? Get it listed too →