/* ============================================================
   星使少年学者计划 — 学术期刊 × 前沿实验室
   Palette: warm white / academic navy / collegiate crimson / collegiate gold
   由原 index.html 内联样式迁移而来，视觉保持一致。
   ============================================================ */
:root{
  --paper:#FBFAF7;
  --paper-dim:#F1EEE8;
  --ink:#16243D;
  --ink-soft:rgba(22,36,61,.68);
  --ink-faint:rgba(22,36,61,.15);
  --navy:#16243D;
  --navy-2:#1E3050;
  --crimson:#9B2335;
  --gold:#C8A548;
  --gold-dim:rgba(200,165,72,.55);
  --gold-deep:#A9873A;                          /* 手写批注 / 便签编号等深金 */
  --card:#FEFDF8;                               /* 手账纸面色（首屏进度面板） */
  --sticky:#F7EBC0;                             /* 便签黄：金色的淡色转译 */
  --hand:'Caveat','Zhi Mang Xing',cursive;      /* 手写数字 / 英文 + 中文行书 */
  --brush:'Ma Shan Zheng','Zhi Mang Xing',cursive;
  --ease-out:cubic-bezier(.165,.84,.44,1);
  --ease-expo:cubic-bezier(.19,1,.22,1);
  --serif:'Source Serif 4','Noto Serif SC','Songti SC','SimSun',serif;
  --body:'Lexend Deca','Noto Sans SC','PingFang SC','Microsoft YaHei',sans-serif;
  --label:'Lexend Deca','Noto Sans SC','PingFang SC',sans-serif;
  --gutter:4vw;
}
*{margin:0;padding:0;box-sizing:border-box}
html{scroll-behavior:smooth;-webkit-text-size-adjust:100%}
body{
  background:var(--paper);
  color:var(--ink);
  font-family:var(--body);
  font-size:17px;
  line-height:1.75;
  -webkit-font-smoothing:antialiased;
  /* 字形步进不做整数取整，改用字体自身的精确度量。
     macOS 本就不做 hinting 取整，而 Windows/Linux 会，两端因此出现字宽差，
     进而导致换行点、居中位置、表格列内文本错位 —— 这里统一为精确度量。 */
  text-rendering:geometricPrecision;
  overflow-x:hidden;
}
::selection{background:var(--ink);color:var(--paper)}
a{color:inherit;text-decoration:none}
img,svg{display:block}
button{font-family:inherit;cursor:pointer}

/* ---------- custom cursor ---------- */
@media (hover:hover) and (pointer:fine){
  body{cursor:none}
  a,button,input,select,textarea,summary,[data-hover]{cursor:none}
}
.cursor-dot,.cursor-ring{
  position:fixed;top:0;left:0;pointer-events:none;z-index:9999;
  border-radius:50%;transform:translate(-50%,-50%);
  mix-blend-mode:normal;
}
.cursor-dot{width:8px;height:8px;background:var(--ink)}
.cursor-ring{
  width:40px;height:40px;border:1px solid var(--ink);
  transition:width .3s var(--ease-out),height .3s var(--ease-out),background .3s,border-color .3s;
}
.cursor-ring.is-hover{width:64px;height:64px;background:rgba(22,36,61,.06)}
body.on-dark .cursor-dot{background:var(--gold)}
body.on-dark .cursor-ring{border-color:var(--gold-dim)}
body.on-dark .cursor-ring.is-hover{background:rgba(200,165,72,.08)}
@media (hover:none),(pointer:coarse){.cursor-dot,.cursor-ring{display:none}}

/* ---------- page frame ---------- */
.frame{
  border-left:1px solid var(--ink-faint);
  border-right:1px solid var(--ink-faint);
  max-width:1600px;margin:0 auto;position:relative;
}
.rule-top{border-top:1px solid var(--ink-faint)}

/* ---------- header ---------- */
.site-header{
  position:fixed;top:0;left:0;right:0;z-index:100;
  transition:background .4s var(--ease-out),backdrop-filter .4s;
}
.site-header.is-scrolled{
  background:rgba(251,250,247,.82);
  backdrop-filter:blur(12px);
  -webkit-backdrop-filter:blur(12px);
}
.header-inner{
  max-width:1600px;margin:0 auto;
  display:flex;align-items:center;justify-content:space-between;
  padding:0 var(--gutter);height:76px;
  border-bottom:1px solid var(--ink-faint);
}
.brand{display:flex;align-items:center;gap:12px}
/* LOGO 与英文标识合为一个整体（lockup）：内部紧凑，与右侧中文标题之间用更大的间距分开 */
.brand-lockup{display:flex;align-items:center;gap:9px}
/* 品牌中缝分隔圆点：位于英文标识与中文标题之间，垂直居中 */
.brand-dot{
  width:5px;height:5px;border-radius:50%;background:var(--ink-soft);
  flex:0 0 auto;
}
.brand-mark{
  font-family:var(--serif);font-weight:700;font-size:18px;letter-spacing:.02em;
  display:flex;align-items:center;gap:10px;
}
/* 品牌图标：望远镜 LOGO 尺寸固定，不参与拉伸 */
.brand-logo{height:26px;width:auto;display:block;flex:0 0 auto}
.brand-mark .star{
  width:12px;height:12px;background:var(--ink);
  clip-path:polygon(50% 0,62% 38%,100% 50%,62% 62%,50% 100%,38% 62%,0 50%,38% 38%);
  animation:spinStar 9s linear infinite;
}
@keyframes spinStar{to{transform:rotate(360deg)}}
/* 英文标识紧贴 LOGO，收紧字距、略增字重，使其读作与图标配套的字标而非独立的松散标签。
   字号取 23px：拉丁字母的大写字高只有约 0.7em，而中文字面约占 0.86em，
   故同为“看起来一样大”时拉丁字号需约为中文的 1.3 倍，此处 23 / 18 即“英文略大于中文”。 */
.brand-en{
  font-family:var(--label);font-weight:600;font-size:23px;letter-spacing:.04em;
  color:var(--ink-soft);white-space:nowrap;
}
.site-nav{display:flex;gap:38px}
.site-nav a{
  font-family:var(--label);font-weight:500;font-size:12px;letter-spacing:.1em;
  position:relative;padding:6px 0;color:var(--ink-soft);
  transition:color .3s;
}
.site-nav a::after{
  content:"";position:absolute;left:0;bottom:0;height:1px;width:0;
  background:var(--ink);transition:width .4s var(--ease-out);
}
.site-nav a:hover{color:var(--ink)}
.site-nav a:hover::after{width:100%}
.site-nav a .rn{color:var(--ink);opacity:.45;margin-right:6px;font-size:10px}
.header-cta{
  font-family:var(--label);font-weight:500;font-size:12px;letter-spacing:.11em;
  background:var(--ink);color:var(--paper);border:1px solid var(--ink);
  padding:12px 26px;transition:background .3s,color .3s;
}
.header-cta:hover{background:transparent;color:var(--ink)}
.menu-toggle{display:none;background:none;border:none;width:40px;height:40px;position:relative}
.menu-toggle span{
  position:absolute;left:8px;right:8px;height:1.5px;background:var(--ink);
  transition:transform .3s var(--ease-out),top .3s;
}
.menu-toggle span:nth-child(1){top:14px}
.menu-toggle span:nth-child(2){top:20px}
.menu-toggle span:nth-child(3){top:26px}
.menu-toggle.open span:nth-child(1){top:20px;transform:rotate(45deg)}
.menu-toggle.open span:nth-child(2){opacity:0}
.menu-toggle.open span:nth-child(3){top:20px;transform:rotate(-45deg)}

/* ---------- hero ---------- */
/* --hero-lead = eyebrow 的占位高度（行高 1.75 × 字号 + 下边距），
   用于把右栏面板整体下移，使其上沿与 H1 首行「在高中」对齐 */
.hero{
  --hero-lead:calc(12px * 1.75 + 34px);
  min-height:100vh;position:relative;
  display:grid;grid-template-columns:1.15fr .85fr;
  padding:132px var(--gutter) 0;
  gap:48px;align-items:stretch;
  /* 富余高度全部留给首屏统计条之前，两栏各自按内容高度对齐 */
  align-content:space-between;
}
/* 无眉题时右栏无需让位，面板上沿直接与 H1 对齐 */
.hero.no-eyebrow{--hero-lead:0}
.hero-copy{display:flex;flex-direction:column;justify-content:flex-start;padding-bottom:0}
.eyebrow{
  font-family:var(--label);font-weight:500;font-size:12px;letter-spacing:.18em;
  color:var(--ink-soft);
  display:flex;align-items:center;gap:14px;margin-bottom:34px;
}
.eyebrow::before{content:"";width:44px;height:1px;background:var(--ink)}
.hero h1{
  font-family:var(--serif);font-weight:600;
  font-size:clamp(44px,6.2vw,96px);
  line-height:1.08;letter-spacing:-.01em;
}
.hero h1 .en{
  display:block;font-style:italic;font-weight:400;
  font-size:.42em;letter-spacing:.01em;color:var(--ink-soft);
  margin-top:18px;font-family:var(--serif);
}
.hero h1 em{
  font-style:normal;position:relative;white-space:nowrap;
}
.hero h1 em::after{
  content:"";position:absolute;left:-2%;bottom:.08em;width:104%;height:.28em;
  background:var(--gold);z-index:-1;opacity:.75;
  transform:scaleX(0);transform-origin:left;
  transition:transform 1.1s var(--ease-expo) .9s;
}
.hero.in-view h1 em::after{transform:scaleX(1)}
.hero-sub{
  max-width:520px;margin-top:36px;font-size:19px;color:var(--ink-soft);
}
.hero-sub strong{color:var(--ink);font-weight:600}
.hero-actions{display:flex;align-items:center;gap:34px;margin-top:48px;flex-wrap:wrap}
.btn-solid{
  font-family:var(--label);font-weight:500;font-size:13px;letter-spacing:.12em;
  background:var(--ink);color:var(--paper);border:1px solid var(--ink);
  padding:18px 40px;position:relative;overflow:hidden;
  transition:color .35s var(--ease-out);
}
.btn-solid::before{
  content:"";position:absolute;inset:0;background:var(--crimson);
  transform:translateY(101%);transition:transform .45s var(--ease-expo);
}
.btn-solid span{position:relative;z-index:1}
.btn-solid:hover::before{transform:translateY(0)}
.btn-arrow{
  font-family:var(--label);font-weight:500;font-size:13px;letter-spacing:.11em;
  display:inline-flex;align-items:center;gap:12px;color:var(--ink);
}
.btn-arrow .arr{
  display:inline-block;transition:transform .35s var(--ease-out);
}
.btn-arrow:hover .arr{transform:translateX(8px)}

/* hero visual — 手绘风「科研手账」进度面板 */
/* 面板撑满「H1 首行 → 按钮组下沿」这一段：顶部让出 eyebrow 的高度，
   底部不留内边距，左右两栏因此上下沿齐平 */
.hero-visual{
  position:relative;margin-bottom:0;
  border-left:1px solid var(--ink-faint);
  padding:var(--hero-lead) 0 0 46px;
  display:flex;flex-direction:column;justify-content:flex-start;
}
/* 手账卡：纸面 + 微倾 + 手绘双线框 + 和纸胶带（质感转译自 ref.html）。
   面板高度随左栏文本块伸缩：至少撑满整段（min-height:100%），
   内容更多时按内容自然增高，行在面板内均分排布，避免留下大片空底 */
.instrument{
  position:relative;flex:0 0 auto;min-height:100%;
  display:flex;flex-direction:column;
  padding:28px 34px 22px;
  background:var(--card);
  background-image:linear-gradient(rgba(22,36,61,.028) 1px,transparent 1px);  /* 淡淡横线纸纹 */
  background-size:100% 30px;
  border:2.5px solid var(--ink);
  border-radius:255px 18px 225px 18px / 18px 225px 18px 255px;
  transform:rotate(-.4deg);
  box-shadow:0 22px 44px -22px rgba(22,36,61,.3),0 3px 10px -4px rgba(22,36,61,.12);
}
/* 内侧第二道略歪的描边 */
.instrument::after{
  content:"";position:absolute;inset:5px;pointer-events:none;z-index:5;
  border:1.5px solid rgba(22,36,61,.35);
  border-radius:18px 225px 18px 255px / 255px 18px 255px 18px;
}
/* 和纸胶带：把这张手账「贴」在页面上 */
.pl-tape{
  position:absolute;width:112px;height:30px;z-index:6;
  background:linear-gradient(105deg,rgba(200,165,72,.5),rgba(200,165,72,.32));
  box-shadow:0 2px 6px rgba(22,36,61,.14);
  clip-path:polygon(1.5% 10%,98.5% 0%,100% 86%,0% 100%);
}
.pl-tape.tl{top:-14px;left:42px;transform:rotate(-5deg)}
.pl-tape.tr{top:-12px;right:54px;transform:rotate(4deg);background:linear-gradient(105deg,rgba(22,36,61,.22),rgba(22,36,61,.12))}
/* 页边竖排手写批注 */
.pl-margin-note{
  position:absolute;left:calc(100% + 6px);top:50%;transform-origin:0 0;
  transform:rotate(90deg) translateX(-50%) translateY(-115%);
  font-family:var(--hand);font-size:17px;color:var(--gold-deep);letter-spacing:.1em;white-space:nowrap;z-index:6;
}

/* ---------- hero：学员管线面板（手绘进度表） ----------
   每个学员 = 一条水平管线：若干阶段（同类型子阶段归并）首尾相接，阶段内再按
   子阶段切块；悬停子阶段显示该格过程记录。纸面卡内沿用手账配色：
   铅笔排线进度 + 便签标签 + 手写百分比；面板宽度不足时表体横向滚动、姓名列吸边。 */
.pp{position:relative;z-index:1;flex:1;display:flex;flex-direction:column}

/* 手账抬头：手写标题 + 手绘翻页箭头 */
.pl-titlebar{display:flex;align-items:flex-end;justify-content:space-between;gap:16px;padding-bottom:10px}
.pl-title{position:relative;min-width:0}
.pl-title .en{display:block;font-family:var(--hand);font-weight:600;font-size:18px;line-height:1.05;letter-spacing:.14em;color:var(--gold-deep)}
.pl-title .cn{
  position:relative;display:inline-block;font-family:'Zhi Mang Xing',var(--brush);
  font-size:31px;line-height:1.15;letter-spacing:.06em;color:var(--ink);
}
.pl-title .cn svg{position:absolute;left:-2%;bottom:-7px;width:104%;height:12px;overflow:visible}
.pl-title .cn svg path{stroke:var(--gold);stroke-width:2.4;fill:none;stroke-linecap:round}
.pl-navwrap{display:flex;gap:8px}
/* 手绘圆箭头（翻页）：行数不足一页时整体隐藏 */
.pl-nav{
  position:static;width:32px;height:32px;padding:0;display:grid;place-items:center;line-height:1;
  background:transparent;color:var(--ink);
  border:2px solid var(--ink);
  border-radius:60% 40% 55% 45% / 45% 55% 45% 60%;
  opacity:0;pointer-events:none;
  transition:opacity .25s var(--ease-out),transform .25s var(--ease-out),color .25s,border-color .25s;
}
.pp.has-pages .pl-nav{opacity:1;pointer-events:auto}
.pp.at-first .pl-nav-prev,.pp.at-last .pl-nav-next{opacity:.28;pointer-events:none}
.pl-nav svg{width:12px;height:12px;display:block}
.pl-nav:hover{color:var(--gold-deep);border-color:var(--gold-deep);transform:rotate(-6deg) scale(1.08)}

/* 标题与表头之间的手绘波浪分隔 */
.pl-scribble{width:100%;height:9px;margin:2px 0 4px;overflow:visible}
.pl-scribble path{stroke:rgba(22,36,61,.45);stroke-width:1.6;fill:none;stroke-linecap:round}

/* 表体：窄面板横向滚动，滚动条走细线 */
.pl-rows{
  position:relative;overflow-x:auto;overflow-y:hidden;
  flex:1;display:flex;flex-direction:column;
}
.pl-rows::-webkit-scrollbar{height:5px}
.pl-rows::-webkit-scrollbar-track{background:rgba(22,36,61,.05)}
.pl-rows::-webkit-scrollbar-thumb{background:rgba(22,36,61,.22)}
.pl-inner{
  position:relative;min-width:620px;
  --col-name:186px;--col-pct:74px;
  flex:1;display:flex;flex-direction:column;
}
/* 表体容器：承接表头以下的剩余高度，阶段刻度线以它为定位参照（不侵入表头） */
.pl-body{position:relative;flex:1;min-height:0;display:flex;flex-direction:column}
/* 阶段竖向刻度：列宽由 js/pipeline.js 按各阶段占宽权重写入（fr），
   与进度条上的阶段分界线严格对齐；图层压在数据行之下 */
.pl-grid{
  position:absolute;top:0;bottom:0;left:var(--col-name);right:var(--col-pct);
  display:grid;pointer-events:none;z-index:0;
}
.pl-grid i{border-right:2px dashed rgba(22,36,61,.16)}
.pl-grid i:last-child{border-right:none}

/* 行分页：每页一屏，整页翻动（翻页动效见下方「翻页：擦除 → 重绘」）。
   表头与首条记录之间留一点缝：首行的过程记录便签改为向下引出（见 .pl-page .pl-row:first-child .pl-bubble），
   其余行的便签向上生长时落在上方行内，故无需再为便签预留整行高度。
   顶部 16px 留首行上方「往上引出」的内容：结项红章（底边距行内中线 8px）探出约 4px，
   阶段标签（底边距中线 15px、含顶端小胶带）探出约 9~15px，取 16px 保证首行标签
   不会被 .pl-view 的裁剪边界切到顶边（其他行上方是上一行，不受此限）。
   视图撑满面板剩余高度，行在页内自上而下排布（见下方 .pl-page） */
.pl-view{position:relative;z-index:1;overflow:hidden;padding:16px 0 10px;flex:1;display:flex}
.pl-pages{display:flex;align-items:stretch;flex:1;min-width:0}
.pl-page{flex:0 0 100%;min-width:100%;display:flex;flex-direction:column}
/* 行自上而下排布：整页行数排满时各行等分页高，仍与左栏文本块上下对齐；
   末页不满时行高封顶、余白留在页底。若改用 space-between，末页的那几行
   会被顶到页面的上下两端，中间空出一大块（行距也不再是行距） */
.pl-page .pl-row{flex:1 1 auto;max-height:74px}
/* 分页圆点：多页时居中于面板下方（实心 = 当前页，空心 = 其余页）；
   单页时 .pp 不带 has-pages，圆点整体隐藏 */
.pl-dots{display:none}
.pp.has-pages .pl-dots{display:flex;align-items:center;gap:10px}
.pl-dots span{
  width:11px;height:11px;background:transparent;
  border:2px solid var(--ink-soft);
  border-radius:55% 45% 60% 40% / 45% 60% 40% 55%;
  transition:background .3s var(--ease-out),border-color .3s var(--ease-out),transform .3s var(--ease-out);
}
.pl-dots span.is-on{background:var(--gold);border-color:var(--gold-deep);transform:rotate(8deg) scale(1.12)}

/* 表头 */
.pl-head{
  display:grid;grid-template-columns:var(--col-name) 1fr var(--col-pct);
  padding-top:6px;position:relative;z-index:1;
}
.pl-who{
  font-family:var(--hand);font-size:13px;letter-spacing:.14em;
  color:var(--ink-soft);white-space:nowrap;
  border-bottom:2px dashed rgba(22,36,61,.18);padding-bottom:7px;
}
/* 阶段表头：列宽与表体同源（各阶段占宽权重），标题正好横跨它的子阶段色块。
   字号随列宽走：4 个汉字横排需要 4em，故取 min(13px,22cqw)
   （22cqw ≈ 4 字恰好排满列宽并留一点余量），列宽变化时字号自动跟着缩放
   —— 最窄的「数据整理」约 47px 得 10.4px，宽列「干实验」封顶 13px，
   所有标题都收在一行内，避免出现不对称的奇怪换行 */
.pl-phases{display:grid}
.pl-phases span{
  container-type:inline-size;
  display:flex;flex-direction:column;justify-content:flex-end;
  height:40px;padding:0 0 7px;
  border-bottom:2px dashed rgba(22,36,61,.18);
  line-height:1.2;text-align:center;
}
.pl-phases span em{
  font-style:normal;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;
  font-family:var(--brush);color:var(--ink-soft);font-size:min(13px,22cqw);
}
.pl-pct-h{border-bottom:2px dashed rgba(22,36,61,.18)}

/* 数据行：手账横格纸上的记录条 */
.pl-row{
  display:grid;grid-template-columns:var(--col-name) 1fr var(--col-pct);align-items:center;
  min-height:58px;position:relative;
  border-bottom:2px dashed rgba(22,36,61,.12);
  opacity:0;transform:translateY(8px);animation:plRise .7s var(--ease-expo) forwards;
}
.pl-row:last-child{border-bottom:none}
@keyframes plRise{to{opacity:1;transform:none}}
.pl-row:hover{background:rgba(200,165,72,.07)}
/* 已结项行：淡淡的金调铺底，进一步拉开层级 */
.pl-row.done{background:linear-gradient(90deg,rgba(200,165,72,.08),transparent 55%)}
.pl-row.done:hover{background:linear-gradient(90deg,rgba(200,165,72,.13),transparent 55%)}
.pl-name{
  padding-right:14px;position:sticky;left:0;z-index:2;
  transition:background .35s var(--ease-out);
}
/* 表体滚动时姓名列铺底吸边，避免透出下层进度条 */
.pl-rows.is-scrolled .pl-name{background:var(--card)}
/* 导师 / 学员分列展示；姓名用行书手写体排布，行内紧凑以容纳更多记录 */
.pl-name .pair{display:flex;flex-direction:column;gap:1px;min-width:0}
.pl-name .role{display:flex;align-items:baseline;gap:7px;min-width:0;white-space:nowrap;line-height:1.25}
.pl-name .role i{
  flex:none;font-style:normal;font-family:var(--label);font-weight:600;
  font-size:11px;letter-spacing:.12em;color:var(--gold-deep);
}
.pl-name .role b{
  min-width:0;font-family:var(--brush);font-weight:400;font-size:18px;
  color:var(--ink);line-height:1.2;
  overflow:hidden;text-overflow:ellipsis;
}
.pl-name .proj{
  font-family:var(--label);font-size:9px;letter-spacing:.05em;
  color:var(--ink-soft);margin-top:3px;line-height:1.3;
  white-space:nowrap;overflow:hidden;text-overflow:ellipsis;
  max-width:calc(var(--col-name) - 20px);
}

/* 进度轨道：手绘描边（抖动滤镜）+ 铅笔交叉排线填充 */
.pl-track{position:relative;height:44px;display:flex;align-items:center;--pl-phase-line:rgba(22,36,61,.8)}
.pl-rail{
  position:absolute;left:0;right:0;top:50%;transform:translateY(-50%);
  height:21px;background:rgba(255,255,255,.5);
  border:2px solid var(--ink);
  border-radius:225px 12px 255px 12px / 12px 255px 12px 225px;
  filter:url(#handWobble);
}
/* 子阶段分段：格子宽窄由阶段长度决定（越长越窄，见 js/pipeline.js 的 layout），
   故细缝位置无法用等分渐变算，改由 JS 写出两张精确渐变：
   --pl-lines 阶段分界（粗、深）、--pl-segs 子阶段分格（细、浅，写在 .pl-inner 上共用）。
   multiply 只在填充段上显影，空轨处与纸面底相融 */
.pl-track::before{
  content:"";position:absolute;left:0;right:0;top:50%;transform:translateY(-50%);
  height:17px;z-index:2;pointer-events:none;mix-blend-mode:multiply;opacity:.9;
  background-image:var(--pl-lines,none),var(--pl-segs,none);
}
/* 在研 = 金色铅笔排线；已结项 = 墨色密排线 */
.pl-bar{
  position:absolute;left:2px;top:2px;bottom:2px;width:0;
  border-radius:8px 3px 9px 3px;
  background:
    repeating-linear-gradient(-52deg,rgba(200,165,72,.9) 0 2px,transparent 2px 6.5px),
    repeating-linear-gradient(-48deg,rgba(169,135,58,.55) 0 1.2px,transparent 1.2px 9px);
  transition:width 1.3s var(--ease-expo);
}
.pl-row.done .pl-bar{
  background:
    repeating-linear-gradient(-52deg,rgba(22,36,61,.85) 0 2.2px,transparent 2.2px 6px),
    repeating-linear-gradient(48deg,rgba(22,36,61,.35) 0 1.2px,transparent 1.2px 8px);
}
/* 当前位置：手绘圈点（置于抖动轨道之外，避免描边变形） */
.pl-marker{
  position:absolute;top:50%;width:15px;height:15px;z-index:3;
  transform:translate(-50%,-50%) rotate(3deg);
  background:var(--card);border:2.2px solid var(--gold-deep);
  border-radius:58% 42% 55% 45% / 48% 55% 45% 60%;
  box-shadow:0 0 0 3px rgba(200,165,72,.15);
}
.pl-marker.done{border-color:var(--ink);box-shadow:none}

/* 阶段标签：贴着迷你胶带的便签；结项改为手绘红章 */
.pl-tag{
  position:absolute;bottom:calc(50% + 15px);transform:translateX(-50%) rotate(-2.5deg);z-index:4;
  font-family:var(--hand);font-weight:600;font-size:15px;line-height:1.25;
  white-space:nowrap;color:var(--ink);
  background:var(--sticky);padding:2px 11px 3px;
  box-shadow:0 3px 7px -3px rgba(22,36,61,.35);
  clip-path:polygon(1% 6%,99% 0%,100% 94%,0% 100%);
}
.pl-tag::before{
  content:"";position:absolute;top:-6px;left:50%;transform:translateX(-50%) rotate(-2deg);
  width:26px;height:9px;background:rgba(255,255,255,.55);box-shadow:0 1px 2px rgba(22,36,61,.12);
}
.pl-tag.solid{
  top:auto;bottom:calc(50% + 8px);left:auto;right:0;transform:rotate(-8deg);
  font-family:var(--brush);font-weight:400;font-size:14px;letter-spacing:.14em;color:var(--crimson);
  background:transparent;box-shadow:none;clip-path:none;padding:1px 8px 2px;
  border:2.5px solid var(--crimson);
  border-radius:58% 42% 55% 45% / 48% 60% 40% 55%;
}
.pl-tag.solid::before{display:none}

/* 子阶段 hover 触发区：覆盖该子阶段的进度条区块（宽高由 JS 按子阶段数写入），
   悬停时点亮该色块，并从其上方引出该格过程记录便签 */
.pl-zone{
  position:absolute;top:0;bottom:0;left:0;
  z-index:2;transition:background .15s;
}
.pl-zone:hover,.pl-zone.is-open{background:rgba(200,165,72,.14)}
/* 过程记录便签：常态隐藏，悬浮（触屏点按）对应色块时淡入；
   便签做得足够大以完整显示原文，靠左右两侧时自动贴边不出框，自身不拦截鼠标 */
.pl-bubble{
  --bh:min(150px,34%);
  position:absolute;z-index:6;opacity:0;pointer-events:none;
  transition:opacity .2s var(--ease-out);
  bottom:calc(50% + 8px);
  left:clamp(var(--bh),var(--cx,50%),calc(100% - var(--bh)));
  transform:translateX(-50%) rotate(1.2deg);
  width:min(292px,74%);box-sizing:border-box;
  background:var(--sticky);color:rgba(22,36,61,.9);
  font-family:var(--brush);font-size:12.5px;line-height:1.6;text-align:left;
  padding:8px 11px 9px;
  box-shadow:0 10px 22px -10px rgba(22,36,61,.45);
  clip-path:polygon(1.5% 4%,98.5% 0%,100% 96%,0% 100%);
}
.pl-bubble::before{content:"✎ 过程记录";display:block;font-family:var(--hand);font-size:12px;color:var(--gold-deep);margin-bottom:3px}
.pl-zone:hover + .pl-bubble,.pl-zone.is-open + .pl-bubble{opacity:1}
/* 每页首行的便签改从进度条下方引出：便签高约 50~100px，首行上方只有 .pl-view
   的一点内边距，往上引出会被裁剪边界切掉大半，放不下。
   阶段标签（.pl-tag）只有一行高，首行同样从上方引出——不为此把首行的标签
   单独翻到下方，否则同一列的标签会上下不一（.pl-view 的上内边距已按标签的
   上探高度留足，见上方 .pl-view 注释） */
.pl-page .pl-row:first-child .pl-bubble{top:calc(50% + 8px);bottom:auto}
/* 便签会越出本行盖到相邻行上，而 .pl-row 因为入场动画（opacity / transform 的 fill 状态）
   自成层叠上下文，便签被关在本行内，于是首行向下引出的便签会被下一行的进度条
   分格线（还带 multiply 混色）压住。故查看便签时把整行提到同层之上，让便签真正置顶 */
.pl-row:hover,.pl-row:has(.pl-zone.is-open){z-index:7}

/* 百分比：大号手写数字；结项用红笔圈注 */
.pl-pct{
  font-family:var(--hand);font-weight:700;font-size:30px;line-height:1;
  color:var(--ink);text-align:right;letter-spacing:.01em;
}
.pl-pct .s{font-size:.55em;color:var(--ink-soft);margin-left:1px}
.pl-row.done .pl-pct{color:var(--crimson)}
.pl-pct .circled{position:relative;display:inline-block;padding:0 4px}
.pl-pct .circled::after{
  content:"";position:absolute;inset:-7px -8px -4px -6px;
  border:2.5px solid var(--crimson);
  border-radius:52% 48% 55% 45% / 60% 55% 45% 50%;
  transform:rotate(-4deg);
}

/* 底部：分页圆点 + 手绘图例 */
.pl-foot{display:flex;align-items:center;justify-content:space-between;gap:14px;margin-top:12px;padding-top:10px}
.pl-legend{display:flex;gap:18px;margin-left:auto;font-family:var(--hand);font-size:14px;color:var(--ink-soft)}
.pl-legend span{display:inline-flex;align-items:center;gap:7px;white-space:nowrap}
.pl-legend i{width:22px;height:12px;display:inline-block;border:1.8px solid var(--ink);border-radius:8px 3px 9px 3px}
.pl-legend .g{background:repeating-linear-gradient(-52deg,rgba(200,165,72,.9) 0 2px,transparent 2px 5px)}
.pl-legend .n{background:repeating-linear-gradient(-52deg,rgba(22,36,61,.85) 0 2px,transparent 2px 5px)}

/* ============================================================
   翻页：擦除 → 重绘（纸张手账）
   ------------------------------------------------------------
   翻页分两幕：先由板擦沿波浪路线逐带擦掉旧页（被蹭到的内容直接被裁去、
   露出纸面，不叠任何覆盖物），再由笔尖逐行把新页画出来（灰色草稿先行、
   上墨层随后）。两幕都在动效层 .pl-fx 里对「页面的克隆」操作，真页全程不动、
   仅翻页期间隐藏，动画结束也就没有任何残留状态要清理。
   纸面本身不参与：不做位移/旋转、不加阴影、不改色调（早先那套「纸让开、
   胶带翘起、书脊压暗、页角掀起」已去掉 —— 整片纸的底色看起来会变）。
   手部素材：assets/hand-eraser.png、assets/hand-pen.png（真实手部，非绘制） */
.pl-fx{position:absolute;inset:0;z-index:12;pointer-events:none}
/* 真页在动效层工作期间让位：布局不变，只是不可见 */
.pl-pages.is-hidden{visibility:hidden}
/* 翻页期间：纸面内的两级裁剪（.pl-rows 的滚动容器、.pl-view 的页轨视口）一起让开，
   把裁剪权交给外层的 .pp。.pp 是整张手账卡的内容盒（含抬头与页脚），下沿比纸面可视区
   低约 46px，于是板擦擦到最后一带时不会再被纸面下沿削掉一截；横向二者几乎重合，
   笔走到行右端时手部仍会越出纸面（与参考实现一致，素材笔尖锚点在图内左侧 8.8% 所限）。
   此时真页已 visibility:hidden 且整页被裁，让开两级裁剪不会漏出相邻页。
   两级必须同时切换：只让开内层会在 .pl-rows 上凭空多出一条横向滚动条 */
.pp.is-flipping{overflow:hidden}
.pp.is-flipping .pl-rows,.pp.is-flipping .pl-view{overflow:visible}

/* 动效层里的克隆页：不做入场动画，行的显隐全部交给下面这三组类驱动 */
.pl-fx .pl-row{animation:none;opacity:1;transform:none}
/* 擦除：按横带逐条隐去，裁切边界跟在橡皮前缘之后走 */
.pl-fx .pl-row.out{animation:plEraseOut .28s cubic-bezier(.42,.05,.58,1) both}
@keyframes plEraseOut{from{opacity:1;clip-path:inset(-12% -6% -12% -6%)}to{opacity:1;clip-path:inset(-12% -6% -12% 106%)}}
/* 草稿层：整行的灰度幻影，右缘跟笔尖、左缘跟上墨前沿——一个移动的草稿窗口，画完淡出 */
.pl-fx .pl-row.sketch-row{position:absolute;z-index:1;filter:grayscale(1);opacity:0;transform:none}
.pl-fx .pl-row.sketch-row.sketch{animation:plSketchIn .72s linear both}
@keyframes plSketchIn{
  0%  {opacity:.48;clip-path:inset(-8% 104% -8% -4%)}
  18% {opacity:.48;clip-path:inset(-8% 73.5% -8% -4%)}
  64% {opacity:.48;clip-path:inset(-8% -4% -8% 73.5%)}
  82% {opacity:.48;clip-path:inset(-8% -4% -8% 104%)}
  100%{opacity:0;clip-path:inset(-8% -4% -8% 104%)}
}
/* 上墨层：从右往左扫过，比草稿晚 INK_LAG 毫秒，把草稿覆盖成彩色正稿 */
.pl-fx .pl-row.ink{animation:plInkIn .46s linear both}
@keyframes plInkIn{from{opacity:1;clip-path:inset(-8% 104% -8% -4%)}to{opacity:1;clip-path:inset(-8% -4% -8% -4%)}}
/* 手持工具（真实手部素材）：JS 驱动沿路径移动，img 自身轻微抖动 */
.pl-fx .hand-tool{position:absolute;left:0;top:0;z-index:26;will-change:transform;opacity:0}
.pl-fx .hand-tool img{display:block;animation:plWig .22s ease-in-out infinite}
.pl-fx .hand-tool.pen img{width:172px}
.pl-fx .hand-tool.wipe img{width:150px}
@keyframes plWig{
  0%,100%{transform:rotate(-2.4deg) translate(-2px,1px)}
  50%{transform:rotate(2.2deg) translate(2px,-2px)}
}

@media (prefers-reduced-motion:reduce){
  .pl-bar{transition:none}
  .pl-row{opacity:1;transform:none;animation:none}
}
/* 窄屏：面板收窄、胶带缩小，表体仍保持横向滚动；
   页边批注在卡右缘贴到视口边框前就要收起，否则会被 body 裁掉 */
@media (max-width:1280px){
  .pl-margin-note{display:none}
}
@media (max-width:1180px){
  .instrument{transform:none}
}
@media (max-width:720px){
  .instrument{padding:22px 18px 16px;border-radius:18px}
  .instrument::after{border-radius:12px}
  .pl-tape{width:84px;height:24px}
  .pl-tape.tl{left:26px;top:-11px}
  .pl-tape.tr{right:34px;top:-10px}
  .pl-titlebar{flex-wrap:wrap;align-items:center}
  .pl-title .cn{font-size:26px}
  .pl-title .en{font-size:16px}
  .pl-scribble{display:none}
}

/* 手机竖屏：进度表改为「卡片式」纵向堆叠，彻底消除横向滚动。
   每个学员 = 一张卡片：首行「姓名/项目 + 百分比」，次行进度条占满整行。
   表头在窄屏下改为「阶段图例条」：6 个阶段等分一行、仅保留阶段名，
   与进度条上的阶段分界线（稍宽缝）按顺序对应；竖向刻度线隐藏。 */
@media (max-width:620px){
  .pl-rows{overflow:visible}
  .pl-rows::-webkit-scrollbar{display:none}
  .pl-inner{min-width:0}
  .pl-grid{display:none}
  /* 表头：等分一行的阶段图例（清除按子阶段比例的列宽），
     姓名/百分比两列表头占位隐藏（卡片式下每行自带标签与百分比） */
  .pl-head{
    display:block;
    padding:0 0 8px;
    margin-bottom:8px;
    border-bottom:2px dashed rgba(22,36,61,.18);
  }
  .pl-head .pl-who{display:none}
  .pl-head .pl-pct-h{display:none}
  /* 卡片更窄：表头下划线交给 .pl-head 统一绘制，避免双线 */
  .pl-head .pl-phases span{border-bottom:none}
  .pl-view{padding:8px 0 10px}
  /* 行不拉伸、紧凑排列（取消桌面端为对齐左右栏而做的等高均分） */
  .pl-rows{flex:0 0 auto}
  .pl-page .pl-row{flex:none;max-height:none}
  .pl-row{
    grid-template-columns:minmax(0,1fr) auto;
    grid-template-rows:auto auto;
    row-gap:8px;column-gap:12px;
    min-height:0;
    padding:12px 0 14px;
    border-bottom:2px dashed rgba(22,36,61,.12);
  }
  .pl-row:last-child{border-bottom:none}
  .pl-name{grid-column:1;grid-row:1;position:static;padding-right:10px;z-index:auto}
  .pl-rows.is-scrolled .pl-name{background:transparent}
  .pl-name .proj{max-width:none}
  .pl-track{grid-column:1/-1;grid-row:2;height:48px}
  .pl-pct{grid-column:2;grid-row:1;align-self:start;padding-top:2px;text-align:right;font-size:26px}
  /* 触控目标放大：翻页箭头、分页圆点 */
  .pl-nav{width:40px;height:40px}
  .pl-nav svg{width:14px;height:14px}
  .pl-dots span{width:13px;height:13px}
  .pp.has-pages .pl-dots{gap:10px}
  /* 便签在更窄卡片内稍收窄，避免横向贴边过挤 */
  .pl-bubble{width:min(264px,82%);font-size:12px}
  .pl-legend{font-size:13px;gap:14px}
}

/* ---------- I. why ---------- */
.hero-stats{
  grid-column:1/-1;
  display:grid;grid-template-columns:repeat(4,1fr);
  border-top:1px solid var(--ink);
}
.stat{
  padding:30px 34px 38px;border-right:1px solid var(--ink-faint);
  position:relative;
}
.stat:last-child{border-right:none}
.stat .num{
  font-family:var(--serif);font-weight:600;font-size:clamp(38px,3.4vw,56px);line-height:1;
  display:flex;align-items:baseline;gap:4px;
}
.stat .num .suffix{font-size:.45em;color:var(--crimson);font-family:var(--label);font-weight:700}
.stat .lbl{font-family:var(--label);font-weight:500;font-size:11px;letter-spacing:.13em;color:var(--ink-soft);margin-top:12px}

/* ---------- marquee ---------- */
.marquee{
  background:var(--navy);color:var(--paper);
  overflow:hidden;padding:20px 0;position:relative;
  border-top:1px solid var(--ink);border-bottom:1px solid var(--ink);
}
.marquee-track{
  display:flex;width:max-content;
  animation:marquee 28s linear infinite;
}
.marquee:hover .marquee-track{animation-play-state:paused}
.marquee-track span{
  font-family:var(--label);font-weight:500;font-size:14px;letter-spacing:.16em;
  white-space:nowrap;padding:0 28px;display:flex;align-items:center;gap:28px;
}
.marquee-track .dia{color:var(--gold);font-size:10px}
@keyframes marquee{to{transform:translateX(-50%)}}

/* ---------- section scaffolding ---------- */
.section{padding:120px var(--gutter);position:relative}
.sec-head{
  display:grid;grid-template-columns:220px 1fr;gap:40px;
  margin-bottom:80px;align-items:start;
}
.sec-rn{
  font-family:var(--label);font-weight:500;font-size:12px;letter-spacing:.15em;color:var(--ink-soft);
  border-top:1px solid var(--ink);padding-top:16px;
}
.sec-rn b{display:block;font-family:var(--serif);font-size:44px;font-weight:500;color:var(--ink);letter-spacing:0;margin-top:8px;line-height:1}
.sec-title{
  font-family:var(--serif);font-weight:600;
  font-size:clamp(34px,4.2vw,62px);line-height:1.15;letter-spacing:-.01em;
  max-width:820px;
}
.sec-title .accent{color:var(--crimson)}
.sec-kicker{
  font-family:var(--label);font-weight:500;font-size:11px;letter-spacing:.18em;text-transform:uppercase;
  color:var(--ink-soft);margin-bottom:20px;display:block;
}
.sec-desc{max-width:560px;margin-top:24px;color:var(--ink-soft);font-size:18px}

/* reveal choreography */
.reveal{opacity:0;transform:translateY(36px);transition:opacity .9s var(--ease-out),transform .9s var(--ease-out)}
/* 禁用 JS / 爬虫抓取时（<html class="no-js">）直接展示正文：
   预渲染出来的静态副本若停在 opacity:0，等同于"源码有字、视觉隐藏"，
   既拿不到收录也有被判作弊的风险。带 JS 的正常访问不受影响——
   head 里的内联脚本在首次绘制前就已摘掉 no-js。 */
.no-js .reveal{opacity:1;transform:none;transition:none}
.reveal.in{opacity:1;transform:none}
.reveal-d1{transition-delay:.08s}.reveal-d2{transition-delay:.16s}
.reveal-d3{transition-delay:.24s}.reveal-d4{transition-delay:.32s}
.reveal-d5{transition-delay:.4s}.reveal-d6{transition-delay:.48s}

/* ---------- I. why research ---------- */
.why-grid{display:grid;grid-template-columns:repeat(3,1fr);border-top:1px solid var(--ink)}
.why-item{
  padding:44px 38px 54px;border-right:1px solid var(--ink-faint);
  position:relative;transition:background .4s var(--ease-out);
}
.why-item:last-child{border-right:none}
.why-item:hover{background:var(--paper-dim)}
.why-item .idx{
  font-family:var(--serif);font-size:60px;font-weight:400;line-height:1;
  color:transparent;-webkit-text-stroke:1px var(--ink);
  transition:color .4s;
}
.why-item:hover .idx{color:var(--crimson);-webkit-text-stroke:1px var(--crimson)}
.why-item h3{font-family:var(--serif);font-size:24px;font-weight:600;margin:26px 0 14px;line-height:1.3}
.why-item p{color:var(--ink-soft);font-size:16px}
.why-note{
  margin-top:70px;display:grid;grid-template-columns:1fr 1fr;gap:60px;align-items:center;
  border:1px solid var(--ink);padding:56px;
  background:linear-gradient(120deg,var(--paper) 60%,var(--paper-dim));
  position:relative;
}
.why-note::before{
  content:attr(data-kicker);position:absolute;top:-11px;left:40px;
  background:var(--ink);color:var(--paper);
  font-family:var(--label);font-weight:500;font-size:10px;letter-spacing:.16em;padding:5px 14px;
}
.why-note blockquote{
  font-family:var(--serif);font-size:clamp(22px,2.2vw,30px);line-height:1.5;font-weight:500;
}
.why-note blockquote .hl{background:linear-gradient(transparent 62%,rgba(200,165,72,.6) 62%)}
.why-note .note-body{color:var(--ink-soft);font-size:16px}
.why-note .note-body p+p{margin-top:14px}

/* ---------- II. mentors ---------- */
.mentor-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:0;border:1px solid var(--ink)}
.mentor{
  border-right:1px solid var(--ink);padding:36px 30px 42px;position:relative;
  background:var(--paper);transition:background .4s var(--ease-out);
  overflow:hidden;
}
.mentor:last-child{border-right:none}
.mentor:hover{background:var(--navy);color:var(--paper)}
.mentor:hover .mentor-field,.mentor:hover .mentor-bio{color:rgba(251,250,247,.65)}
.mentor:hover .mentor-motif{opacity:.9;transform:translate(0,0) scale(1)}
.mentor-motif{
  position:absolute;top:-30px;right:-30px;width:130px;height:130px;opacity:.5;
  transition:transform .6s var(--ease-expo),opacity .4s;
  transform:translate(6px,-6px) scale(.94);
}
/* 导师照片（后台媒体配置：mentor.image 有值时替换默认 SVG 图案） */
.mentor-photo{
  position:absolute;top:-30px;right:-30px;width:130px;height:130px;
  object-fit:cover;opacity:.5;
  transition:transform .6s var(--ease-expo),opacity .4s;
  transform:translate(6px,-6px) scale(.94);
}
.mentor:hover .mentor-photo{opacity:.9;transform:translate(0,0) scale(1)}
.mentor-uni{
  font-family:var(--label);font-weight:500;font-size:10px;letter-spacing:.15em;
  display:inline-block;border:1px solid currentColor;padding:5px 12px;margin-bottom:52px;
}
.mentor-name{font-family:var(--serif);font-size:26px;font-weight:600;line-height:1.2}
.mentor-role{font-family:var(--label);font-weight:500;font-size:11px;letter-spacing:.1em;margin-top:8px;opacity:.75}
.mentor-field{font-size:15px;color:var(--ink-soft);margin-top:22px;transition:color .4s}
.mentor-bio{font-size:14px;color:var(--ink-soft);margin-top:12px;line-height:1.7;transition:color .4s}
.mentor-tags{display:flex;flex-wrap:wrap;gap:8px;margin-top:22px}
.mentor-tags i{
  font-style:normal;font-family:var(--label);font-weight:500;font-size:10px;letter-spacing:.08em;
  border:1px solid currentColor;opacity:.6;padding:3px 9px;
}
.mentor-strip{
  margin-top:60px;display:flex;justify-content:space-between;align-items:center;
  flex-wrap:wrap;gap:20px;
}
.mentor-strip .mono-note{font-family:var(--label);font-weight:500;font-size:12px;letter-spacing:.13em;color:var(--ink-soft)}

/* ---------- III. topics bento ---------- */
.topics{background:var(--navy);color:var(--paper)}
.topics .sec-rn{border-color:var(--gold);color:rgba(251,250,247,.55)}
.topics .sec-rn b{color:var(--paper)}
.topics .sec-kicker{color:var(--gold)}
.topics .sec-desc{color:rgba(251,250,247,.6)}
.bento{
  display:grid;grid-template-columns:repeat(12,1fr);grid-auto-rows:215px;gap:18px;
}
.bento-tile{position:relative;overflow:hidden;border:1px solid rgba(251,250,247,.16)}
.tile-text{
  background:var(--navy-2);padding:34px 32px;display:flex;flex-direction:column;
  transition:border-color .4s;
}
.tile-text:hover{border-color:var(--gold)}
.tile-text .t-num{
  font-family:var(--label);font-weight:500;font-size:11px;letter-spacing:.13em;color:var(--gold);
}
.tile-text h3{
  font-family:var(--serif);font-size:clamp(21px,1.8vw,27px);font-weight:600;
  margin:14px 0 10px;line-height:1.3;
}
.tile-text p{font-size:14.5px;color:rgba(251,250,247,.58);line-height:1.7;flex:1}
.tile-text .t-meta{
  display:flex;justify-content:space-between;align-items:center;margin-top:18px;
  font-family:var(--label);font-weight:500;font-size:10px;letter-spacing:.11em;color:rgba(251,250,247,.45);
}
.tile-text .t-meta .go{
  width:34px;height:34px;border:1px solid rgba(251,250,247,.35);border-radius:50%;
  display:flex;align-items:center;justify-content:center;color:var(--paper);
  transition:background .35s,transform .35s var(--ease-out);
}
.tile-text:hover .t-meta .go{background:var(--gold);color:var(--navy);transform:rotate(45deg)}
.tile-pattern{display:flex;align-items:center;justify-content:center}
.tile-pattern svg{width:100%;height:100%}
.span-4{grid-column:span 4}.span-5{grid-column:span 5}.span-6{grid-column:span 6}
.span-7{grid-column:span 7}.span-8{grid-column:span 8}.span-3{grid-column:span 3}
.row-2{grid-row:span 2}
.topics-foot{
  margin-top:60px;display:flex;justify-content:space-between;align-items:center;gap:24px;flex-wrap:wrap;
  font-family:var(--label);font-weight:500;font-size:12px;letter-spacing:.12em;color:rgba(251,250,247,.5);
}

/* ---------- IV. journey (dark lab) ---------- */
.journey{background:var(--navy);color:var(--paper);position:relative;overflow:hidden}
.journey canvas{position:absolute;inset:0;width:100%;height:100%;opacity:.5}
.journey .section{position:relative;z-index:2}
.journey .sec-rn{border-color:var(--gold);color:rgba(251,250,247,.55)}
.journey .sec-rn b{color:var(--paper)}
.journey .sec-kicker{color:var(--gold)}
.journey .sec-desc{color:rgba(251,250,247,.6)}
.timeline{margin-top:20px;position:relative}
.timeline::before{
  content:"";position:absolute;left:0;right:0;top:23px;height:1px;
  background:rgba(251,250,247,.18);
}
.timeline-line{
  position:absolute;left:0;top:23px;height:1px;background:var(--gold);width:0;
  transition:width 2.2s var(--ease-expo) .3s;
}
.timeline.in .timeline-line{width:100%}
.t-steps{display:grid;grid-template-columns:repeat(5,1fr);gap:34px}
.t-step{position:relative;padding-top:66px}
.t-step .node{
  position:absolute;top:14px;left:0;width:19px;height:19px;border-radius:50%;
  border:1px solid var(--gold);background:var(--navy);
  transition:background .4s,box-shadow .4s;
}
.t-step:hover .node{background:var(--gold);box-shadow:0 0 22px var(--gold-dim)}
.t-step .t-stage{
  font-family:var(--label);font-weight:500;font-size:11px;letter-spacing:.16em;color:var(--gold);
}
.t-step h3{font-family:var(--serif);font-size:23px;font-weight:600;margin:14px 0 10px;line-height:1.3}
.t-step p{font-size:14.5px;color:rgba(251,250,247,.58);line-height:1.7}
.t-step .t-dur{
  display:inline-block;margin-top:16px;font-family:var(--label);font-weight:500;font-size:10px;
  letter-spacing:.11em;border:1px solid rgba(251,250,247,.3);padding:4px 12px;
  color:rgba(251,250,247,.6);
}
.t-step:nth-child(1){transition-delay:.1s}.t-step:nth-child(2){transition-delay:.35s}
.t-step:nth-child(3){transition-delay:.6s}.t-step:nth-child(4){transition-delay:.85s}
.t-step:nth-child(5){transition-delay:1.1s}

/* ---------- V. 科研自动化工作流 ---------- */
.wflow-grid{display:grid;grid-template-columns:repeat(2,1fr);gap:48px}
.wflow-card{
  background:var(--paper);border:1px solid var(--ink);padding:14px 14px 30px;
  position:relative;
  transition:box-shadow .4s var(--ease-out),transform .4s var(--ease-out);
}
.wflow-card:hover{box-shadow:10px 10px 0 var(--ink);transform:translate(-4px,-4px)}
.wflow-video{
  position:relative;background:var(--navy);aspect-ratio:16/9;overflow:hidden;
  border:1px solid var(--ink);
}
.wflow-video video{width:100%;height:100%;object-fit:contain;background:#000}
/* 原生全屏时自定义光标在全屏层之下不可见，需恢复系统光标以免“找不到鼠标” */
.wflow-video video:fullscreen,
.wflow-video video:-webkit-full-screen{cursor:auto!important}
.wflow-empty{
  position:absolute;inset:0;display:flex;flex-direction:column;align-items:center;
  justify-content:center;gap:16px;
  font-family:var(--label);font-weight:500;font-size:11px;letter-spacing:.14em;color:var(--gold-dim);
}
.wflow-empty::before{
  content:attr(data-badge);position:absolute;top:14px;left:16px;
  font-family:var(--label);font-weight:500;font-size:10px;letter-spacing:.13em;color:var(--gold-dim);
}
.wflow-play{
  width:64px;height:64px;border:1px solid var(--gold-dim);border-radius:50%;
  display:flex;align-items:center;justify-content:center;
  font-size:20px;color:var(--gold);padding-left:5px;
  transition:background .3s var(--ease-out),border-color .3s,color .3s;
}
.wflow-card:hover .wflow-play{background:var(--gold);color:var(--navy);border-color:var(--gold)}
.wflow-card h3{font-family:var(--serif);font-size:22px;font-weight:600;margin:22px 16px 8px}
.wflow-card p{font-size:14.5px;color:var(--ink-soft);margin:0 16px;line-height:1.7}

/* ---------- VI. apply ---------- */
.apply{background:var(--paper-dim)}
.apply-grid{display:grid;grid-template-columns:1fr 1fr;gap:80px;align-items:start}
.apply-steps{counter-reset:step}
.a-step{
  display:grid;grid-template-columns:70px 1fr;gap:26px;padding:30px 0;
  border-bottom:1px solid var(--ink-faint);
}
.a-step .a-no{
  font-family:var(--serif);font-size:34px;font-weight:500;color:transparent;
  -webkit-text-stroke:1px var(--ink);line-height:1.1;
}
.a-step h4{font-family:var(--serif);font-size:20px;font-weight:600;margin-bottom:8px}
.a-step p{font-size:15px;color:var(--ink-soft)}
/* wechat 咨询群卡片 */
.apply-wechat{
  background:var(--paper);border:1px solid var(--ink);padding:52px 48px;
  position:relative;box-shadow:10px 10px 0 var(--ink);text-align:center;
}
.apply-wechat::before{
  content:attr(data-badge);position:absolute;top:-11px;right:40px;
  background:var(--crimson);color:var(--paper);
  font-family:var(--label);font-weight:500;font-size:10px;letter-spacing:.16em;padding:5px 14px;
}
.apply-wechat h3{font-family:var(--serif);font-size:28px;font-weight:600;margin-bottom:20px}
.wechat-name{
  display:inline-block;font-family:var(--serif);font-size:19px;font-weight:600;
  border:1px solid var(--ink);padding:8px 22px;margin-bottom:28px;
}
.wechat-qr{
  background:#fff;border:1px solid var(--ink);padding:16px;
  width:min(260px,100%);margin:0 auto 26px;
  display:flex;align-items:center;justify-content:center;
}
.wechat-qr img{width:100%;height:auto;display:block}
.wechat-qr-empty{font-family:var(--label);font-weight:500;font-size:11px;letter-spacing:.09em;color:var(--ink-soft);line-height:1.9;padding:36px 10px}
.wechat-hint{font-size:14.5px;color:var(--ink-soft);margin-bottom:10px}
.wechat-note{font-family:var(--label);font-weight:500;font-size:10px;letter-spacing:.08em;color:var(--ink-soft)}

/* faq */
.faq{margin-top:100px;border-top:1px solid var(--ink)}
.faq details{border-bottom:1px solid var(--ink-faint)}
.faq summary{
  list-style:none;display:flex;justify-content:space-between;align-items:center;
  padding:26px 4px;font-family:var(--serif);font-size:20px;font-weight:500;
  transition:color .3s;
}
.faq summary::-webkit-details-marker{display:none}
.faq summary .plus{
  font-family:var(--label);font-weight:500;font-size:18px;color:var(--crimson);
  transition:transform .4s var(--ease-out);
}
.faq details[open] .plus{transform:rotate(45deg)}
.faq summary:hover{color:var(--crimson)}
.faq .faq-body{padding:0 4px 30px;color:var(--ink-soft);font-size:16px;max-width:760px}

/* ---------- footer ---------- */
/* 视觉参照 ref.html：星点/星座装饰层作底，其上依次为品牌行、竖线标语、
   装饰分隔线、版权区（左版权 / 右格言）与底部渐隐描边大字。
   类名沿用原有 .footer-brand/.fb-mark/.footer-bottom/.footer-word，
   以保持后台可视化编辑器（js/admin.js）对各文本区域的定位。 */
.site-footer{
  position:relative;overflow:hidden;
  background:var(--navy);color:var(--paper);
  padding:88px var(--gutter) 46px;
}
/* 星点与星座装饰层：纯装饰，不接收指针事件 */
.footer-stars{position:absolute;inset:0;pointer-events:none}
.footer-stars svg{width:100%;height:100%;display:block}
.footer-stars .constellation{opacity:.45}
.footer-stars .constellation line{stroke:#cdd8ec;stroke-width:.6;stroke-dasharray:3 4}
.footer-stars .constellation circle{fill:#cdd8ec}
.footer-stars .twinkle{animation:footerTwinkle 4.5s ease-in-out infinite}
.footer-stars .twinkle:nth-of-type(2){animation-delay:1.2s}
.footer-stars .twinkle:nth-of-type(3){animation-delay:2.4s}
@keyframes footerTwinkle{0%,100%{opacity:.35}50%{opacity:.9}}

.footer-inner{position:relative;z-index:1;max-width:1600px;margin:0 auto}
/* 页脚品牌：LOGO 用专为深色底设计的图源（media.images.logoDark），
   图案本身已近白色，直接铺在藏青页脚上，无需滤镜或底衬 */
/* 字号与字距放大到「LOGO + 品牌名」的右缘与下方左侧版权文字的右缘基本齐平
   （版权行右缘 = 收窄居中后的 1100 栏内左栏右边，见 .footer-bottom） */
.footer-brand .fb-mark{
  display:flex;align-items:center;gap:24px;
  font-family:var(--serif);font-size:36px;font-weight:600;letter-spacing:.32em;
}
.fb-mark .fb-logo{flex:0 0 auto;display:block;height:68px;width:auto}
/* 标语：左侧一道发丝竖线作引，行距放宽、字距拉开 */
.footer-brand p{
  margin-top:32px;padding-left:26px;
  border-left:1px solid rgba(251,250,247,.22);
  color:rgba(251,250,247,.6);
  font-size:15.5px;line-height:2.1;letter-spacing:.18em;max-width:34em;
}
/* 装饰分隔线：两侧渐隐发丝 + 居中星芒 */
.footer-divider{
  margin:52px 0 30px;display:flex;align-items:center;gap:14px;
  color:rgba(251,250,247,.32);
}
.footer-divider::before,
.footer-divider::after{
  content:"";flex:1;height:1px;
  background:linear-gradient(90deg,transparent,rgba(251,250,247,.22));
}
.footer-divider::after{background:linear-gradient(270deg,transparent,rgba(251,250,247,.22))}
.footer-divider svg{flex:0 0 auto}
/* 版权区：左侧版权两行，右下格言短句。
   收窄行宽并居中，让两端文字向中间靠拢，避免中间留白过大 */
.footer-bottom{
  display:flex;justify-content:space-between;align-items:flex-end;
  gap:28px;flex-wrap:wrap;max-width:1100px;margin:0 auto;
}
.footer-meta{display:flex;flex-direction:column;gap:10px}
.footer-meta span:first-child{
  font-family:var(--serif);font-size:13px;letter-spacing:.14em;
  color:rgba(251,250,247,.55);
}
.footer-meta span:last-child{
  font-family:var(--label);font-weight:500;font-size:11px;letter-spacing:.34em;
  color:rgba(251,250,247,.35);
}
.footer-latin-block{
  display:flex;flex-direction:column;align-items:flex-end;gap:4px;text-align:right;
}
.footer-latin{
  font-family:var(--serif);font-size:15px;letter-spacing:.4em;
  color:rgba(251,250,247,.42);
}
/* 格言拉丁原文：手写花体，作为中文格言的注脚 */
.footer-latin-original{
  font-family:var(--hand);font-weight:600;font-size:26px;line-height:1.15;
  letter-spacing:.05em;color:rgba(251,250,247,.62);
}
/* 底部描边大字：自下渐隐 */
.footer-word{
  position:relative;z-index:1;
  max-width:1600px;margin:44px auto 0;text-align:center;
  font-family:var(--serif);font-weight:700;
  font-size:clamp(56px,9vw,140px);line-height:1;letter-spacing:.04em;
  color:transparent;-webkit-text-stroke:1px rgba(251,250,247,.26);
  user-select:none;white-space:nowrap;overflow:hidden;
  -webkit-mask-image:linear-gradient(180deg,rgba(0,0,0,.9) 30%,rgba(0,0,0,.15) 100%);
  mask-image:linear-gradient(180deg,rgba(0,0,0,.9) 30%,rgba(0,0,0,.15) 100%);
}

/* ---------- responsive ---------- */
/* 顶栏在 1300px 以下改为汉堡菜单。
   横排时「品牌 + 6 项导引 + 按钮」的自然宽度约 1163px，加上两侧 4vw 内边距后，
   视口低于约 1281px 就会开始挤压，品牌块与导引栏各自折成两行（品牌块会顶破 76px 的顶栏高度）。
   故收纳断点定在 1300px 留出余量。 */
@media (max-width:1300px){
  .site-nav{
    position:fixed;inset:76px 0 auto 0;background:var(--paper);
    flex-direction:column;gap:0;border-bottom:1px solid var(--ink);
    transform:translateY(-120%);transition:transform .5s var(--ease-expo);
    padding:20px var(--gutter) 34px;
  }
  .site-nav.open{transform:translateY(0)}
  .site-nav a{font-size:15px;padding:16px 0;border-bottom:1px solid var(--ink-faint)}
  .menu-toggle{display:block}
  .header-cta{display:none}
}
@media (max-width:1180px){
  /* 单栏：面板换到文本下方，不再需要与左栏对齐，恢复常规上下留白 */
  .hero{grid-template-columns:1fr;padding-top:130px;align-content:start}
  .hero-visual{border-left:none;padding:34px 0;min-height:420px}
  .hero-stats{grid-template-columns:repeat(2,1fr)}
  .stat:nth-child(2){border-right:none}
  .stat{border-bottom:1px solid var(--ink-faint)}
  .stat:nth-last-child(-n+2){border-bottom:none}
  .mentor-grid{grid-template-columns:repeat(2,1fr)}
  .mentor:nth-child(2){border-right:none}
  .mentor:nth-child(-n+2){border-bottom:1px solid var(--ink)}
  .wflow-grid,.apply-grid,.why-note{grid-template-columns:1fr}
  .bento{grid-auto-rows:minmax(150px,auto)}
  .span-3,.span-4,.span-5{grid-column:span 6}
  .span-6,.span-7,.span-8{grid-column:span 12}
  .t-steps{grid-template-columns:repeat(2,1fr);gap:44px}
  .timeline::before,.timeline-line{display:none}
}
@media (max-width:980px){
  .section{padding:100px var(--gutter)}
  .sec-head{margin-bottom:64px}
}
@media (max-width:720px){
  .section{padding:80px var(--gutter)}
  .sec-head{grid-template-columns:1fr;gap:24px;margin-bottom:56px}
  .hero{padding-top:122px}
  .hero h1{font-size:clamp(38px,11vw,54px)}
  .why-grid{grid-template-columns:1fr}
  .why-item{border-right:none;border-bottom:1px solid var(--ink-faint)}
  .why-item:last-child{border-bottom:none}
  .why-note{padding:40px 28px}
  .mentor-grid{grid-template-columns:1fr}
  .mentor{border-right:none;border-bottom:1px solid var(--ink)}
  .mentor:last-child{border-bottom:none}
  .bento{grid-template-columns:1fr}
  .span-3,.span-4,.span-5,.span-6,.span-7,.span-8{grid-column:span 1}
  .tile-pattern{min-height:170px}
  .t-steps{grid-template-columns:1fr}
  .sec-rn b{font-size:38px}
  .apply-grid{gap:56px}
  .apply-wechat{padding:40px 26px;box-shadow:6px 6px 0 var(--ink)}
  .footer-brand .fb-mark{font-size:28px;letter-spacing:.14em;gap:16px}
  .fb-mark .fb-logo{height:56px}
  .footer-brand p{padding-left:18px;font-size:14.5px}
  .footer-divider{margin:40px 0 24px}
  .footer-bottom{flex-direction:column;align-items:flex-start}
  .footer-latin-block{align-items:flex-start;text-align:left}
  .footer-latin{letter-spacing:.3em}
  .footer-word{font-size:clamp(34px,11.5vw,110px)}
}

/* ---------- responsive: 手机（<480）---------- */
@media (max-width:480px){
  /* eyebrow 在此断点变小，面板顶距同步跟随（见 .hero 的 --hero-lead） */
  .hero{padding-top:108px;--hero-lead:calc(11px * 1.75 + 24px)}
  .hero h1{font-size:clamp(36px,11.5vw,50px)}
  .hero-sub{margin-top:24px;font-size:17px}
  .hero-actions{margin-top:32px;gap:20px}
  .btn-solid{padding:16px 28px}
  .eyebrow{font-size:11px;letter-spacing:.14em;margin-bottom:24px}
  .stat{padding:22px 14px 28px}
  .stat .num{font-size:clamp(30px,10vw,44px)}
  .stat .lbl{font-size:10px;letter-spacing:.09em;margin-top:10px}
  .hero-visual{min-height:320px}
  .section{padding:64px var(--gutter)}
  .sec-head{gap:18px;margin-bottom:40px}
  .sec-rn b{font-size:36px}
  .sec-title{font-size:clamp(28px,8.6vw,40px)}
  .sec-kicker{font-size:10px;margin-bottom:16px}
  .sec-desc{font-size:16px;margin-top:18px}
  .why-item{padding:34px 22px 44px}
  .why-note{padding:34px 20px}
  .why-note blockquote{font-size:20px;line-height:1.55}
  .why-note .note-body{font-size:15px}
  .mentor{padding:30px 22px 36px}
  .mentor-name{font-size:23px}
  .tile-text{padding:26px 22px}
  .tile-text h3{font-size:22px}
  .wflow-grid{gap:34px}
  .wflow-card h3{font-size:20px}
  .t-step{padding-top:54px}
  .t-step h3{font-size:21px}
  .a-step{grid-template-columns:52px 1fr;gap:16px;padding:22px 0}
  .a-no{font-size:28px}
  .a-step h4{font-size:18px}
  .a-step p,.wechat-hint,.faq .faq-body{font-size:15px}
  .apply-grid{gap:40px}
  .apply-wechat{padding:34px 18px;box-shadow:4px 4px 0 var(--ink)}
  .apply-wechat h3{font-size:24px;margin-bottom:16px}
  .wechat-name{font-size:16px;padding:7px 14px;margin-bottom:22px}
  .faq{margin-top:56px}
  .faq summary{font-size:17.5px;padding:20px 2px}
  .site-footer{padding:64px var(--gutter) 30px}
  .footer-brand .fb-mark{font-size:26px;letter-spacing:.08em;gap:13px}
  .fb-mark .fb-logo{height:51px}
  .footer-word{margin:36px auto 0}
}

/* 备案信息沿用页脚配色，小屏自动换行。 */
.footer-registration{max-width:1600px;margin:20px auto 0;display:flex;flex-wrap:wrap;gap:12px 24px;font-size:12px;color:rgba(251,250,247,.65)}
.footer-registration a{display:inline-flex;align-items:center;gap:6px;max-width:100%}
.footer-registration a:hover{color:var(--paper)}
.footer-registration a:focus-visible{outline:2px solid var(--gold);outline-offset:4px}
.footer-registration img{flex-shrink:0}
