/* ============================================================
 * templates-plus.css — 50 个独立设计的样式（templates-plus.js 配套）
 *
 * 约定：
 *   1. 每个 .ly-<id> 是一个完整独立的设计，不复用「主题换色」
 *   2. 所有字号 / 行高 / 间距走 calc(… * var(--fs/--lhv/--gap))，密度档位自动生效
 *   3. 通用颜色规则一律 :where() 降权，版式内的具体覆盖才能生效（HANDOVER.md 契约 3）
 *   4. grid 版式的 .sec-title 必须 align-self:start（HANDOVER.md 契约 5）
 *   5. 装饰一律 ::before/::after 或 background，不往 .page 里塞装饰 DOM
 * ============================================================ */

/* 主色的浅调（侧栏 / 卡片 / 标签底色用） */
.doc {
  --tint: color-mix(in srgb, var(--accent) 8%, #ffffff);
  --tint2: color-mix(in srgb, var(--accent) 16%, #ffffff);
  --tint3: color-mix(in srgb, var(--accent) 30%, #ffffff);
}

/* 扩展模板默认页边距（:where 降权，各版式的 .ly-x .page 覆盖才能生效） */
.doc[class*=" ly-"] :where(.page) { padding: 14mm 16mm 12mm; }

/* 通用配色（:where 降权，版式规则总能覆盖） */
.doc[class*=" ly-"] :where(.entry-sub) { color: #4b5563; }
.doc[class*=" ly-"] :where(.entry-time) { color: #6b7684; }
.doc[class*=" ly-"] :where(.summary) { color: #3d4550; }
.doc[class*=" ly-"] :where(.entry-list li) { color: #333b45; }
.doc[class*=" ly-"] :where(.contact-line) { color: #5b6675; }
.doc[class*=" ly-"] :where(.skill-desc) { color: #4a5361; }
.doc[class*=" ly-"] :where(.skill-name) { color: #2b333d; }

/* 双栏 / 色带版式的页面骨架（共通） */
.doc[class*=" ly-inkrail"] .page,
.doc[class*=" ly-mist"] .page,
.ly-accent-rail .page,
.ly-rail-line .page,
.ly-rail-photo .page,
.ly-rail-skillbar .page,
.ly-rail-minimal .page,
.ly-rail-wide .page,
.ly-rail-compact .page,
.ly-rail-serif .page,
.ly-rail-chips .page,
.ly-rail-num .page {
  padding: 0;
  display: flex;
  align-items: stretch;
}
.ly-band-dark .page,
.ly-band-photo .page,
.ly-band-light .page,
.ly-band-grad .page,
.ly-band-diag .page,
.ly-band-card .page,
.ly-band-cols .page,
.ly-band-grad-cols .page,
.ly-band-skillbars .page,
.ly-band-serif .page {
  padding: 0;
  display: flex;
  flex-direction: column;
}

/* ============================================================
 * 单栏组
 * ============================================================ */

/* 1. 素线 plain-rule —— 左对齐，页眉双细线，标题通栏细线 */
.ly-plain-rule .doc-header {
  padding-bottom: calc(10px * var(--gap));
  border-bottom: 3px double #c9d3e0;
}
.ly-plain-rule .name { font-size: calc(27px * var(--fs)); font-weight: 800; letter-spacing: 1px; color: #17202a; }
.ly-plain-rule .job { margin-top: 3px; font-size: calc(13.5px * var(--fs)); color: var(--accent); font-weight: 600; }
.ly-plain-rule .contact-line { margin-top: calc(7px * var(--gap)); }
.ly-plain-rule .summary { margin-top: calc(11px * var(--gap)); text-align: justify; }
.ly-plain-rule .sec-title {
  font-size: calc(14px * var(--fs)); letter-spacing: 1px; color: #17202a;
  padding-bottom: calc(4px * var(--gap)); border-bottom: 1px solid #d5dde8;
}
.ly-plain-rule .sec-title span { color: var(--accent); }

/* 2. 中章 center-seal —— 圆照居中，标题两侧横线 */
.ly-center-seal .doc-header {
  text-align: center; padding-bottom: calc(12px * var(--gap));
  border-bottom: 1px solid #e3ddcd;
}
.ly-center-seal .avatar {
  width: 23mm; height: 23mm; border-radius: 50%; object-fit: cover;
  margin: 0 auto calc(8px * var(--gap)); border: 2.5px solid var(--tint2);
}
.ly-center-seal .avatar-ph {
  display: flex; align-items: center; justify-content: center;
  background: var(--tint2); color: var(--accent); font-size: calc(26px * var(--fs)); font-weight: 700;
}
.ly-center-seal .name { font-size: calc(26px * var(--fs)); letter-spacing: 6px; text-indent: 6px; color: #241f14; }
.ly-center-seal .job { margin-top: 4px; font-size: calc(12.5px * var(--fs)); letter-spacing: 3px; color: var(--accent); }
.ly-center-seal .contact-line { justify-content: center; margin-top: calc(8px * var(--gap)); }
.ly-center-seal .summary { margin-top: calc(12px * var(--gap)); text-align: justify; }
.ly-center-seal .sec-title {
  display: flex; align-items: center; gap: 10px;
  font-size: calc(13px * var(--fs)); letter-spacing: 3px; color: #241f14;
}
.ly-center-seal .sec-title::before,
.ly-center-seal .sec-title::after { content: ""; flex: 1; height: 1px; background: #ddd6c4; }
.ly-center-seal .sec-title span { color: var(--accent); }

/* 3. 印鉴 plate —— 首字圆章 + 标题左竖条 */
.ly-plate .plate-head { display: flex; align-items: center; gap: 14px; }
.ly-plate .seal {
  width: 17mm; height: 17mm; flex: none; border-radius: 50%;
  background: var(--accent); color: #fff;
  display: flex; align-items: center; justify-content: center;
  font-size: calc(26px * var(--fs)); font-weight: 700;
  font-family: Georgia, "Songti SC", "SimSun", serif;
  box-shadow: 0 0 0 2.5px var(--tint2);
}
.ly-plate .name { font-size: calc(26px * var(--fs)); color: #221a10; }
.ly-plate .job { margin-top: 2px; font-size: calc(13px * var(--fs)); color: var(--accent); font-weight: 600; }
.ly-plate .contact-line { margin-top: calc(6px * var(--gap)); }
.ly-plate .summary { margin-top: calc(12px * var(--gap)); }
.ly-plate .sec-title {
  font-size: calc(14px * var(--fs)); color: #221a10;
  border-left: 4px solid var(--accent); padding-left: 8px; line-height: calc(1.3 * var(--lhv));
}

/* 4. 巨匠 bigname —— 超大姓名、杂志式留白 */
.ly-bigname .page { padding: 17mm 19mm 14mm; }
.ly-bigname .big-row { display: flex; align-items: baseline; gap: 16px; flex-wrap: wrap; }
.ly-bigname .name { font-size: calc(44px * var(--fs)); font-weight: 800; letter-spacing: -1px; color: #101216; line-height: 1.1; }
.ly-bigname .job { font-size: calc(14px * var(--fs)); color: var(--accent); font-weight: 600; letter-spacing: 1px; }
.ly-bigname .contact-line { margin-top: calc(10px * var(--gap)); }
.ly-bigname .summary { margin-top: calc(16px * var(--gap)); max-width: 92%; }
.ly-bigname .sec { margin-top: calc(20px * var(--gap)); }
.ly-bigname .sec-title {
  font-size: calc(12.5px * var(--fs)); font-weight: 700; letter-spacing: 4px;
  color: #8a919e; text-transform: uppercase;
}
.ly-bigname .sec-title span { color: inherit; }
.ly-bigname .sec-body { margin-top: calc(9px * var(--gap)); }
.ly-bigname .entry-title { font-size: calc(15px * var(--fs)); }

/* 5. 函封 boxhead —— 描边页眉盒 + 灰底标题 */
.ly-boxhead .head-box {
  border: 1.5px solid #c8cfda; border-radius: 3px;
  padding: calc(13px * var(--gap)) calc(17px * var(--gap));
}
.ly-boxhead .name { font-size: calc(25px * var(--fs)); color: #17202a; }
.ly-boxhead .job { margin-top: 3px; font-size: calc(13px * var(--fs)); color: var(--accent); font-weight: 600; }
.ly-boxhead .contact-line { margin-top: calc(7px * var(--gap)); }
.ly-boxhead .summary { margin-top: calc(12px * var(--gap)); }
.ly-boxhead .sec-title {
  display: inline-block; background: #f1f4f8; border-left: 4px solid var(--accent);
  padding: calc(3px * var(--gap)) 12px calc(3px * var(--gap)) 8px;
  font-size: calc(13px * var(--fs)); letter-spacing: 2px; color: #17202a;
}
.ly-boxhead .sec-body { margin-top: calc(9px * var(--gap)); }

/* 6. 源码 monocode —— 等宽字体、注释风标题 */
.ly-monocode { font-family: "PingFang SC", "Microsoft YaHei", system-ui, sans-serif; }
.ly-monocode .name {
  font-family: "SF Mono", Consolas, "Courier New", monospace;
  font-size: calc(25px * var(--fs)); color: #10251f;
}
.ly-monocode .name::before { content: "~/ "; color: var(--accent); font-weight: 400; }
.ly-monocode .job {
  font-family: "SF Mono", Consolas, monospace; margin-top: 3px;
  font-size: calc(12.5px * var(--fs)); color: var(--accent);
}
.ly-monocode .contact-line {
  font-family: "SF Mono", Consolas, monospace;
  margin-top: calc(7px * var(--gap)); font-size: calc(11.5px * var(--fs));
}
.ly-monocode .doc-header { padding-bottom: calc(10px * var(--gap)); border-bottom: 1px dashed #b9c8c2; }
.ly-monocode .summary { margin-top: calc(11px * var(--gap)); }
.ly-monocode .sec-title {
  font-family: "SF Mono", Consolas, monospace;
  font-size: calc(13.5px * var(--fs)); color: #10251f; letter-spacing: 1px;
}
.ly-monocode .sec-title span::before { content: "/* "; color: var(--accent); }
.ly-monocode .sec-title span::after { content: " */"; color: var(--accent); }
.ly-monocode .entry-time { font-family: "SF Mono", Consolas, monospace; font-size: calc(11.5px * var(--fs)); }

/* 7. 引言 quote —— 大引号简介、斜体标题 */
.ly-quote .name { font-size: calc(27px * var(--fs)); color: #1c1530; }
.ly-quote .job { margin-top: 3px; font-size: calc(13px * var(--fs)); color: var(--accent); font-weight: 600; }
.ly-quote .contact-line { margin-top: calc(7px * var(--gap)); }
.ly-quote .doc-header { padding-bottom: calc(10px * var(--gap)); border-bottom: 1px solid #e4ddf0; }
.ly-quote .q-big {
  position: relative; margin-top: calc(13px * var(--gap));
  padding: 2px 8px 2px 34px;
  font-size: calc(13.5px * var(--fs)); font-style: italic; color: #463a5e;
  line-height: calc(1.75 * var(--lhv));
}
.ly-quote .q-big::before {
  content: "“"; position: absolute; left: 0; top: -6px;
  font-size: calc(44px * var(--fs)); line-height: 1;
  font-family: Georgia, "Songti SC", serif; color: var(--tint3);
}
.ly-quote .sec-title {
  font-style: italic; font-family: Georgia, "Songti SC", "SimSun", serif;
  font-size: calc(15px * var(--fs)); color: var(--accent);
}
.ly-quote .sec-title span { border-bottom: 2px solid var(--tint3); padding-bottom: 2px; }

/* 8. 讯条 infobar —— 联系信息独立浅底横条 */
.ly-infobar .name { font-size: calc(26px * var(--fs)); color: #101c2e; }
.ly-infobar .job { margin-top: 3px; font-size: calc(13.5px * var(--fs)); color: var(--accent); font-weight: 600; }
.ly-infobar .doc-header .contact-line {
  margin-top: calc(9px * var(--gap));
  background: var(--tint); border-radius: 5px;
  padding: calc(7px * var(--gap)) 12px; color: #33415e;
}
.ly-infobar .summary { margin-top: calc(12px * var(--gap)); }
.ly-infobar .sec-title { font-size: calc(14px * var(--fs)); color: #101c2e; display: flex; align-items: center; gap: 8px; }
.ly-infobar .sec-title::before {
  content: ""; width: 7px; height: 7px; border-radius: 50%;
  background: var(--accent); flex: none;
}

/* 9. 序章 numbered —— 板块自动编号 */
.ly-numbered { counter-reset: secn; }
.ly-numbered .name { font-size: calc(26px * var(--fs)); color: #161c25; }
.ly-numbered .job { margin-top: 3px; font-size: calc(13px * var(--fs)); color: var(--accent); font-weight: 600; }
.ly-numbered .contact-line { margin-top: calc(7px * var(--gap)); }
.ly-numbered .doc-header { padding-bottom: calc(10px * var(--gap)); border-bottom: 1px solid #dde3ec; }
.ly-numbered .summary { margin-top: calc(11px * var(--gap)); }
.ly-numbered .sec-title {
  font-size: calc(14px * var(--fs)); color: #161c25; letter-spacing: 1px;
  padding-bottom: calc(4px * var(--gap)); border-bottom: 1px solid #e3e8f0;
}
.ly-numbered .sec-title span::before {
  counter-increment: secn; content: counter(secn, decimal-leading-zero) "  ";
  color: var(--accent); font-weight: 800;
  font-variant-numeric: tabular-nums; margin-right: 2px;
}

/* 10. 点引 dotline —— 标题后点线引导 */
.ly-dotline .name { font-size: calc(26px * var(--fs)); color: #161c25; }
.ly-dotline .job { margin-top: 3px; font-size: calc(13px * var(--fs)); color: var(--accent); font-weight: 600; }
.ly-dotline .contact-line { margin-top: calc(7px * var(--gap)); }
.ly-dotline .summary { margin-top: calc(11px * var(--gap)); }
.ly-dotline .sec-title {
  display: flex; align-items: baseline; gap: 8px;
  font-size: calc(14px * var(--fs)); color: #161c25;
}
.ly-dotline .sec-title::after {
  content: ""; flex: 1; transform: translateY(-3px);
  border-bottom: 2px dotted var(--tint3);
}
.ly-dotline .sec-title span { color: var(--accent); }

/* 11. 括弧 bracket —— 居中页眉、括号标题 */
.ly-bracket .doc-header { text-align: center; padding-bottom: calc(10px * var(--gap)); border-bottom: 1px solid #eadfe3; }
.ly-bracket .name { font-size: calc(25px * var(--fs)); letter-spacing: 3px; color: #26121a; }
.ly-bracket .job { margin-top: 3px; font-size: calc(12.5px * var(--fs)); letter-spacing: 2px; color: var(--accent); }
.ly-bracket .contact-line { justify-content: center; margin-top: calc(7px * var(--gap)); }
.ly-bracket .summary { margin-top: calc(11px * var(--gap)); text-align: center; }
.ly-bracket .sec-title { text-align: center; font-size: calc(13.5px * var(--fs)); letter-spacing: 2px; color: #26121a; }
.ly-bracket .sec-title span::before { content: "【 "; color: var(--accent); font-weight: 400; }
.ly-bracket .sec-title span::after { content: " 】"; color: var(--accent); font-weight: 400; }

/* 12. 边锋 edgebar —— 左缘通长色条 */
.ly-edgebar .page { padding: 14mm 15mm 12mm 20mm; }
.ly-edgebar .page::before {
  content: ""; position: absolute; left: 0; top: 0; bottom: 0;
  width: 4.5mm; background: var(--accent);
}
.ly-edgebar .name { font-size: calc(26px * var(--fs)); color: #26180f; }
.ly-edgebar .job { margin-top: 3px; font-size: calc(13px * var(--fs)); color: var(--accent); font-weight: 600; }
.ly-edgebar .contact-line { margin-top: calc(7px * var(--gap)); }
.ly-edgebar .summary { margin-top: calc(11px * var(--gap)); }
.ly-edgebar .sec-title { font-size: calc(14px * var(--fs)); color: #26180f; }
.ly-edgebar .sec-title span { border-bottom: 3px solid var(--accent); padding-bottom: 2px; }

/* 13. 密织 compact —— 高密度、色块标题 */
.ly-compact .page { padding: 11mm 14mm 10mm; }
.ly-compact { font-size: calc(13px * var(--fs)); }
.ly-compact .name { font-size: calc(22px * var(--fs)); color: #101216; }
.ly-compact .job { display: inline; margin-left: 8px; font-size: calc(12.5px * var(--fs)); color: var(--accent); font-weight: 600; }
.ly-compact .contact-line { margin-top: calc(5px * var(--gap)); }
.ly-compact .doc-header { padding-bottom: calc(7px * var(--gap)); border-bottom: 1.5px solid #1f2937; }
.ly-compact .summary { margin-top: calc(8px * var(--gap)); }
.ly-compact .sec { margin-top: calc(9px * var(--gap)); }
.ly-compact .sec-title {
  display: inline-block; background: #1f2937; color: #fff;
  font-size: calc(11.5px * var(--fs)); letter-spacing: 2px;
  padding: calc(2px * var(--gap)) 9px; border-radius: 2px;
}
.ly-compact .sec-body { margin-top: calc(6px * var(--gap)); }
.ly-compact .entry { margin-top: calc(7px * var(--gap)); }
.ly-compact .entry-list li { line-height: calc(1.55 * var(--lhv)); }

/* 14. 学报 serif-acad —— 衬线居中、双线标题 */
.ly-serif-acad {
  font-family: Georgia, "Times New Roman", "Songti SC", "SimSun", serif;
  color: #26211a;
}
.ly-serif-acad .page { padding: 15mm 18mm 13mm; }
.ly-serif-acad .doc-header { text-align: center; padding-bottom: calc(11px * var(--gap)); border-bottom: 1px solid #cfc4ae; }
.ly-serif-acad .name { font-size: calc(27px * var(--fs)); letter-spacing: 5px; color: #26211a; font-weight: 700; }
.ly-serif-acad .job { margin-top: 4px; font-size: calc(13px * var(--fs)); font-style: italic; color: var(--accent); }
.ly-serif-acad .contact-line { justify-content: center; margin-top: calc(8px * var(--gap)); }
.ly-serif-acad .summary { margin-top: calc(12px * var(--gap)); text-align: justify; }
.ly-serif-acad .sec-title {
  text-align: center; font-size: calc(13.5px * var(--fs)); letter-spacing: 4px;
  color: #26211a; font-variant: small-caps;
  border-top: 1px solid #cfc4ae; border-bottom: 1px solid #cfc4ae;
  padding: calc(3px * var(--gap)) 0;
}
.ly-serif-acad .entry-title { font-weight: 700; }
.ly-serif-acad .entry-time { font-style: italic; }

/* 15. 文枢 serif-left —— 衬线左对齐、发丝线 */
.ly-serif-left {
  font-family: Georgia, "Times New Roman", "Songti SC", "SimSun", serif;
  color: #29241c;
}
.ly-serif-left .page { padding: 15mm 17mm 13mm; }
.ly-serif-left .name { font-size: calc(30px * var(--fs)); color: #29241c; }
.ly-serif-left .job { margin-top: 3px; font-size: calc(13.5px * var(--fs)); font-style: italic; color: var(--accent); }
.ly-serif-left .contact-line { margin-top: calc(7px * var(--gap)); }
.ly-serif-left .doc-header { padding-bottom: calc(10px * var(--gap)); border-bottom: 2px solid #29241c; }
.ly-serif-left .summary { margin-top: calc(11px * var(--gap)); text-align: justify; }
.ly-serif-left .sec-title {
  font-size: calc(16px * var(--fs)); color: #29241c;
  padding-bottom: calc(3px * var(--gap)); border-bottom: .75px solid #d8cdb8;
}
.ly-serif-left .sec-title span { color: var(--accent); }
.ly-serif-left .entry-time { font-style: italic; }

/* 16. 白描 hairline —— 无彩色、极细线、大留白 */
.ly-hairline .page { padding: 18mm 20mm 15mm; }
.ly-hairline .doc-header { text-align: center; }
.ly-hairline .name { font-size: calc(22px * var(--fs)); font-weight: 600; letter-spacing: 5px; color: #333; }
.ly-hairline .job { margin-top: 4px; font-size: calc(12px * var(--fs)); letter-spacing: 2px; color: #999; }
.ly-hairline .contact-line { justify-content: center; margin-top: calc(9px * var(--gap)); color: #aaa; }
.ly-hairline .summary { margin-top: calc(16px * var(--gap)); text-align: center; color: #555; }
.ly-hairline .sec { margin-top: calc(22px * var(--gap)); }
.ly-hairline .sec-title {
  text-align: center; font-size: calc(11px * var(--fs)); font-weight: 600;
  letter-spacing: 5px; color: #999; text-transform: uppercase;
}
.ly-hairline .sec-body { margin-top: calc(12px * var(--gap)); }
.ly-hairline .entry + .entry { border-top: .75px solid #eceff2; padding-top: calc(10px * var(--gap)); }
.ly-hairline .entry-time { color: #aaa; }
.ly-hairline .entry-list li::before { background: #bbb; }

/* 17. 冠线 topline —— 顶部色条、标题左竖线 */
.ly-topline .page { padding: 16mm 16mm 12mm; }
.ly-topline .page::before {
  content: ""; position: absolute; left: 0; right: 0; top: 0;
  height: 2.5mm; background: var(--accent);
}
.ly-topline .name { font-size: calc(26px * var(--fs)); color: #0f2420; }
.ly-topline .job { margin-top: 3px; font-size: calc(13px * var(--fs)); color: var(--accent); font-weight: 600; }
.ly-topline .contact-line { margin-top: calc(7px * var(--gap)); }
.ly-topline .summary { margin-top: calc(11px * var(--gap)); }
.ly-topline .sec-title {
  font-size: calc(13.5px * var(--fs)); letter-spacing: 2px; color: #0f2420;
  border-left: 3px solid var(--accent); padding-left: 8px;
  border-bottom: 1px solid #d9e6e2; padding-bottom: calc(4px * var(--gap));
}

/* 18. 渐线 gradline —— 标题渐隐下划线 */
.ly-gradline .name { font-size: calc(26px * var(--fs)); color: #101c33; }
.ly-gradline .job { margin-top: 3px; font-size: calc(13px * var(--fs)); color: var(--accent); font-weight: 600; }
.ly-gradline .contact-line { margin-top: calc(7px * var(--gap)); }
.ly-gradline .doc-header { padding-bottom: calc(10px * var(--gap)); border-bottom: 1px solid #dfe6f2; }
.ly-gradline .summary { margin-top: calc(11px * var(--gap)); }
.ly-gradline .sec-title { font-size: calc(14px * var(--fs)); color: #101c33; }
.ly-gradline .sec-title span {
  padding-bottom: 4px;
  background: linear-gradient(90deg, var(--accent), color-mix(in srgb, var(--accent) 10%, #fff)) left bottom / 100% 2px no-repeat;
}

/* 19. 流年 timeline-l —— 左侧竖线时间轴 */
.ly-timeline-l .name { font-size: calc(26px * var(--fs)); color: #0f2420; }
.ly-timeline-l .job { margin-top: 3px; font-size: calc(13px * var(--fs)); color: var(--accent); font-weight: 600; }
.ly-timeline-l .contact-line { margin-top: calc(7px * var(--gap)); }
.ly-timeline-l .doc-header { padding-bottom: calc(10px * var(--gap)); border-bottom: 1px solid #d9e6e2; }
.ly-timeline-l .summary { margin-top: calc(11px * var(--gap)); }
.ly-timeline-l .sec-title {
  font-size: calc(14px * var(--fs)); letter-spacing: 2px; color: #0f2420;
}
.ly-timeline-l .sec-title span { color: var(--accent); }
.ly-timeline-l .sec-body {
  margin-left: 4px; padding-left: 16px;
  border-left: 2px solid var(--tint2);
}
.ly-timeline-l .entry { position: relative; }
.ly-timeline-l .entry::before {
  content: ""; position: absolute; left: -21.5px; top: calc(5px * var(--fs));
  width: 7px; height: 7px; border-radius: 50%;
  background: var(--accent); border: 2px solid #fff;
  box-shadow: 0 0 0 1.5px var(--accent);
}
.ly-timeline-l .entry-time { color: var(--accent); font-weight: 600; }

/* 20. 刻度 timeline-dot —— 菱形节点虚线轴、时间胶囊 */
.ly-timeline-dot .doc-header { text-align: center; padding-bottom: calc(10px * var(--gap)); border-bottom: 1px solid #e4ddf0; }
.ly-timeline-dot .name { font-size: calc(25px * var(--fs)); letter-spacing: 2px; color: #1c1530; }
.ly-timeline-dot .job { margin-top: 3px; font-size: calc(12.5px * var(--fs)); letter-spacing: 2px; color: var(--accent); }
.ly-timeline-dot .contact-line { justify-content: center; margin-top: calc(7px * var(--gap)); }
.ly-timeline-dot .summary { margin-top: calc(11px * var(--gap)); text-align: center; }
.ly-timeline-dot .sec-title {
  text-align: center; font-size: calc(13px * var(--fs)); letter-spacing: 3px; color: #1c1530;
}
.ly-timeline-dot .sec-title span { color: var(--accent); }
.ly-timeline-dot .sec-body {
  margin-left: 6px; padding-left: 16px;
  border-left: 1.5px dashed var(--tint3);
}
.ly-timeline-dot .entry { position: relative; }
.ly-timeline-dot .entry::before {
  content: ""; position: absolute; left: -20px; top: calc(6px * var(--fs));
  width: 6px; height: 6px; background: var(--accent);
  transform: rotate(45deg);
}
.ly-timeline-dot .entry-time {
  background: var(--tint2); color: var(--accent);
  border-radius: 99px; padding: 1px 9px; font-size: calc(11px * var(--fs)); font-weight: 600;
}

/* ============================================================
 * 双栏组（共用骨架：.side + .main）
 * ============================================================ */

/* 侧栏/主栏内边距（各栏自己掌握，页面零 padding） */
.ly-inkrail .side, .ly-inkrail-r .side { padding: 13mm 7mm 12mm; }
.ly-mist-l .side, .ly-mist-r .side,
.ly-rail-chips .side { padding: 13mm 7mm 12mm; }
.ly-accent-rail .side { padding: 13mm 7mm 12mm; }
.ly-rail-line .side, .ly-rail-minimal .side { padding: 13mm 6mm 12mm 13mm; }
.ly-rail-photo .side { padding: 0 7mm 12mm; }
.ly-rail-skillbar .side, .ly-rail-num .side { padding: 13mm 7mm 12mm; }
.ly-rail-wide .side { padding: 13mm 8mm 12mm; }
.ly-rail-compact .side { padding: 11mm 6mm 10mm; }
.ly-rail-serif .side { padding: 13mm 7mm 12mm; }

.doc[class*=" ly-"] .main { flex: 1; min-width: 0; padding: 13mm 13mm 12mm 9mm; }
.doc[class*=" ly-"] .page.pg-wide .main { padding: 13mm 15mm; }
.ly-rail-line .main, .ly-rail-minimal .main { padding-left: 9mm; }

/* 侧栏公共：头像与姓名 */
.doc[class*=" ly-"] .side .avatar {
  width: 26mm; height: 26mm; border-radius: 50%; object-fit: cover;
  display: block; margin: 0 auto calc(9px * var(--gap));
}
.doc[class*=" ly-"] .side .avatar-ph {
  display: flex; align-items: center; justify-content: center;
  font-size: calc(24px * var(--fs)); font-weight: 700;
  background: rgba(255, 255, 255, .16); color: #fff;
}
.doc[class*=" ly-"] .side .name {
  text-align: center; font-size: calc(20px * var(--fs));
  letter-spacing: 1px; line-height: calc(1.3 * var(--lhv));
}
.doc[class*=" ly-"] .side .job { text-align: center; margin-top: 3px; font-size: calc(11.5px * var(--fs)); }
.doc[class*=" ly-"] .side .side-contact {
  flex-direction: column; align-items: flex-start; gap: 4px;
  margin-top: calc(10px * var(--gap)); font-size: calc(11.3px * var(--fs));
}
.doc[class*=" ly-"] .side .sec { margin-top: calc(13px * var(--gap)); }
.doc[class*=" ly-"] .side .sec-title { font-size: calc(12.5px * var(--fs)); letter-spacing: 2px; }
.doc[class*=" ly-"] .side .skill-row + .skill-row { margin-top: calc(7px * var(--gap)); }
.doc[class*=" ly-"] .side .skill-line { justify-content: space-between; gap: 4px; }
.doc[class*=" ly-"] .side .entry-head { align-items: flex-start; gap: 4px; }

/* 深色栏通用（墨轨/镜轨/影壁/量表/双序） */
.ly-inkrail .side, .ly-inkrail-r .side, .ly-rail-photo .side,
.ly-rail-skillbar .side, .ly-rail-num .side { color: #d7dee8; }
.ly-inkrail .side :where(.name, .sec-title), .ly-inkrail-r .side :where(.name, .sec-title),
.ly-rail-photo .side :where(.name, .sec-title), .ly-rail-skillbar .side :where(.name, .sec-title),
.ly-rail-num .side :where(.name, .sec-title) { color: #fff; }
.ly-inkrail .side :where(.contact-line, .skill-desc, .entry-sub, .entry-time, .job),
.ly-inkrail-r .side :where(.contact-line, .skill-desc, .entry-sub, .entry-time, .job),
.ly-rail-photo .side :where(.contact-line, .skill-desc, .entry-sub, .entry-time, .job),
.ly-rail-skillbar .side :where(.contact-line, .skill-desc, .entry-sub, .entry-time, .job),
.ly-rail-num .side :where(.contact-line, .skill-desc, .entry-sub, .entry-time, .job) { color: rgba(230, 236, 244, .72); }
.ly-inkrail .side :where(.skill-name, .entry-title), .ly-inkrail-r .side :where(.skill-name, .entry-title),
.ly-rail-photo .side :where(.skill-name, .entry-title), .ly-rail-skillbar .side :where(.skill-name, .entry-title),
.ly-rail-num .side :where(.skill-name, .entry-title) { color: #eef2f7; }
.ly-inkrail .side .sec-title, .ly-inkrail-r .side .sec-title,
.ly-rail-photo .side .sec-title, .ly-rail-skillbar .side .sec-title,
.ly-rail-num .side .sec-title {
  padding-bottom: calc(4px * var(--gap));
  border-bottom: 1px solid rgba(255, 255, 255, .22);
}
.ly-inkrail .side .entry-list li::before, .ly-inkrail-r .side .entry-list li::before,
.ly-rail-photo .side .entry-list li::before, .ly-rail-skillbar .side .entry-list li::before,
.ly-rail-num .side .entry-list li::before { background: #fff; }

/* 21. 墨轨 inkrail —— 左深色栏 */
.ly-inkrail .side { width: 64mm; flex: none; background: #20344d; }
.ly-inkrail .side .avatar { border: 2.5px solid rgba(255, 255, 255, .35); }
.ly-inkrail .side .job { color: #9fc2e8; }
.ly-inkrail .main .sec-title {
  font-size: calc(14px * var(--fs)); color: #17202a;
  padding-bottom: calc(4px * var(--gap)); border-bottom: 1.5px solid var(--tint2);
}
.ly-inkrail .main .sec-title span { color: var(--accent); }

/* 22. 镜轨 inkrail-r —— 右深色栏 */
.ly-inkrail-r .side { width: 64mm; flex: none; order: 2; background: #1c2431; }
.ly-inkrail-r .side .avatar { border: 2.5px solid rgba(255, 255, 255, .28); border-radius: 12px; }
.ly-inkrail-r .main { order: 1; padding: 13mm 9mm 12mm 13mm; }
.ly-inkrail-r .page.pg-wide .main { padding: 13mm 15mm; }
.ly-inkrail-r .main .sec-title {
  display: flex; align-items: center; gap: 8px;
  font-size: calc(13.5px * var(--fs)); letter-spacing: 1px; color: #161c25;
}
.ly-inkrail-r .main .sec-title::after { content: ""; flex: 1; height: 1px; background: #e0e5ec; }
.ly-inkrail-r .main .sec-title span { color: var(--accent); }

/* 23. 雾栏 mist-l —— 左浅灰栏 */
.ly-mist-l .side { width: 62mm; flex: none; background: #f2f5f9; color: #37415a; }
.ly-mist-l .side .avatar { border: 2.5px solid #fff; box-shadow: 0 1px 4px rgba(20, 30, 50, .12); }
.ly-mist-l .side .avatar-ph { background: var(--tint2); color: var(--accent); }
.ly-mist-l .side .name { color: #17203a; }
.ly-mist-l .side .job { color: var(--accent); font-weight: 600; }
.ly-mist-l .side .sec-title { color: #17203a; padding-bottom: calc(4px * var(--gap)); border-bottom: 1px solid #dde4ee; }
.ly-mist-l .side .sec-title span { color: var(--accent); }
.ly-mist-l .main .sec-title {
  font-size: calc(14px * var(--fs)); color: #17202a;
}
.ly-mist-l .main .sec-title span { border-bottom: 2.5px solid var(--accent); padding-bottom: 2px; }

/* 24. 岚栏 mist-r —— 右浅调栏 */
.ly-mist-r .side { width: 62mm; flex: none; order: 2; background: var(--tint); color: #333f52; }
.ly-mist-r .side .avatar { border: 2.5px solid #fff; box-shadow: 0 1px 4px rgba(20, 30, 50, .1); }
.ly-mist-r .side .avatar-ph { background: #fff; color: var(--accent); }
.ly-mist-r .side .name { color: #182434; }
.ly-mist-r .side .job { color: var(--accent); font-weight: 600; }
.ly-mist-r .side .sec-title { color: #182434; padding-bottom: calc(4px * var(--gap)); border-bottom: 1px solid var(--tint3); }
.ly-mist-r .main { order: 1; padding: 13mm 9mm 12mm 13mm; }
.ly-mist-r .page.pg-wide .main { padding: 13mm 15mm; }
.ly-mist-r .main .sec-title {
  font-size: calc(14px * var(--fs)); color: #17202a;
  border-left: 4px solid var(--accent); padding-left: 8px;
}

/* 25. 彩轨 accent-rail —— 左主色实底栏 */
.ly-accent-rail .side { width: 62mm; flex: none; background: var(--accent); color: rgba(255, 255, 255, .92); }
.ly-accent-rail .side .avatar { border: 2.5px solid rgba(255, 255, 255, .55); }
.ly-accent-rail .side :where(.name, .sec-title, .skill-name, .entry-title) { color: #fff; }
.ly-accent-rail .side :where(.job, .contact-line, .skill-desc, .entry-sub, .entry-time) { color: rgba(255, 255, 255, .78); }
.ly-accent-rail .side .sec-title { padding-bottom: calc(4px * var(--gap)); border-bottom: 1px solid rgba(255, 255, 255, .35); }
.ly-accent-rail .side .skill-level { color: #fff; border-color: rgba(255, 255, 255, .6); }
.ly-accent-rail .side .entry-list li::before { background: #fff; }
.ly-accent-rail .main .sec-title {
  font-size: calc(14px * var(--fs)); letter-spacing: 1px; color: #1c1530;
  padding-bottom: calc(4px * var(--gap)); border-bottom: 1.5px solid var(--tint2);
}
.ly-accent-rail .main .sec-title span { color: var(--accent); }

/* 26. 缝线 rail-line —— 无底色、中间发丝竖线 */
.ly-rail-line .side { width: 56mm; flex: none; border-right: 1px solid #e6d9de; }
.ly-rail-line .side .name { text-align: left; font-size: calc(19px * var(--fs)); color: #26121a; }
.ly-rail-line .side .job { text-align: left; color: var(--accent); font-weight: 600; }
.ly-rail-line .side .sec-title {
  font-size: calc(11.5px * var(--fs)); letter-spacing: 3px; color: #9f1239;
  text-transform: uppercase;
}
.ly-rail-line .side .sec-title span { color: inherit; }
.ly-rail-line .main .sec-title {
  font-size: calc(11.5px * var(--fs)); letter-spacing: 3px; color: #9f1239; text-transform: uppercase;
}
.ly-rail-line .main .sec-title span { color: inherit; }
.ly-rail-line .main .sec-body { margin-top: calc(8px * var(--gap)); }

/* 27. 影壁 rail-photo —— 左栏方形照片置顶 */
.ly-rail-photo .side { width: 64mm; flex: none; background: #1c2b22; }
.ly-rail-photo .side .avatar-sq {
  width: calc(100% + 14mm); height: 62mm; max-width: none;
  margin: 0 -7mm calc(10px * var(--gap));
  border-radius: 0; object-fit: cover; display: block;
}
.ly-rail-photo .side .avatar-sq.avatar-ph {
  display: flex; align-items: center; justify-content: center;
  background: rgba(255, 255, 255, .1); color: #fff; font-size: calc(34px * var(--fs));
}
.ly-rail-photo .main .sec-title {
  font-size: calc(14px * var(--fs)); color: #14231a; letter-spacing: 1px;
  padding-bottom: calc(4px * var(--gap)); border-bottom: 1.5px solid var(--tint2);
}
.ly-rail-photo .main .sec-title span { color: var(--accent); }

/* 28. 量表 rail-skillbar —— 左深栏 + 技能进度条 */
.ly-rail-skillbar .side { width: 64mm; flex: none; background: #1a2540; }
.ly-rail-skillbar .side .avatar { border: 2.5px solid rgba(255, 255, 255, .3); }
.ly-rail-skillbar .skill-bar {
  height: 4px; border-radius: 99px; overflow: hidden;
  background: rgba(255, 255, 255, .16); margin-top: 4px;
}
.ly-rail-skillbar .skill-bar i {
  display: block; height: 100%; border-radius: 99px;
  background: linear-gradient(90deg, var(--tint3), #fff);
}
.ly-rail-skillbar .side .skill-desc { margin-top: 2px; }
.ly-rail-skillbar .main .sec-title {
  font-size: calc(14px * var(--fs)); color: #101a30;
  padding-bottom: calc(4px * var(--gap)); border-bottom: 1.5px solid var(--tint2);
}
.ly-rail-skillbar .main .sec-title span { color: var(--accent); }

/* 29. 淡泊 rail-minimal —— 左栏无底色细线 */
.ly-rail-minimal .side { width: 54mm; flex: none; border-right: .75px solid #e8ecf1; }
.ly-rail-minimal .side .name { text-align: left; font-size: calc(18px * var(--fs)); color: #333; font-weight: 600; }
.ly-rail-minimal .side .job { text-align: left; color: #888; }
.ly-rail-minimal .side .sec-title {
  font-size: calc(10.5px * var(--fs)); letter-spacing: 3px; color: #999; text-transform: uppercase;
}
.ly-rail-minimal .side .sec-title span { color: inherit; }
.ly-rail-minimal .main .sec-title {
  font-size: calc(10.5px * var(--fs)); letter-spacing: 3px; color: #999; text-transform: uppercase;
}
.ly-rail-minimal .main .sec-title span { color: inherit; }
.ly-rail-minimal .main .entry + .entry { border-top: .75px solid #eef1f5; padding-top: calc(9px * var(--gap)); }

/* 30. 并重 rail-wide —— 45% 宽浅栏 */
.ly-rail-wide .side { width: 84mm; flex: none; background: var(--tint); color: #3a332a; }
.ly-rail-wide .side .avatar { border: 2.5px solid #fff; box-shadow: 0 1px 4px rgba(60, 40, 20, .15); }
.ly-rail-wide .side .avatar-ph { background: #fff; color: var(--accent); }
.ly-rail-wide .side .name { color: #2b2114; }
.ly-rail-wide .side .job { color: var(--accent); font-weight: 600; }
.ly-rail-wide .side .sec-title { color: #2b2114; padding-bottom: calc(4px * var(--gap)); border-bottom: 1px solid var(--tint3); }
.ly-rail-wide .main .sec-title {
  font-size: calc(14px * var(--fs)); color: #2b2114;
  padding-bottom: calc(4px * var(--gap)); border-bottom: 1.5px solid var(--tint2);
}
.ly-rail-wide .main .sec-title span { color: var(--accent); }

/* 31. 双锦 rail-compact —— 双栏高密度 */
.ly-rail-compact { font-size: calc(12.8px * var(--fs)); }
.ly-rail-compact .side { width: 58mm; flex: none; background: #f4f7f6; color: #2e3d38; }
.ly-rail-compact .side .avatar { width: 22mm; height: 22mm; border: 2px solid #fff; }
.ly-rail-compact .side .avatar-ph { background: var(--tint2); color: var(--accent); }
.ly-rail-compact .side .name { font-size: calc(17px * var(--fs)); color: #152019; }
.ly-rail-compact .side .job { color: var(--accent); font-weight: 600; }
.ly-rail-compact .side .sec { margin-top: calc(9px * var(--gap)); }
.ly-rail-compact .side .sec-title { font-size: calc(11.5px * var(--fs)); color: #152019; border-bottom: 1px solid #d8e2de; padding-bottom: 3px; }
.ly-rail-compact .main { padding: 11mm 11mm 10mm 8mm; }
.ly-rail-compact .page.pg-wide .main { padding: 11mm 13mm; }
.ly-rail-compact .main .sec { margin-top: calc(8px * var(--gap)); }
.ly-rail-compact .main .sec-title {
  display: inline-block; background: var(--accent); color: #fff;
  font-size: calc(11px * var(--fs)); letter-spacing: 2px; padding: 2px 9px; border-radius: 2px;
}
.ly-rail-compact .main .entry { margin-top: calc(6px * var(--gap)); }
.ly-rail-compact .entry-list li { line-height: calc(1.5 * var(--lhv)); }

/* 32. 兰台 rail-serif —— 双栏衬线 */
.ly-rail-serif {
  font-family: Georgia, "Times New Roman", "Songti SC", "SimSun", serif;
}
.ly-rail-serif .side { width: 60mm; flex: none; background: #faf6ec; color: #4a4234; }
.ly-rail-serif .side .avatar { border: 2px solid #fff; box-shadow: 0 1px 4px rgba(80, 60, 20, .15); }
.ly-rail-serif .side .avatar-ph { background: var(--tint2); color: var(--accent); }
.ly-rail-serif .side .name { color: #33291a; }
.ly-rail-serif .side .job { color: var(--accent); font-style: italic; }
.ly-rail-serif .side .sec-title { color: #33291a; letter-spacing: 3px; border-bottom: .75px solid #ddd2b8; padding-bottom: 3px; }
.ly-rail-serif .main .sec-title {
  font-size: calc(15px * var(--fs)); letter-spacing: 3px; color: #33291a;
  padding-bottom: calc(3px * var(--gap)); border-bottom: .75px solid #ddd2b8;
}
.ly-rail-serif .main .sec-title span { color: var(--accent); }
.ly-rail-serif .entry-time { font-style: italic; }

/* 33. 琳琅 rail-chips —— 左浅栏技能胶囊 */
.ly-rail-chips .side { width: 62mm; flex: none; background: var(--tint); color: #43331f; }
.ly-rail-chips .side .avatar { border: 2.5px solid #fff; box-shadow: 0 1px 4px rgba(90, 40, 10, .15); }
.ly-rail-chips .side .avatar-ph { background: #fff; color: var(--accent); }
.ly-rail-chips .side .name { color: #2e1f0e; }
.ly-rail-chips .side .job { color: var(--accent); font-weight: 600; }
.ly-rail-chips .side .sec-title { color: #2e1f0e; padding-bottom: calc(4px * var(--gap)); border-bottom: 1px solid var(--tint3); }
.ly-rail-chips .chip-cloud { display: flex; flex-wrap: wrap; gap: 6px; }
.ly-rail-chips .chip {
  display: inline-flex; align-items: baseline; gap: 5px;
  background: #fff; border: 1px solid var(--tint3); border-radius: 99px;
  padding: calc(2px * var(--gap)) 10px;
  font-size: calc(11.5px * var(--fs)); color: #3a2c15;
}
.ly-rail-chips .chip em { font-style: normal; font-size: calc(10px * var(--fs)); color: var(--accent); font-weight: 700; }
.ly-rail-chips .main .sec-title {
  font-size: calc(14px * var(--fs)); color: #2e1f0e;
}
.ly-rail-chips .main .sec-title span { border-bottom: 2.5px solid var(--accent); padding-bottom: 2px; }

/* 34. 双序 rail-num —— 左深栏 + 主栏编号标题 */
.ly-rail-num .side { width: 62mm; flex: none; background: #23272f; }
.ly-rail-num .side .avatar { border-radius: 12px; border: 2.5px solid rgba(255, 255, 255, .25); }
.ly-rail-num .main { counter-reset: secn; }
.ly-rail-num .main .sec-title {
  font-size: calc(14px * var(--fs)); color: #161a20; letter-spacing: 1px;
  padding-bottom: calc(4px * var(--gap)); border-bottom: 1px solid #e3e6eb;
}
.ly-rail-num .main .sec-title span::before {
  counter-increment: secn; content: counter(secn, decimal-leading-zero) " / ";
  color: var(--accent); font-weight: 800; font-variant-numeric: tabular-nums;
}

/* ============================================================
 * 色带组（.banner 只留第 1 页；续页 .body 自动补 13mm 顶距）
 * ============================================================ */

/* 色带通用续页补距 */
.ly-band-dark .page.pg-cont .body, .ly-band-photo .page.pg-cont .body,
.ly-band-light .page.pg-cont .body, .ly-band-grad .page.pg-cont .body,
.ly-band-diag .page.pg-cont .body, .ly-band-card .page.pg-cont .body,
.ly-band-cols .page.pg-cont .body, .ly-band-grad-cols .page.pg-cont .body,
.ly-band-skillbars .page.pg-cont .body, .ly-band-serif .page.pg-cont .body { padding-top: 13mm; }

/* 深色带通用文字 */
.ly-band-dark .banner, .ly-band-photo .banner, .ly-band-grad .banner,
.ly-band-diag .banner, .ly-band-card .banner, .ly-band-cols .banner,
.ly-band-grad-cols .banner, .ly-band-skillbars .banner, .ly-band-serif .banner { color: #fff; }
.ly-band-dark .banner :where(.contact-line), .ly-band-photo .banner :where(.contact-line),
.ly-band-grad .banner :where(.contact-line), .ly-band-diag .banner :where(.contact-line),
.ly-band-card .banner :where(.contact-line), .ly-band-cols .banner :where(.contact-line),
.ly-band-grad-cols .banner :where(.contact-line), .ly-band-skillbars .banner :where(.contact-line),
.ly-band-serif .banner :where(.contact-line) { color: rgba(255, 255, 255, .82); }
.ly-band-dark .banner .job, .ly-band-photo .banner .job, .ly-band-grad .banner .job,
.ly-band-diag .banner .job, .ly-band-card .banner .job, .ly-band-cols .banner .job,
.ly-band-grad-cols .banner .job, .ly-band-skillbars .banner .job,
.ly-band-serif .banner .job { color: rgba(255, 255, 255, .88); }

/* 35. 曜带 band-dark —— 深色通栏居中 */
.ly-band-dark .banner { padding: 13mm 16mm 10mm; background: #23272f; text-align: center; }
.ly-band-dark .banner .avatar {
  width: 22mm; height: 22mm; border-radius: 50%; object-fit: cover;
  margin: 0 auto calc(7px * var(--gap)); border: 2.5px solid rgba(255, 255, 255, .4);
}
.ly-band-dark .banner .avatar-ph {
  display: flex; align-items: center; justify-content: center;
  background: rgba(255, 255, 255, .14); color: #fff; font-size: calc(22px * var(--fs)); font-weight: 700;
}
.ly-band-dark .banner .name { font-size: calc(26px * var(--fs)); letter-spacing: 3px; }
.ly-band-dark .banner .job { margin-top: 3px; font-size: calc(12.5px * var(--fs)); letter-spacing: 2px; }
.ly-band-dark .banner .contact-line { justify-content: center; margin-top: calc(7px * var(--gap)); }
.ly-band-dark .body { flex: 1; padding: 9mm 16mm 12mm; }
.ly-band-dark .sec-title {
  font-size: calc(14px * var(--fs)); color: #161a20;
  padding-bottom: calc(4px * var(--gap)); border-bottom: 1.5px solid #e3e6eb;
}
.ly-band-dark .sec-title span { color: var(--accent); }
.ly-band-dark .summary { margin-top: 0; margin-bottom: calc(4px * var(--gap)); }

/* 36. 映带 band-photo —— 深色通栏左文右照 */
.ly-band-photo .banner {
  padding: 12mm 16mm 10mm; background: #20344d;
  display: flex; align-items: center; gap: 16px;
}
.ly-band-photo .band-id { flex: 1; min-width: 0; }
.ly-band-photo .banner .name { font-size: calc(26px * var(--fs)); }
.ly-band-photo .banner .job { margin-top: 3px; font-size: calc(13px * var(--fs)); }
.ly-band-photo .banner .contact-line { margin-top: calc(7px * var(--gap)); }
.ly-band-photo .banner .avatar {
  width: 24mm; height: 24mm; border-radius: 50%; object-fit: cover; flex: none;
  border: 3px solid rgba(255, 255, 255, .35);
}
.ly-band-photo .banner .avatar-ph {
  display: flex; align-items: center; justify-content: center;
  background: rgba(255, 255, 255, .14); color: #fff; font-size: calc(22px * var(--fs)); font-weight: 700;
}
.ly-band-photo .body { flex: 1; padding: 9mm 16mm 12mm; }
.ly-band-photo .sec-title {
  font-size: calc(14px * var(--fs)); color: #17202a;
  border-left: 4px solid var(--accent); padding-left: 8px;
}

/* 37. 云带 band-light —— 浅色通栏深字 */
.ly-band-light .banner {
  padding: 12mm 16mm 10mm; background: var(--tint);
  display: flex; align-items: center; gap: 16px;
}
.ly-band-light .band-id { flex: 1; min-width: 0; }
.ly-band-light .banner .name { font-size: calc(26px * var(--fs)); color: #152038; }
.ly-band-light .banner .job { margin-top: 3px; font-size: calc(13px * var(--fs)); color: var(--accent); font-weight: 600; }
.ly-band-light .banner .contact-line { margin-top: calc(7px * var(--gap)); color: #4a5872; }
.ly-band-light .banner .avatar {
  width: 24mm; height: 24mm; border-radius: 50%; object-fit: cover; flex: none;
  border: 3px solid #fff; box-shadow: 0 1px 5px rgba(20, 40, 80, .18);
}
.ly-band-light .banner .avatar-ph {
  display: flex; align-items: center; justify-content: center;
  background: #fff; color: var(--accent); font-size: calc(22px * var(--fs)); font-weight: 700;
}
.ly-band-light .body { flex: 1; padding: 9mm 16mm 12mm; }
.ly-band-light .sec-title {
  font-size: calc(14px * var(--fs)); color: #152038;
}
.ly-band-light .sec-title span { border-bottom: 2.5px solid var(--accent); padding-bottom: 2px; }

/* 38. 霓带 band-grad —— 渐变通栏居中 */
.ly-band-grad .banner {
  padding: 13mm 16mm 10mm; text-align: center;
  background: linear-gradient(125deg, var(--accent), color-mix(in srgb, var(--accent) 45%, #101828));
}
.ly-band-grad .banner .avatar {
  width: 22mm; height: 22mm; border-radius: 50%; object-fit: cover;
  margin: 0 auto calc(7px * var(--gap)); border: 2.5px solid rgba(255, 255, 255, .55);
}
.ly-band-grad .banner .avatar-ph {
  display: flex; align-items: center; justify-content: center;
  background: rgba(255, 255, 255, .18); color: #fff; font-size: calc(22px * var(--fs)); font-weight: 700;
}
.ly-band-grad .banner .name { font-size: calc(26px * var(--fs)); letter-spacing: 3px; }
.ly-band-grad .banner .job { margin-top: 3px; font-size: calc(12.5px * var(--fs)); letter-spacing: 2px; }
.ly-band-grad .banner .contact-line { justify-content: center; margin-top: calc(7px * var(--gap)); }
.ly-band-grad .body { flex: 1; padding: 9mm 16mm 12mm; }
.ly-band-grad .sec-title { font-size: calc(14px * var(--fs)); color: #1c1530; }
.ly-band-grad .sec-title span {
  padding-bottom: 4px;
  background: linear-gradient(90deg, var(--accent), transparent) left bottom / 100% 2px no-repeat;
}

/* 39. 斜带 band-diag —— 斜切下缘通栏 */
.ly-band-diag .banner {
  padding: 12mm 16mm 15mm; background: #0d3b36;
  display: flex; align-items: center; gap: 16px;
  clip-path: polygon(0 0, 100% 0, 100% calc(100% - 7mm), 0 100%);
}
.ly-band-diag .band-id { flex: 1; min-width: 0; }
.ly-band-diag .banner .name { font-size: calc(26px * var(--fs)); letter-spacing: 1px; }
.ly-band-diag .banner .job { margin-top: 3px; font-size: calc(13px * var(--fs)); }
.ly-band-diag .banner .contact-line { margin-top: calc(7px * var(--gap)); }
.ly-band-diag .banner .avatar {
  width: 24mm; height: 24mm; border-radius: 50%; object-fit: cover; flex: none;
  border: 3px solid rgba(255, 255, 255, .4);
}
.ly-band-diag .banner .avatar-ph {
  display: flex; align-items: center; justify-content: center;
  background: rgba(255, 255, 255, .14); color: #fff; font-size: calc(22px * var(--fs)); font-weight: 700;
}
.ly-band-diag .body { flex: 1; padding: 7mm 16mm 12mm; }
.ly-band-diag .sec-title {
  font-size: calc(14px * var(--fs)); color: #0d3b36;
  padding-bottom: calc(4px * var(--gap)); border-bottom: 1.5px solid var(--tint2);
}
.ly-band-diag .sec-title span { color: var(--accent); }

/* 40. 帛卡 band-card —— 圆角色带卡片（不通栏） */
.ly-band-card .page { padding: 10mm 12mm 12mm; }
.ly-band-card .banner {
  border-radius: 12px; padding: 10mm 12mm 8mm;
  background: linear-gradient(135deg, var(--accent), color-mix(in srgb, var(--accent) 55%, #1a0a12));
  display: flex; align-items: center; gap: 16px;
}
.ly-band-card .band-id { flex: 1; min-width: 0; }
.ly-band-card .banner .name { font-size: calc(25px * var(--fs)); }
.ly-band-card .banner .job { margin-top: 3px; font-size: calc(12.5px * var(--fs)); }
.ly-band-card .banner .contact-line { margin-top: calc(7px * var(--gap)); }
.ly-band-card .banner .avatar {
  width: 23mm; height: 23mm; border-radius: 12px; object-fit: cover; flex: none;
  border: 2.5px solid rgba(255, 255, 255, .5);
}
.ly-band-card .banner .avatar-ph {
  display: flex; align-items: center; justify-content: center;
  background: rgba(255, 255, 255, .18); color: #fff; font-size: calc(21px * var(--fs)); font-weight: 700;
}
.ly-band-card .body { flex: 1; padding: 8mm 4mm 0; }
.ly-band-card .sec-title { font-size: calc(14px * var(--fs)); color: #26121a; display: flex; align-items: center; gap: 8px; }
.ly-band-card .sec-title::before { content: ""; width: 7px; height: 7px; border-radius: 2px; background: var(--accent); flex: none; }

/* 41. 垂带 band-cols —— 深色通栏 + 下双栏 */
.ly-band-cols .banner { padding: 12mm 16mm 9mm; background: #20344d; text-align: center; }
.ly-band-cols .banner .avatar {
  width: 20mm; height: 20mm; border-radius: 50%; object-fit: cover;
  margin: 0 auto calc(6px * var(--gap)); border: 2.5px solid rgba(255, 255, 255, .4);
}
.ly-band-cols .banner .avatar-ph {
  display: flex; align-items: center; justify-content: center;
  background: rgba(255, 255, 255, .14); color: #fff; font-size: calc(20px * var(--fs)); font-weight: 700;
}
.ly-band-cols .banner .name { font-size: calc(24px * var(--fs)); letter-spacing: 2px; }
.ly-band-cols .banner .job { margin-top: 2px; font-size: calc(12px * var(--fs)); letter-spacing: 2px; }
.ly-band-cols .banner .contact-line { justify-content: center; margin-top: calc(6px * var(--gap)); }
.ly-band-cols .body { flex: 1; display: flex; align-items: stretch; }
.ly-band-cols .col-main { flex: 1; min-width: 0; padding: 9mm 6mm 12mm 16mm; }
.ly-band-cols .col-side { width: 62mm; flex: none; padding: 9mm 16mm 12mm 6mm; background: #f4f6fa; }
.ly-band-cols .page.pg-wide .col-main { padding-right: 16mm; }
.ly-band-cols .col-main .sec-title {
  font-size: calc(14px * var(--fs)); color: #17202a;
  padding-bottom: calc(4px * var(--gap)); border-bottom: 1.5px solid var(--tint2);
}
.ly-band-cols .col-main .sec-title span { color: var(--accent); }
.ly-band-cols .col-side .sec-title { font-size: calc(12.5px * var(--fs)); letter-spacing: 2px; color: #17203a; }
.ly-band-cols .col-side .sec-title span { color: var(--accent); }

/* 42. 霞带 band-grad-cols —— 渐变通栏 + 下双栏 */
.ly-band-grad-cols .banner {
  padding: 12mm 16mm 9mm;
  background: linear-gradient(120deg, var(--accent), color-mix(in srgb, var(--accent) 40%, #2b0a05));
  display: flex; align-items: center; gap: 16px;
}
.ly-band-grad-cols .band-id { flex: 1; min-width: 0; }
.ly-band-grad-cols .banner .name { font-size: calc(25px * var(--fs)); }
.ly-band-grad-cols .banner .job { margin-top: 3px; font-size: calc(12.5px * var(--fs)); }
.ly-band-grad-cols .banner .contact-line { margin-top: calc(6px * var(--gap)); }
.ly-band-grad-cols .banner .avatar {
  width: 22mm; height: 22mm; border-radius: 50%; object-fit: cover; flex: none;
  border: 2.5px solid rgba(255, 255, 255, .55);
}
.ly-band-grad-cols .banner .avatar-ph {
  display: flex; align-items: center; justify-content: center;
  background: rgba(255, 255, 255, .18); color: #fff; font-size: calc(20px * var(--fs)); font-weight: 700;
}
.ly-band-grad-cols .body { flex: 1; display: flex; align-items: stretch; }
.ly-band-grad-cols .col-main { flex: 1; min-width: 0; padding: 9mm 6mm 12mm 16mm; }
.ly-band-grad-cols .col-side {
  width: 62mm; flex: none; padding: 9mm 16mm 12mm 8mm;
  border-left: 1px solid var(--tint2);
}
.ly-band-grad-cols .page.pg-wide .col-main { padding-right: 16mm; }
.ly-band-grad-cols .col-main .sec-title { font-size: calc(14px * var(--fs)); color: #26130a; }
.ly-band-grad-cols .col-main .sec-title span { border-bottom: 2.5px solid var(--accent); padding-bottom: 2px; }
.ly-band-grad-cols .col-side .sec-title { font-size: calc(12.5px * var(--fs)); letter-spacing: 2px; color: #26130a; }
.ly-band-grad-cols .col-side .sec-title span { color: var(--accent); }

/* 43. 虹表 band-skillbars —— 色带 + 右栏进度条 */
.ly-band-skillbars .banner { padding: 12mm 16mm 9mm; background: #0d3b36; text-align: center; }
.ly-band-skillbars .banner .avatar {
  width: 20mm; height: 20mm; border-radius: 50%; object-fit: cover;
  margin: 0 auto calc(6px * var(--gap)); border: 2.5px solid rgba(255, 255, 255, .4);
}
.ly-band-skillbars .banner .avatar-ph {
  display: flex; align-items: center; justify-content: center;
  background: rgba(255, 255, 255, .14); color: #fff; font-size: calc(20px * var(--fs)); font-weight: 700;
}
.ly-band-skillbars .banner .name { font-size: calc(24px * var(--fs)); letter-spacing: 2px; }
.ly-band-skillbars .banner .job { margin-top: 2px; font-size: calc(12px * var(--fs)); letter-spacing: 2px; }
.ly-band-skillbars .banner .contact-line { justify-content: center; margin-top: calc(6px * var(--gap)); }
.ly-band-skillbars .body { flex: 1; display: flex; align-items: stretch; }
.ly-band-skillbars .col-main { flex: 1; min-width: 0; padding: 9mm 6mm 12mm 16mm; }
.ly-band-skillbars .col-side { width: 64mm; flex: none; padding: 9mm 16mm 12mm 8mm; background: var(--tint); }
.ly-band-skillbars .page.pg-wide .col-main { padding-right: 16mm; }
.ly-band-skillbars .col-main .sec-title {
  font-size: calc(14px * var(--fs)); color: #0d3b36;
  padding-bottom: calc(4px * var(--gap)); border-bottom: 1.5px solid var(--tint2);
}
.ly-band-skillbars .col-main .sec-title span { color: var(--accent); }
.ly-band-skillbars .col-side .sec-title { font-size: calc(12.5px * var(--fs)); letter-spacing: 2px; color: #0d3b36; }
.ly-band-skillbars .skill-bar {
  height: 4px; border-radius: 99px; overflow: hidden;
  background: #dde7e4; margin-top: 4px;
}
.ly-band-skillbars .skill-bar i {
  display: block; height: 100%; border-radius: 99px;
  background: linear-gradient(90deg, var(--accent), color-mix(in srgb, var(--accent) 55%, #fff));
}

/* 44. 锦缎 band-serif —— 深色通栏衬线 */
.ly-band-serif { font-family: Georgia, "Times New Roman", "Songti SC", "SimSun", serif; }
.ly-band-serif .banner { padding: 14mm 18mm 11mm; background: #2b2114; text-align: center; }
.ly-band-serif .banner .name { font-size: calc(27px * var(--fs)); letter-spacing: 6px; }
.ly-band-serif .banner .job { margin-top: 4px; font-size: calc(13px * var(--fs)); font-style: italic; letter-spacing: 2px; }
.ly-band-serif .banner .contact-line { justify-content: center; margin-top: calc(8px * var(--gap)); }
.ly-band-serif .body { flex: 1; padding: 10mm 18mm 13mm; }
.ly-band-serif .summary { text-align: justify; }
.ly-band-serif .sec-title {
  text-align: center; font-size: calc(13.5px * var(--fs)); letter-spacing: 4px; color: #2b2114;
  border-top: 1px solid #d8cdb8; border-bottom: 1px solid #d8cdb8;
  padding: calc(3px * var(--gap)) 0;
}
.ly-band-serif .entry-time { font-style: italic; }

/* ============================================================
 * 特色结构组
 * ============================================================ */

/* 45. 分镜 split-col —— 板块标题固定左栏 */
.ly-split-col .page { padding: 15mm 16mm 12mm; }
.ly-split-col .name { font-size: calc(26px * var(--fs)); color: #14213a; }
.ly-split-col .job { margin-top: 3px; font-size: calc(13px * var(--fs)); color: var(--accent); font-weight: 600; }
.ly-split-col .contact-line { margin-top: calc(7px * var(--gap)); }
.ly-split-col .doc-header { padding-bottom: calc(10px * var(--gap)); border-bottom: 1.5px solid #d9e2ef; }
.ly-split-col .summary { margin-top: calc(11px * var(--gap)); }
.ly-split-col .sec {
  display: grid; grid-template-columns: 34mm 1fr; column-gap: 8mm;
  margin-top: calc(14px * var(--gap));
}
.ly-split-col .sec-title {
  grid-column: 1; grid-row: 1; align-self: start;
  font-size: calc(12.5px * var(--fs)); letter-spacing: 2px; color: var(--accent);
}
.ly-split-col .sec-body { grid-column: 2; grid-row: 1; margin-top: 0; }
.ly-split-col.pg-frag .sec-body,
.ly-split-col .pg-frag.sec .sec-body { grid-column: 2; }

/* 46. 界尺 split-line —— 标题左栏 + 分隔竖线 */
.ly-split-line .page { padding: 15mm 16mm 12mm; }
.ly-split-line .name { font-size: calc(26px * var(--fs)); color: #14231a; }
.ly-split-line .job { margin-top: 3px; font-size: calc(13px * var(--fs)); color: var(--accent); font-weight: 600; }
.ly-split-line .contact-line { margin-top: calc(7px * var(--gap)); }
.ly-split-line .doc-header { padding-bottom: calc(10px * var(--gap)); border-bottom: 1.5px solid #dde8df; }
.ly-split-line .summary { margin-top: calc(11px * var(--gap)); }
.ly-split-line .sec {
  display: grid; grid-template-columns: 34mm 1fr; column-gap: 8mm;
  margin-top: calc(14px * var(--gap));
}
.ly-split-line .sec-title {
  grid-column: 1; grid-row: 1; align-self: start;
  font-size: calc(12.5px * var(--fs)); letter-spacing: 2px; color: #14231a;
  border-right: 1.5px solid var(--tint3); padding-right: 6mm;
}
.ly-split-line .sec-title span { color: var(--accent); }
.ly-split-line .sec-body { grid-column: 2; grid-row: 1; margin-top: 0; }

/* 47. 卡组 cards —— 卡片页眉 + 板块白卡 */
.ly-cards .page { padding: 12mm 13mm; background: #f2f4f8; }
.ly-cards .head-box {
  background: #fff; border-radius: 10px;
  padding: calc(14px * var(--gap)) calc(18px * var(--gap));
  box-shadow: 0 1px 3px rgba(16, 24, 40, .08);
}
.ly-cards .name { font-size: calc(25px * var(--fs)); color: #1c130a; }
.ly-cards .job { margin-top: 3px; font-size: calc(13px * var(--fs)); color: var(--accent); font-weight: 600; }
.ly-cards .contact-line { margin-top: calc(7px * var(--gap)); }
.ly-cards .summary {
  margin-top: calc(10px * var(--gap));
  background: #fff; border-radius: 10px; padding: calc(10px * var(--gap)) calc(14px * var(--gap));
  box-shadow: 0 1px 3px rgba(16, 24, 40, .08);
}
.ly-cards .sec {
  margin-top: calc(10px * var(--gap));
  background: #fff; border-radius: 10px;
  padding: calc(10px * var(--gap)) calc(14px * var(--gap)) calc(12px * var(--gap));
  box-shadow: 0 1px 3px rgba(16, 24, 40, .08);
}
.ly-cards .sec-title { font-size: calc(14px * var(--fs)); color: var(--accent); letter-spacing: 1px; }

/* 48. 浅盏 cards-tint —— 板块浅调色卡片 */
.ly-cards-tint .page { padding: 13mm 14mm 11mm; }
.ly-cards-tint .name { font-size: calc(26px * var(--fs)); color: #0f2420; }
.ly-cards-tint .job { margin-top: 3px; font-size: calc(13px * var(--fs)); color: var(--accent); font-weight: 600; }
.ly-cards-tint .contact-line { margin-top: calc(7px * var(--gap)); }
.ly-cards-tint .doc-header { padding-bottom: calc(10px * var(--gap)); border-bottom: 1.5px solid var(--tint2); }
.ly-cards-tint .summary { margin-top: calc(11px * var(--gap)); }
.ly-cards-tint .sec {
  margin-top: calc(10px * var(--gap));
  background: var(--tint); border-radius: 8px;
  padding: calc(9px * var(--gap)) calc(13px * var(--gap)) calc(11px * var(--gap));
}
.ly-cards-tint .sec-title { font-size: calc(13.5px * var(--fs)); letter-spacing: 1px; color: #0f2420; }
.ly-cards-tint .sec-title span { color: var(--accent); }

/* 49. 装池 frame —— 整页双线外框、古典居中 */
.ly-frame { font-family: Georgia, "Times New Roman", "Songti SC", "SimSun", serif; }
.ly-frame .page { padding: 13mm 14mm 11mm; }
.ly-frame .page::before {
  content: ""; position: absolute; inset: 4.5mm;
  border: 3px double color-mix(in srgb, var(--accent) 65%, #fff);
  pointer-events: none;
}
.ly-frame .doc-header { text-align: center; padding: 2mm 6mm 0; }
.ly-frame .name { font-size: calc(26px * var(--fs)); letter-spacing: 8px; text-indent: 8px; color: #2b2114; }
.ly-frame .job { margin-top: 4px; font-size: calc(12.5px * var(--fs)); font-style: italic; letter-spacing: 3px; color: var(--accent); }
.ly-frame .contact-line { justify-content: center; margin-top: calc(8px * var(--gap)); }
.ly-frame .summary { margin-top: calc(12px * var(--gap)); text-align: center; }
.ly-frame .sec { margin: calc(13px * var(--gap)) 4mm 0; }
.ly-frame .sec-title {
  text-align: center; font-size: calc(13px * var(--fs)); letter-spacing: 5px; color: #2b2114;
}
.ly-frame .sec-title span { color: var(--accent); border-bottom: 1px solid var(--tint3); padding-bottom: 2px; }
.ly-frame .entry-time { font-style: italic; }

/* 50. 格窗 gridhead —— 页眉下信息网格 */
.ly-gridhead .name { font-size: calc(26px * var(--fs)); color: #101c33; }
.ly-gridhead .job { margin-top: 3px; font-size: calc(13px * var(--fs)); color: var(--accent); font-weight: 600; }
.ly-gridhead .g-grid {
  display: grid; grid-template-columns: repeat(3, 1fr);
  gap: 6px; margin-top: calc(10px * var(--gap));
}
.ly-gridhead .g-cell {
  display: flex; align-items: center; gap: 5px; min-width: 0;
  background: var(--tint); border-radius: 6px;
  padding: calc(6px * var(--gap)) 9px;
  font-size: calc(11.5px * var(--fs)); color: #33415e;
}
.ly-gridhead .g-cell span { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.ly-gridhead .doc-header { padding-bottom: calc(10px * var(--gap)); border-bottom: 1px solid #dfe6f2; }
.ly-gridhead .summary { margin-top: calc(11px * var(--gap)); }
.ly-gridhead .sec-title {
  font-size: calc(14px * var(--fs)); color: #101c33;
  display: flex; align-items: center; gap: 8px;
}
.ly-gridhead .sec-title::before {
  content: ""; width: 7px; height: 7px; background: var(--accent); flex: none;
}

/* ============================================================
 * 打印：与原 6 套共用 @page 与 .page 高度规则（templates.css），
 * 这里只补色带/深栏的打印底色
 * ============================================================ */
@media print {
  .ly-inkrail .side, .ly-inkrail-r .side, .ly-rail-photo .side,
  .ly-rail-skillbar .side, .ly-rail-num .side, .ly-accent-rail .side,
  .ly-band-dark .banner, .ly-band-photo .banner, .ly-band-grad .banner,
  .ly-band-diag .banner, .ly-band-card .banner, .ly-band-cols .banner,
  .ly-band-grad-cols .banner, .ly-band-skillbars .banner, .ly-band-serif .banner {
    -webkit-print-color-adjust: exact;
    print-color-adjust: exact;
  }
}
