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.
| Clip | Role | Ember frames |
|---|---|---|
idle | Ambient loop while waiting. Fires after ~30s without interaction via idle_timeout. | 5 |
happy | Short reaction one-shot used by click, jump, nearby, and greet moves. | 4 |
blink | Quick eye-close. Occasional idle flicker once Bond 3 unlocks blink. | 3 |
celebrate | Joy burst with sparkles. Click once Bond 2 unlocks celebrate. | 5 |
dance | Side-to-side squash dance. Scroll the page (Bond 4+). | 6 |
surprise | Wide-eyed jump. Double-click (Bond 5+; after jump cools). | 3 |
glow | Brightened aura. Move the cursor nearby (Bond 4+). | 5 |
wiggle | Squash-and-stretch body wiggle. Click the surface it is perched on (Bond 4+). | 6 |
spin | Full rotate-in-place loop. Change docs pages (Bond 5+). | 8 |
sleep | Dozing loop when an idle_timeout sleep interaction wins (~30s idle, Bond 3+). | 3 |
fall | Loop while gravity runs after a non-fatal drop. | 3 |
cry | Tearful loop while held more than 70vh above a surface, and while falling after a fatal drop. | 4 |
puff | Death burst played when a fatal-height fall hits the surface beneath. | 4 |













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.
| Move | Trigger | Action | Clip | Host status |
|---|---|---|---|---|
react-clickReacts when clicked | click | play_animation | happy | Active |
jumpBounces upward with heat | double_click | jump | happy | Active |
sleepDims and dozes off | idle_timeout | sleep | sleep | Active |
idleSoftly flickers while waiting | idle_timeout | play_animation | idle | Active |
fallFalls after being dropped | drop | change_state | fall | Active |
drag-startSettles when picked up | drag_start | play_animation | idle | Active |
nearbyNotices a nearby cursor | cursor_nearby | play_animation | happy | Active |
page-helloGreets after navigation | page_navigation | play_animation | happy | Active |
scroll-glanceGlances when the page scrolls | scroll | play_animation | idle | Active |
celebrateBursts brighter in joy | click | play_animation | celebrate | Defined / gated |
wakeFlare-wakes from a nap | click | change_state | idle | Defined / gated |
blinkBlinks with bright ember eyes | idle_timeout | play_animation | blink | Active |
wiggleWiggles with a happy squash | surface_action | play_animation | wiggle | Active |
danceDances happily on command | scroll | play_animation | dance | Active |
spinSpins like a tiny spark | page_navigation | play_animation | spin | Active |
surprisePops up in surprise | double_click | jump | surprise | Active |
glowGlows warmer for a moment | cursor_nearby | play_animation | glow | Active |
follow-cursorCan trail the cursor later | cursor_nearby | move | idle | Defined / gated |
Motion lifecycle
- Spawn from a companion card (one instance per type).
- 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, thenpuffs on impact. While perched, the companion scrolls with its box and falls when that surface hits the top of the viewport. - After ~30 seconds without interaction,
idle_timeoutmay sleep or flicker. - Double-click plays a eased jump using the
happyclip.