`s | `@bytelyst/ui` `Toast` |
+| Command/nav | none | `@bytelyst/command-palette` (⌘K) |
+| Motion | none | `@bytelyst/motion` (reduced-motion aware) |
+
+**Available shared components (verified exports):**
+
+- `@bytelyst/ui`: `Button` `Input` `Field*` `Modal` `ConfirmDialog` `Badge` `StatusBadge`/`StatusDot`
+ `EmptyState` `Skeleton`/`TableSkeleton` `MetricCard` `EntityCard` `Toast`/`ToastProvider`/`useToast`
+ `AppShell*` `Drawer` `ActionMenu` `FilterBar` `PageHeader` `IconButton` `AlertBanner`
+- `@bytelyst/charts`: `LineChart` `BarChart` `AreaChart` `Donut` `Gauge`
+- `@bytelyst/data-viz`: `Sparkline` `BarSparkline` `KpiCard` `ProgressRing` `Heatmap`
+- `@bytelyst/command-palette`: `CommandPalette` `CommandRegistryProvider` `useCommandPalette`
+- `@bytelyst/motion`: `Reveal` `Stagger` `NumberFlow` … (see showcase `/showcase/motion/all`)
+
+> Aligns with master `docs/ROADMAP.md` Phase 2.1 (UI primitives migration) — this roadmap is the
+> concrete, delegate-ready execution plan and extends it with charts/palette/toast/motion.
+
+---
+
+## Ground rules (non-negotiable)
+
+1. **Scope lock:** edit only files under `dashboards/tracker-web/`. Never edit shared
+ `packages/@bytelyst/*`, the showcase repo, other dashboards/services, or master `docs/ROADMAP.md`.
+2. **Deps:** add shared packages as `"workspace:*"` in this package's `package.json` (they live in
+ the same monorepo — no publish needed). Run `pnpm install` from the repo root after edits.
+3. **Preserve the token system + dark mode.** Do NOT rip out the shadcn OKLCH vars. Bridge `--bl-*`
+ onto them (UX-1) so shared components inherit tracker's theme automatically.
+4. **Tests sacred; no fabrication.** Add tests for new behavior; only check a box after its
+ **Verify** passes. If blocked (e.g. needs live backend), leave `- [ ]` + a one-line note.
+5. **Style preservation:** match existing conventions. No `console.log`. No hardcoded hex/color
+ literals in new code — use tokens / component props. No emojis in code.
+6. **Commits:** one task = one conventional commit (`feat(tracker-web): …` / `refactor(tracker-web): …`),
+ flip the checkbox + paste short-SHA in the same commit. **Do not push** — operator reviews.
+7. **Offline-first verification.** Pages needing auth/live data can't be fully E2E'd here; rely on
+ `typecheck` + `lint` + Vitest render tests + `build`. Mark backend-only checks as deferred.
+
+## Verify commands (from `dashboards/tracker-web`)
+
+```bash
+pnpm typecheck && pnpm lint && pnpm test
+pnpm build # final gate
+```
+
+---
+
+## UX-1 — Foundation: token bridge + Primitives adapter ⟵ do first, everything depends on it
+
+- [x] **1.1** Add `@bytelyst/ui` and `@bytelyst/design-tokens` as `workspace:*` deps; `pnpm install`. (dc01dd02)
+- [x] **1.2** In `src/app/globals.css`, add a **bridge layer** mapping `--bl-*` → existing tracker
+ vars so shared components theme correctly in light + dark. Minimum set (extend as needed):
+ `css
+ :root, .dark {
+ --bl-accent: var(--primary);
+ --bl-accent-foreground: var(--primary-foreground);
+ --bl-bg-canvas: var(--background);
+ --bl-surface-card: var(--card);
+ --bl-text-primary: var(--foreground);
+ --bl-text-secondary: var(--muted-foreground);
+ --bl-text-tertiary: var(--muted-foreground);
+ --bl-border: var(--border);
+ --bl-danger: var(--destructive);
+ --bl-radius-control: var(--radius-md);
+ --bl-radius-card: var(--radius-lg);
+ /* map chart palette: --bl-chart-1 → --chart-1 … */
+ }
+ `
+ Reference the showcase's `globals.css` fallback layer for the full `--bl-*` surface. (dc01dd02)
+- [x] **1.3** Create `src/components/ui/Primitives.tsx` re-exporting the `@bytelyst/ui` components
+ this app needs (`Button` `Input` `Field*` `Modal` `ConfirmDialog` `Badge` `StatusBadge`
+ `EmptyState` `Skeleton`/`TableSkeleton` `MetricCard` `Toast`/`ToastProvider`/`useToast`).
+ All app code imports from this adapter, never `@bytelyst/ui` directly (enables the Phase 1.3
+ UI-drift ratchet later). (dc01dd02)
+- [x] **1.4** Smoke test: a Vitest render test asserting `Button` renders and a `StatusBadge`
+ gets a token-driven class. **Verify:** `pnpm typecheck && pnpm lint && pnpm test && pnpm build`. (dc01dd02)
+
+## UX-2 — Migrate dashboard controls to primitives
+
+- [ ] **2.1** `src/app/dashboard/items/page.tsx`: replace raw search `
`, the 3 filter
+ `