Skip to main content

Theme Options

Complete reference for customizing the appearance and branding of your Practice Growth Suite widget.

Overview​

Practice Growth Suite provides extensive theming options to match your brand identity and design preferences. All theme options are configured through the theme object in your scheduler configuration.

Branding Options​

Logo Configuration​

theme: {
logo: {
name: "Your Company Name",
src: "https://example.com/logo.png",
alt: "Company Logo",
width: 120,
height: 40
}
}

Logo Properties:

  • name: Company name displayed as text fallback
  • src: URL to your logo image (PNG, JPG, SVG recommended)
  • alt: Alt text for accessibility
  • width: Logo width in pixels (optional)
  • height: Logo height in pixels (optional)

Color Scheme​

Primary Colors​

colors: {
// Primary brand colors
primaryOptionColor: "#51B44F",
secondaryOptionColor: "#D4F3BB",
primaryButtonBackground: "#51B44F",
primaryButtonBorderColor: "#51B44F",
primaryButtonColor: "#FFFFFF",

// Secondary colors
secondaryButtonBackground: "transparent",
secondaryButtonBorderColor: "#212127",
secondaryButtonColor: "#212127",

// Active states
activeNavItemBackground: "#51B44F",
activeNavItemColor: "#FFFFFF",
inactiveNavItemBackground: "#9CA3AF",
inactiveNavItemColor: "#FFFFFF"
}

Background Colors​

colors: {
// Main backgrounds
bodyBackground: "#F3F4F6",
headerBackground: "#FFFFFF",
footerBackground: "#FFFFFF",
containerBackground: "#FFFFFF",

// Section backgrounds
availabilityBackground: "#F9FAFB",
availabilityPaginationBackground: "#111827",
nearestCardBackground: "#FFFFFF",
samedayCardBackground: "#FFFFFF"
}

Text Colors​

colors: {
// Primary text
headerColor: "#212127",
navItemColor: "#212127",

// Card text
nearestCardTitleColor: "#212127",
nearestCardSubtitleColor: "#9CA3AF",
samedayCardTitleColor: "#212127",
samedayCardSubtitlesColor: "#9CA3AF",
samedayCardServiceTitleColor: "#212127",

// Pagination text
availabilityPaginationColor: "#FFFFFF",
availabilityColumnHeaderColor: "#FFFFFF",
nearestCardColumnHeaderColor: "#FFFFFF"
}

### Border Colors

```js
colors: {
// Card borders
nearestCardBorderColor: "#D1D5DB",
samedayCardBorderColor: "#E5E7EB",
samedayCardDividerColor: "#212127"
}

Button Colors​

colors: {
// Primary buttons
primaryButtonBackground: "#51B44F",
primaryButtonBorderColor: "#51B44F",
primaryButtonColor: "#FFFFFF",

// Secondary buttons
secondaryButtonBackground: "transparent",
secondaryButtonBorderColor: "#212127",
secondaryButtonColor: "#212127"
}

Typography​

Font Configuration​

theme: {
typography: {
// Font families
fontFamilyPrimary: "'Inter', -apple-system, BlinkMacSystemFont, sans-serif",
fontFamilySecondary: "'Georgia', serif",
fontFamilyMono: "'JetBrains Mono', 'Fira Code', monospace",

// Font sizes
fontSizeSmall: "0.875rem",
fontSizeBase: "1rem",
fontSizeLarge: "1.125rem",
fontSizeXLarge: "1.25rem",
fontSize2XLarge: "1.5rem",
fontSize3XLarge: "1.875rem",

// Font weights
fontWeightLight: 300,
fontWeightNormal: 400,
fontWeightMedium: 500,
fontWeightSemibold: 600,
fontWeightBold: 700
}
}

Text Styles​

theme: {
typography: {
// Heading styles
heading1: {
fontSize: "2.25rem",
fontWeight: 700,
lineHeight: "2.5rem"
},
heading2: {
fontSize: "1.875rem",
fontWeight: 600,
lineHeight: "2.25rem"
},
heading3: {
fontSize: "1.5rem",
fontWeight: 600,
lineHeight: "2rem"
},

// Body text styles
body: {
fontSize: "1rem",
fontWeight: 400,
lineHeight: "1.5rem"
},
bodySmall: {
fontSize: "0.875rem",
fontWeight: 400,
lineHeight: "1.25rem"
}
}
}

Layout & Spacing​

Spacing System​

theme: {
spacing: {
// Base spacing unit
base: "0.25rem",

// Spacing scale
xs: "0.25rem", // 4px
sm: "0.5rem", // 8px
md: "1rem", // 16px
lg: "1.5rem", // 24px
xl: "2rem", // 32px
"2xl": "3rem", // 48px
"3xl": "4rem" // 64px
}
}

Component Spacing​

theme: {
layout: {
// Container spacing
containerPadding: "1rem",
containerMaxWidth: "1200px",

// Section spacing
sectionPadding: "2rem",
sectionMargin: "1.5rem",

// Card spacing
cardPadding: "1.5rem",
cardMargin: "1rem",
cardBorderRadius: "0.5rem",

// Button spacing
buttonPadding: "0.75rem 1.5rem",
buttonMargin: "0.5rem",
buttonBorderRadius: "0.375rem"
}
}

Component Styling​

Header Styling​

theme: {
header: {
// Header appearance
height: "4rem",
padding: "0 1.5rem",
borderBottom: "1px solid #E5E7EB",

// Logo positioning
logoPosition: "left", // "left", "center", "right"
logoSize: "auto",

// Navigation styling
navSpacing: "2rem",
navFontWeight: 500
}
}

Calendar Styling​

theme: {
calendar: {
// Calendar grid
gridGap: "0.5rem",
cellPadding: "0.75rem",
cellBorderRadius: "0.375rem",

// Date styling
todayBackground: "#FEF3C7",
todayBorder: "2px solid #F59E0B",
selectedBackground: "#51B44F",
selectedText: "#FFFFFF",

// Availability indicators
availableBackground: "#D1FAE5",
availableText: "#065F46",
unavailableBackground: "#FEE2E2",
unavailableText: "#991B1B"
}
}

Form Styling​

theme: {
forms: {
// Input fields
inputPadding: "0.75rem",
inputBorderRadius: "0.375rem",
inputBorder: "1px solid #D1D5DB",
inputFocusBorder: "2px solid #51B44F",

// Labels
labelFontWeight: 500,
labelMargin: "0.5rem 0",

// Validation states
inputErrorBorder: "2px solid #EF4444",
inputSuccessBorder: "2px solid #10B981"
}
}

Responsive Design​

Breakpoint Configuration​

theme: {
breakpoints: {
// Mobile-first approach
sm: "640px",
md: "768px",
lg: "1024px",
xl: "1280px",
"2xl": "1536px"
}
}

Responsive Spacing​

theme: {
responsive: {
// Mobile spacing
mobile: {
containerPadding: "1rem",
sectionPadding: "1.5rem",
cardPadding: "1rem"
},

// Tablet spacing
tablet: {
containerPadding: "1.5rem",
sectionPadding: "2rem",
cardPadding: "1.5rem"
},

// Desktop spacing
desktop: {
containerPadding: "2rem",
sectionPadding: "3rem",
cardPadding: "2rem"
}
}
}

Animation & Transitions​

Transition Configuration​

theme: {
transitions: {
// Duration
durationFast: "150ms",
durationNormal: "300ms",
durationSlow: "500ms",

// Easing functions
easeIn: "cubic-bezier(0.4, 0, 1, 1)",
easeOut: "cubic-bezier(0, 0, 0.2, 1)",
easeInOut: "cubic-bezier(0.4, 0, 0.2, 1)",

// Component transitions
buttonTransition: "all 150ms ease-in-out",
cardTransition: "transform 200ms ease-out, box-shadow 200ms ease-out",
modalTransition: "opacity 300ms ease-in-out"
}
}

Dark Mode Support​

Dark Theme Colors​

theme: {
darkMode: {
// Dark backgrounds
bodyBackground: "#111827",
headerBackground: "#1F2937",
cardBackground: "#374151",

// Dark text
textPrimary: "#F9FAFB",
textSecondary: "#D1D5DB",
textTertiary: "#9CA3AF",

// Dark borders
borderPrimary: "#4B5563",
borderSecondary: "#374151"
}
}

Complete Theme Example​

const jarvis = new JarvisAnalyticsScheduler({
token: "YOUR_TOKEN",
companyId: "YOUR_COMPANY_ID",
locationId: "YOUR_LOCATION_ID",

// Logo configuration
logo: {
src: "https://acme.com/logo.png",
width: 189,
height: 38
},

// Color customization
colors: {
// Primary colors
primaryOptionColor: "#2563EB",
secondaryOptionColor: "#DBEAFE",
primaryButtonBackground: "#2563EB",
primaryButtonBorderColor: "#2563EB",
primaryButtonColor: "#FFFFFF",

// Backgrounds
bodyBackground: "#F8FAFC",
headerBackground: "#FFFFFF",
containerBackground: "#FFFFFF",
availabilityBackground: "#F1F5F9",

// Text colors
headerColor: "#0F172A",
navItemColor: "#0F172A",
nearestCardTitleColor: "#0F172A",
nearestCardSubtitleColor: "#64748B",

// Card styling
nearestCardBackground: "#FFFFFF",
nearestCardBorderColor: "#E2E8F0",
samedayCardBackground: "#FFFFFF",
samedayCardBorderColor: "#E2E8F0"
}
});

Best Practices​

Color Accessibility​

  • Ensure sufficient contrast ratios (WCAG AA compliance)
  • Test colors with colorblind users
  • Provide alternative color schemes

Typography​

  • Use readable font sizes (minimum 16px for body text)
  • Maintain consistent hierarchy
  • Consider line height for readability

Responsive Design​

  • Test on multiple device sizes
  • Use relative units when possible
  • Ensure touch targets are appropriately sized

Performance​

  • Optimize image assets for logos
  • Use CSS custom properties for dynamic theming
  • Minimize theme changes during user interaction

Next Steps​