/* ==========================================================================
   个人记账 APP · 皮肤主题（Skin Themes）v3.1
   --------------------------------------------------------------------------
   ★ v3.0（2026-10-13 · 第 88 轮）：**6 套 → 10 套**，出厂默认 **m03 晴空蓝**。
     Fred 定案：「全局皮肤选 m03 晴空蓝（出厂默认）」+「皮肤是全局的，选一套所有页面一起变」。
   ★ v3.1（2026-10-14 · 第 88 轮批 4）：Fred 真机看过后三处改
     ① **出厂默认改为 m01 香槟金**（「晴空蓝不够好看了」）；
     ② **设置页顺序重排**：香槟金 · 深空蓝紫 · 薰衣草紫 · 莓粉 · 珊瑚橙 · 晴空蓝 ·
        雾蓝 · 湖水青 · 森绿 · 石墨黑（顺序在 `js/theme.js` 的 THEMES，本文件只按它排版）。
     ③ 皮肤块**一律不再写 `:root`**（见文件末注释），彻底消灭「后写盖前 + 跨皮肤泄漏」两类暗坑；
        并把 `--chart-grid` 从全局移进每套皮肤（按主色派生）—— 报表折线图的网格线从此也跟着皮肤走。

   ★★ 三条硬规矩（第 82 轮定，本版继续遵守）
     ① **中性层全 10 套共用**：页面底 / 卡片 / 文字 / 分割线 / 填充 / 阴影 **只在 :root 声明一次**，
        皮肤块**一律不声明**。切皮肤只换「细节颜色」（主色族 / 语义色 / 渐变卡 / 装饰令牌），
        不整页换调子 —— Fred 原话「切换皮肤只是在细节上变更颜色」。
     ② 皮肤块只写「颜色」，不写尺寸/阴影/圆角。
     ③ `--deco-*` 是装饰背景令牌，由 `app.css` 的 `[data-deco="dN"]::before` 消费。

   ★ v3.0 相对 v2.0 的 6 处结构性变更
     1. 删掉 `dark`（墨夜黑）与 `auto`（跟随系统）—— Fred 定：「深色形态暂不考虑」；
        没有深色形态，`auto` 也就没有意义。**皮肤模式不再有 system 分支。**
     2. `--chart-1..7` 分类色板改为 **全局**（原来 amber/jade/violet 各有一套）：
        与「收支三色不随皮肤漂移」同口径，避免切皮肤时图表分类色跳变。
     3. `--danger/--warn/--ok` 及 `-w` 浅底改为 **全局**（同上：功能语义色不该随皮肤漂移）。
     4. `.summary` 的文字色改由 `var(--hero-fg, var(--primary-on))` 决定
        （香槟金是亮底深字，`--primary-on` 是「实心块上的前景色」，两者语义不同，必须拆开）。
     5. 新增**全局**令牌 `--on-solid:#fff` —— 「固定深底/彩底上的前景色」（第 88 轮 S3）。
        它替掉 4 处把 `--primary-on` 当「深底前景色」用的误写（香槟金下会看不见）。
     6. 新增**随皮肤**的 `--hero-dim` —— hero 次级文字不透明度；只有 m01 需要设成 1
        （亮底深字再降透明就是在削弱对比度，实测 12px 的 .lbl 只剩 3.4:1）。

   ★ 十套皮肤一览（顺序即设置页顺序）
      m01 香槟金（默认） m04 深空蓝紫   m06 薰衣草紫   m07 珊瑚橙     m08 莓粉
      m03 晴空蓝         m05 雾蓝       m10 湖水青     m02 森绿       m09 石墨黑

   ★ 旧皮肤键迁移（见 js/theme.js）
      default→m03 · amber→m01 · jade→m02 · violet→m06 · dark→m03 · auto→m03
      （只在 localStorage 里迁移，**旧 key 不删**，便于回滚。
        ★ 注意 `default` 仍映射到 **m03**，不是新的默认 m01 —— 那些存量用户当年看到的就是
          蓝色，别因为「出厂默认换人」把他们整页换掉；新装用户没有 key，走 DEFAULT_ID = m01。）

   ★★ 三个反复踩过的坑（改本文件前先读，改完必须重跑 gen-themes.py 的自检）
     ① `--primary` 与 `--primary-d` 不能混用：选中态/描边必须用 `--primary`
        （`--primary-d` 在真机上被读成「黑色线」，第 81 轮踩过）。
     ② ★★★ **皮肤块一律不写 `:root`**。`:root` 永远匹配 `<html>` ⇒ 那一条会对**所有**皮肤
        生效，而它与 `[data-theme="mNN"]` 特异性同为 (0,1,0) ⇒ **谁后写谁赢**。第 88 轮
        把默认块写成 `:root,[data-theme="m03"]` 且排在中间 ⇒ 排在它前面的 m01/m02 被整块盖掉
        （切过去主色仍是 m03 的 #0E72C4）。而且即使把它排到最前，只给某一套皮肤声明的令牌
        （--hero-dim 等）也会**泄漏给其余皮肤**。两种错都零报错、四套基线全绿。
        ⇒ 生成器有两道护栏拦着（皮肤块不许含 :root / :root 不许后写）。
     ③ 本文件末尾 `:root{--income:...}` 那段**必须排在最后**：理由同上（后写赢）。
   ========================================================================== */

/* --------------------------------------------------------------------------
   中性层 —— 全 10 套共用，皮肤块一律不声明这些（第 82 轮定的规矩）
   -------------------------------------------------------------------------- */
:root {
  /* ★ 第 81 轮：页面底色改白皮书 §1.1 的 --bg-page=#F7F8FA（原 #eaeef5 偏蓝偏深）。 */
  --bg: #F7F8FA;
  --card: #ffffff;
  --card-2: #ffffff;
  --text: #1b2434;
  --sub: #606a7c;
  --line: #e3e8f0;
  --fill: #f1f4f9;
  --fill-2: #e6ebf3;

  /* 功能语义色：**不随皮肤漂移**（与收支三色同口径） */
  --danger: #c9302c;
  --warn: #d97706;
  --ok: #0e9f6e;
  --income-w: #fdecec;
  --expense-w: #e7f6f1;
  --danger-w: #fdecec;
  --warn-w: #fff7e8;
  --ok-w: #e7f6f1;

  /* 「固定深底 / 彩底」上的前景色：**恒白，不随皮肤走**（第 88 轮 S3）。
     用在三类底：① toast 近黑底 ② --danger 危险红底 ③ background:var(--primary) 实心块
     （图标圆牌选中态 / 账户选择器选中态 / 键盘功能键选中态 / 关于页 logo）。
     ⚠️ 这些地方**不能用 `--primary-on`**：它的语义是「**亮档**实心块（--primary-btn）上的
       前景色」，香槟金下是深褐 #3D2C06 —— 压在近黑 / 红 / 深金上直接看不见。
       （这是第 88 轮从产品里逐处枚举出来的 4 处误用，改之前先看 S3 清单。） */
  --on-solid: #ffffff;

  --radius: 14px;
  --shadow: 0 1px 3px rgba(23, 37, 63, .05), 0 3px 12px rgba(23, 37, 63, .06);
  --shadow-lg: 0 6px 28px rgba(23, 37, 63, .16);
}

/* --------------------------------------------------------------------------
   10 套皮肤（令牌值 = 效果图定稿 ui-lab/skins2.css v4.2，逐值搬运）
   -------------------------------------------------------------------------- */
/* 1. 香槟金（m01） · 默认母题：d6 同心波纹 */
  /* ★ 出厂默认（Fred 2026-10-14 改）· 唯一「亮底深字」皮肤：hero 浅香槟 + 深褐字；实心块 = 香槟金 + 深褐字 */
[data-theme="m01"]{
  --primary:#856519; --primary-w:#FAF4E4; --primary-d:#5A420E;
  --primary-l:#C6A44E; --primary-btn:#E0C078; --primary-on:#3D2C06;
  --hero-fg:#3B2A06; --hero-from:#F0DEB0; --hero-to:#E0C078;
  --hero-sub:#614609; --hero-in:#7A1E10; --hero-out:#0B4B2A;
  --transfer:#856519; --adjust:#7C3AED; --deco-1:rgba(255,255,255,.60);
  --deco-2:rgba(150,116,32,.18); --chart-grid:rgba(198,164,78,.14); --chart-bal:#B3903A;
  --chart-1:#AA872E; --chart-2:#BB9535; --chart-3:#C9A446;
  --chart-4:#D1B56D; --chart-5:#D7C28C; --chart-6:#DECFAA;
  --chart-7:#E5DCC5; --hero-dim:1; --hero-scrim:rgba(255,255,255,.62);
  --hero-scrim-strong:rgba(255,255,255,.62); --hero-line:rgba(59,42,6,.22); --hero-av-bg:rgba(255,255,255,.94);
  --hero-av-fg:var(--primary-d);
}

/* 2. 深空蓝紫（m04） · 默认母题：d8 极光·深空 */
  /* ★ 品牌色按历史稿逐像素还原（hero #3B3478→#171139）+ 深空装饰（柔辉/斜带/星点） */
[data-theme="m04"]{
  --primary:#5140BE; --primary-w:#EAE6FA; --primary-d:#34287E;
  --primary-l:#8A78E4; --primary-btn:#5140BE; --primary-on:#FFFFFF;
  --hero-fg:#FFFFFF; --hero-from:#3B3478; --hero-to:#171139;
  --hero-sub:#C9C2EE; --hero-in:#FFCFC6; --hero-out:#A9EBC4;
  --transfer:#5A45C8; --adjust:#8B5CF6; --deco-1:rgba(255,255,255,.30);
  --deco-2:rgba(10,6,36,.50); --deco-3:rgba(176,160,255,.55); --deco-4:rgba(255,255,255,.62);
  --chart-grid:rgba(81,64,190,.14); --chart-bal:#5140BE; --chart-1:#2F1DA3;
  --chart-2:#4029D6; --chart-3:#5E4BDA; --chart-4:#7869DD;
  --chart-5:#9185E1; --chart-6:#A9A0E4; --chart-7:#C2BCE9;
}

/* 3. 薰衣草紫（m06） · 默认母题：d2 斜向光带 */
[data-theme="m06"]{
  --primary:#6A4FC0; --primary-w:#ECE8FA; --primary-d:#4A3489;
  --primary-l:#8B73D8; --primary-btn:#6A4FC0; --primary-on:#FFFFFF;
  --hero-fg:#FFFFFF; --hero-from:#7B63D6; --hero-to:#4B3699;
  --hero-sub:#D8CFF7; --hero-in:#FBB6C6; --hero-out:#8FE0CE;
  --transfer:#6A4FC0; --adjust:#8B5CF6; --deco-1:rgba(255,255,255,.18);
  --deco-2:rgba(38,22,86,.52); --chart-grid:rgba(106,79,192,.14); --chart-bal:#6A4FC0;
  --chart-1:#3B1D9A; --chart-2:#4F29CB; --chart-3:#6A47D7;
  --chart-4:#8266DB; --chart-5:#9982DF; --chart-6:#AF9FE3;
  --chart-7:#C6BBE8;
}

/* 4. 莓粉（m08） · 默认母题：d6 同心波纹 */
[data-theme="m08"]{
  --primary:#C22B62; --primary-w:#FBE4EF; --primary-d:#7E1B40;
  --primary-l:#DB4C80; --primary-btn:#C22B62; --primary-on:#FFFFFF;
  --hero-fg:#FFFFFF; --hero-from:#CE3670; --hero-to:#8C1C46;
  --hero-sub:#FAD0E2; --hero-in:#FFD9A6; --hero-out:#A9E8CE;
  --transfer:#C22B62; --adjust:#7C3AED; --deco-1:rgba(255,255,255,.22);
  --deco-2:rgba(86,14,44,.54); --chart-grid:rgba(194,43,98,.14); --chart-bal:#C22B62;
  --chart-1:#6F1435; --chart-2:#931C48; --chart-3:#B9265C;
  --chart-4:#D44277; --chart-5:#DB6D95; --chart-6:#E092AE;
  --chart-7:#E6B3C6;
}

/* 5. 珊瑚橙（m07） · 默认母题：d1 大光斑 */
[data-theme="m07"]{
  --primary:#C0402A; --primary-w:#FCE7E1; --primary-d:#8A2A1B;
  --primary-l:#DA6A4E; --primary-btn:#C0402A; --primary-on:#FFFFFF;
  --hero-fg:#FFFFFF; --hero-from:#C24328; --hero-to:#9E2E18;
  --hero-sub:#FBD3C8; --hero-in:#FFE0A8; --hero-out:#B6ECC0;
  --transfer:#C0402A; --adjust:#7C3AED; --deco-1:rgba(255,255,255,.38);
  --deco-2:rgba(104,26,12,.54); --chart-grid:rgba(192,64,42,.14); --chart-bal:#C0402A;
  --chart-1:#6A1F13; --chart-2:#8D2C1B; --chart-3:#B23925;
  --chart-4:#D24D37; --chart-5:#D87463; --chart-6:#DE968A;
  --chart-7:#E4B6AE;
}

/* 6. 晴空蓝（m03） · 默认母题：d3 云纹·雾 */
  /* ★ 蓝天白云，最中性的一套 */
[data-theme="m03"]{
  --primary:#0E72C4; --primary-w:#E1EFFB; --primary-d:#0A4B85;
  --primary-l:#2E93E0; --primary-btn:#0E72C4; --primary-on:#FFFFFF;
  --hero-fg:#FFFFFF; --hero-from:#1877C8; --hero-to:#0B4E8C;
  --hero-sub:#C4E2F8; --hero-in:#FFD2C8; --hero-out:#A6EDC6;
  --transfer:#0E72C4; --adjust:#6D28D9; --deco-1:rgba(255,255,255,.22);
  --deco-2:rgba(5,38,72,.50); --chart-grid:rgba(14,114,196,.14); --chart-bal:#0E72C4;
  --chart-1:#113B5E; --chart-2:#18517F; --chart-3:#2167A0;
  --chart-4:#2C7EC1; --chart-5:#4D96D3; --chart-6:#79AED9;
  --chart-7:#A3C5E1;
}

/* 7. 雾蓝（m05） · 默认母题：d3 云纹·雾 */
[data-theme="m05"]{
  --primary:#3E5E7E; --primary-w:#E9EFF4; --primary-d:#274056;
  --primary-l:#5A7C9C; --primary-btn:#3E5E7E; --primary-on:#FFFFFF;
  --hero-fg:#FFFFFF; --hero-from:#46708F; --hero-to:#2A4460;
  --hero-sub:#CBD9E6; --hero-in:#FBD0C8; --hero-out:#B8E6CB;
  --transfer:#3E5E7E; --adjust:#6D28D9; --deco-1:rgba(255,255,255,.26);
  --deco-2:rgba(20,34,50,.56); --chart-grid:rgba(62,94,126,.14); --chart-bal:#3E5E7E;
  --chart-1:#1E3B58; --chart-2:#2A5076; --chart-3:#376695;
  --chart-4:#457DB5; --chart-5:#6795C2; --chart-6:#8BACCD;
  --chart-7:#AEC3D9;
}

/* 8. 湖水青（m10） · 默认母题：d6 同心波纹 */
[data-theme="m10"]{
  --primary:#0C7A87; --primary-w:#E0F3F5; --primary-d:#08515A;
  --primary-l:#1E9AA8; --primary-btn:#0C7A87; --primary-on:#FFFFFF;
  --hero-fg:#FFFFFF; --hero-from:#0E7E8E; --hero-to:#0A4E58;
  --hero-sub:#BFE7ED; --hero-in:#FFCFC6; --hero-out:#9CE3CB;
  --transfer:#0C7A87; --adjust:#6D28D9; --deco-1:rgba(255,255,255,.22);
  --deco-2:rgba(5,38,44,.52); --chart-grid:rgba(12,122,135,.14); --chart-bal:#0C7A87;
  --chart-1:#0C3F45; --chart-2:#12565E; --chart-3:#196D77;
  --chart-4:#218591; --chart-5:#2B9FAC; --chart-6:#39B8C7;
  --chart-7:#82CDD6;
}

/* 9. 森绿（m02） · 默认母题：d2 斜向光带 */
[data-theme="m02"]{
  --primary:#2F7A45; --primary-w:#E3F3E7; --primary-d:#1B4D2C;
  --primary-l:#439B5C; --primary-btn:#2A7040; --primary-on:#FFFFFF;
  --hero-fg:#FFFFFF; --hero-from:#2C8049; --hero-to:#14512F;
  --hero-sub:#CDEBD5; --hero-in:#FFC9BE; --hero-out:#A9EBC4;
  --transfer:#2F7A45; --adjust:#7C3AED; --deco-1:rgba(255,255,255,.24);
  --deco-2:rgba(6,42,23,.54); --chart-grid:rgba(47,122,69,.14); --chart-bal:#2F7A45;
  --chart-1:#0E421E; --chart-2:#155929; --chart-3:#1C7235;
  --chart-4:#258B43; --chart-5:#2FA552; --chart-6:#3DBF63;
  --chart-7:#84D29B;
}

/* 10. 石墨黑（m09） · 默认母题：d4 星野 */
[data-theme="m09"]{
  --primary:#2B3138; --primary-w:#E8EAED; --primary-d:#14181D;
  --primary-l:#4A535E; --primary-btn:#2B3138; --primary-on:#FFFFFF;
  --hero-fg:#FFFFFF; --hero-from:#3C444E; --hero-to:#14181D;
  --hero-sub:#C6CCD3; --hero-in:#F2A79E; --hero-out:#9BDCB4;
  --transfer:#2B3138; --adjust:#7C3AED; --deco-1:rgba(255,255,255,.30);
  --deco-2:rgba(4,6,9,.58); --chart-grid:rgba(43,49,56,.14); --chart-bal:#2B3138;
  --chart-1:#303A46; --chart-2:#414F5F; --chart-3:#546578;
  --chart-4:#687B92; --chart-5:#8292A5; --chart-6:#9EAAB8;
  --chart-7:#BAC2CB;
}


/* --------------------------------------------------------------------------
   结构变量（app.css :root 亦已声明，此处保证 10 套皮肤下口径一致）
   -------------------------------------------------------------------------- */
:root {
  --tap-min: 44px;
  --radius-sm: 10px;
  --radius-lg: 16px;
  --sp-1: 4px; --sp-2: 8px; --sp-3: 12px; --sp-4: 16px; --sp-5: 20px; --sp-6: 24px;
}

/* --------------------------------------------------------------------------
   图表语义色（收支三色 + 坐标轴文字）
   ★ 这一段**仍然全 10 套共用**，是有意的（Fred 在 D-28 定案「语义色不随皮肤漂移」）：
     · `--chart-inc` 收入 = 浅红 / `--chart-exp` 支出 = 浅绿（A 股涨红跌绿口径）；
       跨皮肤必须读数一致，否则「红色=收入」这条直觉会随皮肤失效。
     · `--chart-axis` 坐标轴文字色：它承担 4.5:1 的文字对比度，跟着皮肤漂容易在某套皮肤上掉线。
   ★ 随皮肤走的三样（第 88 轮批 4 移进各皮肤块）：`--chart-grid` 网格线、
     `--chart-1..7` 分类色板（同族深淡）、`--chart-bal` 结余折线（= 皮肤主色）。
   -------------------------------------------------------------------------- */
:root {
  --chart-axis: #6a7488;
  --chart-inc: #ee7c74; --chart-exp: #5ec98d;
}

/* --------------------------------------------------------------------------
   ⚠️ 必须排在最末：收支两色统一（真机第 28 轮答复一·4 + 2026-10-08 A1 方案二）
   —— 列表与图表共用同一组色：收入 = 浅红 / 支出 = 浅绿 / 结余 = 浅蓝（A 股涨红跌绿口径）。
   把 --income/--expense 指到 --chart-inc/--chart-exp，**一处改、全站生效**
   （.amt.in/.out、.kv-row .v.in/.out、.tbx .in/.out 等全走这两个变量）。
   ⚠️ 本段必须排在**最末**：:root 里 --income/--expense 的原值与皮肤块里的值
   特异性同为 (0,1,0)，靠源序决胜，放前面会被盖掉。
   ⚠️ 红色的**删除类**语义（.tl-act.del 的底）**不动** —— 那是「警示 / 危险」不是「支出」。
   -------------------------------------------------------------------------- */
:root {
  --income: var(--chart-inc);
  --expense: var(--chart-exp);
}
