--- name: CreatorHub description: 延续 Ant Design 默认组件的克制、清晰的抖音运营工作台 colors: primary: "#1677ff" primary-hover: "#4096ff" primary-active: "#0958d9" primary-background: "#e6f4ff" success: "#52c41a" warning: "#faad14" error: "#ff4d4f" neutral-layout: "#f5f5f5" neutral-container: "#ffffff" neutral-text: "rgba(0,0,0,0.88)" neutral-secondary: "rgba(0,0,0,0.65)" neutral-disabled: "rgba(0,0,0,0.25)" neutral-border: "#d9d9d9" neutral-divider: "#f0f0f0" nav-selected-background: "rgba(0,0,0,0.04)" nav-selected-text: "rgba(0,0,0,0.95)" event-like: "#eb2f96" event-follow: "#722ed1" event-repost: "#fa8c16" source-sync: "#faad14" source-notice: "#13c2c2" tag-like-background: "#fff0f6" tag-like-text: "#c41d7f" typography: title: fontSize: "20px" fontWeight: 600 lineHeight: 1.4 body: fontFamily: >- -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, 'Noto Sans', sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol', 'Noto Color Emoji' fontSize: "14px" fontWeight: 400 lineHeight: 1.5714285714285714 label: fontSize: "14px" fontWeight: 600 lineHeight: 1.5714285714285714 rounded: sm: "4px" md: "6px" lg: "8px" spacing: xs: "8px" sm: "12px" md: "16px" lg: "24px" components: button-primary: backgroundColor: "{colors.primary}" textColor: "{colors.neutral-container}" typography: "{typography.body}" rounded: "{rounded.md}" padding: "4px 15px" height: "32px" button-primary-hover: backgroundColor: "{colors.primary-hover}" button-primary-active: backgroundColor: "{colors.primary-active}" button-default: backgroundColor: "{colors.neutral-container}" textColor: "{colors.neutral-text}" typography: "{typography.body}" rounded: "{rounded.md}" padding: "4px 15px" height: "32px" button-text: backgroundColor: "transparent" textColor: "{colors.neutral-text}" typography: "{typography.body}" rounded: "{rounded.md}" height: "32px" input: backgroundColor: "{colors.neutral-container}" textColor: "{colors.neutral-text}" typography: "{typography.body}" rounded: "{rounded.md}" padding: "4px 11px" height: "32px" nav-selected: backgroundColor: "{colors.nav-selected-background}" textColor: "{colors.nav-selected-text}" typography: "{typography.body}" rounded: "{rounded.md}" tag-like: backgroundColor: "{colors.tag-like-background}" textColor: "{colors.tag-like-text}" rounded: "{rounded.sm}" card: backgroundColor: "{colors.neutral-container}" rounded: "{rounded.lg}" padding: "{spacing.lg}" --- # Design System: CreatorHub ## Overview **Creative North Star: "日常运营工作台"** 界面是长期处理账号和数据的工作场所。视觉语言克制、常规、清晰,通过位置、分组、文字层级、轻微颜色和状态反馈帮助使用者判断信息,而不是通过装饰吸引注意。 延续当前 Umi Max 4.7、React 19、antd 6.6.5、Pro Components 3.x 和 Ant Design X 的界面。使用 antd/pro 默认组件,不新建另一套按钮、表单、导航或视觉包装;组件不适合业务时优先调整交互。尺寸根据同屏密度与操作频率选择,不以统一放大来强调可用性。 **Key Characteristics:** - 熟悉的组件、图标与交互,不要求使用者学习新视觉隐喻。 - 内容和操作层级清楚,辅助入口不抢主操作的注意力。 - 列表保持适合日常工作的密度,长内容不撑宽页面。 - 未知、错误和处理中有明确反馈,不通过视觉制造假正常。 本文件记录现有系统,不是改版方案。机器可读数值来自已安装 antd 的 `theme.getDesignToken()`、默认组件与预设色阶,以及 Pro Components 自带的 `getLayoutDesignToken()` 和 `ProLayout` 菜单配置;活动代码没有额外自定义主题或全局样式覆盖。ProLayout 内部默认值优先于普通 antd Menu 的默认值,不能把两者混为一套导航配色。前言中的数值是当前默认主题快照,不要求在应用中重复配置。现有实现依据为 `web/src/layouts/index.tsx`、`web/src/utils/metadata.tsx`、`web/src/components/accounts/` 和 `web/src/pages/creator/`;产品约束见 `PRODUCT.md` 与 `AGENTS.md`。本次是代码分析,未进行浏览器视觉验收。 ## Colors 使用白色内容区、浅灰页面背景和低对比度分隔,保留 Ant Design 的清晰蓝色作为交互强调;业务标签用少量预设色区分语义,不形成第二套品牌配色。 ### Primary - **清晰交互蓝**(`colors.primary`):主要按钮、链接及组件原生交互强调。悬停与按下使用默认蓝色色阶,不额外添加渐变、光晕或重色块。 - **浅蓝交互底**(`colors.primary-background`):组件原生的轻度强调,不用于整块表格或整页背景,也不替代 ProLayout 的侧栏选中底。 ### Neutral - **浅灰工作底**(`colors.neutral-layout`):页面底层,与白色卡片区分。 - **白色内容面**(`colors.neutral-container`):表单、卡片和弹层的主要承载面。 - **深色正文 / 次级说明 / 禁用文字**(`colors.neutral-text`、`colors.neutral-secondary`、`colors.neutral-disabled`):使用默认透明度表达层级,禁用色不承担重要正文。 - **控件边界 / 轻分隔**(`colors.neutral-border`、`colors.neutral-divider`):区分输入、表格和内容分组,不增粗边框制造强调。 - **侧栏浅灰选中底 / 深色选中文字**(`colors.nav-selected-background`、`colors.nav-selected-text`):沿用 ProLayout 自带侧栏配色,不改成普通 antd Menu 的浅蓝底与蓝字。 ### Named Rules **The Semantic Color Rule.** 颜色必须同时有文字说明:成功、警告和错误使用相应状态组件;事件类型固定为点赞粉色、评论蓝色、关注紫色、转发橙色,来源固定为同步金色、通知青色。不得仅靠颜色解释状态。 事件和来源采用 `Tag` 的 `magenta`、`blue`、`purple`、`orange`、`gold`、`cyan` 预设。前言中的事件色是色系主色;实际 Tag 文本、背景和边框由 antd 的该色系生成,不能把主色强行用作所有文字。`tag-like` 记录其中一个实际预设样例。 ## Typography **Body Font:** 使用前言中的 antd 系统字体栈,标题和标签沿用同一字体。中文由用户系统可用字体呈现;不新增网络字体、专属展示字体或装饰性字形。 **Character:** 字体服务于连续阅读和数据判断。中文标题与正文遵循默认组件层级,不使用大段全粗体或宣传式大标题。 ### Hierarchy - **Title**:默认四级标题角色,用于常规内容标题;页面标题的实际呈现由 `PageContainer` 决定,不单独覆盖。 - **Body**:表格内容、表单值、操作名称和说明的主要角色;默认字号与行高见前言。 - **Label**:需要强调的字段或小节名称,沿用默认加粗,不另设字体。 - 更小的辅助文字、其他标题级别和控件大小交由 `Typography` 与组件自身 API,不将三个记录角色当成全站强制字号表。 **The Honest Hierarchy Rule.** 标题说明“这是哪里”,正文说明“发生了什么”,辅助文字说明“下一步怎么办”;不能用放大字号掩盖状态缺失或信息组织问题。 ## Layout - 全局使用 `ProLayout` 的混合布局与固定侧栏,菜单按“运营”“资源”分组,工作台为独立入口。侧栏不另造品牌区;详情页选中所属菜单,不同时高亮多个前缀相近的入口。 - 页面标题和副标题来自 `PageContainer`,不在卡片内重复页面标题。当前全站关闭面包屑;登录页不经过主布局。 - 列表主操作放在表格 Card 内右上角,与左侧统计信息同行,使用 `Flex justify="space-between" align="center"`;操作行与后续内容间距为 `spacing.md`。不得同时在页头重复注册同一列表操作。 - 非列表页操作可使用现有页头槽,与实体信息同处 content 行;沿用默认布局能力,不另造浮动工具栏。 - ProLayout 自带的轻背景过渡属于库默认表现,不新增装饰性渐变,也不为消除它而改写主题。PageContainer 的默认内容留白由库处理,不把其较大边距推广到所有控件。 - 间距采用组件默认值和前言中的常用刻度。并非所有内容都必须使用同一内边距;普通 Card 默认内容留白与紧凑列表区应根据组件能力选择。 - 筛选行可以换行。内容必须约束在可用宽度内;长文本完整换行,不撑宽整页。确需横向空间的数据表使用组件的滚动能力,不把桌面表格硬挤成不可读的窄列。 - 默认组件保留自己的响应能力,但本项目没有已验收的独立手机布局。本次不承诺额外断点布局或移动端功能;侧栏折叠、菜单与控件适配优先使用 ProLayout/antd 原生能力。 - 返回列表保留筛选、TAB 和浏览位置;改变筛选或每页数量回到第一页。该行为避免工作中断,不通过重新排列页面表达状态变化。 ## Elevation & Depth 界面以背景层次和轻边界组织信息;普通内容区不额外叠加强阴影。Modal、Dropdown、Tooltip、Popover 等短暂浮层保留组件默认深度,以区别于页面内容。不是“全站禁止阴影”,也不是每张卡片都需要悬浮感。 ### Shadow Vocabulary - **默认浮层阴影**:沿用 antd 的 `boxShadow` / `boxShadowSecondary`,准确值记录在 `.impeccable/design.json`;不在业务页面写另一套近似值。 - **默认控件反馈**:按钮自身的轻阴影和输入焦点反馈由组件保留,不扩大为卡片外发光。 **The Quiet Depth Rule.** 普通内容靠层次与分组,浮层靠默认深度;不要用厚阴影、粗描边或装饰性渐变提高存在感。 动效只用于组件状态、展开与关闭等反馈,沿用 antd 默认速度与缓动。不添加循环装饰动画,也不以假进度或永不结束的骨架屏掩盖未实现功能。 ## Shapes 采用默认组件的轻圆角:常规输入与按钮使用 `rounded.md`,Tag 等小元素使用 `rounded.sm`,Card 等容器使用 `rounded.lg`。这些是默认刻度,不需要给所有现有元素手动写圆角。 表格、表单和内容区保持常规轮廓。不要将辅助开关、工具按钮或状态标签放大成胶囊式视觉中心,不增加厚边框、大圆角和装饰性形状。 作品小封面沿用现有业务组件。事件聚合的对应作品使用 48px 小封面;不同列表的封面尺寸按已有组件与信息密度处理,不推广为全站图片规格。 ## Components ### Buttons 常规、清晰,突出当前任务而不是按钮本身。 - 主操作使用原生 `Button` 的主要样式;列表新增等入口采用通用图标并放在卡片内。 - 次级操作使用默认按钮、文字入口或“更多”菜单。每行只保留必要的状态感知主操作,不铺开所有动作。 - 默认大小、悬停、按下、焦点、禁用和 loading 由组件处理;不能把默认控件高度当成必须统一放大的下限。 - 暂停、停止和删除等有影响的动作明确确认。危险语义采用组件原生 `danger`,不通过自制颜色替代。 ### Tags & Status 轻量、带明确文字,不作为大面积视觉装饰。 - 类型与来源使用预设彩色 `Tag`;采集状态仅一个 Tag,异常优先,原因去重后通过 Tooltip 说明。 - 未登录环境使用“待登录”;没有状态或读取失败不能显示成正常。 - 不以 Tag 替代按钮,不通过没有文字的圆点要求使用者猜测含义。 ### Cards / Containers 白色内容面,边界轻,间距常规。 - 使用默认 `Card` 与内容留白,按需要通过组件属性区分边界,不用额外包装组件重做卡片。 - 卡片小节标题可保留;页面标题只能出现于全局页头。统计信息与主操作遵循 Layout 中的排列。 - 普通卡片不追加阴影、重底色或大圆角。 ### Inputs / Fields 直接表达输入规则,错误紧邻对应字段。 - 使用 `Form`、`Input`、`InputNumber`、`Select` 等原生控件;数据来自可搜索下拉时不提供未经确认的手填替代。 - 保留默认焦点、错误、禁用和校验反馈。标签不能只放在 placeholder 中,重要错误不能只靠颜色表达。 - 原生 `Modal` 承载列表中的创建流程;创建成功关闭并刷新,失败保留填写内容和清楚的错误提示。 - 帮助文字说明实际格式或限制,不为短表单增加多余步骤。 ### Navigation 可辨认、稳定,不抢内容的注意力。 - 菜单及中文标题以 `web/src/utils/metadata.tsx` 为准;延续 ProLayout 默认交互,不定制深蓝侧栏或另一套导航样式。 - 图标来自 `@ant-design/icons`,选用行业通用隐喻,不自行发明不熟悉的符号。 - 来源切换使用原生 Tabs;各来源独立保存筛选和分页,不让切换导致上下文丢失。 ### Tables & Content 适合反复筛选、比较和追溯,不为装饰牺牲密度。 - 账号名、时间、指标和操作各有明确列语义。缺少指标显示“—”,缺少昵称使用已确认的前端提示,不伪造真实资料。 - 长事件内容在列内完整换行,不截断、不折叠、不添加“展开”,也不能撑宽页面。 - 作品入口配合本地小封面;缺图保持入口和明确提示,不以远程图片掩盖缓存失败。 - 分页、筛选、空状态和错误状态使用默认组件;空列表不是错误,读取失败不是空列表。 ### Conversations 沿用聊天组件,让联系人、消息和输入保持熟悉关系。 - 私信使用 Ant Design X 的 `Conversations`、`Bubble.List` 与 `Sender`,不另造聊天皮肤。 - 同一联系人在不同账号下保持独立会话,所属账号清晰,刷新和加载更多不改变当前选中会话。 - 消息的发送中、失败和结果未确认需要可辨认说明,不展示没有证据的送达或已读状态。 ### Feedback 出现问题时说明当前结果与可执行动作,不能悄悄消失。 - 使用 `Alert` 的 `title` / `description`,通过 `App.useApp()` 获取消息实例;不重新使用弃用 API。 - 纵向排列使用 `Flex vertical`,不恢复 `Space direction`。 - 断线、缺失资料、下载失败和校验失败显示不同原因;正在处理只对真实请求显示 loading。 - `Empty` 说明无数据或未实现功能。当前工作台以此说明看板尚未实现,不展示假图表、假数据或假骨架屏。 `.impeccable/design.json` 提供工具面板用的独立 HTML/CSS 样例、默认阴影、动效、断点及色阶。样例从现有默认组件翻译,供工具预览,不是可复制到应用中的自定义组件或样式;应用仍使用原生 antd/pro。工具预览不能替代实际界面验收。 ## Do's and Don'ts ### Do: - **Do** 沿用原生 antd/pro 的样式和状态,通过组件 API 解决布局与交互需求。 - **Do** 让标题、统计、筛选、列表与操作有清楚层级,主操作只在对应区域出现一次。 - **Do** 用文字和组件状态同时解释未知、错误、处理中和完成。 - **Do** 将长内容约束在列内,保持真实资料、作品入口和缺图提示可辨认。 - **Do** 保留键盘焦点、可见标签和通用图标,修改后与同屏信息密度对照检查。 ### Don't: - **Don't** 恢复 MUI、react-admin、旧深蓝导航或另一套独立主题。 - **Don't** 新建视觉包装组件或通过 CSS 覆盖默认组件样式;现有业务组件不等于新的设计系统封装。 - **Don't** 主动放大控件,增加厚边框、强阴影、大圆角、装饰性渐变或营销页式布局。 - **Don't** 仅靠颜色传达状态,或把未知、断线、缺失数据呈现为正常、零或完成。 - **Don't** 用编造的头像、指标、图表、远程封面或无限加载来隐藏真实缺失与未实现功能。