transitions-dev
Production-ready CSS transitions for web apps. Use when implementing notification badges, dropdowns, modals, panel reveals, page transitions, card resizes, number pop-ins, text swaps, icon swaps, success checks, avatar group hovers, error state shakes, search/input clear, skeleton loaders, shimmer t
By jakubantalik · 11,790 installs
npx skills add jakubantalik/transitions.dev --skill transitions-dev
Source repository · Upstream listing
Transitions.dev
Thirty two portable CSS transitions, each namespaced under t selectors with semantic CSS custom properties. Drop in: paste the snippet, wire the documented HTML hooks, done. No framework dependencies, no demo specific markup, and every snippet ships a prefers reduced motion guard.
Quick reference
Transition When to use Reference
Card resize Tween a container's width or height when its layout state changes. [01 card resize.md](./01 card resize.md)
Number pop in Re enter each digit with a blurred slide when a number updates. [02 number pop in.md](./02 number pop in.md)
Notification badge Slide a small badge onto a trigger and pop the dot. [03 notification badge.md](./03 notification badge.md)
Text states swap Swap text in place with a blurred up and down transition. [04 text states swap.md](./04 text states swap.md)
Menu dropdown Open an origin aware dropdown that grows from its trigger. [05 menu dropdown.md](./05 menu dropdown.md)
Modal open / close Scale up modal dialog with a softer scale down on close. [06 modal.md](./06 modal.md)
Panel reveal Slide a panel into a region with a cross blur. [07 panel reveal.md](./07 panel reveal.md)
Page side by side Slide between two side by side pages (list ↔ detail, step 1 ↔ step 2). [08 page side by side.md](./08 page side by side.md)
Icon swap Cross fade two icons in the same slot with blur and scale. [09 icon swap.md](./09 icon swap.md)
Success check Compose fade + rotate + Y bob + path stroke draw to celebrate a completed action. [10 success check.md](./10 success check.md)
Avatar group hover Distance falloff lift on a row of items with a bouncy spring on return. [11 avatar group hover.md](./11 avatar group hover.md)
Error state shake Per segment cubic bezier shake with auto reverting border + message. [12 error state shake.md](./12 error state shake.md)
Input clear with dissolve Fly out + per word streak when a text field is cleared. [13 input clear dissolve.md](./13 input clear dissolve.md)
Skeleton loader and reveal Pulse a placeholder, then cross fade + cross blur to the loaded content. [14 skeleton reveal.md](./14 skeleton reveal.md)
Shimmer text Sweep a highlight band across muted text on a loop (pure CSS). [15 shimmer text.md](./15 shimmer text.md)
Tabs sliding Slide the active pill between tabs in a segmented control. [16 tabs sliding.md](./16 tabs sliding.md)
Tooltip open/close Delayed fade+scale in, instant out, travels between triggers. [17 tooltip.md](./17 tooltip.md)
Texts reveal Staggered blurred rise for stacked text lines, quiet fade out. [18 texts reveal.md](./18 texts reveal.md)
Card hover tilt Tilt a card in 3D toward the pointer with a cursor tracked glare. [19 card tilt.md](./19 card tilt.md)
Plus to menu morph Morph a circular trigger into the menu / panel it opens. [20 plus menu morph.md](./20 plus menu morph.md)
Accordion expand Grow / shrink a panel via grid rows with a chevron flip. [21 accordion.md](./21 accordion.md)
Toast open / close Rise a toast from below with fade + cross blur, slower in than out. [22 toast.md](./22 toast.md)
Like button Fill a heart with a pop + particle burst on like. [23 like button.md](./23 like button.md)
Learn more hover Slide the chevron and spread its arms into an arrow on hover. [24 learn more hover.md](./24 learn more hover.md)
Checkbox check Fill the box, then stroke draw the checkmark. [25 checkbox check.md](./25 checkbox check.md)
Spinning counter Spin slot machine digit reels with vertical motion blur. [26 spinning counter.md](./26 spinning counter.md)
Toggle Travel the switch thumb with a double bounce overshoot. [27 toggle.md](./27 toggle.md)
Thinking states Shimmer a status line while it holds, then swap it to the next state. [28 thinking states.md](./28 thinking states.md)
Reasoning stream Step an agent reasoning transcript up two lines at a time on a loop. [29 reasoning stream.md](./29 reasoning stream.md)
Streaming text Resolve streamed words one by one through a soft cross blur. [30 streaming text.md](./30 streaming text.md)
Matrix dot loader Pulse a 4×4 dot matrix in scan / twinkle / orbit / pulse patterns. [31 matrix loader.md](./31 matrix loader.md)
Banner stacking Stack banners like toasts — new ones rise in, older ones push back. [32 banner stacking.md](./32 banner stacking.md)
Text morph Keep the letters two labels share and cross blur only the part that changes, easing its width. [33 text morph.md](./33 text morph.md)
Text swap soft Cross blur a value into the new one in place, both at once, with no movement. [34 text swap soft.md](./34 text swap soft.md)
Donut chart Ring segments with even gaps and rounded corners that morph to new values. [35 donut chart.md](./35 donut chart.md)
Decision rules
When the user asks for a transition, match against the visible UI element first, then the verb:
Trigger + small dot floating on top → notification badge.
Trigger + surface that grows from it → dropdown (anchored, origin aware) or modal (centered, no anchor).
Surface that slides into a region of the page → panel reveal.
Two screens, list ↔ detail or step 1 ↔ step 2 → page side by side.
Element changes width or height → card resize.
A label changes in place and the old and new text share letters at the start or end (Copy code to Copied, Follow to Following) → text morph.
Element's text content changes in place and the texts share nothing (Processing to Done) → text states swap.
Values update in place because the data behind a view changed (a chart's period, a currency, a unit) → text swap soft for every value that changed.
A donut or ring chart → donut chart (even gaps, the smallest corner radius, morphs when its data changes).
Two icons in the same slot → icon swap.
A number updates → number pop in.
Confirmation / success / "done" moment (checkmark, payment processed, file uploaded) → success check.
Hovering an item in a horizontal stack (avatars, chips, segmented buttons, tag pills) → avatar group hover.
Form validation error / "this is wrong" feedback (invalid field, wrong PIN, duplicate name) → error state shake.
Clearing a text field (search box × button, filter reset) → input clear with dissolve.
Placeholder that loads then swaps to real content (list row, card, profile header) → skeleton loader and reveal.
In progress / "thinking" text that should feel alive (loading label, streaming status) → shimmer text.
Small horizontal set of mutually exclusive options with a moving highlight (view switcher, segmented control, filter tabs) → tabs sliding.
Hover/focus hint that appears over a trigger (icon tooltip, info bubble) → tooltip open / close.
Stacked headline + supporting line entering with rhythm (hero copy, empty state, onboarding step) → texts reveal.
Card / tile that should react in 3D to the pointer on hover (product card, cover art, membership card, with or without a light glare) → card hover tilt.
Circular trigger that becomes the surface it opens (+ FAB grows into a menu / panel, compose button expands) → plus → menu morph. If the surface is a separate popover that merely grows from the trigger, use menu dropdown instead.
Header with a collapsible body that grows / shrinks in height (settings group, FAQ, filter section, "show more", disclosure) → accordion expand.
No clear match → fall back to transitions reveal and let the user pick. Don't guess.
If two transitions could fit, prefer the lower overhead one (card resize over panel reveal, dropdown over modal, success check over a full modal celebration) unless the design clearly calls for the heavier surface. The success check is animation only — if you also need to swap from a spinner to the check, pair it with icon swap .
Commands
The skill exposes four namespaced verbs the agent should recognise in addition to direct transition requests. Every command starts with transitions so the invocation never collides with verbs from other skills installed in the same project.
transitions reveal — list every transition
Trigger phrases: transitions reveal , "reveal the transitions", "list all transitions", "what transitions are in this skill", "show the transitions catalog".
Behaviour: print the thirty two transitions as a numbered plain text list — name, one line summary, and the matching reference filename. Reuse the rows in Quick reference above; do not invent new copy. No project access.
transitions review — audit the project for fit
Trigger phrases: transitions review , "review my project", "audit my animations", "where would transitions.dev help", "find places to use this skill".
Behaviour:
1. Search the workspace for indicators: transition: declarations, @keyframes , hardcoded ms / s durations in style files, components matching the decision rule patterns (modals, dropdowns, badges, search inputs, skeletons, tabs, tooltips, …).
2. For each hit, match against the decision rules and pick the single best fit transition.
3. Output a numbered list grouped by file:
path/to/Component.tsx:L42 — looks like a dropdown opening, suggest menu dropdown ( 05 menu dropdown.md ).
Skip ad hoc transitions that already use a t class.
4. Do not edit anything. End with: "Run transitions apply on any line to install the suggested transition."
transitions apply — install the best fit transition
Trigger phrases: transitions apply , "apply a transition here", "add the right transition", "install transitions dev here", "fix the animation on this element".
Behaviour:
1. Read context: the currently open file, the element nearest the cursor, surrounding CSS / JSX. If the user named a transition explicitly (e.g. transitions apply menu dropdown ), use it.
2. Run the decision rules from Decision rules on that context and pick one transition. If two could fit, prefer the lower overhead one (same tie breaker the existing rules use).
3. Surface a one line proposal: "I'd apply menu dropdown here because the element opens from a trigger and is anchored. Confirm to install?".
4. On confirmation, follow the existing five step procedure in Output format verbatim (root block, snippet, hooks, reduced motion guard, JS orchestration if needed).
5. If the agent can't pick a single transition with confidence, fall back to transitions reveal and ask the user to choose.
transitions refine — replace ad hoc motion with the motion tokens
Trigger phrases: transitions refine , "refine my transitions", "scan for ad hoc transitions", "replace hardcoded durations with motion tokens", "tokenize my animations", "tune the durations / easing", "audit my custom keyframes", "make the timing consistent", "align to the motion tokens".
Behaviour:
1. Scan the whole project (not just dedicated stylesheets — also inline style= / CSS in JS, styled components, <style blocks, Tailwind arbitrary values like duration [300ms] ) for ad hoc motion: transition / animation shorthands and longhands, custom @keyframes blocks, hardcoded durations ( …ms / …s ), easing ( cubic bezier(...) or keywords), translate distances ( px ), scale(...) , and blur(...) .
2. For each value, infer what the motion does (modal close, dropdown open, tooltip, badge appear, text reveal, page slide, shake, …) from the surrounding selectors / component plus the Decision rules . For a @keyframes block, read the animation that drives it and judge the keyframes' own duration/easing.
3. The key decision point is usage, not the raw number. Look the inferred usage up in Motion tokens and suggest the