hover-interactions — Claude Code skill: pointer hover animations
A skill for mouse hover effects: button highlights, card lifts, link underlines, image zooms. Useful when an interface needs to respond to the pointer.
npx skills add dylantarre/animation-principles --skill hover-interactions -a claude-codeWhat hover-interactions does
The skill maps Disney's 12 animation principles onto hover states. Each principle ties to a concrete effect: a card scales slightly as it lifts, the shadow expands after the parent, an underline draws out from the center. Every effect type comes with a timing table and easing curves, from color change to image zoom.
Inside are ready CSS patterns: card lift with shadow, center-out underline, icon shift inside a button. The return is handled separately — hover-in stays quick, hover-out runs slower and softer. There's a rule about @media (hover: hover) so the effects don't fire on touch devices where no pointer exists.
The hard limit: hover-in must stay under 200ms or the response feels sluggish. The skill advises against moving elements far enough to cause mis-clicks, and caps combined properties at three.
What it helps with
- build a card lift with shadow on hover
- draw a link underline out from the center
- shift an icon inside a button on hover
- pick timings and easing for a hover effect
- scope hover effects to pointer devices only
Example prompts for the agent
- add a hover effect to the product card: lift and shadow
- make nav links underline from the center
- set up image zoom on hover with proper timings
How to install hover-interactions
1Skills CLI (Vercel)
npx skills add dylantarre/animation-principles --skill hover-interactions -a claude-code2Manually: put the files in place
~/.claude/skills/hover-interactions/SKILL.mdCopy the whole skill folder; for one project use .claude/skills/hover-interactions/
1Skills CLI (Vercel)
npx skills add dylantarre/animation-principles --skill hover-interactions -a codex2Manually: put the files in place
.agents/skills/hover-interactions/SKILL.mdFor all projects use ~/.agents/skills/
1Skills CLI (Vercel)
npx skills add dylantarre/animation-principles --skill hover-interactions -a cursor2Manually: put the files in place
.cursor/skills/hover-interactions/SKILL.mdCursor also reads .agents/skills/ and .claude/skills/
1GitHub CLI
gh skill install dylantarre/animation-principles hover-interactions2Manually: put the files in place
.github/skills/hover-interactions/SKILL.md1Skills CLI (Vercel)
npx skills add dylantarre/animation-principles --skill hover-interactions -a gemini-cli2Platform CLI
gemini skills install https://github.com/dylantarre/animation-principles --path skills/05-by-animation-type/hover-interactionsManually: put the files in place
.devin/skills/hover-interactions/SKILL.mdThe legacy .windsurf/skills/ path still works
Skills CLI (Vercel)
npx skills add dylantarre/animation-principles --skill hover-interactions -a opencodeClaude.ai
Zip the folder and upload it in Settings → Capabilities → Skills
Step by step, with commands for each platform: How to install skills in Claude Code: five ways
Questions about hover-interactions
How do I install hover-interactions in Claude?
Run npx skills add dylantarre/animation-principles --skill hover-interactions -a claude-code. The skill file lands at ~/.claude/skills/hover-interactions/SKILL.md.
What does hover-interactions do?
It helps design pointer hover animations: button highlights, card lifts, link underlines, image zooms. You get timings, easing curves and ready CSS patterns.
Do I need to handle touch devices?
Yes. Touch devices have no hover, so the skill recommends wrapping effects in @media (hover: hover) and keeping functionality working without it.
Source text
SKILL.md · MIT
---
name: hover-interactions
description: Use when creating mouse hover effects - button highlights, card lifts, link underlines, image zooms, or any pointer-triggered animation.
---
# Hover Interaction Animations
Apply Disney's 12 principles to mouse hover states.
## Principle Application
**Squash & Stretch**: Cards can subtly scale (1.02-1.05) on hover, creating "lift" effect.
**Anticipation**: Hover IS anticipation for click. The hover state previews the interaction.
**Staging**: Hover effects should highlight the interactive element, not distract from it.
**Straight Ahead vs Pose-to-Pose**: Define rest and hover poses precisely. Transition smoothly between them.
**Follow Through & Overlapping**: Child elements animate after parent. Card lifts, then shadow expands.
**Slow In/Slow Out**: Hover-in: ease-out (fast response). Hover-out: ease-in-out (graceful return).
**Arcs**: Underlines can draw from center outward. Highlights sweep in curved paths.
**Secondary Action**: Combine multiple subtle effects. Scale + shadow + color shift together.
**Timing**:
- Hover response: 150-200ms (must feel responsive)
- Hover exit: 200-300ms (can be slightly slower)
- Never exceed 300ms for hover-in
**Exaggeration**: Subtle - hover is preview, not performance. Scale max 1.05, shadow max +8px.
**Solid Drawing**: Hover states must feel like the same element elevated, not a replacement.
**Appeal**: Hover should invite clicking. Create anticipation without demanding action.
## Timing Recommendations
| Hover Effect | Hover-In | Hover-Out | Easing |
|-------------|----------|-----------|--------|
| Color Change | 150ms | 200ms | ease-out / ease-in-out |
| Scale/Lift | 200ms | 250ms | ease-out / ease-in-out |
| Shadow | 200ms | 250ms | ease-out / ease-in-out |
| Underline Draw | 200ms | 200ms | ease-out |
| Image Zoom | 300ms | 400ms | ease-out |
| Icon Shift | 150ms | 200ms | ease-out |
## Implementation Patterns
```css
/* Card lift with shadow */
.card {
transition: transform 200ms ease-out, box-shadow 200ms ease-out;
}
.card:hover {
transform: translateY(-4px) scale(1.02);
box-shadow: 0 12px 24px rgba(0,0,0,0.15);
}
/* Slower return */
.card:not(:hover) {
transition: transform 250ms ease-in-out, box-shadow 250ms ease-in-out;
}
/* Underline draw from center */
.link {
position: relative;
}
.link::after {
content: '';
position: absolute;
bottom: 0;
left: 50%;
width: 0;
height: 2px;
background: currentColor;
transition: width 200ms ease-out, left 200ms ease-out;
}
.link:hover::after {
width: 100%;
left: 0;
}
```
## Icon Animation Pattern
```css
.button-icon {
transition: transform 150ms ease-out;
}
.button:hover .button-icon {
transform: translateX(4px);
}
/* Arrow grows */
.arrow-icon {
transition: transform 150ms ease-out;
}
.link:hover .arrow-icon {
transform: translateX(4px) scale(1.1);
}
```
## Key Rules
1. Touch devices don't have hover - ensure functionality without it
2. Hover-in must be under 200ms to feel responsive
3. Don't move elements enough to cause mis-clicks
4. Test with `@media (hover: hover)` to scope to pointer devices
5. Combine max 3 properties to avoid overwhelming
```css
@media (hover: hover) {
.card:hover { /* hover effects */ }
}
```
© dylantarre · MIT · dylantarre/animation-principles