Motion

Lio moves the way the brand sounds: attentive, small, a little playful. Two modes exist, cursor-driven and autonomous, and both are the same rig with different attention sources.

Cursor-driven

Follows your pointer; hover to open the beak.

Autonomous

No listeners; it wanders, blinks, and pulses on its own schedule.

Principles

  1. 1

    Motion is behavior, not decoration

    Lio never plays a canned animation loop. Every movement is a reaction: to your cursor, or to the bird's own attention wandering. If a movement doesn't mean anything, it doesn't ship.

  2. 2

    The blink is the heartbeat

    A 5.4-second cycle: body-colored lids sweep in for a beat, then the eye is wide again. The rest state is open; the blink is an event, not a state.

  3. 3

    Gaze leads, everything follows

    The body morphs along the three-pose arc toward whatever Lio is looking at; the pupil glides ahead of the turn, and the cap settles a beat after the head with its own easing lag. Nothing snaps.

  4. 4

    Delight is small and springy

    Hover pops the pupil 1.4× with a spring curve and fades in a catchlight; the beak opens; the cap lifts and jiggles; the toes fidget. All of it lives within the tile; Lio never leaves the frame.

  5. 5

    Crowds run on autonomy

    In grids, birds run in autonomous mode: no cursor listeners. Each bird retargets its gaze, drifts its pupil, and pulses on its own randomized schedule: a crowd, not a chorus line.

The reduced-motion guarantee

Every animation in the system respects prefers-reduced-motion, and the rig is built so that stillness is a valid pose: the blink's rest state is the open eye, the pupil's rest is centered, the beak's rest is closed. Turning motion off never leaves Lio mid-gesture; it leaves a calm, wide-eyed bird.

The same applies to exports: print and static assets always hold the rest pose, facing right.

Named emotional states (sad, angry, sleeping, and the rest) layer on top of this idle system; they are cataloged in Character → Emotions.