@font-face{font-family:"Geist";src:url(fonts/Geist-Variable.woff2) format("woff2");font-weight:100 900;font-display:swap}
@font-face{font-family:"Geist Mono";src:url(fonts/GeistMono-Variable.woff2) format("woff2");font-weight:100 900;font-display:swap}

/* 配色：冷调中性灰 + 单一钴蓝强调色。知识树的 9 条主干用同明度的分类色（OKLCH 等距取色）。
   对比度：--ink-3 在 --bg 上约 5:1，强调色上的白字约 5.6:1。 */
:root{
  --bg:oklch(97.4% .005 258); --surface:oklch(99.5% .002 258); --surface-2:oklch(95.5% .007 258); --surface-3:oklch(92.8% .009 258);
  --line:oklch(91.4% .008 258); --line-2:oklch(86% .011 258);
  --ink:oklch(22.5% .02 264); --ink-2:oklch(40.5% .018 264); --ink-3:oklch(52.5% .016 264);
  --accent:oklch(51.5% .19 265); --accent-ink:oklch(44% .17 265); --accent-soft:oklch(94.8% .026 265); --on-accent:#fff;
  --good:oklch(53% .13 155); --warn:oklch(57% .14 62); --warn-soft:oklch(96.6% .028 85);
  --shadow-sm:0 1px 2px oklch(25% .02 264 / .06);
  --shadow:0 1px 2px oklch(25% .02 264 / .05),0 12px 32px -14px oklch(25% .06 264 / .24);
  --scrim:oklch(20% .02 264 / .42);
  /* 知识树主干 */
  --t-base:oklch(55% .16 258); --t-reason:oklch(54% .18 300); --t-agent:oklch(57% .14 155); --t-ctx:oklch(57% .11 200);
  --t-mem:oklch(68% .14 78); --t-env:oklch(63% .16 45); --t-sci:oklch(56% .18 345); --t-sys:oklch(60% .11 232); --t-safe:oklch(55% .18 22);
  /* 思维导图五个分支 */
  --mm-1:oklch(55% .18 22); --mm-2:oklch(54% .17 300); --mm-3:oklch(55% .11 195); --mm-4:oklch(52% .16 260); --mm-5:oklch(52% .03 260);
  --f-sans:"Geist",ui-sans-serif,-apple-system,"PingFang SC","Hiragino Sans GB","Microsoft YaHei","Noto Sans CJK SC",sans-serif;
  --f-mono:"Geist Mono",ui-monospace,SFMono-Regular,Menlo,monospace;
  --f-read:"Geist",ui-sans-serif,-apple-system,"PingFang SC","Hiragino Sans GB","Noto Sans CJK SC",sans-serif;
  --nav-w:268px; --list-w:minmax(380px,456px);
  --read-size:17px; --ease:cubic-bezier(.16,1,.3,1);
  color-scheme:light;
}
:root[data-theme=dark]{
  --bg:oklch(17.2% .01 262); --surface:oklch(20.4% .011 262); --surface-2:oklch(24.4% .012 262); --surface-3:oklch(28% .013 262);
  --line:oklch(28.6% .012 262); --line-2:oklch(35% .014 262);
  --ink:oklch(94.5% .006 262); --ink-2:oklch(81% .012 262); --ink-3:oklch(67.5% .014 262);
  --accent:oklch(72% .14 263); --accent-ink:oklch(80% .11 263); --accent-soft:oklch(29% .06 265); --on-accent:oklch(17% .03 265);
  --good:oklch(75% .13 155); --warn:oklch(80% .13 80); --warn-soft:oklch(26% .03 80);
  --shadow-sm:0 1px 2px oklch(0% 0 0 / .3);
  --shadow:0 1px 2px oklch(0% 0 0 / .3),0 16px 36px -14px oklch(0% 0 0 / .65);
  --scrim:oklch(8% .01 262 / .6);
  --t-base:oklch(74% .13 258); --t-reason:oklch(73% .14 300); --t-agent:oklch(76% .13 155); --t-ctx:oklch(77% .1 200);
  --t-mem:oklch(82% .12 82); --t-env:oklch(77% .13 48); --t-sci:oklch(74% .15 345); --t-sys:oklch(77% .09 232); --t-safe:oklch(72% .15 22);
  --mm-1:oklch(73% .15 22); --mm-2:oklch(74% .14 300); --mm-3:oklch(77% .1 195); --mm-4:oklch(74% .13 260); --mm-5:oklch(72% .03 260);
  color-scheme:dark;
}
*{box-sizing:border-box}
[hidden]{display:none!important}
html,body{height:100%}
body{margin:0;background:var(--bg);color:var(--ink);font:400 15px/1.6 var(--f-sans);-webkit-font-smoothing:antialiased;text-rendering:optimizeLegibility;font-kerning:normal}
button{font:inherit;color:inherit;cursor:pointer}
a{color:var(--accent-ink);text-underline-offset:3px}
::selection{background:color-mix(in oklch,var(--accent) 26%,transparent)}
kbd{font:500 11px/1 var(--f-mono);padding:3px 6px;border:1px solid var(--line-2);border-bottom-width:2px;border-radius:5px;background:var(--surface);color:var(--ink-2)}
.skip{position:absolute;left:-999px;top:8px;background:var(--ink);color:var(--bg);padding:8px 12px;border-radius:8px;z-index:100}
.skip:focus{left:8px}
:focus-visible{outline:2px solid var(--accent);outline-offset:2px;border-radius:6px}
.ico{display:inline-flex;width:18px;height:18px;flex:none}
.ico svg{width:100%;height:100%}

/* 布局：三栏，窄屏折叠 */
.app{display:grid;grid-template-columns:var(--nav-w) var(--list-w) minmax(0,1fr);height:100dvh;overflow:hidden}
.nav{border-right:1px solid var(--line);padding:18px 12px 12px;display:flex;flex-direction:column;gap:14px;overflow:auto;background:var(--bg)}
.list-pane{border-right:1px solid var(--line);overflow:auto;background:var(--bg);position:relative;scroll-behavior:smooth}
.reader,.placeholder{grid-column:3;min-width:0;background:var(--surface)}
.reader{display:flex;flex-direction:column;overflow:hidden;position:relative}
.placeholder{display:grid;place-items:center;padding:40px}

/* 左栏 */
.brand{display:flex;gap:11px;align-items:center;padding:2px 8px}
.brand-mark{width:32px;height:32px;border-radius:9px;background:var(--accent);flex:none;display:grid;place-items:center;color:var(--on-accent);font-size:18px;box-shadow:inset 0 1px 0 oklch(100% 0 0 / .18),var(--shadow-sm)}
.brand-mark svg{width:1em;height:1em}
.brand-name{font-weight:650;letter-spacing:-.01em}
.brand-sub{font:500 12px/1.3 var(--f-mono);color:var(--ink-3);margin-top:2px;font-variant-numeric:tabular-nums}
.search{display:flex;align-items:center;gap:8px;background:var(--surface);border:1px solid var(--line);border-radius:10px;padding:0 10px;height:40px;transition:border-color .2s,box-shadow .2s;box-shadow:var(--shadow-sm)}
.search:focus-within{border-color:var(--accent);box-shadow:0 0 0 3px color-mix(in oklch,var(--accent) 18%,transparent)}
.search input{flex:1;min-width:0;border:0;background:transparent;color:var(--ink);font:inherit;outline:none;height:100%}
.search input::placeholder{color:var(--ink-3)}
.search .ico{color:var(--ink-3)}
/* 知识树入口：左栏里唯一一块「卡片」，提示这是全库的总览 */
.kb-entry{display:grid;grid-template-columns:auto 1fr auto;align-items:center;gap:4px 11px;width:100%;text-align:left;border:1px solid var(--line);background:var(--surface);border-radius:12px;padding:11px 12px;box-shadow:var(--shadow-sm);transition:border-color .2s,box-shadow .2s,transform .12s var(--ease)}
.kb-entry:hover{border-color:color-mix(in oklch,var(--accent) 45%,var(--line))}
.kb-entry:active{transform:scale(.985)}
.kb-entry .ke-ic{grid-row:1/3;width:34px;height:34px;border-radius:9px;display:grid;place-items:center;background:var(--accent-soft);color:var(--accent-ink)}
.kb-entry .ke-ic .ico{width:19px;height:19px}
.kb-entry b{font-size:14.5px;font-weight:620;line-height:1.3}
.kb-entry small{grid-column:2;font-size:12px;line-height:1.35;color:var(--ink-3)}
.kb-entry .ke-go{grid-row:1/3;grid-column:3;color:var(--ink-3)}
.kb-entry.is-on{border-color:var(--accent);background:var(--accent-soft)}
.kb-entry.is-on .ke-ic{background:var(--accent);color:var(--on-accent)}
.kb-dots{display:flex;gap:3px;margin-top:1px}
.kb-dots i{width:6px;height:6px;border-radius:50%;background:var(--c)}
.group{display:flex;flex-direction:column;gap:1px}
.group-h{font:600 11px/1 var(--f-mono);letter-spacing:.08em;text-transform:uppercase;color:var(--ink-3);padding:6px 10px 8px}
.item{display:flex;align-items:center;gap:10px;width:100%;text-align:left;border:0;background:transparent;padding:6px 10px;border-radius:8px;color:var(--ink-2);min-height:34px;font-size:14.5px;transition:background .15s,color .15s,transform .12s var(--ease)}
.item:hover{background:var(--surface-3);color:var(--ink)}
.item:active{transform:scale(.985)}
.item.is-on{background:var(--surface);color:var(--ink);font-weight:580;box-shadow:var(--shadow-sm),inset 0 0 0 1px var(--line)}
.item.is-on .ico{color:var(--accent)}
.item span:not(.ico){flex:1;min-width:0}
.item em{font:500 12px/1 var(--f-mono);font-style:normal;color:var(--ink-3);font-variant-numeric:tabular-nums}
.nav-foot{margin-top:auto;display:flex;gap:6px;padding-top:8px;border-top:1px solid var(--line)}
.btn-ghost{display:inline-flex;align-items:center;gap:8px;border:0;background:transparent;padding:8px 10px;border-radius:8px;color:var(--ink-3)}
.btn-ghost:hover{background:var(--surface-3);color:var(--ink)}

/* 列表 */
.list-head{position:sticky;top:0;z-index:5;display:flex;align-items:center;gap:10px;padding:16px 20px 12px;background:color-mix(in oklch,var(--bg) 88%,transparent);backdrop-filter:blur(12px) saturate(1.4)}
.lh-text{flex:1;min-width:0}
.list-head h1{margin:0;font-size:18px;line-height:1.3;letter-spacing:-.015em;font-weight:660}
.lh-sub{margin:2px 0 0;font-size:12.5px;line-height:1.4;color:var(--ink-3);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.lh-sub b{color:var(--ink-2);font-weight:580}
.sort{display:flex;align-items:center;gap:8px;color:var(--ink-3);font-size:13px}
.sort select{background:var(--surface);color:var(--ink);border:1px solid var(--line);border-radius:8px;padding:5px 8px;font:inherit}
.progress-strip{height:3px;margin:0 20px 6px;background:var(--line);border-radius:2px;overflow:hidden}
.progress-strip i{display:block;height:100%;width:0;background:var(--accent);transition:width .5s var(--ease)}
.cards{list-style:none;margin:0;padding:6px 12px 80px}
.card{position:relative;display:block;width:100%;text-align:left;border:0;background:transparent;padding:14px 14px 14px 16px;border-radius:12px;transition:background .15s,box-shadow .15s}
.card + .card{margin-top:2px}
.card:hover{background:var(--surface-3)}
.card[aria-current=true]{background:var(--surface);box-shadow:var(--shadow),inset 0 0 0 1px var(--line)}
.card[aria-current=true]::before{content:"";position:absolute;left:0;top:16px;bottom:16px;width:3px;border-radius:0 2px 2px 0;background:var(--accent)}
.meta{display:flex;flex-wrap:wrap;gap:4px 10px;align-items:center;font:500 12px/1.3 var(--f-sans);color:var(--ink-3);margin-bottom:8px;padding-right:44px;font-variant-numeric:tabular-nums}
.meta .org{max-width:22ch;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.meta .prog{color:var(--accent-ink);font-weight:580}
.tag{padding:3px 7px;border-radius:6px;background:var(--surface-3);color:var(--ink-2);font:580 11.5px/1 var(--f-sans)}
.tag.t1{background:var(--accent);color:var(--on-accent)}
.tag.t2{background:var(--accent-soft);color:var(--accent-ink)}
.tag.zh{background:transparent;color:var(--ink-2);box-shadow:inset 0 0 0 1px var(--line-2)}
/* 中文标题用 pretty：balance 会把「模型」这种词从中间劈开 */
.card h3{margin:0 0 4px;font-size:15.5px;line-height:1.45;font-weight:620;letter-spacing:-.005em;text-wrap:pretty}
.card .en{font-size:13px;line-height:1.4;color:var(--ink-3);margin:0 0 8px;display:-webkit-box;-webkit-line-clamp:1;-webkit-box-orient:vertical;overflow:hidden}
.card p{margin:0;color:var(--ink-2);font-size:14px;line-height:1.6;display:-webkit-box;-webkit-line-clamp:3;-webkit-box-orient:vertical;overflow:hidden}
.card .why{-webkit-line-clamp:2}
.card .one{-webkit-line-clamp:3;position:relative;padding-left:12px}
.card .one::before{content:"";position:absolute;left:0;top:.35em;bottom:.35em;width:2px;border-radius:2px;background:color-mix(in oklch,var(--accent) 55%,var(--line-2))}
.state{position:absolute;right:12px;top:14px;display:flex;gap:6px;color:var(--ink-3)}
.state .ico{width:16px;height:16px}
.state .is-saved{color:var(--warn)}
.state .is-done{color:var(--good)}
.card.is-read h3{color:var(--ink-3);font-weight:560}
.empty{padding:70px 28px;max-width:420px}
.empty-t{font-size:17px;font-weight:620;margin-bottom:6px}
.empty p{color:var(--ink-2);margin:0 0 16px}
.btn{border:0;background:var(--accent);color:var(--on-accent);padding:9px 16px;border-radius:9px;font-weight:580;box-shadow:inset 0 1px 0 oklch(100% 0 0 / .16),var(--shadow-sm);transition:transform .12s var(--ease),filter .15s}
.btn:hover{filter:brightness(1.08)}
.btn:active{transform:scale(.97) translateY(1px)}

/* 骨架 */
.sk{height:104px;margin:6px 0;border-radius:12px;background:linear-gradient(100deg,var(--surface-2) 30%,var(--surface) 50%,var(--surface-2) 70%);background-size:200% 100%;animation:sh 1.3s linear infinite}
@keyframes sh{to{background-position:-200% 0}}

/* 占位 */
.ph-inner{max-width:360px}
.ph-h{font-size:20px;font-weight:660;letter-spacing:-.015em;margin-bottom:8px}
.ph-inner p{color:var(--ink-2);margin:0 0 18px}
.ph-inner .ph-row{display:flex;gap:8px;flex-wrap:wrap}
.btn.secondary{background:var(--surface);color:var(--ink);box-shadow:inset 0 0 0 1px var(--line-2),var(--shadow-sm)}

/* 阅读区 */
.reader-bar{display:flex;align-items:center;gap:10px;padding:10px 18px;border-bottom:1px solid var(--line);background:var(--surface);z-index:4}
/* 滚过标题后在顶栏显示当前论文 + 章节，长文里不迷路 */
.bar-crumb{flex:1;min-width:0;display:flex;flex-direction:column;gap:1px;opacity:0;transform:translateY(4px);transition:opacity .2s,transform .25s var(--ease);pointer-events:none}
.bar-crumb.show{opacity:1;transform:none}
.bar-crumb .c-t{font-size:13.5px;font-weight:600;line-height:1.3;color:var(--ink);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.bar-crumb .c-s{font-size:12px;line-height:1.3;color:var(--ink-3);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.bar-right{margin-left:auto;display:flex;gap:2px;flex:none}
.icon-btn{display:inline-grid;place-items:center;width:38px;height:38px;border:0;background:transparent;border-radius:9px;color:var(--ink-2);transition:background .15s,color .15s,transform .12s var(--ease)}
.icon-btn:hover{background:var(--surface-2);color:var(--ink)}
.icon-btn:active{transform:scale(.94)}
.icon-btn.on{color:var(--warn)}
.icon-btn.done{color:var(--good)}
.icon-btn[aria-pressed=true]{background:var(--surface-2)}
.seg{display:inline-flex;background:var(--surface-2);border-radius:9px;padding:3px;box-shadow:inset 0 0 0 1px var(--line)}
.seg button{border:0;background:transparent;white-space:nowrap;padding:6px 14px;border-radius:7px;color:var(--ink-3);font-size:13.5px;font-weight:540;transition:color .15s,background .15s}
.seg button:hover{color:var(--ink)}
.seg button[aria-checked=true]{background:var(--surface);color:var(--ink);box-shadow:var(--shadow-sm),0 0 0 1px var(--line)}
.reader-scroll{flex:1;overflow:auto;scroll-behavior:smooth;position:relative}
.read-progress{position:absolute;left:0;top:0;height:2px;width:0;background:var(--accent);z-index:6}

/* 行宽可调：--measure 控制正文列宽，窄=更好跟行，宽=一屏看更多 */
.doc{--measure:720px;max-width:calc(var(--measure) + 72px);margin:0 auto;padding:36px 36px 56px;font-family:var(--f-read);font-size:var(--read-size);line-height:1.85;color:var(--ink)}
.doc[data-w=narrow]{--measure:620px}.doc[data-w=wide]{--measure:900px}
.doc[data-lang=both]{--measure:760px}
.doc .kicker{font:600 12.5px/1.5 var(--f-sans);letter-spacing:.02em;color:var(--accent-ink);margin-bottom:12px}
.doc h1{font-size:clamp(26px,2.6vw,33px);line-height:1.3;letter-spacing:-.022em;margin:0 0 8px;font-weight:700;text-wrap:pretty}
.doc .t-en{font-size:15.5px;line-height:1.45;color:var(--ink-3);margin:0 0 20px}
.doc .facts{display:flex;flex-wrap:wrap;gap:8px 18px;font:500 12.5px/1.2 var(--f-mono);color:var(--ink-3);padding:14px 0;border-block:1px solid var(--line);margin-bottom:22px;font-variant-numeric:tabular-nums}
.doc .facts .f-ok{color:var(--good)}
.doc .facts .f-warn{color:var(--warn)}
.doc .facts a{color:var(--ink-2);display:inline-flex;gap:6px;align-items:center}
.doc .why-box{background:var(--surface-2);color:var(--ink);border-radius:10px;padding:12px 16px;margin:0 0 24px;font-size:15.5px;line-height:1.7;box-shadow:inset 3px 0 0 var(--accent)}
.doc .why-box b{display:block;font:600 11px/1 var(--f-mono);letter-spacing:.08em;text-transform:uppercase;margin-bottom:6px;color:var(--accent-ink)}
.doc h2.sec{font-size:1.28em;line-height:1.3;margin:2.4em 0 .7em;letter-spacing:-.012em;font-weight:680;scroll-margin-top:20px}
.doc h3.sec,.doc h4.sec{font-size:1.1em;margin:1.8em 0 .5em;font-weight:650;scroll-margin-top:20px}
.doc h4.sec{font-size:1em;color:var(--ink-2)}
.doc .sec .en{display:block;font-size:.72em;font-weight:500;color:var(--ink-3);margin-top:3px;letter-spacing:0}
.doc p{margin:0 0 1.05em;text-wrap:pretty;hyphens:auto}
.doc .blk{margin:0 0 1.15em}
.doc .blk p{margin:0}
/* 对照模式：英文是辅助，色阶比中文低一档但仍满足对比度 */
.doc .blk .en{color:var(--ink-2);font-size:.88em;line-height:1.7;margin-top:.45em;padding-left:.9em;border-left:2px solid var(--line-2)}
.doc[data-lang=both] .blk{padding-bottom:1.15em;border-bottom:1px dashed var(--line)}
.doc[data-lang=both] .blk.raw{padding-bottom:0;border-bottom:0}
.doc[data-lang=zh] .en{display:none}
.doc[data-lang=en] .sec .en{font-size:1em;color:inherit;margin:0;font-weight:inherit}
.doc[data-lang=en] figcaption .en{color:var(--ink-2);font-size:1em;margin:0}
.doc .raw{color:var(--ink)}
.doc[data-lang=en] .zh{display:none}
.doc[data-lang=both] .blk .zh{color:var(--ink)}
.doc[data-lang=en] .blk .en{color:var(--ink);font-size:1em;border:0;padding:0;margin:0}
.doc em{font-style:italic}
.doc code,.doc .code-i{font:500 .86em var(--f-mono);background:var(--surface-2);padding:.1em .38em;border-radius:5px}
.doc .math-d{margin:1.1em 0;overflow-x:auto;overflow-y:hidden;padding:2px 0}
.doc figure{margin:1.6em 0;padding:0}
/* 大图限高，点击放大；多张子图并排 */
.doc figure .imgs{display:grid;gap:10px;justify-items:center;align-items:center}
.doc figure .imgs.multi{grid-template-columns:repeat(auto-fit,minmax(220px,1fr))}
.doc figure img{max-width:100%;max-height:min(68vh,620px);width:auto;height:auto;display:block;margin:0 auto;border-radius:8px;border:1px solid var(--line);background:#fff;cursor:zoom-in;transition:transform .2s var(--ease)}
.doc figure img:hover{transform:translateY(-1px)}
.doc figure .fig-miss{display:none;border:1px dashed var(--line-2);border-radius:10px;padding:18px;text-align:center;color:var(--ink-3);font-size:.85em}
.doc figure.no-img .fig-miss{display:block}
.doc figure.no-img img{display:none}
.doc figcaption{font-size:.88em;line-height:1.65;color:var(--ink-2);margin-top:.8em;padding:0 .2em}
.doc figcaption .en{display:block;color:var(--ink-3);margin-top:.3em;font-size:.94em}
.doc p img,.doc li img{display:inline-block;max-height:1.3em;width:auto;vertical-align:-.25em;margin:0 .15em}
.doc .tbl{overflow-x:auto;margin:1.4em 0;border:1px solid var(--line);border-radius:10px;background:var(--surface)}
.doc .tbl table{border-collapse:collapse;font:500 13px/1.45 var(--f-sans);width:max-content;min-width:100%;font-variant-numeric:tabular-nums}
.doc .tbl td,.doc .tbl th{padding:7px 12px;border-bottom:1px solid var(--line);text-align:left;vertical-align:top}
.doc .tbl .tbl-img{height:1.15em;width:auto;display:inline-block;vertical-align:-.2em;border:0;border-radius:0;margin:0;background:transparent}
.doc .tbl tr:last-child td{border-bottom:0}
.doc .tbl th{background:var(--surface-2);font-weight:620}
.doc pre{font:500 12.5px/1.65 var(--f-mono);background:var(--surface-2);border:1px solid var(--line);border-radius:10px;padding:14px 16px;overflow:auto;white-space:pre-wrap;word-break:break-word;margin:0}
.doc .code-wrap{margin:1.4em 0}
.doc ul,.doc ol{padding-left:1.4em;margin:0 0 1.05em}
.doc li{margin:.3em 0}
.doc li .en{display:block}
.doc .abs-box{background:var(--surface-2);border-radius:12px;padding:18px 20px;margin:0 0 28px}
.doc .abs-box h2{margin:0 0 8px;font:600 11.5px/1 var(--f-mono);letter-spacing:.08em;text-transform:uppercase;color:var(--ink-3)}
.doc .abs-box p{margin:0 0 .8em;font-size:.97em}
.doc .abs-box p:last-child{margin:0}
.doc .abs-box .en{color:var(--ink-3);font-size:.9em}
.doc[data-lang=zh] .abs-box .en{display:none}
.doc[data-lang=en] .abs-box .zh{display:none}
.doc[data-lang=en] .abs-box .en{color:var(--ink);font-size:.97em}
.doc .notice{background:var(--warn-soft);color:var(--ink);border-radius:10px;padding:12px 16px;font-size:14px;line-height:1.65;margin:0 0 22px;box-shadow:inset 3px 0 0 var(--warn)}
.doc .notice b{color:var(--ink);font-weight:640}
.doc .actions{display:flex;flex-wrap:wrap;gap:8px;margin:0 0 22px}
.chip{display:inline-flex;align-items:center;gap:8px;border:1px solid var(--line-2);background:var(--surface);color:var(--ink);padding:8px 14px;border-radius:9px;text-decoration:none;font-size:14px;font-weight:540;box-shadow:var(--shadow-sm);transition:background .15s,border-color .15s,transform .12s var(--ease)}
.chip:hover{background:var(--surface-2)}
.chip:active{transform:scale(.97)}
.chip.primary{background:var(--accent);border-color:var(--accent);color:var(--on-accent);box-shadow:inset 0 1px 0 oklch(100% 0 0 / .16),var(--shadow-sm)}
.chip.primary:hover{filter:brightness(1.08)}
.doc .refs{margin-top:3em;border-top:1px solid var(--line);padding-top:1.4em}
.doc .refs summary{cursor:pointer;font-weight:620;color:var(--ink-2)}
.doc .refs ol{font-size:.82em;line-height:1.55;color:var(--ink-3);margin-top:1em}
.doc .loading{display:grid;gap:12px;padding-top:8px}
.doc .loading i{display:block;height:16px;border-radius:6px;background:linear-gradient(100deg,var(--surface-2) 30%,var(--line) 50%,var(--surface-2) 70%);background-size:200% 100%;animation:sh 1.3s linear infinite}
.doc .loading i:nth-child(3n){width:70%}
.pdf-frame{width:100%;height:78dvh;border:1px solid var(--line);border-radius:12px;background:#fff}

/* ---------- 核心观点卡（论文笔记） ---------- */
.note{--c:var(--accent);font-family:var(--f-sans);font-size:15px;line-height:1.75;color:var(--ink);background:var(--surface);border:1px solid var(--line);border-radius:14px;box-shadow:var(--shadow);margin:0 0 26px;overflow:hidden}
.note-h{display:flex;align-items:center;gap:8px;flex-wrap:wrap;padding:12px 18px;border-bottom:1px solid var(--line);background:var(--surface-2)}
.note-h .nk{display:inline-flex;align-items:center;gap:7px;font:640 13px/1 var(--f-sans);color:var(--ink)}
.note-h .nk .ico{width:16px;height:16px;color:var(--accent)}
.note-h .sp{flex:1}
.badge{display:inline-flex;align-items:center;gap:5px;font:560 11.5px/1 var(--f-sans);padding:4px 8px;border-radius:999px;background:var(--surface);color:var(--ink-2);box-shadow:inset 0 0 0 1px var(--line-2);white-space:nowrap}
.badge.role{color:color-mix(in oklch,var(--rc) 75%,var(--ink));box-shadow:inset 0 0 0 1px color-mix(in oklch,var(--rc) 40%,transparent);background:color-mix(in oklch,var(--rc) 9%,var(--surface))}
.badge.role::before{content:"";width:6px;height:6px;border-radius:50%;background:var(--rc)}
.r-origin{--rc:var(--t-safe)}.r-advance{--rc:var(--t-base)}.r-scale{--rc:var(--t-agent)}.r-critique{--rc:var(--t-env)}.r-measure{--rc:var(--t-ctx)}.r-synthesis{--rc:var(--t-reason)}
.note-b{padding:16px 18px 6px}
.note-one{margin:0 0 14px;font-size:17px;line-height:1.65;font-weight:600;letter-spacing:-.005em;text-wrap:pretty}
.note-pi{display:grid;grid-template-columns:1fr 1fr;gap:12px;margin:0 0 16px}
.note-pi > div{background:var(--surface-2);border-radius:10px;padding:10px 13px}
.note h4{margin:0 0 3px;font:620 12px/1.4 var(--f-sans);letter-spacing:.02em;color:var(--ink-3)}
.note-pi p{margin:0;font-size:14.5px;line-height:1.7;color:var(--ink)}
.note-claims{list-style:none;counter-reset:c;margin:0 0 16px;padding:0;display:grid;gap:4px}
.note-claims li{counter-increment:c;position:relative;padding:8px 10px 8px 38px;border-radius:10px;transition:background .15s}
.note-claims li:hover{background:var(--surface-2)}
.note-claims li::before{content:counter(c);position:absolute;left:8px;top:10px;width:21px;height:21px;border-radius:6px;display:grid;place-items:center;font:600 12px/1 var(--f-mono);background:var(--accent-soft);color:var(--accent-ink)}
.note-claims .c-t{margin:0;font-weight:580;font-size:15px;line-height:1.65;text-wrap:pretty}
.note-claims .c-ev{margin:2px 0 0;font-size:13.5px;line-height:1.65;color:var(--ink-2)}
.c-sec{display:inline-flex;align-items:center;margin-left:6px;padding:1px 6px;border:0;border-radius:5px;background:var(--surface-3);color:var(--ink-2);font:560 11.5px/1.5 var(--f-mono);vertical-align:1px;white-space:nowrap;cursor:pointer;transition:background .15s,color .15s}
.c-sec:hover{background:var(--accent-soft);color:var(--accent-ink)}
.c-sec[disabled]{cursor:default;background:transparent;color:var(--ink-3);padding:0 2px}
.note-q{margin:0 0 16px;padding:12px 16px 12px 18px;border-radius:10px;background:color-mix(in oklch,var(--accent) 5%,var(--surface-2));position:relative}
.note-q::before{content:"";position:absolute;left:0;top:12px;bottom:12px;width:3px;border-radius:0 3px 3px 0;background:var(--accent)}
.note-q .q-en{margin:0;font-size:14.5px;line-height:1.7;font-style:italic;color:var(--ink)}
.note-q .q-zh{margin:4px 0 0;font-size:14px;line-height:1.7;color:var(--ink-2)}
.note-q cite{display:block;margin-top:4px;font:500 12px/1.4 var(--f-mono);font-style:normal;color:var(--ink-3)}
.note-more{display:grid;grid-template-columns:auto 1fr;gap:10px 16px;margin:0 0 14px;font-size:14.5px;line-height:1.7}
.note-more dt{font:620 12.5px/1.75 var(--f-sans);color:var(--ink-3);white-space:nowrap;padding-top:1px}
.note-more dd{margin:0;color:var(--ink)}
.note-more ul{margin:0;padding-left:1.1em}
.note-more li{margin:0 0 2px}
.note-more .tk{font-weight:560}
.note-f{border-top:1px solid var(--line);padding:12px 18px 14px;display:grid;gap:9px;font-size:13.5px}
.note-row{display:flex;flex-wrap:wrap;gap:6px 8px;align-items:center}
.note-row > span:first-child{font:620 12px/1.4 var(--f-sans);color:var(--ink-3);min-width:4.2em}
.node-chip{--c:var(--accent);display:inline-flex;align-items:center;gap:6px;padding:4px 10px 4px 8px;border-radius:999px;text-decoration:none;font-size:13px;font-weight:560;line-height:1.3;color:color-mix(in oklch,var(--c) 72%,var(--ink));background:color-mix(in oklch,var(--c) 10%,var(--surface));box-shadow:inset 0 0 0 1px color-mix(in oklch,var(--c) 32%,transparent);transition:background .15s}
.node-chip::before{content:"";width:7px;height:7px;border-radius:50%;background:var(--c)}
.node-chip:hover{background:color-mix(in oklch,var(--c) 18%,var(--surface))}
.node-chip .sep{opacity:.55;font-weight:400}
.rel-link{display:inline-flex;align-items:baseline;gap:6px;max-width:100%;padding:4px 10px;border-radius:8px;background:var(--surface-2);color:var(--ink);text-decoration:none;font-size:13px;line-height:1.45;border:0;text-align:left;cursor:pointer;transition:background .15s}
.rel-link:hover{background:var(--surface-3)}
.rel-link i{font-style:normal;font:560 11.5px/1 var(--f-sans);color:var(--ink-3);white-space:nowrap}
.rel-link b{font-weight:560;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;max-width:34ch}
.kw{display:inline-block;padding:2px 8px;border-radius:6px;background:var(--surface-2);color:var(--ink-2);font:500 12px/1.6 var(--f-mono)}
.note-src{margin:0;font-size:12px;line-height:1.5;color:var(--ink-3)}

/* 读完一篇：上一篇 / 下一篇 */
.pager{max-width:calc(720px + 72px);margin:0 auto;padding:0 36px 120px;display:grid;grid-template-columns:1fr 1fr;gap:12px}
.pager a{display:flex;flex-direction:column;gap:4px;padding:14px 16px;border:1px solid var(--line);border-radius:12px;text-decoration:none;color:var(--ink);background:var(--surface);min-width:0;box-shadow:var(--shadow-sm);transition:background .15s,border-color .15s,transform .12s var(--ease)}
.pager a:hover{background:var(--surface-2);border-color:color-mix(in oklch,var(--accent) 45%,var(--line))}
.pager a:active{transform:scale(.985)}
.pager .pg-k{display:flex;align-items:center;gap:6px;font-size:12.5px;color:var(--ink-3)}
.pager .pg-k .ico{width:14px;height:14px}
.pager .pg-t{font-size:14.5px;font-weight:600;line-height:1.45;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}
.pager .next{grid-column:2;text-align:right}.pager .next .pg-k{justify-content:flex-end}
.pager .pg-done{grid-column:1/-1;display:flex;align-items:center;justify-content:center;gap:10px;padding:2px 0 6px;color:var(--ink-3);font-size:13.5px}
.pager .pg-done button{border:1px solid var(--line-2);background:var(--surface);border-radius:9px;padding:7px 14px;font-size:13.5px;font-weight:540;color:var(--ink);display:inline-flex;align-items:center;gap:6px}
.pager .pg-done button:hover{background:var(--surface-2)}
.pager .pg-done button.on{color:var(--good);border-color:color-mix(in oklch,var(--good) 50%,transparent);background:color-mix(in oklch,var(--good) 10%,var(--surface))}

/* 大图 */
.lightbox{position:fixed;inset:0;z-index:40;background:oklch(14% .01 262 / .9);display:grid;grid-template-rows:1fr auto;place-items:center;padding:56px 32px 24px;gap:14px;cursor:zoom-out;animation:lb-in .2s var(--ease)}
.lightbox img{max-width:min(96vw,1600px);max-height:100%;width:auto;height:auto;object-fit:contain;background:#fff;border-radius:8px;cursor:default}
.lb-cap{margin:0;max-width:min(90vw,900px);color:oklch(92% .006 262);font-size:14px;line-height:1.6;text-align:center;cursor:default}
.lb-close{position:absolute;top:12px;right:14px;color:oklch(92% .006 262)}
.lb-close:hover{background:oklch(100% 0 0 / .12);color:#fff}
@keyframes lb-in{from{opacity:0}}

/* 收起侧栏：左侧两栏滑走，正文独占整行 */
.app{transition:grid-template-columns .32s var(--ease)}
.app.focus{grid-template-columns:0 0 minmax(0,1fr)}
.app.focus .nav,.app.focus .list-pane{visibility:hidden;overflow:hidden;border:0;padding:0}
#focus-btn[aria-pressed=true]{color:var(--accent-ink);background:var(--accent-soft)}

/* 目录 */
.toc{position:absolute;right:14px;top:62px;bottom:14px;width:300px;background:var(--surface);border:1px solid var(--line);border-radius:14px;box-shadow:var(--shadow);overflow:auto;padding:10px;z-index:8}
.toc a{display:block;padding:6px 10px;border-radius:8px;color:var(--ink-2);text-decoration:none;font-size:13.5px;line-height:1.4}
.toc a:hover{background:var(--surface-2);color:var(--ink)}
.toc a.l3{padding-left:22px}.toc a.l4{padding-left:34px;color:var(--ink-3)}
.toc a.on{background:var(--accent-soft);color:var(--accent-ink);font-weight:560}
.toc .t-empty{padding:12px;color:var(--ink-3);font-size:13.5px}

/* 字号 / 行宽浮层 */
.pop{position:absolute;right:62px;top:56px;background:var(--surface);border:1px solid var(--line);border-radius:14px;padding:14px 16px;box-shadow:var(--shadow);z-index:9;display:grid;gap:12px;min-width:236px}
.pop .row{display:flex;align-items:center;justify-content:space-between;gap:12px}
.pop .lbl{font-size:13px;color:var(--ink-2)}
.pop .step{display:flex;align-items:center;gap:6px}
.pop .step button{border:1px solid var(--line-2);background:var(--surface-2);border-radius:8px;width:34px;height:34px;font-size:13px}
.pop .step button:hover{border-color:var(--accent)}
.pop .val{min-width:3ch;text-align:center;font:500 13px var(--f-mono)}
.pop .seg button{padding:5px 10px;font-size:13px}

dialog{border:1px solid var(--line);border-radius:16px;padding:22px 26px;background:var(--surface);color:var(--ink);box-shadow:var(--shadow);max-width:420px}
dialog::backdrop{background:var(--scrim)}
dialog h2{margin:0 0 14px;font-size:17px}
dialog dl{display:grid;grid-template-columns:auto 1fr;gap:10px 16px;margin:0 0 18px;align-items:center}
dialog dt{white-space:nowrap}dialog dd{margin:0;color:var(--ink-2)}
.scrim{position:fixed;inset:0;background:var(--scrim);z-index:20}
.only-narrow{display:none}

/* 思维导图：覆盖整个阅读区，中心主张 → 五个分支 → 要点；带 § 的要点可跳到原文章节 */
.mm{position:absolute;inset:0;z-index:10;background:var(--surface);display:flex;flex-direction:column;animation:mm-in .22s var(--ease)}
.mm-bar{display:flex;align-items:center;gap:6px;padding:10px 18px;border-bottom:1px solid var(--line);flex:none}
.mm-bar h2{margin:0;display:flex;align-items:center;gap:8px;font-size:15px;font-weight:650}
.mm-bar .sp{flex:1}
.mm-scroll{flex:1;overflow:auto;padding:30px 36px 64px}
.mm-wrap{max-width:1200px;margin:0 auto}
.mm-head{max-width:780px;margin:0 0 30px}
.mm-k{font:600 12px/1.4 var(--f-mono);letter-spacing:.04em;color:var(--ink-3);margin-bottom:8px}
.mm-gist{margin:0;font-size:18px;line-height:1.75;font-weight:500;color:var(--ink);text-wrap:pretty}
.mm-tree{position:relative;display:grid;grid-template-columns:192px minmax(0,1fr);column-gap:52px;align-items:center}
.mm-lines{position:absolute;left:0;top:0;width:100%;height:100%;pointer-events:none;overflow:visible}
.mm-lines path{fill:none;stroke-linecap:round;animation:mm-draw .7s var(--ease) both;animation-delay:calc(var(--i,0)*70ms + 120ms)}
.mm-lines.static path{animation:none}
.mm-lines .k-problem{stroke:var(--mm-1);opacity:.55}.mm-lines .k-idea{stroke:var(--mm-2);opacity:.55}.mm-lines .k-design{stroke:var(--mm-3);opacity:.55}
.mm-lines .k-result{stroke:var(--mm-4);opacity:.55}.mm-lines .k-limit{stroke:var(--mm-5);opacity:.55}
.mm-center{position:relative;z-index:1;background:var(--accent);color:var(--on-accent);border-radius:16px;padding:18px 20px;font-size:17px;line-height:1.5;font-weight:650;letter-spacing:-.005em;text-wrap:balance;box-shadow:inset 0 1px 0 oklch(100% 0 0 / .16),var(--shadow)}
.mm-bs{position:relative;z-index:1;display:flex;flex-direction:column;gap:20px}
.mm-b{--c:var(--mm-1);display:grid;grid-template-columns:156px minmax(0,1fr);column-gap:34px;align-items:center;animation:mm-fade .5s var(--ease) both;animation-delay:calc(var(--i,0)*70ms)}
.mm-b[data-k=idea]{--c:var(--mm-2)}.mm-b[data-k=design]{--c:var(--mm-3)}.mm-b[data-k=result]{--c:var(--mm-4)}.mm-b[data-k=limit]{--c:var(--mm-5)}
.mm-label{margin:0;display:flex;align-items:center;gap:8px;justify-self:stretch;text-wrap:balance;padding:9px 13px;border-radius:11px;background:color-mix(in oklch,var(--c) 11%,var(--surface));border:1px solid color-mix(in oklch,var(--c) 38%,transparent);color:color-mix(in oklch,var(--c) 78%,var(--ink));font-size:14.5px;line-height:1.3;font-weight:650}
.mm-label .ico{width:17px;height:17px;color:var(--c)}
.mm-ns{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:8px;min-width:0}
.mm-n{display:block;width:100%;margin:0;text-align:left;font:inherit;color:var(--ink);background:var(--surface-2);border:0;border-left:3px solid var(--c);border-radius:4px 11px 11px 4px;padding:9px 13px 9px 14px;font-size:14.5px;line-height:1.65;max-width:700px;text-wrap:pretty}
.mm-n.link{cursor:pointer;transition:background .15s,transform .12s var(--ease)}
.mm-n.link:hover{background:color-mix(in oklch,var(--c) 10%,var(--surface-2))}
.mm-n.link:active{transform:scale(.99)}
.mm-sub{display:block;position:relative;margin-top:3px;padding-left:13px;font-size:13px;line-height:1.55;color:var(--ink-3)}
.mm-sub::before{content:"";position:absolute;left:1px;top:.68em;width:4px;height:4px;border-radius:50%;background:var(--c);opacity:.75}
.mm-sec{display:inline-block;margin-left:8px;font:560 11.5px/1 var(--f-mono);color:color-mix(in oklch,var(--c) 78%,var(--ink));vertical-align:1px;white-space:nowrap}
.mm-hint{margin:30px 0 0;font-size:13px;line-height:1.7;color:var(--ink-3)}
.mm-hint:empty{display:none}
.mm-link{border:0;background:transparent;padding:0;color:var(--accent-ink);font:inherit;text-decoration:underline;text-underline-offset:3px;cursor:pointer}
.mm-tree.flat{display:block}
.mm-tree.flat .mm-lines{display:none}
.mm-tree.flat .mm-center{margin-bottom:22px}
.mm-tree.flat .mm-bs{gap:22px}
.mm-tree.flat .mm-b{display:block}
.mm-tree.flat .mm-label{margin-bottom:9px}
.mm-tree.flat .mm-n{max-width:none}
.doc .sec.flash{animation:sec-flash 1.8s ease-out}
.chip.mm-chip{background:var(--accent-soft);color:var(--accent-ink);border-color:color-mix(in oklch,var(--accent) 35%,transparent)}
.chip.mm-chip:hover{background:color-mix(in oklch,var(--accent) 16%,var(--surface))}
@keyframes mm-in{from{opacity:0}}
@keyframes mm-fade{from{opacity:0}}
@keyframes mm-draw{from{stroke-dasharray:1;stroke-dashoffset:1}to{stroke-dasharray:1;stroke-dashoffset:0}}
@keyframes sec-flash{from{box-shadow:0 0 0 8px var(--accent-soft);background:var(--accent-soft)}to{box-shadow:0 0 0 8px transparent;background:transparent}}

/* ---------- 知识演进树页面：占列表 + 阅读两栏 ---------- */
.kt{grid-column:2/4;grid-row:1;min-width:0;display:flex;flex-direction:column;overflow:hidden;background:var(--surface)}
.app.tree-mode .list-pane,.app.tree-mode .placeholder,.app.tree-mode .reader{display:none}
.kt-bar{display:flex;align-items:center;gap:10px;padding:10px 18px;border-bottom:1px solid var(--line);background:color-mix(in oklch,var(--surface) 88%,transparent);backdrop-filter:blur(10px);z-index:3}
.kt-bar h2{display:flex;align-items:center;gap:8px;margin:0;font-size:15px;font-weight:640}
.kt-bar h2 .ico{color:var(--accent)}
.kt-bar .sp{flex:1}
.kt-scroll{flex:1;overflow:auto;scroll-behavior:smooth}
.kt-body{max-width:1180px;margin:0 auto;padding:40px 44px 120px}
.kt-body h2,.kt-body h3,.kt-body h4{text-wrap:pretty}

.kt-hero{padding:0 0 30px;margin-bottom:12px;border-bottom:1px solid var(--line)}
.kt-kicker{font:560 12.5px/1.4 var(--f-mono);color:var(--accent-ink);letter-spacing:.02em;margin-bottom:12px}
.kt-hero h1{margin:0 0 16px;font-size:clamp(28px,3.2vw,38px);line-height:1.2;letter-spacing:-.025em;font-weight:700;max-width:22em}
.kt-lede{margin:0 0 12px;max-width:46em;font-size:16px;line-height:1.85;color:var(--ink-2)}
.kt-lede:first-of-type{color:var(--ink);font-size:17px}
.kt-stats{display:flex;flex-wrap:wrap;gap:10px;margin:22px 0 18px}
.kt-stats div{display:flex;align-items:baseline;gap:7px;padding:9px 14px;border-radius:11px;background:var(--surface-2)}
.kt-stats b{font:650 22px/1 var(--f-mono);letter-spacing:-.02em;color:var(--ink);font-variant-numeric:tabular-nums}
.kt-stats span{font-size:13px;color:var(--ink-2)}
.kt-toc{display:flex;flex-wrap:wrap;gap:6px}
.kt-toc button{border:0;background:transparent;padding:6px 11px;border-radius:8px;font-size:13.5px;font-weight:540;color:var(--ink-2);box-shadow:inset 0 0 0 1px var(--line-2);transition:background .15s,color .15s}
.kt-toc button:hover{background:var(--accent-soft);color:var(--accent-ink);box-shadow:inset 0 0 0 1px transparent}

.kt-sec{padding:44px 0 8px;scroll-margin-top:8px}
.kt-sh{display:flex;gap:16px;align-items:flex-start;margin-bottom:22px}
.kt-num{flex:none;font:600 12px/1 var(--f-mono);color:var(--accent-ink);background:var(--accent-soft);padding:7px 8px;border-radius:7px;margin-top:4px}
.kt-sh h2{margin:0 0 4px;font-size:24px;line-height:1.3;letter-spacing:-.02em;font-weight:680}
.kt-sh p{margin:0;max-width:44em;font-size:14.5px;line-height:1.7;color:var(--ink-2)}

/* 全景图 */
.kt-legend{display:flex;flex-wrap:wrap;gap:6px 14px;margin:0 0 12px;font-size:12.5px;color:var(--ink-2)}
.kt-legend span{display:inline-flex;align-items:center;gap:6px}
.kt-legend i{width:9px;height:9px;border-radius:50%;background:var(--c)}
.kt-legend .lg-k{color:var(--ink-3)}
.kt-legend .lg-big{width:12px;height:12px;background:var(--ink-3)}
.kt-legend .lg-ring{width:12px;height:12px;background:transparent;box-shadow:inset 0 0 0 1.5px var(--ink-3)}
.kt-legend .lg-sq{border-radius:2px;background:var(--ink-3)}
.kt-pick{display:flex;flex-wrap:wrap;align-items:center;gap:6px;margin:0 0 14px}
.kt-pick > span{font:620 12px/1 var(--f-sans);color:var(--ink-3);margin-right:4px}
.kt-pick button{border:0;padding:6px 11px;border-radius:999px;font-size:13px;font-weight:540;background:var(--surface-2);color:var(--ink-2);transition:background .15s,color .15s}
.kt-pick button:hover{background:var(--surface-3);color:var(--ink)}
.kt-pick button[aria-pressed=true]{background:var(--accent);color:var(--on-accent)}
.kt-chart{position:relative;border:1px solid var(--line);border-radius:14px;background:var(--bg);box-shadow:var(--shadow-sm)}
.kt-cs{overflow-x:auto;padding:12px;border-radius:14px}
.kt-chart svg{display:block;max-width:none}
.kt-chart.kt-fail{display:none}
.kt-note{margin:10px 2px 0;font-size:13px;line-height:1.6;color:var(--ink-3)}
.kt-tl{font:650 12.5px/1 var(--f-sans)}
.kt-ll{font:500 11.5px/1 var(--f-sans);fill:var(--ink-2)}
.kt-yl{font:560 11px/1 var(--f-mono);fill:var(--ink-3)}
.kt-gy{stroke:var(--line-2);stroke-width:1}
.kt-gq{stroke:var(--line);stroke-width:1;stroke-dasharray:2 4}
.kt-cz{fill:var(--ink);fill-opacity:.035;pointer-events:none}
.kt-czl{font:500 10.5px/1 var(--f-sans);fill:var(--ink-3)}
.kt-lane{stroke:var(--line);stroke-width:1}
.kg{cursor:pointer}
.kd{stroke:var(--bg);stroke-width:1.5;transition:opacity .2s,transform .2s var(--ease);transform-box:fill-box;transform-origin:center}
.kd-ring{fill:none;stroke-width:1.4;opacity:.75;transition:opacity .2s}
.kg:hover .kd{transform:scale(1.35)}
#kt-svg.dim .kg .kd,#kt-svg.dim .kg .kd-ring{opacity:.16}
#kt-svg.dim .kg.on .kd,#kt-svg.dim .kg.on .kd-ring{opacity:1}
#kt-svg.hov .kg .kd,#kt-svg.hov .kg .kd-ring{opacity:.14}
#kt-svg.hov .kg.lk .kd,#kt-svg.hov .kg.lk .kd-ring{opacity:1}
.kt-hls{fill:none;stroke:var(--accent);stroke-width:1;stroke-dasharray:2 3;opacity:.6;animation:kt-fade .4s var(--ease) .15s backwards}
#kt-hlm{pointer-events:none}
.kt-hlm{animation:kt-fade .35s var(--ease) backwards;animation-delay:calc(var(--i)*90ms)}
.kt-hlm circle{fill:var(--accent);stroke:var(--surface);stroke-width:2.5}
.kt-hlm text{fill:#fff;font:650 10.5px/1 var(--f-mono)}
@keyframes kt-fade{from{opacity:0}}
.kt-hlp{fill:none;stroke:var(--accent);stroke-width:2.2;stroke-linecap:round;opacity:.85;stroke-dasharray:1;animation:kt-draw .5s var(--ease) backwards;animation-delay:calc(var(--i)*90ms)}
.kt-lk{fill:none;stroke:var(--ink-2);stroke-width:1.4;opacity:.7}
.kt-lk.back{stroke-dasharray:4 4}
@keyframes kt-draw{from{stroke-dashoffset:1}}
.kt-tip{position:absolute;z-index:5;width:300px;padding:12px 14px;border-radius:12px;background:var(--surface);border:1px solid var(--line-2);box-shadow:var(--shadow);pointer-events:none;font-size:13.5px;line-height:1.6}
.kt-tip b{display:block;font-size:14px;line-height:1.45;font-weight:620;margin:4px 0 4px}
.kt-tip p{margin:0;color:var(--ink-2)}
.tp-k{display:flex;align-items:center;gap:6px;font:560 11.5px/1.3 var(--f-mono);color:var(--ink-3)}
.tp-k i{width:7px;height:7px;border-radius:50%;background:var(--c)}
.tp-l{display:block;margin-top:6px;font-size:12px;color:var(--ink-3)}

/* 论文小药丸：在主线、规律、设想里引用论文 */
.pps{display:flex;flex-wrap:wrap;gap:6px;margin-top:10px}
.pp{--c:var(--accent);display:inline-flex;align-items:center;gap:6px;max-width:100%;border:0;padding:4px 10px 4px 8px;border-radius:7px;background:var(--surface-2);color:var(--ink);font-size:12.5px;font-weight:400;line-height:1.4;text-align:left;transition:background .15s}
.pp::before{content:"";flex:none;width:7px;height:7px;border-radius:50%;background:var(--c)}
.pp-in{display:inline;border:0;padding:0 1px;background:none;color:var(--accent-ink);font:inherit;font-weight:560;text-decoration:underline;text-decoration-color:color-mix(in oklch,var(--accent) 40%,transparent);text-underline-offset:3px;cursor:pointer}.pp-in:hover{text-decoration-color:currentColor}
.pp:hover{background:color-mix(in oklch,var(--c) 14%,var(--surface-2))}

/* 演进主线 */
.sl{container-type:inline-size;border:1px solid var(--line);border-radius:16px;background:var(--surface);box-shadow:var(--shadow-sm);padding:22px 24px 20px;margin:0 0 18px}
.sl-h{display:flex;gap:16px;align-items:flex-start;justify-content:space-between;margin-bottom:18px}
.sl-h h3{margin:0 0 6px;font-size:19px;line-height:1.35;letter-spacing:-.012em;font-weight:660}
.sl-h p{margin:0;max-width:52em;font-size:14.5px;line-height:1.75;color:var(--ink-2)}
.sl-h .chip{flex:none;font-size:13px;padding:7px 12px}
.sl-steps{list-style:none;margin:0;padding:0;display:grid;grid-template-columns:repeat(auto-fit,minmax(210px,1fr));gap:12px;counter-reset:st}
.sl-steps li{--c:var(--accent);position:relative;counter-increment:st;padding:14px 14px 14px;border-radius:12px;background:var(--surface-2);box-shadow:inset 0 3px 0 var(--c)}
.sl-steps li::after{content:"";position:absolute;right:-10px;top:24px;width:8px;height:8px;border-top:1.5px solid var(--line-2);border-right:1.5px solid var(--line-2);transform:rotate(45deg)}
.sl-steps li:last-child::after{display:none}
.sl-steps p{overflow-wrap:anywhere}
@container (min-width:900px){.sl-steps li.eor::after{display:none}}
.st-k{font:560 11.5px/1.3 var(--f-mono);color:var(--ink-3);margin-bottom:6px}
.st-k::before{content:counter(st) " · ";color:color-mix(in oklch,var(--c) 70%,var(--ink))}
.sl-steps h4{margin:0 0 6px;font-size:15px;line-height:1.45;font-weight:640}
.sl-steps p{margin:0;font-size:13.5px;line-height:1.7;color:var(--ink-2)}
.sl-steps .pps{margin-top:10px}
.sl-steps .pp{background:var(--surface)}
@container (min-width:900px){.sl-steps{grid-template-columns:repeat(var(--n,4),minmax(0,1fr));gap:10px}.sl-steps li{padding:13px 12px}.sl-steps li::after{right:-8px}}
.sl-in{margin:16px 0 0;padding:12px 16px;border-radius:10px;background:var(--accent-soft);font-size:14.5px;line-height:1.75;color:var(--ink)}
.sl-in b{color:var(--accent-ink);font-weight:640}

/* 规律 */
.pt-grid{list-style:none;margin:0;padding:0;display:grid;grid-template-columns:repeat(auto-fill,minmax(330px,1fr));gap:14px}
.pt{border:1px solid var(--line);border-radius:14px;padding:18px 20px;background:var(--surface);box-shadow:var(--shadow-sm)}
.pt-n{font:600 12px/1 var(--f-mono);color:var(--accent-ink)}
.pt h3{margin:8px 0 6px;font-size:16.5px;line-height:1.45;font-weight:650;letter-spacing:-.01em}
.pt p{margin:0;font-size:14px;line-height:1.75;color:var(--ink-2)}

/* 分歧 */
.tn{border:1px solid var(--line);border-radius:14px;padding:18px 20px;background:var(--surface);box-shadow:var(--shadow-sm);margin:0 0 14px}
.tn h3{margin:0 0 12px;font-size:16.5px;line-height:1.45;font-weight:650}
.tn-ab{display:grid;grid-template-columns:1fr auto 1fr;gap:12px;align-items:stretch}
.tn-ab > div{background:var(--surface-2);border-radius:11px;padding:12px 14px}
.tn-ab h4{margin:0 0 4px;font-size:13.5px;font-weight:640;color:var(--ink)}
.tn-ab p{margin:0;font-size:13.5px;line-height:1.7;color:var(--ink-2)}
.tn-vs{align-self:center;font:600 12px/1 var(--f-mono);color:var(--ink-3)}
.tn-note{margin:12px 0 0;font-size:14px;line-height:1.75;color:var(--ink)}
.tn-note b{font-weight:640;color:var(--accent-ink)}

/* 设想 */
#kt-idea{display:block}
#kt-idea > .idea{display:inline-block;width:100%}
#kt-idea{columns:2 380px;column-gap:14px}
#kt-idea > .kt-sh{column-span:all}
.idea{break-inside:avoid;border:1px solid color-mix(in oklch,var(--accent) 22%,var(--line));border-radius:14px;padding:18px 20px;margin:0 0 14px;background:linear-gradient(180deg,color-mix(in oklch,var(--accent) 5%,var(--surface)),var(--surface) 60%);box-shadow:var(--shadow-sm)}
.idea-h{display:flex;align-items:center;gap:8px}
.idea h3{margin:8px 0 6px;font-size:16.5px;line-height:1.45;font-weight:650}
.idea p{margin:0 0 8px;font-size:14px;line-height:1.75;color:var(--ink-2)}
.idea .idea-how{color:var(--ink)}
.idea-how b{font-weight:640;color:var(--accent-ink)}
.idea .note-row{margin-top:10px}

/* 分支详解 */
.tk{--c:var(--accent);margin:0 0 30px}
.tk-h{display:flex;align-items:flex-start;gap:12px;padding:0 0 12px;margin-bottom:12px;border-bottom:1px solid var(--line)}
.tk-dot{flex:none;width:12px;height:12px;margin-top:7px;border-radius:4px;background:var(--c)}
.tk-h h3{margin:0 0 2px;font-size:19px;font-weight:660;letter-spacing:-.012em}
.tk-h p{margin:0;max-width:52em;font-size:14px;line-height:1.7;color:var(--ink-2)}
.tk-n{margin-left:auto;flex:none;font:560 12.5px/1 var(--f-mono);color:var(--ink-3);margin-top:6px}
.lf{border-radius:12px;padding:14px 16px 12px 18px;margin:0 0 10px;background:var(--surface-2);box-shadow:inset 3px 0 0 color-mix(in oklch,var(--c) 70%,transparent);scroll-margin-top:14px}
.lf.flash{animation:sec-flash 1.8s ease-out}
.lf-h{display:flex;align-items:baseline;gap:10px}
.lf-h h4{margin:0;font-size:16px;font-weight:650;color:color-mix(in oklch,var(--c) 55%,var(--ink))}
.lf-h span{font:500 12px/1 var(--f-mono);color:var(--ink-3)}
.lf-sum{margin:6px 0 10px;max-width:60em;font-size:14.5px;line-height:1.75;color:var(--ink)}
.stg{list-style:none;margin:0 0 10px;padding:0 0 0 14px;border-left:1.5px dashed color-mix(in oklch,var(--c) 40%,var(--line-2));display:grid;gap:12px}
.stg li{position:relative}
.stg li::before{content:"";position:absolute;left:-19.5px;top:6px;width:9px;height:9px;border-radius:50%;background:var(--surface-2);box-shadow:inset 0 0 0 2px var(--c)}
.stg-k{font:560 11.5px/1.3 var(--f-mono);color:var(--ink-3)}
.stg b{display:block;margin:2px 0 2px;font-size:14.5px;font-weight:640}
.stg p{margin:0;font-size:14px;line-height:1.7;color:var(--ink-2)}
.stg .pps{margin-top:7px}.stg .pp{background:var(--surface)}
.lf-open{margin:0 0 8px;font-size:14px;line-height:1.7;color:var(--ink)}
.lf-open b{font-weight:640;color:color-mix(in oklch,var(--t-env) 70%,var(--ink))}
.lf-all summary{cursor:pointer;width:max-content;max-width:100%;font-size:13px;font-weight:560;color:var(--ink-2);padding:4px 0;list-style:none;display:flex;align-items:center;gap:6px}
.lf-all summary::-webkit-details-marker{display:none}
.lf-all summary::before{content:"";width:6px;height:6px;border-right:1.5px solid currentColor;border-bottom:1.5px solid currentColor;transform:rotate(-45deg);transition:transform .2s var(--ease)}
.lf-all[open] summary::before{transform:rotate(45deg)}
.lf-all summary:hover{color:var(--accent-ink)}
.lf-all ul{list-style:none;margin:6px 0 2px;padding:0;display:grid;gap:2px}
.lf-row{width:100%;display:grid;grid-template-columns:58px minmax(0,15em) auto minmax(0,1fr);gap:10px;align-items:baseline;border:0;background:transparent;text-align:left;padding:6px 8px;border-radius:8px;font-size:13.5px;line-height:1.55;transition:background .15s}
.lf-row:hover{background:var(--surface)}
.lf-row .d{font:500 12px/1.55 var(--f-mono);color:var(--ink-3);font-variant-numeric:tabular-nums}
.lf-row .t{font-weight:600;color:var(--ink);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.lf-row .t em{font-style:normal;margin-left:6px;font-size:11px;font-weight:500;color:var(--ink-3);padding:1px 5px;border-radius:4px;box-shadow:inset 0 0 0 1px var(--line-2)}
.lf-row .badge{font-size:11px;padding:3px 7px}
.lf-row .o{color:var(--ink-2);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}

/* 响应式 */
@media (max-width:1180px){
  .app{grid-template-columns:var(--nav-w) minmax(0,1fr)}
  .app.focus{grid-template-columns:0 minmax(0,1fr)}
  .reader,.placeholder{grid-column:2;grid-row:1}
  .app.reading .list-pane{display:none}
  .app:not(.reading) .reader,.app:not(.reading) .placeholder{display:none}
  .app:not(.reading) .list-pane{grid-column:2}
}
@media (max-width:820px){
  .app{grid-template-columns:minmax(0,1fr)}
  .nav{position:fixed;inset:0 auto 0 0;width:min(86vw,300px);z-index:30;transform:translateX(-102%);transition:transform .3s var(--ease);box-shadow:var(--shadow);background:var(--bg)}
  .nav.open{transform:none}
  .reader,.placeholder,.list-pane{grid-column:1}
  .only-narrow{display:inline-grid}
  .app,.app.focus{grid-template-columns:minmax(0,1fr)}
  #focus-btn{display:none}
  .doc{padding:24px 18px 40px}
  .pager{padding:0 18px 100px;grid-template-columns:1fr}
  .pager .next{grid-column:1}
  .bar-crumb{display:none}
  .chip{padding:7px 12px;font-size:13.5px}
  .doc .actions{gap:6px}
  .lightbox{padding:52px 10px 16px}
  .toc{left:10px;right:10px;width:auto}
  .sort label{display:none}
  .reader-bar{padding:8px 10px;gap:4px}
  .seg button{padding:6px 10px;font-size:13px}
  .icon-btn{width:34px;height:34px}
  .doc h1{font-size:25px}
  .mm-scroll{padding:22px 16px 48px}
  .mm-bar{padding:8px 10px}
  .mm-bar .btn-ghost span:not(.ico){display:none}
  .mm-gist{font-size:16.5px}
  .note-pi{grid-template-columns:1fr}
  .note-more{grid-template-columns:1fr;gap:2px 0}
  .note-more dd{margin-bottom:8px}
  .note-b{padding:14px 14px 4px}.note-h,.note-f{padding-left:14px;padding-right:14px}
}
@media (max-width:1180px){
  .kt{grid-column:2}
  .kt-body{padding:32px 28px 100px}
}
@media (max-width:820px){
  .kt{grid-column:1}
  .kt-bar{padding:8px 10px}
  .kt-body{padding:22px 16px 90px}
  .kt-sh{gap:12px}.kt-sh h2{font-size:21px}
  .sl{padding:16px 14px}
  .sl-h{flex-direction:column;gap:10px}
  .sl-steps{grid-template-columns:1fr}
  .sl-steps li::after{display:none}
  .pt-grid{grid-template-columns:1fr}
  .tn-ab{grid-template-columns:1fr}
  .tn-vs{justify-self:center}
  .lf{padding:12px 12px 10px 14px}
  .lf-row{grid-template-columns:52px minmax(0,1fr);row-gap:2px}
  .lf-row .badge{display:none}
  .lf-row .o{grid-column:2;white-space:normal;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical}
  .kt-tip{width:240px}
}
@media (prefers-reduced-motion:reduce){*{animation:none!important;transition:none!important;scroll-behavior:auto!important}}
