/* =====================================================================
   知识库标准版 · 默认皮肤 v1（Claude 官网气质）
   设计 token 全部集中在 :root，白标时客户只改变量值。
   ===================================================================== */

:root {
    /* 色板 */
    --kb-bg: #FAF9F5;            /* 页面背景：暖白纸 */
    --kb-bg-soft: #F0EEE6;       /* 侧栏 / 卡片底 */
    --kb-bg-card: #FFFFFF;       /* 浮层 */
    --kb-text: #141413;          /* 正文：暖墨黑 */
    --kb-text-2: #63605A;        /* 次级文字（比 v1 略深，长文更耐看） */
    --kb-text-3: #8B877C;        /* 弱文字（原 #9C988E 偏淡，提升对比度） */
    --kb-accent: #A63040;        /* 强调：logo 主红（美景舒适家，实测 #A83042） */
    --kb-accent-deep: #8C2635;   /* 文字型强调（链接，对比度达标） */
    --kb-border: #E6E3D9;        /* 边框分隔线 */
    --kb-code-bg: #23231F;       /* 代码块深底 */
    --kb-code-text: #EDECE4;     /* 代码块文字 */

    /* 字体 */
    --kb-font-heading: "Noto Serif SC", "Songti SC", "STSong", serif;
    --kb-font-body: -apple-system, BlinkMacSystemFont, "PingFang SC", "Microsoft YaHei", sans-serif;
    --kb-font-code: "SFMono-Regular", Consolas, "Liberation Mono", Menlo, monospace;
    --fs-h1: 34px;
    --fs-h2: 23px;
    --fs-h3: 18.5px;
    --fs-body: 16px;
    --fs-small: 14px;
    --fs-tiny: 12.5px;

    /* 间距（8 点网格） */
    --sp-1: 8px;
    --sp-2: 16px;
    --sp-3: 24px;
    --sp-4: 32px;
    --sp-5: 48px;
    --sp-6: 64px;

    /* 形状与层次：三档阴影，卡片/浮层/大块各用一档 */
    --kb-radius: 12px;
    --kb-radius-sm: 6px;
    --kb-shadow-sm: 0 1px 2px rgba(20, 20, 19, .04);
    --kb-shadow: 0 1px 3px rgba(20, 20, 19, .06), 0 6px 16px -8px rgba(20, 20, 19, .12);
    --kb-shadow-lg: 0 10px 30px -12px rgba(20, 20, 19, .20);

    /* 动效（统一曲线与时长，别在组件里各写各的） */
    --ease: cubic-bezier(.22, 1, .36, 1);
    --dur-1: .16s;
    --dur-2: .3s;

    /* 布局 */
    --kb-sidebar-w: 260px;
    --kb-toc-w: 260px;       /* = 搜索框宽：TOC 左缘与搜索框左缘同一条线 */
    --kb-header-h: 56px;
    --kb-container: 1320px;

    /* 首页/栏目页（无右侧目录）内容右边界内收量：
       2026-10-23 用户拍板：右缘精确对齐搜索框左缘 → inset = 搜索框宽 260。
       1023 以下搜索框占满整行，不适用（媒体查询里归零）。*/
    --kb-main-right-inset: 260px;      /* = 搜索框宽：内容右缘与搜索框左缘对齐（2026-10-23 用户红线） */

    /* 首页/栏目页（无右侧目录）内容右边界内收量：
       2026-10-23 用户拍板：右缘精确对齐搜索框左缘 → inset = 搜索框宽 260。
       1023 以下搜索框占满整行，不适用（媒体查询里归零）。*/
    --kb-main-right-inset: 260px;      /* = 搜索框宽：内容右缘与搜索框左缘对齐（2026-10-23 用户红线） */      /* v1 的 1400 偏宽，正文行长超出舒适区 */
    --kb-read-w: 720px;          /* 正文最佳阅读宽度（16px 约 40 字/行） */
}

* {
    box-sizing: border-box;
}

/* 目录点击平滑滚动（用户要求：上下滑动过渡，不做硬跳） */
html {
    scroll-behavior: smooth;
}

body {
    margin: 0;
    font-family: var(--kb-font-body);
    font-size: var(--fs-body);
    line-height: 1.8;
    color: var(--kb-text);
    background: var(--kb-bg);
    -webkit-font-smoothing: antialiased;
}

a {
    color: var(--kb-accent-deep);
    text-decoration: none;
}

a:hover {
    text-decoration: underline;
}

/* 标题锚点跳转留出顶栏高度，避免被遮挡 */
h2, h3 {
    scroll-margin-top: calc(var(--kb-header-h) + var(--sp-2));
}

/* =====================================================================
   顶栏
   ===================================================================== */
.kb-header {
    position: sticky;
    top: 0;
    z-index: 100;
    height: var(--kb-header-h);
    background: rgba(250, 249, 245, .92);
    backdrop-filter: blur(8px);
    border-bottom: 1px solid var(--kb-border);
}

.kb-header-inner {
    max-width: var(--kb-container);
    height: 100%;
    margin: 0 auto;
    /* 与 .kb-container 同源（--kb-page-x）：logo 左缘 = 侧栏/正文左缘 */
    padding: 0 var(--kb-page-x);
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: var(--sp-2);
}

.kb-brand {
    display: flex;
    align-items: center;
    gap: var(--sp-1);
    min-height: 44px;
    color: var(--kb-text);
}

.kb-brand:hover {
    text-decoration: none;
}

.kb-brand-logo {
    height: 30px;
    width: auto;
    display: block;
}

/* logo 自带品牌名时，隐藏文字站名避免重复 */
.kb-brand-logo ~ .kb-brand-name {
    display: none;
}

.kb-brand-name {
    font-family: var(--kb-font-heading);
    font-size: 18px;
    font-weight: 600;
    letter-spacing: .02em;
}

.kb-search {
    position: relative;
    display: flex;
    align-items: center;
    gap: var(--sp-1);
    min-height: 36px;
    padding: 0 var(--sp-2);
    width: 260px;
    background: var(--kb-bg-soft);
    border: 1px solid var(--kb-border);
    border-radius: var(--kb-radius);
    color: var(--kb-text-3);
    transition: border-color 0.15s ease, background 0.15s ease;
}

.kb-search:focus-within {
    border-color: var(--kb-accent);
    background: var(--kb-bg-card);
}

.kb-search input {
    flex: 1;
    min-width: 0;
    border: none;
    outline: none;
    background: transparent;
    font-size: var(--fs-small);
    color: var(--kb-text);
}

/* 🔴 搜索框的焦点样式**只由外层 .kb-search 表达**（边框变色 + 阴影）。
   输入框自己再画一圈 outline 就成了「双框」（2026-10-17 复发；上次是 a431f6a 的追加样式冲突）。
   这里用 (0,2,1) 特异性压住文件后面的全局 `input:focus-visible`(0,1,1) ——
   不依赖文件顺序，以后再往末尾追加全局焦点样式也不会被顶掉。 */
.kb-search input:focus,
.kb-search input:focus-visible {
    outline: none;
}

.kb-search input::placeholder {
    color: var(--kb-text-3);
}

/* =====================================================================
   三栏骨架：侧栏 | 正文 | TOC
   ===================================================================== */
/* 栏目页：h1 隐藏后收紧面包屑下间距（24→8）。
   只收这一处：首条标题的文字中心与左侧栏目标题文字中心精确对齐
   （面包屑 8 + 首项 padding 24 → 标题中心 ≈ 侧栏当前项中心，2026-10-23 精算）。
   首项 padding-top 若也收紧会「过头」（用户实测）。 */
.kb-category-page .kb-breadcrumbs {
    margin-bottom: var(--sp-1);
}

/* 首条标题上移 8px（24→16）：上一轮补丁漏了这条导致上移未生效 */
.kb-category-page .kb-article-item:first-child {
    padding-top: var(--sp-2);
}

/* 视觉隐藏但保留给搜索引擎/屏幕阅读器（如栏目页与面包屑重复的 h1） */
.kb-sr-only {
    position: absolute;
    width: 1px;
    height: 1px;
    padding: 0;
    margin: -1px;
    overflow: hidden;
    clip: rect(0, 0, 0, 0);
    white-space: nowrap;
    border: 0;
}

/* 页面水平边距：header 与内容容器共用，保证 logo 与侧栏左对齐 */
:root {
    --kb-page-x: var(--sp-5);
}

.kb-container {
    max-width: var(--kb-container);
    margin: 0 auto;
    /* 水平边距与 .kb-header-inner 同源（--kb-page-x），断点取值见文末媒体查询 */
    padding: 0 var(--kb-page-x);
}

.kb-shell {
    display: grid;
    grid-template-columns: var(--kb-sidebar-w) minmax(0, 1fr);
    gap: var(--sp-5);
    align-items: start;
    /* 🔴 align-content 必须显式 start：默认 stretch 会把 min-height 的剩余空间
       分进行轨道——手机单列时第二行（正文）被推到距导航 120px 开外
       （2026-10-23 手机栏目页大空白实锤） */
    align-content: start;
    padding-top: var(--sp-4);
    padding-bottom: var(--sp-6);
    min-height: calc(100vh - var(--kb-header-h) - 120px);
}

.kb-shell--toc {
    grid-template-columns: var(--kb-sidebar-w) minmax(0, 1fr) var(--kb-toc-w);
}

/* =====================================================================
   左侧栏
   ===================================================================== */
.kb-sidebar {
    position: sticky;
    top: calc(var(--kb-header-h) + var(--sp-3));
    max-height: calc(100vh - var(--kb-header-h) - var(--sp-4));
    overflow-y: auto;
    font-size: var(--fs-small);
}

.kb-nav-group {
    margin-bottom: var(--sp-3);
}

.kb-nav-title {
    display: block;
    margin-bottom: var(--sp-1);
    font-family: var(--kb-font-heading);
    font-size: 15px;
    font-weight: 600;
    color: var(--kb-text);
}

/* 侧栏两级目录（2026-10-20）：子栏目缩进；无直属文章的父级渲染为纯分组标题（无死链）*/
.kb-nav-depth-1 {
    padding-left: 12px;
}

.kb-nav-title--group {
    color: var(--kb-text-3);
    cursor: default;
}

/* 侧栏当前栏目标题高亮（分类页 / 文章所属栏目）——2026-10-20 补：
   原来只有文章项高亮，栏目标题从不高亮，用户看不出「我在哪个栏目」*/
.kb-nav-title--active {
    color: var(--kb-accent-deep);
}

a.kb-nav-title:hover {
    color: var(--kb-accent-deep);
    text-decoration: none;
}

.kb-nav-item {
    display: block;
    padding: 6px 10px;
    min-height: 44px;
    line-height: 32px;
    border-radius: var(--kb-radius-sm);
    border-left: 2px solid transparent;
    color: var(--kb-text-2);
    transition: color var(--dur-1) var(--ease), background var(--dur-1) var(--ease),
        border-left-color var(--dur-1) var(--ease), transform var(--dur-2) var(--ease);
}

.kb-nav-item:hover {
    color: var(--kb-text);
    background: var(--kb-bg-soft);
    transform: translateX(2px);
    text-decoration: none;
}

.kb-nav-item--active {
    color: var(--kb-accent-deep);
    border-left-color: var(--kb-accent);
    background: var(--kb-bg-soft);
}

/* =====================================================================
   右侧 TOC
   ===================================================================== */
.kb-toc {
    position: sticky;
    top: calc(var(--kb-header-h) + var(--sp-3));
    max-height: calc(100vh - var(--kb-header-h) - var(--sp-4));
    overflow-y: auto;
    font-size: var(--fs-small);
}

.kb-toc-title {
    margin-bottom: var(--sp-1);
    font-size: var(--fs-tiny);
    font-weight: 600;
    letter-spacing: .08em;
    color: var(--kb-text-3);
}

.kb-toc ul {
    margin: 0;
    padding: 0;
    list-style: none;
    border-left: 1px solid var(--kb-border);
}

.kb-toc li a {
    display: block;
    padding: 4px 0 4px var(--sp-2);
    min-height: 32px;
    color: var(--kb-text-2);
    border-left: 2px solid transparent;
    margin-left: -1.5px;
    transition: color .15s ease, border-color .15s ease;
}

.kb-toc li a:hover {
    color: var(--kb-accent-deep);
    text-decoration: none;
    border-left-color: var(--kb-accent);
}

/* 选中常亮（scroll-spy，见 toc-scrollspy.js）：与 hover 同亮度，滚到哪亮到哪 */
.kb-toc li a.kb-toc-link--active {
    color: var(--kb-accent-deep);
    border-left-color: var(--kb-accent);
    text-decoration: none;
}

.kb-toc .kb-toc-l3 a {
    padding-left: var(--sp-3);
    font-size: 13px;
}

/* =====================================================================
   文章页
   ===================================================================== */
.kb-breadcrumbs {
    margin-bottom: var(--sp-3);
    font-size: var(--fs-small);
    color: var(--kb-text-2);
    overflow-wrap: anywhere;
}

.kb-breadcrumbs .kb-sep {
    margin: 0 var(--sp-1);
    color: var(--kb-text-3);
}

.kb-article-header {
    margin-bottom: var(--sp-4);
}

.kb-article-header h1 {
    margin: 0 0 var(--sp-1);
    font-family: var(--kb-font-heading);
    font-size: clamp(24px, 4.2vw, 34px);
    font-weight: 600;
    line-height: 1.28;
    letter-spacing: .005em;
    overflow-wrap: anywhere;
    text-wrap: balance;
}

.kb-article-header time {
    font-size: var(--fs-small);
    color: var(--kb-text-3);
}

/* 🔴 长串断行（2026-10-23 手机端横向溢出修复）：正文里的行内 code（schema.org
   属性名、ld+json、URL）是不含空格的长 token，默认不可断 → 把整个内容区撑宽，
   面包屑/标题/正文右侧全被裁。overflow-wrap: anywhere 允许在任意点断行救急；
   中文文本不受影响（中文本就逐字断行）。 */
.kb-article-body {
    overflow-wrap: anywhere;
    max-width: var(--kb-read-w);
    font-size: var(--fs-body);
    line-height: 1.78;
    color: var(--kb-text);
}

.kb-article-body h1 {
    font-family: var(--kb-font-heading);
    font-size: var(--fs-h1);
    line-height: 1.35;
}

.kb-article-body h2 {
    margin: var(--sp-5) 0 var(--sp-2);
    padding-bottom: var(--sp-1);
    border-bottom: 1px solid var(--kb-border);
    font-family: var(--kb-font-heading);
    font-size: var(--fs-h2);
    font-weight: 600;
    line-height: 1.4;
}

.kb-article-body h3 {
    margin: var(--sp-4) 0 var(--sp-2);
    font-family: var(--kb-font-heading);
    font-size: var(--fs-h3);
    font-weight: 600;
    line-height: 1.4;
}

.kb-article-body p {
    margin: 0 0 var(--sp-2);
}

.kb-article-body ul,
.kb-article-body ol {
    margin: 0 0 var(--sp-2);
    padding-left: var(--sp-3);
}

.kb-article-body li {
    margin-bottom: 6px;
}

.kb-article-body blockquote {
    margin: var(--sp-3) 0;
    padding: var(--sp-1) var(--sp-3);
    border-left: 3px solid var(--kb-accent);
    background: var(--kb-bg-soft);
    border-radius: 0 var(--kb-radius-sm) var(--kb-radius-sm) 0;
    color: var(--kb-text-2);
}

.kb-article-body pre {
    margin: var(--sp-3) 0;
    padding: var(--sp-2) var(--sp-3);
    background: var(--kb-code-bg);
    color: var(--kb-code-text);
    border: 1px solid rgba(255, 255, 255, .07);
    overflow-x: auto;
    border-radius: var(--kb-radius);
    box-shadow: var(--kb-shadow-lg);
    overflow-x: auto;
    font-family: var(--kb-font-code);
    font-size: 14px;
    line-height: 1.7;
}

.kb-article-body code {
    padding: 2px 6px;
    background: var(--kb-bg-soft);
    border-radius: var(--kb-radius-sm);
    font-family: var(--kb-font-code);
    font-size: 14px;
    overflow-wrap: anywhere;
}

/* 代码高亮 token（由 core/docs/support/SyntaxHighlighter.php 产出）
   配色按深色代码块底 #23231F 调（One Dark 系），不随明暗主题变 */
.kb-article-body .tok-com { color: #7F848E; font-style: italic; }
.kb-article-body .tok-str { color: #98C379; }
.kb-article-body .tok-num { color: #D19A66; }
.kb-article-body .tok-kw  { color: #C678DD; }
.kb-article-body .tok-var { color: #E06C75; }
.kb-article-body .tok-fn  { color: #61AFEF; }
.kb-article-body .tok-attr{ color: #E5C07B; }

.kb-article-body pre code {
    padding: 0;
    background: transparent;
    color: inherit;
}

.kb-article-body table {
    width: 100%;
    margin: var(--sp-3) 0;
    border-collapse: collapse;
    font-size: var(--fs-small);
}

.kb-article-body th,
.kb-article-body td {
    padding: var(--sp-1) 14px;
    border: 1px solid var(--kb-border);
    text-align: left;
}

.kb-article-body th {
    background: var(--kb-bg-soft);
    font-weight: 600;
}

.kb-article-body img {
    max-width: 100%;
    height: auto;
    margin: var(--sp-2) 0;
    border-radius: var(--kb-radius);
}

.kb-article-body hr {
    margin: var(--sp-4) 0;
    border: none;
    border-top: 1px solid var(--kb-border);
}

.kb-article-nav {
    display: flex;
    justify-content: space-between;
    gap: var(--sp-2);
    margin-top: var(--sp-5);
    padding-top: var(--sp-3);
    border-top: 1px solid var(--kb-border);
}

.kb-article-nav a {
    display: inline-flex;
    align-items: center;
    min-height: 44px;
    max-width: 48%;
    padding: var(--sp-2) var(--sp-3);
    background: var(--kb-bg-card);
    border: 1px solid var(--kb-border);
    border-radius: var(--kb-radius);
    color: var(--kb-text-2);
    transition: color var(--dur-1) var(--ease), border-color var(--dur-1) var(--ease),
        box-shadow var(--dur-2) var(--ease), transform var(--dur-2) var(--ease);
}

.kb-article-nav a:hover {
    color: var(--kb-accent-deep);
    border-color: var(--kb-accent);
    box-shadow: var(--kb-shadow);
    transform: translateY(-2px);
    text-decoration: none;
}

/* 相关阅读（2026-10-20）：文章尾部推荐文章列表，手动 related 优先、自动同栏目兜底 */
.kb-related {
    margin-top: var(--sp-5);
    padding-top: var(--sp-3);
    border-top: 1px solid var(--kb-border);
}

.kb-related h2 {
    margin: 0 0 var(--sp-2);
    font-size: var(--fs-h3);
    color: var(--kb-text);
}

.kb-related ul {
    margin: 0;
    padding: 0;
    list-style: none;
}

.kb-related li + li {
    margin-top: var(--sp-1);
}

.kb-related a {
    display: inline-flex;
    align-items: center;
    min-height: 44px;
    color: var(--kb-text-2);
    transition: color var(--dur-1) var(--ease);
}

.kb-related a:hover {
    color: var(--kb-accent-deep);
    text-decoration: none;
}

.kb-article-nav .kb-next {
    margin-left: auto;
    text-align: right;
}

/* =====================================================================
   首页
   ===================================================================== */
.kb-hero {
    /* 居中（2026-10-23 用户拍板）：站点标题 + 描述两行以中间内容区域水平居中；
       下方栏目卡片、最近更新仍保持左对齐 */
    padding: var(--sp-6) 0 var(--sp-5);
    text-align: center;
}

.kb-hero h1 {
    margin: 0 0 var(--sp-2);
    padding: 0 var(--sp-1);
    font-family: var(--kb-font-heading);
    /* clamp 随视口缩放：PC 44 / 手机约 25，任何宽度都不溢出（比固定断点更稳） */
    font-size: clamp(22px, 6.4vw, 44px);
    font-weight: 600;
    line-height: 1.25;
    letter-spacing: .01em;
    overflow-wrap: anywhere;
    text-wrap: balance;
}

.kb-hero p {
    max-width: 560px;
    margin: 0 auto;
    color: var(--kb-text-2);
    text-wrap: balance;
}

.kb-category-grid {
    display: grid;
    /* 280→230（2026-10-23）：内容右缘对齐搜索框左缘后内容区收窄 24px，
       280 时窗口稍窄就掉到 2 列；230 保住常用窗口宽度的 3 列 */
    grid-template-columns: repeat(auto-fit, minmax(230px, 1fr));
    gap: var(--sp-3);
    margin: var(--sp-5) 0;
}

.kb-category-card {
    padding: var(--sp-3);
    background: var(--kb-bg-card);
    border: 1px solid var(--kb-border);
    border-radius: var(--kb-radius);
    box-shadow: var(--kb-shadow-sm);
    transition: border-color var(--dur-1) var(--ease), box-shadow var(--dur-2) var(--ease),
        transform var(--dur-2) var(--ease);
}

.kb-category-card:hover {
    border-color: var(--kb-accent);
    box-shadow: var(--kb-shadow-lg);
    transform: translateY(-3px);
}

.kb-category-card h2 {
    margin: 0 0 var(--sp-1);
    font-family: var(--kb-font-heading);
    font-size: 18px;
    font-weight: 600;
}

.kb-category-card h2 a {
    color: var(--kb-text);
}

.kb-category-card p {
    margin: 0;
    font-size: var(--fs-small);
    color: var(--kb-text-2);
}

.kb-latest {
    margin-top: var(--sp-5);
}

.kb-latest h2 {
    margin-bottom: var(--sp-2);
    font-family: var(--kb-font-heading);
    font-size: 22px;
    font-weight: 600;
}

.kb-latest ul {
    margin: 0;
    padding: 0;
    list-style: none;
}

.kb-latest li {
    display: flex;
    justify-content: space-between;
    align-items: baseline;
    gap: var(--sp-2);
    min-height: 44px;
    padding: var(--sp-1) 0;
    border-bottom: 1px solid var(--kb-border);
}

.kb-latest li a {
    color: var(--kb-text);
}

.kb-latest li a:hover {
    color: var(--kb-accent-deep);
}

.kb-latest .kb-date {
    flex-shrink: 0;
    font-size: var(--fs-small);
    color: var(--kb-text-3);
}

/* =====================================================================
   栏目页
   ===================================================================== */
.kb-category-page h1 {
    margin-bottom: var(--sp-3);
    font-family: var(--kb-font-heading);
    font-size: 28px;
    font-weight: 600;
}

.kb-category-page h1 {
    margin-bottom: var(--sp-4);
}

.kb-article-list {
    margin: 0;
    padding: 0;
    list-style: none;
}

.kb-article-item {
    padding: var(--sp-3) 0;
    border-bottom: 1px solid var(--kb-border);
}

.kb-article-item > a {
    font-size: 18px;
    font-weight: 600;
    color: var(--kb-text);
}

.kb-article-item > a:hover {
    color: var(--kb-accent-deep);
    text-decoration: none;
}

.kb-article-item .kb-desc {
    margin: 6px 0;
    font-size: var(--fs-small);
    color: var(--kb-text-2);
}

.kb-article-item .kb-date {
    font-size: var(--fs-tiny);
    color: var(--kb-text-3);
}

/* =====================================================================
   页脚
   ===================================================================== */
.kb-footer {
    padding: var(--sp-3) 0;
    border-top: 1px solid var(--kb-border);
    text-align: center;
    font-size: var(--fs-small);
    color: var(--kb-text-3);
}

.kb-footer p {
    margin: 4px 0;
}

/* =====================================================================
   响应式（断点 768 / 1024）
   ===================================================================== */
@media (max-width: 1023px) {


    :root {
        --kb-page-x: var(--sp-4);
    }

    .kb-shell,
    .kb-shell--toc {
        grid-template-columns: var(--kb-sidebar-w) minmax(0, 1fr);
    }

    .kb-toc {
        display: none;
    }
}

@media (max-width: 767px) {
    :root {
        --kb-page-x: var(--sp-3);
    }

    /* 兜底：任何漏网的超宽元素直接裁掉，保证页面永不横向滚动
       （clip 不产生滚动容器；正常内容不受影响，只是「绝不出血」） */
    body {
        overflow-x: clip;
    }

    .kb-shell,
    .kb-shell--toc {
        /* 🔴 必须 minmax(0,1fr) 不能写 1fr：1fr 的最小值是 min-content，
           代码块（white-space:pre）的最长行会把列撑到几百 px → 整页横向溢出，
           pre 自己的 overflow-x:auto 也救不了（列已先被撑大）。
           2026-10-23 手机详情页横向溢出实锤。 */
        grid-template-columns: minmax(0, 1fr);
        gap: var(--sp-3);
        padding-top: var(--sp-3);
    }

    /* 手机端：栏目导航默认收起成一行（details/summary，无 JS）——
       详情页正文优先，不被整块导航占满首屏（2026-10-23 手机端适配） */
    .kb-sidebar {
        position: static;
        max-height: none;
        overflow-y: visible;
        padding-bottom: 0;
        border-bottom: 1px solid var(--kb-border);
    }

    .kb-nav-collapse > summary {
        display: flex;
        align-items: center;
        justify-content: space-between;
        min-height: 44px;
        padding: var(--sp-2) 0;
        font-size: var(--fs-small);
        font-weight: 600;
        color: var(--kb-text);
        cursor: pointer;
        list-style: none;
    }

    .kb-nav-collapse > summary::-webkit-details-marker {
        display: none;
    }

    /* 展开指示：右下角小箭头，open 时翻转 */
    .kb-nav-collapse > summary::after {
        content: "";
        flex: none;
        width: 8px;
        height: 8px;
        margin-right: 4px;
        border-right: 1.5px solid var(--kb-text-2);
        border-bottom: 1.5px solid var(--kb-text-2);
        transform: rotate(45deg);
        transition: transform var(--dur-1) var(--ease);
    }

    .kb-nav-collapse[open] > summary::after {
        transform: rotate(225deg);
    }

    /* 展开后导航内部滚动（60vh 上限 + 内部滚动，不用 vh 精确值兜老环境） */
    .kb-nav-collapse[open] {
        max-height: 60vh;
        overflow-y: auto;
        padding-bottom: var(--sp-2);
    }

    /* 触控目标：手机端导航行加高到 44px */
    .kb-sidebar a {
        display: flex;
        align-items: center;
        min-height: 44px;
    }

    .kb-search {
        width: auto;
        flex: 1;
    }

    .kb-article-header h1 {
        font-size: 28px;
    }

    .kb-article-body {
        max-width: 100%;
    }

    /* 表格在手机上横向滚动，不撑破页面 */
    .kb-article-body table {
        display: block;
        overflow-x: auto;
        white-space: nowrap;
    }

    .kb-article-nav {
        flex-direction: column;
    }

    .kb-article-nav a {
        max-width: 100%;
    }

    .kb-article-nav .kb-next {
        margin-left: 0;
        text-align: left;
    }
}


/* ── 站内搜索（下拉结果）──────────────────────────────────────── */

.kb-search-results {
    position: absolute;
    top: calc(100% + 6px);
    left: auto;
    right: 0;
    width: 360px;
    max-width: calc(100vw - 48px);
    z-index: 40;
    max-height: 60vh;
    overflow: auto;
    padding: 6px;
    background: var(--kb-bg-card);
    border: 1px solid var(--kb-border);
    border-radius: 10px;
    box-shadow: 0 12px 32px rgba(0, 0, 0, 0.12);
}

.kb-search-item {
    display: block;
    padding: 8px 10px;
    border-radius: 8px;
    text-decoration: none;
    color: inherit;
}

.kb-search-item:hover,
.kb-search-item.is-active {
    background: var(--kb-bg-soft);
}

.kb-search-item-title {
    display: block;
    font-size: 14px;
    font-weight: 600;
    color: var(--kb-accent);
}

.kb-search-item-meta,
.kb-search-item-desc {
    display: block;
    margin-top: 2px;
    font-size: 12px;
    color: var(--kb-text-3);
}

.kb-search-item-desc {
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
}

.kb-search-empty {
    padding: 12px 10px;
    font-size: 13px;
    color: var(--kb-text-3);
}


/* ── 侧栏收敛：篇数徽标 + 查看全部 ─────────────────────────────── */
.kb-nav-title {
    display: flex;
    align-items: center;
    justify-content: space-between;
}

.kb-nav-count {
    font-size: 12px;
    font-weight: 400;
    color: var(--kb-text-3);
}

.kb-nav-more {
    display: block;
    padding: 6px 10px;
    font-size: 13px;
    color: var(--kb-text-3);
    text-decoration: none;
    border-radius: 6px;
}

.kb-nav-more:hover {
    color: var(--kb-accent);
    background: var(--kb-bg-soft);
}

/* =====================================================================
   精修 v2（2026-10-17）：进站动效 / 正文链接 / 焦点环 / 减弱动效
   原则：只动 opacity / transform，不改布局；尊重系统「减弱动态效果」。
   ===================================================================== */

/* 首屏主体轻微上浮淡入（不做整页动画，避免闪烁） */
@keyframes kb-rise {
    from { opacity: 0; transform: translateY(8px); }
    to   { opacity: 1; transform: none; }
}

.kb-main {
    animation: kb-rise var(--dur-2) var(--ease) both;
}

/* 首页 / 栏目页（无右侧目录）：内容区右边界对齐搜索框左边缘。
   只在 ≥1024 生效 —— 1023 以下搜索框占满整行，"对齐搜索框"无意义且会压窄内容。
   🔴 用 min-width 包裹而不是「主规则 + max-width 归零」：后者依赖文件顺序，
   主规则若排在媒体查询之后会反向覆盖（2026-10-20 踩过）。*/
/* 桌面：折叠头不显示（details 默认 open，桌面始终原生展开；
   手机由 nav-collapse.js 按视口收起） */
@media (min-width: 768px) {
    .kb-nav-collapse > summary {
        display: none;
    }
}

@media (min-width: 1024px) {
    .kb-shell:not(.kb-shell--toc) .kb-main {
        margin-right: var(--kb-main-right-inset);
    }
}

/* 首页 / 栏目页（无右侧目录）：内容区右边界对齐搜索框左边缘 */

/* 首页 / 栏目页（无右侧目录）：内容区右边界对齐搜索框左边缘 */

/* 正文链接：静态保留淡下划线（可辨识），悬停加深 */
.kb-article-body a {
    text-decoration: underline;
    text-decoration-thickness: 1px;
    text-underline-offset: 3px;
    text-decoration-color: rgba(140, 38, 53, .35);
    transition: text-decoration-color var(--dur-2) var(--ease), color var(--dur-1) var(--ease);
}

.kb-article-body a:hover {
    text-decoration-color: currentColor;
}

/* 键盘焦点环：Tab 导航可见，鼠标点击不出现 */
a:focus-visible,
button:focus-visible,
input:focus-visible,
select:focus-visible,
textarea:focus-visible {
    outline: 2px solid var(--kb-accent);
    outline-offset: 2px;
    border-radius: var(--kb-radius-sm);
}

/* 目录高亮：文字、色条、缩进一起过渡，滚到哪平滑亮到哪 */
.kb-toc li a {
    transition: color var(--dur-1) var(--ease), border-left-color var(--dur-1) var(--ease),
        padding-left var(--dur-2) var(--ease);
}

.kb-toc li a.kb-toc-link--active {
    padding-left: calc(var(--sp-2) + 2px);
}

/* 搜索框聚焦：轻微浮起，和头部毛玻璃呼应 */
.kb-search:focus-within {
    box-shadow: var(--kb-shadow);
}

/* 尊重系统「减弱动态效果」 */
@media (prefers-reduced-motion: reduce) {
    *,
    *::before,
    *::after {
        animation-duration: .001ms !important;
        animation-iteration-count: 1 !important;
        transition-duration: .001ms !important;
        scroll-behavior: auto !important;
    }
}
