Cross-device patterns
Every responsive-sensitive component, rendered together. Minimum target is 48px. Nav collapses at 720px. Console width is 1080px.
Local navigation
Forms
Overlays
Tabs
Space
Container queries. How much room does the component have?
Input
Capability detection. Pointer, hover, keyboard.
Environment
Reduced motion, contrast, safe areas.
Wide table
| Axis | Question | Mechanism | Wrong tool | Owner |
|---|---|---|---|---|
| Space | How much room? | Container queries | Viewport queries | Component |
| Input | Pointer or touch? | Capability detection | User-agent sniffing | Component |
| Environment | What does the device need? | env() and prefers-* | Assumption | Tokens |
Icons
Rendered through <Icon name="..." />. No page imports an icon library: only packages/ui/src/icons/providers/ does, which is why the provider can be swapped without editing a page. pnpm lint:iconsenforces that mechanically.
Inline with text, sized in em so it tracks the type: external link.
Cards
Container density
Padding drops when the slot narrows.
Long string
https://example.com/a/very/long/path/that/would/otherwise/overflow/at/320px