Reels (Instagram Reels, TikTok, YouTube Shorts, 1080x1920) assembled from the same templates as SocialStory, opened and closed by the logo bumper.

- `SivaliSocial.reel(el, { format: 'reel', lang, brand, scenes: [{ id, dur, data }], url, bumper })` returns `{ play(), stop(), seek(t), duration }`. Timing is a pure function of `t`, so the same reel renders to MP4 frame by frame (see `assets/Motion/`).
- Timeline: bumper intro 2.6s (the intro played at 1.35x, lockup only) · scenes cross-fade over 0.4s · inside each scene every `data-a` element rises 46px and fades in over 0.7s, staggered 0.12s · orbit rings spin slowly and the Jakarta skyline animates (camera sway, travelling pulses) · bumper outro 3.2s with `sivali.co`, fade to black.
- Scene length: 3.5 to 5s; one idea per scene; a reel of 3 scenes lands at 15 to 20s.
- Captions: burn in Indonesian subtitles when there is voice; keep them above the 280px bottom safe area.
- Music: instrumental, no lyrics, mixed under -18 LUFS speech. Keep the bumper's fade intact.

Rendered examples: `sivali-reel-product-launch-9x16.mp4` (17.8s), `sivali-reel-event-9x16.mp4` (17.3s), `sivali-reel-podcast-audiogram-9x16.mp4` (19.3s). Load three.js r128 and `kits/motion/sivali-city.js` before the kit for the skyline.

Co-brand reels: `SivaliSocial.coReel(partner)` returns ready options (scenes `cbdist`, `cbspot`, `cbwebinar`, background and bumper theme in the partner's colours, no Sivali indigo or mint). Partners: canonical, nextcloud, coriolis, castai, trilio, netra. Rendered: `sivali-cobrand-<partner>-reel-9x16.mp4` for Canonical, Nextcloud, Coriolis and Cast AI.
