/* =====================================================================
   知识库标准版 · 默认皮肤 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: 280px;
    --kb-header-h: 56px;
    --kb-container: 1320px;      /* 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;
    padding: 0 var(--sp-3);
    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 input::placeholder {
    color: var(--kb-text-3);
}

/* =====================================================================
   三栏骨架：侧栏 | 正文 | TOC
   ===================================================================== */
.kb-container {
    max-width: var(--kb-container);
    margin: 0 auto;
    padding: 0 var(--sp-3);
}

.kb-shell {
    display: grid;
    grid-template-columns: var(--kb-sidebar-w) minmax(0, 1fr);
    gap: var(--sp-5);
    align-items: 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);
}

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);
}

.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);
}

.kb-article-body {
    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);
    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;
}

.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;
}

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

/* =====================================================================
   首页
   ===================================================================== */
.kb-hero {
    padding: var(--sp-6) 0 var(--sp-4);
    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);
}

.kb-category-grid {
    display: grid;
    grid-template-columns: repeat(auto-fill, minmax(280px, 1fr));
    gap: var(--sp-2);
    margin: var(--sp-4) 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-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) {
    .kb-shell,
    .kb-shell--toc {
        grid-template-columns: var(--kb-sidebar-w) minmax(0, 1fr);
    }

    .kb-toc {
        display: none;
    }
}

@media (max-width: 767px) {
    .kb-shell,
    .kb-shell--toc {
        grid-template-columns: 1fr;
        gap: var(--sp-3);
        padding-top: var(--sp-3);
    }

    /* 手机端：目录折叠成固定高的滚动区（不用 vh：部分环境 vh 计算不稳，会把目录裁掉） */
    .kb-sidebar {
        position: static;
        max-height: 320px;
        overflow-y: auto;
        padding-bottom: var(--sp-2);
        border-bottom: 1px solid var(--kb-border);
    }

    .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: 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;
}

/* 正文链接：静态保留淡下划线（可辨识），悬停加深 */
.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;
    }
}
