---
title: "Thread Message Stack"
description: "Message bubbles land on the bottom line over a moving background, push older messages upward under a mask, and show a typing pill before each incoming message."
---
import { PrimitivePlayer } from "/snippets/PrimitivePlayer.jsx";
List assembly
## Variables
| Name | Type | Default | Description |
| --- | --- | --- | --- |
| `--tms-roll-bg` | `color` | | base under the moving blobs and letterbox color for replacement footage. |
| `--tms-out-fill` | `color` | `#2D89E1` | outgoing bubble fill. |
| `--tms-out-ink` | `color` | | outgoing bubble text color. |
| `--tms-in-fill` | `color` | | incoming bubble fill. |
| `--tms-in-ink` | `color` | | incoming bubble text color. |
| `--tms-tag-ink` | `color` | | sender tag text color. |
| `--tms-radius` | `length` | | bubble corner radius. |
## When to use it
A conversation must build through alternating incoming and outgoing bubbles while the background continues moving.
## When to avoid it
Avoid it when frame zero must be empty, because the thread deliberately opens on three settled bubbles.
## Pairs with
- [persona-card-fan](/primitives/persona-card-fan)
- [receipt-card](/primitives/receipt-card)