@charset "UTF-8";
/* ============================================================
   全局
   ============================================================ */
:root{
  --navy:#08131f;--navy2:#0e2136;--navy3:#14304a;--steel:#2d4a6b;
  --accent:#ff7a18;--accent2:#ffb15c;--accent3:#fff5ec;
  --line:#e4eaf1;--text:#152432;--muted:#6b7c90;--muted2:#93a5b8;
  --bg:#f5f8fb;--white:#fff;
  --r:14px;--r-lg:18px;
  --shadow:0 4px 22px rgba(8,19,31,.07);
  --shadow-lg:0 20px 54px rgba(8,19,31,.15);
  --max:1260px;
  --ease:cubic-bezier(.22,1,.36,1);
  /* 顶部条（电话/社交/国别）的实际高度：导航栏 sticky 时要用它做 top 偏移。
     这里给的是**静态兜底值**；真实高度由 site.js 的 syncTopbarHeight() 量出来覆盖
     （顶栏在窄屏/长语言下会变成两行，写死一定会错位）。 */
  --topbar-h:48px;
}
@media (max-width:680px){ :root{--topbar-h:58px} }
@media (max-width:560px){ :root{--topbar-h:54px} }
*{margin:0;padding:0;box-sizing:border-box}
/* 锚点跳转要避开**两条**常驻栏（顶部条 + 主导航），否则跳过去的标题会被压在栏下面 */
html{scroll-behavior:smooth;scroll-padding-top:calc(var(--topbar-h) + 100px)}
body{
  font-family:"PingFang SC","Hiragino Sans GB","Microsoft YaHei","Helvetica Neue",Arial,sans-serif;
  color:var(--text);background:var(--white);line-height:1.7;
  -webkit-font-smoothing:antialiased;overflow-x:hidden;
}
a{text-decoration:none;color:inherit}
ul{list-style:none}
img{max-width:100%;display:block}
button,input,select,textarea{font-family:inherit;font-size:inherit;color:inherit}
button{background:none;border:none;cursor:pointer}
.wrap{max-width:var(--max);margin:0 auto;padding:0 24px;width:100%}
.hide{display:none !important}
::-webkit-scrollbar{width:9px;height:9px}
::-webkit-scrollbar-track{background:#eef3f8}
::-webkit-scrollbar-thumb{background:#c6d3e0;border-radius:5px}
::-webkit-scrollbar-thumb:hover{background:var(--muted2)}

/* ============================================================
   顶部条
   ============================================================ */
/**
 * 顶部条（电话 / 关注我们 / 语言 / 国别）也**固定在顶部**，与主导航一起常驻。
 *
 * <p>为什么要 sticky 而不是 fixed：fixed 会让它脱离文档流，得再给 body 补一个等高
 * 的 padding-top，而顶栏高度是**动态**的（窄屏两行、长语言降字号），补错就是一屏空白。
 * sticky 保留占位，滚动时自动贴住视口顶。
 *
 * <p>层级：topbar 101 > header 100 —— 两者上下相邻、正常不会重叠，
 * 但滚动到最顶时若把 header 的 top 算小了，会出现 1px 叠压，让顶栏在上更自然。
 * 顶栏里的下拉菜单是 z-index:130，仍在两者之上。
 */
.topbar{
  position:sticky;top:0;z-index:101;
  background:var(--navy);color:#9db4cc;font-size:13px;
  border-bottom:1px solid rgba(255,255,255,.06);
}
.topbar .wrap{
  display:flex;justify-content:space-between;align-items:center;
  min-height:48px;gap:18px;
}
.tb-left{display:flex;gap:20px;align-items:center;flex:none}
.tb-item{display:flex;align-items:center;gap:6px;white-space:nowrap;transition:color .25s}
a.tb-item:hover{color:var(--accent2)}
.tb-item svg{width:14px;height:14px;stroke:var(--accent);fill:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round}

.tb-right{
  flex:1;min-width:0;display:flex;justify-content:flex-end;
  align-items:center;gap:12px;
}

.tb-search{
  display:flex;align-items:center;height:34px;flex:none;
  padding:0 4px 0 11px;border-radius:9px;
  background:rgba(255,255,255,.06);border:1px solid rgba(255,255,255,.12);
  transition:.25s;
}
.tb-search:focus-within{background:rgba(255,255,255,.11);border-color:rgba(255,122,24,.5)}
.tb-search-ic{width:14px;height:14px;flex:none;stroke:#7d95ad;fill:none;stroke-width:2.2;stroke-linecap:round;stroke-linejoin:round;transition:.25s}
.tb-search:focus-within .tb-search-ic{stroke:var(--accent2)}
.tb-search input{
  width:168px;background:none;border:none;outline:none;
  color:#e8f0f8;font-size:12.5px;padding:0 9px;
  transition:width .32s var(--ease);
}
.tb-search input::placeholder{color:#6b839c}
.tb-search:focus-within input{width:212px}
.tb-search input::-webkit-search-cancel-button{-webkit-appearance:none;display:none}
.tb-search-go{
  width:26px;height:26px;border-radius:7px;flex:none;
  display:grid;place-items:center;background:var(--accent);transition:.22s;
}
.tb-search-go:hover{background:#ff5e00}
.tb-search-go svg{width:13px;height:13px;stroke:#fff;fill:none;stroke-width:2.6;stroke-linecap:round;stroke-linejoin:round}

.tb-lang-link{
  display:inline-flex;align-items:center;gap:8px;height:34px;padding:0 12px;flex:none;
  border-radius:9px;background:rgba(255,255,255,.06);
  border:1px solid rgba(255,255,255,.12);color:#cfe0f0;
  font-size:12.5px;font-weight:600;transition:.22s;white-space:nowrap;
}
.tb-lang-link:hover{background:rgba(255,255,255,.13);color:#fff;border-color:rgba(255,122,24,.5)}
.tb-lang-link i{
  font-style:normal;font-size:9.5px;font-weight:800;font-family:Arial,sans-serif;
  letter-spacing:.4px;padding:2px 5px;border-radius:4px;
  background:var(--accent);color:#fff;transition:.22s;
}
.tb-lang-link:hover i{background:#ff5e00}
.tb-lang-link .tb-go{
  width:12px;height:12px;stroke:currentColor;fill:none;stroke-width:2.6;
  opacity:.5;transition:transform .3s,opacity .22s;stroke-linecap:round;stroke-linejoin:round;
}
.tb-lang-link:hover .tb-go{transform:translateX(3px);opacity:1}

.tb-social{position:relative;flex:none}
.tb-social-cur{
  display:inline-flex;align-items:center;gap:7px;height:34px;padding:0 12px;
  border-radius:9px;background:rgba(255,255,255,.06);
  border:1px solid rgba(255,255,255,.12);color:#cfe0f0;
  font-size:12.5px;font-weight:600;cursor:pointer;transition:.22s;white-space:nowrap;
}
.tb-social-cur:hover{background:rgba(255,255,255,.13);color:#fff}
.tb-social-cur .tb-caret{
  width:11px;height:11px;stroke:currentColor;fill:none;stroke-width:2.6;
  opacity:.6;transition:transform .3s;
}
.tb-social.open .tb-social-cur{background:rgba(255,255,255,.14);color:#fff;border-color:rgba(255,122,24,.5)}
.tb-social.open .tb-social-cur .tb-caret{transform:rotate(180deg)}
.tb-social-menu{
  position:absolute;top:calc(100% + 10px);right:0;min-width:206px;
  background:#fff;border-radius:14px;border:1px solid var(--line);
  box-shadow:0 22px 54px rgba(8,19,31,.24);padding:8px;
  opacity:0;visibility:hidden;transform:translateY(8px);
  transition:.26s var(--ease);z-index:130;
}
.tb-social.open .tb-social-menu{opacity:1;visibility:visible;transform:translateY(0)}
.tb-social-menu a{
  display:flex;align-items:center;gap:10px;padding:9px 11px;
  border-radius:9px;font-size:13.5px;color:#33475c;font-weight:500;
  transition:.2s;white-space:nowrap;
}
.tb-social-menu a svg{width:16px;height:16px;flex:none;fill:currentColor;opacity:.8;transition:.2s}
.tb-social-menu a span{flex:1;min-width:0}
.tb-social-menu a em{font-style:normal;font-size:10.5px;color:var(--muted2);font-family:Arial,sans-serif}
.tb-social-menu a:hover{background:var(--accent3);color:var(--accent)}
.tb-social-menu a:hover svg{opacity:1}
.tb-social-menu a:hover em{color:var(--accent2)}
/* 平台数量已从 6 增到最多 12（TikTok / Instagram / 微信 / 阿里国际站 / 中国制造网 / Pinterest），
   菜单会超出视口高度 ⇒ 限高 + 内部滚动（滚轮/触屏都不会把顶栏顶穿）。 */
.tb-social-menu{max-height:min(74vh,560px);overflow-y:auto;overscroll-behavior:contain}

/* ============================================================
   主导航
   ============================================================ */
header{
  /* ★ top 不再是 0：它下面永远压着一条常驻的顶部条（电话/社交/国别），
     所以吸附位置要往下让出那条的高度（真实值由 site.js 量出来后写进 --topbar-h）。 */
  position:sticky;top:var(--topbar-h);z-index:100;background:rgba(255,255,255,.94);
  backdrop-filter:blur(14px);-webkit-backdrop-filter:blur(14px);
  border-bottom:1px solid var(--line);transition:box-shadow .3s;
}
header.scrolled{box-shadow:0 6px 26px rgba(8,19,31,.09)}
.nav{display:flex;align-items:center;justify-content:space-between;height:76px;transition:height .3s;gap:16px}
header.scrolled .nav{height:66px}
/* ★ logo 区域限宽（用户 2026-10-18 要求 ✓）
   —— 国外口号较长（如 "Steel Manufacturing, Delivered Worldwide" 约 43 字符 ✓）
     若不限宽 ⇒ 文本块被撑到 200px+ ⇒ 连同图标把整个头部撑开、挤压右侧菜单 ✗
   做法：给整个 .logo 定死最大宽度 ✓，口号在 .logo-text 内部换行 ✓
     · max-width 320px = 图标 43 + 间距 11 + 文本最多 266 ✓（留足菜单空间 ✓）
     · min-width:0 让 flex 子项可收缩 ✓（不加会被内容顶宽 ✗） */
.logo{display:flex;align-items:center;gap:11px;flex:none;max-width:320px}
.logo-text{min-width:0;max-width:266px}
/* ★ 2026-10-20：图形标重新设计（钢卷端面剖面）。
 *   容器规则改为"只负责尺寸与阴影"，视觉全部由 SVG 自己画 ——
 *   原来的渐变底 + 斜切 ::after 是给文字标做的装饰，留着会和 SVG 底色打架。 */
.logo-mark{
  width:43px;height:43px;border-radius:11px;flex:none;display:block;
  box-shadow:0 4px 14px rgba(8,19,31,.26);
}
/* 页脚背景偏深，给图形标加一圈内描边，边界更清楚 */
footer .logo-mark{box-shadow:0 4px 14px rgba(0,0,0,.35), 0 0 0 1px rgba(255,255,255,.10)}
/* 顶栏在滚动收起时 logo 会缩小，图形标跟着缩但下限 30px（再小 U 形就糊了） */
.header-shrink .logo-mark{width:34px;height:34px;border-radius:9px}
.logo-text b{display:block;font-size:19px;letter-spacing:2px;color:var(--navy);line-height:1.15;font-weight:800}
.logo-text small{display:block;font-size:9.5px;letter-spacing:2.8px;color:var(--muted);font-family:Arial,sans-serif;font-weight:700}
/* ★ 品牌口号（logo 下第二行）：小、细、淡，绝不抢主品牌 ✓
   —— 必须显式重置三项，否则会出问题（实测踩过 ✗）：
     ① font-style: normal   ← <i> 默认斜体，中文斜了很难看 ✗
     ② font-weight: 400     ← 父级 .logo-text 是 700，不重置会跟着加粗 ✗
     ③ font-size            ← 不设会继承品牌名的大字号 ✗ */
.logo-text .logo-slogan{display:block;font-style:normal;font-weight:400;font-size:10px;line-height:1.4;letter-spacing:.3px;color:var(--muted);opacity:.9;margin-top:3px;max-width:266px;font-family:inherit;
  /* ★ 长口号换行（国外站点 ✓）：
     · overflow-wrap:break-word ⇒ 德语/瑞典语的长单词也能断 ✓
     · word-break:normal ⇒ 不在任意字符间硬断（否则西语/德语会出现半词换行 ✗） */
  overflow-wrap:break-word;word-break:normal}

/* ★ 小屏收紧 logo 区（≤720px ✓）
   —— 手机上 320px 的 logo + 左右 padding 会顶到菜单按钮 ✗
   做法：缩图标、缩文本宽度、口号字号略降 ✓（品牌名仍保持识别度 ✓） */
@media (max-width:720px){
  .logo{max-width:220px;gap:9px}
  .logo-mark{width:38px;height:38px;border-radius:10px}
  .logo-mark span{font-size:14px}
  .logo-text{max-width:172px}
  .logo-text b{font-size:17px;letter-spacing:1px}
  .logo-text .logo-slogan{font-size:9.5px;max-width:172px;margin-top:2px}
}

.menu{display:flex;gap:1px;align-items:center;min-width:0;flex-wrap:nowrap}
.menu > li{position:relative;min-width:0}
/* ★ 菜单项长文本自适应（用户 2026-10-26 改口径：**缩字号，不换行**）
   —— 各语言长度差异很大：中文 2-4 字 vs 塔吉克/德语/意大利语可能 20+ 字符。
   2026-10-18 曾按"允许换行 + max-width"处理，实测出现 `Асос/й`、`Produc/ts`、`Quali/ty`
   这种**按字母断行**（截图见项目记录），比缩小字号难看得多，也会让顶栏忽高忽低。
   现行：
     ① white-space:nowrap + 不设 max-width ✓（永不换行、也不按字母断）
     ② 由 site.js 的 fitMainNav() **按实际总宽逐级缩字号**（15 → 10px），
        到最小仍放不下才收左右内边距、最后才 overflow:hidden 兜底 ✓
     ③ 抽屉模式（≤960px）恢复换行 —— 那里是竖排列表，不需要 nowrap ✓ */
.menu > li > a{
  display:flex;align-items:center;justify-content:center;gap:6px;
  padding:11px 13px;font-size:15px;font-weight:600;
  color:#42586f;border-radius:9px;position:relative;
  white-space:nowrap;line-height:1.22;text-align:center;
  max-width:none;
  transition:color .28s var(--ease),background .28s var(--ease);
}
/* 窄屏时进一步压缩：字号与左右内边距 ↓，最大宽度 ↓（保证 6-7 个菜单项放得下 ✓） */
/**
 * ★ 1400 以下就收紧（不是 1200）：实测 1280 宽时主菜单已经被挤到按字母换行
 * （截图上 "Hom e / Product s / Processin g"），因为基础规则给每项 max-width:132px，
 * 而右侧两个 CTA 的文案是**按语言取库**的 —— 中文"询价单 / 获取报价"很短，
 * 越南语却是 `Yêu cầu báo giá` + `Nhận báo giá`（长一倍多）。
 * 处理：CTA 只留图标 + 计数（功能不变，仍可点），菜单项内边距与字号小幅收紧。
 */
/**
 * ★ 1560 以下就把「询价单」按钮的**文字**收掉、只留图标 + 计数（2026-10-26）。
 *
 * 原来这个断点是 1400，实测俄语/意大利语在 1440 下 7 个菜单项即使缩到最小 10px
 * 仍差 20–40px（`fitMainNav()` 只能 overflow:hidden，末尾会被切掉半截字）。
 * 而右侧 CTA 的文案也是**按语言取库**的（`Запрос цены` / `Richiedi un preventivo`），
 * 它占掉的正是菜单缺的那点宽度 —— 先牺牲 CTA 的文字（图标+数字仍表达同一功能）。
 */
@media (max-width:1560px){
  .rfq-btn .rfq-txt{display:none}
}
@media (max-width:1400px){
  .rfq-btn .rfq-txt{display:none}
  .btn-nav{padding:0 14px;font-size:13px;white-space:nowrap}
  /* ★ 不再设 max-width（那是"按字母换行"的来源），只收内边距；字号由 fitMainNav() 动态算 */
  .menu > li > a{padding:10px 10px;font-size:14px}
}
@media (max-width:1200px){
  .menu > li > a{padding:10px 9px;font-size:14px}
}
.menu > li > a::after{
  content:"";position:absolute;left:50%;right:50%;bottom:5px;height:2px;border-radius:2px;
  background:linear-gradient(90deg,var(--accent),var(--accent2));
  transition:left .38s var(--ease),right .38s var(--ease),background .3s;
}
.menu > li > a:hover{color:var(--navy);background:rgba(255,122,24,.06)}
.menu > li > a:hover::after{left:15px;right:15px}
.menu > li.active > a{color:var(--navy);font-weight:700;background:rgba(255,122,24,.09)}
.menu > li.active > a::after{left:15px;right:15px;background:var(--accent)}
.menu > li > a .caret{width:11px;height:11px;stroke:currentColor;fill:none;stroke-width:2.6;transition:transform .3s;opacity:.5}
.menu > li:hover > a .caret{transform:rotate(180deg);opacity:1}
.sub{
  position:absolute;top:calc(100% + 12px);left:50%;
  transform:translateX(-50%) translateY(10px);
  background:#fff;border-radius:16px;box-shadow:0 22px 56px rgba(8,19,31,.18);
  border:1px solid var(--line);padding:10px;opacity:0;visibility:hidden;
  transition:.28s var(--ease);z-index:110;
}
.sub::after{
  content:"";position:absolute;top:-6px;left:50%;width:11px;height:11px;margin-left:-6px;
  background:#fff;border-left:1px solid var(--line);border-top:1px solid var(--line);
  transform:rotate(45deg);border-radius:2px 0 0 0;
}
.menu > li:hover .sub{opacity:1;visibility:visible;transform:translateX(-50%) translateY(0)}
.sub::before{content:"";position:absolute;top:-14px;left:0;right:0;height:14px}
.sub-simple{min-width:216px}
.sub-simple a{display:flex;align-items:center;gap:10px;padding:10px 12px;border-radius:9px;font-size:14px;color:#33475c;transition:.2s}
.sub-simple a:hover{background:var(--accent3);color:var(--accent);padding-left:16px}
.sub-simple a svg{width:15px;height:15px;stroke:currentColor;fill:none;stroke-width:2;opacity:.5;stroke-linecap:round;stroke-linejoin:round}
.sub-wide{width:min(880px,92vw);padding:22px;display:grid;grid-template-columns:1.15fr .85fr;gap:22px}
/* 下拉面板是 grid 容器，主列必须 min-width:0，否则内容会把两列撑破 */
.sub-main{min-width:0}
.sub-col-title{font-size:11.5px;font-weight:800;letter-spacing:1.8px;color:var(--muted2);text-transform:uppercase;margin-bottom:12px;padding-left:12px}
.sub-prod-grid{display:grid;grid-template-columns:1fr 1fr;gap:2px}
.sub-prod{display:flex;align-items:center;gap:11px;padding:11px 12px;border-radius:10px;transition:.22s}
.sub-prod:hover{background:var(--accent3)}
.sub-prod:hover .sp-tx b{color:var(--accent)}
.sp-ic{width:36px;height:36px;border-radius:9px;flex:none;display:grid;place-items:center;background:#eff5fb;color:var(--steel);transition:.25s}
.sub-prod:hover .sp-ic{background:linear-gradient(140deg,var(--accent),#ff5e00);color:#fff}
.sp-ic svg{width:18px;height:18px;stroke:currentColor;fill:none;stroke-width:1.8;stroke-linecap:round;stroke-linejoin:round}
.sp-tx b{display:block;font-size:13.5px;font-weight:600;color:var(--navy);transition:.22s;line-height:1.3}
.sp-tx small{display:block;font-size:11px;color:var(--muted2);font-family:Arial,sans-serif}
.sub-side{background:#f7fafd;border-radius:12px;padding:18px;display:flex;flex-direction:column}
.sub-side .sub-col-title{padding-left:0;margin-bottom:14px}
.side-item{display:flex;align-items:center;gap:9px;padding:8px 0;font-size:13.5px;color:#3d5570;transition:.2s;border-bottom:1px dashed #e3ebf4}
.side-item:last-of-type{border-bottom:none}
.side-item:hover{color:var(--accent);padding-left:5px}
.side-item::before{content:"";width:5px;height:5px;border-radius:50%;background:var(--accent);flex:none}
.sub-promo{
  display:block;padding:14px;border-radius:11px;margin-top:16px;
  background:linear-gradient(135deg,var(--navy2),var(--navy));color:#fff;transition:.28s;
}
.sub-promo span{display:block;font-size:11.5px;color:#9db4cc;margin-bottom:6px}
.sub-promo b{display:flex;align-items:center;gap:6px;font-size:13.5px;color:var(--accent2)}
.sub-promo:hover{transform:translateY(-2px);box-shadow:0 10px 26px rgba(8,19,31,.22)}
.sub-promo svg{width:14px;height:14px;stroke:currentColor;fill:none;stroke-width:2.4;transition:transform .3s}
.sub-promo:hover svg{transform:translateX(4px)}

/* 新闻下拉：带小图标 + 分类色点 */
.sub-news{min-width:236px}
.sub-news a{display:flex;align-items:center;gap:11px;padding:10px 12px;border-radius:9px;font-size:14px;color:#33475c;transition:.22s}
.sub-news a:hover{background:var(--accent3);color:var(--accent);padding-left:16px}
.sub-news a svg{width:15px;height:15px;stroke:currentColor;fill:none;stroke-width:2;opacity:.55;flex:none;stroke-linecap:round;stroke-linejoin:round;transition:.22s}
.sub-news a:hover svg{opacity:1}
.sub-news a .dot{width:7px;height:7px;border-radius:50%;flex:none}
.sub-news a em{font-style:normal;font-size:11px;color:var(--muted2);margin-left:auto;font-family:Arial,sans-serif}
.sub-news a:hover em{color:var(--accent2)}
.sub-news .sub-news-all{border-top:1px dashed #e3ebf4;margin-top:6px;padding-top:12px;color:var(--accent);font-weight:700}
.sub-news .sub-news-all svg{stroke:var(--accent);opacity:1}
.sub-news .sub-news-all:hover{background:transparent;padding-left:12px;color:var(--accent)}

.nav-cta{display:flex;align-items:center;gap:10px;flex:none}
.rfq-btn{
  position:relative;display:flex;align-items:center;gap:8px;padding:10px 15px;border-radius:10px;
  border:1.5px solid var(--line);background:#fff;color:var(--navy);font-size:14px;font-weight:600;
  transition:.25s;cursor:pointer;
}
.rfq-btn:hover{border-color:var(--accent);color:var(--accent);background:#fff8f2}
.rfq-btn svg{width:16px;height:16px;stroke:currentColor;fill:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round}
.rfq-count{min-width:19px;height:19px;padding:0 5px;border-radius:10px;background:var(--accent);color:#fff;font-size:11.5px;font-weight:800;display:grid;place-items:center;font-family:Arial,sans-serif}
.rfq-count.bump{animation:bump .45s cubic-bezier(.34,1.56,.64,1)}
@keyframes bump{0%{transform:scale(1)}45%{transform:scale(1.45)}100%{transform:scale(1)}}
.burger{display:none;width:44px;height:44px;border-radius:10px;border:1px solid var(--line);background:#fff;place-items:center;position:relative}
.burger span{display:block;width:19px;height:2px;background:var(--navy);border-radius:2px;position:relative;transition:.3s}
.burger span::before,.burger span::after{content:"";position:absolute;left:0;width:19px;height:2px;background:var(--navy);border-radius:2px;transition:.3s}
.burger span::before{top:-6px}
.burger span::after{top:6px}
.burger.on span{background:transparent}
.burger.on span::before{top:0;transform:rotate(45deg)}
.burger.on span::after{top:0;transform:rotate(-45deg)}
.nav-mask{position:fixed;inset:0;background:rgba(5,14,23,.55);backdrop-filter:blur(3px);z-index:95;opacity:0;visibility:hidden;transition:.3s}
.nav-mask.show{opacity:1;visibility:visible}

/* ============================================================
   按钮
   ============================================================ */
.btn{
  display:inline-flex;align-items:center;justify-content:center;gap:8px;
  padding:11px 20px;border-radius:10px;font-size:14.5px;font-weight:600;
  transition:.28s var(--ease);cursor:pointer;border:none;
  /* `<button>` 默认**不继承**页面字体（`<a>` 会）—— 头部的「获取报价」已由链接改成按钮，
     不写这一行它会变成系统默认字体，与旁边几个按钮明显不一样。 */
  font-family:inherit;
  /* ★ 按钮长文本自适应（用户 2026-10-18 要求 ✓）
     —— 原来 white-space:nowrap ✗ ⇒ 越南语「Nhận báo giá」/ 乌克兰语
        「Запит на цінову пропозицію」这类长按钮会被**截断** ✗（截图里能看到 ✓）
     现在：允许折行 ✓ + 限最大宽度 ✓ + 字距收紧 ✓ */
  white-space:normal;line-height:1.2;text-align:center;
  max-width:100%;word-break:break-word;overflow-wrap:break-word;
}
.btn svg{width:16px;height:16px;stroke:currentColor;fill:none;stroke-width:2.2;stroke-linecap:round;stroke-linejoin:round;transition:transform .3s}
.btn-primary{background:linear-gradient(135deg,var(--accent),#ff5e00);color:#fff;box-shadow:0 8px 22px rgba(255,122,24,.3)}
.btn-primary:hover{transform:translateY(-2px);box-shadow:0 12px 30px rgba(255,122,24,.42)}
.btn-primary:hover svg{transform:translateX(3px)}
.btn-ghost{background:transparent;color:var(--navy);border:1.5px solid var(--line)}
.btn-ghost:hover{border-color:var(--accent);color:var(--accent);background:#fff8f2}
.btn-light{background:rgba(255,255,255,.12);color:#fff;border:1px solid rgba(255,255,255,.3);backdrop-filter:blur(6px)}
.btn-light:hover{background:rgba(255,255,255,.24);transform:translateY(-2px)}
.btn-sm{padding:9px 18px;font-size:13.5px}
.btn-lg{padding:12px 26px;font-size:14.5px;border-radius:11px}

/* ============================================================
   Hero
   ============================================================ */
.hero{position:relative;background:#07121d;overflow:hidden}
.hero-slides{position:relative;display:grid}
.hero-slide{
  grid-area:1 / 1;position:relative;display:flex;align-items:center;
  /* 2026-10-19：首屏再压一档（448px → 352px）。hero 是"第一眼"，但它高于 55vh 时
     后面两块内容全被推出首屏 —— 用户反馈"首页太长"，这里是最划算的一刀。 */
  min-height:min(42vh,352px);
  opacity:0;visibility:hidden;z-index:0;
  background:linear-gradient(150deg,#0b1c2e,#08131f);
  transition:opacity .9s ease,visibility .9s ease;
}
.hero-slide.is-active{opacity:1;visibility:visible;z-index:2}
.hero-img{
  position:absolute;inset:0;width:100%;height:100%;object-fit:cover;
  transform:scale(1.06);transition:transform 8s linear;
}
.hero-slide.is-active .hero-img{transform:scale(1)}
.hero-slide::after{
  content:"";position:absolute;inset:0;z-index:1;
  background:
    linear-gradient(90deg,rgba(5,12,20,.94) 0%,rgba(5,12,20,.8) 38%,rgba(5,12,20,.42) 70%,rgba(5,12,20,.55) 100%),
    linear-gradient(180deg,rgba(5,12,20,.35),transparent 30%,transparent 60%,rgba(5,12,20,.7));
}
.hero .hero-inner{position:relative;z-index:2;padding-top:54px;padding-bottom:62px}
.hero-copy{color:#fff;max-width:660px}
.hero-tag{
  display:inline-flex;align-items:center;gap:9px;
  font-size:12px;font-weight:700;letter-spacing:.6px;
  color:var(--accent2);background:rgba(255,122,24,.14);
  border:1px solid rgba(255,122,24,.34);
  padding:6px 14px;border-radius:99px;margin-bottom:14px;
}
.hero-tag i{width:6px;height:6px;border-radius:50%;background:var(--accent);animation:blink 1.8s infinite}
@keyframes blink{50%{opacity:.25}}
/* ★ 轮播的 6 张幻灯片原来**每张一个 h1**（一页 6 个 h1，主题被稀释）。
   现在只保留第一张为 h1，其余降为 h2；这里让 h2 与 h1 完全同款，视觉零变化。 */
.hero-copy h1,.hero-copy h2{
  font-size:clamp(24px,3.1vw,38px);
  font-weight:800;line-height:1.16;letter-spacing:-.6px;
  margin-bottom:10px;text-shadow:0 2px 24px rgba(0,0,0,.35);
}
.hero-copy h1 em,.hero-copy h2 em{
  font-style:normal;
  background:linear-gradient(100deg,var(--accent),#ffc46b);
  -webkit-background-clip:text;background-clip:text;color:transparent;
}
.hero-copy p{font-size:13.5px;line-height:1.7;color:#c2d3e4;max-width:560px;margin-bottom:16px}
.hero-actions{display:flex;gap:12px;flex-wrap:wrap}

.hero-nav{position:absolute;left:0;right:0;bottom:0;z-index:6;padding-bottom:22px;pointer-events:none}
.hero-nav-inner{display:flex;align-items:center;justify-content:space-between;gap:20px}
.hero-dots{display:flex;gap:8px;pointer-events:auto}
.hero-dots button{width:32px;height:4px;border-radius:2px;background:rgba(255,255,255,.32);padding:0;transition:.35s var(--ease);cursor:pointer}
.hero-dots button:hover{background:rgba(255,255,255,.6)}
.hero-dots button.on{width:54px;background:var(--accent)}
.hero-arrows{display:flex;align-items:center;gap:12px;pointer-events:auto}
.hero-arrow{
  width:42px;height:42px;border-radius:12px;display:grid;place-items:center;
  background:rgba(255,255,255,.12);border:1px solid rgba(255,255,255,.24);color:#fff;
  transition:.28s;backdrop-filter:blur(6px);cursor:pointer;
}
.hero-arrow:hover{background:var(--accent);border-color:var(--accent);transform:scale(1.06)}
.hero-arrow svg{width:18px;height:18px;stroke:currentColor;fill:none;stroke-width:2.4;stroke-linecap:round;stroke-linejoin:round}
.hero-count{font-size:13px;color:#a4b8cc;font-family:Arial,sans-serif;letter-spacing:1px;min-width:56px;text-align:center}
.hero-count b{color:#fff;font-size:15px;font-weight:800}

/* ============================================================
   数据条
   ============================================================ */
.stats-strip{
  position:relative;overflow:hidden;padding:26px 0 28px;
  background:linear-gradient(180deg,#0a1a2c 0%,#08131f 100%);color:#fff;
  border-bottom:1px solid rgba(255,255,255,.06);
}
.stats-strip::before{
  content:"";position:absolute;inset:0;
  background:radial-gradient(620px 240px at 82% 16%,rgba(255,122,24,.16),transparent 62%);
}
.stats-grid{position:relative;display:grid;grid-template-columns:repeat(5,1fr);gap:18px;text-align:center}
.stat b{display:flex;align-items:baseline;justify-content:center;gap:3px;font-family:Arial,sans-serif;font-size:26px;font-weight:800;line-height:1;letter-spacing:-.8px;color:var(--accent)}
.stat b i{font-style:normal;font-size:12.5px;color:#c8d8e8;letter-spacing:0}
.stat > span{display:block;font-size:12px;color:#8ba3ba;margin-top:8px}

/* ============================================================
   区块层次
   ============================================================ */
.section{position:relative;padding:80px 0;background:#fff}
.section-tight{padding:56px 0}

.section-cool{
  background:
    radial-gradient(880px 460px at 92% 4%, rgba(255,122,24,.07), transparent 62%),
    radial-gradient(760px 480px at 0% 100%, rgba(45,110,180,.10), transparent 64%),
    linear-gradient(180deg,#eaf1f8 0%,#dde8f3 100%);
  box-shadow:inset 0 1px 0 rgba(255,255,255,.9), inset 0 -1px 0 rgba(8,19,31,.07);
}
.section-warm{
  background:
    radial-gradient(820px 440px at 6% 6%, rgba(255,177,92,.16), transparent 62%),
    radial-gradient(760px 460px at 100% 96%, rgba(255,122,24,.07), transparent 62%),
    linear-gradient(180deg,#fdf7f0 0%,#f6ead9 100%);
  box-shadow:inset 0 1px 0 rgba(255,255,255,.9), inset 0 -1px 0 rgba(8,19,31,.06);
}
.section-cool::before,
.section-warm::before{
  content:"";position:absolute;inset:0;pointer-events:none;
  background-image:
    linear-gradient(rgba(8,19,31,.035) 1px, transparent 1px),
    linear-gradient(90deg, rgba(8,19,31,.035) 1px, transparent 1px);
  background-size:52px 52px;
  -webkit-mask-image:radial-gradient(ellipse at 50% 45%, #000 12%, transparent 84%);
          mask-image:radial-gradient(ellipse at 50% 45%, #000 12%, transparent 84%);
}
.section-cool > .wrap,
.section-warm > .wrap{position:relative;z-index:1}

.section-dark{
  position:relative;overflow:hidden;color:#fff;
  background:
    radial-gradient(800px 500px at 82% 12%, rgba(255,122,24,.2), transparent 62%),
    radial-gradient(700px 500px at 8% 90%,  rgba(45,110,180,.24), transparent 64%),
    linear-gradient(150deg,var(--navy2),var(--navy));
}
.section-dark::before{
  content:"";position:absolute;inset:0;opacity:.5;
  background-image:
    linear-gradient(rgba(255,255,255,.045) 1px, transparent 1px),
    linear-gradient(90deg, rgba(255,255,255,.045) 1px, transparent 1px);
  background-size:50px 50px;
  -webkit-mask-image:radial-gradient(circle at 50% 40%, #000 10%, transparent 80%);
          mask-image:radial-gradient(circle at 50% 40%, #000 10%, transparent 80%);
}
.section-dark .wrap{position:relative;z-index:1}
.section-dark .sec-head h2{color:#fff}
.section-dark .sec-head p{color:#a9bed3}

.section-cool .prod,
.section-cool .app,
.section-cool .case-card,
.section-cool .news-card,
.section-cool .fac-cap,
.section-cool .fac-metric,
.section-cool .cert-card,
.section-warm .prod,
.section-warm .app,
.section-warm .case-card,
.section-warm .news-card,
.section-warm .fac-cap,
.section-warm .fac-metric,
.section-warm .cert-card{
  background:#fff;
  border-color:#fff;
  box-shadow:0 3px 16px rgba(8,19,31,.08), 0 1px 0 rgba(255,255,255,.9) inset;
}
.section-cool .filter-bar,
.section-warm .filter-bar{background:#fff;border-color:#fff;box-shadow:0 3px 16px rgba(8,19,31,.08)}

.section-white .prod,
.section-white .app,
.section-white .case-card,
.section-white .news-card,
.section-white .fac-cap,
.section-white .fac-metric,
.section-white .cert-card,
.section-white .filter-bar,
.section-white .export-strip{
  background:#f5f9fd;
  border-color:#e1eaf4;
}
.section-white .prod:hover,
.section-white .app:hover,
.section-white .case-card:hover,
.section-white .news-card:hover,
.section-white .fac-cap:hover,
.section-white .fac-metric:hover,
.section-white .cert-card:hover{background:#fff}

.sec-head{max-width:720px;margin-bottom:46px}
.sec-head.center{margin-left:auto;margin-right:auto;text-align:center}
.eyebrow{
  display:inline-flex;align-items:center;gap:8px;
  font-size:12px;font-weight:800;letter-spacing:2.6px;color:var(--accent);
  text-transform:uppercase;font-family:Arial,sans-serif;margin-bottom:12px;
}
.eyebrow::before{content:"";width:20px;height:2.5px;background:var(--accent);border-radius:2px}
.sec-head.center .eyebrow::after{content:"";width:20px;height:2.5px;background:var(--accent);border-radius:2px}
.sec-head h2{
  font-size:clamp(24px,2.9vw,36px);font-weight:800;letter-spacing:-.4px;
  line-height:1.3;margin-bottom:14px;color:var(--navy);
}
.sec-head p{color:var(--muted);font-size:15.5px;line-height:1.85}
.sec-more{text-align:center;margin-top:40px}

/* ============================================================
   新闻资讯
   ============================================================ */
/* 新闻列表：**每行 4 个卡位**（2026-10-24 改）
 * 原来是 `repeat(auto-fit,minmax(300px,1fr))` —— 在 1260px 版心里只能放 3 个，
 * 而首页新闻条数正好是 3 ⇒ 看起来"永远第三张孤零零"。改成固定 4 列后，
 * 首页新闻条数同步改成 4 条（page_block props.limit），两者必须一起改，否则会留空格位。
 * 窄屏逐级降列：≤1200 3 列、≤900 2 列（≤680 已有 !important 2 列兜底）。 */
.news-grid{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:22px}
@media (max-width:1200px){.news-grid{grid-template-columns:repeat(3,minmax(0,1fr))}}
@media (max-width:900px){.news-grid{grid-template-columns:repeat(2,minmax(0,1fr))}}
.news-card{
  border-radius:var(--r);overflow:hidden;border:1px solid var(--line);
  transition:.35s var(--ease);display:flex;flex-direction:column;cursor:pointer;
}
/* 新闻卡片现在是 `<a>`（2026-10-25：整卡可点）—— 必须显式清掉链接样式，
   否则继承浏览器的下划线/主题蓝，且 `color:inherit` 保证标题/日期颜色跟原来一致。 */
a.news-card{color:inherit;text-decoration:none}
a.news-card:focus-visible{outline:2px solid var(--accent);outline-offset:3px}
.news-card:hover{transform:translateY(-6px);box-shadow:var(--shadow-lg);border-color:transparent}
.news-thumb{
  height:150px;position:relative;overflow:hidden;display:grid;place-items:center;
  background:linear-gradient(140deg,#e7eff8,#d6e4f2);
}
.news-thumb::before{
  content:"";position:absolute;inset:0;
  background-image:
    linear-gradient(rgba(45,74,107,.07) 1px,transparent 1px),
    linear-gradient(90deg,rgba(45,74,107,.07) 1px,transparent 1px);
  background-size:32px 32px;
}
.news-thumb svg{width:50px;height:50px;stroke:rgba(45,74,107,.55);fill:none;stroke-width:1.4;position:relative;z-index:1;transition:.4s}
.news-card:hover .news-thumb svg{transform:scale(1.1);stroke:var(--accent)}
.news-cat{
  position:absolute;top:14px;left:14px;z-index:2;font-size:11.5px;font-weight:800;
  padding:4px 11px;border-radius:6px;background:var(--navy);color:#fff;transition:.25s;
}
.news-card:hover .news-cat{background:var(--accent)}
.news-body{padding:20px 22px 22px;flex:1;display:flex;flex-direction:column}
.news-date{font-size:12.5px;color:var(--muted2);font-family:Arial,sans-serif;margin-bottom:9px;letter-spacing:.3px}
.news-body h3{font-size:16px;font-weight:700;line-height:1.55;margin-bottom:10px;color:var(--navy);transition:.25s}
.news-card:hover .news-body h3{color:var(--accent)}
.news-body p{font-size:13.5px;color:var(--muted);line-height:1.8;flex:1}
.news-more{margin-top:14px;font-size:13.5px;font-weight:700;color:var(--accent);display:flex;align-items:center;gap:6px}
.news-more svg{width:14px;height:14px;stroke:currentColor;fill:none;stroke-width:2.4;transition:.3s}
.news-card:hover .news-more svg{transform:translateX(4px)}

.news-all{
  display:flex;justify-content:center;margin-top:34px;
}
.news-all-link{
  display:inline-flex;align-items:center;gap:9px;
  padding:10px 22px;border-radius:99px;
  background:rgba(255,255,255,.85);
  border:1.5px solid var(--line);
  color:var(--navy);font-size:14px;font-weight:700;
  transition:.28s var(--ease);
  box-shadow:0 3px 12px rgba(8,19,31,.05);
}
.news-all-link:hover{
  border-color:var(--accent);color:var(--accent);
  background:#fff8f2;transform:translateY(-2px);
  box-shadow:0 8px 22px rgba(255,122,24,.18);
}
.news-all-link svg{width:14px;height:14px;stroke:currentColor;fill:none;stroke-width:2.4;transition:transform .3s;stroke-linecap:round;stroke-linejoin:round}
.news-all-link:hover svg{transform:translateX(4px)}

/* ============================================================
   产品
   ============================================================ */
.filter-bar{
  display:flex;gap:10px;flex-wrap:wrap;align-items:center;
  margin-bottom:32px;padding:16px 20px;
  border-radius:var(--r);border:1px solid var(--line);
}
.filter-label{font-size:13px;font-weight:700;color:var(--navy);white-space:nowrap}
.chip{
  padding:7px 15px;border-radius:99px;font-size:13px;font-weight:600;
  background:#eef4fa;color:#3d5570;border:1px solid transparent;
  transition:.25s;white-space:nowrap;cursor:pointer;
}
.chip:hover{background:var(--accent3);color:var(--accent)}
.chip.on{background:var(--navy);color:#fff;border-color:var(--navy)}
.chip.on:hover{background:var(--accent);border-color:var(--accent)}
.prod-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(288px,1fr));gap:22px}
.prod{
  position:relative;overflow:hidden;display:flex;flex-direction:column;
  border-radius:var(--r);padding:26px 24px 22px;
  border:1px solid var(--line);transition:.35s var(--ease);
}
.prod::before{
  content:"";position:absolute;left:0;top:0;height:3px;width:0;
  background:linear-gradient(90deg,var(--accent),var(--accent2));transition:.4s;
}
.prod:hover{transform:translateY(-6px);box-shadow:var(--shadow-lg);border-color:transparent}
/* 整卡点击进产品详情：透明覆盖层。卡里的"加入询价单"和"获取报价"必须抬到它上面，
   否则会被覆盖层吃掉点击（表现是"按钮点不动"，页面不报错）。 */
.prod-hit{position:absolute;inset:0;z-index:1;border-radius:inherit}
.prod-foot,.prod-spec{position:relative;z-index:2}
.prod:hover::before{width:100%}
/* 卡片顶部：**产品主图**（16:9）+ 品类徽标。
   原来这里是一个 50×50 的图标方块 —— 只在"没有产品照片"时才是合理的；有照片时
   50px 的缩略图等于没有（用户反馈"首页产品需要有图片"）。改成一整块 16:9 主图。 */
.prod-top{display:flex;flex-direction:column;align-items:stretch;gap:14px;margin-bottom:16px}
.prod-ic{
  width:100%;height:auto;aspect-ratio:16/9;border-radius:12px;overflow:hidden;
  display:grid;place-items:center;flex:none;
  background:linear-gradient(140deg,#eef4fa,#dfe9f5);color:var(--steel);transition:.35s;
}
.prod-ic img{width:100%;height:100%;object-fit:cover;display:block;transition:transform .45s var(--ease)}
/* 没有图片时退回小图标（居中），不会把占位框撑成一条奇怪的空白 */
.prod-ic svg{width:28px;height:28px;stroke:currentColor;fill:none;stroke-width:1.7;stroke-linecap:round;stroke-linejoin:round}
/* 有照片的卡片：整块不旋转（旋转一张 16:9 的产品图会显得很怪），改成图片轻微放大 */
.prod:hover .prod-ic{transform:none}
.prod:hover .prod-ic img{transform:scale(1.04)}
.prod-oem{align-self:flex-start}
.prod-oem{font-size:10.5px;font-weight:800;letter-spacing:.8px;color:#0f9d58;background:#e8f7ef;padding:4px 9px;border-radius:6px;white-space:nowrap}
.prod h3{font-size:17.5px;font-weight:700;margin-bottom:4px;color:var(--navy)}
.prod .en{font-size:10.5px;color:var(--muted2);letter-spacing:1.1px;font-family:Arial,sans-serif;margin-bottom:12px;text-transform:uppercase}
.prod > p{font-size:13.5px;color:var(--muted);line-height:1.75;margin-bottom:16px}
.prod-spec{
  background:#f3f8fd;border:1px solid #e4edf6;border-radius:10px;padding:12px 13px;
  display:flex;flex-direction:column;gap:7px;margin-bottom:16px;flex:1;
}
.prod-spec > div{display:flex;font-size:12.5px;line-height:1.5;gap:8px}
.prod-spec dt{color:var(--muted2);min-width:38px;flex:none}
.prod-spec dd{color:#2f455c;font-weight:600}
.prod-foot{display:flex;gap:9px;margin-top:auto}
.prod-foot .add,.prod-foot .view{
  flex:1;display:flex;align-items:center;justify-content:center;gap:7px;
  padding:10px;border-radius:9px;font-size:13px;font-weight:700;
  transition:.25s;cursor:pointer;
}
.prod-foot .add{border:1.5px solid var(--line);background:#fff;color:var(--navy)}
.prod-foot .add svg{width:14px;height:14px;stroke:currentColor;fill:none;stroke-width:2.4}
.prod-foot .add:hover{border-color:var(--accent);color:var(--accent);background:#fff8f2}
.prod-foot .add.done{background:#e8f7ef;border-color:#0f9d58;color:#0f9d58}
.prod-foot .view{border:1.5px solid var(--navy);background:var(--navy);color:#fff}
.prod-foot .view svg{width:14px;height:14px;stroke:currentColor;fill:none;stroke-width:2.4}
.prod-foot .view:hover{background:var(--accent);border-color:var(--accent)}
/* ---- 产品卡紧凑化（2026-10-19）----
   加了主图之后卡片明显变高（16:9 图 + 标题 + 英文 + 摘要 3 行 + 规格 + 按钮），
   6 张就要占两屏多。这里统一收一档：图 2:1、内边距与字号各降一级、摘要限两行。
   只改视觉密度，不改内容结构 —— 后台改文案、改数量都不受影响。 */
.prod{padding:18px 18px 16px}
.prod-ic{aspect-ratio:2/1;border-radius:10px}
.prod-top{gap:10px;margin-bottom:12px}
.prod h3{font-size:16px;margin-bottom:3px}
.prod .en{margin-bottom:8px}
.prod > p{font-size:12.5px;line-height:1.6;margin-bottom:12px;
  display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}
.prod-spec{padding:9px 11px;margin-bottom:12px}
.prod-foot{gap:8px}

/* ============================================================
   工厂实力
   ============================================================ */
/* 首页工厂区「实拍图带」（2026-10-25）
 * ------------------------------------------------------------
 * 素材来自客户实拍（车间钢卷 / 出口包装 / 木箱圆片 / 装柜）。
 * 2×2 布局 + 16:10 裁切：四张来源尺寸不一（含竖图），不裁的话高度参差、行末会参差断裂。
 * `loading=lazy` + srcset 两档：手机上只下 640 宽（33–55KB），首屏不为图库付流量。
 */
.fac-gallery{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:14px;margin:0 0 20px}
.fac-gallery figure{
  margin:0;position:relative;overflow:hidden;border-radius:var(--r-lg);
  border:1px solid var(--line);background:#eef3f8;
}
.fac-gallery img{
  display:block;width:100%;height:100%;aspect-ratio:16/10;object-fit:cover;
  transition:transform .6s var(--ease);will-change:transform;
}
.fac-gallery figure:hover img{transform:scale(1.04)}

/* 图带里的"视频位"（2026-10-25）：`<figure data-video="…">` 点击开播放器。
 * 视觉上必须一眼看出"这张能点开看视频"：半透明圆形底 + 白色三角，
 * 否则会跟普通图片混在一起，用户根本不会去点（视频白放）。 */
.fac-gallery figure[data-video]{cursor:pointer}
.fac-gallery figure[data-video]::after{
  content:"";position:absolute;left:50%;top:50%;width:58px;height:58px;
  margin:-29px 0 0 -29px;border-radius:50%;
  background:rgba(8,19,31,.52);border:1px solid rgba(255,255,255,.55);
  transition:background .3s var(--ease);
}
.fac-gallery figure[data-video]::before{
  content:"";position:absolute;left:50%;top:50%;z-index:1;
  width:0;height:0;margin:-9px 0 0 -4px;
  border-style:solid;border-width:9px 0 9px 15px;
  border-color:transparent transparent transparent #fff;
}
.fac-gallery figure[data-video]:hover::after{background:rgba(255,122,24,.82)}
.fac-gallery figure[data-video]:focus-visible{outline:2px solid var(--accent);outline-offset:3px}
@media (max-width:760px){
  .fac-gallery{gap:10px}
  .fac-gallery img{aspect-ratio:4/3}
}

.fac-hero{
  position:relative;overflow:hidden;min-height:262px;
  border-radius:var(--r-lg);border:1px solid var(--line);
  background:
    radial-gradient(560px 320px at 86% 16%, rgba(255,122,24,.24), transparent 62%),
    linear-gradient(140deg,#0e2136 0%,#08131f 100%);
  display:flex;align-items:flex-end;padding:30px;margin-bottom:20px;
}
.fac-hero::before{
  content:"";position:absolute;inset:0;pointer-events:none;
  background-image:
    linear-gradient(rgba(255,255,255,.05) 1px,transparent 1px),
    linear-gradient(90deg,rgba(255,255,255,.05) 1px,transparent 1px);
  background-size:44px 44px;
  -webkit-mask-image:radial-gradient(ellipse at 50% 40%, #000 10%, transparent 82%);
          mask-image:radial-gradient(ellipse at 50% 40%, #000 10%, transparent 82%);
}
.fac-hero .plant-art{
  position:absolute;right:3%;top:50%;transform:translateY(-52%);
  width:min(460px,46%);opacity:.75;z-index:1;pointer-events:none;
}
.fac-hero .fv-txt{position:relative;z-index:3;max-width:56%}
.fac-hero .fv-txt b{display:block;font-size:21px;font-weight:800;color:#fff;margin-bottom:7px;letter-spacing:-.2px}
.fac-hero .fv-txt span{font-size:13px;color:#9db4cc}
.fv-badges{display:flex;gap:7px;flex-wrap:wrap;margin-top:14px}
.fv-badges span{
  font-size:11px;font-weight:700;color:var(--accent2);
  background:rgba(255,122,24,.13);border:1px solid rgba(255,122,24,.3);
  padding:4px 10px;border-radius:99px;
}
.fac-play{
  position:absolute;right:30px;bottom:28px;z-index:4;
  display:inline-flex;align-items:center;gap:10px;
  padding:9px 18px 9px 11px;border-radius:99px;
  background:rgba(255,122,24,.94);color:#fff;
  font-size:13.5px;font-weight:700;cursor:pointer;
  transition:.3s var(--ease);box-shadow:0 12px 30px rgba(255,122,24,.42);
}
.fac-play:hover{background:var(--accent);transform:translateY(-2px)}
.fp-ic{
  width:26px;height:26px;border-radius:50%;flex:none;
  background:rgba(255,255,255,.22);display:grid;place-items:center;
}
.fp-ic svg{width:13px;height:13px;fill:#fff;margin-left:2px}

.fac-metrics{display:grid;grid-template-columns:repeat(4,1fr);gap:16px;margin-bottom:24px}
.fac-metric{
  border-radius:16px;padding:22px 20px;border:1px solid var(--line);
  transition:.3s var(--ease);display:flex;flex-direction:column;
}
.fac-metric:hover{transform:translateY(-4px);box-shadow:var(--shadow-lg);border-color:transparent}
.fac-metric .fm-ic{
  width:38px;height:38px;border-radius:11px;display:grid;place-items:center;
  background:linear-gradient(140deg,#eef4fa,#dfe9f5);color:var(--steel);
  margin-bottom:14px;transition:.3s;
}
.fac-metric:hover .fm-ic{background:linear-gradient(140deg,var(--accent),#ff5e00);color:#fff}
.fac-metric .fm-ic svg{width:19px;height:19px;stroke:currentColor;fill:none;stroke-width:1.8;stroke-linecap:round;stroke-linejoin:round}
.fac-metric b{display:block;font-size:28px;font-weight:800;font-family:Arial,sans-serif;color:var(--accent);line-height:1;letter-spacing:-.6px}
.fac-metric b i{font-style:normal;font-size:13px;margin-left:3px}
.fac-metric > span{display:block;font-size:12.5px;color:var(--muted);margin-top:9px}

.fac-caps{display:grid;grid-template-columns:repeat(auto-fit,minmax(250px,1fr));gap:18px}
.fac-cap{
  position:relative;overflow:hidden;padding:28px 24px 26px;
  border-radius:var(--r);border:1px solid var(--line);
  transition:.32s var(--ease);
}
.fac-cap::before{
  content:attr(data-num);position:absolute;top:12px;right:18px;
  font-family:Arial,sans-serif;font-size:46px;font-weight:800;line-height:1;
  letter-spacing:-2px;color:rgba(255,122,24,.14);transition:.3s;
}
.fac-cap:hover{transform:translateY(-5px);box-shadow:var(--shadow-lg);border-color:transparent}
.fac-cap:hover::before{color:rgba(255,122,24,.26)}
.fc-ic{
  width:46px;height:46px;border-radius:12px;display:grid;place-items:center;
  background:linear-gradient(140deg,#eef4fa,#dfe9f5);color:var(--steel);
  margin-bottom:16px;transition:.3s;
}
.fac-cap:hover .fc-ic{background:linear-gradient(140deg,var(--accent),#ff5e00);color:#fff}
.fc-ic svg{width:22px;height:22px;stroke:currentColor;fill:none;stroke-width:1.8;stroke-linecap:round;stroke-linejoin:round}
.fac-cap h4{font-size:16px;font-weight:700;color:var(--navy);margin-bottom:9px}
.fac-cap p{font-size:13.5px;color:var(--muted);line-height:1.85}

/* ============================================================
   认证资质
   ============================================================ */
.cert-wall{display:grid;grid-template-columns:repeat(auto-fit,minmax(200px,1fr));gap:18px}
.cert-card{
  position:relative;overflow:hidden;
  border:1px solid var(--line);border-radius:var(--r);
  padding:26px 20px 24px;text-align:center;transition:.32s var(--ease);
}
.cert-card::after{
  content:"";position:absolute;left:0;right:0;bottom:0;height:3px;
  background:linear-gradient(90deg,var(--accent),var(--accent2));
  transform:scaleX(0);transform-origin:left;transition:transform .38s var(--ease);
}
.cert-card:hover{transform:translateY(-6px);box-shadow:var(--shadow-lg);border-color:transparent}
.cert-card:hover::after{transform:scaleX(1)}
.cert-card .ci{
  width:56px;height:56px;border-radius:15px;margin:0 auto 15px;display:grid;place-items:center;
  background:linear-gradient(140deg,#eef4fa,#dfe9f5);color:var(--steel);transition:.3s;
}
.cert-card:hover .ci{background:linear-gradient(140deg,var(--accent),#ff5e00);color:#fff;transform:rotate(-5deg) scale(1.06)}
.cert-card .ci svg{width:27px;height:27px;stroke:currentColor;fill:none;stroke-width:1.7;stroke-linecap:round;stroke-linejoin:round}
.cert-card b{display:block;font-size:15px;font-weight:800;color:var(--navy);margin-bottom:5px}
.cert-card small{font-size:11.5px;color:var(--muted2);font-family:Arial,sans-serif;letter-spacing:.5px}

/* ============================================================
   应用领域
   ============================================================ */
.apps-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(248px,1fr));gap:20px}
.app{padding:28px 24px;border-radius:var(--r);border:1px solid var(--line);transition:.32s var(--ease)}
.app:hover{transform:translateY(-6px);box-shadow:var(--shadow-lg);border-color:transparent}
.app-ic{
  width:56px;height:56px;border-radius:15px;display:grid;place-items:center;
  margin-bottom:18px;background:linear-gradient(140deg,#eef4fa,#dfe9f5);
  color:var(--steel);transition:.35s;
}
.app:hover .app-ic{background:linear-gradient(140deg,var(--accent),#ff5e00);color:#fff;transform:rotate(-5deg) scale(1.05)}
.app-ic svg{width:28px;height:28px;stroke:currentColor;fill:none;stroke-width:1.7;stroke-linecap:round;stroke-linejoin:round}
.app h3{font-size:17px;font-weight:700;color:var(--navy);margin-bottom:8px}
.app p{font-size:13.5px;color:var(--muted);line-height:1.8;margin-bottom:16px}
.app .tags{display:flex;gap:6px;flex-wrap:wrap}
.app .tags span{font-size:11.5px;padding:3px 10px;border-radius:6px;background:#eef4fa;color:var(--steel);font-weight:600}

/* ============================================================
   案例
   ============================================================ */
.case-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(300px,1fr));gap:22px}
.case-card{
  border-radius:var(--r);overflow:hidden;border:1px solid var(--line);
  transition:.35s var(--ease);display:flex;flex-direction:column;cursor:pointer;
}
.case-card:hover{transform:translateY(-6px);box-shadow:var(--shadow-lg);border-color:transparent}
.case-thumb{
  height:160px;position:relative;overflow:hidden;display:grid;place-items:center;
  background:linear-gradient(140deg,var(--navy2),var(--navy3));
}
.case-thumb::before{
  content:"";position:absolute;inset:0;
  background-image:
    linear-gradient(rgba(255,255,255,.06) 1px,transparent 1px),
    linear-gradient(90deg,rgba(255,255,255,.06) 1px,transparent 1px);
  background-size:32px 32px;
}
.case-thumb svg{width:56px;height:56px;stroke:rgba(255,122,24,.8);fill:none;stroke-width:1.4;position:relative;z-index:1;transition:.4s}
.case-card:hover .case-thumb svg{transform:scale(1.1) rotate(-4deg);stroke:var(--accent)}
/* 案例封面图（project_case.cover_url）：有图时铺满缩略区，盖住渐变底与网格纹理；无图仍走上面的 SVG 图标 */
.case-thumb .case-img{position:absolute;inset:0;width:100%;height:100%;object-fit:cover;z-index:1;transition:.5s var(--ease)}
.case-card:hover .case-thumb .case-img{transform:scale(1.05)}
.case-flag{
  position:absolute;top:14px;left:14px;z-index:2;font-size:11.5px;font-weight:800;
  padding:4px 11px;border-radius:6px;background:var(--accent);color:#fff;
  font-family:Arial,sans-serif;letter-spacing:.5px;
}
.case-body{padding:22px 22px 24px;flex:1;display:flex;flex-direction:column}
.case-body h3{font-size:16.5px;font-weight:700;line-height:1.5;margin-bottom:10px;color:var(--navy)}
.case-body p{font-size:13.5px;color:var(--muted);line-height:1.8;flex:1}
.case-meta{display:flex;gap:18px;margin-top:16px;padding-top:15px;border-top:1px dashed var(--line);flex-wrap:wrap}
.case-meta div{font-size:12px;color:var(--muted2)}
.case-meta b{display:block;font-size:15px;color:var(--navy);font-weight:800;font-family:Arial,sans-serif;margin-top:2px}

/* ============================================================
   全球出口网络
   ============================================================ */
.map-card{
  position:relative;overflow:hidden;
  border-radius:var(--r-lg);
  padding:22px 24px 24px;
  background:
    radial-gradient(700px 380px at 78% 10%, rgba(255,122,24,.14), transparent 62%),
    radial-gradient(620px 380px at 4% 92%, rgba(45,110,180,.22), transparent 64%),
    linear-gradient(155deg,#0d2136 0%,#08131f 62%,#050d16 100%);
  border:1px solid rgba(255,255,255,.08);
  box-shadow:0 22px 54px rgba(8,19,31,.28);
}
.map-card::before{
  content:"";position:absolute;inset:0;pointer-events:none;opacity:.5;
  background-image:
    linear-gradient(rgba(255,255,255,.04) 1px, transparent 1px),
    linear-gradient(90deg, rgba(255,255,255,.04) 1px, transparent 1px);
  background-size:52px 52px;
  -webkit-mask-image:radial-gradient(ellipse at 50% 40%, #000 10%, transparent 82%);
          mask-image:radial-gradient(ellipse at 50% 40%, #000 10%, transparent 82%);
}
.map-card > *{position:relative;z-index:1}

.map-card-head{
  display:flex;align-items:center;justify-content:space-between;gap:22px;
  flex-wrap:wrap;padding-bottom:14px;margin-bottom:18px;
  border-bottom:1px solid rgba(255,255,255,.08);
}
.mch-title h3{font-size:16px;font-weight:800;color:#fff;line-height:1.4}
.mch-title p{font-size:12px;color:#8ba3ba;margin-top:4px}
.mch-kpis{display:flex;gap:24px;flex-wrap:wrap}
.mch-kpis > div{line-height:1.15}
.mch-kpis b{display:block;font-size:20px;font-family:Arial,sans-serif;font-weight:800;color:var(--accent);letter-spacing:-.4px}
.mch-kpis b i{font-style:normal;font-size:11.5px;color:var(--accent2);letter-spacing:0}
.mch-kpis span{display:block;font-size:11px;color:#8ba3ba;margin-top:4px;white-space:nowrap}

.map-body{
  display:grid;grid-template-columns:minmax(0,1.85fr) minmax(256px,1fr);
  gap:22px;align-items:center;
}
.map-canvas{display:flex;justify-content:center;align-items:center;width:100%}
.map-svg{width:100%;max-height:312px;height:auto;display:block;overflow:visible}
.map-svg a{text-decoration:none}
.map-grid line{stroke:rgba(255,255,255,.055);stroke-width:1}

.m-region path{
  fill:#16334d;stroke:#2b567c;stroke-width:1.1;
  transition:fill .3s,stroke .3s;cursor:pointer;
}
.m-region:hover path{fill:#ff7a18;stroke:#ffb15c}

.m-pin{cursor:pointer}
.m-pin .pin-dot{fill:#ff7a18;transition:fill .25s}
.m-pin .pin-pulse{
  fill:#ff7a18;opacity:.55;
  transform-box:fill-box;transform-origin:center;
  animation:pinPulse 2.6s ease-out infinite;
}
.m-pin text{
  fill:#a9bed3;font-size:13px;font-weight:700;
  font-family:inherit;transition:fill .25s;
  paint-order:stroke;stroke:rgba(5,14,23,.9);stroke-width:3px;stroke-linejoin:round;
}
.m-pin:hover .pin-dot{fill:#ffb15c}
.m-pin:hover text{fill:#fff}
@keyframes pinPulse{
  0%{transform:scale(.5);opacity:.65}
  100%{transform:scale(2.8);opacity:0}
}

.map-legend{display:flex;flex-direction:column;gap:7px;margin:0}
.map-lg{
  display:grid;grid-template-columns:auto minmax(0,1fr) auto;align-items:center;gap:10px;
  padding:8px 12px;border-radius:10px;
  background:rgba(255,255,255,.045);
  border:1px solid rgba(255,255,255,.09);
  transition:.26s var(--ease);
}
.map-lg:hover{background:rgba(255,122,24,.13);border-color:rgba(255,122,24,.42);transform:translateX(3px)}
.map-lg b{font-size:13px;font-weight:800;color:#fff;white-space:nowrap}
.map-lg span{
  font-size:11px;color:#839bb3;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;
  transition:color .2s;
}
.map-lg:hover span{color:#cfe0f0}
.map-lg i{
  font-style:normal;font-size:10.5px;font-weight:800;color:var(--accent2);
  background:rgba(255,122,24,.14);border:1px solid rgba(255,122,24,.26);
  padding:2px 8px;border-radius:99px;white-space:nowrap;
}

/* ============================================================
   合作流程
   ============================================================ */
.process-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(230px,1fr));gap:20px}
.process-item{
  position:relative;overflow:hidden;
  background:rgba(255,255,255,.05);border:1px solid rgba(255,255,255,.1);
  border-radius:var(--r);padding:30px 24px;transition:.32s var(--ease);
}
.process-item:hover{background:rgba(255,255,255,.09);transform:translateY(-5px);border-color:rgba(255,122,24,.5)}
.pi-num{
  position:absolute;top:16px;right:20px;font-family:Arial,sans-serif;
  font-size:46px;font-weight:800;line-height:1;color:rgba(255,255,255,.07);letter-spacing:-2px;
}
.pi-ic{
  width:48px;height:48px;border-radius:13px;display:grid;place-items:center;
  background:rgba(255,122,24,.16);color:var(--accent);margin-bottom:16px;transition:.3s;
}
.process-item:hover .pi-ic{background:var(--accent);color:#fff}
.pi-ic svg{width:23px;height:23px;stroke:currentColor;fill:none;stroke-width:1.8;stroke-linecap:round;stroke-linejoin:round}
.process-item h4{font-size:16.5px;font-weight:700;color:#fff;margin-bottom:9px}
.process-item p{font-size:13.5px;color:#a9bed3;line-height:1.8}

/* ============================================================
   关于
   ============================================================ */
.about-grid{display:grid;grid-template-columns:1.1fr 1fr;gap:56px;align-items:center}
.about-text h2{font-size:clamp(24px,3vw,34px);font-weight:800;line-height:1.35;margin-bottom:20px;color:var(--navy)}
.about-text > p{font-size:15px;color:#3d5570;line-height:1.95;margin-bottom:16px}
.about-list{display:flex;flex-direction:column;gap:14px;margin-top:26px}
.about-list li{display:flex;gap:12px;align-items:flex-start;font-size:14.5px;color:#33475c}
.about-list svg{width:20px;height:20px;flex:none;margin-top:3px;stroke:var(--accent);fill:none;stroke-width:2.2;stroke-linecap:round;stroke-linejoin:round}
.about-list b{color:var(--navy)}
.about-cta{display:flex;gap:12px;flex-wrap:wrap;margin-top:30px}
.about-panel{
  position:relative;overflow:hidden;border-radius:var(--r-lg);padding:36px;
  background:linear-gradient(150deg,var(--navy2),var(--navy));color:#fff;
  box-shadow:var(--shadow-lg);
}
.about-panel::before{
  content:"";position:absolute;inset:0;opacity:.45;
  background-image:
    linear-gradient(rgba(255,255,255,.05) 1px,transparent 1px),
    linear-gradient(90deg,rgba(255,255,255,.05) 1px,transparent 1px);
  background-size:42px 42px;
}
.about-panel > *{position:relative;z-index:1}
.about-panel .q{font-size:13px;letter-spacing:2px;color:var(--accent);font-weight:700;font-family:Arial,sans-serif;margin-bottom:18px}
.about-panel h3{font-size:24px;font-weight:800;line-height:1.5;margin-bottom:16px}
.about-panel p{font-size:14.5px;color:#a9bed3;line-height:1.9;margin-bottom:26px}
.about-mini{display:grid;grid-template-columns:1fr 1fr;gap:14px}
.about-mini div{background:rgba(255,255,255,.06);border:1px solid rgba(255,255,255,.09);border-radius:11px;padding:15px}
.about-mini b{display:block;font-size:22px;font-family:Arial,sans-serif;color:var(--accent2);line-height:1.2}
.about-mini b i{font-style:normal;font-size:13px;margin-left:2px}
.about-mini small{font-size:12px;color:#8ba3ba}

/* ============================================================
   联系我们
   ============================================================ */
.contact-grid{display:grid;grid-template-columns:1fr 1.05fr;gap:56px;align-items:start}
/* 联系页 / 询价页的 .contact-grid 有**三个**孩子（联系方式 | 地图 | 表单）⇒ 表单会掉到第二行
   只占左半格，右边空着。让它整行铺开。
   首页同一个栅格只有两个孩子（联系方式 | 表单），:nth-child(3) 不会命中 ⇒ 首页布局不变。 */
.contact-grid>.form-card:nth-child(3){grid-column:1/-1}
.contact-info-list{display:flex;flex-direction:column;gap:16px}
.contact-info-list .ci{display:flex;gap:14px;align-items:flex-start}
.ci-ic{
  width:46px;height:46px;border-radius:12px;flex:none;display:grid;place-items:center;
  background:linear-gradient(140deg,#eef4fa,#dfe9f5);color:var(--steel);
}
.ci-ic svg{width:21px;height:21px;stroke:currentColor;fill:none;stroke-width:1.9;stroke-linecap:round;stroke-linejoin:round}
.contact-info-list .ci b{display:block;font-size:12.5px;color:var(--muted);font-weight:600;margin-bottom:3px;letter-spacing:.3px}
.contact-info-list .ci span{font-size:15px;font-weight:600;color:var(--navy);line-height:1.6;word-break:break-word}
.contact-map{
  position:relative;overflow:hidden;height:220px;margin-top:26px;
  border-radius:var(--r-lg);border:1px solid var(--line);
  background:linear-gradient(150deg,var(--navy2),var(--navy3));
  display:grid;place-items:center;
}
.contact-map::before{
  content:"";position:absolute;inset:0;opacity:.5;
  background-image:
    linear-gradient(rgba(255,255,255,.05) 1px,transparent 1px),
    linear-gradient(90deg,rgba(255,255,255,.05) 1px,transparent 1px);
  background-size:46px 46px;
}
.contact-map > svg{width:56px;height:56px;stroke:var(--accent);fill:none;stroke-width:1.6;position:relative;z-index:1}
.map-tx{position:absolute;bottom:20px;left:22px;right:22px;z-index:2;color:#fff}
.map-tx b{display:block;font-size:15px;font-weight:700;margin-bottom:4px}
.map-tx span{font-size:12.5px;color:#a9bed3}
.form-card{background:#fff;border-radius:var(--r-lg);padding:36px;box-shadow:0 6px 30px rgba(8,19,31,.09);border:1px solid var(--line)}
.form-card h3{font-size:20px;font-weight:800;color:var(--navy);margin-bottom:5px}
.form-card .fs{font-size:13px;color:var(--muted);margin-bottom:24px}
.fgrid{display:grid;grid-template-columns:1fr 1fr;gap:14px}
.field{display:flex;flex-direction:column;gap:7px;margin-bottom:14px}
.field.full{grid-column:1 / -1}
.field label{font-size:12.5px;font-weight:700;color:#33475c}
.field input,.field select,.field textarea{
  width:100%;padding:12px 14px;border:1.5px solid var(--line);border-radius:10px;
  font-size:14px;color:var(--text);background:#fbfcfe;transition:.25s;outline:none;
}
.field textarea{resize:vertical;min-height:86px}
.field input:focus,.field select:focus,.field textarea:focus{border-color:var(--accent);background:#fff;box-shadow:0 0 0 4px rgba(255,122,24,.11)}
.field input::placeholder,.field textarea::placeholder{color:#a9b8c8}
.upload{
  display:block;border:1.5px dashed #cfdae6;border-radius:10px;padding:16px;
  text-align:center;background:#fbfcfe;cursor:pointer;transition:.25s;
}
.upload:hover{border-color:var(--accent);background:#fff8f2}
.upload input{display:none}
.upload svg{width:22px;height:22px;stroke:var(--muted2);fill:none;stroke-width:1.8;margin:0 auto 7px;stroke-linecap:round;stroke-linejoin:round}
.upload b{display:block;font-size:13px;color:var(--navy);font-weight:700}
.upload small{display:block;font-size:11.5px;color:var(--muted2);margin-top:3px}
.upload .fname{display:block;color:var(--accent);font-weight:700;font-size:12.5px;margin-top:8px;word-break:break-all}
.btn-submit{width:100%;padding:14px;font-size:15.5px;margin-top:6px}
.form-tip{font-size:11.5px;color:var(--muted2);text-align:center;margin-top:12px}

/* ============================================================
   底部 CTA
   ============================================================ */
.cta-band{
  position:relative;overflow:hidden;padding:54px 0;
  background:linear-gradient(120deg,#ff7a18,#ff5e00);color:#fff;
}
.cta-band::before{
  content:"";position:absolute;inset:0;opacity:.16;
  background-image:
    linear-gradient(rgba(255,255,255,.5) 1px,transparent 1px),
    linear-gradient(90deg,rgba(255,255,255,.5) 1px,transparent 1px);
  background-size:44px 44px;
}
.cta-inner{position:relative;z-index:1;display:flex;align-items:center;justify-content:space-between;gap:32px;flex-wrap:wrap}
.cta-band h2{font-size:clamp(22px,2.6vw,30px);font-weight:800;line-height:1.35;margin-bottom:10px;color:#fff}
.cta-band p{font-size:15px;color:rgba(255,255,255,.92);max-width:620px}
.cta-actions{display:flex;gap:12px;flex-wrap:wrap}
.cta-band .btn-primary{background:var(--navy);box-shadow:0 8px 22px rgba(0,0,0,.25)}
.cta-band .btn-primary:hover{background:#0e2136;box-shadow:0 12px 30px rgba(0,0,0,.35)}
.cta-band .btn-light{background:rgba(255,255,255,.18);border-color:rgba(255,255,255,.45);color:#fff}
.cta-band .btn-light:hover{background:rgba(255,255,255,.3)}

/* ============================================================
   页脚
   ============================================================ */
footer{background:#050e17;color:#7d95ad;padding:62px 0 0;font-size:14px}
/* 页脚栅格：列数由内容决定（品牌区占两列宽）。
 *
 * 2026-10-21：去掉「材质」整栏之后是「品牌(占2) + 产品/质量认证/关于 + 联系方式」= 6 格。
 *   原来 7 格时，材质栏那五条短链接（304/304L/316L/321/201）把列宽拖得很窄，
 *   "质量认证""关于我们"这类四字标题就被挤到换行。
 *   minmax 从 148 提到 160，让剩下的三列各多 12px 呼吸空间，
 *   在 1080（本次反馈的屏宽）到 1440 之间都能一行排开。 */
.f-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(160px,1fr));gap:34px;padding-bottom:46px}
.f-brand{grid-column:span 2}
@media (max-width:640px){.f-brand{grid-column:auto}}
.f-brand .logo-text b{color:#fff}
.f-brand .logo-text small{color:#5f7690}
.f-brand > p{margin:18px 0;line-height:1.9;color:#7d95ad;font-size:13.5px;max-width:330px}
.f-domain{
  display:inline-flex;align-items:center;gap:8px;padding:8px 14px;border-radius:9px;
  background:rgba(255,255,255,.05);border:1px solid rgba(255,255,255,.1);
  color:var(--accent2);font-family:Arial,sans-serif;font-weight:700;font-size:13px;
}
.f-domain svg{width:14px;height:14px;stroke:currentColor;fill:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round}
footer h4{color:#fff;font-size:14.5px;font-weight:700;margin-bottom:18px}
footer ul li{margin-bottom:10px}
footer ul a{transition:.25s;font-size:13.5px;display:inline-flex;align-items:center;gap:7px}
footer ul a::before{content:"";width:0;height:1px;background:var(--accent);transition:.25s}
footer ul a:hover{color:var(--accent2)}
footer ul a:hover::before{width:10px}
.f-contact li{display:flex;gap:10px;margin-bottom:13px;line-height:1.7;font-size:13.5px}
.f-contact svg{width:15px;height:15px;flex:none;margin-top:4px;stroke:var(--accent);fill:none;stroke-width:1.9;stroke-linecap:round;stroke-linejoin:round}
.f-social{display:flex;gap:9px;flex-wrap:wrap;margin-top:18px}
.f-social a{
  width:36px;height:36px;border-radius:10px;display:grid;place-items:center;
  background:rgba(255,255,255,.06);border:1px solid rgba(255,255,255,.1);transition:.28s;
}
.f-social a svg{width:15px;height:15px;fill:#8ba3ba;transition:.28s}
.f-social a:hover{background:var(--accent);border-color:var(--accent);transform:translateY(-3px)}
.f-social a:hover svg{fill:#fff}
.f-bottom{
  border-top:1px solid rgba(255,255,255,.08);padding:20px 0;
  display:flex;justify-content:space-between;gap:16px;flex-wrap:wrap;
  font-size:12.5px;color:#5f7690;
}
.f-bottom a:hover{color:var(--accent2)}
.f-links{display:flex;gap:18px;flex-wrap:wrap}

/* ============================================================
   Cookie 同意弹窗
   ============================================================ */
.cookie{
  position:fixed;left:0;right:0;bottom:0;z-index:260;
  padding:0 18px 18px;pointer-events:none;
  transform:translateY(130%);
  transition:transform .55s var(--ease);
}
.cookie.show{transform:translateY(0)}
.cookie-card{
  pointer-events:auto;max-width:1120px;margin:0 auto;
  background:rgba(10,24,38,.97);
  backdrop-filter:blur(14px);-webkit-backdrop-filter:blur(14px);
  color:#fff;border-radius:18px;border:1px solid rgba(255,255,255,.12);
  box-shadow:0 26px 70px rgba(5,14,23,.5);
  padding:20px 22px;position:relative;overflow:hidden;
}
.cookie-card::before{
  content:"";position:absolute;left:0;top:0;right:0;height:3px;
  background:linear-gradient(90deg,var(--accent),var(--accent2),transparent);
}
.cookie-main{display:flex;gap:15px;align-items:flex-start}
.cookie-ic{
  width:44px;height:44px;border-radius:13px;flex:none;display:grid;place-items:center;
  background:linear-gradient(140deg,var(--accent),#ff5e00);
  box-shadow:0 8px 20px rgba(255,122,24,.35);
}
.cookie-ic svg{width:23px;height:23px;stroke:#fff;fill:none;stroke-width:1.9;stroke-linecap:round;stroke-linejoin:round}
.cookie-tx{flex:1;min-width:0}
.cookie-tx b{display:block;font-size:15.5px;font-weight:800;margin-bottom:5px}
.cookie-tx p{font-size:13px;line-height:1.8;color:#a9bed3;max-width:760px}
.cookie-tx a{color:var(--accent2);text-decoration:underline;text-underline-offset:2px}
.cookie-actions{
  display:flex;align-items:center;gap:10px;flex-wrap:wrap;
  margin-top:16px;padding-top:16px;border-top:1px solid rgba(255,255,255,.1);
}
.cookie-link{
  font-size:13px;font-weight:700;color:#a9bed3;padding:9px 14px;border-radius:9px;
  transition:.25s;margin-right:auto;
}
.cookie-link:hover{color:#fff;background:rgba(255,255,255,.08)}
.cookie-actions .btn{font-size:13.5px;padding:9px 18px}
.cookie-actions .btn-ghost{color:#dbe7f2;border-color:rgba(255,255,255,.22)}
.cookie-actions .btn-ghost:hover{background:rgba(255,255,255,.1);color:#fff;border-color:rgba(255,255,255,.4)}
.cookie-panel{
  max-height:0;overflow:hidden;opacity:0;
  transition:max-height .45s var(--ease),opacity .3s,margin .3s;
}
.cookie-panel.open{max-height:460px;opacity:1;margin-top:16px}
.cookie-opt{
  display:flex;gap:12px;align-items:flex-start;padding:12px 14px;border-radius:11px;
  background:rgba(255,255,255,.05);border:1px solid rgba(255,255,255,.09);
  margin-bottom:9px;cursor:pointer;transition:.22s;
}
.cookie-opt:hover{background:rgba(255,255,255,.09)}
.cookie-opt input{
  width:17px;height:17px;margin-top:2px;accent-color:var(--accent);
  flex:none;cursor:pointer;
}
.cookie-opt span{display:block;min-width:0}
.cookie-opt b{display:block;font-size:13.5px;font-weight:700;color:#fff;margin-bottom:2px}
.cookie-opt small{font-size:12px;color:#8ba3ba;line-height:1.6}
.cookie-panel .btn{width:100%;margin-top:4px;justify-content:center}

/* ============================================================
   悬浮 / 抽屉 / Toast
   ============================================================ */
.contact-fab{
  position:fixed;right:26px;bottom:26px;width:58px;height:58px;border-radius:18px;
  background:linear-gradient(135deg,var(--accent),#ff5e00);color:#fff;
  display:grid;place-items:center;z-index:150;cursor:pointer;
  box-shadow:0 14px 36px rgba(255,122,24,.42);transition:.32s var(--ease);
}
.contact-fab:hover{transform:translateY(-4px) scale(1.05);box-shadow:0 18px 44px rgba(255,122,24,.55)}
.contact-fab svg{width:26px;height:26px;stroke:#fff;fill:none;stroke-width:1.9;stroke-linecap:round;stroke-linejoin:round}
.contact-fab::after{
  content:"";position:absolute;inset:-5px;border-radius:23px;
  border:2px solid rgba(255,122,24,.5);animation:ring 2.4s infinite;pointer-events:none;
}
@keyframes ring{0%{transform:scale(.9);opacity:.8}100%{transform:scale(1.18);opacity:0}}
.fab-badge{
  position:absolute;top:-3px;right:-3px;min-width:20px;height:20px;border-radius:10px;
  background:#0f9d58;color:#fff;font-size:11px;font-weight:800;
  display:grid;place-items:center;font-family:Arial,sans-serif;border:2px solid #fff;
}
.mask{
  position:fixed;inset:0;background:rgba(5,14,23,.6);
  backdrop-filter:blur(4px);-webkit-backdrop-filter:blur(4px);
  z-index:190;opacity:0;visibility:hidden;transition:.34s;
}
.mask.open{opacity:1;visibility:visible}
.drawer{
  position:fixed;top:0;right:0;height:100%;width:min(400px,92vw);background:#fff;
  z-index:200;transform:translateX(105%);transition:transform .4s cubic-bezier(.4,0,.2,1);
  display:flex;flex-direction:column;box-shadow:-18px 0 56px rgba(5,14,23,.3);
}
.drawer.open{transform:translateX(0)}

/* 抽屉顶部搜索框（移动端唯一的搜索入口，2026-10-24 加）
 * ------------------------------------------------------------
 * ≤560px 时顶栏的 `.tb-search` 是 display:none（不隐藏会把电话/关注/国别挤出屏幕），
 * 因此手机上没有搜索入口 —— 这里补一个，提交后跳 `/search.html?q=`（与顶栏同一套接口）。
 * 位置在 `.dr-body` 顶部（白底），所以用白底表单样式；不要塞进 `.dr-head`（深色渐变）。 */
.dr-search{display:flex;gap:8px;margin:0 0 18px}
.dr-search input{
  flex:1;min-width:0;height:42px;padding:0 13px;border-radius:11px;
  border:1px solid var(--line);background:#f6f9fc;color:var(--navy);font-size:13.5px;
}
.dr-search input:focus{outline:none;border-color:var(--accent);background:#fff}
.dr-search input::placeholder{color:var(--muted2)}
.dr-search button{
  flex:none;width:42px;height:42px;border:0;border-radius:11px;cursor:pointer;
  background:var(--accent);color:#fff;display:grid;place-items:center;transition:.25s;
}
.dr-search button:hover{filter:brightness(1.06)}
.dr-search button svg{width:18px;height:18px;fill:none;stroke:currentColor;stroke-width:2;stroke-linecap:round;stroke-linejoin:round}
.dr-head{
  position:relative;overflow:hidden;flex:none;padding:26px 24px 22px;
  background:linear-gradient(150deg,var(--navy2),var(--navy));color:#fff;
}
.dr-head::before{
  content:"";position:absolute;inset:0;
  background:radial-gradient(280px 180px at 88% 12%,rgba(255,122,24,.28),transparent 65%);
}
.dr-head > *{position:relative;z-index:1}
.dr-head h3{font-size:19px;font-weight:800;margin-bottom:5px}
.dr-head p{font-size:12.5px;color:#9db4cc}
.dr-head .status{
  display:inline-flex;align-items:center;gap:6px;margin-top:12px;
  font-size:11.5px;color:#22c55e;font-weight:700;
  background:rgba(34,197,94,.14);padding:4px 10px;border-radius:7px;
}
.dr-head .status i{width:6px;height:6px;border-radius:50%;background:#22c55e;animation:pulse2 1.6s infinite}
@keyframes pulse2{50%{opacity:.3}}
.dr-close{
  position:absolute;top:20px;right:20px;width:34px;height:34px;border-radius:10px;
  background:rgba(255,255,255,.1);border:1px solid rgba(255,255,255,.18);color:#fff;
  display:grid;place-items:center;transition:.25s;z-index:2;cursor:pointer;
}
.dr-close:hover{background:rgba(255,255,255,.22);transform:rotate(90deg)}
.dr-close svg{width:16px;height:16px;stroke:currentColor;fill:none;stroke-width:2.4;stroke-linecap:round;stroke-linejoin:round}
.dr-body{flex:1;overflow-y:auto;padding:22px 24px}
.dr-body::-webkit-scrollbar{width:5px}
.dr-body::-webkit-scrollbar-thumb{background:#dde6ef;border-radius:3px}
.dr-sec{margin-bottom:26px}
.dr-sec:last-child{margin-bottom:0}
.dr-title{font-size:11.5px;font-weight:800;letter-spacing:1.6px;color:var(--muted2);text-transform:uppercase;margin-bottom:13px}
.dr-quick{display:flex;flex-direction:column;gap:9px}
.dr-q{
  display:flex;align-items:center;gap:13px;width:100%;text-align:left;
  padding:14px 15px;border-radius:12px;border:1.5px solid var(--line);
  background:#fbfcfe;transition:.28s;cursor:pointer;
}
.dr-q:hover{border-color:transparent;transform:translateX(4px);box-shadow:0 8px 22px rgba(8,19,31,.1)}
.dr-q-ic{width:40px;height:40px;border-radius:11px;flex:none;display:grid;place-items:center;transition:.28s}
.dr-q-ic svg{width:20px;height:20px;fill:#fff}
.dr-q-tx{flex:1;min-width:0}
.dr-q-tx b{display:block;font-size:14px;font-weight:700;color:var(--navy);line-height:1.3}
.dr-q-tx small{display:block;font-size:11.5px;color:var(--muted2)}
.dr-q-arrow{margin-left:auto;color:#c3d0dc;transition:.28s}
.dr-q-arrow svg{width:15px;height:15px;stroke:currentColor;fill:none;stroke-width:2.4;stroke-linecap:round;stroke-linejoin:round}
.dr-q:hover .dr-q-arrow{color:var(--accent);transform:translateX(3px)}
.dr-q.wa .dr-q-ic{background:#25d366}
.dr-q.wa:hover{background:#f0fdf4;border-color:#25d366}
.dr-q.tel .dr-q-ic{background:linear-gradient(135deg,var(--accent),#ff5e00)}
.dr-q.tel:hover{background:#fff8f2;border-color:var(--accent)}
.dr-q.mail .dr-q-ic{background:var(--steel)}
.dr-q.mail:hover{background:#f4f8fc;border-color:var(--steel)}
.dr-social{display:grid;grid-template-columns:repeat(4,1fr);gap:9px}
.dr-social a{
  aspect-ratio:1;border-radius:12px;display:grid;place-items:center;
  background:#f4f8fc;border:1px solid var(--line);transition:.28s;
}
.dr-social a svg{width:20px;height:20px;fill:#5f7690;transition:.28s}
.dr-social a:hover{transform:translateY(-4px);border-color:transparent}
.dr-social a:hover svg{fill:#fff}
.dr-social a.li:hover{background:#0a66c2}
.dr-social a.yt:hover{background:#ff0000}
.dr-social a.fb:hover{background:#1877f2}
.dr-social a.tg:hover{background:#29a9eb}
.dr-info{display:flex;flex-direction:column;gap:13px}
.dr-i{display:flex;gap:11px;align-items:flex-start;font-size:13.5px;color:#3d5570;line-height:1.6}
.dr-i svg{width:16px;height:16px;flex:none;margin-top:3px;stroke:var(--accent);fill:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round}
.dr-i b{color:var(--navy);font-weight:600;display:block;font-size:13px;margin-bottom:1px}
.dr-foot{padding:18px 24px;border-top:1px solid var(--line);background:#fbfcfe;flex:none}
.dr-foot .btn{width:100%;padding:13px;font-size:14.5px}

.top-btn{
  position:fixed;right:26px;bottom:96px;width:44px;height:44px;border-radius:13px;
  background:#fff;color:var(--navy);display:grid;place-items:center;cursor:pointer;
  border:1px solid var(--line);opacity:0;visibility:hidden;transform:translateY(14px);
  transition:.35s var(--ease);z-index:140;box-shadow:0 8px 24px rgba(8,19,31,.14);
}
.top-btn.show{opacity:1;visibility:visible;transform:translateY(0)}
.top-btn:hover{background:var(--navy);color:#fff;border-color:var(--navy)}
.top-btn svg{width:18px;height:18px;stroke:currentColor;fill:none;stroke-width:2.4;stroke-linecap:round;stroke-linejoin:round}

.toast{
  position:fixed;left:50%;bottom:38px;transform:translateX(-50%) translateY(24px);
  background:var(--navy);color:#fff;padding:13px 24px;border-radius:11px;
  font-size:14px;font-weight:600;box-shadow:0 18px 44px rgba(8,19,31,.3);
  z-index:300;opacity:0;visibility:hidden;
  transition:.34s var(--ease);display:flex;align-items:center;gap:9px;
  max-width:calc(100vw - 32px);
}
.toast.show{opacity:1;visibility:visible;transform:translateX(-50%) translateY(0)}
.toast svg{width:17px;height:17px;stroke:#22c55e;fill:none;stroke-width:2.6;flex:none;stroke-linecap:round;stroke-linejoin:round}
.toast.err svg{stroke:#ff6b6b}

.reveal{opacity:0;transform:translateY(24px);transition:opacity .75s var(--ease),transform .75s var(--ease)}
.reveal.in{opacity:1;transform:none}

/* ============================================================
   响应式
   ============================================================ */
@media (max-width:1200px){
  .menu > li > a{padding:10px 11px;font-size:14px}
  .sub-wide{width:min(820px,94vw)}
  .tb-search input{width:130px}
  .tb-search:focus-within input{width:170px}
}
@media (max-width:1080px){
  .contact-grid{grid-template-columns:1fr;gap:40px}
  .about-grid{grid-template-columns:1fr;gap:40px}
  .f-grid{grid-template-columns:1fr 1fr;gap:34px}
  .fac-metrics{grid-template-columns:1fr 1fr}
}
@media (max-width:960px){
  html{scroll-padding-top:78px}
  .tb-hide-sm{display:none}
  .tb-search{display:none}
  .nav{height:66px}
  header.scrolled .nav{height:62px}
  .menu{
    position:fixed;top:0;right:0;height:100vh;width:min(340px,88vw);
    background:#fff;flex-direction:column;align-items:stretch;gap:2px;
    padding:92px 18px 34px;box-shadow:-14px 0 44px rgba(8,19,31,.16);
    transform:translateX(105%);transition:transform .4s cubic-bezier(.4,0,.2,1);
    z-index:120;overflow-y:auto;display:flex;
  }
  .menu.open{transform:translateX(0)}
  .menu > li > a{
    padding:14px;font-size:16px;border-radius:10px;justify-content:space-between;
    background:none;
    /* 抽屉是竖排列表，宽度充足 —— 恢复换行（长语言在这里不需要缩字号） */
    white-space:normal;
  }
  .menu > li > a::after{display:none}
  .menu > li > a:hover{background:#f3f8fd}
  .menu > li.active > a{background:var(--accent3);color:var(--accent)}
  .menu > li > a .caret{width:14px;height:14px;opacity:.5}
  .sub{
    position:static;transform:none;opacity:1;visibility:visible;
    box-shadow:none;border:none;background:#f7fafd;border-radius:10px;
    padding:0 8px;max-height:0;overflow:hidden;width:100% !important;
    display:block !important;transition:max-height .4s cubic-bezier(.4,0,.2,1),padding .3s;
    left:auto;
  }
  .menu > li.sub-open .sub{max-height:1400px;padding:8px;margin-top:4px}
  .menu > li.sub-open > a .caret{transform:rotate(180deg)}
  .sub::before,.sub::after{display:none}
  .sub-wide{grid-template-columns:1fr;padding:0 8px}
  .sub-prod-grid{grid-template-columns:1fr}
  .sub-side{margin-top:12px;background:#fff}
  .sub-promo{margin-top:12px}
  .burger{display:grid}
  .rfq-btn .rfq-txt{display:none}
  .rfq-btn{padding:10px 12px}
  .btn-nav{padding:10px 16px;font-size:14px}

  .hero-slide{min-height:auto}
  .hero .hero-inner{padding-top:58px;padding-bottom:96px}
  .hero-copy p{font-size:14px}
  .hero-nav{padding-bottom:18px}
  .hero-nav-inner{flex-direction:column;align-items:flex-start;gap:14px}

  .section{padding:58px 0}
  .section-tight{padding:44px 0}
  .f-grid{grid-template-columns:1fr;gap:32px}
  .f-bottom{flex-direction:column;text-align:center;align-items:center}
  .cta-inner{flex-direction:column;align-items:flex-start}
  .cta-actions{width:100%}
  .cta-actions .btn{flex:1;min-width:150px}
  .cookie{padding:0 12px 12px}
  .cookie-card{padding:18px;border-radius:16px}
  .cookie-main{gap:12px}
  .cookie-ic{width:38px;height:38px;border-radius:11px}
  .cookie-ic svg{width:20px;height:20px}
  .cookie-actions{margin-top:14px;padding-top:14px}
  .cookie-link{margin-right:0;width:100%;text-align:left;padding:6px 2px}
  .cookie-actions .btn{flex:1;min-width:120px}

  .map-card{padding:18px 18px 20px}
  .map-card-head{gap:14px;padding-bottom:12px;margin-bottom:14px}
  .mch-kpis{gap:18px}
  .mch-kpis b{font-size:18px}
  .map-body{grid-template-columns:1fr;gap:16px}
  .map-svg{max-height:260px}
  .map-legend{display:grid;grid-template-columns:1fr 1fr;gap:7px}
  .map-lg{padding:7px 10px}

  .fac-hero .plant-art{opacity:.5;width:52%}
  .fac-hero .fv-txt{max-width:66%}
}
@media (max-width:720px){
  .stats-grid{grid-template-columns:repeat(3,1fr);gap:20px 12px}
  .stat b{font-size:22px}
  .hero-copy h1,.hero-copy h2{font-size:clamp(25px,6.6vw,36px)}
  .hero-actions .btn{flex:1;min-width:140px}
  .fac-metrics{grid-template-columns:1fr 1fr}
  .fac-hero{min-height:230px;padding:24px}
  .fac-hero .plant-art{display:none}
  .fac-hero .fv-txt{max-width:100%}
  .fac-play{right:20px;bottom:20px;padding:8px 15px 8px 9px;font-size:12.5px}
  .form-card{padding:26px 20px}
  .fgrid{grid-template-columns:1fr}
  .process-grid{grid-template-columns:1fr}
  .m-pin text{display:none}
}
@media (max-width:560px){
  .wrap{padding:0 18px}
  .topbar .wrap{min-height:44px;gap:10px}
  .tb-left{gap:12px}
  .tb-item span{font-size:12px}
  .tb-item.tb-hide-sm{display:none}
  /* ★ 必须是 min-height（不能写 height）：这两个按钮现在允许换行成两行，
     写死 height 会在窄屏把第二行裁掉（内容还在，只是看不见）。 */
  .tb-lang-link,.tb-social-cur,.tb-country-cur{height:auto;min-height:32px;padding:5px 10px;font-size:12px;gap:6px}
  .tb-social-cur,.tb-country-cur{max-width:170px}
  .tb-lang-link i{font-size:9px;padding:2px 4px}
  .tb-social-menu{min-width:190px}
  .logo-mark{width:38px;height:38px;border-radius:10px}
  .logo-mark span{font-size:14px}
  .logo-text b{font-size:17px}
  .logo-text small{display:none}

  .hero .hero-inner{padding-top:46px;padding-bottom:92px}
  .hero-tag{font-size:11.5px;padding:5px 12px;margin-bottom:12px}
  .hero-copy h1,.hero-copy h2{font-size:clamp(23px,7vw,30px);margin-bottom:12px}
  .hero-copy p{font-size:13.5px;margin-bottom:18px}
  .hero-actions{flex-direction:column;width:100%}
  .hero-actions .btn{width:100%}
  .hero-arrows{gap:8px}
  .hero-arrow{width:38px;height:38px}
  .hero-dots{gap:6px}
  .hero-dots button{width:22px}
  .hero-dots button.on{width:38px}

  .stats-strip{padding:22px 0 24px}
  .stats-grid{grid-template-columns:1fr 1fr;gap:18px 10px}
  .stat b{font-size:21px}
  .stat > span{font-size:11px}

  .section{padding:50px 0}
  .section-tight{padding:40px 0}
  .sec-head{margin-bottom:30px}
  .sec-head h2{font-size:22px}
  .sec-head p{font-size:14.5px}
  .prod-grid{grid-template-columns:1fr}
  .apps-grid{grid-template-columns:1fr}
  .case-grid{grid-template-columns:1fr}
  .news-grid{grid-template-columns:1fr}
  .news-thumb{height:170px}
  .fac-caps{grid-template-columns:1fr}
  .cert-wall{grid-template-columns:1fr 1fr;gap:12px}
  .cert-card{padding:18px 12px}
  .cert-card .ci{width:46px;height:46px;margin-bottom:10px}
  .cert-card b{font-size:13.5px}
  .filter-bar{padding:14px 14px;gap:8px}
  .chip{padding:6px 13px;font-size:12.5px}
  .about-mini{grid-template-columns:1fr 1fr}
  .about-panel{padding:28px 22px}
  .about-cta .btn{flex:1;min-width:140px}
  .contact-map{height:190px}
  .btn-submit{padding:13px}
  .cta-band{padding:42px 0}
  .cta-actions{flex-direction:column}
  .cta-actions .btn{width:100%}
  .contact-fab{right:16px;bottom:16px;width:54px;height:54px;border-radius:16px}
  .top-btn{right:16px;bottom:84px;width:42px;height:42px}
  .toast{bottom:88px;font-size:13.5px;padding:12px 18px}
  .dr-social{grid-template-columns:repeat(4,1fr)}

  .map-card{padding:16px 14px 18px;border-radius:14px}
  .map-card-head{gap:12px;padding-bottom:12px;margin-bottom:14px}
  .mch-title h3{font-size:15px}
  .mch-title p{font-size:11.5px}
  .mch-kpis{display:grid;grid-template-columns:1fr 1fr;gap:12px;width:100%}
  .mch-kpis b{font-size:17px}
  .mch-kpis span{font-size:10.5px}
  .map-svg{max-height:220px}
  .map-legend{grid-template-columns:1fr;gap:6px}
  .map-lg{padding:7px 10px}
  .map-lg b{font-size:12.5px}
  .map-lg span{font-size:10.5px}
  .map-lg i{font-size:10px;padding:1px 7px}

  .cookie{padding:0 10px 10px}
  .cookie-card{padding:16px;border-radius:14px}
  .cookie-tx b{font-size:14.5px}
  .cookie-tx p{font-size:12.5px}
  .cookie-actions .btn{width:100%;flex:auto}
}


/* ============================================================
   国家/语言切换器（顶栏右上角）与国别页卡片
   —— 由后端片段 /frag/country-switch、/frag/countries 渲染，
      样式与 .tb-social 下拉保持同一套视觉（同一个位置、同样的圆角与阴影）
   ============================================================ */
.tb-country{position:relative;flex:none}
.tb-country-cur{
  display:inline-flex;align-items:center;gap:7px;height:34px;padding:0 12px;
  border-radius:9px;background:rgba(255,255,255,.06);
  border:1px solid rgba(255,255,255,.12);color:#cfe0f0;
  font-size:12.5px;font-weight:600;cursor:pointer;transition:.22s;white-space:nowrap;
}
.tb-country-cur:hover{background:rgba(255,255,255,.13);color:#fff}
.tb-country-cur .tb-caret{
  width:11px;height:11px;stroke:currentColor;fill:none;stroke-width:2.6;
  opacity:.6;transition:transform .3s;
}
.tb-country.open .tb-country-cur{background:rgba(255,255,255,.14);color:#fff;border-color:rgba(255,122,24,.5)}
.tb-country.open .tb-country-cur .tb-caret{transform:rotate(180deg)}
/* ★ 国旗容器：现在装的是**内联 SVG**（原来装 emoji ✗ Windows 不渲染 ✗）
   —— emoji 时代用 font-size 控制 ✓；SVG 时代改用显式宽高 ✓
   尺寸 20×14（3:2 ✓）与原来 emoji 的视觉大小接近 ✓ */
.tb-flag{flex:none;display:inline-flex;align-items:center;width:20px;height:14px;line-height:0}
.tb-flag svg{width:20px;height:14px;display:block;border-radius:1.5px;overflow:hidden}
/* 国旗加一道极淡的边（浅色旗如白/黄底在白背景上会"糊"✗） */
.tb-flag svg{box-shadow:0 0 0 .5px rgba(8,19,31,.22)}
.tb-country-menu{
  position:absolute;top:calc(100% + 10px);inset-inline-end:0;min-width:242px;
  max-height:min(70vh,520px);overflow:auto;
  background:#fff;border-radius:14px;border:1px solid var(--line);
  box-shadow:0 22px 54px rgba(8,19,31,.24);padding:8px;
  opacity:0;visibility:hidden;transform:translateY(8px);
  transition:.26s var(--ease);z-index:130;
}
.tb-country.open .tb-country-menu{opacity:1;visibility:visible;transform:translateY(0)}
.tb-country-item{
  display:flex;align-items:center;gap:10px;padding:9px 11px;border-radius:9px;
  font-size:13.5px;color:#33475c;font-weight:500;transition:.2s;white-space:nowrap;
}
.tb-country-item b{font-weight:600}
.tb-country-item em{font-style:normal;font-size:11.5px;color:var(--muted2);margin-inline-start:auto}
.tb-country-item:hover{background:var(--accent3);color:var(--accent)}
.tb-country-item.is-current{background:var(--accent3);color:var(--accent);font-weight:700}
.tb-country-item.is-current::after{content:"✓";font-size:12px;color:var(--accent2)}
.tb-country-all{
  display:block;margin-top:6px;padding:9px 11px;border-top:1px solid var(--line);
  border-radius:0 0 9px 9px;font-size:12.5px;color:var(--muted);text-align:center;
}
.tb-country-all:hover{color:var(--accent)}

/* ============================================================
   顶栏右侧两个按钮（「关注我们」/「国家·语言」）的**自适应宽度与字号**
   ------------------------------------------------------------
   问题（实测）：文案按国别翻译，长度差异极大 ——
     Follow us / Síguenos / تابعونا على وسائل التواصل / Theo dõi chúng tôi
   而这两个按钮是 `white-space:nowrap` + `flex:none`，于是：
     · 短文案：正常；长文案：把顶栏撑宽 / 把左侧电话邮箱挤到换行。
   做法三层（缺一不可）：
     ① `max-width` 限宽 —— 不让任何一种语言独占一行；
     ② `white-space:normal` 允许换行、`min-height` 保证一行时高度不变
        （**不能写死 height**，写死会把第二行裁掉：内容还在、只是看不见）；
     ③ 溢出时由 `site.js` 的 `fitTopbarButtons()` **逐级降字号**（12.5 → 10.5px）。
        CSS 没有"按内容长度缩放字号"的能力（clamp/vw 只看视口），
        所以"字号真的变小"必须由脚本量出来再改。
   ============================================================ */
.tb-social-cur,
.tb-country-cur{
  max-width:206px;
  height:auto;min-height:34px;
  padding:5px 10px;
  white-space:normal;
  line-height:1.18;
  text-align:center;
}
.tb-social-cur > span,
.tb-country-cur .tb-country-name{
  min-width:0;
  overflow-wrap:anywhere;
  word-break:break-word;
}
/* 图标不参与换行，也不被压缩 */
.tb-country-cur .tb-flag,
.tb-country-cur .tb-caret,
.tb-social-cur .tb-caret{flex:none}

/* ============================================================
   顶栏「图标 + 下拉」通用件（2026-10-24）
   ------------------------------------------------------------
   电话 / 邮箱 / 搜索 三个入口：桌面直接展开（两个号码并排、两个邮箱并排、搜索框），
   移动端（≤900px）收起成**图标按钮**，点击展开下拉面板。
   一份 DOM 两种形态 —— 两套 DOM 改一个号只改一半，这类不一致极难发现。
   ============================================================ */
.tb-drop{position:relative}
.tb-drop-btn{
  display:none;                     /* 桌面不显示图标按钮（桌面直接看得到号码/搜索框） */
  width:34px;height:34px;border:0;border-radius:9px;padding:0;
  background:rgba(255,255,255,.07);color:#fff;cursor:pointer;
  align-items:center;justify-content:center;transition:.2s;
}
.tb-drop-btn:hover{background:rgba(255,255,255,.16)}
.tb-drop-btn svg{width:16px;height:16px;stroke:currentColor;fill:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round}
.tb-nums{display:flex;align-items:center;gap:12px;min-width:0}
.tb-nums a{color:inherit;font-size:12.5px;text-decoration:none;white-space:nowrap;transition:color .2s}
.tb-nums a:hover{color:var(--accent)}
/* 两个号码/邮箱之间一条细竖线，否则两串数字挨在一起看不出是两个 */
.tb-nums a + a{position:relative}
.tb-nums a + a::before{
  content:"";position:absolute;left:-6px;top:50%;width:1px;height:11px;
  transform:translateY(-50%);background:rgba(255,255,255,.22);
}
/* 社交按钮的图标（只在移动端显示，桌面用文字"关注我们"） */
.tb-social-cur .tb-ic{
  display:none;width:16px;height:16px;flex:none;
  stroke:currentColor;fill:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;
}

/* ---------- 移动端：5 个入口全部收起为「图标 + 下拉」 ---------- */
@media (max-width:900px){
  .tb-left{gap:8px}
  .tb-drop-btn{display:inline-flex}

  /* 电话 / 邮箱的下拉面板 */
  .tb-nums{
    display:none;
    position:absolute;top:calc(100% + 10px);left:0;z-index:120;
    flex-direction:column;align-items:stretch;gap:0;
    min-width:212px;padding:12px 14px;border-radius:12px;
    background:#fff;border:1px solid var(--line);
    box-shadow:0 18px 44px rgba(5,14,23,.24);
  }
  .tb-drop.open .tb-nums{display:flex}
  .tb-nums a{width:100%;color:var(--navy);font-size:13px;font-weight:600;padding:3px 0}
  .tb-nums a:hover{color:var(--accent)}
  .tb-nums a + a{padding-top:10px;border-top:1px solid var(--line)}
  .tb-nums a + a::before{display:none}

  /* 搜索：图标按钮 + 下拉里的输入框
     ★ 面板不能相对**搜索按钮**定位：按钮在右侧，面板宽 320 会向左伸出屏幕（实测 375 宽下左边缘到 -35，
       输入框文字被裁）。这里让面板相对**整组按钮容器** `.tb-right` 定位，右对齐后一定在屏内。 */
  #searchDrop{position:static}
  .tb-right{position:relative}
  .tb-search{
    display:none;
    position:absolute;top:calc(100% + 6px);right:0;left:auto;z-index:120;
    width:min(320px,calc(100vw - 36px));
    padding:8px;border-radius:12px;background:#fff;border:1px solid var(--line);
    box-shadow:0 18px 44px rgba(5,14,23,.24);
  }
  .tb-drop.open .tb-search{display:flex}
  /* 输入框用 flex:1 而不是 width:100%：否则会把左侧放大镜图标挤掉（实测图标与文字重叠） */
  .tb-search input{width:auto;flex:1;min-width:0;color:var(--navy)}
  .tb-search input::placeholder{color:var(--muted2)}
  .tb-search-ic{stroke:var(--steel)}
  .tb-search:focus-within input{width:auto}

  /* 社交、国家：只留图标（国旗本身就是该国的图标） */
  .tb-social-cur span,.tb-country-cur .tb-country-name{display:none}
  .tb-social-cur,.tb-country-cur{
    width:34px;height:34px;min-height:34px;padding:0;gap:0;
    justify-content:center;border-radius:9px;
  }
  .tb-social-cur .tb-ic{display:block}
  .tb-social-cur .tb-caret,.tb-country-cur .tb-caret{display:none}
  .tb-country-cur .tb-flag{font-size:15px;line-height:1}

  /* 社交/国家的下拉面板在窄屏不能溢出屏幕
     ★ 面板是 `.tb-country-menu` / `.tb-social-menu`；
       `.tb-country-all` 只是菜单底部那个"所有国家"链接，别给它加定位（会把链接挪出菜单）。 */
  .tb-social-menu,.tb-country-menu{
    max-width:calc(100vw - 24px);
  }
}

/* RTL（阿拉伯语等）：`tb-country-menu` 用的是 `inset-inline-end`，会自动翻转；
   只有 `.tb-nums` / `.tb-search` 是物理左右，需要显式翻转。 */
html[dir="rtl"] .tb-nums{left:auto;right:0}
html[dir="rtl"] .tb-search{right:auto;left:0}
/* 窄屏（≤900）再收一档：顶栏本来就只有一行的位置 */
@media (max-width:900px){
  .tb-social-cur,.tb-country-cur{max-width:160px}
}
/* RTL：按钮里国旗与文字的顺序由浏览器处理，这里只保证文本对齐自然 */
html[dir="rtl"] .tb-social-cur,
html[dir="rtl"] .tb-country-cur{text-align:center}

/* 国别页（countries.html）的卡片网格
 * 2026-10-20：卡片高度压到原来的约 70%，内容重新分布 ——
 *   ① padding 20/18 → 13/14；② gap 6 → 3；③ 语言与域名合并成一行（省一整行）；
 *   ④ 旗 30×20 → 24×16；⑤ 名称 17 → 15px，行高收紧；⑥ 列宽下限 240 → 212（一行多放一张）。
 * 结果是同样信息量、纵向更紧凑，31 张卡片在 1440 屏上从 4 行压到 3 行。
 */
.country-grid{
  display:grid;grid-template-columns:repeat(auto-fill,minmax(212px,1fr));gap:12px;
}
.country-card{
  display:flex;flex-direction:column;gap:3px;padding:13px 14px;border-radius:13px;
  background:var(--card,#fff);border:1px solid var(--line);
  transition:.22s var(--ease);position:relative;overflow:hidden;
}
.country-card:hover{transform:translateY(-2px);box-shadow:0 12px 28px rgba(8,19,31,.10);border-color:rgba(255,122,24,.4)}
.country-card.is-current{border-color:var(--accent2);box-shadow:0 0 0 2px rgba(255,122,24,.18) inset}
/* 底部国家列表的旗（配合紧凑卡片缩到 24×16） */
.country-flag{display:inline-flex;align-items:center;width:24px;height:16px;line-height:0;flex:none}
.country-flag svg{width:24px;height:16px;display:block;border-radius:2px;overflow:hidden;box-shadow:0 0 0 .5px rgba(8,19,31,.22)}
.country-name{font-size:15px;font-weight:700;color:#12222f;line-height:1.3}
/* 语言 · 域名 合并成一行 */
.country-meta{
  display:flex;align-items:center;flex-wrap:wrap;gap:5px;
  font-size:11px;color:var(--muted2);line-height:1.35;
}
.cm-dot{font-style:normal;opacity:.45}
.country-lang{font-size:11px;color:var(--muted2)}
.country-domain{font-size:10.5px;color:var(--muted2);font-family:Arial,sans-serif;opacity:.85}
.country-go{margin-top:2px;font-size:11.5px;font-weight:700;color:var(--accent2);line-height:1.3}

/* ============================================================
   RTL（阿拉伯语等从右到左）
   —— direction 交给浏览器做大部分工作（文本对齐、flex 主轴、列表符号都会跟着翻），
      这里只补三件浏览器管不了的事：
      ① 方向性图标（箭头）必须镜像，否则"下一步"的箭头指着反方向；
      ② 绝对定位的下拉菜单要换到另一侧（用的是 right:0，RTL 下必须改成 left:0）；
      ③ 代码里显式写死的 text-align:left 要改回"起始侧"。
   —— 触发条件是 <html dir="rtl">，dir 值来自 site_text 的 site.dir（按国别，见 V29）。
   ============================================================ */
html[dir="rtl"] body{direction:rtl;text-align:right}
html[dir="rtl"] .sec-head:not(.center){text-align:right}
html[dir="rtl"] .sec-head.center{text-align:center}
/* ① 方向性图标镜像：右箭头/更多箭头/面包屑分隔 */
html[dir="rtl"] .tb-go,
html[dir="rtl"] .news-more > svg,
html[dir="rtl"] .prod-foot .view > svg,
html[dir="rtl"] .sec-more > svg,
html[dir="rtl"] .crumb > svg,
html[dir="rtl"] .country-go::before{transform:scaleX(-1)}
/* ② 下拉菜单换侧（.tb-social-menu / .tb-country-menu 都是 right:0 定的位） */
html[dir="rtl"] .tb-social-menu,
html[dir="rtl"] .tb-country-menu{right:auto;left:0}
html[dir="rtl"] .tb-country-item.is-current::after{margin-inline-start:auto}
/* ③ 常见"左图标 + 右文字"列表项：RTL 下图标应到右侧 */
html[dir="rtl"] .about-list li,
html[dir="rtl"] .contact-info-list li,
html[dir="rtl"] .fac-cap,
html[dir="rtl"] .prod-spec > div{padding-left:0;padding-right:0}


/* ============================================================
   询价表单（/frag/inquiry-form 渲染；contact 与 rfq 两个页面共用）
   ============================================================ */
.inquiry-form{background:#fff;border:1px solid var(--line);border-radius:18px;padding:26px 24px;box-shadow:0 18px 44px rgba(8,19,31,.07);max-width:880px}
.inq-head{display:flex;align-items:baseline;gap:12px;flex-wrap:wrap;margin-bottom:18px}
.inq-head h3{margin:0;font-size:20px;color:#12222f}
.inq-hint{font-size:12.5px;color:var(--muted2)}
.inq-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(240px,1fr));gap:14px}
.inq-field{display:flex;flex-direction:column;gap:6px;margin-bottom:14px}
.inq-field label{font-size:12.5px;font-weight:600;color:#39506a}
.inq-field label b{color:#d93025}
.inq-field input,.inq-field textarea{
  width:100%;padding:11px 13px;border:1px solid var(--line);border-radius:10px;
  font-size:14px;color:#12222f;background:#fbfcfd;transition:.2s;font-family:inherit;
}
.inq-field input:focus,.inq-field textarea:focus{outline:none;border-color:var(--accent2);background:#fff;box-shadow:0 0 0 3px rgba(255,122,24,.12)}
.inq-field textarea{resize:vertical;min-height:96px}
/* 蜜罐：正常用户看不见也点不到（不要用 display:none —— 部分机器人会跳过隐藏字段） */
.inq-hp{position:absolute;left:-9999px;top:auto;width:1px;height:1px;overflow:hidden}
.inq-foot{display:flex;align-items:center;gap:14px;flex-wrap:wrap;margin-top:6px}
.inq-status{font-size:13px;color:var(--muted2)}
.inq-status.is-ok{color:#1a7f37;font-weight:600}
.inq-status.is-err{color:#c33338;font-weight:600}
/* RTL：表单内部同理（方向交给 dir 属性，这里只补栅格与内边距的镜像） */
html[dir="rtl"] .inquiry-form{direction:rtl}

/* ============================================================
   产品中心体系（分类页 / 产品页 / 材质页共用）
   ------------------------------------------------------------
   ★ 为什么补这一块（实测 ✗）：
     产品页/分类页/材质页的 HTML 用了 18 个站点里**不存在**的类名 ✗
     （page-hero / ph-* / cat-grid / cat-card / cat-tabs / prod-card /
       spec-table / spec-note / cta-inline / empty-note …）
     ⇒ 页面结构对、但**完全没有样式** ✗ ⇒ 看起来"排版坏了" ✓
   命名沿用站点既有约定（navy 主色 / accent 橙 / 圆角 10-14px ✓）
   ============================================================ */

/* ---- 页面头（分类页、产品页、材质页统一用） ---- */
/* ★ 注意：`.page-hero` 的**底色/间距/背景图归 pages.css 管**（那个文件在页面里后加载，
   本文件的同名声明会被它整体覆盖）。这里只留一个装饰性的 ::after，
   写在这里是因为它只作用于 .page-hero 且与 pages.css 不冲突。
   2026-10-19 的教训：把背景图加在本文件里完全没效果 —— 被 pages.css 的 background 盖掉了。 */
.page-hero{position:relative;overflow:hidden;color:#fff}
.page-hero::after{
  content:"";position:absolute;right:-120px;top:-80px;width:420px;height:420px;border-radius:50%;
  background:radial-gradient(circle,rgba(255,122,24,.22),transparent 68%);pointer-events:none;
}
.page-hero .wrap{position:relative;z-index:1}
.ph-eyebrow{
  display:inline-block;font-family:Arial,sans-serif;font-size:11px;font-weight:800;
  letter-spacing:2.6px;text-transform:uppercase;color:var(--accent2);margin-bottom:8px;
}
.page-hero h1{
  font-size:clamp(23px,2.9vw,34px);line-height:1.18;font-weight:800;
  letter-spacing:-.5px;margin:0 0 10px;color:#fff;
  /* 背景改成实景照片后，标题不能再只靠底色 —— 加一层柔和暗影保证任何图上都读得清 */
  text-shadow:0 2px 14px rgba(3,10,18,.55);
}
.ph-lead{max-width:720px;font-size:14.5px;line-height:1.7;color:#dbe6f0;margin:0 0 18px;
  text-shadow:0 1px 10px rgba(3,10,18,.5)}
.ph-actions{display:flex;gap:12px;flex-wrap:wrap;margin-bottom:20px}
.ph-kpis{display:grid;grid-template-columns:repeat(auto-fit,minmax(140px,1fr));gap:14px}
.ph-kpi{
  background:rgba(255,255,255,.06);border:1px solid rgba(255,255,255,.1);
  border-radius:12px;padding:12px 14px;
}
.ph-kpi b{display:block;font-size:26px;font-weight:800;color:#fff;line-height:1.1;letter-spacing:-.5px}
.ph-kpi b i{font-style:normal;font-size:12.5px;font-weight:600;color:var(--accent2);margin-left:4px}
.ph-kpi span{display:block;font-size:12px;color:#9fb4c8;margin-top:6px}

/* ---- 面包屑（深色头内 / 浅色页内都适配） ---- */
.page-hero .crumb{display:flex;align-items:center;gap:8px;font-size:12.5px;color:#9fb4c8;margin-bottom:10px}
.page-hero .crumb a{color:#c7d7e6;text-decoration:none}
.page-hero .crumb a:hover{color:var(--accent2)}
.page-hero .crumb svg{width:12px;height:12px;stroke:currentColor;fill:none;stroke-width:2.4;opacity:.6}
.page-hero .crumb .cur{color:#fff;font-weight:600}

/* ---- 区块标题 ----
   ★ 这里曾经有**两套** .sec-head 规则同时生效：文件上部 502 行的块级版本
     （max-width:720px）与这里的 flex 版本。两套叠加后，eyebrow / h2 / p
     三个子元素被 space-between 横向摊开，长标题被挤成两三行、描述与标题互相
     抢宽度，而且 .center 变体也被 flex 覆盖 —— 表现就是"区块标题错位/像缺样式"。
     现合并成一套 grid：左列（小标题 + 标题），右列（描述/导语）。
   ★ .center 变体（首页多个区块在用）必须是**居中堆叠**。 */
.sec-head{
  display:grid;grid-template-columns:minmax(0,1fr) minmax(260px,440px);
  align-items:end;column-gap:40px;row-gap:4px;
  max-width:none;margin-bottom:26px;
}
.sec-head>.eyebrow{grid-column:1;grid-row:1;margin-bottom:0}
.sec-head>h2{
  grid-column:1;grid-row:2;margin:0;
  font-size:clamp(20px,2.2vw,27px);font-weight:800;color:var(--navy);letter-spacing:-.4px;
}
.sec-head>.eyebrow{
  font-family:Arial,sans-serif;font-size:11px;font-weight:800;letter-spacing:2.4px;
  text-transform:uppercase;color:var(--accent);
}
.sec-head>p,.sec-head>.sec-lead{grid-column:2;grid-row:1 / span 2;align-self:end;margin:0}
.sec-head.center{display:block;max-width:760px;margin:0 auto 26px;text-align:center}
.sec-head.center>.eyebrow{margin-bottom:8px}
.sec-head.center>h2{margin:0}
.sec-head.center>p{margin-top:12px}
@media (max-width:900px){
  .sec-head{grid-template-columns:1fr;row-gap:10px}
  .sec-head>p,.sec-head>.sec-lead{grid-column:1;grid-row:auto}
  .sec-head.center{max-width:none}
}
.sec-lead{max-width:700px;font-size:14.5px;line-height:1.7;color:var(--muted);margin:10px 0 0}

/* ---- 分类卡片（4 大形态入口） ---- */
.cat-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(230px,1fr));gap:16px}
/* ★ 分类卡的 SVG 精灵（`<defs>`，width/height 都是 0）是 `.cat-grid` 的**第一个子元素**，
   在 grid 里仍会占掉一格 —— 4 张卡于是排成「3 张 + 1 张孤零零在第二行左」，右边一大片空白。
   让它绝对定位脱离栅格流（不能 display:none：部分浏览器会因此找不到 <use> 引用的符号）。 */
.catalog-defs{position:absolute;width:0;height:0;overflow:hidden}
.cat-card{
  display:block;padding:22px 22px 24px;border-radius:14px;text-decoration:none;
  background:#fff;border:1px solid var(--line);
  transition:transform .28s var(--ease),box-shadow .28s var(--ease),border-color .28s;
}
.cat-card:hover{transform:translateY(-3px);border-color:var(--accent2);box-shadow:0 14px 34px rgba(8,19,31,.1)}
.cat-card b{display:block;font-size:16px;font-weight:800;color:var(--navy);margin-bottom:8px}
.cat-card span{display:block;font-size:12.8px;line-height:1.65;color:var(--muted)}

/* ---- 子分类标签条 ---- */
.cat-tabs{display:flex;flex-wrap:wrap;gap:8px;margin:-8px 0 22px}
.cat-tab{
  display:inline-block;padding:7px 14px;border-radius:999px;text-decoration:none;
  font-size:12.5px;font-weight:600;color:#42586f;background:#fff;border:1px solid var(--line);
  transition:.24s;
}
.cat-tab:hover{color:var(--navy);border-color:var(--accent2);background:var(--accent3)}

/* ---- 产品卡片（覆盖旧 .prod-card 缺失 + 兼容 .prod-spec 的 ul/li 写法 ✓） ---- */
.prod-card{
  display:flex;flex-direction:column;padding:22px;border-radius:14px;
  background:#fff;border:1px solid var(--line);
  transition:transform .28s var(--ease),box-shadow .28s var(--ease),border-color .28s;
}
.prod-card:hover{transform:translateY(-3px);border-color:var(--accent2);box-shadow:0 16px 38px rgba(8,19,31,.11)}
.prod-card h3{font-size:15.5px;font-weight:800;color:var(--navy);line-height:1.35;margin:0 0 4px}
.prod-en{font-size:11.5px;color:var(--muted2);line-height:1.5;margin:0 0 14px}
.prod-card .prod-spec{list-style:none;margin:0 0 18px;padding:0;display:grid;gap:7px}
.prod-card .prod-spec li{display:flex;gap:10px;font-size:12.5px;line-height:1.5;color:#2f455c}
.prod-card .prod-spec li b{
  flex:none;min-width:40px;font-size:11.5px;font-weight:700;color:var(--muted2);
}
.prod-card .prod-spec li span{color:#2f455c;font-weight:600}
.prod-card .btn{margin-top:auto;justify-content:center}

/* ---- 规格表（材质页的化学成分 / 力学性能） ---- */
.spec-table{
  width:100%;border-collapse:collapse;margin:0 0 26px;
  background:#fff;border:1px solid var(--line);border-radius:12px;overflow:hidden;
  font-size:13px;
}
.spec-table thead th{
  background:var(--bg);color:var(--navy);font-weight:800;font-size:12px;
  letter-spacing:.4px;text-transform:uppercase;text-align:left;
  padding:11px 16px;border-bottom:1px solid var(--line);
}
.spec-table tbody td{padding:10px 16px;border-bottom:1px solid #f0f4f8;color:#2f455c}
.spec-table tbody tr:last-child td{border-bottom:none}
.spec-table tbody td:first-child{font-weight:700;color:var(--navy);width:42%}
.spec-table tbody tr:hover{background:#fbfcfd}

/* ---- 说明框 / 空态 / 页内 CTA ---- */
.spec-note{
  background:var(--bg);border:1px solid var(--line);border-left:3px solid var(--accent);
  border-radius:12px;padding:22px 24px;margin:25px 0;
}
/* 宽表（材质中心的化学成分对照有 12 列）在窄屏横向滚动，不挤扁、不撑破布局 */
.spec-scroll{overflow-x:auto;-webkit-overflow-scrolling:touch}
.spec-scroll .spec-table{min-width:640px}
.spec-note h3{font-size:15px;font-weight:800;color:var(--navy);margin:0 0 12px}
.spec-note ul{margin:0;padding-left:18px;display:grid;gap:7px}
.spec-note li{font-size:13px;line-height:1.65;color:#42586f}
.note{font-size:12px;line-height:1.65;color:var(--muted2);margin:12px 0 0}
.empty-note{
  background:#fff;border:1px dashed var(--line);border-radius:14px;
  padding:34px 26px;text-align:center;
}
.empty-note p{font-size:14px;line-height:1.75;color:var(--muted);margin:0 0 16px}
.cta-inline{
  background:linear-gradient(135deg,var(--navy),var(--navy2));color:#fff;
  border-radius:16px;padding:34px 32px;text-align:center;
}
.cta-inline h3{font-size:clamp(19px,2.2vw,25px);font-weight:800;margin:0 0 10px;color:#fff}
.cta-inline p{font-size:14px;line-height:1.7;color:#c7d7e6;margin:0 0 20px}
.cta-inline .btn-primary{box-shadow:0 10px 26px rgba(255,122,24,.35)}

/* ---- 深色头内的次级按钮（btn-light） ---- */
.btn-light{background:rgba(255,255,255,.1);color:#fff;border:1px solid rgba(255,255,255,.24)}
.btn-light:hover{background:rgba(255,255,255,.17);border-color:rgba(255,122,24,.6)}
.btn-lg{padding:14px 26px;font-size:15px;border-radius:11px}

/* ============================================================
   产品目录页（左筛选 + 右网格）★ 2026-10-18 重设计
   ------------------------------------------------------------
   旧版是 4 个区块平铺 ✗ 29 个产品散着、无法筛、层级平 ✗
   新版：粘性侧栏筛选 + 密排卡片网格 ✓ 业界 B2B 标准形态 ✓
   ============================================================ */
.catalog-section{padding-top:42px}
.catalog-layout{display:grid;grid-template-columns:268px minmax(0,1fr);gap:34px;align-items:start}

/* 左侧筛选栏（粘性 ✓ 滚动时跟随 ✓）*/
.catalog-side{position:sticky;top:96px;display:grid;gap:16px}
.catalog-filter{padding:18px 18px 20px}
.catalog-filter .cf-head{margin-bottom:14px;padding-bottom:12px;border-bottom:1px solid var(--line)}
.catalog-filter .cf-group{display:block;padding:11px 0;border-top:1px dashed #eef2f6}
.catalog-filter .cf-group:first-of-type{border-top:none;padding-top:0}
.catalog-filter .cf-group > b{display:block;margin-bottom:8px;font-size:11.5px;letter-spacing:.6px;text-transform:uppercase;color:var(--muted2)}
.catalog-filter .cf-chip{padding:4px 10px;font-size:12px;margin:0 4px 6px 0}
.cf-reset{
  width:100%;margin-top:14px;padding:9px;border-radius:9px;cursor:pointer;
  background:#fff;border:1px solid var(--line);color:var(--muted);
  font-size:12.5px;font-weight:600;font-family:inherit;transition:.2s;
}
.cf-reset:hover{border-color:var(--accent2);color:var(--accent)}
.cf-hint{font-size:11.5px;line-height:1.6;color:var(--muted2);margin:10px 0 8px;text-align:center}
.cf-cta{width:100%;justify-content:center;font-size:13px;padding:10px}

/* 侧栏材质快捷入口 */
.side-card{background:#fff;border:1px solid var(--line);border-radius:14px;padding:16px 18px}
.side-card > b{display:block;font-size:11.5px;letter-spacing:.6px;text-transform:uppercase;color:var(--muted2);margin-bottom:11px}
.side-grades{display:flex;flex-wrap:wrap;gap:6px}
.side-grades a{
  padding:4px 11px;border-radius:7px;text-decoration:none;
  font-size:12px;font-weight:700;color:var(--navy);background:var(--bg);
  border:1px solid var(--line);transition:.2s;
}
.side-grades a:hover{background:var(--accent);color:#fff;border-color:transparent}

/* 右侧列表头 */
.catalog-bar{display:flex;align-items:baseline;justify-content:space-between;gap:14px;margin-bottom:18px;flex-wrap:wrap}
.catalog-bar h2{font-size:20px;font-weight:800;color:var(--navy);letter-spacing:-.3px;margin:0}
.catalog-note{font-size:12.5px;color:var(--muted2)}

/* 产品卡网格（密排 ✓ 3 列 ✓）*/
.catalog-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(232px,1fr));gap:18px}
.pcard{
  display:flex;flex-direction:column;overflow:hidden;text-decoration:none;
  background:#fff;border:1px solid var(--line);border-radius:13px;
  transition:transform .26s var(--ease),box-shadow .26s var(--ease),border-color .26s;
}
.pcard:hover{transform:translateY(-3px);border-color:var(--accent2);box-shadow:0 14px 32px rgba(8,19,31,.1)}
/* 卡片主图统一按 16:9 裁切：有图用图、没图用内联 SVG 示意。
   固定比例是必要的 —— 否则"有图的卡"和"没图的卡"高度不同，栅格会错位。 */
.pcard-media{background:#f7fafc;border-bottom:1px solid var(--line);overflow:hidden;aspect-ratio:16/9}
.pcard-media svg{display:block;width:100%;height:100%;object-fit:cover;transition:transform .45s var(--ease)}
.pcard:hover .pcard-media svg{transform:scale(1.05)}
.pcard-media img{display:block;width:100%;height:100%;object-fit:cover;
  transition:transform .45s var(--ease)}
.pcard:hover .pcard-media img{transform:scale(1.05)}
.pcard-body{padding:14px 15px 15px;display:flex;flex-direction:column;flex:1}
.pcard-cat{font-size:10.5px;font-weight:800;letter-spacing:.7px;text-transform:uppercase;color:var(--accent);margin-bottom:5px}
.pcard-body h3{font-size:13.5px;font-weight:800;color:var(--navy);line-height:1.4;margin:0 0 9px}
.pcard-chips{display:flex;flex-wrap:wrap;gap:5px;margin-bottom:12px}
.pcard-chips span{
  font-size:11px;font-weight:600;color:#4a5f75;background:var(--bg);
  border:1px solid #edf2f7;border-radius:5px;padding:2px 7px;line-height:1.5;
}
.pcard-link{
  margin-top:auto;display:flex;align-items:center;gap:5px;
  font-size:12.5px;font-weight:700;color:var(--accent);
}
.pcard-link svg{width:13px;height:13px;stroke:currentColor;fill:none;stroke-width:2.4;transition:transform .26s}
.pcard:hover .pcard-link svg{transform:translateX(3px)}

/* ---- 目录卡：整卡可点 + 右上角「加入询价单」 ----
   卡片里要放按钮，就不能把 <a> 当容器（<a> 内嵌 <button> 是非法的，
   浏览器会把 DOM 拆开，点击行为变得不可预测）。改为：
   · 卡片是 <article class="pcard">
   · 覆盖层链接 .pcard-hit 负责"整卡跳详情"（inset:0）
   · 按钮 z-index 高于覆盖层 ⇒ 点按钮不会误跳到详情页 */
.pcard{position:relative}
.pcard-hit{position:absolute;inset:0;z-index:1;border-radius:inherit}
.pcard-hit:focus-visible{outline:2px solid var(--accent);outline-offset:2px}
.pcard-add{
  position:absolute;right:10px;top:10px;z-index:2;
  width:30px;height:30px;padding:0;display:flex;align-items:center;justify-content:center;
  border-radius:50%;border:1px solid var(--line);background:rgba(255,255,255,.92);
  color:var(--accent);cursor:pointer;transition:transform .2s,background .2s,color .2s;
}
.pcard-add svg{width:15px;height:15px;stroke:currentColor;fill:none;stroke-width:2.6}
.pcard-add:hover{background:var(--accent);border-color:transparent;color:#fff;transform:scale(1.06)}
.pcard-add.done{background:#189a5a;border-color:transparent;color:#fff}

/* ---- 列表头：结果计数 + 排序 ---- */
.catalog-tools{display:flex;align-items:center;gap:12px;flex-wrap:wrap}
.catalog-count{font-size:12.5px;font-weight:700;color:var(--navy);font-variant-numeric:tabular-nums}
.sort-wrap{display:flex;align-items:center;gap:6px;font-size:12.5px;color:var(--muted2)}
.cf-sort{
  font-family:inherit;font-size:12.5px;font-weight:600;color:#42586f;background:#fff;
  border:1px solid var(--line);border-radius:999px;padding:5px 10px;cursor:pointer;
}
.cf-sort:hover{border-color:var(--accent2);color:var(--navy)}

/* ---- 细分品类（二级筛选）：缩进一层，表示从属于"形态" ---- */
.cf-sub-group{padding-left:12px}
.cf-sub-group .cf-chip{font-size:11.5px;padding:3px 9px}

/* ---- 空态：必须在**列表区**（原来被塞进左侧筛选栏里，筛空时主区一片空白） ---- */
.catalog-main .cf-empty{margin-top:26px;text-align:center;color:var(--muted2);font-size:13.5px}
.catalog-main .cf-empty p{margin:0 0 12px}

/* 站内搜索的结果计数（独立元素：热门链接不能再被它覆盖） */
.search-count{margin:8px 0 2px;font-size:13px;font-weight:700;color:var(--navy)}

/* 分类卡上的数量角标 */
.cat-count{
  display:inline-block;margin-top:9px;font-style:normal;font-size:11px;font-weight:700;
  color:var(--accent);background:var(--accent3);border-radius:5px;padding:2px 7px;
}

/* 小屏：筛选栏变成顶部折叠 ✓ */
@media (max-width:1024px){
  .catalog-layout{grid-template-columns:1fr;gap:22px}
  .catalog-side{position:static}
  .catalog-grid{grid-template-columns:repeat(auto-fill,minmax(180px,1fr));gap:12px}
  .pcard-body{padding:12px}
  .pcard-body h3{font-size:12.5px}
}

/* ---- 产品筛选条（材质 / 表面 / 厚度 ✓ 纯前端筛选 ✓） ---- */
.cat-filter{
  background:#fff;border:1px solid var(--line);border-radius:14px;
  padding:16px 20px;margin:0 0 24px;
}
.cf-head{display:flex;align-items:center;justify-content:space-between;margin-bottom:12px}
.cf-head b{font-size:13px;font-weight:800;color:var(--navy);letter-spacing:.3px}
.cf-count{font-size:12px;color:var(--muted2);font-variant-numeric:tabular-nums}
.cf-group{display:flex;align-items:center;flex-wrap:wrap;gap:7px;padding:7px 0;border-top:1px dashed #eef2f6}
/* ★ `[hidden]` 必须显式声明（2026-10-22 实测）：UA 样式 `[hidden]{display:none}` 的优先级最低，
   被上面这条 `display:flex` 直接盖掉 —— 于是"细分品类"那组虽然带 hidden，
   15 个 chip 仍然全量显示（用户看到的就是"细分类太多、挑不过来"）。
   这条规则让"选了形态才出现细分品类、且只列该形态下的 2–4 个"真正生效。 */
.cf-group[hidden]{display:none}
.cf-group:first-of-type{border-top:none;padding-top:0}
.cf-group > b{
  flex:none;min-width:44px;font-size:12px;font-weight:700;color:var(--muted2);
}
.cf-chip{
  appearance:none;-webkit-appearance:none;cursor:pointer;
  padding:5px 13px;border-radius:999px;font-size:12.5px;font-weight:600;
  color:#42586f;background:#f7fafc;border:1px solid var(--line);
  transition:.2s;font-family:inherit;line-height:1.4;
}
.cf-chip:hover{border-color:var(--accent2);color:var(--navy);background:var(--accent3)}
.cf-chip.is-on{
  color:#fff;background:linear-gradient(135deg,var(--accent),#ff5e00);
  border-color:transparent;box-shadow:0 4px 12px rgba(255,122,24,.28);
}
.cf-empty{margin-top:20px}

/* ---- 分类卡缩略图（内联 SVG ✓） ---- */
.cat-card{overflow:hidden}
.cat-thumb{
  margin:-22px -22px 16px;background:#f7fafc;border-bottom:1px solid var(--line);
  overflow:hidden;aspect-ratio:16/9;
}
.cat-thumb svg{display:block;width:100%;height:100%;transition:transform .45s var(--ease)}
.cat-card:hover .cat-thumb svg{transform:scale(1.05)}
/* 分类卡用**真实照片**（取该形态下第一个有图的产品）；没有照片才退回上面的 SVG。
   固定 16:9 是为了让"有图/没图"两种卡高度一致，栅格不错位。 */
.cat-thumb img{display:block;width:100%;height:100%;object-fit:cover;
  transition:transform .45s var(--ease)}
.cat-card:hover .cat-thumb img{transform:scale(1.05)}

/* ---- 产品卡缩略图（内联 SVG ✓ 悬停轻微放大 ✓） ---- */
.prod-thumb{
  margin:-22px -22px 16px;border-radius:14px 14px 0 0;overflow:hidden;
  background:#f7fafc;border-bottom:1px solid var(--line);
}
.prod-thumb svg{display:block;width:100%;height:auto;transition:transform .45s var(--ease)}
.prod-card:hover .prod-thumb svg{transform:scale(1.05)}
.prod-card .btn{margin-top:auto}

/* ---- 材质成分可视化条（Cr/Ni/Mo 含量 ✓ 标尺 0–25% ✓ 跨材质可对比 ✓） ---- */
.chem-bars{
  background:#fff;border:1px solid var(--line);border-radius:13px;
  padding:20px 22px;margin:0 0 22px;
}
.cb-head{
  font-size:12px;font-weight:800;letter-spacing:.4px;color:var(--muted2);
  text-transform:uppercase;margin-bottom:16px;
}
.cb-row{
  display:grid;grid-template-columns:42px minmax(0,1fr) 92px 118px;
  align-items:center;gap:12px;padding:7px 0;
}
.cb-el{
  font-family:Arial,sans-serif;font-size:13px;font-weight:800;color:var(--navy);
}
.cb-track{
  height:11px;border-radius:99px;background:#eef3f8;overflow:hidden;position:relative;
}
.cb-fill{
  height:100%;border-radius:99px;transition:width .5s var(--ease);
}
.cb-val{
  font-size:12px;font-weight:700;color:#2f455c;font-variant-numeric:tabular-nums;
}
.cb-note{font-size:11.5px;color:var(--muted2);line-height:1.4}
@media (max-width:720px){
  .cb-row{grid-template-columns:36px minmax(0,1fr) 78px;gap:9px}
  .cb-note{display:none}
}

/* ---- 产品详情页：左图右参数 ---- */
.pdp-grid{
  display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1fr);
  gap:40px;align-items:start;margin-bottom:34px;
}
.pdp-media{
  background:#fff;border:1px solid var(--line);border-radius:16px;
  padding:18px;overflow:hidden;
}
.pdp-media svg{display:block;width:100%;height:auto;border-radius:10px}
/* 有真实产品照片时用 img（与分类页/首页同一套照片），比例固定 4:3 避免与 SVG 示意图高度打架 */
/* ★ 必须显式 height:auto（2026-10-22 实测）：标签上写着 width="1200" height="800"，
   `width/height` 属性会作为"表现性提示"参与布局 ⇒ 宽高都变成确定值，此时 `aspect-ratio` 被忽略，
   图按 800px 高硬撑（实测：容器 584×836、图 548×800，而原图是 560×373）——
   页面看起来就是"图被拉长、比例不对、把右侧参数区顶得很难看"。 */
.pdp-media img{display:block;width:100%;height:auto;aspect-ratio:4/3;object-fit:cover;border-radius:10px}
/* 产品编号：等宽字体 + 单击可整段选中（客户抄编号去询价、我们开单都用它） */
.pcode{
  font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,"Courier New",monospace;
  font-size:12.5px;letter-spacing:.3px;color:var(--navy);
  background:#f3f8fd;border:1px solid #e4edf6;border-radius:6px;padding:2px 7px;
  -webkit-user-select:all;user-select:all;white-space:nowrap;
}
/* 详情页的编号是"要拿去用"的信息，比普通参数大一号、加粗 */
.pcode.is-lg{font-size:15px;font-weight:800;padding:4px 10px;letter-spacing:.4px}
.pcode-copy{
  display:inline-flex;align-items:center;justify-content:center;
  width:30px;height:30px;margin-left:8px;vertical-align:middle;
  border:1px solid var(--line);border-radius:8px;background:#fff;color:#64748b;
  cursor:pointer;transition:.2s;
}
.pcode-copy:hover{border-color:var(--accent);color:var(--accent);background:#fff8f2}
.pcode-copy.is-done{border-color:#0f9d58;color:#0f9d58;background:#e8f7ef}
.pcode-copy svg{width:15px;height:15px;stroke:currentColor;fill:none;stroke-width:1.9;
  stroke-linecap:round;stroke-linejoin:round}

/* 产品列表卡上的编号（产品中心 /products.html） */
.pcard-code{
  font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,"Courier New",monospace;
  font-size:11.5px;letter-spacing:.2px;color:#5b7186;margin:-2px 0 10px;
}
.pcard-code span{
  font-family:inherit;font-size:10px;font-weight:800;color:#94a3b8;
  text-transform:uppercase;letter-spacing:.6px;margin-right:6px;
}
.pdp-info h2{font-size:19px;font-weight:800;color:var(--navy);margin:0 0 14px;letter-spacing:-.3px}
.pdp-info .spec-table{margin-bottom:16px}
.pdp-info .note a{color:var(--accent);text-decoration:none;font-weight:700}
.pdp-info .note a:hover{text-decoration:underline}
.pdp-info .btn{margin-top:6px}
@media (max-width:900px){
  .pdp-grid{grid-template-columns:1fr;gap:24px}
}

/* ---- 小屏适配 ---- */
@media (max-width:720px){
  .page-hero{padding:38px 0 32px}
  .ph-kpis{grid-template-columns:repeat(2,1fr);gap:10px}
  .ph-kpi{padding:13px 14px}
  .ph-kpi b{font-size:21px}
  .ph-actions{flex-direction:column;align-items:stretch}
  .ph-actions .btn{justify-content:center}
  .cat-grid{grid-template-columns:1fr}
  .spec-note,.cta-inline{padding:20px 18px}
  .spec-table{font-size:12px}
  .spec-table thead th,.spec-table tbody td{padding:9px 12px}
}

/* ============================================================
   弹窗：询价单 / 获取报价（2026-10-19）
   —— 头部两个按钮由"跳页"改为弹窗；样式只服务这两块，不复用 drawer，
      避免两套浮层的定位/滚动锁互相打架。
   ============================================================ */
.modal{position:fixed;inset:0;z-index:1200;display:none;align-items:center;justify-content:center;padding:24px}
.modal.open{display:flex}
.modal-mask{position:absolute;inset:0;background:rgba(6,14,24,.62)}
.modal-panel{
  position:relative;width:min(680px,100%);max-height:min(86vh,780px);overflow:auto;
  background:#fff;border-radius:18px;padding:26px 26px 22px;
  box-shadow:0 30px 80px rgba(6,16,28,.38);
}
.modal-x{
  position:absolute;right:14px;top:12px;width:34px;height:34px;border:0;border-radius:10px;
  background:#f1f5f9;color:#64748b;font-size:20px;line-height:1;cursor:pointer;
}
.modal-x:hover{background:#e2e8f0;color:var(--navy)}
.modal-panel h3{font-size:20px;font-weight:800;color:var(--navy);margin-bottom:6px}
.modal-sub{font-size:12.5px;color:var(--muted);line-height:1.7;margin-bottom:16px}
.mf-grid{display:grid;grid-template-columns:1fr 1fr;gap:12px}
.modal-form label,.lead-sub label{display:flex;flex-direction:column;gap:6px}
.modal-form label span,.lead-sub label span{font-size:12px;font-weight:700;color:#465a70}
.modal-form input,.modal-form textarea,.lead-sub input{
  width:100%;padding:10px 12px;border:1px solid #d8e2ec;border-radius:10px;
  font-size:14px;font-family:inherit;color:var(--navy);background:#fff;
}
.modal-form input:focus,.modal-form textarea:focus,.lead-sub input:focus{
  outline:none;border-color:var(--accent);box-shadow:0 0 0 3px rgba(255,122,24,.12);
}
.mf-full{display:block;margin:12px 0 0}
.mf-full textarea{resize:vertical;margin-top:6px}
.cap-row{display:flex;align-items:flex-end;gap:10px;margin-top:12px}
.cap-row label{flex:1}
.cap-ask{
  font-weight:800;color:var(--navy);background:#f3f8fd;border:1px solid #e4edf6;
  border-radius:8px;padding:10px 12px;white-space:nowrap;
}
.cap-refresh{
  width:40px;height:40px;border:1px solid #d8e2ec;background:#fff;border-radius:10px;
  cursor:pointer;color:#64748b;font-size:16px;
}
.mf-foot{display:flex;align-items:center;gap:12px;margin-top:16px;flex-wrap:wrap}
.inq-status{font-size:12.5px;line-height:1.6}
.inq-status.is-ok{color:#0f9d58}
.inq-status.is-err{color:#d92d20}
/* 蜜罐：正常用户看不见、也 Tab 不到 */
.hp{position:absolute;left:-9999px;width:1px;height:1px;opacity:0}
.rfq-modal-list{margin:6px 0 14px;border:1px solid var(--line);border-radius:12px;max-height:184px;overflow:auto}
.rfq-item{display:flex;align-items:center;gap:10px;padding:9px 12px;font-size:13px;border-bottom:1px solid #eef3f8}
.rfq-item:last-child{border-bottom:0}
.rfq-item b{flex:1;min-width:0;font-weight:700;color:var(--navy);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
/* 询价单里的编号：排在名称前面，等宽小字 + 浅底，不抢名称的视觉重量 */
.rfq-code{
  flex:none;font-style:normal;
  font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,"Courier New",monospace;
  font-size:11px;letter-spacing:.2px;color:#5b7186;
  background:#f3f8fd;border:1px solid #e4edf6;border-radius:5px;padding:1px 6px;
}
.rfq-qty{color:var(--muted);font-weight:700}
.rfq-del{border:0;background:transparent;color:#b6c2d0;cursor:pointer;font-size:15px;line-height:1}
.rfq-del:hover{color:#d92d20}
.rfq-empty{padding:14px;margin:0;color:var(--muted);font-size:13px}
.lead-im{display:flex;gap:10px;flex-wrap:wrap;margin-bottom:16px}
.lead-im-btn{
  display:inline-flex;align-items:center;gap:7px;padding:9px 13px;border:1px solid #d8e2ec;
  border-radius:10px;font-size:13px;font-weight:700;color:var(--navy);text-decoration:none;
}
.lead-im-btn:hover{border-color:var(--accent);color:var(--accent)}
.lead-im-btn svg{width:16px;height:16px;stroke:currentColor;fill:none;stroke-width:1.8;stroke-linecap:round;stroke-linejoin:round}
.lead-im-btn.wa{background:#e8f7ef;border-color:#b7e4c9;color:#0b7a43}
.lead-sub{display:flex;align-items:flex-end;gap:10px;padding:14px;background:#f7fafc;
  border:1px solid var(--line);border-radius:12px;margin-bottom:16px;flex-wrap:wrap}
.lead-sub label{flex:1;min-width:200px}
.lead-sub .btn{white-space:nowrap}
@media (max-width:640px){
  .modal{padding:12px}
  .modal-panel{padding:20px 16px 16px;border-radius:14px}
  .mf-grid{grid-template-columns:1fr}
  .cap-row{flex-wrap:wrap}
  .lead-sub .btn{width:100%}
}

/* ---- 在线聊天面板（所有页面右下角小图标触发）---- */
.chat-modal .chat-panel{
  width:min(420px,100%);padding:0;display:flex;flex-direction:column;
  max-height:min(84vh,720px);overflow:hidden;
}
.chat-head{display:flex;align-items:center;gap:12px;padding:16px 18px;
  background:linear-gradient(135deg,var(--navy),#12324f);color:#fff}
.chat-ava{width:36px;height:36px;border-radius:50%;background:rgba(255,255,255,.16);
  display:grid;place-items:center;flex:none}
.chat-ava svg{width:19px;height:19px;stroke:#fff;fill:none;stroke-width:1.9;stroke-linecap:round;stroke-linejoin:round}
.chat-id b{display:block;font-size:15px;font-weight:800;line-height:1.2}
.chat-id small{font-size:11.5px;opacity:.82}
/* 关闭按钮在标题栏里要跟着变成静态定位（.modal-x 默认是右上角绝对定位） */
.chat-x{position:static;margin-left:auto;background:rgba(255,255,255,.16);color:#fff;flex:none}
.chat-x:hover{background:rgba(255,255,255,.28);color:#fff}
.chat-contacts{display:flex;flex-wrap:wrap;gap:8px;align-items:center;padding:12px 16px;
  border-bottom:1px solid var(--line);background:#f7fafc}
.chat-contacts-label{width:100%;font-size:11.5px;font-weight:800;color:var(--muted);letter-spacing:.3px}
.chat-contacts .lead-im-btn{padding:7px 11px;font-size:12.5px}
.chat-body{flex:1;min-height:180px;overflow:auto;padding:16px;display:flex;flex-direction:column;gap:10px;background:#fff}
.chat-msg{display:flex}
.chat-msg span{max-width:84%;padding:10px 13px;border-radius:14px 14px 14px 4px;
  background:#f1f5f9;color:#22384d;font-size:13.5px;line-height:1.65;word-break:break-word}
.chat-msg.me{justify-content:flex-end}
.chat-msg.me span{border-radius:14px 14px 4px 14px;background:var(--navy);color:#fff}
.chat-form{border-top:1px solid var(--line);padding:12px 14px 14px;background:#fff}
.chat-ask{display:grid;gap:8px;margin-bottom:10px}
.chat-ask[hidden]{display:none}
.chat-ask label{display:flex;flex-direction:column;gap:4px}
.chat-ask label span{font-size:11.5px;font-weight:700;color:#465a70}
.chat-ask input{width:100%;padding:8px 10px;border:1px solid #d8e2ec;border-radius:9px;
  font-size:13.5px;font-family:inherit;color:var(--navy)}
.chat-ask .cap-ask{justify-self:start;font-size:13px;padding:7px 10px}
.chat-send{display:flex;gap:8px;align-items:center}
.chat-input{flex:1;min-width:0;padding:10px 12px;border:1px solid #d8e2ec;border-radius:10px;
  font-size:13.5px;font-family:inherit;color:var(--navy)}
.chat-input:focus{outline:none;border-color:var(--accent);box-shadow:0 0 0 3px rgba(255,122,24,.12)}
.chat-btn{width:44px;height:44px;flex:none;border:0;border-radius:12px;cursor:pointer;
  background:linear-gradient(135deg,var(--accent),#ff5e00);color:#fff;display:grid;place-items:center}
.chat-btn svg{width:18px;height:18px;stroke:currentColor;fill:none;stroke-width:1.9;stroke-linecap:round;stroke-linejoin:round}
@media (max-width:640px){
  .chat-modal .chat-panel{width:100%;max-height:88vh}
  .chat-contacts .lead-im-btn{font-size:12px}
}

/* ============================================================
   在线聊天：右下角气泡（2026-10-20）
   ------------------------------------------------------------
   要求（用户原话）：「点击后的对话框要在图标上面，不要在中间并屏蔽了其他内容，
                    对话时不影响页面的继续浏览」。
   做法：
     · 不再用 .modal 那套（它会盖遮罩 + body overflow:hidden）；
     · 绝对定位在悬浮按钮**正上方**，右侧对齐；
     · 用 visibility/opacity 切换（display:none 无法过渡，且会丢失滚动位置）；
     · 用 pointer-events 控制可点区域，收起时完全不拦事件；
     · 高度上限 = 视口 − 图标区 − 上下留白，短屏也不会顶出屏幕。
   ============================================================ */
.chat-widget{
  position:fixed; right:26px; bottom:96px; z-index:160;
  width:min(384px, calc(100vw - 32px));
  max-height:min(620px, calc(100vh - 130px));
  display:flex; flex-direction:column; min-height:0;
  background:#fff; border:1px solid var(--line); border-radius:18px; overflow:hidden;
  box-shadow:0 26px 64px rgba(8,19,31,.26), 0 2px 10px rgba(8,19,31,.10);
  visibility:hidden; opacity:0; pointer-events:none;
  transform:translateY(14px) scale(.985); transform-origin:100% 100%;
  transition:opacity .2s var(--ease), transform .22s var(--ease), visibility .2s;
}
.chat-widget.open{visibility:visible; opacity:1; pointer-events:auto; transform:none}
.chat-bubble{display:flex; flex-direction:column; min-height:0; max-height:inherit}
/* 气泡里对话区不必再撑满屏：给"边看页面边聊"留出视线 */
.chat-widget .chat-body{min-height:110px; max-height:min(40vh, 280px)}
/* 关闭按钮：气泡头部右侧（原来依赖 .modal-x 的绝对定位，现在这个类不在了） */
.chat-x{
  position:static; margin-left:auto; flex:none; width:30px; height:30px; border:0; border-radius:9px;
  background:rgba(255,255,255,.16); color:#fff; font-size:20px; line-height:1; cursor:pointer;
  display:grid; place-items:center; transition:.2s;
}
.chat-x:hover{background:rgba(255,255,255,.3)}
/* 悬浮按钮在气泡打开时换成"关闭"语义的视觉反馈 */
.contact-fab.is-open{background:linear-gradient(135deg,#12324f,#08131f);box-shadow:0 14px 36px rgba(8,19,31,.36)}
.contact-fab.is-open::after{display:none}

/* ---------- 软提示 / 可选联系方式 / 转人工（2026-10-20） ----------
 * 设计前提：**不拦发送**。联系方式是一个可展开的小抽屉，
 * 提示语只用一行灰字，不用弹窗、不用红字、不占对话区。
 */
.chat-tip{
  padding:0 16px 8px; font-size:11.5px; line-height:1.5; color:var(--muted);
  display:flex; align-items:center; gap:6px;
}
.chat-tip::before{
  content:""; width:5px; height:5px; border-radius:50%; background:var(--accent); flex:none;
}
.chat-opt{
  display:grid; grid-template-columns:1fr 1fr; gap:8px; margin-bottom:9px;
}
.chat-opt[hidden]{display:none}
.chat-opt input{
  width:100%; padding:8px 10px; border:1px solid #d8e2ec; border-radius:9px;
  font-size:13px; font-family:inherit; color:var(--ink); background:#fbfdff;
}
.chat-opt input:focus{outline:none; border-color:var(--accent); box-shadow:0 0 0 3px rgba(255,122,24,.12)}
.chat-opt-btn{
  width:38px; height:38px; flex:none; display:grid; place-items:center; cursor:pointer;
  border:1px solid #d8e2ec; border-radius:10px; background:#fff; color:#5b7290; transition:.18s;
}
.chat-opt-btn svg{width:16px; height:16px; stroke:currentColor; fill:none; stroke-width:1.9; stroke-linecap:round; stroke-linejoin:round}
.chat-opt-btn span{display:none}
.chat-opt-btn:hover{border-color:var(--accent); color:var(--accent)}
.chat-opt-btn.is-on{background:var(--accent3); border-color:var(--accent); color:var(--accent)}
.chat-human{
  display:flex; align-items:center; justify-content:center; gap:7px; width:100%;
  margin:0 0 10px; padding:9px 12px; cursor:pointer;
  border:1px dashed #c9d8e6; border-radius:10px; background:#f8fbfe; color:#3c5872;
  font-size:12.5px; font-weight:700; font-family:inherit; transition:.18s;
}
.chat-human svg{width:15px; height:15px; stroke:currentColor; fill:none; stroke-width:1.9; stroke-linecap:round; stroke-linejoin:round}
.chat-human:hover{border-color:var(--accent); color:var(--accent); background:#fff7f0}
/* AI 回答里带回的产品：可点的小卡片 */
.chat-prods{display:flex; flex-direction:column; gap:5px; margin-top:7px; max-width:84%}
.chat-prods a{
  display:block; padding:6px 9px; border-radius:8px; background:#f2f7fc; color:#25445f;
  font-size:12px; font-weight:600; text-decoration:none; border:1px solid #e2ecf5;
  overflow:hidden; text-overflow:ellipsis; white-space:nowrap;
}
.chat-prods a:hover{background:var(--accent3); color:var(--accent); border-color:#ffd9bd}
/* "正在思考"：三点呼吸，比一行"加载中…"更不打断阅读 */
.chat-msg.typing span{display:inline-flex; align-items:center; gap:4px; color:var(--muted); font-size:12.5px}
.chat-msg.typing span::after{
  content:""; width:14px; height:4px; border-radius:2px;
  background:linear-gradient(90deg, #c3d3e2 0 25%, #8fa9c2 25% 50%, #c3d3e2 50% 75%, #8fa9c2 75% 100%);
  background-size:200% 100%; animation:chatTyping 1.05s linear infinite;
}
@keyframes chatTyping{from{background-position:0 0}to{background-position:-200% 0}}
@media (prefers-reduced-motion:reduce){.chat-msg.typing span::after{animation:none}}

/* ---------- 联系方式：默认三个图标 + 点击展开气泡（2026-10-20） ----------
 * 原来三个宽按钮横排占掉两行、把对话区往下压了 90px；
 * 改成图标后首屏就能看到"你好"那句和输入框（用户明确要求这个形态）。
 */
.chat-contacts{position:relative}
.chat-cs{display:flex;align-items:center;gap:8px;position:relative}
.chat-cs-btn{
  width:40px;height:40px;flex:none;display:grid;place-items:center;cursor:pointer;
  border:1px solid #dbe6f0;border-radius:12px;background:#fff;color:#4a6580;
  transition:transform .18s var(--ease), box-shadow .18s var(--ease), border-color .18s, color .18s;
}
.chat-cs-btn svg{width:19px;height:19px;stroke:currentColor;fill:none;stroke-width:1.9;stroke-linecap:round;stroke-linejoin:round}
.chat-cs-btn.wa{color:#1aa851;border-color:#c8ecd6;background:#f4fdf7}
.chat-cs-btn.mail{color:#2f6fb0;border-color:#cfe1f2;background:#f7fbff}
.chat-cs-btn.tel{color:#c26a1a;border-color:#f3ddc6;background:#fffaf4}
.chat-cs-btn:hover{transform:translateY(-2px);box-shadow:0 8px 18px rgba(8,19,31,.12)}
.chat-cs-btn:focus-visible{outline:2px solid var(--accent);outline-offset:2px}
.chat-cs.is-open .chat-cs-btn{border-color:var(--accent);color:var(--accent)}
/* 右侧小三角：暗示"可以展开"，不占文案 */
.chat-cs::after{
  content:"";width:0;height:0;margin-left:2px;
  border-left:4.5px solid transparent;border-right:4.5px solid transparent;border-top:5.5px solid #9db4cc;
  transition:transform .2s, border-top-color .2s;
}
.chat-cs.is-open::after{transform:rotate(180deg);border-top-color:var(--accent)}
.chat-cs-pop{
  position:absolute;left:0;top:calc(100% + 12px);z-index:6;min-width:252px;
  background:#fff;border:1px solid var(--line);border-radius:13px;padding:6px;
  box-shadow:0 18px 44px rgba(8,19,31,.20);
  display:flex;flex-direction:column;gap:2px;
}
.chat-cs-pop[hidden]{display:none}
.chat-cs-pop::before{
  content:"";position:absolute;top:-6px;left:22px;width:10px;height:10px;background:#fff;
  border-left:1px solid var(--line);border-top:1px solid var(--line);transform:rotate(45deg);
}
.chat-cs-pop a{
  display:flex;align-items:center;gap:9px;padding:8px 10px;border-radius:9px;
  text-decoration:none;color:#22405c;font-size:12.5px;font-weight:800;transition:.16s;
}
.chat-cs-pop a:hover{background:var(--accent3)}
.chat-cs-pop a svg{width:15px;height:15px;flex:none;stroke:currentColor;fill:none;stroke-width:1.9;stroke-linecap:round;stroke-linejoin:round;opacity:.75}
.chat-cs-pop a span{color:var(--muted);font-weight:600;font-size:11.5px}
.chat-cs-pop a b{margin-left:auto;font-weight:800;color:#1f3a52;white-space:nowrap;font-size:12.5px}

/* ---------- 国别页世界地图（2026-10-20 第二版：复用首页「全球出口网络」那套 .map-* ） ----------
 * 只补三件事：① 单列布局（本页没有右侧图例）；② 无站点区域的淡色态；
 * ③ 地图上的大洲名与站点数（深色底上要有描边才读得清）。
 */
/* 宽度与页面主体一致（撑满 .wrap，不再自己限宽）；高度按 70% 压：380→266，间距同步收紧 */
.map-card-flat{margin:0 0 22px;max-width:none;padding:16px 20px 12px;border-radius:16px}
.map-card-flat .map-body{grid-template-columns:1fr;gap:0}
/* ★ 这里**不能**再用 max-height 限高（2026-10-20 实测踩到）：
 *   SVG 保持宽高比，一旦 max-height 生效，宽度会跟着缩回去 ——
 *   1200px 的容器里实际只渲染成 618px 居中，看起来就是"没撑满"。
 *   改为由 viewBox 的宽高比决定高度（后端已把 viewBox 改成 1000×300 并纵向压 0.7），
 *   于是「宽度撑满 + 高度为原来的 70%」两者同时成立。 */
.map-card-flat .map-svg{max-height:none}
.map-card-flat .map-card-head{margin-bottom:6px;padding-bottom:8px}
.map-card-flat .mch-title h3{font-size:14.5px}
.map-card-flat .mch-title p{font-size:11.5px;margin-top:2px}
.map-card-flat .map-global{margin-top:2px;padding-top:8px;font-size:11.5px}

/* 没有开通站点的区域：保留轮廓，但明显是"不可点" */
.m-region.is-empty path{fill:#0f2436;stroke:#1d3a54;stroke-width:1;cursor:default}
.m-region:focus{outline:none}
.m-region:focus-visible path{fill:#ff7a18;stroke:#ffc48f}

/* 大洲名 + 站点数（跟着区域一起高亮） */
.m-label text{
  fill:#dbe9f6;font-size:16px;font-weight:800;text-anchor:middle;
  font-family:inherit;pointer-events:none;
  paint-order:stroke;stroke:rgba(5,14,23,.92);stroke-width:4px;stroke-linejoin:round;
  transition:fill .25s;
}
.m-label text.m-label-n{font-size:12px;font-weight:700;fill:#8ba3ba}
.m-region:hover ~ .m-label text,
.m-card-hovering .m-label text{fill:#fff}

/* 国际站：不属于任何大洲，贴底一行 */
.map-global{
  display:flex;align-items:center;justify-content:center;gap:10px;
  margin-top:6px;padding-top:12px;border-top:1px solid rgba(255,255,255,.08);
  font-size:12.5px;color:#8ba3ba;flex-wrap:wrap;
}
.map-global a{
  display:inline-flex;align-items:center;gap:6px;padding:6px 13px;border-radius:99px;
  background:rgba(255,122,24,.14);border:1px solid rgba(255,122,24,.4);
  color:var(--accent2);font-weight:800;transition:.2s;
}
.map-global a:hover{background:rgba(255,122,24,.26);color:#fff}
.map-global a em{font-style:normal;font-size:11px;opacity:.8}
/* 跳转后的落点高亮：让"跳过去了"有明确反馈 */
.country-group{border-radius:14px;transition:box-shadow .3s}
.country-group.is-hit{animation:cgHit 1.6s ease-out}
@keyframes cgHit{
  0%{box-shadow:0 0 0 3px rgba(255,122,24,.5);background:#fff8f2}
  100%{box-shadow:0 0 0 0 rgba(255,122,24,0);background:transparent}
}

@media (max-width:640px){
  .chat-widget{right:16px; left:16px; width:auto; bottom:82px; max-height:calc(100vh - 110px)}
  .chat-widget .chat-body{max-height:min(34vh,220px)}
  .chat-opt{grid-template-columns:1fr}
  .chat-cs-pop{min-width:230px}
  .map-card-flat{padding:12px 10px 10px;border-radius:13px}
  /* 移动端同理由宽高比决定（1000:300），375px 宽 → 约 112px 高，不需要再限高 */
  .m-label text{font-size:12px;stroke-width:3px}
  .m-label text.m-label-n{font-size:9.5px}
}

/* ============================================================
   国别页（countries.html）：按语言分组（2026-10-20 重新设计）
   ============================================================ */
.country-groups{display:flex;flex-direction:column;gap:34px}
.country-group{min-width:0}
.cg-title{
  display:flex;align-items:center;gap:10px;margin:0 0 14px;
  font-size:15px;font-weight:800;color:#12222f;letter-spacing:.2px;
}
.cg-lang{font-size:19px;font-weight:800}
.cg-title em{
  font-style:normal;font-size:11.5px;font-weight:700;color:var(--muted2);
  background:#eef3f8;border-radius:20px;padding:2px 9px;
}
.cc-top{display:flex;align-items:center;gap:8px;margin-bottom:2px}
.cc-code{
  font-size:10.5px;font-weight:800;letter-spacing:.8px;color:var(--muted2);
  background:#f1f5f9;border-radius:6px;padding:1px 6px;font-family:Arial,sans-serif;
}
.country-card .country-go svg{width:15px;height:15px;stroke:currentColor;fill:none;stroke-width:2.2;stroke-linecap:round;stroke-linejoin:round}
.cc-cur{font-size:12px;font-weight:800;color:var(--accent2)}

/* 页脚补充项（2026-10-20）：国家切换 / 回到顶部 / 合规行 */
.f-links .f-country,.f-links .f-top{display:inline-flex;align-items:center;gap:6px}
.f-links .f-country svg{width:13px;height:13px;stroke:currentColor;fill:none;stroke-width:1.9;stroke-linecap:round;stroke-linejoin:round}
.f-legal{
  border-top:1px solid rgba(255,255,255,.06);padding:0 0 22px;
  font-size:12px;color:#4d637a;line-height:1.9;
}
.f-legal a{color:#6d869d}
.f-legal a:hover{color:var(--accent2)}

/* 页脚联系方式列：电话 / 邮箱 / WhatsApp 现在真的可点（2026-10-20） */
.f-contact li a{
  display:flex;gap:10px;align-items:flex-start;
  color:inherit;transition:color .2s;
}
.f-contact li a:hover{color:var(--accent2)}
.f-contact li a span{min-width:0;word-break:break-word}

/* 2 列及以下时品牌区不再跨列（会顶出整行） */
@media (max-width:1080px){
  .f-brand{grid-column:auto}
}

/* ============================================================
   站点地图页（sitemap.html）：链接清单由服务端按库生成
   ============================================================ */
.sm-block{margin-bottom:36px}
.sm-count{
  font-style:normal;font-size:11.5px;font-weight:700;color:var(--muted2);
  background:#eef3f8;border-radius:20px;padding:2px 9px;margin-left:8px;
  vertical-align:2px;display:inline-block;
}
.sm-list{
  list-style:none;margin:0;padding:0;
  display:grid;grid-template-columns:repeat(auto-fill,minmax(216px,1fr));gap:2px 16px;
}
.sm-list li{margin:0}
.sm-list a{
  display:block;padding:7px 10px;border-radius:8px;
  font-size:14px;color:#33475c;transition:.18s var(--ease);
  overflow:hidden;text-overflow:ellipsis;white-space:nowrap;
}
.sm-list a:hover{background:var(--accent3);color:var(--accent);padding-left:14px}
.sm-empty{color:var(--muted2);font-size:14px}
html[dir="rtl"] .sm-list a:hover{padding-left:10px;padding-right:14px}

/* 站内搜索：关键词高亮 + 命中分布（2026-10-20） */
mark.sr-hit{
  background:#fff2d6;color:inherit;padding:0 2px;border-radius:3px;
  font-weight:800;box-shadow:inset 0 -2px 0 rgba(255,122,24,.32);
}
.sr-summary{
  font-size:13px;font-weight:700;color:var(--muted2);
  margin:0 0 18px;letter-spacing:.2px;
}

/* ============================================================
   补齐"代码里用、样式里没有"的 class（2026-10-20 全量审计结果）
   ------------------------------------------------------------
   审计方法：把 HTML + 静态 JS + 服务端 Java 片段里 `class="..."` 的每个词
   与 site.css / pages.css 里定义的选择器求差集。
   以下 5 个只在服务端拼接时出现，前端 CSS 一直没定义 ——
   表现是"能显示、但间距/字号/边框不对"，不会报错，靠肉眼逐页看很难发现。
   ============================================================ */

/* 顶栏国家/语言切换器里的国家名
 * ------------------------------------------------------------
 * ★ 2026-10-24 改（用户反馈"其他语言长度不同就把按钮撑宽"）：
 *   原来这里是 `max-width:132px + overflow:hidden + text-overflow:ellipsis + white-space:nowrap`
 *   —— 效果是长国名被**截成省略号**（`Deutschland…` / `الإمارات…`），
 *   而按钮本身仍会为它让出空间；两个问题叠在一起：既没换行，也没变短。
 *   现在：
 *     · 去掉 label 自己的 `max-width`（限宽交给 `.tb-country-cur`，否则文字只用 132px、更早截断）；
 *     · 去掉 `nowrap`/`ellipsis`：换行由按钮的 `white-space:normal` 决定，最多两行；
 *     · 字号跟随按钮（不再写死 13px），溢出时由 `site.js` 的 `fitTopbarButtons()` 逐级下调。
 */
.tb-country-name{
  min-width:0;
  white-space:normal;
  overflow-wrap:anywhere;
  word-break:break-word;
  font-weight:700;
}

/* 产品目录 / 品类树为空时的占位（后台下架全部商品、或该品类暂无货） */
.prod-empty,.cat-empty{
  grid-column:1 / -1;
  padding:36px 20px;border:1px dashed var(--line);border-radius:14px;
  text-align:center;color:var(--muted2);font-size:14px;line-height:1.8;
  background:#fbfdff;
}

/* 产品目录工具栏里的"排序："标签 */
.sort-label{
  font-size:12.5px;color:var(--muted2);font-weight:700;white-space:nowrap;
}

/* 有子菜单的一级项：让下拉箭头在展开时翻转（纯提示，不影响功能） */
.menu > li.has-sub:hover > a .caret{transform:rotate(180deg)}
.menu > li.has-sub > a .caret{transition:transform .22s var(--ease)}

/* ============================================================
   首页「应用领域」：2 行 × 5 列（2026-10-22）
   ★ 放在 site.css 而不是 pages.css：**首页只加载 site.css**，
     规则写进 pages.css 在首页根本不生效（实测：以为改了 5 列，页面仍是 4 列）。
   ★ 20 个卡位全部写进 HTML（SEO 要链接、无 JS 也要能点），
     其中 10 个由 site.js 每次访问随机挑出来显示，其余加 .app--out 隐藏。
   ★ 隐藏用类而不是 [hidden] 属性：.app 自带 display:block，
     属性选择器的优先级会被它盖掉（同一个坑在筛选组上踩过）。
   ============================================================ */
/* 首页「服务于关键行业的用钢需求」：**8 个卡位、每行 4 个**（2026-10-24）
 * 与 `.apps-grid-5`（5 列）并存：旧样式不动，新类只负责 4 列版式。 */
.apps-grid-4{grid-template-columns:repeat(4,minmax(0,1fr))}
@media (max-width:1024px){.apps-grid-4{grid-template-columns:repeat(2,minmax(0,1fr))}}
@media (max-width:430px){.apps-grid-4{grid-template-columns:1fr}}

.apps-grid-5{grid-template-columns:repeat(5,minmax(0,1fr))}
@media (max-width:1024px){.apps-grid-5{grid-template-columns:repeat(3,minmax(0,1fr))}}
@media (max-width:760px){.apps-grid-5{grid-template-columns:repeat(2,minmax(0,1fr))}}
@media (max-width:680px){.apps-grid-5{grid-template-columns:repeat(2,minmax(0,1fr))}}
@media (max-width:430px){.apps-grid-5{grid-template-columns:1fr}}
.app--out{display:none!important}
.apps-grid-5 .app h3{font-size:14px}
.apps-grid-5 .app p{font-size:12px;line-height:1.62;margin-bottom:10px}
.apps-grid-5 .app .tags span{font-size:11px;padding:2px 7px}

/* 首页应用领域底部按钮：居中 + 上下留白（2026-10-22；首页只加载 site.css，写进 pages.css 无效） */
.app-all{display:flex;justify-content:center;margin:32px 0 6px}
@media (max-width:680px){.app-all{margin:24px 0 4px}}

/* ============================================================
   H5 版式（2026-10-22）—— 手机端不是"缩小的桌面"，而是另一套密度
   ★ 只用 CSS 媒体查询：同一份 HTML、同一份内容（只换排版）。
     走 dynamic serving 也必须保证"内容一致、只换结构"，否则会被判 cloaking；
     而纯 CSS 方案天然满足这一条，且不引入第二套模板的维护成本。
   ============================================================ */
@media (max-width:680px){
  /* ① 6 列清单表 → 卡片流（每个单元格前显示列名，列名来自 data-label） */
  .tb-scroll:has(> .tb-cards){overflow:visible}
  .tb-cards{display:block;border:0;background:transparent}
  .tb-cards thead{display:none}
  .tb-cards tbody{display:block}
  .tb-cards tr{
    display:block;margin:0 0 10px;padding:12px 14px;background:#fff;
    border:1px solid var(--line);border-radius:12px;box-shadow:0 1px 2px rgba(8,19,31,.04);
  }
  .tb-cards td{
    display:flex;gap:10px;align-items:flex-start;border:0;padding:4px 0;
    font-size:13.2px;line-height:1.6;text-align:left;
  }
  .tb-cards td::before{
    content:attr(data-label);flex:0 0 78px;color:var(--muted2);font-size:11.8px;padding-top:2px;
  }
  .tb-cards td:first-child{
    display:block;font-size:14.6px;font-weight:700;color:var(--navy);
    padding:0 0 8px;margin-bottom:6px;border-bottom:1px dashed #eef2f6;
  }
  .tb-cards td:first-child::before{display:none}

  /* ② 首屏密度：手机上留白收一半，标题与导语降一档 */
  .page-hero{padding:24px 0 18px}
  .page-hero h1{font-size:23px;line-height:1.3}
  .ph-lead{font-size:13.8px;line-height:1.72}
  .ph-kpis{grid-template-columns:repeat(2,1fr);gap:8px;margin-top:16px}
  .ph-kpi b{font-size:19px}
  .ph-actions{gap:8px;margin-top:14px}
  .ph-actions .btn{flex:1 1 46%;text-align:center;justify-content:center}
  .app-fig{margin-bottom:16px}
  .app-fig img{max-height:210px}

  /* ③ 筛选栏：横滑一行，不再堆成一堵墙 */
  .catalog-layout{display:block}
  .catalog-side{position:static;width:auto;margin:0 0 12px}
  .cf-group{flex-wrap:nowrap;overflow-x:auto;padding-bottom:6px;-webkit-overflow-scrolling:touch}
  .cf-group::-webkit-scrollbar{display:none}
  .cf-chip{white-space:nowrap;flex:0 0 auto}

  /* ④ 表格类内容统一横滑，避免撑破布局 */
  .tb-scroll{-webkit-overflow-scrolling:touch}

  /* ⑤ Cookie 提示条：390×844 实测它占了近 1/3 屏、直接压住首屏主图。
        真正的容器是 .cookie-card（不是我上一版猜的 .cookie）——
        收内边距、缩图标、正文降到 12px、按钮满宽两列。 */
  .cookie{padding:8px 10px calc(8px + env(safe-area-inset-bottom))}
  .cookie-card{padding:14px 14px;border-radius:14px}
  .cookie-main{gap:10px}
  .cookie-ic{width:32px;height:32px;border-radius:9px}
  .cookie-ic svg{width:17px;height:17px}
  .cookie-tx b{font-size:14px;margin-bottom:3px}
  .cookie-tx p{font-size:12px;line-height:1.6}
  .cookie-actions{margin-top:10px;padding-top:10px;gap:8px;flex-wrap:nowrap}
  .cookie-link{margin-right:0;font-size:12px;padding:6px 8px}
  .cookie-actions .btn{flex:1;justify-content:center;font-size:12.5px;padding:8px 10px;height:38px}
}

/* ============================================================
   品牌标（2026-10-22）：顶栏 / 页脚都用图片标，按国别切文件
   ★ 两版字标宽高比不同（中文 560×120、英文 720×120），
     所以桌面端统一限高、英文标再单独收一点，避免英文标显得过宽。
   ============================================================ */
.logo{display:inline-flex;align-items:center;text-decoration:none}
/* 源图 56px 高：桌面显示 32px（1.75x）、手机 28px，兼顾清晰度与体积 */
.logo-img{display:block;height:32px;width:auto;max-width:100%}
.logo-img--en{height:30px}
@media (max-width:680px){
  .logo-img{height:28px}
  .logo-img--en{height:26px}
}
/* ★ 页脚是深色底，而标识是品牌蓝 —— 直接放上去几乎看不见。
   处理：brightness(0) 把彩色压成黑色（保留 alpha 轮廓）→ invert(1) 翻成纯白，
   再加一层 drop-shadow 做"发光/描边"，在深底上有清晰的边缘。
   这样同一张 PNG 同时服务浅色顶栏与深色页脚，不需要维护第二份素材。 */
footer .logo-img{
  height:30px;
  filter:brightness(0) invert(1) drop-shadow(0 0 6px rgba(255,255,255,.45)) drop-shadow(0 1px 2px rgba(0,0,0,.35));
}
footer .logo-img--en{height:28px}

/* ============================================================
   H5 导航抽屉（2026-10-22 第二版）
   ★ 用户反馈的问题都在这几条里：
     ① 菜单项里"加工能力/质量认证"被折成两行 —— 缺 white-space:nowrap；
     ② 主项与箭头之间隔着一大片空白 —— 原来靠 space-between 撑开，
        但 li 宽度跟着内容走，于是箭头飘在最右；改成整行 flex + 明确宽度；
     ③ 抽屉只有一列文字，没有分组、没有底部动作区 —— 补分组标题与底部 CTA；
     ④ 点按目标偏小（44px 以下）—— 统一 52px 行高，拇指友好。
   ============================================================ */
@media (max-width:900px){
  /* ★ 2026-10-22 第三版（前两版都错，记下来）：
       ① 第一版把 #menu 设成 fixed —— 它和"联系人抽屉"(#drawer，另一个元素)
          抢位置，结果菜单被挡在面板后面 ⇒ 用户看到"抽屉打开了却没有菜单项"；
       ② 第二版改成 position:static —— 菜单变成页头里的一串普通 li，
          直接压在首屏大图上（截图可见"质量认证/新闻资讯/关于我们"浮在 hero 上）；
       ③ 现在：**按 site.js 的真实开关来**。JS 给 #menu 加的是 `.open`
          （不是 is-open），子菜单加在 li 上的 `.sub-open`。定位、背景、层级全给 #menu 自己。
     */
  .nav{display:flex;align-items:center;gap:8px}
  #menu{
    position:fixed;top:0;left:0;z-index:121;
    width:min(86vw,340px);height:100vh;height:100dvh;
    /* ★ 品牌行与联系区现在都在 #menu **内部**（JS 搬进来的第一个/最后一个节点），
       所以这里不能再留 84/96px 的占位内边距 —— 否则 logo 下面会凭空多出一大块空白
       （用户截图里那个诡异的顶部空隙就是它）。 */
    margin:0;padding:0;display:flex;flex-direction:column;
    background:#fff;box-shadow:0 24px 64px rgba(8,19,31,.24);
    overflow-y:auto;-webkit-overflow-scrolling:touch;
    transform:translateX(-102%);transition:transform .28s cubic-bezier(.4,0,.2,1);
    display:block;
  }
  #menu.open{transform:translateX(0)}
  /* 页头在 390px 下会挤爆：隐藏"询价单"次要按钮，只留主 CTA + 汉堡 */
  .nav-cta .rfq-btn{display:none}
  .nav-cta .btn-nav{padding:0 12px;height:38px;font-size:13px;white-space:nowrap}
  .burger{flex:0 0 auto}
  #menu>li{border-bottom:1px solid #f0f4f8}
  #menu>li>a,#menu>li>.m-parent{
    display:flex;align-items:center;justify-content:space-between;gap:12px;
    min-height:52px;padding:0 20px;font-size:15.5px;font-weight:600;
    color:var(--navy);white-space:nowrap;text-decoration:none;
  }
  #menu>li>a:active,#menu>li>.m-parent:active{background:#f6f9fc}
  /* 二级：缩进 + 轻字号，展开时用左边框串起来 */
  #menu .submenu,#menu ul.sub{display:none;padding:0 0 8px;border-top:1px dashed #eef2f6}
  /* ★ site.js 给 li 加的是 `.sub-open`（不是 is-open）；写错就永远展不开 */
  #menu li.sub-open .submenu,#menu li.sub-open ul.sub{display:block}
  #menu .submenu a,#menu ul.sub a{
    display:block;min-height:44px;line-height:44px;padding:0 20px 0 34px;
    font-size:14px;font-weight:500;color:#4a6076;white-space:nowrap;
  }
  /* 抽屉底部动作区：把"获取报价"固定在拇指区，而不是让客户翻到页尾 */
  #menu .m-cta{position:sticky;bottom:0;padding:14px 20px;background:#fff;border-top:1px solid #eef2f6}
  #menu .m-cta a{display:block;text-align:center;min-height:46px;line-height:46px}
}

/* ============================================================
   移动端底部标签栏（H5 常规做法，2026-10-22）
   ★ 只在 ≤680px 显示；桌面的主导航不受影响。
   ★ 为什么值得加：手机用户的拇指在屏幕下半部，主菜单在左上角 ——
     没有底部栏时，从行业页回到产品/询价要滚动或点汉堡，两步变四步。
   ============================================================ */
.h5-tabbar{display:none}
@media (max-width:680px){
  .h5-tabbar{
    display:flex;position:fixed;left:0;right:0;bottom:0;z-index:110;
    background:rgba(255,255,255,.97);backdrop-filter:blur(8px);
    border-top:1px solid #e6edf4;padding:6px 4px calc(6px + env(safe-area-inset-bottom));
  }
  .h5-tabbar a{
    flex:1;display:flex;flex-direction:column;align-items:center;gap:3px;
    padding:4px 2px;text-decoration:none;color:#5b7186;font-size:11px;line-height:1.2;
  }
  .h5-tabbar a svg{width:22px;height:22px;stroke:currentColor;fill:none;stroke-width:1.8}
  .h5-tabbar a.is-on{color:var(--accent)}
  /* 中间那个突出成主按钮，指向询价 */
  .h5-tabbar a.h5-tabbar-cta{color:#fff}
  .h5-tabbar a.h5-tabbar-cta svg{
    width:40px;height:40px;padding:9px;border-radius:50%;background:var(--accent);
    stroke:#fff;margin-top:-16px;box-shadow:0 6px 18px rgba(255,122,24,.38);
  }
  body{padding-bottom:64px}
}

/* ---- 抽屉头部/底部 + 二级菜单动画（2026-10-22 第四版） ----
   ★ 抽屉现在有三段：品牌行（谁家的站）→ 菜单（去哪）→ 联系区（现在就问）。
     桌面端这两块必须隐藏，否则会挤进主导航。 */
.m-head,.m-foot{display:none}

/* ★ 抽屉打开时（JS 给 body 加 .nav-open）才把品牌行/联系区"贴"在面板上下沿。
   它们不在 #menu 内部（是 header 里的兄弟节点），所以不能靠 sticky，
   只能按面板宽度固定在左右两侧 —— 宽度与 #menu 保持一致：min(86vw,340px)。 */
@media (max-width:900px){
  /* 搬进 #menu 之后用 sticky：贴在面板上沿/底沿，滚菜单时始终可见 */
  body.nav-open .m-head{
    display:flex;position:sticky;top:0;z-index:3;
    height:58px;align-items:center;justify-content:space-between;
    padding:0 16px;background:#fff;border-bottom:1px solid #eef2f6;
  }
  body.nav-open .m-head .logo-img{height:26px}
  body.nav-open .m-foot{
    display:block;position:sticky;bottom:0;z-index:3;margin-top:auto;
    padding:10px 16px calc(12px + env(safe-area-inset-bottom));
    background:#fff;border-top:1px solid #eef2f6;
  }
}

@media (max-width:900px){
  /* ★ 这两块**只在抽屉打开时**出现（body.nav-open）。
     早前这里写成无条件 display:flex/block，结果它们常驻在页头里、
     把首屏顶下去（截图里那一行"logo + × + WhatsApp + 邮箱"就是它）。 */
  .m-head{display:none}
  .m-head .logo-img{height:26px}
  .m-close{
    width:36px;height:36px;flex:0 0 auto;border:0;border-radius:10px;
    background:#f2f6fa;color:#33475b;font-size:22px;line-height:1;
  }
  .m-close:active{background:#e6eef6}

  .m-foot{display:none}
  .m-quick{
    display:block;text-align:center;min-height:44px;line-height:44px;border-radius:10px;
    background:var(--accent);color:#fff;font-weight:700;font-size:14px;text-decoration:none;margin-bottom:8px;
  }
  .m-quick:active{filter:brightness(.94)}
  .m-line{
    display:flex;align-items:center;gap:8px;min-height:40px;
    font-size:13px;color:#4a6076;text-decoration:none;border-radius:8px;padding:0 4px;
  }
  .m-line svg{width:16px;height:16px;stroke:currentColor;fill:none;stroke-width:1.8;flex:0 0 auto}
  .m-line:active{background:#f2f6fa}

  /* ★ 二级菜单容器是 `.sub`（`subPanel()` 输出的 `<div class="sub sub-wide">`），
        不是 submenu / ul.sub —— 前面两版都写错了选择器，所以"点了不展开"。 */
  #menu .sub{display:block;max-height:0;overflow:hidden;transition:max-height .28s ease}
  #menu li.sub-open .sub{max-height:560px}
  #menu>li.has-sub>a .caret{transition:transform .25s;margin-left:auto}
  #menu>li.sub-open>a .caret{transform:rotate(180deg)}
  #menu>li.sub-open>a{color:var(--accent)}

  /* 触控反馈：iOS/Android 默认的灰色高亮很难看，统一关掉并自己做按下态 */
  a,button,.cf-chip{-webkit-tap-highlight-color:transparent}
  #menu>li>a:active,#menu>li>.m-parent:active{background:#f2f6fa}

  /* 清单表转卡片：长文本（"主要失效工况"那一列）不能撑破卡片 */
  .tb-cards td{word-break:break-word;overflow-wrap:anywhere}
  .tb-cards td::before{flex:0 0 84px}
}

/* ---- H5 第五版（2026-10-22）：抽屉铺满、悬浮图标避让、卡片双列 ---- */
@media (max-width:900px){
  /* ① 菜单项必须铺满整行：a 是 inline 时背景/按下态只包住文字，看起来像"没铺满" */
  #menu>li{display:block;width:100%}
  #menu>li>a,#menu>li>.m-parent{
    display:flex;width:100%;box-sizing:border-box;
    align-items:center;justify-content:space-between;
    padding:0 18px;min-height:52px;
  }
  #menu .sub{width:100%}
  #menu .sub a{display:flex;width:100%;box-sizing:border-box}
  /* 品牌行铺满、紧贴上沿 */
  body.nav-open .m-head{width:100%;padding:0 18px}
  body.nav-open .m-foot{width:100%}
}

@media (max-width:680px){
  /* ② 悬浮客服按钮：原来是 56px、贴在最底，正好压在底部标签栏上。
        改成 46px 并上移到标签栏之上（64px + 12px 间距）。 */
  /* ★ 真实 id 是 #fabBtn（不是 #fab）—— 写错就一点效果都没有，白改一轮 */
  .fab,#fab,#fabBtn,.chat-fab{
    width:46px!important;height:46px!important;
    right:14px!important;bottom:76px!important;
  }
  .fab svg,#fab svg,#fabBtn svg,.chat-fab svg{width:22px!important;height:22px!important}
  #fabBtn svg,.chat-fab svg{stroke-width:1.9}
  /* 有底部标签栏时，抽屉底部 CTA 也不能被压住 */
  body{padding-bottom:64px}

  /* ③ 卡片不再"一行一个"：小卡双列，信息密度接近原生 App */
  .apps-grid,.apps-grid-5{grid-template-columns:repeat(2,minmax(0,1fr))!important;gap:10px}
  .apps-grid-5 .app p{display:-webkit-box;-webkit-line-clamp:3;-webkit-box-orient:vertical;overflow:hidden}
  .catalog-grid{grid-template-columns:repeat(2,minmax(0,1fr))!important;gap:12px}
  .stats-grid,.stat-mini{grid-template-columns:repeat(2,minmax(0,1fr))!important}
  .f-grid{grid-template-columns:repeat(2,minmax(0,1fr))!important;gap:18px}
  .f-brand,.f-grid>div:first-child{grid-column:1/-1}
  .ph-kpis{grid-template-columns:repeat(2,minmax(0,1fr))!important}
  .tb-cards tr{padding:10px 12px}
}

/* ---- 抽屉几何终局修正（2026-10-22） ----
   实测（浏览器 computed style）：#menu 的 padding-top 仍是 84px、top 是 45px，
   所以 logo 上方凭空多出一段空白、抽屉也没贴到屏幕顶部。
   原因是文件里有多份 #menu 规则（v1/v3/v5 各写过一次），后写的被前面的
   padding:84px 0 96px 与某个 top 规则顶掉，只改一处不生效。
   解决：用双 id 选择器（特异性 2,0,0）一次压过所有旧规则。 */
@media (max-width:900px){
  #menu#menu{
    top:0;left:0;right:auto;bottom:auto;
    height:100vh;height:100dvh;
    padding:0;margin:0;
    display:flex;flex-direction:column;
    background:#fff;
  }
  #menu#menu>li{flex:0 0 auto}
  #menu#menu .m-head{flex:0 0 auto}
  #menu#menu .m-foot{flex:0 0 auto;margin-top:auto}
}

/* ---- H5 第六版（2026-10-22）：顶栏不再溢出、悬浮球让位标签栏 ---- */
@media (max-width:680px){
  /* ① 顶部工具条：390px 下"电话 + 关注我们 + 语言"必然重叠（用户截图里
        "+86 189 3306…" 压住了"关注我们"）。手机上只留电话与语言，
        社交入口收进抽屉的联系区。 */
  .topbar{padding:6px 0;font-size:12px}
  .topbar .wrap{display:flex;align-items:center;justify-content:space-between;gap:8px;flex-wrap:nowrap}
  .tb-left{gap:10px;min-width:0;overflow:hidden}
  .tb-left a[href*="weibo"],.tb-left a[href*="linkedin"],.tb-left a[href*="youtube"]{display:none}
  .tb-item{font-size:12px;max-width:150px;overflow:hidden;text-overflow:ellipsis}
  /* ★ 2026-10-23：原来是 `flex:0 0 auto`（**完全不收缩**）⇒ 内容一宽就把
     .topbar .wrap 撑出 4px，手机上出现横向滚动条（实测 docW=379 / viewport=375）。
     改成允许收缩 + min-width:0，多出来的宽度由里面的文字省略号吸收。 */
  .tb-right{gap:6px;flex:0 1 auto;min-width:0}
  /* 国别下拉 min-width:242px 在小屏上会超出视口（它 overflow:auto 但外壳撑宽）；
     限到视口内，长国名靠省略号。 */
  .tb-country-menu{min-width:0;width:min(78vw,242px)}
  .tb-search{display:none}
  .tb-lang{font-size:12px;padding:2px 6px}

  /* ② 悬浮客服球：底部标签栏已有"联系"入口，两者叠在一起会挡住"询价"
        （截图里那个橙色气泡正压在标签栏上）⇒ 手机上直接隐藏。 */
  #fabBtn,.fab,.chat-fab{display:none!important}
}

/* ---- H5 第七版（2026-10-22）：视觉 / 交互收口 ----
   这一版只解决"用起来别扭"的地方，不再动信息结构。 */
@media (max-width:680px){

  /* ① 恢复右下角即时聊天按钮，但抬到标签栏之上（用户要求保留功能，且不许挡住导航）。
        尺寸 48px：单手握持时拇指正好够到，又不会盖住卡片内容。 */
  #fabBtn,.fab,.chat-fab{
    display:flex!important;align-items:center;justify-content:center;
    width:48px!important;height:48px!important;
    right:14px!important;
    bottom:calc(64px + 16px + env(safe-area-inset-bottom))!important;
    border-radius:50%!important;
    box-shadow:0 8px 22px rgba(8,19,31,.28)!important;
    z-index:105!important;                 /* 低于抽屉(121)与遮罩，打开菜单时不浮在上面 */
  }
  #fabBtn svg,.fab svg,.chat-fab svg{width:24px!important;height:24px!important}

  /* ② 抽屉打开时：藏起汉堡（它自己会变成 ×，与品牌行的关闭键重复）
        并藏起 Cookie 条（否则压住面板底部的"获取报价"）。 */
  body.nav-open .burger{display:none!important}
  body.nav-open .cookie{display:none!important}

  /* ③ 正文可读性：手机默认 14px 偏小，正文提到 15px、行高 1.68 */
  body{font-size:15px;-webkit-text-size-adjust:100%}
  .page-main p,.ph-lead,.sec-block p{line-height:1.68}

  /* ④ 标签栏：加一层很淡的上阴影，滚动时与内容有分离感；图标略微加大 */
  .h5-tabbar{box-shadow:0 -6px 18px rgba(8,19,31,.06)}
  .h5-tabbar a svg{width:24px;height:24px}
  .h5-tabbar a:active{background:#f4f8fc}
  .h5-tabbar a.is-on{font-weight:700}

  /* ⑤ 触控与滚动体验 */
  html{scroll-behavior:smooth}
  body{overscroll-behavior-y:none}
  .tb-scroll,.drawer{-webkit-overflow-scrolling:touch}

  /* ⑥ 首屏按钮：主次分明（主按钮实心、次按钮描边），并统一 48px 高 */
  .ph-actions .btn{min-height:46px;display:flex;align-items:center;justify-content:center}
  .ph-actions{gap:10px}

  /* ⑦ 卡片：等高 + 标题不折行过多 */
  .apps-grid-5 .app{display:flex;flex-direction:column}
  .apps-grid-5 .app h3{font-size:13.5px;line-height:1.35;margin:6px 0 4px}
}
@media (max-width:680px){/* Cookie 条抬到标签栏之上：否则它盖住底部导航，用户不点掉就没法换页 */
  .cookie{bottom:calc(64px + env(safe-area-inset-bottom))}
}
/* 抽屉打开时收起悬浮客服球：它压在面板右缘上，且此时用户已在菜单里 */
@media (max-width:680px){body.nav-open #fabBtn,body.nav-open .chat-fab{display:none!important}}

/* ===== H5NAV（2026-10-22 重写：独立面板，不再复用桌面菜单 DOM） =====
   ★ 与旧方案的关系：旧抽屉靠在 #menu 上叠媒体查询实现，类名/层级反复冲突。
     新面板自带 DOM（.h5nav）、自带状态（body.nav-open + aria-expanded），
     移动端把 #menu 整个隐藏，桌面导航完全不受影响。 */
.h5nav{display:none}

@media (max-width:900px){
  #menu{display:none!important}          /* 旧抽屉停用：它已不参与任何布局 */
  .m-head,.m-foot{display:none!important}

  .h5nav{display:block;position:fixed;inset:0;z-index:200;pointer-events:none}
  .h5nav::before{
    content:"";position:absolute;inset:0;background:rgba(5,14,23,.48);
    opacity:0;transition:opacity .26s;
  }
  body.nav-open .h5nav{pointer-events:auto}
  body.nav-open .h5nav::before{opacity:1}

  .h5nav-panel{
    position:absolute;top:0;left:0;bottom:0;width:min(88vw,360px);
    display:flex;flex-direction:column;background:#fff;
    transform:translateX(-102%);visibility:hidden;
    transition:transform .28s cubic-bezier(.4,0,.2,1), visibility .28s;
    box-shadow:0 24px 64px rgba(5,14,23,.3);
  }
  body.nav-open .h5nav-panel{transform:none;visibility:visible}

  .h5nav-head{
    display:flex;align-items:center;justify-content:space-between;
    padding:12px 16px;border-bottom:1px solid #eef2f6;flex:0 0 auto;
  }
  .h5nav-head .logo-img{height:26px}
  .h5nav-x{
    width:36px;height:36px;flex:0 0 auto;border:0;border-radius:10px;
    background:#f2f6fa;color:#33475b;font-size:22px;line-height:1;
  }

  .h5nav-body{flex:1 1 auto;overflow-y:auto;-webkit-overflow-scrolling:touch;overscroll-behavior:contain}
  .h5nav-list{margin:0;padding:0;list-style:none}
  .h5nav-list>li{border-bottom:1px solid #f2f6fa}
  .h5nav-list>li>a,.h5nav-toggle{
    display:flex;align-items:center;justify-content:space-between;
    width:100%;min-height:52px;padding:0 16px;box-sizing:border-box;
    font-size:16px;font-weight:600;color:#050e17;text-align:left;
    background:none;border:0;text-decoration:none;
  }
  .h5nav-list>li>a:active,.h5nav-toggle:active{background:#f6f9fc}

  .h5nav-caret{
    width:8px;height:8px;margin-right:4px;
    border-right:2px solid #9fb2c4;border-bottom:2px solid #9fb2c4;
    transform:rotate(45deg);transition:transform .25s;
  }
  li.open>.h5nav-toggle{color:var(--accent)}
  li.open>.h5nav-toggle .h5nav-caret{transform:rotate(-135deg);border-color:var(--accent)}

  .h5nav-sub{max-height:0;overflow:hidden;transition:max-height .3s ease;background:#fafcfe}
  li.open>.h5nav-sub{max-height:720px}
  .h5nav-sub-in{padding:2px 0 8px}
  .h5nav-sub a{display:block;padding:11px 16px 11px 28px;font-size:14px;color:#3c5266;text-decoration:none}
  .h5nav-sub a:active{background:#eef4fa}
  .h5nav-gt{padding:10px 16px 2px 28px;font-size:12px;color:#8aa0b4;font-weight:700}
  .h5nav-sub .h5nav-all{color:var(--accent);font-weight:600}

  .h5nav-foot{
    flex:0 0 auto;display:flex;flex-wrap:wrap;gap:6px 14px;
    padding:12px 16px calc(12px + env(safe-area-inset-bottom));
    border-top:1px solid #eef2f6;background:#fff;
  }
  .h5nav-cta{
    flex:1 0 100%;height:46px;border:0;border-radius:10px;
    background:var(--accent);color:#fff;font-weight:700;font-size:15px;
  }
  .h5nav-line{font-size:13px;color:#4a6076;text-decoration:none;padding:4px 0}
}

/* ===== H5 首页信息密度（2026-10-22） ===== */
@media (max-width:680px){
  /* hero：手机上一屏只讲一件事，别让 6 张幻灯片各撑 600px */
  .hero-slide{min-height:0}
  .hero-copy{padding:18px 0 14px}
  .hero-copy h1,.hero-copy h2{font-size:25px;line-height:1.24;margin-bottom:8px}
  .hero-copy p{font-size:13px;line-height:1.6}
  .hero-actions .btn{height:44px;font-size:14px}
  .hero-dots,.hero-nav{display:none}          /* 手机上不显示轮播页码/箭头，滑动即可 */

  /* 卡片：两列 + 文字截断，避免一张卡撑到半屏 */
  .apps-grid-5 .app p,.app p{font-size:12px;line-height:1.55;
    display:-webkit-box;-webkit-line-clamp:3;-webkit-box-orient:vertical;overflow:hidden}
  .apps-grid-5 .app .tags,.app .tags{max-height:50px;overflow:hidden}
  .news-grid,.n-grid,.cards-3,.feature-grid,.caps-grid,.why-grid{grid-template-columns:repeat(2,minmax(0,1fr))!important;gap:10px}
  .news-card p,.ncard p{display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}

  /* 悬浮按钮：聊天球与"回到顶部"上下错开，不再叠在一起 */
  .top-btn{right:14px!important;bottom:calc(64px + 12px + env(safe-area-inset-bottom))!important;width:40px!important;height:40px!important}
  #fabBtn,.fab,.chat-fab{bottom:calc(64px + 64px + env(safe-area-inset-bottom))!important}

  /* 顶部工具条：只留图标与最短文字 */
  .topbar{padding:5px 0}
  .tb-item{font-size:11px}
  .tb-right .tb-item{max-width:96px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
}

/* ===== H5 APP 化（2026-10-22）：字号、密度、模块两列、聊天窗缩小 =====
   ★ 类名取自真实 DOM（.prod / .news-card / .cert-card / .chat-cs-pop），
     不再靠猜——前面几轮因为写错选择器白改了两回。 */
@media (max-width:680px){
  /* ① 主营产品 & 执行标准：一行两个卡位 */
  .prod{display:grid!important;grid-template-columns:repeat(2,minmax(0,1fr))!important;gap:10px}
  .prod-oem,.prod-spec{font-size:11.5px;line-height:1.5}
  .prod-ic{width:30px;height:30px}
  .prod-ic svg{width:18px;height:18px}
  .cert-card{padding:12px 10px}
  .cert-card b,.cert-card strong{font-size:13px}

  /* ② 新闻：标题降一档、摘要直接不显示（H5 上它只贡献高度） */
  .news-card h3,.news-body h3,.news-card .n-title{
    font-size:15px!important;line-height:1.36;margin:5px 0 4px;
    display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden;
  }
  .news-body p,.news-card p,.news-card .n-desc{display:none}
  .news-thumb{height:96px}
  .news-date,.news-cat{font-size:11px}

  /* ③ 全站 H5：区块间距与标题统一收紧，读起来像 App 而不是网页 */
  .section{padding:26px 0}
  .sec-head{margin-bottom:14px}
  .sec-head h2{font-size:19px;line-height:1.3}
  .sec-head p{font-size:12.5px;line-height:1.6;
    display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}
  .sec-block{padding:18px 0}
  .sec-block h2{font-size:17px}

  /* ④ 即时聊天：面板与小气泡都缩小，别挡住内容 */
  .chat-cs-pop{width:min(300px,84vw)!important;max-height:58vh!important;right:12px!important}
  .chat-cs-btn{width:44px!important;height:44px!important}
  .chat-widget{max-height:70vh;border-radius:14px}
  .chat-body{max-height:44vh}
  .chat-head{padding:10px 12px}
  .chat-msg{font-size:13px;line-height:1.55}

  /* ⑤ App 感的细节：卡片圆角统一、去掉多余的投影堆叠 */
  .section .card,.prod,.news-card,.cert-card{border-radius:12px}
  .prod,.news-card{box-shadow:0 1px 2px rgba(5,14,23,.05)}
}

/* ===== H5 产品卡（2026-10-22）：图片占一半 ===== */
/* ★ 结构实测：article.prod > a.prod-hit + div.prod-top(.prod-ic>img + .prod-oem) + h3 + p + dl.prod-spec
   以前是纵向堆叠、图片只有 30–40px 的图标大小，390px 屏上几乎看不清产品长什么样。
   现在改成左右分栏：左栏 46% 放整张产品图 + 品类标签，右栏放标题/描述/规格表。
   用 grid-template-areas 而不是 flex，是因为 h3/p/dl 与 .prod-top 是同级兄弟节点，
   grid 能直接把它们分配到两列，不必改模板结构。 */
@media (max-width:680px){
  .prod-grid{grid-template-columns:1fr!important;gap:12px}

  .prod{
    display:grid;
    grid-template-columns:46% 1fr;
    grid-template-areas:
      "top title"
      "top desc"
      "top spec";
    column-gap:12px;
    padding:0;
    overflow:hidden;
    align-items:start;
  }
  .prod-top{grid-area:top;display:block;margin:0;padding:0;height:100%}
  .prod-ic{
    width:100%;height:100%;min-height:138px;
    border-radius:12px 0 0 12px;overflow:hidden;background:#eef3f8;
  }
  .prod-ic img{width:100%;height:100%;min-height:138px;object-fit:cover;display:block}
  .prod-oem{
    display:inline-block;margin:8px 0 0 10px;font-size:11px;padding:2px 8px;
    border-radius:6px;background:rgba(30,58,138,.08);color:#1e3a8a;
  }
  .prod h3{grid-area:title;margin:12px 12px 4px 0;font-size:15px;line-height:1.35;
    display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}
  .prod p{grid-area:desc;margin:0 12px 8px 0;font-size:12px;line-height:1.55;color:#5b7186;
    display:-webkit-box;-webkit-line-clamp:3;-webkit-box-orient:vertical;overflow:hidden}
  .prod-spec{grid-area:spec;margin:0 12px 12px 0;font-size:11.5px}
  .prod-spec>div{display:flex;gap:6px}
  .prod-spec dt{color:#8aa0b4;flex:0 0 auto}
  .prod-spec dd{margin:0;color:#33475b;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
}

/* ===== H5NAV v2（2026-10-22）：快捷入口 + 分组标题 + 更细的层级 ===== */
@media (max-width:900px){
  /* 顶部 4 个快捷入口：2×2，格子大、拇指好点 */
  .h5nav-quick{
    display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:8px;
    padding:12px 14px 4px;
  }
  .h5nav-q{
    display:flex;align-items:center;gap:9px;
    padding:11px 12px;border-radius:11px;
    background:#f4f8fc;border:1px solid #e8eff7;
    color:#1e3a8a;font-size:13.5px;font-weight:600;text-decoration:none;
    -webkit-tap-highlight-color:transparent;
  }
  .h5nav-q:active{background:#e7eff9;transform:scale(.985)}
  .h5nav-q svg{
    width:19px;height:19px;flex:0 0 auto;
    stroke:#1e3a8a;fill:none;stroke-width:1.7;stroke-linecap:round;stroke-linejoin:round;
  }

  /* 分组标题：把"全部栏目"和上面的快捷入口分开 */
  .h5nav-sec{
    padding:14px 18px 6px;font-size:11.5px;font-weight:700;
    letter-spacing:.08em;text-transform:uppercase;color:#93a5b8;
  }

  /* 一级项：左侧竖条表示当前项，箭头与文字对齐更稳 */
  .h5nav-list>li>a,.h5nav-toggle{position:relative}
  .h5nav-list>li>a::before{
    content:"";position:absolute;left:0;top:50%;width:3px;height:0;
    background:var(--accent);border-radius:0 3px 3px 0;transform:translateY(-50%);
    transition:height .2s;
  }
  .h5nav-list>li>a:hover::before{height:60%}
  .h5nav-sub-in{padding:2px 0 10px}
  .h5nav-sub a{position:relative}
  /* 二级项左边一条引导线，视觉上归属更清楚 */
  .h5nav-sub a::before{
    content:"";position:absolute;left:16px;top:50%;width:10px;height:1px;
    background:#d5e0ea;transform:translateY(-50%);
  }
  .h5nav-sub a{padding-left:34px}
  .h5nav-gt{padding-left:34px}
}

/* 面板整体再收一点：圆角、阴影、右侧留白，像原生抽屉 */
@media (max-width:900px){
  .h5nav-panel{border-radius:0 14px 14px 0}
  .h5nav-head{padding:14px 18px}
  .h5nav-foot .h5nav-cta{box-shadow:0 6px 16px rgba(255,122,24,.32)}
}

/* ============================================================
   顶栏下拉面板的「防裁剪」覆盖（2026-10-24）
   ------------------------------------------------------------
   ≤680px 处另有一组「窄屏防溢出」规则：`.tb-left{overflow:hidden}` 与
   `.tb-item{overflow:hidden;text-overflow:ellipsis;max-width:150px}` ——
   本意是把过长的电话号码截成省略号。但 `overflow:hidden` 会把**下拉面板一起裁掉**：
   面板是绝对定位、展开在按钮下方（按钮只有 34px 高），一旦超出按钮盒就整块消失。
   症状特别隐蔽：DOM 里 `display:flex`、坐标也对（`x=18,y=54,212×90`），
   肉眼却什么都看不到 —— 只有 `document.elementFromPoint()` 能看出命中的是下面的 logo 图片。
   这里只对**承载下拉的容器**放开裁剪（5 个按钮总宽 202px，375 宽放得下，不会溢出）。
   必须写在文件靠后：与 683 行那组规则同特异性，靠后者生效。
   ============================================================ */
@media (max-width:680px){
  .tb-left{overflow:visible}
  .tb-item.tb-drop{overflow:visible;max-width:none}
}

/* ============================================================
   工厂实拍视频弹窗（2026-10-25）
   ------------------------------------------------------------
   首页「观看工厂视频」原来只弹一句 toast。现在打开本地实拍视频。
   `max-height:80vh`：竖屏视频（分条线）在桌面不会把弹窗顶出屏幕。
   ============================================================ */
/* ★ z-index 取 1200：与询价弹窗 `.modal` 同一档（项目里"模态"的既有层级）。
   写 300 时实测**顶栏压在上面**（header 是 sticky，另成一层），
   结果是遮罩只盖住正文、顶栏亮着 —— 看起来像"弹窗从顶栏下面钻出来"。 */
/**
 * ★ 必须独立合成层（translateZ(0) + isolation）：
 *   `header` 用了 `backdrop-filter`（sticky 毛玻璃），而带 backdrop-filter 的元素
 *   在 Chromium 里会被提到合成层绘制顺序的前面 —— 结果是 z-index:1200 的遮罩
 *   **压不住顶栏**：DOM 里 `elementFromPoint` 明明命中遮罩，截图里顶栏却还是亮的。
 *   加 transform 后弹窗自成一个合成层，绘制顺序才回到 z-index 说了算。
 */
.fv-modal{position:fixed;inset:0;z-index:1200;display:none;transform:translateZ(0);isolation:isolate}
.fv-modal.open{display:flex;align-items:center;justify-content:center;padding:24px}
/**
 * ★ 弹窗打开时**临时去掉顶栏的 backdrop-filter**（毛玻璃）。
 *   实测：带 backdrop-filter 的 sticky 顶栏会被提升到合成层，z-index:1200 的遮罩
 *   在命中测试里"压住"了顶栏（elementFromPoint 返回遮罩），但**绘制上**顶栏仍在最上面：
 *   它用 94% 白背景采样下层，把下面的遮罩又刷白了一遍 ⇒ 截图里顶栏永远是亮的。
 *   去掉 backdrop-filter 后它退回普通 sticky 层，遮罩才真正盖住它。
 */
/* 顶部条同样是 sticky ⇒ 同一个合成层问题，全屏视频期间一起隐藏（保留占位） */
body.fv-open .topbar{
  visibility:hidden!important;
}
body.fv-open #header{
  -webkit-backdrop-filter:none!important;
  backdrop-filter:none!important;
  background:rgba(255,255,255,1)!important;
  /**
   * ★ 还要 `visibility:hidden`：只去掉 backdrop-filter 不够。
   *   实测（Chromium）：`position:sticky` 的顶栏会被提升为独立合成层，
   *   而 `position:fixed` 的遮罩常常**画在它下面** —— 于是 z-index:1200 也压不住，
   *   `elementFromPoint` 明明命中遮罩、截图里顶栏却依旧清晰。
   *   全屏视频弹窗期间顶栏没有存在价值，直接隐藏最省事，也不用跟合成层博弈。
   *   （用 visibility 而不是 display:none：sticky 元素保留占位，关掉弹窗后不会跳一下）
   */
  visibility:hidden!important;
}
.fv-mask{position:absolute;inset:0;background:rgba(5,14,23,.84)}
.fv-panel{
  position:relative;z-index:1;width:min(960px,92vw);max-height:88vh;
  border-radius:16px;overflow:hidden;
  background:#000;box-shadow:0 30px 80px rgba(0,0,0,.55);
}
.fv-video{display:block;width:100%;height:auto;max-height:80vh;background:#000}
.fv-x{
  position:absolute;top:8px;right:10px;z-index:2;width:38px;height:38px;
  border:0;border-radius:50%;background:rgba(0,0,0,.5);color:#fff;
  font-size:22px;line-height:36px;cursor:pointer;transition:.2s;
}
.fv-x:hover{background:rgba(0,0,0,.78)}
@media (max-width:560px){
  .fv-modal.open{padding:12px}
  .fv-panel{border-radius:12px;max-height:92vh}
  .fv-video{max-height:74vh}
}

/* ---------------- 页脚订阅（2026-10-27） ----------------
   放在页脚而不是单独落地页：31 个国家一次到位，不用改 31 个模板。
   表单本身由服务端片段输出（文案取内容表，可后台改/翻译），这里只管样式。 */
.f-sub{display:flex;flex-wrap:wrap;align-items:center;gap:18px;justify-content:space-between;
  padding:22px 0;border-top:1px solid rgba(255,255,255,.12);border-bottom:1px solid rgba(255,255,255,.12)}
.f-sub-tx{display:flex;flex-direction:column;gap:4px;max-width:520px}
.f-sub-tx b{font-size:15px;color:#fff}
.f-sub-tx small{font-size:12.5px;line-height:1.6;color:rgba(255,255,255,.62)}
.f-sub-form{display:flex;gap:8px;flex-wrap:wrap}
.f-sub-form input{min-width:220px;padding:10px 14px;border-radius:8px;border:1px solid rgba(255,255,255,.22);
  background:rgba(255,255,255,.06);color:#fff;font-size:14px;outline:none}
.f-sub-form input::placeholder{color:rgba(255,255,255,.45)}
.f-sub-form input:focus{border-color:#e8720c;box-shadow:0 0 0 3px rgba(232,114,12,.18)}
.f-sub-form button{padding:10px 20px;border-radius:8px;border:0;background:#e8720c;color:#fff;
  font-size:14px;font-weight:600;cursor:pointer}
.f-sub-form button:disabled{opacity:.6;cursor:default}
.f-sub-msg{flex-basis:100%;font-size:12.5px;min-height:16px}
@media (max-width:640px){.f-sub-form{width:100%}.f-sub-form input{flex:1;min-width:0}}
