Design System · v1.0

黑曜石暗夜

一套以近黑为底、紫色为点的暗色设计风格。 克制、精准、有呼吸感——适合长时间阅读与深度工作。

Inter + PingFang SC 17px / 1.7 line-height 8px radius 80px section gap
设计灵感来自 Linear Vercel Raycast

什么场景适合这套风格

暗色系统对眼睛友好,适合信息密度高、用户需要长时间停留的产品。

知识管理工具

笔记、文档、Wiki。用户需要专注阅读,暗色降低视觉噪音。

开发者工具

IDE、终端、API 控制台。符合程序员的审美习惯与使用场景。

数据看板

分析平台、监控面板。暗色背景让数据可视化更突出、更易读。

专注类应用

写作、任务管理、番茄钟。减少视觉干扰,帮助用户进入心流。

创作平台

视频剪辑、音乐制作、设计工具。暗色让创作内容成为视觉焦点。

通讯与协作

即时消息、视频会议。长时间使用下暗色对眼睛更为友好。

标题层级与正文排版

统一的字重、字距和行高构建清晰的视觉层次。

H1 — 40px / 700
黑曜石暗夜设计系统
H2 — 28px / 700
简洁而有力的暗色美学
H3 — 20px / 600
克制的用色与精准的间距
H4 — 16px / 600
边框与背景的微妙过渡
Body — 17px / 400 / 1.7
正文字号 17px,行高 1.7,这个组合在中文排版中有良好的可读性。段落之间保持足够的呼吸空间,让读者可以长时间阅读而不感到疲劳。
Secondary — 15px / #a0a0a8
次级文字用于说明、标注和补充信息,颜色稍淡但仍保持清晰可读。
Caption — 13px / #606068
最弱的文字层级,用于时间戳、版权信息、辅助标注等低优先级内容。

引用块与标注卡片

左侧色条区分语义,背景深于页面,形成轻微的层次感。

核心原则

暗色系统不是简单地把背景变黑——它需要精心校准每一层背景的明度关系,让界面在低光环境下依然具有良好的层次感和可读性。

设计提示

在暗色模式下,避免使用纯白文字(#ffffff),改用略带暖色或冷色的近白(如 #f0f0f0),可以减少屏幕光的刺激感。

注意事项

强调色饱和度不宜过高。在深色背景上,中等饱和度的紫色(#7c6af7)比纯紫(#6600ff)更耐看,对比度也更合规。

最佳实践

使用渐进式的背景层级(bg-0 → bg-1 → bg-2 → bg-3),而非单一黑色背景,可以让界面更有空间感和可操作性。

特性卡片(2 x 3 网格)

悬停时边框发光,右上角渐变晕染,紫色 accent 贯穿始终。

01

四层背景系统

bg-0 到 bg-3 四个层级,明度差约 4-8 个色阶,形成清晰的视觉层次而不刺眼。

02

三级文字颜色

主文 #f0f0f0、次文 #a0a0a8、弱文 #606068,对应三种信息优先级。

03

单一强调色

仅用紫色 #7c6af7 作为系统强调色,通过透明度变体创造层次,避免颜色噪音。

04

毛玻璃导航

导航栏使用 backdrop-filter blur,在滚动时产生自然的景深感,不遮挡内容。

05

精准的 border

边框颜色 #2a2a30,在深色背景上可见但不突兀,悬停时过渡到紫色发光版本。

06

等宽字体代码块

JetBrains Mono 优先,配合语义化的语法着色,代码块在暗色环境中清晰易读。

代码块与语法高亮

每种语法类型对应固定色彩角色,而非随意分配颜色。

typescript
// 黑曜石设计 Token 定义
interface DesignToken {
  name: string;
  value: string;
  category: "background" | "text" | "accent";
}

const obsidianTokens: DesignToken[] = [
  { name: "bg-0",    value: "#0e0e10", category: "background" },
  { name: "text-0", value: "#f0f0f0", category: "text"       },
  { name: "accent", value: "#7c6af7", category: "accent"     },
];

function getToken(name: string): DesignToken | undefined {
  return obsidianTokens.find(
    (t) => t.name === name
  );
}

// 根据类别批量提取 Token
const bgTokens = obsidianTokens
  .filter(t => t.category === "background")
  .map(t => t.value);

export { obsidianTokens, getToken, bgTokens };

数据统计面板

数字是界面的锚点,用字号和字重赋予它足够的视觉重量。

项目概览 — 2026 Q1 实时更新
2.4K
活跃用户
+18.3%
98%
可用率
+0.2%
142ms
平均响应
+12ms
9/10
用户满意度
+0.4
功能完成度
78%
测试覆盖率
61%
文档完整度
45%
性能目标
92%

全部设计 Token

所有颜色均在 CSS :root 中定义,语义化命名,便于维护与扩展。

背景层级 Background
bg-0
#0e0e10
bg-1
#141416
bg-2
#1c1c1f
bg-3
#242428
文字层级 Text
text-0
#f0f0f0
text-1
#a0a0a8
text-2
#606068
边框 Border
border
#2a2a30
border-sub
#222226
强调色 Accent
accent
#7c6af7
accent-dim
rgba / 12%
accent-glow
rgba / 25%
语义色 Semantic
success
#4ede84
warning
#e8a44a
danger
#f47068
info
#4a9be8