# Linear-Inspired Design System

**Version**: 2.0.0
**Date**: 2025-12-12
**Status**: 🚀 Implementing

---

## 🎯 Design Philosophy

Inspired by Linear, our design prioritizes:

1. **Speed Over Spectacle** - UI should feel instant
2. **Keyboard-First** - Power users can navigate without a mouse
3. **Clarity Over Decoration** - Every element serves a purpose
4. **Minimalist Density** - More information, less noise
5. **Subtle Motion** - Micro-animations guide, never distract

---

## 🎨 Color Palette

### Core Colors (Charcoal & Bone)

```css
/* Light Mode ("Bone") */
--color-bg-primary: #FFFFFF;           /* Pure white */
--color-bg-secondary: #FAFAFA;         /* Off-white */
--color-bg-tertiary: #F5F5F5;          /* Light gray */
--color-bg-elevated: #FFFFFF;          /* Cards, modals */

--color-text-primary: #171717;         /* Near black */
--color-text-secondary: #525252;       /* Dark gray */
--color-text-tertiary: #A3A3A3;        /* Mid gray */
--color-text-quaternary: #D4D4D4;      /* Light gray (disabled) */

--color-border-default: #E5E5E5;       /* Subtle border */
--color-border-subtle: #F5F5F5;        /* Very subtle */
--color-border-strong: #D4D4D4;        /* Emphasis */

/* Dark Mode ("Charcoal") */
--color-bg-primary: #0A0A0A;           /* Near black */
--color-bg-secondary: #171717;         /* Charcoal */
--color-bg-tertiary: #262626;          /* Dark gray */
--color-bg-elevated: #1F1F1F;          /* Cards, modals */

--color-text-primary: #FAFAFA;         /* Off-white */
--color-text-secondary: #A3A3A3;       /* Mid gray */
--color-text-tertiary: #737373;        /* Dark gray */
--color-text-quaternary: #525252;      /* Darker gray (disabled) */

--color-border-default: #262626;       /* Subtle border */
--color-border-subtle: #1F1F1F;        /* Very subtle */
--color-border-strong: #404040;        /* Emphasis */
```

### Accent Colors (Minimal, Purposeful)

```css
/* Accent - Desaturated Blue (Linear-style) */
--color-accent: #5E6AD2;               /* Primary accent */
--color-accent-hover: #6E7AE2;         /* Hover state */
--color-accent-muted: rgba(94, 106, 210, 0.15);

/* Status Colors (Desaturated) */
--color-success: #22C55E;              /* Green - success */
--color-success-muted: rgba(34, 197, 94, 0.15);

--color-warning: #EAB308;              /* Yellow - warning */
--color-warning-muted: rgba(234, 179, 8, 0.15);

--color-error: #EF4444;                /* Red - error */
--color-error-muted: rgba(239, 68, 68, 0.15);

--color-info: #5E6AD2;                 /* Same as accent */
--color-info-muted: rgba(94, 106, 210, 0.15);
```

### Semantic Mapping

| Usage | Light Mode | Dark Mode |
|-------|------------|-----------|
| Page background | `#FFFFFF` | `#0A0A0A` |
| Card background | `#FFFFFF` | `#171717` |
| Sidebar background | `#FAFAFA` | `#0F0F0F` |
| Primary text | `#171717` | `#FAFAFA` |
| Secondary text | `#525252` | `#A3A3A3` |
| Borders | `#E5E5E5` | `#262626` |
| Focus ring | `#5E6AD2` | `#5E6AD2` |

---

## 📝 Typography

### Font Stack

```css
--font-sans: 'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;
--font-mono: 'JetBrains Mono', 'Fira Code', 'Consolas', monospace;
```

### Type Scale

| Name | Size | Weight | Line Height | Usage |
|------|------|--------|-------------|-------|
| `xs` | 11px | 400 | 1.4 | Labels, metadata |
| `sm` | 13px | 400 | 1.5 | Secondary text |
| `base` | 14px | 400 | 1.6 | Body text |
| `lg` | 16px | 500 | 1.5 | Subheadings |
| `xl` | 18px | 600 | 1.4 | Headings |
| `2xl` | 24px | 600 | 1.3 | Page titles |
| `3xl` | 30px | 700 | 1.2 | Hero text |

### Letter Spacing

```css
--tracking-tight: -0.02em;     /* Headings */
--tracking-normal: -0.01em;    /* Body */
--tracking-wide: 0.02em;       /* All caps labels */
```

---

## 📐 Spacing & Layout

### Spacing Scale

```css
--space-0: 0;
--space-1: 4px;
--space-2: 8px;
--space-3: 12px;
--space-4: 16px;
--space-5: 20px;
--space-6: 24px;
--space-8: 32px;
--space-10: 40px;
--space-12: 48px;
--space-16: 64px;
```

### Border Radius

```css
--radius-sm: 4px;      /* Buttons, inputs */
--radius-md: 6px;      /* Cards */
--radius-lg: 8px;      /* Modals */
--radius-xl: 12px;     /* Large cards */
--radius-full: 9999px; /* Pills, avatars */
```

---

## ✨ Micro-Animations

### Timing Functions

```css
/* Linear's signature easing */
--ease-out-expo: cubic-bezier(0.16, 1, 0.3, 1);
--ease-in-out-expo: cubic-bezier(0.87, 0, 0.13, 1);
--ease-spring: cubic-bezier(0.34, 1.56, 0.64, 1);
```

### Animation Durations

```css
--duration-instant: 50ms;     /* Color changes */
--duration-fast: 100ms;       /* Hover states */
--duration-normal: 150ms;     /* Most transitions */
--duration-slow: 250ms;       /* Modals, drawers */
--duration-slower: 400ms;     /* Page transitions */
```

### Standard Transitions

```css
/* Hover state */
.interactive {
  transition: 
    background-color var(--duration-fast) var(--ease-out-expo),
    color var(--duration-fast) var(--ease-out-expo),
    border-color var(--duration-fast) var(--ease-out-expo),
    transform var(--duration-normal) var(--ease-spring);
}

/* Subtle press effect */
.interactive:active {
  transform: scale(0.98);
}

/* Focus ring animation */
.focus-ring:focus-visible {
  box-shadow: 0 0 0 2px var(--color-accent);
  transition: box-shadow var(--duration-normal) var(--ease-out-expo);
}
```

### Component-Specific Animations

```css
/* Button hover glow */
@keyframes button-glow {
  0% { box-shadow: 0 0 0 0 rgba(94, 106, 210, 0.4); }
  100% { box-shadow: 0 0 0 4px rgba(94, 106, 210, 0); }
}

/* Card hover lift */
@keyframes card-lift {
  0% { transform: translateY(0); }
  100% { transform: translateY(-2px); }
}

/* Fade in */
@keyframes fade-in {
  from { opacity: 0; }
  to { opacity: 1; }
}

/* Slide up */
@keyframes slide-up {
  from { opacity: 0; transform: translateY(8px); }
  to { opacity: 1; transform: translateY(0); }
}

/* Scale in */
@keyframes scale-in {
  from { opacity: 0; transform: scale(0.95); }
  to { opacity: 1; transform: scale(1); }
}

/* Progress bar shimmer */
@keyframes shimmer {
  0% { background-position: -200% 0; }
  100% { background-position: 200% 0; }
}
```

---

## 🧱 Component Patterns

### Buttons

```css
/* Base button */
.btn {
  height: 32px;
  padding: 0 12px;
  font-size: 13px;
  font-weight: 500;
  border-radius: var(--radius-sm);
  transition: all var(--duration-fast) var(--ease-out-expo);
}

/* Primary (accent) */
.btn-primary {
  background: var(--color-accent);
  color: white;
}
.btn-primary:hover {
  background: var(--color-accent-hover);
}

/* Secondary (ghost) */
.btn-secondary {
  background: transparent;
  color: var(--color-text-secondary);
  border: 1px solid var(--color-border-default);
}
.btn-secondary:hover {
  background: var(--color-bg-tertiary);
  color: var(--color-text-primary);
}
```

### Cards

```css
.card {
  background: var(--color-bg-elevated);
  border: 1px solid var(--color-border-subtle);
  border-radius: var(--radius-md);
  transition: border-color var(--duration-fast) var(--ease-out-expo);
}
.card:hover {
  border-color: var(--color-border-default);
}
```

### Inputs

```css
.input {
  height: 36px;
  padding: 0 12px;
  font-size: 14px;
  background: var(--color-bg-primary);
  border: 1px solid var(--color-border-default);
  border-radius: var(--radius-sm);
  transition: all var(--duration-fast) var(--ease-out-expo);
}
.input:focus {
  border-color: var(--color-accent);
  box-shadow: 0 0 0 3px var(--color-accent-muted);
}
```

---

## 📱 Responsive Breakpoints

```css
--breakpoint-sm: 640px;
--breakpoint-md: 768px;
--breakpoint-lg: 1024px;
--breakpoint-xl: 1280px;
--breakpoint-2xl: 1536px;
```

---

## 🌙 Dark Mode Strategy

- **Default**: Follow system preference (`prefers-color-scheme`)
- **Toggle**: Available in settings
- **Persistence**: localStorage key `theme`
- **Transition**: Smooth 150ms color transition on toggle

---

## ♿ Accessibility

- **Focus visible**: All interactive elements have visible focus ring
- **Contrast**: Minimum 4.5:1 for text, 3:1 for large text/graphics
- **Motion**: Respect `prefers-reduced-motion`
- **Touch targets**: Minimum 44×44px
- **Keyboard**: Full keyboard navigation support

---

## 🚀 Implementation Priority

1. **Phase 1: Colors & Typography** (2-3 hours)
   - Update `tailwind.config.js` with new color tokens
   - Update `index.css` with new font imports
   - Create CSS custom properties

2. **Phase 2: Core Components** (3-4 hours)
   - Update Button component
   - Update Card component
   - Update Input component
   - Update focus states

3. **Phase 3: Layouts** (2-3 hours)
   - Update Sidebar
   - Update PageHeader
   - Update Navigation

4. **Phase 4: Micro-Animations** (2-3 hours)
   - Add hover transitions
   - Add press effects
   - Add page transitions

5. **Phase 5: Polish** (2-3 hours)
   - Dark mode refinement
   - Accessibility audit
   - Performance check
