Comp AI CRM 品牌设计令牌重构:把 CRM 界面对齐 Comp 品牌色的 ADR 实践与源码落地
后端前端CRM人工智能AI Agent【免费下载链接】crmComp AI CRM is an open source, CRM designed for AI agents. Agentic-first CRM.项目地址https://gitcode.com/gh_mirrors/crm48/crm点击查看免费下载Comp AI CRM 的adrs/comp-palette.md是一份典型的架构决策记录ADR它指出当时 CRM 界面仍停留在未上妆的 shadcn默认观感并提出一套把两套主题亮/暗整体重指向 Comp 品牌视觉语言纯白 品牌绿#006B4F的令牌级改造方案同时记录了改造会破坏哪些既有组件。本文以这份 ADR 为主线结合当前仓库中 packages/ui/src/styles/globals.css 等源码讲解这份方案的完整内容、它最终在仓库中的落地形态以及做同类品牌化重构时可以照搬的排查清单。背景默认 shadcn 观感不是任何人的品牌ADR 开篇就点出核心问题CRM 当时的样子就是未加样式的 shadcn——纯中性灰、所有主操作都是近黑色、到处是直角。作者的评价很直接这是一个不错的默认值但它不属于任何人的品牌。而 Comp 的品牌是 flat white纯白与#006B4F品牌绿。CRM 是用户天天看的那个产品所以它理应看起来和 Comp 官网出自同一家公司。这引出了整份 ADR 的目标让设计令牌design token承担品牌一致性而不是让每个组件各自为政。触发场景设置页里一条过度惊悚的报错作者注意到这个问题是从设置页开始的一次失败的 Gmail 同步渲染出一条红色告警告警上挂着一个近黑色的 Resolve解决按钮。一个需要在 Google Cloud 项目里启用 API的小事被这套配色渲染得像系统崩溃一样严重。这个场景很有代表性语义色semantic color的错位会直接扭曲信息传达的轻重缓急。红色告警本身没错但近黑色按钮把用户的注意力从下一步该做什么拽到了出大事了上。问题清单五个与调色板无关的缺陷顺着这条线作者在排查过程中发现了一批无论换不换调色板都是 bug的问题圆角令牌主题不一致--radius在:root里是0.625rem在.dark里却是0.75rem。结果同一个控件在切换主题时会悄悄改变形状。焦点环宽窄不一不同组件上的 focus ring 分别是 1px、2px、3px键盘可达性的视觉语言完全没有收口。暗色模式下弹窗遮罩不可见modal scrim 用的是bg-black/1010% 黑色叠加在近黑色页面上几乎不可见暗色模式下对话框和背景之间没有任何分隔。deal-stage 图表色带与产品无关交易阶段漏斗图用的是一串琥珀到橙色的渐变和产品里任何其他元素都没有关系。--primary语义被滥用部分组件把--primary当作深色墨水色而不是强调色来用令牌一变这些组件就会未经同意跟着变色。这五条值得单独强调品牌化改造不等于换个主色它常常是一面照妖镜把原本被默认皮肤掩盖的令牌规范问题全部暴露出来。方案把两套主题整体重指向 Comp 品牌色ADR 给出了清晰的改造思路可以拆成四条原则1. 双主题同值品牌色不允许偷偷是两个颜色--primary与--destructive在亮、暗两套主题中必须持有相同的值。原因很朴素如果同一个品牌绿在暗色主题里被调暗或提亮品牌色就偷偷变成了两个颜色。在 ADR 提出的时刻这是方案的第一步——先让品牌色在主题切换时不漂移。2. 圆角收敛统一到 5px 并跨主题一致把圆角从各处飘忽不定的值0.625rem/0.75rem收敛到5px并且亮、暗两套主题完全一致。同时这也解释了为什么当时rounded-none的组件数量是改造的面之一——见下文破坏性影响。3. 填充语义收口fill 只给去和停这是一个很有设计判断力的原则实心填充fill只保留给两类操作——你想要的行动go和不可撤销的行动stop。其余的一切都用 chip浅底、描边、文本来承载。这样做的收益是销售代表的视线永远只会被两种东西吸引——绿色意味着去做红色意味着停手中间地带的次级操作不再和主操作抢注意力。4. 灰色保持真正的中性灰色不要往任何色相上靠。作者的判断是产品里没有需要往某个方向染色的场景一个无理由的偏色灰读起来就是犹豫不决indecision。中性灰 唯一强调色是最省力的品牌化路径。破坏性影响谁会在令牌变化后悄悄变绿ADR 如实记录了这次改造的破坏面——这正是一份合格 ADR 该有的样子硬编码颜色的组件任何写死颜色的地方都会与新令牌脱节。把--primary当暗色墨水用的组件它们会瞬间变绿。作者当时就命中了三处header 里的 logo左侧图标栏icon rail的激活态Gmail 失败告警上的 Resolve 按钮。rounded-none的宽 diff因为令牌变化叠加所有钉死在直角上的组件都要跟着改天然是一个大面积 diff。ADR 作者还给出了务实的分割建议如果调色板本身不被接受至少把两个真正的 bug 修复拆出去单独提交——一个是主题间圆角不一致一个是暗色模式不可见的 scrim。这个建议本身就是很好的工程实践问题修复与风格偏好是可以解耦的两件事。源码落地现状当前仓库中的设计令牌从当前仓库源码看ADR 提出的核心方案已经落地到 packages/ui/src/styles/globals.css 中。:root第 9 行起与.dark第 81 行起两套主题的关键令牌对比如下令牌:root亮.dark暗说明--background#ffffff#0f0f0f亮色为纯白对齐 Comp flat white--foreground#171717#f5f5f5中性近黑/近白无偏色--primary#006b4f#006b4f品牌绿双主题同值ADR 核心诉求--primary-foreground#ffffff#ffffff品牌绿上的前景色--secondary#f4f4f4#1f1f1f中性灰阶--muted-foreground#6b6b6b#a0a0a0次要文字--destructive#ae2e24#ae2e24双主题同值与 ADR 的fill 只给 stop对应--border/--input#e2e2e2#2a2a2a中性边框--overlayrgb(0 0 0 / 0.18)rgb(0 0 0 / 0.55)遮罩在暗色下显著加深--ring#006b4f#40be96焦点环暗色换更亮的绿保证可见--radius5px5px两主题一致回应 ADR 的半径问题--chart-1#00915f#0fa871图表首色已转为品牌绿同族几个关键点的源码印证半径双主题一致:root的--radius: 5pxglobals.css与.dark的--radius: 5pxglobals.css完全同值。同时theme inline中派生出一整套圆角阶梯--radius-sm: 4px、--radius-md: var(--radius)即 5px、--radius-lg: 8px、--radius-xl: 12px--radius-2xl/3xl/4xl则通过calc(var(--radius) * n)派生。圆角令牌的消费方也很直接例如 sonner.tsx 的 toast 会把var(--radius)直接用作边框圆角。scrim 从bg-black/10收口为--overlay令牌当前所有弹层遮罩dialog、sheet、drawer、alert-dialog都统一走bg-overlay例如 dialog.tsx 的fixed inset-0 isolate z-50 bg-overlay ...drawer.tsx 与 sheet.tsx 同款。暗色下--overlay提升到 55% 黑解决了 ADR 中暗色模式弹窗与页面融为一体的问题。焦点环的统一尝试layer base中全局*的样式统一为apply border-border outline-ring/50globals.css让默认描边与焦点环都锚定到 ring 令牌对应 ADR 对 focus ring 混乱的批评。语义色在业务层的映射仓库把语义进一步下沉到组件层。例如 status-indicator.tsx 定义StatusToneneutral/primary/info/success/warning/error到令牌的映射success → var(--color-success)、error → var(--color-destructive)、primary → var(--color-primary)等业务组件只声明语义tone不碰具体颜色值。交易阶段的表现层 apps/app/lib/deal-stage.ts 也遵循同样的模式CLOSED_WON → success、CLOSED_LOST → error、CONTRACT_SENT → warning由 apps/app/components/crm/deal-stage.tsx 交给StatusIndicator渲染。图表色带的现状ADR 批评 deal-stage 图表用的是琥珀到橙色的无关联 ramp。当前源码中dealStageColor()使用OPEN_STAGE_COLORSapps/app/lib/deal-stage.ts四个开放阶段的颜色来自--chart-1至--chart-4。其中--chart-1已改为品牌绿同族亮色#00915f、暗色#0fa871可以推断这是对 ADR 的直接回应但--chart-3仍是暖琥珀色亮色#b45309、暗色#c07e22--chart-2为蓝、--chart-4为紫整个 ramp 尚未完全收敛为单一品牌色带——图表配色依然是可继续打磨的面。rounded-none的波及面仍在ADR 预告了令牌变化 每个钉死在rounded-none的组件会形成宽 diff。当前源码里rounded-none依然广泛存在例如 drawer.tsx 的底部/侧向抽屉、calendar.tsx 的日期范围中间态单元格、input-group.tsx 的紧凑尺寸变体、tabs.tsx 的 line 变体、command.tsx、attachment.tsx 等。其中一部分如日历范围中间态、抽屉贴边是设计上合理的直角另一部分如输入框组、command item则是待收敛的历史遗留这正好印证了 ADR 对 diff 面积的判断。实操检查清单做一次品牌化令牌重构要查什么结合这份 ADR 与其落地过程可以沉淀出一份可复用的重构检查清单先统一语义令牌再谈换色检查--primary、--destructive、--radius、--ring、--overlay是否在亮/暗两套主题下同值品牌强调色在暗色下可以换更亮的 ring但主色本身不要漂移。搜硬编码颜色与滥用语义的组件用正则搜索写死的十六进制色值以及拿--primary当文字色/墨色的用法ADR 命中的三处——header logo、icon rail 激活态、Resolve 按钮——就是这类。给填充分级实心填充只留给主行动与破坏性行动其余操作改为 chip/描边/文本样式让go/stop成为界面上仅有的两个视觉重音。圆角收敛并派生阶梯定义一个基准半径本仓库为 5px其余圆角由它派生避免每个组件各自写死。遮罩、焦点环这类隐形令牌单独验证在暗色主题下逐页检查 scrim 可见性与键盘焦点环这两类问题不会被正常走查发现。把 bug 修复与风格偏好拆开提交主题半径不一致、scrim 不可见这类是 bug换色是偏好分开评审、分开回滚是 ADR 作者明确建议的工程做法。小结adrs/comp-palette.md的价值不在于换了主色而在于它演示了一次令牌级品牌化改造的完整思考链从真实的用户感知问题设置页告警过度惊悚出发顺藤摸瓜找出五个被默认皮肤掩盖的规范缺陷给出可执行的令牌取值原则同值、收敛、收口、中性并诚实评估破坏面与拆分策略。而当前仓库源码表明这份 ADR 的建议大部分已成为现实--primary/--destructive双主题同值、半径统一 5px、scrim 收口为--overlay令牌、图表首色转品牌绿、语义色在组件层StatusIndicator统一映射。对任何想在 shadcn/Tailwind 系产品上做品牌化改造的团队这份文档连同它的落地痕迹都是一份高质量的参考样本。相关延伸阅读ADR 同目录下的 i18n.md 与 README.md 记录了仓库中其他架构决策的讨论方式设计令牌的最终定义集中在 packages/ui/src/styles/globals.css组件级语义色映射可继续阅读 packages/ui/src/components/status-indicator.tsx 与 apps/app/lib/deal-stage.ts。赞分享后端前端CRM人工智能AI Agent【免费下载链接】crmComp AI CRM is an open source, CRM designed for AI agents. Agentic-first CRM.项目地址https://gitcode.com/gh_mirrors/crm48/crm点击查看免费下载相关推荐Comp AI CRM 界面色彩使用规范语义令牌、强调层级与明暗外观的落地实践Comp AI CRM 界面色彩使用规范语义令牌、强调层级与明暗外观的落地实践 色彩在界面中的价值不在好看而在可被正确解读。本指南围绕 Comp A后端前端CRM人工智能AI AgentOpenClaw 品牌身份落地指南语义色彩令牌、字体回退与设计审计在 ClawHub 中的实践OpenClaw 品牌身份落地指南语义色彩令牌、字体回退与设计审计在 ClawHub 中的实践 本文以 ClawHubOpenClaw 的 Skill 后端前端AI 技能AI 插件搜索引擎ui-ux-pro-max-skill 品牌更新实战用 /brand:update 一键同步品牌色到设计令牌ui ux pro max skill 品牌更新实战用 /brand:update 一键同步品牌色到设计令牌 本文围绕 ui ux pro max skillAI 技能前端设计系统上一篇终极指南如何用Mac轻松制作Windows安装U盘绕过TPM限制下一篇React Native for Web 开源项目指南及问题解决方案创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

论文分析不再头疼:AI辅助阅读文献与数据整理实战指南

论文分析不再头疼:AI辅助阅读文献与数据整理实战指南

毕业论文、期刊论文做数据分析的时候,最让人头大的往往不是写作那一步,而是写之前那段漫长的“分析期”。我读研的时候,光是整理访谈记录和文献摘要就折腾了快三周——四十几篇PDF、几万字访谈、密密麻麻的实验数据,散落在不同文件…

2026/9/26 3:59:09 阅读更多 →
Kubebuilder 控制器使用 Finalizers 实现资源删除前清理钩子:完整实战指南

Kubebuilder 控制器使用 Finalizers 实现资源删除前清理钩子:完整实战指南

开发者工具代码生成CLI云原生后端 【免费下载链接】kubebuilder Kubebuilder - SDK for building Kubernetes APIs using CRDs 项目地址: https://gitcode.com/gh_mirrors/ku/kubebuilder 点击查看 免费下载 导读 在 Kubebuilder 构建的 Kubernetes Operator 中&a…

2026/9/25 2:30:09 阅读更多 →
AIRI 部署指南:5 分钟快速搭出会实时语音对话的 AI 伴侣

AIRI 部署指南:5 分钟快速搭出会实时语音对话的 AI 伴侣

AIRI 部署指南:5 分钟快速搭出会实时语音对话的 AI 伴侣 【免费下载链接】airi 💖🧸 Self hosted, you-owned Grok Companion, a container of souls of waifu, cyber livings to bring them into our worlds, wishing to achieve Neuro-sama…

2026/9/25 2:30:09 阅读更多 →

最新新闻

Git Rebase底层逻辑与实战:提交历史重写、冲突解决与工作流优化

Git Rebase底层逻辑与实战:提交历史重写、冲突解决与工作流优化

做开发这些年,我见过太多人在提交历史上栽跟头。早上刚把分支推到远端,下午想同步 main 分支的最新代码,随手执行一次 merge,提交树立刻变成了一张密密麻麻的蜘蛛网。review 的人面对几十个提交节点根本分不清哪个提交对应哪个需求…

2026/9/26 4:56:25 阅读更多 →
红外电力设备检测:YOLO数据集标注、训练避坑与GUI封装

红外电力设备检测:YOLO数据集标注、训练避坑与GUI封装

简介:一套聚焦红外场景的电力设备检测系统,面向电力工程专业学生、算法开发者及设备运维人员,用于电力设备异常状态的自动识别与实时监测。资源包含已经预处理的1000张红外电力设备图像及标签,YOLO11与YOLOv8训练好的模型、模型训…

2026/9/26 4:56:25 阅读更多 →
软件方法第2章与Electron内存治理:用建模思路配合--expose-gc定位根因

软件方法第2章与Electron内存治理:用建模思路配合--expose-gc定位根因

“能咋地,我就问问”——这句话不是挑衅,是我们小组定位问题时的口头禅。这回被问的对象是《软件方法》,而且偏偏是很多人啃不动、跳着翻、最后落灰的第2章。我原来也觉得这种书离业务代码太远,直到一个用 Electron 做的桌面工具在…

2026/9/26 4:56:25 阅读更多 →
HBuilder蓝牙通讯实战:html5-bluetooth-demo实现BLE设备接入与数据交互

HBuilder蓝牙通讯实战:html5-bluetooth-demo实现BLE设备接入与数据交互

简介:一套基于HBuilderX、经实测可用的HTML5蓝牙通信Demo工程,面向前端与混合应用开发者,主要用于解决Web端蓝牙设备连接、数据收发与状态监控问题,同时兼顾Android原生蓝牙实现,适合物联网、智能硬件及跨平台App开发场…

2026/9/26 4:56:25 阅读更多 →
长期生酮饮食伤心脏?机制解析与护心自救底线

长期生酮饮食伤心脏?机制解析与护心自救底线

生酮群里的打卡记录往往分两种:一种是体重秤的数字持续下滑,配一张满足的餐盘;另一种是同一个ID过几周又冒出来,问“最近心慌得厉害、早搏也变多了,还在坚持生酮,要不要紧”。大多数回答是:你是…

2026/9/26 4:56:25 阅读更多 →
OpenClaw安全排查与卸载指南:本地Agent常驻进程风险全解析

OpenClaw安全排查与卸载指南:本地Agent常驻进程风险全解析

最近后台收到不少关于 OpenClaw 的提问,问题高度统一:"我电脑上是不是装了一个叫 OpenClaw 的东西?该不该卸载?它对我的系统安全到底做了什么?"上周帮朋友排查一台 Ubuntu 服务器,发现系统里躺着…

2026/9/26 4:55:24 阅读更多 →

日新闻

数据库课后习题答案别硬背:当测试用例集刷,效率翻倍

数据库课后习题答案别硬背:当测试用例集刷,效率翻倍

简介:万常选版《数据库原理与设计》课后习题答案资源,覆盖第2至6章及第9章,适合正在学习关系模型、数据库建模、关系数据理论与模式求精的本科生、自学者作为复习与自测材料。压缩包共7个文件,含3个doc参考答案、2个sql示例脚本、…

2026/9/26 0:00:25 阅读更多 →
学校官网模拟全流程实践:从页面布局到后端接口与部署

学校官网模拟全流程实践:从页面布局到后端接口与部署

如果你正在找一门 Web 大作业的题目,或者刚开始接触 Web 前端开发想做点能拿来展示的东西,“学校官网模拟”几乎是最稳的选择。题目看着简单,但要把导航、新闻列表、轮播 Banner、二级页面、后台数据都串起来,其实已经把前端布局、…

2026/9/26 0:00:25 阅读更多 →
超级玛丽游戏源码C++:从零搭建横版跳跃游戏工程

超级玛丽游戏源码C++:从零搭建横版跳跃游戏工程

简介:这是一份面向游戏开发初学者与C进阶学习者的超级玛丽(超级马里奥)游戏源码,基于C面向对象编程实现,适合想通过经典项目理解游戏主循环、角色类设计、地图关卡加载与物理碰撞检测的读者参考。压缩包共49个文件&…

2026/9/26 0:00:25 阅读更多 →

周新闻

Flutter for OpenHarmony游戏卡片渐变背景实战:从原理到性能优化

Flutter for OpenHarmony游戏卡片渐变背景实战:从原理到性能优化

直接铺开项目本身吧。这几个月我一直在折腾一件事:用Flutter给OpenHarmony做一款游戏集合类的App,说白了就是把若干小游戏塞进一个壳里,用统一入口分发。这个方向本身不算新鲜,真正让我花了不少心思的,是首页那堆游戏卡…

2026/9/25 19:27:14 阅读更多 →
Word表格编号全攻略:从列表编号到题注交叉引用

Word表格编号全攻略:从列表编号到题注交叉引用

写Word文档,最让人头疼的往往是那些“看起来不起眼”的小问题。比如表格编号这事:今天在表后面多加了两个空白行,明天给客户交稿前发现整个章节的编号全部错位,光是挨个改序号就能耗掉大半个下午。我前阵子帮人整理一份上百页的技…

2026/9/25 11:15:26 阅读更多 →
从第一个站到第二个站:独立开发者的静态网站选型与落地实践

从第一个站到第二个站:独立开发者的静态网站选型与落地实践

1. 项目概述1.1 核心需求解析做独立开发者这几年,说实话,第一个网站上线的那天晚上我兴奋得没睡着。但等它跑了半年,流量惨淡、功能臃肿、代码自己都懒得看第二遍之后,我才慢慢琢磨明白一个道理:第一个网站是练手&…

2026/9/25 20:29:09 阅读更多 →

月新闻

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能分类:[AI/大模型]细分主题:AI 增强型 CI/CD 流水线自动化与 GitOps 实践:Agent 工作流、工具调用与任务拆解:从原型到生产的验收清单很多团队在尝试用大…

2026/9/25 20:29:43 阅读更多 →
容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场分类:[工程技术]细分主题:Kubernetes 生产环境运维与排障实战:可复制的项目复盘模板与决策记录大部分团队的事故复盘报告,最后都变成了躺在 Confluence 或钉…

2026/9/25 20:29:31 阅读更多 →
容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步分类:[工程技术]细分主题:Docker 容器化技术与镜像安全管理:核心链路的逐步实现与关键代码取舍面对一个积累了五六年历史包袱的单体架构应用(包含 Web 接口、后台…

2026/9/25 19:27:26 阅读更多 →