# Design System

Extracted from:
- your-instance.example.com/login

---

## Typography

### Font Family

```css
--font-primary: 'Inter', system-ui, sans-serif;
--font-mono: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;
```

### Font Sizes

| Token | Size | Usage |
|-------|------|-------|
| `--text-xs` | 10px | Badges, labels |
| `--text-sm` | 12px | Secondary text, captions |
| `--text-base` | 14px | Body text, buttons, inputs |
| `--text-md` | 16px | Default body |
| `--text-lg` | 18px | Subheadings |
| `--text-xl` | 24px | Page titles (H1) |
| `--text-2xl` | 30px | Large metrics, KPI values |

### Font Weights

| Token | Weight | Usage |
|-------|--------|-------|
| `--font-normal` | 400 | Body text |
| `--font-medium` | 500 | Buttons, tabs, labels |
| `--font-semibold` | 600 | Headings, emphasis |
| `--font-bold` | 700 | Strong emphasis, metrics |

### Heading Styles

```css
/* H1 - Page Title */
.h1 {
  font-size: 24px;
  font-weight: 600;
  color: var(--text-primary);
}

/* H2 - Section Title */
.h2 {
  font-size: 18px;
  font-weight: 600;
  color: var(--text-primary);
}

/* H3 - Subsection */
.h3 {
  font-size: 14px;
  font-weight: 600;
  color: var(--text-primary);
}
```

---

## Colors

### Primary Palette

| Token | Value | RGB | Usage |
|-------|-------|-----|-------|
| `--primary` | `#0073D1` | rgb(0, 115, 209) | Primary actions, links, active states |
| `--primary-light` | `rgba(0, 115, 209, 0.1)` | - | Primary hover backgrounds |

### Neutral Palette

| Token | Value | RGB | Usage |
|-------|-------|-----|-------|
| `--text-primary` | `#1A253C` | rgb(26, 37, 60) | Headings, primary text |
| `--text-secondary` | `#6B7280` | rgb(107, 114, 128) | Secondary text, placeholders |
| `--text-muted` | `rgba(107, 114, 128, 0.5)` | - | Disabled text |
| `--background` | `#F5F7FA` | rgb(245, 247, 250) | Page background |
| `--surface` | `#FFFFFF` | rgb(255, 255, 255) | Cards, modals |
| `--border` | `#E5E7EB` | rgb(229, 231, 235) | Borders, dividers |
| `--border-light` | `#F3F4F6` | rgb(243, 244, 246) | Subtle borders |

### Semantic Colors

| Token | Value | RGB | Usage |
|-------|-------|-----|-------|
| `--success` | `#10B77F` | rgb(16, 183, 127) | Positive values, growth |
| `--warning` | `#F59F0A` | rgb(245, 159, 10) | Warnings, attention |
| `--error` | `#EA580C` | rgb(234, 88, 12) | Errors, negative values |

### Color Usage Examples

```css
/* Positive trend */
.trend-positive {
  color: var(--success); /* #10B77F */
}

/* Negative trend */
.trend-negative {
  color: var(--error); /* #EA580C */
}

/* Warning alert */
.alert-warning {
  background: rgba(245, 159, 10, 0.1);
  border-left: 3px solid var(--warning);
}
```

---

## Spacing

### Base Scale

| Token | Value | Usage |
|-------|-------|-------|
| `--space-1` | 4px | Tight spacing |
| `--space-2` | 8px | Default gap |
| `--space-3` | 12px | Component padding |
| `--space-4` | 16px | Section spacing |
| `--space-5` | 20px | Card padding |
| `--space-6` | 24px | Large spacing |
| `--space-8` | 32px | Section gaps |

### Common Patterns

```css
/* Button padding */
.btn { padding: 0 12px; } /* 0px 12px */

/* Card padding */
.card { padding: 16px; }

/* Input padding */
.input { padding: 8px 16px; }

/* Sidebar width */
.sidebar { width: 224px; }
```

---

## Border Radius

| Token | Value | Usage |
|-------|-------|-------|
| `--radius-sm` | 4px | Small buttons, badges |
| `--radius-md` | 6px | Buttons, inputs, cards |
| `--radius-lg` | 8px | Large cards, modals |
| `--radius-xl` | 12px | Extra large containers |
| `--radius-full` | 9999px | Pills, avatars, circular |

---

## Shadows

```css
/* Subtle shadow - small elements */
--shadow-sm: rgba(0, 0, 0, 0.05) 0px 1px 2px 0px;

/* Medium shadow - dropdowns, popovers */
--shadow-md: rgba(0, 0, 0, 0.1) 0px 1px 3px 0px,
             rgba(0, 0, 0, 0.1) 0px 1px 2px -1px;

/* Card shadow - softer, elevated cards (from login page) */
--shadow-card: rgba(0, 0, 0, 0.08) 0px 4px 24px 0px,
               rgba(0, 0, 0, 0.04) 0px 1px 2px 0px;

/* Focus ring */
--shadow-focus: 0 0 0 2px var(--primary-light);
```

---

## Components

### Buttons

#### Primary Button

```css
.btn-primary {
  font-size: 14px;
  font-weight: 500;
  color: #FFFFFF;
  background-color: #0073D1;
  border: none;
  border-radius: 6px;
  padding: 0 12px;
  height: 36px;
}

.btn-primary:hover {
  background-color: #005BA3; /* darker */
}
```

#### Secondary Button

```css
.btn-secondary {
  font-size: 14px;
  font-weight: 500;
  color: #1A253C;
  background-color: #F5F7FA;
  border: 1px solid #E5E7EB;
  border-radius: 6px;
  padding: 0 12px;
  height: 36px;
}

.btn-secondary:hover {
  background-color: #E5E7EB;
}
```

#### Ghost Button

```css
.btn-ghost {
  font-size: 14px;
  font-weight: 500;
  color: #6B7280;
  background-color: transparent;
  border: none;
  border-radius: 8px;
  padding: 10px 12px;
}

.btn-ghost:hover {
  background-color: rgba(243, 244, 246, 0.5);
}
```

### Tabs

```css
.tab {
  font-size: 14px;
  font-weight: 500;
  color: #6B7280;
  background: transparent;
  padding: 8px 16px;
  border: none;
  border-bottom: 2px solid transparent;
}

.tab:hover {
  color: #1A253C;
}

.tab.active {
  color: #1A253C;
  background: #F5F7FA;
  border-bottom-color: #0073D1;
}
```

### Cards

```css
.card {
  background: #FFFFFF;
  border: 1px solid #E5E7EB;
  border-radius: 8px;
  box-shadow: var(--shadow-sm);
}

/* KPI Card */
.kpi-card {
  padding: 16px;
  min-width: 180px;
}

.kpi-card .label {
  font-size: 12px;
  font-weight: 500;
  color: #6B7280;
  margin-bottom: 4px;
}

.kpi-card .value {
  font-size: 30px;
  font-weight: 600;
  color: #1A253C;
}

.kpi-card .trend {
  font-size: 12px;
  font-weight: 500;
  margin-top: 8px;
}
```

### Form Inputs

```css
.input {
  font-size: 14px;
  color: #1A253C;
  background: #FFFFFF;
  border: 1px solid #E5E7EB;
  border-radius: 6px;
  padding: 8px 12px;
  height: 36px;
}

.input:focus {
  border-color: #0073D1;
  outline: none;
  box-shadow: 0 0 0 2px rgba(0, 115, 209, 0.1);
}

.input::placeholder {
  color: #6B7280;
}
```

### Select / Dropdown

```css
.select {
  font-size: 14px;
  font-weight: 500;
  color: #1A253C;
  background: rgba(243, 244, 246, 0.5);
  border: 1px solid #E5E7EB;
  border-radius: 6px;
  padding: 8px 12px;
  height: 36px;
}
```

### Tables

```css
.table {
  width: 100%;
  border-collapse: collapse;
  font-size: 14px;
}

.table th {
  font-weight: 500;
  color: #6B7280;
  text-align: left;
  padding: 12px 16px;
  border-bottom: 1px solid #E5E7EB;
  background: #F5F7FA;
}

.table td {
  color: #1A253C;
  padding: 12px 16px;
  border-bottom: 1px solid #F3F4F6;
}

.table tr:hover {
  background: rgba(243, 244, 246, 0.5);
}

/* Numeric cells */
.table td.numeric {
  text-align: right;
  font-variant-numeric: tabular-nums;
}

/* Positive value */
.table .positive {
  color: #10B77F;
}

/* Negative value */
.table .negative {
  color: #EA580C;
}
```

### Sidebar Navigation

```css
.sidebar {
  width: 224px;
  background: #FFFFFF;
  border-right: 1px solid #E5E7EB;
  height: 100vh;
  display: flex;
  flex-direction: column;
}

.nav-item {
  display: flex;
  align-items: center;
  gap: 12px;
  padding: 10px 12px;
  border-radius: 8px;
  font-size: 14px;
  font-weight: 400;
  color: #6B7280;
  text-decoration: none;
}

.nav-item:hover {
  background: rgba(243, 244, 246, 0.5);
}

.nav-item.active {
  background: rgba(0, 115, 209, 0.1);
  color: #0073D1;
  font-weight: 500;
}
```

### Alerts / Banners

```css
.alert {
  display: flex;
  align-items: center;
  gap: 12px;
  padding: 12px 16px;
  border-radius: 8px;
}

.alert-warning {
  background: rgba(245, 159, 10, 0.1);
  border-left: 3px solid #F59F0A;
}

.alert-error {
  background: rgba(249, 115, 22, 0.1);
  border-left: 3px solid #EA580C;
}

.alert-title {
  font-size: 14px;
  font-weight: 600;
  color: #1A253C;
}

.alert-description {
  font-size: 12px;
  color: #6B7280;
}
```

### Badges / Pills

```css
.badge {
  font-size: 12px;
  font-weight: 500;
  padding: 2px 8px;
  border-radius: 9999px;
}

.badge-warning {
  background: rgba(245, 159, 10, 0.1);
  color: #F59F0A;
}

.badge-success {
  background: rgba(16, 183, 127, 0.1);
  color: #10B77F;
}

.badge-error {
  background: rgba(234, 88, 12, 0.1);
  color: #EA580C;
}
```

### Data Quality Score

```css
.dq-score {
  display: flex;
  align-items: center;
  gap: 8px;
}

.dq-score .value {
  font-size: 14px;
  font-weight: 600;
  color: #1A253C;
}

.dq-score .bar {
  width: 60px;
  height: 6px;
  background: #E5E7EB;
  border-radius: 9999px;
  overflow: hidden;
}

.dq-score .bar-fill {
  height: 100%;
  background: linear-gradient(to right, #EA580C, #F59F0A, #10B77F);
  border-radius: 9999px;
}
```

### Login Page Components

From the login page - split-screen layout with feature showcase.

#### Login Card (elevated)

```css
.login-card {
  background: #FFFFFF;
  border: 1px solid #E5E7EB;
  border-radius: 12px; /* --radius-xl */
  box-shadow: rgba(0, 0, 0, 0.08) 0px 4px 24px 0px,
              rgba(0, 0, 0, 0.04) 0px 1px 2px 0px;
  padding: 32px;
}
```

#### Feature Panel (glass effect on primary)

```css
/* Left panel with primary background */
.login-features {
  background: #0073D1; /* --primary */
  color: #FFFFFF;
  padding: 48px;
}

/* Glass-effect feature cards */
.feature-card {
  background: rgba(255, 255, 255, 0.1);
  border: 1px solid rgba(255, 255, 255, 0.15);
  border-radius: 8px;
  padding: 16px;
}

/* Feature icons */
.feature-icon {
  width: 40px;
  height: 40px;
  background: rgba(255, 255, 255, 0.15);
  border-radius: 8px;
  display: flex;
  align-items: center;
  justify-content: center;
}

.feature-card h3 {
  font-size: 14px;
  font-weight: 600;
  color: #FFFFFF;
}

.feature-card p {
  font-size: 12px;
  color: rgba(255, 255, 255, 0.8);
}
```

---

## Icons

The application uses a Lucide-style icon set. Common icons:

| Icon | Usage |
|------|-------|
| `dashboard` | Dashboard nav |
| `file-text` | Reports nav |
| `calculator` | Plan & Budget nav |
| `list` | Chart of Accounts nav |
| `database` | Data Catalog nav |
| `book-open` | Glossary |
| `shield-check` | Data Quality |
| `sparkles` | AI Assistant |
| `search` | Search |
| `chevron-down` | Dropdown indicators |
| `trend-up` | Positive trends |
| `trend-down` | Negative trends |
| `building` | Business entity |
| `calendar` | Date picker |
| `download` | Export |
| `upload` | Import |
| `printer` | Print |
| `message-square` | Comments |
| `settings` | Settings |
| `user` | User profile |

---

## Layout

### Page Structure

```
┌─────────────────────────────────────────────────────────────────┐
│ Sidebar (224px)  │  Main Content                                │
│                  │  ┌─────────────────────────────────────────┐ │
│ [Logo]           │  │ Header: Title + Actions (right aligned) │ │
│ [Search]         │  └─────────────────────────────────────────┘ │
│                  │  ┌─────────────────────────────────────────┐ │
│ [Nav Items]      │  │ Filters Bar (entity, date, view toggle) │ │
│ - Dashboard      │  └─────────────────────────────────────────┘ │
│ - Reports        │  ┌─────────────────────────────────────────┐ │
│ - Plan & Budget  │  │ Content Area                            │ │
│ - COA            │  │                                         │ │
│ - Data Catalog   │  │ (Cards, Tables, Charts)                 │ │
│   - Glossary     │  │                                         │ │
│   - Data Quality │  │                                         │ │
│                  │  │                                         │ │
│ [Tour]           │  │                                         │ │
│ [AI Assistant]   │  │                                         │ │
│ [User Profile]   │  └─────────────────────────────────────────┘ │
└─────────────────────────────────────────────────────────────────┘
```

### Responsive Breakpoints

```css
/* Desktop (default) */
@media (min-width: 1280px) {
  .sidebar { width: 224px; }
  .main { margin-left: 224px; }
}

/* Tablet */
@media (max-width: 1279px) {
  .sidebar { width: 64px; } /* Icons only */
  .main { margin-left: 64px; }
}

/* Mobile */
@media (max-width: 768px) {
  .sidebar { display: none; } /* Hamburger menu */
  .main { margin-left: 0; }
}
```

---

## CSS Custom Properties Summary

```css
:root {
  /* Colors */
  --primary: #0073D1;
  --primary-light: rgba(0, 115, 209, 0.1);
  --text-primary: #1A253C;
  --text-secondary: #6B7280;
  --background: #F5F7FA;
  --surface: #FFFFFF;
  --border: #E5E7EB;
  --success: #10B77F;
  --warning: #F59F0A;
  --error: #EA580C;

  /* Typography */
  --font-primary: 'Inter', system-ui, sans-serif;
  --font-mono: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, monospace;

  /* Font sizes */
  --text-xs: 10px;
  --text-sm: 12px;
  --text-base: 14px;
  --text-md: 16px;
  --text-lg: 18px;
  --text-xl: 24px;
  --text-2xl: 30px;

  /* Font weights */
  --font-normal: 400;
  --font-medium: 500;
  --font-semibold: 600;
  --font-bold: 700;

  /* Spacing */
  --space-1: 4px;
  --space-2: 8px;
  --space-3: 12px;
  --space-4: 16px;
  --space-5: 20px;
  --space-6: 24px;
  --space-8: 32px;

  /* Border radius */
  --radius-sm: 4px;
  --radius-md: 6px;
  --radius-lg: 8px;
  --radius-xl: 12px;
  --radius-full: 9999px;

  /* Shadows */
  --shadow-sm: rgba(0, 0, 0, 0.05) 0px 1px 2px 0px;
  --shadow-md: rgba(0, 0, 0, 0.1) 0px 1px 3px 0px, rgba(0, 0, 0, 0.1) 0px 1px 2px -1px;
  --shadow-card: rgba(0, 0, 0, 0.08) 0px 4px 24px 0px, rgba(0, 0, 0, 0.04) 0px 1px 2px 0px;

  /* Layout */
  --sidebar-width: 224px;
  --header-height: 64px;
}
```

---

## Tailwind CSS Mapping

If using Tailwind CSS, here's the equivalent configuration:

```javascript
// tailwind.config.js
module.exports = {
  theme: {
    extend: {
      colors: {
        primary: {
          DEFAULT: '#0073D1',
          light: 'rgba(0, 115, 209, 0.1)',
        },
        text: {
          primary: '#1A253C',
          secondary: '#6B7280',
        },
        background: '#F5F7FA',
        surface: '#FFFFFF',
        border: '#E5E7EB',
        success: '#10B77F',
        warning: '#F59F0A',
        error: '#EA580C',
      },
      fontFamily: {
        sans: ['Inter', 'system-ui', 'sans-serif'],
        mono: ['ui-monospace', 'SFMono-Regular', 'Menlo', 'Monaco', 'Consolas', 'monospace'],
      },
      fontSize: {
        'xs': '10px',
        'sm': '12px',
        'base': '14px',
        'md': '16px',
        'lg': '18px',
        'xl': '24px',
        '2xl': '30px',
      },
      borderRadius: {
        'sm': '4px',
        'md': '6px',
        'lg': '8px',
        'xl': '12px',
      },
      spacing: {
        'sidebar': '224px',
      },
    },
  },
}
```
