Skip to main content
DocsEmbed scriptTheming
Embed script

Theming

Override CSS custom properties on the host element to brand the widget — or set brandColor / position in the app config.

Last updated 2026-05-23

The widget renders inside a Shadow DOM so your site's CSS cannot leak into it (and vice versa). You theme it from outside by setting CSS custom properties on the <zupport-chat> host element.

Two ways to brand it

From the app (recommended for non-developers)

The Configure tab exposes the two most-used controls — brand colour and corner position. They are written to config.json and shipped to the embed:

// In the app: Configure tab → Brand color + Position.
// These two map straight to config.json:
{
  "brandColor": "#6f42c1",
  "position": "bottom-left"
}

From your page CSS (full control)

zupport-chat {
  --zupport-brand:        #6f42c1;
  --zupport-brand-fg:     #ffffff;
  --zupport-brand-hover:  #5a36a0;
  --zupport-radius:       12px;
  --zupport-panel-width:  420px;
  --zupport-font-body:    'Inter', system-ui, sans-serif;
}
Precedence
Page-level CSS variables win over config.json values for any property they explicitly set. Use that to override the brand colour for a single page or section without touching the app config.

Custom-property reference

Brand & interaction

PropertyDefaultPurpose
--zupport-brand#18553DLauncher background, primary buttons.
--zupport-brand-fg#fffefbText colour on brand surfaces.
--zupport-brand-hover#0d3a27Hover state of brand buttons.
--zupport-brand-soft#d6e4d8Light brand tint (selected, hover backgrounds).
--zupport-accent#b8552eAccent colour (terracotta).
--zupport-accent-soft#f0d7c5Light accent tint.

Surfaces & text

PropertyDefaultPurpose
--zupport-bg#f7f3eaPage-level background of the panel.
--zupport-surface#fffefbChat panel surface.
--zupport-surface-2#efe9dbSecondary surface (assistant bubbles).
--zupport-surface-3#e5deccTertiary surface.
--zupport-fg#131c18Primary text.
--zupport-ink-2#3d4843Secondary text.
--zupport-ink-3#6e7873Muted text.
--zupport-muted#a19f92Disabled text.
--zupport-line#ddd5c4Borders and dividers.
--zupport-line-strong#c9c0abStronger borders.

Status & shadows

PropertyDefaultPurpose
--zupport-status-dot#6fd5a8Online indicator dot.
--zupport-good#2e7d5aSuccess.
--zupport-warn#b58a3aWarning.
--zupport-bad#a23e2aError.
--zupport-shadowbrand-tintedBase shadow used inside the panel.
--zupport-shadow-launcherbrand-tintedShadow under the launcher button.
--zupport-shadow-panelink-tintedShadow under the open chat panel.

Spacing, typography, layout

PropertyDefaultPurpose
--zupport-radius18pxDefault radius.
--zupport-radius-panel18pxChat panel radius.
--zupport-radius-bubble14pxMessage bubble radius.
--zupport-z-index2147483000Stacking order.
--zupport-font-display'Fraunces', serifDisplay font.
--zupport-font-body'DM Sans', system-ui, sans-serifBody font.
--zupport-font-mono'JetBrains Mono', monospaceMono font.
--zupport-font-size14pxBase font size.
--zupport-panel-width384pxOpen panel width.
--zupport-panel-heightmin(560px, 80vh)Open panel height.
Match your existing design system
Map the variables you care about to your own tokens, e.g. --zupport-brand: var(--brand-500). The Shadow-DOM isolation means you only need to forward the variables you want shared.