Skip to content

Commit 159e980

Browse files
author
Kimi Design Agent
committed
design(linear): add complete design handoff package
- Add www/design/ directory with full Linear.app style design system - Tokens: W3C JSON + CSS + Markdown documentation - Components: Button, Card, Input, Nav, Badge, Icon specs - Icons: 6 Lucide-style SVG feature icons - Mockups: 4 PNG + 3 SVG (Figma-importable) page mockups - Specs: Homepage, docs landing, design system page specs - Handoff: Migration guide (5-phase) + QA checklist - Reference: linear.app design philosophy This design package follows standard design-dev handoff workflow: - W3C Design Tokens format for cross-platform consistency - Atomic Design component specs - Figma-compatible SVG mockups - Complete migration and QA documentation Closes #design-handoff-linear
1 parent b27124b commit 159e980

28 files changed

Lines changed: 1944 additions & 0 deletions

www/design/README.md

Lines changed: 177 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,177 @@
1+
# openElement × Linear.app Design System
2+
3+
> **Version**: 1.0.0
4+
> **Date**: 2025-06-16
5+
> **Designer**: AI Design Agent
6+
> **Reference**: linear.app
7+
> **Platform**: openElement Web Components (DSD-first)
8+
> **Font**: Inter (Google Fonts) / JetBrains Mono (Google Fonts)
9+
10+
---
11+
12+
## Quick Navigation
13+
14+
| Section | Path | Description |
15+
|---------|------|-------------|
16+
| Design Tokens | [`tokens/`](./tokens/) | Colors, typography, spacing, radii — W3C + CSS formats |
17+
| Components | [`components/`](./components/) | Button, Card, Input, Nav, Badge, Icon specs |
18+
| Icons | [`icons/`](./icons/) | 6 feature icons (SVG, 24×24 viewBox) |
19+
| Mockups | [`mockups/`](./mockups/) | High-fidelity page mockups (PNG + SVG) |
20+
| Layout Specs | [`specs/`](./specs/) | Homepage, docs, design-system page specs |
21+
| Handoff | [`handoff/`](./handoff/) | Migration guide & QA checklist |
22+
23+
---
24+
25+
## Design Philosophy
26+
27+
1. **Canvas 即留白** — 深色背景本身就是留白,不用白色间隙
28+
2. **Surface 阶梯** — 4 层表面(canvas → surface-1 → surface-2 → surface-3)构建层级
29+
3. **Hairline 分隔** — 极细边框(1px, rgba(255,255,255,0.06))替代阴影
30+
4. **顶部边缘高光** — 卡片顶部 1px 微弱白边,制造"像素渲染"感
31+
5. **无渐变、无阴影、无氛围光** — 零装饰性渐变,零 drop-shadow
32+
6. **产品截图即主角** — 每个 section 以产品 UI 截图为核心视觉元素
33+
7. **Typography 即品牌** — 激进的负字间距 + 精确的 weight 阶梯
34+
8. **单色强调** — 只用 Indigo/Lavender 一个强调色
35+
9. **紧凑按钮** — 8px 圆角,8px 14px padding,不是 pill
36+
37+
---
38+
39+
## Color Palette
40+
41+
### Dark Mode(唯一营销主题)
42+
43+
| Token | Hex | Usage |
44+
|-------|-----|-------|
45+
| `--bg-canvas` | `#08080a` | Page background |
46+
| `--surface-1` | `#0d0f12` | Nav, secondary panels |
47+
| `--surface-2` | `#16191d` | Cards, code blocks |
48+
| `--surface-3` | `#212529` | Elevated elements, dropdowns |
49+
| `--brand` | `#5c7cfa` | Primary CTA, links, accent |
50+
| `--brand-hover` | `#4c6ef5` | Button hover |
51+
| `--brand-light` | `#748ffc` | Focus ring |
52+
| `--text-primary` | `#e9ecef` | Headlines, body |
53+
| `--text-secondary` | `#adb5bd` | Subtitles, descriptions |
54+
| `--text-muted` | `#868e96` | Captions, meta |
55+
| `--border` | `rgba(255,255,255,0.06)` | Hairline borders |
56+
| `--border-hover` | `rgba(255,255,255,0.10)` | Hover borders |
57+
| `--edge-highlight` | `rgba(255,255,255,0.08)` | Card top edge |
58+
59+
### Light Mode(仅产品 UI 预览)
60+
61+
| Token | Hex | Usage |
62+
|-------|-----|-------|
63+
| `--bg-canvas` | `#f8f9fa` | Page background |
64+
| `--surface-1` | `#ffffff` | Panels |
65+
| `--surface-2` | `#f1f3f5` | Cards |
66+
| `--text-primary` | `#12131a` | Headlines |
67+
| `--text-secondary` | `#626676` | Subtitles |
68+
| `--border` | `rgba(18,19,26,0.08)` | Hairline borders |
69+
70+
---
71+
72+
## Typography Scale
73+
74+
| Token | Size | Weight | Line-Height | Letter-Spacing | Usage |
75+
|-------|------|--------|-------------|----------------|-------|
76+
| Display XL | 80px | 600 | 0.95 | -0.04em | Hero headline |
77+
| Display LG | 56px | 600 | 1.05 | -0.03em | Section opener |
78+
| Display MD | 40px | 600 | 1.05 | -0.02em | Sub-section headline |
79+
| Headline | 28px | 600 | 1.20 | -0.01em | Pricing, CTA banner |
80+
| Card Title | 22px | 500 | 1.25 | -0.005em | Feature card title |
81+
| Subhead | 20px | 400 | 1.40 | -0.01em | Lead paragraphs |
82+
| Body LG | 18px | 400 | 1.50 | 0 | Hero subhead |
83+
| Body | 16px | 400 | 1.50 | 0 | Default body |
84+
| Body SM | 14px | 400 | 1.50 | 0 | Card body, footer |
85+
| Caption | 12px | 400 | 1.40 | 0 | Captions, meta |
86+
| Button | 14px | 500 | 1.20 | 0 | Button labels |
87+
| Eyebrow | 13px | 500 | 1.30 | +0.04em | Section labels |
88+
| Mono | 13px | 400 | 1.50 | 0 | Code snippets |
89+
90+
> **Note**: Linear 在 Display 上只用 600,从不用 700+。这是其"克制的力量"的关键。
91+
92+
---
93+
94+
## Spacing Scale
95+
96+
| Token | Value | Usage |
97+
|-------|-------|-------|
98+
| `xxs` | 4px | Micro gaps |
99+
| `xs` | 8px | Button padding-y, icon gaps |
100+
| `sm` | 12px | Button gap, card gap |
101+
| `md` | 16px | Standard gap, card gap |
102+
| `lg` | 24px | Card padding, section gap |
103+
| `xl` | 32px | Page padding-x |
104+
| `xxl` | 48px | Large spacing |
105+
| `section` | 96px | Section separation |
106+
107+
---
108+
109+
## Border Radius Scale
110+
111+
| Token | Value | Usage |
112+
|-------|-------|-------|
113+
| `xs` | 4px | Small chips, badges |
114+
| `sm` | 6px | Inline tags |
115+
| `md` | 8px | Buttons, inputs, tabs |
116+
| `lg` | 12px | Cards, feature cards |
117+
| `xl` | 16px | Product panels, code blocks |
118+
| `pill` | 9999px | Status badges, tabs |
119+
120+
---
121+
122+
## Breakpoints
123+
124+
| Name | Width | Layout Changes |
125+
|------|-------|----------------|
126+
| Desktop | ≥ 1024px | 3-column feature grid, hero side-by-side |
127+
| Tablet | 768–1023px | 2-column feature grid, hero stacked |
128+
| Mobile | < 768px | 1-column, simplified nav, code panel hidden |
129+
130+
---
131+
132+
## Files & Deliverables
133+
134+
### Mockups
135+
- `01-homepage-hero.png` — Hero section (1440×900)
136+
- `02-homepage-features.png` — Feature grid (1440×900)
137+
- `03-design-system.png` — Design system page (1440×900)
138+
- `04-fullpage-concept.png` — Full homepage scroll (1440×2400)
139+
- `05-homepage-hero.svg` — Hero SVG (Figma-importable)
140+
- `06-homepage-features.svg` — Features SVG (Figma-importable)
141+
- `07-fullpage.svg` — Full page SVG (Figma-importable)
142+
143+
### Tokens
144+
- `tokens/tokens.json` — W3C Design Tokens format
145+
- `tokens/tokens.css` — CSS Custom Properties
146+
- `tokens/tokens.md` — Token documentation
147+
148+
### Components
149+
- `components/button.md` — 4 variants (primary, secondary, tertiary, inverse)
150+
- `components/card.md` — Top edge highlight, hover states
151+
- `components/input.md` — Focus ring, hairline border
152+
- `components/nav.md` — Sticky nav, backdrop blur, 56px height
153+
- `components/badge.md` — Pill status badge
154+
- `components/icon.md` — 16×16 / 24×24 / 32×32 sizes
155+
156+
### Icons
157+
- `icons/elements-first.svg` — Layers icon
158+
- `icons/one-renderer.svg` — Git-branch icon
159+
- `icons/app-lifecycle.svg` — Workflow icon
160+
- `icons/trusted-boundary.svg` — Shield icon
161+
- `icons/gate-proven.svg` — Check-circle icon
162+
- `icons/web-standards.svg` — Globe icon
163+
164+
---
165+
166+
## Version History
167+
168+
| Version | Date | Changes |
169+
|---------|------|---------|
170+
| 1.0.0 | 2025-06-16 | Initial Linear.app style redesign |
171+
172+
---
173+
174+
## Contact
175+
176+
- **Framework**: [openelement.org](https://openelement.org)
177+
- **GitHub**: [github.com/open-element/openelement](https://github.com/open-element/openelement)

www/design/components/badge.md

Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+
# Badge 组件规格
2+
3+
## 概述
4+
5+
Pill 形状的状态标签。小尺寸、低对比度、用于分类和状态标识。
6+
7+
## 样式规格
8+
9+
| 属性 ||
10+
|------|-----|
11+
| 背景 | `--surface-1` (#0d0f12) |
12+
| 文字 | `--color-text-muted` (#868e96) |
13+
| 圆角 | `--radius-pill` (9999px) |
14+
| 内边距 | 2px 8px |
15+
| 字号 | 12px |
16+
| 字重 | 400 |
17+
18+
## 状态
19+
20+
| 状态 | 视觉表现 |
21+
|------|----------|
22+
| Default | 标准样式 |
23+
| Hover | 无变化(徽章通常不可交互) |
24+
25+
## 变体
26+
27+
### 默认徽章
28+
- 用于分类标签(Entry, Concepts, Integrate, Contribute)
29+
30+
### 状态徽章
31+
- 用于系统状态
32+
- 颜色根据状态变化:
33+
- Success: 背景 `--color-success-subtle`,文字 `--color-success`
34+
- Error: 背景 `--color-error-subtle`,文字 `--color-error`
35+
- Warning: 背景 `--color-warning-subtle`,文字 `--color-warning`
36+
- Info: 背景 `--color-info-subtle`,文字 `--color-info`
37+
38+
### "New" 徽章
39+
- 背景:`--color-text-primary` (#e9ecef)
40+
- 文字:`--bg-canvas` (#08080a)
41+
- 字号:10px
42+
- 用于 Blog 列表最新文章标记
43+
44+
## 使用场景
45+
46+
| 场景 | 变体 |
47+
|------|------|
48+
| 文档入口标签 | 默认徽章 |
49+
| 系统状态 | 状态徽章 |
50+
| 新文章标记 | "New" 徽章 |
51+
| 版本标签 | 默认徽章 |
52+
53+
## 注意事项
54+
55+
- **徽章是只读组件** — 通常不交互
56+
- **保持低对比度** — 不抢夺主内容注意力
57+
- **不要在同一页面使用过多徽章** — 最多 3-4 个颜色变体

www/design/components/button.md

Lines changed: 88 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,88 @@
1+
# Button 组件规格
2+
3+
## 概述
4+
5+
Linear 风格的按钮系统。紧凑、无边框阴影、无悬浮上浮效果。
6+
7+
## 变体
8+
9+
### Primary(主按钮)
10+
11+
| 属性 ||
12+
|------|-----|
13+
| 背景 | `--color-brand` (#5c7cfa) |
14+
| 文字 | `#ffffff` |
15+
| 圆角 | `--radius-md` (8px) |
16+
| 内边距 | 8px 14px |
17+
| 字号 | 14px |
18+
| 字重 | 500 |
19+
| 过渡 | all 150ms ease |
20+
| Hover | 背景变为 `--color-brand-hover` (#4c6ef5) |
21+
| Focus | 2px outline, `--color-brand-light` at 50% opacity, outline-offset 2px |
22+
| Active | 背景变为 `--color-brand-hover` |
23+
24+
### Secondary(次按钮)
25+
26+
| 属性 ||
27+
|------|-----|
28+
| 背景 | `--surface-1` (#0d0f12) |
29+
| 文字 | `--color-text-primary` (#e9ecef) |
30+
| 边框 | 1px solid `--color-border` |
31+
| 圆角 | 8px |
32+
| 内边距 | 8px 14px |
33+
| Hover | 背景变为 `--color-border-hover` 透明度,边框变为 `--color-border-hover` |
34+
| Focus | 同上 |
35+
36+
### Tertiary(文字按钮)
37+
38+
| 属性 ||
39+
|------|-----|
40+
| 背景 | transparent |
41+
| 文字 | `--color-text-primary` |
42+
| 圆角 | 8px |
43+
| 内边距 | 8px 14px |
44+
| Hover | 背景变为 `rgba(255,255,255,0.04)` |
45+
46+
### Inverse(反色按钮)
47+
48+
| 属性 ||
49+
|------|-----|
50+
| 背景 | `#ffffff` |
51+
| 文字 | `--bg-canvas` (#08080a) |
52+
| 圆角 | 8px |
53+
| 内边距 | 8px 14px |
54+
| Hover | 背景变为 `#f1f3f5` |
55+
| 使用场景 | 深色背景上的 CTA |
56+
57+
## 状态
58+
59+
| 状态 | 视觉表现 |
60+
|------|----------|
61+
| Default | 标准颜色 |
62+
| Hover | 背景微变,边框微亮(无 transform/translateY) |
63+
| Focus | 2px 品牌色 outline,outline-offset 2px |
64+
| Active/Pressed | 背景进一步变暗 |
65+
| Disabled | opacity 0.5, cursor not-allowed |
66+
67+
## 尺寸
68+
69+
| 尺寸 | 内边距 | 字号 |
70+
|------|--------|------|
71+
| Default | 8px 14px | 14px |
72+
| Small | 4px 12px | 12px |
73+
| Large | 12px 24px | 16px |
74+
75+
## 使用场景
76+
77+
| 场景 | 推荐变体 |
78+
|------|----------|
79+
| Hero CTA | Primary |
80+
| 次要操作 | Secondary |
81+
| 文字链接式按钮 | Tertiary |
82+
| 深色背景 CTA | Inverse |
83+
84+
## 注意事项
85+
86+
- **不做 pill 形状** — Linear 的按钮圆角为 8px,不是 pill
87+
- **不做悬浮上浮** — hover 时只改变颜色和边框,不做 translateY 位移
88+
- **不做 box-shadow** — 无阴影效果

0 commit comments

Comments
 (0)