Skip to content

Theming

The widget ships with light and dark themes that auto-switch with the visitor's system preference. You can lock to one, provide a custom logo, and override greeting copy.

Theme mode

html
<script>
  window.InviaroSettings = {
    key: 'wt_...',
    origin: 'https://yourdomain.com',
    themeMode: 'auto'
  };
</script>
ModeBehavior
'auto' (default)Follows prefers-color-scheme and reacts to system changes
'light'Forces light, ignores system preference
'dark'Forces dark, ignores system preference
ts
brand: {
  name: 'Acme',
  logoUrl: 'https://yourdomain.com/logo.svg'
}

The logo appears in the empty-state hero. If the URL fails to load, the slot collapses cleanly without a broken-image icon.

Sizing

Display surfaceRendered sizeRecommended source size
Empty-state hero (desktop, tablet, mobile portrait)48 × 48 pxSVG, or 96 × 96 px raster (2×) for retina
Empty-state hero (mobile landscape, viewport ≤ 520 px tall)36 × 36 pxcovered by the same source asset

Notes:

  • Square is mandatory. The widget applies a 12 px corner radius and object-fit: cover, so non-square assets get cropped to a square center.
  • SVG is the best format. It scales cleanly across pixel densities, ships small, and survives future size changes without re-export.
  • Raster (PNG, WebP) works. Provide at least 96 × 96 px so retina screens stay sharp; 144 × 144 px is safer for 3× displays. Keep file weight under 20 KB.
  • Transparency is preserved. Use it when the logomark needs to sit on the widget's neutral hero background.
  • No padding inside the asset. The widget already adds visual breathing room. Logos that ship with built-in padding render visually small.

What displays where

The logo only appears in the empty-state hero (the visible block above the composer when the conversation is empty). It is not rendered in:

  • The launcher button (a generic chat icon)
  • Message bubbles (operator messages use initials or sender.avatar_url, not the brand logo)
  • The footer credit line

If you need the logo to appear elsewhere, use the brand.greeting and brand.subheading overrides to compose a richer hero copy.

Custom greeting

ts
brand: {
  greeting: 'Welcome to Acme',
  subheading: 'How can we help today?'
}

Pass localized text directly. The widget does not translate brand-supplied copy.

Position

ts
position: 'bottom-right'

Values: 'bottom-right', 'bottom-left', 'bottom-center'. Both the launcher button and the popover panel anchor to the same side. On mobile, the panel goes fullscreen below 480px.

Z-index

ts
zIndex: 1000

Override the default to sit below your modals or above third-party banners.

The "Provided by Inviaro" footer is part of the free plan.

ts
brand: {
  hideFooter: true
}

A privacy policy link sits next to the footer credit when configured:

ts
brand: {
  privacyUrl: 'https://yourdomain.com/privacy'
}

Embed mode

For mobile WebViews and dedicated chat pages, switch to embed mode. The panel renders full-pane with no launcher.

ts
mode: 'embed'

See Mobile apps for the integration pattern.