/*!
 * 技术文章详情页阅读版式（article reading layout）
 * ------------------------------------------------------------------
 * 适用：single post（.single-post / body.single-post）
 * 不影响页面（page）与首页。
 *
 * 结构（由 functions.php 注入容器、article.js 填充内容）：
 *   .domopa-reader
 *     ├─ .domopa-reader__bar      顶部阅读进度条
 *     ├─ .domopa-reader__aside    左侧 240px 吸顶栏（sticky）
 *     │    ├─ .domopa-toc         章节目录
 *     │    ├─ .domopa-aside-card  咨询卡
 *     │    └─ .domopa-aside-tools 回到顶部
 *     └─ .domopa-reader__main     右侧正文
 *
 * 配色沿用主题变量：--domopa-ink / blue / teal / gold / mist / line
 * 未定义时给出同名兜底值，避免单独引用本文件时失色。
 */

/* ============ 变量与基础 ============ */

/* 变量提到 body 级：.entry-header 是 .domopa-reader 的兄弟节点，
   必须能读到 --dr-aside-w / --dr-gap 才能对齐正文左边界。 */
body.single-post{
  --dr-ink:#102f3d;
  --dr-blue:#0a5266;
  --dr-teal:#16808a;
  --dr-gold:#d5a85d;
  --dr-mist:#f1f5f3;
  --dr-line:#d7e4e1;
  --dr-muted:#58747a;
  --dr-aside-w:240px;
  --dr-gap:56px;
  --dr-header-h:81px;
}

/* 先放开 Astra 外层容器对文章页的宽度限制。
   Astra 的 .ast-container / #primary / .site-main / article 层层都有 max-width，
   单独调 wp 的 astra_the_content_width 不够，这里直接以文章页 body class 收敛。
   用 body.single-post 前缀提高特异性，避免影响其它页面。 */
body.single-post .site-content > .ast-container{
  max-width:1240px !important;
  width:100%;
  padding-left:20px;
  padding-right:20px;
}
body.single-post #primary,
body.single-post .site-main,
body.single-post article.type-post{
  max-width:100% !important;
  width:100%;
}
body.single-post article.type-post > .entry-header{
  max-width:100%;
}

/* Astra 的窄容器模式会对「.entry-content 的每个直接子元素」施加
   `.entry-content[data-ast-blocks-layout] > * { max-width: var(--wp--custom--ast-content-width-size) }`
   —— 而我们的 .domopa-reader 正是 .entry-content 的直接子元素，会被压到 750px。
   用同等/更高特异性把它放开（!important 因为变量值由 Astra 内联注入）。 */
body.single-post .entry-content[data-ast-blocks-layout] > .domopa-reader,
body.single-post .entry-content > .domopa-reader,
.domopa-reader{
  max-width:1180px !important;
  margin-left:auto !important;
  margin-right:auto !important;
  width:100%;
}

.domopa-reader{
  --dr-ink:#102f3d;
  --dr-blue:#0a5266;
  --dr-teal:#16808a;
  --dr-gold:#d5a85d;
  --dr-mist:#f1f5f3;
  --dr-line:#d7e4e1;
  --dr-muted:#58747a;
  --dr-aside-w:240px;
  --dr-gap:56px;
  --dr-header-h:81px;        /* 固定头部高度，锚点跳转偏移用 */

  position:relative;
  display:grid;
  grid-template-columns:var(--dr-aside-w) minmax(0,1fr);
  gap:var(--dr-gap);
  align-items:start;
  max-width:1180px;
  margin:0 auto;
  padding:0 0 72px;
  box-sizing:border-box;
  font-family:-apple-system, BlinkMacSystemFont, "Segoe UI", "Microsoft YaHei", sans-serif;
}

/* ============ 顶部阅读进度条 ============ */
.domopa-reader__bar{
  position:fixed;
  top:0;
  left:0;
  width:100%;
  height:3px;
  z-index:9999;
  background:transparent;
  pointer-events:none;
}
.domopa-reader__bar > i{
  display:block;
  height:100%;
  width:0;
  background:linear-gradient(90deg, var(--dr-teal) 0%, var(--dr-gold) 100%);
  transition:width .08s linear;
  will-change:width;
}

/* ============ 左侧吸顶栏 ============ */
.domopa-reader__aside{
  position:sticky;
  top:calc(var(--dr-header-h) + 24px);
  max-height:calc(100vh - var(--dr-header-h) - 48px);
  overflow-y:auto;
  overscroll-behavior:contain;
  padding-right:4px;
  font-size:14px;
  line-height:1.6;
  /* 细滚动条，避免吸顶栏出现粗滚动条 */
  scrollbar-width:thin;
  scrollbar-color:var(--dr-line) transparent;
}
.domopa-reader__aside::-webkit-scrollbar{width:6px}
.domopa-reader__aside::-webkit-scrollbar-thumb{background:var(--dr-line);border-radius:3px}

/* --- 章节目录 --- */
.domopa-toc{
  border:1px solid var(--dr-line);
  background:#fbfdfc;
  padding:18px 16px 14px;
  border-radius:2px;
}
.domopa-toc__title{
  display:flex;
  align-items:center;
  gap:8px;
  margin:0 0 12px;
  font-size:12px;
  font-weight:700;
  letter-spacing:.14em;
  text-transform:uppercase;
  color:var(--dr-teal);
}
.domopa-toc__title::before{
  content:"";
  display:block;
  width:3px;
  height:13px;
  background:var(--dr-gold);
}
.domopa-toc ol{
  list-style:none;
  margin:0;
  padding:0;
  counter-reset:toc;
}
.domopa-toc li{
  counter-increment:toc;
  margin:0;
}
/* 提权到 body.single-post 级：Astra 的 .entry-content a 带下划线，
   单靠 .domopa-toc a 会输掉优先级。 */
body.single-post .domopa-toc a,
.domopa-toc a{
  position:relative;
  display:block;
  padding:7px 8px 7px 30px;
  color:var(--dr-muted);
  text-decoration:none !important;
  box-shadow:none !important;
  border-bottom:0;
  font-size:13.5px;
  line-height:1.5;
  border-left:2px solid transparent;
  transition:color .15s ease, background .15s ease, border-color .15s ease;
}
body.single-post .domopa-toc a:hover,
.domopa-toc a:hover{ text-decoration:none !important; }
.domopa-toc a::before{
  content:counter(toc, decimal-leading-zero);
  position:absolute;
  left:8px;
  top:7px;
  font-size:11px;
  font-weight:700;
  color:#a8bfc0;
  font-variant-numeric:tabular-nums;
}
.domopa-toc a:hover{
  color:var(--dr-blue);
  background:var(--dr-mist);
}
.domopa-toc a.is-active{
  color:var(--dr-blue);
  font-weight:700;
  background:var(--dr-mist);
  border-left-color:var(--dr-gold);
}
.domopa-toc a.is-active::before{color:var(--dr-gold)}

/* --- 侧栏卡片（咨询引导） --- */
.domopa-aside-card{
  margin-top:18px;
  padding:18px 16px;
  border:1px solid var(--dr-line);
  background:linear-gradient(160deg, #f6faf9 0%, #eef5f3 100%);
  border-radius:2px;
}
.domopa-aside-card__kicker{
  font-size:11px;
  font-weight:700;
  letter-spacing:.12em;
  color:var(--dr-teal);
  text-transform:uppercase;
}
.domopa-aside-card__title{
  margin:8px 0 8px;
  font-size:15px;
  font-weight:700;
  line-height:1.5;
  color:var(--dr-ink);
}
.domopa-aside-card__text{
  margin:0 0 14px;
  font-size:13px;
  line-height:1.75;
  color:var(--dr-muted);
}
.domopa-aside-card__btn{
  display:block;
  text-align:center;
  padding:10px 12px;
  background:var(--dr-gold);
  color:#133442 !important;
  font-size:13px;
  font-weight:700;
  text-decoration:none;
  border-radius:2px;
  transition:background .18s ease;
}
.domopa-aside-card__btn:hover{background:#e2ba74}

/* --- 侧栏工具（回到顶部） --- */
.domopa-aside-tools{
  margin-top:14px;
}
.domopa-topbtn{
  display:flex;
  align-items:center;
  justify-content:center;
  gap:6px;
  width:100%;
  padding:9px 12px;
  border:1px solid var(--dr-line);
  background:#fff;
  color:var(--dr-muted);
  font-size:12.5px;
  font-family:inherit;
  cursor:pointer;
  border-radius:2px;
  transition:color .15s ease, border-color .15s ease, background .15s ease;
}
.domopa-topbtn:hover{
  color:var(--dr-blue);
  border-color:#b9d2cf;
  background:var(--dr-mist);
}

/* ============ 右侧正文 ============ */
.domopa-reader__main{
  min-width:0;               /* 允许收缩，防止长串撑破网格 */
}

/* 正文排版优化：在主题/Astra 之上做阅读性增强 */
.domopa-reader__main .entry-content{
  font-size:16.5px;
  line-height:1.9;
  color:#33474d;
}
.domopa-reader__main .entry-content > p{
  margin:0 0 1.35em;
}
/* 首段稍大，作为导语 */
.domopa-reader__main .entry-content > p:first-of-type{
  font-size:17.5px;
  line-height:1.85;
  color:#2b3f45;
}

/* H2 章节标题：左侧金色引导条 + 可点击锚点 */
.domopa-reader__main .entry-content h2{
  position:relative;
  margin:2.1em 0 .9em;
  padding-left:14px;
  font-size:22px;
  line-height:1.45;
  font-weight:700;
  color:var(--dr-ink);
  scroll-margin-top:calc(var(--dr-header-h) + 24px);
}
.domopa-reader__main .entry-content h2::before{
  content:"";
  position:absolute;
  left:0;
  top:.22em;
  bottom:.22em;
  width:3px;
  background:var(--dr-gold);
  border-radius:2px;
}
.domopa-reader__main .entry-content h2:first-child{margin-top:.4em}

/* H3 次级标题 */
.domopa-reader__main .entry-content h3{
  margin:1.7em 0 .7em;
  font-size:18px;
  line-height:1.5;
  font-weight:700;
  color:var(--dr-blue);
  scroll-margin-top:calc(var(--dr-header-h) + 24px);
}

/* 正文内的列表、引用、表格、链接 */
.domopa-reader__main .entry-content ul,
.domopa-reader__main .entry-content ol{
  margin:0 0 1.35em;
  padding-left:1.35em;
}
.domopa-reader__main .entry-content li{margin:.35em 0}
.domopa-reader__main .entry-content blockquote{
  margin:1.5em 0;
  padding:14px 18px;
  border-left:3px solid var(--dr-teal);
  background:var(--dr-mist);
  color:#3b555b;
  font-size:16px;
}
.domopa-reader__main .entry-content blockquote > :last-child{margin-bottom:0}
.domopa-reader__main .entry-content a{
  color:var(--dr-blue);
  text-decoration:underline;
  text-underline-offset:2px;
}
.domopa-reader__main .entry-content table{
  width:100%;
  border-collapse:collapse;
  margin:1.4em 0;
  font-size:14.5px;
}
.domopa-reader__main .entry-content th,
.domopa-reader__main .entry-content td{
  border:1px solid var(--dr-line);
  padding:9px 12px;
  text-align:left;
}
.domopa-reader__main .entry-content th{
  background:var(--dr-mist);
  font-weight:700;
  color:var(--dr-ink);
}
.domopa-reader__main .entry-content img{
  max-width:100%;
  height:auto;
  display:block;
  margin:1.4em auto;
}

/* ============ 标题区增强（阅读时长 / 分类） ============ */

/* 标题区对齐右栏：.entry-header 由 Astra 输出，横跨整宽，
   而正文在右侧 824px 栏内。给它加左侧内边距，让标题与正文左边界对齐。
   padding-left = 侧栏宽 + 栏间距（--dr-aside-w + --dr-gap）。 */
body.single-post .entry-header{
  padding-left:calc(var(--dr-aside-w, 240px) + var(--dr-gap, 56px));
  box-sizing:border-box;
}
body.single-post .entry-header .entry-title{
  max-width:100%;
}
/* 收紧标题区与下方 chip 的间距：Astra 原本给 .entry-meta 留了较大下边距 */
body.single-post .entry-header .entry-meta{
  margin-bottom:0;
}
body.single-post .entry-header{
  margin-bottom:0;
}

.domopa-meta-extra{
  display:flex;
  flex-wrap:wrap;
  align-items:center;
  gap:10px;
  margin-top:14px;
}
.domopa-chip{
  display:inline-flex;
  align-items:center;
  gap:6px;
  padding:4px 11px;
  font-size:12.5px;
  line-height:1.6;
  border:1px solid var(--dr-line);
  background:#fff;
  color:var(--dr-muted);
  border-radius:999px;
  white-space:nowrap;
}
.domopa-chip--cat{
  border-color:#c9dedb;
  background:var(--dr-mist);
  color:var(--dr-blue);
  font-weight:700;
  text-decoration:none;
}
.domopa-chip--cat:hover{background:#e6f1ef}
.domopa-chip__dot{
  width:5px;
  height:5px;
  border-radius:50%;
  background:var(--dr-gold);
  flex:0 0 auto;
}

/* ============ 断点 ============ */

/* 中等屏：侧栏收窄 */
@media (max-width:1240px){
  body.single-post{
    --dr-aside-w:210px;
    --dr-gap:36px;
  }
  .domopa-reader{
    padding-left:20px;
    padding-right:20px;
  }
}

/* 窄屏：放弃双栏，侧栏折叠为顶部可展开目录 */
@media (max-width:1000px){
  /* ── 窄屏单栏排序 ─────────────────────────────────────────────
     真实 DOM（重要，别想当然）：
       div.entry-content.clear          ← 只包一个子项
         └ div.domopa-reader            ← the_content 注入
             ├ div.domopa-reader__bar
             ├ div.domopa-reader__aside
             │   ├ nav.domopa-toc
             │   ├ div.domopa-aside-card
             │   └ div.domopa-aside-tools
             └ div.domopa-reader__main
                 ├ div.domopa-meta-extra (chip + 阅读时长)
                 └ h2 / p …（正文）

     期望视觉顺序：标题区 → chip+时长 → 目录 → 正文 → 咨询卡

     做法：以 .entry-content 为唯一的 flex 列容器，把中间三层
     （.domopa-reader / __aside / __main）用 display:contents 拆掉，
     让 toc、aside-card、meta-extra、正文元素都成为 .entry-content 的
     直接 flex 项，再用 order 排序。
     ⚠ 不要拆 .entry-content 和它外面的 .ast-container/.site-content，
       否则 flex 项会跑到非 flex 祖先里，order 完全失效。 */

  body.single-post div.entry-content:not(.domopa-reader__main){
    display:flex !important;
    flex-direction:column;
    max-width:760px;
    margin-left:auto;
    margin-right:auto;
    padding-left:20px;
    padding-right:20px;
    box-sizing:border-box;
  }
  /* 标题区在 .entry-content 之外，单栏下不再让出侧栏宽度 */
  body.single-post .entry-header{
    max-width:760px;
    margin-left:auto;
    margin-right:auto;
    padding-left:20px;
    padding-right:20px;
    box-sizing:border-box;
  }

  /* ⚠ 陷阱：PHP 给 __main 加了 entry-content 类（为了让正文 CSS 选择器命中），
     所以 `body.single-post .entry-content{display:flex}` 会连 __main 一起命中，
     把 __main 变成 flex 容器（order:0），toc / 咨询卡就被挤到它后面去了。
     这里用更高特异性把 __main 锁回 contents。 */
  .domopa-reader,
  .domopa-reader__aside,
  body.single-post .domopa-reader .domopa-reader__main{ display:contents !important; }

  /* ⚠ 关键：aside 上还留着 sticky。Chrome 在 display:contents + position:sticky
     的组合下仍会把它当盒子参与布局，导致 contents 拆盒失效、order 全部作废。
     必须显式重置 position/overflow 等会影响盒子的属性。 */
  .domopa-reader__aside{
    position:static !important;
    top:auto !important;
    max-height:none !important;
    overflow:visible !important;
    border:0 !important;
    background:none !important;
    padding:0 !important;
    margin:0 !important;
  }

  /* order 1：正文元素（含 h2 / p / ul …）默认放最后，先压到 1 之外的基准 */
  .domopa-reader .domopa-reader__main > *{ order:4; }

  /* order 2：分类 chip + 阅读时长 */
  .domopa-reader .domopa-meta-extra{ order:2; margin:16px 0 6px; width:100%; }
  /* order 3：章节目录（折叠条，读者一进正文就看得到） */
  .domopa-reader .domopa-toc{ order:3; margin:0 0 20px; width:100%; }
  /* order 5：技术支持咨询卡（正文之后） */
  .domopa-reader .domopa-aside-card{ order:5; margin:30px 0 0; width:100%; }
  /* 回顶按钮窄屏隐藏（下文有 display:none） */
  .domopa-reader .domopa-aside-tools{ order:9; }

  /* 进度条是 fixed，被 contents 拆掉后仍正常 */
  .domopa-reader__bar{ order:-1; }
  .domopa-aside-tools{display:none}

  /* 折叠：默认收起目录列表，点标题展开 */
  .domopa-toc{padding:0;background:#fbfdfc}
  .domopa-toc__title{
    margin:0;
    padding:14px 16px;
    cursor:pointer;
    user-select:none;
    justify-content:space-between;
  }
  .domopa-toc__title::before{
    height:13px;
    margin-right:2px;
  }
  .domopa-toc__title::after{
    content:"";
    width:9px;
    height:9px;
    border-right:1.5px solid var(--dr-teal);
    border-bottom:1.5px solid var(--dr-teal);
    transform:rotate(45deg);
    transition:transform .2s ease;
    flex:0 0 auto;
    margin-left:auto;
  }
  .domopa-toc[data-open="1"] .domopa-toc__title::after{
    transform:rotate(-135deg);
  }
  .domopa-toc ol{
    display:none;
    padding:0 0 12px;
  }
  .domopa-toc[data-open="1"] ol{display:block}
}

/* 手机：正文再放大一档行距，标题缩一档 */
@media (max-width:600px){
  /* 窄屏下外层 .entry-content 才是真正承重的容器（.domopa-reader 已 display:contents）
     注意排除 .domopa-reader__main —— 它也带 entry-content 类。 */
  body.single-post div.entry-content:not(.domopa-reader__main){
    padding-left:16px;
    padding-right:16px;
  }
  .domopa-reader__main .entry-content{
    font-size:16px;
    line-height:1.85;
  }
  .domopa-reader__main .entry-content > p:first-of-type{
    font-size:16.5px;
  }
  .domopa-reader__main .entry-content h2{
    font-size:19px;
    margin:1.8em 0 .8em;
    padding-left:11px;
  }
  .domopa-reader__main .entry-content h3{font-size:16.5px}
  .domopa-chip{font-size:12px;padding:3px 9px}
}

/* 打印：只留正文 */
@media print{
  .domopa-reader{display:block;max-width:none;padding:0}
  .domopa-reader__bar,
  .domopa-reader__aside,
  .domopa-meta-extra{display:none !important}
  .domopa-reader__main .entry-content{font-size:12pt;line-height:1.7;color:#000}
  .domopa-reader__main .entry-content h2{padding-left:0}
  .domopa-reader__main .entry-content h2::before{display:none}
}

/* 关闭动画偏好：去掉过渡 */
@media (prefers-reduced-motion:reduce){
  .domopa-reader__bar > i,
  .domopa-toc a,
  .domopa-aside-card__btn,
  .domopa-topbtn{transition:none}
  .domopa-toc__title::after{transition:none}
}
