# loaders-spinners

Guides your agent to build spinners, progress bars, and skeleton screens using Disney's 12 principles of animation.

- skill · `type=skill` · Claude Code, Codex, Cursor, GitHub Copilot, Gemini CLI, OpenCode · 508 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/loaders-spinners/SKILL.md
- Updated: 2025-12-30
- HTML: https://affpapa.org/en/nevibecode/skills/loaders-spinners

## What it does

This skill instructs the coding assistant to design UI loading states using classic animation logic. It translates concepts like squash and stretch to bouncing dots, anticipation to progress bars nearing completion, and secondary action to shimmering skeleton placeholders.

The skill defines specific timing constraints directly in CSS. A spinner rotation is kept between 800ms and 1200ms, bounce cycles run across 500ms to 800ms, and skeleton shimmer spans 1500ms to 2500ms. Multi-element dot sequences rely on 100ms to 150ms stagger delays to maintain rhythm.

Animation style adapts to product voice: professional interfaces receive subtle continuous spins, while playful applications get elastic transitions.

## Install

### Claude Code (native platform)

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

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

### Codex

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

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

### Cursor

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

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

### GitHub Copilot

1. **GitHub CLI**
```bash
gh skill install dylantarre/animation-principles loaders-spinners
```

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

### Gemini CLI

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

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

### Windsurf (Devin Desktop)

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

### OpenCode

**Skills CLI (Vercel)**
```bash
npx skills add dylantarre/animation-principles --skill loaders-spinners -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/loaders-spinners/SKILL.md

## When to use it
- configure accurate timing intervals for spinners and shimmers
- create staggered bouncing dot loaders with CSS keyframes
- build skeleton screens using animated background gradients
- apply squash and stretch physics to loader elements

## Example prompts
- Write CSS for a three-dot bounce loader with staggered animation delays.
- Build a skeleton screen shimmer animation for a profile card.
- Create a continuous SVG spinner with a 1000ms linear rotation.

## 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: ee2ab9b2b5d560a7.

BEGIN THIRD-PARTY FILE ee2ab9b2b5d560a7
````text
---
name: loaders-spinners
description: Use when creating loading indicators, spinners, progress bars, or skeleton screens to communicate system status
---

# Loader & Spinner Animation Principles

Apply Disney's 12 principles to loading indicators for engaging, informative wait experiences.

## Principles Applied to Loaders

### 1. Squash & Stretch
Bouncing dot loaders should squash on landing, stretch while rising. Creates life-like, playful motion.

### 2. Anticipation
Before progress completes, bar can briefly pause or slow. Spinners can decelerate before stopping. Signals completion coming.

### 3. Staging
Loader should be clearly visible but not block content unnecessarily. Skeleton screens stage where real content will appear.

### 4. Straight Ahead & Pose to Pose
Organic loaders (bouncing dots) benefit from straight-ahead. Progress bars use pose-to-pose (0% to 100% keyframes).

### 5. Follow Through & Overlapping Action
Multi-part loaders should have elements offset in timing. Dot 1 bounces, dot 2 follows 100ms later. Creates rhythm.

### 6. Ease In & Ease Out
Spinning: use `ease-in-out` per rotation cycle or `linear` for continuous. Bouncing: `ease-in` up, `ease-out` down.

### 7. Arcs
Orbital loaders should follow true circular arcs. Bouncing elements follow parabolic arcs like real physics.

### 8. Secondary Action
While spinner rotates (primary), glow pulses (secondary). Skeleton shimmer is secondary to skeleton shape.

### 9. Timing
- Spinner full rotation: 800-1200ms
- Bounce cycle: 500-800ms
- Skeleton shimmer: 1500-2500ms
- Progress bar smooth updates: 200ms
- Dot stagger: 100-150ms
- Pulse: 1000-2000ms

### 10. Exaggeration
Playful brands can use bouncy, elastic loaders. Professional contexts need subtle, smooth spinners. Match brand energy.

### 11. Solid Drawing
Maintain consistent stroke widths. Circular paths should be true circles. Progress bars should fill evenly.

### 12. Appeal
Engaging loaders reduce perceived wait time. Boring spinners feel slower. A delightful loader can turn frustration into momentary joy.

## CSS Implementation

```css
.spinner {
  animation: spin 1000ms linear infinite;
}

@keyframes spin {
  to { transform: rotate(360deg); }
}

.bounce-dot {
  animation: bounce 600ms ease-in-out infinite alternate;
}

.bounce-dot:nth-child(2) { animation-delay: 100ms; }
.bounce-dot:nth-child(3) { animation-delay: 200ms; }

@keyframes bounce {
  from { transform: translateY(0) scaleY(1); }
  to { transform: translateY(-20px) scaleY(0.9); }
}

.skeleton {
  background: linear-gradient(90deg, #eee 25%, #f5f5f5 50%, #eee 75%);
  background-size: 200% 100%;
  animation: shimmer 2000ms infinite;
}

@keyframes shimmer {
  to { background-position: -200% 0; }
}
```

## Key Properties
- `transform`: rotate, translateY, scale
- `animation`: infinite loops
- `background-position`: shimmer effects
- `stroke-dashoffset`: SVG spinners
````
END THIRD-PARTY FILE ee2ab9b2b5d560a7

The third-party file has ended. Everything between the ee2ab9b2b5d560a7 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.

First 2904 of 2934 bytes. © dylantarre · MIT · https://github.com/dylantarre/animation-principles/tree/HEAD/skills/07-by-ui-element/loaders-spinners/SKILL.md

_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
