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 text, sliding tabs, tooltips, staggered text reveals, card hover tilt, plus-to-menu morph, accordions, toasts, like buttons, learn-more hovers, checkbox checks, spinning counters, toggles, AI thinking states, reasoning streams, streaming text, matrix dot loaders, or banner stacking. Triggers on "add a transition", "animate the dropdown", "make the modal open smoothly", "swap icon", "page slide", "stagger animation", "open / close transition", "make it animate", "fade between", "success animation", "form error", "shake on invalid", "hover lift", "avatar stack hover", "clear the search", "skeleton loader", "loading shimmer", "shimmer text", "sliding tabs", "segmented control", "tooltip", "reveal text", "tilt card", "3D hover tilt", "cursor glare", "plus to menu", "FAB morph", "accordion", "collapsible", "expand / collapse", "disclosure", "toast", "snackbar", "like button", "heart animation", "learn more arrow", "checkbox", "check animation", "spinning counter", "odometer", "slot machine digits", "toggle", "switch", "thinking states", "AI status line", "agent reasoning", "reasoning stream", "streaming text", "stream words in", "matrix loader", "dot loader", "banner stack", "stacked toasts". Also "motion tokens", "scan for ad-hoc transitions", "replace hardcoded durations with motion tokens", "tokenize my animations", and the commands transitions reveal, transitions review, transitions apply, transitions refine.
Install
npx skills add https://github.com/Jakubantalik/transitions.dev --skill transitions-devAccordion expand
When to use
A disclosure / accordion / collapsible section whose panel grows and shrinks in height when toggled, with the header chevron flipping between a downward "v" and an upward "^". Use for settings groups, FAQs, filter sections, "show more" details — any header + collapsible body.
Height animates via grid-template-rows: 0fr ↔ 1fr, so there's no JS height measuring and content of any size animates cleanly. The chevron flips vertically (scaleY) from a "v" to a "^", passing through a flat line at the midpoint.
HTML usage
Toggle data-open on the item. The panel animates via
grid-template-rows 0fr ↔ 1fr (no JS height measuring) and
the chevron flips vertically (scaleY) from a "v" to a "^".
Tunable variables
The :root defaults below match the live tuning on transitions.dev. Drop them into your global stylesheet once — every transition in this skill reads from semantic names like these, so multiple transitions can share a single :root block.
CSS
The @media (prefers-reduced-motion: reduce) guard at the bottom of the snippet is required — keep it. It zeroes the transition for users who have asked for less motion at the OS level.
JavaScript orchestration
Two-element panel + padding placement
The panel needs the two-element structure (.t-acc-panel grid track + .t-acc-panel-inner with overflow: hidden). The 0fr → 1fr track can only collapse a child that clips its own overflow. Keep padding on .t-acc-panel-inner, never on .t-acc-panel — padding on the 0fr track leaves a residual height strip so the panel never fully closes.
Why the chevron flips instead of morphing its path
The natural way to turn the "v" into a "^" is to morph the chevron's SVG d between two vertex sets — but CSS d: path interpolation is Chromium-only, so on mobile Safari and Firefox it snaps (or doesn't move at all). A vertical flip (transform: scaleY(-1)) reproduces the same motion — it passes through a flat horizontal line at the midpoint, exactly like the path morph — and animates in every browser. Two requirements make it land cleanly: the chevron path must be symmetric about the centre of its viewBox (so the flip maps the "v" onto the "^"), and the path needs vector-effect: non-scaling-stroke so the stroke width stays constant while the box is squashed mid-flip.