行业: 生产力与 SaaSWebsite

Linear

Linear 以极深黑色画布、浅灰文字和标志性的紫蓝光晕构建产品导向的开发工具界面,通过精密网格、细边框和流畅动效,传达速度、秩序与专注。

Dark UIGradientDeveloper-focusedDesign System
Linear 网站预览
设计系统
品牌色彩 · 23

primary

#5E6AD2

--color-primary

on primary

#FFFFFF

--color-on-primary

primary hover

#828FFF

--color-primary-hover

primary focus

#5E69D1

--color-primary-focus

ink

#F7F8F8

--color-ink

ink muted

#D0D6E0

--color-ink-muted

ink subtle

#8A8F98

--color-ink-subtle

ink tertiary

#62666D

--color-ink-tertiary

canvas

#010102

--color-canvas

surface 1

#0F1011

--color-surface-1

surface 2

#141516

--color-surface-2

surface 3

#18191A

--color-surface-3

surface 4

#191A1B

--color-surface-4

hairline

#23252A

--color-hairline

hairline strong

#34343A

--color-hairline-strong

hairline tertiary

#3E3E44

--color-hairline-tertiary

inverse canvas

#FFFFFF

--color-inverse-canvas

inverse surface 1

#F5F6F6

--color-inverse-surface-1

inverse surface 2

#F6F7F7

--color-inverse-surface-2

inverse ink

#000000

--color-inverse-ink

brand secure

#7A7FAD

--color-brand-secure

semantic success

#27A644

--color-semantic-success

semantic overlay

#000000

--color-semantic-overlay

字体系统

字体家族

Linear Display / Linear Text / Linear Mono

字重

600500400

备注

3 个字体家族,完整字阶、行高和字距见 DESIGN.md

标签
Dark UIGradientDeveloper-focusedDesign System
设计文档

品牌设计系统的完整 Markdown 文档

Linear — Style Reference

> A near-black product-focused marketing canvas built around #010102 (the deepest dark surface of any tool in this collection), light gray text (#f7f8f8), and the signature Linear lavender-blue (#5e6ad2) used as the single chromatic accent. The system reads as software-craft documentation: dense, technical, and quietly luxurious. Display type is set in the Linear custom sans (SF Pro Display fallback) at 500–700 with measured negative tracking. Cards live as charcoal panels (#0f1011) with hairline borders. The accent lavender appears on the brand mark, focus rings, and a few intentional CTAs — never decoratively. Page rhythm leans on product UI screenshots framed in dark panels rather than atmospheric color.

**Theme:** dark

**Source website:** [https://linear.app/](https://linear.app/)

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 | `#5e6ad2` | `--color-primary` | primary role extracted from the source design |

| on primary | `#ffffff` | `--color-on-primary` | on primary role extracted from the source design |

| primary hover | `#828fff` | `--color-primary-hover` | primary hover role extracted from the source design |

| primary focus | `#5e69d1` | `--color-primary-focus` | primary focus role extracted from the source design |

| ink | `#f7f8f8` | `--color-ink` | ink role extracted from the source design |

| ink muted | `#d0d6e0` | `--color-ink-muted` | ink muted role extracted from the source design |

| ink subtle | `#8a8f98` | `--color-ink-subtle` | ink subtle role extracted from the source design |

| ink tertiary | `#62666d` | `--color-ink-tertiary` | ink tertiary role extracted from the source design |

| canvas | `#010102` | `--color-canvas` | canvas role extracted from the source design |

| surface 1 | `#0f1011` | `--color-surface-1` | surface 1 role extracted from the source design |

| surface 2 | `#141516` | `--color-surface-2` | surface 2 role extracted from the source design |

| surface 3 | `#18191a` | `--color-surface-3` | surface 3 role extracted from the source design |

| surface 4 | `#191a1b` | `--color-surface-4` | surface 4 role extracted from the source design |

| hairline | `#23252a` | `--color-hairline` | hairline role extracted from the source design |

| hairline strong | `#34343a` | `--color-hairline-strong` | hairline strong role extracted from the source design |

| hairline tertiary | `#3e3e44` | `--color-hairline-tertiary` | hairline tertiary role extracted from the source design |

| inverse canvas | `#ffffff` | `--color-inverse-canvas` | inverse canvas role extracted from the source design |

| inverse surface 1 | `#f5f6f6` | `--color-inverse-surface-1` | inverse surface 1 role extracted from the source design |

| inverse surface 2 | `#f6f7f7` | `--color-inverse-surface-2` | inverse surface 2 role extracted from the source design |

| inverse ink | `#000000` | `--color-inverse-ink` | inverse ink role extracted from the source design |

| brand secure | `#7a7fad` | `--color-brand-secure` | brand secure role extracted from the source design |

| semantic success | `#27a644` | `--color-semantic-success` | semantic success role extracted from the source design |

| semantic overlay | `#000000` | `--color-semantic-overlay` | semantic overlay role extracted from the source design |

Tokens — Typography

Linear Display · `--font-primary`

  • **Substitute:** Inter, system-ui, sans-serif
  • **Weights:** 600, 500, 400
  • **Sizes:** 80px, 56px, 40px, 28px, 22px, 20px
  • **Line height:** 1.05, 1.1, 1.15, 1.2, 1.25, 1.4
  • **Letter spacing:** -3.0px, -1.8px, -1.0px, -0.6px, -0.4px, -0.2px
  • **Role:** Brand typography family observed across the documented type scale.
  • Linear Text · `--font-family-2`

  • **Substitute:** Inter, system-ui, sans-serif
  • **Weights:** 400, 500
  • **Sizes:** 18px, 16px, 14px, 12px, 13px
  • **Line height:** 1.5, 1.4, 1.2, 1.3
  • **Letter spacing:** -0.1px, -0.05px, 0, 0.4px
  • **Role:** Brand typography family observed across the documented type scale.
  • Linear Mono · `--font-family-3`

  • **Substitute:** Inter, system-ui, sans-serif
  • **Weights:** 400
  • **Sizes:** 13px
  • **Line height:** 1.5
  • **Letter spacing:** 0
  • **Role:** Brand typography family observed across the documented type scale.
  • Type Scale

    | Role | Size | Line Height | Letter Spacing | Token |

    |---|---|---|---|---|

    | display-xl | 80px | 1.05 | -3.0px | `--text-display-xl` |

    | display-lg | 56px | 1.1 | -1.8px | `--text-display-lg` |

    | display-md | 40px | 1.15 | -1.0px | `--text-display-md` |

    | headline | 28px | 1.2 | -0.6px | `--text-headline` |

    | card-title | 22px | 1.25 | -0.4px | `--text-card-title` |

    | subhead | 20px | 1.4 | -0.2px | `--text-subhead` |

    | body-lg | 18px | 1.5 | -0.1px | `--text-body-lg` |

    | body | 16px | 1.5 | -0.05px | `--text-body` |

    | body-sm | 14px | 1.5 | 0 | `--text-body-sm` |

    | caption | 12px | 1.4 | 0 | `--text-caption` |

    | button | 14px | 1.2 | 0 | `--text-button` |

    | eyebrow | 13px | 1.3 | 0.4px | `--text-eyebrow` |

    | mono | 13px | 1.5 | 0 | `--text-mono` |

    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` |

    | xxl | 24px | `--radius-xxl` |

    | pill | 9999px | `--radius-pill` |

    | full | 9999px | `--radius-full` |

    Layout

  • **Section gap:** 96px
  • **Card padding:** 24px
  • **Element gap:** 16px
  • **Max content width:** 1200px
  • Components

    button primary

    **Role:** button primary component

  • **backgroundColor:** `{colors.primary}`
  • **textColor:** `{colors.on-primary}`
  • **typography:** `{typography.button}`
  • **rounded:** `{rounded.md}`
  • **padding:** `8px 14px`
  • button primary pressed

    **Role:** button primary pressed component

  • **backgroundColor:** `{colors.primary-focus}`
  • **textColor:** `{colors.on-primary}`
  • **typography:** `{typography.button}`
  • **rounded:** `{rounded.md}`
  • button primary hover

    **Role:** button primary hover component

  • **backgroundColor:** `{colors.primary-hover}`
  • **textColor:** `{colors.on-primary}`
  • **typography:** `{typography.button}`
  • **rounded:** `{rounded.md}`
  • button secondary

    **Role:** button secondary component

  • **backgroundColor:** `{colors.surface-1}`
  • **textColor:** `{colors.ink}`
  • **typography:** `{typography.button}`
  • **rounded:** `{rounded.md}`
  • **padding:** `8px 14px`
  • button tertiary

    **Role:** button tertiary component

  • **backgroundColor:** `{colors.canvas}`
  • **textColor:** `{colors.ink}`
  • **typography:** `{typography.button}`
  • **rounded:** `{rounded.md}`
  • **padding:** `8px 14px`
  • button inverse

    **Role:** button inverse component

  • **backgroundColor:** `{colors.inverse-canvas}`
  • **textColor:** `{colors.inverse-ink}`
  • **typography:** `{typography.button}`
  • **rounded:** `{rounded.md}`
  • **padding:** `8px 14px`
  • pricing card

    **Role:** pricing card component

  • **backgroundColor:** `{colors.surface-1}`
  • **textColor:** `{colors.ink}`
  • **typography:** `{typography.body}`
  • **rounded:** `{rounded.lg}`
  • **padding:** `24px`
  • pricing card featured

    **Role:** pricing card featured component

  • **backgroundColor:** `{colors.surface-2}`
  • **textColor:** `{colors.ink}`
  • **typography:** `{typography.body}`
  • **rounded:** `{rounded.lg}`
  • **padding:** `24px`
  • feature card

    **Role:** feature card component

  • **backgroundColor:** `{colors.surface-1}`
  • **textColor:** `{colors.ink}`
  • **typography:** `{typography.body}`
  • **rounded:** `{rounded.lg}`
  • **padding:** `24px`
  • product screenshot card

    **Role:** product screenshot card component

  • **backgroundColor:** `{colors.surface-1}`
  • **textColor:** `{colors.ink}`
  • **typography:** `{typography.body}`
  • **rounded:** `{rounded.xl}`
  • **padding:** `24px`
  • testimonial card

    **Role:** testimonial card component

  • **backgroundColor:** `{colors.surface-1}`
  • **textColor:** `{colors.ink}`
  • **typography:** `{typography.body-lg}`
  • **rounded:** `{rounded.lg}`
  • **padding:** `32px`
  • customer logo tile

    **Role:** customer logo tile component

  • **backgroundColor:** `{colors.canvas}`
  • **textColor:** `{colors.ink-subtle}`
  • **typography:** `{typography.caption}`
  • **rounded:** `{rounded.xs}`
  • **padding:** `16px`
  • text input

    **Role:** text input component

  • **backgroundColor:** `{colors.surface-1}`
  • **textColor:** `{colors.ink}`
  • **typography:** `{typography.body}`
  • **rounded:** `{rounded.md}`
  • **padding:** `8px 12px`
  • text input focused

    **Role:** text input focused component

  • **backgroundColor:** `{colors.surface-1}`
  • **textColor:** `{colors.ink}`
  • **typography:** `{typography.body}`
  • **rounded:** `{rounded.md}`
  • **padding:** `8px 12px`
  • pricing tab default

    **Role:** pricing tab default component

  • **backgroundColor:** `{colors.canvas}`
  • **textColor:** `{colors.ink-subtle}`
  • **typography:** `{typography.button}`
  • **rounded:** `{rounded.pill}`
  • **padding:** `6px 14px`
  • pricing tab selected

    **Role:** pricing tab selected component

  • **backgroundColor:** `{colors.surface-2}`
  • **textColor:** `{colors.ink}`
  • **typography:** `{typography.button}`
  • **rounded:** `{rounded.pill}`
  • **padding:** `6px 14px`
  • cta banner

    **Role:** cta banner component

  • **backgroundColor:** `{colors.surface-1}`
  • **textColor:** `{colors.ink}`
  • **typography:** `{typography.headline}`
  • **rounded:** `{rounded.lg}`
  • **padding:** `48px`
  • changelog row

    **Role:** changelog row component

  • **backgroundColor:** `{colors.canvas}`
  • **textColor:** `{colors.ink}`
  • **typography:** `{typography.body}`
  • **rounded:** `{rounded.xs}`
  • **padding:** `24px 0`
  • status badge

    **Role:** status badge component

  • **backgroundColor:** `{colors.surface-2}`
  • **textColor:** `{colors.ink-muted}`
  • **typography:** `{typography.caption}`
  • **rounded:** `{rounded.pill}`
  • **padding:** `2px 8px`
  • top nav

    **Role:** top nav component

  • **backgroundColor:** `{colors.canvas}`
  • **textColor:** `{colors.ink}`
  • **typography:** `{typography.body-sm}`
  • **rounded:** `{rounded.xs}`
  • **height:** `56px`
  • footer

    **Role:** footer component

  • **backgroundColor:** `{colors.canvas}`
  • **textColor:** `{colors.ink-subtle}`
  • **typography:** `{typography.caption}`
  • **rounded:** `{rounded.xs}`
  • **padding:** `64px 32px`
  • Do's and Don'ts

    Do

  • Use `--color-primary` for the brand's primary interaction treatment.
  • Keep page surfaces anchored to `--color-canvas`.
  • Preserve every typography style's documented size, line height, and letter spacing.
  • Compare major implementation decisions against [the live Linear website](https://linear.app/).
  • Don't

  • Do not introduce colors outside the documented color token set.
  • Do not replace `--color-ink` with an arbitrary neutral.
  • Do not flatten documented component states or spacing relationships.
  • Do not treat this extracted snapshot as newer than the live source website.
  • 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://linear.app/).

    同类品牌推荐
    Linear 设计系统 | 品牌模板 · ViboDesign