/* ============================================================
   DAPU AUTO PARTS — theme.css
   视觉升级层（叠加在 style.css / style-pages.css 之后）
   目标：
     1. 消除大面积纯白，建立「地面 - 面板 - 浮层」三层空间
     2. 强化品牌色阶与对比度
     3. 统一卡片 / 表单 / 表格的面板语言
     4. 补齐缺失的 .why__card 定义
     5. 语言切换器样式
   原则：只覆盖变量 + 追加规则，不修改原文件，便于回滚。
   ============================================================ */

/* ============================================================
   1. 调色板重建
   ------------------------------------------------------------
   原 --bg:#ffffff / --bg-2:#f5f6f7 两者几乎无差别，
   是「一片白」的根因。这里把整条灰阶拉开：
     --bg     冷灰蓝地面，永远不是纯白
     --surface 白色卡片面，用于浮在 --bg 之上的面板
     --bg-2/3 两级下沉底色，用于交替区块
   ============================================================ */
:root{
  /* --- 灰阶：拉出可辨识的层次 --- */
  --ink:#14181f;
  --ink-2:#3f4650;
  --ink-3:#6d757f;
  --ink-4:#98a1ac;
  --line:#dde3ea;
  --line-2:#c6ceda;

  /* 地面色：冷灰蓝，取代纯白 */
  --bg:#eef2f7;
  --bg-2:#e3e9f1;
  --bg-3:#d6dee8;
  /* 面板色：卡片 / 表单的白面（比地面亮一档） */
  --surface:#ffffff;
  --surface-2:#f7f9fc;
  --surface-hi:#fbfcfe;

  /* --- 品牌色阶：加深并补全中间调，提升对比度 --- */
  --brand:#12324f;
  --brand-2:#1e6091;
  --brand-3:#3d8cbf;
  --brand-lt:#c3dcee;
  --brand-soft:#e6f0f8;
  --accent:#c8102e;
  --accent-soft:#fdecef;

  /* --- 空间与形态 --- */
  --r-sm:6px;
  --r-md:10px;
  --r-lg:16px;
  --sh-1:0 1px 2px rgba(18,50,79,.05), 0 1px 3px rgba(18,50,79,.04);
  --sh-2:0 2px 4px rgba(18,50,79,.05), 0 6px 16px rgba(18,50,79,.07);
  --sh-3:0 8px 20px rgba(18,50,79,.09), 0 20px 44px rgba(18,50,79,.10);
}

body{background:var(--bg);color:var(--ink)}

/* ============================================================
   2. 区块背景层次
   ------------------------------------------------------------
   原来 .sec--alt 只是 #f5f6f7，和白色地面几乎同色。
   现在改成真正的两级下沉 + 上下边界阴影，形成"卡片带"。
   ============================================================ */
.sec{position:relative}
.sec--alt{
  background:linear-gradient(180deg,var(--bg-2) 0%,#dde5ef 100%);
  border-block:1px solid var(--line);
  box-shadow:inset 0 1px 0 rgba(255,255,255,.7),
             inset 0 -1px 0 rgba(255,255,255,.5);
}

/* ============================================================
   3. HEADER —— 毛玻璃 + 滚动浮起
   ============================================================ */
.hdr{
  background:rgba(238,242,247,.86);
  backdrop-filter:saturate(180%) blur(14px);
  -webkit-backdrop-filter:saturate(180%) blur(14px);
  border-bottom:1px solid var(--line);
  transition:box-shadow .26s var(--ease),background .26s var(--ease);
}
.hdr.is-stuck{
  background:rgba(238,242,247,.94);
  box-shadow:0 4px 18px rgba(18,50,79,.09);
}
.hdr__cta,.btn--dark{
  background:linear-gradient(160deg,var(--brand-2) 0%,var(--brand) 100%);
  box-shadow:0 2px 6px rgba(18,50,79,.22);
}
.hdr__cta:hover,.btn--dark:hover{
  background:linear-gradient(160deg,#2470a5 0%,#0d2740 100%);
  box-shadow:0 4px 12px rgba(18,50,79,.28);
}

/* ============================================================
   4. HERO —— 深蓝渐变横幅（取代褪到纯白的浅灰）
   ============================================================ */
.hero{
  background:
    radial-gradient(1000px 460px at 88% 8%,rgba(61,140,191,.30) 0%,transparent 62%),
    radial-gradient(760px 380px at 4% 96%,rgba(30,96,145,.22) 0%,transparent 60%),
    linear-gradient(158deg,#0e2a43 0%,#123a5c 42%,#1b527c 100%);
  border-bottom:0;
  color:#fff;
  position:relative;
  overflow:hidden;
}
/* 细网格纹理，增加工业质感而不喧嚣 */
.hero::before{
  content:"";position:absolute;inset:0;pointer-events:none;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:56px 56px;
  mask-image:linear-gradient(180deg,rgba(0,0,0,.9),transparent 82%);
  -webkit-mask-image:linear-gradient(180deg,rgba(0,0,0,.9),transparent 82%);
}
.hero>.wrap{position:relative;z-index:1}

.hero h1{color:#fff;text-shadow:0 2px 14px rgba(0,0,0,.24)}
.hero h1 em{
  color:#8fc7e8;
  font-style:normal;
}
.hero__lead{color:rgba(255,255,255,.80)}
.hero__act .btn--ghost{
  border-color:rgba(255,255,255,.42);
  background:rgba(255,255,255,.06);
}
.hero__act .btn--ghost:hover{background:rgba(255,255,255,.16)}
.hero__facts{border-top-color:rgba(255,255,255,.20)}
.hero__facts div dt{color:rgba(255,255,255,.55)}
.hero__facts div dd{color:#a8d5f0}

/* Hero 右侧图卡：在深色背景上浮起来 */
.hero__fig{
  background:var(--surface);
  border:1px solid rgba(255,255,255,.22);
  box-shadow:0 18px 46px rgba(4,18,32,.38);
  border-radius:var(--r-md);
}
.hero__fig figcaption{
  background:var(--surface-2);
  border-top-color:var(--line);
}
.hero__thumbs button{
  background:rgba(255,255,255,.92);
  border-color:rgba(255,255,255,.28);
}
.hero__thumbs button:hover{border-color:#8fc7e8}
.hero__thumbs button.on{
  border-color:#8fc7e8;
  box-shadow:0 0 0 3px rgba(143,199,232,.28);
}

/* ============================================================
   5. 通用卡片语言
   ------------------------------------------------------------
   统一规则：白面 + 极细描边 + 两级阴影 + 圆角。
   原先各处硬编码 background:#fff 且无阴影，导致"白墙贴白墙"。
   ============================================================ */
.pcard,.apps__i,.about__card,.why__note,
.hero__thumbs button,.mnav__panel{
  box-shadow:var(--sh-1);
}
.pcard{
  background:var(--surface);
  border-color:var(--line);
  border-radius:var(--r-md);
}
.pcard:hover{
  border-color:var(--brand-3);
  box-shadow:var(--sh-3);
  transform:translateY(-4px);
}
.pcard__media{
  background:
    radial-gradient(120% 90% at 50% 0%,#ffffff 0%,var(--bg-2) 100%);
  border-bottom-color:var(--line);
}
.pcard__meta b{color:var(--brand-2)}

/* ---------- 产品卡栅格：全站统一 3 列 ----------
   style.css 原为 .pgrid{repeat(auto-fill,minmax(240px,1fr))}，
   在 1440px 容器下会排出 5 列 —— 卡太密、图片太小、末行还常掉 1 张。
   .pgrid 被 #mainProducts(首页) / #catGrid(产品中心) / 类目页 / 详情页共用，
   所以改这一处即可全站生效。 */
.pgrid{
  grid-template-columns:repeat(3,1fr);
  gap:clamp(18px,2.2vw,28px);
}
@media (max-width:900px){
  .pgrid{grid-template-columns:repeat(2,1fr)}
}
@media (max-width:560px){
  .pgrid{grid-template-columns:1fr}
}

/* 列表页卡片：图更大更好认 */
.pgrid .pcard__media{padding:clamp(10px,1.2vw,16px)}

/* ---------- 无图型号的占位块（约束 2） ----------
   绝不能输出 <img src="">：空 src 的 <img> 会渲染成浏览器破图标，
   比没有图更难看。这里用 div 占位 + CSS 画底色，视觉上与有图卡片同尺寸，
   卡片高度不变 → 栅格不错位、CLS 仍为 0。
   .pcard__ph 显示 DP 号，让买家仍能识别这是哪个型号。 */
.pcard__media--ph{
  display:flex;align-items:center;justify-content:center;
  background:
    linear-gradient(135deg,var(--bg-2) 0%,var(--bg-3) 100%);
  box-shadow:inset 0 0 0 1px var(--line);
}
.pcard__ph{
  font-size:clamp(11px,1.1vw,13px);
  font-weight:700;
  letter-spacing:.06em;
  color:var(--ink-4);
  text-align:center;
  padding:0 8px;
  word-break:break-all;
  line-height:1.3;
}
/* 占位块与有图卡片的内边距保持一致，避免图/占位切换时卡片高度跳动 */
.pgrid .pcard__media--ph{padding:clamp(10px,1.2vw,16px)}
.pgrid .pcard__media img{
  aspect-ratio:1/1;
  height:100%;
  width:auto;
  max-width:100%;
  padding:0;
  clip-path:inset(1.3%);
}

/* caps（品质能力）4 项 → 2 列，与上下 2 列体系一致 */
.caps__grid{
  grid-template-columns:repeat(2,1fr);
  gap:clamp(20px,2.4vw,32px);
}
@media (max-width:820px){
  .caps__grid{grid-template-columns:1fr}
}

/* 品质页统计条（6 项）→ 3 列 2 行，与全站卡片栅格一致 */
#abStats{grid-template-columns:repeat(3,1fr)}
#abStats .stats__i:nth-child(3n+1){border-left:0;padding-left:0}
@media (max-width:820px){
  #abStats{grid-template-columns:repeat(2,1fr)}
  #abStats .stats__i:nth-child(3n+1){border-left:1px solid rgba(255,255,255,.14);padding-left:clamp(12px,2vw,26px)}
  #abStats .stats__i:nth-child(odd){border-left:0;padding-left:0}
}
@media (max-width:520px){
  #abStats{grid-template-columns:1fr}
  #abStats .stats__i{border-left:0;padding-left:0}
}

/* why 网格：原来是 1px 白缝，现在给每格独立面板感 */
.why{
  gap:clamp(12px,1.5vw,18px);
  background:none;
  border:0;
  border-radius:0;
  overflow:visible;
  /* 3 条 → 一行三列；6 条 → 两行三列，等宽对称 */
  grid-template-columns:repeat(3,1fr);
}
@media (max-width:920px){
  .why{grid-template-columns:repeat(2,1fr)}
}
@media (max-width:620px){
  .why{grid-template-columns:1fr}
}
.why__i{
  background:var(--surface);
  border:1px solid var(--line);
  border-radius:var(--r-md);
  box-shadow:var(--sh-1);
  /* 三列窄卡：编号/标题/描述纵向堆叠，避免标题被 flex 压成竖排 */
  flex-direction:column;
  gap:9px;
  transition:box-shadow .24s var(--ease),transform .24s var(--ease),
             border-color .24s var(--ease);
}
.why__i h3{margin-bottom:0}
.why__i:hover{
  background:var(--surface);
  border-color:var(--brand-3);
  box-shadow:var(--sh-2);
  transform:translateY(-3px);
}
.why__n{
  background:linear-gradient(150deg,var(--brand-2),var(--brand));
  color:#fff;
  box-shadow:0 2px 6px rgba(18,50,79,.22);
  flex:0 0 32px;height:32px;width:32px;
}
.why__note{
  background:var(--brand-soft);
  border:1px solid var(--brand-lt);
  border-left:3px solid var(--brand-2);
  border-radius:var(--r-sm);
  color:var(--ink-2);
}

/* ★ 补齐缺失的 .why__card —— quality.html / oem.html 在用但从未定义 */
.why__card{
  background:var(--surface);
  border:1px solid var(--line);
  border-radius:var(--r-md);
  box-shadow:var(--sh-1);
  padding:clamp(20px,2.4vw,28px);
  height:100%;
  transition:box-shadow .24s var(--ease),transform .24s var(--ease),
             border-color .24s var(--ease);
}
.why__card:hover{
  border-color:var(--brand-3);
  box-shadow:var(--sh-2);
  transform:translateY(-3px);
}
.why__card h3{
  font-size:16px;margin-bottom:8px;letter-spacing:-.01em;
  color:var(--brand);display:flex;align-items:center;gap:9px;
}
.why__card p{font-size:13.5px;color:var(--ink-3);line-height:1.68}
.why__card .why__n{flex:0 0 28px;height:28px;font-size:12px}

/* about 事实卡 */
.about__card{
  background:var(--surface);
  border-color:var(--line);
  border-radius:var(--r-md);
  box-shadow:var(--sh-2);
}
.about__card dl>div{border-bottom-color:var(--line)}

/* apps 卡 —— 车型适配：4 个市场分组 → 固定 2 列 = 2×2 结构 */
.apps{
  grid-template-columns:repeat(2,1fr);
  gap:clamp(16px,2vw,24px);
}
@media (max-width:820px){
  .apps{grid-template-columns:1fr}
}
.apps__i{
  background:var(--surface);
  border-radius:var(--r-md);
  border-color:var(--line);
  transition:box-shadow .24s var(--ease),transform .24s var(--ease),
             border-color .24s var(--ease);
}
.apps__i:hover{
  border-color:var(--brand-3);
  box-shadow:var(--sh-2);
  transform:translateY(-3px);
}
.apps__i h3 b{color:var(--brand-2)}

/* CTA 带：从"浅灰"升级为品牌浅底 + 斜向色块 */
.cta{
  background:linear-gradient(120deg,var(--bg-2) 0%,var(--brand-soft) 55%,var(--bg-2) 100%);
  border-top:1px solid var(--line);
  border-bottom:1px solid var(--line);
  position:relative;overflow:hidden;
}
.cta::after{
  content:"";position:absolute;right:-60px;top:-60px;width:280px;height:280px;
  border-radius:50%;background:radial-gradient(circle,rgba(61,140,191,.16),transparent 68%);
  pointer-events:none;
}
.cta>.wrap{position:relative;z-index:1}

/* 深色带：加一点内部渐变与光晕，不再是一块死蓝 */
.stats,.caps{
  background:
    radial-gradient(900px 340px at 82% 120%,rgba(61,140,191,.34) 0%,transparent 66%),
    linear-gradient(150deg,#0e2a43 0%,#123a5c 100%);
}
.stats{box-shadow:0 10px 30px rgba(18,50,79,.18)}
.caps{box-shadow:0 10px 30px rgba(18,50,79,.18)}
.caps__i h3{color:#cfe6f6}
.caps__i{border-top-color:var(--brand-3)}

/* ============================================================
   6. 表单 / 输入控件
   ============================================================ */
.fld input,.fld textarea,.fld select{
  background:var(--surface);
  border-color:var(--line-2);
  border-radius:var(--r-sm);
  transition:border-color .2s var(--ease),box-shadow .2s var(--ease),
             background .2s var(--ease);
}
.fld input:hover,.fld textarea:hover,.fld select:hover{
  border-color:var(--brand-3);
}
.fld input:focus,.fld textarea:focus,.fld select:focus{
  border-color:var(--brand-2);
  background:#fff;
  box-shadow:0 0 0 4px rgba(30,96,145,.12);
}
.fld>span,.fld label{color:var(--ink-2)}

/* 按钮圆角与阴影统一 */
.btn{border-radius:var(--r-sm)}
.btn--line{
  background:var(--surface);
  border-color:var(--line-2);
  box-shadow:var(--sh-1);
}
.btn--line:hover{
  background:var(--brand);border-color:var(--brand);color:#fff;
  box-shadow:0 4px 12px rgba(18,50,79,.24);
}
.btn--lt{
  background:var(--surface);color:var(--brand);
  box-shadow:var(--sh-1);
}
.btn--lt:hover{background:var(--brand);color:#fff}

/* ============================================================
   7. 分页 / 面包屑 / 更多链接
   ============================================================ */
/* 「查看全部 →」的箭头只有【文案】一个来源，不再用 ::after 追加第二个。
   原因：文案里的 "→" 同时存在于 HTML 静态写死文本和 i18n 词条
   （cat.browseAll / home.viewCat / pd.viewAllCat，中英文都带箭头），
   若这里再 content:"→"，中英切换后都会显示成 "→ →" 双箭头。
   全站 16 处 .more（14 张类目页 + index.html + product.html）文案均自带箭头，
   故 ::after 不再生成字符；hover 的右移动效改挂在 <a> 整体上，视觉等价。*/
.more a{
  display:inline-flex;align-items:center;gap:6px;
  color:var(--brand-2);
  transition:transform .2s var(--ease);
}
.more a:hover{transform:translateX(3px);border-color:transparent;text-decoration:underline}

/* ============================================================
   8. 页脚
   ============================================================ */
.ftr{
  background:
    radial-gradient(760px 300px at 12% 0%,rgba(30,96,145,.34) 0%,transparent 68%),
    linear-gradient(180deg,#0f2233 0%,#0a1826 100%);
}
.ftr__col h4{color:#8fc7e8}
.ftr__col a:hover{color:#8fc7e8}

/* ============================================================
   9. 语言切换器（新增组件）
   ============================================================ */
.langsw{
  display:inline-flex;align-items:center;flex:0 0 auto;
  background:var(--surface);
  border:1px solid var(--line-2);
  border-radius:999px;
  padding:3px;gap:2px;
  box-shadow:var(--sh-1);
}
.langsw__btn{
  appearance:none;border:0;background:none;cursor:pointer;
  font-family:inherit;font-size:12.5px;font-weight:700;letter-spacing:.03em;
  color:var(--ink-3);padding:5px 12px;border-radius:999px;line-height:1.4;
  transition:background .2s var(--ease),color .2s var(--ease);
}
.langsw__btn:hover{color:var(--brand)}
.langsw__btn[aria-pressed="true"]{
  background:linear-gradient(160deg,var(--brand-2),var(--brand));
  color:#fff;
  box-shadow:0 2px 6px rgba(18,50,79,.22);
}
.langsw--dark{
  background:rgba(255,255,255,.10);
  border-color:rgba(255,255,255,.26);
  box-shadow:none;
}
.langsw--dark .langsw__btn{color:rgba(255,255,255,.72)}
.langsw--dark .langsw__btn[aria-pressed="true"]{
  background:#fff;color:var(--brand);
}
.langsw--dark .langsw__btn:hover{color:#fff}

/* 移动端导航面板里的切换器 */
.mnav__panel .langsw{margin-top:20px;width:100%;justify-content:center}
.mnav__panel .langsw__btn{flex:1;text-align:center}

/* ============================================================
   10. 响应式补丁
   ============================================================ */
@media(max-width:1024px){
  .hdr__in{gap:18px}
  .nav{gap:20px}
}
@media(max-width:880px){
  .hdr__in{gap:12px}
  /* 移动端只留语言切换器，不放 CTA */
  .langsw{order:2}
  .burger{order:3;margin-left:auto}
  .nav,.hdr__cta{display:none}
}
@media(max-width:640px){
  .hero{padding-top:34px;padding-bottom:30px}
  .pgrid{grid-template-columns:repeat(auto-fill,minmax(152px,1fr))}
  .why{gap:10px}
}

@media(prefers-reduced-motion:reduce){
  .pcard:hover,.why__i:hover,.why__card:hover,.apps__i:hover{transform:none}
}

/* ============================================================
   10b. 内页组件（覆盖 style-pages.css 的浅色/纯白）
   ============================================================ */

/* --- 页头：从"浅灰条"升级为品牌色渐变带 --- */
.pagehead{
  background:
    radial-gradient(760px 300px at 92% 0%,rgba(61,140,191,.20) 0%,transparent 66%),
    linear-gradient(150deg,var(--brand-soft) 0%,var(--bg-2) 62%,var(--bg-3) 100%);
  border-bottom:1px solid var(--line);
  position:relative;
}
.pagehead::after{
  content:"";position:absolute;left:0;right:0;bottom:-1px;height:3px;
  background:linear-gradient(90deg,var(--brand) 0%,var(--brand-3) 42%,transparent 88%);
}
.pagehead h1{color:var(--brand);letter-spacing:-.03em}
.pagehead p{color:var(--ink-2)}
.pagehead code{
  background:var(--surface);
  border:1px solid var(--line-2);
  color:var(--brand-2);
}
.crumb a{color:var(--ink-3)}
.crumb a:hover{color:var(--brand-2)}
.catstats b{color:var(--brand)}

/* --- 搜索框 / 筛选器 --- */
.searchbig input,
.oesearch__row input{
  background:var(--surface);
  border-color:var(--line-2);
  box-shadow:var(--sh-1);
}
.searchbig input:focus,
.oesearch__row input:focus{
  background:#fff;
  border-color:var(--brand-2);
  box-shadow:0 0 0 4px rgba(30,96,145,.13),var(--sh-1);
}
.searchbig button,
.oesearch__row button{
  background:linear-gradient(160deg,var(--brand-2),var(--brand));
  box-shadow:0 2px 8px rgba(18,50,79,.24);
  border-radius:var(--r-sm);
}
.searchbig button:hover,
.oesearch__row button:hover{
  background:linear-gradient(160deg,#2470a5,#0d2740);
}
.oesearch{
  background:linear-gradient(150deg,var(--brand-soft) 0%,var(--surface) 68%);
  border-color:var(--brand-lt);
  border-radius:var(--r-lg);
  box-shadow:var(--sh-2);
}
.exchip{
  background:var(--surface);
  border-color:var(--line-2);
  box-shadow:var(--sh-1);
}
.exchip:hover{background:var(--brand-soft);border-color:var(--brand-2);color:var(--brand-2)}
.oesearch__ex>span{font-weight:700;color:var(--ink-3)}

/* --- 类目卡 / 产品卡 --- */
.ccard{
  background:var(--surface);
  border-color:var(--line);
  border-radius:var(--r-md);
  box-shadow:var(--sh-1);
}
.ccard:hover{
  border-color:var(--brand-3);
  box-shadow:var(--sh-3);
  transform:translateY(-4px);
}
.ccard__media{
  background:radial-gradient(120% 90% at 50% 0%,#fff 0%,var(--bg-2) 100%);
}
.ccard__cnt b{color:var(--brand-2)}

/* 类目卡 CTA 箭头行为 —— 与 .pcard__link（首页 6 张卡）保持一致。
   问题：.ccard__go 的文案来自 i18n 词条 card.browse = "Browse →"，
   文案本身已带一个「→」；而这里又用 ::after 在 hover 时补了第二个
   " →"，导致 hover 后出现「Browse → →」双箭头，并且卡片整体会位移。
   .pcard__link 用的是 card.viewModels = "View models →"，同样自带箭头，
   但它从未叠加 ::after，所以首页 6 张卡只有 1 个箭头 —— 两套卡片视觉不一致。
   修法：箭头由文案提供，::after 只负责 hover 时的位移动效，
   默认不生成任何额外箭头字符（display:none），hover 才显示，
   且显示的是同一个箭头（用 transform 位移而非再画一个字符）。
   这样 14 张类目卡（products.html）与首页 6 张 .pcard 行为完全一致。 */
.ccard__go{color:var(--brand-2);display:inline-block;transition:transform .2s var(--ease)}
.ccard:hover .ccard__go{color:var(--brand-2)}
.ccard:hover .ccard__go::after{
  content:none;                 /* 不再画第二个箭头 */
}
.ccard:hover .ccard__go{
  transform:translateX(3px);    /* hover 位移，与 .more a 的箭头动效一致 */
}

/* 标签 chip */
.card__tags span{
  background:var(--brand-soft);
  color:var(--brand-2);
  border:1px solid var(--brand-lt);
  border-radius:999px;
  padding:2.5px 9px;
}

/* --- 分页器 --- */
.pager__btn{
  background:var(--surface);
  border-color:var(--line-2);
  border-radius:var(--r-sm);
  box-shadow:var(--sh-1);
}
.pager__btn:hover{
  border-color:var(--brand-2);color:var(--brand-2);
  box-shadow:var(--sh-2);
}
.pager__btn.is-on{
  background:linear-gradient(160deg,var(--brand-2),var(--brand));
  border-color:var(--brand);
  box-shadow:0 3px 10px rgba(18,50,79,.26);
}

/* --- 空状态 --- */
.empty{
  background:var(--surface-2);
  border-color:var(--line-2);
  border-radius:var(--r-md);
}
.empty b{color:var(--brand)}

/* --- 类目切换条 --- */
.catnav{
  background:rgba(238,242,247,.9);
  backdrop-filter:saturate(180%) blur(12px);
  -webkit-backdrop-filter:saturate(180%) blur(12px);
  border-bottom:1px solid var(--line);
  box-shadow:0 2px 10px rgba(18,50,79,.06);
}
.catnav__item{border-radius:var(--r-sm);color:var(--ink-2)}
.catnav__item:hover{background:var(--surface);color:var(--brand);box-shadow:var(--sh-1)}
.catnav__item.on{
  background:linear-gradient(160deg,var(--brand-2),var(--brand));
  box-shadow:0 2px 8px rgba(18,50,79,.24);
}

/* ============================================================
   产品素材图：统一去掉素材自带的黑色画框
   ------------------------------------------------------------
   素材图是「目录卡片」式样：图内自带约 0.65%（920px 图上约 6px）的
   黑色画框，还有一条「DP型号 | DAPU」标题带。
   它和卡片自身的圆角浅色边框叠在一起 → 「双边框」，看着不协调。
   这个画框会在首页 Hero、类目卡、产品卡、详情页都出现，所以统一处理。

   ⚠ 关键：padding 会吃掉 clip-path 的裁切范围。
     <img> 自己带 padding 时，clip-path:inset() 裁的是「含 padding 的
     盒子」边缘，根本裁不到图片本身 —— 标了也白标。
     所以统一把内边距从 <img> 挪到外层容器，再对 <img> 做 clip-path：
     既保住原有留白，又能精确裁掉画框。

   （920px 与 120px 两种素材按比例裁都够用；
     本来没有黑框的图只是被裁掉一圈不可见的白边。）
   ============================================================ */

/* 首页 Hero 大图 */
.hero__fig{padding:clamp(18px,3.4vw,40px) clamp(18px,3.4vw,40px) 0}
.hero__fig img{
  height:auto;              /* 覆盖 HTML 上的 height="920" 属性，让 aspect-ratio 生效 */
  aspect-ratio:1/1;
  padding:0;
  clip-path:inset(1%);
}
.hero__fig figcaption{margin-inline:calc(-1 * clamp(18px,3.4vw,40px))}

/* ---------- 首页产品卡专属微调 ----------
   栅格列数已在 .pgrid 统一设为 3 列，这里只调图片占比与卡片间距。 */

/* 放大图片：容器由 4/3 改为 5/4（更高），内边距收窄让图更大 */
#mainProducts .pcard__media{
  aspect-ratio:5/4;
  padding:clamp(10px,1.2vw,16px);
}
/* 图片本身是缩略图（webp），给足放大空间而不糊 */
#mainProducts .pcard__media img{
  aspect-ratio:1/1;
  height:100%;
  width:auto;
  max-width:100%;
  padding:0;
  clip-path:inset(1.3%);
  transform:scale(1.04);
}
#mainProducts .pcard:hover .pcard__media img{transform:scale(1.1)}

/* 首页 Hero 缩略图 */
.hero__thumbs button{padding:5px}
.hero__thumbs button img{padding:0;clip-path:inset(1.3%)}

/* 把内边距挪到容器上：类目卡 / 产品卡 */
.ccard__media{padding:10px}
.pcard__media{padding:clamp(14px,2vw,22px)}

/* ⚠ 这两个容器是 4/3 矩形，而素材是正方形：
     object-fit:contain 会在图片左右留出「信箱边」，
     此时 clip-path 的横向裁切被信箱边吃掉，根本裁不到图本身
     （纵向能裁到、横向裁不到，结果就是左右两条黑边还在）。
     所以必须先把 <img> 自身变成正方形（高=容器高，宽由 1:1 推出），
     让图片正好铺满元素盒，clip-path 才能两个方向都裁到。
     横向居中由容器的 flex/grid 居中来保证。 */
.ccard__media img,
.pcard__media img{
  aspect-ratio:1/1;
  height:100%;
  width:auto;
  max-width:100%;
  padding:0;
  clip-path:inset(1.3%);
}

/* --- 产品详情 --- */
.pdfig{
  background:var(--surface);
  border-color:var(--line);
  border-radius:var(--r-md);
  box-shadow:var(--sh-2);
  display:grid;
  grid-template-rows:minmax(0,1fr) auto;
  min-height:340px;
}
/* 产品主图：按原图像素显示（小图不放大、大图缩到容器宽）
   ⚠ HTML 上的 height 属性以「最低优先级 CSS」参与层叠，
     必须写 height:auto，否则图框高度会按属性值计算，造成拉伸或大留白。 */
.pdfig img{
  display:block;
  width:auto;
  height:auto;
  max-width:100%;
  align-self:center;
  justify-self:center;
  margin:0;
  object-fit:contain;
  background:#fff;
  border-radius:6px;
}
.pdfig figcaption{background:var(--surface-2);text-transform:none;letter-spacing:.02em}
.pdpoints li::before{background:linear-gradient(150deg,var(--brand-2),var(--brand))}

.pdkey{
  border-color:var(--line);
  border-radius:var(--r-md);
  box-shadow:var(--sh-1);
  overflow:hidden;
}
.pdkey dt{background:var(--surface-2);color:var(--ink-3)}
.pdkey dd{background:var(--surface)}

.pdblock h3{
  color:var(--brand);
  text-transform:none;
  letter-spacing:.02em;
  font-size:13.5px;
  padding-bottom:7px;
  border-bottom:2px solid var(--brand-lt);
}
.pdblock__n{color:var(--ink-4)}

.chips li{
  background:var(--surface);
  border-color:var(--line-2);
  border-radius:var(--r-sm);
  box-shadow:var(--sh-1);
}
.chips li:hover{background:var(--brand-soft);border-color:var(--brand-2)}
.chipbrand{color:var(--brand-2)}

.spectbl{
  border-color:var(--line);
  border-radius:var(--r-md);
  box-shadow:var(--sh-1);
  background:var(--surface);
}
.spectbl th{background:var(--surface-2)}
.spectbl tbody tr:nth-child(even) td{background:var(--surface-hi)}

/* --- 适配车型卡 --- */
.vcard{
  background:var(--surface);
  border-color:var(--line);
  border-radius:var(--r-md);
  box-shadow:var(--sh-1);
  transition:box-shadow .2s var(--ease),border-color .2s var(--ease);
}
.vcard:hover{border-color:var(--brand-3);box-shadow:var(--sh-2)}
.vcard__head:hover{background:var(--surface-2)}
.vcard__n{
  background:var(--brand-soft);color:var(--brand-2);
  border:1px solid var(--brand-lt);
}
.vcard__list{background:var(--surface-2)}

/* --- 步骤卡 --- */
.step{
  background:var(--surface);
  border-color:var(--line);
  border-radius:var(--r-md);
  box-shadow:var(--sh-1);
  transition:box-shadow .24s var(--ease),transform .24s var(--ease),
             border-color .24s var(--ease);
}
.step:hover{
  border-color:var(--brand-3);
  box-shadow:var(--sh-2);
  transform:translateY(-3px);
}
.step__n{
  display:inline-block;
  background:linear-gradient(150deg,var(--brand-2),var(--brand));
  color:#fff;
  padding:3px 9px;border-radius:999px;
  letter-spacing:.08em;
  margin-bottom:13px;
}

/* --- 两栏对比卡 --- */
.twocard{
  background:var(--surface);
  border-color:var(--line);
  border-radius:var(--r-md);
  box-shadow:var(--sh-2);
  position:relative;overflow:hidden;
}
.twocard::before{
  content:"";position:absolute;left:0;top:0;bottom:0;width:4px;
  background:linear-gradient(180deg,var(--brand-2),var(--brand));
}
.twocard__tag{
  border-radius:999px;
  background:linear-gradient(150deg,var(--brand-2),var(--brand));
}
.twocard__tag--alt{background:linear-gradient(150deg,#e0344f,var(--accent))}
.tick li::before{
  border-left-color:var(--brand-2);border-bottom-color:var(--brand-2);
}

/* --- 询盘 --- */
.rfq__form{
  background:var(--surface);
  border-color:var(--line);
  border-radius:var(--r-md);
  box-shadow:var(--sh-2);
}
.rfq__notes li::before{
  border-left-color:var(--brand-2);border-bottom-color:var(--brand-2);
}
.form__msg.ok{color:#127a45}

/* --- 联系页 --- */
.clist__k{color:var(--ink-3);text-transform:none;letter-spacing:.02em;font-size:12.5px}
.clist__v a{color:var(--brand-2)}
.cnblock{
  background:var(--brand-soft);
  border-color:var(--brand-lt);
  border-left:3px solid var(--brand-2);
  border-radius:var(--r-md);
}
.cnblock h3{color:var(--brand);text-transform:none;letter-spacing:.02em;font-size:13px}

.ctab{
  border-color:var(--line);
  border-radius:var(--r-md);
  background:var(--surface);
  box-shadow:var(--sh-1);
  overflow:hidden;
}
.ctab__row{border-bottom-color:var(--line)}
.ctab__row:nth-child(even){background:var(--surface-2)}
.ctab__row span{color:var(--ink-3)}

.mapbox{
  border-color:var(--line);
  border-radius:var(--r-md);
  background:var(--surface);
  box-shadow:var(--sh-1);
}
.mapbox__ph{
  background:
    linear-gradient(rgba(61,140,191,.10),rgba(61,140,191,.10)),
    repeating-linear-gradient(45deg,var(--bg-2) 0 10px,var(--bg-3) 10px 20px);
}
.mapbox__ph b{color:var(--brand)}
.mapbox__ph a{color:var(--brand-2)}

/* --- about 页信息行 --- */
.coinfo__row dt{text-transform:none;letter-spacing:.02em;color:var(--ink-3);font-size:12.5px}
.coinfo__row dd a{color:var(--brand-2)}

/* ============================================================
   11. 中文字体与排版微调（中文模式下生效）
   ------------------------------------------------------------
   Open Sans 不含中文字形，中文会回落到系统字体。
   显式指定黑体系列，并略收紧行高、放开字距，
   让中文段落更紧凑易读。
   ============================================================ */
html[lang="zh-CN"]{
  --ff-cn:"PingFang SC","Hiragino Sans GB","Microsoft YaHei",
          "Source Han Sans SC","Noto Sans CJK SC",sans-serif;
}
html[lang="zh-CN"] body{
  font-family:var(--ff-cn);
  font-size:15px;
  line-height:1.78;
}
html[lang="zh-CN"] h1,
html[lang="zh-CN"] h2,
html[lang="zh-CN"] h3,
html[lang="zh-CN"] h4{
  letter-spacing:0;
  font-weight:700;
}
html[lang="zh-CN"] .hero h1{letter-spacing:0;line-height:1.28}
html[lang="zh-CN"] .sec__h2{letter-spacing:0}
/* 中文下不需要大写变形 */
html[lang="zh-CN"] .eyebrow,
html[lang="zh-CN"] .fld>span,
html[lang="zh-CN"] .about__card dt,
html[lang="zh-CN"] .ftr__col h4,
html[lang="zh-CN"] .hero__facts div dt,
html[lang="zh-CN"] .hero__fig figcaption span{
  text-transform:none;
  letter-spacing:.04em;
  font-size:12px;
}
html[lang="zh-CN"] .nav a{font-weight:600}
html[lang="zh-CN"] .btn{letter-spacing:.02em}

/* ============================================================
   12. 列表型页面统一组件（类目页 / 产品列表 / OE 搜索）
   ------------------------------------------------------------
   【背景：一次真实破损的复盘】
   prerender_categories.py 把 4 个 .stats__i 直接挂在 .stats 下，
   中间少了 .stats__in（style.css:210 才是 4 列栅格），
   于是 4 项竖排堆叠、每项又带 clamp(22px,3vw,34px) 内边距，
   撑成 563px 高的深蓝巨块 —— 14 个类目页全中。
   同一段代码还有两处连带问题：
     · 把 .catnav（position:sticky 的吸顶类目切换条）当成标签容器
     · .chips 里直接输出 <li>，没有 <ul> 父元素（非法 HTML）

   【本节职责】
     1. 定义 .stats--mini：列表页专用的「浅色卡片式」统计条
     2. 定义 .topapps：  列表页专用的「主要适配车型」标签云容器
        （不再复用 .catnav，.catnav 保持只做吸顶类目切换）
     3. 补齐 .toolbar__n / .toolbar__r 与状态类，并给全站一致的断点

   【断点约定】沿用 theme.css 既有的两档栅格断点，不另立标准：
     900px → 4 列降 2 列 ； 560px → 降 1 列
   （style.css 的 880px / 640px 与 style-pages.css 的 860px / 600px
     是更早的遗留档位，本节不改动它们，只保证本组件内部自洽。）

   【回滚】删除本节即可，其余文件零改动。
   ============================================================ */

/* ------------------------------------------------------------
   12.1  .stats--mini —— 列表页浅色卡片式统计条
   ------------------------------------------------------------
   与首页 / about 的深蓝通栏 .stats 刻意区分：
     · 首页 .stats 是「通栏深色带」，用于首页数据展示
     · 类目页统计条嵌在正文流里，若沿用深蓝通栏会与产品网格抢视觉
   所以这里做成 4 张白卡 + 品牌色数字 + 细分隔线的浅色形态，
   既统一了视觉语言（同一套面板语言），又保持层级区分。
   ------------------------------------------------------------ */

/* 外层：去掉深蓝底与阴影，改为透明容器 */
.stats--mini{
  background:none;
  box-shadow:none;
  color:var(--ink);
}

/* 栅格容器：与首页 .stats__in 同名同结构，保证 4 列同行 */
.stats--mini .stats__in{
  display:grid;
  grid-template-columns:repeat(4,1fr);
  gap:clamp(10px,1.1vw,14px);
}

/* 单项：白卡。与深蓝版靠「底色 + 圆角 + 阴影」区分，
   并显式重置深蓝版的 border-left / padding，
   否则会继承 rgba(255,255,255,.14) 的白色左边框（浅底上几乎不可见，
   视觉上就像「卡片没有边框」）。 */
.stats--mini .stats__i{
  background:var(--surface);
  border:1px solid var(--line);
  border-left:1px solid var(--line);
  border-radius:var(--r-md);
  box-shadow:var(--sh-1);
  padding:clamp(14px,1.5vw,18px) clamp(14px,1.7vw,20px);
  transition:box-shadow .24s var(--ease),transform .24s var(--ease),
             border-color .24s var(--ease);
}
.stats--mini .stats__i:hover{
  border-color:var(--brand-3);
  box-shadow:var(--sh-2);
  transform:translateY(-2px);
}
/* 深蓝版用 :first-child 去掉左边框并让内边距归零，
   浅色卡每张都有独立边框，必须全部还原 */
.stats--mini .stats__i:first-child{
  border-left:1px solid var(--line);
  padding-left:clamp(14px,1.7vw,20px);
}

/* 数字：品牌深蓝，浅底上对比度足够；沿用等宽数字防跳动 */
.stats--mini .stats__i b{
  color:var(--brand);
  font-size:clamp(21px,2.1vw,27px);
  font-weight:800;
  letter-spacing:-.025em;
  line-height:1.05;
  margin-bottom:6px;
  font-variant-numeric:tabular-nums;
}
/* 标签：深蓝版的 rgba(255,255,255,.66) 在白底上不可读，改为墨色 */
.stats--mini .stats__i span{
  display:block;
  color:var(--ink-3);
  font-size:12px;
  line-height:1.4;
  letter-spacing:.01em;
}

/* ------------------------------------------------------------
   12.2  .topapps —— 列表页「主要适配车型」标签云
   ------------------------------------------------------------
   为什么不复用 .catnav：
     .catnav 是 position:sticky;top:65px 的吸顶类目切换条
     （含 .catnav__in / .catnav__item），语义与交互完全不同；
     而且它需要一整套 JS 维护选中态。塞进标签云会让整条吸顶，
     在类目页里表现为「一进页面就被吸在头部下面」，非常突兀。
   这里新建 .topapps，语义收敛为「一组标签云」。
   ------------------------------------------------------------ */
.topapps{
  display:flex;
  align-items:baseline;
  gap:12px 18px;
  flex-wrap:wrap;
  margin:20px 0 0;
  padding:14px 18px;
  background:var(--surface);
  border:1px solid var(--line);
  border-left:3px solid var(--brand-lt);
  border-radius:var(--r-md);
  box-shadow:var(--sh-1);
}

/* 标签云标题：单行不折，与标签行基线对齐 */
.topapps__lb{
  flex:0 0 auto;
  margin:0;
  font-family:inherit;
  font-size:12px;
  font-weight:700;
  letter-spacing:.14em;
  text-transform:uppercase;
  color:var(--brand-2);
  line-height:1.7;
  white-space:nowrap;
}

/* 标签列表：语义容器为 <ul class="chips">，
   .chips 本身已是 flex+wrap，这里只补自适应占位与重置 */
.topapps .chips{
  flex:1 1 320px;
  min-width:0;
  margin:0;
  padding:0;
}

/* 中文下标题不需要字距和全大写变形 */
html[lang="zh-CN"] .topapps__lb{
  text-transform:none;
  letter-spacing:.04em;
  font-size:12px;
}

/* ------------------------------------------------------------
   12.3  列表页筛选工具条
   ------------------------------------------------------------
   prerender 类目页用的是 .toolbar__n / .toolbar__r，
   而 style-pages.css 里这两个类从未被定义过 —— 原先完全裸奔。
   这里补齐，并让「计数在左、输入框在右」的布局在窄屏自然换行。
   ------------------------------------------------------------ */
.toolbar__n{
  margin:0;
  font-size:13.5px;
  color:var(--ink-2);
}
.toolbar__n b{
  color:var(--brand);
  font-weight:700;
  font-variant-numeric:tabular-nums;
}
.toolbar__r{
  flex:1 1 260px;
  min-width:0;
  display:flex;
}
.toolbar__r input{
  flex:1;
  min-width:0;
  width:100%;
  padding:11px 14px;
  font-size:14.5px;
  font-family:inherit;
  color:var(--ink);
  background:var(--surface);
  border:1px solid var(--line-2);
  border-radius:var(--r-sm);
  box-shadow:var(--sh-1);
  transition:border-color .2s var(--ease),box-shadow .2s var(--ease);
}
.toolbar__r input::placeholder{color:var(--ink-4)}
.toolbar__r input:hover{border-color:var(--brand-3)}
.toolbar__r input:focus{
  outline:none;
  border-color:var(--brand-2);
  background:#fff;
  box-shadow:0 0 0 4px rgba(30,96,145,.12),var(--sh-1);
}

/* 类目页的 .toolbar 只有 __n / __r 两个直接子元素，
   由 HTML 侧的 .toolbar--bar 修饰类开启横向布局；
   其他列表页用 .toolbar__in，不受此规则影响 */
.toolbar--bar{
  display:flex;
  flex-wrap:wrap;
  align-items:center;
  justify-content:space-between;
  gap:12px 20px;
  padding:13px 16px;
  background:var(--surface);
  border:1px solid var(--line);
  border-radius:var(--r-md);
  box-shadow:var(--sh-1);
}

/* ------------------------------------------------------------
   12.4  状态规范：加载 / 空数据 / 错误
   ------------------------------------------------------------
   列表页三态统一为同一种「虚线浅底提示面板」：
     · .state--loading  数据加载中（实线浅底，最轻）
     · .state--empty    查询无结果（虚线浅底）
     · .state--error    加载失败（实线 + 品牌红左描边）
   三个都是修饰类，不改变原元素语义。
   .empty（既有类）与 .state 共用同一套外观，
   这样 history 页、products.html、oe-search.html 里已有的
   .empty 面板无需改动 HTML 即自动统一。
   ------------------------------------------------------------ */
.state,
.empty{
  border:1px dashed var(--line-2);
  border-radius:var(--r-md);
  background:var(--surface-2);
  color:var(--ink-2);
  text-align:center;
  padding:clamp(26px,4.4vw,44px) clamp(18px,3.4vw,34px);
  font-size:14px;
  line-height:1.7;
}
.state a,
.empty a{color:var(--brand-2);text-decoration:underline}
.state a:hover,
.empty a:hover{color:var(--brand)}

/* 错误态：换用品牌红左描边，一眼区别于「无结果」 */
.state--error{
  border-style:solid;
  border-color:var(--line);
  border-left:3px solid var(--accent);
  background:var(--surface);
  text-align:left;
}
/* 加载态：柔和浅底，不抢注意力 */
.state--loading{
  border-style:solid;
  border-color:var(--line);
  background:var(--surface);
  color:var(--ink-3);
}

/* 面板内的强调数字沿用品牌色 */
.state b,
.empty b{color:var(--brand)}

/* 预渲染类目页的空状态是 <p class="empty">，
   内层直接放 span + a，没有 .empty b / .empty p，需要补内边距与行高 */
p.empty{
  margin-top:18px;
  line-height:1.9;
}
p.empty a{
  font-weight:600;
}

/* 加载失败面板：换用品牌红左描边，与「无结果」一眼区分 */
.state--error{
  border-style:solid;
  border-color:var(--line);
  border-left:3px solid var(--accent);
  background:var(--surface);
  text-align:left;
}
/* JS 注入的失败面板是 <p class="empty">，同样给红左描边 */
p.empty.is-error{
  border-style:solid;
  border-color:var(--line);
  border-left:3px solid var(--accent);
  background:var(--surface);
  text-align:left;
  line-height:1.7;
  margin-top:0;
}

/* ------------------------------------------------------------
   12.5  提示面板在栅格内必须横跨整行
   ------------------------------------------------------------
   products.js / oe-search.js / category.js 加载失败时执行
   grid.innerHTML = '<p class="empty">…</p>'，
   而 #grid / #oeGrid / #catGrid 都是 .pgrid（3 列栅格）。
   不处理的话，这块提示面板只占 1/3 列宽，被硬挤在左侧一格里，
   长文案会折成好几行 —— 与页面下方的空状态面板完全不一致。
   ------------------------------------------------------------ */
.pgrid > .empty,
.pgrid > .state{
  grid-column:1/-1;
}

/* ------------------------------------------------------------
   12.6  响应式断点（本组件专用）
   ------------------------------------------------------------
   900px → 4 列降 2 列（与 .pgrid 同档，栅格语言一致）
   560px → 降 1 列（与 .pgrid 同档）
   640px → 标签云标题独占一行，标签从第二行开始排
   ------------------------------------------------------------ */
@media (max-width:900px){
  /* 2 列：2×2 方阵，比 auto-fill 更整齐 */
  .stats--mini .stats__in{
    grid-template-columns:repeat(2,1fr);
  }
}
@media (max-width:640px){
  /* 标签云改为上下两段：标题一行，标签一行 */
  .topapps{
    align-items:flex-start;
    gap:9px;
    padding:13px 15px;
  }
  .topapps .chips{flex:1 1 100%}
}
@media (max-width:560px){
  /* 1 列：4 张卡竖排 */
  .stats--mini .stats__in{
    grid-template-columns:1fr;
    gap:10px;
  }
  /* 统计条内部间距在窄屏略收，避免卡片贴边 */
  .stats--mini .stats__i{
    padding:13px 15px;
  }
  .stats--mini .stats__i b{
    font-size:22px;
  }
  /* 工具条改为上下排列，输入框占满整行 */
  .toolbar--bar{
    padding:12px 14px;
  }
  .toolbar__r{flex:1 1 100%}
}

/* ============================================================
   13. LOGO 修复（2026-10-07）
   ------------------------------------------------------------
   实测问题（Edge 无头，1440 / 390 两档）：
     页头 logo.png      渲染 105× 38，原始 602×217→ 比例正常但尺寸过小
     页脚 logo-white.png 渲染 315× 34，原始 602×217 → 变形 234%（手机 275%）

   两个根因：
   1. 变形：`.brand` 是 display:flex;flex-direction:column（style.css:98），
      但 `.brand--ftr`（style.css:400）只给了 margin-bottom，没有任何
      <img> 宽度约束。列布局里的 img 被拉满容器宽度，height="40" 属性
      又把高度锁死 �� 宽高比被强行拉开。
   2. 太小：logo.png 实际 602×217，只写 height="40" 没有 width，
      浏览器按原始比例缩到 105×38 宽 —— 相当于用 602px 的源图渲染 105px，
      像素浪费 32.6 倍（92.7 KB 传了只显示 105px 宽）。
      同时缺 width 属性 → 布局未预留宽度 → CLS。

   修法：
   - 比例交给 CSS 管（height + width:auto），HTML 里的 height="40" 属性
     优先级最低，会被 CSS 覆盖，两者一致所以不冲突。
   - 尺寸放大到桌面 46px / 移动 38px，符合可读性要求。
   - 补 width/height 属性（按新尺寸的 2:1.5 比例）消除 CLS。
   ============================================================ */

/* 复位：任何 .brand 内的图片都不参与 flex 拉伸 */
.brand img,
.brand__logo{
  display:block;
  width:auto;      /* 关键：不被 flex 拉满容器宽度 */
  max-width:100%;
  height:auto;     /* 关键：解除 height="40" 属性的锁定，交给 CSS 控比例 */
  object-fit:contain;
  border:0;
}
.brand__logo{
  height:74px;     /* 贴满桌面导航栏 74px */
  width:auto;
}
.brand--ftr .brand__logo,
.ftr .brand__logo{
  height:48px;     /* 页脚同步放大 */
  width:auto;
}

/* 页头 logo 是链接，给一点 hover 反馈但不做位移，避免抖动 */
a.brand__logo,
.brand > a.brand__logo{
  display:block;
  flex:0 0 auto;
}

/* 移动端：整体收窄，logo 与导航争抢横向空间 */
@media(max-width:640px){
  .brand__logo{height:34px}
  .brand--ftr .brand__logo,
  .ftr .brand__logo{height:40px}
}

/* 中文态：logo 是图形，不受语言影响，无需处理 */

/* --- 13 补充：flex 拉伸的根治 --- */
.brand{
  align-items:flex-start;   /* 覆盖 style.css:98 的 align-items:stretch */
}
.brand img,
.brand .brand__logo,
.brand > a.brand__logo img{
  flex:0 0 auto;            /* 不参与 flex 伸缩 */
  align-self:flex-start;
  width:auto;
  height:74px;
  min-width:0;
  max-width:none;
}
.brand--ftr img,
.ftr .brand__logo{
  height:48px !important;
  width:auto !important;
  max-width:none !important;
}
@media(max-width:640px){
  .brand img,.brand .brand__logo{height:34px;max-width:100%}
  .brand--ftr img,.ftr .brand__logo{height:40px !important}
}


/* ===== 14. NEWS MODULE (并入自 _news_pilot/theme-news.css) ===== */

/* ---------- 14.1 语言切换器（跨 URL，不是 i18n 的 .langsw__btn） ----------
   为什么不用 .langsw：i18n.js 对 .langsw__btn 做了 document 级
   click 委托，点它会在当前页内换文案。news 是双静态页体系，
   换语言必须换 URL，所以另起 .langdup，用 <a> 实现。
   视觉上与 .langsw 对齐，用户看不出差别。 */
.langdup{
  display:flex;
  align-items:center;
  gap:2px;
  border:1px solid rgba(16,42,82,.16);
  border-radius:999px;
  padding:2px;
  background:rgba(255,255,255,.7);
}
.langdup__btn{
  display:inline-flex;
  align-items:center;
  justify-content:center;
  min-width:44px;             /* 触控目标 ≥44px（style-pages 的可点区规范） */
  height:32px;
  padding:0 10px;
  border-radius:999px;
  font:600 13px/1 var(--font,inherit);
  color:#0f2a52;
  text-decoration:none;
  white-space:nowrap;
}
.langdup__btn:hover{background:rgba(16,42,82,.07)}
.langdup__btn.is-on,
.langdup__btn[aria-current]{
  background:#0f2a52;
  color:#fff;
}
/* 中文态：中文标签不需要字距 */
:root:lang(zh) .langdup__btn{letter-spacing:0}

/* ---------- 14.2 页头条目 ---------- */
.newskicker{
  margin:0 0 6px;
  font:600 13px/1.5 inherit;
  letter-spacing:.04em;
  text-transform:uppercase;
  color:var(--brand, #0f2a52);
}
:root:lang(zh) .newskicker{text-transform:none;letter-spacing:0}

.newsdateline{
  margin:0;
  display:flex;
  align-items:center;
  gap:8px;
  flex-wrap:wrap;
  font:500 13px/1.5 inherit;
  color:#5a6b85;
}
.newsdot{opacity:.5}

/* ---------- 14.3 正文 + 侧栏两栏 ----------
   桌面 2 栏（正文 1fr / 侧栏 320px），≤960px 折为单栏。
   侧栏 sticky 让「型号 / 类目 / OE 数」在长文里始终可见。 */
.newswrap{
  display:grid;
  grid-template-columns:minmax(0,1fr) 320px;
  gap:34px;
  align-items:start;
}
@media(max-width:960px){
  .newswrap{grid-template-columns:minmax(0,1fr);gap:26px}
}

.newside{
  position:sticky;
  top:96px;               /* 让开吸顶头部 */
  display:flex;
  flex-direction:column;
  gap:16px;
  padding:18px;
  border:1px solid rgba(16,42,82,.10);
  border-radius:14px;
  background:#fff;
}
@media(max-width:960px){
  .newside{position:static}
}
.newside .pdfig{margin:0}
.newside .pdact{flex-direction:column}
.newside .pdact .btn{width:100%;justify-content:center}

/* 侧栏底部的「另一语言」链接 */
.newslangpair{
  margin:0;
  padding-top:12px;
  border-top:1px solid rgba(16,42,82,.10);
  font:600 13px/1.5 inherit;
}
.newslangpair a{color:var(--brand,#0f2a52)}

/* ---------- 14.4 正文排版 ----------
   .newsart 内部只用语义标签 + 既有的 h2 观感，
   不复用 .about__txt（那是公司简介的窄栏排版，宽度基准不同）。 */
.newsart{
  max-width:74ch;         /* 正文最佳阅读宽度：中文 ~35 字/行 */
  min-width:0;
}
.newsart h2{
  margin:30px 0 10px;
  font:700 clamp(17px,1.4vw,20px)/1.35 inherit;
  color:var(--ink,#12233f);
  scroll-margin-top:96px; /* 锚点跳转不被吸顶头部遮住 */
}
.newsart h2:first-of-type{margin-top:22px}
.newsart p{
  margin:0 0 14px;
  font-size:16px;
  line-height:1.75;
  color:#2c3a52;
}
:root:lang(zh) .newsart p{line-height:1.85}   /* 中文需要更松的行距 */

/* 导语：字号略大 + 左侧品牌色竖线，与正文拉开层级 */
.newslede{
  margin:0 0 22px;
  padding:0 0 0 16px;
  border-left:3px solid var(--brand,#0f2a52);
  font-size:17px !important;
  line-height:1.7 !important;
  color:#1d2c46 !important;
}
:root:lang(zh) .newslede{line-height:1.8 !important}

/* 正文里的 chips 留出上下呼吸 */
.newsart .chips{margin:0 0 16px}
.newsart .vgrid{margin:0 0 16px}

/* ---------- 14.5 列表页 ---------- */
.newslist{
  display:grid;
  gap:18px;
  grid-template-columns:repeat(auto-fill,minmax(260px,1fr));
}
/* 筛选条：与 products.html 的 .toolbar 同名同语义，直接复用既有样式，
   这里只补新闻专属的分组标签 */
.newsfilter{
  display:flex;
  flex-wrap:wrap;
  align-items:center;
  gap:10px;
  margin:0 0 20px;
  padding:14px 16px;
  border:1px solid rgba(16,42,82,.10);
  border-radius:12px;
  background:#fff;
}
.newsfilter__lb{
  margin:0;
  font:600 13px/1.5 inherit;
  color:#5a6b85;
}
.newsfilter select,
.newsfilter input{
  min-height:40px;
  padding:0 10px;
  border:1px solid rgba(16,42,82,.18);
  border-radius:8px;
  font:inherit;
  font-size:14px;
  background:#fff;
  color:inherit;
}
.newsfilter select{min-width:180px}
.newsfilter input{min-width:220px;flex:1 1 220px}

/* 分类标签（.chips 复用；这里只做可点击态的视觉强化） */
.newstags{
  margin:0 0 22px;
  padding:0;
  list-style:none;
  display:flex;
  flex-wrap:wrap;
  gap:8px;
}
.newstags a{
  display:inline-flex;
  align-items:center;
  min-height:32px;
  padding:0 12px;
  border:1px solid rgba(16,42,82,.14);
  border-radius:999px;
  font:600 13px/1 inherit;
  color:#0f2a52;
  text-decoration:none;
  background:#fff;
}
.newstags a:hover{border-color:#0f2a52}
.newstags a.is-on{background:#0f2a52;color:#fff;border-color:#0f2a52}

/* 列表卡：复用 .pcard 结构，这里只调标题行数（列表更紧凑） */
.pcard .pcard__desc{
  display:-webkit-box;
  -webkit-line-clamp:3;
  -webkit-box-orient:vertical;
  overflow:hidden;
}
.newslist .pcard__cn{
  font-weight:600;
  color:var(--brand,#0f2a52);
}

/* ---------- 14.6 响应式 ---------- */
@media(max-width:640px){
  /* 语言切换器在窄屏会挤占头部：允许换行但不隐藏 */
  .langdup__btn{min-width:40px;height:30px;padding:0 8px;font-size:12px}
  .newsart h2{margin:24px 0 8px}
  .newsart p{font-size:15.5px;margin-bottom:12px}
  .newside{padding:14px}
}

/* ------------------------------------------------------------
   15. 产品中心类目速览（#catGrid）：无图 · 一排 5 个 · 双语类型名
   ------------------------------------------------------------
   背景：类目卡原本是「缩略图 + 名称 + 数量 + 详情链接」的大卡，
   类目数量变化时最后一行容易掉队，左右不对称；
   而且首屏要拉 14 张缩略图才出内容。
   现在改为紧凑类型卡：只呈现类型名（英文主 + 中文副）与型号数，
   不输出任何图片。10 项 ÷ 5 列 = 正好两排。
   用 flex 而非 grid：剩余项自动居中，数量变化时也不会出现
   「最后一行剩两张、靠左悬挂」的不对称。
   ------------------------------------------------------------ */
#catGrid{
  display:flex;
  flex-wrap:wrap;
  justify-content:center;
  gap:12px;
}
/* 5 列：4 道 12px 间隙 = 48px */
#catGrid .ccard{
  flex:0 0 calc((100% - 48px) / 5);
  min-width:0;
  min-height:112px;
  display:flex;
  flex-direction:column;
  align-items:center;
  justify-content:center;
  text-align:center;
  gap:3px;
  padding:16px 10px;
  border:1px solid var(--line);
  border-radius:10px;
  background:var(--surface);
  text-decoration:none;
}
#catGrid .ccard:hover{transform:translateY(-3px)}
#catGrid .ccard__en{
  font-size:13px;
  font-weight:700;
  line-height:1.25;
  letter-spacing:-.02em;
  color:var(--ink);
  word-break:break-word;
}
#catGrid .ccard__cn{font-size:12px;line-height:1.3;color:var(--ink-3)}
#catGrid .ccard__cnt{
  margin-top:5px;
  padding-top:6px;
  border-top:1px solid var(--line);
  font-size:12px;
  line-height:1.35;
  color:var(--ink-4);
}
/* 加载失败 / 空状态面板横跨整行 */
#catGrid > .empty,
#catGrid > .state{flex:1 1 100%}

@media (max-width:1100px){
  /* 仍是 5 列，只收紧字号与内边距，保证 2 排 × 5 不变形 */
  #catGrid{gap:10px}
  #catGrid .ccard{flex-basis:calc((100% - 40px) / 5);padding:14px 8px}
  #catGrid .ccard__en{font-size:12.5px}
}
@media (max-width:860px){
  /* 10 项 ÷ 2 列 = 5 排，依旧对称 */
  #catGrid .ccard{flex-basis:calc((100% - 12px) / 2);padding:16px 10px}
  #catGrid .ccard__en{font-size:13px}
}

/* ==============================================================
   首页类目文字导航（2026-10-19）
   首页不再直出产品卡（封面图 / DP 型号 / 数量），改为纯文字类目入口，
   具体型号统一走「产品中心 -> 主动搜索后显示」通道。
   ============================================================== */
.catlinks{
  display:flex;flex-wrap:wrap;gap:10px;align-items:stretch;
}
.catlinks .catlink{
  flex:1 1 calc((100% - 40px) / 5);
  min-width:0;
  display:flex;flex-direction:column;justify-content:center;gap:3px;
  padding:14px 14px;
  background:var(--surface);
  border:1px solid var(--line-2);
  border-radius:var(--r-sm);
  box-shadow:var(--sh-1);
  text-decoration:none;
  transition:border-color .16s var(--ease),background .16s var(--ease),
             transform .16s var(--ease),box-shadow .16s var(--ease);
}
.catlinks .catlink:hover{
  border-color:var(--brand-2);
  background:var(--brand-soft);
  transform:translateY(-1px);
  box-shadow:var(--sh-2);
}
.catlink__en{
  font-size:13px;font-weight:700;line-height:1.28;letter-spacing:-.015em;
  color:var(--ink);
}
.catlink__cn{
  font-size:12px;line-height:1.3;color:var(--ink-3);
}
@media (max-width:1100px){
  .catlinks .catlink{flex-basis:calc((100% - 30px) / 4)}
}
@media (max-width:760px){
  .catlinks{gap:8px}
  .catlinks .catlink{flex-basis:calc((100% - 16px) / 2);padding:12px 12px}
  .catlink__en{font-size:12.5px}
}

/* ==============================================================
   类目页「型号索引」（2026-10-19）
   纯文字 DP 号链接，替代已被撤掉的产品卡，恢复指向产品页的静态内链。
   无图 / 无价 / 无规格 —— 只为可检索性与导航，不给数据爬取增值。
   ============================================================== */
.idxsec{padding-top:clamp(34px,4.6vw,58px)}
.idx{
  list-style:none;margin:16px 0 0;padding:0;
  columns:6;column-gap:22px;
}
.idx li{margin:0 0 7px;break-inside:avoid;-webkit-column-break-inside:avoid}
.idx a{
  display:inline-block;
  font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;
  font-size:13px;line-height:1.5;color:var(--ink-2);
  text-decoration:none;border-bottom:1px solid transparent;
  transition:color .14s var(--ease),border-color .14s var(--ease);
}
.idx a:hover{color:var(--brand-2);border-bottom-color:var(--brand-2)}
@media (max-width:1180px){ .idx{columns:5} }
@media (max-width:980px){ .idx{columns:4} }
@media (max-width:760px){ .idx{columns:3;column-gap:16px} .idx a{font-size:12.5px} }
@media (max-width:480px){ .idx{columns:2} }

/* 产品卡图片放大（2026-10-19）
   素材是 1:1，而 .pcard__media 原本是 4:3：object-fit:contain 会在左右各留 12.5%
   的信箱边，图片实际只占卡片宽度的 75%。容器改正方形后图片宽度 = 卡片宽度，
   视觉放大约 33%；容器内边距再收窄，让图更满。 */
.pcard__media{aspect-ratio:1/1}
.pgrid .pcard__media{padding:clamp(6px,.8vw,10px)}

/* OE chips: plain-text labels keep the original look and click feedback */
.chips li .chipoe{display:block;cursor:pointer}
.chips li:hover .chipoe{color:var(--brand-2)}
