# UI Client — Finalization Plan The MVP web client (Phases 1–30, [PLAN.md](PLAN.md)) is functionally complete. This plan finalizes the **web** experience — visual consistency, accessibility, localisation, error UX, installability, and documentation — before the native platform wrappers in [ROADMAP.md](ROADMAP.md). It absorbs the original Phases 33 (PWA) and 35 (Polish), which were pulled forward to here. **This is a finalization pass, not the final word.** After it ships, the owner exercises the whole UI by hand and brings small-nuance fixes; the last stage (F8) is an explicit, open-ended owner-driven refinement loop. The earlier stages are "done" when their acceptance holds; the feature set is "final" only when the owner signs off. Each stage ends with a runnable, reviewable artifact and is gated on the per-stage CI rule (push, watch `go-unit` / `ui-test` to green) before being marked done. --- ## F1 — Visual design system — done Merged to `development` via PR #26 (2026-05-22): a shared design-token system (`ui/frontend/src/lib/theme/`), light/dark theming with a picker and pre-paint guard, and the whole UI migrated onto the tokens. Documented literal exceptions: the battle-scene data-viz palette, overlay scrims, and directional/deliberate drop shadows. The default theme follows the OS (`system`); the account-menu picker pins light or dark. Tokens and conventions live in `ui/docs/design-system.md`. Goal: replace the ad-hoc per-component styling (inline hex colors like `#0a0e1a`, one-off spacing) with a shared design language so every view looks like one product. - `ui/frontend/src/lib/theme/` (or `app.css` `:root`) design tokens: color palette (surface / border / text / accent / danger), spacing scale, radii, typography, focus-ring style — as CSS custom properties. - Migrate components to the tokens (calculator, inspectors, sidebar, tables, lobby, auth) — replace literal hex/px with `var(--…)`. - Topic doc `ui/docs/design-system.md` documenting the tokens and usage. Acceptance: no literal theme colors left in component `