/* ==========================================================================
   theme.css —— 全站配色主题（皮肤）
   只负责「颜色变量 + 主题覆盖 + 换肤面板样式」，不含任何布局规则。
   切换方式：<html data-theme="neon|midnight|light|ocean|violet|amber">
   由 theme.js 写入并持久化到 localStorage。
   ========================================================================== */

/* ---------------------------------------------------------- 1. 默认：霓虹绿 */
:root{
  color-scheme:dark;
  /* 强调色：存 RGB 三元组，派生半透明时写 rgba(var(--c-x),α) */
  --c-accent:0,255,156;
  --c-accent2:0,229,255;
  --c-alt:177,140,255;
  --c-danger:255,45,111;
  --c-danger2:255,92,138;
  --c-warn:241,250,140;
  --c-shadow:0,0,0;
  --c-hi:255,255,255;
  /* 「画布上的墨色」：深色主题用白，浅色主题转黑，给 canvas 用 */
  --c-ink:255,255,255;
  /* 底色三元组：终端底 / 实体底（弹窗·搜索框·侧栏）/ 遮罩 */
  --c-term:2,6,4;
  --c-solid:3,16,10;
  --c-scrim:0,5,3;
  /* 强调色实色版 */
  --green:#00ff9c; --cyan:#00e5ff; --purple:#b18cff;
  --red:#ff2d6f; --yellow:#f1fa8c; --dim:#5f8f7c;
  /* 页面底色 */
  --bg:#04070a; --bg2:#071a13; --panel:#07130d; --term:#020604;
  --bg-image:radial-gradient(1200px 680px at 12% -8%,#071a13 0%,#04070a 46%,#020506 100%);
  /* 文字层级：正文 / 次级 / 弱化 / 更弱 / 标题 */
  --tx:#c8ffe6; --tx2:#a8e0c8; --tx3:#79a893; --tx4:#3f7059; --tx-hi:#fff;
  /* 有色文字 */
  --tx-cyan:#3df0ff; --tx-warn:#ffef9e; --tx-alt:#c9a9ff; --tx-h3:#43ffb0;
  --tx-danger:#ff5c8a; --tx-danger2:#ffd9e6;
  /* 亮底上的深色前景（按钮填充时的文字） */
  --on-accent:#001a10; --on-accent2:#001318; --on-danger:#1a0008; --on-warn:#1a1600;
  /* 线条 / 玻璃 / 光晕：由强调色派生，换强调色即自动跟随 */
  --line:rgba(var(--c-accent),.28); --line-soft:rgba(var(--c-accent),.16);
  --glass:rgba(var(--c-accent),.045); --glass-2:rgba(var(--c-accent),.07);
  --glow:rgba(var(--c-accent),.28); --glow-cyan:rgba(var(--c-accent2),.28);
  --neon:linear-gradient(120deg,var(--green),var(--cyan));
  --edge:rgba(var(--c-accent),.75);
  --edge-cyan:rgba(var(--c-accent2),.75);
}

/* ---------------------------------------------------------- 2. 纯黑终端 */
/* 近纯黑底 + 灰白字 + 冷青强调，长时间看最不累眼 */
html[data-theme="midnight"]{
  --c-accent:94,234,212;
  --c-accent2:125,211,252;
  --c-alt:196,181,253;
  --c-danger:248,113,113;
  --c-danger2:252,165,165;
  --c-warn:253,224,71;
  --c-term:4,6,6; --c-solid:8,12,11; --c-scrim:0,0,0;
  --green:#5eead4; --cyan:#7dd3fc; --purple:#c4b5fd;
  --red:#f87171; --yellow:#fde047; --dim:#6b7f78;
  --bg:#000; --bg2:#0a0f0e; --panel:#0b100f; --term:#050807;
  --bg-image:radial-gradient(1200px 680px at 50% -14%,#0b1312 0%,#000 58%,#000 100%);
  --tx:#dbe7e1; --tx2:#a9bcb4; --tx3:#7d918a; --tx4:#57675f; --tx-hi:#fff;
  --tx-cyan:#7dd3fc; --tx-warn:#fde047; --tx-alt:#c4b5fd; --tx-h3:#5eead4;
  --tx-danger:#fca5a5; --tx-danger2:#fecaca;
  --on-accent:#02120e; --on-accent2:#04141c; --on-danger:#1a0000; --on-warn:#1a1600;
  /* 线条/玻璃必须在每套皮肤里重新声明：自定义属性不会跟着 --c-accent 重新求值，
     不写就会继续用 :root 的霓虹绿，蓝白皮肤下边框会泛绿 */
  --line:rgba(var(--c-accent),.2); --line-soft:rgba(var(--c-accent),.11);
  --glass:rgba(var(--c-accent),.04); --glass-2:rgba(var(--c-accent),.06);
}

/* ---------------------------------------------------------- 3. 白昼（浅色） */
/* 浅底 + 深墨字，白天/投影环境可读性最好 */
html[data-theme="light"]{
  color-scheme:light;
  --c-accent:12,122,84;
  --c-accent2:11,109,158;
  --c-alt:104,70,196;
  --c-danger:200,32,78;
  --c-danger2:178,26,66;
  --c-warn:150,105,0;
  --c-shadow:24,46,38;
  --c-hi:255,255,255;
  --c-ink:11,19,16;
  --c-term:238,243,241; --c-solid:247,250,249; --c-scrim:16,32,26;
  --green:#0c7a54; --cyan:#0b6d9e; --purple:#6846c4;
  --red:#c8204e; --yellow:#966900; --dim:#7c8b84;
  --bg:#f6f9f7; --bg2:#e7efea; --panel:#ffffff; --term:#eef3f1;
  --bg-image:radial-gradient(1200px 680px at 12% -8%,#e2efe8 0%,#f6f9f7 46%,#eef3f1 100%);
  --tx:#1f2a25; --tx2:#42544b; --tx3:#5f7168; --tx4:#8b9a92; --tx-hi:#0b1310;
  --tx-cyan:#0b6d9e; --tx-warn:#8a5f00; --tx-alt:#5b3fb3; --tx-h3:#0c7a54;
  --tx-danger:#b81a45; --tx-danger2:#8f1236;
  --on-accent:#fff; --on-accent2:#fff; --on-danger:#fff; --on-warn:#fff;
  --line:rgba(var(--c-accent),.22); --line-soft:rgba(var(--c-accent),.13);
  --glass:rgba(var(--c-accent),.05); --glass-2:rgba(var(--c-accent),.08);
}
/* 浅色主题下把「发光」收掉，只留下干净的层次与阴影 */
html[data-theme="light"] *{text-shadow:none !important;}
html[data-theme="light"] body::after{display:none;}
html[data-theme="light"] #bg-grid{opacity:.55;}
html[data-theme="light"] header{box-shadow:0 6px 20px rgba(24,46,38,.07);}
html[data-theme="light"] .card,
html[data-theme="light"] .subject-card,
html[data-theme="light"] .rm-card,
html[data-theme="light"] .track-card,
html[data-theme="light"] .mk-card{box-shadow:0 4px 16px rgba(24,46,38,.08);}
html[data-theme="light"] .card:hover{box-shadow:0 10px 26px rgba(24,46,38,.12);}
html[data-theme="light"] .modal-box{box-shadow:0 24px 60px rgba(16,32,26,.28);}
html[data-theme="light"] .hero{box-shadow:0 10px 34px rgba(24,46,38,.12);}
html[data-theme="light"] #progressbar{box-shadow:0 0 8px rgba(12,122,84,.5);}
html[data-theme="light"] ::-webkit-scrollbar-thumb{background:rgba(var(--c-accent),.45);}

/* 浅色下「霓虹皮肤层」要收敛：去掉渐变字、流光描边与呼吸光晕 */
html[data-theme="light"] header h1{
  background:none;-webkit-background-clip:border-box;background-clip:border-box;
  color:var(--tx-hi);-webkit-text-fill-color:var(--tx-hi);filter:none;
}
html[data-theme="light"] header h1:hover{filter:none;}
html[data-theme="light"] header::after{opacity:.3;}
html[data-theme="light"] .card::before{opacity:.2;}
html[data-theme="light"] .subject-card::after{display:none;}
html[data-theme="light"] .hero::before{animation:none;}
html[data-theme="light"] .pep::before{filter:none;}
html[data-theme="light"] .pep::after{display:none;}
html[data-theme="light"] pre.code{box-shadow:0 4px 14px rgba(24,46,38,.08);}
html[data-theme="light"] .gtip{box-shadow:0 12px 30px rgba(24,46,38,.22);}
html[data-theme="light"] .theme-panel{box-shadow:0 20px 44px rgba(24,46,38,.2);}
html[data-theme="light"] .ripple{background:radial-gradient(circle,rgba(12,122,84,.28),rgba(12,122,84,0) 70%);}
/* 后台页：浅色下把重阴影收一收，避免发灰 */
html[data-theme="light"] .bar,
html[data-theme="light"] .login-box{box-shadow:0 6px 22px rgba(24,46,38,.1);}
html[data-theme="light"] .toast{box-shadow:0 10px 26px rgba(24,46,38,.18);}

/* ---------------------------------------------------------- 4. 深海蓝 */
html[data-theme="ocean"]{
  --c-accent:56,189,248;
  --c-accent2:45,212,191;
  --c-alt:129,140,248;
  --c-danger:251,113,133;
  --c-danger2:253,164,175;
  --c-warn:253,216,120;
  --c-term:2,10,16; --c-solid:5,20,29; --c-scrim:1,7,12;
  --green:#38bdf8; --cyan:#2dd4bf; --purple:#818cf8;
  --red:#fb7185; --yellow:#fdd878; --dim:#5c8ba3;
  --bg:#04121c; --bg2:#062434; --panel:#071b28; --term:#020a10;
  --bg-image:radial-gradient(1200px 680px at 14% -10%,#0a2c42 0%,#04121c 48%,#020a11 100%);
  --tx:#cfe9f5; --tx2:#9fc4d6; --tx3:#6e96aa; --tx4:#45697a; --tx-hi:#fff;
  --tx-cyan:#7dd3fc; --tx-warn:#fdd878; --tx-alt:#a5b4fc; --tx-h3:#4ade80;
  --tx-danger:#fda4af; --tx-danger2:#fecdd3;
  --on-accent:#021722; --on-accent2:#02202a; --on-danger:#1a0007; --on-warn:#1a1400;
  --line:rgba(var(--c-accent),.24); --line-soft:rgba(var(--c-accent),.13);
  --glass:rgba(var(--c-accent),.045); --glass-2:rgba(var(--c-accent),.07);
}

/* ---------------------------------------------------------- 5. 暗夜紫 */
html[data-theme="violet"]{
  --c-accent:192,132,252;
  --c-accent2:125,211,252;
  --c-alt:244,114,182;
  --c-danger:255,77,109;
  --c-danger2:255,143,163;
  --c-warn:253,224,71;
  --c-term:8,4,15; --c-solid:21,13,36; --c-scrim:6,3,12;
  --green:#c084fc; --cyan:#7dd3fc; --purple:#f472b6;
  --red:#ff4d6d; --yellow:#fde047; --dim:#8b7bb0;
  --bg:#0d0817; --bg2:#1c1030; --panel:#150e24; --term:#08040f;
  --bg-image:radial-gradient(1200px 680px at 16% -10%,#241443 0%,#0d0817 48%,#080410 100%);
  --tx:#e8ddff; --tx2:#c3b3e6; --tx3:#9686b8; --tx4:#5f5480; --tx-hi:#fff;
  --tx-cyan:#7dd3fc; --tx-warn:#fde047; --tx-alt:#f9a8d4; --tx-h3:#d8b4fe;
  --tx-danger:#ff8fa3; --tx-danger2:#ffc2cf;
  --on-accent:#150726; --on-accent2:#04141c; --on-danger:#1a0007; --on-warn:#1a1600;
  --line:rgba(var(--c-accent),.24); --line-soft:rgba(var(--c-accent),.13);
  --glass:rgba(var(--c-accent),.045); --glass-2:rgba(var(--c-accent),.07);
}

/* ---------------------------------------------------------- 6. 暖阳琥珀 */
html[data-theme="amber"]{
  --c-accent:255,180,84;
  --c-accent2:110,231,208;
  --c-alt:196,181,253;
  --c-danger:255,107,107;
  --c-danger2:255,158,158;
  --c-warn:255,224,102;
  --c-term:13,8,3; --c-solid:28,19,9; --c-scrim:10,6,2;
  --green:#ffb454; --cyan:#6ee7d0; --purple:#c4b5fd;
  --red:#ff6b6b; --yellow:#ffe066; --dim:#a98b62;
  --bg:#140d06; --bg2:#2a1c0c; --panel:#1d1409; --term:#0d0803;
  --bg-image:radial-gradient(1200px 680px at 14% -10%,#38240e 0%,#140d06 48%,#0b0703 100%);
  --tx:#ffe8c9; --tx2:#e0c39b; --tx3:#b3936a; --tx4:#6e5a3c; --tx-hi:#fff;
  --tx-cyan:#6ee7d0; --tx-warn:#ffe066; --tx-alt:#c4b5fd; --tx-h3:#fcd34d;
  --tx-danger:#ff9e9e; --tx-danger2:#ffd0d0;
  --on-accent:#22160a; --on-accent2:#06201c; --on-danger:#1a0000; --on-warn:#1a1600;
  --line:rgba(var(--c-accent),.24); --line-soft:rgba(var(--c-accent),.13);
  --glass:rgba(var(--c-accent),.045); --glass-2:rgba(var(--c-accent),.07);
}

/* ---------------------------------------------------------- 7. 樱粉 */
/* 柔粉 + 青玉，明度高但不刺眼，和霓虹绿形成冷暖对比 */
html[data-theme="rose"]{
  --c-accent:244,114,182;
  --c-accent2:94,234,212;
  --c-alt:167,139,250;
  --c-danger:255,92,122;
  --c-danger2:255,160,180;
  --c-warn:253,224,129;
  --c-term:15,6,12; --c-solid:33,14,26; --c-scrim:12,4,9;
  --green:#f472b6; --cyan:#5eead4; --purple:#a78bfa;
  --red:#ff5c7a; --yellow:#fde081; --dim:#a97b93;
  --bg:#160a12; --bg2:#2b1024; --panel:#1e0d1a; --term:#0f060c;
  --bg-image:radial-gradient(1200px 680px at 14% -10%,#3a1330 0%,#160a12 48%,#0d060a 100%);
  --tx:#ffe4ef; --tx2:#e6bccd; --tx3:#b8909f; --tx4:#6e4e5c; --tx-hi:#fff;
  --tx-cyan:#5eead4; --tx-warn:#fde081; --tx-alt:#c4b5fd; --tx-h3:#f9a8d4;
  --tx-danger:#ffa0b4; --tx-danger2:#ffd0da;
  --on-accent:#26071a; --on-accent2:#04221d; --on-danger:#1a0006; --on-warn:#1a1600;
  --line:rgba(var(--c-accent),.26); --line-soft:rgba(var(--c-accent),.14);
  --glass:rgba(var(--c-accent),.05); --glass-2:rgba(var(--c-accent),.075);
}

/* ---------------------------------------------------------- 8. 赛博粉紫 */
/* 经典赛博朋克配色：品红 + 电紫 + 墨蓝底 */
html[data-theme="synth"]{
  --c-accent:255,79,216;
  --c-accent2:0,229,255;
  --c-alt:139,92,246;
  --c-danger:255,64,96;
  --c-danger2:255,138,160;
  --c-warn:255,214,102;
  --c-term:6,2,13; --c-solid:22,8,40; --c-scrim:4,1,9;
  --green:#ff4fd8; --cyan:#00e5ff; --purple:#8b5cf6;
  --red:#ff4060; --yellow:#ffd666; --dim:#8a6fa8;
  --bg:#0a0417; --bg2:#1b0a34; --panel:#140829; --term:#06020d;
  --bg-image:radial-gradient(1200px 680px at 12% -8%,#2c1055 0%,#0a0417 48%,#060210 100%);
  --tx:#f0e4ff; --tx2:#c8b6e8; --tx3:#9c86bd; --tx4:#5f4a80; --tx-hi:#fff;
  --tx-cyan:#00e5ff; --tx-warn:#ffd666; --tx-alt:#a78bfa; --tx-h3:#ff7ae0;
  --tx-danger:#ff8aa0; --tx-danger2:#ffc2cc;
  --on-accent:#20061a; --on-accent2:#001318; --on-danger:#1a0004; --on-warn:#1a1500;
  --line:rgba(var(--c-accent),.26); --line-soft:rgba(var(--c-accent),.14);
  --glass:rgba(var(--c-accent),.05); --glass-2:rgba(var(--c-accent),.075);
}

/* ---------------------------------------------------------- 9. 代码雨 */
/* 纯黑底 + 经典终端绿，配合 matrix.js 的下落字符雨 */
html[data-theme="matrix"]{
  --c-accent:0,255,70;
  --c-accent2:120,255,130;
  --c-alt:0,210,180;
  --c-danger:255,60,60;
  --c-danger2:255,130,130;
  --c-warn:200,255,120;
  --c-shadow:0,0,0;
  --c-hi:255,255,255;
  --c-term:0,0,0; --c-solid:4,10,4; --c-scrim:0,0,0;
  --green:#00ff46; --cyan:#78ff82; --purple:#00d2b4;
  --red:#ff3c3c; --yellow:#c8ff78; --dim:#3d7a45;
  --bg:#000; --bg2:#04140a; --panel:#020a04; --term:#000;
  --bg-image:radial-gradient(1200px 680px at 50% -10%,#04180a 0%,#000 60%,#000 100%);
  --tx:#c8ffce; --tx2:#9be0a5; --tx3:#62a06d; --tx4:#2f5a37; --tx-hi:#eeffee;
  --tx-cyan:#78ff82; --tx-warn:#d4ff8a; --tx-alt:#5ff0c8; --tx-h3:#00ff46;
  --tx-danger:#ff8a8a; --tx-danger2:#ffc9c9;
  --on-accent:#001a05; --on-accent2:#021a08; --on-danger:#1a0000; --on-warn:#121a00;
  --line:rgba(var(--c-accent),.22); --line-soft:rgba(var(--c-accent),.1);
  --glass:rgba(var(--c-accent),.035); --glass-2:rgba(var(--c-accent),.06);
}

/* ---------------------------------------------------------- 10. 黑客 */
/* 比代码雨更冷：青绿 + 微光底，界面用方角终端感，字符雨更稀更大 */
html[data-theme="hacker"]{
  --c-accent:0,230,200;
  --c-accent2:0,255,140;
  --c-alt:120,200,255;
  --c-danger:255,70,70;
  --c-danger2:255,140,140;
  --c-warn:255,220,90;
  --c-shadow:0,0,0;
  --c-hi:255,255,255;
  --c-term:1,7,6; --c-solid:5,17,15; --c-scrim:0,4,3;
  --green:#00e6c8; --cyan:#00ff8c; --purple:#78c8ff;
  --red:#ff4646; --yellow:#ffdc5a; --dim:#3f7c70;
  --bg:#010806; --bg2:#03201a; --panel:#04140f; --term:#010706;
  --bg-image:radial-gradient(1200px 680px at 20% -10%,#04241c 0%,#010806 52%,#000 100%);
  --tx:#c6fff4; --tx2:#93e0d0; --tx3:#5d998c; --tx4:#2e564d; --tx-hi:#effffc;
  --tx-cyan:#00ff8c; --tx-warn:#ffdc5a; --tx-alt:#8fd6ff; --tx-h3:#00e6c8;
  --tx-danger:#ff8c8c; --tx-danger2:#ffc8c8;
  --on-accent:#00140f; --on-accent2:#001a0e; --on-danger:#1a0000; --on-warn:#1a1600;
  --line:rgba(var(--c-accent),.26); --line-soft:rgba(var(--c-accent),.12);
  --glass:rgba(var(--c-accent),.04); --glass-2:rgba(var(--c-accent),.07);
}
/* 黑客皮肤：去掉所有圆角，换回 ASCII 终端的硬边观感 */
html[data-theme="hacker"] *{border-radius:2px !important;}
html[data-theme="hacker"] .theme-panel,
html[data-theme="hacker"] .theme-panel .tp-item,
html[data-theme="hacker"] .theme-panel .tp-bg{border-radius:2px !important;}

/* ---------------------------------------------------------- 11. 红客 */
/* 中国红 + 炭黑，红色字符雨，行动性最强的配色 */
html[data-theme="redhat"]{
  --c-accent:255,45,60;
  --c-accent2:255,120,90;
  --c-alt:255,180,80;
  --c-danger:255,60,60;
  --c-danger2:255,150,150;
  --c-warn:255,205,90;
  --c-shadow:0,0,0;
  --c-hi:255,255,255;
  --c-term:9,2,3; --c-solid:26,6,8; --c-scrim:5,1,2;
  --green:#ff2d3c; --cyan:#ff785a; --purple:#ffb450;
  --red:#ff3c3c; --yellow:#ffcd5a; --dim:#8f4048;
  --bg:#0a0203; --bg2:#240508; --panel:#180406; --term:#090203;
  --bg-image:radial-gradient(1200px 680px at 50% -10%,#3a060c 0%,#0a0203 52%,#050102 100%);
  --tx:#ffd6d8; --tx2:#e8a3a8; --tx3:#b06a70; --tx4:#6a353a; --tx-hi:#fff;
  --tx-cyan:#ff785a; --tx-warn:#ffcd5a; --tx-alt:#ffb450; --tx-h3:#ff2d3c;
  --tx-danger:#ff9a9a; --tx-danger2:#ffd0d0;
  --on-accent:#1a0003; --on-accent2:#1a0800; --on-danger:#1a0000; --on-warn:#1a1400;
  --line:rgba(var(--c-accent),.28); --line-soft:rgba(var(--c-accent),.14);
  --glass:rgba(var(--c-accent),.05); --glass-2:rgba(var(--c-accent),.08);
}

/* ==========================================================================
   代码雨画布（matrix.js 注入）。铺在内容之下、壁纸之上，不参与布局
   ========================================================================== */
#code-rain{
  position:fixed;inset:0;pointer-events:none;z-index:-1;
  display:block;
  mask-image:linear-gradient(180deg,#000 0%,rgba(0,0,0,.55) 62%,rgba(0,0,0,.18) 100%);
  -webkit-mask-image:linear-gradient(180deg,#000 0%,rgba(0,0,0,.55) 62%,rgba(0,0,0,.18) 100%);
}
/* 代码雨皮肤下把极光层让位，否则绿色光晕会把字符雨冲淡 */
html[data-theme="matrix"] body::before,
html[data-theme="hacker"] body::before,
html[data-theme="redhat"] body::before{filter:none;animation:none;}
html[data-theme="matrix"] #bg-grid,
html[data-theme="hacker"] #bg-grid,
html[data-theme="redhat"] #bg-grid{opacity:.35;}
html[data-theme="matrix"] body::after,
html[data-theme="hacker"] body::after,
html[data-theme="redhat"] body::after{opacity:.55;}

/* ==========================================================================
   换肤面板（由 theme.js 注入，所有页面通用）
   ========================================================================== */
.theme-btn{gap:7px;}
.theme-btn .tb-dot{
  display:inline-block;width:10px;height:10px;border-radius:50%;
  background:linear-gradient(135deg,var(--green),var(--cyan));
  box-shadow:0 0 8px rgba(var(--c-accent),.7);flex:0 0 auto;
}
.theme-panel{
  position:fixed;z-index:400;width:268px;padding:12px;
  max-height:calc(100vh - 20px);overflow-y:auto;overscroll-behavior:contain;
  border:1px solid var(--line);border-radius:12px;
  background:var(--panel);
  box-shadow:0 20px 50px rgba(var(--c-shadow),.55),0 0 0 1px rgba(var(--c-accent),.08);
  backdrop-filter:blur(14px) saturate(1.3);
  -webkit-backdrop-filter:blur(14px) saturate(1.3);
  animation:tpIn .18s var(--ease-out,cubic-bezier(.16,1,.3,1));
}
.theme-panel[hidden]{display:none;}
@keyframes tpIn{from{opacity:0;transform:translateY(-6px);}to{opacity:1;transform:none;}}
.theme-panel .tp-head{
  display:flex;align-items:baseline;justify-content:space-between;
  font-size:12px;letter-spacing:2px;color:var(--tx-cyan);
  padding:0 4px 9px;margin-bottom:8px;border-bottom:1px solid var(--line-soft);
}
.theme-panel .tp-head span{font-size:11px;letter-spacing:0;color:var(--tx3);}
.theme-panel .tp-grid{display:grid;grid-template-columns:1fr 1fr;gap:6px;}
/* 光标样式：一行一个，左侧是示意图 */
.theme-panel .tp-grid.tp-cursors{grid-template-columns:1fr;}
/* 壁纸：三个一行的缩略图，名字压在底部 */
.theme-panel .tp-grid.tp-bgs{grid-template-columns:repeat(3,1fr);gap:6px;}
.theme-panel .tp-bg{
  position:relative;display:block;height:44px;padding:0;overflow:hidden;
  background-color:var(--term);background-size:cover;background-position:center;
  border:1px solid var(--line-soft);
}
.theme-panel .tp-bg:hover{transform:translateY(-1px);}
.theme-panel .tp-bg.on{border-color:var(--green);box-shadow:0 0 0 1px var(--green),0 0 12px rgba(var(--c-accent),.35);}
.theme-panel .tp-bg-name{
  position:absolute;left:0;right:0;bottom:0;padding:2px 4px;
  font-size:10px;line-height:1.4;color:#fff;text-align:center;
  background:linear-gradient(0deg,rgba(0,0,0,.78),rgba(0,0,0,0));
  text-shadow:0 1px 2px rgba(0,0,0,.9);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;
}
.theme-panel .tp-bg .tp-check{position:absolute;top:2px;right:4px;color:#fff;text-shadow:0 0 4px #000,0 1px 2px #000;}
/* 「无壁纸」那一格用斜线表示 */
.theme-panel .tp-bg[data-bg="none"]{
  background-image:repeating-linear-gradient(45deg,var(--line-soft) 0 1px,transparent 1px 7px);
}
.theme-panel .tp-sec{
  margin:11px 4px 7px;font-size:11px;letter-spacing:2px;color:var(--tx3);
  display:flex;align-items:center;gap:8px;
}
.theme-panel .tp-sec::after{content:"";flex:1;height:1px;background:var(--line-soft);}
.theme-panel .tp-item{
  display:flex;align-items:center;gap:8px;padding:8px 9px;text-align:left;
  border:1px solid var(--line-soft);border-radius:8px;background:transparent;
  color:var(--tx2);font-family:inherit;font-size:12.5px;letter-spacing:.5px;
  transition:border-color .15s var(--ease,cubic-bezier(.22,.8,.28,1)),
             background .15s var(--ease,cubic-bezier(.22,.8,.28,1)),
             transform .15s var(--ease,cubic-bezier(.22,.8,.28,1));
}
.theme-panel .tp-item:hover{background:var(--glass-2);transform:translateY(-1px);}
.theme-panel .tp-item.on{border-color:var(--green);color:var(--tx-hi);background:var(--glass-2);}
.theme-panel .tp-sw{display:flex;gap:2px;flex:0 0 auto;}
.theme-panel .tp-sw i{width:9px;height:9px;border-radius:2px;display:block;}
/* 光标示意：用当前强调色画出对应形状，换肤即变色 */
.tp-cur{position:relative;width:18px;height:18px;flex:0 0 auto;margin-left:2px;}
.tp-cur::before,.tp-cur::after{content:"";position:absolute;left:50%;top:50%;transform:translate(-50%,-50%);}
.tp-cur[data-cur="arrow"]::before{width:0;height:0;left:8px;top:8px;transform:none;
  border-left:7px solid var(--green);border-top:5px solid transparent;border-bottom:5px solid transparent;rotate:-32deg;}
.tp-cur[data-cur="dot"]::before{width:10px;height:10px;border-radius:50%;background:var(--green);box-shadow:0 0 8px rgba(var(--c-accent),.8);}
.tp-cur[data-cur="ring"]::before{width:12px;height:12px;border-radius:50%;border:2px solid var(--green);}
.tp-cur[data-cur="ring"]::after{width:3px;height:3px;border-radius:50%;background:var(--green);}
.tp-cur[data-cur="cross"]::before{width:14px;height:1.5px;background:var(--green);}
.tp-cur[data-cur="cross"]::after{width:1.5px;height:14px;background:var(--green);}
.tp-cur[data-cur="text"]::before{content:"I";font:600 15px/1 "JetBrains Mono",monospace;color:var(--green);}
.tp-cur[data-cur="glow"]::before{width:9px;height:9px;border-radius:50%;background:rgba(var(--c-accent2),.9);
  box-shadow:0 0 10px rgba(var(--c-accent2),.9),0 0 20px rgba(var(--c-accent),.5);}
/* 拖尾 / 星火 / 系统默认：选项里原本没有示意图，补上才不至于空一格 */
.tp-cur[data-cur="trail"]::before{width:9px;height:9px;border-radius:50%;background:var(--green);box-shadow:0 0 8px rgba(var(--c-accent),.8);}
.tp-cur[data-cur="trail"]::after{width:9px;height:9px;border-radius:50%;background:rgba(var(--c-accent),.3);transform:translate(calc(-50% - 5px),calc(-50% + 5px));}
.tp-cur[data-cur="spark"]::before{width:4px;height:4px;border-radius:50%;background:var(--green);}
.tp-cur[data-cur="spark"]::after{
  width:14px;height:14px;border-radius:50%;
  background:radial-gradient(circle,rgba(var(--c-accent),.7) 0 18%,transparent 20% 38%,rgba(var(--c-accent2),.6) 40% 52%,transparent 54% 100%);
}
/* 新增皮肤：脉冲 / 环绕 / 彗星 / 涟漪 / 无光 / 方块 */
.tp-cur[data-cur="pulse"]::before{width:8px;height:8px;border-radius:50%;background:var(--green);box-shadow:0 0 8px rgba(var(--c-accent),.8);}
.tp-cur[data-cur="pulse"]::after{width:15px;height:15px;border-radius:50%;border:1.5px solid rgba(var(--c-accent2),.75);}
.tp-cur[data-cur="orbit"]::before{width:8px;height:8px;border-radius:50%;background:var(--green);box-shadow:0 0 8px rgba(var(--c-accent),.8);}
.tp-cur[data-cur="orbit"]::after{width:4px;height:4px;border-radius:50%;background:var(--cyan);
  transform:translate(calc(-50% + 6px),calc(-50% - 6px));}
.tp-cur[data-cur="comet"]::before{width:6px;height:6px;border-radius:50%;background:#fff;box-shadow:0 0 6px rgba(var(--c-accent),.9);}
.tp-cur[data-cur="comet"]::after{width:11px;height:11px;border-radius:50%;background:rgba(var(--c-accent),.35);
  transform:translate(calc(-50% - 6px),calc(-50% + 5px));}
.tp-cur[data-cur="ripple"]::before{width:8px;height:8px;border-radius:50%;background:var(--green);box-shadow:0 0 8px rgba(var(--c-accent),.8);}
.tp-cur[data-cur="ripple"]::after{width:17px;height:17px;border-radius:50%;border:1.5px solid rgba(var(--c-accent2),.5);}
.tp-cur[data-cur="plain"]::before{width:9px;height:9px;border-radius:50%;background:#fff;box-shadow:0 0 0 1.5px rgba(0,0,0,.6);}
.tp-cur[data-cur="spotlight"]::before{width:9px;height:9px;border-radius:50%;background:#fff;box-shadow:0 0 0 1.5px rgba(0,0,0,.6);}
.tp-cur[data-cur="spotlight"]::after{width:28px;height:28px;border-radius:50%;border:1px solid rgba(var(--c-accent),.45);box-shadow:0 0 0 6px rgba(var(--c-accent),.12);}
.tp-cur[data-cur="square"]::before{width:9px;height:9px;border-radius:2px;background:var(--green);}
.tp-cur[data-cur="system"]::before{
  width:0;height:0;left:8px;top:7px;transform:none;
  border-left:6px solid var(--tx3);border-top:4px solid transparent;border-bottom:4px solid transparent;rotate:-32deg;
}
.tp-cur[data-cur="none"]::before{width:16px;height:16px;border-radius:50%;border:1px dashed var(--line);}
.theme-panel .tp-name{flex:1;white-space:nowrap;}
.theme-panel .tp-check{color:var(--green);opacity:0;font-size:12px;}
.theme-panel .tp-item.on .tp-check{opacity:1;}
.theme-panel .tp-foot{
  margin-top:9px;padding-top:8px;border-top:1px solid var(--line-soft);
  font-size:11px;color:var(--tx3);letter-spacing:.3px;
}
@media (max-width:640px){
  .theme-panel{width:min(92vw,268px);}
}

/* ==========================================================================
   鼠标光标样式（由 theme.js 写 html[data-cursor]）+ cursor.js 的粒子层
   只改视觉：点击/输入/选择/拖动都不受影响
   ========================================================================== */
/* 隐藏系统指针（仅在桌面端生效，见文件末尾媒体查询） */
html[data-cursor="arrow"] body,
html[data-cursor="arrow"] body *,
html[data-cursor="dot"] body,
html[data-cursor="dot"] body *,
html[data-cursor="ring"] body,
html[data-cursor="ring"] body *,
html[data-cursor="cross"] body,
html[data-cursor="cross"] body *,
html[data-cursor="glow"] body,
html[data-cursor="glow"] body *,
html[data-cursor="pulse"] body,
html[data-cursor="pulse"] body *,
html[data-cursor="orbit"] body,
html[data-cursor="orbit"] body *,
html[data-cursor="trail"] body,
html[data-cursor="trail"] body *,
html[data-cursor="comet"] body,
html[data-cursor="comet"] body *,
html[data-cursor="spark"] body,
html[data-cursor="spark"] body *,
html[data-cursor="ripple"] body,
html[data-cursor="ripple"] body *,
html[data-cursor="plain"] body,
html[data-cursor="plain"] body *,
html[data-cursor="spotlight"] body,
html[data-cursor="spotlight"] body *,
html[data-cursor="square"] body,
html[data-cursor="square"] body *,
html[data-cursor="text"] body,
html[data-cursor="text"] body *,
html[data-cursor="none"] body,
html[data-cursor="none"] body *{cursor:none !important;}
/* 触屏设备回退成默认指针，不然手指点哪都没反馈
   注意：这里必须保留 !important，否则压不住 .CodeMirror 自身的 cursor 规则 */
@media (hover:none),(pointer:coarse){
  html[data-cursor] body,
  html[data-cursor] body *{cursor:auto !important;}
}
/* 系统开着「减少动效」时同理：只记不回退的话，指针会停在 none 上消失 */
@media (prefers-reduced-motion:reduce){
  html[data-cursor] body,
  html[data-cursor] body *{cursor:auto !important;}
}
/* 粒子/拖尾画布：永远不吃点击 */
#cursor-fx{
  position:fixed;inset:0;pointer-events:none;z-index:9000;
  opacity:0;transition:opacity .3s;
}
html[data-cursor="trail"] #cursor-fx,
html[data-cursor="comet"] #cursor-fx,
html[data-cursor="ripple"] #cursor-fx,
html[data-cursor="spark"] #cursor-fx{opacity:1;}
/* 光标主体：cursor.js 创建的 #cursor-dot，跟随鼠标，不吃点击 */
#cursor-dot{
  position:fixed;left:0;top:0;z-index:9001;pointer-events:none;
  width:20px;height:20px;margin:-10px 0 0 -10px;opacity:0;
  transition:opacity .2s;
}
html[data-cursor="arrow"] #cursor-dot,
html[data-cursor="dot"] #cursor-dot,
html[data-cursor="ring"] #cursor-dot,
html[data-cursor="cross"] #cursor-dot,
html[data-cursor="glow"] #cursor-dot,
html[data-cursor="pulse"] #cursor-dot,
html[data-cursor="orbit"] #cursor-dot,
html[data-cursor="trail"] #cursor-dot,
html[data-cursor="comet"] #cursor-dot,
html[data-cursor="ripple"] #cursor-dot,
html[data-cursor="plain"] #cursor-dot,
html[data-cursor="spotlight"] #cursor-dot,
html[data-cursor="square"] #cursor-dot,
html[data-cursor="spark"] #cursor-dot,
html[data-cursor="none"] #cursor-dot{opacity:1;}
#cursor-dot::before,#cursor-dot::after{content:"";position:absolute;}
/* 圆点 / 圆环 / 十字 / 光晕：常态与「可点」态（html.cur-hot） */
#cursor-dot[data-k="dot"]::before{
  inset:5px;border-radius:50%;background:var(--green);
  box-shadow:0 0 10px rgba(var(--c-accent),.9);
}
html.cur-hot #cursor-dot[data-k="dot"]::before{inset:2px;background:var(--cyan);box-shadow:0 0 14px rgba(var(--c-accent2),.95);}
#cursor-dot[data-k="ring"]::before{
  inset:1px;border-radius:50%;border:1.5px solid rgba(var(--c-accent),.9);
  transition:inset .16s var(--ease,cubic-bezier(.22,.8,.28,1)),border-color .16s;
}
#cursor-dot[data-k="ring"]::after{inset:8px;border-radius:50%;background:var(--green);}
html.cur-hot #cursor-dot[data-k="ring"]::before{inset:-3px;border-color:var(--cyan);}
#cursor-dot[data-k="cross"]::before{
  left:0;right:0;top:50%;height:1px;background:rgba(var(--c-accent),.95);
  box-shadow:0 0 8px rgba(var(--c-accent),.8);
}
#cursor-dot[data-k="cross"]::after{
  top:0;bottom:0;left:50%;width:1px;background:rgba(var(--c-accent),.95);
  box-shadow:0 0 8px rgba(var(--c-accent),.8);
}
html.cur-hot #cursor-dot[data-k="cross"]{transform-origin:center;}
html.cur-hot #cursor-dot[data-k="cross"]::before,
html.cur-hot #cursor-dot[data-k="cross"]::after{background:var(--cyan);}
#cursor-dot[data-k="glow"]::before{
  inset:-2px;border-radius:50%;
  background:radial-gradient(circle,rgba(var(--c-accent2),.95),rgba(var(--c-accent),.35) 45%,transparent 70%);
  filter:blur(1px);
}
html.cur-hot #cursor-dot[data-k="glow"]::before{
  background:radial-gradient(circle,#fff,rgba(var(--c-accent2),.9) 40%,transparent 72%);
}
/* 脉冲波纹：中心实点 + 一圈不断向外扩散、同时变淡的环 */
#cursor-dot[data-k="pulse"]::before{
  inset:6px;border-radius:50%;background:var(--green);
  box-shadow:0 0 10px rgba(var(--c-accent),.9);
}
#cursor-dot[data-k="pulse"]::after{
  inset:0;border-radius:50%;border:1.5px solid rgba(var(--c-accent2),.9);
  animation:curPulse 1.6s ease-out infinite;
}
html.cur-hot #cursor-dot[data-k="pulse"]::before{inset:4px;background:var(--cyan);}
html.cur-hot #cursor-dot[data-k="pulse"]::after{border-color:rgba(var(--c-accent),.95);animation-duration:.9s;}
@keyframes curPulse{
  0%{transform:scale(.35);opacity:.95;}
  70%{opacity:.28;}
  100%{transform:scale(1.4);opacity:0;}
}
/* 环绕卫星：中心实点 + 一颗绕着它转的小卫星 */
#cursor-dot[data-k="orbit"]::before{
  inset:7px;border-radius:50%;background:var(--green);
  box-shadow:0 0 10px rgba(var(--c-accent),.9);
}
#cursor-dot[data-k="orbit"]::after{
  left:50%;top:50%;width:4px;height:4px;margin:-2px 0 0 -2px;border-radius:50%;
  background:var(--cyan);box-shadow:0 0 8px rgba(var(--c-accent2),.95);
  animation:curOrbit 1.9s linear infinite;
}
html.cur-hot #cursor-dot[data-k="orbit"]::before{inset:5px;background:var(--cyan);}
html.cur-hot #cursor-dot[data-k="orbit"]::after{animation-duration:1.1s;}
@keyframes curOrbit{
  0%   {transform:translate(9px,0);}
  12.5%{transform:translate(6.4px,6.4px);}
  25%  {transform:translate(0,9px);}
  37.5%{transform:translate(-6.4px,6.4px);}
  50%  {transform:translate(-9px,0);}
  62.5%{transform:translate(-6.4px,-6.4px);}
  75%  {transform:translate(0,-9px);}
  87.5%{transform:translate(6.4px,-6.4px);}
  100% {transform:translate(9px,0);}
}
/* 彗星长尾 / 点击涟漪：本体是小亮点，戏份交给 canvas 的粒子与波纹 */
#cursor-dot[data-k="comet"]::before{
  inset:6px;border-radius:50%;background:#fff;
  box-shadow:0 0 12px rgba(var(--c-accent),.95),0 0 22px rgba(var(--c-accent2),.5);
}
html.cur-hot #cursor-dot[data-k="comet"]::before{inset:4px;background:var(--cyan);}
#cursor-dot[data-k="ripple"]::before{
  inset:7px;border-radius:50%;background:var(--green);
  box-shadow:0 0 10px rgba(var(--c-accent),.9);
}
html.cur-hot #cursor-dot[data-k="ripple"]::before{inset:5px;background:var(--cyan);}
/* 无光纯点：一个干净的实心小点，只有一圈深色描边保证可见，没有任何光晕 */
#cursor-dot[data-k="plain"]::before{
  inset:7px;border-radius:50%;background:#fff;
  box-shadow:0 0 0 1.5px rgba(var(--c-shadow),.75);
}
html.cur-hot #cursor-dot[data-k="plain"]::before{inset:5px;background:#fff;}
/* 聚光灯：光标本体是一个干净的小圆点（无光晕），周围由全屏遮罩营造手电筒效果 */
#cursor-dot[data-k="spotlight"]::before{
  inset:7px;border-radius:50%;background:#fff;
  box-shadow:0 0 0 1.5px rgba(var(--c-shadow),.7);
}
html.cur-hot #cursor-dot[data-k="spotlight"]::before{inset:5px;background:var(--cyan);}
/* 聚光灯遮罩：盖在内容之上，中间开一个跟随鼠标的透明圆，其余区域压暗 */
html[data-cursor="spotlight"]::after{
  content:"";
  position:fixed;inset:0;z-index:8999;pointer-events:none;
  background:radial-gradient(circle at var(--mx,50%) var(--my,50%),
    transparent 0,
    transparent 70px,
    rgba(0,0,0,.18) 110px,
    rgba(0,0,0,.55) 180px);
  transition:background .06s linear;
}
/* 实心方块：棱角分明，同样不发光 */
#cursor-dot[data-k="square"]::before{
  inset:6px;border-radius:2px;background:var(--green);
}
html.cur-hot #cursor-dot[data-k="square"]::before{inset:4px;background:var(--cyan);}
/* 拖尾 / 星火：指针本体只留一个小光点，戏份交给背后的粒子 */
#cursor-dot[data-k="trail"]::before,
#cursor-dot[data-k="spark"]::before{
  inset:7px;border-radius:50%;background:var(--green);
  box-shadow:0 0 10px rgba(var(--c-accent),.9);
}
html.cur-hot #cursor-dot[data-k="trail"]::before,
html.cur-hot #cursor-dot[data-k="spark"]::before{inset:5px;background:var(--cyan);}
/* 极简隐藏：不用箭头，只留一个半透明小点，既不挡视线也不至于找不到鼠标 */
#cursor-dot[data-k="none"]::before{
  inset:8px;border-radius:50%;background:rgba(var(--c-accent),.45);
  transition:background .2s,inset .2s;
}
html.cur-hot #cursor-dot[data-k="none"]::before{inset:6px;background:rgba(var(--c-accent2),.95);}
/* 箭头：实心小三角，带一圈深色描边保证在任何底色上都看得见 */
#cursor-dot[data-k="arrow"]::before{
  left:0;top:0;width:0;height:0;
  border-left:13px solid var(--green);border-top:9px solid transparent;border-bottom:9px solid transparent;
  rotate:-28deg;transform-origin:4px 9px;
  filter:drop-shadow(0 0 6px rgba(var(--c-accent),.9)) drop-shadow(0 0 1px rgba(var(--c-shadow),.9));
}
html.cur-hot #cursor-dot[data-k="arrow"]::before{border-left-color:var(--cyan);}
/* I 形文本：本体就是一竖，悬停可点元素时换成青色 */
#cursor-dot[data-k="text"]::before{
  left:50%;top:50%;width:1.5px;height:19px;
  transform:translate(-50%,-50%);background:var(--green);
  box-shadow:0 0 8px rgba(var(--c-accent),.8);
}
html.cur-hot #cursor-dot[data-k="text"]::before{background:var(--cyan);width:3px;box-shadow:0 0 12px rgba(var(--c-accent2),.95);}
/* 禁止符号。悬停禁用元素时 :after 的默认空内容换成斜杠 */
#cursor-dot.cur-off::after{
  left:50%;top:50%;width:22px;height:1.5px;
  transform:translate(-50%,-50%) rotate(-45deg);
  background:rgba(var(--c-danger),.95);
  box-shadow:0 0 8px rgba(var(--c-danger),.7);
}
#cursor-dot.cur-off::before{opacity:.35;}
/* 帮助态：带提示的元素（data-tip）在指针右上角挂一个问号。
   禁用元素也能挂问号，但禁止符号必须赢，所以那条写在下面。 */
#cursor-dot.cur-help::after{
  content:"?";left:13px;top:-3px;
  font:700 10px/1 "JetBrains Mono",monospace;
  color:var(--yellow);text-shadow:0 0 6px rgba(var(--c-warn),.8);
}
#cursor-dot.cur-off.cur-help::after{content:"";}
/* 悬停在输入框上时，光标变回「I」形，方便定位插入点 */
html[data-cursor] #cursor-dot[data-k="arrow"].cur-text::before,
html[data-cursor] #cursor-dot[data-k="dot"].cur-text::before,
html[data-cursor] #cursor-dot[data-k="ring"].cur-text::before,
html[data-cursor] #cursor-dot[data-k="cross"].cur-text::before,
html[data-cursor] #cursor-dot[data-k="glow"].cur-text::before,
html[data-cursor] #cursor-dot[data-k="pulse"].cur-text::before,
html[data-cursor] #cursor-dot[data-k="orbit"].cur-text::before,
html[data-cursor] #cursor-dot[data-k="comet"].cur-text::before,
html[data-cursor] #cursor-dot[data-k="ripple"].cur-text::before,
html[data-cursor] #cursor-dot[data-k="plain"].cur-text::before,
html[data-cursor] #cursor-dot[data-k="spotlight"].cur-text::before,
html[data-cursor] #cursor-dot[data-k="square"].cur-text::before{
  content:"|";inset:auto;width:auto;height:auto;left:50%;top:50%;
  transform:translate(-50%,-50%);background:none;border:0;filter:none;box-shadow:none;
  font:600 17px/1 "JetBrains Mono",monospace;color:var(--green);
}
/* 悬停在输入框上时，脉冲环 / 环绕卫星这些小装饰收起来，别干扰定位 */
html[data-cursor] #cursor-dot[data-k="pulse"].cur-text::after,
html[data-cursor] #cursor-dot[data-k="orbit"].cur-text::after{content:none;}

/* ==========================================================================
   背景壁纸（由 <html data-bg="xxx"> 控制）
   用固定定位的一层铺满视口，不参与布局；所有页面都能复用。
   压暗用「底色渐变 + 壁纸」叠加，保证任何皮肤下文字都够清晰。
   ========================================================================== */
/* 选择器写成 html[data-bg] + body::before 是为了压过各页自己的 body::before
   （它们同权重，且 theme.css 先加载，不加 html 前缀会被后面的页面规则覆盖）；
   content/position 也写在这里，欢迎页自己没有 body::before，缺了这两条就画不出来 */
html[data-bg] body::before{
  content:"";position:fixed;inset:0;pointer-events:none;z-index:-2;
  filter:none;animation:none;background-size:cover;background-position:center;
}
html[data-bg="milkyway"]  body::before{background-image:linear-gradient(180deg,rgba(var(--c-term),.62),rgba(var(--c-term),.82)),url("/static/bg/milkyway.jpg");}
html[data-bg="starwood"]  body::before{background-image:linear-gradient(180deg,rgba(var(--c-term),.58),rgba(var(--c-term),.8)),url("/static/bg/starwood.jpg");}
html[data-bg="snowridge"] body::before{background-image:linear-gradient(180deg,rgba(var(--c-term),.66),rgba(var(--c-term),.84)),url("/static/bg/snowridge.jpg");}
html[data-bg="cloudsky"]  body::before{background-image:linear-gradient(180deg,rgba(var(--c-term),.58),rgba(var(--c-term),.8)),url("/static/bg/cloudsky.jpg");}
html[data-bg="wireframe"] body::before{background-image:linear-gradient(180deg,rgba(var(--c-term),.66),rgba(var(--c-term),.84)),url("/static/bg/wireframe.jpg");}
html[data-bg="deepblue"]  body::before{background-image:linear-gradient(180deg,rgba(var(--c-term),.6),rgba(var(--c-term),.82)),url("/static/bg/deepblue.jpg");}
html[data-bg="rainwindow"] body::before{background-image:linear-gradient(180deg,rgba(var(--c-term),.6),rgba(var(--c-term),.82)),url("/static/bg/rainwindow.jpg");}
html[data-bg="rivernight"] body::before{background-image:linear-gradient(180deg,rgba(var(--c-term),.55),rgba(var(--c-term),.78)),url("/static/bg/rivernight.jpg");}

/* 白昼皮肤 + 浅色壁纸：正文改成深色，否则白字压在亮图上基本看不见 */
html[data-theme="light"][data-bg] body{color:var(--tx);}
html[data-theme="light"][data-bg] .lesson-item,
html[data-theme="light"][data-bg] .blk-p{color:var(--tx2);}

/* 壁纸打开时，把原来的极光光斑和细网格收掉，避免两层背景打架 */
html[data-bg] #bg-grid{opacity:.35;}

@media (prefers-reduced-motion:reduce){
  /* 壁纸是静态图，本来就没有动效，这里只兜底关掉网格漂移 */
  html[data-bg] #bg-grid{animation:none;}
}
