tp- that you can override to match your brand. All customization works through standard CSS — no JavaScript configuration needed.
These CSS classes apply to the pre-built widget rendered by the
ThunderPhoneWidget React component and the ThunderPhone.mount() CDN method. If you need a completely custom UI, use the headless hook instead.CSS Classes
All widget classes are prefixed withtp- to avoid conflicts with your existing styles.
| Class | Element | Description |
|---|---|---|
.tp-widget | Outer container | The root wrapper. Uses inline-flex layout. |
.tp-button | All buttons | Base style for all circular buttons (44px default). |
.tp-button--start | Start / mic button | The primary call button shown in the idle state. |
.tp-button--mute | Mute toggle button | Shown during an active call to mute/unmute the mic. |
.tp-button--end | End call button | Shown during an active call to hang up. |
.tp-status | Status text container | Wraps the agent name and connection state text. |
.tp-status__name | Agent name | Displays the connected agent’s name. |
.tp-status__text | State / timer text | Shows connection state (e.g., “Connecting…”) or call duration. |
Examples
Custom Colors
Override the button colors to match your brand:Custom Size
Make the widget larger or smaller by adjusting the button dimensions:Hide Status Text
If you only want the buttons without the status labels:Dark Theme
Scoping with className
When using the React component, pass aclassName prop to scope your overrides to a specific widget instance:
Fully Custom UI
If CSS overrides are not enough, the headless hook gives you full control. You provide all the HTML and styling whileuseThunderPhone handles the voice session: