diff --git a/resources/js/components/dredge/Messages/MessageBubble.vue b/resources/js/components/dredge/Messages/MessageBubble.vue
new file mode 100644
index 0000000..ef65915
--- /dev/null
+++ b/resources/js/components/dredge/Messages/MessageBubble.vue
@@ -0,0 +1,101 @@
+
+
+
+
+ {{ message.replied_to_text }}
+
{{ error }}
@@ -173,95 +112,8 @@ onMounted(fetchThread); .thread__messages { display: flex; flex-direction: column; - gap: 0.6rem; -} -.bubble-row { - display: flex; - align-items: flex-end; - gap: 0.5rem; -} -.bubble-row--me { - flex-direction: row-reverse; -} -.bubble { - max-width: 70%; - background: var(--panel); - border: 1px solid var(--line); - border-radius: 14px; - padding: 0.55rem 0.8rem; - font-size: 0.88rem; - line-height: 1.4; -} -.bubble-row--me .bubble { - background: var(--bioluminum); - color: #04141a; - border-color: transparent; -} -.bubble__reply { - font-size: 0.75rem; - color: var(--sediment-dim); - border-left: 2px solid var(--haze); - padding-left: 0.5rem; - margin-bottom: 0.3rem; -} -.bubble-row--me .bubble__reply { - color: rgba(4, 20, 26, 0.7); - border-left-color: rgba(4, 20, 26, 0.4); -} -.bubble__text { - white-space: pre-wrap; - word-break: break-word; -} -.bubble__system { - font-style: italic; - color: var(--sediment-dim); -} -.bubble-row--me .bubble__system { - color: rgba(4, 20, 26, 0.7); -} -.bubble__share { - display: flex; - gap: 0.6rem; - text-decoration: none; - color: inherit; - background: rgba(0, 0, 0, 0.15); - border-radius: 8px; - padding: 0.4rem; - margin-top: 0.3rem; -} -.bubble__share-image { - width: 48px; - height: 48px; - object-fit: cover; - border-radius: 6px; - flex-shrink: 0; -} -.bubble__share-body { - display: flex; - flex-direction: column; - min-width: 0; - justify-content: center; -} -.bubble__share-title { - font-weight: 600; - font-size: 0.82rem; - overflow: hidden; - text-overflow: ellipsis; - white-space: nowrap; -} -.bubble__share-caption { - font-size: 0.75rem; - opacity: 0.8; - overflow: hidden; - text-overflow: ellipsis; - white-space: nowrap; -} -.bubble__reactions { - margin-top: 0.3rem; - display: flex; - gap: 0.2rem; -} -.bubble__reaction { - font-size: 0.85rem; + /* Slightly taller than a plain bubble gap so a floating reaction pill + on one bubble doesn't collide with the row below it. */ + gap: 0.9rem; }