/* AI生成 */
/* ============================================================
   此木的车库 · cimu 主题（报纸感博客版式）
   当前设计基准（v28，CSS 缓存 v33）：
   · 纸色系：亮 #FBF7E9 内容区 / #FFFFFF 卡片与页面；暗 #282216 / #1E1B14（卡片 #2A2620）
   · 点状纹理：卡片与头条、文章正文区保留；归档/分类/瞬间主区恢复（首页主区无纹理）
   · 信息栏（全站含文章页左栏）：固定 200px（v24 从 180 加宽，平板/桌面同宽同高）
     与页面同步滚动不吸顶不限高，侧栏长于内容区时自然撑起页面；
     TOC 桌面端 sticky + max-height 自适应独立滚动 + 随视口收窄（clamp 136~192，封顶 192 = 15vw@容器满宽 1280）；
     正文块无固定上限填满正文列（v26），980~1280 两列连续同收、间距恒 gap 24、无重叠；
     980 处正文列 = 主区 700 − TOC 147 − gap 24 = 529，TOC 折叠（≤979）后正文跳变为平板主区全宽（跳变量恰为 TOC+gap）
   · 栅格：侧栏固定 200px，内容区 = 剩余，整体 max-width 1280px；断点 740/980
   · 卡片网格：默认两列，≥1172px 三列，手机（≤740px）两列
   · 归档/分类/瞬间共用 _partial/blog-list-page.ejs 模板（chron/cards/moments 三模式）
   · 分页：首页与分类/标签页共用客户端分页模块（card-pagination），每页 12 张
   历史批次：v3 杂志版式 / v4 冷灰 / v5 知识库·博客主题分离 / v6 斑点纹理
   v7 布局修复 / v8 UI 批次二 / v9 归档时间轴 / v10 瞬间页 / v11 全站统一 /
   v12 细节修正 / v13 滚动与栅格重构 / v14 细节修正（纹理恢复+按钮对齐+列数规则）
   v15 移动端页脚精简 + 卡片行数等高 / v16 页脚去重 + 上下篇恢复 / v17 功能修正（筛选/纹理/归档hover/横滚留白）
   v18 侧栏同源拉伸 + 分页模块统一 + 最近文章标题（侧栏最新区块已删，改标签云）
   v19 侧栏修正：footer 全站恢复显示 + 文章页侧栏不再拉伸到页底
    v20 侧栏统一（平板端列表页侧栏回左）+ 归档/分类手机端恢复页脚 + 卡片/海报标题完整显示 + 移动端导航栏加深 + 菜单加标签入口
    v21 全站几何统一（切页零跳动：容器 border-box + 文章页 TOC 移入主区两栏）+ 手机菜单复用桌面侧栏
    v22 手机端修复（两栏规则包断点+菜单 details 误伤）+ TOC 常驻断点 980（窄桌面不浮层）+ 归档行内标签 + 标签总览页
     v23 侧栏 180 固定统一（平板/桌面同宽同高）+ TOC clamp 随视口收窄（min-width 归零根治浮正文）+ 侧栏 aside 抽 partial 复用 / v24 侧栏 180 → 200 / v25 TOC 15vw 收窄 + overflow-x:clip / v26 去 720 上限两列真同收（TOC 封顶 192、正文列=主区−TOC−gap 全程连续）
     v27 去 kb 化：主题目录 cimu-kb → cimu，kb-toc → blog-toc，删除知识库模式死规则约 210 行（kb-main/kb-sidebar/kb-switcher/kb-col/site-kb 系）
     v28 死规则清理：删知识库 navbar/首页/面包屑/目录树/通用页 .container 系等死规则约 250 行（AND 语义交叉验证：产物 DOM ∪ 模板输出 ∪ JS 动态类），变量覆盖块并入主定义
   ============================================================ */

/* ============================================================
   断点体系（唯一权威说明）：本文件只使用下列 5 个视口边界，
   统一采用「≤Xpx」与「≥X+1px」互补写法，不产生区间重叠或空隙。
     480          卡片单列、归档行内标签换行
     740 / 741    手机 ↔ 平板（侧栏折叠、单列、移动导航）
     979 / 980    平板 ↔ 桌面（TOC 常驻 sticky ↔ 浮层）
     1024 / 1025  窄桌面 ↔ 宽桌面（列表页间距 24↔32、页面级页脚隐藏）
     1172         卡片三列
   新增规则请复用上述边界，勿引入新数值。
   ============================================================ */

/* ============================================================
   分层模型（重写目标，施工图见 docs/CSS-REFACTOR-PLAN.md）：
   本文件按下列六层自上而下组织；新增规则必须归入对应层，层内不新增 !important。
     L0 Token        变量：:root（颜色 / 尺寸 / z-index / 断点）
     L1 Reset 基础   全局重置、body、排版、链接
     L2 组件         navbar、搜索、汉堡、悬浮按钮、回到顶部、进度条、TOC、页脚、404、工具页
     L3 页面 / 模式  首页卡片、列表页、归档·标签·分类、瞬间页、文章页、侧栏
                     统一以 .site-blog + 条件类（.archive-wrap / .moments-wrap / .blog-layout）限定
     L4 主题         [data-theme="dark"] 集中覆盖
     L5 响应式       媒体查询，只用上方 5 个断点边界
   现状仍是「版本批次追加式」历史结构，正按 R1~R10 分批迁移。
   ============================================================ */

/* ====== 响应式断点索引（全站统一 5 档 + 1 平板区间） ======
   档位 A  ≤480px                    手机窄屏（卡片两列 → 一列）
   档位 B  ≤740px / ≥741px            手机 / 手机以上（互补边界，同一逻辑档）
   档位 C  ≤979px / ≥980px            平板·窄桌面 / 桌面（TOC 常驻分界，同一逻辑档）
   档位 D  ≤1024px / ≥1025px          平板-窄桌面 / 宽桌面（同一逻辑档）
   档位 E  ≥1172px                    宽屏（首页卡片三列）
   区间    (min-width:741px) and (max-width:1024px)   平板段
   不可合并：档位 D 的 ≤1024（.newspaper-layout gap）与 ≥1025（页脚隐藏）——
             合并会改变 980–1024 区间渲染（见 docs/CSS-REFACTOR-PLAN.md §7）
   ============================================================ */

/* ====== CSS 变量：亮色主题（纸色系，护眼） ====== */
:root {
  --primary: #333333; --primary-light: #666666; --primary-bg: #FFFFFF;
  --accent: #333333;
  --dark: #1A1A1A; --dark-light: #666666;
  --text: #1A1A1A; --text-secondary: #666666;
  --border: rgba(0,0,0,0.10); --border-strong: rgba(0,0,0,0.22); --bg: #FFFFFF; --card-bg: #FBF7E9; --card-item: #FFFFFF;
  --radius: 4px;
  --nav-bg: #F0F0F0; --nav-text: #333333;
  --nav-hover: rgba(0,0,0,0.05);
  --nav-border: rgba(0,0,0,0.12); --nav-border-hover: rgba(0,0,0,0.25); --nav-text-hover: rgba(0,0,0,0.6);
  --nav-height: 44px; --crumb-height: 0;
  /* 层级 token：集中定义，替代散落的裸 z-index（取值与原先完全一致） */
  --z-toc-open: 901; --z-float-btn: 998; --z-mobile-panel: 999;
  --z-navbar: 1000; --z-overlay: 1001; --z-progress: 1003;
  --shadow: 0 1px 3px rgba(0,0,0,0.06);
  --shadow-md: 0 4px 12px rgba(0,0,0,0.08);
  --code-bg: #F5F5F5; --pre-bg: #1A1A1A; --pre-color: #E8E8E8;
  --font-mono: ui-monospace, "Cascadia Code", "JetBrains Mono", Consolas, "Courier New", monospace;
  --progress-color: #999999;
  --paper-masthead: transparent;
  --paper-main: transparent;
  --paper-sidebar: #FBF7E9;
  --ink-headline: #1A1A1A;
  --ink-body: #1A1A1A;
  --paper-shadow: none;
  --font-sans: "Microsoft YaHei", system-ui, sans-serif;
  /* 斑点纹理（仅用于卡片和文章正文）；v69：透明度减半，降低阅读干扰 */
  --dot-texture: radial-gradient(circle, rgba(100,100,100,0.125) 0.8px, transparent 0.8px);
  --dot-size: 6px 6px;
  /* 归一：多处重复出现的固定色值（不随主题变化，仅在此定义） */
  --white: #FFFFFF;
  /* 封面占位底色（v29）：亮色=白纸留白；深色=纯黑——透明 logo 图在深色下不再透出白底刺眼 */
  --cover-bg: #FFFFFF;
  --ink-strong: #1A1A1A;
  --ext-link: #8B6F3E;
  --ext-underline: rgba(139, 111, 62, 0.40);
  --chip-bg: rgba(139, 111, 62, 0.07);
  --paper-dark: #1E1B14;
  --paper-dark-text: #F5F3E8;
  --hairline: rgba(0,0,0,0.06);
  --hairline-strong: rgba(0,0,0,0.08);
}

/* ====== CSS 变量：暗色主题（暖色系） ====== */
[data-theme="dark"] {
  --primary: #D4C9B0; --primary-light: #E0D5BE; --primary-bg: #3D3528;
  --accent: #D4BC8E;
  --dark: #F5F3E8; --dark-light: #D4C9B0;
  --text: #F5F3E8; --text-secondary: #A89B82;
  --border: rgba(255,240,220,0.10); --border-strong: rgba(255,240,220,0.26); --bg: #1E1B14; --card-bg: #282216; --card-item: #2A2620;
  --nav-bg: #1E1B14; --nav-text: #F5F3E8;
  --nav-hover: rgba(255,255,255,0.06);
  --nav-border: rgba(255,255,255,0.12); --nav-border-hover: rgba(255,255,255,0.25); --nav-text-hover: rgba(255,255,255,0.75);
  --shadow: 0 1px 3px rgba(0,0,0,0.2);
  --shadow-md: 0 2px 8px rgba(0,0,0,0.3);
  --code-bg: #2A2620; --pre-bg: #15120D; --pre-color: #F5F3E8;
  --progress-color: #D4BC8E;
  --paper-masthead: transparent;
  --paper-main: transparent;
  --paper-sidebar: #282216;
  --cover-bg: #000000;
  --ink-headline: #F5F3E8;
  --ink-body: #F5F3E8;
  --ext-link: #D4BC8E;
  --ext-underline: rgba(212, 188, 142, 0.35);
  --chip-bg: rgba(212, 188, 142, 0.10);
  --paper-shadow: none;
  --dot-texture: radial-gradient(circle, rgba(200,200,200,0.05) 0.8px, transparent 0.8px);
  --dot-size: 6px 6px;
}

/* ====== 全局重置 ====== */
* { margin: 0; padding: 0; box-sizing: border-box; }

body {
  font-family: "Microsoft YaHei", "微软雅黑", system-ui, -apple-system, "Segoe UI", Roboto, sans-serif;
  /* 纯白背景 */
  background-color: var(--white);
  background-image: none;
  background-size: 100% 100%;
  background-attachment: fixed;
  color: var(--ink-strong);
  line-height: 1.75; font-size: 16px;
  min-height: 100vh; display: flex; flex-direction: column;
  overflow-x: hidden;
  padding-top: var(--nav-height);
}

h1,h2,h3,h4,h5,h6 {
  font-family: "Microsoft YaHei", "微软雅黑", system-ui, -apple-system, sans-serif;
  color: var(--ink-strong); line-height: 1.3;
}

a { color: var(--ink-strong); text-decoration: underline; text-decoration-color: rgba(0,0,0,0.15); }
a:hover { text-decoration-color: rgba(0,0,0,0.5); }/* ====== 阅读进度条 ====== */
.reading-progress {
  position: fixed; top: 0; left: 0; right: 0;
  height: 3px; width: 0; background: var(--progress-color);
  z-index: var(--z-progress); transition: width 0.15s linear;
}

/* ====== 导航栏 ====== */
.navbar {
  display: flex; align-items: center;
  background: var(--nav-bg);
  padding: 0 20px; height: var(--nav-height);
  position: fixed; top: 0; left: 0; right: 0; z-index: var(--z-navbar);
  border-bottom: 1px solid var(--nav-border);
}

.theme-toggle {
  background: none; border: 1px solid var(--nav-border-hover);
  color: var(--nav-text); font-size: 13px; cursor: pointer;
  width: 25px; height: 25px; border-radius: 50%;
  display: flex; align-items: center; justify-content: center;
  margin-right: 4px; transition: all 0.15s; flex-shrink: 0;
}
.theme-toggle:hover { background: var(--nav-hover); border-color: var(--nav-border-hover); }

.logo {
  color: var(--nav-text); font-size: 17px; font-weight: 700;
  letter-spacing: 0.5px; margin-right: auto;
  min-width: 120px; white-space: nowrap;
  font-family: "Microsoft YaHei", system-ui, sans-serif;
}
.logo:hover { color: var(--nav-text-hover); }

/* ====== 搜索 ====== */
.search-icon-btn {
  display: flex; background: none; border: 1px solid var(--nav-border-hover);
  color: var(--nav-text); font-size: 13px; cursor: pointer;
  width: 25px; height: 25px; border-radius: 50%;
  align-items: center; justify-content: center;
  margin-right: 4px; transition: all 0.15s; flex-shrink: 0;
}
.search-icon-btn:hover { background: var(--nav-hover); }

.search-overlay {
  display: none; position: fixed; top: var(--nav-height); left: 0; right: 0;
  background: var(--nav-bg);
  padding: 10px 20px; z-index: var(--z-overlay);
  box-shadow: 0 4px 16px rgba(0,0,0,0.15);
}
.search-overlay.show { display: block; }
.search-overlay input {
  width: 100%; max-width: 560px; margin: 0 auto; display: block;
  padding: 8px 14px; border: 1px solid var(--nav-border);
  border-radius: var(--radius); background: var(--white);
  color: var(--nav-text); font-size: 15px; font-family: inherit;
}
.search-overlay input::placeholder { color: var(--text-secondary); }
.search-overlay input:focus { outline: none; border-color: var(--nav-border-hover); background: #F5F5F5; }
.search-overlay .search-results {
  display: block; position: static; width: 100%; max-width: 560px;
  margin: 8px auto 0; background: var(--card-bg); border-radius: var(--radius);
  max-height: 320px; overflow-y: auto;
}
.search-overlay .search-results:empty { display: none; }

.search-results .result-item {
  display: block; padding: 10px 14px; border-bottom: 1px solid var(--border);
  color: var(--text); font-size: 15px;
}
.search-results .result-item:hover, .search-results .result-item.active { background: var(--primary-bg); }
.search-results .result-item .result-title { color: var(--dark); }
.search-results .no-results { padding: 16px; text-align: center; color: var(--text-secondary); }
.search-results .search-count { padding: 8px 14px; font-size: 12px; color: var(--text-secondary); border-bottom: 1px solid var(--border); }
.search-results mark { background: var(--primary-bg); color: var(--accent); padding: 1px 2px; }

/* ====== 汉堡菜单 ====== */
.hamburger { display: none; flex-direction: column; gap: 3px;
  width: 28px; height: 28px; background: none; border: none;
  cursor: pointer; padding: 3px; z-index: var(--z-overlay); flex-shrink: 0;
  align-items: center; justify-content: center; }
.hamburger span {
  display: block; width: 18px; height: 2px;
  background: var(--nav-text); border-radius: 2px; transition: all 0.25s;
}
.hamburger.active span:nth-child(1) { transform: rotate(45deg) translate(4px,4px); }
.hamburger.active span:nth-child(2) { opacity: 0; }
.hamburger.active span:nth-child(3) { transform: rotate(-45deg) translate(4px,-4px); }

/* ====== 悬浮按钮 ====== */
.toc-toggle {
  display: none; position: fixed; z-index: var(--z-float-btn);
  width: 40px; height: 40px; border: 1px solid var(--primary);
  background: var(--card-bg); border-radius: 50%;
  cursor: pointer; box-shadow: 0 2px 8px rgba(61,40,32,0.18);
  flex-direction: column; align-items: center; justify-content: center; gap: 1px;
  font-size: 17px; color: var(--ink-strong);
}
[data-theme="dark"] .toc-toggle {
  border-color: var(--primary-light); box-shadow: 0 2px 8px rgba(0,0,0,0.5);
}
.toc-toggle .icon-text { font-size: 7px; color: #000000; font-weight: 700; line-height: 1; }
.toc-toggle { bottom: 22px; right: 22px; }
/* blog 模式：桌面端也显示目录按钮 */
.toc-toggle-blog { display: flex; }

/* ====== 回到顶部按钮 ====== */
.back-to-top {
  position: fixed; bottom: 72px; right: 22px; z-index: var(--z-float-btn);
  width: 40px; height: 40px; border: 1px solid var(--border);
  background: var(--card-bg); border-radius: 50%;
  cursor: pointer; box-shadow: var(--shadow);
  font-size: 18px; color: var(--ink-strong);
  display: flex; align-items: center; justify-content: center;
  opacity: 0; transform: translateY(8px);
  pointer-events: none; transition: opacity 0.25s, transform 0.25s;
}
.back-to-top.visible {
  opacity: 1; transform: translateY(0);
  pointer-events: auto;
}
.back-to-top:hover { background: var(--primary); color: var(--white); border-color: var(--primary); }

/* ====== 文章更新时间 ====== */
.article-updated {
  display: block; font-size: 13px; color: var(--text-secondary);
  margin-top: -10px; margin-bottom: 18px; font-style: italic;
}/* ====== 右侧目录 ====== */
/* v23：min-width 200 → 0（老三栏残留值；TOC 宽度由 blog-main grid 列接管，
   固定 min-width 会在列被压缩时溢出盖正文——"TOC 浮在正文上"的根因） */
.blog-toc {
  width: auto; min-width: 0;
  padding: 20px 14px; position: sticky;
  top: calc(var(--nav-height) + var(--crumb-height));
  height: calc(100vh - var(--nav-height) - var(--crumb-height));
  overflow-y: auto;
  border-left: 1px solid var(--border); background: var(--card-bg);
}
.blog-toc h4 { font-size: 14px; color: var(--text-secondary); margin-bottom: 8px; }
.blog-toc nav a { display: block; padding: 3px 0; font-size: 14px; color: var(--text-secondary); border-left: 2px solid transparent; padding-left: 8px; transition: all 0.12s; cursor: pointer; }
.blog-toc nav a:hover, .blog-toc nav a.active { color: var(--accent); border-left-color: var(--primary); }
.blog-toc nav a.toc-h2 { color: var(--dark); }
.blog-toc nav a.toc-h3 { padding-left: 20px; }
.blog-toc nav a.toc-h4 { padding-left: 32px; font-size: 12px; }

/* ====== 工具全屏页面 ====== */
.tools-fullscreen { flex: 1; background: var(--bg); min-height: calc(100vh - var(--nav-height)); }

/* ====== 通用页面（关于页/索引页等） ====== *//* 关于页列表去圆点（h3 标题下的更新记录等列表） *//* ====== 文章上下篇导航（v16 起桌面端也显示：左右分布；移动端上下排；:empty 防空 nav 露线） ====== */
.article-nav { display: flex; justify-content: space-between; gap: 12px; margin-top: 24px; padding-top: 14px; border-top: 1px solid var(--border); }
.article-nav:empty { display: none; }
.article-nav-link {
  flex: 1; display: block; padding: 8px 0; font-size: 15px; color: var(--primary);
  text-decoration: none; transition: color 0.12s; overflow-wrap: break-word;
}
.article-nav-link:hover { color: var(--accent); }
.article-nav-link.next { text-align: right; }

@media (max-width: 740px) {
  .article-nav { display: block; }
}

/* ====== 页脚 ====== */
.footer {
  text-align: center; padding: 20px; color: var(--text-secondary);
  font-size: 15px; border-top: 1px solid var(--border);
  background: var(--card-bg); margin-top: auto;
}
.footer p { margin: 3px 0; }
.footer a { color: var(--dark-light); }
.footer a:hover { color: var(--accent); }/* ====== 打印样式 ====== */
@media print {
  /* 打印隐藏列表统一由文件后部的 @media print 块提供（其选择器为本处的超集，声明相同） */
  body { padding-top: 0; font-size: 13pt; line-height: 1.6; color: #000; background: var(--white); }

  @page { margin: 2cm; }
}

/* ====== 响应式：平板 (≤979px，v22：TOC 常驻断点从 1024 降至 979，窄桌面不再浮层) ====== */
@media (max-width: 979px) {
  .blog-toc { display: none; }
  .blog-toc.open { display: block; position: fixed; top: calc(var(--nav-height) + var(--crumb-height)); right: 0; width: 220px; height: calc(100vh - var(--nav-height) - var(--crumb-height)); z-index: var(--z-toc-open); box-shadow: -2px 0 12px var(--shadow); }
  .toc-toggle { display: flex; }
  /* blog 模式：平板端文章列表降到下方 */
  body.site-blog .blog-article-list { order: 2; }
}

/* ====== 响应式：手机 (≤768px) ====== */
@media (max-width: 740px) {

  body { font-size: 15px; }  .navbar { padding: 0 10px; }
  .logo { font-size: 15px; min-width: 80px; }
  .theme-toggle { width: 24px; height: 24px; font-size: 12px; }
  .search-icon-btn { width: 24px; height: 24px; font-size: 12px; }

  .search-overlay { top: var(--nav-height); padding: 8px 12px; z-index: var(--z-overlay); }
  .search-overlay input { font-size: 14px; padding: 8px 10px; }  .hamburger { display: flex; }

  .back-to-top { bottom: 78px; right: 22px; width: 36px; height: 36px; font-size: 16px; }
  .article-updated { font-size: 11px; }
  .reading-progress { top: var(--nav-height); height: 2px; }

  .footer { font-size: 13px; padding: 16px; }
}
  [data-theme="dark"] .footer a { color: #F0B894; }
/* 悬浮按钮：浅色模式图标=黑（已并入基础层）；深色模式图标=纯白（高对比） */
[data-theme="dark"] .toc-toggle,
[data-theme="dark"] .back-to-top { color: var(--white); }
[data-theme="dark"] .toc-toggle .icon-text { color: var(--white); }
[data-theme="dark"] .back-to-top:hover { background: var(--primary-light); color: var(--ink-strong); }



/* ============================================================
   v3.0 通用化：blog 模式杂志感首页（参考 Nature 等学术杂志版式）
   设计要点：
   - 零圆角 / 极简边框 / 硬朗排版
   - 报头居中、双线分隔、衬线大标题
   - 头条 = 大图 + 大字 + 摘要；副条 = 网格
   - 层次：lead story / secondary / list
   ============================================================ */

/* === 杂志首页 — 报头 === */
.newspaper-wrap { max-width: 1280px; margin: 0 auto; padding: 24px 28px; }
.newspaper-masthead {
  background: var(--paper-masthead);
  border-top: 3px solid var(--ink-headline);
  border-bottom: 1px solid var(--ink-headline);
  padding: 18px 0 14px;
  margin-bottom: 0;
  position: relative;
}
.newspaper-title {
  font-size: 28px;
  font-weight: 700;
  letter-spacing: 0.06em;
  color: var(--ink-headline);
  margin: 0;
  font-family: var(--font-sans);
  line-height: 1.1;
  /* 报纸名压字：让标题有重量感 */
  text-shadow: 0 1px 0 rgba(0,0,0,0.04);
}/* === 杂志首页 — 主区域：lead + sidebar 两栏（头条白底 / 侧栏浅米） === */
.newspaper-layout {
  display: grid;
  grid-template-columns: 1fr 280px;
  gap: 32px;
  margin: 0 auto;
  max-width: 1280px;
  padding: 24px 28px;
  border-top: none;
  background: var(--paper-main);  /* 整版底色：白 */
  box-shadow: var(--paper-shadow);
}
.newspaper-main {
  min-width: 0;
  padding: 32px 32px 36px;
  background: var(--paper-main);
  border-right: 1px solid var(--border);  /* 主区与侧栏的分隔线 */
}
.newspaper-sidebar {
  min-width: 0;
  background: var(--paper-sidebar);  /* 浅米色侧栏 */
  padding: 28px 24px 32px;
}

/* === 头条（Lead Story） — 大图 + 大字 + 摘要 === */
.newspaper-headline {
  display: block;
  margin-bottom: 32px;
  padding-bottom: 28px;
  border-bottom: 2px solid var(--ink-headline);  /* 焦糖双线 */
}
.newspaper-headline-cover {
  display: block;
  overflow: hidden;
  aspect-ratio: 16/9;
  margin-bottom: 16px;
  background: var(--paper-masthead);
}
.newspaper-headline-cover img {
  width: 100%; height: 100%; object-fit: cover;
  display: block;
  transition: opacity 0.3s ease;
}
.newspaper-headline-cover:hover img { opacity: 0.92; }
.newspaper-headline-body { max-width: 900px; }
.newspaper-headline .newspaper-cat {
  display: inline-block;
  font-size: 10px;
  letter-spacing: 0.22em;
  text-transform: uppercase;
  color: var(--primary);
  font-weight: 700;
  margin-bottom: 10px;
  padding-bottom: 4px;
  font-family: "Microsoft YaHei", system-ui, sans-serif;
}
.newspaper-headline-title {
  font-size: 30px;
  line-height: 1.15;
  margin: 0 0 14px;
  color: var(--ink-body);  /* 深棕 ink */
  font-weight: 700;
  letter-spacing: -0.005em;
  font-family: var(--font-sans);
}
.newspaper-headline-title a { color: inherit; }
.newspaper-headline-title a:hover { color: var(--primary); }
.newspaper-headline-meta {
  font-size: 11px;
  color: var(--text-secondary);
  display: flex;
  gap: 16px;
  flex-wrap: wrap;
  letter-spacing: 0.1em;
  text-transform: uppercase;
  font-family: "Microsoft YaHei", system-ui, sans-serif;
  padding-top: 8px;
  border-top: 1px dotted var(--border);
}
.newspaper-headline-meta time { font-weight: 700; color: var(--ink-body); }
.newspaper-tags a { color: var(--primary); text-transform: none; letter-spacing: 0.04em; }

/* === 文章列表（短条目流） === */
.newspaper-list {
  display: flex; flex-direction: column;
  gap: 0;
}
.newspaper-item-cover {
  display: block;
  width: 120px;
  height: 80px;
  overflow: hidden;
  background: var(--paper-masthead);
  flex-shrink: 0;
}
.newspaper-item-cover img { width: 100%; height: 100%; object-fit: cover; display: block; }
.newspaper-item-body { min-width: 0; }
.newspaper-item-title {
  font-size: 17px;
  margin: 0 0 6px;
  line-height: 1.3;
  color: var(--dark);
  font-weight: 600;
  font-family: var(--font-sans);
}
.newspaper-item-title a { color: inherit; }
.newspaper-item-title a:hover { color: var(--primary); }
.newspaper-item-excerpt {
  font-size: 13px;
  color: var(--text-secondary);
  line-height: 1.55;
  margin: 0 0 6px;
}
.newspaper-item-meta {
  font-size: 11px;
  color: var(--text-secondary);
  display: flex;
  gap: 10px;
  flex-wrap: wrap;
  letter-spacing: 0.06em;
}
.newspaper-cat-mini { color: var(--primary); font-weight: 700; }
.newspaper-tags-mini a { color: var(--text-secondary); margin-right: 6px; }
.newspaper-tags-mini a:hover { color: var(--primary); }

.newspaper-empty {
  text-align: center;
  padding: 80px 20px;
  color: var(--text-secondary);
  font-style: italic;
  margin-top: 20px;
}

/* === blog 侧边栏（杂志风：极简分隔、无圆角） === */
.blog-sidebar-inner {
  display: flex; flex-direction: column;
  gap: 22px;
  padding: 0;
}

/* 折叠分区：<details>/<summary>，平板/桌面统一 */
/* 默认 marker 隐藏（不用浏览器默认的三角），自己用 ::after 画 */
.blog-sidebar-details {
  border-top: 1px solid var(--ink-headline);
  padding: 0;
  margin: 0;
}
.blog-sidebar-details:last-of-type { border-bottom: 1px solid var(--ink-headline); }
.blog-sidebar-details > summary {
  list-style: none;
  cursor: pointer;
  padding: 12px 0 10px;
  font-size: 11px;
  letter-spacing: 0.22em;
  text-transform: uppercase;
  color: var(--ink-body);
  font-weight: 700;
  font-family: "Microsoft YaHei", system-ui, sans-serif;
  display: flex;
  align-items: center;
  justify-content: space-between;
  user-select: none;
}
.blog-sidebar-details > summary::-webkit-details-marker { display: none; }
.blog-sidebar-details > summary::after {
  content: '+';
  font-family: "Microsoft YaHei", system-ui, sans-serif;
  font-size: 18px;
  font-weight: 400;
  color: var(--ink-headline);
  transition: transform 0.2s ease;
  width: 18px;
  text-align: center;
  line-height: 1;
}
.blog-sidebar-details[open] > summary::after {
  content: '−';
}
.blog-sidebar-details > summary:hover { color: var(--primary); }
.blog-sidebar-count {
  font-size: 9px;
  color: var(--text-secondary);
  font-weight: 400;
  letter-spacing: 0.1em;
  text-transform: none;
  font-style: italic;
  margin-left: 6px;
}
.blog-sidebar-details > :not(summary) {
  padding: 4px 0 12px;
  animation: blogDetailsOpen 0.18s ease-out;
}
@keyframes blogDetailsOpen {
  from { opacity: 0; transform: translateY(-4px); }
  to { opacity: 1; transform: translateY(0); }
}
  .blog-category-list {
  list-style: none; margin: 0; padding: 0;
}

  .blog-category-list li a {
  display: flex; justify-content: space-between; align-items: baseline;
  padding: 6px 0;
  font-size: 13px;
  color: var(--text);
  border-bottom: 1px dotted var(--border);
  font-family: "Microsoft YaHei", system-ui, sans-serif;
}

  .blog-category-list li:last-child a { border-bottom: none; }

.blog-category-list .count { color: var(--text-secondary); font-size: 11px; font-style: italic; }/* === 标签云（无圆角，杂志风） === */
.blog-tag-cloud {
  display: flex; flex-wrap: wrap; gap: 6px;
}
.blog-tag {
  display: inline-block;
  font-size: 11px;
  padding: 3px 7px;
  background: transparent;
  color: var(--text);
  border-radius: 0;
  line-height: 1.4;
  letter-spacing: 0.05em;
}
.blog-tag sup { color: var(--text-secondary); font-size: 9px; margin-left: 3px; font-style: italic; }
/* .blog-tag:hover 的最终外观由下方「hover 颜色统一为焦糖色」规则接管
   （同特异性、位置更后；旧值 background:var(--dark) 为死声明，已删除） */
.blog-tag:hover sup { color: var(--bg); opacity: 0.7; }

/* === 文章页（硬朗排版） === */
.blog-layout {
  display: grid;
  grid-template-columns: 200px minmax(0, 1fr);
  gap: 24px;
  max-width: 1280px;
  margin: 0 auto;
  padding: 24px 28px;
  min-height: calc(100vh - var(--nav-height) - var(--crumb-height) - 80px);
  border-top: none;
}
.blog-article-list {
  align-self: start;
}
.blog-main { min-width: 0; }
.blog-main article h1 { font-size: 26px; margin-bottom: 14px; line-height: 1.2; letter-spacing: -0.005em; }
.article-header { margin-bottom: 28px; padding-bottom: 18px; }
.article-meta { display: flex; flex-wrap: wrap; gap: 16px; font-size: 12px; color: var(--text-secondary); letter-spacing: 0.05em; }
.article-meta a { color: var(--primary); }
.article-date, .article-updated, .article-category, .article-tags { display: inline-flex; align-items: center; gap: 4px; }
.article-date, .article-updated { font-weight: 700; color: var(--dark); }

/* === 打印样式：blog 模式 === */
@media print {
  .newspaper-sidebar, .blog-article-list, .article-header .article-tags, .article-header .article-category, .blog-toc,
  .toc-toggle, .back-to-top, .reading-progress, .footer, .search-overlay,
  .hamburger, .theme-toggle, .search-icon-btn, .article-nav, .navbar { display: none !important; }
  .newspaper-layout, .blog-layout { display: block; border: none; padding: 0; }
  .newspaper-wrap, .blog-main-content { padding: 0; max-width: 100%; border: none; }
  body { padding-top: 0; }
}

/* === 响应式：blog 模式（≤1024px / ≤768px） === */
/* 平板（769-979px）：保留双栏布局，右栏在文章下方；右栏内 details 折叠 */
/* v23：删平板 gap:16px 覆盖——桌面/平板侧栏高度统一（全端 gap 22） */
@media (max-width: 979px) {
  .newspaper-sidebar { order: 2; }
  .blog-article-list { max-height: none; }
  .newspaper-headline-title { font-size: 28px; }
  .newspaper-title { font-size: 36px; letter-spacing: 0.08em; }
}
/* 手机（≤740px）：v14 侧栏不再整体隐藏（保留页脚与入口，内容块隐藏见 v11 rule 8） */
@media (max-width: 740px) {
  .newspaper-wrap { padding: 12px; }
  .newspaper-masthead::before,
  .newspaper-masthead::after { display: none; }

  .newspaper-headline-title { font-size: 22px; }
  .article-meta { font-size: 11px; gap: 10px; }
}

/* ============================================================
   v3.0 通用化：blog 模式 = 无顶部 nav
   - 桌面端：不渲染 navbar，body 不预留高度
   - 移动端：渲染移动端 navbar（仅汉堡 + 主题 + 搜索）
   - 桌面端导航 / 备案 / 页脚 → 全部到右侧 blog-sidebar-inner
   ============================================================ */

/* === blog 模式：桌面端隐藏顶部 nav，body 不预留高度 === */
/* blog 模式无 breadcrumb，--crumb-height 恒为 0（由 :root 统一提供） */
body.site-blog { padding-top: 0; }
/* 报头：全断点显示站名标题区，桌面端大字号、移动端小字号 */
.newspaper-masthead-deco { height: 0; }
.newspaper-masthead-mobile { display: block; text-align: center; padding: 4px 0; }
@media (max-width: 740px) {
  .newspaper-masthead {
    border-top: 2px solid var(--ink-headline);
  }
  .newspaper-masthead-deco { display: none; }
  .newspaper-masthead-mobile .newspaper-title { font-size: 22px; }
}
/* blog 模式通用页正文（about / privacy）继承 article 样式 */
.blog-main-article h1 { font-size: 28px; margin: 0 0 16px; padding-bottom: 8px; border-bottom: 2px solid var(--ink-headline); color: var(--ink-body); font-family: var(--font-sans); }
.blog-main-article h2 { font-size: 22px; margin: 22px 0 10px; padding-left: 10px; border-left: 3px solid var(--ink-headline); color: var(--ink-body); }
.blog-main-article h3 { font-size: 18px; margin: 18px 0 8px; color: var(--dark); }
.blog-main-article p { margin: 10px 0; line-height: 1.8; color: var(--text); }
.blog-main-article ul, .blog-main-article ol { padding-left: 28px; margin: 10px 0; }
.blog-main-article li { margin: 4px 0; line-height: 1.75; }
.blog-main-article a { color: var(--ink-headline); border-bottom: 1px solid transparent; transition: border-bottom-color 0.15s; }
.blog-main-article a:hover { border-bottom-color: var(--ink-headline); }
.blog-main-article blockquote { margin: 14px 0; padding: 8px 16px; border-left: 3px solid var(--ink-headline); background: var(--paper-sidebar); color: var(--text-secondary); }
.blog-main-article code:not(.hljs) { background: var(--code-bg); padding: 2px 6px; border-radius: 3px; font-family: var(--font-mono); font-size: 14px; }
.blog-main-article img { max-width: 100%; height: auto; display: block; margin: 14px auto; }
/* 顶部导航：.navbar 与 .navbar-blog-mobile 是同一元素（header.ejs）的两个类。
   基础层声明隐藏，≤740 媒体查询翻转为 flex —— 同特异性下后者胜，
   显隐关系由层内顺序决定，不再依赖 !important。 */
body.site-blog .navbar,
body.site-blog .navbar-blog-mobile { display: none; }
body.site-blog .navbar-blog-mobile { height: var(--nav-height); }
@media (max-width: 740px) {
  body.site-blog { padding-top: var(--nav-height); }
  body.site-blog .navbar-blog-mobile { display: flex; }
}
body.site-blog .navbar-blog-mobile .navbar-blog-mobile-right {
  margin-left: auto;
  display: flex;
  align-items: center;
  gap: 10px;
}

/* === 移动端导航面板（blog 模式） === */
.mobile-nav-panel {
  position: fixed;
  top: var(--nav-height);
  left: 0; right: 0;
  bottom: 0;
  background: var(--card-bg);
  z-index: var(--z-mobile-panel);
  overflow-y: auto;
  transform: translateX(-100%);
  transition: transform 0.3s ease;
  display: none;
}
.mobile-nav-panel.show { transform: translateX(0); }
/* v21：菜单内容 = 复用桌面端侧栏（blog-sidebar partial），样式同源 */
.mobile-nav-panel .blog-sidebar-inner {
  padding: 16px 16px 40px;
}

/* === Moments 瞬间归档页 === */
.moments-list {
  list-style: none;
  padding: 0;
  margin: 0;
}
.moment-item {
  padding: 20px 0 22px;
}
.moment-date {
  display: inline-block;
  font-size: 12px;
  font-weight: 600;
  color: var(--ink-headline);
  letter-spacing: 0.04em;
  font-family: "Microsoft YaHei", "Consolas", monospace;
  margin-bottom: 8px;
  padding: 2px 8px;
  background: var(--paper-sidebar);
}
.moment-content { margin-top: 6px; }
.moment-content p {
  margin: 0 0 10px;
  font-size: 15px;
  line-height: 1.75;
  color: var(--ink-body);
}
.moment-image {
  margin: 12px 0 0;
  max-width: 360px;
}
.moment-image img {
  width: 100%;
  height: auto;
  border-radius: 0;
}/* === 404 错误页 === */
/* 404：复用归档页骨架（archive-wrap），主区内只放 404 大字与该提示 */
.archive-error {
  display: flex;
  justify-content: center;
  padding: 24px 0 40px;
}
.error-page-big {
  font-size: 120px;
  font-weight: 700;
  line-height: 1;
  color: var(--ink-headline);
  font-family: "Microsoft YaHei", "Consolas", monospace;
  letter-spacing: 0.04em;
  border-bottom: 2px solid var(--ink-headline);
  padding-bottom: 12px;
}
.error-page-hint {
  margin: 0;
  font-size: 14px;
  line-height: 1.7;
  letter-spacing: 0.02em;
  color: var(--text-secondary);
}
@media (max-width: 740px) {
  /* 原为相邻的两个同查询块，已合并（规则相对顺序不变） */
  .error-page-big { font-size: 88px; }
  .mobile-nav-panel { display: block; }
}

/* === blog 模式：侧栏作为右侧信息栏（无圆角、硬朗排版） === */
.blog-sidebar-brand {
  border-bottom: 2px solid var(--ink-headline);
  padding: 0 0 10px;
  margin-bottom: 14px;
}
.blog-sidebar-logo {
  display: block;
  font-size: 22px;
  font-weight: 700;
  color: var(--ink-headline);
  letter-spacing: 0.06em;
  font-family: "Microsoft YaHei", system-ui, sans-serif;
  line-height: 1.1;
  text-decoration: none;
}
.blog-sidebar-actions {
  display: flex;
  gap: 4px;
  margin-bottom: 14px;
}
/* 归档按钮（链接到归档页，不展开树） */
.blog-sidebar-archives-link {
  display: flex;
  justify-content: space-between;
  align-items: center;
  padding: 10px 12px;
  margin-top: -4px;
  margin-bottom: 14px;
  background: var(--paper-masthead);
  color: var(--ink-headline);
  font-family: "Microsoft YaHei", system-ui, sans-serif;
  font-size: 13px;
  font-weight: 600;
  text-decoration: none;
  letter-spacing: 0.05em;
  transition: all 0.15s;
}
.blog-sidebar-archives-link:hover,
.blog-sidebar-archives-link.active {
  background: var(--ink-headline);
  color: var(--paper-masthead);
}
.blog-sidebar-archives-link .blog-sidebar-count {
  font-weight: 400;
  opacity: 0.85;
}

.blog-action-btn {
  flex: 1;
  background: transparent;
  padding: 8px 10px;
  font-size: 12px;
  font-family: "Microsoft YaHei", system-ui, sans-serif;
  color: var(--text);
  cursor: pointer;
  letter-spacing: 0.05em;
  border-radius: 0;
  transition: all 0.15s;
}
.blog-action-btn:hover {
  background: var(--dark);
  color: var(--bg);
  border-color: var(--dark);
}

.blog-sidebar-footer {
  margin-top: 0;
  padding-top: 14px;
  border-top: 3px double var(--dark);
  font-family: "Microsoft YaHei", system-ui, sans-serif;
}
.blog-sidebar-copyright,
.blog-sidebar-licence,
.blog-sidebar-icp,
.blog-sidebar-police {
  font-size: 11px;
  color: var(--text-secondary);
  margin: 4px 0;
  letter-spacing: 0.02em;
  line-height: 1.5;
}
.blog-sidebar-copyright { color: var(--dark); font-weight: 700; }
.blog-sidebar-footer a { color: var(--text-secondary); }
.blog-sidebar-footer a:hover { color: var(--primary); }

/* === blog 文章正文样式（S1 修复：补齐 .blog-main article 系列） === */
/* 文章卡片：白色背景 + 阴影 + 边框（与侧栏/页面背景区分） */
.blog-main article,
.blog-main-article {
  background: var(--paper-main);
  padding: 28px 32px;
  margin-bottom: 24px;
  box-shadow: var(--paper-shadow);
  border: 1px solid var(--border);
}
.blog-main .article-header { margin-bottom: 18px; padding-bottom: 14px; border-bottom: 2px solid var(--border-strong); }
.blog-main .article-meta { display: flex; flex-wrap: wrap; gap: 12px; align-items: center; margin-top: 6px; font-size: 12px; color: var(--text-secondary); }
.blog-main .article-meta .article-tags { display: inline-flex; flex-wrap: wrap; gap: 6px; margin-left: auto; }
.blog-main .article-tags a { color: var(--ink-headline); font-size: 12px; text-decoration: none; }

.blog-main article h1 { font-size: 26px; margin-bottom: 16px; padding-bottom: 10px; border-bottom: 2px solid var(--ink-headline); color: var(--ink-body); }
.blog-main article h2 { font-size: 24px; margin: 28px 0 12px; padding-left: 10px; border-left: 3px solid var(--ink-headline); color: var(--ink-body); }
.blog-main article h3 { font-size: 20px; margin: 22px 0 10px; color: var(--ink-body); }
.blog-main article h4 { font-size: 17px; margin: 18px 0 8px; color: var(--ink-body); }
.blog-main article p { margin: 10px 0; line-height: 1.8; }
.blog-main article ul, .blog-main article ol { padding-left: 28px; margin: 10px 0; }
.blog-main article li { margin: 4px 0; line-height: 1.75; }
.blog-main article table { width: 100%; border-collapse: collapse; margin: 14px 0; font-size: 15px; }
.blog-main article th { background: var(--paper-sidebar); color: var(--ink-body); padding: 8px 10px; text-align: left; border: 1px solid var(--border-strong); white-space: nowrap; font-size: 14px; font-weight: 600; }
.blog-main article td { padding: 7px 10px; border: 1px solid var(--border-strong); }
.blog-main article tr:nth-child(2n) { background: var(--paper-masthead); }
/* === 行内 code（高亮块内 code 由 highlight.css 主题负责配色） === */
.blog-main article code:not(.hljs),
.blog-main-article code:not(.hljs) { background: var(--code-bg); padding: 2px 5px; border-radius: 2px; font-family: var(--font-mono); font-size: 14px; word-break: break-all; }

/* === 代码块：容器统一背景/圆角/边框；token 配色由 highlight.css 主题提供 === */
.blog-main article figure.highlight,
.blog-main-article figure.highlight { margin: 12px 0; border: 1px solid var(--border); border-radius: var(--radius); overflow: hidden; background: #fafafa; position: relative; }
[data-theme="dark"] .blog-main article figure.highlight,
[data-theme="dark"] .blog-main-article figure.highlight { background: var(--pre-bg); }
.blog-main article figure.highlight table,
.blog-main-article figure.highlight table { width: 100%; border-collapse: collapse; margin: 0; }
.blog-main article figure.highlight td,
.blog-main-article figure.highlight td { border: none; padding: 0; vertical-align: top; }
.blog-main article figure.highlight tr,
.blog-main-article figure.highlight tr { background: none; }
.blog-main article figure.highlight td.gutter,
.blog-main-article figure.highlight td.gutter { width: 1%; user-select: none; text-align: right; border-right: 1px solid var(--border); background: rgba(0,0,0,0.03); }
.blog-main article figure.highlight td.gutter pre,
.blog-main-article figure.highlight td.gutter pre { margin: 0; padding: 12px 10px; background: none; color: var(--text-secondary); font-family: var(--font-mono); font-size: 13px; line-height: 1.6; }
.blog-main article figure.highlight td.code,
.blog-main-article figure.highlight td.code { width: 100%; }
.blog-main article figure.highlight td.code pre,
.blog-main-article figure.highlight td.code pre { margin: 0; padding: 0; background: none; color: inherit; overflow-x: auto; -webkit-overflow-scrolling: touch; }
.blog-main article figure.highlight pre code.hljs,
.blog-main-article figure.highlight pre code.hljs { display: block; padding: 12px 14px; background: transparent; font-family: var(--font-mono); font-size: 14px; line-height: 1.6; word-break: break-word; white-space: pre-wrap; }
.blog-main article figure.highlight td.code pre,
.blog-main-article figure.highlight td.code pre { white-space: pre-wrap; word-break: break-word; }
.code-copy { position: absolute; top: 6px; right: 6px; padding: 3px 10px; font-size: 12px; line-height: 1.4; border: 1px solid var(--border); border-radius: var(--radius); background: var(--card-bg); color: var(--text-secondary); cursor: pointer; opacity: 0; transition: opacity 0.2s; z-index: 2; }
figure.highlight:hover .code-copy, .code-copy:focus-visible { opacity: 1; }
.code-copy:hover { color: var(--text); border-color: var(--nav-border-hover); }
.blog-main article img { max-width: 100%; max-height: 75vh; width: auto; height: auto; object-fit: contain; display: block; margin: 14px auto; box-shadow: var(--paper-shadow); cursor: zoom-in; }
.lightbox { position: fixed; inset: 0; z-index: 9999; display: flex; align-items: center; justify-content: center; background: rgba(0,0,0,0.85); cursor: zoom-out; }
.lightbox img { max-width: 94vw; max-height: 94vh; width: auto; height: auto; box-shadow: none; cursor: zoom-in; touch-action: none; user-select: none; transform-origin: center center; will-change: transform; }
.blog-main article img { max-width: 100%; height: auto; display: block; margin: 14px auto; box-shadow: var(--paper-shadow); }
.blog-main article blockquote { font-size: 0.92em; color: var(--text-secondary); border-left: 3px solid var(--ink-headline); margin: 14px 0; padding: 8px 16px; background: var(--paper-sidebar); }
.blog-main article a { color: var(--ink-headline); text-decoration: none; border-bottom: 1px solid transparent; transition: border-color 0.2s; }
.blog-main article a:hover { border-bottom-color: var(--ink-headline); }
[data-theme="dark"] .blog-main article img { filter: brightness(0.85) contrast(1.1); }

/* === blog 文章标签间距（M6 修复） === */
.article-tags a { margin-right: 8px; }
.article-tags a::before { content: '#'; opacity: 0.6; }

/* === 文章分享（2026-11-04 v69） === */
.article-share { display: flex; justify-content: flex-end; margin: 1.6em 0 0.2em; }
.share-btn { font: inherit; font-size: 0.88rem; padding: 0.42em 1em; min-height: 36px; border: 1px solid var(--border-strong); border-radius: 3px; background: transparent; color: var(--text-secondary); cursor: pointer; transition: color .2s, border-color .2s; }
.share-btn:hover, .share-btn:focus-visible { border-color: var(--ink-headline); color: var(--ink-headline); }
.share-btn--ok { border-color: var(--ext-link) !important; color: var(--ext-link) !important; }

/* === hover 颜色统一为焦糖色（M16/M17 修复：去除反相） === */
.blog-action-btn:hover { background: var(--ink-headline); color: var(--paper-main); border-color: var(--ink-headline); }
/* hover 反色：文字用 --bg（--paper-main 在 v21 扁平化后恒为 transparent，会导致 hover 文字不可见） */
.blog-tag:hover { background: var(--ink-headline); color: var(--bg); }

/* === 暗色模式 text-shadow 修复（L3） === */
[data-theme="dark"] .newspaper-title { text-shadow: 0 1px 0 rgba(0,0,0,0.4); }

/* === 报头装饰双线粗细统一（L5） === */


/* === moments 页加 footer（L9 修复） === */
.moments-wrap .footer { margin-top: 40px; padding: 20px 32px; text-align: center; color: var(--text-secondary); font-size: 13px; }

/* === Q3: blog 模式 search-overlay 定位修复（navbar 隐藏，top:0；配色由 v8 接管） === */
body.site-blog .search-overlay {
  top: 0;
  padding-top: 12px;
  padding-bottom: 10px;
}
body.site-blog .search-overlay input::placeholder { opacity: 0.6; }
body.site-blog .search-overlay .search-results { color: var(--ink-body); }

/* === Q7: 文章 meta 视觉分组（日期/更新一组，分类/标签一组） === */
.article-date + .article-updated { padding-left: 16px; border-left: 1px solid var(--border); }
.article-category { padding-left: 16px; border-left: 1px solid var(--border); }
.article-tags { padding-left: 16px; border-left: 1px solid var(--border); }

/* === Q4: 归档/分类/标签列表页样式 === */
.archive-count {
  font-size: 12px;
  color: var(--text-secondary);
  letter-spacing: 0.02em;
  text-transform: none;
  margin: 0;
  font-family: "Microsoft YaHei", system-ui, sans-serif;
}
.archive-empty {
  text-align: center;
  padding: 60px 20px;
  color: var(--text-secondary);
  font-style: italic;
}
.pagination {
  display: flex;
  justify-content: space-between;
  margin-top: 32px;
  padding-top: 20px;
  font-family: "Microsoft YaHei", system-ui, sans-serif;
}
.pagination a {
  padding: 8px 16px;
  color: var(--ink-body);
  text-decoration: none;
  font-size: 13px;
}
.pagination a:hover { background: var(--paper-sidebar); }

/* ============================================================
   v4.0 覆盖层：去边框 + 黄金比例 + 卡片首页 + 页眉统一
   ============================================================ */

.blog-sidebar-footer,
.blog-toc,
.blog-article-list,
.newspaper-main {
  border: none !important;
  border-top: none !important;
  border-bottom: none !important;
  border-left: none !important;
  border-right: none !important;
  box-shadow: none !important;
}

/* 文章容器：透明背景，直接散落在页面上 */
.blog-main article,
.blog-main-article {
  background: transparent !important;
}

/* 保留极淡的分隔线（列表项之间） */
  .blog-category-list li a {
  border-bottom: 1px solid var(--hairline) !important;
}

  .blog-category-list li:last-child a {
  border-bottom: none !important;
}

/* 表格边框（2026-10-19 提对比度：极淡 hairline → border-strong，用户反馈看不清） */
.blog-main article th,
.blog-main article td{
  border: 1px solid var(--border-strong) !important;
}

/* blockquote 保留极淡左边线 */
.blog-main article blockquote,
.blog-main-article blockquote{
  border-left: 2px solid rgba(0,0,0,0.1) !important;
  background: rgba(0,0,0,0.02) !important;
}
  .blog-main article h2,
  .blog-main-article h2 {
  border-left: 2px solid rgba(0,0,0,0.1) !important;
}

.blog-main article h1,
.blog-main-article h1 {
  border-bottom: 2px solid var(--border-strong) !important;
}

/* === F5: 黄金比例布局 === */
.newspaper-main { padding: 0 !important; }

/* === F6: 桌面端无页眉，信息全在侧栏；手机端折叠到导航 === */
@media (min-width: 741px) {
  body.site-blog .footer,
  .footer { display: none !important; }
}

/* （v4 暗色 body 斑点底已被 v6 暗色纯色 var(--paper-dark) + background-image:none 完全覆盖，删除） */
  [data-theme="dark"] .blog-category-list li a {
  border-bottom: 1px solid rgba(255,255,255,0.06) !important;
}

[data-theme="dark"] .blog-main article th,
[data-theme="dark"] .blog-main article td{
  border: 1px solid rgba(255,240,220,0.26) !important;
}
[data-theme="dark"] .blog-main article blockquote,
[data-theme="dark"] .blog-main-article blockquote {
  border-left: 2px solid rgba(255,255,255,0.1) !important;
  background: rgba(255,255,255,0.03) !important;
}
[data-theme="dark"] .blog-main article h2,
[data-theme="dark"] .blog-main-article h2 {
  border-left: 2px solid rgba(255,255,255,0.1) !important;
}
[data-theme="dark"] .blog-main article h1,
[data-theme="dark"] .blog-main-article h1 {
  border-bottom: 2px solid var(--border-strong) !important;
}

/* === 响应式：窄屏间距（列数/内边距最终值由基础层与 v6 媒体查询接管） === */
@media (max-width: 1024px) {
  .newspaper-layout { gap: 24px !important; }
}
@media (max-width: 740px) {
  .newspaper-layout { padding: 16px !important; }
}

/* ============================================================
 * v5: 知识库/博客主题分离 + 主页/归档区分
 * ============================================================ */

/* === 博客主页：卡片网格（非列表；列数由 v11 统一规则接管：默认两列，≥1172px 三列） === */
.site-blog .newspaper-list {
  display: grid !important;
  grid-template-columns: repeat(2, minmax(0, 1fr)) !important;
  gap: 16px !important;
  padding: 0 !important;
}
.site-blog .newspaper-item-cover {
  width: 100% !important;
  height: auto !important;
  aspect-ratio: 16 / 9 !important;
  background: var(--cover-bg) !important;   /* v29：随主题（深色=黑），不再固定 var(--white) */
  border-radius: 6px !important;
  overflow: hidden !important;
  margin-bottom: 10px !important;
}
.site-blog .newspaper-item-cover img {
  width: 100% !important;
  height: 100% !important;
  object-fit: cover !important;
}
.site-blog .newspaper-item-body {
  padding: 0 !important;
}
.site-blog .newspaper-item-title {
  font-size: 1.05rem !important;
  font-weight: 600 !important;
  line-height: 1.4 !important;
  margin-bottom: 6px !important;
}
.site-blog .newspaper-item-excerpt {
  font-size: 0.85rem !important;
  color: var(--text-secondary) !important;
  line-height: 1.5 !important;
  margin-bottom: 8px !important;
}
.site-blog .newspaper-item-meta {
  font-size: 0.75rem !important;
  color: var(--text-tertiary, #888) !important;
}

/* === 博客文章页：内容区最大宽度限制 === */
/* v23：补 min-width:0 —— grid 子项默认 min-width:auto，宽内容（表格/代码块）会把列撑开压向 TOC */
/* v25：overflow-x:clip —— 不可断行的溢出内容（KaTeX 长公式等）直接裁剪，绝不盖到 TOC 上 */
/* v26：去 720px 上限 —— 原值致宽视口(≥1150)正文停摆且列内居中产生虚间距；
      正文块现填满正文列 = 主区 − TOC − gap，与 TOC 间距恒 24px，980~1280 两列连续同收 */
/* 去 !important：上述属性均无同/更高特异性竞争（见补丁头注释） */
.site-blog .blog-main-content {
  max-width: 100%;
  min-width: 0;
  margin: 0 auto;
  overflow-x: clip;
}
.site-blog .blog-main-content article {
  font-size: 1rem;
  line-height: 1.85;
}
.site-blog .blog-main-content h1 {
  font-size: 1.8rem;
  font-weight: 700;
  margin-bottom: 0.5rem;
}
.site-blog .blog-main-content h2 {
  font-size: 1.35rem;
  font-weight: 600;
  margin-top: 2.5rem;
  margin-bottom: 1rem;
}

/* === 正文排版 v63 → v67：对齐 Trilium 观感（无首行缩进，靠段间距分段） === */
.site-blog .blog-main-content article {
  font-size: 1.0625rem;   /* 17px：中文正文舒适字号 */
  line-height: 1.9;        /* 中文行距略大于西文 */
  letter-spacing: 0.01em;
}
/* 正文段落：首行缩进 2em；对齐段落与列表项内段落不缩进（v70 修正） */
.site-blog .blog-main-content article > p {
  margin: 0.8em 0;
  text-indent: 2em;
}
.site-blog .blog-main-content article > p[align] {
  text-indent: 0;
}
.site-blog .blog-main-content article li p,
.site-blog .blog-main-content article li > p {
  text-indent: 0;
}
/* 长英文/URL/DOI 在窄屏强制断行，避免参考资料区右侧溢出（v70） */
.site-blog .blog-main-content article {
  overflow-wrap: anywhere;
  word-break: break-word;
}
/* 标题间距：上大于下（保持层级呼吸感，避免贴住上文） */
.site-blog .blog-main-content article h2 { margin-top: 2.2em; margin-bottom: 0.8em; }
.site-blog .blog-main-content article h3 { margin-top: 1.8em; margin-bottom: 0.6em; }
.site-blog .blog-main-content article h4 { margin-top: 1.5em; margin-bottom: 0.5em; }
/* 列表与引用间距 */
.site-blog .blog-main-content article ul,
.site-blog .blog-main-content article ol { margin: 0.7em 0; padding-left: 2em; }
.site-blog .blog-main-content article li { line-height: 1.85; margin: 0.25em 0; }
.site-blog .blog-main-content article blockquote { line-height: 1.85; }

/* KaTeX 块级公式：窄屏可横向滚动，避免撑破版心（v69） */
.site-blog .blog-main-content article .katex-display {
  overflow-x: auto;
  overflow-y: hidden;
  padding: 0.3em 0;
  max-width: 100%;
}

/* === 文章外链标识（2026-10-19 v67：颜色区分 + 实底边线 + ↗ 图标，站内链接不受影响） === */
.site-blog .blog-main-content article a.ext-link {
  color: var(--ext-link);
  border-bottom: 1px solid var(--ext-underline);
}
.site-blog .blog-main-content article a.ext-link::after {
  content: '↗\FE0E';          /* FE0E：强制文本形态，防 iOS 渲染成 emoji */
  font-size: 0.72em;
  vertical-align: 0.5em;
  margin-left: 0.12em;
  opacity: 0.85;
}
.site-blog .blog-main-content article a.ext-link:hover {
  border-bottom-color: var(--ext-link);
}
/* 独链接（段落/列表项内仅一个链接）：胶囊高亮框，与行间代码（灰底等宽）区分 */
.site-blog .blog-main-content article a.ext-link.link-chip {
  display: inline-block;
  background: var(--chip-bg);
  border: 1px solid var(--ext-underline);
  border-radius: 3px;
  padding: 0.08em 0.45em;
  font-size: 0.94em;
  text-indent: 0;
  vertical-align: baseline;
}
/* Trilium 高亮标记（同步脚本直通 <mark>，2026-10-19 v68） */
.site-blog .blog-main-content article mark {
  background: rgba(212, 188, 142, 0.35);
  color: inherit;
  padding: 0 0.15em;
  border-radius: 2px;
}
[data-theme="dark"] .site-blog .blog-main-content article mark {
  background: rgba(212, 188, 142, 0.22);
}

/* === 桌面端隐藏页面级页脚（v19：侧栏 footer 全站恢复显示，与其他信息同属侧栏共用模块） === */
@media (min-width: 1025px) {
  .site-blog footer:not(.blog-sidebar-footer) {
    display: none !important;
  }
}

/* ============================================================
 * v6: 淡黄配色 + 渐变背景 + 斑点纹理 + 布局重做
 * ============================================================ */

/* === 暗色模式 body 背景 === */
[data-theme="dark"] body {
  background-color: var(--paper-dark) !important;
  /* 需求5.2：暗色背景去条纹，改纯色 var(--paper-dark)（与正文 var(--paper-dark-text) 对比度 >15:1） */
  background-image: none !important;
}

/* === 进度条位置修正（博客模式）：位置已并入基础层 .reading-progress，移动端见 ≤740 媒体查询 === */

/* === 斑点纹理：仅卡片和头条（正文的纹理由 v8 rule 6 接管） === */
/* 点纹理：这两条选择器是全表唯一的 background-image 来源，无需 !important */
.site-blog .newspaper-item,
.site-blog .newspaper-headline {
  background-image: var(--dot-texture);
  background-size: var(--dot-size);
  background-repeat: repeat;
}

/* === 卡片和文章正文：微背景色 + 适度边框 === */
/* 卡片盒模型：`.newspaper-item` 仅此一处定义，全部去掉 !important
   （transition 不再带 !important 也让门禁探针的禁用样式能真正生效） */
.site-blog .newspaper-item {
  display: flex;
  flex-direction: column;
  gap: 16px;
  background-color: var(--card-item);
  border: 1px solid var(--border);
  border-radius: var(--radius);
  padding: 12px;
  box-shadow: var(--shadow);
  transition: transform 0.2s, box-shadow 0.2s;
}
.site-blog .newspaper-item:hover {
  transform: translateY(-3px);
  box-shadow: var(--shadow-md);
}
/* === 博客侧栏：v13 起随页面同步滚动（外观由 v11 统一规则接管） === */

/* === 主页头条：横滚容器 === */
.site-blog .headline-scroll {
  display: flex !important;
  gap: 16px !important;
  overflow-x: auto !important;
  scroll-snap-type: x mandatory !important;
  -webkit-overflow-scrolling: touch !important;
  padding-bottom: 12px !important;
  margin-bottom: 20px !important;
  border-bottom: 1px solid var(--border) !important;
}
.site-blog .headline-scroll::-webkit-scrollbar {
  height: 4px !important;
}
.site-blog .headline-scroll::-webkit-scrollbar-thumb {
  background: var(--border) !important;
  border-radius: 2px !important;
}

/* === 主页头条卡片：竖向（图在上文在下；与上方边框底色规则合并） === */
/* 头条盒模型：仅此一处定义；≤740 的 width:260px 自带 !important 仍会胜出 */
.site-blog .newspaper-headline {
  background-color: var(--card-item);
  border: 1px solid var(--border);
  border-radius: var(--radius);
  padding: 12px;
  box-shadow: var(--shadow);
  display: flex;
  flex-direction: column;
  flex-shrink: 0;
  width: 320px;
  scroll-snap-align: start;
  gap: 0;
  overflow: hidden;
}
.site-blog .newspaper-headline .newspaper-headline-cover {
  width: 100% !important;
  height: auto !important;        /* 不限高：按 16:9 自适应宽度，标题字号缩小后可完整显示 */
  aspect-ratio: 16 / 9 !important;
  overflow: hidden !important;
  flex-shrink: 0 !important;
}
.site-blog .newspaper-headline .newspaper-headline-cover img {
  width: 100% !important;
  height: 100% !important;
  object-fit: cover !important;
}
.site-blog .newspaper-headline .newspaper-headline-body {
  flex: 1 !important;
  padding: 12px 4px 4px !important;
  min-width: 0 !important;
}

/* blog 模式文章页 TOC 桌面端：独立滚动（高度自适应不填充）+ toc.js 自动居中 + 顶部与正文对齐 */
/* v22：断点 1025 → 980（980-1024 窄桌面 TOC 也常驻占位，正文压缩而非浮层盖正文） */
@media (min-width: 980px) {
  /* 本断点内 position/align-self/top/max-height/overflow-y/border-radius/
     background-color/padding 仅基础层 .blog-toc(0,1,0) 竞争，去 !important 后按特异性恒胜。
     border / box-shadow 例外：v4.0 覆盖层有 .blog-toc{border:none !important;
     box-shadow:none !important}（0,1,0），!important 不计特异性、会压过本规则的非 !important 声明，
     故这两条必须保留 !important */
  .site-blog .blog-toc {
    position: sticky;
    align-self: start;
    top: 24px;
    max-height: calc(100vh - 48px);
    overflow-y: auto;
    border-radius: var(--radius);
    border: 1px solid var(--border) !important;
    background-color: var(--paper-sidebar);
    padding: 16px;
    box-shadow: var(--shadow) !important;
  }
  .site-blog .blog-toc::-webkit-scrollbar { width: 4px; }
  .site-blog .blog-toc::-webkit-scrollbar-thumb { background: var(--border); border-radius: 2px; }
}

/* === 内容页正文：斑点纹理同步滚动背景 === */
/* （背景色/纹理/尺寸/平铺由 v8 rule 6 接管，此处保留 attachment: local） */
.site-blog .blog-main-content{
  background-attachment: local !important;
  border: 1px solid var(--border) !important;
  border-radius: var(--radius) !important;
  padding: 24px !important;
  box-shadow: var(--shadow) !important;
}

/* === 内容页布局：左栏（最终三栏值由基础层 .blog-layout 接管） === */
/* v12：左栏与 TOC 同款独立滚动（sticky 吸顶 + 内部滚动条） */
.site-blog .blog-article-list {
  background-color: var(--paper-sidebar) !important;
  border: 1px solid var(--border) !important;
  border-radius: var(--radius) !important;
  padding: 16px !important;
}

/* === 主区卡片外观：归档/标签/瞬间/首页四类页面共用（原三处重复定义合并为一份）
   border / box-shadow / padding 必须保留 !important —— v4.0 有低特异性 !important 规则
   (.newspaper-main{border:none!important; box-shadow:none!important} 与
    .newspaper-main{padding:0!important})，!important 不计特异性会压过本组非 !important 声明；
   用 background-color 而非 background 简写，避免重置主区点纹理的 background-image === */
.site-blog .archive-wrap .newspaper-main,
.site-blog .moments-wrap .newspaper-main,
.site-blog .newspaper-wrap .newspaper-main {
  background-color: var(--card-bg);
  border: 1px solid var(--border) !important;
  border-radius: 8px;
  padding: 24px 28px !important;
  box-shadow: 0 1px 4px var(--hairline) !important;
  min-width: 0;
}
@media (max-width: 740px) {
  .site-blog .archive-wrap .newspaper-layout {
    grid-template-columns: 1fr !important;
  }
  /* v20：不再整体隐藏归档/分类侧栏（页脚在侧栏内，隐藏导致手机端无页脚）；
     与首页一致——单列后置，内容块由 v11/v15 隐藏，仅剩页脚贴底 */
}

/* === 页脚：居中 + 新内容 === */
/* 侧栏页脚：选择器均高于基础层 .footer / .blog-sidebar-footer，靠特异性即可 */
.site-blog .blog-sidebar-footer,
.site-blog .footer {
  text-align: center;
  padding: 12px 8px;
}
.site-blog .blog-sidebar-footer p,
.site-blog .footer p {
  text-align: center;
  margin: 4px 0;
}
.site-blog .blog-sidebar-copyright,
.site-blog .blog-sidebar-icp,
.site-blog .blog-sidebar-police,
.site-blog .blog-sidebar-licence,
.site-blog .blog-sidebar-links {
  text-align: center;
}
.site-blog .blog-sidebar-links {
  display: flex;
  justify-content: center;
  gap: 12px;
  margin-bottom: 8px;
}
.site-blog .blog-sidebar-icp,
.site-blog .blog-sidebar-police {
  font-size: 10px;   /* 备案/公安备案：比版权行再小一号 */
}
.site-blog .blog-sidebar-links a {
  font-size: 0.8rem;
  text-decoration: none;
  color: var(--text-secondary);
}
.site-blog .blog-sidebar-links a:hover {
  color: var(--accent);
}

/* === 建站计时器 === */
.site-build-timer {
  font-size: 0.68rem;
  color: var(--text-secondary);
  margin: 4px 0;
  white-space: nowrap;   /* 窄侧栏下「秒」不再换行 */
}
.site-build-timer .timer-num {
  font-weight: 600;
  color: var(--accent);
}
.site-powered-by {
  font-size: 0.75rem;
  color: var(--text-secondary);
  margin: 4px 0;
}
/* 加 .site-blog 前缀：与 [data-theme="dark"] .footer a 同特异性 (0,2,1)，
   靠「位置更后」取胜，保住深色模式下的 text-secondary 配色 */
.site-blog .site-powered-by a {
  color: var(--text-secondary);
  text-decoration: none;
}
.site-blog .site-powered-by a:hover {
  color: var(--accent);
}

/* === 保留适度边框：视觉区分度 === */
.site-blog .newspaper-item-title a,
.site-blog .newspaper-headline-title a {
  text-decoration: none !important;
}
  .site-blog .blog-category-list li {
  border-bottom: 1px solid var(--border) !important;
}

.site-blog .blog-sidebar-summary {
  border-bottom: 1px solid var(--border);
  margin-bottom: 6px;
}

/* === 手机端：恢复页眉页脚 === */
@media (max-width: 740px) {
  .site-blog .newspaper-sidebar {
    position: static !important;
  }
  .site-blog .newspaper-layout {
    grid-template-columns: 1fr !important;
  }
  .site-blog .blog-article-list {
    position: static !important;
    max-height: none !important;
  }
  .site-blog .newspaper-headline {
    width: 260px !important;
  }
  .site-blog .newspaper-headline .newspaper-headline-cover {
    height: 140px !important;
  }
}

/* ====== v7: 布局修复（blog_ui_layout_fix） ====== */

/* 需求5.1：首页报头隐藏描述性副标题（首页 .newspaper-wrap 不含 .archive-wrap） *//* 需求5.3：平板端信息栏回正左侧（覆盖 order:2），与桌面端方向一致 */
@media (min-width: 741px) and (max-width: 1024px) {
  .site-blog .blog-article-list { order: 0 !important; }
}


/* 需求5.5：桌面端隐藏 toc-toggle（右栏 TOC 常驻，按钮冗余）；平板/手机端保留显示 */
/* v22：断点 1025 → 980（与 TOC 常驻断点同步） */
@media (min-width: 980px) {
  .site-blog .toc-toggle-blog { display: none !important; }
}

/* 需求5.1：信息栏 logo 尺寸约束（不溢出栏宽）+ 扁平化（去阴影/斜面） */
.blog-sidebar-logo-img {
  max-width: 100% !important;
  height: auto !important;
  display: block !important;
  box-shadow: none !important;
  border-radius: 0 !important;
  filter: none !important;
}

/* 需求5.1：移动端导航栏方形 logo 样式（高度/最大宽度已取 v8 rule 1 最终值） */
.navbar-logo-img {
  height: 30px;
  width: auto;
  max-width: 120px;
  object-fit: contain;
  display: block;
  vertical-align: middle;
}
.navbar-logo-link { display: inline-flex; align-items: center; }

/* 需求5.6：手机端确保页脚显示（归档/页脚信息置于页脚） */
@media (max-width: 740px) {
  .site-blog .footer { display: block !important; }
}

/* ====== v8: UI 修复批次二 ====== */

/* 1. 手机端导航栏调浅 + logo 宽度控制 */
@media (max-width: 740px) {
  /* 导航栏底色/下边线由 v20 统一声明（同值覆盖）；此处只保留配色修正，
     选择器特异性 (0,3,1) 已高于基础层，无需 !important */
  body.site-blog .navbar-blog-mobile .theme-toggle,
  body.site-blog .navbar-blog-mobile .search-icon-btn {
    color: var(--text);
    border-color: var(--border);
  }
  body.site-blog .navbar-blog-mobile .hamburger span {
    background: var(--text);
  }
  /* （logo 尺寸约束已并入 v7 的 .navbar-logo-img 规则，删除） */
}

/* 2. 搜索框：所有模式不透明可看清 + 手机端避开导航栏
   （input::placeholder / .search-results 背景 / .result-item / .result-title / mark
     这 5 组与基础层取值完全相同，属死覆盖，已删除；其余选择器特异性已足够） */
body.site-blog .search-overlay {
  background: var(--card-bg);
  border-bottom: 1px solid var(--border);
  box-shadow: 0 4px 16px var(--hairline-strong);
}
body.site-blog .search-overlay input {
  background: var(--bg);
  color: var(--text);
  border: 1px solid var(--border);
}
body.site-blog .search-overlay input:focus {
  border-color: var(--primary);
  background: var(--card-bg);
}
@media (max-width: 740px) {
  body.site-blog .search-overlay {
    top: var(--nav-height);
  }
}

/* 3. 侧栏元素背景统一视觉 */
.site-blog .blog-sidebar-details,
.site-blog .blog-sidebar-actions,
.site-blog .blog-sidebar-brand {
  background: var(--card-bg) !important;
  border-radius: var(--radius) !important;
  padding: 12px !important;
  margin-bottom: 8px !important;
  border: none !important;
}
.site-blog .blog-sidebar-details > summary {
  padding: 4px 0 !important;
}
.site-blog .blog-sidebar-actions {
  display: flex !important;
  gap: 8px !important;
}

/* 4. 侧栏三大入口（瞬间 / 归档 / 标签总览）视觉统一：card 底 + 边框 + primary 白字 hover。
   三条入口规则原先各写一份（v8 瞬间 / v17 归档 / v22 标签），除 margin-bottom 外属性完全相同；
   合并为一组共享声明 + 每条入口各自的 margin-bottom。层内无竞争规则，无需 !important。 */
.site-blog .blog-sidebar-moments-link,
.site-blog .blog-sidebar-archives-link,
.site-blog .blog-sidebar-tags-link {
  display: flex;
  justify-content: space-between;
  align-items: center;
  padding: 10px 12px;
  margin-top: 0;
  background: var(--card-bg);
  border: 1px solid var(--border);
  border-radius: var(--radius);
  color: var(--text);
  font-family: "Microsoft YaHei", system-ui, sans-serif;
  font-size: 13px;
  font-weight: 600;
  text-decoration: none;
  letter-spacing: 0.05em;
  transition: all 0.15s;
}
.site-blog .blog-sidebar-moments-link,
.site-blog .blog-sidebar-archives-link { margin-bottom: 8px; }
.site-blog .blog-sidebar-tags-link { margin-bottom: 14px; }
.site-blog .blog-sidebar-moments-link:hover,
.site-blog .blog-sidebar-moments-link.active,
.site-blog .blog-sidebar-archives-link:hover,
.site-blog .blog-sidebar-archives-link.active,
.site-blog .blog-sidebar-tags-link:hover,
.site-blog .blog-sidebar-tags-link.active {
  background: var(--primary);
  color: var(--white);
  border-color: var(--primary);
}
.site-blog .blog-sidebar-moments-link .blog-sidebar-count,
.site-blog .blog-sidebar-archives-link .blog-sidebar-count,
.site-blog .blog-sidebar-tags-link .blog-sidebar-count {
  font-weight: 400;
  opacity: 0.85;
}

/* 5. 目录弹窗：填满上下 + 边框 + 按钮边框统一（v22 断点同步 979） */
@media (max-width: 979px) {
  .site-blog .blog-toc.open {
    top: 0 !important;
    height: 100vh !important;
    overflow-y: auto !important;
    border: 1px solid var(--border) !important;
    border-radius: 0 !important;
    box-shadow: -4px 0 16px rgba(0,0,0,0.12) !important;
    background: var(--paper-sidebar) !important;
  }
  /* .back-to-top 的 border/border-radius 由文件后部顶层规则统一提供
     （同选择器、同值、同 !important，位置更后恒胜），此处只保留 TOC 按钮专属边框与两者共用的尺寸 */
  .site-blog .toc-toggle {
    border: 1px solid var(--border) !important;
    border-radius: var(--radius) !important;
  }
  .site-blog .toc-toggle,
  .site-blog .back-to-top {
    width: 40px !important;
    height: 40px !important;
  }
}

/* 6. 正文背景：白度80%纸色 + 灰度点纹理（--dot-texture 已并入头部变量块） */
/* 正文区域背景（=侧栏色=卡片色） + 灰度点纹理 */
.site-blog .blog-main-content{
  background-color: var(--card-bg) !important;
  background-image: var(--dot-texture) !important;
  background-size: var(--dot-size) !important;
  background-repeat: repeat !important;
}
[data-theme="dark"] .site-blog .blog-main-content{
  background-color: var(--card-bg) !important;
  background-image: var(--dot-texture) !important;
  background-size: var(--dot-size) !important;
  background-repeat: repeat !important;
}

/* 7. 发布/更新日期位置对齐 */
/* align-items 与基础层 .blog-main .article-meta 同值；日期组仅 display/align-items 与基础层同值，
   其余属性无竞争 */
.site-blog .article-meta {
  align-items: center;
}
.site-blog .article-date,
.site-blog .article-updated {
  display: inline-flex;
  align-items: center;
  line-height: 1.4;
  font-size: 12px;
  min-height: 20px;
  margin: 0;
  font-style: normal;
}

/* 8. 深色模式正文颜色修复 */
[data-theme="dark"] body { color: var(--text) !important; }
[data-theme="dark"] h1, [data-theme="dark"] h2, [data-theme="dark"] h3,
[data-theme="dark"] h4, [data-theme="dark"] h5, [data-theme="dark"] h6 {
  color: var(--dark) !important;
}
[data-theme="dark"] .blog-main article p,
[data-theme="dark"] .blog-main article li,
[data-theme="dark"] .blog-main article td,
[data-theme="dark"] .blog-main article th {
  color: var(--text) !important;
}
[data-theme="dark"] .blog-main article h1,
[data-theme="dark"] .blog-main article h2,
[data-theme="dark"] .blog-main article h3,
[data-theme="dark"] .blog-main article h4 {
  color: var(--ink-body) !important;
}
[data-theme="dark"] .newspaper-item-title a,
[data-theme="dark"] .newspaper-headline-title a {
  color: var(--ink-body) !important;
}
[data-theme="dark"] .newspaper-item-excerpt {
  color: var(--text-secondary) !important;
}
[data-theme="dark"] .blog-main-article p,
[data-theme="dark"] .blog-main-article li {
  color: var(--text) !important;
}
[data-theme="dark"] .archive-page-header h1 {
  color: var(--dark) !important;
}

/* 9. 归档/分类页头部样式（内容区顶部） */
/* 归档页头：无更高特异性竞争，去 !important（dark 版同值 var(--dark)，不冲突） */
.site-blog .archive-page-header {
  margin-bottom: 20px;
  padding-bottom: 12px;
  border-bottom: 1px solid var(--border);
}
.site-blog .archive-page-header h1 {
  font-size: 24px;
  margin: 0 0 4px;
  color: var(--dark);
  border: none;
  padding: 0;
}
/* 10. 归档/分类页卡片网格（与主页一致；item/cover-img 样式由 v6 全站 .newspaper-item 规则统一提供；列数由 v11 统一规则接管）
   注：原 .archive-wrap .newspaper-list 版与 v6 全站版取值完全相同，已删（由 v6 同值接管） */
.site-blog .archive-wrap .newspaper-item-cover {
  width: 100% !important;
  aspect-ratio: 16 / 9 !important;
  height: auto !important;
  background: var(--cover-bg) !important;   /* v29：随主题（深色=黑） */
  border-radius: var(--radius) !important;
  overflow: hidden !important;
  margin-bottom: 10px !important;
}
/* 标题/摘要的 .archive-wrap 版与 v6 全站版取值完全相同，已删（由 v6 同值接管） */
.site-blog .archive-wrap .newspaper-item-meta {
  font-size: 0.75rem !important;
  color: var(--text-secondary) !important;
}

/* 12. 归档页去掉 masthead（内容已在 main 内）：该元素无同属性竞争，去 !important
   13. 原「手机端归档页两列」已被 v20 同断点规则完全覆盖（后者另含 gap:10px），已删 */
.site-blog .archive-wrap .newspaper-masthead {
  display: none;
}

/* ====== v9: 归档页时间轴列表 + 按月筛选（v13 起主区无纹理，仅卡片保留） ====== */

/* 1. 归档主体：底色由 .archive-wrap .newspaper-main 提供 */

/* 2. 按月筛选条（电影放映场次式条件条） */
.site-blog .archive-filter-bar {
  display: flex;
  flex-wrap: wrap;
  gap: 8px;
  margin: 0 0 18px;
}
.site-blog .archive-filter-btn {
  appearance: none;
  -webkit-appearance: none;
  padding: 5px 14px;
  border: 1px solid var(--border);
  border-radius: 999px;
  background: var(--bg);
  color: var(--text-secondary);
  font-family: var(--font-sans);
  font-size: 13px;
  line-height: 1.6;
  cursor: pointer;
  transition: border-color 0.15s, color 0.15s, background 0.15s;
}
.site-blog .archive-filter-btn:hover {
  border-color: var(--nav-border-hover);
  color: var(--text);
}
.site-blog .archive-filter-btn.is-active {
  background: var(--ink-headline);
  border-color: var(--ink-headline);
  color: var(--bg);
}

/* 3. 时间轴列表：日期 + 文章名（作为正文内容，无卡片框） */
.site-blog .archive-list {
  margin: 0;
  padding: 2px 0;
}
.site-blog .archive-item {
  display: flex;
  align-items: baseline;
  gap: 16px;
  padding: 10px 2px;
  border-bottom: 1px dotted var(--border);
}
.site-blog .archive-item:last-child {
  border-bottom: none;
}
.site-blog .archive-item[hidden] {
  display: none !important;
}
.site-blog .archive-item-date {
  flex-shrink: 0;
  font-size: 13px;
  color: var(--text-secondary);
  letter-spacing: 0.04em;
  font-variant-numeric: tabular-nums;
}
.site-blog .archive-item-title {
  color: var(--ink-body);
  text-decoration: none;
  font-weight: 500;
  font-size: 15px;
  line-height: 1.6;
  min-width: 0;
  overflow-wrap: break-word;
}
.site-blog .archive-item-title:hover {
  color: var(--primary);
}
@media (max-width: 480px) {
  .site-blog .archive-item {
    flex-direction: column;
    gap: 2px;
    align-items: flex-start;
  }
  /* 手机端：阅读数与标签右对齐，与正文（标题）区分开 */
  .site-blog .archive-item .post-views,
  .site-blog .archive-item .archive-item-tags {
    align-self: flex-end;
  }
}

/* ====== v10: 瞬间页（正文=文章样式 + 按月分组） ====== */

/* 1. 瞬间主体外观已并入上方「主区卡片外观」统一组 */

/* 2. 按月分组标题 */
.site-blog .moments-month-title {
  font-size: 15px;
  font-weight: 600;
  color: var(--ink-headline);
  letter-spacing: 0.08em;
  margin: 4px 0 2px;
  padding-bottom: 6px;
  border-bottom: 1px solid var(--ink-headline);
}
.site-blog .moments-month + .moments-month {
  margin-top: 22px;
}

/* 3. 瞬间条目：文章正文样式（字号/行高与 .blog-main-article p 一致） */
.site-blog .moments-list {
  margin: 0;
}
.site-blog .moment-item {
  padding: 12px 0 14px;
  border-bottom: 1px dotted var(--border);
}
.site-blog .moment-item:last-child {
  border-bottom: none;
}
.site-blog .moment-date {
  display: block;
  font-size: 12px;
  font-weight: 400;
  color: var(--text-secondary);
  letter-spacing: 0.05em;
  font-variant-numeric: tabular-nums;
  margin-bottom: 4px;
  padding: 0;
  background: none;
}
.site-blog .moment-content {
  margin-top: 0;
}
.site-blog .moment-content p {
  margin: 0;
  font-size: 16px;
  line-height: 1.8;
  color: var(--text);
}
.site-blog .moment-image {
  margin: 10px 0 0;
  max-width: 420px;
}
.site-blog .moment-image img {
  max-width: 100%;
  height: auto;
  border-radius: 6px;
  border: 1px solid var(--border);
  display: block;
}

/* 4. 分类介绍（Trilium 分类笔记正文 → categories.yml，仅分类页可见） */
.site-blog .category-intro {
  margin: 0 0 18px;
  padding: 0 0 14px;
  border-bottom: 1px dotted var(--border);
  font-size: 14px;
  line-height: 1.8;
  color: var(--text-secondary);
}
/* ====== v11: 全站统一批次（文章页细化 + 侧栏统一 + 手机页脚精简 + 首页三列） ====== */

/* 1. 文章页：明暗切换/搜索按钮细边框（与瞬间框一致） */
.site-blog .blog-action-btn {
  background: var(--card-bg) !important;
  border: 1px solid var(--border) !important;
  border-radius: var(--radius) !important;
}

/* 2. 文章页：正文背景内不再加卡片边框（正文直接呈现在纹理背景上） */
/* 该元素盒属性的最高特异性来源（其余同目标规则均为 0,1,1），去 !important */
.site-blog .blog-main article,
.site-blog .blog-main-article {
  background: transparent;
  border: none;
  box-shadow: none;
  padding: 4px 4px 0;
  margin: 0;
}

/* 3. 返回顶部按钮：桌面端与平板/移动端同款（方圆角） */
.site-blog .back-to-top {
  border: 1px solid var(--border) !important;
  border-radius: var(--radius) !important;
}

/* 4. 所有页面信息栏 = 文章页左栏形态（左侧 + 卡片框，v13 起随页面同步滚动不吸顶） */
/* v14：撤回弹性宽度——全站固定侧栏（含平板），max-width 与文章页统一 1280，切页零跳跃 */
/* v23：侧栏 220 → 180；v24：180 → 200（平板/桌面统一） */
.site-blog .newspaper-wrap .newspaper-layout {
  display: grid !important;
  grid-template-columns: 200px minmax(0, 1fr) !important;
  gap: 24px !important;
  max-width: 1280px !important;
  margin: 0 auto !important;
  padding: 0 !important;
  align-items: start !important;
  background: none !important;
  box-shadow: none !important;
}
.site-blog .newspaper-wrap .newspaper-main { order: 2; }
.site-blog .newspaper-wrap .newspaper-sidebar { order: 1; }
.site-blog .newspaper-sidebar {
  background-color: var(--paper-sidebar) !important;
  border: 1px solid var(--border) !important;
  border-radius: var(--radius) !important;
  padding: 16px !important;
  min-width: 0 !important;
}

/* 5. 所有页面主区外观已并入「主区卡片外观」统一组 */

/* 6. 首页/归档/分类卡片网格：默认两列，≥1172px 三列（手机两列由 rule 8 接管） */
.site-blog .newspaper-list,
.site-blog .archive-wrap .newspaper-list {
  grid-template-columns: repeat(2, minmax(0, 1fr)) !important;
}
@media (min-width: 1172px) {
  .site-blog .newspaper-list,
  .site-blog .archive-wrap .newspaper-list {
    grid-template-columns: repeat(3, minmax(0, 1fr)) !important;
  }
}

/* 7. 摘要长词换行（修日期串无空格溢出乱码） */
.site-blog .newspaper-item-excerpt {
  overflow-wrap: break-word !important;
  word-break: break-word !important;
  min-width: 0 !important;
}

/* 8. 手机端（≤740）：单栏 + 卡片两列；侧栏仅保留页脚与瞬间/归档入口（导航在汉堡抽屉） */
/* v22：隐藏规则限定侧栏容器，不误伤汉堡菜单内复用的分类/标签 details（菜单空白的根因） */
@media (max-width: 740px) {
  .site-blog .newspaper-sidebar .blog-sidebar-brand,
  .site-blog .newspaper-sidebar .blog-sidebar-actions,
  .site-blog .newspaper-sidebar .blog-sidebar-details,
  .site-blog .blog-article-list .blog-sidebar-brand,
  .site-blog .blog-article-list .blog-sidebar-actions,
  .site-blog .blog-article-list .blog-sidebar-details {
    display: none !important;
  }
  .site-blog .newspaper-list,
  .site-blog .archive-wrap .newspaper-list {
    grid-template-columns: repeat(2, minmax(0, 1fr)) !important;
    gap: 10px !important;
  }
  .site-blog .newspaper-wrap .newspaper-layout {
    grid-template-columns: 1fr !important;
    padding: 0 !important;
    gap: 16px !important;
  }
  .site-blog .newspaper-wrap .newspaper-main { order: 0; }
  .site-blog .newspaper-wrap .newspaper-sidebar { order: 0; }
  .site-blog .newspaper-wrap .newspaper-main,
  .site-blog .moments-wrap .newspaper-main,
  .site-blog .archive-wrap .newspaper-main {
    padding: 16px 14px !important;
  }
  .site-blog .blog-layout {
    padding: 12px !important;
    grid-template-columns: 1fr !important;
  }
}

/* ====== v12: 细节修正批次（横滚按钮） ====== */

/* 11. 首页横滚条：左右翻页按钮 */
.site-blog .headline-row {
  display: flex !important;
  align-items: center !important;
  gap: 8px !important;
  margin-bottom: 20px !important;
  position: relative !important;   /* 左右按钮改为绝对定位悬浮，不再占宽度 */
}
.site-blog .headline-row .headline-scroll {
  flex: 1 !important;
  min-width: 0 !important;
  margin-bottom: 0 !important;
}
.site-blog .headline-nav {
  position: absolute !important;
  top: 50% !important;
  transform: translateY(-50%) !important;
  z-index: 3 !important;
  flex-shrink: 0 !important;
  width: 32px !important;
  height: 60px !important;
  border: 1px solid var(--border) !important;
  background-color: rgba(255, 255, 255, 0.42) !important;
  color: var(--text) !important;
  border-radius: var(--radius) !important;
  font-size: 20px !important;
  line-height: 1 !important;
  cursor: pointer !important;
  box-shadow: none !important;
  -webkit-backdrop-filter: blur(3px) !important;
  backdrop-filter: blur(3px) !important;
  transition: opacity 0.15s, background-color 0.15s !important;
}
.site-blog .headline-nav-prev { left: 4px !important; }
.site-blog .headline-nav-next { right: 4px !important; }
.site-blog .headline-nav:hover:not(:disabled) {
  background-color: rgba(255, 255, 255, 0.88) !important;
  color: var(--primary) !important;
}
.site-blog .headline-nav:disabled { opacity: 0.25 !important; cursor: default !important; }
[data-theme="dark"] .site-blog .headline-nav {
  background-color: rgba(28, 28, 28, 0.5) !important;
}
[data-theme="dark"] .site-blog .headline-nav:hover:not(:disabled) {
  background-color: rgba(28, 28, 28, 0.9) !important;
}
/* ====== v13: 滚动与栅格重构（CSS 缓存 v18） ====== */

/* 12. 空分类（无文章无路由）：弱化显示不可点 */
.site-blog .blog-cat-empty {
  display: flex;
  justify-content: space-between;
  align-items: baseline;
  color: var(--text-secondary);
  opacity: 0.6;
}
.site-blog .blog-cat-empty .count { color: var(--text-secondary); font-size: 11px; font-style: italic; }
/* ====== v14: 细节修正批次（CSS 缓存 v19；共用列表页模板配套） ====== */

/* 1. 归档时间轴 / 标签总览 / 瞬间页主区恢复点纹理
      （分类页 cards 卡片自带纹理，首页无纹理，均不加主区纹理）
      标签总览页与归档页共用同一 archive-list 时间轴，故同样需要主区纹理。 */
.site-blog .archive-wrap.archive-chron .newspaper-main,
.site-blog .archive-wrap.archive-tags .newspaper-main,
.site-blog .moments-wrap .newspaper-main {
  background-image: var(--dot-texture) !important;
  background-size: var(--dot-size) !important;
  background-repeat: repeat !important;
}

/* 2. 侧栏按钮与瞬间入口对齐：容器去内边距，按钮固定 40px 消除 emoji 行高差 */
.site-blog .blog-sidebar-actions {
  padding: 0 !important;
  background: none !important;
  border-radius: 0 !important;
  border: none !important;
}
.site-blog .blog-action-btn {
  display: flex !important;
  align-items: center !important;
  justify-content: center !important;
  height: 40px !important;
  box-sizing: border-box !important;
  line-height: 1 !important;
  padding: 0 12px !important;
  font-size: 13px !important;
  font-weight: 600 !important;
  letter-spacing: 0.05em !important;
  flex: 1 !important;
}

/* 3. 空分类字体与正常分类一致（对齐 .blog-category-list li a 规则） */
.site-blog .blog-cat-empty {
  font-size: 13px !important;
  font-family: "Microsoft YaHei", system-ui, sans-serif !important;
  padding: 6px 0 !important;
  border-bottom: 1px dotted var(--border) !important;
}
.site-blog .blog-category-list li:last-child .blog-cat-empty { border-bottom: none !important; }
/* ====== v15: 移动端页脚精简 + 卡片等高（CSS 缓存 v20） ====== */

/* 1. 移动端侧栏仅保留页脚（归档/瞬间入口已在汉堡菜单，关于/隐私/备案等全在页脚） */
/* v21：限定页面底部侧栏容器（.newspaper-sidebar/.blog-article-list），不误伤汉堡菜单内复用的侧栏入口 */
@media (max-width: 740px) {
  .site-blog .newspaper-sidebar .blog-sidebar-moments-link,
  .site-blog .newspaper-sidebar .blog-sidebar-archives-link,
  .site-blog .newspaper-sidebar .blog-sidebar-tags-link,
  .site-blog .blog-article-list .blog-sidebar-moments-link,
  .site-blog .blog-article-list .blog-sidebar-archives-link,
  .site-blog .blog-article-list .blog-sidebar-tags-link {
    display: none !important;
  }
}

/* 2. 移动端更窄（≤480px）：卡片从两列切一列 */
@media (max-width: 480px) {
  .site-blog .newspaper-list,
  .site-blog .archive-wrap .newspaper-list {
    grid-template-columns: 1fr !important;
  }
}

/* 3. 侧栏按钮 hover 与瞬间入口一致（primary 底 + 白字） */
.site-blog .blog-sidebar-actions .blog-action-btn:hover {
  background: var(--primary) !important;
  color: var(--white) !important;
  border-color: var(--primary) !important;
}

/* 4. 卡片等高：摘要固定 3 行（标题行数已由 v20 解除截断），meta 单行省略 */
.site-blog .newspaper-item-excerpt,
.site-blog .archive-wrap .newspaper-item-excerpt {
  display: -webkit-box !important;
  -webkit-line-clamp: 3 !important;
  -webkit-box-orient: vertical !important;
  overflow: hidden !important;
  min-height: 4.5em !important;
}
.site-blog .newspaper-item-meta,
.site-blog .archive-wrap .newspaper-item-meta {
  white-space: nowrap !important;
  overflow: hidden !important;
  text-overflow: ellipsis !important;
}
/* 横滚头条卡片：标题行数已由 v20 解除截断；摘要行（v59 起）已从海报移除，相关规则一并删除 */
/* ====== v16: 页脚去重 + 上下篇恢复（CSS 缓存 v21） ====== */

/* 1. 列表页（带侧栏页脚）全断点隐藏页面级 footer，消除 ©/ICP/公安 重复；404/tools 页无侧栏页脚不受影响 */
.site-blog .newspaper-wrap ~ footer.footer { display: none !important; }

/* 2. 移动端：侧栏容器去边框背景，页脚内容直接贴页面底部（侧栏内其余元素已由 v11/v15 隐藏） */
@media (max-width: 740px) {
  .site-blog .newspaper-sidebar,
  .site-blog .blog-article-list {
    background: none !important;
    border: none !important;
    border-radius: 0 !important;
    padding: 0 !important;
    box-shadow: none !important;
  }
}
/* ====== v17: 功能修正批次（CSS 缓存 v22） ====== */

/* 1. 归档入口的视觉已并入上方「侧栏三大入口」统一组 */

/* 2. 横滚头条卡片：图片区留白块（与普通卡片 cover 同源：v29 起改用 --cover-bg，深色下转黑） */
.site-blog .newspaper-headline .newspaper-headline-cover {
  background: var(--cover-bg) !important;
  border-radius: 6px !important;
  margin-bottom: 8px !important;
}
/* ====== v19: 侧栏修正批次（CSS 缓存 v24） ====== */

/* 1. 撤销 v18 的文章页侧栏 stretch：侧栏只包内容高度，不延伸到页面底部
      （v18 误判了"底部缺内容"——真实根因是 v4.0 桌面端隐藏了列表页侧栏 footer，
       已在本批次上方修复；文章页 .blog-article-list 恢复 L980 的 align-self:start） */

/* 2. 客户端分页模块（首页 + 分类/标签页共用，每页 12 张）——v18 继承 */
.site-blog .pagination.card-pagination {
  display: flex !important;
  align-items: center !important;
  justify-content: center !important;
  gap: 12px !important;
  margin-top: 24px !important;
  padding-top: 0 !important;
}
.site-blog .pagination.card-pagination .page-btn {
  padding: 8px 16px !important;
  border: 1px solid var(--border) !important;
  border-radius: var(--radius) !important;
  background: var(--card-bg) !important;
  color: var(--text) !important;
  font-size: 13px !important;
  font-family: "Microsoft YaHei", system-ui, sans-serif !important;
  cursor: pointer !important;
  box-shadow: var(--shadow) !important;
}
.site-blog .pagination.card-pagination .page-btn:hover:not(:disabled) {
  background: var(--primary) !important;
  color: var(--white) !important;
  border-color: var(--primary) !important;
}
.site-blog .pagination.card-pagination .page-btn:disabled {
  opacity: 0.35 !important;
  cursor: default !important;
}
.site-blog .pagination.card-pagination .page-info {
  font-size: 13px !important;
  color: var(--text-secondary) !important;
  font-family: "Microsoft YaHei", system-ui, sans-serif !important;
  letter-spacing: 0.08em !important;
}

/* 3. 首页"最近文章"区块标题（横滚海报下方，替代侧栏最新区块） */
.site-blog .newspaper-section-title {
  font-size: 20px !important;
  font-weight: 700 !important;
  color: var(--ink-body) !important;
  margin: 8px 0 16px !important;
  padding-bottom: 10px !important;
  border-bottom: 2px solid var(--ink-headline) !important;
  font-family: var(--font-sans) !important;
  letter-spacing: 0.02em !important;
}

/* ====== v20: 侧栏统一 + 移动端补全 + 标题显示全（CSS 缓存 v25） ====== */

/* 1. 平板端列表页侧栏回正左侧（覆盖基础层平板断点 order:2，与文章页/桌面端方向一致） */
@media (min-width: 741px) and (max-width: 1024px) {
  .site-blog .newspaper-wrap .newspaper-sidebar {
    order: 1 !important;
  }
}

/* 2. 卡片/海报标题完整显示：去掉 v15 的 2 行截断与 min-height，自然换行；
      字号相应调小（卡片 1.05→0.95rem，头条 36→30px），在现有空间显示更多字 */
.site-blog .newspaper-item-title,
.site-blog .archive-wrap .newspaper-item-title {
  display: block !important;
  -webkit-line-clamp: unset !important;
  -webkit-box-orient: initial !important;
  overflow: visible !important;
  min-height: 0 !important;
  font-size: 0.95rem !important;
  overflow-wrap: break-word !important;
}
.site-blog .newspaper-headline-title {
  display: block !important;
  -webkit-line-clamp: unset !important;
  -webkit-box-orient: initial !important;
  overflow: visible !important;
  min-height: 0 !important;
  font-size: 30px !important;
  overflow-wrap: break-word !important;
}
/* 摘要仍保持 3 行截断（标题显示全后行内以最高卡片对齐，摘要截断防卡片过长） */

/* 3. 移动端导航栏颜色深一档（原 var(--card-bg) 亮色过浅，与内容区拉不开层次） */
@media (max-width: 740px) {
  body.site-blog .navbar-blog-mobile {
    background: #F1EAD5 !important;
    border-bottom: 1px solid var(--border) !important;
  }
  [data-theme="dark"] body.site-blog .navbar-blog-mobile {
    background: #242013 !important;
  }
  /* 手机端头条标题同步微调（基础层 22px → 20px，配合完整显示） */
  .site-blog .newspaper-headline-title {
    font-size: 20px !important;
  }

}

/* ====== v21: 全站几何统一（切页零跳动）+ 手机菜单复用侧栏（CSS 缓存 v26） ====== */

/* 1. 布局容器 border-box 化：wrap 与 blog-layout 同语义（max-width 1280 含水平 padding 28），
      任意视口下侧栏左缘完全一致，切页零跳动（根除旧 content-box 下 28px 恒差与 1280-1336 区间漂移） */
.site-blog .newspaper-wrap,
.site-blog .blog-layout {
  box-sizing: border-box !important;
  /* v34：body 是 column flex，子项自带的 margin:0 auto 会吸走交叉轴全部剩余空间、
     取消 stretch 拉伸，容器退化为 shrink-to-fit——内容少时整页缩窄并居中。
     显式给满宽：窄屏铺满，宽屏仍由 max-width:1280 + auto margin 居中 */
  width: 100% !important;
}

/* 2. 文章页两栏化：几何已并入基础层 .blog-layout；≤740px 由媒体查询改单列 */

/* 3. 主区内部：正文 + TOC 两栏（≥980px，v22：断点 1025→980）。
      v25：TOC clamp 160/14vw → 136/15vw（旧值 ≤1143 触底停摆，980~1143 只剩正文单方收窄）；
      基础层 blog-toc min-width 已归零，列宽压缩不溢出盖正文
      v26：①TOC 封顶 200 → 192（=15vw@1280 容器满宽，容器封顶后 TOC 同步封顶，≥1280 两列全静止）；
          ②正文去 720px max-width（原值致 ≥1150 视口正文停摆+列内居中虚间距），正文块 = 正文列全宽，
            与 TOC 间距恒 gap 24；980 处正文列 529 = 主区 700 − TOC 147 − gap 24，
            TOC 折叠（≤979）后正文跳变为平板主区全宽，跳变量恰为 TOC+gap，衔接不重叠
      TOC+正文之和 = 列表页内容区宽（同容器同 gap 推导），侧栏左缘静止 */
@media (min-width: 980px) {
  .site-blog .blog-main {
    display: grid !important;
    grid-template-columns: minmax(0, 1fr) clamp(136px, 15vw, 192px) !important;
    gap: 24px !important;
    align-items: start !important;
  }
}

/* 平板（≤979px，v22 断点同步）：主区单列，TOC 隐藏走 toc-toggle 弹出（基础层已有） */
@media (max-width: 979px) {
  .site-blog .blog-main {
    grid-template-columns: 1fr !important;
  }
}

/* 4. 手机端正文卡片 padding 对齐列表页主区（16 14）：
      v22 修正——目标改为 .blog-main-content（v21 误设 .blog-main 与容器 padding 叠加翻倍） */
@media (max-width: 740px) {
  .site-blog .blog-main-content {
    padding: 16px 14px !important;
  }
}
/* ====== v22: 手机端修复 + TOC 断点下探 + 归档标签列 + 标签总览页（CSS 缓存 v27） ====== */

/* 1. 滚动条占位稳定：防长页(有滚动条)/短页(无滚动条)切换时视口宽度变化导致整页平移（切页横跳的另一来源） */
html {
  scrollbar-gutter: stable;
}

/* 2. 标签总览入口的视觉已并入上方「侧栏三大入口」统一组（原 margin-bottom:14px 保留） */

/* 3. 归档时间轴列表行内标签（标题右侧，超出省略） */
.site-blog .archive-item .archive-item-tags {
  margin-left: auto;
  flex-shrink: 1;
  display: flex;
  gap: 4px;
  overflow: hidden;
  white-space: nowrap;
  justify-content: flex-end;
  min-width: 0;
}
.site-blog .archive-item .archive-item-tags a {
  flex-shrink: 0;
  font-size: 12px;
  color: var(--text-secondary);
  text-decoration: none;
  padding: 1px 7px;
  border: 1px solid var(--border);
  border-radius: 999px;
  line-height: 1.5;
}
.site-blog .archive-item .archive-item-tags a:hover {
  color: var(--primary);
  border-color: var(--nav-border-hover);
}
@media (max-width: 480px) {
  .site-blog .archive-item .archive-item-tags {
    margin-left: 0;
    flex-wrap: wrap;
    justify-content: flex-end;
  }
}

/* 4. 标签总览页（/tags/）：筛选条 = 全部标签，默认选中第一个并展示其文章时间轴（与归档页同款） */
.site-blog .tags-filter-bar {
  margin-bottom: 18px;
}

/* ====== ⑤c：评论表单 —— 原 comment-form.ejs 内联 <style> 外迁 ======
 * 置于 style.css 末尾：原内联 <style> 位于 body 内、在所有外链样式之后，
 * 故平局（同特异性）时由它胜出；追加到文件末尾可保持完全相同的级联关系。 */
.comment-section {
  margin: 2rem 0 1rem;
  padding-top: 1.5rem;
  border-top: 1px solid var(--border);
}
.comment-title {
  font-size: 1.2rem;
  font-weight: 600;
  margin-bottom: 1rem;
  color: var(--ink-headline);
}
.comment-form {
  display: flex;
  flex-direction: column;
  gap: 0.75rem;
}
.comment-field {
  position: relative;
}
/* v30：原用 var(--bg-primary/--text-primary/--border-color/--accent-color)，但这四个变量本主题
   从未定义 ⇒ 全部退化为浅色字面量（#fff 底 + #333 字），深色模式下评论框仍是白底。改用真实 token。 */
.comment-field input,
.comment-field textarea {
  width: 100%;
  padding: 0.6rem 0.8rem;
  border: 1px solid var(--border);
  border-radius: 4px;
  font-family: inherit;
  font-size: 0.95rem;
  background: var(--card-bg);
  color: var(--text);
  resize: vertical;
}
.comment-field input::placeholder,
.comment-field textarea::placeholder { color: var(--text-secondary); }
.comment-field input:focus,
.comment-field textarea:focus {
  outline: none;
  border-color: var(--primary);
}
.char-count {
  position: absolute;
  bottom: 0.4rem;
  right: 0.8rem;
  font-size: 0.75rem;
  color: var(--text-secondary);
  pointer-events: none;
}
/* v30：审核说明（提交按钮下方常驻，替代只靠成功提示传达） */
.comment-hint {
  margin: 10px 0 0;
  font-size: 0.82rem;
  color: var(--text-secondary);
}
/* v30：海报卡片（首页头条横滚 .newspaper-headline）的阅读次数——与卡片同源，抵消 meta 行的大写字距 */
.site-blog .newspaper-headline .post-views {
  font-size: 11px;
  letter-spacing: 0;
  text-transform: none;
  color: var(--text-secondary);
}
.comment-honeypot {
  position: absolute;
  left: -9999px;
  width: 1px;
  height: 1px;
  overflow: hidden;
}
.comment-submit {
  align-self: flex-start;
  padding: 0.5rem 1.5rem;
  border: none;
  border-radius: 4px;
  background: var(--accent-color, #4a90d9);
  color: #fff;
  font-size: 0.95rem;
  cursor: pointer;
  transition: opacity 0.2s;
}
.comment-submit:hover { opacity: 0.85; }
.comment-submit:disabled { opacity: 0.5; cursor: not-allowed; }
.comment-result {
  margin-top: 0.75rem;
  font-size: 0.9rem;
  min-height: 1.5em;
}
.comment-result.success { color: #2a7a2a; }
.comment-result.error { color: #c44; }

/* 文章页 上/下一篇：无可跳转目标时的禁用态（原内联 style="opacity:0.35" 改类） */
.article-nav-link.is-disabled { opacity: 0.35; }

/* ============================================================
   文章顶部提示框（AI 生成 / 纯手写 / 时效 / 篇幅）
   视觉对齐 Trilium 提示框：浅色底 + 左侧 4px 强调边 + 圆角
   ============================================================ */
.article-notices { display: flex; flex-direction: column; gap: 8px; margin: 16px 0 20px; }
.article-notice {
  position: relative;
  padding: 9px 14px 9px 38px;
  border: 1px solid transparent;
  border-left: 4px solid;
  border-radius: 4px;
  font-size: 13px;
  line-height: 1.65;
}
.article-notice::before { position: absolute; left: 13px; top: 9px; font-size: 14px; line-height: 1.65; }
.article-notice strong { font-weight: 700; }
.article-notice--ai { background: #f4efff; border-color: #dccdff; border-left-color: #7c3aed; color: #4a2d8f; }
.article-notice--ai::before { content: '\1f916'; }
.article-notice--hand { background: #fff8e1; border-color: #f6e3a8; border-left-color: #e0a800; color: #6b5200; }
.article-notice--hand::before { content: '\270d\fe0f'; }
.article-notice--stale { background: #fdecea; border-color: #f6c9c3; border-left-color: #d93025; color: #8c2c22; }
.article-notice--stale::before { content: '\23f0'; }
.article-notice--stats { background: #eaf6ec; border-color: #c3e2c9; border-left-color: #2e7d32; color: #245c28; }
.article-notice--stats::before { content: '\1f4c4'; }
[data-theme="dark"] .article-notice--ai { background: rgba(124,58,237,.16); border-color: rgba(124,58,237,.42); color: #cdb6ff; }
[data-theme="dark"] .article-notice--hand { background: rgba(224,168,0,.15); border-color: rgba(224,168,0,.40); color: #f0d68a; }
[data-theme="dark"] .article-notice--stale { background: rgba(217,48,37,.16); border-color: rgba(217,48,37,.45); color: #f7b4ac; }
[data-theme="dark"] .article-notice--stats { background: rgba(46,125,50,.18); border-color: rgba(46,125,50,.45); color: #a5d6a7; }
@media (max-width: 740px) {
  .article-notice { font-size: 12px; padding: 8px 12px 8px 34px; }
  .article-notice::before { left: 11px; top: 8px; font-size: 13px; }
}

/* ============================================================
   已审核评论展示（article-comments）
   数据来自 source/_data/comments.yml（仅 #commentStatus=approved）
   ============================================================ */
.article-comments {
  margin: 28px 0 6px;
  padding-top: 18px;
  border-top: 1px solid #e5e5e5;
}
.article-comments-title {
  margin: 0 0 14px;
  font-size: 1.05rem;
  font-weight: 600;
  color: #222;
}
.article-comments-count {
  display: inline-block;
  min-width: 1.4em;
  margin-left: 6px;
  padding: 0 6px;
  font-size: 0.78rem;
  line-height: 1.65;
  text-align: center;
  vertical-align: middle;
  color: #fff;
  background: #2a7a2a;
  border-radius: 10px;
}
.article-comments-list { margin: 0; padding: 0; list-style: none; }
.article-comment {
  padding: 12px 14px;
  margin-bottom: 10px;
  background: rgba(0, 0, 0, 0.025);
  border-radius: 6px;
}
.article-comment-meta { display: flex; align-items: baseline; gap: 10px; margin-bottom: 6px; }
.article-comment-author { font-size: 0.9rem; font-weight: 600; }
.article-comment-time { font-size: 0.78rem; color: #999; }
.article-comment-body { margin: 0; font-size: 0.92rem; line-height: 1.7; white-space: pre-wrap; }
.article-comments-tip { margin: 10px 0 0; font-size: 0.78rem; color: #999; }
[data-theme="dark"] .article-comments { border-top-color: #3a3a3a; }
[data-theme="dark"] .article-comments-title { color: #e6e6e6; }
[data-theme="dark"] .article-comment { background: rgba(255, 255, 255, 0.05); }

/* ============================================================
   访问量展示（js/views.js 异步填充；仅文章页；拿到数字后才显示）
   ============================================================ */
.article-views {
  display: inline-flex;
  align-items: center;
  gap: 4px;
  padding-left: 16px;
  border-left: 1px solid var(--border);
  font-variant-numeric: tabular-nums;
}
.article-views[hidden] { display: none; }
.article-views-num { font-weight: 700; color: var(--dark); }

/* 列表卡片（首页 / 分类 / 标签 cards）时间后的阅读次数：批量读取，0 次不显示 */
.post-views {
  display: inline-flex;
  align-items: center;
  gap: 4px;
  padding-left: 10px;
  border-left: 1px solid var(--border);
  font-variant-numeric: tabular-nums;
}
.post-views[hidden] { display: none; }
.post-views-num { font-weight: 700; color: var(--dark); }

/* ====== v29: 明暗自动主题 + 首页热门文章 + 归档·标签阅读数（CSS 缓存 v34） ======
   配套：js/theme-init.js（首屏自动主题）、js/theme.js（运行时重算）、
        js/views.js（热门排序 / 标签面板排序）、index.ejs（最近·热门切换）、
        blog-list-page.ejs（归档 / 标签行内阅读数）
   本批次不引入新色值，全部沿用既有 token（--ink-headline / --bg / --text-secondary /
   --border / --primary / --cover-bg），待「统一配色」批次再整体微调。 */

/* 0. 关键：[hidden] 兜底——.newspaper-list 与 .card-pagination 在本文件里是 display:grid/flex
      !important，会反向压过 UA 的 [hidden]{display:none}，故切换「热门」时必须显式兜底，
      否则点「热门」后最近文章（含分页条）不会消失。 */
.site-blog .newspaper-list[hidden] { display: none !important; }
.site-blog .pagination.card-pagination[hidden] { display: none !important; }
.site-blog .newspaper-hot-wrap[hidden] { display: none !important; }

/* 1. 归档 / 标签检索：行内阅读次数（与卡片 .post-views 同源，字号随行内条目收敛） */
.site-blog .archive-item .post-views {
  font-size: 12px;
  color: var(--text-secondary);
  flex-shrink: 0;
}

/* 2. 首页区块头：「最近文章」标题 +「最近 / 热门」切换（选项置于标题右侧，同一条下划线） */
.site-blog .newspaper-section-head {
  display: flex !important;
  align-items: center !important;
  justify-content: space-between !important;
  gap: 16px !important;
  flex-wrap: wrap !important;
  margin: 8px 0 16px !important;
  padding-bottom: 10px !important;
  border-bottom: 2px solid var(--ink-headline) !important;
}
.site-blog .newspaper-section-head .newspaper-section-title {
  margin: 0 !important;
  padding-bottom: 0 !important;
  border-bottom: none !important;
}
.site-blog .newspaper-section-tabs {
  display: inline-flex !important;
  gap: 8px !important;
  flex-shrink: 0 !important;
}
.site-blog .newspaper-section-tabs .section-tab {
  appearance: none;
  -webkit-appearance: none;
  font-family: var(--font-sans) !important;
  font-size: 13px !important;
  line-height: 1.6 !important;
  padding: 4px 14px !important;
  border: 1px solid var(--border) !important;
  border-radius: 999px !important;
  background: var(--bg) !important;
  color: var(--text-secondary) !important;
  cursor: pointer !important;
  transition: border-color 0.15s, color 0.15s, background 0.15s;
}
.site-blog .newspaper-section-tabs .section-tab:hover {
  border-color: var(--nav-border-hover) !important;
  color: var(--text) !important;
}
.site-blog .newspaper-section-tabs .section-tab.is-active {
  background: var(--ink-headline) !important;
  border-color: var(--ink-headline) !important;
  color: var(--bg) !important;
}

/* 3. 首页热门文章（js/views.js 渲染）：条目字号/字体与「最近文章」卡片标题一致，整行可点击 */
.site-blog .newspaper-hot-list {
  margin: 0;
  padding: 0;
  list-style: none;
}
.site-blog .newspaper-hot-list .hot-item {
  display: flex;
  align-items: baseline;
  gap: 12px;
  padding: 10px 2px;
  border-bottom: 1px dotted var(--border);
  text-decoration: none;
  color: var(--ink-body);
}
.site-blog .newspaper-hot-list .hot-item:last-child { border-bottom: none; }
.site-blog .newspaper-hot-list .hot-item:hover .hot-title { color: var(--primary); }
.site-blog .newspaper-hot-list .hot-rank {
  flex-shrink: 0;
  width: 22px;
  font-size: 13px;
  font-weight: 700;
  color: var(--text-secondary);
  font-variant-numeric: tabular-nums;
}
.site-blog .newspaper-hot-list .hot-title {
  font-size: 1.05rem !important;      /* 与 .site-blog .newspaper-item-title 取值一致 */
  font-weight: 600 !important;
  font-family: var(--font-sans) !important;
  line-height: 1.5;
  min-width: 0;
  overflow-wrap: break-word;
}
.site-blog .newspaper-hot-list .hot-views {
  margin-left: auto;
  flex-shrink: 0;
  font-size: 12px;
  color: var(--text-secondary);
  font-variant-numeric: tabular-nums;
}
/* 热度列表标签胶囊（2026-10-19）：桌面随阅读数靠右；手机端换行右对齐（见下方断点） */
.site-blog .newspaper-hot-list .hot-tags {
  display: flex;
  gap: 4px;
  align-items: baseline;
  flex-shrink: 1;
  min-width: 0;
  justify-content: flex-end;
  overflow: hidden;
}
.site-blog .newspaper-hot-list .hot-tags span {
  flex-shrink: 0;
  font-size: 12px;
  color: var(--text-secondary);
  padding: 1px 7px;
  border: 1px solid var(--border);
  border-radius: 999px;
  line-height: 1.5;
}
.site-blog .newspaper-hot-wrap .hot-empty {
  padding: 12px 2px;
  font-size: 14px;
  color: var(--text-secondary);
}
@media (max-width: 480px) {
  /* 悬挂列表：标题独占序号右侧整行（内部换行天然悬挂），阅读数/标签各占一行右对齐 */
  .site-blog .newspaper-hot-list .hot-item { flex-wrap: wrap; align-content: flex-start; row-gap: 3px; column-gap: 10px; }
  .site-blog .newspaper-hot-list .hot-title { flex: 1 1 calc(100% - 32px); }
  .site-blog .newspaper-hot-list .hot-views { flex-basis: 100%; margin-left: 0; text-align: right; }
  .site-blog .newspaper-hot-list .hot-tags { flex-basis: 100%; flex-wrap: wrap; justify-content: flex-end; overflow: visible; }
}

/* === 手机端表格/代码块横向滚动（2026-10-19 第四批）：窄屏放弃换行压缩，保留自然宽度左右滑 */
@media (max-width: 480px) {
  .blog-main article table,
  .blog-main-article table {
    display: block;
    overflow-x: auto;
    -webkit-overflow-scrolling: touch;
    width: max-content;
    max-width: 100%;
  }
  .blog-main article figure.highlight pre code.hljs,
  .blog-main-article figure.highlight pre code.hljs { white-space: pre; word-break: normal; }
  .blog-main article figure.highlight td.code pre,
  .blog-main-article figure.highlight td.code pre { white-space: pre; word-break: normal; overflow-x: visible; }
  /* 关键：figure 的 scrollWidth 不含 table 内部溢出（table width:100% 锁 416、tbody 溢到 607 不传播），
     须让 table 按内容撑开（width:max-content）→ 溢出 figure → figure 滚动。行号留行首，长行整体左右滑 */
  .blog-main article figure.highlight,
  .blog-main-article figure.highlight { overflow-x: auto; -webkit-overflow-scrolling: touch; }
  .blog-main article figure.highlight table,
  .blog-main-article figure.highlight table { display: table; width: max-content; min-width: 100%; max-width: none; }
}
/* === 移动端细化（v70，2026-11-04） === */
/* 搜索关闭按钮：移动端全屏浮层时显示（桌面点外部即可关闭） */
.search-overlay .search-close {
  display: none; position: fixed; top: calc(8px + env(safe-area-inset-top)); right: 10px;
  width: 44px; height: 44px; align-items: center; justify-content: center;
  border: 0; background: transparent; color: var(--nav-text); font-size: 24px; line-height: 1;
  cursor: pointer; z-index: 1;
}
@media (max-width: 740px) {
  /* 触摸目标 ≥44px（WCAG 2.5.5 建议值） */
  .blog-action-btn, .hamburger, .toc-toggle, .back-to-top, .share-btn {
    min-width: 44px; min-height: 44px;
  }
  .hamburger { justify-content: center; align-items: center; }
  /* 搜索浮层全屏 + iOS 安全区 */
  .search-overlay.show {
    top: 0;
    height: 100dvh;
    padding: calc(12px + env(safe-area-inset-top)) 12px calc(12px + env(safe-area-inset-bottom));
    overflow-y: auto;
  }
  .search-overlay .search-close { display: flex; }
  .search-overlay input { margin-top: 4px; }
  /* 浮动按钮避开 iPhone 底部安全区 */
  .back-to-top { bottom: calc(78px + env(safe-area-inset-bottom)); }
  .toc-toggle { bottom: calc(22px + env(safe-area-inset-bottom)); }
  /* 表格/代码块横向滚动：细滚动条提示可滑动 */
  .blog-main-content article table::-webkit-scrollbar,
  .blog-main-content article figure.highlight::-webkit-scrollbar { height: 5px; }
  .blog-main-content article table::-webkit-scrollbar-thumb,
  .blog-main-content article figure.highlight::-webkit-scrollbar-thumb { background: var(--border-strong); border-radius: 3px; }
  /* 窄屏正文段落间距略收 */
  .blog-main-content article > p { margin: 0.7em 0; }
  /* TOC 抽屉打开时锁定背景滚动，防止滚动穿透 */
  body.toc-open { overflow: hidden; }
}
