/* ============================================================
   ink.css · 全站「水墨山河」墨色覆盖层 v1
   ------------------------------------------------------------
   设计：延续首页的深色水墨体系 —— 墨底 #0e0f12 / 浮层 #14161b /
        金 #e8b968 / 朱 #b1382c / 米白字 #f6efe2。
   实施约定：本文件只做「覆盖」，不改动 style.css / theme.css /
             lesson.css 等原文件；变量整体重映射 + 少量硬编码修正。
             摘掉 index.html 里这一行 <link> 即可整体回退宣纸主题。
   注意：加载顺序必须在 theme.css 之后；home.css 仍在其后（首页专属）。
   ============================================================ */

/* ---------- 0. 三套设计令牌整体墨色化 ---------- */
:root{
  color-scheme: dark;
  /* style.css 基础令牌 */
  --ink:#f6efe2; --muted:#a99e86; --line:#2b2c33;
  --paper:#0e0f12; --card:#14161b;
  --zhu:#c0453a; --zhu-soft:rgba(226,88,58,.14);
  --green:#8fbf77; --green-soft:rgba(130,180,95,.14);
  --gold:#d4a04a; --gold-soft:rgba(232,185,104,.12);
  --blue:#7ab0cf; --blue-soft:rgba(105,150,185,.16);
  --shadow:0 18px 48px rgba(0,0,0,.5);
  --shadow-soft:0 10px 26px rgba(0,0,0,.4);
  /* ziwu 色系（fangshu / 轮盘配套） */
  --ziwu-page:#0e0f12;
  --ziwu-surface:#14161b;
  --ziwu-ink:#f6efe2;
  --ziwu-muted:#a99e86;
  --ziwu-line:#2b2c33;
  --ziwu-cinnabar:#c0453a;
  --ziwu-cinnabar-deep:#e0705a;
  --ziwu-jade:#7fae8f;
  --ziwu-gold:#d4a04a;
  --ziwu-night:#1a1c22;
  --ziwu-wheel-ink:#f6efe2;
  --ziwu-wheel-line:#2b2c33;
  --ziwu-ink-soft:#a99e86;

  /* theme.css 典藏令牌 */
  --xuan-hi:#17181d;
  --xuan-1:#14161b;
  --xuan-2:#101116;
  --xuan-3:#2b2c33;
  --mo-1:#f6efe2;
  --mo-2:#d6cbb2;
  --mo-3:#a99e86;
  --zhu-deep:#e0705a;
  --zhu-bright:#c0453a;
  --jin:#d4a04a;
  --jin-soft:#f3d9a0;
  --emboss:inset 0 1px 0 rgba(255,255,255,.05);
  --deboss:inset 0 -1px 0 rgba(0,0,0,.35);

  /* lesson.css 医馆令牌 */
  --paper:#0e0f12;
  --paper-card:#14161b;
  --paper-deep:#1a1b21;
  --paper-veil:rgba(10,11,14,.65);
  --ink:#e9e2d5;
  --ink-soft:#b7ad99;
  --ink-faint:#8a8272;
  --bronze:#d4a04a;
  --bronze-bright:#e8b968;
  --bronze-soft:#c9a86e;
  --cinnabar:#c0453a;
  --cinnabar-bri:#e2583a;
  --dai:#7fae8f;
  --line:#2b2c33;
  --line-strong:#3a3b42;
  --gold-hl:rgba(232,185,104,.16);
  --gold-hl-ink:#f3d9a0;
  --wood:#14161b;
}

/* ---------- 1. 全局：墨色纸感 ---------- */
body{
  background:
    radial-gradient(ellipse 80% 50% at 50% -5%, rgba(212,160,74,.08), transparent 60%),
    radial-gradient(ellipse 60% 40% at 100% 100%, rgba(159,47,36,.06), transparent 70%),
    linear-gradient(180deg,#14161b 0%,#0e0f12 40%,#0c0d10 100%);
  background-attachment:fixed;
  color:#e9e2d5;
}
/* 纸纹噪点：multiply 在深底上会发死黑，换成弱叠加 */
@media (min-width:768px) and (prefers-reduced-motion:no-preference){
  body::before{
    mix-blend-mode:overlay;
    opacity:.3;
  }
}
::selection{ background:rgba(232,185,104,.32); color:#f6efe2 }

/* 滚动条 */
*{ scrollbar-color:#3a3b42 #0e0f12 }
::-webkit-scrollbar{ width:10px; height:10px }
::-webkit-scrollbar-track{ background:#0e0f12 }
::-webkit-scrollbar-thumb{ background:#2b2c33; border-radius:6px; border:2px solid #0e0f12 }
::-webkit-scrollbar-thumb:hover{ background:#3a3b42 }

/* ---------- 2. 顶栏与导航：墨色玻璃 ---------- */
.hd{
  background:rgba(15,16,20,.92);
  backdrop-filter:blur(10px); -webkit-backdrop-filter:blur(10px);
  border-bottom:1px solid rgba(232,185,104,.22);
}
.hd .eyebrow{ color:#e8b968 }
.hd h1{ color:#f6efe2 }
.hd .sub{ color:rgba(214,203,178,.72) }
.hero-meta span{
  background:rgba(255,253,247,.05);
  border-color:rgba(232,185,104,.28);
  color:#d6cbb2;
}
.ntab{
  background:rgba(255,253,247,.06);
  border:1px solid rgba(232,185,104,.24);
  color:#cfc4a8;
}
.ntab:hover,.ntab:focus-visible{ border-color:#e8b968; color:#e8b968 }
.ntab.on{ background:#e8b968; border-color:#e8b968; color:#241a08; box-shadow:0 6px 18px rgba(232,185,104,.28) }
.nav .nav-dl{
  border-color:rgba(232,185,104,.55); color:#e8b968; font-weight:600;
  background:rgba(232,185,104,.1);
}
.nav .nav-dl:hover,.nav .nav-dl:focus-visible{
  background:rgba(232,185,104,.2); border-color:#e8b968; color:#f3d9a0;
}
.nav .nav-dl[hidden]{ display:none }
.nav .dl-nav-short{ display:none }
.nav-drop .nav-drop-menu{
  background:#14161b;
  border-color:rgba(232,185,104,.3);
  box-shadow:0 18px 44px -12px rgba(0,0,0,.65);
}
.ndmi-txt strong{ color:#f6efe2 }
.ndmi-txt small{ color:rgba(214,203,178,.6) }
.ndmi:hover{ background:rgba(232,185,104,.1) }

/* ---------- 3. 通用面板与卡片 ---------- */
.panel{
  background:linear-gradient(180deg,#17181d,#14161b);
  border:1px solid #2b2c33;
  box-shadow:0 16px 38px rgba(0,0,0,.45);
}
.hint{
  background:rgba(212,160,74,.08);
  border-color:rgba(212,160,74,.3);
  color:#d6cbb2;
}
.grp{ background:rgba(232,185,104,.1); color:#f3d9a0 }
.originwarn{ background:#2a120e; color:#f0c9b8; border-color:rgba(226,88,58,.4) }

/* 选项 / 词条 / 图鉴卡 */
.opt,.flag,.tcard,.pcard,.acard,.chcard,.ritem,.faq{
  background:#14161b;
  border-color:#2b2c33;
  color:#e9e2d5;
}
.opt:hover,.flag:hover,.tcard:hover,.pcard:hover,.sbtn:hover{
  border-color:rgba(232,185,104,.5);
  box-shadow:0 8px 18px rgba(0,0,0,.45);
}
.opt:has(input:checked),.flag:has(input:checked),.tcard.on,.pcard.on{
  background:rgba(226,88,58,.12);
  border-color:#c0453a;
}
.tcard b,.pcard b{ color:#f6efe2 }
.tcard small,.pcard small{ color:#a99e86 }

/* 输入与检索 */
.sbar input,.rateline input,textarea,select{
  background:#101116; color:#f6efe2;
  border-color:#2b2c33;
  color-scheme:dark;
}
select option{ background:#101116; color:#f6efe2; }
.sbar input::placeholder,textarea::placeholder{ color:#6f6857 }
.sbar input:focus,.rateline input:focus{ border-color:#d4a04a }
.sbtn{
  background:#14161b; border-color:rgba(232,185,104,.4); color:#e8b968;
}
.sbtn:hover{ background:rgba(232,185,104,.1) }
.sbtn.go,.sbtn.active{ background:#e8b968; border-color:#e8b968; color:#241a08 }

/* 悬浮主按钮 */
#btn{
  background:linear-gradient(150deg,#e8b968,#d4a04a);
  color:#241a08;
  box-shadow:0 14px 30px rgba(212,160,74,.35);
}
#btn:hover,#btn:focus-visible{ background:#f3d9a0 }

/* 结果区 / 分区标题 */
.result{ background:#14161b; border-color:#2b2c33 }
.stage{ color:#f3d9a0; border-bottom-color:rgba(232,185,104,.4) }
.ph,.chn,.tpname,.tname,.pmname,.fname{ color:#e0705a }
.ph{ border-bottom-color:rgba(232,185,104,.35) }
.loading{ color:#a99e86 }
.search-offline{
  background:#14161b; border:1px dashed rgba(232,185,104,.35); color:#d6cbb2;
}
.search-offline code{ background:#0e0f12; color:#f3d9a0; border-color:#2b2c33 }

/* ---------- 4. 书库（learn tab：bs-* 家族） ---------- */
.bs-head{
  background:
    radial-gradient(ellipse 70% 100% at 0% 0%, rgba(255,253,247,.04), transparent 60%),
    linear-gradient(180deg,#17181d,#14161b);
  border-color:rgba(232,185,104,.16);
  box-shadow:0 14px 40px -18px rgba(0,0,0,.6);
}
.bs-ziwu,.bs-stats{
  background:linear-gradient(180deg,#17181d,#14161b);
  border-color:rgba(232,185,104,.16);
  box-shadow:0 10px 28px -14px rgba(0,0,0,.55);
}
.bs-zw-item,.bs-stat{
  background:#101116;
  border-color:#2b2c33;
  box-shadow:none;
}
.bs-stat::before{ background:linear-gradient(135deg, rgba(232,185,104,.3), transparent 60%) }
.bs-quote{ color:#b7ad99 }
.bs-quote-text em,.bs-quote-text b{ color:#e8b968 }
.bs-ft-warn{
  background:rgba(159,47,36,.1);
  border:1px solid rgba(226,88,58,.28);
  color:#e8c4b4;
}
.bs-ft-warn b{ color:#f0a08c }

/* 书卡：JS 注入的 --book-bg 是浅色封面底，统一压成墨色描金 */
.bs-card{
  background:#14161b !important;
  border:1px solid rgba(232,185,104,.18);
  box-shadow:0 12px 32px -14px rgba(0,0,0,.55);
}
.bs-card:hover{ border-color:rgba(232,185,104,.45) }
.bs-cover{ background:linear-gradient(160deg,#1b1c22,#101116) !important }
.bs-cover-icon{ color:#e8b968 }
.bs-card-title{ color:#f6efe2 }
.bs-card-sub{ color:#d4a04a }
.bs-card-desc{ color:#a99e86 }
.bs-card-author{ color:#8a8272 }

/* learn 内嵌课程 / 原书面板容器 */
.book-home,.lesson-root,.learn-root{ color:#e9e2d5 }
.start-hint,.bs-start-hint{ color:#b7ad99 }

/* ---------- 5. 课程页（lesson.css 家族）的硬编码修正 ---------- */
/* 内嵌白顶高光在墨底上过亮，统一换成弱金高光 */
.mini-btn,.foot-btn,.bk-btn,.ls-card,.lesson-card{
  box-shadow:inset 0 1px 0 rgba(255,255,255,.06);
}
/* 白底小卡（如代码块/示例框）压墨 */
.lesson-white,.ls-white{ background:#14161b !important; color:#e9e2d5 }

/* ---------- 6. 原书阅读器 ---------- */
#book-root .panel{ background:#101116 }
.bookview-toolbar,.bv-toolbar,.page-nav{
  background:#14161b; border-color:#2b2c33; color:#d6cbb2;
}
.bookview-page img{ background:#f4eee1 } /* 扫描页本体保持纸白，做圆角描边 */
.bookview-page{
  background:#f4eee1; border-radius:6px; padding:6px;
  box-shadow:0 18px 44px rgba(0,0,0,.6);
}

/* ---------- 6.5 问诊舞台（diagnose tab：scene / evidence / 结果弹窗） ---------- */
.scene{
  background:#14161b;
  box-shadow:0 26px 70px rgba(0,0,0,.55);
}
.scene-bg{ filter:saturate(.7) brightness(.82) }
.scene-veil{
  background:linear-gradient(180deg,rgba(14,15,18,.55) 0%,rgba(14,15,18,.25) 36%,rgba(14,15,18,.72) 100%);
}
.evidence{
  background:rgba(20,22,27,.92);
  border-color:rgba(232,185,104,.28);
  box-shadow:0 14px 34px rgba(0,0,0,.5);
  color:#d6cbb2;
}
.ev-hint{ color:#a99e86 }
/* 辨证结果卡（内联态）：style.css 里 .result .card 写死浅底 #fffaf4、
   .comp 写死 #fbfaf6，而墨色层只覆盖了弹窗态 #result.revealed，
   于是「六经全览 → 用此经试辨证」出来的结果卡是浅底 + 近白字（几乎不可读）。
   这里补齐内联态，配色沿用同一套墨色令牌。 */
.result .card{
  background:#14161b;
  border-color:#2b2c33;
  color:#e9e2d5;
}
.result .card .fname{ color:#e0705a }
.result .card .chan{ color:#a99e86 }
.result .card .sec{ border-top-color:#2b2c33 }
.result .card .sec b{ color:#f6efe2 }
.result .card .steps li{ color:#d6cbb2 }
.result .card .comp{
  background:#1a1c22; border-color:#2b2c33; color:#e9e2d5;
}
.result .card .contra{
  background:rgba(192,69,58,.14); color:#e0705a;
}
.result .card .warnline{
  background:rgba(192,69,58,.14); color:#e0705a;
}
.result .card .lockmsg{
  background:rgba(192,69,58,.16); color:#e8a89c;
}
.result .card .tag.ok{ background:rgba(130,180,95,.16); color:#a8cf8e }
.result .card .tag.risk{ background:rgba(226,88,58,.16); color:#e0705a }
.result .card .tag.warn{ background:rgba(232,185,104,.16); color:#e8b968 }
.result .card .lead{ color:#d6cbb2 }
/* 原文召回（.cite）与免责（.disc）也写死了浅底 */
.result .card .cite li{
  background:#1a1c22; border-color:#2b2c33; color:#d6cbb2;
}
/* .ctext 在 style.css 里写死 #2a2118（深棕），墨底上等于隐形 */
.result .card .ctext{ color:#d6cbb2 }
.result .card .ctext h1,
.result .card .ctext h2{ color:#e0705a; border-bottom-color:rgba(192,69,58,.28) }
.result .card .ctext h3{ color:#e0705a }
.result .card .ctext h4{ color:#e8b968 }
.result .card .ctext code{
  background:#24262e; color:#e9e2d5;
}
.result .card .cref{ color:#a99e86 }
.result .card .disc{
  background:#1a1c22; color:#a99e86;
}
.result .card .disc b{ color:#e0705a }
.result .card .raghint{ color:#8a8272 }
.result .card .tadvice li{
  background:rgba(232,185,104,.1); color:#e8b968;
}
.result .card .pmerge{
  background:#1a1c22; border-color:#c0453a;
}
.result .card .pmname{ color:#e0705a }
.result .card .pmname.off{ color:#a99e86 }
/* 空态占位（未辨证时的虚线框）同样是浅底 */
.result:empty::before{
  background:#14161b; border-color:#2b2c33; color:#a99e86;
}
#result.revealed{
  background:linear-gradient(180deg,#17181d,#14161b);
  border-color:#c0453a;
  box-shadow:0 0 0 1px rgba(232,185,104,.25) inset,0 34px 90px rgba(0,0,0,.65),0 0 60px rgba(190,60,40,.2);
  color:#e9e2d5;
}
.reveal-top{ background:linear-gradient(180deg,#17181d 80%,transparent) }
.reveal-title{ color:#e0705a }
.reveal-hint{ color:#a99e86 }
.game-modal-box{
  background:#14161b; color:#e9e2d5;
  box-shadow:0 0 0 1px rgba(232,185,104,.25) inset,0 34px 90px rgba(0,0,0,.65),0 0 60px rgba(190,60,40,.2);
}

/* ---------- 6.6 经络图鉴（meridians tab） ---------- */
.mer-info-panel{
  background:#14161b; border-color:#2b2c33;
}
.mer-note{
  background:rgba(212,160,74,.07);
  border-color:rgba(212,160,74,.45);
  color:#c9bb9c;
}

/* 侧栏 / 芯片：已学不要浅底浅字。覆盖顺序 默认→已学→当令→聚焦最后 */
.mer-side{
  background:#14161b;
  border-color:rgba(232,185,104,.28);
  scrollbar-color:#3a3b42 transparent;
}
.mer-side::-webkit-scrollbar-thumb{ background:#3a3b42 }
.mer-side-hd{ color:#e0705a }
.mer-side-cnt{ color:#a99e86 }
.mer-side-cnt b{ color:#f6efe2 }
.mer-legend-v{ scrollbar-color:#3a3b42 transparent }
.mer-legend-v::-webkit-scrollbar-track{ background:rgba(0,0,0,.25) }
.mer-legend-v::-webkit-scrollbar-thumb{ background:#3a3b42 }
.mer-legend-v::-webkit-scrollbar-thumb:hover{ background:#4a4b52 }
.mer-legend-v .mer-chip{
  background:#101116; color:#f6efe2;
  border-color:rgba(232,185,104,.22);
}
.mer-legend-v .mer-chip-abbr{ color:var(--mc,#e8b968) }
.mer-chip.mer-chip-done{
  background:#101116;
  border-color:rgba(232,185,104,.35);
  color:#f6efe2;
}
.mer-chip.mer-chip-done .mer-chip-done-t::after{ color:#e8b968 }
.mer-chip.mer-chip-off{
  background:#101116;
  color:#a99e86;
  opacity:.55;
}
.mer-chip.mer-chip-active{
  box-shadow:inset 0 0 0 1px #e8b968;
  border-color:#e8b968;
}
.mer-chip.mer-chip-focus,
.mer-legend-v .mer-chip.mer-chip-focus{
  background:#c0453a; color:#fff5ef; border-color:#c0453a;
  box-shadow:0 4px 12px rgba(192,69,58,.28);
}
.mer-legend-v .mer-chip.mer-chip-focus .mer-chip-abbr{ color:#fff }

/* 信息面板内部：深底米字，去掉宣纸浅块 */
.mer-info-panel h3{ color:#e0705a }
.mer-info-panel .mer-info-meta{ color:#a99e86 }
.mer-info-panel .mer-info-meta b{ color:#f6efe2 }
.mer-info-desc{
  background:#101116; color:#e9e2d5;
  border:1px solid rgba(232,185,104,.16);
}
.mer-info-list h4{
  background:#14161b; color:#f6efe2;
}
.mer-info-pt:hover{ background:rgba(232,185,104,.1) }
.mer-info-pt b{ color:#e0705a }
.mer-info-pt span{ color:#e9e2d5 }
.mer-info-empty{ color:#a99e86 }

/* 搜索条 / HUD / 正侧位 tab：墨底金边；画布内部浅解剖底保留 */
.mer3d-canvas-wrap{ border-color:rgba(232,185,104,.28) }
.mer3d-search-iwrap{
  background:#14161b;
  border-color:rgba(232,185,104,.28);
  box-shadow:0 3px 14px rgba(0,0,0,.4);
}
.mer3d-search-input{ color:#f6efe2 }
.mer3d-search-input::placeholder{ color:#a99e86 }
.mer3d-search-clear{ color:#a99e86 }
.mer3d-search-drop{
  background:#14161b;
  border-color:rgba(232,185,104,.28);
  box-shadow:0 8px 26px rgba(0,0,0,.45);
}
.mer3d-search-item{ color:#e9e2d5 }
.mer3d-search-item:hover,
.mer3d-search-item.active{ background:rgba(232,185,104,.12) }
.mer3d-si-code{ color:#e0705a }
.mer3d-si-mer{ color:#a99e86 }
.mer3d-hud .sbtn{
  background:#101116; color:#f6efe2;
  border:1px solid rgba(232,185,104,.35);
}
.mer3d-hud .sbtn.active{
  background:#c0453a; color:#fff5ef; border-color:#c0453a;
}
.mer3d-view-tabs{
  background:#14161b;
  border-color:rgba(232,185,104,.28);
  box-shadow:0 2px 10px rgba(0,0,0,.4);
}
.mer3d-view-tabs .mer3d-view-tab{ color:#d6cbb2 }
.mer3d-view-tabs .mer3d-view-tab:hover{
  background:rgba(232,185,104,.12); color:#f6efe2;
}
.mer3d-view-tabs .mer3d-view-tab.active{
  background:#c0453a; color:#fff5ef;
  box-shadow:0 1px 4px rgba(192,69,58,.32);
}

/* ---------- 经络手动编辑器（?editor=1 站主工具） ---------- */
.mer3d-edit-btn.active{
  background:#d4a04a; color:#241705; border-color:#d4a04a;
}
.mer3d-edit-btn.mer3d-edit-float{
  position:absolute; left:10px; bottom:10px; z-index:6;
}
.mer3d-edit-banner{
  position:absolute; top:8px; left:50%; transform:translateX(-50%);
  z-index:6; max-width:88%;
  background:rgba(192,69,58,.92); color:#fff5ef;
  border:1px solid rgba(255,220,190,.35); border-radius:8px;
  font-size:12px; line-height:1.5; padding:5px 12px;
  box-shadow:0 2px 10px rgba(0,0,0,.45); pointer-events:none;
  white-space:nowrap; overflow:hidden; text-overflow:ellipsis;
}
.mer3d-edit-panel{
  position:absolute; top:44px; right:10px; z-index:6;
  width:min(250px, calc(100% - 20px)); max-height:calc(100% - 60px); overflow:auto;
  box-sizing:border-box;
  background:rgba(20,22,27,.96); color:#f6efe2;
  border:1px solid rgba(232,185,104,.28); border-radius:10px;
  box-shadow:0 4px 18px rgba(0,0,0,.5);
  font-size:13px; line-height:1.5;
}
.mer3d-edit-syncbar{
  display:flex; flex-direction:column; gap:7px;
  padding:9px 12px; border-bottom:1px solid rgba(232,185,104,.14);
  background:rgba(232,185,104,.045);
}
.mer3d-edit-auto{
  display:flex; align-items:center; gap:7px;
  color:#e9e2d5; font-size:12px; cursor:pointer;
}
.mer3d-edit-auto input{
  width:15px; height:15px; margin:0; flex:none; accent-color:#d4a04a;
}
.mer3d-edit-sync-mer{ width:100%; }
.mer3d-edit-panel .sbtn:disabled{
  opacity:.42; cursor:not-allowed; filter:saturate(.35);
}
.mer3d-edit-disabled-tip{
  display:block; margin-top:6px; color:#a99e86; font-size:11px;
}
.mer3d-edit-hd{
  display:flex; align-items:center; justify-content:space-between;
  padding:8px 12px; color:#f3d9a0; font-weight:600;
  border-bottom:1px solid rgba(232,185,104,.18);
}
.mer3d-edit-x{
  background:none; border:none; color:#c9bb9c; font-size:14px;
  cursor:pointer; padding:2px 6px;
}
.mer3d-edit-x:hover{ color:#f3d9a0 }
.mer3d-edit-info{ padding:10px 12px 6px }
.mer3d-edit-card b{ color:#f3d9a0; font-size:14px }
.mer3d-edit-chip{
  display:inline-block; margin-left:6px; padding:0 6px;
  background:rgba(232,185,104,.12); color:#f3d9a0;
  border:1px solid rgba(232,185,104,.3); border-radius:6px; font-size:11px;
}
.mer3d-edit-sub{ color:#c9bb9c; font-size:12px }
.mer3d-edit-val{ color:#d4a04a; font-size:15px }
.mer3d-edit-ops{ display:flex; gap:6px; margin:8px 0 4px; flex-wrap:wrap }
.mer3d-edit-ops .sbtn{ font-size:12px; padding:3px 9px }
.mer3d-edit-tip{ color:#a99e86; font-size:12px; margin:6px 0 2px }
.mer3d-edit-listhd{
  padding:6px 12px 2px; color:#c9bb9c; font-size:12px;
  border-top:1px solid rgba(232,185,104,.14);
}
.mer3d-edit-listhd b{ color:#d4a04a }
.mer3d-edit-list{ padding:0 8px 8px }
.mer3d-edit-empty{ color:#a99e86; font-size:12px; padding:4px 4px 0 }
.mer3d-edit-row{
  display:flex; align-items:center; gap:4px;
  padding:3px 4px; border-bottom:1px dashed rgba(232,185,104,.1);
}
.mer3d-edit-lab{
  flex:1; min-width:0; cursor:pointer;
  white-space:nowrap; overflow:hidden; text-overflow:ellipsis;
  color:#e9e2d5; font-size:12px;
}
.mer3d-edit-lab:hover{ color:#f3d9a0 }
.mer3d-edit-row button{
  background:none; border:none; color:#a99e86; cursor:pointer;
  font-size:12px; padding:2px 4px; flex:none;
}
.mer3d-edit-row button:hover{ color:#c0453a }
.mer3d-edit-ft{
  display:flex; gap:6px; justify-content:flex-end; flex-wrap:wrap;
  padding:8px 10px; border-top:1px solid rgba(232,185,104,.18);
}
.mer3d-edit-ft .sbtn{ font-size:12px; padding:3px 10px }
.mer3d-edit-ft .mer3d-edit-save{ flex:1 0 100%; }
.mer3d-edit-save-msg{
  min-height:16px; padding:0 10px 8px;
  color:#a99e86; font-size:11px; text-align:right;
}
.mer3d-edit-save-msg.ok{ color:#8fd0a8 }
.mer3d-edit-save-msg.err{ color:#e8a08c }
.mer3d-edit-export-ov{
  position:absolute; inset:0; z-index:7;
  background:rgba(10,11,14,.72);
  display:flex; align-items:center; justify-content:center;
}
.mer3d-edit-export-ov[hidden]{ display:none }
.mer3d-edit-export-box{
  width:min(420px,92%); max-height:90%; overflow:auto;
  background:#14161b; color:#f6efe2;
  border:1px solid rgba(232,185,104,.35); border-radius:10px;
  padding:12px 14px; font-size:13px;
}
.mer3d-edit-export-box h4{ color:#f3d9a0; margin:0 0 6px }
.mer3d-edit-export-box p{ color:#c9bb9c; font-size:12px; margin:0 0 8px }
.mer3d-edit-export-box code{ color:#d4a04a }
.mer3d-edit-export-box textarea{
  width:100%; height:180px; resize:vertical;
  background:#0e0f12; color:#e9e2d5;
  border:1px solid rgba(232,185,104,.22); border-radius:6px;
  font:12px/1.5 Consolas,monospace; padding:8px;
}
.mer3d-edit-export-ops{ display:flex; gap:8px; justify-content:flex-end; margin-top:8px }

/* 点穴/经络弹层：.modal-detail 正文走米字，不要深字压墨底 */
.game-modal-box .modal-detail,
.game-modal-box .modal-detail p,
.game-modal-box .modal-detail li,
.game-modal-box .modal-detail span,
.game-modal-box .modal-detail > div{ color:#e9e2d5 }
.game-modal-box .modal-detail h3,
.game-modal-box .modal-detail b{ color:#f3d9a0 }
.game-modal-box .modal-detail .chip{
  background:rgba(232,185,104,.12); color:#f3d9a0;
  border-color:rgba(232,185,104,.3);
}
.game-modal-box .mu-tip,
.game-modal-box .modal-detail .mu-tip{
  background:rgba(232,185,104,.08); color:#c9bb9c;
}

/* ---------- 7. 子午流注轮盘 · 五行配色版 ---------- */
/* 扇区：默认微沉，当前时辰提亮描金，选中金虚线 */
.ziwu-sector{ fill-opacity:.82; stroke:#0e0f12; stroke-width:1.6; cursor:pointer;
  transition:fill-opacity .16s, stroke .16s, filter .16s }
.ziwu-sector:hover{ fill-opacity:.94; stroke:rgba(232,185,104,.55) }
.ziwu-sector.is-current{ fill-opacity:1; stroke:#e8b968; stroke-width:2.6 }
.ziwu-sector.is-selected{ fill-opacity:1; stroke:#f3d9a0; stroke-width:2.6; stroke-dasharray:6 4; transform:none }
.ziwu-sector:focus-visible{ stroke:#f3d9a0; stroke-width:3.4; outline:none }
/* SVG 文字：精致层级 —— 时辰衬线金字 / 时间小号 / 脏腑大衬线 / 说明淡字 */
.ziwu-texts{ pointer-events:none }
.zw-branch{ font-family:var(--serif-cn); font-size:17px; font-weight:700; fill:#f3d9a0 }
.zw-time{ font-family:"Noto Sans SC","PingFang SC",sans-serif; font-size:12.5px; font-weight:400;
  fill:rgba(246,239,226,.78); letter-spacing:.04em }
.zw-organ{ font-family:var(--serif-cn); font-size:27px; font-weight:600; fill:#f6efe2; letter-spacing:.06em }
.zw-role{ font-family:"Noto Sans SC","PingFang SC",sans-serif; font-size:12px; font-weight:400;
  fill:rgba(246,239,226,.66); letter-spacing:.06em }
.zw-g.is-current .zw-organ{ fill:#f3d9a0 }
.zw-g.is-selected .zw-organ{ fill:#f3d9a0 }
#zw-marker{ filter:drop-shadow(0 0 6px rgba(232,185,104,.8)) }
/* 五行图例 */
.zw-legend{
  display:flex; flex-wrap:wrap; justify-content:center; gap:8px 18px;
  margin-top:clamp(14px,2.6vw,20px);
}
.zw-lg-item{ display:inline-flex; align-items:center; gap:6px;
  font-size:12px; color:#d6cbb2; letter-spacing:.06em }
.zw-lg-item i{ width:12px; height:12px; border-radius:3px; flex:none;
  box-shadow:inset 0 0 0 1px rgba(246,239,226,.25) }
.zw-lg-item b{ font-family:var(--serif-cn); color:#f6efe2 }
.zw-lg-item small{ color:rgba(214,203,178,.55) }
/* 手机：轮盘缩小后隐藏时间/说明两环（信息已在下方详情呈现），保脏腑名可读 */
@media (max-width:620px){
  .zw-time,.zw-role{ display:none }
  .zw-organ{ font-size:34px }
  .zw-branch{ font-size:22px }
}
@media (prefers-reduced-motion:reduce){
  .ziwu-sector{ transition:none }
}

/* ---------- 7.x 子午流注轮盘旧标签残留规则（HTML 标签层已停用） ---------- */
.ziwu-reset{
  background:rgba(232,185,104,.08);
  border-color:rgba(232,185,104,.45);
  color:#e8b968;
}
.ziwu-branch{
  background:#14161b; border:1px solid rgba(232,185,104,.4); color:#f3d9a0;
}
/* 扇面上的脏腑名/时间段：扇面是浅茶色，回归深墨字；
   夜间深色扇区的反白由 theme.css 的高特异性规则继续负责 */
.ziwu-label-content{ color:#3a2f22 }
/* 宜/避建议胶囊（最外圈）：改墨底金字，浅底浅字的旧方案在墨色下不可读 */
.ziwu-advice{
  background-color:rgba(20,22,27,.94);
  border-color:rgba(232,185,104,.4);
  color:#f3d9a0;
  box-shadow:0 3px 10px rgba(0,0,0,.4);
}
.ziwu-label-slot.is-selected .ziwu-advice{
  background-color:rgba(20,22,27,.97);
  border-color:#c0453a;
}
/* 下半圈标签整体旋转了 180°，把时间段排到外侧，
   翻转后即与上半圈一样落在内圈，十二时辰的时间环对齐 */
.ziwu-label-slot.is-flipped .ziwu-label-content small{ order:-1 }
/* 太极：标准竖式 —— 左半墨、右半白，S 曲线上下走向，
   上鱼头（墨圆探入右上）、下鱼头（白圆探入左下），
   两个鱼眼落在竖直中线上（上一、下一）。
   颜色固定深浅两色，不随 --ink 令牌走（令牌已映射为浅色）。 */
.taiji-mark{
  background:#f0e8d6; border-color:#1c1814;
  box-shadow:0 0 0 10px rgba(232,185,104,.10);
}
/* 左半墨 */
.taiji-mark::before{
  background:#1c1814;
  width:50%; height:100%; top:0; left:0;
  border-radius:150px 0 0 150px;
}
/* 上鱼头：墨圆，圆心在 (50%,25%) */
.taiji-mark::after{
  background:#1c1814;
  top:0; left:25%; width:50%; height:50%;
}
/* 下鱼头：白圆，圆心在 (50%,75%) */
.taiji-mark span{
  background:#f0e8d6;
  top:50%; left:25%; width:50%; height:50%; right:auto;
}
/* 鱼眼：白点嵌上鱼头心 (50%,25%)，墨点嵌下鱼头心 (50%,75%)。
   ::after 绘制顺序在子元素之后会盖住白点，鱼眼必须提层 */
.taiji-mark i{ background:#f0e8d6; top:12.5%; left:37.5%; bottom:auto; z-index:1 }
.taiji-mark b{ background:#1c1814; top:62.5%; left:37.5%; bottom:auto; z-index:1 }
/* 桌面端轮盘文字收小一号，更精致 */
@media (min-width:900px){
  .ziwu-label-content strong{ font-size:25px }
  .ziwu-label-content small{ font-size:12px }
  .ziwu-branch{ width:44px; height:44px; font-size:20px; border-width:2px }
  .ziwu-advice{ font-size:12px; padding:4px 10px }
}

/* ---------- 8. 手机端增宽：逐层削减嵌套内边距，把屏宽还给内容 ----------
   实测（390px 视口）：书架/课程卡/讲稿/舞台/原书画布仅用到 77-79% 屏宽，
   原因是 wrap→shelf→卡片→内层的 padding 逐层叠加（每侧约 44px）。 */
@media (max-width:640px){
  /* 全局容器：19.5px → 10px */
  .wrap{ padding-inline:10px }
  /* 书架（learn tab）：24px → 6px */
  .learn-shelf{ padding:8px 6px 56px }
  /* 课程列表页：22px → 8px */
  .learn-wrap{ padding:22px 8px 48px }
  /* 课程播放页：面包屑/双栏/底栏 22px → 8px */
  .player-breadcrumb{ padding:12px 8px 0 }
  .player-main{ padding:12px 8px 16px; gap:14px }
  .player-foot{ padding:0 8px 32px }
  /* 原书 tab · 非宽屏模式（注解册等无 PDF 路径）的手机端 padding 压缩。
     之前这条规则只在 body.book-wide 下生效，于是无 PDF 的「注解册」等
     工具书依旧吃 24+20+30+20=94px/侧，390 屏只剩 67% 给文字（用户报
     「文字版太窄」）。这里补一条非宽屏模式，PDF/无 PDF 都吃到。 */
  .tabpanel[data-tab="book"] .panel{ padding:8px 8px 14px }
  .tabpanel[data-tab="book"] .book-wrap{ padding:8px 6px 28px }
  .tabpanel[data-tab="book"] .book-main{ padding:12px 12px 20px }
  .tabpanel[data-tab="book"] .book-content{ padding:14px 14px }
  .tabpanel[data-tab="book"] .book-pdf-wrap{ padding:6px }
  /* 宽屏模式（书有 PDF 且默认 wideMode=true）继续用 2-4px 极致压缩；
     写在下方 + body.book-wide 提特异性到 (0,4,1)，压过上面 (0,3,0) 的非
     宽屏基线。原来的 body.book-wide .book-main 等规则也保留作兜底。 */
  body.book-wide .tabpanel[data-tab="book"] .panel{ padding:4px }
  body.book-wide .tabpanel[data-tab="book"] .book-wrap{ padding:6px 2px 24px }
  body.book-wide .tabpanel[data-tab="book"] .book-main{ padding:10px 4px 18px }
  body.book-wide .tabpanel[data-tab="book"] .book-content{ padding:18px 20px }
  body.book-wide .tabpanel[data-tab="book"] .book-pdf-wrap{ padding:2px }
  /* book-wide 模式：进一步砍到 4-6px，让画布用满屏 */
  body.book-wide main.wrap{ padding-inline:4px }
  body.book-wide #book-root.panel{ padding:4px }
  body.book-wide .book-wrap{ padding:6px 2px 24px }
  body.book-wide .book-main{ padding:10px 4px 18px }
  body.book-wide .book-pdf-wrap{ padding:2px }
  /* 首页子午轮盘：卡内边距收窄 + 轮盘可破卡占 88vw */
  .home-tab .home-ziwu{ padding-inline:8px }
  .home-tab .ziwu-wheel-frame{ width:min(88vw,560px) }
}

/* ---------- 9. 打印保持浅色（纸张打印不出深底） ---------- */
@media print{
  body{ background:#fff; color:#000 }
}

/* ---------- 10. 课程三层笔记（速览/要点/全文） ---------- */
.ln-meta{ display:flex; flex-wrap:wrap; gap:12px; align-items:center;
  padding:10px 0; margin-top:10px; font-size:11.5px; color:#8a8272;
  border-bottom:1px solid #2b2c33; }
.ln-meta b{ color:#d4a04a; font-weight:500 }
.ln-ai{ color:#8fd0a8; border:1px solid rgba(120,190,150,.35); border-radius:999px; padding:1px 8px }
.ln-seg{ display:grid; grid-template-columns:repeat(3,1fr); gap:6px; margin:12px 0 0 }
.ln-seg button{ background:rgba(255,253,247,.04); border:1px solid #2b2c33; border-radius:8px;
  color:#a99e86; padding:9px 4px 7px; text-align:center; transition:.18s; cursor:pointer }
.ln-seg button b{ display:block; font-size:13px; color:#d6cbb2; font-weight:600 }
.ln-seg button small{ font-size:10.5px; color:#6f6857; letter-spacing:.05em }
.ln-seg button.on{ border-color:#e8b968; background:rgba(232,185,104,.1) }
.ln-seg button.on b{ color:#e8b968 }
.ln-seg button:hover{ transform:translateY(-1px); border-color:rgba(232,185,104,.5) }
.ln-layer{ display:none; padding:16px 2px 4px }
.ln-layer.on{ display:block; animation:lnFade .25s }
@keyframes lnFade{ from{opacity:0; transform:translateY(4px)} to{opacity:1} }
/* 速览 */
.ln-glance{ border:1px solid rgba(232,185,104,.3); border-radius:10px; padding:18px 20px;
  background:linear-gradient(150deg, rgba(232,185,104,.09), rgba(232,185,104,.02)) }
.ln-big{ font-family:var(--serif-cn); font-size:17.5px; color:#f3d9a0; line-height:1.9; margin:0 }
.ln-sub{ font-size:12.5px; color:#a99e86; margin:8px 0 0 }
.ln-chips{ display:flex; flex-wrap:wrap; gap:8px; margin-top:14px }
.ln-chips span{ font-size:12px; border:1px solid rgba(232,185,104,.35); color:#e8b968;
  border-radius:999px; padding:3px 12px; background:rgba(14,15,18,.3) }
.ln-cta{ margin-top:16px }
.ln-btn{ background:#e8b968; color:#241a08; border:0; border-radius:6px;
  padding:9px 18px; font-size:13px; font-weight:700; letter-spacing:.06em; cursor:pointer }
.ln-btn:hover{ background:#f3d9a0 }
/* 要点 */
.ln-plain{ border-left:3px solid #e8b968; background:rgba(232,185,104,.06);
  border-radius:0 8px 8px 0; padding:12px 15px; font-size:13.5px; color:#d6cbb2; line-height:2; margin:0 }
.ln-sec-h{ display:flex; align-items:center; gap:8px; margin:18px 0 10px;
  font-family:var(--serif-cn); font-size:14.5px; color:#f3d9a0; letter-spacing:.1em }
.ln-sec-h::after{ content:""; flex:1; height:1px;
  background:linear-gradient(90deg, rgba(232,185,104,.3), transparent) }
.ln-steps{ list-style:none; margin:0; padding:0; display:grid; gap:10px; counter-reset:lns }
.ln-steps li{ display:flex; gap:10px; align-items:flex-start; font-size:13.5px; color:#d6cbb2;
  counter-increment:lns }
.ln-steps li::before{ content:counter(lns, cjk-ideographic); flex:none; width:24px; height:24px;
  border:1px solid rgba(232,185,104,.4); border-radius:50%; display:grid; place-items:center;
  color:#e8b968; font-size:12px; font-family:var(--serif-cn); margin-top:3px }
.ln-steps li i{ font-style:normal; color:#d4a04a; margin-right:6px; font-size:12px; letter-spacing:.08em }
.ln-cards{ display:grid; grid-template-columns:repeat(auto-fit,minmax(140px,1fr)); gap:10px }
.ln-card{ border:1px solid #2b2c33; border-radius:8px; padding:11px 13px; background:#101116 }
.ln-card b{ font-family:var(--serif-cn); font-size:15px; display:block }
.ln-card b a{ color:#f6efe2; border-bottom:1px dashed rgba(232,185,104,.5) }
.ln-card small{ display:block; font-size:11px; color:#e0705a; margin:2px 0 6px; letter-spacing:.1em }
.ln-card p{ font-size:12px; color:#a99e86; line-height:1.7; margin:0 }
.ln-mnemonic{ border:1px dashed rgba(232,185,104,.45); border-radius:10px; padding:13px 16px;
  background:rgba(232,185,104,.05); text-align:center }
.ln-mnemonic span{ font-family:var(--serif-cn); font-size:15px; color:#f3d9a0; letter-spacing:.06em }
.ln-mnemonic small{ display:block; margin-top:6px; font-size:11px; color:#8a8272 }
.ln-src{ border-left:3px solid #e8b968; background:rgba(232,185,104,.08); border-radius:0 8px 8px 0; padding:11px 14px; margin:14px 0 0 }
.ln-src span{ display:block; font-size:11px; color:#e8b968; letter-spacing:.1em }
.ln-src p{ font-family:var(--serif-cn); font-size:14.5px; line-height:1.9; color:#eadfcf; margin:6px 0 0 }
.ln-facts{ display:grid; grid-template-columns:repeat(2,1fr); gap:8px; margin:14px 0 0 }
.ln-fact{ background:#101116; border:1px solid #2b2c33; border-radius:8px; padding:8px 11px }
.ln-fact span{ display:block; font-size:11px; color:#8a8272 }
.ln-fact b{ display:block; margin-top:3px; font-size:12.5px; color:#d6cbb2; font-weight:500 }
.ln-concepts{ display:grid; grid-template-columns:repeat(3,1fr); gap:8px }
.ln-concepts div{ background:rgba(232,185,104,.08); border:1px solid rgba(186,117,23,.45); border-radius:8px; padding:9px 11px }
.ln-concepts b{ display:block; color:#f3d9a0; font-size:13px; font-weight:500; margin-bottom:4px }
.ln-concepts p{ margin:0; color:#d2c8b8; font-size:12px; line-height:1.65 }
.ln-ex{ margin:0; padding-left:18px; color:#cfc3b2; font-size:13px }
.ln-ex li{ margin:5px 0 }
.ln-quiz{ display:grid; grid-template-columns:1fr 1fr; gap:10px }
.ln-q{ border:1px solid #385345; background:rgba(50,90,66,.16); border-radius:8px; padding:12px 14px }
.ln-q b{ display:block; font-weight:400; font-size:13px; color:#dbe8d6 }
.ln-q button{ margin-top:8px; border:1px solid #557a61; background:transparent; color:#8fd0a8; padding:3px 9px; cursor:pointer; font:inherit; font-size:11px }
.ln-q p{ margin:8px 0 0; font-size:12px; color:#bdd8c3; line-height:1.7 }
/* 配图病气流动动效（figures.js 输出的 .fig-flow 线）
   用 CSS 而非 SMIL：放大灯箱里同样生效，且可随系统「减少动效」停用 */
.fig-flow{ animation: figFlow 1s linear infinite }
@keyframes figFlow{ from{ stroke-dashoffset:0 } to{ stroke-dashoffset:-11 } }
/* 病机链顺序点亮（figures.js chain 模板，时长/延迟由元素内联 style 按环数给） */
.fig-seq{ animation: figSeq 2.8s ease-in-out infinite }
@keyframes figSeq{
  0%,58%,100%{ filter:none }
  18%{ filter:drop-shadow(0 0 7px rgb(212 167 69 / .85)) }
}
/* 穴位晕圈呼吸（assets.js A.dot 输出的 .fig-halo 外圈） */
.fig-halo{ animation: figHalo 3s ease-in-out infinite }
@keyframes figHalo{ 0%,100%{ opacity:.3 } 50%{ opacity:.75 } }
@media (prefers-reduced-motion: reduce){ .fig-flow,.fig-seq,.fig-halo{ animation:none } }

.fig-picker{ width:100%; margin-top:10px; text-align:left }
.fig-picker > span{ display:block; font-size:11px; color:#8a8272; letter-spacing:.08em; margin-bottom:7px }
.fig-picker > div{ display:grid; grid-template-columns:repeat(5,1fr); gap:7px }
.fig-picker button{ background:#14161b; border:1px solid #2b2c33; color:#a99e86; padding:8px 4px; cursor:pointer; font:inherit }
.fig-picker button b{ display:block; font-family:var(--serif-cn); font-size:18px; color:#f6efe2; font-weight:400 }
.fig-picker button small{ font-size:11px }
.fig-picker button.on{ background:rgba(176,56,48,.16); border-color:#854037; color:#e08a72 }
.fig-picker button.on b{ color:#e08a72 }
@media (max-width:640px){
  .ln-seg button b{ font-size:12px }
  .ln-seg button small{ display:none }
  .ln-cards{ grid-template-columns:repeat(2,1fr) }
  .ln-concepts, .ln-quiz, .ln-facts{ grid-template-columns:1fr }
}


/* ---------- 11. 随堂 AI 助教（lesson.js 注入 body） ---------- */
#la-fab{ position:fixed; right:18px; bottom:18px; z-index:30;
  display:inline-flex; align-items:center; gap:8px;
  background:linear-gradient(150deg,#e8b968,#d4a04a); color:#241a08;
  border:1px solid #f3d9a0; border-radius:999px; padding:10px 18px;
  font-size:13.5px; font-weight:700; letter-spacing:.05em; cursor:pointer;
  box-shadow:0 12px 28px rgba(212,160,74,.35); transition:transform .18s }
#la-fab:hover{ transform:translateY(-2px) }
#la-fab i{ font-style:normal; font-family:var(--serif-cn); font-size:15px;
  border:1px solid rgba(36,26,8,.4); border-radius:6px; padding:0 5px }
#la-panel{ position:fixed; right:18px; bottom:72px; z-index:31;
  width:min(390px, calc(100vw - 24px)); height:min(540px, 68vh);
  display:flex; flex-direction:column; overflow:hidden;
  background:#14161b; border:1px solid rgba(232,185,104,.3); border-radius:14px;
  box-shadow:0 24px 60px rgba(0,0,0,.6) }
#la-panel[hidden]{ display:none }
.la-head{ display:flex; align-items:center; justify-content:space-between; gap:10px;
  padding:12px 14px; border-bottom:1px solid #2b2c33; background:#101116 }
.la-head b{ font-family:var(--serif-cn); font-size:14.5px; color:#f3d9a0; display:block }
.la-head small{ display:block; font-size:10.5px; color:#8a8272; margin-top:2px }
#la-close{ background:none; border:0; color:#a99e86; font-size:20px; cursor:pointer;
  width:30px; height:30px; border-radius:8px }
#la-close:hover{ background:rgba(255,253,247,.08); color:#f6efe2 }
.la-msgs{ flex:1; overflow-y:auto; padding:12px; display:flex; flex-direction:column; gap:10px }
.la-m{ max-width:88%; font-size:13px; line-height:1.8 }
.la-m p{ margin:0 0 6px }
.la-m p:last-child{ margin-bottom:0 }
.la-user{ align-self:flex-end; background:#e8b968; color:#241a08;
  border-radius:12px 12px 2px 12px; padding:8px 12px; font-weight:500 }
.la-bot{ align-self:flex-start; background:#1b1c22; color:#d6cbb2;
  border:1px solid #2b2c33; border-radius:12px 12px 12px 2px; padding:9px 12px }
.la-sys{ align-self:center; font-size:11px; color:#8a8272; text-align:center;
  border:1px dashed #2b2c33; border-radius:8px; padding:6px 10px }
.la-sys b{ color:#d4a04a }
.la-err{ color:#e8a08c; border-color:rgba(226,88,58,.35) }
.la-loading{ color:#a99e86 }
.la-refs{ align-self:flex-start; width:88%; border-top:1px dashed #2b2c33; padding-top:8px }
.la-refs-h{ font-size:11px; color:#d4a04a; letter-spacing:.15em; margin-bottom:6px }
.la-ref{ background:#101116; border:1px solid #2b2c33; border-radius:8px;
  padding:8px 10px; margin-bottom:6px }
.la-ref b{ font-size:12px; color:#f6efe2; display:block }
.la-ref p{ font-size:11px; color:#8a8272; margin:3px 0 0; line-height:1.6 }

/* 图谱增强：AI 答中如触发药名命中，渲染「图谱资料」卡片 */
.la-herbs{ align-self:flex-start; width:96%; border-top:1px dashed #c9a05a; padding-top:8px }
.la-herbs-h{ font-size:11px; color:#d4a04a; letter-spacing:.15em; margin:6px 0 }
.la-herbs-h i{ font-style:normal; background:#d4a04a; color:#1b1c22;
  padding:1px 6px; border-radius:6px; margin-right:4px; font-size:10px }
.la-herb{ display:flex; gap:10px; background:#101116; border:1px solid #2b2c33;
  border-radius:8px; padding:9px; margin-bottom:8px }
.la-herb-imgs{ flex:0 0 130px; display:flex; flex-direction:column; gap:6px }
.la-herb-imgs img{ width:100%; height:auto; max-height:200px; object-fit:contain;
  background:#000; border-radius:4px; border:1px solid #1b1c22 }
.la-herb-noimg{ width:130px; height:80px; background:#1b1c22; color:#555;
  display:flex; align-items:center; justify-content:center; font-size:11px; border-radius:4px }
.la-herb-meta{ flex:1; min-width:0 }
.la-herb-title{ font-size:13px; color:#f6efe2; font-weight:600 }
.la-herb-page{ font-size:10px; color:#8a8272; margin:2px 0 5px }
.la-herb-details summary{ font-size:11px; color:#d4a04a; cursor:pointer; padding:3px 0 }
.la-herb-f{ font-size:11px; color:#a99e86; line-height:1.6; margin:4px 0 }
.la-herb-f b{ color:#e8b968; margin-right:6px }
@media (max-width:640px){
  .la-herb{ flex-direction:column }
  .la-herb-imgs{ flex-direction:row; flex:0 0 auto }
  .la-herb-imgs img{ width:auto; max-width:120px; max-height:140px }
}
.la-input{ display:flex; gap:8px; padding:10px; border-top:1px solid #2b2c33; background:#101116 }
.la-input input{ flex:1; background:#0e0f12; border:1px solid #2b2c33; border-radius:8px;
  color:#f6efe2; padding:9px 12px; font-size:13px; outline:none }
.la-input input:focus{ border-color:#d4a04a }
.la-input button{ background:#e8b968; color:#241a08; border:0; border-radius:8px;
  padding:0 16px; font-size:13px; font-weight:700; cursor:pointer }
.la-input button:hover{ background:#f3d9a0 }
@media (max-width:640px){
  #la-panel{ right:12px; bottom:68px; height:min(480px, 72vh) }
  #la-fab{ right:12px; bottom:14px; padding:9px 15px }
}


/* ---------- 12. 站点公告条（简后台下发） ---------- */
.site-notice{ display:flex; align-items:center; justify-content:center; gap:14px; flex-wrap:wrap;
  padding:8px 40px 8px 16px; position:relative;
  background:linear-gradient(90deg, rgba(212,160,74,.16), rgba(212,160,74,.05));
  border-bottom:1px solid rgba(232,185,104,.35);
  font-size:13px; color:#f3d9a0; }
.site-notice span{ letter-spacing:.03em }
.site-notice a{ color:#e8b968; border-bottom:1px dashed rgba(232,185,104,.6); font-size:12.5px }
.site-notice button{ position:absolute; right:8px; top:50%; transform:translateY(-50%);
  background:none; border:0; color:#a99e86; font-size:17px; cursor:pointer;
  width:28px; height:28px; border-radius:6px }
.site-notice button:hover{ background:rgba(255,253,247,.08); color:#f6efe2 }
/* 整条公告可点跳转（后台配了链接时文案本身即链接） */
.site-notice a.site-notice-link{ font-size:13px; letter-spacing:.03em;
  border-bottom:1px dashed rgba(232,185,104,.6); text-decoration:none }
.site-notice a.site-notice-link:hover{ color:#f6efe2; border-bottom-style:solid }

/* ---------- 12b. 跳到主内容（a11y skip-link）----------
 * 坑：theme.css 的提层规则 body>*:not([hidden]):not(.hd){position:relative;z-index:1}
 * 特异性 (0,2,1) 压过 .skip-link 的 (0,1,0)，把 absolute 强行改回 relative，
 * 于是 top:-48px 从「藏到视口外」变成「在流内上移 48px」——元素仍占位，
 * 还会盖在下方公告条上，用户就能看到「跳到主要内容」几个字（本项目 FAB 掉页尾是同一条规则）。
 * 修法：提高特异性 + !important 拉回 absolute，让它真正藏在视口外，仅键盘 focus 时滑出。 */
body > a.skip-link{
  position:absolute !important;
  left:16px; top:-100px;
  z-index:9999 !important;
  background:#2b2118; color:#f6efe2;
  padding:8px 14px; border-radius:8px;
  font-size:13px; text-decoration:none;
  transition:top .15s;
}
body > a.skip-link:focus{
  top:10px !important;
  outline:2px solid #e8b968; outline-offset:2px;
}

/* ---------- 13. 助教知识库下拉 ---------- */
.la-kb{ display:flex; align-items:center; gap:8px; padding:8px 12px;
  border-bottom:1px solid #2b2c33; background:#101116 }
.la-kb label{ font-size:11px; color:#8a8272; letter-spacing:.1em; flex:none }
.la-kb select{ flex:1; background:#0e0f12; border:1px solid #2b2c33; border-radius:7px;
  color:#f3d9a0; font-size:12.5px; padding:6px 8px; outline:none }
.la-kb select:focus{ border-color:#d4a04a }

/* ---------- 14. 助教回答 Markdown ---------- */
.la-bot ul,.la-bot ol{ margin:4px 0 6px; padding-left:20px }
.la-bot li{ margin:2px 0 }
.la-bot li::marker{ color:#d4a04a }
.la-bot .la-md-h{ font-family:var(--serif-cn); color:#f3d9a0; font-weight:600; margin:8px 0 3px }
.la-bot code{ background:#0e0f12; border:1px solid #2b2c33; border-radius:4px;
  padding:0 5px; font-size:12px; color:#f3d9a0 }
.la-bot pre{ background:#0e0f12; border:1px solid #2b2c33; border-radius:8px;
  padding:10px 12px; overflow-x:auto; font-size:12px; margin:6px 0 }
.la-bot table{ border-collapse:collapse; margin:6px 0; max-width:100%; font-size:12px }
.la-bot th,.la-bot td{ border:1px solid #2b2c33; padding:3px 8px; text-align:left }
.la-bot th{ background:#0e0f12; color:#f3d9a0; font-weight:600; white-space:nowrap }
.la-bot tbody tr:nth-child(even){ background:#17181d }

/* ---------- 16. 医案原文弹窗：单条抽取标题 ---------- */
/* ⚠ 提层兜底：theme.css 有一条
     body>*:not([hidden]):not(.hd){position:relative;z-index:1}
   特异性 (0,2,1) 比 .game-modal (0,1,0) 高，会把弹窗从 fixed 拽成 relative，
   掉到文档末尾（实测点击「查看完整原文」后 .game-modal 被甩到 y=5143px，视口外）。
   沿用 .nh-redeem/.toast/.fb-fab/.fb-modal/.promo-modal 既有先例，加 !important 兜底。
   同时把 z-index 拉满，避免被同级浮层（209 AI 经方助教浮窗等）盖住。 */
body > .game-modal:not([hidden]):not(.hd){
  position:fixed !important; inset:0 !important; z-index:10050 !important;
  pointer-events:auto !important;
}
.game-modal .doc-c-title{
  font-family:var(--serif-cn,"Noto Serif SC",serif);
  font-size:17px; color:#e8b968; margin:2px 0 10px;
  padding-bottom:8px; border-bottom:1px dashed rgba(232,185,104,.3);
}
/* 暗色适配：style.css 默认 .game-modal-box 是宣纸浅色（#fffdf8 白底 + 朱红边 + 棕黑字），
   在全站水墨暗色背景下太刺眼。参照 .fb-modal/.fb-card 改成暗底 + 金边 + 米字。 */
.game-modal-box{
  background:linear-gradient(180deg,#17181d,#14161b) !important;
  color:#e9e2d5 !important;
  border:1px solid rgba(232,185,104,.35) !important;
  border-radius:12px !important;
  box-shadow:0 22px 60px rgba(0,0,0,.65) !important;
  max-width:min(640px,94vw) !important;
}
.game-modal-box .md-body,
.game-modal-box .md-body p,
.game-modal-box .md-body li{ color:#e9e2d5 }
.game-modal-box .md-body strong,
.game-modal-box .md-body b{ color:#f3d9a0 }
.game-modal-box .md-body blockquote{
  border-left-color:rgba(232,185,104,.5);
  background:rgba(232,185,104,.06);
  color:#cfbf9c;
}
.game-modal-box .md-body code{
  background:rgba(232,185,104,.12); color:#f3d9a0;
  padding:1px 6px; border-radius:4px; font-size:12.5px;
}
.game-modal-box .md-body h1,
.game-modal-box .md-body h2,
.game-modal-box .md-body h3,
.game-modal-box .md-body h4{ color:#e8b968; border-bottom-color:rgba(232,185,104,.3) }
.game-modal-box .md-body hr{ border-top-color:rgba(232,185,104,.25) }
.game-modal-box .md-loading,
.game-modal-box .loading.err{
  color:#a99e86; font-size:13px; padding:18px 4px;
}
/* 检索结果卡可点击提示 + 键盘焦点 */
.ritem{ cursor:pointer }
.ritem:focus-visible{ outline:2px solid rgba(232,185,104,.6); outline-offset:2px }

/* ---------- 17. 医案/百科检索结果卡（.ritem）：暗模式清晰 + 就地展开面板 ----------
   上一版问题：style.css 的 .ritem 子元素（.ctext/.cref/.ropen/.ralso）
   仍走 #2a2118 深棕黑，在 #14161b 暗背景几乎不可见；
   点击展开走全屏 modal 跑 body 末尾，违背「原位置展开」的直觉。
   这里在 ink.css 层覆盖子元素配色 + 配套 .ritem-body 就地手风琴面板。 */
.ritem .rhead{ margin-bottom:6px }
.ritem .cref{ font-size:12px; color:#a99e86; letter-spacing:.02em }
.ritem .ctext{
  color:#e9e2d5; font-size:13px; line-height:1.85;
}
.ritem .ctext b, .ritem .ctext strong{ color:#f3d9a0 }
.ritem .ctext ul, .ritem .ctext ol{ margin:6px 0 4px 22px; padding:0 }
.ritem .ctext li{ margin:3px 0; color:#cdbf9d }
.ritem .ctext li b{ color:#e8b968; font-weight:600; margin-right:4px }
.ritem .ropen{
  margin-top:10px; font-size:12.5px; font-weight:600;
  color:#e8b968; text-align:right; transition:color .15s;
}
.ritem:hover .ropen{ color:#f3d9a0 }
.ritem .ralso{
  color:#a99e86; background:rgba(255,255,255,.05); border:1px solid #2b2c33;
}
.ritem .rtag{ color:#fff }   /* 红底白字保留 */
/* 就地展开面板：原位置手风琴，不是全屏 modal */
.ritem-body{
  display:none; margin:10px 0 2px; padding:12px 16px;
  background:#0e0f12; border:1px solid #2b2c33; border-radius:8px;
  max-height:min(70vh,560px); overflow:auto;
  color:#e9e2d5; font-size:13px; line-height:1.9;
  scrollbar-width:thin; scrollbar-color:#2b2c33 transparent;
  white-space:normal; word-break:break-word;
}
.ritem-body::-webkit-scrollbar{ width:6px; height:6px }
.ritem-body::-webkit-scrollbar-thumb{ background:#2b2c33; border-radius:3px }
.ritem-body::-webkit-scrollbar-track{ background:transparent }
.ritem-body h1,.ritem-body h2,.ritem-body h3{
  font-family:var(--serif-cn,"Noto Serif SC",serif);
  color:#e8b968; margin:8px 0 4px;
}
.ritem-body h3{ font-size:15px }
.ritem-body p{ margin:6px 0; color:#e9e2d5 }
/* 暗模式覆盖：原本 ink.css 只覆盖了 h/p，漏了 ul/li/strong —— 在 #14161b 接近不可见 */
.ritem-body ul,.ritem-body ol{ margin:6px 0 4px 22px; padding:0 }
.ritem-body li{
  margin:3px 0; color:#cdbf9d; font-size:13px; line-height:1.85;
}
.ritem-body li strong,.ritem-body li b{
  color:#e8b968; font-weight:600; margin-right:4px;
}
.ritem-body hr{
  border:none; border-top:1px dashed rgba(232,185,104,.25); margin:8px 0;
}
.ritem-body blockquote{
  margin:6px 0 6px 6px; padding:4px 10px;
  border-left:3px solid #e8b968; color:#a99e86; background:rgba(232,185,104,.04);
}
.ritem-body code{
  font-family:"JetBrains Mono",Consolas,monospace; font-size:12.5px;
  background:rgba(232,185,104,.10); color:#f3d9a0; padding:1px 5px; border-radius:3px;
}
.ritem-body em{ color:#c8d090; font-style:normal }   /* markdown *xxx* 不再斜体，亮橄榄区分 */
.ritem.exp .ritem-body{ display:block }
.ritem.exp .ropen::before{ content:"▴ " }
.ritem.loading .ritem-body{
  display:flex; align-items:center; justify-content:center;
  color:#a99e86; min-height:60px;
}
.ritem.loading .ritem-body::before{
  content:"⏳ 加载原文…"; font-size:12.5px; margin-right:0;
}
.ritem.err .ritem-body{
  display:flex; align-items:center; justify-content:center;
  color:#e0705a; min-height:48px; font-size:12.5px;
}
.ritem.err .ritem-body::before{
  content:"⚠ 加载失败，可点卡片重试"; margin-right:6px;
}

/* ---------- 18. 导航真路径内链（VIP_SERVICES.md 问题 #6：SPA 内链不可爬） ---------- */
/* 导航项由 <button> 改为 <a href="/p/<slug>">：既给爬虫真实内链，又保留原 tab 交互。
   这里只做「去链接默认样式」，不动 style.css 里的既有外观（只加不改原则）。 */
a.ntab, a.ndmi{
  /* 只去浏览器默认下划线；颜色必须跟随 .ntab/.ndmi 自己的 color 定义，
     不能写 color:inherit，否则导航栏父元素可能是浅色/深色就会把它洗掉。
     这是本次样式回归的直接原因。 */
  text-decoration:none; -webkit-tap-highlight-color:transparent;
}
a.ntab:hover, a.ntab:focus-visible,
a.ndmi:hover, a.ndmi:focus-visible{ text-decoration:none }
a.ndmi{ display:flex; width:100%; box-sizing:border-box; text-align:left }
a.ndmi .ndmi-txt{ min-width:0 }

/* 页脚站点导航：给爬虫一张全站 /p/ 落地页的入口网 */
.site-map{
  max-width:1180px; margin:0 auto; padding:26px 20px 6px;
  border-top:1px solid rgba(0,0,0,.08);
}
.site-map h2{
  font-family:var(--serif-cn); font-size:15px; color:#5d5449;
  margin:0 0 12px; font-weight:600; letter-spacing:.06em;
}
.site-map ul{
  list-style:none; margin:0; padding:0;
  display:flex; flex-wrap:wrap; gap:8px 18px;
}
.site-map a{
  font-size:13px; color:#7a7062; text-decoration:none; line-height:1.9;
  border-bottom:1px solid transparent; transition:color .15s ease, border-color .15s ease;
}
.site-map a:hover, .site-map a:focus-visible{
  color:var(--zhu, #9f2f24); border-bottom-color:rgba(159,47,36,.4); outline:none;
}
@media (max-width:760px){
  .site-map{ padding:20px 14px 4px }
  .site-map ul{ gap:6px 14px }
  .site-map a{ font-size:12.5px }
}

/* ---------- 19. 用户反馈系统（VIP_SERVICES.md 需求 backlog #3） ---------- */
/* ⚠ 全站提层陷阱：theme.css 有一条
     body>*:not([hidden]):not(.hd){position:relative;z-index:1}
   特异性 0-2-1，高于任何单个 class 选择器（0-1-0）。凡是 body 直接子元素的
   浮层（toast / .fb-fab / .fb-modal / .promo-modal）都会被它从 fixed 拽回
   relative，结果是「弹窗掉到文档末尾、用户根本看不见」，而 Playwright 的
   is_visible() 依然返回 true —— 属于静默假通过。
   项目既有先例（home2.css §16 .nx-fab/.nx-panel）用 !important 兜底，此处沿用。
   同一陷阱还命中既有组件 style.css 的 .nh-redeem（兑换面板，0-1-0）——点「兑换会员」
   后面板同样掉到页尾。按「只加不改」原则在此覆盖，不动 style.css / theme.css。 */
body > .nh-redeem:not([hidden]):not(.hd){ position:fixed !important; z-index:9999 }
body > .nh-redeem .nh-pay-cause{ color:#b9b1a2 !important }
body > .nh-redeem .nh-pay-mail-note{
  color:#e07068 !important;
  background:rgba(192,69,58,.14) !important;
  border-color:rgba(224,112,104,.55) !important;
}

/* 配图放大灯箱：同一陷阱——.fig-lightbox（lesson.js 课程页「点击放大」）是
   body 直接子元素，被 theme.css 提层规则拽回 relative，全屏灯箱掉到文档末尾，
   用户「点了放大但什么都没出现」。与 .nh-redeem 同款兜底。 */
body > .fig-lightbox:not([hidden]):not(.hd){ position:fixed !important; z-index:9999 }
body > .nx-img-lb:not([hidden]):not(.hd){ position:fixed !important; z-index:10060 }

/* 课程页状态指示条：米白底是宣纸主题遗留，墨色主题下 --ink 翻成近白，
   白字白底只剩一个绿点、文字不可见。参照 .toast 改暗底 + 金边 + 米字。 */
.status-chip{
  background:rgb(20 22 27 / .92); color:#f6efe2;
  border-color:rgba(232,185,104,.4);
  box-shadow:0 4px 12px rgb(0 0 0 / .4);
}

/* 轻量 toast */
.toast{
  position:fixed !important; top:18px; left:50%; transform:translateX(-50%) translateY(-30px);
  padding:12px 24px; border-radius:8px; font-size:14px; font-weight:500;
  background:#14161b; color:#f6efe2; border:1px solid rgba(232,185,104,.45);
  box-shadow:0 10px 34px rgba(0,0,0,.55); opacity:0; pointer-events:none;
  z-index:300 !important; transition:transform .22s ease, opacity .22s ease;
}
.toast.show{ transform:translateX(-50%) translateY(0); opacity:1 }
.toast-warn{ border-color:rgba(224,112,90,.65); color:#e0705a }
.toast-ok{ border-color:rgba(232,185,104,.55); color:#f6efe2 }

/* 反馈浮动按钮：放左下角，避免与右下角 AI 助教浮窗重叠 */
.fb-fab{
  position:fixed !important; left:18px; bottom:18px; z-index:160 !important;
  width:56px; height:56px; border-radius:50%;
  background:rgba(20,22,27,.92); color:#e8b968;
  border:1px solid rgba(232,185,104,.4);
  box-shadow:0 6px 20px rgba(0,0,0,.45);
  font-size:12px; font-weight:600; letter-spacing:0;
  cursor:pointer; display:flex; align-items:center; justify-content:center;
  transition:transform .16s ease, box-shadow .16s ease, background .16s ease;
}
.fb-fab:hover,.fb-fab:focus-visible{
  background:rgba(232,185,104,.12); transform:translateY(-2px);
  box-shadow:0 8px 24px rgba(232,185,104,.18); outline:none;
}

/* 弹窗 */
.fb-modal[hidden]{ display:none }
.fb-modal{
  position:fixed !important; inset:0; z-index:250 !important; display:flex; align-items:center; justify-content:center;
}
.fb-backdrop{
  position:absolute; inset:0; background:rgba(0,0,0,.65); backdrop-filter:blur(2px);
}
.fb-card{
  position:relative; width:min(520px, calc(100vw - 28px)); max-height:86vh; overflow:auto;
  background:linear-gradient(180deg,#17181d,#14161b); border:1px solid rgba(232,185,104,.35);
  border-radius:12px; padding:24px; box-shadow:0 22px 60px rgba(0,0,0,.65);
  color:#f6efe2;
}
.fb-close{
  position:absolute; top:12px; right:14px; width:32px; height:32px;
  background:transparent; border:none; color:#a99e86; font-size:18px; cursor:pointer;
}
.fb-card h3{ font-family:var(--serif-cn); font-size:20px; color:#e8b968; margin:0 0 4px; }
.fb-sub{ font-size:13px; color:#a99e86; margin:0 0 18px; line-height:1.5 }
.fb-row{ margin-bottom:14px }
.fb-row label{ display:block; font-size:13px; color:#d6cbb2; margin-bottom:6px }
.fb-hint{ color:#a99e86; font-size:11.5px; font-weight:400 }
.fb-row input,.fb-row textarea,.fb-row select{
  width:100%; padding:10px 12px; border-radius:8px; border:1px solid rgba(232,185,104,.25);
  background:rgba(0,0,0,.25); color:#f6efe2; font-size:14px; font-family:inherit;
  box-sizing:border-box; outline:none;
}
.fb-row input:focus,.fb-row textarea:focus,.fb-row select:focus{
  border-color:rgba(232,185,104,.65); box-shadow:0 0 0 3px rgba(232,185,104,.1);
}
.fb-row textarea{ resize:vertical; min-height:90px }
.fb-actions{ display:flex; justify-content:flex-end; gap:10px; margin-top:18px }
.fb-btn{ padding:9px 18px; border-radius:8px; font-size:14px; cursor:pointer; font-weight:500 }
.fb-btn.primary{ background:#e8b968; color:#14161b; border:none }
.fb-btn.primary:hover{ background:#f3d9a0 }
.fb-btn.secondary{ background:transparent; color:#a99e86; border:1px solid rgba(169,158,134,.45) }
.fb-btn.secondary:hover{ color:#f6efe2; border-color:rgba(232,185,104,.55) }

@media (max-width:640px){
  .fb-fab{ width:48px; height:48px; font-size:11px; left:12px; bottom:70px }
  .fb-card{ padding:18px 16px }
  .fb-card h3{ font-size:18px }
  .fb-actions{ flex-direction:row }
}


/* ---------- 20. 首页情怀弹窗 · 限时会员价（VIP_SERVICES.md 需求 backlog #2） ---------- */
.promo-modal[hidden]{ display:none }
.promo-modal{
  position:fixed !important; inset:0; z-index:260 !important; display:flex; align-items:center; justify-content:center;
}
.promo-backdrop{
  position:absolute; inset:0; background:rgba(0,0,0,.7); backdrop-filter:blur(2px);
}
.promo-card{
  position:relative; width:min(500px, calc(100vw - 28px)); max-height:88vh; overflow:auto;
  background:linear-gradient(180deg,#1a1711,#14161b); border:1px solid rgba(232,185,104,.35);
  border-radius:14px; padding:30px 26px 24px; box-shadow:0 24px 70px rgba(0,0,0,.65);
  color:#f6efe2; text-align:center;
}
.promo-close{
  position:absolute; top:12px; right:14px; width:34px; height:34px; border-radius:50%;
  background:transparent; border:none; color:#a99e86; font-size:20px; cursor:pointer;
  display:flex; align-items:center; justify-content:center;
}
.promo-close:hover{ color:#e8b968; background:rgba(232,185,104,.1) }
.promo-card h2{
  font-family:var(--serif-cn); font-size:clamp(20px,5vw,26px); color:#f3d9a0; margin:0 0 14px;
  letter-spacing:.08em;
}
.promo-body{ font-size:14px; line-height:1.75; color:#d6cbb2; margin:0 0 22px; text-align:left; white-space:pre-line; }
.promo-price{ margin:0 0 22px; display:flex; align-items:center; justify-content:center; gap:14px; flex-wrap:wrap }
.promo-original-wrap{ font-size:13px; color:#a99e86 }
.promo-original{ color:#77705f }
.promo-curr{ font-family:var(--serif-cn); font-size:34px; font-weight:700; color:#e8b968 }
.promo-actions{ display:flex; flex-direction:column; gap:10px; align-items:center }
.promo-primary{
  background:linear-gradient(135deg,#e8b968,#d4a04a); color:#191204; border:none; border-radius:10px;
  padding:12px 28px; font-size:16px; font-weight:700; cursor:pointer; letter-spacing:.05em;
  box-shadow:0 6px 20px rgba(232,185,104,.25);
}
.promo-primary:hover{ background:linear-gradient(135deg,#f3d9a0,#e8b968) }
.promo-secondary{
  background:transparent; color:#a99e86; border:1px solid rgba(169,158,134,.45);
  border-radius:10px; padding:9px 22px; font-size:13px; cursor:pointer;
}
.promo-secondary:hover{ color:#f6efe2; border-color:rgba(232,185,104,.55) }
.promo-hint{ font-size:11px; color:#77705f; margin:16px 0 0; line-height:1.5 }
@media (max-width:640px){
  .promo-card{ padding:24px 18px 20px }
  .promo-body{ font-size:13px }
  .promo-curr{ font-size:28px }
}

/* ---------- 20b. 9.9 情怀弹窗「不遮挡」被动模式（.promo-passive） ----------
   问题：上面 §20 是全屏模态，z-index:260 —— 比搜索结果面板 .nx-sres(160)
   和 AI 助教球 .nx-fab(160) 都高。且 initPromo 只要判定「今天还没关过」就弹，
   于是「打开首页 / 点搜索结果跳转 / 点别人分享的深链」都会先糊满整屏，
   用户根本看不到自己点进来的内容（就是「被 9.9 那个页面挡住」）。
   改法：默认以小卡呈现——无遮罩、卡外空白不拦点击、层级压到搜索面板之下；
   想看完整情怀文案再点「了解详情」，由用户主动展开原全屏模态（主动点开不算被挡）。 */
.promo-modal.promo-passive{
  inset:auto clamp(14px,3vw,26px) calc(clamp(64px,11vh,92px) + 70px) auto;
  align-items:flex-end; justify-content:flex-end;
  z-index:158 !important;   /* 低于 .nx-sres / .nx-fab(160)：搜索与助教永远压得住它 */
  pointer-events:none;      /* 小卡之外的空白一律放行，正文照常可读可点 */
}
.promo-modal.promo-passive .promo-backdrop{ display:none }
.promo-modal.promo-passive .promo-card{
  pointer-events:auto;
  width:min(330px, calc(100vw - 28px)); max-height:none; overflow:visible;
  padding:15px 16px 14px; text-align:left;
  box-shadow:0 16px 44px rgba(0,0,0,.5);
}
.promo-modal.promo-passive .promo-body,
.promo-modal.promo-passive .promo-hint,
.promo-modal.promo-passive .promo-original-wrap{ display:none }
.promo-modal.promo-passive .promo-card h2{
  font-size:16px; margin:0 0 10px; letter-spacing:.04em; text-align:left;
}
.promo-modal.promo-passive .promo-price{ margin:0 0 12px; justify-content:flex-start; gap:9px }
.promo-modal.promo-passive .promo-curr{ font-size:24px }
.promo-modal.promo-passive .promo-actions{ flex-direction:row; align-items:center; gap:8px }
.promo-modal.promo-passive .promo-primary{ flex:1; padding:10px 14px; font-size:14px }
.promo-modal.promo-passive .promo-secondary{ padding:9px 14px; font-size:12.5px }
.promo-modal.promo-passive .promo-close{ top:8px; right:10px; width:28px; height:28px; font-size:16px }
/* 提层兜底：theme.css 的 body>*:not([hidden]){position:relative;z-index:1} 会把浮层拽回 relative（详见 §19 说明） */
body > .promo-modal.promo-passive:not([hidden]):not(.hd){
  position:fixed !important; z-index:158 !important;
}


/* ---------- 21. 同修资料 · 网盘下载（VIP_SERVICES.md 需求 backlog #4） ---------- */
/* 视频/讲义以 GB 计，服务器不托管：只发网盘链接与提取码，入口默认隐藏，
   后台启用且有条目时才由 app.js 显示（未配置 = 全站零新增可见元素）。 */
.dl-fab[hidden]{ display:none }
.dl-fab{
  position:fixed !important; left:18px; bottom:86px; z-index:155 !important;
  width:56px; height:56px; border-radius:50%;
  background:rgba(20,22,27,.92); color:#a99e86;
  border:1px solid rgba(232,185,104,.45);
  box-shadow:0 6px 20px rgba(0,0,0,.45);
  font-size:12px; font-weight:500; cursor:pointer;
  transition:color .18s ease, border-color .18s ease, transform .18s ease;
}
.dl-fab:hover,.dl-fab:focus-visible{
  color:#e8b968; border-color:rgba(232,185,104,.75); transform:translateY(-1px);
}
.dl-fab:focus-visible{ outline:3px solid rgba(232,185,104,.55); outline-offset:3px }

.dl-modal[hidden]{ display:none }
.dl-modal{
  position:fixed !important; inset:0; z-index:250 !important;
  display:flex; align-items:center; justify-content:center;
}
/* theme.css 的 body>*:not([hidden]):not(.hd){position:relative;z-index:1} 特异性 0-2-1，
   会把 body 直接子元素的浮层从 fixed 拽成 relative、掉到文档末尾（项目既有血泪坑，
   详见 §19 注释）。每个新增的 body 直接子元素浮层都必须同步补这条兜底。 */
body > .dl-modal:not([hidden]):not(.hd){
  position:fixed !important; inset:0; z-index:250 !important;
}
.dl-backdrop{ position:absolute; inset:0; background:rgba(0,0,0,.7); backdrop-filter:blur(2px) }
.dl-card{
  position:relative; width:min(560px, calc(100vw - 28px)); max-height:84vh; overflow:auto;
  background:linear-gradient(180deg,#1a1711,#14161b);
  border:1px solid rgba(232,185,104,.35); border-radius:14px;
  padding:24px 24px 18px; box-shadow:0 24px 70px rgba(0,0,0,.65); color:#f6efe2;
}
.dl-close{
  position:absolute; top:10px; right:12px; width:34px; height:34px; border-radius:50%;
  background:transparent; border:none; color:#a99e86; font-size:18px; cursor:pointer;
  display:flex; align-items:center; justify-content:center;
}
.dl-close:hover{ color:#e8b968; background:rgba(232,185,104,.1) }
.dl-close:focus-visible{ outline:3px solid rgba(232,185,104,.5); outline-offset:2px }
.dl-card h2{
  font-family:var(--serif-cn); font-size:clamp(18px,4.4vw,21px); color:#f3d9a0;
  margin:0; letter-spacing:.06em; padding-right:36px;
}
.dl-list{ margin-top:16px; display:flex; flex-direction:column; gap:10px }
.dl-item{
  background:#14161b; border:1px solid #2b2c33; border-radius:10px; padding:12px 14px;
  transition:border-color .18s ease;
}
.dl-item:hover{ border-color:rgba(232,185,104,.35) }
.dl-item.is-vip{ border-color:rgba(232,185,104,.26) }
.dl-item.is-locked{ border-color:rgba(192,69,58,.28) }
.dl-item-top{ display:flex; align-items:baseline; justify-content:space-between; gap:10px }
.dl-item-name{ font-size:14.5px; color:#f6efe2; font-weight:500 }
.dl-item-meta{ display:flex; align-items:center; gap:8px; flex-shrink:0 }
.dl-item-size{ font-size:11.5px; color:#a99e86; white-space:nowrap }
.dl-size-inline{ display:none }
.dl-badge{
  font-size:10.5px; color:#e0705a; background:rgba(192,69,58,.16);
  border-radius:999px; padding:2px 8px; white-space:nowrap;
}
.dl-item-desc{ font-size:12.5px; color:#a99e86; line-height:1.55; margin:5px 0 10px }
.dl-item-ops{ display:flex; align-items:center; gap:8px; flex-wrap:wrap }
.dl-code{ font-size:12px; color:#d6cbb2; margin-right:auto }
.dl-code b{ color:#e8b968; font-weight:600; letter-spacing:.06em }
.dl-lock{ font-size:12px; color:#a99e86; margin-right:auto }
.dl-btn{
  min-height:36px; padding:0 13px; border-radius:8px; font-size:12.5px; cursor:pointer;
  background:transparent; color:#a99e86; border:1px solid rgba(169,158,134,.45);
  transition:color .18s ease, border-color .18s ease, background .18s ease;
}
.dl-btn:hover{ color:#f6efe2; border-color:rgba(232,185,104,.55) }
.dl-btn:focus-visible{ outline:3px solid rgba(232,185,104,.5); outline-offset:2px }
.dl-btn-primary{ background:#e8b968; color:#191204; border:none; font-weight:600 }
.dl-btn-primary:hover{ background:#f3d9a0; color:#191204; border:none }
.dl-btn-vip{ background:#c0453a; color:#f6efe2; border:none; font-weight:600 }
.dl-btn-vip:hover{ background:#e0705a; color:#f6efe2; border:none }
.dl-hint{ font-size:11px; color:#77705f; margin:14px 0 0; line-height:1.5 }

@media (max-width:640px){
  .nav .dl-nav-full{ display:none }
  .nav .dl-nav-short{ display:inline }
  /* 叠在反馈按钮（bottom:70 · 48 高）正上方，留 12px 间隙 */
  .dl-fab{ width:48px; height:48px; font-size:11px; left:12px; bottom:130px }
  .dl-card{ padding:20px 16px 16px }
  .dl-item-ops{ flex-direction:column; align-items:stretch; gap:8px }
  .dl-code,.dl-lock{ margin-right:0; text-align:center }
  .dl-btn{ min-height:44px; width:100% }
}
@media (max-width:380px){
  .dl-item-name{ font-size:13.5px }
  .dl-item-size{ display:none }
  .dl-size-inline{ display:inline }
}
@media (prefers-reduced-motion:reduce){
  .dl-fab,.dl-item,.dl-btn{ transition:none }
}

/* 伤寒目录：课次不是宋本条号 */
.learn-seq-note{
  margin:10px 0 0;
  font-size:12px;
  line-height:1.55;
  color:#a99e86;
}

/* 经络图鉴 · 第 2 波文案/侧栏/搜索 */
.mer-now{
  margin:0 0 12px;
  font-size:13px;
  color:#d6cbb2;
}
.mer-now b{ color:#e8b968; font-weight:600 }
.mer-lead{ max-width:52em }
.mer-chip-ling-t{
  margin-left:6px;
  padding:0 5px;
  border-radius:4px;
  font-size:10px;
  letter-spacing:.08em;
  color:#f3d9a0;
  border:1px solid rgba(232,185,104,.4);
  background:rgba(232,185,104,.1);
}
.mer-legend-v{
  flex:0 1 auto;
  max-height:min(240px, 38vh);
  overflow-y:auto;
}
.mer-info-panel{ min-height:160px }
.mer3d-search{
  width:auto;
  max-width:min(280px, calc(100% - 24px));
  z-index: 20;
  pointer-events: auto;
}
.mer3d-search-drop,
.mer3d-search-item{ pointer-events: auto; cursor: pointer; }
.mer3d-canvas-wrap.mer3d-quad .mer3d-search{
  top:46px;
  left:10px;
}
.mer-clear-viewed{
  margin-left:8px;
  padding:0 6px;
  border:1px solid rgba(232,185,104,.35);
  border-radius:4px;
  background:transparent;
  color:#a99e86;
  font-size:11px;
  cursor:pointer;
}
.mer-clear-viewed:hover{ color:#e8b968; border-color:#e8b968 }

/* 搜索定位环：钉在穴位屏幕位置，不被体表挡住 */
.mer3d-locator{
  position:absolute; left:0; top:0; z-index:9;
  width:0; height:0; pointer-events:none;
  transform:translate(-50%,-50%);
}
.mer3d-locator[hidden]{ display:none !important; }
.mer3d-locator-pulse{
  position:absolute; left:0; top:0; width:52px; height:52px;
  margin:-26px 0 0 -26px; border-radius:50%;
  border:2px solid #e8b968;
  animation:merLocPulse 1.25s ease-out infinite;
}
.mer3d-locator-ring{
  position:absolute; left:0; top:0; width:20px; height:20px;
  margin:-10px 0 0 -10px; border-radius:50%;
  border:2.5px solid #c0453a;
  background:rgba(232,185,104,.4);
  box-shadow:0 0 0 2px #f6efe2, 0 0 14px rgba(232,185,104,.75);
}
.mer3d-locator-tag{
  position:absolute; left:16px; top:-18px;
  background:#c0453a; color:#fff7e6;
  font:700 13px/1.25 "Noto Serif SC",serif;
  padding:4px 9px; border-radius:4px; white-space:nowrap;
  box-shadow:0 2px 10px rgba(0,0,0,.45);
  letter-spacing:.04em;
}
.mer3d-locator.is-off{ opacity:.35; }
@keyframes merLocPulse{
  0%{ transform:scale(.5); opacity:.85; }
  100%{ transform:scale(1.85); opacity:0; }
}
@media (prefers-reduced-motion:reduce){
  .mer3d-locator-pulse{ animation:none; opacity:.55; }
}

/* 平面挂图：宣纸底 + 站姿 SVG，盖住 3D 画布 */
.mer3d-chart-root{
  display:none; position:absolute; inset:0; z-index:2;
}
.mer3d-canvas-wrap.mer3d-chart{
  background:radial-gradient(circle at 50% 42%,#fbf6ea,#e4d6b8);
  border-color:rgba(232,185,104,.35);
}
.mer3d-canvas-wrap.mer3d-chart #mer3d-canvas{
  visibility:hidden; pointer-events:none;
}
.mer3d-canvas-wrap.mer3d-chart .mer3d-chart-root{ display:block; }
.mer3d-canvas-wrap.mer3d-chart #mer3d-spin{ display:none; }
.mer3d-canvas-wrap.mer3d-chart .mer3d-search{ top:46px; left:10px; }
.mer3d-canvas-wrap.mer3d-chart .mer3d-locator{ display:none !important; }
.mer3d-chart-svg{
  width:100%; height:100%; display:block; cursor:grab;
  touch-action:none;
}
.mer3d-chart-svg:active{ cursor:grabbing; }
.mc-loc-ring{
  animation:merLocPulse 1.25s ease-out infinite;
  transform-box:fill-box; transform-origin:center;
}
.mc-name{ paint-order:stroke; stroke:#fbf6ea; stroke-width:2.4px; stroke-linejoin:round; }

/* 本草配图：Wikimedia 原图过大时 cover+4/3 会裁成黑块；改为完整装入 */
.herb-plate-main img{
  aspect-ratio:auto;
  object-fit:contain;
  max-height:min(52vh, 440px);
  background:#111;
}

/* ---------- 25. 邀请 / 体验卡弹层 + 我的邀请（app.js nh-invite，INVITE_CREDITS_SPEC §9） ----------
   app.js 在 index.html 与 app.html 共用同一份弹层 DOM，样式放这里两端通吃；
   手机贴底半屏变体在 app-shell.css（body.nx-app .nh-invite）。 */
.nh-invite{
  position:fixed; inset:0; z-index:250;
  background:rgba(12,13,16,.72);
  display:flex; align-items:center; justify-content:center; padding:18px;
}
.nh-invite[hidden]{ display:none }
/* theme.css「body>*:not([hidden])」提层陷阱：与 .nh-redeem 同款 !important 兜底。
   z-index 250：压过助教半屏(220)/底栏(40)，让位给 .toast(300) 与兑换面板(9999)。 */
body > .nh-invite:not([hidden]):not(.hd){ position:fixed !important; z-index:250 !important }
.nh-invite-card{
  width:min(430px,100%); max-height:88vh; overflow:auto; position:relative;
  background:#14161b; color:#f6efe2;
  border:1px solid #2b2c33; border-radius:18px;
  padding:22px 20px 18px;
  box-shadow:0 18px 50px rgba(0,0,0,.5);
}
.nh-invite-x{
  position:absolute; top:8px; right:12px;
  background:none; border:0; font-size:22px; line-height:1; color:#a99e86; cursor:pointer;
}
.nh-invite-x:hover{ color:#f6efe2 }
.nh-invite h3{
  margin:0 0 8px; font-family:"Noto Serif SC",serif;
  font-size:20px; color:#f3d9a0;
}
.nh-inv-lead{ margin:0 0 10px; font-size:13px; color:#a99e86; line-height:1.7 }
.nh-inv-perks{ margin:0 0 10px; padding-left:18px; font-size:13px; line-height:1.9; color:#f6efe2 }
.nh-inv-note{
  margin:0 0 6px; padding:10px 12px; border-radius:12px;
  background:#1a1c22; border:1px solid #2b2c33;
  font-size:12.5px; line-height:1.8; color:#d6cbb2;
}
.nh-inv-note b{ color:#f3d9a0 }
.nh-inv-lab{ display:block; font-size:12px; color:#a99e86; margin:12px 0 4px }
.nh-invite input{
  width:100%; box-sizing:border-box; outline:0;
  border:1px solid #2b2c33; background:#0e0f12; color:#f6efe2;
  border-radius:10px; padding:12px 14px; font-size:16px; /* 16px 防 iOS 聚焦缩放 */
}
.nh-invite input:focus{ border-color:#d4a04a }
.nh-inv-row{ display:flex; gap:10px; margin-top:12px; align-items:center; flex-wrap:wrap }
.nh-inv-go{
  border:0; border-radius:10px; padding:11px 18px; cursor:pointer;
  background:#d4a04a; color:#1a1208; font-size:14px; font-weight:700;
}
.nh-inv-go:disabled{ opacity:.55; cursor:default }
.nh-inv-ghost{ background:transparent; border:1px solid #3a3428; color:#f3d9a0 }
.nh-inv-msg{ margin:0; font-size:12.5px; color:#a99e86; line-height:1.6; min-width:0 }
.nh-inv-msg.ok{ color:#8fbf77 }
.nh-inv-msg.err{ color:#e0705a }
/* 我的邀请（PC 弹层模式 + 手机内嵌块共用） */
.nh-inv-link{ display:flex; gap:8px; align-items:center; margin:8px 0 4px }
.nh-inv-link code{
  flex:1; min-width:0; overflow:hidden; text-overflow:ellipsis; white-space:nowrap;
  background:#0e0f12; border:1px solid #2b2c33; border-radius:10px;
  padding:10px 12px; font-size:12.5px; color:#f3d9a0;
}
.nh-inv-link .nh-inv-go{ flex:none; padding:10px 12px; font-size:12.5px }
.nh-inv-stats{ display:grid; grid-template-columns:repeat(3,1fr); gap:8px; margin:12px 0 4px }
.nh-inv-stat{ background:#1a1c22; border:1px solid #2b2c33; border-radius:12px; padding:10px 6px; text-align:center }
.nh-inv-stat b{ display:block; font-size:18px; color:#f3d9a0 }
.nh-inv-stat span{ font-size:11px; color:#a99e86 }
.nh-inv-list{ margin-top:6px }
.nh-inv-item{
  display:flex; align-items:center; gap:10px;
  padding:9px 2px; border-bottom:1px dashed #2b2c33; font-size:13px;
}
.nh-inv-item:last-child{ border-bottom:0 }
.nh-inv-item .em{ flex:1; min-width:0; overflow:hidden; text-overflow:ellipsis; white-space:nowrap }
.nh-inv-item .st{ flex:none; font-size:11.5px; color:#a99e86 }
.nh-inv-item .st.trial{ color:#8fbf77 }
.nh-inv-item .st.year{ color:#d4a04a }
.nh-inv-item .st.expired{ color:#8a8274 }
.nh-inv-item time{ flex:none; font-size:11px; color:#6e6758 }
.nh-inv-empty{ font-size:12.5px; color:#a99e86; line-height:1.7; padding:10px 0 }
/* PC 顶栏「邀请好友」：与 .nav-redeem 同款虚线金处理（墨色调） */
.nav .nav-invite{
  border:1px dashed rgba(232,185,104,.5); color:#c9a25e;
  background:rgba(232,185,104,.07); font-weight:600;
}
.nav .nav-invite:hover, .nav .nav-invite:focus-visible{
  border-style:solid; border-color:#e8b968; color:#e8b968; background:rgba(232,185,104,.12);
}

/* 邀请弹层：未发送验证码前，验证按钮置灰 */
.nh-inv-go[disabled]{ opacity:.45; }

/* ===== 经络图鉴 · 2026-10 修正（引线气泡 / 手机操作 / 平面图谱布局） =====
   取自 style.css 经络段与 ink.css 已有墨色令牌（金 #e8b968 / 米 #f6efe2 / 朱 #c0453a），不另起配色。 */
.mer3d-callouts{position:absolute;inset:0;width:100%;height:100%;pointer-events:none;z-index:8;overflow:visible}
/* 穴名气泡（Sprite 自带浅底描边），聚焦时字略大仍以 12px 为基准 */
.mer3d-canvas-wrap.mer3d-quad .mer3d-callouts{display:none}
/* 模式切换在 .mer-layout 内占一行，画布行要自己占满宽度（否则被当成同列的第三格，画布塌成 2px） */
.mer-layout{flex-wrap:wrap}
.mer-layout .mer-side-seg{flex:1 1 100%}
.mer-layout .mer-side{flex:0 0 276px;height:var(--mer-h)}
.mer-layout .mer-viewarea{flex:1 1 0;min-width:0}
/* 平面图谱：标签条在外框顶部居中，搜索改到左下角「快速定位」手风琴，不再压住正面 tab */
.mer3d-canvas-wrap.mer3d-chart .mer3d-search{top:auto;bottom:56px;left:10px;width:min(240px,calc(100% - 20px))}
.mer3d-chart-missing{position:absolute;inset:0;display:grid;place-items:center;padding:24px;text-align:center;color:#a99e86;font-size:13px;line-height:1.8}
/* 搜索框在手机与平面图谱下默认收起为圆形放大镜；点开才展开 */
.mer3d-search.is-collapsed .mer3d-search-iwrap{width:40px;height:40px;justify-content:center;padding:0;border-radius:50%}
.mer3d-search.is-collapsed .mer3d-search-iwrap .mer3d-search-input,
.mer3d-search.is-collapsed .mer3d-search-iwrap .mer3d-search-clear{display:none}
.mer3d-search.is-collapsed .mer3d-search-ico{width:18px;height:18px}
.mer3d-search.is-collapsed .mer3d-search-iwrap{cursor:pointer}
/* 搜索命中项：手机上 44px 行高 */
.mer3d-search-item{min-height:36px}
@media (pointer:coarse){
  .mer3d-search-item{min-height:44px}
  .mer3d-search-clear{min-width:32px;min-height:32px}
}

@media (max-width:980px){
  /* 窄屏改成一竖排：切换条 / 画布 / 侧栏（style.css 里 --mer-h:auto，这里显式给画布高度） */
  .mer-layout .mer-side{flex:0 0 auto;height:auto}
  .mer-layout .mer-viewarea{flex:none;width:auto}
}
@media (max-width:760px){
  /* 模式切换挪到画布上方、整行两个按钮（原来埋在画布下方侧栏里，要滑过整张图才能看到） */
  .mer-layout > .mer-side-seg{gap:8px;position:sticky;top:0;z-index:9;padding:4px 0}
  .mer-layout > .mer-side-seg .sbtn{flex:1;min-height:44px;font-size:14px}
  /* 画布按钮：竖排靠右，不再横着一排占掉画布下半部（挡住小腿与足部穴位）。
     ⛔ 必须显式 top:auto —— style.css 里 .mer3d-hud 是 top:10px，只写 bottom 会变成
     「上下都贴边」拉满整条画布高度，按钮从顶部开始排，正好压住视角切换条（2026-10-30 修）。 */
  .mer3d-hud{flex-direction:column;align-items:flex-end;gap:6px;right:8px;top:auto;bottom:8px}
  .mer3d-hud .sbtn{min-height:36px;padding:4px 10px;font-size:12px}
  /* 正文四 tab 加大可点面积 */
  .mer3d-view-tabs{padding:2px}
  .mer3d-view-tabs .mer3d-view-tab{min-height:38px;padding:6px 14px;font-size:13px}
  /* 经络芯片：竖向 2 列网格，14 条一屏看全，不用横滑；单条至少 36px 高 */
  .mer-legend-v{display:grid;grid-template-columns:1fr 1fr;gap:6px;max-height:none;overflow:visible;padding:0}
  .mer-legend-v .mer-chip{width:100%;min-height:36px;font-size:12.5px;border-radius:9px}
  .mer-info-pt{min-height:36px;align-items:center}
  .mer-clear-viewed{min-width:36px;min-height:28px}
}
/* 手机壳（app.html + App）里给 14 经网格双列：原先整行横滑 */
@media (max-width:760px){
  /* ⛔ 必须带上 .mer-legend-v 两项特异性：app-shell.css 里 body.nx-app .mer-legend-v 是横向 flex，
     这里若只写 .mer-legend-v 会被它的 flex-direction:row 压过 —— 14 条竖排在一条横线上把页面撑宽 */
  body.nx-app .mer-legend-v.mer-legend-v{
    display:flex;flex-direction:column;flex-wrap:nowrap;gap:4px;
    overflow:visible;white-space:normal;padding:0;
  }
  /* 侧栏内每条一行：缩写 + 经名 + 当令码 + 已看勾，一行读完，字号不挤 */
  body.nx-app .mer-legend-v .mer-chip{
    width:100%;min-height:40px;justify-content:flex-start;gap:8px;
    padding:6px 10px;font-size:13px;border-radius:9px;
  }
  body.nx-app .mer-legend-v .mer-chip-abbr{min-width:30px}
  body.nx-app .mer-legend-v .mer-chip-done-t{margin-left:auto}
  body.nx-app .mer-legend-v .mer-chip-ling-t{margin-left:auto}
  body.nx-app .mer-legend-v .mer-chip-ling-t + .mer-chip-done-t{margin-left:4px}
  body.nx-app .mer-layout > .mer-side-seg{width:auto}
}
/* 平面图谱：画布按挂图比例（720×1280）取宽，居中等比缩放，人体不变形、窄屏也能整幅看清 */
.mer3d-canvas-wrap.mer3d-chart{background:#efe6d4}
.mer3d-chart-root{position:absolute;inset:0;display:grid;place-items:center}
.mer3d-chart-root:not([hidden]) .mer3d-chart-svg{
  height:100%;width:auto;max-width:100%;
  aspect-ratio:720/1280;
}
@media (max-width:760px){ body.nx-app h2.ph.mer-h{display:none} }
