Skip to content

设计令牌

ui/styles/app.css 定义的 CSS 自定义属性全表。三个站的 app.css@import 它; 首页 apps/home/index.html 内联了同源的一份并额外定义了地貌灰阶。

品牌口径(什么时候能用橙、标志怎么画)见 brand-identity.md

色值前的小色块是 npm run swatches 生成的图片(docs/assets/swatch/<hex>.svg)—— Markdown 没有颜色,GitHub 那个反引号色块只在 issue / PR 里生效,.md 里不渲染。 改了色值跑一次脚本回填,别手改图。

1. 中性表面 —— 零色相灰

取自 Cloudflare Radar 的生产设计系统(代号 Kumo),无任何蓝调或暖调。

令牌lightdark用途
--bg #fafafa #0a0a0a页面底
--bg-elev #ffffff #121212卡片
--bg-elev-2 #f2f2f2 #1d1d1d内嵌区
--border #e8e8e8 #333333默认边框
--border-strong #d9d9d9 #4a4a4a强调边框
--text #1d1d1d #f2f2f2正文
--text-dim #595959 #a6a6a6次级
--text-faint #797979 #737373三级

两个容易踩的点:

  • 暗色下卡片( #121212亮于页面( #0a0a0a)。这是 Radar 暗色的招牌观感,反过来 会立刻失真。
  • --border 在暗色取的是 Kumo 的 line 32% 而非 hairline 26.9%。用 hairline 当默认 边框会让每张暗色卡片都欠边。

2. 品牌色

令牌lightdark用途
--accent 燃素橙 #f6821f #f6821f品牌 / 强调,主按钮
--accent-hover #e3710f #ff922e悬停
--accent-2 燃素金 #fbad41 #fbad41只与橙成对,永不单独使用
--accent-soft #fdf0e3 #2a1f12焦点环、软底
--link #0051c3 #82b6ff超链接

链接恒蓝,橙不承担链接语义。 橙 = 品牌 / 强调(按钮、开关、激活导航), 蓝 = 可点。

3. 状态色

令牌lightdark
--ok #0a7d5a #3fb950
--warn #9a6700 #d29922
--bad #c5292e #f85149
--down #b01218 #f0484d
--unknown #737373 #999999

徽章底色:--ok-bg / --warn-bg / --bad-bg / --neutral-bg--down-fill 是实心徽章的填充,比文字令牌更深,保证白字在两个主题下都过对比度。

4. 图表调色板

分成语义数量两套,混用是常见错误。

语义色(只给状态类图:健康、RPKI、churn)

--c-ok --c-warn --c-bad --c-down --c-unknown --c-accent

数量序列(流量、路由数、份额) —— 按 Kumo 分类顺序 蓝 → 青 → 橙,这样橙在图表里 依然读作「品牌 / 强调」,绿红保留给状态:

令牌lightdark
--c-data-1 #0045a6 #4693ff
--c-data-2 #30b6da #73cee6
--c-data-3 #f6821f #f6821f
--c-data-4 #bcbf02 #d0d444
--c-data-5 #9564bf #b18ae0
--c-data-other #003681 #82b6ff

--c-data-otherShareBar 的「其他」段。

--on-c-*画在对应色块上的文字色(地图聚簇计数点等)。

网格与轴:定义成文字色的 alpha,因此自动适配主题,不需要分别给亮暗值。

令牌对应 Radar
--c-gridcolor-mix(text 10%)chart-line
--c-grid-dashcolor-mix(text 15%)chart-dashed-line
--c-axis-labelcolor-mix(text 65%)chart-label

这套「黑/白随主题、只调 alpha」的做法是 Radar 干净观感的来源,值得原样保留。

5. 排版

根字号 16px,与 Radar 生产一致。

曾把 font-size 设成 14px,结果每个按 Radar 校准过的 rem 都渲染成 87.5% (卡片 padding 21px vs 24、标题 17.5px vs 20),整套 UI 读起来像被均匀缩小的克隆版。 密度改为逐角色用 --fs-* 调。

令牌角色
--fs-micro0.6875rem (11px)chip / 标记,字号下限
--fs-caption0.75rem (12px)图例、标签、元信息、as-of
--fs-sm0.875rem (14px)表格、控件、小正文
--fs-stat-sm1.25rem统计值
--fs-stat-lg1.5rem主角统计值

字体:--sans = Inter Variable(@fontsource-variable/inter,自托管), --mono = 系统等宽栈。数据一律用 mono + tabular-nums

6. 形状与层次

令牌
--radius-lg / --radius / --radius-sm8px / 6px / 4px
--shadow卡片级微阴影
--shadow-lg浮层(tooltip / dropdown / modal)
--ring焦点环

表面是 flat、border-driven 的:阴影只留给浮层,平面卡片靠边框区分。

--syn-str / --syn-num 是 JSON 查看器的语法色,不属于状态调色板,不要拿来 表示健康度。

7. 首页专有令牌

apps/home/index.html 是自包含单页,令牌内联,值与本表同源,另有一组只有它用的 台地灰阶:

令牌lightdark
--mesa-far #ececec #161616
--mesa-mid #dedede #1f1f1f
--mesa-near #cccccc #2a2a2a

台地剪影是「远山淡影」的灰阶层次,不是彩色插画。

8. 图表工艺参数

这些不是 CSS 令牌,而是从 Radar 生产构建里读出的实现参数,ui/charts/ 的组件按此 校准。

折线图

主线宽2.5–3px
次线宽2px
上期对比线同色dash [4,4],1.5–1.8px
y 轴 domain[0, 'max']
轴标签字号--fs-micro

对比线的图例 swatch 是虚线形、灰色,且可点击开关

比例条(ShareBar

默认高30px
段间隙2px
圆角2px
最小占比0.1%,更小的段折进「其他」(用 --c-data-other
最大类别数20
悬停非悬停段 opacity → 0.75;悬停段 scaleY(1.11) 弹性放大,cubic-bezier(0.175,0.885,0.32,1.275),尊重 prefers-reduced-motion
段内文字仅在实测文字宽度 < 段宽时渲染;标签 11px 粗体、数值 10px、60% 透明,深浅底自动选黑/白字

条上方图例与条 hover 双向联动;tooltip 带色点 + 标签 + 值 + 百分比。

9. 来源

第 1–6 节的取值于 2026-07-02 从 radar.cloudflare.com 的生产构建(Vite chunk)中 直接提取,非截图目测。Radar 完整色阶(10 级,深 → 浅)留档如下,需要新色时从这里取, 不要自行调色:

blue: #001c43 #002b67 #003681 #0045a6 #0051c3 #086fff #4693ff #82b6ff #b9d6ff #ecf4ff
cyan: #061b20 #0b333e #0d3e4b #115061 #156074 #1e89a5 #30b6da #73cee6 #ace2f0 #e9f7fb
gray: #1d1d1d #313131 #3d3d3d #4a4a4a #595959 #797979 #999999 #b6b6b6 #d9d9d9 #f2f2f2

分类序列(categorical,按顺序取):

#0045a6 #73cee6 #f6821f #bcbf02 #22a121 #e574c3 #9564bf #d8241f #8d5649 #ffe43e

Radar 的蓝色主按钮不跟——主按钮在本项目是燃素橙。