emil-design-eng

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

Updated Jul 29, 2026
One-click install
npx skills add https://github.com/MaiconGambini/opencode-harness-guide --skill emil-design-eng-maicongambini
Or copy as Structured Prompt for Agent
Please help me install this Agent Skill.
Skill: emil-design-eng
Source: https://github.com/MaiconGambini/opencode-harness-guide/tree/main/skills/emil-design-eng
Command: npx skills add https://github.com/MaiconGambini/opencode-harness-guide --skill emil-design-eng-maicongambini

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 (CSS transitions, springs, WAAPI). - UI Code Review with Before/After Tables: Audits CSS and React animation code and outputs structured markdown tables showing each issue, the fix, and the reasoning. - Component Interaction Patterns: Provides concrete implementations for buttons, popovers, tooltips, drawers, toasts, drag gestures, and stagger animations, including accessibility handling for reduced motion and touch devices. - Use Case: Paste a dropdown component with transition: all 300ms ease-in and receive a corrected version using a custom ease-out curve at 200ms with origin-aware transform, plus an explanation of why each change improves perceived responsiveness. ## Quick Start Review my React dropdown component's animation code and suggest improvements to its easing, duration, and transform origin.

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 CSS animations feel more responsive?

Use ease-out curves for entering elements, keep UI animations under 300ms, and replace `transition: all` with specific properties like transform. Custom cubic-bezier curves such as cubic-bezier(0.23, 1, 0.32, 1) feel stronger than built-in easings.

When should I use spring animations instead of CSS transitions?

Use springs for drag interactions with momentum, interruptible gestures, and elements that should feel alive. Springs maintain velocity when interrupted, while CSS keyframes restart from zero. Use CSS transitions for predetermined, rapidly-triggered UI state changes.

Should popovers scale from center or from their trigger?

Popovers should scale from their trigger element, not from center. Set transform-origin to the trigger location, for example using Radix UI's --radix-popover-content-transform-origin variable. Modals are the exception and should stay centered.

Why do Framer Motion animations drop frames under load?

Framer Motion's shorthand x and y props run on the main thread via requestAnimationFrame, so they drop frames when the browser is busy. Use the full transform string like translateX(100px) for hardware acceleration, or use 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 transform-based movement while keeping opacity and color transitions that aid comprehension. In React, useReducedMotion from Framer Motion lets you conditionally disable positional animation values.

When should I avoid animating a UI element entirely?

Skip animation for actions performed 100+ times daily, such as keyboard shortcuts and command palette toggles. Animation on high-frequency keyboard-initiated actions makes the interface feel slow and disconnected from user input.