## message (`poetry_message`)

A chat row pairing an author and avatar with message content.

Class: Poetry::Ui::Message::Component - BEM block `poetry-ui-message`.
- `align:` (symbol) - one of start|end, default "start" - Which side the row sits on; :end mirrors it for the local user's side.
Slots: avatar (The sender's avatar, kept beside the content column - decorative context; put meaningful sender identity in the header.), header (The sender identity line above the bubbles.), footer (Timestamps / delivery state below the bubbles.).
- PART `message` - The chat-row root - avatar plus a content column; align: :end mirrors the row for the local user's side | states: data-align=start|end (always - the resolved align)
- PART `message-avatar` - The avatar slot's box, kept out of the content column
- PART `message-content` - The content column - header, the body block (the Bubbles), footer
- PART `message-header` - Sender identity line above the bubbles (header slot)
- PART `message-footer` - Timestamps / delivery state below the bubbles (footer slot - it lifts the avatar)
- RULE: One Message per turn: avatar slot + header/footer slots; the body block holds the Bubbles.
- RULE: align: :end is the local user's side - set it on the Message, never on the Bubbles inside.
- RULE: The avatar slot is decorative context by default - pass meaningful sender identity in the header.
- RULE: Timestamps and delivery state belong in the footer slot (it lifts the avatar automatically).
