Customization
Everything is configured from the Widget page in the dashboard, with a live preview beside the controls. Deployed widgets pick up changes within about a minute, no redeploy on your side.
Options
| Option | Default | Notes |
|---|---|---|
| accentColor | #00C48C | Trigger, focus rings, and the submit button. |
| position | bottom-right | bottom-right · bottom-left · top-right · top-left |
| theme | auto | light · dark · auto (follows the visitor's system setting) |
| radius | 12 | Corner radius in px, 0 to 24. |
| triggerLabel | Feedback | Text on the floating button. |
| triggerHidden | false | Hide the button and open it yourself instead. |
| heading | Share your feedback | Panel title. |
| subheading | We read everything… | One line under the title. |
| enabledTypes | all four | Which of Idea / Issue / Praise / Question to show. |
| askRating | true | Show the 1 to 5 scale. |
| askEmail | true | Show the optional email field. |
| successMessage | Thank you… | Shown after a submission lands. |
| hideBranding | false | Remove the footer link. Pro and above. |
Why it can't break your styles
The widget mounts into a Shadow DOM root with :host { all: initial }. Your page's CSS, including !important rules on button, input, or *, cannot reach inside it, and nothing we ship leaks out onto your page.
Keyboard
Esccloses the panel.⌘/Ctrl + Entersubmits from the message box.
Accessibility & motion
Animations are skipped entirely for visitors with prefers-reduced-motion: reduce, and the panel is fully keyboard operable.
stored config (read-only)
{
"accentColor": "#00C48C",
"position": "bottom-right",
"theme": "auto",
"radius": 12,
"enabledTypes": ["IDEA", "ISSUE", "PRAISE", "QUESTION"],
"askRating": true,
"askEmail": true,
"hideBranding": false
}