Design Tokens
Complete reference of all Prototyper UI design tokens — colors, surfaces, shadows, radius, typography, and animation.
Prototyper UI uses OKLCH color tokens with color-mix() for derived states. All tokens are defined in prototyper-tokens.css and registered with Tailwind CSS v4's @theme directive.
Token Overview
Colors
Core color tokens in OKLCH format. These define the color palette for all components.
| Token | Light | Dark |
|---|---|---|
--accent | 96.76% 0 0 | 27.41% 0.006 286.0 |
--accent-foreground | 21.03% 0.006 285.9 | 98.48% 0 0 |
--accent-hover | color-mix(in oklab, oklch(var(--accent)) 92%, oklch(var(--accent-foreground)) 8%) | color-mix(in oklab, oklch(var(--accent)) 92%, oklch(var(--accent-foreground)) 8%) |
--background | 100% 0 0 | 14.05% 0.004 285.8 |
--border | 91.97% 0.004 286.3 | 31.51% 0.007 286.0 |
--border-dark | 79.59% 0.011 286.2 | 23.37% 0.004 286.1 |
--border-light | 96.01% 0 0 | 37.27% 0.008 286.0 |
--color-accent | oklch(var(--accent)) | — |
--color-accent-foreground | oklch(var(--accent-foreground)) | — |
--color-accent-hover | var(--accent-hover) | — |
--color-background | oklch(var(--background)) | — |
--color-border | oklch(var(--border)) | — |
--color-border-dark | oklch(var(--border-dark)) | — |
--color-border-light | oklch(var(--border-light)) | — |
--color-card | oklch(var(--card)) | — |
--color-card-foreground | oklch(var(--card-foreground)) | — |
--color-destructive | oklch(var(--destructive)) | — |
--color-destructive-foreground | oklch(var(--destructive-foreground)) | — |
--color-destructive-hover | var(--destructive-hover) | — |
--color-destructive-soft | var(--destructive-soft) | — |
--color-destructive-soft-hover | var(--destructive-soft-hover) | — |
--color-field-background | oklch(var(--field-background)) | — |
--color-field-border | var(--field-border) | — |
--color-field-border-focus | var(--field-border-focus) | — |
--color-field-border-hover | var(--field-border-hover) | — |
--color-field-border-invalid | var(--field-border-invalid) | — |
--color-foreground | oklch(var(--foreground)) | — |
--color-info | oklch(var(--info)) | — |
--color-info-foreground | oklch(var(--info-foreground)) | — |
--color-input | oklch(var(--input)) | — |
--color-machine-bg | oklch(var(--machine-bg)) | — |
--color-machine-border | oklch(var(--machine-border)) | — |
--color-machine-fg | oklch(var(--machine-fg)) | — |
--color-machine-fg-muted | oklch(var(--machine-fg-muted)) | — |
--color-machine-fg-subtle | oklch(var(--machine-fg-subtle)) | — |
--color-machine-inverse | oklch(var(--machine-inverse)) | — |
--color-machine-inverse-fg | oklch(var(--machine-inverse-fg)) | — |
--color-machine-panel | oklch(var(--machine-panel)) | — |
--color-machine-panel-raised | oklch(var(--machine-panel-raised)) | — |
--color-machine-rule | oklch(var(--machine-rule)) | — |
--color-muted | oklch(var(--muted)) | — |
--color-muted-foreground | oklch(var(--muted-foreground)) | — |
--color-overlay | oklch(var(--overlay)) | — |
--color-overlay-backdrop | var(--overlay-backdrop) | — |
--color-overlay-foreground | oklch(var(--overlay-foreground)) | — |
--color-popover | oklch(var(--popover)) | — |
--color-popover-foreground | oklch(var(--popover-foreground)) | — |
--color-primary | oklch(var(--primary)) | — |
--color-primary-dark | oklch(var(--primary-dark)) | — |
--color-primary-foreground | oklch(var(--primary-foreground)) | — |
--color-primary-hover | var(--primary-hover) | — |
--color-primary-light | oklch(var(--primary-light)) | — |
--color-primary-middle | oklch(var(--primary-middle)) | — |
--color-primary-soft | var(--primary-soft) | — |
--color-primary-soft-hover | var(--primary-soft-hover) | — |
--color-ring | oklch(var(--ring)) | — |
--color-secondary | oklch(var(--secondary)) | — |
--color-secondary-foreground | oklch(var(--secondary-foreground)) | — |
--color-success | oklch(var(--success)) | — |
--color-success-foreground | oklch(var(--success-foreground)) | — |
--color-success-hover | var(--success-hover) | — |
--color-surface | oklch(var(--surface)) | — |
--color-surface-foreground | oklch(var(--surface-foreground)) | — |
--color-surface-secondary | var(--surface-secondary) | — |
--color-surface-tertiary | var(--surface-tertiary) | — |
--color-syntax-component | oklch(74% 0.14 220) | — |
--color-syntax-key | oklch(74% 0.14 220) | — |
--color-syntax-keyword | oklch(72% 0.17 300) | — |
--color-syntax-number | oklch(80% 0.15 85) | — |
--color-syntax-string | oklch(72% 0.17 160) | — |
--color-syntax-tag | oklch(72% 0.16 15) | — |
--color-warning | oklch(var(--warning)) | — |
--color-warning-foreground | oklch(var(--warning-foreground)) | — |
--color-warning-hover | var(--warning-hover) | — |
--destructive | 63.68% 0.208 25.3 | 58% 0.16 25.7 |
--destructive-foreground | 98.43% 0 0 | 98.43% 0 0 |
--destructive-hover | color-mix(in oklab, oklch(var(--destructive)) 90%, oklch(var(--destructive-foreground)) 10%) | color-mix(in oklab, oklch(var(--destructive)) 90%, oklch(var(--destructive-foreground)) 10%) |
--destructive-soft | color-mix(in oklab, oklch(var(--destructive)) 15%, transparent) | color-mix(in oklab, oklch(var(--destructive)) 20%, transparent) |
--destructive-soft-hover | color-mix(in oklab, oklch(var(--destructive)) 20%, transparent) | color-mix(in oklab, oklch(var(--destructive)) 28%, transparent) |
--foreground | 14.05% 0.004 285.8 | 98.48% 0 0 |
--info | 62.61% 0.186 259.6 | 62.61% 0.186 259.6 |
--info-foreground | 100% 0 0 | 38.14% 0.136 265.3 |
--input | 91.97% 0.004 286.3 | 27.41% 0.006 286.0 |
--muted | 96.76% 0 0 | 27.41% 0.006 286.0 |
--muted-foreground | 51% 0.014 285.9 | 71.19% 0.013 286.1 |
--primary | 44% 0.017 286 | 55% 0.016 286 |
--primary-dark | 37% 0.016 286 | 44% 0.017 286 |
--primary-foreground | 100% 0 0 | 100% 0 0 |
--primary-hover | color-mix(in oklab, oklch(var(--primary)) 90%, oklch(var(--primary-foreground)) 10%) | color-mix(in oklab, oklch(var(--primary)) 90%, oklch(var(--primary-foreground)) 10%) |
--primary-light | 87% 0.006 286 | 87% 0.006 286 |
--primary-middle | 55% 0.016 286 | 71% 0.015 286 |
--primary-soft | color-mix(in oklab, oklch(var(--primary)) 15%, transparent) | color-mix(in oklab, oklch(var(--primary)) 20%, transparent) |
--primary-soft-hover | color-mix(in oklab, oklch(var(--primary)) 20%, transparent) | color-mix(in oklab, oklch(var(--primary)) 28%, transparent) |
--ring | 44% 0.017 286 | 55% 0.016 286 |
--secondary | 97% 0.003 265 | 27% 0.006 286 |
--secondary-foreground | 21% 0.006 286 | 97% 0.003 265 |
--success | 72.05% 0.192 149.5 | 79.99% 0.182 151.8 |
--success-foreground | 100% 0 0 | 38.98% 0.089 152.7 |
--success-hover | color-mix(in oklab, oklch(var(--success)) 90%, oklch(var(--success-foreground)) 10%) | color-mix(in oklab, oklch(var(--success)) 90%, oklch(var(--success-foreground)) 10%) |
--warning | 76.97% 0.165 70.6 | 86.11% 0.173 92.0 |
--warning-foreground | 0% 0 0 | 42.36% 0.091 56.8 |
--warning-hover | color-mix(in oklab, oklch(var(--warning)) 90%, oklch(var(--warning-foreground)) 10%) | color-mix(in oklab, oklch(var(--warning)) 90%, oklch(var(--warning-foreground)) 10%) |
Surfaces
Surface and overlay tokens that create depth hierarchy in the UI.
| Token | Light | Dark |
|---|---|---|
--card | 98.48% 0 0 | 16.30% 0.006 285.7 |
--card-foreground | 14.05% 0.004 285.8 | 98.48% 0 0 |
--field-background | 100% 0 0 | 16.30% 0.006 285.7 |
--field-border | oklch(0% 0 0 / 0.12) | oklch(100% 0 0 / 0.12) |
--field-border-focus | oklch(0% 0 0 / 0.35) | oklch(100% 0 0 / 0.35) |
--field-border-hover | oklch(0% 0 0 / 0.22) | oklch(100% 0 0 / 0.22) |
--field-border-invalid | oklch(var(--destructive)) | oklch(var(--destructive)) |
--machine-bg | 2.8% 0 0 | 2.8% 0 0 |
--machine-block-gap | 1rem | 1rem |
--machine-border | 100% 0 0 / 0.22 | 100% 0 0 / 0.22 |
--machine-code-size | 0.84rem | 0.84rem |
--machine-content-max | 76ch | 76ch |
--machine-fg | 98% 0 0 | 98% 0 0 |
--machine-fg-muted | 88% 0 0 | 88% 0 0 |
--machine-fg-subtle | 72% 0 0 | 72% 0 0 |
--machine-font-size-base | 0.95rem | 0.95rem |
--machine-heading-weight | 640 | 640 |
--machine-inverse | 96% 0 0 | 96% 0 0 |
--machine-inverse-fg | 8% 0 0 | 8% 0 0 |
--machine-line-height-base | 1.7 | 1.7 |
--machine-panel | 4.4% 0 0 | 4.4% 0 0 |
--machine-panel-raised | 7.2% 0 0 | 7.2% 0 0 |
--machine-rail-offset | clamp(0.9rem, 2vw, 1.45rem) | clamp(0.9rem, 2vw, 1.45rem) |
--machine-rule | 100% 0 0 / 0.3 | 100% 0 0 / 0.3 |
--machine-section-gap | 2.5rem | 2.5rem |
--overlay | 100% 0 0 | 19.50% 0.008 285.7 |
--overlay-backdrop | oklch(0% 0 0 / 0.40) | oklch(0% 0 0 / 0.55) |
--overlay-foreground | 14.05% 0.004 285.8 | 98.48% 0 0 |
--popover | 100% 0 0 | 14.05% 0.004 285.8 |
--popover-foreground | 14.05% 0.004 285.8 | 98.48% 0 0 |
--surface | 98.48% 0 0 | 16.30% 0.006 285.7 |
--surface-foreground | 14.05% 0.004 285.8 | 98.48% 0 0 |
--surface-secondary | color-mix(in oklab, oklch(var(--surface)) 94%, oklch(var(--surface-foreground)) 6%) | color-mix(in oklab, oklch(var(--surface)) 94%, oklch(var(--surface-foreground)) 6%) |
--surface-tertiary | color-mix(in oklab, oklch(var(--surface)) 88%, oklch(var(--surface-foreground)) 12%) | color-mix(in oklab, oklch(var(--surface)) 88%, oklch(var(--surface-foreground)) 12%) |
Shadows
Shadow tokens with 3 semantic tiers, adaptive for dark mode.
| Token | Light | Dark |
|---|---|---|
--shadow-field | 0 1px 2px 0 oklch(0% 0 0 / 0.05), 0 0 0 1px oklch(0% 0 0 / 0.04) | none |
--shadow-inset-track | inset 0 1px 2px oklch(0% 0 0 / 0.06), inset 0 0 0 1px oklch(0% 0 0 / 0.04) | inset 0 1px 2px oklch(0% 0 0 / 0.12), inset 0 0 0 1px oklch(100% 0 0 / 0.06) |
--shadow-overlay | 0 8px 30px oklch(0% 0 0 / 0.12), 0 2px 8px oklch(0% 0 0 / 0.06), 0 0 0 1px oklch(0% 0 0 / 0.06) | 0 0 0 1px oklch(100% 0 0 / 0.08), 0 8px 30px oklch(0% 0 0 / 0.35) |
--shadow-surface | 0 2px 4px 0 oklch(0% 0 0 / 0.04), 0 1px 2px 0 oklch(0% 0 0 / 0.06), 0 0 0 1px oklch(0% 0 0 / 0.04) | none |
--shadow-tooltip | 0 2px 8px oklch(0% 0 0 / 0.12), 0 1px 3px oklch(0% 0 0 / 0.08) | 0 0 0 1px oklch(100% 0 0 / 0.10), 0 4px 16px oklch(0% 0 0 / 0.4) |
Radius
Border radius scale derived from the base --radius token.
| Token | Light | Dark |
|---|---|---|
--radius | 0.5rem | — |
--radius-2xl | calc(var(--radius) + 8px) | — |
--radius-3xl | calc(var(--radius) + 12px) | — |
--radius-lg | var(--radius) | — |
--radius-md | calc(var(--radius) - 2px) | — |
--radius-sm | calc(var(--radius) - 4px) | — |
--radius-xl | calc(var(--radius) + 4px) | — |
Typography
Font families and type scale tokens.
| Token | Light | Dark |
|---|---|---|
--font-heading | var(--font-overpass) | — |
--font-mono | var(--font-geist-mono) | — |
--font-pixel | var(--font-geist-pixel-square) | — |
--font-sans | var(--font-geist-sans) | — |
--text-2xl | 1.5rem | — |
--text-2xl--line-height | 2rem | — |
--text-3xl | 1.875rem | — |
--text-3xl--line-height | 2.25rem | — |
--text-base | 1rem | — |
--text-base--line-height | 1.5rem | — |
--text-lg | 1.125rem | — |
--text-lg--line-height | 1.75rem | — |
--text-sm | 0.875rem | — |
--text-sm--line-height | 1.25rem | — |
--text-xl | 1.25rem | — |
--text-xl--line-height | 1.75rem | — |
--text-xs | 0.75rem | — |
--text-xs--line-height | 1rem | — |
Spacing
Base spacing unit for the design system.
| Token | Light | Dark |
|---|---|---|
--spacing | 0.25rem | — |
Animation
Easing curves and keyframe animation tokens.
| Token | Light | Dark |
|---|---|---|
--animate-accordion-down | accordion-down 0.2s ease-out | — |
--animate-accordion-up | accordion-up 0.2s ease-out | — |
--animate-progress-indeterminate | progress-indeterminate 1.8s ease-in-out infinite | — |
--ease-in-out-quad | cubic-bezier(0.455, 0.03, 0.515, 0.955) | — |
--ease-in-quad | cubic-bezier(0.55, 0.085, 0.68, 0.53) | — |
--ease-in-quart | cubic-bezier(0.895, 0.03, 0.685, 0.22) | — |
--ease-out-fluid | cubic-bezier(0.32, 0.72, 0, 1) | — |
--ease-out-quad | cubic-bezier(0.25, 0.46, 0.45, 0.94) | — |
--ease-out-quart | cubic-bezier(0.165, 0.84, 0.44, 1) | — |
--ease-smooth | cubic-bezier(0.4, 0, 0.2, 1) | — |