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)
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.
Element's text content changes in place → text states swap.
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 token whose documented usage matches — only when the usages line up. A 300ms modal close maps to duration quick because both are "modal close", even though the numbers differ. If a value's usage matches no token's usage, list it as no matching token usage and leave it untouched — never force a swap just because a number is close.
4. Output a numbered list grouped by file, showing only values that should change, each as path/to/Component.css:L42 — modal close: 300ms → var( duration quick) (150ms) , ease → var( ease smooth out) . For keyframe driven motion, suggest the token for the driving animation 's duration/easing.
5. Do not edit anything. End with: "Confirm any line to apply the change, or run transitions apply to install a full transition instead."
Motion tokens
The shared motion scale behind the thirty two transitions — the same tokens the [transitions.dev](https: