/* 大道无形 · 报刊版
   视觉规范来自 design-handoff（Claude Design v2 报刊版），逐值照搬。
   与设计稿的**两处有意偏离**，都是境内生产环境要求：
   1. 去掉 Google Fonts（fonts.googleapis.com 在境内不可靠），改系统字体栈；
   2. 内联样式抽成 class —— 设计稿靠 runtime 处理 style-hover，静态站没有 runtime。 */

:root{
  --bg:#ffffff; --panel:#f4f3ef; --panel-2:#f7f6f2;
  --ink:#141414; --ink-2:#3d3d3a; --ink-3:#55534d;
  --mute:#7c7a73; --mute-2:#98958c; --mute-3:#aaa79e;
  --line:#e2e0da; --line-2:#d9d6ce; --line-3:#e8e6e0; --line-in:#c5c2b8;
  --red:#b3241c; --red-d:#8c1610;
  --serif:"Noto Serif SC","Source Han Serif SC","Songti SC","SimSun",serif;
  --sans:-apple-system,BlinkMacSystemFont,"PingFang SC","Microsoft YaHei",sans-serif;
  --mono:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;
}
*{box-sizing:border-box}
/* 必须 !important：本表里 .nav-item / .idx-item / .more 都显式设了 display，
   优先级高于 [hidden] 的浏览器默认样式，不加这条则 el.hidden = true 完全无效
   —— 搜索过滤和反向链接分层会「看起来生效、实际全都还在」。 */
[hidden]{display:none !important}
body{margin:0;background:var(--bg);color:var(--ink);
  font:16px/1.85 var(--serif);-webkit-font-smoothing:antialiased}
a{color:var(--red);text-decoration:none}
a:hover{color:var(--red-d)}
::selection{background:#f6dbd8}
input::placeholder{color:var(--mute-3)}
b,strong{font-weight:600}
.mono{font-family:var(--mono);font-variant-numeric:tabular-nums}
.sans{font-family:var(--sans)}

/* ── 三栏骨架 ───────────────────────────────────────────── */
.shell{display:grid;grid-template-columns:264px minmax(0,1fr) var(--aside,340px);
  height:100vh;overflow:hidden}
/* 中栏在首页是 <main>、在主题页是 <article>（要挂 data-doc-scroll 给目录跳转用）。
   .shell 本身 height:100vh + overflow:hidden，所以**每一个直接子元素都必须自己开滚动** ——
   漏掉 article 的后果是主题页正文被裁断且完全滚不动，而首页看着一切正常。 */
.shell>nav,.shell>main,.shell>article,.shell>aside{overflow-y:auto;min-height:0}
.shell>nav{background:var(--panel);border-right:1px solid var(--line-2);
  padding:0 0 60px;font-family:var(--sans)}
.shell>main,.shell>article{background:var(--bg)}
.shell>aside{background:var(--panel);border-left:1px solid var(--line-2);
  padding:20px 18px 80px;font-family:var(--sans)}

/* ── 左栏 ──────────────────────────────────────────────── */
.nav-head{position:sticky;top:0;z-index:3;background:var(--panel);
  padding:16px 16px 12px;border-bottom:1px solid var(--line-2)}
.brand{display:flex;align-items:center;gap:10px;color:var(--ink)}
.brand:hover{color:var(--ink)}
.brand .mark{width:28px;height:28px;background:var(--red);color:#fff;display:flex;
  align-items:center;justify-content:center;font:700 16px/1 var(--serif);border-radius:3px;flex:0 0 auto}
.brand .txt{display:flex;flex-direction:column}
.brand .txt b{font:700 14px/1.3 var(--serif);letter-spacing:1.5px}
.brand .txt span{font:10px/1.2 var(--mono);color:var(--mute-2)}
.nav-search{margin-top:12px;width:100%;padding:7px 11px;border:1px solid var(--line-in);
  background:#fff;font:13px/1 var(--sans);outline:none;color:var(--ink)}
.nav-search:focus{border-color:var(--red)}
/* 分类是父级，字号和字重必须压过条目。原先分类 11.5px 灰、条目 13.5px 深，
   层级整个是反的。改成报刊栏目名的做法：上方一条横线把段落断开，
   分类用衬线黑体、正文黑；条目缩进一格、字号收小、常规字重。
   区分主要靠「横线 + 字重 + 缩进」而不是一味放大字号 ——
   129 条铺在一栏里，字号普遍变大会白白拖长一屏。 */
.nav-cat{border-top:1px solid var(--line-2)}
.nav-cat:first-of-type{border-top:0}
.nav-cat>summary{display:flex;align-items:center;gap:8px;padding:13px 16px 7px;cursor:pointer;
  font:700 13.5px/1.2 var(--serif);letter-spacing:.5px;color:var(--ink);list-style:none}
.nav-cat>summary::-webkit-details-marker{display:none}
.nav-cat>summary:hover{color:var(--red)}
.nav-cat>summary .caret{font-size:9px;color:var(--mute-3);transition:transform .15s;
  font-weight:400;flex:0 0 auto}
.nav-cat[open]>summary .caret{transform:rotate(90deg)}
.nav-cat>summary .n{margin-left:auto;font:400 11px/1 var(--mono);color:var(--mute-3)}
.nav-list{padding:0 0 10px}
.nav-item{display:flex;align-items:center;gap:7px;padding:3.5px 16px 3.5px 25px;
  font-size:12.5px;color:var(--ink-3)}
.nav-item:hover{background:#eceae4;color:var(--ink-3)}
.nav-item.built{color:var(--ink);font-weight:600}
.nav-item.built:hover{color:var(--ink)}
.nav-item.cur,.nav-item.cur:hover{background:var(--ink);color:#fff}
.nav-item.cur .n{color:var(--mute)}
.nav-item .dot{width:5px;height:5px;border-radius:99px;flex:0 0 auto;background:transparent}
.nav-item.built .dot{background:var(--red)}
.nav-item .nm{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.nav-item .n{margin-left:auto;font:11px/1 var(--mono);color:var(--mute-3);font-variant-numeric:tabular-nums}

/* ── 中栏排版 ───────────────────────────────────────────── */
.doc{max-width:680px;padding:48px 56px 140px;margin:0 auto}
.doc-wide{max-width:760px;padding:52px 56px 120px;margin:0 auto}
/* 中栏原先卡了 max-width 却没居中，正文一律贴左，右边留下一整片死白。
   居中之外，宽屏上再把多出来的横向空间分给正文和右栏，
   而不是继续留白 —— 右栏那些语料本来就挤得厉害。 */
/* 主题页的右栏比首页窄一档 —— 用 class 而不是内联 style，
   否则内联优先级压过下面的媒体查询，宽屏加宽根本不生效。 */
.shell-topic{--aside:320px}
@media (min-width:1560px){
  .shell{--aside:400px}
  .shell-topic{--aside:380px}
  .doc{max-width:760px}
  .doc-wide{max-width:840px}
}
@media (min-width:1900px){
  .doc{max-width:820px}
  .doc-wide{max-width:900px}
}
.kicker{font:11px/1 var(--mono);color:var(--mute-2);letter-spacing:2.5px}
.kicker-lg{font:12px/1 var(--mono);color:var(--mute-2);letter-spacing:3px;margin-bottom:16px}
h1.big{font-size:58px;font-weight:900;margin:14px 0 12px;letter-spacing:1px;line-height:1.15}
h1.home{margin:0 0 14px;font-size:56px;font-weight:900;letter-spacing:1px;line-height:1.18}
.lede{color:var(--ink-3);font-size:15px;margin:0 0 16px;line-height:1.8}
.rule{border-bottom:3px solid var(--ink)}
.meta-row{display:flex;align-items:center;gap:10px;flex-wrap:wrap;padding-bottom:16px;
  font:12px/1 var(--sans);color:var(--mute)}
.meta-row b{color:var(--ink)}
.chip{padding:3px 10px;border-radius:99px;font-size:11px;font-family:var(--sans)}
.chip-sm{padding:2px 7px;border-radius:99px;font-size:10.5px;font-family:var(--sans)}
.src-雪球{background:#e8f0ff;color:#3a5a99}
.src-大道语录{background:#f1e9da;color:#7a5c2e}
.src-网易博客{background:#e9f3ea;color:#3f6b45}

/* 正文块 */
.body h2{font-size:21px;margin:2.5em 0 .8em;padding-bottom:.4em;
  border-bottom:1px solid var(--line);letter-spacing:1px}
.body h3{font-size:16.5px;margin:2em 0 .6em;color:var(--ink);letter-spacing:.5px}
.body p{margin:0 0 1.1em}
.body hr{border:0;border-top:1px solid var(--line);margin:2.4em 0}
.body ul,.body ol{margin:0 0 1.1em;padding-left:1.4em}
.body li{margin:.3em 0}
.body small,.body .small{display:block;color:var(--ink-2);font:15px/1.85 var(--sans);margin:0 0 1.05em}
.body blockquote{margin:1.7em 0;padding:16px 22px 15px 46px;position:relative;
  background:var(--panel-2);border-top:1px solid var(--ink);border-bottom:1px solid var(--ink);
  font-size:16px;line-height:2;color:#1a1a18}
.body blockquote::before{content:"「";position:absolute;left:14px;top:8px;
  font-size:30px;color:var(--red);font-weight:700;line-height:1}
.body blockquote p{margin:0 0 .6em}
.body blockquote p:last-child{margin:0}

/* 双链三态 */
.wl{padding:0 1px;cursor:pointer}
.wl-built{color:var(--red);border-bottom:1px solid var(--red)}
.wl-stub{color:#666359;border-bottom:1px dashed var(--mute-3)}
.wl-stub:hover{color:var(--ink)}
.wl-dead{color:var(--red);border-bottom:1px dotted var(--red)}

/* 年份密度轴 */
.years-cap{margin:22px 0 8px;font:11px/1 var(--sans);color:var(--mute-2);letter-spacing:1.5px}
.years{display:flex;align-items:flex-end;gap:5px;height:56px;border-bottom:1px solid var(--line-2)}
.years .col{flex:1;display:flex;flex-direction:column;justify-content:flex-end;height:100%}
.years .bar{background:var(--red)}
.years .bar.empty{background:transparent;border:1px dashed var(--line-in);height:12px}
.years-lab{display:flex;gap:5px;font:9.5px/1 var(--mono);color:var(--mute-3);margin-top:4px}
.years-lab div{flex:1;text-align:center}

/* ── 右栏 ──────────────────────────────────────────────── */
.card{background:#fff;border:1px solid var(--line-2);padding:14px 16px}
.aside-h{font-size:11px;letter-spacing:1.5px;color:var(--mute-2);font-weight:600}
.toc a{display:block;padding:2.5px 0;font-size:13px;color:var(--ink-2)}
.toc a.lv3{font-size:12px;color:var(--mute);padding-left:14px}
.toc a:hover{color:var(--red)}
.tier-btns{display:flex;gap:4px;margin:10px 0 4px}
.tier-btns button{flex:1;padding:6px 4px;border:1px solid var(--line-in);background:#fff;
  color:var(--ink-2);font:11.5px/1.3 var(--sans);cursor:pointer}
.tier-btns button b{font-size:13px}
.tier-btns button[aria-selected="true"]{border-color:var(--ink);background:var(--ink);color:#fff}
.tier-note{font-size:11px;color:var(--mute-2);line-height:1.6;margin-bottom:4px}
.bl{padding:11px 0;border-top:1px solid var(--line-2)}
.bl .q{font-size:12px;color:var(--mute);line-height:1.6;margin-bottom:4px}
.bl .a{margin:0;font:13px/1.7 var(--serif)}
.bl .foot{margin-top:5px;display:flex;align-items:center;gap:7px;font:10.5px/1 var(--mono);color:var(--mute-2)}
.bl .foot a{color:var(--mute-2);margin-left:auto}
.bl .foot a:hover{color:var(--red)}
.more{display:block;width:100%;margin-top:10px;padding:8px;border:1px solid var(--line-in);
  background:#fff;cursor:pointer;font:12.5px/1 var(--sans);color:var(--ink-2)}
.more:hover{border-color:var(--red);color:var(--red)}

/* ── 顶栏（总目录等单栏页）─────────────────────────────── */
.top{border-bottom:1px solid var(--line);background:var(--panel)}
.top-in{max-width:1160px;margin:0 auto;padding:14px 32px;display:flex;align-items:center;gap:14px}
.top .mark{width:34px;height:34px;background:var(--red);color:#fff;display:flex;align-items:center;
  justify-content:center;font:700 19px/1 var(--serif);border-radius:4px;flex:0 0 auto}
.top-nav{margin-left:auto;display:flex;gap:26px;font:14px/1 var(--sans)}
.top-nav a{color:var(--ink-2);padding-bottom:4px}
.top-nav a:hover{color:var(--red)}
.top-nav a.cur{color:var(--ink);font-weight:600;border-bottom:2px solid var(--red)}
.page{max-width:1160px;margin:0 auto;padding:44px 32px 100px}

/* 总目录 */
.idx-bar{position:sticky;top:0;z-index:5;background:var(--bg);padding:10px 0 14px;
  display:flex;align-items:center;gap:14px;border-bottom:1px solid var(--line)}
.idx-bar input{padding:9px 14px;border:1px solid #cfcdc6;background:#fff;
  font:14px/1 var(--sans);width:260px;outline:none;color:var(--ink)}
.idx-bar input:focus{border-color:var(--red)}
.idx-sec{margin-top:38px}
.idx-sec h2{margin:0 0 4px;font-size:19px;letter-spacing:2px;padding-bottom:9px;
  border-bottom:3px solid var(--ink);display:flex;align-items:baseline;gap:12px}
.idx-sec h2 span{font:400 12px/1 var(--sans);color:var(--mute-2)}
.idx-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(240px,1fr));
  gap:0 28px;font-family:var(--sans)}
.idx-item{display:flex;align-items:baseline;gap:8px;padding:8px 2px;
  border-bottom:1px solid var(--line-3);color:var(--ink-3);font-size:14px}
.idx-item:hover{background:var(--panel);color:var(--red)}
.idx-item.built{color:var(--ink);font-weight:600}
.idx-item .dot{width:7px;height:7px;border-radius:99px;background:var(--red);
  flex:0 0 auto;align-self:center}
.idx-item .n{margin-left:auto;font:11.5px/1 var(--mono);color:var(--mute-3);font-variant-numeric:tabular-nums}

/* 首页 */
.stats{display:flex;gap:36px;margin:28px 0 0;font-family:var(--sans);flex-wrap:wrap;padding-bottom:26px}
.stats .v{font-size:26px;font-weight:700;font-variant-numeric:tabular-nums;font-family:var(--mono)}
.stats .k{font-size:12px;color:var(--mute)}
.sec-h{display:flex;align-items:baseline;gap:12px;margin:40px 0 6px}
.sec-h h2{margin:0;font-size:21px;letter-spacing:2px}
.sec-h span{font:12px/1 var(--sans);color:var(--mute-2)}
.cards{display:grid;grid-template-columns:1fr 1fr;gap:0 36px}
.card-l{display:block;color:inherit;padding:22px 0 20px;border-bottom:1px solid var(--line)}
.card-l:hover{background:var(--panel-2);color:inherit}
.card-l .h{display:flex;align-items:baseline;gap:8px}
.card-l .h b{font-size:17.5px;font-weight:700}
.card-l .h .m{font:11px/1 var(--mono);color:var(--mute-2)}
.card-l .h .dot{width:6px;height:6px;border-radius:99px;background:var(--red);margin-left:auto}
.card-l p{margin:8px 0 10px;font-size:13.5px;color:var(--ink-2);line-height:1.75}
.card-l .q{font-size:14px;color:var(--ink-3);line-height:1.8}
.foot-note{margin-top:36px;font:12px/1.8 var(--sans);color:var(--mute-2)}

/* 筹备中 / 原文页 */
.stub-box{background:var(--panel);border:1px solid var(--line);padding:22px 26px;font-family:var(--sans)}
.stub-box p{margin:0 0 8px;font-size:14.5px;color:var(--ink-2);line-height:1.8}
.stub-box b{font-size:17px;color:var(--ink)}
.back{margin-top:26px}
.back a{border-bottom:1px solid var(--red)}

/* FAQ */
.faq{margin-top:2.5em}
.faq details{border-bottom:1px solid var(--line);padding:14px 0}
.faq summary{cursor:pointer;font-weight:600;font-size:15.5px;list-style:none;
  display:flex;align-items:baseline;gap:10px}
.faq summary::-webkit-details-marker{display:none}
.faq summary::before{content:"＋";color:var(--red);font-size:13px}
.faq details[open] summary::before{content:"－"}
.faq .a{margin:10px 0 0;font-size:14.5px;color:var(--ink-2);line-height:1.85}

/* 悬浮预览 */
#tip{position:fixed;z-index:999;max-width:290px;padding:10px 14px;border-radius:6px;
  background:var(--ink);color:var(--panel);font:12.5px/1.65 var(--sans);
  box-shadow:0 8px 28px rgba(0,0,0,.3);pointer-events:none;display:none}
#tip b{color:#e88c85}
#tip .l2{color:var(--mute-2)}

/* ── 窄屏：三栏塌成单栏 ─────────────────────────────────── */
@media (max-width:1080px){
  .shell{grid-template-columns:264px minmax(0,1fr);height:auto;overflow:visible}
  .shell>main,.shell>article{overflow:visible}
  .shell>nav{height:100vh;position:sticky;top:0}
  .shell>aside{grid-column:1/-1;border-left:0;border-top:1px solid var(--line-2)}
  .cards{grid-template-columns:1fr}
}
@media (max-width:760px){
  body{font-size:15.5px}
  .shell{display:block;height:auto;overflow:visible}
  .shell>nav{height:auto;position:static;padding-bottom:0;
    border-right:0;border-bottom:1px solid var(--line-2)}
  /* 手机上 124 条导航铺开会把正文挤到屏外，所以默认收起。
     但**不能连搜索一起废掉** —— 一输入就把分类放出来，只显示命中项。 */
  .shell>nav .nav-cat{display:none}
  .shell>nav.searching .nav-cat{display:block}
  .nav-head{border-bottom:0}
  .shell>aside{border-top:1px solid var(--line-2)}
  .doc,.doc-wide{padding:28px 20px 80px;max-width:none}
  .page{padding:28px 20px 80px}
  .top-in{padding:12px 20px;gap:10px}
  .top-nav{gap:16px;font-size:13px}
  h1.big{font-size:34px}
  h1.home{font-size:34px}
  .stats{gap:22px}
  .idx-grid{grid-template-columns:1fr}
}

/* ── 公司页时间线 ─────────────────────────────────────────
   左侧一条竖线串起年份和日期，报刊年表的样子。 */
.tl{position:relative;margin:1.6em 0 0;padding-left:20px}
.tl::before{content:"";position:absolute;left:4px;top:6px;bottom:6px;
  width:1px;background:var(--line-2)}
.tl-year{position:relative;margin:1.8em 0 .7em;font:700 15px/1 var(--mono);
  color:var(--red);letter-spacing:1px}
.tl-year:first-child{margin-top:.2em}
.tl-year::before{content:"";position:absolute;left:-20px;top:1px;
  width:9px;height:9px;border-radius:99px;background:var(--red)}
.tl-item{position:relative;padding:0 0 1.3em}
.tl-item::before{content:"";position:absolute;left:-18.5px;top:8px;
  width:6px;height:6px;border-radius:99px;background:#fff;
  border:1.5px solid var(--line-in)}
.tl-date{font-size:11.5px;color:var(--mute-2);margin-bottom:3px}
.tl-body p{margin:0 0 .4em;font-size:14.5px;line-height:1.85}
.tl-foot{display:flex;align-items:center;gap:8px;font-size:10.5px;color:var(--mute-2)}
.tl-foot a{color:var(--mute-2)}
.tl-foot a:hover{color:var(--red)}

/* ── 正文表格 ─────────────────────────────────────────────
   宽表在自己的容器里横向滚动，页面本身永远不横向滚。 */
.tw{overflow-x:auto;margin:1.6em 0}
.body table{border-collapse:collapse;width:100%;font-size:14px;font-family:var(--sans)}
.body thead th{text-align:left;padding:8px 12px 8px 0;border-bottom:2px solid var(--ink);
  font-size:12px;letter-spacing:1px;color:var(--mute);font-weight:600;white-space:nowrap}
.body tbody td{padding:10px 12px 10px 0;border-bottom:1px solid var(--line);
  vertical-align:top;line-height:1.75}
.body tbody tr:last-child td{border-bottom:1px solid var(--line-2)}
.body tbody td:first-child{white-space:nowrap;color:var(--mute);font-family:var(--mono);font-size:12.5px}
