/* ================================================================
 * Haven Design Tokens — canonical source of truth
 * Raw visual values live here; all component/page CSS uses var(...).
 * ================================================================ */
:root {
/* ==== V5.1.0 字号体系（唯一真源）· BEGIN ==== */
  /* ==== V5.1.0 · 字号体系（唯一真源） ==== 
   * 9 档定值语义字号（全整数、无半像素）+ 3 档流体展示级 + 3 档行高。
   * ⚠️ 唯一真源：页面 / CSS 一律用 var(--fs-*)，不要再写裸 px 字号，也不要用 --font-size-*。
   * 下面 --font-size-* 是**迁移期兼容别名**（旧名 → 新档），只为兜底漏改的旧引用，
   * 引用迁移验收通过后可整块删除 —— 连同 BEGIN/END 标记一起删。 */
  --fs-2xs: 12px;
  --fs-xs: 13px;
  --fs-sm: 14px;
  /* ★ V5.1.10 曾误把本档下调到 14px（当时理解成「全站正文变小」），V5.1.11 已**回滚**。
     用户真实需求是「notes 中间栏里 16px 的文本改 14px」，属**页面级**调整 ⇒
     已改为在 notes.html 里按精确选择器处理，**这个全局令牌不要动**。
     ★ V5.2.0（修复 CF-7）：原先本文件在 :root 内**重复了两份**令牌表（后者生效），
        容易「改一处的没生效」；现已删除重复块，**本处为唯一真源**。 */
  --fs-base: 16px;
  /* ★ 表单输入下限（iOS 防缩放）：控件字号 <16px 时 iOS 聚焦会**强制放大整页**，
     所以输入框 / select / textarea 一律用这一档，**不要**随 --fs-base 走。
     （V5.1.10 起全站表单控件切到本令牌；base 已回滚到 16px，本令牌保留 —— 值与原 base 相同，视觉零变化，并提供「以后再调 base 也不会连累输入框」的护栏。） */
  --fs-input: 16px;
  --fs-md: 18px;
  --fs-lg: 20px;
  --fs-xl: 24px;
  --fs-2xl: 30px;
  --fs-3xl: 38px;
  --fs-display-sm: clamp(24px, 3vw, 34px);   /* 次级展示标题 */
  --fs-display: clamp(28px, 4vw, 44px);   /* 页面主标题（响应式） */
  --fs-display-lg: clamp(30px, 4.6vw, 54px);   /* 落地页 hero（响应式） */
  --lh-tight: 1.28;   /* 标题 */
  --lh-ui: 1.5;       /* 控件 / 表格 / 导航 */
  --lh-body: 1.75;    /* 中文长文正文 */

  /* —— 兼容别名（迁移期）：旧定值名 → 新档 —— */
  /* → --fs-2xs (12px) */
  --font-size-0_45rem: var(--fs-2xs);
  --font-size-0_55rem: var(--fs-2xs);
  --font-size-0_56rem: var(--fs-2xs);
  --font-size-0_5rem: var(--fs-2xs);
  --font-size-0_62rem: var(--fs-2xs);
  --font-size-0_65rem: var(--fs-2xs);
  --font-size-0_66rem: var(--fs-2xs);
  --font-size-0_68rem: var(--fs-2xs);
  --font-size-0_72rem: var(--fs-2xs);
  --font-size-0_75rem: var(--fs-2xs);
  --font-size-0_76rem: var(--fs-2xs);
  --font-size-0_78rem: var(--fs-2xs);
  --font-size-0_7rem: var(--fs-2xs);
  --font-size-10_5px: var(--fs-2xs);
  --font-size-10px: var(--fs-2xs);
  --font-size-11_5px: var(--fs-2xs);
  --font-size-11px: var(--fs-2xs);
  --font-size-12_5px: var(--fs-2xs);
  --font-size-12px: var(--fs-2xs);
  --font-size-7px: var(--fs-2xs);
  --font-size-8_5px: var(--fs-2xs);
  --font-size-9_5px: var(--fs-2xs);
  --font-size-9px: var(--fs-2xs);
  --font-size-_55rem: var(--fs-2xs);
  --font-size-_5rem: var(--fs-2xs);
  --font-size-_66rem: var(--fs-2xs);
  --font-size-_68rem: var(--fs-2xs);
  --font-size-_6rem: var(--fs-2xs);
  --font-size-_72rem: var(--fs-2xs);
  --font-size-_75rem: var(--fs-2xs);
  --font-size-_78rem: var(--fs-2xs);
  --font-size-xs: var(--fs-2xs);
  /* → --fs-xs (13px) */
  --font-size-0_82rem: var(--fs-xs);
  --font-size-0_8rem: var(--fs-xs);
  --font-size-13_5px: var(--fs-xs);
  --font-size-13px: var(--fs-xs);
  --font-size-_8125rem: var(--fs-xs);
  --font-size-_82rem: var(--fs-xs);
  --font-size-_8rem: var(--fs-xs);
  /* → --fs-sm (14px) */
  --font-size-0_85rem: var(--fs-sm);
  --font-size-0_86rem: var(--fs-sm);
  --font-size-0_875rem: var(--fs-sm);
  --font-size-0_92rem: var(--fs-sm);
  --font-size-0_9rem: var(--fs-sm);
  --font-size-14_5px: var(--fs-sm);
  --font-size-14px: var(--fs-sm);
  --font-size-15px: var(--fs-sm);
  --font-size-_86rem: var(--fs-sm);
  --font-size-_92rem: var(--fs-sm);
  --font-size-_9rem: var(--fs-sm);
  /* → --fs-base (16px；V5.1.11 已回滚 V5.1.10 的 14px) */
  --font-size-0_95rem: var(--fs-base);
  --font-size-15_5px: var(--fs-base);
  --font-size-16px: var(--fs-base);
  --font-size-17px: var(--fs-base);
  --font-size-1_05rem: var(--fs-base);
  --font-size-1rem: var(--fs-base);
  --font-size-_98rem: var(--fs-base);
  /* → --fs-md (18px) */
  --font-size-18px: var(--fs-md);
  --font-size-19px: var(--fs-md);
  --font-size-1_15rem: var(--fs-md);
  --font-size-1_1rem: var(--fs-md);
  /* → --fs-lg (20px) */
  --font-size-1_22em: var(--fs-lg);
  --font-size-1_28rem: var(--fs-lg);
  --font-size-1_35rem: var(--fs-lg);
  --font-size-20px: var(--fs-lg);
  --font-size-22px: var(--fs-lg);
  /* → --fs-xl (24px) */
  --font-size-1_45rem: var(--fs-xl);
  --font-size-23px: var(--fs-xl);
  --font-size-24px: var(--fs-xl);
  --font-size-25px: var(--fs-xl);
  --font-size-26px: var(--fs-xl);
  --font-size-27px: var(--fs-xl);
  /* → --fs-2xl (30px) */
  --font-size-28px: var(--fs-2xl);
  --font-size-30px: var(--fs-2xl);
  --font-size-34px: var(--fs-2xl);
  /* → --fs-3xl (38px) */
  --font-size-44px: var(--fs-3xl);
  --font-size-56px: var(--fs-3xl);

  /* —— 兼容别名：旧 clamp 名 → 流体档 —— */
  /* → --fs-display-sm */
  --font-size-clamp-1_25rem-2_6vw-1_7rem: var(--fs-display-sm);
  --font-size-clamp-22px-3_4vw-30px: var(--fs-display-sm);
  --font-size-clamp-24px-3vw-34px: var(--fs-display-sm);
  /* → --fs-display */
  --font-size-clamp-27px-4vw-40px: var(--fs-display);
  --font-size-clamp-28px-4_2vw-46px: var(--fs-display);
  --font-size-clamp-28px-4vw-44px: var(--fs-display);
  --font-size-clamp-28px-5vw-44px: var(--fs-display);
  /* → --fs-display-lg */
  --font-size-clamp-30px-4_6vw-54px: var(--fs-display-lg);
/* ==== V5.1.0 字号体系 · END ==== */

  color-scheme: light;
  --haven-blue-50: #f2f5ff;
  --haven-blue-100: #e4eaff;
  --haven-blue-200: #c9d6ff;
  --haven-blue-300: #9fb8f4;
  --haven-blue-400: #6f8fe8;
  --haven-blue-500: #4d78e8;
  --haven-blue-600: #3d63d8;
  --haven-blue-700: #2f4fb8;
  --haven-blue-800: #27439b;
  --haven-cyan-400: #22d3ee;
  --haven-cyan-500: #0891b2;
  --haven-sky-400: #38bdf8;
  --haven-white: #ffffff;
  --haven-slate-25: #fbfcff;
  --haven-slate-50: #f5f8fd;
  --haven-slate-75: #f6f9fd;
  --haven-slate-100: #eef3fb;
  --haven-slate-200: #d2dcec;
  --haven-slate-250: #dee6f3;
  --haven-slate-300: #b6c5df;
  --haven-slate-500: #667085;
  --haven-slate-600: #4b5669;
  --haven-slate-700: #323b4e;
  --haven-slate-900: #131a2b;
  /* ★ V5.1.0 常规墨色（中性、去蓝紫）：浅色正文三级。
     用户要求「文字以常规黑为主、减少灰色与浅黑」⇒ 去色相 + 整体加深，
     不随风格皮肤变化；深色模式另用 --haven-night-text*，本次不动。
     对比度（白底）：18.59 / 10.89 / 6.22 —— 三级全部远超 AA 4.5。 */
  --haven-ink-900: #121315;
  --haven-ink-700: #3b3d40;
  --haven-ink-500: #5e6165;
  --haven-night-950: #080c14;
  --haven-night-900: #101728;
  --haven-night-800: #162240;
  --haven-night-700: #203052;
  --haven-night-text: #eef3ff;
  --haven-night-text-2: #a9b6d4;
  --haven-night-text-3: #7c8aa8;
  --haven-green-800: #07603f;
  --haven-green-700: #0b7f57;
  --haven-green-600: #0d8a5f;
  --haven-amber-800: #94580a;
  --haven-amber-700: #a4620b;
  --haven-red-700: #c52344;
  --haven-red-600: #dc3a58;
  --haven-orange-600: #d97706;
  --haven-violet-600: #7c4ddb;
  --haven-violet-500: #8b5cf6;
  --haven-amber-500: #f97316;
  --haven-amber-400: #ffb35c;
  --haven-green-400: #5ed6a4;
  --haven-green-600-strong: #12a06a;
  --primary: var(--haven-blue-600);
  --primary-strong: var(--haven-blue-700);
  --primary-soft: rgba(61, 99, 216, 0.08);
  --secondary: var(--haven-blue-500);
  --accent: var(--haven-blue-300);
  --gradient: linear-gradient(135deg, #3f68d2 0%, #3557c4 60%, #2f4fb8 100%);
  --pri-gradient: var(--gradient);
  --success: var(--haven-green-700);
  /* ★ 小号绿字专用（如报销「已报销」徽章）：--success 在浅绿底上只有 4.49:1，
     刚好卡在 AA 4.5 边界 ⇒ 12px 小字用本档（#07603f ≈ 6.8:1）。深色模式沿用 --success。 */
  --success-strong: var(--haven-green-800);
  --warning: var(--haven-amber-800);
  --danger: var(--haven-red-700);
  --info: var(--haven-blue-600);
  --ok: var(--success);
  --warn: var(--warning);
  --bad: var(--danger);
  --bg: var(--haven-slate-50);
  --canvas: var(--bg);
  --surface: var(--haven-white);
  --surface-2: var(--haven-slate-75);
  --surface-3: var(--haven-slate-100);
  --surface-subtle: var(--surface-2);
  --panel-solid: var(--surface);
  --panel: var(--surface-glass);
  --modal-bg: var(--surface);
  --menu-bg: var(--surface);
  --input-bg: var(--surface);
  --card-bg: var(--surface);
  --surface-glass: rgba(255, 255, 255, 0.86);
  --surface-glass-thin: rgba(255, 255, 255, 0.40);
  --surface-glass-strong: rgba(255, 255, 255, 0.92);
  --surface-overlay: rgba(255, 255, 255, 0.96);
  --glass-bg: var(--surface-glass);
  --glass-border: rgba(255, 255, 255, 0.62);
  /* ★ V5.1.0：浅色正文三级改用「常规墨色」（去蓝紫、整体加深）——
     原 slate-900/600/500 (#131a2b/#4b5669/#667085) 带明显冷蓝色相，
     小字下呈「浅黑发灰」是眼疲劳主因。改后为 #121315/#3b3d40/#5e6165。 */
  --text: var(--haven-ink-900);
  --text-2: var(--haven-ink-700);
  --text-3: var(--haven-ink-500);
  --muted: var(--text-3);
  --tx: var(--text);
  --tx2: var(--text-2);
  --tx3: var(--text-3);
  --tx-sub: var(--text-2);
  --tx-dim: var(--text-3);
  --text-main: var(--text);
  --text-muted: var(--text-3);
  --border: var(--haven-slate-200);
  --border-2: var(--haven-slate-250);
  --border-hover: rgba(61, 99, 216, 0.4);
  --border-strong: var(--haven-slate-300);
  --border-color: rgba(15, 23, 42, 0.12);
  --line: var(--border);
  --line2: var(--border-2);
  --d3-border: #d5deec;
  --d3-border-hover: #b9c8e4;
  --overlay: rgba(15, 23, 42, 0.42);
  --white: #ffffff;
  --black: #000000;
  --text-inverse: #ffffff;
  --dark-text: #e3e3e3;
  --border-neutral: #e5e7eb;
  --blue-600-alt: #2563eb;
  --blue-800-deep: #1646c0;
  --cyan-500: #06b6d4;
  --cyan-600: #0891b2;
  --cyan-700: #0e7490;
  --teal-400: #2dd4bf;
  --indigo-500: #6366f1;
  --violet-500: #8b5cf6;
  --violet-800: #4c1d95;
  --blue-900: #1e3a8a;
  --blue-700: #0369a1;
  --pink-400: #f472b6;
  --rose-700: #be123c;
  --rose-800: #9f1239;
  --slate-400: #94a3b8;
  --gray-100: #f2f4f8;
  --gray-150: #e9edf2;
  --gray-200: #dfe4eb;
  --blue-50-warm: #f9fbfe;
  --blue-75-soft: #e8f0ff;
  --blue-75-calm: #edf3ff;
  --blue-100-soft: #dfe8ff;
  --blue-100-calm: #dbe4fa;
  --blue-150-soft: #dbe1ea;
  --brand-ink: #2b2b45;
  --brand-ink-cn: #7a7a9c;
  --brand-mark-dark: #60a5fa;
  --brand-ink-dark: #ffffff;
  --brand-ink-cn-dark: #8f8dbf;
  --dark-primary: #4f8cff;
  --dark-primary-2: #6ea8ff;
  --dark-primary-soft: #9ecbff;
  --dark-accent-soft: #5eead4;
  --dark-bg-deep: #05070e;
  --dark-bg-logo: #040b18;
  --gray-500: #6b7280;
  --rose-300: #fda4af;
  --danger-strong: #dc2626;
  --danger-alt: #ff4d4f;
  --warning-12: rgba(245, 158, 11, 0.12);
  --warning-30: rgba(245, 158, 11, 0.30);
  --white-20: rgba(255, 255, 255, 0.20);
  --palette-3b82f6: #3b82f6;
  --palette-0ea5e9: #0ea5e9;
  --palette-14b8a6: #14b8a6;
  --palette-10b981: #10b981;
  --palette-ef4444: #ef4444;
  --palette-1f1f1f: #1f1f1f;
  --palette-9ca3af: #9ca3af;
  --palette-f59e0b: #f59e0b;
  --palette-475569: #475569;
  --palette-0f172a: #0f172a;
  --palette-e2e8f0: #e2e8f0;
  --palette-0b1329: #0b1329;
  --radius-9999px: 9999px;
  --radius-1rem: 1rem;
  --radius-12px: 12px;
  --radius-8px: 8px;
  --radius-999px: 999px;
  --radius-50: 50%;
  --radius-14px: 14px;
  --radius-16px: 16px;
  --radius-24px: 24px;
  --radius-28px: 28px;
  --radius-22px: 22px;
  --radius-0: 0;
  --radius-20px: 20px;
  --radius-7px: 7px;
  --shadow-inset-0-0-0-1px-currentcolor: inset 0 0 0 1px currentColor;
  --radius-5px: 5px;
  --radius-6px: 6px;
  --radius-2px: 2px;
  --radius-4px: 4px;
  /* ★ V5.1.6 圆角收敛：实测全站 8 种取值（9/10/11/13/8/12/16/2px）——
     把 9→8、10/11/13→12 归到标准档（视觉差 1px 无感），圆角层级收敛为 8 / 12 / 16 / 999 四档。
     ⚠️ 令牌别名化（值仍由标准档提供），引用处无需改动，全站一次生效。 */
  --radius-9px: var(--radius-8px);
  --radius-10px: var(--radius-12px);
  --radius-11px: var(--radius-12px);
  --radius-13px: var(--radius-12px);
  --radius-3px: 3px;
  --radius-0-0-4px-0: 0 0 4px 0;
  --shadow-none: none;
  --radius-18px-18px-0-0: 18px 18px 0 0;
  --radius-18px: 18px;
  --radius-99px: 99px;
  --radius-0-2px-2px-0: 0 2px 2px 0;
  --radius-6px-6px-3px-3px: 6px 6px 3px 3px;
  --radius-34px: 34px;
  --radius-26px: 26px;
  --shadow-0-0-0-12px-transparent: 0 0 0 12px transparent;
  --radius-1px: 1px;
  --shadow-0-0-0-4px-color-mix-in-srgb-currentcolor-14-transparent: 0 0 0 4px color-mix(in srgb,currentColor 14%,transparent);
  --radius-8px-8px-0-0: 8px 8px 0 0;
  --radius-0-0-8px-8px: 0 0 8px 8px;
  --radius-4px-4px-2px-2px: 4px 4px 2px 2px;
  --alpha-20-20-24-0_92: rgba(20, 20, 24, 0.92);
  --palette-7aa2ff: #7aa2ff;
  --palette-b48ef8: #b48ef8;
  --palette-8ea8ef: #8ea8ef;
  --alpha-37-99-235-_30: rgba(37, 99, 235, .30);
  --alpha-37-99-235-_18: rgba(37, 99, 235, .18);
  --alpha-37-99-235-_40: rgba(37, 99, 235, .40);
  --alpha-37-99-235-_22: rgba(37, 99, 235, .22);
  --alpha-79-140-255-_38: rgba(79, 140, 255, .38);
  --alpha-34-211-238-_18: rgba(34, 211, 238, .18);
  --alpha-79-140-255-_52: rgba(79, 140, 255, .52);
  --alpha-34-211-238-_28: rgba(34, 211, 238, .28);
  --alpha-37-99-235-_35: rgba(37, 99, 235, .35);
  --alpha-79-140-255-_40: rgba(79, 140, 255, .40);
  --alpha-255-255-255-_55: rgba(255, 255, 255, .55);
  --alpha-255-255-255-_18: rgba(255, 255, 255, .18);
  --alpha-255-255-255-_35: rgba(255, 255, 255, .35);
  --alpha-255-255-255-_28: rgba(255, 255, 255, .28);
  --alpha-15-23-42-_45: rgba(15, 23, 42, .45);
  --alpha-2-6-23-_72: rgba(2, 6, 23, .72);
  --alpha-37-99-235-_20: rgba(37, 99, 235, .20);
  --alpha-0-0-0-_25: rgba(0, 0, 0, .25);
  --alpha-130-170-255-_16: rgba(130, 170, 255, .16);
  --palette-64748b: #64748b;
  --alpha-37-99-235-_08: rgba(37, 99, 235, .08);
  --alpha-130-170-255-_12: rgba(130, 170, 255, .12);
  --palette-64728f: #64728f;
  --alpha-37-99-235-_04: rgba(37, 99, 235, .04);
  --alpha-16-23-42-_5: rgba(16, 23, 42, .5);
  --alpha-130-170-255-_18: rgba(130, 170, 255, .18);
  --alpha-79-140-255-_08: rgba(79, 140, 255, .08);
  --alpha-79-140-255-_35: rgba(79, 140, 255, .35);
  --palette-f1f5f9: #f1f5f9;
  --alpha-37-99-235-_12: rgba(37, 99, 235, .12);
  --alpha-37-99-235-_28: rgba(37, 99, 235, .28);
  --alpha-130-170-255-_08: rgba(130, 170, 255, .08);
  --alpha-79-140-255-_18: rgba(79, 140, 255, .18);
  --palette-e11d48: #e11d48;
  --palette-78350f: #78350f;
  --palette-3a1420: #3a1420;
  --palette-ff5b6e: #ff5b6e;
  --palette-ffd9de: #ffd9de;
  --alpha-0-0-0-_5: rgba(0, 0, 0, .5);
  --alpha-245-74-69-_3: rgba(245, 74, 69, .3);
  --alpha-61-99-216-_30: rgba(61, 99, 216, .30);
  --alpha-120-120-140-_5: rgba(120, 120, 140, .5);
  --alpha-0-0-0-_15: rgba(0, 0, 0, .15);
  --alpha-239-68-68-_4: rgba(239, 68, 68, .4);
  --alpha-0-0-0-_45: rgba(0, 0, 0, .45);
  --alpha-16-185-129-_14: rgba(16, 185, 129, .14);
  --alpha-239-68-68-_14: rgba(239, 68, 68, .14);
  --palette-fce8e6: #fce8e6;
  --palette-c5221f: #c5221f;
  --palette-e6f4ea: #e6f4ea;
  --palette-137333: #137333;
  --alpha-255-255-255-0_35: rgba(255, 255, 255, 0.35);
  --alpha-255-255-255-0_26: rgba(255, 255, 255, 0.26);
  --alpha-0-0-0-_18: rgba(0, 0, 0, .18);
  --palette-4ade80: #4ade80;
  --alpha-74-222-128-0_28: rgba(74, 222, 128, 0.28);
  --alpha-0-0-0-_12: rgba(0, 0, 0, .12);
  --alpha-245-248-253-1: rgba(245, 248, 253, 1);
  --alpha-8-12-20-1: rgba(8, 12, 20, 1);
  --alpha-255-255-255-_86: rgba(255, 255, 255, .86);
  --alpha-16-185-129-_12: rgba(16, 185, 129, .12);
  --alpha-16-185-129-_2: rgba(16, 185, 129, .2);
  --alpha-239-68-68-_12: rgba(239, 68, 68, .12);
  --alpha-239-68-68-_2: rgba(239, 68, 68, .2);
  --alpha-37-99-235-_06: rgba(37, 99, 235, .06);
  --alpha-0-0-0-_04: rgba(0, 0, 0, .04);
  --alpha-37-99-235-_1: rgba(37, 99, 235, .1);
  --alpha-245-158-11-_15: rgba(245, 158, 11, .15);
  --alpha-248-113-113-_1: rgba(248, 113, 113, .1);
  --alpha-248-113-113-_25: rgba(248, 113, 113, .25);
  --alpha-255-255-255-_7: rgba(255, 255, 255, .7);
  --alpha-15-15-17-_7: rgba(15, 15, 17, .7);
  --alpha-59-130-246-_14: rgba(59, 130, 246, .14);
  --alpha-245-158-11-_14: rgba(245, 158, 11, .14);
  --alpha-5-150-105-_15: rgba(5, 150, 105, .15);
  --alpha-217-119-6-_15: rgba(217, 119, 6, .15);
  --alpha-37-99-235-_15: rgba(37, 99, 235, .15);
  --alpha-255-255-255-_6: rgba(255, 255, 255, .6);
  --alpha-22-25-34-_7: rgba(22, 25, 34, .7);
  --alpha-0-0-0-_06: rgba(0, 0, 0, .06);
  --alpha-17-20-40-_94: rgba(17, 20, 40, .94);
  --alpha-148-163-184-_35: rgba(148, 163, 184, .35);
  --palette-f8fafc: #f8fafc;
  --palette-cbd5e1: #cbd5e1;
  --alpha-59-130-246-_28: rgba(59, 130, 246, .28);
  --alpha-148-163-184-_14: rgba(148, 163, 184, .14);
  --palette-9aa7b5: #9aa7b5;
  --palette-9aa3b8: #9aa3b8;
  --palette-ff8a9b: #ff8a9b;
  --palette-ffb072: #ffb072;
  --palette-ffd86b: #ffd86b;
  --palette-7ee0a8: #7ee0a8;
  --palette-79c0ff: #79c0ff;
  --palette-c39bff: #c39bff;
  --palette-12b886: #12b886;
  --palette-f59f00: #f59f00;
  --palette-f04a63: #f04a63;
  --palette-0ca678: #0ca678;
  --palette-e8590c: #e8590c;
  --palette-7048e8: #7048e8;
  --palette-1098ad: #1098ad;
  --palette-ffaabb: #ffaabb;
  --palette-eef1f8: #eef1f8;
  --palette-0e1119: #0e1119;
  --palette-5b67e8: #5b67e8;
  --palette-7e8cf6: #7e8cf6;
  --palette-d48bc8: #d48bc8;
  --palette-4a55d8: #4a55d8;
  --palette-e3a3d2: #e3a3d2;
  --palette-c26fab: #c26fab;
  --palette-4a90d9: #4a90d9;
  --palette-f5a623: #f5a623;
  --palette-7ed321: #7ed321;
  --palette-50e3c2: #50e3c2;
  --palette-e35050: #e35050;
  --palette-b8e986: #b8e986;
  --palette-9013fe: #9013fe;
  --palette-f8e71c: #f8e71c;
  --palette-d0021b: #d0021b;
  --palette-4a4a4a: #4a4a4a;
  --palette-8b572a: #8b572a;
  --palette-ff9f0a: #ff9f0a;
  --palette-bfdbfe: #bfdbfe;
  --palette-93c5fd: #93c5fd;
  --palette-84cc16: #84cc16;
  --palette-ec4899: #ec4899;
  --palette-c4c7c5: #c4c7c5;
  --palette-4b5563: #4b5563;
  --palette-2a2c2f: #2a2c2f;
  --palette-eef0f3: #eef0f3;
  --palette-3a3c40: #3a3c40;
  --palette-e9ebef: #e9ebef;
  --palette-6b7280: #6b7280;
  --palette-a5b4fc: #a5b4fc;
  --palette-1e1f20: #1e1f20;
  --palette-111827: #111827;
  --palette-6f8cff: #6f8cff;
  --palette-3f5fe0: #3f5fe0;
  --palette-5ed6a4: #5ed6a4;
  --palette-12a06a: #12a06a;
  --palette-ffb35c: #ffb35c;
  --palette-f97316: #f97316;
  --palette-c68cff: #c68cff;
  --palette-2a55c9: #2a55c9;
  --palette-c3d0f5: #c3d0f5;
  --palette-0e8a55: #0e8a55;
  --palette-b9e3cd: #b9e3cd;
  --palette-b4600d: #b4600d;
  --palette-f0d3ae: #f0d3ae;
  --palette-7c4ddb: #7c4ddb;
  --palette-d9cbf5: #d9cbf5;
  --palette-93b0ff: #93b0ff;
  --palette-33477e: #33477e;
  --palette-6fd3a4: #6fd3a4;
  --palette-2c5a44: #2c5a44;
  --palette-f2b477: #f2b477;
  --palette-66421a: #66421a;
  --palette-c3a8ff: #c3a8ff;
  --palette-462f77: #462f77;
  --palette-1b2030: #1b2030;
  --palette-5c6577: #5c6577;
  --palette-98a1b3: #98a1b3;
  --palette-e5484d: #e5484d;
  --palette-0d9488: #0d9488;
  --palette-e8eef7: #e8eef7;
  --palette-f3eaf6: #f3eaf6;
  --palette-e2ebf5: #e2ebf5;
  --palette-eef3fa: #eef3fa;
  --palette-e7eef7: #e7eef7;
  --palette-02050e: #02050e;
  --palette-eef1f7: #eef1f7;
  --palette-a2abbe: #a2abbe;
  --palette-6b748a: #6b748a;
  --palette-ff6369: #ff6369;
  --palette-fbbf24: #fbbf24;
  --palette-2a2350: #2a2350;
  --palette-10314a: #10314a;
  --palette-0e1020: #0e1020;
  --palette-171a2b: #171a2b;
  --palette-101828: #101828;
  --palette-7c8aa5: #7c8aa5;
  --palette-0c1020: #0c1020;
  --palette-0a0a12: #0a0a12;
  --palette-f7f7fa: #f7f7fa;
  --palette-9aa0b4: #9aa0b4;
  --palette-6b7285: #6b7285;
  --palette-f4f6fa: #f4f6fa;
  --palette-eef2fb: #eef2fb;
  --palette-e3e9f3: #e3e9f3;
  --palette-e9ecf3: #e9ecf3;
  --palette-fdecec: #fdecec;
  --palette-f2f5fa: #f2f5fa;
  --palette-34c724: #34c724;
  --palette-ff70a6: #ff70a6;
  --palette-ff8800: #ff8800;
  --palette-8f959e: #8f959e;
  --palette-162240: #162240;
  --palette-ff6b66: #ff6b66;
  --palette-16203a: #16203a;
  --palette-ff5c5c: #ff5c5c;
  --palette-04121a: #04121a;
  --palette-0b0e15: #0b0e15;
  --palette-e8eaed: #e8eaed;
  --palette-10141c: #10141c;
  --palette-242b38: #242b38;
  --palette-343d4e: #343d4e;
  --palette-171d28: #171d28;
  --palette-7c8cff: #7c8cff;
  --palette-cfe3ff: #cfe3ff;
  --palette-7ff3ff: #7ff3ff;
  --palette-262d3a: #262d3a;
  --palette-3a4252: #3a4252;
  --palette-f6f5f0: #f6f5f0;
  --palette-fbfaf6: #fbfaf6;
  --palette-23303a: #23303a;
  --palette-5c6b77: #5c6b77;
  --palette-94a1ac: #94a1ac;
  --palette-e7e4da: #e7e4da;
  --palette-f0ede2: #f0ede2;
  --palette-0f766e: #0f766e;
  --palette-fb7185: #fb7185;
  --palette-16a34a: #16a34a;
  --palette-141f2e: #141f2e;
  --palette-0f1926: #0f1926;
  --palette-e8eef6: #e8eef6;
  --palette-aebccd: #aebccd;
  --palette-6b7c91: #6b7c91;
  --palette-223145: #223145;
  --palette-1a2839: #1a2839;
  --palette-34d399: #34d399;
  --palette-0b0d14: #0b0d14;
  --palette-080a10: #080a10;
  --palette-f0f6ff: #f0f6ff;
  --palette-aabbd6: #aabbd6;
  --palette-8294b2: #8294b2;
  --palette-16202e: #16202e;
  --palette-101824: #101824;
  --palette-04121f: #04121f;
  --palette-05060a: #05060a;
  --palette-a9a6ff: #a9a6ff;
  --palette-8aa8d6: #8aa8d6;
  --palette-7c8ca6: #7c8ca6;
  --palette-e8f7f4: #e8f7f4;
  --palette-16222f: #16222f;
  --palette-0d1826: #0d1826;
  --palette-070a10: #070a10;
  --palette-1c2a3a: #1c2a3a;
  --palette-0c1220: #0c1220;
  --palette-0e1a26: #0e1a26;
  --palette-e7fbff: #e7fbff;
  --palette-0c1626: #0c1626;
  --palette-e7f7ff: #e7f7ff;
  --palette-0e1b31: #0e1b31;
  --palette-0f1a2e: #0f1a2e;
  --palette-9fb4d9: #9fb4d9;
  --palette-eef4f2: #eef4f2;
  --palette-f2faf8: #f2faf8;
  --palette-eef7fb: #eef7fb;
  --palette-fdf8ee: #fdf8ee;
  --palette-0b1220: #0b1220;
  --palette-7dd3fc: #7dd3fc;
  --palette-6c63ff: #6c63ff;
  --palette-2c2c34: #2c2c34;
  --palette-b45309: #b45309;
  --palette-dbeafe: #dbeafe;
  --palette-cffafe: #cffafe;
  --palette-353d50: #353d50;
  --palette-596276: #596276;
  --palette-155e75: #155e75;
  --palette-191d2a: #191d2a;
  --palette-f4f6ff: #f4f6ff;
  --palette-c7cddd: #c7cddd;
  --palette-9aa4bb: #9aa4bb;
  --palette-e6eaf3: #e6eaf3;
  --palette-fbfcfe: #fbfcfe;
  --palette-3a4055: #3a4055;
  --palette-22263a: #22263a;
  --palette-1d4ed8: #1d4ed8;
  --palette-eff1fe: #eff1fe;
  --palette-0284c7: #0284c7;
  --palette-fbf3fa: #fbf3fa;
  --palette-0a9fc0: #0a9fc0;
  --palette-059669: #059669;
  --palette-c98a18: #c98a18;
  --palette-d43f3f: #d43f3f;
  --palette-f4f5fb: #f4f5fb;
  --palette-f0f2fa: #f0f2fa;
  --palette-e9ecf7: #e9ecf7;
  --palette-dde1f0: #dde1f0;
  --palette-20243d: #20243d;
  --palette-5a628a: #5a628a;
  --palette-99a0c2: #99a0c2;
  /* ★ V5.1.3：旅行模块第三级文字色的**达标替代** —— 原 #99a0c2 对白底仅 2.57:1
     （`_ui-quality-audit.js` 实测），#6b7299 为 4.7:1（≥AA 4.5）。 */
  --palette-6b7299: #6b7299;
  --palette-4cc4e0: #4cc4e0;
  --palette-3bd6a5: #3bd6a5;
  --palette-f2c14e: #f2c14e;
  --palette-f57c7c: #f57c7c;
  --palette-0c0e1c: #0c0e1c;
  --palette-14172b: #14172b;
  --palette-1b1f38: #1b1f38;
  --palette-232747: #232747;
  --palette-2c3152: #2c3152;
  --palette-eef0fa: #eef0fa;
  --palette-c2c7e2: #c2c7e2;
  --palette-8e93b5: #8e93b5;
  --palette-8e8af0: #8e8af0;
  --palette-d9a6cf: #d9a6cf;
  --palette-dc2626: #dc2626;
  --palette-d97706: #d97706;
  --palette-a78bfa: #a78bfa;
  --palette-b9b3f8: #b9b3f8;
  --palette-fde047: #fde047;
  --font: 'Inter', 'PingFang SC', 'Microsoft YaHei', system-ui, sans-serif;
  --mono: 'JetBrains Mono', 'SF Mono', ui-monospace, Menlo, Consolas, monospace;
  --font-weight-regular: 400;
  --font-weight-medium: 500;
  --font-weight-semibold: 600;
  --font-weight-bold: 700;
  --line-tight: 1.25;
  --line-body: 1.5;
  --line-relaxed: 1.65;
  --radius-xs: 8px;
  --radius-sm: 12px;
  --radius-md: 16px;
  --radius-lg: 20px;
  --radius-xl: 24px;
  --radius-pill: 999px;
  --r-s: var(--radius-xs);
  --r-m: var(--radius-sm);
  --r-l: var(--radius-md);
  --r-xl: var(--radius-xl);
  --radius: var(--radius-md);
  --shadow-xs: 0 1px 2px rgba(23, 37, 84, 0.05);
  --shadow-sm: 0 1px 2px rgba(23, 37, 84, 0.04), 0 12px 32px -22px rgba(23, 37, 84, 0.28);
  --shadow-md: 0 2px 4px rgba(23, 37, 84, 0.05), 0 18px 40px -24px rgba(61, 99, 216, 0.45);
  --shadow-lg: 0 3px 6px rgba(23, 37, 84, 0.06), 0 26px 60px -28px rgba(61, 99, 216, 0.50);
  --shadow: var(--shadow-sm);
  --shadow-hud: var(--shadow-sm);
  --g-base: 255, 255, 255;
  --g-line: 255, 255, 255;
  --g-sh: 15, 23, 42;
  --g-sat: 170%;
  --g-alpha-thin: 0.40;
  --g-alpha: 0.86;
  --g-alpha-strong: 0.92;
  --g-alpha-pop: 0.96;
  --g-alpha-modal: 0.96;
  --g-blur-thin: 10px;
  --g-blur: 18px;
  --g-blur-strong: 26px;
  --g-blur-pop: 40px;
  --g-blur-modal: 30px;
  --g-border: 0.62;
  --g-inner: 0.70;
  --g-shadow: 0.12;
  --g-sheen: linear-gradient(160deg, rgba(255, 255, 255, 0.55) 0%, rgba(255, 255, 255, 0) 38%);
  --bg2: var(--surface-2);
  --bg-grid: color-mix(in srgb, var(--primary) 5.5%, transparent);
  --border-cyber: color-mix(in srgb, var(--primary) 26%, transparent);
  --border-glow: color-mix(in srgb, var(--primary) 40%, transparent);
  --glow-primary: color-mix(in srgb, var(--primary) 13%, transparent);
  --glow-accent: color-mix(in srgb, var(--primary) 8%, transparent);
  --tx-main: var(--text);
  --tx-code: var(--primary);
  --c1: var(--primary);
  --c2: var(--primary-strong);
  --c3: var(--accent);
  --success-soft: color-mix(in srgb, var(--success) 12%, transparent);
  --warning-soft: color-mix(in srgb, var(--warning) 12%, transparent);
  --danger-soft: color-mix(in srgb, var(--danger) 12%, transparent);
  --info-soft: color-mix(in srgb, var(--info) 12%, transparent);
  --num-strong: var(--primary);
  --num: var(--text);
  --num-secondary: var(--text-2);
  --num-muted: var(--text-3);
  --chart-main: var(--primary);
  --chart-2: var(--secondary);
  --chart-3: var(--accent);
  --chart-grid: var(--border-2);
  --chart-axis: var(--text-3);
  --r-container: var(--radius-lg);
  --r-core: var(--radius-md);
  --r-card: var(--radius-sm);
  --r-control: var(--radius-xs);
  --r-small: var(--radius-xs);
  --topbar-bg: var(--surface-glass-strong);
  --topbar-border: color-mix(in srgb, var(--primary) 22%, transparent);
  --logo-bg: linear-gradient(135deg, var(--secondary), var(--primary), var(--accent));
  --logo-fg: var(--haven-white);
  --nb-c: var(--text-2);
  --nb-hover-bg: color-mix(in srgb, var(--primary) 8%, transparent);
  --nb-hover-c: var(--primary);
  --nb-on-bg: color-mix(in srgb, var(--primary) 12%, transparent);
  --nb-on-c: var(--primary);
  --nb-on-shadow: inset 0 -2px 0 0 var(--primary);
  --menu-border: color-mix(in srgb, var(--primary) 34%, transparent);
  --pri-hover: linear-gradient(135deg, var(--primary), var(--primary-strong));
  --d3-bg: var(--surface);
  --d3-shadow: var(--shadow-sm);
  --d3-hover-shadow: var(--shadow-md);
  --brand-mark: var(--primary);
  /* 2026-10-01: 品牌 mark 白晕定为唯一真源（theme.css 曾另定义一份蓝晕，取值不同、谁生效看加载顺序）。
     白晕把小尺寸细线从彩色玻璃/光斑背景里"拎"出来；蓝晕等于发光噪音，与 V5.1.6 去发光方向相悖。 */
  --brand-halo: drop-shadow(0 0 .6px color-mix(in srgb, var(--white) 95%, transparent)) drop-shadow(0 0 1.6px color-mix(in srgb, var(--white) 80%, transparent));
  --type-work-from: #6f8cff;
  --type-work-to: #3f5fe0;
  --type-friend-from: #5ed6a4;
  --type-friend-to: #12a06a;
  --type-family-from: #ffb35c;
  --type-family-to: #f97316;
  --type-other-from: #c68cff;
  --type-other-to: #8b5cf6;
  --dur-fast: 0.12s;
  --dur: 0.2s;
  --dur-slow: 0.3s;
  --ease: cubic-bezier(0.4, 0, 0.2, 1);
  --topbar-h: 60px;
  --sidebar-w: 220px;
  --control-height: 44px;
  --touch-target: 44px;
  --z-header: 100;
  --z-menu: 500;
  --z-modal: 1000;
  --z-toast: 2000;
  --travel-primary: #2563eb;
  --travel-primary-strong: #1d4ed8;
  --travel-primary-soft: #eff1fe;
  --travel-accent: #38bdf8;
  --travel-accent-strong: #0284c7;
  --travel-accent-soft: #fbf3fa;
  --travel-info: #0a9fc0;
  --travel-success: #059669;
  --travel-warning: #c98a18;
  --travel-danger: #d43f3f;
  --travel-bg: #f4f5fb;
  --travel-surface: #ffffff;
  --travel-surface-2: #f0f2fa;
  --travel-surface-3: #e9ecf7;
  --travel-border: #dde1f0;
  --travel-text: #20243d;
  --travel-text-2: #5a628a;
  --travel-text-3: #6b7299;
  --travel-gradient: linear-gradient(135deg, #5b67e8 0%, #7e8cf6 50%, #d48bc8 100%);
  --travel-radius-xs: var(--radius-xs);
  --travel-radius-sm: var(--radius-sm);
  --travel-radius-md: var(--radius-md);
  --travel-radius-lg: var(--radius-lg);
  --travel-radius-xl: var(--radius-2xl);
  --travel-radius-pill: var(--radius-pill);
  --travel-shadow-xs: var(--shadow-xs);
  --travel-shadow-sm: var(--shadow-sm);
  --travel-shadow-md: var(--shadow-md);
  --travel-shadow-lg: var(--shadow-lg);
  --alpha-0-0-0-0_04: rgba(0, 0, 0, 0.04);
  --alpha-0-0-0-0_08: rgba(0, 0, 0, 0.08);
  --alpha-255-255-255-0_05: rgba(255, 255, 255, 0.05);
  --alpha-255-255-255-0_1: rgba(255, 255, 255, 0.1);
  --alpha-255-255-255-0_08: rgba(255, 255, 255, 0.08);
  --alpha-79-140-255-0_14: rgba(79, 140, 255, 0.14);
  --alpha-79-140-255-0_4: rgba(79, 140, 255, 0.4);
  --alpha-120-120-140-0_32: rgba(120, 120, 140, 0.32);
  --alpha-0-0-0-0_25: rgba(0, 0, 0, 0.25);
  --alpha-120-120-140-0_35: rgba(120, 120, 140, 0.35);
  --alpha-61-99-216-0_08: rgba(61, 99, 216, 0.08);
  --alpha-255-255-255-0_7: rgba(255, 255, 255, 0.7);
  --alpha-255-255-255-0_65: rgba(255, 255, 255, 0.65);
  --alpha-30-31-32-0_68: rgba(30, 31, 32, 0.68);
  --alpha-0-0-0-0_06: rgba(0, 0, 0, 0.06);
  --alpha-0-0-0-0_28: rgba(0, 0, 0, 0.28);
  --alpha-16-23-42-0_6: rgba(16, 23, 42, 0.6);
  --alpha-16-20-30-0_05: rgba(16, 20, 30, 0.05);
  --alpha-0-0-0-0_24: rgba(0, 0, 0, 0.24);
  --alpha-16-20-30-0_12: rgba(16, 20, 30, 0.12);
  --alpha-0-0-0-0_42: rgba(0, 0, 0, 0.42);
  --alpha-16-20-30-0_1: rgba(16, 20, 30, 0.1);
  --alpha-0-0-0-0_34: rgba(0, 0, 0, 0.34);
  --alpha-0-0-0-0_16: rgba(0, 0, 0, 0.16);
  --alpha-0-0-0-0_5: rgba(0, 0, 0, 0.5);
  --alpha-0-0-0-0_22: rgba(0, 0, 0, 0.22);
  --alpha-255-255-255-0_62: rgba(255, 255, 255, 0.62);
  --alpha-255-255-255-0_93: rgba(255, 255, 255, 0.93);
  --alpha-255-255-255-0_42: rgba(255, 255, 255, 0.42);
  --alpha-15-23-42-0_09: rgba(15, 23, 42, 0.09);
  --alpha-15-23-42-0_16: rgba(15, 23, 42, 0.16);
  --alpha-61-99-216-0_14: rgba(61, 99, 216, 0.14);
  --alpha-15-23-42-0_055: rgba(15, 23, 42, 0.055);
  --alpha-15-23-42-0_1: rgba(15, 23, 42, 0.1);
  --alpha-15-23-42-0_18: rgba(15, 23, 42, 0.18);
  --alpha-10-15-35-0_34: rgba(10, 15, 35, 0.34);
  --alpha-20-22-30-0_55: rgba(20, 22, 30, 0.55);
  --alpha-26-29-39-0_93: rgba(26, 29, 39, 0.93);
  --alpha-255-255-255-0_18: rgba(255, 255, 255, 0.18);
  --alpha-96-165-250-0_18: rgba(96, 165, 250, 0.18);
  --alpha-255-255-255-0_07: rgba(255, 255, 255, 0.07);
  --alpha-0-0-0-0_32: rgba(0, 0, 0, 0.32);
  --alpha-0-0-0-0_45: rgba(0, 0, 0, 0.45);
  --alpha-255-255-255-0_06: rgba(255, 255, 255, 0.06);
  --alpha-255-255-255-0_09: rgba(255, 255, 255, 0.09);
  --alpha-0-4-18-0_52: rgba(0, 4, 18, 0.52);
  --alpha-127-127-127-0_04: rgba(127, 127, 127, 0.04);
  --alpha-45-212-191-0_12: rgba(45, 212, 191, 0.12);
  --alpha-229-72-77-0_14: rgba(229, 72, 77, 0.14);
  --alpha-45-212-191-0_16: rgba(45, 212, 191, 0.16);
  --alpha-229-72-77-0_12: rgba(229, 72, 77, 0.12);
  --alpha-0-0-0-0_05: rgba(0, 0, 0, 0.05);
  --alpha-255-255-255-0_85: rgba(255, 255, 255, 0.85);
  --alpha-61-99-216-0_1: rgba(61, 99, 216, 0.1);
  --alpha-15-23-42-0_08: rgba(15, 23, 42, 0.08);
  --alpha-130-170-255-0_18: rgba(130, 170, 255, 0.18);
  --alpha-130-170-255-0_1: rgba(130, 170, 255, 0.1);
  --alpha-34-211-238-0_12: rgba(34, 211, 238, 0.12);
  --alpha-255-107-102-0_14: rgba(255, 107, 102, 0.14);
  --alpha-0-0-0-0_35: rgba(0, 0, 0, 0.35);
  --alpha-51-112-255-0_28: rgba(51, 112, 255, 0.28);
  --alpha-51-112-255-0_12: rgba(51, 112, 255, 0.12);
  --alpha-51-112-255-0_1: rgba(51, 112, 255, 0.1);
  --alpha-0-0-0-0_1: rgba(0, 0, 0, 0.1);
  --alpha-20-22-26-0_45: rgba(20, 22, 26, 0.45);
  --alpha-255-255-255-0_25: rgba(255, 255, 255, 0.25);
  --alpha-31-35-41-0_92: rgba(31, 35, 41, 0.92);
  --alpha-51-112-255-0_06: rgba(51, 112, 255, 0.06);
  --alpha-15-23-42-0_24: rgba(15, 23, 42, 0.24);
  --alpha-239-68-68-0_12: rgba(239, 68, 68, 0.12);
  --alpha-16-185-129-0_14: rgba(16, 185, 129, 0.14);
  --alpha-245-158-11-0_16: rgba(245, 158, 11, 0.16);
  --alpha-16-185-129-0_12: rgba(16, 185, 129, 0.12);
  --alpha-245-158-11-0_14: rgba(245, 158, 11, 0.14);
  --alpha-59-130-246-0_14: rgba(59, 130, 246, 0.14);
  --alpha-255-255-255-0_14: rgba(255, 255, 255, 0.14);
  --alpha-15-23-42-0_45: rgba(15, 23, 42, 0.45);
  --alpha-225-29-72-0_35: rgba(225, 29, 72, 0.35);
  --alpha-61-99-216-0_36: rgba(61, 99, 216, 0.36);
  --alpha-61-99-216-0_22: rgba(61, 99, 216, 0.22);
  --alpha-79-140-255-0_16: rgba(79, 140, 255, 0.16);
  --alpha-79-140-255-0_35: rgba(79, 140, 255, 0.35);
  --alpha-34-211-238-0_1: rgba(34, 211, 238, 0.1);
  --alpha-130-170-255-0_12: rgba(130, 170, 255, 0.12);
  --alpha-130-170-255-0_22: rgba(130, 170, 255, 0.22);
  --alpha-130-170-255-0_35: rgba(130, 170, 255, 0.35);
  --alpha-34-211-238-0_16: rgba(34, 211, 238, 0.16);
  --alpha-20-29-54-0_55: rgba(20, 29, 54, 0.55);
  --alpha-34-211-238-0_55: rgba(34, 211, 238, 0.55);
  --palette-3158cf: #3158cf;
  --palette-2c54ca: #2c54ca;
  --alpha-13-148-136-0_12: rgba(13, 148, 136, 0.12);
  --alpha-35-48-58-0_25: rgba(35, 48, 58, 0.25);
  --alpha-35-48-58-0_05: rgba(35, 48, 58, 0.05);
  --alpha-13-148-136-0_4: rgba(13, 148, 136, 0.4);
  --alpha-0-0-0-0_6: rgba(0, 0, 0, 0.6);
  --alpha-45-212-191-0_28: rgba(45, 212, 191, 0.28);
  --alpha-34-211-238-0_14: rgba(34, 211, 238, 0.14);
  --alpha-0-0-0-0_8: rgba(0, 0, 0, 0.8);
  --alpha-13-148-136-0_45: rgba(13, 148, 136, 0.45);
  --alpha-34-211-238-0_035: rgba(34, 211, 238, 0.035);
  --alpha-5-6-10-0_7: rgba(5, 6, 10, 0.7);
  --alpha-0-0-0-0_85: rgba(0, 0, 0, 0.85);
  --alpha-34-211-238-0_5: rgba(34, 211, 238, 0.5);
  --alpha-34-211-238-0_3: rgba(34, 211, 238, 0.3);
  --alpha-34-211-238-0_18: rgba(34, 211, 238, 0.18);
  --alpha-34-211-238-0_25: rgba(34, 211, 238, 0.25);
  --alpha-34-211-238-0_4: rgba(34, 211, 238, 0.4);
  --alpha-34-211-238-0_6: rgba(34, 211, 238, 0.6);
  --alpha-34-211-238-0_35: rgba(34, 211, 238, 0.35);
  --alpha-56-189-248-0_55: rgba(56, 189, 248, 0.55);
  --alpha-56-189-248-0_1: rgba(56, 189, 248, 0.1);
  --alpha-56-189-248-0_32: rgba(56, 189, 248, 0.32);
  --alpha-56-189-248-0_45: rgba(56, 189, 248, 0.45);
  --alpha-34-211-238-0_45: rgba(34, 211, 238, 0.45);
  --alpha-231-247-255-0_75: rgba(231, 247, 255, 0.75);
  --alpha-56-189-248-0_3: rgba(56, 189, 248, 0.3);
  --alpha-255-255-255-0_55: rgba(255, 255, 255, 0.55);
  --alpha-255-255-255-0: rgba(255, 255, 255, 0);
  --alpha-13-148-136-0_5: rgba(13, 148, 136, 0.5);
  --alpha-14-165-233-0_46: rgba(14, 165, 233, 0.46);
  --alpha-245-158-11-0_34: rgba(245, 158, 11, 0.34);
  --alpha-251-113-133-0_34: rgba(251, 113, 133, 0.34);
  --alpha-22-163-74-0_26: rgba(22, 163, 74, 0.26);
  --alpha-130-170-255-0_04: rgba(130, 170, 255, 0.04);
  --alpha-37-99-235-0_42: rgba(37, 99, 235, 0.42);
  --alpha-2-132-199-0_34: rgba(2, 132, 199, 0.34);
  --alpha-37-99-235-0_4: rgba(37, 99, 235, 0.4);
  --alpha-56-189-248-0_26: rgba(56, 189, 248, 0.26);
  --alpha-37-99-235-0_07: rgba(37, 99, 235, 0.07);
  --alpha-10-16-26-0_55: rgba(10, 16, 26, 0.55);
  --alpha-0-0-0-0_3: rgba(0, 0, 0, 0.3);
  --alpha-255-255-255-0_78: rgba(255, 255, 255, 0.78);
  --alpha-255-255-255-0_68: rgba(255, 255, 255, 0.68);
  --alpha-255-255-255-0_45: rgba(255, 255, 255, 0.45);
  --alpha-255-255-255-0_28: rgba(255, 255, 255, 0.28);
  --alpha-18-22-45-0_09: rgba(18, 22, 45, 0.09);
  --alpha-18-22-45-0_14: rgba(18, 22, 45, 0.14);
  --alpha-61-99-216-0_08: rgba(61, 99, 216, 0.08);
  --alpha-61-99-216-0_12: rgba(61, 99, 216, 0.08);
  /* ↑ V5.1.3：原 0.12 ⇒ 品牌色文字压该底实测仅 4.49:1（差 0.01 不达标，update-log 徽标）；
     降到 0.08 后为 4.7:1。（保留 `_12` 旧名指向同一值，避免全站引用改名。） */
  --alpha-18-24-60-0_09: rgba(18, 24, 60, 0.09);
  --alpha-18-24-60-0_14: rgba(18, 24, 60, 0.14);
  --alpha-18-24-60-0_22: rgba(18, 24, 60, 0.22);
  --alpha-28-32-46-0_66: rgba(28, 32, 46, 0.66);
  --alpha-255-255-255-0_03: rgba(255, 255, 255, 0.03);
  --alpha-255-255-255-0_16: rgba(255, 255, 255, 0.16);
  --alpha-0-0-0-0_55: rgba(0, 0, 0, 0.55);
  --alpha-255-255-255-0_24: rgba(255, 255, 255, 0.24);
  --alpha-128-128-128-0_12: rgba(128, 128, 128, 0.12);
  --alpha-240-74-99-0_14: rgba(240, 74, 99, 0.14);
  --alpha-255-214-0-0_5: rgba(255, 214, 0, 0.5);
  --alpha-255-214-0-0_28: rgba(255, 214, 0, 0.28);
  --alpha-245-159-0-0_15: rgba(245, 159, 0, 0.15);
  --alpha-240-74-99-0_16: rgba(240, 74, 99, 0.16);
  --alpha-245-159-0-0_3: rgba(245, 159, 0, 0.3);
  --alpha-240-74-99-0_1: rgba(240, 74, 99, 0.1);
  --alpha-240-74-99-0_25: rgba(240, 74, 99, 0.25);
  --alpha-10-14-30-0_5: rgba(10, 14, 30, 0.5);
  --alpha-240-74-99-0_3: rgba(240, 74, 99, 0.3);
  --alpha-10-14-26-0_42: rgba(10, 14, 26, 0.42);
  --alpha-16-24-40-0_16: rgba(16, 24, 40, 0.16);
  --alpha-16-24-40-0_26: rgba(16, 24, 40, 0.26);
  --alpha-16-24-40-0_32: rgba(16, 24, 40, 0.32);
  --alpha-18-184-134-0_16: rgba(18, 184, 134, 0.16);
  --alpha-61-99-216-0_3: rgba(61, 99, 216, 0.3);
  --alpha-239-68-68-0_09: rgba(239, 68, 68, 0.09);
  --alpha-239-68-68-0_28: rgba(239, 68, 68, 0.28);
  --alpha-14-165-233-0_1: rgba(14, 165, 233, 0.1);
  --alpha-14-165-233-0_3: rgba(14, 165, 233, 0.3);
  --alpha-14-165-233-0_62: rgba(14, 165, 233, 0.62);
  --alpha-0-0-0-0_18: rgba(0, 0, 0, 0.18);
  --alpha-255-255-255-0_86: rgba(255, 255, 255, 0.86);
  --alpha-30-35-80-0_07: rgba(30, 35, 80, 0.07);
  --alpha-61-99-216-0_38: rgba(61, 99, 216, 0.38);
  --alpha-255-255-255-0_96: rgba(255, 255, 255, 0.96);
  --alpha-255-255-255-0_8: rgba(255, 255, 255, 0.8);
  --alpha-61-99-216-0_13: rgba(61, 99, 216, 0.13);
  --alpha-61-99-216-0_15: rgba(61, 99, 216, 0.15);
  --alpha-125-139-255-0_34: rgba(125, 139, 255, 0.34);
  --alpha-36-40-61-0_94: rgba(36, 40, 61, 0.94);
  --alpha-125-139-255-0_14: rgba(125, 139, 255, 0.14);
  --alpha-166-177-255-0_58: rgba(166, 177, 255, 0.58);
  --alpha-43-48-72-0_98: rgba(43, 48, 72, 0.98);
  --alpha-125-139-255-0_2: rgba(125, 139, 255, 0.2);
  --alpha-23-26-60-0_05: rgba(23, 26, 60, 0.05);
  --alpha-23-26-60-0_07: rgba(23, 26, 60, 0.07);
  --alpha-23-26-60-0_09: rgba(23, 26, 60, 0.09);
  --alpha-23-26-60-0_13: rgba(23, 26, 60, 0.13);
  --alpha-96-165-250-0_16: rgba(96, 165, 250, 0.16);
  --alpha-125-211-252-0_14: rgba(125, 211, 252, 0.14);
  --alpha-0-0-0-0_2: rgba(0, 0, 0, 0.2);
  --alpha-59-130-246-0_1: rgba(59, 130, 246, 0.1);
  --alpha-14-165-233-0_07: rgba(14, 165, 233, 0.07);
  --alpha-56-189-248-0_06: rgba(56, 189, 248, 0.06);
  --alpha-129-140-248-0_2: rgba(129, 140, 248, 0.2);
  --alpha-96-165-250-0_12: rgba(96, 165, 250, 0.12);
  --alpha-56-189-248-0_08: rgba(56, 189, 248, 0.08);
  --alpha-255-255-255-0_6: rgba(255, 255, 255, 0.6);
  --alpha-0-0-0-0_4: rgba(0, 0, 0, 0.4);
  --alpha-0-0-0-0_07: rgba(0, 0, 0, 0.07);
  --alpha-37-99-235-0_55: rgba(37, 99, 235, 0.55);
  --alpha-255-255-255-0_22: rgba(255, 255, 255, 0.22);
  --alpha-255-255-255-0_3: rgba(255, 255, 255, 0.3);
  --alpha-0-0-0-0_14: rgba(0, 0, 0, 0.14);
  --alpha-37-99-235-0_6: rgba(37, 99, 235, 0.6);
  --alpha-239-68-68-0_1: rgba(239, 68, 68, 0.1);
  --alpha-99-102-241-0_92: rgba(99, 102, 241, 0.92);
  --alpha-139-92-246-0_85: rgba(139, 92, 246, 0.85);
  --alpha-236-72-153-0_82: rgba(236, 72, 153, 0.82);
  --alpha-99-102-241-0_85: rgba(99, 102, 241, 0.85);
  --alpha-139-92-246-0_78: rgba(139, 92, 246, 0.78);
  --alpha-236-72-153-0_74: rgba(236, 72, 153, 0.74);
  --alpha-212-139-200-0_55: rgba(212, 139, 200, 0.55);
  --alpha-212-139-200-0: rgba(212, 139, 200, 0);
  --alpha-61-99-216-0_2: rgba(61, 99, 216, 0.2);
  --alpha-61-99-216-0_26: rgba(61, 99, 216, 0.26);
  --space-12px: 12px;
  --space-8px: 8px;
  --space-10px: 10px;
  --space-16px: 16px;
  --space-10px-12px: 10px 12px;
  --space-6px: 6px;
  --space-4px-12px: 4px 12px;
  --space-22px: 22px;
  --space-18px: 18px;
  --space-3px: 3px;
  --space-4px: 4px;
  --space-9px: 9px;
  --space-8px-10px: 8px 10px;
  --space-6px-10px: 6px 10px;
  --space-9px-11px: 9px 11px;
  --space-7px: 7px;
  --space-4px-9px: 4px 9px;
  --space-20px: 20px;
  --space-14px-14px-10px: 14px 14px 10px;
  --space-8px-12px-8px-32px: 8px 12px 8px 32px;
  --space-4px-8px-8px: 4px 8px 8px;
  --space-2px-4px: 2px 4px;
  --space-1px-5px: 1px 5px;
  --space-12px-8px-4px: 12px 8px 4px;
  --space-6px-8px: 6px 8px;
  --space-5px: 5px;
  --space-14px: 14px;
  --space-14px-20px: 14px 20px;
  --space-10px-14px: 10px 14px;
  --space-4px-8px: 4px 8px;
  --space-3px-4px: 3px 4px;
  --space-9px-4px: 9px 4px;
  --space-5px-2px: 5px 2px;
  --space-2px: 2px;
  --space-13px-4px: 13px 4px;
  --space-14px-8px: 14px 8px;
  --space-7px-9px: 7px 9px;
  --space-4px-6px: 4px 6px;
  --space-5px-9px-4px: 5px 9px 4px;
  --space-9px-14px: 9px 14px;
  --space-1px: 1px;
  --space-7px-10px: 7px 10px;
  --space-7px-16px: 7px 16px;
  --space-7px-12px: 7px 12px;
  --space-14px-16px-10px: 14px 16px 10px;
  --space-6px-4px: 6px 4px;
  --space-7px-8px: 7px 8px;
  --space-1px-6px: 1px 6px;
  --space-7px-9px-4px: 7px 9px 4px;
  --space-8px-9px: 8px 9px;
  --space-2px-2px-4px: 2px 2px 4px;
  --space-12px-9px: 12px 9px;
  --space-6px-2px-2px: 6px 2px 2px;
  --space-8px-9px-2px: 8px 9px 2px;
  --space-7px-14px: 7px 14px;
  --space-10px-18px: 10px 18px;
  --space-8px-14px: 8px 14px;
  --space-8px-12px: 8px 12px;
  --space-1px-4px: 1px 4px;
  --space-7px-3px: 7px 3px;
  --space-12px-6px: 12px 6px;
  --space-16px-12px: 16px 12px;
  --space-9px-10px: 9px 10px;
  --space-16px-20px-40px: 16px 20px 40px;
  --space-3px-7px: 3px 7px;
  --space-10px-16px: 10px 16px;
  --space-11px-16px: 11px 16px;
  --space-11px: 11px;
  --space-16px-12px-12px: 16px 12px 12px;
  --space-70px-20px: 70px 20px;
  --space-11px-14px: 11px 14px;
  --space-11px-12px: 11px 12px;
  --space-5px-10px: 5px 10px;
  --space-12px-10px: 12px 10px;
  --space-13px-14px: 13px 14px;
  --space-12px-12px-40px: 12px 12px 40px;
  --space-6px-12px: 6px 12px;
  --space-8px-4px: 8px 4px;
  --space-9px-12px: 9px 12px;
  --space-10px-11px: 10px 11px;
  --space-110px: 110px;
  --space-1px-7px: 1px 7px;
  --space-24px: 24px;
  --space-22px-24px: 22px 24px;
  --space-4px-10px: 4px 10px;
  --space-18px-20px-6px: 18px 20px 6px;
  --space-26px-20px: 26px 20px;
  --space-18px-16px: 18px 16px;
  --space-16px-16px-4px: 16px 16px 4px;
  --space-12px-14px: 12px 14px;
  --space-14px-16px: 14px 16px;
  --space-17px: 17px;
  --space-16px-20px: 16px 20px;
  --space-11px-2px: 11px 2px;
  --space-7px-13px: 7px 13px;
  --space-44px-44px-40px: 44px 44px 40px;
  --space-30px: 30px;
  --space-34px-26px: 34px 26px;
  --space-13px: 13px;
  --space-34px-10px: 34px 10px;
  --space-3px-10px: 3px 10px;
  --space-3px-9px: 3px 9px;
  --space-11px-13px: 11px 13px;
  --space-8px-16px: 8px 16px;
  --space-10px-12px-6px: 10px 12px 6px;
  --space-10px-8px-4px: 10px 8px 4px;
  --space-11px-10px: 11px 10px;
  --space-12px-16px-2px: 12px 16px 2px;
  --space-4px-14px: 4px 14px;
  --space-12px-16px: 12px 16px;
  --space-13px-16px: 13px 16px;
  --space-2px-6px: 2px 6px;
  --space-22px-12px: 22px 12px;
  --space-9px-11px-5px: 9px 11px 5px;
  --space-18px-12px: 18px 12px;
 --space-26px-28px: 26px 28px;
  /* 2026-10-01: 页面 hero「带」的规范内边距（桌面 / 移动），供 .hero/.in-hero/.tg-hero/.tl-hero/.upd-hero/.ms-hero 共用。 */
  --space-28px-32px: 28px 32px;
  --space-22px-18px: 22px 18px;
  --space-5px-9px: 5px 9px;
  --space-9px-18px: 9px 18px;
  --space-46px: 46px;
  --space-5px-13px: 5px 13px;
  --space-26px: 26px;
  --space-10px-2px: 10px 2px;
  --space-5px-11px: 5px 11px;
  --space-34px: 34px;
  --space-18px-8px: 18px 8px;
  --space-2px-8px: 2px 8px;
  --space-24px-16px: 24px 16px;
  --space-40px-38px-34px: 40px 38px 34px;
  --space-26px-26px-24px: 26px 26px 24px;
  --space-11px-18px: 11px 18px;
  --space-5px-12px: 5px 12px;
  --space-5px-8px: 5px 8px;
  --space-2px-9px: 2px 9px;
  --space-40px-16px: 40px 16px;
  --space-18px-20px: 18px 20px;
  --space-32px: 32px;
  --space-28px: 28px;
  --space-15px-16px: 15px 16px;
  --space-15px: 15px;
  --space-5px-7px: 5px 7px;
  --space-4px-2px: 4px 2px;
  --space-3px-8px: 3px 8px;
  --space-24px-20px: 24px 20px;
  --space-16px-8px-7px: 16px 8px 7px;
  --space-1px-8px: 1px 8px;
  --space-10px-12px-14px: 10px 12px 14px;
  --space-7px-4px: 7px 4px;
  --space-10px-9px-14px: 10px 9px 14px;
  --space-16px-16px-10px: 16px 16px 10px;
  --space-8px-15px-8px-12px: 8px 15px 8px 12px;
  --space-9px-13px: 9px 13px;
  --space-7px-26px-7px-11px: 7px 26px 7px 11px;
  --space-13px-15px-12px: 13px 15px 12px;
  --space-4px-12px-16px: 4px 12px 16px;
  --space-5px-4px-8px: 5px 4px 8px;
  --space-56px-26px: 56px 26px;
  --space-6px-13px: 6px 13px;
  --space-7px-15px: 7px 15px;
  --space-22px-34px-40px: 22px 34px 40px;
  --space-4px-11px: 4px 11px;
  --space-6px-11px: 6px 11px;
  --space-9px-16px: 9px 16px;
  --space-40px: 40px;
  --space-10px-22px-20px: 10px 22px 20px;
  --space-14px-22px-20px: 14px 22px 20px;
  --space-10px-13px: 10px 13px;
  --space-15px-16px-14px: 15px 16px 14px;
  --space-12px-15px: 12px 15px;
  --space-13px-14px-8px: 13px 14px 8px;
  --space-9px-7px-4px: 9px 7px 4px;
  --space-6px-7px: 6px 7px;
  --space-34px-20px: 34px 20px;
  --space-8px-32px-8px-31px: 8px 32px 8px 31px;
  --space-13px-12px: 13px 12px;
  --space-42px: 42px;
  --space-7px-11px: 7px 11px;
  --space-13px-15px: 13px 15px;
  --space-36px-20px: 36px 20px;
  --space-2px-10px: 2px 10px;
  --space-48px-20px: 48px 20px;
  --space-6px-16px: 6px 16px;
  --space-20px-18px: 20px 18px;
  --space-1px-3px: 1px 3px;
  --space-8px-2px-4px: 8px 2px 4px;
  --space-14px-16px-14px-18px: 14px 16px 14px 18px;
  --space-6px-14px: 6px 14px;
  --space-12px-14px-12px-14px: 12px 14px 12px 14px;
  --space-26px-16px: 26px 16px;
  --space-9px-2px: 9px 2px;
  --space-18px-4px: 18px 4px;
  --space-12px-20px: 12px 20px;
  --space-28px-30px: 28px 30px;
  --space-18px-20px-17px: 18px 20px 17px;
  --space-22px-20px: 22px 20px;
  --space-19px: 19px;
  --space-16px-16px-15px: 16px 16px 15px;
  --radius-preset: preset;
  --palette-f7f4ee: #f7f4ee;
  --palette-2c2a26: #2c2a26;
  --alpha-255-253-248-_93: rgba(255, 253, 248, 0.93);
  --palette-8b8578: #8b8578;
  --palette-fffdf8: #fffdf8;
  --palette-f1ece2: #f1ece2;
  --palette-e2dbcc: #e2dbcc;
  --palette-a97c50: #a97c50;
  --alpha-30-33-38-_93: rgba(30, 33, 38, 0.93);
  --palette-16181b: #16181b;
  --palette-c3cad3: #c3cad3;
  --palette-79828e: #79828e;
  --palette-1e2126: #1e2126;
  --palette-262a30: #262a30;
  --palette-2f343b: #2f343b;
  --palette-7aa2f7: #7aa2f7;
  --palette-0d1117: #0d1117;
  --alpha-220-240-216-_93: rgba(220, 240, 216, 0.93);
  --palette-c9e4c5: #c9e4c5;
  --palette-25392a: #25392a;
  --palette-5d7a63: #5d7a63;
  --palette-dcf0d8: #dcf0d8;
  --palette-cfe6cb: #cfe6cb;
  --palette-b3d4ae: #b3d4ae;
  --palette-3f7d52: #3f7d52;
  --alpha-243-233-210-_93: rgba(243, 233, 210, 0.93);
  --palette-e9dcbd: #e9dcbd;
  --palette-4b3b26: #4b3b26;
  --palette-8b7350: #8b7350;
  --palette-f3e9d2: #f3e9d2;
  --palette-e6d9bc: #e6d9bc;
  --palette-d3c19a: #d3c19a;
  --palette-93693a: #93693a;
  --alpha-22-35-58-_93: rgba(22, 35, 58, 0.93);
  --palette-101a2c: #101a2c;
  --palette-a9c2e2: #a9c2e2;
  --palette-6c84a6: #6c84a6;
  --palette-16233a: #16233a;
  --palette-1d2c46: #1d2c46;
  --palette-26395a: #26395a;
  --palette-61a0ff: #61a0ff;
  --palette-08111f: #08111f;
  --alpha-255-246-249-_93: rgba(255, 246, 249, 0.93);
  --palette-fdeaf0: #fdeaf0;
  --palette-5c3a48: #5c3a48;
  --palette-9c7383: #9c7383;
  --palette-fff6f9: #fff6f9;
  --palette-fce4ec: #fce4ec;
  --palette-f3c9d6: #f3c9d6;
  --palette-d94f7a: #d94f7a;
  --alpha-13-13-13-_93: rgba(13, 13, 13, 0.93);
  --palette-9a9a9a: #9a9a9a;
  --palette-5a5a5a: #5a5a5a;
  --palette-0d0d0d: #0d0d0d;
  --palette-171717: #171717;
  --palette-262626: #262626;
  --palette-c9a227: #c9a227;
  --space-26px-10px: 26px 10px;
  --space-11px-6px: 11px 6px;
  --space-38px-22px: 38px 22px;
  --radius-15px: 15px;
  --alpha-0-0-0-_2: rgba(0, 0, 0, 0.2);
  --space-18px-4px-26px: 18px 4px 26px;
  --alpha-255-214-0-_45: rgba(255, 214, 0, 0.45);
  --alpha-120-220-150-_45: rgba(120, 220, 150, 0.45);
  --alpha-140-190-255-_45: rgba(140, 190, 255, 0.45);
  --alpha-255-150-170-_45: rgba(255, 150, 170, 0.45);
  --alpha-255-214-0-_28: rgba(255, 214, 0, 0.28);
  --alpha-120-220-150-_25: rgba(120, 220, 150, 0.25);
  --alpha-140-190-255-_25: rgba(140, 190, 255, 0.25);
  --alpha-255-150-170-_25: rgba(255, 150, 170, 0.25);
  --alpha-0-0-0-_07: rgba(0, 0, 0, 0.07);
  --alpha-0-0-0-0: rgba(0, 0, 0, 0);
  --alpha-0-0-0-_42: rgba(0, 0, 0, 0.42);
  --space-4px-14px-11px: 4px 14px 11px;
  --radius-20px-20px-0-0: 20px 20px 0 0;
  --alpha-0-0-0-_78: rgba(0, 0, 0, 0.78);
  --palette-111111: #111111;
  --space-11px-30px: 11px 30px;
  --alpha-0-0-0-_86: rgba(0, 0, 0, 0.86);
  --alpha-255-255-255-_2: rgba(255, 255, 255, 0.2);
  --alpha-255-255-255-_14: rgba(255, 255, 255, 0.14);
  --alpha-255-255-255-_32: rgba(255, 255, 255, 0.32);
  --space-7px-22px: 7px 22px;
  --space-10px-15px: 10px 15px;
  --alpha-108-99-255-_12: rgba(108, 99, 255, 0.12);
  ----palette-dd4444: #dd4444;
  ----palette-ffd600: #ffd600;
  ----palette-78dc96: #78dc96;
  ----palette-8cbeff: #8cbeff;
  ----palette-ff96aa: #ff96aa;
  ----palette-2a9d5c: #2a9d5c;
  ----palette-c87f22: #c87f22;
  ----alpha-128-128-128-_14: rgba(128, 128, 128, .14);
  ----alpha-128-128-128-_3: rgba(128, 128, 128, .3);
}

html.dark, body.dark {
  color-scheme: dark;
  --bg: var(--haven-night-950);
  --canvas: var(--bg);
  --surface: var(--haven-night-900);
  --surface-2: var(--haven-night-800);
  --surface-3: var(--haven-night-700);
  --surface-subtle: var(--surface-2);
  --panel-solid: var(--surface);
  --panel: var(--surface-glass);
  --modal-bg: var(--surface);
  --menu-bg: var(--surface);
  --input-bg: var(--surface);
  --card-bg: var(--surface);
  --surface-glass: rgba(16, 23, 42, 0.72);
  --surface-glass-thin: rgba(16, 23, 42, 0.42);
  --surface-glass-strong: rgba(16, 23, 42, 0.88);
  --surface-overlay: rgba(16, 23, 42, 0.96);
  --glass-bg: var(--surface-glass);
  --glass-border: rgba(130, 170, 255, 0.18);
  --primary: #6ea8ff;
  --primary-strong: #8ab6ff;
  --primary-soft: rgba(79, 140, 255, 0.16);
  --secondary: var(--haven-sky-400);
  --accent: var(--haven-cyan-400);
  --gradient: linear-gradient(135deg, #4f8cff 0%, #22d3ee 100%);
  --pri-gradient: var(--gradient);
  --success: #34d399;
  --success-strong: var(--success);
  --warning: #fbbf24;
  --danger: #fb7185;
  --info: var(--haven-sky-400);
  --ok: var(--success);
  --warn: var(--warning);
  --bad: var(--danger);
  --text: var(--haven-night-text);
  --text-2: var(--haven-night-text-2);
  --text-3: var(--haven-night-text-3);
  --muted: var(--text-3);
  --tx: var(--text);
  --tx2: var(--text-2);
  --tx3: var(--text-3);
  --tx-sub: var(--text-2);
  --tx-dim: var(--text-3);
  --text-main: var(--text);
  --text-muted: var(--text-3);
  --border: rgba(130, 170, 255, 0.18);
  --border-2: rgba(130, 170, 255, 0.10);
  --border-hover: rgba(130, 170, 255, 0.40);
  --border-strong: rgba(130, 170, 255, 0.30);
  --border-color: rgba(130, 170, 255, 0.18);
  --line: var(--border);
  --line2: var(--border-2);
  --d3-border: rgba(130, 170, 255, 0.20);
  --d3-border-hover: rgba(130, 170, 255, 0.38);
  --overlay: rgba(2, 6, 23, 0.60);
  --shadow-xs: 0 1px 2px rgba(0, 0, 0, 0.28);
  --shadow-sm: 0 8px 32px rgba(0, 0, 0, 0.35);
  --shadow-md: 0 12px 44px rgba(0, 0, 0, 0.48);
  --shadow-lg: 0 16px 48px rgba(0, 0, 0, 0.55);
  --shadow: var(--shadow-sm);
  --shadow-hud: var(--shadow-sm);
  --g-base: 16, 23, 42;
  --g-line: 130, 170, 255;
  --g-sh: 0, 0, 0;
  --bg2: var(--surface-2);
  --bg-grid: color-mix(in srgb, var(--primary) 8%, transparent);
  --border-cyber: color-mix(in srgb, var(--primary) 24%, transparent);
  --border-glow: color-mix(in srgb, var(--primary) 58%, transparent);
  --glow-primary: color-mix(in srgb, var(--primary) 20%, transparent);
  --glow-accent: color-mix(in srgb, var(--primary) 12%, transparent);
  --tx-main: var(--text);
  --tx-code: var(--primary);
  --c1: var(--primary);
  --c2: var(--secondary);
  --c3: var(--accent);
  --success-soft: color-mix(in srgb, var(--success) 14%, transparent);
  --warning-soft: color-mix(in srgb, var(--warning) 14%, transparent);
  --danger-soft: color-mix(in srgb, var(--danger) 14%, transparent);
  --info-soft: color-mix(in srgb, var(--info) 14%, transparent);
  --num-strong: var(--primary);
  --num: var(--text);
  --num-secondary: var(--text-2);
  --num-muted: var(--text-3);
  --chart-main: var(--primary);
  --chart-2: var(--secondary);
  --chart-3: var(--accent);
  --chart-grid: var(--border-2);
  --chart-axis: var(--text-3);
  --r-container: var(--radius-lg);
  --r-core: var(--radius-md);
  --r-card: var(--radius-sm);
  --r-control: var(--radius-xs);
  --r-small: var(--radius-xs);
  --topbar-bg: var(--surface-glass-strong);
  --topbar-border: var(--border);
  --logo-bg: linear-gradient(135deg, var(--primary), var(--accent));
  --logo-fg: var(--haven-night-950);
  --nb-c: var(--text-2);
  --nb-hover-bg: color-mix(in srgb, var(--primary) 10%, transparent);
  --nb-hover-c: var(--text);
  --nb-on-bg: color-mix(in srgb, var(--primary) 16%, transparent);
  --nb-on-c: var(--text);
  --nb-on-shadow: inset 0 0 0 1px color-mix(in srgb, var(--primary) 40%, transparent);
  --menu-border: var(--border);
  --pri-hover: linear-gradient(135deg, var(--primary), var(--accent));
  --d3-bg: var(--surface);
  --d3-shadow: var(--shadow-sm);
  --d3-hover-shadow: var(--shadow-md);
  --brand-ink: var(--white);
  --brand-ink-cn: var(--brand-ink-cn-dark);
  --brand-mark: var(--brand-mark-dark);   /* 2026-10-01: 深色线条色（原误写 var(--primary) = #6ea8ff） */
  --brand-halo: none;                     /* 深底不需要白晕，加了反而糊 */
  --travel-primary: #60a5fa;
  --travel-primary-strong: #2563eb;
  --travel-primary-soft: rgba(96, 165, 250, 0.16);
  --travel-accent: #7dd3fc;
  --travel-accent-strong: #38bdf8;
  --travel-accent-soft: rgba(125, 211, 252, 0.14);
  --travel-info: #4cc4e0;
  --travel-success: #3bd6a5;
  --travel-warning: #f2c14e;
  --travel-danger: #f57c7c;
  --travel-bg: #0c0e1c;
  --travel-surface: #14172b;
  --travel-surface-2: #1b1f38;
  --travel-surface-3: #232747;
  --travel-border: #2c3152;
  --travel-text: #eef0fa;
  --travel-text-2: #c2c7e2;
  --travel-text-3: #8e93b5;
  --travel-gradient: linear-gradient(135deg, #5b67e8 0%, #8e8af0 55%, #d9a6cf 100%);
}

html.light {
  color-scheme: light;
}

/* ================================================================
 * 动效可访问性 · 全局基础层
 * ----------------------------------------------------------------
 * ★ 放在「令牌层」而非 geek.css，是为了覆盖那些**只引 haven-tokens.css、
 *   不引 geek.css** 的页面：canvas / office-reader / reader / loading / deskshell。
 *   geek.css:74 原有一条同内容规则，两条同声明、幂等，保留不冲突。
 * ⚠️ 只把「时长」压到 0，**不动 opacity / transform 的终值** ——
 *   早期实现曾顺带降不透明度，导致卡底更透、正文对比度反降（见 geek.css:1030 注释）。
 *   ⚠️ 本块仅在系统开启「减少动态效果」时生效，正常模式下对页面零影响。
 * ================================================================ */
@media (prefers-reduced-motion: reduce) {
  *, *::before, *::after {
    animation-duration: .01ms !important;
    animation-iteration-count: 1 !important;
    transition-duration: .01ms !important;
    scroll-behavior: auto !important;
  }
}

/* ----------------------------------------------------------------
 * 可访问性组件 · 「跳到主内容」(skip-link, WCAG 2.4.1 Bypass Blocks)
 * ----------------------------------------------------------------
 * ★ 同样放在令牌层，保证 22 个页面（含不引 geek.css 的 canvas / office-reader /
 *   reader / loading / deskshell）都有样式可用。
 * · 默认移出视口（top:-100px），仅 :focus / :focus-visible 时滑入 —— 视觉零侵入。
 * · 颜色一律走语义令牌 ⇒ 深色主题自动跟随（令牌在 html.dark/body.dark 已覆盖），
 *   也满足 _design-token-audit 的「原始色值 0」要求。
 * · z-index 取最高层 --z-toast，避免被顶栏 / 侧栏盖住。
 * ================================================================ */
.skip-link {
  position: fixed;
  top: -100px;
  left: 12px;
  z-index: var(--z-toast);
  display: flex;
  align-items: center;
  min-height: 44px;          /* 可见时是个真实可点目标 ⇒ 按移动端基座给足 44px */
  padding: 10px 16px;
  border-radius: var(--radius-8px);
  background: var(--surface);
  color: var(--text);
  border: 1px solid var(--border);
  box-shadow: var(--shadow-md);
  font-size: var(--fs-sm);
  line-height: var(--lh-ui);
  text-decoration: none;
  transition: top .16s ease;
}
.skip-link:focus,
.skip-link:focus-visible {
  top: 12px;
  outline: 2px solid var(--primary);
  outline-offset: 2px;
}
/* 落点元素自身不显示焦点框（它只是跳转锚点，不是可交互控件） */
main:focus { outline: none; }

/* 仅供屏幕阅读器的内容。
 * ⚠️ tailwind.min.css 里已有一份 sr-only，但只有引了 tailwind 的页面才有；
 *    drive / notes 未引 tailwind ⇒ 必须在这里再兜一份（同声明、幂等）。
 *    用于给缺少可见主标题的页面补「唯一 h1」而不改变视觉。 */
.sr-only {
  position: absolute;
  width: 1px;
  height: 1px;
  padding: 0;
  margin: -1px;
  overflow: hidden;
  clip: rect(0, 0, 0, 0);
  clip-path: inset(50%);
  white-space: nowrap;
  border-width: 0;
}
