/* ============ 字体：自托管 woff2，实测全库 21,344 汉字覆盖 100% ============ */
/* 原文用源古宋体-F：字形依《古籍印刷通用字规范》，扩 B 区取自文津宋体。
   全库覆盖 98.67%，缺的 283 字遍黑体全部补齐 → 不需要思源宋体做次选（实测）。
   题签／章题用马善政楷（OFL，约 7,000 字），缺字逐字回落到源古宋体。*/
@font-face{font-family:"DZG Song";src:url("/static/fonts/YuanguSong-F.woff2") format("woff2");
  font-display:swap;ascent-override:106%;descent-override:34%;}
@font-face{font-family:"DZG Kai";src:url("/static/fonts/LXGWWenKai-Regular.woff2") format("woff2");
  font-display:swap;ascent-override:100%;descent-override:24%;}
@font-face{font-family:"DZG Ext";src:url("/static/fonts/PlangothicP1-Regular.woff2") format("woff2");font-display:swap;}
@font-face{font-family:"DZG Ext2";src:url("/static/fonts/PlangothicP2-Regular.woff2") format("woff2");font-display:swap;}
@font-face{font-family:"DZG Cal";src:url("/static/fonts/MaShanZheng-Regular.woff2") format("woff2");font-display:swap;}
/* 小篆：崇羲篆體（CC BY-ND 3.0 TW，原样使用不转换不裁减），只用在字典页 */
@font-face{font-family:"DZG Seal";src:url("/static/fonts/ChongxiSeal.otf") format("opentype");font-display:swap;}

/* ============ 设计 Token（朱丝栏版框体系）============ */
:root{
  --topbar-h:48px;
  --paper:#F3EDDD; --surface:#F8F3E7; --ink:#1F1D18; --ink-2:#44403A;
  --muted:#7A7264; --faint:#9C947F; --line:#DCD3BC; --line-2:#E9E2D0;
  --cinnabar:#A93F2E; --cinnabar-deep:#7E2E22; --cinnabar-soft:rgba(169,63,46,.07);
  --cinnabar-rule:rgba(169,63,46,.28); --cinnabar-jie:rgba(169,63,46,.2);
  --ochre:#8A6D3B; --label-bg:#FBF7EC; --label-line:#C9BFA6; --seal-fg:#FBF4E6;
  --toc-hover:#EAE3D0; --bar-bg:#E6DECB;
  --grain-opacity:.5; --grain-blend:multiply;
  --fs-orig:20px; --lh-orig:2.05; --fs-trans:17px; --lh-trans:1.85;
  --measure:700px;
  --zoom:1;  /* 宽屏自动放大的倍数，见文件末尾；用到 vh/vw 的地方要除以它 */
  --font-orig:"DZG Song","DZG Kai","DZG Ext","DZG Ext2","SimSun-ExtB",serif;
  --font-trans:"DZG Kai","DZG Song","DZG Ext","DZG Ext2","SimSun-ExtB",serif;
  --font-ui:"DZG Kai","DZG Song",system-ui,sans-serif;
  --font-cal:"DZG Cal","DZG Song","DZG Kai","DZG Ext","DZG Ext2",serif;
}
html[data-theme="ink"]{
  --paper:#141210; --surface:#1B1916; --ink:#D8D0BE; --ink-2:#A8A092;
  --muted:#8C8474; --faint:#6F6858; --line:#2E2A23; --line-2:#252119;
  --cinnabar:#C25B44; --cinnabar-deep:#D9735C; --cinnabar-soft:rgba(194,91,68,.12);
  --cinnabar-rule:rgba(194,91,68,.42); --cinnabar-jie:rgba(194,91,68,.3);
  --ochre:#B0904F; --label-bg:#221F19; --label-line:#3A342B; --seal-fg:#F3E9D6;
  --toc-hover:#221F19; --bar-bg:#2E2A23;
  --grain-opacity:.16; --grain-blend:screen;
}
html[data-theme="plain"]{
  --paper:#FFFFFF; --surface:#FFFFFF; --ink:#1A1A1A; --ink-2:#3D3D3D;
  --muted:#6B6B6B; --faint:#9A9A9A; --line:#E4E4E4; --line-2:#F0F0F0;
  --cinnabar:#9A3324; --cinnabar-deep:#6E2419; --cinnabar-soft:rgba(154,51,36,.06);
  --cinnabar-rule:rgba(154,51,36,.25); --cinnabar-jie:rgba(154,51,36,.16);
  --ochre:#7A6234; --label-bg:#FAFAFA; --label-line:#D6D6D6; --seal-fg:#FFFFFF;
  --toc-hover:#F0F0F0; --bar-bg:#ECECEC;
  --grain-opacity:0; --grain-blend:normal;
}
*{box-sizing:border-box;}
[hidden]{display:none!important;}
html{background:var(--paper);}
body{margin:0;background:var(--paper);color:var(--ink);font-family:var(--font-ui);
  font-size:15px;line-height:1.8;-webkit-font-smoothing:antialiased;text-rendering:optimizeLegibility;
  min-height:calc(100vh / var(--zoom));position:relative;}
/* 宣纸纹理：只铺在页面底色上；版框有自己的底，框内不受影响 */
.grain{position:fixed;inset:0;width:100%;height:100%;pointer-events:none;z-index:0;
  opacity:var(--grain-opacity);mix-blend-mode:var(--grain-blend);}
.topbar,main{position:relative;z-index:1;}
a{color:var(--cinnabar);text-decoration:none;}
a:hover{color:var(--cinnabar-deep);}
.muted{color:var(--muted);} .small{font-size:.84em;}
.v{writing-mode:vertical-rl;text-orientation:upright;}
.cal{font-family:var(--font-cal);}
.kai{font-family:var(--font-trans);}
mark{background:var(--cinnabar-soft);color:var(--cinnabar);padding:0 2px;
  box-shadow:0 1px 0 var(--cinnabar);}
code{font-family:var(--font-trans);background:var(--cinnabar-soft);padding:0 4px;}

/* ============ 版式元素：版框 · 题签 · 印章 · 鱼尾 · 界行 · 译记 ============ */
.frame{border:2px solid var(--cinnabar);outline:1px solid var(--cinnabar);outline-offset:-9px;
  background:var(--surface);position:relative;}
.label{background:var(--label-bg);border:1px solid var(--label-line);box-shadow:0 1px 0 rgba(0,0,0,.15);
  color:var(--ink);text-align:center;letter-spacing:.14em;}
/* 竖排签：竖排文字从右侧起行，行盒只有一个字宽，余量全落在左边 → 用 flex 在横向居中；
   末字后的 letter-spacing 是多余的，下内边距减掉同样的量 */
.label.v,.shuer{display:flex;align-items:center;justify-content:center;}
.seal{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));direction:rtl;
  background:var(--cinnabar);color:var(--seal-fg);border:2px solid var(--cinnabar);
  outline:1px solid var(--cinnabar-rule);outline-offset:2px;border-radius:2px;
  font-family:var(--font-orig);font-weight:600;box-shadow:inset 0 0 0 1px rgba(255,255,255,.28);}
.seal span{display:flex;align-items:center;justify-content:center;line-height:1;}
.yuwei{display:inline-block;width:18px;height:14px;background:var(--cinnabar);flex-shrink:0;
  clip-path:polygon(0 0,100% 0,100% 43%,50% 100%,0 43%);}
.yuwei.sm{width:14px;height:11px;}
.banxin{display:flex;align-items:center;justify-content:center;gap:18px;color:var(--cinnabar);
  letter-spacing:.3em;font-family:var(--font-orig);font-size:14px;}
.banxin span{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:40%;}
.jiehang{background-image:repeating-linear-gradient(90deg,var(--cinnabar-jie) 0 1px,transparent 1px 46px);}
.yi{display:inline-flex;align-items:center;justify-content:center;width:18px;height:18px;font-size:11px;
  color:var(--seal-fg);background:var(--cinnabar);border-radius:2px;margin-right:8px;vertical-align:2px;
  font-family:var(--font-orig);line-height:1;}
/* 版心式检索行：上下朱线 + 两端短竖柱，合成开口的版心格（鱼尾横放两端会被读成下拉三角，已撤） */
.banxin-search{display:flex;align-items:center;gap:14px;border-top:2px solid var(--cinnabar);
  border-bottom:2px solid var(--cinnabar);padding:14px 20px;position:relative;}
.banxin-search::before,.banxin-search::after{content:"";position:absolute;top:-2px;bottom:-2px;width:3px;
  background:var(--cinnabar);}
.banxin-search::before{left:0;} .banxin-search::after{right:0;}
.banxin-search input{flex:1;min-width:0;border:0;background:transparent;font-family:var(--font-orig);
  font-size:22px;color:var(--ink);letter-spacing:.08em;outline:none;padding:0;}
.banxin-search input::placeholder{color:var(--faint);}
.banxin-search button{font-family:var(--font-trans);font-size:14px;color:var(--seal-fg);background:var(--cinnabar);
  border:0;padding:8px 22px;letter-spacing:.2em;cursor:pointer;white-space:nowrap;}
.banxin-search button:hover{background:var(--cinnabar-deep);}
.banxin-search button.ghost{background:transparent;color:var(--muted);border:1px solid var(--line);padding:7px 16px;}
.banxin-search button.ghost:hover{color:var(--cinnabar);border-color:var(--cinnabar);}
/* 版心行里的藏下拉：去掉原生外观，配朱色小三角 */
.pick{position:relative;display:inline-flex;align-items:center;flex-shrink:0;}
.pick select{appearance:none;-webkit-appearance:none;background:transparent;border:1px solid var(--line);
  color:var(--ink-2);font-family:var(--font-trans);font-size:14px;letter-spacing:.08em;
  padding:6px 28px 6px 14px;cursor:pointer;line-height:1.4;}
.pick select:hover,.pick select:focus{outline:none;border-color:var(--cinnabar);color:var(--cinnabar);}
.pick::after{content:"";position:absolute;right:11px;top:50%;width:8px;height:6px;margin-top:-3px;
  background:var(--cinnabar);clip-path:polygon(0 0,100% 0,50% 100%);pointer-events:none;}
.pick select option{background:var(--surface);color:var(--ink);}

/* ============ 顶栏 ============ */
.topbar{display:flex;align-items:center;gap:22px;height:48px;padding:0 28px;position:sticky;top:0;z-index:20;
  background:color-mix(in srgb,var(--surface) 80%,transparent);backdrop-filter:blur(8px);
  border-bottom:1px solid var(--line);font-size:14px;}
.brand{font-family:var(--font-cal);font-size:23px;letter-spacing:.18em;color:var(--ink);line-height:1;}
.brand:hover{color:var(--cinnabar);}
.topbar nav{display:flex;}
.topbar nav a{padding:2px 9px;font-size:15px;color:var(--muted);border-right:1px solid var(--line);
  font-family:var(--font-orig);line-height:1.2;}
.topbar nav a:last-child{border-right:0;}
.topbar nav a:hover,.topbar nav a.cur{color:var(--cinnabar);}
.mini-search{margin-left:auto;width:220px;}
.mini-search input{width:100%;padding:4px 2px;border:0;border-bottom:1px solid var(--line);background:transparent;
  color:var(--ink);font:inherit;font-size:13.5px;font-family:var(--font-orig);letter-spacing:.06em;}
.mini-search input:focus{outline:none;border-bottom-color:var(--cinnabar);}
body.is-home .mini-search{display:none;}
body.is-home .tools{margin-left:auto;}
.tools{display:flex;gap:16px;align-items:center;}
.tools a,.tools button{color:var(--muted);font:inherit;font-family:var(--font-trans);font-size:13px;padding:2px 0;
  border:0;background:transparent;cursor:pointer;display:inline-flex;align-items:center;letter-spacing:.04em;}
.tools a:hover,.tools button:hover{color:var(--cinnabar);}
.tools svg{display:block;}

/* ============ 印章徽标 ============ */
.badge{display:inline-block;font-size:11.5px;padding:1px 6px;border-radius:2px;letter-spacing:.05em;
  border:1px solid var(--cinnabar);color:var(--cinnabar);vertical-align:2px;line-height:1.6;font-family:var(--font-trans);}
.b-done{border-color:var(--cinnabar);color:var(--cinnabar);}
.b-warn{border-color:var(--ochre);color:var(--ochre);}
.b-none{border-color:var(--line);color:var(--faint);}

/* ============ 首页 ============ */
.home{max-width:1180px;margin:0 auto;padding:40px 24px 80px;min-height:calc(100vh / var(--zoom) - var(--topbar-h));
  display:flex;flex-direction:column;justify-content:center;}
.hero{display:flex;gap:48px;align-items:stretch;padding:44px 56px 40px;}
.hero-sign{display:flex;flex-direction:column;align-items:center;gap:18px;flex-shrink:0;}
.hero-title{width:74px;font-size:54px;letter-spacing:.12em;padding:22px 0 calc(22px - .12em);line-height:1;}
.hero-seal{width:52px;height:52px;font-size:17px;}
.hero-mid{flex:1;min-width:0;display:flex;flex-direction:column;justify-content:center;gap:22px;}
.hero-stats{font-size:15px;color:var(--muted);letter-spacing:.2em;}
.hero-tips{font-size:13px;color:var(--faint);display:flex;gap:26px;flex-wrap:wrap;}
.hero-side{font-size:15px;color:var(--muted);letter-spacing:.18em;line-height:2;display:flex;
  flex-direction:row-reverse;gap:10px;flex-shrink:0;font-family:var(--font-orig);}
.hero-side a{color:var(--muted);}
.hero-side a:hover,.hero-side a.resume{color:var(--cinnabar);}
.idx-bar{height:3px;background:var(--bar-bg);position:relative;}
.idx-bar i{position:absolute;left:0;top:0;bottom:0;background:var(--cinnabar);}
.home-foot{text-align:center;margin-top:30px;color:var(--faint);font-size:13px;letter-spacing:.18em;}
.home-foot a{color:var(--muted);margin:0 10px;}
.home-foot a:hover{color:var(--cinnabar);}

/* ============ 藏页书目 ============ */
.listing{max-width:1180px;margin:0 auto;padding:40px 24px 60px;}
.zang-frame{padding:30px 44px 26px;}
.zang-hd{display:flex;gap:28px;align-items:center;padding-bottom:18px;border-bottom:2px solid var(--cinnabar);}
.zang-sign{width:46px;font-size:30px;padding:14px 0 calc(14px - .14em);line-height:1;}
.listing h1{font-family:var(--font-orig);font-size:30px;font-weight:normal;letter-spacing:.14em;margin:0 0 4px;}
.listing .meta{color:var(--faint);font-size:13px;letter-spacing:.06em;font-family:var(--font-trans);}
.zang-prog{margin-left:auto;width:220px;font-family:var(--font-trans);font-size:13px;color:var(--muted);
  text-align:right;font-variant-numeric:tabular-nums;}
.zang-prog .idx-bar{margin-bottom:8px;}
.zang-search{margin:22px 0 6px;padding:10px 16px;}
.zang-search input{font-size:18px;}
.cat{font-family:var(--font-orig);font-size:17px;color:var(--cinnabar);letter-spacing:.1em;
  margin:26px 0 10px;padding-bottom:8px;border-bottom:1px solid var(--cinnabar-rule);cursor:pointer;list-style:none;}
.cat::-webkit-details-marker{display:none;}
.cat::before{content:"";display:inline-block;width:12px;height:9px;background:var(--cinnabar);margin-right:10px;
  vertical-align:1px;clip-path:polygon(0 0,100% 0,100% 43%,50% 100%,0 43%);}
.cat span{color:var(--faint);font-size:12px;font-family:var(--font-trans);letter-spacing:0;margin-left:8px;}
.blist{columns:2;column-gap:46px;list-style:none;padding:0;margin:0;}
.blist li{break-inside:avoid;display:flex;align-items:baseline;gap:6px;padding:5px 0;font-size:15px;}
.blist a{color:var(--ink);font-family:var(--font-orig);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}
.blist a:hover{color:var(--cinnabar);}
.blist .dots{flex:1;border-bottom:1px dotted var(--line);margin:0 2px 4px;min-width:14px;}
.blist .num{color:var(--faint);font-size:12px;font-variant-numeric:tabular-nums;white-space:nowrap;font-family:var(--font-trans);}

/* ============ 阅读页 ============ */
.reader-layout{display:flex;gap:34px;align-items:flex-start;max-width:1440px;margin:0 auto;padding:34px 28px 80px;}
.toc{width:250px;flex-shrink:0;position:sticky;top:var(--topbar-h);max-height:calc(100vh / var(--zoom) - var(--topbar-h));overflow-y:auto;padding:6px 0 20px;}
.toc-head{padding:0 16px 14px;border-bottom:1px solid var(--cinnabar-rule);margin-bottom:8px;}
.toc-head .crumb{font-size:12.5px;color:var(--faint);letter-spacing:.05em;font-family:var(--font-trans);}
.toc-head .crumb a{color:var(--faint);}
.toc-head h2{font-family:var(--font-orig);font-size:22px;margin:6px 0 8px;font-weight:normal;letter-spacing:.05em;}
.toc-search{margin:12px 0 0;}
.toc-search input{width:100%;border:0;border-bottom:1px solid var(--line);background:transparent;padding:4px 2px;
  font-family:var(--font-orig);font-size:14px;color:var(--ink);letter-spacing:.04em;}
.toc-search input:focus{outline:none;border-bottom-color:var(--cinnabar);}
.toc-search input::placeholder{color:var(--faint);}
.search-opts .scope a{color:var(--cinnabar);}
.toc-list{display:flex;flex-direction:column;}
.toc-list a{display:block;padding:0 16px;height:36px;line-height:36px;font-size:14px;color:var(--ink-2);
  white-space:nowrap;overflow:hidden;text-overflow:ellipsis;position:relative;font-family:var(--font-orig);}
.toc-list a:hover{background:var(--toc-hover);color:var(--cinnabar);}
.toc-list a.cur{background:var(--cinnabar-soft);color:var(--cinnabar);}
.toc-list a.cur::before{content:"";position:absolute;left:0;top:8px;bottom:8px;width:3px;background:var(--cinnabar);}
.reader-wrap{flex:1;min-width:0;position:relative;padding-left:46px;}
.shuer{position:absolute;left:0;top:40px;width:34px;padding:14px 0;background:var(--label-bg);border:1px solid var(--cinnabar);
  color:var(--cinnabar);font-size:18px;letter-spacing:.14em;text-align:center;line-height:1;max-height:320px;overflow:hidden;
  padding-bottom:calc(14px - .14em);}
.reader{padding:0;}
.reader .banxin{padding:14px 24px 0;}
.reader-body{display:flex;gap:40px;justify-content:center;padding:26px 56px 40px 40px;}
.jie-col{width:150px;flex-shrink:0;display:flex;justify-content:center;padding-top:12px;align-self:stretch;}
.jie-title{font-size:34px;letter-spacing:.1em;line-height:1;background:var(--surface);padding:10px 6px;color:var(--ink);
  position:sticky;top:calc(var(--topbar-h) + 16px);align-self:flex-start;max-height:calc(100vh / var(--zoom) - var(--topbar-h) - 42px);overflow:hidden;}
.reader-inner{flex:1;min-width:0;max-width:var(--measure);}
.page-label{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0);margin:0;}
.mode-bar{display:flex;align-items:center;margin-bottom:26px;flex-wrap:wrap;gap:6px 0;
  /* 读到下面时吸附在顶栏下方，对照切换和书签随时够得着 */
  position:sticky;top:var(--topbar-h);z-index:8;background:var(--surface);padding:8px 0;box-shadow:0 1px 0 var(--line-2);
  margin-left:-40px;padding-left:40px;}  /* 向左多铺 40px，吸附时盖住段首的「译」「签」小印 */
.mode-bar button{font-family:var(--font-trans);font-size:13px;padding:5px 14px;border:1px solid var(--line);
  color:var(--muted);background:var(--paper);cursor:pointer;margin-right:-1px;}
.mode-bar button:hover{color:var(--cinnabar);}
.mode-bar button.cur{background:var(--cinnabar);color:var(--seal-fg);border-color:var(--cinnabar);position:relative;z-index:1;}
.mode-bar #bookmark-btn{margin-left:12px;}
.mode-bar .meta-r{margin-left:auto;font-family:var(--font-trans);font-size:13px;color:var(--faint);padding-left:12px;}
.sec{position:relative;margin:0 0 30px;scroll-margin-top:110px;}
.sec:target{background:var(--cinnabar-soft);box-shadow:0 0 0 10px var(--cinnabar-soft);}
.pilcrow{position:absolute;left:-36px;top:8px;width:20px;height:20px;line-height:20px;text-align:center;
  font-size:12px;color:var(--seal-fg);background:var(--cinnabar);border-radius:2px;opacity:0;transition:opacity .15s;}
.sec:hover .pilcrow{opacity:.85;}
.pilcrow:hover{opacity:1;color:var(--seal-fg);}
.orig{font-family:var(--font-orig);font-size:var(--fs-orig);line-height:var(--lh-orig);
  color:var(--ink);text-align:justify;letter-spacing:.02em;}
.trans{font-family:var(--font-trans);font-size:var(--fs-trans);line-height:var(--lh-trans);
  color:var(--ink-2);margin-top:8px;text-align:justify;}
.orig p,.trans p{margin:0;}
.orig p+p,.trans p+p{margin-top:.5em;}
/* 原书缺字（PUA 自造字，Unicode 未收录、字库无字形）——标出来而不是留豆腐块 */
.pua{display:inline-block;width:.86em;height:.86em;line-height:.86em;text-align:center;
  font-size:.82em;color:var(--faint);border:1px dashed var(--line);border-radius:2px;
  vertical-align:1px;margin:0 .06em;cursor:help;font-family:var(--font-ui);}
.reader.m-orig .trans{display:none;}
.reader.m-trans .orig{display:none;}
.notice{background:var(--paper);border:1px solid var(--line);padding:.6em 1em;
  color:var(--muted);font-size:14px;margin-bottom:20px;font-family:var(--font-trans);}
.pager{display:flex;align-items:center;gap:18px;margin-top:40px;padding-top:18px;
  border-top:1px solid var(--line);font-size:14px;font-family:var(--font-trans);}
.pager .prev,.pager .next{flex:1;min-width:0;}
.pager .next{text-align:right;}
.pager .mid{display:flex;justify-content:center;flex-shrink:0;}
.pager a{color:var(--muted);}
.pager a:hover{color:var(--cinnabar);}
.pager .next a{color:var(--cinnabar);}

/* ============ 检索页 ============ */
.search-page{max-width:900px;margin:0 auto;padding:36px 24px 60px;}
.search-head{padding:26px 40px 20px;}
.search-form input[name=q]{font-size:20px;}
.search-opts{display:flex;gap:12px;align-items:center;margin-top:14px;font-size:13px;color:var(--faint);
  font-family:var(--font-trans);flex-wrap:wrap;}
.search-opts select{border:1px solid var(--line);background:var(--paper);color:var(--ink-2);font:inherit;
  font-size:13px;padding:4px 8px;font-family:var(--font-trans);}
.search-opts select:focus{outline:none;border-color:var(--cinnabar);}
.book-hits{margin:16px 0 0;font-size:13px;color:var(--faint);font-family:var(--font-trans);}
.book-hits a{font-family:var(--font-orig);font-size:14px;}
.results{margin-top:22px;padding:6px 30px 12px;}
.result{padding:16px 0;border-bottom:1px solid var(--line-2);}
.results .result:last-of-type{border-bottom:0;}
.r-src{font-size:12.5px;color:var(--muted);margin-bottom:5px;letter-spacing:.03em;font-family:var(--font-trans);}
.r-src a{color:var(--ink-2);font-family:var(--font-orig);font-size:14.5px;}
.r-src a:hover{color:var(--cinnabar);}
.r-kwic{font-family:var(--font-orig);font-size:16.5px;line-height:1.95;color:var(--ink);}
.results .pager{margin-top:8px;}

/* ============ 人物卡片（别名扩展检索）============ */
.person{border:1px solid var(--cinnabar);outline:1px solid var(--cinnabar);outline-offset:-5px;background:var(--surface);
  padding:20px 24px 16px;margin:22px 0 6px;position:relative;}
.p-hd{display:flex;align-items:baseline;gap:12px;flex-wrap:wrap;margin-bottom:3px;}
.p-name{font-family:var(--font-cal);font-size:30px;letter-spacing:.06em;line-height:1.1;}
.p-real{color:var(--muted);font-size:14px;font-family:var(--font-orig);}
.p-meta{color:var(--faint);font-size:12.5px;font-family:var(--font-trans);}
.p-total{margin-left:auto;font-size:13px;color:var(--muted);font-variant-numeric:tabular-nums;font-family:var(--font-trans);}
.p-sum{color:var(--muted);font-size:13px;margin:2px 0 12px;font-family:var(--font-trans);}
.p-aliases{display:flex;gap:8px;flex-wrap:wrap;align-items:center;padding-top:12px;border-top:1px solid var(--cinnabar-rule);}
.chip{display:inline-flex;align-items:center;gap:6px;border:1px solid var(--line);padding:3px 11px;font-size:13px;
  background:var(--paper);color:var(--ink-2);font-family:var(--font-orig);}
.chip:hover{border-color:var(--cinnabar);color:var(--cinnabar);}
.chip .n{font-size:11.5px;color:var(--faint);font-family:var(--font-trans);font-variant-numeric:tabular-nums;}
.chip.on{background:var(--cinnabar);border-color:var(--cinnabar);color:var(--seal-fg);}
.chip.on:hover{color:var(--seal-fg);background:var(--cinnabar-deep);}
.chip.on .n{color:var(--seal-fg);opacity:.85;}
.chip.weak{border-style:dashed;}
.chip .box{width:11px;height:11px;border:1px solid currentColor;display:inline-block;position:relative;flex-shrink:0;}
.chip.on .box::after{content:"";position:absolute;inset:1.5px;background:currentColor;}
.p-foot{margin-top:10px;font-size:12.5px;color:var(--faint);line-height:1.85;font-family:var(--font-trans);}
.p-foot a{color:var(--muted);border-bottom:1px dotted var(--line);}
.p-foot a:hover{color:var(--cinnabar);}
.highlights{margin:20px 0 4px;padding:4px 20px 6px;background:var(--surface);border:1px solid var(--line);}
.highlights .hl-hd{font-size:12.5px;color:var(--faint);letter-spacing:.2em;padding:9px 0 3px;font-family:var(--font-trans);}
.highlights .result:last-child{border-bottom:0;}
.tag{display:inline-block;font-size:11px;padding:0 6px;border-radius:2px;line-height:1.7;
  border:1px solid var(--line);color:var(--faint);margin-left:6px;vertical-align:1px;font-family:var(--font-trans);}
.tag.alias{border-color:var(--cinnabar);color:var(--cinnabar);background:var(--cinnabar-soft);}

/* ============ 问答 / 调研 ============ */
.chat-panel,.research-page{max-width:900px;margin:0 auto;padding:36px 24px 60px;}
.ai-frame{padding:28px 40px 30px;}
.ai-hd{display:flex;gap:24px;align-items:center;padding-bottom:16px;border-bottom:2px solid var(--cinnabar);margin-bottom:18px;}
.ai-sign{width:40px;font-size:24px;padding:12px 0 calc(12px - .14em);line-height:1;flex-shrink:0;}
.ai-hd h1{font-family:var(--font-orig);font-size:26px;font-weight:normal;letter-spacing:.12em;margin:0 0 4px;}
.ai-hd p{margin:0;font-family:var(--font-trans);}
.ai-hd .back{margin-left:auto;font-family:var(--font-trans);font-size:13px;color:var(--muted);align-self:flex-start;}
.chat-log{display:flex;flex-direction:column;gap:16px;margin:12px 0 22px;}
.msg{padding:.8em 1.1em;background:var(--paper);border:1px solid var(--line);
  white-space:pre-wrap;font-size:15.5px;line-height:1.9;}
.msg.user{background:var(--cinnabar-soft);border-color:var(--cinnabar-rule);align-self:flex-end;max-width:80%;
  font-family:var(--font-orig);}
.msg.ai{font-family:var(--font-trans);background:transparent;border:0;border-left:2px solid var(--cinnabar);padding-left:16px;}
.chat-form input,.research-form input{font-size:18px;}
.cite{font-size:.86em;font-family:var(--font-orig);color:var(--cinnabar);border-bottom:1px solid var(--cinnabar-rule);}
.cite-ok{color:var(--cinnabar);font-size:.8em;} .cite-bad{color:var(--ochre);font-size:.8em;}
.tree{font-size:13.5px;background:var(--paper);border:1px solid var(--line);padding:16px 18px;margin-top:18px;font-family:var(--font-trans);}
.tree .node{margin:.28em 0 .28em 1.1em;}
.tree .node::before{content:"";display:inline-block;width:8px;height:8px;border-radius:50%;margin-right:8px;
  border:1px solid var(--cinnabar);vertical-align:1px;}
.tree .st-running::before{background:linear-gradient(90deg,var(--cinnabar) 50%,transparent 50%);}
.tree .st-done::before{background:var(--cinnabar);}
.tree .st-fail::before{border-color:var(--faint);}
.done-link{margin-top:14px;font-family:var(--font-trans);}
.reports{list-style:none;padding:0;margin:0;}
.reports li{display:flex;gap:12px;align-items:baseline;padding:8px 0;border-bottom:1px solid var(--line-2);}
.reports li a{font-family:var(--font-orig);color:var(--ink);}
.reports li a:hover{color:var(--cinnabar);}
.reports li .muted{margin-left:auto;font-family:var(--font-trans);white-space:nowrap;}
.sub-hd{font-family:var(--font-orig);font-weight:normal;font-size:19px;letter-spacing:.1em;margin:2.2em 0 .6em;
  color:var(--cinnabar);padding-bottom:8px;border-bottom:1px solid var(--cinnabar-rule);}
.report-md{font-family:var(--font-trans);font-size:16px;line-height:1.95;padding-top:6px;}
.report-md h1,.report-md h2,.report-md h3{font-family:var(--font-orig);font-weight:normal;letter-spacing:.06em;}
.report-md h2{border-bottom:1px solid var(--cinnabar-rule);padding-bottom:6px;}
.research-page ul{padding-left:1.3em;}
.research-page li{margin:.3em 0;}

/* ============ 响应式 ============ */
@media(max-width:1100px){
  .jie-col,.shuer{display:none;} .reader-wrap{padding-left:0;}
  .page-label{position:static;width:auto;height:auto;clip:auto;overflow:visible;font-family:var(--font-cal);
    font-size:30px;font-weight:normal;letter-spacing:.08em;margin:0 0 18px;}
  .reader-body{padding:22px 28px 34px;}
}
@media(max-width:900px){
  .toc{display:none;} .reader-body{padding:20px 18px 30px;} .blist{columns:1;}
  .hero{flex-direction:column;gap:24px;padding:28px 22px;}
  .hero-sign{flex-direction:row;justify-content:center;}
  .hero-title{writing-mode:horizontal-tb;width:auto;font-size:40px;padding:8px 18px;}
  .hero-side{writing-mode:horizontal-tb;flex-direction:column;align-items:center;gap:0;}
  .banxin-search{flex-wrap:wrap;gap:10px;padding:14px 16px;} .banxin-search input{flex-basis:100%;order:-1;}
  .zang-frame,.search-head,.ai-frame{padding:22px 22px 20px;}
  .zang-hd{flex-wrap:wrap;} .zang-prog{margin-left:0;width:100%;text-align:left;}
  .results{padding:6px 18px 12px;}
  .topbar{gap:12px;padding:0 14px;} .topbar nav a{padding:2px 6px;font-size:14px;} .mini-search{width:140px;}
}

/* ============ 磁青泥金（夜间）：明清写经用磁青纸、泥金书写 ============ */
html[data-theme="qing"]{
  --paper:#0F1A2B; --surface:#14223A; --ink:#EADBB4; --ink-2:#CDBF98;
  --muted:#A39A80; --faint:#837D68; --line:#2C3B58; --line-2:#1F2C45;
  --cinnabar:#D4B068; --cinnabar-deep:#EBCB86; --cinnabar-soft:rgba(212,176,104,.12);
  --cinnabar-rule:rgba(212,176,104,.36); --cinnabar-jie:rgba(212,176,104,.2);
  --ochre:#D08F62; --label-bg:#1A2944; --label-line:#3B4B6B; --seal-fg:#13203A;
  --toc-hover:#1B2A45; --bar-bg:#26344F;
  --grain-opacity:.18; --grain-blend:screen;
  --seal-red:#B5402D; --seal-red-fg:#F7E6C4;
}
html[data-theme="qing"] body{background-image:url("/static/sajin.svg");}
html[data-theme="qing"] .seal{background:var(--seal-red);border-color:var(--seal-red);color:var(--seal-red-fg);outline-color:rgba(181,64,45,.55);}
html[data-theme="qing"] .brand,html[data-theme="qing"] .hero-title,html[data-theme="qing"] .zang-sign,
html[data-theme="qing"] .ai-sign,html[data-theme="qing"] .jie-title,html[data-theme="qing"] .p-name{
  background:linear-gradient(172deg,#F5DDA0 0%,#DDB96E 48%,#B48A42 100%);
  -webkit-background-clip:text;background-clip:text;color:transparent;
  filter:drop-shadow(0 0 10px rgba(233,207,142,.16));}
html[data-theme="qing"] .frame{box-shadow:0 0 30px rgba(212,176,104,.06);}
html[data-theme="qing"] .shuer{color:#E2C27D;}

/* 换主题：新配色从主题按钮处以墨团形状晕开 */
@property --vr{syntax:'<length>';inherits:true;initial-value:0px;}
html.vt-theme::view-transition-old(root){animation:none;}
html.vt-theme::view-transition-new(root){
  animation:dzg-ink 1s cubic-bezier(.62,.04,.28,1) both;
  -webkit-mask-image:url("/static/ink-blob.svg");mask-image:url("/static/ink-blob.svg");
  -webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;
  -webkit-mask-size:var(--vr) var(--vr);mask-size:var(--vr) var(--vr);
  -webkit-mask-position:calc(var(--vx) - var(--vr) / 2) calc(var(--vy) - var(--vr) / 2);
  mask-position:calc(var(--vx) - var(--vr) / 2) calc(var(--vy) - var(--vr) / 2);
}
@keyframes dzg-ink{from{--vr:0px}to{--vr:360vmax}}

/* ============ 命中圈点：从检索结果进书，命中的字加朱圈（中文着重号） ============ */
.qd{-webkit-text-emphasis:open circle var(--cinnabar);text-emphasis:open circle var(--cinnabar);
  -webkit-text-emphasis-position:under right;text-emphasis-position:under right;
  transition:text-emphasis-color .2s ease,-webkit-text-emphasis-color .2s ease;}
.qd.wait{-webkit-text-emphasis-color:transparent;text-emphasis-color:transparent;}

/* ============ 浮层（查字、引文原文） ============ */
.pop{position:absolute;z-index:40;width:340px;max-width:calc(100vw / var(--zoom) - 24px);background:var(--surface);
  border:1px solid var(--cinnabar);outline:1px solid var(--cinnabar);outline-offset:-5px;padding:14px 18px;
  box-shadow:0 10px 30px rgba(20,15,10,.18);font-family:var(--font-trans);font-size:13.5px;line-height:1.8;color:var(--ink-2);
  animation:dzg-pop .18s ease-out both;}
@keyframes dzg-pop{from{opacity:0;transform:translateY(4px);}}
.pop .zi-hd{display:flex;align-items:baseline;gap:12px;padding-bottom:8px;border-bottom:1px solid var(--cinnabar-rule);margin-bottom:6px;}
.pop .zi-ch{font-family:var(--font-cal);font-size:40px;line-height:1;color:var(--ink);}
.pop .zi-py{font-size:15px;color:var(--cinnabar);letter-spacing:.04em;}
.pop .zi-alt{font-family:var(--font-orig);color:var(--muted);font-size:14px;}
.pop h4{font-family:var(--font-orig);font-weight:normal;font-size:13px;color:var(--cinnabar);letter-spacing:.2em;margin:8px 0 2px;}
.pop .zi-o{font-family:var(--font-orig);font-size:14.5px;color:var(--ink);margin:0;}
.pop .zi-t{margin:3px 0 0;}
.pop .zi-src{font-size:12px;color:var(--faint);}
.pop .zi-src a,.pop .src-hd a{color:var(--muted);border-bottom:1px dotted var(--cinnabar-rule);}
.pop .zi-empty{color:var(--faint);margin:6px 0 0;}
.pop .src-hd{font-family:var(--font-orig);font-size:14px;color:var(--ink);margin-bottom:4px;display:flex;justify-content:space-between;gap:10px;}
.pop .src-o{font-family:var(--font-orig);font-size:15px;line-height:1.95;color:var(--ink);margin:0;max-height:14em;overflow:auto;}
.pop mark{background:var(--cinnabar-soft);}
.zi-ring{position:absolute;pointer-events:none;border:1.5px solid var(--cinnabar);border-radius:50%;z-index:30;animation:dzg-ring .25s ease-out both;}
@keyframes dzg-ring{from{opacity:0;transform:scale(1.5);}}

/* ============ 划句小签 ============ */
.hua{position:absolute;z-index:45;display:flex;background:var(--ink);box-shadow:0 6px 18px rgba(0,0,0,.22);animation:dzg-pop .15s ease-out both;}
.hua button{border:0;background:transparent;color:var(--paper);font-family:var(--font-trans);font-size:13px;padding:6px 13px;cursor:pointer;}
.hua button+button{border-left:1px solid color-mix(in srgb,var(--paper) 25%,transparent);}
.hua button:hover,.hua button:focus-visible{color:var(--cinnabar);outline:none;}
.hua::after{content:"";position:absolute;left:50%;bottom:-6px;margin-left:-6px;border:6px solid transparent;border-bottom:0;border-top-color:var(--ink);}
.toast{position:fixed;left:50%;bottom:34px;transform:translateX(-50%);z-index:60;background:var(--ink);color:var(--paper);
  font-family:var(--font-trans);font-size:13.5px;padding:7px 18px;opacity:0;transition:opacity .2s;pointer-events:none;}
.toast.on{opacity:.92;}

/* ============ 引文钤印：核对通过「核」，不通过「疑」 ============ */
.stamp{display:inline-flex;align-items:center;justify-content:center;width:20px;height:20px;font-size:12.5px;line-height:1;
  margin:0 2px 0 5px;vertical-align:2px;font-family:var(--font-orig);font-style:normal;border-radius:2px;transform:rotate(-5deg);}
.stamp.ok{background:var(--cinnabar);color:var(--seal-fg);box-shadow:inset 0 0 0 1px rgba(255,255,255,.28);}
html[data-theme="qing"] .stamp.ok{background:var(--seal-red);color:var(--seal-red-fg);}
.stamp.bad{color:var(--ochre);box-shadow:inset 0 0 0 1px var(--ochre);}
.stamp.in{animation:dzg-stamp .5s cubic-bezier(.2,.9,.25,1.15) both;}
@keyframes dzg-stamp{0%{opacity:0;transform:scale(2.2) rotate(-15deg);filter:blur(1.5px);}
  55%{opacity:1;transform:scale(.88) rotate(-6deg);filter:blur(0);}100%{transform:scale(1) rotate(-5deg);}}
a.cite{cursor:pointer;}

/* ============ 浑仪：等模型时代替转圈图标 ============ */
.think{display:flex;gap:22px;align-items:center;padding:6px 0 10px;}
.think-side{min-width:0;font-family:var(--font-trans);}
.think-steps{list-style:none;margin:0 0 6px;padding:0;display:flex;gap:4px 18px;flex-wrap:wrap;font-size:13.5px;color:var(--faint);}
.think-steps li{display:flex;align-items:center;gap:7px;}
.think-steps li::before{content:"";width:7px;height:7px;border-radius:50%;border:1px solid currentColor;}
.think-steps li.on{color:var(--cinnabar);}
.think-steps li.on::before{background:linear-gradient(90deg,currentColor 50%,transparent 50%);}
.think-steps li.done{color:var(--ink-2);}
.think-steps li.done::before{background:currentColor;}
.think-log{font-size:12.5px;color:var(--muted);min-height:1.7em;}
.hunyi{width:76px;height:76px;perspective:420px;flex-shrink:0;position:relative;}
.hunyi.lg{width:110px;height:110px;}
.hunyi .hy-view{position:absolute;inset:0;transform-style:preserve-3d;transform:rotateX(-16deg) rotateY(24deg);}
.hunyi .ring,.hunyi .hy-axis,.hunyi .hy-spin,.hunyi .hy-spin2{position:absolute;inset:0;transform-style:preserve-3d;}
.hunyi .ring{border-radius:50%;border:1.2px solid var(--cinnabar);}
.hunyi .r-horizon{transform:rotateX(90deg);border:3px double var(--cinnabar-rule);}
.hunyi .r-meridian{transform:rotateY(90deg);border:3px double var(--cinnabar);}
.hunyi .hy-axis{transform:rotateZ(34deg);}
.hunyi .hy-axis::before{content:"";position:absolute;left:50%;top:-8%;bottom:-8%;width:1px;margin-left:-.5px;background:var(--cinnabar-rule);}
.hunyi .r-equator{inset:8%;transform:rotateX(90deg);border-style:dashed;}
.hunyi .r-ecliptic{inset:8%;transform:rotateX(66.5deg);border-color:var(--ochre);}
.hunyi .r-siyou{inset:17%;}
.hunyi .hy-tube{position:absolute;left:50%;top:18%;bottom:18%;width:1.6px;margin-left:-.8px;background:var(--cinnabar);transform:rotateZ(28deg);}
.hunyi .hy-earth{position:absolute;left:50%;top:50%;width:6px;height:6px;margin:-3px;border-radius:50%;background:var(--cinnabar);}

/* ============ 摘录页 ============ */
.zhai-page{max-width:900px;margin:0 auto;padding:36px 24px 60px;}
.zhai-tools{display:flex;gap:10px;margin:0 0 6px;}
.zhai-tools button{font-family:var(--font-trans);font-size:13px;padding:4px 12px;border:1px solid var(--line);background:var(--paper);color:var(--ink-2);cursor:pointer;}
.zhai-tools button:hover{color:var(--cinnabar);border-color:var(--cinnabar-rule);}
.zhai-item{padding:14px 0;border-bottom:1px solid var(--line-2);}
.zhai-item q{display:block;font-family:var(--font-orig);font-size:17px;line-height:1.95;color:var(--ink);quotes:"「" "」";}
.zhai-meta{display:flex;gap:14px;align-items:baseline;margin-top:4px;font-family:var(--font-trans);font-size:12.5px;color:var(--faint);}
.zhai-meta a{color:var(--muted);border-bottom:1px dotted var(--cinnabar-rule);}
.zhai-meta button{margin-left:auto;border:0;background:none;color:var(--faint);cursor:pointer;font:inherit;}
.zhai-meta button:hover{color:var(--cinnabar);}
.zhai-empty{font-family:var(--font-trans);color:var(--faint);padding:18px 0;}

@media (prefers-reduced-motion: reduce){
  html.vt-theme::view-transition-new(root),.stamp.in,.pop,.hua,.zi-ring{animation:none;}
  .qd{transition:none;}
}

/* ============ 第二批：十藏分布 · 读过的印记 · 仅原文看白话 · 书签匣 ============ */
.fenye{display:grid;grid-template-columns:repeat(11,minmax(0,1fr));margin:18px 0 2px;
  border-top:1px solid var(--cinnabar-rule);border-bottom:1px solid var(--cinnabar-rule);}
.fenye:empty{display:none;}
.fy{appearance:none;border:0;background:transparent;cursor:pointer;padding:9px 4px 8px;text-align:center;
  border-right:1px solid var(--line-2);color:var(--ink-2);position:relative;font:inherit;}
.fy:last-child{border-right:0;}
.fy .fy-z{display:block;font-family:var(--font-orig);font-size:14.5px;letter-spacing:.06em;}
.fy .fy-n{display:block;font-family:var(--font-trans);font-size:11.5px;color:var(--muted);font-variant-numeric:tabular-nums;margin-top:1px;}
.fy .fy-bar{display:block;height:3px;margin:6px 10px 0;background:var(--bar-bg);position:relative;}
.fy .fy-bar i{position:absolute;left:0;top:0;bottom:0;background:var(--cinnabar);transition:width .45s cubic-bezier(.3,.7,.2,1);}
.fy:hover .fy-z{color:var(--cinnabar);}
.fy[aria-pressed="true"]{background:var(--cinnabar-soft);cursor:default;}
.fy[aria-pressed="true"] .fy-z{color:var(--cinnabar);}
.fy[aria-pressed="true"]::after{content:"";position:absolute;left:0;right:0;bottom:-1px;height:2px;background:var(--cinnabar);}
.fy:disabled{cursor:default;opacity:.38;}
.fy:disabled:hover .fy-z{color:inherit;}
.fy:focus-visible{outline:2px solid var(--cinnabar);outline-offset:-2px;}
.fy-cap{font-family:var(--font-trans);font-size:12.5px;color:var(--faint);margin:6px 0 0;}
.fy-cap:empty{display:none;}

/* 目录里读过的章节：右侧一个小朱点 */
.toc-list a{padding-right:26px;}
.toc-list a.read::after{content:"";position:absolute;right:12px;top:50%;width:6px;height:6px;margin-top:-3px;border-radius:50%;background:var(--cinnabar);opacity:.85;}
/* 藏页：读过或加过书签的书，书名后一点朱 */
.blist li.read a::after{content:"";display:inline-block;width:5px;height:5px;border-radius:50%;background:var(--cinnabar);margin-left:6px;vertical-align:3px;}

/* 仅原文模式：段首「译」，点开白话像眉批一样出现在段下 */
.yi-btn{display:none;position:absolute;left:-36px;top:8px;width:20px;height:20px;border:0;padding:0;cursor:pointer;
  font-family:var(--font-orig);font-size:12px;line-height:20px;color:var(--seal-fg);background:var(--cinnabar);border-radius:2px;opacity:.6;}
.yi-btn:hover,.yi-btn[aria-expanded="true"]{opacity:1;}
.yi-btn:focus-visible{outline:2px solid var(--cinnabar);outline-offset:2px;opacity:1;}
.reader.m-orig .yi-btn{display:block;}
.reader.m-orig .pilcrow{display:none;}
.reader.m-orig .sec.show-trans .trans{display:block;margin-top:10px;padding:8px 14px 10px;background:var(--cinnabar-soft);
  border-left:2px solid var(--cinnabar);animation:dzg-pop .25s ease-out both;}

/* 书签：页边钤一方小印「签」 */
.bm-seal{position:absolute;left:-36px;top:36px;width:20px;height:20px;display:flex;align-items:center;justify-content:center;
  background:var(--cinnabar);color:var(--seal-fg);font-family:var(--font-orig);font-size:12px;border-radius:2px;transform:rotate(-6deg);
  box-shadow:inset 0 0 0 1px rgba(255,255,255,.3);pointer-events:none;}
html[data-theme="qing"] .bm-seal{background:var(--seal-red);color:var(--seal-red-fg);}
.bm-seal.in{animation:dzg-stamp .5s cubic-bezier(.2,.9,.25,1.15) both;}
.reader.m-orig .sec .bm-seal{top:36px;}

/* 首页书签匣：签条插在匣里，最新的在最右 */
.xia{display:flex;flex-direction:row-reverse;align-items:flex-end;gap:8px;flex-shrink:0;align-self:center;
  padding:0 0 10px;border-bottom:3px solid var(--cinnabar-rule);position:relative;}
.xia-lab{writing-mode:vertical-rl;font-family:var(--font-trans);font-size:12px;letter-spacing:.3em;color:var(--faint);align-self:flex-start;}
.qian{display:flex;flex-direction:column;align-items:center;color:inherit;}
.qian .q-body{writing-mode:vertical-rl;text-orientation:upright;font-family:var(--font-cal);font-size:16px;letter-spacing:.12em;
  background:var(--label-bg);border:1px solid var(--cinnabar);color:var(--ink);padding:10px 0;width:34px;text-align:center;
  max-height:150px;overflow:hidden;transition:transform .2s;}
.qian:hover .q-body{transform:translateY(-6px);color:var(--cinnabar);}
.qian:focus-visible{outline:2px solid var(--cinnabar);outline-offset:3px;}
.qian .q-seq{font-family:var(--font-trans);font-size:10.5px;color:var(--faint);margin-top:4px;white-space:nowrap;}

@media(max-width:1100px){.yi-btn,.bm-seal{left:-26px;}.mode-bar{margin-left:-28px;padding-left:28px;}}
@media(max-width:900px){
  .fenye{grid-template-columns:repeat(6,minmax(0,1fr));}
  .yi-btn,.bm-seal{left:-18px;transform:scale(.85);}
  .mode-bar{margin-left:0;padding-left:0;}
  .xia{flex-direction:row;align-self:center;}
}
@media (prefers-reduced-motion: reduce){.fy .fy-bar i,.qian .q-body{transition:none;}.bm-seal.in,.reader.m-orig .sec.show-trans .trans{animation:none;}}

/* ============ 第三批：藏书星图（星图本身固定磁青泥金，不随主题变） ============ */
.xingtu-page{max-width:1240px;margin:0 auto;padding:36px 24px 60px;}
.sky-wrap{position:relative;border:2px solid #C9A762;outline:1px solid #C9A762;outline-offset:-9px;
  background:radial-gradient(ellipse at 50% 48%,#182740 0%,#101C30 58%,#0B1422 100%);}
.sky-wrap canvas{display:block;width:100%;cursor:crosshair;touch-action:manipulation;}
.sky-tip{position:absolute;pointer-events:none;z-index:3;min-width:150px;max-width:280px;padding:9px 13px 10px;
  background:rgba(14,24,40,.94);border:1px solid rgba(212,176,104,.55);color:#EADBB4;
  font-family:var(--font-trans);font-size:12.5px;line-height:1.7;box-shadow:0 6px 24px rgba(0,0,0,.35);}
.sky-tip b{display:block;font-family:var(--font-orig);font-weight:normal;font-size:16px;color:#F3DDA0;margin-bottom:2px;}
.sky-tip span{display:block;color:#B9AE8E;}
.sky-tip span:last-child{color:#8E8670;font-size:11.5px;margin-top:2px;}
.sky-legend{font-family:var(--font-trans);font-size:13px;line-height:1.9;color:var(--faint);margin:12px 2px 0;}
.sky-legend a{color:var(--muted);border-bottom:1px dotted var(--cinnabar-rule);}
.sky-legend a:hover{color:var(--cinnabar);}
.sr-only{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap;}
.sr-only a:focus{position:fixed;left:12px;top:56px;width:auto;height:auto;clip:auto;z-index:50;background:var(--surface);
  padding:4px 10px;border:1px solid var(--cinnabar);}
/* 首页统计那行可点进星图 */
a.hero-stats{color:var(--muted);text-decoration:none;border-bottom:1px dotted transparent;align-self:flex-start;}
a.hero-stats:hover{color:var(--cinnabar);border-bottom-color:var(--cinnabar-rule);}
@media(max-width:900px){.xingtu-page{padding:20px 10px 40px;}}

/* 窄屏顶栏：两行排（品牌与工具一行，十藏一行），不再横向溢出；吸附元素跟着让出高度 */
@media(max-width:640px){
  :root{--topbar-h:78px;}
  .topbar{flex-wrap:wrap;height:auto;min-height:var(--topbar-h);padding:6px 12px 4px;gap:2px 12px;}
  .brand{font-size:20px;}
  .topbar nav{order:3;width:100%;justify-content:space-between;}
  .topbar nav a{padding:2px 4px;border-right:0;}
  .mini-search{display:none;}
  .tools{margin-left:auto;gap:12px;}
  body.is-home .tools{margin-left:auto;}
}

/* ============ 字典：字页 /zi、首页 /zidian、部首页 ============ */
.zi-page,.zidian-page{max-width:1080px;margin:0 auto;padding:32px 24px 60px;}
.zi-head{display:flex;gap:36px;align-items:center;padding:28px 40px;}
.zi-glyphs{display:flex;gap:14px;flex-shrink:0;}
.zi-glyph{margin:0;display:flex;flex-direction:column;align-items:center;gap:6px;}
.zi-glyph figcaption{font-family:var(--font-trans);font-size:12px;letter-spacing:.2em;color:var(--faint);}
.zi-big.zi-seal{font-family:"DZG Seal",var(--font-orig);font-size:118px;}
.zi-eseal{font-family:"DZG Seal",var(--font-orig);font-size:34px;line-height:1;color:var(--ink);
  padding:3px 5px;border:1px solid var(--cinnabar-rule);background:var(--label-bg);}
.zi-via{margin:0 0 10px;padding:8px 12px;font-family:var(--font-trans);font-size:14px;line-height:1.8;color:var(--ink-2);
  background:var(--cinnabar-soft);border-left:2px solid var(--cinnabar);}
.zi-via a{color:var(--cinnabar);font-family:var(--font-orig);font-size:16px;}
.zi-none{margin:12px 0 4px;font-family:var(--font-trans);font-size:15px;line-height:1.9;color:var(--ink-2);}
.zi-none-why{margin:0 0 6px;font-family:var(--font-trans);font-size:12.5px;line-height:1.8;color:var(--faint);}
.zi-fix{color:var(--muted);border-bottom:1px dotted var(--faint);cursor:help;}
/* 古文字形 */
.gw-db{margin:16px 0 20px;}
.gw-h{display:flex;flex-wrap:wrap;align-items:baseline;gap:4px 14px;margin:0 0 8px;font-weight:normal;font-family:var(--font-orig);font-size:18px;color:var(--ink);}
.gw-h em{font-style:normal;font-family:var(--font-trans);font-size:12.5px;color:var(--faint);}
.gw-x{font-family:var(--font-trans);font-size:12.5px;color:var(--muted);border-bottom:1px dotted var(--cinnabar-rule);}
.gw-x:hover{color:var(--cinnabar);}
.gw-grid{display:flex;flex-wrap:wrap;gap:6px;}
/* 金文时代：竖排小签，排在该时代字形之前 */
.gw-period{writing-mode:vertical-rl;display:flex;align-items:center;justify-content:center;padding:6px 3px;
  font-family:var(--font-trans);font-size:12px;letter-spacing:.15em;color:var(--cinnabar);background:var(--cinnabar-soft);
  border:1px solid var(--cinnabar-rule);}
.gw-f{margin:0;width:92px;display:flex;flex-direction:column;align-items:center;gap:4px;padding:8px 4px 6px;border:1px solid var(--line-2);background:var(--paper);}
.gw-img{width:66px;height:66px;object-fit:contain;}
.gw-f figcaption{display:flex;flex-direction:column;font-family:var(--font-trans);font-size:11px;line-height:1.45;color:var(--muted);text-align:center;word-break:break-all;}
.gw-more{margin-top:8px;}
.gw-more summary{cursor:pointer;width:max-content;font-family:var(--font-trans);font-size:13px;color:var(--muted);}
.gw-more summary:hover{color:var(--cinnabar);}
html[data-theme="ink"] .gw-img{filter:invert(.88);}
html[data-theme="qing"] .gw-img{filter:invert(.86) sepia(.55) saturate(1.4);}
/* 异体字 */
.yt-sum{margin:10px 0 12px;font-family:var(--font-trans);font-size:14px;color:var(--ink-2);}
.yt-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(118px,1fr));gap:8px;}
.yt-card{display:flex;flex-direction:column;align-items:center;gap:6px;padding:12px 8px 10px;border:1px solid var(--line);
  background:var(--paper);color:var(--ink);text-align:center;}
.yt-card:hover{border-color:var(--cinnabar);}
.yt-card:focus-visible{outline:2px solid var(--cinnabar);outline-offset:2px;}
.yt-ch{font-family:var(--font-orig);font-size:42px;line-height:1.1;}
.yt-card:hover .yt-ch{color:var(--cinnabar);}
.yt-tags{display:flex;flex-direction:column;gap:2px;font-family:var(--font-trans);font-size:12.5px;line-height:1.5;color:var(--ink-2);}
.yt-tag em{font-style:normal;color:var(--faint);margin-left:5px;font-size:11.5px;}
.yt-ev{margin:14px 0 4px;font-family:var(--font-trans);font-size:13px;color:var(--muted);}
.yt-ev summary{cursor:pointer;color:var(--muted);width:max-content;}
.yt-ev summary:hover{color:var(--cinnabar);}
.yt-ev ul{margin:8px 0 0;padding-left:1.2em;line-height:1.9;}
.yt-ev b{font-family:var(--font-orig);font-weight:normal;font-size:16px;color:var(--ink);}
.zi-credit{margin:4px 4px 0;font-family:var(--font-trans);font-size:12px;line-height:1.8;color:var(--faint);}
.zi-credit a{color:var(--muted);border-bottom:1px dotted var(--cinnabar-rule);}
/* 字头：田字格（朱色虚线十字），字形用原文字体链，生僻字也有 */
.zi-big{flex-shrink:0;width:150px;height:150px;display:flex;align-items:center;justify-content:center;
  font-family:var(--font-orig);font-size:104px;line-height:1;color:var(--ink);background:var(--label-bg);
  border:1px solid var(--cinnabar);
  background-image:linear-gradient(to right,transparent calc(50% - .5px),var(--cinnabar-jie) calc(50% - .5px),var(--cinnabar-jie) calc(50% + .5px),transparent calc(50% + .5px)),
    linear-gradient(to bottom,transparent calc(50% - .5px),var(--cinnabar-jie) calc(50% - .5px),var(--cinnabar-jie) calc(50% + .5px),transparent calc(50% + .5px));}
.zi-meta{flex:1;min-width:0;}
.zi-py{display:flex;flex-wrap:wrap;gap:4px 16px;font-size:24px;color:var(--cinnabar);letter-spacing:.04em;margin-bottom:6px;font-family:var(--font-trans);}
.zi-facts{display:flex;flex-wrap:wrap;gap:4px 26px;margin:0 0 16px;font-family:var(--font-trans);font-size:14px;}
.zi-facts div{display:flex;gap:8px;align-items:baseline;}
.zi-facts dt{color:var(--faint);font-size:12.5px;letter-spacing:.1em;}
.zi-facts dd{margin:0;color:var(--ink-2);}
.zi-facts a{color:var(--cinnabar);}
.zi-var{font-family:var(--font-orig);font-size:17px;margin-right:6px;}
.zi-search{padding:10px 16px;}
.zi-search input{font-size:18px;}
.zi-toc{display:flex;flex-wrap:wrap;gap:6px 20px;margin:18px 4px;font-family:var(--font-orig);font-size:15px;}
.zi-toc a{color:var(--ink-2);border-bottom:1px solid var(--cinnabar-rule);padding-bottom:1px;}
.zi-toc a:hover{color:var(--cinnabar);}
.zi-toc .zi-home{margin-left:auto;font-family:var(--font-trans);font-size:13px;color:var(--muted);}
.zi-sec{padding:22px 36px 18px;margin-bottom:22px;scroll-margin-top:calc(var(--topbar-h) + 12px);}
.zi-sec h2{font-family:var(--font-orig);font-weight:normal;font-size:20px;letter-spacing:.14em;color:var(--cinnabar);
  margin:0 0 6px;padding-bottom:8px;border-bottom:1px solid var(--cinnabar-rule);}
.zi-entry{padding:12px 0 14px;border-bottom:1px solid var(--line-2);}
.zi-entry:last-child{border-bottom:0;}
.zi-ehd{display:flex;flex-wrap:wrap;gap:4px 14px;align-items:baseline;font-family:var(--font-trans);font-size:12.5px;color:var(--faint);margin-bottom:6px;}
.zi-ech{font-family:var(--font-orig);font-size:22px;color:var(--ink);line-height:1;}
.zi-src{margin-left:auto;color:var(--muted);border-bottom:1px dotted var(--cinnabar-rule);}
.zi-src:hover{color:var(--cinnabar);}
.zi-text{cursor:text;}
.zi-orig{font-family:var(--font-orig);font-size:17px;line-height:2;color:var(--ink);}
.zi-trans{font-family:var(--font-trans);font-size:15px;line-height:1.9;color:var(--ink-2);}
.zi-orig p,.zi-trans p{margin:0 0 .35em;}
.zi-trans .yi{float:left;margin-top:5px;}
.kx-pair{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1fr);gap:30px;}
.kx-pair.single{grid-template-columns:1fr;}
.kx-pair .zi-trans{border-left:1px solid var(--cinnabar-rule);padding-left:22px;}
.zi-fenye{margin:10px 0 6px;grid-template-columns:repeat(10,minmax(0,1fr));}
.zi-fenye .fy{text-decoration:none;}
.zi-more-line{font-family:var(--font-trans);font-size:13.5px;margin:12px 0 0;}
.pop .zi-more{display:block;margin-top:8px;padding-top:7px;border-top:1px solid var(--cinnabar-rule);font-size:13px;color:var(--cinnabar);text-align:right;}
.pop .zi-more:hover{color:var(--cinnabar-deep);}

/* 字典首页 */
.zi-recent{display:flex;flex-wrap:wrap;gap:4px 10px;align-items:baseline;margin:12px 2px 0;font-family:var(--font-trans);font-size:13px;color:var(--faint);}
.zi-recent a{font-family:var(--font-orig);font-size:18px;color:var(--ink-2);}
.zi-recent a:hover{color:var(--cinnabar);}
.bu-tabs{float:right;display:inline-flex;gap:0;font-family:var(--font-trans);font-size:13px;letter-spacing:0;}
.bu-tabs a{border:1px solid var(--line);padding:2px 12px;color:var(--muted);margin-left:-1px;}
.bu-tabs a.cur{background:var(--cinnabar);border-color:var(--cinnabar);color:var(--seal-fg);}
.bu-table{display:flex;flex-direction:column;}
.bu-row{display:flex;gap:16px;align-items:baseline;padding:8px 0;border-bottom:1px solid var(--line-2);}
.bu-st{flex-shrink:0;width:3.4em;font-family:var(--font-trans);font-size:12.5px;color:var(--faint);}
.bu-list{display:flex;flex-wrap:wrap;gap:4px 2px;}
.bu-list a{display:inline-flex;align-items:center;justify-content:center;min-width:34px;height:34px;padding:0 3px;
  font-family:var(--font-orig);font-size:20px;color:var(--ink);border:1px solid transparent;}
.bu-list a:hover{border-color:var(--cinnabar);color:var(--cinnabar);background:var(--cinnabar-soft);}
.bu-sw{margin-top:6px;}
.zi-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(70px,1fr));gap:6px;margin-top:10px;}
.zi-cell{display:flex;flex-direction:column;align-items:center;padding:8px 0 6px;border:1px solid var(--line);background:var(--paper);color:var(--ink);}
.zi-cell:hover{border-color:var(--cinnabar);color:var(--cinnabar);}
.zc-ch{font-family:var(--font-orig);font-size:30px;line-height:1.15;}
.zc-py{font-family:var(--font-trans);font-size:11.5px;color:var(--faint);min-height:1.4em;}
.zi-list{display:grid;grid-template-columns:repeat(auto-fill,minmax(240px,1fr));gap:8px;margin-top:10px;}
.zi-card{display:grid;grid-template-columns:auto 1fr;grid-template-rows:auto auto;gap:0 12px;align-items:baseline;
  padding:10px 14px;border:1px solid var(--line);background:var(--paper);color:var(--ink);}
.zi-card:hover{border-color:var(--cinnabar);}
.zi-card .zc-ch{grid-row:1 / 3;font-size:34px;}
.zi-card .zc-py{font-size:13px;color:var(--cinnabar);}
.zi-card .zc-gl{font-family:var(--font-orig);font-size:13.5px;color:var(--ink-2);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
.zi-card.nf .zc-gl{color:var(--faint);}
@media(max-width:900px){
  .zi-head{flex-direction:column;align-items:flex-start;padding:22px;}
  .zi-big{width:120px;height:120px;font-size:84px;}
  .zi-big.zi-seal{font-size:94px;}
  .zi-sec{padding:18px 18px 14px;}
  .kx-pair{grid-template-columns:1fr;gap:10px;}
  .kx-pair .zi-trans{border-left:0;padding-left:0;}
  .zi-fenye{grid-template-columns:repeat(5,minmax(0,1fr));}
  .bu-tabs{float:none;display:flex;margin-top:8px;}
}

/* ---------- 宽屏自动放大 ----------
   大屏上整页只占中间一小块、字显得小而空。按窗口宽度整体放大一档（等同浏览器缩放），
   笔记本与普通显示器（窗口 < 1800）完全不变。浏览器自己放大过的，窗口宽度随之变小，不会叠加放大。
   放大后 100vh 也会被放大：用到 vh/vw 的地方都除以 --zoom；JS 按坐标摆浮层处除以实测放大倍数（tools.js zoomK）。 */
@media(min-width:1800px){:root{zoom:1.125;--zoom:1.125;}}
@media(min-width:2100px){:root{zoom:1.25;--zoom:1.25;}}
@media(min-width:2700px){:root{zoom:1.5;--zoom:1.5;}}
