Skip to main content
skill CX Codex

loading-states · dylantarre — Claude Code skill: loading animations, Disney style

A skill for loading indicators: spinners, progress bars, skeletons and shimmer. Useful when the UI has to show the system is working.

Install into Claude Code · Skills CLI (Vercel) All methods and platforms ↓
npx skills add dylantarre/animation-principles --skill loading-states -a claude-code
Open on GitHub

What loading-states does

The skill maps loading animations onto Disney's 12 principles and turns them into concrete rules. Squash & Stretch gives the indicator a slight pulse (scale 0.98–1.02), Anticipation says show the loading state the moment an action fires, and Staging puts the indicator where the content will land. Skeletons have to match the real content proportions — wrong shapes break the illusion.

Timings are spelled out per type. A spinner appears after a 200ms delay so fast loads don't flash, and stays visible for at least 500ms; the skeleton shimmer cycle runs 1500ms. Progress bars show with no delay and ease between known percentages. The loading-to-content transition overlaps by 100ms so nothing pops.

Inside are ready CSS patterns: shimmer via linear-gradient and @keyframes, a smoothly rotating spinner, a progress bar with cubic-bezier(0.4, 0, 0.2, 1), and content reveal through content-reveal. One rule covers prefers-reduced-motion — with that setting on, a static indicator replaces the animation. If your project already has its own loading timings, this is worth checking against them: a mismatch in delay or minimum display time shows up as visible flicker.

What it helps with

  • show a spinner without waiting on a slow server response
  • build a skeleton that matches real content proportions
  • stop the indicator from flashing on fast loads
  • make the loading-to-content transition smooth
  • honour prefers-reduced-motion in loading animations

Example prompts for the agent

  • Build a product card skeleton using the loading-states skill
  • Set spinner and progress bar timings the way loading-states does
  • Check my loading animations against loading-states

How to install loading-states

1Skills CLI (Vercel)

npx skills add dylantarre/animation-principles --skill loading-states -a claude-code

2Manually: put the files in place

~/.claude/skills/loading-states/SKILL.md

Copy the whole skill folder; for one project use .claude/skills/loading-states/

Step by step, with commands for each platform: How to install skills in Claude Code: five ways

Questions about loading-states

How do I install loading-states in Claude?

Run npx skills add dylantarre/animation-principles --skill loading-states -a claude-code. The skill file lands at ~/.claude/skills/loading-states/SKILL.md.

What does loading-states do?

It describes loading animations through Disney's principles: spinners, progress bars, skeletons and shimmer. You get timings per type plus CSS patterns to implement them.

What timings does the skill recommend?

A spinner appears after 200ms and stays at least 500ms, the skeleton shimmer cycle is 1500ms, and the transition to content overlaps by 100ms.

Source text

SKILL.md · MIT
---
name: loading-states
description: Use when indicating progress or waiting - spinners, progress bars, skeleton screens, shimmer effects, or any animation showing the system is working.
---

# Loading State Animations

Apply Disney's 12 principles to communicate system activity.

## Principle Application

**Squash & Stretch**: Progress indicators can pulse/breathe to show life. Slight scale oscillation (0.98-1.02).

**Anticipation**: Show loading state immediately on action. Don't wait for slow response to show spinner.

**Staging**: Loading indicators appear where content will be. Skeleton screens match final layout.

**Straight Ahead vs Pose-to-Pose**: Design loading as a sequence: instant indicator → progress → completion → content.

**Follow Through & Overlapping**: Loading fades as content enters. Overlap the transition by 100ms.

**Slow In/Slow Out**: Progress bars ease-in-out between known percentages. Indeterminate uses smooth oscillation.

**Arcs**: Circular spinners follow true circular paths. Avoid jerky rotation.

**Secondary Action**: Skeleton shimmer + subtle pulse. Multiple signals reinforce "loading."

**Timing**:
- Show spinner after 200ms delay (avoid flash for fast loads)
- Minimum display: 500ms (prevent jarring flash)
- Skeleton shimmer cycle: 1500-2000ms

**Exaggeration**: Keep minimal - loading shouldn't distract, just reassure.

**Solid Drawing**: Skeletons should match content proportions. Wrong shapes break the illusion.

**Appeal**: Loading should feel optimistic, not tedious. Smooth motion suggests progress.

## Timing Recommendations

| Loading Type | Appear Delay | Min Display | Animation Cycle |
|-------------|--------------|-------------|-----------------|
| Spinner | 200ms | 500ms | 700-800ms |
| Progress Bar | 0ms | - | smooth fill |
| Skeleton | 0ms | 500ms | 1500ms shimmer |
| Button Spinner | 0ms | 400ms | 600ms |
| Full Page | 100ms | 800ms | 1000ms |

## Implementation Patterns

```css
/* Skeleton shimmer */
.skeleton {
  background: linear-gradient(
    90deg,
    #e0e0e0 0%,
    #f0f0f0 50%,
    #e0e0e0 100%
  );
  background-size: 200% 100%;
  animation: shimmer 1500ms ease-in-out infinite;
}

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

/* Spinner with smooth rotation */
.spinner {
  animation: spin 700ms linear infinite;
  opacity: 0;
  animation: fade-in 200ms 200ms ease-out forwards, spin 700ms linear infinite;
}

/* Progress bar with easing */
.progress-fill {
  transition: width 300ms cubic-bezier(0.4, 0, 0.2, 1);
}
```

## Loading-to-Content Transition

```css
.content-enter {
  animation: content-reveal 300ms ease-out forwards;
}

@keyframes content-reveal {
  from {
    opacity: 0;
    transform: translateY(10px);
  }
  to {
    opacity: 1;
    transform: translateY(0);
  }
}
```

## Key Rules

1. Delay spinner appearance by 200ms to avoid flash
2. Keep loading visible minimum 500ms once shown
3. Skeleton shapes must match real content dimensions
4. Transition smoothly from loading to content - never pop
5. Respect `prefers-reduced-motion` - show static indicator instead

© dylantarre · MIT · dylantarre/animation-principles

Similar skills

Everything for Frontend and UI →

loading-states by other authors comes first.

From the same set86

Project sponsors

Companies that keep this analytics open
Gold sponsor

Impressions, clicks and code copies — open statistics. We keep the numbers public for the same reason NeBlask itself is public. Become a sponsor