Design Tokens

Last updated on 2026-04-05

The Finance Dashboard Kit uses oklch color tokens defined as CSS custom properties in app/globals.css. All components reference these tokens through Tailwind CSS v4 -- never hardcoded colors. The kit ships with 6 color themes, the default being Mint Ledger (oklch hue 170).

oklch Color System

The kit uses oklch (Oklab Lightness Chroma Hue) instead of hex or hsl:

  • Perceptually uniform -- equal steps in lightness look equal to the human eye, so your palette looks balanced without manual tweaking
  • Wider gamut -- access to more vibrant colors on modern displays (P3, Rec. 2020)
  • Easy palette generation -- change one hue angle to produce a cohesive brand palette across all semantic tokens

The format is oklch(lightness chroma hue) where lightness is 0-1, chroma is 0-0.4 (saturation intensity), and hue is 0-360 (color angle on the color wheel).

Color Tokens

Semantic color tokens that automatically adapt between light and dark mode. The default Mint Ledger theme (hue 170):

:root {
  --background: oklch(0.99 0.002 170);
  --foreground: oklch(0.17 0.02 170);
  --card: oklch(1 0 0);
  --card-foreground: oklch(0.17 0.02 170);
  --popover: oklch(1 0 0);
  --popover-foreground: oklch(0.17 0.02 170);
  --primary: oklch(0.45 0.2 170);
  --primary-foreground: oklch(0.98 0.005 170);
  --secondary: oklch(0.78 0.14 341);
  --secondary-foreground: oklch(0.25 0.05 341);
  --muted: oklch(0.96 0.005 170);
  --muted-foreground: oklch(0.4 0.03 170);
  --accent: oklch(0.94 0.02 170);
  --accent-foreground: oklch(0.35 0.15 170);
  --destructive: oklch(0.58 0.22 27);
  --border: oklch(0.91 0.01 170);
  --input: oklch(0.91 0.01 170);
  --ring: oklch(0.55 0.18 170);
}

Dedicated tokens for the finance sidebar navigation:

--sidebar: oklch(0.97 0.008 170);
--sidebar-foreground: oklch(0.17 0.02 170);
--sidebar-primary: oklch(0.45 0.2 170);
--sidebar-primary-foreground: oklch(0.98 0.005 170);
--sidebar-accent: oklch(0.93 0.025 170);
--sidebar-accent-foreground: oklch(0.35 0.15 170);
--sidebar-border: oklch(0.91 0.01 170);
--sidebar-ring: oklch(0.55 0.18 170);

Chart Colors

Five chart-specific color tokens used by Recharts dashboards:

--chart-1: oklch(0.55 0.2 170);   /* Teal (primary) */
--chart-2: oklch(0.75 0.14 341);  /* Rose */
--chart-3: oklch(0.65 0.2 56);    /* Amber */
--chart-4: oklch(0.6 0.18 236);   /* Blue */
--chart-5: oklch(0.7 0.15 106);   /* Lime */

Built-in Color Themes

The kit ships with 6 complete color themes, each with full light and dark mode definitions:

Theme CSS Class Hue Description
Mint Ledger :root (default) 170 Teal -- professional finance aesthetic
Midnight .theme-midnight 250 Deep blue/indigo -- sophisticated, corporate
Sunset .theme-sunset 25 Warm coral/orange -- energetic, approachable
Emerald .theme-emerald 150 Rich green -- wealth, growth, prosperity
Lavender .theme-lavender 290 Soft purple -- creative, modern
Slate .theme-slate 0 Neutral monochrome -- minimal, understated

Themes are applied as CSS classes on the root element and managed through the ThemeSwitcher component in settings:

import { ThemeSwitcher } from "@/components/settings/theme-switcher"

<ThemeSwitcher />

Usage in Tailwind

Tokens map directly to Tailwind utility classes:

<div className="bg-background text-foreground border-border">
  <button className="bg-primary text-primary-foreground">
    Add Transaction
  </button>
  <span className="text-muted-foreground">Last synced 2 hours ago</span>
</div>

Financial amounts use tabular numbers for aligned columns:

<span className="tabular-nums text-lg font-semibold">
  $12,450.00
</span>

Dark Mode

The kit uses next-themes with class-based dark mode. The ModeToggle component in the sidebar handles the switch:

import { ModeToggle } from "@/components/layout/mode-toggle"

<ModeToggle />

Dark mode values are defined in the .dark selector within globals.css. All semantic tokens automatically switch when the theme changes. Each of the 6 color themes has its own dark mode variant.

Typography

The kit uses three font families configured in app/layout.tsx:

Token Font Usage
--font-sans Inter Body text
--font-heading DM Sans Headings (h1-h6)
--font-mono JetBrains Mono Code blocks

Headings use tighter letter-spacing (-0.025em) and shorter line-height (1.2) for visual weight. Body text uses -0.011em letter-spacing with 1.6 line-height for readability.

Financial figures use font-variant-numeric: tabular-nums via the .tabular-nums utility class to ensure numbers align in columns.

Animations

The kit includes several CSS animations for micro-interactions:

Animation Class Description
Fade in up .animate-fade-in-up Element fades in while sliding up
Fade in .animate-fade-in Simple opacity fade
Scale in .animate-scale-in Element scales from 95% to 100%
Float .animate-float Gentle floating motion
Shimmer .animate-shimmer Loading shimmer effect
Count up .animate-count-up Number count-up entrance

Stagger delays (.stagger-1 through .stagger-6) allow sequential animation timing for card grids and stat rows.

All animations respect prefers-reduced-motion -- when enabled, animation duration is reduced to near-instant.

Customizing for Your Brand

To rebrand the kit, change the hue value in app/globals.css. The default Mint Ledger theme uses hue 170. Update it to your brand color and all 9 screens adapt automatically:

:root {
  /* Change hue from 170 (teal) to 220 (blue) */
  --primary: oklch(0.45 0.2 220);
  --primary-foreground: oklch(0.98 0 0);
  --ring: oklch(0.55 0.18 220);
  /* Update remaining tokens to match... */
}

.dark {
  --primary: oklch(0.7 0.18 220);
  --primary-foreground: oklch(0.15 0.02 220);
  /* ... */
}

All components automatically inherit the new palette -- buttons, badges, charts, sidebar accents, stat cards, progress bars, and focus rings all update at once.

For full customization details, see the Customization guide.