agentsclimarketplace

11 motion and interaction system

Skill heymegabyte/claude-skills/11-motion-and-interaction-system

14-category autonomous product-building OS for 32+ AI coding tools. One-line prompts → deployed products.

Install
npx -y skills add heymegabyte/claude-skills --skill 11-motion-and-interaction-system

Assembled from the repository path, not quoted from the project. Check it against their README if it does not work.

2 things to look at

  • no licenseNo license file was found in the repository. Code published without one is not open source by default, so using it at work is a question for whoever answers licensing questions where you are.
  • 18 stars18 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.

What its author says it does

Copied from the file, not written here

Meaning-first animation with 3-tier hierarchy. CSS scroll-driven (animation-timeline: scroll()), View Transitions API, @starting-style DOM-insert, container scroll-state queries, prefers-reduced-motion mandatory on all animations.

The file declares its own license as Rutgers. That is the author’s claim about this one file, and it is not the same thing as the license GitHub reports for the repository, which is listed with the other numbers below.

SKILL.md

5.4 KB, as published. Nobody here has run it

11 — Motion and Interaction System

Apply meaning-first CSS animations (scroll-driven, View Transitions, @starting-style) with mandatory prefers-reduced-motion on every animated surface.

Motion serves one of three purposes

  1. Feedback — confirm user action (button press, form submit, save)
  2. Continuity — preserve spatial context across state changes (page transition, modal open)
  3. Delight — express brand personality (hero parallax, signature reveal)

Anything else = AI slop. Cut it.

3-Tier Hierarchy

  • Tier 1 — Functional — feedback on every interaction (hover, focus, active, tap). Duration 100–200ms. Transform/opacity only.
  • Tier 2 — Choreographic — page transitions, modal entrance, section reveal. Duration 300–500ms. View Transitions or @starting-style.
  • Tier 3 — Cinematic — hero parallax, signature reveal, scroll-driven storytelling. Duration ≥600ms. Scroll-timeline.

Never stack 3 tiers on same surface. One cinematic per page.

Mandatory prefers-reduced-motion

EVERY animation MUST honor prefers-reduced-motion: reduce — snap to final state, never hide content.

@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;
  }
}

View Transitions API

  • Same-document SPA: document.startViewTransition(() => updateDOM())
  • Cross-document MPA: @view-transition { navigation: auto; } in CSS
  • Per-element: view-transition-name: hero-image; on persistent elements
  • Chrome 126+, Safari 18+, Firefox 144 (Oct 2025)
::view-transition-old(root), ::view-transition-new(root) {
  animation-duration: 0.3s;
  animation-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
}

Scroll-Driven Animations

  • animation-timeline: scroll() (root scroller) or view() (element-in-viewport)
  • Off-main-thread on Chrome stable + Safari 26 (2025)
  • Firefox unsupported — pair with prefers-reduced-motion AND duration:1ms fallback
@keyframes fade-up { from { opacity: 0; transform: translateY(20px); } to { opacity: 1; transform: translateY(0); } }
.reveal { animation: fade-up linear; animation-timeline: view(); animation-range: entry 0% cover 30%; }

@starting-style (DOM-insert animation)

Baseline 2026 — animates from explicit starting state to default state when element enters DOM.

.toast { opacity: 1; transform: translateY(0); transition: opacity 0.3s, transform 0.3s; }
@starting-style { .toast { opacity: 0; transform: translateY(-10px); } }

Container Scroll-State Queries (Baseline 2026)

@container scroll-state(stuck: top) — replaces JS scroll-listener-based sticky styling.

.nav { container-type: scroll-state; }
@container scroll-state(stuck: top) { .nav { box-shadow: 0 4px 12px rgba(0,0,0,0.4); } }

Micro-Interactions (Tier 1 patterns)

  • Button presstransform: scale(0.98) on :active, 100ms
  • Hovertransform: translateY(-1px) + color shift, 200ms
  • Focus-visible — 3px brand-accent ring, 2px offset, 0ms (instant)
  • Tap — haptic feedback via navigator.vibrate(10) if supported
  • Toggle — animated check/cross morph via <svg> path interpolation
  • Loading — pulse 1.2s ease-in-out infinite

Stagger sequences (no JS needed)

.list-item { animation: fade-up 0.4s ease-out backwards; }
/* OR use sibling-index() (Baseline 2026) */
.list-item { transition-delay: calc((sibling-index() - 1) * 80ms); }

Performance constraints

  • Animate transform + opacity ONLY on hot paths
  • will-change sparingly (transform, opacity only when actually animated)
  • Drop GPU layers after animation completes
  • INP target ≤100ms per _kernel/standards.md#cwv — animations must not block input

Interaction polish (every interactive element)

Per 10-experience-and-design-system § 4-state distinction:

  • Default → neutral
  • Hover → underline-sweep + color shift + translateY(-1px)
  • Focus-visible → 3px brand-accent ring 2px offset (distinct from hover)
  • Active → scale(0.98) + immediate color confirm

Audit gate: Playwright cycles each interactive through 4 states → diff ≥3px pixel-difference or fail.

Banned motion

  • ❌ Uniform fade-in on every element (AI slop tell)
  • ❌ Parallax on every section (one cinematic per page)
  • ❌ Spinning loaders that don't progress
  • ❌ Auto-playing video with sound
  • ❌ Carousel auto-rotate (manual swipe only — accessibility)
  • ❌ Scroll-jacking that breaks browser back button
  • ❌ Animations that block input (INP >100ms)
  • ❌ Easter eggs on critical conversion paths

See submodules: view-transitions.md, scroll-driven.md, micro-interactions.md, reduced-motion.md, build-breaking-rules.md.

Keep looking

Skills are one crate of 328,083. Ordering is by how many stacks a row turns up in, so the top of any crate is what has actually been picked rather than what has the most stars.