:root{
  --topbar-h:80px;
  --bg:#eef0f6; --panel:#ffffff; --card:#ffffff; --text:#232a3c; --muted:#878da3;
  --line:#e2e5f0; --accent:#6f5cf2; --accent-soft:#ece9fe; --tagbg:#f3f4fa; --tagbg-hover:#ebecf7;
  --new:#ef4d7e; --shadow:0 1px 3px rgba(28,32,58,.08),0 6px 18px rgba(28,32,58,.05);
  --shadow-hover:0 4px 12px rgba(28,32,58,.12),0 14px 34px rgba(28,32,58,.10);
  /* 卡片悬停立体（card-depth.js）：方向阴影的颜色与浓度、强调色细环的掺量、反光强度 */
  --depth-shadow-rgb:28 32 58; --depth-shadow-a:.26; --depth-ring:22%; --depth-sheen:.6;
  --glass:rgba(255,255,255,.74);
  --popover-glass:rgba(255,255,255,.93);
  --popover-line:rgba(226,229,240,.92);
  --popover-shadow:0 18px 48px rgba(28,32,58,.16),0 4px 14px rgba(28,32,58,.08);
  --overlay:rgba(21,24,38,.48);
  --accent-glow:rgba(111,92,242,.18);
  --font-ui:"Outfit","PingFang SC","Microsoft YaHei",-apple-system,"Segoe UI",Roboto,sans-serif;
  --font-prompt:"IBM Plex Mono","PingFang SC","Microsoft YaHei",Menlo,"SFMono-Regular",Consolas,"Liberation Mono",monospace;
  --font-display:"Outfit","Noto Serif SC","PingFang SC","Microsoft YaHei",serif;
  --font-directory:"Outfit","Noto Sans SC","PingFang SC","Microsoft YaHei",sans-serif;
  --font:var(--font-ui);
  --font-serif:var(--font-display);
  --font-mono:var(--font-prompt);
  --on-accent:#fff;
  --red:var(--new);
  --danger:#d74b66; --danger-text:#c33f59;
}
/* ============ 主题色（换肤）：每套含 light + dark，与深浅色正交；默认梦境 ============ */
body.theme-teal{--bg:#eaeef5;--panel:#ffffff;--card:#ffffff;--text:#22304a;--muted:#5a6881;--line:#dbe2ee;--accent:#0fa173;--accent-soft:#dff4ea;--tagbg:#f1f4f9;--tagbg-hover:#e8eef6;--accent-glow:rgba(15,161,115,.18);--on-accent:#131316;
  --glow-1:#c5eedc;--glow-2:#e4f2c0;--glow-3:#cdeee8;--glow-spot:#92d6c4}
body.theme-teal.dark{--text:#e4e9f3;--muted:#7e8aa0;--accent:#2ecb86;--accent-soft:#14352a;--accent-glow:rgba(46,203,134,.20)}
body.theme-sakura{--bg:#fbf4f1;--panel:#fffaf7;--card:#ffffff;--text:#3d3034;--muted:#705f64;--line:#f0dde0;--accent:#e0577f;--accent-soft:#fce8ee;--tagbg:#faf1ef;--tagbg-hover:#f7e9e7;--new:#c2342d;--accent-glow:rgba(224,87,127,.18);--on-accent:#131316;
  --glow-1:#ffd3df;--glow-2:#ffe0c9;--glow-3:#fcd8d3;--glow-spot:#f4b1ba}
body.theme-sakura.dark{--text:#f2e6ea;--muted:#9c8790;--accent:#f08fb0;--accent-soft:#3d2230;--new:#e0577f;--accent-glow:rgba(240,143,176,.20)}
body.theme-amber{--bg:#f4eee1;--panel:#faf6ec;--card:#ffffff;--text:#2b261e;--muted:#69604e;--line:#e0d5bb;--accent:#a87f2f;--accent-soft:#f1e7cd;--tagbg:#f5f0e3;--tagbg-hover:#efe7d2;--new:#b5452f;--accent-glow:rgba(168,127,47,.18);--on-accent:#131316;
  --glow-1:#f3da9c;--glow-2:#efe0bb;--glow-3:#f6d6aa;--glow-spot:#efc66e}
body.theme-amber.dark{--text:#e9e0cd;--muted:#8d8268;--accent:#d2a651;--accent-soft:#332a1a;--new:#e06a52;--accent-glow:rgba(210,166,81,.20)}
body.theme-indigo{--bg:#eaeef7;--panel:#ffffff;--card:#ffffff;--text:#1e2740;--muted:#545e77;--line:#dce2ef;--accent:#2563c9;--accent-soft:#e2ebfb;--tagbg:#eff3fa;--tagbg-hover:#e5ecf8;--accent-glow:rgba(37,99,201,.18);
  --glow-1:#c6d6ff;--glow-2:#c2e8f6;--glow-3:#cfe0fb;--glow-spot:#9fbded}
body.theme-indigo.dark{--text:#e4eaf6;--muted:#7e8aa4;--accent:#5b9bf5;--accent-soft:#122744;--accent-glow:rgba(91,155,245,.20)}
/* 素墨=无彩：界面退到灰阶，颜色全让给图。深色档 accent 是亮灰，必须把 --on-accent 压深，
   否则全站 accent 底上的白字（约 27 处）会糊成一片——有彩皮肤靠色相撑得住，灰阶撑不住。 */
body.theme-ink{--bg:#f1f1f3;--panel:#ffffff;--card:#ffffff;--text:#1c1c21;--muted:#5e5e67;--line:#e3e3e8;--accent:#3c3c45;--accent-soft:#e7e7ec;--tagbg:#f0f0f4;--tagbg-hover:#e8e8ee;--accent-glow:rgba(60,60,69,.16);
  --glow-1:#dadbe0;--glow-2:#e6e2d8;--glow-3:#d6d8dd;--glow-spot:#c8c9cf}
body.theme-ink.dark{--text:#eaeaef;--muted:#85858f;--accent:#c8c8d2;--accent-soft:#2b2b32;--accent-glow:rgba(200,200,210,.16);--on-accent:#131316}
body.theme-dream{--bg:#f7f7fb;--panel:#ffffff;--card:#ffffff;--text:#232a3c;--muted:#5c6275;--line:#e3e3f0;--accent:#6f59fb;--accent-soft:#ece9fe;--tagbg:#f3f3fb;--tagbg-hover:#ebebf8;--accent-glow:rgba(111,89,251,.18);
  --glow-1:#dbddff;--glow-2:#ffd0d0;--glow-3:#ebdcff;--glow-spot:#c8b7fe}
body.theme-dream.dark{--text:#e8eaf3;--muted:#8a91a6;--accent:#a596ff;--accent-soft:#2a2356;--accent-glow:rgba(165,150,255,.22)}
/* 页面光晕：每套皮肤浅色档都在页面两角铺一层光晕，控件保持纯色。渐变只铺最底层，卡片、按钮、选中项都不再叠一段：
   同一对颜色在一屏里以两种长度出现会撞色。深色档没有光晕。
   - 颜色在各皮肤块里：--glow-1 左上、--glow-2 右上、--glow-3 底部第三色（只有动态层画）、--glow-spot 指尖光。
     每套只用自己色系里的颜色，别和梦境的「蓝紫 + 粉」撞。
   - 灰字直接压在光晕上，所以各皮肤的 --muted 都比纯色底时深：压在底色和三种光晕色上都不低于梦境的水平（约 4.4:1）。
   - 主站另有动态层（app/page-glow.js）在这层光晕上面画同样的两团光并让它们呼吸，几何照抄 --page-wash，
     两边改一处就要同改另一处（test_page_glow.mjs 有防漂移断言）。没有光晕色的页面 var() 落空，什么都不画。 */
body{--page-wash:radial-gradient(70vmax 52vmax at 0% 0%,var(--glow-1),transparent 72%),radial-gradient(70vmax 56vmax at 100% 6%,var(--glow-2),transparent 72%)}
body:not(.dark)::before{content:"";position:fixed;inset:0;z-index:-1;pointer-events:none;background:var(--page-wash)}

/* 深色 = 纯黑。底色就是 #000，面/线/标签底靠 color-mix 往黑里掺一点 accent，
   所以每套皮肤在黑底上各自还留着色相，而不是一模一样的灰。
   ⚠ 两条排版铁律，破一条深色就会漏出浅色底：
     · 本块必须排在所有 body.theme-* 之后——它与皮肤的**浅色**块同权重（1 类 + 1 元素），只能靠源序赢；
     · 各皮肤的 .dark 块（2 类 + 1 元素，权重更高）里不许再写 --bg/--panel/--card/--line/--tagbg*。 */
body.dark{
  --bg:#000000;
  --panel:color-mix(in srgb,var(--accent) 6%,#000);
  --card:color-mix(in srgb,var(--accent) 9%,#000);
  --line:color-mix(in srgb,var(--accent) 20%,#000);
  --tagbg:color-mix(in srgb,var(--accent) 12%,#000);
  --tagbg-hover:color-mix(in srgb,var(--accent) 18%,#000);
  --text:#e8eaf3; --muted:#8a91a6; --on-accent:#131316;
  --accent:#8b7cf8; --accent-soft:#262050;
  --new:#f25c8a; --shadow:0 1px 3px rgba(0,0,0,.45); --shadow-hover:0 14px 40px rgba(0,0,0,.55);
  --depth-shadow-rgb:0 0 0; --depth-shadow-a:.6; --depth-ring:32%; --depth-sheen:.32;
  --glass:rgba(0,0,0,.74);
  --popover-glass:rgba(0,0,0,.95);
  --popover-line:color-mix(in srgb,var(--accent) 22%,#000);
  --popover-shadow:0 20px 54px rgba(0,0,0,.56),0 5px 18px rgba(0,0,0,.34);
  --overlay:rgba(0,0,0,.78);
  --accent-glow:rgba(139,124,248,.22);
  --danger-text:#ff9e97;
}

/* ============ 界面字体（换嗓子）：与配色、深浅色都正交 ============
   四个字族（Outfit / Noto Sans SC / Noto Serif SC / IBM Plex Mono）index.html 里已全部在载，
   换档不增加任何网络请求。--font-prompt 一律不动：prompt 框靠等宽对齐，换掉就散了。 */
body.font-classic{
  --font-ui:"Noto Serif SC","Songti SC","SimSun",Georgia,serif;
  --font-display:"Noto Serif SC","Songti SC","SimSun",Georgia,serif;
  --font-directory:"Noto Serif SC","Songti SC","SimSun",Georgia,serif;
}
body.font-terminal{
  --font-ui:"IBM Plex Mono","Noto Sans SC","PingFang SC","Microsoft YaHei",monospace;
  --font-display:"IBM Plex Mono","Noto Sans SC","PingFang SC","Microsoft YaHei",monospace;
  --font-directory:"IBM Plex Mono","Noto Sans SC","PingFang SC","Microsoft YaHei",monospace;
}
