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

OptionDefaultNotes
accentColor#00C48CTrigger, focus rings, and the submit button.
positionbottom-rightbottom-right · bottom-left · top-right · top-left
themeautolight · dark · auto (follows the visitor's system setting)
radius12Corner radius in px, 0 to 24.
triggerLabelFeedbackText on the floating button, and its accessible name when icon-only.
triggerStyleicon-labelicon-label · icon (a bubble) · label
triggerIconmessagemessage · star · lightbulb · heart · help
triggerSizemdsm (34px) · md (40px) · lg (48px)
triggerOffset20Distance from the page edge in px, 0 to 160. Clears a chat bubble or cookie bar.
triggerHideOnMobilefalseHide the button below 640px. Your own triggers still work.
triggerHiddenfalseHide the button and open it yourself instead.
headingShare your feedbackPanel title.
subheadingWe read everything…One line under the title.
enabledTypesall fourWhich of Idea / Issue / Praise / Question to show.
askRatingtrueShow the 1 to 5 scale.
askEmailtrueShow the optional email field.
successMessageThank you…Shown after a submission lands.
hideBrandingfalseRemove 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

  • Esc closes the panel.
  • ⌘/Ctrl + Enter submits 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
}