/* 代码高亮配色（Pygments github-dark，构建时注入） */
pre { line-height: 125%; }
td.linenos .normal { color: #6e7681; background-color: #0d1117; padding-left: 5px; padding-right: 5px; }
span.linenos { color: #6e7681; background-color: #0d1117; padding-left: 5px; padding-right: 5px; }
td.linenos .special { color: #e6edf3; background-color: #6e7681; padding-left: 5px; padding-right: 5px; }
span.linenos.special { color: #e6edf3; background-color: #6e7681; padding-left: 5px; padding-right: 5px; }
.code .hll { background-color: #6e7681 }
.code { background: #0d1117; color: #E6EDF3 }
.code .c { color: #8B949E; font-style: italic } /* Comment */
.code .err { color: #F85149 } /* Error */
.code .esc { color: #E6EDF3 } /* Escape */
.code .g { color: #E6EDF3 } /* Generic */
.code .k { color: #FF7B72 } /* Keyword */
.code .l { color: #A5D6FF } /* Literal */
.code .n { color: #E6EDF3 } /* Name */
.code .o { color: #FF7B72; font-weight: bold } /* Operator */
.code .x { color: #E6EDF3 } /* Other */
.code .p { color: #E6EDF3 } /* Punctuation */
.code .ch { color: #8B949E; font-style: italic } /* Comment.Hashbang */
.code .cm { color: #8B949E; font-style: italic } /* Comment.Multiline */
.code .cp { color: #8B949E; font-weight: bold; font-style: italic } /* Comment.Preproc */
.code .cpf { color: #8B949E; font-style: italic } /* Comment.PreprocFile */
.code .c1 { color: #8B949E; font-style: italic } /* Comment.Single */
.code .cs { color: #8B949E; font-weight: bold; font-style: italic } /* Comment.Special */
.code .gd { color: #FFA198; background-color: #490202 } /* Generic.Deleted */
.code .ge { color: #E6EDF3; font-style: italic } /* Generic.Emph */
.code .ges { color: #E6EDF3; font-weight: bold; font-style: italic } /* Generic.EmphStrong */
.code .gr { color: #FFA198 } /* Generic.Error */
.code .gh { color: #79C0FF; font-weight: bold } /* Generic.Heading */
.code .gi { color: #56D364; background-color: #0F5323 } /* Generic.Inserted */
.code .go { color: #8B949E } /* Generic.Output */
.code .gp { color: #8B949E } /* Generic.Prompt */
.code .gs { color: #E6EDF3; font-weight: bold } /* Generic.Strong */
.code .gu { color: #79C0FF } /* Generic.Subheading */
.code .gt { color: #FF7B72 } /* Generic.Traceback */
.code .g-Underline { color: #E6EDF3; text-decoration: underline } /* Generic.Underline */
.code .kc { color: #79C0FF } /* Keyword.Constant */
.code .kd { color: #FF7B72 } /* Keyword.Declaration */
.code .kn { color: #FF7B72 } /* Keyword.Namespace */
.code .kp { color: #79C0FF } /* Keyword.Pseudo */
.code .kr { color: #FF7B72 } /* Keyword.Reserved */
.code .kt { color: #FF7B72 } /* Keyword.Type */
.code .ld { color: #79C0FF } /* Literal.Date */
.code .m { color: #A5D6FF } /* Literal.Number */
.code .s { color: #A5D6FF } /* Literal.String */
.code .na { color: #E6EDF3 } /* Name.Attribute */
.code .nb { color: #E6EDF3 } /* Name.Builtin */
.code .nc { color: #F0883E; font-weight: bold } /* Name.Class */
.code .no { color: #79C0FF; font-weight: bold } /* Name.Constant */
.code .nd { color: #D2A8FF; font-weight: bold } /* Name.Decorator */
.code .ni { color: #FFA657 } /* Name.Entity */
.code .ne { color: #F0883E; font-weight: bold } /* Name.Exception */
.code .nf { color: #D2A8FF; font-weight: bold } /* Name.Function */
.code .nl { color: #79C0FF; font-weight: bold } /* Name.Label */
.code .nn { color: #FF7B72 } /* Name.Namespace */
.code .nx { color: #E6EDF3 } /* Name.Other */
.code .py { color: #79C0FF } /* Name.Property */
.code .nt { color: #7EE787 } /* Name.Tag */
.code .nv { color: #79C0FF } /* Name.Variable */
.code .ow { color: #FF7B72; font-weight: bold } /* Operator.Word */
.code .pm { color: #E6EDF3 } /* Punctuation.Marker */
.code .w { color: #6E7681 } /* Text.Whitespace */
.code .mb { color: #A5D6FF } /* Literal.Number.Bin */
.code .mf { color: #A5D6FF } /* Literal.Number.Float */
.code .mh { color: #A5D6FF } /* Literal.Number.Hex */
.code .mi { color: #A5D6FF } /* Literal.Number.Integer */
.code .mo { color: #A5D6FF } /* Literal.Number.Oct */
.code .sa { color: #79C0FF } /* Literal.String.Affix */
.code .sb { color: #A5D6FF } /* Literal.String.Backtick */
.code .sc { color: #A5D6FF } /* Literal.String.Char */
.code .dl { color: #79C0FF } /* Literal.String.Delimiter */
.code .sd { color: #A5D6FF } /* Literal.String.Doc */
.code .s2 { color: #A5D6FF } /* Literal.String.Double */
.code .se { color: #79C0FF } /* Literal.String.Escape */
.code .sh { color: #79C0FF } /* Literal.String.Heredoc */
.code .si { color: #A5D6FF } /* Literal.String.Interpol */
.code .sx { color: #A5D6FF } /* Literal.String.Other */
.code .sr { color: #79C0FF } /* Literal.String.Regex */
.code .s1 { color: #A5D6FF } /* Literal.String.Single */
.code .ss { color: #A5D6FF } /* Literal.String.Symbol */
.code .bp { color: #E6EDF3 } /* Name.Builtin.Pseudo */
.code .fm { color: #D2A8FF; font-weight: bold } /* Name.Function.Magic */
.code .vc { color: #79C0FF } /* Name.Variable.Class */
.code .vg { color: #79C0FF } /* Name.Variable.Global */
.code .vi { color: #79C0FF } /* Name.Variable.Instance */
.code .vm { color: #79C0FF } /* Name.Variable.Magic */
.code .il { color: #A5D6FF } /* Literal.Number.Integer.Long */

/* ==========================================================================
   大模型开发讲义 · GitBook 风格样式表（换皮样板）
   顶部的代码高亮配色由构建器注入，其余为站点样式。
   三栏：左侧固定目录树 / 中间正文 / 右侧本页锚点。亮暗双主题。
   ========================================================================== */

:root{
  --ink:#1c1e21; --ink2:#3d434d; --mut:#6b7280; --faint:#9aa1ab;
  --line:#e9ebef; --line2:#f2f3f6;
  --bg:#ffffff; --surf:#ffffff; --surf2:#f7f8fa; --surf3:#fbfcfd;
  --acc:#4f46e5; --acc2:#4338ca; --acc-s:#eef2ff; --acc-b:#c7d2fe;
  --warn:#c2410c; --warn-s:#fff7ed; --warn-b:#fed7aa; --warn-ink:#7c2d12;
  --danger:#b91c1c; --danger-s:#fef2f2; --danger-b:#fecaca; --danger-ink:#7f1d1d;
  --ok:#047857; --ok-s:#ecfdf5; --ok-b:#a7f3d0; --ok-ink:#065f46;
  --tip:#4338ca; --tip-s:#eef2ff; --tip-b:#c7d2fe; --tip-ink:#3730a3;
  --sh-s:0 1px 2px rgba(16,24,40,.05);
  --sh-m:0 4px 16px -8px rgba(16,24,40,.18);
  --r:12px;
  --topbar:52px; --sbw:288px; --rbw:236px; --doc:820px;
}
html[data-theme="dark"]{
  /* 不是纯黑：GitBook 那种深灰蓝 */
  --ink:#e4e9f0; --ink2:#c6cdd8; --mut:#93a1b3; --faint:#71808f;
  --line:#2b3441; --line2:#232b36;
  --bg:#161b22; --surf:#1c222c; --surf2:#222a35; --surf3:#1a202a;
  --acc:#8ea2ff; --acc2:#adbaff; --acc-s:#232b41; --acc-b:#3a4569;
  --warn:#fdba74; --warn-s:#271d15; --warn-b:#54381f; --warn-ink:#f0c9a6;
  --danger:#fca5a5; --danger-s:#28191b; --danger-b:#57292d; --danger-ink:#f1b7b7;
  --ok:#6ee7b7; --ok-s:#15241e; --ok-b:#255142; --ok-ink:#a7e7cd;
  --tip:#a5b4fc; --tip-s:#222a40; --tip-b:#3a4569; --tip-ink:#c3ccff;
  --sh-s:0 1px 2px rgba(0,0,0,.28);
  --sh-m:0 4px 16px -8px rgba(0,0,0,.5);
}

*{box-sizing:border-box}
html{scroll-behavior:smooth; scroll-padding-top:calc(var(--topbar) + 18px)}
body{
  margin:0; color:var(--ink); background:var(--bg);
  font-family:system-ui,-apple-system,"Segoe UI","PingFang SC","Hiragino Sans GB","Microsoft YaHei","Noto Sans SC",sans-serif;
  font-size:16px; line-height:1.85;
  -webkit-font-smoothing:antialiased;
}
code,pre,.mono,kbd{font-family:ui-monospace,"SFMono-Regular",Menlo,Consolas,"Liberation Mono",monospace}
:not(pre) > code, .kw{overflow-wrap:anywhere}
img{max-width:100%}

/* ==========================================================================
   顶部细条
   ========================================================================== */
.topbar{
  position:sticky; top:0; z-index:60; height:var(--topbar);
  display:flex; align-items:center; gap:12px; padding:0 20px;
  background:var(--bg); border-bottom:1px solid var(--line);
}
.crumb{display:flex; align-items:center; gap:7px; font-size:13px; color:var(--mut);
  min-width:0; overflow:hidden; white-space:nowrap}
.crumb a{color:var(--mut); text-decoration:none}
.crumb a:hover{color:var(--acc)}
.crumb .sep{color:var(--faint)}
.crumb b{color:var(--ink2); font-weight:600; overflow:hidden; text-overflow:ellipsis}
.themebtn{
  margin-left:auto; flex:none; width:34px; height:34px; border-radius:9px; cursor:pointer;
  background:transparent; border:1px solid var(--line); color:var(--ink2);
  display:flex; align-items:center; justify-content:center; font-size:15px; line-height:1;
}
.themebtn:hover{background:var(--surf2); color:var(--acc)}
.themebtn .ic-moon{display:none}
html[data-theme="dark"] .themebtn .ic-sun{display:none}
html[data-theme="dark"] .themebtn .ic-moon{display:block}
.hamb{display:none; flex:none; width:34px; height:34px; border-radius:9px; cursor:pointer;
  background:transparent; border:1px solid var(--line); padding:0;
  flex-direction:column; align-items:center; justify-content:center; gap:4px}
.hamb span{display:block; width:15px; height:1.5px; background:var(--ink2); border-radius:2px}

/* ==========================================================================
   三栏骨架
   ========================================================================== */
.shell{display:flex; align-items:flex-start; max-width:1560px; margin:0 auto}
.sidebar{
  position:sticky; top:var(--topbar); z-index:40;
  width:var(--sbw); flex:0 0 var(--sbw);
  height:calc(100vh - var(--topbar)); overflow-y:auto; overscroll-behavior:contain;
  padding:20px 14px 48px 24px; border-right:1px solid var(--line); background:var(--bg);
}
.content{flex:1 1 auto; min-width:0; padding:34px 44px 100px}
.content > *{max-width:var(--doc); margin-left:auto; margin-right:auto}
.content.wide > *{max-width:1120px}
.rightbar{
  position:sticky; top:var(--topbar);
  width:var(--rbw); flex:0 0 var(--rbw);
  height:calc(100vh - var(--topbar)); overflow-y:auto;
  padding:34px 22px 48px 6px;
}
.scrim{display:none}

/* ---------- 站名 + 搜索 ---------- */
.brand{display:flex; align-items:center; gap:10px; text-decoration:none; color:inherit; margin:2px 0 14px}
.brand .bdot{
  width:28px; height:28px; flex:none; border-radius:8px; color:#fff; font-size:13px; font-weight:700;
  display:flex; align-items:center; justify-content:center;
  background:linear-gradient(135deg,var(--acc),#6366f1);
}
html[data-theme="dark"] .brand .bdot{color:#101522}
.brand .btxt{font-size:15px; font-weight:650; letter-spacing:-.2px}

.searchbox{position:relative; margin:0 0 16px}
.searchbox input{
  width:100%; font:inherit; font-size:13.5px; line-height:1.4; color:var(--ink);
  background:var(--surf2); border:1px solid var(--line); border-radius:9px;
  padding:8px 30px 8px 32px; outline:none; -webkit-appearance:none; appearance:none;
}
.searchbox input::placeholder{color:var(--faint)}
.searchbox input:focus{border-color:var(--acc-b); background:var(--surf)}
.searchbox .sic{position:absolute; left:10px; top:50%; transform:translateY(-50%);
  color:var(--faint); font-size:13px; pointer-events:none; line-height:1}
.searchbox .stag{position:absolute; right:9px; top:50%; transform:translateY(-50%);
  font-size:10.5px; color:var(--faint); border:1px solid var(--line); border-radius:5px;
  padding:1px 5px; line-height:1.5; pointer-events:none}
.searchbox input:focus ~ .stag{display:none}
.sresults{
  position:absolute; left:0; right:0; top:calc(100% + 6px); z-index:70;
  background:var(--surf); border:1px solid var(--line); border-radius:11px;
  box-shadow:var(--sh-m); padding:6px; max-height:56vh; overflow-y:auto;
}
.sresults[hidden]{display:none}
.sresults .shint{font-size:12px; color:var(--mut); padding:8px 10px}
.sresults a{display:block; text-decoration:none; color:var(--ink2); padding:8px 10px;
  border-radius:8px; font-size:13.2px; line-height:1.55}
.sresults a:hover,.sresults a:focus{background:var(--acc-s); color:var(--acc2); outline:none}
.sresults a .st{display:block; font-weight:600; color:var(--ink)}
.sresults a:hover .st{color:var(--acc2)}
.sresults a .sx{display:block; font-size:12.2px; color:var(--mut); margin-top:2px}
.sresults mark{background:var(--acc-s); color:var(--acc2); border-radius:3px; padding:0 2px}

/* ---------- 全站目录树 ---------- */
.nav{font-size:13.6px; padding-bottom:20px}
.navmod{border:0; margin:0 0 2px}
.navmod > summary{
  display:flex; align-items:center; gap:8px; cursor:pointer; list-style:none;
  padding:7px 8px; border-radius:8px; color:var(--ink2); font-weight:600; font-size:13.4px;
}
.navmod > summary::-webkit-details-marker{display:none}
.navmod > summary:hover{background:var(--surf2); color:var(--ink)}
.navmod .nmno{flex:none; width:19px; text-align:center; color:var(--faint); font-size:12.5px; font-weight:400}
.navmod .nmt{flex:1 1 auto; min-width:0}
.navmod .nmc{flex:none; width:12px; height:12px; position:relative}
.navmod .nmc::before{
  content:""; position:absolute; left:2px; top:3px; width:5px; height:5px;
  border-right:1.5px solid var(--faint); border-bottom:1.5px solid var(--faint);
  transform:rotate(-45deg);
}
.navmod[open] > summary .nmc::before{transform:rotate(45deg); top:2px}
.navmod.cur > summary{color:var(--ink)}
.navmod.cur .nmno{color:var(--acc)}
.navlist{list-style:none; margin:2px 0 8px; padding:0 0 0 12px; border-left:1px solid var(--line)}
.navlist li{margin:0}
.navlink{
  display:block; padding:6px 10px; margin:1px 0 1px -1px; border-radius:7px;
  color:var(--mut); text-decoration:none; line-height:1.55; font-size:13.2px;
  border-left:2px solid transparent;
}
a.navlink:hover{color:var(--ink); background:var(--surf2)}
a.navlink.on{color:var(--acc2); font-weight:600; border-left-color:var(--acc); background:var(--acc-s)}
.navlink.off{color:var(--faint); cursor:default}

/* ---------- 右栏：本页内容 ---------- */
.onthis{font-size:11.5px; letter-spacing:.9px; color:var(--faint); font-weight:600;
  text-transform:uppercase; margin:0 0 10px 10px}
.pagetoc{font-size:13.2px}
.pagetoc a{display:block; padding:5px 10px; margin:1px 0; color:var(--mut); text-decoration:none;
  border-left:2px solid transparent; border-radius:0 7px 7px 0; line-height:1.55}
.pagetoc a:hover{color:var(--ink)}
.pagetoc a.sub{padding-left:22px; font-size:12.6px}
.pagetoc a.on{color:var(--acc2); font-weight:600; border-left-color:var(--acc)}
.pagetoc .grp{font-size:11px; color:var(--faint); letter-spacing:.8px; margin:14px 0 4px 10px}

/* ==========================================================================
   正文
   ========================================================================== */
h1,h2,h3,h4{line-height:1.45; margin:0}
.doctitle{font-size:34px; letter-spacing:-.6px; margin:4px 0 0}
.doclead{font-size:17px; color:var(--mut); margin:12px 0 30px; line-height:1.75}

.card{background:transparent; border:0; border-radius:0; box-shadow:none; padding:0; margin:0 0 6px}
h2.sec{font-size:24px; margin:52px 0 6px; letter-spacing:-.3px; scroll-margin-top:calc(var(--topbar) + 18px);
  padding-top:20px; border-top:1px solid var(--line2)}
.card:first-of-type h2.sec{border-top:0; padding-top:0; margin-top:8px}
h2.sec .no{display:inline-block; min-width:30px; height:30px; line-height:30px; text-align:center;
  background:var(--acc-s); color:var(--acc2); border:1px solid var(--acc-b); border-radius:9px;
  font-size:13.5px; font-weight:700; margin-right:11px; vertical-align:3px}
.sec-sub{color:var(--mut); font-size:14px; margin:0 0 4px 41px}
h3{font-size:19px; margin:32px 0 10px; scroll-margin-top:calc(var(--topbar) + 18px)}
h4{font-size:15.5px; margin:24px 0 8px; color:var(--ink2)}
p{margin:14px 0}
.lead{font-size:16.5px; color:var(--ink2)}
ul,ol{margin:14px 0; padding-left:22px}
li{margin:7px 0}
strong{font-weight:600}
.kw{background:var(--acc-s); color:var(--acc2); border:1px solid var(--acc-b); border-radius:6px;
  padding:1px 6px; font-size:13.5px}
:not(pre) > code{background:var(--surf2); border:1px solid var(--line2); border-radius:5px;
  padding:1px 5px; font-size:13.2px; color:var(--ink2)}
a.link{color:var(--acc); text-decoration:none; border-bottom:1px solid var(--acc-b)}
a.link:hover{color:var(--acc2)}
hr{border:0; border-top:1px solid var(--line); margin:34px 0}

/* ---------- 图 ---------- */
.fig{margin:24px 0; padding:0; background:var(--surf); border:1px solid var(--line);
  border-radius:var(--r); overflow:hidden}
.fig svg,.figimg{display:block; width:100%; height:auto}
.fig figcaption{font-size:13px; color:var(--mut); padding:11px 16px;
  border-top:1px solid var(--line2); background:var(--surf3)}

/* ---------- 代码卡 ---------- */
.codecard{margin:18px 0; border-radius:11px; overflow:hidden; border:1px solid #30363d}
.codebar{display:flex; align-items:center; gap:10px; background:#161b22; padding:9px 16px;
  border-bottom:1px solid #30363d; flex-wrap:wrap}
.cfile{color:#c9d1d9; font-size:12.8px; font-family:ui-monospace,Menlo,Consolas,monospace}
.cbadge{font-size:11px; padding:2px 9px; border-radius:999px; white-space:nowrap}
.cbtns{margin-left:auto; display:flex; gap:7px; flex-shrink:0}
.cbtn{font:inherit; font-size:11.6px; line-height:1; color:#c9d1d9; background:#21262d;
  border:1px solid #3d444d; border-radius:7px; padding:5px 11px; cursor:pointer;
  transition:background .15s,color .15s,border-color .15s; white-space:nowrap}
.cbtn:hover{background:#30363d; color:#fff; border-color:#576069}
.cbtn:active{transform:translateY(1px)}
.cbtn.done{color:#7ee787; border-color:#2ea04366; background:#2ea04326}
.badge-tpl{color:#86efac; background:#14532d55; border:1px solid #166534}
pre.code{margin:0; background:#0d1117; color:#e6edf3; padding:18px; overflow-x:auto;
  font-size:13.3px; line-height:1.72; tab-size:4}
pre.code code{background:none; border:0; padding:0; font-size:inherit; color:inherit}

/* ---------- 提示块 ---------- */
.note{border-radius:10px; padding:14px 18px; margin:20px 0; border:1px solid; font-size:14.8px;
  border-left-width:3px}
.note .nt{display:block; font-weight:600; margin-bottom:4px; font-size:14.5px}
.note.rule{background:var(--danger-s); border-color:var(--danger-b); color:var(--danger-ink)}
.note.rule .nt{color:var(--danger)}
.note.tip{background:var(--tip-s); border-color:var(--tip-b); color:var(--tip-ink)}
.note.tip .nt{color:var(--tip)}
.note.warn{background:var(--warn-s); border-color:var(--warn-b); color:var(--warn-ink)}
.note.warn .nt{color:var(--warn)}
.note.ok{background:var(--ok-s); border-color:var(--ok-b); color:var(--ok-ink)}
.note.ok .nt{color:var(--ok)}

/* ---------- 表格 ---------- */
.tbl{width:100%; border-collapse:separate; border-spacing:0; margin:20px 0; font-size:14.2px;
  border:1px solid var(--line); border-radius:10px; overflow:hidden; background:var(--surf)}
.tbl th{background:var(--surf2); text-align:left; font-weight:600; color:var(--ink2); font-size:13.4px}
.tbl th,.tbl td{padding:10px 14px; border-bottom:1px solid var(--line2); vertical-align:top}
.tbl tr:last-child td{border-bottom:none}
.tbl td code{font-size:12.8px; color:var(--acc2)}
.tbl .c1{white-space:nowrap}
.tblwrap{overflow-x:auto; margin:20px 0}
.tblwrap .tbl{margin:0}
/* 窄屏下不给最小宽的话，.c1 的 nowrap 会把剩余列挤成一线天，
   一行折十几行、行高飙到 200px，可见单元格却空荡荡。
   容器本来就可横向滚动，给它个最小宽比压扁好看得多。 */
@media (max-width:760px){
  .tblwrap .tbl{min-width:620px}
}

/* ---------- 小卡片组 ---------- */
.grid{display:grid; gap:14px; margin:20px 0}
.g3{grid-template-columns:repeat(3,1fr)}
.g2{grid-template-columns:repeat(2,1fr)}
.mini{background:var(--surf); border:1px solid var(--line); border-radius:10px; padding:16px 18px}
.mini .h{display:flex; align-items:center; gap:9px; font-weight:600; font-size:15px; margin-bottom:6px}
.mini .n{width:23px;height:23px;flex:none;border-radius:7px;background:var(--acc-s);color:var(--acc2);
  font-size:12.5px;display:flex;align-items:center;justify-content:center;font-weight:700}
.mini p{margin:4px 0 0; font-size:14px; color:var(--ink2); line-height:1.75}

/* ---------- 易错点 / 自测 ---------- */
.pit{border:1px solid var(--warn-b); background:var(--warn-s); border-radius:10px;
  padding:18px 22px; margin:24px 0}
.pit h4{margin:0 0 6px; color:var(--warn); font-size:15.5px}
.pit ul{margin:8px 0 0; padding-left:20px}
.pit li{font-size:14.6px; color:var(--warn-ink); margin:8px 0}
.pit li b{color:var(--warn)}

.quiz{border:1px solid var(--line); background:var(--surf); border-radius:10px;
  padding:6px 22px 4px; margin:24px 0}
.quiz>.qh{font-weight:600; font-size:15.5px; padding:14px 0 6px; color:var(--ink)}
details.qa{border-top:1px solid var(--line2); padding:12px 0}
details.qa:first-of-type{border-top:none}
details.qa summary{cursor:pointer; font-size:15px; color:var(--ink2); list-style:none;
  display:flex; gap:10px; align-items:flex-start}
details.qa summary::-webkit-details-marker{display:none}
details.qa summary::before{content:"Q"; flex:none; width:22px; height:22px; border-radius:6px;
  background:var(--acc-s); color:var(--acc2); font-size:11.5px; font-weight:700;
  display:flex; align-items:center; justify-content:center; margin-top:3px}
details.qa[open] summary{color:var(--ink); font-weight:600}
.ans{margin:10px 0 2px 32px; padding:12px 16px; background:var(--surf2); border:1px solid var(--line2);
  border-left:3px solid var(--ok); border-radius:0 9px 9px 0; font-size:14.6px; color:var(--ink2)}
.ans p:first-child{margin-top:0} .ans p:last-child{margin-bottom:0}

/* ---------- 流程条 ---------- */
.flow{display:flex; flex-wrap:wrap; align-items:stretch; gap:10px; margin:20px 0}
.flow .st{flex:1 1 150px; background:var(--surf); border:1px solid var(--line);
  border-radius:10px; padding:12px 14px}
.flow .st b{display:block; font-size:13px; color:var(--acc); margin-bottom:3px}
.flow .st span{font-size:13.6px; color:var(--ink2)}
.arw{display:flex; align-items:center; color:var(--faint); font-size:15px}

/* ---------- 上一讲 / 下一讲 ---------- */
.pager{display:grid; grid-template-columns:1fr 1fr; gap:14px; margin:56px 0 0;
  padding-top:26px; border-top:1px solid var(--line)}
.pager a,.pager span{display:block; background:var(--surf); border:1px solid var(--line);
  border-radius:11px; padding:15px 18px; text-decoration:none; min-width:0}
.pager .dir{display:block; font-size:12px; color:var(--faint); margin-bottom:3px}
.pager .ttl{font-size:14.6px; color:var(--ink2); font-weight:600; line-height:1.6}
.pager a:hover{border-color:var(--acc-b); background:var(--acc-s)}
.pager a:hover .ttl{color:var(--acc2)}
.pager .nx{text-align:right}
.pager span .ttl{color:var(--faint); font-weight:400}

/* ==========================================================================
   首页：学习路径 + 模块卡
   ========================================================================== */
.pagehead{margin:2px 0 26px}
.pagehead h1{font-size:32px; letter-spacing:-.6px}
.pagehead p{font-size:16px; color:var(--mut); margin:10px 0 0; max-width:760px}

.path{background:var(--surf); border:1px solid var(--line); border-radius:var(--r);
  padding:20px 24px; margin:0 0 24px}
.path h2{font-size:15.5px; margin-bottom:4px}
.path .hint{font-size:13px; color:var(--mut); margin:0 0 16px}
.rail{display:flex; align-items:stretch; gap:0; overflow-x:auto; padding-bottom:6px; position:relative; z-index:0}
.rail .node{flex:1 1 0; min-width:106px; text-decoration:none; text-align:center; padding:0 4px; position:relative}
.rail .node .bub{width:32px; height:32px; margin:0 auto 8px; border-radius:10px; display:flex;
  align-items:center; justify-content:center; font-size:14px; font-weight:700;
  background:var(--acc-s); color:var(--acc2); border:1px solid var(--acc-b)}
.rail .node .nm{display:block; font-size:12.4px; color:var(--ink2); line-height:1.5}
.rail .node:hover .bub{background:var(--acc); color:#fff; border-color:var(--acc)}
.rail .node:hover .nm{color:var(--acc)}
.rail .node::after{content:""; position:absolute; top:16px; right:-50%; width:100%; height:1px;
  background:var(--line); z-index:-1}
.rail .node:last-child::after{display:none}

.mods{display:grid; grid-template-columns:repeat(2,1fr); gap:16px}
.mod{background:var(--surf); border:1px solid var(--line); border-radius:var(--r);
  padding:22px 24px; display:flex; flex-direction:column; scroll-margin-top:calc(var(--topbar) + 18px)}
.mod .mh{display:flex; align-items:flex-start; gap:12px; margin-bottom:8px}
.mod .mno{flex:none; width:34px; height:34px; border-radius:10px; display:flex; align-items:center;
  justify-content:center; font-size:16px; font-weight:700; color:#fff;
  background:linear-gradient(135deg,var(--acc),#6366f1)}
html[data-theme="dark"] .mod .mno{color:#101522}
.mod h3{font-size:17.5px; margin:3px 0 0}
.mod .sm{font-size:14px; color:var(--ink2); margin:2px 0 14px}
.chips{display:flex; flex-wrap:wrap; gap:6px; margin:0 0 14px}
.chip{font-size:11.8px; color:var(--acc2); background:var(--acc-s); border:1px solid var(--acc-b);
  border-radius:999px; padding:2px 10px}
.lects{list-style:none; margin:0; padding:0; border-top:1px solid var(--line2)}
.lects li{margin:0; border-bottom:1px solid var(--line2)}
.lects li:last-child{border-bottom:none}
.lects a,.lects .off{display:flex; align-items:center; gap:10px; padding:9px 2px; font-size:13.8px;
  text-decoration:none; color:var(--ink2)}
.lects a:hover{color:var(--acc)}
.lects .off{color:var(--faint)}
.lects .t{flex:1 1 auto; min-width:0}
.lects .st{flex:none; font-size:11px; border-radius:999px; padding:1px 9px; border:1px solid}
.lects a .st{color:var(--ok); background:var(--ok-s); border-color:var(--ok-b)}
.lects .off .st{color:var(--faint); background:var(--surf2); border-color:var(--line)}
.lects .off .t{color:var(--faint)}
.caseline{margin-top:14px; padding-top:13px; border-top:1px dashed var(--line);
  font-size:13.2px; color:var(--mut)}
.caseline b{color:var(--warn); font-weight:600}
.caseline .cs{display:inline-block; background:var(--warn-s); border:1px solid var(--warn-b);
  color:var(--warn-ink); border-radius:7px; padding:1px 9px; margin:3px 6px 0 0; font-size:12.4px}

/* ==========================================================================
   响应式
   ========================================================================== */
@media (max-width:1300px){
  .content{padding:34px 32px 100px}
}
/* ≤1100px：收掉右栏 */
@media (max-width:1100px){
  .rightbar{display:none}
  .content{padding:30px 28px 90px}
  .g3{grid-template-columns:1fr 1fr}
  .mods{grid-template-columns:1fr}
}
/* ≤900px：左栏变抽屉，正文全宽 */
@media (max-width:900px){
  .hamb{display:flex}
  .sidebar{
    position:fixed; top:var(--topbar); left:0; bottom:0; height:auto; width:300px; flex-basis:300px;
    transform:translateX(-102%); transition:transform .18s ease-out; z-index:80;
    box-shadow:var(--sh-m); padding:18px 14px 40px 20px;
  }
  .sidebar.open{transform:translateX(0)}
  .scrim{display:block; position:fixed; inset:var(--topbar) 0 0 0; z-index:70;
    background:rgba(15,23,42,.38); opacity:0; pointer-events:none; transition:opacity .18s}
  .scrim.on{opacity:1; pointer-events:auto}
  .content{padding:24px 18px 80px}
  .content > *{max-width:none}
  .content.wide > *{max-width:none}
  .doctitle{font-size:26px}
  .doclead{font-size:15.5px; margin-bottom:22px}
  h2.sec{font-size:20px; margin-top:38px} h3{font-size:17px}
  h2.sec .no{min-width:26px; height:26px; line-height:26px; font-size:12.5px; margin-right:9px}
  .sec-sub{margin-left:35px}
  .g3,.g2{grid-template-columns:1fr}
  pre.code{font-size:12.4px; padding:14px}
  .dlname{display:none}
  .cfile{flex:1 1 100%; word-break:break-all}
  .cbtns{margin-left:0}
  .codebar{gap:8px; padding:9px 12px}
  .pager{grid-template-columns:1fr}
  .pager .nx{text-align:left}
  .path{padding:16px 16px}
  .rail .node{min-width:96px}
  .mod{padding:18px 16px}
  .pagehead h1{font-size:24px}
  .crumb .cb-hide{display:none}
}
@media (max-width:420px){
  .topbar{padding:0 12px; gap:8px}
  .crumb{font-size:12.2px}
  .sidebar{width:88vw; flex-basis:88vw}
}
@media (prefers-reduced-motion:reduce){
  *{transition:none !important; scroll-behavior:auto !important}
}
