All checks were successful
Build and Deploy / build-and-deploy (push) Successful in 6s
页面 (电商AI平台/) - account / team / settings / index / products / projects: 累积迭代 - restraint.css: 设计 token 补充 - login.html / register.html: 新增登录注册页 - _ARCHIVE.md: 归档说明 Next.js 工程骨架 - app/ + components/: 新一代 SPA 雏形 (page / layout / sidebar / topbar / GridBg / Icon) - package.json / package-lock.json / next.config.mjs / tsconfig.json / postcss.config.mjs / next-env.d.ts 历史归档 / 文档 - v1/: 原 V1 静态稿镜像 (含 mockup-A/B/C) - PRD.md / deployment-guide.md / _check.html - ui参考/ / screenshots/ 杂项 - .gitignore 调整 - 删除根 README.md Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
394 lines
14 KiB
Markdown
394 lines
14 KiB
Markdown
# 流·Studio 设计规范
|
||
|
||
> **风格代号:** Restraint(克制)· Firecrawl-inspired
|
||
> **适用范围:** 流·Studio 全产品(工作台 / 项目 / 商品库 / 流水线 / 资产库 / 编辑器 / 账户)
|
||
> **最后更新:** 2026-05-14
|
||
|
||
---
|
||
|
||
## 1. 设计哲学
|
||
|
||
**一句话:** 不是 SaaS,不是工具站,而是「一台精密设备的工作面板」。
|
||
|
||
**三条铁律:**
|
||
|
||
1. **克制大于装饰** — 留白 > 容器 > 内容,大量空气感,绝不堆砌
|
||
2. **单色锚点** — 全场只有一种 accent(橙色),且只用于 CTA / 关键状态 / 强调单词
|
||
3. **结构清晰可见** — 用 1px 边框、网格背景、"+" 准星、mono 标签暴露"图纸感",而不是用阴影/渐变去隐藏结构
|
||
|
||
**避免的"AI 味":**
|
||
- 渐变铺面、玻璃拟态、彩色阴影
|
||
- 多色 emoji 图标
|
||
- 圆角无差别(全部 8px / 16px)
|
||
- 卡片浮在背景上的"贴纸感"
|
||
- 装饰盖过内容(场记板、霓虹灯、丝绒幕布这种主题公园式视觉)
|
||
|
||
---
|
||
|
||
## 2. 色彩系统
|
||
|
||
### 2.1 中性色(主体 95%)
|
||
|
||
| Token | Hex | 用途 |
|
||
| ------------- | --------- | ------------------------------- |
|
||
| `--bg` | `#FAF9F5` | 页面底色 · 米白(暖调,不是纯白) |
|
||
| `--bg-soft` | `#F4F2EC` | hover 态底色 / mono 标签背景 |
|
||
| `--card` | `#FFFFFF` | 卡片 / 容器底色 |
|
||
| `--border` | `#E9E5DB` | 主分隔线 · 1px 实线 |
|
||
| `--border-soft` | `#EFEBE0` | 次级边框 / 缩略图边框 |
|
||
|
||
### 2.2 文字层级(4 层)
|
||
|
||
| Token | Hex | 权重 / 用途 |
|
||
| ---------- | --------- | ----------------------------- |
|
||
| `--ink` | `#15140F` | 一级 · 标题 / 数值 / 主文本 |
|
||
| `--ink-2` | `#5A584F` | 二级 · 描述 / 次要按钮文字 |
|
||
| `--ink-3` | `#9C988C` | 三级 · 标签 / 辅助说明 / 占位 |
|
||
| `--ink-4` | `#C8C4B8` | 四级 · ASCII 散点 / 极弱装饰 |
|
||
|
||
### 2.3 主题色(只用于关键点)
|
||
|
||
| Token | Hex | 用途 |
|
||
| ----------------- | --------- | --------------------------------- |
|
||
| `--orange` | `#E55B26` | **唯一 accent** · 主 CTA / active 态 / 关键单词强调 |
|
||
| `--orange-soft` | `#FAE8DC` | 主色边框软化 / pill 边框 |
|
||
| `--orange-tint` | `#FFF4ED` | 主色背景软化 / active nav 底色 |
|
||
|
||
### 2.4 状态色(仅状态使用,克制)
|
||
|
||
| 含义 | Token | Hex | 配套底色 | 配套边框 |
|
||
| -------- | ---------- | --------- | ---------- | -------- |
|
||
| 成功 | `--green` | `#3F6B3F` | `#EAF2EA` | `#D5E5D5` |
|
||
| 失败/告警 | `--red` | `#B33A2A` | `#FBEBE7` | `#F2D6CE` |
|
||
|
||
> **注:** 没有蓝、紫、黄、青等「企业 dashboard 五彩斑斓色」。状态用色仅在 pill / 进度条段位上出现,绝不用作大面积背景。
|
||
|
||
---
|
||
|
||
## 3. 字体系统
|
||
|
||
### 3.1 字体族
|
||
|
||
| 用途 | 字体 |
|
||
| ---------- | --------------------------------- |
|
||
| 正文 / UI | `Inter, 'PingFang SC', 'Microsoft YaHei', sans-serif` |
|
||
| Mono 装饰 | `'JetBrains Mono', monospace` |
|
||
|
||
> Mono 字体不是用来写代码的,是用来做**装饰元素**:`[ 200 OK ]` 标签、时间戳 `// 05.14`、小注释 `/v2`、deltas `↑ 本月 +3` 等。
|
||
|
||
### 3.2 字号 / 字重 / 行高
|
||
|
||
| 角色 | 字号 | 字重 | 字距 | 用途 |
|
||
| ------------- | ------- | ---- | ---------- | ---------------- |
|
||
| H1 欢迎语 | 26 px | 600 | -0.018em | 页面主标题 |
|
||
| 数值 (KPI) | 30 px | 600 | -0.02em | 统计大数字 |
|
||
| H2 区块标题 | 15 px | 600 | -0.01em | "最近项目""快捷入口" |
|
||
| 卡片标题 | 13.5 px | 600 | normal | 项目名 / 商品名 |
|
||
| 正文 / nav | 13.5 px | 500 | normal | 默认 |
|
||
| 按钮 | 13 px | 500/600 | normal | btn / pill-btn |
|
||
| 描述次级 | 12.5 px | 400 | normal | meta / 描述行 |
|
||
| Pill 文字 | 11.5 px | 500 | normal | 状态徽标 |
|
||
| Mono 标签 | 10.5–11.5 px | 400/500 | 0.04em (letter-spacing) | `[ STATUS ]` |
|
||
| Mono 散点 | 8.5 px | 400 | 0.04em | 背景 ASCII 装饰 |
|
||
|
||
**行高:** 默认 `1.5`,标题 `1.2`,提示文本 `1.6–1.7`。
|
||
|
||
**关键属性:** 数值类必须加 `font-variant-numeric: tabular-nums`,保证等宽对齐。
|
||
|
||
---
|
||
|
||
## 4. 圆角规则(最关键的一条)
|
||
|
||
> **核心原则:结构性容器 = 0 圆角 · 交互元素 = 适度圆角 · 状态徽标 = 完全圆**
|
||
|
||
| 元素类型 | 圆角值 | 例子 |
|
||
| -------------------- | ---------- | ------------------------------- |
|
||
| 大卡片 / 区块容器 | **0 px** | `.stats` `.list-card` `.shortcut` `.tip` `.modal` |
|
||
| 缩略图 / 画面占位 | **0 px** | `.thumb` `.ic` |
|
||
| 按钮 / 输入框 / icon-btn | **9 px** | `.btn` `.pill-btn` `.icon-btn` `.search` |
|
||
| nav 项 | **7 px** | `nav a` |
|
||
| 头像 / 小色块 | **6 px** | `.av` `.team .p` |
|
||
| Mono 标签 / badge | **3–4 px** | `.kbd` `.badge` |
|
||
| Pill 状态徽标 / dot | **999 px** | `.pill` `.dot` |
|
||
| 进度条段位 | **2–3 px** | `.prog span` `.bar` |
|
||
|
||
**为什么这样定:** 大容器走硬边像「图纸框」,有工程感;按钮走中圆角保留可点击的友好感;状态徽标走全圆形成强对比,视觉跳脱出来。
|
||
|
||
---
|
||
|
||
## 5. 边框 / 阴影 / 描边
|
||
|
||
### 5.1 边框
|
||
|
||
- **统一规格:** `1px solid var(--border)`
|
||
- 次级:`1px solid var(--border-soft)`
|
||
- **不允许 2px / 3px 实线**(粗边破坏轻盈感)
|
||
- 虚线仅用于 `.tip` 提示框:`1px dashed var(--border)`
|
||
|
||
### 5.2 阴影
|
||
|
||
- **默认无阴影**(关键!)
|
||
- 唯一例外:Toast 浮层 `box-shadow: 0 4px 20px rgba(21,20,15,0.06)`
|
||
- 弹窗用半透明遮罩 `rgba(21,20,15,0.42)` 拉开层级,**不靠 shadow**
|
||
|
||
### 5.3 容器四角"+" 注册标(签名元素)
|
||
|
||
所有重要区块容器的四角放 `+` 字符,模拟印刷套版准星:
|
||
|
||
```css
|
||
.stats::before,.stats::after { content:'+'; position:absolute; color:var(--ink-3); font-family:'JetBrains Mono',monospace; font-size:13px; }
|
||
.stats::before { top:-8px; left:-8px }
|
||
.stats::after { bottom:-8px; right:-8px }
|
||
/* 另外两角用额外 .corner-tr / .corner-bl span 补齐 */
|
||
```
|
||
|
||
---
|
||
|
||
## 6. 间距 / 栅格
|
||
|
||
**基础栅格:** 4 px
|
||
|
||
**常用间距:** 4 / 6 / 8 / 12 / 14 / 16 / 18 / 22 / 24 / 36 / 48 / 56
|
||
|
||
**主区块布局:**
|
||
- 侧边栏宽度:`248px`
|
||
- 主内容 padding:`48px 56px 56px`
|
||
- 内容最大宽度:`1480px`
|
||
- 区块之间垂直间距:`36px`(welcome → stats → grid2)
|
||
- 卡片网格间距:`24px`(主区) / `12px`(子区)
|
||
- 卡片内 padding:`22px 24px`(stats) / `14px 18px`(列表行) / `14px`(快捷入口)
|
||
|
||
---
|
||
|
||
## 7. 背景:制图纸网格
|
||
|
||
### 7.1 三层叠加
|
||
|
||
```
|
||
图层 1(最上):主交叉点 "+" 准星 — 240×240 重复
|
||
图层 2(中间):子交叉点小圆点 — 60×60 重复
|
||
图层 3(最下):虚线网格 — 240×240 重复(stroke-dasharray: 1.5 4)
|
||
```
|
||
|
||
**配色:**
|
||
- "+" 准星:`#B8B3A4`(stroke 1px)
|
||
- 小点:`#CFCABB`(r=0.9)
|
||
- 虚线:`#E2DED2`(stroke 1px)
|
||
|
||
### 7.2 视觉聚焦遮罩
|
||
|
||
整个网格背景用径向遮罩,中心实、四周淡:
|
||
|
||
```css
|
||
mask-image: radial-gradient(ellipse 95% 80% at 50% 35%, #000 25%, transparent 95%);
|
||
```
|
||
|
||
效果:网格在屏幕中心隐约可见,边缘消失,不抢内容。
|
||
|
||
### 7.3 装饰散点(Mono ASCII)
|
||
|
||
主区域 4 个固定位置撒 ASCII 散点,模拟手稿污点 / 颗粒感:
|
||
|
||
```
|
||
· · +
|
||
· +XX+
|
||
+XXXX·
|
||
+X·
|
||
```
|
||
|
||
字号 8.5px / 颜色 `--ink-4` / 透明度 0.8 / `pointer-events:none`。
|
||
|
||
### 7.4 边角 Mono 标签
|
||
|
||
主区域 4 个角各放一个 Mono 标签,样例:
|
||
|
||
```
|
||
左上 [ 200 OK ] 右上 [ /v2 ]
|
||
左下 [ .MP4 · 9:16 ] 右下 [ STUDIO ]
|
||
```
|
||
|
||
字号 10.5px / 颜色 `--ink-3` / 字距 0.06em。
|
||
|
||
> **作用:** 让页面看起来像「在某个开发环境 / 调试视图里」,而不是普通官网。这是区分 AI 味和高级感的关键。
|
||
|
||
---
|
||
|
||
## 8. 组件规范
|
||
|
||
### 8.1 按钮
|
||
|
||
**3 种且仅 3 种:**
|
||
|
||
| 类型 | 背景 | 文字 | 边框 | 圆角 | 字重 |
|
||
| --------- | ---------- | ---------- | ---------- | ---- | ---- |
|
||
| `.btn` 默认 | `--card` 白 | `--ink` | `--border` | 9px | 500 |
|
||
| `.btn-primary` 主 CTA | `--orange` | 白 | `--orange` | 9px | 600 |
|
||
| `.btn-sm` 小按钮 | 同上,padding `5px 11px` / fontsize 12px | | | | |
|
||
|
||
Hover:默认 → `--bg-soft`;主按钮 → `#D04E1F`(橙色加深一档)。
|
||
|
||
### 8.2 Pill(状态徽标)
|
||
|
||
```
|
||
[ ● 状态文字 ] 完全圆角 / 1px 边框 / 11.5px 字号 / 4px 10px padding
|
||
```
|
||
|
||
| 状态 | 文字色 | 底色 | 边框 |
|
||
| ---- | ----------- | --------- | ----------- |
|
||
| info | `--orange` | `--orange-tint` | `--orange-soft` |
|
||
| ok | `--green` | `#EAF2EA` | `#D5E5D5` |
|
||
| err | `--red` | `#FBEBE7` | `#F2D6CE` |
|
||
|
||
每个 pill 前置 6px 圆点(`.dot`,颜色继承文字色)。
|
||
|
||
### 8.3 输入框 / 搜索
|
||
|
||
- 背景白 / 1px 边框 / 9px 圆角 / 9px 12px padding
|
||
- 占位字色 `--ink-3`
|
||
- 聚焦态可选橙色边框,但克制使用
|
||
- 右侧带 mono `⌘K` 提示徽标
|
||
|
||
### 8.4 KPI 统计行(`.stats`)
|
||
|
||
- 1 行 4 格,共用一个 1px 边框容器,无 gap
|
||
- 列与列之间用 `border-right: 1px` 分隔(最后一列去掉)
|
||
- 容器四角加 "+" 注册标
|
||
- 每格结构:label + badge → 大数字(30px) → delta / progress
|
||
|
||
### 8.5 列表(`.recent`)
|
||
|
||
```
|
||
[缩略图 54×70] [标题 + meta] [进度条 5 段] [pill] [按钮]
|
||
```
|
||
|
||
- grid 5 列:`54px 1fr auto auto auto`
|
||
- 行高 padding `14px 18px`
|
||
- 行间 1px 分隔线,最后行去掉
|
||
- 整行 hover → `--bg-soft`
|
||
|
||
### 8.6 进度条段位(流水线 5 阶段专用)
|
||
|
||
5 个 `18×5px` 小段,3px 间距,每段独立颜色:
|
||
|
||
| 状态 | 颜色 |
|
||
| ---- | ------------- |
|
||
| 未开始 | `--bg-soft` |
|
||
| 已完成 | `--ink-2` |
|
||
| 当前 | `--orange` |
|
||
| 失败 | `--red` |
|
||
|
||
### 8.7 快捷入口卡(`.shortcut`)
|
||
|
||
- 白底 / 1px 边框 / 0 圆角 / 14px padding
|
||
- 左侧 30×30 橙色 tint 图标块(0 圆角)
|
||
- 右侧:标题(13px 600)+ Mono 描述(11.5px,`--ink-3`)
|
||
- Hover → `--bg-soft`
|
||
|
||
### 8.8 提示框(`.tip`)
|
||
|
||
- 白底 / **1px 虚线**边框(`dashed`)/ 0 圆角
|
||
- 加粗标题独立一行 + 正文
|
||
- 内联代码用 `.mono` 类:橙色文字 + 橙色 tint 底 + 3px 圆角
|
||
|
||
### 8.9 Toast
|
||
|
||
- 右下角 24px 偏移 / 白底 / 1px 边框 / 0 圆角
|
||
- 唯一允许阴影的元素:`0 4px 20px rgba(21,20,15,0.06)`
|
||
- 进入动画:`translateX(420px → 0)`,缓动 `cubic-bezier(0.34, 1.56, 0.64, 1)`,300ms
|
||
- 自动消失:2400ms
|
||
- 内容结构:左侧 24×24 橙色 tint 图标 + 右侧标题 + Mono 副文本(`[ 200 OK ]`)
|
||
|
||
### 8.10 弹窗(Modal)
|
||
|
||
- 居中,460–480px 宽,白底,**0 圆角**
|
||
- 四角加 "+" 准星(同 stats 容器规则)
|
||
- 遮罩 `rgba(21,20,15,0.42)`,带 `backdrop-filter: blur(8px)`
|
||
- 进入动画:`scale(0.96 → 1)`,250ms 弹性缓动
|
||
- 三段结构:
|
||
- **Header**:36px 橙色 tint 图标 + 标题 + Mono 副标
|
||
- **Body**:13px / `--ink-2` / 行高 1.7
|
||
- **Footer**:右对齐两个按钮(取消 + 主 CTA)
|
||
- ESC 关闭 / 点击遮罩关闭
|
||
|
||
---
|
||
|
||
## 9. 微观细节(决定"高级感"的)
|
||
|
||
### 9.1 标签全部包方括号
|
||
|
||
不要写 `200 OK`,要写 `[ 200 OK ]`(方括号 + 单空格)。
|
||
不要写 `MP4 9:16`,要写 `[ .MP4 · 9:16 ]`(中点分隔)。
|
||
路径用 `/v2`、`/sidebar collapse` 这种伪命令。
|
||
|
||
### 9.2 注释样式时间
|
||
|
||
`// 05.14 · 周五` —— 双斜杠开头,模拟代码注释。
|
||
|
||
### 9.3 数值后缀
|
||
|
||
`¥327` 主体大字 + `.40` 小字次级(`<small>`),让数字主体更突出。
|
||
|
||
### 9.4 强调单词上色
|
||
|
||
正文里 `<b style="color:var(--ink)">3 个项目</b>` —— 让具体数值/名词比周围文字更深一档(不是变橙,只是变更黑)。**橙色只留给 CTA。**
|
||
|
||
### 9.5 ASCII 字符做装饰
|
||
|
||
进度箭头:`↑ 本月 +3` `↓ -1.2%` 用 Unicode 箭头。
|
||
中文标点 + 英文单位混排:`本月 +3` `较上月 +33%` 中间用半角空格分隔。
|
||
|
||
### 9.6 链接式"更多"按钮
|
||
|
||
"查看全部"不要写成按钮,写成 `[ ALL · 12 ] →`(Mono 标签 + 箭头),颜色 `--ink-3`,hover 橙色。
|
||
|
||
### 9.7 缩略图不放图,放比例
|
||
|
||
`9:16` 这种 Mono 字符占位,模拟「未渲染图片的草稿状态」,呼应工程感。
|
||
|
||
---
|
||
|
||
## 10. Don't List(绝对禁止)
|
||
|
||
- ❌ 渐变背景(只有 hero 区可考虑,但首选纯色)
|
||
- ❌ 玻璃拟态(`backdrop-filter` 只用于 modal 遮罩,不用于卡片)
|
||
- ❌ 彩色 emoji 图标(用 SVG line icon,1.8px stroke)
|
||
- ❌ 多个 accent 色(全场只有橙色一个 accent)
|
||
- ❌ 大圆角容器(>=10px 的卡片直接判错)
|
||
- ❌ 投影 / 内阴影 / 文字阴影
|
||
- ❌ 鲜艳的状态色(避免荧光绿、电光蓝、霓虹粉这类)
|
||
- ❌ 居中对齐大段正文(全部左对齐)
|
||
- ❌ 把装饰当主角(场记板、丝绒、霓虹灯都不要)
|
||
- ❌ 无意义的微动效(hover 旋转、缩放、彩虹流光等)
|
||
|
||
---
|
||
|
||
## 11. Sass / CSS Token 速查
|
||
|
||
```css
|
||
:root{
|
||
/* 中性 */
|
||
--bg:#FAF9F5; --bg-soft:#F4F2EC; --card:#FFFFFF;
|
||
--border:#E9E5DB; --border-soft:#EFEBE0;
|
||
|
||
/* 文字 4 层 */
|
||
--ink:#15140F; --ink-2:#5A584F; --ink-3:#9C988C; --ink-4:#C8C4B8;
|
||
|
||
/* 主色 */
|
||
--orange:#E55B26; --orange-soft:#FAE8DC; --orange-tint:#FFF4ED;
|
||
--orange-hover:#D04E1F;
|
||
|
||
/* 状态 */
|
||
--green:#3F6B3F; --green-bg:#EAF2EA; --green-bd:#D5E5D5;
|
||
--red:#B33A2A; --red-bg:#FBEBE7; --red-bd:#F2D6CE;
|
||
}
|
||
```
|
||
|
||
---
|
||
|
||
## 12. 参考与来源
|
||
|
||
- **视觉灵感:** [Firecrawl](https://www.firecrawl.dev/)(克制 / 单橙 accent / mono 装饰)
|
||
- **结构灵感:** Linear / Stripe Dashboard(信息密度 / 1px 分层)
|
||
- **图纸感来源:** 印刷套版准星 + 老 Unix 终端
|
||
- **当前实现:** [demo.html](demo.html) · [restraint-2.html](_design_src/untitled/project/directions/v3/restraint-2.html)
|