dsh-claude-style 0.2.6 → 0.2.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +20 -1
- package/LICENSE +6 -0
- package/README.en.md +4 -3
- package/README.md +5 -3
- package/docs/STYLE.md +37 -1
- package/lib/client.js +1891 -35
- package/lib/icons/providers/ClaudeApi.png +0 -0
- package/lib/icons/providers/README.md +13 -0
- package/lib/icons/providers/TeamoRouter-icon-dark.png +0 -0
- package/lib/icons/providers/a6-icon.png +0 -0
- package/lib/icons/providers/aicodemirror.svg +19 -0
- package/lib/icons/providers/aicoding.svg +20 -0
- package/lib/icons/providers/aihubmix-color.svg +1 -0
- package/lib/icons/providers/algocode.svg +51 -0
- package/lib/icons/providers/alibaba.svg +1 -0
- package/lib/icons/providers/amuxapi-icon.svg +13 -0
- package/lib/icons/providers/anthropic.svg +1 -0
- package/lib/icons/providers/apikeyfun.png +0 -0
- package/lib/icons/providers/apinebula_icon.png +0 -0
- package/lib/icons/providers/atlascloud_icon.png +0 -0
- package/lib/icons/providers/aws.svg +1 -0
- package/lib/icons/providers/azure.svg +1 -0
- package/lib/icons/providers/baidu.svg +1 -0
- package/lib/icons/providers/bailian.svg +1 -0
- package/lib/icons/providers/bytedance.svg +1 -0
- package/lib/icons/providers/byteplus.png +0 -0
- package/lib/icons/providers/catcoder.svg +1 -0
- package/lib/icons/providers/ccsub.svg +4 -0
- package/lib/icons/providers/chatglm.svg +1 -0
- package/lib/icons/providers/cherryin.png +0 -0
- package/lib/icons/providers/claude.svg +1 -0
- package/lib/icons/providers/claudecn.png +0 -0
- package/lib/icons/providers/claw.svg +22 -0
- package/lib/icons/providers/cloudflare.svg +1 -0
- package/lib/icons/providers/code0.png +0 -0
- package/lib/icons/providers/cohere.svg +1 -0
- package/lib/icons/providers/copilot.svg +1 -0
- package/lib/icons/providers/crazyrouter.svg +1 -0
- package/lib/icons/providers/cubence.svg +9 -0
- package/lib/icons/providers/deepseek.svg +1 -0
- package/lib/icons/providers/doubao.svg +1 -0
- package/lib/icons/providers/eflowcode.png +0 -0
- package/lib/icons/providers/etok.png +0 -0
- package/lib/icons/providers/fenno-icon.webp +0 -0
- package/lib/icons/providers/gemini.svg +1 -0
- package/lib/icons/providers/gemma.svg +1 -0
- package/lib/icons/providers/github.svg +1 -0
- package/lib/icons/providers/githubcopilot.svg +1 -0
- package/lib/icons/providers/google.svg +1 -0
- package/lib/icons/providers/googlecloud.svg +1 -0
- package/lib/icons/providers/grok.svg +1 -0
- package/lib/icons/providers/hermes.png +0 -0
- package/lib/icons/providers/huawei.svg +1 -0
- package/lib/icons/providers/huggingface.svg +1 -0
- package/lib/icons/providers/hunyuan.svg +1 -0
- package/lib/icons/providers/huoshan.png +0 -0
- package/lib/icons/providers/kimi.svg +1 -0
- package/lib/icons/providers/lioncc.svg +6 -0
- package/lib/icons/providers/longcat-color.svg +1 -0
- package/lib/icons/providers/mcp.svg +1 -0
- package/lib/icons/providers/meta.svg +1 -0
- package/lib/icons/providers/micu.svg +23 -0
- package/lib/icons/providers/midjourney.svg +1 -0
- package/lib/icons/providers/minimax.svg +1 -0
- package/lib/icons/providers/mistral.svg +1 -0
- package/lib/icons/providers/modelscope-color.svg +1 -0
- package/lib/icons/providers/nekocode-icon.png +0 -0
- package/lib/icons/providers/newapi.svg +1 -0
- package/lib/icons/providers/notion.svg +1 -0
- package/lib/icons/providers/novita.svg +11 -0
- package/lib/icons/providers/nvidia.svg +1 -0
- package/lib/icons/providers/ollama.svg +1 -0
- package/lib/icons/providers/openai.svg +1 -0
- package/lib/icons/providers/opencode-logo-light.svg +1 -0
- package/lib/icons/providers/openrouter.svg +1 -0
- package/lib/icons/providers/packycode.svg +1 -0
- package/lib/icons/providers/palm.svg +1 -0
- package/lib/icons/providers/pateway.jpg +0 -0
- package/lib/icons/providers/perplexity.svg +1 -0
- package/lib/icons/providers/pipellm.png +0 -0
- package/lib/icons/providers/ppio.svg +1 -0
- package/lib/icons/providers/qianwenai.svg +1 -0
- package/lib/icons/providers/qiniu.png +0 -0
- package/lib/icons/providers/qwen.svg +1 -0
- package/lib/icons/providers/qwencloud.svg +1 -0
- package/lib/icons/providers/rc.svg +1 -0
- package/lib/icons/providers/relaxcode.png +0 -0
- package/lib/icons/providers/runapi.jpg +0 -0
- package/lib/icons/providers/shengsuanyun.svg +4 -0
- package/lib/icons/providers/siliconflow.svg +1 -0
- package/lib/icons/providers/sssaicode.svg +73 -0
- package/lib/icons/providers/stability.svg +1 -0
- package/lib/icons/providers/stepfun.svg +10 -0
- package/lib/icons/providers/subrouter.svg +30 -0
- package/lib/icons/providers/sudocode-us.png +0 -0
- package/lib/icons/providers/sudocode.png +0 -0
- package/lib/icons/providers/tencent.svg +1 -0
- package/lib/icons/providers/ucloud.svg +1 -0
- package/lib/icons/providers/unity2.png +0 -0
- package/lib/icons/providers/vercel.svg +1 -0
- package/lib/icons/providers/wenxin.svg +1 -0
- package/lib/icons/providers/xai.svg +1 -0
- package/lib/icons/providers/xiaomimimo.svg +1 -0
- package/lib/icons/providers/xycai-icon.png +0 -0
- package/lib/icons/providers/yi.svg +1 -0
- package/lib/icons/providers/zeroone.svg +1 -0
- package/lib/icons/providers/zetaapi-icon.png +0 -0
- package/lib/icons/providers/zhipu.svg +1 -0
- package/lib/index.js +19 -0
- package/lib/model-descriptions.json +137 -0
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,24 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## [0.2.7] - 2026-09-20
|
|
4
|
+
|
|
5
|
+
### Added
|
|
6
|
+
- **模型选择器厂商标识**:模型行显示**模型所属厂商**的标识(而非转售该模型的 provider),「更多模型」的 provider 分组标题显示该 provider 的标识。标识取自 [Lobe Icons](https://lobehub.com/icons) 的静态 SVG(`@lobehub/icons-static-svg`,MIT),按仓库既有架构在构建期内联进 bundle——`@lobehub/icons` 是 React 组件包,装它就要破坏「零依赖、零打包器、单文件产物」这条约束。用单色字形(`fill="currentColor"`)随主题文字色绘制,亮暗两画布都清晰,也不与「陶烬橙唯一强调色」冲突;彩色变体不做——OpenAI、Anthropic、xAI、Moonshot、Z.ai、Vercel、Groq 等 12 家上游本就没有彩色版,且部分厂商色在 `#141413` 画布上不可见。绑定关系仍是数据:`model-descriptions.json` 的 `brands.providers` / `brands.models`,构建期校验引用的标识都已 vendored,写错即构建失败。
|
|
7
|
+
|
|
8
|
+
### Changed
|
|
9
|
+
- **文本选区改为实色两态**:选中文字不再用半透明陶烬橙,改为平台式实色——窗口聚焦时蓝底白字(`#3366D0` / `#FFFFFF`),窗口失焦时灰底黑字(`#C7C7C6` / `#000000`),亮暗两画布一致。选区是瞬时操作而非界面表层,因此不跟随主题;两态都是实色且带 `!important`,覆盖底下的链接色、行内代码色与语法高亮色,避免"蓝底上保留原文字色"导致读不清。CSS 无法读取窗口焦点(Chromium 走内部 `-internal-inactive-selection-*`),故由新增的 `src/overrides/selection.js` 把焦点态镜像到文档属性上,样式表据此切换;失焦时选区本身保留,不消失。
|
|
10
|
+
- **接入 cc-switch 全量供应商图标**:`src/assets/icons/providers` 引入其 107 个图标,build 解析 `index.ts` / `metadata.ts` 生成 `PROVIDER_ICONS` / `PROVIDER_ICON_METADATA`,宿主新增 `/dsh-claude-style/icons/providers/*` 路由;模型选择器优先用 cc-switch 图标,缺失时回退 Lobe。
|
|
11
|
+
- **更多模型供应商标签改为推挤式 sticky**:每个供应商包成 section,滚动时上一个标签被下一个 section 往上推,而不是直接覆盖。
|
|
12
|
+
- **附件输入框接缝优化**:移除附件轨 focus 时 1px 内圈阴影,消除图片区与文字区之间的分界线和阴影。
|
|
13
|
+
- **更多模型子弹层**:适当提高弹层高度;供应商标签改为 sticky 顶部条,滚动时由下一个供应商标签替换。
|
|
14
|
+
- **更多模型 provider 标签强化**:provider 分组标题改为黑底白字圆角矩形;深色模式为白底黑字。
|
|
15
|
+
- **模型触发器 hover 去重**:删除 trailing 下针对 trigger/model 的额外 hover 规则,只保留模型触发器自身一层背景。
|
|
16
|
+
- **标题中文回退改为黑体**:SERIF 栈移除 CJK 衬线回退,中文落到 Noto Sans SC / 微软雅黑等黑体;西文仍保持 Anthropic Serif / Georgia / Times。
|
|
17
|
+
- **统计弹层合并**:统计行允许收缩省略(如 20轮...);隐藏宿主两个独立弹层,改为一个自定义弹层:上下两个区块(会话统计 / Token 用量),每块 2×2 网格,无总标题,风格与权限弹层一致,内容字号加大。
|
|
18
|
+
- **统计区交互**:统计弹层改为 hover 打开;统计控件仅在鼠标位于整个对话窗口内时显示。 统计行占据中间剩余空间并居中,使到左侧按钮组和右侧模型选择器的距离一致。
|
|
19
|
+
- **输入区统计合并重绘**:会话统计与 token 统计合并为一条居中的紧凑文本(如 23轮439步 · 130tok/s · 125M tok · 99% Cache),隐藏宿主图标与原始标签,两个统计弹层同步重绘为同一套字体/圆角/边框。
|
|
20
|
+
- **模型选择器补充当前非官方模型**:当前选中模型不属于 DeepSeek 官方服务时,在官方模型与更多模型之间用横线分隔并额外显示一行 provider/model。 触发器同时去掉向下箭头,hover 背景只保留在整个触发器上。
|
|
21
|
+
|
|
3
22
|
## [0.2.6] - 2026-09-20
|
|
4
23
|
|
|
5
24
|
### Added
|
|
@@ -9,7 +28,7 @@
|
|
|
9
28
|
### Changed
|
|
10
29
|
- **代码块与表格样式对齐 Claude**:行内代码与代码块字号 -1px;代码块边框移到外层容器,语言标签与代码共用同一圆角边框;Markdown 表格字号提升一档(13px → 14px)、表头 #F0F0EF 背景、12px 圆角,并使用与内部横线一致的 0.5px 线条加外边框。
|
|
11
30
|
- **设置页支持自定义用户名**:新增用户名输入框,输入停顿后自动保存;默认用户名由宿主 OS 用户解析一次并缓存,不再解析工作区路径或轮询;宿主半边未重载时浏览器本地回退保留自定义值。
|
|
12
|
-
- **链接与行内代码样式对齐 Claude**:Markdown 链接下划线静止态 60% 不透明度、hover/focus-visible 恢复 100%,下划线加粗到 1.5px 并保留下划线避让;行内代码与代码块均改用 JetBrains Mono、字号强制与正文一致,并 +1 字重;代码字体栈补上正文 CJK 回退。行内代码背景矩形 padding 缩到 1px、背景色进一步减淡,边框与 composer 输入卡片非焦点态一致(1px solid --dsw-alias-border-l1);Markdown 正文行高 -1px、段落间距 -4px,代码块外边距与行高同步对齐正文。新对话页 composer
|
|
31
|
+
- **链接与行内代码样式对齐 Claude**:Markdown 链接下划线静止态 60% 不透明度、hover/focus-visible 恢复 100%,下划线加粗到 1.5px 并保留下划线避让;行内代码与代码块均改用 JetBrains Mono、字号强制与正文一致,并 +1 字重;代码字体栈补上正文 CJK 回退。行内代码背景矩形 padding 缩到 1px、背景色进一步减淡,边框与 composer 输入卡片非焦点态一致(1px solid --dsw-alias-border-l1);Markdown 正文行高 -1px、段落间距 -4px,代码块外边距与行高同步对齐正文。新对话页 composer 卡片保留纯白填充与真实投影,仅移除背景色光晕阴影。排队消息、后台任务、目标栏提升到消息层之上,避免被消息卡片遮挡;排队 dock 上移 3px,使其下沿对齐输入卡片边框。
|
|
13
32
|
- **代码字体从 Anthropic Mono Variable 替换为 JetBrains Mono Variable**:选用 JetBrains Mono 可变字体(含 Italic)作为代码字体,随插件库一并分发,并保留 SIL OFL 许可证。
|
|
14
33
|
- **权限弹层改为 hover 态打开**:权限分段按钮悬停时打开权限弹层,移入弹层取消关闭,移出后延迟关闭;`autoPopover` 关闭时仍保持点击打开/关闭。
|
|
15
34
|
|
package/LICENSE
CHANGED
|
@@ -29,6 +29,12 @@ Font files notice:
|
|
|
29
29
|
They are included in this repository for personal use only and are **not**
|
|
30
30
|
covered by the MIT license above; all rights remain with Anthropic. The npm
|
|
31
31
|
package does not ship these files.
|
|
32
|
+
Provider icon notice: the files under `src/assets/icons/providers/` (and their
|
|
33
|
+
`lib/icons/providers/` build copy) are vendored from farion1231/cc-switch
|
|
34
|
+
(MIT License, Copyright (c) 2025 Jason Young). They are redistributed under
|
|
35
|
+
the MIT License; brand names and logos remain trademarks of their respective
|
|
36
|
+
owners.
|
|
37
|
+
|
|
32
38
|
- `fonts/JetBrainsMonoVariable.ttf` and `fonts/JetBrainsMonoItalicVariable.ttf`
|
|
33
39
|
are JetBrains Mono, distributed under the SIL Open Font License
|
|
34
40
|
(`fonts/OFL.txt`). They may be redistributed with this plugin.
|
package/README.en.md
CHANGED
|
@@ -56,9 +56,10 @@ Only one theme should be active at a time. After installing, **restart `dsh web`
|
|
|
56
56
|
|
|
57
57
|
1. **Theme** — applies the whole canvas automatically after install; no configuration needed. Light and dark follow the system color scheme.
|
|
58
58
|
2. **Permission segments** — the composer gets a Read | Edit | Auto segmented control replacing the shipped access-mode menu: read-only, workspace write, and full access (Auto is switched through the shipped risk-confirmation dialog).
|
|
59
|
-
3. **
|
|
60
|
-
4. **
|
|
61
|
-
5. **
|
|
59
|
+
3. **Model picker** — the composer's model seat becomes a two-level Claude-style menu: the first level lists DeepSeek's official models, a divider, the reasoning-effort row and "More models", and the second opens beside it. Every model row carries the mark of the **vendor that made the model** (not the provider reselling it), and the "More models" group headers carry the provider's mark. The marks are [Lobe Icons](https://lobehub.com/icons) mono glyphs painted in the theme's own text colour, so they stay legible on both canvases — no React dependency, and no full-colour logos.
|
|
60
|
+
4. **Brand switch** — Settings (`Ctrl+,`) → **Claude Style**: the sidebar brand flips between the Claude starburst + the official Claude wordmark and Anthropic (`A\` + ANTHROPIC wordmark); the hero mark follows the choice with the clay fill. The choice persists in the browser; `claude` is the default.
|
|
61
|
+
5. **Account drawer** — the sidebar footer button opens a hover popover with quick access to Settings (`Ctrl+,`) and plugin management.
|
|
62
|
+
6. **Status polish** — thinking turns pick one of Claude Code's 185 spinner verbs per turn; the workspace loading state uses a Fluent-style circular indicator.
|
|
62
63
|
|
|
63
64
|
## Disable & Uninstall
|
|
64
65
|
|
package/README.md
CHANGED
|
@@ -57,9 +57,10 @@ dsh plugin --profile web add Nwflower/dsh-claude-style # GitHub 源
|
|
|
57
57
|
|
|
58
58
|
1. **主题** —— 安装即全局生效,无需配置;亮暗跟随系统颜色模式。
|
|
59
59
|
2. **权限分段** —— 输入框以 Read | Edit | Auto 三段式控制器替换原生的访问模式菜单:只读、工作区写入与完全权限(Auto 经宿主的安全确认弹窗切换)。
|
|
60
|
-
3.
|
|
61
|
-
4.
|
|
62
|
-
5.
|
|
60
|
+
3. **模型选择器** —— 输入框的模型席位换成 Claude 风格的两级弹层:一级列出 DeepSeek 官方模型、分隔线、推理等级与「更多模型」,二级在右侧展开。每个模型行显示**所属厂商**的标识(不是转售该模型的 provider),「更多模型」的分组标题显示 provider 的标识。标识取自 [Lobe Icons](https://lobehub.com/icons) 的单色字形,跟随主题文字色绘制,因此亮暗两套画布都清晰;不引入 React 组件依赖,也不使用彩色 logo。
|
|
61
|
+
4. **品牌切换** —— 设置(`Ctrl+,`)→ **Claude Style**:侧栏品牌在 Claude(官方星芒 + Claude 字标)与 Anthropic(`A\` + ANTHROPIC 字标)之间切换,新会话页标识随所选品牌保持陶烬橙星芒;选择保存在浏览器本地,默认 Claude。
|
|
62
|
+
5. **账户抽屉** —— 侧栏底栏的账户按钮悬停展开弹层,一键打开设置(`Ctrl+,`)与管理插件。
|
|
63
|
+
6. **状态细节** —— 思考状态每轮从 Claude Code 的 185 个思考动词随机抽取一个稳定展示;工作区运行中状态使用 Fluent 风格的圆形加载动画。
|
|
63
64
|
|
|
64
65
|
## 停用与卸载
|
|
65
66
|
|
|
@@ -84,6 +85,7 @@ dsh plugin --profile web remove dsh-claude-style # 卸载
|
|
|
84
85
|
| --- | --- | --- |
|
|
85
86
|
| Claude 视觉 | 全局 | 象牙白/暖黑双画布、陶烬橙唯一强调色、衬线展示标题 + 无衬线界面 + 等宽代码三字体分工 |
|
|
86
87
|
| 权限控制器 | 输入框浮层 / 新会话分段 | Read · Edit · Auto 三段切换会话权限,Auto 走宿主安全确认 |
|
|
88
|
+
| 模型选择器 | 输入框模型席位 | 两级弹层(官方模型 / 推理等级 / 更多模型);模型行按厂商、分组标题按 provider 显示单色品牌标识 |
|
|
87
89
|
| 品牌切换 | 设置 → Claude Style | Claude(星芒 + Claude 字标)与 Anthropic(`A\`)双标识,选择持久化 |
|
|
88
90
|
| 状态动画 | 会话运行中 | 185 个思考动词随机展示;Windows 11 Fluent 风格圆形加载器 |
|
|
89
91
|
| 账户抽屉 | 侧栏底栏 | 悬停展开弹层,直达设置与管理插件 |
|
package/docs/STYLE.md
CHANGED
|
@@ -40,6 +40,25 @@ Rules:
|
|
|
40
40
|
follows the same hairline so the two tiers stay one outline. Accent is never
|
|
41
41
|
used for focus strokes.
|
|
42
42
|
|
|
43
|
+
## Text selection
|
|
44
|
+
|
|
45
|
+
Selection is the one surface that leaves the palette on purpose — it is a
|
|
46
|
+
transient gesture, not part of the interface, so it uses the platform's two
|
|
47
|
+
solid paints and looks the same on both canvases:
|
|
48
|
+
|
|
49
|
+
| State | Background | Text |
|
|
50
|
+
|---|---|---|
|
|
51
|
+
| Window focused | `#3366D0` | `#FFFFFF` |
|
|
52
|
+
| Window unfocused | `#C7C7C6` | `#000000` |
|
|
53
|
+
|
|
54
|
+
Both are solid (never translucent) and `!important`, so they override whatever
|
|
55
|
+
colour the text underneath carries — links, inline code, syntax tokens. CSS
|
|
56
|
+
cannot read window focus: Chromium reaches the inactive paint through its own
|
|
57
|
+
internal `-internal-inactive-selection-*` properties, which a stylesheet cannot
|
|
58
|
+
address. `src/overrides/selection.js` therefore mirrors `document.hasFocus()`
|
|
59
|
+
onto `data-dsh-window-blur` and the stylesheet switches on that attribute; the
|
|
60
|
+
selection itself survives the blur.
|
|
61
|
+
|
|
43
62
|
## Implementation notes
|
|
44
63
|
|
|
45
64
|
- Every rule is scoped under `body[data-dsh-claude-style]`.
|
|
@@ -54,7 +73,9 @@ assembles the bundle:
|
|
|
54
73
|
| Source | Content |
|
|
55
74
|
|---|---|
|
|
56
75
|
| `src/constants.js` | constants, spinner verbs, shared token values (evaluated at build time to fill `%%TOKEN%%` placeholders) |
|
|
57
|
-
| `src/assets/*.svg` | brand marks, inlined as CSS `url()` data URIs at build time (the loader exposes no asset URLs) |
|
|
76
|
+
| `src/assets/brand/*.svg` | brand marks, inlined as CSS `url()` data URIs at build time (the loader exposes no asset URLs) |
|
|
77
|
+
| `src/assets/icons/lobe/*.svg` | model-vendor marks (Lobe Icons mono, MIT), inlined as a JS markup table at build time; bound to providers/models by `model-descriptions.json` → `brands` |
|
|
78
|
+
| `src/assets/icons/providers/*` | cc-switch provider/vendor icon set (MIT); inline SVGs are bundled, raster/imported files are served by the host route |
|
|
58
79
|
| `src/styles/tokens.css` | design tokens (dark base + ivory light) |
|
|
59
80
|
| `src/styles/typography.css` | serif display / sans UI / mono code, editorial markdown |
|
|
60
81
|
| `src/styles/chrome.css` | canvas, hairlines, clay accent, chrome details |
|
|
@@ -78,6 +99,7 @@ assembles the bundle:
|
|
|
78
99
|
| `src/overrides/model-picker.js` | model picker installer |
|
|
79
100
|
| `src/overrides/account-footer.js` | account footer/popover installer |
|
|
80
101
|
| `src/overrides/scheduler.js` | scheduler, observers, subscriptions, teardown |
|
|
102
|
+
| `src/overrides/selection.js` | mirrors the window's focus state onto the document for the two text-selection paints |
|
|
81
103
|
| `src/settings.js` | settings section (brand switch) |
|
|
82
104
|
| `src/entry.js` | `apply()` orchestrator + exports |
|
|
83
105
|
| `src/model-descriptions.json` | model copy (picker labels + per-model descriptions); validated at build time and **copied** to `lib/`, not inlined |
|
|
@@ -99,6 +121,20 @@ the catalog's own text; family rules are ordered and must stay anchored (the
|
|
|
99
121
|
`flash` rule is scoped to `deepseek`, or another vendor's flash tier inherits
|
|
100
122
|
DeepSeek's copy).
|
|
101
123
|
|
|
124
|
+
The same document carries the picker's **brand marks** under `brands`:
|
|
125
|
+
`brands.providers` maps a provider route id to a vendored mark (the level-2
|
|
126
|
+
group header), and `brands.models` is an ordered, anchored rule list matching a
|
|
127
|
+
model id (the row's vendor — the vendor that made the model, not the aggregator
|
|
128
|
+
reselling it, with the provider's mark as the fallback). Both name ids vendored
|
|
129
|
+
in `src/assets/icons/lobe/`, and the build fails on an id that is not there, so the
|
|
130
|
+
binding cannot drift. The marks are the **mono** Lobe Icons glyphs
|
|
131
|
+
(`fill="currentColor"`), stamped into the row as markup: the theme's own text
|
|
132
|
+
colour paints them, which keeps them legible on both canvases and keeps the
|
|
133
|
+
palette to its single clay accent. Full-colour variants are deliberately not
|
|
134
|
+
used — a third of the vendors ship no colour version (OpenAI, Anthropic, xAI,
|
|
135
|
+
Moonshot, Z.ai, Vercel, Groq), and several brand colours are near-black on the
|
|
136
|
+
`#141413` canvas.
|
|
137
|
+
|
|
102
138
|
### Host selector discipline · 宿主选择器纪律
|
|
103
139
|
|
|
104
140
|
The host uses hashed CSS-module classes (`p_FcLG_row`, `_0cyzDW_viewArea`, …).
|