@font-face{font-family:SG;src:url("../fonts/space-grotesk-light.woff2") format("woff2");font-display:block}
@font-face{font-family:MM;src:url("../fonts/martian-mono-regular.woff2") format("woff2");font-display:block}
@font-face{font-family:Manrope;src:url("../fonts/manrope-extralight.woff2") format("woff2");font-display:block}
*{box-sizing:border-box;margin:0;padding:0}
:root{--paper:#f3f3f1;--ink:#16181a;--dim:#67696d;--line:#cdcecc;--line2:#a8aaa9;
  --cy:#0096c7;--mg:#e11d74;--yl:#f2b705}
body{background:var(--paper);color:var(--ink);font:16px/1.6 Manrope,sans-serif}
a{color:inherit;text-decoration:none}
.wrap{max-width:1216px;margin:0 auto;padding:0 56px}
/* 色标条 —— 印刷语言 */
.cbar{height:8px;display:flex}
.cbar i{flex:1}
.cbar i:nth-child(1){background:var(--cy)}.cbar i:nth-child(2){background:var(--mg)}
.cbar i:nth-child(3){background:var(--yl)}.cbar i:nth-child(4){background:var(--ink)}
.meta{border-bottom:1px solid var(--line2)}
.meta .wrap{display:flex;align-items:center;gap:14px;height:42px;font:500 10.5px/1 MM;
  letter-spacing:.18em;text-transform:uppercase;color:var(--dim)}
.meta b{color:var(--ink);font-weight:500}
.meta .r{margin-left:auto;display:flex;gap:20px}
/* hero：居中大标题 + 出血图 */
.hero{padding:78px 0 0;text-align:center}
.eyebrow{font:500 10.5px/1 MM;letter-spacing:.26em;text-transform:uppercase;color:var(--mg)}
h1{font-family:SG;font-weight:500;font-size:clamp(40px,5.4vw,76px);line-height:1.02;
  letter-spacing:-.03em;margin:22px auto 0;max-width:16ch}
.lede{margin:26px auto 0;max-width:56ch;color:var(--dim);font-size:16.5px}
.cta{display:flex;gap:12px;justify-content:center;margin-top:34px}
.btn{font:500 11px/1 MM;letter-spacing:.16em;text-transform:uppercase;padding:16px 24px;border:1.5px solid var(--ink)}
.btn.solid{background:var(--ink);color:var(--paper)}
.bleed{margin-top:56px;position:relative;background:#fff;height:400px;overflow:hidden;
  border-top:1.5px solid var(--ink);border-bottom:1.5px solid var(--ink)}
.bleed img{width:100%;height:100%;object-fit:cover}
.bleed .reg{position:absolute;width:24px;height:24px;border-radius:50%;border:1px solid rgba(255,255,255,.75)}
.bleed .reg::before,.bleed .reg::after{content:"";position:absolute;background:rgba(255,255,255,.75)}
.bleed .reg::before{left:50%;top:0;width:1px;height:100%}
.bleed .reg::after{top:50%;left:0;height:1px;width:100%}
.bleed .r1{left:20px;top:20px}.bleed .r2{right:20px;bottom:20px}
.bleed .chip{position:absolute;left:0;bottom:0;background:var(--paper);padding:14px 22px;
  font:500 10.5px/1.6 MM;letter-spacing:.14em;text-transform:uppercase;color:var(--ink)}
/* 目录：大号数字 + 引导线 */
.toc{padding:8px 0 72px}
.toc-head{padding:60px 0 18px;border-bottom:2.5px solid var(--ink)}
.toc-head h2{font-family:SG;font-weight:500;font-size:34px;letter-spacing:-.02em}
.entry{display:grid;grid-template-columns:112px 168px 1fr 292px;gap:34px;align-items:center;
  padding:26px 0;border-bottom:1px solid var(--line2)}
.entry .idx{font-family:SG;font-weight:500;font-size:56px;line-height:.9;letter-spacing:-.04em}
.entry .idx small{display:block;font:500 10px/1 MM;letter-spacing:.2em;color:var(--dim);margin-top:10px}
.entry .ph-img{height:124px;background:var(--paper);border:1px solid var(--line);display:flex;
  align-items:center;justify-content:center}
.entry .ph-img img{max-width:84%;max-height:84%;object-fit:contain}
.entry h3{font-family:SG;font-weight:500;font-size:21px;letter-spacing:-.015em;line-height:1.25;margin:0 0 8px}
.entry .code{font:500 10.5px/1 MM;letter-spacing:.18em;text-transform:uppercase;color:var(--mg)}
.entry p{color:var(--dim);font-size:14px;max-width:50ch;margin:10px 0 0}
.spec{border-top:1.5px solid var(--ink)}
.spec div{display:flex;justify-content:space-between;gap:12px;padding:9px 0;border-bottom:1px solid var(--line);
  font:500 12px/1 MM}
.spec dt{color:var(--dim);font-weight:400}
.spec dd{color:var(--ink)}

/* ================= 覆盖层（源 c-press.html 不动） ================= */
:root{--paper:#f3f3f1;--ink:#16181a;--dim:#67696d;--line:#cdcecc;--line2:#a8aaa9;
  --c1:#0096c7;--c2:#e11d74;--c3:#f2b705;--mg-ink:#c2185b}
body{background:var(--paper)}
.entry .ph-img{background:var(--paper)}

/* 按钮 → Apple 胶囊：去直角 / 去边框 / 去大写+大字距 */
.btn{font:500 16px/1 Manrope,sans-serif;letter-spacing:0;text-transform:none;
  padding:13px 27px;border:0;border-radius:980px;background:transparent;color:var(--ink);
  box-shadow:inset 0 0 0 1px rgba(22,24,26,.30);
  transition:background .18s ease,box-shadow .18s ease}
.btn.solid{background:var(--ink);color:#fff;box-shadow:none}
.cta{gap:14px}

/* ================= 主 CTA · CMYK 色码「多米诺」=================
   几何（与 _tmp/fin-mock/btn-domino-v3.html 同源，勿改）：
     色码 5×15、gap 3px、.chips 高 15px 且 align-items:flex-end
     ⇒ 地面线 = .chips 容器下缘（色码落脚处）
     铰链 = 底左角（transform-origin:bottom left）⇒ 站立的底角原地不动，
     身体沿地面线躺下（倒后下缘 − 地面线 = 0.0px）。
     反例：**只改轴、不改角度**（bottom right 配 rotate(-90deg)）会让身体掉到
     地面线以下 5px（= 色码自身宽度），站立原位被腾空
     —— 用户判「像绕角转圈 / 少一个头的高度」。
     ⚠ 上面是「轴与角度必须配对」的反例，不等于 bottom right 本身不可用：
     见下方 .chips.end —— 轴改底右角时必须同步把角度取正（rotate(90deg)），
     两条判据同样成立。
   彩色只给主 CTA；次按钮保持中性 ghost 描边，否则层级被稀释。 */
.btn{display:inline-flex;align-items:center;gap:14px}
.chips{display:inline-flex;gap:3px;align-items:flex-end;height:15px;flex:none}
.chips i{display:block;width:5px;height:15px;border-radius:1.5px;
  transform-origin:bottom left;
  transition:transform .42s cubic-bezier(.6,.04,.3,1);
  transition-delay:calc(var(--i) * 60ms)}          /* 立回：左 → 右 */
.chips i:nth-child(1){--i:0;background:var(--c1)}
.chips i:nth-child(2){--i:1;background:var(--c2)}
.chips i:nth-child(3){--i:2;background:var(--c3)}
.chips i:nth-child(4){--i:3;background:#8b8f95}

/* ── 色码排在标签**右侧**的按钮（`end` 类）：几何整体镜像，倒向**右** ──
   同一个多米诺被用在两种排布上，方向不能照搬：
   色码在右时若沿用左倒，身体正好倒进「标签 ↔ 色码」那段 14px 的 gap 里压住末字母
   （实测倒后左缘越过色码左缘 15px > gap 14px）。
   镜像做法 = 轴改底**右**角 + 角度取正（rotate 90deg）—— 轴与角度**成对**改：
     ① 铰链（底右角）仍原地不动；② 身体仍躺在地面线（.chips 下缘）上；
     ③ 落点全在按钮的空白侧，文字之外。
   波次同步对调：倒下仍沿「倒的方向」推进（左 → 右，左端先倒），立回反向。 */
.chips.end i{transform-origin:bottom right;
  transition-delay:calc((3 - var(--i)) * 60ms)}    /* 立回：右 → 左 */

.btn.solid:focus-visible .chips i,
.btn.solid.is-play .chips i{transform:rotate(-90deg);
  transition-delay:calc((3 - var(--i)) * 70ms)}    /* 倒下：右 → 左 */

.btn.solid:focus-visible .chips.end i,
.btn.solid.is-play .chips.end i{transform:rotate(90deg);
  transition-delay:calc(var(--i) * 70ms)}          /* 倒下：左 → 右 */

/* :hover 必须包在指针精确的媒体查询里 —— 否则触屏 tap 把 :hover 粘住 */
@media (hover:hover) and (pointer:fine){
  .btn:hover{box-shadow:inset 0 0 0 1px rgba(22,24,26,.52)}
  .btn.solid:hover{background:#33363b}
  .btn.solid:hover .chips i{transform:rotate(-90deg);
    transition-delay:calc((3 - var(--i)) * 70ms)}
  .btn.solid:hover .chips.end i{transform:rotate(90deg);
    transition-delay:calc(var(--i) * 70ms)}
}
@media (pointer:coarse){ .btn{padding:15px 27px} }   /* 触控目标 ≥44px */
@media (prefers-reduced-motion: reduce){
  .chips i,.chips.end i{transition:none}
  .btn.solid:hover .chips i,.btn.solid.is-play .chips i,
  .btn.solid:focus-visible .chips i,
  .btn.solid:hover .chips.end i,.btn.solid.is-play .chips.end i,
  .btn.solid:focus-visible .chips.end i{transform:none}
}

/* 小字强调色加深：#e11d74 在中性底上仅 4.08:1，不达 AA 4.5 */
.eyebrow,.entry .code{color:var(--mg-ink)}

/* CMYK 点缀：每条产品线一枚色码条（不承载文字，只做索引） */
.toc article.entry{position:relative}
.toc article.entry::before{content:"";position:absolute;left:-26px;top:20px;bottom:20px;
  width:5px;border-radius:2.5px;background:var(--line2)}
.toc article.entry:nth-of-type(1)::before{background:var(--c1)}
.toc article.entry:nth-of-type(2)::before{background:var(--c2)}
.toc article.entry:nth-of-type(3)::before{background:var(--c3)}

/* ============================================================================
   v2 追加层：完整首页其余 10 区块
   语言沿用方向 C —— 目录 / 表格化行 / 发丝细线 / CMYK 只作索引色
   模块清单与顺序来自 P1 竞对调研（19 家英文标杆，首页模块中位 12 块）
   ============================================================================ */
:root{
  /* 令牌层（v2 新增段落一律走令牌；既有 4 段仍是裸值，待与闸门配置一并整改） */
  --fs-idx:56px;   --fs-sec:34px;   --fs-h3:19px;--fs-h4:17px;
  --fs-lede:16.5px;--fs-sm:14px;    --fs-micro:10.5px;--fs-note:12px;
  --gap:1px
}
/* 待填槽位：全站统一标记。虚线是「未填」的非颜色线索，文字仍为满对比 ink（不低于 4.5:1） */
.ph{color:var(--ink);border-bottom:1px dashed var(--line2)}

/* ---- 通用区块头（与 .toc-head 同一形态：2.5px 墨线在标题下） ----
   2026-10-10：去掉右侧说明句。眉标 + 标题即可，不再做左右分栏（也不给标题留半宽）。
   标题拿满整行后长标题折行更少，故这里不再需要 flex / justify-content。 */
.sh{margin-top:64px;padding:0 0 16px;border-bottom:2.5px solid var(--ink)}
.sh .k{display:block;font:500 var(--fs-micro)/1 MM;letter-spacing:.2em;
  text-transform:uppercase;color:var(--mg-ink);margin-bottom:13px}
.sh h2{font-family:SG;font-weight:500;font-size:var(--fs-sec);letter-spacing:-.02em;line-height:1.1}

/* ---- 索引色条：与 .toc article.entry::before 同一语言（5px 圆头竖条） ----
   必须挂在行元素上做绝对定位：做成网格子项时 grid-row:1/-1 会退化成第 1 行
   （没有显式行轨道时 -1 指第 1 条线），窄屏折行后竖条只剩 18px 高。 */
.hair.apps>*:nth-of-type(1)::before{background:var(--c1)}
.hair.apps>*:nth-of-type(2)::before{background:var(--c2)}
.hair.apps>*:nth-of-type(3)::before{background:var(--c3)}
.hair.apps>*:nth-of-type(4)::before{background:#8b8f95}

/* ---- 发丝线网格：gap:1px + 底线色 = 网格线。换列/换行时不会像 border-left 那样错边 ---- */
.hair{display:grid;gap:var(--gap);background:var(--line2);
  border-bottom:1px solid var(--line2)}
.hair>*{background:var(--paper)}

/* 01 应用行业 */
.hair.apps{grid-template-columns:1fr}
.hair.apps>*{position:relative;display:grid;grid-template-columns:44px 1fr 168px;
  gap:24px;align-items:start;padding:22px 0 22px 24px}
.hair.apps>*::before{content:"";position:absolute;left:0;top:22px;bottom:22px;
  width:5px;border-radius:2.5px;background:var(--line2)}
.apps .n{font:500 11px/1.6 MM;letter-spacing:.18em;color:var(--dim)}
.apps h3{font-family:SG;font-weight:500;font-size:var(--fs-h3);letter-spacing:-.01em;margin:0}
.apps p{color:var(--dim);font-size:var(--fs-sm);margin:8px 0 0;max-width:46ch;line-height:1.6}
.apps .sub{font:500 11px/1.7 MM;letter-spacing:.1em;text-transform:uppercase;
  color:var(--dim);text-align:right;padding-top:2px}

/* 02 选型指引 */
.hair.guide{grid-template-columns:1fr}
.hair.guide>*{display:grid;grid-template-columns:1.15fr 1fr 168px;gap:28px;
  align-items:center;padding:24px 0}
.guide .if{font-family:SG;font-weight:500;font-size:var(--fs-h3);line-height:1.3}
.guide .if em{display:block;font:400 var(--fs-sm)/1.5 Manrope,sans-serif;font-style:normal;
  color:var(--dim);margin-top:7px}
.guide .then{color:var(--dim);font-size:14.5px;line-height:1.65}
.guide .pick{font:500 11px/1 MM;letter-spacing:.16em;text-transform:uppercase;
  border:1px solid var(--line2);padding:13px 10px;text-align:center}

/* 03 流程 */
.hair.flow{grid-template-columns:repeat(5,1fr)}
.hair.flow>*{padding:24px 22px 28px}
.flow .n{display:block;font:500 var(--fs-micro)/1 MM;letter-spacing:.2em;
  color:var(--dim);margin-bottom:15px}
.flow h4{font-family:SG;font-weight:500;font-size:var(--fs-h4);letter-spacing:-.01em;
  line-height:1.3;margin:0 0 9px}
.flow p{color:var(--dim);font-size:13.5px;line-height:1.6;margin:0}

/* 04 工厂与品控 */
.hair.facts{grid-template-columns:repeat(4,1fr)}
.hair.facts>*{padding:26px 22px}
.facts b{display:block;font-family:SG;font-weight:500;font-size:33px;
  letter-spacing:-.02em;line-height:1.05}
.facts span{display:block;margin-top:12px;font:500 var(--fs-micro)/1 MM;
  letter-spacing:.18em;text-transform:uppercase;color:var(--dim)}
.fnote{display:grid;grid-template-columns:1fr 1fr;gap:48px;
  padding:32px 0 8px;border-bottom:1px solid var(--line2)}
.fnote p{color:var(--dim);font-size:14.5px;line-height:1.75;margin:0;max-width:44ch}
.qc{list-style:none;margin:0}
.qc li{position:relative;padding-left:20px;font-size:var(--fs-sm);line-height:1.6;
  margin-bottom:13px;color:var(--ink)}
.qc li:last-child{margin-bottom:0}
.qc li::before{content:"";position:absolute;left:0;top:7px;width:5px;height:5px;
  border-radius:1px;background:var(--ink)}

/* 05 OEM / ODM */
.oem{display:grid;grid-template-columns:1.1fr 1fr;gap:48px;align-items:start;
  padding:34px 0 8px;border-bottom:1px solid var(--line2)}
.oem .lede2{color:var(--dim);font-size:14.5px;line-height:1.75;margin:0 0 24px;max-width:44ch}
.oemspec{border-top:1.5px solid var(--ink);max-width:320px}
.oem ol{list-style:none;counter-reset:o;margin:0}
.oem li{counter-increment:o;position:relative;padding-left:40px;margin-bottom:19px;
  color:var(--dim);font-size:var(--fs-sm);line-height:1.6}
.oem li:last-child{margin-bottom:0}
.oem li::before{content:counter(o,decimal-leading-zero);position:absolute;left:0;top:3px;
  font:500 11px/1 MM;letter-spacing:.14em;color:var(--mg-ink)}
.oem li b{display:block;color:var(--ink);font-family:SG;font-weight:500;
  font-size:var(--fs-h4);letter-spacing:-.01em;margin-bottom:4px}

/* 06 服务与支持 */
.hair.svc{grid-template-columns:repeat(4,1fr)}
.hair.svc>*{padding:26px 22px 28px}
.svc .n{display:block;font:500 var(--fs-micro)/1 MM;letter-spacing:.2em;
  color:var(--dim);margin-bottom:15px}
.svc h4{font-family:SG;font-weight:500;font-size:var(--fs-h4);letter-spacing:-.01em;
  line-height:1.3;margin:0 0 9px}
.svc p{color:var(--dim);font-size:13.5px;line-height:1.6;margin:0}

/* 07 客户证言（形占位：给出预期体量，便于日后填入真实引语时不返工） */
.hair.qs{grid-template-columns:repeat(2,1fr)}
.hair.qs>*{padding:30px 28px}
.qs blockquote{margin:0;font-family:SG;font-weight:500;font-size:var(--fs-h3);
  line-height:1.5;letter-spacing:-.01em;color:var(--dim)}
.qs cite{display:block;margin-top:18px;font:500 var(--fs-micro)/1.7 MM;
  letter-spacing:.16em;text-transform:uppercase;color:var(--dim);font-style:normal}

/* 08 经销网络 */
.hair.dl{grid-template-columns:repeat(4,1fr)}
.hair.dl>*{padding:24px 22px 26px}
.dl .region{font:500 var(--fs-micro)/1 MM;letter-spacing:.18em;
  text-transform:uppercase;color:var(--dim)}
.dl h4{font-family:SG;font-weight:500;font-size:var(--fs-h4);letter-spacing:-.01em;
  margin:13px 0 7px}
.dl .who{font-size:13.5px;color:var(--dim);line-height:1.6}

/* 09 资料下载 */
.hair.dls{grid-template-columns:1fr}
.hair.dls>*{display:grid;grid-template-columns:1fr 76px 84px;gap:24px;
  align-items:baseline;padding:18px 0}
.dls .t{font-family:SG;font-weight:500;font-size:var(--fs-h4);letter-spacing:-.01em}
.dls .f,.dls .z{font:500 11px/1 MM;letter-spacing:.14em;text-transform:uppercase;color:var(--dim)}
.dls .z{text-align:right}
.dnote{color:var(--dim);font-size:var(--fs-note);line-height:1.7;
  margin:18px 0 0;max-width:62ch}

/* 10 询盘 */
.inq{display:grid;grid-template-columns:1fr 1.15fr;gap:52px;align-items:start;
  padding:34px 0 8px;border-bottom:1px solid var(--line2)}
.inq .note{color:var(--dim);font-size:var(--fs-sm);line-height:1.75;margin:0;max-width:38ch}
.inq form{display:grid;grid-template-columns:1fr 1fr;gap:16px 18px}
.inq .f{display:flex;flex-direction:column;gap:8px}
.inq .f.full{grid-column:1/-1}
.inq label{font:500 var(--fs-micro)/1 MM;letter-spacing:.16em;
  text-transform:uppercase;color:var(--dim)}
.inq input,.inq select,.inq textarea{font:400 14.5px/1.5 Manrope,sans-serif;
  color:var(--ink);background:transparent;border:0;border-bottom:1px solid var(--line2);
  padding:9px 2px;border-radius:0;width:100%}
.inq textarea{min-height:78px;resize:vertical}
.inq input:focus,.inq select:focus,.inq textarea:focus{outline:0;border-bottom-color:var(--ink)}
.inq .fnote2{grid-column:1/-1;color:var(--dim);font-size:var(--fs-note);
  line-height:1.6;margin:2px 0 0}

/* ---- 页脚（单文件版自带；站点版由注入脚本产出，不共用这一份） ---- */
.ft{border-top:2.5px solid var(--ink);margin-top:76px;padding:46px 0 34px}
.ft-top{display:grid;grid-template-columns:1.5fr 1fr 1fr 1fr;gap:36px}
.ft-top .brand b{display:block;font-family:SG;font-weight:500;font-size:var(--fs-h3);
  letter-spacing:-.01em}
.ft-top .brand p{color:var(--dim);font-size:13.5px;line-height:1.7;
  margin:11px 0 0;max-width:34ch}
.ft-col .hd{display:block;font:500 var(--fs-micro)/1 MM;letter-spacing:.18em;
  text-transform:uppercase;color:var(--dim);margin-bottom:15px}
.ft-col a,.ft-col .phv{display:block;width:max-content;max-width:100%;
  font-size:13.5px;line-height:2;color:var(--ink);text-decoration:none}
/* 联系方式与社媒账号沿用 purcellcutting.com 的对外口径（同一家公司、同一个销售台）。
   非链接的两行（地址 / 营业时间）与链接同排版，免得一行是链接一行是文本、基线不齐。 */
.ft-col .ftv{display:block;width:max-content;max-width:100%;
  font-size:13.5px;line-height:2;color:var(--ink)}
/* 按钮形态服从本站性格：直角 + 发丝描边，无圆角、无阴影、无位移（与主 CTA 的胶囊刻意反差——
   胶囊只给「只此一个」的主按钮，页脚图标不能抢层级）。 */
.ft-social{display:flex;gap:7px;margin-top:14px}
.ft-social a{display:flex;align-items:center;justify-content:center;width:32px;height:32px;
  border:1px solid var(--line2);color:var(--dim);
  transition:color .18s ease,border-color .18s ease}
.ft-social a:hover{color:var(--ink);border-color:var(--ink)}
.ft-bot{display:flex;gap:18px;margin-top:38px;padding-top:17px;
  border-top:1px solid var(--line2);font:500 var(--fs-micro)/1.6 MM;
  letter-spacing:.14em;text-transform:uppercase;color:var(--dim)}
.ft-bot .r{margin-left:auto;display:flex;gap:22px}

/* ---- 键盘焦点指示（此前全站缺失；虚线/描边之外必须有一条可见外描边） ---- */
a:focus-visible,button:focus-visible,input:focus-visible,
select:focus-visible,textarea:focus-visible{outline:2px solid var(--mg-ink);outline-offset:3px}

/* ---- 既有一处节奏微调：设备清单后紧接新区块，去掉多余的下留白 ---- */
.toc{padding:8px 0 0}

/* ============================ 响应式 ============================ */
@media (max-width:1080px){
  .hair.apps>*{grid-template-columns:44px 1fr}
  .apps .sub{grid-column:2;text-align:left;padding-top:6px}
  .hair.guide>*{grid-template-columns:1fr 1fr;row-gap:14px}
  .guide .pick{grid-column:1/-1;text-align:left}
  .hair.flow{grid-template-columns:repeat(3,1fr)}
  .hair.facts,.hair.svc,.hair.dl{grid-template-columns:repeat(2,1fr)}
  .inq{grid-template-columns:1fr;gap:32px}
  .oem,.fnote{grid-template-columns:1fr;gap:30px}
  .ft-top{grid-template-columns:1fr 1fr}
}
@media (max-width:900px){
  .entry{grid-template-columns:1fr;row-gap:18px}
  .entry .idx{font-size:40px}
  .entry .ph-img{height:150px}
  .bleed{height:300px}
  .hair.qs{grid-template-columns:1fr}
  .meta .r{display:none}
}
@media (max-width:720px){
  .wrap{padding:0 22px}
  .hero{padding-top:52px}
  .bleed{height:210px}
  .bleed .reg{display:none}
  .cta{flex-wrap:wrap}
  .btn{flex:1 1 100%;justify-content:center}
  .sh{margin-top:50px}
  .hair.flow,.hair.facts,.hair.svc,.hair.qs,.hair.dl{grid-template-columns:1fr}
  .hair.apps>*{grid-template-columns:1fr}
  .apps .n,.apps .sub,.apps>*>div{grid-column:1;text-align:left}
  .hair.guide>*{grid-template-columns:1fr}
  .hair.dls>*{grid-template-columns:1fr 58px 66px;row-gap:7px}
  .inq form{grid-template-columns:1fr}
  .ft-top{grid-template-columns:1fr;gap:28px}
  .ft-bot{flex-direction:column;gap:9px}
  .ft-bot .r{margin-left:0;flex-direction:column;gap:7px}
  .meta span{display:none}
}

/* ============================================================================
   v2 影像带（2026-10-10 用户：「首页的图片含量是不是太少了点，至少增加 5 张」）
   语言沿用 **发丝线网格**（与 .hair 同一手法：gap:1px + 底线色 = 分隔线），
   因此换列/换行不会像 border-left 那样错边；**不等宽、无框、无圆角、无投影**
   —— 不构成「等宽卡片网格」，仍是目录式版面的影像版。

   高度不是拍脑袋定的：--pbh 按**源图宽高比**反推，目标是 object-fit:cover 的
   裁切面积损失 ≤ 30%（保留率 = min(盒AR, 源AR) / max(盒AR, 源AR)）。
   ▸ 应用带源图是 1:1 的特写 ⇒ 盒子也要接近方形（1.38），
     若做成 2.2 的横条，一张 1000×1000 只剩中间 45% 高，上下全削掉。
   ▸ 工厂带源图是 16:9 的车间实拍 ⇒ 盒子必须保持横向（168px 高、1.42~2.1），
     压成竖条会把人直接裁掉一半。
   改档只动 --pbh 这一个数（与 glass 的 --scrim 同思路）。
   ============================================================================ */
.pband{display:grid;gap:var(--gap);background:var(--line2);--pbh:300px;
  margin-top:26px;border-top:1.5px solid var(--ink);border-bottom:1.5px solid var(--line2)}
.pband figure{margin:0;min-width:0;background:var(--paper);display:flex;flex-direction:column}
.pband .shot{height:var(--pbh);overflow:hidden;background:var(--line)}
.pband img{display:block;width:100%;height:100%;object-fit:cover}
.pband figcaption{padding:10px 0 13px;font:500 var(--fs-micro)/1.5 MM;letter-spacing:.13em;
  text-transform:uppercase;color:var(--dim)}
.pband figcaption b{display:block;font-weight:500;color:var(--ink)}
/* 应用带：源图 1:1 → 两格等宽、盒子接近方形 */
.pband.apps{grid-template-columns:1fr 1fr;--pbh:400px}
/* 工厂带：三格不等宽（主轴 1.5fr），盒子保持横向 */
.pband.fac{grid-template-columns:1.5fr 1fr 1.15fr;--pbh:168px}
/* 收尾影像带：与 hero 的 .bleed 同一形态（套准十字 + 左下角标签），首尾呼应 */
.bleed.ship{margin-top:64px}
@media (max-width:1080px){
  .pband.apps{--pbh:360px}
  .pband.fac{grid-template-columns:1fr 1fr;--pbh:250px}
  /* 三格改两列后末格跨满，避免右下留半格空 */
  .pband.fac>figure:last-child{grid-column:span 2}
}
@media (max-width:720px){
  .pband{margin-top:20px}
  .pband.apps{--pbh:260px}
  .pband.fac{--pbh:200px}
  .bleed.ship{margin-top:50px}
}
@media (max-width:480px){
  .pband.apps{--pbh:200px}
  .pband.fac{--pbh:120px}
}

@font-face{font-family:'PJersey';font-style:normal;font-weight:400;font-display:block;src:url(../fonts/jersey-10.woff2) format('woff2')}
@font-face{font-family:'PDoto';font-style:normal;font-weight:100 900;font-display:block;src:url(../fonts/doto-black.woff2) format('woff2')}

/* ============================================================================
   像素字层：只作用于显示字族 —— 标题 / 陈述 / 大数字
   正文 Manrope、等宽标签 MM、表单、页脚小字一律不动。
   字号倍数来自像素实测（见 _tmp/pixfont/measure_ink.py），不是拍脑袋：
     Jersey 10 ×1.37  ⇒ 与 SG 等视觉高、等行宽
     Doto 800  ×1.06  ⇒ 同上（只用于大数字）
   ============================================================================ */
:root{--pixs:1.37;--pixn:1.06}
h1,h2,.sh h2,.toc-head h2,.entry h3,.apps h3,.guide .if,.flow h4,.svc h4,.dl h4,.oem li b,.dls .t,.qs blockquote,.ft-top .brand b{font-family:'PJersey',SG;font-weight:400;letter-spacing:0}
.entry .idx,.facts b{font-family:'PDoto',SG;font-weight:800;letter-spacing:0}
h1{font-size:clamp(calc(40px*var(--pixs)),calc(5.4vw*var(--pixs)),calc(76px*var(--pixs)));
  line-height:calc(1.02/var(--pixs));max-width:20ch}
.sh h2{font-size:calc(var(--fs-sec)*var(--pixs));line-height:calc(1.1/var(--pixs))}
h2,.toc-head h2{font-size:calc(34px*var(--pixs));line-height:calc(1.6/var(--pixs))}
.entry h3{font-size:calc(21px*var(--pixs));line-height:calc(1.25/var(--pixs))}
.apps h3,.ft-top .brand b{font-size:calc(var(--fs-h3)*var(--pixs));line-height:calc(1.6/var(--pixs))}
.guide .if{font-size:calc(var(--fs-h3)*var(--pixs));line-height:calc(1.3/var(--pixs))}
.qs blockquote{font-size:calc(var(--fs-h3)*var(--pixs));line-height:calc(1.5/var(--pixs))}
.flow h4,.svc h4{font-size:calc(var(--fs-h4)*var(--pixs));line-height:calc(1.3/var(--pixs))}
.dl h4,.oem li b,.dls .t{font-size:calc(var(--fs-h4)*var(--pixs));line-height:calc(1.6/var(--pixs))}
.entry .idx{font-size:calc(56px*var(--pixn));line-height:calc(.9/var(--pixn))}
.facts b{font-size:calc(33px*var(--pixn));line-height:calc(1.05/var(--pixn))}
/* 响应式字号也要跟着倍数走；本层在样式表末尾，若不重复声明会盖掉 900px 那档 */
@media (max-width:900px){.entry .idx{font-size:calc(40px*var(--pixn))}}
/* 换字后 ch 宽度变了，标题的折行位置跟着变，会出现「job」独占一行的孤字。
   balance 让两行长度接近，孤字消失；不支持的浏览器退回自动折行，不会更差。 */
h1,.sh h2,.toc-head h2,.entry h3,.qs blockquote,.guide .if{text-wrap:balance}

/* ============================================================================
   站框架层（2026-10-24 落地 A 版时新增）
   页头 / 页脚由 assets/js/site.js 注入，故样式写在这里、不写进 HTML。
   语言沿用方向 C：纸底 + 墨线 + 等宽小字；按钮沿用模块里那一枚胶囊，不另造。
   ============================================================================ */
:root{--fs-meta:10.5px;--fs-nav:11.5px}

/* 占位符不套像素字：Doto 的方点会把「[[ ]]」拆成一排离散方块，读不出「未填」。
   .ph 的语义就是未填，用等宽体 + 虚线更准。 */
.facts b.ph{font-family:MM,monospace;font-weight:400;font-size:23px;letter-spacing:.05em;
  line-height:1.55;color:var(--dim)}
/* 设备条目缩略图：画布本身已留 10% 白边，容器内不再二次缩 */
.entry .ph-img img{max-width:100%;max-height:100%}

/* ---- 页头 ---- */
.fi-header{position:sticky;top:0;z-index:60;background:var(--paper);
  border-bottom:1.5px solid var(--ink)}
.fi-header .wrap{display:flex;align-items:center;gap:24px;height:64px}
.fi-logo{display:flex;align-items:baseline;gap:9px;font-family:SG;font-weight:500;
  font-size:21px;letter-spacing:-.02em;line-height:1}
.fi-logo .sub{font:500 9.5px/1 MM;letter-spacing:.2em;text-transform:uppercase;
  color:var(--dim);border-left:1px solid var(--line2);padding-left:9px}
.fi-menu{margin-left:auto;display:flex;align-items:stretch;height:64px}
.fi-menu>a,.fi-menu>.has-sub>a{display:flex;align-items:center;padding:0 13px;
  font:500 var(--fs-nav)/1 MM;letter-spacing:.13em;text-transform:uppercase;
  color:var(--dim);transition:color .18s ease}
.fi-menu>a:hover,.fi-menu>.has-sub>a:hover{color:var(--ink)}
.has-sub{position:relative;display:flex;align-items:stretch}
.has-sub>.sub{display:none;position:absolute;top:100%;left:0;min-width:232px;
  background:var(--paper);border-top:1.5px solid var(--ink);
  border-bottom:1px solid var(--line2);padding:6px 0;
  box-shadow:0 18px 34px rgba(22,24,26,.10)}
.has-sub:hover>.sub,.has-sub:focus-within>.sub{display:block}
.has-sub>.sub a{display:block;padding:10px 16px;font:400 13px/1.5 Manrope,sans-serif;
  color:var(--dim)}
.has-sub>.sub a:hover{color:var(--ink);background:#ecebe7}
.fi-cta{margin-left:8px;display:flex;align-items:center;gap:10px}
.fi-cta .btn{padding:10px 18px;font-size:13px}
.fi-toggle{display:none;background:transparent;border:1px solid var(--line2);
  color:var(--ink);padding:9px 13px;font:500 10.5px/1 MM;letter-spacing:.14em;cursor:pointer}
/* 折叠菜单里的询价入口：小屏时页头那颗胶囊放不下（390 下 logo+CTA+MENU 合计 410 > 346 可用），
   改由展开菜单承载，保证每屏都有且只许有一个主 CTA。 */
.fi-menu .m-cta{display:none}

/* ---- 页脚：直接用 A 版 .ft 结构，注入脚本复用同一组类名 ---- */
.fi-footer{border-top:2.5px solid var(--ink);margin-top:0;padding:52px 0 30px}
.fi-footer .ft-top{grid-template-columns:1.6fr 1fr 1fr 1fr}
/* CTA 顶回按钮形态：.ft-col a 是后代选择器（0,1,1），会把裸 <a> 压成 13.5px 次级链接；
   .ft-col .btn（0,2,0）才能赢。display 与 color 是两个独立战场，只改 display 会得到浅底浅灰字。 */
.ft-col .btn{display:inline-flex;width:auto;max-width:100%;margin:16px 0 0;padding:12px 20px;
  font:500 13.5px/1 Manrope,sans-serif;letter-spacing:0;color:#fff;background:var(--ink);
  border:0;border-radius:980px;line-height:1}
.ft-col .btn:hover{background:#33363b;color:#fff}
.ft-col .btn .chips{height:13px}
.ft-col .btn .chips i{width:4px;height:13px}

/* ============================================================================
   产品页组件（系列页 / 总览页）
   ============================================================================ */
.crumb{font:500 var(--fs-meta)/1 MM;letter-spacing:.16em;text-transform:uppercase;
  color:var(--dim);padding:24px 0 0}
.crumb a{color:var(--dim)}
.crumb a:hover{color:var(--ink)}
.crumb span{margin:0 9px;color:var(--dim)}

/* 产品头：左文右图 */
.phead{display:grid;grid-template-columns:1fr 1.06fr;gap:56px;align-items:start;
  padding:26px 0 0}
.phead .eyebrow{margin-bottom:14px}
.phead h1{margin:0;font-size:clamp(52px,4.2vw,64px);max-width:18ch;
  line-height:1.06}
.phead .lede{margin:18px 0 0;max-width:48ch;font-size:15.5px;color:var(--dim);
  line-height:1.72}
.phead .shot{background:#fff;border:1px solid var(--line2);position:relative}
.phead .shot img{width:100%;aspect-ratio:4/3;object-fit:contain;display:block}
.phead .shot .cap{position:absolute;left:0;bottom:0;background:var(--paper);
  padding:9px 15px;font:500 var(--fs-meta)/1.5 MM;letter-spacing:.13em;
  text-transform:uppercase;color:var(--dim);border-top:1px solid var(--line2);
  border-right:1px solid var(--line2)}
.phead .hl{display:grid;grid-template-columns:repeat(3,1fr);gap:1px;
  background:var(--line2);border:1px solid var(--line2);border-top:0;margin-top:0}
.phead .hl div{background:var(--paper);padding:15px 16px 17px}
.phead .hl b{display:block;font-family:SG;font-weight:500;font-size:25px;
  letter-spacing:-.02em;line-height:1.1}
.phead .hl span{display:block;margin-top:9px;font:500 9.5px/1.5 MM;letter-spacing:.16em;
  text-transform:uppercase;color:var(--dim)}

/* 规格表：两列瀑布（29 行不分左右两页，靠 column-count 自动平衡） */
.specwrap{columns:2;column-gap:64px;padding-top:6px}
.specwrap .specblock{break-inside:avoid;margin-bottom:26px}
.specblock .hd{font:500 var(--fs-meta)/1 MM;letter-spacing:.2em;text-transform:uppercase;
  color:var(--mg-ink);padding-bottom:11px;border-bottom:2.5px solid var(--ink);
  margin-bottom:2px}
.specblock dl{margin:0}
.specblock dl div{display:flex;justify-content:space-between;gap:16px;padding:9px 0;
  border-bottom:1px solid var(--line)}
.specblock dt{font:400 12.5px/1.5 MM;color:var(--dim);margin:0}
.specblock dd{font:500 12.5px/1.5 MM;color:var(--ink);margin:0;text-align:right}

/* 型号对照：同系列多型号的差异表 */
.mtab{width:100%;border-collapse:collapse;margin-top:6px}
.mtab th,.mtab td{border-bottom:1px solid var(--line);padding:12px 14px;text-align:left;
  vertical-align:top;font:400 13px/1.6 Manrope,sans-serif;color:var(--dim)}
.mtab thead th{font:500 10.5px/1.4 MM;letter-spacing:.14em;text-transform:uppercase;
  color:var(--ink);border-bottom:2.5px solid var(--ink);white-space:nowrap}
.mtab td:first-child{font:500 11px/1.5 MM;letter-spacing:.1em;text-transform:uppercase;
  color:var(--dim);width:190px}
.mtab td b{color:var(--ink);font-weight:500}
.mtab tbody tr:hover td{background:#ecebe7}

/* 图集：发丝线网格（与 .hair 同一手法）
   ⚠ 容器底色只出现在 1px 缝里。列数必须等于实际张数（生成器写 g1…g4），
   否则空轨道会把整块底色露出来 —— 曾出现占两格的大块灰底（s-series / sv-series / zd680）。
   张数 → 列数：1→1、2→2、3→3、4→2（4 张走 2×2，刚好填满不留空槽）。 */
.gal{display:grid;--cols:3;grid-template-columns:repeat(var(--cols),minmax(0,1fr));
  gap:1px;background:var(--line2);
  border-top:1px solid var(--line2);border-bottom:1px solid var(--line2);margin-top:26px}
.gal.g1{--cols:1}
.gal.g2{--cols:2}
.gal.g3{--cols:3}
.gal.g4{--cols:2}
.gal figure{margin:0;background:var(--paper);display:flex;flex-direction:column}
.gal .shot{aspect-ratio:1/1;overflow:hidden;background:var(--line)}
.gal img{width:100%;height:100%;object-fit:cover;display:block}
/* 单张：不裁切整幅（产品图是 1200×900 白底画布，1:1 cover 会切掉左右）。
   并且限宽到约 2 列宽（内容列 1104 → 每列 ~551）：一张 4:3 白底图铺满整行时，
   图内自带的白边会把整屏读成「一大片空白」，限宽后机器才读得清。 */
.gal.g1{max-width:560px}
.gal.g1 .shot{aspect-ratio:4/3;background:#fff}
.gal.g1 img{object-fit:contain}
.gal figcaption{padding:9px 0 12px;font:500 9.5px/1.5 MM;letter-spacing:.13em;
  text-transform:uppercase;color:var(--dim)}

/* 系列入口（总览页每一组的行） */
.srow{display:grid;grid-template-columns:150px 1fr 236px 168px;gap:30px;align-items:center;
  padding:20px 0;border-bottom:1px solid var(--line2)}
.srow .pic{background:#fff;border:1px solid var(--line);aspect-ratio:4/3;overflow:hidden}
/* 画布本身已留 10% 白边（1200x900，内容 90%），再叠 padding 会让机器缩成一点 —— 这里不加内边距 */
.srow .pic img{width:100%;height:100%;object-fit:contain;padding:0;display:block}
.srow h4{font-family:SG;font-weight:500;font-size:21px;letter-spacing:-.01em;margin:0;
  line-height:1.2}
.srow .models{font:500 10px/1.6 MM;letter-spacing:.13em;text-transform:uppercase;
  color:var(--dim);margin-top:9px}
.srow p{margin:9px 0 0;color:var(--dim);font-size:13.5px;line-height:1.6;max-width:46ch}
.srow dl{margin:0}
.srow dl div{display:flex;justify-content:space-between;gap:10px;padding:6px 0;
  border-bottom:1px solid var(--line);font:400 11.5px/1.5 MM}
.srow dt{color:var(--dim);margin:0}
.srow dd{margin:0;color:var(--ink)}
.srow .go{font:500 10.5px/1 MM;letter-spacing:.16em;text-transform:uppercase;
  border:1px solid var(--line2);padding:13px 10px;text-align:center}
.srow .go:hover{border-color:var(--ink);background:var(--ink);color:var(--paper)}

/* 组头（总览页 4 条线） */
.grp{margin-top:56px}
.grp .hd{display:flex;align-items:baseline;gap:16px;padding-bottom:14px;
  border-bottom:2.5px solid var(--ink)}
.grp .hd .n{font-family:SG;font-weight:500;font-size:26px;letter-spacing:-.02em}
.grp .hd h3{font-family:SG;font-weight:500;font-size:26px;letter-spacing:-.02em;margin:0}
.grp .hd .c{margin-left:auto;font:500 10.5px/1 MM;letter-spacing:.16em;
  text-transform:uppercase;color:var(--dim)}

/* 询价尾块 */
.tailspec{display:grid;grid-template-columns:1fr 1.15fr;gap:52px;align-items:start;
  padding:32px 0 6px;border-bottom:1px solid var(--line2)}
.tailspec .note{color:var(--dim);font-size:14.5px;line-height:1.75;margin:0;max-width:40ch}
.tailspec .note a{color:var(--ink);border-bottom:1px solid var(--line2)}
/* 相关系列：同一手法。列数 = 链接数（r1…r4），4 条走 2×2 刚好填满。 */
.related{display:grid;--cols:3;grid-template-columns:repeat(var(--cols),minmax(0,1fr));gap:1px;
  background:var(--line2);
  border-top:1px solid var(--line2);border-bottom:1px solid var(--line2);margin-top:26px}
.related.r1{--cols:1}
/* 只有 1 条时铺满整行会读成一大片空，改成同行并排（标签在左、名字在右） */
.related.r1 a{display:flex;align-items:baseline;gap:26px}
.related.r1 b{margin-top:0}
.related.r2{--cols:2}
.related.r3{--cols:3}
.related.r4{--cols:2}
.related a{background:var(--paper);padding:18px 20px 20px;display:block}
.related a:hover{background:#ecebe7}
.related .k{font:500 9.5px/1 MM;letter-spacing:.16em;text-transform:uppercase;color:var(--dim)}
.related b{display:block;font-family:SG;font-weight:500;font-size:17px;margin-top:10px;
  letter-spacing:-.01em}

/* 边界区块（Cuts / Does not）：这一页独有的内容 —— 每个系列能吃的活不同、
   吃不下的活转去的型号也不同。两列、中间一条发丝线；右列降权，因为它是
   「不适用」的说明，不是卖点。 */
.fitgrid{display:grid;grid-template-columns:1fr 1fr;gap:1px;background:var(--line2);
  border-top:2.5px solid var(--ink);border-bottom:1px solid var(--line2);margin-top:24px}
.fcol{background:var(--paper);padding:24px 26px 26px}
.fcol .fh{display:flex;align-items:center;gap:9px;
  font:500 10px/1.4 MM;letter-spacing:.18em;text-transform:uppercase;color:var(--ink)}
.fcol .fh .mk{width:7px;height:7px;background:var(--c1);flex:none}
.fcol.mut .fh{color:var(--dim)}
.fcol.mut .fh .mk{background:var(--line2)}
.fcol ul{margin:16px 0 0;padding:0;list-style:none}
.fcol li{position:relative;padding-left:17px;margin:0 0 11px;
  font:400 13.5px/1.68 Manrope,sans-serif;color:var(--ink)}
.fcol li:last-child{margin-bottom:0}
.fcol li::before{content:"";position:absolute;left:0;top:8px;width:5px;height:1px;
  background:var(--line2)}
.fcol.mut li{color:var(--dim)}

/* 询价横条：标题在左、按钮在右，全站同一位置同一形态 —— 用户一眼认出「又是这条」。
   原先 9 个系列页在正文里各写一段询价话术（逐字相同），已删；话术留在 contact 页。 */
.endbar{display:flex;align-items:center;gap:32px;flex-wrap:wrap;
  padding:26px 0;border-top:2.5px solid var(--ink);border-bottom:1px solid var(--line2)}
.endbar .k{font:500 10px/1 MM;letter-spacing:.2em;text-transform:uppercase;color:var(--mg-ink)}
.endbar h2{margin:9px 0 0;font-size:calc(var(--fs-sec)*var(--pixs));
  line-height:calc(1.1/var(--pixs))}
.endbar .btn{margin-left:auto}

/* ---- 产品页响应式 ---- */
@media (max-width:1080px){
  .phead{grid-template-columns:1fr;gap:30px}
  .specwrap{columns:1}
  .srow{grid-template-columns:120px 1fr;gap:20px}
  .srow dl,.srow .go{grid-column:1/-1}
  .related{grid-template-columns:1fr}
  .tailspec{grid-template-columns:1fr;gap:26px}
  /* 两列边界在窄屏会被压成细长条，改上下排；右列跟着排到下面，顺序仍是「能/不能」 */
  .fitgrid{grid-template-columns:1fr}
  .endbar{gap:20px}
  .endbar .btn{margin-left:0}
  .fi-menu{display:none}
  .fi-toggle{display:block}
  /* ⚠ 必须在同一断点里覆写 .fi-footer .ft-top：上面那条 1.6fr 1fr 1fr 1fr 特异性更高，
     不覆写会压掉 A 原有的 1fr 1fr，768 下页脚溢出 86px（实测）。 */
  .fi-footer .ft-top{grid-template-columns:1fr 1fr}
  /* 折叠态：父项点开而不是跳走（JS 里 intercept，见 site.js） */
  .has-sub.open{display:block}
  .has-sub.open>.sub{display:block;position:static;border-top:1px solid var(--line2);
    box-shadow:none;min-width:0;padding:0 0 6px 12px}
}
@media (max-width:900px){
  .phead .hl{grid-template-columns:1fr}
  /* 这里曾写 .gal{1fr 1fr} —— 2 列装 1 张或 3 张都会留出空轨道，露出整块底色。
     列数改由 --cols 按张数决定（见 .gal.g1…g4），此处不再压列数。 */
  .mtab td:first-child{width:130px}
  .mtab{display:block;overflow-x:auto;white-space:nowrap}
}
@media (max-width:720px){
  .gal{grid-template-columns:1fr}
  .related{grid-template-columns:1fr}
  .srow{grid-template-columns:1fr}
  .fi-footer .ft-top{grid-template-columns:1fr;gap:26px}
}

/* 移动端展开菜单（JS 加 .open）。不加这个，汉堡点了没反应。 */
.fi-header.open .fi-menu{display:flex;flex-direction:column;position:absolute;top:100%;
  left:0;right:0;background:var(--paper);border-bottom:1.5px solid var(--ink);
  padding:6px 22px 14px;height:auto;box-shadow:0 18px 34px rgba(22,24,26,.10)}
.fi-header.open .fi-menu>a,.fi-header.open .has-sub>a{padding:14px 0;
  border-bottom:1px solid var(--line);height:auto}
.fi-header.open .has-sub{display:block;height:auto}
/* 小屏：容器藏起页头胶囊，改由展开菜单里的入口承担（见 .fi-menu .m-cta） */
@media (max-width:720px){
  .fi-cta .btn{display:none}
  .fi-menu .m-cta{display:block;margin-top:12px;padding:13px 18px;text-align:center;
    background:var(--ink);color:#fff;font:500 13.5px/1 Manrope,sans-serif;
    letter-spacing:0;border:0;border-radius:980px}
  .fi-menu .m-cta:hover{background:#33363b;color:#fff}
}

/* 首页 Workflow：5 步在 3 列断点（721–1080）会剩 1 个空槽，而 .hair 是「容器底色画 1px 缝」
   的手法 ⇒ 空槽露出一整块底色（实测 1024 约 4.97 万 px²、768 约 4.05 万 px²）。
   末项跨 2 列正好填满。nth-child(5):last-child 限定「正好 5 步」才生效 ——
   改步数必须同步改这条，否则空槽会回来。
   ⚠ 必须带 min-width:721px：单列布局下 span 2 会凭空生出第 2 条隐式轨道，
   把 1 列变成 2 列（实测 390 下首列只剩 111px）。 */
@media (max-width:1080px) and (min-width:721px){
  .hair.flow>*:nth-child(5):last-child{grid-column:span 2}
}

/* ---- 首页 2026-10 精简（板块 10 → 6）---- */
/* 设备线段右侧加一行「不知道怎么选」，把原来一整段 Selection 压成一句 + 出口 */
.toc-head{display:flex;align-items:baseline;gap:20px}
.toc-note{margin:0 0 0 auto;font:500 10.5px/1 MM;letter-spacing:.14em;text-transform:uppercase;
  color:var(--dim)}
.toc-note a{color:var(--ink);border-bottom:1px solid var(--line2)}
.toc-note a:hover{border-bottom-color:var(--ink)}
/* 「After the sale」不再单独成段：跟在 workflow 五步下面，只留短语不写散文。
   两段 .hair 直接相接时中间没有发丝线（线来自 gap，不来自边框）⇒ 第二段补 border-top。 */
.svc-cap{margin:20px 0 0;font:500 var(--fs-micro)/1 MM;letter-spacing:.2em;
  text-transform:uppercase;color:var(--dim)}
.hair.svc{margin-top:9px;border-top:1px solid var(--line2)}
.svc .k{display:block;font:500 var(--fs-micro)/1 MM;letter-spacing:.16em;text-transform:uppercase;
  color:var(--dim)}
.svc .v{display:block;margin-top:9px;font-size:13.5px;line-height:1.5;color:var(--ink)}
/* 小屏：四格横排会挤成细长条，改 2×2 */
@media (max-width:720px){
  .hair.svc{grid-template-columns:1fr 1fr}
  /* 大写 + .14em 字距会把这一行撑成两行；小屏改回正常大小写与字距，恢复一行 */
  .toc-note{text-transform:none;letter-spacing:0}
}
/* 768 起 h2 与右侧小字互相挤压：h2 断成两行、小字也断成两行（实测 721–768）
   ⇒ 这一段之下改上下排。900 是已有的断点，顺手复用，不另造。 */
@media (max-width:900px){
  .toc-head{display:block}
  .toc-note{margin:10px 0 0}
}
/* 提交成功后就地换成一个状态块：小标 + 主文 + 左侧结构色竖线。
   只留一行灰字在整块卡片里会被读成「表单怎么没了」。 */
.form-sent{padding-left:16px;border-left:3px solid var(--cy)}
.form-sent-k{display:block;font:600 11px/1 MM;letter-spacing:.18em;text-transform:uppercase;color:var(--cy)}
.form-sent p{margin:10px 0 0;font-size:15px;line-height:1.55;color:var(--ink)}
/* 蜜罐：人看不见，机器人会勾 */
.hp{position:absolute;left:-9999px;width:1px;height:1px;overflow:hidden;opacity:0}
/* 注记里的链接必须自己长出来：基础 a 是 color:inherit + 无下划线，
   不补则 "privacy" 与周围灰字完全同形（实测 color 相同、border 0）。
   覆盖写在追加层 —— .inq .fnote2 本体在 A 版 <style> 里，不动源。 */
.inq .fnote2 a{color:var(--ink);border-bottom:1px solid var(--line2)}
.inq .fnote2 a:hover{border-bottom-color:var(--mg-ink)}
/* ============================================================================
   法务页（privacy / terms，2026-10-27）
   抬头单栏，条文走「编号｜正文」两列，条文之间只用 1px 墨线分隔 —— 与站内
   表格化行同一语言，不引入卡片、不用虚线。编号取洋红（.sh .k 同一色）。
   条款标题沿用 --fs-h4 那一级（与 .flow h4 同为「小节标题」），不新造字号台阶。
   ============================================================================ */
.lawhead{margin:0 auto;padding:26px 0 0;max-width:720px}
.lawhead h1{margin:14px 0 0;font-size:clamp(52px,4.2vw,64px);max-width:22ch}
.lawhead .lede{margin:18px 0 0;max-width:60ch;font-size:15.5px;color:var(--dim);
  line-height:1.72}
.lawstamp{margin:20px 0 0;font:500 var(--fs-note)/1.5 MM;letter-spacing:.13em;
  text-transform:uppercase;color:var(--dim)}
.law{margin:44px auto 0;max-width:720px;padding-bottom:clamp(56px,7vw,96px)}
.law-sec{display:grid;grid-template-columns:62px minmax(0,1fr);gap:0 22px;
  padding:24px 0;border-top:1px solid var(--line)}
.law-sec:last-child{border-bottom:1px solid var(--line)}
.law-sec .n{font:500 var(--fs-note)/1.6 MM;letter-spacing:.1em;color:var(--mg-ink);
  padding-top:6px}
.law-sec h2{margin:0 0 11px;font-size:calc(var(--fs-h4)*var(--pixs));
  line-height:calc(1.35/var(--pixs))}
.law-sec p,.law-sec li{font-size:15.5px;line-height:1.78;color:var(--ink);
  margin:0 0 11px}
.law-sec p:last-child,.law-sec ul:last-child{margin-bottom:0}
.law-sec ul{margin:0 0 11px;padding-left:1.15em}
.law-sec li{margin:0 0 5px}
.law-sec a{color:var(--ink);border-bottom:1px solid var(--line2)}
.law-sec a:hover{border-bottom-color:var(--mg-ink)}
/* 页脚法务链接：.ft-bot 是 flex + 大写 mono，链接必须自己补下划线，
   否则与相邻的纯文字看起来一样（基础 a 无下划线、继承同一颜色） */
.ft-bot a{color:var(--ink);border-bottom:1px solid var(--line2)}
.ft-bot a:hover{border-bottom-color:var(--mg-ink)}
@media (max-width:720px){
  .law-sec{grid-template-columns:1fr;gap:7px;padding:22px 0}
  .law-sec .n{padding-top:0}
  .law-sec p,.law-sec li{font-size:15px}
}

/* ---------- 首屏型号条（系列页：同一平台三个 build） ----------
   h1 写的是 "ZD350 series"，三个 build 名（Plus / PLUS-EX / Ultra）原本只在
   第二屏对比表与规格块里出现 ⇒ 首屏不知道有几种可选。这里做成按钮，
   点一下跳到该 build 的 specblock。
   视觉沿用本站印刷语言：直角、1px --line2 边、等宽字号、hover 反白。
   ⚠ 不写右侧数值：三个 build 的差异维度不同（Plus vs PLUS-EX 差在 1,600→1,800 mm/s，
     Ultra 差在 350→360 mm 切削宽），没有单一维度能同时区分三者 ⇒ 只列型号，
     差异交给下方 #compare 对比表，不在这里制造假的「同一维度」。 */
.model-pick{margin:24px 0 0}
.mp-k{display:block;font:500 10.5px/1 MM;letter-spacing:.26em;text-transform:uppercase;
  color:var(--dim);margin-bottom:10px}
.mp-list{display:flex;flex-wrap:wrap;gap:8px}
.mp-chip{padding:13px 18px;border:1px solid var(--line2);font:500 11px/1 MM;
  letter-spacing:.14em;text-transform:uppercase;color:var(--ink);transition:.16s}
.mp-chip:hover{background:var(--ink);color:var(--paper);border-color:var(--ink)}
/* .specwrap 是 columns:2 多栏，落点用 outline 而不是外扩阴影（不占布局）；
   offset 取正 3px —— .specblock 本身左右无内边距、数值列贴边，负 offset 会压住末位字符 */
.specblock{scroll-margin-top:96px}
.specblock:target{outline:1.5px solid var(--mg);outline-offset:3px}

/* ---------- 404 页 ---------- */
.nf-links{list-style:none;margin:26px 0 0;padding:0;display:grid;
  grid-template-columns:repeat(2,minmax(0,1fr));gap:12px;max-width:640px}
.nf-links li{display:flex;flex-direction:column;gap:6px;align-items:flex-start;
  border:1px solid var(--line2);padding:14px 16px}
.nf-links li span{font-size:13px;color:var(--dim);line-height:1.5}
.nf-links .btn{justify-content:center;width:100%}
@media (max-width:600px){
  .nf-links{grid-template-columns:1fr}
}

/* ================= 首页改版：让照片成为主体 + 打破等宽 =================
   2026-11-05。三个动机的实测依据：
   ① 产品图 163×122（20k px²）比装饰用的工厂图 1104×398（439k px²）小 22 倍
      —— 页面主角反而最弱。⇒ 第 1 行做成大图行，其余 3 行保持列表密度。
   ② 7 处等宽网格，其中 .hair.flow 5 列全等分（220px×5）⇒ 改成不等宽。
   ③ 产品图是纯白底 JPG，落在 --paper(#f3f3f1) 底上会露出一块白色矩形
      ⇒ 格子底改成纯白，白底图与格子融为一体，只留机器自身的深色轮廓。
   ⚠ 波及面：.entry / .hair.flow / .hair.svc **只在 index.html**；
      .hair.facts 同时在 about.html 用，**本次不动**。
   ⚠ 保持 finishing 自己的语言：圆角 0、无阴影、不搬 softfilm 元素。 */

/* ① 第 1 行 = Lead entry（大图行），第 2–4 行 = 列表行 */
.toc .entry{grid-template-columns:96px 200px 1fr 264px;gap:30px;padding:24px 0}
.toc .entry:first-of-type{grid-template-columns:96px 300px 1fr 264px;gap:34px;padding:40px 0 44px}
.toc .entry:first-of-type .idx{font-size:76px}
.toc .entry:first-of-type .idx small{font-size:11px;margin-top:12px}
.toc .entry:first-of-type h3{font-size:26px;line-height:1.2;margin-bottom:10px}
.toc .entry:first-of-type p{font-size:15px;max-width:44ch;margin-top:12px}
.toc .entry:first-of-type .spec div{padding:11px 0;font-size:12.5px}

/* ② 产品图：白底图融进白格，去掉 1px 框（框在小尺寸下显廉价） */
.toc .entry .ph-img{height:132px;background:#fff;border:0}
.toc .entry:first-of-type .ph-img{height:248px}
.toc .entry .ph-img img{max-width:88%;max-height:88%}

/* ③ 流程表：首列（Artwork，起点）更宽，破掉 5 等分 */
.hair.flow{grid-template-columns:1.34fr 1fr 1fr 1fr 1fr}

/* ②bis 白底产品图与纸面融合：multiply 让图片的白色像素与底色相乘
   ⇒ 纯白底 JPG 无需抠图就"消失"，只留机器自身的深色轮廓。
   ⚠ 白块反而更扎眼（放大后 #fff 与 --paper #f3f3f1 的方块边界很明显），
     所以必须靠 blend 消掉白底，而不是给白块加边框。 */
.toc .entry .ph-img{background:var(--paper)}
.toc .entry .ph-img img{mix-blend-mode:multiply}

/* ④ 列宽重排 + 规格表不折行
   ⚠ nowrap 只限 .toc .entry —— .spec 在 12 个页面都用（support 11 处），
   全局 nowrap 会把 support 的长规格撑破。 */
.toc .entry{grid-template-columns:88px 200px 1fr 292px;gap:30px}
.toc .entry:first-of-type{grid-template-columns:88px 288px 1fr 292px;gap:32px}
.toc .entry .spec dt,.toc .entry .spec dd{white-space:nowrap}

/* ================= 首屏改满幅出血 =================
   2026-11-05。现状：.bleed 在 main.wrap 内，宽 1104px（内容区），
   高 400px，比例 2.77:1 —— 是"横幅"不是"画面"。
   改法：把 hero 移出 main.wrap（HTML 已改），.bleed 用 width:100%
   ⇒ 宽度 = body 内容宽（**不含滚动条**）⇒ 真正的视口满幅且零横向溢出。

   ⚠ 为什么不用 100vw：100vw 含滚动条宽度，会多出 15px 横向溢出；
      而 body{overflow-x:hidden} 会让 .fi-header 的 position:sticky 失效
      （实测该站有 sticky 页头，.fi-header{position:sticky;top:0}）。
   ⚠ 源图 factory-hall.webp 是 1920×747，本身就是扁的 ⇒ 满幅后比例仍是横幅。
      要做竖向大画面必须换素材（需拍板），本次不动图片资产。 */
.hero{padding:0;text-align:center}
.hero-in{padding-top:78px}
/* 满幅出血图 */
.hero .bleed{margin-top:56px;width:100%;height:min(52vh,520px);border-bottom:1.5px solid var(--ink)}
/* 底部渐变：图融进纸面，避免"贴上去"的生硬边 */
.hero .bleed::after{content:"";position:absolute;left:0;right:0;bottom:0;height:72px;
  background:linear-gradient(to bottom,rgba(243,243,241,0),rgba(243,243,241,.72));
  pointer-events:none}
/* 图上的定位标记与角标要跟内容区对齐，不能贴视口边 */
.hero .bleed .reg.r1{left:calc((100% - 1216px)/2 + 76px)}
.hero .bleed .reg.r2{right:calc((100% - 1216px)/2 + 76px)}
.hero .bleed .chip{left:calc((100% - 1216px)/2 + 56px)}
/* 窄屏：内容区 padding 22px，标记退到内容左缘 */
@media (max-width:1240px){
  .hero .bleed .reg.r1{left:76px}
  .hero .bleed .reg.r2{right:76px}
  .hero .bleed .chip{left:78px}
}

/* ⑤ 窄屏复位 —— 必须补，否则会盖掉原有的 900px 断点
   原规则：@media (max-width:900px){ .entry{grid-template-columns:1fr;row-gap:18px} ... }
   ⚠ 我的 .toc .entry 特异性(0,2,0) 高于 .entry(0,1,0) ⇒ 窄屏下单列失效，
     实测 390px 横向溢出 489px、768px 145px（改版前均为 0）。
   ⇒ 在同一特异性下把窄屏规则补回来。 */
@media (max-width:900px){
  .toc .entry,
  .toc .entry:first-of-type{grid-template-columns:1fr;row-gap:18px;padding:24px 0}
  .toc .entry .idx,
  .toc .entry:first-of-type .idx{font-size:calc(40px * var(--pixn))}
  .toc .entry:first-of-type h3{font-size:calc(21px * var(--pixs))}
  .toc .entry:first-of-type p{font-size:14px;max-width:none;margin-top:10px}
  .toc .entry .ph-img,
  .toc .entry:first-of-type .ph-img{height:150px;max-width:300px}
  .toc .entry .spec dt,
  .toc .entry .spec dd{white-space:normal}
  /* 首屏满幅图在窄屏收窄，别占满屏 */
  .hero .bleed{height:300px;margin-top:40px}
  .hero .bleed::after{height:48px}
  .hero .bleed .reg.r1{left:44px}
  .hero .bleed .reg.r2{right:44px}
  .hero .bleed .chip{left:22px;padding:10px 16px;font-size:9.5px}
}

/* ⑥ 补齐被覆盖的窄屏规则（逐条核对原 CSS 的断点后补回）
   原断点：
     1080px  .hair.flow{repeat(3,1fr)}
      720px  .hair.flow{1fr}  .bleed{height:210px}  .bleed .reg{display:none}
      900px  .bleed{height:300px}
   我的新规则特异性相同或更高且写在末尾 ⇒ 必须逐条补回。 */
@media (max-width:1080px){
  .hair.flow{grid-template-columns:1.34fr 1fr 1fr}
}
@media (max-width:720px){
  .hair.flow{grid-template-columns:1fr}
  .hero .bleed{height:210px;margin-top:32px}
  .hero .bleed .reg{display:none}
  .hero .bleed .chip{left:22px;padding:9px 14px;font-size:9px;letter-spacing:.1em}
}

/* ⑦ 渐变加强：实测 72px/.72 时图的下边缘仍显出一条硬线 ⇒ 加高加深 */
.hero .bleed::after{height:104px;
  background:linear-gradient(to bottom,rgba(243,243,241,0),rgba(243,243,241,.62) 42%,rgba(243,243,241,.96))}

/* ⑧ 修正图上角标与内容左缘的对齐
   实测 768px：chip 在 22px，但 .wrap 的 padding 是 56px（≤720 才变 22px）
   ⇒ 内容左缘 56px，角标却贴在 22px，错位。
   对齐基准：wrap 左缘 + wrap padding（56px / ≤720 时 22px）。 */
@media (max-width:1240px){
  .hero .bleed .chip{left:56px}
}
@media (max-width:900px){
  .hero .bleed .chip{left:56px}
}
@media (max-width:720px){
  .hero .bleed .chip{left:22px}
}

/* ================= Equipment lines → 竖条画廊 =================
   2026-11-05。灵感来源：Visora 的 Explore 页（竖窄条 + 竖排文字标签 + 深色带）。
   ⚠ 借手法不借风格：Visora 是圆润玻璃拟态，本站是像素字 + 直角 + CMYK 色码
     （项目已定方向 C），不搬圆角/阴影/渐变球。

   为什么这么改（实测依据）：
   · 改版前 4 行设备列表完全同构（编号/图/文案/3 格规格表），是「模板化段落」
     与「等宽网格无疏密」两项的主要来源。
   · 竖条画廊让每条线有独立的视觉重量（自己的图 + 自己的深色标签带），
     并自然形成不等宽与高度递变。
   · 深色标签带同时补上「全站一个明度、没有重的落点」这条短板。

   规格信息不丢：从 3 格表格压成一行「值 · 值 · 值」，仍在首页可见。 */

.gallery{display:grid;grid-template-columns:1.22fr 1fr 1fr 1fr;gap:16px;align-items:end}
.gallery .entry{display:flex;flex-direction:column;gap:0;padding:0;border:0;
  background:var(--paper);min-width:0}
/* 图区：高度递变 ⇒ 打破等高 */
.gallery .entry .ph-img{height:236px;background:var(--paper);border:0;
  display:flex;align-items:center;justify-content:center;padding:16px 12px 4px}
.gallery .entry:nth-child(1) .ph-img{height:300px}
.gallery .entry:nth-child(2) .ph-img{height:268px}
.gallery .entry:nth-child(3) .ph-img{height:268px}
.gallery .entry:nth-child(4) .ph-img{height:232px}
.gallery .entry .ph-img img{max-width:100%;max-height:100%;object-fit:contain;
  mix-blend-mode:multiply}

/* 深色标签带：序号 + 竖排正立像素字（text-orientation:upright，
   拉丁字母侧躺不可读 —— 实测四种写法后只有 upright 在像素字下成立） */
.gallery .entry .vtag{background:var(--ink);color:var(--paper);
  padding:14px 12px;display:flex;align-items:flex-end;gap:10px;min-height:132px}
.gallery .entry .vtag .n{font-family:'PDoto',SG;font-weight:800;font-size:26px;line-height:.8;
  letter-spacing:-.04em}
.gallery .entry .vtag .t{writing-mode:vertical-rl;text-orientation:upright;
  font-family:'PJersey',SG;font-weight:400;font-size:19px;line-height:1;
  letter-spacing:.04em;margin-left:auto}

/* 文案 */
.gallery .entry .etext{padding:16px 2px 0}
.gallery .entry .code{font:500 10.5px/1 MM;letter-spacing:.18em;text-transform:uppercase;
  color:var(--mg-ink);display:block}
.gallery .entry h3{font-family:'PJersey',SG;font-weight:400;font-size:19px;line-height:1.22;
  letter-spacing:-.01em;margin:8px 0 0;color:var(--ink)}
.gallery .entry p{color:var(--dim);font-size:13.5px;line-height:1.62;margin:9px 0 0}
.gallery .entry .eline{font:500 11.5px/1.6 MM;letter-spacing:.02em;color:var(--ink);
  margin-top:12px;padding-top:10px;border-top:1px solid var(--line)}

/* 窄屏：竖条画廊退成两列 → 单列 */
@media (max-width:1080px){
  .gallery{grid-template-columns:1fr 1fr;gap:14px}
  .gallery .entry .ph-img,
  .gallery .entry:nth-child(1) .ph-img,
  .gallery .entry:nth-child(2) .ph-img,
  .gallery .entry:nth-child(3) .ph-img,
  .gallery .entry:nth-child(4) .ph-img{height:236px}
}
@media (max-width:640px){
  .gallery{grid-template-columns:1fr;gap:26px}
  .gallery .entry .vtag{min-height:0;align-items:center}
  .gallery .entry .vtag .t{writing-mode:horizontal-tb;text-orientation:mixed;
    margin-left:0;font-size:17px}
}

/* ⑨ 画廊三处修正（渲染后实测发现）
   ① 深色带只有 ~60px 宽，没横跨整条
      根因：.entry 原是 grid（align-items:center），改成 flex column 后
      align-items 变成**交叉轴**（水平）居中 ⇒ 子项不拉伸。
      ⇒ 显式 align-items:stretch。
   ② 序号 01 压在竖排字上 ⇒ 序号改绝对定位到带的左上角。
   ③ 四条底部被强制对齐，深色带高度参差 ⇒ align-items:start，
      让各条自然错落（Visora 卡片错落感），深色带高度固定。 */
.gallery{align-items:start}
.gallery .entry{align-items:stretch}
.gallery .entry .vtag{position:relative;align-items:flex-start;min-height:0;height:118px;
  padding:13px 14px}
.gallery .entry .vtag .n{position:absolute;left:14px;top:11px;font-size:24px}
.gallery .entry .vtag .t{margin-left:auto;margin-right:2px}

/* ⑩ 索引色条改位
   原规则 .toc article.entry::before 是「每行左侧一根 5px 竖条」（top:20px;bottom:20px），
   画廊结构下各条高度不同 ⇒ 四根竖条参差错落（实测蓝条 560px、灰条 240px），很乱。
   ⇒ 竖条改为深色标签带顶部的 4px 横条：色码语义（CMYK 对应四条线）保留，
     且与深色带一体，不再是悬空的线。 */
.gallery .entry::before{display:none}
.gallery .entry .vtag::before{content:"";position:absolute;left:0;right:0;top:0;
  height:4px;background:var(--line2)}
.gallery .entry:nth-child(1) .vtag::before{background:var(--c1)}
.gallery .entry:nth-child(2) .vtag::before{background:var(--c2)}
.gallery .entry:nth-child(3) .vtag::before{background:var(--c3)}
.gallery .entry:nth-child(4) .vtag::before{background:#8b8f95}

/* ================= 页脚改深色：全页唯一的「重」落点 =================
   2026-11-05。动机（实测）：全站 9 段底色都是透明/纸色，只有 1 段浅灰、
   1 段纯白 ⇒ 整页一个明度，没有任何一处「停下来」的地方。深色页脚同时
   承担两个作用：① 收尾；② 给 CMYK 色码与像素字一个真正能发光的底。

   ⚠ 只改颜色，不改字号与间距 —— 页脚注入在全部 19 页，改字号会全站变页高。
   ⚠ 深色底上所有颜色都要重新标定：alpha ≠ 对比度，必须按合成后的结果算。
      纸 #f3f3f1 / 正文级 #d9dad8 / 次级 #a8aaa9 / 微标 #8b8f95（对 #16181a 均 ≥ 5.3:1）。 */
.fi-footer{
  position:relative;overflow:hidden;
  background:var(--ink);color:var(--paper);
  border-top:0;
  /* 顶部 4px CMYK 色码条：与页面最顶端 .cbar 呼应，不用额外元素 */
  background-image:linear-gradient(to right,
    var(--c1) 0 25%,var(--c2) 25% 50%,var(--c3) 50% 75%,#8b8f95 75% 100%);
  background-size:100% 4px;background-repeat:no-repeat;background-position:top left}
/* 巨大背景字：像素字压在底层，只做肌理，不承载信息（aria 无关，纯装饰） */
.fi-footer::before{
  content:"FINISHING";position:absolute;left:-.06em;bottom:-.30em;
  font-family:'PJersey',SG;font-weight:400;font-size:clamp(120px,17vw,276px);
  line-height:.78;letter-spacing:-.01em;color:rgba(243,243,241,.055);
  pointer-events:none;user-select:none;white-space:nowrap}
.fi-footer .wrap{position:relative;z-index:1}

/* 文字层级：深底上不能沿用浅底的 --dim(#67696d)，对 #16181a 只有 2.6:1 */
.fi-footer .ft-top .brand b{color:var(--paper)}
.fi-footer .ft-top .brand p{color:#a8aaa9}
.fi-footer .ft-col .hd{color:#8b8f95}
.fi-footer .ft-col a,
.fi-footer .ft-col .ftv,
.fi-footer .ft-col .phv{color:#d9dad8}
.fi-footer .ft-col a:hover{color:#fff}

/* 社媒图标：发丝边改半透明白，避免深底上一圈灰边发脏 */
.fi-footer .ft-social a{border-color:rgba(243,243,241,.24);color:#a8aaa9}
.fi-footer .ft-social a:hover{border-color:var(--paper);color:var(--paper)}

/* 页脚 CTA：主按钮在深底上必须反相（墨底墨字 = 不可见） */
.fi-footer .ft-col .btn{background:var(--paper);color:var(--ink)}
.fi-footer .ft-col .btn:hover{background:#fff;color:var(--ink)}

/* 底部条 */
.fi-footer .ft-bot{border-top:1px solid rgba(243,243,241,.16);color:#8b8f95}
.fi-footer .ft-bot a{color:#d9dad8;border-bottom-color:rgba(243,243,241,.28)}
.fi-footer .ft-bot a:hover{border-bottom-color:var(--paper)}

/* 焦点环：--mg-ink(#c2185b) 对 #16181a 只有 3.1:1，深底改用纸色 */
.fi-footer a:focus-visible,.fi-footer button:focus-visible{outline-color:var(--paper)}

/* 窄屏：背景字退小，别在 390 下顶到内容 */
@media (max-width:900px){
  .fi-footer::before{font-size:clamp(96px,22vw,160px);bottom:-.26em}
}

/* ⑪ 背景字微调（渲染后实测）
   桌面 0.055 太淡、读不出是刻意做的肌理 ⇒ 提到 0.07；
   窄屏（390 实测）它正压在 10.5px 的版权条上，把微字底衬亮了一层、
   深灰字反而发糊 ⇒ 窄屏直接不显示：装饰不能以牺牲可读性为代价。 */
.fi-footer::before{color:rgba(243,243,241,.072)}
@media (max-width:900px){
  .fi-footer::before{display:none}
}

/* ⑫ 中和「Lead entry」遗留样式（渲染后实测：第 1 条深色带比第 2 条低 42px）
   根因：上一版按「一主三辅」写的 `.toc .entry:first-of-type{padding:40px 0 44px}`
   特异性 (0,3,0) 高于 `.gallery .entry{padding:0}` (0,2,0) ⇒ 第 1 条多出 40px 上内边距。
   画廊里四条是同级的，不存在「首条更大」，必须同特异性逐条中和（含 h3/p 字号）。
   ⚠ 不加这段会同时出现：第 1 条标题 26px、其余 19px —— 四条不等权，层级读错。 */
.gallery .entry:first-of-type{padding:0}
.gallery .entry:first-of-type h3{font-size:19px;line-height:1.22;margin:8px 0 0}
.gallery .entry:first-of-type p{font-size:13.5px;line-height:1.62;max-width:none;margin:9px 0 0}

/* ⑬ 同一处遗留的第二个属性：gap
   `.toc .entry:first-of-type{gap:32px}`（桌面）与 `@media≤900{gap:18px}` 都是 (0,3,0)，
   高于 `.gallery .entry{gap:0}` (0,2,0) ⇒ 第 1 条的「图 → 深色带」之间被撑开
   32px（1440）/ 18px（768），四条深色带因此对不齐。实测值正好等于这两个 gap。 */
.gallery .entry:first-of-type{gap:0}

/* ⑭ 图区等高 —— 让四条深色带连成**一条连续的黑横带**，顶上 4px CMYK 四段随之
   连成一条印刷色标条（蓝/品红/黄/灰，正好对应四条产品线）。
   渲染对比过两种：① 阶梯式错落（300/268/268/232）读起来像没对齐的手误；
   ② 等高对齐 ⇒ 横带 + 色标条把 4 条线并成一组「色标」，这是印刷厂看惯的语言。
   ⚠ 用 :nth-child(n) 把特异性提到 (0,4,0) 与后面那四条逐卡高度规则同级并排在更后，
     否则 300/268/232 会赢回来。 */
.gallery .entry:nth-child(n) .ph-img{height:272px}

/* ⑮ 图区收紧：272px 高 vs 4:3 源图（1200×900）被列宽限制后实际只占 172px 高
   ⇒ 上下各留 ~50px 纯白，机器读起来变小。收到 212px（内容高 192，正好容下 172）。
   深色带随之上升，仍然四段对齐成一条横带。 */
.gallery .entry:nth-child(n) .ph-img{height:212px}

/* ⑯ 规格行贴底对齐
   四条描述行数不同（第 1 条 3 行、其余 2 行）⇒ 规格行（350–600 mm · …）落在不同高度，
   读起来像没对齐。改法：整组改 stretch（等高），文案块 flex:1，规格行 margin-top:auto
   ⇒ 四条规格行落在同一条基线上，差出来的那一行变成规整的留白。
   ⚠ 这里必须覆盖 ⑨ 的 align-items:start —— 同特异性写在更后。 */
.gallery{align-items:stretch}
.gallery .entry{height:100%}
.gallery .entry .etext{flex:1;display:flex;flex-direction:column}
.gallery .entry .eline{margin-top:auto}

/* ⑰ 规格行的分隔点：从「行首」挪到「行尾」
   实测：`350–600 mm · up to 1,800 mm/s · Camera positioning` 在 250px 列宽下折两行，
   第 2 行以「· Camera positioning」开头 —— 行首圆点会被读成项目符号。
   改为 span 分段 + `:not(:last-child)::after` 输出「不间断空格 + ·」，
   断行只能发生在点之后 ⇒ 点留在行尾，作为续行标记。
   ⚠ 不间断空格（\00a0）是关键：普通空格会让「·」自己掉到下一行行首。 */
.gallery .entry .eline span:not(:last-child)::after{content:"\00a0·"}

/* ⑱ 规格分段不可内部断行
   实测：「up to 1,800 mm/s」在 250px 列宽被拆成「…up to 1,800」+「mm/s · …」，
   单位与数值分家。给每段 nowrap，断行只能落在分隔点之后。
   最长一段是「420 × 480 – 600 × 900 mm」（25 字符 × 约 6.9px ≈ 173px），
   最窄列宽 250px ⇒ 不会溢出。 */
.gallery .entry .eline span{white-space:nowrap}

/* ⑲ 修 ⑰+⑱ 组合出的溢出
   ⑰ 的 `content:"\00a0·"` 以「·」结尾、⑱ 又给每段 nowrap ⇒ 段与段之间**没有任何断行机会**，
   整行被当成一个不可断单元，实测四张卡的末段全部越出卡片右缘。
   ⇒ 在「·」后补一个普通空格，断行点落在这里：
     nbsp 把「·」粘在前一段末尾（不会掉到行首），空格给出行尾断行机会。 */
.gallery .entry .eline span:not(:last-child)::after{content:"\00a0· "}

/* ⑳ 分隔点改用**文字节点**，不用 ::after
   根因：⑰ 的 ::after 是 span 的伪元素，而 ⑱ 给 span 了 nowrap ⇒ 伪元素里那个
   「· + 空格」也被 nowrap 吃掉，段与段之间**依然没有断行机会**（实测三段的
   行内总宽 486px 塞进 301px 容器、全部越界，390 下整页溢出 120px）。
   ⇒ 分隔符放回 HTML 文字节点：`</span>&nbsp;· <span>`
     · 前面的 &nbsp; 让「·」粘住前一段（不会掉到行首）
     · 「·」后面的**普通空格**属于 span 之外，是真正的断行点
   ⇒ ::after 置空，避免与文字节点里的点重复。 */
.gallery .entry .eline span:not(:last-child)::after{content:none}

/* ㉑ 第 1 条的规格行字号被误继承
   ⑫ 里写的 `.gallery .entry:first-of-type p{font-size:13.5px}` 是给**描述段**用的，
   但它同时命中了同为 <p> 的 .eline ⇒ 第 1 条规格行 13.5px、其余 11.5px，
   而且字号一大就多折一行（实测行高 77 vs 48）。规格行必须四条同字号。 */
.gallery .entry:first-of-type .eline{font:500 11.5px/1.6 MM;letter-spacing:.02em}

/* ㉒ 窄屏深色带压扁
   390 实测：标签已退成横排（Roll / Flat），但带子仍是 118px 高 ⇒ 标签下方 60px 纯黑空块。
   窄屏改自适应高度，标签与序号同排、底部对齐。 */
@media (max-width:640px){
  .gallery .entry .vtag{height:auto;min-height:76px;padding:14px 16px}
  .gallery .entry .vtag .n{position:static;margin-right:auto;font-size:22px}
  .gallery .entry .vtag .t{writing-mode:horizontal-tb;text-orientation:mixed;
    margin-left:0;margin-right:0;font-size:17px}
}

/* ㉓ 页脚上边框保留（改成与底色同色，不是删掉）
   实测：`border-top:0` 让**全部 16 个内页页高各少 2px**（4093→4091 等）。
   页高不变是本站的回归判据之一，颜色重设计不该顺手改掉几何。
   ⇒ 边框改回 2.5px，但用 var(--ink) 与页脚同色 ⇒ 视觉上是一条无缝黑边，
     CMYK 色标条（background 在 padding-box 起画）正好落在它下面。
   ⇒ 页高与改版前逐页一致。 */
.fi-footer{border-top:2.5px solid var(--ink)}

/* ㉔ 底条文字提一档
   底条正好压在那行巨大背景字上，底色被抬亮到约 rgb(35,37,39)，
   #8b8f95 在它上面只剩约 4.7:1 —— 卡在临界。提到 #96989a（纯底 6.0:1、压字 4.9:1）。 */
.fi-footer .ft-bot{color:#96989a}

/* ============================================================================
   首页视觉升级 v3：直接借用 Visora 的**瓶面语言**（2026-11-05 用户要求）
   —— 圆角浮卡 / 柔和渐变 / 玻璃模糊 / 照片斜置叠压 / 巨大幽灵字。
   品牌基底不变：像素字（PJersey/Doto）、等宽微标（MM）、CMYK 色码、直角编号。
   基底不同 ⇒ 同一套瓶面语言落地后仍是我们的东西，不会撞脸。

   ⚠ 全部规则都挂在 `body.home` 下 —— 页头页脚与组件 CSS 是 19 页共享的，
     不加作用域会波及产品页。index.html 的 <body> 已加 class="home"。
   ============================================================================ */

/* ---- 1. 底色：纸底 + 极淡 CMYK 光斑（Visora 的页面浮在柔光上的感觉） ----
   ⚠ 用 z-index:-1 的 fixed 伪元素，**不能**给 main/header 加 z-index ——
     一加就生成层叠上下文，.fi-header 的 position:sticky 会失效。 */
body.home::before{content:"";position:fixed;inset:0;z-index:-1;pointer-events:none;
  background:
    radial-gradient(760px 460px at 8% 4%,  rgba(0,150,199,.13), transparent 62%),
    radial-gradient(680px 440px at 92% 12%, rgba(225,29,116,.11), transparent 62%),
    radial-gradient(820px 520px at 66% 46%, rgba(242,183,5,.10), transparent 66%),
    radial-gradient(700px 460px at 24% 82%, rgba(0,150,199,.09), transparent 64%)}

/* ---- 2. 玻璃页头 ---- */
body.home .fi-header{background:rgba(243,243,241,.70);
  -webkit-backdrop-filter:blur(18px) saturate(150%);backdrop-filter:blur(18px) saturate(150%);
  border-bottom-color:rgba(22,24,26,.10)}

/* ---- 3. 首屏图：内缩 + 30px 圆角 + 大阴影（从贴边横幅变成浮起的一张画） ---- */
body.home .hero .bleed{width:auto;margin:46px 24px 0;border:0;border-radius:30px;
  height:min(54vh,540px);
  box-shadow:0 40px 80px -34px rgba(22,24,26,.45), 0 4px 14px rgba(22,24,26,.06)}
body.home .hero .bleed::after{display:none}   /* 圆角代替底部渐隐 */
body.home .hero .bleed .reg.r1{left:26px}
body.home .hero .bleed .reg.r2{right:26px}
body.home .hero .bleed .reg.r1,
body.home .hero .bleed .reg.r2{top:auto;bottom:22px}
body.home .hero .bleed .chip{left:24px;bottom:24px;border-radius:999px;padding:11px 18px}

/* ---- 4. Equipment lines：四行列表 → 斜置的浮卡 ----
   每张卡：白面 + 24px 圆角 + 柔和投影 + 轻微旋转；悬停时转正并抬起。
   图区用 CMYK 淡渐变（每卡一色），产品图的纯白画布经 multiply 融进渐变里，
   于是「白底产品图」在马卡龙色的卡面上变成一张有底色的产品照。 */
body.home .gallery{position:relative;grid-template-columns:repeat(4,1fr);gap:24px;
  align-items:start;padding:44px 0 10px}
/* 幽灵字：压在卡片后面的一行巨大像素字 */
body.home .gallery::before{content:"LINES";position:absolute;left:-1.5%;top:-6px;
  font-family:'PJersey',SG;font-weight:400;font-size:clamp(110px,15vw,228px);
  line-height:.72;letter-spacing:-.01em;color:rgba(22,24,26,.055);
  white-space:nowrap;pointer-events:none;user-select:none}
body.home .gallery>*{position:relative;z-index:1}

body.home .gallery .entry{position:relative;height:auto;background:#fff;border-radius:24px;
  overflow:hidden;padding:0;gap:0;
  box-shadow:0 28px 56px -24px rgba(22,24,26,.34), 0 3px 10px rgba(22,24,26,.05);
  transition:transform .5s cubic-bezier(.2,.7,.2,1), box-shadow .5s ease}
/* 斜置：四条不同角度与高度，像被随手摊在桌上 */
body.home .gallery .entry:nth-child(1){transform:rotate(-2.4deg) translateY(20px)}
body.home .gallery .entry:nth-child(2){transform:rotate(1.3deg)  translateY(0)}
body.home .gallery .entry:nth-child(3){transform:rotate(-1.1deg) translateY(10px)}
body.home .gallery .entry:nth-child(4){transform:rotate(2.5deg)  translateY(28px)}
body.home .gallery .entry:hover{transform:rotate(0deg) translateY(-8px);
  box-shadow:0 44px 76px -26px rgba(22,24,26,.46), 0 4px 14px rgba(22,24,26,.07)}

/* 图区：CMYK 淡渐变打底 */
body.home .gallery .entry .ph-img{height:186px;border-radius:24px 24px 0 0;
  padding:18px 14px 4px;background:linear-gradient(160deg,#eaf6fa,#fff 72%)}
body.home .gallery .entry:nth-child(1) .ph-img{background:linear-gradient(160deg,#dff0f8,#fff 72%)}
body.home .gallery .entry:nth-child(2) .ph-img{background:linear-gradient(160deg,#fbe4ee,#fff 72%)}
body.home .gallery .entry:nth-child(3) .ph-img{background:linear-gradient(160deg,#fdf1d6,#fff 72%)}
body.home .gallery .entry:nth-child(4) .ph-img{background:linear-gradient(160deg,#eceeef,#fff 72%)}
body.home .gallery .entry:nth-child(n) .ph-img{height:186px}

/* 序号与竖排词改成压在图上的一对小胶囊 */
body.home .gallery .entry .vtag{position:absolute;top:0;left:0;right:0;height:186px;
  background:none;height:auto;min-height:0;padding:12px;
  display:flex;align-items:flex-start;justify-content:space-between;pointer-events:none}
body.home .gallery .entry .vtag .n{position:static;order:1;
  display:inline-flex;align-items:center;gap:7px;
  background:rgba(255,255,255,.86);-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);
  color:var(--ink);border-radius:999px;padding:6px 12px 6px 10px;
  font-family:'PDoto',SG;font-weight:800;font-size:15px;line-height:1}
body.home .gallery .entry .vtag .n::before{content:"";width:7px;height:7px;border-radius:50%;
  background:#8b8f95;flex:none}
body.home .gallery .entry:nth-child(1) .vtag .n::before{background:var(--c1)}
body.home .gallery .entry:nth-child(2) .vtag .n::before{background:var(--c2)}
body.home .gallery .entry:nth-child(3) .vtag .n::before{background:var(--c3)}
body.home .gallery .entry .vtag .t{order:2;writing-mode:vertical-rl;text-orientation:upright;
  margin:0;font-family:'PJersey',SG;font-size:12.5px;line-height:1;letter-spacing:.06em;
  color:var(--paper);background:rgba(22,24,26,.82);
  -webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);
  border-radius:999px;padding:12px 6px}

/* 卡内文案：内边距 + 底部齐平 */
body.home .gallery .entry .etext{padding:16px 18px 20px}
body.home .gallery .entry .eline{border-top-color:rgba(22,24,26,.10)}

/* 规格行改「三行栈」
   原先是内联 + 「&nbsp;· 」分隔：225px 卡宽下三条参数量折出来的行数各不相同
   （实测 eline 高 52 / 53 / 75 / 76px）⇒ 四张卡的文字块底部齐平、顶部参差，
   正文短的那几张就露出一大片空白。
   改成列布局 + 去掉分隔点后，每卡的规格行恒为 3 行（三个参数各占一行），
   与「正文统一 3 行 + 标题统一 1 行」配合 ⇒ 四张卡逐像素等高。
   ⚠ 分隔点是 HTML 文字节点（不是 ::after），所以 index.html 里已同步删掉。
   ⚠ 顺带把 `margin-top:auto` 改回固定 12px：行数恒定后不再需要「压到底」，
     而 auto 外边距在 `height:100%` 的网格项里会让两行的卡高差 9px（实测 392 / 383）。 */
body.home .gallery .entry .eline{display:flex;flex-direction:column;margin-top:12px}

/* 卡片式的 CMYK 顶部色条不再需要（已被渐变与色点承担） */
body.home .gallery .entry .vtag::before{display:none}

/* ---- 5. 照片条 → 圆角浮卡 ---- */
body.home .pband{background:transparent;gap:18px}
body.home .pband figure{background:#fff;border-radius:22px;overflow:hidden;
  box-shadow:0 26px 52px -24px rgba(22,24,26,.30), 0 3px 10px rgba(22,24,26,.05)}
body.home .pband .shot{border-radius:0}
body.home .pband figcaption{padding:12px 18px 15px}

/* ---- 6. 工厂四个数字 → 一块玻璃面板 ---- */
body.home .hair.facts{background:rgba(255,255,255,.58);
  -webkit-backdrop-filter:blur(18px) saturate(140%);backdrop-filter:blur(18px) saturate(140%);
  gap:0;border-radius:22px;overflow:hidden;
  box-shadow:0 28px 56px -26px rgba(22,24,26,.26), 0 2px 8px rgba(22,24,26,.04)}
body.home .hair.facts>*{border-right:1px solid rgba(22,24,26,.08)}
body.home .hair.facts>*:last-child{border-right:0}

/* ---- 7. 按钮：胶囊已有，补一层柔光投影 ---- */
body.home .btn{box-shadow:0 12px 26px -12px rgba(22,24,26,.38)}
body.home .btn.solid{box-shadow:0 14px 30px -12px rgba(22,24,26,.55)}

/* ---- 8. 窄屏：卡片取消斜置（窄屏斜角会切到相邻卡） ---- */
@media (max-width:1080px){
  body.home .gallery .entry{transform:none}
  body.home .gallery .entry:hover{transform:none}
  body.home .gallery{padding-top:30px}
}
@media (max-width:900px){
  body.home .hero .bleed{margin:34px 16px 0;border-radius:22px;height:min(48vh,420px)}
  body.home .gallery::before{font-size:clamp(84px,20vw,150px);top:0}
  body.home .gallery .entry .ph-img,
  body.home .gallery .entry:nth-child(n) .ph-img,
  body.home .gallery .entry .vtag{height:200px}
}

/* ================= v3 收口（渲染后逐条修正） =================
   ① 四张卡等高：`height:auto` 让四条底部参差得像塌了，改成 stretch + 100%，
      斜置角度保留 —— 参考里的照片墙是等高的，斜置只是「摊开」，不是「错落」。
   ② 幽灵字位置：原来 top:-6px 被节标题压住、只剩一条灰边，读不出是个字。
      改到底部居中、字号加大，让它从卡片缝隙间露出来（这才是参考里的用法）。
   ③ 分隔线减重：2.5px 纯黑横贯是印刷语汇里最硬的一笔，和圆角浮卡打架。
      首页改 1px 半透明墨色。
   ④ What we cut 两图改不等宽（1.35fr / 1fr）：参考里的照片墙宽度是变的。 */
body.home .gallery{align-items:stretch}
body.home .gallery .entry{height:100%}
body.home .gallery::before{content:"LINES";left:50%;top:auto;bottom:-34px;
  transform:translateX(-50%);font-size:clamp(120px,17vw,260px);line-height:.7;
  color:rgba(22,24,26,.05)}
body.home .sh,body.home .toc-head{border-bottom-width:1px;
  border-bottom-color:rgba(22,24,26,.16)}
body.home .pband.apps{grid-template-columns:1.35fr 1fr}

/* ---- 9. 其余细线网格也变成圆角玻璃面板 ----
   `.hair` 原本靠 gap:1px + 底色画发丝线（90° 直角）。首页改成：
   把「线」的颜色变成外层面板底色（半透明墨），格子本身是半透明白 + 轻微模糊
   ⇒ 圆角裁切后，发丝线自然变成圆角面板里的分隔线，和浮卡同一套瓶面语言。
   ⚠ .hair.facts 我在第 6 条里单独写过 gap:0 + border-right，
     这里用同特异性重写把它拉回来，否则两种分隔线会同时出现。 */
body.home .hair,
body.home .hair.facts{background:rgba(22,24,26,.10);gap:1px;border-radius:20px;
  overflow:hidden;box-shadow:0 22px 44px -26px rgba(22,24,26,.22),
  0 2px 6px rgba(22,24,26,.04)}
body.home .hair>*{background:rgba(255,255,255,.62);
  -webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px)}
body.home .hair.facts>*{border-right:0}

/* ---- 10. 后半部那张全幅图（.bleed.ship）也要圆角浮起 ----
   它是独立于 hero 的第二个 .bleed（工厂测试间），此前仍是硬边矩形，
   与上面的圆角浮卡并置时像两张不同时代的图。 */
body.home .bleed.ship{margin:0 24px;border:0;border-radius:30px;
  box-shadow:0 40px 80px -34px rgba(22,24,26,.40), 0 4px 14px rgba(22,24,26,.06)}
body.home .bleed.ship .reg.r1{left:26px;top:auto;bottom:22px}
body.home .bleed.ship .reg.r2{right:26px;bottom:22px}
body.home .bleed.ship .chip{left:24px;bottom:24px;border-radius:999px;padding:11px 18px}
@media (max-width:900px){
  body.home .bleed.ship{margin:0 16px;border-radius:22px}
}

/* ---- 11. 页脚也做成一块浮起的暗色卡 ----
   深色底直接顶到视口两边时，与上面柔光渐变之间是一条硬切线。
   内缩 24px + 28px 圆角后，它变成压在页面底部的一块暗卡（参考里的深色区也是块）。
   ⚠ 只作用于首页；其余 18 页的页脚仍是通栏（那几页没有柔光底，不需要收边）。
   ⚠ margin 会改变首页页高，这是设计意图，不是回归。 */
body.home .fi-footer{margin:0 24px 28px;border-top:0;border-radius:28px}
@media (max-width:900px){
  body.home .fi-footer{margin:0 16px 20px;border-radius:22px}
}

/* ---- 12. 窄屏列数必须跟着退 ----
   `body.home .gallery{repeat(4,1fr)}` 特异性高于原有的 `@media≤1080{.gallery{1fr 1fr}}`，
   只写 transform:none 是不够的 —— 390 实测卡片被压到 116px 宽、规格段的 nowrap
   分段直接越界（整页溢出 2px）。列数要和旋转一起退。 */
@media (max-width:1080px){
  body.home .gallery{grid-template-columns:1fr 1fr}
}
@media (max-width:640px){
  body.home .gallery{grid-template-columns:1fr}
  /* 单列时卡片不再需要那么高的图区，也取消椭圆投影的夸张尺度 */
  body.home .gallery .entry .ph-img,
  body.home .gallery .entry:nth-child(n) .ph-img,
  body.home .gallery .entry .vtag{height:230px}
}

/* ---- 13. 幽灵字要露得出来 ----
   实测：卡片紧贴节标题下方的 44px 留白，190px 高的字只有顶部一条边可见，
   读起来像渲染残影而不是「一行巨大的字」。
   ⇒ 给卡片上方留出 132px（字的上半身在留白里完整可见，下半身被卡片压住），
     这才是参考里的用法：字从卡片后面长出来。
   ⚠ 窄屏卡片不斜置、留白也该收，否则只是白白拉长页面。 */
body.home .gallery{padding-top:132px}
body.home .gallery::before{top:-14px;bottom:auto;font-size:clamp(110px,14vw,206px);
  line-height:.74;color:rgba(22,24,26,.06)}
@media (max-width:1080px){
  body.home .gallery{padding-top:96px}
  body.home .gallery::before{top:-6px;font-size:clamp(88px,17vw,140px)}
}
@media (max-width:640px){
  body.home .gallery{padding-top:74px}
  body.home .gallery::before{font-size:clamp(64px,19vw,96px);top:0}
}

/* ---- 14. 去掉紧贴卡片的残留横线 ----
   用户看图指出：工厂三图上下各有一条线紧紧贴着这组图，很难看。
   根因：`.pband` 自己带 `border-top:1.5px solid var(--ink)` 与
   `border-bottom:1.5px solid var(--line2)` —— 我 v3 只取消了它的底色与 1px 缝隙
   （把它变成圆角白卡），却把这两条边线留下了。
   同类问题一并查了：`.hair` 全家（flow / svc / facts）也都有 top/bottom 边线，
   面板已经圆角化，这些线就是「紧贴面板的平行线」。
   ⇒ 首页统一去掉；分隔交给圆角 + 投影 + 留白，不靠线。 */
body.home .pband,
body.home .hair,
body.home .hair.facts,
body.home .hair.flow,
body.home .hair.svc{border-top:0;border-bottom:0}

/* ---- 15. 剩下的结构线统一降为发丝线 ----
   首页现在只有一处还留着纯黑 1px 长横线：.fnote / .oem / .inq / .oemspec
   （文字块之间的分隔）。它们不贴着卡片，但和已经柔化的节标题线、玻璃面板
   并置时，深黑那一条明显更硬。
   ⇒ 统一成和节标题一样的 rgba(22,24,26,.16)，全页只保留一种「线」的语言。 */
body.home .fnote,
body.home .oem,
body.home .inq,
body.home .spec.oemspec{border-color:rgba(22,24,26,.16)}

/* ---- 16. .fnote 那条线直接压在工厂三图上方 20px 处 ——
   变淡之后仍然读作「贴着照片组的一条线」。这块的分隔已经由照片本身承担，
   线是多余的 ⇒ 首页去掉，靠留白分段。 */
body.home .fnote{border-bottom:0}

/* ---- 17. 还有三处「线贴在卡上」，这次用几何量出来而不是靠眼看 ----
   扫描口径：找所有带下边框的横向元素，量它到「下方最近一张图/卡」的垂直间距，
   间距 <56px 即判定为「贴着」。命中三处，全是 0px：
     ① .sh  → .hair.flow   节标题线正好落在玻璃面板的顶边上
     ② .sh  → .hair.facts  同上
     ③ .oem → .bleed.ship  品牌块的下边框正压在大图顶上
   ③ 的根因是我在 v3 写 `body.home .bleed.ship{margin:0 24px}` ——
   `margin` 简写把原有的 `margin-top:64px` 一起清零了，图被顶到线上。
   ⇒ 恢复上间距，并给玻璃面板补足与标题线之间的空气。 */
body.home .bleed.ship{margin:44px 24px 0}
body.home .hair{margin-top:40px}
@media (max-width:900px){
  body.home .bleed.ship{margin:32px 16px 0}
  body.home .hair{margin-top:30px}
}

/* ---- 18. .oem 那条线直接删掉，不留 40px 的「勉强」间距 ----
   它下面是整幅实验室大图，两者之间已经由 44px 留白 + 圆角投影分隔，
   线在这种位置只会被读成「贴在图上方的一条线」—— 用户已经就同一现象提过两次。
   判据：**线的下方紧接图片/卡片时，优先删线而不是调间距**。 */
body.home .oem{border-bottom:0}

/* ============================================================================
   产品页主图：接上首页那套浮卡语言（2026-11-05 用户要求）
   `.phead .shot` 是每个系列页 / 关于页 / 应用页 / 支持页的主图组件，
   `.srow .pic` 是 machines 总览页每行的产品缩略图。
   原样式是「1px 硬边框 + 直角 + 左下角带边框的标签条」，与首页圆角浮卡并置是两个时代。

   ⚠ 几何：只动 border-radius / border-color / background / box-shadow，
     **不动 width / aspect-ratio / border-width** ⇒ 页高与改版前逐页一致
     （圆角与投影都不参与布局）。标签 .cap 是绝对定位，也不影响高度。
   ⚠ 这两个类是多页共用组件，改的是「全部产品页的主图」，不是只改一页。 */
.phead .shot{border-radius:24px;overflow:hidden;
  border-color:rgba(22,24,26,.10);
  background:linear-gradient(160deg,#eef5f8,#fff 72%);
  box-shadow:0 30px 62px -28px rgba(22,24,26,.32), 0 3px 10px rgba(22,24,26,.05)}
/* 标签条原本贴着左下角、自带 top/right 两条边框 ⇒ 圆角容器里会露出方角。
   改成压在图上的一颗玻璃胶囊。 */
.phead .shot .cap{left:14px;bottom:14px;border:0;border-radius:999px;
  padding:9px 15px;background:rgba(255,255,255,.88);
  -webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);
  box-shadow:0 8px 18px -10px rgba(22,24,26,.30)}

/* machines 总览：每行左侧的产品缩略图 */
.srow .pic{border-radius:18px;overflow:hidden;
  border-color:rgba(22,24,26,.10);
  background:linear-gradient(160deg,#eef5f8,#fff 72%);
  box-shadow:0 18px 36px -20px rgba(22,24,26,.26), 0 2px 6px rgba(22,24,26,.04)}

@media (max-width:720px){
  .phead .shot{border-radius:18px}
  .srow .pic{border-radius:14px}
}

/* ---- 产品页图集与相关链接：整条圆角浮起 ----
   `.gal`（图集）和 `.related`（同系列其他型号）都是「1px 细缝 + 上下发丝线」的拼版条，
   直角 + 硬边，和刚圆角化的主图并排是两个系统。
   处理：**外框圆角 + 浮起，内部 1px 细缝保留** —— 细缝是印刷拼版语言，
   不是「贴着图片的孤立线」，整条读成一张拼版卡才对。

   ⚠ 几何不变：上下边框不删、只把颜色设为 transparent。
     删掉 1px 边框会让每个产品页少 2px 页高（本仓库已因此返工过一次）。 */
.gal,.related{border-color:transparent;border-radius:20px;overflow:hidden;
  box-shadow:0 26px 52px -26px rgba(22,24,26,.28), 0 3px 10px rgba(22,24,26,.04)}
@media (max-width:720px){
  .gal,.related{border-radius:16px}
}

/* ---- 产品页：图集 / 相关链接与节标题线之间补足空气 ----
   `.gal` 与 `.related` 原本 `margin-top:26px`，而 `.sh` 的底边线正好压在上面 26px 处 ——
   卡片现在带投影浮起，26px 就读成「线贴着卡片」，与首页同一类问题。
   ⇒ 与首页面板同一口径，放到 40px。
   ⚠ 这会改变产品页页高（每个这样的块 +14px），是设计意图，不是回归；
     改前页高逐页记录在提交说明里。 */
.gal,.related{margin-top:40px}
@media (max-width:720px){
  .gal,.related{margin-top:30px}
}

/* ---- 产品页图注：圆角化后需要内缩 ----
   `.gal figcaption` 原本 `padding:9px 0 12px`，文字与格子边缘齐平 ——
   直角时是「拼版紧排」，改成圆角后文字会顶到圆角上。
   ⇒ 左右各让 16px，与卡片边缘留出视觉呼吸。
   ⚠ 图注都是单行短句，加内边距不会让它折行 ⇒ 页高不变（已实测）。 */
.gal figcaption{padding:9px 16px 12px}

/* ============================================================================
   首页四张设备卡：整卡可点（2026-11-05 用户指出「没有任何交互，连跳转都没有」）
   ---------------------------------------------------------------------------
   做法：卡内放一层覆盖整卡的 <a class="entry-link">，而不是把 <article> 包进 <a>。
   理由：① 保留 article 语义；② 卡内将来若加真实按钮，包在 <a> 里会成为
        「a 里套可交互元素」的非法嵌套；③ 链接文字由 aria-label 提供，
        屏幕阅读器不会把整张卡的长文案当链接名念一遍。

   链接指向 machines 页对应的产品线锚点（#label / #roll / #flat / #plotter），
   与页脚现有的四个入口一致 —— 同一处事实只写一次口径。
   ============================================================================ */
body.home .gallery .entry{cursor:pointer}
body.home .gallery .entry .entry-link{position:absolute;inset:0;z-index:3;
  border-radius:inherit}
/* 键盘焦点：覆盖层自己就是一个和卡片同形的焦点环（继承圆角，不会凸出方角） */
body.home .gallery .entry .entry-link:focus-visible{outline:2px solid var(--mg-ink);
  outline-offset:4px}

/* 可点的提示：hover / 聚焦时，小标后面浮出一个箭头 ——
   平时不占位（opacity 0，仍占宽度），不会让文字跳动。 */
body.home .gallery .entry .code::after{content:"\00a0→";opacity:0;
  transition:opacity .25s ease}
body.home .gallery .entry:hover .code::after,
body.home .gallery .entry:has(.entry-link:focus-visible) .code::after{opacity:1}

/* 已有的 hover 抬升 + 投影加强保持不变；补一条：悬停时小标转品牌洋红，
   与「这是入口」的语义对齐（.code 默认已是 var(--mg-ink)，故改用下划线替代色变） */
body.home .gallery .entry:hover h3{text-decoration:underline;
  text-decoration-thickness:2px;text-underline-offset:5px}

/* ---- 交互提示收口（渲染后调整）----
   ① 去掉 hover 时给 h3 加的下划线：像素字体会把下划线画成一条粗横杠，
      和「分隔线」混淆，反而不像链接。反馈交给「抬起 + 小标箭头」。
   ② 箭头改成常驻低透明度（0.32），hover / 聚焦升到 1：
      触屏没有 hover，只在悬停时出现等于没提示 —— 用户这次的问题正是
      「完全看不出能点」。 */
body.home .gallery .entry:hover h3{text-decoration:none}
body.home .gallery .entry .code::after{opacity:.32}

/* ============================================================================
   锚点落位：别被吸顶页头吃掉
   ---------------------------------------------------------------------------
   实测：machines.html 的 #label / #roll / #flat / #plotter 跳过去后目标顶边
   在 0–3px，而吸顶页头高 65px ⇒ 小节标题整个藏在页头下面。
   首页四张卡现在都指到这四个锚点，落位错就等于「点了没反应」。

   做法：给所有带 id 的元素一个统一的 scroll-margin-top。
   ⚠ 必须**大于页头高**并留一点呼吸：65 + 19 = 84px。
   ⚠ 已存在 `.specblock{scroll-margin-top:96px}`（型号按钮条的落点），
     那是更精确的定位，特异性更高，不会被这条覆盖。 */
[id]{scroll-margin-top:84px}
@media (max-width:720px){[id]{scroll-margin-top:72px}}

/* ⚠ 更正上一条注释里的一个错判：`[id]` 是属性选择器，特异性 (0,1,0)，
   与 `.specblock` 同类，**并不比它高**。这条写在后面，反而会把型号按钮条的
   96px 落位覆盖成 84px。⇒ 显式再声明一次，用来源顺序把它拿回来。 */
.specblock{scroll-margin-top:96px}

/* ---- 应用照片改成链接后的收尾 ----
   `.shot` 原来是 <div>（块级），换成 <a> 后默认是行内元素，高度会塌掉 ⇒ 补 display:block。
   同时给一点悬停反馈（图轻微放大）与键盘焦点环。 */
.pband a.shot{display:block;position:relative;overflow:hidden}
.pband a.shot img{transition:transform .55s cubic-bezier(.2,.7,.2,1)}
.pband a.shot:hover img{transform:scale(1.035)}
.pband a.shot:focus-visible{outline:2px solid var(--mg-ink);outline-offset:3px}
/* 悬停时图注标题转墨色，作为「这张图可点」的第二重提示（原本就是墨色，故用下划线） */
.pband figure:hover figcaption b{text-decoration:underline;
  text-decoration-thickness:1.5px;text-underline-offset:3px}

/* ⚠ 触屏兜底：本仓库既有约定是「:hover 必须包在 (hover:hover) and (pointer:fine) 里」，
   否则触屏 tap 会把 hover 态粘住。上面几条是后加的、当时漏了这层包裹，
   这里用 (hover:none) 反向中和 —— 不重写原规则，只在不支持 hover 的设备上取消效果。
   （卡片抬起那条不中和：卡片本身是链接，tap 会直接跳转，粘不住。） */
@media (hover:none){
  .pband a.shot:hover img{transform:none}
  .pband figure:hover figcaption b{text-decoration:none}
  body.home .gallery .entry:hover .code::after{opacity:.32}
}

/* ============================================================================
   产品页 datasheet：下移 + 宽屏三栏
   ---------------------------------------------------------------------------
   用户指出两件事：① datasheet 占用太多空间；② 这类内容应当下置。
   实测（zd350，1440 宽）：datasheet 一节 1654px，占整页 4659px 的 35%，
   而且就排在首屏正下方 —— 买家还没看到机器照片，先撞上一屏规格表。
      · 位置：整节移到 gallery（In detail）之后、询价条之前
      · 体积：两栏 1536px → 三栏 862px（−44%），代价是 57 行里有 10 行折行
        （一行最多 3 行，都是 OS / 软件兼容这类长串），可接受
   ⚠ 三栏只在 ≥1280 开：1080 内容宽减去 2×48 间距后每栏仅 328px，
     长值会折得更碎，不如保持两栏。
   ⚠ 下移是改 HTML（9 个系列页），不是改 CSS —— 见提交说明。 */
@media (min-width:1280px){
  .specwrap{columns:3;column-gap:48px}
}

/* ============================================================================
   全站视觉层 v3（2026-11-05 用户：「整体全部页面的 UI 都做类似调整」）
   ---------------------------------------------------------------------------
   页面级规则原来都挂在 `body.home` 下。这一层把它们提到 `body`，
   于是 about / applications / contact / support / machines / 法务页 / 系列页
   全部拿到同一套：柔光底、玻璃页头、圆角浮卡、发丝线、圆角暗卡页脚。

   ⚠ 与 `body.home ...` 同名的规则不动 —— 它们在首页特异性更高、取值相同，
     留着是为了让首页那些只在首页成立的写法（gallery / hero / oem）保持就地。
   ⚠ 圆角、投影、模糊都不参与布局；**页脚改成圆角卡会 +28px 页高**（下边距），
     这是设计意图，逐页记录在提交说明里。
   ============================================================================ */

/* 1. 柔光底 */
body::before{content:"";position:fixed;inset:0;z-index:-1;pointer-events:none;
  background:
    radial-gradient(760px 460px at 8% 4%,  rgba(0,150,199,.13), transparent 62%),
    radial-gradient(680px 440px at 92% 12%, rgba(225,29,116,.11), transparent 62%),
    radial-gradient(820px 520px at 66% 46%, rgba(242,183,5,.10), transparent 66%),
    radial-gradient(700px 460px at 24% 82%, rgba(0,150,199,.09), transparent 64%)}

/* 2. 玻璃页头 */
body .fi-header{background:rgba(243,243,241,.70);
  -webkit-backdrop-filter:blur(18px) saturate(150%);backdrop-filter:blur(18px) saturate(150%);
  border-bottom-color:rgba(22,24,26,.10)}

/* 3. 节标题线降为发丝线 */
body .sh,body .toc-head{border-bottom-width:1px;border-bottom-color:rgba(22,24,26,.16)}

/* 4. 细线网格 → 圆角玻璃面板（about / applications / support 都在用 .hair） */
body .hair,body .hair.facts{background:rgba(22,24,26,.10);gap:1px;border-radius:20px;
  overflow:hidden;border-top:0;border-bottom:0;
  box-shadow:0 22px 44px -26px rgba(22,24,26,.22), 0 2px 6px rgba(22,24,26,.04)}
body .hair>*{background:rgba(255,255,255,.62);
  -webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px)}
body .hair.facts>*{border-right:0}
/* 与节标题线之间留空气（同首页口径） */
body .hair{margin-top:40px}

/* 5. 照片带 → 圆角浮卡（about / applications） */
body .pband{background:transparent;gap:18px;border-top:0;border-bottom:0}
body .pband figure{background:#fff;border-radius:22px;overflow:hidden;
  box-shadow:0 26px 52px -24px rgba(22,24,26,.30), 0 3px 10px rgba(22,24,26,.05)}
body .pband figcaption{padding:12px 18px 15px}

/* 6. 产品页首屏那三格数字（.hl）→ 玻璃面板 */
body .hl{border-radius:16px;overflow:hidden;border-color:rgba(22,24,26,.10);
  background:rgba(22,24,26,.10);
  -webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px)}
body .hl>div{background:rgba(255,255,255,.62)}

/* 7. 按钮柔光投影 */
body .btn{box-shadow:0 12px 26px -12px rgba(22,24,26,.38)}
body .btn.solid{box-shadow:0 14px 30px -12px rgba(22,24,26,.55)}

/* 8. 页脚 → 压在底部的圆角暗卡（首页已有，这里覆盖其余页） */
body .fi-footer{margin:0 24px 28px;border-top:0;border-radius:28px}

@media (max-width:900px){
  body .fi-footer{margin:0 16px 20px;border-radius:22px}
  body .hair{margin-top:30px}
  body .hl{border-radius:12px}
}

/* ---- 圆角化的连带义务：原本「贴边」的文字要让边 ----
   `.hair.apps>*` 的内边距是 `22px 0 22px 24px` —— **右边距为 0**，
   直角面板时右对齐的标签贴边是刻意的紧排；改成 20px 圆角后，
   标签直接压在弧线上（applications / about 两页都中招）。
   ⇒ 右补 24px，与左对称。 */
.hair.apps>*{padding-right:24px}
@media (max-width:720px){
  .hair.apps>*{padding-right:20px}
}

/* ---- machines 总览页两处补齐 ----
   ① `.grp .hd` 的分组线仍是 2.5px 纯黑（我只降了 .sh / .toc-head）——
      同一页里两种线语言。
   ② `.srow .go`（VIEW SERIES）是直角描边小方块，和全站的胶囊按钮不一致。 */
body .grp .hd{border-bottom-width:1px;border-bottom-color:rgba(22,24,26,.16)}
body .srow .go{border-radius:999px;border-color:rgba(22,24,26,.18);
  box-shadow:0 8px 18px -12px rgba(22,24,26,.34);
  transition:background .18s ease,color .18s ease,border-color .18s ease}
@media (hover:hover) and (pointer:fine){
  body .srow .go:hover{border-color:var(--ink);background:var(--ink);color:var(--paper)}
}

/* ⚠ 三栏只在「≥3 个规格块」时开 —— 实测教训
   support 页有 5 处 .specwrap，每处只有 2 个 specblock：
   `.specblock{break-inside:avoid}` + 均衡分栏下，块被推到下一栏，
   整节反而**变高**（+55 ~ +92）。三栏只有在块数够多、能均匀分摊时才省高度。
   ⇒ 用 :has() 判块数，而不是按视口一刀切。 */
@media (min-width:1280px){
  .specwrap{columns:2}
  .specwrap:has(> .specblock:nth-child(3)){columns:3;column-gap:48px}
}

/* ---- 型号按钮条（.mp-chip）也改成胶囊 ----
   全站按钮语言已经是胶囊（.btn），只有首屏这三颗型号码还是直角描边方块。
   只改圆角与描边色，不动尺寸 ⇒ 不影响排版。 */
body .mp-chip{border-radius:999px;border-color:rgba(22,24,26,.18);
  box-shadow:0 6px 14px -10px rgba(22,24,26,.30)}

/* ============ 产品页：Overview / Datasheet 切换 ============
   动机：数据表一节单独占 808–1280px（19–30 行 × 2–3 栏），把 CTA 和下面
   的「同系列其它机型」推得很远；而它又不是每个人都看。
   ⇒ 介绍与数据表共用同一个槽位，默认显示介绍，客户自己点开数据表。

   ⚠ 无 JS 时 .tablist 隐藏、两个面板正常竖排 —— 也就是改动前的阅读顺序。
     所有「隐藏面板」的规则都挂在 [data-ready] 上，data-ready 只由 site.js 加，
     所以脚本失败 / 被拦时页面自动退回旧行为，不会出现「数据表看不见」。
   ⚠ 不用 CSS :target 做切换：型号按钮（#zd350-plus）本身就是 :target，
     两套 :target 会互相打架（点到型号就会被判定成「面板非当前」而收起）。 */
.ptabs{margin-top:64px;scroll-margin-top:96px}
.ptabs .tablist{display:flex;flex-wrap:wrap;gap:10px;margin:0 0 26px}
.ptabs .tabbtn{appearance:none;-webkit-appearance:none;
  background:var(--paper);color:var(--dim);cursor:pointer;
  border:1px solid rgba(22,24,26,.18);border-radius:999px;
  padding:12px 20px;font:500 11px/1 MM;letter-spacing:.14em;text-transform:uppercase;
  box-shadow:0 6px 14px -10px rgba(22,24,26,.30);
  transition:background .16s ease,color .16s ease,border-color .16s ease}
.ptabs .tabbtn:hover{color:var(--ink);border-color:rgba(22,24,26,.34)}
.ptabs .tabbtn[aria-selected="true"]{background:var(--ink);border-color:var(--ink);color:var(--paper)}
.ptabs .tabbtn:focus-visible{outline:2px solid var(--mg);outline-offset:3px}
.ptabs .tabpanel .sh{margin-top:0}
.ptabs .tabpanel[hidden]{display:none}
/* 面板本身也可能被深链命中（#fit / #specification），让开吸顶页头 */
.ptabs .tabpanel{scroll-margin-top:96px}
.ptabs:not([data-ready]) .tablist{display:none}
.ptabs:not([data-ready]) .tabpanel + .tabpanel{margin-top:60px}
