AirShelf/v1/DESIGN_SPEC.md
iye f420af2069
All checks were successful
Build and Deploy / build-and-deploy (push) Successful in 6s
chore: 全量推送 · 累积页面改动 + Next.js 工程骨架 + v1/ 归档 + 文档
页面 (电商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>
2026-05-21 21:16:46 +08:00

394 lines
14 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 流·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.511.5 px | 400/500 | 0.04em (letter-spacing) | `[ STATUS ]` |
| Mono 散点 | 8.5 px | 400 | 0.04em | 背景 ASCII 装饰 |
**行高:** 默认 `1.5`,标题 `1.2`,提示文本 `1.61.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 | **34 px** | `.kbd` `.badge` |
| Pill 状态徽标 / dot | **999 px** | `.pill` `.dot` |
| 进度条段位 | **23 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)
- 居中,460480px 宽,白底,**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)