
Transitions Dev
Copy a shared semantic CSS variable block and snippet patterns so modals, badges, dropdowns, and digit counters animate consistently without one-off timing hacks.
Install
npx skills add https://github.com/jakubantalik/transitions.dev --skill transitions-devWhat is this skill?
- Single :root semantic tokens for resize, digit pop-in, badge, text swap, dropdown, modal, and panel reveal
- Per-effect duration, easing, blur, stagger, and offset variables (e.g. --digit-stagger, --badge-offset-y)
- Consistent cubic-bezier presets shared across card resize and modal open/close
- Directional digit motion via --digit-dir-x / --digit-dir-y for counter animations
- Designed to paste once and reuse across every transition snippet in the skill
Adoption & trust: 1.2k installs on skills.sh; 1.2k GitHub stars; 3/3 security scanners passed (skills.sh audits).
Recommended Skills
Frontend Designanthropics/skills
Vercel React Best Practicesvercel-labs/agent-skills
Remotion Best Practicesremotion-dev/skills
Vercel Composition Patternsvercel-labs/agent-skills
Develop Userscriptsxixu-me/skills
Next Best Practicesvercel-labs/next-skills
Journey fit
Common Questions / FAQ
Is Transitions Dev safe to install?
skills.sh reports 3 of 3 security scanners passed. Review the Security Audits panel on this page before installing in production.
SKILL.md
READMESKILL.md - Transitions Dev
/* transitions-dev — copy this :root block into your project once. Every transition snippet reads from these semantic names. */ :root { /* Card resize */ --resize-dur: 300ms; --resize-ease: cubic-bezier(0.22, 1, 0.36, 1); /* Number pop-in */ --digit-dur: 500ms; --digit-distance: 8px; --digit-stagger: 70ms; --digit-blur: 2px; --digit-ease: cubic-bezier(0.34, 1.45, 0.64, 1); --digit-dir-x: 0; --digit-dir-y: 1; /* Notification badge */ --badge-slide-dur: 260ms; --badge-pop-dur: 500ms; --badge-pop-close-dur: 180ms; --badge-fade-dur: 400ms; --badge-fade-close-dur: 180ms; --badge-blur: 2px; --badge-offset-x: -8.2px; --badge-offset-y: 12.4px; --badge-slide-ease: cubic-bezier(0.22, 1, 0.36, 1); --badge-pop-ease: cubic-bezier(0.34, 1.36, 0.64, 1); --badge-close-ease: cubic-bezier(0.4, 0, 0.2, 1); /* Text states swap */ --text-swap-dur: 150ms; --text-swap-translate-y: 4px; --text-swap-blur: 2px; --text-swap-ease: ease-in-out; /* Menu dropdown */ --dropdown-open-dur: 250ms; --dropdown-close-dur: 150ms; --dropdown-pre-scale: 0.97; --dropdown-closing-scale: 0.99; --dropdown-ease: cubic-bezier(0.22, 1, 0.36, 1); /* Modal open / close */ --modal-open-dur: 250ms; --modal-close-dur: 150ms; --modal-scale: 0.96; --modal-scale-close: 0.96; --modal-ease: cubic-bezier(0.22, 1, 0.36, 1); /* Panel reveal */ --panel-open-dur: 400ms; --panel-close-dur: 350ms; --panel-translate-y: 100px; --panel-blur: 2px; --panel-ease: cubic-bezier(0.22, 1, 0.36, 1); /* Page side-by-side */ --page-slide-dur: 200ms; --page-fade-dur: 200ms; --page-slide-distance: 8px; --page-blur: 3px; --page-stagger: 0ms; --page-exit-enabled: 1; --page-slide-ease: cubic-bezier(0.22, 1, 0.36, 1); --page-fade-ease: cubic-bezier(0.22, 1, 0.36, 1); /* Icon swap */ --icon-swap-dur: 200ms; --icon-swap-blur: 2px; --icon-swap-start-scale: 0.25; --icon-swap-ease: ease-in-out; /* Success check */ --check-opacity-dur: 550ms; --check-rotate-dur: 550ms; --check-rotate-from: 80deg; --check-bob-dur: 450ms; --check-y-amount: 40px; --check-blur-dur: 500ms; --check-blur-from: 10px; --check-path-dur: 550ms; --check-path-delay: 80ms; --check-ease-out: cubic-bezier(0.22, 1, 0.36, 1); --check-ease-opacity: cubic-bezier(0.22, 1, 0.36, 1); --check-ease-rotate: cubic-bezier(0.22, 1, 0.36, 1); --check-ease-bob: cubic-bezier(0.34, 1.35, 0.64, 1); --check-ease-path: cubic-bezier(0.22, 1, 0.36, 1); /* Avatar group hover */ --avatar-lift: -4px; --avatar-dur: 320ms; --avatar-scale: 1.05; --avatar-falloff: 0.45; --avatar-ease-in: cubic-bezier(0.22, 1, 0.36, 1); --avatar-ease-out: cubic-bezier(0.34, 3.85, 0.64, 1); /* Error state shake */ --shake-distance: 6px; --shake-overshoot: 4px; --shake-dur-a: 80ms; --shake-dur-b: 60ms; --shake-ease: cubic-bezier(0.22, 1, 0.36, 1); --revert-hold: 3000ms; --revert-dur: 280ms; /* Input clear with dissolve */ --clear-dur: 1000ms; --clear-out-dur: 400ms; --clear-in-dur: 400ms; --clear-out-fly: 12px; --clear-in-fly: 12px; --clear-out-ease: cubic-bezier(0.22, 1, 0.36, 1); --clear-in-ease: cubic-bezier(0.22, 1, 0.36, 1); --clear-blur: 2px; --glow-delay: 50ms; --glow-peak-at: 0.15; --glow-opacity: 0.42; --glow-spread: 1.5; /* Skeleton loader and reveal */ --pulse-dur: 1000ms; --pulse-count: 1; --pulse-min: 0.5; --reveal-dur: 400ms; --reveal-blur: 2px; --reveal-ease: ease-in-out; /* Shimmer text */ --shimmer-dur: 2000ms; --shimmer-base: #7c7c7c; --shimmer-highlight: #0d0d0d; --shimmer-band: 400%; --shimmer-ease: linear; /* Tabs sliding */ --tabs-dur: 200ms; --tabs-ease: cubic-bezier(0.22, 1, 0.36, 1); --tabs-text-muted: rgba(15, 15, 15, 0.6); --tabs-text-active: #0f0f0f; --tabs-bar-bg: #eeeeee; --tabs-pill-bg: #ffffff; /* Tooltip open/close */ --tt-in-dur: 150ms; --tt-out-dur: 50ms; --tt-scale: 0.98; --tt-delay: 80ms; --tt-in-ease: