## bubble (`poetry_bubble`)

A chat message bubble aligned to its sender.

Class: Poetry::Ui::Bubble::Component - BEM block `poetry-ui-bubble`.
Content block REQUIRED (the message content) - a blockless call raises.
- `variant:` (symbol) - one of default|secondary|muted|tinted|outline|ghost|destructive, default "default", required - The intent axis; :ghost is for tool output / system text flowing full-width.
- `align:` (symbol) - one of start|end, default "start" - Which side the bubble hugs; inside a Message, set the Message's align instead.
- `href:` (string) - Renders the content as a real anchor; implies tag: :a.
- `tag:` (symbol) - one of div|button|a, default "div" - The content element: :div (default), or :button/:a for a quick reply.
Slots: reactions (The reactions pill overlaid on an edge; label: names the cluster for assistive tech, side:/align: place it (default bottom end).; with_reactions yields NOTHING to the block - no |param|, write content directly; with_reactions keywords: label:, side:, align: ONLY).
- PART `bubble` - The message surface root - variant and alignment ride here | states: data-variant=default|secondary|muted|tinted|outline|ghost|destructive (always - the resolved variant); data-align=start|end (always - the resolved align)
- PART `bubble-content` - The body (<div>, or a <button>/<a> quick reply via tag:) - the content block renders here
- PART `bubble-reactions` - The reactions pill overlay (role=group, named by label:) | states: data-side (always - which edge the pill overlays (default bottom)); data-align (always - placement along that edge (default end))
- RULE: One Bubble per message; stack a sender's run inside poetry_bubble_group.
- RULE: Quick replies are tag: :button (with the caller's data-action) or tag: :a + href: - never a click handler on a div.
- RULE: ghost is for tool output / system text flowing full-width - not a visual preference.
- RULE: Reactions REQUIRE label: (the accessible name for the cluster).
- RULE: Inside a Message, alignment follows the Message's align - do not set both.
