Files
home/docs/superpowers/plans/2026-05-18-terminal-theme-redesign.md
2026-05-18 04:50:06 -06:00

528 lines
13 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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)"
```