docs: add terminal theme redesign implementation plan

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-05-18 04:50:06 -06:00
parent fa2c943817
commit 783359af98

View File

@@ -0,0 +1,527 @@
# 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 5180 | Modify | CSS variables block for terminal theme |
| `style.css` lines 702814 | 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 761775)
- [ ] **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 777814)
- [ ] **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 710759)
- [ ] **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 791814)
- [ ] **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)"
```