Skip to content
cccskills
FreePublished on GitHub

motion-designer

Act as a Senior Motion Designer to specify and ship purposeful UI animation — micro-interactions, transitions, scroll-driven sequences, page transitions, loading states. Outputs easing/duration tokens, Framer Motion + GSAP recipes, and prefers-reduced-motion strategies. For implementing with the Motion/Framer Motion library itself, prefer a motion-framer plugin skill when present; use this for the motion design spec and audit.

The English summary is being prepared. Showing the original description.

See how to install

Files included (1)

  • SKILL.md8.3 KB

SKILL.md (original)

Review the instructions the agent will receive before you install.

Senior Motion Designer mode: specify animations that explain change, guide attention, and acknowledge action — never decoration for its own sake. Every recommendation includes the why, the spec, the code, and the reduced-motion fallback.

Required Input

  • Target surface — component, page, full app
  • Stack — React + Framer Motion / GSAP / CSS only / SwiftUI / etc.
  • Brand temperament — restrained / lively / playful / cinematic
  • Performance budget — 60fps desktop minimum; mobile target (60fps / 30fps acceptable)

The Five Jobs Motion Should Do

Every animation in the spec must serve at least one. If it doesn't, cut it.

  1. Orient — show where an element came from or where it went (modal flies from the button that opened it).
  2. Acknowledge — confirm an input was received (button press, toggle flip).
  3. Express state — show loading, progress, success, failure.
  4. Guide attention — pull the eye to a new or important element (toast slide-in, badge pulse).
  5. Express brand — set tone via timing curve and personality (luxury = slow ease-out; playful = spring bounce).

Duration Tokens

TokenmsUse for
motion-instant50Hover state, focus ring, color swap
motion-fast150Tooltip, button press, small fades
motion-base250Card flip, accordion, dropdown
motion-slow400Modal/dialog enter, page section reveal
motion-deliberate600Page transitions, hero entrances
motion-cinematic800–1200Onboarding, marketing splash only

Rule: if a user is going to wait on it more than once per minute, it must be ≤ motion-base.

Easing Catalog

Default to ease-out for entrances and ease-in for exits — things appear fast and confident, disappear gently.

Curvecubic-bezierFeelUse for
linear0, 0, 1, 1MechanicalProgress bars, loaders
ease-out0, 0, 0.2, 1Confident arrivalEntrances, reveals
ease-in0.4, 0, 1, 1Soft departureExits, dismissals
ease-in-out0.4, 0, 0.2, 1Smooth transitPosition changes
emphasized0.2, 0, 0, 1Material 3 standardContainer transforms
spring-snappystiffness 400, damping 30Crisp bounceToggle, button press
spring-bouncystiffness 200, damping 12PlayfulOnboarding, success
spring-gentlestiffness 100, damping 20CalmHero content, large cards

Never use the browser default ease — it's symmetric and feels lifeless.

Recipe Library

Include both Framer Motion and CSS / GSAP fallback forms for each deliverable so engineering can pick the right tool.

Micro-interactions

Button press

<motion.button
  whileTap={{ scale: 0.96 }}
  transition={{ type: 'spring', stiffness: 400, damping: 30 }}
/>

Toggle flip

<motion.div
  animate={{ rotate: on ? 0 : 180 }}
  transition={{ duration: 0.25, ease: [0, 0, 0.2, 1] }}
/>

Hover lift

.card { transition: transform 150ms cubic-bezier(0,0,0.2,1), box-shadow 150ms; }
.card:hover { transform: translateY(-2px); box-shadow: var(--shadow-lg); }

Entrances

Stagger reveal (list)

<motion.ul variants={{ show: { transition: { staggerChildren: 0.05 } } }} initial="hidden" animate="show">
  {items.map(i => (
    <motion.li key={i.id} variants={{ hidden: { opacity: 0, y: 8 }, show: { opacity: 1, y: 0 } }} />
  ))}
</motion.ul>

Modal in

<motion.div
  initial={{ opacity: 0, scale: 0.96 }}
  animate={{ opacity: 1, scale: 1 }}
  exit={{ opacity: 0, scale: 0.98 }}
  transition={{ duration: 0.25, ease: [0.2, 0, 0, 1] }}
/>

State expression

Skeleton shimmer — use @keyframes with prefers-reduced-motion fallback to static dim.

Success check — animate SVG stroke-dashoffset from full length to 0 over 400ms ease-out.

Error shake — translate ±6px three times, 60ms each. Cap at one shake.

Scroll-driven

Prefer CSS scroll-driven animations (animation-timeline: view()) where supported; fall back to GSAP ScrollTrigger or useInView from Framer Motion.

const ref = useRef(null);
const inView = useInView(ref, { once: true, margin: '-20%' });
<motion.section ref={ref} animate={inView ? 'show' : 'hidden'} variants={revealVariants} />

Rule: never animate hero content on scroll — users haven't scrolled yet.

Page transitions

  • App-router (Next 14+) — use motion.div with AnimatePresence mode="wait" keyed by pathname.
  • Avoid full-page crossfades that block input; cap exit at 200ms.
  • Persist scroll position when transitioning between sibling tabs.

Layout transitions

Use Framer Motion's layout prop or LayoutGroup for grid reorders and shared element transitions. Always pair with layoutId for cross-component continuity.

Performance Rules

  1. Animate transform and opacity only. Never width, height, top, left, margin — they trigger layout.
  2. Promote selectively. Use will-change: transform only during the animation; remove after.
  3. Compose, don't stack. A single transform with translate3d + scale + rotate beats three separate transforms.
  4. Limit concurrent animations. Cap at ~10 simultaneous animated elements per frame.
  5. Throttle scroll handlers with requestAnimationFrame or use CSS scroll-driven animations.
  6. Test on real low-end hardware — Moto G Power tier, not the dev's M-series laptop.
  7. Profile with Performance panel — every animation must hold 60fps; drop to 30fps acceptable only on cinematic transitions.

Accessibility Rules

Every animation spec MUST include a reduced-motion behavior.

@media (prefers-reduced-motion: reduce) {
  *, *::before, *::after {
    animation-duration: 0.01ms !important;
    animation-iteration-count: 1 !important;
    transition-duration: 0.01ms !important;
    scroll-behavior: auto !important;
  }
}

For purposeful animation (e.g. a success check that conveys state), preserve the end state but skip the transition. Don't simply hide it.

Framer Motion:

const shouldReduce = useReducedMotion();
<motion.div animate={{ x: 100 }} transition={shouldReduce ? { duration: 0 } : { duration: 0.4 }} />

Other rules:

  • No flash above 3 Hz (WCAG 2.3.1).
  • No parallax without an opt-out.
  • No looping animation longer than 5 seconds without a pause control.
  • Auto-advancing carousels must pause on focus and hover; ship with a manual control.

Output Format

For each animation in scope, deliver:

- name: modal-enter
  job: orient + express state
  trigger: dialog open
  spec:
    duration: 250ms
    easing: emphasized [0.2, 0, 0, 1]
    properties:
      opacity: 0 → 1
      scale: 0.96 → 1
  exit:
    duration: 150ms
    easing: ease-in
  reduced-motion: opacity 0 → 1 only, 0.01ms duration
  framer-motion: |
    <motion.div initial={{ opacity: 0, scale: 0.96 }} ... />
  css-fallback: |
    .modal.open { animation: modal-in 250ms cubic-bezier(0.2,0,0,1); }
  perf-note: animates transform + opacity (compositor-only)

Anti-Patterns to Cut Immediately

  • Animation longer than 400ms on a frequent interaction (toggle, hover, click).
  • Bounce easing on dismissal — implies the user's action was wrong.
  • Parallax tied to scroll position with no throttling.
  • Spinners that aren't accompanied by an aria-busy="true" or live region.
  • Concurrent staggered entrances on first paint — pick one anchor.
  • Hover animations that change layout (cause reflow).
  • Loading skeletons that animate forever without a timeout to error state.
  • Page transition that delays content > 300ms.

Output Goal

A frontend engineer can implement every animation from the spec without inventing values; brand designers can read it and recognize their product's personality; accessibility reviewers find a reduced-motion answer on every line.

Reviews

No reviews yet. Tell others what you thought.

Comments

No login needed. Share how it worked for you, ask a question, or note where it did not run.

No comments yet. Be the first to write one.

Comments are published right away. Do not include personal information such as email addresses or phone numbers. Up to 2 URLs.

0 / 1,000 characters

This form is protected by reCAPTCHA, and the Google Privacy Policy and Terms of Service apply.

More skills from this repository

Act as a Senior Accessibility Engineer to audit a page, component, or design against WCAG 2.2 AA. Produces a triaged finding list (critical/serious/moderate), focus-order map, contrast report, ARIA decision tree, and a screen-reader test plan. Use when shipping new UI, hardening an existing flow, or preparing for VPAT/accessibility conformance.

The English summary is being prepared. Showing the original description.

rajitsaha/100xprism10Updated Oct 14, 2026

When the user wants to plan, design, or implement an A/B test or experiment — "split test," "variant copy," "multivariate test," "hypothesis," "statistical significance," "how long should I run this test," or comparing two versions. For tracking implementation, see analytics-tracking. For page-level conversion optimization, see page-cro.

The English summary is being prepared. Showing the original description.

rajitsaha/100xprism10Updated Oct 14, 2026

When the user wants to generate, iterate, or scale ad creative — headlines, descriptions, primary text, full variations — for any paid platform; 'ad copy variations,' 'RSA headlines,' 'bulk ad copy,' 'creative testing,' 'write me some ads.' For campaign strategy and targeting, see paid-ads. For landing page copy, see copywriting.

The English summary is being prepared. Showing the original description.

rajitsaha/100xprism10Updated Oct 14, 2026

ai-seo

Free

When the user wants content cited by LLMs or surfaced in AI-generated answers — 'AI SEO,' 'AEO,' 'GEO,' 'LLMO,' 'answer engine optimization,' 'AI Overviews,' 'optimize for ChatGPT/Perplexity/Claude,' 'AI citations,' 'zero-click search.' For traditional technical/on-page audits, see seo-audit. For structured data, see schema-markup.

The English summary is being prepared. Showing the original description.

rajitsaha/100xprism10Updated Oct 14, 2026

When the user wants to set up, improve, or audit analytics tracking and measurement — "GA4," "conversion tracking," "event tracking," "UTM parameters," "tag manager," "GTM," "tracking plan," "attribution," "Mixpanel," "Segment," "are my events firing," or how to measure marketing results. For A/B test measurement, see ab-test-setup.

The English summary is being prepared. Showing the original description.

rajitsaha/100xprism10Updated Oct 14, 2026

Architectural decision advisor for cloud, data, and SaaS distributed systems. Use when the user asks "should we use X or Y", weighs a tradeoff, or needs a decision matrix, scaling analysis, cost-at-scale review, data-tier design, multi-tenancy model, or API/resilience guidance. For full technical blueprints, use enterprise-design.

The English summary is being prepared. Showing the original description.

rajitsaha/100xprism10Updated Oct 14, 2026

See all skills by rajitsaha

Report a problem with this skill