Cal.com — Design Reference
graphite calendar on paper white
Source: https://cal.com
Theme: light
Category: SaaS
Mood: light, minimal, monochrome, precise, friendly, typographic
Captured: 2026-09-13
Overview
A calm, monochrome product site that feels like a good paper planner: pale grey canvas, bright white cards, and heavy, tightly set geometric headlines that sound confident without shouting. The most distinctive thing is the contrast between the dense, chunky Cal Sans display type and very light (300) body copy, so pages look punchy yet airy. Actual product UI, such as booking widgets, calendars and toggles, stands in for illustration.
It is built almost entirely from greys. The #f4f4f4 page is framed by faint vertical hairline guides, and content sits in #ffffff panels with 16px radii and a soft two-part shadow (a crisp 1px contact edge plus a diffuse 4–8px blur). Primary actions are near-black #242424 with a subtle inner highlight and a trailing chevron. Secondary actions are pale grey bars with a white inner top highlight. Colour shows up only in small doses: #0099ff on 'Save 25%' tags and third-party review stars and logos. Spacing sits on a 4px grid, with 8–12px inside components and 64–96px between sections.
Tokens — Colors
| Name |
Value |
Token |
Role |
| Paper Grey |
#f4f4f4 |
--color-canvas |
Page background behind every marketing page; the canvas that white cards float on |
| Card White |
#ffffff |
--color-surface |
Hero panel, feature cards, pricing cards, testimonial cards, docs background |
| Mist |
#fcfcfc |
--color-surface-subtle |
Large quiet section fills and inner panels inside white cards |
| Soft Fog |
#f7f7f7 |
--color-surface-sunken |
Segmented control tracks, secondary button fills, calendar day cells |
| Graphite |
#242424 |
--color-primary |
Primary buttons, headline colour, inverted Organizations pricing card, selected calendar day |
| Ink |
#141414 |
--color-ink |
Darkest borders on dark buttons and toggles, logo mark |
| Charcoal |
#292929 |
--color-text |
Default body and label text on white |
| Slate |
#3f3f3f |
--color-text-secondary |
Secondary headings, list items, FAQ questions |
| Pebble |
#898989 |
--color-text-muted |
Lead paragraphs, descriptions, captions, 'No credit card required' |
| Nickel |
#707071 |
--color-text-nav |
Nav links, footer links, meta text |
| Hairline |
#e1e2e3 |
--color-border |
Card dividers, calendar grid separators, input and ghost-button borders, page guide lines |
| Signal Blue |
#0099ff |
--color-accent |
Rare accent: 'Save 25%' discount tags and inline highlight text |
| Ice Blue |
#eff6fe |
--color-accent-soft |
Background tint behind blue discount tags |
| Lilac Wash |
#e9ddfd |
--color-accent-lilac |
Occasional soft tint behind feature icons and pills |
Semantic roles
| Role |
Value |
| background |
#f4f4f4 |
| surface |
#ffffff |
| surface raised |
#ffffff |
| border |
#e1e2e3 |
| text |
#242424 |
| text muted |
#898989 |
| primary |
#242424 |
| primary text |
#ffffff |
| accent |
#0099ff |
| success |
#1ba673 |
| warning |
#c37d0d |
| danger |
#d45656 |
Tokens — Typography
- Display: Cal Sans (400, 600, 900) — fallbacks: Manrope, Plus Jakarta Sans, system-ui, sans-serif. Chunky geometric grotesk used for all marketing headlines (h1 64px, h2 48px), prices and pull-quotes. Letter-spacing stays normal because the face is already tightly fitted. Use 1.1 line-height so headlines read as solid blocks.
- Body: Cal Sans UI Variable Light (300) — fallbacks: Inter, DM Sans, system-ui, sans-serif. Workhorse text face at weight 300 for paragraphs, nav, links, card titles and UI labels. Card titles at 18px use -0.2px tracking. Its thin weight against the heavy display face is the signature contrast. Docs switch to Inter 400/500/600, and blog prose uses Matter Regular.
- Accent: Inter (400, 500, 600) — fallbacks: system-ui, -apple-system, sans-serif. Docs site only: h1 36px/600 with -0.9px tracking, h2 24px/600 with -0.6px, body 16px/1.75. Primary colour there is #111827 / #171717.
- Mono: Paper Mono (400, 500) — fallbacks: Roboto Mono, JetBrains Mono, ui-monospace, monospace. Inline code and event constants such as BOOKING_REASSIGNED at 16px/1.5. Tiny uppercase micro-labels (e.g. 'YEARLY') also use it.
| Role |
Size |
Line height |
Weight |
Letter spacing |
Family |
| Display |
64px |
1.1 |
600 |
normal |
display |
| H2 |
48px |
1.1 |
600 |
normal |
display |
| H3 / Price |
32px |
1.2 |
600 |
normal |
display |
| Quote / Card headline |
24px |
1.3 |
600 |
normal |
display |
| Feature title |
18px |
1.3 |
300 |
-0.2px |
body |
| Lead |
18px |
1.5 |
300 |
normal |
body |
| Body |
16px |
1.5 |
300 |
normal |
body |
| Small / Button |
14px |
1.4 |
400 |
normal |
body |
| Mono |
16px |
1.5 |
400 |
normal |
mono |
Tokens — Spacing & Layout
- Base unit: 4px
- Density: comfortable
- Container max width: 1280px
- Section gap: 96px
- Card padding: 24px
- Scale: 2px, 4px, 8px, 10px, 12px, 16px, 20px, 24px, 32px, 48px, 64px, 96px
Tokens — Radius
| Element |
Value |
| Hero panel, feature and pricing cards |
16px |
| Inner panels, inputs, booking widget, testimonial cards |
12px |
| Buttons, calendar day cells, segmented controls |
8px |
| Small chips, tags, icon tiles |
4px |
| Announcement pills and toggles |
9999px |
| Avatars |
100% |
Tokens — Shadows
| Name |
Value |
Usage |
| Card lift |
rgba(36, 36, 36, 0.7) 0px 1px 5px -4px, rgba(36, 36, 36, 0.05) 0px 4px 8px 0px |
Default white cards and the hero panel: a crisp contact edge plus a faint diffuse halo, never a heavy drop |
| Card lift + ring |
rgba(19, 19, 22, 0.7) 0px 1px 5px -4px, rgba(34, 42, 53, 0.08) 0px 0px 0px 1px, rgba(34, 42, 53, 0.05) 0px 4px 8px 0px |
Larger feature cards that need a 1px ring to separate from white-on-white contexts |
| Dark button gloss |
rgba(255, 255, 255, 0.15) 0px 2px 0px 0px inset |
Inner top highlight on #242424 primary buttons, giving a slightly bevelled key feel |
| Light button bevel |
rgb(255, 255, 255) 0px 2px 0px 0px inset |
Inner top highlight on pale grey secondary buttons and segmented options |
| Pressed well |
rgba(0, 0, 0, 0.16) 0px 1px 1.9px 0px inset |
Recessed tracks for toggles, segmented duration pickers and inputs |
Components
Primary button (button)
| Property |
Value |
| background |
#242424 |
| color |
#ffffff |
| border |
1px solid #141414 |
| radius |
8px |
| padding |
8px 12px 8px 16px |
| font size |
14px |
| font weight |
400 |
| shadow |
rgba(255, 255, 255, 0.15) 0px 2px 0px 0px inset |
| hover |
background #3f3f3f; chevron nudges 2px right |
Always ends with a small › chevron in muted white. In the hero it runs full width (≈466px) with a Google 'G' icon on the left. On the inverted dark pricing card it flips to a white fill with #242424 text.
Secondary button (button)
| Property |
Value |
| background |
linear-gradient(#f7f7f7, #ededed) |
| color |
#242424 |
| border |
1px solid #e1e2e3 |
| radius |
8px |
| padding |
8px 16px |
| font size |
14px |
| font weight |
400 |
| shadow |
rgb(255, 255, 255) 0px 2px 0px 0px inset |
| hover |
background #f4f4f4; border #d3d3d3 |
Soft grey key with a trailing chevron, e.g. 'Sign up with email', 'Book a demo'. On grey sections a white-fill variant ('See feature breakdown') uses the same border.
Announcement pill (badge)
| Property |
Value |
| background |
#f7f7f7 |
| color |
#242424 |
| border |
1px solid #e1e2e3 |
| radius |
9999px |
| padding |
4px 10px |
| font size |
12px |
| font weight |
400 |
| shadow |
rgba(0, 0, 0, 0.05) 0px 1px 2px 0px |
| hover |
background #ffffff |
Sits above hero and section headlines ('Cal.com launches v6.8 ›', 'Pricing', 'How it works') with a tiny leading icon or trailing chevron.
Discount tag (badge)
| Property |
Value |
| background |
#eff6fe |
| color |
#0099ff |
| border |
none |
| radius |
4px |
| padding |
2px 4px |
| font size |
10px |
| font weight |
400 |
| shadow |
none |
| hover |
none |
The only real use of saturated colour on marketing pages ('Save 25%'), placed next to prices.
Feature card (card)
| Property |
Value |
| background |
#ffffff |
| color |
#242424 |
| border |
none |
| radius |
16px |
| padding |
24px |
| font size |
16px |
| font weight |
300 |
| shadow |
rgba(36, 36, 36, 0.7) 0px 1px 5px -4px, rgba(36, 36, 36, 0.05) 0px 4px 8px 0px |
| hover |
none |
18px/300 title, #898989 description, then an embedded mini product UI (toggles, dropdowns, calendar) as the visual. Arranged in 3-up or 2×2 grids with 16–24px gaps. A #242424 inverted variant is used for the highlighted pricing tier.
Segmented duration picker (other)
| Property |
Value |
| background |
#f4f4f4 |
| color |
#898989 |
| border |
none |
| radius |
8px |
| padding |
2px |
| font size |
14px |
| font weight |
300 |
| shadow |
rgba(0, 0, 0, 0.16) 0px 1px 1.9px 0px inset |
| hover |
text #242424 |
Options 15m/30m/45m/1h; the selected option is a white 6px-radius chip with rgba(34, 42, 53, 0.05) 0px 4px 8px lift and #242424 text.
Input (input)
| Property |
Value |
| background |
#ffffff |
| color |
#171717 |
| border |
1px solid #e1e2e3 |
| radius |
12px |
| padding |
10px 14px |
| font size |
14px |
| font weight |
400 |
| shadow |
rgba(0, 0, 0, 0.05) 0px 1px 2px 0px |
| hover |
border #d3d3d3; focus ring 0 0 0 1px rgba(112,112,113,0.3) |
Docs 'Ask a question…' bar (60px tall with a round grey send button) and search field with ⌘K hint. Placeholder is #898989.
Top navigation (nav)
| Property |
Value |
| background |
transparent |
| color |
#242424 |
| border |
none |
| radius |
0px |
| padding |
20px 0 |
| font size |
16px |
| font weight |
400 |
| shadow |
none |
| hover |
link colour #242424 from #707071 |
Sticky and transparent over the grey canvas: wordmark left, centred links with small chevrons for dropdowns (Solutions, Developer, Resources), then 'Sign in' text link and a compact dark 'Get started ›' button on the right.
Layout
A 1280px column framed by faint vertical hairline guides running down the page, with small + crosshair marks where section dividers meet them. The home hero is a single large white 16px-radius panel inset on the #f4f4f4 canvas: a left text column (pill, 64px headline, muted lead, stacked full-width buttons) sits beside a live booking widget that bleeds off the panel's right edge, with review badges below. Later sections centre a pill, 48px headline, muted subline and a button pair, followed by 3-up or 2×2 card grids, a 4-column icon tile grid, a horizontal testimonial carousel, a masonry wall of social posts, an FAQ accordion, a logo strip and a 5-column footer. Pricing uses a 4-column card row with the third tier inverted to #242424. Docs follow a classic three-pane layout (left nav, 720px content, right 'On this page') on pure white in Inter.
Imagery
Almost no photography or illustration. The product itself is the imagery: booking widgets, calendar grids with grey day cells and a dark selected day, toggles, dropdowns and app-integration icon tiles, all in the same greys. Small circular avatars appear in testimonials. Third-party logos (Supabase, Udemy, Deel, Framer, Ramp) and review badges (Trustpilot green, Product Hunt orange, G2 red) are the only saturated colour. Blog hero art is a soft grid of embossed white tiles with the wordmark and a dark version chip.
Motion
Restrained. Buttons get quick colour shifts and the trailing chevron nudges on hover. Testimonial and logo strips scroll horizontally with edge fades. Dropdown menus and accordions open with short ease-out transitions. Framer-driven fade and slide-up reveals appear on scroll. Nothing bounces or spins.
Responsive
On phones the nav becomes a solid white 96px bar showing the wordmark, a 'Sign in' text link, the dark 'Get started ›' button and a hamburger. Tapping it opens a full-screen white sheet with a plain vertical list of ~20px links at wide spacing, with chevrons on the right for expandable groups and an × replacing the hamburger. The hero panel keeps its 16px radius and grey margin but stacks into one column: the headline stays huge (about 48px, wrapping to three lines), the lead paragraph wraps narrowly, and both sign-up buttons stay full width. The booking widget drops below the CTAs and still bleeds off the right edge. Card grids collapse to one column and section padding shrinks to around 64px.
Do
- Set every marketing headline in Cal Sans 600 at 1.1 line-height in #242424, and pair it with weight-300 body copy in #898989 for the heavy/light contrast.
- Place content in #ffffff cards with 16px radius on a #f4f4f4 canvas, using the two-part shadow (1px 5px -4px contact + 4px 8px diffuse).
- Give primary buttons a #242424 fill, an inset 2px white highlight at 15% opacity, and a trailing › chevron.
- Use real, interactive-looking product UI (calendars, toggles, duration pickers) as illustrations inside feature cards.
- Introduce each section with a small grey pill label above a centred headline, a muted subline and a dark + light button pair.
- Keep saturated colour to tiny accents: #0099ff discount tags and third-party logos or review stars.
- Add faint vertical guide lines and + crosshairs at section seams for a subtle blueprint frame.
Don't
- Don't introduce a brand hue for buttons or links; the system is graphite on grey and white.
- Don't use heavy or dark drop shadows, large blurs, or glassmorphism; elevation stays barely perceptible.
- Don't set body text at weight 400+ in the marketing face; the light 300 weight carries the airy feel.
- Don't add letter-spacing to Cal Sans headlines or loosen their 1.1 line-height.
- Don't use sharp corners or pill-shaped primary buttons; buttons are 8px, cards 16px, and only small badges are fully rounded.
- Don't fill sections with stock photos or colourful illustrations; let the monochrome product UI do the work.
- Don't place white cards directly on white; keep the #f4f4f4 canvas, or add the 1px rgba(34,42,53,0.08) ring.
Agent prompt
Build a light, monochrome SaaS marketing page in the Cal.com style. Use a #f4f4f4 page canvas with a 1280px container framed by faint #e1e2e3 vertical hairlines, and #ffffff cards with 16px radius (12px for inner panels, 8px for buttons and cells) and shadow 'rgba(36,36,36,0.7) 0 1px 5px -4px, rgba(36,36,36,0.05) 0 4px 8px'. Set headlines in Cal Sans 600 (64px hero, 48px sections, 32px prices, line-height 1.1, normal tracking, #242424). Set body and UI text in a light geometric sans (Cal Sans UI / Inter at weight 300), 16px/1.5, with muted copy in #898989, nav links in #707071, and default text in #292929. Primary buttons are #242424 with white text, a 1px #141414 border, inset 'rgba(255,255,255,0.15) 0 2px 0' highlight, 8px radius, 8px 16px padding, 14px text and a trailing › chevron. Secondary buttons are a pale grey #f7f7f7 gradient with a #e1e2e3 border and 'rgb(255,255,255) 0 2px 0 inset'. Put small rounded pills (9999px, #f7f7f7, 12px text) above centred section headlines. Illustrate with live-looking product UI: calendars with #f4f4f4 day cells and a #242424 selected day, and segmented pickers in an inset well with a white selected chip. Use colour only as a tiny accent (#0099ff on #eff6fe 'Save 25%' tags). Use a 4px spacing grid, 24px card padding, 16–24px grid gaps and 64–96px section spacing. Keep the tone calm, precise and friendly, with no gradients, heavy shadows or photography.
CSS custom properties
/* Cal.com — CSS custom properties. Generated from style.json */
:root {
/* Palette */
--color-canvas: #f4f4f4; /* Page background behind every marketing page; the canvas that white cards float on */
--color-surface: #ffffff; /* Hero panel, feature cards, pricing cards, testimonial cards, docs background */
--color-surface-subtle: #fcfcfc; /* Large quiet section fills and inner panels inside white cards */
--color-surface-sunken: #f7f7f7; /* Segmented control tracks, secondary button fills, calendar day cells */
--color-primary: #242424; /* Primary buttons, headline colour, inverted Organizations pricing card, selected calendar day */
--color-ink: #141414; /* Darkest borders on dark buttons and toggles, logo mark */
--color-text: #292929; /* Default body and label text on white */
--color-text-secondary: #3f3f3f; /* Secondary headings, list items, FAQ questions */
--color-text-muted: #898989; /* Lead paragraphs, descriptions, captions, 'No credit card required' */
--color-text-nav: #707071; /* Nav links, footer links, meta text */
--color-border: #e1e2e3; /* Card dividers, calendar grid separators, input and ghost-button borders, page guide lines */
--color-accent: #0099ff; /* Rare accent: 'Save 25%' discount tags and inline highlight text */
--color-accent-soft: #eff6fe; /* Background tint behind blue discount tags */
--color-accent-lilac: #e9ddfd; /* Occasional soft tint behind feature icons and pills */
/* Semantic roles */
--background: #f4f4f4;
--surface: #ffffff;
--surface-raised: #ffffff;
--border: #e1e2e3;
--text: #242424;
--text-muted: #898989;
--primary: #242424;
--primary-text: #ffffff;
--accent: #0099ff;
--success: #1ba673;
--warning: #c37d0d;
--danger: #d45656;
/* Typography */
--font-display: 'Cal Sans', Manrope, 'Plus Jakarta Sans', system-ui, sans-serif;
--font-body: 'Cal Sans UI Variable Light', Inter, 'DM Sans', system-ui, sans-serif;
--font-accent: Inter, system-ui, -apple-system, sans-serif;
--font-mono: 'Paper Mono', 'Roboto Mono', 'JetBrains Mono', ui-monospace, monospace;
--text-display: 64px;
--text-display--line-height: 1.1;
--text-display--letter-spacing: normal;
--text-display--font-weight: 600;
--text-h2: 48px;
--text-h2--line-height: 1.1;
--text-h2--letter-spacing: normal;
--text-h2--font-weight: 600;
--text-h3-price: 32px;
--text-h3-price--line-height: 1.2;
--text-h3-price--letter-spacing: normal;
--text-h3-price--font-weight: 600;
--text-quote-card-headline: 24px;
--text-quote-card-headline--line-height: 1.3;
--text-quote-card-headline--letter-spacing: normal;
--text-quote-card-headline--font-weight: 600;
--text-feature-title: 18px;
--text-feature-title--line-height: 1.3;
--text-feature-title--letter-spacing: -0.2px;
--text-feature-title--font-weight: 300;
--text-lead: 18px;
--text-lead--line-height: 1.5;
--text-lead--letter-spacing: normal;
--text-lead--font-weight: 300;
--text-body: 16px;
--text-body--line-height: 1.5;
--text-body--letter-spacing: normal;
--text-body--font-weight: 300;
--text-small-button: 14px;
--text-small-button--line-height: 1.4;
--text-small-button--letter-spacing: normal;
--text-small-button--font-weight: 400;
--text-mono: 16px;
--text-mono--line-height: 1.5;
--text-mono--letter-spacing: normal;
--text-mono--font-weight: 400;
/* Spacing */
--space-1: 2px;
--space-2: 4px;
--space-3: 8px;
--space-4: 10px;
--space-5: 12px;
--space-6: 16px;
--space-7: 20px;
--space-8: 24px;
--space-9: 32px;
--space-10: 48px;
--space-11: 64px;
--space-12: 96px;
--container: 1280px;
--section-gap: 96px;
/* Radius */
--radius-hero-panel-feature-and-pricing-cards: 16px;
--radius-inner-panels-inputs-booking-widget-testimonial-cards: 12px;
--radius-buttons-calendar-day-cells-segmented-controls: 8px;
--radius-small-chips-tags-icon-tiles: 4px;
--radius-announcement-pills-and-toggles: 9999px;
--radius-avatars: 100%;
/* Shadows */
--shadow-card-lift: rgba(36, 36, 36, 0.7) 0px 1px 5px -4px, rgba(36, 36, 36, 0.05) 0px 4px 8px 0px;
--shadow-card-lift-ring: rgba(19, 19, 22, 0.7) 0px 1px 5px -4px, rgba(34, 42, 53, 0.08) 0px 0px 0px 1px, rgba(34, 42, 53, 0.05) 0px 4px 8px 0px;
--shadow-dark-button-gloss: rgba(255, 255, 255, 0.15) 0px 2px 0px 0px inset;
--shadow-light-button-bevel: rgb(255, 255, 255) 0px 2px 0px 0px inset;
--shadow-pressed-well: rgba(0, 0, 0, 0.16) 0px 1px 1.9px 0px inset;
}
Tailwind v4 theme
/* Cal.com — Tailwind CSS v4 theme. Import after tailwindcss: @import "tailwindcss"; then paste this block. */
@theme {
--color-canvas: #f4f4f4;
--color-surface: #ffffff;
--color-surface-subtle: #fcfcfc;
--color-surface-sunken: #f7f7f7;
--color-primary: #242424;
--color-ink: #141414;
--color-text: #292929;
--color-text-secondary: #3f3f3f;
--color-text-muted: #898989;
--color-text-nav: #707071;
--color-border: #e1e2e3;
--color-accent: #0099ff;
--color-accent-soft: #eff6fe;
--color-accent-lilac: #e9ddfd;
--color-background: #f4f4f4;
--color-surface: #ffffff;
--color-surface-raised: #ffffff;
--color-border: #e1e2e3;
--color-text: #242424;
--color-text-muted: #898989;
--color-primary: #242424;
--color-primary-text: #ffffff;
--color-accent: #0099ff;
--color-success: #1ba673;
--color-warning: #c37d0d;
--color-danger: #d45656;
--font-display: 'Cal Sans', Manrope, 'Plus Jakarta Sans', system-ui, sans-serif;
--font-body: 'Cal Sans UI Variable Light', Inter, 'DM Sans', system-ui, sans-serif;
--font-accent: Inter, system-ui, -apple-system, sans-serif;
--font-mono: 'Paper Mono', 'Roboto Mono', 'JetBrains Mono', ui-monospace, monospace;
--text-display: 64px;
--text-display--line-height: 1.1;
--text-display--letter-spacing: normal;
--text-display--font-weight: 600;
--text-h2: 48px;
--text-h2--line-height: 1.1;
--text-h2--letter-spacing: normal;
--text-h2--font-weight: 600;
--text-h3-price: 32px;
--text-h3-price--line-height: 1.2;
--text-h3-price--letter-spacing: normal;
--text-h3-price--font-weight: 600;
--text-quote-card-headline: 24px;
--text-quote-card-headline--line-height: 1.3;
--text-quote-card-headline--letter-spacing: normal;
--text-quote-card-headline--font-weight: 600;
--text-feature-title: 18px;
--text-feature-title--line-height: 1.3;
--text-feature-title--letter-spacing: -0.2px;
--text-feature-title--font-weight: 300;
--text-lead: 18px;
--text-lead--line-height: 1.5;
--text-lead--letter-spacing: normal;
--text-lead--font-weight: 300;
--text-body: 16px;
--text-body--line-height: 1.5;
--text-body--letter-spacing: normal;
--text-body--font-weight: 300;
--text-small-button: 14px;
--text-small-button--line-height: 1.4;
--text-small-button--letter-spacing: normal;
--text-small-button--font-weight: 400;
--text-mono: 16px;
--text-mono--line-height: 1.5;
--text-mono--letter-spacing: normal;
--text-mono--font-weight: 400;
--radius-hero-panel-feature-and-pricing-cards: 16px;
--radius-inner-panels-inputs-booking-widget-testimonial-cards: 12px;
--radius-buttons-calendar-day-cells-segmented-controls: 8px;
--radius-small-chips-tags-icon-tiles: 4px;
--radius-announcement-pills-and-toggles: 9999px;
--radius-avatars: 100%;
--shadow-card-lift: rgba(36, 36, 36, 0.7) 0px 1px 5px -4px, rgba(36, 36, 36, 0.05) 0px 4px 8px 0px;
--shadow-card-lift-ring: rgba(19, 19, 22, 0.7) 0px 1px 5px -4px, rgba(34, 42, 53, 0.08) 0px 0px 0px 1px, rgba(34, 42, 53, 0.05) 0px 4px 8px 0px;
--shadow-dark-button-gloss: rgba(255, 255, 255, 0.15) 0px 2px 0px 0px inset;
--shadow-light-button-bevel: rgb(255, 255, 255) 0px 2px 0px 0px inset;
--shadow-pressed-well: rgba(0, 0, 0, 0.16) 0px 1px 1.9px 0px inset;
--container-site: 1280px;
}
Cal.com — Style Reference
graphite calendar on paper white
Theme: light · Mood: light, minimal, monochrome, precise, friendly, typographic
A calm, monochrome product site that feels like a good paper planner: pale grey canvas, bright white cards, and heavy, tightly set geometric headlines that sound confident without shouting. The most distinctive thing is the contrast between the dense, chunky Cal Sans display type and very light (300) body copy, so pages look punchy yet airy. Actual product UI, such as booking widgets, calendars and toggles, stands in for illustration.
Tokens — Colors
| Name |
Value |
Token |
Role |
| Paper Grey |
#f4f4f4 |
--color-canvas |
Page background behind every marketing page; the canvas that white cards float on |
| Card White |
#ffffff |
--color-surface |
Hero panel, feature cards, pricing cards, testimonial cards, docs background |
| Mist |
#fcfcfc |
--color-surface-subtle |
Large quiet section fills and inner panels inside white cards |
| Soft Fog |
#f7f7f7 |
--color-surface-sunken |
Segmented control tracks, secondary button fills, calendar day cells |
| Graphite |
#242424 |
--color-primary |
Primary buttons, headline colour, inverted Organizations pricing card, selected calendar day |
| Ink |
#141414 |
--color-ink |
Darkest borders on dark buttons and toggles, logo mark |
| Charcoal |
#292929 |
--color-text |
Default body and label text on white |
| Slate |
#3f3f3f |
--color-text-secondary |
Secondary headings, list items, FAQ questions |
| Pebble |
#898989 |
--color-text-muted |
Lead paragraphs, descriptions, captions, 'No credit card required' |
| Nickel |
#707071 |
--color-text-nav |
Nav links, footer links, meta text |
| Hairline |
#e1e2e3 |
--color-border |
Card dividers, calendar grid separators, input and ghost-button borders, page guide lines |
| Signal Blue |
#0099ff |
--color-accent |
Rare accent: 'Save 25%' discount tags and inline highlight text |
| Ice Blue |
#eff6fe |
--color-accent-soft |
Background tint behind blue discount tags |
| Lilac Wash |
#e9ddfd |
--color-accent-lilac |
Occasional soft tint behind feature icons and pills |
Tokens — Typography
- Display: Cal Sans (Manrope, Plus Jakarta Sans, system-ui, sans-serif) — weights 400/600/900
- Body: Cal Sans UI Variable Light (Inter, DM Sans, system-ui, sans-serif) — weights 300
- Accent: Inter (system-ui, -apple-system, sans-serif) — weights 400/500/600
- Mono: Paper Mono (Roboto Mono, JetBrains Mono, ui-monospace, monospace) — weights 400/500
Tokens — Radius
| Element |
Value |
| Hero panel, feature and pricing cards |
16px |
| Inner panels, inputs, booking widget, testimonial cards |
12px |
| Buttons, calendar day cells, segmented controls |
8px |
| Small chips, tags, icon tiles |
4px |
| Announcement pills and toggles |
9999px |
| Avatars |
100% |
Do
- Set every marketing headline in Cal Sans 600 at 1.1 line-height in #242424, and pair it with weight-300 body copy in #898989 for the heavy/light contrast.
- Place content in #ffffff cards with 16px radius on a #f4f4f4 canvas, using the two-part shadow (1px 5px -4px contact + 4px 8px diffuse).
- Give primary buttons a #242424 fill, an inset 2px white highlight at 15% opacity, and a trailing › chevron.
- Use real, interactive-looking product UI (calendars, toggles, duration pickers) as illustrations inside feature cards.
- Introduce each section with a small grey pill label above a centred headline, a muted subline and a dark + light button pair.
- Keep saturated colour to tiny accents: #0099ff discount tags and third-party logos or review stars.
- Add faint vertical guide lines and + crosshairs at section seams for a subtle blueprint frame.
Don't
- Don't introduce a brand hue for buttons or links; the system is graphite on grey and white.
- Don't use heavy or dark drop shadows, large blurs, or glassmorphism; elevation stays barely perceptible.
- Don't set body text at weight 400+ in the marketing face; the light 300 weight carries the airy feel.
- Don't add letter-spacing to Cal Sans headlines or loosen their 1.1 line-height.
- Don't use sharp corners or pill-shaped primary buttons; buttons are 8px, cards 16px, and only small badges are fully rounded.
- Don't fill sections with stock photos or colourful illustrations; let the monochrome product UI do the work.
- Don't place white cards directly on white; keep the #f4f4f4 canvas, or add the 1px rgba(34,42,53,0.08) ring.
{
"$name": "Cal.com",
"$source": "https://cal.com",
"$theme": "light",
"$generated": "inspiration library",
"color": {
"canvas": {
"$type": "color",
"$value": "#f4f4f4",
"$description": "Page background behind every marketing page; the canvas that white cards float on"
},
"surface": {
"$type": "color",
"$value": "#ffffff",
"$description": "Hero panel, feature cards, pricing cards, testimonial cards, docs background"
},
"surface-subtle": {
"$type": "color",
"$value": "#fcfcfc",
"$description": "Large quiet section fills and inner panels inside white cards"
},
"surface-sunken": {
"$type": "color",
"$value": "#f7f7f7",
"$description": "Segmented control tracks, secondary button fills, calendar day cells"
},
"primary": {
"$type": "color",
"$value": "#242424",
"$description": "Primary buttons, headline colour, inverted Organizations pricing card, selected calendar day"
},
"ink": {
"$type": "color",
"$value": "#141414",
"$description": "Darkest borders on dark buttons and toggles, logo mark"
},
"text": {
"$type": "color",
"$value": "#292929",
"$description": "Default body and label text on white"
},
"text-secondary": {
"$type": "color",
"$value": "#3f3f3f",
"$description": "Secondary headings, list items, FAQ questions"
},
"text-muted": {
"$type": "color",
"$value": "#898989",
"$description": "Lead paragraphs, descriptions, captions, 'No credit card required'"
},
"text-nav": {
"$type": "color",
"$value": "#707071",
"$description": "Nav links, footer links, meta text"
},
"border": {
"$type": "color",
"$value": "#e1e2e3",
"$description": "Card dividers, calendar grid separators, input and ghost-button borders, page guide lines"
},
"accent": {
"$type": "color",
"$value": "#0099ff",
"$description": "Rare accent: 'Save 25%' discount tags and inline highlight text"
},
"accent-soft": {
"$type": "color",
"$value": "#eff6fe",
"$description": "Background tint behind blue discount tags"
},
"accent-lilac": {
"$type": "color",
"$value": "#e9ddfd",
"$description": "Occasional soft tint behind feature icons and pills"
}
},
"role": {
"background": {
"$type": "color",
"$value": "#f4f4f4"
},
"surface": {
"$type": "color",
"$value": "#ffffff"
},
"surface_raised": {
"$type": "color",
"$value": "#ffffff"
},
"border": {
"$type": "color",
"$value": "#e1e2e3"
},
"text": {
"$type": "color",
"$value": "#242424"
},
"text_muted": {
"$type": "color",
"$value": "#898989"
},
"primary": {
"$type": "color",
"$value": "#242424"
},
"primary_text": {
"$type": "color",
"$value": "#ffffff"
},
"accent": {
"$type": "color",
"$value": "#0099ff"
},
"success": {
"$type": "color",
"$value": "#1ba673"
},
"warning": {
"$type": "color",
"$value": "#c37d0d"
},
"danger": {
"$type": "color",
"$value": "#d45656"
}
},
"fontFamily": {
"display": {
"$type": "fontFamily",
"$value": [
"Cal Sans",
"Manrope",
"Plus Jakarta Sans",
"system-ui",
"sans-serif"
],
"$description": "Chunky geometric grotesk used for all marketing headlines (h1 64px, h2 48px), prices and pull-quotes. Letter-spacing stays normal because the face is already tightly fitted. Use 1.1 line-height so headlines read as solid blocks."
},
"body": {
"$type": "fontFamily",
"$value": [
"Cal Sans UI Variable Light",
"Inter",
"DM Sans",
"system-ui",
"sans-serif"
],
"$description": "Workhorse text face at weight 300 for paragraphs, nav, links, card titles and UI labels. Card titles at 18px use -0.2px tracking. Its thin weight against the heavy display face is the signature contrast. Docs switch to Inter 400/500/600, and blog prose uses Matter Regular."
},
"accent": {
"$type": "fontFamily",
"$value": [
"Inter",
"system-ui",
"-apple-system",
"sans-serif"
],
"$description": "Docs site only: h1 36px/600 with -0.9px tracking, h2 24px/600 with -0.6px, body 16px/1.75. Primary colour there is #111827 / #171717."
},
"mono": {
"$type": "fontFamily",
"$value": [
"Paper Mono",
"Roboto Mono",
"JetBrains Mono",
"ui-monospace",
"monospace"
],
"$description": "Inline code and event constants such as BOOKING_REASSIGNED at 16px/1.5. Tiny uppercase micro-labels (e.g. 'YEARLY') also use it."
}
},
"typography": {
"display": {
"$type": "typography",
"$value": {
"fontFamily": "{fontFamily.display}",
"fontSize": "64px",
"lineHeight": "1.1",
"fontWeight": 600,
"letterSpacing": "normal"
}
},
"h2": {
"$type": "typography",
"$value": {
"fontFamily": "{fontFamily.display}",
"fontSize": "48px",
"lineHeight": "1.1",
"fontWeight": 600,
"letterSpacing": "normal"
}
},
"h3-price": {
"$type": "typography",
"$value": {
"fontFamily": "{fontFamily.display}",
"fontSize": "32px",
"lineHeight": "1.2",
"fontWeight": 600,
"letterSpacing": "normal"
}
},
"quote-card-headline": {
"$type": "typography",
"$value": {
"fontFamily": "{fontFamily.display}",
"fontSize": "24px",
"lineHeight": "1.3",
"fontWeight": 600,
"letterSpacing": "normal"
}
},
"feature-title": {
"$type": "typography",
"$value": {
"fontFamily": "{fontFamily.body}",
"fontSize": "18px",
"lineHeight": "1.3",
"fontWeight": 300,
"letterSpacing": "-0.2px"
}
},
"lead": {
"$type": "typography",
"$value": {
"fontFamily": "{fontFamily.body}",
"fontSize": "18px",
"lineHeight": "1.5",
"fontWeight": 300,
"letterSpacing": "normal"
}
},
"body": {
"$type": "typography",
"$value": {
"fontFamily": "{fontFamily.body}",
"fontSize": "16px",
"lineHeight": "1.5",
"fontWeight": 300,
"letterSpacing": "normal"
}
},
"small-button": {
"$type": "typography",
"$value": {
"fontFamily": "{fontFamily.body}",
"fontSize": "14px",
"lineHeight": "1.4",
"fontWeight": 400,
"letterSpacing": "normal"
}
},
"mono": {
"$type": "typography",
"$value": {
"fontFamily": "{fontFamily.mono}",
"fontSize": "16px",
"lineHeight": "1.5",
"fontWeight": 400,
"letterSpacing": "normal"
}
}
},
"spacing": {
"1": {
"$type": "dimension",
"$value": "2px"
},
"2": {
"$type": "dimension",
"$value": "4px"
},
"3": {
"$type": "dimension",
"$value": "8px"
},
"4": {
"$type": "dimension",
"$value": "10px"
},
"5": {
"$type": "dimension",
"$value": "12px"
},
"6": {
"$type": "dimension",
"$value": "16px"
},
"7": {
"$type": "dimension",
"$value": "20px"
},
"8": {
"$type": "dimension",
"$value": "24px"
},
"9": {
"$type": "dimension",
"$value": "32px"
},
"10": {
"$type": "dimension",
"$value": "48px"
},
"11": {
"$type": "dimension",
"$value": "64px"
},
"12": {
"$type": "dimension",
"$value": "96px"
}
},
"radius": {
"hero-panel-feature-and-pricing-cards": {
"$type": "dimension",
"$value": "16px"
},
"inner-panels-inputs-booking-widget-testimonial-cards": {
"$type": "dimension",
"$value": "12px"
},
"buttons-calendar-day-cells-segmented-controls": {
"$type": "dimension",
"$value": "8px"
},
"small-chips-tags-icon-tiles": {
"$type": "dimension",
"$value": "4px"
},
"announcement-pills-and-toggles": {
"$type": "dimension",
"$value": "9999px"
},
"avatars": {
"$type": "dimension",
"$value": "100%"
}
},
"shadow": {
"card-lift": {
"$type": "shadow",
"$value": "rgba(36, 36, 36, 0.7) 0px 1px 5px -4px, rgba(36, 36, 36, 0.05) 0px 4px 8px 0px",
"$description": "Default white cards and the hero panel: a crisp contact edge plus a faint diffuse halo, never a heavy drop"
},
"card-lift-ring": {
"$type": "shadow",
"$value": "rgba(19, 19, 22, 0.7) 0px 1px 5px -4px, rgba(34, 42, 53, 0.08) 0px 0px 0px 1px, rgba(34, 42, 53, 0.05) 0px 4px 8px 0px",
"$description": "Larger feature cards that need a 1px ring to separate from white-on-white contexts"
},
"dark-button-gloss": {
"$type": "shadow",
"$value": "rgba(255, 255, 255, 0.15) 0px 2px 0px 0px inset",
"$description": "Inner top highlight on #242424 primary buttons, giving a slightly bevelled key feel"
},
"light-button-bevel": {
"$type": "shadow",
"$value": "rgb(255, 255, 255) 0px 2px 0px 0px inset",
"$description": "Inner top highlight on pale grey secondary buttons and segmented options"
},
"pressed-well": {
"$type": "shadow",
"$value": "rgba(0, 0, 0, 0.16) 0px 1px 1.9px 0px inset",
"$description": "Recessed tracks for toggles, segmented duration pickers and inputs"
}
},
"component": {
"primary-button": {
"kind": "button",
"background": "#242424",
"color": "#ffffff",
"border": "1px solid #141414",
"radius": "8px",
"padding": "8px 12px 8px 16px",
"font_size": "14px",
"font_weight": 400,
"shadow": "rgba(255, 255, 255, 0.15) 0px 2px 0px 0px inset",
"hover": "background #3f3f3f; chevron nudges 2px right",
"notes": "Always ends with a small › chevron in muted white. In the hero it runs full width (≈466px) with a Google 'G' icon on the left. On the inverted dark pricing card it flips to a white fill with #242424 text."
},
"secondary-button": {
"kind": "button",
"background": "linear-gradient(#f7f7f7, #ededed)",
"color": "#242424",
"border": "1px solid #e1e2e3",
"radius": "8px",
"padding": "8px 16px",
"font_size": "14px",
"font_weight": 400,
"shadow": "rgb(255, 255, 255) 0px 2px 0px 0px inset",
"hover": "background #f4f4f4; border #d3d3d3",
"notes": "Soft grey key with a trailing chevron, e.g. 'Sign up with email', 'Book a demo'. On grey sections a white-fill variant ('See feature breakdown') uses the same border."
},
"announcement-pill": {
"kind": "badge",
"background": "#f7f7f7",
"color": "#242424",
"border": "1px solid #e1e2e3",
"radius": "9999px",
"padding": "4px 10px",
"font_size": "12px",
"font_weight": 400,
"shadow": "rgba(0, 0, 0, 0.05) 0px 1px 2px 0px",
"hover": "background #ffffff",
"notes": "Sits above hero and section headlines ('Cal.com launches v6.8 ›', 'Pricing', 'How it works') with a tiny leading icon or trailing chevron."
},
"discount-tag": {
"kind": "badge",
"background": "#eff6fe",
"color": "#0099ff",
"border": "none",
"radius": "4px",
"padding": "2px 4px",
"font_size": "10px",
"font_weight": 400,
"shadow": "none",
"hover": "none",
"notes": "The only real use of saturated colour on marketing pages ('Save 25%'), placed next to prices."
},
"feature-card": {
"kind": "card",
"background": "#ffffff",
"color": "#242424",
"border": "none",
"radius": "16px",
"padding": "24px",
"font_size": "16px",
"font_weight": 300,
"shadow": "rgba(36, 36, 36, 0.7) 0px 1px 5px -4px, rgba(36, 36, 36, 0.05) 0px 4px 8px 0px",
"hover": "none",
"notes": "18px/300 title, #898989 description, then an embedded mini product UI (toggles, dropdowns, calendar) as the visual. Arranged in 3-up or 2×2 grids with 16–24px gaps. A #242424 inverted variant is used for the highlighted pricing tier."
},
"segmented-duration-picker": {
"kind": "other",
"background": "#f4f4f4",
"color": "#898989",
"border": "none",
"radius": "8px",
"padding": "2px",
"font_size": "14px",
"font_weight": 300,
"shadow": "rgba(0, 0, 0, 0.16) 0px 1px 1.9px 0px inset",
"hover": "text #242424",
"notes": "Options 15m/30m/45m/1h; the selected option is a white 6px-radius chip with rgba(34, 42, 53, 0.05) 0px 4px 8px lift and #242424 text."
},
"input": {
"kind": "input",
"background": "#ffffff",
"color": "#171717",
"border": "1px solid #e1e2e3",
"radius": "12px",
"padding": "10px 14px",
"font_size": "14px",
"font_weight": 400,
"shadow": "rgba(0, 0, 0, 0.05) 0px 1px 2px 0px",
"hover": "border #d3d3d3; focus ring 0 0 0 1px rgba(112,112,113,0.3)",
"notes": "Docs 'Ask a question…' bar (60px tall with a round grey send button) and search field with ⌘K hint. Placeholder is #898989."
},
"top-navigation": {
"kind": "nav",
"background": "transparent",
"color": "#242424",
"border": "none",
"radius": "0px",
"padding": "20px 0",
"font_size": "16px",
"font_weight": 400,
"shadow": "none",
"hover": "link colour #242424 from #707071",
"notes": "Sticky and transparent over the grey canvas: wordmark left, centred links with small chevrons for dropdowns (Solutions, Developer, Resources), then 'Sign in' text link and a compact dark 'Get started ›' button on the right."
}
}
}