Theming
The modal is the only UI surface the SDK renders, and every visual aspect of it is controlled via CSS custom properties. The modal uses Shadow DOM — your page CSS won’t leak in, and its styles won’t affect your page.
Applying a theme
Section titled “Applying a theme”The idiomatic path is the theme option on the THGVTO constructor — it maps
directly to CSS custom properties on the modal:
new THGVTO({ theme: { primaryColor: '#1a1a2e', primaryTextColor: '#ffffff', buttonRadius: '24px', fontFamily: 'Helvetica Neue, sans-serif', modalMaxWidth: '900px', },});You can also set the CSS custom properties directly on vto-modal if you need
finer-grained control:
vto-modal { --vto-primary-color: #1a1a2e; --vto-primary-text-color: #ffffff; --vto-button-radius: 24px; --vto-font-family: 'Helvetica Neue', sans-serif;}Core Tokens
Section titled “Core Tokens”| Property | Default | Description |
|----------|---------|-------------|
| --vto-primary-color | #000 | Primary action colour (buttons, selected states) |
| --vto-primary-text-color | #fff | Text colour on primary backgrounds |
| --vto-button-radius | 4px | Button border radius |
| --vto-modal-border-radius | 12px | Modal corner radius |
| --vto-font-family | inherit | Font family (inherits from host page) |
| --vto-modal-max-width | 480px | Maximum modal width |
Warning Tokens
Section titled “Warning Tokens”| Property | Default | Description |
|----------|---------|-------------|
| --vto-warning-color | #d97706 | Warning accent |
| --vto-warning-bg-color | #fffbeb | Warning background |
| --vto-warning-border-color | #fde68a | Warning border |
| --vto-warning-text-color | #92400e | Warning text |
Styling your trigger
Section titled “Styling your trigger”The SDK no longer renders a button — you own the trigger and style it
however you like. The theme option controls the modal only.
Storefront Examples
Section titled “Storefront Examples”new THGVTO({ theme: { primaryColor: '#1a1a1a', buttonRadius: '0', fontFamily: 'Playfair Display, serif', },});new THGVTO({ theme: { primaryColor: '#e63946', buttonRadius: '24px', fontFamily: 'Inter, sans-serif', },});new THGVTO({ theme: { primaryColor: '#333', buttonRadius: '2px', fontFamily: 'system-ui, sans-serif', },});