Chat sides

Each bubble is anchored to its own dot on the centre spine with data-⚓️-side="before" (them) or "after" (you). Swap seats flips one value per bubble and data-⚓️-tween swings it across. New messages grow out of the spine (data-⚓️-morph-from).

  1. Riley: did you see the anchor positioning thing

  2. Sam: the one where a bubble just says which side it lives on?

  3. Riley: yes. no flex-direction, no margins, no JS maths