/* =========================================================
   拾光 · 纸卡片主题
   纸底 + 卡片 + 柔和投影；纸墨、强调色与明暗全部跟随站点配色。
   ========================================================= */

/* 令牌：--sh-* 只是站点配色令牌的一层别名，不覆盖站点自己的 --bg/--accent。
   预设、自定义色相、亮/暗都由站点写 <html>，这里跟着走即可。 */
html:root:root {
  --sh-accent: var(--accent);
  --sh-accent-deep: var(--accent-read);
  --sh-accent-soft: var(--accent-soft);
  --sh-accent-line: var(--accent-line);
  --sh-paper: var(--bg);
  --sh-card: var(--bg-elev);
  --sh-text: var(--fg);
  --sh-text-soft: var(--fg-soft);
  --sh-muted: var(--muted);
  --sh-faint: var(--muted-soft);
  --sh-line: var(--rule);
  --sh-line-warm: var(--rule);
  --sh-line-strong: var(--rule-strong);
  --sh-row-hover: var(--row-hover);
  --sh-shadow: var(--shadow-sm);
  --sh-shadow-lift: var(--shadow-md);
  --sh-radius: 6px;
  --sh-radius-lg: 8px;
  /* 页头三枚入口的弹窗与按钮的距离：主题切换与配色共用这一档，别各写各的。 */
  --sh-pop-gap: 12px;
  --sh-font: -apple-system, BlinkMacSystemFont, "Segoe UI", "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", "Helvetica Neue", Arial, sans-serif;
}

html:root:root body.sh-body {
  max-width: 880px;
  margin: 0 auto;
  padding: 12px 16px;
  background: var(--sh-paper);
  color: var(--sh-text);
  font-family: var(--sh-font);
  font-size: 14px;
  line-height: 1.65;
  font-kerning: normal;
  font-variant-numeric: tabular-nums;
  text-rendering: optimizeLegibility;
}
body.sh-body::before,
body.sh-body::after { display: none; }

body.sh-body a { text-decoration: none; }
body.sh-body :focus-visible {
  outline: 2px solid var(--sh-accent);
  outline-offset: 3px;
}

body.sh-body .sh-shell { display: block; }
body.sh-body .sh-main { display: block; }
/* 站点默认「素匣」版式会给 main 套一张白纸片；本主题自己用卡片，外壳必须还原成透明。 */
html:root:root body.sh-body main#main {
  width: auto;
  max-width: none;
  margin: 0;
  padding: 0;
  background: none;
  border: 0;
  border-radius: 0;
  box-shadow: none;
}

/* ---------- 页头：横幅 + 独立导航卡 ---------- */
body.sh-body header.site.sh-header {
  padding: 0;
  border: 0;
  background: none;
}

body.sh-body .sh-hero {
  position: relative;
  margin-bottom: 12px;
}
body.sh-body .sh-banner {
  position: relative;
  overflow: hidden;
  background-color: var(--sh-accent);
  background-image:
    radial-gradient(120% 150% at 15% 0%, rgba(0, 0, 0, .05), transparent 60%),
    linear-gradient(135deg, var(--sh-accent) 0%, color-mix(in srgb, var(--sh-accent) 80%, var(--sh-text)) 55%, color-mix(in srgb, var(--sh-accent) 64%, var(--sh-text)) 100%);
  background-size: cover;
  background-position: center;
  color: var(--sh-paper);
  padding: 30px 24px 52px;
  border-radius: var(--sh-radius-lg);
}
body.sh-body .sh-banner::after {
  content: "";
  position: absolute;
  right: -46px;
  bottom: -70px;
  width: 210px;
  height: 210px;
  border-radius: 50%;
  border: 1px solid color-mix(in srgb, var(--sh-paper) 16%, transparent);
  background: color-mix(in srgb, var(--sh-paper) 4%, transparent);
  pointer-events: none;
}
body.sh-body .sh-banner-img::after { display: none; }
/* 有背景图时文字落在暗色蒙版上，固定用白字；没有图时用纸色（亮色下是白、暗色下是深纸）。 */
body.sh-body .sh-banner-img,
body.sh-body .sh-banner-img .sh-banner-title,
body.sh-body .sh-banner-img .sh-banner-title a,
body.sh-body .sh-banner-img .sh-banner-desc { color: #ffffff; }
body.sh-body .sh-banner-img .sh-banner-title a:hover { color: #ffffff; opacity: .92; }
/* 站名：左侧一条纸色细竖线当刊头标尺，域名后缀弱化半档，不再是一整串加粗字母。 */
body.sh-body .sh-brand {
  position: relative;
  z-index: 1;
  padding-left: 14px;
  border-left: 3px solid color-mix(in srgb, var(--sh-paper) 42%, transparent);
}
body.sh-body .sh-banner-title {
  margin: 0 0 6px;
  font-family: var(--sh-font);
  font-size: 28px;
  font-weight: 700;
  line-height: 1.15;
  letter-spacing: -.01em;
  color: var(--sh-paper);
}
body.sh-body .sh-banner-title a { color: var(--sh-paper); transition: opacity .18s ease; }
body.sh-body .sh-banner-title a:hover { color: var(--sh-paper); opacity: .92; }
body.sh-body .sh-banner-title a:hover .sh-brand-suffix { opacity: .95; }
/* 后缀用小一号、轻一档的字重，域名读起来有主次；点和后缀仍贴同一基线。 */
body.sh-body .sh-brand-suffix {
  font-size: .76em;
  font-weight: 500;
  letter-spacing: .02em;
  opacity: .72;
}
body.sh-body .sh-banner-desc {
  margin: 0;
  font-size: 13px;
  line-height: 1.7;
  letter-spacing: .01em;
  color: var(--sh-paper);
  opacity: .82;
}
/* 背景图上文字与蒙版都是固定色：竖线转白、加一点投影，后缀也别压得太暗。 */
body.sh-body .sh-banner-img .sh-brand {
  border-left-color: rgba(255, 255, 255, .5);
  text-shadow: 0 1px 14px rgba(0, 0, 0, .3);
}
body.sh-body .sh-banner-img .sh-brand-suffix { opacity: .82; }

/* 检索 / 主题切换 / 配色三枚入口落在横幅右下角。工具条是横幅的兄弟节点：
   横幅自己要 overflow:hidden 裁装饰圆环，面板挂在工具条上才能向下展开、不被裁掉。 */
body.sh-body .sh-banner-tools {
  position: absolute;
  right: 18px;
  bottom: 12px;
  z-index: 3;
  display: flex;
  align-items: center;
  gap: 2px;
}
body.sh-body .sh-banner-tools .nav-search { margin-left: 0; }
body.sh-body .sh-banner-tools .nav-search-btn,
body.sh-body .sh-banner-tools .nav-search-fallback,
body.sh-body .sh-banner-tools > .pal > summary,
body.sh-body .sh-banner-tools > .theme-pick > summary {
  color: var(--sh-paper);
}
/* 图标颜色要自己做主：站点给展开态定了强调色 .so-ico，叠上半透明浅底后放大镜会糊成一团。 */
body.sh-body .sh-banner-tools .nav-search-btn .so-ico,
body.sh-body .sh-banner-tools .nav-search-fallback .so-ico {
  color: var(--sh-paper);
}
body.sh-body .sh-banner-tools .nav-search-btn:hover,
body.sh-body .sh-banner-tools .nav-search-fallback:hover,
body.sh-body .sh-banner-tools > .pal > summary:hover,
body.sh-body .sh-banner-tools > .pal[open] > summary,
body.sh-body .sh-banner-tools > .theme-pick > summary:hover,
body.sh-body .sh-banner-tools > .theme-pick[open] > summary {
  background: color-mix(in srgb, var(--sh-paper) 18%, transparent);
  color: var(--sh-paper);
}
/* 展开是持续的输入态：保持透明底，图标与常态同一枚纸色。输入框已经摊开了，
   按钮再叠一层底反而把白放大镜压糊（站点给展开态的 so-ico 定的是强调色）。 */
body.sh-body .sh-banner-tools .nav-search-btn[aria-expanded="true"] {
  background: none;
  color: var(--sh-paper);
}
body.sh-body .sh-banner-tools .nav-search-btn[aria-expanded="true"] .so-ico { color: var(--sh-paper); }
/* 背景图上是固定的一层暗蒙版，文字一律白；暗色配色下的纸色是深色，不能跟着走。 */
body.sh-body .sh-banner-img .sh-banner-tools .nav-search-btn,
body.sh-body .sh-banner-img .sh-banner-tools .nav-search-fallback,
body.sh-body .sh-banner-img .sh-banner-tools > .pal > summary,
body.sh-body .sh-banner-img .sh-banner-tools > .theme-pick > summary {
  color: #ffffff;
}
body.sh-body .sh-banner-img .sh-banner-tools .nav-search-btn .so-ico,
body.sh-body .sh-banner-img .sh-banner-tools .nav-search-fallback .so-ico { color: #ffffff; }
body.sh-body .sh-banner-img .sh-banner-tools .nav-search-btn:hover,
body.sh-body .sh-banner-img .sh-banner-tools .nav-search-fallback:hover,
body.sh-body .sh-banner-img .sh-banner-tools > .pal > summary:hover,
body.sh-body .sh-banner-img .sh-banner-tools > .pal[open] > summary,
body.sh-body .sh-banner-img .sh-banner-tools > .theme-pick > summary:hover,
body.sh-body .sh-banner-img .sh-banner-tools > .theme-pick[open] > summary {
  background: rgba(255, 255, 255, .18);
  color: #ffffff;
}
body.sh-body .sh-banner-img .sh-banner-tools .nav-search-btn[aria-expanded="true"] {
  background: none;
  color: #ffffff;
}
body.sh-body .sh-banner-img .sh-banner-tools .nav-search-btn[aria-expanded="true"] .so-ico { color: #ffffff; }

body.sh-body .sh-navcard {
  display: flex;
  align-items: center;
  gap: 10px;
  background: var(--sh-card);
  border-radius: var(--sh-radius);
  padding: 10px 14px;
  margin-bottom: 12px;
  box-shadow: var(--sh-shadow);
}
body.sh-body .sh-nav {
  display: flex;
  flex: 1 1 auto;
  flex-wrap: wrap;
  align-items: center;
  gap: 4px 28px;
  min-width: 0;
}
body.sh-body .sh-nav a {
  color: var(--sh-text);
  font-size: 14px;
  line-height: 1.8;
  padding: 1px 0;
  transition: color .2s ease;
}
body.sh-body .sh-nav a:hover {
  color: var(--sh-accent-deep);
  text-decoration: underline;
  text-underline-offset: 3px;
}
body.sh-body .sh-nav a[aria-current="page"] {
  color: var(--sh-accent-deep);
  font-weight: 600;
}
body.sh-body .sh-nav { transition: opacity .2s ease, visibility .2s ease; }
body.sh-body .sh-nsub { position: relative; }
body.sh-body .sh-nsub > summary {
  display: inline-flex;
  align-items: center;
  gap: 4px;
  padding: 1px 0;
  color: var(--sh-text);
  font-size: 14px;
  line-height: 1.8;
  list-style: none;
  cursor: pointer;
  transition: color .2s ease;
}
body.sh-body .sh-nsub > summary::-webkit-details-marker { display: none; }
body.sh-body .sh-nsub > summary:hover {
  color: var(--sh-accent-deep);
  text-decoration: underline;
  text-underline-offset: 3px;
}
body.sh-body .sh-nsub[data-current="true"] > summary,
body.sh-body .sh-nsub[open] > summary {
  color: var(--sh-accent-deep);
  font-weight: 600;
}
body.sh-body .sh-nsub-caret {
  width: .42em;
  height: .42em;
  border-right: 1.5px solid currentColor;
  border-bottom: 1.5px solid currentColor;
  transform: translateY(-2px) rotate(45deg);
  transition: transform .2s ease;
}
body.sh-body .sh-nsub[open] .sh-nsub-caret { transform: translateY(1px) rotate(225deg); }
body.sh-body .sh-nsub-panel {
  position: absolute;
  top: calc(100% + 8px);
  left: 50%;
  z-index: 30;
  display: flex;
  flex-direction: column;
  gap: 2px;
  min-width: 112px;
  padding: 6px;
  background: var(--sh-card);
  border: 1px solid var(--sh-line-warm);
  border-radius: var(--sh-radius);
  box-shadow: var(--sh-shadow-lift);
  transform: translateX(-50%);
}
body.sh-body .sh-nsub:not([open]) > .sh-nsub-panel { display: none; }
body.sh-body .sh-nsub-panel a {
  display: block;
  padding: 6px 10px;
  border-radius: 4px;
  color: var(--sh-accent);
  font-size: 13px;
  line-height: 1.6;
  white-space: nowrap;
}
body.sh-body .sh-nsub-panel a:hover {
  background: var(--sh-row-hover);
  color: var(--sh-accent-deep);
}
body.sh-body .sh-nsub-panel a[aria-current="page"] {
  background: var(--sh-accent-soft);
  color: var(--sh-accent-deep);
  font-weight: 600;
}
body.sh-body .nav-search {
  position: relative;
  display: inline-flex;
  align-items: center;
  flex: none;
  margin-left: auto;
}
body.sh-body .nav-search-btn,
body.sh-body .nav-search-fallback {
  align-items: center;
  justify-content: center;
  width: 30px;
  height: 30px;
  padding: 0;
  border: 0;
  border-radius: 50%;
  background: none;
  color: var(--sh-accent);
  cursor: pointer;
  transition: background .2s ease, color .2s ease;
}
body.sh-body .nav-search-fallback { margin-left: auto; }
body.sh-body .nav-search-btn:hover,
body.sh-body .nav-search-btn[aria-expanded="true"],
body.sh-body .nav-search-fallback:hover {
  background: var(--sh-accent-soft);
  color: var(--sh-accent-deep);
}
body.sh-body .nav-search-btn .so-ico,
body.sh-body .nav-search-fallback .so-ico { width: 16px; height: 16px; }
body.sh-body .nav-search-input {
  position: absolute;
  right: calc(100% + 10px);
  top: 50%;
  width: 0;
  padding: 0;
  border: 1px solid transparent;
  border-radius: 4px;
  background: var(--sh-card);
  color: var(--sh-text);
  font: 14px/1.5 var(--sh-font);
  letter-spacing: 0;
  transform: translateY(-50%);
  opacity: 0;
  visibility: hidden;
  pointer-events: none;
  z-index: 2;
  transition: width .22s ease, opacity .2s ease, padding .22s ease;
}
body.sh-body .nav-search-input::placeholder { color: var(--sh-faint); }
body.sh-body .nav-search[data-open="true"] .nav-search-input {
  width: 15rem;
  padding: 6px 12px;
  border-color: var(--sh-line-strong);
  opacity: 1;
  visibility: visible;
  pointer-events: auto;
  box-shadow: var(--sh-shadow);
}
body.sh-body .nav-search-input:focus-visible {
  outline: none;
  border-color: var(--sh-accent);
  box-shadow: 0 0 0 2px var(--sh-accent-soft);
}
/* 导航右侧的配色入口：与检索同一枚 30px 圆钮；面板从按钮下方右对齐展开。 */
body.sh-body .sh-banner-tools > .pal {
  flex: none;
  position: relative;
  margin: 0;
}
body.sh-body .sh-banner-tools > .pal > summary {
  display: flex;
  align-items: center;
  justify-content: center;
  width: 30px;
  height: 30px;
  padding: 0;
  border-radius: 50%;
  letter-spacing: 0;
  transition: background .2s ease, color .2s ease;
}
body.sh-body .sh-banner-tools > .pal > summary .pal-ico { width: 16px; height: 16px; }
body.sh-body .sh-banner-tools > .pal .pal-panel {
  left: auto;
  right: 0;
  top: calc(100% + var(--sh-pop-gap));
  transform: none;
  /* 与主题切换弹窗同一套卡片语言：同一张纸、同一圆角、同一档阴影，不描边。 */
  background: var(--sh-card);
  border-radius: var(--sh-radius);
  box-shadow: var(--sh-shadow-lift);
}
/* 主题不使用站点的「版式」切换，面板里只留明暗、配色与自定义。 */
body.sh-body .sh-banner-tools > .pal .pal-lyt,
body.sh-body .sh-banner-tools > .pal .pal-theme + .pal-rule { display: none; }
/* 横幅右下的主题切换：触发器配色统一由上面那组管，这里只把面板换成卡片语言。 */
body.sh-body .sh-banner-tools > .theme-pick .theme-panel {
  top: calc(100% + var(--sh-pop-gap));
  background: var(--sh-card);
  border-radius: var(--sh-radius);
  box-shadow: var(--sh-shadow-lift);
}
@media (max-width: 620px) {
  body.sh-body .sh-navcard { padding: 8px 12px; }
  body.sh-body .nav-search[data-open="true"] .nav-search-input {
    /* 三个图标都靠右后，搜索框只能向左长；留出 160px 给图标列与两侧内距，320 一档也不越出视口。 */
    width: min(15rem, calc(100vw - 160px));
  }
}

/* ---------- 首页：分类卡 / 碎语条 / 最近更新 ---------- */
body.sh-body .sh-cat-grid {
  display: flex;
  flex-wrap: nowrap;
  gap: 12px;
  margin-bottom: 12px;
}
body.sh-body .sh-cat {
  position: relative;
  overflow: hidden;
  flex: 1 1 0;
  min-width: 0;
  min-height: 100px;
  display: flex;
  flex-direction: column;
  justify-content: flex-start;
  align-items: stretch;
  gap: 4px;
  padding: 14px 12px;
  background: var(--sh-card);
  border-radius: var(--sh-radius);
  box-shadow: var(--sh-shadow);
  transition: box-shadow .22s ease;
}
body.sh-body .sh-cat:hover {
  box-shadow: var(--sh-shadow-lift);
}
body.sh-body .sh-cat:hover .sh-cat-name { color: var(--sh-accent-deep); }
body.sh-body .sh-cat-index {
  position: absolute;
  top: 1px;
  right: 6px;
  font-size: 56px;
  font-weight: 900;
  line-height: 1;
  color: color-mix(in srgb, var(--sh-text) 10%, transparent);
  pointer-events: none;
  user-select: none;
}
body.sh-body .sh-cat-index::before { content: attr(data-index); }
body.sh-body .sh-cat-name {
  position: relative;
  z-index: 1;
  font-size: 15px;
  font-weight: 600;
  color: var(--sh-text);
  line-height: 1.4;
}
body.sh-body .sh-cat-desc {
  position: relative;
  z-index: 1;
  align-self: flex-start;
  max-width: 78%;
  margin-top: 2px;
  font-size: 10px;
  line-height: 1.5;
  color: var(--sh-muted);
  text-align: left;
}
body.sh-body .sh-cat-foot {
  position: relative;
  z-index: 1;
  display: flex;
  align-items: baseline;
  justify-content: space-between;
  gap: 8px;
  width: 100%;
  margin-top: auto;
}
body.sh-body .sh-cat-year {
  font-size: 11px;
  line-height: 1.5;
  color: var(--sh-muted);
}
body.sh-body .sh-cat-count {
  font-size: 11px;
  font-weight: 500;
  line-height: 1.5;
  color: var(--sh-muted);
  white-space: nowrap;
}

body.sh-body .sh-note-strip {
  display: flex;
  align-items: baseline;
  gap: 10px;
  padding: 10px 16px;
  margin: 14px 0;
  background: var(--sh-card);
  border-radius: 10px;
  box-shadow: var(--sh-shadow);
  transition: background .25s ease;
}
body.sh-body .sh-note-strip:hover {
  background: var(--sh-row-hover);
}
body.sh-body .sh-note-mark {
  flex: none;
  padding: 2px 7px;
  border-radius: 4px;
  background: var(--sh-accent);
  color: var(--sh-paper);
  font-size: 11px;
  line-height: 1.5;
}
body.sh-body .sh-note-text {
  flex: 1 1 auto;
  min-width: 0;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
  font-size: 12px;
  color: var(--sh-text-soft);
}
body.sh-body .sh-note-time {
  flex: none;
  font-size: 12px;
  color: var(--sh-muted);
  font-variant-numeric: tabular-nums;
}

body.sh-body .sh-recent { margin-top: 4px; }
body.sh-body .sh-sec-head {
  display: flex;
  align-items: baseline;
  justify-content: space-between;
  gap: 10px;
  margin: 18px 2px 10px;
}
body.sh-body .sh-sec-head h2 {
  position: relative;
  margin: 0;
  padding-left: 10px;
  font-family: var(--sh-font);
  font-size: 16px;
  font-weight: 600;
  line-height: 1.4;
  letter-spacing: 0;
  color: var(--sh-text);
}
body.sh-body .sh-sec-head h2::before {
  content: "";
  position: absolute;
  left: 0;
  top: .18em;
  bottom: .18em;
  width: 3px;
  border-radius: 2px;
  background: var(--sh-accent);
}
body.sh-body .sh-sec-count { flex: none; font-size: 12px; color: var(--sh-faint); }

/* ---------- 文章卡片（首页、列表、年归档、404 共用） ---------- */
body.sh-body .sh-card-list {
  display: flex;
  flex-direction: column;
  gap: 10px;
}
body.sh-body .sh-post-card {
  position: relative;
  padding: 12px 14px;
  background: var(--sh-card);
  border-radius: var(--sh-radius);
  box-shadow: var(--sh-shadow);
  transition: box-shadow .22s ease;
}
body.sh-body .sh-post-card:hover {
  box-shadow: var(--sh-shadow-lift);
}
/* 首页「最近更新」整张卡片可点：标题链接铺一层透明点击层盖住卡片，
   标签、评论数、阅读全文仍浮在它上面，各自保留自己的链接。 */
body.sh-body[data-page="home"] .sh-post-title a::after {
  content: "";
  position: absolute;
  inset: 0;
  z-index: 1;
  border-radius: var(--sh-radius);
  cursor: pointer;
}
body.sh-body[data-page="home"] .sh-chip,
body.sh-body[data-page="home"] .sh-post-comments,
body.sh-body[data-page="home"] .sh-post-read {
  position: relative;
  z-index: 2;
}
body.sh-body .sh-post-head {
  display: flex;
  align-items: flex-start;
  gap: 10px;
  margin-bottom: 6px;
}
body.sh-body .sh-chip {
  flex: none;
  display: inline-block;
  padding: 2px 7px;
  border-radius: 4px;
  background: var(--sh-accent);
  color: var(--sh-paper);
  font-size: 12px;
  line-height: 1.5;
  white-space: nowrap;
}
body.sh-body .sh-chip a { color: var(--sh-paper); }
body.sh-body .sh-chip a:hover { color: var(--sh-paper); }
body.sh-body .sh-post-titles {
  flex: 1 1 auto;
  min-width: 0;
  display: flex;
  align-items: flex-start;
  justify-content: space-between;
  gap: 6px;
}
body.sh-body .sh-post-title {
  margin: 0;
  font-family: var(--sh-font);
  font-size: 16px;
  font-weight: 500;
  line-height: 1.5;
  color: var(--sh-text);
}
body.sh-body .sh-post-title a { display: inline-block; color: var(--sh-text); }
body.sh-body .sh-post-card:hover .sh-post-title a { color: var(--sh-accent-deep); }
body.sh-body .sh-post-time {
  flex: none;
  font-size: 12px;
  line-height: 1.8;
  color: var(--sh-muted);
  white-space: nowrap;
  font-variant-numeric: tabular-nums;
}
body.sh-body .sh-post-excerpt {
  margin: 0;
  font-size: 14px;
  line-height: 1.7;
  color: var(--sh-muted);
  display: -webkit-box;
  -webkit-box-orient: vertical;
  -webkit-line-clamp: 2;
  overflow: hidden;
}
body.sh-body .sh-post-meta {
  display: flex;
  flex-wrap: wrap;
  align-items: baseline;
  justify-content: space-between;
  gap: 6px;
  margin-top: 8px;
  padding-top: 6px;
  border-top: 1px solid var(--sh-line);
  font-size: 12px;
  line-height: 1.6;
}
body.sh-body .sh-post-rel { color: var(--sh-faint); }
body.sh-body .sh-post-meta > a {
  display: inline-block;
  padding-block: 3px;
  margin-block: -3px;
}
body.sh-body .sh-post-comments { color: var(--sh-muted); margin-left: auto; }
body.sh-body .sh-post-read { color: var(--sh-faint); }
body.sh-body .sh-post-read { margin-left: auto; }
body.sh-body .sh-post-comments + .sh-post-read { margin-left: 0; }
body.sh-body .sh-post-comments:hover,
body.sh-body .sh-post-read:hover { color: var(--sh-accent-deep); }

body.sh-body .sh-more {
  margin: 16px 0 0;
  display: flex;
  justify-content: center;
}
body.sh-body .sh-more a {
  display: inline-block;
  padding: 6px 16px;
  background: var(--sh-card);
  color: var(--sh-accent);
  border-radius: 4px;
  box-shadow: var(--sh-shadow);
  font-size: 13px;
  line-height: 1.6;
  transition: background .2s ease, color .2s ease;
}
body.sh-body .sh-more a:hover { background: var(--sh-row-hover); color: var(--sh-accent-deep); }

/* 站点的「更早的…」翻页按钮也并进卡片语言。 */
body.sh-body .pager-more { margin: 16px 0 0; display: flex; justify-content: center; }
body.sh-body .pager-more a {
  display: inline-block;
  padding: 6px 16px;
  background: var(--sh-card);
  color: var(--sh-accent);
  border: 0;
  border-radius: 4px;
  box-shadow: var(--sh-shadow);
  font: 13px/1.6 var(--sh-font);
  letter-spacing: 0;
  text-transform: none;
}
body.sh-body .pager-more a:hover {
  background: var(--sh-row-hover);
  color: var(--sh-accent-deep);
  box-shadow: var(--sh-shadow-lift);
}

/* ---------- 栏目页刊头 ---------- */
body.sh-body .sh-page-head { margin: 4px 2px 16px; }
body.sh-body .sh-page-mark {
  margin: 0 0 4px;
  font-size: 12px;
  line-height: 1.5;
  letter-spacing: .08em;
  text-transform: uppercase;
  color: var(--sh-muted);
}
body.sh-body .sh-page-title {
  margin: 0;
  font-family: var(--sh-font);
  font-size: 24px;
  font-weight: 600;
  line-height: 1.3;
  letter-spacing: 0;
  color: var(--sh-text);
}
body.sh-body .sh-page-desc {
  margin: 6px 0 0;
  font-size: 13px;
  line-height: 1.7;
  color: var(--sh-muted);
}
body.sh-body .sh-page-meta {
  margin: 8px 0 0;
  font-size: 12px;
  color: var(--sh-faint);
}

/* ---------- 通用白卡 ---------- */
body.sh-body .sh-card {
  background: var(--sh-card);
  border-radius: var(--sh-radius-lg);
  box-shadow: var(--sh-shadow);
}
body.sh-body .sh-empty {
  padding: 24px;
  text-align: center;
  color: var(--sh-muted);
  font-size: 14px;
}
body.sh-body .sh-empty a { color: var(--sh-accent); }
body.sh-body .sh-empty-card {
  margin: 16px 0;
  padding: 20px;
  background: var(--sh-card);
  border-radius: var(--sh-radius);
  box-shadow: var(--sh-shadow);
  text-align: center;
  color: var(--sh-muted);
  font-size: 14px;
}
body.sh-body .sh-empty-card a { color: var(--sh-accent); }

/* ---------- 正文页 ---------- */
body.sh-body .sh-single {
  padding: 24px 28px;
  margin-bottom: 16px;
}
body.sh-body .sh-single-head {
  margin-bottom: 18px;
  padding-bottom: 12px;
  border-bottom: 1px solid var(--sh-line);
}
body.sh-body .sh-single-title {
  margin: 8px 0 8px;
  font-family: var(--sh-font);
  font-size: 22px;
  font-weight: 600;
  line-height: 1.4;
  letter-spacing: 0;
  color: var(--sh-text);
}
body.sh-body .sh-single-desc {
  margin: 0 0 8px;
  font-size: 13px;
  line-height: 1.7;
  color: var(--sh-muted);
}
body.sh-body .sh-single-meta {
  display: flex;
  flex-wrap: wrap;
  align-items: baseline;
  gap: 4px 10px;
  font-size: 13px;
  color: var(--sh-muted);
}
body.sh-body .sh-chip a,
body.sh-body .sh-single-meta a {
  display: inline-block;
  padding-block: 3px;
  margin-block: -3px;
}
body.sh-body .sh-single-meta a { color: var(--sh-accent); }
body.sh-body .sh-single-meta a:hover { color: var(--sh-accent-deep); }
body.sh-body .sh-dot { color: var(--sh-faint); }

body.sh-body .sh-prose {
  margin: 0;
  font-size: 15px;
  line-height: 1.9;
  color: var(--sh-text);
}
body.sh-body .sh-prose p,
body.sh-body .sh-prose li,
body.sh-body .sh-prose dd {
  text-align: justify;
  font-variant-numeric: normal;
}
body.sh-body .sh-prose p { margin: 0 0 14px; }
body.sh-body .sh-prose > :first-child { margin-top: 0; }
body.sh-body .sh-prose > :last-child { margin-bottom: 0; }
body.sh-body .sh-prose h2,
body.sh-body .sh-prose h3,
body.sh-body .sh-prose h4,
body.sh-body .sh-prose h5,
body.sh-body .sh-prose h6 {
  font-family: var(--sh-font);
  letter-spacing: 0;
  line-height: 1.5;
}
body.sh-body .sh-prose h2 {
  margin: 30px 0 12px;
  font-size: 18px;
  font-weight: 600;
  color: var(--sh-text);
}
body.sh-body .sh-prose h2::before { display: none; }
body.sh-body .sh-prose h3 {
  margin: 24px 0 10px;
  font-size: 16px;
  font-weight: 600;
  color: var(--sh-text);
}
body.sh-body .sh-prose h4 {
  margin: 20px 0 8px;
  font-size: 15px;
  font-weight: 600;
  color: var(--sh-text);
}
body.sh-body .sh-prose h5,
body.sh-body .sh-prose h6 { margin: 16px 0 8px; font-size: 14px; font-weight: 600; color: var(--sh-text-soft); }

body.sh-body .sh-prose ul,
body.sh-body .sh-prose ol { margin: 0 0 16px; }
body.sh-body .sh-prose ul { padding-left: 0; }
body.sh-body .sh-prose ul > li {
  position: relative;
  list-style: none;
  padding-left: 20px;
  margin: 6px 0;
}
body.sh-body .sh-prose ul > li::before {
  content: "";
  position: absolute;
  left: 2px;
  top: .8em;
  width: 7px;
  height: 7px;
  border-radius: 50%;
  background: var(--sh-accent);
}
body.sh-body .sh-prose ol { padding-left: 1.4em; }
body.sh-body .sh-prose ol > li { list-style: decimal; padding-left: 0; margin: 6px 0; }
body.sh-body .sh-prose ol > li::before { display: none; }
body.sh-body .sh-prose li::marker { color: var(--sh-accent); }

body.sh-body .sh-prose blockquote {
  position: relative;
  margin: 0 0 16px;
  padding: 12px 16px;
  border-left: 3px solid var(--sh-accent-line);
  border-radius: var(--sh-radius);
  background: var(--sh-accent-soft);
  color: var(--sh-text-soft);
  line-height: 1.8;
}
body.sh-body .sh-prose blockquote::before,
body.sh-body .sh-prose blockquote::after { display: none; }
body.sh-body .sh-prose blockquote p:last-child { margin-bottom: 0; }

body.sh-body .sh-prose code {
  font: .88em/1.5 var(--mono, ui-monospace, SFMono-Regular, Menlo, monospace);
  color: var(--code-fg);
  background: var(--code-bg);
  border: 1px solid var(--sh-line-warm);
  border-radius: 4px;
  padding: .12em .4em;
}
body.sh-body .sh-prose pre {
  margin: 0 0 18px;
  padding: 14px 16px;
  border: 1px solid var(--sh-line-warm);
  border-radius: var(--sh-radius);
  background: var(--code-bg);
  background-image: none;
  box-shadow: none;
  overflow-x: auto;
  line-height: 1.75;
}
body.sh-body .sh-prose pre code {
  border: 0;
  background: none;
  padding: 0;
  border-radius: 0;
  font-size: .86rem;
  line-height: 1.75;
  color: var(--code-fg);
}
body.sh-body .sh-prose pre.has-copy { padding-top: 2.5rem; }

body.sh-body .sh-prose img {
  display: block;
  max-width: 100%;
  height: auto;
  margin: 18px auto;
  border: 0;
  border-radius: 4px;
  box-shadow: none;
  filter: none;
}
body.sh-body .sh-prose a {
  color: var(--sh-accent);
  border-bottom: 0;
  padding-bottom: 0;
}
body.sh-body .sh-prose a:hover {
  color: var(--sh-accent-deep);
  text-decoration: underline;
  text-underline-offset: 3px;
}
body.sh-body .sh-prose hr {
  margin: 26px 0;
  border: 0;
  border-top: 1px solid var(--sh-line);
}
body.sh-body .sh-prose hr::before { display: none; }

body.sh-body .sh-prose table {
  width: 100%;
  border: 1px solid var(--sh-line);
  border-radius: var(--sh-radius);
  font-size: 14px;
  font-variant-numeric: tabular-nums;
}
body.sh-body .sh-prose th {
  background: var(--sh-accent-soft);
  color: var(--sh-accent-deep);
  font: 600 13px/1.5 var(--sh-font);
  letter-spacing: 0;
  text-transform: none;
  border-bottom: 1px solid var(--sh-line);
}
body.sh-body .sh-prose th,
body.sh-body .sh-prose td { padding: 8px 12px; border-bottom: 1px solid var(--sh-line); }
body.sh-body .sh-prose tbody tr:hover td { background: var(--sh-row-hover); }

/* 目录：收成一张浅色小卡，不与正文抢戏。 */
body.sh-body .sh-single details.toc {
  margin: 0 0 18px;
  padding: 10px 14px;
  border: 1px solid var(--sh-line-warm);
  border-radius: var(--sh-radius);
  background: var(--sh-accent-soft);
}
body.sh-body .sh-single details.toc summary {
  min-height: 24px;
  padding: 0;
  font: 13px/1.6 var(--sh-font);
  letter-spacing: 0;
  text-transform: none;
  color: var(--sh-accent-deep);
}
body.sh-body .sh-single details.toc summary::after { background: var(--sh-accent-line); }
body.sh-body .sh-single details.toc[open] summary::after { background: var(--sh-accent-line); }
body.sh-body .sh-single details.toc ol { font-size: 13px; line-height: 1.6; margin: 8px 0 0; }
body.sh-body .sh-single details.toc li { padding: 6px 0; border-bottom: 1px solid var(--sh-line); }
body.sh-body .sh-single details.toc li.lvl-2 > a::before { color: var(--sh-accent); font-family: var(--sh-font); }
body.sh-body .sh-single details.toc li.lvl-3 { padding-left: 2.4em; }
body.sh-body .sh-single details.toc a { color: var(--sh-text-soft); }
body.sh-body .sh-single details.toc a:hover { color: var(--sh-accent-deep); }
body.sh-body .sh-single details.toc ol::after { display: none; }

body.sh-body .sh-single .pager {
  gap: 12px;
  margin: 26px 0 0;
  font-size: 13px;
}
body.sh-body .sh-single .pager > div {
  padding: 12px 16px;
  background: var(--sh-paper);
  border: 1px solid var(--sh-line-warm);
  border-radius: var(--sh-radius);
  box-shadow: none;
}
body.sh-body .sh-single .pager > div:hover {
  border-color: var(--sh-accent-line);
  box-shadow: none;
}
body.sh-body .sh-single .pager small {
  font: 11px/1.7 var(--sh-font);
  letter-spacing: 0;
  color: var(--sh-faint);
}
body.sh-body .sh-single .pager a {
  display: inline-block;
  margin-top: 2px;
  padding-block: 1px;
  font-family: var(--sh-font);
  font-size: 14px;
  color: var(--sh-accent);
}
body.sh-body .sh-single .pager a:hover { color: var(--sh-accent-deep); }

/* ---------- 评论区 ---------- */
body.sh-body .sh-comments-card {
  padding: 24px 28px;
  margin-bottom: 16px;
}
body.sh-body .sh-comments-card .comments {
  margin: 0;
  padding: 0;
  border-top: 0;
  scroll-margin-top: 1.5rem;
}
body.sh-body .sh-comments-card .comments h2 {
  display: flex;
  align-items: center;
  gap: 8px;
  margin: 0 0 18px;
  font: 600 16px/1.5 var(--sh-font);
  letter-spacing: 0;
  text-transform: none;
  color: var(--sh-text);
}
body.sh-body .sh-comments-card .comments h2::after { display: none; }
body.sh-body .sh-comments-card .c-top .c-label {
  font: 600 16px/1.5 var(--sh-font);
  letter-spacing: 0;
  color: var(--sh-text);
}
body.sh-body .sh-comments-card .c-count {
  font: 400 12px/1.5 var(--sh-font);
  color: var(--sh-faint);
}
body.sh-body .sh-comments-card .comment { --c-avatar: 42px; }
body.sh-body .sh-comments-card .c-list > .comment {
  padding: 14px 0;
  border-top: 0;
  border-bottom: 1px solid var(--sh-line);
}
/* 首条也要留出与分割线的间距，否则 42px 头像顶在 c-top 的底线上。 */
body.sh-body .sh-comments-card .c-list > .comment:first-child { padding-top: 14px; }
body.sh-body .sh-comments-card .c-list > .comment:last-child {
  padding-bottom: 14px;
  border-bottom: 1px solid var(--sh-line);
}
body.sh-body .sh-comments-card .c-head {
  margin: 0 0 6px;
  gap: 8px;
  font-size: 14px;
  line-height: 1.6;
  color: var(--sh-muted);
}
body.sh-body .sh-comments-card .c-head b,
body.sh-body .sh-comments-card .c-head .c-name {
  color: var(--sh-text);
  font-weight: 500;
}
body.sh-body .sh-comments-card .c-head a.c-name { color: var(--sh-text); }
body.sh-body .sh-comments-card .c-head a.c-name:hover { color: var(--sh-accent); }
body.sh-body .sh-comments-card .badge-author {
  border: 0;
  border-radius: 4px;
  background: var(--sh-accent-soft);
  color: var(--sh-accent-deep);
  font: 11px/1.5 var(--sh-font);
  letter-spacing: 0;
}
body.sh-body .sh-comments-card .c-body {
  font-size: 14px;
  line-height: 1.7;
  color: var(--sh-text);
  word-break: break-word;
}
body.sh-body .sh-comments-card .c-body p { margin: 0 0 .6em; }
body.sh-body .sh-comments-card .c-body a {
  color: var(--sh-accent);
  border-bottom: 0;
}
body.sh-body .sh-comments-card .c-body a:hover { color: var(--sh-accent-deep); text-decoration: underline; }
body.sh-body .sh-comments-card .c-foot {
  font-size: 12px;
  line-height: 1.6;
  color: var(--sh-faint);
}
body.sh-body .sh-comments-card .c-foot time { color: var(--sh-faint); }
body.sh-body .sh-comments-card .c-reply {
  display: inline-flex;
  align-items: center;
  opacity: 1;
  min-height: 24px;
  padding: 0 7px;
  border: 0;
  border-radius: 4px;
  background: var(--sh-accent);
  color: var(--sh-paper);
  font-size: 11px;
  line-height: 1.2;
}
body.sh-body .sh-comments-card .c-reply:hover { background: var(--sh-accent-deep); color: var(--sh-paper); }
body.sh-body .sh-comments-card .c-replies { margin-top: 4px; }
body.sh-body .sh-comments-card .c-replies > .comment {
  margin-top: 10px;
  padding-top: 10px;
  border-top: 1px solid var(--sh-line);
}
body.sh-body .sh-comments-card .c-at { color: var(--sh-faint); font-size: 12px; }
body.sh-body .sh-comments-card .c-at b { color: var(--sh-text); }

body.sh-body .sh-comments-card .c-pager {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: 8px;
  margin: 14px 0 0;
  font-size: 12px;
}
body.sh-body .sh-comments-card .c-pager-btn,
body.sh-body .sh-comments-card .c-pager-last {
  padding: 3px 8px;
  border: 1px solid var(--sh-accent-line);
  border-radius: 4px;
  color: var(--sh-accent);
  font-size: 12px;
}
body.sh-body .sh-comments-card .c-pager-btn:hover,
body.sh-body .sh-comments-card .c-pager-last:hover {
  background: var(--sh-accent);
  border-color: var(--sh-accent);
  color: var(--sh-paper);
}
body.sh-body .sh-comments-card .c-pager-btn.is-off { color: var(--sh-faint); border-color: var(--sh-line-warm); background: var(--bg-soft); }
body.sh-body .sh-comments-card .c-pager-now { color: var(--sh-faint); }

body.sh-body .sh-comments-card .c-form {
  margin: 20px 0 0;
  padding: 0;
  border: 0;
  border-radius: 0;
  background: transparent;
  box-shadow: none;
}
body.sh-body .sh-comments-card .c-form h3 {
  margin: 0 0 12px;
  font-family: var(--sh-font);
  font-size: 15px;
  font-weight: 600;
  letter-spacing: 0;
  color: var(--sh-text);
}
body.sh-body .sh-comments-card .c-form h3:has([data-reply-title]:empty) { display: none; }
body.sh-body .sh-comments-card .c-cancel-reply {
  color: var(--sh-faint);
  font-size: 12px;
  font-weight: 400;
}
body.sh-body .sh-comments-card .c-grid {
  grid-template-columns: repeat(auto-fit, minmax(min(100%, 9.5rem), 1fr));
  gap: 0 10px;
}
body.sh-body .sh-comments-card .c-field {
  margin: 0 0 10px;
  gap: 4px;
}
body.sh-body .sh-comments-card .c-field label {
  font: 12px/1.5 var(--sh-font);
  letter-spacing: 0;
  text-transform: none;
  color: var(--sh-muted);
}
body.sh-body .sh-comments-card .c-field input,
body.sh-body .sh-comments-card .c-field textarea {
  width: 100%;
  padding: 8px 10px;
  border: 1px solid var(--sh-line-strong);
  border-radius: 4px;
  background: var(--sh-card);
  font: 14px/1.6 var(--sh-font);
  color: var(--sh-text);
  box-shadow: none;
}
body.sh-body .sh-comments-card .c-field textarea { min-height: 7.5rem; resize: vertical; }
body.sh-body .sh-comments-card .c-field input:focus-visible,
body.sh-body .sh-comments-card .c-field textarea:focus-visible {
  outline: none;
  border-color: var(--sh-accent);
  box-shadow: 0 0 0 2px var(--sh-accent-soft);
}
body.sh-body .sh-comments-card .c-actions { align-items: center; }
body.sh-body .sh-comments-card .c-actions > button {
  min-height: 44px;
  padding: 0 18px;
  border-radius: 4px;
  background: var(--sh-accent);
  font: 14px/1 var(--sh-font);
  letter-spacing: 0;
  color: var(--sh-paper);
}
body.sh-body .sh-comments-card .c-actions > button:hover {
  background: var(--sh-accent-deep);
  opacity: 1;
  box-shadow: var(--sh-shadow);
}
/* 提示框别贴着 c-top 的底边线：两条 1px 边叠在一起会看成多出一条分割线。 */
body.sh-body .sh-comments-card .c-flash {
  margin: 14px 0 1.2rem;
  border-radius: 4px;
  font-size: 13px;
  color: var(--sh-text-soft);
  background: var(--sh-accent-soft);
}
body.sh-body .sh-comments-card .c-closed { color: var(--sh-muted); font-size: 14px; }

/* ---------- 页脚：白色小卡 ---------- */
body.sh-body footer.site {
  position: relative;
  margin: 24px 0 0;
  padding: 12px 14px;
  background: var(--sh-card);
  border: 0;
  border-radius: var(--sh-radius);
  box-shadow: var(--sh-shadow);
  text-align: center;
  font-size: 12px;
  color: var(--sh-muted);
}
/* 不要站点内置的通长界栏与星印回顶按钮，页脚只留一张干净的白色小卡。 */
body.sh-body footer.site::before { display: none; }
body.sh-body footer.site .foot-seal { display: none; }
body.sh-body footer.site .foot-inner { padding: 0; }
body.sh-body footer.site .foot-legal {
  align-items: stretch;
  gap: 4px 10px;
  font: 12px/1.7 var(--sh-font);
  letter-spacing: 0;
  color: var(--sh-muted);
}
body.sh-body footer.site .foot-beian {
  justify-content: center;
  width: 100%;
  padding-inline: 32px;
  gap: 2px 10px;
}
body.sh-body footer.site .foot-copy {
  white-space: normal;
  text-align: center;
}
body.sh-body footer.site .foot-icp,
body.sh-body footer.site .foot-police {
  color: var(--sh-muted);
  letter-spacing: 0;
  padding-block: 4px;
  margin-block: -4px;
}
body.sh-body footer.site .foot-icp:hover,
body.sh-body footer.site .foot-police:hover { color: var(--sh-accent-deep); }
body.sh-body footer.site .foot-police-ico,
body.sh-body footer.site .foot-icp-ico { display: inline-block; vertical-align: -2px; margin-right: 3px; }
body.sh-body footer.site .sh-foot-top {
  position: absolute;
  right: 14px;
  top: 50%;
  transform: translateY(-50%);
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 26px;
  height: 26px;
  padding: 0;
  border-radius: 50%;
  background: var(--sh-paper);
  color: var(--sh-muted);
  line-height: 1;
  transition: background .2s ease, color .2s ease;
}
body.sh-body footer.site .sh-foot-top svg { width: 16px; height: 16px; }
body.sh-body footer.site .sh-foot-top:hover {
  background: var(--sh-accent);
  color: var(--sh-paper);
}

/* ---------- 归档 ---------- */
body.sh-body .sh-search .mast {
  margin: 0 0 12px;
  padding: 16px 18px;
  background: var(--sh-card);
  border-radius: var(--sh-radius);
  box-shadow: var(--sh-shadow);
}
body.sh-body .mast-mark {
  font: 12px/1.5 var(--sh-font);
  letter-spacing: .08em;
  text-transform: uppercase;
  color: var(--sh-muted);
}
body.sh-body .mast-mark::after { display: none; }
body.sh-body .mast-title {
  margin: 6px 0 0;
  font-family: var(--sh-font);
  font-size: 24px;
  font-weight: 600;
  line-height: 1.3;
  letter-spacing: 0;
  color: var(--sh-text);
}
body.sh-body .mast-stat {
  margin: 8px 0 0;
  padding: 8px 0 0;
  border-top: 1px solid var(--sh-line-warm);
  display: flex;
  flex-wrap: wrap;
  align-items: baseline;
  gap: 4px 14px;
  font: 12px/1.8 var(--sh-font);
  letter-spacing: 0;
  color: var(--sh-faint);
}
body.sh-body .mast-stat b {
  font-family: var(--sh-font);
  font-size: 1em;
  font-weight: 600;
  color: var(--sh-text);
}
body.sh-body .mast-span { letter-spacing: 0; }
body.sh-body .mast-title-row { align-items: center; gap: 12px; }
body.sh-body .arch-filter { gap: 12px; }
body.sh-body .arch-filter a {
  padding: 2px 0 4px;
  font: 13px/1.4 var(--sh-font);
  color: var(--sh-faint);
}
body.sh-body .arch-filter a:hover { color: var(--sh-accent); }
body.sh-body .arch-filter a[aria-current="page"] { color: var(--sh-accent); font-weight: 600; }
body.sh-body .arch-filter a[aria-current="page"]::after { height: 2px; background: var(--sh-accent); }

body.sh-body .sh-archive .chron {
  display: block;
  margin: 0 0 12px;
  padding: 14px 16px;
  border: 0;
  border-radius: var(--sh-radius);
  background: var(--sh-card);
  box-shadow: var(--sh-shadow);
  scroll-margin-top: 1.5rem;
}
body.sh-body .sh-archive .chron:last-child { border-bottom: 0; padding-bottom: 14px; }
body.sh-body .sh-archive .chron-rail {
  position: static;
  display: flex;
  align-items: baseline;
  justify-content: space-between;
  gap: 10px;
  margin: 0 0 10px;
  padding: 0 0 8px;
  border-bottom: 2px solid var(--sh-accent);
}
body.sh-body .sh-archive .chron:not([open]) .chron-rail {
  display: flex;
  margin: 0;
  padding: 0 0 8px;
}
body.sh-body .sh-archive .chron-year {
  font-family: var(--sh-font);
  font-size: 16px;
  font-weight: 600;
  letter-spacing: 0;
  color: var(--sh-text);
}
body.sh-body .sh-archive .chron-count {
  margin: 0;
  font: 12px/1.5 var(--sh-font);
  letter-spacing: 0;
  color: var(--sh-muted);
}
body.sh-body .sh-archive .chron-flow {
  border-left: 0;
  padding-left: 0;
}
body.sh-body .sh-archive .mgrp { margin: 0; }
body.sh-body .sh-archive .mgrp[open] { margin-bottom: 8px; }
body.sh-body .sh-archive .mgrp-label {
  align-items: baseline;
  padding: 8px 2px;
  font-size: 14px;
  font-weight: 400;
  letter-spacing: 0;
  color: var(--sh-text);
  border-bottom: 1px solid var(--sh-line);
}
body.sh-body .sh-archive .mgrp-label:hover { background: var(--sh-row-hover); }
body.sh-body .sh-archive .mgrp-label::before {
  width: 7px;
  height: 7px;
  border-radius: 50%;
  background: var(--sh-accent);
  transform: none;
}
body.sh-body .sh-archive .mgrp-lead {
  border-bottom: 0;
  opacity: 0;
}
body.sh-body .sh-archive .mgrp-count { font: 12px/1.5 var(--sh-font); letter-spacing: 0; color: var(--sh-muted); }
body.sh-body .sh-archive .entries a {
  padding: 6px 4px;
  font-size: 14px;
  color: var(--sh-text);
}
body.sh-body .sh-archive .entries a:hover { background: var(--sh-row-hover); }
body.sh-body .sh-archive .entries li::after {
  background: var(--sh-line);
}
body.sh-body .sh-archive .entries li:first-child::after { display: none; }
body.sh-body .sh-archive .entries time {
  font: 12px/1.6 var(--sh-font);
  letter-spacing: 0;
  color: var(--sh-muted);
}
body.sh-body .sh-archive .entries .e-title {
  font-size: 14px;
  line-height: 1.6;
  color: var(--sh-text);
}
body.sh-body .sh-archive .entries a:hover .e-title { color: var(--sh-accent); }
body.sh-body .sh-archive .entries .e-kind { color: var(--sh-muted); }

/* ---------- 检索页 ---------- */
body.sh-body .sh-search .s-form {
  max-width: none;
  margin: 0 0 12px;
  padding: 14px 18px;
  background: var(--sh-card);
  border-radius: var(--sh-radius);
  box-shadow: var(--sh-shadow);
}
body.sh-body .sh-search .s-form::before { display: none; }
body.sh-body .sh-search .s-field {
  grid-template-columns: minmax(0, 1fr) auto;
  align-items: end;
  column-gap: 10px;
  row-gap: 0;
}
body.sh-body .sh-search .s-lbl {
  margin-bottom: 4px;
  font: 12px/1.5 var(--sh-font);
  letter-spacing: 0;
  text-transform: none;
  color: var(--sh-muted);
}
body.sh-body .sh-search .s-input {
  height: 40px;
  padding: 0 12px;
  border: 1px solid var(--sh-line-strong);
  border-radius: 4px;
  background: var(--sh-card);
  font: 14px/1.4 var(--sh-font);
  color: var(--sh-text);
}
body.sh-body .sh-search .s-input:focus-visible {
  outline: none;
  border-color: var(--sh-accent);
  box-shadow: 0 0 0 2px var(--sh-accent-soft);
}
body.sh-body .sh-search .s-input::placeholder,
body.sh-body .sh-search-form input::placeholder { color: var(--sh-faint); }
body.sh-body .sh-search .s-go {
  height: 40px;
  padding: 0 18px;
  border-radius: 4px;
  background: var(--sh-accent);
  font: 14px/1 var(--sh-font);
  letter-spacing: 0;
  color: var(--sh-paper);
}
body.sh-body .sh-search .s-go:hover { background: var(--sh-accent-deep); opacity: 1; }
body.sh-body .sh-search .list { margin: 0; }
body.sh-body .sh-search .list li {
  margin: 0 0 10px;
  padding: 14px 16px;
  background: var(--sh-card);
  border-radius: var(--sh-radius);
  box-shadow: var(--sh-shadow);
}
body.sh-body .sh-search .list li::before,
body.sh-body .sh-search .list li::after { display: none; }
body.sh-body .sh-search .list li > .e-main { display: block; padding: 0; }
body.sh-body .sh-search .list .e-main::after { display: none; }
body.sh-body .sh-search .list .e-main > time {
  display: flex;
  flex-direction: row;
  align-items: baseline;
  gap: 8px;
  margin: 0 0 6px;
  text-align: left;
}
body.sh-body .sh-search .list .e-main > time b {
  font: 600 13px/1.5 var(--sh-font);
  color: var(--sh-text);
}
body.sh-body .sh-search .list .e-main > time small { font: 12px/1.5 var(--sh-font); color: var(--sh-faint); }
body.sh-body .sh-search .list .e-main > time small span { display: inline; }
body.sh-body .sh-search .list .e-main > time small span + span { margin-left: .4rem; }
body.sh-body .sh-search .list h2 {
  margin: 0;
  font: 600 16px/1.5 var(--sh-font);
  letter-spacing: 0;
  color: var(--sh-text);
}
body.sh-body .sh-search .list h2::before { display: none; }
body.sh-body .sh-search .list .excerpt {
  margin: 6px 0 0;
  font-size: 14px;
  line-height: 1.7;
  color: var(--sh-muted);
  -webkit-line-clamp: 2;
}
body.sh-body .sh-search .list mark { background: var(--sh-accent-soft); color: var(--sh-accent-deep); }
body.sh-body .sh-search .list .e-meta {
  margin: 8px 0 0;
  padding: 6px 0 0;
  border-top: 1px solid var(--sh-line);
  font: 12px/1.6 var(--sh-font);
  letter-spacing: 0;
  color: var(--sh-faint);
}
body.sh-body .sh-search .list .e-comments {
  display: inline-block;
  padding-block: 3px;
  margin-block: -3px;
  color: var(--sh-muted);
}
body.sh-body .sh-search .s-more { font: 12px/1.6 var(--sh-font); letter-spacing: 0; color: var(--sh-faint); }
body.sh-body .post-empty {
  margin: 12px 0 0;
  padding: 32px 28px;
  background: var(--sh-card);
  border: 0;
  border-radius: var(--sh-radius-lg);
  box-shadow: var(--sh-shadow);
  text-align: center;
}
/* 站点内置 article.post 把空状态收成 46rem 宽，并在「素匣」版式下抹掉下内距；
   主题里的空状态要跟上下卡片同宽，并靠上下等内距把文字真正居中。 */
html:root:root body.sh-body article.post.post-empty {
  width: 100%;
  max-width: none;
  margin: 12px 0 0;
  padding: 32px 28px;
}
body.sh-body .post-empty::before { display: none; }
body.sh-body .post-empty-title {
  margin: 0;
  font: 600 20px/1.4 var(--sh-font);
  letter-spacing: 0;
  color: var(--sh-text);
}
body.sh-body .post-empty .prose { margin: 8px 0 0; font-size: 14px; }
body.sh-body .post-empty .prose p { color: var(--sh-muted); }

/* ---------- 友圈 ---------- */
body.sh-body .sh-friends .fc-stream { margin-top: 0; }
body.sh-body .sh-friends .fcg { display: flex; flex-direction: column; gap: 12px; }
body.sh-body .sh-friends .fcg-sec {
  padding: 14px 16px;
  background: var(--sh-card);
  /* 站点给每个分组加了上下分隔线；主题里是卡片，线要去干净。 */
  border: 0;
  border-radius: var(--sh-radius);
  box-shadow: var(--sh-shadow);
}
body.sh-body .sh-friends .fcg-head {
  position: relative;
  display: flex;
  align-items: baseline;
  justify-content: space-between;
  gap: 10px;
  margin: 0 0 8px;
  padding-bottom: 8px;
  border-bottom: 2px solid var(--sh-accent);
}
body.sh-body .sh-friends .fcg-head::after { display: none; }
body.sh-body .sh-friends .fcg-name {
  font: 600 15px/1.4 var(--sh-font);
  letter-spacing: 0;
  color: var(--sh-text);
}
body.sh-body .sh-friends .fcg-name a {
  display: inline-block;
  padding-block: 3px;
  margin-block: -3px;
  color: var(--sh-accent);
}
body.sh-body .sh-friends .fcg-n { font: 12px/1.5 var(--sh-font); color: var(--sh-faint); }
body.sh-body .sh-friends .fc-empty {
  margin: 0;
  padding: 24px;
  background: var(--sh-card);
  border-radius: var(--sh-radius);
  box-shadow: var(--sh-shadow);
  text-align: center;
  color: var(--sh-muted);
  font-size: 14px;
}
body.sh-body .sh-friends .fcg-row { border-bottom: 1px dotted var(--sh-line); }
body.sh-body .sh-friends .fcg-row:last-child { border-bottom: 0; }
body.sh-body .sh-friends .fcg-row a {
  display: flex;
  align-items: baseline;
  justify-content: space-between;
  gap: 12px;
  padding: 8px 0;
  font-size: 14px;
  color: var(--sh-text);
}
body.sh-body .sh-friends .fcg-row a:hover { color: var(--sh-accent); }
body.sh-body .sh-friends .fcg-t { min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
body.sh-body .sh-friends .fcg-when { flex: none; font-size: 12px; color: var(--sh-faint); }

/* ---------- 友链 ---------- */
body.sh-body .sh-links-card { padding: 18px 16px; }
body.sh-body .sh-links-grid {
  display: grid;
  grid-template-columns: repeat(auto-fill, minmax(110px, 1fr));
  gap: 18px 10px;
}
body.sh-body .sh-link {
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: 3px;
  padding: 8px 4px;
  text-align: center;
  border-radius: var(--sh-radius);
  transition: background .2s ease;
}
body.sh-body .sh-link:hover { background: var(--sh-row-hover); }
body.sh-body .sh-link-avatar {
  display: flex;
  align-items: center;
  justify-content: center;
  width: 56px;
  height: 56px;
  margin: 0 auto 5px;
  border-radius: 50%;
  overflow: hidden;
  background: var(--bg-soft);
}
body.sh-body .sh-link-avatar img {
  display: block;
  width: 100%;
  height: 100%;
  aspect-ratio: 1;
  object-fit: cover;
  transition: transform .2s ease;
}
body.sh-body .sh-link:hover .sh-link-avatar img { transform: scale(1.05); }
body.sh-body .sh-link-initial {
  font-size: 20px;
  font-weight: 600;
  color: var(--sh-muted);
}
body.sh-body .sh-link-name {
  font-size: 13px;
  line-height: 1.5;
  color: var(--sh-text);
}
body.sh-body .sh-link:hover .sh-link-name { color: var(--sh-accent-deep); }
body.sh-body .sh-link-host {
  max-width: 100%;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
  font-size: 11px;
  line-height: 1.5;
  color: var(--sh-muted);
}
body.sh-body .sh-link-n { font-size: 11px; line-height: 1.5; color: var(--sh-muted); }

body.sh-body .sh-pager {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  justify-content: center;
  gap: 8px;
  margin: 16px 0;
  font-size: 13px;
}
body.sh-body .sh-pager a,
body.sh-body .sh-pager span {
  padding: 4px 14px;
  border-radius: 4px;
  background: var(--sh-card);
  color: var(--sh-accent);
  box-shadow: var(--sh-shadow);
}
body.sh-body .sh-pager a:hover { background: var(--sh-row-hover); color: var(--sh-accent-deep); }
body.sh-body .sh-pager .is-off { color: var(--sh-faint); }
body.sh-body .sh-pager .sh-pager-now { background: var(--sh-accent); color: var(--sh-paper); }

/* ---------- 404 ---------- */
body.sh-body .sh-404 {
  padding: 32px 28px;
  text-align: center;
}
body.sh-body .sh-404-code {
  margin: 0 0 10px;
  font: 700 52px/1 var(--sh-font);
  letter-spacing: .08em;
  color: var(--sh-muted);
}
body.sh-body .sh-404-title {
  margin: 0 0 10px;
  font: 600 22px/1.4 var(--sh-font);
  letter-spacing: 0;
  color: var(--sh-text);
}
body.sh-body .sh-404-text {
  margin: 0 0 20px;
  font-size: 14px;
  line-height: 1.8;
  color: var(--sh-muted);
}
body.sh-body .sh-404-text a { color: var(--sh-accent); }
body.sh-body .sh-search-form {
  display: flex;
  gap: 8px;
  max-width: 420px;
  margin: 0 auto;
}
body.sh-body .sh-search-form input {
  flex: 1 1 auto;
  min-width: 0;
  height: 40px;
  padding: 0 12px;
  border: 1px solid var(--sh-line-strong);
  border-radius: 4px;
  background: var(--sh-card);
  font: 14px/1.4 var(--sh-font);
  color: var(--sh-text);
}
body.sh-body .sh-search-form input:focus-visible {
  outline: none;
  border-color: var(--sh-accent);
  box-shadow: 0 0 0 2px var(--sh-accent-soft);
}
body.sh-body .sh-search-form button {
  flex: none;
  height: 40px;
  padding: 0 18px;
  border: 0;
  border-radius: 4px;
  background: var(--sh-accent);
  color: var(--sh-paper);
  font: 14px/1 var(--sh-font);
  cursor: pointer;
}
body.sh-body .sh-search-form button:hover { background: var(--sh-accent-deep); }

/* ---------- 碎语 ---------- */
body.sh-body .sh-moments .moments-feed {
  display: grid;
  gap: 12px;
  margin: 0;
}
body.sh-body .sh-moments .moment-daygroup {
  min-width: 0;
  padding: 14px 16px;
  background: var(--sh-card);
  /* 平时不描边，卡片靠底色与圆角立住；留透明边只为 hover 变色时不跳 1px。 */
  border: 1px solid transparent;
  border-radius: var(--sh-radius);
  box-shadow: none;
  transition: border-color .2s ease;
}
body.sh-body .sh-moments .moment-daygroup:hover {
  border-color: var(--sh-accent);
  box-shadow: none;
}
body.sh-body .sh-moments .moment-day {
  margin: 0 0 6px;
  gap: 8px;
}
body.sh-body .sh-moments .moment-day-date {
  font: 600 13px/1.4 var(--sh-font);
  letter-spacing: .04em;
  color: var(--sh-text);
}
body.sh-body .sh-moments .moment-day-wd {
  font: 11px/1.4 var(--sh-font);
  letter-spacing: .06em;
  color: var(--sh-faint);
}
body.sh-body .sh-moments .moment-list { display: block; }
body.sh-body .sh-moments .moment { padding: 10px 0; }
body.sh-body .sh-moments .moment + .moment { border-top: 1px solid var(--sh-line); }
body.sh-body .sh-moments .moment-head { gap: 8px; }
body.sh-body .sh-moments .moment-time {
  font: 12px/1.4 var(--sh-font);
  letter-spacing: .02em;
  color: var(--sh-faint);
}
body.sh-body .sh-moments .moment-ord {
  font: 12px/1.4 var(--sh-font);
  letter-spacing: .02em;
  color: var(--sh-muted);
}
body.sh-body .sh-moments .moment-body.prose {
  margin: 4px 0 0;
  font-size: 14px;
  line-height: 1.8;
  color: var(--sh-text);
}
body.sh-body .sh-moments .moment-body.prose p { margin: 0 0 .55em; }
body.sh-body .sh-moments .moment-body.prose p:last-child { margin-bottom: 0; }
body.sh-body .sh-moments .moment-media { margin-top: 8px; }
body.sh-body .sh-moments .moment-media img { aspect-ratio: 4 / 3; }
body.sh-body .sh-moments .moment-media-cell {
  border-radius: 4px;
  background: var(--bg-soft);
}
body.sh-body .sh-moments .moment-media-more {
  background: rgba(0, 0, 0, .62);
  color: #ffffff;
}
body.sh-body .sh-moments .moments-byline { gap: 8px; }
body.sh-body .sh-moments .byline-name { font-size: 13px; color: var(--sh-text); }
body.sh-body .sh-moments .byline-note { font-size: 12px; color: var(--sh-faint); }

/* ---------- 窄屏 ---------- */
@media (max-width: 640px) {
  body.sh-body { padding: 10px 12px; }
  body.sh-body .sh-banner { padding: 22px 18px 48px; }
  body.sh-body .sh-banner-tools { right: 12px; bottom: 10px; }
  body.sh-body .sh-brand { padding-left: 12px; border-left-width: 2px; }
  body.sh-body .sh-banner-title { font-size: 22px; }
  body.sh-body .sh-brand-suffix { font-size: .8em; }
  body.sh-body .sh-banner-desc { font-size: 12px; }
  body.sh-body .sh-nav { gap: 2px 20px; }

  body.sh-body .sh-cat-grid { flex-wrap: wrap; gap: 10px; }
  body.sh-body .sh-cat {
    flex: 1 1 calc(50% - 5px);
    min-height: 100px;
    padding: 12px;
  }
  body.sh-body .sh-cat-index { display: none; }
  body.sh-body .sh-cat-desc {
    align-self: stretch;
    max-width: 100%;
    text-align: left;
  }

  body.sh-body .sh-note-strip { padding: 8px 12px; }
  body.sh-body .sh-note-text { font-size: 12px; }

  body.sh-body .sh-post-head { flex-direction: column; gap: 6px; }
  body.sh-body .sh-post-titles { flex-direction: column; gap: 2px; }
  body.sh-body .sh-post-title { font-size: 15px; line-height: 1.6; }
  body.sh-body .sh-post-card { padding: 12px; }

  body.sh-body .sh-single { padding: 16px 14px; }
  body.sh-body .sh-single-title { font-size: 20px; }
  body.sh-body .sh-comments-card { padding: 16px 14px; }
  /* 身份三栏在手机上一行一个：auto-fit 会按 9.5rem 折成两列，长邮箱只剩半行宽。 */
  body.sh-body .sh-comments-card .c-grid { grid-template-columns: 1fr; }
  body.sh-body .sh-404 { padding: 24px 16px; }
  body.sh-body .sh-404-code { font-size: 42px; }
  body.sh-body .sh-search-form { flex-direction: column; }
  body.sh-body .sh-search-form button { width: 100%; }

  body.sh-body .sh-search .s-field { grid-template-columns: minmax(0, 1fr); row-gap: 8px; }
  body.sh-body .sh-search .s-go { width: 100%; }

  body.sh-body .sh-links-grid { grid-template-columns: repeat(auto-fill, minmax(80px, 1fr)); gap: 14px 6px; }
  body.sh-body .sh-link-avatar { width: 64px; height: 64px; }
  body.sh-body .sh-links-card { padding: 14px 12px; }

  body.sh-body footer.site { margin-top: 18px; }
}

@media (max-width: 360px) {
  body.sh-body .sh-cat { flex-basis: 100%; }
}

@media (max-width: 390px) {
  body.sh-body .sh-nav { gap: 2px 14px; }
}

/* 打印：去掉卡片影与页头彩色底。 */
@media print {
  body.sh-body .sh-banner { background: #ffffff !important; background-image: none !important; color: #000; padding: 0 0 12px; }
  body.sh-body .sh-banner-tools { display: none; }
  body.sh-body .sh-brand { border-left-color: rgba(0, 0, 0, .28); text-shadow: none; }
  body.sh-body .sh-brand-suffix { opacity: .7; }
  body.sh-body .sh-banner-title a,
  body.sh-body .sh-banner-desc { color: #000; }
  body.sh-body .sh-card,
  body.sh-body .sh-post-card,
  body.sh-body .sh-cat,
  body.sh-body .sh-navcard,
  body.sh-body footer.site { box-shadow: none; }
}
