# Color Migration v5→v6 Implementation Plan > **For agentic workers:** REQUIRED SUB-SKILL: Use superpowers:subagent-driven-development (recommended) or superpowers:executing-plans to implement this plan task-by-task. Steps use checkbox (`- [ ]`) syntax for tracking. **Goal:** Migrate all color values in the frontend from design system v5 (ember orange accent, shallow surfaces, yellow warning) to v6 (electric blue accent, deeper charcoal surfaces, amber warning, cyan info). **Architecture:** Layer 1 updates CSS custom properties in `index.css` (cascades to ~80% of usage). Layer 2 does find-and-replace on hardcoded `rgba(249,115,22,...)` focus border patterns across ~40 component files. Layer 3 replaces `orange-*` Tailwind classes. Layer 4 updates hardcoded hex values in specific files (BrandLogo, EmptyStateIllustrations, landing page, etc.). Each layer commits independently. **Tech Stack:** React 19, Tailwind CSS v4, CSS custom properties **Spec:** `docs/superpowers/specs/2026-03-29-color-migration-v6-design.md` --- ### Task 1: Update CSS Custom Properties in `index.css` This is the highest-impact change — updating the `@theme` block cascades to every component using Tailwind utility classes. **Files:** - Modify: `frontend/src/index.css` - [ ] **Step 1: Update surface colors in the @theme block** In `frontend/src/index.css`, replace lines 11-18 (the surface color block) with: ```css /* ── Surface colors (Deep Charcoal — sidebar darkest) ─ */ --color-bg-page: #16181f; --color-bg-sidebar: #0e1016; --color-bg-card: #1e2028; --color-bg-card-hover: #252830; --color-bg-input: #252830; --color-bg-code: #12141a; --color-bg-elevated: #2a2d38; --color-bg-raised: #303442; ``` - [ ] **Step 2: Update border colors** Replace lines 28-29 (border colors) with: ```css --color-border-default: #2a2e3a; --color-border-hover: #3d4252; ``` - [ ] **Step 3: Update accent colors** Replace lines 31-35 (accent block) with: ```css /* ── Accent (electric blue) ───────────────────────── */ --color-accent: #60a5fa; --color-accent-hover: #3b82f6; --color-accent-dim: rgba(96,165,250,0.10); --color-accent-text: #93c5fd; ``` - [ ] **Step 4: Update semantic colors (warning + add info)** Replace lines 37-43 (semantic block) with: ```css /* ── Semantic colors ───────────────────────────── */ --color-success: #34d399; --color-success-dim: rgba(52,211,153,0.10); --color-warning: #fbbf24; --color-warning-dim: rgba(251,191,36,0.10); --color-danger: #f87171; --color-danger-dim: rgba(248,113,113,0.10); --color-info: #67e8f9; --color-info-dim: rgba(103,232,249,0.10); ``` - [ ] **Step 5: Update Tailwind semantic mappings** Replace lines 46-64 (Tailwind mappings) with: ```css /* ── Tailwind semantic mappings ─────────────────── */ --color-background: #16181f; --color-foreground: #e2e5eb; --color-card: #1e2028; --color-card-foreground: #e2e5eb; --color-popover: #1e2028; --color-popover-foreground: #e2e5eb; --color-primary: #60a5fa; --color-primary-foreground: #ffffff; --color-secondary: #2a2d38; --color-secondary-foreground: #e2e5eb; --color-muted: #2a2d38; --color-muted-foreground: #848b9b; --color-accent-tw: #2a2d38; --color-accent-foreground: #e2e5eb; --color-destructive: #f87171; --color-destructive-foreground: #ffffff; --color-border: #2a2e3a; --color-input: #252830; --color-ring: #60a5fa; ``` - [ ] **Step 6: Update orange rgba in utility classes** Replace the `btn-primary-v4` hover/active box-shadow values (lines 194-200): ```css &:hover { filter: brightness(1.1); box-shadow: 0 2px 10px rgba(96, 165, 250, 0.2); transform: translateY(-1px); } &:active { box-shadow: 0 0 4px rgba(96, 165, 250, 0.1); transform: translateY(0); } ``` Replace `tab-active-shadow` (line 229): ```css box-shadow: 0 1px 4px rgba(96, 165, 250, 0.08); ``` Replace `card-lift` hover box-shadow (line 237): ```css box-shadow: 0 2px 8px rgba(96, 165, 250, 0.06); ``` - [ ] **Step 7: Verify it compiles** Run: `cd /home/coder/resolutionflow/frontend && npx tsc --noEmit --pretty 2>&1 | head -10` Expected: No errors. - [ ] **Step 8: Commit** ```bash git add frontend/src/index.css git commit -m "feat: migrate index.css to design system v6 color tokens Accent: orange (#f97316) → blue (#60a5fa) Surfaces: deeper charcoal range (#16181f page, #1e2028 card) Warning: yellow (#eab308) → amber (#fbbf24) Info: new cyan (#67e8f9) token added All Tailwind semantic mappings updated to match. Co-Authored-By: Claude Opus 4.6 (1M context) " ``` --- ### Task 2: Replace hardcoded `rgba(249,115,22,...)` focus borders across all components ~40 files use `focus:border-[rgba(249,115,22,0.3)]` or similar patterns for input focus states. This is a mechanical find-and-replace. **Files:** All files listed in the grep output for `rgba(249,115,22` — approximately 40 component and page files. - [ ] **Step 1: Replace all `rgba(249,115,22,` with `rgba(96,165,250,` across the codebase** Run this command to do the replacement: ```bash cd /home/coder/resolutionflow/frontend/src grep -rl 'rgba(249,115,22' --include='*.tsx' --include='*.ts' --include='*.css' | while read f; do sed -i 's/rgba(249,115,22/rgba(96,165,250/g' "$f" done ``` This replaces ALL instances: `rgba(249,115,22,0.3)` → `rgba(96,165,250,0.3)`, `rgba(249,115,22,0.10)` → `rgba(96,165,250,0.10)`, etc. The opacity values stay the same. Note: `index.css` was already updated in Task 1 so this is a no-op for that file's `--color-accent-dim` line. - [ ] **Step 2: Also replace `rgba(249, 115, 22` (with spaces)** Some files may use spaced format: ```bash grep -rl 'rgba(249, 115, 22' --include='*.tsx' --include='*.ts' --include='*.css' | while read f; do sed -i 's/rgba(249, 115, 22/rgba(96, 165, 250/g' "$f" done ``` - [ ] **Step 3: Verify it compiles** Run: `cd /home/coder/resolutionflow/frontend && npx tsc --noEmit --pretty 2>&1 | head -10` Expected: No errors. - [ ] **Step 4: Commit** ```bash cd /home/coder/resolutionflow git add -A frontend/src/ git commit -m "feat: replace all hardcoded orange rgba with blue rgba Mechanical find-and-replace: rgba(249,115,22,...) → rgba(96,165,250,...) across ~40 component and page files. Focus borders, hover glows, and dim backgrounds all now use the blue accent color. Co-Authored-By: Claude Opus 4.6 (1M context) " ``` --- ### Task 3: Replace `orange-*` Tailwind classes ~21 files use `orange-400`, `orange-500`, `orange-600` Tailwind color classes. Replace with blue equivalents. **Files:** All files with `orange-[3456]00` class references. - [ ] **Step 1: Replace orange Tailwind classes with blue equivalents** The mapping: - `orange-300` → `blue-300` - `orange-400` → `blue-400` - `orange-500` → `blue-500` - `orange-600` → `blue-600` Run: ```bash cd /home/coder/resolutionflow/frontend/src grep -rl 'orange-' --include='*.tsx' --include='*.ts' | while read f; do sed -i 's/orange-300/blue-300/g; s/orange-400/blue-400/g; s/orange-500/blue-500/g; s/orange-600/blue-600/g' "$f" done ``` - [ ] **Step 2: Verify it compiles** Run: `cd /home/coder/resolutionflow/frontend && npx tsc --noEmit --pretty 2>&1 | head -10` Expected: No errors. - [ ] **Step 3: Commit** ```bash cd /home/coder/resolutionflow git add -A frontend/src/ git commit -m "feat: replace orange-* Tailwind classes with blue-* equivalents orange-400→blue-400, orange-500→blue-500, orange-600→blue-600 across ~21 component files. Co-Authored-By: Claude Opus 4.6 (1M context) " ``` --- ### Task 4: Update hardcoded hex values in specific files Several files have hardcoded `#f97316`, `#ea580c`, `#fdba74` hex values that don't go through CSS variables. **Files:** - Modify: `frontend/src/components/common/BrandLogo.tsx` - Modify: `frontend/src/components/common/EmptyStateIllustrations.tsx` - Modify: `frontend/src/constants/categoryColors.ts` - Modify: `frontend/src/styles/landing.css` - Modify: `frontend/src/pages/LandingPage.tsx` - Modify: `frontend/src/assets/brand/icon.svg` - Modify: `frontend/src/assets/brand/logo-horizontal.svg` - Modify: `frontend/src/assets/brand/logo-with-tagline.svg` - Modify: Any remaining files from the grep output for `#f97316|#ea580c|#fdba74` - [ ] **Step 1: Update BrandLogo.tsx gradient** In `frontend/src/components/common/BrandLogo.tsx`, replace the gradient on line 22: ```tsx background: 'linear-gradient(135deg, #3b82f6, #60a5fa)', ``` Also update the JSDoc comment on line 9: ```tsx * Brand logo mark: gradient blue square with rounded corners ``` - [ ] **Step 2: Replace all hardcoded orange hex values across the codebase** Run: ```bash cd /home/coder/resolutionflow/frontend/src # #f97316 → #60a5fa (accent) grep -rl '#f97316' --include='*.tsx' --include='*.ts' --include='*.css' --include='*.svg' | while read f; do sed -i 's/#f97316/#60a5fa/g' "$f" done # #ea580c → #3b82f6 (accent-hover) grep -rl '#ea580c' --include='*.tsx' --include='*.ts' --include='*.css' --include='*.svg' | while read f; do sed -i 's/#ea580c/#3b82f6/g' "$f" done # #fdba74 → #93c5fd (accent-text) grep -rl '#fdba74' --include='*.tsx' --include='*.ts' --include='*.css' --include='*.svg' | while read f; do sed -i 's/#fdba74/#93c5fd/g' "$f" done ``` - [ ] **Step 3: Update warning yellow to amber** ```bash cd /home/coder/resolutionflow/frontend/src # #eab308 → #fbbf24 grep -rl '#eab308' --include='*.tsx' --include='*.ts' --include='*.css' | while read f; do sed -i 's/#eab308/#fbbf24/g' "$f" done # rgba(234,179,8 → rgba(251,191,36 grep -rl 'rgba(234,179,8' --include='*.tsx' --include='*.ts' --include='*.css' | while read f; do sed -i 's/rgba(234,179,8/rgba(251,191,36/g' "$f" done ``` - [ ] **Step 4: Fix categoryColors.ts duplicates** After the sed replacements, `frontend/src/constants/categoryColors.ts` will have `#3b82f6` (from `#ea580c`) and `#60a5fa` (from `#f97316`) — but the array already had `#3b82f6` at position 0. Fix the file to have 10 unique colors: ```typescript export const CATEGORY_COLORS = [ '#3b82f6', // blue '#22c55e', // green '#f59e0b', // amber '#ef4444', // red '#8b5cf6', // violet '#0891b2', // cyan '#ec4899', // pink '#60a5fa', // sky blue '#14b8a6', // teal '#6366f1', // indigo ] as const ``` This replaces the old `#ea580c` (deep orange) slot with `#0891b2` (cyan) and keeps `#60a5fa` (sky blue) in the old `#f97316` slot. - [ ] **Step 5: Verify it compiles** Run: `cd /home/coder/resolutionflow/frontend && npx tsc --noEmit --pretty 2>&1 | head -10` Expected: No errors. - [ ] **Step 6: Commit** ```bash cd /home/coder/resolutionflow git add -A frontend/src/ git commit -m "feat: replace hardcoded orange hex values with blue equivalents BrandLogo gradient, EmptyStateIllustrations SVGs, categoryColors, landing page, brand SVG assets, and all remaining files with hardcoded #f97316/#ea580c/#fdba74 values. Also migrates warning #eab308 → #fbbf24 (amber). Co-Authored-By: Claude Opus 4.6 (1M context) " ``` --- ### Task 5: Update landing.css and LandingPage.tsx The landing page has its own CSS file and inline styles with orange references. **Files:** - Modify: `frontend/src/styles/landing.css` - Modify: `frontend/src/pages/LandingPage.tsx` - [ ] **Step 1: Read landing.css and fix any remaining orange references** Read `frontend/src/styles/landing.css` and replace any remaining: - `#f97316` → `#60a5fa` - `#ea580c` → `#3b82f6` - `rgba(249,115,22,...)` → `rgba(96,165,250,...)` - Any old surface colors (`#1a1c23` → `#16181f`, `#22252e` → `#1e2028`, etc.) These should already be handled by Task 2 and Task 4's sed commands, but verify and fix any that were missed (e.g., spaced hex values, different formatting). - [ ] **Step 2: Read LandingPage.tsx and fix any remaining orange references** Read `frontend/src/pages/LandingPage.tsx` and verify all orange references were replaced by the sed commands in Tasks 2 and 4. Fix any remaining manually. - [ ] **Step 3: Verify it compiles** Run: `cd /home/coder/resolutionflow/frontend && npx tsc --noEmit --pretty 2>&1 | head -10` Expected: No errors. - [ ] **Step 4: Commit (if changes were needed)** ```bash cd /home/coder/resolutionflow git add frontend/src/styles/landing.css frontend/src/pages/LandingPage.tsx git commit -m "fix: clean up remaining orange references in landing page Co-Authored-By: Claude Opus 4.6 (1M context) " ``` --- ### Task 6: Update index.html and configuration files **Files:** - Modify: `frontend/index.html` - [ ] **Step 1: Update meta theme-color** In `frontend/index.html`, line 17, replace: ```html ``` with: ```html ``` - [ ] **Step 2: Commit** ```bash cd /home/coder/resolutionflow git add frontend/index.html git commit -m "fix: update meta theme-color to new sidebar color (#0e1016) Co-Authored-By: Claude Opus 4.6 (1M context) " ``` --- ### Task 7: Full build verification and sweep for stragglers **Files:** None (verification only) - [ ] **Step 1: Run full frontend build** Run: `cd /home/coder/resolutionflow/frontend && NODE_OPTIONS="--max-old-space-size=4096" npm run build 2>&1 | tail -20` Expected: Build succeeds with no errors. - [ ] **Step 2: Search for any remaining orange references** Run: ```bash cd /home/coder/resolutionflow/frontend/src echo "=== Remaining #f97316 ===" && grep -r '#f97316' --include='*.tsx' --include='*.ts' --include='*.css' || echo "NONE" echo "=== Remaining #ea580c ===" && grep -r '#ea580c' --include='*.tsx' --include='*.ts' --include='*.css' || echo "NONE" echo "=== Remaining #fdba74 ===" && grep -r '#fdba74' --include='*.tsx' --include='*.ts' --include='*.css' || echo "NONE" echo "=== Remaining rgba(249,115,22 ===" && grep -r 'rgba(249,115,22' --include='*.tsx' --include='*.ts' --include='*.css' || echo "NONE" echo "=== Remaining orange- classes ===" && grep -r 'orange-[3456]00' --include='*.tsx' --include='*.ts' || echo "NONE" echo "=== Remaining #eab308 ===" && grep -r '#eab308' --include='*.tsx' --include='*.ts' --include='*.css' || echo "NONE" ``` Expected: All say "NONE". If any remain, fix them and commit. - [ ] **Step 3: Verify git status is clean** Run: `git status` Expected: Working tree clean (all changes committed).