/* ============================================================
   V02 · 设计令牌（皮肤系统 · 2026-10-30 第二版重做）
   ------------------------------------------------------------
   ★★ 第二版为什么推翻第一版 ★★
   第一版把皮肤抽象成「模式（浅/深）× 色相（青松/靛蓝/赭石）」，
   结果：
     · 用户原话要求的是「2 款深色 + 2 款中性 + 1 款极简」，
       矩阵化之后「极简」根本没法做（它不是某个色相，是另一套美学），
       最后被映射成「普通浅色」= 这款皮肤等于没做。
     · 组合出来的东西看着都差不多，用户要的是**一眼能分辨的六种外观**。
     · 入口是个 32px 的小 🎨，选择器里色块只有 13×19px —— 迷你到没法用。
   所以第二版回到本源：
     **6 款具名皮肤，每款是一套完整、独立的视觉定义**，
     不是拼装出来的组合。选哪款就是哪款，不做数学题。

   结构（三层）：
     L1 原始层 --raw-*   纯色值/尺寸常量，不含语义
     L2 皮肤层 [data-skin] 六款皮肤各自完整定义一遍语义令牌
     L3 别名层 --bg/--panel/--ink…  供 1000+ 行既有组件样式使用

   ★ 为什么 L2 要「每款写全」而不是继承：
     维护成本的担心是真的，但代价比「用户点了没变化」小得多。
     这里用 **L1 原始层复用色值**（--raw-n-xxx / --raw-d-xxx）把重复压到最低：
     六款皮肤的差异只落在「哪些原始色 + 品牌色 + 侧栏色」上，
     结构性差异（圆角/阴影/描边）也各自独立。
   ============================================================ */

/* ============================================================
   L1 · 原始层
   ------------------------------------------------------------
   只放「事实」，不放「含义」。L2 引用这里的值。
   ============================================================ */
:root {
  /* — 青松（默认绿）— */
  --raw-pine-600:#1E5B4C;  --raw-pine-500:#2C7A66;  --raw-pine-100:#E6EFEB;  --raw-pine-800:#17483D;
  /* — 靛蓝 — */
  --raw-indigo-600:#35618E; --raw-indigo-500:#4A7BAC; --raw-indigo-100:#E5EDF5; --raw-indigo-800:#264A6D;
  /* — 赭石（暖砂用）— */
  --raw-ochre-600:#8A6D3B;  --raw-ochre-500:#A5854C;  --raw-ochre-100:#F2EADA;  --raw-ochre-800:#6B5530;

  /* — 中性色阶（浅色模式用）— */
  --raw-n-0:#FFFFFF;  --raw-n-25:#FAFBF9; --raw-n-50:#F4F6F3;
  --raw-n-100:#EDF0EC; --raw-n-200:#E3E8E4; --raw-n-300:#CBD3CE;
  --raw-n-400:#9AA6A0; --raw-n-500:#78857F; --raw-n-600:#4A5852; --raw-n-700:#2C3934;
  --raw-n-800:#1B2521; --raw-n-900:#16211D;

  /* — 中性色阶（深色模式用）— */
  --raw-d-0:#0E1412;  --raw-d-25:#161E1B; --raw-d-50:#1C2522; --raw-d-100:#232E2A;
  --raw-d-200:#27332E; --raw-d-300:#31403A; --raw-d-400:#4C5C56;
  --raw-d-500:#849690; --raw-d-600:#AFBEB7; --raw-d-700:#C9D6D0; --raw-d-800:#E7EFEB;

  /* — 暖砂（中性浅·暖）专用 — */
  --raw-warm-0:#FFFFFF; --raw-warm-25:#FAF8F3; --raw-warm-50:#F5F2EC; --raw-warm-100:#EFEBE2;
  --raw-warm-200:#E4DFD4; --raw-warm-300:#D3CCBE;
  --raw-warm-ink-1:#26221C; --raw-warm-ink-2:#524C42; --raw-warm-ink-3:#6E675B;
  --raw-warm-rail:#2B2620; --raw-warm-rail-2:#4A4034;

  /* — 状态色（浅）— */
  --raw-warn-600:#B4690E; --raw-warn-100:#FBF1E2; --raw-warn-700:#8E5209;
  --raw-dang-600:#B23B2E; --raw-dang-100:#FBE9E6; --raw-dang-700:#9C2F24;
  --raw-ok-600:#2F7D53;  --raw-ok-100:#E8F3EC;  --raw-ok-700:#22633F;
  --raw-info-600:#2E6699; --raw-info-100:#E8F0F7; --raw-info-700:#245A87;

  /* — 状态色（深）— */
  --raw-warn-d-600:#D9A24A; --raw-warn-d-100:#3A2B14; --raw-warn-d-700:#E8B96E;
  --raw-dang-d-600:#E08076; --raw-dang-d-100:#3A1E1A; --raw-dang-d-700:#EDA096;
  --raw-ok-d-600:#4FB37C;  --raw-ok-d-100:#17301F; --raw-ok-d-700:#77C79C;
  --raw-info-d-600:#6FA3D6; --raw-info-d-100:#15283B; --raw-info-d-700:#95C0E4;

  /* — 图表八类（浅）— */
  --raw-c1:#1E5B4C; --raw-c2:#C08A2E; --raw-c3:#6E62C4; --raw-c4:#3F8FA8;
  --raw-c5:#A8506B; --raw-c6:#5E8C3A; --raw-c7:#8A6D3B; --raw-c8:#5A6E78;
  /* — 图表八类（深）— */
  --raw-c1d:#4FB37C; --raw-c2d:#E0AC55; --raw-c3d:#9E93E8; --raw-c4d:#5FB2CC;
  --raw-c5d:#D97A92; --raw-c6d:#86BC5C; --raw-c7d:#C0A06A; --raw-c8d:#8FA4AE;

  /* — 字体 —
     四个栈：sans 是历史默认，ui 是「界面正文」用的那个（后台可切），
     serif 是中文衬线，mono 是等宽（编号/金额/日志）。
     ★ --raw-font-sans 保留不动 —— 别处还有引用，删了整站掉回默认字形。 */
  --raw-font-sans:-apple-system,BlinkMacSystemFont,"Segoe UI","PingFang SC","Hiragino Sans GB","Microsoft YaHei",sans-serif;
  --raw-font-ui:-apple-system,BlinkMacSystemFont,"Segoe UI","PingFang SC","Hiragino Sans GB","Microsoft YaHei",sans-serif;
  --raw-font-serif:"Songti SC","STSong","SimSun","Noto Serif CJK SC","Source Han Serif SC",Georgia,serif;
  --raw-font-mono:ui-monospace,"SF Mono","Cascadia Mono",Consolas,"Liberation Mono",monospace;

  /* — 字号（7 档，替代原来 12 种）—
     ★ --font-scale 是全局缩放系数，纯数字无单位，默认 1。
       基准值全部走 calc 缩放，所以 scale=1 时结果与原来的 px 逐像素一致；
       后台「界面外观」改档位时只改这一个数，不用重排整张表。 */
  --font-scale:1;
  --fs-xs:calc(11px * var(--font-scale));
  --fs-sm:calc(12px * var(--font-scale));
  --fs-base:calc(13px * var(--font-scale));
  --fs-md:calc(14px * var(--font-scale));
  --fs-lg:calc(16px * var(--font-scale));
  --fs-xl:calc(20px * var(--font-scale));
  --fs-2xl:calc(26px * var(--font-scale));

  /* — 行高 — */
  --lh-tight:1.35; --lh-base:1.6;

  /* — 间距（4 的倍数）— */
  --sp-1:4px; --sp-2:8px; --sp-3:12px; --sp-4:16px; --sp-5:20px; --sp-6:24px;

  /* — 圆角（4 档，替代 86 处硬编码）— */
  --radius-sm:6px; --radius-md:9px; --radius-lg:13px; --radius-full:999px;

  /* — 布局常量 — */
  /* ★ 用户 2026-10-31 第 11 轮第 8 项：「左侧导航栏减少宽度，与 V01 看齐」。
     232 是 V02 自己定的（当时想给「混凝土试件」这种五字菜单留余量），
     但侧栏每宽 1px 都直接从台账表宽里扣 —— 1680 下 232 宽的侧栏，
     浇筑记录 13 列要靠折部位名才塞得下。V01 左栏 184，这里对齐。 */
  --rail-w:184px; --rail-w-narrow:60px; --topbar-h:52px; --drawer-w:520px;
}

/* ============================================================
   L2 · 皮肤层 —— 六款具名皮肤
   ------------------------------------------------------------
   ★ 每款独立完整定义。用户点哪款就是那款，不用想「模式+色相」。
   ★ 结构性的差异（圆角/阴影/描边强度）也各写各的 ——
     「极简」要方角无阴影，「鎏金」要重描边，这些没法靠继承。
   ============================================================ */

/* ————————————————————————————————————————————————
   ① 青松（默认 · 浅色绿）
   —— 清爽的白底 + 松绿，点专业工具的清爽感
   ———————————————————————————————————————————————— */
[data-skin="pine"] {
  --canvas:var(--raw-n-50);
  --surface:var(--raw-n-0);
  --surface-2:var(--raw-n-25);
  --surface-3:var(--raw-n-100);
  --overlay:rgba(22,33,29,.42);

  --text-1:var(--raw-n-900);
  --text-2:var(--raw-n-600);
  --text-3:#68766F;
  --text-inv:var(--raw-n-0);

  --border:var(--raw-n-200);
  --border-soft:var(--raw-n-100);
  --border-strong:var(--raw-n-300);

  --brand:var(--raw-pine-600);
  --brand-hover:var(--raw-pine-800);
  --brand-soft:var(--raw-pine-100);
  --brand-ink:var(--raw-pine-800);

  --warn:var(--raw-warn-600);  --warn-soft:var(--raw-warn-100);  --warn-ink:var(--raw-warn-700);
  --danger:var(--raw-dang-600); --danger-soft:var(--raw-dang-100); --danger-ink:var(--raw-dang-700);
  --ok:var(--raw-ok-600);      --ok-soft:var(--raw-ok-100);      --ok-ink:var(--raw-ok-700);
  --info:var(--raw-info-600);  --info-soft:var(--raw-info-100);  --info-ink:var(--raw-info-700);
  --slate:var(--raw-n-500);    --slate-soft:var(--raw-n-100);

  --shadow-1:0 1px 2px rgba(22,33,29,.05);
  --shadow-2:0 2px 6px rgba(22,33,29,.07), 0 12px 28px -14px rgba(22,33,29,.16);
  --shadow-3:0 24px 60px -24px rgba(22,33,29,.45);

  --chart-1:var(--raw-c1); --chart-2:var(--raw-c2); --chart-3:var(--raw-c3); --chart-4:var(--raw-c4);
  --chart-5:var(--raw-c5); --chart-6:var(--raw-c6); --chart-7:var(--raw-c7); --chart-8:var(--raw-c8);
  --chart-grid:var(--raw-n-100);
  --chart-axis:var(--raw-n-300);
  --chart-label:var(--raw-n-500);
  --chart-track:var(--raw-n-100);

  --tag-warn-bg:var(--warn-soft);      --tag-warn-ink:var(--warn-ink);
  --tag-info-bg:var(--info-soft);      --tag-info-ink:var(--info-ink);
  --tag-ok-bg:var(--ok-soft);          --tag-ok-ink:var(--ok-ink);
  --tag-mute-bg:var(--surface-3);      --tag-mute-ink:var(--text-2);
  --danger-line:var(--danger-soft);     --danger-line-ink:var(--danger);
  --dot-alert:#2F5FE0;
  --paper-ink:#2B3A34; --paper-line:#C6CEC9; --paper-faint:#E7EAE6;
  --paper-cell:#FCFDFC; --paper-cell-line:#DCE1DC; --paper-stamp:#C9A227;
  --paper-edge:#FFFFFF;

  --rail-bg:#12241F;
  --rail-1:#3E9B82; --rail-2:var(--raw-pine-600);
  --rail-hover:#1B332C; --rail-on:#23453B;
  --rail-chip:#1B332C; --rail-chip2:#213D35;
  --rail-line:#294740;
  --rail-ink:#D8E3DE; --rail-ink2:#C2D3CC; --rail-dim:#7E9990;
  --rail-mark:#5FD3A8; --rail-mark-soft:rgba(95,211,168,.18);
  --rail-on-ink:var(--rail-ink);
}

/* ————————————————————————————————————————————————
   ② 墨松（深色 · 松绿）
   —— 深底浅字，长时间看台账不刺眼
   ———————————————————————————————————————————————— */
[data-skin="dark-pine"] {
  --canvas:var(--raw-d-0);
  --surface:var(--raw-d-25);
  --surface-2:var(--raw-d-50);
  --surface-3:var(--raw-d-100);
  --overlay:rgba(0,0,0,.62);

  --text-1:var(--raw-d-800);
  --text-2:var(--raw-d-600);
  --text-3:var(--raw-d-500);
  --text-inv:var(--raw-d-0);

  --border:var(--raw-d-200);
  --border-soft:var(--raw-d-100);
  --border-strong:var(--raw-d-300);

  --brand:var(--raw-ok-d-600);
  --brand-hover:var(--raw-ok-d-700);
  --brand-soft:var(--raw-ok-d-100);
  --brand-ink:var(--raw-ok-d-700);

  --warn:var(--raw-warn-d-600);  --warn-soft:var(--raw-warn-d-100);  --warn-ink:var(--raw-warn-d-700);
  --danger:var(--raw-dang-d-600); --danger-soft:var(--raw-dang-d-100); --danger-ink:var(--raw-dang-d-700);
  --ok:var(--raw-ok-d-600);       --ok-soft:var(--raw-ok-d-100);       --ok-ink:var(--raw-ok-d-700);
  --info:var(--raw-info-d-600);  --info-soft:var(--raw-info-d-100);  --info-ink:var(--raw-info-d-700);
  --slate:var(--raw-d-500);      --slate-soft:var(--raw-d-100);

  --shadow-1:0 1px 2px rgba(0,0,0,.34);
  --shadow-2:0 2px 6px rgba(0,0,0,.42), 0 12px 28px -14px rgba(0,0,0,.62);
  --shadow-3:0 24px 60px -24px rgba(0,0,0,.78);

  --chart-1:var(--raw-c1d); --chart-2:var(--raw-c2d); --chart-3:var(--raw-c3d); --chart-4:var(--raw-c4d);
  --chart-5:var(--raw-c5d); --chart-6:var(--raw-c6d); --chart-7:var(--raw-c7d); --chart-8:var(--raw-c8d);
  --chart-grid:var(--raw-d-100);
  --chart-axis:var(--raw-d-300);
  --chart-label:var(--raw-d-500);
  --chart-track:var(--raw-d-100);

  --tag-warn-bg:var(--warn-soft);      --tag-warn-ink:var(--warn-ink);
  --tag-info-bg:var(--info-soft);      --tag-info-ink:var(--info-ink);
  --tag-ok-bg:var(--ok-soft);          --tag-ok-ink:var(--ok-ink);
  --tag-mute-bg:var(--surface-3);      --tag-mute-ink:var(--text-2);
  --danger-line:var(--danger-soft);     --danger-line-ink:var(--danger);
  --dot-alert:#6E9BFF;
  --paper-ink:#2B3A34; --paper-line:#C6CEC9; --paper-faint:#E7EAE6;
  --paper-cell:#FCFDFC; --paper-cell-line:#DCE1DC; --paper-stamp:#C9A227;
  --paper-edge:#FFFFFF;

  --rail-bg:#0B1210;
  --rail-1:#2F7A63; --rail-2:#16332A;
  --rail-hover:#141F1B; --rail-on:#1D2F29;
  --rail-chip:#141F1B; --rail-chip2:#19251F;
  --rail-line:#22322B;
  --rail-ink:#CFE3DA; --rail-ink2:#A9C2B9; --rail-dim:#6D8880;
  --rail-mark:#4FBD80; --rail-mark-soft:rgba(79,189,128,.20);
  --rail-on-ink:var(--rail-ink);
}

/* ————————————————————————————————————————————————
   ③ 鎏金（深色 · 墨蓝底金线）
   —— 与「墨松」同为深色，但走的是"墨蓝底 + 鎏金细线 + 直角"的路子：
      卡片用 3~6px 小圆角、1px 金线描边、金色只出现在主按钮与关键数字上。
      深色皮肤里唯一带金属质感的 —— 夜间对账、投屏开会时最认得出的一款。
   ———————————————————————————————————————————————— */
[data-skin="gilt"] {
  --canvas:#0B0D10;
  --surface:#13161B;
  --surface-2:#1A1E24;
  --surface-3:#232830;
  --overlay:rgba(0,0,0,.68);

  --text-1:#F3EEE4;
  --text-2:#CDC5B4;
  --text-3:#9A917E;
  --text-inv:#0B0D10;

  --border:#33302A;
  --border-soft:#252420;
  --border-strong:#534934;

  --brand:#D3A24B;
  --brand-hover:#E7B967;
  --brand-soft:#2A2317;
  --brand-ink:#F0CA84;

  --warn:var(--raw-warn-d-600);  --warn-soft:var(--raw-warn-d-100);  --warn-ink:var(--raw-warn-d-700);
  --danger:var(--raw-dang-d-600); --danger-soft:var(--raw-dang-d-100); --danger-ink:var(--raw-dang-d-700);
  --ok:var(--raw-ok-d-600);       --ok-soft:var(--raw-ok-d-100);       --ok-ink:var(--raw-ok-d-700);
  --info:#8FA9C9;  --info-soft:#1A2430;  --info-ink:#B9CEE4;
  --slate:#9A917E; --slate-soft:#252420;

  --shadow-1:0 1px 1px rgba(0,0,0,.40);
  --shadow-2:0 2px 6px rgba(0,0,0,.50), 0 14px 30px -16px rgba(0,0,0,.72);
  --shadow-3:0 26px 64px -26px rgba(0,0,0,.86), 0 0 0 1px rgba(211,162,75,.14);

  --chart-1:#D3A24B; --chart-2:#8FA9C9; --chart-3:#B98A5E; --chart-4:#6FA6A0;
  --chart-5:#C77C8A; --chart-6:#9BB06A; --chart-7:#BFAE8A; --chart-8:#8E9298;
  --chart-grid:#252420;
  --chart-axis:#534934;
  --chart-label:#9A917E;
  --chart-track:#252420;

  --tag-warn-bg:var(--warn-soft);      --tag-warn-ink:var(--warn-ink);
  --tag-info-bg:var(--info-soft);      --tag-info-ink:var(--info-ink);
  --tag-ok-bg:var(--ok-soft);          --tag-ok-ink:var(--ok-ink);
  --tag-mute-bg:var(--surface-3);      --tag-mute-ink:var(--text-2);
  --danger-line:var(--danger-soft);     --danger-line-ink:var(--danger);
  --dot-alert:#E7B967;
  --paper-ink:#2B3A34; --paper-line:#C6CEC9; --paper-faint:#E7EAE6;
  --paper-cell:#FCFDFC; --paper-cell-line:#DCE1DC; --paper-stamp:#C9A227;
  --paper-edge:#FFFFFF;

  /* 直角感：只保留极小的圆角，卡片靠 1px 金线立住，不靠阴影 */
  --radius-sm:2px; --radius-md:4px; --radius-lg:5px;

  --rail-bg:#08090B;
  --rail-1:#5A4526; --rail-2:#161310;
  --rail-hover:#16181C; --rail-on:#1E2126;
  --rail-chip:#16181C; --rail-chip2:#1C1F24;
  --rail-line:#2A2721;
  --rail-ink:#EFE7D8; --rail-ink2:#D6CDBB; --rail-dim:#A2967C;
  --rail-mark:#D3A24B; --rail-mark-soft:rgba(211,162,75,.18);
  --rail-on-ink:var(--rail-ink);
}

/* ————————————————————————————————————————————————
   ④ 暖砂（中性 · 浅色暖调）
   —— 纸感中性色，品牌色退到最小，几乎不“绿”
   ———————————————————————————————————————————————— */
[data-skin="warm"] {
  --canvas:var(--raw-warm-50);
  --surface:var(--raw-warm-0);
  --surface-2:var(--raw-warm-25);
  --surface-3:var(--raw-warm-100);
  --overlay:rgba(38,34,28,.40);

  --text-1:var(--raw-warm-ink-1);
  --text-2:var(--raw-warm-ink-2);
  --text-3:var(--raw-warm-ink-3);
  --text-inv:#FFFFFF;

  --border:var(--raw-warm-200);
  --border-soft:var(--raw-warm-100);
  --border-strong:var(--raw-warm-300);

  --brand:#7A6134;
  --brand-hover:#5F4B27;
  --brand-soft:#F0E9DA;
  --brand-ink:#5F4B27;

  --warn:#8A5209;  --warn-soft:#F7EEE0;  --warn-ink:#6E4207;
  --danger:#9E3A2C; --danger-soft:#F8E8E4; --danger-ink:#7E2E22;
  --ok:#2C6B47;    --ok-soft:#E6F0E9;    --ok-ink:#225638;
  --info:#35597C;  --info-soft:#E6EDF3;  --info-ink:#2A4763;
  --slate:var(--raw-warm-ink-3); --slate-soft:var(--raw-warm-100);

  --shadow-1:0 1px 2px rgba(38,34,28,.05);
  --shadow-2:0 2px 6px rgba(38,34,28,.07), 0 12px 28px -14px rgba(38,34,28,.15);
  --shadow-3:0 24px 60px -24px rgba(38,34,28,.42);

  --chart-1:#7A6134; --chart-2:#C08A2E; --chart-3:#7C6BA8; --chart-4:#4F8A9B;
  --chart-5:#A85A6B; --chart-6:#6E8C4A; --chart-7:#8A6D3B; --chart-8:#6B7278;
  --chart-grid:var(--raw-warm-100);
  --chart-axis:var(--raw-warm-300);
  --chart-label:var(--raw-warm-ink-3);
  --chart-track:var(--raw-warm-100);

  --tag-warn-bg:var(--warn-soft);      --tag-warn-ink:var(--warn-ink);
  --tag-info-bg:var(--info-soft);      --tag-info-ink:var(--info-ink);
  --tag-ok-bg:var(--ok-soft);          --tag-ok-ink:var(--ok-ink);
  --tag-mute-bg:var(--surface-3);      --tag-mute-ink:var(--text-2);
  --danger-line:var(--danger-soft);     --danger-line-ink:var(--danger);
  --dot-alert:#3A5BA8;
  --paper-ink:#2B3A34; --paper-line:#C6CEC9; --paper-faint:#E7EAE6;
  --paper-cell:#FCFDFC; --paper-cell-line:#DCE1DC; --paper-stamp:#C9A227;
  --paper-edge:#FFFFFF;

  --rail-bg:var(--raw-warm-rail);
  --rail-1:#8A7450; --rail-2:var(--raw-warm-rail-2);
  --rail-hover:#3A342C; --rail-on:#453D32;
  --rail-chip:#3A342C; --rail-chip2:#423A31;
  --rail-line:#4E463A;
  --rail-ink:#EDE7DB; --rail-ink2:#D3CBBC; --rail-dim:#A09684;
  --rail-mark:#C9A96B; --rail-mark-soft:rgba(201,169,107,.20);
  --rail-on-ink:var(--rail-ink);
}

/* ————————————————————————————————————————————————
   ⑤ 紫藤（浅色 · 薰衣草紫 + 大圆角）
   —— 浅色皮肤里唯一的大圆角 + 柔雾阴影组合：卡片 18~22px 圆角、
      顶栏与侧栏带一层淡紫渐晕，主色是紫藤紫而不是蓝/绿/棕。
      现有浅色皮肤（青松/暖砂/极简/宣纸/蓝图/松山绿）全都没有紫 —— 一眼分得开。
   ———————————————————————————————————————————————— */
[data-skin="wisteria"] {
  --canvas:#F5F3FC;
  --surface:#FFFFFF;
  --surface-2:#EEEAF9;
  --surface-3:#E1DAF4;
  --overlay:rgba(38,28,64,.36);

  --text-1:#251E38;
  --text-2:#4E4566;
  --text-3:#7C7195;
  --text-inv:#FFFFFF;

  --border:#E2DCF2;
  --border-soft:#EEEAF9;
  --border-strong:#CDC3E8;

  --brand:#6A4CBF;
  --brand-hover:#5A3FAA;
  --brand-soft:#F0EBFC;
  --brand-ink:#4B3390;

  --warn:#8A5209;  --warn-soft:#FBF0DF; --warn-ink:#6E4207;
  --danger:#A23A5C; --danger-soft:#FBE9EF; --danger-ink:#822C48;
  --ok:#2C6B57;    --ok-soft:#E6F1EE;    --ok-ink:#215143;
  --info:#3F5E9E;  --info-soft:#EAEFFA;  --info-ink:#314A7D;
  --slate:#7C7195; --slate-soft:#EEEAF9;

  --shadow-1:0 1px 2px rgba(60,44,110,.06);
  --shadow-2:0 4px 12px rgba(60,44,110,.08), 0 18px 40px -20px rgba(60,44,110,.26);
  --shadow-3:0 30px 70px -30px rgba(60,44,110,.42);

  --chart-1:#6A4CBF; --chart-2:#C08A2E; --chart-3:#3F8FA8; --chart-4:#9B6FD0;
  --chart-5:#C0517A; --chart-6:#5E8C3A; --chart-7:#8A6D3B; --chart-8:#6B6A85;
  --chart-grid:#EEEAF9;
  --chart-axis:#CDC3E8;
  --chart-label:#7C7195;
  --chart-track:#F1EDFB;

  --tag-warn-bg:var(--warn-soft);      --tag-warn-ink:var(--warn-ink);
  --tag-info-bg:var(--info-soft);      --tag-info-ink:var(--info-ink);
  --tag-ok-bg:var(--ok-soft);          --tag-ok-ink:var(--ok-ink);
  --tag-mute-bg:var(--surface-3);      --tag-mute-ink:var(--text-2);
  --danger-line:var(--danger-soft);     --danger-line-ink:var(--danger);
  --dot-alert:#6A4CBF;
  --paper-ink:#2B3A34; --paper-line:#C6CEC9; --paper-faint:#E7EAE6;
  --paper-cell:#FCFDFC; --paper-cell-line:#DCE1DC; --paper-stamp:#C9A227;
  --paper-edge:#FFFFFF;

  /* 大圆角：卡片与弹窗明显比其它浅色皮肤更"软" */
  --radius-sm:10px; --radius-md:14px; --radius-lg:20px;

  --rail-bg:#2A2140;
  --rail-1:#6A4CBF; --rail-2:#1F1833;
  --rail-hover:#332850; --rail-on:#3C2F5C;
  --rail-chip:#332850; --rail-chip2:#392C57;
  --rail-line:#463766;
  --rail-ink:#F0ECFA; --rail-ink2:#D8D2EA; --rail-dim:#B3AAD0;
  --rail-mark:#C9B6FF; --rail-mark-soft:rgba(201,182,255,.22);
  --rail-on-ink:#FFFFFF;
}

/* ————————————————————————————————————————————————
   ⑥ 极简（黑白 · 无彩色）
   —— ★ 这才是用户要的「极简风」：不是某个色相，是另一套美学。
     方角、无阴影、黑白灰、无品牌彩色块、状态色去饱和。
   ———————————————————————————————————————————————— */
[data-skin="minimal"] {
  --canvas:#FFFFFF;
  --surface:#FFFFFF;
  --surface-2:#FAFAFA;
  --surface-3:#F2F2F2;
  --overlay:rgba(0,0,0,.45);

  --text-1:#111111;
  --text-2:#3D3D3D;
  --text-3:#5E5E5E;
  --text-inv:#FFFFFF;

  --border:#E0E0E0;
  --border-soft:#EFEFEF;
  --border-strong:#C4C4C4;

  --brand:#111111;
  --brand-hover:#000000;
  --brand-soft:#F0F0F0;
  --brand-ink:#111111;

  /* 状态色去饱和但仍可辨（黑白下靠字重/边框区分，色只做辅助） */
  --warn:#7A5A12;  --warn-soft:#F5F0E2;  --warn-ink:#5E460E;
  --danger:#93352A; --danger-soft:#F5EAE8; --danger-ink:#752A21;
  --ok:#2B5C40;    --ok-soft:#EAF1ED;    --ok-ink:#224A34;
  --info:#37516B;  --info-soft:#EBEFF3;  --info-ink:#2C4257;
  --slate:#5E5E5E; --slate-soft:#F2F2F2;

  /* ★ 方角 + 无投影 = 极简的骨架 */
  --radius-sm:2px; --radius-md:3px; --radius-lg:4px;
  --shadow-1:none;
  --shadow-2:0 0 0 1px rgba(0,0,0,.10);
  --shadow-3:0 0 0 1px rgba(0,0,0,.16);

  --chart-1:#111111; --chart-2:#5E5E5E; --chart-3:#8A8A8A; --chart-4:#3D3D3D;
  --chart-5:#6E6E6E; --chart-6:#A8A8A8; --chart-7:#4A4A4A; --chart-8:#7E7E7E;
  --chart-grid:#EFEFEF;
  --chart-axis:#C4C4C4;
  --chart-label:#5E5E5E;
  --chart-track:#F2F2F2;

  --tag-warn-bg:var(--warn-soft);      --tag-warn-ink:var(--warn-ink);
  --tag-info-bg:var(--info-soft);      --tag-info-ink:var(--info-ink);
  --tag-ok-bg:var(--ok-soft);          --tag-ok-ink:var(--ok-ink);
  --tag-mute-bg:var(--surface-3);      --tag-mute-ink:var(--text-2);
  --danger-line:var(--danger-soft);     --danger-line-ink:var(--danger);
  --dot-alert:#111111;
  --paper-ink:#2B3A34; --paper-line:#C6CEC9; --paper-faint:#E7EAE6;
  --paper-cell:#FCFDFC; --paper-cell-line:#DCE1DC; --paper-stamp:#C9A227;
  --paper-edge:#FFFFFF;

  /* 白底侧栏 + 黑字 —— 极简就是连侧栏都不要深色块。
     ★ 选中项用「黑底白字」：白底上的选中项如果也是黑字就看不见了
       （第一版这里就是黑底黑字，对比度 1:1 —— 对比度脚本抓出来的）。
     ★★ 2026-10-31 修正「切到极简后左侧导航像丢了」★★
       病根不是颜色值本身，是**白侧栏与白画布同色、且侧栏没有一条边界线**：
       侧栏 #FFFFFF、canvas #FFFFFF，中间什么都没有，缩小窗口后整条侧栏
       与内容区糊成一片，导航文字在 12px 下自然"消失"。
       修法两层：① app.css 给 .rail 加一条右边框（所有皮肤通用，见那里的注释）；
                ② 这里把次要文字的对比度提上来 —— 12px 的字，
                   #7E7E7E 在白底上只有 4.0:1，低于正文阈值，
                   分组标题（看/配）和"owner"这类说明就直接糊掉了。 */
  --rail-bg:#FFFFFF;
  --rail-1:#111111; --rail-2:#3D3D3D;
  --rail-hover:#F2F2F2; --rail-on:#111111;
  --rail-chip:#F2F2F2; --rail-chip2:#FAFAFA;
  --rail-line:#D8D8D8;
  --rail-ink:#111111; --rail-ink2:#2B2B2B; --rail-dim:#5E5E5E;
  --rail-mark:#111111; --rail-mark-soft:rgba(0,0,0,.10);
  /* 选中态：反色（黑底白字）—— 极简里「反色」就是唯一的强调手段 */
  --rail-on-ink:#FFFFFF;
}

/* ————————————————————————————————————————————————
   ⑦ 宣纸墨印（浅色 · 中式纸感）
   —— 与登录页 D 款「宣纸墨印」同一套语汇：
      米黄纸底、墨色字、朱红作印。登录门面进来之后，
      整站是同一张纸，不是"门面一套、里面一套"。
   —— ★ 侧栏取墨色（#2F2820）而不是白纸：纸感靠画布做，
      侧栏留一块墨，导航才立得住（白侧栏在浅画布上会糊成一片，
      极简那款踩过这个坑，这里不重犯）。
   ———————————————————————————————————————————————— */
[data-skin="xuanzhi"] {
  --canvas:#F3ECE0;
  --surface:#FBF7EE;
  --surface-2:#F7F1E5;
  --surface-3:#EFE6D5;
  --overlay:rgba(43,38,32,.42);

  --text-1:#241F19;
  --text-2:#6E6250;
  /* 登录页的浅褐 #8B7F6A 在纸底上只有 3.68:1，做门面够、做 11px 表头字不够，
     整站版压深一档；纸的"旧"靠底色和纸纹，不靠把字写淡 */
  --text-3:#726750;
  --text-inv:#FFF7EF;

  --border:#E3D8C3;
  --border-soft:#EDE3D0;
  --border-strong:#D8C9AD;

  /* 朱红：登录页那枚印章的印泥色，整站只在这一个点上用力 */
  --brand:#B23A2E;
  --brand-hover:#8D2A20;
  --brand-soft:#F6E3DE;
  --brand-ink:#8D2A20;

  --warn:#8A5B12;  --warn-soft:#F7EEDD;  --warn-ink:#6E490E;
  --danger:#A8332A; --danger-soft:#F8E6E2; --danger-ink:#7E241C;
  --ok:#4A6B45;    --ok-soft:#E9EFE4;    --ok-ink:#3A5536;
  --info:#3F5A72;  --info-soft:#E7EDF2;  --info-ink:#33495C;
  --slate:#8B7F6A; --slate-soft:#EFE6D5;

  /* 纸面几乎不投阴影：改用「上边缘一道白 + 极淡的暖影」做出纸张厚度 */
  --shadow-1:0 1px 0 #FFFFFF inset;
  --shadow-2:0 1px 0 #FFFFFF inset, 0 10px 24px -18px rgba(60,44,24,.5);
  --shadow-3:0 1px 0 #FFFFFF inset, 0 26px 60px -30px rgba(60,44,24,.55);

  /* 方角：纸张是裁出来的，不是倒角出来的 */
  --radius-sm:2px; --radius-md:3px; --radius-lg:4px;

  --chart-1:#B23A2E; --chart-2:#A5854C; --chart-3:#3C352C; --chart-4:#4A6B62;
  --chart-5:#7A6A8C; --chart-6:#5E8C3A; --chart-7:#8A6D3B; --chart-8:#8B8B80;
  --chart-grid:#E7DCC8;
  --chart-axis:#D8C9AD;
  --chart-label:#8B7F6A;
  --chart-track:#EFE6D5;

  --tag-warn-bg:var(--warn-soft);      --tag-warn-ink:var(--warn-ink);
  --tag-info-bg:var(--info-soft);      --tag-info-ink:var(--info-ink);
  --tag-ok-bg:var(--ok-soft);          --tag-ok-ink:var(--ok-ink);
  --tag-mute-bg:var(--surface-3);      --tag-mute-ink:var(--text-2);
  --danger-line:var(--danger-soft);     --danger-line-ink:var(--danger);
  --dot-alert:#B23A2E;
  /* 打印纸面不跟着换肤：送检单要套预印表格，纸上的颜色是刻意的 */
  --paper-ink:#2B3A34; --paper-line:#C6CEC9; --paper-faint:#E7EAE6;
  --paper-cell:#FCFDFC; --paper-cell-line:#DCE1DC; --paper-stamp:#C9A227;
  --paper-edge:#FFFFFF;

  --rail-bg:#2F2820;
  --rail-1:#C0463A; --rail-2:#8D2A20;
  --rail-hover:#3A3229; --rail-on:#4A4034;
  --rail-chip:#3A3229; --rail-chip2:#463C30;
  --rail-line:#554A3C;
  --rail-ink:#F2EADC; --rail-ink2:#D9CDBA; --rail-dim:#A7977E;
  --rail-mark:#D4645A; --rail-mark-soft:rgba(212,100,90,.22);
  --rail-on-ink:#FFF7EF;
}

/* ————————————————————————————————————————————————
   ⑧ 蓝图工程（浅色 · 图纸语言）
   —— 与登录页 F 款「蓝图工程」同源：浅蓝底、方格纸、
      白图纸卡、蓝色墨线。做工程的看图纸看了半辈子，这套不用解释。
   —— ★ 侧栏取深图纸蓝：方格纸是浅的，侧栏再浅就又是一片白。
   ———————————————————————————————————————————————— */
[data-skin="blueprint"] {
  --canvas:#EAF2F9;
  --surface:#FFFFFF;
  --surface-2:#F7FAFD;
  --surface-3:#EDF4FA;
  --overlay:rgba(22,40,58,.38);

  --text-1:#16283A;
  --text-2:#45586B;
  /* 3 号字（表头说明/占位提示）压在白卡上要 ≥4.5:1：
     登录页那套 #6D879D 只有 3.75，放到表格里的 11px 小字上就虚了，这里压深一档 */
  --text-3:#5F7689;
  --text-inv:#FFFFFF;

  --border:#C4D7E8;
  --border-soft:#DBE7F2;
  --border-strong:#A8C2D8;

  --brand:#2B6CB0;
  --brand-hover:#245C98;
  --brand-soft:#E3EEF9;
  --brand-ink:#1E5183;

  --warn:#8A5B12;  --warn-soft:#FBF2E2;  --warn-ink:#6E490E;
  --danger:#A83A2E; --danger-soft:#FBEAE7; --danger-ink:#82291F;
  --ok:#2C6B47;    --ok-soft:#E8F2EC;    --ok-ink:#225638;
  --info:#2B6CB0;  --info-soft:#E3EEF9;  --info-ink:#1E5183;
  --slate:#6D879D; --slate-soft:#EDF4FA;

  /* 图纸卡：1px 描边 + 很浅的投影，不做毛玻璃 */
  --shadow-1:0 1px 2px rgba(31,66,102,.06);
  --shadow-2:0 0 0 1px #DBE7F2, 0 10px 24px -18px rgba(31,66,102,.35);
  --shadow-3:0 0 0 1px #C4D7E8, 0 26px 60px -32px rgba(31,66,102,.42);

  /* 直角：图纸上没有圆角 */
  --radius-sm:2px; --radius-md:2px; --radius-lg:3px;

  --chart-1:#2B6CB0; --chart-2:#C08A2E; --chart-3:#4F8A9B; --chart-4:#6E62C4;
  --chart-5:#A8506B; --chart-6:#5E8C3A; --chart-7:#8A6D3B; --chart-8:#5A6E78;
  --chart-grid:#DBE7F2;
  --chart-axis:#C4D7E8;
  --chart-label:#6D879D;
  --chart-track:#EDF4FA;

  --tag-warn-bg:var(--warn-soft);      --tag-warn-ink:var(--warn-ink);
  --tag-info-bg:var(--info-soft);      --tag-info-ink:var(--info-ink);
  --tag-ok-bg:var(--ok-soft);          --tag-ok-ink:var(--ok-ink);
  --tag-mute-bg:var(--surface-3);      --tag-mute-ink:var(--text-2);
  --danger-line:var(--danger-soft);     --danger-line-ink:var(--danger);
  --dot-alert:#2B6CB0;
  --paper-ink:#2B3A34; --paper-line:#C6CEC9; --paper-faint:#E7EAE6;
  --paper-cell:#FCFDFC; --paper-cell-line:#DCE1DC; --paper-stamp:#C9A227;
  --paper-edge:#FFFFFF;

  --rail-bg:#16324A;
  --rail-1:#2B6CB0; --rail-2:#1B4A72;
  --rail-hover:#1C3D58; --rail-on:#23496A;
  --rail-chip:#1C3D58; --rail-chip2:#22445F;
  --rail-line:#2E5878;
  --rail-ink:#DCE9F4; --rail-ink2:#B7CDE0; --rail-dim:#8AA6BE;
  --rail-mark:#7FB3E0; --rail-mark-soft:rgba(127,179,224,.20);
  --rail-on-ink:#FFFFFF;
}

/* ————————————————————————————————————————————————
   ⑨ 松山绿（浅色 · V01 同款渐变）
   —— 2026-10-31 第 29 轮，用户：「设计一款与V01同款的松山绿（渐变色）主题皮肤」。
      色值 1:1 抄 V01 data-theme="f"（v342⑦ 松山绿）：
        底 #F6F8F5 / 面 #E7F1EC / 主色 #2F6B4F / 字 #23332C / 线 #E3EBE5。
      V01 的招牌是**渐变**：主按钮 135° 松绿、顶栏/概览带 150° 深松绿——
      渐变不是令牌管的事，写在 skins.css 的 [data-skin="songshan"] 块里；
      这里另发一支 --grad-pine 令牌供概览带等组件引用。
   —— 侧栏取深松绿 #1E4A37（V01 toprail 渐变的最深端）：
      浅绿画布上白侧栏会糊成一片（极简踩过的坑），深侧栏才立得住。
   ———————————————————————————————————————————————— */
[data-skin="songshan"] {
  --canvas:#F6F8F5;
  --surface:#FFFFFF;
  --surface-2:#FBFDFB;
  --surface-3:#E7F1EC;
  --overlay:rgba(22,33,29,.42);

  --text-1:#23332C;
  --text-2:#3A4A42;
  --text-3:#5D6B63;
  --text-inv:#FFFFFF;

  --border:#E3EBE5;
  --border-soft:#E9F0EB;
  --border-strong:#C4D2C9;

  --brand:#2F6B4F;
  --brand-hover:#275C44;
  --brand-soft:#E7F1EC;
  --brand-ink:#275C44;

  --warn:#8A4B08;  --warn-soft:#FCF1E2;  --warn-ink:#6E490E;
  --danger:#B3261E; --danger-soft:#FBEAE8; --danger-ink:#82291F;
  --ok:#16653A;    --ok-soft:#E9F3EC;    --ok-ink:#16653A;
  --info:#22708A;  --info-soft:#E5F1F5;  --info-ink:#1E5F76;
  --slate:#66746C; --slate-soft:#E7F1EC;

  --shadow-1:0 1px 2px rgba(18,22,28,.05);
  --shadow-2:0 2px 6px rgba(18,22,28,.07), 0 12px 28px -14px rgba(18,22,28,.16);
  --shadow-3:0 24px 60px -24px rgba(18,22,28,.45);

  --grad-pine:linear-gradient(150deg,#1E4A37 0%,#2F6B4F 46%,#5E9478 100%);

  --chart-1:#2F6B4F; --chart-2:#C08A2E; --chart-3:#22708A; --chart-4:#5E9478;
  --chart-5:#A8506B; --chart-6:#5E8C3A; --chart-7:#8A6D3B; --chart-8:#5A6E78;
  --chart-grid:#E9F0EB;
  --chart-axis:#C4D2C9;
  --chart-label:#66746C;
  --chart-track:#E7F1EC;

  --tag-warn-bg:var(--warn-soft);      --tag-warn-ink:var(--warn-ink);
  --tag-info-bg:var(--info-soft);      --tag-info-ink:var(--info-ink);
  --tag-ok-bg:var(--ok-soft);          --tag-ok-ink:var(--ok-ink);
  --tag-mute-bg:var(--surface-3);      --tag-mute-ink:var(--text-2);
  --danger-line:var(--danger-soft);     --danger-line-ink:var(--danger);
  --dot-alert:#2F6B4F;
  --paper-ink:#2B3A34; --paper-line:#C6CEC9; --paper-faint:#E7EAE6;
  --paper-cell:#FCFDFC; --paper-cell-line:#DCE1DC; --paper-stamp:#C9A227;
  --paper-edge:#FFFFFF;

  --rail-bg:#1E4A37;
  --rail-1:#2F6B4F; --rail-2:#173F2F;
  --rail-hover:#25493A; --rail-on:#2C5847;
  --rail-chip:#25493A; --rail-chip2:#2B5243;
  --rail-line:#3A6B57;
  --rail-ink:#DCE8E1; --rail-ink2:#C0D4C9; --rail-dim:#A2B8AD;
  --rail-mark:#5FD3A8; --rail-mark-soft:rgba(95,211,168,.18);
  --rail-on-ink:#FFFFFF;
}

/* ============================================================
   L3 · 别名层 —— 让 1000+ 行既有组件样式不必一次全改
   ------------------------------------------------------------
   ★ 策略：别名保留（零风险），既有界面立刻用上新令牌。
   ★ 注意：这些别名必须写在 :root 上（不带 [data-skin] 选择器），
     因为它们引用的是 --canvas 等 L2 变量 —— 变量在哪个元素上求值，
     就在那个元素上生效；:root 上的别名会继承到所有后代。
   ============================================================ */
:root {
  --bg:var(--canvas);
  --panel:var(--surface);
  --panel-2:var(--surface-2);
  --ink:var(--text-1);
  --ink2:var(--text-2);
  --ink3:var(--text-3);
  --line:var(--border);
  --line-2:var(--border-soft);
  --brand-2:var(--brand-hover);
  --sh:var(--shadow-2);
  --r:var(--radius-lg);
  --r-s:var(--radius-sm);
  --mono:var(--raw-font-mono);
  /* ★ --font 指向 --raw-font-ui（不是 --raw-font-sans）：
     后台「界面外观」改字体族时写的就是 --raw-font-ui，
     指向它才能一处生效全站跟着变。sans 保留在 L1 供别处引用。 */
  --font:var(--raw-font-ui);

  /* ★ 修掉 4 个「引用了但从未定义」的变量 —— 之前它们拿不到值，
     那些地方的次要文字/卡片底色是失效的（隐性视觉 bug）。 */
  --card:var(--surface);
  --ink4:var(--text-3);
  --surface2:var(--surface-2);
  --surface3:var(--surface-3);

  /* ============================================================
     弹窗三档尺寸（第 41 轮 · 用户：「三类弹窗加入界面外观，随时更换」）
     ------------------------------------------------------------
     ★ 这里是**兜底值**，等于「标准档」= 今天线上的样子。
       后台选了别的档，core.js 的 applyDlgSize 会往 <html> 上写覆盖值，
       覆盖的是同一个变量名，所以 app.css 的 .sz-* 一行都不用改。
     ★ 为什么必须定义在 tokens 里：闸门 R8 会扫「引用了但没定义」的变量 ——
       写在 app.css 的 var(--x, 兜底) 里迟早漏一处，且兜底值散在各处。
     ============================================================ */
  --dlg-p:440px;
  --dlg-w1:760px;
  --dlg-w2:980px;
  --dlg-h2:612px;
  --dlg-w3:1120px;
  --dlg-h3:700px;
}
