- Updated `pnpm-workspace.yaml` to force patch for `cookie` package to address GHSA-pxg6-pf52-xh8x vulnerability. - Modified `vitest.config.js` to set `maxWorkers` to '50%' for improved test performance. - Bumped version in `pubspec.yaml` from 1.2.1+12 to 1.9.0+13 for mobile application.
1075 lines
38 KiB
Markdown
1075 lines
38 KiB
Markdown
# CRM Design System: Style Guide
|
||
|
||
> Version 1.2 | Last Updated: December 2024
|
||
|
||
A comprehensive design system reference for building consistent, accessible, and modern CRM interfaces.
|
||
|
||
---
|
||
|
||
## Table of Contents
|
||
|
||
1. [Design Principles](#design-principles)
|
||
2. [Color System](#color-system)
|
||
3. [CRM-Specific Colors](#crm-specific-colors)
|
||
4. [Data Visualization](#data-visualization)
|
||
5. [Kanban Board Specs](#kanban-board-specs)
|
||
6. [Activity Timeline](#activity-timeline)
|
||
7. [Typography](#typography)
|
||
8. [Spacing & Layout](#spacing--layout)
|
||
9. [Border Radius](#border-radius)
|
||
10. [Elevation & Shadows](#elevation--shadows)
|
||
11. [Components](#components)
|
||
12. [Icons](#icons)
|
||
13. [Grid & Breakpoints](#grid--breakpoints)
|
||
14. [CSS Variables Reference](#css-variables-reference)
|
||
|
||
---
|
||
|
||
## Design Principles
|
||
|
||
1. **Clarity First**: Every element should serve a purpose. Remove visual clutter.
|
||
2. **Data-Driven**: Prioritize readability of data in tables, lists, and cards.
|
||
3. **Consistent Rhythm**: Use the 8px grid system for all spacing decisions.
|
||
4. **Accessible**: WCAG 2.0 AA compliant color contrast and interactions.
|
||
5. **Theme-Ready**: Semantic tokens enable light/dark mode switching.
|
||
|
||
---
|
||
|
||
## Color System
|
||
|
||
### Token Architecture
|
||
|
||
We use a **three-layer token system**:
|
||
|
||
```
|
||
Base Layer (Primitives) → Semantic Layer (Purpose) → Component Layer (Usage)
|
||
```
|
||
|
||
### Brand Colors
|
||
|
||
| Token | Hex | RGB | Usage |
|
||
| --------------------- | ------- | ------------- | ----------------------------------- |
|
||
| --color-brand-primary | #EA580C | 234, 88, 12 | Primary actions, CTAs, brand accent |
|
||
| --color-brand-dark | #404346 | 64, 67, 70 | Primary text, dark UI elements |
|
||
| --color-brand-white | #FFFFFF | 255, 255, 255 | Backgrounds, cards, surfaces |
|
||
|
||
### Neutral Palette
|
||
|
||
| Token | Hex | Usage |
|
||
| ---------------- | ------- | ---------------------------------- |
|
||
| --color-grey-50 | #FAFAFA | Subtle backgrounds |
|
||
| --color-grey-100 | #F5F5F5 | Hover states, zebra stripes |
|
||
| --color-grey-200 | #EEEEEE | Subtle dividers, table rows |
|
||
| --color-grey-300 | #E0E0E0 | Default borders (--border-default) |
|
||
| --color-grey-400 | #BDBDBD | Placeholder text |
|
||
| --color-grey-500 | #9E9E9E | Secondary icons |
|
||
| --color-grey-600 | #757575 | Secondary text |
|
||
| --color-grey-700 | #616161 | Body text |
|
||
| --color-grey-800 | #424242 | Headings |
|
||
| --color-grey-900 | #212121 | Primary text |
|
||
|
||
### Semantic Colors
|
||
|
||
| Category | Token | Hex | Usage |
|
||
| ------------------ | ------------------------ | ------- | --------------------------------- |
|
||
| **Primary** | --color-primary-default | #EA580C | Primary buttons, links |
|
||
| | --color-primary-hover | #C2410C | Primary hover state |
|
||
| | --color-primary-active | #9A3412 | Primary active/pressed |
|
||
| | --color-primary-light | #FFF7ED | Primary backgrounds |
|
||
| **Negative/Error** | --color-negative-default | #DC3545 | Error states, destructive actions |
|
||
| | --color-negative-hover | #C82333 | Error hover |
|
||
| | --color-negative-light | #FDEAEA | Error backgrounds |
|
||
| **Warning** | --color-warning-default | #FFC107 | Warning states |
|
||
| | --color-warning-dark | #E0A800 | Warning text on light bg |
|
||
| | --color-warning-light | #FFF8E1 | Warning backgrounds |
|
||
| **Success** | --color-success-default | #28A745 | Success states |
|
||
| | --color-success-light | #E8F5E9 | Success backgrounds |
|
||
| **Info** | --color-info-default | #17A2B8 | Informational states |
|
||
| | --color-info-light | #E3F2FD | Info backgrounds |
|
||
|
||
### Surface Colors
|
||
|
||
| Token | Light Mode | Dark Mode | Usage |
|
||
| ----------------- | ---------- | --------- | ------------------------ |
|
||
| --surface-default | #FFFFFF | #1E1E1E | Main background |
|
||
| --surface-raised | #FFFFFF | #252525 | Cards, elevated elements |
|
||
| --surface-sunken | #F5F5F5 | #141414 | Inset areas, sidebars |
|
||
| --surface-overlay | #FFFFFF | #2D2D2D | Modals, dropdowns |
|
||
|
||
### Text Colors
|
||
|
||
| Token | Light Mode | Dark Mode | Usage |
|
||
| ---------------- | ---------- | --------- | --------------------------- |
|
||
| --text-primary | #212121 | #FFFFFF | Headings, primary content |
|
||
| --text-secondary | #616161 | #B0B0B0 | Descriptions, metadata |
|
||
| --text-tertiary | #9E9E9E | #757575 | Placeholders, hints |
|
||
| --text-disabled | #BDBDBD | #525252 | Disabled states |
|
||
| --text-inverse | #FFFFFF | #212121 | Text on colored backgrounds |
|
||
| --text-link | #EA580C | #FB923C | Links |
|
||
| --text-error | #DC3545 | #F87171 | Error messages |
|
||
|
||
### Border Colors
|
||
|
||
| Token | Light Mode | Dark Mode | Usage |
|
||
| ---------------- | ---------- | --------- | ------------------- |
|
||
| --border-default | #E0E0E0 | #3D3D3D | Default borders |
|
||
| --border-strong | #BDBDBD | #525252 | Emphasized borders |
|
||
| --border-focus | #EA580C | #FB923C | Focus rings |
|
||
| --border-error | #DC3545 | #F87171 | Error state borders |
|
||
|
||
---
|
||
|
||
## CRM-Specific Colors
|
||
|
||
### Pipeline Stage Colors
|
||
|
||
| Token | Hex | Usage |
|
||
| ------------------- | ------- | -------------------- |
|
||
| --stage-new | #EA580C | New/Incoming leads |
|
||
| --stage-contacted | #F97316 | Initial contact made |
|
||
| --stage-qualified | #3B82F6 | Lead qualified |
|
||
| --stage-proposal | #8B5CF6 | Proposal sent |
|
||
| --stage-negotiation | #F59E0B | In negotiation |
|
||
| --stage-won | #22C55E | Deal closed won |
|
||
| --stage-lost | #EF4444 | Deal closed lost |
|
||
|
||
### Pipeline Stage Backgrounds (Kanban columns)
|
||
|
||
| Token | Hex | Usage |
|
||
| ---------------------- | ------- | ------------------ |
|
||
| --stage-new-bg | #FFF7ED | New column |
|
||
| --stage-contacted-bg | #FFEDD5 | Contacted column |
|
||
| --stage-qualified-bg | #EFF6FF | Qualified column |
|
||
| --stage-proposal-bg | #F5F3FF | Proposal column |
|
||
| --stage-negotiation-bg | #FFFBEB | Negotiation column |
|
||
| --stage-won-bg | #F0FDF4 | Won column |
|
||
| --stage-lost-bg | #FEF2F2 | Lost column |
|
||
|
||
### Activity Type Colors
|
||
|
||
| Token | Hex | Icon | Usage |
|
||
| ------------------- | ------- | -------- | ------------ |
|
||
| --activity-call | #22C55E | Phone | Phone calls |
|
||
| --activity-email | #3B82F6 | Mail | Emails |
|
||
| --activity-meeting | #8B5CF6 | Calendar | Meetings |
|
||
| --activity-task | #F59E0B | Check | Tasks/To-dos |
|
||
| --activity-note | #6B7280 | FileText | Notes |
|
||
| --activity-deadline | #EF4444 | Clock | Deadlines |
|
||
|
||
### Lead Temperature
|
||
|
||
| Token | Hex | Usage |
|
||
| ----------- | ------- | ------------------------ |
|
||
| --lead-hot | #EF4444 | Hot lead (high intent) |
|
||
| --lead-warm | #F59E0B | Warm lead (engaged) |
|
||
| --lead-cold | #6B7280 | Cold lead (low activity) |
|
||
|
||
### Lead Temperature Backgrounds
|
||
|
||
| Token | Hex | Usage |
|
||
| -------------- | ------- | ------------------ |
|
||
| --lead-hot-bg | #FEF2F2 | Hot lead badge/tag |
|
||
| --lead-warm-bg | #FFFBEB | Warm lead badge |
|
||
| --lead-cold-bg | #F3F4F6 | Cold lead badge |
|
||
|
||
### Priority Levels
|
||
|
||
| Token | Hex | Usage |
|
||
| ----------------- | ------- | --------------- |
|
||
| --priority-urgent | #DC2626 | Urgent priority |
|
||
| --priority-high | #F97316 | High priority |
|
||
| --priority-medium | #FBBF24 | Medium priority |
|
||
| --priority-low | #22C55E | Low priority |
|
||
| --priority-none | #9CA3AF | No priority set |
|
||
|
||
### Deal Health / Probability
|
||
|
||
| Token | Hex | Usage |
|
||
| ------------------ | ------- | ------------------------- |
|
||
| --probability-high | #22C55E | 70-100% close probability |
|
||
| --probability-mid | #F59E0B | 40-69% probability |
|
||
| --probability-low | #EF4444 | 0-39% probability |
|
||
|
||
### Task Status
|
||
|
||
| Token | Hex | Usage |
|
||
| ---------------- | ------- | ------------- |
|
||
| --task-overdue | #EF4444 | Past due date |
|
||
| --task-due-today | #F59E0B | Due today |
|
||
| --task-upcoming | #3B82F6 | Due in future |
|
||
| --task-completed | #22C55E | Completed |
|
||
| --task-cancelled | #9CA3AF | Cancelled |
|
||
|
||
### Task Status Backgrounds
|
||
|
||
| Token | Hex | Usage |
|
||
| ------------------- | ------- | -------------------- |
|
||
| --task-overdue-bg | #FEF2F2 | Overdue task badge |
|
||
| --task-due-today-bg | #FFFBEB | Due today badge |
|
||
| --task-upcoming-bg | #EFF6FF | Upcoming task badge |
|
||
| --task-completed-bg | #F0FDF4 | Completed task badge |
|
||
| --task-cancelled-bg | #F3F4F6 | Cancelled task badge |
|
||
|
||
---
|
||
|
||
## Data Visualization
|
||
|
||
### Chart Color Palette (Sequential)
|
||
|
||
For single-metric charts and gradients:
|
||
|
||
| Token | Hex | Usage |
|
||
| --------- | ------- | -------------- |
|
||
| --chart-1 | #EA580C | Primary series |
|
||
| --chart-2 | #F97316 | Secondary |
|
||
| --chart-3 | #FB923C | Tertiary |
|
||
| --chart-4 | #FDBA74 | Fourth |
|
||
| --chart-5 | #FED7AA | Fifth |
|
||
|
||
### Chart Color Palette (Categorical)
|
||
|
||
For multi-metric/comparison charts:
|
||
|
||
| Token | Hex | Usage |
|
||
| ------- | ------- | ------------------- |
|
||
| --cat-1 | #EA580C | Category 1 (Orange) |
|
||
| --cat-2 | #3B82F6 | Category 2 (Blue) |
|
||
| --cat-3 | #22C55E | Category 3 (Green) |
|
||
| --cat-4 | #8B5CF6 | Category 4 (Purple) |
|
||
| --cat-5 | #EC4899 | Category 5 (Pink) |
|
||
| --cat-6 | #14B8A6 | Category 6 (Teal) |
|
||
|
||
### Progress Bar Colors
|
||
|
||
| Token | Hex | Usage |
|
||
| ------------------ | ------- | ----------------- |
|
||
| --progress-default | #EA580C | Standard progress |
|
||
| --progress-success | #22C55E | Goal achieved |
|
||
| --progress-warning | #F59E0B | Behind target |
|
||
| --progress-danger | #EF4444 | Critical/at risk |
|
||
| --progress-bg | #E5E7EB | Progress track |
|
||
|
||
---
|
||
|
||
## Kanban Board Specs
|
||
|
||
| Property | Value |
|
||
| -------------------- | ------------------------- |
|
||
| Column Width | 280px - 320px |
|
||
| Column Gap | 12px |
|
||
| Card Gap | 8px |
|
||
| Column Header Height | 48px |
|
||
| Card Min Height | 80px |
|
||
| Card Padding | 12px |
|
||
| Card Border Radius | --radius-lg (8px) |
|
||
| Column Border Radius | --radius-lg (8px) |
|
||
| Drop Zone Highlight | 2px dashed --border-focus |
|
||
| Drag Shadow | --shadow-lg |
|
||
|
||
---
|
||
|
||
## Activity Timeline
|
||
|
||
| Property | Value |
|
||
| ------------------- | -------------------------- |
|
||
| Timeline Line Width | 2px |
|
||
| Timeline Line Color | --border-default |
|
||
| Node Size | 32px |
|
||
| Node Border | 2px solid (activity color) |
|
||
| Node Background | --surface-default |
|
||
| Entry Gap | 16px |
|
||
| Content Offset | 48px from timeline |
|
||
|
||
---
|
||
|
||
## Typography
|
||
|
||
### Font Stack
|
||
|
||
Geist font from google fonts
|
||
|
||
```css
|
||
--font-family-sans: "Geist", -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto,
|
||
sans-serif;
|
||
--font-family-mono: "Geist Mono", "SF Mono", "Fira Code", Consolas, monospace;
|
||
```
|
||
|
||
### Type Scale
|
||
|
||
| Token | Size | Weight | Line Height | Letter Spacing | Usage |
|
||
| --------------- | ---- | ------ | ----------- | -------------- | --------------------- |
|
||
| --text-display | 40px | 700 | 1.2 | -0.02em | Hero sections |
|
||
| --text-h1 | 32px | 600 | 1.25 | -0.01em | Page titles |
|
||
| --text-h2 | 24px | 600 | 1.3 | -0.01em | Section headers |
|
||
| --text-h3 | 20px | 600 | 1.35 | 0 | Subsection headers |
|
||
| --text-h4 | 16px | 600 | 1.4 | 0 | Card titles |
|
||
| --text-h5 | 14px | 600 | 1.4 | 0 | Small headers |
|
||
| --text-body-lg | 16px | 400 | 1.5 | 0 | Primary body text |
|
||
| --text-body | 14px | 400 | 1.5 | 0 | Default body text |
|
||
| --text-body-sm | 13px | 400 | 1.45 | 0 | Secondary body text |
|
||
| --text-caption | 12px | 400 | 1.4 | 0.01em | Captions, metadata |
|
||
| --text-label | 12px | 500 | 1.3 | 0.02em | Form labels, badges |
|
||
| --text-overline | 11px | 600 | 1.4 | 0.08em | Overlines (uppercase) |
|
||
|
||
### Font Weights
|
||
|
||
| Token | Value | Usage |
|
||
| ---------------------- | ----- | ----------------------- |
|
||
| --font-weight-regular | 400 | Body text, descriptions |
|
||
| --font-weight-medium | 500 | Labels, emphasis |
|
||
| --font-weight-semibold | 600 | Headings, buttons |
|
||
| --font-weight-bold | 700 | Strong emphasis |
|
||
|
||
### Usage Guidelines
|
||
|
||
- **Body text**: 14px for dense UI, 16px for reading-focused areas
|
||
- **Minimum size**: 12px (never go below for accessibility)
|
||
- **Line length**: 60-80 characters maximum for readability
|
||
- **Paragraph spacing**: Use `--space-300` (24px) between paragraphs
|
||
|
||
---
|
||
|
||
## Spacing & Layout
|
||
|
||
### Base Unit
|
||
|
||
All spacing is based on an **8px grid system**.
|
||
|
||
### Spacing Scale
|
||
|
||
| Token | Value | Usage |
|
||
| ------------ | ----- | -------------------------- |
|
||
| --space-0 | 0px | No spacing |
|
||
| --space-25 | 2px | Micro adjustments, borders |
|
||
| --space-50 | 4px | Tight spacing, icon gaps |
|
||
| --space-100 | 8px | Base unit, compact layouts |
|
||
| --space-150 | 12px | Default internal padding |
|
||
| --space-200 | 16px | Component padding, gaps |
|
||
| --space-250 | 20px | Medium spacing |
|
||
| --space-300 | 24px | Section padding |
|
||
| --space-400 | 32px | Section margins |
|
||
| --space-500 | 40px | Large component spacing |
|
||
| --space-600 | 48px | Page sections |
|
||
| --space-700 | 56px | Large section gaps |
|
||
| --space-800 | 64px | Major section breaks |
|
||
| --space-900 | 72px | Extra-large spacing |
|
||
| --space-1000 | 80px | Page-level spacing |
|
||
|
||
### Spacing Usage Guide
|
||
|
||
| Context | Recommended Tokens |
|
||
| --------------------------- | ------------------------------------ |
|
||
| Icon to text gap | --space-50 to --space-100 (4-8px) |
|
||
| Button padding (horizontal) | --space-200 to --space-300 (16-24px) |
|
||
| Button padding (vertical) | --space-100 to --space-150 (8-12px) |
|
||
| Card internal padding | --space-200 to --space-300 (16-24px) |
|
||
| Form field gap | --space-200 (16px) |
|
||
| Section gap | --space-400 to --space-600 (32-48px) |
|
||
| Page margins | --space-300 to --space-400 (24-32px) |
|
||
|
||
---
|
||
|
||
## Border Radius
|
||
|
||
| Token | Value | Usage |
|
||
| ------------- | ------ | --------------------- |
|
||
| --radius-none | 0px | Sharp corners |
|
||
| --radius-xs | 2px | Subtle rounding |
|
||
| --radius-sm | 4px | Inputs, small buttons |
|
||
| --radius-md | 6px | Buttons, dropdowns |
|
||
| --radius-lg | 8px | Cards, containers |
|
||
| --radius-xl | 12px | Modals, large cards |
|
||
| --radius-2xl | 16px | Large containers |
|
||
| --radius-full | 9999px | Pills, avatars, tags |
|
||
|
||
### Usage by Component
|
||
|
||
| Component | Radius Token |
|
||
| ------------ | ------------------ |
|
||
| Buttons | --radius-md (6px) |
|
||
| Input fields | --radius-sm (4px) |
|
||
| Cards | --radius-lg (8px) |
|
||
| Modals | --radius-xl (12px) |
|
||
| Avatars | --radius-full |
|
||
| Tags/Badges | --radius-full |
|
||
| Tooltips | --radius-sm (4px) |
|
||
| Dropdowns | --radius-md (6px) |
|
||
|
||
---
|
||
|
||
## Elevation & Shadows
|
||
|
||
### Shadow Scale
|
||
|
||
| Token | Value | Usage |
|
||
| ------------- | ---------------------------------------------------------- | ------------------------ |
|
||
| --shadow-none | none | Flat elements |
|
||
| --shadow-xs | 0 1px 2px rgba(0,0,0,0.04) | Subtle lift |
|
||
| --shadow-sm | 0 1px 3px rgba(0,0,0,0.06), 0 1px 2px rgba(0,0,0,0.04) | Cards (resting) |
|
||
| --shadow-md | 0 4px 6px rgba(0,0,0,0.07), 0 2px 4px rgba(0,0,0,0.05) | Cards (hover), dropdowns |
|
||
| --shadow-lg | 0 10px 15px rgba(0,0,0,0.08), 0 4px 6px rgba(0,0,0,0.05) | Modals, popovers |
|
||
| --shadow-xl | 0 20px 25px rgba(0,0,0,0.10), 0 10px 10px rgba(0,0,0,0.04) | Full overlays |
|
||
|
||
### Elevation Levels
|
||
|
||
| Level | Shadow Token | Z-Index | Usage |
|
||
| -------- | ------------- | ------- | ------------------- |
|
||
| Base | --shadow-none | 0 | Page background |
|
||
| Raised | --shadow-sm | 10 | Cards, sections |
|
||
| Dropdown | --shadow-md | 100 | Dropdowns, tooltips |
|
||
| Sticky | --shadow-md | 200 | Sticky headers |
|
||
| Modal | --shadow-lg | 300 | Modals, dialogs |
|
||
| Overlay | --shadow-xl | 400 | Full overlays |
|
||
| Toast | --shadow-lg | 500 | Notifications |
|
||
|
||
### Focus Ring
|
||
|
||
```css
|
||
--focus-ring: 0 0 0 2px var(--surface-default), 0 0 0 4px var(--color-primary-default);
|
||
```
|
||
|
||
---
|
||
|
||
## Components
|
||
|
||
### Buttons
|
||
|
||
#### Variants
|
||
|
||
| Variant | Background | Text | Border | Usage |
|
||
| --------------- | ------------------------ | ----------------------- | ----------------------- | ------------------- |
|
||
| **Primary** | --color-primary-default | --text-inverse | none | Main actions |
|
||
| **Secondary** | transparent | --color-primary-default | --color-primary-default | Alternative actions |
|
||
| **Tertiary** | transparent | --text-secondary | none | Low emphasis |
|
||
| **Destructive** | --color-negative-default | --text-inverse | none | Dangerous actions |
|
||
| **Ghost** | transparent | --text-primary | none | Minimal UI |
|
||
|
||
#### Sizes
|
||
|
||
| Size | Height | Padding (H) | Font Size | Icon Size |
|
||
| ------ | ------ | ----------- | --------- | --------- |
|
||
| **XS** | 24px | 8px | 11px | 14px |
|
||
| **SM** | 28px | 12px | 12px | 16px |
|
||
| **MD** | 36px | 16px | 14px | 18px |
|
||
| **LG** | 44px | 20px | 16px | 20px |
|
||
| **XL** | 52px | 24px | 18px | 24px |
|
||
|
||
#### States
|
||
|
||
| State | Opacity/Change |
|
||
| -------- | ----------------------- |
|
||
| Default | 100% |
|
||
| Hover | Darken 8% or overlay |
|
||
| Active | Darken 12% |
|
||
| Disabled | 50% opacity, no pointer |
|
||
| Loading | Show spinner, disable |
|
||
|
||
#### Button Specs
|
||
|
||
```css
|
||
.btn {
|
||
font-weight: 600;
|
||
border-radius: var(--radius-md);
|
||
transition: all 150ms ease;
|
||
cursor: pointer;
|
||
display: inline-flex;
|
||
align-items: center;
|
||
justify-content: center;
|
||
gap: var(--space-100);
|
||
}
|
||
```
|
||
|
||
---
|
||
|
||
### Input Fields
|
||
|
||
#### Anatomy
|
||
|
||
```
|
||
┌─────────────────────────────────────┐
|
||
│ Label * (Helper) │
|
||
├─────────────────────────────────────┤
|
||
│ [Icon] Placeholder text [Icon] │
|
||
├─────────────────────────────────────┤
|
||
│ Helper text or error message │
|
||
└─────────────────────────────────────┘
|
||
```
|
||
|
||
#### Specifications
|
||
|
||
| Property | Value |
|
||
| ---------------- | -------------------------------------------- |
|
||
| Height | 40px (default), 36px (compact), 48px (large) |
|
||
| Padding | 12px horizontal, centered vertical |
|
||
| Border | 1px solid --border-default |
|
||
| Border Radius | --radius-sm (4px) |
|
||
| Font Size | 14px |
|
||
| Label Font Size | 12px |
|
||
| Helper Font Size | 12px |
|
||
|
||
#### States
|
||
|
||
| State | Border Color | Background |
|
||
| --------- | -------------------- | ---------------------- |
|
||
| Default | --border-default | --surface-default |
|
||
| Hover | --border-strong | --surface-default |
|
||
| Focus | --border-focus (2px) | --surface-default |
|
||
| Error | --border-error | --color-negative-light |
|
||
| Disabled | --border-default | --surface-sunken |
|
||
| Read-only | --border-default | --surface-sunken |
|
||
|
||
---
|
||
|
||
### Cards
|
||
|
||
#### Specifications
|
||
|
||
| Property | Value |
|
||
| ---------------- | ------------------------------------- |
|
||
| Background | --surface-raised |
|
||
| Border | 1px solid --border-default (optional) |
|
||
| Border Radius | --radius-lg (8px) |
|
||
| Padding | --space-200 to --space-300 (16-24px) |
|
||
| Shadow (resting) | --shadow-sm |
|
||
| Shadow (hover) | --shadow-md |
|
||
|
||
#### Card Types
|
||
|
||
| Type | Description | Shadow |
|
||
| --------------- | ---------------------- | ------------------------- |
|
||
| **Flat** | Border only, no shadow | --shadow-none |
|
||
| **Elevated** | Subtle lift | --shadow-sm |
|
||
| **Interactive** | Hover lift | --shadow-sm → --shadow-md |
|
||
|
||
---
|
||
|
||
### Modals / Dialogs
|
||
|
||
#### Size Presets
|
||
|
||
| Size | Width | Max Height | Usage |
|
||
| -------- | ----------- | ----------- | ----------------------- |
|
||
| **SM** | 400px | 80vh | Confirmations, alerts |
|
||
| **MD** | 560px | 80vh | Forms, standard content |
|
||
| **LG** | 720px | 85vh | Complex forms |
|
||
| **XL** | 900px | 90vh | Data-heavy content |
|
||
| **Full** | 100% - 48px | 100% - 48px | Wizards, editors |
|
||
|
||
#### Specifications
|
||
|
||
| Property | Value |
|
||
| ------------------ | -------------------------- |
|
||
| Border Radius | --radius-xl (12px) |
|
||
| Padding (Header) | --space-200 to --space-300 |
|
||
| Padding (Body) | --space-300 |
|
||
| Padding (Footer) | --space-200 to --space-300 |
|
||
| Shadow | --shadow-lg |
|
||
| Overlay Background | rgba(0, 0, 0, 0.5) |
|
||
|
||
#### Structure
|
||
|
||
```
|
||
┌─────────────────────────────────────┐
|
||
│ Header [×] │
|
||
├─────────────────────────────────────┤
|
||
│ │
|
||
│ Body content │
|
||
│ │
|
||
├─────────────────────────────────────┤
|
||
│ [Secondary] [Primary] │
|
||
└─────────────────────────────────────┘
|
||
```
|
||
|
||
---
|
||
|
||
### Select / Dropdown
|
||
|
||
#### Specifications
|
||
|
||
| Property | Value |
|
||
| ---------------------- | -------------------- |
|
||
| Trigger Height | 40px (matches input) |
|
||
| Trigger Padding | 12px horizontal |
|
||
| Trigger Border Radius | --radius-sm (4px) |
|
||
| Dropdown Border Radius | --radius-md (6px) |
|
||
| Dropdown Shadow | --shadow-md |
|
||
| Item Height | 36px |
|
||
| Item Padding | 12px horizontal |
|
||
| Max Dropdown Height | 320px (scrollable) |
|
||
|
||
---
|
||
|
||
### Tables
|
||
|
||
#### Specifications
|
||
|
||
| Property | Value |
|
||
| ----------------- | -------------------------------------------------- |
|
||
| Header Height | 44px |
|
||
| Row Height | 52px (default), 40px (compact), 64px (comfortable) |
|
||
| Cell Padding | 16px horizontal, centered vertical |
|
||
| Border | 1px solid --border-default |
|
||
| Header Background | --surface-sunken |
|
||
| Row Background | --surface-default |
|
||
| Zebra Stripe | Alternating --surface-default / --surface-sunken |
|
||
| Hover Row | --color-grey-100 |
|
||
| Selected Row | --color-primary-light |
|
||
|
||
#### Column Widths
|
||
|
||
| Content Type | Min Width | Recommended |
|
||
| ------------ | --------- | ----------- |
|
||
| Checkbox | 48px | 48px |
|
||
| Avatar | 56px | 56px |
|
||
| Short text | 100px | 150px |
|
||
| Medium text | 150px | 200px |
|
||
| Long text | 200px | 300px |
|
||
| Actions | 80px | 120px |
|
||
|
||
---
|
||
|
||
### Tags / Badges
|
||
|
||
#### Sizes
|
||
|
||
| Size | Height | Padding (H) | Font Size | Border Radius |
|
||
| ------ | ------ | ----------- | --------- | ------------- |
|
||
| **SM** | 20px | 6px | 11px | --radius-full |
|
||
| **MD** | 24px | 8px | 12px | --radius-full |
|
||
| **LG** | 28px | 10px | 13px | --radius-full |
|
||
|
||
#### Variants
|
||
|
||
| Variant | Background | Text |
|
||
| ----------- | ---------------------- | ------------------------ |
|
||
| **Default** | --color-grey-200 | --text-primary |
|
||
| **Primary** | --color-primary-light | --color-primary-default |
|
||
| **Success** | --color-success-light | --color-success-default |
|
||
| **Warning** | --color-warning-light | --color-warning-dark |
|
||
| **Error** | --color-negative-light | --color-negative-default |
|
||
| **Info** | --color-info-light | --color-info-default |
|
||
|
||
---
|
||
|
||
### Avatars
|
||
|
||
#### Sizes
|
||
|
||
| Size | Dimensions | Font Size | Usage |
|
||
| ------- | ---------- | --------- | ----------------- |
|
||
| **XS** | 24px | 10px | Inline mentions |
|
||
| **SM** | 32px | 12px | Lists, compact UI |
|
||
| **MD** | 40px | 14px | Default, cards |
|
||
| **LG** | 56px | 20px | Profile headers |
|
||
| **XL** | 80px | 28px | Profile pages |
|
||
| **2XL** | 120px | 40px | Account settings |
|
||
|
||
#### Specifications
|
||
|
||
| Property | Value |
|
||
| --------------------- | --------------------------- |
|
||
| Border Radius | --radius-full (circle) |
|
||
| Background (fallback) | --color-grey-300 |
|
||
| Text Color (initials) | --text-primary |
|
||
| Border (optional) | 2px solid --surface-default |
|
||
|
||
---
|
||
|
||
### Toast / Snackbar
|
||
|
||
#### Specifications
|
||
|
||
| Property | Value |
|
||
| ------------- | -------------------------------------- |
|
||
| Min Width | 300px |
|
||
| Max Width | 500px |
|
||
| Padding | 12px 16px |
|
||
| Border Radius | --radius-md (6px) |
|
||
| Shadow | --shadow-lg |
|
||
| Position | Bottom-left, 24px from edges |
|
||
| Duration | 4000ms (default), 8000ms (with action) |
|
||
|
||
#### Variants
|
||
|
||
| Variant | Icon | Left Border |
|
||
| ----------- | ------- | ------------------------ |
|
||
| **Default** | Info | None |
|
||
| **Success** | Check | --color-success-default |
|
||
| **Warning** | Warning | --color-warning-default |
|
||
| **Error** | Error | --color-negative-default |
|
||
|
||
---
|
||
|
||
### Tooltips
|
||
|
||
#### Specifications
|
||
|
||
| Property | Value |
|
||
| ------------- | ----------------- |
|
||
| Max Width | 240px |
|
||
| Padding | 8px 12px |
|
||
| Border Radius | --radius-sm (4px) |
|
||
| Background | --color-grey-900 |
|
||
| Text Color | --text-inverse |
|
||
| Font Size | 12px |
|
||
| Shadow | --shadow-md |
|
||
| Arrow Size | 6px |
|
||
|
||
---
|
||
|
||
## Icons
|
||
|
||
### Style Guidelines
|
||
|
||
- **Style**: Line/outline icons (1.5px stroke weight)
|
||
- **Corners**: Rounded corners (2px radius on strokes)
|
||
- **Grid**: Designed on 24px grid with 2px padding
|
||
- **Consistency**: Uniform stroke weight across all icons
|
||
|
||
### Sizes
|
||
|
||
| Token | Size | Usage |
|
||
| ---------- | ---- | ---------------------- |
|
||
| --icon-xs | 12px | Inline with small text |
|
||
| --icon-sm | 16px | Buttons, form fields |
|
||
| --icon-md | 20px | Navigation, default |
|
||
| --icon-lg | 24px | Headers, emphasis |
|
||
| --icon-xl | 32px | Empty states |
|
||
| --icon-2xl | 48px | Illustrations |
|
||
|
||
### Icon Colors
|
||
|
||
| Context | Color Token |
|
||
| -------------- | ------------------------ |
|
||
| Default | --text-secondary |
|
||
| Interactive | --text-primary |
|
||
| Primary action | --color-primary-default |
|
||
| Success | --color-success-default |
|
||
| Warning | --color-warning-default |
|
||
| Error | --color-negative-default |
|
||
| Disabled | --text-disabled |
|
||
|
||
---
|
||
|
||
## Grid & Breakpoints
|
||
|
||
### Breakpoints
|
||
|
||
| Token | Width | Columns | Margin | Gutter |
|
||
| ---------------- | ----------- | ------- | ------ | ------ |
|
||
| --breakpoint-xs | 0-479px | 4 | 16px | 16px |
|
||
| --breakpoint-sm | 480-767px | 8 | 16px | 16px |
|
||
| --breakpoint-md | 768-1023px | 12 | 24px | 24px |
|
||
| --breakpoint-lg | 1024-1279px | 12 | 32px | 24px |
|
||
| --breakpoint-xl | 1280-1439px | 12 | 40px | 24px |
|
||
| --breakpoint-2xl | 1440px+ | 12 | auto | 24px |
|
||
|
||
### Container Widths
|
||
|
||
| Token | Max Width | Usage |
|
||
| ---------------- | --------- | ---------------- |
|
||
| --container-sm | 640px | Narrow content |
|
||
| --container-md | 768px | Forms, articles |
|
||
| --container-lg | 1024px | Standard content |
|
||
| --container-xl | 1280px | Wide content |
|
||
| --container-full | 100% | Full width |
|
||
|
||
### Layout Patterns
|
||
|
||
#### Sidebar Layout
|
||
|
||
```
|
||
┌────────────┬────────────────────────────┐
|
||
│ │ │
|
||
│ Sidebar │ Main Content │
|
||
│ (240px) │ (flex: 1) │
|
||
│ │ │
|
||
└────────────┴────────────────────────────┘
|
||
```
|
||
|
||
| Element | Width |
|
||
| ------------------- | --------------- |
|
||
| Sidebar (collapsed) | 64px |
|
||
| Sidebar (expanded) | 240px |
|
||
| Secondary panel | 320px - 400px |
|
||
| Main content | Remaining space |
|
||
|
||
---
|
||
|
||
## CSS Variables Reference
|
||
|
||
### Complete Token Export
|
||
|
||
```css
|
||
:root {
|
||
/* Colors - Brand */
|
||
--color-brand-primary: #ea580c;
|
||
--color-brand-dark: #404346;
|
||
--color-brand-white: #ffffff;
|
||
|
||
/* Colors - Primary */
|
||
--color-primary-default: #ea580c;
|
||
--color-primary-hover: #c2410c;
|
||
--color-primary-active: #9a3412;
|
||
--color-primary-light: #fff7ed;
|
||
|
||
/* Colors - Negative */
|
||
--color-negative-default: #dc3545;
|
||
--color-negative-hover: #c82333;
|
||
--color-negative-light: #fdeaea;
|
||
|
||
/* Colors - Warning */
|
||
--color-warning-default: #ffc107;
|
||
--color-warning-dark: #e0a800;
|
||
--color-warning-light: #fff8e1;
|
||
|
||
/* Colors - Success */
|
||
--color-success-default: #28a745;
|
||
--color-success-light: #e8f5e9;
|
||
|
||
/* Colors - Info */
|
||
--color-info-default: #17a2b8;
|
||
--color-info-light: #e3f2fd;
|
||
|
||
/* Colors - Grey Scale */
|
||
--color-grey-50: #fafafa;
|
||
--color-grey-100: #f5f5f5;
|
||
--color-grey-200: #eeeeee;
|
||
--color-grey-300: #e0e0e0;
|
||
--color-grey-400: #bdbdbd;
|
||
--color-grey-500: #9e9e9e;
|
||
--color-grey-600: #757575;
|
||
--color-grey-700: #616161;
|
||
--color-grey-800: #424242;
|
||
--color-grey-900: #212121;
|
||
|
||
/* Surface */
|
||
--surface-default: #ffffff;
|
||
--surface-raised: #ffffff;
|
||
--surface-sunken: #f5f5f5;
|
||
--surface-overlay: #ffffff;
|
||
|
||
/* Text */
|
||
--text-primary: #212121;
|
||
--text-secondary: #616161;
|
||
--text-tertiary: #9e9e9e;
|
||
--text-disabled: #bdbdbd;
|
||
--text-inverse: #ffffff;
|
||
--text-link: #ea580c;
|
||
--text-error: #dc3545;
|
||
|
||
/* Border */
|
||
--border-default: #e0e0e0;
|
||
--border-strong: #bdbdbd;
|
||
--border-focus: #ea580c;
|
||
--border-error: #dc3545;
|
||
|
||
/* Pipeline Stages */
|
||
--stage-new: #ea580c;
|
||
--stage-contacted: #f97316;
|
||
--stage-qualified: #3b82f6;
|
||
--stage-proposal: #8b5cf6;
|
||
--stage-negotiation: #f59e0b;
|
||
--stage-won: #22c55e;
|
||
--stage-lost: #ef4444;
|
||
|
||
/* Pipeline Stage Backgrounds */
|
||
--stage-new-bg: #fff7ed;
|
||
--stage-contacted-bg: #ffedd5;
|
||
--stage-qualified-bg: #eff6ff;
|
||
--stage-proposal-bg: #f5f3ff;
|
||
--stage-negotiation-bg: #fffbeb;
|
||
--stage-won-bg: #f0fdf4;
|
||
--stage-lost-bg: #fef2f2;
|
||
|
||
/* Activity Types */
|
||
--activity-call: #22c55e;
|
||
--activity-email: #3b82f6;
|
||
--activity-meeting: #8b5cf6;
|
||
--activity-task: #f59e0b;
|
||
--activity-note: #6b7280;
|
||
--activity-deadline: #ef4444;
|
||
|
||
/* Lead Temperature */
|
||
--lead-hot: #ef4444;
|
||
--lead-warm: #f59e0b;
|
||
--lead-cold: #6b7280;
|
||
|
||
/* Lead Temperature Backgrounds */
|
||
--lead-hot-bg: #fef2f2;
|
||
--lead-warm-bg: #fffbeb;
|
||
--lead-cold-bg: #f3f4f6;
|
||
|
||
/* Priority */
|
||
--priority-urgent: #dc2626;
|
||
--priority-high: #f97316;
|
||
--priority-medium: #fbbf24;
|
||
--priority-low: #22c55e;
|
||
--priority-none: #9ca3af;
|
||
|
||
/* Deal Probability */
|
||
--probability-high: #22c55e;
|
||
--probability-mid: #f59e0b;
|
||
--probability-low: #ef4444;
|
||
|
||
/* Task Status */
|
||
--task-overdue: #ef4444;
|
||
--task-due-today: #f59e0b;
|
||
--task-upcoming: #3b82f6;
|
||
--task-completed: #22c55e;
|
||
--task-cancelled: #9ca3af;
|
||
|
||
/* Task Status Backgrounds */
|
||
--task-overdue-bg: #fef2f2;
|
||
--task-due-today-bg: #fffbeb;
|
||
--task-upcoming-bg: #eff6ff;
|
||
--task-completed-bg: #f0fdf4;
|
||
--task-cancelled-bg: #f3f4f6;
|
||
|
||
/* Charts - Sequential */
|
||
--chart-1: #ea580c;
|
||
--chart-2: #f97316;
|
||
--chart-3: #fb923c;
|
||
--chart-4: #fdba74;
|
||
--chart-5: #fed7aa;
|
||
|
||
/* Charts - Categorical */
|
||
--cat-1: #ea580c;
|
||
--cat-2: #3b82f6;
|
||
--cat-3: #22c55e;
|
||
--cat-4: #8b5cf6;
|
||
--cat-5: #ec4899;
|
||
--cat-6: #14b8a6;
|
||
|
||
/* Progress */
|
||
--progress-default: #ea580c;
|
||
--progress-success: #22c55e;
|
||
--progress-warning: #f59e0b;
|
||
--progress-danger: #ef4444;
|
||
--progress-bg: #e5e7eb;
|
||
|
||
/* Typography */
|
||
--font-family-sans: "Geist", -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto,
|
||
sans-serif;
|
||
--font-family-mono: "Geist Mono", "SF Mono", "Fira Code", Consolas, monospace;
|
||
|
||
--font-weight-regular: 400;
|
||
--font-weight-medium: 500;
|
||
--font-weight-semibold: 600;
|
||
--font-weight-bold: 700;
|
||
|
||
/* Spacing */
|
||
--space-0: 0px;
|
||
--space-25: 2px;
|
||
--space-50: 4px;
|
||
--space-100: 8px;
|
||
--space-150: 12px;
|
||
--space-200: 16px;
|
||
--space-250: 20px;
|
||
--space-300: 24px;
|
||
--space-400: 32px;
|
||
--space-500: 40px;
|
||
--space-600: 48px;
|
||
--space-700: 56px;
|
||
--space-800: 64px;
|
||
--space-900: 72px;
|
||
--space-1000: 80px;
|
||
|
||
/* Border Radius */
|
||
--radius-none: 0px;
|
||
--radius-xs: 2px;
|
||
--radius-sm: 4px;
|
||
--radius-md: 6px;
|
||
--radius-lg: 8px;
|
||
--radius-xl: 12px;
|
||
--radius-2xl: 16px;
|
||
--radius-full: 9999px;
|
||
|
||
/* Shadows */
|
||
--shadow-none: none;
|
||
--shadow-xs: 0 1px 2px rgba(0, 0, 0, 0.04);
|
||
--shadow-sm: 0 1px 3px rgba(0, 0, 0, 0.06), 0 1px 2px rgba(0, 0, 0, 0.04);
|
||
--shadow-md: 0 4px 6px rgba(0, 0, 0, 0.07), 0 2px 4px rgba(0, 0, 0, 0.05);
|
||
--shadow-lg: 0 10px 15px rgba(0, 0, 0, 0.08), 0 4px 6px rgba(0, 0, 0, 0.05);
|
||
--shadow-xl: 0 20px 25px rgba(0, 0, 0, 0.1), 0 10px 10px rgba(0, 0, 0, 0.04);
|
||
|
||
/* Focus Ring */
|
||
--focus-ring: 0 0 0 2px var(--surface-default), 0 0 0 4px var(--color-primary-default);
|
||
|
||
/* Icon Sizes */
|
||
--icon-xs: 12px;
|
||
--icon-sm: 16px;
|
||
--icon-md: 20px;
|
||
--icon-lg: 24px;
|
||
--icon-xl: 32px;
|
||
--icon-2xl: 48px;
|
||
|
||
/* Z-Index Scale */
|
||
--z-base: 0;
|
||
--z-raised: 10;
|
||
--z-dropdown: 100;
|
||
--z-sticky: 200;
|
||
--z-modal: 300;
|
||
--z-overlay: 400;
|
||
--z-toast: 500;
|
||
|
||
/* Transitions */
|
||
--transition-fast: 100ms ease;
|
||
--transition-normal: 150ms ease;
|
||
--transition-slow: 300ms ease;
|
||
|
||
/* Breakpoints (for reference in JS) */
|
||
--breakpoint-xs: 0px;
|
||
--breakpoint-sm: 480px;
|
||
--breakpoint-md: 768px;
|
||
--breakpoint-lg: 1024px;
|
||
--breakpoint-xl: 1280px;
|
||
--breakpoint-2xl: 1440px;
|
||
|
||
/* Containers */
|
||
--container-sm: 640px;
|
||
--container-md: 768px;
|
||
--container-lg: 1024px;
|
||
--container-xl: 1280px;
|
||
}
|
||
|
||
/* Dark Mode Override */
|
||
[data-theme="dark"] {
|
||
--surface-default: #1e1e1e;
|
||
--surface-raised: #252525;
|
||
--surface-sunken: #141414;
|
||
--surface-overlay: #2d2d2d;
|
||
|
||
--text-primary: #ffffff;
|
||
--text-secondary: #b0b0b0;
|
||
--text-tertiary: #757575;
|
||
--text-disabled: #525252;
|
||
--text-inverse: #212121;
|
||
--text-link: #fb923c;
|
||
--text-error: #f87171;
|
||
|
||
--border-default: #3d3d3d;
|
||
--border-strong: #525252;
|
||
--border-focus: #fb923c;
|
||
--border-error: #f87171;
|
||
|
||
--color-primary-default: #fb923c;
|
||
--color-primary-hover: #fdba74;
|
||
--color-primary-active: #f97316;
|
||
--color-primary-light: #431407;
|
||
}
|
||
```
|
||
|
||
---
|
||
|
||
## Changelog
|
||
|
||
| Version | Date | Changes |
|
||
| ------- | -------- | ---------------------------------------------------------------------- |
|
||
| 1.2 | Dec 2024 | Fixed font import, added spacing tokens, fixed dark mode hover states |
|
||
| 1.1 | Dec 2024 | Orange primary color, CRM-specific tokens (pipeline, activities, etc.) |
|
||
| 1.0 | Dec 2024 | Initial release |
|
||
|
||
---
|
||
|
||
**Questions?** Contact the Design System team.
|