# Mockup → shadcn class translation map Source of truth for the UI overhaul. Every per-phase page port translates mockup classes mechanically using this map. If a mockup uses a class not in this map, **halt and update the map first** — do not invent ad-hoc replacements during a port. The original May 2026 mockups were Tailwind v3 play-CDN pages with their own token classes. They now live in [`mockups/`](../mockups/README.md), already ported to the classes below and to Tailwind v4, so the map only matters when translating an older mock or snippet. ## Token reference (CSS variables) | Mockup variable | shadcn variable in `tailwind/input.css` | Tailwind utility | | ----------------- | ----------------------------------------- | ---------------------------- | | `--bg` | `--background` | `bg-background` | | `--surface` | `--card` | `bg-card` | | `--elevated` | `--accent` | `bg-accent` | | `--border` | `--border` | `border-border` | | `--border-strong` | `--border-strong` (new — added in Task 3) | `border-border-strong` | | `--fg` | `--foreground` | `text-foreground` | | `--fg-2` | `--muted-foreground` | `text-muted-foreground` | | `--fg-3` | `--muted-foreground` at 70% opacity | `text-muted-foreground/70` | | `--focus` | `--ring` | `focus-visible:outline-ring` | | `--link` | `--primary` | `text-primary` | | `--success` | `--success` | `text-success`, `bg-success` | | `--warn` | `--warning` | `text-warning` | | `--danger` | `--destructive` | `text-destructive` | Utilities reach these variables through the `@theme inline` block in `tailwind/input.css`; a new token needs a `--color-*` entry there too. ## Utility classes | Mockup class | shadcn replacement | Notes | | ---------------------- | ----------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------- | | `mono` | `font-mono` | | | `fg2` | `text-muted-foreground` | | | `fg3` | `text-muted-foreground/70` | | | `b` (border container) | `border-border` | combine with `border` Tailwind utility | | `bs` (stronger border) | `border-border-strong` | requires the `--border-strong` token (Task 3) | | `surface` | `bg-card` | | | `elevated` | `bg-accent` | | | `hover-row` | `hover:bg-accent` | apply on table rows / list items | | `link` | `text-primary` | | | `tab-active` | `text-foreground border-foreground` | apply to active tab anchor | | `prose` | `prose` | Long-form Markdown (README, PR description). From `@tailwindcss/typography`, loaded with `@plugin` in `tailwind/input.css`; pair with `dark:prose-invert`. | ## Tailwind v4 names The build runs Tailwind v4, which moved several scales down a step. Mockups and shadcn snippets written for v3 still use the old names; translate them: | v3 name | v4 name | | ----------------------------------------------------- | ---------------------------------------------------------------------- | | `shadow-sm` | `shadow-xs` | | `shadow` | `shadow-sm` | | `rounded-sm` | `rounded-xs` | | `rounded` | `rounded-sm` | | `blur-sm`, `backdrop-blur-sm` | `blur-xs`, `backdrop-blur-xs` | | `outline-none` | `outline-hidden` (v4's `outline-none` only sets `outline-style: none`) | | `ring` | `ring-3` (a bare `ring` is 1px in v4) | | `flex-shrink-0`, `flex-grow` | `shrink-0`, `grow` | | `bg-opacity-50` and the other `*-opacity-*` utilities | an opacity modifier on the color, e.g. `bg-black/50` | `rounded-xs`, `rounded-md` and `rounded-lg` follow `--radius`; `rounded-sm` is a fixed 0.25rem. `space-y-*` and `divide-y` put their margin or border on every child except the last. A last child that renders nothing (a hidden input, `