跳转至

Design Tokens 规范

本规范定义 Web App 的视觉 token 体系,包括颜色、字体、字号、间距、圆角、边框、阴影、动效、断点与图表配色。页面与组件不得直接依赖临时字面量样式,必须通过语义 token 使用统一的视觉语言。


1. Token 体系设计原则

  1. 页面与业务组件只消费语义 token,不直接消费品牌字面量。
  2. token 的命名应以语义为中心,而不是以颜色名称或页面名称为中心。
  3. 同一语义只能有一个主推荐 token,避免并列近义命名。
  4. token 必须可映射到当前 web/app/globals.css 的 CSS variable 体系。
  5. token 的新增、删除和重命名必须同步更新 Handbook 与实现。

2. Token 分层模型

设计系统中的 token 应分为三层:

  1. Source layer:品牌与基础色值、基础尺寸、基础时长。
  2. Semantic layerbackgroundforegroundprimarybordersurfacesuccess 一类面向语义的命名。
  3. Implementation layer:落地为 web/app/globals.css 中的 CSS variables 与受控 utility class。

页面代码只允许使用 semantic layer,不允许在 JSX 中自行创建新的视觉语义。

3. 颜色 Token 表

3.1 Canvas / Surface

Token 语义用途 Light 值 允许场景 实现落点 备注
background 全局主画布 #eef1fb 页面背景、壳层背景 --background / --color-background 从现有 landing 基调收敛
surface 主内容承载层 #ffffff 卡片、表单、主面板 --card / --color-card 主要信息容器
surface-muted 次级表面 #f8f9fd 辅助块、次级说明容器 新增 semantic token 替代页面局部浅灰背景
surface-elevated 强层级浮层 rgba(255,255,255,0.86) 浮层、摘要卡、轻玻璃面板 新增 semantic token 应与 blur 一起使用
popover 叠层容器 #ffffff popover、dropdown、dialog --popover 与 surface 接近但优先级更高

3.2 Text

Token 语义用途 Light 值 允许场景 实现落点 备注
foreground 主阅读文本 #08112a 标题、正文、主数据 --foreground / --color-foreground 主阅读层
muted-foreground 次级文本 #5a6680 辅助文案、说明文、占位文案 --muted-foreground 低优先级内容
technical-label 技术注释文本 #45515e mono 标签、trace、code meta 新增 semantic token 避免复用普通 muted 文本
inverse-foreground 深底浅字 #ffffff 深色 CTA、深色底 banner semantic alias 用于反白场景

3.3 Brand / Interaction

Token 语义用途 Light 值 允许场景 实现落点 备注
primary 主交互强调色 #2855f5 主按钮、主链接、主 focus --primary / --color-primary 统一品牌蓝
primary-hover 主交互 hover #1e45e0 hover 态 semantic alias 页面不得硬编码
primary-active 主交互 active #1838cc pressed 态 semantic alias 页面不得硬编码
primary-soft 轻强调背景 #eef2ff icon tray、selected soft state semantic alias 轻量品牌承托层
primary-glow 品牌辉光 rgba(40,85,245,0.18) hero/auth/summary glow semantic alias 不可滥用在 dense data 页面
focus-ring 焦点环 rgba(40,85,245,0.18) focus-visible --ring / semantic alias 替代页面局部 ring recipe

3.4 Border / Feedback / Chart

Token 语义用途 Light 值 允许场景 实现落点 备注
border 默认边框 rgba(8,17,42,0.09) 卡片、输入框、分割线 --border / --color-border 主边界语言
border-strong 强分隔 rgba(8,17,42,0.16) 高优先级结构边界 新增 semantic token 不作为默认边框
success 成功反馈 #0fb981 success badge、验证成功 --success 状态色
warning 警示反馈 #f59e0b warning 提示 --warning 状态色
info 信息提示 #2855f5 info banner、hint --info 可与 primary 同源
destructive 错误/危险 #d4183d destructive 操作、错误提示 --destructive 状态色
chart-1 ~ chart-5 主图表序列 见实现 图表系列色 --chart-* 应保持对比与秩序

4. Typography Token 表

Token / Style 字体 权重 尺寸 行高 Tracking 场景 替换说明
display-xl Fraunces 600 56-64px 1.02 -0.03em hero / 空状态大标题 仅展示用途
display-lg Fraunces 600 40-48px 1.08 -0.02em 关键区块标题 不能用于 dense page
heading-lg DM Sans 600 28-32px 1.15 -0.02em 页面一级标题 App 主标题
heading-md DM Sans 600 22-24px 1.2 -0.01em 面板标题 内容区块
section-title DM Sans 600 18-20px 1.3 -0.01em 子区块标题 高频使用
body-md DM Sans 400 14-16px 1.55 0 正文 默认 body
body-sm DM Sans 400 13-14px 1.5 0 次级正文 辅助说明
meta DM Sans 500 12px 1.4 0.01em 元信息、辅助标签 替换零散 11px 正文
eyebrow Mono 500 10-11px 1.3 0.18em 小写标题、系统标签 统一替代 ad hoc uppercase label
code-sm Mono 500 11-12px 1.45 0 SQL、trace、timestamp 技术文本
metric-lg DM Sans 700 24-28px 1.1 -0.02em 指标值、关键数字 数字优先

字体使用规则

  1. DM Sans 是默认 UI / body 字体。
  2. Fraunces 只用于展示性标题和有限高强调区域。
  3. Mono 只用于技术语义,不应用作普通描述文本。
  4. 不允许继续在页面中自由定义 text-[10px]text-[11px] 作为长期方案。

5. Spacing Token 表

Token 语义用途 常见组合
space-2 0.5rem 紧密间距 icon + label
space-3 0.75rem 小模块垂直节奏 badge row
space-4 1rem 默认组件间距 form stack
space-5 1.25rem 卡片内部舒适间距 card section
space-6 1.5rem 主要区块内边距 summary block
space-8 2rem 页面级区块间距 panel stack
space-10 2.5rem 大区块间距 overview sections
content-max 80rem 主内容最大宽度 overview / landing-like sections
shell-gutter 1rem / 1.5rem app shell 内边距 responsive shell

6. Radius / Border / Elevation Token 表

6.1 Radius

Token 用途
radius-sm 12px 输入框、badge、小按钮
radius-md 16px 默认按钮、导航块、内嵌卡片
radius-lg 20px 主卡片、浮层、摘要面板
radius-pill 999px 状态 pill、chip

6.2 Border / Elevation

Token 用途 限制
border-default 1px / rgba(8,17,42,0.09) 默认结构边界 常规使用
border-strong 1px / rgba(8,17,42,0.16) 强结构边界 仅结构强调
shadow-sm 0 1px 3px rgba(8,17,42,0.04) 轻量控件 不用于大卡片
shadow-md 0 4px 16px rgba(8,17,42,0.06) 默认卡片 主内容块
shadow-lg 0 8px 30px rgba(8,17,42,0.08) 浮层 / 强调面板 稀缺使用
shadow-brand-glow 0 24px 64px rgba(40,85,245,0.10) 品牌高亮 仅 auth/summary/hero-like surfaces

7. Motion / Breakpoint / Z-Index Token 表

7.1 Motion

Token 时长 Easing 用途 Reduced Motion
motion-micro 150-180ms ease-out hover / focus / subtle toggle 直接淡化
motion-state 180-220ms ease-out pressed / open / close 降为 opacity transition
motion-panel 240-320ms cubic-bezier(0.25,0.46,0.45,0.94) panel reveal 保留最小移动
motion-stagger 500-720ms cubic-bezier(0.25,0.46,0.45,0.94) section entrance 改为静态显示

7.2 Breakpoints / Z-Index

Token 用途
bp-sm 640px 移动端增强布局
bp-md 768px 平板布局
bp-lg 1024px desktop shell
bp-xl 1280px 宽屏分析面
z-header 30 顶部导航
z-sidebar 20 左侧栏
z-popover 40 popover / dropdown
z-modal 50 dialog / sheet
z-toast 60 toast / notification

8. 旧值迁移映射

旧实现 新 token 影响区域 优先级
#2855f5 in JSX primary auth、landing-like blocks、CTA P0
#1e45e0 / #1838cc primary-hover / primary-active 按钮状态 P0
text-[10px] eyebrow / meta session/chat/results P0
text-[11px] meta / code-sm session/chat/results P0
var(--landing-*) page-only usage unified semantic tokens landing-derived surfaces P1
页面局部 shadow recipe shadow-sm / shadow-md / shadow-lg auth、cards、results P1

9. 实现约束

  1. token 的实现源头统一落在 web/app/globals.css
  2. 页面 JSX 中不允许直接新增新的品牌色或状态色字面量。
  3. 共享组件只能消费 semantic token,不得反向依赖页面私有 CSS 变量。
  4. dark mode 在本规范中只记录为后续派生任务,不在本轮给出完整配色表。