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.
Card on extracted card recipe
Accent link: #5E6AD2 · border
rgba(255, 255, 255, 0.08)Color palette (dark mode)
| Role | Value | Tailwind | Usage |
|---|---|---|---|
| canvasBg | #08090A | bg-[#08090A] | Primary root & body background |
| surfaceLevel1 | #0F1011 | bg-[#0F1011] | Primary workspace panels & bento cards |
| surfaceLevel2 | #141516 | bg-[#141516] | Elevated cards & interactive containers |
| surfaceLevel3 | #191A1B | bg-[#191A1B] | Nested modules, code blocks & hover surfaces |
| glassHeader | rgba(11, 11, 11, 0.8) | bg-[#0B0B0B]/80 backdrop-blur-[20px] | Sticky top navigation bar (--header-blur: 20px) |
| borderSubtle | rgba(255, 255, 255, 0.05) | border-white/[0.05] | Default subtle container & grid hairline |
| borderStrong | rgba(255, 255, 255, 0.08) | border-white/[0.08] | Card borders, header bottom divider & code pills (159 DOM instances) |
| borderHighlight | rgba(255, 255, 255, 0.12) | border-white/[0.12] | Focused/featured card border |
| textPrimary | #F7F8F8 | text-[#F7F8F8] | Hero H1, section H2 headlines & active UI labels |
| textSecondary | #D0D6E0 | text-[#D0D6E0] | H3 subheadings, code snippets & interactive controls |
| textMuted | #8A8F98 | text-[#8A8F98] | Body paragraphs, muted lead copy & secondary nav links |
| textQuaternary | #62666D | text-[#62666D] | Metadata, timestamps, keyboard shortcuts & disabled states |
| accentInvertCta | #E5E5E6 | bg-[#E5E5E6] text-[#08090A] hover:bg-white | Primary high-contrast CTA button fill (--color-button-invert-bg-hover: #FFFFFF) |
| accentBrand | #5E6AD2 | bg-[#5E6AD2] text-white | Core Linear indigo brand accent & focus ring (#5E69D1) |
| accentElectric | #7170FF | text-[#828FFF] | Interactive links & active feature indicators |
| semanticStatus | Green #27A644 / Yellow #F0BF00 / Orange #FC7840 / Red #EB5757 / Blue #4EA7FC | text-[#27A644] / text-[#EB5757] | Issue workflow status badges & telemetry indicators |
Typography
Heading Inter Variable · body Inter Variable · mono Berkeley Mono
| Level | Computed spec |
|---|---|
| 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 |
| Monospace / Code Block | 12px | 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 family | Most frequent values (count on page) |
|---|---|
| Border radius | 8px ×19 · 9px ×13 · 12px ×6 · 6px ×3 · 4px ×3 · 5px ×3 |
| Box shadow | rgba(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 gap | 8px ×53 · 6px ×29 · 4px ×26 · 2px ×5 · 12px ×4 · 11px ×3 |
| Container max-width | 1436px ×4 · 1416px ×1 · 1250px ×1 |
| Section vertical padding | 0px / 48px ×1 · 128px / 128px ×1 · 0px / 96px ×1 |
| Easing | cubic-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 |
| Duration | 0.7s ×10 · 0.1s ×8 · 0.16s ×7 · 0.16s, 0.16s ×6 |
Component recipes
Buttons (5 distinct)
| Rendered | Height | Padding | Radius | Background / Text | Border | Font |
|---|---|---|---|---|---|---|
| Sign up | 32px | 0px 12px | 9999px | #E5E5E6#08090A | 1px solid #E5E5E6 | 13px / 510 |
| Get started | 44px | 0px 20px | 9999px | #E5E5E6#08090A | 1px solid #E5E5E6 | 16px / 510 |
| Contact sales | 44px | 0px 20px | 9999px | rgba(255, 255, 255, 0.05)#F7F8F8 | none | 16px / 510 |
| Faster app launch | 28px | 0px 7px | 8px | rgba(255, 255, 255, 0.04)#D0D6E0 | none | 13px / 510 |
| Performance | 24px | 0px 11px | 16px | transparent#D0D6E0 | 1px solid #2E2E32 | 12px / 400 |
Cards (3 distinct)
| # | Background | Border | Radius | Padding | Shadow |
|---|---|---|---|---|---|
| 1 | rgba(255, 255, 255, 0.01) | 1px solid rgba(255, 255, 255, 0.05) | 8px | 0px 0px | rgba(0, 0, 0, 0.2) 0px 0px 0px 2px |
| 2 | #0F1011 | 1px solid rgba(255, 255, 255, 0.08) | 9px | 12px 16px | rgba(0, 0, 0, 0.2) 0px 0px 0px 1px |
| 3 | #161718 | 1px solid rgba(255, 255, 255, 0.12) | 12px | 0px 0px | rgba(0, 0, 0, 0.25) 0px 2px 32px 0px |
Rules: what never to do in the Linear style
- NEVER use pure
#000000for large card surfaces or pure#FFFFFFfor body text—always use#08090Acanvas,#0F1011/#141516cards, and#F7F8F8primary text. - NEVER use thick opaque gray borders (
border-gray-700,border-zinc-600)—always use1pxtranslucent white hairlines (border-white/[0.08]orborder-white/[0.05]). - NEVER use standard
font-bold(700or800) on large headlines—Linear uses custom variable medium weight (font-[510]) with tight negative tracking (tracking-[-0.022em]) andleading-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)to0.04) and dark radial vignettes. - NEVER use fuzzy, high-spread drop shadows on light/colored backgrounds—use multi-layer micro-shadows (
--shadow-stack-low) or1px insettop highlights (shadow-[inset_0_1px_0_0_rgba(255,255,255,0.04)]).
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
Linear full token specLinear ButtonsLinear CardsLinear Pricing TableLinear vs VercelLinear vs StripeLinear vs RaycastLinear vs DubLinear vs Loops
Similar styles
Get all 30 full SKILL.md specs (Cursor / Claude Code / Codex ready) plus the Pro growth skills.
See taste-skill Pro →