Emotional Disconnect
Align animation emotion with context using Disney's principles.
Problem Indicators
- Animation feels "off" but hard to articulate
- Playful motion on serious content
- Sterile motion on warm content
- Users describe UI as cold/robotic or chaotic/annoying
- Mismatch between animation and message
Diagnosis by Principle
Appeal
Issue: Animation lacks emotional resonance
Fix: Define the emotional goal. Warm = soft easing, overshoot. Professional = crisp, linear. Match motion to message.
Exaggeration
Issue: Wrong intensity for emotional context
Fix: Serious contexts need restraint. Joyful contexts can be bouncy. Match exaggeration to emotional stakes.
Timing
Issue: Speed conflicts with emotional tone
Fix: Calm emotions = slower. Excitement = faster. Tension = variable speed. Timing IS emotion.
Squash and Stretch
Issue: Elastic effects on rigid contexts
Fix: Squash/stretch implies playfulness and life. Remove for serious, clinical, or professional contexts.
Follow Through
Issue: Endings don't match emotional intent
Fix: Abrupt endings feel harsh. Soft landings feel gentle. Bouncy endings feel playful. Choose consciously.
Quick Fixes
- Name the target emotion - "This should feel calm"
- Match easing to emotion - Bouncy = playful, smooth = calm
- Adjust timing to context - Slow down serious moments
- Remove mismatch sources - Cut animations that fight the tone
- Test with emotional vocabulary - Ask users "how does this feel?"
Troubleshooting Checklist
Emotion-to-Motion Map
| Emotion |
Easing |
Timing |
Effects |
| Joy |
Bouncy overshoot |
Fast |
Squash/stretch, scale up |
| Calm |
Gentle ease-out |
Slow |
Fade, subtle slide |
| Trust |
Smooth, predictable |
Medium |
Minimal, consistent |
| Urgency |
Sharp ease-in |
Fast |
Direct, no overshoot |
| Playful |
Spring physics |
Variable |
Rotation, bounce |
| Serious |
Linear or subtle ease |
Slow |
Minimal movement |
Code Pattern
/* Calm/trustworthy */
--ease-calm: cubic-bezier(0.4, 0, 0.2, 1);
/* Playful/joyful */
--ease-playful: cubic-bezier(0.34, 1.56, 0.64, 1);
/* Urgent/serious */
--ease-urgent: cubic-bezier(0.4, 0, 1, 1);