/* reader.css — 合并页（全书领读）共享样式表
 *
 * 一处修改、339 本书全部生效；改这里不需要重生成任何页面。
 * 依赖：本文件必须在 reading-overview.css / mmx-guide.css / reading-outline.css 之后加载。
 * 配套交互逻辑见 assets/js/reader.js（主题 / 字号 / 段距 / 导航高亮 / 模块装配）。
 */
/* ── 主题变量：默认＝夜间主题 + 段距松 + 整页字号 .94；其余主题由 html[data-theme] 覆盖 ── */
:root{
  --fs:.94;--pm:1.5;
  --rd-line:rgba(198,208,218,.34);
  --pg-bg:#15171a;--card-bg:#1f2226;--card-bd:#34383f;--ink:#c9ced4;--txt:#b4bac1;
  --sub:#8a919a;--head:#93c8a8;--qgreen:#9ed0af;--gold:#bf8247;
  --nav-bg:rgba(21,23,26,.96);--navlink-bg:#262a2f;--navlink-bd:#3a3f46;
  --inner-bg:#272b30;--inner-bd:#3a3f46;--oneline-bg:#272b30;
  --act-bg:#244b40;--act-bd:#2f5b49;--act-fg:#dff0e4;
  /* 共享 CSS 的变量一并接管：卡片/正文/链接/分隔线都跟主题走 */
  --paper:#15171a;--card:#1f2226;--muted:#8a919a;--green:#93c8a8;--green2:#a8d8bb;
  --line:#3a3f46;--sage:#274234;--accent:#9ed0af;--e5e0d6:#34383f;
}
html[data-theme=cream]{
  --pg-bg:#f7f8f3;--card-bg:#fffdf6;--card-bd:#e8e4d5;--ink:#3b453e;--txt:#4a4436;
  --sub:#8d8878;--head:#244b40;--qgreen:#2f5b49;
  --nav-bg:rgba(247,248,243,.96);--navlink-bg:#fdfbf3;--navlink-bd:#e8e2d2;
  --inner-bg:#fbfaf2;--inner-bd:#eee9d8;--oneline-bg:#fbfaf4;
  --act-bg:#e5efe4;--act-bd:#bcd4bc;--act-fg:#1b4235;
  --paper:#f6f7f2;--card:#fffdf6;--muted:#697870;--green:#244b40;--green2:#315e50;
  --line:#dfe6df;--sage:#dce8df;--accent:#286b52;--e5e0d6:#e5e0d6;--rd-line:rgba(110,95,60,.34);}
html[data-theme=light]{
  --pg-bg:#ffffff;--card-bg:#ffffff;--card-bd:#e7e7e2;--ink:#33373a;--txt:#4a4436;
  --sub:#8d8878;--head:#244b40;--qgreen:#2f5b49;
  --nav-bg:rgba(255,255,255,.96);--navlink-bg:#fafaf7;--navlink-bd:#e7e7e0;
  --inner-bg:#fafaf7;--inner-bd:#ecebe4;--oneline-bg:#fafaf7;
  --act-bg:#e6efe7;--act-bd:#c3dcc9;--act-fg:#1e4d37;
  --paper:#fff;--card:#fff;--muted:#697870;--green:#244b40;--green2:#315e50;
  --line:#e7e7e2;--sage:#e6efe7;--accent:#286b52;--rd-line:rgba(80,72,58,.34);}
html[data-theme=green]{
  --pg-bg:#cfe8d2;--card-bg:#eef7ef;--card-bd:#b9dcc0;--ink:#2f4237;--txt:#3b5446;
  --sub:#5d7c67;--head:#1e4d37;--qgreen:#1e5c41;
  --nav-bg:rgba(207,232,210,.96);--navlink-bg:#f4fbf5;--navlink-bd:#b4d8bd;
  --inner-bg:#f6fbf7;--inner-bd:#cde5d3;--oneline-bg:#f6fbf7;
  --act-bg:#bfe3c6;--act-bd:#95c8a1;--act-fg:#17422f;
  --paper:#cfe8d2;--card:#eef7ef;--muted:#5d7c67;--green:#1e4d37;--green2:#2c6b4e;
  --line:#b9dcc0;--sage:#b7dfc0;--accent:#1e5c41;--rd-line:rgba(35,80,50,.34);}
html[data-theme=dark]{
  --pg-bg:#15171a;--card-bg:#1f2226;--card-bd:#34383f;--ink:#c9ced4;--txt:#b4bac1;
  --sub:#8a919a;--head:#93c8a8;--qgreen:#9ed0af;
  --nav-bg:rgba(21,23,26,.96);--navlink-bg:#262a2f;--navlink-bd:#3a3f46;
  --inner-bg:#272b30;--inner-bd:#3a3f46;--oneline-bg:#272b30;
  --act-bg:#244b40;--act-bd:#2f5b49;--act-fg:#dff0e4;
  --paper:#15171a;--card:#1f2226;--muted:#8a919a;--green:#93c8a8;--green2:#a8d8bb;
  --line:#3a3f46;--sage:#274234;--accent:#9ed0af;--e5e0d6:#34383f;}

/* ── 外壳与全局阅读节奏（字号跟随 --fs 整页缩放，段距跟随 --pm） ── */
html{font-size:calc(16px*var(--fs));}
html[data-theme=dark] body{color-scheme:dark;}
body{max-width:880px;margin:0 auto;padding:0 18px 80px;font-size:.9375rem;line-height:1.88;
  color:var(--ink);background:var(--pg-bg);-webkit-font-smoothing:antialiased;}
.combined-head{padding:30px 0 16px;border-bottom:1px solid var(--card-bd);margin-bottom:4px;}
/* 顶部大封面模块（参考微信读书书籍介绍页）：
   封面自身模糊放大铺底做氛围光 + 主题绿径向光晕，两层叠加 */
/* 第 18 批：贴顶全出血（负 margin 抵消 body padding），主题色打底 + 封面模糊铺底 */
#rdHero{position:relative;overflow:hidden;margin:0 -18px 10px;padding:58px 16px 30px;
  text-align:center;border:none;border-bottom:1px solid var(--card-bd);
  background:linear-gradient(180deg,var(--green2,#315e50),var(--green,#244b40));}
.rd-hero-bg{position:absolute;left:-18%;top:-18%;width:136%;height:136%;z-index:0;
  object-fit:cover;filter:blur(52px) saturate(1.25);opacity:.55;pointer-events:none;}
#rdHero::after{content:"";position:absolute;inset:0;z-index:1;pointer-events:none;
  background:radial-gradient(115% 90% at 50% 0%,rgba(49,94,80,0),rgba(20,34,29,.18) 60%,rgba(20,34,29,.5) 100%);}
.rd-hero-img{position:relative;z-index:2;width:min(56vw,240px);aspect-ratio:30/43;object-fit:cover;
  border-radius:10px;
  box-shadow:0 14px 42px rgba(0,0,0,.45),0 2px 8px rgba(0,0,0,.25),0 0 0 1px rgba(255,255,255,.16);
  display:block;margin:0 auto;}
@media(prefers-reduced-motion:no-preference){
  .rd-hero-img{animation:rdHeroIn .5s cubic-bezier(.2,.7,.3,1) both;}
  @keyframes rdHeroIn{from{opacity:0;transform:translateY(10px) scale(.97)}to{opacity:1;transform:none}}
}
/* 回首页入口：header 顶部的小胶囊 */
/* 第 19 批：回首页改为右上角浮动小圆 icon（与 Aa 设置钮并排），不占正文一行 */
/* 第 20 批 b~g：满宽平铺变体（FULL_HERO 白名单，先上《十年轮回》看效果）——
   网易云音乐式：封面图铺满 hero 做背景墙（回到文档流 absolute，背景只比
   封面区高一点；视差 0.45 倍速 JS 跟随 → 正文圆角卡片上滑"盖住"背景墙），
   封面本体加大居中，书名/作者/chips(右对齐)/导航叠下方 */
/* sticky 钉墙：上半（封面大部）先随滚动离场，随后整块钉在视口顶，
   正文圆角卡片继续上滑逐段盖住 书名/作者/chips/导航 —— 「盖住部分头图」 */
/* 整面海报墙 sticky top:0：进页面立即钉死（封面/书名/chips/nav/背景全不动），
   正文圆角卡片从下滑上来逐段盖住；钉墙不依赖 fixed/svh，手机内核全兼容 */
/* ── 海报墙（第 20 批 n 定稿）────────────────────────────────
   只钉「模糊背景 + 封面本体」，上下各留一段紧贴的背景；
   标题 / 作者 / 章节导航移到墙下方的 .rd-stick 吸顶条 → 自然吸顶。
   墙靠 sticky top:0 钉住（不用 fixed/svh，手机内核全兼容） */
/* 墙高至少半屏（54vh）：封面在墙内垂直居中，顶部 44px 的浮动操作区
   （目录 / 分享 / Aa，top:10 + 34）就落在墙面上，不再压住封面书脊。
   padding-top 也给到 58px，保证封面顶端永远低于按钮底边 */
#rdHero.rd-hero-full{position:sticky;top:0;
  width:100vw;margin-left:calc(50% - 50vw);padding:58px 0 30px;
  box-sizing:border-box;min-height:54vh;
  display:flex;align-items:center;justify-content:center;
  border-bottom:none;background:#20302a;}
.rd-hero-full .rd-hero-bg{position:absolute;inset:0;width:100%;height:100%;
  object-fit:cover;opacity:1;filter:blur(12px) saturate(1.08) brightness(.88);z-index:0;}
.rd-hero-full .rd-hero-cover{position:relative;z-index:2;width:min(62vw,300px);aspect-ratio:30/43;
  object-fit:cover;border-radius:12px;display:block;
  box-shadow:0 16px 44px rgba(0,0,0,.45),0 2px 8px rgba(0,0,0,.28),0 0 0 1px rgba(255,255,255,.16);}
.rd-hero-full::after{content:"";position:absolute;inset:0;z-index:1;pointer-events:none;
  background:linear-gradient(180deg,rgba(18,30,26,.28) 0%,rgba(18,30,26,.06) 42%,rgba(18,30,26,.42) 100%);}

/* 标题 + 作者 + 章节导航：墙下方吸顶条（滚过墙后钉在视口顶）
   第 20 批 o：标题行加高；作者移到标题同一行末尾（右侧）；标题整体可点，
   唤起微信读书对应书的详情页 */
.rd-stick{position:sticky;top:0;z-index:8;background:var(--pg-bg);
  padding:16px 0 12px;margin:0 0 12px;border-bottom:1px solid var(--card-bd);
  transition:padding .18s ease;}
.rd-stick-row{display:flex;align-items:baseline;gap:12px;margin:0 0 20px;
  /* 标题行加高：标题 / 作者与下方导航之间留出呼吸空间 */
  min-height:34px;}
  /* 右上角「分享 / Aa」是 fixed 的，只有吸顶贴在视口顶时才会压到作者名，
     所以右内边距只放在 .rd-scrolled 态；常态下作者应直接顶到内容列右边缘 */
.rd-stick h1{margin:0;flex:0 1 auto;min-width:0;font:700 1.18rem/1.85 var(--serif);color:var(--head);
  white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}
.rd-stick .rd-hero-author{flex:none;margin:0 0 0 auto;max-width:36%;font-size:.78rem;line-height:1.6;
  color:var(--muted);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;text-align:right;}
/* 标题即入口：点击跳微信读书 App（未安装回落网页搜索） */
.rd-title{display:flex;align-items:baseline;gap:6px;flex:0 1 auto;min-width:0;
  color:inherit;text-decoration:none;cursor:default;}
/* 只有拿到 bookId 的书（.rd-title-on）才是可点入口 */
.rd-title-on{cursor:pointer;transition:color .15s ease;}
.rd-title-on::after{content:"↗";flex:none;font:400 .82em/1 var(--sans);color:var(--muted);opacity:.65;}
.rd-title-on:hover,.rd-title-on:focus-visible{color:var(--head);}
.rd-title-on:hover::after{opacity:1;}
.rd-title-on:focus-visible{outline:2px solid var(--head);outline-offset:3px;border-radius:4px;}
.rd-stick .nav{position:relative;top:auto;margin:0;background:transparent;border:none;
  box-shadow:none;backdrop-filter:none;padding:8px 0 0;}
.rd-stick .navlink{font-size:11.5px;padding:5px 4px;}
/* 吸顶后纵向空间紧，间距收一半，但不再贴合标题 */
body.rd-scrolled .rd-stick-row{margin-bottom:12px;}
body.rd-scrolled .rd-stick .nav{padding-top:4px;}

/* 正文圆角卡片：上滑盖住墙面（背景必须给 --pg-bg 兜底：旧写法 var(--bg) 未定义=透明，
   全宽后会让两侧露出底下的背景墙） */
.rd-hero-full ~ #rdBody{position:relative;z-index:2;background:var(--pg-bg,#15171a);
  border-radius:20px 20px 0 0;box-shadow:0 -10px 28px rgba(0,0,0,.18);}
.rd-home{position:fixed;top:10px;left:12px;z-index:60;display:flex;align-items:center;justify-content:center;
  width:34px;height:34px;font-size:16px;line-height:1;color:var(--txt);text-decoration:none;
  background:var(--card-bg);border:1px solid var(--card-bd);border-radius:9px;padding:0;
  box-shadow:0 2px 8px rgba(0,0,0,.1);transition:color .15s ease,border-color .15s ease;}
.rd-home:hover{color:var(--head,#315e50);border-color:var(--head,#315e50);}
.rd-home span{font-size:1em;}
.combined-head h1{font:700 1.45rem/1.35 var(--serif);margin:0 0 8px;color:var(--head);}
.combined-head .eyebrow{font-size:.72rem;letter-spacing:.14em;margin:0 0 6px;}
.chips{margin:8px 0 0;}
.chip{font-size:.72rem;padding:2px 10px;}

/* ── 锚点导航：小屏最少一排 4 个，大屏自动一排/两排放完；滚动到哪亮哪 ── */
.nav{position:sticky;top:0;z-index:20;background:var(--nav-bg);backdrop-filter:blur(6px);
  border-bottom:1px solid var(--card-bd);padding:10px 0;margin:12px 0 20px;display:grid;
  grid-template-columns:repeat(auto-fit,minmax(76px,1fr));gap:6px;
  box-shadow:0 2px 10px rgba(120,100,60,.05);}
.navlink{font-size:12px;color:var(--txt);text-decoration:none;background:var(--navlink-bg);
  border:1px solid var(--navlink-bd);border-radius:8px;padding:6px 4px;text-align:center;
  white-space:nowrap;overflow:hidden;text-overflow:ellipsis;transition:all .15s;}
.navlink:hover{color:var(--head);border-color:var(--head);}
.navlink.active{color:var(--act-fg,var(--head));background:var(--act-bg);border-color:var(--act-bd);font-weight:700;}
/* 窄屏折叠用的省略号，默认不出现（只有 fitNav 在小屏打开） */
.nav-more{display:none;}
section{scroll-margin-top:62px;}

/* ── 统一卡片：所有顶层模块（AI领读 / AI 问答 / 其余）一视同仁 ── */
#rdBody>section.mmx-mod,#rdBody>section.card,#rdBody>section.mmx-svgwrap{
  background:var(--card-bg);border:1px solid var(--card-bd);border-radius:16px;
  padding:18px 22px;margin:calc(18px*var(--pm)) 0;
  box-shadow:0 1px 3px rgba(110,95,60,.05);}
#rdBody>section.mmx-mod>*:first-child,#rdBody>section.card>*:first-child,
#rdBody>section.mmx-svgwrap>*:first-child{margin-top:0}
#rdBody>section.mmx-mod>*:last-child,#rdBody>section.card>*:last-child,
#rdBody>section.mmx-svgwrap>*:last-child{margin-bottom:0}
/* 结构导图：图本身留白居中，不与正文抢宽 */
#rdBody>section.mmx-svgwrap>svg.mmx-svg{display:block;width:100%;height:auto;margin:2px auto 0;}

/* ── 一级模块朗读键：移动端整块不好点，右上角给一个显式播放按钮 ──
   仅作用于 #rdBody 的直接子 section（核心主旨 / AI领读 等一级模块） */
#rdBody>section{position:relative;}
.rd-mod-play{position:absolute;top:12px;right:12px;z-index:6;
  width:34px;height:34px;box-sizing:border-box;padding:0;border-radius:50%;
  display:flex;align-items:center;justify-content:center;font-size:13px;line-height:1;
  color:var(--head);background:var(--card-bg);border:1px solid var(--card-bd);
  box-shadow:0 2px 8px rgba(0,0,0,.12);cursor:pointer;-webkit-tap-highlight-color:transparent;
  touch-action:manipulation;
  transition:transform .12s ease,background .15s ease,color .15s ease,border-color .15s ease;}
.rd-mod-play:hover{border-color:var(--head);}
.rd-mod-play:active{transform:scale(.90);}
.rd-mod-play.on{background:var(--head);color:#fff;border-color:var(--head);}
.rd-mod-play .rd-mp-ico{pointer-events:none;display:block;}
/* 窄屏给首行标题右侧留出按钮宽度，长标题不压到按钮 */
@media(max-width:720px){
  #rdBody>section>h2:first-child,
  #rdBody>section>h3:first-child{padding-right:44px;}
}
/* 模块标题：统一大小、弱强调，不与正文抢注意力 */
#rdBody>section.mmx-mod>h2,#rdBody>section.card>h2{
  font:700 1rem/1.5 var(--serif);color:var(--head);margin:0 0 11px;
  padding-left:10px;border-left:3px solid var(--gold);letter-spacing:.01em;}
/* 正文：字号收小、行距放宽、段间距随 --pm 调节 */
#rdBody>section.mmx-mod p,#rdBody>section.card p,
#rdBody>section.mmx-mod li,#rdBody>section.card li{
  font-size:.84rem;line-height:1.92;color:var(--txt);margin:calc(.5em*var(--pm)) 0;}
#rdBody>section.mmx-mod>ul,#rdBody>section.mmx-mod>ol,#rdBody>section.mmx-mod>div,
#rdBody>section.mmx-mod>p:not(.mmx-mod-note),
#rdBody>section.card:not(.merged-guide)>ul,#rdBody>section.card:not(.merged-guide)>ol,
#rdBody>section.card:not(.merged-guide)>div,#rdBody>section.card:not(.merged-guide)>p:not(.mmx-mod-note){
  padding-left:14px;}

/* ── 内部块统一：卡片里不再套深卡片，一律浅底子块 ── */
#rdBody>section .mmx-pending,#rdBody>section .mmx-evib,#rdBody>section .aiqa-item{
  background:var(--inner-bg);border:1px solid var(--inner-bd);border-radius:12px;
  padding:13px 16px;margin:calc(.65em*var(--pm)) 0;}
#rdBody>section .mmx-evib ul{padding-left:1.15em;}
/* 一句话主旨：浅底卡片 + 左侧主题色细条，作为全页的「结论句」 */
.mmx-oneline{font-size:.9rem;line-height:1.85;color:var(--txt);margin:.2em 0 0;
  padding:12px 16px;background:var(--oneline-bg);border-left:3px solid var(--head);
  border-radius:0 12px 12px 0;}

/* ── 模块内条目：每段 = 一条子节点（左竖线 + 序号圆点）─────────────
   「更高维度 / 往日今时 / 核心追问 / 核心观点 / 阅读验证 / 原文金句」
   这些模块里的一级条目此前各写各的：直接 <p> 有序号，核心追问的 .mmx-qa
   和核心观点的 ul.mmx-views 只有留白或小圆点，同一屏里有的带数字有的不带，
   看着像两套版式。这里把它们全部收进同一套「子节点」：细竖线贯穿 +
   数字圆点，与章节导读同层。核心追问与 AI 问书里的问答条目结构相同
   （都是 .mmx-qa），一并纳入，两处不再一有一无。 */
#rdBody>section.mmx-mod{counter-reset:rd-item;}
/* 列表容器本身不参与计数，也不留额外缩进，条目自己撑开 */
#rdBody>section.mmx-mod>ul.mmx-views,
#rdBody>section.mmx-mod>ol.mmx-qlist{
  margin:.4em 0 0;padding-left:0;list-style:none;}
/* 段间不留 margin：靠 padding 撑开，左侧竖线才能首尾相接成一条连续的
   「时间轴」，而不是每段一根断头的短杠 */
#rdBody>section.mmx-mod>p:not(.mmx-mod-note):not(.mmx-oneline),
#rdBody>section.mmx-mod>.mmx-qa,
#rdBody>section.mmx-mod>ul.mmx-views>li,
#rdBody>section.mmx-mod>ol.mmx-qlist>li{
  position:relative;margin:0;
  padding:calc(.55em*var(--pm)) 0 calc(.55em*var(--pm)) 30px;
  border-left:2px solid var(--rd-line);border-top:0 !important;}
#rdBody>section.mmx-mod>p:not(.mmx-mod-note):not(.mmx-oneline)::before,
#rdBody>section.mmx-mod>.mmx-qa::before,
#rdBody>section.mmx-mod>ul.mmx-views>li::before,
#rdBody>section.mmx-mod>ol.mmx-qlist>li::before{
  counter-increment:rd-item;content:counter(rd-item) !important;
  display:block !important;
  /* top 用 px 而不是 em：伪元素一旦设了 font-size，em 就按它自己的字号算，
     序号会整体上浮一行。这里按条目字号（.84rem）+ 段距系数换算出固定值。 */
  position:absolute;left:-8px;top:calc(10px * var(--pm));
  width:18px;height:18px;border-radius:50%;box-sizing:border-box;
  background:var(--card-bg);border:1px solid var(--rd-line);
  color:var(--gold);font-weight:600;font-size:.56rem;line-height:16px;
  font-family:var(--sans);font-style:normal;
  text-align:center;letter-spacing:-.02em;}
/* 朗读到的那一条：序号圆点转绿，与「读到哪高亮哪」保持一致
   （核心追问点的是里层 .mmx-q/.mmx-a，由 JS 同步给外层 .mmx-qa） */
#rdBody>section.mmx-mod>p.speaking::before,
#rdBody>section.mmx-mod>.mmx-qa.speaking::before,
#rdBody>section.mmx-mod>ul.mmx-views>li.speaking::before,
#rdBody>section.mmx-mod>ol.mmx-qlist>li.speaking::before{
  background:#07c160 !important;border-color:#07c160 !important;color:#fff !important;}
/* 模型在长文里自带的【书中主张】【外部证据】标签：提成小徽章，
   一眼看出这是「主张 / 证据 / 综合」的哪一段，而不是混在正文里 */
#rdBody .rd-tag{display:inline-block;margin-right:.35em;padding:0 .3em;
  font:600 .76em/1.45 var(--sans);color:var(--head);font-style:normal;
  background:var(--inner-bg);border:1px solid var(--inner-bd);border-radius:4px;
  vertical-align:.06em;white-space:nowrap;}
/* 原文金句 */
.mmx-qlist li{padding:.6em 0 .6em 2.2em;}
.mmx-qlist blockquote{font-size:.82rem;line-height:1.9;color:var(--txt);}
.mmx-qlist cite{font-size:.72rem;color:var(--sub);}
/* 核心追问：问答条目走统一序号，这里只管问句 / 答句的层级。
   内层 p 的 margin 必须用 #rdBody 提权，否则会被上面「模块正文段落」的
   段距规则（#rdBody>section.mmx-mod p）加回 margin-top，问句整体下沉，
   左侧序号就对不上首行了。 */
/* 兜底：被 .mmx-ask 等容器包住的问答（非 section 直接子级）保留浅色边线 */
.mmx-qa{margin:calc(.7em*var(--pm)) 0;padding-left:12px;border-left:3px solid var(--inner-bd);}
#rdBody .mmx-qa .mmx-q{font-size:.86rem;font-weight:700;color:var(--ink);line-height:1.78;margin:0 0 .45em;}
#rdBody .mmx-qa .mmx-a{font-size:.82rem;line-height:1.95;color:var(--txt);margin:0;}

/* ── AI 问书专项：外层容器透明，问答条目才是阅读单元 ── */
#mod-aiask .mmx-ask{background:transparent;border:0;border-radius:0;padding:0;margin:0;}
#mod-aiask .aiqa-item{margin:calc(.6em*var(--pm)) 0;padding:14px 16px 15px;}
#mod-aiask .aiqa-item h3{font:700 .88rem/1.7 var(--serif);color:var(--qgreen);margin:0 0 .4em;
  padding:0;border:0;}
#mod-aiask .aiqa-item h3:before{content:"问　";color:var(--gold);font-weight:700;}
/* 回答整体右缩进，与问句文字对齐（别顶着左边） */
#mod-aiask .aiqa-item>p,#mod-aiask .aiqa-item>ul{margin-left:26px;}
#mod-aiask .aiqa-item p{font-size:.82rem;line-height:1.95;color:var(--txt);
  margin-top:calc(.4em*var(--pm));margin-bottom:calc(.4em*var(--pm));}
#mod-aiask .aiqa-item ul{margin-top:calc(.35em*var(--pm));margin-bottom:calc(.35em*var(--pm));
  padding-left:1.1em;}
#mod-aiask .aiqa-item li{font-size:.82rem;line-height:1.88;margin:calc(.18em*var(--pm)) 0;
  color:var(--qgreen);}
#mod-aiask .aiqa-item li::marker{color:var(--gold);}
/* 逐章追问（details 形态）：摘要行也收敛 */
.mmx-ask>summary{font-size:.82rem;line-height:1.7;padding:2px 0;color:var(--qgreen);}
.mmx-askbody{font-size:.82rem;line-height:1.9;color:var(--txt);}

/* ── AI领读章内：AI 大纲原生深层样式（章节字号整体再收一档） ── */
.merged-guide .sec{margin:9px 0 12px;padding-left:6px;border-left:2px solid var(--card-bd)}
.merged-guide .sec h4{font:600 .82rem/1.6 "Noto Serif SC","Songti SC",Georgia,serif;color:var(--head);margin:.5em 0 .25em}
.merged-guide .mmx-name{font-size:.84rem !important;}
.merged-guide .mmx-sech{font-size:.78rem !important;}
.merged-guide .mmx-gist{font-size:.78rem !important;line-height:1.85;}
.merged-guide .mmx-stat{font-size:.7rem !important;}
.merged-guide ul.point{margin:.25em 0;padding-left:20px}
.merged-guide ul.point>li{margin:.3em 0;font-size:.78rem !important;line-height:1.85;}
.merged-guide ul.quote{margin:.22em 0 .22em 20px;padding-left:18px;list-style:none}
.merged-guide ul.quote::before{content:"原句";display:block;font-size:.7rem;color:var(--gold);
  letter-spacing:.1em;margin:.12em 0 .08em;font-weight:600}
.merged-guide ul.quote.quote-node{margin-top:.45em;padding-top:.35em;border-top:1px dashed var(--inner-bd)}
.merged-guide ul.quote.quote-node::before{content:"原句 · 本小节汇总"}
.merged-guide ul.quote>li{color:var(--txt);font-size:.8rem !important;line-height:1.85;margin:.18em 0;padding-left:10px;border-left:2px solid var(--gold)}
.merged-guide .mmx-qt{font-size:.77rem !important;}

/* 核心观点初判：外链 mmx-guide.css 会给每条加「观点N」文字前缀（绝对定位，
   在本页版式里和标题叠字）。直接子级的条目已由上面统一序号接管；这里只兜底
   极少数把 .mmx-views 套进 div 的页面，避免「观点1」和序号叠在一起。
   优先级低于上面的模块条目规则，不会影响正常序号。 */
#rdBody .mmx-views li::before{content:none !important;display:none !important;}

/* ── 夜间主题：覆盖共享 CSS 里的硬编码浅色 ── */
html[data-theme=dark] h1,html[data-theme=dark] h2,html[data-theme=dark] h3,
html[data-theme=dark] h4{color:var(--head);}
html[data-theme=dark] .mmx-qt{background:var(--inner-bg);color:var(--txt);}
html[data-theme=dark] .mmx-qlist blockquote,html[data-theme=dark] .mmx-ask blockquote,
html[data-theme=dark] .mmx-gist,html[data-theme=dark] .mmx-pts,
html[data-theme=dark] .mmx-askbody{color:var(--txt);}
html[data-theme=dark] .mmx-qlist li:before{background:#2b3a31;color:#9ed0af;}
html[data-theme=dark] .mmx-views li,html[data-theme=dark] .mmx-qlist li,
html[data-theme=dark] .mmx-qa,html[data-theme=dark] .mmx-sec>summary,
html[data-theme=dark] .mmx-cn{border-color:#3a3f46;}
html[data-theme=dark] .mmx-views li b,html[data-theme=dark] .mmx-qa .mmx-q{color:var(--ink);}
html[data-theme=dark] .chip{background:#274234;color:#9ed0af;}
html[data-theme=dark] .mmx-role,html[data-theme=dark] .mmx-chip{background:#262a2f;
  color:#8a919a;border-color:#3a3f46;}
html[data-theme=dark] a{color:#9ed0af;}

/* AI领读：外层卡片底 + 章内所有硬编码浅色（含 body 内联的 OUTLINE_DEEP_CSS）全部跟随主题。
   这些规则在 body 内联 <style> 之后，必须 !important 才能覆盖。 */
html[data-theme=dark] .merged-guide .card,
html[data-theme=dark] .merged-guide .toc-part,
html[data-theme=dark] .toc-part,html[data-theme=dark] .card{
  background:var(--card-bg) !important;border-color:var(--card-bd) !important;}
html[data-theme=dark] .merged-guide .sec,
html[data-theme=dark] .merged-guide ul.quote,
html[data-theme=dark] .mmx-cn,html[data-theme=dark] .mmx-sec>summary{
  border-color:var(--inner-bd) !important;}
html[data-theme=dark] .merged-guide .sec h4,
html[data-theme=dark] .mmx-sech,html[data-theme=dark] .merged-guide .mmx-name{
  color:var(--head) !important;}
html[data-theme=dark] .merged-guide ul.quote>li,
html[data-theme=dark] .merged-guide ul.point>li,
html[data-theme=dark] .merged-guide .mmx-gist,
html[data-theme=dark] .merged-guide .mmx-pts{
  color:var(--txt) !important;}
html[data-theme=dark] .merged-guide ul.quote::before{color:var(--gold) !important;}
html[data-theme=dark] .mmx-qt{background:var(--inner-bg) !important;color:var(--txt) !important;}
html[data-theme=dark] .mmx-more,html[data-theme=dark] .mmx-empty,
html[data-theme=dark] .mmx-pnum,html[data-theme=dark] .mmx-secc{color:var(--sub) !important;}
/* 非夜间主题：内层卡片同样跟随主题（共享 CSS 的 --card 写死 #fff） */
html[data-theme=cream] .toc-part,html[data-theme=cream] .card,
html[data-theme=light] .toc-part,html[data-theme=light] .card,
html[data-theme=green] .toc-part,html[data-theme=green] .card{
  background:var(--card-bg) !important;border-color:var(--card-bd) !important;}

/* ── 右上角设置面板 ── */
/* 右上角三个按钮统一 34×34、间距 8px：Aa(12) → 分享(54) → AI 大纲(96) */
#rdFab{position:fixed;top:10px;right:12px;z-index:60;font:600 13px/1 var(--sans);color:var(--txt);
  width:34px;height:34px;box-sizing:border-box;padding:0;
  background:var(--card-bg);border:1px solid var(--card-bd);border-radius:9px;
  cursor:pointer;box-shadow:0 2px 8px rgba(0,0,0,.1);
  display:flex;align-items:center;justify-content:center;}
#rdFab:hover{border-color:var(--head);color:var(--head);}
/* 右上角操作区：AI 大纲入口，紧挨分享按钮（分享在 right:64px）左侧。
   尺寸必须和分享按钮严格一致（34×34 正方形），否则三个按钮高矮不齐。 */
a.ai-outline-link{position:fixed;top:10px;right:96px;z-index:60;
  width:34px;height:34px;box-sizing:border-box;padding:0;
  color:var(--txt);background:var(--card-bg);border:1px solid var(--card-bd);border-radius:9px;
  cursor:pointer;text-decoration:none;box-shadow:0 2px 8px rgba(0,0,0,.1);
  display:flex;align-items:center;justify-content:center;line-height:0;}
.ai-outline-link svg{display:block;width:18px;height:18px;flex:none;}

/* 顶部标题栏：窄屏把书名提到与操作区（← / ☰ / 分享 / Aa）同一行，
   桌面仍由 .rd-stick 吸顶条承载（见下方媒体查询，默认隐藏） */
.rd-toptitle{position:fixed;top:10px;left:54px;right:140px;z-index:61;height:34px;
  display:none;align-items:center;min-width:0;pointer-events:none;
  font:600 1.02rem/1.2 var(--serif);color:var(--head);
  text-shadow:0 1px 3px rgba(0,0,0,.45);}
.rd-toptitle .rd-title{pointer-events:auto;display:flex;align-items:center;gap:4px;min-width:0;
  color:inherit;text-decoration:none;cursor:default;}
.rd-toptitle .rd-title h1{margin:0;font:inherit;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}
.rd-toptitle .rd-title-on{cursor:pointer;}
.rd-toptitle .rd-title-on::after{content:"↗";flex:none;font:400 .82em/1 var(--sans);color:var(--muted);opacity:.65;}
/* 点击不再做任何闪光/脉冲：朗读时的 .speaking 常驻高亮就是「读到哪」的指示 */
/* 暗色主题有 `html[data-theme=dark] a{color:#9ed0af}`（特异性 0,1,2），
   会把目录图标染绿、和旁边两个灰白按钮不齐。这里同特异性后置覆盖回 --txt。 */
html[data-theme=dark] a.ai-outline-link{color:var(--txt);}
a.ai-outline-link:hover,
html[data-theme=dark] a.ai-outline-link:hover{border-color:var(--head);color:var(--head);}
#rdPanel{position:fixed;top:48px;right:12px;z-index:60;background:var(--card-bg);
  border:1px solid var(--card-bd);border-radius:12px;padding:12px 14px;
  box-shadow:0 8px 24px rgba(0,0,0,.16);display:grid;gap:9px;min-width:212px;}
#rdPanel[hidden]{display:none;}
#rdPanel .rd-row{display:flex;gap:5px;align-items:center;justify-content:space-between;}
#rdPanel .rd-row>span{font-size:.72rem;color:var(--sub);flex:none;}
#rdPanel .rd-btns{display:flex;gap:5px;}
#rdPanel button{font:600 12px/1.4 var(--sans);color:var(--txt);background:var(--navlink-bg);
  border:1px solid var(--navlink-bd);border-radius:7px;padding:4px 9px;cursor:pointer;}
#rdPanel button:hover{border-color:var(--head);color:var(--head);}

@media(max-width:720px){
  body{padding:0 12px 60px;}
  #rdHero{margin:0 -12px 8px;}
  #rdHero.rd-hero-full{margin:0;width:100vw;margin-left:calc(50% - 50vw);padding:60px 0 26px;}
  .rd-hero-full .rd-hero-cover{width:min(58vw,260px);}
  .rd-stick{padding:8px 0 6px;}
  .rd-stick{padding:12px 0 10px;}
  /* 窄屏标题允许两行，模块自然抬高，长书名不再只剩半句 */
  .rd-stick h1{font-size:1.04rem;line-height:1.5;white-space:normal;
    display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden;}
  .rd-stick-row{gap:10px;align-items:flex-end;}
  .rd-stick .rd-hero-author{max-width:30%;}
  .rd-title::after{display:none;}   /* 窄屏不显示外链小箭头，标题两行已足够挤 */
  /* 吸顶后左上「←」、右上「Aa」会压在书名/作者上 → 标题条两侧让位 */
  body.rd-scrolled .rd-stick{padding-left:46px;padding-right:46px;}
  /* 吸顶时让位的是标题那一行（左上「←」/ 右上三按钮），导航在下一行，
     左右那段空白可以直接吃掉 → 同一行能多放一个 chip */
  body.rd-scrolled .rd-stick .nav{margin-left:-46px;margin-right:-46px;
    padding-left:12px;padding-right:12px;}
  /* 右上角钉着「AI 大纲 / 分享 / Aa」三个 34px 按钮，作者名原本要让出这段；
     现在书名已上移到顶部标题栏（与操作区同处一行），吸顶条里不再显示标题行 */
  body.rd-scrolled .rd-stick-row{padding-right:84px;}
  /* 窄屏：把书名提到与「← / ☰ / 分享 / Aa」同一行的顶部标题栏，
     吸顶条里只留章节导航，避免书名独占一行、中间留白 */
  .rd-toptitle{display:flex;}
  .rd-stick-row{display:none;}
  /* 导航只留一行：按容器宽度能塞几个塞几个，塞不下的用两端省略号收掉
     （具体显示几项由 reader.js 的 fitNav 算），10 个 chip 排三行会把正文挤没 */
  .nav{display:flex;flex-wrap:nowrap;align-items:center;gap:6px;overflow:hidden;
    justify-content:space-between;padding:8px 0;margin:10px 0 14px;}
  .nav .navlink{display:inline-block;flex:none;}
  .nav .navlink span{display:block;white-space:nowrap;overflow:visible;}
  .nav .navlink.nav-hide{display:none;}
  .nav .nav-more{display:none;flex:none;color:var(--muted);font-size:12px;
    line-height:1;letter-spacing:.12em;padding:0 1px;}
  .nav .nav-more.on{display:inline-block;}
  .nav .nav-more-l{order:-1;}
  .nav .nav-more-r{order:1;}
  #rdBody>section.mmx-mod,#rdBody>section.card,#rdBody>section.mmx-svgwrap{padding:15px 16px;border-radius:14px;}
}

/* ── 加载态：顶部进度条 + 骨架屏 ──────────────────────────
 * 设计原则：模块标题本来就已知，壳页直接写死标题文字，只把「内容」留空占位。
 * 这样慢网时读者看到的是「这本书有哪些模块 + 正在填充」，而不是一片空白。
 */
#rdBar{position:fixed;top:0;left:0;right:0;height:3px;z-index:99;pointer-events:none;
  overflow:hidden;background:var(--card-bd);
  /* 兜底：即使 JS 版本较旧没能收条，9 秒后也自己淡出，绝不长期挂在页面上 */
  animation:rdBarHide .4s ease 9s forwards;}
@keyframes rdBarHide{to{opacity:0;visibility:hidden}}
#rdBar::before{content:"";display:block;width:100%;height:100%;border-radius:2px;
  transform-origin:0 50%;background:var(--head);box-shadow:0 0 10px var(--head);
  animation:rdBarRun 9s cubic-bezier(.15,.7,.25,1) forwards;}
/* 像真实加载条：一路推进到 92% 停住，数据到位再整条淡出（不循环、不闪烁） */
@keyframes rdBarRun{0%{transform:scaleX(0)}38%{transform:scaleX(.52)}100%{transform:scaleX(.92)}}
#rdBar.rd-done{opacity:0;transition:opacity .35s ease;}

.rd-skel{display:grid;gap:calc(16px*var(--pm));}
.rd-skel-card{background:var(--card-bg);border:1px solid var(--card-bd);border-radius:16px;
  padding:16px 20px 20px;margin:0;}  /* margin:0 覆盖共享 CSS 的 section{margin:30px 0} */
/* 标题：与真实模块标题同字号同字重，只是颜色偏弱 —— 加载完几乎无跳动 */
.rd-skel .sk-t{font:700 1rem/1.5 var(--serif);color:var(--sub);margin:0 0 13px;
  padding-left:10px;border-left:3px solid var(--line);letter-spacing:.01em;}
.rd-skel-card>.sk-l:nth-child(2){margin-top:0;}

/* 内容位：按模块自身的形状给不同占位块 */
.rd-skel .sk-fig,.rd-skel .sk-sub,.rd-skel .sk-node,
.rd-skel .sk-q,.rd-skel .sk-a,.rd-skel .sk-l,.rd-skel .sk-h{
  position:relative;overflow:hidden;background:var(--skel-a);border-radius:6px;}
.rd-skel .sk-fig{height:168px;border-radius:12px;}
.rd-skel .sk-h{height:15px;width:118px;border-radius:5px;}
.rd-skel .sk-sub{height:30px;width:42%;border-radius:9px;margin-bottom:12px;}
.rd-skel .sk-node{height:54px;border-radius:10px;margin-top:10px;}
.rd-skel .sk-q{height:14px;width:62%;border-radius:5px;margin-bottom:9px;}
.rd-skel .sk-a{height:14px;border-radius:5px;margin:0 0 18px 26px;background:var(--skel-b);}
.rd-skel .sk-l{height:12px;border-radius:5px;margin-top:13px;}
.rd-skel .w96{width:96%}.rd-skel .w94{width:94%}.rd-skel .w92{width:92%}
.rd-skel .w90{width:90%}.rd-skel .w88{width:88%}.rd-skel .w86{width:86%}
.rd-skel .w84{width:84%}.rd-skel .w82{width:82%}.rd-skel .w78{width:78%}
.rd-skel .w76{width:76%}.rd-skel .w74{width:74%}.rd-skel .w72{width:72%}
.rd-skel .w70{width:70%}.rd-skel .w68{width:68%}.rd-skel .w66{width:66%}
.rd-skel .w64{width:64%}.rd-skel .w62{width:62%}.rd-skel .w56{width:56%}
.rd-skel .w52{width:52%}.rd-skel .w50{width:50%}
/* 骨架配色按主题分档（深色下也要看得见，浅色下别糊成一片） */
:root,html[data-theme=dark]{--skel-a:#2c3138;--skel-b:#4a525d;}
html[data-theme=cream]{--skel-a:#e9e2d0;--skel-b:#d0c5a8;}
html[data-theme=light]{--skel-a:#eeeae2;--skel-b:#d3ccc0;}
html[data-theme=green]{--skel-a:#d6e9da;--skel-b:#aed3ba;}
/* 扫光：从占位块上掠过，明确「正在加载」 */
.rd-skel .sk-fig::after,.rd-skel .sk-sub::after,.rd-skel .sk-node::after,
.rd-skel .sk-q::after,.rd-skel .sk-a::after,.rd-skel .sk-l::after,.rd-skel .sk-h::after{
  content:"";position:absolute;top:0;bottom:0;left:0;width:55%;
  background:linear-gradient(90deg,transparent,var(--skel-b),transparent);
  animation:rdSweep 1.25s ease-in-out infinite;}
@keyframes rdSweep{0%{transform:translateX(-130%)}60%,100%{transform:translateX(270%)}}
@media (prefers-reduced-motion:reduce){
  #rdBar::before{animation:none;width:100%;opacity:.5}
  .rd-skel .sk-fig::after,.rd-skel .sk-sub::after,.rd-skel .sk-node::after,
  .rd-skel .sk-q::after,.rd-skel .sk-a::after,.rd-skel .sk-l::after,
  .rd-skel .sk-h::after{display:none;}
  #rdBody.rd-in>*{animation:none;}
}
/* 骨架退场 + 内容淡入（避免生硬切换） */
.rd-skel{transition:opacity .18s ease;}
.rd-skel.rd-out{opacity:0;}
#rdBody.rd-in>*{animation:rdIn .26s ease both;}
@keyframes rdIn{from{opacity:0;transform:translateY(6px)}to{opacity:1;transform:none}}
/* 加载失败 */
.rd-fail{padding:22px 0;color:var(--sub);font-size:.86rem;line-height:1.9;}
.rd-fail b{color:var(--head);display:block;margin-bottom:6px;font-size:.92rem;}
.rd-retry{margin-top:10px;font:600 13px/1.4 var(--sans);color:var(--head);
  background:var(--navlink-bg);border:1px solid var(--head);border-radius:8px;
  padding:7px 14px;cursor:pointer;}
.rd-retry:hover{background:var(--act-bg);color:var(--act-fg,var(--head));}
@media(max-width:720px){
  .rd-skel-card{padding:14px 16px 18px;border-radius:14px;}
  .rd-skel .sk-fig{height:132px;}
  .rd-skel .sk-node{height:48px;}
}

/* ── 结构导图全屏弹层 ─────────────────────────────────────────────── */
#rdSvgModal{position:fixed;inset:0;z-index:90;}
#rdSvgModal[hidden]{display:none;}
.rd-svg-mask{position:absolute;inset:0;background:rgba(10,12,14,.86);backdrop-filter:blur(3px);}
.rd-svg-stage{position:absolute;inset:0;display:flex;align-items:center;justify-content:center;
  margin:0;padding:20px;overflow:auto;-webkit-overflow-scrolling:touch;}
.rd-svg-holder{display:flex;align-items:center;justify-content:center;}
/* 尺寸由 openSvgModal() 按 viewBox 等比算好内联写入，这里不再设 min-width / max-height，
   否则窄屏会被撑到 600px 左右裁切（旧 bug） */
.rd-svg-holder svg{display:block;max-width:none;border-radius:10px;
  background:var(--card-bg);box-shadow:0 18px 60px rgba(0,0,0,.5);cursor:default;}
.rd-svg-close{position:absolute;top:14px;right:16px;z-index:2;width:40px;height:40px;
  display:flex;align-items:center;justify-content:center;border-radius:50%;
  border:1px solid rgba(255,255,255,.35);background:rgba(20,22,26,.72);color:#fff;
  font:600 17px/1 var(--sans);cursor:pointer;}
.rd-svg-close:hover{background:rgba(255,255,255,.16);}
@media(max-width:720px){
  .rd-svg-stage{padding:12px;}
  .rd-svg-close{top:10px;right:10px;}
}

/* ── 上一篇 / 下一篇（详情页最底部） ──────────────────────────────── */
#rdPn{display:flex;justify-content:space-between;align-items:stretch;gap:10px;
  margin:26px 0 10px;padding-top:16px;border-top:1px solid var(--card-bd);}
#rdPn[hidden]{display:none;}
.rd-pn{flex:1 1 0;min-width:0;display:flex;flex-direction:column;gap:3px;
  padding:11px 13px;border:1px solid var(--card-bd);border-radius:12px;
  background:var(--navlink-bg);text-decoration:none;color:var(--txt);
  transition:border-color .15s ease,background .15s ease;}
.rd-pn:hover{border-color:var(--head);background:var(--act-bg);}
.rd-pn:hover .rd-pn-t{color:var(--act-fg,var(--head));}
.rd-pn.is-off{opacity:.45;pointer-events:none;}
.rd-pn-next{text-align:right;align-items:flex-end;}
.rd-pn-k{font:600 .7rem/1.2 var(--sans);letter-spacing:.08em;color:var(--sub);}
.rd-pn-t{font:600 .84rem/1.45 var(--serif);color:var(--head);
  overflow:hidden;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;}
@media(max-width:720px){
  #rdPn{gap:8px;margin:20px 0 6px;}
  .rd-pn{padding:10px 11px;border-radius:10px;}
  .rd-pn-t{font-size:.8rem;}
}
@media (prefers-reduced-motion:reduce){
  .rd-pn{transition:none;}
}

/* ── 夜间主题：结构导图 SVG 配色适配 ───────────────────────────
   导图 SVG 颜色写死（节点米白底 #f4efe3 / 深字 #2f2a24 / 说明深灰 #5c5347），
   夜间主题下深字落在深卡片底上看不清。fill 是表现属性，CSS 可覆盖：
   节点底改主题深绿、文字整体提亮、连线压暗。深浅主题互不影响 */
html[data-theme=dark] .mmx-svg rect[fill="#f4efe3"]{fill:#244b40;}
html[data-theme=dark] .mmx-svg rect[fill="#3d372e"]{fill:#1c3a2b;}
html[data-theme=dark] .mmx-svg rect[fill="#8a9b6e"]{fill:#3f7a5c;}
html[data-theme=dark] .mmx-svg .t1{fill:#dcefe2 !important;}
html[data-theme=dark] .mmx-svg .t2{fill:#b8cec0 !important;}
html[data-theme=dark] .mmx-svg .t3{fill:#93a89a !important;}
html[data-theme=dark] .mmx-svg text[style*="c9c0ae"]{fill:#93a89a !important;}
html[data-theme=dark] .mmx-svg .ln{stroke:#2f5b49;}

/* 新思维导图（LLM 归纳型）：固定 364 宽，手机 1:1 不缩字，桌面限制最大宽度 */
.mmx-svgwrap>svg.mmx-mind{max-width:560px;}
html[data-theme=dark] .mmx-mind .m-root{fill:#1c3a2b;}
html[data-theme=dark] .mmx-mind .m-br{fill:#1d3830;stroke:#2f5b49;}
html[data-theme=dark] .mmx-mind .m-chip{fill:#244b40;stroke:#3f7a5c;}
html[data-theme=dark] .mmx-mind .m-ln{stroke:#2f5b49;}
html[data-theme=dark] .mmx-mind .m-t{fill:#eaf4ec;}
html[data-theme=dark] .mmx-mind .m-th{fill:#b8cec0;}
html[data-theme=dark] .mmx-mind .m-lb{fill:#dcefe2;}
html[data-theme=dark] .mmx-mind .m-note{fill:#a9c2b2;}
html[data-theme=dark] .mmx-mind .m-cp{fill:#dcefe2;}
html[data-theme=dark] .mmx-mind .m-rel{fill:#93a89a;}

/* ── 书名吸顶条（FULL_HERO 书）：书名滚出视口后固定顶部淡入 ──
   背景墙 fixed 钉死不动；hero 本体普通流滚走；此条只兜书名 */
.rd-titlebar{position:fixed;top:0;left:0;right:0;z-index:45;pointer-events:none;
  opacity:0;transform:translateY(-10px);transition:opacity .28s ease,transform .28s ease;}
.rd-titlebar.show{opacity:1;transform:none;}
.rd-titlebar-in{pointer-events:auto;max-width:880px;margin:0 auto;
  padding:12px 56px 9px 58px;font:700 1rem/1.4 var(--serif);color:#fff;
  white-space:nowrap;overflow:hidden;text-overflow:ellipsis;
  background:linear-gradient(180deg,rgba(16,26,22,.9) 0%,rgba(16,26,22,.55) 70%,rgba(16,26,22,0) 100%);
  text-shadow:0 1px 4px rgba(0,0,0,.5);}

/* ── 桌面端（≥1024px）：正文列加宽 ───────────
   第 20 批 o：FULL_HERO 书（body.rd-has-full）背景墙铺满整个视口宽度，
   墙下方内容放宽到 1320 列居中（超宽屏 1400）；普通书仍按 1120 居中 */
@media(min-width:1024px){
  body{max-width:1120px;padding:0 28px 96px;font-size:1rem;}
  body.rd-has-full{max-width:none;padding:0 0 96px;}
  #rdHero.rd-hero-full{width:100%;margin-left:0;margin-top:14px;padding:56px 0;
    min-height:0;border-radius:18px 18px 0 0;overflow:hidden;}
  body.rd-has-full #rdHero.rd-hero-full{width:100%;margin:0;padding:68px 0;
    min-height:0;border-radius:0;}
  .rd-hero-full .rd-hero-cover{width:min(26vw,320px);}
  body.rd-has-full .rd-hero-full .rd-hero-cover{width:min(22vw,340px);}
  /* 标题条/正文：背景 100% 全宽，内容靠计算内边距对齐到中央内容列 */
  body.rd-has-full .rd-stick,
  body.rd-has-full #rdBody{padding-left:max(28px,calc((100% - 1320px)/2 + 28px));
    padding-right:max(28px,calc((100% - 1320px)/2 + 28px));}
  .rd-stick{padding-top:12px;padding-bottom:10px;}
  body.rd-has-full .rd-stick{padding-top:26px;padding-bottom:18px;}
  .rd-stick h1{font-size:1.32rem;}
  body.rd-has-full .rd-stick h1{font-size:1.5rem;line-height:1.62;}
  body.rd-has-full .rd-stick-row{margin:0 0 14px;gap:18px;}
  body.rd-has-full.rd-scrolled .rd-stick{
    padding-left:max(56px,calc((100% - 1320px)/2 + 28px));
    padding-right:max(56px,calc((100% - 1320px)/2 + 28px));}
  .rd-stick .navlink{font-size:12.5px;padding:7px 6px;}
}
@media(min-width:1500px){
  body{max-width:1200px;}
  body.rd-has-full{max-width:none;}
  body.rd-has-full .rd-stick,
  body.rd-has-full #rdBody{padding-left:max(28px,calc((100% - 1400px)/2 + 28px));
    padding-right:max(28px,calc((100% - 1400px)/2 + 28px));}
}

/* ── 交互式结构导图：逐级下钻的折叠树 ─────────────────────────
   静态 SVG 保留为「全图总览」，默认收起；主视图是这棵树。
   三级展开：全书命题 → 论证议题 → 关键概念 → 该线在论证什么 */
.mmx-tree{margin:2px 0 0;font-size:.86rem;}
.mmx-tree-tools{display:flex;flex-wrap:wrap;align-items:center;gap:8px;margin:0 0 12px;}
.mmx-tool{appearance:none;border:1px solid var(--inner-bd);background:transparent;
  color:var(--sub);border-radius:999px;padding:5px 11px;font-size:.72rem;
  line-height:1.4;cursor:pointer;}
.mmx-tool:hover{color:var(--qgreen);border-color:var(--qgreen);}
.mmx-tree-tip{font-size:.7rem;color:var(--sub);opacity:.8;}
.mmx-tool:focus-visible,.mmx-head:focus-visible,.mmx-overview>summary:focus-visible{
  outline:2px solid var(--qgreen);outline-offset:2px;}
.mmx-node{position:relative;}
.mmx-head{display:flex;align-items:center;gap:8px;width:100%;box-sizing:border-box;
  background:transparent;border:0;border-radius:10px;padding:8px 10px;margin:0;
  text-align:left;color:var(--ink);font:inherit;cursor:pointer;line-height:1.55;}
.mmx-head:hover{background:rgba(138,155,110,.10);}
.mmx-caret{flex:0 0 auto;width:12px;font-size:.7rem;color:var(--sub);
  display:inline-block;transition:transform .18s ease;}
.mmx-head[aria-expanded="true"]>.mmx-caret{transform:rotate(90deg);}
.mmx-kicker{flex:0 0 auto;font-size:.68rem;color:var(--sub);letter-spacing:.06em;}
.mmx-name{flex:1 1 auto;min-width:0;}
.mmx-badge{flex:0 0 auto;width:20px;height:20px;border-radius:50%;color:#fff;
  font-size:.68rem;font-weight:700;display:inline-flex;align-items:center;justify-content:center;}
.mmx-reltag{flex:0 0 auto;font-size:.66rem;color:var(--sub);
  border:1px solid var(--inner-bd);border-radius:5px;padding:1px 5px;}
.mmx-count{flex:0 0 auto;font-size:.66rem;color:var(--sub);}
.mmx-lv1>.mmx-head{background:rgba(47,74,61,.07);font-weight:700;}
.mmx-lv1>.mmx-head .mmx-name{font-size:.9rem;}
.mmx-lv2>.mmx-head{font-weight:700;}
.mmx-lv3>.mmx-head{padding:6px 10px;font-size:.8rem;}
.mmx-kids[hidden],.mmx-detail[hidden]{display:none;}
.mmx-lv1>.mmx-kids{margin:6px 0 0 15px;padding-left:14px;
  border-left:1px solid var(--inner-bd);}
.mmx-lv2>.mmx-kids{margin:2px 0 8px 26px;padding-left:14px;
  border-left:1px dashed var(--inner-bd);}
.mmx-node>.mmx-kids>.mmx-node::before{content:"";position:absolute;left:-14px;top:18px;
  width:12px;height:1px;background:var(--inner-bd);}
.mmx-branch-note{margin:2px 0 8px 26px;padding:6px 11px;
  background:transparent;border-left:2px solid var(--qgreen);}
.mmx-bn-kicker{display:block;font-size:.66rem;color:var(--sub);
  letter-spacing:.06em;margin-bottom:2px;}
.mmx-bn-txt{margin:0 !important;padding-left:0 !important;
  font-size:.78rem !important;line-height:1.8 !important;color:var(--txt);}
.mmx-detail{margin:2px 0 8px 26px;padding:9px 11px;
  background:var(--inner-bg);border:1px solid var(--inner-bd);border-radius:8px;}
/* 真展开：概念下的书内依据，圆点条目而不是「你在第几层」的元信息 */
.mmx-ev-txt{position:relative;margin:0 0 6px !important;padding-left:15px !important;
  font-size:.8rem !important;line-height:1.85 !important;color:var(--txt);}
.mmx-ev-txt::before{content:"";position:absolute;left:2px;top:.72em;
  width:5px;height:5px;border-radius:50%;background:var(--qgreen);}
.mmx-detail-txt{margin:0 0 5px !important;font-size:.78rem !important;
  line-height:1.8 !important;color:var(--txt);padding-left:0 !important;}
.mmx-detail-meta{margin:0 !important;font-size:.7rem !important;
  color:var(--sub);padding-left:0 !important;}
.mmx-overview{margin:14px 0 0;border-top:1px solid var(--inner-bd);padding-top:10px;}
.mmx-overview>summary{cursor:pointer;font-size:.76rem;color:var(--sub);list-style:none;}
.mmx-overview>summary::-webkit-details-marker{display:none;}
.mmx-overview>summary::before{content:"▸ ";display:inline-block;}
.mmx-overview[open]>summary::before{content:"▾ ";}
/* 原图是 364 宽的纵向长图，按近 1:1 显示；桌面宽栏里不让它被 width:100% 撑到上千 px */
.mmx-overview>svg.mmx-svg{display:block;width:100%;max-width:420px;height:auto;margin:10px auto 0;}
html[data-theme=dark] .mmx-head{color:var(--ink);}
html[data-theme=dark] .mmx-lv1>.mmx-head{background:rgba(158,208,175,.10);}
html[data-theme=dark] .mmx-detail{background:var(--inner-bg);border-color:#3a3f46;}
html[data-theme=dark] .mmx-detail-txt{color:var(--txt);}
html[data-theme=dark] .mmx-tool{border-color:#3a3f46;}

/* ── 听书（TTS）v4：配置并入「Aa」设置面板 + 底部朗读控制条 ──────
   右上角不再新增按钮；朗读时底部浮出控制条，移动端拇指可达。 */
/* 正文可朗读单元：块级容器悬停描边，细粒度单元悬停淡底 */
#rdBody section,#rdBody div.sec{cursor:pointer;}
#rdBody :is(ul.quote>li,ul.point>li,.mmx-views>li,.mmx-qlist>li,p:not(.mmx-mod-note),blockquote){cursor:pointer;}
/* 点击不闪（v7）：安卓 Chrome / 微信 X5 点一下会先糊一层系统 tap 高亮、
   再把 :hover 的绿框留在原地，看起来就是「闪一下」。Apple 端本来就没这层，
   所以只有其它浏览器闪。三处一起关：
   1) 关掉系统 tap highlight；
   2) touch-action:manipulation 去掉双击缩放的等待与缩放闪动；
   3) 悬停效果只给真有鼠标的设备（hover:hover + pointer:fine），触屏永不进 hover 态。 */
#rdBody,#rdBody *{-webkit-tap-highlight-color:transparent;}
#rdBody section,#rdBody div.sec,
#rdBody :is(ul.quote>li,ul.point>li,.mmx-views>li,.mmx-qlist>li,p,blockquote){touch-action:manipulation;}
@media (hover:hover) and (pointer:fine){
  #rdBody section:hover,#rdBody div.sec:hover{box-shadow:inset 0 0 0 2px rgba(7,193,96,.22);}
  #rdBody :is(ul.quote>li,ul.point>li,.mmx-views>li,.mmx-qlist>li,p:not(.mmx-mod-note),blockquote):hover{background:rgba(7,193,96,.06);border-radius:4px;}
}
/* 正在朗读的单元：常驻高亮（读到哪亮到哪），无动画、不闪。
   左侧竖条 + 淡底，切换单元时用过渡淡入，而不是整块背景闪一下。 */
#rdBody .speaking{background:rgba(7,193,96,.10);box-shadow:inset 3px 0 0 #07c160;
  border-radius:4px;transition:background-color .25s ease,box-shadow .25s ease;
  scroll-margin-top:110px;scroll-margin-bottom:120px;}

/* 「Aa」面板内的听书分区：沿用面板自身的卡片/按钮变量，跟随主题 */
#rdPanel,#rdPanel *{-webkit-tap-highlight-color:transparent;}
#rdPanel.rd-has-speak{max-height:calc(100vh - 64px);overflow-y:auto;}
.rd-speak-box{width:238px;max-width:calc(100vw - 52px);border-top:1px solid var(--card-bd);
  padding-top:10px;margin-top:2px;display:grid;gap:7px;box-sizing:border-box;}
.rd-sp-hd{font:700 .84rem/1.4 var(--sans);color:var(--head);display:flex;
  align-items:baseline;justify-content:space-between;gap:8px;}
.rd-sp-hd span{font:400 .68rem/1.4 var(--sans);color:var(--sub);}
.rd-sp-lab{display:block;font-size:.72rem;color:var(--sub);margin:2px 0 0;}
.rd-sp-lab>span{float:right;color:var(--txt);font-variant-numeric:tabular-nums;}
/* 音色行：下拉 + 试听按钮同一行，下拉占满剩余宽度 */
.rd-sp-voice{display:flex;align-items:flex-end;gap:6px;}
.rd-sp-voice>label{flex:1 1 auto;min-width:0;}
.rd-sp-try{flex:none;font:600 11px/1.4 var(--sans);padding:5px 8px;border-radius:7px;
  cursor:pointer;color:var(--txt);background:var(--navlink-bg);border:1px solid var(--navlink-bd);}
.rd-sp-try:hover,.rd-sp-try:active{border-color:#07c160;color:#07c160;}
.rd-speak-box select{display:block;width:100%;margin-top:4px;box-sizing:border-box;
  font:12px/1.4 var(--sans);padding:5px 7px;border-radius:7px;
  border:1px solid var(--navlink-bd);background:var(--navlink-bg);color:var(--txt);}
.rd-speak-box select:disabled{opacity:.6;}
.rd-sp-chips{display:flex;gap:4px;flex-wrap:wrap;margin-top:2px;}
.rd-sp-chips button{flex:1 1 auto;min-width:50px;font:600 11px/1.5 var(--sans);
  padding:4px 5px;border-radius:6px;cursor:pointer;color:var(--txt);
  background:var(--navlink-bg);border:1px solid var(--navlink-bd);}
.rd-sp-chips button:hover,.rd-sp-chips button.on{border-color:#07c160;color:#07c160;}
.rd-speak-box input[type=range]{display:block;width:100%;margin:5px 0 0;accent-color:#07c160;}
.rd-sp-foot{display:flex;gap:6px;margin-top:2px;}
.rd-sp-foot button{flex:1;font:600 11px/1.5 var(--sans);padding:5px 4px;
  border-radius:7px;cursor:pointer;color:var(--txt);
  background:var(--navlink-bg);border:1px solid var(--navlink-bd);}
.rd-sp-foot button:hover{border-color:var(--head);color:var(--head);}
.rd-sp-tip{margin:0;font-size:.68rem;line-height:1.5;color:var(--sub);}

/* 底部朗读控制条：不占右上角，移动端拇指可达；避开系统底部安全区 */
#rdSpeakBar{position:fixed;left:50%;transform:translateX(-50%);z-index:65;
  bottom:calc(12px + env(safe-area-inset-bottom,0px));
  width:min(420px,calc(100vw - 24px));box-sizing:border-box;
  display:flex;align-items:center;gap:6px;padding:7px 9px;
  background:var(--card-bg);border:1px solid var(--card-bd);border-radius:12px;
  box-shadow:0 10px 30px rgba(0,0,0,.28);font:12px/1.4 var(--sans);color:var(--txt);}
#rdSpeakBar[hidden]{display:none;}
#rdSpeakBar,#rdSpeakBar *{-webkit-tap-highlight-color:transparent;touch-action:manipulation;}
.rd-sb-txt{flex:1 1 auto;min-width:0;white-space:nowrap;overflow:hidden;
  text-overflow:ellipsis;color:var(--sub);}
#rdSpeakBar.rd-sb-warn .rd-sb-txt{white-space:normal;color:#d98b4a;}
#rdSpeakBar button{flex:none;width:32px;height:30px;box-sizing:border-box;padding:0;
  font:600 13px/1 var(--sans);color:var(--txt);background:var(--navlink-bg);
  border:1px solid var(--navlink-bd);border-radius:7px;cursor:pointer;}
#rdSpeakBar button:hover{border-color:var(--head);color:var(--head);}

/* ── 吸顶标题折行修复（窄屏）────────────────────────────────────
   原布局：吸顶后 .rd-stick 左右各让 46px、标题行再叠 padding-right:84px
   给右上角 3 个 fixed 图标让位，作者名又占 30%，标题只剩 ~123px，
   而《以交易为生（原书第2版）》单行需 208px → 被挤成两行、作者被压没。
   修法：标题行整体下移到图标带（top:10+34=44px）下方，右侧让位即可归零，
   标题独占整行宽度单行显示；作者名仅在吸顶态隐藏（首屏仍正常显示）。 */
@media(max-width:720px){
  body.rd-scrolled .rd-stick{padding-top:48px;}
  body.rd-scrolled .rd-stick-row{padding-right:0;}
  body.rd-scrolled .rd-stick .rd-hero-author{display:none;}
  body.rd-scrolled .rd-stick h1{display:block;white-space:nowrap;overflow:hidden;
    text-overflow:ellipsis;-webkit-line-clamp:none;flex:1 1 auto;min-width:0;}
}
/* ── /听书 v4 段尾 ── */

/* ── v5：音色可用性反馈 + Aa 面板字体选择 ──────────────────────
   灰显 = 本机没装这类系统语音；提示写在面板内，不再静默回落到「自动」。 */
.rd-sp-chips button.na{opacity:.42;border-style:dashed;}
.rd-sp-chips button.na:hover{border-color:var(--navlink-bd);color:var(--txt);}
.rd-sp-hint{margin:0;font-size:.66rem;line-height:1.5;color:var(--sub);}
.rd-sp-hint[hidden]{display:none;}
.rd-sp-hint.warn{color:#d98b4a;}
.rd-sp-help{font-size:.66rem;line-height:1.55;color:var(--sub);}
.rd-sp-help summary{cursor:pointer;color:var(--head);font-weight:600;list-style:none;}
.rd-sp-help summary::-webkit-details-marker{display:none;}
.rd-sp-help summary::before{content:'▸ ';}
.rd-sp-help[open] summary::before{content:'▾ ';}
.rd-sp-help p{margin:5px 0 0;}
#rdPanel .rd-font-row{gap:8px;}
#rdPanel .rd-font-sel{flex:1 1 auto;min-width:0;max-width:150px;cursor:pointer;
  font:600 12px/1.4 var(--sans);padding:4px 7px;border-radius:7px;
  border:1px solid var(--navlink-bd);background:var(--navlink-bg);color:var(--txt);}
#rdPanel .rd-font-sel:disabled{opacity:.6;}
#rdPanel .rd-font-note{margin:-4px 0 0;font-size:.66rem;line-height:1.45;color:var(--sub);}
/* ── /v5 段尾 ── */


