--- name: cleanup-card-item-list-and-share-modal-palette classification: feature success_metric: | No hardcoded Tailwind palette classes (`bg-purple-*`, `bg-blue-*`, `bg-gray-*` 100-900 range, `text-gray-{500,600,700,900}`, `bg-white`, `border-gray-200`, etc.) remain in the interior of `components/CardItem.js` list-mode or `components/ShareModal.js`. Both render correctly in dark theme. Verified by visual diff and a targeted lint sweep. skip: - ia - ux - arch status: closed closed: 2026-06-04 prs: - 128 # Brief 1 — CardItem.js list-mode token sweep - 129 # Brief 2 — ShareModal.js interior token sweep created: 2026-06-04 depends_on: - design-sweep-pass # PR #117 — established the token migration pattern --- # Convoy: cleanup-card-item-list-and-share-modal-palette Targeted palette cleanup. Parallel companion to `unify-glass-panel-surfaces` — that convoy migrates panel *surfaces*; this one cleans up the *interior content* (rows, badges, text, buttons) of two specific files whose interiors were not addressed by PR #117 because they're not panel surfaces — they're nested content inside surfaces that were already on the system. ## Why Two files left over after the 2026-06-04 design sweep: 1. **`components/CardItem.js` list-mode** (L183–284) — the list-view layout (when `viewMode === 'list'`) is entirely hardcoded Tailwind palette. The grid-mode (L290+) was already migrated; list-mode wasn't. `border-gray-200`, `bg-purple-50`, `text-gray-900`, `text-gray-600`, `text-green-600`, `bg-blue-100 text-blue-800` — none of these have dark-mode variants. In dark theme, the list view renders unreadable (light text on light backgrounds) or off-brand (purple/blue badges in an ember palette app). 2. **`components/ShareModal.js`** interior — the modal SURFACE is correct (delegates to `` → ``), and the user-search dropdown + email-invite card were updated in PR #117. But the interior rows still have: - `bg-purple-600` avatar circles for current user (L194, L240). - `bg-gray-50` current-user permission row (L238) — invisible in dark mode. - `bg-gray-100 rounded` permission badge (L272) — light-only. - `bg-gray-50 border-gray-300 text-gray-600` share-link input (L287) — invisible in dark mode. - `bg-blue-600 hover:bg-blue-700` Copy-link button (L294) — off-palette (should be ember). - `text-gray-{500,700,900}` text colors throughout — light-only. Note ShareModal is the primary collaboration entry point; the permission rows and Copy-link button are visited every time a user invites a collaborator. Both files are token-only swaps. No structural changes, no component swaps, no glass-panel migration. ## Scope ### In scope #### Brief 1 — `CardItem.js` list-mode token sweep Replace every hardcoded color in lines ~183–284 with the appropriate `var(--*)` token via inline style. Categories: - Background fills: `bg-purple-50` (selected row), `bg-white` → `var(--bg-secondary)` or `var(--bg-tertiary)` per role; selected state uses `var(--accent-ember)` + low alpha as background. - Borders: `border-gray-200` / `border-gray-300` → `var(--border)`. Selected state border `border-purple-600` → `var(--accent-ember)`. - Text: `text-gray-900` → `var(--text-primary)`, `text-gray-600` / `text-gray-500` → `var(--text-secondary)`, `text-green-600` (positive value indicators) → `var(--accent-flame)` or keep `#16a34a` if semantic green matters more than brand. - Badges (`bg-blue-100 text-blue-800` etc.): convert to `var(--bg-tertiary)` + `var(--text-primary)` or `var(--accent-ember)` per badge role (game, rarity, type). - Buttons / icons: `text-purple-600` (selection indicator) → `var(--accent-ember)`. Acceptance: visually inspect `CardItem` list-mode in BOTH themes. All text must be legible, all interactive states (hover, selected) must have a visible delta against the row background. **Files:** `components/CardItem.js`. **Risk:** LOW — purely cosmetic token swaps; no layout changes. #### Brief 2 — `ShareModal.js` interior token sweep Lines roughly 230–310. Targets: - **Avatar circles** (L194, L240): `bg-purple-600` → `linear-gradient(135deg, var(--accent-ember), var(--accent-flame))` (matches the UserMenu avatar gradient style from `components/ui/TopSearchBar.js`). - **Current-user row container** (L238): `bg-gray-50 rounded-lg` → `var(--bg-secondary)` + `rounded-xl`, or `var(--bg-tertiary)` for slightly more contrast. - **Permission badge** (L272): `bg-gray-100 rounded` → `var(--bg-tertiary)` + `rounded-xl` + `var(--text-secondary)`. - **Share-link readonly input** (L283–288): `bg-gray-50 border-gray-300 text-gray-600` → tokenize against `var(--bg-secondary)`, `var(--border)`, `var(--text-primary)`; alternatively use the `.input-field` class (already in `globals.css`). - **Copy-link button** (L290–298): `bg-blue-600 text-white hover:bg-blue-700` → replace with the `