Skip to main content
The SDK ships a single stylesheet — import it once at your app root:
Every visual token is a CSS variable scoped under .calm-root. Override on any ancestor (or globally) to retheme — copy the full default block below and edit what you want:
Colors are HSL space-separated triples (Tailwind v4 convention) — 217 100% 65%, not #4B90FF. The SDK wraps them with hsl(...) at use-time so opacity modifiers work (hsl(var(--calm-primary) / 0.5)).

Color tokens

The SDK ships light-only — see Dark mode for how to override tokens inside a dark-themed ancestor.

Layout

Typography

--spacing and the --text-* sizes are Tailwind theme variables (no calm- prefix), but you override them the same way — set them on .calm-root or any ancestor.

Shadows

Dark mode

The SDK ships light-only. Override tokens inside any dark-themed ancestor — via a data-theme="dark" selector, a media query, or a provider you already control:

Scoping

The SDK uses Tailwind v4 with a calm: prefix, scoped under .calm-root. That means:
  • Every internal utility class ships as calm:bg-primary (not bg-primary) — no collision with your app’s Tailwind utilities.
  • Tailwind’s preflight is skipped — the SDK’s reset is scoped under .calm-root via :where() so it never touches the host page’s typography or box-sizing.
  • Custom Tailwind tokens (--text-xs: 13px, tighter --spacing: 0.2rem) apply only inside .calm-root.
You don’t need to apply .calm-root yourself — the modal’s portal container adds it.