/* ==========================================================
   陕西正捷时空信息科技有限公司 · 官网共用样式
   配色依据《正捷视觉方向色卡》
   商务蓝 × 天空蓝 × 浅青点缀 × 深海蓝
   原则：克制、留白、细线、轻卡片
   ========================================================== */

:root {
  /* ---- 品牌色（色卡 CORE PALETTE）---- */
  --brand: #245F8E;          /* 商务蓝 · 品牌主色 */
  --brand-dark: #1B4A70;
  --sky: #99D2FB;            /* 天空蓝 · 高亮 */
  --sky-deep: #5FAEE0;
  --mint: #C2F2E4;           /* 浅青 · 清洁/智能 */
  --mint-deep: #2E9279;
  --ink: #163B5C;            /* 深海蓝 · 标题 */
  --ink-700: #3C5E78;        /* 正文深蓝 */
  --ink-500: #71899B;        /* 说明文字 */
  --paper: #F1FAF6;          /* 页面底 · 淡薄荷绿（2026-09-24 由纯白改来，避免大面积白底单调） */
  --canvas: #E8F6F0;         /* 交替区块底 · 淡绿 */
  --canvas-soft: #F4FBF8;    /* 清透绿白 · 页头/表单底 */
  --line: #D5E9F4;           /* 浅蓝边界 */
  --mint-soft: #E2F7EE;      /* 极浅青底 · 强调块 */
  --structure: #E4EDF3;      /* 结构浅蓝 */
  /* 表格专用蓝灰（2026-09-28 新增）：原先表头/高亮列用 --canvas --mint-soft 这类绿底，
     在淡绿页面上一整张表糊成一片，改成蓝灰后表格边界立刻清晰 */
  --table-head: #D7E6F2;     /* 表头底 · 淡蓝灰 */
  --table-hl: #E9F3FA;       /* 高亮列底 · 极淡蓝 */
  --table-head-line: #BBD3E6;

  /* ---- 五彩（用于分类/图表/状态）---- */
  --c-sky: #99D2FB;
  --c-mint: #C2F2E4;
  --c-gold: #F3D36B;
  --c-coral: #F0927D;
  --c-violet: #A18BDC;

  /* ---- 兼容旧变量名 ---- */
  --primary: #245F8E;
  --primary-light: #E4EDF3;
  --primary-dark: #1B4A70;
  --accent: #2E9279;
  --accent-light: #ECFBF7;
  --accent-dark: #246F61;
  --dark: #163B5C;
  --gray-900: #163B5C;
  --gray-700: #3C5E78;
  --gray-500: #71899B;
  --gray-300: #C7DCE9;
  --gray-100: #EAF2F7;
  --gray-50: #F5F8FA;
  --white: #ffffff;

  --shadow-sm: 0 1px 2px rgba(22, 59, 92, .05);
  --shadow: 0 6px 18px rgba(22, 59, 92, .07);
  --shadow-lg: 0 12px 30px rgba(22, 59, 92, .10);
  --shadow-xl: 0 18px 44px rgba(22, 59, 92, .13);

  --radius-sm: 6px;
  --radius: 10px;
  --radius-lg: 16px;
  --transition: .28s cubic-bezier(.4, 0, .2, 1);
  --max-width: 1200px;
  --nav-h: 72px;
}

*, *::before, *::after { box-sizing: border-box; margin: 0; padding: 0; }
html { scroll-behavior: smooth; }
body {
  font-family: "Source Han Sans SC", "Noto Sans SC", -apple-system, BlinkMacSystemFont,
               'PingFang SC', 'Microsoft YaHei', sans-serif;
  color: var(--ink-700); line-height: 1.7; background: var(--paper);
  -webkit-font-smoothing: antialiased;
}
a { text-decoration: none; color: inherit; }
ul { list-style: none; }
img { max-width: 100%; display: block; }
.container { max-width: var(--max-width); margin: 0 auto; padding: 0 24px; }
.muted { color: var(--ink-500); }

/* ====== 导航 ====== */
.nav {
  position: fixed; top: 0; left: 0; right: 0; z-index: 1000;
  background: rgba(255, 255, 255, .96); backdrop-filter: blur(14px);
  border-bottom: 1px solid var(--line); transition: var(--transition);
}
.nav.scrolled { box-shadow: var(--shadow-sm); }
.nav-inner {
  display: flex; align-items: center; justify-content: space-between;
  height: var(--nav-h); max-width: var(--max-width); margin: 0 auto; padding: 0 24px;
}
.nav-logo { display: flex; align-items: center; gap: 10px; flex: none; }
.nav-logo img { height: 36px; width: auto; }
.nav-logo span { font-size: 18px; font-weight: 700; color: var(--ink); letter-spacing: .02em; white-space: nowrap; }
.nav-links { display: flex; align-items: center; gap: 26px; }
.nav-links a {
  font-size: 15px; font-weight: 500; color: var(--ink-700); white-space: nowrap;
  transition: color var(--transition); position: relative; padding: 4px 0;
}
.nav-links a:hover { color: var(--brand); }
.nav-links a.active { color: var(--brand); font-weight: 700; }
.nav-links a.active::after {
  content: ''; position: absolute; left: 0; right: 0; bottom: -4px;
  height: 2px; background: var(--brand); border-radius: 2px;
}
/* 注意：选择器必须写成 .nav-links a.nav-cta ——
   上面的 `.nav-links a { padding: 4px 0 }` 是 (0,1,1)，
   裸写 `.nav-cta`(0,1,0) 会被它盖掉，导致按钮永远贴着字。 */
.nav-links a.nav-cta {
  display: inline-flex; align-items: center; justify-content: center;
  padding: 11px 30px; line-height: 1.2; min-height: 42px;
  background: var(--brand); color: var(--white) !important;
  border-radius: 9px; font-weight: 600 !important; transition: background var(--transition);
}
.nav-cta:hover { background: var(--brand-dark); }
.nav-links a.nav-cta.active::after { display: none; }
.nav-toggle {
  display: none; flex-direction: column; gap: 5px; background: none; border: none;
  cursor: pointer; padding: 4px; z-index: 1001;
}
.nav-toggle span {
  width: 24px; height: 2px; background: var(--ink); border-radius: 2px;
  transition: var(--transition); display: block;
}
.nav-toggle.active span:nth-child(1) { transform: translateY(7px) rotate(45deg); }
.nav-toggle.active span:nth-child(2) { opacity: 0; }
.nav-toggle.active span:nth-child(3) { transform: translateY(-7px) rotate(-45deg); }

/* ====== 通用区块 ====== */
section { padding: 76px 0; }
.section-header { text-align: center; margin-bottom: 48px; }
.section-tag {
  display: inline-block; padding: 4px 16px; background: var(--primary-light);
  color: var(--brand); border-radius: 100px; font-size: 13px; font-weight: 600;
  margin-bottom: 14px; letter-spacing: .04em;
}
.section-header h2 { font-size: 36px; font-weight: 800; color: var(--ink); margin-bottom: 12px; letter-spacing: -.02em; }
.section-header p { font-size: 17px; color: var(--ink-500); max-width: 640px; margin: 0 auto; }
.section-header.left { text-align: left; }
.section-header.left p { margin-left: 0; }
.bg-gray { background: var(--canvas); }
.bg-soft { background: var(--canvas-soft); }
.bg-mint { background: var(--mint-soft); }
.bg-dark { background: var(--ink); }

/* ====== 首页 Hero ====== */
.hero {
  padding: calc(var(--nav-h) + 76px) 0 84px;
  position: relative; overflow: hidden; color: var(--white);
  /* 底图：无人扫地车园区作业实景 + 蓝色蒙版（左深右浅，保证左侧文字可读、右侧透出设备） */
  background:
    linear-gradient(100deg,
      rgba(10, 38, 65, .95) 0%,
      rgba(15, 50, 82, .90) 30%,
      rgba(21, 66, 104, .80) 58%,
      rgba(26, 78, 120, .70) 100%),
    url(../images/hero.jpg) 62% 58% / cover no-repeat,
    var(--brand);
}
.hero-inner { position: relative; z-index: 1; }
.hero-badge {
  display: inline-flex; align-items: center; gap: 8px; padding: 6px 18px;
  background: rgba(194, 242, 228, .16); color: var(--mint);
  border-radius: 100px; font-size: 13px; font-weight: 600; margin-bottom: 22px;
}
.hero h1 { font-size: 50px; font-weight: 800; color: #fff; line-height: 1.22; margin-bottom: 18px; letter-spacing: -.03em; }
.hero h1 span { color: var(--sky); }
.hero p { font-size: 18px; color: rgba(255, 255, 255, .82); margin-bottom: 12px; max-width: 660px; }
.hero-sub { font-size: 14px !important; letter-spacing: .22em; color: var(--mint) !important; margin-bottom: 38px !important; }
.hero-btns { display: flex; gap: 16px; flex-wrap: wrap; }
.hero .btn-primary { background: #fff; color: var(--brand); box-shadow: none; }
.hero .btn-primary:hover { background: var(--sky); color: var(--ink); }
.hero .btn-outline { background: transparent; color: #fff; border-color: rgba(255,255,255,.45); }
.hero .btn-outline:hover { border-color: #fff; color: #fff; background: rgba(255,255,255,.08); }

.hero-kpis { display: grid; grid-template-columns: repeat(4, 1fr); gap: 20px; margin-top: 56px; position: relative; z-index: 1; }
.hero-kpi { padding: 22px 20px; border-radius: var(--radius); background: rgba(255, 255, 255, .08); border: 1px solid rgba(255, 255, 255, .16); }
.hero-kpi b { display: block; font-size: 30px; font-weight: 800; color: var(--sky); line-height: 1.15; }
.hero-kpi span { font-size: 13px; color: rgba(255, 255, 255, .76); }

/* ====== 内页头图 ====== */
/* 内页页头：2026-09-24 瘦身（原 331px 太高，笔记本上首屏几乎只剩页头），
   8 个内页共用，压缩后约 230px */
/* 内页页头：极简一行式——不铺底色、不加边框，
   标题在左，副标题紧随，面包屑靠右，全站内页仅占一行高度 */
.page-hero {
  padding: calc(var(--nav-h) + 30px) 0 18px;
  background: transparent; border-bottom: 0; text-align: left;
}
.page-hero .container { display: flex; align-items: center; gap: 10px 18px; flex-wrap: wrap; }
.page-hero h1 { font-size: 24px; font-weight: 800; color: var(--ink); line-height: 1.35; margin: 0; letter-spacing: -.02em; }
.page-hero p { font-size: 14px; color: var(--ink-500); margin: 0; }
/* 首页与内页同排：只在收窄的页头里生效 */
.page-hero.tight { padding: calc(var(--nav-h) + 12px) 0 10px; }

/* ====== 落地页「左文右图」页头（.page-hero.media，2026-10-21） ======
   区域落地页需要一个「本地真实作业」的视觉凭证，纯文字页头说服力不足。
   图片只在 620px 内显示，原图 1100px 够两倍图，不做上采样。
   ⚠️ 这段必须留在所有 @media 之前 —— 基础 grid 定义若落在媒体查询之后，窄屏覆盖会失效。 */
.page-hero.media .container {
  display: grid;
  grid-template-columns: minmax(0, 1fr) minmax(0, 620px);
  gap: 46px; align-items: center;
}
.ph-text { display: flex; flex-direction: column; align-items: flex-start; gap: 13px; min-width: 0; }
.ph-text .breadcrumb { margin: 0; }
.ph-text h1 { font-size: 31px; line-height: 1.28; }
.ph-text p { font-size: 15px; line-height: 1.78; color: var(--ink-700); max-width: 540px; }
.ph-btns { display: flex; align-items: center; gap: 12px; flex-wrap: wrap; margin-top: 4px; }
.ph-figure { margin: 0; min-width: 0; }
.ph-figure img {
  display: block; width: 100%; height: auto;
  border-radius: var(--radius-lg); box-shadow: var(--shadow);
}
.ph-figure figcaption {
  display: flex; align-items: center; gap: 7px;
  margin-top: 10px; font-size: 12px; color: var(--ink-500); line-height: 1.5;
}
.ph-figure figcaption::before {
  content: ''; flex: none; width: 5px; height: 5px; border-radius: 50%;
  background: var(--mint-deep);
}

.breadcrumb {
  display: flex; align-items: center; gap: 8px;
  font-size: 12.5px; color: var(--ink-500); margin: 0 0 0 auto; flex-wrap: wrap;
}
.breadcrumb a:hover { color: var(--brand); }
.breadcrumb i { font-size: 10px; color: var(--gray-300); }

/* ====== 按钮 ====== */
.btn-primary, .btn-outline, .btn-ghost {
  display: inline-flex; align-items: center; gap: 8px;
  padding: 14px 30px; border-radius: var(--radius); font-size: 16px; font-weight: 600;
  border: none; cursor: pointer; transition: all var(--transition); font-family: inherit;
}
.btn-primary { background: var(--brand); color: var(--white); }
.btn-primary:hover { background: var(--brand-dark); transform: translateY(-2px); box-shadow: var(--shadow); }
.btn-outline { background: var(--white); color: var(--ink); border: 1.5px solid var(--line); }
.btn-outline:hover { border-color: var(--brand); color: var(--brand); transform: translateY(-2px); }
.btn-ghost { background: transparent; color: var(--brand); padding: 10px 0; }
.btn-ghost:hover { gap: 12px; }
.btn-sm { padding: 10px 22px; font-size: 14px; }

/* ====== 业务双卡 ====== */
.pillar-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 28px; }
.pillar-card {
  background: var(--white); border-radius: var(--radius-lg); overflow: hidden;
  box-shadow: var(--shadow-sm); transition: all var(--transition); display: block;
  border: 1px solid var(--line);
}
.pillar-card:hover { transform: translateY(-6px); box-shadow: var(--shadow-lg); border-color: var(--sky); }
.pillar-media { height: 220px; overflow: hidden; background: var(--structure); }
.pillar-media img { width: 100%; height: 100%; object-fit: cover; transition: transform .5s cubic-bezier(.4, 0, .2, 1); }
.pillar-card:hover .pillar-media img { transform: scale(1.06); }
.pillar-body { padding: 28px 28px 32px; }
.pillar-body .pillar-icon {
  width: 44px; height: 44px; border-radius: 12px; display: flex;
  align-items: center; justify-content: center; font-size: 19px; margin-bottom: 14px;
}
.pillar-cleaning .pillar-icon { background: var(--primary-light); color: var(--brand); }
.pillar-spatial .pillar-icon { background: var(--mint-soft); color: var(--mint-deep); }
.pillar-body h3 { font-size: 22px; font-weight: 800; color: var(--ink); margin-bottom: 6px; }
.pillar-body .pillar-en { font-size: 12px; color: var(--ink-500); letter-spacing: .12em; text-transform: uppercase; margin-bottom: 12px; }
.pillar-body p { font-size: 15px; color: var(--ink-500); line-height: 1.75; }
.pillar-tags { display: flex; gap: 8px; flex-wrap: wrap; margin-top: 16px; }
.pillar-tags span {
  padding: 4px 12px; background: var(--canvas); border: 1px solid var(--line);
  border-radius: 100px; font-size: 12px; color: var(--ink-700);
}
.pillar-more { display: inline-flex; align-items: center; gap: 8px; margin-top: 18px; color: var(--brand); font-size: 14px; font-weight: 600; }

/* ------ 首页「两条业务线」板块压缩（2026-09-30 第 17 轮）------
   用户反馈：这个板块一屏显示不完。1920 视口实测原高 **903px**
   （= padding 76 + header 146 + header-mb 48 + 卡片 557 + padding 76），
   而 1080p 最大化后可视高约 950px，滚到板块顶部仍会切掉卡片底部一截。
   压缩后目标 **≤780px**，让「标题 + 两条业务卡」整块落进一屏。实测 **735px（−18.6%）**。

   手法：不动字号（字号一改全站观感就散），只收三处与「一屏」无关的余量 ——
     ① 上下留白 76 → 50（−52）
     ② 标题行高 1.7 → 1.25（h2 61→45）、标题组下间距 48 → 30
     ③ 配图 220 → 176、卡片内边距 28/32 → 22/26、图标/标签/更多三处间距小幅收
   全部限定在 `.sec-pillar` 下，**首页其他 6 个板块 + 其余 46 页完全不受影响**。 */
.sec-pillar { padding: 50px 0; }
.sec-pillar .section-header { margin-bottom: 30px; }
.sec-pillar .section-tag { margin-bottom: 12px; }
.sec-pillar .section-header h2 { line-height: 1.25; margin-bottom: 10px; }
.sec-pillar .pillar-media { height: 176px; }
.sec-pillar .pillar-body { padding: 22px 26px 26px; }
.sec-pillar .pillar-body .pillar-icon { margin-bottom: 12px; }
.sec-pillar .pillar-body h3 { line-height: 1.27; margin-bottom: 5px; }
.sec-pillar .pillar-body .pillar-en { margin-bottom: 10px; }
.sec-pillar .pillar-tags { margin-top: 13px; }
.sec-pillar .pillar-more { margin-top: 14px; }

/* ====== 数据看板 ====== */
.stat-grid { display: grid; grid-template-columns: repeat(4, 1fr); gap: 22px; }
.stat-item {
  text-align: center; padding: 32px 16px; background: var(--white);
  border-radius: var(--radius-lg); border: 1px solid var(--line);
}
.stat-num { font-size: 42px; font-weight: 800; color: var(--brand); line-height: 1.1; margin-bottom: 8px; font-family: Aptos, Arial, sans-serif; }
.stat-num small { font-size: 18px; font-weight: 600; }
.stat-item h4 { font-size: 15px; font-weight: 700; color: var(--ink); margin-bottom: 4px; }
.stat-item p { font-size: 13px; color: var(--ink-500); line-height: 1.6; }

/* ====== 优势 / 场景 卡片 ====== */
/* 列数用变量给「只有 3 张卡」的实例覆盖：桌面默认 4 列，.cols3 变 3 列。
   2026-09-30 第 18 轮：这些 3 列原本是**写在 HTML 内联 style 里**的
   （`style="grid-template-columns:repeat(3,1fr)"`），内联样式特异性最高，
   `<768px` 的 `.adv-grid { 1fr 1fr }` 一律压不动它 → 手机 414 屏下每格只剩 109px。
   改成变量后：**同一元素上列数由 --cols 决定，而媒体查询只覆盖 grid-template-columns 这条属性**
   → 桌面 3 列不变，≤768px 自动 2 列、≤480px 自动 1 列。 */
.adv-grid { display: grid; grid-template-columns: repeat(var(--cols, 4), 1fr); gap: 22px; }
.cols3 { --cols: 3; }
.adv-card {
  padding: 30px 22px; border-radius: var(--radius-lg); background: var(--white);
  border: 1px solid var(--line); transition: all var(--transition);
}
.adv-card:hover { border-color: var(--sky); transform: translateY(-4px); box-shadow: var(--shadow); }
/* 整卡可点（区域落地页的案例入口）：<a> 默认是行内元素，不加 display:block 会塌成一行文字 */
a.adv-card { display: block; color: inherit; text-decoration: none; }
a.adv-card h4 { color: var(--ink); }
a.adv-card p { color: var(--ink-500); }
.adv-icon { width: 52px; height: 52px; border-radius: 14px; display: flex; align-items: center; justify-content: center; margin-bottom: 16px; font-size: 22px; }
.adv-icon.c1 { background: var(--primary-light); color: var(--brand); }
.adv-icon.c2 { background: #FFF4C9; color: #8A6A12; }
.adv-icon.c3 { background: var(--mint); color: var(--mint-deep); }
.adv-icon.c4 { background: #F0ECFC; color: #654F99; }
.adv-card h4 { font-size: 17px; font-weight: 700; color: var(--ink); margin-bottom: 8px; }
.adv-card p { font-size: 14px; color: var(--ink-500); line-height: 1.7; }

.scenario-grid { display: grid; grid-template-columns: repeat(4, 1fr); gap: 22px; }
.scenario-card {
  border-radius: var(--radius-lg); overflow: hidden; background: var(--white);
  border: 1px solid var(--line); transition: all var(--transition);
}
.scenario-card:hover { transform: translateY(-4px); box-shadow: var(--shadow); }
.scenario-card img { width: 100%; height: 170px; object-fit: cover; }
.scenario-card-body { padding: 20px; text-align: center; }
.scenario-card-body i { font-size: 24px; margin-bottom: 10px; display: block; color: var(--brand); }
.scenario-card-body h4 { font-size: 16px; font-weight: 700; color: var(--ink); }
.scenario-card-body p { font-size: 13px; color: var(--ink-500); margin-top: 4px; }

/* ====== 品牌条 ====== */
.brand-strip { display: grid; grid-template-columns: repeat(4, 1fr); gap: 20px; }
.brand-item {
  padding: 26px 22px; background: var(--white); border: 1px solid var(--line);
  border-radius: var(--radius-lg); transition: all var(--transition);
}
.brand-item:hover { border-color: var(--sky); box-shadow: var(--shadow-sm); }
.brand-item .brand-name { font-size: 19px; font-weight: 800; color: var(--ink); margin-bottom: 4px; }
.brand-item .brand-en { font-size: 11px; letter-spacing: .14em; text-transform: uppercase; color: var(--ink-500); margin-bottom: 12px; }
.brand-item p { font-size: 13.5px; color: var(--ink-500); line-height: 1.7; }
.brand-item .brand-count { display: inline-block; margin-top: 12px; padding: 3px 10px; border-radius: 100px; background: var(--mint-soft); color: var(--mint-deep); font-size: 12px; font-weight: 600; }

/* ====== 产品列表 / 卡片 ====== */
.filter-bar { display: flex; gap: 10px; justify-content: center; flex-wrap: wrap; margin-bottom: 36px; }
.filter-btn {
  padding: 8px 20px; border-radius: 100px; border: 1px solid var(--line);
  background: var(--white); color: var(--ink-700); font-size: 14px; font-weight: 600;
  cursor: pointer; transition: all var(--transition); font-family: inherit;
}
.filter-btn:hover { border-color: var(--sky); color: var(--brand); }
/* 激活态：JS 加的是 .active（main.js ⑦），原来只写 .on 选不中 → 选中态没样式。
   两个都留着，兼容任何写法。 */
.filter-btn.active, .filter-btn.on { background: var(--brand); border-color: var(--brand); color: #fff; }

/* 紧贴页头的列表区（案例中心）：上方几乎不留白，让筛选条直接顶在页头下。
   注意——`.page-hero` 底部内边距只有 10px，这里再写 20+ 会白多出一大块。 */
.sec-flush { padding: 14px 0 76px; }

.product-grid { display: grid; grid-template-columns: repeat(3, 1fr); gap: 26px; }
/* 首页机型矩阵（八宫格）：基础 4 列必须写在这里 —— 写文件末尾会压过下面 @media 里的 2 列/1 列覆盖 */
.model-grid { display: grid; grid-template-columns: repeat(4, 1fr); gap: 18px; }
.product-card {
  background: var(--white); border-radius: var(--radius-lg); overflow: hidden;
  border: 1px solid var(--line); transition: all var(--transition); display: flex; flex-direction: column;
}
.product-card:hover { transform: translateY(-6px); box-shadow: var(--shadow-lg); border-color: var(--sky); }
.product-media {
  height: 232px; overflow: hidden; background: var(--canvas-soft); position: relative;
  display: flex; align-items: center; justify-content: center; padding: 14px;
}
/* 产品图是透明底、构图不一（室内机型是竖长图）：用 contain 才能整台设备完整可见，
   cover 会把竖长图裁掉 2/3（2026-09-24 用户反馈“只显示 30%”） */
.product-media img { width: 100%; height: 100%; object-fit: contain; transition: transform .5s cubic-bezier(.4, 0, .2, 1); }
.product-card:hover .product-media img { transform: scale(1.05); }
.product-badge {
  position: absolute; top: 14px; left: 14px; padding: 4px 12px; border-radius: 100px;
  font-size: 12px; font-weight: 700; background: rgba(255,255,255,.94); color: var(--brand);
  border: 1px solid var(--line);
}
.product-badge.hot { background: var(--brand); color: #fff; border-color: var(--brand); }
.product-body { padding: 22px; flex: 1; display: flex; flex-direction: column; }
.product-cat { font-size: 12px; font-weight: 700; color: var(--mint-deep); letter-spacing: .08em; margin-bottom: 8px; }
.product-body h4 { font-size: 19px; font-weight: 800; color: var(--ink); margin-bottom: 6px; }
.product-body > p { font-size: 14px; color: var(--ink-500); line-height: 1.7; flex: 1; }
.product-spec { display: flex; flex-wrap: wrap; gap: 8px; margin: 16px 0; }
.product-spec span { padding: 4px 10px; background: var(--canvas); border-radius: var(--radius-sm); font-size: 12px; color: var(--ink-700); border: 1px solid var(--line); }
.product-foot {
  display: flex; align-items: center; justify-content: space-between;
  padding-top: 16px; border-top: 1px solid var(--gray-100); margin-top: auto;
}
.product-price { font-size: 13px; color: var(--ink-500); }
.product-price strong { color: var(--brand); font-size: 15px; }
.product-more { font-size: 14px; font-weight: 600; color: var(--brand); display: inline-flex; align-items: center; gap: 6px; }

/* ====== 产品详情页 ====== */
.pd-hero { padding: calc(var(--nav-h) + 44px) 0 56px; background: var(--canvas-soft); }
.pd-grid { display: grid; grid-template-columns: 1.05fr .95fr; gap: 52px; align-items: center; }
.pd-media {
  border-radius: var(--radius-lg); overflow: hidden; background: var(--white);
  border: 1px solid var(--line);
}
.pd-media img { width: 100%; height: auto; max-height: 430px; object-fit: contain; display: block; }
.pd-tag { display: inline-block; padding: 4px 14px; border-radius: 100px; background: var(--mint-soft); color: var(--mint-deep); font-size: 13px; font-weight: 700; margin-bottom: 14px; }
.pd-title { font-size: 34px; font-weight: 800; color: var(--ink); line-height: 1.25; margin-bottom: 10px; letter-spacing: -.02em; }
.pd-sub { font-size: 17px; color: var(--ink-500); margin-bottom: 22px; }
.pd-chips { display: flex; flex-wrap: wrap; gap: 10px; margin-bottom: 26px; }
.pd-chip {
  padding: 10px 16px; border-radius: var(--radius); background: var(--white);
  border: 1px solid var(--line); text-align: center; min-width: 112px;
}
.pd-chip b { display: block; font-size: 18px; font-weight: 800; color: var(--brand); line-height: 1.3; }
.pd-chip span { font-size: 12px; color: var(--ink-500); }
.pd-actions { display: flex; gap: 14px; flex-wrap: wrap; }

.feature-grid { display: grid; grid-template-columns: repeat(3, 1fr); gap: 22px; }
.feature-card { padding: 26px 22px; background: var(--white); border: 1px solid var(--line); border-radius: var(--radius-lg); }
.feature-card i { font-size: 22px; color: var(--brand); margin-bottom: 14px; display: block; }
.feature-card h4 { font-size: 16px; font-weight: 700; color: var(--ink); margin-bottom: 8px; }
.feature-card p { font-size: 14px; color: var(--ink-500); line-height: 1.75; }

.spec-wrap { overflow-x: auto; border: 1px solid var(--line); border-radius: var(--radius-lg); background: var(--white); }
table.spec-table { width: 100%; border-collapse: collapse; min-width: 520px; }
table.spec-table th, table.spec-table td {
  padding: 14px 20px; text-align: left; font-size: 14.5px;
  border-bottom: 1px solid var(--line);
}
table.spec-table th { width: 34%; background: var(--table-head); color: var(--ink); font-weight: 700; }
table.spec-table td { color: var(--ink-700); }
table.spec-table tr:last-child th, table.spec-table tr:last-child td { border-bottom: none; }

.scene-tags { display: flex; flex-wrap: wrap; gap: 10px; }
.scene-tags span {
  padding: 8px 18px; border-radius: 100px; background: var(--white);
  border: 1px solid var(--line); font-size: 14px; color: var(--ink-700);
}
/* 机型详情页：图上等比完整显示（产品图为透明底、构图不一） */
.pd-media { display: flex; align-items: center; justify-content: center; padding: 26px; min-height: 300px; }
/* 场景区：分组小标题 + 说明句 */
.scene-label { font-size: 13px; font-weight: 700; color: var(--ink-500); letter-spacing: .04em; margin: 0 0 12px; }
.scene-label + .scene-tags { margin-bottom: 24px; }
.scene-tags:last-child { margin-bottom: 0; }
.scene-note { font-size: 14px; color: var(--ink-500); line-height: 1.85; margin-top: 20px; }

.related-grid { display: grid; grid-template-columns: repeat(3, 1fr); gap: 22px; }
.related-card {
  padding: 22px; border: 1px solid var(--line); border-radius: var(--radius-lg);
  background: var(--white); transition: all var(--transition); display: block;
}
.related-card:hover { border-color: var(--sky); transform: translateY(-4px); box-shadow: var(--shadow); }
.related-card .rc-brand { font-size: 12px; color: var(--mint-deep); font-weight: 700; letter-spacing: .06em; }
.related-card h4 { font-size: 17px; font-weight: 800; color: var(--ink); margin: 6px 0 8px; }
.related-card p { font-size: 13.5px; color: var(--ink-500); line-height: 1.7; }
.related-card .rc-more { margin-top: 12px; font-size: 13px; color: var(--brand); font-weight: 600; display: inline-flex; align-items: center; gap: 6px; }

/* ====== 案例 ====== */
.case-grid { display: grid; grid-template-columns: repeat(2, 1fr); gap: 26px; }
/* 详情页底部「相关案例」：3 列紧凑版（卡片小一档，标题与摘要同步收）
   注意：.case-grid.cols3 是 (0,2,0)，能盖住后面响应式里的 .case-grid (0,1,0)，
   所以 2 列 / 1 列的降级必须在这里显式声明。 */
.case-grid.cols3 { grid-template-columns: repeat(3, 1fr); gap: 22px; }
.case-grid.cols3 .case-body { padding: 20px; }
.case-grid.cols3 .case-body h4 { font-size: 17px; line-height: 1.42; margin-bottom: 9px; }
.case-grid.cols3 .case-body p { font-size: 13.5px; line-height: 1.75; }
.case-grid.cols3 .case-more { font-size: 12.5px; padding-top: 12px; }
@media (max-width: 1200px) { .case-grid.cols3 { grid-template-columns: repeat(2, 1fr); } }
@media (max-width: 768px)  { .case-grid.cols3 { grid-template-columns: 1fr; } }
/* 案例卡片 = 可点链接（2026-09-28 起整卡可点进 case-*.html）。
   卡片本身是 <a>，所以必须显式清掉链接默认色与下划线。 */
.case-card {
  background: var(--white); border: 1px solid var(--line); border-left: 4px solid var(--brand);
  border-radius: var(--radius-lg);
  overflow: hidden; display: flex; flex-direction: column; transition: all var(--transition);
  text-decoration: none; color: inherit;
}
.case-card:hover { transform: translateY(-5px); box-shadow: var(--shadow-lg); border-color: var(--sky); }
.case-media { aspect-ratio: 16 / 9; overflow: hidden; background: var(--canvas); border-bottom: 1px solid var(--line); }
.case-media img { width: 100%; height: 100%; object-fit: cover; display: block; transition: transform .55s ease; }
.case-card:hover .case-media img { transform: scale(1.045); }
.case-body { padding: 24px; flex: 1; display: flex; flex-direction: column; }
.case-type { font-size: 12px; font-weight: 700; letter-spacing: .06em; margin-bottom: 10px; }
.case-type.t1 { color: var(--brand); }
.case-type.t2 { color: var(--mint-deep); }
.case-body h4 { font-size: 19px; font-weight: 800; color: var(--ink); margin-bottom: 10px; line-height: 1.4; }
/* 两段摘要：只有最后一段吃掉剩余高度，把 facts / 「查看详情」压到卡片底部 */
.case-body p { font-size: 14px; color: var(--ink-500); line-height: 1.8; flex: none; }
.case-body p + p { margin-top: 10px; }
.case-body p:last-of-type { flex: 1; }
.case-facts { display: flex; flex-wrap: wrap; gap: 8px; margin-top: 16px; padding-top: 16px; border-top: 1px solid var(--gray-100); }
.case-facts span { padding: 4px 12px; border-radius: 100px; background: var(--canvas); border: 1px solid var(--line); font-size: 12px; color: var(--ink-700); }
.case-more {
  display: inline-flex; align-items: center; gap: 7px;
  margin-top: auto; padding-top: 14px;
  font-size: 13px; font-weight: 700; color: var(--brand);
}
.case-more i { font-size: 11px; transition: transform var(--transition); }
.case-card:hover .case-more i { transform: translateX(4px); }

/* ====== 对比表 ====== */
.compare-wrap { overflow-x: auto; border: 1px solid var(--line); border-radius: var(--radius-lg); background: var(--white); }
table.compare { width: 100%; border-collapse: collapse; min-width: 760px; }
table.compare th, table.compare td { padding: 15px 18px; font-size: 14px; border-bottom: 1px solid var(--line); text-align: left; }
table.compare thead th { background: var(--table-head); color: var(--ink); font-weight: 700; font-size: 14px; border-bottom: 1px solid var(--table-head-line); }
table.compare thead th.hl { background: var(--brand); color: #fff; border-bottom-color: var(--brand-dark); }
table.compare tbody td.hl { background: var(--table-hl); font-weight: 700; color: var(--ink); }
table.compare tbody th { font-weight: 700; color: var(--ink); background: var(--white); }
table.compare tr:last-child td, table.compare tr:last-child th { border-bottom: none; }

/* ====== 分栏 / 痛点 ====== */
.split-section { display: grid; grid-template-columns: 1fr 1fr; gap: 56px; align-items: center; }
.split-media { border-radius: var(--radius-lg); overflow: hidden; border: 1px solid var(--line); }
.split-media img { width: 100%; display: block; min-height: 320px; object-fit: cover; }
.split-text h2 { font-size: 30px; font-weight: 800; color: var(--ink); margin-bottom: 16px; }
.split-text h3 { font-size: 24px; font-weight: 800; color: var(--ink); margin-bottom: 14px; line-height: 1.4; }
.split-text p { font-size: 16px; color: var(--ink-500); line-height: 1.85; margin-bottom: 12px; }
.pain-list { display: flex; gap: 12px; flex-wrap: wrap; margin-top: 20px; }
.pain-list li { padding: 6px 16px; background: #FAF1F0; color: #B4553F; border-radius: 100px; font-size: 13px; font-weight: 600; }
.pain-panel { background: var(--canvas); border: 1px solid var(--line); border-radius: var(--radius-lg); padding: 36px; }
.pain-panel.accent { background: var(--mint-soft); border-color: var(--mint); }
.pain-panel h4 { font-size: 19px; font-weight: 700; color: var(--ink); margin-bottom: 16px; }
.pain-panel ul li { padding: 8px 0; font-size: 15px; color: var(--ink-700); display: flex; gap: 10px; line-height: 1.7; }
.pain-panel ul li::before { content: '\2715'; color: #C97A63; font-weight: 700; flex: none; }
/* 「痛点」用叉；「建议 / 速查」这类正向清单改用对勾 */
.pain-panel.check ul li::before { content: '\2713'; color: var(--mint-deep); }
.pain-panel .info-list li { display: block; padding: 8px 0; }
.pain-panel .info-list li::before { content: none; }
.pain-panel .info-list li strong { color: var(--ink); margin-right: 8px; }

/* ====== 流程步骤 ====== */
.step-grid { display: grid; grid-template-columns: repeat(var(--cols, 4), 1fr); gap: 22px; counter-reset: step; }
.step-item { position: relative; padding: 28px 22px; background: var(--white); border-radius: var(--radius-lg); border: 1px solid var(--line); }
.step-item::before {
  counter-increment: step; content: '0' counter(step);
  font-size: 30px; font-weight: 800; color: var(--structure);
  position: absolute; top: 16px; right: 20px; line-height: 1;
}
.step-item h4 { font-size: 17px; font-weight: 700; color: var(--ink); margin-bottom: 8px; position: relative; }
.step-item p { font-size: 14px; color: var(--ink-500); line-height: 1.7; }

/* ====== 关于页 ====== */
.about-values { display: flex; gap: 12px; flex-wrap: wrap; margin-bottom: 20px; }
.about-values span { padding: 8px 18px; background: var(--primary-light); color: var(--brand); border-radius: 100px; font-size: 14px; font-weight: 600; }
.cert-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 22px; }
.cert-card { background: var(--white); border-radius: var(--radius-lg); overflow: hidden; border: 1px solid var(--line); transition: all var(--transition); }
.cert-card:hover { transform: translateY(-4px); box-shadow: var(--shadow); }
.cert-card img { width: 100%; display: block; }
.cert-card-body { padding: 18px 20px; }
.cert-card-body h4 { font-size: 16px; font-weight: 700; color: var(--ink); margin-bottom: 4px; }
.cert-card-body p { font-size: 13px; color: var(--ink-500); }
.cert-list { display: grid; grid-template-columns: repeat(2, 1fr); gap: 16px; }
/* 四列版资质标签（about-honor.html）。2026-09-30 第 18 轮：列数原本**写死在 HTML 内联 style 里**
   （`style="grid-template-columns:repeat(4,1fr)"`），内联样式特异性最高，媒体查询一律无效 ——
   结果手机 375 屏下每格只剩 82px 宽、扣掉内边距不到 50px，中文被逼成一列一个字。
   改写成类后：桌面 4 列 / ≤768px 2×2 / ≤480px 2 列（**别回到 1 列，1 列 4 条会占一屏**）。 */
.cert-list-4 { margin-top: 32px; grid-template-columns: repeat(4, 1fr); }
.cert-item { display: flex; align-items: flex-start; gap: 12px; padding: 16px 18px; background: var(--white); border: 1px solid var(--line); border-radius: var(--radius); }
.cert-item i { font-size: 18px; color: var(--brand); margin-top: 3px; }
.cert-item span { font-size: 14px; font-weight: 600; color: var(--ink-700); line-height: 1.6; }

/* ====== 联系页 ====== */
.contact-inner { display: grid; grid-template-columns: 5fr 7fr; gap: 52px; }
.contact-row { display: flex; align-items: flex-start; gap: 14px; margin-bottom: 24px; }
.contact-row i { font-size: 18px; color: var(--brand); margin-top: 4px; width: 20px; text-align: center; }
.contact-row h4 { font-size: 15px; font-weight: 700; color: var(--ink); margin-bottom: 2px; }
.contact-row p { font-size: 14px; color: var(--ink-500); }
.contact-qr { padding: 20px; background: var(--canvas); border: 1px solid var(--line); border-radius: var(--radius); text-align: center; margin-top: 8px; }
.contact-qr img { width: 110px; height: 110px; border-radius: 6px; margin: 0 auto 8px; display: block; background: var(--white); padding: 4px; border: 1px solid var(--line); }
.contact-qr span { font-size: 13px; color: var(--ink-500); }

.form-card { background: var(--canvas-soft); border: 1px solid var(--line); padding: 34px; border-radius: var(--radius-lg); }
.form-card h3 { font-size: 20px; font-weight: 700; color: var(--ink); margin-bottom: 22px; }
.form-row { display: grid; grid-template-columns: 1fr 1fr; gap: 16px; }
.form-group { margin-bottom: 18px; }
.form-group label { display: block; font-size: 14px; font-weight: 600; margin-bottom: 6px; color: var(--ink-700); }
.form-group input, .form-group textarea, .form-group select {
  width: 100%; padding: 12px 16px; border: 1px solid var(--gray-300); border-radius: 8px;
  font-size: 15px; background: var(--white); color: var(--ink); font-family: inherit;
  transition: border-color var(--transition), box-shadow var(--transition); outline: none;
}
.form-group input::placeholder, .form-group textarea::placeholder { color: #A9BECB; }
.form-group input:focus, .form-group textarea:focus, .form-group select:focus {
  border-color: var(--brand); box-shadow: 0 0 0 3px rgba(36, 95, 142, .13);
}
.form-group textarea { resize: vertical; min-height: 110px; }
.form-card .btn-primary { width: 100%; justify-content: center; }
.form-success { display: none; text-align: center; padding: 48px 20px; }
.form-success i { font-size: 46px; color: var(--mint-deep); margin-bottom: 16px; display: block; }
.form-success h3 { font-size: 20px; color: var(--ink); margin-bottom: 8px; }
.form-success p { font-size: 14px; color: var(--ink-500); }
.form-tip { font-size: 12px; color: var(--ink-500); text-align: center; margin-top: 12px; }
/* 防机器人蜜罐字段：真人看不到（移出屏幕，不用 display:none，
   否则部分脚本会识别并跳过），机器人会把它当成正常输入框填上 */
.form-hp { position: absolute !important; left: -9999px !important; top: -9999px !important;
  width: 1px; height: 1px; overflow: hidden; opacity: 0; }

/* ====== 联系页 · 紧凑版（2026-09-24）======
   目标：1080p 桌面浏览器最大化时，首屏「联系方式 + 预约表单」整块看完，不用滚。
   只作用于 contact.html 的主区块（class="contact-main"），不影响其他页面。
   左栏列宽调大（1fr : 1.2fr）：让左侧说明文字收成一行、并给二维码留出横向空间。 */
.contact-main { padding: 38px 0 46px; }
.contact-main .contact-inner { grid-template-columns: 1fr 1.2fr; gap: 42px; }
.contact-main .contact-row { margin-bottom: 11px; }
.contact-main .contact-row i { font-size: 17px; margin-top: 3px; }
.contact-main .contact-row h4 { font-size: 14.5px; margin-bottom: 1px; }
.contact-main .contact-row p { font-size: 13.5px; line-height: 1.6; }
.contact-main .contact-row p a { color: inherit; transition: color var(--transition); }
.contact-main .contact-row p a:hover { color: var(--brand); text-decoration: underline; }
.contact-main .contact-qr { padding: 12px; margin-top: 2px; }
.contact-main .contact-qr img { width: 84px; height: 84px; margin-bottom: 6px; }
.contact-main .contact-qr span { font-size: 12.5px; }
.contact-main .form-card { padding: 26px 28px; }
.contact-main .form-card h3 { font-size: 19px; margin-bottom: 16px; }
.contact-main .form-group { margin-bottom: 13px; }
.contact-main .form-group label { font-size: 13.5px; margin-bottom: 5px; }
.contact-main .form-group input,
.contact-main .form-group select,
.contact-main .form-group textarea { padding: 10px 14px; font-size: 14.5px; }
.contact-main .form-group textarea { min-height: 84px; }
.contact-main .form-tip { margin-top: 10px; }

/* ====== 常见问题（区域落地页 / 配套 FAQPage 结构化数据） ======
   2026-10-21 替换掉原来那套**没人用的**折叠组件（.faq-item.open + <i> 箭头，
   全站没有任何页面引用、main.js 里也没有 toggle 逻辑，属死代码）。
   改成平铺：折叠内容虽在 DOM 里能被爬到，但用户和爬虫都得多点一次；
   这类页面问题不多（6 条），平铺更好读，也利于出「相关问答」富摘要。 */
.faq-list { display: flex; flex-direction: column; gap: 14px; max-width: 940px; margin: 0 auto; }
.faq-item {
  background: var(--white); border: 1px solid var(--line);
  border-radius: var(--radius-lg); padding: 22px 26px;
  transition: border-color .28s ease, box-shadow .28s ease;
}
.faq-item:hover { border-color: var(--sky); box-shadow: var(--shadow-sm); }
.faq-q {
  display: flex; gap: 11px; align-items: baseline;
  font-size: 16px; font-weight: 800; color: var(--ink);
  line-height: 1.5; margin-bottom: 9px;
  width: auto; padding: 0; background: none; border: none;
  cursor: auto; font-family: inherit; justify-content: flex-start;
}
.faq-q::before {
  content: 'Q'; flex: none; width: 22px; height: 22px; border-radius: 6px;
  background: var(--mint-soft); color: var(--mint-deep);
  font-size: 12px; font-weight: 800; line-height: 22px; text-align: center;
  transform: translateY(-1px);
}
.faq-a { font-size: 14.5px; color: var(--ink-700); line-height: 1.85; padding-left: 33px; max-height: none; overflow: visible; }
.faq-a b { color: var(--ink); font-weight: 700; }

/* ====== 页脚 ====== */
footer { background: var(--ink); color: rgba(255, 255, 255, .68); padding: 56px 0 24px; font-size: 14px; }
.footer-inner { display: flex; justify-content: space-between; flex-wrap: wrap; gap: 40px; }
.footer-brand img { height: 36px; margin-bottom: 12px; }
.footer-brand h3 { font-size: 18px; font-weight: 700; color: var(--white); margin-bottom: 10px; }
.footer-brand p { max-width: 340px; line-height: 1.75; }
.footer-links { display: flex; gap: 52px; flex-wrap: wrap; }
.footer-col h4 { font-size: 14px; font-weight: 600; color: var(--white); margin-bottom: 14px; letter-spacing: .05em; }
/* display:block → flex：只为让「联系咨询」栏里的图标与文字垂直居中对齐，
   没有图标的链接（核心业务 / 关于我们）表现与原来一致 */
.footer-col a { display: flex; align-items: center; color: rgba(255, 255, 255, .68); padding: 5px 0; transition: color var(--transition); font-size: 13.5px; }
.footer-col a:hover { color: var(--sky); }
/* 页脚「联系咨询」栏（2026-09-28 第 13 轮新增）：电话 / 邮箱 / 公众号 / 预约按钮 */
.footer-col a i { width: 15px; font-size: 12px; color: var(--sky); margin-right: 8px; flex: none; text-align: center; }
.footer-col a.footer-cta {
  display: inline-flex; width: fit-content; align-items: center;
  margin-top: 12px; padding: 9px 16px; border-radius: 100px;
  background: var(--brand); color: var(--white); font-weight: 700; font-size: 13px;
}
.footer-col a.footer-cta:hover { background: var(--brand-dark); color: var(--white); }
.footer-col a.footer-cta i { color: var(--white); font-size: 11.5px; }
.footer-bottom {
  margin-top: 40px; padding-top: 20px; border-top: 1px solid rgba(255, 255, 255, .12);
  display: flex; justify-content: space-between; align-items: center; flex-wrap: wrap; gap: 12px; font-size: 13px;
}
.footer-bottom a { color: rgba(255, 255, 255, .68); }
.footer-bottom a:hover { color: var(--sky); }

/* ====== 滚动渐现动效 ====== */
.reveal { opacity: 0; transform: translateY(26px); transition: opacity .7s cubic-bezier(.4, 0, .2, 1), transform .7s cubic-bezier(.4, 0, .2, 1); }
.reveal.in { opacity: 1; transform: none; }
.reveal-d1 { transition-delay: .08s; }
.reveal-d2 { transition-delay: .16s; }
.reveal-d3 { transition-delay: .24s; }
.reveal-d4 { transition-delay: .32s; }

/* ====== 底部 CTA 条 ====== */
.cta-band { background: var(--brand); color: var(--white); padding: 68px 0; text-align: center; }
.cta-band h2 { font-size: 32px; font-weight: 800; margin-bottom: 12px; letter-spacing: -.02em; }
.cta-band p { color: rgba(255, 255, 255, .8); font-size: 16px; margin-bottom: 28px; }
.cta-band .hero-btns { justify-content: center; }
.cta-band .btn-primary { background: #fff; color: var(--brand); }
.cta-band .btn-primary:hover { background: var(--sky); color: var(--ink); }
.cta-band .btn-outline { background: transparent; color: #fff; border-color: rgba(255,255,255,.45); }
.cta-band .btn-outline:hover { border-color: #fff; color: #fff; }

/* ====== 响应式 ====== */
/* 中段视口（769~1150px）：7 个菜单项 + logo + 预约按钮在这个区间放不下，
   会挤成「正捷时 / 空」两行。收紧间距与字号，保证单行显示。
   （2026-09-30 做首页机型矩阵时发现；≤768px 走汉堡菜单，不受影响） */
@media (max-width: 1150px) {
  .nav-inner { padding: 0 18px; }
  .nav-links { gap: 17px; }
  .nav-links a { font-size: 14px; }
  .nav-logo span { font-size: 16.5px; }
  .nav-logo img { height: 32px; }
}
@media (max-width: 1024px) {
  .hero h1 { font-size: 38px; }
  .hero-kpis { grid-template-columns: repeat(2, 1fr); }
  .pillar-grid { grid-template-columns: 1fr; }
  .stat-grid, .adv-grid, .scenario-grid, .step-grid, .brand-strip { grid-template-columns: repeat(2, 1fr); }
  .product-grid, .feature-grid, .related-grid { grid-template-columns: repeat(2, 1fr); }
  /* 机型矩阵：4 列 → 2 列（平板）。每格仍有约 320px，机型图看得清 */
  .model-grid { grid-template-columns: repeat(2, 1fr); gap: 16px; }
  .split-section { grid-template-columns: 1fr; gap: 36px; }
  .contact-inner { grid-template-columns: 1fr; gap: 40px; }
  /* 联系页紧凑版：单栏后还原纵向间距 */
  .contact-main .contact-inner { grid-template-columns: 1fr; gap: 30px; }
  .contact-main .contact-row { margin-bottom: 16px; }
  /* 证书卡（2026-09-30 第 18 轮）：**≤1024px 不再塌成单列**。
     证书是 850×1138 的竖版 A4 比例，单列时图片宽度 = 容器满宽（375 屏 → 327px），
     一张卡就有 500+px 高，手机上「铺满一屏还看不到第二张」。
     保持两列后：375 屏每张约 157px 宽（缩到约 48%），两张并排一眼看全；
     桌面（>1024px）走上面的 `.cert-grid { 1fr 1fr; gap: 22px }`，完全不受影响。 */
  .cert-grid { grid-template-columns: 1fr 1fr; gap: 16px; }
  .pd-grid { grid-template-columns: 1fr; gap: 34px; }
  /* 落地页左文右图：≤1024px 文字与 620px 图并排放不下，改上下堆叠 */
  .page-hero.media .container { grid-template-columns: minmax(0, 1fr); gap: 24px; }
  .ph-text h1 { font-size: 26px; }
  .ph-figure { max-width: 620px; }
}
@media (max-width: 768px) {
  .nav-links { display: none; }
  .nav-links.open {
    display: flex !important; flex-direction: column; position: absolute;
    top: 100%; left: 0; right: 0; background: #ffffff !important; z-index: 999 !important;
    align-items: stretch; justify-content: flex-start; gap: 0; padding: 8px 0;
    max-height: calc(100vh - 72px); overflow-y: auto;
    box-shadow: 0 8px 24px rgba(22, 59, 92, .12); border-bottom: 1px solid var(--line);
  }
  .nav-links.open a {
    font-size: 16px; font-weight: 500; color: var(--ink-700) !important;
    padding: 14px 24px; border-bottom: 1px solid var(--gray-100);
  }
  .nav-links.open a.active::after { display: none; }
  .nav-links.open a:last-child { border-bottom: none; }
  .nav-links.open .nav-cta {
    margin: 12px 24px; background: var(--brand) !important; color: var(--white) !important;
    text-align: center; border-bottom: none; border-radius: 8px; padding: 12px 24px;
  }
  .nav-toggle { display: flex; }
  .hero { padding: calc(var(--nav-h) + 48px) 0 52px; }
  .hero h1 { font-size: 29px; }
  .hero p { font-size: 16px; }
  .hero-kpis { margin-top: 38px; gap: 14px; }
  .hero-kpi { padding: 18px 14px; }
  .hero-kpi b { font-size: 24px; }
  section { padding: 50px 0; }
  .page-hero { padding: calc(var(--nav-h) + 16px) 0 12px; }
  .page-hero.tight { padding: calc(var(--nav-h) + 10px) 0 8px; }
  .sec-flush { padding: 12px 0 56px; }
  .page-hero h1 { font-size: 20px; }
  .page-hero p { font-size: 13.5px; }
  .breadcrumb { margin-left: 0; }
  .ph-text h1 { font-size: 21px; }
  .ph-text p { font-size: 13.5px; }
  .ph-figure figcaption { font-size: 11.5px; }
  /* 手机上两个按钮并排 —— 竖排会把首屏撑到 591px，图片被挤到折线以下 */
  .ph-btns { display: grid; grid-template-columns: 1fr 1fr; gap: 10px; width: 100%; }
  .ph-btns > a { justify-content: center; padding: 11px 6px; font-size: 13.5px; gap: 6px; }
  .section-header { margin-bottom: 32px; }
  .section-header h2 { font-size: 25px; }
  .sec-pillar { padding: 46px 0; }
  .sec-pillar .section-header { margin-bottom: 26px; }
  .sec-pillar .pillar-media { height: 170px; }
  .stat-grid, .adv-grid, .scenario-grid, .step-grid, .brand-strip { grid-template-columns: 1fr 1fr; }
  .product-grid, .case-grid, .feature-grid, .related-grid { grid-template-columns: 1fr; }
  /* 机型矩阵（≤768px）：保持 2 列 —— 单列时机型图会撑到满宽、一屏只看得下 1.5 张；
     2 列每格约 160px，尺寸虽小但「8 款机型是什么」的整体认知还在。 */
  .model-grid { grid-template-columns: 1fr 1fr; gap: 12px; }
  .model-media { height: 118px; padding: 8px; }
  .model-body { padding: 11px 12px 13px; }
  .model-body h4 { font-size: 13.5px; margin-bottom: 8px; }
  .model-specs span { font-size: 11.5px; }
  .model-specs span:last-child { display: none; }   /* 手机每条只留 2 行参数，避免卡片高度失控 */
  .model-more { font-size: 11.5px; }
  .cert-list { grid-template-columns: 1fr; }
  /* 资质标签 4→2 列（内联写死列数的那处已改类，否则这条永远不会生效） */
  .cert-list-4 { grid-template-columns: 1fr 1fr; gap: 12px; }
  .cert-list-4 .cert-item { padding: 12px 14px; gap: 9px; }
  .cert-list-4 .cert-item span { font-size: 13px; }
  /* 手机上的证书卡：两列 + 整体缩小一档，卡片内边距与标题字号跟着收，
     否则 40px 的内边距会吃掉 157px 卡宽的 1/4。 */
  .cert-grid { gap: 12px; }
  .cert-card-body { padding: 12px 14px; }
  .cert-card-body h4 { font-size: 13.5px; line-height: 1.35; }
  .cert-card-body p { font-size: 11.5px; line-height: 1.5; }
  .form-row { grid-template-columns: 1fr; }
  .form-card { padding: 24px 20px; }
  .contact-main { padding: 32px 0 38px; }
  .contact-main .form-card { padding: 22px 18px; }
  .contact-main .form-group textarea { min-height: 96px; }
  .footer-inner { flex-direction: column; }
  .footer-links { gap: 28px; }
  .cta-band h2 { font-size: 24px; }
  .split-media img { min-height: 240px; }
  .btn-primary, .btn-outline { padding: 13px 26px; font-size: 15px; }
  .pd-title { font-size: 26px; }
  .pd-chip { min-width: 96px; padding: 8px 12px; }
  .pd-chip b { font-size: 16px; }
  .pain-panel { padding: 26px; }
  table.spec-table th { width: 40%; }
}
@media (max-width: 480px) {
  .stat-grid, .adv-grid, .scenario-grid, .step-grid, .brand-strip, .hero-kpis { grid-template-columns: 1fr; }
  .hero h1 { font-size: 25px; }
  .cert-grid { gap: 10px; }
  .cert-card-body { padding: 10px 12px; }
  .cert-card-body h4 { font-size: 12.5px; }
}

@media (prefers-reduced-motion: reduce) {
  .reveal { opacity: 1; transform: none; transition: none; }
  html { scroll-behavior: auto; }
}

/* ==========================================================
   以下为 v2 追加：全站导航下拉（由 js/main.js 渲染）
   + 色卡色彩扩展 + 案例/新闻/团队等新增页面组件
   ========================================================== */

/* ------ 锚点定位：避免被固定导航挡住标题 ------
   2026-09-30 第 17 轮补上 `form[id]`：#inquiryForm 落在 <form> 上，
   原来只覆盖 section[id] / [id].anchor-block / .contact-qr[id]，
   于是锚点跳过去时表单顶部停在 y=0 —— 正好钻到 72px 的固定导航底下，
   标题「预约方案咨询」被切掉一截。 */
section[id], [id].anchor-block, .contact-qr[id], form[id] { scroll-margin-top: calc(var(--nav-h) + 28px); }

/* ====== 导航：一级项与下拉面板 ====== */
.nav-links > .nav-item { position: relative; display: flex; align-items: center; }
.nav-links > .nav-item > .nav-link { display: inline-flex; align-items: center; gap: 6px; }
.nav-caret { font-size: 10px; opacity: .5; transition: transform var(--transition), opacity var(--transition); }
.nav-links > .nav-item.has-sub:hover > .nav-link .nav-caret { transform: rotate(180deg); opacity: 1; }

.nav-sub {
  position: absolute; top: 100%; left: 50%; transform: translateX(-50%);
  padding-top: 16px; opacity: 0; visibility: hidden; z-index: 1200;
  transition: opacity .22s ease, visibility .22s ease;
}
.nav-links > .nav-item.has-sub:hover .nav-sub { opacity: 1; visibility: visible; }
.nav-sub-inner {
  min-width: 172px; padding: 8px; background: var(--white);
  border: 1px solid var(--line); border-radius: var(--radius);
  box-shadow: 0 18px 40px rgba(22, 59, 92, .14);
  display: flex; flex-direction: column;
}
/* 覆盖 .nav-links a 的默认样式，保证下拉项是块状菜单 */
.nav-links .nav-sub-inner a {
  padding: 10px 16px; border-radius: 8px; font-size: 14.5px; font-weight: 500;
  color: var(--ink-700) !important; white-space: nowrap; position: static;
  border-bottom: none; transition: background var(--transition), color var(--transition);
}
.nav-links .nav-sub-inner a::after { display: none; }
.nav-links .nav-sub-inner a:hover { background: var(--mint-soft); color: var(--brand) !important; }

/* ====== 色彩扩展：把色卡的绿 / 黄 / 橙 / 紫用起来 ====== */
.tone-mint   { color: var(--mint-deep); }
.tone-gold   { color: #8A6A12; }
.tone-coral  { color: #B4553F; }
.tone-violet { color: #654F99; }

.tag-x {
  display: inline-block; padding: 4px 13px; border-radius: 100px;
  font-size: 12px; font-weight: 700; letter-spacing: .03em;
}
.tag-x.blue   { background: #E4EDF3; color: var(--brand); }
.tag-x.mint   { background: var(--mint); color: #246F61; }
.tag-x.gold   { background: #FFF4C9; color: #806110; }
.tag-x.coral  { background: #FBE3DC; color: #A8482F; }
.tag-x.violet { background: #F0ECFC; color: #654F99; }

/* 顶部细色线（合作伙伴 / 分类强调） */
.brand-item { position: relative; overflow: hidden; }
.brand-item::after {
  content: ''; position: absolute; left: 0; right: 0; top: 0; height: 3px;
  background: var(--brand);
}
.brand-item.b-sky::after    { background: var(--sky-deep); }
.brand-item.b-mint::after   { background: var(--mint-deep); }
.brand-item.b-gold::after   { background: var(--c-gold); }
.brand-item.b-violet::after { background: var(--c-violet); }

/* 数据数字的彩色用法 */
.stat-num.tone-mint  { color: var(--mint-deep); }
.stat-num.tone-gold  { color: #B08A10; }
.stat-num.tone-brand { color: var(--brand); }

/* 案例类型色（补齐 t3 ~ t5） */
.case-type.t3 { color: #8A6A12; }

/* ====== 首页机型矩阵（C 方案：静态八宫格，2026-09-30） ======
   用户的诉求是「一排卡片，光标放哪里哪个居中」；评估后采用静态八宫格——
   8 款机型是横向对比关系，一眼看全比"藏起来逐个看"更有信息效率，
   且手机上悬停效果完全失效。这里只做克制的抬升 + 边线变蓝，不做放大位移。
   ⚠️ 基础列数写在文件靠后的位置会**压过前面的 @media 覆盖**（媒体查询不提升特异性），
      所以 .model-grid 的基础规则见前面「网格基础」那一节，这里只放组件内部样式。 */
.model-card {
  background: var(--white); border: 1px solid var(--line); border-radius: var(--radius-lg);
  overflow: hidden; display: flex; flex-direction: column;
  transition: transform .28s ease, box-shadow .28s ease, border-color .28s ease;
}
.model-card:hover { transform: translateY(-4px); box-shadow: var(--shadow-md); border-color: var(--sky); }
.model-media {
  height: 158px; background: var(--canvas-soft);
  display: flex; align-items: center; justify-content: center; padding: 10px;
  border-bottom: 1px solid var(--line);
}
.model-media img { max-width: 100%; max-height: 100%; object-fit: contain; }
.model-body { padding: 14px 16px 16px; flex: 1; display: flex; flex-direction: column; }
.model-brand {
  font-size: 11px; font-weight: 700; letter-spacing: .1em; text-transform: uppercase;
  color: var(--mint-deep); margin-bottom: 5px;
}
.model-body h4 { font-size: 15.5px; font-weight: 800; color: var(--ink); line-height: 1.4; margin-bottom: 10px; }
.model-specs { display: flex; flex-direction: column; gap: 5px; margin-bottom: 12px; flex: 1; }
.model-specs span { font-size: 12.5px; color: var(--ink-500); display: flex; align-items: baseline; gap: 6px; }
.model-specs span::before {
  content: ''; width: 4px; height: 4px; border-radius: 50%;
  background: var(--sky-deep); flex: none; transform: translateY(-2px);
}
.model-more {
  font-size: 12.5px; font-weight: 700; color: var(--brand);
  display: inline-flex; align-items: center; gap: 5px; margin-top: auto;
}
.model-card:hover .model-more { gap: 8px; }
.model-more i { transition: transform .28s ease; }

/* 机型矩阵下方的选型引导条 */
.model-tip {
  margin-top: 26px; text-align: center; font-size: 14px; color: var(--ink-500);
}
.model-tip a {
  font-weight: 700; color: var(--brand);
  display: inline-flex; align-items: center; gap: 6px;
  border-bottom: 1px solid transparent; padding-bottom: 2px;
  transition: border-color .25s ease;
}
.model-tip a:hover { border-bottom-color: var(--brand); }
.model-tip i { font-size: 11px; }

/* 品牌墙的「代表机型」小字 */
.brand-item .brand-models { display: block; font-size: 12px; color: var(--ink-500); margin-top: 2px; }
.case-type.t4 { color: #B4553F; }
.case-type.t5 { color: #654F99; }

/* ====== 团队风采图墙 ====== */
.team-grid { display: grid; grid-template-columns: repeat(3, 1fr); gap: 20px; }
.team-card {
  position: relative; border-radius: var(--radius-lg); overflow: hidden;
  border: 1px solid var(--line); background: var(--white); transition: all var(--transition);
}
.team-card:hover { transform: translateY(-4px); box-shadow: var(--shadow-lg); border-color: var(--sky); }
.team-card img { width: 100%; height: 230px; object-fit: cover; transition: transform .55s cubic-bezier(.4, 0, .2, 1); }
.team-card:hover img { transform: scale(1.05); }
.team-cap {
  position: absolute; left: 0; right: 0; bottom: 0; padding: 30px 18px 14px;
  color: #fff; font-size: 14px; font-weight: 600;
  background: linear-gradient(to top, rgba(22, 59, 92, .84), rgba(22, 59, 92, 0));
}

/* ====== 新闻中心列表 ====== */
.news-grid { display: grid; grid-template-columns: repeat(3, 1fr); gap: 24px; }
/* 2026-09-28：卡片改成「顶图 + 正文」两段式，padding 收到 .news-body 上，
   这样配图能整幅贴到卡片上沿（圆角由 .news-card 的 overflow:hidden 裁出来） */
.news-card {
  display: flex; flex-direction: column; padding: 0; overflow: hidden;
  background: var(--white); border: 1px solid var(--line);
  border-radius: var(--radius-lg); transition: all var(--transition);
}
.news-card:hover { transform: translateY(-4px); box-shadow: var(--shadow-lg); border-color: var(--sky); }
/* 2026-09-28 再调：顶部内边距 17 → 23 → 30px。
   用户两次反馈「图片和标签没有距离」：图框下沿到「分类标签 + 日期」这一行
   必须留出明确的空白带，30px 才够。 */
/* 2026-09-28 第 12 轮：用户要求「图片 ↔ 标签 ↔ 标题」上下留白一致。
   做法：图框下沿 → 标签 = padding-top 24px；标签 → 标题 = .news-meta 的
   margin-bottom 24px（h4 行盒半行距另计约 4px，视觉上两边等距）。
   两值必须成对改，改一个就会出现"上大下小"。 */
.news-body { display: flex; flex-direction: column; flex: 1; padding: 24px 20px 20px; }

/* 配图统一 16:9（2026-09-28 第 9 轮：用户反馈 4:3 太高，改回 16:9）
   图片文件本身也全部重做成 16:9（照片居中裁上下；公文/表格截图左右补白不裁），
   所以 cover 不会再切掉任何内容。 */
.news-figure { position: relative; aspect-ratio: 16 / 9; overflow: hidden; background: var(--canvas-soft); border-bottom: 1px solid var(--line); }
.news-figure img { width: 100%; height: 100%; object-fit: cover; display: block; transition: transform .55s ease; }
.news-card:hover .news-figure img { transform: scale(1.045); }
/* 「无合适配图」直接引一张现成的 16:9 白底品牌图 images/news/default.png
   （白底 + 藏蓝横版 logo，由桌面「正捷logo藏蓝无英文.png」生成）。
   不再用「透明 logo 贴色块」的兜底写法 —— 那样画框边界看不见，
   下方的分类标签会显得忽高忽低（2026-09-28 的教训）。 */

/* margin-bottom 19px = padding-top 24px 减去标题行盒的半行距（17px×1.48 时约 5px）。
   像素校对过：pill 底 → 标题「墨迹」顶的视觉空白，与图框底 → pill 顶的空白都是 24px。
   直接写 24px 会让下方多出 5px（"上紧下松"），所以这里必须比 padding-top 小一档。 */
.news-meta { display: flex; align-items: center; justify-content: space-between; gap: 10px; margin-bottom: 19px; }
.news-date { font-size: 12.5px; color: var(--ink-500); letter-spacing: .02em; }
/* 标题固定 2 行高度（2026-09-28 第 10 轮）：标题 11~42 字，1 行 / 2 行混排会让
   卡片高度差 25px、「阅读全文」跨行也对不齐。min-height 把标题位写死成两行，
   卡片高度因此完全一致（19 张实测全等高）。 */
.news-card h4 {
  font-size: 17px; font-weight: 800; color: var(--ink); line-height: 1.48; margin-bottom: 8px;
  display: -webkit-box; -webkit-line-clamp: 2; line-clamp: 2;
  -webkit-box-orient: vertical; overflow: hidden;
  min-height: calc(1.48em * 2);
}
/* 摘要固定 3 行（2026-09-28）：卡片高度统一、整张卡约半屏。
   文字已按 3 行篇幅重写，line-clamp 是兜底，保证再长的摘要也不会把卡片撑高 */
.news-card p {
  font-size: 14px; color: var(--ink-500); line-height: 1.8; flex: 1;
  display: -webkit-box; -webkit-line-clamp: 3; line-clamp: 3;
  -webkit-box-orient: vertical; overflow: hidden;
}
/* 来源行：强制单行 + 省略号 + 固定行高（min-height），
   与标题、摘要一起构成"定高"三件套 —— 底部「阅读全文」才能像素级对齐。
   完整来源鼠标悬停可见、详情页内也保留全文。 */
.news-src {
  margin-top: 10px; padding-top: 9px; border-top: 1px solid var(--gray-100);
  font-size: 12px; color: var(--ink-500); line-height: 1.6;
  white-space: nowrap; overflow: hidden; text-overflow: ellipsis;
  min-height: calc(1.6em + 10px);
}

/* ====== 内页锚点导航条（关于我们等多区块页面） ====== */
.anchor-nav { background: rgba(255, 255, 255, .97); border-bottom: 1px solid var(--line); }
.anchor-nav-inner { display: flex; gap: 8px; padding: 12px 0; overflow-x: auto; }
.anchor-nav a {
  padding: 7px 18px; border-radius: 100px; font-size: 14px; font-weight: 600;
  color: var(--ink-700); white-space: nowrap; transition: all var(--transition);
}
.anchor-nav a:hover { background: var(--canvas); color: var(--brand); }
/* 当前所在子页（关于我们的 4 个页面共用这条切换条） */
.anchor-nav a.active { background: var(--brand); color: var(--white); }
.anchor-nav a.active:hover { background: var(--brand-dark); color: var(--white); }

/* ====== 提示条 / 空状态 ====== */
.note-band {
  display: flex; align-items: flex-start; gap: 12px; padding: 16px 20px;
  background: var(--mint-soft); border: 1px solid var(--mint);
  border-radius: var(--radius); font-size: 14px; color: var(--ink-700); line-height: 1.7;
}
.note-band i { color: var(--mint-deep); margin-top: 3px; }
.note-band.gold { background: #FFFAE8; border-color: #F1E2A8; }
.note-band.gold i { color: #B08A10; }

/* ====== 筛选按钮的 active 别名（兼容 .on） ====== */
.filter-btn.active { background: var(--brand); border-color: var(--brand); color: #fff; }

/* ====== 案例卡：编号与左上色条（2026-09-28 起卡片均为顶图式，无图版式已取消） ====== */
.case-top { display: flex; align-items: center; justify-content: space-between; gap: 12px; margin-bottom: 12px; }
.case-no { font-size: 15px; font-weight: 800; color: var(--structure); letter-spacing: .08em; font-family: Aptos, Arial, sans-serif; }
.case-card[data-cat="residence"] { border-left-color: var(--brand); }
.case-card[data-cat="business"]  { border-left-color: var(--c-coral); }
.case-card[data-cat="campus"]    { border-left-color: var(--sky-deep); }
.case-card[data-cat="city"]      { border-left-color: var(--mint-deep); }
.case-card[data-cat="tourism"]   { border-left-color: var(--c-violet); }

/* ====== 案例详情页：项目档案（键值网格） ====== */
.case-profile {
  display: grid; grid-template-columns: repeat(2, 1fr); gap: 1px;
  background: var(--line); border: 1px solid var(--line);
  border-radius: var(--radius-lg); overflow: hidden; margin: 32px 0 0;
}
.case-profile > div { background: var(--white); padding: 18px 22px; }
.case-profile span { display: block; font-size: 12.5px; color: var(--ink-500); margin-bottom: 5px; letter-spacing: .04em; }
.case-profile strong { display: block; font-size: 15px; font-weight: 700; color: var(--ink); line-height: 1.5; }
@media (max-width: 768px) { .case-profile { grid-template-columns: 1fr; } }

/* 新闻卡片：左侧色条已取消（2026-09-28 卡片改为顶图式，留白统一由 .news-body 控制） */

/* ====== 追加响应式 ====== */
@media (max-width: 1024px) {
  .team-grid, .news-grid { grid-template-columns: repeat(2, 1fr); }
}

@media (max-width: 768px) {
  /* 手机端换用 800px 版 hero 底图：252KB → 61KB（−76%）。
     它是 CSS background，不能用 srcset，只能按断点切图；
     768px 视口下 800px 宽已 2x 有余，肉眼无差别。 */
  .hero {
    background:
      linear-gradient(100deg,
        rgba(10, 38, 65, .95) 0%,
        rgba(15, 50, 82, .90) 30%,
        rgba(21, 66, 104, .80) 58%,
        rgba(26, 78, 120, .70) 100%),
      url(../images/sm/hero.jpg?v=20260930h) 62% 58% / cover no-repeat,
      var(--brand);
  }
}

@media (max-width: 768px) {
  /* 移动端：一级项整行，二级菜单点击展开 */
  .nav-links.open > .nav-item { display: block; width: 100%; }
  .nav-links.open .nav-item > .nav-link {
    display: flex !important; align-items: center; justify-content: space-between;
    width: 100%; padding: 14px 24px !important;
    border-bottom: 1px solid var(--gray-100);
  }
  .nav-links.open .nav-caret { font-size: 12px; padding: 8px; margin: -8px; opacity: .7; }
  .nav-links.open .nav-item.has-sub.open .nav-caret { transform: rotate(180deg); }

  .nav-links.open .nav-sub {
    position: static; transform: none; opacity: 1; visibility: visible;
    padding: 0; background: var(--canvas); display: none;
  }
  .nav-links.open .nav-item.open .nav-sub { display: block; }
  .nav-links.open .nav-sub-inner {
    border: none; box-shadow: none; background: var(--canvas);
    border-radius: 0; padding: 6px 0 10px; min-width: 0;
  }
  .nav-links.open .nav-sub-inner a {
    padding: 11px 40px !important; font-size: 14.5px !important;
    border-bottom: none !important; color: var(--ink-500) !important;
  }

  .team-grid, .news-grid { grid-template-columns: 1fr; }
  .team-card img { height: 200px; }
  .anchor-nav-inner { gap: 6px; }
  .anchor-nav a { padding: 7px 14px; font-size: 13.5px; }
}

/* ====== 新闻列表：卡片可点击 + 「阅读全文」 ====== */
.news-more {
  display: inline-flex; align-items: center; gap: 7px;
  margin-top: auto; padding-top: 12px;
  font-size: 13px; font-weight: 700; color: var(--brand);
}
.news-more i { font-size: 11px; transition: transform var(--transition); }
.news-card:hover .news-more i { transform: translateX(4px); }

/* ====== 新闻详情页 ====== */
/* 详情页页头排布：标题一行 → 面包屑靠右 → 「标签 + 日期」另起一行排在标题下方
   （用 order 调视觉顺序，DOM 仍保持 标题 → 标签日期 → 面包屑 的自然阅读顺序） */
.article-hero h1 { order: 1; }
.article-hero .breadcrumb { order: 2; }
.article-head { display: flex; align-items: center; gap: 10px; margin: 0; width: 100%; order: 3; }
.article-date { font-size: 13px; color: var(--ink-500); }
.article-wrap { max-width: 820px; margin: 0 auto; }
.article-lead {
  font-size: 16px; color: var(--ink-700); line-height: 1.95;
  padding: 20px 24px; background: var(--mint-soft); border-left: 3px solid var(--brand);
  border-radius: 0 var(--radius) var(--radius) 0; margin-bottom: 34px;
}
/* 正文配图（2026-09-28）：导语框下方一张 16:9 大图 —— 与素材实际比例一致，不做二次裁切 */
.article-figure {
  margin: 0 0 34px; border: 1px solid var(--line); border-radius: var(--radius-lg);
  overflow: hidden; background: var(--canvas-soft); aspect-ratio: 16 / 9;
}
.article-figure img { width: 100%; height: 100%; object-fit: cover; display: block; }
.article-body h3 { font-size: 20px; font-weight: 800; color: var(--ink); margin: 34px 0 12px; letter-spacing: -.01em; }
.article-body h3:first-child { margin-top: 0; }
.article-body p { font-size: 15.5px; color: var(--ink-700); line-height: 2; margin-bottom: 14px; }
.article-src { margin-top: 34px; padding-top: 18px; border-top: 1px solid var(--line); font-size: 13px; color: var(--ink-500); }
/* 正文内嵌的来源标注（引用公开报道时用，弱化但可读） */
.src-inline { font-size: .92em; color: var(--ink-500); }
/* ------------------------------------------------------------------
   详情页底部翻页（2026-09-28）：原来的「返回新闻中心 + 就这个话题聊聊」
   改为「上一篇 / 下一篇」卡片式翻页；返回新闻中心移到左上角悬浮按钮
   ------------------------------------------------------------------ */
/* 2026-09-28 第 10 轮：左右必须严格对称。
   之前两个卡片标题行数不同（1 行 vs 2 行）→ 高度差一截、看着一高一低；
   现在 .pager-title 写死两行高、卡片加轻阴影（白卡在淡绿页面上"浮"起来，
   边界一眼可见），且两块始终 align-items: stretch 等高。 */
.article-pager { display: grid; grid-template-columns: 1fr 1fr; gap: 18px; margin-top: 30px; align-items: stretch; }
.pager-item {
  display: flex; flex-direction: column; gap: 8px; padding: 18px 22px;
  background: var(--white); border: 1px solid var(--line);
  border-radius: var(--radius-lg); box-shadow: var(--shadow-sm);
  transition: all var(--transition);
}
.pager-item:hover {
  border-color: var(--sky); box-shadow: var(--shadow-lg);
  transform: translateY(-3px);
}
/* ⚠️ 2026-09-30 第 17 轮踩到的坑：.pager-dir 是 inline-flex，是**弹性盒子**，
   text-align 对它内部的图标+文字（匿名弹性项）**完全无效** ——
   弹性项的位置由 justify-content 决定，不由 text-align。
   所以「下一个案例 →」这一行长期是左对齐的（只有下面的 .pager-title 是块级、
   吃 text-align:right，所以标题一直是对的）。用户在窄屏截图里一眼就看出不对。
   正解：用 align-self 让整行收成内容宽并靠边。 */
.pager-dir { display: inline-flex; align-items: center; gap: 7px; font-size: 12.5px; font-weight: 700; color: var(--brand); align-self: flex-start; }
.pager-dir i { font-size: 11px; }
.pager-title {
  font-size: 14.5px; font-weight: 700; color: var(--ink); line-height: 1.6;
  display: -webkit-box; -webkit-line-clamp: 2; line-clamp: 2;
  -webkit-box-orient: vertical; overflow: hidden;
  min-height: calc(1.6em * 2);   /* 写死两行高 → 上一篇/下一篇完全等高对称 */
}
.pager-item.is-next { text-align: right; }
.pager-item.is-next .pager-dir { align-self: flex-end; }
.pager-item.is-next:hover .pager-dir i { transform: translateX(3px); }

/* 左上角悬浮返回（随页面滑动一直在）：
   2026-09-28 第二版 —— 改成**始终可见**。
   第一版要滚过页头才淡入，用户在预览里滚动事件不可靠、根本找不到按钮。
   现在的定位策略（避开文章大标题）：
   · 宽屏 ≥1564px：正文两侧有空白栏 → 真正贴左上角（top: nav+18）
   · 1201~1563px：左边没有空白栏了，下移到页头标题带**下面**（top: nav+150），
     横向仍在空白区（正文栏 820px 居中，左边缘离视口 ≥190px）
   · ≤1200px：正文占满宽度，改左下角 46px 圆形按钮，同样常驻 */
/* 左上角悬浮返回（随页面滑动一直在，2026-09-28 第 10 轮定版）
   历史：第 1 版「滚过页头才淡入」→ 用户根本找不到；第 2 版按宽度分档但有一档
   落在标题下方；第 3 版（本版）统一左上角。
   ⚠️ 关键：文章标题在 .page-hero > .container 里，**左边缘是容器 padding（24px）**，
   和正文 .article-wrap（820px 居中）的左边缘不是一回事 ——
   窄屏时标题几乎贴左边，此时把按钮钉在左上角必然压住标题首字（1080px 实测压住了「调」字）。
   所以分档：
   · ≥1500px：容器有足够左留白（≥174px）→ 真·左上角胶囊
   · 1024~1499px：下移到页头标题带**下方**（页头高 193px，按钮落在页头底部的空白里）
   · ≤1023px：正文接近满宽 → 左下角 46px 圆形 */
.article-back {
  position: fixed; z-index: 900;
  top: calc(var(--nav-h) + 18px);
  left: 24px;
  display: inline-flex; align-items: center; gap: 8px;
  padding: 11px 18px; border-radius: 100px;
  /* 去掉 backdrop-filter（某些环境下 backdrop-filter + fixed 会让元素整块不渲染）；
     边框用品牌深蓝、阴影加重 → 在淡绿/白底上都跳出来 */
  background: #fff; border: 1px solid var(--brand);
  box-shadow: 0 8px 24px rgba(36, 95, 142, .20);
  font-size: 13.5px; font-weight: 700; color: var(--brand);
  transition: background .2s, color .2s, border-color .2s, box-shadow .2s;
}
.article-back i { font-size: 12px; transition: transform .2s; }
.article-back:hover { background: var(--brand); border-color: var(--brand); color: var(--white); }
.article-back:hover i { transform: translateX(-2px); }

/* 中屏：左边没有留白 → 下移到页头标题带下方 */
@media (max-width: 1499px) {
  .article-back { top: calc(var(--nav-h) + 138px); }
}

/* 窄屏：正文接近满宽 → 左下角圆形 */
@media (max-width: 1023px) {
  .article-back {
    top: auto; bottom: 22px; left: 16px;
    width: 46px; height: 46px; padding: 0; justify-content: center;
    border-radius: 50%;
  }
  .article-back span { display: none; }
}

/* ------------------------------------------------------------------
   右侧「联系我们」浮窗（2026-09-28 第 10 轮新增，全部详情页）
   解决的问题：详情页正文只有 820px，宽屏时右侧留白很大、页面看着"太空"。
   ⚠️ 让位基准不是正文（820px）而是**页面容器（1200px）** ——
   详情页底部还有「相关案例 / 相关阅读」区，它用的是 1200px 容器，
   比正文更靠右。第 10~13 轮按 820 让位，结果浮窗压住了那个区的右卡
   （2026-09-28 第 14 轮发现并修正）。
   反算：要求 浮窗左缘 ≥ 容器右缘 + 24px
        vw − right − 212 ≥ (vw + 1200)/2 + 24
        right ≤ (vw − 1712)/2 = (vw − 1200)/2 − 236
   所以：
   · ≥1712px：卡片式（212px），与 1200 容器恒定留 24px，不压任何区块
   · 1312~1711px：收成贴边竖排胶囊（42px / right 14px），仍带「联系我们」竖排文字
   · ≤1311px：右下角 52px 圆钮（FAB），**不再隐藏** —— 用户要求全站全宽度常驻
   宽度 212、让位参数 236、阈值 1711 / 1311 绑定，改一个必须跟着重算其余。
   ------------------------------------------------------------------ */
.side-contact {
  position: fixed; z-index: 860;
  top: 50%; transform: translateY(-50%);
  right: max(20px, calc((100vw - 1200px) / 2 - 236px));
  width: 212px; padding: 18px 16px 16px;
  background: var(--white); border: 1px solid var(--line);
  border-radius: var(--radius-lg); box-shadow: 0 12px 32px rgba(22, 59, 92, .13);
  text-align: center;
}
.side-contact-t {
  font-size: 13.5px; font-weight: 800; color: var(--ink);
  margin: 0 0 12px; letter-spacing: .06em;
}
.side-contact-qr {
  display: block; width: 100%; aspect-ratio: 1 / 1;
  object-fit: contain; border-radius: var(--radius);
}
.side-contact-cap { font-size: 11.5px; color: var(--ink-500); line-height: 1.5; margin: 10px 0 12px; }
/* 电话 / 邮箱两行（2026-09-28 第 12 轮新增，2026-09-30 换号）。
   卡片 212px、左右内边距各 16px → 可用宽度 180px：
   「173-4913-5111（秦）」约 118px、「zhengjiebgs@zjspace.cn」约 150px，都能单行放下；
   万一以后换更长的邮箱，word-break 让它断行而不是撑破卡片。 */
.side-contact-rows {
  display: flex; flex-direction: column; gap: 7px;
  margin: 0 0 14px; padding-top: 12px; border-top: 1px dashed var(--line);
}
.side-contact-row {
  display: flex; align-items: center; justify-content: center; gap: 6px;
  font-size: 11.5px; font-weight: 600; color: var(--ink-700);
  line-height: 1.4; word-break: break-all;
  transition: color var(--transition);
}
.side-contact-row i { font-size: 11px; color: var(--brand); flex: none; }
.side-contact-row:hover { color: var(--brand); }
.side-contact-btn {
  display: flex; align-items: center; justify-content: center; gap: 6px;
  padding: 10px 14px; border-radius: 100px;
  background: var(--brand); color: var(--white);
  font-size: 13px; font-weight: 700; transition: background .2s;
}
.side-contact-btn:hover { background: var(--brand-dark); }
.side-contact-btn i { font-size: 11px; }
/* 圆形形态的入口（卡片形态时隐藏，避免 <a> 嵌套） */
.side-contact-round { display: none; }

@media (max-width: 1711px) {
  /* 右侧空白栏放不下 212px 卡片 → 收成贴边**竖排胶囊**（图标 + 竖排「联系我们」），
     比纯图标明确得多；42px 宽 + 14px 边距，与正文仍留 ≥34px 空隙 */
  .side-contact {
    right: 14px; width: 42px; padding: 14px 0 16px;
    border-radius: 100px;
    display: flex; flex-direction: column; align-items: center; gap: 8px;
    box-shadow: 0 8px 22px rgba(22, 59, 92, .18);
  }
  .side-contact-t {
    display: block; margin: 0; order: 2;
    writing-mode: vertical-rl; letter-spacing: .16em;
    font-size: 12.5px; font-weight: 800;
  }
  .side-contact-qr, .side-contact-cap, .side-contact-rows, .side-contact-btn { display: none; }
  .side-contact-round {
    display: inline-flex; align-items: center; justify-content: center;
    order: 1; width: 22px; height: 22px; color: var(--brand); font-size: 15px;
  }
  /* ⚠️ 2026-09-30 第 17 轮：整颗胶囊都要能点。
     胶囊态里 <a> 只包了 22px 的耳机图标，竖排「联系我们」是普通 <div> →
     用户点文字毫无反应（"只有上面的可以交互"）。
     又不能把 <a> 套到整个 aside 上（卡片态里还有二维码/电话/邮箱/按钮，
     会形成 <a> 嵌套、非法 HTML）。正解：给 <a> 挂一个铺满容器的透明 ::after 热区。
     定位祖先 = .side-contact（position: fixed），inset:0 正好是它的 padding box；
     border-radius 与胶囊一致，避免把圆角外的"空气"也算进热区。
     卡片态下 .side-contact-round 是 display:none → ::after 不生成，卡片不受影响。 */
  .side-contact-round::after {
    content: ''; position: absolute; inset: 0; border-radius: 100px;
  }
}

/* 2026-09-29 第 16 轮：窄屏不再隐藏，改成**右下角圆形悬浮按钮**，
   做到「全站 · 全宽度 一直悬浮」（用户要求）。
   为什么不继续用贴边胶囊：视口 < 1200 时 .container 变满宽（只剩 24px 内边距），
   贴右边的胶囊必然压住容器内容右缘。
   为什么可以接受圆形按钮压内容：这是全站通行的客服/联系浮标形态（FAB），
   不占用任何版面；且 ≤1023px 时左上角/左下角已被 .article-back 占用，
   右下角是空的，两者不会打架。
   底距 22px，与安全区/手机手势条留出余量。 */
/* 阈值 1311 不是 1263：胶囊占 [vw-56, vw-14]，要它左缘 ≥ 容器盒右缘（(vw+1200)/2）
   必须 vw ≥ 1312（2026-09-30 第 17 轮重算）。
   原来按 1263 切档，1264~1311 这一段胶囊会压进容器 24px 内边距、甚至压到正文右缘。
   1311 及以下一律用右下角圆钮（它是浮标，压内容是这种形态的固有代价）。 */
@media (max-width: 1311px) {
  .side-contact {
    top: auto; bottom: 22px; right: 16px; left: auto;
    transform: none;
    width: 52px; height: 52px; padding: 0;
    border-radius: 50%;
    display: flex; flex-direction: row; align-items: center; justify-content: center;
    gap: 0;
    background: var(--brand); border: 1px solid var(--brand);
    box-shadow: 0 10px 26px rgba(22, 59, 92, .30);
  }
  .side-contact:hover { background: var(--brand-dark); border-color: var(--brand-dark); }
  .side-contact-t, .side-contact-qr, .side-contact-cap, .side-contact-rows, .side-contact-btn { display: none; }
  .side-contact-round {
    display: inline-flex; align-items: center; justify-content: center;
    order: 0; width: auto; height: auto; color: var(--white); font-size: 20px;
  }
}

/* 2026-09-30 第 17 轮：**在联系页隐藏这颗浮窗**。
   原因：contact.html 上的浮窗，两个链接都指回本页的表单（`#inquiryForm`）——
   用户点它 → 平滑下滑 266px，表单顶部落到 y=0，正好钻到 72px 的固定导航底下，
   标题「预约方案咨询」被切掉，看着像"页面莫名其妙往下弹一下"。
   而这一页本身就叫「联系我们」，浮窗在这里是**自指**的、零信息量；
   桌面 1920×1080 下表单和二维码本来就全在首屏，也不需要它带路。
   ⇒ 与主流站点一致：联系页不显示"联系我们"浮标。其余 46 页全部保留。
   （特异性 (0,2,0) 压过下面所有 (0,1,0) 的形态规则，不依赖书写顺序。）
   想让它在本页也出现的话，把这条删掉，并给 `#inquiryForm` 保留 scroll-margin-top。 */
body.page-contact .side-contact { display: none; }

@media (max-width: 768px) {
  .article-wrap { max-width: 100%; }
  .article-lead { font-size: 15px; padding: 16px 18px; margin-bottom: 26px; }
  .article-body h3 { font-size: 18px; margin-top: 26px; }
  .article-body p { font-size: 15px; line-height: 1.95; }
  .article-pager { grid-template-columns: 1fr; gap: 12px; }
  /* 2026-09-29 第 16 轮：手机端原来把「下一篇/下一个案例」改回左对齐，
     用户明确要求它保持右对齐 —— 左右两卡一左一右，方向感才对得上箭头。
     所以这里**不再覆盖** text-align（.pager-item.is-next 全局就是 right）。 */
  /* 详情页手机端：标题 → 标签日期 → 面包屑，竖向堆叠 */
  .article-hero .container { flex-direction: column; align-items: flex-start; gap: 8px; }
  .article-hero .article-head { order: 2; }
  .article-hero .breadcrumb { order: 3; }
}

/* ==========================================================
   子页左侧竖排分类栏（关于我们 4 页 / 智慧环卫 4 页共用）
   2026-09-24：原来是一条横跨整页的白色切换条，改为左侧竖排、
   跟随滚动吸附的分类栏，右侧放正文。
   ========================================================== */
.subpage-inner {
  display: grid; grid-template-columns: 196px minmax(0, 1fr);
  gap: 40px; align-items: start;
  max-width: var(--max-width); margin: 0 auto; padding: 0 24px;
  padding-top: 6px;
}
/* z-index 必须有：.sub-block.alt 用 100vmax 阴影「出血」铺满整页底色，
   该元素带 clip-path 会生成层叠上下文，DOM 上又排在侧栏之后 —— 不给侧栏提层级的话，
   滚动时交替底色区块会把左侧导航整块盖住（2026-09-28 修） */
/* min-width:0 必须有（2026-10-21 修）：≤1024px 时本栏变成单列 grid 的一项，
   grid 子项默认 min-width:auto = min-content，横向滚动的胶囊导航有 5 项时内容宽约 474px，
   会把整列撑到 475px、页面比视口还宽（手机横向溢出 125px）。
   桌面档轨道是固定 196px，加 min-width:0 对桌面零影响。 */
.subpage-side { position: sticky; top: calc(var(--nav-h) + 22px); z-index: 5; min-width: 0; }
.subpage-nav {
  display: flex; flex-direction: column; gap: 4px; padding: 10px;
  background: var(--white); border: 1px solid var(--line);
  border-radius: var(--radius-lg); box-shadow: var(--shadow-sm);
}
.subpage-nav a {
  display: flex; align-items: center; gap: 10px; padding: 12px 14px;
  border-radius: var(--radius); font-size: 14.5px; font-weight: 600;
  color: var(--ink-700); white-space: nowrap; line-height: 1.4;
  transition: background var(--transition), color var(--transition);
}
.subpage-nav a i { font-size: 14px; color: var(--ink-500); width: 16px; text-align: center; transition: color var(--transition); }
.subpage-nav a:hover { background: var(--canvas); color: var(--brand); }
.subpage-nav a:hover i { color: var(--brand); }
.subpage-nav a.active { background: var(--brand); color: var(--white); }
.subpage-nav a.active i { color: rgba(255, 255, 255, .85); }

.subpage-main { min-width: 0; }
/* 正文区块：原先是整页宽 <section>，现在挪进右栏；
   交替底色用 100vmax 阴影「出血」技巧保持通栏，视觉语言不变 */
.sub-block { padding: 60px 0; }
.sub-block:first-child { padding-top: 30px; }
.sub-block.alt {
  background: var(--canvas);
  box-shadow: 0 0 0 100vmax var(--canvas);
  clip-path: inset(0 -100vmax);
}

/* 列表页首块：页头与内容之间不留大空白（新闻中心的筛选条） */
/* 新闻中心：页头到筛选条的距离必须与「筛选条到卡片」等宽（2026-09-28 第 14 轮）
   实测：上方留白 = .page-hero 的 padding-bottom(18) + 本值 + 4px（副标题行盒的
   半行距，(22.4 − 14) / 2 ≈ 4px）→ 要等于 .filter-bar 的 margin-bottom(36)，
   本值取 36 − 18 − 4 = 14px。改 .filter-bar 的 margin-bottom 时这里要跟着重算。 */
.sec-tight { padding-top: 14px; }

@media (max-width: 1024px) {
  .subpage-inner { grid-template-columns: 1fr; gap: 22px; }
  .subpage-side { position: static; }
  .subpage-nav {
    flex-direction: row; overflow-x: auto; padding: 8px;
    border-radius: 100px; gap: 6px;
    -webkit-overflow-scrolling: touch; scrollbar-width: none;
  }
  .subpage-nav::-webkit-scrollbar { display: none; }
  .subpage-nav a { padding: 8px 15px; font-size: 13.5px; border-radius: 100px; }
  .subpage-nav a i { display: none; }
  .sub-block { padding: 46px 0; }
  .sub-block:first-child { padding-top: 20px; }
}
@media (max-width: 768px) {
  .sub-block { padding: 38px 0; }
  /* 窄屏页头文字底到页头块底还剩约 14px 行盒留白，所以这里要比桌面的 14px 大：
     14 + 14 ≈ 28 才能让「页头 → 筛选条」和「筛选条 → 卡片(36px)」看起来一样 */
  .sec-tight { padding-top: 24px; }
}
