taste-skill / Style guides / Linear style

How to build a UI in the Linear style

Linear (linear.app) reads as Dark Precision SaaS & Industrial Craftsmanship — Ultra-dark #08090A carbon canvas + 1px rgba(255,255,255,0.08) translucent hairlines + Inter Variable 510 weight (-0.022em) + Berkeley Mono telemetry. 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://linear.app on 2026-10-26 by the taste-skill extractor. Brand fonts may be proprietary; previews fall back to Inter / system fonts. Linear is a trademark of its owner; this page documents publicly visible styling for reference and is not affiliated with Linear.

Live preview with Linear tokens

Linear style · dark
Ship the product, not the pixels.
Preview text rendered with the extracted Linear canvas, text, muted and accent tokens.
Sign up Get started
Card on extracted card recipe
Accent link: #5E6AD2 · border rgba(255, 255, 255, 0.08)

Color palette (dark mode)

RoleValueTailwindUsage
canvasBg#08090Abg-[#08090A]Primary root & body background
surfaceLevel1#0F1011bg-[#0F1011]Primary workspace panels & bento cards
surfaceLevel2#141516bg-[#141516]Elevated cards & interactive containers
surfaceLevel3#191A1Bbg-[#191A1B]Nested modules, code blocks & hover surfaces
glassHeaderrgba(11, 11, 11, 0.8)bg-[#0B0B0B]/80 backdrop-blur-[20px]Sticky top navigation bar (--header-blur: 20px)
borderSubtlergba(255, 255, 255, 0.05)border-white/[0.05]Default subtle container & grid hairline
borderStrongrgba(255, 255, 255, 0.08)border-white/[0.08]Card borders, header bottom divider & code pills (159 DOM instances)
borderHighlightrgba(255, 255, 255, 0.12)border-white/[0.12]Focused/featured card border
textPrimary#F7F8F8text-[#F7F8F8]Hero H1, section H2 headlines & active UI labels
textSecondary#D0D6E0text-[#D0D6E0]H3 subheadings, code snippets & interactive controls
textMuted#8A8F98text-[#8A8F98]Body paragraphs, muted lead copy & secondary nav links
textQuaternary#62666Dtext-[#62666D]Metadata, timestamps, keyboard shortcuts & disabled states
accentInvertCta#E5E5E6bg-[#E5E5E6] text-[#08090A] hover:bg-whitePrimary high-contrast CTA button fill (--color-button-invert-bg-hover: #FFFFFF)
accentBrand#5E6AD2bg-[#5E6AD2] text-whiteCore Linear indigo brand accent & focus ring (#5E69D1)
accentElectric#7170FFtext-[#828FFF]Interactive links & active feature indicators
semanticStatusGreen #27A644 / Yellow #F0BF00 / Orange #FC7840 / Red #EB5757 / Blue #4EA7FCtext-[#27A644] / text-[#EB5757]Issue workflow status badges & telemetry indicators

Typography

Heading Inter Variable · body Inter Variable · mono Berkeley Mono

LevelComputed spec
Hero H164px | line-height 64px (leading-[1]) | letter-spacing -1.41px (tracking-[-0.022em]) | weight 510 (font-[510]) | color #F7F8F8 (text-[#F7F8F8]) | font Inter Variable
Section H2 (Primary)48px | line-height 48px (leading-[1]) | letter-spacing -1.06px (tracking-[-0.022em]) | weight 510 (font-[510]) | color #8A8F98 (text-[#8A8F98]) | font Inter Variable
Card / Feature H320px | line-height 26.6px (leading-[1.33]) | letter-spacing -0.24px (tracking-[-0.012em]) | weight 590 (font-[590]) | color #D0D6E0 (text-[#D0D6E0]) | font Inter Variable
Body Copy (Paragraph)15px | line-height 24px (leading-[1.6]) | letter-spacing -0.16px (tracking-[-0.011em]) | weight 400 (font-[400]) | color #8A8F98 (text-[#8A8F98]) | font Inter Variable
Monospace / Code Block12px | line-height 20px (leading-[1.67]) | letter-spacing -0.18px (tracking-[-0.015em]) | weight 400 (font-[400]) | color #D0D6E0 (text-[#D0D6E0]) | font Berkeley Mono

Spacing, radius, depth and motion

Token familyMost frequent values (count on page)
Border radius8px ×19 · 9px ×13 · 12px ×6 · 6px ×3 · 4px ×3 · 5px ×3
Box shadowrgba(255, 255, 255, 0.05) 0px 0px 0px 1px inset ×4 · rgba(0, 0, 0, 0.2) 0px 0px 0px 1px ×4 · rgba(0, 0, 0, 0) 0px 8px 2px 0px, rgba(0, 0, 0, 0.01) 0px 5px 2px 0px, rgba(0, 0, 0, 0.04) 0px 3px 2px 0px, rgba(0, 0, 0, 0.07) 0px 1px 1px 0px, rgba(0, 0, 0, 0.08) 0px 0px 1px 0px ×1
Grid / flex gap8px ×53 · 6px ×29 · 4px ×26 · 2px ×5 · 12px ×4 · 11px ×3
Container max-width1436px ×4 · 1416px ×1 · 1250px ×1
Section vertical padding0px / 48px ×1 · 128px / 128px ×1 · 0px / 96px ×1
Easingcubic-bezier(0.25, 0.46, 0.45, 0.94) ×16 · cubic-bezier(0.32, 0.72, 0, 1) ×10 · cubic-bezier(0.25, 0.46, 0.45, 0.94), cubic-bezier(0.25, 0.46, 0.45, 0.94) ×6
Duration0.7s ×10 · 0.1s ×8 · 0.16s ×7 · 0.16s, 0.16s ×6

Component recipes

Buttons (5 distinct)

RenderedHeightPaddingRadiusBackground / TextBorderFont
Sign up32px0px 12px9999px#E5E5E6
#08090A
1px solid #E5E5E613px / 510
Get started44px0px 20px9999px#E5E5E6
#08090A
1px solid #E5E5E616px / 510
Contact sales44px0px 20px9999pxrgba(255, 255, 255, 0.05)
#F7F8F8
none16px / 510
Faster app launch28px0px 7px8pxrgba(255, 255, 255, 0.04)
#D0D6E0
none13px / 510
Performance24px0px 11px16pxtransparent
#D0D6E0
1px solid #2E2E3212px / 400

Cards (3 distinct)

#BackgroundBorderRadiusPaddingShadow
1rgba(255, 255, 255, 0.01)1px solid rgba(255, 255, 255, 0.05)8px0px 0pxrgba(0, 0, 0, 0.2) 0px 0px 0px 2px
2#0F10111px solid rgba(255, 255, 255, 0.08)9px12px 16pxrgba(0, 0, 0, 0.2) 0px 0px 0px 1px
3#1617181px solid rgba(255, 255, 255, 0.12)12px0px 0pxrgba(0, 0, 0, 0.25) 0px 2px 32px 0px

Rules: what never to do in the Linear style

Copy-paste kit

CSS variables
:root {
  /* Linear style — extracted from linear.app by taste-skill */
  --canvas: #08090A;
  --surface: #0F1011;
  --text: #F7F8F8;
  --text-muted: #8A8F98;
  --accent: #5E6AD2;
  --border: rgba(255, 255, 255, 0.08);
  --font-heading: 'Inter Variable', Inter, system-ui, -apple-system, sans-serif;
  --font-body: 'Inter Variable', Inter, system-ui, -apple-system, sans-serif;
  --font-mono: 'Berkeley Mono', 'JetBrains Mono', ui-monospace, monospace;
  --h1-size: 64px;
  --h1-tracking: -0.022em;
  --h1-weight: 510;
  --radius-button: 9999px;
  --radius-common: 8px;
  --shadow-common: rgba(255, 255, 255, 0.05) 0px 0px 0px 1px inset;
  --ease: cubic-bezier(0.25, 0.46, 0.45, 0.94);
  --duration: 0.7s;
}
tailwind.config.js
// tailwind.config.js — Linear style tokens (taste-skill)
module.exports = {
  theme: {
    extend: {
      colors: {
        canvas: "#08090A",
        surface: "#0F1011",
        ink: "#F7F8F8",
        muted: "#8A8F98",
        accent: "#5E6AD2",
        line: "rgba(255, 255, 255, 0.08)",
      },
      fontFamily: {
        heading: ["Inter Variable", 'Inter', 'system-ui', 'sans-serif'],
        sans: ["Inter Variable", 'Inter', 'system-ui', 'sans-serif'],
        mono: ["Berkeley Mono", 'ui-monospace', 'monospace'],
      },
      fontSize: { display: ["64px", { letterSpacing: "-0.022em", fontWeight: "510" }] },
      borderRadius: { button: "9999px", card: "8px" },
      boxShadow: { brand: "rgba(255, 255, 255, 0.05) 0px 0px 0px 1px inset" },
      transitionTimingFunction: { brand: "cubic-bezier(0.25, 0.46, 0.45, 0.94)" },
    },
  },
};
.cursor/skills/linear-style/SKILL.md
---
name: linear-style
description: Build UI in the Linear visual style (Dark Precision SaaS & Industrial Craftsmanship). Use when the user asks for a Linear-like look.
---

# Linear Style — Quick Rules (source: linear.app, extracted by taste-skill)

## Tokens
- canvasBg: #08090A — Primary root & body background
- surfaceLevel1: #0F1011 — Primary workspace panels & bento cards
- surfaceLevel2: #141516 — Elevated cards & interactive containers
- surfaceLevel3: #191A1B — Nested modules, code blocks & hover surfaces
- glassHeader: rgba(11, 11, 11, 0.8) — Sticky top navigation bar (--header-blur: 20px)
- borderSubtle: rgba(255, 255, 255, 0.05) — Default subtle container & grid hairline
- borderStrong: rgba(255, 255, 255, 0.08) — Card borders, header bottom divider & code pills (159 DOM instances)
- borderHighlight: rgba(255, 255, 255, 0.12) — Focused/featured card border
- textPrimary: #F7F8F8 — Hero H1, section H2 headlines & active UI labels
- textSecondary: #D0D6E0 — H3 subheadings, code snippets & interactive controls
- textMuted: #8A8F98 — Body paragraphs, muted lead copy & secondary nav links
- textQuaternary: #62666D — Metadata, timestamps, keyboard shortcuts & disabled states
- accentInvertCta: #E5E5E6 — Primary high-contrast CTA button fill (--color-button-invert-bg-hover: #FFFFFF)
- accentBrand: #5E6AD2 — Core Linear indigo brand accent & focus ring (#5E69D1)
- accentElectric: #7170FF — Interactive links & active feature indicators
- semanticStatus: Green #27A644 / Yellow #F0BF00 / Orange #FC7840 / Red #EB5757 / Blue #4EA7FC — Issue workflow status badges & telemetry indicators

## Typography
- Heading font: Inter Variable; body: Inter Variable; mono: Berkeley Mono
- Hero H1: 64px | line-height 64px (leading-[1]) | letter-spacing -1.41px (tracking-[-0.022em]) | weight 510 (font-[510]) | color #F7F8F8 (text-[#F7F8F8]) | font Inter Variable
- Section H2 (Primary): 48px | line-height 48px (leading-[1]) | letter-spacing -1.06px (tracking-[-0.022em]) | weight 510 (font-[510]) | color #8A8F98 (text-[#8A8F98]) | font Inter Variable
- Card / Feature H3: 20px | line-height 26.6px (leading-[1.33]) | letter-spacing -0.24px (tracking-[-0.012em]) | weight 590 (font-[590]) | color #D0D6E0 (text-[#D0D6E0]) | font Inter Variable
- Body Copy (Paragraph): 15px | line-height 24px (leading-[1.6]) | letter-spacing -0.16px (tracking-[-0.011em]) | weight 400 (font-[400]) | color #8A8F98 (text-[#8A8F98]) | font Inter Variable

## Components
- Primary button: height 32px, padding 0px 12px, radius 9999px, bg #E5E5E6, text #08090A, 13px / 510
- Card: bg rgba(255, 255, 255, 0.01), border 1px solid rgba(255, 255, 255, 0.05), radius 8px, padding 0px 0px

## Never
- NEVER use pure #000000 for large card surfaces or pure #FFFFFF for body text—always use #08090A canvas, #0F1011/#141516 cards, and #F7F8F8 primary text.
- NEVER use thick opaque gray borders (border-gray-700, border-zinc-600)—always use 1px translucent white hairlines (border-white/[0.08] or border-white/[0.05]).
- NEVER use standard font-bold (700 or 800) on large headlines—Linear uses custom variable medium weight (font-[510]) with tight negative tracking (tracking-[-0.022em]) and leading-none (1.0).
- NEVER use generic neon blue-to-purple Tailwind gradients (from-blue-500 to-purple-600)—use ultra-subtle white alpha washes (rgba(255,255,255,0.03) to 0.04) and dark radial vignettes.
- NEVER use fuzzy, high-spread drop shadows on light/colored backgrounds—use multi-layer micro-shadows (--shadow-stack-low) or 1px inset top highlights (shadow-[inset_0_1px_0_0_rgba(255,255,255,0.04)]).

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

Related

Similar styles

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

See taste-skill Pro →