/* ============================================================
   萃饮官网 v3「冷萃结晶 Deep Crystal」
   tokens 继承 DESIGN.md v2，v3 增补深色域与 display 字阶
   ============================================================ */

:root {
  /* 色 —— 全部取自素材，禁纯黑纯白 */
  --navy: #0E48AF;            /* logo 钴蓝＝全站唯一主色 */
  --navy-deep: #0B101F;       /* 墨蓝深域 */
  --navy-abyss: #070B16;
  --ink: #171B26;             /* 亮域正文 */
  --azure: #2E6AE0;           /* 钴蓝亮阶（hover/链接） */
  --emerald: #1D55C4;         /* 主按钮（钴蓝中阶；旧名保留作别名） */
  --emerald-bright: #2E6AE0;
  --cyan: #9FC0E8;            /* 冰蓝（深底次级强调） */
  --mint: #06B28A;            /* logo 祖母绿：仅微量点缀 */
  --paper: #F5F5F2;           /* 骨白（暖灰调） */
  --tint-blue: #ECEDE8;
  --muted: #5E6472;
  --muted-dark: #8B93A8;
  --line: #DEE0DA;
  --line-dark: rgba(206, 216, 238, 0.10);

  /* 字（三席专岗：display 得意黑 / 正文 MiSans / mono 自托管子集仅拉丁数字） */
  --font-display: "Smiley Sans Sub", "MiSans", "PingFang SC", "Microsoft YaHei", sans-serif;
  /* 星座命题用衬线（对位 anthropicSerif 的编辑感）：优先思源/Noto 宋，回退系统宋体 */
  --font-serif: "Noto Serif SC", "Source Han Serif SC", "Songti SC", "STSong", "SimSun", "Times New Roman", serif;
  --font-body: "MiSans", "Avenir Next", "Segoe UI", system-ui, "PingFang SC", "Microsoft YaHei", sans-serif;
  /* P1-5：CY Mono 子集无 CJK；MiSans 排在 monospace 前＝未剥离的中文自动落回正文黑体，不再伪装等宽 */
  --font-mono: "CY Mono", ui-monospace, "SF Mono", Consolas, "MiSans", monospace;

  /* 动效（微交互层：120-200ms；入场编排在 JS 层 400-600ms；唯一缓动 --ease-cuiyin 定义见处方层 :root） */
  --t-micro: 160ms;
  /* 缓动/时长体系（星座对标 Anthropic：分工的一件乐器）——位移越大越长越 expo，越小越短越 quart */
  --ease-ui: cubic-bezier(0.33, 0, 0.2, 1);        /* quart：hover/微交互 */
  --ease-camera: cubic-bezier(0.65, 0, 0.35, 1);   /* inOutCubic：相机/大位移 */
  --ease-pop: cubic-bezier(0.34, 1.4, 0.5, 1);     /* back：落定回弹 */
  --dur-1: 120ms; --dur-2: 200ms; --dur-3: 320ms; --dur-4: 480ms; --dur-5: 720ms; --dur-6: 1100ms;

  --radius: 8px;
  --header-h: 62px;
}

/* ---------- 基础 ---------- */
* { margin: 0; padding: 0; box-sizing: border-box; }

@font-face {
  font-family: "Smiley Sans Sub";
  src: url("../fonts/SmileySans-display-subset.woff2") format("woff2");
  font-display: swap;
  font-weight: 400;
  font-style: normal;
}

/* mono 专岗（P1-5）：IBM Plex Mono 子集（OFL），仅 0-9A-Za-z:/·→[]()%+.- ×，4.5KB */
@font-face {
  font-family: "CY Mono";
  src: url("../fonts/mono-subset.woff2") format("woff2");
  font-display: swap;
  font-weight: 400;
  font-style: normal;
}

html {
  font-synthesis: none;
  -webkit-text-size-adjust: 100%;
  scroll-behavior: smooth;
  overflow-x: clip; /* clip 须在 html 层才对视口生效（body 层不传播，scrollWidth 有度量假象） */
}
@media (prefers-reduced-motion: reduce) {
  html { scroll-behavior: auto; }
}

body {
  font-family: var(--font-body);
  font-size: 16px;
  line-height: 1.75;
  color: var(--ink);
  background: var(--paper);
  text-autospace: normal;
  overflow-x: clip;
}

h1, h2, h3 {
  word-break: keep-all;
  text-wrap: balance;
  text-spacing-trim: trim-start;
  line-height: 1.18;
}

img { max-width: 100%; display: block; }
a { color: inherit; }

.num {
  font-variant-numeric: tabular-nums;
  white-space: nowrap;
}

/* CSS 钻石 ◆（得意黑无此字形，禁单字 fallback 混排） */
.dia {
  display: inline-block;
  width: 7px; height: 7px;
  background: var(--emerald);
  transform: rotate(45deg);
  flex: none;
}

:focus-visible {
  outline: 2px solid var(--emerald);
  outline-offset: 3px;
  border-radius: 2px;
}

/* ============================================================
   幕外常驻层：header
   ============================================================ */
.site-header {
  position: fixed;
  inset: 0 0 auto 0;
  height: var(--header-h);
  z-index: 90;
  display: flex;
  align-items: center;
  justify-content: space-between;
  padding: 0 clamp(20px, 4vw, 56px);
  color: var(--paper);
  background: transparent;
  border-bottom: 1px solid transparent;
  transition: background var(--t-micro) var(--ease-cuiyin),
              border-color var(--t-micro) var(--ease-cuiyin);
}
.site-header.is-scrolled {
  /* 94% 实色底 + 发丝线（玻璃拟态名额留给 hero chips） */
  background: rgba(11, 27, 59, 0.94);
  border-bottom-color: var(--line-dark);
}

.brand {
  display: flex;
  align-items: baseline;
  gap: 10px;
  text-decoration: none;
}
.brand { white-space: nowrap; }
.brand-logo { height: 30px; width: auto; display: block; }
.foot-logo { height: 26px; width: auto; margin-bottom: 10px; }

.site-nav { display: flex; align-items: center; gap: clamp(16px, 2.4vw, 34px); }
.site-nav a {
  font-size: 14px;
  text-decoration: none;
  color: rgba(234, 240, 250, 0.82);
  transition: color var(--t-micro) var(--ease-cuiyin);
}
.site-nav a:hover { color: #fff; }

.btn {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  gap: 8px;
  border-radius: var(--radius);
  text-decoration: none;
  font-weight: 600;
  border: 1px solid transparent;
  cursor: pointer;
  transition: transform var(--t-micro) var(--ease-cuiyin),
              box-shadow var(--t-micro) var(--ease-cuiyin),
              background var(--t-micro) var(--ease-cuiyin);
}
.btn-primary {
  background: var(--emerald);
  color: #FFFFFF;
  padding: 13px 26px;
  font-size: 15.5px;
  box-shadow: 0 1px 2px rgba(7, 11, 22, 0.35), 0 6px 18px rgba(14, 72, 175, 0.30);
}
.btn-primary:hover {
  background: var(--azure);
  transform: translateY(-2px);
  box-shadow: 0 2px 4px rgba(7, 11, 22, 0.35), 0 10px 26px rgba(14, 72, 175, 0.38);
}
.btn-sm { padding: 9px 18px; font-size: 13.5px; }

/* ============================================================
   第 1 幕 hero 公共件（点阵看板主体见处方层 .hero-board）
   ------------------------------------------------------------
   2.3 裁决：实拍杯移出首屏（滚动第一奖赏）——v2 遗留 .hero/.hero-cup
   规则已剔除；HTML 若尚存 .hero-cup figure，由下行守卫隐藏，
   M2a 删除 figure 后守卫行可删。
   ============================================================ */
.hero .hero-cup { display: none; }

/* 噪点（全站质感统一，覆盖 canvas 与 DOM） */
.grain {
  position: absolute;
  inset: 0;
  z-index: 40;
  pointer-events: none;
  opacity: 0.05;
  background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='240' height='240'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.9' numOctaves='2' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23n)'/%3E%3C/svg%3E");
}

/* ============================================================
   第 2 幕 marquee 跑马灯（风味 × 工艺词，去数字化）
   ============================================================ */
.marquee {
  position: relative;
  background: var(--navy-abyss);
  border-top: 1px solid var(--line-dark);
  border-bottom: 1px solid var(--line-dark);
  overflow: clip;                    /* 紧凑带：横向溢出裁掉；in-flow＝零留白 */
}
/* 紧凑 in-flow 舞台：一条小带，logo 自己缓慢横滚（走马灯本义）；上下自然接相邻区块 */
.logo-marquee-stage {
  position: relative;
  isolation: isolate;
  padding: clamp(30px, 4.4vh, 56px) 0;
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: clamp(16px, 2.4vh, 30px);
}
/* 辉光（钴蓝，呼应品牌主色 --navy） */
.logo-marquee-stage::before {
  content: "";
  position: absolute;
  inset: -60% -6%;
  pointer-events: none;
  z-index: 0;
  background: radial-gradient(50% 60% at 50% 50%, rgba(46, 106, 224, 0.15), transparent 72%);
}
/* 极小标签（缩到很小、看得见即可） */
.logo-marquee-tag {
  position: relative;
  z-index: 2;
  text-align: center;
  font-family: var(--font-mono);
  font-size: 11px;
  letter-spacing: 0.04em;
  color: rgba(206, 216, 238, 0.44);
}
.logo-marquee-tag .meta-cn { letter-spacing: 0.14em; }
.logo-marquee-rows {
  position: relative;
  z-index: 2;
  width: 100%;
  display: flex;
  flex-direction: column;
  gap: clamp(14px, 2vh, 26px);
  overflow: hidden;                  /* 裁掉横滚轨溢出 */
}
/* 两侧溶入深色（横向边缘羽化，logo 从暗处滑入/滑出） */
.logo-marquee-rows::after {
  content: "";
  position: absolute;
  inset: 0;
  pointer-events: none;
  z-index: 4;
  background: linear-gradient(90deg,
    #070B16 0%, rgba(7, 11, 22, 0.92) 8%, rgba(7, 11, 22, 0) 22%,
    rgba(7, 11, 22, 0) 78%, rgba(7, 11, 22, 0.92) 92%, #070B16 100%);
}
/* 走马灯轨：logo 自己缓慢横滚（纯 CSS，两拷贝→translateX -50% 无缝回绕）；两排反向不同速＝视差。
   间距用 chip margin（保证半轨精确对齐、无跳帧）；悬停暂停方便细看；RM 关闭自走。 */
.marquee-track {
  display: inline-flex;
  align-items: center;
  width: max-content;
  white-space: nowrap;
  will-change: transform;
  animation: logo-marquee 40s linear infinite;
}
.marquee-track[data-dir="-1"] {
  animation-duration: 47s;
  animation-direction: reverse;
}
@keyframes logo-marquee { to { transform: translateX(-50%); } }
.logo-marquee:hover .marquee-track { animation-play-state: paused; }
/* 单色刻蚀件直接落深底、无卡片；margin-right＝间距 */
.logo-chip {
  flex: 0 0 auto;
  margin-right: clamp(30px, 4vw, 56px);
  display: inline-flex;
  align-items: center;
  justify-content: center;
  opacity: 0.86;
  transition: opacity 0.3s var(--ease-ui), transform 0.4s var(--ease-pop), filter 0.35s var(--ease-ui);
  cursor: default;
}
.logo-chip img {
  height: clamp(24px, 3vw, 40px);
  width: auto;
  max-width: 220px;
  object-fit: contain;
  display: block;
  -webkit-user-drag: none;
  user-select: none;
}
.logo-chip:hover {
  opacity: 1;
  transform: scale(1.12);
  filter: drop-shadow(0 0 14px rgba(120, 152, 224, 0.6));
  z-index: 5;
}
/* RM：不自走——两排折行居中网格，23 家静态全见（去重复制轨） */
@media (prefers-reduced-motion: reduce) {
  .marquee-track { animation: none; flex-wrap: wrap; justify-content: center; width: 100%; }
  .logo-chip[aria-hidden] { display: none; }
}
/* M2 P1 修复：无 JS 域隐藏 data-src 占位 img，noscript 真图独占瓦片（构图不破相；JS 域预算门不受影响） */
html:not(.js) .wall-tile img[data-src] { display: none; }

/* ============================================================
   375 移动端
   ============================================================ */
/* 移动抽屉导航（Round1 F8：≤860 导航从「删除」改「披露菜单降级」；details 零 JS，键盘/读屏原生可达） */
.nav-m { display: none; }
@media (max-width: 860px) {
  .site-nav a:not(.btn) { display: none; }
  .nav-m { display: block; position: relative; margin-left: 10px; }
  .nav-m summary { list-style: none; cursor: pointer; display: flex; flex-direction: column; justify-content: center; gap: 4px; width: 40px; height: 40px; padding: 9px; border: 1px solid rgba(150, 178, 224, 0.25); border-radius: 8px; background: rgba(11, 16, 31, 0.4); }
  .nav-m summary::-webkit-details-marker { display: none; }
  .nav-m summary i { display: block; height: 2px; background: #DCE6F6; border-radius: 1px; transition: transform 0.25s, opacity 0.25s; }
  .nav-m[open] summary i:nth-child(1) { transform: translateY(6px) rotate(45deg); }
  .nav-m[open] summary i:nth-child(2) { opacity: 0; }
  .nav-m[open] summary i:nth-child(3) { transform: translateY(-6px) rotate(-45deg); }
  .nav-m-panel { position: absolute; right: 0; top: calc(100% + 10px); min-width: 216px; background: rgba(11, 16, 31, 0.97); border: 1px solid rgba(124, 160, 228, 0.22); border-radius: 12px; padding: 8px; display: flex; flex-direction: column; z-index: 60; box-shadow: 0 18px 44px rgba(4, 7, 14, 0.6); }
  .nav-m-panel a { display: block; padding: 12px 16px; color: #DCE6F6; text-decoration: none; font-size: 15px; border-radius: 8px; }
  .nav-m-panel a:hover, .nav-m-panel a:focus-visible { background: rgba(124, 160, 228, 0.14); color: #F5F5F2; }
  .logo-marquee-stage { padding: 32px 0; gap: 14px; }
  .logo-marquee-rows { gap: 14px; }
  .logo-chip { margin-right: 30px; }
}

/* ============================================================
   站点层（build.mjs 模板用）：内页 / 分幕 / 页脚
   ============================================================ */

/* 常驻 header 实色态（内页默认） */
.site-header.is-solid,
.site-header.is-scrolled {
  background: rgba(11, 27, 59, 0.94);
  border-bottom-color: var(--line-dark);
}
body.inner { padding-top: 0; }

/* ---------- 分幕 act ---------- */
.act { padding: clamp(56px, 8vw, 104px) clamp(20px, 4vw, 56px); }
.act-inner { max-width: 1080px; margin: 0 auto; }
.act h2 {
  /* P2-4 三件套：大标题字阶升档（原 clamp(24px,2.6vw,34px)） */
  font-size: clamp(28px, 3.2vw, 44px);
  margin-bottom: 22px;
  color: var(--navy);
}
.act p { max-width: 34em; margin: 0 0 14px; }
.act-light { background: var(--paper); }
.act-tint { background: var(--tint-blue); }
.act-dark { background: var(--navy-deep); color: rgba(234, 240, 250, 0.9); }
.act-dark h2 { color: var(--paper); }
.act-dark a { color: var(--cyan); }
.act-numbers { background: #fff; border-top: 1px solid var(--line); border-bottom: 1px solid var(--line); }
.act-lede { padding-top: clamp(40px, 6vw, 72px); }
.direct-answer-home { max-width: 44em; color: var(--muted); font-size: 15.5px; }

/* ---------- 表格 ---------- */
.table-wrap { overflow-x: auto; margin: 18px 0 26px; }
table { border-collapse: collapse; width: 100%; font-size: 15px; }
th, td { text-align: left; padding: 11px 16px; border-bottom: 1px solid var(--line); vertical-align: top; }
th { font-weight: 600; color: var(--navy); border-bottom: 2px solid var(--navy); white-space: nowrap; }
.act-dark th { color: var(--paper); border-bottom-color: var(--emerald); }
.act-dark td { border-bottom-color: var(--line-dark); }
td b, td strong { font-variant-numeric: tabular-nums; white-space: nowrap; }

/* 内页数据表设计化（内页去表格化）：dark mono 表头注入每表一段暗-亮对比 + 首列 mono 标签 + 卡片化，
   让密集口径表读作「设计过的数据」而非原始表格；保留 overflow-x:auto=375 可横滚不溢出 */
.article .table-wrap { border: 1px solid var(--line); border-radius: 6px; margin: 24px 0 32px; }
.article .table-wrap table { font-size: 14.5px; }
.article .table-wrap thead th { background: var(--navy-deep); color: var(--paper); font-family: var(--font-mono); font-weight: 500; font-size: 11.5px; letter-spacing: 0.08em; border-bottom: 0; padding: 12px 18px; }
.article .table-wrap tbody td { border-bottom: 1px solid var(--line); padding: 13px 18px; }
.article .table-wrap tbody tr:last-child td { border-bottom: 0; }
.article .table-wrap tbody td:first-child { font-family: var(--font-mono); font-size: 12.5px; color: var(--navy); letter-spacing: 0.02em; white-space: normal; }
.article .table-wrap td b, .article .table-wrap td strong { color: var(--navy); }

/* ---------- 内页 ---------- */
.page-hero {
  position: relative;
  background: var(--navy-deep);
  color: var(--paper);
  padding: calc(var(--header-h) + 44px) clamp(20px, 4vw, 56px) 56px;
  overflow: clip;
}
.page-hero h1 {
  font-family: var(--font-display);
  font-weight: 400;
  font-size: clamp(32px, 4.4vw, 58px);
  max-width: 20em;
  margin: 14px auto 20px;
}
.page-hero > * { position: relative; z-index: 2; max-width: 1080px; margin-left: auto; margin-right: auto; }
.crumbs { display: flex; align-items: center; flex-wrap: wrap; gap: 10px; font-size: 12.5px; color: var(--muted-dark); }
.crumbs a { color: var(--muted-dark); text-decoration: none; }
.crumbs a:hover { color: #fff; }
.crumbs .dia { width: 4px; height: 4px; opacity: 0.6; }
.direct-answer { max-width: 44em; color: rgba(226, 234, 248, 0.88); font-size: 16px; }
.direct-answer p { margin-bottom: 12px; }

.article {
  max-width: 1080px;
  margin: 0 auto;
  padding: clamp(40px, 6vw, 72px) clamp(20px, 4vw, 56px);
}
.article h2 {
  font-size: clamp(22px, 2.4vw, 30px);
  color: var(--navy);
  margin: 44px 0 16px;
  word-break: keep-all;
}
.article h2:first-child { margin-top: 0; }
.article h3 { font-size: 17.5px; margin: 26px 0 10px; color: var(--ink); }
.article p, .article li { max-width: 34em; }
.article p { margin: 0 0 14px; }
.article ol { margin: 0 0 18px 1.6em; }
/* 杯盖单元排印配件（M4/M5）：无序列表符=钴蓝点阵像素（杯盖点阵母题的排印延伸）；有序表保留数字 */
.article ul { list-style: none; margin: 0 0 18px; }
.article ul > li { position: relative; padding-left: 1.5em; }
.article ul:not(.check-list) > li::before {
  content: ""; position: absolute; left: 0.2em; top: 0.62em;
  width: 7px; height: 7px; border-radius: 1.5px;
  background: var(--navy); box-shadow: 0 0 0 1.5px rgba(14, 72, 175, 0.15);
}
.article li { margin-bottom: 6px; }
/* 杯盖单元分隔线：钴蓝点阵行替代素 1px 线（分隔符也讲点阵语汇） */
.article hr {
  border: 0; height: 6px; margin: 40px 0;
  background: radial-gradient(circle at center, var(--navy) 1.5px, transparent 2px) left center / 13px 6px repeat-x;
  opacity: 0.5;
}

.quote-block {
  border-left: 3px solid var(--navy);
  background: var(--tint-blue);
  border-radius: 0 var(--radius) var(--radius) 0;
  padding: 18px 22px;
  margin: 0 0 32px;
  max-width: 44em;
  font-size: 15.5px;
  color: var(--ink);
}

.faq-sec h2 { margin-top: 48px; }
/* 杯盖单元 FAQ 分隔：钴蓝点阵行（home 与内页 FAQ 共用，母题延伸进浅色中段） */
.faq-item { border-top: 0; padding: 26px 0 6px; background: radial-gradient(circle at center, var(--navy) 1.4px, transparent 1.9px) left top / 13px 6px repeat-x; }
.faq-item h3 { margin: 0 0 8px; font-size: 16.5px; color: var(--navy); }
.faq-item p { color: var(--muted); font-size: 15px; }

.byline { color: var(--muted); font-size: 12.5px; margin-top: 40px; }
/* 企业微信二维码（URL 编码，钴蓝模块）：白卡衬底保扫码可靠 */
.wx-qr-figure { margin: 24px 0 28px; display: flex; flex-direction: column; align-items: flex-start; gap: 8px; }
.wx-qr { display: block; background: #fff; padding: 10px; border-radius: 10px; box-shadow: 0 2px 8px rgba(14, 72, 175, 0.14); }
.wx-qr-figure figcaption { font-size: 13px; color: var(--muted); letter-spacing: 0.02em; }

/* ---------- 统一联系入口：企业微信 / 1688 / 公众号 ---------- */
.contact-channels { margin: 30px 0 42px; }
.contact-channel-grid {
  display: grid;
  grid-template-columns: 1.08fr 1fr 1fr;
  gap: 12px;
}
.contact-channel {
  min-width: 0;
  display: grid;
  grid-template-columns: clamp(94px, 9vw, 118px) minmax(0, 1fr);
  align-items: center;
  gap: 16px;
  padding: 16px;
  color: var(--ink);
  background: #fff;
  border: 1px solid var(--line);
  border-radius: var(--radius);
  text-decoration: none;
  box-shadow: 0 8px 24px rgba(14, 72, 175, 0.07);
  transition: transform var(--t-micro) var(--ease-cuiyin), border-color var(--t-micro) var(--ease-cuiyin), box-shadow var(--t-micro) var(--ease-cuiyin);
}
.contact-channel:hover {
  color: var(--ink);
  transform: translateY(-3px);
  border-color: rgba(14, 72, 175, 0.46);
  box-shadow: 0 16px 34px rgba(14, 72, 175, 0.12);
}
.contact-channel:focus-visible { outline: 3px solid var(--azure); outline-offset: 3px; }
.contact-channel-qr {
  display: block;
  width: 100%;
  aspect-ratio: 1;
  padding: 7px;
  overflow: hidden;
  background: #fff;
  border: 1px solid var(--line);
  border-radius: 5px;
}
.contact-channel-qr img { display: block; width: 100%; height: 100%; object-fit: contain; }
.contact-channel-copy { min-width: 0; display: flex; flex-direction: column; align-items: flex-start; gap: 5px; }
.contact-channel-meta {
  display: flex;
  flex-wrap: wrap;
  gap: 7px;
  font-family: var(--font-mono);
  font-size: 10.5px;
  line-height: 1.4;
  letter-spacing: 0.08em;
  color: var(--navy);
}
.contact-channel-meta b { font-weight: 500; color: var(--cobalt-5); }
.contact-channel-copy > strong { color: var(--ink); font-size: clamp(16px, 1.45vw, 19px); line-height: 1.25; }
.contact-channel-copy > span:not(.contact-channel-meta) { color: var(--muted); font-size: 12.5px; line-height: 1.55; }
.contact-channel-copy > em {
  margin-top: 5px;
  color: var(--navy);
  font-size: 12px;
  line-height: 1.4;
  font-style: normal;
  font-weight: 600;
}

/* ---------- CTA band ---------- */
.cta-band {
  background: var(--navy-abyss);
  color: var(--paper);
  text-align: center;
  padding: clamp(48px, 7vw, 88px) 24px;
}
.cta-line { font-size: clamp(17px, 2vw, 22px); margin-bottom: 24px; }

/* ---------- footer ---------- */
.site-footer {
  background: var(--navy-abyss);
  color: var(--muted-dark);
  font-size: 13.5px;
  padding: 48px clamp(20px, 4vw, 56px) 36px;
  border-top: 1px solid var(--line-dark);
}
.foot-grid { display: flex; flex-wrap: wrap; gap: 28px 72px; max-width: 1080px; margin: 0 auto 26px; }
.site-footer a { color: var(--muted-dark); text-decoration: none; }
.site-footer a:hover { color: #fff; }
.site-footer p { margin-bottom: 6px; line-height: 1.9; }
.contact-channels--footer { max-width: 1080px; margin: 30px auto 32px; padding-top: 28px; border-top: 1px solid var(--line-dark); }
.contact-channels-head { display: grid; grid-template-columns: minmax(0, 1fr) minmax(280px, 0.8fr); align-items: end; gap: 28px; margin-bottom: 18px; }
.contact-channels-head span { display: block; margin-bottom: 8px; color: var(--cobalt-3); font-family: var(--font-mono); font-size: 10.5px; letter-spacing: 0.14em; }
.contact-channels-head h2 { margin: 0; color: var(--paper); font-size: clamp(21px, 2.5vw, 30px); line-height: 1.25; }
.contact-channels-head p { max-width: 38em; margin: 0; color: var(--muted-dark); font-size: 12.5px; line-height: 1.7; }
.site-footer .contact-channel { color: var(--paper); background: rgba(245, 245, 242, 0.035); border-color: var(--line-dark); box-shadow: none; }
.site-footer .contact-channel:hover { color: var(--paper); background: rgba(245, 245, 242, 0.06); border-color: rgba(135, 166, 230, 0.5); box-shadow: none; }
.site-footer .contact-channel-copy > strong { color: var(--paper); }
.site-footer .contact-channel-copy > span:not(.contact-channel-meta) { color: var(--muted-dark); }
.site-footer .contact-channel-copy > em, .site-footer .contact-channel-meta { color: var(--cobalt-2); }
.foot-fine { max-width: 1080px; margin: 0 auto; border-top: 1px solid var(--line-dark); padding-top: 18px; font-size: 12px; text-align: center; }
.site-footer .foot-record { margin: 4px 0 0; }
.foot-record a { color: #B8C6E5; text-decoration: underline; text-decoration-color: rgba(184, 198, 229, 0.45); text-underline-offset: 3px; }
.foot-record a:hover { color: #fff; text-decoration-color: currentColor; }

@media (max-width: 860px) {
  .act p, .article p, .article li { max-width: none; }
  .contact-channel-grid { grid-template-columns: 1fr; }
  .contact-channel { grid-template-columns: 104px minmax(0, 1fr); }
  .contact-channels-head { grid-template-columns: 1fr; align-items: start; gap: 10px; }
}

@media (prefers-reduced-motion: reduce) {
  .contact-channel { transition: none; }
  .contact-channel:hover { transform: none; }
}

/* ============================================================
   首页组件层：统计带 / 客群卡 / 系列卡 / 风味墙 / 双模式 / 工厂 / 流程 / 数字带
   ============================================================ */

/* 滚动 reveal（隐藏初始态仅 .js 下生效——GEO 铁律） */
html.js .reveal { opacity: 0; transform: translateY(26px); transition: opacity 520ms var(--ease-cuiyin), transform 520ms var(--ease-cuiyin); }
html.js .reveal.in { opacity: 1; transform: none; }
@media (prefers-reduced-motion: reduce) {
  html.js .reveal { opacity: 1; transform: none; transition: none; }
}

/* 幕序幽灵编号（display 子集含全部数字） */
.act-inner, .act-inner-wide { position: relative; }
.act-no {
  position: absolute;
  top: -0.28em; right: -0.04em;
  font-family: var(--font-display);
  font-size: clamp(88px, 11vw, 168px);
  line-height: 1;
  color: transparent;
  -webkit-text-stroke: 1.5px rgba(14, 72, 175, 0.16);
  pointer-events: none;
  user-select: none;
}
.act-dark .act-no, .act-no-light { -webkit-text-stroke-color: rgba(234, 240, 250, 0.13); }

.act-inner-wide { max-width: 1220px; margin: 0 auto; }
.micro-note { font-size: 12.5px; color: var(--muted); letter-spacing: 0.06em; margin-top: 18px; }
.act-dark .micro-note { color: var(--muted-dark); }

/* ---------- 成交证据统计带 ---------- */
.act-stats .table-wrap { display: none; }
.stat-grid {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));
  gap: 8px;
  margin: 34px 0 10px;
}
.stat {
  border-top: 1px solid var(--line-dark);
  padding: 22px 18px 8px 0;
  display: flex; flex-direction: column; gap: 4px;
}
.stat-pre { font-size: 12.5px; letter-spacing: 0.08em; color: var(--muted-dark); }
.stat-big {
  font-family: var(--font-display);
  font-size: clamp(56px, 6.4vw, 92px);
  line-height: 1;
  color: #E6EBF7;
}
.stat-label { font-size: 14px; color: rgba(234, 240, 250, 0.85); max-width: 16em; }

/* ---------- 客群卡 ---------- */
.aud-grid {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(196px, 1fr));
  gap: 14px; margin-top: 28px;
}
.aud-card {
  display: flex; flex-direction: column; gap: 8px;
  background: #fff;
  border: 1px solid var(--line);
  border-radius: var(--radius);
  padding: 22px 20px 18px;
  text-decoration: none;
  transition: transform var(--t-micro) var(--ease-cuiyin), box-shadow var(--t-micro) var(--ease-cuiyin);
}
.aud-card:hover { transform: translateY(-3px); box-shadow: 0 2px 4px rgba(18, 32, 62, 0.06), 0 14px 30px rgba(18, 32, 62, 0.1); }
.aud-card h3 { font-size: 16.5px; color: var(--navy); }
.aud-card p { font-size: 14px; color: var(--muted); flex: 1; margin: 0; max-width: none; }
.aud-go { font-size: 13px; font-weight: 600; color: var(--azure); }

/* ---------- 系列 tint 卡（满幅实拍头图，禁白卡身） ---------- */
.series-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(260px, 1fr)); gap: 18px; margin-top: 28px; }
.series-card {
  display: flex; flex-direction: column;
  background: var(--tint);
  border-radius: var(--radius);
  overflow: clip;
  text-decoration: none;
  transition: transform var(--t-micro) var(--ease-cuiyin), box-shadow var(--t-micro) var(--ease-cuiyin);
}
.series-card:hover { transform: translateY(-4px); box-shadow: 0 3px 6px rgba(18, 32, 62, 0.08), 0 18px 40px rgba(18, 32, 62, 0.14); }
.series-img { display: block; aspect-ratio: 4 / 3; overflow: clip; }
.series-img img { width: 100%; height: 100%; object-fit: cover; transition: transform 180ms var(--ease-cuiyin); } /* P2-5：hover 回微交互层 120-200ms */
.series-card:hover .series-img img { transform: scale(1.04); }
.series-body { display: flex; flex-direction: column; gap: 10px; padding: 20px; }
.series-tag {
  align-self: flex-start;
  font-size: 12.5px; font-weight: 600; letter-spacing: 0.06em;
  color: #fff; background: var(--tag);
  border-radius: 4px; padding: 3px 10px;
}
/* P1-C：菱形连续性资产第三站（品牌章菱形→marquee ◆→系列卡 tag→footer logo）。
   .dia 变体单元进 tag 内：series-tag 上=白 ◆ 落 --tag 底、wall figcaption i
   上=currentColor（即 --wtag 白名单变量）落白底——两处 tag 同语言。 */
.series-tag::before, .wall-tile figcaption i::before {
  content: '';
  display: inline-block;
  width: 6px; height: 6px;
  margin-right: 7px;
  background: currentColor;
  transform: rotate(45deg);
  vertical-align: 7%;
}
.wall-tile figcaption i::before { width: 5px; height: 5px; margin-right: 6px; }
.series-body p { font-size: 14px; color: var(--ink); margin: 0; max-width: none; flex: 1; }

/* ---------- 九罐风味墙（jewel 数据色 × 抠图） ---------- */
.act-wall { background: var(--navy-deep); color: var(--paper); }
.act-wall h2 { color: var(--paper); }
.wall-lede { color: var(--muted-dark); max-width: 40em; }
.wall-lede a { color: var(--cyan); }
.wall-grid {
  display: grid;
  grid-template-columns: repeat(4, 1fr);
  gap: 14px; margin-top: 30px;
}
.wall-tile {
  position: relative;
  aspect-ratio: 1;
  background: var(--wbg);
  border-radius: var(--radius);
  overflow: clip;
  display: flex; align-items: center; justify-content: center;
  margin: 0;
}
.wall-tile img {
  /* M2 关门修：绝对定位居中——noscript 真图不再参与网格 min-content 计算
     （无 JS 1440 轨道 343px 溢出→截列的根因），两域构图统一 294.5px 轨道 */
  position: absolute; inset: 0; margin: auto;
  width: 76%; max-height: 62%;
  object-fit: contain;
  filter: drop-shadow(0 16px 22px rgba(10, 16, 34, 0.28));
  transition: transform 180ms var(--ease-cuiyin); /* P2-5：hover 回微交互层 120-200ms */
}
.wall-tile:hover img { transform: translateY(-6px) scale(1.03); }
.wall-no {
  position: absolute; top: 8px; left: 14px;
  font-family: var(--font-display);
  font-size: clamp(44px, 5vw, 72px);
  line-height: 1;
  color: transparent;
  -webkit-text-stroke: 1.3px rgba(18, 32, 62, 0.24);
}
.wall-tile figcaption {
  position: absolute; inset: auto 0 0 0;
  display: flex; align-items: baseline; justify-content: space-between; gap: 8px;
  padding: 26px 14px 12px;
  background: linear-gradient(rgba(9, 13, 24, 0), rgba(9, 13, 24, 0.60));
}
.wall-tile figcaption b { color: #fff; font-size: 16px; font-weight: 600; letter-spacing: 0.02em; }
.wall-tile figcaption i { font-style: normal; font-size: 11px; color: var(--wtag); background: rgba(255,255,255,0.92); border-radius: 4px; padding: 2px 8px; font-weight: 600; white-space: nowrap; }

/* ---------- 双模式对照卡 ---------- */
.mode-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(300px, 1fr)); gap: 18px; margin: 26px 0; }
.mode-card {
  background: #fff;
  border: 1px solid var(--line);
  border-top: 3px solid var(--navy);
  border-radius: var(--radius);
  padding: 24px 24px 18px;
}
.mode-card h3 { font-size: 18px; color: var(--navy); margin-bottom: 14px; }
.mode-card dl div { display: grid; grid-template-columns: 5.5em 1fr; gap: 10px; padding: 10px 0; border-top: 1px solid var(--line); }
.mode-card dt { font-size: 13px; font-weight: 600; color: var(--muted); }
.mode-card dd { font-size: 14px; margin: 0; }

/* ---------- 工厂满幅证据区 ---------- */
.act-factory {
  position: relative;
  isolation: isolate;   /* 建立层叠上下文：负 z 的实拍图压在本节背景之上 */
  overflow: hidden;
  background: var(--navy-deep);
  color: var(--paper);
  min-height: 520px;
  display: flex; align-items: center;
}
/* 实拍从 CSS background 改真 <img loading=lazy>（首屏零成本）；负 z 层入背景，遮罩压其上 */
.factory-photo {
  position: absolute; inset: 0;
  width: 100%; height: 100%;
  object-fit: cover;
  z-index: -2;
}
.act-factory::before {
  content: "";
  position: absolute; inset: 0;
  background: linear-gradient(100deg, rgba(9, 13, 24, 0.93) 0%, rgba(9, 13, 24, 0.74) 46%, rgba(9, 13, 24, 0.32) 100%);
  z-index: -1;
}
.act-factory h2 { color: var(--paper); }
.act-factory .act-inner { width: 100%; }
.factory-copy { max-width: 36em; }
.factory-copy p { color: rgba(226, 234, 248, 0.88); }
.check-list { list-style: none; margin: 22px 0 0; display: grid; grid-template-columns: repeat(auto-fit, minmax(220px, 1fr)); gap: 10px 26px; max-width: 560px; }
.check-list li { padding-left: 26px; position: relative; font-size: 15px; }
.check-list li::before {
  content: ""; position: absolute; left: 0; top: 0.42em;
  width: 12px; height: 7px;
  border-left: 2.5px solid var(--cyan);
  border-bottom: 2.5px solid var(--cyan);
  transform: rotate(-45deg);
}
.photo-note { position: absolute; right: 18px; bottom: 14px; font-size: 11.5px; letter-spacing: 0.1em; color: rgba(234, 240, 250, 0.55); }

/* ---------- 流程四步 ---------- */
.step-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(220px, 1fr)); gap: 16px; margin-top: 30px; }
.step { border-top: 2px solid var(--navy); padding-top: 16px; }
.step-no {
  font-family: var(--font-display);
  font-size: 44px; line-height: 1;
  color: var(--navy);
  display: block; margin-bottom: 10px;
}
.step h3 { font-size: 16.5px; margin-bottom: 8px; color: var(--navy); }
.step p { font-size: 14px; color: var(--muted); margin: 0; max-width: none; }

/* ---------- 数字带 ---------- */
.act-numbers .table-wrap { display: none; }
.num-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(220px, 1fr)); margin: 30px 0 14px; }
.numcell { padding: 6px 22px 14px 22px; border-left: 1px solid var(--line); min-width: 0; overflow-wrap: anywhere; }
.numcell:first-child { border-left: 0; padding-left: 0; }
.numcell-label { display: block; font-size: 12.5px; letter-spacing: 0.06em; color: var(--muted); margin-bottom: 8px; }
.numcell-value { font-family: var(--font-display); font-size: clamp(22px, 2.2vw, 34px); color: var(--navy); line-height: 1.1; display: block; }
.numcell-rest { display: block; font-size: 12.5px; color: var(--muted); margin-top: 6px; line-height: 1.5; }

/* ---------- 设备参数巨号数字带（act-specs：深域 · 钴蓝 display 大字 · 1px 分隔格） ---------- */
.act-specs { background: var(--navy-deep); color: var(--paper); }
.act-specs h2 { color: var(--paper); }
.spec-grid {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(196px, 1fr));
  gap: 1px;
  margin: 38px 0 2px;
  background: var(--line-dark);
  border: 1px solid var(--line-dark);
}
.spec-cell {
  background: var(--navy-deep);
  padding: 22px clamp(18px, 2vw, 30px) 26px;
  min-width: 0;
  overflow-wrap: anywhere;
}
.spec-label {
  display: block;
  font-family: var(--font-mono);
  font-size: 12px;
  letter-spacing: 0.08em;
  color: rgba(159, 192, 232, 0.72);
  margin-bottom: 12px;
}
.spec-value {
  display: block;
  font-family: var(--font-display);
  font-size: clamp(32px, 4vw, 56px);
  line-height: 1;
  color: #EAF1FC;
  font-feature-settings: "tnum";
  letter-spacing: -0.01em;
}
.spec-value .meta-cn { font-size: inherit; }
.spec-unit {
  font-family: var(--font-body);          /* 单位走 MiSans 全覆盖：℃/kg/kW/批 不掉字 */
  font-size: clamp(13px, 1.1vw, 17px);
  font-weight: 600;
  color: rgba(159, 192, 232, 0.9);
  margin-left: 7px;
  letter-spacing: 0;
}
.spec-value-text {
  font-family: var(--font-body);
  font-size: clamp(16px, 1.5vw, 20px);
  font-weight: 600;
  line-height: 1.35;
  color: #DCE6F6;
  letter-spacing: 0;
}
.spec-grid > :nth-child(2) { transition-delay: 50ms; }
.spec-grid > :nth-child(3) { transition-delay: 100ms; }
.spec-grid > :nth-child(4) { transition-delay: 150ms; }
.spec-grid > :nth-child(n+5) { transition-delay: 200ms; }

/* ---------- 核心技术「工序场」（act-tech · 杯盖点阵驱动的工序世界；照片即像素） ---------- */
.act-tech { background: var(--navy-deep); color: var(--paper); position: relative; isolation: isolate; }
.act-tech h2 { color: var(--paper); }
/* 默认（≤860 / 无 JS / RM）：纵向堆叠——照片在上、实心承托板在下，全见可读、零图压字 */
.tech-canvas, .tech-veil, .tech-rail { display: none; }
.tech-head-fixed { margin: 0 0 6px; }
.tech-stage { display: flex; flex-direction: column; gap: clamp(28px, 5vh, 54px); margin-top: 26px; }
.tech-phase { position: relative; opacity: 1; margin: 0; }
.tech-shot { margin: 0; position: relative; aspect-ratio: 16 / 9; overflow: hidden; background: var(--ink); border: 1px solid var(--line-dark); }
.tech-shot img { width: 100%; height: 100%; object-fit: cover; display: block; }
.tech-plate { background: var(--navy-deep); border-top: 2px solid var(--navy); padding: clamp(16px, 2.6vw, 28px) clamp(16px, 2.6vw, 30px); }
.tech-kicker { display: block; font-family: var(--font-mono); font-size: 12px; letter-spacing: 0.07em; color: rgba(159, 192, 232, 0.66); margin-bottom: 10px; }
.tech-beat-title { font-family: var(--font-display); font-weight: 400; font-size: clamp(20px, 2.1vw, 28px); line-height: 1.1; color: #EBF1FC; margin: 0 0 13px; }
.tech-copy p { color: #C7D5EE; font-size: 15px; line-height: 1.72; max-width: 40em; margin: 0 0 10px; }
.tech-copy p:last-child { margin-bottom: 0; }
.tech-copy strong { color: #EAF1FC; font-weight: 600; }
.tech-specs { display: grid; grid-template-columns: repeat(auto-fit, minmax(116px, 1fr)); gap: 1px; margin-top: 20px; background: var(--line-dark); border: 1px solid var(--line-dark); }
.tech-specs .spec-cell { background: var(--navy-deep); padding: 13px 15px 15px; }
.tech-specs .spec-value { font-size: clamp(26px, 3vw, 40px); }
.tech-specs .spec-label { margin-bottom: 8px; }
.act-tech .check-list { margin-top: 16px; }

/* 增强层：桌面 + motion-safe + JS 采样成功（.tech-live）→ 钉屏满幅点阵世界，承托板浮于角落 */
@media (min-width: 861px) and (prefers-reduced-motion: no-preference) {
  html.js .act-tech.tech-live { min-height: 160vh; padding: 0; overflow: clip; }   /* 逐拍播放：跑道塌缩(100svh pin + 60vh runway 作 engage 带/释放落点) */
  html.js .act-tech.tech-live .tech-pin { position: sticky; top: 0; height: 100svh; overflow: hidden; }
  html.js .act-tech.tech-live.tech-reverse-clone {
    position: fixed; inset: 0; width: 100vw; height: 100vh; min-height: 0; z-index: 81;
    padding: 0; overflow: hidden; pointer-events: none; isolation: isolate; background: var(--navy-deep);
  }
  html.js .act-tech.tech-live.tech-reverse-clone .tech-pin {
    position: absolute; inset: 0; top: 0; height: 100%;
  }
  html.js .act-tech.tech-live .tech-canvas { display: block; position: absolute; inset: 0; width: 100%; height: 100%; z-index: 0; }
  html.js .act-tech.tech-live .tech-veil {
    display: block; position: absolute; inset: 0; z-index: 1; pointer-events: none;
    background:
      linear-gradient(180deg, rgba(5, 8, 17, 0.82) 0%, rgba(5, 8, 17, 0.5) 9%, rgba(5, 8, 17, 0.16) 18%, transparent 27%),
      radial-gradient(118% 104% at 13% 86%, rgba(5, 8, 17, 0.9), rgba(5, 8, 17, 0.44) 32%, rgba(5, 8, 17, 0) 60%),
      linear-gradient(0deg, rgba(5, 8, 17, 0.72), transparent 42%),
      linear-gradient(90deg, rgba(5, 8, 17, 0.52), transparent 46%);
  }
  html.js .act-tech.tech-live .tech-head-fixed .act-head,
  html.js .act-tech.tech-live .tech-head-fixed h2 { text-shadow: 0 2px 22px rgba(4, 7, 14, 0.92), 0 1px 4px rgba(4, 7, 14, 0.85); }
  html.js .act-tech.tech-live .tech-head-fixed {
    position: absolute; top: calc(var(--header-h) + 20px); left: clamp(28px, 4vw, 64px); z-index: 3; margin: 0;
  }
  html.js .act-tech.tech-live .tech-head-fixed .act-head { margin: 0; }
  html.js .act-tech.tech-live .act-no-light { position: absolute; top: calc(var(--header-h) + 8px); right: clamp(28px, 4vw, 64px); z-index: 3; opacity: 0.14; }
  html.js .act-tech.tech-live .tech-stage { position: absolute; inset: 0; z-index: 2; margin: 0; display: block; }
  html.js .act-tech.tech-live .tech-phase {
    position: absolute; left: clamp(28px, 4vw, 64px); bottom: clamp(84px, 13vh, 132px);
    width: min(540px, 46vw); margin: 0; opacity: 0; will-change: opacity, transform;
  }
  html.js .act-tech.tech-live .tech-phase-hero { width: min(680px, 56vw); }
  html.js .act-tech.tech-live .tech-shot { display: none; }
  html.js .act-tech.tech-live .tech-plate {
    background: none; border: none; border-left: 2px solid rgba(124, 160, 228, 0.62); padding: 2px 0 2px clamp(16px, 1.4vw, 24px);
    text-shadow: 0 1px 18px rgba(4, 7, 14, 0.88), 0 0 3px rgba(4, 7, 14, 0.7);
  }
  html.js .act-tech.tech-live .tech-kicker { font-size: 13px; color: #9CC0E8; }
  html.js .act-tech.tech-live .tech-beat-title { font-size: clamp(30px, 3.5vw, 52px); margin-bottom: 16px; }
  html.js .act-tech.tech-live .tech-phase-hero .tech-beat-title { font-size: clamp(34px, 4vw, 62px); }
  html.js .act-tech.tech-live .tech-copy p { color: #DCE6F6; font-size: clamp(15px, 1.15vw, 17px); max-width: 30em; }
  html.js .act-tech.tech-live .tech-specs {
    background: none; border: none; grid-template-columns: repeat(4, auto); gap: clamp(16px, 1.8vw, 30px); margin-top: 24px;
  }
  html.js .act-tech.tech-live .tech-specs .spec-cell { background: none; padding: 0; }
  html.js .act-tech.tech-live .tech-specs .spec-value { font-size: clamp(30px, 3.4vw, 46px); }
  html.js .act-tech.tech-live .check-list { margin-top: 18px; }
  html.js .act-tech.tech-live .tech-rail {
    display: flex; position: absolute; z-index: 3; left: 50%; transform: translateX(-50%);
    bottom: clamp(26px, 4vh, 46px); gap: clamp(16px, 2vw, 34px); align-items: center;
  }
  /* 非激活态对比提升（Round1 F9）+ B2 按钮化（真按钮可点跳拍，键盘/读屏同权） */
  .tech-tick { display: flex; align-items: center; gap: 7px; background: none; border: 0; padding: 6px 4px; cursor: pointer; font-family: var(--font-mono); font-size: 11px; letter-spacing: 0.09em; color: rgba(190, 210, 240, 0.72); text-shadow: 0 1px 10px rgba(4, 7, 14, 0.9), 0 0 3px rgba(4, 7, 14, 0.7); transition: color 0.35s; }
  .tech-tick:hover, .tech-tick:focus-visible { color: #E4EFFB; }
  .tech-tick i { width: 7px; height: 7px; border-radius: 50%; background: rgba(170, 194, 232, 0.55); transition: background 0.35s, box-shadow 0.35s, transform 0.35s; }
  /* B2 首次锁定微提示：engage 时 3.8s 淡入淡出（beat-clock 挂 .beat-hint-on）；display 在基础档=none（R4-J3：移动端曾泄漏成裸文本） */
  .tech-hint { display: block; position: absolute; z-index: 3; left: 50%; transform: translateX(-50%) translateY(6px); bottom: clamp(64px, 9vh, 96px); margin: 0; font-family: var(--font-mono); font-size: 11px; letter-spacing: 0.14em; color: rgba(190, 210, 240, 0.85); text-shadow: 0 1px 10px rgba(4, 7, 14, 0.9); opacity: 0; pointer-events: none; transition: opacity 0.5s var(--ease-cuiyin), transform 0.5s var(--ease-cuiyin); }
  .tech-hint span { margin-left: 14px; opacity: 0.55; }
  .act-tech.beat-hint-on .tech-hint { opacity: 1; transform: translateX(-50%) translateY(0); }
  .tech-tick b { font-weight: 400; }
  .tech-tick.on { color: #E4EFFB; }
  .tech-tick.on i { background: #7CA0E4; box-shadow: 0 0 11px rgba(124, 160, 228, 0.85); transform: scale(1.25); }
}

/* ---------- 首页 FAQ 两栏 ---------- */
.faq-cols { columns: 2; column-gap: 44px; margin-top: 10px; }
.faq-cols .faq-item { break-inside: avoid; }

@media (max-width: 860px) {
  .wall-grid { display: flex; overflow-x: auto; scroll-snap-type: x mandatory; gap: 12px; margin-left: -20px; margin-right: -20px; padding: 0 20px 10px; }
  .wall-tile { flex: 0 0 72vw; scroll-snap-align: center; aspect-ratio: 1; }
  .faq-cols { columns: 1; }
  .act-no { font-size: 72px; top: -0.2em; }
  .act-factory { min-height: 440px; }
}

/* ============================================================
   处方一+二施工层：token 派生表 / 唯一缓动 / 双域协议 /
   点阵看板 hero / 蓝图网格线 / CSS 入场（gsap 退役）
   ============================================================ */

:root {
  /* 唯一缓动（全站签名，处方一）*/
  --ease-cuiyin: cubic-bezier(0.19, 1, 0.22, 1);

  /* 钴蓝 8 级明度阶（封闭派生表——禁止临时调色）*/
  --cobalt-1: #EFF4FE;
  --cobalt-2: #C3D3F4;   /* 深域文字级（≥4.5:1 on ink）*/
  --cobalt-3: #87A6E6;   /* 深域图形级（≥3:1）*/
  --cobalt-4: #4E7BD4;
  --cobalt-5: #3260BC;
  --cobalt-6: #284D96;   /* = logo 主蓝亮化中枢 */
  --cobalt-7: #223C74;
  --cobalt-8: #1D2E56;

  /* 三基色 alpha 档 */
  --cobalt-a10: rgba(14, 72, 175, 0.10);
  --cobalt-a50: rgba(14, 72, 175, 0.50);
  --ink-a10: rgba(23, 27, 38, 0.10);
  --ink-a50: rgba(23, 27, 38, 0.50);
  --paper-a05: rgba(245, 245, 242, 0.05);
  --paper-a10: rgba(245, 245, 242, 0.10);

  /* 蓝图网格线三档（深域铺底）——离纯白、上钴蓝，并入「一束光」冷调体系 */
  --bp-1: rgba(138, 176, 240, 0.055);
  --bp-2: rgba(138, 176, 240, 0.028);
  --bp-3: rgba(138, 176, 240, 0.014);
}

/* ---------- 双域协议（data-bg：同名变量按域取值）---------- */
[data-bg="deep"] {
  --bg-c: var(--navy-deep);
  --fg-c: #E8EBF2;
  --fg-muted: var(--muted-dark);
  --line-c: var(--line-dark);
  --accent-on: var(--cobalt-2);
}
[data-bg="light"] {
  --bg-c: var(--paper);
  --fg-c: var(--ink);
  --fg-muted: var(--muted);
  --line-c: var(--line);
  --accent-on: var(--navy);
}

/* ---------- 点阵看板 hero ---------- */
.hero-board {
  position: relative;
  min-height: 100svh;
  display: flex;
  align-items: center;
  justify-content: center;
  background:
    linear-gradient(var(--bp-1) 1px, transparent 1px),
    linear-gradient(90deg, var(--bp-1) 1px, transparent 1px),
    linear-gradient(var(--bp-2) 1px, transparent 1px),
    linear-gradient(90deg, var(--bp-2) 1px, transparent 1px),
    var(--navy-deep);
  background-size: 160px 160px, 160px 160px, 40px 40px, 40px 40px, auto;
  color: var(--paper);
  overflow: clip;
}
.hero-board-inner {
  width: min(94vw, 1180px);
  padding: calc(var(--header-h) + 28px) 0 48px;
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: 28px;
}

.board-wrap {
  position: relative;
  /* 收整（2.3 cup 出屏后单一主体）：浅视口按 svh 收窄看板，
     保证「看板+128px h1+meta+CTA」整组进 100svh sticky 不裁切 */
  width: min(100%, max(420px, calc((100svh - 590px) * 3)));
  margin-inline: auto;
  border: 1px solid rgba(206, 216, 238, 0.16);
  padding: clamp(10px, 1.4vw, 20px);
  background: rgba(7, 11, 22, 0.35);
}
.board-wrap::before, .board-wrap::after {
  content: "";
  position: absolute;
  width: 7px; height: 7px;
  border: 1px solid var(--cobalt-3);
}
.board-wrap::before { top: -4px; left: -4px; border-right: 0; border-bottom: 0; }
.board-wrap::after { bottom: -4px; right: -4px; border-left: 0; border-top: 0; }

.board-stage { position: relative; }
.board-frame0 {
  display: block;
  width: 100%;
  height: auto;
}
.board-frame0.is-standby { visibility: hidden; }
#board {
  position: absolute;
  inset: 0;
  display: block;
  opacity: 0;
  z-index: 1;                     /* 字层在深场 #board-depth(z:0) 之上 */
  transition: opacity 700ms var(--ease-cuiyin);
}
#board.is-live { opacity: 1; will-change: transform, filter; }   /* 字层镜头由 hero-depth 每帧写 transform/filter，提升独立图层；transition 保持仅 opacity（不给 transform 加过渡=不抢属性） */
/* 深场画布（hero-depth.js 动态插在 #board 之前）：满铺、垫在字层之下 */
#board-depth { position: absolute; inset: 0; display: block; z-index: 0; }
/* 逐拍播放 engage 态（beat-clock 拦截手势时）：断滚动链、禁平滑滚，不用 overflow:hidden 以免挡传送 scrollTo */
html.beat-engaged, html.beat-engaged body,
html.hero-clock-active, html.hero-clock-active body { overscroll-behavior: none; scroll-behavior: auto; }

.btag {
  position: absolute;
  z-index: 4; /* 压住工序档案幽灵描边 */
  font-family: var(--font-mono);
  font-size: 10.5px;
  letter-spacing: 0.18em;
  color: var(--cobalt-3);
  user-select: none;
}
.btag.tl { top: -19px; left: 0; }
.btag.tr { top: -19px; right: 0; }

.board-steps {
  display: flex;
  flex-wrap: wrap;
  justify-content: space-between;
  gap: 6px 12px;
  margin: 12px 2px 0;
  font-family: var(--font-mono);
  font-size: 11.5px;
  letter-spacing: 0.16em;
  color: var(--cobalt-2); /* P1-12：深域未激活态 ≥4.5:1（实测 ~12.6:1 on navy-deep） */
}
.board-steps span { transition: color 400ms var(--ease-cuiyin), text-shadow 400ms var(--ease-cuiyin); }
.board-steps span.on { color: var(--mint); text-shadow: 0 0 16px rgba(6, 178, 138, 0.4); }

/* ---------- 工序档案大字层（2.1 display 勇气：[01]萃取…[04]结晶）----------
   页面合同（build.mjs 已落）：.board-wrap 内、.board-stage 之后
     <div class="board-process">
       <p class="process-word" data-process-index="01">
         <span class="process-no num">[01]</span><span class="process-cn">萃取</span></p> ×4
   lid-board 与步进灯同源切 .on（描边幽灵态→实色，160ms 微交互层）。
   绝对定位盖回看板画面（aspect-ratio 3:1＝frame0 960×320），
   四象限落位在看板侧，不压 board-steps 与下方 hero 文案；
   文案真身另存 .board-steps（装饰层不承载唯一文案）。 */
.board-process {
  position: absolute;
  top: clamp(10px, 1.4vw, 20px);
  left: clamp(10px, 1.4vw, 20px);
  right: clamp(10px, 1.4vw, 20px);
  aspect-ratio: 3 / 1;
  z-index: 3;
  pointer-events: none;
  user-select: none;
}
.process-word {
  position: absolute;
  margin: 0;
  font-family: var(--font-display);
  font-size: clamp(96px, 18vw, 240px);
  line-height: 1;
  letter-spacing: 0.02em;
  color: transparent;
  -webkit-text-stroke: 1.5px rgba(234, 240, 250, 0.09);
  transition: color var(--t-micro) var(--ease-cuiyin),
              -webkit-text-stroke-color var(--t-micro) var(--ease-cuiyin);
}
.process-word.on {
  color: var(--cobalt-2);          /* 派生表深域文字级，≥4.5:1 */
  -webkit-text-stroke-color: transparent;
}
.process-no {
  font-family: var(--font-mono);
  font-size: 0.13em;
  letter-spacing: 0.18em;
  vertical-align: 2.2em;
  margin-right: 0.6em;
  -webkit-text-stroke: 0;
  color: rgba(234, 240, 250, 0.28);
}
.process-word.on .process-no { color: var(--cobalt-3); }
/* 四象限落位（集成员可用 --wx/--wy 内联覆写微调） */
.process-word:nth-child(1) { top: var(--wy, -0.10em); left: var(--wx, -0.02em); }
.process-word:nth-child(2) { top: var(--wy, -0.10em); right: var(--wx, -0.02em); }
.process-word:nth-child(3) { bottom: var(--wy, -0.04em); left: var(--wx, -0.02em); }
.process-word:nth-child(4) { bottom: var(--wy, -0.04em); right: var(--wx, -0.02em); }

.hero-copy-v2 {
  text-align: center;
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: 20px;
}
/* 2.1 display 勇气：h1 一行定义句提级 128px 字阶（13.4svh 是浅视口安全阀，
   900 高视口得 120.6px（≥验收线 120px），≥956px 视口高即回满格 128px） */
.hero-copy-v2 h1 {
  font-family: var(--font-display);
  font-weight: 400;
  font-size: clamp(56px, min(9vw, 13.4svh), 128px);
  line-height: 1.06;
  letter-spacing: 0.01em;
  word-break: keep-all;
}
/* 断行手控（clreq 避头尾，P2-9）：页面合同＝「/」后 <wbr> 给唯一断点，
   「——萃饮科技」包 .h1-brand。::before 注入 U+2060 词连符把破折号焊在前文上
   （keep-all 下 B2 类破折号前仍是合法断点，词连符将其封死），
   nowrap 再禁段内断——「——萃饮科技」永不落行首 */
.h1-brand { white-space: nowrap; }
.h1-brand::before { content: "\2060"; }

/* mono 专岗（P1-5）：仅拉丁/数字走 CY Mono；中文词剥离进 .meta-cn（正文黑体并置结构） */
.meta-mono {
  font-family: var(--font-mono);
  font-size: 12.5px;
  letter-spacing: 0.14em;
  color: var(--fg-muted, var(--muted-dark));
  white-space: normal;
}
.meta-cn {
  font-family: var(--font-body);
  font-size: 12px;
  letter-spacing: 0.08em;
}
/* 步进灯行内的中文随行内字号走（12px 定档仅限 meta-mono 行） */
.board-steps .meta-cn { font-size: inherit; }

/* ---------- CSS 入场（gsap 退役；隐藏初始态仅 html.js + motion-safe）---------- */
@media (prefers-reduced-motion: no-preference) {
  html.js .hero-board .board-wrap {
    opacity: 0;
    animation: cyFade 0.9s var(--ease-cuiyin) 0.08s forwards;
  }
  /* h1(第 1 子)揭示全权交逐字运动排版层（hero-depth），不走块级 cyRise=避免块+逐字双重入场；
     meta/按钮(2/3 子)仍块级淡入。h1 无 CSS 隐藏态=降级/无 JS 时静止全文可读、不卡隐藏。 */
  html.js .hero-copy-v2 > :nth-child(n+2) {
    opacity: 0;
    transform: translateY(22px);
    animation: cyRise 0.6s var(--ease-cuiyin) forwards;
  }
  html.js .hero-copy-v2 > :nth-child(2) { animation-delay: 0.34s; }
  html.js .hero-copy-v2 > :nth-child(3) { animation-delay: 0.46s; }
}
@keyframes cyRise { to { opacity: 1; transform: none; } }
@keyframes cyFade { to { opacity: 1; } }

@media (max-width: 860px) {
  .hero-board { align-items: flex-start; }
  .hero-board-inner { gap: 24px; padding: calc(var(--header-h) + 46px) 0 64px; }
  .btag { font-size: 8.5px; letter-spacing: 0.12em; }
  .btag.tl { top: -15px; } .btag.tr { top: -15px; }
  .hero-copy-v2 h1 { font-size: clamp(34px, 9.2vw, 52px); }
  .board-steps { font-size: 9.5px; letter-spacing: 0.08em; gap: 4px 8px; }
  .meta-mono { font-size: 11px; letter-spacing: 0.06em; }
  .meta-cn { font-size: 10.5px; }
  .board-steps .meta-cn { font-size: inherit; }
  .board-wrap { width: 100%; }
  /* 375：大字层撤下保看板重心与零横滚（移动档位方案归 M3 P2-9；
     工序文案真身在 .board-steps，叙事不缺席） */
  .board-process { display: none; }
}


/* ============================================================
   动线/镜头/沉浸层（2026-07-10 用户验收补课）
   ============================================================ */

/* 镜头一：hero 滚动跑道（JS 可用才展开）。
   展开走 CSS：html.js 由 head 内联脚本同步打上，先于浏览器首轮 lazy 扫描，
   避免 hero 未展开时 act-wall 落入 loading=lazy 预取阈值（首屏预算门回归，M2 P1）。
   .choreo 选择器保留兼容（lid-board 仍注入，但其时机晚于 scenes.json fetch）。
   无 JS 与 reduced-motion 自然回 100svh——撤运动不撤叙事。 */
@media (prefers-reduced-motion: no-preference) {
  html.js .hero-board, .hero-board.choreo { display: block; min-height: 320vh; overflow: visible; }   /* hero 普通滚动刮擦跑道（不逐拍）：sticky 屏 + 滚动推进相机/字镜头/看板 morph */
  html.js .hero-board .grain, .hero-board.choreo .grain { position: absolute; }
  html.js .hero-board .hero-sticky, .hero-board.choreo .hero-sticky {
    position: sticky;
    top: 0;
    height: 100svh;
    display: flex;
    align-items: center;
    justify-content: center;
    width: 100%;
  }
}
.hero-sticky { width: 100%; display: flex; align-items: center; justify-content: center; }

/* ---------- Igloo 式动态字体（text-glitch.js：乱码解码 + 偶发 glitch）
     仅 CJK 字符包 .glitch-char；inline-block 稳全角宽＝乱码期零布局跳动；
     乱码态 .is-scr 钴蓝墨调偏移，定形复原真字色。 ---------- */
.glitch-char { display: inline-block; }
.glitch-char.is-scr {
  color: var(--cobalt-3);
  opacity: 0.9;
  text-shadow: 0.02em 0 var(--cobalt-6), -0.02em 0 rgba(120, 150, 220, 0.35);
}

/* ---------- 全屏满铺像素面板（沉浸 · 用户裁决「整屏铺满像素面板」）
     JS + motion-safe 才满铺：杯盖点阵铺满 100svh sticky 视口，字阵/工序带垂直居中、
     带外补 idle 点＝整屏活着；取景框消解；导轨钉底 HUD；文案下半屏叠加 + 暗角托字。
     无 JS / reduced-motion → 回退框内 poster 静帧（下方规则不生效），叙事不缺席。 ---------- */
@media (prefers-reduced-motion: no-preference) {
  html.js .hero-board.fullbleed .hero-board-inner {
    width: 100%; height: 100svh; padding: 0; gap: 0; display: block; position: relative;
  }
  html.js .hero-board.fullbleed .board-wrap {
    position: absolute; inset: 0; width: 100vw; height: 100svh; margin: 0;
    border: 0; background: transparent; padding: 0;
  }
  html.js .hero-board.fullbleed .board-wrap::before,
  html.js .hero-board.fullbleed .board-wrap::after,
  html.js .hero-board.fullbleed .btag,
  html.js .hero-board.fullbleed .board-process { display: none; }
  html.js .hero-board.fullbleed .board-stage {
    position: absolute; inset: 0; height: 100svh; aspect-ratio: auto;
    /* 深钴蓝景深底（钴蓝单束光：BACKLIT 底晕 → AMBIENT 空间 → 透明透网格）＝不再平黑，光心 50% 34% 对齐 canvas 主光核 */
    background: radial-gradient(125% 96% at 50% 34%, #1A2C58 0%, #16213E 40%, rgba(9, 13, 28, 0) 82%);
  }
  html.js .hero-board.fullbleed #board { position: absolute; inset: 0; }
  html.js .hero-board.fullbleed .board-frame0 { height: 100%; object-fit: contain; }
  /* 满铺时去掉底部工序导轨（工序词真身仍在下方 marquee，叙事不缺席） */
  html.js .hero-board.fullbleed .board-steps { display: none; }
  /* 文案叠加：钉底部 + 暗角 scrim 托字（字阵在上半屏，文案在下半屏，垂直分离） */
  html.js .hero-board.fullbleed .hero-copy-v2 {
    position: absolute; left: 50%; bottom: 8svh; transform: translateX(-50%);
    z-index: 3; text-align: center; width: min(92vw, 1040px);
    align-items: center;
  }
  html.js .hero-board.fullbleed .hero-copy-v2 h1 {
    font-size: clamp(28px, 4.6vw, 60px); line-height: 1.16;
    /* 逐字运动排版 3D 舞台：透视挂 h1(逐字 rotateX/Z 才成 3D)，灭点每帧由 hero-depth 锁光心 */
    perspective: 900px; perspective-origin: 50% 40%; transform-style: preserve-3d;
  }
  html.js .hero-board.fullbleed .hero-copy-v2 h1 .h1-brand { transform-style: preserve-3d; }   /* 否则品牌四字塌平 */
  html.js .hero-board.fullbleed .hero-copy-v2 h1 .glitch-char {
    transform-origin: 50% 90%; backface-visibility: hidden; will-change: transform;   /* 底边为轴=掀起；矢量 transform 恒 crisp、禁逐字 blur(会打断 preserve-3d) */
  }
  html.js .hero-board.fullbleed .hero-copy-v2::before {
    content: ""; position: absolute; z-index: -1;
    left: 50%; top: 50%; transform: translate(-50%, -50%);
    width: 122%; height: 210%;
    background: radial-gradient(ellipse at center, rgba(9, 13, 28, 0.72) 0%, rgba(9, 13, 28, 0.42) 46%, transparent 72%);
    pointer-events: none;
  }
}

/* ---------- 移动满铺 hero 补密度与叙事（Round1 F3：E4 空场零容忍）----------
   ≤860 hero-depth 引擎 bail → 满铺板带外全空。药（零运行时成本）：
   ① 底纹=静态杯盖点阵纹理（扁平实心暗钴蓝点，同语汇 E1/E3/E5）灌满空域 + 主光底晕提亮；
   ② 桌面被藏的 .board-steps 工序灯序词回填空带（lid-board 移动档 morph 逐词点亮=活叙事）。 */
@media (max-width: 860px) and (prefers-reduced-motion: no-preference) {
  html.js .hero-board.fullbleed .board-stage {
    background:
      radial-gradient(130% 100% at 50% 34%, #1E3160 0%, #172445 44%, rgba(9, 13, 28, 0) 84%),
      radial-gradient(rgba(78, 123, 212, 0.15) 1.1px, transparent 1.4px);
    background-size: auto, 24px 24px;
  }
  html.js .hero-board.fullbleed .board-steps {
    display: flex; position: absolute; left: 50%; transform: translateX(-50%);
    top: 48svh; z-index: 3; width: 92vw; justify-content: center; flex-wrap: wrap;
  }
  html.js .hero-board.fullbleed .hero-copy-v2 { bottom: 10svh; }
}

/* 方向化入场（动线：不许均匀 fade-up 到底） */
html.js .reveal[data-dir="left"] { transform: translateX(-32px); }
html.js .reveal[data-dir="right"] { transform: translateX(32px); }
html.js .reveal[data-dir="left"].in, html.js .reveal[data-dir="right"].in { transform: none; }

/* 头图 clip 揭示（镜头感的图片入场）。
   P2-5 注：transition 列表须并入 transform 180ms——否则本规则在 js 域
   覆盖 .series-img img 的 hover 过渡（transition 是单属性，后者整表被替换） */
html.js .img-reveal img { clip-path: inset(0 100% 0 0); transition: clip-path 0.9s var(--ease-cuiyin), transform 180ms var(--ease-cuiyin); }
html.js .in .img-reveal img, html.js .img-reveal.in img { clip-path: inset(0 0 0 0); }
@media (prefers-reduced-motion: reduce) {
  html.js .img-reveal img { clip-path: none; transition: transform 180ms var(--ease-cuiyin); }
  html.js .reveal[data-dir] { transform: none; }
}

/* 栅格交错（幕内节奏） */
.aud-grid > :nth-child(2) { transition-delay: 70ms; }
.aud-grid > :nth-child(3) { transition-delay: 140ms; }
.aud-grid > :nth-child(4) { transition-delay: 210ms; }
.aud-grid > :nth-child(5) { transition-delay: 280ms; }
.series-grid > :nth-child(2) { transition-delay: 90ms; }
.series-grid > :nth-child(3) { transition-delay: 180ms; }
.wall-grid > :nth-child(2n) { transition-delay: 60ms; }
.wall-grid > :nth-child(3n) { transition-delay: 120ms; }
.step-grid > :nth-child(2) { transition-delay: 80ms; }
.step-grid > :nth-child(3) { transition-delay: 160ms; }
.step-grid > :nth-child(4) { transition-delay: 240ms; }
.num-grid > :nth-child(2) { transition-delay: 60ms; }
.num-grid > :nth-child(3) { transition-delay: 120ms; }
.num-grid > :nth-child(n+4) { transition-delay: 180ms; }

/* 沉浸：蓝图网格贯穿深域各幕（世界不换布景） */
.act-dark, .act-wall, .cta-band {
  background-image:
    linear-gradient(var(--bp-3) 1px, transparent 1px),
    linear-gradient(90deg, var(--bp-3) 1px, transparent 1px);
  background-size: 40px 40px;
}
.act-dark { background-color: var(--navy-deep); }
.act-wall { background-color: var(--navy-deep); }
.cta-band { background-color: var(--navy-abyss); }

/* 星座命题衬线：Noto Serif SC Light 子集（仅标题字，5KB，Google Fonts OFL 可商用，见 CREDITS）；
   任意机器都兑现「大+轻(300)+紧」的编辑体，不靠系统 SimSun 撞运气。 */
@font-face {
  font-family: "Noto Serif SC"; font-style: normal; font-weight: 300; font-display: swap;
  src: url("/fonts/serif-subset.woff2") format("woff2");
}

/* ---------- path-to-hope 式「问题→解法」证据地图（新墙 constellation）
     深底满屏 + 中央命题 + 5 问题枢纽（button）+ 四散意象/实拍图（constellation.js
     风吹浮动 + 细线）；hover/聚焦枢纽 → 高亮其图簇 + 展开萃饮解法、弱化其余。
     桌面绝对散布；≤860 改堆叠（问题列表 + 图网格，不散布、无横滚）。 ---------- */
.constellation {
  position: relative;
  min-height: 200vh;              /* 滚动轨道：sticky 视口 100vh + ~1 屏 scrub 驱动 preBloom→bloom */
  background: #0C1120;            /* 轨道底略亮于卡片＝内缩圆角卡片浮起可辨 */
  display: block; isolation: isolate;
}
/* sticky 视口（对位 Anthropic .stage）：收起态内缩圆角卡片、只见居中命题，下滑 scrub 等比例
   放大到满屏 full-bleed + 展开星座（放大/圆角由 constellation.js 按滚动进度写内联样式）。 */
.cst-viewport {
  position: sticky; top: 0; height: 100vh; overflow: hidden; isolation: isolate;
  transform-origin: center center; will-change: transform, border-radius;
  box-shadow: 0 30px 90px rgba(0, 0, 0, 0.55);
  display: flex; align-items: center; justify-content: center;
  background: radial-gradient(120% 90% at 50% 44%, #10182B 0%, #0A0F1D 46%, #070B15 100%);
}
/* 星云辉光（纵深）+ 暗角（聚焦圆心）——统一影调、去平铺数字感 */
.cst-viewport::before {
  content: ""; position: absolute; z-index: 0; left: 50%; top: 44%; transform: translate(-50%, -50%);
  width: 90vw; height: 90vh; pointer-events: none;
  background: radial-gradient(closest-side, rgba(46, 107, 224, 0.10), transparent 70%);
}
.cst-viewport::after {
  content: ""; position: absolute; inset: 0; z-index: 4; pointer-events: none;
  background: radial-gradient(130% 100% at 50% 48%, transparent 52%, rgba(4, 7, 14, 0.55) 100%);
}
/* grain：一层颗粒盖底+图+字＝一次印刷（最强统一器） */
.cst-grain {
  position: absolute; inset: 0; z-index: 5; pointer-events: none; opacity: 0.5;
  mix-blend-mode: soft-light;
  background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='140' height='140'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.9' numOctaves='2' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='140' height='140' filter='url(%23n)' opacity='0.5'/%3E%3C/svg%3E");
}
.cst-lines { position: absolute; inset: 0; width: 100%; height: 100%; z-index: 1; }
.cst-world { position: absolute; inset: 0; z-index: 2; transform-origin: center; will-change: transform; }
.cst-scrollhint { color: var(--cobalt-3); font-size: 13px; }
.cst-imgs { position: absolute; inset: 0; z-index: 1; pointer-events: none; }
.cst-nodes { position: absolute; inset: 0; z-index: 3; }
.cst-nodes { pointer-events: none; }
/* 两级调色〔红线〕：意象图上钴蓝墨影调统一；真实产品/工厂实拍只轻调保真，不篡色 */
.cst-img:not([data-real]) img { filter: saturate(0.72) contrast(1.05) brightness(0.84); }
.cst-img[data-real] img { filter: brightness(0.98) contrast(1.03); }
.cst-no { position: absolute; top: 8vh; right: 5vw; margin: 0; z-index: 1; }
/* wrapCn 会把中文包进 .meta-cn(12px)——星座内标题/问句/解法须还原本级字号 */
.cst-title .meta-cn, .cst-node .meta-cn { font-size: inherit; font-family: inherit; letter-spacing: inherit; }

/* 问题枢纽：问句 + 下托展开 blurb（答案+CTA）。默认仅问句；hover/聚焦/tap 时下托展开（对位 Anthropic labelBlurb）。 */
.cst-node {
  position: absolute; transform: translate(-50%, -10px);   /* 顶部锚定：下托只向下长，不顶到导航 */
  width: min(22vw, 220px); padding: 6px 10px; margin: 0;
  color: var(--cobalt-2); letter-spacing: .01em; text-align: center;
  pointer-events: auto; cursor: default; z-index: 1;
  text-shadow: 0 1px 10px rgba(5, 9, 18, .95), 0 0 3px rgba(5, 9, 18, .95);
  transition: color var(--dur-2) var(--ease-ui);
}
.cst-node:hover, .cst-node:focus-within, .cst-node.is-active { color: var(--paper); outline: none; z-index: 6; }
.cst-q {
  display: block; font-size: clamp(13px, 1.4vw, 20px); line-height: 1.28; text-wrap: balance;
  border-bottom: 1px solid transparent; padding-bottom: 2px;
  transition: border-color var(--t-micro) var(--ease-cuiyin);
}
.cst-node:hover .cst-q, .cst-node:focus-within .cst-q, .cst-node.is-active .cst-q { border-bottom-color: var(--cobalt-3); }
/* 下托展开（缓动体系）：grid-template-rows 0fr→1fr 真高度动画（无 max-height 假天花板失真），
   用 --ease-ui/--ease-pop 分工（脱离入场 expo 尾巴）。卡片底/内边距在 .cst-blurb-inner。 */
.cst-blurb {
  display: grid; grid-template-rows: 0fr; text-align: left;
  opacity: 0; transform: translateY(-4px); margin-top: 0;
  transition: grid-template-rows var(--dur-4) var(--ease-ui), opacity var(--dur-2) var(--ease-ui),
              transform var(--dur-4) var(--ease-pop), margin-top var(--dur-4) var(--ease-ui);
}
.cst-blurb-inner {
  overflow: hidden; min-height: 0;
  padding: 0 13px; background: rgba(9, 13, 24, 0.94); border: 1px solid var(--line-dark);
  border-radius: 10px; box-shadow: 0 16px 44px rgba(0, 0, 0, 0.55);
  transition: padding var(--dur-4) var(--ease-ui);
}
.cst-node:hover .cst-blurb, .cst-node:focus-within .cst-blurb, .cst-node.is-active .cst-blurb {
  grid-template-rows: 1fr; opacity: 1; transform: none; margin-top: 10px;
}
.cst-node:hover .cst-blurb-inner, .cst-node:focus-within .cst-blurb-inner, .cst-node.is-active .cst-blurb-inner { padding: 13px; }
.cst-blurb-text { display: block; color: #E8EBF2; font-size: 14px; line-height: 1.65; text-shadow: none; }
.cst-blurb-cta {
  display: inline-block; margin-top: 10px; color: var(--cobalt-2); font-size: 13px;
  text-decoration: none; border-bottom: 1px solid var(--cobalt-5); padding-bottom: 1px;
  transition: color var(--t-micro), border-color var(--t-micro);
}
.cst-blurb-cta:hover { color: var(--paper); border-bottom-color: var(--paper); }

.cst-img {
  position: absolute; width: var(--w, 100px); margin: 0; will-change: transform;
  transition: opacity var(--t-micro) var(--ease-cuiyin);
}
.cst-img img {
  width: 100%; height: auto; display: block; border-radius: 0;      /* 直角，对位 Anthropic node */
  box-shadow: 0 14px 40px rgba(0, 0, 0, .6); outline: 1px solid rgba(206, 216, 238, .08); outline-offset: -1px;
}
.cst-img.is-dim { opacity: .16; }
.cst-center {
  position: relative; z-index: 3; text-align: center;
  width: min(90vw, 600px); margin: 0 auto; pointer-events: none;
  transition: opacity .5s var(--ease-cuiyin);
}
.constellation.is-focus .cst-center { opacity: .26; }   /* 聚焦某问题时命题淡出，让证据成焦点 */
.cst-center .btn-ghost { pointer-events: auto; }
.cst-kicker { display: block; color: var(--cobalt-3); margin-bottom: 18px; letter-spacing: .2em; }
.constellation .cst-title {
  font-family: var(--font-serif); font-weight: 300;
  font-size: clamp(40px, 6.2vw, 92px); line-height: 1.05; letter-spacing: -0.01em;
  color: #F3EEE6; margin: 0 0 20px; text-wrap: balance;   /* 象牙暖白：冷底暖字去科技感 */
}
.cst-lede { color: var(--muted-dark); font-size: clamp(14px, 1.05vw, 16px); line-height: 1.75; margin: 0 0 26px; }
.cst-lede a { color: var(--cobalt-2); }
.cst-center .btn-ghost {
  display: inline-flex; align-items: center; gap: 8px;
  padding: 11px 24px; border: 1px solid rgba(206, 216, 238, .32); border-radius: 999px;
  color: var(--paper); background: transparent; font-size: 14px; text-decoration: none;
  transition: border-color var(--t-micro) var(--ease-cuiyin), background var(--t-micro) var(--ease-cuiyin);
}
.cst-center .btn-ghost:hover { border-color: var(--cobalt-3); background: rgba(206, 216, 238, .06); }

/* 收起→展开：图/节点/连线由 constellation.js 按滚动进度从中心生成式展开；
   命题始终居中可见（收起态即命题），仅聚焦时淡出（见上）。 */

@media (max-width: 860px) {
  /* 移动：堆叠——命题 + 问题列（各含解法直接展开）+ 图网格；无横滚、不绽放 */
  .constellation { min-height: auto; padding: 60px 20px; display: flex; flex-direction: column; gap: 26px; overflow: visible; }
  .cst-viewport { display: contents; }   /* 拆 sticky 视口 */
  .cst-world { display: contents; }      /* 拆相机层，问句/图回正常流（否则被裁——红线） */
  .cst-lines, .cst-grain { display: none; }
  .cst-no { top: 16px; right: 16px; }
  .cst-center { width: 100%; order: -2; pointer-events: auto; }
  .cst-nodes { position: static; order: -1; display: flex; flex-direction: column; gap: 12px; width: 100%; }
  .cst-node { position: static; transform: none; width: auto; max-width: 100%; text-align: left;
    border: 1px solid var(--line-dark); border-radius: 10px; padding: 14px 16px; text-shadow: none; }
  .cst-q { text-align: left; }
  .cst-blurb { grid-template-rows: 1fr; opacity: 1; transform: none; margin-top: 10px; }
  .cst-blurb-inner { padding: 13px; }
  .cst-imgs { position: static; display: grid; grid-template-columns: repeat(3, 1fr); gap: 10px; width: 100%; }
  .cst-img { position: static; width: 100%; transform: none !important; opacity: 1 !important; }
  .cst-img img { border-radius: 6px; }
  .constellation:not(.is-in) .cst-imgs, .constellation:not(.is-in) .cst-nodes,
  .constellation:not(.is-in) .cst-center { opacity: 1; transform: none; }
}
@media (prefers-reduced-motion: reduce) {
  .constellation { min-height: 100vh; }              /* RM 去滚动轨道 */
  .cst-viewport { position: relative; top: auto; height: 100vh; }
  .cst-img { transform: none !important; opacity: 1 !important; }
  .cst-node { opacity: 1 !important; }
  .cst-blurb, .cst-imgs, .cst-nodes, .cst-center, .cst-lines { transition: none; }
  .constellation:not(.is-in) .cst-imgs, .constellation:not(.is-in) .cst-nodes,
  .constellation:not(.is-in) .cst-center, .constellation:not(.is-in) .cst-lines { opacity: 1; transform: none; }
}
/* 无 JS 降级：绝对散布/展开/绽放都依赖 JS——无 JS 时堆叠、所有解法直接可见（内容 100% 完整红线）。 */
html:not(.js) .constellation { min-height: auto; padding: 60px 20px; display: flex; flex-direction: column; gap: 22px; overflow: visible; }
html:not(.js) .cst-viewport { display: contents; }
html:not(.js) .cst-world { display: contents; }   /* 拆相机层，问句/图回正常流（否则被裁——红线） */
html:not(.js) .cst-lines, html:not(.js) .cst-grain { display: none; }
html:not(.js) .cst-center { order: -2; width: 100%; pointer-events: auto; }
html:not(.js) .cst-nodes { position: static; order: -1; display: flex; flex-direction: column; gap: 10px; width: 100%; }
html:not(.js) .cst-node { position: static; transform: none; width: auto; max-width: 100%; text-align: left; text-shadow: none; }
html:not(.js) .cst-q { text-align: left; }
html:not(.js) .cst-blurb { grid-template-rows: 1fr; opacity: 1; transform: none; margin-top: 8px; }
html:not(.js) .cst-blurb-inner { padding: 13px; }
html:not(.js) .cst-imgs { position: static; display: grid; grid-template-columns: repeat(3, 1fr); gap: 10px; width: 100%; }
html:not(.js) .cst-img { position: static; width: 100%; transform: none; opacity: 1; }
html:not(.js) .cst-imgs, html:not(.js) .cst-nodes, html:not(.js) .cst-center { opacity: 1 !important; transform: none !important; }

/* ---------- 环境点阵介质（沉浸 Stage 3：贯穿全页的连续世界层）
     深色幕内注一层稀疏杯盖点（ambient-field.js 锚定文档世界坐标绘制）；
     .has-ambient 用 isolation 建栈：canvas z:0 在幕底色之上、内容 z:1 之下。
     无 JS 时幕不加 .has-ambient、无 canvas ⇒ 纯色深域（点是纯装饰增量）。 ---------- */
.has-ambient { position: relative; isolation: isolate; }
.ambient-canvas {
  position: absolute;
  inset: 0;
  width: 100%;
  height: 100%;
  z-index: 0;
  pointer-events: none;
}
.has-ambient > *:not(.ambient-canvas) { position: relative; z-index: 1; }
@media (prefers-reduced-motion: reduce) { .ambient-canvas { display: none; } }



@media (max-width: 860px) and (prefers-reduced-motion: no-preference) {
  html.js .hero-board, .hero-board.choreo { min-height: 240vh; }   /* 移动端 lid-board 滚动刮擦跑道（无节拍，仍普通滚动 morph） */
}

/* ============================================================
   M3b 样式层（M3 动线与镜头全页化）
   ① Scout 三件套（P2-4）② 行揭示 h2/lede 扩展（P2-2）
   ④ 375 看板 48×16 档位容器（P2-9）⑤ 风味墙桌面横向 scrub 轨道（P2-3）
   ＋ P2-1 双序/口径降权承接 ⑥ 导航反色 data-nav-theme（P2-10）
   ※ hover 微交互回 120-200ms（P2-5）已改在组件层原规则处
   ============================================================ */

/* ---------- ① Scout 三件套：mono 眉题 → 细线 hr → 大标题 ----------
   页面合同（build.mjs actHead 已落）：
     <span class="crumb-mono reveal">[03] 系列</span><hr class="rule reveal">
     <h2 class="reveal reveal-lines">…</h2>
   眉题内 [0x] 数字段=.num（随本容器走 mono），中文剥离 run=.meta-cn（P1-5）。
   「得意黑大标题」走 opt-in 类 .act-title——挂类前该 h2 全部字符必须
   并入 display-charset.txt 并重跑得意黑子集（cmap 全覆盖检查）。
   P1-B 已过检：全站 h2 字符并入子集（296 字，make_display_subset.py
   来源一 content ## 标题 + 来源二 build.mjs 硬编码 h2），actHead 幕 h2
   已挂类；后续 h2 文案改动必须重跑子集，否则缺字回退 MiSans 破三件套。 */
.crumb-mono {
  display: block;
  margin: 0 0 14px;
  font-family: var(--font-mono);
  font-size: 12px;
  letter-spacing: 0.24em;              /* 眉题宽字距（Scout 律） */
  text-transform: uppercase;
  color: var(--fg-muted, var(--muted));
}
.crumb-mono .num { white-space: nowrap; }
.crumb-mono .meta-cn { font-size: 11.5px; letter-spacing: 0.14em; }
hr.rule {
  border: 0;
  height: 1px;
  margin: 0 0 22px;
  background: var(--line-c, var(--line));
}
.act-title { font-family: var(--font-display); font-weight: 400; letter-spacing: 0.015em; }
@media (max-width: 860px) {
  .crumb-mono { font-size: 10.5px; letter-spacing: 0.16em; }
  hr.rule { margin-bottom: 18px; }
}

/* ---------- ② 行揭示扩展（P2-2）：h2/lede 场景 ----------
   页面合同：目标元素挂 .reveal.reveal-lines（.in 仍由 motion-lite IO 打），
   行分段模板手控、连续兄弟 ≤4 段：<span class="mask"><span class="rise">…</span></span>。
   容器不再整块 fade（隐藏态由行内 mask 承担）；块级 fade-up 只留卡片栅格。
   GEO 铁律：隐藏初始态仅 html.js + motion-safe；RM/无 JS 全文即显。
   节律：560ms + 末段延迟 240ms = 800ms ≤ 幕内 900ms 顶。 */
.mask { display: inline-block; overflow: clip; vertical-align: bottom; max-width: 100%; }
.rise { display: inline-block; }
/* 375 防截字：keep-all 下无读点长句标题（如 16 连字 h2）无合法断点，
   在 .mask overflow:clip 内会被静默截掉——窄幅回标准中文断行
   （浏览器 kinsoku 避头尾仍生效，clreq 合规），行块内部回行=整块揭示 */
@media (max-width: 860px) {
  .act h2, .article h2 { word-break: normal; }
}
html.js .reveal.reveal-lines { opacity: 1; transform: none; }
@media (prefers-reduced-motion: no-preference) {
  html.js .reveal .rise { transform: translateY(118%); transition: transform 560ms var(--ease-cuiyin); }
  html.js .reveal .mask:nth-child(2) .rise { transition-delay: 80ms; }
  html.js .reveal .mask:nth-child(3) .rise { transition-delay: 160ms; }
  html.js .reveal .mask:nth-child(4) .rise { transition-delay: 240ms; }
  /* 句读切行可产出 >4 段：5 段起封顶 320ms（560+320=880 ≤ 幕内 900ms 顶） */
  html.js .reveal .mask:nth-child(n+5) .rise { transition-delay: 320ms; }
  html.js .reveal.in .rise { transform: none; }
}

/* ---------- ④ 375 hero 看板 48×16 档位容器（P2-9）----------
   看板侧合同（引擎/烘焙）：≤480px 由 lid-board 换 48×16 场景档（frame0 同帧烘焙），
   两档同为 3:1——.board-stage 锁 aspect-ratio，换档不跳高。
   容器职责：横带全出血（375 下带高 ≈117px，重心恢复）＋边框标签缩放贴齐。
   btag 文字（96×32 → 48×16）归模板侧随档位改。 */
@media (max-width: 480px) {
  .board-wrap {
    width: 100vw;
    margin-inline: calc(50% - 50vw);   /* hero-board-inner(94vw 居中) → 全出血横带 */
    border-inline: 0;                  /* 出血边不留竖线，只保横带上下沿 */
    padding: 10px 12px;
  }
  /* 角标记随出血撤下（右下 ::after 越界 4px 会顶 scrollWidth，375 零横滚红线） */
  .board-wrap::before, .board-wrap::after { display: none; }
  .board-stage { aspect-ratio: 3 / 1; }
  .board-frame0 { width: 100%; height: 100%; }
  .btag { font-size: 8px; letter-spacing: 0.10em; }
  .btag.tl { left: 12px; top: -14px; }
  .btag.tr { right: 12px; top: -14px; }
}

/* ---------- ⑤ 风味墙桌面横向 scrub 轨道（P2-3 第二 pin+scrub 时刻）----------
   页面合同（build.mjs 已落）：section.act-wall[data-wall-scrub] > .wall-pin（sticky 钩子）
     > .act-inner-wide > .wall-grid（横向轨）。
   JS 合同同 marquee——直写 .wall-grid style.transform=translate3d(-x,0,0)，
   x=幕内滚动进度纯函数（(scrollY-secTop)/(secH-innerH) × (轨宽-视口)），停即停、离屏即停。
   本布局仅 html.js+motion-safe+桌面生效：缺驱动器时轨道右端不可达，
   驱动器未落地前不出厂（对线诉求见 M3b 返回单）。
   375（≤860）不变：原 flex scroll-snap；RM/无 JS：原 4 列网格，撤运动不撤叙事。 */
@media (min-width: 861px) and (prefers-reduced-motion: no-preference) {
  html.js .act-wall[data-wall-scrub] {
    min-height: 240vh;                 /* 滚动跑道（sticky 的滚动预算） */
    padding: 0;
    overflow: clip;                    /* clip 不建滚动容器，sticky 仍有效；轨道溢出不顶 scrollWidth */
  }
  html.js .act-wall[data-wall-scrub] .wall-pin {
    position: sticky;
    top: 0;
    min-height: 100svh;
    display: flex;
    flex-direction: column;
    justify-content: center;
    padding: calc(var(--header-h) + 16px) clamp(20px, 4vw, 56px) 32px;
  }
  html.js .act-wall[data-wall-scrub] .act-inner-wide { max-width: none; width: 100%; }
  html.js .act-wall[data-wall-scrub] .wall-grid {
    display: flex;
    align-items: center;               /* 不许 stretch 破 tile 方比 */
    width: max-content;
    gap: 16px;
    will-change: transform;
  }
  html.js .act-wall[data-wall-scrub] .wall-tile { width: clamp(240px, 23vw, 320px); flex: none; }
  html.js .act-wall[data-wall-scrub] .wall-tile-hero { width: clamp(320px, 30vw, 430px); }
}
/* 墙首格实拍大图 tile（P1-7 滚动第一奖赏，build.mjs 已挂类）：
   照片铺满 tile（非抠图悬浮章法），三域（JS/无 JS/RM）通用 */
.wall-tile-hero img { width: 100%; height: 100%; max-height: none; object-fit: cover; filter: none; }

/* ---------- P2-1：GEO/视觉双序 + 工厂档案 ----------
   DOM 序 lede 在前（quote 保持页面前 30%，GEO 铁律），视觉序墙在前
   （order 交换；无 CSS 时退化 lede 在前，内容完整）。
   明亮域用编辑式「工厂档案」承接深色品牌带：主陈述、双栏正文、横向口径台账。 */
.act-swap { display: flex; flex-direction: column; }
.act-swap > .act-lede { order: 2; }
.act-inner-narrow { max-width: 720px; margin-left: 0; } /* 收窄 + 靠侧（侧栏化） */
.act-profile {
  position: relative;
  isolation: isolate;
  overflow: hidden;
  padding-block: clamp(72px, 8.5vw, 126px);
  background:
    linear-gradient(90deg, rgba(14, 72, 175, 0.035) 1px, transparent 1px) 0 0 / 25% 100%,
    var(--paper);
}
.act-profile::before {
  content: "";
  position: absolute;
  z-index: -1;
  top: clamp(34px, 5vw, 74px);
  right: clamp(20px, 4vw, 56px);
  width: clamp(132px, 16vw, 230px);
  aspect-ratio: 1;
  opacity: 0.22;
  background: radial-gradient(circle, var(--navy) 1.25px, transparent 1.7px) 0 0 / 13px 13px;
  -webkit-mask-image: linear-gradient(135deg, #000 4%, transparent 76%);
  mask-image: linear-gradient(135deg, #000 4%, transparent 76%);
  pointer-events: none;
}
.profile-shell { display: grid; gap: 0; }
.profile-head {
  display: grid;
  grid-template-columns: minmax(164px, 0.28fr) minmax(0, 1fr);
  gap: clamp(28px, 5vw, 84px);
  align-items: start;
  padding: clamp(22px, 2.8vw, 34px) 0 clamp(38px, 5vw, 70px);
  border-top: 2px solid var(--navy);
}
.act .profile-section-title {
  display: grid;
  grid-template-columns: auto 1fr;
  align-items: end;
  column-gap: 13px;
  row-gap: 7px;
  margin: 0;
  color: var(--navy);
  font-family: var(--font-mono);
  font-size: 11px;
  font-weight: 400;
  line-height: 1;
  letter-spacing: 0.14em;
  text-transform: uppercase;
}
.profile-index {
  grid-row: 1 / 3;
  font-family: var(--font-display);
  font-size: clamp(54px, 5.4vw, 80px);
  font-weight: 400;
  line-height: 0.78;
  letter-spacing: -0.045em;
  color: transparent;
  -webkit-text-stroke: 1.25px rgba(14, 72, 175, 0.55);
}
.profile-title-cn { align-self: end; letter-spacing: 0.18em; }
.profile-title-en { color: var(--muted); font-size: 9.5px; letter-spacing: 0.18em; }
.profile-statement {
  max-width: 21em;
  margin: -0.12em 0 0;
  color: var(--ink);
  font-family: var(--font-serif);
  font-size: clamp(28px, 3.1vw, 46px);
  font-weight: 400;
  line-height: 1.42;
  letter-spacing: 0.015em;
  text-wrap: balance;
}
.profile-statement::before {
  content: "";
  display: inline-block;
  width: 0.22em;
  height: 0.22em;
  margin: 0 0.35em 0.14em 0;
  background: var(--navy);
  box-shadow: 0.34em 0 var(--cobalt-3);
  vertical-align: middle;
}
.act-profile .direct-answer-home {
  max-width: none;
  color: rgba(23, 27, 38, 0.78);
  font-size: clamp(15px, 1.25vw, 16.5px);
}
.profile-answer {
  padding: clamp(28px, 3.7vw, 48px) 0 clamp(42px, 5vw, 68px);
  border-top: 1px solid var(--line);
}
.profile-answer p {
  max-width: none;
  margin: 0;
  column-count: 2;
  column-gap: clamp(42px, 6vw, 86px);
  column-rule: 1px solid var(--line);
  line-height: 1.9;
  text-align: justify;
  text-justify: inter-ideograph;
  text-wrap: pretty;
  orphans: 3;
  widows: 3;
}
.profile-boundary {
  display: grid;
  grid-template-columns: minmax(150px, 0.62fr) minmax(0, 3.38fr);
  border-top: 1px solid var(--navy);
  border-bottom: 1px solid var(--line);
}
.profile-boundary-head {
  padding: 18px 24px 22px 0;
}
.profile-boundary-code {
  display: block;
  margin-bottom: 8px;
  color: var(--cobalt-4);
  font-family: var(--font-mono);
  font-size: 9.5px;
  line-height: 1;
  letter-spacing: 0.15em;
}
.profile-boundary-head h3 {
  color: var(--ink);
  font-size: 15px;
  font-weight: 500;
  letter-spacing: 0.12em;
}
.profile-boundary-list {
  display: grid;
  grid-template-columns: repeat(4, minmax(0, 1fr));
  margin: 0;
  list-style: none;
}
.profile-boundary-list li {
  min-width: 0;
  padding: 18px clamp(16px, 1.8vw, 24px) 22px;
  border-left: 1px solid var(--line);
}
.profile-boundary-list li > span {
  display: block;
  margin-bottom: 14px;
  color: var(--navy);
  font-family: var(--font-mono);
  font-size: 10px;
  line-height: 1;
  letter-spacing: 0.12em;
}
.profile-boundary-list li > span::before {
  content: "";
  display: inline-block;
  width: 5px;
  height: 5px;
  margin: 0 9px 1px 0;
  background: var(--navy);
}
.profile-boundary-list li p {
  max-width: 20em;
  margin: 0;
  color: var(--ink);
  font-size: 12.5px;
  line-height: 1.7;
  text-wrap: pretty;
}
@media (max-width: 900px) {
  .act-profile { background: var(--paper); }
  .profile-head { grid-template-columns: minmax(138px, 0.25fr) minmax(0, 1fr); gap: 28px; }
  .profile-statement { font-size: clamp(25px, 4vw, 34px); }
  .profile-answer p { column-gap: 38px; }
  .profile-boundary { grid-template-columns: 138px minmax(0, 1fr); }
  .profile-boundary-list { grid-template-columns: repeat(2, minmax(0, 1fr)); }
  .profile-boundary-list li:nth-child(3),
  .profile-boundary-list li:nth-child(4) { border-top: 1px solid var(--line); }
}
@media (max-width: 640px) {
  .act-profile { padding-block: 56px 68px; }
  .act-profile::before { top: 30px; right: -38px; opacity: 0.16; }
  .profile-head { grid-template-columns: 1fr; gap: 30px; padding-bottom: 36px; }
  .act .profile-section-title { width: fit-content; }
  .profile-statement { max-width: none; font-size: clamp(24px, 7.3vw, 31px); line-height: 1.48; }
  .profile-answer { padding: 28px 0 40px; }
  .profile-answer p {
    column-count: 1;
    text-align: left;
    font-size: 15px;
    line-height: 1.85;
  }
  .profile-boundary { grid-template-columns: 1fr; }
  .profile-boundary-head { padding: 17px 0 19px; }
  .profile-boundary-list { grid-template-columns: 1fr; }
  .profile-boundary-list li {
    display: grid;
    grid-template-columns: 46px minmax(0, 1fr);
    gap: 12px;
    padding: 17px 0 18px;
    border-top: 1px solid var(--line);
    border-left: 0;
  }
  .profile-boundary-list li > span { margin: 0; padding-top: 0.44em; }
  .profile-boundary-list li p { max-width: none; }
}

/* ---------- ⑥ 导航反色（P2-10）----------
   JS 合同：观察 [data-bg] 幕与 header 交叠，header.dataset.navTheme='light'|'deep'
   （deep=缺省态，不必写回）。本块置于 .is-solid/.is-scrolled 之后，
   同特异度后者胜——light 变体压过深域落底。色全走 token 派生
   （paper/ink α 档 + navy），logo 反色件为白名单资产：模板提供
   <img class="brand-logo brand-logo-dark"> 兄弟节点即自动接管。 */
.site-header[data-nav-theme="light"] {
  color: var(--ink);
  background: rgba(245, 245, 242, 0.94);     /* paper a94，对镜深域落底 94% */
  border-bottom-color: var(--line);
}
.site-header[data-nav-theme="light"] .site-nav a { color: rgba(23, 27, 38, 0.78); } /* ink a78 */
.site-header[data-nav-theme="light"] .site-nav a:hover { color: var(--navy); }
/* 移动汉堡随主题反色（Round2 J3：浅色幕下 #DCE6F6 bar 对比≈2.3:1 隐没）——token 派生，与 .site-nav 同步反色 */
.site-header[data-nav-theme="light"] .nav-m summary { border-color: rgba(23, 27, 38, 0.24); background: rgba(245, 245, 242, 0.55); }
.site-header[data-nav-theme="light"] .nav-m summary i { background: var(--ink); }
.site-header[data-nav-theme="light"] .nav-m-panel { background: rgba(245, 245, 242, 0.98); border-color: var(--line); box-shadow: 0 18px 44px rgba(23, 27, 38, 0.18); }
.site-header[data-nav-theme="light"] .nav-m-panel a { color: rgba(23, 27, 38, 0.82); }
.site-header[data-nav-theme="light"] .nav-m-panel a:hover,
.site-header[data-nav-theme="light"] .nav-m-panel a:focus-visible { background: rgba(14, 72, 175, 0.08); color: var(--navy); }
.brand-logo-dark { display: none; }
.site-header[data-nav-theme="light"] .brand-logo-dark { display: block; }
.site-header[data-nav-theme="light"]:has(.brand-logo-dark) .brand-logo:not(.brand-logo-dark) { display: none; }

/* ---------- M3 集成：RM 四格分镜接入 + btag 档位文案（P2-6/P2-9 收口）----------
   模板合同（build.mjs 已落）：.board-stage 内 <picture> 三档换源——
   RM 桌面 board-rm.svg（4×1，4128×420）/ RM 移动 board-rm-m.svg（2×2，1064×520）/
   非 RM ≤860 frame0-m.svg（480×160）；source 媒体条件含 prefers-reduced-motion，
   浏览器只取命中源（非 RM 用户零下载）。分镜非 3:1，RM 域解除比例锁与大字层对位。 */
.board-stage > picture { display: block; }
@media (prefers-reduced-motion: reduce) {
  .board-stage { aspect-ratio: auto; }
  .board-frame0 { width: 100%; height: auto; }
  /* 大字层按 3:1 对位烘焙，分镜画幅不同，RM 撤下（文案真身在 .board-steps，叙事不缺席） */
  .board-process { display: none; }
}
/* btag 档位文案随引擎断点（860px 与 lid-board MQ_MOBILE 同值）：96×32 ↔ 48×16 */
.btag .btag-m { display: none; }
@media (max-width: 860px) {
  .btag .btag-d { display: none; }
  .btag .btag-m { display: inline; }
}

/* ============================================================
   M4b 内页承接层（AWARD-PLAN M4 · P1-11 内页双域承接）
   ① page-hero 迷你看板布局 ② 三件套内页字阶 ③ 杯盖列表符
   ④ 杯盖 hr 分隔线 ⑤ FAQ 展开符（details 合同）
   ⑥ 表格/引用块双域适配 ⑦ 内页 reveal 接线
   ============================================================ */

/* ---------- ① page-hero：域变量预接 + 蓝图网格 + 迷你看板布局 ----------
   模板合同（M4a/集成员落 HTML）：
     <section class="page-hero" data-bg="deep">
       <div class="page-hero-inner">
         <div class="page-hero-copy">crumbs → h1 → .direct-answer</div>
         <figure class="page-board" aria-hidden="true">
           <span class="btag tl">CUIYIN·BOARD 48×16</span>
           <img class="page-board-frame" src="/assets/board/page-〈slug〉.svg"
                width="480" height="160" alt="">
         </figure>
       </div>
       <div class="grain" aria-hidden="true"></div>
     </section>
   迷你灯阵 48×16（3:1，bake_board 同管线 SSR 静态特征帧：
   sampling=数字 / tea=茶叶轮廓 / contact=菱章），纯装饰 aria-hidden——
   灯阵不承载唯一文案红线；旧版无 -inner 标记仍走原单列流（零破坏）。 */
.page-hero {
  /* 双域变量预接：模板补 data-bg="deep" 前，var 驱动组件已按深域取值 */
  --bg-c: var(--navy-deep);
  --fg-c: #E8EBF2;
  --fg-muted: var(--muted-dark);
  --line-c: var(--line-dark);
  --accent-on: var(--cobalt-2);
  background-color: var(--navy-deep);
  background-image:
    linear-gradient(var(--bp-2) 1px, transparent 1px),
    linear-gradient(90deg, var(--bp-2) 1px, transparent 1px);
  background-size: 40px 40px;
}
.page-hero-inner {
  display: grid;
  grid-template-columns: minmax(0, 1fr) minmax(280px, 400px);
  gap: clamp(28px, 5vw, 72px);
  align-items: center;
}
/* 内页 display 字阶（三件套档：眉题 crumbs → h1 定义句） */
.page-hero-copy h1 {
  font-size: clamp(34px, 4.6vw, 64px);
  margin: 16px 0 18px;
}
.page-board {
  position: relative;
  margin: 0;
  border: 1px solid rgba(206, 216, 238, 0.16);
  background: rgba(7, 11, 22, 0.35);
  padding: clamp(8px, 1vw, 14px);
}
.page-board::before, .page-board::after {
  content: "";
  position: absolute;
  width: 7px; height: 7px;
  border: 1px solid var(--cobalt-3);
}
.page-board::before { top: -4px; left: -4px; border-right: 0; border-bottom: 0; }
.page-board::after { bottom: -4px; right: -4px; border-left: 0; border-top: 0; }
.page-board-frame {
  display: block;
  width: 100%;
  height: auto;
  aspect-ratio: 3 / 1;   /* 48×16 灯阵格＝3:1，换源不跳高 */
}
@media (max-width: 860px) {
  /* 375 堆叠：文案先行，迷你看板垫底 */
  .page-hero-inner { grid-template-columns: 1fr; gap: 26px; }
  .page-board { width: 100%; max-width: 440px; }
  .page-hero-copy h1 { font-size: clamp(30px, 8.4vw, 40px); }
}

/* ---------- ② 三件套内页字阶（Scout 律 P2-4 · article 档） ----------
   页面合同同 actHead：<span class="crumb-mono">[0x] 词</span>
   <hr class="rule"><h2 class="act-title">…</h2>；.act-title 上内页 h2 前，
   该 h2 全部字符必须并入 display-charset.txt 并重跑得意黑子集（cmap 全覆盖）。 */
.article .crumb-mono { margin: 44px 0 12px; font-size: 11.5px; }
.article .crumb-mono + hr.rule { margin: 0 0 18px; }
.article hr.rule + h2, .article .crumb-mono + h2 { margin-top: 0; }
.article h2.act-title { font-size: clamp(26px, 3vw, 40px); }

/* ---------- ③ 杯盖列表符（纯 CSS 杯盖单元：芯盘+沟槽+缘环，钴蓝双域） ----------
   markdown 产出的裸 ul/ol 自动接管（:not([class])）；.lid-list 为
   article 外 opt-in。ol 用 mono [01] 编号＝看板工序语言同源。 */
.article ul:not([class]), ul.lid-list {
  list-style: none;
  margin: 0 0 18px;
}
.article ul:not([class]) > li, ul.lid-list > li {
  position: relative;
  padding-left: 24px;
}
.article ul:not([class]) > li::before, ul.lid-list > li::before {
  content: "";
  position: absolute;
  left: 2px;
  top: 0.55em;
  width: 9px; height: 9px;
  border: 1.5px solid var(--accent-on, var(--navy));
  border-radius: 50%;
  background: radial-gradient(circle at 50% 50%,
    var(--accent-on, var(--navy)) 0 1.8px, transparent 2.4px);
}
.article ol:not([class]) {
  list-style: none;
  margin: 0 0 18px;
  counter-reset: cy-ol;
}
.article ol:not([class]) > li {
  position: relative;
  padding-left: 42px;
  counter-increment: cy-ol;
}
.article ol:not([class]) > li::before {
  content: "[" counter(cy-ol, decimal-leading-zero) "]";
  position: absolute;
  left: 0;
  top: 0;
  line-height: inherit;
  font-family: var(--font-mono);
  font-size: 12px;
  letter-spacing: 0.08em;
  color: var(--accent-on, var(--navy));
}

/* ---------- ④ 杯盖 hr 分隔线（发丝线中央落一枚杯盖单元） ----------
   hr.rule（三件套细线）不参与；--bg-c 冲孔＝双域自适应。 */
.article hr:not(.rule) {
  border: 0;
  height: 13px;
  margin: 44px 0;
  position: relative;
  background: none;
}
.article hr:not(.rule)::before {
  content: "";
  position: absolute;
  left: 0; right: 0; top: 50%;
  height: 1px;
  background: var(--line-c, var(--line));
}
.article hr:not(.rule)::after {
  content: "";
  position: absolute;
  left: 50%; top: 50%;
  transform: translate(-50%, -50%);
  width: 9px; height: 9px;
  border: 1.5px solid var(--accent-on, var(--navy));
  border-radius: 50%;
  background: radial-gradient(circle at 50% 50%,
    var(--accent-on, var(--navy)) 0 1.8px, transparent 2.4px);
  box-shadow: 0 0 0 9px var(--bg-c, var(--paper));   /* 冲掉背后发丝线 */
}

/* ---------- ⑤ FAQ 展开符（杯盖缘环+芯针，details 合同） ----------
   模板合同：<details class="faq-item"><summary><h3>问</h3></summary>
   <p>答</p></details>——原生交互，无 JS 可展开（内容 100% 完整）；
   静态 .faq-item(h3+p) 不挂展开符（不可交互不许假装）。
   闭合＝缘环内十字（可展开）；展开＝竖针转 90° 并入横针（一字）。 */
details.faq-item { padding: 0 0 6px; }
details.faq-item > summary {
  list-style: none;
  cursor: pointer;
  position: relative;
  padding: 18px 48px 12px 0;
}
details.faq-item > summary::-webkit-details-marker { display: none; }
details.faq-item > summary h3 {
  margin: 0;
  transition: color var(--t-micro) var(--ease-cuiyin);
}
details.faq-item > summary:hover h3 { color: var(--azure); }
details.faq-item > summary::before {
  content: "";
  position: absolute;
  right: 0; top: 16px;
  width: 19px; height: 19px;
  border: 1.5px solid var(--accent-on, var(--navy));
  border-radius: 50%;
  background: linear-gradient(var(--accent-on, var(--navy)),
              var(--accent-on, var(--navy))) center / 9px 1.5px no-repeat;
}
details.faq-item > summary::after {
  content: "";
  position: absolute;
  right: 10.25px; top: 22.5px;
  width: 1.5px; height: 9px;
  background: var(--accent-on, var(--navy));
  transition: transform var(--t-micro) var(--ease-cuiyin);
}
details.faq-item[open] > summary::after { transform: rotate(90deg); }
@media (prefers-reduced-motion: reduce) {
  details.faq-item > summary::after,
  details.faq-item > summary h3 { transition: none; }
}

/* ---------- ⑥ 表格/引用块/FAQ 双域适配（data-bg 变量驱动） ----------
   亮域＝现规则原样；深域全走派生表：文字级 cobalt-2（≥4.5:1）、
   图形级 cobalt-3（≥3:1）、发丝线 line-c。 */
[data-bg="deep"] table { color: var(--fg-c); }
[data-bg="deep"] th { color: var(--accent-on); border-bottom-color: var(--cobalt-3); }
[data-bg="deep"] td { border-bottom-color: var(--line-c); }
[data-bg="deep"] .quote-block {
  background: var(--paper-a05);
  border-left-color: var(--cobalt-3);
  color: var(--fg-c);
}
[data-bg="deep"] .quote-block a { color: var(--cobalt-2); }
[data-bg="deep"] .faq-item { border-top-color: var(--line-c); }
[data-bg="deep"] .faq-item h3 { color: var(--accent-on); }
[data-bg="deep"] .faq-item p { color: var(--fg-muted); }
[data-bg="deep"] .byline { color: var(--fg-muted); }

/* ---------- ⑦ 内页 reveal 接线 ----------
   page-hero 入场走 CSS 时间轴（现有标记即生效，无需模板改动）：
   隐藏初始态仅 html.js + motion-safe（GEO 铁律）；节律 crumbs 0ms →
   h1 100ms → 答案 200ms（560ms rise，末端 760ms ≤ 幕内 900ms 顶），
   迷你看板 cyFade 600ms/120ms 与 hero 看板同语言。
   正文 .reveal 由模板挂类接 motion-lite IO（全局规则已备）；
   FAQ 交错沿用栅格 stagger 语言。 */
@media (prefers-reduced-motion: no-preference) {
  html.js .page-hero .crumbs,
  html.js .page-hero h1,
  html.js .page-hero .direct-answer {
    opacity: 0;
    transform: translateY(18px);
    animation: cyRise 0.56s var(--ease-cuiyin) forwards;
  }
  html.js .page-hero h1 { animation-delay: 0.10s; }
  html.js .page-hero .direct-answer { animation-delay: 0.20s; }
  html.js .page-hero .page-board {
    opacity: 0;
    animation: cyFade 0.6s var(--ease-cuiyin) 0.12s forwards;
  }
}
.faq-sec .faq-item.reveal:nth-of-type(2) { transition-delay: 60ms; }
.faq-sec .faq-item.reveal:nth-of-type(3) { transition-delay: 120ms; }
.faq-sec .faq-item.reveal:nth-of-type(n+4) { transition-delay: 180ms; }

/* ============================================================
   M5 材质与边角完成度
   ============================================================ */
/* ::selection 钴蓝白字（全站统一材质细节） */
::selection { background: var(--navy); color: #fff; }
::-moz-selection { background: var(--navy); color: #fff; }

/* 404：杯盖灯板彩蛋（一格灯灭） */
.e404-hero { min-height: calc(100svh - var(--header-h)); display: flex; flex-direction: column; justify-content: center; align-items: flex-start; text-align: left; }
.e404-hero > * { position: relative; z-index: 2; }
.e404-board { border: 1px solid rgba(206,216,238,0.16); background: rgba(7,11,22,0.35); padding: 16px; margin-bottom: 32px; position: relative; }
.e404-grid { display: grid; grid-template-columns: repeat(10, 1fr); gap: 9px; width: min(360px, 60vw); }
.e404-lamp { aspect-ratio: 1; border-radius: 50%; background: var(--cobalt-3); opacity: 0.85; box-shadow: inset 0 0 0 1.5px rgba(11, 16, 31, 0.42); }   /* 杯盖缘环（R4-J1 点形收口） */
/* B10 命名件：灭格=真按钮，hover 呼吸邀请、点亮回家 */
.e404-lamp.dead { background: transparent; border: 1.5px solid var(--line-dark); opacity: 1; padding: 0; cursor: pointer; transition: border-color 0.3s, box-shadow 0.3s, background 0.4s var(--ease-cuiyin); }
.e404-lamp.dead:hover, .e404-lamp.dead:focus-visible { border-color: rgba(124, 160, 228, 0.7); box-shadow: 0 0 14px rgba(124, 160, 228, 0.35); }
.e404-lamp.dead.lit { background: #E4EFFB; border-color: transparent; box-shadow: 0 0 22px rgba(160, 195, 245, 0.9); }

/* ---------- 无障碍工具类（B1）---------- */
.visually-hidden { position: absolute; width: 1px; height: 1px; margin: -1px; padding: 0; overflow: hidden; clip: rect(0 0 0 0); white-space: nowrap; border: 0; }
/* 逐拍提示只属于桌面增强档（≥861 tech-live 块内 display:block）；移动/RM/无 JS 一律不见（R4-J3 泄漏修复） */
.tech-hint { display: none; }

/* ---------- B4 点火遮罩（诚实 loader：真实就绪信号驱动，会话门控，可跳过）----------
   默认不显示；内联门控加 html.booting 才现身（无 JS / RM / 非首访永不出现）。 */
#boot { display: none; }
html.booting #boot {
  display: flex; flex-direction: column; align-items: center; justify-content: center; gap: 22px;
  position: fixed; inset: 0; z-index: 999; background: #0B101F; cursor: pointer;
  transition: opacity 0.6s var(--ease-cuiyin);
}
#boot.done { opacity: 0; pointer-events: none; }
#boot .boot-grid { display: grid; grid-template-columns: repeat(5, 14px); gap: 12px; }
#boot .boot-grid i { width: 14px; height: 14px; border-radius: 50%; background: rgba(78, 123, 212, 0.18); transition: background 0.28s var(--ease-cuiyin), box-shadow 0.28s var(--ease-cuiyin); }
/* 点亮态带杯盖缘环（inset 暗环；R4-J1：静态面板与活体灯板点形收口为同一杯盖语汇） */
#boot .boot-grid i.lit { background: #7CA0E4; box-shadow: inset 0 0 0 1.5px rgba(11, 16, 31, 0.5), 0 0 12px rgba(124, 160, 228, 0.65); }
#boot .boot-word { margin: 0; font-family: var(--font-mono); font-size: 11px; letter-spacing: 0.22em; color: rgba(190, 210, 240, 0.6); }
@media (prefers-reduced-motion: reduce) { #boot { display: none !important; } }
.e404 h1 { font-family: var(--font-display); font-size: clamp(38px, 6vw, 76px); color: #E8EBF2; margin: 0 0 16px; }
.e404-copy { color: var(--muted-dark); max-width: 30em; font-size: 16px; margin-bottom: 28px; }
.e404-cta { display: flex; flex-wrap: wrap; gap: 14px; }
@media (max-width: 860px) { .e404-grid { width: min(300px, 76vw); gap: 7px; } }
