This PR implements micro-interactions and animations across the frontend using Tailwind CSS and Framer Motion to enhance UI/UX with smooth, purposeful animations while maintaining 60fps performance and accessibility.
Added custom animations and keyframes:
ripple- Click ripple effectshake- Error shake animationlift- Hover lift effectslide-in-up- Slide in from topbounce-in- Bounce entrance animation
Added shadow utilities:
error-glow- Error state glowsuccess-glow- Success state glow
Created comprehensive animation utilities including:
prefersReducedMotion()- Check for reduced motion preference- Common transition and spring configurations
- Reusable Framer Motion variants (fadeIn, fadeInUp, scaleIn, etc.)
- Animation class names for Tailwind
- Accessibility helpers
- Hook for managing ripple state
- Ripple component with Framer Motion animations
- Supports custom colors and duration
Enhanced button with:
- Hover scale (1.02x) and tap scale (0.95x) animations
- Ripple effect on click
- Loading spinner with fade animation
- Disabled state handling
- Reduced motion support
- Multiple variants (primary, secondary, outline, ghost, danger)
- Multiple sizes (sm, md, lg)
Enhanced input with:
- Focus ring and shadow animations
- Error shake animation
- Success state glow
- Character count display
- Left/right icon support
- Helper text and error messages with animations
- Reduced motion support
Enhanced card with:
- Hover lift animation (4px up)
- Shadow transition on hover
- Fade-in animation on mount
- Multiple variants (default, outline, elevated, glass)
- Multiple padding sizes
- Card header, body, and footer sub-components
Animated notifications with:
- Slide-in from right
- Progress bar animation
- Auto-dismiss with configurable duration
- Multiple types (success, error, warning, info)
- Spring-based animations
- Toast container for managing multiple toasts
- Page wrapper with route change animations
- FadeIn component for mount animations
- StaggeredList for list animations
- StaggeredItem for list item animations
- Only animating
transformandopacityproperties - Using
will-changewhere appropriate - Framer Motion handles animation optimization
- No layout-triggering properties animated
- Respects
prefers-reduced-motionaccessibility setting
- All animations respect
prefers-reduced-motionmedia query - Focus states remain intact on interactive elements
- Proper ARIA attributes on toast notifications
- Keyboard navigation support for clickable cards
framer-motion- Animation library
- Hover and click interactions work correctly
- Touch devices (mobile) work correctly
- Page transitions animate smoothly
- prefers-reduced-motion behavior works
- No animation jank or layout shifts
- Works on both desktop and mobile
- Closes #319
- Animations are kept subtle and purposeful
- Focus on enhancing UX rather than over-animating
- Consistent animation timing across components (150ms for micro, 300ms for larger)