/* ===================== XR Wire 原型样式 ===================== */
/* 设计 token 取自万小智浅色 demo webarchive（shadcn 体系，HSL 值） */

:root {
  --background:        220 20% 98%;    /* 极浅冷灰底，比纯白少刺眼、与深色冷灰体系呼应 */
  --foreground:        222 47% 11%;    /* 深蓝黑非纯黑，约 15:1，柔和且不刺眼（保留） */
  --card:              0 0% 100%;      /* 纯白卡浮在浅灰底上，层级明确（镜像修复深色"融背景"坑） */
  --card-foreground:   222 47% 11%;
  --border:            214 30% 88%;    /* 边框加深一档，卡片边缘界定更利落 */
  --line-strong:       214 20% 72%;    /* 比 --border 略深的强调线，用于 sticky 状态等 */
  --primary:           175 84% 28%;    /* 主色略深：按钮背景更深稳、作链接文字对比提至 ~6:1 */
  --primary-foreground:0 0% 100%;
  --secondary:         210 40% 96%;
  --muted:             210 40% 96%;
  --muted-foreground:  215 16% 42%;    /* 次级文字加深：白底对比从临界 ~5:1 提到 ~6:1，浅色下不再发飘 */
  --accent:            175 84% 94%;
  --popover:           0 0% 100%;
  --input:             214 30% 88%;    /* 输入框边框与 --border 同步加深 */
  --ring:              175 84% 28%;    /* focus 环与主色同步 */
  --destructive:       0 84% 60%;
  --radius:            0.75rem;
  /* ============================================================
     标签热度色板（--heat-1..12，rank1最热 → rank12最冷）
     顶部「热点标签」与侧栏「全站标签索引」共用，保证同标签同色。
     设计：12 级色相全谱渐变（暖橙 25° → 玫紫 295°），饱和度 60-75%，
     保证相邻等级在浅底（92%）上一眼可辨；文字色深到对应色相的 28-42%，
     对比度始终 ≥ 4.5:1（WCAG AA 大字）。
     ============================================================ */
  --heat-1-bg: hsl( 25 75% 92%);  --heat-1-fg:  hsl( 25 75% 30%);   /* 暖橙：最热 */
  --heat-2-bg: hsl( 45 72% 92%);  --heat-2-fg:  hsl( 45 72% 30%);   /* 金黄 */
  --heat-3-bg: hsl( 75 65% 91%);  --heat-3-fg:  hsl( 75 70% 30%);   /* 黄绿 */
  --heat-4-bg: hsl(105 60% 91%);  --heat-4-fg:  hsl(105 65% 30%);   /* 草绿 */
  --heat-5-bg: hsl(140 58% 91%);  --heat-5-fg:  hsl(140 60% 30%);   /* 翠绿 */
  --heat-6-bg: hsl(170 60% 91%);  --heat-6-fg:  hsl(170 62% 30%);   /* 青绿 */
  --heat-7-bg: hsl(190 62% 91%);  --heat-7-fg:  hsl(190 64% 32%);   /* 青 */
  --heat-8-bg: hsl(210 62% 91%);  --heat-8-fg:  hsl(210 64% 34%);   /* 青蓝 */
  --heat-9-bg: hsl(225 60% 92%);  --heat-9-fg:  hsl(225 60% 36%);   /* 蓝 */
  --heat-10-bg: hsl(245 55% 92%); --heat-10-fg: hsl(245 56% 38%);   /* 蓝紫 */
  --heat-11-bg: hsl(270 52% 92%); --heat-11-fg: hsl(270 52% 40%);   /* 紫 */
  --heat-12-bg: hsl(295 48% 92%); --heat-12-fg: hsl(295 48% 42%);   /* 玫紫：最冷 */
}

/* 关闭浏览器滚动锚定（scroll anchoring）：筛选激活时 filterBar 从 display:none 变可见、
   或空状态清空内容区都会导致文档高度变化，浏览器会自动补偿 scrollY 造成"页面跳动"。
   本原型中筛选后应原地不动，故全局关闭，改由 JS 手动控制滚动位置。 */
html { overflow-anchor: none; }

/* [hidden] 防御：自定义 display 规则（如 .btn-ghost 的 inline-flex）默认会盖掉浏览器自带 [hidden]{display:none}，
   导致 el.hidden=true 不真的隐藏。强制恢复语义，否则按钮/容器的显隐切换只在属性层生效、视觉层漏出。*/
[hidden] { display: none !important; }

/* 深色 token：
 * 1) 显式 data-theme="dark" → 恒为深色（手动强制）
 * 2) 自动模式（无 data-theme）且系统偏好深色 → 跟随系统
 * 二者通过下方两处选择器分别命中，避免「浅色系统下也强制深色」的 bug。 */
[data-theme="dark"] {
  --background:        222 14% 10%;    /* 深炭灰近黑：比上版再压 1 档，模块浮起更明显，仍非纯黑 */
  --foreground:        220 13% 80%;    /* 护眼柔灰：暗色主字色降至 80% 明度，长文阅读不刺眼（对比度仍 ~8.5:1，远超 AA 4.5:1） */
  --card:              222 14% 19%;    /* 卡面再抬 3 档，与背景拉开 9 档明度，模块清楚浮起 */
  --card-foreground:   220 13% 80%;
  --border:            220 13% 24%;    /* 边框比卡面更亮，卡片边缘清晰可辨 */
  --line-strong:       220 10% 38%;    /* 暗色下比 --border 更亮一线，保持可见 */
  --primary:           175 84% 40%;
  --primary-foreground:0 0% 100%;
  --secondary:         220 13% 24%;
  --muted:             220 13% 24%;
  --muted-foreground:  220 12% 58%;   /* 次级文字压暗到 58%，与后台暗色字色同步护眼 */
  --accent:            220 14% 17%;   /* hover 底：比卡面略深一档 */
  --popover:           222 14% 22%;    /* 弹层比卡面再高一档，层级最顶 */
  --input:             220 13% 24%;
  --ring:              175 84% 40%;
  --destructive:       0 63% 31%;
  /* 深色模式：标签热度色板（与浅色同色相全谱，bg 压到 ~18–22%、fg 提亮到 ~68–78%，避免黑底刺眼） */
  --heat-1-bg: hsl( 25 55% 18%);  --heat-1-fg: hsl( 25 70% 70%);
  --heat-2-bg: hsl( 45 50% 18%);  --heat-2-fg: hsl( 45 68% 72%);
  --heat-3-bg: hsl( 75 48% 18%);  --heat-3-fg: hsl( 75 65% 72%);
  --heat-4-bg: hsl(105 46% 18%);  --heat-4-fg: hsl(105 62% 72%);
  --heat-5-bg: hsl(140 46% 19%);  --heat-5-fg: hsl(140 60% 74%);
  --heat-6-bg: hsl(170 50% 19%);  --heat-6-fg: hsl(170 62% 74%);
  --heat-7-bg: hsl(190 50% 19%);  --heat-7-fg: hsl(190 64% 74%);
  --heat-8-bg: hsl(210 50% 20%);  --heat-8-fg: hsl(210 64% 76%);
  --heat-9-bg: hsl(225 48% 20%);  --heat-9-fg: hsl(225 60% 76%);
  --heat-10-bg: hsl(245 44% 20%); --heat-10-fg: hsl(245 56% 76%);
  --heat-11-bg: hsl(270 42% 21%); --heat-11-fg: hsl(270 52% 77%);
  --heat-12-bg: hsl(295 40% 22%); --heat-12-fg: hsl(295 48% 78%);
}
@media (prefers-color-scheme: dark) {
  /* 自动模式：系统深色且未强制浅色 → 深色 */
  :root:not([data-theme="light"]) {
    --background:222 14% 10%; --foreground:220 13% 80%; --card:222 14% 19%;
    --card-foreground:220 13% 80%; --border:220 13% 24%; --primary:175 84% 40%;
    --primary-foreground:0 0% 100%; --secondary:220 13% 24%; --muted:220 13% 24%;
    --muted-foreground:220 12% 58%; --accent:220 14% 17%; --popover:222 14% 22%;
    --input:220 13% 24%; --ring:175 84% 40%; --destructive:0 63% 31%;
    /* 标签热度色板（深色自动模式，与显式深色一致） */
    --heat-1-bg: hsl( 25 55% 18%);  --heat-1-fg: hsl( 25 70% 70%);
    --heat-2-bg: hsl( 45 50% 18%);  --heat-2-fg: hsl( 45 68% 72%);
    --heat-3-bg: hsl( 75 48% 18%);  --heat-3-fg: hsl( 75 65% 72%);
    --heat-4-bg: hsl(105 46% 18%);  --heat-4-fg: hsl(105 62% 72%);
    --heat-5-bg: hsl(140 46% 19%);  --heat-5-fg: hsl(140 60% 74%);
    --heat-6-bg: hsl(170 50% 19%);  --heat-6-fg: hsl(170 62% 74%);
    --heat-7-bg: hsl(190 50% 19%);  --heat-7-fg: hsl(190 64% 74%);
    --heat-8-bg: hsl(210 50% 20%);  --heat-8-fg: hsl(210 64% 76%);
    --heat-9-bg: hsl(225 48% 20%);  --heat-9-fg: hsl(225 60% 76%);
    --heat-10-bg: hsl(245 44% 20%); --heat-10-fg: hsl(245 56% 76%);
    --heat-11-bg: hsl(270 42% 21%); --heat-11-fg: hsl(270 52% 77%);
    --heat-12-bg: hsl(295 40% 22%); --heat-12-fg: hsl(295 48% 78%);
  }
  /* 显式选择浅色（即使在深色系统下）→ 保持浅色 */
  :root[data-theme="light"] {
    --background:220 20% 98%; --foreground:222 47% 11%; --card:0 0% 100%;
    --card-foreground:222 47% 11%; --border:214 30% 88%; --primary:175 84% 28%;
    --primary-foreground:0 0% 100%; --secondary:210 40% 96%; --muted:210 40% 96%;
    --muted-foreground:215 16% 42%; --accent:175 84% 94%; --popover:0 0% 100%;
    --input:214 30% 88%; --ring:175 84% 28%; --destructive:0 84% 60%;
  }
}

/* ---------- 基础 ---------- */
* { box-sizing: border-box; }
html { scroll-behavior: smooth; }
body {
  margin: 0;
  font-family: "Inter", -apple-system, BlinkMacSystemFont, "Segoe UI",
    "PingFang SC", "Microsoft YaHei", sans-serif;
  background: hsl(var(--background));
  color: hsl(var(--foreground));
  line-height: 1.7;
  font-size: 15px;
  -webkit-font-smoothing: antialiased;
}
/* 仅对颜色做过渡，避免布局抖动 */
body, .card, .header-inner, .post-card, .side-card, .hero,
.icon-btn, .btn-primary, .btn-ghost, a, .news-item, .tag-cloud a {
  transition: background-color .3s ease, border-color .3s ease, color .3s ease;
}
a { color: inherit; text-decoration: none; }
img { display: block; max-width: 100%; }
.container { max-width: 1200px; margin: 0 auto; padding: 0 20px; }

/* ---------- 顶栏 ---------- */
.site-header {
  position: sticky; top: 0; z-index: 50;
  background: hsl(var(--background) / 0.8);
  backdrop-filter: saturate(180%) blur(12px);
  border-bottom: 1px solid hsl(var(--border));
}
.header-inner { display: flex; align-items: center; justify-content: space-between; gap: 16px; height: 64px; }
.brand {
  display: flex; align-items: center; gap: 9px;
  text-decoration: none; flex-shrink: 0;
  height: 100%;
}
.brand-wordmark {
  font-size: 20px;
  font-weight: 700;
  letter-spacing: -0.025em;
  line-height: 1.2;
  color: hsl(var(--foreground));
}
.brand-accent { color: hsl(var(--primary)); }
.brand-cn { font-size: 0.9em; font-weight: 700; margin-left: 1px; }
.brand-wordmark--footer { font-size: 18px; }

/* ===== 新 Logo：青绿徽章 + VR 头显 + XR研究（深浅自适应） ===== */
.brand { gap: 10px; }
.brand-mark {
  display: inline-flex; align-items: center; justify-content: center;
  width: 1.7em; height: 1.7em; flex-shrink: 0;
}
.brand-mark__svg {
  width: 100%; height: 100%; display: block; overflow: visible;
  filter: drop-shadow(0 2px 5px hsl(var(--primary) / 0.35));
}
.brand-mark__svg .mk-badge { fill: hsl(var(--primary)); }
.brand-mark__svg .mk-shine { fill: #fff; opacity: 0.16; }
.brand-mark__svg .mk-device { fill: none; stroke: #fff; stroke-width: 1.8; }
.brand-mark__svg .mk-lens-w { fill: #fff; }
.brand-mark__svg .mk-strap { fill: none; stroke: #fff; stroke-width: 1.6; stroke-linecap: round; opacity: 0.7; }
.brand-wordmark { letter-spacing: -0.02em; }
.brand-accent { color: hsl(var(--primary)); font-weight: 800; }
.brand-cn-plain { font-weight: 500; color: hsl(var(--foreground)); }
.brand-wordmark--footer .brand-mark,
.footer-brand-block .brand-mark { width: 1.5em; height: 1.5em; }
/* Logo 中文名「动线」：默认用虚线下划线点题（清晰、零风险）；概念版 .brand-dashed--fill 由字形虚线纹理填充 */
.brand-dashed {
  text-decoration: underline dashed;
  text-decoration-color: hsl(var(--primary));
  text-underline-offset: 4px;
  text-decoration-thickness: 2px;
}
.brand-dashed--fill {
  background-image: repeating-linear-gradient(90deg, hsl(var(--primary)) 0 5px, transparent 5px 9px);
  -webkit-background-clip: text;
  background-clip: text;
  color: transparent;
  -webkit-text-fill-color: transparent;
  text-decoration: underline dashed;
  text-decoration-color: hsl(var(--primary));
  text-underline-offset: 4px;
  text-decoration-thickness: 2px;
}

/* 话题导航（桌面端显示） */
.topic-nav {
  display: none;
  align-items: center;
  gap: 2px;
  flex: 1;
  justify-content: center;
  height: 100%;
}
.topic-nav a {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  min-height: 34px;
  width: 64px;
  padding: 8px 4px;
  border-radius: 8px;
  font-size: 14px;
  font-weight: 700;
  line-height: 1;
  color: hsl(var(--primary));
  transition: background-color .2s, color .2s;
  white-space: nowrap;
}
.topic-nav a:hover { background: hsl(var(--muted)); color: hsl(var(--primary)); }
.topic-nav a.is-active { background: hsl(var(--primary)); color: #fff; font-weight: 700; }
/* 类目入口（报告/百科）：无 # 前缀，与话题标签共用文字按钮骨架；用暖金色区分频道入口与内容标签 */
.topic-nav a.cat-link {
  color: hsl(35 90% 30%);
  font-weight: 800;
}
.topic-nav a.cat-link:hover { color: hsl(35 95% 22%); background: hsl(var(--muted)); }
/* 深色模式：暖金色提亮，避免黯淡 */
[data-theme="dark"] .topic-nav a.cat-link,
[data-theme="dark"] .topic-nav a.cat-link:hover { color: hsl(43 95% 68%); }
@media (prefers-color-scheme: dark) {
  :root:not([data-theme="light"]) .topic-nav a.cat-link,
  :root:not([data-theme="light"]) .topic-nav a.cat-link:hover { color: hsl(43 95% 68%); }
}
/* 类目与话题标签之间的分隔 */
.topic-nav .nav-sep { width: 1px; height: 18px; background: hsl(var(--border)); margin: 0 4px; }

.header-actions { display: flex; align-items: center; gap: 8px; flex-shrink: 0; }
.search-form { display: none; }
.search-box { position: relative; }
.search-icon {
  position: absolute; right: 12px; left: auto; top: 50%; transform: translateY(-50%);
  width: 16px; height: 16px; color: hsl(var(--muted-foreground));
}
.search-box input {
  height: 40px; width: 192px; border-radius: 12px;
  border: 1px solid hsl(var(--border));
  background: hsl(var(--muted) / 0.5);
  padding: 0 36px 0 16px;
  font-size: 14px;
  color: hsl(var(--foreground));
  outline: none;
}
.search-box input::placeholder { color: hsl(var(--muted-foreground)); }
.search-box input:focus {
  border-color: hsl(var(--primary));
  box-shadow: 0 0 0 1px hsl(var(--primary));
}
.icon-btn {
  display: inline-flex; align-items: center; justify-content: center;
  width: 40px; height: 40px; border-radius: 12px; border: 1px solid transparent;
  background: transparent; color: hsl(var(--foreground)); cursor: pointer;
  transition: background-color .2s, color .2s;
}
.icon-btn:hover { background: hsl(var(--muted)); }
.theme-toggle { color: hsl(var(--primary)); }
.menu-btn { display: none; }

@media (min-width: 1024px) {
  .topic-nav { display: flex; }
  .search-form { display: block; }
  .search-box input { width: 224px; }
}
@media (max-width: 1023px) {
  .menu-btn { display: inline-flex; }
}

/* ---------- 主栅格：Hero 占满整行（一大多小横向铺开），侧栏顺延下移到 Hero 下缘右侧 ---------- */
.main-grid {
  display: grid;
  grid-template-columns: 1fr 280px;
  grid-template-areas:
    "hero hero"
    "content sidebar";
  gap: 24px;
  padding-top: 28px;
  padding-bottom: 48px;
  align-items: stretch;
}
.hero { grid-area: hero; }
.content { grid-area: content; }
.sidebar { grid-area: sidebar; align-self: stretch; }

/* ---------- 卡片通用 ---------- */
.card {
  background: hsl(var(--card)); border: 1px solid hsl(var(--border));
  border-radius: var(--radius);
}

/* ---------- Hero（一大两小） ---------- */
.hero-grid {
  display: grid;
  grid-template-columns: 1.7fr 1fr;
  gap: 20px;
  padding-bottom: 24px;
  margin-bottom: 10px;
}
/* 大图轮播：底图铺满 + 文字叠层，3 张 slide 淡入淡出切换 */
.hero-main {
  position: relative;
  min-height: 360px;
  border-radius: var(--radius);
  overflow: hidden;
  cursor: pointer;
}
.hero-main:focus-visible { outline: 3px solid hsl(var(--ring)); outline-offset: 2px; }
.hero-slides { position: absolute; inset: 0; }
.hero-slide {
  position: absolute; inset: 0; z-index: 0;
  display: flex; align-items: flex-end;
  opacity: 0; visibility: hidden;
  transform: scale(1.02);
  transition: opacity .6s ease, transform .6s ease, visibility 0s linear .6s;
}
.hero-slide.is-active { opacity: 1; visibility: visible; z-index: 1; transform: none; transition: opacity .6s ease, transform .6s ease, visibility 0s; }
.hero-slide .hero-bg {
  position: absolute; inset: 0; z-index: 0;
  width: 100%; height: 100%; object-fit: cover;
  /* 大图高级动效：默认轻微放大（避免缩放露白），悬停时缓慢「推近」（Ken Burns 轻量版），
     配合 brightness/saturate 微调，比整体位移在大表面上更显高级、不廉价。 */
  transform: scale(1.03);
  transition: transform .9s ease, filter .5s ease;
}
.hero-main:hover .hero-bg { transform: scale(1.08); filter: brightness(1.05) saturate(1.05); }
.hero-slide .hero-scrim {
  position: absolute; inset: 0; z-index: 1;
  background: linear-gradient(to top,
    rgba(0,0,0,0.82) 0%,
    rgba(0,0,0,0.45) 42%,
    rgba(0,0,0,0.10) 100%);
}
.hero-slide .badge {
  position: absolute; top: 14px; left: 14px; z-index: 2;
  background: hsl(var(--primary)); color: hsl(var(--primary-foreground));
  font-size: 12px; font-weight: 600; padding: 4px 10px; border-radius: 999px;
}
.hero-slide .hero-body {
  position: relative; z-index: 2; color: #fff;
  padding: 28px; display: flex; flex-direction: column; gap: 12px; max-width: 76%;
}
.hero-title { font-size: 26px; line-height: 1.35; margin: 4px 0 0; letter-spacing: -.01em; color: #fff; font-weight: 700; }
.hero-title:last-child { margin-bottom: 0; }
.hero-excerpt { color: rgba(255,255,255,0.85); margin: 0; }
.hero-slide .cat-pill {
  position: absolute; top: 16px; left: 16px; z-index: 2;
  background: hsl(var(--primary)); color: hsl(var(--primary-foreground));
  font-size: 12px; font-weight: 600; padding: 5px 12px; border-radius: 999px;
  box-shadow: 0 2px 8px rgba(0,0,0,.2);
  pointer-events: none;
}
.hero-slide .meta { padding: 0; color: rgba(255,255,255,0.8); }

/* 轮播左右箭头（玻璃质感胶囊 + 居中雪佛龙，居中靠 flex/svg 属性双重保障） */
.hero-arrow {
  position: absolute; top: 50%; transform: translateY(-50%); z-index: 3;
  width: 44px; height: 44px; border: 1px solid rgba(255,255,255,.18); cursor: pointer;
  border-radius: 999px;
  background: rgba(15, 17, 21, .45);
  -webkit-backdrop-filter: blur(6px); backdrop-filter: blur(6px);
  color: #fff;
  display: inline-flex; align-items: center; justify-content: center;
  padding: 0; line-height: 0;
  box-shadow: 0 6px 18px rgba(0,0,0,.28);
  opacity: .75;
  transition: opacity .15s ease, background .15s ease, transform .15s ease;
}
.hero-arrow:hover, .hero-arrow:focus-visible { opacity: 1; background: rgba(15, 17, 21, .7); transform: translateY(-50%) scale(1.04); }
.hero-arrow svg { width: 20px; height: 20px; display: block; stroke: currentColor; fill: none; stroke-width: 2.2; stroke-linecap: round; stroke-linejoin: round; }
.hero-arrow.prev { left: 14px; }
.hero-arrow.next { right: 14px; }

/* 轮播指示点（右下角，当前点拉长） */
.hero-dots {
  position: absolute; right: 16px; bottom: 14px; z-index: 3;
  display: flex; gap: 8px;
}
.hero-dots .dot {
  width: 9px; height: 9px; padding: 0; border: none; cursor: pointer;
  border-radius: 999px; background: rgba(255,255,255,0.55);
  transition: background .2s ease, width .2s ease;
}
.hero-dots .dot.is-active { background: #fff; width: 22px; }
.hero-dots .dot:focus-visible { outline: 2px solid #fff; outline-offset: 2px; }

@media (prefers-reduced-motion: reduce) {
  .hero-slide { transition: opacity .2s ease; transform: none; }
}

/* 右侧两个小卡 */
.hero-side { display: flex; flex-direction: column; gap: 12px; }
.hero-mini {
  display: grid;
  grid-template-columns: 200px 1fr;
  overflow: hidden;
  flex: 1;
  cursor: pointer;
  border-radius: var(--radius);
  transition: transform .2s ease, box-shadow .2s ease;
  will-change: transform;
  /* 默认极浅的呼吸阴影，避免悬停时从"完全平面"突然跳到重阴影 */
  box-shadow: 0 1px 2px rgba(0,0,0,.04),
              0 4px 12px rgba(0,0,0,.04);
}
.hero-mini:hover {
  transform: translateY(-2px);
  /* 双层弥散阴影：大半径低透明度负责氛围，小半径负责贴近地面的暗部 */
  box-shadow: 0 2px 6px rgba(0,0,0,.04),
              0 14px 36px rgba(0,0,0,.10);
}
.hero-mini .mini-media { width: 200px; min-height: 140px; }
.hero-mini .mini-media img { width: 100%; height: 100%; object-fit: cover; }
.hero-mini .mini-body { padding: 16px; display: flex; flex-direction: column; justify-content: center; }
.hero-mini .cat-pill { align-self: flex-start; margin-bottom: 16px; }
.mini-title { font-size: 16px; font-weight: 600; line-height: 1.4; margin: 0 0 8px; }
.hero-mini .meta { padding: 0; }

/* ---------- 分类胶囊 ---------- */
.cat-pill {
  align-self: flex-start; font-size: 12px; font-weight: 600;
  color: hsl(var(--primary)); background: hsl(var(--accent));
  padding: 2px 8px; border-radius: 999px;
}

/* ---------- 区块标题 ---------- */
.block { margin-bottom: 12px; }
.block-head { display: flex; align-items: center; justify-content: space-between; gap: 16px; margin-bottom: 26px; border-left: 3px solid hsl(var(--primary)); padding-left: 10px; }
.block-head__left { display: flex; align-items: baseline; gap: 14px; min-width: 0; }
.block-head h2 { font-size: 19px; margin: 0; letter-spacing: -.01em; }
.block-sub { font-size: 12px; color: hsl(var(--muted-foreground)); margin: 0; white-space: nowrap; }
.head-sep { color: hsl(var(--muted-foreground) / .4); user-select: none; font-weight: 300; }


.search-box--inline input { width: 100%; }
.more { font-size: 13px; color: hsl(var(--muted-foreground)); white-space: nowrap; flex: 0 0 auto; }
.more:hover { color: hsl(var(--primary)); }

/* 首页「观察·分享」标题栏内联搜索框（区别于顶栏浮层搜索） */
.block-head__right { display: flex; align-items: center; gap: 12px; }
.industry-search { display: flex; align-items: center; gap: 8px; }
.is-field {
  display: flex; align-items: center; gap: 6px;
  height: 36px; padding: 0 10px;
  border: 1px solid hsl(var(--border));
  border-radius: 8px;
  background: hsl(var(--card));
  transition: border-color .15s ease, box-shadow .15s ease;
}
.is-field:focus-within { border-color: hsl(var(--primary)); box-shadow: 0 0 0 3px hsl(var(--primary) / .12); }
.is-icon { display: inline-flex; color: hsl(var(--muted-foreground)); flex: 0 0 auto; }
.is-input { width: 150px; border: 0; outline: 0; background: transparent; font-size: 13px; color: hsl(var(--foreground)); }
.is-input::placeholder { color: hsl(var(--muted-foreground)); }
.is-actions { display: flex; gap: 6px; }
.is-btn {
  height: 36px; padding: 0 14px; border-radius: 8px;
  font-size: 13px; font-weight: 600; cursor: pointer;
  border: 1px solid transparent; white-space: nowrap;
  transition: filter .15s ease, background .15s ease, border-color .15s ease;
}
.is-btn--global { background: hsl(var(--primary)); color: hsl(var(--primary-foreground)); }
.is-btn--global:hover { filter: brightness(1.05); }
.is-btn--tags { background: transparent; border-color: hsl(var(--primary) / .5); color: hsl(var(--primary)); }
.is-btn--tags:hover { background: hsl(var(--primary) / .08); }
.is-btn:focus-visible { outline: 2px solid hsl(var(--primary) / .5); outline-offset: 1px; }
@media (max-width: 720px) {
  .block-head { flex-wrap: wrap; }
  .block-head__right { width: 100%; justify-content: space-between; }
  .industry-search { flex: 1; min-width: 0; }
  .is-field { flex: 1; min-width: 0; }
  .is-input { width: 100%; }
}

/* ---------- 实时动态：Top3 卡片 + 后 3 条列表（方案 B） ---------- */
.realtime { margin: 0; }

/* 实时·动态 → 开启信息瀑布：整宽显眼 CTA（核心入口，进入全部资讯大流） */
.feed-cta {
  display: flex; align-items: center; gap: 14px;
  margin: 24px 0 2px; padding: 18px 24px;
  border-radius: 16px; text-decoration: none; color: #fff;
  background:
    radial-gradient(130% 150% at 0% 0%, rgba(255,255,255,.20), transparent 52%),
    linear-gradient(100deg, #2c66c4 0%, #378ADD 46%, #57aee4 100%);
  box-shadow: 0 12px 30px -10px rgba(55,138,221,.55);
  position: relative; overflow: hidden;
  transition: transform .25s ease, box-shadow .25s ease;
}
.feed-cta:hover { transform: translateY(-2px); box-shadow: 0 18px 42px -12px rgba(55,138,221,.78); }
.feed-cta::after {
  content: ""; position: absolute; inset: 0;
  background: linear-gradient(105deg, transparent 32%, rgba(255,255,255,.30) 50%, transparent 68%);
  transform: translateX(-130%); transition: transform .7s ease;
}
.feed-cta:hover::after { transform: translateX(130%); }
.feed-cta-icon {
  flex: 0 0 auto; display: grid; place-items: center;
  width: 44px; height: 44px; border-radius: 12px;
  background: rgba(255,255,255,.16); color: #fff;
}
.feed-cta-icon svg { width: 24px; height: 24px; }
.feed-cta-text {
  flex: 1 1 auto; font-size: 19px; font-weight: 800; letter-spacing: .4px;
  text-shadow: 0 1px 2px rgba(0,0,0,.18);
}
.feed-cta-arrow {
  flex: 0 0 auto; display: grid; place-items: center;
  color: #fff; transition: transform .25s ease;
}
.feed-cta-arrow svg { width: 22px; height: 22px; }
.feed-cta:hover .feed-cta-arrow { transform: translateX(6px); }
.rt-featured {
  display: grid; grid-template-columns: repeat(3, 1fr); gap: 16px;
  margin-bottom: 16px;
}
.rt-card {
  position: relative; overflow: hidden;
  display: flex; flex-direction: column; gap: 12px;
  background: linear-gradient(180deg, hsl(var(--card)) 50%, hsl(var(--primary) / 0.12));
  border: 1px solid hsl(var(--border));
  border-radius: 14px; padding: 16px 16px 14px;
  transition: border-color .2s, transform .2s, box-shadow .2s;
}
.rt-cat { margin: 0; }
.rt-tags { display: flex; flex-wrap: nowrap; align-items: center; gap: 6px; overflow: hidden; max-height: 26px; }
.rt-excerpt {
  font-size: 13px; line-height: 1.55; color: hsl(var(--muted-foreground)); margin: 0;
  display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden;
}
.rt-body { display: flex; align-items: flex-start; gap: 10px; }
.rt-content { flex: 1; display: flex; flex-direction: column; gap: 10px; }
.rt-card:hover {
  border-color: hsl(var(--primary));
  transform: translateY(-2px);
  box-shadow: 0 6px 18px hsl(var(--foreground) / 0.08);
}
.rt-num {
  flex-shrink: 0;
  min-width: 26px; height: 26px; padding: 0 7px;
  border-radius: 7px;
  background: hsl(var(--primary));
  color: hsl(var(--primary-foreground));
  font-size: 14px; font-weight: 800; line-height: 26px;
  text-align: center;
  font-variant-numeric: tabular-nums;
}
.rt-title {
  margin: 0; font-size: 15px; font-weight: 700; line-height: 1.35;
  color: hsl(var(--foreground));
  display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden;
}
.rt-title:hover { color: hsl(var(--primary)); }
.rt-meta { padding: 0; gap: 8px; font-size: 11px; color: hsl(var(--muted-foreground)); }
.rt-meta svg { width: 12px; height: 12px; opacity: .8; flex-shrink: 0; }
.rt-rank {
  flex-shrink: 0; width: 24px; height: 24px; border-radius: 6px;
  background: hsl(var(--primary)); color: hsl(var(--primary-foreground));
  font-size: 12px; font-weight: 700; line-height: 24px;
  text-align: center; font-variant-numeric: tabular-nums;
}

.rt-rest {
  list-style: none; margin: 0; padding: 0; border-top: 1px solid hsl(var(--border));
  display: grid; grid-template-columns: 1fr 1fr; grid-template-rows: repeat(3, auto);
  gap: 0 24px;
}
.news-item {
  display: flex; align-items: flex-start; gap: 10px; padding: 13px 4px;
  border-bottom: 1px solid hsl(var(--border)); font-size: 14px;
  min-width: 0;
}
.news-item a {
  flex: 1; min-width: 0; color: hsl(var(--foreground));
  display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical;
  overflow: hidden; line-height: 1.5;
}
.news-item a:hover { color: hsl(var(--primary)); }

/* ---------- 首页卡片列表：规规矩矩网格（CSS Grid，卡片按 DOM 顺序、行对齐） ---------- */
/* 列数由 JS 写入 --wf-cols（桌面：左列 4 列 / 整宽 5 列；平板 2 列；移动 1 列）。
   缩略图统一比例，消除错落；错落瀑布流逻辑保留在 .masonry 供二级列表页使用。 */
.waterfall {
  display: grid;
  grid-template-columns: repeat(var(--wf-cols, 4), 1fr);
  gap: 20px;
  align-items: start;
}
.waterfall > .card,
.waterfall > .post-card { width: 100%; margin: 0; min-width: 0; height: 270px; }
/* 首页卡片：固定总高 300px（铁律——行业·动态与硬件评测卡片尺寸完全一致）。
   缩略图固定 200px 高：两块板块图高一致，不再因正文长短而忽高忽低。
   meta 已移到图片底部叠加，body 只剩标题：弹性填满余下空间 + 垂直居中，让负空间
   变成「刻意的标题区」而非堆叠后的空洞。 */
.waterfall .post-thumb { aspect-ratio: auto !important; flex: 0 0 auto; height: 188px; max-height: 188px; position: relative; }
/* meta 跟随标题贴在 body 下方：浅灰小字、不抢戏，让标题上方呼吸感保留 */
.waterfall .post-body { flex: 1 1 auto; display: flex; flex-direction: column; justify-content: flex-start; padding: 12px 12px 12px; gap: 6px; }
.waterfall .post-body .thumb-meta { font-size: 12px; color: hsl(var(--muted-foreground)); display: flex; align-items: center; gap: 6px; min-width: 0; width: 100%; }
.waterfall .post-body .thumb-meta > span { min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
/* 日期 / 阅读时间固定不压缩，避免被截成半截（作者名已从首页卡片移除） */
.waterfall .post-body .thumb-meta > span:nth-child(1),
.waterfall .post-body .thumb-meta > span:nth-child(3) { flex-shrink: 0; }
.waterfall .post-body .thumb-meta .dot { flex-shrink: 0; opacity: .5; }

/* ---------- 二级列表页：错落瀑布流（Flex 列容器 + JS 最短列填充，保留原 masonry 逻辑） ---------- */
.masonry { display: flex; gap: 20px; align-items: flex-start; }
.masonry .wf-col { flex: 1; display: flex; flex-direction: column; gap: 20px; }
.masonry .post-card { width: 100%; margin: 0; min-width: 0; display: flex; flex-direction: column; height: 340px; }
/* 列表卡固定 340px 高（与首页「行业·动态」卡片同尺寸量级）；缩略图弹性撑满余下高度、图片完整呈现，不再被正文挤压。版式沿用列表页自身，不照搬首页。 */
.masonry .post-thumb { flex: 1 1 auto; aspect-ratio: auto !important; min-height: 160px; position: relative; }
.masonry .post-body { flex: 0 0 auto; }
.wf-bottom-wrap { grid-column: 1 / -1; padding-top: 20px; }  /* 边栏以下整宽铺满，与边栏最后一个卡片保持 20px 间距 */
@media (max-width: 1024px) { .wf-bottom-wrap { display: none; } }  /* 平板/移动不分区，wfBottom 并入 wfTop */
@media (max-width: 640px) {
  .waterfall, .masonry { gap: 16px; }
}

/* ---------- 行业·动态「查看全部」CTA ---------- */
.feed-more { grid-column: 1 / -1; text-align: center; margin: 22px 0 4px; }
.feed-more .btn-primary { width: auto; padding-left: 28px; padding-right: 28px; }

/* ---------- 首页通栏广告位 ---------- */
.home-banner {
  width: 100%;
  max-width: 1200px;
  margin: 0 auto;
  padding: 0 16px;
  box-sizing: border-box;
}
.home-banner--top {
  margin-top: 16px;
  margin-bottom: 8px;
}
.home-banner--bottom {
  margin-top: 6px;
  margin-bottom: 0;
}
.home-banner__link {
  display: block;
  width: 100%;
  border-radius: 12px;
  overflow: hidden;
  border: 1px solid hsl(var(--border));
  background: hsl(var(--card));
  position: relative;
}
.home-banner__badge {
  position: absolute;
  top: 10px;
  right: 12px;
  z-index: 2;
  background: rgba(239,68,68,.92);
  color: #fff;
  font-size: 11px;
  font-weight: 700;
  padding: 3px 10px;
  border-radius: 999px;
  line-height: 1;
  pointer-events: none;
  box-shadow: 0 2px 6px rgba(0,0,0,.18);
}
.home-banner__img {
  display: block;
  width: 100%;
  height: auto;
  aspect-ratio: 1200 / 120;
  object-fit: cover;
  background: hsl(var(--muted));
}
.home-banner--top .home-banner__img { aspect-ratio: 1200 / 100; }

@media (max-width: 640px) {
  .home-banner { padding: 0 12px; }
  .home-banner--top { margin-top: 12px; }
  .home-banner--bottom { margin-top: 5px; }
  .home-banner__link { border-radius: 8px; }
  .home-banner__img { aspect-ratio: 1200 / 120; }
  .home-banner--top .home-banner__img { aspect-ratio: 1200 / 100; }
}

/* ---------- 广告位（页脚上方信息流底部） ---------- */
/* 底部 CTA 条：背景随主题（浅色=白卡 / 深色=深卡），不再固定深蓝 */
.cta-strip {
  margin-top: 6px;
  padding: 22px 24px;
  border-top: 1px solid hsl(var(--primary) / .25);
  border-bottom: 1px solid hsl(var(--primary) / .25);
  border-radius: 0;
  background: hsl(var(--card));
}
.cta-row { display: flex; align-items: center; justify-content: space-between; gap: 24px; }
.cta-kicker { margin: 0 0 6px; font-size: 12px; letter-spacing: .1em; text-transform: uppercase; font-weight: 600; color: hsl(var(--primary)); }
.cta-title { margin: 0 0 6px; font-size: 22px; font-weight: 700; color: hsl(var(--foreground)); }
.cta-sub { margin: 0; font-size: 14px; color: hsl(var(--muted-foreground)); }
/* 改造版（双品牌主页）：关注公众号 + 读者群 + 平台矩阵 */
.cta-action { display: flex; align-items: center; gap: 10px; flex-shrink: 0; flex-wrap: wrap; }
.cta-social { display: inline-flex; align-items: center; gap: 8px; margin-left: 4px; }
.cta-social__btn { display: inline-flex; align-items: center; justify-content: center; width: 36px; height: 36px; border-radius: 50%; border: 1px solid hsl(var(--border)); background: hsl(var(--card)); color: hsl(var(--muted-foreground)); cursor: pointer; transition: color .15s, border-color .15s, background .15s; }
.cta-social__btn svg { width: 18px; height: 18px; }
.cta-social__btn:hover { color: #fff; }
.cta-social__btn--xhs:hover { background: #FF2442; border-color: #FF2442; }
.cta-social__btn--bili:hover { background: #FB7299; border-color: #FB7299; }
.cta-social__btn--douyin:hover { background: #000; border-color: #000; }
.toast { position: fixed; left: 50%; bottom: 32px; transform: translateX(-50%) translateY(16px); background: hsl(var(--foreground)); color: hsl(var(--background)); padding: 10px 18px; border-radius: 999px; font-size: 14px; font-weight: 600; box-shadow: 0 8px 30px rgba(0,0,0,.18); opacity: 0; pointer-events: none; transition: opacity .2s, transform .2s; z-index: 9999; }
.toast.show { opacity: 1; transform: translateX(-50%) translateY(0); }
/* 邮件订阅版（index-1.0 演示页保留）：邮箱输入 + 订阅按钮 */
.cta-form { display: flex; flex-direction: column; gap: 8px; flex-shrink: 0; }
.cta-input-wrap { display: flex; align-items: center; gap: 8px; }
.cta-input {
  width: 260px;
  padding: 10px 14px;
  border: 1px solid hsl(var(--input));
  border-radius: var(--radius);
  background: hsl(var(--background));
  color: hsl(var(--foreground));
  font-size: 14px;
  outline: none;
}
.cta-input::placeholder { color: hsl(var(--muted-foreground) / .7); }
.cta-input:focus { border-color: hsl(var(--primary)); box-shadow: 0 0 0 2px hsl(var(--primary) / .15); }
.cta-note { margin: 0; font-size: 12px; color: hsl(var(--muted-foreground) / .8); }
.cta-btn {
  padding: 10px 20px;
  border: none;
  border-radius: var(--radius);
  background: hsl(var(--primary));
  color: hsl(var(--primary-foreground));
  font-size: 14px; font-weight: 600;
  cursor: pointer;
  transition: filter .15s ease;
  white-space: nowrap;
}
.cta-btn:hover { filter: brightness(1.08); }
.cta-btn--ghost {
  background: transparent;
  color: hsl(var(--primary));
  border: 1px solid hsl(var(--primary) / .4);
}
.cta-btn--ghost:hover { background: hsl(var(--primary) / .08); filter: none; }
@media (max-width: 640px) {
  .cta-row { flex-direction: column; align-items: flex-start; gap: 14px; }
  .cta-action { width: 100%; }
  .cta-form { width: 100%; }
  .cta-input-wrap { width: 100%; }
  .cta-input { flex: 1 1 auto; width: auto; }
}

.post-card {
  overflow: hidden;
  display: flex;
  flex-direction: column;
  background: hsl(var(--card));
  border: 1px solid hsl(var(--border));
  border-radius: 18px;
  color: hsl(var(--card-foreground));
  box-shadow: 0 4px 20px rgba(0,0,0,0.08);
  cursor: pointer;
  transition: transform .2s ease, box-shadow .2s ease, background-color .3s ease, border-color .3s ease;
}
.post-card:hover {
  transform: translateY(-2px);
  box-shadow: 0 8px 28px rgba(0,0,0,0.12);
}
.post-thumb { aspect-ratio: 16 / 10; max-height: 340px; overflow: hidden; background: hsl(var(--muted)); }
.post-thumb img { width: 100%; height: 100%; object-fit: cover; transition: transform .4s ease; }
.post-card:hover .post-thumb img { transform: scale(1.05); }
.post-card .post-body { padding: 12px 10px 8px; display: flex; flex-direction: column; gap: 6px; }
/* 瀑布流卡片：文字区撑满剩余空间并垂直居中（解决标题偏上问题） */
.wf-col .post-card .post-body { flex: 0 0 auto; justify-content: center; }
.post-card .cat-pill { align-self: flex-start; margin: 0; font-size: 12px; font-weight: 600; color: hsl(var(--primary)); background: hsl(var(--accent)); padding: 4px 10px; border-radius: 999px; }
.post-title { font-size: 15px; font-weight: 530; line-height: 1.32; letter-spacing: 0.35px; margin: 0; color: hsl(var(--card-foreground)); display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden; min-height: calc(2 * 1.32em); }
.post-card:hover .post-title { color: hsl(var(--primary)); }
.masonry .post-title { font-size: 16px; }
.post-excerpt { font-size: 13px; line-height: 1.55; color: hsl(var(--muted-foreground)); margin: 0; display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden; }
.post-labels { display: flex; flex-wrap: wrap; align-items: center; gap: 6px; max-height: 64px; overflow: hidden; }
.post-labels .cat-pill { align-self: auto; }
.post-tag {
  font-size: 12px; font-weight: 600; line-height: 1; cursor: pointer;
  color: hsl(var(--primary)); background: hsl(var(--accent));
  padding: 3px 8px; border-radius: 6px;
  transition: background-color .15s, color .15s;
  user-select: none;
}
.post-tag:hover, .post-tag.is-active {
  background: hsl(var(--primary)); color: hsl(var(--primary-foreground));
}
.post-card .meta { display: flex; align-items: center; gap: 10px; font-size: 12px; color: hsl(var(--muted-foreground)); padding: 0; margin-top: 2px; min-width: 0; }
.post-card .meta > span { min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.post-card .meta svg { width: 12px; height: 12px; opacity: .8; flex-shrink: 0; }

/* ---------- 标签叠加到封面图之上（首页 .waterfall 卡片） ---------- */
.waterfall .post-thumb::after {
  content: ''; position: absolute; inset: 0; z-index: 1; pointer-events: none;
  background: linear-gradient(to bottom, rgba(0,0,0,.42), rgba(0,0,0,0) 38%);
}
.waterfall .post-thumb .post-labels {
  position: absolute; top: 10px; left: 10px; right: 10px; z-index: 2;
  max-width: calc(100% - 20px);
}
/* 叠加在图片上时，分类/全站标签改用实色描边款，压住图片更清晰 */
.waterfall .post-thumb .cat-pill,
.waterfall .post-thumb .post-tag {
  background: hsl(var(--primary)); color: hsl(var(--primary-foreground));
  box-shadow: 0 1px 4px rgba(0,0,0,.28);
}
/* meta 已跟随标题移到 body 下方（详见 .waterfall .post-body .thumb-meta 规则） */

/* 搜索命中片段：仅在筛选态（card.is-search）下出现，替代纯标题匹配，让检索更人性化 */
.post-snippet {
  margin: 2px 0 0;
  font-size: 11px; line-height: 1.4;
  color: hsl(var(--muted-foreground));
  display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical;
  overflow: hidden;
}
.post-snippet mark, .post-title mark {
  background: hsl(var(--primary) / 0.16);
  color: hsl(var(--primary));
  border-radius: 3px; padding: 0 2px; font-weight: 600;
}

/* ---------- meta ---------- */
.meta { display: flex; align-items: center; gap: 8px; font-size: 11px; color: hsl(var(--muted-foreground)); padding: 9px 14px 0; }
.meta > span { white-space: nowrap; }
.dot { opacity: .5; }



/* ---------- 侧栏 ---------- */
.sidebar { display: flex; flex-direction: column; gap: 18px; }
.side-card { padding: 18px; }
.side-title { font-size: 16px; margin: 0 0 14px; line-height: 1.25; }
.side-title:has(.side-more) { position: relative; padding-right: 48px; }
.side-more { position: absolute; right: 0; top: 50%; transform: translateY(-50%); font-size: 12px; font-weight: 500; color: hsl(var(--primary)); text-decoration: none; }
.side-more:hover { text-decoration: underline; }
.side-sub { font-size: 12px; color: hsl(var(--muted-foreground)); margin: -8px 0 12px; line-height: 1.5; }
.rank-list { list-style: none; margin: 0; padding: 0; counter-reset: r; }
.rank-list li { display: flex; align-items: flex-start; gap: 8px; padding: 7px 0; border-bottom: 1px solid hsl(var(--border)); font-size: 14px; line-height: 1.45; }
.rank-list li:last-child { border-bottom: none; padding-bottom: 6px; }
/* 热门排行面板下沿贴齐最后一张图卡（去掉冗余底内边距） */
#hotRankCard { padding-bottom: 8px; }
.rank-cards { margin-bottom: 0; }
.side-card:has(.rank-list) { padding-bottom: 10px; }

/* 全站标签：滚动跟随（粘性定位）+ 跟随中细阴影 */
#tagCloudCard {
  position: sticky;
  top: 76px;                                       /* 略低于顶部 sticky header */
  max-height: calc(100vh - 96px);
  display: flex;
  flex-direction: column;
  overflow: hidden;                                /* 让内部 tag-cloud 自带滚动 */
  transition: border-color .25s ease, box-shadow .25s ease;
  will-change: transform;
}
/* 标题与标签云之间的呼吸间距（红线位置） */
#tagCloudCard .side-title { margin-bottom: 22px; }
#tagCloudCard .tag-cloud {
  flex: 1 1 auto;
  overflow-y: auto;
  /* 隐藏滚动条但保留滚动能力，避免破坏极简感 */
  scrollbar-width: thin;
  scrollbar-color: hsl(var(--line-strong)) transparent;
}
#tagCloudCard .tag-cloud::-webkit-scrollbar { width: 6px; }
#tagCloudCard .tag-cloud::-webkit-scrollbar-thumb { background: hsl(var(--line-strong)); border-radius: 3px; }
#tagCloudCard .tag-cloud::-webkit-scrollbar-track { background: transparent; }
/* 跟随中：极淡阴影提示「已粘住」，避免顶部硬线 */
#tagCloudCard.is-stuck {
  border-top-color: hsl(var(--line-strong));
  box-shadow: 0 12px 32px rgba(0,0,0,.05);
}
/* 标题右上角的「清空」按钮：仅在有激活标签时显示 */
/* ——「清空」是破坏性动作，视觉权重必须高于 tag chip：实色填充 + 白字 + 阴影，与全站主色同源确保明暗双主题下都清晰 */
#tagCloudCard .side-clear {
  float: right;
  display: none;
  align-items: center; gap: 5px;
  font-size: 13px; font-weight: 700; line-height: 1;
  color: #fff;
  background: hsl(var(--primary));
  border: 1px solid hsl(var(--primary));
  border-radius: 8px;
  padding: 6px 12px;
  cursor: pointer;
  box-shadow: 0 2px 6px hsl(var(--primary) / .22);
  transition: background .15s ease, border-color .15s ease, transform .12s ease, box-shadow .15s ease;
}
#tagCloudCard .side-clear:hover {
  background: hsl(var(--primary) / .88);
  border-color: hsl(var(--primary) / .88);
  transform: translateY(-1px);
  box-shadow: 0 4px 10px hsl(var(--primary) / .32);
}
#tagCloudCard.has-active .side-clear { display: inline-flex; }
#tagCloudCard .side-clear svg { width: 12px; height: 12px; }
.rank-list a { display: block; flex: 1 1 auto; min-width: 0; line-height: 1.45; }
.rank { flex-shrink: 0; width: 20px; height: 20px; border-radius: 6px; background: hsl(var(--accent)); color: hsl(var(--primary)); font-size: 12px; font-weight: 700; display: inline-flex; align-items: center; justify-content: center; }
.rank-list a:hover { color: hsl(var(--primary)); }

/* ---------- 热门排行：前 3 条图卡（广告位） ---------- */
.rank-cards { display: flex; flex-direction: column; gap: 10px; margin-bottom: 14px; }
.rank-card {
  position: relative;
  display: block;
  height: 100px;
  border-radius: 10px;
  overflow: hidden;
  background-size: cover;
  background-position: center;
  text-decoration: none;
  transition: transform .2s ease, box-shadow .2s ease;
}
.rank-card:hover { transform: translateY(-2px); box-shadow: 0 6px 20px hsla(0 0 0 / .25); }
.rank-card-scrim {
  position: absolute; inset: 0;
  background: linear-gradient(transparent 30%, hsla(0 0 0 / .72) 100%);
}
/* 顶部栏：序号 + 标签同一行 */
.rank-card-top {
  position: absolute; top: 8px; left: 10px;
  display: flex; align-items: center; gap: 7px;
  z-index: 1;
}
.rank-badge {
  background: none;
  color: inherit;
  width: auto; height: auto;
  font-size: 17px; line-height: 1;
  display: inline-flex; align-items: center; justify-content: center;
  flex-shrink: 0;
  filter: drop-shadow(0 1px 1px hsla(0 0 0 / .55));
}
.cat-pill-xs { font-size: 10px; padding: 2px 6px; border-radius: 4px; }
.rank-card-body {
  position: absolute; bottom: 0; left: 0; right: 0;
  padding: 10px 12px; z-index: 1;
}
.rank-card-title {
  margin: 4px 0 0; font-size: 13px; font-weight: 600;
  color: #fff; line-height: 1.35;
  display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden;
}

.side-desc { font-size: 13px; color: hsl(var(--muted-foreground)); margin: 0 0 12px; }

.btn-primary {
  display: inline-flex; align-items: center; justify-content: center;
  background: hsl(var(--primary)); color: hsl(var(--primary-foreground));
  border: none; border-radius: 8px; padding: 9px 16px; font-size: 14px; font-weight: 600; cursor: pointer;
}
.btn-primary:hover { filter: brightness(1.08); }
.btn-primary.block { width: 100%; margin-top: 4px; }
/* 次级按钮：描边款，与 btn-primary 并排（加载更多 + 查看全部） */
.btn-ghost {
  display: inline-flex; align-items: center; justify-content: center;
  background: transparent; color: hsl(var(--primary));
  border: 1px solid hsl(var(--primary) / 0.45); border-radius: 8px;
  padding: 9px 16px; font-size: 14px; font-weight: 600; cursor: pointer; text-decoration: none;
}
.btn-ghost:hover { background: hsl(var(--primary) / 0.08); border-color: hsl(var(--primary) / 0.7); }
.tag-cloud {
  display: flex; flex-wrap: wrap; align-items: center; gap: 8px;
  justify-content: center; /* 每行标签水平居中，而非贴左对齐 */
  align-content: flex-start;
  /* 标签颜色由全局 heat-1..12 色阶按热度决定（见 .tag-cloud a.heat-*），此处不再 hardcode */
}
.tag-cloud a {
  --tag-bg: hsl(var(--muted) / 0.45);
  --tag-fg: hsl(var(--muted-foreground));
  display: inline-block;
  border-radius: 999px;
  font-size: 13px;
  font-weight: 500;
  padding: 5px 11px;
  color: var(--tag-fg);
  background: var(--tag-bg);
  transition: filter .15s ease, outline-color .15s ease;
}
/* 标签大小层级：柔和梯度（减弱 xl→xs 的极端跨度，整体更克制统一） */
.tag-cloud a.tag-xs { font-size: 10px; padding: 3px 7px;  font-weight: 500; }
.tag-cloud a.tag-s  { font-size: 11px; padding: 4px 8px;  font-weight: 500; }
.tag-cloud a.tag-m  { font-size: 13px; padding: 5px 10px; font-weight: 500; }
.tag-cloud a.tag-l  { font-size: 15px; padding: 6px 12px; font-weight: 600; }
.tag-cloud a.tag-xl { font-size: 18px; padding: 7px 14px; font-weight: 700; }
/* 标签颜色按热度等级 heat-1..12（暖→冷），顶部与侧栏共用同一套，保证同标签同色 */
.tag-strip a.heat-1, .tag-cloud a.heat-1 { --tag-bg: var(--heat-1-bg); --tag-fg: var(--heat-1-fg); }
.tag-strip a.heat-2, .tag-cloud a.heat-2 { --tag-bg: var(--heat-2-bg); --tag-fg: var(--heat-2-fg); }
.tag-strip a.heat-3, .tag-cloud a.heat-3 { --tag-bg: var(--heat-3-bg); --tag-fg: var(--heat-3-fg); }
.tag-strip a.heat-4, .tag-cloud a.heat-4 { --tag-bg: var(--heat-4-bg); --tag-fg: var(--heat-4-fg); }
.tag-strip a.heat-5, .tag-cloud a.heat-5 { --tag-bg: var(--heat-5-bg); --tag-fg: var(--heat-5-fg); }
.tag-strip a.heat-6, .tag-cloud a.heat-6 { --tag-bg: var(--heat-6-bg); --tag-fg: var(--heat-6-fg); }
.tag-strip a.heat-7, .tag-cloud a.heat-7 { --tag-bg: var(--heat-7-bg); --tag-fg: var(--heat-7-fg); }
.tag-strip a.heat-8, .tag-cloud a.heat-8 { --tag-bg: var(--heat-8-bg); --tag-fg: var(--heat-8-fg); }
.tag-strip a.heat-9, .tag-cloud a.heat-9 { --tag-bg: var(--heat-9-bg); --tag-fg: var(--heat-9-fg); }
.tag-strip a.heat-10, .tag-cloud a.heat-10 { --tag-bg: var(--heat-10-bg); --tag-fg: var(--heat-10-fg); }
.tag-strip a.heat-11, .tag-cloud a.heat-11 { --tag-bg: var(--heat-11-bg); --tag-fg: var(--heat-11-fg); }
.tag-strip a.heat-12, .tag-cloud a.heat-12 { --tag-bg: var(--heat-12-bg); --tag-fg: var(--heat-12-fg); }
/* 侧栏标签云：heat 1~12 合并为 3 档色（热=青绿 / 中=蓝紫 / 冷=紫），弱化五彩斑斓，更柔和统一。
   仅作用于 .tag-cloud，不影响顶部 .tag-strip；引用 --heat-*-bg/fg 变量，暗色主题自动适配。 */
.tag-cloud a.heat-1, .tag-cloud a.heat-2, .tag-cloud a.heat-3, .tag-cloud a.heat-4 { --tag-bg: var(--heat-1-bg);  --tag-fg: var(--heat-1-fg); }
.tag-cloud a.heat-5, .tag-cloud a.heat-6, .tag-cloud a.heat-7, .tag-cloud a.heat-8 { --tag-bg: var(--heat-6-bg);  --tag-fg: var(--heat-6-fg); }
.tag-cloud a.heat-9, .tag-cloud a.heat-10, .tag-cloud a.heat-11, .tag-cloud a.heat-12 { --tag-bg: var(--heat-12-bg); --tag-fg: var(--heat-12-fg); }
.tag-cloud a:hover { filter: brightness(0.94); }
.tag-cloud a.is-active {
  /* 选中态保留标签自身热度色，主色描边 + 内阴影强调，与 hover 调暗区分 */
  outline: 2px solid hsl(var(--primary));
  outline-offset: 1px;
  box-shadow: inset 0 0 0 1px hsl(var(--primary) / 0.5);
  font-weight: 700;
}
/* 顶部标签条选中态：与侧栏同步 */
.tag-strip a.is-active {
  outline: 2px solid hsl(var(--primary));
  outline-offset: 1px;
  box-shadow: inset 0 0 0 1px hsl(var(--primary) / 0.5);
  font-weight: 700;
}
/* 侧栏标题里的数量角标（如 "·30"）：弱化，不抢标题权重 */
.side-count {
  font-size: 12px; font-weight: 500;
  color: hsl(var(--muted-foreground));
  margin-left: 6px;
  font-variant-numeric: tabular-nums;
}
/* 深色标签色由 :root[data-theme="dark"] 与系统深色下的 --heat-1..12 全局变量统一提供，无需按容器单独覆盖 */

/* ===== 主区顶部「热门标签」横条：站内筛选的灵魂入口，不再藏在侧栏 ===== */
.tag-strip-wrap {
  margin-bottom: 32px;
  padding: 14px 10px 18px;
  background: hsl(var(--card));
  border: 1px solid hsl(var(--border));
  border-radius: 12px;
}
.tag-strip-head {
  display: flex; align-items: center; justify-content: space-between; gap: 12px;
  margin-bottom: 14px;
}
.tag-strip-title-group { display: flex; align-items: baseline; gap: 14px; min-width: 0; }
.tag-strip-all {
  flex: 0 0 auto;
  font-size: 12px; font-weight: 500; color: hsl(var(--muted-foreground));
  text-decoration: none; white-space: nowrap;
  transition: color .15s ease;
}
.tag-strip-all:hover { color: hsl(var(--primary)); }
.tag-strip-title { font-size: 15px; font-weight: 700; margin: 0; white-space: nowrap; }
.tag-strip-hint { font-size: 12px; color: hsl(var(--muted-foreground)); white-space: nowrap; }
/* 标签栏右侧搜索框：与顶部 .search-box 同源、双向同步（见 JS） */
.tag-strip-search {
  display: inline-flex; align-items: center; gap: 6px; flex: 0 0 auto;
  height: 34px; padding: 0 12px;
  border-radius: 999px;
  background: hsl(var(--muted));
  border: 1px solid transparent;
  transition: border-color .15s ease, background .15s ease;
}
.tag-strip-search:focus-within { border-color: hsl(var(--primary)); background: hsl(var(--card)); }
.ts-icon { width: 15px; height: 15px; color: hsl(var(--muted-foreground)); flex: 0 0 auto; }
.ts-input {
  border: 0; outline: 0; background: transparent; color: hsl(var(--foreground));
  font-size: 13px; width: 126px; max-width: 40vw;
}
.ts-input::placeholder { color: hsl(var(--muted-foreground)); }
.tag-strip {
  display: flex; flex-wrap: wrap; justify-content: center; align-items: center; gap: 10px;
  /* 单行星级：9 个精选标签一行居中，中心=黄金广告位；窄屏自动换行 */
}
.tag-strip-row {
  display: flex; flex-wrap: wrap; gap: 8px;
  justify-content: center; align-items: center;
  width: 100%;
}
.tag-strip a {
  display: inline-flex; align-items: center;
  font-size: 14px; font-weight: 500;
  padding: 5px 12px;
  border-radius: 999px;
  background: var(--tag-bg, hsl(var(--muted)));
  color: var(--tag-fg, hsl(var(--muted-foreground)));
  border: 1px solid transparent;
  transition: background .15s ease, color .15s ease, border-color .15s ease, transform .12s ease;
}
/* 顶部标签颜色由上方共享 .tag-strip a.heat-* 规则按热度提供（与侧栏同源）。
   2026-08-10 收敛为低饱和青绿-蓝紫（heat-3 ~ heat-7），避免高饱和冷暖跳变造成的杂乱感。 */
/* 顶部热点标签尺寸层级：梯度极克制（最大与最小差 2px），看起来像自然排序而非人工摆位。 */
.tag-strip a.ts-l  { font-size: 15px; padding: 5px 13px; }
.tag-strip a.ts-m  { font-size: 14px; padding: 5px 12px; }
.tag-strip a.ts-s  { font-size: 13px; padding: 4px 10px; }
.tag-strip a.ts-xs { font-size: 12px; padding: 3px 9px; }
.tag-strip a:hover { background: hsl(var(--primary)); color: #fff; }
.tag-strip a:active { transform: scale(0.97); }
.tag-strip a.is-active {
  /* 选中态保留标签自身热度色，只用主色描边 + 内阴影强调，与 hover 主绿底区分 */
  border-color: hsl(var(--primary));
  box-shadow: inset 0 0 0 1px hsl(var(--primary) / 0.55), 0 1px 4px hsl(var(--primary) / 0.22);
  font-weight: 600;
}
@media (max-width: 640px) {
  .tag-strip-hint { display: none; }
  .tag-strip-search { flex: 1 1 auto; }
  .ts-input { width: 100%; }
  .tag-strip-row { justify-content: center; gap: 5px; }
}

/* 侧栏「融资并购」列表：
   前 3 条为「缩略图 + 奖牌 + 标题/meta」的轻图卡，
   4 条起为「数字序号 + 标题/meta」的纯文字列表。
   单条最小高度保持约 64px，模块总高度不增加。 */
.funding-list { list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; gap: 2px; }
.funding-list .funding-empty { font-size: 13px; color: hsl(var(--muted-foreground)); padding: 8px 2px; }
.funding-list .fi-link { display: flex; align-items: center; gap: 10px; padding: 9px 10px; border-radius: 10px; text-decoration: none; transition: background .15s ease; min-height: 64px; }
.funding-list .fi-link:hover { background: hsl(var(--muted)); }
/* 数字序号（4 条及以后） */
.funding-list .fi-rank {
  flex-shrink: 0; width: 20px; height: 20px; border-radius: 6px;
  background: hsl(var(--accent)); color: hsl(var(--primary));
  font-size: 12px; font-weight: 700;
  display: inline-flex; align-items: center; justify-content: center;
}
/* 冠亚季军奖牌（前 3 条）叠加在缩略图左上角 */
.funding-list .fi-featured { position: relative; }
.funding-list .fi-featured .fi-rank {
  position: absolute; top: 6px; left: 6px; z-index: 2;
  width: auto; height: auto; background: none; color: inherit;
  font-size: 17px; line-height: 1;
  filter: drop-shadow(0 1px 1px hsla(0 0 0 / .55));
}
.funding-list .fi-thumb {
  flex-shrink: 0; width: 72px; height: 52px; border-radius: 8px;
  background-size: cover; background-position: center;
}
.funding-list .fi-body {
  flex: 1 1 auto; min-width: 0;
  display: flex; flex-direction: column; gap: 5px;
}
.funding-list .fi-title { font-size: 13.5px; font-weight: 600; line-height: 1.4; color: hsl(var(--foreground)); display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden; }
.funding-list .fi-meta { display: flex; align-items: center; gap: 8px; }
.funding-list .fi-when { font-size: 11.5px; color: hsl(var(--muted-foreground)); font-variant-numeric: tabular-nums; }

/* 小封面图文列表（最新周报 / 最新融资）：缩略图高度明显小于热门排行 (rank-card 100px) */
.thumb-list { list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; gap: 10px; }
.thumb-list .thumb-list__empty { font-size: 13px; color: hsl(var(--muted-foreground)); padding: 8px 2px; }
.thumb-list li { display: flex; align-items: center; gap: 12px; padding: 6px 4px; border-radius: 10px; transition: background .15s ease; }
.thumb-list li:hover { background: hsl(var(--muted)); }
.thumb-list .thumb-list__rank {
  flex-shrink: 0; width: 20px; height: 20px; border-radius: 6px;
  background: hsl(var(--accent)); color: hsl(var(--primary));
  font-size: 12px; font-weight: 700;
  display: inline-flex; align-items: center; justify-content: center;
}
.thumb-list .thumb-list__thumb {
  flex-shrink: 0; width: 96px; aspect-ratio: 16 / 9; max-height: 54px;
  border-radius: 8px;
  background-size: cover; background-position: center;
  background-color: hsl(var(--muted));
}
.thumb-list .thumb-list__body {
  flex: 1 1 auto; min-width: 0;
  display: flex; flex-direction: column; gap: 4px;
}
.thumb-list .thumb-list__title { font-size: 13.5px; font-weight: 600; line-height: 1.4; color: hsl(var(--foreground)); display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden; }
.thumb-list .thumb-list__meta { display: flex; align-items: center; gap: 8px; }
.thumb-list .thumb-list__when { font-size: 11.5px; color: hsl(var(--muted-foreground)); font-variant-numeric: tabular-nums; }

/* 小图文横排卡（最新周报 / 最新融资）：左序号 + 左缩略图 + 右标题 + 时间，与热门排行的封面卡形成视觉节奏差 */
.mini-row-list { list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; gap: 4px; }
.mini-row-list .mini-row-empty { font-size: 13px; color: hsl(var(--muted-foreground)); padding: 8px 2px; }
.mini-row {
  display: grid; grid-template-columns: 60px 1fr; align-items: center; gap: 10px;
  padding: 6px 6px; border-radius: 10px; text-decoration: none; color: inherit;
  transition: background .15s ease;
}
.mini-row:hover { background: hsl(var(--muted)); }
.mini-row__thumb {
  width: 60px; aspect-ratio: 16 / 9; max-height: 44px;
  border-radius: 8px;
  background-size: cover; background-position: center;
  background-color: hsl(var(--muted));
}
.mini-row__body { min-width: 0; display: flex; flex-direction: column; gap: 4px; }
.mini-row__title {
  font-size: 13.5px; font-weight: 400; line-height: 1.45;
  color: hsl(var(--foreground));
  display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden;
}
/* 日期挂在标题末尾（优先保证日期显示，标题过长则 ellipsis 在日期前截断） */
.mini-row__when {
  font-size: 11.5px; color: hsl(var(--muted-foreground)); font-variant-numeric: tabular-nums;
  white-space: nowrap;
}
/* 纯文字变体（去缩略图）：最新融资模块使用 */
.mini-row--text { grid-template-columns: 1fr; }
.mini-row--text .mini-row__thumb { display: none; }
/* 纯文字变体（去缩略图）：最新融资模块使用 */
.mini-row--text { grid-template-columns: 1fr; }
.mini-row--text .mini-row__thumb { display: none; }

/* 紧凑序号：融资等纯文字侧栏模块使用，替代热门排行的实心方块序号（.rank），更省横向/视觉空间。
   仅用品牌色文字 + 等宽数字，无背景方块、无圆角盒子，行高更紧凑。 */
.mini-num {
  flex-shrink: 0;
  display: inline-block;
  min-width: 14px;
  color: hsl(var(--primary));
  font-size: 12.5px;
  font-weight: 700;
  font-variant-numeric: tabular-nums;
  line-height: 1.5;
}
/* 序号后的分隔符：默认用中文顿号「、」（母语编号列表分隔，契合中文语境，且与标题末尾的「· 日期」不重复）。
   想换风格改这一处即可：. → 极简科技风；· → 中间点（但与末尾日期的 · 视觉重复，不推荐）。 */
.mini-num::after {
  content: "、";
  margin: 0 3px 0 1px;
}

/* 桌面端：首页侧栏「全站标签索引」高度随内容自然撑开，不硬撑空白。 */
@media (min-width: 1024px) {
  .sidebar .side-card:last-child {
    display: flex;
    flex-direction: column;
  }
  .sidebar .side-card:last-child .tag-cloud {
    flex: 0 0 auto;
    height: auto;
    align-content: flex-start;
  }
}

/* ===== 广告位（后台可控制的统一框架：Hero / 热门排行 / 标签索引 / 行业动态首排） ===== */
.ad-slot{position:relative;display:block;width:100%;border-radius:12px;overflow:hidden;background:var(--card);border:1px solid var(--line);text-decoration:none;color:var(--ink);transition:background .2s,color .2s}
.ad-slot .ad-badge{position:absolute;top:8px;left:8px;z-index:3;background:rgba(13,23,28,.55);color:#fff;font-size:11px;font-weight:600;line-height:1;padding:3px 8px;border-radius:999px;letter-spacing:.5px;backdrop-filter:blur(2px)}
.ad-slot.ad-image{display:block}
.ad-slot.ad-image .ad-img{display:block;width:100%;height:140px;object-fit:cover}
.ad-slot.ad-image .ad-cap{display:block;padding:9px 12px;font-size:13px;font-weight:600}
.ad-slot.ad-text{padding:16px 18px}
.ad-slot.ad-text .ad-title{font-size:14px;font-weight:700}
.ad-slot.ad-html{padding:8px}
.ad-slot:hover{filter:brightness(.98)}
.side-card .ad-slot{margin-top:4px}
/* Hero 广告：填满主视觉区（.hero-main 已 position:relative;min-height:360px） */
.hero-ad{position:absolute;inset:0}
.hero-ad .ad-slot{height:100%}
.hero-ad .ad-slot.ad-image .ad-img{height:100%}
.hero-ad .ad-slot.ad-html{min-height:100%}
/* 行业·动态首排通栏广告：跨满整行（.waterfall 为 repeat(4,1fr) 网格） */
.waterfall > .ad-banner{grid-column:1 / -1;min-height:270px}
.waterfall > .ad-banner .ad-slot{height:100%;min-height:270px}
.waterfall > .ad-banner .ad-slot.ad-image .ad-img{height:100%;object-fit:cover}
.waterfall > .ad-banner .ad-slot.ad-html{min-height:270px}

/* ===== 信息流筛选条：激活时显示在瀑布上方，含当前条件 chip + 清除 ===== */
.filter-bar {
  display: flex; align-items: center; gap: 10px; flex-wrap: wrap;
  padding: 12px 16px; margin-bottom: 32px;
  background: hsl(var(--accent)); border: 1px solid hsl(var(--border));
  border-left: 3px solid hsl(var(--primary));
  border-radius: 12px;
  box-shadow: 0 1px 3px hsl(var(--foreground) / 0.06);
}
.filter-bar[hidden] { display: none; }
.filter-label { font-size: 13px; font-weight: 600; color: hsl(var(--muted-foreground)); flex-shrink: 0; }
.filter-chips { display: flex; align-items: center; gap: 8px; flex-wrap: wrap; flex: 1; }
.chip {
  display: inline-flex; align-items: center; gap: 6px;
  font-size: 13px; font-weight: 500;
  padding: 4px 10px; border-radius: 999px; cursor: pointer;
  color: #fff; background: hsl(var(--primary));
  border: none; transition: filter .15s ease;
}
.chip:hover { filter: brightness(1.08); }
.chip-x { font-size: 11px; opacity: .85; line-height: 1; }
.filter-clear {
  flex-shrink: 0; font-size: 13px; font-weight: 600; cursor: pointer;
  padding: 5px 12px; border-radius: 8px;
  color: hsl(var(--primary)); background: transparent;
  border: 1px solid hsl(var(--border)); transition: background .15s ease;
}
.filter-clear:hover { background: hsl(var(--muted)); }
.filter-viewall {
  flex-shrink: 0; font-size: 13px; font-weight: 600;
  padding: 5px 12px; border-radius: 8px;
  color: #fff; background: hsl(var(--primary));
  text-decoration: none; transition: filter .15s ease;
}
.filter-viewall:hover { filter: brightness(1.08); }
.empty-state {
  padding: 72px 24px; text-align: center;
  color: hsl(var(--muted-foreground)); font-size: 14px;
  background: hsl(var(--muted)); border-radius: 12px;
  border: 1px dashed hsl(var(--border));
}
.empty-icon { font-size: 44px; line-height: 1; margin-bottom: 16px; opacity: .45; }
.empty-text { font-size: 15px; font-weight: 600; color: hsl(var(--foreground)); margin: 0 0 8px; }
.empty-hint { font-size: 13px; margin: 0; }
.empty-clear { color: hsl(var(--primary)); font-weight: 600; background: none; border: none; padding: 0; font: inherit; cursor: pointer; }
.empty-clear:hover { text-decoration: underline; }
#industryBlock.is-empty .more { display: none; }

/* ---------- 页脚（2026-07-30 锁版 · 品牌居中 + 图标行 + 版权底行） ---------- */
/* ---------- 页脚（精致紧凑版 · 品牌居中+图标行+版权底行） ---------- */
.site-footer {
  border-top: 1px solid hsl(var(--border));
  background: hsl(var(--card));
  margin-top: 24px;
  padding: 32px 0;
  text-align: center;
}
.site-footer > .container {
  width: 100%;
  max-width: 920px;
  margin: 0 auto;
  padding: 0 24px;
  display: flex;
  flex-direction: column;
  justify-content: center;
}

/* 品牌名 */
.brand-wordmark--footer { font-size: 20px; margin: 0; }

/* slogan：紧跟品牌名下方，小字浅色 */
.footer-slogan {
  margin: 8px 0 0;
  font-size: 12.5px;
  line-height: 1.5;
  color: hsl(var(--muted-foreground));
  letter-spacing: 0.02em;
}
.footer-slogan .dot { padding: 0 6px; opacity: .6; }

/* 品牌区：居中堆叠（品牌 / slogan / 社交图标） */
.footer-brand-block {
  display: flex;
  flex-direction: column;
  align-items: center;
}

/* 社交图标行：无背景纯图标（自适应明暗） */
.social-links {
  display: flex;
  gap: 4px;
  justify-content: center;
  margin-top: 12px;
}
.social-btn {
  display: inline-flex; align-items: center; justify-content: center;
  width: 36px; height: 36px; border-radius: 50%;
  background: none; color: hsl(var(--muted-foreground));
  text-decoration: none;
  transition: color .2s, background-color .2s;
}
.social-btn:hover { color: hsl(var(--primary)); background: hsl(var(--primary) / .08); }
.social-btn svg { width: 19px; height: 19px; }

/* 底部 meta 行：只有版权，居中 */
.footer-meta {
  display: flex;
  flex-wrap: wrap;
  justify-content: center;
  align-items: center;
  gap: 4px 12px;
  width: 100%;
  padding-top: 16px;
  margin-top: 14px;
  border-top: 1px solid hsl(var(--border) / .7);
  font-size: 12px;
  color: hsl(var(--muted-foreground));
  opacity: .7;
}
.footer-copy { white-space: nowrap; }
.footer-copy--ga { display: inline-flex; align-items: center; gap: 4px; }
.ga-badge { flex: none; }
.beian-link { color: inherit; text-decoration: none; }
.beian-link:hover { text-decoration: underline; }
/* 页脚信任链接（关于/隐私/条款/免责/联系）—— 上线前由 AI 统一接入 */
.footer-trust {
  display: flex; flex-wrap: wrap; justify-content: center; gap: 6px 10px;
  margin: 4px 0 6px; font-size: 13px;
}
.footer-trust a { color: hsl(var(--muted-foreground)); text-decoration: none; transition: color .15s ease; }
.footer-trust a:hover { color: hsl(var(--primary)); }
.footer-trust .sep { color: hsl(var(--border)); margin: 0 -2px; }

/* ---------- 数据加载状态（C1：上线 WP 后启用，开发态不触发） ---------- */
.data-skeleton { display:grid; grid-template-columns:repeat(auto-fill,minmax(240px,1fr)); gap:16px; }
.sk-card { background:hsl(var(--card)); border:1px solid hsl(var(--border)); border-radius:14px; padding:12px; }
.sk-thumb { aspect-ratio:16/10; border-radius:10px; margin-bottom:10px;
  background:linear-gradient(100deg,hsl(var(--muted)) 30%,hsl(var(--muted-foreground)/.18) 50%,hsl(var(--muted)) 70%);
  background-size:200% 100%; animation:sk-shimmer 1.2s infinite linear; }
.sk-line { height:12px; border-radius:6px; margin-top:8px;
  background:linear-gradient(100deg,hsl(var(--muted)) 30%,hsl(var(--muted-foreground)/.18) 50%,hsl(var(--muted)) 70%);
  background-size:200% 100%; animation:sk-shimmer 1.2s infinite linear; }
.sk-short { width:60%; }
@keyframes sk-shimmer { 0%{background-position:200% 0} 100%{background-position:-200% 0} }
@media (prefers-reduced-motion: reduce) { .sk-thumb,.sk-line { animation:none; } }
.data-error { text-align:center; padding:48px 16px; color:hsl(var(--muted-foreground)); }
.data-error__title { font-size:18px; font-weight:700; color:hsl(var(--foreground)); margin:0 0 6px; }
.data-error__desc { margin:0 0 16px; font-size:14px; }
.data-retry { padding:10px 22px; border:1px solid hsl(var(--primary)); background:transparent; color:hsl(var(--primary));
  border-radius:999px; font-weight:600; cursor:pointer; transition:background .15s ease,color .15s ease; }
.data-retry:hover { background:hsl(var(--primary)); color:#fff; }

/* ---------- 移动抽屉 ---------- */
.drawer-backdrop {
  position: fixed; inset: 0; background: rgba(0,0,0,.4); z-index: 40;
  opacity: 0; pointer-events: none; transition: opacity .25s ease;
}
.drawer-backdrop.open { opacity: 1; pointer-events: auto; }

/* ===================== 响应式 ===================== */
@media (max-width: 980px) {
  .main-grid { grid-template-columns: 1fr; grid-template-areas: "hero" "content" "sidebar"; }
  .hero, .content, .sidebar { grid-area: auto; }
  .hero-grid { grid-template-columns: 1fr; }
  .hero-side { flex-direction: row; }
  .hero-mini { flex: 1; }
}
@media (max-width: 1023px) {
  .topic-nav {
    position: fixed; top: 64px; right: 0; height: calc(100vh - 64px); width: 260px;
    flex-direction: column; align-items: flex-start;
    background: hsl(var(--popover)); border-left: 1px solid hsl(var(--border));
    padding: 16px; gap: 2px; transform: translateX(100%); transition: transform .25s ease; z-index: 45;
  }
  .topic-nav.open { transform: translateX(0); display: flex; }
  .topic-nav a { display: flex; align-items: center; justify-content: flex-start; min-height: 40px; padding: 12px; font-size: 15px; width: 100%; }
}
@media (max-width: 640px) {
  .hero-main { min-height: 280px; }
  .hero-side { flex-direction: column; }
  .hero-mini { grid-template-columns: 110px 1fr; }
  .hero-mini .mini-media { width: 110px; }
  .rt-featured { grid-template-columns: 1fr; }
  .rt-rest { grid-template-columns: 1fr; grid-template-rows: auto; grid-auto-flow: row; }
}
@media (max-width: 520px) {
  .hero-title { font-size: 22px; }
}

/* ---------- 站点自宣条（Hero 下 / 动态上，预留可替换为通栏广告） ---------- */
.promo-strip {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 20px;
  padding: 18px 22px;
  margin-bottom: 40px;
  border: 1px solid hsl(var(--primary) / .25);
  border-radius: var(--radius);
  background: linear-gradient(120deg, hsl(var(--accent) / .55), hsl(var(--accent) / .15));
}
.promo-kicker {
  margin: 0 0 6px;
  font-size: 12px;
  letter-spacing: .1em;
  text-transform: uppercase;
  font-weight: 600;
  color: hsl(var(--primary));
}
.promo-slogan {
  margin: 0 0 6px;
  font-size: 24px;
  line-height: 1.2;
  font-weight: 700;
  color: hsl(var(--foreground));
}
.promo-sub {
  margin: 0;
  font-size: 14px;
  color: hsl(var(--muted-foreground));
}
.promo-tags {
  list-style: none;
  display: flex;
  flex-wrap: wrap;
  gap: 8px;
  margin: 0;
  padding: 0;
  flex-shrink: 0;
}
.promo-tags li {
  font-size: 12px;
  padding: 4px 11px;
  border-radius: 999px;
  border: 1px solid hsl(var(--border));
  background: hsl(var(--card));
  color: hsl(var(--muted-foreground));
}
@media (max-width: 640px) {
  .promo-strip { flex-direction: column; align-items: flex-start; gap: 12px; }
  .promo-tags { display: none; }
  .promo-slogan { font-size: 20px; }
}

/* ---------- 板块按钮区（加载更多 / 收起全部 / 查看全部） ---------- */
/* 板块专属按钮容器：加载更多 / 收起全部 / 查看全部三项并排；窄屏允许换行 */
.section-more { grid-column: 1 / -1; display: flex; flex-wrap: wrap; justify-content: center; align-items: center; gap: 12px; row-gap: 10px; margin: 32px 0 4px; }
.section-more .btn-primary, .section-more .btn-ghost { width: auto; padding-left: 28px; padding-right: 28px; }

/* ---------- 滚动进度条（Mac/Windows 自适应） ---------- */
/* 进度条贴近视口底部；Windows 经典滚动条占右侧 gutter，用 --sb-gutter 右移避让；
   Mac overlay 滚动条 gutter=0，进度条铺满。触发逻辑平台无关，见 index-2.0.html。 */
.scroll-progress {
  position: fixed;
  left: 0;
  right: var(--sb-gutter, 0px);
  bottom: 0;
  height: 3px;
  background: hsl(var(--muted));
  z-index: 50;
  pointer-events: none;
}
.scroll-progress-bar {
  height: 100%;
  width: 0%;
  background: linear-gradient(90deg, hsl(var(--primary)), hsl(var(--primary) / 0.6));
  transition: width .08s linear;
}
/* 行业·动态底部哨兵：滚动接近它即触发「加载更多」（与手动按钮同路径） */
.wf-sentinel {
  height: 1px;
  width: 100%;
  pointer-events: none;
}

/* ---------- 「更多」自动加载的延迟提示（给用户取消窗口） ---------- */
/* 关键：指示条用 position:fixed 脱离文档流，显示/隐藏不再改变页面高度，
   从而避免浏览器因布局抖动重新夹取滚动位置、误触发「上划取消」。固定底部居中，pending 期间始终可见。 */
.more-loading {
  position: fixed;
  left: 50%;
  bottom: 26px;
  transform: translateX(-50%);
  z-index: 60;
  display: flex;
  align-items: center;
  justify-content: center;
  gap: 8px;
  padding: 8px 16px;
  color: hsl(var(--muted-foreground));
  font-size: 13px;
  letter-spacing: 0.02em;
  user-select: none;
  background: hsl(var(--card) / 0.94);
  border: 1px solid hsl(var(--border));
  border-radius: 999px;
  box-shadow: 0 6px 20px hsla(0 0 0 / 0.18);
  backdrop-filter: blur(4px);
  -webkit-backdrop-filter: blur(4px);
}
.more-stop {
  margin-left: 4px;
  padding: 3px 12px;
  font-size: 12px;
  line-height: 1.4;
  color: hsl(var(--primary));
  background: transparent;
  border: 1px solid hsl(var(--border));
  border-radius: 999px;
  cursor: pointer;
  transition: background .15s ease, border-color .15s ease;
}
.more-stop:hover { background: hsl(var(--muted)); border-color: hsl(var(--primary) / 0.45); }
.more-stop:focus-visible { outline: 2px solid hsl(var(--primary) / 0.5); outline-offset: 1px; }
.more-end {
  grid-column: 1 / -1;
  text-align: center;
  padding: 12px 0 4px;
  color: hsl(var(--muted-foreground));
  font-size: 13px;
  letter-spacing: 0.06em;
  user-select: none;
}
.more-loading-dots {
  display: inline-block;
  margin-left: 2px;
}
.more-loading-dots i {
  display: inline-block;
  width: 4px;
  height: 4px;
  margin: 0 1px;
  background: currentColor;
  border-radius: 50%;
  opacity: 0.25;
  animation: more-loading-dot 1.1s infinite ease-in-out both;
}
.more-loading-dots i:nth-child(2) { animation-delay: 0.15s; }
.more-loading-dots i:nth-child(3) { animation-delay: 0.30s; }
@keyframes more-loading-dot {
  0%, 80%, 100% { opacity: 0.25; transform: translateY(0); }
  40%           { opacity: 1;    transform: translateY(-2px); }
}

/* ---------- 公众号二维码弹层（方案 A）：点击「关注公众号」弹出 ---------- */
/* .qr-modal 默认 flex 居中；[hidden] 用更高优先级强制隐藏，避免被 .qr-modal 的 display:flex 覆盖 */
.qr-modal { position: fixed; inset: 0; z-index: 80; display: flex; align-items: center; justify-content: center; }
.qr-modal[hidden] { display: none; }
.qr-modal__mask { position: absolute; inset: 0; background: rgba(15, 23, 20, .55); -webkit-backdrop-filter: blur(2px); backdrop-filter: blur(2px); }
.qr-modal__card {
  position: relative; z-index: 1;
  width: min(320px, 88vw);
  padding: 28px 24px 22px;
  border-radius: 18px;
  background: hsl(var(--card));
  border: 1px solid hsl(var(--border));
  box-shadow: 0 20px 60px rgba(0,0,0,.22);
  animation: qr-pop .25s ease;
}
@keyframes qr-pop { from { opacity: 0; transform: translateY(10px) scale(.96); } to { opacity: 1; transform: none; } }
.qr-modal__close {
  position: absolute; top: 10px; right: 12px;
  width: 30px; height: 30px;
  display: flex; align-items: center; justify-content: center;
  border: none; background: transparent; color: hsl(var(--muted-foreground));
  font-size: 22px; line-height: 1;
  cursor: pointer; border-radius: 8px;
}
.qr-modal__close:hover { background: hsl(var(--muted)); }
.qr-modal__qr { display: flex; justify-content: center; }
.qr-modal__qr img { width: 200px; height: 200px; object-fit: contain; border-radius: 12px; }
.qr-modal__title { margin: 16px 0 4px; font-size: 16px; font-weight: 700; color: hsl(var(--foreground)); text-align: center; }
.qr-modal__sub { margin: 0; font-size: 13px; color: hsl(var(--muted-foreground)); text-align: center; }
.qr-modal__compliance {
  margin: 14px 0 0; padding-top: 10px;
  border-top: 1px solid hsl(var(--border) / .4);
  font-size: 11.5px; line-height: 1.5;
  color: hsl(var(--muted-foreground) / .8);
  text-align: center; letter-spacing: .2px;
}

/* ---------- 搜索浮层（UploadVR 式：点搜索框弹出 · 背景模糊 · 实时分类联想 作者/标签/文章） ---------- */
.search-overlay { position: fixed; inset: 0; z-index: 120; display: flex; justify-content: center; align-items: flex-start; padding: 11vh 16px 16px; }
.search-overlay[hidden] { display: none; }
.search-overlay__backdrop { position: absolute; inset: 0; background: rgba(13, 23, 28, .25); -webkit-backdrop-filter: blur(2px); backdrop-filter: blur(2px); }
.search-overlay__panel { position: relative; z-index: 1; width: min(720px, 94vw); max-height: 80vh; display: flex; flex-direction: column; background: hsl(var(--card)); border: 1px solid hsl(var(--border)); border-radius: 18px; box-shadow: 0 30px 80px rgba(0, 0, 0, .35); overflow: hidden; animation: search-pop .2s ease; }
@keyframes search-pop { from { opacity: 0; transform: translateY(-12px) scale(.98); } to { opacity: 1; transform: none; } }
.search-overlay__bar { display: flex; align-items: center; gap: 12px; padding: 16px 18px; border-bottom: 1px solid hsl(var(--border)); }
.search-overlay__icon { display: inline-flex; align-items: center; justify-content: center; width: 34px; height: 34px; padding: 0; border: 0; border-radius: 10px; background: transparent; color: hsl(var(--muted-foreground)); flex: none; cursor: pointer; transition: color .15s, background .15s; }
.search-overlay__icon svg { width: 22px; height: 22px; }
.search-overlay__icon:hover { color: hsl(var(--primary)); background: hsl(var(--primary) / .10); }
/* 搜索框输入区：芯片容器 + 文本输入（支持标签多选 chip 模式） */
.search-overlay__field { flex: 1; min-width: 0; display: flex; flex-wrap: wrap; align-items: center; gap: 6px; border: 1px solid hsl(var(--border)); border-radius: 10px; padding: 6px 10px; background: hsl(var(--background)); transition: border-color .15s; }
.search-overlay__field:focus-within { border-color: hsl(var(--primary)); }
.search-chips { display: inline-flex; flex-wrap: wrap; align-items: center; gap: 5px; }
.search-chip { display: inline-flex; align-items: center; gap: 4px; padding: 3px 8px 3px 10px; border-radius: 999px; background: hsl(var(--primary) / .12); color: hsl(var(--primary)); font-size: 13px; font-weight: 600; line-height: 1.6; white-space: nowrap; animation: chip-in .15s ease; }
.search-chip--author { background: hsl(25 80% 50% / .12); color: hsl(25 70% 40%); }
@keyframes chip-in { from { opacity: 0; transform: scale(.85); } to { opacity: 1; transform: scale(1); } }
.search-chip__remove { display: inline-flex; align-items: center; justify-content: center; width: 16px; height: 16px; border-radius: 50%; border: 0; background: transparent; color: inherit; opacity: .65; cursor: pointer; font-size: 14px; line-height: 1; padding: 0; transition: opacity .15s, background .15s; }
.search-chip__remove:hover { opacity: 1; background: hsl(var(--primary) / .2); }
.search-overlay__input { flex: 1; min-width: 80px; border: 0; outline: none; background: transparent; font-size: 18px; color: hsl(var(--foreground)); padding: 4px 0; }
.search-overlay__input::placeholder { color: hsl(var(--muted-foreground)); }
.search-overlay__close { border: 0; background: hsl(var(--muted)); color: hsl(var(--muted-foreground)); width: 34px; height: 34px; border-radius: 10px; font-size: 18px; line-height: 1; cursor: pointer; flex: none; }
.search-overlay__close:hover { background: hsl(var(--border)); color: hsl(var(--foreground)); }
.search-overlay__clear { border: 1px solid hsl(var(--border)); background: hsl(var(--muted)); color: hsl(var(--muted-foreground)); height: 30px; padding: 0 12px; border-radius: 9px; font-size: 13px; font-weight: 600; cursor: pointer; flex: none; }
.search-overlay__clear:hover { background: hsl(var(--border)); color: hsl(var(--foreground)); }
.search-overlay__body { overflow-y: auto; padding: 10px 10px 16px; }
.search-overlay__body::-webkit-scrollbar { width: 8px; }
.search-overlay__body::-webkit-scrollbar-thumb { background: hsl(var(--border)); border-radius: 8px; }
.search-group { display: flex; flex-wrap: wrap; align-items: center; padding: 6px 6px 4px; }
.search-group__label { font-size: 11px; font-weight: 700; letter-spacing: .1em; text-transform: uppercase; color: hsl(var(--muted-foreground)); margin: 8px 8px 6px; }
.search-author { display: inline-flex; align-items: center; gap: 6px; padding: 5px 12px; margin: 4px; border: 1px solid hsl(var(--border)); border-radius: 999px; background: transparent; cursor: pointer; color: hsl(var(--foreground)); font-size: 13.5px; transition: border-color .15s, background .15s, opacity .15s; }
.search-author:hover { border-color: hsl(25 80% 50% / .5); background: hsl(25 80% 50% / .08); }
.search-author__avatar { width: 22px; height: 22px; border-radius: 50%; display: flex; align-items: center; justify-content: center; color: #fff; font-weight: 700; font-size: 11px; flex: none; }
.search-tag { display: inline-flex; align-items: center; padding: 7px 14px; margin: 4px; border: 1px solid hsl(var(--border)); border-radius: 999px; background: hsl(var(--muted)); color: hsl(var(--foreground)); font-size: 14px; cursor: pointer; transition: border-color .15s, color .15s, opacity .15s; }
.search-tag:hover { border-color: hsl(var(--primary)); color: hsl(var(--primary)); }
.search-tag.is-selected { opacity: .35; pointer-events: none; border-color: transparent; background: transparent; }
.search-author.is-selected { opacity: .35; pointer-events: none; background: transparent; }
.search-tag:hover { border-color: hsl(var(--primary)); color: hsl(var(--primary)); }
.search-tag span { color: hsl(var(--muted-foreground)); margin-right: 3px; }
.search-post { display: flex; align-items: center; gap: 12px; width: 100%; padding: 8px 10px; border: 0; background: transparent; border-radius: 12px; cursor: pointer; text-align: left; color: hsl(var(--foreground)); }
.search-post:hover { background: hsl(var(--muted)); }
.search-post__thumb { width: 58px; height: 42px; border-radius: 8px; object-fit: cover; flex: none; background: hsl(var(--muted)); }
.search-post__title { font-size: 14px; line-height: 1.4; flex: 1; min-width: 0; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.search-post__title mark { background: hsl(var(--primary) / .22); color: hsl(var(--primary)); border-radius: 3px; padding: 0 2px; }
.search-empty { padding: 44px 16px; text-align: center; color: hsl(var(--muted-foreground)); font-size: 14px; }
.search-overlay__results { display: grid; grid-template-columns: repeat(2, 1fr); gap: 16px; padding: 16px; overflow-y: auto; }
.search-overlay__results .card { margin: 0; }
.search-overlay__hint { padding: 10px 14px; font-size: 12px; color: hsl(var(--muted-foreground)); text-align: center; border-top: 1px solid hsl(var(--border)); }
.search-overlay__hint kbd { font-family: inherit; background: hsl(var(--muted)); border: 1px solid hsl(var(--border)); border-radius: 5px; padding: 1px 6px; margin: 0 2px; }
body.no-scroll { overflow: hidden; padding-right: var(--sb-gutter, 0px); }
@media (max-width: 540px) {
  .search-overlay__results { grid-template-columns: 1fr; }
}

/* 列表页：导航栏筛选芯片（从搜索浮层跳转过来时显示当前激活的标签/关键词过滤） */
.list-filter-chips { display: inline-flex; flex-wrap: wrap; align-items: center; gap: 6px; }
.list-filter-chip { display: inline-flex; align-items: center; gap: 4px; padding: 3px 10px 3px 12px; border-radius: 999px; background: hsl(var(--primary) / .1); color: hsl(var(--primary)); font-size: 12px; font-weight: 600; border: 1px solid hsl(var(--primary) / .25); }
.list-filter-chip__remove { display: inline-flex; align-items: center; justify-content: center; width: 15px; height: 15px; border-radius: 50%; border: 0; background: transparent; color: inherit; opacity: .6; cursor: pointer; font-size: 13px; line-height: 1; padding: 0; }
.list-filter-chip__remove:hover { opacity: 1; background: hsl(var(--primary) / .18); }

/* ============================================================
   🎨 配色切换区（data-palette 属性，一键换风格，无需改结构）
   用法：在 <html> 上加属性即可，例如 <html lang="zh-CN" data-palette="rainbow">
     - 默认（无属性）/ data-palette="cold"    → 冷色版（青绿→蓝紫，当前生效）
     - data-palette="muted"                   → 折中：低饱和暖→冷彩虹
     - data-palette="rainbow"                → 全谱高饱和彩虹
   每个调色板都覆盖「浅色 / 显式深色 / 系统自动深色」三种情形，保证一致。
   上线后若想换风格，只改 index.html / 各列表页 <html> 的一个属性即可，零结构改动。
   ============================================================ */

/* —— 冷色版（青绿→蓝紫，默认） —— */
:root[data-palette="cold"] {
  --heat-1-bg: hsl(168 62% 91%);  --heat-1-fg: hsl(168 76% 28%);
  --heat-2-bg: hsl(176 60% 91%);  --heat-2-fg: hsl(176 72% 30%);
  --heat-3-bg: hsl(184 58% 91%);  --heat-3-fg: hsl(184 68% 32%);
  --heat-4-bg: hsl(192 56% 91%);  --heat-4-fg: hsl(192 64% 34%);
  --heat-5-bg: hsl(200 58% 92%);  --heat-5-fg: hsl(200 62% 36%);
  --heat-6-bg: hsl(208 60% 92%);  --heat-6-fg: hsl(208 60% 38%);
  --heat-7-bg: hsl(216 60% 92%);  --heat-7-fg: hsl(216 58% 40%);
  --heat-8-bg: hsl(224 58% 92%);  --heat-8-fg: hsl(224 56% 42%);
  --heat-9-bg: hsl(232 56% 93%);  --heat-9-fg: hsl(232 54% 44%);
  --heat-10-bg: hsl(240 54% 93%); --heat-10-fg: hsl(240 52% 46%);
  --heat-11-bg: hsl(254 52% 94%); --heat-11-fg: hsl(254 50% 48%);
  --heat-12-bg: hsl(268 50% 94%); --heat-12-fg: hsl(268 48% 50%);
}
:root[data-theme="dark"][data-palette="cold"] {
  --heat-1-bg: hsl(168 50% 18%);  --heat-1-fg: hsl(168 72% 70%);
  --heat-2-bg: hsl(176 48% 18%);  --heat-2-fg: hsl(176 70% 70%);
  --heat-3-bg: hsl(184 46% 18%);  --heat-3-fg: hsl(184 66% 70%);
  --heat-4-bg: hsl(192 46% 18%);  --heat-4-fg: hsl(192 64% 72%);
  --heat-5-bg: hsl(200 48% 19%);  --heat-5-fg: hsl(200 62% 74%);
  --heat-6-bg: hsl(208 50% 19%);  --heat-6-fg: hsl(208 60% 74%);
  --heat-7-bg: hsl(216 50% 20%);  --heat-7-fg: hsl(216 58% 76%);
  --heat-8-bg: hsl(224 48% 20%);  --heat-8-fg: hsl(224 56% 76%);
  --heat-9-bg: hsl(232 46% 20%);  --heat-9-fg: hsl(232 54% 76%);
  --heat-10-bg: hsl(240 44% 21%); --heat-10-fg: hsl(240 52% 77%);
  --heat-11-bg: hsl(254 42% 21%); --heat-11-fg: hsl(254 50% 77%);
  --heat-12-bg: hsl(268 40% 22%); --heat-12-fg: hsl(268 48% 78%);
}
:root:not([data-theme="light"])[data-palette="cold"] {
  --heat-1-bg: hsl(168 50% 18%);  --heat-1-fg: hsl(168 72% 70%);
  --heat-2-bg: hsl(176 48% 18%);  --heat-2-fg: hsl(176 70% 70%);
  --heat-3-bg: hsl(184 46% 18%);  --heat-3-fg: hsl(184 66% 70%);
  --heat-4-bg: hsl(192 46% 18%);  --heat-4-fg: hsl(192 64% 72%);
  --heat-5-bg: hsl(200 48% 19%);  --heat-5-fg: hsl(200 62% 74%);
  --heat-6-bg: hsl(208 50% 19%);  --heat-6-fg: hsl(208 60% 74%);
  --heat-7-bg: hsl(216 50% 20%);  --heat-7-fg: hsl(216 58% 76%);
  --heat-8-bg: hsl(224 48% 20%);  --heat-8-fg: hsl(224 56% 76%);
  --heat-9-bg: hsl(232 46% 20%);  --heat-9-fg: hsl(232 54% 76%);
  --heat-10-bg: hsl(240 44% 21%); --heat-10-fg: hsl(240 52% 77%);
  --heat-11-bg: hsl(254 42% 21%); --heat-11-fg: hsl(254 50% 77%);
  --heat-12-bg: hsl(268 40% 22%); --heat-12-fg: hsl(268 48% 78%);
}

/* —— 折中：低饱和暖→冷彩虹 —— */
:root[data-palette="muted"] {
  --heat-1-bg: hsl(6 45% 92%);    --heat-1-fg: hsl(6 55% 38%);
  --heat-2-bg: hsl(31 48% 92%);   --heat-2-fg: hsl(31 55% 36%);
  --heat-3-bg: hsl(45 45% 91%);   --heat-3-fg: hsl(45 50% 34%);
  --heat-4-bg: hsl(80 38% 91%);   --heat-4-fg: hsl(80 45% 32%);
  --heat-5-bg: hsl(105 38% 91%);  --heat-5-fg: hsl(105 45% 30%);
  --heat-6-bg: hsl(130 36% 91%);  --heat-6-fg: hsl(130 44% 30%);
  --heat-7-bg: hsl(154 38% 91%);  --heat-7-fg: hsl(154 46% 30%);
  --heat-8-bg: hsl(179 40% 91%);  --heat-8-fg: hsl(179 48% 30%);
  --heat-9-bg: hsl(204 45% 92%);  --heat-9-fg: hsl(204 52% 36%);
  --heat-10-bg: hsl(228 44% 93%); --heat-10-fg: hsl(228 50% 40%);
  --heat-11-bg: hsl(253 42% 94%); --heat-11-fg: hsl(253 48% 44%);
  --heat-12-bg: hsl(278 40% 94%); --heat-12-fg: hsl(278 46% 46%);
}
:root[data-theme="dark"][data-palette="muted"] {
  --heat-1-bg: hsl(6 42% 19%);    --heat-1-fg: hsl(6 55% 72%);
  --heat-2-bg: hsl(31 44% 19%);   --heat-2-fg: hsl(31 55% 70%);
  --heat-3-bg: hsl(45 42% 19%);   --heat-3-fg: hsl(45 52% 68%);
  --heat-4-bg: hsl(80 36% 18%);   --heat-4-fg: hsl(80 45% 66%);
  --heat-5-bg: hsl(105 36% 18%);  --heat-5-fg: hsl(105 45% 64%);
  --heat-6-bg: hsl(130 34% 18%);  --heat-6-fg: hsl(130 44% 64%);
  --heat-7-bg: hsl(154 36% 18%);  --heat-7-fg: hsl(154 46% 66%);
  --heat-8-bg: hsl(179 38% 18%);  --heat-8-fg: hsl(179 48% 66%);
  --heat-9-bg: hsl(204 42% 19%);  --heat-9-fg: hsl(204 52% 70%);
  --heat-10-bg: hsl(228 42% 20%); --heat-10-fg: hsl(228 50% 72%);
  --heat-11-bg: hsl(253 40% 20%); --heat-11-fg: hsl(253 48% 74%);
  --heat-12-bg: hsl(278 38% 21%); --heat-12-fg: hsl(278 46% 74%);
}
:root:not([data-theme="light"])[data-palette="muted"] {
  --heat-1-bg: hsl(6 42% 19%);    --heat-1-fg: hsl(6 55% 72%);
  --heat-2-bg: hsl(31 44% 19%);   --heat-2-fg: hsl(31 55% 70%);
  --heat-3-bg: hsl(45 42% 19%);   --heat-3-fg: hsl(45 52% 68%);
  --heat-4-bg: hsl(80 36% 18%);   --heat-4-fg: hsl(80 45% 66%);
  --heat-5-bg: hsl(105 36% 18%);  --heat-5-fg: hsl(105 45% 64%);
  --heat-6-bg: hsl(130 34% 18%);  --heat-6-fg: hsl(130 44% 64%);
  --heat-7-bg: hsl(154 36% 18%);  --heat-7-fg: hsl(154 46% 66%);
  --heat-8-bg: hsl(179 38% 18%);  --heat-8-fg: hsl(179 48% 66%);
  --heat-9-bg: hsl(204 42% 19%);  --heat-9-fg: hsl(204 52% 70%);
  --heat-10-bg: hsl(228 42% 20%); --heat-10-fg: hsl(228 50% 72%);
  --heat-11-bg: hsl(253 40% 20%); --heat-11-fg: hsl(253 48% 74%);
  --heat-12-bg: hsl(278 38% 21%); --heat-12-fg: hsl(278 46% 74%);
}

/* —— 全谱：高饱和彩虹 —— */
:root[data-palette="rainbow"] {
  --heat-1-bg: hsl(6 82% 93%);    --heat-1-fg: hsl(6 78% 34%);
  --heat-2-bg: hsl(31 82% 93%);   --heat-2-fg: hsl(31 76% 34%);
  --heat-3-bg: hsl(50 80% 92%);   --heat-3-fg: hsl(50 75% 32%);
  --heat-4-bg: hsl(75 72% 91%);   --heat-4-fg: hsl(75 70% 30%);
  --heat-5-bg: hsl(100 70% 91%);  --heat-5-fg: hsl(100 72% 28%);
  --heat-6-bg: hsl(125 68% 91%);  --heat-6-fg: hsl(125 68% 28%);
  --heat-7-bg: hsl(150 70% 90%);  --heat-7-fg: hsl(150 70% 26%);
  --heat-8-bg: hsl(175 72% 90%);  --heat-8-fg: hsl(175 72% 26%);
  --heat-9-bg: hsl(200 76% 92%);  --heat-9-fg: hsl(200 74% 32%);
  --heat-10-bg: hsl(225 74% 93%); --heat-10-fg: hsl(225 72% 36%);
  --heat-11-bg: hsl(250 70% 93%); --heat-11-fg: hsl(250 68% 38%);
  --heat-12-bg: hsl(275 70% 93%); --heat-12-fg: hsl(275 66% 38%);
}
:root[data-theme="dark"][data-palette="rainbow"] {
  --heat-1-bg: hsl(6 60% 20%);    --heat-1-fg: hsl(6 75% 72%);
  --heat-2-bg: hsl(31 62% 20%);   --heat-2-fg: hsl(31 75% 70%);
  --heat-3-bg: hsl(50 60% 20%);   --heat-3-fg: hsl(50 72% 68%);
  --heat-4-bg: hsl(75 55% 19%);   --heat-4-fg: hsl(75 70% 66%);
  --heat-5-bg: hsl(100 55% 19%);  --heat-5-fg: hsl(100 70% 64%);
  --heat-6-bg: hsl(125 52% 19%);  --heat-6-fg: hsl(125 68% 64%);
  --heat-7-bg: hsl(150 55% 19%);  --heat-7-fg: hsl(150 70% 66%);
  --heat-8-bg: hsl(175 58% 19%);  --heat-8-fg: hsl(175 72% 66%);
  --heat-9-bg: hsl(200 60% 20%);  --heat-9-fg: hsl(200 74% 70%);
  --heat-10-bg: hsl(225 58% 20%); --heat-10-fg: hsl(225 72% 72%);
  --heat-11-bg: hsl(250 56% 21%); --heat-11-fg: hsl(250 70% 74%);
  --heat-12-bg: hsl(275 54% 21%); --heat-12-fg: hsl(275 68% 74%);
}
:root:not([data-theme="light"])[data-palette="rainbow"] {
  --heat-1-bg: hsl(6 60% 20%);    --heat-1-fg: hsl(6 75% 72%);
  --heat-2-bg: hsl(31 62% 20%);   --heat-2-fg: hsl(31 75% 70%);
  --heat-3-bg: hsl(50 60% 20%);   --heat-3-fg: hsl(50 72% 68%);
  --heat-4-bg: hsl(75 55% 19%);   --heat-4-fg: hsl(75 70% 66%);
  --heat-5-bg: hsl(100 55% 19%);  --heat-5-fg: hsl(100 70% 64%);
  --heat-6-bg: hsl(125 52% 19%);  --heat-6-fg: hsl(125 68% 64%);
  --heat-7-bg: hsl(150 55% 19%);  --heat-7-fg: hsl(150 70% 66%);
  --heat-8-bg: hsl(175 58% 19%);  --heat-8-fg: hsl(175 72% 66%);
  --heat-9-bg: hsl(200 60% 20%);  --heat-9-fg: hsl(200 74% 70%);
  --heat-10-bg: hsl(225 58% 20%); --heat-10-fg: hsl(225 72% 72%);
  --heat-11-bg: hsl(250 56% 21%); --heat-11-fg: hsl(250 70% 74%);
  --heat-12-bg: hsl(275 54% 21%); --heat-12-fg: hsl(275 68% 74%);
}


/* ============================================================
 * 🔝 回到顶部（C4）
 * ============================================================ */
.back-to-top {
  position: fixed; right: 20px; bottom: 20px; z-index: 90;
  width: 44px; height: 44px; border: 0; border-radius: 50%;
  display: flex; align-items: center; justify-content: center;
  background: hsl(var(--primary)); color: #fff; cursor: pointer;
  box-shadow: 0 6px 20px hsl(var(--primary) / .35);
  opacity: 0; transform: translateY(12px); pointer-events: none;
  transition: opacity .2s ease, transform .2s ease, background .15s ease;
}
.back-to-top.is-visible { opacity: 1; transform: translateY(0); pointer-events: auto; }
.back-to-top:hover { background: hsl(var(--primary) / .9); }
.back-to-top:focus-visible { outline: 2px solid hsl(var(--primary)); outline-offset: 3px; }
@media (max-width: 640px) {
  .back-to-top { right: 12px; bottom: 12px; width: 40px; height: 40px; }
}
@media (prefers-reduced-motion: reduce) {
  .back-to-top { transition: none; }
}

/* ============================================================
 * 🔗 分享按钮收敛（B3）：仅保留微信/微博/QQ/X/复制链接，补充微博、QQ 配色
 * ============================================================ */
.share-btn--weibo:hover { color: #e6162d; border-color: #e6162d55; background: #e6162d12; }
.share-btn--qq:hover    { color: #12b7f5; border-color: #12b7f512; background: #12b7f512; }

/* ============================================================
 * 🔎 搜索结果卡阅读时长（B1）
 * ============================================================ */
.search-post__meta {
  display: block; flex: none;
  font-size: 11px; color: hsl(var(--muted-foreground));
  white-space: nowrap;
}

/* ============================================================
 * 📱 320px 真机宽度兜底（D2）：保证无横向溢出、字号可读、按钮可点
 * ============================================================ */
@media (max-width: 360px) {
  :root { --container-pad: 12px; }
  .container { padding: 0 12px; }
  .brand-wordmark { font-size: 18px; }
  .brand-cn { display: none; }
  .header-inner { gap: 8px; }
  .header-actions { gap: 6px; }
  .search-box { width: 100%; }
  .topic-nav a { font-size: 13px; padding: 8px 6px; }
  .board-tab { padding: 7px 14px; font-size: 14px; }
  .post-title { font-size: 15px; }
  .footer-trust { gap: 4px 8px; font-size: 12px; }
  .footer-copy { font-size: 12px; white-space: normal; }
  .share-btns { gap: 8px; }
  .share-btn { width: 38px; height: 38px; }
  .search-post__thumb { width: 48px; height: 36px; }
  .search-overlay__bar { gap: 8px; padding: 12px; }
  .search-overlay__input { font-size: 16px; min-width: 60px; }
}
