/* ============================================================
   自然博物 · 精修版
   设计依据：
   · ui-ux-pro-max —— Portfolio/Personal → Typography-Driven + Minimalism
     配色 ink + paper / one accent；Pattern: Intro → case studies → contact
   · impeccable —— 卡片不是必需（间距与对齐创造分组）；5 级字号模块化比例；
     极端字号跳级；纹理（grain / halftone）；一个 hero moment；ease-out-expo
   · UX 指南 —— 正文 ≥16px、行长 60-75ch、≤2 字族、4pt 间距基准、
     对比度 ≥4.5:1、焦点可见、无横向滚动、prefers-reduced-motion
   ============================================================ */

/* ---- 语义化 token ---- */
:root{
  /* 纸：带绿灰调的暖中性，不使用纯白纯黑 */
  --paper:#F2EEE2;
  --paper-2:#EAE4D3;
  --paper-3:#E1D9C4;
  --ink:#20241E;          /* 正文 12.4:1 */
  --ink-2:#4B524A;        /* 次级 7.1:1 */
  --ink-3:#63695F;        /* 元信息 4.9:1 */
  --moss:#2C4436;         /* 结构色 9.8:1 */
  --ochre:#8A5A2B;        /* 唯一强调色，仅用于大字与图形 4.8:1 */
  --rule:#CFC7B0;
  --rule-2:#B9B09A;

  /* 4pt 间距基准 */
  --s1:4px; --s2:8px; --s3:12px; --s4:16px; --s5:24px;
  --s6:32px; --s7:48px; --s8:64px; --s9:96px;

  /* 5 级字号，1.333 模块化比例 */
  --t-xs:0.75rem;   /* 12  图版号 / 标签 */
  --t-sm:0.875rem;  /* 14  元信息 */
  --t-base:1.0625rem; /* 17 正文 */
  --t-lg:1.3125rem;   /* 21 小标题 */
  --t-xl:clamp(2.125rem, 5.4vw, 4.75rem); /* 章节标题 */

  --serif:"Source Han Serif SC","Noto Serif CJK SC","Songti SC","STSong",SimSun,Georgia,serif;
  --sans:"PingFang SC","Microsoft YaHei",system-ui,-apple-system,"Segoe UI",sans-serif;
  --mono:ui-monospace,"SFMono-Regular",Consolas,"Liberation Mono",monospace;

  --maxw:1120px;
  --lead:1.85;

  /* ---- 可选照片位（默认关闭）----
     把图片放进 assets/img/ 后，把下面两行的 none 改成 url("assets/img/文件名.jpg") 即可：
       --photo-hero   全屏微距图，叠在 Hero 背景（低透明度 · multiply 混合）
       --photo-card   标本卡正面底图                                        */
  --photo-hero:none;
  --photo-card:none;
}

*,*::before,*::after{box-sizing:border-box}
html{scroll-behavior:smooth;scroll-padding-top:72px}
body{
  margin:0;background:var(--paper);color:var(--ink);
  font-family:var(--sans);font-size:var(--t-base);line-height:var(--lead);
  -webkit-font-smoothing:antialiased;text-rendering:optimizeLegibility;
  font-kerning:normal;
  /* 纸纹：SVG 噪声 + 极淡暖斑，低强度叠加 */
  background-image:
    url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='160' height='160'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.85' numOctaves='3' stitchTiles='stitch'/%3E%3CfeColorMatrix type='saturate' values='0'/%3E%3C/filter%3E%3Crect width='160' height='160' filter='url(%23n)' opacity='0.35'/%3E%3C/svg%3E"),
    radial-gradient(circle at 18% 6%, rgba(138,90,43,.055), transparent 45%),
    radial-gradient(circle at 92% 88%, rgba(44,68,54,.05), transparent 48%);
  background-size:160px 160px,100% 100%,100% 100%;
  background-attachment:fixed,fixed,fixed;
}
a{color:inherit;text-decoration:none}
h1,h2,h3{margin:0;font-weight:400}
p{margin:0}
::selection{background:var(--ochre);color:var(--paper)}

.wrap{max-width:var(--maxw);margin:0 auto;padding:0 var(--s5)}
.mono{font-family:var(--mono)}
.serif{font-family:var(--serif)}

/* ---- 无障碍：跳过链接 + 焦点环 ---- */
.skip{position:absolute;left:-9999px;top:0;background:var(--moss);color:var(--paper);padding:var(--s3) var(--s4);z-index:100}
.skip:focus{left:var(--s4);top:var(--s4)}
:focus-visible{outline:2px solid var(--ochre);outline-offset:3px;border-radius:2px}

/* ---- 顶栏 ---- */
.top{
  position:sticky;top:0;z-index:50;
  background:color-mix(in srgb,var(--paper) 88%,transparent);
  backdrop-filter:blur(10px);
  border-bottom:1px solid var(--rule);
}
.top-in{max-width:var(--maxw);margin:0 auto;padding:var(--s4) var(--s5);display:flex;align-items:center;gap:var(--s6)}
.mark{
  width:38px;height:38px;flex:0 0 auto;border-radius:50%;
  border:1px solid var(--moss);color:var(--moss);
  display:flex;align-items:center;justify-content:center;
  font-family:var(--serif);font-size:18px;
}
.brand{display:flex;flex-direction:column;line-height:1.25}
.brand b{font-family:var(--serif);font-size:1.0625rem;font-weight:400}
.brand span{font-family:var(--mono);font-size:.625rem;letter-spacing:.18em;color:var(--ink-3);text-transform:uppercase}
.nav{margin-left:auto;display:flex;gap:var(--s5)}
.nav a{
  font-family:var(--mono);font-size:var(--t-sm);color:var(--ink-2);
  padding:var(--s2) 0;position:relative;
}
.nav a::after{content:"";position:absolute;left:0;right:0;bottom:0;height:1px;background:var(--ochre);transform:scaleX(0);transform-origin:left;transition:transform .35s cubic-bezier(.22,.61,.36,1)}
.nav a:hover{color:var(--ink)}
.nav a:hover::after{transform:scaleX(1)}
.burger{display:none;margin-left:auto;background:none;border:1px solid var(--rule-2);border-radius:8px;padding:7px 11px;font:inherit;cursor:pointer;color:var(--ink)}

/* ---- HERO：70/30 非对称 ---- */
.hero{padding:var(--s9) 0 var(--s8);position:relative;overflow:hidden}
.hero::after{
  content:"";position:absolute;inset:0;pointer-events:none;z-index:0;
  background-image:var(--photo-hero);background-size:cover;background-position:center;
  opacity:.16;mix-blend-mode:multiply;
}
.hero-grid{display:grid;grid-template-columns:1.62fr 1fr;gap:var(--s8);align-items:end;position:relative;z-index:1}
/* 半调网点装饰，呼应"印刷"质感 */
.hero::before{
  content:"";position:absolute;right:-60px;top:-40px;width:420px;height:420px;pointer-events:none;
  background-image:radial-gradient(var(--rule-2) 1px,transparent 1px);
  background-size:11px 11px;opacity:.42;
}
.kicker{
  font-family:var(--mono);font-size:var(--t-xs);letter-spacing:.22em;text-transform:uppercase;
  color:var(--ochre);margin-bottom:var(--s5);display:flex;align-items:center;gap:var(--s3);
}
.kicker::after{content:"";flex:0 0 88px;height:1px;background:var(--rule-2)}
.hero h1{
  font-family:var(--serif);
  font-size:clamp(2.75rem,7.2vw,6.25rem);
  line-height:1.06;letter-spacing:-.02em;
}
.hero h1 em{font-style:italic;color:var(--moss);position:relative;white-space:nowrap}
.hero h1 em::after{content:"";position:absolute;left:0;right:0;bottom:.1em;height:2px;background:var(--ochre);opacity:.7}
.latin{font-family:var(--serif);font-style:italic;color:var(--ink-3);font-size:var(--t-lg);margin-top:var(--s4)}
.lead{
  margin-top:var(--s6);max-width:34em;color:var(--ink-2);font-size:var(--t-lg);line-height:1.72;
}
.lead b{color:var(--ink);font-weight:500}
.cta-row{display:flex;flex-wrap:wrap;gap:var(--s4);margin-top:var(--s6);align-items:center}
.btn{
  display:inline-block;padding:.85em 1.9em;border-radius:2px;font-size:var(--t-base);
  border:1px solid var(--moss);transition:.32s cubic-bezier(.22,.61,.36,1);
}
.btn.p{background:var(--moss);color:var(--paper)}
.btn.p:hover{background:#1D2F24;border-color:#1D2F24}
.btn.s{border-color:var(--rule-2);color:var(--ink)}
.btn.s:hover{border-color:var(--moss);background:rgba(44,68,54,.05)}
.cta-note{font-family:var(--mono);font-size:var(--t-xs);color:var(--ink-3);letter-spacing:.06em}

/* ---- Hero moment：可翻转的标本卡 ---- */
.flip{perspective:1400px;aspect-ratio:3/4;max-width:330px;margin-left:auto;width:100%}
.flip-in{
  position:relative;width:100%;height:100%;transform-style:preserve-3d;
  transition:transform .9s cubic-bezier(.22,.61,.36,1);
}
.flip:hover .flip-in,.flip:focus-within .flip-in{transform:rotateY(180deg)}
.face{
  position:absolute;inset:0;backface-visibility:hidden;
  border:1px solid var(--rule-2);
  background-color:var(--paper-2);
  background-image:var(--photo-card);background-size:cover;background-position:center;
  padding:var(--s5);display:flex;flex-direction:column;
}
.face.back{transform:rotateY(180deg);background-color:var(--moss);background-image:none;color:var(--paper);border-color:var(--moss)}
.face .tag{font-family:var(--mono);font-size:var(--t-xs);letter-spacing:.16em;color:var(--ink-3);text-transform:uppercase}
.face h3{font-family:var(--serif);font-size:1.75rem;margin-top:var(--s4);line-height:1.2}
.face .sci{font-family:var(--serif);font-style:italic;color:var(--ochre);font-size:var(--t-base);margin-top:var(--s1)}
.face .glyph{
  margin:auto 0;font-family:var(--serif);font-size:5.5rem;line-height:1;color:var(--moss);opacity:.9;
}
.face .foot{font-family:var(--mono);font-size:var(--t-xs);letter-spacing:.08em;color:var(--ink-3);border-top:1px solid var(--rule);padding-top:var(--s3)}
.face.back .tag{color:#9DB3A3}
.face.back .sci{color:#E0B98A}
.face.back .foot{color:#9DB3A3;border-color:rgba(242,238,226,.25)}
.face.back .glyph{color:var(--paper);opacity:.85}
.spec-row{display:flex;justify-content:space-between;gap:var(--s3);font-size:var(--t-sm);padding:7px 0;border-bottom:1px dotted rgba(242,238,226,.25)}
.spec-row:last-of-type{border-bottom:none}
.spec-row b{font-family:var(--mono);font-size:var(--t-xs);letter-spacing:.12em;color:#9DB3A3;font-weight:400}
.spec-row span{text-align:right}
.flip-hint{font-family:var(--mono);font-size:var(--t-xs);color:var(--ink-3);letter-spacing:.1em;text-align:center;margin-top:var(--s3)}

/* ---- 章节骨架 ---- */
.sec{padding:var(--s9) 0;border-top:1px solid var(--rule)}
.sec-head{display:grid;grid-template-columns:1fr 3fr;gap:var(--s7);align-items:start;margin-bottom:var(--s8)}
.sec-no{font-family:var(--serif);font-size:clamp(3.5rem,8vw,7.5rem);line-height:.78;letter-spacing:-.04em;color:var(--paper-3);-webkit-text-stroke:1px var(--rule-2)}
.sec-head h2{font-family:var(--serif);font-size:var(--t-xl);line-height:1.12;letter-spacing:-.015em;max-width:14em}
.sec-head .sub{margin-top:var(--s3);color:var(--ink-3);font-family:var(--serif);font-style:italic;font-size:var(--t-base)}

/* ---- 01 标本记录：正文 + 侧栏 ---- */
.prose-cols{display:grid;grid-template-columns:1fr 1fr;gap:var(--s8);align-items:start}
.prose p{color:var(--ink-2);margin-bottom:var(--s5);max-width:38em}
.prose p b{color:var(--ink);font-weight:500}
.drop::first-letter{
  float:left;font-family:var(--serif);font-size:5.25rem;line-height:.82;
  padding:.08em .14em 0 0;color:var(--moss);
}
.ledger{border-top:1px solid var(--rule)}
.ledger div{display:flex;justify-content:space-between;gap:var(--s4);padding:var(--s3) 0;border-bottom:1px dotted var(--rule-2);font-size:var(--t-sm)}
.ledger b{font-family:var(--mono);font-size:var(--t-xs);letter-spacing:.14em;color:var(--ink-3);font-weight:400;text-transform:uppercase}
.ledger span{color:var(--ink-2);text-align:right}

/* ---- 02 能力：词典式，不用卡片 ---- */
.dict{border-top:1px solid var(--rule)}
.entry{
  display:grid;grid-template-columns:minmax(200px,.9fr) 1.4fr;gap:var(--s7);
  padding:var(--s6) 0;border-bottom:1px solid var(--rule);
  transition:background .35s cubic-bezier(.22,.61,.36,1);
}
.entry:hover{background:rgba(234,228,211,.55)}
.entry h3{font-family:var(--serif);font-size:var(--t-lg);line-height:1.3;letter-spacing:-.005em}
.entry .en{font-family:var(--mono);font-size:var(--t-xs);letter-spacing:.16em;color:var(--ochre);text-transform:uppercase;margin-top:var(--s2);display:block}
.entry .body{color:var(--ink-2);font-size:var(--t-base);max-width:40em}
.entry .body p{margin-bottom:var(--s3)}
.entry .facts{margin-top:var(--s4);display:flex;flex-wrap:wrap;gap:var(--s2) var(--s5);font-family:var(--mono);font-size:var(--t-xs);letter-spacing:.05em;color:var(--ink-3)}
.entry .facts b{color:var(--moss);font-weight:500}

/* ---- 03 图版：交错网格 ---- */
.plates{display:grid;grid-template-columns:repeat(6,1fr);gap:var(--s6) var(--s5)}
.plate{padding-top:var(--s5);border-top:1px solid var(--rule)}
.plate:nth-child(1){grid-column:span 4}
.plate:nth-child(2){grid-column:span 2;margin-top:var(--s8)}
.plate:nth-child(3){grid-column:span 2;margin-top:var(--s8)}
.plate:nth-child(4){grid-column:span 4}
.plate:nth-child(5){grid-column:span 3}
.plate:nth-child(6){grid-column:span 3}
.plate .no{font-family:var(--mono);font-size:var(--t-xs);letter-spacing:.16em;color:var(--ochre);text-transform:uppercase}
.plate h3{font-family:var(--serif);font-size:1.5rem;line-height:1.25;margin:var(--s3) 0 var(--s3);letter-spacing:-.01em}
.plate p{color:var(--ink-2);font-size:var(--t-sm);max-width:36em}
.plate .nums{display:flex;gap:var(--s6);margin-top:var(--s4);padding-top:var(--s3);border-top:1px dotted var(--rule-2)}
.plate .nums b{display:block;font-family:var(--serif);font-size:1.5rem;line-height:1;color:var(--moss)}
.plate .nums span{font-family:var(--mono);font-size:.625rem;letter-spacing:.1em;color:var(--ink-3);text-transform:uppercase}

/* ---- 04 履历：表格式，不用卡片 ---- */
.cv{width:100%;border-collapse:collapse;font-size:var(--t-base)}
.cv th{
  text-align:left;font-family:var(--mono);font-size:var(--t-xs);letter-spacing:.14em;color:var(--ink-3);
  text-transform:uppercase;font-weight:400;padding:var(--s3) var(--s4) var(--s3) 0;border-bottom:1px solid var(--ink);
}
.cv td{padding:var(--s5) var(--s4) var(--s5) 0;border-bottom:1px solid var(--rule);vertical-align:top;color:var(--ink-2)}
.cv td.when{font-family:var(--mono);font-size:var(--t-sm);color:var(--ochre);white-space:nowrap;width:12.5em}
.cv td h3{font-family:var(--serif);font-size:var(--t-lg);color:var(--ink);margin-bottom:var(--s1)}
.cv tr:hover td{background:rgba(234,228,211,.5)}

/* ---- 05 联络 ---- */
.hire{display:grid;grid-template-columns:1.3fr 1fr;gap:var(--s8);align-items:start}
.hire h3{font-family:var(--serif);font-size:var(--t-xl);line-height:1.14;letter-spacing:-.015em}
.hire h3 em{font-style:italic;color:var(--ochre)}
.hire p{color:var(--ink-2);max-width:32em;margin-top:var(--s5)}
.contact{border-top:1px solid var(--rule)}
.contact div{display:flex;justify-content:space-between;gap:var(--s4);padding:var(--s3) 0;border-bottom:1px dotted var(--rule-2);font-size:var(--t-sm)}
.contact b{font-family:var(--mono);font-size:var(--t-xs);letter-spacing:.14em;color:var(--ink-3);font-weight:400;text-transform:uppercase}
.contact span{color:var(--ink-2);text-align:right}
.contact a{text-decoration:underline;text-underline-offset:3px;text-decoration-color:var(--rule-2)}
.contact a:hover{text-decoration-color:var(--ochre)}

/* ---- 数据条 ---- */
.figures{display:grid;grid-template-columns:repeat(4,1fr);gap:var(--s6);border-top:1px solid var(--rule);border-bottom:1px solid var(--rule)}
.figures > div{padding:var(--s5) 0}
.figures > div + div{border-left:1px solid var(--rule);padding-left:var(--s5)}
.figures b{display:block;font-family:var(--serif);font-size:clamp(2rem,3.6vw,3.25rem);line-height:1;color:var(--moss);letter-spacing:-.02em}
.figures b i{font-style:normal;font-size:.5em;color:var(--ink-3)}
.figures span{font-family:var(--mono);font-size:var(--t-xs);letter-spacing:.1em;color:var(--ink-3);text-transform:uppercase;display:block;margin-top:var(--s2)}

footer{border-top:1px solid var(--rule);padding:var(--s6) 0 var(--s9)}

/* 回到顶部 */
.totop{
  position:fixed;right:var(--s5);bottom:var(--s5);z-index:40;
  width:44px;height:44px;border-radius:50%;
  border:1px solid var(--rule-2);background:var(--paper);color:var(--ink);
  font-size:15px;line-height:1;cursor:pointer;
  opacity:0;pointer-events:none;transform:translateY(8px);
  transition:opacity .3s cubic-bezier(.22,.61,.36,1),transform .3s cubic-bezier(.22,.61,.36,1),background .2s,color .2s;
  box-shadow:0 6px 18px rgba(32,36,30,.10);
}
.totop.show{opacity:1;pointer-events:auto;transform:none}
.totop:hover{border-color:var(--moss);background:var(--moss);color:var(--paper)}
@media (prefers-reduced-motion: reduce){.totop{transition:none}}
.foot-in{display:flex;justify-content:space-between;flex-wrap:wrap;gap:var(--s3);font-family:var(--mono);font-size:var(--t-xs);letter-spacing:.08em;color:var(--ink-3)}

/* ---- 动效：scroll-driven（原生），不支持则静态 ---- */
@keyframes rise{from{opacity:0;transform:translateY(20px)}to{opacity:1;transform:none}}
@keyframes ink{from{opacity:0;letter-spacing:.22em}to{opacity:1;letter-spacing:.18em}}
@supports (animation-timeline: view()){
  .entry,.plate,.prose > *,.cv tbody tr,.figures > div,.sec-head > *{
    animation:rise linear both;animation-timeline:view();animation-range:entry 6% cover 30%;
  }
}
@media (prefers-reduced-motion: reduce){
  *{animation-duration:.001ms !important;transition-duration:.001ms !important;scroll-behavior:auto !important}
}

/* ---- 响应式：断点由内容决定 ---- */
@media(max-width:980px){
  .hero-grid{grid-template-columns:1fr;gap:var(--s7)}
  .flip{max-width:260px;margin-left:0}
  .sec-head{grid-template-columns:1fr;gap:var(--s4)}
  .prose-cols{grid-template-columns:1fr;gap:var(--s6)}
  .entry{grid-template-columns:1fr;gap:var(--s3)}
  .plates{grid-template-columns:repeat(2,1fr)}
  .plate:nth-child(n){grid-column:span 1;margin-top:0}
  .plate:nth-child(1),.plate:nth-child(4){grid-column:span 2}
  .hire{grid-template-columns:1fr;gap:var(--s6)}
  .figures{grid-template-columns:repeat(2,1fr)}
  .figures > div:nth-child(3){border-left:none;padding-left:0}
  .figures > div:nth-child(n+3){border-top:1px solid var(--rule)}
}
@media(max-width:760px){
  .nav{display:none}
  .nav.open{display:flex;position:absolute;top:100%;left:0;right:0;flex-direction:column;gap:var(--s4);background:var(--paper);border-bottom:1px solid var(--rule);padding:var(--s5)}
  .burger{display:block}
  .cv td.when{width:auto;display:block;padding-bottom:var(--s1)}
  .cv td{padding-top:var(--s3)}
}
@media(max-width:560px){
  .wrap{padding:0 var(--s4)}
  .plates{grid-template-columns:1fr}
  .plate:nth-child(n){grid-column:span 1}
  .figures{grid-template-columns:1fr}
  .figures > div + div{border-left:none;padding-left:0}
  .figures > div + div{border-top:1px solid var(--rule)}
}
