# 设计文档:客服挂件动态主题色(品牌色) - 日期:2026-08-31 - 状态:设计定稿,待实施 - 分支:chany_dev_dev ## 1. 背景与目标 当前客服挂件(widget.js)与独立聊天页(chat.html)的配色为固定橙色, 约 40 处(widget.js)+ 24 处(style.css)硬编码色值散落在样式字符串/CSS 中。 目标:像 Intercom / WhatsApp Business 那样,让每个嵌入网站传入自己的品牌色, 整套配色(深色文字、浅背景、边框、阴影、渐变)自动从这一个颜色派生, 不传则回退默认橙,视觉与现状一致(唯一例外见 §9.1 Send 渐变简化)。 ### 非目标 - 不做多站点/多租户后台配置(单租户部署,嵌入方在 data 属性里自行控制) - 不做完整 dark 模式(现状 `data-theme="dark"` 本就只影响气泡/面板背景,维持现状) - 不做品牌色之外的多色自定义(YAGNI,派生已覆盖) - admin.html(内部后台,蓝色系)不在范围内 ## 2. 需求决策记录 | 决策点 | 结论 | |---|---| | 配置入口 | 嵌入方 script 标签 `data-color` 属性;独立页 URL 参数 `?color=` | | 生效范围 | widget.js 挂件 + chat.html 独立聊天页 | | 颜色派生 | 单品牌色 + HSL 规则自动派生全套色板 | | 技术路线 | CSS 自定义属性(语义槽位)+ JS 派生注入(方案 A) | | Send 渐变 | 接受简化:与邀请卡渐变统一,近乎纯色(用户已确认) | | 输入格式 | 仅 3/6 位 hex(`#` 可选);其他格式告警并回退默认 | | 头像图标 | 🤖 emoji 全部替换为图片 `static/kefu.png`,挂件侧支持 `data-avatar` 覆盖(默认 kefu-small.png,原图 kefu.png 为素材),详见 §12 | ## 3. 架构与数据流 ``` 客户网站 ┌──────────────────────────────────────┐ │