@umacloud/knowledge 1.0.52 → 1.0.54

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -72,7 +72,7 @@ Component(组件) --button-bg: var(--color-primary) 用法:"按钮背
72
72
  边框 `浅灰描边 → rgba(255,255,255,0.06) 半透明`、链接色按底色换亮度(亮底 `#376cd5` → 暗底 `#3b9eff`)。
73
73
  - **渐变只做氛围/媒介,不做 UI 填充**:氛围用低透明度径向 orb(`radial-gradient(circle, rgba(255,89,0,0.22) 0%, transparent 600px)`,6–22% 透明度,贴在 section 顶部),
74
74
  品牌 lift 交给"mesh / 背景图 / 真实摄影",按钮和卡片用纯色。
75
- - **禁 AI 紫**:hue 250310 作主色、`#6366f1 #7c3aed #8b5cf6 #a855f7 #764ba2 #667eea` 渐变——头号 AI 指纹。
75
+ - **禁 AI 紫**:OKLCH **色相 270320 且 chroma ≥ 0.09** 作主色/强调色(`#6366f1 #7c3aed #8b5cf6 #4f46e5 #a855f7` 及邻近色)、`#667eea→#764ba2` 渐变——头号 AI 指纹。**改用**产品自己拥有的一个色相,并把 `on-` 前景对比度算出来。
76
76
  - **禁"奶油米色带"当万能友好信号**:OKLCH `L 0.84–0.97 · C<0.06 · hue 40–100`,以及 `--paper/--cream/--sand/--linen` 这种命名本身就是 tell(暖奶白只在**明确的编辑/品质定位**下用)。
77
77
  - **对比度**:正文 ≥4.5:1、大字/UI ≥3:1。禁 gray-on-gray。
78
78
 
@@ -5,8 +5,11 @@ domain: design-systems
5
5
  category: design-systems
6
6
  difficulty: intermediate
7
7
  tags: [clean, color, component, design-systems, editorial, motion, palette, patterns]
8
+ register: [brand, product]
9
+ icon-library: Heroicons
10
+ icon-stroke: 1.5
8
11
  quality_score: 70
9
- last_updated: 2026-06-15
12
+ last_updated: 2026-07-14
10
13
  ---
11
14
  # Editorial Clean
12
15
 
@@ -20,35 +23,65 @@ Content sites, blogs, portfolios, documentation, news/media products. Products w
20
23
 
21
24
  ```css
22
25
  :root {
23
- --color-bg: #fefdfb;
24
- --color-surface: #ffffff;
25
- --color-surface-elevated: #ffffff;
26
- --color-surface-sunken: #f7f5f0;
27
- --color-text: #1a1a1a;
28
- --color-text-secondary: #666666;
29
- --color-text-tertiary: #999999;
30
- --color-primary: #c0392b;
31
- --color-primary-hover: #a93226;
32
- --color-primary-muted: #fce4e1;
33
- --color-accent: #2c3e50;
34
- --color-success: #27ae60;
35
- --color-warning: #f39c12;
36
- --color-error: #e74c3c;
37
- --color-border: #e8e4dd;
38
- --color-border-hover: #d5d0c8;
39
- --color-border-focus: #c0392b;
26
+ /* Surfaces + paired foregrounds */
27
+ --color-bg: oklch(99.4% 0.003 84.6); /* warm near-white, not a templated cream */
28
+ --color-on-bg: oklch(21.8% 0 0);
29
+ --color-surface: oklch(100% 0 0);
30
+ --color-on-surface: oklch(21.8% 0 0);
31
+ --color-card: oklch(100% 0 0);
32
+ --color-on-card: oklch(35.0% 0.009 80.7);
33
+ --color-muted: oklch(97.0% 0.007 88.6);
34
+ --color-on-muted: oklch(45.4% 0.014 84.6);
35
+
36
+ --color-primary: oklch(49.5% 0.157 29.5); /* ink red */
37
+ --color-on-primary: oklch(100% 0 0);
38
+ --color-primary-hover: oklch(44.5% 0.150 29.5);
39
+ --color-accent: oklch(35.6% 0.039 249.0); /* slate blue */
40
+ --color-on-accent: oklch(100% 0 0);
41
+
42
+ --color-success: oklch(52.5% 0.123 152.7);
43
+ --color-on-success: oklch(100% 0 0);
44
+ --color-warning: oklch(54.5% 0.116 70.2);
45
+ --color-on-warning: oklch(100% 0 0);
46
+ --color-error: oklch(54.3% 0.174 29.7);
47
+ --color-on-error: oklch(100% 0 0);
48
+
49
+ --color-border: oklch(91.0% 0.008 84.6);
50
+ --color-border-hover: oklch(85.0% 0.010 84.6);
51
+ --color-border-focus: oklch(49.5% 0.157 29.5);
52
+
53
+ /* Type scale — reading-first: a real display step, calm body steps */
54
+ --text-xs: 0.75rem; --text-sm: 0.875rem; --text-base: 1.0625rem;
55
+ --text-lg: 1.25rem; --text-xl: 1.5rem; --text-2xl: 2rem;
56
+ --text-3xl: 2.75rem; --text-display: 4rem;
57
+
58
+ /* Spacing — 4pt grid */
59
+ --space-1: 4px; --space-2: 8px; --space-3: 12px; --space-4: 16px;
60
+ --space-6: 24px; --space-8: 32px; --space-12: 48px; --space-16: 64px;
61
+ --space-24: 96px;
62
+
63
+ --radius-sm: 2px; --radius-md: 4px; --radius-lg: 6px; --radius-full: 9999px;
64
+
65
+ --duration-fast: 140ms;
66
+ --duration-normal: 220ms;
67
+ --ease-standard: cubic-bezier(0.2, 0, 0.2, 1);
68
+
40
69
  --shadow-sm: 0 1px 3px rgb(0 0 0 / 0.04);
41
70
  --shadow-md: 0 4px 12px rgb(0 0 0 / 0.06);
42
71
  }
43
72
 
44
73
  @media (prefers-color-scheme: dark) {
45
74
  :root {
46
- --color-bg: #1a1a1a;
47
- --color-surface: #242424;
48
- --color-surface-sunken: #141414;
49
- --color-text: #eeeeee;
50
- --color-text-secondary: #aaaaaa;
51
- --color-border: #333333;
75
+ --color-bg: oklch(19.2% 0.004 84.6); --color-on-bg: oklch(93.8% 0.012 84.6);
76
+ --color-surface: oklch(23.9% 0.006 91.6); --color-on-surface: oklch(93.8% 0.012 84.6);
77
+ --color-card: oklch(27.8% 0.006 78.2); --color-on-card: oklch(86.8% 0.013 82.4);
78
+ --color-muted: oklch(21.4% 0.004 84.6); --color-on-muted: oklch(71.5% 0.013 75.3);
79
+ --color-primary: oklch(71.6% 0.128 32.2); --color-on-primary: oklch(20.9% 0.047 33.9);
80
+ --color-accent: oklch(76.7% 0.061 244.8); --color-on-accent: oklch(22.0% 0.027 242.6);
81
+ --color-success: oklch(75.5% 0.137 155.7); --color-on-success: oklch(23.0% 0.055 151.4);
82
+ --color-warning: oklch(78.5% 0.122 82.1); --color-on-warning: oklch(23.8% 0.046 80.5);
83
+ --color-error: oklch(69.6% 0.142 28.0); --color-on-error: oklch(20.4% 0.057 30.4);
84
+ --color-border: oklch(31.0% 0.006 84.6);
52
85
  }
53
86
  }
54
87
  ```
@@ -69,12 +102,6 @@ Content sites, blogs, portfolios, documentation, news/media products. Products w
69
102
  | body | 1rem (16px) | 400 | 1.6 | 0 | Default text |
70
103
  | caption | 0.8125rem (13px) | 500 | 1.4 | 0.03em | Bylines, dates, tags |
71
104
 
72
- ## Spacing
73
-
74
- 8px base: `8 / 16 / 24 / 32 / 48 / 64 / 80 / 120`
75
-
76
- Content column: max-width 680px, centered. Sidebars: 280px.
77
-
78
105
  ## Component patterns
79
106
 
80
107
  ### Article card
@@ -5,8 +5,11 @@ domain: design-systems
5
5
  category: design-systems
6
6
  difficulty: intermediate
7
7
  tags: [glassmorphism, aurora, frosted, depth, ai, modern, gradient-controlled, design-systems, palette, patterns]
8
+ register: [brand]
9
+ icon-library: Lucide
10
+ icon-stroke: 1.5
8
11
  quality_score: 72
9
- last_updated: 2026-06-19
12
+ last_updated: 2026-07-14
10
13
  ---
11
14
  # Glass Aurora
12
15
 
@@ -20,34 +23,72 @@ AI / 大模型产品、现代消费工具、creator 工具、做得高级的 web
20
23
 
21
24
  ```css
22
25
  :root {
23
- --color-bg: #07080d; /* 近黑带蓝 */
24
- --color-surface: rgba(255,255,255,0.04); /* 玻璃层:低透明白 */
25
- --color-surface-strong: rgba(255,255,255,0.08);
26
- --color-glass-border: rgba(255,255,255,0.12); /* 1px 反光描边 */
27
- --color-text: #f4f6fb;
28
- --color-text-secondary: #aab1c5;
29
- --color-text-tertiary: #6b7390;
30
- --color-primary: #5e8bff; /* 主色:克制的电蓝 */
31
- --color-primary-hover: #7aa2ff;
32
- --color-accent: #36e0c8; /* 青绿点缀 */
33
- --color-success: #36e0c8;
34
- --color-error: #ff5d6c;
35
- --color-border: rgba(255,255,255,0.08);
36
- /* 极光:极低饱和、大模糊、固定在背景,绝不做成 hero 主色块 */
37
- --aurora: radial-gradient(60% 50% at 20% 0%, rgba(94,139,255,0.18), transparent 70%),
38
- radial-gradient(50% 40% at 90% 10%, rgba(54,224,200,0.12), transparent 70%);
26
+ /* Surfaces + paired foregrounds — 玻璃层叠在实底 token 之上,前景永远配对 */
27
+ --color-bg: oklch(13.6% 0.012 274.6); /* 近黑带蓝 */
28
+ --color-on-bg: oklch(97.3% 0.007 268.5);
29
+ --color-surface: oklch(19.3% 0.017 273.8); /* 玻璃层的实底回退(backdrop-filter 不可用时) */
30
+ --color-on-surface: oklch(97.3% 0.007 268.5);
31
+ --color-card: oklch(23.2% 0.020 271.8);
32
+ --color-on-card: oklch(91.6% 0.016 270.0);
33
+ --color-muted: oklch(17.0% 0.015 272.3);
34
+ --color-on-muted: oklch(71.3% 0.033 269.7);
35
+
36
+ --color-primary: oklch(66.2% 0.179 265.8); /* 克制的电蓝 — 蓝,不是 AI 紫 */
37
+ --color-on-primary: oklch(14.9% 0.041 261.8);
38
+ --color-primary-hover: oklch(72.0% 0.160 265.8);
39
+ --color-accent: oklch(81.8% 0.137 180.7); /* 青绿点缀 */
40
+ --color-on-accent: oklch(23.5% 0.039 183.5);
41
+
42
+ --color-success: oklch(81.8% 0.137 180.7);
43
+ --color-on-success: oklch(23.5% 0.039 183.5);
44
+ --color-warning: oklch(86.2% 0.135 81.0);
45
+ --color-on-warning: oklch(24.2% 0.047 81.2);
46
+ --color-error: oklch(69.5% 0.196 18.5);
47
+ --color-on-error: oklch(19.6% 0.065 20.5);
48
+
49
+ /* 玻璃 */
50
+ --color-glass: oklch(100% 0 0 / 0.04);
51
+ --color-glass-strong: oklch(100% 0 0 / 0.08);
52
+ --color-glass-border: oklch(100% 0 0 / 0.12); /* 1px 反光描边 */
53
+ --color-border: oklch(100% 0 0 / 0.08);
39
54
  --blur: 16px;
40
- --radius: 16px;
55
+
56
+ /* 极光:极低饱和、大模糊、固定在背景,绝不做成 hero 主色块 */
57
+ --aurora: radial-gradient(60% 50% at 20% 0%, oklch(66.2% 0.179 265.8 / 0.18), transparent 70%),
58
+ radial-gradient(50% 40% at 90% 10%, oklch(81.8% 0.137 180.7 / 0.12), transparent 70%);
59
+
60
+ /* Type scale — brand register */
61
+ --text-xs: 0.75rem; --text-sm: 0.875rem; --text-base: 1rem;
62
+ --text-lg: 1.25rem; --text-xl: 1.625rem; --text-2xl: 2.25rem;
63
+ --text-3xl: 3rem; --text-display: 4.5rem;
64
+
65
+ /* Spacing — 4pt grid */
66
+ --space-1: 4px; --space-2: 8px; --space-3: 12px; --space-4: 16px;
67
+ --space-6: 24px; --space-8: 32px; --space-12: 48px; --space-16: 64px;
68
+ --space-24: 96px;
69
+
70
+ --radius-sm: 8px; --radius-md: 12px; --radius-lg: 16px; --radius-full: 9999px;
71
+
72
+ --duration-fast: 150ms;
73
+ --duration-normal: 240ms;
74
+ --duration-reveal: 600ms;
75
+ --ease-standard: cubic-bezier(0.16, 1, 0.3, 1);
41
76
  }
42
77
 
43
78
  @media (prefers-color-scheme: light) {
44
79
  :root {
45
- --color-bg: #f5f7fc;
46
- --color-surface: rgba(255,255,255,0.7);
47
- --color-glass-border: rgba(10,20,40,0.08);
48
- --color-text: #0c1124;
49
- --color-text-secondary: #4a5270;
50
- --aurora: radial-gradient(60% 50% at 20% 0%, rgba(94,139,255,0.10), transparent 70%);
80
+ --color-bg: oklch(97.6% 0.007 268.5); --color-on-bg: oklch(18.4% 0.040 271.0);
81
+ --color-surface: oklch(100% 0 0); --color-on-surface: oklch(18.4% 0.040 271.0);
82
+ --color-card: oklch(100% 0 0); --color-on-card: oklch(37.7% 0.044 273.7);
83
+ --color-muted: oklch(94.9% 0.013 266.7); --color-on-muted: oklch(42.5% 0.042 274.0);
84
+ --color-primary: oklch(48.0% 0.191 266.5); --color-on-primary: oklch(100% 0 0);
85
+ --color-accent: oklch(47.4% 0.085 180.5); --color-on-accent: oklch(100% 0 0);
86
+ --color-success: oklch(47.4% 0.085 180.5); --color-on-success: oklch(100% 0 0);
87
+ --color-warning: oklch(51.2% 0.108 75.1); --color-on-warning: oklch(100% 0 0);
88
+ --color-error: oklch(53.7% 0.190 21.0); --color-on-error: oklch(100% 0 0);
89
+ --color-glass: oklch(100% 0 0 / 0.7);
90
+ --color-glass-border: oklch(18.4% 0.040 271.0 / 0.08);
91
+ --aurora: radial-gradient(60% 50% at 20% 0%, oklch(48.0% 0.191 266.5 / 0.10), transparent 70%);
51
92
  }
52
93
  }
53
94
  ```
@@ -67,10 +108,6 @@ AI / 大模型产品、现代消费工具、creator 工具、做得高级的 web
67
108
  | body | 1rem (16px) | 400 | 1.6 | 0 | 正文 |
68
109
  | caption | 0.8125rem (13px) | 500 | 1.4 | 0.02em | 标签 |
69
110
 
70
- ## Spacing
71
-
72
- 4px 基:`4 / 8 / 12 / 16 / 24 / 32 / 48 / 64 / 96`。玻璃卡片内边距 24-32px,卡片间距 16-24px。
73
-
74
111
  ## Layout
75
112
 
76
113
  - 深背景 + 固定的 `--aurora` 氛围层(`position: fixed; filter: blur(40px)`,不随滚动喧宾)。
@@ -5,8 +5,11 @@ domain: design-systems
5
5
  category: design-systems
6
6
  difficulty: intermediate
7
7
  tags: [borders, color, component, design-systems, minimal, modern, palette, patterns]
8
+ register: [product]
9
+ icon-library: Lucide
10
+ icon-stroke: 1.5
8
11
  quality_score: 70
9
- last_updated: 2026-06-15
12
+ last_updated: 2026-07-14
10
13
  ---
11
14
  # Modern Minimal
12
15
 
@@ -14,132 +17,132 @@ last_updated: 2026-06-15
14
17
 
15
18
  ## When to use
16
19
 
17
- SaaS products, developer tools, dashboards, productivity apps. Products where information density matters but visual noise must stay low.
20
+ **Register: product.** SaaS products, developer tools, dashboards, productivity apps. Products where information density matters but visual noise must stay low. Read `01-register.md` first: the product register's rules apply here, and every brand-only rule (display type, page-load choreography, background depth) is OFF.
18
21
 
19
22
  ## Color palette
20
23
 
24
+ Every surface role ships a paired `on-` foreground; every declared pair clears WCAG AA (4.5:1 body). Colors are OKLCH — perceptually uniform, so `L` is the only knob you need to turn to derive a hover/muted variant.
25
+
21
26
  ```css
22
27
  :root {
23
- /* Surface */
24
- --color-bg: #fafafa;
25
- --color-surface: #ffffff;
26
- --color-surface-elevated: #ffffff;
27
- --color-surface-sunken: #f4f4f5;
28
-
29
- /* Text */
30
- --color-text: #18181b;
31
- --color-text-secondary: #71717a;
32
- --color-text-tertiary: #a1a1aa;
33
-
34
- /* Brand */
35
- --color-primary: #2563eb;
36
- --color-primary-hover: #1d4ed8;
37
- --color-primary-muted: #dbeafe;
28
+ /* Surfaces + their paired foregrounds */
29
+ --color-bg: oklch(98.5% 0 0); --color-on-bg: oklch(21.0% 0.006 285.9);
30
+ --color-surface: oklch(100% 0 0); --color-on-surface: oklch(21.0% 0.006 285.9);
31
+ --color-card: oklch(100% 0 0); --color-on-card: oklch(37.0% 0.012 285.8);
32
+ --color-muted: oklch(96.7% 0 0); --color-on-muted: oklch(44.2% 0.015 285.8);
38
33
 
39
- /* Accent */
40
- --color-accent: #8b5cf6;
34
+ /* Brand + one restrained accent (never AI-purple) */
35
+ --color-primary: oklch(48.8% 0.217 264.4); --color-on-primary: oklch(100% 0 0);
36
+ --color-primary-hover: oklch(43.8% 0.200 264.4);
37
+ --color-accent: oklch(51.1% 0.086 186.4); --color-on-accent: oklch(100% 0 0);
41
38
 
42
39
  /* Status */
43
- --color-success: #22c55e;
44
- --color-warning: #f59e0b;
45
- --color-error: #ef4444;
40
+ --color-success: oklch(52.7% 0.137 150.1); --color-on-success: oklch(100% 0 0);
41
+ --color-warning: oklch(55.5% 0.146 49.0); --color-on-warning: oklch(100% 0 0);
42
+ --color-error: oklch(53.5% 0.203 27.6); --color-on-error: oklch(100% 0 0);
46
43
 
47
44
  /* Border */
48
- --color-border: #e4e4e7;
49
- --color-border-hover: #d4d4d8;
50
- --color-border-focus: #2563eb;
45
+ --color-border: oklch(92.0% 0.004 286.3);
46
+ --color-border-hover: oklch(87.0% 0.006 286.3);
47
+ --color-border-focus: oklch(48.8% 0.217 264.4);
48
+
49
+ /* Type scale — product register: fixed ratio ~1.2 */
50
+ --text-xs: 0.75rem; --text-sm: 0.875rem; --text-base: 1rem; --text-lg: 1.125rem;
51
+ --text-xl: 1.375rem; --text-2xl: 1.625rem; --text-3xl: 2rem;
52
+
53
+ /* Spacing — 4pt grid */
54
+ --space-1: 4px; --space-2: 8px; --space-3: 12px; --space-4: 16px;
55
+ --space-5: 20px; --space-6: 24px; --space-8: 32px; --space-10: 40px;
56
+ --space-12: 48px; --space-16: 64px;
57
+
58
+ /* Radius */
59
+ --radius-sm: 6px; --radius-md: 8px; --radius-lg: 12px; --radius-full: 9999px;
60
+
61
+ /* Motion */
62
+ --duration-fast: 120ms; --duration-normal: 180ms;
63
+ --ease-standard: cubic-bezier(0.2, 0, 0.2, 1);
51
64
 
52
65
  /* Shadow */
53
66
  --shadow-sm: 0 1px 2px 0 rgb(0 0 0 / 0.05);
54
67
  --shadow-md: 0 4px 6px -1px rgb(0 0 0 / 0.07), 0 2px 4px -2px rgb(0 0 0 / 0.05);
55
- --shadow-lg: 0 10px 15px -3px rgb(0 0 0 / 0.08), 0 4px 6px -4px rgb(0 0 0 / 0.04);
56
68
  }
57
69
 
58
70
  @media (prefers-color-scheme: dark) {
59
71
  :root {
60
- --color-bg: #09090b;
61
- --color-surface: #18181b;
62
- --color-surface-elevated: #27272a;
63
- --color-surface-sunken: #09090b;
64
- --color-text: #fafafa;
65
- --color-text-secondary: #a1a1aa;
66
- --color-text-tertiary: #71717a;
67
- --color-primary-muted: #1e3a5f;
68
- --color-border: #27272a;
69
- --color-border-hover: #3f3f46;
70
- --shadow-sm: 0 1px 2px 0 rgb(0 0 0 / 0.3);
71
- --shadow-md: 0 4px 6px -1px rgb(0 0 0 / 0.4);
72
- --shadow-lg: 0 10px 15px -3px rgb(0 0 0 / 0.5);
72
+ --color-bg: oklch(14.1% 0.004 285.8); /* #09090b */
73
+ --color-on-bg: oklch(98.5% 0 0);
74
+ --color-surface: oklch(21.0% 0.006 285.9); --color-on-surface: oklch(98.5% 0 0);
75
+ --color-card: oklch(27.4% 0.005 286.0); --color-on-card: oklch(92.0% 0.004 286.3);
76
+ --color-muted: oklch(21.0% 0.006 285.9); --color-on-muted: oklch(71.2% 0.013 286.1);
77
+ --color-primary: oklch(71.4% 0.143 254.6); --color-on-primary: oklch(18.3% 0.031 263.4);
78
+ --color-accent: oklch(78.5% 0.133 181.9); --color-on-accent: oklch(22.5% 0.036 182.4);
79
+ --color-success: oklch(80.0% 0.182 151.7); --color-on-success: oklch(26.6% 0.063 152.9);
80
+ --color-warning: oklch(83.7% 0.164 84.4); --color-on-warning: oklch(23.5% 0.047 73.4);
81
+ --color-error: oklch(71.1% 0.166 22.2); --color-on-error: oklch(19.9% 0.061 24.7);
82
+ --color-border: oklch(27.4% 0.005 286.0);
83
+ --color-border-hover: oklch(37.0% 0.012 285.8);
73
84
  }
74
85
  }
75
86
  ```
76
87
 
77
88
  ## Typography
78
89
 
79
- - **Headings**: `Inter, -apple-system, BlinkMacSystemFont, sans-serif`, weight 600
80
- - **Body**: `Inter, -apple-system, BlinkMacSystemFont, sans-serif`, weight 400
81
- - **Code**: `JetBrains Mono, Menlo, monospace`, weight 400
82
-
83
- | Level | Size | Weight | Line-height | Letter-spacing | Use |
84
- |---|---|---|---|---|---|
85
- | h1 | 2.25rem (36px) | 700 | 1.2 | -0.025em | Page title |
86
- | h2 | 1.5rem (24px) | 600 | 1.3 | -0.02em | Section header |
87
- | h3 | 1.25rem (20px) | 600 | 1.4 | -0.015em | Card title |
88
- | body-lg | 1.125rem (18px) | 400 | 1.6 | 0 | Hero subtitle |
89
- | body | 1rem (16px) | 400 | 1.5 | 0 | Default text |
90
- | body-sm | 0.875rem (14px) | 400 | 1.5 | 0 | Secondary text |
91
- | caption | 0.75rem (12px) | 500 | 1.4 | 0.02em | Labels, badges |
90
+ Product register: a familiar neutral UI face is CORRECT here — the user is reading data, not admiring the letterforms. Do not import a display face for a dashboard.
92
91
 
93
- ## Spacing
92
+ - **UI / Body**: `Inter, ui-sans-serif, system-ui, sans-serif`, weight 400
93
+ - **Headings**: same family, weight 600 (hierarchy comes from weight + color, not a second face)
94
+ - **Code / numerics**: `JetBrains Mono, ui-monospace, monospace`, weight 400 — tabular figures for any column of numbers
94
95
 
95
- 4px base grid: `4 / 8 / 12 / 16 / 20 / 24 / 32 / 40 / 48 / 64 / 80 / 96`
96
+ Fixed scale, adjacent step ratio ~1.2 (never a 3x display jump that is the brand register):
96
97
 
97
- ## Borders & radius
98
-
99
- - Default radius: `8px`
100
- - Small radius: `6px` (badges, tags)
101
- - Large radius: `12px` (cards, modals)
102
- - Full radius: `9999px` (pills, avatars)
103
- - Border width: `1px`
98
+ | Level | Token | Size | Weight | Line-height | Tracking | Use |
99
+ |---|---|---|---|---|---|---|
100
+ | h1 | `--text-3xl` | 32px | 600 | 1.25 | -0.02em | Page title |
101
+ | h2 | `--text-2xl` | 26px | 600 | 1.3 | -0.015em | Section header |
102
+ | h3 | `--text-xl` | 22px | 600 | 1.35 | -0.01em | Card title |
103
+ | body | `--text-base` | 16px | 400 | 1.5 | 0 | Default text |
104
+ | body-sm | `--text-sm` | 14px | 400 | 1.5 | 0 | Table cells, secondary |
105
+ | caption | `--text-xs` | 12px | 500 | 1.4 | 0.02em | Labels, badges |
104
106
 
105
107
  ## Component patterns
106
108
 
107
109
  ### Buttons
108
- - Primary: `bg-primary text-white`, hover darkens 10%, active darkens 15%, disabled opacity 0.5
109
- - Secondary: `bg-transparent border-default text-primary`, hover bg-surface-sunken
110
- - Ghost: no border, hover bg-surface-sunken
111
- - Height: 36px (sm), 40px (md), 44px (lg)
110
+ - Primary: `background: var(--color-primary); color: var(--color-on-primary)`; hover `--color-primary-hover`; disabled opacity 0.5
111
+ - Secondary: transparent fill, `--color-border`, text `--color-primary`; hover fill `--color-muted`
112
+ - Ghost: no border; hover fill `--color-muted`
113
+ - Height: 32px (sm), 36px (md), 40px (lg) — product register: compact hit targets beat airy ones
112
114
  - Padding: 12px horizontal (sm), 16px (md), 20px (lg)
113
- - Font: body-sm weight 500
115
+ - Font: `--text-sm` weight 500
114
116
 
115
117
  ### Cards
116
- - `bg-surface border-default radius-lg shadow-sm`
117
- - Hover: `shadow-md border-hover`
118
- - Padding: 20px (compact), 24px (default)
118
+ - `background: var(--color-card); color: var(--color-on-card); border: 1px solid var(--color-border); border-radius: var(--radius-lg)`
119
+ - Hover: `--shadow-md` + `--color-border-hover`
120
+ - Padding: 16px (compact), 20px (default) — never both a 1px hairline border AND a wide (≥16px blur) shadow; pick one elevation language
119
121
 
120
122
  ### Inputs
121
- - Height: 40px
122
- - `bg-surface border-default radius-md`
123
- - Focus: `border-focus shadow(0 0 0 3px primary-muted)`
124
- - Error: `border-error`
123
+ - Height: 36px
124
+ - `background: var(--color-surface); border: 1px solid var(--color-border); border-radius: var(--radius-md)`
125
+ - Focus: `--color-border-focus` + a 2px focus ring at 2px offset
126
+ - Error: `--color-error` border + an `--color-on-error`-legible message
125
127
 
126
128
  ## Motion
127
129
 
128
- - `--transition-fast: 150ms cubic-bezier(0.4, 0, 0.2, 1)` hover, focus
129
- - `--transition-normal: 200ms cubic-bezier(0.4, 0, 0.2, 1)` — expand, collapse
130
- - `--transition-slow: 300ms cubic-bezier(0.4, 0, 0.2, 1)` — modals, drawers
130
+ Product register: motion CONFIRMS an action, it never announces the page. No mount/entrance animation, no staggered reveal, no scroll-triggered choreography — that is the brand register.
131
+
132
+ - `--duration-fast: 120ms` + `--ease-standard` — hover, focus, press
133
+ - `--duration-normal: 180ms` + `--ease-standard` — expand/collapse, popover, drawer
134
+ - Never animate `width` / `height` / `padding` / `margin` (they force layout) — animate `transform` and `opacity`.
131
135
 
132
136
  ## Do
133
137
 
134
- - Let whitespace do the work. 24-32px between sections minimum.
138
+ - Let whitespace do the work between GROUPS (16–24px); keep rows dense (8–12px).
135
139
  - One accent color, used at most 2x per screen.
136
140
  - Subtle borders over heavy shadows.
137
- - Monochrome icons (Lucide stroke width 1.5).
141
+ - Monochrome icons from ONE library at ONE stroke weight (this pack: Lucide, stroke 1.5).
138
142
 
139
143
  ## Don't
140
144
 
141
- - Purple/pink gradient hero backgrounds.
142
- - More than 2 font weights per page.
143
- - Shadows heavier than `shadow-md` on cards.
144
- - Icon + text + icon on every row.
145
- - Rounded everything (keep some sharp edges for contrast).
145
+ - Purple/pink gradient hero backgrounds → commit to `--color-primary` as a solid.
146
+ - More than 2 font weights per page → carry hierarchy with size + color instead.
147
+ - Shadows heavier than `--shadow-md` on cards → let the border carry elevation.
148
+ - A mount/entrance animation on a dashboard route → motion only on interaction.
@@ -5,8 +5,11 @@ domain: design-systems
5
5
  category: design-systems
6
6
  difficulty: intermediate
7
7
  tags: [luxury, premium, refined, elegant, serif, dark, single-accent, generous-space, design-systems, palette, patterns]
8
+ register: [brand]
9
+ icon-library: Heroicons
10
+ icon-stroke: 1
8
11
  quality_score: 72
9
- last_updated: 2026-06-19
12
+ last_updated: 2026-07-14
10
13
  last_note: high-end refined aesthetic
11
14
  ---
12
15
  # Premium Luxury
@@ -21,31 +24,66 @@ last_note: high-end refined aesthetic
21
24
 
22
25
  ```css
23
26
  :root {
24
- --color-bg: #0b0b0c;
25
- --color-surface: #131316;
26
- --color-surface-elevated: #1b1b1f;
27
- --color-text: #f5f3ef; /* 暖白,非纯白 */
28
- --color-text-secondary: #b8b3a8;
29
- --color-text-tertiary: #76726a;
30
- --color-primary: #c8a96a; /* 单一精炼金 —— 唯一强调,面积极小 */
31
- --color-primary-hover: #d9bd84;
32
- --color-accent: #c8a96a; /* 不引入第二强调色 */
33
- --color-success: #7d9a76;
34
- --color-error: #b5544e;
35
- --color-border: #26262b;
36
- --color-border-accent: rgba(200,169,106,0.4);
37
- --radius: 4px; /* 极小圆角,克制 */
38
- --shadow-soft: 0 24px 60px rgba(0,0,0,0.5);
27
+ /* Surfaces + paired foregrounds — 克制是奢华的本质 */
28
+ --color-bg: oklch(15.0% 0.002 286.1);
29
+ --color-on-bg: oklch(96.5% 0.006 84.6); /* 暖白,非纯白 */
30
+ --color-surface: oklch(18.8% 0.006 285.8);
31
+ --color-on-surface: oklch(96.5% 0.006 84.6);
32
+ --color-card: oklch(22.4% 0.008 285.8);
33
+ --color-on-card: oklch(88.6% 0.012 84.6);
34
+ --color-muted: oklch(17.9% 0.006 285.8);
35
+ --color-on-muted: oklch(70.8% 0.012 76.6);
36
+
37
+ --color-primary: oklch(74.8% 0.089 84.2); /* 单一精炼金 —— 唯一强调,面积极小 */
38
+ --color-on-primary: oklch(19.5% 0.024 84.0);
39
+ --color-primary-hover: oklch(80.0% 0.080 84.2);
40
+ --color-accent: oklch(74.8% 0.089 84.2); /* 不引入第二强调色 */
41
+ --color-on-accent: oklch(19.5% 0.024 84.0);
42
+
43
+ --color-success: oklch(71.7% 0.065 139.3);
44
+ --color-on-success: oklch(19.9% 0.038 140.1);
45
+ --color-warning: oklch(75.5% 0.103 82.1);
46
+ --color-on-warning: oklch(22.4% 0.042 87.2);
47
+ --color-error: oklch(66.3% 0.123 25.2);
48
+ --color-on-error: oklch(20.0% 0.054 28.7);
49
+
50
+ --color-border: oklch(26.5% 0.006 285.8);
51
+ --color-border-accent: oklch(74.8% 0.089 84.2 / 0.4);
52
+
53
+ /* Type scale — 衬线标题 × 无衬线正文的对比 */
54
+ --text-xs: 0.75rem; --text-sm: 0.875rem; --text-base: 1rem;
55
+ --text-lg: 1.25rem; --text-xl: 1.625rem; --text-2xl: 2.25rem;
56
+ --text-3xl: 3.25rem; --text-display: 5rem;
57
+
58
+ /* Spacing — 4pt grid */
59
+ --space-1: 4px; --space-2: 8px; --space-3: 12px; --space-4: 16px;
60
+ --space-6: 24px; --space-8: 32px; --space-12: 48px; --space-16: 64px;
61
+ --space-24: 96px;
62
+
63
+ --radius-sm: 2px; --radius-md: 4px; --radius-lg: 4px; --radius-full: 9999px; /* 极小圆角,克制 */
64
+
65
+ --duration-fast: 200ms;
66
+ --duration-normal: 400ms;
67
+ --duration-reveal: 900ms; /* 慢而顺滑 */
68
+ --ease-standard: cubic-bezier(0.22, 1, 0.36, 1);
69
+
70
+ --shadow-soft: 0 24px 60px rgb(0 0 0 / 0.5);
39
71
  }
40
72
 
41
73
  @media (prefers-color-scheme: light) {
42
74
  :root {
43
- --color-bg: #faf8f3; /* 暖象牙白(非奶油 AI 米色——靠极低饱和的真象牙 + 金强调区分) */
44
- --color-surface: #ffffff;
45
- --color-text: #1a1814;
46
- --color-text-secondary: #5c574d;
47
- --color-primary: #9a7b3f; /* 浅底下加深金以保对比 */
48
- --color-border: #e7e2d6;
75
+ --color-bg: oklch(97.9% 0.007 88.6); /* 暖象牙白(非奶油 AI 米色——极低饱和的真象牙 + 金强调区分) */
76
+ --color-on-bg: oklch(21.0% 0.008 84.6);
77
+ --color-surface: oklch(100% 0 0); --color-on-surface: oklch(21.0% 0.008 84.6);
78
+ --color-card: oklch(100% 0 0); --color-on-card: oklch(35.4% 0.017 82.3);
79
+ --color-muted: oklch(94.9% 0.012 91.5); --color-on-muted: oklch(41.1% 0.017 84.6);
80
+ --color-primary: oklch(54.9% 0.083 81.1); /* 浅底下加深金以保对比 */
81
+ --color-on-primary: oklch(100% 0 0);
82
+ --color-accent: oklch(54.9% 0.083 81.1); --color-on-accent: oklch(100% 0 0);
83
+ --color-success: oklch(48.2% 0.091 141.4); --color-on-success: oklch(100% 0 0);
84
+ --color-warning: oklch(49.2% 0.096 80.3); --color-on-warning: oklch(100% 0 0);
85
+ --color-error: oklch(51.8% 0.135 26.8); --color-on-error: oklch(100% 0 0);
86
+ --color-border: oklch(90.5% 0.010 88.6);
49
87
  }
50
88
  }
51
89
  ```
@@ -65,10 +103,6 @@ last_note: high-end refined aesthetic
65
103
  | body | 1rem (16px) | 400 | 1.7 | 0 | 正文 |
66
104
  | overline | 0.75rem (12px) | 500 | 1.2 | 0.18em | 标签,ALL CAPS,宽字距 |
67
105
 
68
- ## Spacing
69
-
70
- 8px 基,**慷慨**:`8 / 16 / 32 / 64 / 96 / 160 / 240`。Hero 与区块用 160px+ 垂直留白。留白是主角。
71
-
72
106
  ## Layout
73
107
 
74
108
  - 大量负空间;少而精的元素;严格对齐与基线网格。