···8686 - Borders: `border-gray-300 dark:border-slate-700`
8787 - Interactive elements: `hover:bg-gray-100 dark:hover:bg-gray-800`
88888989+**Reduced Motion Support:**
9090+- Respect `prefers-reduced-motion` for decorative and dramatic animations
9191+- Use `motion-safe:` prefix on transitions, NOT on the hover state itself (preserve functionality, remove animation)
9292+- Categories of effects:
9393+ - **Keep without motion-safe:** Subtle state indicators - hover background colors, border color changes. These are quick and communicate interactivity.
9494+ - **Wrap with motion-safe:** Flourishes and dramatic effects - font-variation-settings animations (weight/CASL), shadows appearing (`hover:shadow-lg`), overlay fades, scale transforms, ring transitions. Anything slow, dramatic, or purely decorative.
9595+- Pattern for flourish animations:
9696+ ```
9797+ [font-variation-settings:'wght'_400]
9898+ motion-safe:group-hover:[font-variation-settings:'wght'_500]
9999+ motion-safe:transition-[font-variation-settings] motion-safe:duration-200 motion-safe:ease-out
100100+ ```
101101+- Pattern for functional features with animated presentation:
102102+ ```
103103+ opacity-0 group-hover:opacity-100 motion-safe:transition-opacity
104104+ ```
105105+ (Overlay still appears on hover, just instantly with reduced motion)
106106+89107### Development Tooling
9010891109- **Nix**: flake.nix provides Node.js 22, TypeSpec, and language servers