Skip to content
Back to skills

Interaction Motion

ASecurity

Use when specifying or reviewing motion and interaction feel — transitions, gestures, feedback timing, loading and progress. Invoked by product-designer while composing screens and by any IC implementing an animated surface. Triggers whenever something moves, and whenever something takes long enough that the user must be told.

  • 4 stars
  • 0 votes
  • 0 copies
  • 4 views
  • Added September 6, 2026
development

Security analysis

A100/100

Scanned September 6, 2026

npx -y skills add vmobifystudio/app-dev-team --skill interaction-motion --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Interaction Motion?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Interaction Motion
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/vmobifystudio-interaction-motion/badge)](https://www.skillsdirectory.com/skills/vmobifystudio-interaction-motion)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: interaction-motion
description: Use when specifying or reviewing motion and interaction feel — transitions, gestures, feedback timing, loading and progress. Invoked by product-designer while composing screens and by any IC implementing an animated surface. Triggers whenever something moves, and whenever something takes long enough that the user must be told.
---

# Interaction and motion

Motion has one job: **tell the user what just happened and where they are now**. Motion that decorates
costs battery, costs frames, and costs the users who cannot tolerate it.

## The durations

Do not invent a duration. Use the token, and use the shortest one that reads:

| Token | Use |
|---|---|
| `fast` 150ms ease-out | state feedback — press, toggle, ripple, checkbox |
| `base` 250ms ease-in-out | element enters or leaves within a screen |
| `slow` 400ms | full-screen transition, only when it carries spatial meaning |

Anything longer than 400ms is not motion, it is a wait — and a wait needs progress, not an animation.

## Feedback timing

| Elapsed | The interface owes the user |
|---|---|
| < 100ms | nothing — it feels instant |
| 100ms–1s | immediate visual acknowledgement that the input landed |
| 1s–10s | a determinate progress indicator if progress is knowable, an indeterminate one if not |
| > 10s | the ability to leave and come back, and a way to cancel |

A spinner with no cancel on a long operation is a trap; that is a reliability finding as much as a
design one.

## The rules

- **Motion must be interruptible.** A user tapping during an animation is answered immediately, not
  after it finishes.
- **Position must be preserved.** An element that moves animates from where it was; an element that
  is replaced cross-fades. Getting this backwards is what makes an interface feel arbitrary.
- **Respect reduce-motion.** `UIAccessibility.isReduceMotionEnabled` /
  `Settings.Global.ANIMATOR_DURATION_SCALE` / `prefers-reduced-motion`. The reduced path replaces
  movement with a cross-fade or an instant change — **it never removes the feedback itself**, which
  would leave those users with no indication anything happened.
- **Nothing animates on first paint** except what the user's own action caused.
- **No animation loops indefinitely** except a genuine indeterminate progress indicator.

## Output

One `## Motion` section in `docs/14-components.md`: per component, what animates, which token, and
what the reduced-motion path is. A component with no reduced-motion line is not specified.

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…