UI-05: Board card and board-surface polish pass#501
Conversation
Replace hardcoded shadows, borders, and colors in CardItem with token-based CSS custom properties. Add clear visual distinction for hover, focus, selected, disabled, and dragging states. Normalize badge, label, and metadata typography hierarchy using the font scale.
Replace inline Tailwind classes in ColumnLane with scoped CSS using design tokens for spacing, borders, typography, and interactive states. Adds consistent focus-visible rings and token-based card count badges.
Replace hardcoded gap/padding values in BoardCanvas with CSS custom property references from the design token scale.
Replace inline Tailwind utility classes in BoardToolbar with scoped token-based CSS. Adds consistent focus-visible states and normalizes button sizing, typography, and presence badge styling.
Replace inline Tailwind classes in BoardActionRail with scoped CSS using design tokens for spacing, borders, and typography.
Replace inline Tailwind classes in the column creation form with scoped CSS using design tokens for consistent input and button styles.
|
Warning You have reached your daily quota limit. Please wait up to 24 hours and I will start processing your requests again! |
|
You have reached your Codex usage limits for code reviews. You can see your limits in the Codex usage dashboard. |
Self-review finding: the filter count indicator used a hardcoded 10px instead of var(--td-font-xs) from the design token scale.
Adversarial Self-ReviewReviewed the full diff critically. Findings: Fixed
Accepted trade-offs
Behavior preservation check
|
Adversarial Code Review — PR #501I read every line of the diff and every changed file in full, cross-referenced all token references against Bug: Missing combined selected + focus-visible state on CardItemFile:
Fix needed: Add a .td-board-card--selected:focus-visible {
outline: none;
box-shadow: var(--td-focus-ring), 0 0 0 4px rgba(255, 83, 82, 0.15);
border-color: var(--td-border-ember);
background: var(--td-color-ember-dim);
}Inconsistency: Drag handle button not tokenized in CardItemFile: The drag handle button uses a This isn't a regression (the Tailwind classes still work), but it's a notable gap in the stated goal of "replacing hardcoded inline Tailwind utility classes." Inconsistency: Column DnD wrapper not tokenized in BoardCanvasFile: The column drag-and-drop wrapper still uses raw Tailwind utilities ( Behavior change: WIP warning lost emoji indicatorFile: The old WIP warning was Token verification: All clearEvery Accessibility: Mostly improved
Drag-drop: No interference
Summary
The selected+focus-visible conflict is the only item I'd call a blocking issue — it undermines the keyboard navigation experience that this PR explicitly added |
When a card is both selected and focused (the normal case during keyboard navigation), the :focus-visible box-shadow was overriding the selected state due to higher CSS specificity. Add an explicit .td-board-card--selected:focus-visible rule that preserves both the ember selection indicators and the focus ring.
Summary
--td-*variables)focus-visiblerings for keyboard navigation accessibility on all interactive elementsWhat changed
CardItem.vueColumnLane.vueBoardCanvas.vueBoardToolbar.vueBoardActionRail.vueBoardView.vueWhat did NOT change
Test plan
npm run buildpasses (typecheck + vite build)npx vitest --runpasses (115 test files, 1039 tests)Closes #247