CRM Africa — Design System
v1.0.0
Design System Documentation

CRM Africa
UI Design System

A comprehensive design language covering color, typography, spacing, components, and interaction patterns — built for the CRM Africa product suite.

1.0.0
March 2026
OKLCH
Plus Jakarta Sans
0.75rem
Foundation · 01

Color System

All colors are defined as OKLCH values for perceptual uniformity, wide gamut support, and predictable lightness manipulation. Two themes are provided: light and dark.

Primary Theme Colors

Background
oklch(0.9911 0 0)
var(--background)
Foreground
oklch(0.1763 0.014 258)
var(--foreground)
Primary
oklch(0.6223 0.2372 16.47)
var(--primary)
Primary Foreground
oklch(1.0000 0 0)
var(--primary-foreground)

Secondary & Accent Colors

Secondary
oklch(0.3902 0.1251 269.95)
var(--secondary)
Secondary Foreground
oklch(1.0000 0 0)
var(--secondary-foreground)
Accent
oklch(0.8342 0.0950 7.82)
var(--accent)
Accent Foreground
oklch(0.3155 0.1064 18.12)
var(--accent-foreground)

UI Component Colors

Card
oklch(1.0000 0 0)
var(--card)
Card Foreground
oklch(0.1763 0.014 258)
var(--card-foreground)
Popover
oklch(1.0000 0 0)
var(--popover)
Popover Foreground
oklch(0.1763 0.014 258)
var(--popover-foreground)
Muted
oklch(0.9674 0.0013 286.38)
var(--muted)
Muted Foreground
oklch(0.5517 0.0138 285.94)
var(--muted-foreground)

Utility & Form Colors

Border
oklch(0.9197 0.0040 286.32)
var(--border)
Input
oklch(0.9197 0.0040 286.32)
var(--input)
Ring
oklch(0.5882 0.2309 28.29)
var(--ring)

Status & Feedback Colors

Destructive
oklch(0.3999 0.1641 29.23)
var(--destructive)
Destructive Foreground
oklch(1.0000 0 0)
var(--destructive-foreground)
Success
oklch(0.55 0.16 145)
var(--success)
Success Foreground
oklch(1.0000 0 0)
var(--success-foreground)
Warning
oklch(0.75 0.14 64)
var(--warning)
Warning Foreground
oklch(0.25 0.05 64)
var(--warning-foreground)
Info
oklch(0.50 0.14 192)
var(--info)
Info Foreground
oklch(1.0000 0 0)
var(--info-foreground)

Chart & Visualization Colors

Chart 1 — Red
oklch(0.5882 0.2309 28.29)
var(--chart-1)
Chart 2 — Navy
oklch(0.3303 0.0753 267.10)
var(--chart-2)
Chart 3 — Rose
oklch(0.8342 0.0950 7.82)
var(--chart-3)
Chart 4 — Amber
oklch(0.8948 0.0509 64.21)
var(--chart-4)
Chart 5 — Gray
oklch(0.7118 0.0129 286.07)
var(--chart-5)

Sidebar & Navigation Colors

Sidebar Background
oklch(1.0000 0 0)
var(--sidebar)
Sidebar Foreground
oklch(0.3703 0.0119 285.81)
var(--sidebar-foreground)
Sidebar Primary
oklch(0.5882 0.2309 28.29)
var(--sidebar-primary)
Sidebar Primary Foreground
oklch(1.0000 0 0)
var(--sidebar-primary-foreground)
Sidebar Accent
oklch(0.9674 0.0013 286.38)
var(--sidebar-accent)
Sidebar Accent Foreground
oklch(0.1763 0.014 258)
var(--sidebar-accent-foreground)
Sidebar Border
oklch(0.9674 0.0013 286.38)
var(--sidebar-border)
Sidebar Ring
oklch(0.5882 0.2309 28.29)
var(--sidebar-ring)

Dark Mode Overrides

Add the .dark class to <html> to activate dark mode. All tokens remap automatically — no extra selectors needed in your components.

Background
oklch(0.1645 0.0086 274)
Card
oklch(0.2145 0.018 270)
Primary
oklch(0.6453 0.2404 27)
Secondary
oklch(0.2604 0.047 267)
Muted
oklch(0.2739 0.0055 286)
Accent
oklch(0.6986 0.1954 14)
Foundation · 02

Typography Scale

The type system uses Plus Jakarta Sans for UI text and JetBrains Mono for code. Letter-spacing is globally offset by -0.02em for tighter, more professional text rendering.

Type Scale

Display
2.5rem / 800 / -0.07em
Dashboard Overview
H1
2rem / 700 / -0.05em
Customer Accounts
H2
1.5rem / 700 / -0.04em
Sales Pipeline
H3
1.25rem / 600 / -0.03em
Active Leads
H4
1rem / 600 / -0.02em
Recent Transactions
Body Large
0.9375rem / 400 / -0.02em
The CRM dashboard gives a complete overview of all customer interactions, scheduled tasks, and pipeline stages.
Body
0.875rem / 400 / -0.02em
Track every deal, contact, and communication from a single interface designed for modern sales teams.
Small
0.8rem / 400 / -0.02em
Last updated 3 hours ago · 42 open tasks · 7 follow-ups due
Caption
0.72rem / 500 / +0.02em
SECTION LABEL · METADATA · TIMESTAMP
Overline
0.65rem / 700 / +0.08em
NAVIGATION · CATEGORY · TAG LABEL
Mono
0.8rem / JetBrains Mono
--primary: oklch(0.6223 0.2372 16.47);
Foundation · 03

Spacing & Grid System

All spacing is based on a --spacing: 0.25rem (4px) base unit. Use calc(var(--spacing) * N) for any spacing value. The layout uses a fluid CSS Grid with a 13.5rem fixed sidebar.

Spacing Scale

×10.25rem · 4px
×20.5rem · 8px
×30.75rem · 12px
×41rem · 16px
×51.25rem · 20px
×61.5rem · 24px — default section padding
×82rem · 32px
×102.5rem · 40px
×123rem · 48px — content padding
×164rem · 64px
×205rem · 80px

Grid System

The dashboard uses three primary grid patterns. All grids use minmax(0, ...) to prevent overflow.

4-column stat grid
grid-template-columns: repeat(4, minmax(0, 1fr))
2-column chart + sidebar (1fr + 22rem)
grid-template-columns: minmax(0, 1fr) minmax(0, 22rem)
2-column activity + projects (1fr + 20rem)
grid-template-columns: minmax(0, 1fr) minmax(0, 20rem)
Foundation · 04

Elevation & Shadow System

Seven elevation levels using layered box-shadows. Shadows automatically become deeper in dark mode. Use the smallest appropriate shadow to maintain visual hierarchy.

shadow-2xs
Subtle — tooltips
shadow-xs
Minimal — badges
shadow-sm
Default — cards
shadow-md
Hover state
shadow-lg
Dropdowns
shadow-xl
Popovers
shadow-2xl
Modals
Foundation · 05

Border Radius System

Radii are derived from a single --radius: 0.75rem base. All values scale consistently when the base is changed.

None
2px
sm
calc(0.75rem - 4px)
md
calc(0.75rem - 2px)
lg
0.75rem (base)
xl
calc(0.75rem + 4px)
full
9999px
Foundation · 06

Interaction States

All interactive elements implement six standard states. Transitions use 150ms ease as the base timing. Focus rings use a 3px offset with 15% opacity ring color.

Button States

Input States

This field is required
Foundation · 07

Accessibility Standards

All components are designed to meet WCAG 2.1 AA compliance. Key principles: sufficient contrast, keyboard navigability, ARIA labelling, and no reliance on color alone to convey meaning.

🎨
Color Contrast
Primary text on background meets 4.5:1 (AA). Primary buttons (white on --primary) meet 3:1 for large text. All status colors have paired foreground tokens to ensure legibility.
⌨️
Keyboard Navigation
All interactive elements are reachable via Tab. Focus rings use a visible 2px outline with 2px offset. No focus traps outside of modals. Escape closes modals and dropdowns.
🏷️
ARIA Labelling
Icon-only buttons must include aria-label. Form inputs must have associated <label> elements. Status messages use role="alert" for screen readers.
🔤
Text Sizing
Base font-size is 16px. No text is set below 0.65rem (10.4px) in production contexts. Users can resize text to 200% without loss of content or functionality.
🎯
Touch Targets
All interactive elements maintain a minimum touch target of 44×44px per WCAG 2.5.5. Icon buttons use padding to reach this minimum while keeping visual size smaller.
🚦
Status Indicators
Status is never conveyed by color alone. Badges and alerts include an icon or text label alongside color coding. Disabled states reduce opacity and are excluded from the tab order.

Contrast Ratios

Foreground on Background
~14:1 ratio
AAA
White on Primary
~4.1:1 ratio
AA Large
Muted fg on Background
~5.5:1 ratio
AA
Icons · 01

Navigation Icons

24×24px viewBox, 2px stroke-width, stroke-linecap: round, stroke-linejoin: round. All icons are inline SVG — no icon font dependency.

Dashboard
Customers
Projects
Tasks
Leads
Sales
Purchasing
Inventory
Proposals
Contracts
Support
Reports
Icons · 02

CRM Feature Icons

Contact
Lead Call
Deal Edit
Task Due
Add Contact
Schedule
Pipeline
Automation
Campaign
Invoice
Analytics
Priority
Icons · 03

System & Action Icons

Search
Notifications
Settings
Add
Close
Check
Chevron Right
Chevron Down
Edit
Delete
Upload
Download
Share
Info
Warning
Error
Success
More
Components · 01

Buttons

Buttons come in 6 variants, 5 sizes, and support icon-only, loading, and disabled states. All use .btn as base with modifier classes.

Variants

Sizes

With Icons + Icon-only

Components · 02

Inputs & Forms

Enter the contact's full name.

Checkboxes, Radios & Toggles

Components · 03

Badges & Tags

Primary Secondary Success Warning Error Info Muted Outline Solid Primary Solid Secondary Active Overdue In Progress Pending
Components · 04

Alerts & Notifications

Sync in progress
Your CRM data is being synced from Salesforce. This may take a few minutes.
Lead converted successfully
Acme Corp has been moved to the Customers pipeline.
Invoice overdue
27 invoices totalling $1.18M are past due date. Review immediately.
Connection failed
Unable to reach the payment gateway. Check your API credentials and try again.
Components · 05

Cards

Active Deals
Current pipeline value
$454,750
↑ 12% from last month
Open Tickets
1
Last updated 2 hours ago
LM
Liz Mwangi
Sales Manager
+254 712 345 678
Components · 06

Tables & Data Grids

Contact Company Status Deal Value Last Activity Actions
LM
Liz Mwangi
Acme Corp Active $45,000 6 hours ago
KO
Kofi Osei
TechGH Ltd In Progress $120,000 2 days ago
AN
Amara Nwosu
Lagos BI Pending $8,500 1 week ago
Components · 08

Modals, Sheets & Dialogs

Centered modals for focused tasks, sheet overlays that slide in from any edge for contextual panels, tooltips for inline hints, and popovers for action menus.

Centered Modal

This action cannot be undone

Sheet Modals

Sheets slide in from an edge and are ideal for detail panels, filters, forms, and navigation drawers. All four directions are supported.

Contact Details

Right sheets are used for detail panels, settings drawers, and record editors — content that lives alongside the main view.

Navigation Menu

Left sheets are ideal for navigation drawers and mobile sidebar menus.

Filter Results

Bottom sheets are great for mobile-first filter panels, action menus, and quick pickers.

Global Search

Top sheets suit command palettes, global search, and system notifications.

Components · 09

Charts & Data Visualization

Built with ApexCharts — the best vanilla-JS chart library for HTML/CSS/JS projects. All charts consume colors directly from CSS custom properties so they automatically adapt to light and dark mode.

Line Chart — Income vs Expenses

Area Chart — Monthly Revenue

Bar Chart — Leads by Source

Donut & Radial Charts

Heatmap — Activity by Day & Hour

Components · 09

Loading States

Spinners

Skeleton Screens

Components · 10

Empty States

No contacts yet
Add your first contact to start building your customer pipeline.
Pipeline is empty
No deals are currently active. Import from an existing source or create one manually.
Components · 11

Avatars

XS
SM
MD
LG
XL
Sizes: xs · sm · md · lg · xl
LM
KO
AN
+4
Avatar group