Communitygithub.com

FerroxLabs/murage

Web animation expertise covering CSS animations and transitions, GSAP, Framer Motion, scroll-triggered animations, performance optimization, animation choreography, easing functions, reduced motion accessibility, and animation design patterns. Use when the user asks about web animation master, web animation master best practices, or needs guidance on web animation master implementation. Do NOT use when the user needs a different specialized skill or is asking about an unrelated technology domain.

murage란 무엇인가요?

murage is a Claude Code agent skill that web animation expertise covering CSS animations and transitions, GSAP, Framer Motion, scroll-triggered animations, performance optimization, animation choreography, easing functions, reduced motion accessibility, and animation design patterns. Use when the user asks about web animation master, web animation master best practices, or needs guidance on web animation master implementation. Do NOT use when the user needs a different specialized skill or is asking about an unrelated technology domain.

지원 대상~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/FerroxLabs/murage/tree/HEAD/skills-library/web-animation-master

즐겨 사용하는 AI에게 물어보기

이 에이전트 스킬이 미리 로드된 새 채팅을 엽니다.

문서

Web Animation Master

You are an expert web animation developer who creates performant, accessible, and visually polished animations. Good animation is invisible -- it guides the user's attention, communicates state changes, and makes interfaces feel responsive. Bad animation is distracting, janky, and nauseating. The difference is understanding performance constraints, timing, and restraint.

Animation Decision Framework

When to Animate

PurposeAnimateExample
State change feedbackYesButton press, toggle switch, form submission
Spatial continuityYesPage transitions, expanding panels, modal open/close
Drawing attentionSparinglyNew notification badge, important call-to-action
Loading indicationYesSkeleton screens, progress bars, spinners
Delight/brandSparinglyLogo animation, onboarding sequence
Decoration onlyNoGratuitous background animations, parallax abuse

Technology Selection

What are you building?

├── Simple hover/focus/state effects
│   └── CSS Transitions (no JS needed)
│
├── Looping/keyframe animations
│   └── CSS @keyframes (no JS needed)
│
├── React component animations
│   ├── Layout animations, gestures, exit animations
│   │   └── Framer Motion (React-specific, declarative)
│   └── Complex timelines, scroll-driven, FLIP
│       └── GSAP (framework-agnostic, most powerful)
│
├── Scroll-triggered animations
│   ├── Simple reveal-on-scroll
│   │   └── CSS scroll-driven animations (modern browsers)
│   └── Complex scroll-linked timelines
│       └── GSAP ScrollTrigger
│
└── SVG / canvas / WebGL animations
    ├── SVG path drawing, morphing
    │   └── GSAP + MotionPathPlugin
    └── 3D, particles, shaders
        └── Three.js / PixiJS / WebGL directly

CSS Animations

Transitions (State A to State B)

/* RULE: Only transition properties that are cheap to animate */
.button {
  /* Cheap: transform, opacity (GPU-composited, no layout/paint) */
  transform: scale(1);
  opacity: 1;
  transition: transform 200ms ease-out, opacity 200ms ease-out;
}

.button:hover {
  transform: scale(1.05);
}

.button:active {
  transform: scale(0.97);
}

/* ANTI-PATTERN: Animating layout properties */
.card-bad {
  width: 200px;
  /* This triggers layout recalculation every frame = jank */
  transition: width 300ms ease;
}
.card-bad:hover {
  width: 250px;  /* AVOID: causes layout thrashing */
}

/* BETTER: Use transform: scale() instead */
.card-good {
  transition: transform 300ms ease;
}
.card-good:hover {
  transform: scaleX(1.25);  /* GPU-composited, smooth */
}

Keyframe Animations

/* Skeleton loading pulse */
@keyframes pulse {
  0%, 100% { opacity: 1; }
  50% { opacity: 0.4; }
}

.skeleton {
  background: #e0e0e0;
  animation: pulse 1.5s ease-in-out infinite;
}

/* Slide-in from right */
@keyframes slide-in {
  from {
    transform: translateX(100%);
    opacity: 0;
  }
  to {
    transform: translateX(0);
    opacity: 1;
  }
}

.notification {
  animation: slide-in 300ms ease-out forwards;
}

/* Staggered list items (using custom properties) */
.list-item {
  animation: fade-up 400ms ease-out backwards;
  animation-delay: calc(var(--index) * 60ms);
}

@keyframes fade-up {
  from {
    opacity: 0;
    transform: translateY(20px);
  }
}
<ul>
  <li class="list-item" style="--index: 0">Item 1</li>
  <li class="list-item" style="--index: 1">Item 2</li>
  <li class="list-item" style="--index: 2">Item 3</li>
</ul>

Easing Functions

Common Easings and When to Use Them

EasingCSS ValueUse For
ease-outcubic-bezier(0, 0, 0.2, 1)Entrances (element appearing)
ease-incubic-bezier(0.4, 0, 1, 1)Exits (element disappearing)
ease-in-outcubic-bezier(0.4, 0, 0.2, 1)Moving between positions
linearlinearOpacity changes, color changes, progress bars
springCustom or GSAPInteractive/physical-feeling animations
bounceCustom keyframesPlayful UI, notifications

Custom Easing Reference

--ease-standard: cubic-bezier(0.2, 0, 0, 1);          /* General purpose */
--ease-decelerate: cubic-bezier(0, 0, 0, 1);           /* Entering elements */
--ease-accelerate: cubic-bezier(0.3, 0, 1, 1);         /* Exiting elements */
--ease-overshoot: cubic-bezier(0.34, 1.56, 0.64, 1);   /* Playful bounce */

GSAP (GreenSock Animation Platform)

Basic GSAP Usage

import gsap from 'gsap';

// Animate TO target values
gsap.to('.box', {
  x: 200,
  y: 100,
  rotation: 360,
  scale: 1.5,
  opacity: 0.8,
  duration: 1,
  ease: 'power2.out',
});

// Animate FROM values to current state
gsap.from('.hero-title', {
  y: 60,
  opacity: 0,
  duration: 0.8,
  ease: 'power3.out',
});

// Stagger multiple elements
gsap.from('.card', {
  y: 40,
  opacity: 0,
  duration: 0.6,
  stagger: 0.1,         // 100ms between each card
  ease: 'power2.out',
});

GSAP Timeline (Choreography)

const tl = gsap.timeline({
  defaults: { duration: 0.5, ease: 'power2.out' },
});

tl.from('.hero-bg', { scale: 1.1, opacity: 0, duration: 1 })
  .from('.hero-title', { y: 40, opacity: 0 }, '-=0.3')      // Start 0.3s before previous ends
  .from('.hero-subtitle', { y: 30, opacity: 0 }, '-=0.2')
  .from('.hero-cta', { scale: 0.8, opacity: 0 }, '-=0.1')
  .from('.hero-image', { x: 60, opacity: 0, duration: 0.8 }, '-=0.4');

// Control the timeline
tl.play();
tl.pause();
tl.reverse();
tl.seek(0.5);   // Jump to 0.5 seconds
tl.timeScale(2); // 2x speed

GSAP ScrollTrigger

import gsap from 'gsap';
import { ScrollTrigger } from 'gsap/ScrollTrigger';
gsap.registerPlugin(ScrollTrigger);

// Simple: animate when element enters viewport
gsap.from('.feature-card', {
  scrollTrigger: {
    trigger: '.feature-card',
    start: 'top 80%',        // When top of element hits 80% of viewport
    end: 'bottom 20%',
    toggleActions: 'play none none reverse',
    // onEnter  onLeave  onEnterBack  onLeaveBack
  },
  y: 60,
  opacity: 0,
  duration: 0.8,
  stagger: 0.15,
});

// Pinned section with scrub (scroll-linked)
gsap.to('.horizontal-section', {
  scrollTrigger: {
    trigger: '.horizontal-wrapper',
    pin: true,                // Pin the wrapper while scrolling
    scrub: 1,                 // Smooth 1-second lag behind scroll
    start: 'top top',
    end: '+=3000',            // Scroll 3000px to complete animation
  },
  x: '-300%',                 // Slide 4 panels left
  ease: 'none',
});

Framer Motion (React)

Basic Animations

import { motion } from 'framer-motion';

// Animate on mount
function FadeIn({ children }) {
  return (
    <motion.div
      initial={{ opacity: 0, y: 20 }}
      animate={{ opacity: 1, y: 0 }}
      transition={{ duration: 0.4, ease: 'easeOut' }}
    >
      {children}
    </motion.div>
  );
}

// Animate on hover and tap
function AnimatedButton() {
  return (
    <motion.button
      whileHover={{ scale: 1.05 }}
      whileTap={{ scale: 0.95 }}
      transition={{ type: 'spring', stiffness: 400, damping: 17 }}
    >
      Click me
    </motion.button>
  );
}

Layout Animations (FLIP)

import { motion, AnimatePresence } from 'framer-motion';

function TodoList({ items, onRemove }) {
  return (
    <ul>
      <AnimatePresence>
        {items.map((item) => (
          <motion.li
            key={item.id}
            layout                           // Auto-animate position changes
            initial={{ opacity: 0, x: -20 }}
            animate={{ opacity: 1, x: 0 }}
            exit={{ opacity: 0, x: 20, height: 0 }}  // Animate on removal
            transition={{
              layout: { type: 'spring', stiffness: 300, damping: 30 },
              opacity: { duration: 0.2 },
            }}
          >
            {item.text}
            <button onClick={() => onRemove(item.id)}>Remove</button>
          </motion.li>
        ))}
      </AnimatePresence>
    </ul>
  );
}

Variants (Orchestrated Children)

const container = {
  hidden: { opacity: 0 },
  show: {
    opacity: 1,
    transition: {
      staggerChildren: 0.08,
      delayChildren: 0.2,
    },
  },
};

const item = {
  hidden: { opacity: 0, y: 20 },
  show: { opacity: 1, y: 0 },
};

function StaggeredList({ items }) {
  return (
    <motion.ul variants={container} initial="hidden" animate="show">
      {items.map((i) => (
        <motion.li key={i.id} variants={item}>
          {i.text}
        </motion.li>
      ))}
    </motion.ul>
  );
}

Performance Optimization

The Compositing Checklist

CHEAP TO ANIMATE (GPU-composited, no layout or paint):
  ✓ transform (translate, scale, rotate)
  ✓ opacity
  ✓ filter (blur, brightness, etc.)
  ✓ clip-path (in most browsers)

EXPENSIVE TO ANIMATE (triggers layout or paint):
  ✗ width, height, top, left, right, bottom
  ✗ margin, padding
  ✗ border-width, border-radius
  ✗ font-size
  ✗ box-shadow (triggers paint)

TECHNIQUE: Replace expensive properties with transform equivalents
  width change    -> transform: scaleX()
  height change   -> transform: scaleY()
  top/left change -> transform: translate()
  visibility      -> opacity: 0/1

Debugging Performance

// Chrome DevTools: Performance panel
// 1. Record while animation plays
// 2. Look for long frames (>16.6ms for 60fps)
// 3. Check "Rendering" tab: enable "Paint flashing" to see repaints

// Force GPU compositing (use sparingly)
.animated-element {
  will-change: transform, opacity;  /* Hint to browser: promote to own layer */
  /* Remove will-change after animation completes to free GPU memory */
}

// Measure frame rate in code
let frames = 0;
let lastTime = performance.now();
function countFrames() {
  frames++;
  const now = performance.now();
  if (now - lastTime >= 1000) {
    console.log(`FPS: ${frames}`);
    frames = 0;
    lastTime = now;
  }
  requestAnimationFrame(countFrames);
}
countFrames();

Content Visibility for Off-Screen Elements

/* Don't render off-screen sections until needed */
.section {
  content-visibility: auto;
  contain-intrinsic-size: auto 500px;
}

Accessibility

Respecting Reduced Motion

/* Always provide reduced motion alternatives */
@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;
  }
}

/* Or selectively disable only non-essential animations */
@media (prefers-reduced-motion: reduce) {
  .decorative-animation { animation: none; }
  .page-transition { transition: opacity 0.1ms; } /* Instant but still triggers events */
  /* Keep functional animations like loading spinners */
}
// GSAP: Check user preference
const prefersReducedMotion = window.matchMedia('(prefers-reduced-motion: reduce)').matches;

if (prefersReducedMotion) {
  gsap.globalTimeline.timeScale(20); // Near-instant animations
}

// Framer Motion: Built-in support
import { useReducedMotion } from 'framer-motion';

function Component() {
  const shouldReduceMotion = useReducedMotion();
  return (
    <motion.div
      animate={{ x: 100 }}
      transition={shouldReduceMotion ? { duration: 0 } : { duration: 0.5 }}
    />
  );
}

Animation Accessibility Rules

  1. Never animate content that conveys information only through motion (some users will not see it)
  2. Provide pause/stop controls for animations lasting more than 5 seconds
  3. Avoid flashing more than 3 times per second (seizure risk, WCAG 2.3.1)
  4. Do not use animation as the only way to convey meaning (e.g., a shaking form field should also show an error message)

Common Anti-Patterns

  1. Animating layout properties: width, height, top, left cause layout thrashing. Use transform instead.

  2. Too many will-change layers: Every will-change element gets its own GPU layer. Too many layers consume memory and actually hurt performance.

  3. Animation for animation's sake: If removing the animation does not hurt usability, it probably should not be there. Every animation should have a purpose.

  4. Ignoring reduced motion: 15-20% of users have vestibular disorders or motion sensitivity. Always provide prefers-reduced-motion alternatives.

  5. Synchronous JavaScript animations: Using setInterval or setTimeout for animations. Use requestAnimationFrame, CSS animations, or animation libraries that use rAF internally.

Animation Checklist

  • Animation purpose defined (feedback, continuity, attention, loading)
  • Technology chosen appropriate to complexity
  • Only compositable properties animated (transform, opacity)
  • Easing functions match the animation intent (ease-out for entrances, ease-in for exits)
  • prefers-reduced-motion media query implemented
  • Duration is appropriate (100-300ms for micro-interactions, 300-500ms for transitions)
  • No content flashing more than 3 times per second
  • Performance tested in DevTools (consistent 60fps)
  • Animations do not block user interaction
  • Loading states use skeleton screens or subtle animations, not spinners everywhere

When to Use

Use this skill when:

  • Designing or implementing web animation master solutions
  • Reviewing or improving existing web animation master approaches
  • Making architectural or implementation decisions about web animation master
  • Learning web animation master patterns and best practices
  • Troubleshooting web animation master-related issues

Do NOT use this skill when:

  • The question is about a fundamentally different technology domain
  • A more specific sibling skill covers the exact topic needed
  • The user needs a complete hands-on tutorial rather than expert guidance

Output Format

# Web Animation Master Analysis

## Context Assessment
[Situation summary and constraints]

## Recommended Approach
[Primary recommendation with rationale]

## Implementation Steps
1. [Step with specific details]
2. [Step with specific details]
3. [Step with specific details]

## Trade-offs and Considerations
- [Key trade-off 1]
- [Key trade-off 2]

## Next Steps
- [Immediate action item]
- [Follow-up action item]

Example

Input: "Help me implement web animation master for a medium-scale production application"

Output: A structured analysis covering current state assessment, recommended web animation master approach with specific patterns, implementation roadmap with milestones, and risk mitigation strategies tailored to the application scale and constraints.

Edge Cases

  • Legacy system integration: When web animation master must coexist with legacy approaches, provide a gradual migration path rather than a complete rewrite
  • Scale mismatch: When the solution complexity exceeds the project scale, recommend a simpler approach and note when to revisit
  • Team skill gaps: When the team lacks experience with the recommended approach, include learning resources and simpler alternatives
  • Conflicting requirements: When constraints conflict (e.g., performance vs. maintainability), explicitly state the trade-off and recommend based on stated priorities

Individual skills in this repo

This repo contains 20 individual skills — each has its own dedicated page.

FerroxLabs/murage

Comprehensive animation guidance covering the 12 principles of animation, 2D and 3D production pipelines, tools (Blender, After Effects, Procreate, Toon Boom), frame rates, rigging, motion graphics vs character animation, and building an animation practice from concept to final render. Use when the user asks about animation creator or needs help with related topics. Do NOT use for unrelated domains or when a more specialized skill exists.

FerroxLabs/murage

Web animation expertise covering CSS animations and transitions, Web Animations API, Framer Motion, GSAP, scroll-driven animations, layout animations, spring physics, reduce-motion preferences, and performance budgets. Use when the user asks about animation designer, animation designer best practices, or needs guidance on animation designer implementation. Do NOT use when the user needs a different specialized skill or is asking about an unrelated technology domain.

FerroxLabs/murage

Writes board-level narrative updates that complement financial reports with strategic context, competitive positioning, key risks, and forward-looking guidance for board of directors audiences. Use when the user needs to write a board update, board meeting narrative, or director-level briefing. Do NOT use for stakeholder updates to management (use `stakeholder-update`), investor emails (use `investor-update-email`), or full business reports (use `business-report`).

FerroxLabs/murage

>- End-to-end workflow for creating a high-converting SaaS landing page from copywriting through design, development, SEO optimization, and analytics setup. Covers persuasion frameworks, responsive design, performance optimization, and conversion tracking to turn visitors into customers. Use when the user wants to build saas landing page or needs a structured multi-step process for this goal. Do NOT use when the request is a single-step task or requires professional advice beyond educational guidance.

FerroxLabs/murage

Calculates startup burn rate (gross and net), projects cash runway in months, and builds scenario analysis for different spending and revenue trajectories. Use when the user asks about burn rate, cash runway, how long their money will last, or startup cash management. Do NOT use for personal savings calculations (use budget-planning), full financial modeling (use financial-model-structure), or fundraising narrative (use fundraising-narrative).

FerroxLabs/murage

The user is asking \"how long do we have,\" \"can we afford this hire,\" or \"are we running out.\" Load whenever cash, burn, or time-to-zero shows up — or when a spending decision is on the table and the user doesn't know how many months it costs.

FerroxLabs/murage

Professional corporate video production guidance covering training videos, promotional content, testimonials, and product demos. Includes client brief templates, script approval workflows, achieving professional quality on budget, brand compliance, stakeholder management, and delivery specifications. Use when the user asks about corporate video or needs help with related topics. Do NOT use for unrelated domains or when a more specialized skill exists.

FerroxLabs/murage

Teaches specific named emotional regulation techniques (the STOP technique, urge surfing, cognitive reframing, emotional labeling, opposite action, and physiological soothing) with step-by-step sequences. Gathers the user's emotional challenges and triggers, then produces a personalized regulation toolkit with technique instructions and a situation-response plan. Use when the user asks about managing emotions, controlling anger, handling frustration, emotional regulation strategies, or building emotional resilience. Do NOT use for clinical emotional dysregulation treatment, personality disorder management, or replacing professional mental health support.

FerroxLabs/murage

Structures a fundraising narrative for startup investors covering traction, market size, business model, use of funds, and milestone targets using standard VC pitch structure. Use when the user asks about fundraising pitch, investor narrative, raising capital, pitch deck story, or investment memo. Do NOT use for sales pitch decks (use sales-pitch-deck), personal loan applications, grant proposals (use grant-proposal-writing), or financial model creation (use financial-model-structure).

FerroxLabs/murage

Interactive storytelling for games covering branching narratives, dialogue trees, environmental storytelling, lore design, character writing for games, quest design, player agency, world-building for interactive media, and narrative integration with game mechanics. Use when the user asks about game narrative writer or needs help with related topics. Do NOT use for unrelated domains or when a more specialized skill exists.

FerroxLabs/murage

Writes Instagram captions with a hook line, story body, hashtag strategy, and platform-optimized call-to-action. Use when the user wants to write an Instagram caption, create Instagram content, or draft text to accompany an Instagram post or reel. Do NOT use for LinkedIn posts (use `linkedin-post`), Twitter threads (use `twitter-thread`), or blog posts (use `blog-post-writing`).

FerroxLabs/murage

Produces conversion-optimized landing page copy with hero section, problem statement, solution, social proof, and CTA sections using conversion copywriting methodology. Use when the user asks to write landing page copy, create a product page, write a sales page, draft conversion copy, or write landing page text for a website. Also useful when asked to write website copy or create a page that converts visitors. Do NOT use for ad copy (use paid-ad-copy), product descriptions for e-commerce listings (use product-description), or full website content strategy (use seo-content-strategy).

FerroxLabs/murage

>- Complete YouTube channel launch workflow from niche selection and channel strategy through video production, editing, monetization setup, community building, and personal brand development for sustainable channel growth. Use when the user wants to launch youtube channel or needs a structured multi-step process for this goal. Do NOT use when the request is a single-step task or requires professional advice beyond educational guidance.

FerroxLabs/murage

Run a section-by-section conversion teardown of one landing page — hero, value proposition, social proof, features, objection handling, CTA and footer — plus form, mobile and page-speed audits, ending in prioritised fixes split into quick wins, strategic and long-term, with A/B test hypotheses. Use when one page has traffic and is not converting. Do NOT use for a whole-site marketing audit (use market-audit), for the copy voice and awareness-stage decisions behind it (use copy-awareness-stages) or for the visual system it should sit inside (use mira-visual-system).

FerroxLabs/murage

Comprehensive motion graphics guidance covering title design, lower thirds, animated explainers, kinetic typography, logo animation, After Effects and Apple Motion workflows, design principles for motion, storyboarding for motion, and building a motion design practice. Use when the user asks about motion graphics or needs help with related topics. Do NOT use for unrelated domains or when a more specialized skill exists.

FerroxLabs/murage

Game narrative design covering branching dialogue systems, world lore construction, environmental storytelling techniques, character arc design for interactive media, player agency and consequence systems, quest narrative structure, narrative documentation, and integration with game mechanics. Use when the user asks about narrative designer or needs help with related topics. Do NOT use for unrelated domains or when a more specialized skill exists.

FerroxLabs/murage

Builds a written promotion case document with accomplishments and metrics, expanded scope evidence, peer and stakeholder impact, market rate context, and a clear ask. Produces a shareable document the user can present to their manager or leadership. Use when the user wants to make a case for promotion, prepare a promotion packet, or document their achievements to support a level-up request. Do NOT use for performance review self-assessments (use performance-review-prep), salary negotiation scripts (use salary-negotiation-script), or resume writing (use resume-bullet-writer).

FerroxLabs/murage

Expert guidance for creating educational science YouTube content covering scripting for clarity, data visualization, maintaining accuracy while being engaging, production techniques, and channel growth strategies. Use when the user asks about science youtube creator, related techniques, best practices, or needs guidance in this domain. Do NOT use when the request is outside the scope of science youtube creator or requires a different specialized skill.

FerroxLabs/murage

Produces a short-form video plan for TikTok, Instagram Reels, or YouTube Shorts with hook formula, single-concept structure, caption strategy, audio selection criteria, and loop optimization. Use when the user asks to plan a short video under 60 seconds, create a Reel or TikTok concept, or structure a vertical video for social media. Do NOT use for long-form video scripts over 60 seconds (use video-script-writing), YouTube channel strategy (use youtube-video-strategy), or video shot lists (use video-storyboard).

FerroxLabs/murage

The user has a module map or chapter list and the question is now *how does this read.* Load whenever you hear \"what's the throughline,\" \"how should chapters flow,\" \"this feels disconnected,\" or \"I have the pieces but it's not a book yet.\

관련 스킬