# Afrexai UI Design System

> UI/UX Design System — Complete Product Design Engine

- Skill: `johnalbertini14-glitch/afrexai-ui-design-system` (Agent Skill, multi-file: 3 files)
- Install (CLI): `npx skillmds@latest add johnalbertini14-glitch/afrexai-ui-design-system`
- Raw SKILL.md: https://api.skillmd.com/api/skills/johnalbertini14-glitch/afrexai-ui-design-system/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Design & Media
- Author: johnalbertini14-glitch (https://skillmd.com/u/johnalbertini14-glitch)
- Updated: 2026-09-21
- Page: https://skillmd.com/skills/johnalbertini14-glitch/afrexai-ui-design-system

---

# UI/UX Design System — Complete Product Design Engine

You are a senior product designer. Follow this system for every design task — from user research through pixel-perfect implementation. This is methodology + execution, not just CSS tips.

---

## Phase 1: Design Brief & Discovery

Before touching any UI, answer these questions:

```yaml
design_brief:
  project: ""
  type: "landing_page | dashboard | mobile_app | saas_product | ecommerce | marketing_site"
  target_users:
    primary: ""          # Who are they?
    technical_level: "novice | intermediate | advanced"
    age_range: ""
    context: ""          # Where/when do they use this?
    devices: "desktop_first | mobile_first | responsive_equal"
  goals:
    business: ""         # What does the business need?
    user: ""             # What does the user need to accomplish?
    success_metric: ""   # How do we measure success?
  brand:
    personality: ""      # e.g., "professional but approachable"
    existing_guidelines: "yes | no"
    competitors: []      # Who are we compared against?
  constraints:
    timeline: ""
    tech_stack: ""       # React, vanilla, etc.
    accessibility: "WCAG_AA | WCAG_AAA"
    must_support: []     # e.g., "dark mode", "RTL", "i18n"
```

### Design Type Decision Matrix

| Type | Key Priority | Layout Pattern | Density |
|------|-------------|----------------|---------|
| Landing page | Conversion | Single column, CTA-focused | Low — lots of whitespace |
| Dashboard | Information density | Grid/panels, sidebar nav | High — data-rich |
| Mobile app | Thumb-zone, speed | Tab bar, cards, bottom sheets | Medium |
| SaaS product | Efficiency, learnability | Sidebar + content area | Medium-high |
| Ecommerce | Browse + buy | Grid catalog, sticky cart | Medium |
| Marketing site | Brand storytelling | Sections, parallax, media | Low-medium |

---

## Phase 2: Information Architecture

### Content Hierarchy Method

1. **List every piece of content/feature** the page needs
2. **Rank by importance** (must-see, should-see, nice-to-see)
3. **Group related items** into logical sections
4. **Define the flow** — what order does the user encounter things?

### Navigation Architecture

```yaml
nav_structure:
  pattern: "top_bar | sidebar | bottom_tabs | hamburger | command_palette"
  decision_factors:
    - item_count: "<7 = top bar, 7-15 = sidebar, >15 = sidebar + groups"
    - depth: "flat = tabs, 2-level = sidebar with sections, 3+ = breadcrumbs"
    - frequency: "daily-use actions in primary nav, weekly in secondary"
    - platform: "mobile = bottom tabs (max 5), desktop = sidebar or top"
  primary_items: []     # Max 7
  secondary_items: []   # Settings, profile, help
  utility_items: []     # Search, notifications, user menu
```

### Page Layout Patterns

**F-Pattern** (content-heavy pages — blogs, news):
```
┌─────────────────────────────────┐
│ ████████████████████████████    │  ← Eye scans horizontally
│ ████████████████                │  ← Second horizontal scan (shorter)
│ ████                            │
│ ████                            │  ← Vertical scan down left side
│ ████                            │
└─────────────────────────────────┘
```

**Z-Pattern** (minimal pages — landing, login):
```
┌─────────────────────────────────┐
│ LOGO ──────────────────── NAV   │  ← Top horizontal
│         ╲                       │
│            ╲                    │  ← Diagonal
│               ╲                 │
│ IMAGE ──────────────────── CTA  │  ← Bottom horizontal
└─────────────────────────────────┘
```

**Dashboard Pattern** (data-heavy):
```
┌──────┬──────────────────────────┐
│      │  KPI  │  KPI  │  KPI    │
│ NAV  ├──────────────────────────┤
│      │         CHART            │
│      ├─────────────┬────────────┤
│      │   TABLE     │  SIDEBAR   │
└──────┴─────────────┴────────────┘
```

---

## Phase 3: Design System Foundation

### Color System Architecture

#### Step 1: Choose a Color Strategy

| Strategy | When to Use | Example |
|----------|------------|---------|
| Monochromatic | Professional, minimal, SaaS | Stripe, Linear |
| Complementary | High contrast, CTAs pop | Slack (purple + green) |
| Analogous | Harmonious, warm/cool feel | Instagram gradient |
| Split-complementary | Vibrant but balanced | Notion |
| Neutral + accent | Safe, professional | GitHub (white + blue accent) |

#### Step 2: Build the Palette

```yaml
color_system:
  # Core brand colors
  primary:
    50: ""    # Lightest — backgrounds, hover states
    100: ""   # Light — selected states, badges
    200: ""   # — borders, dividers
    300: ""   # — disabled text
    400: ""   # — placeholder text
    500: ""   # Base — buttons, links, icons
    600: ""   # — hover on primary buttons
    700: ""   # — active/pressed states
    800: ""   # — headings on light bg
    900: ""   # Darkest — text on light bg
    
  # Semantic colors (DON'T skip these)
  success: "#22c55e"     # Green — confirmations, positive
  warning: "#f59e0b"     # Amber — caution, pending
  error: "#ef4444"       # Red — errors, destructive actions
  info: "#3b82f6"        # Blue — informational, tips
  
  # Neutral scale (most used colors in any app)
  gray:
    50: ""    # Page background
    100: ""   # Card background, alternating rows
    200: ""   # Borders, dividers
    300: ""   # Disabled elements
    400: ""   # Placeholder text
    500: ""   # Secondary text, icons
    600: ""   # Body text
    700: ""   # Headings
    800: ""   # Primary text
    900: ""   # Highest contrast text
  
  # Surface colors
  background: ""          # Page bg
  surface: ""             # Card/panel bg
  surface_raised: ""      # Elevated card bg (modals, popovers)
  overlay: "rgba(0,0,0,0.5)"  # Modal backdrop
```

#### Color Accessibility Rules

| Contrast Ratio | Use For | WCAG Level |
|---------------|---------|------------|
| 4.5:1 minimum | Normal text (<18px) | AA |
| 3:1 minimum | Large text (≥18px bold, ≥24px) | AA |
| 3:1 minimum | UI components, icons | AA |
| 7:1 minimum | Normal text | AAA |

**Never rely on color alone** — always pair with icons, labels, or patterns.

#### Dark Mode Strategy

| Light Mode | Dark Mode | Rule |
|-----------|-----------|------|
| White bg | NOT pure black — use gray-900 (#111827) | Pure black feels like a hole |
| Gray-900 text | Gray-100 text | Reduce contrast slightly — pure white on dark = eye strain |
| Primary-500 | Primary-400 | Lighten saturated colors for dark bg |
| Gray-200 borders | Gray-700 borders | Invert border scale |
| White cards | Gray-800 cards | Slight elevation from bg |
| Box shadows | Subtle lighter borders or glow | Shadows invisible on dark bg |

### Typography System

#### Type Scale (recommended)

```yaml
typography:
  scale: "1.25"    # Major Third — good for most apps
  # Or: 1.125 (minor second — compact), 1.2 (minor third), 1.333 (perfect fourth — bold)
  
  sizes:
    xs: "0.75rem"    # 12px — captions, labels
    sm: "0.875rem"   # 14px — secondary text, metadata
    base: "1rem"     # 16px — body text (NEVER go below 16px for body)
    lg: "1.125rem"   # 18px — emphasized body, intro text
    xl: "1.25rem"    # 20px — section headers, card titles
    2xl: "1.5rem"    # 24px — page section titles
    3xl: "1.875rem"  # 30px — page titles
    4xl: "2.25rem"   # 36px — hero titles
    5xl: "3rem"      # 48px — landing page hero
    
  line_heights:
    tight: "1.25"    # Headings
    normal: "1.5"    # Body text (MINIMUM for readability)
    relaxed: "1.75"  # Long-form reading
    
  max_width: "65ch"  # Optimal line length for readability (45-75ch range)
```

#### Font Pairing Guide

| Vibe | Heading | Body | Example Brand |
|------|---------|------|---------------|
| Modern SaaS | Inter | Inter | Linear, Vercel |
| Premium | Playfair Display | Source Serif Pro | Stripe |
| Friendly startup | Poppins | DM Sans | Notion |
| Technical/dev | Space Grotesk | IBM Plex Sans | GitHub |
| Bold/editorial | Clash Display | Satoshi | Arc Browser |
| Clean corporate | Plus Jakarta Sans | Inter | Wise |

**Rule: max 2 font families.** One for headings, one for body. Same family for both is fine (Inter does everything).

### Spacing System

Use a **4px base unit** (0.25rem):

```yaml
spacing:
  0: "0"
  1: "0.25rem"   # 4px — tight gaps
  2: "0.5rem"    # 8px — between related items
  3: "0.75rem"   # 12px — form field padding
  4: "1rem"      # 16px — card padding, standard gap
  5: "1.25rem"   # 20px
  6: "1.5rem"    # 24px — section padding
  8: "2rem"      # 32px — between sections
  10: "2.5rem"   # 40px
  12: "3rem"     # 48px — large section gaps
  16: "4rem"     # 64px — hero padding
  20: "5rem"     # 80px — page section spacing
  24: "6rem"     # 96px — major section breaks
```

#### Spacing Rules

- **Related items**: 4-8px apart (e.g., icon + label)
- **Grouped items**: 12-16px apart (e.g., form fields)
- **Sections**: 32-64px apart
- **Page sections**: 64-96px apart
- **Card internal padding**: 16-24px
- **Consistent axis**: if horizontal gap is 16px, vertical should be 16px or a multiple

### Border Radius System

```yaml
radius:
  none: "0"          # Sharp — tables, code blocks
  sm: "0.25rem"      # 4px — badges, tags
  md: "0.375rem"     # 6px — inputs, small buttons
  lg: "0.5rem"       # 8px — cards, modals
  xl: "0.75rem"      # 12px — large cards
  2xl: "1rem"        # 16px — hero sections
  full: "9999px"     # Pills, avatars, circular
```

**Consistency rule:** Pick 2-3 radius values and stick to them. Mixing 5+ different radii looks chaotic.

### Shadow & Elevation System

```yaml
elevation:
  # Level 0: flat (no shadow)
  sm: "0 1px 2px rgba(0,0,0,0.05)"                           # Subtle — cards at rest
  md: "0 4px 6px -1px rgba(0,0,0,0.1)"                       # Standard — cards, dropdowns
  lg: "0 10px 15px -3px rgba(0,0,0,0.1)"                     # Elevated — modals, popovers
  xl: "0 20px 25px -5px rgba(0,0,0,0.1)"                     # High — dialogs, toasts
  
  # Interaction shadows
  hover: "transition shadow-sm → shadow-md on hover"
  focus: "0 0 0 3px rgba(primary, 0.3)"                      # Focus ring
```

---

## Phase 4: Component Design Patterns

### Button Hierarchy

Every page needs clear button hierarchy. Users should instantly know the primary action.

| Level | Style | Use For | Max Per View |
|-------|-------|---------|-------------|
| Primary | Solid bg, contrasting text | Main CTA, submit, confirm | 1-2 |
| Secondary | Outlined or muted bg | Alternative actions | 2-3 |
| Tertiary/Ghost | Text only, no bg | Cancel, dismiss, back | Unlimited |
| Destructive | Red solid or outlined | Delete, remove | 1 |
| Icon-only | Icon + tooltip | Toolbar actions, compact UI | As needed |

**Button States Checklist:**
- [ ] Default
- [ ] Hover (color shift or shadow)
- [ ] Active/pressed (slightly darker, scale 0.98)
- [ ] Focus (visible ring for keyboard nav)
- [ ] Disabled (50% opacity, cursor: not-allowed)
- [ ] Loading (spinner, disabled interaction)

**Minimum touch target: 44×44px** (even if button looks smaller visually)

### Form Design Rules

1. **Labels above inputs** (not inline/floating — those have accessibility issues)
2. **One column** for forms <6 fields (two-column only for related pairs like first/last name)
3. **Field width = expected input length** (email = full width, zip = short)
4. **Real-time validation** — show errors on blur, not on submit
5. **Error messages below the field** — specific ("Email must include @") not generic ("Invalid input")
6. **Required fields**: mark optional fields with "(optional)" rather than marking required with *
7. **Group related fields** with subtle section dividers or headings
8. **Progressive disclosure** — don't show advanced options by default

```yaml
form_field_template:
  label: "always visible, above input, font-weight: 500"
  hint: "below label, gray-500, sm text — for context/format hints"
  input: "border-gray-300, focus:border-primary-500, focus:ring, px-3 py-2"
  error: "below input, text-error, sm text, icon + message"
  states:
    default: "border-gray-300"
    focus: "border-primary-500, ring-2 ring-primary-100"
    error: "border-error, ring-2 ring-error-100"
    disabled: "bg-gray-50, text-gray-400, cursor-not-allowed"
    success: "border-success (only when validation is helpful)"
```

### Card Design Patterns

```yaml
card_variants:
  basic:
    bg: "surface"
    border: "1px solid gray-200"
    radius: "lg"
    padding: "24px"
    hover: "none"
    
  interactive:
    bg: "surface"
    border: "1px solid gray-200"
    radius: "lg"
    padding: "24px"
    hover: "shadow-md, border-gray-300, cursor-pointer"
    active: "shadow-sm, scale-0.99"
    
  featured:
    bg: "primary-50 or gradient"
    border: "2px solid primary-500"
    radius: "xl"
    padding: "32px"
    badge: "top-right — 'Popular', 'Recommended'"
```

### Modal & Dialog Design

- **Max width**: 480px (small), 640px (medium), 800px (large)
- **Overlay**: dark semi-transparent backdrop (close on click)
- **Always** include close button (X) top-right
- **Focus trap**: keyboard focus stays inside modal
- **Animation**: fade + slight scale-up (200-300ms)
- **Mobile**: modals → full-screen sheets (slide up from bottom)
- **Destructive actions**: require explicit confirmation, red button, describe what happens

### Table Design (Data-Heavy UIs)

```yaml
table_design:
  header:
    bg: "gray-50"
    text: "gray-600, sm, uppercase tracking-wide, font-medium"
    sticky: true
  rows:
    hover: "bg-gray-50"
    selected: "bg-primary-50, border-l-2 border-primary-500"
    striped: false  # Hover is better than stripes for modern look
  cells:
    padding: "12px 16px"
    alignment: "text-left (default), text-right (numbers), text-center (status)"
    truncation: "ellipsis with tooltip for long content"
  features:
    sorting: "click header, arrow indicator"
    filtering: "above table or inline header dropdowns"
    pagination: "bottom, 10/25/50/100 per page"
    empty_state: "illustration + message + CTA, not just 'No data'"
    loading: "skeleton rows, not spinner"
```

### Empty States

**Never show a blank page.** Every empty state needs:

1. **Illustration or icon** — visual interest
2. **Headline** — what this area is for
3. **Description** — why it's empty
4. **CTA** — what to do next

```
┌──────────────────────────────┐
│                              │
│          📋 (icon)           │
│                              │
│    No projects yet           │
│                              │
│  Create your first project   │
│  to get started.             │
│                              │
│    [ + New Project ]         │
│                              │
└──────────────────────────────┘
```

### Loading States

| Pattern | When | Example |
|---------|------|---------|
| Skeleton screens | Content loading | Gray pulsing shapes matching layout |
| Spinner | Short action (<3s) | Submit button, inline operations |
| Progress bar | Known duration | File upload, multi-step process |
| Optimistic UI | Low-risk actions | Like button, toggle, message send |
| Placeholder content | First load | Shimmer effect on cards/lists |

**Rule: Skeleton > Spinner.** Skeletons reduce perceived wait time by showing structure.

---

## Phase 5: Interaction Design

### Micro-Interaction Patterns

```yaml
animations:
  # Timing guidelines
  instant: "0-100ms"      # Button press, toggle, checkbox
  fast: "100-200ms"       # Hover, color change, small move
  normal: "200-400ms"     # Panel slide, fade, expand
  slow: "400-700ms"       # Page transition, complex animation
  
  # Easing
  ease_out: "cubic-bezier(0.16, 1, 0.3, 1)"     # Elements entering (most common)
  ease_in: "cubic-bezier(0.55, 0, 1, 0.45)"      # Elements leaving
  ease_in_out: "cubic-bezier(0.65, 0, 0.35, 1)"  # Elements moving
  spring: "cubic-bezier(0.34, 1.56, 0.64, 1)"    # Bouncy/playful
  
  # Common patterns
  enter: "opacity 0→1, translateY 8px→0, 300ms ease-out"
  exit: "opacity 1→0, 200ms ease-in"
  expand: "height 0→auto, 250ms ease-out"
  hover_lift: "translateY -2px, shadow-md, 150ms"
  press: "scale 0.97, 100ms"
  shake: "translateX -4,4,-4,4,0 over 400ms"     # Error feedback
  
  # Stagger for lists
  stagger: "each item delays 50ms from previous"
```

### Scroll Behavior

- **Smooth scroll** for anchor links
- **Sticky headers** that shrink on scroll (60px → 48px)
- **Infinite scroll** for feeds, **pagination** for search results
- **Scroll-triggered animations**: fade-in on intersect, parallax for hero
- **Back-to-top button**: appear after 2 viewport heights

### Toast / Notification Design

```yaml
toast:
  position: "top-right (desktop), top-center (mobile)"
  duration: "success: 3s, info: 5s, error: persistent until dismissed"
  max_visible: 3
  animation: "slide-in from right, fade-out"
  structure: "icon + title + optional description + optional action + close"
  types:
    success: "green accent, checkmark icon"
    error: "red accent, X icon, persistent"
    warning: "amber accent, alert icon"
    info: "blue accent, info icon"
```

---

## Phase 6: Responsive Design System

### Breakpoint Strategy

```yaml
breakpoints:
  sm: "640px"    # Large phones landscape
  md: "768px"    # Tablets
  lg: "1024px"   # Small laptops
  xl: "1280px"   # Desktops
  2xl: "1536px"  # Large screens
  
  approach: "mobile_first"  # ALWAYS min-width queries
  
  max_content_width: "1280px"  # Prevent ultra-wide line lengths
  container_padding:
    mobile: "16px"
    tablet: "24px"
    desktop: "32px"
```

### Responsive Patterns

| Component | Mobile | Tablet | Desktop |
|-----------|--------|--------|---------|
| Navigation | Bottom tabs or hamburger | Sidebar collapsed | Sidebar expanded or top bar |
| Cards grid | 1 column | 2 columns | 3-4 columns |
| Tables | Card layout or horizontal scroll | Visible with fewer columns | Full table |
| Sidebar + content | Full-width stacked | Overlay sidebar | Persistent sidebar |
| Hero section | Stacked, image below text | Side-by-side | Side-by-side with more padding |
| Modal | Full-screen sheet | Centered modal | Centered modal |
| Form layout | Single column | Single column | Optional 2-column for related fields |

### Touch-Friendly Rules (Mobile)

- Minimum tap target: **44×44px** (Apple) / **48×48px** (Material)
- Minimum spacing between targets: **8px**
- Thumb zone: primary actions in **bottom 60%** of screen
- Swipe gestures: always provide button alternative
- No hover-dependent interactions on mobile

---

## Phase 7: Accessibility Checklist

### WCAG AA Compliance (Minimum)

**Perceivable:**
- [ ] Color contrast ≥ 4.5:1 for normal text, ≥ 3:1 for large text
- [ ] Don't use color as the only indicator (add icons, patterns, text)
- [ ] All images have alt text (decorative images: alt="")
- [ ] Video has captions; audio has transcripts
- [ ] Text can be resized to 200% without breaking layout

**Operable:**
- [ ] All functionality available via keyboard
- [ ] Visible focus indicators on all interactive elements
- [ ] Skip-to-content link as first focusable element
- [ ] No keyboard traps (except intentional modals with escape)
- [ ] Sufficient time for timed interactions (or ability to extend)
- [ ] No content that flashes more than 3 times per second

**Understandable:**
- [ ] Language attribute on `<html>`
- [ ] Form labels associated with inputs (for/id or wrapping)
- [ ] Error messages identify the field and suggest correction
- [ ] Consistent navigation across pages
- [ ] No unexpected context changes (auto-submit, auto-redirect)

**Robust:**
- [ ] Valid HTML (semantic elements)
- [ ] ARIA attributes used correctly (or not at all — semantic HTML first)
- [ ] Tested with screen reader (VoiceOver, NVDA)
- [ ] Works with browser zoom at 200%

### Semantic HTML Cheatsheet

| Purpose | Use | Not |
|---------|-----|-----|
| Page header | `<header>` | `<div class="header">` |
| Navigation | `<nav>` | `<div class="nav">` |
| Main content | `<main>` | `<div class="content">` |
| Section | `<section>` + heading | `<div>` |
| Article/card | `<article>` | `<div class="card">` |
| Sidebar | `<aside>` | `<div class="sidebar">` |
| Footer | `<footer>` | `<div class="footer">` |
| Button action | `<button>` | `<div onclick>` or `<a href="#">` |
| Link/navigation | `<a href>` | `<button>` for navigation |
| List of items | `<ul>/<ol>` | Divs with line breaks |

---

## Phase 8: Design Review Rubric (0-100)

Score every design across these dimensions:

| Dimension | Weight | Criteria |
|-----------|--------|----------|
| Visual hierarchy | 20% | Can user identify primary action in <3 seconds? Clear heading/content/CTA layers? |
| Consistency | 15% | Same spacing, colors, radius, typography throughout? Component reuse? |
| Whitespace | 15% | Breathing room between sections? Not cramped? Not wastefully sparse? |
| Accessibility | 15% | Contrast ratios pass? Keyboard navigable? Semantic HTML? Focus states? |
| Responsiveness | 10% | Works on mobile/tablet/desktop? Touch-friendly? No horizontal scroll? |
| Interaction design | 10% | Hover/active/focus/loading states defined? Feedback for actions? |
| Typography | 10% | Readable line length? Proper hierarchy? Consistent scale? |
| Color usage | 5% | Semantic colors correct? Not too many colors? Dark mode works? |

**Grading:**
- 90-100: Ship-ready, polished
- 75-89: Good, minor refinements needed
- 60-74: Functional but needs design pass
- Below 60: Significant redesign needed

### Quick Quality Checklist

Before shipping any design:

- [ ] Primary CTA is immediately obvious
- [ ] Empty states are designed (not blank)
- [ ] Loading states exist (skeleton or spinner)
- [ ] Error states are helpful (not just "Error")
- [ ] Mobile layout tested (not just desktop shrunk)
- [ ] Dark mode works (if applicable)
- [ ] All interactive elements have hover + focus states
- [ ] Form validation shows inline errors
- [ ] Contrast checker passed on all text
- [ ] No orphaned headings or single-word lines on titles
- [ ] Favicon and page title set
- [ ] Images have alt text
- [ ] 404 page designed

---

## Phase 9: Design Handoff & Implementation

### Developer Handoff Checklist

```yaml
handoff:
  specs:
    - All spacing values in rem/px
    - Color values as variables, not hardcoded
    - Font sizes, weights, line-heights documented
    - Border radius values listed
    - Shadow values as CSS
  states:
    - Default, hover, active, focus, disabled for all interactive elements
    - Loading, empty, error states for all data-displaying components
  responsive:
    - Mobile, tablet, desktop layouts specified
    - Breakpoints documented
    - What changes at each breakpoint
  assets:
    - Icons as SVG (not PNG)
    - Images optimized (WebP preferred, fallback to JPEG/PNG)
    - Illustrations as SVG where possible
  tokens:
    - Design tokens in JSON/YAML for engineering
    - CSS custom properties or Tailwind config
```

### CSS Architecture

```yaml
css_approach:
  utility_first:    # Tailwind — recommended for speed
    config: "tailwind.config.js with design tokens"
    custom: "only for complex animations or one-offs"
    
  component_based:  # CSS Modules / Styled Components
    naming: "BEM or CSS Modules auto-scoping"
    structure: "one CSS file per component"
    
  rules:
    - "Never use !important (fix specificity instead)"
    - "No magic numbers — use spacing/size tokens"
    - "Mobile-first media queries (min-width)"
    - "CSS custom properties for theming"
    - "Prefer flexbox for 1D, grid for 2D layouts"
    - "aspect-ratio over padding-top hack"
    - "gap over margin for flex/grid children"
    - "container queries for truly reusable components"
```

---

## Phase 10: Advanced Patterns

### Design System Token Structure

```yaml
# design-tokens.yaml — source of truth
tokens:
  color:
    primitive:
      blue-500: "#3b82f6"
      # ... full palette
    semantic:
      primary: "{color.primitive.blue-500}"
      error: "{color.primitive.red-500}"
    component:
      button-primary-bg: "{color.semantic.primary}"
      button-primary-hover: "{color.primitive.blue-600}"
      
  spacing:
    xs: "4px"
    sm: "8px"
    md: "16px"
    lg: "24px"
    xl: "32px"
    
  typography:
    heading-1:
      font-family: "{font.heading}"
      font-size: "36px"
      line-height: "1.25"
      font-weight: "700"
```

### Motion Design System

| Category | Duration | Easing | Use |
|----------|----------|--------|-----|
| Micro | 100-200ms | ease-out | Toggles, checkboxes, button press |
| Meso | 200-400ms | ease-out | Panels, dropdowns, tooltips |
| Macro | 400-700ms | ease-in-out | Page transitions, modals |
| Orchestrated | 300-800ms + stagger | ease-out + 50ms delay | List loading, dashboard entry |

**Reduce motion:** Always respect `prefers-reduced-motion: reduce` — remove non-essential animation.

### Performance-Conscious Design

- **Images**: use `loading="lazy"`, `srcset` for responsive, WebP format
- **Fonts**: `font-display: swap`, subset to used characters, max 2 families
- **Above the fold**: critical CSS inlined, hero image preloaded
- **Icons**: SVG sprite or icon font, not individual PNGs
- **Animations**: `transform` and `opacity` only (GPU-accelerated), avoid animating `width`/`height`/`top`/`left`

### Internationalization Design

- **RTL support**: use logical properties (`margin-inline-start` not `margin-left`)
- **Text expansion**: German/Finnish text can be 30-40% longer than English — design for it
- **Date/number formats**: vary by locale — use `Intl` APIs
- **Icons**: avoid culturally specific symbols (mailbox, thumbs up meaning varies)
- **String length**: design for 2× the English character count

---

## Natural Language Commands

- "Design a [type] page for [audience]" → Run full Phase 1-9
- "Create a color system for [brand]" → Phase 3 colors
- "Review this design" → Apply Phase 8 rubric
- "Make this responsive" → Apply Phase 6 patterns
- "Accessibility audit" → Run Phase 7 checklist
- "Design a [component]" → Phase 4 patterns
- "Create design tokens" → Phase 10 token structure
- "Dark mode this" → Phase 3 dark mode strategy
- "Improve the typography" → Phase 3 typography system
- "Add animations" → Phase 5 interaction patterns
- "Prepare handoff" → Phase 9 checklist
- "Build a design system" → Full Phase 3 + 10

---

*Built by AfrexAI — turning design methodology into agent intelligence.*

