diff --git a/docs/superpowers/plans/2026-05-31-m4-look-good.md b/docs/superpowers/plans/2026-05-31-m4-look-good.md new file mode 100644 index 0000000..ce75cb8 --- /dev/null +++ b/docs/superpowers/plans/2026-05-31-m4-look-good.md @@ -0,0 +1,625 @@ +# M4 — "Look good" 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:** Restyle the AntiDrift web UI into a cockpit-style, state-aware stacked HUD, split CSS/JS out of the inline HTML, and polish the review screen — with zero behavior changes. + +**Architecture:** The UI is a single embedded static bundle served by `internal/web`. Today everything lives inline in `static/index.html`. We split it into `index.html` + `app.css` + `app.js`, add Go routes to serve the two new assets from the existing `embed.FS`, then rework the client markup into reusable "band" rows whose accent color is driven by a `data-state` attribute on `
`. All SSE wiring, element ids, and POST endpoints are preserved, so the existing Go endpoint tests keep passing. + +**Tech Stack:** Go 1.26, Gin, `embed.FS`, server-sent events; plain HTML/CSS/vanilla JS (no framework, no build step). Tests: stdlib `testing` + `net/http/httptest`. + +--- + +## Reference: shared CSS class vocabulary + +These class/attribute names are used by BOTH `app.css` and `app.js`. Keep them identical across tasks: + +- `
` — `data-state` ∈ `locked | planning | active | nudge | drift | review`. Drives `--accent`. +- `.band` — a horizontal HUD row (top divider + padding). `.band:first-child` has no top border. +- `.statusband` — the top band; shows the state pill + status meta, takes a thicker accent top border. +- `.pill` — uppercase state label, colored by `--accent`. +- `.status-meta` — dim text beside the pill (e.g. "on task · 7 switches"). +- `.timer` — large tabular-nums countdown. +- `.action` — the next-action line. `.meta` — dim secondary text (e.g. "done when: …"). +- `.evidence` (band) with children `.now`, `.buckets` (`