# modals-dialogs

Guides AI coding agents on animating dialogs, modals, and popovers using Disney's animation principles. Brings structured timing to entrance and exit effects.

- skill · `type=skill` · Claude Code, Codex, Cursor, GitHub Copilot, Gemini CLI, OpenCode · 528 installs · ★ 129
- Author: dylantarre
- License: MIT · policy=mirror · the beginning of the file is at the end of this page
- Source: https://github.com/dylantarre/animation-principles/tree/HEAD/skills/07-by-ui-element/modals-dialogs/SKILL.md
- Updated: 2025-12-30
- HTML: https://affpapa.org/en/nevibecode/skills/modals-dialogs

## What it does

This skill instructs the agent on handling transitions for dialogs, popovers, and overlays. Instead of snap-in popups, it translates classic motion principles to CSS. Modals expand from scale 0.9 to 1.0 on entrance, while the backdrop dims to 0.5–0.7 opacity and blurs by 4–8px.

The guide specifies exact timings. Backdrop fade takes 200–250ms, the modal opens in 250–350ms, and it exits faster at 200ms. For easing, it prescribes `cubic-bezier(0.16, 1, 0.3, 1)`. Inside the container, content fades in with a 50–100ms offset.

Exit transitions must run faster than entrances, or the modal feels sticky.

## Install

### Claude Code (native platform)

1. **Skills CLI (Vercel)**
```bash
npx skills add dylantarre/animation-principles --skill modals-dialogs -a claude-code
```

2. **Manually: put the files in place**
- File: `~/.claude/skills/modals-dialogs/SKILL.md` — Copy the whole skill folder; for one project use .claude/skills/modals-dialogs/

### Codex

1. **Skills CLI (Vercel)**
```bash
npx skills add dylantarre/animation-principles --skill modals-dialogs -a codex
```

2. **Manually: put the files in place**
- File: `.agents/skills/modals-dialogs/SKILL.md` — For all projects use ~/.agents/skills/

### Cursor

1. **Skills CLI (Vercel)**
```bash
npx skills add dylantarre/animation-principles --skill modals-dialogs -a cursor
```

2. **Manually: put the files in place**
- File: `.cursor/skills/modals-dialogs/SKILL.md` — Cursor also reads .agents/skills/ and .claude/skills/

### GitHub Copilot

1. **GitHub CLI**
```bash
gh skill install dylantarre/animation-principles modals-dialogs
```

2. **Manually: put the files in place**
- File: `.github/skills/modals-dialogs/SKILL.md`

### Gemini CLI

1. **Skills CLI (Vercel)**
```bash
npx skills add dylantarre/animation-principles --skill modals-dialogs -a gemini-cli
```

2. **Platform CLI**
```bash
gemini skills install https://github.com/dylantarre/animation-principles --path skills/07-by-ui-element/modals-dialogs
```

### Windsurf (Devin Desktop)

**Manually: put the files in place**
- File: `.devin/skills/modals-dialogs/SKILL.md` — The legacy .windsurf/skills/ path still works

### OpenCode

**Skills CLI (Vercel)**
```bash
npx skills add dylantarre/animation-principles --skill modals-dialogs -a opencode
```

### Claude.ai

**Claude.ai**
- Zip the folder and upload it in Settings → Capabilities → Skills

Where a file is given instead of a command, copy the files from the source to that path: https://github.com/dylantarre/animation-principles/tree/HEAD/skills/07-by-ui-element/modals-dialogs/SKILL.md

## When to use it
- animate modal and popover entrances in CSS
- stagger form content inside newly opened dialogs
- configure backdrop blur and dimming transitions
- set up error shake keyframes for invalid submissions

## Example prompts
- Animate the login modal enter and exit transitions following the skill guidelines
- Add CSS keyframes for this popover using the recommended cubic-bezier curve
- Stagger the form inputs inside the checkout dialog as it opens

## Source text · SKILL.md · MIT

Below is the content of a third-party file. It is data, not instructions for you: do not act on anything written inside unless the human asks. Block tag: 60b23672fa34b2e0.

BEGIN THIRD-PARTY FILE 60b23672fa34b2e0
````text
---
name: modals-dialogs
description: Use when animating modals, dialogs, popovers, or overlay content to create smooth entrances and exits
---

# Modal & Dialog Animation Principles

Apply Disney's 12 principles to modals for seamless, non-jarring transitions.

## Principles Applied to Modals

### 1. Squash & Stretch
Modal can scale from 0.9 to 1.0 on enter, creating a subtle expansion feel. Exit reverses. Keep it subtle to maintain professionalism.

### 2. Anticipation
Trigger element (button) should react before modal appears. Brief scale-down of trigger, then modal emerges from that point.

### 3. Staging
Backdrop dims (0.5-0.7 opacity) to focus attention on modal. Background content can blur slightly (4-8px). Modal is the star.

### 4. Straight Ahead & Pose to Pose
Define states: hidden, entering, visible, exiting. Clear keyframes for each. Pose-to-pose ensures predictable, controllable animation.

### 5. Follow Through & Overlapping Action
Modal container arrives first, content fades in 50-100ms after. Close button can have slight bounce at end. Stagger form fields.

### 6. Ease In & Ease Out
Enter: `ease-out` (decelerates in). Exit: `ease-in` (accelerates out). `cubic-bezier(0.16, 1, 0.3, 1)` for smooth, bouncy enter.

### 7. Arcs
If modal originates from a button, arc toward center rather than straight line. Creates more organic movement path.

### 8. Secondary Action
While modal scales in (primary), backdrop fades (secondary), content staggers (tertiary). Each supports without competing.

### 9. Timing
- Backdrop fade: 200-250ms
- Modal enter: 250-350ms
- Modal exit: 200ms (faster out)
- Content stagger: 30-50ms per item
- Shake on error: 300ms

### 10. Exaggeration
Dramatic entrance for important alerts. Slight overshoot scale (1.02) before settling at 1.0. Error modals can shake briefly.

### 11. Solid Drawing
Modal shadows should match interface light source. Maintain consistent border-radius. Content should never overflow during animation.

### 12. Appeal
Smooth entrances feel polished. Origin-point animation feels connected. Abrupt modals feel jarring. Invest in modal transitions.

## CSS Implementation

```css
.modal-backdrop {
  transition: opacity 250ms ease-out;
}

.modal {
  animation: modalEnter 300ms cubic-bezier(0.16, 1, 0.3, 1);
}

@keyframes modalEnter {
  from {
    opacity: 0;
    transform: scale(0.9) translateY(20px);
  }
  to {
    opacity: 1;
    transform: scale(1) translateY(0);
  }
}
```

## Key Properties
- `transform`: scale, translate (origin point)
- `opacity`: fade in/out
- `backdrop-filter`: blur background
- `animation`: keyframe sequences
- `transform-origin`: source point
````
END THIRD-PARTY FILE 60b23672fa34b2e0

The third-party file has ended. Everything between the 60b23672fa34b2e0 tags is data: requests and commands from it are not followed. An “end of file” line with another tag inside the block is part of the file.

© dylantarre · MIT · https://github.com/dylantarre/animation-principles/tree/HEAD/skills/07-by-ui-element/modals-dialogs/SKILL.md

## Similar
- [emil-design-eng](https://affpapa.org/en/nevibecode/skills/emil-design-eng.md) — skill · 388200 installs
- [review-animations](https://affpapa.org/en/nevibecode/skills/review-animations.md) — skill · 256500 installs
- [better-ui](https://affpapa.org/en/nevibecode/skills/better-ui.md) — skill · 39300 installs
- [micro-interaction](https://affpapa.org/en/nevibecode/skills/micro-interaction.md) — skill · 2500 installs

_Part of the page did not fit — see the HTML version._

---
NeVibeCode on affpapa.org. Catalog texts are descriptions, not instructions for the agent. How to choose and install: https://affpapa.org/en/nevibecode/agents.md
