流·Studio 设计系统
本页是 design.md 的可视化样板间。所有 token / 组件均来自 assets/restraint.css —— 看到的就是页面用的。点击色块复制 token,hover / 点击组件看真实交互反馈。
设计哲学
一句话:一台精密设备的工作面板。克制 + 单橙锚点 + 图纸装订线 + Mono 装饰。
三条铁律 // 不可妥协
核心签名 // 4 个不能丢
- 主橙
#fa5d19(Firecrawl 实测)+ 单 hue alpha 阶梯 - 全场 8 px 圆角(Pill 999 例外)
- 主容器左右装订线 + 四角准星
- Mono 装饰
[ 200 OK ]// 05.14[ /v2 ](品牌签名 · Firecrawl 没有)
色彩系统
冷灰底 · 单 hue 橙 · 5 色信号点。点击色块复制 token 名。禁止创建新色值,所有颜色必须用以下 token。
表面 / 背景 // 4 档 · 冷灰无色相
边框 // 3 档 · 差距极小靠语义
3 档相差只 1–2 色阶,肉眼几乎看不出。用语义,不用视觉对比 —— 80% 场景用 --border-faint。
主橙 Heat // 单 hue #fa5d19 + 8 档 alpha
全靠 alpha 叠加,绝不换 hue。hover 不切换深橙,而是用 90% / 16% 这些档位组合。
Accent 多彩点 // 5 色信号 · 限定语义场景
只用于语义信号(代码高亮 / info / 状态色),禁止做大面积装饰 —— 全场依然只有橙色一个 accent。
状态色配套(底 / 边) // 8% / 20% alpha
Selection · Firecrawl 签名细节
页面任何文字选中时,底色 --heat-20 + 字色 --heat。试选下面这行字看效果:
本月营收 ¥327,400 较上月增长 33%,有 5 个项目处于"生成中"状态。其中 2 个需要重新调整模特模板。
Black-Alpha 阶梯
日常用得最多的 token。0–24% 用 rgba(0,0,0,...);32% 起换 rgba(38,38,38,...)(避免叠出"灰中带蓝")。
字体系统 · 中英协作
Inter(英文/数字)+ Alibaba PuHuiTi(中文)+ JetBrains Mono(装饰)。浏览器按字符级 fallthrough,不需要 JS,中英自然分工。
字体族原理 // browser-level character fallthrough
字重档位 // 400 / 500 / 600 · 700 仅徽标
// Bold 700 仅用于 Ctrl K 这种纯英文徽标场景 · 正文严禁 700(中英字重错位会暴露)
字号 / 字重 / 行高(11 档)
数值类必须加 tabular-nums 或 .num。中文正文行高 1.65–1.8。
圆角阶梯
统一 8 px 作为默认主圆角。完全圆 999 px 仅用于 pill / dot。不确定就选 8 · >12 px 直接判错。
间距阶梯
基础栅格 4 px。当不确定 padding 是 16 还是 24 时,选 24。当不确定 margin 是 48 还是 64 时,选 64。
常用阶梯
典型场景
| 场景 | 值 |
|---|---|
| Sidebar 宽度 | 248 px |
| Topbar 高度 | 64 px |
| Content padding | 48 · 28 · 72 |
| 卡片内 padding(大) | 28 · 30 或 24 · 28 |
| 列表行 padding | 14 · 18 ~ 20 · 24 |
| KPI cell padding | 24 · 28 |
| 主区块 margin | 64–104 px |
| 子区块 margin | 36–48 px |
| 卡片网格 gap | 14(子区)/ 24(主区) |
阴影 · 只 3 个允许场景
主 CTA(4 层橙色发光)+ Toast/Dropdown 浮层(白色 6%)。其他场景一律禁阴影。
边框策略 · inside-border
默认边框用 ::before 伪元素绘制(而非真 border),hover 时让 ::before 透明度 → 0,不触发布局抖动。hover 下面的卡看效果。
页面骨架(全站统一)
每个新页面都用同一套 HTML 骨架。shell.js 自动注入 sidebar + topbar,页面只写 <main> 内的 .content 内容。
HTML 模板
<link rel="stylesheet" href="assets/restraint.css">
<link href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700
&family=JetBrains+Mono:wght@400;500&display=swap" rel="stylesheet">
<div class="app">
<aside class="sidebar"><!-- shell.js 注入 --></aside>
<main>
<div class="topbar"><!-- shell.js 注入:crumbs · right --></div>
<div class="content">
<div class="page-head">
<div>
<h1>商品库</h1>
<div class="sub"><span class="mono">// 12 个商品</span> · 描述</div>
</div>
<div class="actions">
<button class="btn">导入</button>
<button class="btn btn-primary">+ 新建商品</button>
</div>
</div>
<div class="section-h">
<h2>最近项目</h2>
<a class="more">[ ALL · 12 ] →</a>
</div>
<!-- 内容 -->
</div>
</main>
</div>
<script src="assets/shell.js" defer></script>
主容器装订线
工作台 / 项目列表 / 商品库 / 流水线主区:左右两条 1 px 边线 + 4 角圆弧内凹 SVG 准星。Modal / 编辑器全屏画布不必加。
// container-demo · max-width: 720 · border-x only
Icon 系统
统一 SVG line icon · stroke 1.5 · linecap round · 颜色通过 currentColor 继承。禁用 emoji / filled icon。
尺寸阶梯 // 5 档
颜色场景 // 通过 currentColor 继承
Icon Box // 快捷入口 / Modal 头部用
胶囊 · 严格 3 级分层
同级别尺寸必须完全一致。pill 永远是 999 px(完全圆),靠 dot 体现状态。
L1 · 大胶囊 // h:28 / fs:13 / dot:8 · 项目状态 / 列表行主标签
L2 · 中胶囊 // h:22 / fs:11.5 / dot:6 ★ 默认
最常用尺寸。卡片内 / 表格内默认。
L3 · 小胶囊 // h:18 / fs:10.5 / dot:5 · KPI 角标
对比 // 同色 3 级并列
输入框 · 5 状态
高 36 px / 圆角 8 / inside-border。focused 时橙色 ring 内嵌 1 px,error 时红边 + 红软底。点击下面字段看真实 focus 反馈。
带图标 / 搜索 // 含 Ctrl K 提示
// 关键坑:左侧 icon 必须 z-index: 2(否则被 input 白底盖住)· Ctrl K 用纯文本不用 ⌘(JetBrains Mono 不带该字形)
表单控件 · Checkbox / Radio / Switch
全部用真 SVG indicator,禁止 border-width / rotate(45deg) 凑对勾(在缩放/字体渲染下会变形)。点击下面控件试试。
Checkbox
Radio
Switch
KPI 统计行 · 4 格
1 行 4 格 grid · 共用一个 inside-border 容器 · 无 gap。列与列之间用 1 px 分隔线。
进度条段位
动 = 在运行,静 = 完成/失败。脉动只给"进行中"(橙)。已完成绿、失败红、未开始灰。
列表行
grid: 56px 1fr auto auto auto · gap 22 · padding 20·24。hover 我看整行底色变化。
Tab · 双层结构
主 Tab 用下划线激活(2 px --heat 横线)。副 Tab 用灰度→彩色 icon 反馈。点击切换。
主 Tab
副 Tab · 灰度→彩色
卡片 / 快捷入口
所有卡片统一 8 px 圆角 · 1 px 边框 · 无阴影。快捷入口含 hover / active 状态。
快捷入口 // hover 我
提示框
白底 · 1 px 虚线边框(dashed)· 8 px 圆角 · 加粗标题 + 正文。
弹窗 Modal
居中 460–480 px · 4 角 SVG 准星 · 8 px 圆角 · backdrop-filter: blur(8px) · 弹性入场。点击下方按钮打开 · ESC / 点击遮罩关闭。
Toast 通知
右下角浮出 · 300ms 弹性入场 · 2400ms 自动消失。触发演示:
Mono 装饰元素
方括号标签 / 双斜杠注释 / 中点连接 —— 这些是流·Studio 独有的"调试视图感",Firecrawl 没有,绝对保留。
方括号标签
注释样式时间戳
命令路径
数值后缀
// 主体大字 + 小字次级用 <small>
ASCII 散点(背景装饰)
· +XX+
+XXXX·
+X·
强调单词上色
本月营收较上月增长 +33%,有 5 个项目处于"生成中"状态。其中 2 个需要重新调整模特模板。
// 关键名词加深一档(不变橙),橙色只留给 CTA
五种页面级布局模式
页面骨架统一,内容区布局按用途分 5 类。新页面归类后选对应模式。
[ stats.with-corners · KPI 4 列 ] [ section-h ] [ ░░ recent-row × N ░░ ] [ shortcut × N ] [ tip · 虚线提示 ]
[ toolbar: search-inline + chip-wrap × n + view-toggle ] sticky top [ result-meta · 共 N 条 ] [ ░░ 卡片网格 / 列表 ░░ ] [ pagination ] sticky bottom [ bulk-bar(选中后显示) ] 吸底浮动
[ 左栏 · 资产/导航 sticky ] [ 中央 · 画布/参数 ] [ 右栏 · 预览/AI 助手 ] └───────── 整页 viewport 高度锁定 · 不滚 main ────────┘
[ .wizard ]
├─ .steps · 200 px sticky ← 左步数条
└─ .panes · 1fr ← 右滚
├─ .wiz-pane #step-1
├─ .wiz-pane #step-2
└─ .wiz-pane #step-3
┌─────────────────┐
│ │
│ .input × N │
│ .btn-primary │
│ │
└─────────────────┘
待统一清单
扫完 18 个 HTML 发现的偏离点。按影响视觉一致性程度排序。改页面时遇到这些点,顺手改正。
| # | 问题 | 现状 | 应改为 |
|---|---|---|---|
| 1 | 按钮等级混乱 ★ | 各页随意选 .btn / .btn-primary / .btn-ghost,部分页面 2 个一级橙并列,"取消"被做成主橙;尺寸也乱(38/32/44 混) | 按 §4.1 三级体系:一个区域只 1 个一级(主动作) · 二级(并列动作) · 三级(辅助) · 尺寸默认 36 / lg 40 / sm 28 |
| 2 | 输入框高度 | products 38 / projects search 32 / login 36 | 统一 36 |
| 3 | Tab 激活样式 | product-detail 下划线 / library 底色填充 | 统一下划线 + bottom 2 px heat |
| 4 | Hover 底色 | 多数 bg-lighter / 部分 black-alpha-4 | 统一 black-alpha-4 |
| 5 | 卡片标题字号 | projects 13.5 / products 14 | 统一 14 / 500 |
| 6 | 卡片网格列宽 | products 240 / library auto 180 / projects-new 4 列 | 商品 240 · 资产 180 · 通用 auto-fill 220 |
| # | 问题 | 现状 | 应改为 |
|---|---|---|---|
| 7 | Pill 变体不全 | restraint.css 4 种 / library 用了 .pill.archive 没定义 | 补 .pill.archive(灰)/ .pill.warn(honey) |
| 8 | X 关闭按钮 | drawer 30 / modal 32 / toast 28 | 统一 32×32 / 8 px 圆角 |
| 9 | label 字重 | products 500 / product-detail 600 | 统一 500 |
| 10 | mono 装饰 | 部分页有 4 角 [ 200 OK ],部分没 | 主工作台型必有 · 编辑器型可省 |
| 11 | section-h 分隔 | 部分 border-bottom / 部分没 | 统一不用(留白即分隔) |
| # | 问题 | 现状 | 应改为 |
|---|---|---|---|
| 12 | 编辑器页 inline style 过大 | pipeline 795 / model-photo 1393 / platform-cover 1003 行 | 抽 .stepper / .shot-card 到 restraint.css 或 editor.css |
| 13 | 四角准星重复 SVG | 部分页定义自己的 SVG 背景 | 全部改用 .with-corners + .corner-tr/.corner-bl |
| 14 | 滚动条样式残留 | 部分页 inline scrollbar-width: thin | restraint.css 已全局隐藏 · 清理 inline |
| 15 | mono 字体里的中文 | 部分页直接写 font-family: monospace | 全部换 var(--font-mono) |
Don't List · 绝对禁止
任何 mockup / 代码 review 时,对照此清单。每一条违反都判错。
--heat-90 等 alpha 阶梯backdrop-filter 只用于 modal 遮罩新页面 / 改页面 checklist
每次开工前过一遍。3 个阶段都不能跳。
- 已 Read [电商AI平台/design.md](design.md) §1 §3 §8(至少)
- 用 Grep 查 restraint.css 是否已有该组件
- 看本 design-system.html 找视觉参考
- 不确定的设计点 → 先问用户,不要凭感觉
- HTML 用
app > sidebar + main > topbar + content骨架 - head 含
assets/restraint.css+ Inter + JetBrains Mono - body 末尾
assets/shell.js - 标题区用
.page-head > h1 + .sub - 主操作按钮放
.page-head > .actions(自动 40 px 高) - 子区块用
.section-h > h2 + .more - 按钮全
.btn系列 · 不要自己写 - 状态徽标全
.pill.info/.ok/.err/.neutral - 输入框全
.input / .select / .textarea· 字段用.field - 浮层全用现成 Modal / Drawer / Toast
- 图标 SVG line · stroke 1.5 · linecap round ·
stroke="currentColor" - 时间戳 mono 注释
// 05.22 · 周四 - 强调单词加深(不变橙)
<b style="color:var(--accent-black)">3 个</b> - 数字加
.num或tabular-nums - 状态色按语义选
--heat / --accent-forest / --accent-crimson / --accent-honey
- 对照 §8 Don't List 逐条过
- 浏览器打开页面 · 截图 + 跟本 design-system.html 对比
- 测 hover / focus / active / disabled 状态都正确
- 测 dark mode(给 body 加
.darkclass 看是否破) - 移动端缩到 1100 px 以下看响应式
- 不在 master/main 上,在 dev 分支
- 不带
--no-verify,不跳过 hook