/* ============ 简历模板层 ============
   排版约定：
   1) 纸张根节点 .cv-page 只定义宽度与「基准字号」；
   2) 所有内部尺寸统一用 em —— 字号变化时整套版式等比缩放，
      不使用 transform:scale()，避免打印时被光栅化导致 PDF 丢失文本层；
   3) 颜色块统一开启 print-color-adjust；正文区禁用 CSS 渐变与彩色 emoji
      （Chromium 打印会光栅化成位图，PDF 就无法被 ATS 解析）；
   4) 每套模板一个 --accent：强调色只出现在小面积元素（marker / 点阵 / 细线），
      正文保持黑白灰 —— 这是参考稿里"高级感"的共同来源。

   ── 统一规格（7 套共用的「零件」规格，改这里就等于改全部）──────────
   姓名      2.02em / 700 / 行高 1.12 / 字距 .1em      （各模板按骨架另行放大）
   求职意向  .98em  / 500 / 字距 .06em
   联系行    .87em  / 行间距 .42em 列间距 1.25em / 图标 1.05em
   小节标题  .96em  / 700 / 字距 .14em / 下边线 1px / 上间距 1.58em
   英文副标  .70em  / 500 / 字距 .22em / #aeb4bf / 大写
   条目首行  主 .98em 600 + 竖细线 + 次 .92em 400 灰 + 日期 .82em 右对齐
   正文列表  .91em  / 行高 1.76~1.80
   列表符号  0.24em 方块（accent 55%）—— 全模板统一，不再用 ·、◆、— 混排
   技能      四种受控形态：text（正式）/ dots（默认两列）/ bars（强表达）/ rings（圆环）；
             行距 .2em、点 .34em、等级映射 了解2 熟悉3 熟练4 精通5

   ── 七套骨架（结构层面就不同，不是换配色）──────────────────────
   1 classic   黑横幅头 + 圆形照片压边 + 纯中文单栏
   2 dual      左浅灰窄栏 + 右超大字名 + 2px 粗分割线
   3 tech      深蓝通栏头 + 全时间轴（竖线 + 空心节点）
   4 fresh     左竖排信息 + 右 4:3 横构图照片 + 正文两列拼贴
   5 folio     照片左 / 超大名字 + 描边职位 → 链接胶囊 → 正文两列
   6 grad      ► 三角引导的极简单栏，靠行距与留白撑页面
   7 academic  宋体衬线 + 上下双线标题 + 反白深色联系条 + 方角证件照
   ────────────────────────────────────────────────────────────
============================================== */

.cv-page {
  width: 210mm;
  min-height: 297mm;
  font-size: var(--cv-font, 14px);
  background: #fff;
  padding: 2.7em 3.1em;
  box-sizing: border-box;
  font-family: var(--font);
  -webkit-print-color-adjust: exact;
  print-color-adjust: exact;

  /* ---- 设计令牌：颜色压低饱和度，正文不用纯黑 ---- */
  --ink: #1c2027;
  --body: #3a4048;
  --meta: #8b929d;
  --rule: #e4e7ed;
  --accent: #2f3542;
  line-height: 1.7;
  color: var(--body);
}
.cv-page.is-singlepage { overflow: hidden; }
.cv-page.is-multipage { min-height: 0; }

.cv-root { width: 100%; }
/* 挂载点是 .cv-root（v-html 容器），模板内部不再有第二层容器 */
.cv-root p { margin: 0; }
.cv-root a { color: inherit; text-decoration: none; }

/* ---------- 通用零件 ---------- */
.cv-name { font-size: 2.02em; line-height: 1.12; font-weight: 700; letter-spacing: .06em; color: var(--ink); }
.cv-intent { font-size: .98em; color: #5a616d; margin-top: .42em; letter-spacing: .06em; }
.cv-contacts {
  margin-top: .85em; display: flex; flex-wrap: wrap; gap: .42em 1.25em;
  font-size: .87em; color: #5c6472; letter-spacing: .015em;
}
.cv-contacts span { display: inline-flex; align-items: center; gap: .4em; }
/* 联系人细线图标：内联 SVG，stroke 走 currentColor，打印为矢量 */
.cv-contacts .ci { display: inline-flex; flex: none; opacity: .62; }
.cv-contacts .ci svg { width: 1.05em; height: 1.05em; display: block; }

.cv-photo { width: 4.6em; height: 6.1em; object-fit: cover; border-radius: 0; flex: none; }
/* 默认照片占位（内联 SVG）：按矢量输出 */
.cv-photo-ph { display: block; background: #f4f6fa; }
/* 深色区域（科技大厂深蓝通栏头）需要深色版占位，否则是惨白方块；
   其余模板照片都落在白/浅灰底上，用默认浅色占位 */
.tpl-tech .cv-photo-ph rect { fill: #1d3a63; }
.tpl-tech .cv-photo-ph circle, .tpl-tech .cv-photo-ph path { fill: #4f6f9c; }

/* 小节：标题文字一律来自 schema，模板不加英文副标 */
.cv-sec { margin-top: 1.58em; }
.cv-sec:first-child { margin-top: 0; }
.cv-sec-title {
  display: flex; align-items: baseline; gap: .62em;
  font-size: .96em; font-weight: 700; letter-spacing: .14em;
  margin-bottom: .68em; padding-bottom: .34em;
  border-bottom: 1px solid var(--rule); color: var(--ink);
}

.cv-block { margin-bottom: .94em; }
.cv-block:last-child { margin-bottom: 0; }
.cv-block-top { display: flex; align-items: baseline; justify-content: space-between; gap: 1.2em; }
.cv-b1 {
  display: flex; align-items: baseline; flex-wrap: wrap;
  font-size: .98em; font-weight: 600; letter-spacing: .015em; color: var(--ink);
}
.cv-b1-t { font-weight: 600; color: inherit; }
.cv-b1-s { font-weight: 400; font-size: .92em; color: #6b7480; letter-spacing: .01em; }
.cv-b1-s::before {
  content: ""; display: inline-block; width: 1px; height: .78em;
  background: #d8dde6; margin: 0 .6em; vertical-align: -.04em;
}
.cv-b2 { font-size: .88em; color: #626b78; margin-top: .16em; letter-spacing: .02em; }
.cv-b3 { font-size: .82em; color: var(--meta); flex: none; font-variant-numeric: tabular-nums; letter-spacing: .04em; }
.cv-para { margin-top: .44em; font-size: .91em; line-height: 1.78; white-space: pre-line; color: var(--body); }
.cv-list { margin-top: .45em; }
.cv-list li {
  position: relative; padding-left: 1em; font-size: .91em; line-height: 1.76;
  margin-bottom: .18em; color: var(--body);
}
.cv-list li::before {
  content: ""; position: absolute; left: .2em; top: .74em;
  width: .2em; height: .2em; background: var(--accent); opacity: .38;
}
.cv-muted { color: #98a2b3; font-size: .9em; }

/* 技能：点阵（快消风）/ 文本列表（其余模板） */
.skill-line { display: flex; align-items: center; justify-content: space-between; gap: 1.2em; font-size: .91em; padding: .2em 0; }
.skill-line .s-name { flex: none; color: #333a45; letter-spacing: .01em; }
.skills-text { display: grid; gap: .18em; }
.skills-text > div { display: flex; align-items: baseline; justify-content: space-between; gap: .8em; font-size: .91em; color: var(--body); }
.skills-text em { font-style: normal; font-size: .82em; color: #8f96a1; letter-spacing: .04em; }
/* 纯文字技能（经典 / 学术）用双列，避免单行过长的松散感 */
.tpl-classic .skills-text, .tpl-academic .skills-text { grid-template-columns: 1fr 1fr; gap: .2em 1.6em; }

.dots { display: inline-flex; align-items: center; gap: .26em; flex: none; }
.dots i { width: .34em; height: .34em; border-radius: 50%; background: #e0e4ea; display: block; }
.dots i.on { background: var(--accent); }
/* 点阵技能：满页宽时两列，否则名字与点阵会被拉开一整页的距离；
   窄栏模板（双栏正文）改回单列，见下方覆盖 */
.skills-dots { display: grid; grid-template-columns: 1fr 1fr; gap: 0 1.8em; }
.skills-dots .skill-line { padding: .18em 0; }

/* -------------------------------------------------- 1. 经典通用风
   骨架：黑色横幅头（姓名/意向/联系反白）+ 圆形照片压出横幅下缘 + 纯中文单栏
   参考：国企/公务员简历——黑白两色、无英文副标、标题粗黑线 */
.tpl-classic { padding: 0; color: #2a2f36; --accent: #15181d; }
.tpl-classic .cl-band {
  background: #15181d; color: #fff;
  padding: 2.5em 3.1em 2.1em; display: flex; align-items: flex-end;
  justify-content: space-between; gap: 2em;
  -webkit-print-color-adjust: exact; print-color-adjust: exact;
}
.tpl-classic .cl-band-in { min-width: 0; flex: 1; }
.tpl-classic .cl-band .cv-name { color: #fff; font-size: 2.05em; letter-spacing: .16em; }
.tpl-classic .cl-band .cv-intent { color: #b7bcc5; margin-top: .46em; letter-spacing: .12em; }
.tpl-classic .cl-band .cv-contacts {
  margin-top: .84em; color: #b7bcc5; font-size: .84em; gap: .36em 1.15em;
  border-top: 1px solid rgba(255, 255, 255, .17); padding-top: .64em;
}
.tpl-classic .cl-band .cv-contacts .ci { opacity: .45; }
/* 照片压边：负 margin 让它探出横幅，白描边在黑白两区都能立住。
   直径 7em（98px @14px）：5.5em 时整张纸最重的东西是姓名，头像小得像附件。
   负 margin 同步改到 -3.92em —— 保持「探出横幅 26%」的原比例（1.82em），
   只放大不改负边距的话，圆会一路往上长、探出的部分反而显小。
   环宽 .38em：只画白环不额外描边，否则环外那道细线和环之间会被看成"缝"。 */
.tpl-classic .cl-photo {
  flex: none; width: 7em; height: 7em; margin-bottom: -3.92em;
  border: .38em solid #fff; border-radius: 50%;
  background: #fff; position: relative; z-index: 2;
}
/* 圆形的边只留一条：图片自己带圆角、直径比内容盒大 2px（四周各压进白环 1px）。
   原先靠父元素 overflow:hidden 裁圆 —— 裁剪边和白环内边是两条各自抗锯齿的边，
   落在一起就会漏出半像素浅线（"头像和边之间有缝"）。让照片直接盖住接缝即可。
   max-width: none 必须写：base.css 的 `img { max-width: 100% }` 会把 +2px 吃掉。 */
.tpl-classic .cl-photo-img {
  width: calc(100% + 2px); height: calc(100% + 2px);
  max-width: none;
  margin: -1px 0 0 -1px;
  border-radius: 50%;
  object-fit: cover; display: block;
}
.tpl-classic .cl-body { padding: 2.1em 3.1em 2.6em; }
.tpl-classic .cv-sec { margin-top: 1.5em; }
.tpl-classic .cv-sec-title {
  color: #111; border-bottom: 1.5px solid #15181d; letter-spacing: .22em;
  font-weight: 700; padding-bottom: .32em;
}
.tpl-classic .cv-b1 { color: #15181d; }
.tpl-classic .cv-list li::before { background: #15181d; opacity: .55; }
/* 不用 filter 灰度：Chromium 打印会把 filter 光栅化成位图 */

/* -------------------------------------------------- 2. 高效双列风
   骨架：左 30% 浅灰栏（满幅照片 / 左对齐联系·技能·教育·主修课程）
        + 右栏大字名 + 编号正文
   参考稿的关键特征，逐条对齐：
   · 侧栏 30%，照片贴顶铺满、近似方形
   · 全篇**没有一条横线**，分节只靠留白（旧版的名下 2px 粗线和标题细线全部删掉）
   · 姓名用大字（近 4em），日期掉到职位下一行，正文用 1./2./3. 编号
   字体跟随全站 var(--font)：模板之间换皮不该换字形，衬线只留给"学术风" */
.tpl-dual { padding: 0; position: relative; background: #f1f1f1; color: #454545; --accent: #161616; }
.tpl-dual .dual-grid { display: grid; grid-template-columns: 30% 1fr; }
/* 侧栏底色用绝对定位底板铺满整页：不参与高度计算，因此不会干扰一页纸测量 */
.tpl-dual .dual-bg {
  position: absolute; left: 0; top: 0; bottom: 0; width: 30%;
  background: #dcdcdc;
  -webkit-print-color-adjust: exact; print-color-adjust: exact;
}
/* 侧栏整体收 4%：这一栏是固定 px 宽（30% × 210mm ≈ 238px），文字却随基准字号长大，
   两边不联动。收一档让可用宽在字号放大到 17px 时仍有 ~12px 余量，而不是刚好卡死。 */
.tpl-dual .cv-aside { padding: 0; position: relative; z-index: 1; font-size: .96em; }
.tpl-dual .aside-photo {
  width: 100%; aspect-ratio: 196 / 188; object-fit: cover; display: block;
  background: #cfcfcf;
}
/* 侧栏统一左对齐：窄栏里居中会让每行长短不一的文字左右都参差，
   贴齐左侧竖线（和照片左边缘同一条）反而更稳，也符合其它模板的阅读动线。
   内边距：左 1.5em 稍收、右 .9em 大幅收回 —— 可用宽从 177px 提到 203px（+15%）。
   起因是邮箱这类整串不可断的字符只剩 2.5px 余量：一页纸引擎会把稀疏内容放大到
   17px 基准字号（sheet.js growCap），字号一大 em 内边距也变大，可用宽反而缩到 185px，
   于是 "zhangming@example.com" 被挤出最后一个 m 单独成行。 */
.tpl-dual .du-aside-in { padding: 1.95em .9em 2.4em 1.5em; text-align: left; }
.tpl-dual .cv-aside .cv-sec { margin-top: 2.2em; }
.tpl-dual .cv-aside .cv-sec:first-child { margin-top: 0; }
.tpl-dual .cv-aside .cv-sec-title {
  display: block; border: 0; padding: 0; margin-bottom: .95em;
  font-size: 1.02em; font-weight: 700; letter-spacing: .01em; color: #161616; text-align: left;
}
/* 侧栏文字：单行信息 / 教育块 / 主修课程段落 */
.tpl-dual .du-line { font-size: .9em; line-height: 1.92; color: #3d3d3d; word-break: break-word; }
/* 作品集 / GitHub 是真链接：屏幕上悬停出下划线示意可点，纸上保持干净（不画线） */
.tpl-dual .du-line a { color: inherit; text-decoration: none; }
.tpl-dual .du-line a:hover { text-decoration: underline; }
@media print { .tpl-dual .du-line a { text-decoration: none; } }
.tpl-dual .du-edu { margin-bottom: .72em; }
.tpl-dual .du-edu:last-child { margin-bottom: 0; }
.tpl-dual .du-edu b { display: block; font-size: .93em; font-weight: 700; color: #1f1f1f; line-height: 1.5; }
.tpl-dual .du-school { display: block; font-size: .9em; color: #4a4a4a; line-height: 1.62; }
.tpl-dual .du-edu em { display: block; font-style: normal; font-size: .84em; color: #7b7b7b; letter-spacing: .02em; }
.tpl-dual .du-note { font-size: .86em; line-height: 1.95; color: #464646; text-align: left; }
/* 右栏：大字名 + 意向小字，没有分割线。字体继承 var(--font)，不写 font-family */
.tpl-dual .cv-main { padding: 2.05em 2.05em 2.6em 2.1em; }
.tpl-dual .du-head { margin-bottom: 4.4em; }
.tpl-dual .du-name {
  font-size: 3.5em; font-weight: 700; line-height: 1.06; letter-spacing: -.01em; color: #131313;
}
.tpl-dual .du-sub { margin-top: .82em; font-size: .95em; color: #3f3f3f; letter-spacing: .02em; }
.tpl-dual .cv-main .cv-sec { margin-top: 2.8em; }
.tpl-dual .cv-main .cv-sec-title {
  display: block; border: 0; padding: 0; margin-bottom: .88em;
  font-size: 1.06em; font-weight: 700; letter-spacing: .01em; color: #161616;
}
.tpl-dual .cv-main .cv-para { font-size: .95em; line-height: 1.95; color: #454545; text-align: justify; }
/* 条目：职位/公司一行 + 日期一行 + 编号正文（参考稿的堆叠式） */
.tpl-dual .cv-main .cv-block { margin-bottom: 1.32em; }
.tpl-dual .cv-main .cv-b1 { display: block; font-size: .95em; font-weight: 700; color: #171717; }
.tpl-dual .cv-main .cv-b1-s { font-size: 1em; font-weight: 700; color: #171717; }
.tpl-dual .cv-main .cv-b1-s::before {
  content: '/'; display: inline; width: auto; height: auto; background: none;
  margin: 0 .5em 0 .38em; vertical-align: 0; color: #171717;
}
.tpl-dual .cv-main .cv-b3 { margin-top: .2em; font-size: .84em; color: #8a8a8a; letter-spacing: .02em; }
.tpl-dual .cv-num { margin-top: .55em; counter-reset: dn; }
.tpl-dual .cv-num li {
  position: relative; padding-left: 1.5em; margin-bottom: .3em;
  font-size: .9em; line-height: 1.85; color: #454545; text-align: justify;
}
.tpl-dual .cv-num li:last-child { margin-bottom: 0; }
.tpl-dual .cv-num li::before {
  counter-increment: dn; content: counter(dn) ".";
  position: absolute; left: 0; top: 0; color: #454545;
}

/* -------------------------------------------------- 3. 科技大厂风
   骨架：深蓝通栏头 + 圆形头像压边 + 左浅灰信息栏 + 右图标时间轴
   参考稿的识别点：分节图标（人像/公文包/学位帽）挂在一条 1px 轴线上，
   日期一律右对齐，全篇只有「通栏色块 + 细线」两层结构，不用第三层色块。
   头像用 border-radius 画圆、外层不加 overflow:hidden —— 经典风那次已经证明
   裁剪边和描边内边是两条各自抗锯齿的边，落在一起会漏出半像素浅线。 */
.tpl-tech {
  padding: 0; position: relative; background: #fff; color: #1c1c1c;
  --tk-navy: #1a2954;
  --tk-side-w: 30.8%;
  --tk-axis: 2em;    /* 轴线距主栏左边缘 */
  --tk-pad: 4.7em;   /* 主栏文字起点 = 轴线 + 2.7em */
}
/* 侧栏底色铺满整页：绝对定位不参与高度计算，内容短也不会在页底断掉 */
.tpl-tech .tk-bg {
  position: absolute; left: 0; top: 0; bottom: 0; width: var(--tk-side-w);
  background: #e6e7e8;
  -webkit-print-color-adjust: exact; print-color-adjust: exact;
}
.tpl-tech .tk-head {
  position: relative; z-index: 1; background: var(--tk-navy); color: #fff;
  padding: 3.9em 2.4em 3.1em calc(var(--tk-side-w) + var(--tk-pad));
  -webkit-print-color-adjust: exact; print-color-adjust: exact;
}
.tpl-tech .tk-name { font-size: 2.9em; font-weight: 700; line-height: 1.1; letter-spacing: .055em; color: #fff; }
.tpl-tech .tk-sub { margin-top: .55em; font-size: 1.12em; letter-spacing: .16em; color: #b9c6da; }
.tpl-tech .tk-cols { display: grid; grid-template-columns: var(--tk-side-w) 1fr; position: relative; z-index: 1; }
/* 头像：负上边距压进通栏，跟着侧栏正常排版；没有照片时也不会留一个空洞 */
.tpl-tech .tk-aside { padding: 0 2em 2.6em 1.35em; }
.tpl-tech .tk-aside-flat { padding-top: 2.8em; }
/* 白环 .5em（= 7px @14px）：通栏上半圈是深蓝，环太细会像照片被裁了个缺口。
   外框负责画环，里面的照片放大 2px 并左上各顶 1px —— 让照片压住环的内沿，
   消除「图片裁切边」与「边框内边」这两条各自抗锯齿的曲线之间的浅缝
   （经典风那次踩过：缝隙就是这么来的）。 */
.tpl-tech .tk-photo {
  display: block; position: relative; z-index: 3;
  width: 11.14em; height: 11.14em; margin: -6.2em auto 3.6em;
  border-radius: 50%; border: .5em solid #fff; background: #fff;
}
.tpl-tech .tk-photo-img {
  display: block; width: calc(100% + 2px); height: calc(100% + 2px);
  max-width: none;              /* base.css 的 img{max-width:100%} 会把 +2px 吃掉 */
  margin: -1px 0 0 -1px;
  border-radius: 50%; object-fit: cover;
}
.tpl-tech .tk-aside .cv-sec { margin: 0 0 2em; }
.tpl-tech .tk-aside .cv-sec:last-child { margin-bottom: 0; }
.tpl-tech .tk-aside .cv-sec-title {
  font-size: .96em; font-weight: 700; letter-spacing: .14em; color: #12203c;
  padding-bottom: .55em; border-bottom: 1px solid #b9bcc2; width: 86%;
}
.tpl-tech .tk-list { margin-top: .85em; }
.tpl-tech .tk-list li {
  display: flex; align-items: baseline; gap: .45em;
  font-size: .88em; line-height: 1.92; color: #2b3036;
}
.tpl-tech .tk-list li + li { margin-top: .12em; }
.tpl-tech .tk-list .ci { flex: none; color: #2b3036; }
.tpl-tech .tk-list .ci svg { width: .95em; height: .95em; display: block; transform: translateY(.1em); }
.tpl-tech .tk-list a { color: inherit; text-decoration: none; }
.tpl-tech .tk-list a:hover { text-decoration: underline; }
/* 技能项：小圆点作项目符号，等级用浅灰小字跟在名字后面 */
.tpl-tech .tk-dot li { display: block; position: relative; padding-left: .85em; word-break: break-word; }
.tpl-tech .tk-dot li::before {
  content: ""; position: absolute; left: .05em; top: .78em;
  width: .26em; height: .26em; border-radius: 50%; background: #8a8f97;
}
.tpl-tech .tk-dot em { font-style: normal; font-size: .86em; color: #7c828a; margin-left: .4em; }
/* 右栏：一条竖轴 + 分节图标 */
.tpl-tech .tk-main { position: relative; padding: 2.9em 2.4em 2.8em 0; }
.tpl-tech .tk-rail { position: absolute; left: var(--tk-axis); top: 4em; bottom: 2.4em; width: 1px; background: #d2d6dc; }
.tpl-tech .tk-blk { position: relative; padding-left: var(--tk-pad); margin-bottom: 2.7em; }
.tpl-tech .tk-blk:last-child { margin-bottom: 0; }
/* 分节圆环：深蓝实底 + 白色图标。
   试过三种：① 空白细线圆环 —— 31px 里 1px 线几乎看不见，图标像浮在纸上的一团灰；
   ② 浅蓝灰底（#f1f3f7）—— 有形了但仍含蓄；③ 深蓝实底 —— 白线读取最清楚，
   5 个圆形成节奏，和顶部深蓝通栏同色呼应。这是最终选用的方案。
   实底是纯色填充（不是渐变），打印仍是矢量，不会光栅化。 */
.tpl-tech .tk-ico {
  position: absolute; left: var(--tk-axis); top: 0; transform: translateX(-50%);
  width: 2.2em; height: 2.2em; border-radius: 50%;
  background: var(--tk-navy); border: 1px solid var(--tk-navy); color: #fff;
  display: flex; align-items: center; justify-content: center;
}
.tpl-tech .tk-ico .ci { color: inherit; }
/* 图标占圆 59%（原 50%）：2.2em 环里放 1.1em 图标，四周空一圈，显得小而无力。
   配 stroke-width 2.1（见 iconHtml），18.1px 下实际描边 1.58px，白线在深底上读得清。 */
.tpl-tech .tk-ico .ci svg { width: 1.3em; height: 1.3em; display: block; }
.tpl-tech .tk-blk-title {
  font-size: 1.06em; font-weight: 700; letter-spacing: .12em; color: #12203c; line-height: 1.5;
  padding-bottom: .52em; border-bottom: 1px solid #c9ccd1; margin-bottom: 1.05em;
}
.tpl-tech .tk-blk-body { font-size: .92em; line-height: 1.86; color: #2b3036; }
.tpl-tech .tk-blk-body .cv-para { line-height: 1.86; }
/* 条目：标题行（左标题 / 右日期）+ 副标题 + 圆点正文，起点在轴线上挂一个小空心节点 */
.tpl-tech .tk-entry { position: relative; margin-bottom: 1.55em; }
.tpl-tech .tk-entry:last-child { margin-bottom: 0; }
/* 条目节点：直径 .36em 的空心小圆，线色比大圆浅一档。
   原来是 .4em + 1.5px 边框 —— 5.6px 的小圆套 1.5px，比 31px 的分节圆还粗，小节点抢了大分节的戏。
   现在统一 1px 细线、颜色退到 #b9bfc8，深蓝实心圆才是轴线上唯一的重音。 */
.tpl-tech .tk-entry::before {
  content: ""; position: absolute; top: .58em; left: calc(var(--tk-axis) - var(--tk-pad));
  transform: translateX(-50%);
  width: .36em; height: .36em; border-radius: 50%;
  background: #fff; border: 1px solid #b9bfc8;
}
.tpl-tech .tk-e-top { display: flex; align-items: baseline; justify-content: space-between; gap: 1em; }
.tpl-tech .tk-e-title { font-size: 1em; font-weight: 700; color: #16233d; }
.tpl-tech .tk-e-date { flex: none; font-size: .82em; color: #7b8189; white-space: nowrap; }
.tpl-tech .tk-e-sub { margin-top: .14em; font-size: .9em; color: #4a5058; }
/* 正文列表：小圆点 + 悬挂缩进 */
.tpl-tech .tk-blk-body .cv-list { margin-top: .45em; }
.tpl-tech .tk-blk-body .cv-list li { position: relative; padding-left: 1.05em; line-height: 1.8; }
.tpl-tech .tk-blk-body .cv-list li + li { margin-top: .18em; }
.tpl-tech .tk-blk-body .cv-list li::before {
  content: ""; position: absolute; left: .1em; top: .7em;
  width: .28em; height: .28em; border-radius: 50%; background: #6f767e;
}
@media print { .tpl-tech .tk-list a { text-decoration: none; } }

/* -------------------------------------------------- 4. 新潮快消风
   骨架：左窄信息（姓名/意向/竖排联系）+ 右 4:3 横构图照片 + 正文两列拼贴
   参考：快消/品牌岗——照片横切、信息竖排、双栏阅读节奏 */
.tpl-fresh { color: #22302c; --accent: #14655e; }
/* 照片框用 3:4 竖构图：证件照基本都是竖版（这张原图 2597×3626 ≈ 0.72），
   塞进 4:3 横框时 cover 只能露出 54% 高度，脸和上半身被切得很厉害；
   3:4 框能露出 95%，基本是一整张证件照。
   宽高乘积与旧的 13.5em×4:3 持平（10.1×13.47 ≈ 13.5×10.13），版面重量不变 */
.tpl-fresh .fr-head {
  display: grid; grid-template-columns: 1fr 10.1em; gap: 1.6em; align-items: end;
  padding-bottom: 1.1em; border-bottom: 2px solid #14655e; margin-bottom: 1.35em;
}
.tpl-fresh .fr-id { min-width: 0; }
.tpl-fresh .cv-name { color: #0f4b45; font-size: 2.4em; letter-spacing: .12em; line-height: 1.08; }
.tpl-fresh .cv-intent { color: #9b7530; font-weight: 500; letter-spacing: .12em; margin-top: .5em; }
.tpl-fresh .cv-contacts { display: flex; flex-direction: column; align-items: flex-start; gap: .3em; margin-top: .9em; color: #54645e; font-size: .86em; }
.tpl-fresh .fr-photo { width: 100%; aspect-ratio: 3 / 4; overflow: hidden; background: #e7ece9; }
.tpl-fresh .fr-photo-img { width: 100%; height: 100%; object-fit: cover; display: block; }
/* 正文两列：column-count 是排版原生分栏，打印不会光栅化。
   分栏只在 .cv-block 上禁止断开、标题后禁止断开，
   这样长小节可以跨栏流动，两列长度才不会一边空一边满 */
.tpl-fresh .fr-cols { column-count: 2; column-gap: 2.1em; }
.tpl-fresh .fr-cols .cv-sec { margin-top: 1.15em; }
.tpl-fresh .fr-cols .cv-sec:first-child { margin-top: 0; }
.tpl-fresh .fr-cols .cv-block { break-inside: avoid; page-break-inside: avoid; }
.tpl-fresh .fr-cols .cv-sec-title { break-after: avoid; page-break-after: avoid; }
.tpl-fresh .cv-sec-title {
  color: #14655e; border-bottom: 1px solid #dfe6e3; letter-spacing: .13em;
  padding-bottom: .3em; align-items: center;
}
.tpl-fresh .cv-sec-title::before { content: ""; width: .36em; height: .36em; background: #b08d4f; flex: none; }
.tpl-fresh .cv-block { margin-bottom: .82em; }
/* 窄栏里「学校 ｜ 专业」挤不下一行：改成标题一行、副信息一行，
   避免 1px 竖线被折到行首变成一粒杂点 */
.tpl-fresh .cv-b1 { display: block; font-size: .94em; color: #12362f; }
.tpl-fresh .cv-b1-s { display: block; font-size: .88em; color: #6c7a74; }
.tpl-fresh .cv-b1-s::before { display: none; }
.tpl-fresh .cv-b3 { font-size: .78em; color: #8b9691; margin-top: .06em; }
.tpl-fresh .cv-list li { font-size: .87em; line-height: 1.7; }
.tpl-fresh .cv-para { font-size: .87em; line-height: 1.72; }
.tpl-fresh .skills-dots { grid-template-columns: 1fr; gap: 0; }
.tpl-fresh .skill-line { font-size: .86em; padding: .16em 0; }
.tpl-fresh .cv-b2 { font-size: .85em; color: #6c7a74; }

/* -------------------------------------------------- 5. 作品集外链风
   骨架：左侧白主栏（巨型姓名 + 行式条目）+ 右侧深色栏（满宽照片 / 联系 / 作品集 / 技能）
   借参考稿三处：深色右栏、标题下的短横线、条目「左元信息 / 右正文」的行式布局；
   不照抄：作品集链接单独成块并排在联系之后（这是本模板的身份），
   技能改用条形而不是圆环——中文技能名动辄八九个字，塞进圆环放不下。 */
.tpl-folio {
  padding: 0; position: relative; color: #1b1b1b; background: #fff;
  --fo-ink-dark: #262626;
  --fo-side-w: 36%;
  /* 本模板的强调色：独立于全站 --brand，改这里不影响按钮/焦点环等界面元素。
     在深色侧栏 #262626 上 5.12:1，比原来的 #ff3200（4.11:1）更清楚 */
  --fo-accent: #f66c2b;
}
/* 深色底用绝对层铺满整页：右侧栏本身只跟内容一样高，内容短时会在页底露出白边 */
.tpl-folio .fo-bg {
  position: absolute; right: 0; top: 0; bottom: 0; width: var(--fo-side-w);
  background: var(--fo-ink-dark);
  -webkit-print-color-adjust: exact; print-color-adjust: exact;
}
.tpl-folio .fo-grid { position: relative; z-index: 1; display: grid; grid-template-columns: minmax(0, 1fr) var(--fo-side-w); align-items: stretch; }

/* ---- 左：主栏 ---- */
.tpl-folio .fo-main { padding: 2.6em 2.4em 2.4em 2.8em; min-width: 0; }
.tpl-folio .fo-name {
  font-size: 3.2em; font-weight: 800; line-height: .98; letter-spacing: -.015em; color: #111;
}
.tpl-folio .fo-role { margin-top: .75em; font-size: .82em; font-weight: 600; letter-spacing: .2em; color: #5a5a5a; }

.tpl-folio .fo-sec { margin-top: 2.1em; }
/* 标题下的短横线：参考稿的识别符号，只有 1.4em 宽，不铺满整行 */
.tpl-folio .fo-h {
  font-size: 1.46em; font-weight: 800; letter-spacing: -.005em; color: #141414;
  padding-bottom: .42em;
}
.tpl-folio .fo-h::after {
  content: ""; display: block; width: 1.4em; height: 3px; margin-top: .38em;
  background: var(--fo-accent);
  -webkit-print-color-adjust: exact; print-color-adjust: exact;
}
/* 行式条目：左列放标题/年限/单位，右列放正文 —— 参考稿最有用的结构 */
/* 左列 34%：30% 时「可视化低代码搭建平台」这类九个字的标题会折成两行留个孤字，
   放到 34%（131→148px）刚好一行 */
.tpl-folio .fo-row { display: grid; grid-template-columns: 34% minmax(0, 1fr); gap: 1.3em; margin-top: 1.15em; }
.tpl-folio .fo-row-l { min-width: 0; }
.tpl-folio .fo-row-l b { display: block; font-size: .95em; font-weight: 700; color: #171717; line-height: 1.45; }
.tpl-folio .fo-row-l em { display: block; margin-top: .28em; font-style: normal; font-size: .78em; letter-spacing: .04em; color: #7a7a7a; }
.tpl-folio .fo-row-l span { display: block; margin-top: .16em; font-size: .84em; color: #4a4a4a; line-height: 1.45; }
.tpl-folio .fo-row-r { min-width: 0; font-size: .88em; line-height: 1.75; color: #2c2c2c; }
.tpl-folio .fo-row-r .cv-list li { font-size: 1em; line-height: 1.75; }
.tpl-folio .fo-para { font-size: .9em; line-height: 1.8; color: #2c2c2c; text-align: justify; }

/* ---- 右：深色栏 ---- */
.tpl-folio .fo-side { color: #fff; min-width: 0; }
.tpl-folio .fo-photo { width: 100%; aspect-ratio: 1 / 1.12; overflow: hidden; background: #3a3a3a; }
.tpl-folio .fo-photo-img { width: 100%; height: 100%; object-fit: cover; display: block; }
.tpl-folio .fo-side-in { padding: 1.9em 1.7em 2.2em; }

.tpl-folio .fo-s-sec { margin-top: 1.7em; }
.tpl-folio .fo-s-sec:first-child { margin-top: 0; }
.tpl-folio .fo-s-h {
  font-size: .95em; font-weight: 700; letter-spacing: .06em; color: #fff; padding-bottom: .5em;
}
.tpl-folio .fo-s-h::after {
  content: ""; display: block; width: 1.2em; height: 2px; margin-top: .45em;
  background: var(--fo-accent);
  -webkit-print-color-adjust: exact; print-color-adjust: exact;
}
/* 联系：橙色图标 + 白色文字 */
.tpl-folio .fo-ct { display: grid; gap: .62em; }
.tpl-folio .fo-ct li { display: grid; grid-template-columns: 1.05em minmax(0, 1fr); gap: .6em; align-items: start; }
.tpl-folio .fo-ct .ci { color: var(--fo-accent); }
.tpl-folio .fo-ct .ci svg { width: 1em; height: 1em; display: block; margin-top: .16em; }
.tpl-folio .fo-ct span { font-size: .82em; line-height: 1.5; color: #eaeaea; word-break: break-word; }
.tpl-folio .fo-ct a { color: inherit; text-decoration: none; }
.tpl-folio .fo-ct a:hover { color: var(--fo-accent); }

/* 作品集：这一块是本模板的身份，给足分量 —— 标签 + 域名两行，整块可点 */
.tpl-folio .fo-links { display: grid; gap: .7em; }
.tpl-folio .fo-links a {
  display: grid; gap: .1em; padding-left: .9em; border-left: 2px solid var(--fo-accent);
  text-decoration: none;
}
.tpl-folio .fo-link-label { font-size: .9em; font-weight: 600; color: #fff; line-height: 1.4; }
.tpl-folio .fo-link-host { font-size: .74em; color: #9d9d9d; word-break: break-all; }
.tpl-folio .fo-links a:hover .fo-link-host { color: var(--fo-accent); }

/* 技能：名称 + 条形，条长按等级百分比 */
.tpl-folio .fo-sk { display: grid; gap: .68em; }
.tpl-folio .fo-sk li { display: grid; gap: .28em; }
.tpl-folio .fo-sk span { font-size: .8em; line-height: 1.35; color: #dedede; }
.tpl-folio .fo-sk i {
  display: block; height: .3em; background: #454545; position: relative;
  -webkit-print-color-adjust: exact; print-color-adjust: exact;
}
.tpl-folio .fo-sk i::before {
  content: ""; position: absolute; left: 0; top: 0; bottom: 0; width: var(--v, 60%);
  background: var(--fo-accent);
  -webkit-print-color-adjust: exact; print-color-adjust: exact;
}

@media (max-width: 700px) {
  .tpl-folio .fo-grid { grid-template-columns: minmax(0, 1fr); }
  .tpl-folio .fo-side { order: -1; }
  .tpl-folio .fo-photo { aspect-ratio: 16 / 9; }
  .tpl-folio .fo-main { padding: 1.8em 1.7em; }
  .tpl-folio .fo-name { font-size: 2.4em; }
  .tpl-folio .fo-row { grid-template-columns: 34% minmax(0, 1fr); gap: 1em; }
}

/* -------------------------------------------------- 6. 应届生型
   骨架：左浅灰栏（满宽照片块 / 联系 / 技能点阵）+ 右主栏（姓名 / 自述 / 教育 / 经历）
   参考稿的语法借了三处：顶部满宽照片块、姓名下一条强调横线、技能用点阵表达；
   没照抄的三处：教育留在主栏（应届生的主卖点不该塞进窄栏）、日期放在标题上方而不是右对齐、
   条目旁不画彩色竖条（每段都来一条会吵）。
   强调色只出现在照片块底、姓名横线、技能点与条目符号上，正文一律黑灰。 */
.tpl-grad {
  padding: 0; position: relative; background: #fff; color: #1a1a1a;
  --gr-yellow: #ffd73a;   /* 全模板唯一强调色：照片块底、姓名横线、技能点、条目符号 */
  --gr-side-w: 38%;
}
/* 整页铺灰：教育搬进侧栏后，灰区能到页高约 78%，剩余留白读作页边距。
   若哪天侧栏内容变短，这一层仍会撑满，不会露出半截白边。 */
.tpl-grad .gr-bg {
  position: absolute; left: 0; top: 0; bottom: 0; width: var(--gr-side-w);
  background: #f6f6f6;
  -webkit-print-color-adjust: exact; print-color-adjust: exact;
}
.tpl-grad .gr-grid { display: grid; grid-template-columns: var(--gr-side-w) minmax(0, 1fr); position: relative; z-index: 1; }

/* ---- 左栏 ---- */
.tpl-grad .gr-side { min-width: 0; }
/* 照片块：满到页面左上角，只在右下角收一个圆角，做一点性格但不抢戏 */
/* 头像区：一块竖长的黄色卡片，圆形头像压在卡片底部（不铺满）。
   实测量自用户调整后的导出版：卡片 197×281、左缩进 56、圆外径 174、白环 10、
   圆底距卡片底 10、圆顶上方留 97。圆水平居中，靠 flex-end 贴底而不是绝对定位，
   这样卡片高度改了圆也不会跑。 */
.tpl-grad .gr-photo {
  display: flex; align-items: flex-end; justify-content: center;
  /* 左缩进 = 4em 作为设计锚点，累计减去 6mm（两次各 3mm）：
     用 calc 而不是把 4em 直接改小，是因为字号会被一页纸引擎放大，
     固定减毫米值才能保证无论正文字号多少，这块内容在纸上都左移同样的距离 */
  width: 14.1em; height: 20.1em; margin-left: calc(4em - 6mm); padding-bottom: .72em;
  background: var(--gr-yellow);
  /* 底部两角的大圆角（7em ≈ 98px @14px）：按截图逐行拟合出的半径，
     40/60/80px 处的黄色宽度与 R=130 截图像素的理论值误差 ≤1px */
  border-radius: 0 0 7em 7em;
  -webkit-print-color-adjust: exact; print-color-adjust: exact;
}
.tpl-grad .gr-photo-img {
  display: block; width: 12.43em; height: 12.43em;
  border-radius: 50%; border: .72em solid #fff; object-fit: cover;
}
.tpl-grad .gr-side-in { padding: 1.4em 1.5em 2.2em; }

/* ---- 右栏 ---- */
.tpl-grad .gr-main { padding: 2.5em 2.4em 2.4em 2.2em; min-width: 0; }
.tpl-grad .gr-name { font-size: 3.3em; font-weight: 800; line-height: 1.04; letter-spacing: .01em; color: #141414; }
.tpl-grad .gr-role { margin-top: .5em; font-size: .9em; letter-spacing: .28em; color: #6b6b6b; }
.tpl-grad .gr-rule {
  margin-top: 1.15em; height: 3px; width: 100%;
  background: var(--gr-yellow);
  -webkit-print-color-adjust: exact; print-color-adjust: exact;
}

/* ---- 分节（两栏同款） ---- */
.tpl-grad .gr-sec { margin-top: 1.7em; }
.tpl-grad .gr-t {
  font-size: 1.02em; font-weight: 700; letter-spacing: .12em; color: #1b1b1b;
  margin-bottom: .85em;
}

/* ---- 左栏内容 ---- */
.tpl-grad .gr-ct { display: grid; gap: .7em; }
.tpl-grad .gr-ct li { display: grid; grid-template-columns: 1.1em minmax(0, 1fr); gap: .55em; align-items: start; }
.tpl-grad .gr-ct .ci { color: #3f3f3f; }
.tpl-grad .gr-ct .ci svg { width: 1em; height: 1em; display: block; margin-top: .18em; }
.tpl-grad .gr-ct li > span { font-size: .82em; line-height: 1.55; color: #262626; word-break: break-word; }
.tpl-grad .gr-ct a { color: inherit; text-decoration: none; border-bottom: 1px solid #ddd; }
.tpl-grad .gr-ct a:hover { border-bottom-color: #333; }
.tpl-grad .gr-sep { color: #b5b5b5; }

/* 技能点阵：五格计量。未达格画成空心圈而不是实心浅灰——
   #ffd73a 与浅灰的亮度差只有 1.10:1，两个实心圆在黑白打印或色觉障碍下分不出，
   靠「实心 / 空心」的形状差兜底，颜色只做加强。 */
.tpl-grad .gr-sk { display: grid; gap: .55em; }
.tpl-grad .gr-sk li { display: flex; align-items: center; justify-content: space-between; gap: .6em; }
.tpl-grad .gr-sk-n { font-size: .82em; line-height: 1.5; color: #262626; min-width: 0; }
.tpl-grad .gr-dots { flex: none; display: inline-flex; gap: .2em; }
.tpl-grad .gr-dots i {
  width: .42em; height: .42em; border-radius: 50%; display: block;
  border: 1px solid #cfcfcf; background: transparent;
  -webkit-print-color-adjust: exact; print-color-adjust: exact;
}
.tpl-grad .gr-dots i.on { background: var(--gr-yellow); border-color: var(--gr-yellow); }

/* 侧栏教育：日期在上、学校在下，与右栏条目同一套阅读顺序 */
.tpl-grad .gr-edu { margin-bottom: .95em; }
.tpl-grad .gr-edu:last-child { margin-bottom: 0; }
.tpl-grad .gr-edu em { display: block; font-style: normal; font-size: .74em; letter-spacing: .05em; color: #8a8a8a; }
.tpl-grad .gr-edu b { display: block; margin-top: .1em; font-size: .88em; font-weight: 700; color: #141414; line-height: 1.45; }
.tpl-grad .gr-edu span { display: block; margin-top: .08em; font-size: .8em; color: #4a4a4a; line-height: 1.5; }
.tpl-grad .gr-edu .cv-list { margin-top: .3em; }
.tpl-grad .gr-edu .cv-list li {
  position: relative; padding-left: .9em; margin-bottom: .1em;
  font-size: .76em; line-height: 1.65; color: #3a3a3a;
}
.tpl-grad .gr-edu .cv-list li::before {
  content: ""; position: absolute; left: .1em; top: .66em; width: .22em; height: .22em; background: var(--gr-yellow);
}

/* ---- 右栏条目：日期在上、标题在下（参考稿的顺序，读起来像时间线） ---- */
.tpl-grad .gr-entry { margin-bottom: 1.15em; }
.tpl-grad .gr-entry:last-child { margin-bottom: 0; }
.tpl-grad .gr-date { font-size: .76em; letter-spacing: .06em; color: #8a8a8a; }
.tpl-grad .gr-e-title { margin-top: .12em; font-size: 1em; font-weight: 700; color: #141414; }
.tpl-grad .gr-e-sub { margin-top: .1em; font-size: .86em; color: #4a4a4a; }
.tpl-grad .gr-para { font-size: .9em; line-height: 1.85; color: #2b2b2b; text-align: justify; }

.tpl-grad .gr-entry .cv-list { margin-top: .3em; }
.tpl-grad .gr-entry .cv-list li {
  position: relative; padding-left: 1.05em; margin-bottom: .16em;
  font-size: .9em; line-height: 1.75; color: #2b2b2b; text-align: justify;
}
.tpl-grad .gr-entry .cv-list li::before {
  content: ""; position: absolute; left: .16em; top: .72em;
  width: .26em; height: .26em; background: var(--gr-yellow);
  -webkit-print-color-adjust: exact; print-color-adjust: exact;
}

/* 学术成果（应届生偶尔有）：编号悬挂，与主栏同字号 */
.tpl-grad .ac-pub { display: grid; grid-template-columns: 1.9em minmax(0, 1fr); margin-top: .55em; }
.tpl-grad .ac-pub-idx { font-size: .86em; font-weight: 700; color: #141414; font-variant-numeric: tabular-nums; }
.tpl-grad .ac-pub-title { font-size: .92em; line-height: 1.6; color: #141414; }
.tpl-grad .ac-pub-meta { display: flex; flex-wrap: wrap; gap: .7em; margin-top: .1em; font-size: .8em; color: #8a8a8a; }
.tpl-grad .ac-pub-meta em { font-style: normal; color: #3a3a3a; }
.tpl-grad .ac-pub .cv-list { margin-top: .2em; }
.tpl-grad .ac-pub .cv-list li { position: relative; padding-left: 1.05em; font-size: .88em; line-height: 1.72; }
.tpl-grad .ac-pub .cv-list li::before {
  content: ""; position: absolute; left: .16em; top: .7em; width: .24em; height: .24em; background: var(--gr-yellow);
}

@media (max-width: 700px) {
  /* 窄屏改单列：底色层换成侧栏自身背景，避免整页铺灰 */
  .tpl-grad .gr-grid { grid-template-columns: minmax(0, 1fr); }
  .tpl-grad .gr-bg { display: none; }
  .tpl-grad .gr-side { background: #f6f6f6; }
  .tpl-grad .gr-photo { width: 46%; }
  .tpl-grad .gr-main { padding: 1.8em 1.8em 1.6em; }
  .tpl-grad .gr-name { font-size: 2.4em; }
}

/* -------------------------------------------------- 7. 学术科研型
   骨架：左窄栏（圆头像 / 联系 / 教育 / 技能）+ 右主栏（姓名 / 自述 / 成果 / 经历）
   两栏之上压一条通栏横线，把「身份」与「内容」分开；每节标题上方各有一条细线。
   版式语汇取自学术样张：标题大写加字距、细线分区、不用色块与装饰图形。
   汉字不用 italic——宋体没有斜体字面，浏览器合成倾斜会显得廉价。 */
.tpl-academic {
  padding: 2.5em 3em 2.4em;
  color: #1b1b1b;
  /* 字体跟随全站 var(--font)：模板之间换皮不该换字形。
     之前这里写死宋体，结果是七套模板里只有这一套的字面和别人不一样。 */
  --ac-line: #d8d8d8;
  --ac-quiet: #6e6e6e;
}

/* 顶区：与下方两栏共用同一套列宽，头像才能和左栏对齐 */
.tpl-academic .ac-top { display: grid; grid-template-columns: 33.5% minmax(0, 1fr); column-gap: 2.4em; }
.tpl-academic .ac-top-side { display: flex; justify-content: flex-start; }
.tpl-academic .ac-top-main { padding-top: .1em; }
.tpl-academic .ac-photo {
  width: 8.8em; height: 8.8em; border-radius: 50%; overflow: hidden;
  border: 1px solid #c9c9c9; background: #f1f1f1;
}
.tpl-academic .ac-photo-img { width: 100%; height: 100%; object-fit: cover; display: block; }
.tpl-academic .ac-name { font-size: 3.1em; font-weight: 700; line-height: 1.02; letter-spacing: .1em; color: #111; }
.tpl-academic .ac-role { margin-top: .55em; font-size: .78em; letter-spacing: .24em; color: var(--ac-quiet); }

/* 通栏横线：整页唯一一条贯穿两栏的线，把身份区和内容区分开 */
.tpl-academic .ac-rule { margin-top: 1.5em; border-top: 1px solid #2b2b2b; }

.tpl-academic .ac-grid { display: grid; grid-template-columns: 33.5% minmax(0, 1fr); column-gap: 2.4em; }
.tpl-academic .ac-side { padding-top: 1.5em; }
.tpl-academic .ac-main { padding-top: 1.5em; }

/* 分节：标题上方一条细线，两栏同款 */
.tpl-academic .ac-block { border-top: 1px solid var(--ac-line); padding-top: .72em; margin-top: 1.45em; }
.tpl-academic .ac-side .ac-block:first-child,
.tpl-academic .ac-main .ac-block:first-child { margin-top: 0; }
.tpl-academic .ac-t {
  display: flex; align-items: baseline; gap: .55em;
  font-size: .92em; font-weight: 700; letter-spacing: .16em; color: #141414;
}

/* ---- 左栏 ---- */
.tpl-academic .ac-ct { display: grid; gap: .62em; margin-top: .8em; }
.tpl-academic .ac-ct li { display: grid; grid-template-columns: 1.05em minmax(0, 1fr); gap: .55em; align-items: start; }
.tpl-academic .ac-ct .ci { color: #4a4a4a; }
.tpl-academic .ac-ct .ci svg { width: 1em; height: 1em; display: block; margin-top: .3em; }
.tpl-academic .ac-ct-i { display: grid; gap: .06em; text-align: right; }
.tpl-academic .ac-ct-i b { font-size: .66em; font-weight: 500; letter-spacing: .18em; color: var(--ac-quiet); }
.tpl-academic .ac-ct-i span { font-size: .85em; line-height: 1.5; color: #1f1f1f; word-break: break-word; }
.tpl-academic .ac-ct-i a { color: inherit; text-decoration: none; border-bottom: 1px solid #ddd; }
.tpl-academic .ac-ct-i a:hover { border-bottom-color: #333; }
.tpl-academic .ac-ct-sep { color: #aaa; }

.tpl-academic .ac-edu { margin-top: .85em; }
.tpl-academic .ac-edu + .ac-edu { margin-top: 1em; }
.tpl-academic .ac-edu b { display: block; font-size: .9em; font-weight: 700; color: #141414; line-height: 1.45; }
.tpl-academic .ac-edu span { display: block; margin-top: .12em; font-size: .85em; color: #3d3d3d; line-height: 1.5; }
.tpl-academic .ac-edu em { display: block; margin-top: .16em; font-style: normal; font-size: .76em; letter-spacing: .03em; color: var(--ac-quiet); }

.tpl-academic .ac-sk { margin-top: .8em; }
.tpl-academic .ac-sk li {
  display: flex; align-items: baseline; justify-content: space-between; gap: .6em;
  font-size: .85em; line-height: 1.9; color: #1f1f1f;
}
.tpl-academic .ac-sk li span { min-width: 0; }
.tpl-academic .ac-sk li em { flex: none; font-style: normal; font-size: .9em; color: var(--ac-quiet); }

/* ---- 右栏 ---- */
.tpl-academic .ac-para { margin-top: .62em; font-size: .95em; line-height: 1.9; color: #262626; text-indent: 2em; text-align: justify; }

.tpl-academic .ac-entry { margin-top: .85em; }
.tpl-academic .ac-e-top { display: flex; align-items: baseline; justify-content: space-between; gap: 1.2em; }
.tpl-academic .ac-e-title { font-size: 1.02em; font-weight: 700; letter-spacing: .02em; color: #111; }
.tpl-academic .ac-e-date { flex: none; font-size: .76em; letter-spacing: .04em; color: var(--ac-quiet); font-variant-numeric: tabular-nums; }
.tpl-academic .ac-e-sub { margin-top: .14em; font-size: .9em; color: #454545; }

.tpl-academic .ac-entry .cv-list { margin-top: .28em; }
.tpl-academic .ac-entry .cv-list li {
  position: relative; padding-left: 1em; margin-bottom: .1em;
  font-size: .92em; line-height: 1.78; color: #2b2b2b; text-align: justify;
}
.tpl-academic .ac-entry .cv-list li::before {
  content: ""; position: absolute; left: .16em; top: .76em;
  width: .2em; height: .2em; background: #8a8a8a;
}

.tpl-academic .ac-pub { display: grid; grid-template-columns: 1.9em minmax(0, 1fr); margin-top: .55em; }
.tpl-academic .ac-pub-idx { font-size: .86em; font-weight: 700; color: #111; font-variant-numeric: tabular-nums; }
.tpl-academic .ac-pub-title { font-size: .95em; line-height: 1.6; color: #111; }
.tpl-academic .ac-pub-meta { display: flex; flex-wrap: wrap; gap: .7em; margin-top: .1em; font-size: .84em; color: var(--ac-quiet); }
.tpl-academic .ac-pub-meta em { font-style: normal; color: #3a3a3a; }
.tpl-academic .ac-pub .cv-list { margin-top: .22em; }

@media (max-width: 700px) {
  .tpl-academic { padding: 2em 2.2em; }
  .tpl-academic .ac-top,
  .tpl-academic .ac-grid { grid-template-columns: minmax(0, 1fr); column-gap: 0; }
  .tpl-academic .ac-top-main { margin-top: 1.2em; }
  .tpl-academic .ac-name { font-size: 2.4em; }
}

/* 多页模式：避免单行被横向截断 / 段落被拆到两页开头 */
.is-multipage .cv-block { break-inside: avoid; page-break-inside: avoid; }
.is-multipage .cv-sec-title { break-after: avoid; page-break-after: avoid; }
.is-multipage .cv-list li { break-inside: avoid; page-break-inside: avoid; }
.is-multipage .ac-entry,
.is-multipage .ac-pub { break-inside: avoid; page-break-inside: avoid; }
