# Design — web-ui-rework
> Phase: **design**. Technical design (not implementation) for finishing the
> MUI v9 → shadcn/ui + Tailwind v4 + lucide-react migration and reconciling the
> Manage information architecture to a single, coherent, thin-dashboard UI.
>
> Grounded in `exploration.md` (verified inventory), `proposal.md`, and
> `spec.md` (locked decisions). No source changes in this phase.
## 0. Locked design constraints (do not re-litigate)
These are settled by the spec and bound every decision below:
- **Single design system:** shadcn/ui + Tailwind v4 `@theme` tokens + lucide-react only. Zero `@mui/*` / `@emotion/*` / `recharts` / `d3` at the end; `theme.ts` deleted in slice 1.
- **IA:** Backups becomes a top-level nav item; the Media/Applications surface is named **"Media"** at canonical route **`/media`**; **`/applications` → redirect (replace) to `/media`**, mirroring the existing `/monitoring` → `/observability` redirect in `App.tsx`. Auth (`auth.ts`, `react-oidc-context`) and `react-router-dom` structure otherwise unchanged.
- **TanStack Table:** **visibility-only** parity — pagination, row selection, row click, column visibility. **No sorting, no resizing.**
- **Palette:** primary stays `#4f8cff`; `chart-1..5` tokens **repurposed** as status/Grafana-link semantic cues (not dropped).
- **Density:** comfortable everywhere (`p-4 md:p-6`, `gap-4`); **no compact mode**.
- **Test harness:** Vitest + `@testing-library/react` introduced in slice 1.
- **Delivery:** force-chained PRs, ≤400 changed lines/slice; ~8 slices per exploration §9.
- **Observability model:** thin dashboard, **no in-app charting**, Grafana deep-links preserved.
## 1. MUI → shadcn/ui + Tailwind component mapping table
Authoritative destination for every MUI component present across the 22
`@mui/material` consumers (see exploration §2a for per-file frequency). The 22
files follow this table verbatim; deviation requires a design-note in the
slice's tasks file.
| MUI component | Destination | shadcn primitive / Tailwind pattern | Status |
|---|---|---|---|
| `Typography` | semantic element + text utilities | `
`–``/`
`/`` + `text-* font-*` per the §2 ramp | none needed |
| `Box` | `` + utilities | `
` with flex/grid utilities | none needed |
| `Stack` | `
` flex stack | `
` (or `flex-row gap-*`) | none needed |
| `Grid` | CSS grid `
` | `
` w/ responsive `md:`/`lg:` | none needed |
| `Paper` | bordered surface `
` or `Card` | `
`; prefer `Card` where it already wraps a titled section | none needed |
| `Card` / `CardContent` | shadcn `Card` / `CardContent` | `@/components/ui/card` (Card, CardHeader, CardTitle, CardDescription, CardAction, CardContent, CardFooter) | **present** |
| `Chip` | `Badge` | `@/components/ui/badge` (variants incl. new `success` — §2) | **present** |
| `Button` | `Button` | `@/components/ui/button` (`variant`, `size`) | **present** |
| `IconButton` | `Button size="icon"` | `