基础规范
全部产品
网页内容页、macOS 桌面和 Office 文档共用。原则、色板、文字、图标、组件和页面布局都在这一层。
DESIGN SYSTEM · 设计规范全景
Aham 系列产品共用的设计规范。数值以 tokens.json 为准,两层 CSS 的变量由脚本逐项核对。
规则分两层:基础规范管颜色、字体、组件和页面布局;网页工作台管 ToB 管理软件的外框、列表、详情和快速操作。
全部产品
网页内容页、macOS 桌面和 Office 文档共用。原则、色板、文字、图标、组件和页面布局都在这一层。
7.2 · ToB 管理软件
做列表、详情、单据、设置这类管理界面时启用,样式只在 .aham-workbench 里生效。颜色沿用 Aham,字体栈照 Linear,布局与交互照 Circle。
library-consumption.json · 拿不准时回到 tokens.json 和 DESIGN.md
tokens.json唯一数值事实源DESIGN.md规则与介质选择WORKBENCH.md网页工作台和高密度单据规则components/index.json索引;components/{slug}.json 是意图和行为契约AGENTS.md消费检查清单aham-ui.css基础层运行时:组件、文本样式类、暗色;变量值由 scripts/lint-design.mjs 对照 tokens.json 校验workbench.css显式选择工作台时加载;不覆盖全局组件workbench.js工作台行为:外框、弹层、命令菜单、筛选、列表键盘、命令面板、快捷键、按钮提示、主题参数;原生 ES 模块,零依赖北极星:Claude desktop 气质
三层中性灰,无暖调。界面像一张安静的纸,内容是主角,背景退后。
扁平、精确、无材质。深度靠层差不靠模糊;蓝是点缀不是填充。
对标 Claude desktop。安静、留白优先、内容先行,工具退到注意力之外。
三层灰 · 单蓝 · 文字四级 · 极弱语义 · 左块浅色,右块深色
深度的唯一来源——层差,无暖调。
color.surface.tier1-white#FFFFFF · 深色 #1C1C1Ccolor.surface.tier2-panel#F3F3F3 · 深色 #2A2A2Acolor.surface.tier3-line#E7E7E7 · 深色 #3A3A3A唯一色相:logo、主操作、发送、焦点环、当前页签下划线、文字链接;选中用灰。
color.accent.default#336EE8 · 深色 #5C8BED对白底 4.63 : 1 · 深色 5.17 : 1color.accent.hover#5C8BED · 深色 #7BA3F0color.accent.press#164EC3 · 深色 #336EE8color.accent.tint-surface#EDF0F7 · 深色 #23304Acolor.accent.tint-border#C8D3EA · 深色 #33486E主按钮底色用按下档,亮暗一致,白字对比度见右。
color.alias.action-bg#164EC3 · 深色 #164EC3白字 7.21 : 1color.alias.action-bg-hover#336EE8 · 深色 #336EE8白字 4.63 : 1对齐 Apple label 的四级递减,取值 Aham。
color.ink.primary#262626 · 深色 #F5F5F5对白底 15.1 : 1 · 深色 15.6 : 1color.ink.secondary#6E6E6E · 深色 #A8A8A8对白底 5.10 : 1 · 深色 7.17 : 1color.ink.tertiary#9B9B9B · 深色 #767676对白底 2.78 : 1 · 深色 3.75 : 1color.ink.quaternary#C4C4C4 · 深色 #4A4A4A对白底 1.74 : 1 · 深色 1.92 : 1color.ink.on-accent#FFFFFF · 深色 #FFFFFF对主按钮底 7.21 : 1极弱,只用于真实风险;禁红黄绿灯。通知正文用墨色,语义色只在底色和描边上。
color.semantic.success#5A7A60 · 深色 #8FB096对白底 4.79 : 1 · 深色 7.16 : 1color.semantic.success-bg#F0F2F0 · 深色 #23291Fcolor.semantic.warning#8A7333 · 深色 #C2A855对白底 4.58 : 1 · 深色 7.32 : 1color.semantic.warning-bg#F4F1E9 · 深色 #2A2616color.semantic.danger#9E3D31 · 深色 #D08070对白底 6.63 : 1 · 深色 5.68 : 1color.semantic.danger-bg#F4ECEA · 深色 #2A1E1A系统开启「增强对比度」时替换分隔线、次级文字与控件边界。
color.contrastMore.control-border#8A8A8A · 深色 #767676控件边界对白底 3.45 : 1 · 深色 3.75 : 1color.contrastMore.line#A8A8A8 · 深色未定义color.contrastMore.table-line#C0C0C0 · 深色未定义color.contrastMore.ink-secondary#454545 · 深色未定义对白底 9.59 : 1color.contrastMore.ink-tertiary#5E5E5E · 深色未定义对白底 6.48 : 1暗色语义覆盖,默认用上面的亮色。文字与控件的常用组合已按 WCAG 公式核算(scripts/lint-design.mjs),仍需真机目测。对比度按 WCAG 2 公式计算,正文要求至少 4.5 : 1。
层级靠字号 + 字重 · 单一无衬线 · 数字用等宽
↔ Apple Large Title
↔ Apple Title 1
↔ Apple Title 2
↔ Apple Title 3
↔ Apple 大正文
↔ Apple 默认正文/UI(主力)
↔ Apple Callout
↔ Apple Subheadline
↔ Apple Footnote
↔ Apple Caption
数字/代码,跟随所在样式字号
4 基刻度 · 静置无阴影 · 动效只服务反馈
4 基刻度,留白是首要分隔
spacing.00spacing.14pxspacing.28pxspacing.312pxspacing.416pxspacing.524pxspacing.632pxspacing.748pxspacing.864pxspacing.996pxradius.xs4pxradius.sm6pxradius.md8pxbuttons/inputsradius.lg12pxcards/panelsradius.xl16pxradius.2xl20pxradius.pill999px静置与悬停无阴影,只有浮层有一层
shadow.md0 2px 8px rgba(20,20,20,0.05)dropdown / menushadow.pop0 3px 12px rgba(20,20,20,0.06)popover / toastshadow.modal0 12px 36px rgba(20,20,20,0.10)shadow.ring-focus0 0 0 3px rgba(51,110,232,0.20)值为 none:shadow.none shadow.xs shadow.sm
克制:服务反馈不表演。时长短、缓动统一
motion.duration.fast | 0.12s | |
motion.duration.base | 0.18s | |
motion.duration.slow | 0.28s | |
motion.easing.standard | cubic-bezier(.2,0,0,1) | |
motion.easing.out | cubic-bezier(0,0,.2,1) |
breakpoint.web.sm | 40rem | 640px · 大手机/小平板,分列起点 |
breakpoint.web.md | 48rem | 768px · 平板竖屏 |
breakpoint.web.lg | 64rem | 1024px · 平板横屏/小桌面,三栏可用 |
breakpoint.web.xl | 80rem | 1280px · 桌面,页面壳封顶 |
breakpoint.web.2xl | 96rem | 1536px · 宽屏,超此居中收束 |
Lucide(ISC)· 线性单色,继承文字色 · 语义名见 icons.json
currentColor 继承 ink · 状态=图标+文字双通道
悬停查看用途与对应的 Lucide 名
引用写法(路径相对 design-system/):<svg class="icon"><use href="icons/aham-icons.svg#i-search"/></svg>
样式全部来自 aham-ui.css · 分组同 DESIGN §2
样本 6
样本 13
样本 12
样本 11
| 项目 | 状态 | 时长 | 字数 |
|---|---|---|---|
| 访谈 01 | 已转写 | 12:40 | 3,182 |
| 访谈 02 | 处理中 | 08:15 | 1,940 |
| 合计 | 20:55 | 5,122 |
aham export \ --format=pdf
样本 8 · 灰阶 + 至多一个蓝高亮
样本 12
样本 8 · 仅此处有阴影
样本 5 · 间距走 4 基刻度
样本 9 · v6.1
本周核心进展:本地离线转写已完成,说话人分离跑通。
| 事项 | 负责人 | 工时 |
|---|---|---|
| 离线化 | 李航 | 12.5 |
components/{slug}.json:结构、状态、禁止事项
| 组件 | slug | 文件 |
|---|---|---|
| Button | button | 预览 · 契约 |
| Input | input | 预览 · 契约 |
| Card | card | 预览 · 契约 |
| Dialog | dialog | 预览 · 契约 |
| Table | table | 预览 · 契约 |
| Navigation | nav | 预览 · 契约 |
| Checkbox | checkbox | 预览 · 契约 |
| Radio Button | radio-button | 预览 · 契约 |
| Toggle | toggle | 预览 · 契约 |
| Segmented Control | segmented-control | 预览 · 契约 |
| Progress Indicator | progress-indicator | 预览 · 契约 |
| Slider | slider | 预览 · 契约 |
| Search Field | search-field | 预览 · 契约 |
| Tooltip | tooltip | 预览 · 契约 |
| Popover | popover | 预览 · 契约 |
| Menu | menu | 预览 · 契约 |
| Icon | icon | 预览 · 契约 |
全状态与组合写法,可直接抄
examples/index.htmlexamples/actions.htmlexamples/charts.htmlexamples/composition.htmlexamples/data.htmlexamples/extras.htmlexamples/inputs.htmlexamples/navigation.htmlexamples/overlays.htmlexamples/page-shell.htmlexamples/patterns.htmlexamples/preview.htmlexamples/search-filter.htmlexamples/states.htmlexamples/status-viz.htmlpreview/layout-dense.htmlpreview/layout-longform.htmlDESIGN §8 · 页眉、状态、预览 · 管理软件页面见第 09 节
| 创建 | 2026-06-18 |
| 修改 | 2026-06-21 |
| 类型 | PNG |
7.2 · ToB 管理软件 · 规则见 WORKBENCH.md
两者冲突时:颜色、形状听 Aham;字体栈、布局、交互、信息密度与键盘听 Linear。规则见 WORKBENCH §1.1。
真实组件在框内运行,数据均为虚构
tokens.json 的 workbench 组 · 引用值已展开
| token | 值 | 来源与说明 |
|---|---|---|
workbench.railWidth | 52px | 导航收起时的图标栏 |
workbench.navWidth | 240px | v7.2 由 148 改为 240:容纳中文二级菜单 |
workbench.navItemHeight | 32px | density.standard.controlHeight |
workbench.contextWidth | 240px | |
workbench.headerRow | 40px | 页眉横条高度;页面用 1–2 条 |
workbench.headerControl | 28px | density.compact.controlHeight 页眉横条内的按钮与输入 |
workbench.panelNarrow | 240px | workbench.contextWidth 属性 / 摘要侧面板 |
workbench.panelWide | 400px | overlayWidth.drawer 预览 / 分析侧面板 |
workbench.shellGutter | 8px | spacing.2 宽屏时内容卡与窗口边缘的距离 |
workbench.shellRadius | 12px | radius.lg |
workbench.rowList | 36px | density.standard.rowHeight 列表默认行高;显示选项可切到 rowCompact |
workbench.tableMinWidth | 680px | |
workbench.labelWidth | 72px | |
workbench.formLabelWidth | 148px | 7.5:单据表单的标签列,标签在值左边时固定这个宽度、左对齐(WORKBENCH §4.1)。放得下 8 个汉字加冒号。labelWidth 72px 只留给属性栏、识别结果行这类窄面板 |
workbench.formColumnMin | 480px | 单据表单一列的最小宽度;容器窄于它时标签放到值上面(容器查询) |
workbench.formColumnMax | 640px | 单据表单一列的最大宽度;窗口再宽时右边留白,不等比拉宽 |
workbench.formPairMin | 1008px | 两列表单的门槛:2 × formColumnMin 加列间距 spacing.7。容器窄于它时并排的两块改成上下排。容器查询的条件里不能用 CSS 变量,所以单列一个值 |
workbench.documentMaxWidth | 1328px | 单据正文(分区卡片里的内容)最宽:两列表单 2×640 加列间距 spacing.7(48px)。卡片和小节的内边距另加 |
workbench.statusDot | 6px | |
workbench.rowCompact | 32px | density.compact.rowHeight |
workbench.rowDetail | 48px | 两行内容模式;不改全局 standard=36px |
workbench.fieldHeight | 28px | density.compact.controlHeight |
workbench.bodySize | 13px | typography.fontSize.sm v7.2 由 12 改为 13:列表、详情、设置的正文;12px 只留给单据紧凑模式 |
workbench.denseBodySize | 12px | typography.fontSize.xs 单据紧凑模式(data-density=compact)的正文与表格 |
workbench.controlHeight | 32px | density.standard.controlHeight 内容区按钮高度 |
workbench.hitMin | 32px | 桌面最小点击区(DESIGN §2.0);28px 的页眉控件用透明外扩补足 |
workbench.touchInputSize | 16px | 窄屏与粗指针下输入框字号;低于 16px 时 iOS Safari 聚焦会放大页面 |
workbench.totalSize | 24px | typography.fontSize.2xl 摘要栏合计金额 |
workbench.actionBackground | #164EC3 | color.alias.action-bg 与基础层主按钮相同 |
workbench.actionHover | #336EE8 | color.alias.action-bg-hover |
workbench.contextBreakpoint | 64rem | breakpoint.web.lg |
workbench.formBreakpoint | 80rem | breakpoint.web.xl |
workbench.mobileBreakpoint | 40rem | breakpoint.web.sm |
workbench.popoverMin | 200px | 同 components/popover.json |
workbench.popoverMax | 360px | 同 components/popover.json |
workbench.searchWidth | 240px | 页眉搜索框;§8.5 范围 200–360 |
workbench.dialogWidth | 380px | overlayWidth.dialog |
workbench.checkColumn | 32px | spacing.6 列表勾选列 |
workbench.popoverForm | 320px | 表单型弹层(显示选项),同 Circle Display 弹层宽 |
workbench.commandInputHeight | 36px | density.standard.rowHeight 命令菜单顶部搜索框 |
workbench.detailTitle | 24px | typography.fontSize.2xl 记录详情页主标题 |
workbench.detailWidth | 720px | 记录详情主内容宽度,居中。等于 contentWidth.read 在 16px 正文下的宽度(约 720px);工作台正文 13px,用 65ch 只有约 510px(按数字 0 的字宽约 0.6em 估算),所以写成 px |
workbench.activityIcon | 20px | avatar.xs 动态流事件图标圆底与头像 |
workbench.menuWidth | 256px | 右键菜单宽,同 Circle 的 w-64 |
workbench.overlayWidth | 640px | overlayWidth.modal-max 命令面板与新建弹窗宽 |
workbench.paletteTop | 22vh | 命令面板距视口顶部,同 Circle 的 top-[22%] |
workbench.createTop | 30vh | 新建弹窗距视口顶部,同 Circle 的 top-[30%] |
workbench.paletteInput | 48px | spacing.7 命令面板搜索框高 48px |
workbench.paletteItem | 40px | workbench.headerRow 命令面板选项行高 40px(Circle py-2.5) |
workbench.kbd | 20px | 快捷键提示高,同 Circle 的 h-5 |
workbench.toastWidth | 360px | workbench.popoverMax |
components/index.json 中带参考实现的契约
| 契约 | 用途 | 规范 |
|---|---|---|
workbench | 全宽网页业务工作台 | WORKBENCH |
document-form | 分组单据表单 | WORKBENCH |
editable-table | 横向细线与可校验的行内编辑 | WORKBENCH |
context-panel | 金额、收款计划、审批与活动摘要 | WORKBENCH |
list-view | 工作台列表页:分组表格、吸顶表头、翻页与空结果 | WORKBENCH §9 |
filter-bar | Circle / Linear 式筛选:页眉「筛选」按钮 → 命令菜单选字段与取值;条件以四段式标签显示在页眉下方的筛选行,条件写进网址 | WORKBENCH §9.2–9.3 |
display-options | 每位使用者自己的列表显示偏好:分组、排序、行高、显示属性 | WORKBENCH §9.2、§9.4 |
bulk-bar | 勾选多行后替换页眉第 2 条,提供批量操作 | WORKBENCH §9 |
command-menu | 工作台通用选择器(cmdk 形式):搜索框 + 可键盘移动高亮的列表,用于筛选、批量改属性、行内属性编辑和命令面板 | WORKBENCH §10 |
list-keyboard | Linear 式列表键盘:当前行在 Tab 顺序里,方向键移动,空格预览,Enter 打开,x 勾选 | WORKBENCH §11.1–11.2 |
record-detail | 无明细表的记录详情页:页眉位置与上下条、居中主内容、240px 属性栏 | WORKBENCH §11.3 |
properties-panel | 记录属性栏:分组的「标签 + 值」行,可编辑值打开命令菜单 | WORKBENCH §11.4 |
activity-feed | 记录动态:事件行、评论块、评论框,按时间正序 | WORKBENCH §11.5 |
command-palette | ⌘K 命令面板:带上下文的分组命令,子列表原地替换 | WORKBENCH §12.1 |
shortcuts | 统一快捷键表:登记后才能出现在界面提示和帮助列表里 | WORKBENCH §12.2 |
context-menu | 行的右键菜单:分组动作,下级选项原地替换 | WORKBENCH §12.3 |
cell-picker | 表格单元格与属性值的就地修改:点击打开命令菜单,选中即保存,可撤销 | WORKBENCH §12.4 |
toast | 操作完成后的短暂确认,可带一个操作按钮 | WORKBENCH §12.5 |
create-dialog | 快速新建:无边框标题、说明、属性标签、继续新建 | WORKBENCH §12.6 |
settings-page | 设置页:左侧分组导航,右侧居中的分区与设置行,单项修改即时生效 | WORKBENCH §13 |
ai-output | AI 生成的摘要、草稿或建议说明:标记、逐段输出、依据、一个主操作;人决定是否采纳 | WORKBENCH §14.2–14.3 |
ai-suggestion | 字段级 AI 建议:建议值 + 依据,采纳或忽略 | WORKBENCH §14.4 |
ai-confirm | AI 提出要改数据时的确认弹窗:改什么、从什么改为什么、共几项 | WORKBENCH §14.5 |
file-upload | 文件上传与拖放:拖入多个文件或整个文件夹,也可以用按钮选择;逐个文件显示检查结果、进度、失败原因和重试 | WORKBENCH §15.1 |
file-viewer | 文件预览:查看 PDF、图片和 CAD 图纸的渲染页,缩放、平移、翻页,并与识别字段并排对照 | WORKBENCH §15.2 |
tree-table | 树形明细表(BOM、总成装配):层级缩进、展开折叠、按层汇总,行级键盘操作 | WORKBENCH §15.3 |
version-compare | 版本对比:选两个版本,按分类列出新增、删除和改动,并排显示旧值和新值 | WORKBENCH §15.4 |
全文强约束 · 交付前逐条核对
DESIGN.md §0
绝不 pill/徽章/色块/红黄绿灯;可加状态图标,图标也必须配文字。
无竖线、无整行底色;数字右对齐 mono;表头/合计靠加粗。
选中 = 扁平灰 #E7E7E7,非蓝。例外:工作台单据正文的分区卡片用 1px 分隔线描边,卡片里只套一层次级底色的小节块(WORKBENCH §4.1)。
只用于 logo/主操作/发送/焦点环/当前页签下划线/文字链接/单据小节标题前的 3px 竖条;选中用灰不用蓝。主按钮底色用深一档 #164EC3,其余用 #336EE8。蓝若第一眼注意到就超标。
仅浮层有阴影。
•+文字图标用于导航/工具栏/菜单/控件内部,正文段落与表格单元格不放图标。
字体栈照 Linear),禁衬线;数字和代码用等宽(Berkeley Mono,未授权时 JetBrains Mono)。
先加间距,再考虑加线。
AGENTS.md · 工作台入口(7.2)
.page-header 大标题改用 40px 页眉横条;工作台用 full 宽度,不套 page-max。
components/shortcuts.json 的保留键并用 registerShortcut 登记;界面不显示未登记的按键。
一次只开一个模态;Esc 每次只关最上面一层。
setSingleKeyShortcuts)AI 改数据前必须弹窗确认,默认不开启 AI(WORKBENCH §14)。
真实风险用 .wb-risk 的语义色文字加说明,不给整行或状态点上色(WORKBENCH §1.2)。
其他页放第 1 条页眉横条最右端(WORKBENCH §2.1)。
标签 148px 在值左边时加冒号;显示态和编辑态用同一套行,页脚放「保存」「取消」,用 initObjectPage(WORKBENCH §4.1–4.5)。
字体栈、布局、交互、密度、键盘听 Linear;字号和字重仍用 Aham 的档位(WORKBENCH §1.1)。
两份规则文件的章节 · 同一套 token 派生到三种介质
CSS 变量 + 文本样式类 + 断点。支持亮 / 暗双色,纯 CSS 即可拼原型。
三栏窗口 + 原生菜单栏。暗色跟随系统;取值派生为 Swift 常量。
Word · PPT · Excel。字体映射(雅黑 / Inter / Consolas),HEX 取色,表格只横线;文档不做暗色。
library-consumption.json 的读取顺序 · CHANGELOG.md 最新版本
v7.5.0 · 2026-10-08单据的版式和编辑态:工作台单据页正文限宽,分区是描边卡片、里面一层小节块,标签 148px 加冒号;显示态和编辑态用同一套行,照 SAP Fiori 的 Object Page(WORKBENCH §4.1–4.5)。规则来自一个生产项目的 RFQ 单据,经需求方逐轮确认后写进规范。 全部更新记录
| 顺序 | 文件 | 用途 |
|---|---|---|
| 1 | tokens.json | 唯一数值事实源 |
| 2 | DESIGN.md | 规则与介质选择 |
| 3 | WORKBENCH.md | 网页工作台和高密度单据规则 |
| 4 | components/index.json | 索引;components/{slug}.json 是意图和行为契约 |
| 5 | AGENTS.md | 消费检查清单 |
| 6 | aham-ui.css | 基础层运行时:组件、文本样式类、暗色;变量值由 scripts/lint-design.mjs 对照 tokens.json 校验 |
| 7 | workbench.css | 显式选择工作台时加载;不覆盖全局组件 |
| 7 | workbench.js | 工作台行为:外框、弹层、命令菜单、筛选、列表键盘、命令面板、快捷键、按钮提示、主题参数;原生 ES 模块,零依赖 |
| 7 | preview/workbench-filter.html | 筛选、命令菜单、显示选项的各种状态(由 workbench.js 实际渲染) |
| 7 | preview/workbench-detail.html | 列表键盘、属性栏、动态流的各种状态(由 workbench.js 实际渲染) |
| 7 | preview/workbench-actions.html | 命令面板、右键菜单、单元格修改、提示条、新建弹窗、保留快捷键 |
| 7 | preview/workbench-ai.html | AI 协作的各种状态:需要开启、生成中、完成、已停止、失败、字段建议、修改确认(本地模拟文字) |
| 7 | preview/workbench-files.html | 文件上传、文件预览、树形明细、版本对比的各种状态(由 workbench.js 实际渲染,上传与识别为本地模拟) |
| 8 | examples/crm-quotation.html | 可运行的虚构单据示例 |
| 8 | examples/object-page.html | 单据页的版式和显示态、编辑态(WORKBENCH §4.1–4.5) |
| 8 | examples/workbench-shell.html | 外框与两条页眉横条、宽侧面板的示例 |
| 8 | examples/customer-list.html | 列表页示例:分组、筛选、显示选项、批量操作、翻页 |
| 8 | examples/record-detail.html | 记录详情页示例:位置与上下条、属性栏、动态流 |
| 8 | examples/settings.html | 设置页示例:分组导航、横线分隔的设置行、即时生效 |