Applies Emil Kowalski's animation best practices for web interfaces: easing, timing, property selection, gestures, toasts, drawers, and accessibility. Use when implementing or reviewing animations in React, CSS, or Framer Motion.
How this skill is triggered — by the user, by Claude, or both
Slash command
/pproenca-dot-skills-1:emilkowal-animationsThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
Comprehensive animation guide for web interfaces based on Emil Kowalski's teachings, open-source libraries (Sonner, Vaul), and his [animations.dev](https://animations.dev) course. Contains 58 rules across 8 categories, prioritized by impact.
Comprehensive animation guide for web interfaces based on Emil Kowalski's teachings, open-source libraries (Sonner, Vaul), and his animations.dev course. Contains 58 rules across 8 categories, prioritized by impact.
Reference these guidelines when:
tw- category)| Priority | Category | Impact | Prefix |
|---|---|---|---|
| 1 | Easing Selection | CRITICAL | ease- |
| 2 | Timing & Duration | CRITICAL | timing- |
| 3 | Property Selection | HIGH | props- |
| 4 | Transform Techniques | HIGH | transform- |
| 5 | Interaction Patterns | MEDIUM-HIGH | interact- |
| 6 | Strategic Animation | MEDIUM | strategy- |
| 7 | Accessibility & Polish | MEDIUM | polish- |
| 8 | Tailwind v4 Utilities | MEDIUM | tw- |
ease-out-default - Use ease-out as your default easingease-custom-curves - Use custom cubic-bezier over built-in CSSease-in-out-onscreen - Use ease-in-out for on-screen movementease-spring-natural - Use spring animations for natural motionease-spring-config - Configure springs with duration and bounceease-ios-drawer - Use iOS-style easing for drawer componentsease-context-matters - Match easing to animation contexttiming-300ms-max - Keep UI animations under 300mstiming-faster-better - Faster animations improve perceived performancetiming-asymmetric - Use asymmetric timing for press and releasetiming-tooltip-delay - Delay initial tooltips, instant subsequent onestiming-drawer-500ms - Use 500ms duration for drawer animationsprops-transform-opacity - Animate only transform and opacityprops-hardware-accelerated - Use hardware-accelerated animations when main thread is busyprops-will-change - Use will-change to prevent 1px shiftprops-avoid-css-variables - Avoid CSS variables for drag animationsprops-clip-path-performant - Use clip-path for layout-free revealstransform-scale-097 - Scale buttons to 0.97 on presstransform-never-scale-zero - Never animate from scale(0)transform-percentage-translate - Use percentage values for translateYtransform-origin-aware - Make animations origin-awaretransform-scale-children - Scale transforms affect childrentransform-3d-preserve - Use preserve-3d for 3D transform effectstransform-starting-style - Animate enter states with @starting-styleinteract-interruptible - Make animations interruptibleinteract-momentum-dismiss - Use momentum-based dismissalinteract-damping - Damp drag at boundariesinteract-scroll-drag-conflict - Resolve scroll and drag conflictsinteract-snap-points - Implement velocity-aware snap pointsinteract-friction-upward - Allow upward drag with frictioninteract-pointer-capture - Use pointer capture for drag operationsinteract-multitouch - Ignore extra touch points during draginteract-touch-hover - Gate hover animations behind a pointer media querystrategy-keyboard-no-animate - Never animate keyboard-initiated actionsstrategy-frequency-matters - Consider interaction frequency before animatingstrategy-purpose-required - Every animation must have a purposestrategy-feedback-immediate - Provide immediate feedback on all actionsstrategy-marketing-exception - Marketing sites are the exceptionstrategy-cohesion - Match motion to the component's personalitystrategy-review-fresh-eyes - Review animations in slow motion and the next daypolish-reduced-motion - Respect prefers-reduced-motionpolish-opacity-fallback - Use opacity as reduced motion fallbackpolish-framer-hook - Use useReducedMotion hook in Framer Motionpolish-dont-remove-all - Keep gentle animation for reduced motionpolish-blur-bridge - Use blur to bridge animation statespolish-clip-path-tabs - Use clip-path for tab transitionspolish-toast-stacking - Implement toast stacking with scale and offsetpolish-scroll-reveal - Trigger scroll animations at appropriate thresholdpolish-hover-gap-fill - Fill gaps between hoverable elementspolish-stagger-children - Stagger child animations for orchestrationExpress the principles above with proper Tailwind CSS v4 utilities. Applies only to Tailwind v4 projects; the raw-CSS and Framer Motion rules above remain the source of truth.
tw-ease-duration-defaults - Set ease-out and a sub-300ms duration explicitlytw-custom-easing-theme - Register custom easing curves as @theme tokenstw-press-scale - Use active:scale-[0.97] for button press feedbacktw-asymmetric-timing - Split press and release timing with active:durationtw-starting-enter - Animate enter states with the starting: varianttw-reduced-motion - Gate movement behind motion-safe / motion-reducetw-origin-aware - Set transform-origin with origin-* utilitiestw-will-change - Scope will-change-transform to the active gesture| Value | Usage |
|---|---|
cubic-bezier(0.23, 1, 0.32, 1) | Strong ease-out for UI interactions |
cubic-bezier(0.77, 0, 0.175, 1) | Strong ease-in-out for on-screen movement |
cubic-bezier(0.32, 0.72, 0, 1) | iOS-style drawer/sheet animation |
scale(0.97) | Button press feedback |
scale(0.95) | Minimum enter scale (never scale(0)) |
200ms ease-out | Standard UI transition |
300ms | Maximum duration for UI animations |
500ms | Drawer animation duration |
0.11 px/ms | Velocity threshold for momentum dismiss |
100px | Scroll-reveal viewport threshold |
14px | Toast stack offset |
Pick duration by how often the element is seen and how much it moves. Keep UI animations under 300ms.
| Element | Duration |
|---|---|
| Button press feedback | 100–160ms |
| Tooltips, small popovers | 125–200ms |
| Dropdowns, selects | 150–250ms |
| Modals, drawers | 200–500ms |
| Marketing / explanatory | Can be longer |
| File | Description |
|---|---|
| references/_sections.md | Category definitions and ordering |
| assets/templates/_template.md | Template for new rules |
| metadata.json | Version and reference information |
npx claudepluginhub pproenca/dot-skillsGuides designing and reviewing polished product UI with Emil Kowalski-inspired animation, interaction, and component craft.
Encodes Emil Kowalski's philosophy on UI polish, component design, and animation decisions. Guides developers in crafting interfaces with taste and attention to invisible details.
Designs, implements, reviews, and reverse-engineers UI motion: CSS transitions, keyframes, springs, gestures, framer-motion. Use for adding animations, making interfaces smooth, or extracting animation curves from recordings.