/* 结伴 · 新宣纸纸感主题
 * token 权威源：playground/reports/jieban-brand-20260918/index.html（品牌落地页）
 * 纪律：暖灰纸感、米白卡片、深灰褐文字；忌婚恋红、搞钱金、成功学大字报。
 *
 * 硬约束（见 tests/test_site_contract.py）：
 *   1. 只搬样式不搬内容——内部群昵称不上站点；
 *   2. 不引入落地页的频道选择器 / 入群弹窗（与「一期不设表单」的公开承诺冲突）。
 *
 * 落地页与本站的骨架差异：落地页是单页单栏长卷，本站是多页三栏站点。
 * 曾经试过把三栏也拆成单栏，结果首页六屏长卷丢了右侧「本页目录」的锚点导航，
 * 文档树也没了替代——故骨架维持主题默认（左文档树 + 右 TOC），
 * 这里只移植「表皮」：纸感 token、章节标识语言（eyebrow / h1 / lead）、仪轨化小控件。
 */

/* ================= 一 · Design Tokens · 新宣纸 ================= */

:root {
  /* —— 纸面与墨色 —— */
  --paper: #f5f1ea;
  --paper-deep: #ede6d9;
  --card: #fcfaf5;
  --ink: #3a352e;
  --ink-2: #6e655a;
  --ink-3: #9c9386;
  --line: #e2d9c8;
  --line-strong: #cfc4ae;

  /* —— 朱砂与黛 —— */
  --cinnabar: #a8543c;
  --cinnabar-deep: #8f442f;
  --dai: #46534f;
  --dai-deep: #384340;

  /* —— 四频道色 —— */
  --zhizu: #b08f56;
  --hengyu: #4f6472;
  --zhihe: #97707c;
  --yuduo: #5e7659;

  /* —— 圆角与阴影 —— */
  --r-s: 4px;
  --r-m: 8px;
  --shadow: 0 1px 2px rgba(58, 53, 46, 0.04), 0 4px 16px rgba(58, 53, 46, 0.05);

  /* —— 字族 —— */
  --serif: "Noto Serif SC", "Source Han Serif SC", "Songti SC", "STSong", "SimSun", Georgia, serif;
  --kai: "Kaiti SC", "STKaiti", "KaiTi", "Noto Serif SC", serif;
  --sans: -apple-system, BlinkMacSystemFont, "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", sans-serif;

  /* 单栏纸面宽度：与落地页 .wrap 一致 */
  --jb-measure: 860px;
}

/* —— 覆盖主题语义色，落到暖灰纸感 ——
 *
 * 必须连带 html[data-theme="light"|"dark"] 一起声明：pydata-sphinx-theme
 * 把同名变量定义在 html[data-theme="light"] 上，特异性 (0,1,1) 高于 :root 的
 * (0,1,0)——只写 :root 会被主题整块盖掉（实测：侧栏链接仍是主题的冷蓝灰）。
 * jieban.css 最后加载，同特异性下后声明者胜，故这里能赢。
 *
 * dark 一并落到浅色 token：本项目明确不要深色模式（与落地页一致）。
 *
 * 命名约定——按主题实际用法理解，不要按字面直觉：
 *   主题里 `--pst-color-X` 是「表面色」，`--pst-color-on-X` 是「该表面之上的文字色」。
 *   主题默认 `--pst-color-on-background:#fff`（浅色）——所以它是「叠在页面背景之上的
 *   那张面」，不是文字色。主题把 kbd、.sd-card-body、.admonition、.bd-header、表格
 *   斑马纹的 background-color 全绑在它上面，一旦误赋为深墨，这些控件会成片变黑：
 *   实测四频道卡片的卡体被刷成黑底，卡面文字直接不可读。文字色走 on-surface。 */
:root,
html[data-theme="light"],
html[data-theme="dark"] {
  --pst-color-background: var(--paper);
  --pst-color-on-background: var(--card);
  --pst-color-surface: var(--card);
  --pst-color-on-surface: var(--ink);
  --pst-color-text-base: var(--ink);
  --pst-color-text-muted: var(--ink-2);
  --pst-color-border: var(--line);
  --pst-color-primary: var(--dai);
  --pst-color-link: var(--cinnabar);
  --pst-color-link-hover: var(--cinnabar-deep);
  --pst-color-heading: var(--ink);
  --pst-color-secondary: var(--ink-2);
  --pst-color-shadow: transparent;

  --pst-font-family-base: var(--serif);
  --pst-font-family-heading: var(--serif);
  --pst-font-family-monospace: "JetBrains Mono", "Cascadia Mono", Consolas, monospace;
}

.theme-switch-button,
button.theme-switch-button {
  display: none !important;
}

/* ================= 二 · 纸面：噪点叠层 ================= */

body,
.bd-main,
.bd-content,
.bd-article,
.bd-container,
.bd-page-width {
  background-color: var(--paper);
  color: var(--ink);
}

body {
  font-family: var(--serif);
  line-height: 1.85;
  -webkit-font-smoothing: antialiased;
}

body::before {
  content: "";
  position: fixed;
  inset: 0;
  pointer-events: none;
  z-index: 99;
  opacity: 0.035;
  background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='160' height='160'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.9' numOctaves='2'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23n)'/%3E%3C/svg%3E");
}

/* ================= 三 · 三栏骨架：侧栏保留，只做纸感化 =================
   注：原「四 · 顶栏」一节已并入本节（顶栏撤销后只剩 header-article 的纸感化），
   故编号自「五」起续接，中间无遗漏。 */

/* 骨架交还主题：左文档树 + 右本页目录 + 中间正文，不动布局与宽度。
   这里只把侧栏从主题默认的灰白底换成纸面底色，并统一分隔线。 */
.bd-sidebar-primary,
.bd-sidebar-secondary {
  background-color: var(--paper-deep);
  border-color: var(--line);
}

/* 侧栏内的链接配色跟随纸感 token（主题默认是蓝紫色系） */
.bd-sidebar a,
.bd-toc a {
  color: var(--ink-2);
}

.bd-sidebar a:hover,
.bd-toc a:hover,
.bd-sidebar a.current,
.bd-toc a.current {
  color: var(--cinnabar);
}

/* —— 搜索框内的快捷键提示（kbd）——
 * 此处不再单独覆盖：主题默认即取 `--pst-color-on-background`（表面色）与
 * `--pst-color-text-muted`（次要墨色），上面把表面 token 纠正为纸色之后，
 * kbd 自然就是纸面上的浅色小片。之前那两枚纯黑方块正是 token 误赋的表现之一，
 * 已随根因一并消除（有测试守护）。 */

/* 搜索框聚焦环：主题默认取 --pst-color-accent（冷色），与纸感不搭 */
.bd-search:focus-within {
  box-shadow: 0 0 0 3px rgba(168, 84, 60, 0.16);
}

/* 顶栏在本主题中是空容器——品牌与主导航实际挂在左侧栏内。
   空着会留下一条没有内容的横线，故整体收起。 */
header.bd-header {
  display: none;
}

/* 收起顶栏后，真正吸顶的是正文列上方的 .bd-header-article（内含左右侧栏开关）。
   主题给它的是白底，会在暖灰纸面上切出一条突兀的白带，故改为纸面半透明。
   该元素是 d-print-none，打印样式无需处理。 */
.bd-header-article {
  background: rgba(245, 241, 234, 0.9);
  backdrop-filter: blur(8px);
  border: none;
  border-bottom: 1px solid var(--line);
}

.bd-header-article .btn {
  color: var(--ink-2);
}

.bd-header-article .btn:hover {
  color: var(--cinnabar);
  background: transparent;
}

/* 正文首屏与长卷节奏仍由第五节起的规则承担；此处只补正文列的上下呼吸 */
.bd-article-container {
  padding-top: 0 !important;
}

/* ================= 五 · 章节语言：eyebrow / h1 / h2 / lead ================= */

/* 页面标题＝章节开篇：居中、疏字距、大字 */
article.bd-article > section > h1 {
  font-family: var(--serif);
  font-size: clamp(2.1rem, 5vw, 3.1rem);
  font-weight: 400;
  letter-spacing: 0.16em;
  text-align: center;
  color: var(--ink);
  margin: 72px 0 14px;
}

article.bd-article h1 .headerlink,
article.bd-article h2 .headerlink,
article.bd-article h3 .headerlink {
  display: none;
}

article.bd-article h2 {
  font-family: var(--serif);
  font-size: 1.6rem;
  font-weight: 600;
  letter-spacing: 0.06em;
  color: var(--ink);
  margin: 4.2rem 0 0.9rem;
  padding-bottom: 0;
  border-bottom: none;
}

article.bd-article h3 {
  font-family: var(--serif);
  font-size: 1.18rem;
  letter-spacing: 0.05em;
  margin-top: 2.6rem;
}

.jb-eyebrow {
  font-family: var(--serif);
  font-size: 13px;
  letter-spacing: 0.3em;
  color: var(--cinnabar);
  text-align: center;
  margin: 5rem 0 0;
}

/* eyebrow 与紧随其后的标题构成「标识 + 标题」一体（落地页为 14px 间距）。
 * 页面开篇：raw HTML 的 eyebrow 是 <section> 的兄弟节点，用相邻选择器即可。
 * 章节中部：eyebrow 落在上一节末尾、标题在下一节，故用 :has() 判定；
 * 不支持 :has() 的浏览器只是间距偏大，不影响可读性。 */
.jb-eyebrow + section > h1,
.jb-eyebrow + section > h2 {
  margin-top: 0.5rem;
}

article.bd-article section:has(> .jb-eyebrow) + section > h2 {
  margin-top: 0.6rem;
}

.jb-lead {
  text-align: center;
  color: var(--ink-2);
  font-size: 15px;
  margin-bottom: 2.2rem;
}

/* ================= 六 · 首屏（首页专用） ================= */

.jb-seal {
  display: flex;
  align-items: center;
  justify-content: center;
  width: 92px;
  height: 92px;
  margin: 80px auto 34px;
  border-radius: 6px;
  background: var(--cinnabar);
  color: #f7efe3;
  font-family: var(--serif);
  font-size: 30px;
  line-height: 1.05;
  letter-spacing: 0.02em;
  box-shadow: 0 2px 0 var(--cinnabar-deep), 0 10px 24px rgba(168, 84, 60, 0.2);
}

.jb-seal + section > h1,
.jb-seal ~ h1 {
  margin-top: 0;
}

.jb-sub {
  text-align: center;
  font-family: var(--serif);
  font-size: 19px;
  letter-spacing: 0.1em;
  color: var(--ink-2);
  margin: 0 0 34px;
}

.jb-quote {
  max-width: 560px;
  margin: 0 auto;
  text-align: center;
}

.jb-quote q {
  quotes: none;
  font-family: var(--kai);
  font-size: 21px;
  color: var(--dai);
  line-height: 1.9;
}

.jb-quote q::before {
  content: "「";
  color: var(--cinnabar);
}

.jb-quote q::after {
  content: "」";
  color: var(--cinnabar);
}

.jb-quote cite {
  display: block;
  font-style: normal;
  font-size: 12px;
  color: var(--ink-3);
  margin-top: 10px;
  letter-spacing: 0.06em;
}

/* —— 按钮 —— */

.jb-cta {
  margin: 40px auto 0;
  padding: 0;
  display: block;
}

/* markdown 段落落在 container 内，按钮排布交给这一段 */
.jb-cta p {
  display: flex;
  gap: 14px;
  justify-content: center;
  flex-wrap: wrap;
  margin: 0;
}

.jb-btn {
  display: inline-block;
  padding: 12px 30px;
  border-radius: var(--r-s);
  font-size: 15px;
  letter-spacing: 0.08em;
  font-family: var(--sans);
  border: 1px solid transparent;
  text-decoration: none;
  transition: background 0.2s, border-color 0.2s, color 0.2s, transform 0.15s;
}

/* —— 按钮配色：控件自带一套配色，任何正文链接色规则都不该与它争夺 ——
 * 单类按钮规则只有 (0,2,0)，凡带类型选择器的链接规则都能压过它。曾经有三条：
 *   `article.bd-article a:hover` → (0,2,1)  本站正文链接规则 → 已删其冗余 color（第十二节）
 *   `a:visited:hover`            → (0,2,1)  主题
 *   `a:active,a:visited`         → (0,1,1)  主题
 * 实测事故两起：先是「朱砂底 + 深朱砂字」——背景由按钮规则刷成朱砂、文字被正文
 * 链接规则抢走；补了 :visited 之后又漏掉 :visited:hover，出现「已访问按钮悬停时
 * 文字不变白」。
 * 对策分两半，缺一不可：
 *   ① 正文链接规则不声明 color，色值统一由 token（--pst-color-link 及 hover 版）
 *      提供——组件规则才可能按各自特异性各归其位；
 *   ② 按钮侧显式声明 link/visited/hover/visited:hover/active，稳在 (0,3,0) 以上。
 * 改任一侧都要同步跑 tests/test_site_contract.py 里的按钮配色契约。 */

.jb-btn,
.jb-btn:link,
.jb-btn:visited,
.jb-btn:hover,
.jb-btn:visited:hover,
.jb-btn:active {
  text-decoration: none;
}

.jb-btn:active {
  transform: translateY(1px);
}

/* 主按钮：朱砂描边 + 淡朱砂底。纸感纪律下不用大面积深色填充——
 * 全页最重的色块留给印章，按钮只借朱砂的色相表态。 */
.jb-btn-primary,
.jb-btn-primary:link,
.jb-btn-primary:visited {
  background: rgba(168, 84, 60, 0.07);
  color: var(--cinnabar-deep);
  border-color: var(--cinnabar);
}

.jb-btn-primary:hover,
.jb-btn-primary:visited:hover,
.jb-btn-primary:focus-visible {
  background: var(--cinnabar);
  color: #fdf8f2;
}

.jb-btn-primary:active {
  background: var(--cinnabar-deep);
  border-color: var(--cinnabar-deep);
  color: #fdf8f2;
}

.jb-btn-ghost,
.jb-btn-ghost:link,
.jb-btn-ghost:visited {
  color: var(--ink);
  border-color: var(--line-strong);
  background: transparent;
}

.jb-btn-ghost:hover,
.jb-btn-ghost:visited:hover,
.jb-btn-ghost:focus-visible {
  border-color: var(--ink-2);
  color: var(--ink);
}

.jb-btn-ghost:active {
  color: var(--ink);
  border-color: var(--ink-2);
  background: rgba(58, 53, 46, 0.04);
}

/* ================= 七 · 主张卡（首页屏二） ================= */

.jb-manifesto {
  background: var(--card);
  border: 1px solid var(--line);
  border-radius: var(--r-m);
  box-shadow: var(--shadow);
  padding: 48px 52px;
  max-width: 680px;
  margin: 36px auto 0;
}

.jb-manifesto p {
  font-size: 16.5px;
  line-height: 1.95;
  margin-bottom: 20px;
  text-indent: 2em;
}

.jb-manifesto p:last-child {
  margin-bottom: 0;
}

.jb-manifesto .key {
  font-family: var(--serif);
  color: var(--cinnabar-deep);
}

.jb-manifesto em {
  font-style: normal;
  border-bottom: 1.5px solid var(--zhizu);
  padding-bottom: 1px;
}

/* ================= 八 · 四频道卡片 ================= */

.jb-card {
  background: var(--card) !important;
  border: 1px solid var(--line) !important;
  border-left: 3px solid var(--cc, var(--line)) !important;
  border-radius: var(--r-m) !important;
  box-shadow: var(--shadow) !important;
  transition: transform 0.2s, box-shadow 0.2s;
}

.jb-card:hover {
  transform: translateY(-2px);
  box-shadow: 0 2px 3px rgba(58, 53, 46, 0.05), 0 10px 24px rgba(58, 53, 46, 0.08) !important;
}

/* 四频道主题色：卡片、四格、结果卡共用 --cc */
.jb-zhizu { --cc: var(--zhizu); }
.jb-hengyu { --cc: var(--hengyu); }
.jb-zhihe { --cc: var(--zhihe); }
.jb-yuduo { --cc: var(--yuduo); }

.jb-card .sd-card-body {
  padding: 30px 30px 28px;
}

.jb-card .jb-card-title,
.jb-card .sd-card-title {
  font-family: var(--serif);
  font-size: 1.42rem !important;
  font-weight: 400;
  letter-spacing: 0.1em;
  color: var(--ink);
}

.jb-card p {
  color: var(--ink-2);
  font-size: 14px;
  line-height: 1.95;
}

.jb-card p strong {
  color: var(--cc, var(--dai));
  font-weight: 400;
  font-family: var(--kai);
}

.jb-card p:first-of-type {
  font-size: 12.5px;
  color: var(--ink-3);
}

.jb-card a {
  color: var(--cc, var(--dai));
  font-size: 13px;
  letter-spacing: 0.06em;
  text-decoration: none;
}

.jb-card a:hover {
  border-bottom: 1px solid var(--cc, var(--dai));
}

/* ================= 九 · 公约清单（虚线分隔 + 方形菱形点） ================= */

.jb-rules {
  background: var(--card);
  border: 1px solid var(--line);
  border-radius: var(--r-m);
  padding: 14px 40px;
  box-shadow: var(--shadow);
  max-width: 720px;
  margin: 34px auto 0;
}

.jb-rules li {
  list-style: none;
  padding: 17px 0 17px 32px;
  position: relative;
  font-size: 15.5px;
  line-height: 1.85;
  border-bottom: 1px dashed var(--line);
}

.jb-rules li:last-child {
  border-bottom: none;
}

.jb-rules li::before {
  content: "";
  position: absolute;
  left: 5px;
  top: 26px;
  width: 8px;
  height: 8px;
  border: 1.5px solid var(--dai);
  border-radius: 2px;
  transform: rotate(45deg);
}

.jb-rules li.danger {
  color: var(--cinnabar-deep);
}

.jb-rules li.danger::before {
  border-color: var(--cinnabar);
  background: rgba(168, 84, 60, 0.12);
}

.jb-rules li .sub {
  display: block;
  font-weight: 400;
  font-size: 13px;
  color: var(--ink-2);
  margin-top: 3px;
}

/* ================= 十 · 缘起：四格 / 断言 / 时间线 ================= */

.jb-origin-grid {
  display: grid;
  grid-template-columns: repeat(4, 1fr);
  gap: 12px;
  max-width: 720px;
  margin: 28px auto 34px;
}

.jb-origin-cell {
  background: var(--card);
  border: 1px solid var(--line);
  border-radius: var(--r-m);
  padding: 20px 14px;
  text-align: center;
  box-shadow: var(--shadow);
}

.jb-origin-cell .dot {
  width: 10px;
  height: 10px;
  border-radius: 50%;
  margin: 0 auto 10px;
  display: block;
}

.jb-origin-cell b {
  font-family: var(--serif);
  font-size: 17px;
  font-weight: 400;
  letter-spacing: 0.1em;
  display: block;
  color: var(--ink);
}

.jb-origin-cell small {
  display: block;
  color: var(--ink-3);
  font-size: 11.5px;
  margin-top: 4px;
}

.jb-origin-cell em {
  font-style: normal;
  display: block;
  color: var(--ink-2);
  font-size: 12px;
  margin-top: 8px;
  line-height: 1.6;
}

.jb-federal {
  max-width: 640px;
  margin: 0 auto;
  text-align: center;
  font-size: 16px;
  color: var(--ink);
}

.jb-federal .living-room {
  display: inline-block;
  margin-top: 8px;
  font-family: var(--kai);
  font-size: 19px;
  color: var(--dai);
}

.jb-timeline {
  max-width: 560px;
  margin: 34px auto 0;
  padding-left: 24px;
  border-left: 2px solid var(--line-strong);
  list-style: none;
}

.jb-t-item {
  position: relative;
  padding: 0 0 22px 22px;
  list-style: none;
}

.jb-t-item:last-child {
  padding-bottom: 0;
}

.jb-t-item::before {
  content: "";
  position: absolute;
  left: -29px;
  top: 9px;
  width: 10px;
  height: 10px;
  border-radius: 50%;
  background: var(--paper);
  border: 2px solid var(--cinnabar);
}

.jb-t-item b {
  font-family: var(--serif);
  font-size: 15px;
  font-weight: 400;
  color: var(--ink);
}

.jb-t-item p {
  font-size: 13.5px;
  color: var(--ink-2);
  margin: 2px 0 0;
  line-height: 1.8;
}

/* ================= 十一 · 四选一（静态版，无表单无弹窗） ================= */

/* container 生成 div.jb-choices 包住整个 markdown 列表，栅格要落在里面的 ul 上 */
.jb-choices {
  max-width: 640px;
  margin: 0 auto;
  padding: 0;
}

.jb-choices ul {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: 14px;
  margin: 0;
  padding: 0;
  list-style: none;
}

.jb-choices li {
  list-style: none;
  margin: 0;
  background: var(--card);
  border: 1px solid var(--line-strong);
  border-radius: var(--r-m);
  padding: 20px 22px;
  font-family: var(--sans);
  line-height: 1.7;
  transition: border-color 0.2s, background 0.2s;
}

/* 四选一各自的主题色（列表顺序固定：知足 / 恒与 / 知和 / 愈多） */
.jb-choices li:nth-child(1) { --cc: var(--zhizu); }
.jb-choices li:nth-child(2) { --cc: var(--hengyu); }
.jb-choices li:nth-child(3) { --cc: var(--zhihe); }
.jb-choices li:nth-child(4) { --cc: var(--yuduo); }

.jb-choices li:hover {
  border-color: var(--cc, var(--dai));
  background: #fffdf8;
}

.jb-choices li a {
  display: block;
  font-size: 15px;
  color: var(--ink);
  text-decoration: none;
}

.jb-choices li a:hover {
  color: var(--ink);
  border-bottom: none;
}

.jb-choices .hint {
  display: block;
  font-size: 12px;
  color: var(--ink-3);
  margin-top: 5px;
}

.jb-privacy {
  text-align: center;
  font-size: 12.5px;
  color: var(--ink-3);
  max-width: 560px;
  margin: 22px auto 0;
}

/* ================= 十二 · 正文元素 ================= */

article.bd-article p,
article.bd-article li {
  line-height: 2;
}

/* 正文链接：只调下划线节奏并排除控件，**不声明 color**。
 * 色值已由 token 层统一提供（主题基础规则 `a{color:var(--pst-color-link)}` →
 * --cinnabar，`a:hover` → --cinnabar-deep），此处重复声明过一次，代价很大：
 * `article.bd-article a` 带类型选择器 article，特异性 (0,2,1) 压过所有单类组件
 * 规则 (0,2,0)——按钮前景色被抢（「朱砂底 + 深朱砂字」），卡片内链接的频道色
 * 也被盖成朱砂。删掉冗余 color 后，组件配色按各自特异性自然各归其位。 */
article.bd-article a:not(.jb-btn):not(.btn) {
  text-decoration-thickness: 1px;
  text-underline-offset: 0.22em;
}

/* 框引：朱砂细边，纸面留白 */
blockquote {
  margin: 1.8rem 0;
  padding: 0.9rem 1.3rem;
  border-left: 3px solid var(--cinnabar);
  background: var(--card);
  border-radius: var(--r-s);
  color: var(--ink);
}

blockquote p {
  margin: 0;
  font-size: 1.06rem;
  line-height: 2;
  letter-spacing: 0.04em;
}

blockquote p:last-child {
  font-size: 0.92rem;
  color: var(--ink-3);
}

/* 表格 */
article.bd-article table {
  border-color: var(--line);
  font-size: 0.94rem;
}

article.bd-article thead th {
  background: var(--card);
  border-color: var(--line);
  font-weight: 400;
  letter-spacing: 0.06em;
}

article.bd-article td,
article.bd-article th {
  border-color: var(--line);
  padding: 0.6rem 0.8rem;
}

/* 红线条款：朱砂而非警示红，避免高对比 */
.admonition.danger {
  border: 1px solid var(--cinnabar);
  background: var(--card);
  border-radius: var(--r-m);
  box-shadow: var(--shadow);
}

.admonition.danger > .admonition-title {
  background: transparent;
  color: var(--cinnabar);
  border-bottom: 1px solid var(--line);
  letter-spacing: 0.06em;
}

.admonition.danger > .admonition-title::after {
  color: var(--cinnabar);
}

/* ================= 十三 · Mermaid 图 ================= */

pre.mermaid {
  margin: 1.8rem 0;
  padding: 1.2rem 1rem;
  background: var(--card);
  border: 1px solid var(--line);
  border-radius: var(--r-m);
  text-align: center;
}

.mermaid-fullscreen-btn {
  background: var(--card);
  border-color: var(--line);
  color: var(--ink-2);
}

.mermaid-fullscreen-btn:hover {
  background: var(--paper);
  color: var(--ink);
}

/* ================= 十四 · 入场动效（仅淡入 + 上移 12px） ================= */

.jb-reveal {
  opacity: 0;
  transform: translateY(12px);
  transition: opacity 0.4s ease-out, transform 0.4s ease-out;
}

.jb-reveal.jb-in {
  opacity: 1;
  transform: none;
}

/* ================= 十五 · 翻页与页脚 ================= */

.prev-next-footer {
  border-top: none;
  background: transparent;
}

.prev-next-area a {
  background: var(--card);
  border: 1px solid var(--line);
  border-radius: var(--r-m);
  box-shadow: var(--shadow);
  padding: 12px 16px;
}

.prev-next-area a:hover {
  border-color: var(--line-strong);
}

.prev-next-subtitle {
  font-size: 11.5px;
  color: var(--ink-3);
  letter-spacing: 0.08em;
}

.prev-next-title {
  font-family: var(--serif);
  font-size: 14px;
  letter-spacing: 0.04em;
  color: var(--ink);
}

footer.bd-footer-content {
  border-top: 1px solid var(--line);
  background: transparent;
  margin-top: 3rem;
}

.bd-footer-content__inner {
  max-width: var(--jb-measure);
  margin: 0 auto;
  padding: 44px 28px 52px;
  text-align: center;
  color: var(--ink-3);
  font-size: 12.5px;
  letter-spacing: 0.06em;
  display: block;
}

.bd-footer-content__inner .footer-item {
  display: block;
  margin: 0 0 4px;
}

.component-author,
.last-updated {
  display: none;
}

.copyright {
  color: var(--ink-3);
  font-size: 12.5px;
}

.extra_footer {
  color: var(--ink-3);
  font-size: 12.5px;
}

.extra_footer::before {
  content: "道用";
  display: block;
  font-family: var(--serif);
  color: var(--ink-2);
  letter-spacing: 0.2em;
  font-size: 14px;
  margin-bottom: 8px;
}

.extra_footer a {
  color: var(--ink-2);
  text-decoration: underline;
  text-decoration-thickness: 1px;
  text-underline-offset: 0.22em;
}

footer.bd-footer {
  display: none;
}

/* ================= 十六 · 移动端 ================= */

@media (max-width: 680px) {
  .jb-seal {
    width: 76px;
    height: 76px;
    font-size: 25px;
    margin: 48px auto 26px;
  }

  article.bd-article > section > h1 {
    font-size: 2rem;
    margin-top: 40px;
  }

  article.bd-article h2 {
    font-size: 1.35rem;
  }

  .jb-manifesto {
    padding: 32px 24px;
  }

  .jb-manifesto p {
    font-size: 15.5px;
  }

  .jb-origin-grid {
    grid-template-columns: 1fr 1fr;
  }

  .jb-choices ul {
    grid-template-columns: 1fr;
  }

  .jb-rules {
    padding: 10px 24px;
  }
}

@media (prefers-reduced-motion: reduce) {
  .jb-reveal {
    opacity: 1;
    transform: none;
    transition: none;
  }
}

/* ================= 十七 · 打印 / PDF 导出 ================= */

@media print {
  @page {
    size: A4;
    margin: 14mm 12mm;
  }

  body::before {
    display: none;
  }

  body {
    background: var(--paper);
    -webkit-print-color-adjust: exact;
    print-color-adjust: exact;
  }

  * {
    -webkit-print-color-adjust: exact;
    print-color-adjust: exact;
  }

  /* 滚动触发的淡入元素在打印态全部立即可见 */
  .jb-reveal {
    opacity: 1 !important;
    transform: none !important;
    transition: none !important;
  }

  /* 收紧纵向节奏，适配分页 */
  .jb-seal {
    margin-top: 12px;
    box-shadow: none;
  }

  article.bd-article > section > h1 {
    margin-top: 24px;
  }

  .jb-card:hover {
    transform: none;
  }

  /* 防跨页断裂 */
  .jb-manifesto,
  .jb-card,
  .jb-rules,
  .jb-rules li,
  .jb-origin-cell,
  .jb-choices li,
  .jb-t-item,
  blockquote,
  pre.mermaid {
    break-inside: avoid;
    page-break-inside: avoid;
  }

  .prev-next-footer,
  .bd-footer-content {
    display: none !important;
  }
}

/* ================= 十八 · 组织主页（doc/index.md） =================
 * 全站共用同一套 token 与主题表皮（一至十七节），此节只补组织主页特有组件：
 * 首屏印章、子站点入口卡、定位卡、应用五组卡片网格、收录说明。
 *
 * 两条纪律：
 *   1. 全部规则限定在 `.org-home` 内——组织主页的版式不外溢到结伴站；
 *   2. 用 `article.bd-article` 前缀抬高特异性——压过主题的 `article.bd-article h2`
 *      与 sphinx-design 自带 Bootstrap 的同名规则（`.card` / `.btn` / `.lead` 都被
 *      Bootstrap 定义过，仅写 `.card` 会被整块盖掉）。
 *
 * 分组计数与条目由 tests/test_site_contract.py 守护。
 * ============================================================== */

article.bd-article .org-home {
  /* 五类用法色条。取自同一纸感 token 池，与结伴四频道色同源异名 */
  --g-shequ: #97707c;
  --g-xiaolv: #5e7659;
  --g-gongju: #b08f56;
  --g-zhifu: #4f6472;
  --g-jizuo: #6b6259;
  --org-measure: 880px;
}

/* —— 首屏 —— */

article.bd-article .org-home .hero {
  text-align: center;
}

article.bd-article .org-home .box {
  max-width: var(--org-measure);
  margin: 0 auto;
}

article.bd-article .org-home .seal {
  display: flex;
  align-items: center;
  justify-content: center;
  width: 92px;
  height: 92px;
  margin: 24px auto 34px;
  border-radius: 6px;
  background: var(--cinnabar);
  color: #f7efe3;
  font-family: var(--serif);
  font-size: 44px;
  line-height: 1;
  box-shadow: 0 2px 0 var(--cinnabar-deep), 0 10px 24px rgba(168, 84, 60, 0.2);
}

article.bd-article .org-home .hero h1 {
  font-size: clamp(2.1rem, 6vw, 3.1rem);
  letter-spacing: 0.16em;
  text-indent: 0.16em;
  margin: 0 0 14px;
}

article.bd-article .org-home .sub {
  font-size: 19px;
  letter-spacing: 0.1em;
  color: var(--ink-2);
  margin: 0 0 34px;
}

article.bd-article .org-home .quote {
  max-width: 560px;
  margin: 0 auto;
}

article.bd-article .org-home .quote q {
  quotes: none;
  font-family: var(--kai);
  font-size: 21px;
  color: var(--dai);
  line-height: 1.9;
}

article.bd-article .org-home .quote q::before {
  content: "「";
  color: var(--cinnabar);
}

article.bd-article .org-home .quote q::after {
  content: "」";
  color: var(--cinnabar);
}

article.bd-article .org-home .quote cite {
  display: block;
  font-style: normal;
  font-size: 12px;
  color: var(--ink-3);
  margin-top: 10px;
  letter-spacing: 0.06em;
}

article.bd-article .org-home .cta {
  display: flex;
  gap: 14px;
  justify-content: center;
  flex-wrap: wrap;
  margin: 40px 0 0;
}

article.bd-article .org-home .cta .btn {
  display: inline-block;
  padding: 12px 30px;
  border-radius: var(--r-s);
  border: 1px solid transparent;
  font-family: var(--sans);
  font-size: 15px;
  line-height: 1.5;
  letter-spacing: 0.08em;
  text-decoration: none;
  transition: background 0.2s, border-color 0.2s, transform 0.15s;
}

article.bd-article .org-home .cta .btn:active {
  transform: translateY(1px);
}

/* 主按钮配色与结伴站 `.jb-btn-primary` 同源：朱砂描边 + 淡朱砂底，
 * 并连带锁死 :link/:visited，避免正文链接色接管控件前景色。 */
article.bd-article .org-home .cta .btn-primary,
article.bd-article .org-home .cta .btn-primary:link,
article.bd-article .org-home .cta .btn-primary:visited {
  background: rgba(168, 84, 60, 0.07);
  color: var(--cinnabar-deep);
  border-color: var(--cinnabar);
}

article.bd-article .org-home .cta .btn-primary:hover,
article.bd-article .org-home .cta .btn-primary:visited:hover,
article.bd-article .org-home .cta .btn-primary:focus-visible {
  background: var(--cinnabar);
  color: #fdf8f2;
}

article.bd-article .org-home .cta .btn-primary:active {
  background: var(--cinnabar-deep);
  border-color: var(--cinnabar-deep);
  color: #fdf8f2;
}

article.bd-article .org-home .cta .btn-ghost,
article.bd-article .org-home .cta .btn-ghost:link,
article.bd-article .org-home .cta .btn-ghost:visited {
  background: transparent;
  color: var(--ink);
  border-color: var(--line-strong);
}

article.bd-article .org-home .cta .btn-ghost:hover,
article.bd-article .org-home .cta .btn-ghost:visited:hover,
article.bd-article .org-home .cta .btn-ghost:focus-visible {
  background: transparent;
  border-color: var(--ink-2);
  color: var(--ink);
}

article.bd-article .org-home .cta .btn-ghost:active {
  background: rgba(58, 53, 46, 0.04);
  border-color: var(--ink-2);
  color: var(--ink);
}

/* —— 标题与导语 —— */

article.bd-article .org-home h2 {
  text-align: center;
}

article.bd-article .org-home .lead {
  text-align: center;
  color: var(--ink-2);
  font-size: 15px;
  max-width: var(--org-measure);
  margin: 0 auto 2.2rem;
}

/* —— 子站点入口卡 —— */

article.bd-article .org-home .subsite {
  margin: 2.6rem auto 0;
  max-width: var(--org-measure);
}

article.bd-article .org-home .subsite-card {
  display: flex;
  align-items: center;
  gap: 18px;
  padding: 18px 22px;
  background: var(--card);
  border: 1px solid var(--line);
  border-left: 3px solid var(--cinnabar);
  border-radius: var(--r-m);
  box-shadow: var(--shadow);
  color: inherit;
  text-decoration: none;
  transition: border-color 0.2s, transform 0.15s, box-shadow 0.2s;
}

article.bd-article .org-home .subsite-card:hover {
  border-color: var(--line-strong);
  border-left-color: var(--cinnabar-deep);
  transform: translateY(-2px);
  box-shadow: 0 2px 4px rgba(58, 53, 46, 0.05), 0 10px 26px rgba(58, 53, 46, 0.08);
}

article.bd-article .org-home .subsite-tag {
  flex: none;
  font-family: var(--sans);
  font-size: 11px;
  letter-spacing: 0.12em;
  color: var(--cinnabar);
  border: 1px solid var(--line-strong);
  border-radius: 3px;
  padding: 3px 7px;
}

article.bd-article .org-home .subsite-body {
  display: flex;
  flex-direction: column;
}

article.bd-article .org-home .subsite-name {
  font-size: 1.05rem;
  letter-spacing: 0.06em;
  color: var(--ink);
}

article.bd-article .org-home .subsite-desc {
  font-size: 13px;
  line-height: 1.7;
  color: var(--ink-2);
}

article.bd-article .org-home .subsite-card:hover .subsite-name {
  color: var(--cinnabar-deep);
}

article.bd-article .org-home .subsite-go {
  flex: none;
  margin-left: auto;
  font-size: 12px;
  color: var(--ink-3);
}

/* —— 定位卡 —— */

article.bd-article .org-home .manifesto {
  max-width: 680px;
  margin: 0 auto;
  padding: 48px 52px;
  background: var(--card);
  border: 1px solid var(--line);
  border-radius: var(--r-m);
  box-shadow: var(--shadow);
}

article.bd-article .org-home .manifesto p {
  font-size: 16.5px;
  line-height: 1.95;
  margin: 0 0 20px;
  text-indent: 2em;
}

article.bd-article .org-home .manifesto p:last-child {
  margin-bottom: 0;
}

article.bd-article .org-home .manifesto .key {
  color: var(--cinnabar-deep);
}

article.bd-article .org-home .manifesto em {
  font-style: normal;
  border-bottom: 1.5px solid var(--g-gongju);
  padding-bottom: 1px;
}

/* —— 应用五组 —— */

article.bd-article .org-home .group {
  max-width: var(--org-measure);
  margin: 0 auto 3.4rem;
}

article.bd-article .org-home .group-head {
  display: flex;
  align-items: baseline;
  gap: 12px;
  padding-left: 14px;
  border-left: 3px solid var(--accent, var(--line-strong));
  margin-bottom: 1.2rem;
}

article.bd-article .org-home .group-head h3 {
  font-size: 1.18rem;
  letter-spacing: 0.05em;
  margin: 0;
}

article.bd-article .org-home .group-head .count {
  font-family: var(--sans);
  font-size: 12px;
  letter-spacing: 0.04em;
  color: var(--ink-3);
}

article.bd-article .org-home .group-head .desc {
  font-size: 13px;
  color: var(--ink-2);
  margin-left: auto;
  text-align: right;
}

article.bd-article .org-home .cards {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(248px, 1fr));
  gap: 14px;
}

article.bd-article .org-home .cards .card {
  position: relative;
  display: block;
  padding: 20px 22px 20px 25px;
  background: var(--card);
  border: 1px solid var(--line);
  border-radius: var(--r-m);
  box-shadow: var(--shadow);
  color: inherit;
  text-decoration: none;
  transition: border-color 0.2s, transform 0.15s, box-shadow 0.2s;
}

article.bd-article .org-home .cards .card::before {
  content: "";
  position: absolute;
  left: 0;
  top: 14px;
  bottom: 14px;
  width: 3px;
  border-radius: 0 3px 3px 0;
  background: var(--accent, var(--line-strong));
}

article.bd-article .org-home .cards .card:hover {
  border-color: var(--line-strong);
  transform: translateY(-2px);
  box-shadow: 0 2px 4px rgba(58, 53, 46, 0.05), 0 10px 26px rgba(58, 53, 46, 0.08);
}

article.bd-article .org-home .cards .card .name {
  font-size: 1.02rem;
  letter-spacing: 0.03em;
  color: var(--ink);
}

article.bd-article .org-home .cards .card .repo {
  display: block;
  font-family: var(--sans);
  font-size: 11.5px;
  letter-spacing: 0.02em;
  color: var(--ink-3);
  margin: 2px 0 8px;
}

article.bd-article .org-home .cards .card .desc {
  font-size: 13.5px;
  line-height: 1.7;
  color: var(--ink-2);
  margin: 0;
}

article.bd-article .org-home .cards .card:hover .name {
  color: var(--cinnabar-deep);
}

/* —— 收录说明 —— */

article.bd-article .org-home .org-note {
  max-width: var(--org-measure);
  margin: 3rem auto 0;
  padding-top: 1.6rem;
  border-top: 1px solid var(--line);
  font-size: 13px;
  line-height: 2;
  text-align: center;
  color: var(--ink-3);
}

/* —— 组织主页移动端 —— */

@media (max-width: 680px) {
  article.bd-article .org-home .seal {
    width: 76px;
    height: 76px;
    font-size: 36px;
    margin-top: 8px;
  }

  article.bd-article .org-home .manifesto {
    padding: 32px 24px;
  }

  article.bd-article .org-home .manifesto p {
    font-size: 15.5px;
  }

  article.bd-article .org-home .subsite-card {
    flex-wrap: wrap;
    gap: 10px 14px;
  }

  article.bd-article .org-home .subsite-go {
    margin-left: 0;
    width: 100%;
  }

  article.bd-article .org-home .group-head {
    flex-wrap: wrap;
  }

  article.bd-article .org-home .group-head .desc {
    margin-left: 0;
    width: 100%;
    text-align: left;
  }
}

@media print {
  article.bd-article .org-home .cards .card,
  article.bd-article .org-home .manifesto,
  article.bd-article .org-home .subsite-card {
    break-inside: avoid;
    page-break-inside: avoid;
  }
}