Cal.com
Cal.com 以白色画布、黑色主按钮和 Cal Sans 展示字体构成清爽的日历产品界面,配合充足留白、柔和圆角和产品截图,呈现友好而现代的 SaaS 气质。

primary
#111111
--color-primary
primary active
#242424
--color-primary-active
primary disabled
#E5E7EB
--color-primary-disabled
ink
#111111
--color-ink
body
#374151
--color-body
muted
#6B7280
--color-muted
muted soft
#898989
--color-muted-soft
hairline
#E5E7EB
--color-hairline
hairline soft
#F3F4F6
--color-hairline-soft
canvas
#FFFFFF
--color-canvas
surface soft
#F8F9FA
--color-surface-soft
surface card
#F5F5F5
--color-surface-card
surface strong
#E5E7EB
--color-surface-strong
surface dark
#101010
--color-surface-dark
surface dark elevated
#1A1A1A
--color-surface-dark-elevated
on primary
#FFFFFF
--color-on-primary
on dark
#FFFFFF
--color-on-dark
on dark soft
#A1A1AA
--color-on-dark-soft
brand accent
#3B82F6
--color-brand-accent
success
#10B981
--color-success
warning
#F59E0B
--color-warning
error
#EF4444
--color-error
badge orange
#FB923C
--color-badge-orange
badge pink
#EC4899
--color-badge-pink
badge violet
#8B5CF6
--color-badge-violet
badge emerald
#34D399
--color-badge-emerald
字体家族
Cal Sans, Inter, sans-serif / Inter, sans-serif / JetBrains Mono, ui-monospace, monospace
字重
备注
3 个字体家族,完整字阶、行高和字距见 DESIGN.md
品牌设计系统的完整 Markdown 文档
Cal.com — Style Reference
> A clean, calendar-software-first interface anchored on white canvas with black primary CTAs and custom Cal Sans display typography. The system reads as friendly modern SaaS — generous whitespace, soft-rounded cards (~12px), product UI fragments shown directly inside cards, and a dark navy footer that visually closes long-scroll pages. Brand voltage comes from the Cal Sans display headline (a custom geometric face) and from product UI artifacts shown in-card rather than from accent colors.
**Theme:** light
**Source website:** [https://cal.com/](https://cal.com/)
Use the live official website to compare and validate this extracted snapshot. The current source website remains authoritative.
Tokens — Colors
| Name | Value | Token | Role |
|---|---|---|---|
| primary | `#111111` | `--color-primary` | primary role extracted from the source design |
| primary active | `#242424` | `--color-primary-active` | primary active role extracted from the source design |
| primary disabled | `#e5e7eb` | `--color-primary-disabled` | primary disabled role extracted from the source design |
| ink | `#111111` | `--color-ink` | ink role extracted from the source design |
| body | `#374151` | `--color-body` | body role extracted from the source design |
| muted | `#6b7280` | `--color-muted` | muted role extracted from the source design |
| muted soft | `#898989` | `--color-muted-soft` | muted soft role extracted from the source design |
| hairline | `#e5e7eb` | `--color-hairline` | hairline role extracted from the source design |
| hairline soft | `#f3f4f6` | `--color-hairline-soft` | hairline soft role extracted from the source design |
| canvas | `#ffffff` | `--color-canvas` | canvas role extracted from the source design |
| surface soft | `#f8f9fa` | `--color-surface-soft` | surface soft role extracted from the source design |
| surface card | `#f5f5f5` | `--color-surface-card` | surface card role extracted from the source design |
| surface strong | `#e5e7eb` | `--color-surface-strong` | surface strong role extracted from the source design |
| surface dark | `#101010` | `--color-surface-dark` | surface dark role extracted from the source design |
| surface dark elevated | `#1a1a1a` | `--color-surface-dark-elevated` | surface dark elevated role extracted from the source design |
| on primary | `#ffffff` | `--color-on-primary` | on primary role extracted from the source design |
| on dark | `#ffffff` | `--color-on-dark` | on dark role extracted from the source design |
| on dark soft | `#a1a1aa` | `--color-on-dark-soft` | on dark soft role extracted from the source design |
| brand accent | `#3b82f6` | `--color-brand-accent` | brand accent role extracted from the source design |
| success | `#10b981` | `--color-success` | success role extracted from the source design |
| warning | `#f59e0b` | `--color-warning` | warning role extracted from the source design |
| error | `#ef4444` | `--color-error` | error role extracted from the source design |
| badge orange | `#fb923c` | `--color-badge-orange` | badge orange role extracted from the source design |
| badge pink | `#ec4899` | `--color-badge-pink` | badge pink role extracted from the source design |
| badge violet | `#8b5cf6` | `--color-badge-violet` | badge violet role extracted from the source design |
| badge emerald | `#34d399` | `--color-badge-emerald` | badge emerald role extracted from the source design |
Tokens — Typography
Cal Sans, Inter, sans-serif · `--font-primary`
Inter, sans-serif · `--font-family-2`
JetBrains Mono, ui-monospace, monospace · `--font-family-3`
Type Scale
| Role | Size | Line Height | Letter Spacing | Token |
|---|---|---|---|---|
| display-xl | 64px | 1.05 | -2px | `--text-display-xl` |
| display-lg | 48px | 1.1 | -1.5px | `--text-display-lg` |
| display-md | 36px | 1.15 | -1px | `--text-display-md` |
| display-sm | 28px | 1.2 | -0.5px | `--text-display-sm` |
| title-lg | 22px | 1.3 | -0.3px | `--text-title-lg` |
| title-md | 18px | 1.4 | 0 | `--text-title-md` |
| title-sm | 16px | 1.4 | 0 | `--text-title-sm` |
| body-md | 16px | 1.5 | 0 | `--text-body-md` |
| body-sm | 14px | 1.5 | 0 | `--text-body-sm` |
| caption | 13px | 1.4 | 0 | `--text-caption` |
| code | 14px | 1.5 | 0 | `--text-code` |
| button | 14px | 1 | 0 | `--text-button` |
| nav-link | 14px | 1.4 | 0 | `--text-nav-link` |
Tokens — Spacing & Shapes
**Density:** comfortable
Spacing Scale
| Name | Value | Token |
|---|---|---|
| xxs | 4px | `--spacing-xxs` |
| xs | 8px | `--spacing-xs` |
| sm | 12px | `--spacing-sm` |
| md | 16px | `--spacing-md` |
| lg | 24px | `--spacing-lg` |
| xl | 32px | `--spacing-xl` |
| xxl | 48px | `--spacing-xxl` |
| section | 96px | `--spacing-section` |
Border Radius
| Name | Value | Token |
|---|---|---|
| xs | 4px | `--radius-xs` |
| sm | 6px | `--radius-sm` |
| md | 8px | `--radius-md` |
| lg | 12px | `--radius-lg` |
| xl | 16px | `--radius-xl` |
| pill | 9999px | `--radius-pill` |
| full | 9999px | `--radius-full` |
Layout
Components
button primary
**Role:** button primary component
button primary active
**Role:** button primary active component
button primary disabled
**Role:** button primary disabled component
button secondary
**Role:** button secondary component
button icon circular
**Role:** button icon circular component
button text link
**Role:** button text link component
text link
**Role:** text link component
top nav
**Role:** top nav component
nav pill group
**Role:** nav pill group component
hero band
**Role:** hero band component
hero app mockup card
**Role:** hero app mockup card component
feature card
**Role:** feature card component
feature icon card
**Role:** feature icon card component
product mockup card
**Role:** product mockup card component
testimonial card
**Role:** testimonial card component
pricing tier card
**Role:** pricing tier card component
pricing tier card featured
**Role:** pricing tier card featured component
text input
**Role:** text input component
text input focused
**Role:** text input focused component
category tab
**Role:** category tab component
category tab active
**Role:** category tab active component
avatar circle
**Role:** avatar circle component
badge pill
**Role:** badge pill component
rating stars
**Role:** rating stars component
cta band light
**Role:** cta band light component
footer
**Role:** footer component
Do's and Don'ts
Do
Don't
Layout
Use the documented spacing scale and component geometry as the implementation baseline. Validate responsive composition and current page rhythm against [the live source](https://cal.com/).