Companion Animations

Clips and moves that drive the companion runtime. Ember is the reference species.

Animation clips

Each companion folder exposes clip ids under animations. The renderer picks a clip from runtime state or an interaction's animation field.

ClipRoleEmber frames
idleAmbient loop while waiting. Fires after ~30s without interaction via idle_timeout.5
happyShort reaction one-shot used by click, jump, nearby, and greet moves.4
blinkQuick eye-close. Occasional idle flicker once Bond 3 unlocks blink.3
celebrateJoy burst with sparkles. Click once Bond 2 unlocks celebrate.5
danceSide-to-side squash dance. Scroll the page (Bond 4+).6
surpriseWide-eyed jump. Double-click (Bond 5+; after jump cools).3
glowBrightened aura. Move the cursor nearby (Bond 4+).5
wiggleSquash-and-stretch body wiggle. Click the surface it is perched on (Bond 4+).6
spinFull rotate-in-place loop. Change docs pages (Bond 5+).8
sleepDozing loop when an idle_timeout sleep interaction wins (~30s idle, Bond 3+).3
fallLoop while gravity runs after a non-fatal drop.3
cryTearful loop while held more than 70vh above a surface, and while falling after a fatal drop.4
puffDeath burst played when a fatal-height fall hits the surface beneath.4
Ember idle
idle
Ember happy
happy
Ember blink
blink
Ember celebrate
celebrate
Ember dance
dance
Ember surprise
surprise
Ember glow
glow
Ember wiggle
wiggle
Ember spin
spin
Ember sleep
sleep
Ember fall
fall
Ember cry
cry
Ember puff
puff

Ember moves (interactions)

Fully active moves are wired in the host. Locked moves unlock as Bond rises (localStorage). Manual-trigger moves need Bond 3+ and are still reserved for future UI.

MoveTriggerActionClipHost status
react-click
Reacts when clicked
clickplay_animationhappyActive
jump
Bounces upward with heat
double_clickjumphappyActive
sleep
Dims and dozes off
idle_timeoutsleepsleepActive
idle
Softly flickers while waiting
idle_timeoutplay_animationidleActive
fall
Falls after being dropped
dropchange_statefallActive
drag-start
Settles when picked up
drag_startplay_animationidleActive
nearby
Notices a nearby cursor
cursor_nearbyplay_animationhappyActive
page-hello
Greets after navigation
page_navigationplay_animationhappyActive
scroll-glance
Glances when the page scrolls
scrollplay_animationidleActive
celebrate
Bursts brighter in joy
clickplay_animationcelebrateDefined / gated
wake
Flare-wakes from a nap
clickchange_stateidleDefined / gated
blink
Blinks with bright ember eyes
idle_timeoutplay_animationblinkActive
wiggle
Wiggles with a happy squash
surface_actionplay_animationwiggleActive
dance
Dances happily on command
scrollplay_animationdanceActive
spin
Spins like a tiny spark
page_navigationplay_animationspinActive
surprise
Pops up in surprise
double_clickjumpsurpriseActive
glow
Glows warmer for a moment
cursor_nearbyplay_animationglowActive
follow-cursor
Can trail the cursor later
cursor_nearbymoveidleDefined / gated

Motion lifecycle

  1. Spawn from a companion card (one instance per type).
  2. Drag onto a surface. Hold more than 70vh above the surface beneath and it crys while you still hold it; release and it keeps crying through the fall, then puffs on impact. While perched, the companion scrolls with its box and falls when that surface hits the top of the viewport.
  3. After ~30 seconds without interaction, idle_timeout may sleep or flicker.
  4. Double-click plays a eased jump using the happy clip.