VH Platform · Design System
Component & Token Library
A unified set of colors, typography, spacing, and UI components for the VH SaaS platform.
All values are expressed as CSS custom properties for consistent theming across dashboard panels, iframes, and standalone blocks.
Colors
Brand palette, semantic colors, and surface hierarchy
Amber — Brand / Accent
50
100
200
400 ★
500
600
800
900
★ Primary brand token — --amber-400: #F5A623
Semantic colors
Teal / Verified
--teal-400: #5BCBA8
Red / Failed
--red-400: #F87171
Blue / Pending
--blue-400: #4A7FA8
Amber / Active
--amber-400: #F5A623
Surface hierarchy
Base / Page
--bg-base: #1A1D24
Surface / Sidebar
--bg-surface: #1E2129
Card
--bg-card: #272B33
Elevated
--bg-elevated: #2E323C
Text colors
Aa
Primary
--text-primary: #F0EED8
Aa
Secondary
--text-secondary: #E2E0D6
Aa
Muted
--text-muted: #9A9890
Aa
Faint
--text-faint: #6B6960
Typography
Type scale, weights, and text styles
Font family
Primary typeface · UI & dashboard
Inter
Google Fonts · by R.Andersson
A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
a b c d e f g h i j k l m n o p q r s t u v w x y z
0 1 2 3 4 5 6 7 8 9 & . , : ; ! ? @ # % ( ) / —
a b c d e f g h i j k l m n o p q r s t u v w x y z
0 1 2 3 4 5 6 7 8 9 & . , : ; ! ? @ # % ( ) / —
--font-sans
'Inter', sans-serif
Used weights in this UI
300 · Light — body, captions, nav items
400 · Regular — labels, table cells
500 · Medium — KPI values, chart nums
600 · Semibold — uppercase headings
Import
@import url(
'fonts.googleapis.com
/css2?family=Inter
:wght@300;400;500;600'
);
'fonts.googleapis.com
/css2?family=Inter
:wght@300;400;500;600'
);
Weights in use
Ag
Light 300
font-weight: 300
Body text · nav labels · captions · badge text · table cells · chart axis
Ag
Regular 400
font-weight: 400
Column labels · input values · filter buttons · tooltip text
Ag
Medium 500 ★
font-weight: 500
KPI values · chart numbers · active nav · badge values · shipment counts
Ag
Semibold 600
font-weight: 600
Uppercase section headers · panel titles · column headings · sub-nav active
★ Medium (500) is the primary weight — most interactive and numeric content uses it.
Uppercase pattern
Uppercase is used for section labels, panel headers, and table column names — always with Inter Light or Regular, never Bold.
STATISTICS
11px / 300 / ls 0.12em — page section title
LOGISTICS EXECUTION
11px / 300 / ls 0.12em — panel header
ASSET CLASS · CARGO · REFERENCE
11px / 400 / ls 0.10em — table column
REGISTERED PRODUCTS
10px / 400 / ls 0.10em — KPI card label
ACTIVE SHIPMENTS
11px / 600 / ls 0.08em — active nav group
Type scale specimen
STATISTICS · SHIPMENT CONTROL · LOGISTICS EXECUTION
ASSET CLASS · CARGO · ASSIGNED AGENT · LAST CHECKPOINT · REFERENCE
REGISTERED PRODUCTS · VERIFIED PRODUCTS · ACTIVE NETWORK NODES
2.841 2.330 148 300
Shipment control · Last Mile Tracking · Deviation Alerts · ETA Predictions
Dry Van Load · LCL · ISO Tank · FCL · [Agent_ID_Title] · [check_point_lat]
72F259S75 · 25S0216U7 · DP3961825 · 3876G78Q0
+ 30%
- 5%
stable
+ 15%
ACTIVE SHIPMENTS · MILESTONE VISIBILITY · NETWORK NODES
Registered
Verified
Pending
Returned
/* Font import */
@import url('https://fonts.googleapis.com/css2?family=Inter:wght@300;400;500;600&display=swap');
/* Font family token */
--font-sans: 'Inter', sans-serif;
--font-mono: 'Cascadia Code', 'Fira Code', Consolas, monospace;
/* Weights in use */
--weight-light: 300; /* body, nav, captions, table cells */
--weight-regular: 400; /* column labels, filter buttons */
--weight-medium: 500; /* KPI values, reference IDs ★ primary */
--weight-semibold: 600; /* uppercase headers, active nav group */
/* Uppercase pattern */
--label-style: uppercase; /* text-transform for all section/column labels */
--label-spacing-lg: 0.12em; /* page headers, panel titles */
--label-spacing-md: 0.10em; /* table columns, KPI labels */
--label-spacing-sm: 0.08em; /* active nav groups, badges */
/* Type scale */
--text-xs: 10px; /* KPI card labels (uppercase) */
--text-sm: 11px; /* section headers, column labels, badges */
--text-base: 12px; /* reference IDs, sub-labels */
--text-md: 13px; /* nav items, table cells, body */
--text-lg: 14px; /* chart labels, card content */
--text-kpi: 28px; /* KPI values (medium weight) */
Spacing & Radius
8pt grid system and corner radius tokens
Spacing scale (8pt grid)
--space-1 · micro gap
--space-2 · icon gap
--space-3 · inline gap
--space-4 · component gap
--space-5 · card padding (sm)
--space-6 · card padding
--space-7 · section padding
--space-12 · page padding
--space-14 · main gutter
Border radius
4px--radius-xs
6px--radius-sm
10px--radius-md
14px--radius-lg
20px--radius-xl
99px--radius-pill
Shadows & Borders
Elevation system and border tokens
--shadow-sm
0 2px 8px rgba(0,0,0,0.25)
--shadow-md
0 4px 20px rgba(0,0,0,0.40)
--shadow-lg
0 8px 40px rgba(0,0,0,0.55)
Border tokens
Subtle
rgba(255,255,255, 0.07)
Default
rgba(255,255,255, 0.12)
Strong
rgba(255,255,255, 0.22)
Accent
rgba(245,166,35, 0.45)
All borders use
0.5px stroke weight for a refined, subtle appearance.Buttons
Variants, sizes, and states
Variants
Sizes
Segmented control — used for chart time filters
Badges & Tags
Status indicators and labels
Directional badges — KPI cards
↑ 30% vs last period
↓ 5% vs last period
→ Stable
↑ 18% vs last period
Status dots — inline use
Verified
Failed
Inactive
Pending
Tags — metadata, filters
CNH5390X3
Type B
Last 7 days
East Asia
In transit
Inputs & Controls
Form elements, toggles, and selects
This field is required
Product ID verified
Toggles
Attribute variants selector
Cards & KPIs
Surface containers and metric blocks
KPI cards — with colored left accent
Registered products
2,841
↑ 30% vs last period
Verified products
2,330
↑ 18% vs last period
Shipments in transit
374
↓ 5% vs last period
Card variants
Default card
background: --bg-card
border: 0.5px --border-subtle
radius: --radius-lg
border: 0.5px --border-subtle
radius: --radius-lg
Accent card
border-left: 3px solid --amber-400
Used for highlighted sections
Used for highlighted sections
Focused / hover card
border: 0.5px --border-accent
On hover state
On hover state
Tables
Data tables for product and shipment lists
Chart block patterns
Anatomy and usage rules for dashboard charts
Chart card anatomy
Chart title ← 14px / 500
Subtitle / data description ← 12px muted
Registered
Verified
Pending
Chart color assignments
Registered / Primary metric
#F5A623 · rgba(245,166,35,0.85)
Verified / Delivered / Success
#5BCBA8 · rgba(91,203,168,0.8)
Pending / Returned / Info
#4A7FA8 · rgba(74,127,168,0.8)
Failed / Delayed / Danger
#F87171 · rgba(248,113,113,0.8)
Chart axis styles
/* Shared Chart.js config */
scales: {
x: {
grid: { color: 'rgba(255,255,255,0.04)' },
ticks: { color: '#9a9890', font: { size: 11 } }
},
y: {
grid: { color: 'rgba(255,255,255,0.06)' },
ticks: { color: '#9a9890', font: { size: 11 } },
border: { dash: [3, 3] }
}
}
CSS tokens — full reference
Copy into your :root to use across all blocks
/* ── VH Platform Design System v1.0 ── */
:root {
/* Brand */
--amber-400: #F5A623;
--amber-500: #E8920E;
--amber-600: #C57D0A;
/* Semantic */
--teal-400: #5BCBA8; /* verified / success */
--red-400: #F87171; /* failed / danger */
--blue-400: #4A7FA8; /* pending / info */
/* Surfaces */
--bg-base: #1A1D24;
--bg-surface: #1E2129;
--bg-card: #272B33;
--bg-elevated: #2E323C;
--bg-hover: rgba(255,255,255,0.04);
--bg-active: rgba(245,166,35,0.10);
/* Borders */
--border-subtle: rgba(255,255,255,0.07);
--border-default: rgba(255,255,255,0.12);
--border-strong: rgba(255,255,255,0.22);
--border-accent: rgba(245,166,35,0.45);
/* Text */
--text-primary: #F0EED8;
--text-secondary: #E2E0D6;
--text-muted: #9A9890;
--text-faint: #6B6960;
--text-accent: #F5A623;
/* Radius */
--radius-sm: 6px;
--radius-md: 10px;
--radius-lg: 14px;
--radius-xl: 20px;
--radius-pill: 99px;
/* Shadows */
--shadow-sm: 0 2px 8px rgba(0,0,0,0.25);
--shadow-md: 0 4px 20px rgba(0,0,0,0.40);
--shadow-lg: 0 8px 40px rgba(0,0,0,0.55);
/* Typography */
--font-sans: 'Inter', sans-serif;
--font-mono: 'Cascadia Code', 'Fira Code', Consolas, monospace;
--weight-light: 300;
--weight-regular: 400;
--weight-medium: 500;
--weight-semibold: 600;
/* Transitions */
--transition-fast: 0.15s ease;
--transition-base: 0.20s ease;
--transition-slow: 0.35s ease;
}