litehtml has no CSS transitions, transforms or opacity, so every moving value here is a script re-rendering its message up to 60 times a second, driven by animate() and tween() with the ease.* curves. Each frame changes ordinary properties: sizes, margins, absolute positions, rgba colours (mix(), alpha()), gradient angles, or a freshly generated SVG image. When a card swaps whole content (a tab, a step, a result), transition('slide-left') or 'pop' lets the bubble animate it natively. Animation pauses whenever a card is off screen, and every loop stops once nothing moves.