/* ═══════════════════════════════════════════════════════════
   森朗生物官网 · 整合版（CEO 审核稿）
   顶部导航收敛为 5 项 · 研发 / 合作与加入 带下拉
   ═══════════════════════════════════════════════════════════ */
:root{
  --ink:#0E1A24; --body:#3D4A56; --mute:#4A5661;
  /* ── 天空蓝阶（--b*）。CEO 定的方向：浅色显生机，全站不用深蓝深绿。
        --b600 是链接与眉题色，压到 5.3:1 才敢用在白底上（AA 要 4.5）。 */
  --b50:#ECF6FD; --b100:#D6EBF9; --b200:#B6DDF6; --b300:#90D3F4; --b400:#4EAFE3;
  --b600:#095B84; --b800:#074C6F; --b900:#063E5A; --b950:#05334A; --night:#042838;
  /* ── 小草绿阶。--g600 同样按 5.1:1 选的，可以直接当文字色 */
  --g50:#F2FAE6; --g100:#E1F5CB; --g200:#C8EBA3; --g300:#B0E58A; --g400:#80C94E;
  --g500:#64B133; --g600:#40761C;
  /* ── 浅色面：原先的深蓝底（首屏 / 页脚 / 深色区块）全部换成这两张浅面 */
  --surface:#F2F6F8; --surface2:#E9F7DE;   /* --surface 10-09 由暖米色 #F9F3E7 改成霜白，和首页 H4 同一套冷色 */
  /* 霜白磨砂（10-09，首页背景 H4）：霜白斜向过渡到浅蓝、浅绿，上面压一层很细的颗粒，像结了霜的玻璃。
     原来的「天蓝 → 暖黄 → 黄绿」中间那段暖黄和冷色的霜白冲突，内页首屏一起换掉。
     颗粒是内联 SVG 噪点，不额外请求文件。被否掉的首页背景方案都在 历史存档/方案对比/。 */
  --frost-grain:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='220' height='220'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='.85' numOctaves='2' stitchTiles='stitch'/%3E%3CfeColorMatrix values='0 0 0 0 .2 0 0 0 0 .3 0 0 0 0 .35 0 0 0 .12 0'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23n)'/%3E%3C/svg%3E");
  /* 内页首屏：右半边是照片，渐变只露出左半边，所以色标比首页收得更紧，左半边也能看到蓝和绿 */
  --hero-grad:var(--frost-grain),linear-gradient(150deg,#F2F6F8 0%,#B9E0F3 40%,#ACE5C3 72%,#ACE5C3 100%);
  /* ── 管线三色也跟着提亮；条上的字改深色，浅底浅条都读得清 */
  --heme:#4FA8DC; --auto:#7FC94A; --solid:#E2A44F;
  --amber:#C8811E; --amber-d:#8A5A10;
  --line:#E1E8EF; --line2:#C9D6E2;
  /* ══════════ 字号：五级 ══════════
     T1 大标题  页面主标题（每页一个）
     T2 区块标题 每个区块的开头、KPI 大数字 —— 负责「新的一段开始了」这个信号
     T3 小标题  卡片标题、条目标题、子区块
     T4 正文
     T5 注释    眉题、标签、徽章、表头、时间戳、图注 */
  /* 大标题：窄区间 clamp（小笔记本 46px → 1440 起 62px 封顶），正文固定 */
  --t1:clamp(2.9rem,1rem + 3vw,3.9rem);   /* 1093→47  1280→54  1440+→62 */
  --t2:clamp(1.8rem,.9rem + 1.6vw,2.3rem);
  --t3:clamp(1.3rem,1rem + .5vw,1.5rem);
  --t4:1.0625rem;   /* 17px @16 */
  --t5:.78rem;      /* 12.5px @16 */
  --mono:"SF Mono",Menlo,Consolas,monospace;
  --sans:-apple-system,BlinkMacSystemFont,"PingFang SC","Hiragino Sans GB","Microsoft YaHei",sans-serif;
  --ez:cubic-bezier(.22,1,.36,1);
  --wrap:82.5rem;   /* 1320px @16，随根字号一起缩放 */
  /* 左右留白：随屏幕流动，但有上下限，任何分辨率下都不会顶到边 */
  --pad:clamp(1.25rem,3.4vw,3.25rem);
  /* --gut = 内容左边缘到视口左边的距离。所有「贴边」元素都用它，
     保证首屏左半幅、正文、表格三者左边缘永远对齐。
     CSS 兜底用 100vw（含滚动条，有几像素误差），site.js 会用精确值覆盖 */
  --gut:max(var(--pad),calc((100vw - var(--wrap))/2 + var(--pad)));
  --navh:5.75rem;   /* 92px @16 */
}
@media(max-width:1000px){:root{--navh:4.625rem}}
@media(max-width:600px){:root{--t1:2.2rem;--t2:1.6rem;--t3:1.25rem}}
/* clamp 兜底：不认 clamp()/min()/max() 的旧内核（Chromium<79, Safari<13.1）用固定值，否则标题掉回默认字号 */
@supports not (width:clamp(1px,2vw,3px)){:root{--t1:46px;--t2:30px;--t3:22px;--pad:32px;--gut:32px}}
*{box-sizing:border-box;margin:0;padding:0}
/* ══ 尺度 ══
   主流企业官网做法：根字号固定 16px、版心封顶、大屏只加留白；只有大标题用窄区间 clamp 随屏幕微调。
   （09-03 曾试过根字号随视口 14–20px 流动，用户反馈大屏上整体变大、列被撑折行，09-04 改回。）
   所有尺寸仍挂 rem：正文 / 导航 / 留白 / 容器 / 首屏区高 / 首页环形与泡泡直径都按同一刻度封顶，
   所以图片不会再随屏幕无限放大——这才是"字缩了图没缩"的正确修法。 */
html{scroll-behavior:smooth;font-size:16px}
body{font-family:var(--sans);background:#fff;color:var(--body);
  font-size:var(--t4);line-height:1.9;-webkit-font-smoothing:antialiased}
/* 浅色导航的内页：内容整体下移，不被导航盖住；首页深色首屏则让导航浮在图上 */
body:not(.hero-dark){padding-top:var(--navh)}
@media(max-width:560px){body{font-size:var(--t4);line-height:1.85}}
/* 任何情况下都不允许出现横向滚动条 */
html,body{overflow-x:hidden;overflow-x:clip;max-width:100%}  /* 先 hidden 后 clip：<Chromium 90 用 hidden 兜底 */
img{display:block;max-width:100%}
h1,h2,h3,h4,h5{color:var(--ink);font-weight:600;letter-spacing:-.03em;line-height:1.16;
  word-break:keep-all;overflow-wrap:break-word}
h1{font-size:var(--t1)}
h2{font-size:var(--t2)}
h3,h4,h5,h6{font-size:var(--t3)}
b,strong{color:var(--ink);font-weight:600}
a{color:var(--b600);text-decoration:none}

.wrap{max-width:var(--wrap);margin:0 auto;padding:0 var(--pad)}
.eyebrow{font-family:var(--mono);font-size:var(--t5);letter-spacing:.2em;
  text-transform:uppercase;color:var(--b600)}
.sr{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap}

/* ══════════ 顶部导航 ══════════ */
.nav{position:fixed;top:0;left:0;right:0;z-index:800;height:var(--navh);
  background:rgba(255,255,255,.94);-webkit-backdrop-filter:saturate(1.6) blur(16px);backdrop-filter:saturate(1.6) blur(16px);
  border-bottom:1px solid var(--line);transition:background .35s var(--ez),border-color .35s var(--ez)}
.nav .wrap{height:100%;display:flex;align-items:center;gap:34px}
.logo{display:flex;align-items:center;flex:0 0 auto}
/* 官网原始 logo 只有 116×50，这里按 0.68× 缩小显示以保持清晰，不放大 */
.logo img{width:6rem;height:auto}
body.hero-dark .nav .logo img{filter:brightness(1.28) saturate(1.12)}
body.hero-dark .nav.solid .logo img{filter:none}
.menu{display:flex;align-items:center;gap:4px;list-style:none;margin-left:auto}
.menu>li{position:relative}
.menu .nl{display:flex;align-items:center;gap:7px;font-family:var(--sans);font-size:var(--t4);
  color:var(--body);background:none;border:0;cursor:pointer;padding:24px 16px;
  letter-spacing:-.01em;transition:color .2s;line-height:1}
.menu .nl:hover,.menu li.open .nl{color:var(--b600)}
.menu .nl[aria-current]{color:var(--ink);font-weight:600}
.menu .nl i{font-style:normal;font-size:var(--t5);color:var(--mute);
  transition:transform .3s var(--ez)}
.menu li.open .nl i{transform:rotate(180deg);color:var(--b600)}
.menu .sub{position:absolute;top:100%;left:-6px;min-width:290px;background:#fff;
  border:1px solid var(--line);box-shadow:0 24px 54px -26px rgba(11,39,69,.34);
  padding:8px;opacity:0;visibility:hidden;transform:translateY(-8px);
  transition:opacity .25s var(--ez),transform .25s var(--ez),visibility .25s}
.menu li.open .sub{opacity:1;visibility:visible;transform:none}
.menu .sub a{display:block;padding:13px 16px 15px;color:var(--ink);font-size:var(--t4);
  font-weight:600;letter-spacing:-.02em;border-radius:2px;transition:background .18s}
.menu .sub a:hover{background:var(--b50);color:var(--b600)}
.menu .sub a em{display:block;font-style:normal;font-size:var(--t5);color:var(--mute);
  font-weight:400;letter-spacing:0;margin-top:3px;line-height:1.5}
.menu .sub a[aria-current]{background:var(--b50)}
.burger{display:none;margin-left:auto;background:none;border:1px solid var(--line2);
  border-radius:2px;padding:11px 15px;font-family:var(--mono);font-size:var(--t5);
  letter-spacing:.14em;color:var(--ink);cursor:pointer}

/* 首屏为深色时，导航透明浮在上面；滚动后变实 */
body.hero-dark .nav{background:transparent;border-bottom-color:transparent;-webkit-backdrop-filter:none;backdrop-filter:none}
body.hero-dark .nav .logo{color:#fff}
body.hero-dark .nav .logo em{color:#7FA0C0}
body.hero-dark .nav .menu .nl{color:#C3D3E1}
body.hero-dark .nav .menu .nl:hover,body.hero-dark .nav .menu li.open .nl{color:#fff}
body.hero-dark .nav .menu .nl[aria-current]{color:#fff}
body.hero-dark .burger{color:#fff;border-color:rgba(255,255,255,.35)}
body.hero-dark .nav.solid{background:rgba(255,255,255,.94);border-bottom-color:var(--line);
  -webkit-backdrop-filter:saturate(1.6) blur(16px);backdrop-filter:saturate(1.6) blur(16px)}
body.hero-dark .nav.solid .logo{color:var(--ink)}
body.hero-dark .nav.solid .logo em{color:var(--mute)}
body.hero-dark .nav.solid .menu .nl{color:var(--body)}
body.hero-dark .nav.solid .menu .nl[aria-current]{color:var(--ink)}
body.hero-dark .nav.solid .burger{color:var(--ink);border-color:var(--line2)}

@media(max-width:1000px){
  .menu{position:fixed;top:var(--navh);left:0;right:0;bottom:0;background:#fff;
    flex-direction:column;align-items:stretch;gap:0;padding:14px 0 40px;
    transform:translateY(-8px);opacity:0;visibility:hidden;transition:.28s var(--ez)}
  body.menu-open .menu{transform:none;opacity:1;visibility:visible}
  body.menu-open{overflow:hidden}
  .menu>li{border-bottom:1px solid var(--line); background: #fff;}
  .menu .nl{width:100%;padding:20px var(--pad);font-size:var(--t4);color:var(--ink)!important}
  .menu .sub{position:static;opacity:1;visibility:visible;transform:none;border:0;
    box-shadow:none;padding:0 0 10px;display:none;background:var(--b50)}
  .menu li.open .sub{display:block}
  .menu .sub a{padding:13px var(--pad) 14px}
  .burger{display:block}
}

/* ══════════ 审核标注（图片位 / 文案待定）══════════ */
.rev{position:fixed;right:20px;bottom:20px;z-index:850;display:flex;gap:8px;
  font-family:var(--mono);font-size:var(--t5);letter-spacing:.1em}
.rev button{background:#0B1620;color:#8FA6BC;border:1px solid #24384A;border-radius:3px;
  font:inherit;padding:11px 15px;cursor:pointer;transition:.18s;
  box-shadow:0 8px 24px -12px rgba(0,0,0,.6)}
.rev button:hover{color:#fff}
.rev button[aria-pressed=true]{border-color:var(--amber);color:#FFC46B;background:#2A1D08}
/* 内部备注块：纳入标注体系，跟随「图片位标注」开关显隐 */
.todo{margin-top:32px;padding:20px 24px;border:2px dashed var(--amber);
  background:#FBF5EC;font-size:var(--t5);line-height:1.75;color:var(--ink)}
.todo b{color:var(--amber-d)}
.todo .who{display:inline-block;margin-left:10px;font-family:var(--mono);
  font-size:var(--t5);letter-spacing:.08em;color:var(--amber-d)}
body:not(.tags) .todo{display:none}
@media(max-width:600px){.rev{right:10px;bottom:10px}.rev button{padding:10px 11px}}

.slot{position:relative;overflow:hidden;background:var(--b100)}
.slot>img{width:100%;height:100%;object-fit:cover}
.slot .stag{position:absolute;left:0;bottom:0;z-index:6;max-width:min(94%,500px);
  background:rgba(200,129,30,.94);color:#1B1206;padding:11px 15px 12px;
  font-size:var(--t5);line-height:1.55;transform:translateY(101%);transition:transform .35s var(--ez)}
body.tags .slot .stag{transform:none}
.slot .stag b{display:block;color:#1B1206;font-family:var(--mono);
  font-size:var(--t5);letter-spacing:.14em;margin-bottom:2px}
.slot::after{content:"";position:absolute;top:0;right:0;bottom:0;left:0;inset:0;z-index:5;pointer-events:none;
  box-shadow:inset 0 0 0 0 rgba(200,129,30,0);transition:box-shadow .35s}
body.tags .slot::after{box-shadow:inset 0 0 0 3px rgba(200,129,30,.9)}
/* 可用图库的位子用绿色区分——橙色=必须自己拍，绿色=买图就行 */
.slot.stock .stag{background:rgba(14,124,123,.94);color:#EAF6F5}
.slot.stock .stag b{color:#fff}
body.tags .slot.stock::after{box-shadow:inset 0 0 0 3px rgba(14,124,123,.9)}

/* 文案待定
   标签不能常驻在元素正上方——在行距紧的 dl / ul 里必然压住上一行。
   改成：常驻只留一个 9×9 角标（不占空间不遮字），悬停才浮出全文。 */
.tbd{position:relative}
body.copy .tbd{box-shadow:inset 0 0 0 2px rgba(18,96,168,.55);
  background:rgba(18,96,168,.05)}
body.copy .tbd::before{content:"";position:absolute;left:-2px;top:-2px;
  width:9px;height:9px;background:var(--b600);z-index:7}
body.copy .tbd::after{content:attr(data-tbd);position:absolute;left:0;bottom:100%;
  margin-bottom:5px;z-index:60;
  background:var(--b600);color:#fff;font-family:var(--mono);font-size:var(--t5);
  letter-spacing:.12em;padding:4px 10px 5px;white-space:nowrap;border-radius:2px;
  opacity:0;transform:translateY(4px);pointer-events:none;
  transition:opacity .2s var(--ez),transform .2s var(--ez);
  box-shadow:0 8px 22px -10px rgba(0,0,0,.55)}
body.copy .tbd:hover::after{opacity:1;transform:none}

/* ══════════ 内页首屏 ══════════ */
.phero{display:grid;grid-template-columns:1.05fr 1fr;min-height:min(64vh,35rem);
  background:var(--hero-grad);margin-top:0}
.phero .l{display:flex;align-items:center;
  padding:4.75rem clamp(2rem,4.6vw,5rem) 4.9rem var(--gut)}
.phero h1{color:var(--ink);font-size:var(--t1);margin:18px 0 0;text-wrap:balance}
.phero .eyebrow{color:var(--b600)}
.phero .crumb1{font-family:var(--mono);font-size:var(--t5);letter-spacing:.14em;
  color:var(--mute);margin-bottom:14px}
.phero .crumb1 a{color:var(--b600); cursor:pointer;}
.phero .lede{color:var(--body);font-size:var(--t4);max-width:27em;margin-top:26px}
.phero .kpis{display:flex;flex-wrap:wrap;gap:12px 40px;margin-top:26px;padding-top:20px;
  border-top:1px solid var(--line2)}
.phero .kpis div span{display:block;font-family:var(--mono);font-size:var(--t5);
  letter-spacing:.12em;color:var(--mute);margin-bottom:2px}
.phero .kpis div b{color:var(--ink);font-size:var(--t4)}
/* 首屏右半幅的图必须绝对定位。
   否则它会用自己的原始比例去撑高整个网格行——竖构图的照片能把首屏顶到
   两倍高（科研成果页就是这么变成 1053px 的）。
   绝对定位之后，首屏高度只由左边的文字和 min-height 决定，
   换成任何比例的照片都不会走样。 */
.phero>.slot>img{position:absolute;top:0;right:0;bottom:0;left:0;inset:0;width:100%;height:100%;object-fit:cover}
/* 矮屏（笔记本 1093x614 这类）：首屏文字块的上下留白收一点，
   否则文字长的页面（技术平台）首屏会比一屏还高，右边的图被切到屏外。 */
@media(min-width:921px) and (max-height:700px){
  .phero .l{padding-top:3.4rem;padding-bottom:3.5rem}}
@media(max-width:920px){.phero{grid-template-columns:1fr}
.phero h1{overflow-wrap:anywhere}
  .phero .l{padding:44px var(--pad) 44px}
  .phero>.slot{height:36vh;min-height:240px}}

/* 首页那套绿蓝点阵是全站唯一的视觉签名，只活在首页太可惜。
   在子页深蓝首屏的右下角落一簇静态散点，跨页看得出是同一个地方。 */
.phero,.intro{position:relative}
.phero::before,.intro::before{content:"";position:absolute;left:0;bottom:0;
  width:min(42%,460px);height:min(62%,260px);z-index:0;pointer-events:none;
  background:url("data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20240%20240%22%20width%3D%22240%22%20height%3D%22240%22%3E%3Ccircle%20cx%3D%2273.4%22%20cy%3D%22133.5%22%20r%3D%221.2%22%20fill%3D%22rgb%2816%2C96%2C168%29%22%20opacity%3D%220.205%22%2F%3E%3Ccircle%20cx%3D%2285.2%22%20cy%3D%22190.8%22%20r%3D%221.64%22%20fill%3D%22rgb%2816%2C96%2C168%29%22%20opacity%3D%220.208%22%2F%3E%3Ccircle%20cx%3D%22189.4%22%20cy%3D%22213.2%22%20r%3D%220.8%22%20fill%3D%22rgb%2816%2C96%2C168%29%22%20opacity%3D%220.125%22%2F%3E%3Ccircle%20cx%3D%22129.9%22%20cy%3D%2267.5%22%20r%3D%222.8%22%20fill%3D%22rgb%2816%2C96%2C168%29%22%20opacity%3D%220.194%22%2F%3E%3Ccircle%20cx%3D%22142.6%22%20cy%3D%22164.8%22%20r%3D%220.85%22%20fill%3D%22rgb%2816%2C96%2C168%29%22%20opacity%3D%220.197%22%2F%3E%3Ccircle%20cx%3D%2232.7%22%20cy%3D%2251.6%22%20r%3D%222.9%22%20fill%3D%22rgb%2840%2C168%2C48%29%22%20opacity%3D%220.149%22%2F%3E%3Ccircle%20cx%3D%22218.7%22%20cy%3D%22213.5%22%20r%3D%221.78%22%20fill%3D%22rgb%2840%2C168%2C48%29%22%20opacity%3D%220.071%22%2F%3E%3Ccircle%20cx%3D%22218.3%22%20cy%3D%22137.7%22%20r%3D%223.98%22%20fill%3D%22rgb%2840%2C168%2C48%29%22%20opacity%3D%220.121%22%2F%3E%3Ccircle%20cx%3D%22159.2%22%20cy%3D%2293.7%22%20r%3D%220.84%22%20fill%3D%22rgb%2840%2C168%2C48%29%22%20opacity%3D%220.156%22%2F%3E%3Ccircle%20cx%3D%2249.3%22%20cy%3D%2229.9%22%20r%3D%223.05%22%20fill%3D%22rgb%2816%2C96%2C168%29%22%20opacity%3D%220.082%22%2F%3E%3Ccircle%20cx%3D%22129.4%22%20cy%3D%22122.9%22%20r%3D%222.37%22%20fill%3D%22rgb%2840%2C168%2C48%29%22%20opacity%3D%220.076%22%2F%3E%3Ccircle%20cx%3D%22138.6%22%20cy%3D%22165.6%22%20r%3D%223.77%22%20fill%3D%22rgb%2816%2C96%2C168%29%22%20opacity%3D%220.134%22%2F%3E%3Ccircle%20cx%3D%22142.6%22%20cy%3D%22232.5%22%20r%3D%221.91%22%20fill%3D%22rgb%2840%2C168%2C48%29%22%20opacity%3D%220.089%22%2F%3E%3Ccircle%20cx%3D%22106.2%22%20cy%3D%22212.4%22%20r%3D%222.65%22%20fill%3D%22rgb%2840%2C168%2C48%29%22%20opacity%3D%220.071%22%2F%3E%3Ccircle%20cx%3D%22237.7%22%20cy%3D%22191.6%22%20r%3D%220.83%22%20fill%3D%22rgb%2816%2C96%2C168%29%22%20opacity%3D%220.168%22%2F%3E%3Ccircle%20cx%3D%22132.8%22%20cy%3D%22186.2%22%20r%3D%223.79%22%20fill%3D%22rgb%2840%2C168%2C48%29%22%20opacity%3D%220.074%22%2F%3E%3Ccircle%20cx%3D%22234.7%22%20cy%3D%2293.3%22%20r%3D%222.14%22%20fill%3D%22rgb%2840%2C168%2C48%29%22%20opacity%3D%220.14%22%2F%3E%3Ccircle%20cx%3D%22189.4%22%20cy%3D%22117.9%22%20r%3D%220.84%22%20fill%3D%22rgb%2840%2C168%2C48%29%22%20opacity%3D%220.147%22%2F%3E%3Ccircle%20cx%3D%22114.5%22%20cy%3D%22147.1%22%20r%3D%224.11%22%20fill%3D%22rgb%2840%2C168%2C48%29%22%20opacity%3D%220.214%22%2F%3E%3Ccircle%20cx%3D%22117.8%22%20cy%3D%2274.6%22%20r%3D%221.82%22%20fill%3D%22rgb%2840%2C168%2C48%29%22%20opacity%3D%220.08%22%2F%3E%3Ccircle%20cx%3D%22235.6%22%20cy%3D%22182.6%22%20r%3D%220.81%22%20fill%3D%22rgb%2840%2C168%2C48%29%22%20opacity%3D%220.143%22%2F%3E%3Ccircle%20cx%3D%22156.7%22%20cy%3D%22125.2%22%20r%3D%223.17%22%20fill%3D%22rgb%2816%2C96%2C168%29%22%20opacity%3D%220.128%22%2F%3E%3Ccircle%20cx%3D%22192.5%22%20cy%3D%22177.8%22%20r%3D%220.8%22%20fill%3D%22rgb%2816%2C96%2C168%29%22%20opacity%3D%220.101%22%2F%3E%3Ccircle%20cx%3D%22108.5%22%20cy%3D%22216.7%22%20r%3D%221.55%22%20fill%3D%22rgb%2816%2C96%2C168%29%22%20opacity%3D%220.178%22%2F%3E%3Ccircle%20cx%3D%2284.8%22%20cy%3D%22222.0%22%20r%3D%221.85%22%20fill%3D%22rgb%2840%2C168%2C48%29%22%20opacity%3D%220.066%22%2F%3E%3Ccircle%20cx%3D%22136.1%22%20cy%3D%2228.4%22%20r%3D%222.41%22%20fill%3D%22rgb%2840%2C168%2C48%29%22%20opacity%3D%220.193%22%2F%3E%3Ccircle%20cx%3D%22176.8%22%20cy%3D%22107.0%22%20r%3D%221.01%22%20fill%3D%22rgb%2840%2C168%2C48%29%22%20opacity%3D%220.108%22%2F%3E%3Ccircle%20cx%3D%22234.9%22%20cy%3D%22145.9%22%20r%3D%222.01%22%20fill%3D%22rgb%2840%2C168%2C48%29%22%20opacity%3D%220.109%22%2F%3E%3Ccircle%20cx%3D%22220.0%22%20cy%3D%2225.5%22%20r%3D%224.07%22%20fill%3D%22rgb%2840%2C168%2C48%29%22%20opacity%3D%220.152%22%2F%3E%3Ccircle%20cx%3D%22199.1%22%20cy%3D%2298.4%22%20r%3D%221.54%22%20fill%3D%22rgb%2840%2C168%2C48%29%22%20opacity%3D%220.089%22%2F%3E%3C%2Fsvg%3E") left bottom/contain no-repeat}
.phero>*,.intro>*{position:relative;z-index:1}

/* 跨页切换的交叉淡入。支持的浏览器（Chromium / Safari）生效，其余原样回退。 */
@view-transition{navigation:auto}
@media(prefers-reduced-motion:no-preference){
  ::view-transition-old(root){animation:vtOut .22s ease both}
  ::view-transition-new(root){animation:vtIn .28s ease both}}
@keyframes vtOut{to{opacity:0}}
@keyframes vtIn{from{opacity:0}}

/* ══════════ 首屏开场 · 一套语言，每页一种变奏 ══════════
   为什么不用 clip-path：它是二值裁切，边缘永远是硬的，动起来像一把刀在推——
   这就是「生硬」的来源。改用 mask 渐变：遮罩本身带一段羽化，扫过时边缘是柔的。
   另一个好处是 mask-position 走合成器，不像大面积 clip-path 那样每帧重绘，
   about 首屏那种整屏高度的深色块也不会再闪。

   每页只改三件事：幕布从哪扫、照片往哪揭、文字从哪进（见下方 op-* 查表）。 */
html.fxjs .phero,html.fxjs .intro{
  -webkit-mask-image:var(--mask,linear-gradient(to bottom,#000 34%,rgba(0,0,0,.55) 50%,transparent 66%));
  mask-image:var(--mask,linear-gradient(to bottom,#000 34%,rgba(0,0,0,.55) 50%,transparent 66%));
  -webkit-mask-size:var(--mask-size,100% 300%);mask-size:var(--mask-size,100% 300%);
  -webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;
  animation:sweep 1.35s cubic-bezier(.5,.02,.2,1) both}
@keyframes sweep{from{-webkit-mask-position:var(--mask-from);mask-position:var(--mask-from)}
  to{-webkit-mask-position:var(--mask-to);mask-position:var(--mask-to)}}

/* 照片：同一套软遮罩，慢半拍、再长一点，形成「幕布里还有一层」的纵深 */
html.fxjs .phero>.slot>img,html.fxjs .intro>.slot>img{
  -webkit-mask-image:var(--imask,linear-gradient(to left,#000 34%,rgba(0,0,0,.55) 50%,transparent 66%));
  mask-image:var(--imask,linear-gradient(to left,#000 34%,rgba(0,0,0,.55) 50%,transparent 66%));
  -webkit-mask-size:var(--imask-size,300% 100%);mask-size:var(--imask-size,300% 100%);
  -webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;
  animation:sweepImg 1.9s cubic-bezier(.5,.02,.2,1) .4s both}
@keyframes sweepImg{
  from{-webkit-mask-position:var(--imask-from);mask-position:var(--imask-from);opacity:.55}
  to{-webkit-mask-position:var(--imask-to);mask-position:var(--imask-to);opacity:1}}

/* ── 每页的变奏 ──
   竖向扫：mask-size 100% 300%，position 从 0% 100%（遮罩在下=内容未显）到 0% 0%
   横向扫：mask-size 300% 100%，同理换轴。方向靠渐变角度 + 起止位置一起定。 */
html.op-about{                                   /* 十年历程自上而下铺开 */
  --mask-from:0% 100%;--mask-to:0% 0%;
  --imask-from:0% 0%;--imask-to:100% 0%;--fx-from:translateY(26px)}
html.op-tech{                                    /* 顺着链条推进的方向横扫 */
  --mask:linear-gradient(to right,#000 34%,rgba(0,0,0,.55) 50%,transparent 66%);
  --mask-size:300% 100%;--mask-from:100% 0%;--mask-to:0% 0%;
  --imask:linear-gradient(to right,#000 34%,rgba(0,0,0,.55) 50%,transparent 66%);
  --imask-from:100% 0%;--imask-to:0% 0%;--fx-from:translateX(-28px)}
html.op-pipeline{                                /* 幕布横扫、照片自下升起 */
  --mask:linear-gradient(to right,#000 34%,rgba(0,0,0,.55) 50%,transparent 66%);
  --mask-size:300% 100%;--mask-from:100% 0%;--mask-to:0% 0%;
  --imask:linear-gradient(to top,#000 34%,rgba(0,0,0,.55) 50%,transparent 66%);
  --imask-size:100% 300%;--imask-from:0% 0%;--imask-to:0% 100%;--fx-from:translateX(-28px)}
html.op-science{                                 /* 证据自下而上垒起 */
  --mask:linear-gradient(to top,#000 34%,rgba(0,0,0,.55) 50%,transparent 66%);
  --mask-from:0% 0%;--mask-to:0% 100%;
  --imask:linear-gradient(to top,#000 34%,rgba(0,0,0,.55) 50%,transparent 66%);
  --imask-size:100% 300%;--imask-from:0% 0%;--imask-to:0% 100%;--fx-from:translateY(26px)}
html.op-trials{                                  /* 自中间向上下化开，患者页要稳 */
  --mask:linear-gradient(to bottom,transparent 0%,rgba(0,0,0,.45) 13%,#000 31%,#000 69%,rgba(0,0,0,.45) 87%,transparent 100%);
  --mask-size:100% 300%;--mask-from:0% 50%;--mask-to:0% 50%;
  --imask:radial-gradient(ellipse 140% 100% at 50% 50%,#000 30%,rgba(0,0,0,.5) 58%,transparent 78%);
  --imask-size:300% 300%;--imask-from:50% 50%;--imask-to:50% 50%;--fx-from:translateY(22px)}
html.op-partner{                                 /* 照片自中缝向两侧打开 */
  --mask-from:0% 100%;--mask-to:0% 0%;
  --imask:linear-gradient(to right,transparent 0%,rgba(0,0,0,.45) 13%,#000 31%,#000 69%,rgba(0,0,0,.45) 87%,transparent 100%);
  --imask-size:300% 100%;--imask-from:50% 0%;--imask-to:50% 0%;--fx-from:translateX(-28px)}
html.op-culture{                                 /* 由下往上生长 */
  --mask:linear-gradient(to top,#000 34%,rgba(0,0,0,.55) 50%,transparent 66%);
  --mask-from:0% 0%;--mask-to:0% 100%;
  --imask-from:0% 0%;--imask-to:100% 0%;--fx-from:translateY(28px)}
html.op-careers{                                 /* 上下对开 */
  --mask:linear-gradient(to bottom,transparent 0%,rgba(0,0,0,.45) 13%,#000 31%,#000 69%,rgba(0,0,0,.45) 87%,transparent 100%);
  --mask-size:100% 300%;--mask-from:0% 50%;--mask-to:0% 50%;
  --imask:linear-gradient(to right,#000 34%,rgba(0,0,0,.55) 50%,transparent 66%);
  --imask-from:100% 0%;--imask-to:0% 0%;--fx-from:translateY(26px)}
html.op-news{                                    /* 逆向横扫 */
  --mask:linear-gradient(to left,#000 34%,rgba(0,0,0,.55) 50%,transparent 66%);
  --mask-size:300% 100%;--mask-from:0% 0%;--mask-to:100% 0%;
  --imask-from:0% 0%;--imask-to:100% 0%;--fx-from:translateX(28px)}
html.op-contact{                                 /* 上下对开后照片落下 */
  --mask:linear-gradient(to bottom,transparent 0%,rgba(0,0,0,.45) 13%,#000 31%,#000 69%,rgba(0,0,0,.45) 87%,transparent 100%);
  --mask-size:100% 300%;--mask-from:0% 50%;--mask-to:0% 50%;
  --imask:linear-gradient(to bottom,#000 34%,rgba(0,0,0,.55) 50%,transparent 66%);
  --imask-size:100% 300%;--imask-from:0% 100%;--imask-to:0% 0%;--fx-from:translateY(24px)}

/* about 例外：它的首屏是「简介全文 + 四格数据」，高度接近整屏，
   是全站面积最大的一块。遮罩扫过这么大的元素，每帧都要重算遮罩通道——
   CEO 反馈的「有时候加载会闪一下」就是这里。这一页索性不做遮罩，
   底色整体淡入、照片自己揭开，反而成了另一种开场。 */
html.op-about.fxjs .intro{
  -webkit-mask-image:none;mask-image:none;
  animation:fadeSoft 1.15s cubic-bezier(.4,0,.2,1) both}
@keyframes fadeSoft{from{opacity:0}to{opacity:1}}

/* 中间向两侧化开的两页：位置不动，靠遮罩自身放大来「化开」 */
/* ⚠️ spread/spreadImg 系列只在 keyframes 里动 mask-size，没动 mask-position，
   于是 position 回落到默认的 0% 0%（左上角对齐）——元素落在遮罩的半透明过渡段上，
   整块首屏变成半透明，白底透上来把颜色冲淡，上下两端还发虚。
   这几条动画必须把 position 显式钉在中心。 */
html.op-trials.fxjs .phero,html.op-careers.fxjs .phero,html.op-contact.fxjs .phero{
  -webkit-mask-position:center;mask-position:center;
  animation:spread 1.35s cubic-bezier(.5,.02,.2,1) both}
@keyframes spread{from{-webkit-mask-size:100% 7%;mask-size:100% 7%}
  to{-webkit-mask-size:100% 300%;mask-size:100% 300%}}
html.op-trials.fxjs .phero>.slot>img{
  -webkit-mask-position:center;mask-position:center;
  animation:spreadImg 1.9s cubic-bezier(.5,.02,.2,1) .4s both}
@keyframes spreadImg{from{-webkit-mask-size:60% 60%;mask-size:60% 60%;opacity:.55}
  to{-webkit-mask-size:300% 300%;mask-size:300% 300%;opacity:1}}
html.op-partner.fxjs .phero>.slot>img{
  -webkit-mask-position:center;mask-position:center;
  animation:spreadImgH 1.9s cubic-bezier(.5,.02,.2,1) .4s both}
@keyframes spreadImgH{from{-webkit-mask-size:7% 100%;mask-size:7% 100%;opacity:.55}
  to{-webkit-mask-size:300% 100%;mask-size:300% 100%;opacity:1}}

/* 导航跟着一起开场，页面才像「整体拉开」而不是「局部在动」 */
html.fxjs .nav{animation:navin 1s var(--ez) both}
/* 导航是关键 UI，不能被入场动画扣住：动画没跑完/没跑（节流、旧内核），site.js 1.6s 后加 fxdone 强制显示 */
html.fxjs.fxdone .nav{animation:none;opacity:1;transform:none}
@keyframes navin{from{opacity:0;transform:translateY(-10px)}to{opacity:1;transform:none}}
/* ══ 全站进场：只用「渐入上浮」一种语汇 ══
   .fx 的初始隐藏由 JS 挂 html.fxjs 才生效——脚本不执行时页面原样可见。 */
/* 慢展示：位移走急出曲线（利落收尾），透明度走平缓曲线（「显影」过程拉满全程） */
html.fxjs .fx{opacity:0;transform:var(--fx-from,translateY(28px));
  transition:opacity 1.8s cubic-bezier(.25,.46,.45,.94),transform 1.6s var(--ez)}
html.fxjs .fx.fxin{opacity:1;transform:none}
@keyframes rise{from{opacity:0;transform:translateY(26px)}to{opacity:1;transform:none}}

/* ══════════ 长页收尾 CTA（culture / about 共用）══════════ */
.cta{border:2px solid var(--ink);background:#fff;padding:36px 40px 40px;margin-top:80px;
  display:grid;grid-template-columns:1fr auto;gap:30px;align-items:center}
.cta h2{font-size:var(--t2);margin-bottom:8px}
.cta p{font-size:var(--t4);max-width:40em}
.gobtn{display:inline-flex;align-items:center;gap:12px;background:var(--b600);color:#fff;
  font-size:var(--t4);font-weight:600;letter-spacing:-.01em;padding:17px 32px;border-radius:2px;
  white-space:nowrap;transition:background .22s var(--ez),transform .22s var(--ez),box-shadow .22s var(--ez)}
.gobtn:hover{background:var(--b800);transform:translateY(-2px);
  box-shadow:0 12px 26px -12px rgba(18,96,168,.7)}
.gobtn i{font-style:normal;transition:transform .35s var(--ez)}
.gobtn:hover i{transform:translateX(6px)}
@media(max-width:760px){.cta{grid-template-columns:1fr}.gobtn{justify-content:center}}

/* ══════════ 通用节 ══════════ */
section.blk{padding:92px 0 98px}
section.blk.tight{padding:64px 0 70px}
section.blk.dk{background:var(--surface2);color:var(--body)}
section.blk.dk h2,section.blk.dk h3,section.blk.dk h4{color:var(--ink)}
section.blk.dk .eyebrow{color:var(--b300)}
section.blk.alt{background:var(--b50);border-top:1px solid var(--line);border-bottom:1px solid var(--line)}
.shead{max-width:34em;margin-bottom:40px}
.shead h2{font-size:var(--t2);margin:14px 0 14px;text-wrap:balance}
.shead p{font-size:var(--t4)}
section.blk.dk .shead p{color:#B9CBDA}
.hint{font-size:var(--t4);color:var(--mute);margin-top:18px}
.more{display:inline-flex;align-items:center;gap:11px;margin-top:28px;
  font-family:var(--mono);font-size:var(--t5);letter-spacing:.1em;color:var(--b600)}
.more i{font-style:normal;transition:transform .4s var(--ez)}
.more:hover i{transform:translateX(6px)}
section.blk.dk .more{color:var(--b300)}
.filters{display:flex;flex-wrap:wrap;gap:9px;margin-bottom:20px}
.filters button{font-family:var(--sans);font-size:var(--t4);padding:9px 19px;border-radius:2px;
  border:1px solid var(--line2);background:#fff;color:var(--body);cursor:pointer;transition:.2s}
.filters button:hover{border-color:var(--b600);color:var(--b600)}
.filters button[aria-pressed=true]{background:var(--ink);border-color:var(--ink);color:#fff}
.legend{display:flex;flex-wrap:wrap;gap:10px 26px;align-items:center;font-size:var(--t4);margin-bottom:22px}
.legend i{display:inline-block;width:13px;height:13px;border-radius:2px;margin-right:8px;vertical-align:-1px}
.stats{display:grid;grid-template-columns:repeat(auto-fit,minmax(180px,1fr));
  gap:1px;background:var(--line);border:1px solid var(--line)}
.stats .st{background:#fff;padding:28px 24px 30px}
.stats .st b{display:block;font-size:var(--t2);color:var(--ink);
  letter-spacing:-.04em;line-height:1.05}
.stats .st span{display:block;font-size:var(--t4);color:var(--mute);margin-top:7px;line-height:1.6}
.chips{display:flex;flex-wrap:wrap;gap:7px}
.chips span{border:1px solid var(--line2);padding:5px 12px;border-radius:2px;
  font-size:var(--t4);color:var(--ink);background:#fff}

/* ══════════ 页脚 ══════════ */
footer.site{background:var(--surface);color:var(--body);padding:76px 0 40px;font-size:var(--t4);
  border-top:1px solid var(--line2)}
footer.site .cols{display:grid;grid-template-columns:1.5fr repeat(4,1fr);gap:36px;
  padding-bottom:52px;border-bottom:1px solid var(--line2)}
footer.site h5{color:var(--ink);font-size:var(--t4);font-family:var(--mono);letter-spacing:.12em;
  font-weight:400;margin-bottom:16px}
footer.site p{line-height:1.85;font-size:var(--t4)}
footer.site ul{list-style:none}
footer.site li{padding:5px 0}
footer.site a{color:var(--body);font-size:var(--t4)}
footer.site a:hover{color:var(--b600)}
footer.site .base{display:flex;flex-wrap:wrap;gap:12px 32px;justify-content:space-between;
  padding-top:26px;font-size:var(--t5);color:var(--mute)}
@media(max-width:880px){footer.site .cols{grid-template-columns:1fr 1fr;gap:32px}}
@media(max-width:560px){footer.site .cols{grid-template-columns:1fr}}

@media(prefers-reduced-motion:reduce){*{animation:none!important;transition:none!important}}
/* 打印 / 另存 PDF：入场动效元素必须全部可见（曾有 90% 文字 opacity:0 的空白 PDF），导航不固定 */
@media print{html.fxjs .fx,html.fxjs .fx *{opacity:1!important;transform:none!important;visibility:visible!important;transition:none!important;animation:none!important}.nav{position:static}.skip,.rev,.cue{display:none!important}}

/* ── 可访问性补丁（2026-09-02 审计）── */
.sr{position:absolute!important;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap}
a.skip{position:absolute;left:12px;top:-60px;z-index:2000;background:var(--b600);color:#fff;padding:9px 14px;
  border-radius:3px;font-size:var(--t4);transition:top .15s}
a.skip:focus{top:12px;outline:2px solid #fff;outline-offset:2px}
/* 正文里的链接不能只靠颜色区分（1.4.1）：加下划线；导航/卡片/按钮类不加 */
.blk p a,.lede a,.doc a,.jp p a,.gp p a,.intro p a{text-decoration:underline;text-underline-offset:.16em;text-decoration-thickness:1px}
/* 页脚标题：视觉沿用原 h5 样式 */
footer.site h3.fh{font-size:var(--t5);font-family:var(--mono);letter-spacing:.14em;color:var(--mute);font-weight:400;margin-bottom:12px}



.pagination_div{margin-top: 25px;}

.text-center{text-align:center;}

.pagination{display: inline-table;}
.pagination li{float: left; list-style:none;}
.pagination li a,.pagination li span{display: block; border:1px #eee solid; min-width: 30px; padding:8px 10px;}
.pagination li .disabled{color: #ccc;}
.pagination li .current{background: #122980; border-color: #122980; color: #fff;}