/* =========================================================
   51假肢邦 · 博客风组件（大厂设计风）
   依赖 style.css 的 --color-* 主题变量
   ========================================================= */
:root{
  --blog-ink:#1f2329;
  --blog-ink-2:#646a73;
  --blog-ink-3:#8a8f99;
  --blog-line:#e5e6eb;
  --blog-line-2:#f0f1f3;
  --blog-bg:#f7f8fa;
  --blog-card:#ffffff;
  --blog-brand:var(--color-primary);
  --blog-brand-2:var(--color-accent);
  --blog-brand-soft:#eaf2f8;
  --blog-radius:12px;
  --blog-shadow:0 1px 3px rgba(0,0,0,.04), 0 8px 24px rgba(0,0,0,.05);
  --blog-maxw:1200px;
}

/* ---------- 导航（博客风，覆盖 Bootstrap navbar） ---------- */
#mainNav.navbar{
  background:#fff;
  border-bottom:1px solid var(--blog-line);
  box-shadow:none;
  padding-top:.4rem; padding-bottom:.4rem;
}
#mainNav .navbar-brand .brand-icon{
  background:linear-gradient(135deg,var(--color-primary),var(--color-primary-light));
  color:#fff; width:34px; height:34px; border-radius:9px;
  display:inline-flex; align-items:center; justify-content:center; font-size:18px;
}
#navbarMain .nav-link{
  color:var(--blog-ink); font-weight:500; border-radius:8px; padding:.5rem .9rem;
  position:relative; transition:.15s;
}
#navbarMain .nav-link:hover{ color:var(--blog-brand); background:var(--blog-brand-soft); }
#navbarMain .nav-link.active{ color:var(--blog-brand); font-weight:700; }
#navbarMain .nav-link.active::after{
  content:''; position:absolute; left:.9rem; right:.9rem; bottom:.25rem; height:2px;
  background:var(--blog-brand); border-radius:2px;
}
#navbarMain .nav-item.active > .nav-link{ background:transparent !important; color:var(--blog-brand) !important; }
#navbarMain .dropdown-menu{ border:1px solid var(--blog-line); border-radius:10px; box-shadow:var(--blog-shadow); padding:.4rem; margin-top:.4rem; }
#navbarMain .dropdown-item{ border-radius:8px; font-size:14px; padding:.5rem .75rem; }
#navbarMain .dropdown-item:hover{ background:var(--blog-brand-soft); color:var(--blog-brand); }
.btn-nav-cta{ background:var(--blog-brand); border-color:var(--blog-brand); }
.btn-nav-cta:hover{ background:var(--color-primary-dark); border-color:var(--color-primary-dark); }

/* 顶部信息栏微调（博客更轻盈） */
.top-bar{ background:var(--blog-bg); border-bottom:1px solid var(--blog-line); color:var(--blog-ink-2); }

/* ---------- 通用：栏目区块 / 标题 ---------- */
.cat-block{ display:flex; flex-direction:column; gap:18px; }
.cat-head{ display:flex; align-items:center; justify-content:space-between; }
.cat-title{ font-size:21px; font-weight:800; color:var(--blog-ink); display:flex; align-items:center; gap:10px; margin:0; }
.cat-title .bar{ width:4px; height:20px; border-radius:3px; background:var(--blog-brand); }
.cat-more{ font-size:13px; color:var(--blog-ink-3); }
.cat-more:hover{ color:var(--blog-brand); }

/* ---------- 首页 Hero ---------- */
.blog-hero{ background:linear-gradient(180deg,#fff,var(--blog-bg)); padding:60px 0 44px; border-bottom:1px solid var(--blog-line); }
.blog-hero .hero-inner{ max-width:760px; margin:0 auto; padding:0 20px; text-align:center; }
.hero-kicker{ display:inline-block; font-size:13px; font-weight:600; color:var(--blog-brand); background:var(--blog-brand-soft); padding:5px 14px; border-radius:20px; margin-bottom:18px; }
.hero-title{ font-size:38px; font-weight:800; letter-spacing:-.5px; line-height:1.25; color:var(--blog-ink); margin-bottom:14px; }
.hero-sub{ font-size:16px; color:var(--blog-ink-2); margin-bottom:26px; }
.hero-search{ display:flex; align-items:center; gap:8px; max-width:560px; margin:0 auto; background:#fff; border:1px solid var(--blog-line); border-radius:30px; padding:8px 8px 8px 18px; box-shadow:var(--blog-shadow); }
.hero-search i{ color:var(--blog-ink-3); }
.hero-search input{ flex:1; border:0; outline:none; font-size:15px; background:transparent; color:var(--blog-ink); }
.hero-search button{ border:0; background:var(--blog-brand); color:#fff; font-weight:600; padding:10px 24px; border-radius:24px; cursor:pointer; transition:.15s; }
.hero-search button:hover{ background:var(--color-primary-dark); }

/* ---------- 信息流布局（两栏） ---------- */
.blog-feed{ padding:40px 0 64px; }
.blog-feed-inner{ max-width:var(--blog-maxw); margin:0 auto; padding:0 20px; display:grid; grid-template-columns:1fr 320px; gap:32px; align-items:start; }
.blog-feed-inner.full{ grid-template-columns:1fr; max-width:1100px; }
.feed-main{ display:flex; flex-direction:column; gap:40px; min-width:0; }

/* ---------- 文章卡片网格 ---------- */
.grid-3{ display:grid; grid-template-columns:repeat(3,1fr); gap:20px; }
.post-card{ display:flex; flex-direction:column; background:var(--blog-card); border:1px solid var(--blog-line); border-radius:var(--blog-radius); overflow:hidden; transition:.2s; min-width:0; position:relative; }
.post-card:hover{ transform:translateY(-3px); box-shadow:var(--blog-shadow); border-color:#c9d6e0; }
.pc-img{ aspect-ratio:16/10; background-size:cover; background-position:center; background-color:var(--blog-line-2); display:flex; align-items:center; justify-content:center; }
.pc-img .pc-ph{ font-size:34px; color:#c2cdd6; }
.pc-body{ padding:15px 16px 16px; display:flex; flex-direction:column; gap:8px; flex:1; }
.pc-title{ font-size:16px; font-weight:700; line-height:1.45; color:var(--blog-ink); display:-webkit-box; -webkit-line-clamp:2; -webkit-box-orient:vertical; overflow:hidden; margin:0; }
.post-card:hover .pc-title{ color:var(--blog-brand); }
.pc-excerpt{ font-size:13.5px; color:var(--blog-ink-2); line-height:1.6; display:-webkit-box; -webkit-line-clamp:2; -webkit-box-orient:vertical; overflow:hidden; min-height:42px; margin:0; }
.pc-meta{ display:flex; align-items:center; gap:8px; font-size:12.5px; color:var(--blog-ink-3); margin-top:auto; }
.pc-meta .dot{ opacity:.5; }
/* 精选（横向大卡） */
.post-card.featured{ flex-direction:row; }
.post-card.featured .pc-img{ aspect-ratio:auto; width:42%; min-height:220px; flex-shrink:0; }
.post-card.featured .pc-body{ justify-content:center; gap:12px; padding:28px; }
.post-card.featured .pc-title{ font-size:23px; -webkit-line-clamp:3; }
.post-card.featured .pc-excerpt{ font-size:15px; -webkit-line-clamp:3; min-height:0; }
/* 置顶 / 热门 角标 */
.pc-badge{ position:absolute; top:10px; left:10px; z-index:3; display:inline-flex; align-items:center; gap:4px; padding:3px 9px; border-radius:999px; font-size:12px; font-weight:700; line-height:1; color:#fff; box-shadow:0 2px 6px rgba(0,0,0,.18); }
.pc-badge i{ font-size:10px; }
.pc-badge-top{ background:linear-gradient(135deg,#e23a4e,#c81e34); }
.pc-badge-hot{ background:linear-gradient(135deg,#ff9d2e,#ff6a00); }
/* 同一卡片同时存在两个角标时，热门角标靠右排布 */
.post-card .pc-badge + .pc-badge{ left:auto; right:10px; }

/* ---------- 标签 chip ---------- */
.chip{ display:inline-flex; align-items:center; font-size:12px; font-weight:600; padding:3px 10px; border-radius:6px; background:var(--blog-brand-soft); color:var(--blog-brand); width:fit-content; }
.chip-cat{ font-size:11.5px; }
.chip-active{ background:var(--blog-brand); color:#fff; }

/* ---------- 侧边栏 ---------- */
.side{ position:sticky; top:96px; display:flex; flex-direction:column; gap:18px; }
.side-card{ background:var(--blog-card); border:1px solid var(--blog-line); border-radius:var(--blog-radius); padding:18px; }
.side-title{ font-size:15px; font-weight:700; color:var(--blog-ink); margin:0 0 14px; padding-bottom:10px; border-bottom:1px solid var(--blog-line-2); }
.cat-list{ list-style:none; margin:0; padding:0; display:flex; flex-direction:column; gap:2px; }
.cat-list a{ display:flex; justify-content:space-between; align-items:center; padding:10px 12px; border-radius:8px; font-size:14px; color:var(--blog-ink-2); transition:.15s; }
.cat-list a:hover{ background:var(--blog-brand-soft); color:var(--blog-brand); }
.cat-list em{ font-style:normal; font-size:12px; color:var(--blog-ink-3); background:var(--blog-bg); padding:2px 8px; border-radius:10px; }
.hot-list{ list-style:none; counter-reset:h; margin:0; padding:0; display:flex; flex-direction:column; gap:10px; }
.hot-list li{ counter-increment:h; }
.hot-list a{ display:flex; gap:10px; font-size:13.5px; color:var(--blog-ink-2); line-height:1.5; }
.hot-list a::before{ content:counter(h); flex-shrink:0; width:20px; height:20px; border-radius:6px; background:var(--blog-bg); color:var(--blog-ink-3); font-size:12px; font-weight:700; display:flex; align-items:center; justify-content:center; }
.hot-list li:nth-child(1) a::before, .hot-list li:nth-child(2) a::before, .hot-list li:nth-child(3) a::before{ background:var(--blog-brand); color:#fff; }
.hot-list a:hover{ color:var(--blog-brand); }
.side-card.tools .tool-row{ display:flex; align-items:center; gap:12px; padding:10px; border-radius:10px; transition:.15s; }
.side-card.tools .tool-row:hover{ background:var(--blog-brand-soft); }
.side-card.tools .tool-row i{ width:36px; height:36px; border-radius:10px; background:var(--blog-brand-soft); color:var(--blog-brand); display:flex; align-items:center; justify-content:center; font-size:15px; flex-shrink:0; }
.side-card.tools .tool-row b{ display:block; font-size:13.5px; color:var(--blog-ink); }
.side-card.tools .tool-row small{ font-size:12px; color:var(--blog-ink-3); }

/* ---------- 栏目页 ---------- */
.col-hero{ background:#fff; border-bottom:1px solid var(--blog-line); padding:34px 0; }
.col-hero .container, .col-hero .blog-container{ max-width:1100px; margin:0 auto; padding:0 20px; }
.crumbs{ display:flex; align-items:center; gap:8px; font-size:13px; color:var(--blog-ink-3); margin-bottom:12px; flex-wrap:wrap; }
.crumbs a:hover{ color:var(--blog-brand); }
.col-hero h1{ font-size:30px; font-weight:800; color:var(--blog-ink); margin:0; }
.col-hero p{ color:var(--blog-ink-2); margin:8px 0 0; font-size:15px; }
.col-tabs{ display:flex; gap:8px; flex-wrap:wrap; margin-bottom:28px; }
.col-tabs .chip{ padding:8px 18px; font-size:14px; cursor:pointer; }
.col-empty{ text-align:center; padding:60px 0; color:var(--blog-ink-3); }
.col-empty i{ font-size:46px; opacity:.3; display:block; margin-bottom:14px; }
.pager{ display:flex; gap:8px; justify-content:center; margin-top:36px; flex-wrap:wrap; }
.pg{ min-width:38px; height:38px; display:flex; align-items:center; justify-content:center; border:1px solid var(--blog-line); border-radius:8px; font-size:14px; color:var(--blog-ink-2); padding:0 12px; transition:.15s; }
.pg:hover{ border-color:var(--blog-brand); color:var(--blog-brand); }
.pg.active{ background:var(--blog-brand); color:#fff; border-color:var(--blog-brand); }

/* ---------- 广告位样式（槽位容器） ---------- */
/* 横幅位：满宽、限高、居中、与博客卡片留出间距 */
.ad-slot{ clear:both; margin:24px 0; }
.ad-slot-wide{ display:block; text-align:center; }
.ad-slot-wide > *{ max-width:100%; height:auto; display:inline-block; }
/* 侧栏位：100% 宽、卡片风格（白底+圆角+淡边），与现有 side-card 一致 */
.ad-slot-side{ background:var(--blog-card); border:1px solid var(--blog-line); border-radius:var(--blog-radius); padding:14px; text-align:center; min-height:60px; display:flex; align-items:center; justify-content:center; }
.ad-slot-side > *{ max-width:100%; height:auto; display:inline-block; }
/* 首页 Hero 下方广告：与下方 cat-block 拉开间距 */
.ad-slot-home_hero_below{ margin-top:32px; margin-bottom:8px; }
/* 详情页文中广告：在 prose 末尾前，浅色提示边，不喧宾夺主 */
.ad-slot-detail_in_article{ padding:18px 20px; background:#f8f9fa; border-radius:10px; margin:28px 0; border:1px solid #eef0f3; text-align:center; }
.ad-slot-detail_in_article::before{ content:"广告"; display:inline-block; font-size:11px; color:#999; letter-spacing:1px; margin-bottom:6px; }
/* 页脚底部广告：与上方 footer 拉开间距，浅色背景 */
.ad-slot-footer_bottom{ padding:20px 16px; background:#fafbfc; border-top:1px solid #eef0f3; text-align:center; }
.ad-slot-footer_bottom::before{ content:"广告"; display:inline-block; font-size:11px; color:#999; letter-spacing:1px; margin-right:10px; }
/* 列表页中部广告：与上方列表卡片区隔 */
.ad-slot-list_middle{ margin:32px 0; }
/* 列表页顶部广告：Hero 与列表流之间 */
.ad-slot-list_top{ margin:24px auto 0; max-width:var(--blog-maxw); padding:0 20px; }

/* ---------- 内容页（博客阅读风） ---------- */
.post{ max-width:1200px; margin:0 auto; padding:28px 20px 64px; }
.post-inner{ display:grid; grid-template-columns:1fr 300px; gap:40px; align-items:start; }
.post-main{ min-width:0; }
.post-main .crumbs{ margin-bottom:14px; }
.post-h1{ font-size:32px; font-weight:800; line-height:1.35; color:var(--blog-ink); margin:12px 0 16px; letter-spacing:-.3px; overflow-wrap:anywhere; word-break:break-word; }
.post-byline{ display:flex; gap:18px; flex-wrap:wrap; font-size:13.5px; color:var(--blog-ink-3); padding-bottom:18px; border-bottom:1px solid var(--blog-line-2); margin-bottom:22px; }
.post-byline i{ margin-right:5px; }
.post-cover{ aspect-ratio:16/9; background-size:cover; background-position:center; background-color:var(--blog-line-2); border-radius:var(--blog-radius); margin-bottom:26px; }
.prose{ font-size:17px; line-height:1.85; color:#2b2f36; overflow-wrap:anywhere; word-break:break-word; }
.prose p{ margin-bottom:1.2em; }
.prose h2{ font-size:22px; font-weight:800; color:var(--blog-ink); margin:1.6em 0 .7em; }
.prose h3{ font-size:19px; font-weight:700; color:var(--blog-ink); margin:1.3em 0 .6em; }
.prose blockquote{ margin:1.4em 0; padding:14px 20px; border-left:4px solid var(--blog-brand); background:var(--blog-brand-soft); border-radius:0 8px 8px 0; color:var(--blog-ink-2); }
.prose ul, .prose ol{ margin:0 0 1.2em 1.2em; }
.prose li{ margin-bottom:.5em; }
.prose img{ max-width:100%; border-radius:10px; margin:16px 0; }
.prose a{ color:var(--blog-brand); text-decoration:none; border-bottom:1px solid rgba(13,79,124,.3); }
.prose a:hover{ border-bottom-color:var(--blog-brand); }
.prose .video-embed{ position:relative; width:100%; padding-top:56.25%; margin:20px 0; border-radius:10px; overflow:hidden; background:#000; }
.prose .video-embed iframe{ position:absolute; inset:0; width:100%; height:100%; border:0; }
.prose .table-responsive{ width:100%; overflow-x:auto; -webkit-overflow-scrolling:touch; margin:18px 0; }
.prose table{ width:100%; border-collapse:collapse; font-size:15px; background:#fff; }
.prose table td, .prose table th{ border:1px solid var(--blog-line); padding:8px 12px; text-align:left; vertical-align:middle; }
.prose table th, .prose table tr:first-child td{ background:var(--blog-bg); font-weight:700; color:var(--blog-ink); }
/* 移动端防护：长串(URL/代码/英文)换行、媒体限宽，避免正文右侧被裁切（body 的 overflow-x:hidden 仅作兜底） */
.prose pre{ white-space:pre-wrap; word-break:break-word; max-width:100%; overflow-x:auto; }
.prose img, .prose table{ height:auto; }
.post-main .crumbs{ flex-wrap:wrap; }
.post-tags{ display:flex; gap:8px; flex-wrap:wrap; margin-top:30px; padding-top:22px; border-top:1px solid var(--blog-line-2); }
.post-tags .chip{ background:var(--blog-bg); color:var(--blog-ink-2); }
.post-back{ margin-top:28px; }

.post-side{ position:sticky; top:96px; display:flex; flex-direction:column; gap:18px; }
.side-card.related .rel-list{ list-style:none; margin:0; padding:0; display:flex; flex-direction:column; gap:12px; }
.rel-list a{ display:flex; gap:12px; align-items:center; }
.rel-thumb{ width:64px; height:48px; border-radius:8px; background-size:cover; background-position:center; flex-shrink:0; background-color:var(--blog-line-2); }
.rel-t{ font-size:13.5px; color:var(--blog-ink-2); line-height:1.45; display:-webkit-box; -webkit-line-clamp:2; -webkit-box-orient:vertical; overflow:hidden; }
.rel-list a:hover .rel-t{ color:var(--blog-brand); }
.post-share{ display:flex; gap:10px; }
.post-share a{ width:38px; height:38px; border-radius:50%; background:var(--blog-bg); color:var(--blog-ink-2); display:flex; align-items:center; justify-content:center; transition:.15s; }
.post-share a:hover{ background:var(--blog-brand); color:#fff; }

/* 详情页旧样式清理（不再用大渐变 banner） */
.page-banner{ display:none !important; }

/* ---------- 页脚博客微调 ---------- */
.site-footer{ border-top:1px solid var(--blog-line); }
.footer-bottom a{ color:var(--blog-ink-3); }

/* ---------- 响应式 ---------- */
@media(max-width:980px){
  .blog-feed-inner{ grid-template-columns:1fr; }
  .side{ position:static; flex-direction:row; flex-wrap:wrap; }
  .side-card{ flex:1; min-width:240px; }
  .post-inner{ grid-template-columns:1fr; }
  .post-side{ position:static; }
  .post-card.featured{ flex-direction:column; }
  .post-card.featured .pc-img{ width:100%; aspect-ratio:16/10; min-height:0; }
  .grid-3{ grid-template-columns:repeat(2,1fr); }
}
@media(max-width:600px){
  .grid-3{ grid-template-columns:1fr; }
  .hero-title{ font-size:28px; }
  .post-h1{ font-size:25px; }
  .prose{ font-size:16px; }
}

/* 分页（paginate() 生成的 Bootstrap 结构，统一博客品牌色） */
.blog-feed .pagination{ gap:8px; flex-wrap:wrap; justify-content:center; margin:36px 0 0; }
.blog-feed .page-item{ border:0; }
.blog-feed .page-link{ min-width:38px; height:38px; display:flex; align-items:center; justify-content:center; padding:0 12px; border:1px solid var(--blog-line); border-radius:8px; font-size:14px; color:var(--blog-ink-2); background:#fff; transition:.15s; }
.blog-feed .page-link:hover{ border-color:var(--blog-brand); color:var(--blog-brand); background:#fff; }
.blog-feed .page-item.active .page-link{ background:var(--blog-brand); border-color:var(--blog-brand); color:#fff; }
.blog-feed .page-item.active .page-link:hover{ color:#fff; }
.blog-feed .page-item.disabled .page-link{ background:#fafbfc; color:#c2cdd6; border-color:var(--blog-line); }
