Patterns
Transitions, states, keyboard navigation, icons, and accessibility.
Transitions
All transitions use 150ms ease unless specified otherwise.
--transition-fast: 0.1s ease;
--transition-base: 0.15s ease;
--transition-slow: 0.3s ease;Hover States
List rows
Background → lightest gray
Buttons
Slight darkening of background
Action icons
Background color appears
Links
Underline appears
Focus States
--focus-ring-color: var(--mantine-color-ember-5);
--focus-ring-width: 2px;
--focus-ring-offset: 2px;Selection States
Single selection
Light accent background (Clay-0)
Multi-selection
Same + checkbox visible
Range selection
Shift+click extends selection
Keyboard Navigation
Arrow Up/Down
Navigate lists/timeline
Enter
Confirm selection/action
Escape
Close modal/clear selection
Home/End
Jump to first/last item
Cmd+A
Select all (in context)
Cmd+Shift+E
Export to Markdown
Icons
Library
Use Lucide React for all icons.
Size Conventions
Action icons (in rows)
14px
List item icons
16px
Header icons
18px
Empty state icons
24-32px
Color Usage
Default
Stone (#A1A1AA) or gray-6
Active/Selected
Ember or current accent
Semantic
Corresponding semantic color
In dark backgrounds
Paper (#FFFFFF)
Emoji Conversion
Type icons from emoji are converted via getIconFromEmoji():
Finds closest Lucide icon match
Falls back to
fileicon
Accessibility
Color Contrast
All text/background combinations meet WCAG AA standards:
Carbon on Canvas: 16.7:1
Graphite on Canvas: 7.3:1
Stone on Canvas: 3.5:1 (large text only)
Focus Management
All interactive elements have visible focus rings
Modals trap focus within
Escape key closes modals/menus
Skip links for main content
ARIA Labels
All icon buttons have
aria-labelLive regions for dynamic content (
aria-live="polite")Proper heading hierarchy
Form labels associated with inputs
Quick Reference
Common Patterns
Color Variables in Components
Last updated