@iasiv5/dsh-skins 1.5.13 → 1.5.14

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 -208
  2. package/package.json +4 -3
package/lib/client.js CHANGED
@@ -2872,6 +2872,41 @@ ${references.join("\n")}`,
2872
2872
  };
2873
2873
  }
2874
2874
 
2875
+ // src/client/skins/decoration.js
2876
+ var BUBBLE_HOOKS = {
2877
+ chat: { exact: "Sixlwa_bubble", container: "userStack" },
2878
+ goal: { exact: "oRe1gG_bubble", container: "_stack" },
2879
+ bubbleLocal: "_bubble"
2880
+ };
2881
+ var unionSelector = (hook) => `:is([class*="${hook.exact}"], [class*="${hook.container}"] > [class*="${BUBBLE_HOOKS.bubbleLocal}"])`;
2882
+ function decorationCss(scope, palette) {
2883
+ const chat = unionSelector(BUBBLE_HOOKS.chat);
2884
+ const goal = unionSelector(BUBBLE_HOOKS.goal);
2885
+ return [
2886
+ `${scope} ${chat}{border:1px solid rgba(${palette.light}, 0.38);box-shadow:0 1px 4px rgba(${palette.light}, 0.10)}`,
2887
+ `${scope}[data-ds-dark-theme] ${chat}{border-color:rgba(${palette.dark}, 0.38);box-shadow:0 1px 6px rgba(${palette.dark}, 0.10)}`,
2888
+ `${scope} ${goal}{border:1px solid rgba(${palette.light}, 0.38);box-shadow:0 1px 4px rgba(${palette.light}, 0.10)}`,
2889
+ `${scope}[data-ds-dark-theme] ${goal}{border-color:rgba(${palette.dark}, 0.38);box-shadow:0 1px 6px rgba(${palette.dark}, 0.10)}`
2890
+ ].join("\n");
2891
+ }
2892
+ function rootClear(scope) {
2893
+ return `${scope} [id="root"]{background:0 0}`;
2894
+ }
2895
+ function badgeCss(scope, className, colors, metrics) {
2896
+ return [
2897
+ `${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}}`,
2898
+ `${scope}[data-ds-dark-theme] ${className}{background:${colors.dark.bg};color:${colors.dark.fg}}`
2899
+ ].join("\n");
2900
+ }
2901
+ function streamingCss(scope, palette) {
2902
+ const KEYFRAMES = "dsh-skins-stream-pulse";
2903
+ return [
2904
+ `${scope} [data-streaming]{border-radius:4px;box-shadow:inset 3px 0 0 var(--dsw-alias-brand-primary)}`,
2905
+ `@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)}}`,
2906
+ `@media (prefers-reduced-motion: no-preference){${scope} [data-streaming]{animation:${KEYFRAMES} 1.6s ease-in-out infinite alternate}}`
2907
+ ].join("\n");
2908
+ }
2909
+
2875
2910
  // src/client/skins/meirenzhi/index.js
2876
2911
  var SCOPE = "body[data-dsh-meirenzhi-skin]";
2877
2912
  var TINTS = {
@@ -2880,21 +2915,23 @@ ${references.join("\n")}`,
2880
2915
  };
2881
2916
  var MARK_URL = "data:image/webp;base64,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";
2882
2917
  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)}`,
2918
+ // 反色徽章(official HARNESS 反色语言,tgcf badge 同构):规则唯一来源在
2919
+ // ../decoration.js(ADR-0016);#12121A/#FAF9F6 与面板底色族同源。
2920
+ badgeCss(
2921
+ SCOPE,
2922
+ ".dsh-mrz-badge",
2923
+ { light: { bg: "#12121A", fg: "#FAF9F6" }, dark: { bg: "#FAF9F6", fg: "#12121A" } },
2924
+ { lineHeight: "16px", fontWeight: 600 }
2925
+ ),
2926
+ // 用户+目标气泡描边(ADR-0006 并集挂接谱系,goal v1.0.4 扩入):规则唯一
2927
+ // 来源在 ../decoration.js(ADR-0016),本皮肤只持描边色。
2928
+ decorationCss(SCOPE, { light: "184, 67, 63", dark: "229, 138, 128" }),
2929
+ // 防御性根容器清底(ADR-0016 Q12):上游 #root 现无背景,今日 no-op。
2930
+ rootClear(SCOPE),
2931
+ // 流式呼吸光条(ADR-0016 视觉窗口,本皮新增):品牌令牌骨架 + 鎏金衰减
2932
+ // rgba(217, 180, 92, 0.20)(Q10 主人裁定例外,与萤火虫同源色)——规则
2933
+ // 唯一来源在 ../decoration.js streamingCss。
2934
+ streamingCss(SCOPE, { decay: "217, 180, 92" }),
2898
2935
  // Ambient motion: a slow glow-breath riding the runtime's wallpaper ::before
2899
2936
  // layer + two drifting fireflies on the #root pseudo budget (same shape and
2900
2937
  // cost as the tgcf butterflies); prefers-reduced-motion kills all of it.
@@ -3138,159 +3175,55 @@ ${references.join("\n")}`,
3138
3175
  };
3139
3176
  const SPEC = { anchor: 55, riding: RIDING };
3140
3177
  const CSS3 = `
3141
- /* ---------- ③ 配色 · 亮色 ---------- */
3178
+ /* ---------- ③ 配色:常量族已迁声明表 constantTokens(ADR-0016 C1),
3179
+ 此处只留随动族 ridingDecl 插值行(ADR-0004 锚点字节不变式的载体) ---------- */
3142
3180
  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
3181
  ${ridingDecl(SPEC, "--dsw-alias-bg-base", "light")}
3150
- --dsw-alias-bg-overlay: rgba(250, 252, 253, 0.82);
3151
3182
  ${ridingDecl(SPEC, "--dsw-alias-bg-module-platform", "light")}
3152
3183
  ${ridingDecl(SPEC, "--dsw-alias-bg-layer-1", "light")}
3153
3184
  ${ridingDecl(SPEC, "--dsw-alias-bg-layer-2", "light")}
3154
3185
  ${ridingDecl(SPEC, "--dsw-alias-bg-layer-3", "light")}
3155
-
3156
- /* 侧栏列 + 顶栏标题行(冰白透纱,与背景画同调) */
3157
3186
  ${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
3187
  ${ridingDecl(SPEC, "--dsw-specific-input-major", "light")}
3164
3188
  ${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
3189
  }
3178
3190
 
3179
- /* ---------- ③ 配色 · 暗色(跟随系统明暗) ---------- */
3180
3191
  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
3192
  ${ridingDecl(SPEC, "--dsw-alias-bg-base", "dark")}
3186
- --dsw-alias-bg-overlay: rgba(10, 22, 32, 0.88);
3187
3193
  ${ridingDecl(SPEC, "--dsw-alias-bg-module-platform", "dark")}
3188
3194
  ${ridingDecl(SPEC, "--dsw-alias-bg-layer-1", "dark")}
3189
3195
  ${ridingDecl(SPEC, "--dsw-alias-bg-layer-2", "dark")}
3190
3196
  ${ridingDecl(SPEC, "--dsw-alias-bg-layer-3", "dark")}
3191
-
3192
- /* 侧栏列 + 顶栏标题行:深冰蓝海军(与画面同色相,拒绝纯黑) */
3193
3197
  ${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
3198
  ${ridingDecl(SPEC, "--dsw-specific-input-major", "dark")}
3200
3199
  ${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
3200
  }
3216
3201
 
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
- }
3202
+ /* ---------- ④b 品牌徽章:官方 ▐HARNESS▌ 同构反色片 ----------
3203
+ * 规则唯一来源在 ../decoration.js badgeCss(ADR-0016;裁决史见其头注),
3204
+ * 本皮自持色值与 metrics(14px/650,Q7 参数化保留现值)。 */
3205
+ ${badgeCss(
3206
+ "body[data-dsh-openbmc-skin]",
3207
+ ".dsh-openbmc-badge",
3208
+ { light: { bg: "#14202B", fg: "#F7FAFC" }, dark: { bg: "#F7FAFC", fg: "#14202B" } },
3209
+ { lineHeight: "14px", fontWeight: 650 }
3210
+ )}
3224
3211
 
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
- }
3240
-
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
- }
3212
+ /* ---------- ⑥ 会话气泡装饰:品牌描边 + 流式呼吸光条 ----------
3213
+ * 用户气泡填充(明色品牌蓝 tint / 暗色深冰蓝)已随常量族迁声明表
3214
+ * (ADR-0016 C1:--dsw-specific-bubble(-highlight))。 */
3215
+ /* 用户+目标气泡描边(ADR-0006 并集挂接谱系,goal v1.0.4 扩入;结构分支
3216
+ * 不命中 goal 面板气泡、goal 经自己的 _stack 并集描边——全谱系说明见
3217
+ * ../decoration.js 头注):规则唯一来源在 decoration.js(ADR-0016),
3218
+ * 本皮肤只持描边色。 */
3219
+ ${decorationCss("body[data-dsh-openbmc-skin]", { light: "0, 131, 176", dark: "62, 193, 232" })}
3220
+ /* 助手消息流式输出中:左侧品牌色呼吸光条——规则唯一来源在
3221
+ * ../decoration.js streamingCss(ADR-0016 视觉窗口;keyframes 家族化改名
3222
+ * obmc-stream-pulse → dsh-skins-stream-pulse,像素不变)。 */
3223
+ ${streamingCss("body[data-dsh-openbmc-skin]", { decay: "62, 193, 232" })}
3224
+ /* ---------- ⑦ 根容器清底(防御,鲸吟同款家族化 ADR-0016;滚动条同系
3225
+ * token 已随常量族迁声明表) ---------- */
3226
+ ${rootClear("body[data-dsh-openbmc-skin]")}
3294
3227
  /* 注意:不要用类名选择器定位侧栏元素 —— 插件样式经 CSS modules 哈希,
3295
3228
  * 类名不可预测;一律通过 token 或 data-* 属性作用。 */
3296
3229
 
@@ -3309,7 +3242,40 @@ ${references.join("\n")}`,
3309
3242
  favicon: { href: FAVICON_DATA_URL, mime: FAVICON_MIME },
3310
3243
  anchor: 55,
3311
3244
  riding: RIDING,
3312
- constantTokens: null,
3245
+ // 常量族(ADR-0016 C1:原 CSS 模板手写行逐字迁入,明暗同键;等式钉在
3246
+ // tests/translucency-contract.test.mjs「openbmc C1」)。品牌色取自 logo
3247
+ // 渐变(蓝 #00b0da→#008abf、绿 #a5d440→#8cce3f):亮用深一档蓝保证白底
3248
+ // 对比度,暗提亮为青;交互 hover-accent 为绿点缀;暗气泡=深冰蓝海军
3249
+ // (与画面同色相,拒绝纯黑);滚动条同系引用壳令牌。
3250
+ constantTokens: {
3251
+ "--dsw-alias-brand-primary": { light: "#0083b0", dark: "#3ec1e8" },
3252
+ "--dsw-alias-brand-primary-invert": { light: "#ffffff", dark: "#06222e" },
3253
+ "--dsw-alias-brand-text": { light: "#007197", dark: "#5ec8e8" },
3254
+ "--dsw-alias-bg-overlay": { light: "rgba(250, 252, 253, 0.82)", dark: "rgba(10, 22, 32, 0.88)" },
3255
+ "--dsw-specific-sidebar-nav-item-hover": { light: "rgba(231, 241, 248, 0.90)", dark: "rgba(18, 41, 58, 0.90)" },
3256
+ "--dsw-specific-sidebar-nav-item-active": { light: "rgba(220, 235, 245, 0.90)", dark: "rgba(20, 47, 68, 0.90)" },
3257
+ "--dsw-specific-sidebar-nav-item-active-accent": { light: "#9cc8e0", dark: "#29526f" },
3258
+ "--dsw-specific-selector": { light: "rgba(227, 239, 247, 0.85)", dark: "rgba(16, 40, 64, 0.85)" },
3259
+ "--dsw-specific-tip": { light: "rgba(240, 246, 250, 0.90)", dark: "rgba(12, 30, 44, 0.92)" },
3260
+ "--dsw-alias-label-primary": { light: "#16262e", dark: "#dde9ee" },
3261
+ "--dsw-alias-label-secondary": { light: "#3f5a66", dark: "#9fb4bd" },
3262
+ "--dsw-alias-label-dimmed": { light: "#6b838e", dark: "#69818c" },
3263
+ "--dsw-alias-interactive-bg-hover": { light: "rgba(0, 138, 191, 0.08)", dark: "rgba(62, 193, 232, 0.10)" },
3264
+ "--dsw-alias-interactive-bg-active": { light: "rgba(0, 138, 191, 0.14)", dark: "rgba(62, 193, 232, 0.16)" },
3265
+ "--dsw-alias-interactive-bg-hover-accent": { light: "rgba(140, 206, 63, 0.14)", dark: "rgba(165, 212, 64, 0.16)" },
3266
+ "--dsw-specific-bubble": { light: "rgba(0, 138, 191, 0.10)", dark: "rgba(20, 41, 60, 0.90)" },
3267
+ "--dsw-specific-bubble-highlight": { light: "rgba(0, 138, 191, 0.18)", dark: "rgba(29, 61, 85, 0.90)" },
3268
+ "--dsw-font-family": {
3269
+ light: '-apple-system, BlinkMacSystemFont, "Segoe UI", "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", "Helvetica Neue", Arial, sans-serif',
3270
+ dark: '-apple-system, BlinkMacSystemFont, "Segoe UI", "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", "Helvetica Neue", Arial, sans-serif'
3271
+ },
3272
+ "--ds-font-family-code": {
3273
+ light: '"JetBrains Mono", ui-monospace, "SF Mono", "Cascadia Code", Menlo, Consolas, monospace',
3274
+ dark: '"JetBrains Mono", ui-monospace, "SF Mono", "Cascadia Code", Menlo, Consolas, monospace'
3275
+ },
3276
+ "--dsh-scrollbar-thumb": { light: "var(--dsw-alias-scrollbar-bg-l2)", dark: "var(--dsw-alias-scrollbar-bg-l2)" },
3277
+ "--dsh-scrollbar-thumb-hover": { light: "var(--dsw-alias-scrollbar-hover-l2)", dark: "var(--dsw-alias-scrollbar-hover-l2)" }
3278
+ },
3313
3279
  scrim: {
3314
3280
  kind: "baked-gradient",
3315
3281
  stops: {
@@ -3396,85 +3362,34 @@ ${references.join("\n")}`,
3396
3362
  };
3397
3363
  const SPEC = { anchor: 55, riding: RIDING };
3398
3364
  const css = `
3365
+ /* 配色常量族已迁声明表 constantTokens(ADR-0016 C1);此处只留随动族
3366
+ * ridingDecl 插值行(ADR-0004 锚点字节不变式的载体)。 */
3399
3367
  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
3368
  ${ridingDecl(SPEC, "--dsw-alias-bg-base", "light")}
3404
- --dsw-alias-bg-overlay: rgba(252, 251, 255, 0.82);
3405
3369
  ${ridingDecl(SPEC, "--dsw-alias-bg-module-platform", "light")}
3406
3370
  ${ridingDecl(SPEC, "--dsw-alias-bg-layer-1", "light")}
3407
3371
  ${ridingDecl(SPEC, "--dsw-alias-bg-layer-2", "light")}
3408
3372
  ${ridingDecl(SPEC, "--dsw-alias-bg-layer-3", "light")}
3409
3373
  ${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
3374
  ${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
3375
  }
3425
3376
  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
3377
  ${ridingDecl(SPEC, "--dsw-alias-bg-base", "dark")}
3430
- --dsw-alias-bg-overlay: rgba(27, 21, 54, 0.88);
3431
3378
  ${ridingDecl(SPEC, "--dsw-alias-bg-module-platform", "dark")}
3432
3379
  ${ridingDecl(SPEC, "--dsw-alias-bg-layer-1", "dark")}
3433
3380
  ${ridingDecl(SPEC, "--dsw-alias-bg-layer-2", "dark")}
3434
3381
  ${ridingDecl(SPEC, "--dsw-alias-bg-layer-3", "dark")}
3435
3382
  ${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
3383
  ${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
3384
  }
3385
+ ${rootClear("body[data-dsh-uefi-harness]")}
3386
+ /* 流式呼吸光条(ADR-0016 视觉窗口:静态版升级呼吸,衰减色 = 暗色品牌主色
3387
+ * @0.20,Q16):规则唯一来源在 ../decoration.js streamingCss。 */
3388
+ ${streamingCss("body[data-dsh-uefi-harness]", { decay: "169, 156, 255" })}
3389
+ /* 用户+目标气泡描边(ADR-0006 并集挂接谱系,goal v1.0.4 扩入——全谱系说明
3390
+ * 见 ../decoration.js 头注):规则唯一来源在 decoration.js(ADR-0016),
3391
+ * 本皮肤只持描边色。 */
3392
+ ${decorationCss("body[data-dsh-uefi-harness]", { light: "101, 83, 216", dark: "169, 156, 255" })}
3478
3393
 
3479
3394
  ${frostFamilyCss("body[data-dsh-uefi-harness]", TINTS2)}
3480
3395
 
@@ -3489,7 +3404,30 @@ body[data-dsh-uefi-harness][data-ds-dark-theme] :is([class*="oRe1gG_bubble"], [c
3489
3404
  favicon: { href: favicon, mime: "image/svg+xml" },
3490
3405
  anchor: 55,
3491
3406
  riding: RIDING,
3492
- constantTokens: null,
3407
+ // 常量族(ADR-0016 C1:原 css 模板手写行逐字迁入;等式钉在
3408
+ // tests/translucency-contract.test.mjs「uefi C1」)。
3409
+ constantTokens: {
3410
+ "--dsw-alias-brand-primary": { light: "#6553d8", dark: "#a99cff" },
3411
+ "--dsw-alias-brand-primary-invert": { light: "#ffffff", dark: "#1b143a" },
3412
+ "--dsw-alias-brand-text": { light: "#5846c2", dark: "#b7acff" },
3413
+ "--dsw-alias-bg-overlay": { light: "rgba(252, 251, 255, 0.82)", dark: "rgba(27, 21, 54, 0.88)" },
3414
+ "--dsw-specific-sidebar-nav-item-hover": { light: "rgba(101, 83, 216, 0.09)", dark: "rgba(169, 156, 255, 0.10)" },
3415
+ "--dsw-specific-sidebar-nav-item-active": { light: "rgba(101, 83, 216, 0.15)", dark: "rgba(169, 156, 255, 0.17)" },
3416
+ "--dsw-specific-sidebar-nav-item-active-accent": { light: "#8b7cff", dark: "#6657a8" },
3417
+ "--dsw-specific-selector": { light: "rgba(232, 228, 255, 0.78)", dark: "rgba(51, 40, 96, 0.78)" },
3418
+ "--dsw-specific-tip": { light: "rgba(244, 242, 255, 0.88)", dark: "rgba(34, 27, 65, 0.90)" },
3419
+ "--dsw-alias-label-primary": { light: "#211c36", dark: "#f0edff" },
3420
+ "--dsw-alias-label-secondary": { light: "#554d74", dark: "#b9b1d6" },
3421
+ "--dsw-alias-label-dimmed": { light: "#81799e", dark: "#827a9f" },
3422
+ "--dsw-alias-interactive-bg-hover": { light: "rgba(101, 83, 216, 0.09)", dark: "rgba(169, 156, 255, 0.11)" },
3423
+ "--dsw-alias-interactive-bg-active": { light: "rgba(101, 83, 216, 0.15)", dark: "rgba(169, 156, 255, 0.18)" },
3424
+ "--dsw-specific-bubble": { light: "rgba(101, 83, 216, 0.11)", dark: "rgba(60, 48, 108, 0.90)" },
3425
+ "--dsw-specific-bubble-highlight": { light: "rgba(101, 83, 216, 0.18)", dark: "rgba(78, 63, 138, 0.92)" },
3426
+ "--dsw-font-family": {
3427
+ light: '-apple-system, BlinkMacSystemFont, "Segoe UI", "PingFang SC", sans-serif',
3428
+ dark: '-apple-system, BlinkMacSystemFont, "Segoe UI", "PingFang SC", sans-serif'
3429
+ }
3430
+ },
3493
3431
  scrim: {
3494
3432
  kind: "baked-gradient",
3495
3433
  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.14",
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
  }