Skip to content

Animation Preset Reference

All built-in animation presets, their parameters, and defaults. Pass preset-specific parameters via the params block in your animation config.


Motion Presets

pulse

Scale and brightness breathing effect.

ParamDefaultDescription
max_scale1.15Peak scale factor (alias: scale)
max_brightness1.4Peak brightness (1.0 = normal)
duration1200ms per cycle
easeinOutSineEasing function
looptrueLoop continuously
alternatetrueReverse on each loop
pulse

Loading live preview…

glow

Animated drop-shadow bloom.

ParamDefaultDescription
colorvar(--lcars-blue)Glow colour (alias: glow_color)
blur_min0Minimum shadow blur (px)
blur_max10Maximum shadow blur (px)
duration1500ms per cycle
easeinOutSineEasing function
looptrueLoop continuously
alternatetrueReverse on each loop
glow

Loading live preview…

shake

Horizontal vibrate effect.

ParamDefaultDescription
intensity10Max displacement in px
duration500Total duration (ms)
frequency4Number of side-to-side shakes
easeinOutSineEasing function
loopfalseLoop continuously
shake

Loading live preview…

bounce

Elastic scale bounce.

ParamDefaultDescription
scale_max1.2Peak scale factor
duration800Duration (ms)
bounces3Number of bounces
easeoutElasticEasing function
loopfalseLoop continuously
alternatefalseReverse on each loop

ease/duration are only used as documented when bounces is 1 or less. With the default bounces: 3, the code force-overrides ease to outQuad and multiplies duration by bounces (2400ms by default) — your own ease/duration values are silently discarded in that case. Set bounces: 1 if you need your own easing/duration to actually take effect.

bounce

Loading live preview…

rotate

Rotation animation.

ParamDefaultDescription
from0Starting angle (degrees)
to360Ending angle (degrees)
directionShorthand: clockwise (0→360) or counterclockwise (0→−360)
duration1000Duration (ms)
easelinearEasing function
loopfalseLoop continuously
alternatefalseReverse on each loop
rotate

Loading live preview…

Slow opacity blink.

ParamDefaultDescription
max_opacity1.0Peak opacity
min_opacity0.3Trough opacity
duration1200ms per half-cycle
easelinearEasing function
looptrueLoop continuously
alternatetrueReverse on each loop
blink

Loading live preview…

strobe

Rapid opacity flicker.

ParamDefaultDescription
max_opacity1.0Peak opacity
min_opacity0Trough opacity
duration100ms per half-cycle
easelinearEasing function
looptrueLoop continuously
alternatetrueReverse on each loop
strobe

Loading live preview…

skew

Skew/slant transformation.

ParamDefaultDescription
skewX0Target horizontal skew (degrees)
skewY0Target vertical skew (degrees)
from_skewX0Starting horizontal skew
from_skewY0Starting vertical skew
duration600Duration (ms)
easeinOutQuadEasing function
loopfalseLoop continuously
alternatefalseReverse on each loop
skew

Loading live preview…


fade

Simple opacity transition.

ParamDefaultDescription
from1Starting opacity
to0.3Target opacity
duration1000Duration (ms)
easelinearEasing function
loopfalseLoop continuously
alternatefalseReverse on each loop
fade

Loading live preview…

slide

Slide in from a direction.

ParamDefaultDescription
fromrightEntry side: left, right, top, bottom (alias: direction) — prefer these four
distance100Distance in px (or % string)
duration600Duration (ms)
easeoutQuadEasing function
loopfalseLoop continuously
alternatefalseReverse on each loop

A legacy up/down pair is also accepted, but confusingly maps the opposite way you'd expect versus top/bottom (up behaves like bottom, down behaves like top) — use left/right/top/bottom instead to avoid the mix-up.

slide

Loading live preview…

scale

Simple scale transform animation. Ideal for button feedback.

ParamDefaultDescription
scale1.1Target scale factor
from1Starting scale
duration200Duration (ms)
easeoutQuadEasing function
loopfalseLoop continuously
alternatefalseReverse on each loop
scale

Loading live preview…

scale-reset

Returns an element to its original scale (1.0). Pair with on_leave to reset hover effects.

ParamDefaultDescription
duration200Duration (ms)
easeoutQuadEasing function
yaml
# Typical hover + reset pair
animations:
  - preset: scale
    trigger: on_hover
    params:
      scale: 1.1
  - preset: scale-reset
    trigger: on_leave
scale-reset

Loading live preview…


Text Animation Presets

Target individual text elements with target: "[data-field-id='my-field']" to restrict the animation to a specific text field.

text-reveal

Characters, words, or lines appear in sequence with a stagger effect.

ParamDefaultDescription
splitcharsSplit unit: chars, words, or lines
directionfirstStagger origin: first, last, center, random, or a numeric index
stagger50Delay between units (ms)
duration800Duration per unit (ms)
easeoutQuadEasing function
from_opacity0Starting opacity of each unit
from_y20Starting Y offset (px)
loopfalseLoop continuously
LCARDS

Loading live preview…

text-scramble

Matrix-style character scramble before settling on the real text.

ParamDefaultDescription
duration800ms each character spends scrambling
stagger40Delay between characters starting (ms)
delay0Initial delay before animation starts (ms)
settle_at0.85Fraction (0–1) of duration spent scrambling
charactersA-Z 0-9 !@#$%^&*Pool of random characters to cycle through
loopfalseLoop continuously
LCARDS

Loading live preview…

text-glitch

Rapid position and opacity jitter for a glitch/malfunction effect.

ParamDefaultDescription
intensity5Max displacement in px / SVG units
duration300ms per glitch cycle
stagger50Delay between characters (ms)
color_shiftfalseAlso jitters colour — HTML text targets only, silently ignored on SVG text
loopfalseLoop continuously
LCARDS

Loading live preview…

text-typewriter

Characters appear one at a time at a fixed speed.

ParamDefaultDescription
speed100ms per character
loopfalseLoop continuously
LCARDS

Loading live preview…


Visual Effect Presets

shimmer

Fill colour and opacity animation for shimmering effects.

ParamDefaultDescription
color_fromStarting colour. If either color_from or color_to is omitted, colour animation is skipped entirely — opacity still animates
color_toTarget colour (alias: shimmer_color) — see color_from
opacity_from1Starting opacity
opacity_to0.5Ending opacity
duration1500Duration (ms)
easeinOutSineEasing function
looptrueLoop continuously
alternatetrueReverse on each loop
shimmer

Loading live preview…

flicker

Randomised opacity animation for flickering effects.

ParamDefaultDescription
max_opacity1Maximum opacity
min_opacity0.3Minimum opacity
duration1000Duration (ms)
easelinearEasing function
looptrueLoop continuously
flicker

Loading live preview…

cascade

Staggered animation across multiple target elements.

ParamDefaultDescription
stagger100Delay between elements (ms)
propertyopacityCSS property to animate
from0Starting value
to1Ending value
duration1000Duration (ms)
easeoutExpoEasing function
loopfalseLoop continuously

Loading live preview…

ripple

Expanding scale with opacity fade.

ParamDefaultDescription
scale_max1.5Maximum scale
opacity_min0Minimum opacity at peak
duration1000Duration (ms)
easeoutExpoEasing function
loopfalseLoop continuously
alternatefalseReverse on each loop
ripple

Loading live preview…

glitch

Random position and colour shifts for a malfunction effect.

ParamDefaultDescription
intensity5Max pixel displacement
frequency10Number of glitch steps
duration1000Duration (ms)
loopfalseLoop continuously

ease is hardcoded to linear and alternate has no effect — both are ignored if set.

glitch

Loading live preview…


Color Animation Presets

color-shift

Animates a colour property from one value to another.

ParamDefaultDescription
color_fromStarting colour (required)
color_toTarget colour (required)
propertycolorfill/stroke for SVG shapes (LCARdS's own button/elbow/slider/MSD cards, which draw their shapes as SVG paths — the CSS color property has no effect on them). color/background-color only work on plain HTML/CSS-rendered targets.
duration1000Duration (ms)
easeinOutQuadEasing function
loopfalseLoop continuously
alternatefalseReverse on each loop
color-shift

Loading live preview…

cascade-color

LCARS-style colour cascade through three keyframe colours. Uses theme tokens for default colours.

The default property ("color") is correct for this preset's primary intended use — data-grid cells, which are plain HTML/CSS-rendered — but won't visibly work if targeted at an SVG shape (LCARdS's own button/elbow/slider/MSD cards). Set property to fill or stroke for those.

ParamDefaultDescription
colorstheme cascade coloursArray of 3 colours: [start, mid, end] — only the first 3 entries are used
propertycolorCSS property to animate — see note above
modeauto-computedcss or animejs — despite the naming, both actually run through anime.js; animejs mode just adds per-cell stagger/hover-pause on top of the base cascade. Auto-computed from interactive/stagger_from/axis when unset, and force-upgraded to animejs whenever any of those are set, even if mode was also given explicitly (those fields have no effect at all in css mode). Not currently exposed in the GUI editor for this preset — colors/timing only; set it via YAML if you need it.
duration5000ms per full cycle
easelinearEasing function
looptrueLoop continuously
alternatetrueReverse on each loop
delay0Start delay before the whole cascade begins (ms) — unlike the stagger-* presets, this is the canonical single start-offset, not a per-element step
stagger_delay100Delay between elements — only applies in animejs mode
stagger_fromStagger origin: first, last, center, or random
axisrowStagger axis: row or column
interactivefalsePause on hover, resume on leave — only wired up in animejs mode

A single cascade-color instance targeting a whole grid changes every matched cell in sync — that's correct, expected behavior for one instance (mode: css's delay is one flat value, not a per-element stagger). The row-by-row "waterfall" look (including the niagara timing pattern) comes from declaring multiple separate instances, one per row, each with its own delay/duration — see the @example User Config (data-grid) above, or lcards-data-grid's animation.pattern option, which automates exactly that. The demo below forces stagger_from to show real per-cell staggering (animejs mode) so the effect is visible from a single instance — that's a demo-only override, not this preset's real default.

Loading live preview…


SVG-Specific Presets

draw

SVG path drawing animation using strokeDashoffset. Apply to <path> elements.

ParamDefaultDescription
reversefalseDraw in reverse direction
duration2000Duration (ms)
easeinOutSineEasing function
loopfalseLoop continuously
alternatefalseReverse on each loop

Loading live preview…

march

CSS-based marching dashed line animation. More performant than JS for continuous use.

ParamDefaultDescription
dash_length10Length of each dash (auto-detected from the element's existing stroke-dasharray if present)
gap_length5Gap between dashes (auto-detected from the element's existing stroke-dasharray if present)
speed2Seconds per cycle. If speed is unset but duration (ms) is set, duration is converted to seconds instead — speed wins if both are given
directionforwardforward or reverse
looptruetrue = infinite marching (the default), false/0 = play once, a number = that many iterations

Loading live preview…


Stagger Presets

Animate multiple target elements at once with anime.js's stagger() helper — each target starts a fixed step later than the previous one. Requires multiple elements matched by target/targets (a single-element animation just plays with no visible stagger).

Naming note: stagger-grid here is unrelated to the similarly-named grid-stagger, which was removed in 2026.07.x — if you're migrating an old grid-stagger config, see that section for the field mapping.

stagger-grid

Stagger across a [cols, rows] grid of targets, with a configurable wave origin.

ParamDefaultDescription
grid[1, 1]Grid dimensions [cols, rows] — validated; warns and no-ops on the wrong shape
fromstartWave origin: start, end, center, edges, or an [x, y] position
delay100Per-element stagger step (ms) — not the canonical single start-offset
propertyscaleCSS property to animate
from_value0.8Starting value
to_value1Ending value
duration600Duration per element (ms)
easeoutQuadEasing function
loopfalseLoop continuously
alternatefalseReverse on each loop
yaml
- preset: stagger-grid
  trigger: on_load
  targets: "[id^='cell-']"
  params:
    grid: [6, 2]
    from: center
    delay: 50

Loading live preview…

stagger-wave

A wave ripples through a linear sequence of targets.

ParamDefaultDescription
delay100Per-element stagger step (ms) — not the canonical single start-offset
directionnormalnormal or reverse — any other value collapses to normal
propertytranslateYCSS property to animate
amplitude-20Peak displacement, used in a 3-point [0, amplitude, 0] path
duration800Duration per element (ms)
easeoutElasticEasing function
loopfalseLoop continuously
alternatefalseReverse on each loop
yaml
- preset: stagger-wave
  trigger: on_load
  targets: ".list-item"
  params:
    delay: 80
    amplitude: -30

Loading live preview…

stagger-radial

Stagger radiating outward from a point.

ParamDefaultDescription
fromcentercenter, or an [x, y] pixel position
delay50Per-element stagger step (ms) — not the canonical single start-offset
propertyscaleCSS property to animate
from_value0Starting value
to_value1Ending value
duration800Duration per element (ms)
easeoutExpoEasing function
loopfalseLoop continuously

alternate isn't read by this preset — setting it has no effect.

yaml
- preset: stagger-radial
  trigger: on_load
  targets: ".dot"
  params:
    from: center
    delay: 40
    property: opacity

Loading live preview…

stagger-flash

A lead/trail colour sweep across targets, driven by the Web Animations API directly rather than anime.js — used for a fast, cheap "scanning highlight" effect.

ParamDefaultDescription
lead_colorvar(--primary-color)Colour of the sweep's leading edge
trail_color#444444Colour left behind after the sweep passes
lead_pct20Width of the lead band, as a percent of the total sweep (clamped to 1–50)
duration2000Total sweep duration (ms)
delayduration / 12Per-element stagger step (ms) — not the canonical single start-offset
grid[cols, rows] — only forwarded into an otherwise-inert internal config, not meaningfully used
fromfirstfirst, last, or center
propertystrokeMust be a WAAPI-animatable CSS property
with_opacitytrueAlso fade opacity as part of the sweep
trail_opacity0.25Opacity left behind after the sweep passes (only if with_opacity)
looptrueMaps to the WAAPI iterations option (Infinity vs 1) — not the generic anime.js loop mechanism

Loading live preview…


Timeline Presets

Multi-phase animations built with anime.js's createTimeline(). The canonical top-level duration/ease are inert — timing/easing for each phase lives in that phase's own config instead. loop, alternate, and delay, however, still apply at the whole-timeline level (repeat, reverse, and start-delay for the entire sequence), since a Timeline inherits that behavior from the same underlying mechanism a single animation uses.

timeline-cascade

A generic multi-step timeline you fully define yourself.

ParamDefaultDescription
stepsRequired, at least 1. Array of step objects, each with: targets (CSS selector, falls back to the animated element if absent), params (arbitrary anime.js tween properties, e.g. scale/opacity), duration, and offset ('+=N' relative, '<' overlap-with-previous, or an absolute ms number)
loopfalseLoop the full timeline
yaml
- preset: timeline-cascade
  trigger: on_load
  params:
    steps:
      - params: { opacity: [0, 1] }
        duration: 400
      - params: { scale: [1, 1.1] }
        duration: 300
        offset: "<"
timeline-cascade

Loading live preview…

timeline-attention

A fixed 3-phase "look at me" sequence: scale up, shake, settle back.

ParamDefaultDescription
scale_max1.15Peak scale during phase 1
shake_intensity5Peak horizontal displacement during phase 2 (px)
duration_scale200Duration of phase 1 — scale up (ms)
duration_shake300Duration of phase 2 — shake (ms)
duration_settle400Duration of phase 3 — settle back (ms)
loopfalseLoop the full sequence
timeline-attention

Loading live preview…


Utility Presets

set

Immediately sets properties without animation. Useful for establishing initial state before other animations run.

ParamDefaultDescription
propertiesObject with CSS properties to set immediately

duration/ease/loop/alternate/delay are all ignored — duration is hardcoded to 0 since this preset applies its properties immediately rather than tweening.

yaml
animations:
  - preset: set
    trigger: on_load
    params:
      properties:
        opacity: 0.5
        fill: red
set

Loading live preview…

motionpath

Animates an element along an SVG path's route, using anime.js v4's createMotionPath(). Works in two modes:

  • Move an existing element — set target/targets to the element you want to travel, and params.path to a different element defining the route (e.g. a line's id). target/targets and params.path must be two different elements — pointing path at the same element being animated has no sane interpretation and is rejected with a console warning.
  • Self-contained tracer — set params.shape and skip target/targets entirely. motionpath creates and animates its own shape (a small dot/rect/diamond) traveling along params.path — useful for a "energy flowing along a line" effect without needing a separate control or element. If shape and an explicit target/targets are both set, shape wins (with a console warning).
ParamDefaultDescription
pathRequired. CSS selector (#id or .class) for the route element. Can be any real SVG geometry element (path/circle/rect/ellipse/line/polyline/polygon) — if the selector resolves to a wrapper group instead (e.g. an MSD line overlay's own <g id="...">), the actual drawable geometry inside it is found automatically.
duration4000Duration (ms) for one full pass along the path
easelinearEasing function
loopfalseLoop continuously
alternatefalseReverse on each loop
rotatetrueAuto-rotate the element/shape to face its direction of travel as it moves. A sibling of shape below (applies either way this preset is used) — not a field inside shape.
anchor'50% 50%'CSS transform-origin — the pivot point rotation happens around. A sibling of shape, not a field inside it.
shapeOpt-in self-contained tracer shape, see below.

shape object (only used in tracer mode):

FieldDefaultDescription
typecirclecircle, rect, or diamond
size10Diameter (circle/diamond) or width/height fallback (rect), in px
widthsizerect only — overrides size for width
heightsizerect only — overrides size for height
fillcurrentColorFill colour — theme tokens/CSS vars work like everywhere else
strokenoneStroke colour
stroke_width0Stroke width (px)

Field names deliberately mirror line markers' (marker_start/marker_end) styling options.

yaml
# Move an existing control along a line named "line_2"
- trigger: on_load
  preset: motionpath
  target: "#my-control-id"
  duration: 3000
  loop: true
  alternate: true
  params:
    path: "#line_2"

# Self-contained tracer — no separate target needed. Can be declared directly
# on the line's own `animations:` block, with `path` pointing at itself — that's
# the expected, common case in this mode (there's nothing to move but the tracer).
- trigger: on_load
  preset: motionpath
  duration: 3000
  loop: true
  alternate: true
  params:
    path: "#line_2"
    rotate: true
    shape:
      type: circle
      size: 10
      fill: "var(--lcards-orange)"

Loading live preview…


Advanced Presets

sequence

Timeline-based animation with multiple steps at specified offsets. Uses anime.js createTimeline() internally.

ParamDefaultDescription
stepsArray of step objects (required, at least 1) — each has the same fields as a normal anime.js animate call plus an optional offset (an absolute ms number, '+=N' relative, or '<' for overlap-with-previous)
duration2000Default duration per step (used when a step doesn't set its own)
easeoutQuadDefault easing per step (used when a step doesn't set its own)
loopfalseLoop the full sequence
yaml
- preset: sequence
  trigger: on_tap
  params:
    steps:
      - opacity: [0, 1]
        duration: 500
      - scale: [1, 1.2]
        duration: 300
        offset: 500

Prefer offset — the older at name is also accepted as a fallback (translated internally), but offset wins if a step sets both.

sequence

Loading live preview…

grid-stagger (removed in 2026.07.x)

Removed — migrate to stagger-grid

grid-stagger never staggered multiple elements correctly — a confirmed bug in how it built its per-element delay internally, every element got identical (non-staggered) timing regardless of config. It had already been pulled from the editor's preset picker; as of 2026.07.x it's removed from the registry entirely, so preset: grid-stagger in an existing config no longer resolves.

Migrate to stagger-grid — same general idea, but not a drop-in rename:

grid-stagger fieldstagger-grid equivalentNotes
stagger_durationdelayRenamed — stagger-grid repurposes the canonical delay field for the per-element step
wave_durationdurationRenamed — and unlike grid-stagger, stagger-grid does read the canonical duration field
from: centerfrom: centerSame
from: firstfrom: startRenamed value
from: lastfrom: endRenamed value
from: randomNo equivalent
from: edgesstagger-grid-only, no grid-stagger equivalent
grid, property, from_value, to_value, loop, alternatesame namesField names match, but check defaults — they differ from grid-stagger's

See the 2026.07.x release notes for the full breaking-change entry.

chaos

Randomised multi-property animation for glitch and malfunction effects.

ParamDefaultDescription
properties['x', 'y', 'rotate']Properties to randomise (x/y map to translateX/translateY)
range{x: [-50,50], y: [-50,50], rotate: [-15,15]}Min/max [min, max] per property — keys should match properties
duration_min200Minimum animation duration (ms)
duration_max800Maximum animation duration (ms)
compositionblendblend or replace
easeinOutQuadEasing function
looptrueLoop continuously

The canonical top-level duration field isn't used at all here — duration_min/duration_max replace it entirely.

chaos

Loading live preview…

physics-spring

Spring-physics animation using anime.js v4 spring easing. Produces natural, organic motion.

ParamDefaultDescription
propertyscaleCSS property to animate
fromStarting value (required — typically a number, but a colour string is also valid for colour-like properties)
toTarget value (required, see from)
stiffness100Spring stiffness (higher = snappier)
damping10Spring damping (higher = less bounce)
mass1Spring mass (higher = slower)
velocity0Initial velocity
loopfalseLoop continuously — this one canonical field genuinely is respected

The canonical ease/duration/alternate fields are entirely bypassed here — spring dynamics determine the effective duration/motion internally.

physics-spring

Loading live preview…


See Also