/* ============================================================
   全能工具 · 公共 UI 组件库 (tl654-ui · v2.0)
   设计语言：东方编辑·古籍朱印（戊土命格色系）
   依赖：无（纯 CSS / 零第三方）
   引入方式：<link rel="stylesheet" href="/static/css/common.css">

   配色哲学：宣纸米底（土用神）+ 朱砂红印（火喜神）+ 赭石金（土辅）+ 墨色字
   禁用色：纯白 / 灰 / 蓝 / 青绿 / 黑（金水木忌神）

   目录：
     §1  设计令牌（CSS Variables · 浅 / 暗双主题）
     §2  浏览器 Reset + 元素基础
     §3  焦点 / 选区 / 滚动条
     §4  跳过链接 .skip-link (a11y)
     §5  容器 .container (含 safe-area-inset)
     §6  背景层 .bg / .orb / .noise（命格五色暖光晕）
     §7  宣纸片 .glass / .glass-strong / .glass-soft（哑光厚实，非玻璃）
     §8  Section .section / .section-head
     §9  按钮 .btn / .btn-primary / .btn-secondary / .btn-ghost (含 -sm/-lg 尺寸)
     §10 Icon 圆角块 .icon-tile (-sm/-md/-lg)
     §11 Tag .tag / .tag-list（横滑 + 两端 mask 淡出）
     §12 Badge .badge / .badge-with-dot
     §13 Stats .stats / .stat (tabular-nums 数字等宽)
     §14 模态框 .modal / .modal-content / .modal-form / .modal-body / .modal-foot
     §15 a11y (prefers-reduced-motion + hover: none)
     §16 移动端优化
     §28 古籍/朱印模块（.seal-stamp / .classical-frame / .paper-grain / .scroll-divider / .ordinal-seal）
   ============================================================ */


/* ============================================================
   §1 设计令牌（戊土命格色系）
   ============================================================ */
:root {
  color-scheme: light dark;

  /* 字体栈：中文加入思源宋体/Noto Serif SC（衬线，古籍编辑感） */
  --font-sans: -apple-system, BlinkMacSystemFont, "SF Pro SC", "SF Pro Text",
    "PingFang SC", "Helvetica Neue", "Microsoft YaHei", "Hiragino Sans GB",
    sans-serif;
  --font-serif: "Source Han Serif SC", "Noto Serif SC", "Songti SC",
    "STSong", "SimSun", "PingFang SC", serif;
  --font-mono: ui-monospace, "SF Mono", Menlo, Consolas, "Liberation Mono", monospace;

  /* 浅色：宣纸米底 + 暖墨文字
     2026-05 加深的宣纸案台：杏仁米 → 米卡其暖渐变（土用神，仍属"浅暖"非深色）。
     目的＝让米白卡片(#FEF8EC)更"浮起"（卡片浮起比 1.18→1.38）；
     深度封顶受"直接落在背景上的副标题 text-3"约束（加深后仍 5.2:1 达 AA）。 */
  --bg-base:
    linear-gradient(180deg, #F4E8CC 0%, #E7D4AC 100%);
  --bg-veil:    rgba(250,243,224,0.7);
  --text-1:     #2C1810;    /* 古墨色（替代 #1a1a1f 冷黑） */
  --text-2:     #3D2914;    /* 赭褐 */
  --text-3:     #6B4F35;    /* 沉香褐 — 替代灰 */
  --text-soft:  #79603C;    /* 浅沉香加深：placeholder/提示达 AA 5.3:1（旧 #8B6F47 仅 4.25） */
  --divider:    rgba(107,52,16,0.13);  /* 栗色淡线，非黑（加深一档，分隔更清晰） */

  /* 宣纸片：哑光厚实米色（非玻璃） */
  --glass-bg:        rgba(254,248,236,0.95);   /* P3 卡片提亮+提不透明：与米底拉开层级、卡片更"浮起"（仍低于 strong，同心层级不乱） */
  --glass-bg-strong: rgba(255,250,238,0.96);
  --glass-bg-soft:   rgba(250,238,213,0.70);
  --glass-blur:      0px;     /* 命理水气大忌 → 关闭 blur */
  --glass-sat:       100%;

  /* 实色卡片背景（统一引用 --glass-bg，让所有 panel/container 与 header (.glass) 完全同色） */
  --card-solid-bg:        var(--glass-bg);
  --card-solid-bg-hover:  var(--glass-bg-strong);
  --container-solid-bg:   var(--glass-bg);

  /* doc 内部下沉色（暖色，赭褐淡 alpha） */
  --surface-2: rgba(107,52,16,0.05);
  --surface-3: rgba(107,52,16,0.09);

  /* 阴影：暖栗色（非冷蓝），模拟暖光投射 */
  --glass-shadow:
    inset 0 1px 0 rgba(255,243,224,0.85),
    0 8px 24px rgba(107,52,16,0.13),
    0 2px 5px rgba(60,30,10,0.06);
  --glass-shadow-hover:
    inset 0 1px 0 rgba(255,247,232,0.95),
    0 14px 36px rgba(107,52,16,0.14),
    0 4px 10px rgba(60,30,10,0.07);

  /* 边缘 gradient border：金棕 → 暗栗 → 米色，模拟纸边老化 */
  --border-grad: linear-gradient(135deg,
    rgba(184,115,46,0.40) 0%,
    rgba(107,52,16,0.10) 50%,
    rgba(212,165,116,0.35) 100%);

  /* orb 命格五色暖光晕（朱红/赭金/琥珀/绛紫/沉香） */
  --orb-op: 0.22;
  --orb-c1: #C0392B;    /* 朱砂红（火喜神） */
  --orb-c2: #B8732E;    /* 赭石金（土用神） */
  --orb-c3: #D97706;    /* 琥珀（火土过渡） */
  --orb-c4: #6B2C5C;    /* 绛紫（火土过渡，深点缀） */
  --orb-c5: #8B5A2B;    /* 沉香（土辅助） */

  /* 品牌强调色：朱砂红主色（替代蓝） */
  --accent:        #C42E22;   /* P5 v2 微深：从环境暖橙金中更"跳"，链接/白字均达 5.0:1（旧 #C0392B 4.91） */
  --accent-2:      #8B2C2C;
  --accent-grad:   linear-gradient(135deg, #C42E22 0%, #8B2C2C 100%);
  --accent-soft:   rgba(196,46,34,0.12);
  /* P1 文字/链接专用 accent：与"填充色"分角色。浅色=朱砂；暗色另行提亮（见 dark 块），
     解决暗底链接对比度（旧暗色沿用 #C0392B 仅 3.38:1 不达标） */
  --accent-text:   var(--accent);
  /* P1 on-accent：accent/深色填充之上的文字色（暖白，替代金气纯白 #fff）。
     两种主题同色——它永远落在饱和填充上，无需 dark 覆盖 */
  --on-accent:     #FAF3E0;

  /* 副品牌色（赭金） */
  --gold:          #B8732E;
  --gold-deep:     #6B3410;
  --gold-light:    #D4A574;
  --gold-soft:     rgba(184,115,46,0.12);

  /* P2 语义色（success/warning/danger/info）· 角色＝填充/图标/描边/soft 底
     色相均为暖系（避忌蓝绿），取自命格色库：松石绿成功 / 暖琥珀警示 / 朱砂危险 / 赭金信息。
     注意：暖中间调当浅底正文色对比度不足 → 语义"实色"用于填充/图标，文字态请配深色或用 soft 底。 */
  --success:       #5F8A4F;  --success-soft: rgba(95,138,79,0.12);   /* 松石绿（色库唯一许可绿） */
  --warning:       #C9760E;  --warning-soft: rgba(201,118,14,0.12);  /* 暖琥珀加深（浅底图标可辨） */
  --danger:        #C0392B;  --danger-soft:  rgba(192,57,43,0.12);   /* 朱砂（色库指定 danger=朱砂） */
  --info:          #B8732E;  --info-soft:    rgba(184,115,46,0.12);  /* 赭金（替代蓝 info，避水气） */

  /* 五行五色命格化色板（mingli 类工具专用 · 详见 docs §7.4.3）
     设计意图：火土命格喜用 → 鲜艳；金水木命格忌用 → 灰暗
     视觉直接传达"喜忌"。禁止再用 Tailwind 蓝/绿/黄 */
  --elem-huo:        #C0392B;                  /* 火 喜神 朱砂红 */
  --elem-huo-soft:   rgba(192, 57, 43, 0.08);
  --elem-tu:         #B8732E;                  /* 土 用神 赭石金 */
  --elem-tu-soft:    rgba(184, 115, 46, 0.08);
  --elem-jin:        #8B6F47;                  /* 金 忌神 浅沉香 */
  --elem-jin-soft:   rgba(139, 111, 71, 0.08);
  --elem-shui:       #6B2C5C;                  /* 水 忌神 绛紫 */
  --elem-shui-soft:  rgba(107, 44, 92, 0.08);
  --elem-mu:         #5D7245;                  /* 木 忌神 苔绿 */
  --elem-mu-soft:    rgba(93, 114, 69, 0.08);

  /* ============= 工具页全局间距 token（单一真理源 · 一处改全站）=============
     设计：所有"卡片 ↔ 卡片"间距用 owl 选择器（margin-top 单边向下），不混 padding-bottom
     修改这两个值即可调整整站工具页节奏，无需找各文件 padding */
  --tool-gap:        var(--space-5);   /* 桌面 24 - 导航↔hero / hero↔section / section↔section */
  --tool-gap-mobile: var(--space-4);   /* 移动 16 */

  /* 圆角 / 间距 */
  /* 苹果连续圆角阶梯（2026-05：略调圆润 + 全局 squircle 平滑，松开 v2"古籍更方"收紧） */
  --radius-xs: 6px;       /* 小控件 / 内联 code / 细插槽 */
  --radius-sm: 10px;      /* 输入 / 标签 / tab */
  --radius-md: 14px;      /* 按钮 / panel / 中卡 */
  --radius-lg: 18px;      /* 大卡 / hero / doc */
  --radius-xl: 26px;      /* modal / 巨 hero */
  --radius-full: 999px;

  --space-1: 4px;  --space-2: 8px;  --space-3: 12px;
  --space-4: 16px; --space-5: 24px; --space-6: 32px;
  --space-7: 48px; --space-8: 64px; --space-9: 96px;

  /* 缓动曲线 */
  --easing: cubic-bezier(0.4, 0, 0.2, 1);
  --easing-spring: cubic-bezier(0.34, 1.56, 0.64, 1);

  --container-w: 1200px;
}

/* 暗色 · 跟随系统（夜墨风：深栗底 + 暖朱红主色，避免冷蓝水气） */

  :root[data-theme="dark"] {
    --bg-base:
      radial-gradient(ellipse 110% 50% at 50% 0%, hsla(20, 30%, 14%, 0.6), transparent 65%),
      linear-gradient(180deg, #1F140C 0%, #14100A 100%);
    --bg-veil:    rgba(31,20,12,0.6);
    --text-1:     #F5E6D3;    /* 月光宣纸 */
    --text-2:     #D9C5A8;
    --text-3:     #A89175;
    --text-soft:  #A18966;   /* P4 暗色提亮：暗卡上达 4.89:1（旧 #8C7556 仅 3.73 不达标） */
    --divider:    rgba(212,165,116,0.14);
    --glass-bg:        rgba(45,28,18,0.78);
    --glass-bg-strong: rgba(55,35,22,0.88);
    --glass-bg-soft:   rgba(45,28,18,0.50);
    --card-solid-bg:        var(--glass-bg);
    --card-solid-bg-hover:  var(--glass-bg-strong);
    --container-solid-bg:   var(--glass-bg);
    --surface-2: rgba(255,230,200,0.05);
    --surface-3: rgba(255,230,200,0.09);
    --glass-shadow:
      inset 0 1px 0 rgba(255,220,180,0.08),
      0 4px 16px rgba(0,0,0,0.45),
      0 1px 2px rgba(0,0,0,0.25);
    --glass-shadow-hover:
      inset 0 1px 0 rgba(255,220,180,0.12),
      0 12px 32px rgba(0,0,0,0.6),
      0 4px 8px rgba(0,0,0,0.35);
    --border-grad: linear-gradient(135deg,
      rgba(212,165,116,0.25) 0%,
      rgba(212,165,116,0.03) 50%,
      rgba(212,165,116,0.18) 100%);
    --accent-soft: rgba(192,57,43,0.20);
    --accent-text: #E2542C;   /* P1 霹雳金红：暗底链接/强调达 5.0:1（填充仍用 --accent） */
    --danger:      #E2542C;   /* 暗色危险文字提亮（浅色 #C0392B 于暗底仅 3.48） */
    --orb-op: 0.30;
    --orb-c1: #C0392B; --orb-c2: #B8732E; --orb-c3: #D97706;
    --orb-c4: #6B2C5C; --orb-c5: #8B5A2B;
  }


/* 暗色 · 手动覆盖（优先级高于系统） */
[data-theme="dark"] {
  --bg-base:
    radial-gradient(ellipse 110% 50% at 50% 0%, hsla(20, 30%, 14%, 0.6), transparent 65%),
    linear-gradient(180deg, #1F140C 0%, #14100A 100%);
  --bg-veil:    rgba(31,20,12,0.6);
  --text-1:     #F5E6D3;
  --text-2:     #D9C5A8;
  --text-3:     #A89175;
  --text-soft:  #A18966;   /* P4 暗色提亮：暗卡上达 4.89:1（旧 #8C7556 仅 3.73 不达标） */
  --divider:    rgba(212,165,116,0.14);
  --glass-bg:        rgba(45,28,18,0.78);
  --glass-bg-strong: rgba(55,35,22,0.88);
  --glass-bg-soft:   rgba(45,28,18,0.50);
  --card-solid-bg:        var(--glass-bg);
  --card-solid-bg-hover:  var(--glass-bg-strong);
  --container-solid-bg:   var(--glass-bg);
  --surface-2: rgba(255,230,200,0.05);
  --surface-3: rgba(255,230,200,0.09);
  --glass-shadow:
    inset 0 1px 0 rgba(255,220,180,0.08),
    0 4px 16px rgba(0,0,0,0.45),
    0 1px 2px rgba(0,0,0,0.25);
  --glass-shadow-hover:
    inset 0 1px 0 rgba(255,220,180,0.12),
    0 12px 32px rgba(0,0,0,0.6),
    0 4px 8px rgba(0,0,0,0.35);
  --border-grad: linear-gradient(135deg,
    rgba(212,165,116,0.25) 0%,
    rgba(212,165,116,0.03) 50%,
    rgba(212,165,116,0.18) 100%);
  --accent-soft: rgba(192,57,43,0.20);
  --accent-text: #E2542C;   /* P1 霹雳金红：暗底链接/强调达 5.0:1（填充仍用 --accent） */
  --danger:      #E2542C;   /* 暗色危险文字提亮（浅色 #C0392B 于暗底仅 3.48） */
  --orb-op: 0.30;
  --orb-c1: #C0392B; --orb-c2: #B8732E; --orb-c3: #D97706;
  --orb-c4: #6B2C5C; --orb-c5: #8B5A2B;
}


/* ============================================================
   §2 浏览器 Reset + 元素基础
   ============================================================ */
*, *::before, *::after { box-sizing: border-box; margin: 0; padding: 0; }

/* ============================================================
   苹果连续圆角（squircle / 超椭圆）· 全局渐进增强
   - 让所有圆角呈苹果那种"平滑过渡"曲线（实测 squircle 关键字最自然）
   - 不支持的浏览器（截至 2026 初 Safari/Firefox 多数版本）自动回退普通圆弧
   - 圆形(50%)/胶囊(full) 必须复位 round：否则圆点/头像/胶囊会被压成"方圆" */
*, *::before, *::after { corner-shape: squircle; }
.orb, .tag, .badge, .badge .dot, .hero-badge, .hero-badge .dot, .search-hero,
.search-btn, .almanac-yiji .ji::before, .cat-count, .cta-glow, .search-modal-clear,
.article-cat-chip, .cat-stats .stat-dot, .subcat-chip, .subcat-chip .chip-count,
.related-count, .tool-privacy-note, .diagram-legend-item, .steps-ol li::before,
.sub-chip, .pager-btn, .search-state-link,
.tool-form input[type="range"]::-webkit-slider-thumb,
.tool-form input[type="range"]::-moz-range-thumb,
.toast, .history-remove, .seal-stamp.round, .scroll-divider .mark,
.mobile-bottom-nav .m-nav-item--search .m-nav-search-bubble {
  corner-shape: round;
}
html {
  -webkit-text-size-adjust: 100%;
  scroll-behavior: smooth;
  scroll-padding-top: 84px;     /* 防 sticky header 遮挡锚点 */
  tab-size: 4;
  scrollbar-width: thin;
  scrollbar-color: rgba(128,128,140,0.35) transparent;
}
body {
  /* 古籍编辑美学：正文宋体（衬线），数字与代码仍走系统等宽 */
  font-family: var(--font-serif);
  font-size: 15px;
  line-height: 1.7;     /* 宋体竖向韵律稍松一档 */
  color: var(--text-1);
  background: var(--bg-base);
  background-attachment: fixed;
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
  text-rendering: optimizeLegibility;
  font-feature-settings: "kern" 1, "palt" 1;  /* 中文比例对齐 */
  min-height: 100vh;
  min-height: 100dvh;
  overflow-x: hidden;
  -webkit-tap-highlight-color: transparent;
}

/* 数字/英文/代码保持原比例字栈（宋体的拉丁数字偏窄） */
code, kbd, samp, pre,
.font-mono, [class*="-mono"],
input, textarea, select,
.tabular-nums, [class*="tabular"] {
  font-family: var(--font-mono);
}
/* 输入控件用 sans（宋体在小字号 input 里识别度低） */
input, textarea, select, button {
  font-family: var(--font-sans);
}
img, svg { display: block; max-width: 100%; }
button {
  font: inherit; color: inherit;
  background: none; border: 0;
  cursor: pointer;
  -webkit-appearance: none; appearance: none;
  touch-action: manipulation;
}
a {
  color: inherit; text-decoration: none;
  touch-action: manipulation;
}
input, textarea {
  font: inherit; color: inherit;
  background: transparent; border: 0; outline: 0;
  -webkit-appearance: none; appearance: none;
  font-size: 16px;     /* iOS Safari 防 focus 自动放大（>=16px）*/
}

/* ============================================================
   §2.1 全局防溢出（grid/flex 容器内表单控件）
   ============================================================
   Grid/Flex 默认 min-width = auto = min-content，对 input 而言 min-content 等于
   "占位符或当前值"宽度，会撑爆 1fr 列。强制 min-width: 0 让 grid 'minmax(0, 1fr)'
   语义在 input 上也生效——大厂（Linear / Stripe / Notion）工具表单标准做法
   作用范围限 .panel-body 内（工具页容器），避免影响管理后台 / 弹窗等其他场景 */
.panel-body input,
.panel-body textarea,
.panel-body select {
  min-width: 0;
}
ul { list-style: none; }


/* ============================================================
   §3 焦点 / 选区 / 滚动条
   ============================================================ */
::selection { background: var(--accent-soft); color: var(--text-1); }

::-webkit-scrollbar { width: 10px; height: 10px; }
::-webkit-scrollbar-track { background: transparent; }
::-webkit-scrollbar-thumb {
  background: rgba(128,128,140,0.3);
  border-radius: var(--radius-xs);
  border: 2px solid transparent;
  background-clip: padding-box;
}
::-webkit-scrollbar-thumb:hover {
  background: rgba(128,128,140,0.5);
  background-clip: padding-box;
}

/* 全局 focus-visible 兜底 */
:where(a, button, input, [tabindex]):focus-visible {
  outline: 2px solid var(--accent);
  outline-offset: 3px;
  border-radius: var(--radius-xs);
}


/* ============================================================
   §4 跳过链接 (.skip-link)
   ============================================================ */
.skip-link {
  position: absolute;
  left: -9999px;
  top: 12px;
  padding: 8px 16px;
  background: var(--accent);
  color: var(--on-accent);
  border-radius: var(--radius-sm);
  z-index: 9999;
}
.skip-link:focus { left: 12px; }


/* ============================================================
   §5 容器 .container
   策略：
   - 大屏（>1200）不加 padding —— 内容直接占满 max-width 1200，与 .header-inner 同宽
     （视口已天然有 (vw - 1200) / 2 留白，再加 padding 是双重浪费）
   - 窄屏（≤1200）才加 padding 防内容贴屏幕边
   - 移动端（≤640）padding 略大些更舒服
   ============================================================ */
.container {
  max-width: var(--container-w);
  margin: 0 auto;
  width: 100%;
}
@media (max-width: 1200px) {
  .container {
    padding-left: max(var(--space-3), env(safe-area-inset-left));
    padding-right: max(var(--space-3), env(safe-area-inset-right));
  }
}
@media (max-width: 640px) {
  .container {
    padding-left: max(var(--space-4), env(safe-area-inset-left));
    padding-right: max(var(--space-4), env(safe-area-inset-right));
  }
}


/* ============================================================
   §6 背景层 (.bg / .orb / .noise)
   用法：放在 body 第一个子元素，aria-hidden
   光晕：命格五色暖光（朱红/赭金/琥珀/绛紫/沉香）替代蓝紫水气
   噪点：暖棕纸纤维替代黑色 noise（贴近真宣纸质感）
   ============================================================ */
.bg {
  position: fixed; inset: 0;
  z-index: -1;
  pointer-events: none;
  overflow: hidden;
}
.orb {
  position: absolute;
  border-radius: 50%;
  filter: blur(90px);     /* 光斑略柔，宣纸晕染感 */
  opacity: var(--orb-op);
  mix-blend-mode: multiply;  /* 在米底上叠出"墨色染晕"效果 */
}
[data-theme="dark"] .orb,

  :root[data-theme="dark"] .orb { mix-blend-mode: screen; }

.orb-1 { width: 600px; height: 600px; left: -180px; top: -120px;
  background: radial-gradient(circle, var(--orb-c1), transparent 65%); }
.orb-2 { width: 520px; height: 520px; right: -160px; top: 220px;
  background: radial-gradient(circle, var(--orb-c2), transparent 65%); }
.orb-3 { width: 700px; height: 700px; left: 28%; top: 760px;
  background: radial-gradient(circle, var(--orb-c3), transparent 65%); }
.orb-4 { width: 480px; height: 480px; right: 18%; bottom: 200px;
  background: radial-gradient(circle, var(--orb-c4), transparent 65%); }
.orb-5 { width: 560px; height: 560px; left: 40%; bottom: -120px;
  background: radial-gradient(circle, var(--orb-c5), transparent 65%); }

/* 暗色：mix-blend-mode 单独覆盖（@media 不能嵌套在选择器规则里） */

  :root[data-theme="dark"] .orb { mix-blend-mode: screen; }

[data-theme="dark"] .orb { mix-blend-mode: screen; }

.noise {
  position: absolute; inset: 0;
  opacity: 0.05;
  mix-blend-mode: multiply;
  /* 暖棕色噪点（替代原黑色 alpha 噪点）→ 模拟真宣纸纤维 */
  background-image: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='240' height='240'><filter id='n'><feTurbulence type='fractalNoise' baseFrequency='0.85' numOctaves='2' stitchTiles='stitch'/><feColorMatrix values='0 0 0 0 0.42  0 0 0 0 0.20  0 0 0 0 0.06  0 0 0 0.5 0'/></filter><rect width='100%25' height='100%25' filter='url(%23n)'/></svg>");
  background-repeat: repeat;
}


/* ============================================================
   §7 宣纸片 .glass / .glass-strong / .glass-soft
   命格大改：玻璃 → 宣纸（去 blur 水气，改厚实哑光米色 + 暖浮雕阴影）
   类名保留兼容（4883 行内所有引用照常生效），仅语义换骨。
   含 ::before 金棕渐变描边模拟纸边老化（替代玻璃光照渐变）
   ============================================================ */
.glass {
  position: relative;
  background: var(--glass-bg);
  /* 命理水气大忌：删除 backdrop-filter blur */
  box-shadow: var(--glass-shadow);
  border-radius: var(--radius-lg);
  isolation: isolate;
}
.glass::before {
  content: "";
  position: absolute;
  inset: 0;
  border-radius: inherit;
  padding: 1px;
  background: var(--border-grad);
  -webkit-mask:
    linear-gradient(#000, #000) content-box,
    linear-gradient(#000, #000);
  -webkit-mask-composite: xor;
          mask-composite: exclude;
  pointer-events: none;
  z-index: 1;
}
.glass > * { position: relative; z-index: 2; }

.glass-strong {
  background: var(--glass-bg-strong);
}
.glass-soft {
  background: var(--glass-bg-soft);
}

/* 兼容旧浏览器：背景已经是实色米底，无需降级 */
@supports not (backdrop-filter: blur(1px)) {
  .glass { background: var(--glass-bg); }
  [data-theme="dark"] .glass { background: var(--glass-bg); }
}


/* ============================================================
   §8 Section .section / .section-head
   ============================================================ */
.section { padding: var(--space-8) 0; }
@media (max-width: 768px) { .section { padding: var(--space-7) 0; } }

/* 垂直堆叠（替代逐个 panel 写 margin-bottom）
   用法：<section class="container stack-y section-pad">…panel × N…</section>
   桌面尺寸阶梯：.stack-y-sm 16px / 默认 .stack-y 24px / .stack-y-lg 32px / .stack-y-xl 48px
   移动端 ≤768px 整体降一档：12 / 16 / 24 / 32
   默认与 .tool-hero padding-bottom + .section-pad padding-top 之和完全相等
   → "hero ↔ 第一个 panel" 与 "panel ↔ panel" 节奏 100% 闭环
   兼容性：用 `> * + *` Lobotomized Owl 替代 flex gap，避免 display:none 子节点干扰 */
.stack-y     { display: flex; flex-direction: column; }
.stack-y-sm  { display: flex; flex-direction: column; }
.stack-y-lg  { display: flex; flex-direction: column; }
.stack-y-xl  { display: flex; flex-direction: column; }
/* 默认 .stack-y 用全局 --tool-gap token（与 main owl 间距统一）*/
.stack-y     > * + * { margin-top: var(--tool-gap); }
.stack-y-sm  > * + * { margin-top: var(--space-4); }   /* 16 紧凑变体 */
.stack-y-lg  > * + * { margin-top: var(--space-6); }   /* 32 宽松变体 */
.stack-y-xl  > * + * { margin-top: var(--space-7); }   /* 48 跨段 */
@media (max-width: 768px) {
  .stack-y     > * + * { margin-top: var(--tool-gap-mobile); }
  .stack-y-sm  > * + * { margin-top: var(--space-3); }
  .stack-y-lg  > * + * { margin-top: var(--space-5); }
  .stack-y-xl  > * + * { margin-top: var(--space-6); }
}

/* 工具页 section 内边距（响应式）
   用法：<section class="container stack-y section-pad">
   设计：与 .tool-hero padding-bottom 相加 = .stack-y 的 gap，整页节奏闭环
   桌面 8/24（hero 16 + 8 = 24 = stack-y），移动 4/16（hero 12 + 4 = 16 = stack-y）*/
.section-pad {
  padding-top: 0;                 /* 间距由 main > * + * margin-top 统一控制 */
  padding-bottom: var(--space-5); /* 桌面 24（页底空气）*/
}
@media (max-width: 768px) {
  .section-pad { padding-bottom: var(--space-4); }   /* 移动 16 */
}

.section-head {
  display: flex;
  align-items: end;
  justify-content: space-between;
  margin-bottom: var(--space-6);
  gap: var(--space-4);
}
.section-head h2,
.section-title {
  font-size: clamp(24px, 2.6vw, 32px);
  font-weight: 700;
  letter-spacing: -0.025em;
  margin: 0 0 var(--space-1);
}
.section-subtitle,
.section-head p {
  color: var(--text-3);
  font-size: 14px;
}
.section-head .more {
  display: inline-flex;
  align-items: center;
  gap: 6px;
  font-size: 14px;
  color: var(--accent);
  white-space: nowrap;
  transition: gap .2s var(--easing);
}
.section-head .more:hover { gap: 10px; }


/* ============================================================
   §9 按钮 .btn / .btn-primary / .btn-secondary / .btn-ghost
   尺寸：.btn-sm / .btn-lg
   ============================================================ */
.btn {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  gap: 8px;
  height: 46px;
  padding: 0 22px;
  border-radius: var(--radius-md);
  font-size: 14px;
  font-weight: 600;
  letter-spacing: 0.01em;
  transition: all .2s var(--easing);
  white-space: nowrap;
  cursor: pointer;
}
.btn-sm { height: 36px; padding: 0 14px; font-size: 13px; border-radius: var(--radius-sm); }
.btn-lg { height: 56px; padding: 0 32px; font-size: 15px; border-radius: var(--radius-md); }

.btn-primary {
  background: var(--accent-grad);
  color: var(--on-accent);
  box-shadow:
    0 4px 12px rgba(192,57,43,0.3),
    inset 0 1px 0 rgba(255,255,255,0.3);
}
.btn-primary:hover {
  transform: translateY(-1px);
  box-shadow:
    0 8px 20px rgba(192,57,43,0.4),
    inset 0 1px 0 rgba(255,255,255,0.4);
}
.btn-primary:active { transform: translateY(0) scale(0.98); }

.btn-secondary {
  background: var(--glass-bg-soft);
  color: var(--text-1);
  position: relative;
}
.btn-secondary::before {
  content: "";
  position: absolute;
  inset: 0;
  border-radius: inherit;
  padding: 1px;
  background: var(--border-grad);
  -webkit-mask: linear-gradient(#000,#000) content-box, linear-gradient(#000,#000);
  -webkit-mask-composite: xor; mask-composite: exclude;
  pointer-events: none;
}
.btn-secondary:hover { background: var(--glass-bg); transform: translateY(-1px); }
.btn-secondary:active { transform: translateY(0) scale(0.98); }

.btn-ghost {
  background: transparent;
  color: var(--text-2);
}
.btn-ghost:hover { background: var(--accent-soft); color: var(--text-1); }


/* ============================================================
   §10 Icon 圆角块 .icon-tile (-sm/-md/-lg)
   用法：<span class="icon-tile icon-tile-lg" style="background:linear-gradient(135deg,#FF6B6B,#FFA07A)">生</span>
   ============================================================ */
.icon-tile {
  display: grid;
  place-items: center;
  border-radius: var(--radius-lg);
  color: var(--on-accent);
  font-weight: 700;
  letter-spacing: -0.04em;
  flex-shrink: 0;
  /* 三层阴影模拟立体玻璃质感 */
  box-shadow:
    inset 0 1px 0 rgba(255,255,255,0.5),
    inset 0 -3px 8px rgba(60,30,10,0.18),
    0 8px 20px rgba(60,30,10,0.18),
    0 2px 4px rgba(60,30,10,0.08);
  transition: transform .4s var(--easing-spring);
}
.icon-tile-sm { width: 28px; height: 28px; font-size: 11px; border-radius: 8px;
  box-shadow:
    inset 0 1px 0 rgba(255,255,255,0.35),
    inset 0 -1px 3px rgba(60,30,10,0.12),
    0 2px 6px rgba(60,30,10,0.08);
}
.icon-tile-md { width: 36px; height: 36px; font-size: 13px; border-radius: 10px;
  box-shadow:
    inset 0 1px 0 rgba(255,255,255,0.35),
    inset 0 -2px 4px rgba(60,30,10,0.12),
    0 3px 8px rgba(60,30,10,0.1);
}
.icon-tile-lg { width: 56px; height: 56px; font-size: 24px; border-radius: 16px; }


/* ============================================================
   §11 Tag .tag / .tag-list
   .tag-list：横滑列表，两端 mask 淡出
   ============================================================ */
.tag {
  display: inline-flex;
  align-items: center;
  flex-shrink: 0;
  white-space: nowrap;
  padding: 6px 14px;
  border-radius: var(--radius-full);
  background: var(--glass-bg-soft);
  font-size: 13px;
  color: var(--text-2);
  transition: all .2s var(--easing);
  position: relative;
}
.tag::before {
  content: "";
  position: absolute;
  inset: 0;
  border-radius: inherit;
  padding: 1px;
  background: var(--border-grad);
  -webkit-mask: linear-gradient(#000,#000) content-box, linear-gradient(#000,#000);
  -webkit-mask-composite: xor; mask-composite: exclude;
  pointer-events: none;
}
.tag:hover {
  color: var(--text-1);
  transform: translateY(-1px);
  background: var(--glass-bg);
}

.tag-list {
  display: flex;
  align-items: center;
  flex-wrap: nowrap;
  justify-content: center;
  gap: var(--space-2);
  max-width: 100%;
  padding: 4px 12px;
  overflow-x: auto;
  overflow-y: hidden;
  -webkit-overflow-scrolling: touch;
  scrollbar-width: none;
  -webkit-mask-image: linear-gradient(90deg, transparent 0, #000 24px, #000 calc(100% - 24px), transparent 100%);
          mask-image: linear-gradient(90deg, transparent 0, #000 24px, #000 calc(100% - 24px), transparent 100%);
}
.tag-list::-webkit-scrollbar { display: none; }


/* ------------------------------------------------------------
   §11.1 朱印题签 .tag-seal（古籍工具页词条标签）
   语言：木版印刷的"题签 / 落款"——非现代胶囊；默认赭金细框 + 古墨字
   用法：<a class="tag-seal" href="...">嫁娶吉日</a>
        列表容器复用 .chip-wrap 或自写 flex（gap 8px / wrap）
   覆盖配色：内联 style="--tag-seal-line: #C0392B; --tag-seal-soft: rgba(192,57,43,0.10);"
            或父容器上挂 CSS 变量，所有 tag-seal 子元素继承
   兜底：color-mix 不支持的旧浏览器降级到中性灰边，仍可读
   ------------------------------------------------------------ */
.tag-seal {
  --tag-seal-line: #B8732E;                     /* 赭金（题字落款色，含蓄不抢朱印）*/
  --tag-seal-soft: rgba(184,115,46,0.10);
  display: inline-flex; align-items: center;
  white-space: nowrap;
  font-size: 13px; font-weight: 500;
  letter-spacing: 0.02em;
  padding: 4px 12px;
  border-radius: 6px;                            /* 题签直角圆 ≠ 胶囊 999 */
  background: transparent;
  color: var(--text-1);
  text-decoration: none;
  border: 1px solid color-mix(in srgb, var(--tag-seal-line) 28%, transparent);
  transition: background 0.15s var(--easing),
              border-color 0.15s var(--easing),
              color 0.15s var(--easing);
}
.tag-seal:hover {
  background: var(--tag-seal-soft);
  border-color: var(--tag-seal-line);
  color: var(--tag-seal-line);
  text-decoration: none;
}
/* 暗模式略增边框对比 */

  :root[data-theme="dark"] .tag-seal {
    border-color: color-mix(in srgb, var(--tag-seal-line) 42%, transparent);
  }

[data-theme="dark"] .tag-seal {
  border-color: color-mix(in srgb, var(--tag-seal-line) 42%, transparent);
}

/* 色阶变体（语义级，覆盖默认赭金）：
   .tag-seal-zhu    朱砂红 — 吉 / 正向 / 重点链接 / 主品牌色相
   .tag-seal-ink    沉香墨 — 凶 / 弱化 / 中性偏暗 / 长列表克制（避免红海）
   .tag-seal-violet 绛紫 — 学业 / 知性 / 特殊提示
   不在变体表里的色，通过内联 style="--tag-seal-line:#xxx;--tag-seal-soft:rgba(...);" 临时覆盖 */
.tag-seal-zhu    { --tag-seal-line: #C0392B; --tag-seal-soft: rgba(192,57,43,0.10); }
.tag-seal-ink    { --tag-seal-line: #6B4F35; --tag-seal-soft: rgba(107,79,53,0.10); }
.tag-seal-violet { --tag-seal-line: #6B2C5C; --tag-seal-soft: rgba(107,44,92,0.10); }


/* ------------------------------------------------------------
   §11.2 相关工具入口卡 .rel-card（工具页底部"相关查询"区）
   设计：去外壳 panel 和标题，多个独立 .panel 卡片直接 grid 排列
   每张卡 = 图标 + 文字（主名 + 描述）+ 右箭头
   hover：上浮 2px + 箭头变金色右移
   用法：
     <div class="rel-card-grid">
       <a class="panel rel-card" href="...">
         <span class="icon-tile icon-tile-md">历</span>
         <div class="rel-card-body">
           <div class="rel-card-name">老黄历</div>
           <div class="rel-card-desc">完整黄历 · 宜忌 · 神煞 · 节气一览</div>
         </div>
         <span class="rel-card-arrow">→</span>
       </a>
       ...
     </div>
   网格：2 列桌面 → 1 列 ≤480px（与 .ss-rel-grid 同断点）
   ------------------------------------------------------------ */
.rel-card-grid {
  display: grid;
  grid-template-columns: repeat(2, 1fr);
  gap: var(--tool-gap);
}
@media (max-width: 768px) {
  .rel-card-grid { gap: var(--tool-gap-mobile); }
}
@media (max-width: 480px) {
  .rel-card-grid { grid-template-columns: 1fr; }
}
.rel-card {
  display: flex; align-items: center; gap: var(--space-3);
  padding: var(--space-4);
  text-decoration: none; color: var(--text-1);
  transition: transform .15s var(--easing);
}
.rel-card:hover {
  transform: translateY(-2px);
  text-decoration: none; color: var(--text-1);
}
.rel-card .icon-tile {
  background: linear-gradient(135deg, var(--gold), var(--gold-deep));
  color: var(--glass-bg-strong);
}
.rel-card-body { flex: 1; min-width: 0; }
.rel-card-name { font-size: 1rem; font-weight: 700; letter-spacing: 0.1em; }
.rel-card-desc {
  font-size: 0.82rem; color: var(--text-3);
  line-height: 1.5; margin-top: 4px;
}
.rel-card-arrow {
  color: var(--text-3); font-size: 1.4rem;
  transition: color .15s var(--easing), transform .15s var(--easing);
  flex-shrink: 0;
}
.rel-card:hover .rel-card-arrow {
  color: var(--gold);
  transform: translateX(4px);
}


/* ============================================================
   §12 Badge .badge / .badge-with-dot
   用法：<span class="badge"><span class="dot"></span><strong>823</strong> 款工具上线</span>
   ============================================================ */
.badge {
  display: inline-flex;
  align-items: center;
  gap: var(--space-2);
  padding: 6px 14px 6px 8px;
  border-radius: var(--radius-full);
  background: var(--glass-bg-soft);
  font-size: 13px;
  color: var(--text-2);
  position: relative;
}
.badge::before {
  content: "";
  position: absolute;
  inset: 0;
  border-radius: inherit;
  padding: 1px;
  background: var(--border-grad);
  -webkit-mask: linear-gradient(#000,#000) content-box, linear-gradient(#000,#000);
  -webkit-mask-composite: xor; mask-composite: exclude;
  pointer-events: none;
}
.badge .dot {
  width: 6px; height: 6px;
  border-radius: 50%;
  background: #34c759;
  box-shadow: 0 0 12px rgba(52,199,89,0.6);
  animation: badge-pulse 2s ease-in-out infinite;
}
@keyframes badge-pulse {
  0%, 100% { opacity: 1; transform: scale(1); }
  50%      { opacity: .6; transform: scale(0.85); }
}
.badge strong { color: var(--text-1); font-weight: 600; }


/* ============================================================
   §13 Stats .stats / .stat
   ============================================================ */
.stats {
  display: grid;
  grid-template-columns: repeat(4, 1fr);
  gap: var(--space-4);
}
.stat { text-align: center; position: relative; }
.stat:not(:last-child)::after {
  content: "";
  position: absolute;
  right: calc(var(--space-4) * -0.5);
  top: 18%;
  bottom: 18%;
  width: 1px;
  background: var(--divider);
}
.stat strong {
  display: block;
  font-size: clamp(28px, 3.5vw, 40px);
  font-weight: 700;
  letter-spacing: -0.03em;
  color: var(--text-1);
  line-height: 1;
  margin-bottom: 4px;
  font-variant-numeric: tabular-nums;
  font-feature-settings: "tnum";
}
.stat span {
  font-size: 13px;
  color: var(--text-3);
}
@media (max-width: 640px) {
  .stats { grid-template-columns: repeat(2, 1fr); gap: var(--space-3); }
}


/* ============================================================
   §14 模态框 .modal / .modal-content / .modal-form / .modal-body / .modal-foot
   原生 <dialog> 元素，命令面板风格
   ============================================================ */
.modal {
  position: fixed; inset: 0;
  margin: auto;
  border: 0; padding: 0;
  background: transparent;
  width: min(640px, 92vw);
  max-height: min(80vh, 600px);
  border-radius: var(--radius-lg);
  color: var(--text-1);
}
.modal::backdrop {
  /* 暖古墨遮罩（命格化 · 删除 blur 水气 + 冷蓝） */
  background: rgba(44, 24, 16, 0.55);
}
[data-theme="dark"] .modal::backdrop { background: rgba(0,0,0,0.65); }

  :root[data-theme="dark"] .modal::backdrop { background: rgba(0,0,0,0.65); }


.modal-content {
  background: var(--glass-bg-strong);
  /* 已删除 backdrop-filter + isolation：Safari 中 <dialog> 组合渲染会让内容透明不可见；
     blur 也是命格水气大忌 */
  border-radius: var(--radius-lg);
  box-shadow: var(--glass-shadow-hover);
  position: relative;
  display: flex;
  flex-direction: column;
  height: 100%;
  /* 不用 overflow: hidden（会裁外光环）；内部 modal-body 自己有 overflow-y: auto */
}
.modal-content::before {
  content: "";
  position: absolute; inset: 0;
  border-radius: inherit;
  padding: 1px;
  background: var(--border-grad);
  -webkit-mask: linear-gradient(#000,#000) content-box, linear-gradient(#000,#000);
  -webkit-mask-composite: xor; mask-composite: exclude;
  pointer-events: none;
  z-index: 1;
}

.modal-form {
  display: flex; align-items: center; gap: 14px;
  padding: 18px 18px 18px 22px;
  border-bottom: 1px solid var(--divider);
  position: relative; z-index: 2;
  flex-shrink: 0;
}
.modal-icon { width: 22px; height: 22px; color: var(--text-3); flex-shrink: 0; }
.modal-input {
  flex: 1;
  font-size: 17px;
  color: var(--text-1);
  background: transparent;
  border: 0; outline: none;
  min-width: 0;
}
.modal-input::placeholder { color: var(--text-soft); }
.modal-input:focus, .modal-input:focus-visible { outline: none; }

.modal-close {
  width: 32px; height: 32px;
  display: grid; place-items: center;
  border-radius: var(--radius-sm);
  color: var(--text-3);
  background: rgba(107,52,16,0.04);
  transition: all .2s var(--easing);
  flex-shrink: 0;
}
.modal-close:hover { background: rgba(107,52,16,0.08); color: var(--text-1); }
.modal-close svg { width: 14px; height: 14px; }
[data-theme="dark"] .modal-close { background: rgba(255,255,255,0.06); }
[data-theme="dark"] .modal-close:hover { background: rgba(255,255,255,0.1); }

  :root[data-theme="dark"] .modal-close { background: rgba(255,255,255,0.06); }
  :root[data-theme="dark"] .modal-close:hover { background: rgba(255,255,255,0.1); }


.modal-body {
  padding: 8px;
  flex: 1; overflow-y: auto;
  position: relative; z-index: 2;
}
.modal-label {
  font-size: 11px;
  font-weight: 600;
  color: var(--text-3);
  letter-spacing: 0.06em;
  text-transform: uppercase;
  padding: 10px 14px 6px;
}

.modal-foot {
  display: flex;
  align-items: center;
  justify-content: center;
  gap: 20px;
  padding: 12px 20px;
  border-top: 1px solid var(--divider);
  font-size: 12px;
  color: var(--text-3);
  position: relative; z-index: 2;
  flex-shrink: 0;
}
.modal-foot kbd {
  display: inline-block;
  padding: 2px 6px; margin-right: 4px;
  border-radius: var(--radius-xs);
  background: rgba(107,52,16,0.06);
  font-family: var(--font-mono);
  font-size: 11px;
  color: var(--text-2);
  min-width: 18px;
  text-align: center;
}
[data-theme="dark"] .modal-foot kbd { background: rgba(255,255,255,0.08); }

  :root[data-theme="dark"] .modal-foot kbd { background: rgba(255,255,255,0.08); }


@keyframes modalIn {
  from { opacity: 0; transform: scale(0.96) translateY(-8px); }
  to   { opacity: 1; transform: scale(1) translateY(0); }
}
@keyframes backdropFade {
  from { opacity: 0; }
  to   { opacity: 1; }
}
.modal[open] { animation: modalIn .25s cubic-bezier(0.34, 1.3, 0.64, 1); }
.modal[open]::backdrop { animation: backdropFade .2s ease both; }

@media (max-width: 640px) {
  .modal {
    width: 100vw; max-width: 100vw;
    height: 100vh; max-height: 100vh;
    border-radius: 0;
    inset: 0; margin: 0;
  }
  .modal-content { border-radius: 0; height: 100%; }
  .modal-form { padding: 16px; }
}


/* ============================================================
   §15 a11y (prefers-reduced-motion + hover: none)
   ============================================================ */
@media (prefers-reduced-motion: reduce) {
  *, *::before, *::after {
    animation-duration: 0.01ms !important;
    animation-iteration-count: 1 !important;
    transition-duration: 0.01ms !important;
    scroll-behavior: auto !important;
  }
}

/* 触控设备禁用 hover transform 副作用，避免点击后"粘连" */
@media (hover: none) {
  .btn:hover, .btn-primary:hover, .btn-secondary:hover, .btn-ghost:hover,
  .tag:hover {
    transform: none;
  }
}


/* ============================================================
   §16 移动端优化（共享）
   ============================================================ */
@media (max-width: 768px) {
  :root { --glass-blur: 16px; --glass-sat: 160%; }
}


/* ============================================================
   §17 面包屑 .breadcrumb（站点唯一真理源，v2 命格风）
   --------------------------------------------------------------
   用法（统一模板）：
     <nav class="container breadcrumb-wrap" aria-label="面包屑">
       <a href="/">首页</a>
       <span class="breadcrumb-sep" aria-hidden="true">›</span>
       <a href="...">分类</a>
       <span class="breadcrumb-sep" aria-hidden="true">›</span>
       <span aria-current="page">当前页</span>
     </nav>

   - 间距：公共 token（gap space-2 / padding-top space-4 / padding-bottom space-3）
   - 链接：text-2 默认 / hover accent 朱（不下划线，命格风克制）
   - 分隔符 / 当前页：兼容多套老命名（.sep / .breadcrumb-sep / .bc-sep / .current / [aria-current]）
   - 不用 padding 简写：同元素挂 .container 时会覆盖 left/right
   ============================================================ */
.breadcrumb-wrap {
  /* panel 同款视觉：米底 + 暖栗投影 + ::before 描边 + ::after 外光环（共享选择器在 §25 玻璃片定义）*/
  position: relative;
  isolation: isolate;
  contain: layout style;
  background: var(--container-solid-bg);
  border-radius: var(--radius-lg);
  box-shadow: var(--glass-shadow);
  /* layout */
  display: flex;
  align-items: center;
  flex-wrap: wrap;
  gap: var(--space-2);
  font-size: 13px;
  color: var(--text-3);
  /* 默认间距：所有 page 通用（与 tool-hero 同节奏 tool-gap）；
     工具页 main owl 例外区在底部用 !important 覆盖 padding（防被清零）*/
  margin-top: var(--tool-gap);
  padding: var(--space-3) var(--space-4);
}
/* 老用法兼容：<nav class="breadcrumb"> 嵌在 wrap 内 */
.breadcrumb {
  display: flex;
  align-items: center;
  flex-wrap: wrap;
  gap: var(--space-2);
  font-size: 13px;
  color: var(--text-3);
}
.breadcrumb-wrap a,
.breadcrumb a {
  color: var(--text-2);
  text-decoration: none;
  transition: color 0.15s var(--easing);
}
.breadcrumb-wrap a:hover,
.breadcrumb a:hover {
  color: var(--accent);
  text-decoration: none;
}
/* 分隔符：3 套命名兼容（.sep / .breadcrumb-sep / .bc-sep）*/
.breadcrumb-wrap .sep,
.breadcrumb-wrap .breadcrumb-sep,
.breadcrumb-wrap .bc-sep,
.breadcrumb .sep,
.breadcrumb .breadcrumb-sep,
.breadcrumb .bc-sep {
  color: var(--text-soft);
  user-select: none;
  font-weight: 300;
}
/* 当前页：3 套命名兼容（.current / .breadcrumb-current / .bc-current / [aria-current="page"]）*/
.breadcrumb-wrap .current,
.breadcrumb-wrap .breadcrumb-current,
.breadcrumb-wrap .bc-current,
.breadcrumb-wrap [aria-current="page"],
.breadcrumb .current,
.breadcrumb .breadcrumb-current,
.breadcrumb .bc-current,
.breadcrumb [aria-current="page"] {
  color: var(--text-1);
  font-weight: 600;
}
@media (max-width: 768px) {
  .breadcrumb-wrap {
    font-size: 12px;
    gap: var(--space-1);
    margin-top: var(--tool-gap-mobile);
    padding: var(--space-2) var(--space-3);
  }
}
/* breadcrumb 之后任何相邻元素加 tool-gap 上间距（覆盖详情页 pages/* 这种 main 没 tool-hero 场景） */
.breadcrumb-wrap + * {
  margin-top: var(--tool-gap);
}
@media (max-width: 768px) {
  .breadcrumb-wrap + * {
    margin-top: var(--tool-gap-mobile);
  }
}
/* breadcrumb-wrap 描边 + 外光环（与 panel 共享，加入到 §25 玻璃片选择器；
   单独在此声明 ::before 描边，避免改动 §25 大段共享规则 */
.breadcrumb-wrap::before {
  content: ""; position: absolute; inset: 0;
  border-radius: inherit;
  padding: 1px;
  background: var(--border-grad);
  -webkit-mask: linear-gradient(#000,#000) content-box, linear-gradient(#000,#000);
  -webkit-mask-composite: xor; mask-composite: exclude;
  pointer-events: none; z-index: 1;
}


/* ============================================================
   §18 工具 Hero .tool-hero
   单工具页头部：图标 + 标题 + 简介 + 操作按钮
   注：用 padding-top/-bottom 而不是 padding 简写
   —— 当 <section class="container tool-hero"> 同时挂两个类时，
      padding 简写会覆盖 .container 的 padding-left/right 导致左右紧贴边缘
   ============================================================ */
/* ============================================================
   工具页全局间距策略：Lobotomized Owl Selector（Heydon Pickering 工业标准）
   所有间距由"下方元素 margin-top"单边控制，绝不混 padding-bottom
   修改 :root 内的 --tool-gap / --tool-gap-mobile 即可调整全站节奏
   ============================================================ */

/* ① 兜底：强制清零所有 main 直接子（section/div/article）自带的垂直 padding
   覆盖 .section padding 64px / .tool-section-group / 任何工具页未注意的 padding
   specificity (0,2,1) + !important 足够压住所有公共类的 (0,1,0) padding */
main:has(> .tool-hero) > * {
  padding-top: 0 !important;
  padding-bottom: 0 !important;
}

/* ② 单边间距：owl 选择器统一所有"卡片 ↔ 卡片" margin-top */
main:has(> .tool-hero) > .tool-hero,           /* 导航 ↔ hero（第一个 child 单独命中）*/
main:has(> .tool-hero) > * + * {               /* section ↔ section */
  margin-top: var(--tool-gap);
}
@media (max-width: 768px) {
  main:has(> .tool-hero) > .tool-hero,
  main:has(> .tool-hero) > * + * {
    margin-top: var(--tool-gap-mobile);
  }
}

/* ③ 例外：.tool-privacy-wrap 是页底，保留底部空气 */
main:has(> .tool-hero) > .tool-privacy-wrap {
  padding-bottom: var(--space-5) !important;
}
@media (max-width: 768px) {
  main:has(> .tool-hero) > .tool-privacy-wrap {
    padding-bottom: var(--space-4) !important;
  }
}

/* ④ 例外：.breadcrumb-wrap 第一个 child（不被 owl `> * + *` 命中）单独 margin-top；
   同时恢复内部上下 padding（覆盖 ① 的清零）以撑出 panel 视觉高度 */
main:has(> .tool-hero) > .breadcrumb-wrap {
  margin-top: var(--tool-gap);
  padding-top: var(--space-3) !important;
  padding-bottom: var(--space-3) !important;
  padding-left: var(--space-4);
  padding-right: var(--space-4);
}
@media (max-width: 768px) {
  main:has(> .tool-hero) > .breadcrumb-wrap {
    margin-top: var(--tool-gap-mobile);
    padding-top: var(--space-2) !important;
    padding-bottom: var(--space-2) !important;
  }
}

.tool-hero {
  padding-top: 0;     /* 间距统一由 main > * + * margin-top 控制 */
  padding-bottom: 0;  /* 同上 */
}
.tool-hero-inner {
  display: flex;
  align-items: center;
  gap: var(--space-5);
  padding: var(--space-5) var(--space-6);
  border-radius: var(--radius-lg);
  background: var(--container-solid-bg);
  position: relative;
  isolation: isolate;
  box-shadow: var(--glass-shadow);
  /* 不用 backdrop-filter（避免滚出视口后白屏）*/
}
.tool-hero-inner::before {
  content: ""; position: absolute; inset: 0;
  border-radius: inherit;
  padding: 1px;
  background: var(--border-grad);
  -webkit-mask: linear-gradient(#000,#000) content-box, linear-gradient(#000,#000);
  -webkit-mask-composite: xor; mask-composite: exclude;
  pointer-events: none; z-index: 1;
}
.tool-hero-text { flex: 1; min-width: 0; position: relative; z-index: 2; }
.tool-hero-text h1 {
  font-size: clamp(24px, 3vw, 36px);
  font-weight: 700;
  letter-spacing: -0.025em;
  line-height: 1.2;
  margin-bottom: 6px;
}
.tool-hero-text p {
  color: var(--text-3);
  font-size: 14px;
  line-height: 1.6;
}
.tool-hero-actions {
  display: flex; align-items: center; gap: var(--space-2);
  flex-shrink: 0;
  position: relative; z-index: 2;
}
/* 使用量徽标（信息显示，非按钮 —— 区分于 .btn）*/
.tool-hero-stat {
  display: inline-flex;
  align-items: center;
  gap: 6px;
  height: 32px;
  padding: 0 10px;
  border-radius: var(--radius-sm);
  font-size: 13px;
  color: var(--text-2);
  background: var(--accent-soft);
  white-space: nowrap;
  /* 无 cursor / 无 hover：纯展示 */
}
.tool-hero-stat svg {
  width: 13px; height: 13px;
  color: var(--accent);
  flex-shrink: 0;
}
/* 数字 + "次访问" 包在同一 .stat-text span 里 → 浏览器自动按字体基线对齐
   不再分两个 flex 子元素（不同字号字形 box 中心位置不同会错位） */
.tool-hero-stat .stat-text {
  font-size: 13px;
  line-height: 1;
  color: var(--text-3);
}
.tool-hero-stat .stat-text strong {
  color: var(--text-1);
  font-weight: 600;
  font-variant-numeric: tabular-nums;
  letter-spacing: -0.01em;
  margin-right: 1px;
}
@media (max-width: 768px) {
  /* 移动端 grid 布局：icon + 文字横向并排（顶部）+ 按钮组独立一行（底部，divider 分隔）
     参考 Apple App Store / macOS Settings 详情页布局 */
  .tool-hero-inner {
    display: grid;
    grid-template-columns: auto 1fr;
    grid-template-areas:
      "icon text"
      "actions actions";
    align-items: center;
    gap: var(--space-3);
    padding: var(--space-4);
  }
  .tool-hero-inner > .icon-tile { grid-area: icon; }
  .tool-hero-text { grid-area: text; min-width: 0; }
  .tool-hero-text h1 { margin-bottom: 4px; }
  .tool-hero-actions {
    grid-area: actions;
    width: 100%;
    padding-top: var(--space-3);
    border-top: 1px solid var(--divider);
  }
  .tool-hero-actions .btn { flex: 1; }
}


/* ============================================================
   §19 工具工作区 .tool-workspace / .tool-actions-bar
   ============================================================ */
.tool-workspace {
  display: grid;
  gap: var(--space-4);
}
.tool-workspace-cols-2 {
  grid-template-columns: 1fr 1fr;
}
@media (max-width: 768px) {
  .tool-workspace-cols-2 { grid-template-columns: 1fr; }
}
.tool-actions-bar {
  display: flex;
  flex-wrap: wrap;
  gap: var(--space-2);
  justify-content: center;
  padding: var(--space-2) 0;
}


/* ============================================================
   §20 通用面板 .panel / .panel-head / .panel-title / .panel-toolbar / .panel-body
   工具页输入 / 输出区的统一容器
   ============================================================ */
.panel {
  position: relative;
  background: var(--container-solid-bg);
  border-radius: var(--radius-lg);
  box-shadow: var(--glass-shadow);
  isolation: isolate;
  /* 不用 backdrop-filter（panel 是大尺寸 + 频繁交互，blur 重绘成本大、移动端键盘弹起会白屏）
     不能 overflow: hidden —— 会裁切外光环 ::after */
}
/* panel-body 无 padding 时，给底部圆角 + 裁切，防止内部 textarea 矩形出框 */
.panel-body.no-pad {
  overflow: hidden;
  border-bottom-left-radius: var(--radius-lg);
  border-bottom-right-radius: var(--radius-lg);
}
.panel::before {
  content: ""; position: absolute; inset: 0;
  border-radius: inherit;
  padding: 1px;
  background: var(--border-grad);
  -webkit-mask: linear-gradient(#000,#000) content-box, linear-gradient(#000,#000);
  -webkit-mask-composite: xor; mask-composite: exclude;
  pointer-events: none; z-index: 1;
}
.panel-head {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: var(--space-3);
  padding: 14px var(--space-4);
  border-bottom: 1px solid var(--divider);
  position: relative; z-index: 2;
}
.panel-title {
  font-size: 14px;
  font-weight: 600;
  color: var(--text-1);
  margin: 0;
}
/* 标题前置厚土色竖线（赭金 → 栗色渐变）
   v2 命格版 panel-head 默认视觉锚点（替代朱印 seal-stamp）
   用法：<h3 class="panel-title panel-title-rule">区块标题</h3>
   颜色继承 §7.4.3 命格色板 --gold / --gold-deep */
.panel-title-rule::before {
  content: '';
  display: inline-block;
  width: 4px;
  height: 18px;
  vertical-align: -3px;
  margin-right: 10px;
  background: linear-gradient(180deg, var(--gold), var(--gold-deep));
  border-radius: 2px;
}
.panel-toolbar {
  display: flex;
  gap: 4px;
}
.panel-body {
  padding: var(--space-4);
  position: relative; z-index: 2;
}
.panel-body.no-pad { padding: 0; }


/* ============================================================
   §21 代码编辑区 .code-area
   通用 textarea 样式（JSON / SQL / 文本类工具）
   ============================================================ */
.code-area {
  width: 100%;
  min-height: 280px;
  padding: var(--space-4);
  font-family: var(--font-mono);
  font-size: 13px;
  line-height: 1.7;
  color: var(--text-1);
  background: rgba(107,52,16,0.025);
  border-radius: var(--radius-sm);
  resize: vertical;
  outline: none;
  border: 1px solid var(--divider);
  transition: border-color .2s var(--easing), box-shadow .2s var(--easing);
}
.code-area:focus {
  border-color: var(--accent);
  box-shadow: 0 0 0 3px var(--accent-soft);
}
.code-area::placeholder { color: var(--text-soft); }
[data-theme="dark"] .code-area { background: rgba(255,255,255,0.03); }

  :root[data-theme="dark"] .code-area { background: rgba(255,255,255,0.03); }



/* ============================================================
   §22 文档 / Prose .doc
   工具说明 / 教程的统一排版
   ============================================================ */
.doc {
  padding: var(--space-6);
  border-radius: var(--radius-lg);
  background: var(--container-solid-bg);
  position: relative;
  isolation: isolate;
  box-shadow: var(--glass-shadow);
  /* 不用 backdrop-filter（大尺寸文档区，blur 成本高且滚动易白屏）*/
  font-size: 14px;
  line-height: 1.75;
  color: var(--text-2);
}
.doc::before {
  content: ""; position: absolute; inset: 0;
  border-radius: inherit;
  padding: 1px;
  background: var(--border-grad);
  -webkit-mask: linear-gradient(#000,#000) content-box, linear-gradient(#000,#000);
  -webkit-mask-composite: xor; mask-composite: exclude;
  pointer-events: none; z-index: 1;
}
.doc > * { position: relative; z-index: 2; }
.doc h2, .doc h3, .doc h4 {
  color: var(--text-1);
  font-weight: 600;
  margin: 1.5em 0 0.5em;
  letter-spacing: -0.01em;
}
.doc h2 { font-size: 19px; margin-top: 0; }
.doc h3 { font-size: 16px; }
.doc h4 { font-size: 14px; }
.doc p { margin: 0 0 0.8em; }
.doc ul, .doc ol { margin: 0 0 0.8em; padding-left: 1.4em; }
.doc ul { list-style: disc; }
.doc ol { list-style: decimal; }
.doc li { margin-bottom: 0.4em; }
.doc code {
  padding: 1px 6px;
  background: rgba(107,52,16,0.06);
  border-radius: var(--radius-xs);
  font-family: var(--font-mono);
  font-size: 0.92em;
  color: var(--text-1);
}
[data-theme="dark"] .doc code { background: rgba(255,255,255,0.08); }

  :root[data-theme="dark"] .doc code { background: rgba(255,255,255,0.08); }

.doc strong { color: var(--text-1); font-weight: 600; }
.doc a { color: var(--accent); }
.doc a:hover { text-decoration: underline; }


/* ============================================================
   §23 FAQ / Disclosure .faq-list / .faq-item
   原生 <details> + <summary> 实现，零 JS
   ============================================================ */
.faq-list {
  display: flex;
  flex-direction: column;
  gap: var(--space-3);
}
.faq-item {
  position: relative;
  background: var(--card-solid-bg);
  border-radius: var(--radius-md);
  box-shadow: var(--glass-shadow);
  isolation: isolate;
  transition: background .2s var(--easing);
  /* 不用 backdrop-filter（每页 4-8 个，合成层叠加成本高）*/
}
.faq-item::before {
  content: ""; position: absolute; inset: 0;
  border-radius: inherit;
  padding: 1px;
  background: var(--border-grad);
  -webkit-mask: linear-gradient(#000,#000) content-box, linear-gradient(#000,#000);
  -webkit-mask-composite: xor; mask-composite: exclude;
  pointer-events: none; z-index: 1;
}
.faq-item summary {
  list-style: none;
  cursor: pointer;
  padding: 16px 56px 16px 22px;
  font-size: 15px;
  font-weight: 500;
  color: var(--text-1);
  position: relative;
  z-index: 2;
  transition: color .2s var(--easing);
}
.faq-item summary::-webkit-details-marker { display: none; }
.faq-item summary::after {
  content: "";
  position: absolute;
  right: 22px; top: calc(50% - 5px);
  width: 8px; height: 8px;
  border-right: 2px solid var(--text-3);
  border-bottom: 2px solid var(--text-3);
  transform: rotate(45deg);
  transition: transform .25s var(--easing-spring);
}
.faq-item[open] summary::after {
  transform: translateY(2px) rotate(225deg);
}
.faq-item summary:hover { color: var(--accent); }
/* 展开态强调：当前问题更醒目，一眼可辨"哪个被打开" */
.faq-item[open] { background: var(--glass-bg-strong); }
.faq-item[open] summary { color: var(--accent); }
.faq-item[open] summary::after { border-color: var(--accent); }
.faq-body {
  padding: 0 22px 18px;
  font-size: 14px;
  line-height: 1.7;
  color: var(--text-2);
  position: relative;
  z-index: 2;
}


/* ============================================================
   §24 通用卡片 .card / .card-grid
   - .card 玻璃卡片基础（自带 ::before gradient border）
   - .card-hover 自带 hover 上浮 + 阴影加深
   - .card-grid 自适应网格（默认 minmax 260px）
   - .card-grid-sm 紧凑网格（minmax 180px）
   ============================================================ */
.card-grid {
  display: grid;
  grid-template-columns: repeat(auto-fill, minmax(260px, 1fr));
  gap: var(--space-4);
}
.card-grid-sm {
  grid-template-columns: repeat(auto-fill, minmax(180px, 1fr));
  gap: var(--space-3);
}
@media (max-width: 480px) {
  .card-grid-sm { grid-template-columns: repeat(2, 1fr); }
}

.card {
  position: relative;
  display: flex;
  align-items: center;
  gap: var(--space-3);
  padding: 14px 16px;
  border-radius: var(--radius-md);
  background: var(--card-solid-bg);
  isolation: isolate;
  box-shadow: var(--glass-shadow);
  transition: transform .2s var(--easing), box-shadow .2s var(--easing), background .2s var(--easing);
  min-width: 0;     /* 防 grid item 被内部 nowrap 文本撑爆，保证列宽 1fr 1fr 严格相等 */
  /* 不用 backdrop-filter（每页 6-12 张，合成层风暴主因）*/
}
.card-hover:hover { background: var(--card-solid-bg-hover); }
.card::before {
  content: ""; position: absolute; inset: 0;
  border-radius: inherit;
  padding: 1px;
  background: var(--border-grad);
  -webkit-mask: linear-gradient(#000,#000) content-box, linear-gradient(#000,#000);
  -webkit-mask-composite: xor; mask-composite: exclude;
  pointer-events: none;
}
.card-hover:hover {
  transform: translateY(-2px);
  box-shadow: var(--glass-shadow-hover);
}
.card-name {
  flex: 1;
  min-width: 0;     /* 配合 nowrap + ellipsis：不允许 flex 项被内容撑爆 */
  font-size: 14px;
  font-weight: 500;
  color: var(--text-1);
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}
@media (hover: none) {
  .card-hover:hover { transform: none; }
}


/* ============================================================
   §25 玻璃外光环 ::after（v1 视觉，性能优化版）
   ----------------------------------------------------------------
   性能要点（避免合成层爆炸 / 滚动卡顿）：
   ① ::after 不加 transform / will-change / backdrop-filter / opacity 动画
      → 浏览器不会把它提升为独立合成层，仅在父元素图层内 paint
   ② 父元素 contain: layout style → 限制 reflow 范围（不要 contain: paint，会裁切外光环）
   ③ z-index: -1 + pointer-events: none → 不参与命中测试 / 不进合成栈顶
   ④ border-radius: inherit → 自动跟随父元素圆角
   ⑤ 不在 hover 改 ::after 几何属性（不触发 layout）—— 颜色变化由 box-shadow 处理
   ----------------------------------------------------------------
   用法：HTML 元素加 .glass-ring 类即可（必须有 border-radius；父元素自动 position: relative）
   ============================================================ */
/* 公共组件类：自动获得外光环（无需 HTML 加 .glass-ring）
   .glass-ring：通用 helper（自定义元素加这个类）
   .header-inner / .footer-grid：站点级 chrome（导航 + 页脚）
   .tool-hero-inner / .panel / .faq-item / .card-hover：工具页常用组件 */
.glass-ring,
.header-inner,
.footer-grid,
.tool-hero-inner,
.panel,
.faq-item,
.card-hover {
  position: relative;
  contain: layout style;
}
.glass-ring::after,
.header-inner::after,
.footer-grid::after,
.tool-hero-inner::after,
.panel::after,
.faq-item::after,
.card-hover::after,
.breadcrumb-wrap::after {
  content: "";
  position: absolute;
  inset: -4px;
  border-radius: inherit;
  /* 暖金外光环：从白冷光 → 米色淡晕 */
  background: rgba(255, 243, 224, 0.18);
  border: 1px solid rgba(184, 115, 46, 0.28);
  box-shadow:
    inset 0 1px 0 rgba(255, 247, 232, 0.78),
    inset 0 -1px 0 rgba(107, 52, 16, 0.04),
    0 0 0 1px rgba(107, 52, 16, 0.05);
  z-index: -1;
  pointer-events: none;
}

  :root[data-theme="dark"] .glass-ring::after,
  :root[data-theme="dark"] .header-inner::after,
  :root[data-theme="dark"] .footer-grid::after,
  :root[data-theme="dark"] .tool-hero-inner::after,
  :root[data-theme="dark"] .panel::after,
  :root[data-theme="dark"] .faq-item::after,
  :root[data-theme="dark"] .card-hover::after,
  :root[data-theme="dark"] .breadcrumb-wrap::after {
    background: rgba(212, 165, 116, 0.05);
    border-color: rgba(212, 165, 116, 0.14);
    box-shadow:
      inset 0 1px 0 rgba(212, 165, 116, 0.10),
      inset 0 -1px 0 rgba(0,0,0,0.22),
      0 0 0 1px rgba(0,0,0,0.30);
  }

[data-theme="dark"] .glass-ring::after,
[data-theme="dark"] .header-inner::after,
[data-theme="dark"] .footer-grid::after,
[data-theme="dark"] .tool-hero-inner::after,
[data-theme="dark"] .panel::after,
[data-theme="dark"] .faq-item::after,
[data-theme="dark"] .card-hover::after,
[data-theme="dark"] .breadcrumb-wrap::after {
  background: rgba(212, 165, 116, 0.05);
  border-color: rgba(212, 165, 116, 0.14);
  box-shadow:
    inset 0 1px 0 rgba(212, 165, 116, 0.10),
    inset 0 -1px 0 rgba(0,0,0,0.22),
    0 0 0 1px rgba(0,0,0,0.30);
}


/* ============================================================
   §27 移动端紧凑优化 (≤768px / ≤480px)
   节省竖向空间、避免内容撑爆，覆盖所有工具页公共组件
   ============================================================ */
@media (max-width: 768px) {
  /* Section / Breadcrumb 间距压缩（大厂移动端紧凑节奏：24px）*/
  .section { padding: var(--space-5) 0; }
  .section-head { margin-bottom: var(--space-4); }
  .section-title { font-size: clamp(20px, 4.5vw, 24px); }

  /* Tool Hero 移动端 padding 0（间距由 main > * + * margin-top 单边控制）*/
  .tool-hero { padding-top: 0; padding-bottom: 0; }
  .tool-hero-text h1 { font-size: 22px; line-height: 1.25; }
  .tool-hero-text p { font-size: 13px; }
  .tool-hero-inner .icon-tile-lg { width: 48px; height: 48px; font-size: 20px; border-radius: 14px; }

  /* Panel：head 收紧 / body padding 减小 */
  .panel-head { padding: 12px var(--space-3); }
  .panel-title { font-size: 13px; }
  .panel-toolbar { gap: 2px; }
  .panel-body { padding: var(--space-3); }
  .panel-body.no-pad { padding: 0; }

  /* Code area：移动端高度减小（避免占屏过多） */
  .code-area { min-height: 220px; font-size: 13px; padding: var(--space-3); }

  /* Actions bar：移动端强制单行 + 横向滚动（按钮文案长短不一，等分会挤爆/省略号丑）
     justify-content: flex-start 覆盖默认 center，避免横向滚动起始位置不一致 */
  .tool-actions-bar {
    flex-wrap: nowrap;
    overflow-x: auto;
    -webkit-overflow-scrolling: touch;
    scrollbar-width: none;
    justify-content: flex-start;
    gap: 6px;
    padding: 4px 0;
    /* 边缘渐隐提示有更多内容（CSS mask 不影响合成层）*/
    -webkit-mask-image: linear-gradient(90deg, transparent 0, #000 16px, #000 calc(100% - 16px), transparent 100%);
            mask-image: linear-gradient(90deg, transparent 0, #000 16px, #000 calc(100% - 16px), transparent 100%);
  }
  .tool-actions-bar::-webkit-scrollbar { display: none; }
  .tool-actions-bar > .btn {
    flex-shrink: 0;
    height: 40px;
    padding: 0 16px;
    font-size: 13px;
    white-space: nowrap;
  }

  /* Doc：文档紧凑 */
  .doc { padding: var(--space-4); font-size: 13px; line-height: 1.7; }
  .doc h2 { font-size: 17px; }
  .doc h3 { font-size: 15px; }

  /* FAQ：折叠项紧凑 */
  .faq-item > summary { padding: 14px 46px 14px 18px; font-size: 14px; }
  .faq-item > summary::after { right: 18px; }
  .faq-body { padding: 0 18px 14px; font-size: 13px; }

  /* Card grid 间距 + 相关工具网格强制 2 列（避免 auto-fill 列数随屏宽变化）*/
  .card-grid { gap: var(--space-3); }
  .card-grid-sm { grid-template-columns: repeat(2, 1fr); gap: var(--space-3); }
  .card { padding: 12px 14px; gap: var(--space-2); }
  .card-name { font-size: 13px; }
}

@media (max-width: 480px) {
  /* 更紧凑（小屏手机）*/
  .section { padding: var(--space-4) 0; }
  .section-head { margin-bottom: var(--space-3); }
  .tool-hero { padding-top: var(--space-3); padding-bottom: var(--space-2); }
  .tool-hero-text h1 { font-size: 20px; }
  .code-area { min-height: 180px; }
  .doc { padding: var(--space-3); }
  .doc h2 { font-size: 16px; }
  .tool-actions-bar > .btn { padding: 0 12px; font-size: 12.5px; }
}


/* ============================================================
   §28 站点 Header
   sticky 顶部 + 滚动后增强玻璃感（.header.scrolled）
   组件：.header / .header-inner / .logo / .nav / .header-actions / .kbd-search / .theme-toggle
   外光环 ::after 由 §25 的 .header-inner 自动应用
   ============================================================ */
.header {
  position: sticky;
  top: var(--space-3);
  z-index: 100;
  margin: var(--space-3) auto 0;
  padding: 0 var(--space-3);
  transform: translateZ(0);
}
.header-inner {
  max-width: var(--container-w);
  margin: 0 auto;
  height: 60px;
  padding: 0 var(--space-4) 0 var(--space-3);
  display: flex;
  align-items: center;
  gap: var(--space-4);
  border-radius: var(--radius-md);
  transition: box-shadow .3s var(--easing), background .3s var(--easing);
}
/* 滚动后 header 增强：渐变玻璃顶光泽 + 主投影 */
.header.scrolled .header-inner {
  /* P6 修复：v1 玻璃残留纯白（金气禁用）→ 暖米白，与全站米底同调 */
  --glass-bg:
    linear-gradient(180deg, rgba(255,250,238,0.72) 0%, transparent 35%),
    rgba(255,250,238,0.72);
  box-shadow: var(--glass-shadow-hover);
}
[data-theme="dark"] .header.scrolled .header-inner {
  /* P6 修复：v1 残留冷蓝灰 #1C1C26（水气）→ 暖栗，暖光高光替代纯白 */
  --glass-bg:
    linear-gradient(180deg, rgba(255,230,200,0.07) 0%, transparent 35%),
    rgba(45,28,18,0.72);
}

  :root[data-theme="dark"] .header.scrolled .header-inner {
    /* P6 修复：同上，冷蓝灰 → 暖栗 */
    --glass-bg:
      linear-gradient(180deg, rgba(255,230,200,0.07) 0%, transparent 35%),
      rgba(45,28,18,0.72);
  }


.logo {
  display: flex;
  align-items: center;
  gap: var(--space-2);
  padding: var(--space-1) var(--space-2);
  border-radius: var(--radius-sm);
  transition: transform .2s var(--easing);
}
.logo:hover { transform: translateY(-1px); }
.logo-mark {
  width: 36px; height: 36px;
  display: grid; place-items: center;
  border-radius: var(--radius-sm);
  background: var(--accent-grad);
  color: var(--on-accent);
  font-size: 18px;
  font-weight: 700;
  letter-spacing: -0.02em;
  box-shadow:
    0 4px 12px rgba(192,57,43,0.35),
    inset 0 1px 0 rgba(255,255,255,0.4);
}
.logo-text { font-size: 17px; font-weight: 600; letter-spacing: -0.01em; }
.logo-img {
  height: 36px;
  width: auto;
  max-width: 160px;
  display: block;
  border-radius: var(--radius-sm);
  object-fit: contain;
}
.footer-contact {
  display: flex;
  flex-wrap: wrap;
  gap: var(--space-3);
  font-size: 13px;
  color: var(--text-3);
  margin-top: var(--space-2);
}
.footer-contact a {
  color: var(--text-3);
  text-decoration: none;
}
.footer-contact a:hover { color: var(--accent); }

.nav { flex: 1; display: flex; gap: var(--space-1); }
.nav a {
  padding: 8px 14px;
  border-radius: var(--radius-sm);
  font-size: 14px;
  color: var(--text-2);
  transition: all .2s var(--easing);
}
.nav a:hover { color: var(--text-1); background: var(--accent-soft); }

.header-actions {
  display: flex;
  align-items: center;
  gap: var(--space-2);
  margin-left: auto;     /* 移动端 nav 隐藏后仍把按钮推到右边 */
}
.kbd-search {
  display: flex; align-items: center;
  gap: var(--space-2);
  height: 36px;
  padding: 0 12px;
  border-radius: var(--radius-sm);
  background: var(--glass-bg-soft);
  color: var(--text-2);
  font-size: 13px;
  transition: all .2s var(--easing);
  position: relative;
}
.kbd-search::before {
  content: ""; position: absolute; inset: 0;
  border-radius: inherit;
  padding: 1px;
  background: var(--border-grad);
  -webkit-mask: linear-gradient(#000,#000) content-box, linear-gradient(#000,#000);
  -webkit-mask-composite: xor; mask-composite: exclude;
  pointer-events: none;
}
.kbd-search:hover { color: var(--text-1); transform: translateY(-1px); }
.kbd-search svg { width: 14px; height: 14px; }
.kbd-search kbd {
  font-family: var(--font-mono);
  font-size: 11px;
  padding: 2px 6px;
  border-radius: var(--radius-xs);
  background: rgba(107,52,16,0.06);
  color: var(--text-3);
}
[data-theme="dark"] .kbd-search kbd { background: rgba(255,255,255,0.08); }

  :root[data-theme="dark"] .kbd-search kbd { background: rgba(255,255,255,0.08); }


.theme-toggle {
  width: 36px; height: 36px;
  display: grid; place-items: center;
  border-radius: var(--radius-sm);
  background: var(--glass-bg-soft);
  color: var(--text-2);
  transition: all .2s var(--easing);
  position: relative;
}
.theme-toggle::before {
  content: ""; position: absolute; inset: 0;
  border-radius: inherit;
  padding: 1px;
  background: var(--border-grad);
  -webkit-mask: linear-gradient(#000,#000) content-box, linear-gradient(#000,#000);
  -webkit-mask-composite: xor; mask-composite: exclude;
  pointer-events: none;
}
.theme-toggle:hover { color: var(--text-1); transform: translateY(-1px); }
.theme-toggle svg {
  width: 16px; height: 16px;
  position: absolute;
  transition: opacity .3s var(--easing), transform .35s cubic-bezier(0.34, 1.3, 0.64, 1);
}
/* 双态主题图标显隐 —— 不跟随系统，仅显示用户手动选定的状态。
   浅色态显示太阳；深色态显示月亮。 */
.theme-toggle .icon-sun,
.theme-toggle .icon-moon { opacity: 0; transform: rotate(-90deg) scale(0.6); }
[data-theme-mode="light"] .theme-toggle .icon-sun  { opacity: 1; transform: rotate(0) scale(1); }
[data-theme-mode="dark"]  .theme-toggle .icon-moon { opacity: 1; transform: rotate(0) scale(1); }

@media (max-width: 768px) {
  .nav { display: none; }
  .kbd-search span, .kbd-search kbd { display: none; }
  .kbd-search { width: 36px; padding: 0; justify-content: center; }
}
@media (hover: none) {
  .logo:hover, .kbd-search:hover, .theme-toggle:hover { transform: none; }
}

/* 解决 .container.breadcrumb-wrap 同元素复合类的宽度对齐问题：
   - .tool-hero-inner 在 .container 内，宽度 = container 内容区 = viewport - 2*container_padding
   - .container.breadcrumb-wrap 是同元素，wrap 的 padding shorthand 覆盖了 container 的 padding-left/right
     导致 wrap 边界 = 100% viewport（比 Hero 宽），同时 ::after 外扩 4px 会溢出 viewport
   - 修复：让 wrap 主动缩进，外边界对齐 Hero/工具卡（viewport - 24px），内部用自己的 padding */
@media (max-width: 1200px) {
  .container.breadcrumb-wrap {
    width: calc(100% - 2 * max(var(--space-3), env(safe-area-inset-left)));
    margin-left: auto;
    margin-right: auto;
    padding-left: var(--space-4);
    padding-right: var(--space-4);
  }
}
@media (max-width: 480px) {
  .container.breadcrumb-wrap {
    padding-top: var(--space-2);
    padding-bottom: var(--space-2);
    font-size: 12px;
  }
}

/* 命理工具页 Hero 下方免责声明（复用 .container.breadcrumb-wrap 视觉，叠加显眼语义色彩） */
.mingli-tip-wrap {
  gap: var(--space-3);
  padding: var(--space-4) var(--space-5);
  border-left: 4px solid var(--accent);
}
.mingli-tip-ico {
  flex-shrink: 0;
  width: 22px;
  height: 22px;
}
.mingli-tip-text {
  margin: 0;
  font-size: 14.5px;
  line-height: 1.75;
  color: var(--text-1);
  font-family: var(--font-serif);
  min-width: 0;
  flex: 1;
}
.mingli-tip-text strong { color: var(--accent-2); font-size: 15px; }
.mingli-tip-text .mingli-em { color: var(--accent); font-weight: 700; }
.mingli-tip-text .mingli-em-strong { color: var(--accent-2); font-weight: 700; }
.mingli-tip-dot { color: var(--text-3); margin: 0 6px; }

@media (max-width: 768px) {
  .mingli-tip-wrap {
    padding: var(--space-3) var(--space-4);
    border-left-width: 3px;
    gap: var(--space-2);
  }
  .mingli-tip-ico { width: 18px; height: 18px; }
  .mingli-tip-text { font-size: 13px; line-height: 1.7; }
  .mingli-tip-text strong { font-size: 13.5px; }
}
@media (max-width: 480px) {
  .mingli-tip-wrap {
    padding: var(--space-3);
    flex-direction: row;
    align-items: flex-start;
  }
  .mingli-tip-ico { margin-top: 2px; }
  .mingli-tip-text { font-size: 12.5px; }
  .mingli-tip-dot { display: none; }
  .mingli-tip-text strong { display: block; margin-bottom: 2px; }
}


/* ============================================================
   §29 站点 Footer
   桌面：brand 整行 + 5 列链接 / 移动端：手风琴折叠（Apple/Stripe/Microsoft 主流做法）
   组件：.footer / .footer-grid / .footer-brand / .footer-col / .copyright
   外光环 ::after 由 §25 的 .footer-grid 自动应用
   ============================================================ */
.footer {
  padding: var(--space-8) 0 var(--space-5);
}
/* footer-grid: 桌面 = 上下两段（brand 整行 + 链接列） */
.footer-grid {
  padding: var(--space-6);
  border-radius: var(--radius-xl);
  display: flex;
  flex-direction: column;
  gap: var(--space-5);
  background: var(--container-solid-bg);
  position: relative;
  isolation: isolate;
  box-shadow: var(--glass-shadow);
  /* 不用 backdrop-filter（避免 Safari 滚动到底部时白屏）*/
}
.footer-grid::before {
  content: "";
  position: absolute;
  inset: 0;
  border-radius: inherit;
  padding: 1px;
  background: var(--border-grad);
  -webkit-mask: linear-gradient(#000,#000) content-box, linear-gradient(#000,#000);
  -webkit-mask-composite: xor; mask-composite: exclude;
  pointer-events: none;
}
.footer-brand .logo { padding: 0; margin-bottom: var(--space-3); }
.footer-brand p {
  font-size: 13px;
  color: var(--text-3);
  line-height: 1.7;
  max-width: 560px;
}
.footer-brand p + p { margin-top: 4px; }
/* 链接区：5 列均分 + 顶部分隔线 */
.footer-links {
  display: grid;
  grid-template-columns: repeat(5, 1fr);
  gap: var(--space-5);
  padding-top: var(--space-5);
  border-top: 1px solid var(--divider);
}

.footer-col > summary { list-style: none; cursor: default; pointer-events: none; }
.footer-col > summary::-webkit-details-marker { display: none; }
.footer-col > summary > h4,
.footer h4 {
  font-size: 14px;
  font-weight: 600;
  color: var(--text-1);
  margin-bottom: var(--space-3);
  letter-spacing: -0.005em;
}

.footer ul li { margin-bottom: 10px; }
.footer ul li a {
  display: inline-block;
  font-size: 13px;
  color: var(--text-3);
  transition: color .2s var(--easing), transform .2s var(--easing);
}
.footer ul li a:hover {
  color: var(--accent);
  transform: translateX(3px);
}
.copyright {
  margin-top: var(--space-5);
  text-align: center;
  font-size: 12px;
  color: var(--text-soft);
}

/* ===== 移动端 footer：手风琴折叠 ===== */
@media (max-width: 768px) {
  .footer-grid {
    gap: 0;
    padding: var(--space-5);
  }
  .footer-brand {
    padding-bottom: var(--space-4);
    border-bottom: 1px solid var(--divider);
  }
  .footer-links {
    grid-template-columns: 1fr;
    gap: 0;
    padding-top: 0;
    border-top: 0;
  }
  .footer-col { border-bottom: 1px solid var(--divider); }
  .footer-col:last-of-type { border-bottom: 0; }
  .footer-col > summary {
    display: flex;
    align-items: center;
    justify-content: space-between;
    padding: 14px 0;
    cursor: pointer;
    pointer-events: auto;
    color: var(--text-1);
    transition: color .2s var(--easing);
  }
  .footer-col > summary > h4 { margin: 0; font-size: 14px; font-weight: 600; }
  .footer-col > summary:hover { color: var(--accent); }
  .footer-col > summary::after {
    content: "";
    width: 8px; height: 8px;
    border-right: 2px solid var(--text-3);
    border-bottom: 2px solid var(--text-3);
    transform: rotate(45deg);
    transition: transform .25s var(--easing-spring);
  }
  .footer-col[open] > summary::after { transform: rotate(225deg); }
  .footer-col > ul { padding-bottom: 14px; }
}


/* ============================================================
   §30 代码 Tabs（多语言代码示例组件）
   组件：.code-tabs / .code-tablist / .code-tab / .code-panes / .code-pane / .code-copy
   用法：HTML 给容器加 class="code-tabs glass-ring"，每个 tab 加 data-lang 切换
   外光环：HTML 显式加 .glass-ring（不能内置，因为 §25 已注册的元素都是站点级 chrome）
   ============================================================ */
.code-tabs {
  background: var(--container-solid-bg);
  border-radius: var(--radius-lg);
  box-shadow: var(--glass-shadow);
  isolation: isolate;
  /* 不能 overflow: hidden —— 会裁掉 .glass-ring::after 外光环 */
}
/* 标签栏：顶部加金光晕渐变（与 .diagram-svg 呼应） */
.code-tablist {
  display: flex;
  flex-wrap: wrap;
  gap: 4px;
  padding: 10px 12px 0;
  border-bottom: 1px solid var(--divider);
  background:
    linear-gradient(180deg, rgba(184, 115, 46, 0.05), transparent),
    transparent;
  border-radius: var(--radius-lg) var(--radius-lg) 0 0;
}
.code-tab {
  position: relative;
  padding: 10px 16px;
  border-radius: var(--radius-sm) var(--radius-sm) 0 0;
  font-family: var(--font-mono);
  font-size: 13px;
  font-weight: 600;
  letter-spacing: 0.04em;
  color: var(--text-3);
  background: transparent;
  cursor: pointer;
  transition: color .2s var(--easing), background .2s var(--easing);
  -webkit-user-select: none;
  user-select: none;
}
.code-tab:hover { color: var(--accent); background: var(--accent-soft); }
.code-tab.is-active {
  color: var(--accent);
  background: var(--accent-soft);
  font-weight: 700;
}
/* active tab 底部 2px 朱红色条（视觉锚点，强化选中态） */
.code-tab.is-active::after {
  content: '';
  position: absolute;
  left: 0; right: 0; bottom: -1px;
  height: 2px;
  background: var(--accent);
  border-radius: 1px;
}
.code-panes { position: relative; }
.code-pane {
  display: none;
  margin: 0;
  padding: 20px 24px;
  background: var(--surface-2);
  border-radius: 0 0 var(--radius-lg) var(--radius-lg);
  font-family: var(--font-mono);
  font-size: 13px;
  line-height: 1.75;
  color: var(--text-1);
  tab-size: 2;
  overflow-x: auto;
  white-space: pre;
  position: relative;
}
.code-pane.is-active { display: block; }
.code-pane code { font: inherit; color: inherit; background: transparent; }
.code-copy {
  position: absolute;
  top: 14px;
  right: 14px;
  padding: 6px 12px;
  border-radius: var(--radius-sm);
  font-family: var(--font-mono);
  font-size: 11px;
  font-weight: 700;
  letter-spacing: 0.08em;
  color: var(--text-2);
  background: var(--glass-bg-strong);
  border: 1px solid var(--divider);
  cursor: pointer;
  transition: all .2s var(--easing);
  z-index: 2;
}
.code-copy:hover {
  color: var(--accent);
  background: var(--accent-soft);
  border-color: rgba(192, 57, 43, 0.30);
}
.code-copy.is-copied {
  color: var(--gold-deep);
  background: var(--gold-soft);
  border-color: var(--gold);
}
.code-copy.is-copied::before {
  content: '✓ ';
}

/* 暖色滚动条（代码区横滚） */
.code-pane::-webkit-scrollbar { height: 8px; }
.code-pane::-webkit-scrollbar-track { background: transparent; }
.code-pane::-webkit-scrollbar-thumb {
  background: rgba(184, 115, 46, 0.25);
  border-radius: var(--radius-xs);
}
.code-pane::-webkit-scrollbar-thumb:hover {
  background: rgba(184, 115, 46, 0.45);
}

@media (max-width: 768px) {
  .code-pane { padding: 16px 14px; font-size: 12px; }
  .code-tab { padding: 7px 10px; font-size: 12px; }
}


/* ============================================================
   §31 错误对照表（Before/After 对比卡片）
   组件：.error-list / .error-item / .error-cols / .error-col(-bad/-ok) / .error-tag / .error-note
   用法：HTML 给每个错误卡加 class="error-item glass-ring" 自动获得外光环
   ============================================================ */
.error-list {
  display: flex;
  flex-direction: column;
  gap: var(--space-4);
}
.error-item {
  position: relative;
  padding: var(--space-5);
  border-radius: var(--radius-md);
  background: var(--glass-bg);
  border: 1px solid rgba(184, 115, 46, 0.15);
  isolation: isolate;
  overflow: hidden;
  transition: transform .2s var(--easing), box-shadow .2s var(--easing), border-color .2s var(--easing);
}
/* 顶部色条：朱红 → 赭金（与 .case-item 一致，视觉锚点统一） */
.error-item::before {
  content: '';
  position: absolute;
  left: 0; top: 0; right: 0;
  height: 3px;
  background: linear-gradient(90deg, var(--accent), var(--gold));
  z-index: 1;
}
.error-item:hover {
  border-color: rgba(184, 115, 46, 0.32);
  box-shadow: 0 12px 28px rgba(107, 52, 16, 0.08), 0 4px 10px rgba(107, 52, 16, 0.05);
}
.error-title {
  font-size: 16px;
  font-weight: 700;
  color: var(--text-1);
  margin-bottom: var(--space-4);
  letter-spacing: 0.02em;
}
.error-cols {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: var(--space-3);
  margin-bottom: var(--space-3);
}
@media (max-width: 640px) {
  .error-cols { grid-template-columns: 1fr; }
}
.error-col {
  position: relative;
  padding: 32px 14px 14px;
  border-radius: var(--radius-sm);
  font-family: var(--font-mono);
  font-size: 12.5px;
  line-height: 1.65;
}
.error-col pre { margin: 0; white-space: pre-wrap; word-break: break-all; }
.error-col code {
  font: inherit;
  background: transparent;
  padding: 0;
  border-radius: 0;
}
/* 错误列：朱红弱底 + 朱红边 + 左侧 3px 朱红色条 */
.error-col-bad {
  background: var(--accent-soft);
  color: var(--text-1);
  border: 1px solid rgba(192, 57, 43, 0.22);
  border-left: 3px solid var(--accent);
}
/* 修复列：赭金弱底 + 金边 + 左侧 3px 赭金色条（替代命格忌神绿色） */
.error-col-ok {
  background: var(--gold-soft);
  color: var(--text-1);
  border: 1px solid rgba(184, 115, 46, 0.28);
  border-left: 3px solid var(--gold);
}
.error-tag {
  position: absolute;
  top: 10px;
  left: 12px;
  font-size: 11px;
  font-weight: 700;
  letter-spacing: 0.12em;
  text-transform: uppercase;
  font-family: var(--font-sans);
  padding: 2px 8px;
  border-radius: var(--radius-xs);
}
.error-col-bad .error-tag {
  color: var(--glass-bg-strong);
  background: var(--accent);
}
.error-col-ok .error-tag {
  color: var(--glass-bg-strong);
  background: var(--gold);
}
.error-note {
  font-size: 13px;
  color: var(--text-2);
  line-height: 1.75;
  margin: 0;
  padding: var(--space-3) var(--space-4);
  background: var(--surface-2);
  border-radius: var(--radius-sm);
  border-left: 3px solid var(--text-soft);
}
.error-note::before {
  content: '提示 · ';
  font-weight: 700;
  color: var(--text-3);
  letter-spacing: 0.08em;
}
.error-note code {
  padding: 1px 6px;
  border-radius: var(--radius-xs);
  background: var(--accent-soft);
  color: var(--accent);
  font-size: 12px;
  font-family: var(--font-mono);
}

@media (max-width: 640px) {
  .error-cols { grid-template-columns: 1fr; }
  .error-item { padding: var(--space-4); }
}


/* ============================================================
   §32 example-list — "输入 → 输出 + 解读" 三件套
   适用：生活（身份证拆解）/ 文本（多音字）/ 命理（八字示例）/ 字典（字义）
   用法：HTML 给 .example-item 加 .glass-ring 自动获得外光环
   ============================================================ */
.example-list {
  display: flex;
  flex-direction: column;
  gap: var(--space-4);
}
.example-item {
  padding: var(--space-4) var(--space-5);
  border-radius: var(--radius-lg);
  background: var(--card-solid-bg);
  box-shadow: var(--glass-shadow);
  isolation: isolate;
}
.example-title {
  font-size: 16px;
  font-weight: 600;
  color: var(--text-1);
  margin-bottom: var(--space-3);
  letter-spacing: -0.01em;
}
.example-cols {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: var(--space-3);
  margin-bottom: var(--space-3);
}
.example-col {
  position: relative;
  padding: 30px 14px 12px;
  border-radius: var(--radius-md);
  font-family: ui-monospace, SFMono-Regular, "JetBrains Mono", Menlo, Consolas, monospace;
  font-size: 12.5px;
  line-height: 1.55;
}
.example-col pre { margin: 0; white-space: pre-wrap; word-break: break-all; }
.example-col code { font: inherit; }
/* 输入 = 蓝色基调（不像错误用红） */
.example-col-input {
  background: rgba(192,57,43,0.08);
  border: 1px solid rgba(192,57,43,0.2);
  color: var(--text-1);
}
/* 输出/解析 = 绿色基调 */
.example-col-output {
  background: rgba(16,185,129,0.08);
  border: 1px solid rgba(16,185,129,0.2);
  color: var(--text-1);
}
.example-tag {
  position: absolute;
  top: 8px; left: 12px;
  font-size: 10.5px;
  font-weight: 600;
  letter-spacing: 0.04em;
  text-transform: uppercase;
  font-family: var(--font-sans);
}
.example-col-input .example-tag  { color: var(--accent); }
.example-col-output .example-tag { color: var(--success); }
.example-note {
  font-size: 13px;
  color: var(--text-2);
  line-height: 1.65;
  margin: 0;
}
.example-note code {
  padding: 1px 6px;
  border-radius: var(--radius-xs);
  background: var(--accent-soft);
  color: var(--accent);
  font-size: 12px;
  font-family: ui-monospace, SFMono-Regular, Menlo, monospace;
}
@media (max-width: 640px) {
  .example-cols { grid-template-columns: 1fr; }
  .example-item { padding: var(--space-4); }
}


/* ============================================================
   §33 formula-box — 公式推导
   适用：计算（房贷 / 个税）/ 命理（八字大运算法）/ 编码加密（哈希轮变换）
   ============================================================ */
.formula-box {
  padding: var(--space-5);
  border-radius: var(--radius-lg);
  background: var(--card-solid-bg);
  box-shadow: var(--glass-shadow);
  isolation: isolate;
}
.formula-head h3 {
  font-size: 16px;
  font-weight: 600;
  color: var(--text-1);
  margin-bottom: var(--space-4);
  letter-spacing: -0.01em;
}
/* 公式表达式：大字 monospace + 居中 + 浅色 accent 背景 */
.formula-expr {
  position: relative;
  padding: var(--space-5) var(--space-5);
  margin: var(--space-3) 0 var(--space-4);
  border-radius: var(--radius-md);
  background: var(--accent-soft);
  font-family: var(--font-mono);
  font-size: 19px;
  font-weight: 700;
  color: var(--accent-2);
  text-align: center;
  letter-spacing: 0.02em;
  overflow-x: auto;
  white-space: nowrap;
  border-top: 2px solid var(--accent);
  border-bottom: 2px solid var(--accent);
  box-shadow: inset 0 0 0 1px rgba(192, 57, 43, 0.10);
}
.formula-expr::before,
.formula-expr::after {
  content: '·';
  position: absolute;
  font-family: var(--font-serif);
  font-size: 32px;
  color: var(--accent);
  opacity: 0.45;
  top: 50%;
  transform: translateY(-50%);
  line-height: 1;
}
.formula-expr::before { left: 14px; }
.formula-expr::after  { right: 14px; }
.formula-expr sup, .formula-expr sub { font-size: 0.75em; }
/* 各项含义列表（左侧 monospace 变量 + 右侧解释） */
.formula-vars {
  list-style: none;
  padding: 0;
  margin: 0 0 var(--space-4);
  display: flex;
  flex-direction: column;
  gap: 6px;
}
.formula-vars li {
  font-size: 13.5px;
  color: var(--text-2);
  line-height: 1.6;
}
.formula-vars code {
  display: inline-block;
  min-width: 24px;
  padding: 1px 8px;
  margin-right: 8px;
  border-radius: var(--radius-xs);
  background: var(--accent-soft);
  color: var(--accent);
  font-family: ui-monospace, SFMono-Regular, Menlo, monospace;
  font-size: 12.5px;
  font-weight: 600;
  text-align: center;
}
/* 举例计算子区块（左侧 accent 边线 + 浅色背景） */
.formula-example {
  padding: var(--space-3) var(--space-4);
  border-radius: var(--radius-md);
  background: var(--glass-bg-soft);
  border-left: 3px solid var(--accent);
}
.formula-example h4 {
  font-size: 13px;
  font-weight: 600;
  color: var(--text-1);
  margin-bottom: 4px;
  letter-spacing: -0.005em;
}
.formula-example code {
  font-family: ui-monospace, SFMono-Regular, Menlo, monospace;
  font-size: 12.5px;
  color: var(--text-2);
}
@media (max-width: 768px) {
  .formula-box { padding: var(--space-4); }
  .formula-expr { font-size: 15px; padding: var(--space-3); }
  .formula-vars li { font-size: 13px; }
}


/* ============================================================
   §34 comparison-matrix — 多维度对比矩阵
   适用：编码 / 图片 / 音频 / 视频 / 文档 格式对比
   注意：表格横向滚动放在 .matrix-table-wrap，不在 .comparison-matrix（避免裁切外光环）
   ============================================================ */
.comparison-matrix {
  border-radius: var(--radius-lg);
  background: var(--card-solid-bg);
  box-shadow: var(--glass-shadow);
  isolation: isolate;
}
.matrix-head {
  padding: var(--space-4) var(--space-5);
  border-bottom: 1px solid var(--divider);
}
.matrix-head h3 {
  font-size: 16px;
  font-weight: 600;
  color: var(--text-1);
  margin: 0;
  letter-spacing: -0.01em;
}
.matrix-table-wrap {
  overflow-x: auto;
  -webkit-overflow-scrolling: touch;
  /* 底部跟随父级圆角 */
  border-radius: 0 0 var(--radius-lg) var(--radius-lg);
}
.matrix-table {
  width: 100%;
  border-collapse: collapse;
  font-size: 13.5px;
  font-variant-numeric: tabular-nums;
}
.matrix-table th,
.matrix-table td {
  padding: 12px 16px;
  text-align: left;
  border-bottom: 1px solid var(--divider);
  white-space: nowrap;
}
.matrix-table thead th {
  background: var(--glass-bg-soft);
  font-weight: 600;
  color: var(--text-1);
  position: sticky;
  top: 0;
  z-index: 1;
}
/* 第一列：指标名加粗 */
.matrix-table tbody td:first-child {
  font-weight: 500;
  color: var(--text-1);
}
.matrix-table tbody td { color: var(--text-2); }
.matrix-table tbody tr:last-child td { border-bottom: 0; }
.matrix-table tbody tr:hover td { background: var(--accent-soft); }
@media (max-width: 768px) {
  .matrix-head { padding: var(--space-3) var(--space-4); }
  .matrix-table th, .matrix-table td { padding: 10px 12px; font-size: 12.5px; }
}


/* ============================================================
   §35 reference-quote — 典籍 / 法规 / RFC 引用块
   适用：命理（典籍）/ 字典（出处）/ 网站 SEO（RFC）/ 法律
   ============================================================ */
.reference-quote {
  position: relative;
  padding: var(--space-5) var(--space-5) var(--space-4) var(--space-7);
  border-radius: var(--radius-lg);
  background: var(--card-solid-bg);
  box-shadow: var(--glass-shadow);
  isolation: isolate;
}
/* 大型装饰双引号 “ */
.reference-quote::before {
  content: "\201C";
  position: absolute;
  top: 0;
  left: var(--space-4);
  font-size: 64px;
  font-weight: 700;
  line-height: 1;
  color: var(--accent);
  opacity: 0.4;
  font-family: Georgia, "Times New Roman", serif;
  pointer-events: none;
}
.reference-quote .quote-body p {
  font-size: 15px;
  color: var(--text-1);
  line-height: 1.75;
  margin: 0 0 var(--space-3);
  /* 引用文本略 italic 区分文体 */
  font-style: italic;
}
.reference-quote footer {
  font-size: 13px;
  color: var(--text-3);
  text-align: right;
  font-style: normal;
}
.reference-quote footer cite { font-style: normal; }
.reference-quote footer a {
  color: var(--accent);
  text-decoration: none;
  transition: color .2s var(--easing);
}
.reference-quote footer a:hover { text-decoration: underline; }
@media (max-width: 640px) {
  .reference-quote { padding: var(--space-4) var(--space-4) var(--space-3) var(--space-6); }
  .reference-quote::before { font-size: 48px; left: var(--space-3); }
  .reference-quote .quote-body p { font-size: 14px; }
}


/* ============================================================
   §36 diagram-box — 原理图 / 流程图
   适用：编码（算法流程）/ 二维码（结构）/ 视频（编码流程）
   ============================================================ */
.diagram-box {
  padding: var(--space-5);
  border-radius: var(--radius-lg);
  background: var(--card-solid-bg);
  box-shadow: var(--glass-shadow);
  isolation: isolate;
}
.diagram-title {
  font-size: 16px;
  font-weight: 600;
  color: var(--text-1);
  margin-bottom: var(--space-4);
  letter-spacing: -0.01em;
}
.diagram-canvas {
  display: grid;
  place-items: center;
  padding: var(--space-4);
  margin-bottom: var(--space-4);
  border-radius: var(--radius-md);
  background: var(--glass-bg-soft);
  min-height: 200px;
}
.diagram-canvas svg,
.diagram-canvas img { max-width: 100%; height: auto; }
.diagram-legend {
  list-style: none;
  padding: 0;
  margin: 0;
  display: flex;
  flex-wrap: wrap;
  gap: var(--space-3) var(--space-4);
  justify-content: center;
  font-size: 13px;
  color: var(--text-2);
}
.diagram-legend li {
  display: inline-flex;
  align-items: center;
  gap: 6px;
}
.legend-dot {
  display: inline-block;
  width: 12px; height: 12px;
  border-radius: 3px;
  flex-shrink: 0;
  /* 颜色由 inline style 控制（每条目主题色不同） */
}
@media (max-width: 768px) {
  .diagram-box { padding: var(--space-4); }
  .diagram-canvas { padding: var(--space-3); min-height: 140px; }
}


/* ============================================================
   §37 case-card / case-grid — 场景案例
   适用：计算（典型房贷场景）/ 设计（配色案例）/ 起名（名人案例）/ 视频（剪辑案例）
   ============================================================ */
.case-grid {
  display: grid;
  grid-template-columns: repeat(auto-fill, minmax(320px, 1fr));
  gap: var(--space-4);
}
.case-card {
  display: flex;
  align-items: center;
  gap: var(--space-4);
  padding: var(--space-4) var(--space-5);
  border-radius: var(--radius-lg);
  background: var(--card-solid-bg);
  position: relative;
  isolation: isolate;
  box-shadow: var(--glass-shadow);
  text-decoration: none;
  transition:
    transform .35s cubic-bezier(0.34, 1.25, 0.64, 1),
    box-shadow .25s var(--easing),
    background .25s var(--easing);
  contain: layout style;
}
.case-card:hover {
  transform: translate3d(0, -3px, 0);
  background: var(--card-solid-bg-hover);
  box-shadow: var(--glass-shadow-hover);
}
/* 图标：与 home-demo .cat-icon 同款立体风格 */
.case-icon {
  flex-shrink: 0;
  width: 52px; height: 52px;
  display: grid; place-items: center;
  border-radius: var(--radius-md);
  font-size: 22px;
  font-weight: 700;
  color: var(--on-accent);
  letter-spacing: -0.03em;
  /* gradient 由 inline style 控制 */
  box-shadow:
    inset 0 1px 0 rgba(255,255,255,0.4),
    inset 0 -2px 6px rgba(60,30,10,0.15),
    0 4px 12px rgba(60,30,10,0.12);
  transition: transform .35s var(--easing-spring);
}
.case-card:hover .case-icon { transform: rotate(-4deg) scale(1.06); }
.case-body { flex: 1; min-width: 0; }
.case-title {
  font-size: 15px;
  font-weight: 600;
  color: var(--text-1);
  margin-bottom: 3px;
  letter-spacing: -0.005em;
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
  transition: color .2s var(--easing);
}
.case-card:hover .case-title { color: var(--accent); }
.case-desc {
  font-size: 12.5px;
  color: var(--text-3);
  line-height: 1.55;
  /* 两行截断 */
  display: -webkit-box;
  -webkit-line-clamp: 2;
  -webkit-box-orient: vertical;
  overflow: hidden;
}
.case-arrow {
  flex-shrink: 0;
  width: 18px; height: 18px;
  color: var(--text-soft);
  transition: transform .2s var(--easing), color .2s var(--easing);
}
.case-card:hover .case-arrow {
  color: var(--accent);
  transform: translateX(3px);
}
@media (max-width: 640px) {
  .case-grid { grid-template-columns: 1fr; gap: var(--space-3); }
  .case-card { padding: 14px 16px; gap: var(--space-3); }
  .case-icon { width: 44px; height: 44px; font-size: 18px; }
}
@media (hover: none) {
  .case-card:hover { transform: none; }
  .case-card:hover .case-icon { transform: none; }
}

/* ============================================================
   §32+ 首页页面级组件（hero / cat-card / tool-card / cta 等）
   从 home-demo.html 内联样式合并；分类页 / 工具列表页可复用
   ============================================================ */
/* ============================================================
   全能工具 · Liquid Glass 首页（独有样式）
   公共部分见 common.css §1-§31（tokens / reset / a11y / glass / btn /
   section / icon-tile / breadcrumb / modal / card / Header / Footer 等）
   ============================================================ */

/* ============================================================
   §25 玻璃外光环 ::after（home-demo 特有元素扩展）
   common.css §25 已覆盖 .header-inner / .footer-grid 等公共类，
   这里追加 home-demo 独有的 .search-hero / .widget / .cat-card / .tool-card / .cta
   视觉与 common.css §25 完全一致（确保跨页面光环统一）
   ============================================================ */
.search-hero,
.widget,
.cat-card,
.tool-card,
.article-card,
.article-subcat-card,
.cta {
  contain: layout style;
}
.search-hero::after,
.widget::after,
.cat-card::after,
.tool-card::after,
.article-card::after,
.article-subcat-card::after,
.cta::after {
  content: "";
  position: absolute;
  inset: -4px;
  border-radius: inherit;
  background: rgba(255,255,255,0.12);
  border: 1px solid rgba(255,255,255,0.5);
  box-shadow:
    inset 0 1px 0 rgba(255,255,255,0.75),
    inset 0 -1px 0 rgba(60,30,10,0.03),
    0 0 0 1px rgba(60,30,10,0.04);
  z-index: -1;
  pointer-events: none;
}

  :root[data-theme="dark"] .search-hero::after,
  :root[data-theme="dark"] .widget::after,
  :root[data-theme="dark"] .cat-card::after,
  :root[data-theme="dark"] .tool-card::after,
  :root[data-theme="dark"] .article-card::after,
  :root[data-theme="dark"] .article-subcat-card::after,
  :root[data-theme="dark"] .cta::after {
    background: rgba(255,255,255,0.04);
    border-color: rgba(255,255,255,0.1);
    box-shadow:
      inset 0 1px 0 rgba(255,255,255,0.08),
      inset 0 -1px 0 rgba(0,0,0,0.2),
      0 0 0 1px rgba(0,0,0,0.3);
  }

[data-theme="dark"] .search-hero::after,
[data-theme="dark"] .widget::after,
[data-theme="dark"] .cat-card::after,
[data-theme="dark"] .tool-card::after,
[data-theme="dark"] .article-card::after,
[data-theme="dark"] .article-subcat-card::after,
[data-theme="dark"] .cta::after {
  background: rgba(255,255,255,0.04);
  border-color: rgba(255,255,255,0.1);
  box-shadow:
    inset 0 1px 0 rgba(255,255,255,0.08),
    inset 0 -1px 0 rgba(0,0,0,0.2),
    0 0 0 1px rgba(0,0,0,0.3);
}

/* ============================================================
   Hero
   ============================================================ */
.hero {
  padding: var(--space-9) 0 var(--space-7);
  text-align: center;
}
@media (max-width: 768px) {
  .hero { padding: var(--space-6) 0 var(--space-5); }   /* 32 / 24 */
}
@media (max-width: 480px) {
  .hero { padding: var(--space-5) 0 var(--space-4); }   /* 24 / 16 */
}

.hero-badge {
  display: inline-flex;
  align-items: center;
  gap: var(--space-2);
  margin-bottom: var(--space-5);
  padding: 6px 14px 6px 8px;
  border-radius: var(--radius-full);
  background: var(--glass-bg-soft);
  font-size: 13px;
  color: var(--text-2);
  position: relative;
}
.hero-badge::before {
  content: "";
  position: absolute;
  inset: 0;
  border-radius: inherit;
  padding: 1px;
  background: var(--border-grad);
  -webkit-mask: linear-gradient(#000,#000) content-box, linear-gradient(#000,#000);
  -webkit-mask-composite: xor; mask-composite: exclude;
  pointer-events: none;
}
.hero-badge .dot {
  width: 6px; height: 6px; border-radius: 50%;
  background: #34c759;
  box-shadow: 0 0 12px rgba(52,199,89,0.6);
  animation: pulse 2s ease-in-out infinite;
}
@keyframes pulse {
  0%, 100% { opacity: 1; transform: scale(1); }
  50% { opacity: .6; transform: scale(0.85); }
}
.hero-badge strong { color: var(--text-1); font-weight: 600; }

.hero-title {
  font-size: clamp(42px, 6.5vw, 80px);
  font-weight: 700;
  line-height: 1.05;
  letter-spacing: -0.04em;
  margin: 0 0 var(--space-4);
  color: var(--text-1);
  /* 微妙 text-shadow 模拟玻璃环境光，避免大字"贴死"在背景上 */
  text-shadow: 0 4px 30px rgba(60,30,10,0.04);
}
/* "一站搞定" 用品牌渐变唱主角 —— 单点对比比整段渐变更清晰 */
.hero-title .accent {
  background: var(--accent-grad);
  -webkit-background-clip: text;
          background-clip: text;
  color: transparent;
  /* 给文字下方加一道微妙发光，强化主角感 */
  filter: drop-shadow(0 6px 20px rgba(192,57,43,0.15));
}
.hero-subtitle {
  max-width: 640px;
  margin: 0 auto var(--space-6);
  font-size: clamp(15px, 1.4vw, 18px);
  color: var(--text-2);
  line-height: 1.6;
}

/* Hero 搜索框（核心交互）—— 主角玻璃片 */
.search-hero {
  max-width: 680px;
  margin: 0 auto var(--space-5);
  display: flex;
  align-items: center;
  height: 72px;
  padding: 8px 8px 8px 26px;
  border-radius: var(--radius-full);
  /* 单独提升玻璃感，作为页面主角 */
  --glass-blur: 36px;
  --glass-sat: 220%;
  background: var(--glass-bg-strong);
  transition: box-shadow .3s var(--easing), transform .2s var(--easing);
}
.search-hero:focus-within {
  /* 不用 accent ring（双层蓝框丑）—— 仅靠玻璃阴影加重 + 微上浮表达激活感 */
  box-shadow: var(--glass-shadow-hover);
  transform: translateY(-1px);
}
/* 子 input 自身不重复显示 outline（全局 :where focus-visible 兜底已被父容器接管）*/
.search-input:focus,
.search-input:focus-visible {
  outline: none;
}
.search-hero .search-icon {
  width: 20px; height: 20px;
  color: var(--text-3);
  flex-shrink: 0;
}
.search-input {
  flex: 1;
  height: 100%;
  padding: 0 var(--space-3);
  font-size: 16px;
  color: var(--text-1);
}
.search-input::placeholder { color: var(--text-soft); }
.search-btn {
  height: 56px;
  padding: 0 32px;
  border-radius: var(--radius-full);
  background: var(--accent-grad);
  color: var(--on-accent);
  font-size: 15px;
  font-weight: 600;
  letter-spacing: 0.01em;
  transition: all .2s var(--easing);
  box-shadow:
    0 4px 12px rgba(192,57,43,0.3),
    inset 0 1px 0 rgba(255,255,255,0.3);
}
.search-btn:hover {
  transform: translateY(-1px);
  box-shadow:
    0 8px 20px rgba(192,57,43,0.4),
    inset 0 1px 0 rgba(255,255,255,0.4);
}
.search-btn:active { transform: translateY(0) scale(0.98); }

@media (max-width: 640px) {
  .search-hero { height: 60px; padding-left: 20px; }
  /* 注意：search-input 不能 < 16px，否则 iOS Safari focus 会自动放大页面 */
  .search-btn { height: 48px; padding: 0 20px; font-size: 14px; }
}

/* 热搜标签：单行展示，溢出可横向滑动，两端 mask 柔和淡出 */
.hot-tags {
  display: flex;
  align-items: center;
  flex-wrap: nowrap;
  justify-content: center;
  gap: var(--space-2);
  margin: 0 auto var(--space-7);
  max-width: 100%;
  padding: 4px 12px;
  overflow-x: auto;
  overflow-y: hidden;
  -webkit-overflow-scrolling: touch;
  scrollbar-width: none;        /* Firefox */
  /* 两端柔和淡出（24px 渐变），让溢出不突兀；同时给页面"看不完都美"的暗示 */
  -webkit-mask-image: linear-gradient(90deg, transparent 0, #000 24px, #000 calc(100% - 24px), transparent 100%);
          mask-image: linear-gradient(90deg, transparent 0, #000 24px, #000 calc(100% - 24px), transparent 100%);
}
.hot-tags::-webkit-scrollbar { display: none; }  /* WebKit */
.hot-tags-label {
  flex-shrink: 0;
  font-size: 13px;
  color: var(--text-3);
  margin-right: var(--space-1);
}
.tag {
  flex-shrink: 0;
  white-space: nowrap;
  padding: 6px 14px;
  border-radius: var(--radius-full);
  background: var(--glass-bg-soft);
  font-size: 13px;
  color: var(--text-2);
  transition: all .2s var(--easing);
  position: relative;
  --glass-blur: 16px;
}
.tag::before {
  content: "";
  position: absolute;
  inset: 0;
  border-radius: inherit;
  padding: 1px;
  background: var(--border-grad);
  -webkit-mask: linear-gradient(#000,#000) content-box, linear-gradient(#000,#000);
  -webkit-mask-composite: xor; mask-composite: exclude;
  pointer-events: none;
}
.tag:hover {
  color: var(--text-1);
  transform: translateY(-1px);
  background: var(--glass-bg);
}

/* Hero 数据条 */
.hero-stats {
  max-width: 760px;
  margin: 0 auto;
  padding: var(--space-5) var(--space-6);
  border-radius: var(--radius-lg);
  display: grid;
  grid-template-columns: repeat(4, 1fr);
  gap: var(--space-4);
}
.hero-stats .stat {
  text-align: center;
  position: relative;
}
/* 数字之间用 1px 半透明垂直分割线（最后一项不加） */
.hero-stats .stat:not(:last-child)::after {
  content: "";
  position: absolute;
  right: calc(var(--space-4) * -0.5);
  top: 18%;
  bottom: 18%;
  width: 1px;
  background: var(--divider);
}
.hero-stats .stat strong {
  display: block;
  font-size: clamp(28px, 3.5vw, 40px);
  font-weight: 700;
  letter-spacing: -0.03em;
  color: var(--text-1);
  line-height: 1;
  margin-bottom: 4px;
  /* tabular-nums：数字字符等宽对齐，避免 823 / 21 / 0 / ∞ 视觉错位 */
  font-variant-numeric: tabular-nums;
  font-feature-settings: "tnum";
}
.hero-stats .stat span {
  font-size: 13px;
  color: var(--text-3);
}
@media (max-width: 640px) {
  .hero-stats {
    grid-template-columns: repeat(2, 1fr);
    padding: var(--space-4);
    gap: var(--space-3);
  }
}

/* ============================================================
   Hero Widgets：今日黄历 + 今日金价
   全站统一玻璃风（与 cat-card / tool-card 一致），金币 SVG 保留金色作为品牌识别
   外光环走 §25 共享 ::after
   ============================================================ */
.hero-widgets {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: var(--space-4);
  max-width: 100%;
  margin: 0 auto;
  text-align: left;
}
.widget {
  display: flex;
  align-items: center;
  gap: var(--space-4);
  padding: var(--space-5);
  border-radius: var(--radius-xl);
  position: relative;
  background: var(--container-solid-bg);
  color: var(--text-1);
  box-shadow: var(--glass-shadow);
  /* 不用 backdrop-filter（避免 Safari 滚动白屏）*/
  isolation: isolate;
  text-decoration: none;
  transition: transform .25s var(--easing), box-shadow .25s var(--easing);
}
.widget:hover {
  transform: translate3d(0, -2px, 0);
  box-shadow: var(--glass-shadow-hover);
}

/* 黄历日号区 */
.almanac-day {
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  flex-shrink: 0;
  min-width: 56px;
  text-align: center;
}
.almanac-num {
  font-size: 56px;
  font-weight: 800;
  letter-spacing: -0.04em;
  line-height: 0.92;
  color: var(--text-1);
  font-variant-numeric: tabular-nums;
}
.almanac-week {
  font-size: 13px;
  color: var(--text-2);
  margin-top: 2px;
}

/* 黄历信息区 */
.almanac-info { flex: 1; min-width: 0; }
.almanac-date {
  font-size: 15px;
  font-weight: 600;
  color: var(--text-1);
  margin-bottom: 4px;
}
.almanac-ganzhi {
  font-size: 13px;
  color: var(--text-2);
  margin-bottom: 10px;
}
.almanac-yiji {
  display: flex;
  flex-wrap: wrap;
  gap: 6px 16px;
  font-size: 12.5px;
  color: var(--text-2);
}
.almanac-yiji .yi,
.almanac-yiji .ji {
  display: inline-flex;
  align-items: center;
  gap: 6px;
}
.almanac-yiji .yi::before,
.almanac-yiji .ji::before {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 16px;
  height: 16px;
  border-radius: 50%;
  font-size: 10px;
  font-weight: 700;
  flex-shrink: 0;
  color: var(--on-accent);
}
.almanac-yiji .yi::before { content: "✓"; background: #16a34a; }
.almanac-yiji .ji::before { content: "✕"; background: rgba(107,52,16,0.55); }

/* 金价 icon 区（SVG 金色保留作品牌识别）*/
.gold-icon-wrap {
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  flex-shrink: 0;
  min-width: 64px;
  text-align: center;
}
.gold-icon { width: 44px; height: 44px; }
.gold-label {
  font-size: 13px;
  color: var(--text-2);
  margin-top: 4px;
}

/* 金价信息区 */
.gold-info { flex: 1; min-width: 0; }
.gold-name {
  font-size: 14px;
  font-weight: 600;
  color: var(--text-1);
  margin-bottom: 4px;
}
.gold-price {
  display: flex;
  align-items: baseline;
  gap: 4px;
  margin-bottom: 4px;
}
.gold-price strong {
  font-size: 28px;
  font-weight: 800;
  color: var(--text-1);
  letter-spacing: -0.02em;
  font-variant-numeric: tabular-nums;
  line-height: 1;
}
.gold-price span {
  font-size: 13px;
  color: var(--text-2);
}
.gold-change {
  font-size: 13px;
  font-weight: 500;
  font-variant-numeric: tabular-nums;
}
.gold-change.up { color: #16a34a; }     /* 涨幅语义色（两种模式通用）*/
.gold-change.down { color: #dc2626; }

/* 进入箭头 */
.widget-arrow {
  margin-left: auto;
  flex-shrink: 0;
  width: 22px;
  height: 22px;
  color: var(--text-3);
  transition: transform .2s var(--easing), color .2s var(--easing);
}
.widget:hover .widget-arrow { transform: translateX(3px); color: var(--text-1); }

/* 暗色：忌 ✕ 徽标改半透明白（黑底在暗色玻璃上太突兀）*/
[data-theme="dark"] .almanac-yiji .ji::before {
  background: rgba(255,255,255,0.18);
  color: var(--text-1);
}

  :root[data-theme="dark"] .almanac-yiji .ji::before {
    background: rgba(255,255,255,0.18);
    color: var(--text-1);
  }


/* 移动端 */
@media (max-width: 768px) {
  .hero-widgets {
    grid-template-columns: 1fr;
    gap: var(--space-3);
  }
  .widget { padding: var(--space-4); gap: var(--space-3); border-radius: var(--radius-lg); }
  .almanac-num { font-size: 48px; }
  .gold-price strong { font-size: 24px; }
  .gold-icon { width: 36px; height: 36px; }
  .gold-icon-wrap { min-width: 52px; }
}


/* ============================================================
   Categories Grid（21 张分类卡）
   ============================================================ */
.category-grid {
  display: grid;
  grid-template-columns: repeat(auto-fill, minmax(260px, 1fr));
  gap: var(--space-4);
}

.cat-card {
  display: flex;
  align-items: center;
  gap: var(--space-4);
  padding: var(--space-4) var(--space-5);
  border-radius: var(--radius-lg);
  background: var(--card-solid-bg);
  position: relative;
  isolation: isolate;
  box-shadow: var(--glass-shadow);
  /* 不用 backdrop-filter（避免 21 张卡片合成层风暴 → iOS Safari 滚动白屏）*/
  transition:
    transform .35s cubic-bezier(0.34, 1.25, 0.64, 1),
    box-shadow .25s var(--easing),
    background .25s var(--easing);
}
.cat-card::before {
  content: "";
  position: absolute;
  inset: 0;
  border-radius: inherit;
  padding: 1px;
  background: var(--border-grad);
  -webkit-mask: linear-gradient(#000,#000) content-box, linear-gradient(#000,#000);
  -webkit-mask-composite: xor; mask-composite: exclude;
  pointer-events: none;
  z-index: 1;
}
/* cat-card 外光环走 §25 共享 ::after */
.cat-card:hover {
  transform: translate3d(0, -4px, 0);
  box-shadow: var(--glass-shadow-hover);
  background: var(--card-solid-bg-hover);
}
.cat-card:active { transform: translate3d(0, -2px, 0) scale(0.99); }
.cat-card:focus-visible {
  outline: 2px solid var(--accent);
  outline-offset: 3px;
  box-shadow: var(--glass-shadow-hover), 0 0 0 4px var(--accent-soft);
}

.cat-icon {
  flex-shrink: 0;
  width: 56px;
  height: 56px;
  display: grid;
  place-items: center;
  border-radius: var(--radius-lg);
  font-size: 24px;
  font-weight: 700;
  letter-spacing: -0.04em;
  color: var(--on-accent);
  /* 渐变背景由内联 style 控制（每分类不同）。三层阴影模拟立体玻璃质感 */
  box-shadow:
    inset 0 1px 0 rgba(255,255,255,0.5),
    inset 0 -3px 8px rgba(60,30,10,0.18),
    0 8px 20px rgba(60,30,10,0.18),
    0 2px 4px rgba(60,30,10,0.08);
  transition: transform .4s var(--easing-spring);
}
.cat-card:hover .cat-icon { transform: rotate(-6deg) scale(1.06); }

.cat-info { flex: 1; min-width: 0; }
.cat-info h3 {
  font-size: 16px;
  font-weight: 600;
  margin-bottom: 2px;
  letter-spacing: -0.01em;
}
.cat-meta {
  display: flex;
  align-items: center;
  gap: 8px;
  margin-bottom: 4px;
  font-size: 12px;
}
.cat-count {
  padding: 2px 8px;
  border-radius: 999px;
  background: var(--accent-soft);
  color: var(--accent);
  font-weight: 600;
}
.cat-info p {
  font-size: 12.5px;
  color: var(--text-3);
  line-height: 1.5;
  /* 两行省略：比单行 ellipsis 信息密度高，且不破坏卡片高度（grid 自适应） */
  display: -webkit-box;
  -webkit-line-clamp: 2;
  -webkit-box-orient: vertical;
  overflow: hidden;
}

.cat-arrow {
  flex-shrink: 0;
  width: 18px; height: 18px;
  color: var(--text-soft);
  transition: transform .2s var(--easing), color .2s var(--easing);
}
.cat-card:hover .cat-arrow { color: var(--accent); transform: translateX(4px); }

/* ============================================================
   Hot Tools Grid（24 张）
   ============================================================ */
.tool-grid {
  display: grid;
  grid-template-columns: repeat(auto-fill, minmax(180px, 1fr));
  gap: var(--space-3);
}
.tool-card {
  display: flex;
  align-items: center;
  gap: var(--space-3);
  padding: 14px 16px;
  border-radius: var(--radius-md);
  background: var(--card-solid-bg);
  position: relative;
  isolation: isolate;
  box-shadow: var(--glass-shadow);
  /* 不用 backdrop-filter（避免 24 张卡片合成层风暴）*/
  transition: transform .2s var(--easing), box-shadow .2s var(--easing);
}
.tool-card::before {
  content: "";
  position: absolute;
  inset: 0;
  border-radius: inherit;
  padding: 1px;
  background: var(--border-grad);
  -webkit-mask: linear-gradient(#000,#000) content-box, linear-gradient(#000,#000);
  -webkit-mask-composite: xor; mask-composite: exclude;
  pointer-events: none;
}
/* tool-card 外光环走 §25 共享 ::after */
.tool-card:hover {
  transform: translate3d(0, -2px, 0);
  box-shadow: var(--glass-shadow-hover);
}
.tool-icon {
  width: 36px; height: 36px;
  flex-shrink: 0;
  display: grid;
  place-items: center;
  border-radius: var(--radius-sm);
  font-size: 13px;
  font-weight: 700;
  color: var(--on-accent);
  letter-spacing: -0.02em;
  box-shadow:
    inset 0 1px 0 rgba(255,255,255,0.35),
    inset 0 -2px 4px rgba(60,30,10,0.12),
    0 3px 8px rgba(60,30,10,0.1);
  transition: transform .35s var(--easing-spring);
}
.tool-card:hover .tool-icon { transform: scale(1.08) rotate(-4deg); }
.tool-name {
  font-size: 14px;
  font-weight: 500;
  color: var(--text-1);
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}

/* ============================================================
   CTA 区块
   ============================================================ */
.cta {
  padding: var(--space-7) var(--space-7);
  border-radius: var(--radius-xl);
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: var(--space-6);
  background: var(--container-solid-bg);
  position: relative;
  isolation: isolate;
  box-shadow: var(--glass-shadow);
  /* 不用 backdrop-filter（避免 Safari 滚动白屏）；overflow visible 让外光环 ::after 显示 */
}
.cta::before {
  content: "";
  position: absolute;
  inset: 0;
  border-radius: inherit;
  padding: 1px;
  background: var(--border-grad);
  -webkit-mask: linear-gradient(#000,#000) content-box, linear-gradient(#000,#000);
  -webkit-mask-composite: xor; mask-composite: exclude;
  pointer-events: none;
  z-index: 1;
}
/* CTA 装饰光晕：右上角柔和品牌色光斑，提升关键转化区视觉氛围
   z-index: -2 让它在 .cta::after 光环 (z-index: -1) 之下，互不冲突
   去掉 overflow: hidden 后，光晕会从右上角自然延展到 cta 之外，
   叠加 ::after 玻璃壳形成"光线渗入玻璃"的层次感 */
.cta-glow {
  position: absolute;
  width: 420px;
  height: 420px;
  right: -100px;
  top: -140px;
  border-radius: 50%;
  background: radial-gradient(circle,
    rgba(192,57,43,0.22) 0%,
    rgba(192,57,43,0.12) 40%,
    transparent 70%);
  filter: blur(40px);
  pointer-events: none;
  z-index: -2;
}
.cta-text { flex: 1; min-width: 0; position: relative; z-index: 2; }
.cta-actions { position: relative; z-index: 2; }
.cta-text h2 {
  font-size: clamp(22px, 2.4vw, 30px);
  font-weight: 700;
  letter-spacing: -0.025em;
  margin-bottom: var(--space-2);
}
.cta-text p {
  color: var(--text-2);
  font-size: 15px;
  max-width: 520px;
}
.cta-actions {
  display: flex;
  gap: var(--space-3);
  flex-shrink: 0;
}
.btn {
  display: inline-flex;
  align-items: center;
  gap: 8px;
  height: 46px;
  padding: 0 22px;
  border-radius: var(--radius-md);
  font-size: 14px;
  font-weight: 600;
  transition: all .2s var(--easing);
  white-space: nowrap;
}
.btn-primary {
  background: var(--accent-grad);
  color: var(--on-accent);
  box-shadow:
    0 4px 12px rgba(192,57,43,0.3),
    inset 0 1px 0 rgba(255,255,255,0.3);
}
.btn-primary:hover {
  transform: translateY(-1px);
  box-shadow:
    0 8px 20px rgba(192,57,43,0.4),
    inset 0 1px 0 rgba(255,255,255,0.4);
}
.btn-secondary {
  background: var(--glass-bg-soft);
  color: var(--text-1);
  position: relative;
}
.btn-secondary::before {
  content: "";
  position: absolute;
  inset: 0;
  border-radius: inherit;
  padding: 1px;
  background: var(--border-grad);
  -webkit-mask: linear-gradient(#000,#000) content-box, linear-gradient(#000,#000);
  -webkit-mask-composite: xor; mask-composite: exclude;
  pointer-events: none;
}
.btn-secondary:hover { background: var(--glass-bg); transform: translateY(-1px); }
@media (max-width: 768px) {
  .cta { flex-direction: column; align-items: stretch; padding: var(--space-6) var(--space-5); }
  .cta-actions { flex-wrap: wrap; }
  .btn { flex: 1 0 auto; justify-content: center; }
}



/* ============================================================
   触控设备 hover 粘连修复
   iOS / Android 触控设备点击元素后 :hover 会"粘住"不还原，
   导致 transform 上移的卡片点击后保持上移
   方案：触控设备禁用 hover 时的 transform 副作用，保留色彩 / 阴影反馈
   ============================================================ */
@media (hover: none) {
  .cat-card:hover,
  .tool-card:hover,
  .btn-primary:hover,
  .btn-secondary:hover,
  .logo:hover,
  .kbd-search:hover,
  .theme-toggle:hover,
  .search-btn:hover,
  .tag:hover,
  .footer ul li a:hover {
    transform: none;
  }
  .cat-card:hover .cat-icon,
  .tool-card:hover .tool-icon,
  .cat-card:hover .cat-arrow {
    transform: none;
  }
}

/* ============================================================
   小屏 (≤480px) 进一步优化
   ============================================================ */
@media (max-width: 480px) {
  /* tool-grid 默认 minmax(180px) 在 375px 屏幕会挤成单列，强制 2 列 */
  .tool-grid { grid-template-columns: repeat(2, 1fr); }
  /* 顶栏更紧凑 */
  .header-inner { padding: 0 12px 0 8px; gap: 8px; }
  /* 单列卡片 padding 略减，留更多内容空间 */
  .cat-card { padding: 14px 18px; }
}

/* ============================================================
   入场动画（仅一次，轻量）
   ============================================================ */
@keyframes fadeUp {
  from { opacity: 0; transform: translateY(16px); }
  to   { opacity: 1; transform: translateY(0); }
}
.hero > .container > * { animation: fadeUp .8s var(--easing) both; }
.hero > .container > *:nth-child(1) { animation-delay: 0.05s; }
.hero > .container > *:nth-child(2) { animation-delay: 0.15s; }
.hero > .container > *:nth-child(3) { animation-delay: 0.25s; }
.hero > .container > *:nth-child(4) { animation-delay: 0.35s; }
.hero > .container > *:nth-child(5) { animation-delay: 0.45s; }
.hero > .container > *:nth-child(6) { animation-delay: 0.55s; }

/* ============================================================
   Search Modal (Command Palette 风格)
   原生 <dialog> 元素，居中弹出，玻璃质感
   ============================================================ */
.search-modal {
  position: fixed;
  inset: 0;
  margin: auto;
  border: 0;
  padding: 0;
  background: transparent;
  width: min(640px, 92vw);
  max-height: min(80vh, 600px);
  border-radius: var(--radius-lg);
  color: var(--text-1);
}
.search-modal::backdrop {
  /* 暖古墨遮罩（替代冷蓝 rgba(8,8,16,X) + blur 双重命格忌神） */
  background: rgba(44, 24, 16, 0.55);
}
[data-theme="dark"] .search-modal::backdrop { background: rgba(0, 0, 0, 0.65); }

  :root[data-theme="dark"] .search-modal::backdrop { background: rgba(0, 0, 0, 0.65); }


.search-modal-content {
  background: var(--glass-bg-strong);
  /* 已删除 backdrop-filter：Safari 中 <dialog> + backdrop-filter + isolation 组合会让内容渲染失败
     （只显示 ::backdrop 模糊背景但 modal 内容全透明不可见）；同时 blur 也是命格水气大忌 */
  border-radius: var(--radius-lg);
  box-shadow: var(--glass-shadow-hover);
  position: relative;
  overflow: hidden;
  display: flex;
  flex-direction: column;
  height: 100%;
}
.search-modal-content::before {
  content: "";
  position: absolute;
  inset: 0;
  border-radius: inherit;
  padding: 1px;
  background: var(--border-grad);
  -webkit-mask: linear-gradient(#000,#000) content-box, linear-gradient(#000,#000);
  -webkit-mask-composite: xor; mask-composite: exclude;
  pointer-events: none;
  z-index: 1;
}

.search-modal-form {
  display: flex;
  align-items: center;
  gap: 14px;
  padding: 18px 18px 18px 22px;
  border-bottom: 1px solid var(--divider);
  position: relative;
  z-index: 2;
  flex-shrink: 0;
}
.search-modal-icon { width: 22px; height: 22px; color: var(--text-3); flex-shrink: 0; }
.search-modal-input {
  flex: 1;
  font-size: 17px;
  color: var(--text-1);
  background: transparent;
  border: 0;
  outline: none;
  min-width: 0;
}
.search-modal-input::placeholder { color: var(--text-soft); }
.search-modal-input:focus,
.search-modal-input:focus-visible { outline: none; }
/* 即使 type=search 也禁用浏览器原生 X，统一用自定义 .search-modal-clear */
.search-modal-input::-webkit-search-cancel-button,
.search-modal-input::-webkit-search-decoration {
  -webkit-appearance: none;
  appearance: none;
}
.search-modal-input::-ms-clear,
.search-modal-input::-ms-reveal {
  display: none;
}

/* 自定义"清除内容"按钮：仅 input 有内容时显示，紧贴 input 右侧 */
.search-modal-clear {
  width: 22px;
  height: 22px;
  display: grid;
  place-items: center;
  border-radius: 50%;
  color: var(--on-accent);
  background: var(--text-soft);
  transition: background .15s var(--easing), opacity .15s var(--easing);
  flex-shrink: 0;
  cursor: pointer;
  margin-right: 4px;
  border: none;
}
.search-modal-clear[hidden] { display: none; }
.search-modal-clear:hover { background: var(--text-2); }
.search-modal-clear svg { width: 11px; height: 11px; }
.search-modal-close {
  width: 32px;
  height: 32px;
  display: grid;
  place-items: center;
  border-radius: var(--radius-sm);
  color: var(--text-3);
  background: rgba(107,52,16,0.04);
  transition: all .2s var(--easing);
  flex-shrink: 0;
}
.search-modal-close:hover { background: rgba(107,52,16,0.08); color: var(--text-1); }
.search-modal-close svg { width: 14px; height: 14px; }
[data-theme="dark"] .search-modal-close { background: rgba(255,255,255,0.06); }
[data-theme="dark"] .search-modal-close:hover { background: rgba(255,255,255,0.1); }

  :root[data-theme="dark"] .search-modal-close { background: rgba(255,255,255,0.06); }
  :root[data-theme="dark"] .search-modal-close:hover { background: rgba(255,255,255,0.1); }


.search-modal-body {
  padding: 8px;
  flex: 1;
  overflow-y: auto;
  position: relative;
  z-index: 2;
}
.search-modal-label {
  font-size: 11px;
  font-weight: 600;
  color: var(--text-3);
  letter-spacing: 0.06em;
  text-transform: uppercase;
  padding: 10px 14px 6px;
}
.search-suggest { display: flex; flex-direction: column; gap: 2px; list-style: none; padding: 0; margin: 0; }
.search-suggest a {
  display: flex;
  align-items: center;
  gap: 12px;
  padding: 10px 14px;
  border-radius: var(--radius-sm);
  transition: background .15s var(--easing);
}
.search-suggest a:hover,
.search-suggest a:focus-visible { background: var(--accent-soft); outline: none; }
.suggest-icon {
  width: 32px;
  height: 32px;
  display: grid;
  place-items: center;
  border-radius: var(--radius-sm);
  color: var(--on-accent);
  font-size: 13px;
  font-weight: 700;
  letter-spacing: -0.02em;
  flex-shrink: 0;
  box-shadow:
    inset 0 1px 0 rgba(255,255,255,0.4),
    0 2px 4px rgba(60,30,10,0.08);
}
.suggest-name { flex: 1; font-size: 14px; font-weight: 500; color: var(--text-1); }
.suggest-cat { font-size: 12px; color: var(--text-3); }

.search-modal-foot {
  display: flex;
  align-items: center;
  justify-content: center;
  gap: 20px;
  padding: 12px 20px;
  border-top: 1px solid var(--divider);
  font-size: 12px;
  color: var(--text-3);
  position: relative;
  z-index: 2;
  flex-shrink: 0;
}
.search-modal-foot kbd {
  display: inline-block;
  padding: 2px 6px;
  margin-right: 4px;
  border-radius: var(--radius-xs);
  background: rgba(107,52,16,0.06);
  font-family: var(--font-mono);
  font-size: 11px;
  color: var(--text-2);
  min-width: 18px;
  text-align: center;
}
[data-theme="dark"] .search-modal-foot kbd { background: rgba(255,255,255,0.08); }

  :root[data-theme="dark"] .search-modal-foot kbd { background: rgba(255,255,255,0.08); }


/* 入场动画 */
@keyframes modalIn {
  from { opacity: 0; transform: scale(0.96) translateY(-8px); }
  to { opacity: 1; transform: scale(1) translateY(0); }
}
@keyframes backdropFade {
  from { opacity: 0; }
  to { opacity: 1; }
}
.search-modal[open] { animation: modalIn .25s cubic-bezier(0.34, 1.3, 0.64, 1); }
.search-modal[open]::backdrop { animation: backdropFade .2s ease both; }

/* 移动端：modal 全屏占满 */
@media (max-width: 640px) {
  .search-modal {
    width: 100vw;
    max-width: 100vw;
    height: 100vh;
    max-height: 100vh;
    border-radius: 0;
    inset: 0;
    margin: 0;
  }
  .search-modal-content { border-radius: 0; height: 100%; }
  .search-modal-form { padding: 16px; }
}

/* ============================================================
   §38 .page-section — 通用"非工具页"内容容器节奏
   ------------------------------------------------------------
   场景：文章列表 / 文章详情 / 关于 / 协议等"内容型"页面，
        不走 main:has(> .tool-hero) 工具页 owl 引擎
   节奏：面包屑（margin-top: tool-gap）→ page-section（margin-top: tool-gap）→ 页底
        与 .stack-y 内部 owl 间距完全一致，整页节奏统一
   用法：<div class="container stack-y page-section">...</div>
   ============================================================ */
.page-section {
  margin-top: var(--tool-gap);
  padding-bottom: var(--space-7); /* 桌面 48 页底空气 */
}
@media (max-width: 768px) {
  .page-section {
    margin-top: var(--tool-gap-mobile);
    padding-bottom: var(--space-5); /* 移动 24 */
  }
}

/* ============================================================
   §39 文章模块（首页 #articles / 列表页 / 内容页 / 相关文章 / 分页）
   ------------------------------------------------------------
   设计原则：
     · 卡片基底借鉴 .cat-card（玻璃 + glass-shadow + border-grad 边光）
       但布局更"杂志感"：纵向排版（标题→摘要→meta），无图标，分类 chip 浮顶
     · 间距 / 圆角 / 颜色全部用全局 token，与 .panel / .section 一致
     · 列表页文章正文 + 相关 + 分页均嵌入 .panel 复用 panel-head/body 风格
   ============================================================ */

.article-grid {
  display: grid;
  grid-template-columns: repeat(auto-fill, minmax(280px, 1fr));
  gap: var(--space-4);
}

.article-card {
  position: relative;
  isolation: isolate;
  display: flex;
  flex-direction: column;
  gap: var(--space-2);
  padding: var(--space-5);
  border-radius: var(--radius-lg);
  background: var(--card-solid-bg);
  box-shadow: var(--glass-shadow);
  color: inherit;
  text-decoration: none;
  /* 与 .cat-card / .tool-card 一致的过渡 */
  transition:
    transform .35s cubic-bezier(0.34, 1.25, 0.64, 1),
    box-shadow .25s var(--easing),
    background .25s var(--easing);
}
/* 去掉 ::before 1px 渐变描边 —— 与朱红 chip 叠加视觉过重；
   外光晕走 §25 共享 ::after（4px 玻璃带）已经够圈感 */
.article-card:hover {
  transform: translate3d(0, -4px, 0);
  box-shadow: var(--glass-shadow-hover);
  background: var(--card-solid-bg-hover);
}
.article-card:active { transform: translate3d(0, -2px, 0) scale(0.99); }
.article-card:focus-visible {
  outline: 2px solid var(--accent);
  outline-offset: 3px;
  box-shadow: var(--glass-shadow-hover), 0 0 0 4px var(--accent-soft);
}

.article-cat-chip {
  align-self: flex-start;
  display: inline-flex;
  padding: 2px 10px;
  border-radius: var(--radius-full);
  background: var(--accent-soft);
  color: var(--accent);
  font-size: 12px;
  font-weight: 600;
  letter-spacing: -0.01em;
}

.article-card-title {
  font-size: 16px;
  font-weight: 600;
  line-height: 1.4;
  color: var(--text-1);
  letter-spacing: -0.01em;
  /* 2 行截断 */
  display: -webkit-box;
  -webkit-line-clamp: 2;
  -webkit-box-orient: vertical;
  overflow: hidden;
}

.article-card-summary {
  font-size: 13px;
  line-height: 1.55;
  color: var(--text-3);
  display: -webkit-box;
  -webkit-line-clamp: 2;
  -webkit-box-orient: vertical;
  overflow: hidden;
}

.article-card-meta {
  display: flex;
  align-items: center;
  gap: var(--space-3);
  margin-top: auto;
  padding-top: var(--space-2);
  font-size: 12px;
  color: var(--text-3);
}
.article-card-views::before { content: "·"; margin-right: var(--space-3); color: var(--divider); }

/* ---------- 列表页：分类信息条 ---------- */
.article-cat-meta {
  font-size: 13px;
  color: var(--text-3);
}
.article-cat-meta strong { color: var(--accent); font-weight: 600; }
.article-cat-desc {
  font-size: 14px;
  line-height: 1.65;
  color: var(--text-2);
  margin: 0;
}
.article-empty {
  text-align: center;
  padding: var(--space-6) 0;
  color: var(--text-3);
  font-size: 14px;
}

/* 列表页子分类（继承 cat-card 思路但更紧凑） */
.article-subcat-grid {
  display: grid;
  grid-template-columns: repeat(auto-fill, minmax(220px, 1fr));
  gap: var(--space-3);
}
.article-subcat-card {
  position: relative;
  isolation: isolate;
  display: block;
  padding: var(--space-3) var(--space-4);
  border-radius: var(--radius-md);
  background: var(--card-solid-bg);
  box-shadow: var(--glass-shadow);
  color: inherit;
  text-decoration: none;
  transition: background .25s var(--easing), box-shadow .25s var(--easing), transform .35s cubic-bezier(0.34, 1.25, 0.64, 1);
}
.article-subcat-card:hover {
  background: var(--card-solid-bg-hover);
  box-shadow: var(--glass-shadow-hover);
  transform: translate3d(0, -2px, 0);
}
.article-subcat-card h3 {
  font-size: 14px;
  font-weight: 600;
  color: var(--text-1);
  margin-bottom: 2px;
}
.article-subcat-card p {
  font-size: 12px;
  color: var(--text-3);
  line-height: 1.5;
  margin: 0;
}

/* ---------- 分页 ---------- */
.article-pagination {
  display: flex;
  flex-wrap: wrap;
  justify-content: center;
  align-items: center;
  gap: var(--space-2);
  padding: var(--space-4) 0;
}
.article-pagination .page-btn {
  min-width: 38px;
  height: 38px;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  padding: 0 12px;
  border-radius: var(--radius-sm);
  background: var(--card-solid-bg);
  border: 1px solid var(--divider);
  color: var(--text-2);
  font-size: 13px;
  font-weight: 500;
  text-decoration: none;
  transition: background .2s var(--easing), color .2s var(--easing), border-color .2s var(--easing);
}
.article-pagination .page-btn:hover {
  background: var(--card-solid-bg-hover);
  color: var(--text-1);
  border-color: var(--accent-soft);
}
.article-pagination .page-btn.is-current {
  background: var(--accent);
  color: var(--card-solid-bg);
  border-color: var(--accent);
  cursor: default;
}
.article-pagination .page-btn.is-disabled,
.article-pagination .page-btn.is-ellipsis {
  background: transparent;
  border-color: transparent;
  color: var(--text-3);
  cursor: not-allowed;
}

/* ---------- 内容页 article-detail ---------- */
.article-detail-head { flex-wrap: wrap; gap: var(--space-3); }
.article-detail-head .panel-title { line-height: 1.35; }
.article-detail-meta {
  display: flex;
  flex-wrap: wrap;
  gap: var(--space-3);
  font-size: 13px;
  color: var(--text-3);
  width: 100%;
}
.article-detail-meta .meta-item {
  display: inline-flex;
  align-items: center;
}
.article-detail-meta .meta-link {
  color: var(--accent);
  text-decoration: none;
  font-weight: 500;
}
.article-detail-meta .meta-link:hover { text-decoration: underline; }

.article-detail-cover {
  display: block;
  width: 100%;
  max-height: 420px;
  object-fit: cover;
  border-radius: 0; /* 在 .panel-body.no-pad 内 → 顶满边 */
}

/* 正文 prose 风：链接 / 标题 / 段落 / 列表的字号节奏 */
.article-detail-content {
  font-size: 15px;
  line-height: 1.85;
  color: var(--text-1);
  /* 内 markdown 转 HTML 的元素逐项规整 */
}
.article-detail-content > * + * { margin-top: var(--space-4); }
.article-detail-content h2 {
  font-size: 22px;
  font-weight: 700;
  line-height: 1.4;
  margin-top: var(--space-6);
  padding-top: var(--space-2);
  letter-spacing: -0.015em;
  color: var(--text-1);
}
.article-detail-content h3 {
  font-size: 18px;
  font-weight: 600;
  margin-top: var(--space-5);
  color: var(--text-1);
}
.article-detail-content h4 {
  font-size: 16px;
  font-weight: 600;
  margin-top: var(--space-4);
  color: var(--text-2);
}
.article-detail-content p { margin: 0; }
.article-detail-content a {
  color: var(--accent);
  text-decoration: underline;
  text-underline-offset: 3px;
  text-decoration-thickness: 1px;
}
.article-detail-content a:hover { text-decoration-thickness: 2px; }
.article-detail-content ul,
.article-detail-content ol {
  padding-left: var(--space-5);
  margin: 0;
}
.article-detail-content li + li { margin-top: var(--space-2); }
.article-detail-content blockquote {
  padding: var(--space-3) var(--space-4);
  border-left: 3px solid var(--accent);
  background: var(--accent-soft);
  border-radius: var(--radius-sm);
  color: var(--text-2);
  font-style: italic;
}
.article-detail-content code {
  padding: 2px 6px;
  border-radius: var(--radius-xs);
  background: var(--surface-2, rgba(107,52,16,0.06));
  font-family: var(--font-mono);
  font-size: 0.92em;
  color: var(--accent);
}
.article-detail-content pre {
  padding: var(--space-4);
  border-radius: var(--radius-md);
  background: var(--surface-2, rgba(107,52,16,0.04));
  overflow-x: auto;
  font-size: 13px;
  line-height: 1.6;
}
.article-detail-content pre code {
  padding: 0;
  background: transparent;
  color: var(--text-1);
}
.article-detail-content table {
  width: 100%;
  border-collapse: collapse;
  font-size: 14px;
}
.article-detail-content th,
.article-detail-content td {
  padding: var(--space-2) var(--space-3);
  border-bottom: 1px solid var(--divider);
  text-align: left;
}
.article-detail-content th {
  background: var(--surface-2, rgba(107,52,16,0.03));
  font-weight: 600;
  color: var(--text-1);
}
.article-detail-content img {
  max-width: 100%;
  height: auto;
  border-radius: var(--radius-md);
}
.article-detail-content hr {
  border: 0;
  height: 1px;
  background: var(--divider);
  margin: var(--space-6) 0;
}

/* 相关文章列表 */
.article-related-list {
  list-style: none;
  padding: 0;
  margin: 0;
  display: flex;
  flex-direction: column;
}
.article-related-list li + li { border-top: 1px dashed var(--divider); }
.article-related-link {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: var(--space-3);
  padding: var(--space-3) 0;
  color: var(--text-1);
  text-decoration: none;
  transition: color .2s var(--easing);
}
.article-related-link:hover { color: var(--accent); }
.article-related-title {
  font-size: 14px;
  font-weight: 500;
  /* 单行截断 */
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}
.article-related-meta {
  flex-shrink: 0;
  display: inline-flex;
  gap: var(--space-3);
  font-size: 12px;
  color: var(--text-3);
}

.article-back-row {
  display: flex;
  justify-content: center;
  padding: var(--space-3) 0;
}

/* 移动端调优 */
@media (max-width: 640px) {
  .article-grid { grid-template-columns: 1fr; gap: var(--space-3); }
  .article-card { padding: var(--space-4); }
  .article-card-title { font-size: 15px; }
  .article-detail-content { font-size: 14.5px; line-height: 1.78; }
  .article-detail-content h2 { font-size: 19px; }
  .article-detail-content h3 { font-size: 16px; }
  .article-related-title { font-size: 13px; }
  .article-related-meta { gap: var(--space-2); font-size: 11px; }
  .article-related-link {
    flex-wrap: wrap;
    align-items: flex-start;
  }
}

/* ============================================================
   §40+ 分类页页面级组件（cat-hero / subcat-nav / subcat-section / related-grid / doc 等）
   从 category-demo.html 内联样式合并；工具列表页可复用
   ============================================================ */
/* ============================================================
   分类页独有样式（公共部分见 common.css §1-§31）
   ============================================================ */

/* ---------- 分类 Hero ----------
   复用 .tool-hero-inner 容器，加大图标 / 统计条 */
.cat-hero-icon {
  flex-shrink: 0;
  width: 80px;
  height: 80px;
  display: grid;
  place-items: center;
  border-radius: var(--radius-xl);
  font-size: 32px;
  font-weight: 700;
  color: var(--on-accent);
  letter-spacing: -0.04em;
  /* 三层阴影模拟立体玻璃 */
  box-shadow:
    inset 0 1px 0 rgba(255,255,255,0.5),
    inset 0 -3px 8px rgba(60,30,10,0.18),
    0 8px 20px rgba(60,30,10,0.18),
    0 2px 4px rgba(60,30,10,0.08);
}
.cat-hero h1 {
  font-size: clamp(24px, 3vw, 36px);
  font-weight: 700;
  letter-spacing: -0.025em;
  line-height: 1.2;
  margin-bottom: 8px;
}
.cat-hero p {
  font-size: 15px;
  color: var(--text-2);
  line-height: 1.6;
  margin-bottom: var(--space-3);
}
.cat-stats {
  display: flex;
  flex-wrap: wrap;
  gap: var(--space-2) var(--space-4);
  font-size: 13px;
  color: var(--text-3);
}
.cat-stats .stat-item {
  display: inline-flex;
  align-items: center;
  gap: 6px;
}
.cat-stats .stat-item strong {
  color: var(--text-1);
  font-weight: 600;
  font-variant-numeric: tabular-nums;
}
.cat-stats .stat-dot {
  width: 4px; height: 4px;
  border-radius: 50%;
  background: currentColor;
  opacity: 0.4;
}

/* ---------- 子类导航 chips ----------
   外层 = 玻璃卡片（与下面 cat-tool-grid 卡片同款圆角 + 外光环 + 阴影）
   内层 chips = 扁平细边框 + 数字 badge（导航语义） */
.subcat-nav {
  position: sticky;
  top: calc(var(--space-3) + 60px + var(--space-3));
  z-index: 50;
  margin: var(--space-5) 0 var(--space-6);
  padding: var(--space-3) var(--space-4);
  /* 玻璃本体：与 .card / .tool-card 同款 radius-md，与 cat-card 等下方卡片视觉协调 */
  background: var(--container-solid-bg);
  border-radius: var(--radius-md);
  box-shadow: var(--glass-shadow);
  isolation: isolate;
  /* HTML 上已加 .glass-ring 类 → §25 ::after 自动提供外光环 */
}
.subcat-chips {
  display: flex;
  flex-wrap: wrap;
  gap: var(--space-2);
}
.subcat-chip {
  display: inline-flex;
  align-items: center;
  gap: 8px;
  padding: 7px 14px;
  border-radius: var(--radius-full);
  background: transparent;
  border: 1px solid var(--divider);
  font-size: 13px;
  font-weight: 500;
  color: var(--text-2);
  transition: color .15s var(--easing), background .15s var(--easing), border-color .15s var(--easing);
  white-space: nowrap;
}
.subcat-chip:hover {
  color: var(--text-1);
  background: var(--card-solid-bg);
  border-color: transparent;
}
.subcat-chip.is-active {
  color: var(--accent);
  background: var(--accent-soft);
  border-color: transparent;
}
/* 数字 badge：小圆角胶囊，与 chip 文本视觉分离 */
.subcat-chip .chip-count {
  font-size: 11px;
  font-weight: 600;
  line-height: 1;
  padding: 3px 7px;
  border-radius: var(--radius-full);
  background: var(--divider);
  color: var(--text-3);
  font-variant-numeric: tabular-nums;
  transition: background .15s var(--easing), color .15s var(--easing);
}
.subcat-chip:hover .chip-count {
  background: var(--accent-soft);
  color: var(--accent);
}
.subcat-chip.is-active .chip-count {
  background: rgba(192,57,43,0.22);
  color: var(--accent);
}

/* 移动端：横向滚动 + 渐隐 mask */
@media (max-width: 768px) {
  .subcat-nav {
    top: calc(var(--space-3) + 60px);
    margin: var(--space-4) 0 var(--space-5);
    padding: var(--space-2) var(--space-3);
  }
  .subcat-chips {
    flex-wrap: nowrap;
    overflow-x: auto;
    -webkit-overflow-scrolling: touch;
    scrollbar-width: none;
    -webkit-mask-image: linear-gradient(90deg, transparent 0, #000 16px, #000 calc(100% - 16px), transparent 100%);
            mask-image: linear-gradient(90deg, transparent 0, #000 16px, #000 calc(100% - 16px), transparent 100%);
  }
  .subcat-chips::-webkit-scrollbar { display: none; }
  .subcat-chip { flex-shrink: 0; }
}

/* ---------- 子分类 section ----------
   每个子类一组工具，section-head 下接 grid */
.subcat-section {
  padding: var(--space-6) 0;
  /* sticky chips 锚跳偏移补偿 */
  scroll-margin-top: calc(60px + 60px);
}
.subcat-section:first-of-type { padding-top: 0; }
.subcat-head {
  display: flex;
  align-items: end;
  justify-content: space-between;
  gap: var(--space-4);
  margin-bottom: var(--space-4);
  flex-wrap: wrap; /* 移动端允许 .more 换到下一行 */
}
.subcat-head h2 {
  font-size: clamp(20px, 2vw, 26px);
  font-weight: 700;
  letter-spacing: -0.02em;
  line-height: 1.3;
  margin-bottom: 4px;
}
.subcat-head p {
  font-size: 14px;
  color: var(--text-3);
  line-height: 1.6;
}
/* .subcat-head 内的 .more 共用 .section-head .more 的样式（行内 flex + 箭头同行）*/
.subcat-head .more {
  display: inline-flex;
  align-items: center;
  gap: 6px;
  font-size: 14px;
  color: var(--accent);
  white-space: nowrap;
  transition: gap .2s var(--easing);
}
.subcat-head .more:hover { gap: 10px; }

/* ---------- 工具网格（自适应列宽，每个 .card 已有 §24 样式）---------- */
.cat-tool-grid {
  display: grid;
  grid-template-columns: repeat(auto-fill, minmax(220px, 1fr));
  gap: var(--space-3);
}
@media (max-width: 768px) {
  .cat-tool-grid { grid-template-columns: repeat(2, 1fr); gap: var(--space-3); }
}
@media (max-width: 480px) {
  .cat-tool-grid { gap: 10px; }
}

/* ---------- 相关分类（与 home-demo 同款 .cat-card 风格）---------- */
.related-grid {
  display: grid;
  grid-template-columns: repeat(auto-fill, minmax(260px, 1fr));
  gap: var(--space-4);
}
.related-card {
  display: flex;
  align-items: center;
  gap: var(--space-4);
  padding: var(--space-4) var(--space-5);
  border-radius: var(--radius-lg);
  background: var(--card-solid-bg);
  position: relative;
  isolation: isolate;
  box-shadow: var(--glass-shadow);
  transition:
    transform .35s cubic-bezier(0.34, 1.25, 0.64, 1),
    box-shadow .25s var(--easing),
    background .25s var(--easing);
  contain: layout style;
}
.related-card::after {
  content: "";
  position: absolute;
  inset: -4px;
  border-radius: inherit;
  background: rgba(255,255,255,0.12);
  border: 1px solid rgba(255,255,255,0.5);
  box-shadow:
    inset 0 1px 0 rgba(255,255,255,0.75),
    inset 0 -1px 0 rgba(60,30,10,0.03),
    0 0 0 1px rgba(60,30,10,0.04);
  z-index: -1;
  pointer-events: none;
}
[data-theme="dark"] .related-card::after,
:root:not([data-theme="light"]) .related-card::after {
  background: rgba(255,255,255,0.04);
  border-color: rgba(255,255,255,0.1);
  box-shadow:
    inset 0 1px 0 rgba(255,255,255,0.08),
    inset 0 -1px 0 rgba(0,0,0,0.2),
    0 0 0 1px rgba(0,0,0,0.3);
}

  :root[data-theme="dark"] .related-card::after {
    background: rgba(255,255,255,0.04);
    border-color: rgba(255,255,255,0.1);
    box-shadow:
      inset 0 1px 0 rgba(255,255,255,0.08),
      inset 0 -1px 0 rgba(0,0,0,0.2),
      0 0 0 1px rgba(0,0,0,0.3);
  }

.related-card:hover {
  transform: translate3d(0, -4px, 0);
  background: var(--card-solid-bg-hover);
  box-shadow: var(--glass-shadow-hover);
}
.related-icon {
  flex-shrink: 0;
  width: 56px; height: 56px;
  display: grid; place-items: center;
  border-radius: var(--radius-lg);
  font-size: 22px;
  font-weight: 700;
  color: var(--on-accent);
  letter-spacing: -0.03em;
  box-shadow:
    inset 0 1px 0 rgba(255,255,255,0.5),
    inset 0 -3px 8px rgba(60,30,10,0.18),
    0 8px 20px rgba(60,30,10,0.18),
    0 2px 4px rgba(60,30,10,0.08);
  transition: transform .4s var(--easing-spring);
}
.related-card:hover .related-icon { transform: rotate(-6deg) scale(1.06); }
.related-info { flex: 1; min-width: 0; }
.related-info h3 {
  font-size: 16px;
  font-weight: 600;
  margin-bottom: 2px;
  letter-spacing: -0.01em;
}
.related-meta {
  display: flex;
  align-items: center;
  gap: 8px;
  margin-bottom: 4px;
  font-size: 12px;
}
.related-count {
  padding: 2px 8px;
  border-radius: 999px;
  background: var(--accent-soft);
  color: var(--accent);
  font-weight: 600;
}
.related-info p {
  font-size: 12.5px;
  color: var(--text-3);
  line-height: 1.5;
  display: -webkit-box;
  -webkit-line-clamp: 2;
  -webkit-box-orient: vertical;
  overflow: hidden;
}
.related-arrow {
  flex-shrink: 0;
  width: 18px; height: 18px;
  color: var(--text-soft);
  transition: transform .2s var(--easing), color .2s var(--easing);
}
.related-card:hover .related-arrow { color: var(--accent); transform: translateX(4px); }

@media (max-width: 480px) {
  .related-grid { grid-template-columns: 1fr; gap: var(--space-3); }
  .related-card { padding: 14px 18px; gap: var(--space-3); }
  .related-icon { width: 48px; height: 48px; font-size: 20px; }
}

/* 触控设备 hover 修正 */
@media (hover: none) {
  .subcat-chip:hover, .related-card:hover { transform: none; }
  .related-card:hover .related-icon { transform: none; }
}

/* ============================================================
   §50+ 工具详情页微调（panel 内的 code-area 一体化）
   合并自 tool-demo.html 内联样式
   ============================================================ */
/* ============================================================
   工具页独有样式（公共部分见 common.css §28-§31）
   ============================================================ */

/* 工具页：textarea 完全填充 .panel-body.no-pad，与 panel 一体（无边框 / 无圆角）
   resize: none —— 禁用浏览器原生右下角拖拽手柄
   原因：① 手柄被 panel 圆角裁切显丑 ② 高度已由 CSS 响应式控制 ③ 拖拽会破坏下方按钮布局
   大厂同类工具（jsonformatter.org / JSON Editor Online / Stripe Dashboard）均禁用 */
.panel .code-area {
  border: 0;
  border-radius: 0;
  min-height: 360px;
  background: transparent;
  resize: none;
}
.panel .code-area:focus { box-shadow: none; }
@media (max-width: 768px) {
  .panel .code-area { min-height: 220px; }
}
@media (max-width: 480px) {
  .panel .code-area { min-height: 180px; }
}

/* ============================================================
   §38 doc.glass-ring 内部的轻量条目（场景卡 / diagram）
   工具详情页 case_card / diagram 复用上方 doc 容器的玻璃风格，
   内部仅用细分隔与 hover，避免双层玻璃叠嵌。
   ============================================================ */

/* 使用场景：doc 内部网格
   基础：auto-fit + 220 阈值（6+ item 自适应分行）
   关键覆盖：恰好 4 / 5 个 item 时强制单行均分 —— PC 中等视口（如 1024）220 阈值放不下 5 列会掉行，
            用 :has() 检测 item 数量精确切换布局，4 个不留右侧空白、5 个不换行
   :has 兼容：Safari 15.4+ / Chrome 105+ / Firefox 121+ —— 2026 主流均覆盖 */
.doc .case-grid {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(220px, 1fr));
  gap: var(--space-4);
  margin: 0;
}
/* 恰好 4 个 item：4 列均分铺满（auto-fit 在右余阈值时会留空隙，强制 1fr 防留白）*/
.doc .case-grid:has(> .case-item:nth-child(4):last-child) {
  grid-template-columns: repeat(4, 1fr);
}
/* 恰好 5 个 item：5 列均分铺满（破解 PC 中屏 220 阈值塞不下 5 列的掉行问题）*/
.doc .case-grid:has(> .case-item:nth-child(5):last-child) {
  grid-template-columns: repeat(5, 1fr);
}
/* 中屏 / 平板 ≤768：5 列每列 ~140px 太挤，退回 auto-fit 让排版自决 */
@media (max-width: 768px) {
  .doc .case-grid:has(> .case-item:nth-child(4):last-child),
  .doc .case-grid:has(> .case-item:nth-child(5):last-child) {
    grid-template-columns: repeat(auto-fit, minmax(180px, 1fr));
  }
}
/* 极窄屏（≤480px）：全部降为单列 */
@media (max-width: 480px) {
  .doc .case-grid,
  .doc .case-grid:has(> .case-item:nth-child(4):last-child),
  .doc .case-grid:has(> .case-item:nth-child(5):last-child) {
    grid-template-columns: 1fr;
  }
}
.case-item {
  position: relative;
  padding: var(--space-5) var(--space-4) var(--space-4);
  border-radius: var(--radius-md);
  background: var(--glass-bg);
  border: 1px solid rgba(184, 115, 46, 0.15);
  transition: transform .2s var(--easing), box-shadow .2s var(--easing), border-color .2s var(--easing);
  display: flex;
  flex-direction: column;
  gap: 10px;
  min-width: 0;
  overflow: hidden;
  isolation: isolate;
}
/* 顶部命格色条：朱红→赭金渐变（视觉锚点，与 hero 配色呼应） */
.case-item::before {
  content: '';
  position: absolute;
  left: 0; top: 0; right: 0;
  height: 3px;
  background: linear-gradient(90deg, var(--accent), var(--gold));
  z-index: 1;
}
.case-item:hover {
  transform: translateY(-3px);
  border-color: rgba(184, 115, 46, 0.32);
  box-shadow: 0 12px 28px rgba(107, 52, 16, 0.10), 0 4px 10px rgba(107, 52, 16, 0.06);
}
.case-item .case-icon {
  width: 44px; height: 44px;
  border-radius: var(--radius-sm);
  display: grid; place-items: center;
  font-size: 20px;
  font-weight: 700;
  background: linear-gradient(135deg, var(--gold), var(--gold-deep));
  color: var(--glass-bg-strong);
  box-shadow:
    inset 0 0 0 2px rgba(255, 243, 224, 0.30),
    0 4px 10px rgba(184, 115, 46, 0.22);
}
.case-item .case-title {
  font-size: 15px;
  font-weight: 700;
  color: var(--text-1);
  margin: 4px 0 0;
  line-height: 1.45;
  letter-spacing: 0.02em;
  white-space: normal;
  overflow: visible;
  text-overflow: clip;
}
.case-item .case-desc {
  font-size: 13px;
  color: var(--text-2);
  line-height: 1.75;
  -webkit-line-clamp: unset;
  display: block;
  overflow: visible;
  word-break: break-word;
  flex: 1;
}
.case-more {
  align-self: flex-start;
  margin-top: auto;
  padding-top: 4px;
  font-size: 13px;
  font-weight: 600;
  color: var(--accent);
  display: inline-flex;
  align-items: center;
  gap: 4px;
  transition: gap .2s var(--easing), color .2s var(--easing);
}
.case-more:hover {
  color: var(--accent-2);
  text-decoration: none;
  gap: 8px;
}
@media (max-width: 640px) {
  .doc .case-grid { gap: 8px; }
  .case-item { padding: 10px 8px; gap: 4px; }
  .case-item .case-icon { width: 28px; height: 28px; font-size: 14px; border-radius: 8px; }
  .case-item .case-title { font-size: 12.5px; }
  .case-item .case-desc { font-size: 11.5px; line-height: 1.4; }
  .case-more { display: none; }
}

/* 全站统一隐私说明 —— 页面底部 footer 上方的小贴纸（居中显示） */
.tool-privacy-wrap {
  text-align: center;
  padding-top: var(--space-5);    /* 桌面 24 */
  padding-bottom: var(--space-5); /* 桌面 24 */
}
@media (max-width: 768px) {
  .tool-privacy-wrap {
    padding-top: var(--space-4);   /* 移动 16 */
    padding-bottom: var(--space-4);
  }
}
.tool-privacy-note {
  display: inline-flex;
  align-items: center;
  gap: 6px;
  margin: 0;
  padding: 8px 16px;
  border-radius: 999px;
  background: var(--glass-bg-soft);
  border: 1px solid var(--border-2);
  font-size: 13px;
  color: var(--text-3);
  line-height: 1.5;
}
.tool-privacy-note svg { color: var(--accent); flex-shrink: 0; }

/* 原理图：doc 内部的居中 SVG + 图例 */
/* 原理图：古籍图卷风（外金边 + 内浅栗 + 顶部装饰金线 + 右下朱印） */
.diagram-svg {
  position: relative;
  display: grid;
  place-items: center;
  padding: var(--space-7) var(--space-5) var(--space-6);
  margin: var(--space-3) 0;
  background:
    /* 顶部暖金光晕 */
    radial-gradient(ellipse 60% 30% at 50% 0%, rgba(184, 115, 46, 0.06), transparent 70%),
    /* 底部主体 */
    var(--glass-bg-strong);
  border-radius: var(--radius-md);
  /* 双线框：外金棕实边 + 内米色 inset 1px */
  border: 1px solid rgba(184, 115, 46, 0.32);
  box-shadow:
    inset 0 0 0 1px rgba(255, 243, 224, 0.50),
    inset 0 0 0 4px var(--glass-bg-strong),
    0 4px 14px rgba(107, 52, 16, 0.06);
  overflow-x: auto;
}
/* 顶部装饰：居中淡金渐变短线（古卷封头感） */
.diagram-svg::before {
  content: '';
  position: absolute;
  top: 14px;
  left: 50%;
  transform: translateX(-50%);
  width: 64px;
  height: 1.5px;
  background: linear-gradient(90deg, transparent, var(--gold), transparent);
  border-radius: 2px;
}
/* 右下小朱印（"图"字微旋装饰，古籍铃印感） */
.diagram-svg::after {
  content: '图';
  position: absolute;
  right: 14px;
  bottom: 14px;
  width: 26px;
  height: 26px;
  background: var(--accent);
  color: #FAF3E0;
  border-radius: var(--radius-xs);
  display: grid;
  place-items: center;
  font-size: 12px;
  font-weight: 700;
  font-family: var(--font-serif);
  letter-spacing: 0;
  box-shadow:
    inset 0 0 0 1.5px rgba(255, 243, 224, 0.65),
    inset 0 0 0 2.5px var(--accent),
    0 2px 6px rgba(107, 52, 16, 0.18);
  transform: rotate(-3deg);
  opacity: 0.92;
  user-select: none;
  pointer-events: none;
}
.diagram-svg svg,
.diagram-svg img { max-width: 100%; height: auto; }
.diagram-legend-item {
  display: inline-flex;
  align-items: center;
  gap: 8px;
  padding: 6px 12px;
  font-size: 13px;
  color: var(--text-2);
  background: var(--surface-2);
  border-radius: var(--radius-full);
  border: 1px solid var(--divider);
  transition: background .15s var(--easing), border-color .15s var(--easing);
}
.diagram-legend-item:hover {
  background: rgba(184, 115, 46, 0.08);
  border-color: rgba(184, 115, 46, 0.25);
}
.diagram-legend-dot {
  display: inline-block;
  width: 12px; height: 12px;
  border-radius: 3px;
  flex-shrink: 0;
  box-shadow: 0 1px 3px rgba(107, 52, 16, 0.15);
}
.doc > .diagram-legend {
  display: flex;
  flex-wrap: wrap;
  gap: var(--space-3) var(--space-4);
  justify-content: center;
  margin-top: var(--space-3);
  padding-top: var(--space-3);
  border-top: 1px solid var(--border-2);
  list-style: none;
}

/* ============================================================
   §39 工具详情页 —— 5 大块整合视觉
   每大块 = section.tool-section-group
     ├─ section-head (h2 大标题 + subtitle)
     └─ article.doc.glass-ring.tool-merged-block (一个大卡片)
         └─ section.merged-subblock × N (内部多个子区，分隔线区分)
   设计意图：内容多但视觉只有一个大卡片，子区靠细分隔线区分
   ============================================================ */

/* 大块外层节奏：大块之间留更大空隙 */
.tool-section-group {
  padding-top: var(--space-7);
  padding-bottom: var(--space-7);
}
.tool-section-group + .tool-section-group {
  padding-top: 0;
}

/* ===== 章节头：编号朱印 + 宋体大标题 + 金线分隔（5 大内容章节专用，区别于通用 .section-head）
   设计目标：滚动时凭"朱印序号一二三四五 + 宋体大标题"一眼定位身处第几章 ===== */
.tool-chapter-head {
  display: flex;
  align-items: center;
  gap: var(--space-4);
  margin-bottom: var(--space-5);
  padding-bottom: var(--space-4);
  border-bottom: 1.5px solid var(--gold-soft);
  position: relative;
}
/* 朱红起首短线：刊头编辑感，压在金线之上 */
.tool-chapter-head::after {
  content: "";
  position: absolute;
  left: 0;
  bottom: -1.5px;
  width: 72px;
  height: 1.5px;
  background: var(--accent);
}
/* 复用 §28 朱印，章节头内统一尺寸 */
.tool-chapter-head .seal-stamp {
  width: 46px;
  height: 46px;
  font-size: 22px;
  flex-shrink: 0;
}
/* 关掉朱印中缝阴刻线：序号为"二三四五"等多横笔画时，会与这条横线叠成一道淡淡的"一"痕迹 */
.tool-chapter-head .seal-stamp::after { display: none; }
.chapter-head-text { min-width: 0; }
.chapter-title {
  font-family: var(--font-serif);
  font-size: clamp(22px, 2.4vw, 28px);
  font-weight: 700;
  letter-spacing: 0.01em;
  line-height: 1.25;
  color: var(--text-1);
  margin: 0 0 3px;
}
.chapter-sub {
  font-size: 14px;
  color: var(--text-3);
  letter-spacing: 0.02em;
  line-height: 1.5;
  margin: 0;
}
@media (max-width: 768px) {
  .tool-chapter-head { gap: var(--space-3); margin-bottom: var(--space-4); }
  .tool-chapter-head .seal-stamp { width: 40px; height: 40px; font-size: 19px; }
  .chapter-sub { font-size: 13px; }
}

/* 合并大卡片：让整组共享一个 doc.glass-ring */
.tool-merged-block {
  margin: 0;
}

/* 子区：第一个紧贴卡片顶部，后续子区用分隔线 + padding-top 区分 */
.merged-subblock {
  margin: 0;
}
.merged-subblock + .merged-subblock {
  margin-top: var(--space-5);
  padding-top: var(--space-5);
  border-top: 1px solid var(--border-2);
}
/* 子区内首元素紧贴顶（避免与 padding-top 叠加多余空隙）*/
.merged-subblock > :first-child {
  margin-top: 0;
}
.merged-subblock > :last-child {
  margin-bottom: 0;
}

/* 子区标题（h3）：左边 4px 朱红色条作视觉锚点 + 加粗 + 字距 */
.subblock-title {
  font-size: 18px;
  font-weight: 700;
  letter-spacing: 0.02em;
  margin: 0 0 var(--space-4);
  color: var(--text-1);
  padding-left: var(--space-3);
  border-left: 4px solid var(--accent);
  display: flex;
  align-items: baseline;
  gap: var(--space-3);
  flex-wrap: wrap;
  line-height: 1.4;
}
.subblock-title .subblock-tip {
  font-size: 13px;
  font-weight: 400;
  color: var(--text-3);
  letter-spacing: 0;
  border-left: 1px solid var(--divider);
  padding-left: var(--space-3);
}
.subblock-h4 {
  font-size: 14.5px;
  font-weight: 700;
  margin: var(--space-4) 0 var(--space-2);
  color: var(--gold-deep);
  letter-spacing: 0.05em;
}
.tool-merged-block .lead {
  font-size: 16px;
  line-height: 1.75;
  color: var(--text-2);
  margin: 0;
}

/* ===== 数据表统一样式（取代 tool.html 内联 style）===== */
.table-scroll { overflow-x: auto; margin: 0 calc(-1 * var(--space-2)); padding: 0 var(--space-2); }
.data-table {
  width: 100%;
  border-collapse: separate;
  border-spacing: 0;
  font-size: 14px;
  border-radius: var(--radius-sm);
  overflow: hidden;
  border: 1px solid rgba(184, 115, 46, 0.18);
  background: var(--glass-bg);
}
/* 表头：暖金渐变 + 加粗大字距 + 朱红底边 */
.data-table thead th {
  text-align: left;
  font-weight: 700;
  padding: 14px 16px;
  background: linear-gradient(180deg, rgba(184, 115, 46, 0.10), transparent);
  color: var(--text-1);
  font-size: 13px;
  letter-spacing: 0.08em;
  border-bottom: 2px solid var(--gold);
  white-space: nowrap;
}
.data-table tbody td {
  padding: 12px 16px;
  border-bottom: 1px solid var(--divider);
  vertical-align: top;
  color: var(--text-2);
  line-height: 1.7;
  transition: background .15s var(--easing);
}
/* 斑马纹：奇数行弱栗底色（与单元格分隔结合，扫读更轻松） */
.data-table tbody tr:nth-child(odd) td {
  background: rgba(107, 52, 16, 0.025);
}
/* 第一列加粗（通常是"对比项 / 输入"列，做行头标识）*/
.data-table tbody td:first-child {
  font-weight: 600;
  color: var(--text-1);
}
.data-table tbody tr:last-child td { border-bottom: none; }
.data-table tbody tr:hover td { background: rgba(184, 115, 46, 0.08); }
.data-table .td-mono { font-family: var(--font-mono); font-size: 13px; color: var(--text-2); }
.data-table .td-note { color: var(--text-3); font-size: 13px; line-height: 1.65; }

/* ===== formula 公式展示 ===== */
.formula-expr {
  font-family: ui-monospace, Menlo, monospace;
  font-size: 18px;
  text-align: center;
  background: var(--surface-2);
  padding: var(--space-4);
  border-radius: var(--radius-md);
  margin: 0 0 var(--space-3);
  color: var(--text-1);
  border: 1px solid var(--border-2);
}
.var-list {
  list-style: none;
  padding: 0;
  margin: var(--space-3) 0 var(--space-4);
  display: flex;
  flex-direction: column;
  gap: 8px;
}
.var-list li {
  display: flex;
  align-items: baseline;
  gap: var(--space-3);
  padding: 10px var(--space-3);
  background: var(--surface-2);
  border-radius: var(--radius-sm);
  border-left: 3px solid var(--gold);
  font-size: 14px;
  color: var(--text-2);
  line-height: 1.7;
  transition: background .15s var(--easing), border-color .15s var(--easing);
}
.var-list li:hover {
  background: rgba(184, 115, 46, 0.08);
  border-left-color: var(--gold-deep);
}
.var-list code {
  font-family: var(--font-mono);
  font-weight: 700;
  font-size: 13px;
  color: var(--accent);
  background: transparent;
  padding: 0;
  border-radius: 0;
  letter-spacing: 0.02em;
  white-space: nowrap;
  flex-shrink: 0;
  min-width: 56px;
}

/* ===== 步骤条：编号圆点 + 连线（视觉 stepper，替代朴素 ol）=====
   .doc .steps-ol 提高特异性压过 .doc ol 的 list-style:decimal */
.steps-ol,
.doc .steps-ol {
  list-style: none;
  counter-reset: step;
  margin: 0;
  padding: 0;
}
.steps-ol li {
  position: relative;
  counter-increment: step;
  margin: 0;
  padding: 0 0 var(--space-5) calc(var(--space-6) + var(--space-2));
  line-height: 1.75;
  color: var(--text-2);
}
/* 编号圆点（朱红描边款，落在左侧）*/
.steps-ol li::before {
  content: counter(step);
  position: absolute;
  left: 0;
  top: -2px;
  width: 30px;
  height: 30px;
  border-radius: 50%;
  background: var(--accent-soft);
  border: 1.5px solid var(--accent);
  color: var(--accent);
  font-family: var(--font-mono);
  font-weight: 700;
  font-size: 14px;
  display: grid;
  place-items: center;
}
/* 竖向连线：圆点底连到下一步，形成"流程" */
.steps-ol li::after {
  content: "";
  position: absolute;
  left: 15px;
  top: 30px;
  bottom: 0;
  width: 1.5px;
  background: var(--divider);
}
.steps-ol li:last-child { padding-bottom: 0; }
.steps-ol li:last-child::after { display: none; }

/* ===== 错误对照在 doc 内 —— 已无外层 glass-ring，改用细边 ===== */
.tool-merged-block .error-list { margin: 0; }
.tool-merged-block .error-item {
  padding: var(--space-4);
  border: 1px solid var(--border-2);
  border-radius: var(--radius-md);
  background: var(--glass-bg-soft);
  margin-bottom: var(--space-3);
}
.tool-merged-block .error-item:last-child { margin-bottom: 0; }
.tool-merged-block .error-title {
  font-size: 15px;
  font-weight: 600;
  margin: 0 0 var(--space-3);
  color: var(--text-1);
}

/* ===== 典籍引用块 ===== */
.ref-quote {
  position: relative;
  border-left: 4px solid var(--accent);
  padding: var(--space-4) var(--space-5) var(--space-4) var(--space-7);
  margin: var(--space-3) 0;
  background: var(--surface-2);   /* 减重：中性暖底替代整块朱红 accent-soft（守 §7.4.3.1 不大面积铺色）*/
  border-radius: 0 var(--radius-md) var(--radius-md) 0;
  overflow: hidden;
}
.ref-quote::before {
  content: '"';
  position: absolute;
  top: -10px;
  left: var(--space-3);
  font-family: var(--font-serif);
  font-size: 72px;
  color: var(--accent);
  opacity: 0.28;
  line-height: 1;
  user-select: none;
  pointer-events: none;
}
.ref-quote p {
  font-style: normal;
  font-family: var(--font-serif);
  font-size: 16px;
  line-height: 1.85;
  margin: 0 0 var(--space-3);
  color: var(--text-1);
  letter-spacing: 0.02em;
}
.ref-quote footer {
  text-align: right;
  color: var(--accent-2);
  font-size: 13px;
  font-weight: 600;
  letter-spacing: 0.05em;
}
.ref-quote footer a {
  color: var(--accent);
  text-decoration: none;
}
.ref-quote footer a:hover { text-decoration: underline; }

/* 移动端：分组间距压缩 */
@media (max-width: 768px) {
  .tool-section-group { padding-top: var(--space-5); padding-bottom: var(--space-5); }
  .subblock-title { font-size: 16px; }
  .subblock-title .subblock-tip { font-size: 12px; }
  .data-table { font-size: 13px; }
  .data-table thead th, .data-table tbody td { padding: 8px 10px; }
  .formula-expr { font-size: 15px; padding: var(--space-3); }
  .ref-quote p { font-size: 15px; }
}

/* ============================================================
   §41 /categories/ 全部分类总览 + /hot/ 热门工具列表（独立 SEO 页）
   ============================================================ */

/* 简单页面 hero：纯居中标题 + 副说明
 * 间距策略：hero 自身仅留小 top padding；下 padding 交给紧邻 section（覆盖 64px 默认）
 */
.category-hero {
  padding: var(--space-4) 0 0;
  text-align: center;
}
.category-hero h1 {
  font-size: clamp(24px, 2.8vw, 32px);
  font-weight: 700;
  letter-spacing: -0.025em;
  line-height: 1.2;
  margin: 0 0 6px;
}
.category-hero p {
  font-size: 14px;
  color: var(--text-3);
  margin: 0;
}
/* hero 下方紧邻的 section：收紧上 padding（默认 .section 是 64px 太大）*/
.category-hero + .section {
  padding-top: var(--space-5);
}

/* /categories/ 大类列表条目 */
.all-cat-list {
  display: flex;
  flex-direction: column;
  gap: var(--space-4);
}
.all-cat-item {
  background: var(--container-solid-bg);
  border-radius: var(--radius-lg);
  padding: var(--space-5);
  box-shadow: var(--glass-shadow);
  position: relative;
  isolation: isolate;
  transition: transform .25s var(--easing), box-shadow .25s var(--easing);
}
.all-cat-item:hover {
  transform: translateY(-2px);
  box-shadow: var(--glass-shadow-hover);
}
.all-cat-item::before {
  content: ""; position: absolute; inset: 0;
  border-radius: inherit;
  padding: 1px;
  background: var(--border-grad);
  -webkit-mask: linear-gradient(#000,#000) content-box, linear-gradient(#000,#000);
  -webkit-mask-composite: xor; mask-composite: exclude;
  pointer-events: none;
}
.all-cat-head {
  display: flex;
  align-items: center;
  gap: var(--space-4);
  text-decoration: none;
  color: inherit;
}
.all-cat-head .cat-icon {
  flex-shrink: 0;
  width: 56px; height: 56px;
  border-radius: var(--radius-md);
  display: grid; place-items: center;
  font-size: 24px;
  font-weight: 700;
  color: var(--on-accent);
  letter-spacing: -0.03em;
  box-shadow:
    inset 0 1px 0 rgba(255,255,255,0.4),
    inset 0 -2px 6px rgba(60,30,10,0.15),
    0 4px 12px rgba(60,30,10,0.12);
}
.all-cat-meta { flex: 1; min-width: 0; }
.all-cat-title {
  font-size: 19px;
  font-weight: 600;
  margin: 0 0 4px;
  letter-spacing: -0.01em;
  display: flex;
  align-items: baseline;
  gap: var(--space-3);
  flex-wrap: wrap;
}
.all-cat-count {
  font-size: 13px;
  font-weight: 400;
  color: var(--text-3);
}
.all-cat-desc {
  font-size: 13.5px;
  color: var(--text-3);
  line-height: 1.55;
  margin: 0;
}
.all-cat-head .cat-arrow {
  flex-shrink: 0;
  width: 20px; height: 20px;
  color: var(--text-soft);
  transition: transform .2s var(--easing), color .2s var(--easing);
}
.all-cat-item:hover .cat-arrow {
  color: var(--accent);
  transform: translateX(3px);
}
.all-cat-subs {
  margin-top: var(--space-4);
  padding-top: var(--space-3);
  border-top: 1px solid var(--border-2);
  display: flex;
  flex-wrap: wrap;
  gap: 8px;
}
.sub-chip {
  display: inline-flex;
  align-items: center;
  padding: 5px 12px;
  border-radius: 999px;
  font-size: 13px;
  color: var(--text-2);
  background: var(--surface-2);
  text-decoration: none;
  transition: background .2s var(--easing), color .2s var(--easing);
}
.sub-chip:hover {
  background: var(--accent-soft);
  color: var(--accent);
}
@media (max-width: 640px) {
  .all-cat-item { padding: var(--space-4); }
  .all-cat-head { gap: var(--space-3); }
  .all-cat-head .cat-icon { width: 48px; height: 48px; font-size: 20px; border-radius: 12px; }
  .all-cat-title { font-size: 17px; }
}

/* /hot/ 分页器 */
.pager {
  display: flex;
  align-items: center;
  justify-content: center;
  gap: var(--space-4);
  margin-top: var(--space-6);
  flex-wrap: wrap;
}
.pager-btn {
  display: inline-flex;
  align-items: center;
  padding: 8px 18px;
  border-radius: 999px;
  background: var(--surface-2);
  color: var(--text-1);
  text-decoration: none;
  font-size: 14px;
  font-weight: 500;
  transition: background .2s var(--easing), color .2s var(--easing);
}
.pager-btn:hover {
  background: var(--accent);
  color: var(--on-accent);
}
.pager-btn.is-disabled {
  background: transparent;
  color: var(--text-soft);
  cursor: not-allowed;
}
.pager-info {
  font-size: 13px;
  color: var(--text-3);
}
.pager-info strong {
  color: var(--text-1);
  font-weight: 600;
}

/* ============================================================
   §42 搜索 modal 实时结果（API 驱动）
   - .search-modal-results 由 common.js 动态填充
   - .search-item 单条结果（icon + name + summary + meta + arrow）
   - .search-state 默认 / 加载 / 无结果 / 错误占位
   - <mark> 高亮匹配字符
   ============================================================ */

.search-modal-results {
  flex: 1;
  overflow-y: auto;
  padding: 6px 8px 12px;
  position: relative;
  z-index: 2;
  min-height: 200px;
  max-height: 60vh;
}

.search-section-label {
  font-size: 11px;
  font-weight: 600;
  color: var(--text-3);
  letter-spacing: 0.06em;
  text-transform: uppercase;
  padding: 8px 12px 6px;
}

.search-item {
  display: flex;
  align-items: center;
  gap: 12px;
  padding: 10px 12px;
  border-radius: var(--radius-sm);
  text-decoration: none;
  color: inherit;
  cursor: pointer;
  transition: background .15s var(--easing);
}
.search-item.is-active {
  background: var(--accent-soft);
}
.search-item:focus-visible { outline: none; }

.search-item-icon {
  flex-shrink: 0;
  width: 36px;
  height: 36px;
  display: grid;
  place-items: center;
  border-radius: var(--radius-sm);
  font-size: 15px;
  font-weight: 700;
  color: var(--on-accent);
  letter-spacing: -0.02em;
  box-shadow:
    inset 0 1px 0 rgba(255,255,255,0.4),
    0 2px 4px rgba(60,30,10,0.08);
}
.search-item-icon-fallback {
  background: var(--surface-2);
  color: var(--text-soft);
  box-shadow: none;
}

.search-item-body {
  flex: 1;
  min-width: 0;
}
.search-item-name {
  font-size: 14px;
  font-weight: 600;
  color: var(--text-1);
  margin: 0 0 2px;
  display: flex;
  align-items: center;
  gap: 8px;
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}
.search-item-summary {
  font-size: 12.5px;
  color: var(--text-3);
  line-height: 1.45;
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
  margin: 0 0 2px;
}
.search-item-meta {
  font-size: 11.5px;
  color: var(--text-soft);
}
.search-item-type {
  font-size: 10.5px;
  font-weight: 500;
  color: var(--accent);
  background: var(--accent-soft);
  padding: 1px 6px;
  border-radius: var(--radius-xs);
  letter-spacing: 0;
}
.search-item-arrow {
  flex-shrink: 0;
  width: 16px;
  height: 16px;
  color: var(--text-soft);
  opacity: 0;
  transition: opacity .15s var(--easing), transform .15s var(--easing);
}
.search-item.is-active .search-item-arrow {
  opacity: 1;
  color: var(--accent);
  transform: translateX(2px);
}

/* 高亮匹配字符 */
.search-item mark,
.search-modal-results mark {
  background: rgba(192,57,43,0.18);
  color: var(--accent);
  padding: 0 2px;
  border-radius: 3px;
  font-weight: 600;
}
[data-theme="dark"] .search-item mark,
[data-theme="dark"] .search-modal-results mark {
  background: rgba(96,165,250,0.22);
  color: #93c5fd;
}

  :root[data-theme="dark"] .search-item mark,
  :root[data-theme="dark"] .search-modal-results mark {
    background: rgba(96,165,250,0.22);
    color: #93c5fd;
  }


/* 状态占位（默认/加载/无结果/错误） */
.search-state {
  text-align: center;
  padding: 36px 16px 24px;
  color: var(--text-3);
  font-size: 13px;
  line-height: 1.6;
}
.search-state p { margin: 0 0 4px; }
.search-state-tip {
  color: var(--text-soft);
  font-size: 12px;
}
.search-state-link {
  display: inline-block;
  margin-top: 14px;
  padding: 6px 14px;
  border-radius: 999px;
  background: var(--accent-soft);
  color: var(--accent);
  text-decoration: none;
  font-size: 13px;
  font-weight: 500;
}
.search-state-link:hover { background: var(--accent); color: var(--on-accent); }

/* 自适应高度（小屏不要 60vh 太高） */
@media (max-width: 640px) {
  .search-modal-results { max-height: 55vh; min-height: 160px; }
  .search-item { padding: 10px; gap: 10px; }
  .search-item-icon { width: 32px; height: 32px; font-size: 13px; }
  .search-item-summary { font-size: 12px; }
  .search-modal-foot { gap: 12px; font-size: 11px; padding: 10px 14px; }
}

/* ============================================================
   §43.0 全局防水平溢出兜底
   - 任何页面都不应出现水平滚动条（overflow-x: clip 比 hidden 更稳）
   - .tool-layout grid items 强制 min-width:0 防内容撑开 grid */
html, body { max-width: 100%; overflow-x: clip; }
.tool-layout > * { min-width: 0; box-sizing: border-box; }

/* ============================================================
   §43 工具页通用组件（被所有工具复用）
   - .tool-form           工具表单容器
   - .field               单字段（label + input + 错误提示）
   - .stat-card           摘要卡（结果区顶部）
   - .data-table          数据表格（已存在 §39，仅补 .num 右对齐）
   - .tool-tabs           结果多视图切换
   - .stacked-bar / pie-wrap / line-chart  图表组件
   - .toast-container     Toast 通知
   - .history-list        历史方案
   ============================================================ */

/* ---------- 工具表单 ---------- */
.tool-form { display: flex; flex-direction: column; gap: var(--space-4); }
.tool-form .field {
  display: flex;
  flex-direction: column;
  gap: 4px;
  position: relative;
}
.tool-form .field-row {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: var(--space-4);
}
.tool-form label {
  font-size: 13px;
  font-weight: 500;
  color: var(--text-2);
  display: flex;
  align-items: center;
  justify-content: space-between;
}
.tool-form .field-tip {
  font-size: 12px;
  color: var(--text-3);
  font-weight: 400;
}
.tool-form .input-wrap {
  display: flex;
  align-items: center;
  gap: 0;
  background: var(--surface-2);
  border: 1px solid var(--border-2);
  border-radius: var(--radius-sm);
  transition: border-color .15s var(--easing), background .15s var(--easing);
  overflow: hidden;
}
.tool-form .input-wrap:focus-within {
  border-color: var(--accent);
  background: var(--card-solid-bg);
}
.tool-form .input-wrap input,
.tool-form .input-wrap select {
  flex: 1;
  background: transparent;
  border: none;
  outline: none;
  padding: 10px 12px;
  font-size: 14px;
  color: var(--text-1);
  min-width: 0;
}
.tool-form .input-wrap .unit {
  padding: 0 12px;
  color: var(--text-3);
  font-size: 13px;
  border-left: 1px solid var(--border-2);
  user-select: none;
}
/* range 滑块 */
.tool-form input[type="range"] {
  width: 100%;
  margin-top: 6px;
  -webkit-appearance: none;
  height: 4px;
  background: var(--surface-3);
  border-radius: 2px;
  outline: none;
}
.tool-form input[type="range"]::-webkit-slider-thumb {
  -webkit-appearance: none;
  width: 18px; height: 18px;
  border-radius: 50%;
  background: var(--accent);
  cursor: pointer;
  box-shadow: 0 1px 4px rgba(60,30,10,0.25);
}
.tool-form input[type="range"]::-moz-range-thumb {
  width: 18px; height: 18px;
  border-radius: 50%;
  background: var(--accent);
  border: none;
  cursor: pointer;
}
.tool-form select {
  cursor: pointer;
}
/* 按钮组（如贷款类型 / 还款方式选择 / 提前还款处理）
 * 同心圆角原则：外层 .doc.glass-ring 24 → seg-group 12 → 内 label 9，与 .tool-tablist 一致
 */
.tool-form .seg-group {
  display: inline-flex;
  background: var(--surface-2);
  border: 1px solid var(--border-2);
  border-radius: var(--radius-sm);
  padding: 3px;
}
.tool-form .seg-group label {
  flex: 1;
  padding: 7px 14px;
  border-radius: var(--radius-sm);
  cursor: pointer;
  font-size: 13px;
  color: var(--text-2);
  transition: all .15s;
  margin: 0;
  /* flex 居中（与 .tool-tab 同款），中英混排都对齐 */
  display: inline-flex;
  align-items: center;
  justify-content: center;
  text-align: center;
}
.tool-form .seg-group input { display: none; }
.tool-form .seg-group input:checked + label,
.tool-form .seg-group label:has(input:checked) {
  background: var(--accent);
  color: var(--on-accent);
}
/* 错误状态 */
.tool-form .field.has-error .input-wrap { border-color: #ef4444; }
.tool-form .field-error {
  font-size: 12px;
  color: #ef4444;
  margin-top: 2px;
}
/* 表单按钮区 */
.tool-form .form-actions {
  display: flex;
  gap: var(--space-3);
  flex-wrap: wrap;
  margin-top: var(--space-2);
}

/* ---------- 摘要卡（结果摘要） ---------- */
.stats-grid {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(140px, 1fr));
  gap: var(--space-3);
  margin-bottom: var(--space-4);
}
.stat-card {
  padding: var(--space-4) var(--space-3);
  background: var(--surface-2);
  border: 1px solid var(--border-2);
  border-radius: var(--radius-md);
  text-align: center;
}
.stat-card.is-primary { border-color: var(--accent);  background: var(--accent-soft);  }
.stat-card.is-success { border-color: var(--success); background: var(--success-soft); }
.stat-card.is-warning { border-color: var(--warning); background: var(--warning-soft); }
.stat-card.is-danger  { border-color: var(--danger);  background: var(--danger-soft);  }
.stat-label { font-size: 12px; color: var(--text-3); margin-bottom: 6px; }
.stat-value { font-size: 22px; font-weight: 700; color: var(--text-1); letter-spacing: -0.01em; }
/* 语义数值上色（22px/700 ≥ AA-large 3:1，暖色达标） */
.stat-card.is-primary .stat-value { color: var(--accent-text); }
.stat-card.is-success .stat-value { color: var(--success); }
.stat-card.is-warning .stat-value { color: var(--warning); }
.stat-card.is-danger  .stat-value { color: var(--danger);  }
.stat-sub { font-size: 11.5px; color: var(--text-3); margin-top: 4px; }

/* ---------- 数据表格 .num 右对齐补充 ---------- */
.data-table .num { text-align: right; font-variant-numeric: tabular-nums; }

/* ---------- 多视图 Tabs ----------
 * 同心圆角原则（Apple HIG）：外层 .doc.glass-ring 24px → tablist 12px → active tab 9px
 * 数学：内层圆角 = 外层圆角 - padding，逐层递减形成层级
 */
.tool-tabs { margin-top: var(--space-4); }
.tool-tablist {
  display: flex;
  gap: 2px;
  background: var(--surface-2);
  border-radius: var(--radius-sm);
  padding: 3px;
  margin-bottom: var(--space-4);
  overflow-x: auto;
}
.tool-tab {
  flex: 1;
  padding: 8px 16px;
  border-radius: var(--radius-sm);
  background: transparent;
  color: var(--text-2);
  font-size: 13.5px;
  font-weight: 500;
  cursor: pointer;
  transition: all .15s;
  white-space: nowrap;
  border: none;
  text-align: center;     /* button 默认 text-align 在某些浏览器是 left，强制居中 */
  display: inline-flex;
  align-items: center;
  justify-content: center;
}
.tool-tab:hover { color: var(--text-1); }
.tool-tab.is-active {
  background: var(--card-solid-bg);
  color: var(--text-1);
  box-shadow: 0 1px 3px rgba(60,30,10,0.06);
}
.tool-tabpane { display: none; }
.tool-tabpane.is-active { display: block; }

/* ---------- 图表 ---------- */
.stacked-bar {
  display: flex;
  border-radius: var(--radius-md);
  overflow: hidden;
  box-shadow: inset 0 0 0 1px var(--border-2);
}
.bar-seg { transition: width .4s var(--easing-spring); }
.bar-legend {
  display: flex;
  flex-wrap: wrap;
  gap: var(--space-3);
  margin-top: var(--space-3);
  font-size: 12.5px;
  color: var(--text-2);
}
.bar-legend-vertical { flex-direction: column; gap: 6px; }
.bar-legend-item {
  display: inline-flex;
  align-items: center;
  gap: 6px;
}
.bar-legend-dot {
  display: inline-block;
  width: 10px; height: 10px;
  border-radius: 2px;
}
.bar-legend-pct {
  color: var(--text-3);
  font-variant-numeric: tabular-nums;
}
.pie-wrap {
  display: flex;
  align-items: center;
  gap: var(--space-5);
  flex-wrap: wrap;
  justify-content: center;
}
.line-chart svg { display: block; max-width: 100%; }

/* ---------- 结果空态 / 错误态 ---------- */
.result-empty,
.result-error {
  text-align: center;
  padding: var(--space-7) var(--space-5);
  color: var(--text-3);
  font-size: 14px;
}
.result-error { color: #ef4444; }

/* ---------- Toast 通知 ---------- */
.toast-container {
  position: fixed;
  top: 80px;
  left: 50%;
  transform: translateX(-50%);
  z-index: 9999;
  display: flex;
  flex-direction: column;
  gap: 8px;
  pointer-events: none;
}
.toast {
  pointer-events: auto;
  padding: 10px 18px;
  border-radius: 999px;
  background: var(--card-solid-bg);
  border: 1px solid var(--border-2);
  font-size: 13px;
  color: var(--text-1);
  box-shadow: var(--glass-shadow-hover);
  opacity: 0;
  transform: translateY(-8px);
  transition: opacity .25s, transform .25s var(--easing-spring);
}
.toast.is-show { opacity: 1; transform: translateY(0); }
.toast.is-leave { opacity: 0; transform: translateY(-8px); }
.toast-success { border-color: rgba(16,185,129,0.4); color: #047857; }
.toast-warning { border-color: rgba(245,158,11,0.4); color: #b45309; }
.toast-error   { border-color: rgba(239,68,68,0.4);  color: #b91c1c; }

/* ---------- 历史方案列表 ---------- */
.tool-history {
  margin-top: var(--space-4);
  padding-top: var(--space-4);
  border-top: 1px solid var(--border-2);
}
.tool-history-title {
  font-size: 12px;
  font-weight: 600;
  color: var(--text-3);
  letter-spacing: 0.06em;
  text-transform: uppercase;
  margin-bottom: var(--space-2);
}
.history-list {
  display: flex;
  flex-direction: column;
  gap: 4px;
  margin-bottom: var(--space-2);
}
.history-item {
  display: flex;
  align-items: center;
  gap: var(--space-3);
  padding: 8px 12px;
  border-radius: var(--radius-sm);
  background: var(--surface-2);
  border: none;
  cursor: pointer;
  text-align: left;
  font-size: 13px;
  transition: background .15s;
}
.history-item:hover { background: var(--accent-soft); }
.history-label { flex: 1; color: var(--text-1); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.history-time { color: var(--text-3); font-size: 11.5px; }
.history-remove {
  width: 18px; height: 18px;
  display: grid; place-items: center;
  border-radius: 50%;
  color: var(--text-soft);
  font-size: 14px;
  line-height: 1;
}
.history-remove:hover { background: var(--text-soft); color: var(--on-accent); }
.history-clear {
  font-size: 12px;
  color: var(--text-3);
  background: none;
  border: none;
  cursor: pointer;
  padding: 4px;
}
.history-clear:hover { color: #ef4444; }

/* ---------- 移动端适配 ---------- */
@media (max-width: 640px) {
  .tool-form .field-row { grid-template-columns: 1fr; }
  .stats-grid { grid-template-columns: repeat(2, 1fr); gap: 8px; }
  .stat-value { font-size: 18px; }
  .tool-tablist { padding: 2px; gap: 1px; }
  .tool-tab { padding: 6px 10px; font-size: 12.5px; }
}

/* ============================================================
   §44 工具组件移动端补强（375 / 480 / 640 / 768 三档）
   重点针对：form-actions 按钮堆叠 / seg-group 在 320px 自适应 / 表格紧凑
   ============================================================ */

/* 768px 平板 */
@media (max-width: 768px) {
  .tool-form .form-actions { gap: 8px; }
  .tool-form .form-actions .btn { flex: 1 1 calc(50% - 8px); }
  .tool-history { padding-top: var(--space-3); margin-top: var(--space-3); }
}

/* 640px 手机大屏 */
@media (max-width: 640px) {
  /* 表单字号 / 间距全局微缩 */
  .tool-form { gap: var(--space-3); }
  .tool-form label { font-size: 12.5px; }
  .tool-form .input-wrap input,
  .tool-form .input-wrap select { padding: 9px 10px; font-size: 14px; }
  .tool-form .input-wrap .unit { padding: 0 10px; font-size: 12px; }
  .tool-form .seg-group label { padding: 6px 10px; font-size: 12.5px; }

  /* 摘要卡 2 列，字号收紧 */
  .stats-grid { grid-template-columns: repeat(2, 1fr); gap: 8px; margin-bottom: var(--space-3); }
  .stat-card { padding: var(--space-3) var(--space-2); }
  .stat-value { font-size: 17px; }
  .stat-label { font-size: 11px; }
  .stat-sub { font-size: 11px; }

  /* 数据表紧凑（窄屏字号收紧 + padding 缩） */
  .data-table { font-size: 12.5px; }
  .data-table thead th { padding: 7px 8px; font-size: 11.5px; }
  .data-table tbody td { padding: 7px 8px; }
  .data-table .td-mono { font-size: 11.5px; }

  /* 工具结果区 padding 减少（让内容获得更多宽度）*/
  .tool-result-pane,
  .tool-input-pane { padding: var(--space-4) !important; }

  /* Tab 按钮窄屏字号 */
  .tool-tab { padding: 6px 10px; font-size: 12.5px; }

  /* 历史方案窄屏 */
  .tool-history-title { font-size: 11px; }
  .history-item { padding: 7px 10px; font-size: 12.5px; }
  .history-time { font-size: 11px; }

  /* 字段提示位置（label 右侧）窄屏改为下方 */
  .tool-form label { flex-direction: column; align-items: flex-start; gap: 2px; }
  .tool-form .field-tip { font-size: 11.5px; }

  /* 折线图高度收缩 */
  .line-chart svg { height: 200px !important; }

  /* form-actions 按钮在 640px 仍保持 2 列，每个按钮全宽 */
  .tool-form .form-actions .btn { font-size: 12.5px; padding: 8px 10px; }
}

/* 480px 极窄手机屏 */
@media (max-width: 480px) {
  /* 摘要卡降到 1 列时显得太大；保持 2 列但字号再缩 */
  .stat-value { font-size: 15px; letter-spacing: -0.02em; }
  .stat-card { padding: 10px 8px; }

  /* 数据表横向滚动指引（提示用户可滑）*/
  .table-scroll {
    background:
      linear-gradient(to right, var(--card-solid-bg) 30%, transparent),
      linear-gradient(to right, transparent, var(--card-solid-bg) 70%) right,
      radial-gradient(at left, rgba(107,52,16,0.1), transparent 70%),
      radial-gradient(at right, rgba(107,52,16,0.1), transparent 70%) right;
    background-size: 30px 100%, 30px 100%, 14px 100%, 14px 100%;
    background-repeat: no-repeat;
    background-attachment: local, local, scroll, scroll;
  }

  /* seg-group 三选项（如商业/公积金/组合贷）在 320-480 易溢出 → 文字缩短 */
  .tool-form .seg-group label { padding: 6px 8px; font-size: 12px; letter-spacing: -0.01em; }

  /* 饼图在窄屏垂直堆叠 */
  .pie-wrap { flex-direction: column; gap: var(--space-3); }
  .pie-wrap svg { width: 140px; height: 140px; }

  /* 工具页 doc 内 padding 再压缩 */
  .doc { padding: var(--space-4); }
  .tool-merged-block { padding: var(--space-4); }
  .merged-subblock + .merged-subblock { margin-top: var(--space-4); padding-top: var(--space-4); }
  .subblock-title { font-size: 15px; }
  .subblock-h4 { font-size: 13.5px; }

  /* Hero 在极窄屏 icon 缩小 */
  .icon-tile-lg { width: 56px !important; height: 56px !important; font-size: 24px !important; }
  .tool-hero-text h1 { font-size: 20px; }
  .tool-hero-text p { font-size: 13px; }

  /* 隐私 note 字号（面包屑字号统一在 §17 mobile 规则中） */
  .tool-privacy-note { font-size: 12px; padding: 6px 12px; }
}


/* ============================================================
   §28 古籍 / 朱印模块（命格视觉强化 · 替代玻璃科技感）
   设计语言：宣纸+朱印+双线框（古籍编辑美学）
   核心 5 类：.seal-stamp / .classical-frame / .paper-grain
              .scroll-divider / .ordinal-seal
   全部可独立使用，与现有 .glass / .panel 组件无冲突
   ============================================================ */

/* ----- §28.1 朱印章（圆/方两形，带篆体感字） ----- */
.seal-stamp {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 56px;
  height: 56px;
  background: var(--accent);
  color: #FAF3E0;
  font-family: var(--font-serif);
  font-weight: 700;
  font-size: 18px;
  line-height: 1;
  letter-spacing: 0.1em;
  text-align: center;
  border-radius: var(--radius-xs);
  box-shadow:
    inset 0 0 0 2px rgba(255, 243, 224, 0.85),
    inset 0 0 0 3px var(--accent),
    0 2px 8px rgba(107, 52, 16, 0.20);
  /* 朱印边缘"飞白"破损感（轻微 mask） */
  transform: rotate(-2deg);
  user-select: none;
  position: relative;
}
.seal-stamp::after {
  /* 中间细条阴刻线（古印特征） */
  content: "";
  position: absolute;
  left: 30%; right: 30%; top: 50%;
  height: 1px;
  background: rgba(255, 243, 224, 0.30);
  transform: translateY(-0.5px);
}
.seal-stamp.round {
  border-radius: 50%;
  box-shadow:
    inset 0 0 0 2px rgba(255, 243, 224, 0.85),
    inset 0 0 0 3px var(--accent),
    0 2px 8px rgba(107, 52, 16, 0.20);
}
.seal-stamp.round::after { display: none; }
.seal-stamp.sm { width: 36px; height: 36px; font-size: 12px; }
.seal-stamp.lg { width: 80px; height: 80px; font-size: 26px; }

/* 朱印色相变体（命格忌色专用：紫=凶警 / 金=引导 / 沉香=次要） */
.seal-stamp.s-bad {
  background: var(--elem-shui);
  box-shadow:
    inset 0 0 0 2px rgba(255, 243, 224, 0.85),
    inset 0 0 0 3px var(--elem-shui),
    0 2px 8px rgba(107, 52, 16, 0.20);
}
.seal-stamp.s-bad.round {
  box-shadow:
    inset 0 0 0 2px rgba(255, 243, 224, 0.85),
    inset 0 0 0 3px var(--elem-shui),
    0 2px 8px rgba(107, 52, 16, 0.20);
}
.seal-stamp.s-gold {
  background: var(--gold);
  box-shadow:
    inset 0 0 0 2px rgba(255, 243, 224, 0.85),
    inset 0 0 0 3px var(--gold),
    0 2px 8px rgba(107, 52, 16, 0.20);
}
.seal-stamp.s-gold.round {
  box-shadow:
    inset 0 0 0 2px rgba(255, 243, 224, 0.85),
    inset 0 0 0 3px var(--gold),
    0 2px 8px rgba(107, 52, 16, 0.20);
}
.seal-stamp.s-soft {
  background: var(--text-soft);
  box-shadow:
    inset 0 0 0 2px rgba(255, 243, 224, 0.85),
    inset 0 0 0 3px var(--text-soft),
    0 2px 8px rgba(107, 52, 16, 0.20);
}

/* ----- §28.2 古籍双线框（区块标题装饰） ----- */
.classical-frame {
  position: relative;
  padding: var(--space-5) var(--space-6);
  background: var(--glass-bg-strong);
  border: 1px solid var(--gold);
  border-radius: var(--radius-sm);
  box-shadow:
    inset 0 0 0 1px rgba(255, 243, 224, 0.95),
    inset 0 0 0 4px var(--gold),
    inset 0 0 0 5px rgba(255, 243, 224, 0.95),
    0 4px 14px rgba(107, 52, 16, 0.10);
}
.classical-frame.minimal {
  /* 极简版：上下双横线（无侧线） */
  border: 0;
  background: transparent;
  border-top: 2px solid var(--gold);
  border-bottom: 2px solid var(--gold);
  position: relative;
  box-shadow: none;
  padding: var(--space-4) 0;
}
.classical-frame.minimal::before,
.classical-frame.minimal::after {
  content: "";
  position: absolute;
  left: 0; right: 0;
  height: 1px;
  background: var(--gold);
  opacity: 0.5;
}
.classical-frame.minimal::before { top: 4px; }
.classical-frame.minimal::after  { bottom: 4px; }

/* ----- §28.3 宣纸纤维纹理（背景 / 卡片可叠加） ----- */
.paper-grain {
  position: relative;
  isolation: isolate;
}
.paper-grain::before {
  content: "";
  position: absolute; inset: 0;
  border-radius: inherit;
  opacity: 0.08;
  mix-blend-mode: multiply;
  pointer-events: none;
  z-index: 0;
  background-image: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='160' height='160'><filter id='p'><feTurbulence type='fractalNoise' baseFrequency='1.2' numOctaves='2' stitchTiles='stitch'/><feColorMatrix values='0 0 0 0 0.42  0 0 0 0 0.20  0 0 0 0 0.06  0 0 0 0.45 0'/></filter><rect width='100%25' height='100%25' filter='url(%23p)'/></svg>");
  background-repeat: repeat;
}
.paper-grain > * { position: relative; z-index: 1; }

/* ----- §28.4 卷轴分隔（hr 替代，居中朱印缀） ----- */
.scroll-divider {
  display: flex;
  align-items: center;
  gap: var(--space-3);
  margin: var(--space-6) 0;
  color: var(--gold);
  font-size: 13px;
  letter-spacing: 0.3em;
  text-align: center;
}
.scroll-divider::before,
.scroll-divider::after {
  content: "";
  flex: 1;
  height: 1px;
  background: linear-gradient(90deg,
    transparent 0%,
    var(--gold) 20%,
    var(--gold) 80%,
    transparent 100%);
  opacity: 0.5;
}
.scroll-divider .mark {
  display: inline-flex;
  align-items: center; justify-content: center;
  width: 24px; height: 24px;
  background: var(--accent);
  color: #FAF3E0;
  border-radius: 50%;
  font-size: 13px;
  font-weight: 700;
  font-family: var(--font-serif);
  box-shadow: 0 2px 6px rgba(192, 57, 43, 0.30);
  flex-shrink: 0;
}

/* ----- §28.5 序号朱印（数字 1-99 装饰） ----- */
.ordinal-seal {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  min-width: 32px;
  height: 32px;
  padding: 0 8px;
  background: var(--accent);
  color: #FAF3E0;
  font-family: var(--font-mono);
  font-size: 14px;
  font-weight: 700;
  letter-spacing: 0;
  font-variant-numeric: tabular-nums;
  border-radius: var(--radius-xs);
  box-shadow:
    inset 0 0 0 1.5px rgba(255, 243, 224, 0.55),
    0 2px 4px rgba(107, 52, 16, 0.18);
  user-select: none;
  flex-shrink: 0;
}
.ordinal-seal.gold {
  background: var(--gold);
  box-shadow:
    inset 0 0 0 1.5px rgba(255, 243, 224, 0.55),
    0 2px 4px rgba(107, 52, 16, 0.18);
}

/* ----- §28.6 编辑性标题（首页/区块标题用） ----- */
.editorial-title {
  font-family: var(--font-serif);
  font-weight: 600;
  letter-spacing: 0;
  color: var(--text-1);
  display: inline-flex;
  align-items: baseline;
  gap: var(--space-3);
}
.editorial-title .num {
  font-family: var(--font-mono);
  font-size: 0.7em;
  color: var(--accent);
  font-weight: 600;
  letter-spacing: 0.1em;
  font-variant-numeric: tabular-nums;
}
.editorial-title .en {
  /* 英文副标题，小字号 */
  font-family: var(--font-mono);
  font-size: 0.45em;
  color: var(--text-3);
  letter-spacing: 0.3em;
  text-transform: uppercase;
  font-weight: 500;
  margin-left: var(--space-2);
}

/* ----- §28.7 暗色适配 ----- */

  :root[data-theme="dark"] .seal-stamp,
  :root[data-theme="dark"] .seal-stamp.round {
    box-shadow:
      inset 0 0 0 2px rgba(245, 230, 211, 0.30),
      inset 0 0 0 3px var(--accent),
      0 2px 8px rgba(0, 0, 0, 0.40);
  }
  :root[data-theme="dark"] .classical-frame {
    box-shadow:
      inset 0 0 0 1px rgba(245, 230, 211, 0.18),
      inset 0 0 0 4px var(--gold),
      inset 0 0 0 5px rgba(245, 230, 211, 0.18),
      0 4px 14px rgba(0, 0, 0, 0.30);
  }

[data-theme="dark"] .seal-stamp,
[data-theme="dark"] .seal-stamp.round {
  box-shadow:
    inset 0 0 0 2px rgba(245, 230, 211, 0.30),
    inset 0 0 0 3px var(--accent),
    0 2px 8px rgba(0, 0, 0, 0.40);
}
[data-theme="dark"] .classical-frame {
  box-shadow:
    inset 0 0 0 1px rgba(245, 230, 211, 0.18),
    inset 0 0 0 4px var(--gold),
    inset 0 0 0 5px rgba(245, 230, 211, 0.18),
    0 4px 14px rgba(0, 0, 0, 0.30);
}

/* ----- §28.8 Hero eyebrow（英文小字 caption，独立 block） ----- */
.hero-eyebrow {
  display: block;
  font-family: var(--font-mono);
  font-size: 11px;
  font-weight: 500;
  letter-spacing: 0.35em;
  text-transform: uppercase;
  color: var(--text-3);
  margin: 18px 0 4px;
  line-height: 1.4;
}
@media (max-width: 640px) {
  .hero-eyebrow { font-size: 10px; letter-spacing: 0.28em; margin: 14px 0 4px; }
}


/* ----- §29 工具页双栏 textarea grid 等高对齐补丁 -----
   修复"左输入框 / 右输出框"两侧因标题行高度不一致（一侧只有 <p>，另一侧
   含 flex 行 + 复制按钮）导致 textarea 视觉错位的问题。

   作用范围：.panel-body 内任何含 textarea 的双栏 grid（命名后缀 -grid）。

   策略：
   1) grid 默认 stretch — 两侧 grid item 等高（按 intrinsic 最高的来）
   2) grid item 内嵌 flex column — 让子元素纵向流动
   3) textarea 用 flex: 1 1 auto，保留模板原 min-height（240-360px），撑满 row 剩余
   4) 非 textarea 子元素 flex-shrink: 0，不被压扁
   5) 仅"裸 <p> 标题"抬到 30px min-height（对齐右侧 button flex 行；
      右侧"<p>+按钮"flex 行内含 30px button，align-items:center，本就 30px 高）
   6) 不动 div:first-child（避免破坏 stat-grid / opt-row 等容器） */
.panel-body [class*="-grid"]:has(> div > textarea) {
  align-items: stretch;
}
.panel-body [class*="-grid"]:has(> div > textarea) > div {
  display: flex;
  flex-direction: column;
  min-width: 0;
}
.panel-body [class*="-grid"]:has(> div > textarea) > div > textarea {
  flex: 1 1 auto;
}
.panel-body [class*="-grid"]:has(> div > textarea) > div > *:not(textarea) {
  flex-shrink: 0;
}
/* 单 <p> 标题行抬到 30px，与右侧 button flex 行同基线 */
.panel-body [class*="-grid"]:has(> div > textarea) > div > p:first-child {
  min-height: 30px;
  margin: 0 0 6px;
  display: flex;
  align-items: center;
}

/* ============================================================
   §31 移动端底部快捷导航（fixed bottom，≤768px 显示）
   组件：.mobile-bottom-nav / .m-nav-item / .m-nav-ico / .m-nav-lbl
   触发：JS 给当前页面的 .m-nav-item 加 .is-active
   ============================================================ */
.mobile-bottom-nav { display: none; }

@media (max-width: 768px) {
  /* 内容底部留出 nav 高度 + 安全区，避免被遮挡 */
  body { padding-bottom: calc(58px + env(safe-area-inset-bottom, 0px)); }

  .mobile-bottom-nav {
    display: flex;
    align-items: stretch;
    justify-content: space-around;
    position: fixed;
    left: 0; right: 0; bottom: 0;
    z-index: 90;
    background: var(--container-solid-bg);
    border-top: 1px solid var(--divider);
    padding: 6px 4px calc(6px + env(safe-area-inset-bottom, 0px));
    box-shadow: 0 -4px 18px rgba(107, 52, 16, 0.10); /* 暖栗投影，与全站光晕呼应 */
    backdrop-filter: saturate(150%);
    -webkit-backdrop-filter: saturate(150%);
  }

  .mobile-bottom-nav .m-nav-item {
    flex: 1 1 0;
    display: flex;
    flex-direction: column;
    align-items: center;
    justify-content: center;
    gap: 2px;
    padding: 4px 2px;
    color: var(--text-3);
    text-decoration: none;
    transition: color .2s var(--easing);
    min-width: 0;
  }

  .mobile-bottom-nav .m-nav-item:hover { color: var(--accent); }
  .mobile-bottom-nav .m-nav-item.is-active { color: var(--accent); }
  .mobile-bottom-nav .m-nav-item.is-active .m-nav-lbl { font-weight: 600; }

  .mobile-bottom-nav .m-nav-ico {
    width: 20px;
    height: 20px;
    color: currentColor;
  }

  .mobile-bottom-nav .m-nav-lbl {
    font-size: 10.5px;
    line-height: 1.2;
    letter-spacing: 0;
    white-space: nowrap;
  }

  /* 超窄屏（≤360px）再缩一档，确保 7 项不挤裂 */
  @media (max-width: 360px) {
    .mobile-bottom-nav .m-nav-item { padding: 4px 0; }
    .mobile-bottom-nav .m-nav-ico { width: 19px; height: 19px; }
    .mobile-bottom-nav .m-nav-lbl { font-size: 10px; }
  }

  /* button reset（去掉 native 按钮默认样式，让 .m-nav-item 类规则接管） */
  .mobile-bottom-nav button.m-nav-item {
    background: none;
    border: 0;
    cursor: pointer;
    font: inherit;
  }

  /* 中央搜索：朱红圆形气泡浮起（类似 iOS/Twitter 主操作按钮）*/
  .mobile-bottom-nav .m-nav-item--search { color: var(--text-2); }
  .mobile-bottom-nav .m-nav-item--search .m-nav-search-bubble {
    width: 42px;
    height: 42px;
    margin-top: -16px; /* 浮起：超出 nav 顶部 */
    margin-bottom: 2px;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    border-radius: 50%;
    background: var(--accent);
    color: var(--card-solid-bg);
    box-shadow: 0 4px 12px rgba(192, 57, 43, 0.30), 0 1px 3px rgba(107, 52, 16, 0.12);
    transition: transform .15s var(--easing), box-shadow .15s var(--easing);
  }
  .mobile-bottom-nav .m-nav-item--search:hover .m-nav-search-bubble,
  .mobile-bottom-nav .m-nav-item--search:active .m-nav-search-bubble {
    transform: translateY(-1px);
    box-shadow: 0 6px 16px rgba(192, 57, 43, 0.36), 0 2px 4px rgba(107, 52, 16, 0.14);
  }
  .mobile-bottom-nav .m-nav-item--search .m-nav-ico {
    width: 20px;
    height: 20px;
  }
}
