Design System¶
Version: 2.0 Last Updated: October 29, 2025 Status: Production Ready
G-Track Design System provides comprehensive guidelines for building consistent, accessible, and professional user interfaces across all modules.
1. Introduction¶
Version 2.0 - Professional Business-Focused Design¶
What Changed:
❌ Removed: - Purple accent color (#5B47EB) - Colorful gradients - Multiple accent colors
✅ New Approach: - Single accent color: Primary Blue (#0072FF) - 95% neutral (white + grays), 5% blue accents - Solid colors instead of gradients - Maximum professionalism and minimal distraction
Why the change? - More professional appearance for business software - Less distracting interface for data-heavy operations - Cleaner, more minimalist aesthetic - Easier to maintain consistency - Better for long-term use (less eye fatigue)
Design Philosophy¶
Core Principles:
- Minimalism - Less is more. Remove unnecessary elements. Use white space.
- Consistency - Same colors, spacing, typography everywhere. No exceptions.
- Single Accent Color - Blue for interactive elements only. No other bright colors.
- Hierarchy - Clear visual hierarchy using size, weight, spacing (not color).
- Accessibility - All color combinations meet WCAG 2.1 AA standards (4.5:1 contrast minimum).
- Professional - Business software feel - trustworthy, efficient, modern, minimal.
- Data-Focused - Tables, charts, status indicators - optimized for information display.
- No Distraction - Interface should be invisible - data and content are the stars.
2. Colors 🎨¶
Primary Color (The ONLY Accent Color)¶
Primary Blue (#0072FF)
- Your logo G letter color
- ONLY accent color in the entire system
- Used for: Links, buttons, brand elements, focus states, interactive elements
- Inspiration: Modern, trustworthy, tech-forward
Philosophy: Use blue for 5% of UI (interactive elements only), use white + grays for 95% of UI (foundation)
Shades:
#E6F2FF Blue 50 (lightest - backgrounds, hover states)
#99CAFF Blue 200 (light accents)
#66B2FF Blue 300 (secondary accents)
#3399FF Blue 400 (alternative buttons)
#0072FF Blue 500 ← PRIMARY (buttons, links, accents)
#005BCC Blue 600 (button hover states)
#004499 Blue 700 (button active/pressed)
#002D66 Blue 800 (dark backgrounds)
#001833 Blue 900 (darkest)
Neutral Colors (Foundation)¶
White & Grays (95% of UI):
#FFFFFF White - Primary surface (cards, backgrounds, inputs)
#F9FAFB Gray 50 - Page backgrounds
#F3F4F6 Gray 100 - Card backgrounds, dividers
#E5E7EB Gray 200 - Borders, disabled states
#D1D5DB Gray 300 - Input borders
#9CA3AF Gray 400 - Placeholder text
#6B7280 Gray 500 - Secondary text
#4B5563 Gray 600 - Body text
#374151 Gray 700 - Headings
#1F2937 Gray 800 - Primary text
#111827 Gray 900 - Dark backgrounds
Status Colors (Document Management)¶
These are the ONLY exception to "no colors" rule:
🟢 Valid (#10B981) - Document expires in >30 days
🟡 Expiring Soon (#F59E0B) - Document expires in ≤30 days
🟠 Warning (#FB923C) - Document expires in ≤15 days (urgent!)
🔴 Expired (#EF4444) - Document has expired
⚪ No Data (#9CA3AF) - Document not uploaded
Design Rationale: - Immediate recognition - Users instantly know status - Color-blind friendly - Combined with icons and text labels - Consistent across app - Same meaning everywhere - Industry standard - Green = good, Red = bad, Yellow = warning
Semantic Colors¶
Success (Green):
Warning (Amber):
Error (Red):
Info (Blue):
CSS Variables (Recommended Setup)¶
:root {
/* Primary Color (ONLY accent color) */
--color-primary-blue: #0072FF;
--color-primary-blue-hover: #005BCC;
--color-primary-blue-active: #004499;
--color-primary-blue-light: #E6F2FF;
/* Neutral Colors */
--color-white: #FFFFFF;
--color-gray-50: #F9FAFB;
--color-gray-100: #F3F4F6;
--color-gray-200: #E5E7EB;
--color-gray-300: #D1D5DB;
--color-gray-400: #9CA3AF;
--color-gray-500: #6B7280;
--color-gray-600: #4B5563;
--color-gray-700: #374151;
--color-gray-800: #1F2937;
--color-gray-900: #111827;
/* Text Colors */
--color-text-primary: #1F2937; /* Gray 800 */
--color-text-secondary: #4B5563; /* Gray 600 */
--color-text-tertiary: #6B7280; /* Gray 500 */
--color-text-disabled: #9CA3AF; /* Gray 400 */
--color-text-on-primary: #FFFFFF;
/* Background Colors */
--color-bg-page: #F9FAFB; /* Gray 50 */
--color-bg-surface: #FFFFFF;
--color-bg-secondary: #F3F4F6; /* Gray 100 */
--color-bg-disabled: #E5E7EB; /* Gray 200 */
/* Border Colors */
--color-border: #E5E7EB; /* Gray 200 */
--color-border-input: #D1D5DB; /* Gray 300 */
--color-border-focus: #0072FF;
/* Status Colors */
--color-status-valid: #10B981;
--color-status-expiring: #F59E0B;
--color-status-warning: #FB923C;
--color-status-expired: #EF4444;
--color-status-nodata: #9CA3AF;
}
Accessibility Standards¶
All color combinations meet WCAG 2.1 AA standards: - Normal text (16px): minimum 4.5:1 contrast ratio - Large text (24px+): minimum 3:1 contrast ratio - UI components: minimum 3:1 contrast ratio
Pre-tested Combinations: - ✅ Gray 800 (#1F2937) on White (#FFFFFF): 12.6:1 (excellent) - ✅ Gray 600 (#4B5563) on White (#FFFFFF): 7.2:1 (excellent) - ✅ Primary Blue (#0072FF) on White (#FFFFFF): 4.5:1 (pass AA) - ✅ White (#FFFFFF) on Primary Blue (#0072FF): 8.6:1 (excellent)
3. Typography¶
Font Family¶
Primary Font: Inter
font-family: 'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI',
'Roboto', 'Oxygen', 'Ubuntu', sans-serif;
Why Inter? - ✅ Excellent readability at all sizes - ✅ Perfect for Cyrillic (Russian), Latin, and other EU languages - ✅ Free and open-source (SIL OFL) - ✅ Modern, professional, clean aesthetic - ✅ Designed specifically for UI/UX (not body text) - ✅ Used by GitHub, Figma, Mozilla - proven at scale - ✅ Works beautifully with minimal design
Installation:
<!-- Add to index.html -->
<link rel="preconnect" href="https://fonts.googleapis.com">
<link href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700&display=swap" rel="stylesheet">
Type Scale¶
Based on a 1.250 (Major Third) modular scale with 16px base.
/* Display Headings */
--font-size-display-1: 3.052rem; /* ~49px */
--font-size-display-2: 2.441rem; /* ~39px */
/* Headings */
--font-size-h1: 1.953rem; /* ~31px */
--font-size-h2: 1.563rem; /* ~25px */
--font-size-h3: 1.25rem; /* ~20px */
--font-size-h4: 1rem; /* 16px */
--font-size-h5: 0.875rem; /* 14px */
--font-size-h6: 0.75rem; /* 12px */
/* Body Text */
--font-size-body-large: 1.125rem; /* 18px */
--font-size-body: 1rem; /* 16px - Default */
--font-size-body-small: 0.875rem; /* 14px */
/* Utility */
--font-size-caption: 0.75rem; /* 12px */
--font-size-overline: 0.75rem; /* 12px */
Font Weights¶
--font-weight-regular: 400; /* Body text, descriptions */
--font-weight-medium: 500; /* Emphasis, labels, table headers */
--font-weight-semibold: 600; /* Headings, buttons, navigation */
--font-weight-bold: 700; /* Display text, hero sections */
Line Heights¶
--line-height-tight: 1.2; /* Headings */
--line-height-normal: 1.5; /* UI elements */
--line-height-relaxed: 1.6; /* Body text (default) */
--line-height-loose: 1.8; /* Long-form content */
Usage Examples¶
/* Page Title */
h1 {
font-size: var(--font-size-h1);
font-weight: var(--font-weight-semibold);
line-height: var(--line-height-tight);
color: var(--color-text-primary);
}
/* Body Text */
p {
font-size: var(--font-size-body);
font-weight: var(--font-weight-regular);
line-height: var(--line-height-relaxed);
color: var(--color-text-primary);
}
/* Button */
button {
font-size: 1rem;
font-weight: var(--font-weight-semibold);
line-height: var(--line-height-normal);
}
/* Form Label */
label {
font-size: 0.875rem;
font-weight: var(--font-weight-medium);
color: var(--color-text-secondary);
}
4. Spacing & Layout¶
Base Unit: 4px¶
All spacing follows a 4px grid system for consistency and visual harmony.
Spacing Scale¶
--spacing-xxs: 4px; /* 0.25rem - Tight spacing */
--spacing-xs: 8px; /* 0.5rem - Icon spacing */
--spacing-sm: 12px; /* 0.75rem - Form field spacing */
--spacing-md: 16px; /* 1rem - Default padding (MOST COMMON) */
--spacing-lg: 24px; /* 1.5rem - Card padding */
--spacing-xl: 32px; /* 2rem - Section spacing */
--spacing-2xl: 48px; /* 3rem - Major sections */
--spacing-3xl: 64px; /* 4rem - Page-level spacing */
Component Spacing¶
Buttons:
padding: 10px 24px; /* Default button */
padding: 8px 16px; /* Small button */
padding: 12px 32px; /* Large button */
gap: 8px; /* Icon + text spacing */
Cards:
padding: 24px; /* Card body */
gap: 16px; /* Between card sections */
margin-bottom: 24px; /* Between cards */
Forms:
margin-bottom: 16px; /* Between form fields */
padding: 12px 16px; /* Input internal padding */
gap: 8px; /* Label → Input */
Layout Grid¶
Container Widths:
Mobile: 100% (with 16px padding)
Tablet: 100% (with 24px padding, max 768px)
Desktop: 1200px (max-width, centered)
Wide: 1400px (optional for dashboards)
Breakpoints:
XS: 0px (mobile portrait)
SM: 640px (mobile landscape)
MD: 768px (tablet portrait)
LG: 1024px (tablet landscape / small desktop)
XL: 1280px (desktop)
2XL: 1536px (large desktop)
5. Components¶
Buttons¶
Primary Button¶
Default State:
background: var(--color-primary-blue);
color: #FFFFFF;
padding: 10px 24px;
border-radius: 6px;
font-weight: 600;
box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1);
Hover State:
background: var(--color-primary-blue-hover);
box-shadow: 0 4px 6px rgba(0, 0, 0, 0.15);
transform: translateY(-1px);
Active/Pressed State:
Secondary Button (Outline)¶
background: transparent;
color: var(--color-text-secondary);
border: 2px solid var(--color-gray-300);
padding: 8px 22px; /* Reduced to account for border */
border-radius: 6px;
Tertiary Button (Ghost/Text)¶
Form Inputs¶
/* Text Input */
input[type="text"],
input[type="email"],
input[type="tel"] {
padding: 12px 16px;
font-size: 16px; /* Prevents zoom on iOS */
border: 1px solid var(--color-border-input);
border-radius: 6px;
background: var(--color-bg-surface);
}
/* Focus State */
input:focus {
outline: none;
border-color: var(--color-border-focus);
box-shadow: 0 0 0 3px rgba(0, 114, 255, 0.1);
}
/* Error State */
input.error {
border-color: var(--color-error);
}
Cards¶
.card {
background: var(--color-bg-surface);
border: 1px solid var(--color-border);
border-radius: 8px;
padding: 24px;
box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05);
}
.card:hover {
box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1);
}
Status Badges¶
.badge {
display: inline-flex;
align-items: center;
gap: 6px;
padding: 4px 12px;
border-radius: 4px;
font-size: 12px;
font-weight: 500;
}
/* Valid (Green) */
.badge-valid {
background: #D1FAE5;
color: #065F46;
}
/* Expiring Soon (Yellow) */
.badge-expiring {
background: #FEF3C7;
color: #92400E;
}
/* Expired (Red) */
.badge-expired {
background: #FEE2E2;
color: #991B1B;
}
Tables¶
table {
width: 100%;
border-collapse: collapse;
background: var(--color-bg-surface);
border-radius: 8px;
overflow: hidden;
}
th {
background: var(--color-gray-50);
padding: 12px 16px;
text-align: left;
font-weight: 500;
color: var(--color-text-secondary);
border-bottom: 1px solid var(--color-border);
}
td {
padding: 12px 16px;
border-bottom: 1px solid var(--color-border);
}
tr:hover {
background: var(--color-gray-50);
}
6. Elevation & Shadows¶
Material Design 3 elevation system for hierarchy and depth.
/* Elevation 0: Flat */
box-shadow: none;
/* Elevation 1: Raised (Cards, Inputs) */
box-shadow: 0 1px 2px 0 rgba(0, 0, 0, 0.05);
/* Elevation 2: Floating (Buttons, Hover) */
box-shadow: 0 1px 3px 0 rgba(0, 0, 0, 0.1),
0 1px 2px -1px rgba(0, 0, 0, 0.1);
/* Elevation 3: Overlay (Dropdowns, Tooltips) */
box-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.1),
0 2px 4px -2px rgba(0, 0, 0, 0.1);
/* Elevation 4: Modal (Dialogs, Modals) */
box-shadow: 0 10px 15px -3px rgba(0, 0, 0, 0.1),
0 4px 6px -4px rgba(0, 0, 0, 0.1);
/* Elevation 5: Sticky (Headers when scrolled) */
box-shadow: 0 20px 25px -5px rgba(0, 0, 0, 0.1),
0 8px 10px -6px rgba(0, 0, 0, 0.1);
Component Mapping: - Page Background: Elevation 0 - Cards (default): Elevation 1 - Buttons, Cards (hover): Elevation 2 - Dropdowns, Tooltips: Elevation 3 - Modals, Dialogs: Elevation 4 - Header (scrolled): Elevation 5
7. Border Radius¶
Consistent border radius for modern, cohesive appearance.
--radius-none: 0px; /* Tables, grid layouts */
--radius-sm: 4px; /* Chips, badges */
--radius-md: 6px; /* Inputs, buttons (DEFAULT) */
--radius-lg: 8px; /* Cards, panels */
--radius-xl: 12px; /* Modals, Auth0 widget */
--radius-2xl: 16px; /* Feature cards */
--radius-full: 9999px; /* Pills, avatars, circular */
Component Mapping: - Buttons (default): 6px (MD) - Form Inputs: 6px (MD) - Cards: 8px (LG) - Modals: 12px (XL) - Badges/Chips: 4px (SM) - Avatars: 9999px (Full)
8. Icons¶
Icon Library: Material Icons (Google)
Source: Material Symbols & Icons
Installation:
<!-- Material Icons -->
<link href="https://fonts.googleapis.com/icon?family=Material+Icons" rel="stylesheet">
Usage:
<!-- Filled Icons (default) -->
<mat-icon>home</mat-icon>
<mat-icon>person</mat-icon>
<mat-icon>description</mat-icon>
<!-- Outlined Icons -->
<mat-icon fontSet="material-icons-outlined">home</mat-icon>
Icon Sizes: - Small: 16px (inline with text) - Default: 24px (buttons, lists) - Large: 32px (headers, featured items) - XLarge: 48px (empty states, illustrations)
Color Usage: - Icons follow text color (inherit) - Interactive icons: Primary Blue (#0072FF) - Status icons: Semantic colors (green/yellow/red)
9. Responsive Design¶
Mobile-First Philosophy¶
Core Principles:
- Mobile is Primary - Design for 375px first, scale UP to desktop
- Progressive Enhancement - Add features for larger screens
- Touch First - 44px minimum touch targets, 16px spacing
- Content Priority - Most important info at top
Breakpoint Strategy¶
// Mobile First: Start at 375px
$breakpoint-sm: 375px; // iPhone SE, small phones
$breakpoint-md: 768px; // Tablets (iPad Mini)
$breakpoint-lg: 1024px; // Tablets (iPad Pro) / Laptops
$breakpoint-xl: 1280px; // Desktop monitors
// Example Usage
@mixin mobile-first {
grid-template-columns: 1fr; // Single column
gap: 16px;
padding: 16px;
}
@media (min-width: $breakpoint-md) {
grid-template-columns: repeat(2, 1fr); // Two columns
gap: 24px;
padding: 24px;
}
@media (min-width: $breakpoint-lg) {
grid-template-columns: repeat(3, 1fr); // Three columns
gap: 32px;
padding: 32px;
}
Touch Target Sizing¶
// All interactive elements
mat-form-field, mat-button, mat-checkbox {
min-height: 44px; // iOS guideline
min-width: 44px;
}
// Input padding
input, textarea {
padding: 12px;
font-size: 16px; // Prevents zoom on iOS
}
// Button size
mat-button {
padding: 12px 24px;
font-size: 16px;
}
Responsive Layout Examples¶
/* Mobile: Single Column */
.section-container {
display: grid;
grid-template-columns: 1fr;
gap: 16px;
padding: 16px;
}
/* Tablet: Two Columns */
@media (min-width: 768px) {
.section-container {
grid-template-columns: repeat(2, 1fr);
gap: 24px;
padding: 24px;
}
}
/* Desktop: Three Columns */
@media (min-width: 1024px) {
.section-container {
grid-template-columns: repeat(3, 1fr);
gap: 32px;
padding: 32px;
}
}
10. Accessibility¶
G-Track follows WCAG 2.1 Level AA standards.
Color Contrast¶
- ✅ Normal text: 4.5:1 minimum contrast ratio
- ✅ Large text (24px+): 3:1 minimum
- ✅ UI components: 3:1 minimum
- ✅ All pre-tested combinations meet AA standards
Semantic HTML¶
<!-- Use semantic elements -->
<header>, <nav>, <main>, <article>, <section>, <footer>
<!-- Labels for inputs -->
<label for="email">Email</label>
<input id="email" type="email" />
<!-- Required fields -->
<label for="name">Name <span aria-label="required">*</span></label>
<input id="name" required aria-required="true" />
Keyboard Navigation¶
- ✅ Tab through all interactive elements
- ✅ Enter to submit forms
- ✅ Space for checkboxes
- ✅ Arrow keys in dropdowns
- ✅ Escape to close dialogs
- ✅ Visible focus indicators (3px ring)
Screen Readers¶
<!-- ARIA labels -->
<button aria-label="Close dialog">✕</button>
<!-- ARIA live regions for dynamic content -->
<div aria-live="polite" aria-atomic="true">
Uploading... 45% complete
</div>
<!-- Skip links -->
<a href="#main-content" class="skip-link">Skip to main content</a>
Focus Management¶
/* Visible focus indicator */
*:focus {
outline: 3px solid var(--color-primary-blue);
outline-offset: 2px;
}
/* Remove outline for mouse users only */
*:focus:not(:focus-visible) {
outline: none;
}
*:focus-visible {
outline: 3px solid var(--color-primary-blue);
outline-offset: 2px;
}
11. Module-Specific Designs¶
Drivers Module¶
The Drivers Module is the first priority module with comprehensive design specifications.
Key Components:
- Driver Form (Create/Edit)
- 40+ fields organized in 6 collapsible sections
- Mobile-first responsive design
- Conditional fields based on citizenship and bank country
-
Reactive Forms with validation
-
Document Upload Dialog
- Two-step upload process (metadata → file)
- Support for PDF, JPG, PNG (max 10MB)
- Mobile camera integration
- Drag-drop for desktop
-
Real-time progress indicator
-
Document Status Indicators
- 5 status types: Valid 🟢, Expiring Soon 🟡, Warning 🟠, Expired 🔴, No Data ⚪
- Color-coded badges with icons
- Readiness dashboard
Note: Detailed component specifications and mobile-first implementation guidelines have been integrated throughout this Design System documentation (see Sections 2-10).
Future Modules¶
Design patterns established in Drivers Module will be extended to: - Vehicles Module - Orders Module - Invoices Module - Customers Module
12. Quick Reference¶
Most Used Colors¶
/* Primary */
--color-primary-blue: #0072FF;
--color-primary-blue-hover: #005BCC;
/* Text */
--color-text-primary: #1F2937; /* Gray 800 */
--color-text-secondary: #4B5563; /* Gray 600 */
/* Backgrounds */
--color-bg-page: #F9FAFB; /* Gray 50 */
--color-bg-surface: #FFFFFF;
/* Borders */
--color-border: #E5E7EB; /* Gray 200 */
/* Status */
--color-status-valid: #10B981; /* Green */
--color-status-expired: #EF4444; /* Red */
Most Used Spacing¶
--spacing-sm: 12px; /* Form fields */
--spacing-md: 16px; /* Default (MOST COMMON) */
--spacing-lg: 24px; /* Cards, sections */
--spacing-xl: 32px; /* Major sections */
Most Used Radius¶
--radius-md: 6px; /* Buttons, inputs (DEFAULT) */
--radius-lg: 8px; /* Cards */
--radius-xl: 12px; /* Modals */
Common Component Styles¶
/* Primary Button */
.btn-primary {
background: #0072FF;
color: white;
padding: 10px 24px;
border-radius: 6px;
font-weight: 600;
}
/* Card */
.card {
background: white;
border: 1px solid #E5E7EB;
border-radius: 8px;
padding: 24px;
box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05);
}
/* Input */
.input {
padding: 12px 16px;
font-size: 16px;
border: 1px solid #D1D5DB;
border-radius: 6px;
}
13. Resources¶
Source Documentation¶
This Design System documentation was compiled from the following comprehensive source documents:
- BRAND_BOOK.md (1300+ lines)
- Complete brand guidelines
- Full component library
- Material Design 3 integration
-
Dark mode preparation
-
COLOR_PALETTE.md (356 lines)
- All colors with hex codes and RGB values
- Complete CSS variables
-
Usage examples and guidelines
-
MOBILE_FIRST_STRATEGY.md (750+ lines)
- Mobile optimization techniques
- Touch interaction patterns
- Performance optimizations
-
Browser testing strategies
-
DRIVERS_MODULE_COMPONENT_DESIGN.md (1300+ lines)
- Complete Driver Form specification
- Document Upload Dialog design
-
Wireframes and user flows
-
QUICK_REFERENCE.md (620 lines)
- TL;DR of all design docs
- Quick facts and checklists
Note: All content from these source documents has been integrated into this comprehensive Design System section.
External Resources¶
- Material Design 3: https://m3.material.io/
- Inter Font: https://fonts.google.com/specimen/Inter
- Material Icons: https://fonts.google.com/icons
- WCAG Guidelines: https://www.w3.org/WAI/WCAG21/quickref/
Angular Material Configuration¶
// Configure Material Design 3 theme
import { provideAnimationsAsync } from '@angular/platform-browser/animations/async';
import { provideMaterialTheme } from '@angular/material/core';
export const appConfig: ApplicationConfig = {
providers: [
provideAnimationsAsync(),
provideMaterialTheme({
primary: { main: '#0072FF' },
secondary: { main: '#0072FF' }, // Also blue
error: { main: '#EF4444' },
success: { main: '#10B981' },
warning: { main: '#F59E0B' },
}),
],
};
Getting Help¶
For design questions: - Contact: @ui-ux-designer (Claude Code agent) - Topics: UI layout, Material Design, responsive design
For implementation questions: - Contact: @frontend-developer (Claude Code agent) - Topics: Angular, TypeScript, Material components
For accessibility questions: - Contact: @code-reviewer (Claude Code agent) - Topics: WCAG compliance, screen reader support
Version: 2.0 Last Updated: October 29, 2025 Created By: UI/UX Design Team Status: Production Ready