{
  "id": "rare_celebration",
  "type": "procedural",
  "loop": false,
  "durationSeconds": 1.6,
  "intensity": 0.8,
  "priority": "emote",
  "transforms": [
    { "time": 0.0, "scale": [1.0, 1.0, 1.0], "positionOffset": [0.0, 0.0, 0.0], "rotationDegrees": [0, 0, 0] },
    { "time": 0.12, "scale": [1.28, 0.7, 1.28], "positionOffset": [0.0, -0.15, 0.0], "rotationDegrees": [0, 0, 0] },
    { "time": 0.34, "scale": [0.78, 1.36, 0.78], "positionOffset": [0.0, 0.5, 0.0], "rotationDegrees": [0, 0, 5] },
    { "time": 0.6, "scale": [1.2, 0.78, 1.2], "positionOffset": [0.0, -0.08, 0.0], "rotationDegrees": [0, 0, 0] },
    { "time": 0.82, "scale": [0.85, 1.24, 0.85], "positionOffset": [0.0, 0.32, 0.0], "rotationDegrees": [0, 0, -4] },
    { "time": 1.05, "scale": [1.12, 0.88, 1.12], "positionOffset": [0.0, -0.04, 0.0], "rotationDegrees": [0, 0, 0] },
    { "time": 1.28, "scale": [0.92, 1.12, 0.92], "positionOffset": [0.0, 0.16, 0.0], "rotationDegrees": [0, 0, 2] },
    { "time": 1.6, "scale": [1.0, 1.0, 1.0], "positionOffset": [0.0, 0.0, 0.0], "rotationDegrees": [0, 0, 0] }
  ],
  "notes": "Excited multi-bounce emote for rare events. Three hops of decreasing amplitude: peak y offsets 0.5 -> 0.32 -> 0.16 with matching anticipation squashes before each launch. Each hop is a squash (takeoff) then stretch (airborne) pair; a tiny alternating z-rotation tilt adds playful character. Amplitude and squash depth both decay so it reads as energy bleeding off. Ends cleanly at neutral. Use ease-out on launches and ease-in on landings. Pivot at base. Good to pair with a sound/particle burst on the first stretch peak (~0.34s)."
}
