/* ============================================================
   一方田咖啡 · YIFANGTIAN COFFEE
   Euro-American Vintage / Antique Botanical Aesthetic
   ============================================================ */

/* ---------- 1. Tokens ---------- */
:root{
  --paper:      #f3e9d6;
  --paper-2:    #eadfc8;
  --paper-3:    #e2d3b7;
  --paper-4:    #d8c6a6;
  --ink:        #2b1e15;
  --ink-2:      #4a382b;
  --ink-3:      #5c4835;   /* 7.17:1 on paper — passes WCAG AA */
  --ink-4:      #6f5a45;   /* 5.41:1 on paper — passes WCAG AA (was #8d7660 @ 3.56:1) */
  --espresso:   #251a12;
  --espresso-2: #33241a;
  --brass:      #a9812f;   /* rules, borders, ornaments — non-text use */
  --brass-ink:  #7d5a1a;   /* 5.21:1 on paper — text-safe antique gold */
  --brass-2:    #c9a227;
  --brass-3:    #e3c86e;
  --rust:       #9b4720;
  --olive:      #5f6b4a;
  --wine:       #6d2f2a;

  --line:       rgba(43,30,21,.26);
  --line-soft:  rgba(43,30,21,.14);
  --line-hard:  rgba(43,30,21,.5);

  --serif: "Cormorant Garamond","Noto Serif SC","Source Han Serif SC","Songti SC","STSong",Georgia,"Times New Roman",serif;
  --display:"Playfair Display","Noto Serif SC","Source Han Serif SC","Songti SC",Georgia,serif;
  --sans:  "Jost","Noto Sans SC","PingFang SC","Helvetica Neue",Arial,sans-serif;
  --type:  "Special Elite","Courier New",ui-monospace,monospace;

  --shadow-1: 0 1px 0 rgba(255,255,255,.5), 0 2px 10px rgba(43,30,21,.10);
  --shadow-2: 0 10px 34px rgba(43,30,21,.20);
  --maxw: 1240px;
}

/* ---------- 2. Reset ---------- */
*,*::before,*::after{box-sizing:border-box}
html{scroll-behavior:smooth; scroll-padding-top:118px; -webkit-text-size-adjust:100%;
  overflow-x:clip}   /* clip (not hidden) so the sticky header keeps working */
body{
  margin:0; background:var(--paper); color:var(--ink);
  font-family:var(--serif); font-size:17px; line-height:1.85;
  letter-spacing:.012em; overflow-x:clip;
  -webkit-font-smoothing:antialiased;
}
img{max-width:100%; display:block; height:auto}
a{color:inherit; text-decoration:none}
button,input,textarea,select{font:inherit; color:inherit}
h1,h2,h3,h4{margin:0; font-weight:600; line-height:1.25; font-family:var(--display)}
p{margin:0 0 1.1em}
ul{margin:0; padding:0; list-style:none}
::selection{background:var(--brass-3); color:var(--espresso)}

/* ---------- 3. Aged paper canvas ---------- */
body::before{
  content:""; position:fixed; inset:0; pointer-events:none; z-index:0;
  background:
    radial-gradient(120% 90% at 12% 8%, rgba(255,250,235,.55), transparent 55%),
    radial-gradient(110% 80% at 88% 92%, rgba(160,120,70,.16), transparent 60%),
    radial-gradient(140% 110% at 50% 50%, transparent 55%, rgba(60,40,22,.16) 100%);
}
body::after{
  content:""; position:fixed; inset:0; pointer-events:none; z-index:1; opacity:.30;
  background-image:url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='240' height='240'><filter id='n'><feTurbulence type='fractalNoise' baseFrequency='0.82' numOctaves='4' stitchTiles='stitch'/><feColorMatrix type='saturate' values='0'/></filter><rect width='240' height='240' filter='url(%23n)' opacity='0.55'/></svg>");
  mix-blend-mode:multiply;
}
.rice-paper{
  position:fixed; inset:0; pointer-events:none; z-index:1; opacity:.20;
  background-image:
    repeating-linear-gradient(0deg, rgba(120,90,55,.10) 0 1px, transparent 1px 7px),
    repeating-linear-gradient(90deg, rgba(120,90,55,.07) 0 1px, transparent 1px 9px);
  mix-blend-mode:multiply;
}

/* ---------- 3b. Icon stroke control (inherited into <use> shadow tree) ---------- */
svg{stroke-width:1.7}
.node .badge svg,.course .ico,.ico,.tile .ico,.channel .ico,
.act .thumb svg,.brand .seal svg,.site-footer .fmark .seal svg{stroke-width:1.7; fill:none}
.stage-visual .art svg{stroke-width:1.25}
.strata svg{stroke-width:1.5}

/* ---------- 4. Layout helpers ---------- */
.wrap{max-width:var(--maxw); margin:0 auto; padding:0 34px; position:relative; z-index:2}
.narrow{max-width:880px; margin:0 auto}
section{position:relative; z-index:2}

.eyebrow{
  font-family:var(--type); font-size:11px; letter-spacing:.34em; text-transform:uppercase;
  color:var(--brass-ink); margin-bottom:14px;
}
.kicker{
  font-family:var(--type); font-size:11.5px; letter-spacing:.26em; text-transform:uppercase;
  color:var(--ink-3);
}
.rule{height:1px; background:var(--line); border:0; margin:0}
.rule-double{
  height:4px; border:0; margin:0;
  border-top:1px solid var(--line); border-bottom:1px solid var(--line);
  background:transparent;
}

/* Ornament divider */
.ornament{
  display:flex; align-items:center; justify-content:center; gap:16px;
  margin:34px auto; color:var(--brass);
}
.ornament::before,.ornament::after{
  content:""; height:1px; width:min(190px,20vw);
  background:linear-gradient(90deg,transparent,var(--line-hard),transparent);
}
.ornament i{font-style:normal; font-size:16px; letter-spacing:.2em; opacity:.85}

/* ---------- 5. Masthead (top strip) ---------- */
.masthead{
  background:var(--espresso); color:var(--paper-2);
  border-bottom:1px solid rgba(227,200,110,.35); position:relative; z-index:5;
}
.masthead .wrap{
  display:flex; align-items:center; justify-content:space-between; gap:20px;
  padding-top:9px; padding-bottom:9px;
  font-family:var(--type); font-size:10.5px; letter-spacing:.28em; text-transform:uppercase;
}
.masthead .m-left{display:flex; align-items:center; gap:14px}
.masthead .dot{width:5px;height:5px;border-radius:50%;background:var(--brass-2);display:inline-block}
.masthead .m-right{display:flex; align-items:center; gap:18px; opacity:.9}
.masthead .m-right span{white-space:nowrap}

/* ---------- 6. Header / Nav ---------- */
.site-header{
  position:sticky; top:0; z-index:40;
  background:linear-gradient(180deg, rgba(243,233,214,.98), rgba(243,233,214,.94));
  backdrop-filter:blur(7px);
  border-bottom:1px solid var(--line);
  box-shadow:0 6px 22px -18px rgba(43,30,21,.6);
}
.header-inner{
  max-width:var(--maxw); margin:0 auto; padding:10px 34px;
  display:flex; align-items:center; gap:22px;
}
.brand{display:flex; align-items:center; gap:12px; min-width:0}
.brand .seal{
  width:42px;height:42px;flex:0 0 42px;border-radius:50%;
  border:1px solid var(--line-hard); display:grid; place-items:center;
  background:radial-gradient(circle at 35% 30%, var(--paper-2), var(--paper-3));
  box-shadow:inset 0 0 0 3px rgba(243,233,214,.9), inset 0 0 0 4px rgba(169,129,47,.45);
}
.brand .seal svg{width:24px;height:24px}
.brand .names{line-height:1.15; display:flex; flex-direction:column; justify-content:center}
.brand .zh-name{font-family:var(--display); font-size:19px; letter-spacing:.14em; font-weight:700}
.brand .en-name{font-family:var(--type); font-size:9.5px; letter-spacing:.24em; color:var(--ink-3); text-transform:uppercase; margin-top:3px}

.main-nav{margin-left:auto}
.main-nav ul{display:flex; align-items:center; gap:6px}
.main-nav a{
  display:flex; align-items:baseline; gap:7px; padding:9px 12px; border-radius:2px;
  font-size:14.5px; letter-spacing:.06em; color:var(--ink-2); transition:.25s;
  border:1px solid transparent;
}
.main-nav a .num{
  font-family:var(--type); font-size:9.5px; letter-spacing:.12em; color:var(--brass-ink);
}
.main-nav a:hover{color:var(--rust); background:rgba(169,129,47,.10)}
.main-nav a.active{
  color:var(--ink); background:rgba(169,129,47,.14);
  border-color:rgba(169,129,47,.45);
}
.main-nav a.active .num{color:var(--rust)}

/* Language switch */
.lang-switch{
  display:flex; align-items:center; border:1px solid var(--line-hard); border-radius:2px;
  overflow:hidden; background:var(--paper-2); flex:0 0 auto;
}
.lang-switch button{
  border:0; background:transparent; cursor:pointer; padding:7px 13px;
  font-family:var(--type); font-size:10.5px; letter-spacing:.18em; color:var(--ink-3);
  transition:.2s;
}
.lang-switch button+button{border-left:1px solid var(--line)}
.lang-switch button[aria-pressed="true"]{background:var(--espresso); color:var(--brass-3)}
.nav-toggle{display:none}

/* Scroll progress */
.progress{
  position:fixed; top:0; left:0; height:2px; width:0%; z-index:60;
  background:linear-gradient(90deg,var(--brass),var(--rust)); opacity:.9;
}

/* ---------- 7. Hero ---------- */
.hero{position:relative; padding:64px 0 28px; overflow:hidden}
.hero-bg{
  position:absolute; inset:0; z-index:0; opacity:.5; pointer-events:none;
  background:
    radial-gradient(60% 60% at 78% 18%, rgba(169,129,47,.18), transparent 70%),
    radial-gradient(50% 50% at 12% 80%, rgba(95,107,74,.14), transparent 70%);
}
.hero .wrap{display:grid; grid-template-columns:1.05fr .95fr; gap:56px; align-items:center}
.hero-copy h1{
  font-size:clamp(38px,5.4vw,68px); line-height:1.08; letter-spacing:.02em; margin-bottom:8px;
  font-weight:700;
}
.hero-copy h1 .thin{display:block; font-family:var(--serif); font-weight:400; font-style:italic;
  font-size:.44em; letter-spacing:.1em; color:var(--ink-2); margin-top:14px}
.hero-copy .lede{
  font-size:18.5px; color:var(--ink-2); max-width:52ch; margin-top:22px;
}
.hero-copy .lede em{font-style:italic; color:var(--rust)}
.hero-meta{
  display:flex; flex-wrap:wrap; gap:10px 26px; margin:26px 0 30px;
  font-family:var(--type); font-size:11px; letter-spacing:.2em; text-transform:uppercase; color:var(--ink-3);
}
.hero-meta span{display:flex; align-items:center; gap:9px}
.hero-meta span::before{content:"❖"; color:var(--brass); font-size:10px}

.btn-row{display:flex; gap:14px; flex-wrap:wrap; margin-top:6px}
.btn{
  display:inline-flex; align-items:center; gap:10px; padding:13px 26px;
  border:1px solid var(--line-hard); background:var(--paper-2); color:var(--ink);
  font-size:15px; letter-spacing:.1em; cursor:pointer; transition:.25s;
  box-shadow:var(--shadow-1); position:relative;
}
.btn:hover{background:var(--espresso); color:var(--brass-3); border-color:var(--espresso); transform:translateY(-2px)}
.btn.ghost{background:transparent}
.btn .arw{font-family:var(--type); font-size:12px}

/* Framed plate */
.plate{
  position:relative; padding:16px; background:
    linear-gradient(145deg, var(--paper-2), var(--paper-3));
  border:1px solid var(--line-hard);
  box-shadow:var(--shadow-2), inset 0 0 0 6px var(--paper), inset 0 0 0 7px rgba(169,129,47,.35);
}
/* --- tonal unity across all plates: one colour family, one set of values --- */
.plate img{
  width:100%;
  filter:sepia(.15) saturate(.86) contrast(1.05) brightness(.99);
}
.plate img.tone-color{filter:sepia(.12) saturate(.70) contrast(1.05) brightness(1.01)}   /* hand-coloured plate */
.plate img.tone-print{filter:sepia(.16) saturate(.88) contrast(1.06) brightness(.99)}   /* monochrome engravings */
.plate img.tone-paint{filter:sepia(.30) saturate(.62) contrast(1.02) brightness(1.10)}  /* oil on canvas */
.plate figcaption{
  margin-top:12px; font-family:var(--type); font-size:9.5px; letter-spacing:.22em;
  text-transform:uppercase; color:var(--ink-3); text-align:center;
}
/* 英文说明用不换行空格把分隔符「·」绑到后继词上（见 HTML 的 &nbsp;·&nbsp;），
   使换行落在语义分段处，而不是让「·」孤零零悬在行尾。
   注：不能用 text-wrap:balance —— 该属性只作用于块容器，而这里是 inline <span>，实测无效。 */
.plate .corner{
  position:absolute; width:16px; height:16px; border:1px solid var(--brass); opacity:.7;
}
.plate .c1{top:7px;left:7px;border-right:0;border-bottom:0}
.plate .c2{top:7px;right:7px;border-left:0;border-bottom:0}
.plate .c3{bottom:7px;left:7px;border-right:0;border-top:0}
.plate .c4{bottom:7px;right:7px;border-left:0;border-top:0}
.hero-stamp{
  position:absolute; right:-14px; bottom:-16px; width:112px; height:112px; border-radius:50%;
  display:grid; place-items:center; text-align:center; z-index:3;
  border:1px dashed rgba(155,71,32,.65); background:rgba(243,233,214,.92);
  color:var(--rust); font-family:var(--type); font-size:9px; letter-spacing:.16em;
  line-height:1.5; transform:rotate(-11deg); box-shadow:0 6px 18px rgba(43,30,21,.18);
}
.hero-stamp b{display:block; font-size:15px; letter-spacing:.1em}

/* 说明行避让邮戳 —— 邮戳锚定在图版右下角，其 112px 直径会侵入下方居中的说明行。
   实测：图版内宽 418px 时，居中说明只要宽于 232px 就会被邮戳压住尾部
   （中文说明 201px 侥幸避开，英文说明 402px 必然重叠 85px；390px 移动端同样重叠）。
   故为带邮戳的图版预留避让区，并收窄英文说明字距以挽回排版容量。 */
.plate.has-seal figcaption{padding-right:128px}
.plate.has-seal figcaption .lang-en{letter-spacing:.13em}

/* ---------- 8. Section scaffolding ---------- */
.sec{padding:82px 0; position:relative}
.sec-alt{background:linear-gradient(180deg, rgba(226,211,183,.55), rgba(226,211,183,.2))}
.sec-dark{background:var(--espresso); color:var(--paper-2)}
.sec-dark .eyebrow{color:var(--brass-3)}
.sec-dark h2,.sec-dark h3,.sec-dark h4{color:var(--paper)}
.sec-dark .lede,.sec-dark p{color:rgba(243,233,214,.82)}
.sec-dark .rule{background:rgba(243,233,214,.24)}
.sec-dark .kicker{color:rgba(243,233,214,.6)}
.sec-dark .ornament{color:var(--brass-3)}
.sec-dark .ornament::before,.sec-dark .ornament::after{
  background:linear-gradient(90deg,transparent,rgba(227,200,110,.6),transparent)}

.sec-head{text-align:center; max-width:800px; margin:0 auto 46px}
.sec-head .roman{
  font-family:var(--display); font-size:13px; letter-spacing:.5em; color:var(--brass-ink);
  margin-bottom:10px;
}
.sec-head h2{font-size:clamp(28px,3.5vw,42px); letter-spacing:.06em}
.sec-head .en-title{
  font-family:var(--serif); font-style:italic; font-size:19px; color:var(--ink-3);
  margin-top:10px; letter-spacing:.05em;
}
.sec-dark .sec-head .en-title{color:var(--brass-3)}
.sec-head .desc{margin-top:18px; color:var(--ink-2); font-size:17px}
.sec-dark .sec-head .desc{color:rgba(243,233,214,.78)}

/* ---------- 9. Section I — Chain ---------- */
.chain-rail{
  position:relative; display:flex; justify-content:space-between; align-items:flex-start;
  gap:0; padding:8px 0 0; margin-bottom:6px;
}
.chain-rail::before{
  content:""; position:absolute; left:5%; right:5%; top:52px; height:1px;
  background:repeating-linear-gradient(90deg,var(--line-hard) 0 7px, transparent 7px 14px);
}
.node{
  flex:1 1 0; display:flex; flex-direction:column; align-items:center; gap:11px;
  background:none; border:0; cursor:pointer; padding:6px 4px 10px; position:relative;
  transition:.25s; color:var(--ink-2);
}
.node .badge{
  width:84px; height:84px; border-radius:50%; display:grid; place-items:center; position:relative;
  background:radial-gradient(circle at 34% 28%, var(--paper), var(--paper-3));
  border:1px solid var(--line-hard);
  box-shadow:inset 0 0 0 4px rgba(243,233,214,.85), inset 0 0 0 5px rgba(169,129,47,.35), 0 4px 12px rgba(43,30,21,.12);
  transition:.3s;
}
.node .badge svg{width:40px; height:40px}
.node .badge .rn{
  position:absolute; top:-9px; right:-9px; width:24px; height:24px; border-radius:50%;
  background:var(--espresso); color:var(--brass-3); font-family:var(--type); font-size:10px;
  display:grid; place-items:center; border:1px solid rgba(227,200,110,.5);
}
.node .n-zh{font-size:15.5px; letter-spacing:.1em; font-weight:600; color:var(--ink)}
.node .n-en{font-family:var(--type); font-size:9px; letter-spacing:.16em; text-transform:uppercase; color:var(--ink-3)}
.node:hover .badge{transform:translateY(-5px); box-shadow:inset 0 0 0 4px rgba(243,233,214,.85), inset 0 0 0 5px rgba(155,71,32,.5), 0 10px 20px rgba(43,30,21,.2)}
.node:hover .n-zh{color:var(--rust)}
.node[aria-selected="true"] .badge{
  background:radial-gradient(circle at 34% 28%, #4a3526, var(--espresso));
  border-color:var(--brass);
}
.node[aria-selected="true"] .badge svg{filter:invert(88%) sepia(38%) saturate(320%) hue-rotate(2deg) brightness(96%)}
.node[aria-selected="true"] .n-zh{color:var(--rust)}
.node[aria-selected="true"] .n-en{color:var(--brass-ink)}

.stage-panel{
  margin-top:30px; border:1px solid var(--line-hard); background:var(--paper-2);
  box-shadow:var(--shadow-2); position:relative;
}
.stage-panel::before{
  content:""; position:absolute; inset:6px; border:1px solid var(--line-soft); pointer-events:none;
}
/* 离屏测量容器：预量各工序最大高度，用于给面板设 min-height，消除换场位移。
   必须用 visibility:hidden（不能用 display:none，否则量不到高度）。 */
.stage-panel.stage-measure{
  position:absolute; left:-99999px; top:0; margin:0;
  visibility:hidden; pointer-events:none; min-height:0 !important;
}
.stage-grid{display:grid; grid-template-columns:.9fr 1.1fr; gap:0}
.stage-visual{
  padding:38px 34px; border-right:1px solid var(--line);
  background:linear-gradient(160deg, rgba(216,198,166,.5), rgba(226,211,183,.15));
  display:flex; flex-direction:column; justify-content:center; gap:18px;
}
.stage-visual .big-roman{
  font-family:var(--display); font-size:64px; line-height:1; color:rgba(43,30,21,.16); font-weight:700;
}
.stage-visual .art{display:grid; place-items:center}
.stage-visual .art svg{width:170px; height:170px; stroke-width:1.25}
.stage-visual .stage-tag{
  font-family:var(--type); font-size:10px; letter-spacing:.24em; text-transform:uppercase; color:var(--rust);
}
.stage-body{padding:38px 40px}
.stage-body h3{font-size:27px; letter-spacing:.06em}
.stage-body .en{font-family:var(--serif); font-style:italic; color:var(--ink-3); font-size:17px; margin-top:4px}
.stage-body .desc{margin-top:18px; color:var(--ink-2); font-size:16.5px}
.spec{
  margin-top:24px; display:grid; grid-template-columns:repeat(2,1fr); gap:14px 22px;
  border-top:1px solid var(--line); padding-top:22px;
}
.spec div{display:flex; flex-direction:column; gap:3px}
.spec dt{font-family:var(--type); font-size:9.5px; letter-spacing:.2em; text-transform:uppercase; color:var(--ink-4)}
.spec dd{margin:0; font-size:16px; color:var(--ink); font-weight:600}
.stage-nav{display:flex; justify-content:space-between; gap:12px; margin-top:26px}
.link-btn{
  background:none; border:0; cursor:pointer; font-family:var(--type); font-size:10.5px;
  letter-spacing:.2em; text-transform:uppercase; color:var(--ink-3); padding:6px 0; transition:.2s;
  border-bottom:1px solid transparent;
}
.link-btn:hover{color:var(--rust); border-bottom-color:var(--rust)}

/* ---------- 工序面板：渐进渐出（cross-fade）----------
   原实现是「整体替换 innerHTML + 仅淡入」：旧内容瞬间消失，属硬切 + 淡入，不是渐进渐出。
   现改为两步过渡：旧内容先淡出上移 → 换内容 → 新内容由下淡入。
   时长须与 JS 中的 FADE_OUT_MS（320ms）保持一致。 */
.stage-grid{transition:opacity .32s ease, transform .32s ease}
.stage-grid.is-out{opacity:0; transform:translateY(-7px)}
.stage-grid.is-in{opacity:0; transform:translateY(9px)}

/* ---------- 轮播控制条 ---------- */
.chain-ctrl{display:flex; align-items:center; justify-content:flex-end; gap:14px; margin:20px 0 2px}

.chain-prog{position:relative; width:104px; height:2px; background:var(--line); overflow:hidden}
.chain-prog i{
  position:absolute; inset:0; display:block; transform-origin:left center;
  background:var(--brass-2); animation:chainProg 5s linear both;
}
@keyframes chainProg{from{transform:scaleX(0)} to{transform:scaleX(1)}}
.chain-prog.is-paused i{animation-play-state:paused}
.chain-prog.is-off i{animation:none; transform:scaleX(0)}

.chain-play{
  display:inline-flex; align-items:center; gap:9px; cursor:pointer;
  background:none; border:1px solid var(--line-hard); color:var(--ink-3);
  padding:7px 14px; font-family:var(--type); font-size:10px; letter-spacing:.2em;
  text-transform:uppercase; transition:.25s;
}
.chain-play:hover{color:var(--rust); border-color:var(--rust)}
.chain-play:focus-visible{outline:2px solid var(--brass); outline-offset:2px}
/* 播放态画暂停双竖条，暂停态画三角 */
.chain-play .ico{
  flex:0 0 auto; width:8px; height:10px;
  background:
    linear-gradient(currentColor,currentColor) left top/3px 100% no-repeat,
    linear-gradient(currentColor,currentColor) right top/3px 100% no-repeat;
}
.chain-play.is-paused .ico{
  width:0; height:0; background:none;
  border-style:solid; border-width:5px 0 5px 8px;
  border-color:transparent transparent transparent currentColor;
}
.chain-play .t-play{display:none}
.chain-play.is-paused .t-pause{display:none}
.chain-play.is-paused .t-play{display:inline}

.fade-swap{animation:fadeSwap .45s ease both}
@keyframes fadeSwap{from{opacity:0; transform:translateY(8px)} to{opacity:1; transform:none}}

/* ---------- 10. Section II — Story ---------- */
.story-rail{
  display:flex; gap:0; justify-content:center; flex-wrap:wrap; margin-bottom:44px;
  border-top:1px solid rgba(243,233,214,.2); border-bottom:1px solid rgba(243,233,214,.2);
}
.story-rail button{
  flex:1 1 auto; min-width:96px; background:none; border:0; cursor:pointer; color:rgba(243,233,214,.55);
  padding:14px 8px; font-family:var(--type); font-size:10px; letter-spacing:.18em; text-transform:uppercase;
  transition:.25s; border-bottom:2px solid transparent;
}
.story-rail button:hover{color:var(--brass-3)}
.story-rail button[aria-selected="true"]{color:var(--brass-3); border-bottom-color:var(--brass-2); background:rgba(227,200,110,.07)}

.story-book{
  display:grid; grid-template-columns:1fr 300px; gap:52px; align-items:start;
}
.chapter .ch-no{
  font-family:var(--type); font-size:11px; letter-spacing:.34em; text-transform:uppercase; color:var(--brass-3);
}
.chapter h3{font-size:clamp(26px,3vw,38px); margin-top:12px; letter-spacing:.04em}
.chapter .ch-en{font-family:var(--serif); font-style:italic; font-size:17px; color:var(--brass-3); opacity:.8; margin-top:8px}
.chapter .body{margin-top:26px; column-gap:38px; font-size:17.5px; line-height:2.0}
@media(min-width:900px){.chapter .body{columns:2}}
.chapter .body p:first-child::first-letter{
  float:left; font-family:var(--display); font-size:62px; line-height:.82; padding:6px 12px 0 0;
  color:var(--brass-2); font-weight:700;
}
.chapter .pull{
  margin-top:28px; padding:18px 24px; border-left:2px solid var(--brass-2);
  font-style:italic; font-size:19px; color:var(--brass-3); background:rgba(227,200,110,.06);
}
.story-aside{position:sticky; top:130px}
.story-aside .mini-plate{border:1px solid rgba(227,200,110,.35); padding:12px; background:rgba(0,0,0,.18)}
.story-aside .mini-plate img{filter:sepia(.18) saturate(.80) contrast(1.06) brightness(.94)}
.story-aside .cap{
  font-family:var(--type); font-size:9.5px; letter-spacing:.2em; text-transform:uppercase;
  color:rgba(243,233,214,.55); margin-top:12px; text-align:center; line-height:1.7;
}
.story-aside .quote{
  margin-top:22px; font-style:italic; font-size:15.5px; color:rgba(243,233,214,.7);
  border-top:1px solid rgba(243,233,214,.2); padding-top:18px;
}

/* ---------- 11. Section III — Academy ---------- */
.course-grid{display:grid; grid-template-columns:repeat(3,1fr); gap:26px}
.course{
  border:1px solid var(--line-hard); background:var(--paper-2); padding:0; display:flex; flex-direction:column;
  box-shadow:var(--shadow-1); transition:.3s; position:relative; overflow:hidden;
}
.course:hover{transform:translateY(-6px); box-shadow:var(--shadow-2)}
.course .top{
  padding:26px 26px 20px; border-bottom:1px solid var(--line);
  background:linear-gradient(160deg, rgba(216,198,166,.42), transparent 70%);
  position:relative;
}
.course .cn{
  position:absolute; top:20px; right:22px; font-family:var(--display); font-size:30px; font-weight:700;
  color:rgba(43,30,21,.13);
}
.course .ico{width:52px; height:52px; margin-bottom:16px}
.course h3{font-size:22px; letter-spacing:.06em}
.course .en{font-family:var(--serif); font-style:italic; color:var(--ink-3); font-size:15.5px; margin-top:4px}
.course .body{padding:22px 26px 26px; display:flex; flex-direction:column; flex:1}
.course .meta{
  display:flex; flex-wrap:wrap; gap:8px; margin-bottom:18px;
}
.chip{
  font-family:var(--type); font-size:9.5px; letter-spacing:.16em; text-transform:uppercase;
  border:1px solid var(--line); padding:4px 9px; color:var(--ink-3); background:var(--paper);
}
.chip.solid{background:var(--espresso); color:var(--brass-3); border-color:var(--espresso)}
.course ul.syllabus{display:flex; flex-direction:column; gap:9px; flex:1}
.course ul.syllabus li{
  display:flex; gap:11px; font-size:15.5px; color:var(--ink-2); line-height:1.65;
}
.course ul.syllabus li::before{content:"§"; color:var(--brass-ink); font-family:var(--type); font-size:12px; flex:0 0 auto; padding-top:2px}
.course .foot{
  margin-top:22px; padding-top:18px; border-top:1px dashed var(--line);
  display:flex; align-items:center; justify-content:space-between; gap:12px;
}
.course .tutor{font-family:var(--type); font-size:10px; letter-spacing:.16em; text-transform:uppercase; color:var(--ink-4)}
.course .apply{
  font-size:14px; letter-spacing:.1em; color:var(--rust); border-bottom:1px solid var(--rust); padding-bottom:2px;
}
.course .apply:hover{color:var(--espresso); border-color:var(--espresso)}

/* Syllabus table */
.syllabus-table{margin-top:52px; border:1px solid var(--line-hard); background:var(--paper-2); box-shadow:var(--shadow-1)}
.syllabus-table .cap{
  padding:18px 26px; border-bottom:1px solid var(--line);
  font-family:var(--type); font-size:10.5px; letter-spacing:.26em; text-transform:uppercase; color:var(--ink-3);
  background:linear-gradient(180deg, rgba(216,198,166,.5), transparent);
}
.tbl-scroll{overflow-x:auto}
table.vintage{width:100%; border-collapse:collapse; min-width:720px}
table.vintage th,table.vintage td{
  padding:15px 20px; text-align:left; border-bottom:1px solid var(--line-soft); font-size:15.5px;
}
table.vintage thead th{
  font-family:var(--type); font-size:9.5px; letter-spacing:.2em; text-transform:uppercase; color:var(--ink-4);
  background:rgba(216,198,166,.28); border-bottom:1px solid var(--line);
}
table.vintage tbody tr:hover{background:rgba(169,129,47,.07)}
table.vintage td:first-child{font-weight:600}
table.vintage .rn{font-family:var(--type); color:var(--brass-ink); font-size:12px; margin-right:10px}

/* ---------- 12. Section IV — Ecology ---------- */
.eco-intro{display:grid; grid-template-columns:1.15fr .85fr; gap:48px; align-items:center}
.eco-intro .lead{font-size:19px; color:var(--ink-2); line-height:1.95}
.eco-intro .lead strong{color:var(--rust); font-weight:600}
.eco-intro .side-note{
  border:1px solid var(--line); padding:20px 22px; background:var(--paper-2);
  font-family:var(--type); font-size:11.5px; letter-spacing:.1em; line-height:2; color:var(--ink-3);
}

/* Forest strata diagram */
.strata{margin-top:60px; border:1px solid var(--line-hard); background:var(--paper-2); box-shadow:var(--shadow-1)}
.strata .cap{
  padding:16px 24px; border-bottom:1px solid var(--line);
  font-family:var(--type); font-size:10.5px; letter-spacing:.24em; text-transform:uppercase; color:var(--ink-3);
}
.strata svg{display:block; width:100%; height:auto; background:linear-gradient(180deg,#e8dcc4,#dfd0b3)}

/* Feature tiles */
.eco-grid{display:grid; grid-template-columns:repeat(4,1fr); gap:22px; margin-top:52px}
.tile{
  border:1px solid var(--line); padding:26px 24px; background:var(--paper-2); position:relative;
  transition:.3s; overflow:hidden;
}
.tile:hover{background:var(--paper); box-shadow:var(--shadow-1); transform:translateY(-4px)}
.tile .tn{font-family:var(--type); font-size:10px; letter-spacing:.28em; color:var(--brass-ink)}
.tile h4{font-size:19px; margin-top:12px; letter-spacing:.05em}
.tile .en{font-family:var(--type); font-size:9px; letter-spacing:.18em; text-transform:uppercase; color:var(--ink-4); margin-top:6px}
.tile p{margin-top:14px; font-size:15px; color:var(--ink-2); line-height:1.8}
.tile .ico{width:38px; height:38px; margin-bottom:14px}

/* Data cards */
.eco-stats{
  display:grid; grid-template-columns:repeat(4,1fr); gap:0; margin-top:52px;
  border:1px solid var(--line-hard); background:var(--paper-2);
}
.eco-stats .st{
  padding:26px 22px; text-align:center; border-right:1px solid var(--line);
}
.eco-stats .st:last-child{border-right:0}
.eco-stats .num{font-family:var(--display); font-size:34px; font-weight:700; color:var(--rust); line-height:1.1}
.eco-stats .num small{font-size:15px; color:var(--ink-3); font-weight:400; margin-left:3px}
.eco-stats .lb{font-size:14.5px; color:var(--ink); margin-top:8px; letter-spacing:.08em}
.eco-stats .lb-en{font-family:var(--type); font-size:8.5px; letter-spacing:.18em; text-transform:uppercase; color:var(--ink-4); margin-top:5px}

/* Activities */
.act-grid{display:grid; grid-template-columns:repeat(3,1fr); gap:24px; margin-top:48px}
.act{
  border:1px solid var(--line-hard); background:var(--paper-2); overflow:hidden; display:flex; flex-direction:column;
  box-shadow:var(--shadow-1); transition:.3s;
}
.act:hover{transform:translateY(-5px); box-shadow:var(--shadow-2)}
.act .thumb{height:150px; background:var(--paper-3); display:grid; place-items:center; border-bottom:1px solid var(--line)}
.act .thumb svg{width:74px; height:74px}
.act .txt{padding:22px 24px 26px; flex:1; display:flex; flex-direction:column}
.act h4{font-size:20px; letter-spacing:.05em}
.act .en{font-family:var(--type); font-size:9px; letter-spacing:.18em; text-transform:uppercase; color:var(--ink-4); margin-top:6px}
.act p{margin-top:14px; font-size:15px; color:var(--ink-2)}
.act .tags{margin-top:auto; padding-top:16px; display:flex; flex-wrap:wrap; gap:7px}

/* ---------- 13. Section V — Contact ---------- */
.contact-wrap{display:grid; grid-template-columns:1fr 1.05fr; gap:48px; align-items:start}
.channels{display:flex; flex-direction:column; gap:16px}
.channel{
  display:flex; gap:18px; align-items:flex-start; padding:20px 22px;
  border:1px solid var(--line); background:var(--paper-2); transition:.25s;
}
.channel:hover{background:var(--paper); box-shadow:var(--shadow-1); transform:translateX(4px)}
.channel .ico{width:40px; height:40px; flex:0 0 40px}
.channel h4{font-size:18px; letter-spacing:.04em}
.channel .en{font-family:var(--type); font-size:9px; letter-spacing:.18em; text-transform:uppercase; color:var(--ink-4); margin-top:4px}
.channel .val{margin-top:10px; font-size:16px; color:var(--ink); font-weight:600; word-break:break-all}
.channel .note{margin-top:4px; font-size:14px; color:var(--ink-3)}

/* Letter form */
.letter{
  border:1px solid var(--line-hard); background:
    repeating-linear-gradient(180deg, var(--paper-2) 0 33px, rgba(216,198,166,.35) 33px 34px);
  padding:34px 34px 30px; box-shadow:var(--shadow-2); position:relative;
}
.letter::before{
  content:""; position:absolute; inset:8px; border:1px solid var(--line-soft); pointer-events:none;
}
.letter .head{
  display:flex; justify-content:space-between; align-items:flex-end; gap:16px;
  border-bottom:1px solid var(--line); padding-bottom:16px; margin-bottom:24px;
}
.letter h3{font-size:24px; letter-spacing:.06em}
.letter .postmark{
  width:74px;height:74px;border-radius:50%;border:1px dashed rgba(155,71,32,.6);
  display:grid;place-items:center;text-align:center;color:var(--rust);
  font-family:var(--type);font-size:8px;letter-spacing:.14em;line-height:1.5;transform:rotate(-9deg);flex:0 0 74px;
}
.field{margin-bottom:20px}
.field label{
  display:block; font-family:var(--type); font-size:9.5px; letter-spacing:.22em; text-transform:uppercase;
  color:var(--ink-3); margin-bottom:8px;
}
.field input,.field textarea,.field select{
  width:100%; background:transparent; border:0; border-bottom:1px solid var(--line-hard);
  padding:9px 2px; font-family:var(--serif); font-size:16.5px; outline:none; transition:.2s; color:var(--ink);
}
.field select{
  appearance:none; cursor:pointer;
  background-image:linear-gradient(45deg,transparent 50%,var(--ink-3) 50%),linear-gradient(135deg,var(--ink-3) 50%,transparent 50%);
  background-position:calc(100% - 12px) 18px, calc(100% - 7px) 18px; background-size:5px 5px; background-repeat:no-repeat;
}
.field input:focus,.field textarea:focus,.field select:focus{border-bottom-color:var(--rust); background:rgba(255,255,255,.35)}
.field textarea{resize:vertical; min-height:96px; line-height:1.8}
.field-row{display:grid; grid-template-columns:1fr 1fr; gap:22px}
.form-foot{display:flex; align-items:center; justify-content:space-between; gap:16px; margin-top:26px; flex-wrap:wrap}
.form-foot .hint{font-size:13px; color:var(--ink-3); max-width:34ch; line-height:1.7}
.btn-ink{
  border:1px solid var(--espresso); background:var(--espresso); color:var(--brass-3);
  padding:13px 30px; cursor:pointer; font-size:15px; letter-spacing:.14em; transition:.25s;
  font-family:var(--type); font-size:12px; letter-spacing:.22em; text-transform:uppercase;
}
.btn-ink:hover{background:var(--rust); border-color:var(--rust); color:#fff}
.sent-note{
  margin-top:18px; padding:14px 18px; border:1px dashed var(--rust); color:var(--rust);
  font-family:var(--type); font-size:11px; letter-spacing:.14em; background:rgba(155,71,32,.06);
  display:none;
}
.sent-note.show{display:block; animation:fadeSwap .4s ease both}

/* FAQ */
.faq{margin-top:52px; border-top:1px solid var(--line)}
.faq details{border-bottom:1px solid var(--line)}
.faq summary{
  cursor:pointer; padding:18px 4px; font-size:17px; letter-spacing:.04em; list-style:none;
  display:flex; justify-content:space-between; gap:16px; align-items:center; color:var(--ink);
}
.faq summary::-webkit-details-marker{display:none}
.faq summary::after{content:"+"; font-family:var(--type); color:var(--brass); font-size:18px}
.faq details[open] summary::after{content:"–"}
.faq details p{padding:0 4px 20px; margin:0; color:var(--ink-2); font-size:16px; max-width:78ch}

/* ---------- 14. Footer ---------- */
.site-footer{background:var(--espresso); color:rgba(243,233,214,.75); padding:60px 0 30px; position:relative; z-index:2}
.site-footer .grid{display:grid; grid-template-columns:1.4fr 1fr 1fr; gap:40px}
.site-footer h4{color:var(--paper); font-size:16px; letter-spacing:.16em; margin-bottom:16px; font-family:var(--type); font-size:11px}
.site-footer p,.site-footer li{font-size:15px; line-height:1.9}
.site-footer .colophon{border-top:1px solid rgba(243,233,214,.2); margin-top:44px; padding-top:22px;
  display:flex; justify-content:space-between; gap:18px; flex-wrap:wrap;
  font-family:var(--type); font-size:9.5px; letter-spacing:.2em; text-transform:uppercase; color:rgba(243,233,214,.66)}
.site-footer .fmark{display:flex; align-items:center; gap:14px}
.site-footer .fmark .seal{
  width:54px;height:54px;border-radius:50%;border:1px solid rgba(227,200,110,.5);display:grid;place-items:center;
}
.site-footer .fmark .seal svg{width:30px;height:30px}

/* ---------- 15. Reveal ---------- */
.reveal{opacity:0; transform:translateY(22px); transition:opacity .8s cubic-bezier(.2,.7,.3,1), transform .8s cubic-bezier(.2,.7,.3,1)}
.reveal.in{opacity:1; transform:none}

/* ---------- 16. Bilingual ----------
   Only the HIDDEN language gets a display rule (with !important so that
   component rules such as `.hero-copy h1 .thin{display:block}` or
   `.hero-meta span{display:flex}` cannot out-specify it). The visible
   language is left alone and keeps whatever display its component needs. */
html:not([data-lang]) .lang-en{display:none !important}
html[data-lang="zh"] .lang-en{display:none !important}
html[data-lang="en"] .lang-zh{display:none !important}
html[data-lang="en"] body{font-size:16.5px; line-height:1.8; letter-spacing:.005em}

/* ---------- 17. Responsive ---------- */
@media (max-width:1080px){
  .hero .wrap{grid-template-columns:1fr; gap:38px}
  .hero-copy{order:1}
  .story-book{grid-template-columns:1fr; gap:34px}
  .story-aside{position:static; display:grid; grid-template-columns:260px 1fr; gap:26px; align-items:start}
  .course-grid{grid-template-columns:repeat(2,1fr)}
  .eco-grid{grid-template-columns:repeat(2,1fr)}
  .eco-stats{grid-template-columns:repeat(2,1fr)}
  .eco-stats .st:nth-child(2){border-right:0}
  .eco-stats .st:nth-child(1),.eco-stats .st:nth-child(2){border-bottom:1px solid var(--line)}
  .act-grid{grid-template-columns:repeat(2,1fr)}
  .contact-wrap{grid-template-columns:1fr; gap:38px}
  .eco-intro{grid-template-columns:1fr; gap:30px}
}
@media (max-width:860px){
  .wrap{padding:0 22px}
  .header-inner{padding:10px 22px}
  .main-nav{
    position:fixed; inset:auto 0 0 0; top:0; bottom:0; left:0; right:0;
    background:var(--paper); transform:translateX(100%); transition:.35s;
    padding:120px 26px 40px; overflow-y:auto; display:block;
  }
  .main-nav.open{transform:none}
  .main-nav ul{flex-direction:column; align-items:stretch; gap:2px}
  .main-nav a{font-size:19px; padding:14px 8px; border-bottom:1px solid var(--line-soft)}
  .nav-toggle{
    display:grid; place-items:center; width:42px; height:42px; border:1px solid var(--line-hard);
    background:var(--paper-2); cursor:pointer; margin-left:auto;
  }
  .nav-toggle span{display:block; width:18px; height:1px; background:var(--ink); position:relative}
  .nav-toggle span::before,.nav-toggle span::after{
    content:""; position:absolute; left:0; width:18px; height:1px; background:var(--ink);
  }
  .nav-toggle span::before{top:-6px} .nav-toggle span::after{top:6px}
  .lang-switch{margin-left:10px}
  .site-footer .grid{grid-template-columns:1fr; gap:30px}
  .stage-grid{grid-template-columns:1fr}
  .stage-visual{border-right:0; border-bottom:1px solid var(--line); padding:30px 26px}
  .stage-visual .art svg{width:130px;height:130px}
  .stage-body{padding:30px 26px}
  .chapter .body{columns:1}
  .course-grid{grid-template-columns:1fr}
  .eco-grid{grid-template-columns:1fr}
  .eco-stats{grid-template-columns:1fr 1fr}
  .act-grid{grid-template-columns:1fr}
  .field-row{grid-template-columns:1fr}
  .chain-rail{flex-wrap:wrap; justify-content:center; gap:14px 4px}
  .chain-rail::before{display:none}
  .node{flex:0 0 44%}
  .node .badge{width:70px;height:70px}
  .node .badge svg{width:34px;height:34px}
  .sec{padding:60px 0}
  .hero{padding:40px 0 20px}
  .hero-stamp{right:2px; bottom:-10px; width:92px;height:92px}
  /* 邮戳缩到 92px 后，说明行避让区同步收窄（仍须大于 78px 才不会被压住） */
  .plate.has-seal figcaption{padding-right:96px}
  .story-aside{grid-template-columns:1fr}
}
@media (max-width:520px){
  .node{flex:0 0 46%}
  .masthead .m-right span:nth-child(2){display:none}
  .brand .zh-name{font-size:16px}
  .eco-stats{grid-template-columns:1fr}
  .eco-stats .st{border-right:0; border-bottom:1px solid var(--line)}
  /* 窄屏下图版仅约 266px 宽，邮戳须同步缩小，否则会吃掉近半图版宽度 */
  .hero-stamp{width:76px; height:76px; right:-4px; bottom:-8px; font-size:7.5px; letter-spacing:.09em}
  .hero-stamp b{font-size:11px}
  .plate.has-seal figcaption{padding-right:72px}
}
@media (max-width:440px){
  /* 图版宽度 <300px 时，邮戳（76px）会占用近三分之一并挤垮说明行距，
     此时隐藏该纯装饰元素，把整行宽度让回说明文字。品牌信息正文中仍有呈现。 */
  .hero-stamp{display:none}
  .plate.has-seal figcaption{padding-right:0}
}
@media (prefers-reduced-motion:reduce){
  *{animation:none !important; transition:none !important}
  html{scroll-behavior:auto}
}
