diff --git a/frontend/src/app/pages/Dashboard/ChatBubbleTeardrop.tsx b/frontend/src/app/pages/Dashboard/ChatBubbleTeardrop.tsx
new file mode 100644
index 00000000..34ff5c7a
--- /dev/null
+++ b/frontend/src/app/pages/Dashboard/ChatBubbleTeardrop.tsx
@@ -0,0 +1,19 @@
+import React from 'react';
+
+// Custom near-circular speech bubble with a teardrop tail at the
+// bottom-left. The bubble body is a rounded square with corner radius
+// ~half the body size, so it reads as a circle. Matches Image #57; MUI
+// rounded chat glyphs either fill the bubble or omit the tail.
+export default function ChatBubbleTeardrop(props: { sx?: { fontSize?: number } }) {
+ const size = props.sx?.fontSize ?? 18;
+ return (
+
+ );
+}
diff --git a/frontend/src/app/pages/Dashboard/DashboardToolbar.tsx b/frontend/src/app/pages/Dashboard/DashboardToolbar.tsx
index 604ecfad..2ba753c9 100644
--- a/frontend/src/app/pages/Dashboard/DashboardToolbar.tsx
+++ b/frontend/src/app/pages/Dashboard/DashboardToolbar.tsx
@@ -9,23 +9,8 @@ import { styled } from '@mui/material/styles';
import AddRounded from '@mui/icons-material/AddRounded';
import HistoryRounded from '@mui/icons-material/HistoryRounded';
-// Custom near-circular speech bubble with a teardrop tail at the
-// bottom-left. The bubble body is a rounded square with corner radius
-// ~half the body size, so it reads as a circle. Matches Image #57; MUI
-// rounded chat glyphs either fill the bubble or omit the tail.
-function ChatBubbleTeardrop(props: { sx?: { fontSize?: number } }) {
- const size = props.sx?.fontSize ?? 18;
- return (
-
- );
-}
+import ChatBubbleTeardrop from './ChatBubbleTeardrop';
+
// Collapsed-row buttons hop up one after another when the toolbar appears.
const popIn = (i: number) => ({
animation: `toolbar-pop 0.4s cubic-bezier(0.2, 1.4, 0.4, 1) ${i * 55}ms both`,
diff --git a/frontend/src/app/pages/Dashboard/canvas/DashboardEmptyState.tsx b/frontend/src/app/pages/Dashboard/canvas/DashboardEmptyState.tsx
index 749f9343..e59c8492 100644
--- a/frontend/src/app/pages/Dashboard/canvas/DashboardEmptyState.tsx
+++ b/frontend/src/app/pages/Dashboard/canvas/DashboardEmptyState.tsx
@@ -2,6 +2,7 @@ import React from 'react';
import Box from '@mui/material/Box';
import Typography from '@mui/material/Typography';
import type { ClaudeTokens } from '@/shared/styles/claudeTokens';
+import ChatBubbleTeardrop from '../ChatBubbleTeardrop';
const DashboardEmptyState: React.FC<{ c: ClaudeTokens }> = ({ c }) => (
= ({ c }) => (
= ({ c }) => (
animation: 'empty-state-shimmer 6s linear infinite',
}}
>
- Click the chat bubble below to launch your first agent
+ Click the
+ {/* Literal toolbar glyph; the shimmer's transparent color would hide it, so reset color here. */}
+
+
+
+ below to launch your first agent
);