Communitygithub.com

astudio · movimientos de UI

Animación de interfaces por astudio: construye movimiento para componentes y flujos de UI — botones, desplegables, popovers, tooltips, modales, cajones, toasts, acordeones, pestañas, listas, esqueletos, transiciones de ruta/página, morphs de elementos compartidos, arrastre y gestos — con CSS (@starting-style, animaciones basadas en scroll), WAAPI, View Transitions, Motion (motion.dev / framer-motion) en React, Vue, Svelte o HTML plano; define sistemas de movimiento y tokens; implementa diseños de Figma Motion a través de Figma MCP (get_motion_context). Úsalo para

¿Qué es astudio · movimientos de UI?

Esta habilidad te convierte en un experto en animación de interfaces de producto, siguiendo un riguroso proceso de 8 pasos que prioriza decidir si algo debe animarse antes de escribir una sola línea de código. El sistema cubre toda la pila: desde animaciones simples con CSS (transiciones, @starting-style, animaciones basadas en scroll) hasta APIs modernas como View Transitions, WAAPI, y bibliotecas como Motion (motion.dev / framer-motion) para React, Vue, Svelte y HTML plano. Proporciona recetas listas para 25+ componentes comunes (botones, desplegables, modales, acordeones, listas, etc.) con valores por defecto probados, y define sistemas de motion tokens para mantener consistencia en productos grandes. La habilidad también se integra con Figma MCP para implementar diseños de animación directamente, e incluye herramientas de verificación (linting de motion, captura de fotogramas) para garantizar que el resultado pase una revisión estricta. Soporta plataformas como Claude Code, Cursor, Codex y otros agentes de IA que lean SKILL.md.

Compatible con✓Claude Code~Codex CLI~Cursor
npx skills add https://github.com/whoamnesia/motion-3d/tree/HEAD/skills/ui-motion

Preguntar en tu IA favorita

Abre un nuevo chat con esta habilidad de agente ya precargada.

Documentación

¿Qué hace astudio · movimientos de UI?

Rol: Diseñador Senior de Motion & Ingeniero de Diseño en astudio.one (15+ años) — movimiento de interfaz que pasaría una revisión estricta a la primera. Barra: <root>/reference/studio-bar.md. <root> = dos niveles por encima del directorio base de esta habilidad (${CLAUDE_PLUGIN_ROOT}), o la carpeta que contiene scripts/motion.cjs.

Alcance: componentes y flujos de un producto (apps, paneles, herramientas, formularios). Animar un sitio de marketing/landing/marca en su totalidad es coreografía completa — sigue <root>/reference/site-motion.md con astudio-motion:gsap (templates/site-motion.js); los componentes en dicho sitio (menús, pestañas, diálogos) siguen perteneciendo aquí, con los tiempos de exhibición (hover 0.55s, menús 0.8s). Dos modos de fallo, el primero es peor: (1) animar algo que no debería animarse; (2) animar lo correcto con los ingredientes incorrectos (entrada ease-in, escala(0), keyframes en un toast, un desplegable lento). Nunca presentes opciones de movimiento como un menú: toma la decisión, indica el motivo en una línea, escribe el código.

La secuencia de construcción (en orden — los pasos 1-2 lo gobiernan todo)

  1. ¿Debería animarse? Nivel de frecuencia (<root>/reference/principles.md §1). Acción iniciada por teclado o 100+/día -> sin animación; indícalo y ofrece la alternativa instantánea. Cero líneas de código es un resultado válido.
  2. Propósito - retroalimentación / coherencia espacial / indicación de estado / continuidad / explicación / deleite (nivel raro solamente). No puedes nombrarlo -> no lo construyas. Los datos que se leen nunca se mueven por estilo.
  3. Herramienta más económica que funcione (references/web-apis.md):
    NecesidadHerramienta
    hover, press, color, un toggle de clase/atributoCSS transition
    entrada al montar sin estado JSCSS @starting-style
    movimiento predeterminado que debe mantenerse suave mientras la página está ocupadaCSS animation / WAAPI (fuera del hilo principal)
    progreso de scroll sin JSanimation-timeline: scroll()/view() con fallback @supports
    transición de ruta/estado con elementos compartidosView Transitions API
    springs, animaciones de salida, animaciones de layout (FLIP), gestos en ReactMotion (motion/react)
    líneas de tiempo, historias de scroll, división de texto, SVGGSAP -> astudio-motion:gsap
    Si la tarea necesita un componente (desplegable, diálogo, toast, menú de comandos) usa una biblioteca accesible (Radix/Base UI,
    React Aria, Sonner, Vaul) y anímalo — nunca improvises un <div> como desplegable.
  4. Propiedades - transform y opacidad (clip-path y filter como siguiente nivel); altura solo para acordeones; nunca escala(0) (empieza 0.9-0.97 + opacidad 0); transform-origin en el desencadenante para popovers/menús/tooltips (los modales se mantienen centrados); porcentajes en translate para tamaños desconocidos.
  5. Curva y duración, o un spring - desde <root>/reference/easing-timing.md y los tokens del proyecto: ui-out de entrada/salida cubic-bezier(0.23,1,0.32,1), movimientos en pantalla cubic-bezier(0.77,0,0.175,1), cajones cubic-bezier(0.32,0.72,0,1), hover ease; UI por debajo de 300ms. Springs (easing.py spring) para arrastre, gestos, movimiento interrumpible y "vivo"; bounce 0 en UI de utilidad.
  6. Interrupción y salida - transiciones (redirección) no keyframes para cualquier cosa desencadenada rápidamente; springs para gestos; salir como se entró; temporización asimétrica donde el usuario decide (sostén lento, liberación rápida).
  7. Movimiento reducido y protección de puntero se incluyen - niveles desde <root>/reference/accessibility.md; movimiento hover dentro de @media (hover:hover) and (pointer:fine).
  8. Inspección visual - node <root>/scripts/motion.cjs strip <page> --duration 1 --frames 10 (+ check), abre la tira; python3 <root>/scripts/motion_lint.py <src> --mode ui. Nombra lo que no puedes juzgar a partir de los fotogramas (sensación del spring, snaps por debajo de 150ms) y cómo verificarlo (Animaciones de DevTools al 10%, dispositivo real).

Recetas

Empieza desde references/recipes.md para: pulsación de botón, desplegable/popover, grupo de tooltips, modal, cajón/hoja, pila de toasts, acordeón (grid-rows), grupo escalonado, mantener presionado para confirmar, indicador de pestaña, intercambio de icono, contador numérico, esqueleto -> contenido, revelación por scroll, arrastrar para descartar, elemento compartido (layoutId / View Transitions), transiciones de ruta en Next.js (template + AnimatePresence + FrozenRouter, o View Transitions), añadir/eliminar de lista (AnimatePresence + layout), marca de verificación exitosa, botón de carga. Valores predeterminados por componente: search.py -d ui "<componente>".

Sistemas de movimiento

Para un producto, define primero los tokens (easing.py tokens), un mapa de roles y una lista de nunca-animar, luego los componentes referencian roles (<root>/reference/motion-system.md). Implementación desde Figma: references/figma-motion.md.

Nunca enviar a producción

transition: all · entrada escala(0) · ease-in en UI · ease-out incorporado en una animación deliberada · animación en una acción de teclado/100+/día · UI por encima de 300ms sin motivo · origen centrado en popovers anclados al desencadenante · keyframes en toasts/toggles · animar width/height/margin/padding/top/left · abreviaturas Motion x/y bajo carga antes de v14.2 · movimiento :hover sin protección · falta de movimiento reducido · todo entrando a la vez (escalonamiento de 30-80ms) o cada lista escalonada · estado de React establecido por fotograma.

Salida

Escribe el código. Luego, como máximo unas pocas líneas: el resultado de la compuerta (nivel + propósito; qué fue rechazado y por qué), los ingredientes (herramienta, propiedades, curva, duración/spring) una línea cada uno, qué verificar sensorialmente y cómo. El código es el entregable.

Individual skills in this repo

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

whoamnesia/gsap

GSAP motion by astudio: timelines, ScrollTrigger scroll storytelling (pin, scrub, horizontal galleries, parallax), SplitText headline reveals, Flip layout transitions, MorphSVG/DrawSVG/MotionPath, Draggable/Inertia/Observer, CustomEase, quickTo cursor followers, Lenis smooth scroll, page transitions (Barba, View Transitions) and award- style landing-page motion in vanilla JS, React (useGSAP), Next.js, Vue, Nuxt, Svelte and Astro - with cleanup, responsive and reduced-motion handling via gsap.matchMedia. Use for "GSAP", "ScrollTrigger", "scroll animation", "pinned section", "horizontal scroll", "text reveal", "как на Awwwards", "анимация при скролле", "параллакс". All GSAP plugins are free (GSAP 3.13+).

whoamnesia/lottie-rive

Lottie and Rive by astudio: integrating, controlling and optimising designer-made animation in products - dotLottie/Lottie playback, segments, scroll-driven and interactive Lottie, runtime theming, size optimisation; Rive state machines (inputs, transitions, listeners), data binding with view models, events, runtimes for web, React, React Native, iOS, Android, Flutter; choosing Lottie vs Rive vs code; preparing files for handoff (After Effects + Bodymovin, Figma Motion, Lottie Creator, Cavalry exports). Use for "Lottie", ".lottie", "Bodymovin", "Rive", ".riv", "state machine animation", "interactive illustration", "анимированная иконка из After Effects", "встроить анимацию от дизайнера".

whoamnesia/motion-review

Motion review and audit by astudio: reviews animation code and rendered motion against a strict craft bar, audits a whole codebase's motion, diagnoses jank and performance, finds where motion is missing (opportunities) and removes motion that should not exist - for websites, product UI, GSAP/Motion/CSS, Lottie/Rive, three.js and rendered videos. Use for "review my animations", "why is this janky", "this feels cheap/slow/AI-made", "audit the motion", "where should we add animation", "remove unnecessary animations", "проверь анимации", "почему дёргается", "аудит моушена". Default to flagging; approval is earned. Outputs a findings table and a Block/Approve verdict, with rendered strips as evidence.

Skills relacionados