examples/integrations/mastra/src/components/threads-drawer/THEME.md
These are mastra's bespoke copies of the threads panel. They are no longer a
shared/tokenized base component — they are styled to read as one product with
mastra's CopilotSidebar (the right-side chat from @copilotkit/react-core/v2).
All surfaces, borders, radii, and type ramps are lifted from CopilotKit's V2
design system: @copilotkit/react-core/src/v2/styles/globals.css plus the chat
components (CopilotModalHeader, CopilotChatSuggestionPill,
CopilotChatInput, CopilotSidebarView). The tokens are mirrored verbatim into
src/app/globals.css:
| Token | Value (V2 light) | Role in the panel |
|---|---|---|
--card / --background | oklch(1 0 0) (white) | Panel + card surfaces |
--foreground | oklch(0.145 0 0) | Titles, thread titles, dialog text |
--muted / --secondary / --accent | oklch(0.97 0 0) | Hover/active surfaces, segment track, archived chip, code well |
--muted-foreground | oklch(0.556 0 0) | Meta text, idle icons, descriptions, placeholders |
--border / --input | oklch(0.922 0 0) | All hairline borders |
--primary | oklch(0.205 0 0) (near-black) | New-thread pill, selected accent, primary CTA — the V2 sidebar's primary buttons are charcoal/black, not a brand accent |
--primary-foreground | oklch(0.985 0 0) | Primary button text |
--destructive | oklch(0.577 0.245 27.325) | Delete hover |
--ring | oklch(0.708 0 0) | Focus rings (2px box-shadow) |
--radius | 0.625rem (+ sm/md/lg/xl) | Rectangular controls; icon buttons / pills / segments use 999px to echo the sidebar's close button, suggestion pills, and send button |
mastra's CopilotSidebar is always light regardless of OS color scheme. The
panel must match it, so src/app/globals.css re-pins --foreground and
--background to the V2 light values on .threadsLayout (the layout wrapper)
and on body > [role="presentation"] (the confirm dialog renders in a portal on
<body>). The dark-mode @media (prefers-color-scheme: dark) block only flips
the bare page --background/--foreground; the panel overrides win because
they are scoped to the layout/portal roots.
Geist (the app font, via --font-body / --font-code). Sizes/weights track the
sidebar: header title 1rem / 500 / tracking-tight, thread titles
0.8125rem / 500, meta 0.6875rem, all medium-weight — no heavy 700s.
Edit these files freely; they are mastra-owned and not shared with other examples.