/* block@1130 */

/* ===== 世系图手机端优化（2026-10-01）=====
   事实基线：双指缩放/单指拖动/世代标签/小地图 均已具备，不动它们。
   本轮只解决三件实测问题：图例吃掉底部 54px、顶栏按钮挤满、缺快捷操作。 */
@media (max-width: 768px) {
  /* 1) 图例：默认收起，点"？"展开；展开时也贴底居中、不再满宽乱换行 */
  .legend { display: none !important; }
  .legend.m-show { display: flex !important; flex-wrap: wrap !important; justify-content: center !important;
    left: 8px !important; right: 8px !important; transform: none !important;
    bottom: 58px !important; max-width: none !important; width: auto !important;
    padding: 8px 10px !important; line-height: 1.5 !important; font-size: 11px !important; }
  .m-fab { position: fixed; z-index: 101; min-width: 44px; height: 44px; padding: 0 12px;
    border-radius: 999px; background: var(--card, rgba(255,255,255,.06));
    border: 1px solid var(--border-1, rgba(255,255,255,.12)); color: var(--ink, #e8eaed);
    font-size: 13px; line-height: 1; display: inline-flex; align-items: center; justify-content: center;
    box-shadow: 0 4px 16px rgba(0,0,0,.35); backdrop-filter: blur(12px); }
  .m-fab:active { border-color: var(--accent, #d4a34f); color: var(--accent, #d4a34f); }
  .m-fab-legend { right: 12px; bottom: 12px; }
  .m-fab-fit   { right: 12px; bottom: 66px; }
  /* 2) 世代标签在窄屏收紧，让出横向空间 */
  .gen-label { font-size: 11px !important; padding: 1px 6px !important; letter-spacing: 0 !important; }
  /* 3) 顶栏在窄屏允许横向滚动，避免按钮挤压重叠 */
  .tools, .toolbar, .head .in { flex-wrap: nowrap !important; overflow-x: auto !important; -webkit-overflow-scrolling: touch; }

  /* 4) 10-03 修复：工具栏原本 fixed right:16px 竖排，与同为右侧的世代标签
     （right:12px）正面相撞，实测在 390px 下 +/−/⤢/核 四个按钮正好压住第6-8 世人名。
     改为底部横向工具条。注：本页这段曾与 polish.css 的
     body.page-tree-view .toolbar{right:18px} 打架（后者特异性更高、!important 更多），
     导致修复一度不生效。现统一由 polish.css 承载移动端工具条/横幅定位，本页不再声明。 */
}
/* 2026-11-04（P0-2）：≤1020px 的家族标识恢复（.header-l .sub 显示、h1 横排）
   已并入文末 <style id="tree-design-system">，此处不再单独声明，避免同一属性三处定义。 */

/* block@1164 */

/* 10-03 纠错举报 */
.tt-report{margin-top:10px;padding-top:9px;border-top:1px dashed var(--card-border);}
.tt-report-btn{display:inline-flex;align-items:center;gap:5px;padding:6px 12px;min-height:32px;
  border-radius:7px;border:1px solid var(--card-border);background:transparent;color:var(--ink-2,#9aa0ae);
  font-size:12.5px;font-family:inherit;cursor:pointer;transition:all .2s;}
.tt-report-btn:hover{border-color:#ff8fa3;color:#ff8fa3;background:rgba(255,45,85,.08);}
.rp-mask{position:fixed;inset:0;z-index:220;display:flex;align-items:center;justify-content:center;
  padding:20px;background:rgba(0,0,0,.62);backdrop-filter:blur(6px);}
.rp-mask[hidden]{display:none;}
.rp-box{width:min(460px,100%);max-height:88vh;overflow-y:auto;border-radius:14px;
  background:var(--header-bg,#14161c);border:1px solid var(--card-border);
  box-shadow:0 24px 60px rgba(0,0,0,.6);}
.rp-head{display:flex;align-items:center;padding:14px 18px;border-bottom:1px solid var(--card-border);
  font-size:15px;color:var(--ink,#e8eaed);}
.rp-head button{margin-left:auto;width:32px;height:32px;border-radius:6px;border:1px solid var(--card-border);
  background:transparent;color:var(--ink-2,#9aa0ae);cursor:pointer;font-size:14px;}
.rp-body{padding:16px 18px;}
.rp-target{margin:0 0 14px;font-size:13px;color:var(--ink-2,#9aa0ae);}
.rp-target b{color:var(--ink,#e8eaed);font-size:15px;}
.rp-target span{margin-left:8px;font-size:12px;color:var(--ink-3,#7b8494);}
.rp-field{display:block;margin-bottom:13px;font-size:13px;color:var(--ink-2,#9aa0ae);}
.rp-field>span{display:block;margin-bottom:6px;}
.rp-field em{font-style:normal;color:#ff8fa3;font-size:12px;}
.rp-field select,.rp-field textarea,.rp-field input{width:100%;padding:9px 11px;border-radius:8px;
  border:1px solid var(--card-border);background:var(--card,rgba(255,255,255,.04));color:var(--ink,#e8eaed);
  font-size:14px;font-family:inherit;line-height:1.6;}
.rp-field textarea{resize:vertical;min-height:88px;}
.rp-field select:focus,.rp-field textarea:focus,.rp-field input:focus{outline:2px solid var(--accent,#d4a34f);outline-offset:1px;}
.rp-tip{margin:4px 0 0;font-size:12px;line-height:1.7;color:var(--ink-3,#7b8494);}
.rp-msg{margin:10px 0 0;font-size:13px;min-height:20px;line-height:1.6;}
.rp-msg.ok{color:#5fd08a;}
.rp-msg.err{color:#ff8fa3;}
.rp-foot{display:flex;gap:10px;justify-content:flex-end;padding:13px 18px;border-top:1px solid var(--card-border);}
.rp-btn{padding:9px 20px;min-height:40px;border-radius:8px;font-size:14px;font-family:inherit;cursor:pointer;border:1px solid var(--card-border);}
.rp-cancel{background:transparent;color:var(--ink-2,#9aa0ae);}
.rp-ok{background:linear-gradient(135deg,var(--accent,#d4a34f),var(--accent-2,#8b5cf6));
  color:#241a05;font-weight:600;border:none;}
@media (max-width:680px){.rp-foot .rp-btn{flex:1;min-height:44px;}}
/* ===== 2026-11-04：真实打印样式（工具栏「打印」→ window.print()）
   隐藏页头/工具栏/小地图/抽屉/引导/主题按钮，强制浅色纸面配色；横版 A4。===== */
@media print{
  @page{ size:A4 landscape; margin:8mm; }
  html,body{ background:#fff !important; color:#111 !important; color-scheme:light !important; }
  .header,.toolbar,.minimap,#minimapWrap,.tv-guide,.svc-drawer,.svc-mask,#svcMask,
  .theme-toggler,.search-box,.search-pop,#toast,#loading,.family-note,.legend{ display:none !important; }
  button{ display:none !important; }
  html[data-theme="1"],html[data-theme="3"],html[data-theme="light"],html[data-theme="dark"]{
    --bg:#fff; --head-bg:#fff; --surface:#fff; --surface-2:#f6f6f4;
    --card:#fff; --card-border:#c9c9c4; --text:#111; --ink:#111; --ink-2:#444; --ink-3:#666; --line:#c9c9c4;
  }
  .tree-stage{ background:#fff !important; }
  .tree-stage div,.node,.card{ box-shadow:none !important; }
  /* 世代面色是 inline --gc 引用 --gc-1..20，print 下统一压成浅纸色，避免深色卡在黑字白纸 */
  .node,.node-card{ --gc:#f4f4ef !important; }
  .node-card{ background:#f4f4ef !important; color:#111 !important; }
  .node-card,.node-card *{ color:#111 !important; }
  .node.root .node-card{ border-top-color:#9a7b2f !important; }
}

/* block@1224 */

/* 手机端节点尺寸契约：主脚本用 getComputedStyle 读 --node-w 算坐标，
   因此这条必须出现在主脚本之前（放 head），且用 html:root 压过 :root 的 116px。 */
@media (max-width:768px), (pointer:coarse){
  html:root{ --node-w:128px; --node-h:70px; --node-gap:16px; --gen-gap:104px; }
}

/* block@1231 */

/* P2-22（2026-11-07）：375px 窄屏主题按钮低于 44px 触控下限 */
@media (max-width:768px){
  body.page-tree-view .theme-toggler .zt-btn{min-width:44px;min-height:44px;display:inline-flex;align-items:center;justify-content:center}
  .pd-filters .pd-tool,.pd-filters .pd-held{min-height:44px;padding-top:8px;padding-bottom:8px}
}
/* P2-23（2026-11-07）：窄屏筛选区限高可滚动，给世系图留出可视面积 */
@media (max-width:560px){
  .svc-pane-tools.pd-filters{max-height:34vw;overflow-y:auto;overscroll-behavior:contain}
}
/* P2-07（2026-11-07）：受限预览的常驻提示条 */
.preview-hint{display:none;position:fixed;left:50%;transform:translateX(-50%);bottom:14px;z-index:120;
  max-width:calc(100vw - 28px);padding:9px 14px;border-radius:999px;font-size:12.5px;line-height:1.5;
  background:rgba(28,32,40,.92);color:#e8eef7;border:1px solid rgba(255,255,255,.14);
  box-shadow:0 6px 22px rgba(0,0,0,.28);text-align:center}
.preview-hint a{color:#ffd27d;text-decoration:underline}
.preview-hint.show{display:block}
@media (max-width:560px){.preview-hint{bottom:10px;font-size:12px;padding:8px 12px}}

/* block@6755 */
@keyframes spin{to{transform:rotate(360deg)}}
/* block@7908 */

@keyframes zupuLocateFlash{0%,100%{box-shadow:0 0 0 0 rgba(240,180,41,0);}50%{box-shadow:0 0 0 10px rgba(240,180,41,.9);filter:brightness(1.6);}}
.node.zupu-locate-flash{animation:zupuLocateFlash .7s ease-in-out 3;z-index:60;}

/* block@7933 */

@media (max-width:680px) {
  /* 10-03：原top:120px 把横幅钉在世系图上方、压住节点；位置已由 polish.css 贴底统一处理。 */
  .edit-panel .ep-head button { min-width:44px; min-height:44px; padding:0; }
  .edit-panel .ep-row input[type="text"],
  .edit-panel .ep-row input[type="number"],
  .edit-panel .ep-row select { min-height:44px; }
  .edit-panel .ep-quick button,
  .edit-panel .ep-foot button,
  .edit-panel .ep-confirm-ok,
  .edit-panel .ep-confirm-undo { min-height:44px; }
  .edit-panel .ep-inline label { min-height:44px; }
  .edit-panel .ep-inline input[type="checkbox"] { width:24px; height:24px; }
}

/* block@7948 */

/* [P222] 节点卡世代顶线增强：放在 polish.css 之后加载（同特异性后到先得）。 */
body.page-tree-view .node-card { border-top-width: 3px; }
body.page-tree-view .node-card .meta,
body.page-tree-view .node-card .spouse { line-height: 1.5; }
@media (max-width:760px){
  body.page-tree-view .toolbar .zoom-output { display: none !important; }
}

/* block@7957 */

/* 10-05：手机端「◎ 定位到我」入口（≤900px，与小地图消失的断点一致）。
   做法是把小地图面板收成一颗胶囊：画布、「全览」标题、折叠钮收掉，元素仍是同一个
   #mmLocate —— 可见性继续由 __ZUPU_IS_MINE 那套判断决定（游客拿不到按钮，
   也就不会点出一个"没反应"的控件），点击走原有 handler（locateMe + 定位闪烁），
   不复制第二份定位逻辑。所有选择器都带 body.page-tree-view 前缀且排在 polish.css
   之后，否则会被 polish.css 的 body.page-tree-view .minimap/.mm-head/.mm-locate 吃掉。 */
@media (max-width:900px){
  body.page-tree-view .minimap{left:12px;top:56px;width:auto;padding:0;
    background:none;border:0;box-shadow:none;border-radius:0;overflow:visible;
    -webkit-backdrop-filter:none;backdrop-filter:none}
  body.page-tree-view .mm-head{display:block;min-height:0;padding:0;border-bottom:0}
  body.page-tree-view .mm-head>span:first-child{display:none}
  body.page-tree-view .mm-head #mmToggle{display:none}
  body.page-tree-view .mm-canvas-wrap{display:none}
  body.page-tree-view .mm-head .mm-locate{min-width:0;width:auto;min-height:44px;
    padding:0 16px;font-size:13px}
}

/* block@7975 */

/* ===== 手机端世系图 Pro（2026-11-04）=====
   目标：390×844 首屏是「可读的上下三代」，不是把 3.5 万人压成一张图。
   全部限定在 ≤768px 或 pointer:coarse；1440 桌面不命中任何一条规则。 */
@media (max-width:768px), (pointer:coarse){
  body.page-tree-view .node-card{ padding:4px 8px; }
  body.page-tree-view .node-card .name{
    font-size:14px; line-height:1.28; letter-spacing:0;
    white-space:normal; word-break:break-word;
    display:-webkit-box; -webkit-line-clamp:2; -webkit-box-orient:vertical; overflow:hidden;
    text-rendering:optimizeLegibility; -webkit-font-smoothing:antialiased;
  }
  /* .node-card .sub（字号/上间距）与 .toolbar（尺寸/单行/更多菜单）统一由文末
     tree-design-system 管理；此处只保留「手机上不该出现的按钮」这一类显隐规则，
     避免同一属性在本页出现三次（本次阶段2 已合并）。 */
  body.page-tree-view #zoomInBtn,
  body.page-tree-view #zoomOutBtn{ display:none !important; }
  body.page-tree-view .toolbar .btn svg{ width:18px; height:18px; }
  body.page-tree-view .m-fab-fit{ display:none !important; }
  /* 触屏没有 hover：取消上浮，避免点按后卡片"跳一下" */
  body.page-tree-view .node:hover{ transform:none !important; }
  /* 「▦ 全览」按钮：叠在图例上方（原 m-fab-fit 位置） */
  .m-fab-mm{ right:10px !important; bottom:74px !important; }
}

/* ── 底部人物卡（只在手机端由 JS 显示） ── */
.m-sheet{ display:none; }
@media (max-width:768px), (pointer:coarse){
  .m-sheet{ position:fixed; left:0; right:0; bottom:0; z-index:160;
    background:linear-gradient(180deg,var(--card-bg,#131a26),var(--bg,#0b1018));
    border-top:1px solid var(--gold-line,rgba(201,162,76,.45));
    border-radius:18px 18px 0 0; box-shadow:0 -12px 34px rgba(0,0,0,.5);
    padding:12px 16px calc(14px + env(safe-area-inset-bottom,0px));
    transform:translateY(112%); transition:transform .26s cubic-bezier(.22,.61,.36,1); }
  .m-sheet.show{ display:block; transform:translateY(0); }
  .m-sheet-grab{ width:36px; height:4px; border-radius:4px; background:var(--line,#414855); margin:0 auto 10px; }
  .m-sheet-nm{ font-size:20px; font-weight:800; color:var(--ink); display:flex; align-items:baseline; gap:8px; padding-right:44px; }
  .m-sheet-nm small{ font-size:12px; font-weight:500; color:var(--ink-2); }
  .m-sheet-meta{ margin-top:4px; font-size:12.5px; color:var(--ink-2); line-height:1.5;
    display:-webkit-box; -webkit-line-clamp:2; -webkit-box-orient:vertical; overflow:hidden; }
  /* 注记/生平：底卡内完整展示，长文可滚动，不做截断 */
  .m-sheet-note{ margin-top:6px; max-height:34vh; overflow:auto; font-size:12.5px; color:var(--ink-2); line-height:1.6; }
  .m-sheet-note .rp-body{ margin-top:4px; }
  .m-sheet-note .rp-long{ white-space:normal; word-break:break-word; max-height:6.6em; overflow:hidden; }
  /* 手机端长文本默认折叠，点「展开全文」才展开——原来这里没有 max-height，
     .open 切换没有任何视觉变化，用户感知就是"按钮点不动"。 */
  .m-sheet-note .rp-long.open{ max-height:none; }
  .m-sheet-note .rp-more{ margin-top:4px; background:none; border:none; padding:9px 4px 9px 0; min-height:36px;
    color:var(--accent); font-size:12.5px; cursor:pointer; display:inline-block; touch-action:manipulation; -webkit-tap-highlight-color:transparent; }
  .m-sheet-act{ display:grid; grid-template-columns:1.2fr 1fr 1fr; gap:8px; margin-top:12px; }
  .m-sheet-act button{ min-height:46px; height:46px; border-radius:11px; border:1px solid var(--card-border,#39404f);
    background:var(--card-bg,#151b28); color:var(--ink); font:600 13px/1.2 system-ui,sans-serif; cursor:pointer; }
  .m-sheet-act .primary{ background:var(--accent,#c9a24c); color:#1a1206; border-color:transparent; }
  .m-sheet-close{ position:absolute; right:10px; top:8px; width:36px; height:36px; border-radius:50%;
    border:0; background:transparent; color:var(--ink-2); font-size:20px; }
}

/* ── 聚焦条：显示「已聚焦谁 + 返回全览 + 分享」 ── */
.m-focusbar{ display:none; }
@media (max-width:768px), (pointer:coarse){
  .m-focusbar{ position:fixed; left:50%; top:64px; transform:translateX(-50%); z-index:121;
    align-items:center; gap:8px; max-width:calc(100vw - 20px);
    padding:4px 6px 4px 12px; border-radius:999px; background:var(--header-bg,#151b28);
    border:1px solid var(--gold-line,rgba(201,162,76,.45));
    box-shadow:var(--shadow-sm,0 6px 18px rgba(0,0,0,.35));
    font:12.5px/1.35 system-ui,sans-serif; color:var(--ink); }
  .m-focusbar.show{ display:flex; }
  .m-focusbar .fb-name{ font-weight:700; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; max-width:30vw; }
  .m-focusbar .fb-gen{ color:var(--ink-2); font-size:11.5px; white-space:nowrap; }
  .m-focusbar button{ min-height:44px; height:44px; padding:0 12px; border-radius:999px; border:1px solid var(--card-border,#39404f);
    background:transparent; color:var(--ink); font:600 12px system-ui; cursor:pointer; white-space:nowrap; }
  .m-focusbar .fb-back{ color:var(--ink-2); }
}

/* ── 小地图决策：≤480 默认收起，由「全览」按钮唤出为浮层（不参与布局挤压） ── */
@media (max-width:480px){
  body.page-tree-view .minimap:not(.mm-open){ display:none !important; }
  body.page-tree-view .minimap.mm-open{ display:flex !important; flex-direction:column;
    position:fixed !important; left:10px; right:10px; top:58px; bottom:auto; width:auto; z-index:150;
    padding:8px 10px !important; background:var(--header-bg,#151b28) !important;
    border:1px solid var(--card-border,#39404f) !important; border-radius:14px;
    -webkit-backdrop-filter:blur(12px); backdrop-filter:blur(12px);
    box-shadow:0 12px 34px rgba(0,0,0,.45); }
  body.page-tree-view .minimap.mm-open .mm-head{ display:flex !important; border-bottom:1px solid var(--line,#333a48) !important; min-height:0; }
  body.page-tree-view .minimap.mm-open .mm-head>span:first-child{ display:inline !important; }
  body.page-tree-view .minimap.mm-open .mm-canvas-wrap{ display:block !important; height:150px; margin-top:8px; position:relative; }
  body.page-tree-view .minimap.mm-open #mmToggle{ display:inline-block !important; }
  body.page-tree-view .minimap.mm-open .mm-locate{ display:none !important; }
  .m-fab-mm{ right:10px !important; bottom:74px !important; }
}

/* block@8067 */

/* ===== 世系图视觉规范（2026-11-04 · 阶段2）=====
   单一权威层：本页所有设计 token 与页面级组件规则集中于此，排在 polish.css 与
   tree-mobile-pro 之后（后者只保留「该不该显示」这类规则）。
   本层同时是 .toolbar / .toolbar .btn / .header-l .sub / .node-card .sub 的唯一来源，
   原先散落在 L50/L797/L1120、L164/L800/L7181、L7141/L7179/L7203 的重复定义已删除。

   Token：
   · 间距 4 / 8 / 12 / 16 / 24
   · 字号 12 / 14 / 16 / 20 / 24
   · 圆角 节点 8 · 按钮与输入 10 · 抽屉与底卡 16 · 胶囊 999
   · 阴影 1 套（--ds-shadow）+ 抽屉 1 套（--ds-shadow-drawer）
   · 色板 4 层：背景 / 面板 / 描边 / 主色（绿红仅用于连线状态与错误标记） */
body.page-tree-view{
  --ds-s1:4px; --ds-s2:8px; --ds-s3:12px; --ds-s4:16px; --ds-s5:24px;
  --ds-f12:12px; --ds-f14:14px; --ds-f16:16px; --ds-f20:20px; --ds-f24:24px;
  --ds-r-node:8px; --ds-r-ctl:10px; --ds-r-panel:16px; --ds-r-pill:999px;
  --ds-shadow:0 6px 20px rgba(0,0,0,.28);
  --ds-shadow-drawer:0 0 0 1px rgba(0,0,0,.10), 0 0 46px rgba(0,0,0,.45);
  --ds-bg:var(--bg);
  --ds-panel:var(--polish-panel, var(--card-bg));
  --ds-border:var(--polish-rule-strong, var(--card-border));
  --ds-border-weak:var(--polish-rule, var(--card-border));
  --ds-primary:var(--accent);
  --ds-on-primary:var(--btn-solid-text, #1a1206);
}

/* ── 页头 ───────────────────────────────────────────── */
body.page-tree-view .header{ padding:0 var(--ds-s4); }
body.page-tree-view .header-l{ gap:var(--ds-s2); }
body.page-tree-view .header-l h1{ font-size:var(--ds-f16); white-space:nowrap; }
body.page-tree-view .header-l .sub{
  display:block; margin-left:var(--ds-s1); font-size:var(--ds-f12); line-height:1.35;
  max-width:250px; overflow:hidden; text-overflow:ellipsis; white-space:nowrap;
  color:var(--ink-2);
}
body.page-tree-view .header-r{ gap:var(--ds-s1); }
body.page-tree-view .header-r .btn{
  min-height:36px; height:36px; padding:0 var(--ds-s3);
  border:1px solid var(--ds-border); border-radius:var(--ds-r-ctl);
  background:transparent; color:var(--ink-2); font-size:var(--ds-f12);
}
body.page-tree-view .header-r .btn:hover{ border-color:var(--ds-primary); color:var(--ink); }
body.page-tree-view .header-r .btn .hbtn-i{ margin-right:var(--ds-s1); }
/* 主题切换：降为普通图标按钮（无边框、无底色，不再与主按钮争层级） */
body.page-tree-view .theme-toggler .zt-btn{
  border-color:transparent; background:transparent; box-shadow:none; border-radius:var(--ds-r-ctl);
}
body.page-tree-view .theme-toggler .zt-btn:hover{ border-color:transparent; box-shadow:none; color:var(--ink); }
body.page-tree-view .search-box input{ border-radius:var(--ds-r-ctl); }
body.page-tree-view .chip{ font-size:var(--ds-f12); }

/* ── 工具条（桌面默认：右侧竖排，40×40）─────────────── */
body.page-tree-view .toolbar{ right:var(--ds-s4); gap:var(--ds-s2); align-items:flex-end; }
/* 带文字的按钮（导出/打印）横向自适应，避免文字在 40px 方框里竖排溢出 */
body.page-tree-view #exportCsvBtn,
body.page-tree-view #exportGedBtn,
body.page-tree-view #printBtn{
  width:auto; min-width:40px; padding:0 var(--ds-s3);
  white-space:nowrap; font-size:var(--ds-f12); letter-spacing:0; font-weight:600;
}
/* 导出结果提示不进布局，浮在工具条左侧 */
body.page-tree-view .toolbar .export-msg{
  position:absolute; right:calc(100% + var(--ds-s2)); top:0;
  width:max-content; max-width:240px; white-space:nowrap;
}
body.page-tree-view .toolbar .btn,
body.page-tree-view .toolbar .pd-btn{
  width:40px; height:40px; min-height:40px;
  border:1px solid var(--ds-border); border-radius:var(--ds-r-ctl);
  background:var(--ds-panel); color:var(--ink-2); font-size:var(--ds-f16);
  box-shadow:var(--ds-shadow);
}
body.page-tree-view .toolbar .btn:hover,
body.page-tree-view .toolbar .pd-btn:hover{ border-color:var(--ds-primary); color:var(--ds-primary); }
/* 全屏唯一实心主按钮：谱务 */
body.page-tree-view .toolbar .btn.svc-btn{
  width:auto; min-width:72px; padding:0 var(--ds-s3); gap:var(--ds-s1);
  border-color:var(--ds-primary); background:var(--ds-primary); color:var(--ds-on-primary);
  font-size:var(--ds-f14); font-weight:700; letter-spacing:.5px; box-shadow:var(--ds-shadow);
}
body.page-tree-view .toolbar .btn.svc-btn:hover{ color:var(--ds-on-primary); filter:brightness(1.06); }
body.page-tree-view .toolbar .btn.svc-btn .svc-num{
  min-width:18px; height:18px; padding:0 4px; border-radius:var(--ds-r-pill);
  background:rgba(0,0,0,.26); color:inherit; font-size:var(--ds-f12);
}
body.page-tree-view .toolbar .btn.svc-btn .svc-num.zero{ background:rgba(0,0,0,.16); color:inherit; opacity:.7; }
body.page-tree-view #tbMoreBtn{ display:none; }

/* ── 更多菜单（仅窄屏出现，代理原按钮 click）────────── */
body.page-tree-view .tv-more-menu{
  position:fixed; right:var(--ds-s4); bottom:76px; z-index:150;
  display:flex; flex-direction:column; gap:var(--ds-s1);
  min-width:168px; padding:var(--ds-s2);
  background:var(--ds-panel); border:1px solid var(--ds-border);
  border-radius:var(--ds-r-panel); box-shadow:var(--ds-shadow-drawer);
}
body.page-tree-view .tv-more-menu[hidden]{ display:none; }
body.page-tree-view .tv-more-menu button{
  width:100%; height:44px; min-height:44px; padding:0 var(--ds-s3); text-align:left;
  border:none; border-radius:var(--ds-r-ctl); background:transparent;
  color:var(--ink); font:inherit; font-size:var(--ds-f14); cursor:pointer;
}
body.page-tree-view .tv-more-menu button:hover,
body.page-tree-view .tv-more-menu button:active{ background:var(--accent-dim); color:var(--accent); }

/* ── 节点卡 ─────────────────────────────────────────── */
body.page-tree-view .node-card{
  padding:var(--ds-s1) var(--ds-s2);
  border-radius:var(--ds-r-node);
  font-size:var(--ds-f12);
}
body.page-tree-view .node.male .node-card{ border-radius:var(--ds-r-node); }
/* 女性节点保留胶囊（形状表达性别，属信息编码，不随圆角档位改变） */
body.page-tree-view .node.female .node-card{ padding-left:var(--ds-s3); padding-right:var(--ds-s3); }
body.page-tree-view .node-card .name{ font-size:var(--ds-f16); line-height:1.3; }
body.page-tree-view .node-card .sub{ margin-top:var(--ds-s1); gap:var(--ds-s1); }
body.page-tree-view .node-card .meta,
body.page-tree-view .node-card .spouse{ font-size:var(--ds-f12); line-height:1.4; }
body.page-tree-view .node-card .gen-tag{ font-size:var(--ds-f12); border-radius:var(--ds-r-node); }
body.page-tree-view .lod-min .node-card{ padding:var(--ds-s1) var(--ds-s2); }
body.page-tree-view .lod-min .node-card .name{ font-size:var(--ds-f12); }

/* ── 谱务抽屉 ─────────────────────────────────────── */
body.page-tree-view .svc-drawer{ border-radius:var(--ds-r-panel); box-shadow:var(--ds-shadow-drawer); }
body.page-tree-view .svc-head{
  gap:var(--ds-s2); padding:var(--ds-s2) var(--ds-s3);
  font-size:var(--ds-f14); letter-spacing:.5px;
}
body.page-tree-view .svc-head .svc-title{ font-weight:700; color:var(--accent); }
body.page-tree-view .svc-head .svc-kpi{
  display:inline-flex; align-items:baseline; gap:var(--ds-s1);
  font-size:var(--ds-f12); font-weight:400; letter-spacing:0; color:var(--ink-2);
}
body.page-tree-view .svc-head .svc-kpi b{
  font-size:var(--ds-f16); font-weight:800; color:var(--ink); font-variant-numeric:tabular-nums;
}
body.page-tree-view .svc-head .svc-kpi.warn b{ color:var(--state-warn,#d98a1f); }
body.page-tree-view .svc-head .svc-kpi.danger b{ color:var(--state-err,#ff2d55); }
body.page-tree-view .svc-head .svc-more{
  margin-left:auto; min-height:28px; padding:0 var(--ds-s2);
  border:1px solid var(--ds-border-weak); border-radius:var(--ds-r-pill);
  background:transparent; color:var(--ink-2); font:inherit; font-size:var(--ds-f12); cursor:pointer;
}
body.page-tree-view .svc-head .svc-more[aria-expanded="true"]{ color:var(--accent); border-color:var(--accent-dim); }
body.page-tree-view .svc-head #svcClose{
  margin-left:var(--ds-s1); min-width:28px; min-height:28px;
  font-size:var(--ds-f16);
}
body.page-tree-view .svc-head-detail{
  display:flex; align-items:baseline; gap:var(--ds-s2); flex-wrap:wrap;
  padding:0 var(--ds-s3) var(--ds-s2); font-size:var(--ds-f12); color:var(--ink-2);
}
body.page-tree-view .svc-head-detail[hidden]{ display:none; }
body.page-tree-view .svc-head-detail .vc-num{ color:var(--state-err,#ff2d55); font-weight:800; font-size:var(--ds-f14); }
body.page-tree-view .svc-head-detail .svc-total-note{ font-size:var(--ds-f12); color:var(--ink-2); }
body.page-tree-view .svc-tab{ font-size:var(--ds-f12); }
body.page-tree-view .svc-caliber{ font-size:var(--ds-f12); }
body.page-tree-view .svc-pane-tools .pd-search,
body.page-tree-view .svc-pane-tools .pd-mini{ border-radius:var(--ds-r-ctl); }

/* ── 首访引导：遮罩 + 居中卡片（不再压底卡/抽屉）──── */
.tv-guide-mask{
  position:fixed; inset:0; z-index:240;
  background:rgba(0,0,0,.55); -webkit-backdrop-filter:blur(2px); backdrop-filter:blur(2px);
}
.tv-guide-mask[hidden]{ display:none; }
body.page-tree-view .tv-guide{ z-index:250; }
body.page-tree-view .tv-guide .tg-card{
  border-radius:var(--ds-r-panel); box-shadow:var(--ds-shadow-drawer);
  padding:var(--ds-s4) var(--ds-s4) var(--ds-s3);
}
body.page-tree-view .tv-guide .tg-title{ font-size:var(--ds-f16); margin-bottom:var(--ds-s3); }
body.page-tree-view .tv-guide .tg-step{ font-size:var(--ds-f14); margin-bottom:var(--ds-s2); gap:var(--ds-s2); }
body.page-tree-view .tv-guide .tg-ok{ border-radius:var(--ds-r-ctl); font-size:var(--ds-f14); min-height:44px; }

@media (max-width:1020px){
  body.page-tree-view .header-l{ flex:0 0 auto; min-width:0; gap:var(--ds-s2); }
  body.page-tree-view .header-l h1{ font-size:var(--ds-f14); }
  /* 家族标识：≤1020 一律显示（本层唯一来源） */
  body.page-tree-view .header-l .sub{ display:block !important; max-width:42vw; margin-left:var(--ds-s1); }
}

/* ── 窄屏（≤768 或触屏）：工具条单行胶囊 + 更多菜单 ── */
@media (max-width:768px), (pointer:coarse){
  body.page-tree-view .header{ padding:0 var(--ds-s3); }
  body.page-tree-view .header-l h1{ font-size:var(--ds-f14); }
  /* 家族标识：手机上一行放不下全称，允许两行（首屏依然能读到「胡氏族谱 · 安定堂」） */
  body.page-tree-view .header-l .sub{
    white-space:normal; display:-webkit-box; -webkit-line-clamp:2; -webkit-box-orient:vertical;
    line-height:1.3; max-width:46vw; max-height:2.7em; align-self:center; overflow:hidden;
  }
  body.page-tree-view .header-r .btn{ min-width:44px; min-height:44px; height:44px; padding:0 var(--ds-s2); font-size:var(--ds-f12); }
  /* ≤768 页头动作统一收成 44×44 图标，避免右侧动作溢出视口 */
  body.page-tree-view .header-r{ gap:var(--ds-s1); }
  body.page-tree-view .header-r .btn{ width:44px; min-width:44px; padding:0; justify-content:center; }
  body.page-tree-view .header-r .btn .hbtn-t{ display:none; }
  body.page-tree-view .header-r .btn .hbtn-i{ margin-right:0; }
  body.page-tree-view .header-r .sep{ display:none; }
  body.page-tree-view .toolbar .zoom-output{ display:none !important; }
  /* 工具条：底部单行胶囊，只留 3 颗（适配 / 更多 / 谱务实心主按钮） */
  body.page-tree-view .toolbar{
    left:50% !important; right:auto !important; top:auto !important; bottom:var(--ds-s3) !important;
    transform:translateX(-50%) !important;
    flex-direction:row !important; flex-wrap:nowrap !important; overflow:visible !important;
    align-items:center !important;
    gap:var(--ds-s2) !important; padding:var(--ds-s1) var(--ds-s2) !important;
    border:1px solid var(--ds-border-weak) !important; border-radius:var(--ds-r-pill) !important;
    background:var(--ds-panel) !important; box-shadow:var(--ds-shadow) !important;
    max-width:calc(100vw - 96px) !important; height:auto !important;
  }
  body.page-tree-view .toolbar .btn,
  body.page-tree-view .toolbar .pd-btn{
    flex:0 0 44px !important; width:44px !important; height:44px !important; min-height:44px !important;
    border-radius:var(--ds-r-ctl) !important; font-size:var(--ds-f16) !important;
  }
  /* 导出 / 帮助 / 打印 / 重复定位 → 收进「更多」菜单 */
  body.page-tree-view #exportCsvBtn,
  body.page-tree-view #exportGedBtn,
  body.page-tree-view #helpBtn,
  body.page-tree-view #printBtn,
  body.page-tree-view #polishLocateBtn{ display:none !important; }
  body.page-tree-view #tbMoreBtn{ display:inline-flex !important; }
  body.page-tree-view .toolbar .btn.svc-btn{
    flex:0 0 auto !important; width:auto !important; min-width:76px;
    padding:0 var(--ds-s3) !important; font-size:var(--ds-f14) !important;
  }
  /* 导出结果提示：不占工具条宽度，浮在工具条上方 */
  body.page-tree-view .toolbar .export-msg{
    position:absolute; right:auto; bottom:calc(100% + var(--ds-s2)); left:50%; transform:translateX(-50%);
    max-width:calc(100vw - 32px); white-space:nowrap;
  }
  /* 手机节点：仅字号降一档，其余（padding/副行间距）沿用上方单一来源 */
  body.page-tree-view .node-card .name{ font-size:var(--ds-f14); }

  /* 底卡：圆角 16、统一抽屉阴影、间距 4/8/12/16 */
  .m-sheet{ border-radius:var(--ds-r-panel) var(--ds-r-panel) 0 0; box-shadow:var(--ds-shadow-drawer);
    padding:var(--ds-s3) var(--ds-s4) calc(var(--ds-s3) + env(safe-area-inset-bottom,0px)); }
  .m-sheet-grab{ margin:0 auto var(--ds-s2); }
  .m-sheet-nm{ font-size:var(--ds-f20); }
  .m-sheet-nm small{ font-size:var(--ds-f12); }
  .m-sheet-meta{ margin-top:var(--ds-s1); font-size:var(--ds-f12); }
  .m-sheet-act{ gap:var(--ds-s2); margin-top:var(--ds-s3); }
  .m-sheet-act button{ min-height:44px; height:44px; border-radius:var(--ds-r-ctl); font-size:var(--ds-f14); }

  /* 谱务抽屉：手机端贴底、圆角 16，头部 2 主数字 + 折叠详情 */
  body.page-tree-view .svc-drawer{ border-radius:var(--ds-r-panel) var(--ds-r-panel) 0 0; }
  body.page-tree-view .svc-head{ padding:var(--ds-s2) var(--ds-s3); gap:var(--ds-s2); }
  body.page-tree-view .svc-head .svc-kpi b{ font-size:var(--ds-f16); }

  /* 引导：遮罩之上居中，避开底卡与工具条 */
  body.page-tree-view .tv-guide{
    left:50% !important; right:auto !important; top:50% !important; bottom:auto !important;
    transform:translate(-50%,-50%) !important;
  }
  body.page-tree-view .tv-guide .tg-card{ width:min(320px,calc(100vw - 32px)); }
  body.page-tree-view .tv-more-menu{ left:50%; right:auto; bottom:calc(76px + env(safe-area-inset-bottom,0px)); transform:translateX(-50%); }
}

/* ── 手机竖屏（≤560）：动作收成图标 + 家族名单独一行占满宽度 ── */
@media (max-width:560px){
  body.page-tree-view .header{
    height:76px; min-height:76px; padding:6px var(--ds-s3) 0; align-items:flex-start;
  }
  body.page-tree-view .header-l{ flex:0 1 auto; min-width:0; }
  body.page-tree-view .header-r{ margin-left:auto; }
  /* 家族名：绝对定位到页头第二行，横向占满整宽（一屏读全「胡氏族谱 · 安定堂」） */
  body.page-tree-view .header-l .sub{
    position:absolute; left:var(--ds-s3); right:var(--ds-s3); top:52px;
    width:auto; max-width:none; margin:0; display:block;
    -webkit-line-clamp:unset; -webkit-box-orient:unset;
    white-space:nowrap; overflow:hidden; text-overflow:ellipsis; line-height:1.3;
  }
}
