# T05 — Legacy Style Debt Cleanup Date: 2026-03-27 Project: `recipe-manager/frontend` ## Scope Conservative cleanup of clearly obsolete style artifacts after token/primitive contract stabilization. ## Changes made ### 1) Removed unused legacy scaffold stylesheet - Deleted: `frontend/src/App.css` - Rationale: file contained Vite starter/demo selectors (`.hero`, `.counter`, `#next-steps`, etc.) and is not imported by `main.tsx` or `App.tsx`. - Risk: low (no import path, no app references). ### 2) Removed dead legacy helper selector from global stylesheet - Updated: `frontend/src/index.css` - Removed legacy `.card` selector alias block and kept `.shadow-card` (still actively used). - Before: `.card, .shadow-card { ... }` plus `.shadow-card { ... }` - After: `.shadow-card { ... }` only. - Rationale: avoid duplicate/ambiguous card styling pathways now that `ui-card` is the primitive contract. ## Validation - Verified no `App.css` imports in current frontend source. - Verified no `className="card"` usage in current frontend source. - Build check: `npm run build` passes. ## Deferred legacy debt (intentionally not removed) 1. **`.shadow-card` utility** in `index.css` — still used across pages/components (`RecipeForm`, `RecipeListPage`, `RecipeDetailPage`), so not safe to remove in T05. 2. **`.animate-slide-in` + `@keyframes slide-in`** — used by `components/Toast.tsx`; retained. 3. **Residual inline style usage from `theme.ts`** (e.g., `Toast`, `RecipeCard`) — not removed here to avoid broader UI behavior changes; belongs to follow-up conversion task. 4. **Responsive global utility overrides in `index.css` (`.max-w-*`, `.p-*`)** — potentially legacy/scaffold-ish but high blast-radius; defer pending design QA. ## Recommendation (next task) Proceed with **T06 — Guardrails + Lightweight Governance**: - codify that new UI must use `ui-*`/primitives and tokenized vars, - add a checklist to prevent re-introducing dead aliases and raw palette drift. ## Ready for review **Yes**