Skip to content

Widget

Custom CSS

Available on Growth and above. Your CSS is scoped to the widget’s Shadow DOM, so it can’t affect your page, and your page’s CSS still can’t affect the widget.

Where to add it

Dashboard → Widget → Advanced → Custom CSS (up to 10,000 characters). It is applied after the built-in styles, so equal-specificity rules win.

Theme variables

Prefer variables over overriding rules, because they keep light/dark mode working:

VariableMeaning
--am-primary / --am-primary-textPrimary color and its text color
--am-bg / --am-textPanel background and text
--am-user / --am-user-textVisitor bubble
--am-bot / --am-bot-textAssistant bubble
--am-radiusCorner radius
--am-fontFont stack
--am-ox / --am-oy / --am-lsLauncher offsets and size

Class reference

SelectorElement
.rootWrapper; holds the theme CSS variables. Has .left, .open, .light/.dark/.auto modifiers
.launcherLauncher button (.text when it shows a label); .badge is the unread counter
.proactiveProactive greeting bubble
.panelChat panel (full screen below 640 px)
.head, .avatar, .title, .subtitlePanel header
.logScrollable message list
.disclosureAI disclosure line
.msg.user / .msg.assistantA message row; .bubble is the bubble itself
.suggestions, .chipSuggested questions
.cards, .card, .card .name, .price, .stockProduct carousel and cards
.btn.primary, .btn.ghostButtons (Add to cart, View product, contact)
.composer, .sendMessage input and send button
.escalationContact form
.foot“Powered by” footer

Examples

Pill-shaped launcher with a shadow in your brand colorcss
.launcher { box-shadow: 0 10px 30px rgb(157 59 90 / .35); }
.launcher.text { padding: 0 24px; font-weight: 700; }
Square product cards with a border accentcss
.card { border-radius: 6px; border-color: var(--am-primary); }
.card .name { font-size: 14px; }
.price .now { color: var(--am-primary); }

What is not allowed

For security, custom CSS is sanitized on the server: @import, @charset, expression(), javascript:, behaviors, and url() to anything other than inline data:image are removed.

Class names are a public interface but internal structure can evolve; target the classes listed above rather than deep descendant chains.