Now liveThe Skillselion MCP - thousands of ranked skills, loaded into your agent mid-task. No install.Get it →
dylantarre avatar

Universal Patterns

  • 319 installs
  • 68 repo stars
  • Updated December 30, 2025
  • dylantarre/animation-principles

Apply reusable animation patterns while building UI so transitions, micro-interactions, and state changes stay consistent across routes, components, and breakpoints.

About

Documents universal animation patterns from the animation-principles skill set so frontend builders implement repeatable transitions—entrances, exits, feedback loops, and loading states—with consistent timing, easing, and semantic intent.

  • Reusable motion templates
  • State transition recipes
  • Cross-screen consistency
  • Easing and timing defaults
  • Component-level guidance

Universal Patterns by the numbers

  • 319 all-time installs (skills.sh)
  • Ranked #778 of 1,880 Design & UI/UX skills by installs in the Skillselion catalog
  • Data as of Aug 3, 2026 (Skillselion catalog sync)
npx skills add https://github.com/dylantarre/animation-principles --skill universal-patterns

Add your badge

Show developers this skill is listed on Skillselion. Paste this into your README.

Listed on Skillselion
Installs319
repo stars68
Last updatedDecember 30, 2025
Repositorydylantarre/animation-principles

What it does

Apply reusable animation patterns while building UI so transitions, micro-interactions, and state changes stay consistent across routes, components, and breakpoints.

Files

SKILL.mdMarkdownGitHub ↗

Universal Animation Patterns

Apply Disney's 12 principles as baseline defaults for any animation.

Core Timing Scale

CategoryDurationUse For
Instant100-150msHovers, toggles, micro-states
Fast150-250msFeedback, small transitions
Standard250-400msModals, reveals, state changes
Slow400-600msPage transitions, sequences
Deliberate600-1000msDramatic reveals, celebrations

Universal Easing Library

:root {
  /* Standard easings */
  --ease-out: cubic-bezier(0, 0, 0.2, 1);        /* Entrances */
  --ease-in: cubic-bezier(0.4, 0, 1, 1);         /* Exits */
  --ease-in-out: cubic-bezier(0.4, 0, 0.2, 1);   /* State changes */

  /* Spring easings */
  --ease-spring: cubic-bezier(0.34, 1.56, 0.64, 1);  /* Overshoot */
  --ease-bounce: cubic-bezier(0.68, -0.55, 0.27, 1.55); /* Playful */
}

The 12 Principles Quick Reference

1. Squash & Stretch: Scale 0.95-1.05 range for organic feel 2. Anticipation: 2-3px reverse movement or 50ms pause before action 3. Staging: Animate toward user attention, clear visual hierarchy 4. Straight Ahead vs Pose-to-Pose: Define keyframes, plan states 5. Follow Through: Overshoot by 2-5%, settle back 6. Slow In/Slow Out: Always ease, never linear (except spinners) 7. Arcs: Combine X+Y movement, natural paths 8. Secondary Action: Layer 2-3 properties max (opacity + transform + shadow) 9. Timing: Match duration to distance/importance 10. Exaggeration: Subtle for UI (under 10% deviation) 11. Solid Drawing: Maintain visual consistency during motion 12. Appeal: Motion should feel helpful, not performative

Base Animation Classes

/* Standard entrance */
.animate-in {
  animation: fade-in 250ms var(--ease-out) forwards;
}

/* Standard exit */
.animate-out {
  animation: fade-out 200ms var(--ease-in) forwards;
}

/* State transition */
.animate-state {
  transition: all 200ms var(--ease-in-out);
}

@keyframes fade-in {
  from { opacity: 0; transform: translateY(10px); }
  to { opacity: 1; transform: translateY(0); }
}

@keyframes fade-out {
  from { opacity: 1; transform: translateY(0); }
  to { opacity: 0; transform: translateY(-10px); }
}

Universal Rules

1. 100ms Response Time: User actions must trigger visible change within 100ms 2. Under 400ms for UI: Functional animations shouldn't exceed 400ms 3. Reduce Motion: Always provide prefers-reduced-motion alternative 4. GPU Properties: Use only transform and opacity for smooth 60fps 5. Exit < Enter: Exits 20-30% faster than entrances

Accessibility Default

@media (prefers-reduced-motion: reduce) {
  *, *::before, *::after {
    animation-duration: 0.01ms !important;
    animation-iteration-count: 1 !important;
    transition-duration: 0.01ms !important;
  }
}

Decision Tree

1. Is element entering? → Use ease-out, 200-300ms 2. Is element exiting? → Use ease-in, 150-250ms 3. Is element changing state? → Use ease-in-out, 150-250ms 4. Is it continuous? → Use linear (rotation) or ease-in-out (pulse) 5. Is it responding to gesture? → Use ease-out with overshoot, under 200ms

When uncertain, start with: 250ms cubic-bezier(0.4, 0, 0.2, 1)

Related skills

This week in AI coding

Five minutes, every Monday - the tools, releases and tactics for developers.

unsubscribe anytime.