Animation
Animation tokens that unify enter/exit effects across components. All are named tokens, mapping directly to class names (animate-{name}) in a 1:1 relationship.
Enter Animations
Entry effects for Checkbox and Radio. Each token maps 1:1 to a class (animate-checkbox-enter).
checkbox-enterCheckboxCheckbox checkmark entry animation
animate-checkbox-enterradio-enterRadioRadio dot entry animation
animate-radio-enterScale Comparison
Different scale values suited to each component's shape
Checkbox
Natural appearance from 75% scale — the checkmark fits neatly within bounds.
animate-checkbox-enterRadio
Starting from 50% scale creates a 'pop' effect for an impactful appearance.
animate-radio-enterNamed Animations
Standalone animations specific to each component. Each animate-* class is self-contained.
Modal
2 enter/exit pairs
animate-modal-overlay-enterOverlay fade in
animate-modal-overlay-exitOverlay fade out
animate-modal-content-enterContent appear (opacity + scale + translateY)
animate-modal-content-exitContent exit
NavigationMenu
3 enter/exit pairs
animate-fade-inFade in
animate-fade-outFade out
animate-nav-viewport-enterViewport appear (opacity + scale + translateY)
animate-nav-viewport-exitViewport exit
animate-collapsible-downCollapsible expand (height)
animate-collapsible-upCollapsible collapse (height)
Accordion
1 enter/exit pair
animate-accordion-downAccordion expand (height)
animate-accordion-upAccordion collapse (height)
Drawer
Slide in/out from screen edges
animate-drawer-*-enteranimate-drawer-*-exitTooltip
Tooltip appear/exit (opacity + translate 4px)
animate-tooltip-*-enteranimate-tooltip-*-exitPopover
Popover appear/exit (opacity + translate 4px)
animate-popover-*-enteranimate-popover-*-exitToast
Toast slide in/out
animate-toast-slide-*-inanimate-toast-slide-*-outGlobal
Infinite rotation (loading spinner)
animate-spinInfinite rotation (loading spinner)
Progress
Stripe flow animation (background-position)
animate-progress-stripeStripe flow animation (background-position)
Spinner
3D Y-axis rotation (rotateY 0→360deg), Dot opacity pulse (opacity 0.2→1→0.2), Bar scale pulse (scaleY 0.4→1→0.4), Organic shape morph + 3D rotation (border-radius morph)
animate-spinner-orbit3D Y-axis rotation (rotateY 0→360deg)
animate-spinner-dotDot opacity pulse (opacity 0.2→1→0.2)
animate-spinner-barBar scale pulse (scaleY 0.4→1→0.4)
animate-spinner-morphOrganic shape morph + 3D rotation (border-radius morph)
Skeleton
Brightness pulse (opacity 1→0.4→1), Shimmer gradient sweep (translateX -100%→100%)
animate-skeleton-pulseBrightness pulse (opacity 1→0.4→1)
animate-skeleton-waveShimmer gradient sweep (translateX -100%→100%)
Best Practices
Do
- ✓Quick feedback with short duration (micro=150ms)
- ✓Natural deceleration using ease-out
- ✓Rich transitions combining opacity + scale
- ✓1:1 mapping with named classes
Don't
- ✗Micro-interactions over 300ms+
- ✗Using ease-in for enter animations
- ✗Hardcoded keyframes
- ✗Ignoring prefers-reduced-motion