.calm-root.
Override on any ancestor (or globally) to retheme — copy the full
default block below and edit what you want:
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.| Variable | Default | What it paints |
|---|---|---|
--calm-popover | 0 0% 100% | Modal surface |
--calm-popover-foreground | 240 10% 3.9% | Body text on popover |
--calm-primary | 217 100% 65% | Primary CTA, accents (Calm blue) |
--calm-primary-foreground | 0 0% 100% | Text on primary |
--calm-secondary | 190 27% 82% / 0.35 | Secondary buttons, list rows |
--calm-secondary-foreground | 240 5.9% 10% | Text on secondary |
--calm-muted | 160 13% 86% | Muted surfaces, disabled chips |
--calm-muted-foreground | 240 3.8% 46.1% | Helper text, captions |
--calm-destructive | 0 84.2% 60.2% | Error states, destructive actions |
--calm-destructive-foreground | 0 0% 100% | Text on destructive |
--calm-success | 142 71% 38% | Settled-state indicators, check badges |
--calm-success-foreground | 0 0% 100% | Text on success |
--calm-border | 160 13% 85% | Default border color |
--calm-input | 160 13% 85% | Input borders |
--calm-ring | 217 100% 65% | Focus ring color |
--calm-overlay | 215 19% 35% / 0.24 | Modal backdrop |
Layout
| Variable | Default | What it controls |
|---|---|---|
--calm-radius | 8px | Base corner radius (buttons, cards). Other steps slide with it: xs = base − 12px, sm = base − 8px, md = base − 4px, lg = base, xl = base + 4px. |
Typography
| Variable | Default | What it controls |
|---|---|---|
--calm-font-sans | "Geist", -apple-system, BlinkMacSystemFont, "Segoe UI", system-ui, sans-serif | The whole modal’s font stack. Partner pages load Geist (or any font in the stack) themselves. |
Shadows
| Variable | Default | What it paints |
|---|---|---|
--calm-shadow-edge | inset 0 0 0 1px hsl(var(--calm-border)) | 1px inset edge on cards (replaces a CSS border) |
--calm-shadow-modal | 0 0 0 1px hsl(0 0% 0% / 0.04), 0 8px 30px hsl(0 0% 0% / 0.10) | Modal drop shadow |
Dark mode
The SDK ships light-only. Override tokens inside any dark-themed ancestor — via adata-theme="dark" selector, a media query, or a
provider you already control:
Scoping
The SDK uses Tailwind v4 with acalm: prefix, scoped under
.calm-root. That means:
- Every internal utility class ships as
calm:bg-primary(notbg-primary) — no collision with your app’s Tailwind utilities. - Tailwind’s
preflightis skipped — the SDK’s reset is scoped under.calm-rootvia: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.
.calm-root yourself — the modal’s portal
container adds it.