Docs/Branding/Theme reference

Theme reference

Complete list of all theme properties

This is the complete reference for all theme properties. Use it alongside the custom themes guide.

Theme metadata

PropertyTypeDescription
idstringUnique identifier for the theme
namestringDisplay name
descriptionstringOptional description
{
  id: 'my-theme',
  name: 'My Theme',
  description: 'A brief description',
}

Header

Controls the top navigation bar.

PropertyTypeDescription
backgroundColorcolorTop bar background
iconColorcolorHome button and settings icon
textColorcolorRemaining time text
timeFontSizestringRemaining time font size
timeFontWeightstringRemaining time font weight
progressBar.backgroundColorcolorProgress track (unfilled)
progressBar.highlightColorcolorProgress fill (completed)
header: {
  backgroundColor: '#FFFFFF',
  iconColor: '#6366F1',
  textColor: '#111827',
  timeFontSize: '14px',
  timeFontWeight: '600',
  progressBar: {
    backgroundColor: '#E5E7EB',
    highlightColor: '#6366F1',
  },
}

Main content

PropertyTypeDescription
backgroundColorcolorBackground behind all content
mainContent: {
  backgroundColor: '#F9FAFB',
}

Cards

Controls all content cards (audio stops, text, email, rating).

PropertyTypeDescription
backgroundColorcolorCard background
textColorcolorMain text color
borderColorcolorCard border
borderRadiusstringCorner rounding (e.g., '12px')
shadowstringDrop shadow
titleFontSizestringCard title size
titleFontWeightstringCard title weight
durationBadgeFontSizestringDuration badge font size
numberFontSizestringStep number size
numberFontWeightstringStep number weight
image.placeholderColorcolorImage loading placeholder
image.durationBadgeBackgroundcolorBadge overlay on images
image.durationBadgeTextcolorBadge text color
cards: {
  backgroundColor: '#FFFFFF',
  textColor: '#111827',
  borderColor: '#E5E7EB',
  borderRadius: '12px',
  shadow: '0 2px 15px rgba(0,0,0,0.1)',
  titleFontSize: '18px',
  titleFontWeight: '600',
  durationBadgeFontSize: '14px',
  numberFontSize: '14px',
  numberFontWeight: '600',
  image: {
    placeholderColor: '#E5E7EB',
    durationBadgeBackground: 'rgba(0,0,0,0.6)',
    durationBadgeText: '#FFFFFF',
  },
}

Step indicators

Controls the circular progress indicators.

Active (current step)

PropertyTypeDescription
outlineColorcolorCircle border
numberColorcolorNumber text
backgroundColorcolorCircle fill

Inactive (future steps)

PropertyTypeDescription
borderColorcolorCircle border
numberColorcolorNumber text
backgroundColorcolorCircle fill

Completed

PropertyTypeDescription
backgroundColorcolorCircle fill (solid)
checkmarkColorcolorCheckmark icon
stepIndicators: {
  active: {
    outlineColor: '#6366F1',
    numberColor: '#6366F1',
    backgroundColor: '#EEF2FF',
  },
  inactive: {
    borderColor: '#E5E7EB',
    numberColor: '#9CA3AF',
    backgroundColor: '#F9FAFB',
  },
  completed: {
    backgroundColor: '#6366F1',
    checkmarkColor: '#FFFFFF',
  },
}

Buttons

Primary button

Used for main actions (Start Tour, Continue, Submit).

PropertyTypeDescription
backgroundColorcolorButton background
textColorcolorButton text
hoverBackgroundcolorBackground on press/hover
iconColorcolorIcon color
fontSizestringText size
fontWeightstringText weight
fontFamilystring[]Optional custom font

Secondary button

Used for secondary actions (Cancel, Skip).

PropertyTypeDescription
backgroundColorcolorButton background
textColorcolorButton text
borderColorcolorButton border
hoverBackgroundcolorBackground on press/hover
fontSizestringText size
fontWeightstringText weight
fontFamilystring[]Optional custom font

Download button

Full-width outline button for offline download.

PropertyTypeDescription
backgroundColorcolorUsually 'transparent'
textColorcolorButton text
borderColorcolorButton border
hoverBackgroundcolorBackground on press/hover
iconColorcolorDownload icon
fontSizestringText size
fontWeightstringText weight
fontFamilystring[]Optional custom font

Transcription button

Circular button in the mini player.

PropertyTypeDescription
backgroundColorcolorButton background
iconColorcolorIcon color
hoverBackgroundcolorBackground on press/hover
buttons: {
  primary: {
    backgroundColor: '#6366F1',
    textColor: '#FFFFFF',
    hoverBackground: '#4F46E5',
    iconColor: '#FFFFFF',
    fontSize: '18px',
    fontWeight: '600',
  },
  secondary: {
    backgroundColor: '#F9FAFB',
    textColor: '#111827',
    borderColor: '#E5E7EB',
    hoverBackground: '#F3F4F6',
    fontSize: '16px',
    fontWeight: '500',
  },
  download: {
    backgroundColor: 'transparent',
    textColor: '#6366F1',
    borderColor: '#6366F1',
    hoverBackground: 'rgba(99, 102, 241, 0.1)',
    iconColor: '#6366F1',
    fontSize: '18px',
    fontWeight: '600',
  },
  transcription: {
    backgroundColor: '#FFFFFF',
    iconColor: '#6366F1',
    hoverBackground: '#F3F4F6',
  },
}

Typography

PropertyTypeDescription
fontFamily.sansstring[]Body text font
fontFamily.headingstring[]Headlines font (optional)
fontFamily.numbersstring[]Numerical display font (optional)
typography: {
  fontFamily: {
    sans: ['Inter', 'system-ui', 'sans-serif'],
    heading: ['Space Grotesk', 'Inter', 'sans-serif'],
    numbers: ['Space Grotesk'],
  },
}

Font sizes and weights are defined per-component, not globally. This keeps the theme predictable.


Branding

PropertyTypeDescription
logoUrlstringLogo image URL (or undefined)
showLogoBorderbooleanShow border/background around logo
logoSize'fit' | 'original'Constrain to 48x48 or use natural size
branding: {
  logoUrl: 'https://example.com/logo.svg',
  showLogoBorder: true,
  logoSize: 'fit',
}

Mini player

Controls the floating audio player.

PropertyTypeDescription
backgroundColorcolorPlayer background
textColorcolorTitle and time text
titleFontSizestringTrack title size
titleFontWeightstringTrack title weight
transcriptionFontSizestringTranscription text size
progressBar.backgroundColorcolorTrack (unfilled)
progressBar.highlightColorcolorProgress fill
controls.playButtonBackgroundcolorPlay/pause button background
controls.playButtonIconcolorPlay/pause icon
controls.otherButtonsBackgroundcolorSkip buttons background
controls.otherButtonsIconcolorSkip buttons icon
minimized.playButtonIconcolorPlay icon when collapsed
miniPlayer: {
  backgroundColor: '#FFFFFF',
  textColor: '#111827',
  titleFontSize: '16px',
  titleFontWeight: '500',
  transcriptionFontSize: '15px',
  progressBar: {
    backgroundColor: '#E5E7EB',
    highlightColor: '#6366F1',
  },
  controls: {
    playButtonBackground: '#6366F1',
    playButtonIcon: '#FFFFFF',
    otherButtonsBackground: '#F3F4F6',
    otherButtonsIcon: '#6B7280',
  },
  minimized: {
    playButtonIcon: '#6366F1',
  },
}

Sheets (bottom sheets)

PropertyTypeDescription
backgroundColorcolorSheet background
handleColorcolorDrag handle
textColorcolorText content
borderColorcolorTop border
titleFontSizestringSheet title size
titleFontWeightstringSheet title weight
sheets: {
  backgroundColor: '#FFFFFF',
  handleColor: '#D1D5DB',
  textColor: '#111827',
  borderColor: '#E5E7EB',
  titleFontSize: '18px',
  titleFontWeight: '700',
}

Start card

PropertyTypeDescription
titleFontSizestringTour title size
titleFontWeightstringTour title weight
titleLineHeightstringTour title line height
metaFontSizestringDuration/stops size
metaFontWeightstringDuration/stops weight
metaColorcolorDuration/stops color
descriptionFontSizestringDescription size
offlineMessage.backgroundColorcolorOffline message background
offlineMessage.borderColorcolorOffline message border
offlineMessage.textColorcolorOffline message text
startCard: {
  titleFontSize: '30px',
  titleFontWeight: '700',
  titleLineHeight: '1.2',
  metaFontSize: '14px',
  metaFontWeight: '400',
  metaColor: '#6B7280',
  descriptionFontSize: '16px',
  offlineMessage: {
    backgroundColor: 'rgba(59, 130, 246, 0.08)',
    borderColor: 'rgba(59, 130, 246, 0.25)',
    textColor: '#3b82f6',
  },
}

Loading states

PropertyTypeDescription
spinnerColorcolorLoading spinner
backgroundColorcolorLoading screen background
messageFontSizestringLoading text size
messageFontWeightstringLoading text weight
loading: {
  spinnerColor: '#6366F1',
  backgroundColor: '#F9FAFB',
  messageFontSize: '16px',
  messageFontWeight: '500',
}

Status colors

PropertyTypeDescription
successcolorSuccess messages/icons
errorcolorError messages/icons
warningcolorWarning messages/icons
status: {
  success: '#10B981',
  error: '#EF4444',
  warning: '#F59E0B',
}

Inputs

PropertyTypeDescription
backgroundColorcolorInput field background
textColorcolorInput text
borderColorcolorDefault border
focusBorderColorcolorBorder when focused
placeholderColorcolorPlaceholder text
inputs: {
  backgroundColor: '#FFFFFF',
  textColor: '#111827',
  borderColor: '#E5E7EB',
  focusBorderColor: '#6366F1',
  placeholderColor: '#9CA3AF',
}

Semantic colors

Global color tokens for consistency.

Text

PropertyDescription
primaryMain headings, important text
secondarySubtitles, supporting text
tertiaryMetadata, timestamps
inverseText on dark backgrounds

Border

PropertyDescription
lightSubtle dividers
mediumCard borders, section separators
darkEmphasized dividers

Background

PropertyDescription
primaryCards, modals, overlays
secondaryPage background, sections
tertiaryHover states, disabled elements
colors: {
  text: {
    primary: '#111827',
    secondary: '#6B7280',
    tertiary: '#9CA3AF',
    inverse: '#FFFFFF',
  },
  border: {
    light: '#F3F4F6',
    medium: '#E5E7EB',
    dark: '#D1D5DB',
  },
  background: {
    primary: '#FFFFFF',
    secondary: '#F9FAFB',
    tertiary: '#F3F4F6',
  },
}

Color format

Use hex codes for solid colors:

backgroundColor: '#6366F1'

Use rgba for transparency:

shadow: '0 2px 15px rgba(0, 0, 0, 0.1)'

Avoid using named colors ('blue') or rgb without alpha ('rgb(99, 102, 241)'). Stick to hex and rgba for consistency.

TypeScript interface

The complete type is in src/theme/types.ts:

export interface ThemeConfig {
  id: string;
  name: string;
  description?: string;
  header: HeaderConfig;
  mainContent: MainContentConfig;
  cards: CardsConfig;
  stepIndicators: StepIndicatorsConfig;
  buttons: ButtonsConfig;
  typography: TypographyConfig;
  branding: BrandingConfig;
  miniPlayer: MiniPlayerConfig;
  sheets: SheetsConfig;
  status: StatusConfig;
  loading: LoadingConfig;
  startCard: StartCardConfig;
  inputs: InputsConfig;
  colors: ColorsConfig;
}

Use this as your reference when creating themes. TypeScript will tell you if you're missing any required properties.