Skip to main content

Design Tokens

Synapse UI uses a greenfield design token system — a neutral, professional palette suitable for enterprise AI applications. Tokens are defined as TypeScript objects and emitted as CSS custom properties at runtime.

Token Naming Convention

All CSS custom properties use the --synapse- prefix:

--synapse-{category}-{name}[-{variant}]

Categories: color, surface, text, border, focus, spacing, radius, font, elevation, motion.

Color Palette (Greenfield Starter)

Brand Accent

TokenLightDarkHigh-Contrast
--synapse-color-accent#4F46E5 (Indigo 600)#818CF8 (Indigo 400)#FFFF00
--synapse-color-accent-hover#4338CA#A5B4FC#FFFFFF
--synapse-color-accent-subtle#EEF2FF#1E1B4B#000000

Surfaces

TokenLightDarkHigh-Contrast
--synapse-surface-primary#FFFFFF#0F172A#000000
--synapse-surface-secondary#F8FAFC#1E293B#000000
--synapse-surface-elevated#FFFFFF#334155#000000
--synapse-surface-overlayrgba(15,23,42,0.5)rgba(0,0,0,0.6)rgba(0,0,0,0.8)

Text

TokenLightDarkHigh-Contrast
--synapse-text-primary#0F172A#F1F5F9#FFFFFF
--synapse-text-secondary#64748B#94A3B8#FFFFFF
--synapse-text-muted#94A3B8#64748B#CCCCCC
--synapse-text-on-accent#FFFFFF#0F172A#000000

Semantic

TokenLightDarkHigh-Contrast
--synapse-color-success#16A34A#4ADE80#00FF00
--synapse-color-warning#D97706#FBBF24#FFFF00
--synapse-color-error#DC2626#F87171#FF0000
--synapse-color-info#2563EB#60A5FA#00FFFF

Borders & Focus

TokenValue (Light)
--synapse-border-default#E2E8F0
--synapse-border-strong#CBD5E1
--synapse-focus-ring0 0 0 2px var(--synapse-surface-primary), 0 0 0 4px var(--synapse-color-accent)

Typography

TokenValue
--synapse-font-family-sans'Inter', system-ui, -apple-system, sans-serif
--synapse-font-family-mono'JetBrains Mono', 'Fira Code', monospace
--synapse-font-size-xs0.75rem
--synapse-font-size-sm0.875rem
--synapse-font-size-md1rem
--synapse-font-size-lg1.125rem
--synapse-font-size-xl1.25rem
--synapse-font-weight-normal400
--synapse-font-weight-medium500
--synapse-font-weight-semibold600
--synapse-line-height-tight1.25
--synapse-line-height-normal1.5
--synapse-line-height-relaxed1.75

Spacing Scale

Based on a 4px grid:

TokenValue
--synapse-spacing-10.25rem (4px)
--synapse-spacing-20.5rem (8px)
--synapse-spacing-30.75rem (12px)
--synapse-spacing-41rem (16px)
--synapse-spacing-61.5rem (24px)
--synapse-spacing-82rem (32px)
--synapse-spacing-123rem (48px)

Radius & Elevation

TokenValue
--synapse-radius-sm0.25rem
--synapse-radius-md0.5rem
--synapse-radius-lg0.75rem
--synapse-radius-full9999px
--synapse-elevation-sm0 1px 2px rgba(0,0,0,0.05)
--synapse-elevation-md0 4px 6px rgba(0,0,0,0.07)
--synapse-elevation-lg0 10px 15px rgba(0,0,0,0.1)

Motion

TokenValue
--synapse-motion-fast150ms ease
--synapse-motion-normal250ms ease
--synapse-motion-slow400ms ease

AI-Specific Tokens

TokenPurpose
--synapse-ai-stream-cursorBlinking cursor color during active stream
--synapse-ai-skeleton-baseGenerative skeleton shimmer base
--synapse-ai-skeleton-highlightGenerative skeleton shimmer peak
--synapse-ai-code-bgCode block background in stream container
--synapse-ai-feedback-positiveThumbs-up active state
--synapse-ai-feedback-negativeThumbs-down active state

Usage in Components

:host {
background: var(--synapse-surface-primary);
color: var(--synapse-text-primary);
border: 1px solid var(--synapse-border-default);
border-radius: var(--synapse-radius-md);
padding: var(--synapse-spacing-4);
font-family: var(--synapse-font-family-sans);
font-size: var(--synapse-font-size-md);
}

Customizing Tokens

Consumers can override tokens after importing the theme:

:root {
--synapse-color-accent: #7C3AED; /* Custom brand purple */
}

Or programmatically via ThemeService.setCustomTokens(). See ThemeService.