Skip to content
Documentation
Documentation

Theming & Icons

MUS renders in the light DOM, so its colors are controlled by CSS custom properties with a --mus- prefix. Override any of them in your own stylesheet with no config changes needed.

Add this to your global CSS file (e.g. globals.css, app.css):

:root {
--mus-primary: #6366f1; /* your brand color */
--mus-primary-foreground: #ffffff;
}

That’s it. Every button, recording indicator, and interactive element picks up the new color.

TokenDefault (dark)Controls
--mus-primary#f44336Buttons, recording dot, active states
--mus-primary-foreground#f5f8fdText/icons on primary color
--mus-background#121b2bDialog and toolbar background
--mus-foreground#f5f8fdPrimary text
--mus-card#1a2540Card / panel background
--mus-card-foreground#f5f8fdText inside cards
--mus-mutedrgba(255,255,255,0.06)Subtle fill backgrounds
--mus-muted-foregroundrgba(255,255,255,0.45)Secondary / placeholder text
--mus-accentrgba(255,255,255,0.05)Hover fills
--mus-accent-foreground#f5f8fdText on accent
--mus-borderrgba(255,255,255,0.08)Borders and dividers
--mus-inputrgba(255,255,255,0.08)Input field borders
--mus-ring#f44336Focus ring
--mus-destructive#ef4444Destructive / error states

To style MUS differently on one page without affecting others, scope your overrides to a parent element:

.my-dashboard [data-mus-theme] {
--mus-primary: #0ea5e9;
--mus-primary-foreground: #ffffff;
}

MUS respects the theme prop passed to MusProvider ('light', 'dark', or 'auto'). Light-mode defaults are defined separately; override them the same way:

[data-mus-theme="light"] {
--mus-primary: #4f46e5;
--mus-background: #ffffff;
--mus-foreground: #0f172a;
}

Roundness is also configurable:

TokenDefaultControls
--mus-radius-xs4pxSmallest elements (tags, badges)
--mus-radius-sm6pxButtons
--mus-radius-md8pxInputs, toolbars
--mus-radius-lg12pxDialogs
--mus-radius-xl16pxLarge panels

Replace any default icon with any React node via the icons config on MusProvider:

import { Star, HeartHandshake, Mic, ThumbsUp, ThumbsDown, Play } from 'lucide-react'
<MusProvider config={{
...
icons: {
trigger: <Star size={16} />,
support: <HeartHandshake size={16} />,
voice: <Mic size={16} />,
thumbsUp: <ThumbsUp size={16} />,
thumbsDown: <ThumbsDown size={16} />,
video: <Play size={16} />,
standalone: <Star size={24} />, // standalone FAB icon
},
}}>

You can pass any React node: Lucide icons, custom SVGs, emoji, images. Omit any key to keep the default.

KeyDefault iconUsed in
triggerLightbulbHover trigger button
supportSlackSupport action
voiceMicVoice action
thumbsUpThumbsUpThumbs up action
thumbsDownThumbsDownThumbs down action
videoYoutubeVideo action
standaloneMessageCircleStandalone FAB button