Telegram (ask questions / claim the issue here first): https://t.me/+DOylgFv1jyJlNzM0
Why this matters
A shared helper exists at frontend/src/app/utils/cn.ts (clsx + tailwind-merge) and is imported by ui/Input.tsx and ui/Modal.tsx. But ui/Button.tsx (line 8), ui/Card.tsx (line 8) and ui/EmptyState.tsx (line 9) each copy-paste an identical local function cn(...). This is duplicated logic within the same design-system folder that should use one source of truth.
Acceptance criteria
Files to touch
frontend/src/app/components/ui/Button.tsx
frontend/src/app/components/ui/Card.tsx
frontend/src/app/components/ui/EmptyState.tsx
frontend/src/app/utils/cn.ts
Out of scope
- Changing the cn implementation itself
Why this matters
A shared helper exists at frontend/src/app/utils/cn.ts (clsx + tailwind-merge) and is imported by ui/Input.tsx and ui/Modal.tsx. But ui/Button.tsx (line 8), ui/Card.tsx (line 8) and ui/EmptyState.tsx (line 9) each copy-paste an identical local function cn(...). This is duplicated logic within the same design-system folder that should use one source of truth.
Acceptance criteria
Files to touch
frontend/src/app/components/ui/Button.tsxfrontend/src/app/components/ui/Card.tsxfrontend/src/app/components/ui/EmptyState.tsxfrontend/src/app/utils/cn.tsOut of scope