diff --git a/packages/copilot-sdk/src/ui/components/composed/chat/default-message.tsx b/packages/copilot-sdk/src/ui/components/composed/chat/default-message.tsx
index 75025d0..9ec715d 100644
--- a/packages/copilot-sdk/src/ui/components/composed/chat/default-message.tsx
+++ b/packages/copilot-sdk/src/ui/components/composed/chat/default-message.tsx
@@ -122,7 +122,7 @@ export function DefaultMessage({
showUserAvatar ? "justify-end" : "justify-end",
)}
>
-
+
{/* Text content */}
{message.content && (
{
const classNames = cn(
- "csdk-message-content rounded-lg p-2 break-words whitespace-normal max-w-none leading-relaxed",
+ "csdk-message-content rounded-lg p-2 break-words whitespace-normal max-w-full leading-relaxed overflow-x-auto overflow-y-hidden",
// Typography - simple Tailwind utilities (no prose)
"[&_p]:my-1 [&_p]:leading-relaxed",
"[&_ul]:my-1 [&_ul]:pl-4 [&_ul]:list-disc [&_ul]:list-outside",
@@ -93,7 +93,9 @@ const MessageContent = ({
"[&_li]:my-0.5 [&_li]:pl-0",
"[&_pre]:my-2 [&_blockquote]:my-2 [&_blockquote]:pl-3 [&_blockquote]:border-l-2 [&_blockquote]:border-current/30",
"[&_code]:bg-current/10 [&_code]:px-1 [&_code]:rounded [&_code]:text-[0.9em]",
- "[&_a]:underline",
+ "[&_a]:underline [&_a]:text-[var(--csdk-link-color)] [&_a]:[overflow-wrap:anywhere]",
+ "[&_button[data-streamdown='link']]:underline [&_button[data-streamdown='link']]:text-[var(--csdk-link-color)] [&_button[data-streamdown='link']]:[overflow-wrap:anywhere] [&_button[data-streamdown='link']]:font-medium",
+ "[&_.text-primary]:text-[var(--csdk-link-color)]",
"[&_strong]:font-semibold",
textSizeMap[size],
className,
diff --git a/packages/copilot-sdk/src/ui/styles/base.css b/packages/copilot-sdk/src/ui/styles/base.css
index 08e12eb..247c545 100644
--- a/packages/copilot-sdk/src/ui/styles/base.css
+++ b/packages/copilot-sdk/src/ui/styles/base.css
@@ -33,6 +33,7 @@
--input: hsl(240 5.9% 90%);
--ring: hsl(240 5.9% 10%);
--radius: 0.5rem;
+ --csdk-link-color: #2563eb;
}
.dark {
@@ -55,6 +56,7 @@
--border: hsl(240 3.7% 15.9%);
--input: hsl(240 3.7% 15.9%);
--ring: hsl(240 4.9% 83.9%);
+ --csdk-link-color: #60a5fa;
}
}
@@ -149,3 +151,39 @@
.csdk-loader-loading-dots {
animation: csdk-loading-dots 1.4s infinite;
}
+
+/* Streamdown link-safety-modal (targets streamdown@^2.1.0 internal structure)
+ * Fixes CSS variable inheritance from parent message context.
+ * Users can override via --csdk-dialog-foreground and --csdk-dialog-muted-foreground at :root level.
+ */
+
+/* Backdrop: cover full viewport, center the dialog */
+[data-streamdown="link-safety-modal"] {
+ position: fixed;
+ inset: 0;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+}
+
+/* Dialog card: reset CSS variables to light defaults, constrain width, apply foreground color */
+[data-streamdown="link-safety-modal"] > div {
+ --foreground: var(--csdk-dialog-foreground, 240 10% 3.9%);
+ --muted-foreground: var(--csdk-dialog-muted-foreground, 240 3.8% 46.1%);
+ max-width: min(500px, 90vw);
+ margin: 0;
+ width: 100%;
+ color: hsl(var(--foreground));
+}
+
+/* Dark mode override */
+.dark [data-streamdown="link-safety-modal"] > div,
+:root.dark [data-streamdown="link-safety-modal"] > div {
+ --foreground: var(--csdk-dialog-foreground, 0 0% 98%);
+ --muted-foreground: var(--csdk-dialog-muted-foreground, 0 0% 62.7%);
+}
+
+[data-streamdown="link-safety-modal"] > div .text-muted-foreground {
+ color: hsl(var(--muted-foreground));
+}
+
diff --git a/packages/copilot-sdk/src/ui/styles/themes/catppuccin.css b/packages/copilot-sdk/src/ui/styles/themes/catppuccin.css
index 1984038..52c8c90 100644
--- a/packages/copilot-sdk/src/ui/styles/themes/catppuccin.css
+++ b/packages/copilot-sdk/src/ui/styles/themes/catppuccin.css
@@ -30,6 +30,7 @@
--border: hsl(225 14% 77%);
--input: hsl(223 16% 83%);
--ring: hsl(267 84% 58%);
+ --csdk-link-color: hsl(220 83% 58%);
--radius: 0.35rem;
}
@@ -66,4 +67,5 @@
--border: hsl(237 16% 23%);
--input: hsl(237 16% 23%);
--ring: hsl(267 83% 80%);
+ --csdk-link-color: hsl(220 83% 75%);
}
diff --git a/packages/copilot-sdk/src/ui/styles/themes/claude.css b/packages/copilot-sdk/src/ui/styles/themes/claude.css
index 5df4787..e0f18c1 100644
--- a/packages/copilot-sdk/src/ui/styles/themes/claude.css
+++ b/packages/copilot-sdk/src/ui/styles/themes/claude.css
@@ -29,6 +29,7 @@
--border: hsl(45 8% 84%);
--input: hsl(47 6% 69%);
--ring: hsl(16 56% 52%);
+ --csdk-link-color: hsl(210 70% 45%);
--radius: 0.5rem;
}
@@ -65,4 +66,5 @@
--border: hsl(55 5% 23%);
--input: hsl(52 5% 31%);
--ring: hsl(14 62% 60%);
+ --csdk-link-color: hsl(210 70% 65%);
}
diff --git a/packages/copilot-sdk/src/ui/styles/themes/linear.css b/packages/copilot-sdk/src/ui/styles/themes/linear.css
index 66da176..8f4fd18 100644
--- a/packages/copilot-sdk/src/ui/styles/themes/linear.css
+++ b/packages/copilot-sdk/src/ui/styles/themes/linear.css
@@ -29,6 +29,7 @@
--border: hsl(260 12% 90%);
--input: hsl(260 12% 90%);
--ring: hsl(260 75% 50%);
+ --csdk-link-color: hsl(195 70% 40%);
--radius: 0.5rem;
}
@@ -65,4 +66,5 @@
--border: hsl(260 22% 18%);
--input: hsl(260 22% 18%);
--ring: hsl(260 65% 58%);
+ --csdk-link-color: hsl(195 55% 60%);
}
diff --git a/packages/copilot-sdk/src/ui/styles/themes/modern-minimal.css b/packages/copilot-sdk/src/ui/styles/themes/modern-minimal.css
index e7297d7..175fce3 100644
--- a/packages/copilot-sdk/src/ui/styles/themes/modern-minimal.css
+++ b/packages/copilot-sdk/src/ui/styles/themes/modern-minimal.css
@@ -29,6 +29,7 @@
--border: hsl(220 13% 91%);
--input: hsl(220 13% 91%);
--ring: hsl(217 91% 60%);
+ --csdk-link-color: hsl(217 91% 60%);
--radius: 0.375rem;
}
@@ -65,4 +66,5 @@
--border: hsl(0 0% 25%);
--input: hsl(0 0% 25%);
--ring: hsl(217 91% 60%);
+ --csdk-link-color: hsl(217 91% 65%);
}
diff --git a/packages/copilot-sdk/src/ui/styles/themes/posthog.css b/packages/copilot-sdk/src/ui/styles/themes/posthog.css
index 6cca155..92fe247 100644
--- a/packages/copilot-sdk/src/ui/styles/themes/posthog.css
+++ b/packages/copilot-sdk/src/ui/styles/themes/posthog.css
@@ -31,6 +31,7 @@
--border: hsl(30 15% 20%);
--input: hsl(30 15% 20%);
--ring: hsl(37 92% 50%);
+ --csdk-link-color: hsl(37 92% 40%);
--radius: 0.625rem;
}
@@ -67,6 +68,7 @@
--border: hsl(40 30% 65%);
--input: hsl(40 30% 65%);
--ring: hsl(40 85% 55%);
+ --csdk-link-color: hsl(40 85% 55%);
}
/* ═══════════════════════════════════════════════════════════
diff --git a/packages/copilot-sdk/src/ui/styles/themes/supabase.css b/packages/copilot-sdk/src/ui/styles/themes/supabase.css
index 2e4b8dc..96c7cb9 100644
--- a/packages/copilot-sdk/src/ui/styles/themes/supabase.css
+++ b/packages/copilot-sdk/src/ui/styles/themes/supabase.css
@@ -29,6 +29,7 @@
--border: hsl(0 0% 87%);
--input: hsl(0 0% 96%);
--ring: hsl(153 70% 67%);
+ --csdk-link-color: hsl(153 60% 38%);
--radius: 0.5rem;
}
@@ -65,4 +66,5 @@
--border: hsl(0 0% 16%);
--input: hsl(0 0% 14%);
--ring: hsl(142 69% 58%);
+ --csdk-link-color: hsl(153 70% 50%);
}
diff --git a/packages/copilot-sdk/src/ui/styles/themes/twitter.css b/packages/copilot-sdk/src/ui/styles/themes/twitter.css
index 4f03992..58f5c31 100644
--- a/packages/copilot-sdk/src/ui/styles/themes/twitter.css
+++ b/packages/copilot-sdk/src/ui/styles/themes/twitter.css
@@ -29,6 +29,7 @@
--border: hsl(199 35% 92%);
--input: hsl(200 20% 97%);
--ring: hsl(204 88% 53%);
+ --csdk-link-color: hsl(201 89% 43%);
--radius: 1.25rem;
}
@@ -65,4 +66,5 @@
--border: hsl(216 5% 15%);
--input: hsl(202 58% 18%);
--ring: hsl(204 88% 53%);
+ --csdk-link-color: hsl(201 89% 63%);
}
diff --git a/packages/copilot-sdk/src/ui/styles/themes/vercel.css b/packages/copilot-sdk/src/ui/styles/themes/vercel.css
index fa383fd..f80f18d 100644
--- a/packages/copilot-sdk/src/ui/styles/themes/vercel.css
+++ b/packages/copilot-sdk/src/ui/styles/themes/vercel.css
@@ -29,6 +29,7 @@
--border: hsl(0 0% 90%);
--input: hsl(0 0% 90%);
--ring: hsl(0 0% 0%);
+ --csdk-link-color: #2563eb;
--radius: 0.375rem;
}
@@ -65,4 +66,5 @@
--border: hsl(0 0% 20%);
--input: hsl(0 0% 20%);
--ring: hsl(0 0% 100%);
+ --csdk-link-color: #60a5fa;
}