Theming

Customize the editor to match your brand identity

Why Customize the Theme

  • Brand consistency Editor matches your platform's look and feel
  • White-label experience Seamless integration without third-party branding
  • User trust Familiar interface increases adoption

Logo Customization

Replace the default logo with your own:

window['ClaspoEditor'].init({
  logo: {
    imageUrl: 'https://your-domain.com/logo.png',
    link: 'https://your-domain.com',
  },
});

See EditorLogoI for all options.

Theme Configuration

The editor uses Claspo's default theme. Override specific tokens to match your brand:

window['ClaspoEditor'].init({
  theme: {
    primaryColor: '#008060',
    primaryFontFace: 'Inter, sans-serif',
    largeBorderRadius: '12px',
    // ... override only what you need
  },
});

See EditorThemeI for all available tokens.

Default Claspo Theme

const primaryColor = '#F3492C';

const CLASPO_THEME: EditorThemeI = {
  primaryFontFace: 'Montserrat, sans-serif',
  primaryColor,
  secondaryColor: '#ffffff',
  successColor: 'rgba(39, 193, 115, 1)',
  warningColor: 'rgba(255, 142, 10, 1)',
  infoColor: '#6aabbe',
  errorColor: 'rgba(231, 51, 36, 1)',
  disabledFontColor: '#8D8C94',
  primaryFontColor: '#2C2C2C',
  secondaryFontColor: '#8F8F8F',
  buttonFontWeight: '600',
  primaryButtonFontColor: '#FFFFFF',
  secondaryButtonFontColor: '#2C2C2C',
  secondaryButtonBorderColor: primaryColor,
  secondaryButtonBorderWidth: '2px',
  buttonLoadingBackground: 'repeating-linear-gradient(60deg, transparent, transparent 40px, rgba(0,0,0,.5) 40px, rgba(0,0,0,.5) 80px), rgba(250,250,250,.5)',
  buttonHeight: '44px',
  buttonPadding: '10px 30px',
  buttonPaddingWithIcon: '6px 20px 6px 12px',
  inputLoadingBackground: 'repeating-linear-gradient(60deg, transparent, transparent 40px, rgba(0,0,0,.5) 40px, rgba(0,0,0,.5) 80px), rgba(250,250,250,.5)',
  textInputDefaultBorderColor: 'transparent',
  textInputDefaultBorderWidth: '1px',
  textInputDefaultBackgroundColor: '#EDEDED',
  textInputPadding: '12px 12px 11px',
  checkboxDefaultBorderColor: primaryColor,
  checkboxDefaultBorderWidth: '2px',
  checkboxDefaultBackgroundColor: '#fff',
  checkboxSelectedIconColor: '#ffffff',
  checkboxSize: '22px',
  radioButtonDefaultBackgroundColor: '#fff',
  switchDefaultBackgroundColor: '#D9D9D9',
  switchIconColor: '#fff',
  selectDefaultBorderColor: 'transparent',
  selectDefaultBorderWidth: '0px',
  selectDefaultBackgroundColor: '#EDEDED',
  selectPadding: '0px 16px',
  largeBorderRadius: '22px',
  smallBorderRadius: '10px',
  contextMenuSelectedBackgroundColor: '#f6f6f6',
  snackBarPositionTop: '65px',
  snackBarPadding: '14px 36px 14px 16px',
  darkerPrimaryColorKey: '#DB2C0E',
  lighterPrimaryColor: '#FFBFB4',
  veryLightPrimaryColor: '#FEEDEA',
  iconPickerColor: '#9F29B0',
  notification: {
    padding: '15px 25px 15px 25px',
    borderRadius: '20px',
    boxShadow: 'none',
    textColor: 'inherit',
    warningBackgroundColor: '#fff2cc',
    fontSize: 'inherit',
  },
  dialog: {
    titleFontSize: '18px',
    titleFontWeight: '500',
  },
  checkbox: {
    valueFontSize: '16px',
    valueFontColor: '#2C2C2C',
  },
  select: {
    filterBorderRadius: '22px',
    filterPadding: '12px 0 11px 12px',
    filterIconPadding: '12px 12px 11px 5px',
  },
  input: {
    labelMargin: '0 0 8px 0',
    textInputTextareaPadding: '5px 12px',
    searchInputBackgroundIconColor: '#EDEDED',
    searchInputBorderRadius: '22px',
    searchInputIconColorActive: '#5f5f5f',
  },
  dropdown: {
    borderRadius: '20px',
    padding: '15px',
    leftRightIndent: '20px',
  },
  editorOption: {
    customPrizeImageSize: '44px',
    borderDefaultColor: '#E2E4E9',
    borderClearButtonColor: '#F3492C',
    borderRadiusToggleButtons: '18px',
    descriptionFontSize: '12px',
    backgroundToggleButtonSelected: '#EDEDED',
    backgroundToggleTextButtonSelected: '#FFFFFF',
    backgroundToggleButtonHover: '#e6e6e6',
    defaultBorder: 'none',
  },
  editorPrizeOption: {
    gridTemplateColumns: '160px 415px 220px 20px',
    decrementIncrementGap: '1px',
    chancePseudoBorderRight: '',
    customEsInputFormWidth: '360px',
    confirmButtonBottomPadding: '20px 40px',
  },
  dropzone: {
    codeFont: 'Montserrat, sans-serif',
  },
  slidebar: {
    padding: '',
    margin: '0 0 25px 0',
    titleFontSize: '24px',
    titleFontWeight: '600',
  },
  editorPanel: {
    smallBorderRadius: '10px',
    rewardsInputWidth: '80px',
    errorNotificationBackgroundColor: '#FFFBD5',
    errorNotificationLeftPadding: '64px',
    tabsBackgroundColor: '#F2F3F5',
    tabBackgroundColor: '#FFFFFF',
    tabsDeviceBackgroundColor: '#FFFFFF',
    tabHoverBackgroundColor: '#e6e6e6',
    tabHoverColor: '',
    tabBorderRadius: '20px',
    borderLeftWidthSelected: '2px',
    borderTopWidthSelected: '2px',
    borderRightWidthSelected: '2px',
    borderBottomWidthSelected: '2px',
    borderBottomWidth: '0',
    tabPadding: '2px 2px 3px',
    tabHeaderPadding: '2px',
    tabButtonPadding: '4px 20px',
    tabHeight: '32px',
    tabGap: '5px',
    colorPickerBoxShadow: '',
    colorPickerBorder: '1px solid #9F9FA8',
  },
  editorInputs: {
    selectDefaultAlignItems: 'center',
    selectDefaultJustifyContent: 'space-between',
    selectInputDefaultMinHeight: '36px',
    selectInputDefaultLineHeight: '36px',
    inputDefaultMinWidth: '55px',
    inputSmallMinWidth: '50px',
    selectBodyWidth: '100%',
    searchInputBoxShadow: '',
    searchInputBackgroundIconColor: '#FFFFFF',
    searchInputBorderRadius: '22px',
    searchInputBackgroundActiveColor: '#FFFFFF',
    searchInputBorderActiveColorHover: '2px solid #ffd1b2',
    searchInputBackgroundActiveMargin: '1px',
    selectTextParamsWidth: '200px',
  },
};

Example: Shopify Theme

const primaryColor = '#008060';

const SHOPIFY_THEME: EditorThemeI = {
  primaryFontFace: "Inter, -apple-system, BlinkMacSystemFont, 'San Francisco', 'Segoe UI', Roboto, 'Helvetica Neue', sans-serif",
  primaryColor,
  secondaryColor: '#ffffff',
  successColor: '#047B5D',
  warningColor: '#FFB800',
  infoColor: '#005BD3',
  errorColor: '#C70A24',
  disabledFontColor: '#B5B5B5',
  primaryFontColor: '#303030',
  secondaryFontColor: '#616161',
  buttonFontWeight: '550',
  primaryButtonFontColor: '#FFFFFF',
  secondaryButtonFontColor: '#303030',
  secondaryButtonBorderColor: '#E3E3E3',
  secondaryButtonBorderWidth: '1px',
  buttonLoadingBackground: 'repeating-linear-gradient(60deg, transparent, transparent 40px, rgba(0,0,0,.3) 40px, rgba(0,0,0,.3) 80px), rgba(250,250,250,.5)',
  buttonHeight: '36px',
  buttonPadding: '8px 16px',
  buttonPaddingWithIcon: '8px 16px 8px 12px',
  inputLoadingBackground: 'repeating-linear-gradient(60deg, transparent, transparent 40px, rgba(0,0,0,.3) 40px, rgba(0,0,0,.3) 80px), rgba(250,250,250,.5)',
  textInputDefaultBorderColor: '#E3E3E3',
  textInputDefaultBorderWidth: '1px',
  textInputDefaultBackgroundColor: '#FFFFFF',
  textInputPadding: '8px 12px',
  checkboxDefaultBorderColor: '#8A8A8A',
  checkboxDefaultBorderWidth: '2px',
  checkboxDefaultBackgroundColor: '#FFFFFF',
  checkboxSelectedIconColor: '#FFFFFF',
  checkboxSize: '18px',
  radioButtonDefaultBackgroundColor: '#FFFFFF',
  switchDefaultBackgroundColor: '#B5B5B5',
  switchIconColor: '#FFFFFF',
  selectDefaultBorderColor: '#E3E3E3',
  selectDefaultBorderWidth: '1px',
  selectDefaultBackgroundColor: '#FFFFFF',
  selectPadding: '8px 12px',
  largeBorderRadius: '12px',
  smallBorderRadius: '8px',
  contextMenuSelectedBackgroundColor: '#F7F7F7',
  snackBarPositionTop: '65px',
  snackBarPadding: '12px 16px',
  darkerPrimaryColorKey: '#1A1A1A',
  lighterPrimaryColor: '#616161',
  veryLightPrimaryColor: '#F1F1F1',
  iconPickerColor: '#8051FF',
  notification: {
    padding: '12px 16px',
    borderRadius: '8px',
    boxShadow: '0px 4px 6px -2px rgba(0, 0, 0, 0.05), 0px 10px 15px -3px rgba(0, 0, 0, 0.1)',
    textColor: '#303030',
    warningBackgroundColor: '#FFF8DB',
    fontSize: '14px',
  },
  dialog: {
    titleFontSize: '16px',
    titleFontWeight: '650',
  },
  checkbox: {
    valueFontSize: '14px',
    valueFontColor: '#303030',
  },
  select: {
    filterBorderRadius: '8px',
    filterPadding: '8px 12px',
    filterIconPadding: '8px 12px 8px 8px',
  },
  input: {
    labelMargin: '0 0 4px 0',
    textInputTextareaPadding: '8px 12px',
    searchInputBackgroundIconColor: '#F1F1F1',
    searchInputBorderRadius: '8px',
    searchInputIconColorActive: '#303030',
  },
  dropdown: {
    borderRadius: '12px',
    padding: '8px',
    leftRightIndent: '8px',
  },
  editorOption: {
    customPrizeImageSize: '40px',
    borderDefaultColor: '#E3E3E3',
    borderClearButtonColor: '#C70A24',
    borderRadiusToggleButtons: '8px',
    descriptionFontSize: '12px',
    backgroundToggleButtonSelected: '#F1F1F1',
    backgroundToggleTextButtonSelected: '#FFFFFF',
    backgroundToggleButtonHover: '#E3E3E3',
    defaultBorder: '1px solid #E3E3E3',
  },
  editorPrizeOption: {
    gridTemplateColumns: '160px 415px 220px 20px',
    decrementIncrementGap: '1px',
    chancePseudoBorderRight: '',
    customEsInputFormWidth: '360px',
    confirmButtonBottomPadding: '16px 24px',
  },
  dropzone: {
    codeFont: "ui-monospace, SFMono-Regular, 'SF Mono', Consolas, 'Liberation Mono', Menlo, monospace",
  },
  slidebar: {
    padding: '',
    margin: '0 0 20px 0',
    titleFontSize: '20px',
    titleFontWeight: '650',
  },
  editorPanel: {
    smallBorderRadius: '8px',
    rewardsInputWidth: '80px',
    errorNotificationBackgroundColor: '#FEE8EB',
    errorNotificationLeftPadding: '64px',
    tabsBackgroundColor: '#F1F1F1',
    tabBackgroundColor: '#FFFFFF',
    tabsDeviceBackgroundColor: '#FFFFFF',
    tabHoverBackgroundColor: '#E3E3E3',
    tabHoverColor: '',
    tabBorderRadius: '8px',
    borderLeftWidthSelected: '1px',
    borderTopWidthSelected: '1px',
    borderRightWidthSelected: '1px',
    borderBottomWidthSelected: '1px',
    borderBottomWidth: '0',
    tabPadding: '2px',
    tabHeaderPadding: '2px',
    tabButtonPadding: '6px 16px',
    tabHeight: '32px',
    tabGap: '4px',
  },
  editorInputs: {
    selectDefaultAlignItems: 'center',
    selectDefaultJustifyContent: 'space-between',
    selectInputDefaultMinHeight: '36px',
    selectInputDefaultLineHeight: '36px',
    inputDefaultMinWidth: '55px',
    inputSmallMinWidth: '50px',
    selectBodyWidth: '100%',
    searchInputBoxShadow: '0 1px 2px rgba(0, 0, 0, 0.05)',
    searchInputBackgroundIconColor: '#FFFFFF',
    searchInputBorderRadius: '8px',
    searchInputBackgroundActiveColor: '#FFFFFF',
    searchInputBorderActiveColorHover: '2px solid #005BD3',
    searchInputBackgroundActiveMargin: '0',
    selectTextParamsWidth: '200px',
  },
};