/*
 * Cardinal 主题 — Aurora/Lazzaro 风格，暗色优先，高自由度可配置
 * 所有 select 设置经 <body data-*> 属性驱动 CSS 变量，主题无需 JS 切换
 */

:root {
  --color-bg: #0e0e10;
  --color-bg-secondary: #18181b;
  --color-bg-tertiary: #232327;
  --color-text: #f4f4f5;
  --color-text-secondary: #a1a1aa;
  --color-text-tertiary: #71717a;
  --color-border: #27272a;
  --color-border-hover: #3f3f46;
  --color-accent: #cf829e;
  /* 主题色派生体系（借鉴 Argon）：仅 --color-accent 为输入，其余全部 color-mix 运行时派生，换色全站自动跟随 */
  --color-accent-hover: color-mix(in srgb, var(--color-accent) 82%, #fff);
  --color-accent-active: color-mix(in srgb, var(--color-accent) 78%, #000);
  --color-accent-subtle: color-mix(in srgb, var(--color-accent) 12%, transparent);
  --color-accent-border: color-mix(in srgb, var(--color-accent) 35%, transparent);
  --color-accent-text: color-mix(in srgb, var(--color-accent) 70%, var(--color-text));
  --color-accent-gradient: linear-gradient(135deg,
    color-mix(in srgb, var(--color-accent) 72%, #fff) 0%,
    var(--color-accent) 55%,
    color-mix(in srgb, var(--color-accent) 72%, #000) 100%);
  --color-success: #22c55e;
  --color-warning: #f59e0b;
  --color-error: #ef4444;

  --cf-font: 'Inter', ui-sans-serif, system-ui, -apple-system, 'Segoe UI', Roboto, 'PingFang SC', 'Microsoft YaHei', sans-serif;
  --cf-heading-font: 'Space Grotesk', 'Inter', ui-sans-serif, system-ui, sans-serif;
  --cf-radius-sm: 0.25rem;
  --cf-radius: 0.5rem;
  --cf-radius-lg: 0.75rem;
  --cf-content-width: 48rem;
  --cf-sidebar-width: 16rem;
  --cf-gap: 2rem;
  --cf-shadow: none;
  --cf-header-bg: color-mix(in srgb, var(--color-bg) 85%, transparent);
  --cf-card-shadow: none;

  --header-height: 3.75rem;
  --content-padding: 1.25rem;
}

[data-theme="light"] {
  --color-bg: #fafafa;
  --color-bg-secondary: #f4f4f5;
  --color-bg-tertiary: #e4e4e7;
  --color-text: #18181b;
  --color-text-secondary: #52525b;
  --color-text-tertiary: #a1a1aa;
  --color-border: #e4e4e7;
  --color-border-hover: #d4d4d8;
  --color-accent-text: color-mix(in srgb, var(--color-accent) 68%, #000);
}

/* === 气氛色沉浸（Material You 风格）：背景/边框染上主题色调，由后台开关控制 === */
[data-accent-immersion="true"] {
  --color-bg: color-mix(in srgb, var(--color-accent) 6%, #0e0e10);
  --color-bg-secondary: color-mix(in srgb, var(--color-accent) 10%, #18181b);
  --color-bg-tertiary: color-mix(in srgb, var(--color-accent) 15%, #232327);
  --color-border: color-mix(in srgb, var(--color-accent) 16%, #27272a);
  --color-border-hover: color-mix(in srgb, var(--color-accent) 32%, #3f3f46);
  /* body 背景走 Bootstrap 桥接变量（定义在 :root），需同步重定义才能跟随沉浸 */
  --bs-body-bg: var(--color-bg);
}
[data-theme="light"] [data-accent-immersion="true"] {
  --color-bg: color-mix(in srgb, var(--color-accent) 5%, #fafafa);
  --color-bg-secondary: color-mix(in srgb, var(--color-accent) 9%, #f4f4f5);
  --color-bg-tertiary: color-mix(in srgb, var(--color-accent) 13%, #e4e4e7);
  --color-border: color-mix(in srgb, var(--color-accent) 14%, #e4e4e7);
  --color-border-hover: color-mix(in srgb, var(--color-accent) 30%, #d4d4d8);
  --bs-body-bg: var(--color-bg);
}

/* === 主题色全量场景：选中/滚动条 === */
::selection { background: color-mix(in srgb, var(--color-accent) 28%, transparent); }
html { scrollbar-color: var(--color-accent-border) transparent; }
::-webkit-scrollbar { width: 10px; height: 10px; }
::-webkit-scrollbar-track { background: transparent; }
::-webkit-scrollbar-thumb { background: var(--color-accent-border); border-radius: 9999px; border: 2px solid transparent; background-clip: padding-box; }
::-webkit-scrollbar-thumb:hover { background: color-mix(in srgb, var(--color-accent) 60%, transparent); background-clip: padding-box; }

/* === 字体 === */
[data-font="monospace"] { --cf-font: 'JetBrains Mono', ui-monospace, SFMono-Regular, Menlo, Consolas, monospace; }
[data-font="sans"] { --cf-font: 'Inter', ui-sans-serif, system-ui, -apple-system, 'Segoe UI', Roboto, 'PingFang SC', 'Microsoft YaHei', sans-serif; }
[data-font="serif"] { --cf-font: 'Lora', Georgia, 'Noto Serif SC', 'Songti SC', serif; }
[data-heading="same"] { --cf-heading-font: var(--cf-font); }
[data-heading="display"] { --cf-heading-font: 'Space Grotesk', 'Inter', ui-sans-serif, system-ui, sans-serif; }
[data-heading="monospace"] { --cf-heading-font: 'JetBrains Mono', ui-monospace, monospace; }
[data-heading="sans"] { --cf-heading-font: 'Inter', ui-sans-serif, system-ui, sans-serif; }
[data-heading="serif"] { --cf-heading-font: 'Lora', Georgia, serif; }

/* === 圆角 === */
[data-radius="none"] { --cf-radius-sm: 0; --cf-radius: 0; --cf-radius-lg: 0; }
[data-radius="small"] { --cf-radius-sm: 0.25rem; --cf-radius: 0.5rem; --cf-radius-lg: 0.75rem; }
[data-radius="medium"] { --cf-radius-sm: 0.5rem; --cf-radius: 0.75rem; --cf-radius-lg: 1rem; }
[data-radius="large"] { --cf-radius-sm: 0.75rem; --cf-radius: 1rem; --cf-radius-lg: 1.5rem; }

/* === 阴影 === */
[data-shadow="none"] { --cf-shadow: none; --cf-card-shadow: none; }
[data-shadow="light"] { --cf-shadow: 0 2px 8px rgba(0,0,0,0.08); --cf-card-shadow: 0 1px 3px rgba(0,0,0,0.06); }
[data-shadow="deep"] { --cf-shadow: 0 8px 24px rgba(0,0,0,0.18); --cf-card-shadow: 0 4px 12px rgba(0,0,0,0.12); }
[data-theme="dark"] [data-shadow="light"] { --cf-shadow: 0 2px 8px rgba(0,0,0,0.4); --cf-card-shadow: 0 1px 3px rgba(0,0,0,0.3); }
[data-theme="dark"] [data-shadow="deep"] { --cf-shadow: 0 8px 24px rgba(0,0,0,0.5); --cf-card-shadow: 0 4px 12px rgba(0,0,0,0.4); }

/* === 内容宽度 === */
[data-width="narrow"] { --cf-content-width: 48rem; }
[data-width="medium"] { --cf-content-width: 60rem; }
[data-width="wide"] { --cf-content-width: 72rem; }

/* === 顶栏毛玻璃 === */
[data-blur="true"] { --cf-header-bg: color-mix(in srgb, var(--color-bg) 80%, transparent); }
[data-blur="false"] { --cf-header-bg: var(--color-bg); }

/* === 基础 === */
* { box-sizing: border-box; }
.cf-body { margin: 0; background: var(--color-bg); color: var(--color-text); font-family: var(--cf-font); font-size: 16px; line-height: 1.75; -webkit-font-smoothing: antialiased; }
a { color: inherit; }
img { max-width: 100%; height: auto; display: block; }
h1,h2,h3,h4 { font-family: var(--cf-heading-font); }

/* === 顶栏 === */
.cf-header { position: sticky; top: 0; z-index: 40; background: var(--cf-header-bg); border-bottom: 1px solid var(--color-border); transition: transform .3s; }
[data-blur="true"] .cf-header { backdrop-filter: saturate(180%) blur(10px); }
[data-header="collapse-on-scroll"] .cf-header.cf-collapsed { transform: translateY(-100%); }
[data-header="static"] .cf-header { position: relative; }
.cf-header-inner { max-width: calc(var(--cf-content-width) + var(--cf-sidebar-width) + var(--cf-gap)); margin: 0 auto; height: var(--header-height); padding: 0 var(--content-padding); display: flex; align-items: center; justify-content: space-between; }
.cf-brand { font-weight: 700; font-size: 1.05rem; text-decoration: none; color: var(--color-text); font-family: var(--cf-heading-font); }
.cf-brand:hover { color: var(--color-accent); }
.cf-nav { display: flex; align-items: center; gap: 1.5rem; }
.cf-nav a { font-size: 0.875rem; color: var(--color-text-secondary); text-decoration: none; transition: color .15s; }
.cf-nav a:hover { color: var(--color-text); }
.cf-nav button { background: none; border: none; color: var(--color-text-secondary); cursor: pointer; font-size: 0.95rem; padding: 0.25rem; border-radius: var(--cf-radius-sm); }
.cf-nav button:hover { color: var(--color-text); }

/* === 主布局（侧栏） === */
.cf-layout { max-width: calc(var(--cf-content-width) + var(--cf-sidebar-width) + var(--cf-gap)); margin: 0 auto; padding: 2rem var(--content-padding) 4rem; display: flex; gap: var(--cf-gap); align-items: flex-start; }
[data-sidebar="none"] .cf-layout { display: block; max-width: var(--cf-content-width); }
[data-sidebar="left"] .cf-layout { flex-direction: row-reverse; }
.cf-main { flex: 1; min-width: 0; max-width: var(--cf-content-width); margin: 0 auto; }
[data-sidebar="none"] .cf-main { max-width: none; }
.cf-sidebar { width: var(--cf-sidebar-width); flex-shrink: 0; }
[data-sticky="sticky"] .cf-sidebar:not(.cf-sidebar-toc) { position: sticky; top: calc(var(--header-height) + 1.5rem); max-height: calc(100vh - var(--header-height) - 3rem); overflow-y: auto; }
[data-sticky="fixed"] .cf-sidebar:not(.cf-sidebar-toc) { position: fixed; top: calc(var(--header-height) + 1.5rem); max-height: calc(100vh - var(--header-height) - 3rem); overflow-y: auto; }
[data-sidebar="left"] [data-sticky="fixed"] .cf-sidebar:not(.cf-sidebar-toc), [data-sidebar="right"] [data-sticky="fixed"] .cf-sidebar:not(.cf-sidebar-toc) { width: var(--cf-sidebar-width); }

/* === 侧栏小部件 === */
.cf-widget { background: var(--color-bg-secondary); border: 1px solid var(--color-border); border-radius: var(--cf-radius); padding: 1rem 1.25rem; margin-bottom: 1rem; box-shadow: var(--cf-card-shadow); }
.cf-widget-title { font-size: 0.72rem; font-weight: 700; text-transform: uppercase; letter-spacing: 0.1em; color: var(--color-text-tertiary); margin: 0 0 0.75rem; font-family: var(--cf-heading-font); }
.cf-profile-name { font-weight: 700; font-size: 1.05rem; margin: 0 0 0.25rem; font-family: var(--cf-heading-font); }
.cf-profile-desc { font-size: 0.82rem; color: var(--color-text-secondary); margin: 0; line-height: 1.6; }
.cf-recent-list { list-style: none; padding: 0; margin: 0; }
.cf-recent-list li { padding: 0.4rem 0; border-bottom: 1px solid var(--color-border); }
.cf-recent-list li:last-child { border-bottom: none; }
.cf-recent-list a { font-size: 0.8rem; color: var(--color-text-secondary); text-decoration: none; display: block; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.cf-recent-list a:hover { color: var(--color-accent); }
.cf-recent-time { font-size: 0.7rem; color: var(--color-text-tertiary); display: block; }
.cf-tag-cloud { display: flex; flex-wrap: wrap; gap: 0.4rem; }
.cf-tag-cloud a { font-size: 0.72rem; padding: 0.2rem 0.55rem; background: var(--color-accent-subtle); border-radius: 9999px; color: var(--color-accent-text); text-decoration: none; transition: all .15s; }
.cf-tag-cloud a:hover { color: var(--color-accent); background: color-mix(in srgb, var(--color-accent) 22%, transparent); }
.cf-cat-list { list-style: none; padding: 0; margin: 0; }
.cf-cat-list li { display: flex; justify-content: space-between; padding: 0.35rem 0; font-size: 0.8rem; }
.cf-cat-list a { color: var(--color-text-secondary); text-decoration: none; }
.cf-cat-list a:hover { color: var(--color-accent); }
.cf-cat-count { color: var(--color-accent-text); }

/* === Hero ===
   位于 .cf-layout 之上；宽度三档：窄=文章列表宽（主栏） / 中=内容宽（含侧边栏整行） / 宽=窗口宽 */
.cf-hero { margin-bottom: 2.5rem; }
.cf-hero-frame { max-width: calc(var(--cf-content-width) + var(--cf-sidebar-width) + var(--cf-gap)); margin: 0 auto; padding: 0 var(--content-padding); }
[data-sidebar="none"] .cf-hero-frame { max-width: var(--cf-content-width); }
.cf-hero-panel { position: relative; overflow: hidden; border-radius: var(--cf-radius-lg); }
.cf-hero-inner { position: relative; z-index: 1; text-align: center; padding: 3rem 2rem; }
.cf-hero h1 { font-size: 2.5rem; margin: 0 0 0.5rem; font-family: var(--cf-heading-font); }
.cf-hero p { color: var(--color-text-secondary); margin: 0; }
.cf-hero-bg { position: absolute; inset: 0; background-size: cover; background-position: center; }
.cf-hero-overlay { position: absolute; inset: 0; background: rgba(0, 0, 0, 0.45); }
.cf-hero-panel[data-hero-bg="true"] .cf-hero-inner h1 { color: #fff; }
.cf-hero-panel[data-hero-bg="true"] .cf-hero-inner p { color: rgba(255, 255, 255, 0.85); }
/* 无背景图时的底色三选：无底 / 浅色底 / 渐变 */
.cf-hero-panel[data-hero-bg="false"][data-hero-fallback="subtle"] { background: var(--color-accent-subtle); }
.cf-hero-panel[data-hero-bg="false"][data-hero-fallback="gradient"] { background: var(--color-accent-gradient); }
.cf-hero-panel[data-hero-bg="false"][data-hero-fallback="gradient"] .cf-hero-inner h1 { color: #fff; }
.cf-hero-panel[data-hero-bg="false"][data-hero-fallback="gradient"] .cf-hero-inner p { color: rgba(255, 255, 255, 0.85); }
/* 窄：hero 内嵌主栏（模板条件渲染于 cf-layout 内），宽度即文章列表宽度，侧边栏顶部与 hero 顶部对齐 */
[data-hero-width="narrow"] .cf-hero-frame { max-width: none; padding: 0; }
/* 中：内容宽度，铺满 frame 即可 */
/* 宽：窗口宽度，通栏无圆角 */
[data-hero-width="wide"] .cf-hero-frame { max-width: none; padding: 0; }
[data-hero-width="wide"] .cf-hero-panel { border-radius: 0; }
/* 宽档高度控制 */
[data-hero-width="wide"][data-hero-height="half"] .cf-hero-panel { min-height: 50vh; display: flex; flex-direction: column; justify-content: center; }
[data-hero-width="wide"][data-hero-height="fullscreen"] .cf-hero-panel { min-height: 100vh; display: flex; flex-direction: column; justify-content: center; }



/* === 分页 === */
.cf-pagination { display: flex; gap: 0.3rem; align-items: center; justify-content: center; margin-top: 3rem; }
.cf-pagination a, .cf-pagination span { min-width: 2rem; height: 2rem; display: inline-flex; align-items: center; justify-content: center; padding: 0 0.5rem; font-size: 0.82rem; border-radius: var(--cf-radius-sm); text-decoration: none; color: var(--color-text-secondary); transition: all .15s; border: 1px solid transparent; }
.cf-pagination a:hover { background: var(--color-bg-secondary); color: var(--color-text); }
.cf-page-active { background: var(--color-accent); color: #fff; }

/* === 文章详情 === */
.cf-post-kicker { font-size: 0.7rem; font-weight: 700; text-transform: uppercase; letter-spacing: 0.12em; color: var(--color-text-tertiary); margin: 0 0 0.5rem; font-family: var(--cf-heading-font); }
.cf-post-title { font-size: 2.25rem; font-weight: 700; line-height: 1.2; letter-spacing: -0.02em; margin: 0 0 1rem; font-family: var(--cf-heading-font); }
.cf-post-meta { display: flex; flex-wrap: wrap; gap: 0.75rem; font-size: 0.78rem; color: var(--color-text-tertiary); margin-bottom: 2rem; }
.cf-post-meta a { text-decoration: none; }
.cf-post-meta a:hover { color: var(--color-text-secondary); }
.cf-post-cover { width: 100%; aspect-ratio: 16/9; object-fit: cover; border-radius: var(--cf-radius-lg); margin-bottom: 2rem; }

.cf-post-content { font-size: 1rem; line-height: 1.85; color: var(--color-text); }
.cf-post-content h2 { font-size: 1.4rem; margin: 2rem 0 0.75rem; }
[data-article-heading="underline"] .cf-post-content h2 { border-bottom: 2px solid var(--color-accent); padding-bottom: 0.3rem; }
[data-article-heading="bar-left"] .cf-post-content h2 { border-left: 4px solid var(--color-accent); padding-left: 0.75rem; }
.cf-post-content h3 { font-size: 1.15rem; margin: 1.75rem 0 0.5rem; }
.cf-post-content p { margin: 1rem 0; }
.cf-post-content a { color: var(--color-accent); text-decoration: underline; text-underline-offset: 2px; }
.cf-post-content ul, .cf-post-content ol { margin: 1rem 0; padding-left: 1.5rem; }
.cf-post-content li { margin: 0.3rem 0; }
.cf-post-content blockquote { margin: 1.5rem 0; padding: 0.5rem 0 0.5rem 1.25rem; border-left: 3px solid var(--color-accent); color: var(--color-text-secondary); }
.cf-post-content pre { background: var(--color-bg-secondary); border: 1px solid var(--color-border); padding: 1rem 1.25rem; border-radius: var(--cf-radius); overflow-x: auto; font-size: 0.82rem; line-height: 1.6; margin: 1.5rem 0; }
.cf-post-content code { font-family: 'JetBrains Mono', ui-monospace, monospace; font-size: 0.875em; }
.cf-post-content :not(pre) > code { background: var(--color-bg-tertiary); padding: 0.15em 0.4em; border-radius: 4px; }
.cf-post-content mark { background: color-mix(in srgb, var(--color-accent) 24%, transparent); color: inherit; padding: 0.05em 0.25em; border-radius: 4px; }
.cf-post-content img { border-radius: var(--cf-radius); margin: 1.5rem 0; }
.cf-post-content hr { border: none; border-top: 1px solid var(--color-border); margin: 2.5rem 0; }
.cf-post-content table { width: 100%; border-collapse: collapse; margin: 1.5rem 0; font-size: 0.88rem; }
.cf-post-content th, .cf-post-content td { border: 1px solid var(--color-border); padding: 0.5rem 0.75rem; text-align: left; }
.cf-post-content th { background: var(--color-accent-subtle); font-weight: 600; }

/* TOC */
.cf-toc { margin: 2rem 0; padding: 1rem 1.25rem; background: var(--color-bg-secondary); border: 1px solid var(--color-border); border-radius: var(--cf-radius); }
.cf-toc a { display: block; text-decoration: none; color: var(--color-text-secondary); font-size: 0.82rem; padding: 0.15rem 0; transition: color .15s; }
.cf-toc a:hover { color: var(--color-text); }
.cf-toc a[aria-current="true"] { color: var(--color-accent); font-weight: 600; }
.cf-toc-num { color: var(--color-text-tertiary); margin-right: 0.4rem; font-family: 'JetBrains Mono', ui-monospace, monospace; font-size: 0.78rem; }

.cf-post-nav { display: flex; gap: 1rem; margin: 3rem 0; padding-top: 2rem; border-top: 1px solid var(--color-border); }
.cf-post-nav a { text-decoration: none; color: var(--color-text-secondary); font-size: 0.82rem; max-width: 48%; }
.cf-post-nav a:hover { color: var(--color-accent); }
.cf-post-nav a[rel="prev"] { margin-right: auto; }
.cf-post-nav a[rel="next"] { margin-left: auto; }

/* === 评论区（复用平台 sb-* 结构但 cf-* 样式） === */
.cf-comments { margin-top: 3rem; padding-top: 2rem; border-top: 1px solid var(--color-border); }
.cf-comment { padding: 1rem 0; border-bottom: 1px solid var(--color-border); }
.cf-comment:last-of-type { border-bottom: none; }
.cf-comment-head { display: flex; gap: 0.5rem; align-items: center; margin-bottom: 0.4rem; font-size: 0.78rem; }
.cf-comment-author { font-weight: 600; color: var(--color-text); }
.cf-comment-author a { color: var(--color-accent); text-decoration: none; }
.cf-comment-time { color: var(--color-text-tertiary); }
.cf-comment-body { font-size: 0.92rem; }
.cf-reply-at { color: var(--color-accent); font-weight: 500; }
.cf-comment-replies { margin-left: 1.25rem; padding-left: 1rem; border-left: 2px solid var(--color-border); margin-top: 0.75rem; }
.cf-comment-reply-btn { background: none; border: none; color: var(--color-text-tertiary); font-size: 0.72rem; cursor: pointer; padding: 0.25rem 0; margin-top: 0.25rem; }
.cf-comment-reply-btn:hover { color: var(--color-accent); }

/* 评论表单（复用 sb-* 类，cf 样式覆盖） */
.cf-comment-form { margin-top: 2rem; }
.cf-form-row { display: grid; grid-template-columns: 1fr 1fr; gap: 0.75rem; margin-bottom: 0.75rem; }
.cf-field { display: flex; flex-direction: column; gap: 0.3rem; }
.cf-field label { font-size: 0.72rem; color: var(--color-text-tertiary); font-weight: 500; }
.cf-field input, .cf-field textarea { font-family: var(--cf-font); font-size: 0.88rem; padding: 0.55rem 0.7rem; background: var(--color-bg); border: 1px solid var(--color-border); border-radius: var(--cf-radius-sm); color: var(--color-text); transition: border-color .15s, box-shadow .15s; }
.cf-field input:focus, .cf-field textarea:focus { outline: none; border-color: var(--color-accent); box-shadow: 0 0 0 3px var(--color-accent-subtle); }
.cf-field textarea { resize: vertical; min-height: 5.5rem; }
.cf-form-actions { display: flex; align-items: center; gap: 1rem; margin-top: 0.5rem; }
.cf-btn { background: var(--color-accent); color: #fff; border: none; padding: 0.55rem 1.4rem; border-radius: var(--cf-radius-sm); font-size: 0.82rem; font-weight: 500; cursor: pointer; transition: background .15s; }
.cf-btn:hover { background: var(--color-accent-hover); }
.cf-comment-status { font-size: 0.78rem; color: var(--color-text-tertiary); margin: 0; }
form[data-sb-comment-form][data-state="success"] .cf-comment-status { color: var(--color-success); }
form[data-sb-comment-form][data-state="error"] .cf-comment-status { color: var(--color-error); }
form[data-sb-comment-form][data-state="pending"] .cf-comment-status { color: var(--color-warning); }
.cf-reply-banner { display: flex; align-items: center; gap: 0.5rem; margin-bottom: 0.75rem; padding: 0.5rem 0.75rem; background: var(--color-bg-secondary); border-radius: var(--cf-radius-sm); font-size: 0.78rem; color: var(--color-text-secondary); }
.cf-reply-banner[hidden] { display: none; }
.cf-reply-cancel { background: none; border: 1px solid var(--color-border); border-radius: var(--cf-radius-sm); font-size: 0.7rem; color: var(--color-text-tertiary); cursor: pointer; padding: 0.15rem 0.5rem; }
.cf-reply-cancel:hover { color: var(--color-error); border-color: var(--color-error); }

/* === 归档页 === */
.cf-archive-head { margin-bottom: 1.5rem; padding-bottom: 1rem; border-bottom: 1px solid var(--color-border); }
.cf-archive-kicker { font-size: 0.7rem; font-weight: 700; text-transform: uppercase; letter-spacing: 0.12em; color: var(--color-text-tertiary); margin: 0 0 0.25rem; font-family: var(--cf-heading-font); }
.cf-archive-title { font-size: 1.75rem; font-weight: 700; letter-spacing: -0.02em; margin: 0 0 0.25rem; font-family: var(--cf-heading-font); }
.cf-archive-desc { color: var(--color-text-secondary); font-size: 0.88rem; margin: 0; }
.cf-tax-list { list-style: none; padding: 0; margin: 0; }
.cf-tax-list li { padding: 0.7rem 0; border-bottom: 1px solid var(--color-border); display: flex; justify-content: space-between; }
.cf-tax-list a { text-decoration: none; color: var(--color-text); }
.cf-tax-list a:hover { color: var(--color-accent); }

/* === 页脚 === */
.cf-footer { border-top: 1px solid var(--color-border); }
.cf-footer-inner { max-width: calc(var(--cf-content-width) + var(--cf-sidebar-width) + var(--cf-gap)); margin: 0 auto; padding: 2rem var(--content-padding); display: flex; justify-content: space-between; align-items: center; color: var(--color-text-tertiary); font-size: 0.78rem; }
.cf-footer a { color: var(--color-text-tertiary); text-decoration: none; }
.cf-footer a:hover { color: var(--color-text-secondary); }
/* 自定义页脚容器：占满可用宽度，内部走正常块流；只继承字体颜色/大小，不继承 flex 排版；
   直接子元素 margin 清零，间距由用户内联 style 自行控制 */
.cf-footer-text { flex: 1 1 auto; min-width: 0; }
.cf-footer-text > * { margin: 0; }

/* === 搜索弹窗（cf-* 样式覆盖 sb-* 结构） === */
.sb-search-overlay { background: color-mix(in srgb, #000 55%, transparent); }
.sb-search-dialog { background: var(--color-bg); border: 1px solid var(--color-border); border-radius: var(--cf-radius-lg); box-shadow: var(--cf-shadow); }
.sb-search-dialog input { background: var(--color-bg); border: 1px solid var(--color-border); border-radius: var(--cf-radius-sm); color: var(--color-text); font-family: var(--cf-font); }
.sb-search-dialog input:focus { border-color: var(--color-accent); box-shadow: 0 0 0 3px var(--color-accent-subtle); }
.sb-search-results li a { color: var(--color-text); border-radius: var(--cf-radius-sm); }
.sb-search-results li a:hover { background: var(--color-bg-secondary); }

/* === 浮动按钮 === */
.cf-back-to-top { position: fixed; right: 1.5rem; bottom: 1.5rem; width: 2.5rem; height: 2.5rem; border-radius: 50%; background: var(--color-bg-secondary); border: 1px solid var(--color-border); color: var(--color-text-secondary); cursor: pointer; display: flex; align-items: center; justify-content: center; box-shadow: var(--cf-shadow); opacity: 0; pointer-events: none; transition: opacity .2s, color .15s; z-index: 30; }
.cf-back-to-top.cf-visible { opacity: 1; pointer-events: auto; }
.cf-back-to-top:hover { color: var(--color-accent); }
/* 主题切换角标：样式与返回顶部一致，位于返回顶部与评论跳转之间 */
.cf-theme-toggle { position: fixed; right: 1.5rem; bottom: 3rem; width: 2.5rem; height: 2.5rem; border-radius: 50%; background: var(--color-bg-secondary); border: 1px solid var(--color-border); color: var(--color-text-secondary); cursor: pointer; display: flex; align-items: center; justify-content: center; box-shadow: var(--cf-shadow); transition: color .15s; z-index: 30; }
.cf-theme-toggle:hover { color: var(--color-accent); }
/* 评论跳转默认位于最下方；动态脚本会按当前存在的按钮自动堆叠 */
.cf-comment-jump { position: fixed; right: 1.5rem; bottom: 1.5rem; width: 2.5rem; height: 2.5rem; border-radius: 50%; background: var(--color-accent); border: none; color: #fff; cursor: pointer; display: flex; align-items: center; justify-content: center; box-shadow: var(--cf-shadow); z-index: 30; }
.cf-comment-jump:hover { background: var(--color-accent-hover); }

/* === 响应式 === */
@media (max-width: 860px) {
  [data-sidebar] .cf-layout { flex-direction: column; }
  [data-sticky] .cf-sidebar { position: static; max-height: none; width: 100%; }
  [data-list="cards"] .cf-posts { grid-template-columns: 1fr; }
  .cf-form-row { grid-template-columns: 1fr; }
}
@media (max-width: 640px) {
  .cf-body { font-size: 15px; }
  .cf-post-title { font-size: 1.75rem; }
  .cf-nav a:not(.cf-nav-brand) { display: none; }
  [data-hero-width] .cf-hero-inner { padding: 2rem 1.25rem; }
  .cf-hero h1 { font-size: 2rem; }
}

/* === 代码块行号显示开关（框架已改为始终输出 .line，主题用 CSS counter 控制显隐）=== */
.cf-post-content pre { counter-reset: codeline; position: relative; }
.cf-post-content pre .line { display: block; }
[data-show-line-numbers="true"] .cf-post-content pre {
  padding-left: 3.5rem;
}
[data-show-line-numbers="true"] .cf-post-content pre .line::before {
  counter-increment: codeline;
  content: counter(codeline);
  display: inline-block;
  width: 2rem;
  text-align: right;
  color: var(--color-text-tertiary);
  user-select: none;
  position: absolute;
  left: 0;
}

/* === 代码块配色主题（5 套，body[data-code-theme] 切换）=== */
/* 默认 = one-dark（无需 data-code-theme 也能用；固定深色底，不随站点模式变化） */
.cf-post-content pre code { color: #abb2bf; }
[data-code-theme="one-dark"] .cf-post-content pre, .cf-post-content pre { background: #282c34; }
.cf-post-content .token-comment, .cf-post-content .token-prolog, .cf-post-content .token-doctype, .cf-post-content .token-cdata { color: #5c6370; font-style: italic; }
.cf-post-content .token-punctuation { color: #abb2bf; }
.cf-post-content .token-property, .cf-post-content .token-tag, .cf-post-content .token-constant, .cf-post-content .token-symbol, .cf-post-content .token-deleted { color: #e06c75; }
.cf-post-content .token-boolean, .cf-post-content .token-number { color: #d19a66; }
.cf-post-content .token-selector, .cf-post-content .token-attr-name, .cf-post-content .token-string, .cf-post-content .token-char, .cf-post-content .token-builtin, .cf-post-content .token-inserted { color: #98c379; }
.cf-post-content .token-operator, .cf-post-content .token-entity, .cf-post-content .token-url, .cf-post-content .token-variable { color: #56b6c2; }
.cf-post-content .token-atrule, .cf-post-content .token-attr-value, .cf-post-content .token-function, .cf-post-content .token-class-name { color: #61afef; }
.cf-post-content .token-keyword { color: #c678dd; }
.cf-post-content .token-regex, .cf-post-content .token-important { color: #e5c07b; }

/* github-dark */
[data-code-theme="github-dark"] .cf-post-content pre code { color: #c9d1d9; }
[data-code-theme="github-dark"] .cf-post-content pre { background: #0d1117; }
[data-code-theme="github-dark"] .cf-post-content .token-comment, [data-code-theme="github-dark"] .cf-post-content .token-prolog { color: #8b949e; font-style: italic; }
[data-code-theme="github-dark"] .cf-post-content .token-punctuation { color: #c9d1d9; }
[data-code-theme="github-dark"] .cf-post-content .token-property, [data-code-theme="github-dark"] .cf-post-content .token-tag, [data-code-theme="github-dark"] .cf-post-content .token-deleted { color: #7ee787; }
[data-code-theme="github-dark"] .cf-post-content .token-boolean, [data-code-theme="github-dark"] .cf-post-content .token-number { color: #79c0ff; }
[data-code-theme="github-dark"] .cf-post-content .token-selector, [data-code-theme="github-dark"] .cf-post-content .token-attr-name, [data-code-theme="github-dark"] .cf-post-content .token-string, [data-code-theme="github-dark"] .cf-post-content .token-char, [data-code-theme="github-dark"] .cf-post-content .token-inserted { color: #a5d6ff; }
[data-code-theme="github-dark"] .cf-post-content .token-operator, [data-code-theme="github-dark"] .cf-post-content .token-entity { color: #ff7b72; }
[data-code-theme="github-dark"] .cf-post-content .token-function, [data-code-theme="github-dark"] .cf-post-content .token-class-name { color: #d2a8ff; }
[data-code-theme="github-dark"] .cf-post-content .token-keyword { color: #ff7b72; }
[data-code-theme="github-dark"] .cf-post-content .token-variable, [data-code-theme="github-dark"] .cf-post-content .token-constant { color: #ffa657; }

/* github-light */
[data-code-theme="github-light"] .cf-post-content pre code { color: #24292f; }
[data-code-theme="github-light"] .cf-post-content pre { background: #f6f8fa; }
[data-code-theme="github-light"] .cf-post-content .token-comment { color: #6e7781; font-style: italic; }
[data-code-theme="github-light"] .cf-post-content .token-punctuation { color: #24292f; }
[data-code-theme="github-light"] .cf-post-content .token-property, [data-code-theme="github-light"] .cf-post-content .token-tag, [data-code-theme="github-light"] .cf-post-content .token-deleted { color: #116329; }
[data-code-theme="github-light"] .cf-post-content .token-boolean, [data-code-theme="github-light"] .cf-post-content .token-number { color: #0550ae; }
[data-code-theme="github-light"] .cf-post-content .token-selector, [data-code-theme="github-light"] .cf-post-content .token-attr-name, [data-code-theme="github-light"] .cf-post-content .token-string, [data-code-theme="github-light"] .cf-post-content .token-inserted { color: #0a3069; }
[data-code-theme="github-light"] .cf-post-content .token-operator, [data-code-theme="github-light"] .cf-post-content .token-entity { color: #cf222e; }
[data-code-theme="github-light"] .cf-post-content .token-function, [data-code-theme="github-light"] .cf-post-content .token-class-name { color: #8250df; }
[data-code-theme="github-light"] .cf-post-content .token-keyword { color: #cf222e; }
[data-code-theme="github-light"] .cf-post-content .token-variable, [data-code-theme="github-light"] .cf-post-content .token-constant { color: #953800; }

/* nord */
[data-code-theme="nord"] .cf-post-content pre code { color: #d8dee9; }
[data-code-theme="nord"] .cf-post-content pre { background: #2e3440; }
[data-code-theme="nord"] .cf-post-content .token-comment { color: #616e88; font-style: italic; }
[data-code-theme="nord"] .cf-post-content .token-punctuation { color: #d8dee9; }
[data-code-theme="nord"] .cf-post-content .token-property, [data-code-theme="nord"] .cf-post-content .token-tag { color: #81a1c1; }
[data-code-theme="nord"] .cf-post-content .token-boolean, [data-code-theme="nord"] .cf-post-content .token-number { color: #b48ead; }
[data-code-theme="nord"] .cf-post-content .token-selector, [data-code-theme="nord"] .cf-post-content .token-string, [data-code-theme="nord"] .cf-post-content .token-inserted { color: #a3be8c; }
[data-code-theme="nord"] .cf-post-content .token-operator, [data-code-theme="nord"] .cf-post-content .token-entity { color: #ebcb8b; }
[data-code-theme="nord"] .cf-post-content .token-function, [data-code-theme="nord"] .cf-post-content .token-class-name { color: #88c0d0; }
[data-code-theme="nord"] .cf-post-content .token-keyword { color: #81a1c1; }
[data-code-theme="nord"] .cf-post-content .token-variable, [data-code-theme="nord"] .cf-post-content .token-constant { color: #d08770; }

/* dracula */
[data-code-theme="dracula"] .cf-post-content pre code { color: #f8f8f2; }
[data-code-theme="dracula"] .cf-post-content pre { background: #282a36; }
[data-code-theme="dracula"] .cf-post-content .token-comment { color: #6272a4; font-style: italic; }
[data-code-theme="dracula"] .cf-post-content .token-punctuation { color: #f8f8f2; }
[data-code-theme="dracula"] .cf-post-content .token-property, [data-code-theme="dracula"] .cf-post-content .token-tag { color: #ff79c6; }
[data-code-theme="dracula"] .cf-post-content .token-boolean, [data-code-theme="dracula"] .cf-post-content .token-number { color: #bd93f9; }
[data-code-theme="dracula"] .cf-post-content .token-selector, [data-code-theme="dracula"] .cf-post-content .token-string, [data-code-theme="dracula"] .cf-post-content .token-inserted { color: #f1fa8c; }
[data-code-theme="dracula"] .cf-post-content .token-operator, [data-code-theme="dracula"] .cf-post-content .token-entity { color: #ff79c6; }
[data-code-theme="dracula"] .cf-post-content .token-function, [data-code-theme="dracula"] .cf-post-content .token-class-name { color: #50fa7b; }
[data-code-theme="dracula"] .cf-post-content .token-keyword { color: #ff79c6; }
[data-code-theme="dracula"] .cf-post-content .token-variable, [data-code-theme="dracula"] .cf-post-content .token-constant { color: #8be9fd; }

/* === 代码块工具条：复制 / 自动换行（main.js 注入 .cf-code-shell 包裹层）=== */
.cf-code-shell { position: relative; margin: 1.5rem 0; }
.cf-code-shell .cf-post-content pre, .cf-code-shell pre { margin: 0; }
.cf-code-shell pre.cf-code-wrapped { white-space: pre-wrap; word-break: break-all; overflow-x: hidden; }
.cf-code-bar { position: absolute; top: 0.5rem; right: 0.5rem; z-index: 2; display: flex; gap: 0.35rem; }
.cf-code-btn { width: 1.6rem; height: 1.6rem; display: inline-flex; align-items: center; justify-content: center; font-size: 0.72rem; background: color-mix(in srgb, var(--color-bg) 65%, transparent); backdrop-filter: blur(4px); border: none; border-radius: var(--cf-radius-sm); color: var(--color-text-secondary); cursor: pointer; transition: color .15s, background .15s; }
.cf-code-btn:hover { color: var(--color-accent); }
.cf-code-btn.cf-active { color: var(--color-accent); background: var(--color-accent-subtle); }

/* === 文章卡片 === */
.cf-posts { display: flex; flex-direction: column; }
[data-list="cards"] .cf-posts { display: block; column-gap: 1.5rem; }
[data-list="cards"] .cf-posts[data-card-columns="1"] { column-count: 1; }
[data-list="cards"] .cf-posts[data-card-columns="2"] { column-count: 2; }
[data-list="cards"] .cf-card { display: block; break-inside: avoid; margin-bottom: 1.5rem; background: var(--color-bg-secondary); border: 1px solid var(--color-border); border-radius: var(--cf-radius); padding: 1.25rem; box-shadow: var(--cf-card-shadow); max-height: 600px; overflow: hidden; }
[data-list="cards"] .cf-card:hover { border-color: var(--color-accent-border); }
[data-list="cards"] .cf-card-cover { display: block; margin-bottom: 0.75rem; border-radius: var(--cf-radius-sm); overflow: hidden; }
[data-list="cards"] .cf-card-cover img { width: 100%; aspect-ratio: 16/9; object-fit: cover; }
[data-list="cards"] .cf-card-excerpt { font-size: 0.9rem; color: var(--color-text-secondary); line-height: 1.7; margin: 0 0 0.6rem; display: -webkit-box; -webkit-line-clamp: 3; -webkit-box-orient: vertical; overflow: hidden; }

/* 列表模式分隔 */
[data-list="list"][data-sep="border"] .cf-card { padding: 1.25rem 0; border-bottom: 1px solid var(--color-border); }
[data-list="list"][data-sep="border"] .cf-card:first-child { padding-top: 0; }
[data-list="list"][data-sep="gap"] .cf-card { margin-bottom: 1.5rem; }
.cf-card-title { font-size: 1.05rem; font-weight: 600; line-height: 1.4; margin: 0 0 0.6rem; font-family: var(--cf-heading-font); }
.cf-card-title a { color: inherit; text-decoration: none; transition: color .15s; }
.cf-card:hover .cf-card-title a { color: var(--color-accent); }
.cf-card-meta { clear: left; display: flex; gap: 0.6rem; font-size: 0.72rem; color: var(--color-text-tertiary); flex-wrap: wrap; }
.cf-card-meta a { text-decoration: none; }
.cf-card-meta a:hover { color: var(--color-text-secondary); }

/* 横幅头图样式 */
[data-card-image-style="banner"] .cf-card-banner { position: relative; height: 200px; margin: -1.25rem -1.25rem 0.75rem; border-radius: var(--cf-radius) var(--cf-radius) 0 0; overflow: hidden; }
[data-card-image-style="banner"] .cf-card-banner img { width: 100%; height: 100%; object-fit: cover; }
[data-card-image-style="banner"] .cf-card-banner-overlay { position: absolute; inset: 0; background: linear-gradient(to top, rgba(0,0,0,0.7) 0%, rgba(0,0,0,0.3) 50%, rgba(0,0,0,0.1) 100%); }
[data-card-image-style="banner"] .cf-card-title-banner { position: absolute; bottom: 0; left: 0; right: 0; padding: 1rem 1.25rem; margin: 0; font-size: 1.1rem; }
[data-card-image-style="banner"] .cf-card-title-banner a { color: #fff; text-decoration: none; }
[data-card-image-style="banner"][data-title-color="dark"] .cf-card-title-banner a { color: #1a1a1a; }
[data-card-image-style="banner"][data-title-color="light"] .cf-card-title-banner a { color: #fff; }
/* 跟随深浅主题：跟随站点 data-theme（深色主题白字、浅色主题深字）；需位于 hover 规则之前（同特异性，后者在后胜出） */
[data-theme="dark"] [data-card-image-style="banner"][data-title-color="follow"] .cf-card-title-banner a { color: #fff; }
[data-theme="light"] [data-card-image-style="banner"][data-title-color="follow"] .cf-card-title-banner a { color: #1a1a1a; }
/* 蒙版与标题颜色联动：深色标题配浅色蒙版，白色标题保持深色蒙版，保证可读性 */
[data-card-image-style="banner"][data-title-color="dark"] .cf-card-banner-overlay { background: linear-gradient(to top, rgba(255,255,255,0.75) 0%, rgba(255,255,255,0.35) 50%, rgba(255,255,255,0.15) 100%); }
[data-theme="light"] [data-card-image-style="banner"][data-title-color="follow"] .cf-card-banner-overlay { background: linear-gradient(to top, rgba(255,255,255,0.75) 0%, rgba(255,255,255,0.35) 50%, rgba(255,255,255,0.15) 100%); }
/* 横幅标题 hover：特异性高于上方固定色规则，否则 hover 无效果 */
[data-card-image-style="banner"] .cf-card:hover .cf-card-title-banner a { color: var(--color-accent); }
.cf-empty { text-align: center; padding: 4rem 0; color: var(--color-text-tertiary); }
/* list 模式：标题行1 → 封面 float left + 摘要环绕 行2 → meta clear 行3 */
[data-list="list"] .cf-card { display: block; }
[data-list="list"] .cf-card-cover { float: left; width: 96px; aspect-ratio: 16/9; margin: 0 1rem 0.5rem 0; }
[data-list="list"] .cf-card-cover img { width: 100%; height: 100%; }
/* cards 模式：封面上 → 标题/摘要下 */
[data-list="cards"] .cf-card { display: block; background: var(--color-bg-secondary); border: 1px solid var(--color-border); border-radius: var(--cf-radius); padding: 1.25rem; box-shadow: var(--cf-card-shadow); }
[data-list="cards"] .cf-card-cover { margin-bottom: 0.75rem; }
[data-list="cards"] .cf-card-cover img { width: 100%; aspect-ratio: 16/9; }
[data-list="cards"] .cf-card-excerpt { display: -webkit-box; -webkit-line-clamp: 2; line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden; }
.cf-tag { display: inline-block; padding: 0.1rem 0.5rem; background: var(--color-accent-subtle); border-radius: 9999px; font-size: 0.7rem; color: var(--color-accent-text); text-decoration: none; margin-right: 0.25rem; transition: all .15s; }
.cf-tag:hover { color: var(--color-accent); background: color-mix(in srgb, var(--color-accent) 22%, transparent); }
@media (max-width: 640px) { [data-list="list"] .cf-card-cover { width: 72px; } }

/* === 文章元信息：·分隔 + 标签独立行 === */
.cf-post-meta { display: flex; flex-wrap: wrap; align-items: center; font-size: 0.78rem; color: var(--color-text-tertiary); margin-bottom: 0.5rem; }
.cf-meta-item { display: inline-flex; align-items: center; }
.cf-meta-item:not(:first-child)::before { content: "·"; margin: 0 0.5rem; opacity: 0.5; }
.cf-meta-item a { text-decoration: none; color: inherit; }
.cf-meta-item a:hover { color: var(--color-text-secondary); }
.cf-post-tags { display: flex; flex-wrap: wrap; gap: 0.4rem; margin-bottom: 2rem; }

/* === 列表头 + 排序 === */
.cf-list-head { display: flex; align-items: baseline; justify-content: space-between; margin-bottom: 1.25rem; }
.cf-list-title { font-size: 0.72rem; font-weight: 700; text-transform: uppercase; letter-spacing: 0.1em; color: var(--color-accent-text); margin: 0; font-family: var(--cf-heading-font); }
.cf-sort { display: flex; gap: 0.25rem; flex-wrap: wrap; }
.cf-sort a { font-size: 0.72rem; color: var(--color-text-tertiary); text-decoration: none; padding: 0.3rem 0.6rem; border-radius: 9999px; transition: all .15s; }
.cf-sort a:hover { color: var(--color-text); background: var(--color-bg-secondary); }
.cf-sort a[aria-current="true"] { color: var(--color-accent); background: var(--color-accent-subtle); }

/* === 顶栏：导航对齐 / 图标按钮 / 动作区 === */
.cf-header-left { display: flex; align-items: center; gap: 1.5rem; flex: 1 1 auto; min-width: 0; }
.cf-header-actions { display: flex; align-items: center; gap: 0.5rem; flex: 0 0 auto; }
.cf-icon-btn { display: inline-flex; align-items: center; justify-content: center; width: 2rem; height: 2rem; border: none; background: transparent; color: var(--color-text-secondary); cursor: pointer; border-radius: var(--cf-radius-sm); transition: color .15s, background .15s; font-size: 0.95rem; }
.cf-icon-btn:hover { color: var(--color-text); background: var(--color-bg-secondary); }
[data-nav-align="left"] .cf-nav { margin-right: auto; }
[data-nav-align="center"] .cf-nav { margin: 0 auto; }
[data-nav-align="right"] .cf-nav { margin-left: auto; }

/* === 侧边栏：个人简介 === */
.cf-widget-profile { display: flex; flex-direction: column; align-items: center; text-align: center; gap: 0.5rem; }
.cf-profile-avatar { width: 4.5rem; height: 4.5rem; object-fit: cover; border: 1px solid var(--color-border); }
.cf-profile-name { font-weight: 700; font-size: 1rem; margin: 0; font-family: var(--cf-heading-font); }
.cf-profile-signature { font-size: 0.8rem; color: var(--color-text-secondary); margin: 0; }
.cf-profile-desc { font-size: 0.8rem; color: var(--color-text-tertiary); margin: 0; line-height: 1.5; }

/* === 侧边栏：标签/分类 限量 + 更多弹窗 === */
.cf-more-btn { margin-top: 0.5rem; width: 100%; padding: 0.4rem 0; font-size: 0.72rem; color: var(--color-text-tertiary); background: transparent; border: 1px dashed var(--color-border); border-radius: var(--cf-radius-sm); cursor: pointer; transition: color .15s, border-color .15s; }
.cf-more-btn:hover { color: var(--color-accent); border-color: var(--color-accent); }
.cf-modal { position: fixed; inset: 0; z-index: 60; display: flex; align-items: center; justify-content: center; padding: 1.5rem; }
.cf-modal[hidden] { display: none; }
.cf-modal-backdrop { position: absolute; inset: 0; background: rgba(0,0,0,0.5); backdrop-filter: blur(2px); }
.cf-modal-panel { position: relative; width: 100%; max-width: 32rem; max-height: 80vh; background: var(--color-bg); border: 1px solid var(--color-border); border-radius: var(--cf-radius); display: flex; flex-direction: column; box-shadow: var(--cf-shadow); }
.cf-modal-head { display: flex; align-items: center; justify-content: space-between; padding: 0.75rem 1rem; border-bottom: 1px solid var(--color-border); font-size: 0.85rem; font-weight: 600; }
.cf-modal-close { background: none; border: none; color: var(--color-text-secondary); cursor: pointer; font-size: 1rem; padding: 0.25rem 0.5rem; border-radius: var(--cf-radius-sm); }
.cf-modal-close:hover { color: var(--color-text); background: var(--color-bg-secondary); }
.cf-modal-body { padding: 1rem; overflow-y: auto; }
.cf-modal-body .cf-tag-cloud { justify-content: flex-start; }

/* === 文章详情：独立 TOC 侧栏 === */
.cf-post-content :is(h2,h3,h4) { scroll-margin-top: calc(var(--header-height) + 1.5rem); }
.cf-sidebar-toc { width: var(--cf-sidebar-width); flex-shrink: 0; position: sticky; top: calc(var(--header-height) + 1.5rem); }
/* 卡片为 flex 列：标题固定 + nav 内部滚动，保持圆角卡片外观 */
.cf-widget-toc { padding: 0; max-height: calc(100vh - var(--header-height) - 3rem); display: flex; flex-direction: column; overflow: hidden; }
.cf-widget-toc .cf-widget-title { flex: 0 0 auto; margin: 0; padding: 1rem 1.25rem 0.75rem; background: var(--color-bg-secondary); border-bottom: 1px solid var(--color-border); font-size: 1.05rem; font-weight: 700; letter-spacing: 0; color: var(--color-text-secondary); }
.cf-toc-nav { flex: 1 1 auto; min-height: 0; overflow-y: auto; overscroll-behavior: contain; padding: 0.75rem 1.25rem 1rem; scrollbar-width: thin; scrollbar-color: var(--color-accent-border) transparent; }
.cf-toc-nav::-webkit-scrollbar { width: 6px; height: 6px; }
.cf-toc-nav::-webkit-scrollbar-track { background: transparent; margin: 4px 0; }
.cf-toc-nav::-webkit-scrollbar-thumb { background: var(--color-accent-border); border-radius: 9999px; border: 2px solid transparent; background-clip: padding-box; }
.cf-toc-nav::-webkit-scrollbar-thumb:hover { background: color-mix(in srgb, var(--color-accent) 60%, transparent); background-clip: padding-box; }
.cf-toc-nav { display: flex; flex-direction: column; gap: 0.25rem; }
.cf-toc-link { font-size: 0.8rem; color: var(--color-text-tertiary); text-decoration: none; line-height: 1.4; border-left: 2px solid transparent; padding-left: 0.5rem; transition: color .15s, border-color .15s; }
.cf-toc-link:hover { color: var(--color-accent); }
.cf-toc-link[aria-current="true"] { color: var(--color-accent); border-left-color: var(--color-accent); }
/* sidebarPosition=none 但文章页开启 TOC：恢复双栏布局 */
[data-toc-only="true"][data-sidebar="none"] .cf-layout { display: flex; max-width: calc(var(--cf-content-width) + var(--cf-sidebar-width) + var(--cf-gap)); }
[data-toc-only="true"][data-sidebar="none"] .cf-main { max-width: var(--cf-content-width); margin: 0; }

@media (max-width: 860px) {
  [data-toc-only="true"][data-sidebar="none"] .cf-layout { flex-direction: column; }
  .cf-sidebar-toc { position: static; width: 100%; }
  .cf-widget-toc { max-height: none; overflow: visible; }
  .cf-toc-nav { overflow-y: visible; }
  .cf-modal-panel { max-height: 90vh; }
}

/* === Bootstrap 桥接：主题变量映射到 BS 组件 === */
:root {
  --bs-body-font-family: var(--cf-font);
  --bs-body-bg: var(--color-bg);
  --bs-body-color: var(--color-text);
  --bs-border-color: var(--color-border);
  --bs-border-radius: var(--cf-radius);
  --bs-border-radius-sm: var(--cf-radius-sm);
  --bs-link-color-rgb: 207, 130, 158;
  --bs-link-hover-color-rgb: 221, 167, 189;
  --bs-primary: var(--color-accent);
  --bs-emphasis-color: var(--color-text);
  --bs-secondary-color: var(--color-text-secondary);
  --bs-tertiary-color: var(--color-text-tertiary);
  --bs-secondary-bg: var(--color-bg-secondary);
  --bs-tertiary-bg: var(--color-bg-tertiary);
}
.cf-body { background: var(--bs-body-bg); color: var(--bs-body-color); }
.btn-primary { --bs-btn-bg: var(--color-accent); --bs-btn-border-color: var(--color-accent); --bs-btn-hover-bg: var(--color-accent-hover); --bs-btn-hover-border-color: var(--color-accent-hover); --bs-btn-active-bg: var(--color-accent); --bs-btn-active-border-color: var(--color-accent); --bs-btn-color: #fff; --bs-btn-hover-color: #fff; --bs-btn-active-color: #fff; }
.btn-outline-secondary { --bs-btn-color: var(--color-text-secondary); --bs-btn-border-color: var(--color-border); --bs-btn-hover-bg: var(--color-bg-secondary); --bs-btn-hover-border-color: var(--color-border); --bs-btn-hover-color: var(--color-text); --bs-btn-active-bg: var(--color-bg-secondary); --bs-btn-active-border-color: var(--color-border); }
.card { background: var(--color-bg-secondary); border: 1px solid var(--color-border); border-radius: var(--cf-radius); box-shadow: var(--cf-card-shadow); color: var(--color-text); }
.card-title { font-family: var(--cf-heading-font); }
.card-title a { color: var(--color-text); text-decoration: none; }
.card-title a:hover { color: var(--color-accent); }
.card-text { color: var(--color-text-secondary); font-size: 0.9rem; }
.modal-content { background: var(--color-bg); border: 1px solid var(--color-border); border-radius: var(--cf-radius-lg); color: var(--color-text); }
.modal-header { border-bottom-color: var(--color-border); }
.modal-body .cf-tag-cloud a, .modal-body .cf-cat-list a { color: var(--color-text-secondary); text-decoration: none; }
.modal-body .cf-tag-cloud a:hover, .modal-body .cf-cat-list a:hover { color: var(--color-accent); }
.form-control, .form-select { background: var(--color-bg); border: 1px solid var(--color-border); color: var(--color-text); border-radius: var(--cf-radius-sm); font-family: var(--cf-font); }
.form-control:focus, .form-select:focus { background: var(--color-bg); border-color: var(--color-accent); color: var(--color-text); box-shadow: 0 0 0 3px var(--color-accent-subtle); }
.form-control::placeholder { color: var(--color-text-tertiary); }
.page-link { color: var(--color-text-secondary); background: transparent; border: 1px solid var(--color-border); }
.page-link:hover { color: var(--color-text); background: var(--color-bg-secondary); }
.page-item.active .page-link { background: var(--color-accent); border-color: var(--color-accent); color: #fff; }
.navbar { --bs-navbar-padding-y: 0; --bs-navbar-padding-x: 0; }
.navbar-brand { color: var(--color-text); font-weight: 700; font-family: var(--cf-heading-font); }
.navbar-brand:hover { color: var(--color-accent); }
.nav-link { color: var(--color-text-secondary); font-size: 0.9rem; }
.nav-link:hover, .nav-link:focus { color: var(--color-text); }
.cf-nav .nav-link { padding: 0.25rem 0; }
.badge { --bs-badge-font-weight: 500; }
.page-link { color: var(--color-text-secondary); background: transparent; border: none; padding: 0.3rem 0.6rem; }
.page-link:hover { color: var(--color-text); background: var(--color-bg-secondary); }
.page-item.active .page-link { background: var(--color-accent); color: #fff; border-radius: var(--cf-radius-sm); }
.cf-icon-btn { display: inline-flex; align-items: center; justify-content: center; }
