taste-skill / Style guides / Notion style

How to build a UI in the Notion style

Notion (notion.so) reads as Warm Workspace Canvas & Monumental NotionInter Display — Crisp #FFFFFF & warm stone #F6F5F4 workspace surfaces with rgba(0,0,0,0.1) hairlines, monumental 96px NotionInter headlines (-0.048em tracking), and #0075DE cobalt + #FFB110 amber accents. This guide turns its extracted computed styles into an implementation kit: a live preview, the exact palette and type scale, real button and card recipes, the rules to avoid, and drop-in CSS variables, Tailwind config and a Cursor / Claude Code SKILL.md snippet.

Source: computed styles extracted from https://www.notion.so on 2026-10-26 by the taste-skill extractor. Brand fonts may be proprietary; previews fall back to Inter / system fonts. Notion is a trademark of its owner; this page documents publicly visible styling for reference and is not affiliated with Notion.

Live preview with Notion tokens

Notion style · light
Ship the product, not the pixels.
Preview text rendered with the extracted Notion canvas, text, muted and accent tokens.
Get Notion free Get Notion free
Card on extracted card recipe
Accent link: #0075DE · border rgba(0, 0, 0, 0.1)

Color palette (light mode)

RoleValueTailwindUsage
canvasBg#FFFFFFbg-whitePrimary Notion page canvas
surfaceElevated#F6F5F4bg-[#F6F5F4]Primary elevated card & bento surface
surfaceSecondary#F9F9F8bg-[#F9F9F8]Secondary interactive container / hover fill
borderPrimaryrgba(0, 0, 0, 0.1)border-black/[0.1]Primary structural divider (1px rgba(0,0,0,0.1))
borderSecondaryrgba(0, 0, 0, 0.1)border-black/[0.1]Secondary nested module or pill border
textPrimary#000000text-blackHero H1, section H2 & high-contrast foreground
textMuted#615D59text-[#615D59]Lead paragraphs, descriptions & muted labels
accentPrimary#0075DEbg-[#0075DE]Primary interactive CTA & brand highlight (8px)
accentSecondary#005BABtext-[#005BAB]Secondary badge, syntax or telemetry highlight

Typography

Heading NotionInter · body NotionInter · mono SFMono-Regular

LevelComputed spec
Hero H196px | line-height 100px (leading-[1.04]) | letter-spacing -4.6px (tracking-[-0.048em]) | weight 600 (font-[600]) | color rgba(0, 0, 0, 0.95) (text-[rgba(0,0,0,0.95)]) | font NotionInter
Section H2 (Primary)54px | line-height 56px (leading-[1.04]) | letter-spacing -1.88px (tracking-[-0.035em]) | weight 700 (font-[700]) | color rgba(0, 0, 0, 0.95) (text-[rgba(0,0,0,0.95)]) | font NotionInter
Card / Feature H316px | line-height 24px (leading-[1.5]) | letter-spacing 0px (tracking-[0em]) | weight 700 (font-[700]) | color #000000 (text-black) | font NotionInter
Body Copy (Paragraph)20px | line-height 28px (leading-[1.4]) | letter-spacing -0.12px (tracking-[-0.006em]) | weight 400 (font-[400]) | color rgba(0, 0, 0, 0.9) (text-[rgba(0,0,0,0.9)]) | font NotionInter
Monospace / Code Block13px–14px | line-height 1.5 (leading-relaxed) | font monospace

Spacing, radius, depth and motion

Token familyMost frequent values (count on page)
Border radius8px ×52 · 4px ×20 · 12px ×17 · 12px 12px 0px 0px ×2 · 12px 0px 0px ×2
Box shadowrgba(0, 0, 0, 0.01) 0px 0.175px 1.041px 0px, rgba(0, 0, 0, 0.02) 0px 0.8px 2.925px 0px, rgba(0, 0, 0, 0.027) 0px 2.025px 7.847px 0px, rgba(0, 0, 0, 0.04) 0px 4px 18px 0px ×4 · rgba(0, 0, 0, 0.1) 0px 1px 0px 0px ×1 · rgba(0, 0, 0, 0.008) 0px 0.667px 3.502px 0px, rgba(0, 0, 0, 0.016) 0px 2.933px 7.252px 0px, rgba(0, 0, 0, 0.02) 0px 7.2px 14.462px 0px, rgba(0, 0, 0, 0.024) 0px 13.867px 28.348px 0px, rgba(0, 0, 0, 0.03) 0px 23.333px 52.123px 0px, rgba(0, 0, 0, 0.04) 0px 36px 89px 0px ×1
Grid / flex gap8px ×44 · 0px 8px ×23 · 12px ×22 · 16px ×12 · 24px ×4 · 8px normal ×3
Container max-width1184px ×2 · 1252px ×2 · 891.925px ×2 · 1380px ×1
Section vertical padding96px / 96px ×2 · 64px / 64px ×1
Easingcubic-bezier(0.42, 0, 1, 1) ×65 · ease ×7 · cubic-bezier(0.645, 0.045, 0.355, 1) ×6
Duration0.2s ×72 · 0.15s ×5 · 0.3s ×3

Component recipes

Buttons (5 distinct)

RenderedHeightPaddingRadiusBackground / TextBorderFont
Get Notion free36px4px 14px8px#0075DE
#FFFFFF
none16px / 500
Get Notion free38px6px 15px8px#0075DE
#FFFFFF
none16px / 500
Request a demo38px6px 15px8px#E6F3FE
#005BAB
none16px / 500
Request a demo38px6px 15px8px#FFFFFF
#097FE8
none16px / 500
English (US)38px8px 16px9999px#FFFFFF
rgba(0, 0, 0, 0.95)
1px solid rgba(0, 0, 0, 0.1)14px / 500

Cards (4 distinct)

#BackgroundBorderRadiusPaddingShadow
1transparent1px solid rgba(0, 0, 0, 0.1)8px0px 0pxrgba(0, 0, 0, 0.008) 0px 0.667px 3.502px 0px, rgba(0, 0, 0, 0.016) 0px 2.933px 7.252px 0px, rgba(0, 0, 0, 0.02) 0px 7.2px 14.462px 0px, rgba(0, 0, 0, 0.024) 0px 13.867px 28.348px 0px, rgba(0, 0, 0, 0.03) 0px 23.333px 52.123px 0px, rgba(0, 0, 0, 0.04) 0px 36px 89px 0px
2transparentnone12px 12px 0px 0px0px 0pxrgba(0, 0, 0, 0.01) 0px 0.175px 1.041px 0px, rgba(0, 0, 0, 0.02) 0px 0.8px 2.925px 0px, rgba(0, 0, 0, 0.027) 0px 2.025px 7.847px 0px, rgba(0, 0, 0, 0.04) 0px 4px 18px 0px
3transparentnone12px 0px 0px0px 0pxrgba(0, 0, 0, 0.01) 0px 0.175px 1.041px 0px, rgba(0, 0, 0, 0.02) 0px 0.8px 2.925px 0px, rgba(0, 0, 0, 0.027) 0px 2.025px 7.847px 0px, rgba(0, 0, 0, 0.04) 0px 4px 18px 0px
4#FFFFFF1px solid rgba(0, 0, 0, 0.1)12px24px 24pxnone

Rules: what never to do in the Notion style

Copy-paste kit

CSS variables
:root {
  /* Notion style — extracted from notion.so by taste-skill */
  --canvas: #FFFFFF;
  --surface: #F6F5F4;
  --text: #000000;
  --text-muted: #615D59;
  --accent: #0075DE;
  --border: rgba(0, 0, 0, 0.1);
  --font-heading: NotionInter, Inter, system-ui, -apple-system, sans-serif;
  --font-body: NotionInter, Inter, system-ui, -apple-system, sans-serif;
  --font-mono: 'SFMono-Regular', 'JetBrains Mono', ui-monospace, monospace;
  --h1-size: 96px;
  --h1-tracking: -0.048em;
  --h1-weight: 600;
  --radius-button: 8px;
  --radius-common: 8px;
  --shadow-common: rgba(0, 0, 0, 0.01) 0px 0.175px 1.041px 0px, rgba(0, 0, 0, 0.02) 0px 0.8px 2.925px 0px, rgba(0, 0, 0, 0.027) 0px 2.025px 7.847px 0px, rgba(0, 0, 0, 0.04) 0px 4px 18px 0px;
  --ease: cubic-bezier(0.42, 0, 1, 1);
  --duration: 0.2s;
}
tailwind.config.js
// tailwind.config.js — Notion style tokens (taste-skill)
module.exports = {
  theme: {
    extend: {
      colors: {
        canvas: "#FFFFFF",
        surface: "#F6F5F4",
        ink: "#000000",
        muted: "#615D59",
        accent: "#0075DE",
        line: "rgba(0, 0, 0, 0.1)",
      },
      fontFamily: {
        heading: ["NotionInter", 'Inter', 'system-ui', 'sans-serif'],
        sans: ["NotionInter", 'Inter', 'system-ui', 'sans-serif'],
        mono: ["SFMono-Regular", 'ui-monospace', 'monospace'],
      },
      fontSize: { display: ["96px", { letterSpacing: "-0.048em", fontWeight: "600" }] },
      borderRadius: { button: "8px", card: "8px" },
      boxShadow: { brand: "rgba(0, 0, 0, 0.01) 0px 0.175px 1.041px 0px, rgba(0, 0, 0, 0.02) 0px 0.8px 2.925px 0px, rgba(0, 0, 0, 0.027) 0px 2.025px 7.847px 0px, rgba(0, 0, 0, 0.04) 0px 4px 18px 0px" },
      transitionTimingFunction: { brand: "cubic-bezier(0.42, 0, 1, 1)" },
    },
  },
};
.cursor/skills/notion-style/SKILL.md
---
name: notion-style
description: Build UI in the Notion visual style (Warm Workspace Canvas & Monumental NotionInter Display). Use when the user asks for a Notion-like look.
---

# Notion Style — Quick Rules (source: notion.so, extracted by taste-skill)

## Tokens
- canvasBg: #FFFFFF — Primary Notion page canvas
- surfaceElevated: #F6F5F4 — Primary elevated card & bento surface
- surfaceSecondary: #F9F9F8 — Secondary interactive container / hover fill
- borderPrimary: rgba(0, 0, 0, 0.1) — Primary structural divider (1px rgba(0,0,0,0.1))
- borderSecondary: rgba(0, 0, 0, 0.1) — Secondary nested module or pill border
- textPrimary: #000000 — Hero H1, section H2 & high-contrast foreground
- textMuted: #615D59 — Lead paragraphs, descriptions & muted labels
- accentPrimary: #0075DE — Primary interactive CTA & brand highlight (8px)
- accentSecondary: #005BAB — Secondary badge, syntax or telemetry highlight

## Typography
- Heading font: NotionInter; body: NotionInter; mono: SFMono-Regular
- Hero H1: 96px | line-height 100px (leading-[1.04]) | letter-spacing -4.6px (tracking-[-0.048em]) | weight 600 (font-[600]) | color rgba(0, 0, 0, 0.95) (text-[rgba(0,0,0,0.95)]) | font NotionInter
- Section H2 (Primary): 54px | line-height 56px (leading-[1.04]) | letter-spacing -1.88px (tracking-[-0.035em]) | weight 700 (font-[700]) | color rgba(0, 0, 0, 0.95) (text-[rgba(0,0,0,0.95)]) | font NotionInter
- Card / Feature H3: 16px | line-height 24px (leading-[1.5]) | letter-spacing 0px (tracking-[0em]) | weight 700 (font-[700]) | color #000000 (text-black) | font NotionInter
- Body Copy (Paragraph): 20px | line-height 28px (leading-[1.4]) | letter-spacing -0.12px (tracking-[-0.006em]) | weight 400 (font-[400]) | color rgba(0, 0, 0, 0.9) (text-[rgba(0,0,0,0.9)]) | font NotionInter

## Components
- Primary button: height 36px, padding 4px 14px, radius 8px, bg #0075DE, text #FFFFFF, 16px / 500
- Card: bg transparent, border 1px solid rgba(0, 0, 0, 0.1), radius 8px, padding 0px 0px

## Never
- NEVER substitute generic uncalibrated gray backgrounds for Notion’s exact #FFFFFF canvas and #F6F5F4 surface pairing.
- NEVER replace NotionInter display typography or ignore its signature scale (96px / -0.048em (w600)).
- NEVER use thick opaque borders that clash with rgba(0, 0, 0, 0.1) (1px rgba(0,0,0,0.1)).
- NEVER deviate from the signature button geometry (8px) or introduce off-brand saturated gradients.
- NEVER use default browser monospace when rendering code or telemetry—always pair with SFMono-Regular.

Full 120-line spec: https://taste-skill.pages.dev/taste/notion/
Or install the full spec
npx taste-skill add notion

Related

Similar styles

Get all 30 full SKILL.md specs (Cursor / Claude Code / Codex ready) plus the Pro growth skills.

See taste-skill Pro →