emil-design-eng

Reviews and improves UI animations, transitions, and component interactions using CSS and Framer Motion patterns.

Updated Aug 22, 2026
One-click install
npx skills add https://github.com/falentio/cimi --skill emil-design-eng-falentio
Or copy as Structured Prompt for Agent
Please help me install this Agent Skill.
Skill: emil-design-eng
Source: https://github.com/falentio/cimi/tree/main/.agents/skills/emil-design-eng
Command: npx skills add https://github.com/falentio/cimi --skill emil-design-eng-falentio

SYSTEM DOCUMENTATION & REQUIREMENTS

What problem does it solve? Interfaces often feel sluggish or unpolished because of poor animation choices: wrong easing curves, excessive durations, non-interruptible keyframes, and animations on high-frequency actions. This Skill applies Emil Kowalski's design engineering philosophy to review and fix UI animation and interaction code. ## Core Features & Use Cases - Animation Decision Framework: Determines whether an element should animate at all based on usage frequency, then selects the correct easing curve, duration, and technique. - UI Code Review with Before/After Tables: Audits CSS and component code for issues like transition: all, scale(0) entries, ease-in on UI elements, and missing :active states, presenting fixes in a structured table. - Advanced Interaction Patterns: Covers springs, clip-path reveals, gesture velocity-based dismissal, stagger animations, tooltips, popovers, and performance rules (GPU-accelerated properties, WAAPI, hardware acceleration in Framer Motion). - Use Case: Paste a dropdown component with a 400ms ease-in transition and receive a corrected version using a custom ease-out curve at 180ms with origin-aware scaling, plus an explanation of why each change improves perceived responsiveness. ## Quick Start Ask the assistant to review your button, dropdown, modal, or toast component's animation code and suggest improvements based on design engineering principles.

Frequently Asked Questions about emil-design-eng

High-intent search queries and answers about installing and using this skill.

FAQPage Schema
How do I make UI animations feel more responsive?

Use ease-out curves instead of ease-in, keep durations under 300ms, and add press feedback like transform: scale(0.97) on :active states. Ease-out shows immediate movement at the moment users watch most closely, making the interface feel faster at the same duration.

When should I use springs vs CSS transitions for animation?

Use springs for drag interactions, interruptible gestures, and elements that should feel alive, since springs maintain velocity when interrupted. Use CSS transitions for predetermined UI state changes, and prefer transitions over keyframes for rapidly triggered elements like toasts.

Should I animate elements triggered by keyboard shortcuts?

No. Keyboard-initiated actions repeat hundreds of times daily, and animation makes them feel slow and disconnected. Raycast has no open/close animation for this reason. Reserve animation for occasional interactions like modals, drawers, and toasts.

Why do Framer Motion animations drop frames under load?

Framer Motion's shorthand x/y/scale props run on requestAnimationFrame on the main thread, so they drop frames when the browser is busy. Use the full transform string like transform: "translateX(100px)" for hardware acceleration, or switch to CSS animations which run off the main thread.

How do I handle animations for users who prefer reduced motion?

Use the prefers-reduced-motion media query to remove movement and position animations while keeping opacity and color transitions that aid comprehension. Reduced motion means fewer and gentler animations, not zero animation.

Why should popovers not scale from center?

Popovers are anchored to a trigger element, so scaling from center looks disconnected. Set transform-origin to the trigger location, such as Base UI's var(--transform-origin). Modals are the exception and should keep transform-origin: center since they appear centered in the viewport.