Design Tokens Reference
Version: 2.0.0
Last Updated: 2025-11-19
Status: ✅ Complete
Overview
Design tokens are the visual design atoms of the ROA2WEB design system. They are represented as CSS custom properties (--token-name) and ensure consistency across the application.
Location: src/assets/css/core/variables.css and src/assets/css/core/tokens.css
Spacing Scale
| Token |
Value |
Pixels |
Use Case |
--space-xs |
0.25rem |
4px |
Tight spacing, icon gaps, badges |
--space-sm |
0.5rem |
8px |
Default gap between related items |
--space-md |
1rem |
16px |
Standard component padding |
--space-lg |
1.5rem |
24px |
Section padding, card spacing |
--space-xl |
2rem |
32px |
Page margins, large separations |
--space-2xl |
3rem |
48px |
Major section gaps |
--space-3xl |
4rem |
64px |
Hero sections, page-level spacing |
Usage:
Typography Scale
Font Sizes
| Token |
Value |
Pixels |
Use Case |
--text-xs |
0.75rem |
12px |
Tiny labels, timestamps, badges |
--text-sm |
0.875rem |
14px |
Small text, table cells, secondary info |
--text-base |
1rem |
16px |
Body text (default) |
--text-lg |
1.125rem |
18px |
Emphasized text, large buttons |
--text-xl |
1.25rem |
20px |
Small headings, card titles |
--text-2xl |
1.5rem |
24px |
Medium headings, metric values |
--text-3xl |
2rem |
32px |
Large headings, page titles |
--text-4xl |
2.5rem |
40px |
Hero text, dashboard values |
Font Weights
| Token |
Value |
Use Case |
--font-light |
300 |
Rarely used, light emphasis |
--font-normal |
400 |
Body text, default |
--font-medium |
500 |
Labels, buttons, emphasis |
--font-semibold |
600 |
Headings, important text |
--font-bold |
700 |
Strong emphasis, titles |
Line Heights
| Token |
Value |
Use Case |
--leading-tight |
1.2 |
Headings, compact text |
--leading-normal |
1.5 |
Body text (default) |
--leading-loose |
1.75 |
Relaxed reading, large text |
Usage:
Color Palette
Primary Colors
| Token |
Value |
Use Case |
--color-primary |
#2563eb |
Primary actions, links, focus states |
--color-primary-dark |
#1d4ed8 |
Primary hover, active states |
--color-primary-light |
#3b82f6 |
Backgrounds, light accents |
Status Colors
| Token |
Value |
Use Case |
--color-success |
#059669 |
Success messages, positive trends |
--color-warning |
#d97706 |
Warnings, cautions |
--color-error |
#dc2626 |
Errors, destructive actions, negative trends |
--color-info |
#0891b2 |
Info messages, neutral alerts |
Text Colors
| Token |
Value |
Contrast |
Use Case |
--color-text |
#111827 |
16.9:1 |
Primary text, headings |
--color-text-secondary |
#6b7280 |
4.6:1 |
Secondary text, labels |
--color-text-muted |
#9ca3af |
2.8:1 |
Muted text, disabled text |
--color-text-inverse |
#ffffff |
- |
Text on dark backgrounds |
Background Colors
| Token |
Value |
Use Case |
--color-bg |
#ffffff |
Primary background, cards |
--color-bg-secondary |
#f9fafb |
Alternate backgrounds, hover states |
--color-bg-muted |
#f3f4f6 |
Disabled backgrounds, subtle sections |
--color-bg-dark |
#111827 |
Dark backgrounds |
Semantic Surface Tokens (PrimeVue-compatible)
CRITICAL for dark mode support! These tokens automatically switch values in dark mode.
| Token |
Light Value |
Dark Value |
Use Case |
--surface-card |
#ffffff |
#1e293b |
Card backgrounds, elevated surfaces |
--surface-ground |
#f8fafc |
#0f172a |
Page background, base layer |
--surface-section |
#ffffff |
#1e293b |
Section backgrounds |
--surface-hover |
#f1f5f9 |
#334155 |
Hover states on surfaces |
--surface-border |
#e2e8f0 |
#475569 |
Borders on surfaces |
--surface-overlay |
#ffffff |
#1e293b |
Modal/overlay backgrounds |
Usage:
Border Colors
| Token |
Value |
Use Case |
--color-border |
#e5e7eb |
Default borders |
--color-border-light |
#f3f4f6 |
Subtle borders |
--color-border-dark |
#d1d5db |
Emphasized borders |
Usage:
Shadows
| Token |
Value |
Use Case |
--shadow-sm |
0 1px 2px rgba(0,0,0,0.05) |
Subtle depth, hover states |
--shadow-md |
0 4px 6px rgba(0,0,0,0.1) |
Cards, dropdowns |
--shadow-lg |
0 10px 15px rgba(0,0,0,0.1) |
Elevated cards, modals |
--shadow-xl |
0 20px 25px rgba(0,0,0,0.1) |
Popovers, large modals |
Usage:
Border Radius
| Token |
Value |
Pixels |
Use Case |
--radius-sm |
0.25rem |
4px |
Small elements, badges |
--radius-md |
0.5rem |
8px |
Buttons, inputs, cards (default) |
--radius-lg |
0.75rem |
12px |
Large cards, images |
--radius-xl |
1rem |
16px |
Hero cards, special elements |
--radius-full |
9999px |
- |
Pills, circles, avatars |
Usage:
Transitions
| Token |
Value |
Use Case |
--transition-fast |
150ms ease |
Hover states, quick interactions |
--transition-normal |
250ms ease |
Default transitions |
--transition-slow |
350ms ease |
Complex animations, modals |
Usage:
Extended Tokens (Dashboard & Metrics)
Card Tokens
| Token |
Value |
Use Case |
--card-padding |
var(--space-lg) |
Standard card padding (24px) |
--card-padding-sm |
var(--space-md) |
Compact card padding (16px) |
--card-padding-lg |
var(--space-xl) |
Large card padding (32px) |
--card-gap |
var(--space-md) |
Gap between card elements (16px) |
--card-min-height |
280px |
Minimum card height |
--card-radius |
var(--radius-md) |
Card border radius (8px) |
Interactive Tokens
| Token |
Value |
Use Case |
--hover-lift |
-2px |
Vertical lift on hover |
--active-lift |
0px |
Reset lift on click |
--focus-ring |
0 0 0 3px rgba(...) |
Focus outline |
Spinner Sizes
| Token |
Value |
Use Case |
--spinner-size |
40px |
Default spinner |
--spinner-size-sm |
24px |
Small spinner (buttons) |
--spinner-size-lg |
56px |
Large spinner (page loading) |
--spinner-border |
4px |
Spinner border width |
Dashboard Metrics
| Token |
Value |
Use Case |
--value-size |
1.5rem |
Default metric value (24px) |
--value-size-lg |
2rem |
Large metric value (32px) |
--label-size |
0.875rem |
Metric label (14px) |
--sublabel-size |
0.8125rem |
Sub-label (13px) |
--metric-gap |
1rem |
Gap between metrics (16px) |
--sparkline-height |
80px |
Sparkline chart height |
--sparkline-height-lg |
150px |
Large sparkline height |
Layout Tokens
| Token |
Value |
Use Case |
--header-height |
56px |
App header height |
--sidebar-width |
240px |
Sidebar width |
--container-max-width |
1400px |
Max content width |
Z-Index Scale
| Token |
Value |
Use Case |
--z-dropdown |
1200 |
Dropdown menus |
--z-sticky |
1020 |
Sticky headers |
--z-fixed |
1030 |
Fixed elements |
--z-modal-backdrop |
1040 |
Modal backdrop |
--z-modal |
1050 |
Modal dialogs |
--z-popover |
1060 |
Popovers |
--z-tooltip |
1070 |
Tooltips (highest) |
Breakpoints (Reference)
| Token |
Value |
Use Case |
--breakpoint-mobile |
480px |
Mobile devices |
--breakpoint-tablet |
768px |
Tablets, small laptops |
--breakpoint-desktop |
1024px |
Desktops |
--breakpoint-wide |
1400px |
Large screens |
Usage:
Utility Patterns
Color With Opacity
Status Background Colors (10% opacity)
| Token |
Value |
Use Case |
--color-success-bg |
rgba(5, 150, 105, 0.1) |
Success alerts background |
--color-warning-bg |
rgba(217, 119, 6, 0.1) |
Warning alerts background |
--color-error-bg |
rgba(220, 38, 38, 0.1) |
Error alerts background |
--color-info-bg |
rgba(8, 145, 178, 0.1) |
Info alerts background |
Monospace Font
Compatibility Aliases
For backwards compatibility with existing code:
| Alias |
Maps To |
--primary-color |
var(--color-primary) |
--primary-color-dark |
var(--color-primary-dark) |
--text-color |
var(--color-text) |
--text-color-secondary |
var(--color-text-secondary) |
Usage Examples
Complete Button
Complete Card
Best Practices
✅ Do
❌ Don't
Dark Mode (ACTIVE)
ROA2WEB folosește un sistem two-tier pentru teme cu toggle manual în header.
Theme Toggle UI
Butonul de temă din header ciclează prin 3 moduri:
| Mode |
Icon |
Label |
Comportament |
auto |
🖥️ pi-desktop |
"Tema: Auto (sistem)" |
Urmează preferința OS |
light |
☀️ pi-sun |
"Tema: Light" |
Forțează light mode |
dark |
🌙 pi-moon |
"Tema: Dark" |
Forțează dark mode |
Implementare: src/shared/components/layout/AppHeader.vue (lines 137-175)
Persistență
- Key:
localStorage['user-theme']
- Values:
'light', 'dark', sau absent (= auto)
- Init: La mount, aplică tema salvată
CSS Priority Order
How It Works
Key Dark Mode Tokens
| Token |
Light |
Dark |
Purpose |
--surface-card |
#ffffff |
#1e293b |
Card/container backgrounds |
--surface-ground |
#f8fafc |
#0f172a |
Page background |
--surface-hover |
#f1f5f9 |
#334155 |
Hover states |
--surface-border |
#e2e8f0 |
#475569 |
Borders |
--text-color |
#111827 |
#f9fafb |
Primary text |
--text-color-secondary |
#6b7280 |
#d1d5db |
Secondary text |
Color Scales for Status
Each color has a full scale (50-900) that inverts appropriately in dark mode:
| Color |
Light Background |
Dark Background |
Use Case |
--green-50/100 |
Light green bg |
Dark green bg |
Success backgrounds |
--green-500/600 |
Green text/icons |
Same |
Success accents |
--yellow-50/100 |
Light yellow bg |
Dark yellow bg |
Warning backgrounds |
--yellow-500/600 |
Yellow text/icons |
Same |
Warning accents |
--red-50/100 |
Light red bg |
Dark red bg |
Error backgrounds |
--red-500/600 |
Red text/icons |
Same |
Error accents |
Testing Dark Mode
IMPORTANT: Testează întotdeauna ambele scenarii!
- Toggle manual: Click buton temă în header (ciclează auto→light→dark)
- DevTools: Rendering → Emulate CSS media →
prefers-color-scheme: dark
- Playwright:
await page.emulateMedia({ colorScheme: 'dark' })
- System: Change OS dark mode setting
Material Design 3 Tokens
ROA2WEB implementează Material Design 3 (MD3) color tokens pentru componente mobile și touch-friendly. Aceste tokens urmează convenția de denumire MD3 și se mapează la token-urile existente pentru consistență.
Location: src/assets/css/core/md3-tokens.css
Reference: Material Design 3 Color System
MD3 Color Token Overview
MD3 folosește un sistem de culori bazat pe roluri semantice în loc de valori specifice. Fiecare culoare principală are variante asociate:
| Prefix |
Purpose |
--md-sys-color-{name} |
Culoarea principală pentru acel rol |
--md-sys-color-on-{name} |
Text/iconițe PE acea culoare (contrast garantat) |
--md-sys-color-{name}-container |
Background mai subtle pentru componente |
--md-sys-color-on-{name}-container |
Text pe container (contrast garantat) |
Primary Colors
| MD3 Token |
Light Mode Maps To |
Dark Mode Maps To |
Use Case |
--md-sys-color-primary |
--color-primary |
--primary-300 |
FAB, prominent buttons, active states |
--md-sys-color-on-primary |
--color-text-inverse |
--primary-900 |
Text/icons on primary color |
--md-sys-color-primary-container |
--primary-100 |
--primary-700 |
Chips, cards with primary tint |
--md-sys-color-on-primary-container |
--primary-900 |
--primary-100 |
Text on primary container |
Secondary Colors
| MD3 Token |
Light Mode Maps To |
Dark Mode Maps To |
Use Case |
--md-sys-color-secondary |
--color-secondary |
--gray-300 |
Less prominent components |
--md-sys-color-on-secondary |
--color-text-inverse |
--gray-900 |
Text/icons on secondary |
--md-sys-color-secondary-container |
--gray-100 |
--gray-700 |
Secondary component backgrounds |
--md-sys-color-on-secondary-container |
--gray-900 |
--gray-100 |
Text on secondary container |
Surface Colors
| MD3 Token |
Light Mode Maps To |
Dark Mode Maps To |
Use Case |
--md-sys-color-surface |
--surface-card |
--surface-card |
Cards, sheets, dialogs |
--md-sys-color-on-surface |
--color-text |
--color-text |
Primary text on surface |
--md-sys-color-surface-variant |
--surface-50 |
--surface-200 |
Alternate surface |
--md-sys-color-on-surface-variant |
--color-text-secondary |
--color-text-secondary |
Secondary text |
Background & Outline
| MD3 Token |
Light Mode Maps To |
Dark Mode Maps To |
Use Case |
--md-sys-color-background |
--surface-ground |
--surface-ground |
Base page layer |
--md-sys-color-on-background |
--color-text |
--color-text |
Text on background |
--md-sys-color-outline |
--surface-border |
--surface-border |
Component borders |
--md-sys-color-outline-variant |
--color-border-light |
--surface-300 |
Subtle dividers |
Error Colors
| MD3 Token |
Light Mode Maps To |
Dark Mode Maps To |
Use Case |
--md-sys-color-error |
--color-error |
--red-300 |
Error states, destructive actions |
--md-sys-color-on-error |
--color-text-inverse |
--red-900 |
Text on error |
--md-sys-color-error-container |
--red-100 |
--red-800 |
Error state backgrounds |
--md-sys-color-on-error-container |
--red-900 |
--red-100 |
Text on error container |
Surface Elevation Levels (Tonal Surfaces)
MD3 înlocuiește shadowurile cu suprafețe tonale - culorile devin mai deschise/închise pentru a indica elevația:
| MD3 Token |
Light Mode |
Dark Mode |
Elevation Level |
--md-sys-color-surface-dim |
--surface-100 |
--surface-0 |
Below surface |
--md-sys-color-surface-bright |
--surface-0 |
--surface-200 |
Above surface |
--md-sys-color-surface-container-lowest |
--surface-0 |
--surface-0 |
Level 0 |
--md-sys-color-surface-container-low |
--surface-50 |
--surface-50 |
Level 1 |
--md-sys-color-surface-container |
--surface-100 |
--surface-100 |
Level 2 (default) |
--md-sys-color-surface-container-high |
--surface-200 |
--surface-200 |
Level 3 |
--md-sys-color-surface-container-highest |
--surface-300 |
--surface-300 |
Level 4 |
Inverse & Scrim
| MD3 Token |
Light Mode |
Dark Mode |
Use Case |
--md-sys-color-inverse-surface |
--surface-800 |
--surface-800 |
Snackbars, tooltips |
--md-sys-color-inverse-on-surface |
--surface-50 |
--surface-100 |
Text on inverse surface |
--md-sys-color-inverse-primary |
--primary-300 |
--primary-600 |
Primary accent on inverse |
--md-sys-color-scrim |
rgba(0,0,0,0.32) |
rgba(0,0,0,0.64) |
Modal/sheet overlays |
MD3 Token Mapping Quick Reference
Pentru referință rapidă, iată mapping-ul complet între MD3 tokens și tokens-urile existente ROA2WEB:
| MD3 Token |
ROA2WEB Equivalent |
--md-sys-color-primary |
--color-primary |
--md-sys-color-on-primary |
--color-text-inverse |
--md-sys-color-surface |
--surface-card |
--md-sys-color-on-surface |
--color-text / --text-color |
--md-sys-color-background |
--surface-ground |
--md-sys-color-outline |
--surface-border |
--md-sys-color-error |
--color-error |
Dark Mode Examples
Exemplu 1: Card cu MD3 tokens
Exemplu 2: Button primary cu MD3 tokens
Exemplu 3: Error state cu MD3 tokens
Exemplu 4: Elevated surface cu tonal levels
Exemplu 5: Scrim pentru modal overlay
When to Use MD3 Tokens vs Existing Tokens
| Scenario |
Recommended Tokens |
| Mobile-first components |
MD3 tokens (--md-sys-color-*) |
| Touch-friendly UI |
MD3 tokens |
| Desktop components |
Existing tokens (--color-*, --surface-*) |
| Legacy code |
Existing tokens |
| New cross-platform components |
MD3 tokens (better dark mode support) |
CSS Priority for Dark Mode
MD3 tokens urmează aceeași ordine de prioritate ca restul sistemului:
Resources
Last Updated: 2026-01-12
Version: 2.1.0
Maintained By: Frontend Team