# Terminal Theme Redesign 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:** Replace the green-on-black terminal theme with a Dracula-palette soft-modern style (purple accent, rounded cards, dot-matrix background). **Architecture:** All changes are in `style.css` — update CSS variable overrides in the `html[data-design-theme="terminal"]` block, then update each component override section below it. No JS changes needed; the forced-dark logic and font chain stay unchanged. **Tech Stack:** Vanilla CSS, Vite. No test suite — verification is visual via `npm start`. **Spec:** `docs/superpowers/specs/2026-05-18-terminal-theme-design.md` --- ## File Map | File | Action | What changes | |---|---|---| | `style.css` lines 51–80 | Modify | CSS variables block for terminal theme | | `style.css` lines 702–814 | Modify | All terminal component overrides | --- ### Task 1: Update CSS variable tokens **Files:** - Modify: `style.css:51-80` - [ ] **Step 1: Replace the terminal theme variable block** Find this block (starts at line 51): ```css html[data-design-theme="terminal"] { color-scheme: dark; --accent: #33ff00; --accent-rgb: 51, 255, 0; --accent-2: #33ff00; --accent-3: #33ff00; --accent-secondary-rgb: 255, 176, 0; --page-gradient: #0a0a0a; --page-texture: repeating-linear-gradient( to bottom, rgba(var(--accent-rgb), 0.035) 0px, rgba(var(--accent-rgb), 0.035) 1px, transparent 2px, transparent 4px ), radial-gradient( circle at 50% 50%, rgba(var(--accent-rgb), 0.05) 0%, transparent 60% ); --title-gradient: none; --control-bg: rgba(10, 10, 10, 0.85); --control-border: rgba(var(--accent-rgb), 0.35); --control-inset: transparent; --control-fg: var(--accent); } ``` Replace it with: ```css html[data-design-theme="terminal"] { color-scheme: dark; --accent: #bd93f9; --accent-rgb: 189, 147, 249; --accent-2: #ff79c6; --accent-3: #8be9fd; --accent-secondary-rgb: 255, 121, 198; --page-gradient: #282a36; --page-texture: radial-gradient( circle, rgba(98, 114, 164, 0.55) 1px, transparent 1px ); --title-gradient: linear-gradient(90deg, #bd93f9 0%, #ff79c6 100%); --control-bg: rgba(40, 42, 54, 0.92); --control-border: #44475a; --control-inset: transparent; --control-fg: #f8f8f2; } ``` - [ ] **Step 2: Start dev server and verify background color changed** ```bash npm start ``` Open the app, switch design theme to **Terminal**. The page background should now be dark blue-purple (`#282a36`) with a faint dot grid, not pure black. The dot grid may be hard to see at first — look closely at a light source on a dark background. --- ### Task 2: Fix dot-matrix background size + body text **Files:** - Modify: `style.css` — terminal `body` rule (~line 702) and add `body::before` size rule - [ ] **Step 1: Update the terminal body rule** Find: ```css html[data-design-theme="terminal"] body { font-family: ui-monospace, "JetBrains Mono", "Fira Code", "VT323", Menlo, Consolas, "Liberation Mono", monospace; letter-spacing: 0.01em; color: var(--accent); } ``` Replace with: ```css html[data-design-theme="terminal"] body { font-family: ui-monospace, "JetBrains Mono", "Fira Code", "VT323", Menlo, Consolas, "Liberation Mono", monospace; letter-spacing: 0.01em; color: #f8f8f2; } ``` - [ ] **Step 2: Add body::before background-size rule immediately after** After the `body` rule above, insert: ```css html[data-design-theme="terminal"] body::before { background-size: 20px 20px; } ``` - [ ] **Step 3: Verify in browser** The dot matrix texture should now tile visibly at 20px intervals across the `#282a36` background. Body text should be `#f8f8f2` (off-white) instead of green. --- ### Task 3: Update title styling **Files:** - Modify: `style.css` — terminal `.title` and `.title::after` rules (~lines 761–775) - [ ] **Step 1: Update the title rule** Find: ```css html[data-design-theme="terminal"] .title { background: none; -webkit-text-fill-color: currentColor; color: var(--accent); text-shadow: 0 0 5px rgba(var(--accent-rgb), 0.5); text-transform: uppercase; letter-spacing: 0.04em; position: relative; } ``` Replace with: ```css html[data-design-theme="terminal"] .title { background: var(--title-gradient); -webkit-background-clip: text; background-clip: text; -webkit-text-fill-color: transparent; color: transparent; text-shadow: none; text-transform: uppercase; letter-spacing: 0.04em; position: relative; } ``` - [ ] **Step 2: Update the cursor rule to keep it visible** The `::after` pseudo-element inherits `-webkit-text-fill-color: transparent` from the title, which would hide the cursor. Fix it explicitly. Find: ```css html[data-design-theme="terminal"] .title::after { content: "\2588"; margin-left: 8px; animation: terminal-cursor-blink 1s step-end infinite; } ``` Replace with: ```css html[data-design-theme="terminal"] .title::after { content: "\2588"; margin-left: 8px; animation: terminal-cursor-blink 1s step-end infinite; -webkit-text-fill-color: #bd93f9; } ``` - [ ] **Step 3: Verify in browser** The page title should now show a purple-to-pink gradient text (uppercase). The blinking `█` cursor should be solid purple (`#bd93f9`), not transparent. --- ### Task 4: Update card styling **Files:** - Modify: `style.css` — all terminal `.card` rules (~lines 777–814) - [ ] **Step 1: Update the base card rule** Find: ```css html[data-design-theme="terminal"] .card { border-radius: 0; background: transparent; border: 1px solid rgba(var(--accent-rgb), 0.35); box-shadow: none; backdrop-filter: none; -webkit-backdrop-filter: none; transform: none; } ``` Replace with: ```css html[data-design-theme="terminal"] .card { border-radius: 10px; background: #313244; border: 1px solid #44475a; box-shadow: 0 4px 16px rgba(0, 0, 0, 0.45); backdrop-filter: none; -webkit-backdrop-filter: none; transform: translateY(0); transition: all 0.2s ease; } ``` - [ ] **Step 2: Add pin card variant** After the base card rule, add: ```css html[data-design-theme="terminal"] .card.pin { background: #383a4a; } ``` - [ ] **Step 3: Update card h2, p, and beian (split the combined rule)** Find: ```css html[data-design-theme="terminal"] .card h2, html[data-design-theme="terminal"] .card p, html[data-design-theme="terminal"] .beian a { color: var(--accent); text-shadow: 0 0 5px rgba(var(--accent-rgb), 0.25); } ``` Replace with: ```css html[data-design-theme="terminal"] .card h2 { color: #f8f8f2; text-shadow: none; } html[data-design-theme="terminal"] .card p { color: #6272a4; text-shadow: none; } ``` - [ ] **Step 4: Update card hover/focus** Find: ```css html[data-design-theme="terminal"] .card:hover, html[data-design-theme="terminal"] .card:focus { background: rgba(var(--accent-rgb), 0.06); border-color: var(--accent); box-shadow: none; } ``` Replace with: ```css html[data-design-theme="terminal"] .card:hover, html[data-design-theme="terminal"] .card:focus { background: #313244; border-color: #bd93f9; box-shadow: 0 0 0 1px rgba(189, 147, 249, 0.25), 0 8px 28px rgba(189, 147, 249, 0.15), 0 4px 12px rgba(0, 0, 0, 0.5); transform: translateY(-2px); } ``` - [ ] **Step 5: Update hover h2 color** Find: ```css html[data-design-theme="terminal"] .card:hover h2, html[data-design-theme="terminal"] .card:focus h2 { color: var(--accent); } ``` Replace with: ```css html[data-design-theme="terminal"] .card:hover h2, html[data-design-theme="terminal"] .card:focus h2 { color: #bd93f9; } ``` - [ ] **Step 6: Add hover p color rule (currently missing)** Immediately after the hover h2 rule, add: ```css html[data-design-theme="terminal"] .card:hover p, html[data-design-theme="terminal"] .card:focus p { color: #cdd6f4; } ``` - [ ] **Step 7: Verify in browser** Cards should now have rounded corners, a dark-purple surface (`#313244`), and lift with a purple glow on hover. Card titles should be off-white at rest and turn purple on hover. Card descriptions should be muted (`#6272a4`) at rest and lighten on hover. --- ### Task 5: Update controls and dropdown **Files:** - Modify: `style.css` — terminal `.design-theme-button`, `.theme-toggle`, `.design-theme-list` rules (~lines 710–759) - [ ] **Step 1: Update the base button/toggle rule** Find: ```css html[data-design-theme="terminal"] .design-theme-button, html[data-design-theme="terminal"] .theme-toggle { border-radius: 0; box-shadow: none; backdrop-filter: none; -webkit-backdrop-filter: none; border: 1px solid rgba(var(--accent-rgb), 0.55); } ``` Replace with: ```css html[data-design-theme="terminal"] .design-theme-button, html[data-design-theme="terminal"] .theme-toggle { border-radius: 8px; box-shadow: none; backdrop-filter: none; -webkit-backdrop-filter: none; border: 1px solid #44475a; } ``` - [ ] **Step 2: Update button/toggle hover** Find: ```css html[data-design-theme="terminal"] .design-theme-button:hover, html[data-design-theme="terminal"] .theme-toggle:hover { background: var(--accent); color: #0a0a0a; border-color: var(--accent); transform: none; } ``` Replace with: ```css html[data-design-theme="terminal"] .design-theme-button:hover, html[data-design-theme="terminal"] .theme-toggle:hover { background: rgba(189, 147, 249, 0.08); color: #bd93f9; border-color: #bd93f9; transform: none; } ``` - [ ] **Step 3: Update dropdown list** Find: ```css html[data-design-theme="terminal"] .design-theme-list { border-radius: 0; box-shadow: none; backdrop-filter: none; -webkit-backdrop-filter: none; background: rgba(10, 10, 10, 0.92); border: 1px solid rgba(var(--accent-rgb), 0.55); } ``` Replace with: ```css html[data-design-theme="terminal"] .design-theme-list { border-radius: 10px; box-shadow: none; backdrop-filter: none; -webkit-backdrop-filter: none; background: rgba(40, 42, 54, 0.96); border: 1px solid #44475a; } ``` - [ ] **Step 4: Update dropdown option hover/selected** Find: ```css html[data-design-theme="terminal"] .design-theme-list [role="option"]:hover, html[data-design-theme="terminal"] .design-theme-list [role="option"][aria-selected="true"] { background: var(--accent); color: #0a0a0a; } ``` Replace with: ```css html[data-design-theme="terminal"] .design-theme-list [role="option"]:hover, html[data-design-theme="terminal"] .design-theme-list [role="option"][aria-selected="true"] { background: rgba(189, 147, 249, 0.15); color: #bd93f9; } ``` - [ ] **Step 5: Verify in browser** The theme selector button should have rounded corners and a dark surface. Hovering it should show a subtle purple tint (not green invert). Opening the dropdown should show a rounded dark panel; hovering or selecting an option highlights it in purple. --- ### Task 6: Update beian footer **Files:** - Modify: `style.css` — terminal `.beian a` and `.beian a:hover` rules (~lines 791–814) - [ ] **Step 1: Add beian rest-state rule** The old combined rule (`.card h2, .card p, .beian a`) was split in Task 4, which removed the beian rest-state color. Insert a new rule immediately **before** the existing `.beian a:hover` rule: ```css html[data-design-theme="terminal"] .beian a { color: #6272a4; text-shadow: none; } ``` - [ ] **Step 2: Update beian hover** Find: ```css html[data-design-theme="terminal"] .beian a:hover { background: var(--accent); color: #0a0a0a; text-shadow: none; } ``` Replace with: ```css html[data-design-theme="terminal"] .beian a:hover { color: #bd93f9; background: none; text-shadow: none; } ``` - [ ] **Step 3: Verify in browser** The footer ICP link should appear in muted purple-grey (`#6272a4`) at rest and turn accent purple (`#bd93f9`) on hover, with no background invert. --- ### Task 7: Format, QA, and commit **Files:** - Modify: `style.css` (formatter pass) - [ ] **Step 1: Run Prettier** ```bash npm run fmt ``` Expected: `style.css` reformatted with no errors. - [ ] **Step 2: Full visual QA checklist** With `npm start` running, switch to the Terminal theme and check each item: | Element | Expected | |---|---| | Page background | `#282a36` dark blue-purple with subtle 20px dot matrix | | Title | Purple-to-pink gradient text, uppercase, blinking purple `█` cursor | | Cards at rest | `#313244` rounded (10px), `#44475a` border, subtle shadow | | Pin card | Slightly lighter surface `#383a4a` | | Card h2 at rest | `#f8f8f2` off-white | | Card p at rest | `#6272a4` muted purple-grey | | Card on hover | Purple border glow, lifts 2px, h2 → `#bd93f9`, p → `#cdd6f4` | | Theme selector button | Rounded 8px, dark surface, purple hover tint (no invert) | | Dropdown panel | Rounded 10px, dark surface, purple option highlight | | Dark toggle | Greyed out / cursor: not-allowed (unchanged) | | Beian footer | `#6272a4` at rest, `#bd93f9` on hover, no bg invert | | Other themes | Completely unaffected — spot-check Cyberpunk and Fluent | - [ ] **Step 3: Commit** ```bash git add style.css git commit -m "redesign: terminal theme — Dracula purple focus (soft modern cards, dot matrix bg)" ```