/* ============================================================================
 * wechat-mobile / skin.css  —  L1 token 重映射 + L2 语义属性样式
 * ----------------------------------------------------------------------------
 * 写作纪律（务必遵守，违反任一条都会让整包 CSS 白写）：
 *   1) 选择器一律写「裸选择器」，不要自己写 html[data-dsh-skin="..."]。
 *      皮肤中心在服务端用 transformSkinCss() 给每个选择器强制加前缀
 *      `html[data-dsh-skin="wechat-mobile"]`；自己再写一遍会变成
 *      `html[data-dsh-skin="wechat-mobile"] html[data-dsh-skin="..."] ...`，
 *      永远是「后代里的后代」，匹配不到。html 级状态要写 `:root[...]`。
 *   2) L1 只重映射官方 token 清单（official-tokens-v1.json，299 个）里的名字，
 *      清单外的名字写了也不报错、但等于没写。
 *   3) 禁止 @import / http(s):// / //cdn / 以 / 开头的绝对路径。
 *   4) ★不要把布局属性（width/position/padding/background）写在
 *      [data-slot="..."] 上★：官方壳层所有槽位出口都是 display:contents
 *      （renderer 第 1094 行 ANCHOR_STYLE = {display:"contents"}），
 *      实测包围盒 0×0，写了不画东西。布局要用「类名后缀」锚点：
 *        [class*="sidebarCol"] / [class*="centerCol"] / [class*="composerSeat"]
 *      这是皮肤中心自己承认的兼容手法（SEMANTIC_RULES_V1 的 note 写明：
 *      哈希前缀会变、后缀稳定）。类名匹配会触发一条「可能随官方重建失效」
 *      告警，属已知代价。
 * ========================================================================= */

/* ========================== L1：微信浅色配色 ============================== */
html[data-dsh-skin="wechat-mobile"] {
  /* —— 底色 / 面板 —— */
  --dsw-alias-bg-base: #ededed;              /* 页面底、聊天背景 */
  --dsw-alias-bg-layer-1: #ffffff;           /* 卡片、气泡、列表行 */
  --dsw-alias-bg-layer-2: #ffffff;
  --dsw-alias-bg-layer-3: #f7f7f7;           /* 次级面板、输入条 */
  --dsw-alias-bg-layer-4: #f2f2f2;
  --dsw-alias-bg-overlay: #ffffff;
  --dsw-alias-bg-module-platform: #ffffff;
  --dsw-alias-bg-multi-select: rgba(7, 193, 96, 0.08);
  --dsw-alias-bg-skeleton: #e6e6e6;
  --dsw-alias-bg-mask-1: rgba(0, 0, 0, 0.45);
  --dsw-alias-bg-mask-2: rgba(0, 0, 0, 0.25);
  --dsw-alias-bg-mask-3: rgba(0, 0, 0, 0.6);
  --dsw-alias-bg-mask-drop: rgba(0, 0, 0, 0.05);
  --dsw-alias-bg-mask-photo: rgba(0, 0, 0, 0.7);

  /* —— 分割线（微信 1px 浅灰） —— */
  --dsw-alias-border-l1: #e5e5e5;
  --dsw-alias-border-l2: #e5e5e5;
  --dsw-alias-border-l2-darkmode-thin: #e9e9e9;
  --dsw-alias-border-l3: #dcdcdc;
  --dsw-alias-border-l4: #cfcfcf;
  --dsw-alias-border-inverted: rgba(255, 255, 255, 0.4);
  --dsw-alias-border-inverted2: rgba(255, 255, 255, 0.6);

  /* —— 文字 —— */
  --dsw-alias-label-primary: #191919;        /* 正文 / 会话名 */
  --dsw-alias-label-primary-dimmed: #3b3b3b;
  --dsw-alias-label-primary-bluish: #576b95;
  --dsw-alias-label-secondary: #576b95;      /* 微信链接蓝 */
  --dsw-alias-label-tertiary: #9e9e9e;       /* 会话预览文字 */
  --dsw-alias-label-caption: #b2b2b2;        /* 时间戳 */
  --dsw-alias-label-dimmed: #c4c4c4;
  --dsw-alias-label-primary-foreground: #ffffff;
  --dsw-alias-label-primary-inverted: #ffffff;
  --dsw-alias-label-error: #fa5151;
  --dsw-alias-link: #576b95;

  /* —— 品牌绿 —— */
  --dsw-alias-brand-primary: #07c160;
  --dsw-alias-brand-primary-invert: #ffffff;
  --dsw-alias-brand-text: #191919;

  /* —— 按钮（主行动色必须成对定义，否则皮肤中心发对比度告警） ——
     注意：微信绿 #07C160 + 白字 = 2.38:1，低于皮肤中心 3:1 的 UI 门槛，
     会收到两条 warning（浅色/深色各一条）。这是微信官方配色本身如此，
     属于「可知可接受」的告警（皮肤中心对告警只提示、不拦截）。
     若想让告警归零，把下面两行换成注释里的深一档绿色：
       --dsw-alias-button-primary-fill: #059748;   （白字 3.80:1）
       --dsw-alias-button-primary-hover: #048a3b;  （白字 4.46:1）
     品牌绿 --dsw-alias-brand-primary 仍保持微信原色 #07C160（红点/强调/进度用）。 */
  --dsw-alias-button-primary-fill: #07c160;
  --dsw-alias-button-primary-hover: #06ad56;
  --dsw-alias-button-primary-dimmed: #a9e8c4;
  --dsw-alias-button-info-fill: #07c160;
  --dsw-alias-button-info-hover: #06ad56;
  --dsw-alias-button-contrast-fill: #07c160;
  --dsw-alias-button-floating-fill: #ffffff;
  --dsw-alias-button-floating-hover: #f2f2f2;
  --dsw-alias-button-elevated-fill: #ffffff;
  --dsw-alias-button-ghost-active-fill: rgba(7, 193, 96, 0.1);
  --dsw-alias-button-ghost-active-hover: rgba(7, 193, 96, 0.16);
  --dsw-alias-button-ghost-active-border: #07c160;
  --dsw-alias-button-tool-bar-fill: rgba(7, 193, 96, 0.1);
  --dsw-alias-button-tool-bar-hover: rgba(7, 193, 96, 0.16);
  --dsw-alias-button-tool-bar-fill-invisible: rgba(7, 193, 96, 0.06);

  /* —— 交互态 —— */
  --dsw-alias-interactive-bg-hover: rgba(0, 0, 0, 0.03);
  --dsw-alias-interactive-bg-active: rgba(0, 0, 0, 0.06);
  --dsw-alias-interactive-bg-hover-solid: #f2f2f2;
  --dsw-alias-interactive-bg-hover-accent: rgba(7, 193, 96, 0.1);
  --dsw-alias-interactive-bg-hover-danger: rgba(250, 81, 81, 0.1);

  /* —— 状态色：微信红点 / 绿 / 黄 —— */
  --dsw-alias-state-success-primary: #07c160;
  --dsw-alias-state-success-secondary: #07c160;
  --dsw-alias-state-error-primary: #fa5151;
  --dsw-alias-state-error-secondary: #fa5151;
  --dsw-alias-state-warn-primary: #ffc300;
  --dsw-alias-state-warn-secondary: #ffc300;
  --dsw-alias-state-warn-tertiary: #ffe08a;
  --dsw-alias-state-warn-label: #7a5c00;
  --dsw-alias-state-idle-primary: #b2b2b2;
  --dsw-alias-state-business-primary: #576b95;
  --dsw-alias-state-business-tertiary: #dfe6f2;

  /* —— 代码块 —— */
  --dsw-alias-markdown-code-block: #f7f7f7;
  --dsw-alias-markdown-code-block-banner: #efefef;
  --dsw-alias-markdown-inline-code: #f2f2f2;
  --dsw-alias-markdown-tag: #07c160;
  --dsw-alias-markdown-citation: #576b95;
  --dsw-alias-markdown-placeholder: #b2b2b2;
  --dsw-alias-markdown-code-segment-selected: rgba(7, 193, 96, 0.16);
  --dsw-alias-markdown-code-segment-unselected: rgba(0, 0, 0, 0.04);

  /* —— 滚动条 / 浮层 —— */
  --dsw-alias-scrollbar-bg-l1: rgba(0, 0, 0, 0.08);
  --dsw-alias-scrollbar-hover-l1: rgba(0, 0, 0, 0.16);
  --dsw-alias-scrollbar-bg-l2: rgba(0, 0, 0, 0.06);
  --dsw-alias-scrollbar-hover-l2: rgba(0, 0, 0, 0.14);
  --dsw-alias-toast-bg: rgba(0, 0, 0, 0.75);
  --dsw-alias-tooltip-bg: rgba(0, 0, 0, 0.75);

  /* —— 差分 / 文件视图 —— */
  --dsw-alias-code-diff-added: rgba(7, 193, 96, 0.12);
  --dsw-alias-code-diff-deleted: rgba(250, 81, 81, 0.12);
  --dsw-alias-file-diff-added-bg: rgba(7, 193, 96, 0.1);
  --dsw-alias-file-diff-deleted-bg: rgba(250, 81, 81, 0.1);
  --dsw-alias-file-diff-added-gutter: rgba(7, 193, 96, 0.2);
  --dsw-alias-file-diff-deleted-gutter: rgba(250, 81, 81, 0.2);
  --dsw-alias-file-diff-added-marker: #07c160;
  --dsw-alias-file-diff-deleted-marker: #fa5151;

  /* —— 微信专有槽位：气泡 / 输入卡片 / 侧栏 —— */
  --dsw-specific-bubble: #95ec69;             /* 自己的气泡：微信绿 */
  --dsw-specific-bubble-highlight: #8ae05f;
  --dsw-specific-input-major: #ffffff;
  --dsw-specific-login-input: #ffffff;
  --dsw-specific-menu: #ffffff;
  --dsw-specific-selector: #ffffff;
  --dsw-specific-tip: #f7f7f7;
  --dsw-specific-sidebar-fill: #ededed;       /* 会话列表底色 */
  --dsw-specific-sidebar-nav-item-hover: rgba(0, 0, 0, 0.04);
  --dsw-specific-sidebar-nav-item-active: rgba(0, 0, 0, 0.06);
  --dsw-specific-sidebar-nav-item-active-accent: #07c160;

  /* —— 字体：微信中文用系统字体 —— */
  --dsw-font-family: -apple-system, BlinkMacSystemFont, "PingFang SC",
    "Helvetica Neue", "Microsoft YaHei", sans-serif;
}
html[data-dsh-skin="wechat-mobile"] {
  --dsw-alias-bg-base: initial;
  --dsw-alias-bg-layer-1: initial;
  --dsw-alias-bg-layer-2: initial;
  --dsw-alias-bg-layer-3: initial;
  --dsw-alias-bg-layer-4: initial;
  --dsw-alias-bg-overlay: initial;
  --dsw-alias-bg-module-platform: initial;
  --dsw-alias-bg-multi-select: initial;
  --dsw-alias-bg-skeleton: initial;
  --dsw-alias-bg-mask-1: initial;
  --dsw-alias-bg-mask-2: initial;
  --dsw-alias-bg-mask-3: initial;
  --dsw-alias-bg-mask-drop: initial;
  --dsw-alias-bg-mask-photo: initial;
  --dsw-alias-border-l1: initial;
  --dsw-alias-border-l2: initial;
  --dsw-alias-border-l2-darkmode-thin: initial;
  --dsw-alias-border-l3: initial;
  --dsw-alias-border-l4: initial;
  --dsw-alias-border-inverted: initial;
  --dsw-alias-border-inverted2: initial;
  --dsw-alias-label-primary: initial;
  --dsw-alias-label-primary-dimmed: initial;
  --dsw-alias-label-primary-bluish: initial;
  --dsw-alias-label-secondary: initial;
  --dsw-alias-label-tertiary: initial;
  --dsw-alias-label-caption: initial;
  --dsw-alias-label-dimmed: initial;
  --dsw-alias-label-primary-foreground: initial;
  --dsw-alias-label-primary-inverted: initial;
  --dsw-alias-label-error: initial;
  --dsw-alias-link: initial;
  --dsw-alias-brand-primary: initial;
  --dsw-alias-brand-primary-invert: initial;
  --dsw-alias-brand-text: initial;
  --dsw-alias-button-primary-fill: initial;
  --dsw-alias-button-primary-hover: initial;
  --dsw-alias-button-primary-dimmed: initial;
  --dsw-alias-button-info-fill: initial;
  --dsw-alias-button-info-hover: initial;
  --dsw-alias-button-contrast-fill: initial;
  --dsw-alias-button-floating-fill: initial;
  --dsw-alias-button-floating-hover: initial;
  --dsw-alias-button-elevated-fill: initial;
  --dsw-alias-button-ghost-active-fill: initial;
  --dsw-alias-button-ghost-active-hover: initial;
  --dsw-alias-button-ghost-active-border: initial;
  --dsw-alias-button-tool-bar-fill: initial;
  --dsw-alias-button-tool-bar-hover: initial;
  --dsw-alias-button-tool-bar-fill-invisible: initial;
  --dsw-alias-interactive-bg-hover: initial;
  --dsw-alias-interactive-bg-active: initial;
  --dsw-alias-interactive-bg-hover-solid: initial;
  --dsw-alias-interactive-bg-hover-accent: initial;
  --dsw-alias-interactive-bg-hover-danger: initial;
  --dsw-alias-state-success-primary: initial;
  --dsw-alias-state-success-secondary: initial;
  --dsw-alias-state-error-primary: initial;
  --dsw-alias-state-error-secondary: initial;
  --dsw-alias-state-warn-primary: initial;
  --dsw-alias-state-warn-secondary: initial;
  --dsw-alias-state-warn-tertiary: initial;
  --dsw-alias-state-warn-label: initial;
  --dsw-alias-state-idle-primary: initial;
  --dsw-alias-state-business-primary: initial;
  --dsw-alias-state-business-tertiary: initial;
  --dsw-alias-markdown-code-block: initial;
  --dsw-alias-markdown-code-block-banner: initial;
  --dsw-alias-markdown-inline-code: initial;
  --dsw-alias-markdown-tag: initial;
  --dsw-alias-markdown-citation: initial;
  --dsw-alias-markdown-placeholder: initial;
  --dsw-alias-markdown-code-segment-selected: initial;
  --dsw-alias-markdown-code-segment-unselected: initial;
  --dsw-alias-scrollbar-bg-l1: initial;
  --dsw-alias-scrollbar-hover-l1: initial;
  --dsw-alias-scrollbar-bg-l2: initial;
  --dsw-alias-scrollbar-hover-l2: initial;
  --dsw-alias-toast-bg: initial;
  --dsw-alias-tooltip-bg: initial;
  --dsw-alias-code-diff-added: initial;
  --dsw-alias-code-diff-deleted: initial;
  --dsw-alias-file-diff-added-bg: initial;
  --dsw-alias-file-diff-deleted-bg: initial;
  --dsw-alias-file-diff-added-gutter: initial;
  --dsw-alias-file-diff-deleted-gutter: initial;
  --dsw-alias-file-diff-added-marker: initial;
  --dsw-alias-file-diff-deleted-marker: initial;
  --dsw-specific-bubble: initial;
  --dsw-specific-bubble-highlight: initial;
  --dsw-specific-input-major: initial;
  --dsw-specific-login-input: initial;
  --dsw-specific-menu: initial;
  --dsw-specific-selector: initial;
  --dsw-specific-tip: initial;
  --dsw-specific-sidebar-fill: initial;
  --dsw-specific-sidebar-nav-item-hover: initial;
  --dsw-specific-sidebar-nav-item-active: initial;
  --dsw-specific-sidebar-nav-item-active-accent: initial;
}

html[data-dsh-skin="wechat-mobile"] body {
  --dsw-alias-bg-base: #ededed;
  --dsw-alias-bg-layer-1: #ffffff;
  --dsw-alias-bg-layer-2: #ffffff;
  --dsw-alias-bg-layer-3: #f7f7f7;
  --dsw-alias-bg-layer-4: #f2f2f2;
  --dsw-alias-bg-overlay: #ffffff;
  --dsw-alias-bg-module-platform: #ffffff;
  --dsw-alias-bg-multi-select: rgba(7, 193, 96, 0.08);
  --dsw-alias-bg-skeleton: #e6e6e6;
  --dsw-alias-bg-mask-1: rgba(0, 0, 0, 0.45);
  --dsw-alias-bg-mask-2: rgba(0, 0, 0, 0.25);
  --dsw-alias-bg-mask-3: rgba(0, 0, 0, 0.6);
  --dsw-alias-bg-mask-drop: rgba(0, 0, 0, 0.05);
  --dsw-alias-bg-mask-photo: rgba(0, 0, 0, 0.7);
  --dsw-alias-border-l1: #e5e5e5;
  --dsw-alias-border-l2: #e5e5e5;
  --dsw-alias-border-l2-darkmode-thin: #e9e9e9;
  --dsw-alias-border-l3: #dcdcdc;
  --dsw-alias-border-l4: #cfcfcf;
  --dsw-alias-border-inverted: rgba(255, 255, 255, 0.4);
  --dsw-alias-border-inverted2: rgba(255, 255, 255, 0.6);
  --dsw-alias-label-primary: #191919;
  --dsw-alias-label-primary-dimmed: #3b3b3b;
  --dsw-alias-label-primary-bluish: #576b95;
  --dsw-alias-label-secondary: #576b95;
  --dsw-alias-label-tertiary: #9e9e9e;
  --dsw-alias-label-caption: #b2b2b2;
  --dsw-alias-label-dimmed: #c4c4c4;
  --dsw-alias-label-primary-foreground: #ffffff;
  --dsw-alias-label-primary-inverted: #ffffff;
  --dsw-alias-label-error: #fa5151;
  --dsw-alias-link: #576b95;
  --dsw-alias-brand-primary: #07c160;
  --dsw-alias-brand-primary-invert: #ffffff;
  --dsw-alias-brand-text: #191919;
  --dsw-alias-button-primary-fill: #07c160;
  --dsw-alias-button-primary-hover: #06ad56;
  --dsw-alias-button-primary-dimmed: #a9e8c4;
  --dsw-alias-button-info-fill: #07c160;
  --dsw-alias-button-info-hover: #06ad56;
  --dsw-alias-button-contrast-fill: #07c160;
  --dsw-alias-button-floating-fill: #ffffff;
  --dsw-alias-button-floating-hover: #f2f2f2;
  --dsw-alias-button-elevated-fill: #ffffff;
  --dsw-alias-button-ghost-active-fill: rgba(7, 193, 96, 0.1);
  --dsw-alias-button-ghost-active-hover: rgba(7, 193, 96, 0.16);
  --dsw-alias-button-ghost-active-border: #07c160;
  --dsw-alias-button-tool-bar-fill: rgba(7, 193, 96, 0.1);
  --dsw-alias-button-tool-bar-hover: rgba(7, 193, 96, 0.16);
  --dsw-alias-button-tool-bar-fill-invisible: rgba(7, 193, 96, 0.06);
  --dsw-alias-interactive-bg-hover: rgba(0, 0, 0, 0.03);
  --dsw-alias-interactive-bg-active: rgba(0, 0, 0, 0.06);
  --dsw-alias-interactive-bg-hover-solid: #f2f2f2;
  --dsw-alias-interactive-bg-hover-accent: rgba(7, 193, 96, 0.1);
  --dsw-alias-interactive-bg-hover-danger: rgba(250, 81, 81, 0.1);
  --dsw-alias-state-success-primary: #07c160;
  --dsw-alias-state-success-secondary: #07c160;
  --dsw-alias-state-error-primary: #fa5151;
  --dsw-alias-state-error-secondary: #fa5151;
  --dsw-alias-state-warn-primary: #ffc300;
  --dsw-alias-state-warn-secondary: #ffc300;
  --dsw-alias-state-warn-tertiary: #ffe08a;
  --dsw-alias-state-warn-label: #7a5c00;
  --dsw-alias-state-idle-primary: #b2b2b2;
  --dsw-alias-state-business-primary: #576b95;
  --dsw-alias-state-business-tertiary: #dfe6f2;
  --dsw-alias-markdown-code-block: #f7f7f7;
  --dsw-alias-markdown-code-block-banner: #efefef;
  --dsw-alias-markdown-inline-code: #f2f2f2;
  --dsw-alias-markdown-tag: #07c160;
  --dsw-alias-markdown-citation: #576b95;
  --dsw-alias-markdown-placeholder: #b2b2b2;
  --dsw-alias-markdown-code-segment-selected: rgba(7, 193, 96, 0.16);
  --dsw-alias-markdown-code-segment-unselected: rgba(0, 0, 0, 0.04);
  --dsw-alias-scrollbar-bg-l1: rgba(0, 0, 0, 0.08);
  --dsw-alias-scrollbar-hover-l1: rgba(0, 0, 0, 0.16);
  --dsw-alias-scrollbar-bg-l2: rgba(0, 0, 0, 0.06);
  --dsw-alias-scrollbar-hover-l2: rgba(0, 0, 0, 0.14);
  --dsw-alias-toast-bg: rgba(0, 0, 0, 0.75);
  --dsw-alias-tooltip-bg: rgba(0, 0, 0, 0.75);
  --dsw-alias-code-diff-added: rgba(7, 193, 96, 0.12);
  --dsw-alias-code-diff-deleted: rgba(250, 81, 81, 0.12);
  --dsw-alias-file-diff-added-bg: rgba(7, 193, 96, 0.1);
  --dsw-alias-file-diff-deleted-bg: rgba(250, 81, 81, 0.1);
  --dsw-alias-file-diff-added-gutter: rgba(7, 193, 96, 0.2);
  --dsw-alias-file-diff-deleted-gutter: rgba(250, 81, 81, 0.2);
  --dsw-alias-file-diff-added-marker: #07c160;
  --dsw-alias-file-diff-deleted-marker: #fa5151;
  --dsw-specific-bubble: #95ec69;
  --dsw-specific-bubble-highlight: #8ae05f;
  --dsw-specific-input-major: #ffffff;
  --dsw-specific-login-input: #ffffff;
  --dsw-specific-menu: #ffffff;
  --dsw-specific-selector: #ffffff;
  --dsw-specific-tip: #f7f7f7;
  --dsw-specific-sidebar-fill: #ededed;
  --dsw-specific-sidebar-nav-item-hover: rgba(0, 0, 0, 0.04);
  --dsw-specific-sidebar-nav-item-active: rgba(0, 0, 0, 0.06);
  --dsw-specific-sidebar-nav-item-active-accent: #07c160;
  --dsw-font-family: -apple-system, BlinkMacSystemFont, "PingFang SC",
}


/* ========================== L1：微信深色配色 ============================== */
html[data-dsh-skin="wechat-mobile"] body[data-ds-dark-theme] {
  --dsw-alias-bg-base: #111111;
  --dsw-alias-bg-layer-1: #1e1e1e;
  --dsw-alias-bg-layer-2: #1e1e1e;
  --dsw-alias-bg-layer-3: #262626;
  --dsw-alias-bg-layer-4: #2c2c2c;
  --dsw-alias-bg-overlay: #1e1e1e;
  --dsw-alias-bg-module-platform: #1e1e1e;
  --dsw-alias-bg-skeleton: #2c2c2c;
  --dsw-alias-border-l1: #2c2c2c;
  --dsw-alias-border-l2: #2c2c2c;
  --dsw-alias-border-l3: #3a3a3a;
  --dsw-alias-border-l4: #4a4a4a;
  --dsw-alias-label-primary: #d9d9d9;
  --dsw-alias-label-primary-dimmed: #c0c0c0;
  --dsw-alias-label-primary-bluish: #7d90b8;
  --dsw-alias-label-secondary: #7d90b8;
  --dsw-alias-label-tertiary: #8c8c8c;
  --dsw-alias-label-caption: #7a7a7a;
  --dsw-alias-label-dimmed: #666666;
  --dsw-alias-label-primary-foreground: #ffffff;
  --dsw-alias-label-primary-inverted: #111111;
  --dsw-alias-label-error: #fa5151;
  --dsw-alias-link: #7d90b8;
  --dsw-alias-brand-primary: #07c160;
  --dsw-alias-brand-primary-invert: #ffffff;
  --dsw-alias-brand-text: #d9d9d9;
  --dsw-alias-button-primary-fill: #07c160;
  --dsw-alias-button-primary-hover: #06ad56;
  --dsw-alias-button-primary-dimmed: #1f6b45;
  --dsw-alias-button-info-fill: #07c160;
  --dsw-alias-button-info-hover: #06ad56;
  --dsw-alias-button-floating-fill: #2c2c2c;
  --dsw-alias-button-floating-hover: #383838;
  --dsw-alias-button-elevated-fill: #2c2c2c;
  --dsw-alias-button-ghost-active-fill: rgba(7, 193, 96, 0.16);
  --dsw-alias-button-ghost-active-hover: rgba(7, 193, 96, 0.24);
  --dsw-alias-button-tool-bar-fill: rgba(7, 193, 96, 0.16);
  --dsw-alias-button-tool-bar-hover: rgba(7, 193, 96, 0.24);
  --dsw-alias-interactive-bg-hover: rgba(255, 255, 255, 0.05);
  --dsw-alias-interactive-bg-active: rgba(255, 255, 255, 0.09);
  --dsw-alias-interactive-bg-hover-solid: #2c2c2c;
  --dsw-alias-interactive-bg-hover-accent: rgba(7, 193, 96, 0.18);
  --dsw-alias-state-idle-primary: #7a7a7a;
  --dsw-alias-state-business-primary: #7d90b8;
  --dsw-alias-state-business-tertiary: #2a3244;
  --dsw-alias-state-warn-label: #ffe08a;
  --dsw-alias-markdown-code-block: #1a1a1a;
  --dsw-alias-markdown-code-block-banner: #232323;
  --dsw-alias-markdown-inline-code: #2c2c2c;
  --dsw-alias-markdown-placeholder: #7a7a7a;
  --dsw-alias-scrollbar-bg-l1: rgba(255, 255, 255, 0.1);
  --dsw-alias-scrollbar-hover-l1: rgba(255, 255, 255, 0.2);
  --dsw-specific-bubble: #3eb575;              /* 深色下自己的气泡 */
  --dsw-specific-bubble-highlight: #46c281;
  --dsw-specific-input-major: #1e1e1e;
  --dsw-specific-menu: #262626;
  --dsw-specific-selector: #262626;
  --dsw-specific-tip: #262626;
  --dsw-specific-sidebar-fill: #191919;
  --dsw-specific-sidebar-nav-item-hover: rgba(255, 255, 255, 0.06);
  --dsw-specific-sidebar-nav-item-active: rgba(255, 255, 255, 0.1);
  --dsw-specific-sidebar-nav-item-active-accent: #07c160;
}

/* ===========================================================================
 * L2：语义属性样式
 * 每个规则上方注明「选中什么 / 锚点从哪来」。
 * 属性来源三处：
 *   A. 皮肤中心 SEMANTIC_RULES_V1（客户端运行时自动补打，见 spec 第 3 节）
 *   B. 官方壳层自带（data-conversation-scroll / data-composer-input / data-side …）
 *   C. 官方 CSS-Modules 类名后缀（[class*="xxx"]，脆弱但官方自己也在用）
 * ========================================================================= */

/* —— 会话滚动口（B: data-conversation-scroll）→ 微信聊天背景 —— */
html[data-dsh-skin="wechat-mobile"] [data-dsh-part="scrollport"] {
  background: var(--dsw-alias-bg-base);
}

/* —— 消息行（A: 补打在 [data-chat-flow-kind] 上）—— */
html[data-dsh-skin="wechat-mobile"] [data-dsh-part="message-row"] {
  padding-top: 2px;
  padding-bottom: 2px;
}

/* —— 自己的消息：官方本来就渲染成气泡，颜色取自 --dsw-specific-bubble，
      所以 L1 改 token 就够了；这里只补微信的圆角与内边距。 —— */
html[data-dsh-skin="wechat-mobile"] [data-chat-flow-kind="user"] [class*="bubble"] {
  border-radius: 6px;
  padding: 9px 12px;
  color: #191919;
}

html[data-dsh-skin="wechat-mobile"] [data-chat-flow-kind="user"] {
  justify-content: flex-end;
}

/* —— 助手消息：官方是「没有气泡的 markdown 正文」，想要微信的白色左气泡
      只能自己做：把整行收窄 + 左对齐 + 上白底圆角。
      注意 1：[data-dsh-part="message-body"] 打在 [data-streaming] 上，
              data-streaming 只在「正在流式输出」时存在，不能当稳定锚点。
      注意 2：这样会让「工具调用/报错」等行也变成白卡片，属于已知偏差。 —— */
html[data-dsh-skin="wechat-mobile"] [data-chat-flow-kind="assistant"] {
  align-self: flex-start;
  max-width: 82%;
  background: var(--dsw-alias-bg-layer-1);
  border: 0.5px solid var(--dsw-alias-border-l1);
  border-radius: 6px;
  padding: 9px 12px;
  box-shadow: 0 0.5px 1px rgba(0, 0, 0, 0.04);
  color: var(--dsw-alias-label-primary);
}

/* —— 时间戳（C: 官方 chat 包里有 xzv4MW_timeStart/timeEnd） —— */
html[data-dsh-skin="wechat-mobile"] [class*="_timeStart"],
html[data-dsh-skin="wechat-mobile"] [class*="_timeEnd"] {
  color: var(--dsw-alias-label-caption);
}

/* —— 顶部标题栏（A: 补打在 [data-slot="conversation.session.header"] 上，
      而槽位出口是 display:contents，写 background 不画东西；
      所以只能给它的直接子元素上样式）—— */
html[data-dsh-skin="wechat-mobile"] [data-dsh-surface="session-header"] > * {
  background: var(--dsw-alias-bg-layer-3);
  border-bottom: 0.5px solid var(--dsw-alias-border-l3);
  color: var(--dsw-alias-label-primary);
  font-weight: 600;
}

/* —— 输入条（C: composerSeat 是真正有盒子的那层） —— */
html[data-dsh-skin="wechat-mobile"] [class*="composerSeat"] {
  background: var(--dsw-alias-bg-layer-3);
  border-top: 0.5px solid var(--dsw-alias-border-l3);
}

/* —— 输入框本体（A/B: textarea[data-phase] 或 [data-composer-input]） —— */
html[data-dsh-skin="wechat-mobile"] [data-dsh-part="composer-input"] {
  background: var(--dsw-alias-bg-layer-1);
  border-radius: 6px;
  caret-color: var(--dsw-alias-brand-primary);
}

/* —— 排队条（A: data-queue-dock） —— */
html[data-dsh-skin="wechat-mobile"] [data-dsh-part="queue-dock"] {
  background: var(--dsw-alias-bg-layer-3);
  border: 0.5px solid var(--dsw-alias-border-l1);
  border-radius: 6px;
}

/* —— 工具调用卡片（A: 补打在 [data-chat-flow-kind="tool-call"] 上） —— */
html[data-dsh-skin="wechat-mobile"] [data-chat-flow-kind="tool-call"] {
  background: var(--dsw-alias-bg-layer-1);
  border: 0.5px solid var(--dsw-alias-border-l1);
  border-radius: 6px;
  padding: 6px 10px;
  margin: 2px 0;
}

/* —— 侧栏（会话列表所在列）——
      A 规则把 data-dsh-surface="sidebar" 打在 [data-slot="sidebar"]（display:contents）
      上，写背景没用；真正有盒子的是 pI_x6G_sidebarCol。 —— */
html[data-dsh-skin="wechat-mobile"] [class*="sidebarCol"] {
  background: var(--dsw-specific-sidebar-fill);
  border-right: 0.5px solid var(--dsw-alias-border-l1);
}

/* —— 会话列表行（C: workspace 包的 YDXeBa_sessionRow）
      → 微信聊天列表：白底 + 1px 浅灰分割线 + 按下变灰 —— */
html[data-dsh-skin="wechat-mobile"] [class*="sessionRow"] {
  background: var(--dsw-alias-bg-layer-1);
  border-bottom: 0.5px solid var(--dsw-alias-border-l1);
  border-radius: 0;
  padding: 10px 12px;
  transition: background-color 0.12s ease;
}

html[data-dsh-skin="wechat-mobile"] [class*="sessionRow"]:hover {
  background: var(--dsw-alias-interactive-bg-hover-solid);
}

html[data-dsh-skin="wechat-mobile"] [class*="sessionRow"]:active {
  background: var(--dsw-alias-interactive-bg-active);
}

/* —— 侧栏里的插件面板行（A: 补打在 [class*="panelRow"]:has([data-dsh-panel-entry])） —— */
html[data-dsh-skin="wechat-mobile"] [data-dsh-part="sidebar-entry"] {
  border-radius: 6px;
  color: var(--dsw-alias-label-primary);
}

html[data-dsh-skin="wechat-mobile"] [data-dsh-part="sidebar-entry"]:hover {
  background: var(--dsw-specific-sidebar-nav-item-hover);
}

/* —— 新会话按钮：微信绿 —— */
html[data-dsh-skin="wechat-mobile"] [data-dsh-part="new-session"] {
  color: var(--dsw-alias-brand-primary);
}

/* —— 未读/运行中红点：微信红（C: 官方 sidebar 包里的角标类名） —— */
html[data-dsh-skin="wechat-mobile"] [class*="toggle"] [class*="badge"],
html[data-dsh-skin="wechat-mobile"] [class*="badge"] {
  background: var(--dsw-alias-state-error-primary);
  color: #ffffff;
}

/* —— 右详情列（A: 补打在 [data-slot="details"] 或 [data-rightbar-col] 上；
      data-rightbar-col 是有盒子的那层，收起时宽度为 0） —— */
html[data-dsh-skin="wechat-mobile"] [data-rightbar-col] {
  background: var(--dsw-alias-bg-layer-3);
  border-left: 0.5px solid var(--dsw-alias-border-l1);
}

/* —— 设置弹窗（A: [role="dialog"]:has([data-slot="settings.section"])） —— */
html[data-dsh-skin="wechat-mobile"] [data-dsh-surface="settings"] {
  background: var(--dsw-alias-bg-overlay);
}

html[data-dsh-skin="wechat-mobile"] [id="root"] { background: transparent; }

html[data-dsh-skin="wechat-mobile"] body { --shiki-background: var(--dsw-alias-markdown-code-block); }

html[data-dsh-skin="wechat-mobile"] body {
  --dsw-alias-bg-document-preview: color-mix(in srgb, var(--dsw-alias-bg-layer-1) 65%, transparent);
  --dsw-alias-label-document-preview: color-mix(in srgb, var(--dsw-alias-label-primary) 70%, transparent);
}
