Skip to main content
You can fully customize the look and feel of the Cal.com embed by passing CSS variables through the Cal("ui", { cssVarsPerTheme }) API. This lets you match the Booker to your brand’s colors, spacing, and border radius — for both light and dark themes.
Pass the variable name without the -- prefix as the key in cssVarsPerTheme. For example, to override --cal-brand, use "cal-brand": "#6F61C0".

Variable reference

Brand

KeyPurpose
cal-brandPrimary brand color — selected date circle, confirm button bg
cal-brand-emphasisBrand hover state — confirm button hover
cal-brand-textText on brand surfaces — “Confirm” button label, selected date number
cal-brand-subtleLighter brand accent — secondary indicators
cal-brand-accentContrasting accent on brand buttons — icon color on brand bg

Text

KeyPurpose
cal-textDefault body text — event description, time slot labels “14:30”
cal-text-emphasisHigh-priority text — event title, month header “April 2026”
cal-text-subtleSecondary text — day-of-week headers “SUN MON TUE”, timezone label
cal-text-mutedLowest contrast text — disabled date numbers, placeholder text
cal-text-invertedText on dark/inverted backgrounds — tooltips

Text semantic

KeyPurpose
cal-text-semantic-infoInfo alert text — “Scheduling information” notice
cal-text-semantic-attentionWarning alert text — “Limited spots left” notice
cal-text-semantic-errorError alert text — “This time is unavailable”

Text status

These feed the text-info / text-error / text-success / text-attention utility classes as well as matching fill-* icon colors within the Booker (for example, Badge variants and form validation messages).
KeyPurpose
cal-text-infoInfo badge text and icon fill
cal-text-successSuccess badge text and icon fill
cal-text-attentionAttention/warning badge text and icon fill
cal-text-errorError text and icon fill — form validation “Required field”

Background

KeyPurpose
cal-bgMain booker background — the white canvas behind everything
cal-bg-emphasisHighlighted surface — hovered date cell, active date range bg
cal-bg-subtleSecondary surface — time slot hover bg, card backgrounds
cal-bg-mutedFaintest surface — unavailable day bg, gradient fade edges
cal-bg-invertedInverted surface — dark overlay backgrounds, tooltips
cal-bg-attentionWarning badge background — “orange” badge variant
cal-bg-errorError badge/alert background — “red” badge variant

Background semantic

KeyPurpose
cal-bg-semantic-info-subtleSubtle info alert background
cal-bg-semantic-attention-subtleSubtle warning alert background
cal-bg-semantic-error-subtleSubtle error alert background

Border

KeyPurpose
cal-borderDefault dividers — calendar grid lines, card borders
cal-border-emphasisStrong borders — focused input ring, active section border
cal-border-subtleSoft borders — date picker separator, time slot dividers
cal-border-mutedFaintest borders — inner column dividers
cal-border-errorError input border — red ring on invalid form field
cal-border-semantic-errorSemantic error border — error banner outline
cal-border-semantic-attention-subtleWarning banner border
cal-border-semantic-error-subtleSubtle error banner border

Booker border

KeyPurpose
cal-border-bookerOuter border color of the entire booker widget
cal-border-booker-widthThickness of the outer booker border — for example, “1px” or “3px”

Border radius

KeyPurpose
radiusBase radius — small inputs, chips (4px)
radius-smExtra-small radius — tiny badges (2px)
radius-mdMedium radius — buttons, dropdowns (6px)
radius-lgLarge radius — cards, modals (8px)
radius-xlExtra-large radius — large cards (12px)
radius-2xl2XL radius — dialog containers (16px)
radius-3xl3XL radius — hero cards (24px)
radius-fullFull pill shape — avatar circles, pill badges
radius-noneNo rounding — sharp-cornered elements

Spacing

KeyPurpose
spacingBase spacing unit — all padding/margin/gap values scale from this

Full example

Cal("ui", {
  theme: "light",
  hideEventTypeDetails: false,
  cssVarsPerTheme: {
    light: {
      // ── Brand ──
      "cal-brand": "#6F61C0",             // Selected date circle, confirm button bg
      "cal-brand-emphasis": "#5A4EA6",     // Confirm button hover state
      "cal-brand-text": "#FFFFFF",         // Text on brand surfaces — "Confirm" label, selected date number
      "cal-brand-subtle": "#B8B0E0",       // Lighter brand accent for secondary indicators
      "cal-brand-accent": "#FFFFFF",       // Contrasting accent on brand buttons

      // ── Text ──
      "cal-text": "#6F61C0",              // Default body text — event description, time slot labels
      "cal-text-emphasis": "#4D408D",      // High-priority text — event title, month header
      "cal-text-subtle": "#8A7FCC",        // Secondary text — day-of-week headers, timezone
      "cal-text-muted": "#C0B8FF",         // Lowest contrast text — disabled dates, placeholders
      "cal-text-inverted": "#FFFFFF",      // Text on dark/inverted backgrounds

      // ── Text Semantic ──
      "cal-text-semantic-info": "#3B3080",        // Info alert text
      "cal-text-semantic-attention": "#8B3A1A",   // Warning alert text
      "cal-text-semantic-error": "#7C2020",       // Error alert text

      // ── Text Status ──
      "cal-text-info": "#3B3080",          // Info badge text and icon fill
      "cal-text-success": "#1A5C30",       // Success badge text and icon fill
      "cal-text-attention": "#8B3A1A",     // Attention badge text and icon fill
      "cal-text-error": "pink",            // Error text and icon fill — form validation

      // ── Background ──
      "cal-bg": "#FFFFFF",                 // Main booker background
      "cal-bg-emphasis": "#E1DFFF",        // Highlighted surface — hovered date, active range
      "cal-bg-subtle": "#F0EEFF",          // Secondary surface — time slot hover, cards
      "cal-bg-muted": "#F8F7FF",           // Faintest surface — unavailable day bg, gradient edges
      "cal-bg-inverted": "#2D2554",        // Inverted surface — dark overlays, tooltips
      "cal-bg-attention": "#FFF3E0",       // Warning badge background
      "cal-bg-error": "#FFE8EC",           // Error badge/alert background

      // ── Background Semantic ──
      "cal-bg-semantic-info-subtle": "#F0EDFF",       // Subtle info alert bg
      "cal-bg-semantic-attention-subtle": "#FFF3E0",  // Subtle warning alert bg
      "cal-bg-semantic-error-subtle": "#FFE8EC",      // Subtle error alert bg

      // ── Border ──
      "cal-border": "#A090E0",                             // Default dividers — calendar grid lines
      "cal-border-emphasis": "#4D408D",                    // Strong borders — focused inputs
      "cal-border-subtle": "#A090E0",                      // Soft borders — separators, dividers
      "cal-border-muted": "#D6D0F0",                       // Faintest borders
      "cal-border-error": "#FFAAAA",                       // Error input border
      "cal-border-semantic-error": "#FFAAAA",              // Error banner outline
      "cal-border-semantic-attention-subtle": "#FFD4A0",   // Warning banner border
      "cal-border-semantic-error-subtle": "#FFAAAA",       // Subtle error banner border

      // ── Booker Border ──
      "cal-border-booker": "#A090E0",      // Outer border of the entire booker widget
      "cal-border-booker-width": "3px",    // Thickness of the outer booker border

      // ── Border Radius ──
      "radius": "0.25rem",                // Base radius — small inputs, chips (4px)
      "radius-sm": "0.125rem",            // Extra-small radius — tiny badges (2px)
      "radius-md": "0.375rem",            // Medium radius — buttons, dropdowns (6px)
      "radius-lg": "0.5rem",              // Large radius — cards, modals (8px)
      "radius-xl": "0.75rem",             // Extra-large radius — large cards (12px)
      "radius-2xl": "1rem",               // 2XL radius — dialog containers (16px)
      "radius-3xl": "1.5rem",             // 3XL radius — hero cards (24px)
      "radius-full": "9999px",            // Full pill shape — avatars, pill badges
      "radius-none": "0px",               // No rounding — sharp corners

      // ── Spacing ──
      "spacing": "1px",                   // Base spacing unit — all padding/margin/gap scale from this
    },
    dark: {
      // ── Brand ──
      "cal-brand": "#A090E0",
      "cal-brand-emphasis": "#C0B8FF",
      "cal-brand-text": "#1A1540",
      "cal-brand-subtle": "#5A4EA6",
      "cal-brand-accent": "#1A1540",

      // ── Text ──
      "cal-text": "#D6D0F0",
      "cal-text-emphasis": "#F0EEFF",
      "cal-text-subtle": "#A090E0",
      "cal-text-muted": "#8A7FCC",
      "cal-text-inverted": "#1A1540",

      // ── Text Semantic ──
      "cal-text-semantic-info": "#A8A0F0",
      "cal-text-semantic-attention": "#E0A060",
      "cal-text-semantic-error": "#F08080",

      // ── Text Status ──
      "cal-text-info": "#C0B8FF",
      "cal-text-success": "#80E0B0",
      "cal-text-attention": "#F0C090",
      "cal-text-error": "#FFB0B0",

      // ── Background ──
      "cal-bg": "#1A1540",
      "cal-bg-emphasis": "#2D2554",
      "cal-bg-subtle": "#231E4A",
      "cal-bg-muted": "#1E1845",
      "cal-bg-inverted": "#F0EEFF",
      "cal-bg-attention": "#6E2D14",
      "cal-bg-error": "#601818",

      // ── Background Semantic ──
      "cal-bg-semantic-info-subtle": "#1E1860",
      "cal-bg-semantic-attention-subtle": "#3E1E0A",
      "cal-bg-semantic-error-subtle": "#3E1010",

      // ── Border ──
      "cal-border": "#4D408D",
      "cal-border-emphasis": "#8A7FCC",
      "cal-border-subtle": "#3B3080",
      "cal-border-muted": "#231E4A",
      "cal-border-error": "#802020",
      "cal-border-semantic-error": "#802020",
      "cal-border-semantic-attention-subtle": "#6E2D14",
      "cal-border-semantic-error-subtle": "#802020",

      // ── Booker Border ──
      "cal-border-booker": "#4D408D",
      "cal-border-booker-width": "3px",

      // ── Border Radius ──
      "radius": "0.25rem",
      "radius-sm": "0.125rem",
      "radius-md": "0.375rem",
      "radius-lg": "0.5rem",
      "radius-xl": "0.75rem",
      "radius-2xl": "1rem",
      "radius-3xl": "1.5rem",
      "radius-full": "9999px",
      "radius-none": "0px",

      // ── Spacing ──
      "spacing": "1px",
    },
  },
});