@iasiv5/dsh-skins 1.5.13 → 1.5.15

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.
Files changed (2) hide show
  1. package/lib/client.js +146 -254
  2. package/package.json +4 -3
package/lib/client.js CHANGED
@@ -2806,11 +2806,6 @@ ${references.join("\n")}`,
2806
2806
  }
2807
2807
 
2808
2808
  // src/client/skins/translucency.js
2809
- function ridingDecl(table2, tokenKey, mode) {
2810
- const [rgb, baked] = table2.riding[tokenKey][mode];
2811
- const alpha = (Math.min(100, Math.max(0, table2.anchor + baked - table2.anchor)) / 100).toFixed(2);
2812
- return `${tokenKey}: rgba(${rgb}, ${alpha});`;
2813
- }
2814
2809
  function glassRule(bodyAttribute, glassVar) {
2815
2810
  const attr = bodyAttribute.replace(/([a-z0-9])([A-Z])/g, "$1-$2").toLowerCase();
2816
2811
  return `body[data-${attr}] [id="root"]{backdrop-filter:blur(var(${glassVar},0px))}`;
@@ -2872,6 +2867,41 @@ ${references.join("\n")}`,
2872
2867
  };
2873
2868
  }
2874
2869
 
2870
+ // src/client/skins/decoration.js
2871
+ var BUBBLE_HOOKS = {
2872
+ chat: { exact: "Sixlwa_bubble", container: "userStack" },
2873
+ goal: { exact: "oRe1gG_bubble", container: "_stack" },
2874
+ bubbleLocal: "_bubble"
2875
+ };
2876
+ var unionSelector = (hook) => `:is([class*="${hook.exact}"], [class*="${hook.container}"] > [class*="${BUBBLE_HOOKS.bubbleLocal}"])`;
2877
+ function decorationCss(scope, palette) {
2878
+ const chat = unionSelector(BUBBLE_HOOKS.chat);
2879
+ const goal = unionSelector(BUBBLE_HOOKS.goal);
2880
+ return [
2881
+ `${scope} ${chat}{border:1px solid rgba(${palette.light}, 0.38);box-shadow:0 1px 4px rgba(${palette.light}, 0.10)}`,
2882
+ `${scope}[data-ds-dark-theme] ${chat}{border-color:rgba(${palette.dark}, 0.38);box-shadow:0 1px 6px rgba(${palette.dark}, 0.10)}`,
2883
+ `${scope} ${goal}{border:1px solid rgba(${palette.light}, 0.38);box-shadow:0 1px 4px rgba(${palette.light}, 0.10)}`,
2884
+ `${scope}[data-ds-dark-theme] ${goal}{border-color:rgba(${palette.dark}, 0.38);box-shadow:0 1px 6px rgba(${palette.dark}, 0.10)}`
2885
+ ].join("\n");
2886
+ }
2887
+ function rootClear(scope) {
2888
+ return `${scope} [id="root"]{background:0 0}`;
2889
+ }
2890
+ function badgeCss(scope, className, colors, metrics) {
2891
+ return [
2892
+ `${scope} ${className}{display:inline-flex;align-items:center;background:${colors.light.bg};border-radius:4px;padding:0 5px;font-size:10px;line-height:${metrics.lineHeight};font-weight:${metrics.fontWeight};letter-spacing:.08em;color:${colors.light.fg}}`,
2893
+ `${scope}[data-ds-dark-theme] ${className}{background:${colors.dark.bg};color:${colors.dark.fg}}`
2894
+ ].join("\n");
2895
+ }
2896
+ function streamingCss(scope, palette) {
2897
+ const KEYFRAMES = "dsh-skins-stream-pulse";
2898
+ return [
2899
+ `${scope} [data-streaming]{border-radius:4px;box-shadow:inset 3px 0 0 var(--dsw-alias-brand-primary)}`,
2900
+ `@keyframes ${KEYFRAMES}{from{box-shadow:inset 3px 0 0 var(--dsw-alias-brand-primary)}to{box-shadow:inset 3px 0 0 rgba(${palette.decay}, 0.20)}}`,
2901
+ `@media (prefers-reduced-motion: no-preference){${scope} [data-streaming]{animation:${KEYFRAMES} 1.6s ease-in-out infinite alternate}}`
2902
+ ].join("\n");
2903
+ }
2904
+
2875
2905
  // src/client/skins/meirenzhi/index.js
2876
2906
  var SCOPE = "body[data-dsh-meirenzhi-skin]";
2877
2907
  var TINTS = {
@@ -2880,21 +2910,23 @@ ${references.join("\n")}`,
2880
2910
  };
2881
2911
  var MARK_URL = "data:image/webp;base64,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";
2882
2912
  var CSS2 = [
2883
- // 反色徽章(official HARNESS 反色语言,tgcf badge 同构):亮=玄夜底雾白字,
2884
- // 暗=雾白底玄夜字。#12121A/#FAF9F6 与面板底色族同源。
2885
- `${SCOPE} .dsh-mrz-badge{display:inline-flex;align-items:center;background:#12121A;border-radius:4px;padding:0 5px;font-size:10px;line-height:16px;font-weight:600;letter-spacing:.08em;color:#FAF9F6}`,
2886
- `body[data-dsh-meirenzhi-skin][data-ds-dark-theme] .dsh-mrz-badge{background:#FAF9F6;color:#12121A}`,
2887
- // 用户气泡描边 + 轻投影(openbmc 同款泡泡边框:框出用户输入区)。挂接用
2888
- // :is() 并集(精确哈希 ∪ 结构化,见 docs/adr/0006):哈希漂移与 DOM 结构
2889
- // 变化两种单点故障各有一支兜底,钩子前提由 verify-upstream-hooks 守卫在
2890
- // check 时钉住。失效仅影响描边装饰,token 填充不受影响。
2891
- `${SCOPE} :is([class*="Sixlwa_bubble"], [class*="userStack"] > [class*="_bubble"]){border:1px solid rgba(184, 67, 63, 0.38);box-shadow:0 1px 4px rgba(184, 67, 63, 0.10)}`,
2892
- `body[data-dsh-meirenzhi-skin][data-ds-dark-theme] :is([class*="Sixlwa_bubble"], [class*="userStack"] > [class*="_bubble"]){border-color:rgba(229, 138, 128, 0.38);box-shadow:0 1px 6px rgba(229, 138, 128, 0.10)}`,
2893
- // 目标面板气泡(goal stack > bubble,与用户气泡同族描边)。ADR-0006 v1.0.4
2894
- // amendment:主人目测 goal 无描边观感不佳,裁决扩入;同款并集策略,守卫
2895
- // 清单已登记 goal 精确哈希与 _stack 结构前提。
2896
- `${SCOPE} :is([class*="oRe1gG_bubble"], [class*="_stack"] > [class*="_bubble"]){border:1px solid rgba(184, 67, 63, 0.38);box-shadow:0 1px 4px rgba(184, 67, 63, 0.10)}`,
2897
- `body[data-dsh-meirenzhi-skin][data-ds-dark-theme] :is([class*="oRe1gG_bubble"], [class*="_stack"] > [class*="_bubble"]){border-color:rgba(229, 138, 128, 0.38);box-shadow:0 1px 6px rgba(229, 138, 128, 0.10)}`,
2913
+ // 反色徽章(official HARNESS 反色语言,tgcf badge 同构):规则唯一来源在
2914
+ // ../decoration.js(ADR-0016);#12121A/#FAF9F6 与面板底色族同源。
2915
+ badgeCss(
2916
+ SCOPE,
2917
+ ".dsh-mrz-badge",
2918
+ { light: { bg: "#12121A", fg: "#FAF9F6" }, dark: { bg: "#FAF9F6", fg: "#12121A" } },
2919
+ { lineHeight: "16px", fontWeight: 600 }
2920
+ ),
2921
+ // 用户+目标气泡描边(ADR-0006 并集挂接谱系,goal v1.0.4 扩入):规则唯一
2922
+ // 来源在 ../decoration.js(ADR-0016),本皮肤只持描边色。
2923
+ decorationCss(SCOPE, { light: "184, 67, 63", dark: "229, 138, 128" }),
2924
+ // 防御性根容器清底(ADR-0016 Q12):上游 #root 现无背景,今日 no-op。
2925
+ rootClear(SCOPE),
2926
+ // 流式呼吸光条(ADR-0016 视觉窗口,本皮新增):品牌令牌骨架 + 鎏金衰减
2927
+ // rgba(217, 180, 92, 0.20)(Q10 主人裁定例外,与萤火虫同源色)——规则
2928
+ // 唯一来源在 ../decoration.js streamingCss。
2929
+ streamingCss(SCOPE, { decay: "217, 180, 92" }),
2898
2930
  // Ambient motion: a slow glow-breath riding the runtime's wallpaper ::before
2899
2931
  // layer + two drifting fireflies on the #root pseudo budget (same shape and
2900
2932
  // cost as the tgcf butterflies); prefers-reduced-motion kills all of it.
@@ -3136,161 +3168,35 @@ ${references.join("\n")}`,
3136
3168
  "--dsw-specific-input-major": { light: ["255, 255, 255", 60], dark: ["18, 42, 60", 65] },
3137
3169
  "--dsw-specific-login-input": { light: ["255, 255, 255", 60], dark: ["18, 42, 60", 65] }
3138
3170
  };
3139
- const SPEC = { anchor: 55, riding: RIDING };
3140
3171
  const CSS3 = `
3141
- /* ---------- ③ 配色 · 亮色 ---------- */
3142
- body[data-dsh-openbmc-skin] {
3143
- /* 品牌主色(按钮/高亮/选中/链接) */
3144
- --dsw-alias-brand-primary: #0083b0;
3145
- --dsw-alias-brand-primary-invert: #ffffff;
3146
- --dsw-alias-brand-text: #007197;
3147
-
3148
- /* 表面/背景(低不透明度 → 背景画透光;overlay 浮层保持较实) */
3149
- ${ridingDecl(SPEC, "--dsw-alias-bg-base", "light")}
3150
- --dsw-alias-bg-overlay: rgba(250, 252, 253, 0.82);
3151
- ${ridingDecl(SPEC, "--dsw-alias-bg-module-platform", "light")}
3152
- ${ridingDecl(SPEC, "--dsw-alias-bg-layer-1", "light")}
3153
- ${ridingDecl(SPEC, "--dsw-alias-bg-layer-2", "light")}
3154
- ${ridingDecl(SPEC, "--dsw-alias-bg-layer-3", "light")}
3155
-
3156
- /* 侧栏列 + 顶栏标题行(冰白透纱,与背景画同调) */
3157
- ${ridingDecl(SPEC, "--dsw-specific-sidebar-fill", "light")}
3158
- --dsw-specific-sidebar-nav-item-hover: rgba(231, 241, 248, 0.90);
3159
- --dsw-specific-sidebar-nav-item-active: rgba(220, 235, 245, 0.90);
3160
- --dsw-specific-sidebar-nav-item-active-accent: #9cc8e0;
3161
-
3162
- /* 输入/菜单/选择器/提示 同系冰蓝。(菜单面三件套经 frost-family.js 家族段统一接管) */
3163
- ${ridingDecl(SPEC, "--dsw-specific-input-major", "light")}
3164
- ${ridingDecl(SPEC, "--dsw-specific-login-input", "light")}
3165
- --dsw-specific-selector: rgba(227, 239, 247, 0.85);
3166
- --dsw-specific-tip: rgba(240, 246, 250, 0.90);
3167
-
3168
- /* 文字层级 */
3169
- --dsw-alias-label-primary: #16262e;
3170
- --dsw-alias-label-secondary: #3f5a66;
3171
- --dsw-alias-label-dimmed: #6b838e;
3172
-
3173
- /* 交互态(品牌蓝) */
3174
- --dsw-alias-interactive-bg-hover: rgba(0, 138, 191, 0.08);
3175
- --dsw-alias-interactive-bg-active: rgba(0, 138, 191, 0.14);
3176
- --dsw-alias-interactive-bg-hover-accent: rgba(140, 206, 63, 0.14); /* 绿点缀 */
3177
- }
3178
-
3179
- /* ---------- ③ 配色 · 暗色(跟随系统明暗) ---------- */
3180
- body[data-dsh-openbmc-skin][data-ds-dark-theme] {
3181
- --dsw-alias-brand-primary: #3ec1e8;
3182
- --dsw-alias-brand-primary-invert: #06222e;
3183
- --dsw-alias-brand-text: #5ec8e8;
3184
-
3185
- ${ridingDecl(SPEC, "--dsw-alias-bg-base", "dark")}
3186
- --dsw-alias-bg-overlay: rgba(10, 22, 32, 0.88);
3187
- ${ridingDecl(SPEC, "--dsw-alias-bg-module-platform", "dark")}
3188
- ${ridingDecl(SPEC, "--dsw-alias-bg-layer-1", "dark")}
3189
- ${ridingDecl(SPEC, "--dsw-alias-bg-layer-2", "dark")}
3190
- ${ridingDecl(SPEC, "--dsw-alias-bg-layer-3", "dark")}
3191
-
3192
- /* 侧栏列 + 顶栏标题行:深冰蓝海军(与画面同色相,拒绝纯黑) */
3193
- ${ridingDecl(SPEC, "--dsw-specific-sidebar-fill", "dark")}
3194
- --dsw-specific-sidebar-nav-item-hover: rgba(18, 41, 58, 0.90);
3195
- --dsw-specific-sidebar-nav-item-active: rgba(20, 47, 68, 0.90);
3196
- --dsw-specific-sidebar-nav-item-active-accent: #29526f;
3197
-
3198
- /* 输入/菜单/选择器/提示 同系深冰蓝(菜单面三件套经 frost-family.js 家族段统一接管) */
3199
- ${ridingDecl(SPEC, "--dsw-specific-input-major", "dark")}
3200
- ${ridingDecl(SPEC, "--dsw-specific-login-input", "dark")}
3201
- --dsw-specific-selector: rgba(16, 40, 64, 0.85);
3202
- --dsw-specific-tip: rgba(12, 30, 44, 0.92);
3203
-
3204
- /* 用户气泡:深冰蓝(替换此前的中性暗块) */
3205
- --dsw-specific-bubble: rgba(20, 41, 60, 0.90);
3206
- --dsw-specific-bubble-highlight: rgba(29, 61, 85, 0.90);
3207
-
3208
- --dsw-alias-label-primary: #dde9ee;
3209
- --dsw-alias-label-secondary: #9fb4bd;
3210
- --dsw-alias-label-dimmed: #69818c;
3211
-
3212
- --dsw-alias-interactive-bg-hover: rgba(62, 193, 232, 0.10);
3213
- --dsw-alias-interactive-bg-active: rgba(62, 193, 232, 0.16);
3214
- --dsw-alias-interactive-bg-hover-accent: rgba(165, 212, 64, 0.16);
3215
- }
3216
-
3217
- /* ---------- ④ 字体:系统 UI + 等宽代码 ---------- */
3218
- body[data-dsh-openbmc-skin] {
3219
- --dsw-font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", "PingFang SC",
3220
- "Hiragino Sans GB", "Microsoft YaHei", "Helvetica Neue", Arial, sans-serif;
3221
- --ds-font-family-code: "JetBrains Mono", ui-monospace, "SF Mono", "Cascadia Code",
3222
- Menlo, Consolas, monospace;
3223
- }
3172
+ /* ---------- ③ 配色:token(常量族 + 随动族)一律走声明表 → constantTokens /
3173
+ riding → tokenOverrides(ADR-0016 C1 + ADR-0017),CSS 模板只持品牌装饰段 ---------- */
3224
3174
 
3225
- /* ---------- ④b 品牌徽章:官方 ▐HARNESS▌ 同构反色片(HTML/CSS 绘制) ----------
3226
- * 壳里不存在 --dsw-alias-label-primary-inverted 令牌(那是官方 BrandWordmark
3227
- * 的内部实现细节),内联 var() 取不到值会让字色整体失效——改为皮肤自带
3228
- * 规则 + 明暗两套显式颜色(与 tgcf 的 NO TABOOS 徽章同一模式)。
3229
- * 圆角 4px:官方 SVG rect 虽是 rx=2,但实测对比需在 14px 高度上取 4px
3230
- * 才有官方观感的弧度(tgcf 徽章同值)。 */
3231
- body[data-dsh-openbmc-skin] .dsh-openbmc-badge {
3232
- display: inline-flex; align-items: center;
3233
- background: #14202B; color: #F7FAFC;
3234
- border-radius: 4px; padding: 0 5px;
3235
- font-size: 10px; line-height: 14px; font-weight: 650; letter-spacing: .08em;
3236
- }
3237
- body[data-dsh-openbmc-skin][data-ds-dark-theme] .dsh-openbmc-badge {
3238
- background: #F7FAFC; color: #14202B;
3239
- }
3175
+ /* ---------- ④b 品牌徽章:官方 ▐HARNESS▌ 同构反色片 ----------
3176
+ * 规则唯一来源在 ../decoration.js badgeCss(ADR-0016;裁决史见其头注),
3177
+ * 本皮自持色值与 metrics(14px/650,Q7 参数化保留现值)。 */
3178
+ ${badgeCss(
3179
+ "body[data-dsh-openbmc-skin]",
3180
+ ".dsh-openbmc-badge",
3181
+ { light: { bg: "#14202B", fg: "#F7FAFC" }, dark: { bg: "#F7FAFC", fg: "#14202B" } },
3182
+ { lineHeight: "14px", fontWeight: 650 }
3183
+ )}
3240
3184
 
3241
- /* ---------- ⑥ 会话气泡装饰:品牌描边 + 流式呼吸光条 ---------- */
3242
- /* 用户气泡填充换品牌蓝 tint(token 层,随版本稳定) */
3243
- body[data-dsh-openbmc-skin] {
3244
- --dsw-specific-bubble: rgba(0, 138, 191, 0.10);
3245
- --dsw-specific-bubble-highlight: rgba(0, 138, 191, 0.18);
3246
- }
3247
- body[data-dsh-openbmc-skin][data-ds-dark-theme] {
3248
- /* 暗色气泡填充由 ③ 暗色块的深冰蓝接管(rgba(20,41,60,.90)),此处不再重定义 */
3249
- }
3250
- /* 用户气泡描边 + 轻投影(框出用户输入区)。挂接用 :is() 并集(精确哈希 ∪
3251
- * 结构化,见 docs/adr/0006):哈希漂移与 DOM 结构变化两种单点故障各有一支
3252
- * 兜底,钩子前提由 verify-upstream-hooks 守卫在 check 时钉住。失效仅影响
3253
- * 描边装饰,token 填充仍然生效;结构分支不命中 goal 面板气泡(其容器
3254
- * _stack 不含 userStack 子串,ADR-0006 实测),goal 维持不描边。 */
3255
- body[data-dsh-openbmc-skin] :is([class*="Sixlwa_bubble"], [class*="userStack"] > [class*="_bubble"]) {
3256
- border: 1px solid rgba(0, 131, 176, 0.38);
3257
- box-shadow: 0 1px 4px rgba(0, 131, 176, 0.10);
3258
- }
3259
- body[data-dsh-openbmc-skin][data-ds-dark-theme] :is([class*="Sixlwa_bubble"], [class*="userStack"] > [class*="_bubble"]) {
3260
- border-color: rgba(62, 193, 232, 0.38);
3261
- box-shadow: 0 1px 6px rgba(62, 193, 232, 0.10);
3262
- }
3263
- /* 目标面板气泡(goal stack > bubble,与用户气泡同族描边)。ADR-0006
3264
- * v1.0.4 amendment:主人目测 goal 无描边观感不佳,裁决扩入;同款并集
3265
- * 策略,守卫清单已登记 goal 精确哈希与 _stack 结构前提。 */
3266
- body[data-dsh-openbmc-skin] :is([class*="oRe1gG_bubble"], [class*="_stack"] > [class*="_bubble"]) {
3267
- border: 1px solid rgba(0, 131, 176, 0.38);
3268
- box-shadow: 0 1px 4px rgba(0, 131, 176, 0.10);
3269
- }
3270
- body[data-dsh-openbmc-skin][data-ds-dark-theme] :is([class*="oRe1gG_bubble"], [class*="_stack"] > [class*="_bubble"]) {
3271
- border-color: rgba(62, 193, 232, 0.38);
3272
- box-shadow: 0 1px 6px rgba(62, 193, 232, 0.10);
3273
- }
3274
- /* 助手消息流式输出中:左侧品牌色呼吸光条(box-shadow 不产生布局位移) */
3275
- body[data-dsh-openbmc-skin] [data-streaming] {
3276
- border-radius: 4px;
3277
- box-shadow: inset 3px 0 0 0 var(--dsw-alias-brand-primary);
3278
- }
3279
- @keyframes obmc-stream-pulse {
3280
- from { box-shadow: inset 3px 0 0 0 var(--dsw-alias-brand-primary); }
3281
- to { box-shadow: inset 3px 0 0 0 rgba(62, 193, 232, 0.20); }
3282
- }
3283
- @media (prefers-reduced-motion: no-preference) {
3284
- body[data-dsh-openbmc-skin] [data-streaming] {
3285
- animation: obmc-stream-pulse 1.6s ease-in-out infinite alternate;
3286
- }
3287
- }
3288
- /* ---------- ⑦ 根容器清底 + 滚动条同系(防御 + 细节,鲸吟同款) ---------- */
3289
- body[data-dsh-openbmc-skin] [id="root"] { background: 0 0; }
3290
- body[data-dsh-openbmc-skin] {
3291
- --dsh-scrollbar-thumb: var(--dsw-alias-scrollbar-bg-l2);
3292
- --dsh-scrollbar-thumb-hover: var(--dsw-alias-scrollbar-hover-l2);
3293
- }
3185
+ /* ---------- ⑥ 会话气泡装饰:品牌描边 + 流式呼吸光条 ----------
3186
+ * 用户气泡填充(明色品牌蓝 tint / 暗色深冰蓝)已随常量族迁声明表
3187
+ * (ADR-0016 C1:--dsw-specific-bubble(-highlight))。 */
3188
+ /* 用户+目标气泡描边(ADR-0006 并集挂接谱系,goal v1.0.4 扩入;结构分支
3189
+ * 不命中 goal 面板气泡、goal 经自己的 _stack 并集描边——全谱系说明见
3190
+ * ../decoration.js 头注):规则唯一来源在 decoration.js(ADR-0016),
3191
+ * 本皮肤只持描边色。 */
3192
+ ${decorationCss("body[data-dsh-openbmc-skin]", { light: "0, 131, 176", dark: "62, 193, 232" })}
3193
+ /* 助手消息流式输出中:左侧品牌色呼吸光条——规则唯一来源在
3194
+ * ../decoration.js streamingCss(ADR-0016 视觉窗口;keyframes 家族化改名
3195
+ * obmc-stream-pulse → dsh-skins-stream-pulse,像素不变)。 */
3196
+ ${streamingCss("body[data-dsh-openbmc-skin]", { decay: "62, 193, 232" })}
3197
+ /* ---------- ⑦ 根容器清底(防御,鲸吟同款家族化 ADR-0016;滚动条同系
3198
+ * token 已随常量族迁声明表) ---------- */
3199
+ ${rootClear("body[data-dsh-openbmc-skin]")}
3294
3200
  /* 注意:不要用类名选择器定位侧栏元素 —— 插件样式经 CSS modules 哈希,
3295
3201
  * 类名不可预测;一律通过 token 或 data-* 属性作用。 */
3296
3202
 
@@ -3309,7 +3215,40 @@ ${references.join("\n")}`,
3309
3215
  favicon: { href: FAVICON_DATA_URL, mime: FAVICON_MIME },
3310
3216
  anchor: 55,
3311
3217
  riding: RIDING,
3312
- constantTokens: null,
3218
+ // 常量族(ADR-0016 C1:原 CSS 模板手写行逐字迁入,明暗同键;等式钉在
3219
+ // tests/translucency-contract.test.mjs「openbmc C1」)。品牌色取自 logo
3220
+ // 渐变(蓝 #00b0da→#008abf、绿 #a5d440→#8cce3f):亮用深一档蓝保证白底
3221
+ // 对比度,暗提亮为青;交互 hover-accent 为绿点缀;暗气泡=深冰蓝海军
3222
+ // (与画面同色相,拒绝纯黑);滚动条同系引用壳令牌。
3223
+ constantTokens: {
3224
+ "--dsw-alias-brand-primary": { light: "#0083b0", dark: "#3ec1e8" },
3225
+ "--dsw-alias-brand-primary-invert": { light: "#ffffff", dark: "#06222e" },
3226
+ "--dsw-alias-brand-text": { light: "#007197", dark: "#5ec8e8" },
3227
+ "--dsw-alias-bg-overlay": { light: "rgba(250, 252, 253, 0.82)", dark: "rgba(10, 22, 32, 0.88)" },
3228
+ "--dsw-specific-sidebar-nav-item-hover": { light: "rgba(231, 241, 248, 0.90)", dark: "rgba(18, 41, 58, 0.90)" },
3229
+ "--dsw-specific-sidebar-nav-item-active": { light: "rgba(220, 235, 245, 0.90)", dark: "rgba(20, 47, 68, 0.90)" },
3230
+ "--dsw-specific-sidebar-nav-item-active-accent": { light: "#9cc8e0", dark: "#29526f" },
3231
+ "--dsw-specific-selector": { light: "rgba(227, 239, 247, 0.85)", dark: "rgba(16, 40, 64, 0.85)" },
3232
+ "--dsw-specific-tip": { light: "rgba(240, 246, 250, 0.90)", dark: "rgba(12, 30, 44, 0.92)" },
3233
+ "--dsw-alias-label-primary": { light: "#16262e", dark: "#dde9ee" },
3234
+ "--dsw-alias-label-secondary": { light: "#3f5a66", dark: "#9fb4bd" },
3235
+ "--dsw-alias-label-dimmed": { light: "#6b838e", dark: "#69818c" },
3236
+ "--dsw-alias-interactive-bg-hover": { light: "rgba(0, 138, 191, 0.08)", dark: "rgba(62, 193, 232, 0.10)" },
3237
+ "--dsw-alias-interactive-bg-active": { light: "rgba(0, 138, 191, 0.14)", dark: "rgba(62, 193, 232, 0.16)" },
3238
+ "--dsw-alias-interactive-bg-hover-accent": { light: "rgba(140, 206, 63, 0.14)", dark: "rgba(165, 212, 64, 0.16)" },
3239
+ "--dsw-specific-bubble": { light: "rgba(0, 138, 191, 0.10)", dark: "rgba(20, 41, 60, 0.90)" },
3240
+ "--dsw-specific-bubble-highlight": { light: "rgba(0, 138, 191, 0.18)", dark: "rgba(29, 61, 85, 0.90)" },
3241
+ "--dsw-font-family": {
3242
+ light: '-apple-system, BlinkMacSystemFont, "Segoe UI", "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", "Helvetica Neue", Arial, sans-serif',
3243
+ dark: '-apple-system, BlinkMacSystemFont, "Segoe UI", "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", "Helvetica Neue", Arial, sans-serif'
3244
+ },
3245
+ "--ds-font-family-code": {
3246
+ light: '"JetBrains Mono", ui-monospace, "SF Mono", "Cascadia Code", Menlo, Consolas, monospace',
3247
+ dark: '"JetBrains Mono", ui-monospace, "SF Mono", "Cascadia Code", Menlo, Consolas, monospace'
3248
+ },
3249
+ "--dsh-scrollbar-thumb": { light: "var(--dsw-alias-scrollbar-bg-l2)", dark: "var(--dsw-alias-scrollbar-bg-l2)" },
3250
+ "--dsh-scrollbar-thumb-hover": { light: "var(--dsw-alias-scrollbar-hover-l2)", dark: "var(--dsw-alias-scrollbar-hover-l2)" }
3251
+ },
3313
3252
  scrim: {
3314
3253
  kind: "baked-gradient",
3315
3254
  stops: {
@@ -3394,87 +3333,17 @@ ${references.join("\n")}`,
3394
3333
  "--dsw-specific-sidebar-fill": { light: ["238, 235, 255", 60], dark: ["25, 20, 48", 72] },
3395
3334
  "--dsw-specific-input-major": { light: ["255, 255, 255", 62], dark: ["42, 34, 78", 55] }
3396
3335
  };
3397
- const SPEC = { anchor: 55, riding: RIDING };
3398
3336
  const css = `
3399
- body[data-dsh-uefi-harness] {
3400
- --dsw-alias-brand-primary: #6553d8;
3401
- --dsw-alias-brand-primary-invert: #ffffff;
3402
- --dsw-alias-brand-text: #5846c2;
3403
- ${ridingDecl(SPEC, "--dsw-alias-bg-base", "light")}
3404
- --dsw-alias-bg-overlay: rgba(252, 251, 255, 0.82);
3405
- ${ridingDecl(SPEC, "--dsw-alias-bg-module-platform", "light")}
3406
- ${ridingDecl(SPEC, "--dsw-alias-bg-layer-1", "light")}
3407
- ${ridingDecl(SPEC, "--dsw-alias-bg-layer-2", "light")}
3408
- ${ridingDecl(SPEC, "--dsw-alias-bg-layer-3", "light")}
3409
- ${ridingDecl(SPEC, "--dsw-specific-sidebar-fill", "light")}
3410
- --dsw-specific-sidebar-nav-item-hover: rgba(101, 83, 216, 0.09);
3411
- --dsw-specific-sidebar-nav-item-active: rgba(101, 83, 216, 0.15);
3412
- --dsw-specific-sidebar-nav-item-active-accent: #8b7cff;
3413
- ${ridingDecl(SPEC, "--dsw-specific-input-major", "light")}
3414
- --dsw-specific-selector: rgba(232, 228, 255, 0.78);
3415
- --dsw-specific-tip: rgba(244, 242, 255, 0.88);
3416
- --dsw-alias-label-primary: #211c36;
3417
- --dsw-alias-label-secondary: #554d74;
3418
- --dsw-alias-label-dimmed: #81799e;
3419
- --dsw-alias-interactive-bg-hover: rgba(101, 83, 216, 0.09);
3420
- --dsw-alias-interactive-bg-active: rgba(101, 83, 216, 0.15);
3421
- --dsw-specific-bubble: rgba(101, 83, 216, 0.11);
3422
- --dsw-specific-bubble-highlight: rgba(101, 83, 216, 0.18);
3423
- --dsw-font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", "PingFang SC", sans-serif;
3424
- }
3425
- body[data-dsh-uefi-harness][data-ds-dark-theme] {
3426
- --dsw-alias-brand-primary: #a99cff;
3427
- --dsw-alias-brand-primary-invert: #1b143a;
3428
- --dsw-alias-brand-text: #b7acff;
3429
- ${ridingDecl(SPEC, "--dsw-alias-bg-base", "dark")}
3430
- --dsw-alias-bg-overlay: rgba(27, 21, 54, 0.88);
3431
- ${ridingDecl(SPEC, "--dsw-alias-bg-module-platform", "dark")}
3432
- ${ridingDecl(SPEC, "--dsw-alias-bg-layer-1", "dark")}
3433
- ${ridingDecl(SPEC, "--dsw-alias-bg-layer-2", "dark")}
3434
- ${ridingDecl(SPEC, "--dsw-alias-bg-layer-3", "dark")}
3435
- ${ridingDecl(SPEC, "--dsw-specific-sidebar-fill", "dark")}
3436
- --dsw-specific-sidebar-nav-item-hover: rgba(169, 156, 255, 0.10);
3437
- --dsw-specific-sidebar-nav-item-active: rgba(169, 156, 255, 0.17);
3438
- --dsw-specific-sidebar-nav-item-active-accent: #6657a8;
3439
- ${ridingDecl(SPEC, "--dsw-specific-input-major", "dark")}
3440
- --dsw-specific-selector: rgba(51, 40, 96, 0.78);
3441
- --dsw-specific-tip: rgba(34, 27, 65, 0.90);
3442
- --dsw-alias-label-primary: #f0edff;
3443
- --dsw-alias-label-secondary: #b9b1d6;
3444
- --dsw-alias-label-dimmed: #827a9f;
3445
- --dsw-alias-interactive-bg-hover: rgba(169, 156, 255, 0.11);
3446
- --dsw-alias-interactive-bg-active: rgba(169, 156, 255, 0.18);
3447
- --dsw-specific-bubble: rgba(60, 48, 108, 0.90);
3448
- --dsw-specific-bubble-highlight: rgba(78, 63, 138, 0.92);
3449
- }
3450
- body[data-dsh-uefi-harness] [id="root"] { background: transparent; }
3451
- body[data-dsh-uefi-harness] [data-streaming] {
3452
- border-radius: 4px;
3453
- box-shadow: inset 3px 0 0 var(--dsw-alias-brand-primary);
3454
- }
3455
- /* 用户气泡描边 + 轻投影(openbmc 同款泡泡边框:框出用户输入区)。挂接用
3456
- * :is() 并集(精确哈希 ∪ 结构化,见 docs/adr/0006):哈希漂移与 DOM 结构
3457
- * 变化两种单点故障各有一支兜底,钩子前提由 verify-upstream-hooks 守卫在
3458
- * check 时钉住。失效仅影响描边装饰,token 填充仍然生效。 */
3459
- body[data-dsh-uefi-harness] :is([class*="Sixlwa_bubble"], [class*="userStack"] > [class*="_bubble"]) {
3460
- border: 1px solid rgba(101, 83, 216, 0.38);
3461
- box-shadow: 0 1px 4px rgba(101, 83, 216, 0.10);
3462
- }
3463
- body[data-dsh-uefi-harness][data-ds-dark-theme] :is([class*="Sixlwa_bubble"], [class*="userStack"] > [class*="_bubble"]) {
3464
- border-color: rgba(169, 156, 255, 0.38);
3465
- box-shadow: 0 1px 6px rgba(169, 156, 255, 0.10);
3466
- }
3467
- /* 目标面板气泡(goal stack > bubble,与用户气泡同族描边)。ADR-0006
3468
- * v1.0.4 amendment:主人目测 goal 无描边观感不佳,裁决扩入;同款并集
3469
- * 策略,守卫清单已登记 goal 精确哈希与 _stack 结构前提。 */
3470
- body[data-dsh-uefi-harness] :is([class*="oRe1gG_bubble"], [class*="_stack"] > [class*="_bubble"]) {
3471
- border: 1px solid rgba(101, 83, 216, 0.38);
3472
- box-shadow: 0 1px 4px rgba(101, 83, 216, 0.10);
3473
- }
3474
- body[data-dsh-uefi-harness][data-ds-dark-theme] :is([class*="oRe1gG_bubble"], [class*="_stack"] > [class*="_bubble"]) {
3475
- border-color: rgba(169, 156, 255, 0.38);
3476
- box-shadow: 0 1px 6px rgba(169, 156, 255, 0.10);
3477
- }
3337
+ /* 配色 token(常量族 + 随动族)一律走声明表 → constantTokens / riding →
3338
+ * tokenOverrides(ADR-0016 C1 + ADR-0017),CSS 模板只持品牌装饰段。 */
3339
+ ${rootClear("body[data-dsh-uefi-harness]")}
3340
+ /* 流式呼吸光条(ADR-0016 视觉窗口:静态版升级呼吸,衰减色 = 暗色品牌主色
3341
+ * @0.20,Q16):规则唯一来源在 ../decoration.js streamingCss。 */
3342
+ ${streamingCss("body[data-dsh-uefi-harness]", { decay: "169, 156, 255" })}
3343
+ /* 用户+目标气泡描边(ADR-0006 并集挂接谱系,goal v1.0.4 扩入——全谱系说明
3344
+ * 见 ../decoration.js 头注):规则唯一来源在 decoration.js(ADR-0016),
3345
+ * 本皮肤只持描边色。 */
3346
+ ${decorationCss("body[data-dsh-uefi-harness]", { light: "101, 83, 216", dark: "169, 156, 255" })}
3478
3347
 
3479
3348
  ${frostFamilyCss("body[data-dsh-uefi-harness]", TINTS2)}
3480
3349
 
@@ -3489,7 +3358,30 @@ body[data-dsh-uefi-harness][data-ds-dark-theme] :is([class*="oRe1gG_bubble"], [c
3489
3358
  favicon: { href: favicon, mime: "image/svg+xml" },
3490
3359
  anchor: 55,
3491
3360
  riding: RIDING,
3492
- constantTokens: null,
3361
+ // 常量族(ADR-0016 C1:原 css 模板手写行逐字迁入;等式钉在
3362
+ // tests/translucency-contract.test.mjs「uefi C1」)。
3363
+ constantTokens: {
3364
+ "--dsw-alias-brand-primary": { light: "#6553d8", dark: "#a99cff" },
3365
+ "--dsw-alias-brand-primary-invert": { light: "#ffffff", dark: "#1b143a" },
3366
+ "--dsw-alias-brand-text": { light: "#5846c2", dark: "#b7acff" },
3367
+ "--dsw-alias-bg-overlay": { light: "rgba(252, 251, 255, 0.82)", dark: "rgba(27, 21, 54, 0.88)" },
3368
+ "--dsw-specific-sidebar-nav-item-hover": { light: "rgba(101, 83, 216, 0.09)", dark: "rgba(169, 156, 255, 0.10)" },
3369
+ "--dsw-specific-sidebar-nav-item-active": { light: "rgba(101, 83, 216, 0.15)", dark: "rgba(169, 156, 255, 0.17)" },
3370
+ "--dsw-specific-sidebar-nav-item-active-accent": { light: "#8b7cff", dark: "#6657a8" },
3371
+ "--dsw-specific-selector": { light: "rgba(232, 228, 255, 0.78)", dark: "rgba(51, 40, 96, 0.78)" },
3372
+ "--dsw-specific-tip": { light: "rgba(244, 242, 255, 0.88)", dark: "rgba(34, 27, 65, 0.90)" },
3373
+ "--dsw-alias-label-primary": { light: "#211c36", dark: "#f0edff" },
3374
+ "--dsw-alias-label-secondary": { light: "#554d74", dark: "#b9b1d6" },
3375
+ "--dsw-alias-label-dimmed": { light: "#81799e", dark: "#827a9f" },
3376
+ "--dsw-alias-interactive-bg-hover": { light: "rgba(101, 83, 216, 0.09)", dark: "rgba(169, 156, 255, 0.11)" },
3377
+ "--dsw-alias-interactive-bg-active": { light: "rgba(101, 83, 216, 0.15)", dark: "rgba(169, 156, 255, 0.18)" },
3378
+ "--dsw-specific-bubble": { light: "rgba(101, 83, 216, 0.11)", dark: "rgba(60, 48, 108, 0.90)" },
3379
+ "--dsw-specific-bubble-highlight": { light: "rgba(101, 83, 216, 0.18)", dark: "rgba(78, 63, 138, 0.92)" },
3380
+ "--dsw-font-family": {
3381
+ light: '-apple-system, BlinkMacSystemFont, "Segoe UI", "PingFang SC", sans-serif',
3382
+ dark: '-apple-system, BlinkMacSystemFont, "Segoe UI", "PingFang SC", sans-serif'
3383
+ }
3384
+ },
3493
3385
  scrim: {
3494
3386
  kind: "baked-gradient",
3495
3387
  stops: {
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@iasiv5/dsh-skins",
3
3
  "description": "DSH Web 皮肤插件:多套品牌皮肤侧栏热切换。",
4
- "version": "1.5.13",
4
+ "version": "1.5.15",
5
5
  "homepage": "https://github.com/iasiv5/dsh-skins#readme",
6
6
  "repository": {
7
7
  "type": "git",
@@ -67,6 +67,7 @@
67
67
  "@deepseek-ai/cordis": "^4.0.4",
68
68
  "esbuild": "^0.28.2",
69
69
  "eslint": "^10.13.0",
70
+ "globals": "^17.13.0",
70
71
  "playwright-core": "1.62.1",
71
72
  "semver": "^7.8.5"
72
73
  },
@@ -78,7 +79,7 @@
78
79
  "verify:readme": "node scripts/verify-readme-pairing.mjs",
79
80
  "verify:bundle": "node scripts/verify-bundle-guard.mjs",
80
81
  "verify:hooks": "node scripts/verify-upstream-hooks.mjs",
81
- "check": "pnpm run check:lockfile && pnpm run build && node --check lib/client.js && node --check lib/index.js && pnpm run lint:tests && pnpm run test && pnpm run verify:readme && pnpm run verify:bundle && pnpm run verify:hooks && git diff --exit-code -- lib/index.js lib/client.js",
82
- "lint:tests": "eslint tests/"
82
+ "check": "pnpm run check:lockfile && pnpm run build && node --check lib/client.js && node --check lib/index.js && pnpm run lint && pnpm run test && pnpm run verify:readme && pnpm run verify:bundle && pnpm run verify:hooks && git diff --exit-code -- lib/index.js lib/client.js",
83
+ "lint": "eslint ."
83
84
  }
84
85
  }