Theming

The widget uses Shadow DOM for complete style isolation, ensuring your existing CSS never conflicts with the calculator. All theming is done through CSS custom properties (variables) that are applied directly to the widget's shadow root (your specified selector or mount element)

CSS Variables Reference

VariableDefaultDescription
--cdn-opacity1Global opacity multiplier
--cdn-radius0.625remBorder radius for all elements
--cdn-backgroundhsl(0 0% 100% / var(--cdn-opacity))Widget background color
--cdn-foregroundhsl(0 0% 3.9% / var(--cdn-opacity))Primary text color
--cdn-primaryhsl(0 0% 9.05% / var(--cdn-opacity))Primary button/emphasis color
--cdn-primary-foregroundhsl(0 0% 98% / var(--cdn-opacity))Text color on primary background
--cdn-borderhsl(0 0% 89.8% / var(--cdn-opacity))Border color
--cdn-border-size1pxBorder width
--cdn-ringhsl(0 0% 3.9% / var(--cdn-opacity))Focus ring color
--cdn-mutedhsl(0 0% 96.1% / var(--cdn-opacity))Muted background color
--cdn-muted-foregroundhsl(0 0% 45.1% / var(--cdn-opacity))Muted text color
--cdn-destructivehsl(0 84.2% 60.2% / var(--cdn-opacity))Error/destructive color
--cdn-destructive-foregroundhsl(0 0% 98% / var(--cdn-opacity))Text color on destructive background
--cdn-font-familyinheritFont family (inherits from parent)
--cdn-font-size-base1remBase font size
--cdn-font-size-form-labelvar(--cdn-font-size-base)Form label font size
--cdn-font-size-form-inputvar(--cdn-font-size-base)Form input font size
--cdn-font-size-calc-buttonvar(--cdn-font-size-base)Calculate button font size
--cdn-font-size-result-titlevar(--cdn-font-size-base)Result title font size
--cdn-font-size-result-labelvar(--cdn-font-size-base)Result label font size
--cdn-font-size-result-totalvar(--cdn-font-size-base)Result total font size
--cdn-font-size-result-valuevar(--cdn-font-size-base)Result value font size
--cdn-transition-functioncubic-bezier(.4, 0, .2, 1)Animation timing function

Usage example:

init({
  cssVars: {
    '--cdn-primary': 'hsl(15 90% 55%)',
    '--cdn-radius': '0.75rem',
    '--cdn-font-family': 'Inter, sans-serif',
    '--cdn-font-size-form-label': '1.125rem'
  }
});

The color tokens can be any valid CSS color formats.

  • Hex: #ff0000, #f00
  • RGB/RGBA: rgb(255, 0, 0), rgba(255, 0, 0, 0.5)
  • HSL/HSLA: hsl(0, 100%, 50%), hsla(0, 100%, 50%, 0.5)
  • Named colors: red, blue, transparent
  • CSS4 colors: oklch(), lab()

What’s Next