/* pku-atmos-acm —— 学术个人主页风格：内容优先、暖白底、衬线标题、克制配色 */

:root {
  --ink: #1b2430;
  --ink-soft: #4a5563;
  --muted: #6b7280;
  --accent: #1d4e6f;
  --accent-soft: #4a7c99;
  --line: #e3ded3;
  --paper: #fcfbf8;
  --card: #ffffff;
  --maxw: 1120px;      /* 全站统一内容宽度（桌面/笔记本/平板共用一档） */
  --gutter: 28px;      /* 左右留白，窄屏时在媒体查询里收窄 */
  /* 标题字体：英文用衬线（Georgia），中文用黑体（思源黑体 → 苹方 → 微软雅黑）。
     见下方 html[lang="zh"] 规则 —— 中文标题不再落到 Songti SC / SimSun。 */
  --font-head-latin: Georgia, "Times New Roman", serif;
  --font-head-cjk: "Source Han Sans SC", "Noto Sans SC", "PingFang SC",
                   "Hiragino Sans GB", "Microsoft YaHei", sans-serif;
}

* { box-sizing: border-box; }

html { -webkit-text-size-adjust: 100%; }

body {
  margin: 0;
  background: var(--paper);
  color: var(--ink);
  font-family: -apple-system, "Segoe UI", "Helvetica Neue", "PingFang SC",
               "Hiragino Sans GB", "Microsoft YaHei", sans-serif;
  font-size: 17px;
  line-height: 1.75;
}

.wrap { width: 100%; max-width: var(--maxw); margin: 0 auto; padding: 0 var(--gutter); }
/* 响应式留白：平板 / 手机自动收窄，内容宽度始终撑满可视区 */
@media (max-width: 900px) {
  :root { --gutter: 20px; }
  main { padding: 26px 0 52px; }
}
@media (max-width: 560px) {
  :root { --gutter: 14px; }
  body { font-size: 16.5px; }
  main { padding: 20px 0 40px; }
  .page > h1 { font-size: 24px; }
  .statement-title { font-size: 20px; }
  .head-inner { gap: 10px 16px; }
}

/* 正文默认两端对齐（标题、导航、按钮、统计数字保持原对齐） */
p, li, blockquote,
.product-para, .prose, .product-desc, .card-abs, .plain, .talks li {
  text-align: justify;
  text-justify: inter-character;      /* 中西文混排按字符补偿，行末更齐 */
  overflow-wrap: break-word;          /* 长链接 / DOI 换行，避免撑破容器 */
}
/* 居中或右对齐的元素不受影响 */
.user-stat dd { text-align: center; }
.user-stats-table td:not(:first-child) { text-align: right; }
a { color: var(--accent); text-decoration: none; }
a:hover { text-decoration: underline; }

h1, h2, h3 {
  font-family: Georgia, "Times New Roman", var(--font-head-cjk);
  font-weight: 400;
  line-height: 1.35;
  color: var(--ink);
}

/* 中文页标题：黑体（无衬线），与正文的无衬线风格统一。
   原先中文标题落到 Songti SC / SimSun（宋体），笔画细，在 20–33px 字号下显弱；
   改用思源黑体（Noto Sans SC），字重 500 补回视觉分量，又不至于像 700 那样笨重。 */
html[lang="zh"] h1,
html[lang="zh"] h2,
html[lang="zh"] h3,
html[lang="zh"] .modal-title {
  font-family: var(--font-head-cjk);
  font-weight: 500;
  letter-spacing: .01em;
}

/* ---------- 全站 ACM 组图横幅（对应原站 nav.html 的 #top 容器） ---------- */
.group-banner { background: var(--paper); }
.group-banner .wrap { padding-top: 12px; padding-bottom: 0; }
.group-banner img {
  display: block; width: 100%; height: auto;
  border: 1px solid var(--line); border-radius: 3px;
}


/* ---------- 产品正文：按原网页层级（小标题 / 版本 / Level / 段落 / 插图） ---------- */
.product-body { max-width: none; }
.product-h3 {
  font-size: 21px; margin: 28px 0 10px; padding-bottom: 6px;
  border-bottom: 1px solid var(--line);
}
.product-h4 { font-size: 17px; margin: 22px 0 8px; color: var(--accent); font-weight: 600; }
.product-para { font-size: 16px; line-height: 1.75; color: var(--ink-soft); margin: 0 0 10px; }
.product-para p { margin: 0 0 8px; }
.product-para a { color: var(--accent); }
.product-list { font-size: 16px; color: var(--ink-soft); margin: 0 0 12px; padding-left: 24px; }
.product-body .product-figure { margin: 14px 0 18px; }
/* 原网页格式：下载 / user guide 链接就地紧跟 Level-3 / Level-2 小标题 */
.product-links { margin: 2px 0 12px; }
.product-links p { margin: 0 0 6px; font-size: 15.5px; line-height: 1.65; }
.product-links a { color: var(--accent); }
.product-links .dl-tag { margin-right: 6px; }

/* ---------- 数据申请弹出框（参照原站 coverLayer / login_lang / login） ---------- */
.apply-lead { max-width: none; font-size: 15.5px; color: var(--ink-soft); }
.modal-open { overflow: hidden; }
/* 层级要压过地图控件：Leaflet 的缩放按钮是 z-index 800、控件容器 1000，
   弹窗原来只有 100/101，于是「+ / −」会浮在注册表单上面（截图里能看到）。
   这里抬到 1200/1201，仍在搜索层（60）与普通内容之上。 */
.modal-cover { position: fixed; inset: 0; z-index: 1200; background: rgba(27, 36, 48, .55); }
.modal-cover[hidden], .modal[hidden] { display: none !important; }
.modal {
  position: fixed; inset: 0; z-index: 1201; display: flex;
  align-items: flex-start; justify-content: center;
  padding: 40px 16px; overflow-y: auto;
}
.modal-box {
  position: relative; width: 100%; max-width: 780px;
  background: var(--card); border: 1px solid var(--line); border-radius: 8px;
  padding: 26px 30px 30px; box-shadow: 0 18px 50px rgba(27, 36, 48, .22);
}
.modal-box-sm { max-width: 420px; text-align: center; padding-top: 34px; }
.modal-close {
  position: absolute; top: 8px; right: 14px; border: 0; background: transparent;
  font-size: 26px; line-height: 1; color: var(--muted); cursor: pointer;
}
.modal-close:hover { color: var(--ink); }
.modal-back {
  border: 0; background: transparent; color: var(--accent);
  font-size: 13px; cursor: pointer; padding: 0; margin: 0 0 10px;
}
.modal-title { font-family: Georgia, "Times New Roman", serif; font-size: 23px; margin: 0 0 4px; }
.modal-note { font-size: 14px; color: var(--muted); margin: 0 0 16px; }
.modal-lang-btns { display: flex; gap: 14px; justify-content: center; margin-top: 18px; }
/* 确认框用的窄版容器：比语言选择层的 420px 稍宽，文字保持左对齐（多行更好读） */
.modal-box-narrow { max-width: 460px; }
/* 两个按钮的确认框（如「有没有单位邮箱」）：竖排，按文字长短自适应，窄屏不挤 */
.modal-stack { flex-direction: column; align-items: stretch; }
.modal-stack .btn { width: 100%; }
/* 引用用户刚填的值（邮箱）：等宽字体 + 浅底，便于对着看是不是自己填错了 */
.modal-quote { margin: 12px 0 0; text-align: left; }
.modal-quote span {
  display: inline-block; max-width: 100%; padding: 3px 10px;
  border: 1px solid var(--line); border-radius: 3px; background: #f4f7f9;
  font-family: ui-monospace, "SFMono-Regular", Consolas, monospace;
  font-size: 13.5px; overflow-wrap: anywhere;
}
.modal .apply-form { max-width: none; }
.modal .pick-item { display: inline-flex; }
@media (max-width: 620px) {
  .modal { padding: 16px 10px; }
  .modal-box { padding: 22px 16px 24px; }
}

/* ---------- 顶栏 ---------- */
.site-head {
  border-bottom: 1px solid var(--line);
  background: var(--paper);
}
.head-inner {
  display: flex; align-items: center; justify-content: space-between;
  gap: 12px 28px; padding-top: 14px; padding-bottom: 14px; flex-wrap: wrap;
}
.brand { color: var(--ink); }
.brand:hover { text-decoration: none; }
.brand-title {
  display: block;
  font-family: Georgia, "Times New Roman", "Songti SC", serif;
  font-size: 22px; letter-spacing: .01em;
}
.brand-sub { display: block; font-size: 13.5px; color: var(--muted); line-height: 1.5; max-width: 46ch; }

.nav { display: flex; gap: 6px; flex-wrap: wrap; align-items: center; }
/* 桌面端顶栏：菜单靠左、语言切换靠右，两端与正文左右边界对齐 */
.nav-wide { width: 100%; justify-content: space-between; flex-wrap: nowrap; }
.nav-main { display: flex; gap: 6px; align-items: center; flex-wrap: wrap; min-width: 0; }
.nav a {
  color: var(--ink-soft); font-size: 16px; padding: 6px 10px; border-radius: 4px;
  white-space: nowrap;
}
.nav a:hover { background: #f0ece4; text-decoration: none; }
.nav a[aria-current="page"] { color: var(--accent); }
.nav .lang { color: var(--accent-soft); }

.nav-toggle { display: none; }
.nav-toggle summary {
  cursor: pointer; list-style: none; font-size: 15.5px; color: var(--ink-soft);
  border: 1px solid var(--line); border-radius: 4px; padding: 4px 10px;
}
.nav-toggle summary::-webkit-details-marker { display: none; }

@media (max-width: 980px) {
  .nav-toggle { display: block; }
  .nav-wide { display: none; }
  .nav-toggle[open] nav { display: flex; flex-direction: column; padding-top: 8px; }
}

/* ---------- 通用排版 ---------- */
main { padding: 32px 0 64px; min-height: 50vh; }
.page > h1, .statement-title { font-size: 33px; margin: 0 0 20px; }
.sec-title { font-size: 22px; margin: 40px 0 12px; padding-bottom: 6px; border-bottom: 1px solid var(--line); }
/* 分节标题右侧的「More」链接（不换行、与标题基线对齐） */
.sec-more {
  float: right; font-size: 15px; font-weight: 400; white-space: nowrap;
  letter-spacing: 0; color: var(--accent);
}
.prose { max-width: none; }
/* 正文宽度：**不做 68ch 上限**，宽度由栅格决定（有侧栏的页面 800 px）。
   曾经把段落压到 68ch / 640 px「为了阅读舒适」，结果每行右边空出 160 px，
   与同宽的小节标题、分隔线、卡片右缘全部对不齐——看起来像没排版。
   全站统一按列宽走，长行的舒适度由字号（16.5–17 px）与行高（1.75）兜底。 */
.prose > p,
.prose > ul,
.prose > ol,
.statement-lead,
.bullets { max-width: none; }
.prose p { margin: 0 0 14px; }
.prose ol, .prose ul { margin: 0 0 14px; padding-left: 26px; }
.prose li { margin-bottom: 8px; }
/* 代码块（版本列表等）自带宽屏行，限制宽度并在块内滚动，避免整页横向溢出 */
.prose pre, .product-para pre, .product-body pre {
  max-width: 100%;
  overflow-x: auto;
  padding: 10px 12px;
  background: #f6f4ef;
  border: 1px solid var(--line);
  border-radius: 4px;
}

/* ---------- 首页研究定位 ---------- */
.statement { margin-bottom: 8px; }
/* 首页内容（含左侧导航）整体下移一点：
   <main class="wrap"> 的 padding 简写（0 var(--gutter)）会覆盖 main 自身的上内边距，
   标题原本紧贴导航；这里给首页布局补上呼吸空间，侧栏与标题因此仍在同一基线。 */
/* 全站首行位置与首页一致（原先只有首页单独加 20px 顶部留白） */
main.wrap { padding-top: 20px; }
/* 页脚前留白：全站所有页面统一 2 行（baseof.html 末尾的 .page-tail-space）
   1 行 = line-height 1.75em × 17px ≈ 30px，2 行 ≈ 3.4em */
.page-tail-space { height: 3.4em; }
.statement-title { font-size: clamp(20px, 2.15vw, 26px); max-width: none; line-height: 1.3; }
.bullets { max-width: none; padding-left: 22px; margin: 0 0 12px; }
.bullets li { margin-bottom: 8px; }

/* ---------- 研究亮点横向轨道 ---------- */
/* 轮播按钮原先 align-items: stretch 把它拉成 32×562 px 的竖条，
   换成与卡片顶部对齐的 32×32 方块；卡片行本身仍等高 */
.rail { display: flex; align-items: flex-start; gap: 8px; }
.rail-btn {
  flex: none; width: 32px; height: 32px; margin-top: 2px;
  border: 1px solid var(--line); border-radius: 4px;
  background: var(--card); color: var(--ink-soft); font-size: 18px; line-height: 1;
  cursor: pointer;
}
.rail-btn:hover { background: #f0ece4; }
.cards {
  list-style: none; margin: 0; padding: 2px; display: flex; gap: 16px;
  overflow-x: auto; scroll-snap-type: x mandatory; scroll-behavior: smooth;
}
.cards::-webkit-scrollbar { height: 6px; }
.cards::-webkit-scrollbar-thumb { background: #d8d2c6; border-radius: 3px; }
.card {
  flex: 0 0 320px; scroll-snap-align: start; background: var(--card);
  border: 1px solid var(--line); border-radius: 6px; padding: 16px 18px;
  display: flex; flex-direction: column;
}
/* 窄屏：卡片占满可视宽度，避免文字被轮播容器裁掉；左右箭头隐藏，直接横向滑动 */
@media (max-width: 700px) {
  .rail-btn { display: none; }
  .card { flex: 0 0 100%; }
}

.card-img {
  width: 100%; height: 190px; object-fit: contain; background: #fff;
  border: 1px solid var(--line); border-radius: 4px; margin-bottom: 12px;
}
.card-title { font-size: 16px; margin: 0 0 6px; }
.card-meta { font-size: 13px; color: var(--muted); margin: 0 0 4px; }
.card-abs { font-size: 14px; color: var(--ink-soft); margin: 8px 0 12px; }
.card-links { margin: auto 0 0; font-size: 13px; display: flex; gap: 12px; }

@media (prefers-reduced-motion: reduce) {
  .cards { scroll-behavior: auto; }
}

/* ---------- 新闻 ---------- */
.news-list { list-style: none; padding: 0; }
.news-list li { padding: 11px 0; border-bottom: 1px dotted var(--line); font-size: 16.5px; }
.news-list time { color: var(--muted); font-variant-numeric: tabular-nums; margin-right: 12px; }

/* News 页列表：年份单独成列，条目换行后其余各行与首行正文左对齐（悬挂缩进） */
.news-list.full li {
  display: grid;
  grid-template-columns: max-content minmax(0, 1fr);
  column-gap: 20px;
  align-items: baseline;
}
/* 同年只显示一次年份；time 仍占 4ch，保证留空行的正文仍与首行对齐 */
.news-list.full time { margin-right: 0; width: 4ch; }

/* ---------- 媒体报道（Press）：与「团队动态」同一套列表（年份进时间列） ---------- */
/* 年份列与首行论文对齐（baseline 会让多行条目错位，这里改用 start） */
.news-list.press-list li { align-items: start; }
/* 论文行 / 媒体行不做两端对齐：链接之间没有可拉伸的空白，强行对齐会出现大洞 */
.press-paper { display: block; font-size: 16.5px; text-align: left; }
.press-paper a { font-weight: 500; }
.press-kind, .press-note { color: var(--muted); font-size: 14px; }
.press-cov {
  display: flex; gap: .5em;
  margin: 4px 0 0; font-size: 15px; line-height: 1.85; color: var(--ink-soft);
  text-align: left;
}
.press-dash { flex: none; color: #b9b2a5; }
.press-cov-body { min-width: 0; }
.press-sep { margin: 0 .5em; color: #c3bcaf; }
.press-cov a { color: var(--accent); }


/* ---------- 论文列表 ---------- */
.pub-tools { margin: 8px 0 4px; font-size: 15.5px; color: var(--ink-soft); }
.year {
  font-size: 20px; margin: 28px 0 8px; padding-bottom: 4px;
  border-bottom: 1px solid var(--line);
  /* 不做 position: sticky：年份标题都是同一个父容器的兄弟节点，sticky 会把
     历年的标题全部钉在视口顶部（叠在一起），点“2015”时视口顶部显示的却是
     “2016”，看着就像没跳到。去掉后标题随正文滚动，锚点落点即所见。 */
}
.pub { padding: 10px 0 12px; max-width: none; }
.pub.is-hidden, .year.is-hidden { display: none; }
/* 「已录用 / 在审」并入期刊论文后，用的是年份标题的样式（同一个 .year，共用筛选逻辑），
   但字号收小一档、颜色偏灰，读起来是"这一节的第一组"而不是又一个年份 */
.year-underreview { font-size: 18px; color: var(--ink-soft); }

.is-sec-hidden { display: none; }
.pub-authors { margin: 0; font-size: 15.5px; color: var(--ink-soft); }
/* 论文题目**不做两端对齐**：全站 p 默认 text-align: justify + text-justify: inter-character，
   两行以上的题目会被拉开字距/词距（中文是字间、西文是词间），看着像换了字体；
   一行标题是"末行"、不拉伸，于是同一列表里长短标题的观感不一致。
   与 .press-paper 的做法一致：这里改成左对齐。 */
.pub-title { margin: 2px 0; font-size: 17.5px; font-weight: 500; text-align: left; }
/* 「已录用 / 在审」的状态词（submitted / accepted / under review）跟在题目同一行，
   小一号、灰色、常规字重：说明状态，但不与题目争夺视觉重量 */
/* nowrap：中文标题换行时「已投稿」会被从中间断开（「已投」/「稿」），
   连同前面的小圆点整体换到下一行才不会看错 */
.pub-status { margin-left: .6em; font-size: 14.5px; font-weight: 400; color: var(--muted); white-space: nowrap; }
.pub-status::before { content: "·"; margin-right: .45em; }
.pub-meta { margin: 0; font-size: 14.5px; color: var(--muted); }
/* 中文期刊论文在英文页的语种提示：跟在著录后面一行，字号小、颜色淡，不抢正文 */
.pub-langnote { margin: 2px 0 0; font-size: 13.5px; color: var(--muted); font-style: italic; }
.pub-links { margin: 6px 0 0; font-size: 14.5px; display: flex; align-items: center; gap: 12px; flex-wrap: wrap; }
/* 荣誉 / 报道 / 指标标注：小圆角标签，整行可换行；有链接的显示为链接但不加下划线 */
.pub-notes { margin: 8px 0 0; display: flex; flex-wrap: wrap; align-items: center; gap: 6px; }
.pub-note {
  font-size: 12.5px; line-height: 1.5; color: var(--ink-soft);
  background: var(--paper); border: 1px solid var(--line); border-radius: 999px;
  padding: 1px 9px; white-space: nowrap;
}
.pub-note a { color: inherit; text-decoration: none; }
.pub-note a:hover { color: var(--accent); text-decoration: underline; }

/* ---------- 数据产品 ---------- */
.product { border-top: 1px solid var(--line); padding: 24px 0; }
.product-name { font-size: 24px; margin: 0 0 8px; }
.product-meta { display: flex; flex-wrap: wrap; gap: 24px; margin: 12px 0; font-size: 15.5px; }
.product-meta dt { color: var(--muted); }
.product-meta dd { margin: 0 0 0 8px; display: inline; }
.product-meta dt, .product-meta dd { display: inline; }
.changelog { margin: 8px 0 12px; font-size: 15.5px; }
.changelog summary { cursor: pointer; color: var(--accent); }
.changelog ul { margin: 8px 0 0; padding-left: 20px; color: var(--ink-soft); }
.cite-box {
  margin-top: 12px; padding: 12px 14px; background: #f5f2ec; border-radius: 4px;
  font-size: 14.5px; display: flex; align-items: center; gap: 12px; flex-wrap: wrap;
}
.cite-text { margin: 0; flex: 1 1 320px; color: var(--ink-soft); }

/* ---------- 申请表单 ---------- */
.apply { margin-top: 40px; border-top: 2px solid var(--line); padding-top: 24px; }
.apply-form { max-width: 720px; }
.row { display: flex; gap: 16px; flex-wrap: wrap; margin-bottom: 12px; }
.row label { flex: 1 1 220px; display: block; font-size: 14px; color: var(--muted); }
.row input, .row select {
  display: block; width: 100%; box-sizing: border-box;
  margin-top: 4px; padding: 7px 10px; border: 1px solid var(--line);
  border-radius: 4px; background: var(--card); font: inherit; font-size: 16px; color: var(--ink);
}
.row label > span[aria-hidden="true"] { color: #b8433a; margin-left: 2px; }
.pick { border: 1px solid var(--line); border-radius: 6px; padding: 10px 14px; margin: 0 0 14px; }
.pick legend { font-size: 14px; color: var(--muted); padding: 0 6px; }
.pick-item { display: inline-flex; align-items: center; gap: 6px; margin-right: 18px; font-size: 15px; }
.subscribe { margin-bottom: 16px; display: flex; }
.btn {
  font: inherit; font-size: 16px; padding: 10px 24px; border: 1px solid var(--accent);
  background: var(--accent); color: #fff; border-radius: 4px; cursor: pointer;
}
.btn:hover { background: #163e58; }
/* 弹窗里的次级按钮（「已登记过？直接继续下载」） */
.btn-ghost {
  background: #fff; color: var(--accent); margin-top: 14px; font-size: 13px;
  padding: 6px 14px;
}
.btn-ghost:hover { background: #f1f6f9; }
.form-note { font-size: 13px; color: var(--muted); margin: 10px 0 0; }

/* ---------- 注册 / 登录（数据下载弹窗） ---------- */
.auth-tabs {
  display: flex; gap: 6px; margin: 4px 0 14px;
  border-bottom: 1px solid var(--line);
}
.auth-tab {
  appearance: none; background: none; border: none;
  border-bottom: 2px solid transparent; margin-bottom: -1px;
  padding: 8px 14px; font: inherit; font-size: 15.5px; color: var(--muted);
  cursor: pointer;
}
.auth-tab:hover { color: var(--accent); }
.auth-tab.is-on { color: var(--accent); border-bottom-color: var(--accent); font-weight: 600; }
.auth-status {
  font-size: 14px; color: #2f6b3f; background: #f2f9f3;
  border: 1px solid #d5e8d7; border-radius: 4px;
  padding: 6px 10px; margin: 0 0 12px;
}
/* 字段旁的即时提示（如邮箱框下方的「请改用单位邮箱」）：贴着输入框，比底部错误条醒目 */
.field-note {
  display: block; margin: 5px 0 0; font-size: 12.5px; font-weight: 400;
  line-height: 1.5; color: #a12b20; text-align: left;
}
.form-error {
  font-size: 14px; color: #a12b20; background: #fdf2f1;
  border: 1px solid #f0d5d2; border-radius: 4px;
  padding: 6px 10px; margin: 10px 0 0;
}
.linklike {
  appearance: none; background: none; border: none; padding: 0;
  font: inherit; font-size: 12px; color: var(--accent);
  cursor: pointer; text-decoration: underline;
}
/* 账号校验方式提示：服务端模式为中性说明，纯静态预览时提示“仅本浏览器” */
.auth-mode-note {
  padding-left: 9px; border-left: 2px solid var(--line); line-height: 1.5;
}
.auth-mode-note.is-local { color: #8a5a13; border-left-color: #d8b268; }
.auth-status-label { font-weight: 600; }
.btn[disabled] { cursor: default; opacity: .68; }

/* ---------- 成员 ---------- */
.member { display: flex; gap: 18px; align-items: flex-start; margin-bottom: 8px; }
.member img { width: 96px; height: 96px; object-fit: cover; border-radius: 4px; }
.member-name { margin: 0; font-size: 18.5px; }
.member-role { margin: 0; font-size: 15px; color: var(--muted); }
.member-grid { list-style: none; padding: 0; display: flex; flex-wrap: wrap; gap: 20px; }
.member-grid li { width: 176px; }
.member-grid .member-role { font-size: 14px; }   /* 让 "PhD student, 2021–present" 单行放下 */
.member-photo-empty {
  display: block; width: 100%; aspect-ratio: 5 / 7;
  border: 1px solid var(--line); border-radius: 4px; background: #f7f4ee
    url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="%23cdc6b6"><circle cx="12" cy="8.2" r="4"/><path d="M4 21c0-4.3 3.6-6.9 8-6.9s8 2.6 8 6.9z"/></svg>')
    center / 46% no-repeat;
}
.member-grid img {
  width: 100%; height: auto; aspect-ratio: 5 / 7;
  object-fit: contain; object-position: center;
  background: #fff; border: 1px solid var(--line); border-radius: 4px;
}

/* ---------- 链接 ---------- */
.linkgroup { margin-bottom: 24px; }
.mylink { list-style: none; padding: 0; }
.mylink li { padding: 6px 0; font-size: 16.5px; }
.link-note { color: var(--muted); font-size: 14px; }

/* ---------- 页脚 ---------- */
/* 页脚 2 行：机构·单位·负责人·邮箱 / 更新·访问量·隐私说明。
   字号略小于正文，保证 1120px 内容宽度下每行都能放下。 */
.site-foot { border-top: 1px solid var(--line); padding: 14px 0 20px; }
.foot-inner { display: block; }
.foot-line {
  margin: 0; font-size: 12px; line-height: 1.7; color: var(--muted);
}
.foot-line + .foot-line { margin-top: 2px; }
.foot-line-org { color: var(--ink-soft); font-size: 12px; }
.foot-org { color: var(--ink-soft); }
/* 分隔点由相邻兄弟生成：隐藏某一项时不会残留孤立的「·」 */
.foot-line > * + *::before,
.foot-contact > a::before {
  content: "\00b7"; margin: 0 5px; color: #b9b2a5;
}
.foot-contact { white-space: nowrap; }
.foot-line a { color: var(--accent); }
.foot-views { font-variant-numeric: tabular-nums; }
/* 页脚政策入口（隐私 / 联系 / 加入我们）：三个链接等距，中间不插「·」 */
.foot-policy { display: inline-flex; flex-wrap: wrap; gap: 4px 10px; }
/* 窄屏：平板起隐藏单位全称，让页脚保持 2 行 */
@media (max-width: 900px) {
  /* 隐藏单位全称；联系人另起一行时去掉段首多余的分隔点 */
  .foot-institution { display: none; }
  .foot-contact::before { content: none; }
}
@media (max-width: 560px) {
  main.wrap { padding-top: 14px; }
  .news-list.full li { column-gap: 12px; font-size: 15.5px; }
  .press-cov { font-size: 14px; }
  .foot-line { font-size: 11.5px; }
  /* 手机屏宽有限：政策链接另起一行（不再隐藏——隐私与联系方式在手机上更需要） */
  .foot-policy { display: flex; gap: 4px 10px; }
}

/* 注册表单的隐私同意勾选：与字段同宽，文字小一号，勾选框与首行对齐 */
.consent {
  display: flex; gap: 8px; align-items: flex-start;
  margin: 4px 0 2px; font-size: 13.5px; line-height: 1.6; color: var(--ink-soft);
}
.consent input { flex: none; margin-top: 3px; accent-color: var(--accent); }
.consent a { color: var(--accent); }

.bib {
  font: inherit; font-size: 12px; padding: 3px 8px; border: 1px solid var(--line);
  border-radius: 4px; background: var(--card); color: var(--ink-soft); cursor: pointer;
}
.bib:hover { background: #f0ece4; }

/* ---------- 可访问性 ---------- */
.skip-link {
  position: absolute; left: -9999px; top: 0;
  background: var(--card); color: var(--accent);
  padding: 8px 14px; border-radius: 0 0 4px 0; z-index: 10;
}
.skip-link:focus { left: 0; }

a:focus-visible,
button:focus-visible,
summary:focus-visible,
input:focus-visible {
  outline: 2px solid var(--accent);
  outline-offset: 2px;
}

/* ---------- 论文详情页 ---------- */
.paper-kicker { margin: 0 0 4px; font-size: 12px; letter-spacing: .06em; text-transform: uppercase; color: var(--muted); }
.paper-title { font-size: 28px; margin: 0 0 12px; }
.paper-authors { margin: 0 0 2px; font-size: 16.5px; }
.paper-journal { margin: 0 0 16px; font-size: 15px; color: var(--muted); font-style: italic; }
.paper-langnote { margin: -10px 0 16px; font-size: 14px; color: var(--muted); font-style: italic; }
.paper-links { display: flex; align-items: center; gap: 10px; flex-wrap: wrap; margin-bottom: 8px; }
.paper-section { margin-top: 24px; }
.paper-back { margin-top: 32px; font-size: 14px; }
.plain { padding-left: 22px; font-size: 15.5px; color: var(--ink-soft); }

/* 论文页：关键词标签 + 摘要语种说明（2026-11-10，配合 data/pub_abstracts.yaml） */
.kw-list {
  list-style: none; margin: 0; padding: 0;
  display: flex; flex-wrap: wrap; gap: 8px;
}
.kw-list li {
  font-size: 13px; line-height: 1.6; color: var(--ink-soft);
  background: var(--card); border: 1px solid var(--line); border-radius: 999px;
  padding: 2px 12px;
}
.paper-note { margin: 8px 0 0; font-size: 13px; color: var(--muted); }

/* 同一篇论文中、英文版分别发表：两版著录并列（2026-11-10，data 里 dual_version）
   左细边框 + 浅底，区别于正文；卷期与 DOI 各占一行，窄屏自动折行。 */
.paper-versions {
  margin: 0 0 20px; padding: 12px 16px;
  border: 1px solid var(--line); border-left: 3px solid var(--accent);
  border-radius: 4px; background: var(--card);
}
.paper-versions-title {
  margin: 0 0 8px; font-size: 12px; font-weight: 600;
  letter-spacing: .06em; text-transform: uppercase; color: var(--muted);
}
.paper-versions-list { list-style: none; margin: 0; padding: 0; font-size: 14.5px; }
.paper-versions-list li { display: flex; gap: 10px; align-items: baseline; margin: 0 0 8px; }
.paper-versions-list li:last-child { margin-bottom: 0; }
.v-label {
  flex: none; font-size: 12px; line-height: 1.6; padding: 1px 8px;
  border: 1px solid var(--line); border-radius: 10px; background: #fff; color: var(--muted);
}
.v-body { color: var(--ink-soft); }
.v-title { display: block; color: var(--ink); }
.v-cite { display: block; font-style: italic; }
.v-doi { display: block; font-size: 13px; }
@media (max-width: 560px) {
  .paper-versions-list li { display: block; }
  .v-label { display: inline-block; margin-bottom: 4px; }
}

.pill {
  display: inline-block; font-size: 14px; padding: 3px 12px;
  border: 1px solid var(--line); border-radius: 12px; background: var(--card); color: var(--accent);
}
.pill:hover { background: #f0ece4; text-decoration: none; }

.tag {
  display: inline-block; margin-left: 8px; padding: 1px 8px;
  font-size: 12px; letter-spacing: .04em; text-transform: lowercase;
  border: 1px solid var(--line); border-radius: 10px; color: var(--muted);
  vertical-align: middle;
}

.honeypot {
  position: absolute; left: -9999px; width: 1px; height: 1px; overflow: hidden;
}

/* ---------- 导入内容：论文分节 / 校友表 / 报告列表 ---------- */
.talks { font-size: 15.5px; }
.talks li { margin: 4px 0; color: var(--ink-soft); }

.data-table { width: 100%; border-collapse: collapse; font-size: 14.5px; }
.data-table th, .data-table td {
  text-align: left; padding: 6px 10px; border-bottom: 1px solid var(--line);
  vertical-align: top;
}
.data-table th { font-weight: 600; color: var(--muted); white-space: nowrap; }
.table-wrap { overflow-x: auto; }

.member-note { font-size: 14px; color: var(--muted); margin: 2px 0 0; }
/* ---------- 负责人：放大照片，文字分上下两组，整体高度与照片一致 ---------- */
.leader-card { display: flex; gap: 28px; align-items: stretch; margin: 10px 0 4px; }
.leader-photo {
  flex: none; width: 200px; height: 290px; object-fit: cover; object-position: center top;
  border: 1px solid var(--line); border-radius: 6px; background: #fff;
}
.leader-body { display: flex; flex-direction: column; justify-content: space-between; min-height: 290px; padding: 2px 0; }
.leader-name { margin: 0 0 4px; font-size: 24px; font-weight: 600; }
.leader-name-alt { font-size: .68em; font-weight: 400; color: var(--muted); letter-spacing: .01em; }
.leader-role { margin: 0 0 12px; font-size: 16px; color: var(--accent); }
.leader-office { margin: 0; font-size: 15.5px; line-height: 1.7; color: var(--ink-soft); max-width: 52ch; }
.leader-name, .leader-role, .leader-office, .leader-line, .leader-profiles { text-align: left; }
.leader-line { margin: 0 0 3px; font-size: 15.5px; }
.leader-key { display: inline-block; min-width: 3.2em; color: var(--muted); font-size: 14px; }
.leader-profiles { margin: 10px 0 0; font-size: 14.5px; }
.leader-profiles a { color: var(--accent); white-space: nowrap; }   /* 链接名不跨行拆开 */
.leader-sep { margin: 0 7px; color: #c3bcaf; }

/* 负责人简介正文：与照片区块留出间距 */
.leader-bio { margin-top: 22px; }
/* 履历：子标题上下留白更大，条目之间更紧凑 */
.leader-bio h3 { margin: 38px 0 14px; }
.leader-bio h3:first-of-type { margin-top: 6px; }
.leader-bio p { margin: 0 0 6px; line-height: 1.62; }
/* 每条「年份 内容」拆成两列：续行与首行正文左对齐 */
.leader-bio p:has(.cv-yr) {
  display: grid;
  /* 年份列固定宽度：各条年份串长短不一（2026 / 2019—2024 / 2023/09至今），若用
     max-content 会逐行变化、正文左边缘参差；固定 6.6em（最长「2023/09至今」，
     留一点余量防字体回退时挤到正文）后所有条目对齐。年份后不再带逗号，
     比旧值 6.8em 收窄了一档 */
  grid-template-columns: 6.6em minmax(0, 1fr);
  column-gap: .7em;
  align-items: baseline;
}
.cv-yr { color: var(--muted); font-variant-numeric: tabular-nums; white-space: nowrap; }
/* 窄屏：年份单独一行，避免年份列占去三分之一宽度 */
@media (max-width: 560px) {
  .leader-bio p:has(.cv-yr) { grid-template-columns: minmax(0, 1fr); row-gap: 0; }
  .cv-yr { margin-bottom: -1px; }
  .news-list.full li { column-gap: 12px; }
  .news-list.full time { width: 3.6ch; }
}
.cv-yr + br { display: none; }

/* ---------- 本科生（按研究方向） ---------- */
.undergrad-list { margin: 8px 0 0; padding-left: 24px; }
.undergrad-list li { margin-bottom: 6px; font-size: 16px; }
.ug-topic { font-weight: 500; }
.ug-name { white-space: nowrap; }   /* 姓名不跨行拆开 */

/* 校友表：姓名不拆行，避免中文被逐字断开 */
.data-table td, .data-table th { vertical-align: top; padding: 8px 10px; }
.data-table td:first-child, .data-table td:nth-child(3) { white-space: nowrap; font-variant-numeric: tabular-nums; }
/* 访问学者：三列固定比例，避免时间列被拉出大片空白 */
.visiting-table { table-layout: fixed; }
.visiting-table th:first-child, .visiting-table td:first-child { width: 26%; }
.visiting-table th:last-child, .visiting-table td:last-child { width: 18%; }
/* 宽屏下「身份」不折行（Visiting Scholar 之类） */
@media (min-width: 860px) {
  .data-table th:nth-child(2), .data-table td:nth-child(2) { white-space: nowrap; }
}
/* 窄屏：三列重新分配宽度并允许时间折行，避免横向滚动 */
@media (max-width: 560px) {
  .visiting-table th:first-child, .visiting-table td:first-child { width: 34%; white-space: normal; }
  .visiting-table th:last-child, .visiting-table td:last-child { width: 26%; white-space: normal; }
  .visiting-table td, .visiting-table th { padding: 8px 6px; }
}
/* 成员名册以短句为主，两端对齐会把字距拉开，统一左对齐 */
.member-name, .member-role, .member-note, .undergrad-list li { text-align: left; }

.member-mail { font-size: 14px; margin: 2px 0; }
.users-stat { color: var(--accent); }

.year { margin: 26px 0 10px; font-size: 18px; }
.sec-title { margin-top: 36px; }

/* ---------- 产品图表 ---------- */
.product-figures {
  display: grid; grid-template-columns: repeat(auto-fill, minmax(280px, 1fr));
  gap: 16px; margin: 16px 0;
}
.product-figure { margin: 0; }
.product-figure img {
  width: 100%; height: auto; display: block;
  border: 1px solid var(--line); border-radius: 6px; background: #fff;
}
/* 动图改成 <video> 之后沿用图片的框：宽度撑满、等比缩放。
   width/height 属性仍从数据里写死，浏览器先留位置，视频到位不跳版（CLS）。 */
.product-figure video {
  width: 100%; height: auto; display: block;
  border: 1px solid var(--line); border-radius: 6px; background: #fff;
}
.product-figure figcaption {
  font-size: 14px; color: var(--muted); margin-top: 6px; line-height: 1.5;
}

/* ================= 纵向分节导航（参考原站 mysidenav.css / Bootstrap docs 风格） ================= */
.wrap-wide { max-width: var(--maxw); }   /* 与普通页同一宽度，避免各页错位 */
.layout-sidenav { display: grid; grid-template-columns: 232px minmax(0, 1fr); gap: 32px; align-items: start; }
/* 侧栏高过视口时在自身内部滚动：固定在视口里、栏内单独滚，40 多个目录项
   （论文页 6 小节 + 22 年份 + 20 报告年份）不必靠滚正文才够得着。
   滚动的只有 .sidenav-scroll（目录本体）；.sidenav-foot 里的「返回顶部 / 语言切换」
   固定贴在侧栏底部，不随目录滚走（2026-11-10 用户要求）。
   site.js 里的 keepVisible 会把当前小节自动滚进栏内，所以滚动正文时高亮项不会跑出可视范围。
   overscroll-behavior: contain 防止滚到栏底后把整页带着一起滚。 */
.sidenav {
  position: sticky; top: 24px; max-height: calc(100vh - 48px);
  display: flex; flex-direction: column;
  font-size: 15.5px; padding-right: 8px;
}
.sidenav-scroll {
  min-height: 0;                 /* flex 子项要能缩，否则长目录会顶出 max-height */
  overflow-y: auto; overscroll-behavior: contain;
  scrollbar-width: thin; scrollbar-color: #d8d2c6 transparent;
}
.sidenav-scroll::-webkit-scrollbar { width: 5px; }
.sidenav-scroll::-webkit-scrollbar-thumb { background: #d8d2c6; border-radius: 3px; }
.sidenav-scroll::-webkit-scrollbar-track { background: transparent; }
/* 目录本体可聚焦（tabindex="0"），键盘用户 Tab 进来后可用 ↑↓/PgUp/PgDn 滚目录 */
.sidenav-scroll:focus-visible { outline: 2px solid var(--accent); outline-offset: 3px; }
/* 底部固定条：与目录之间用一条细分隔线分开，加一点底色避免看起来像最后一项 */
.sidenav-foot {
  flex: none; display: flex; align-items: center; gap: 10px; flex-wrap: wrap;
  margin-top: 8px; padding: 10px 0 2px; border-top: 1px solid var(--line);
}
.sidenav-title {
  font-size: 13px; letter-spacing: .09em; text-transform: uppercase;
  color: var(--muted); margin: 0 0 10px;
}
.sidenav-list, .sidenav-sub { list-style: none; margin: 0; padding: 0; }
.sidenav-list > li { margin: 1px 0; }
.sidenav a {
  display: block; padding: 5px 10px; color: var(--ink-soft); line-height: 1.45;
  border-left: 2px solid transparent; border-radius: 0 3px 3px 0;
}
.sidenav a:hover { color: var(--accent); background: #f0ece4; text-decoration: none; }
.sidenav a.active { color: var(--accent); font-weight: 600; border-left-color: var(--accent); background: #f1f6f9; }
/* 子目录（年份、课程名）不做内部滚动：早先给它设了 max-height:38vh + overflow:auto，
   结果 20 来个年份里有十来个被裁在框外——它们在 DOM 里、屏幕上看不见，
   点击坐标会落到框外的相邻链接上（点了「2015」却跳到「受邀讲座」）。
   现在整条侧栏（.sidenav 自带 max-height + overflow-y:auto）统一滚动，
   可见区域与可点区域一致。 */
.sidenav-sub { display: none; padding: 2px 0 6px 12px; }
.sidenav-list > li.active > .sidenav-sub { display: block; }
.sidenav-sub a { font-size: 14.5px; padding: 3px 8px; font-variant-numeric: tabular-nums; }
.sidenav-top { display: inline-block; margin: 0 0 0 10px; font-size: 14px; color: var(--muted); }
/* 侧栏语言切换：与「返回顶部」同排在底部的固定条里（.sidenav-foot），
   目标地址与顶栏语言项一致（当前页的译文）。
   做成细边框小胶囊，避免被误读成又一个分节标题；与「返回顶部」横向拉开 10px。 */
.sidenav a.sidenav-lang {
  display: inline-block; margin: 0; padding: 3px 10px;
  border: 1px solid var(--line); border-radius: 3px; background: var(--card);
  font-size: 13.5px; color: var(--accent-soft);
}
.sidenav a.sidenav-lang:hover {
  color: var(--accent); border-color: var(--accent-soft);
  background: #f0ece4; text-decoration: none;
}
/* ============ 单页正文组件（contact / join / privacy） ============ */
/* 这三页与栏目页共用 .layout-sidenav，正文列因此只有约 536 px：
   纯段落还行，地址与「联系方式 / 六条约定」这类并列信息就挤成一团。
   下面把它们做成轻卡片——白底 + 细边框，与产品页、成员卡的观感一致。 */

/* 标题节奏：这三个页面此前直接吃浏览器的 h2 默认外边距（h1 之后空出 45 px 左右），
   与栏目页「小节标题紧接上一段」的观感不一致。这里按小节的层级重设一遍。 */
.page-doc .prose > h2 {
  margin: 38px 0 10px; padding-bottom: 5px;
  border-bottom: 1px solid var(--line); font-size: 23px;
}
.page-doc .prose > h2:first-of-type { margin-top: 4px; }
.page-doc .prose > h3 { margin: 26px 0 6px; font-size: 18px; }
.page-doc .prose > h3:first-of-type { margin-top: 16px; }

.contact-address {
  margin: 0 0 4px; padding: 14px 18px;
  background: var(--card); border: 1px solid var(--line);
  border-left: 3px solid var(--accent-soft); border-radius: 0 4px 4px 0;
  line-height: 1.72;
}
.contact-cards {
  display: grid; grid-template-columns: repeat(auto-fit, minmax(230px, 1fr));
  gap: 12px; margin: 4px 0 12px;
}
.contact-card {
  padding: 14px 16px; background: var(--card);
  border: 1px solid var(--line); border-radius: 4px;
}
.contact-kind {
  margin: 0 0 4px; font-size: 12.5px; letter-spacing: .06em;
  text-transform: uppercase; color: var(--muted); text-align: left;
}
.contact-mail { margin: 0 0 6px; font-size: 16.5px; font-weight: 600; text-align: left; }
.contact-desc { margin: 0; font-size: 14.5px; line-height: 1.62; color: var(--ink-soft); text-align: left; }
.contact-note { font-size: 14.5px; color: var(--muted); }

/* join 页六条约定（CREATE）：一行两到三列，窄屏自动落成一列。
   卡片内的短句取消两端对齐——字数少时 justify 会把字距拉得很开。 */
.create-grid {
  display: grid; grid-template-columns: repeat(auto-fit, minmax(206px, 1fr));
  gap: 12px; margin: 8px 0 18px;
}
.create-item {
  padding: 14px 16px; background: var(--card);
  border: 1px solid var(--line); border-radius: 4px;
}
.create-head {
  display: flex; align-items: flex-start; gap: 9px;
  margin: 0 0 6px; min-height: 2.7em; text-align: left;
}
.create-letter {
  font-family: var(--font-head-latin); font-size: 21px; font-weight: 700;
  line-height: 1.25; color: var(--accent); flex: none;
}
.create-name { font-size: 15.5px; font-weight: 600; line-height: 1.35; }
.create-body { margin: 0; font-size: 14.5px; line-height: 1.62; color: var(--ink-soft); text-align: left; }

/* 分年段：屏幕外的年份跳过布局与绘制（发表页 400 条著录、4100+ 节点）。
   contain-intrinsic-size 给一个估算高度，避免滚动条长度在渲染后跳动；
   浏览器不支持 content-visibility 时自动退化为普通容器，无副作用。 */
.year-group {
  content-visibility: auto;
  contain-intrinsic-size: auto 900px;
}

/* 锚点滚动补偿 + 平滑滚动（尊重系统减少动效设置） */
/* 站点头部不吸顶（只有侧栏 sticky），锚点不需要让出 96px 的吸顶栏高度——
   留 16px 即可，点了年份/小节标题就停在视口顶端，看得见"跳到了哪里"。
   li[id] 用于新闻报道的年份锚点（press-YYYY）。 */
h2[id], h3[id], section[id], li[id] { scroll-margin-top: 16px; }
html { scroll-behavior: smooth; }

@media (prefers-reduced-motion: reduce) { html { scroll-behavior: auto; } }

@media (max-width: 900px) {
  .layout-sidenav { display: block; }
  /* 窄屏恢复成一条横向导航：目录在左（横向滚动），语言切换贴在右端。
     .sidenav-scroll 不再自己滚动，交给 .sidenav-list 的 overflow-x。 */
  .sidenav {
    position: static; max-height: none; display: flex; flex-direction: row;
    align-items: flex-end; gap: 8px;
    margin: 0 0 20px; padding: 0;
  }
  .sidenav-scroll { flex: 1 1 auto; min-width: 0; overflow: visible; }
  .sidenav-foot { flex: 0 0 auto; margin: 0; padding: 0; border-top: 0; }
  .sidenav-title, .sidenav-sub, .sidenav-top { display: none; }
  /* 上一行的 .sidenav-sub（0,1,0）压不过桌面那条
     `.sidenav-list > li.active > .sidenav-sub { display: block }`（0,3,0）——
     结果手机上论文页会把二十来个年份竖着铺满整屏，正文被顶到下面。
     这里用同等特异性、靠后的位置把它按回去。 */
  .sidenav-list > li.active > .sidenav-sub { display: none; }
  /* .sidenav a（0,1,1）会盖掉 .sidenav-top（0,1,0）的 display:none，窄屏「返回顶部」需提高特异性才真的隐藏 */
  .sidenav a.sidenav-top { display: none; }
  /* 窄屏：分节导航变成横向滚动条，语言切换固定在条尾右侧（不随横滑移出视野）。
     顶栏「Menu」里仍保留一份，两处指向同一地址（当前页的译文）。 */
  .sidenav-nav { display: flex; align-items: flex-end; gap: 8px; }
  .sidenav-list { display: flex; gap: 4px; overflow-x: auto; padding-bottom: 8px; flex: 1 1 auto; min-width: 0; }
  .sidenav-list > li { flex: 0 0 auto; }
  .sidenav a { white-space: nowrap; border-left: 0; border-bottom: 2px solid transparent; font-size: 13px; }
  .sidenav a.active { border-left: 0; border-bottom-color: var(--accent); }
  .sidenav a.sidenav-lang {
    display: inline-block; flex: 0 0 auto;
    margin: 0 0 8px; padding: 2px 10px; font-size: 12.5px; line-height: 1.6;
  }
}

/* ---------- 顶部导航：纵向二级下拉 ---------- */
/* 内容与左侧纵向导航同源（partials/navsections.html），但只列一级条目；
   条数多的栏目（如产品 11 项）用最大高度 + 内部滚动，避免下拉超出视口 */
.nav-item { position: relative; }
.nav-sub {
  display: none; position: absolute; top: 100%; left: 0; z-index: 30;
  min-width: 236px; max-width: 340px; max-height: min(72vh, 620px); overflow-y: auto;
  margin: 0; padding: 6px; list-style: none;
  background: var(--card); border: 1px solid var(--line); border-radius: 6px;
  box-shadow: 0 6px 18px rgba(27, 36, 48, .10);
}
.nav-sub::-webkit-scrollbar { width: 5px; }
.nav-sub::-webkit-scrollbar-thumb { background: #d8d2c6; border-radius: 3px; }
.nav-item:hover > .nav-sub, .nav-item:focus-within > .nav-sub { display: block; }
.nav-sub a { display: block; font-size: 15px; padding: 6px 10px; white-space: nowrap; }
.nav-sub a:hover { background: #f0ece4; text-decoration: none; }
@media (max-width: 980px) { .nav-sub { display: none !important; } }

/* ---------- 历年课题组合影 ---------- */
.group-photos { display: grid; grid-template-columns: repeat(auto-fill, minmax(260px, 1fr)); gap: 18px; margin: 12px 0 8px; }
.group-photo { margin: 0; }
.group-photo img { width: 100%; height: auto; display: block; border: 1px solid var(--line); border-radius: 6px; background: #fff; }
.group-photo a { display: block; }
.group-photo figcaption { font-size: 13px; color: var(--muted); margin-top: 6px; line-height: 1.6; }
.photo-note { display: block; margin-top: 4px; font-size: 12px; line-height: 1.55; color: var(--muted); }

/* ---------- 产品下载链接 ---------- */
.dl-block {
  margin: 14px 0 22px; padding: 14px 16px 12px;
  border: 1px solid var(--line); border-radius: 4px; background: #f7f9fb;
}
.dl-block > h4 { font-size: 16.5px; margin: 0 0 8px; font-weight: 600; }
.dl-group { margin: 8px 0; }
.dl-group-title { font-size: 14px; color: var(--muted); margin: 0 0 4px; letter-spacing: .02em; }
.dl-list { list-style: none; margin: 0; padding: 0; display: grid; gap: 2px; }
.dl-list li { font-size: 15.5px; line-height: 1.6; }
.dl-list a { color: var(--accent); }
.dl-tag {
  display: inline-block; min-width: 92px; text-align: center; font-size: 12px;
  border: 1px solid var(--line); border-radius: 3px; padding: 0 5px; margin-right: 8px;
  color: var(--muted); background: var(--paper);
}
.dl-tag.domestic { color: #8a5a20; border-color: #e6d7bd; background: #fdf8ee; }
.dl-tag.international { color: #1d4e6f; border-color: #cfe0ea; background: #f2f8fb; }
.dl-tag.local { color: #3d6b3d; border-color: #cfe3cf; background: #f3faf3; }
.dl-kind { font-size: 12px; color: var(--muted); margin-left: 6px; }
.product-desc { max-width: none; font-size: 16px; color: var(--ink-soft); }

/* ---------- 用户分布地图（参照原站 user_dis.html，本地化 Leaflet） ---------- */
/* 地图是页面引言的一部分（紧跟引言、产品列表之前），不用分隔线 */
.user-map { margin: 20px 0 36px; }
.user-map-lead { max-width: none; font-size: 15.5px; color: var(--ink-soft); }
.user-map-box {
  height: 420px; margin: 14px 0 8px;
  border: 1px solid var(--line); border-radius: 4px; background: #eef2f5;
}
/* 地图下方的聚合统计（国家数 / 单位数 / 用户数，来自 data/user_stats.yaml） */
.user-stats {
  display: flex; flex-wrap: wrap; gap: 12px; margin: 12px 0 6px;
}
.user-stat {
  flex: 1 1 140px; margin: 0; padding: 10px 14px;
  border: 1px solid var(--line); border-radius: 4px; background: #f7f9fb;
  text-align: center;
}
.user-stat dt { font-size: 13px; color: var(--muted); margin-bottom: 2px; }
.user-stat dd { margin: 0; font-size: 24px; font-weight: 600; color: var(--accent); }
/* 按产品的用户统计表（原网页统计方式：N users from M institutes and K countries） */
.user-stats-table {
  width: 100%; max-width: 860px; border-collapse: collapse; margin: 4px 0 6px;
  font-size: 15.5px;
}
.user-stats-table th, .user-stats-table td {
  border: 1px solid var(--line); padding: 6px 10px; text-align: left;
}
.user-stats-table th { background: #f1f6f9; font-weight: 600; }
.user-stats-table td:not(:first-child) { text-align: right; font-variant-numeric: tabular-nums; }
/* 统计截止日：跟在三个数字下面，比正文小一号、给个左对齐的基准线，
   让「统计截至 2026-11-08 (+08:00)」读起来像注脚而不是又一条结论 */
.user-stats-asof {
  margin: 0 0 6px; font-size: 13.5px; color: var(--muted);
  font-variant-numeric: tabular-nums;
}
/* 表尾合计：与产品行用一条稍重的上边框隔开，数字加粗但不抢眼 */
.user-stats-table tfoot td, .user-stats-table tfoot th { border-top: 2px solid var(--line); font-weight: 600; }
.user-stats-table tfoot th { background: #f7f9fb; text-align: left; }
/* 表单里的「(optional)／（选填）」：比标签小一号、灰色，英文前面留一点空隙 */
.opt { margin-left: .35em; font-weight: 400; color: var(--muted); font-size: .92em; }
html[lang="zh"] .opt { margin-left: 0; }
/* 表格范围提示：跟随地图图例的勾选，说明下面的表只显示哪些产品 */
.user-stats-scope { margin: 0 0 4px; font-size: 13.5px; color: var(--muted); }
.user-stats-scope.is-filtered { color: var(--accent); }
/* 注册时间列：日期区间不折行，等宽数字对齐，窄屏允许横向滚动（见 .stats-table-wrap） */
.user-stats-table .stats-span { white-space: nowrap; font-size: 14px; }
.user-map-note { font-size: 14px; color: var(--muted); }
/* 地图下方的产品颜色图例（site.js 动态生成，横排换行，不遮挡地图标记） */
.user-map-legend-bar {
  display: flex; flex-wrap: wrap; gap: 2px 16px;
  margin: 0 0 4px; font-size: 13px; line-height: 1.7; color: var(--muted);
}
.user-map-legend-row { display: inline-flex; align-items: center; gap: 6px; }
.user-map-legend-dot {
  width: 10px; height: 10px; border-radius: 50%; display: inline-block;
  flex: none; border: 1px solid rgba(0, 0, 0, 0.25);
}
.user-map .leaflet-container { font: inherit; }
@media (max-width: 860px) { .user-map-box { height: 300px; } }
.sec-count { font-size: 15px; color: var(--muted); font-weight: 400; margin-left: 8px; }
/* 中文页计数用全角括号（paren.html），全角括号自带左空白，不再另加间距 */
html[lang="zh"] .sec-count { margin-left: 0; }
.nav-caret { font-size: 11px; color: var(--muted); }

/* 手机端：负责人改为上下排列，照片略小；成员卡片两列 */
@media (max-width: 560px) {
  .member-grid li { width: calc(50% - 10px); }
  .leader-card { flex-direction: column; gap: 14px; }
  .leader-photo { width: 160px; height: 230px; }
  .leader-body { min-height: 0; gap: 12px; }
  .leader-name { font-size: 21px; }
}
/* 期刊统计表：数字列右对齐、窄屏可横向滚动 */
.stats-table td.num, .stats-table th.num { text-align: right; font-variant-numeric: tabular-nums; }
.stats-table tfoot th, .stats-table tfoot td { border-top: 2px solid var(--line); font-weight: 600; border-bottom: 0; }
.stats-table { font-size: 13.5px; }
.stats-table th { white-space: nowrap; }
.stats-table td:first-child, .stats-table th:first-child { width: auto; }
.stats-table td, .stats-table th { padding: 6px 6px; }
.stats-note { font-size: 13.5px; color: var(--muted); margin: -4px 0 8px; }
/* 默认只显示前 10 个期刊，其余行由「More」展开 */
.stats-table tr[hidden] { display: none; }
.stats-more-wrap { margin: 10px 0 0; }
.stats-more {
  font: inherit; font-size: 14.5px; color: var(--accent);
  background: none; border: 0; padding: 2px 0; cursor: pointer;
  border-bottom: 1px dashed currentColor;
}
.stats-more:hover { color: var(--ink); }
.stats-more:focus-visible { outline: 2px solid var(--accent-soft); outline-offset: 2px; }

.pub-legend { font-size: 13px; color: var(--muted); margin: -2px 0 6px; }

/* 会议报告的标题是长文本，用常规字重；加粗只留给报告人与特邀/大会报告注释 */
.pub-pres { margin: 0 0 8px; font-size: 15.5px; line-height: 1.62; color: var(--ink-soft); }
/* 报告人：只有姓名用 <strong> 加粗；"et al." / "等" 是普通字重。
   早先这里给整段设了 600，导致 "等"、"et al." 也看起来是粗体。 */
.pub-presenter { font-weight: 400; color: var(--ink); }
/* 「已录用 / 在审」的题目与其他论文用同样的字重（500）。
   早先这里给在审条目降到 400，本意是弱化未发表的条目；但它们并入期刊论文一节后，
   同一节里 23 条题目明显比其余 137 条细，看着像字体出错。状态已由分组标题
   「已录用 / 在审」标明，不需要再靠字重区分。 */

/* 讲座/报告列表：年份单独一列，折行后与年份之后的文字对齐 */
/* li 保持 list-item（保留项目符号），内层用 grid 做两列，折行即与年份后的文字对齐 */
.talk-inner { display: grid; grid-template-columns: max-content minmax(0, 1fr); column-gap: 1.1em; align-items: baseline; }
.talk-yr { font-variant-numeric: tabular-nums; color: var(--muted); }

/* 课程页：不同课程之间用分隔线 + 更大的留白区分 */
.prose-course h3 {
  margin: 56px 0 12px;
  padding-top: 26px;
  border-top: 1px solid var(--line);
  font-size: 22px;
}
/* 本科 / 研究生两个层级用更粗的分隔线，层级感更强 */
.prose-course h2 { margin-top: 64px; padding-top: 30px; border-top: 1px solid var(--line); font-size: 26px; }
.prose-course h2:first-of-type { margin-top: 30px; padding-top: 0; border-top: 0; }
/* 每组（本科 / 研究生）的第一门课紧接 h2，不再画分隔线 */
.prose-course h2 + h3 { margin-top: 18px; padding-top: 0; border-top: 0; }
@media (max-width: 560px) {
  .prose-course h3 { margin-top: 38px; padding-top: 20px; }
  .prose-course h2 { margin-top: 44px; padding-top: 24px; }
}

/* research 页：四条研究定位沿用原来的「• 文字」外观（伪元素画点、左缩进不变） */
.prose-research > ul { list-style: none; padding-left: 0; margin: 4px 0 18px; }
.prose-research > ul > li { position: relative; padding-left: 1.05em; margin-bottom: 14px; }
.prose-research > ul > li:last-child { margin-bottom: 0; }
.prose-research > ul > li::before { content: "•"; position: absolute; left: 0; color: var(--ink-soft); }

/* research 页：四个小节（Statements / Current Research / Harvard / UIUC）之间拉开更大间隔 */
.prose-research > h2 { margin-top: 62px; }
@media (max-width: 560px) {
  .prose-research > h2 { margin-top: 44px; }
}

/* news 页：Group Event 与 Media Coverage 两个小节之间加大留白 */
#press.sec-title { margin-top: 64px; }
@media (max-width: 560px) {
  #press.sec-title { margin-top: 44px; }
}

/* 首页标题下的引言段：比要点字号略大、颜色略淡，与要点拉开层次 */
.statement-lead { font-size: 16.5px; line-height: 1.75; color: var(--ink-soft); margin: 0 0 16px; max-width: none; }
@media (max-width: 560px) {
  .statement-lead { font-size: 15.5px; margin-bottom: 14px; }
}

/* 首页：导航对应的两个小节（Research Highlights / Latest News）之间加大留白 */
.home-main .hl, .home-main .news-teaser { margin-top: 64px; }
@media (max-width: 560px) {
  .home-main .hl, .home-main .news-teaser { margin-top: 44px; }
}

/* ================= 组员页：校友去向地图 + 折叠的校友表格 ================= */
.people-map-box {
  height: 420px; margin: 6px 0 0;
  border: 1px solid var(--line); border-radius: 6px;
  background: #eef3f6;
}
.people-map-note { font-size: 14px; color: var(--muted); margin: 8px 0 14px; }
.people-popup ul { margin: 0; padding-left: 16px; }
.people-popup li { margin: 5px 0; line-height: 1.5; font-size: 13.5px; }
.people-popup strong { font-weight: 600; }
/* 表格默认收起：标题「校友信息统计」当开关，点击展开 */
.fold-toggle {
  border: 1px solid var(--line); border-radius: 6px;
  background: var(--card); margin: 4px 0 0; padding: 0 12px;
}
.fold-summary {
  cursor: pointer; list-style: none; padding: 10px 0;
  font-size: 15px; font-weight: 600; color: var(--accent);
}
.fold-summary::-webkit-details-marker { display: none; }
.fold-summary::before {
  content: "▸"; display: inline-block; width: 1em; font-size: 12px;
  color: var(--muted); transition: transform .15s ease;
}
.fold-toggle[open] .fold-summary::before { content: "▾"; }
.fold-toggle[open] .fold-summary { border-bottom: 1px solid var(--line); }
.fold-toggle .table-wrap { padding: 4px 0 12px; }

@media (max-width: 900px) {
  .people-map-box { height: 320px; }
}

/* 旧锚点兼容（#students、#postdocs 等分组锚点）：不占位，但滚动定位时留出吸顶栏高度。
   成员区自 2026-11-07 起不再分组，成员小标题样式（.member-subtitle）随之删除。 */
.anchor-alias { display: block; height: 0; scroll-margin-top: 16px; }

/* ================= 地图聚合点：圆点 + 数字 ================= */
/* 数字 = 该网格内实际数据点个数（缩放越大格子越小，逐级拆开） */
.map-cluster { background: transparent; border: 0; }
.map-cluster span {
  display: flex; align-items: center; justify-content: center;
  width: 100%; height: 100%; border-radius: 50%;
  color: #fff; font-size: 12px; font-weight: 600; line-height: 1;
  border: 2px solid #fff; box-shadow: 0 1px 4px rgba(0, 0, 0, .28);
  opacity: .92; cursor: pointer;
}
.map-cluster span:hover { opacity: 1; }

/* 单位名标签（产品页地图放大后出现）：白底小字、无箭头，避免压住相邻的点。
   用 .leaflet-tooltip.xxx 提高特异性，覆盖 Leaflet 默认的气泡底色与边框。 */
.leaflet-tooltip.map-inst-tip {
  padding: 2px 7px; border: 1px solid var(--line); border-radius: 3px;
  background: rgba(255, 255, 255, .95); color: var(--ink);
  font-size: 12.5px; line-height: 1.5; white-space: nowrap;
  max-width: 190px; overflow: hidden; text-overflow: ellipsis;
  box-shadow: 0 1px 3px rgba(0, 0, 0, .12); text-align: left;
}
.leaflet-tooltip.map-inst-tip::before { display: none; }
/* 点开后的明细里，单位名单独一段，与上面的产品计数用一条细线分开 */
.popup-inst {
  margin: 8px 0 0; padding-top: 7px; border-top: 1px solid var(--line);
  font-size: 13px; line-height: 1.55; color: var(--ink-soft); text-align: left;
}
.popup-inst-key { color: var(--muted); }

/* ================= 用户分布图：图例即筛选器 ================= */
.user-map-legend-row { cursor: pointer; user-select: none; }
.user-map-legend-row:hover { color: var(--ink); }
.user-map-legend-check {
  width: 13px; height: 13px; margin: 0; flex: none;
  accent-color: var(--accent); cursor: pointer;
}
/* 全部取消勾选时整条图例变淡，提示当前地图为空 */
.user-map-legend-bar.is-empty { opacity: .55; }

/* 图例末尾的「全选 / 清空」按钮 */
.user-map-legend-tools { display: inline-flex; align-items: center; gap: 6px; flex: none; }
.user-map-legend-tools::before {
  content: ""; display: inline-block; width: 1px; height: 11px;
  background: var(--line); margin-right: 2px;
}
.user-map-legend-btn {
  font: inherit; font-size: 12.5px; line-height: 1;
  padding: 3px 8px; border: 1px solid var(--line); border-radius: 3px;
  background: var(--card); color: var(--muted); cursor: pointer;
}
.user-map-legend-btn:hover {
  color: var(--accent); border-color: var(--accent-soft); background: #f0ece4;
}

/* 产品页：统计表放进折叠块后的内边距 */
.fold-toggle .stats-table-wrap { padding: 10px 0 12px; }
.fold-toggle .stats-table-wrap .user-map-note { margin: 6px 0 0; }

/* ================= 打印 =================
   学术站点常被用来打印论文清单与论文详情页。打印时：
   去掉导航、侧栏、页脚政策链接与轮播按钮；正文黑色；链接后附 URL；
   分年段全部展开（content-visibility 在打印上下文可能截断内容）。 */
@media print {
  .group-banner, .site-head, .sidenav, .skip-link, .nav-search, .search-panel,
  .rail-btn, .foot-policy, .page-tail-space, .pub-links a[href^="#"] { display: none !important; }
  html, body { background: #fff; color: #000; }
  .wrap, .page { max-width: none; padding: 0; }
  .year-group, .pub { content-visibility: visible !important; break-inside: avoid; }
  .year { position: static; break-after: avoid; }
  a { color: #000; text-decoration: none; }
  /* 打印稿里 URL 比链接文字更有用 */
  .prose a[href^="http"]::after,
  .pub-title a[href^="http"]::after,
  .paper-links a[href^="http"]::after {
    content: " (" attr(href) ")"; font-size: 10.5px; color: #444; word-break: break-all;
  }
  .site-foot { border-top: 1px solid #ccc; }
}
