# 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` (`