/* ============================================================
   金朵云企业官网 · 生产样式表 site.css
   依赖：tokens.css（须先引入）
   覆盖：基础层 / 布局层 / 通用组件 / 首页区块 / 内页组件 / 响应式
   ============================================================ */

/* ============================================================
   1. 基础层
   ============================================================ */
*, *::before, *::after { margin: 0; padding: 0; box-sizing: border-box; }
html { scroll-behavior: smooth; -webkit-text-size-adjust: 100%; }
body {
    font-family: var(--font-sans);
    font-size: var(--fs-md);
    line-height: 1.75;
    color: var(--ink-900);
    background: var(--bg-white);
    -webkit-font-smoothing: antialiased;
    /* overflow-wrap 可继承：长邮箱 / 长 URL 在窄屏自动断行，
       避免撑出横向滚动条（比 body{overflow-x:hidden} 安全，不会掩盖真实溢出） */
    overflow-wrap: break-word;
}
img, svg, video { display: block; max-width: 100%; }

/* 缺图占位（js/cms-bind.js img() 在 cover_image 为空时输出）：
   品牌浅底渐变 + 标题首字，避免封面区渲染成空白块。
   尺寸跟随父级 .cover（已有 aspect-ratio），后台补传封面后不再出现。 */
.img-ph {
    width: 100%; height: 100%; min-height: 120px;
    display: flex; align-items: center; justify-content: center;
    background: linear-gradient(135deg, var(--brand-50) 0%, var(--brand-100) 100%);
    color: var(--brand-600); font-weight: 700;
    font-size: clamp(30px, 5vw, 48px); line-height: 1;
    user-select: none;
}
a { color: inherit; text-decoration: none; }
ul, ol { list-style: none; }
button, input, select, textarea { font: inherit; color: inherit; }
h1, h2, h3, h4 { line-height: 1.3; font-weight: 700; letter-spacing: -.4px; }
::selection { background: var(--brand-600); color: #fff; }

/* 键盘可达性 */
a:focus-visible, button:focus-visible, input:focus-visible,
select:focus-visible, textarea:focus-visible {
    outline: 2px solid var(--brand-600);
    outline-offset: 3px;
    border-radius: 4px;
}

/* ============================================================
   2. 布局层
   ============================================================ */
.container { max-width: var(--container); margin: 0 auto; padding: 0 var(--sp-5); }
.section { padding: var(--sp-9) 0; }
.section--tight { padding: var(--sp-8) 0; }
.section--gray { background: var(--bg-page); }
.section--dark { background: var(--brand-900); color: #fff; }
.section--tint { background: var(--brand-50); }

.section-head { max-width: 720px; margin-bottom: var(--sp-8); }
.section-head--center { margin-left: auto; margin-right: auto; text-align: center; }
.eyebrow {
    display: inline-flex; align-items: center; gap: 8px;
    font-size: var(--fs-xs); font-weight: 700; letter-spacing: 2.4px;
    text-transform: uppercase; color: var(--brand-600); margin-bottom: var(--sp-4);
}
.eyebrow::before { content: ""; width: 26px; height: 2px; background: currentColor; border-radius: 2px; }
.section--dark .eyebrow { color: var(--brand-300); }
.section-title { font-size: var(--fs-3xl); font-weight: 700; }
.section-title--lg { font-size: var(--fs-4xl); }
.section-sub { margin-top: var(--sp-4); color: var(--ink-600); font-size: var(--fs-md); }
.section--dark .section-sub { color: #B6C4DB; }
.text-center { text-align: center; }

/* ============================================================
   3. 通用组件
   ============================================================ */

/* 按钮 */
.btn {
    display: inline-flex; align-items: center; justify-content: center; gap: 8px;
    padding: 14px 32px; border: none; border-radius: 999px;
    font-size: var(--fs-sm); font-weight: 600; cursor: pointer;
    transition: all var(--dur) var(--ease); white-space: nowrap;
}
.btn svg { width: 16px; height: 16px; flex-shrink: 0; transition: transform var(--dur) var(--ease); }
.btn:hover svg { transform: translateX(3px); }
.btn-primary { background: var(--brand-600); color: #fff; box-shadow: 0 6px 20px rgba(21,88,240,.26); }
.btn-primary:hover { background: var(--brand-700); transform: translateY(-2px); box-shadow: 0 10px 28px rgba(21,88,240,.32); }
.btn-white { background: #fff; color: var(--brand-700); box-shadow: 0 6px 20px rgba(7,27,65,.18); }
.btn-white:hover { transform: translateY(-2px); box-shadow: 0 10px 28px rgba(7,27,65,.24); }
.btn-outline { background: transparent; color: var(--ink-900); border: 1.5px solid var(--line-200); }
.btn-outline:hover { border-color: var(--brand-600); color: var(--brand-600); }
.btn-outline--light { background: transparent; color: #fff; border: 1.5px solid rgba(255,255,255,.42); }
.btn-outline--light:hover { background: rgba(255,255,255,.12); border-color: #fff; }
.btn-sm { padding: 10px 22px; }
.btn-block { width: 100%; }

/* 文字链接 */
.link-arrow {
    display: inline-flex; align-items: center; gap: 6px;
    font-size: var(--fs-sm); font-weight: 600; color: var(--brand-600);
    transition: gap var(--dur) var(--ease);
}
.link-arrow:hover { gap: 11px; }

/* 卡片 */
.card {
    background: var(--bg-white); border: 1px solid var(--line-100);
    border-radius: var(--r-lg); box-shadow: var(--shadow-1);
    transition: transform var(--dur) var(--ease), box-shadow var(--dur) var(--ease), border-color var(--dur);
}
.card:hover { transform: translateY(-6px); box-shadow: var(--shadow-3); border-color: var(--brand-100); }

/* 徽标 */
.badge {
    display: inline-flex; align-items: center; gap: 6px;
    font-size: var(--fs-xs); font-weight: 600; letter-spacing: .5px;
    padding: 5px 12px; border-radius: 999px;
    background: var(--brand-50); color: var(--brand-700); border: 1px solid var(--brand-100);
}
.badge--light { background: rgba(255,255,255,.14); color: #fff; border-color: rgba(255,255,255,.24); }

/* 内页头图 + 面包屑 */
.page-hero {
    position: relative; overflow: hidden;
    background: linear-gradient(135deg, var(--brand-900) 0%, var(--brand-800) 55%, #0B3A8F 100%);
    color: #fff; padding: var(--sp-9) 0 var(--sp-8);
}
.page-hero::after {
    content: ""; position: absolute; right: -140px; top: -140px;
    width: 520px; height: 520px; border-radius: 50%;
    background: radial-gradient(circle, rgba(0,184,230,.28), transparent 66%);
}
.page-hero-inner { position: relative; z-index: 1; }
.page-hero h1 { font-size: var(--fs-3xl); margin-top: var(--sp-4); }
.page-hero p { margin-top: var(--sp-4); color: #B6C4DB; max-width: 640px; }
.breadcrumb {
    display: flex; align-items: center; gap: 8px; flex-wrap: wrap;
    font-size: var(--fs-xs); color: #8FA3C4;
}
.breadcrumb a:hover { color: #fff; }
.breadcrumb span.sep { color: #4E6285; }
.breadcrumb .cur { color: #fff; }
.section--gray + .section, .section + .section { position: relative; }

/* ============================================================
   4. 顶部导航 header.html
   ============================================================ */
.site-header {
    position: fixed; top: 0; left: 0; right: 0; z-index: 200;
    background: rgba(255,255,255,.94);
    backdrop-filter: saturate(180%) blur(14px);
    border-bottom: 1px solid transparent;
    transition: border-color var(--dur) var(--ease), box-shadow var(--dur) var(--ease), background var(--dur);
}
.site-header.is-scrolled { border-bottom-color: var(--line-200); box-shadow: 0 2px 16px rgba(15,23,42,.06); }
.header-inner { height: var(--header-h); display: flex; align-items: center; gap: var(--sp-6); }
.logo { display: flex; align-items: center; gap: 11px; flex-shrink: 0; }
.logo-mark {
    width: 40px; height: 40px; border-radius: 10px; flex-shrink: 0;
    background: linear-gradient(135deg, var(--brand-600), var(--accent-500));
    display: grid; place-items: center; color: #fff;
    font-weight: 700; font-size: 17px; box-shadow: 0 4px 12px rgba(21,88,240,.28);
}
.logo-text { font-size: var(--fs-lg); font-weight: 700; letter-spacing: 1.5px; line-height: 1.1; }
.logo-text small { display: block; font-size: 10px; font-weight: 500; letter-spacing: 2.6px; color: var(--ink-400); line-height: 1.6; }
/* 后台可维护的图片 Logo（data-site-img=brand_logo / brand_logo_footer）。
   默认隐藏，由 cms-bind.js 在拿到有效地址后才显示并隐藏同级文字 Logo；图裂会回落文字 Logo。 */
.logo-img { height: 40px; width: auto; max-width: 220px; object-fit: contain; display: block; }
.footer-brand .logo-img { height: 40px; }
.nav { display: flex; align-items: center; gap: var(--sp-6); margin-left: auto; }
.nav a {
    position: relative; font-size: var(--fs-sm); font-weight: 500;
    color: var(--ink-600); padding: 6px 0; transition: color var(--dur);
    white-space: nowrap;
}
.nav a:hover { color: var(--brand-600); }
.nav a.active { color: var(--brand-600); font-weight: 600; }
.nav a.active::after {
    content: ""; position: absolute; left: 0; right: 0; bottom: 0;
    height: 2px; border-radius: 2px; background: var(--brand-600);
}
/* 页头操作区：服务热线在上、「立即咨询」按钮在下，纵向堆叠。
   横排时约占 235px（电话 122 + 间距 24 + 按钮 89），堆叠后仅约 122px，
   释放出的宽度全部让给 8 项主导航（1200px 容器下导航余量由约 128px 增至约 240px）。
   纵向总高约 48px（热线单行 18 + 间距 3 + 按钮 27），未超出 --header-h（桌面 76px / ≤1024px 68px）。
   注：热线只保留号码一行，不再带「7×24 服务热线」副标题。 */
.header-actions {
    display: flex; flex-direction: column; align-items: flex-end;
    justify-content: center; gap: 3px; flex-shrink: 0;
}
.header-phone {
    display: flex; align-items: center; gap: 6px;
    color: var(--ink-700); white-space: nowrap; transition: color var(--dur);
}
.header-phone:hover { color: var(--brand-600); }
.header-phone svg { width: 15px; height: 15px; color: var(--brand-600); flex-shrink: 0; }
.header-phone b { font-size: var(--fs-sm); font-weight: 700; line-height: 1.2; letter-spacing: .2px; }
/* 堆叠后按钮必须更矮：沿用 .btn-sm 的 10px 内边距时按钮高约 37px，
   加上热线（约 18px）会顶到 68px 页头边缘，故收窄为 6px / 12px 字号 */
.header-actions .btn-sm { padding: 6px 18px; font-size: var(--fs-xs); gap: 6px; }
.nav-toggle {
    display: none; width: 42px; height: 42px; border: 1px solid var(--line-200);
    background: #fff; border-radius: 10px; cursor: pointer;
    place-items: center; margin-left: auto;
}
.nav-toggle span { display: block; width: 18px; height: 2px; background: var(--ink-900); border-radius: 2px; position: relative; }
.nav-toggle span::before, .nav-toggle span::after {
    content: ""; position: absolute; left: 0; width: 18px; height: 2px; background: var(--ink-900); border-radius: 2px;
}
.nav-toggle span::before { top: -6px; } .nav-toggle span::after { top: 6px; }
.nav-drawer {
    position: fixed; inset: var(--header-h) 0 auto 0; z-index: 190;
    background: #fff; border-bottom: 1px solid var(--line-200);
    box-shadow: var(--shadow-2); padding: var(--sp-4) var(--sp-5) var(--sp-6);
    display: none; max-height: calc(100vh - var(--header-h)); overflow-y: auto;
}
.nav-drawer.open { display: block; }
.nav-drawer a {
    display: block; padding: 14px 0; font-size: var(--fs-md); font-weight: 500;
    border-bottom: 1px solid var(--line-100); color: var(--ink-700);
}
.nav-drawer a.active { color: var(--brand-600); font-weight: 600; }
.nav-drawer .btn { margin-top: var(--sp-5); }

/* ============================================================
   5. 首页：首屏 Banner
   ============================================================ */
.hero {
    position: relative; isolation: isolate;
    min-height: min(88vh, 780px); display: flex; align-items: center;
    padding: calc(var(--header-h) + var(--sp-8)) 0 var(--sp-9);
    background: var(--brand-900); color: #fff; overflow: hidden;
}
.hero-bg { position: absolute; inset: 0; z-index: -2; }
.hero-bg img { width: 100%; height: 100%; object-fit: cover; object-position: center 40%; }
.hero::before {
    content: ""; position: absolute; inset: 0; z-index: -1;
    /* 遮罩四段渐变走主题变量（tokens.css 按主题覆盖），换主题时首屏同步换色 */
    background: linear-gradient(100deg, var(--hero-o1) 0%, var(--hero-o2) 42%, var(--hero-o3) 74%, var(--hero-o4) 100%);
}
/* 说明：此处原先另有八套可切换的首屏背景样式，已于 2026-09-28 随后台模块一并下线。
   现首屏背景固定为主题遮罩渐变，随「全局主题配色」联动变化。 */
.hero-inner { max-width: 780px; }
.hero h1 {
    font-size: var(--fs-hero); font-weight: 800; letter-spacing: -1.2px; line-height: 1.22;
    margin-top: var(--sp-5);
}
.hero h1 em { font-style: normal; color: var(--brand-300); }
.hero-desc { margin-top: var(--sp-5); font-size: var(--fs-lg); color: #C8D6EC; max-width: 620px; line-height: 1.7; }
.hero-cta { display: flex; gap: var(--sp-4); margin-top: var(--sp-7); flex-wrap: wrap; }
.hero-note {
    margin-top: var(--sp-6); display: flex; align-items: center; gap: var(--sp-5);
    flex-wrap: wrap; font-size: var(--fs-xs); color: #9FB2D0;
}
.hero-note i { display: inline-flex; align-items: center; gap: 6px; font-style: normal; }
.hero-note i::before { content: ""; width: 5px; height: 5px; border-radius: 50%; background: var(--accent-500); }

/* ============================================================
   6. 首页：企业简介
   ============================================================ */
.intro-grid { display: grid; grid-template-columns: 1.05fr 1fr; gap: var(--sp-8); align-items: center; }
.intro-body p { color: var(--ink-600); margin-top: var(--sp-5); }
.intro-body p strong { color: var(--ink-900); font-weight: 600; }
.intro-facts {
    display: grid; grid-template-columns: repeat(2, 1fr); gap: var(--sp-5);
    margin-top: var(--sp-7); padding-top: var(--sp-6); border-top: 1px solid var(--line-200);
}
.intro-facts .fact b { display: block; font-size: var(--fs-2xl); font-weight: 800; color: var(--brand-700); letter-spacing: -1px; line-height: 1.2; }
.intro-facts .fact b small { font-size: var(--fs-lg); font-weight: 700; }
.intro-facts .fact span { font-size: var(--fs-sm); color: var(--ink-600); }
.intro-visual { position: relative; }
.intro-visual img { border-radius: var(--r-lg); box-shadow: var(--shadow-3); aspect-ratio: 4/3; object-fit: cover; width: 100%; }
.intro-visual::before {
    content: ""; position: absolute; inset: auto -28px -28px 56px; height: 62%;
    background: linear-gradient(135deg, var(--brand-100), var(--accent-100));
    border-radius: var(--r-lg); z-index: -1;
}
.intro-visual .float-card {
    position: absolute; left: -28px; bottom: 32px; background: #fff;
    border-radius: var(--r-md); box-shadow: var(--shadow-3); padding: 16px 22px;
    border-left: 3px solid var(--brand-600);
}
.intro-visual .float-card b { display: block; font-size: var(--fs-lg); color: var(--brand-700); font-weight: 700; }
.intro-visual .float-card span { font-size: var(--fs-xs); color: var(--ink-400); }

/* ============================================================
   7. 首页：核心业务
   ============================================================ */
.biz-grid { display: grid; grid-template-columns: repeat(3, 1fr); gap: var(--sp-5); }
.biz-card { overflow: hidden; display: flex; flex-direction: column; }
.biz-card .cover { aspect-ratio: 16/9; overflow: hidden; position: relative; }
.biz-card .cover img { width: 100%; height: 100%; object-fit: cover; transition: transform .7s var(--ease); }
.biz-card:hover .cover img { transform: scale(1.05); }
.biz-card .cover .tag {
    position: absolute; top: 14px; left: 14px;
    background: rgba(255,255,255,.94); color: var(--brand-700);
    font-size: var(--fs-xs); font-weight: 700; padding: 5px 12px; border-radius: 999px;
}
.biz-card .body { padding: var(--sp-6) var(--sp-6) var(--sp-6); display: flex; flex-direction: column; flex: 1; }
.biz-card h3 { font-size: var(--fs-xl); }
.biz-card .role { font-size: var(--fs-sm); font-weight: 600; color: var(--brand-600); margin-top: 2px; }
.biz-card .desc { font-size: var(--fs-sm); color: var(--ink-600); margin-top: var(--sp-4); flex: 1; }
.biz-card .tags { display: flex; flex-wrap: wrap; gap: 8px; margin-top: var(--sp-4); }
.biz-card .tags span {
    font-size: var(--fs-xs); color: var(--ink-600);
    background: var(--bg-page); border: 1px solid var(--line-100);
    padding: 4px 11px; border-radius: 999px;
}
.biz-card .link-arrow { margin-top: var(--sp-5); }

/* ============================================================
   8. 首页：产品
   ============================================================ */
.product-grid { display: grid; grid-template-columns: repeat(3, 1fr); gap: var(--sp-5); }
.product-card { display: flex; flex-direction: column; overflow: hidden; }
.product-card .cover { aspect-ratio: 16/10; overflow: hidden; background: var(--brand-50); }
.product-card .cover img { width: 100%; height: 100%; object-fit: cover; }
.product-card .body { padding: var(--sp-5) var(--sp-5) var(--sp-6); flex: 1; display: flex; flex-direction: column; }
.product-card h3 { font-size: var(--fs-lg); }
.product-card .desc { font-size: var(--fs-sm); color: var(--ink-600); margin-top: var(--sp-2); flex: 1; }
.product-card ul { margin-top: var(--sp-4); }
.product-card ul li {
    font-size: var(--fs-sm); color: var(--ink-600); position: relative;
    padding: 5px 0 5px 20px;
}
.product-card ul li::before {
    content: ""; position: absolute; left: 0; top: 14px;
    width: 7px; height: 7px; border-radius: 2px; background: var(--brand-500);
}

/* ============================================================
   9. 首页：客户案例
   ============================================================ */
.case-grid { display: grid; grid-template-columns: repeat(3, 1fr); gap: var(--sp-5); }
.case-card { position: relative; border-radius: var(--r-lg); overflow: hidden; display: block; }
.case-card img { aspect-ratio: 4/3; object-fit: cover; width: 100%; transition: transform .8s var(--ease); }
.case-card:hover img { transform: scale(1.06); }
.case-card .mask {
    position: absolute; inset: 0;
    background: linear-gradient(to top, rgba(7,27,65,.92) 8%, rgba(7,27,65,.42) 46%, rgba(7,27,65,.06) 78%);
    display: flex; flex-direction: column; justify-content: flex-end;
    padding: var(--sp-6); color: #fff;
}
.case-card .industry {
    font-size: var(--fs-xs); font-weight: 600; color: var(--brand-300);
    letter-spacing: 1px; margin-bottom: 6px;
}
.case-card h3 { font-size: var(--fs-lg); color: #fff; }
.case-card p { font-size: var(--fs-sm); color: #C8D6EC; margin-top: 6px; }
.case-card .arrow {
    margin-top: var(--sp-4); font-size: var(--fs-xs); font-weight: 600; color: #fff;
    display: inline-flex; align-items: center; gap: 6px; opacity: .9;
}

/* ============================================================
   10. 首页：企业优势（深色带）
   ============================================================ */
.adv-grid { display: grid; grid-template-columns: repeat(3, 1fr); gap: var(--sp-6); }
.adv-item { padding: var(--sp-6); border-radius: var(--r-lg); background: rgba(255,255,255,.05); border: 1px solid rgba(255,255,255,.1); transition: background var(--dur), transform var(--dur) var(--ease); }
.adv-item:hover { background: rgba(255,255,255,.09); transform: translateY(-4px); }
.adv-item .no {
    width: 48px; height: 48px; border-radius: 12px; display: grid; place-items: center;
    background: linear-gradient(135deg, var(--brand-600), var(--accent-500));
    font-weight: 700; font-size: var(--fs-md); color: #fff; margin-bottom: var(--sp-5);
}
.adv-item h3 { font-size: var(--fs-lg); color: #fff; }
.adv-item p { font-size: var(--fs-sm); color: #B6C4DB; margin-top: var(--sp-3); }

/* ============================================================
   11. 首页：Logo 墙
   ============================================================ */
.logo-wall { display: grid; grid-template-columns: repeat(6, 1fr); gap: var(--sp-4); }
.logo-wall .slot {
    aspect-ratio: 5/2; display: grid; place-items: center; overflow: hidden;
    border: 1px dashed var(--line-200); border-radius: var(--r-md);
    background: var(--bg-page); color: var(--ink-400); font-size: var(--fs-xs);
    transition: border-color var(--dur), background var(--dur), color var(--dur);
}
.logo-wall .slot:hover { border-color: var(--brand-300); background: var(--brand-50); color: var(--brand-700); }
/* Logo 兜底：后台素材尺寸/比例不可控，全局 img{max-width:100%} 只挡得住横向溢出，
   纵向会把 5:2 的格子顶高、导致整行错位。这里强制等比缩放居中，任何尺寸都不破版。
   建议素材 400×160px（5:2），见后台「合作伙伴 → Logo」处的提示。 */
.logo-wall .slot img {
    max-width: 72%; max-height: 66%;
    width: auto; height: auto; object-fit: contain;
}
/* 有 Logo 时格子改为实线白底（cms-bind.js 渲染时已内联同样的样式，此处仅为静态态兜底） */
.logo-wall .slot > span { padding: 0 var(--sp-2); text-align: center; }

/* ============================================================
   12. 首页：招聘板块
   ============================================================ */
.recruit-wrap { display: grid; grid-template-columns: .9fr 1.1fr; gap: var(--sp-8); align-items: start; }
.recruit-lit p { color: var(--ink-600); margin-top: var(--sp-4); }
.recruit-points { margin-top: var(--sp-6); display: grid; gap: var(--sp-3); }
.recruit-points li {
    display: flex; gap: 10px; align-items: flex-start;
    font-size: var(--fs-sm); color: var(--ink-600);
}
.recruit-points li::before {
    content: ""; flex-shrink: 0; margin-top: 8px;
    width: 6px; height: 6px; border-radius: 50%; background: var(--brand-500);
}
.job-list { display: grid; gap: var(--sp-3); }
.job-item {
    display: flex; align-items: center; gap: var(--sp-4);
    background: #fff; border: 1px solid var(--line-100); border-radius: var(--r-md);
    padding: var(--sp-5); transition: all var(--dur) var(--ease);
}
.job-item:hover { border-color: var(--brand-300); box-shadow: var(--shadow-2); transform: translateX(4px); }
.job-item .info { flex: 1; min-width: 0; }
.job-item h3 { font-size: var(--fs-md); }
.job-item .meta { display: flex; gap: var(--sp-4); margin-top: 6px; font-size: var(--fs-xs); color: var(--ink-400); flex-wrap: wrap; }
.job-item .meta em { font-style: normal; }
.job-item .go { font-size: var(--fs-xs); font-weight: 600; color: var(--brand-600); white-space: nowrap; }

/* ============================================================
   13. 页脚 footer.html
   ============================================================ */
.site-footer { background: var(--brand-900); color: #B6C4DB; padding-top: var(--sp-9); }
.footer-main { display: grid; grid-template-columns: 1.5fr 1fr 1fr 1.2fr; gap: var(--sp-7); padding-bottom: var(--sp-8); }
.footer-brand .logo-text { color: #fff; }
.footer-brand .desc { font-size: var(--fs-sm); margin-top: var(--sp-5); max-width: 320px; line-height: 1.9; }
.footer-col h4 { color: #fff; font-size: var(--fs-sm); font-weight: 600; margin-bottom: var(--sp-5); letter-spacing: .5px; }
.footer-col li { margin-bottom: 12px; }
.footer-col a { font-size: var(--fs-sm); color: #B6C4DB; transition: color var(--dur); }
.footer-col a:hover { color: #fff; }
.footer-contact li { display: flex; gap: 10px; font-size: var(--fs-sm); margin-bottom: 14px; }
.footer-contact li b { color: #fff; font-weight: 500; flex-shrink: 0; }
.footer-bottom {
    border-top: 1px solid rgba(255,255,255,.1); padding: var(--sp-5) 0;
    display: flex; justify-content: space-between; align-items: center; gap: var(--sp-4);
    flex-wrap: wrap; font-size: var(--fs-xs); color: #7C8DA8;
}
.footer-bottom .links { display: flex; gap: var(--sp-5); flex-wrap: wrap; }
.footer-bottom a:hover { color: #fff; }

/* ============================================================
   14. 内页通用组件（供后续页面复用）
   ============================================================ */
/* 标签筛选 */
.filter-bar { display: flex; gap: 10px; flex-wrap: wrap; margin-bottom: var(--sp-7); }
.filter-bar button {
    padding: 9px 22px; border-radius: 999px; cursor: pointer;
    border: 1px solid var(--line-200); background: #fff;
    font-size: var(--fs-sm); color: var(--ink-600); transition: all var(--dur) var(--ease);
}
.filter-bar button:hover { border-color: var(--brand-300); color: var(--brand-600); }
.filter-bar button.on { background: var(--brand-600); border-color: var(--brand-600); color: #fff; font-weight: 600; }

/* 列表卡片（新闻/案例通用） */
.list-grid { display: grid; grid-template-columns: repeat(3, 1fr); gap: var(--sp-5); }
.list-card { display: flex; flex-direction: column; overflow: hidden; }
.list-card .cover { aspect-ratio: 16/9; overflow: hidden; }
.list-card .cover img { width: 100%; height: 100%; object-fit: cover; transition: transform .7s var(--ease); }
.list-card:hover .cover img { transform: scale(1.05); }
.list-card .body { padding: var(--sp-5); flex: 1; display: flex; flex-direction: column; }
.list-card .meta { display: flex; gap: 12px; font-size: var(--fs-xs); color: var(--ink-400); }
.list-card .meta .cat { color: var(--brand-600); font-weight: 600; }
.list-card h3 { font-size: var(--fs-md); margin-top: var(--sp-3); line-height: 1.6; }
.list-card:hover h3 { color: var(--brand-600); }
.list-card .excerpt {
    font-size: var(--fs-sm); color: var(--ink-600); margin-top: var(--sp-2); flex: 1;
    display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden;
}

/* 分页 */
.pagination { display: flex; justify-content: center; gap: 8px; margin-top: var(--sp-8); }
.pagination a, .pagination span {
    min-width: 42px; height: 42px; padding: 0 14px; border-radius: var(--r-sm);
    display: grid; place-items: center; font-size: var(--fs-sm);
    border: 1px solid var(--line-200); color: var(--ink-600); background: #fff;
    transition: all var(--dur);
}
.pagination a:hover { border-color: var(--brand-600); color: var(--brand-600); }
.pagination .cur { background: var(--brand-600); border-color: var(--brand-600); color: #fff; font-weight: 600; }
.pagination .disabled { color: var(--ink-400); background: var(--bg-page); }

/* 表单 */
.form-card { background: #fff; border: 1px solid var(--line-100); border-radius: var(--r-lg); box-shadow: var(--shadow-2); padding: var(--sp-7); }
.form-row { display: grid; grid-template-columns: 1fr 1fr; gap: var(--sp-4); margin-top: var(--sp-4); }
.form-row.full { grid-template-columns: 1fr; }
.field label { display: block; font-size: var(--fs-xs); font-weight: 600; color: var(--ink-600); margin-bottom: 6px; }
.field label i { color: var(--danger); font-style: normal; }
.field input, .field select, .field textarea {
    width: 100%; padding: 12px 14px; border: 1.5px solid var(--line-200);
    border-radius: var(--r-sm); background: #fff; font-size: var(--fs-sm);
    transition: border-color var(--dur), box-shadow var(--dur); outline: none;
}
.field input:focus, .field select:focus, .field textarea:focus {
    border-color: var(--brand-500); box-shadow: 0 0 0 3px var(--brand-100);
}
.field textarea { resize: vertical; min-height: 96px; }
.captcha-row { display: flex; gap: 12px; }
.captcha-img {
    flex-shrink: 0; width: 110px; height: 46px; border-radius: var(--r-sm);
    border: 1px solid var(--line-200); display: grid; place-items: center;
    font-style: italic; font-weight: 700; letter-spacing: 3px; color: var(--brand-700);
    background: repeating-linear-gradient(45deg, var(--brand-50), var(--brand-50) 6px, var(--brand-100) 6px, var(--brand-100) 12px);
    user-select: none;
}

/* 弹窗（产品/案例/岗位详情） */
.modal {
    position: fixed; inset: 0; z-index: 300; display: none;
    padding: var(--sp-5); overflow-y: auto;
    background: rgba(7,27,65,.62); backdrop-filter: blur(4px);
}
.modal.open { display: flex; align-items: flex-start; justify-content: center; }
.modal-dialog {
    background: #fff; border-radius: var(--r-lg); width: min(760px, 100%);
    margin: auto; box-shadow: var(--shadow-3); animation: modalIn .3s var(--ease);
}
@keyframes modalIn { from { opacity: 0; transform: translateY(16px); } to { opacity: 1; transform: none; } }
.modal-head { display: flex; align-items: flex-start; gap: var(--sp-4); padding: var(--sp-7) var(--sp-7) var(--sp-5); border-bottom: 1px solid var(--line-100); }
.modal-head h3 { font-size: var(--fs-xl); flex: 1; }
.modal-head .sub { font-size: var(--fs-sm); color: var(--ink-600); margin-top: 6px; }
.modal-close {
    width: 36px; height: 36px; border-radius: 10px; border: 1px solid var(--line-200);
    background: #fff; cursor: pointer; font-size: 18px; line-height: 1; color: var(--ink-600);
    flex-shrink: 0; transition: all var(--dur);
}
.modal-close:hover { background: var(--bg-page); color: var(--ink-900); }
.modal-body { padding: var(--sp-6) var(--sp-7) var(--sp-7); color: var(--ink-600); font-size: var(--fs-sm); }
.modal-body h4 { font-size: var(--fs-md); color: var(--ink-900); margin: var(--sp-5) 0 var(--sp-3); }
.modal-body h4:first-child { margin-top: 0; }
.modal-body ul { display: grid; gap: 8px; }
.modal-body ul li { position: relative; padding-left: 18px; }
.modal-body ul li::before { content: ""; position: absolute; left: 0; top: 11px; width: 6px; height: 6px; border-radius: 2px; background: var(--brand-500); }

/* 正文排版（新闻详情/法务页） */
.article { max-width: 780px; margin: 0 auto; }
.article h2 { font-size: var(--fs-xl); margin: var(--sp-7) 0 var(--sp-4); }
.article h3 { font-size: var(--fs-lg); margin: var(--sp-6) 0 var(--sp-3); }
.article p { color: var(--ink-600); margin-bottom: var(--sp-4); line-height: 1.9; }
.article img { border-radius: var(--r-md); margin: var(--sp-5) 0; }
.article blockquote {
    border-left: 3px solid var(--brand-600); background: var(--brand-50);
    padding: var(--sp-4) var(--sp-5); border-radius: 0 var(--r-sm) var(--r-sm) 0; margin: var(--sp-5) 0;
}
.article figcaption { font-size: var(--fs-xs); color: var(--ink-400); text-align: center; margin-top: -8px; }

/* ============================================================
   15. 动效
   ============================================================ */
.reveal { opacity: 0; transform: translateY(26px); transition: opacity .75s var(--ease), transform .75s var(--ease); }
.reveal.in { opacity: 1; transform: none; }
.reveal-d1 { transition-delay: .08s; }
.reveal-d2 { transition-delay: .16s; }
.reveal-d3 { transition-delay: .24s; }
@media (prefers-reduced-motion: reduce) {
    html { scroll-behavior: auto; }
    .reveal { opacity: 1; transform: none; transition: none; }
    * { animation-duration: .01ms !important; }
}

/* ============================================================
   16. 响应式
   ============================================================ */
/* 导航共 8 项（首页/核心业务/产品中心/案例中心/新闻动态/加入我们/关于我们/联系我们），
   比 7 项版本多占约 60px。页头操作区已改为上下堆叠，横向占用由约 235px 降至约 122px，
   故服务热线不必再在 1320px 就隐藏，可一路保留到小屏：
   - 1240px 以下收紧页头栏间距与导航间距（需内容宽 ≥ 约 882px）
   - 1080px 以下再收紧导航间距（需内容宽 ≥ 约 810px，900px 抽屉接管前仍有富余）
   - 900px 以下整体收进抽屉
   - 600px 以下隐藏服务热线，仅留汉堡按钮 */
@media (max-width: 1240px) {
    .header-inner { gap: var(--sp-5); }
    .nav { gap: var(--sp-5); }
}
@media (max-width: 1080px) {
    .nav { gap: var(--sp-4); }
}
@media (max-width: 1024px) {
    :root { --header-h: 68px; }
    .section { padding: var(--sp-8) 0; }
    .section-title { font-size: var(--fs-2xl); }
    .section-title--lg { font-size: var(--fs-3xl); }
    .intro-grid, .recruit-wrap { grid-template-columns: 1fr; gap: var(--sp-7); }
    .intro-visual { max-width: 560px; }
    .biz-grid, .product-grid, .case-grid, .adv-grid { grid-template-columns: 1fr 1fr; }
    .list-grid { grid-template-columns: 1fr 1fr; }
    .logo-wall { grid-template-columns: repeat(3, 1fr); }
    .footer-main { grid-template-columns: 1fr 1fr; }
}
@media (max-width: 900px) {
    .nav, .header-actions .btn { display: none; }
    .nav-toggle { display: grid; }
}
/* 小屏横向空间不足：隐藏服务热线，只留品牌标识 + 汉堡按钮（热线仍可在抽屉与页脚中找到） */
@media (max-width: 600px) {
    .header-actions { display: none; }
}
@media (max-width: 768px) {
    .section { padding: var(--sp-7) 0; }              /* 64px → 48px：减少小屏空滚 */
    .section-head { margin-bottom: var(--sp-6); }      /* 标题与内容间距同步收紧 */
    .hero { min-height: auto; padding: calc(var(--header-h) + var(--sp-7)) 0 var(--sp-8); }
    .hero-desc { font-size: var(--fs-md); }
    .page-hero { padding: var(--sp-8) 0 var(--sp-7); }
    .biz-grid, .product-grid, .case-grid, .adv-grid, .list-grid { grid-template-columns: 1fr; }
    /* Logo 墙不跟其他栅格单列：单颗 Logo 撑满屏幅会很突兀，这里保留两列 */
    .logo-wall { grid-template-columns: repeat(2, 1fr); }
    .intro-facts { grid-template-columns: 1fr 1fr; }
    .form-row { grid-template-columns: 1fr; }
    .job-item { flex-direction: column; align-items: flex-start; }
    .footer-main { grid-template-columns: 1fr; gap: var(--sp-6); }
    .footer-bottom { flex-direction: column; align-items: flex-start; }
    .modal { padding: var(--sp-3); }
    .modal-head, .modal-body { padding-left: var(--sp-5); padding-right: var(--sp-5); }
}
@media (max-width: 480px) {
    .container { padding: 0 var(--sp-4); }             /* 24px → 16px：小屏正文更宽 */
    .intro-facts { grid-template-columns: 1fr; }
    .hero-cta .btn { width: 100%; }
    .btn { padding: 13px 26px; }
    .form-card { padding: var(--sp-5); }
}

/* ============================================================
   全局「在线咨询」浮窗组（footer.html 注入，全站可用，2026-10-10 整体重设计）
   结构：.fc-stack 白色圆角主卡（在线咨询 → QQ → 微信 三项为一个整体、样式统一，
         仅图标用各自品牌色区分；可见项之间自动细分隔线）
         + .fc-top 独立返回顶部小卡（永远在主卡下方，间隔 12px）
   展示范围：site_config widget_consult_page_<板块id>='0' 时由 cms-bind.js 隐藏整组
   位置：site_config widget_consult_pos_side / _top → --fc-top（组中心距顶百分比）+ .is-left（贴左）
   可见性：QQ / 微信未配置时带 hidden 属性（cms-bind 按配置移除），
         分隔线用「相邻可见项」选择器——隐藏项自动退出队列，不产生残线。
   版式：主卡 padding 4px + 项自带 12px 圆角 → 悬停底色是内缩胶囊，
         永不触及主卡圆角，无需任何 corner 补丁；主卡不用 overflow:hidden
         （会裁掉微信二维码弹出层）。
   ============================================================ */
.float-consult-group {
    /* top + translateY(-50%) = 组中心落在 --fc-top 处 */
    position: fixed; right: 18px; top: var(--fc-top, 80%); z-index: 90;
    transform: translateY(-50%);
    display: flex; flex-direction: column; align-items: center; gap: 12px;
}
.float-consult-group.is-left { left: 18px; right: auto; }
/* 主卡：在线咨询 / QQ / 微信一个整体（三项版式完全一致） */
.fc-stack {
    display: flex; flex-direction: column;
    width: 72px; padding: 4px;
    background: #fff; border-radius: 16px;
    border: 1px solid rgba(31, 63, 177, .08);
    box-shadow: 0 10px 30px rgba(15, 34, 67, .16);
}
.fc-item {
    padding: 12px 0 10px; border-radius: 12px;
    display: flex; flex-direction: column; align-items: center; gap: 5px;
    background: none; border: 0; cursor: pointer;
    color: var(--ink-500, #5a6b85); font-size: 12px; font-weight: 600; line-height: 1;
    text-decoration: none;
    transition: background .2s var(--ease), color .2s var(--ease);
    position: relative;
}
.fc-item[hidden] { display: none !important; }
/* 仅「相邻两个可见项」之间画细分隔线（隐藏项自动退出队列） */
.fc-stack > .fc-item:not([hidden]) + .fc-item:not([hidden])::before {
    content: ''; position: absolute; left: 10px; right: 10px; top: 0;
    height: 1px; background: rgba(31, 63, 177, .10);
}
.fc-item svg { width: 22px; height: 22px; }
.fc-primary svg { color: var(--brand-600, #2563eb); }   /* 在线咨询：品牌蓝 */
.fc-qq svg { color: #12b7f5; }                          /* QQ 图标用 QQ 品牌蓝 */
.fc-wechat-btn svg { color: #07c160; }                  /* 微信图标用微信绿 */
.fc-wechat-btn {
    display: flex; flex-direction: column; align-items: center; gap: 5px;
    background: none; border: 0; padding: 0; cursor: pointer;
    font: inherit; font-size: 12px; font-weight: 600; line-height: 1;
    color: inherit;
}
/* 悬停：内缩圆角胶囊（项自带 border-radius + 主卡 padding 4px 内缩），
   三项行为完全一致 */
.fc-item:hover { background: #f2f7ff; }
.fc-item:hover svg { color: var(--brand-600, #2563eb); }
/* 返回顶部：独立小卡，永远在主卡最下方 */
.fc-top {
    width: 72px;
    background: #fff; border-radius: 16px;
    border: 1px solid rgba(31, 63, 177, .08);
    box-shadow: 0 10px 30px rgba(15, 34, 67, .16);
}
.fc-top svg { color: var(--brand-600, #2563eb); }
.fc-top:hover { background: #f2f7ff; color: var(--brand-600, #2563eb); }
/* 微信二维码弹出层：hover（桌面）/ .is-open（点击，触屏）均可触发；贴左时翻到右侧 */
.fc-wechat { position: relative; }
.fc-wechat-pop {
    position: absolute; right: calc(100% + 12px); top: 50%;
    transform: translateY(-50%) scale(.95);
    width: 148px; padding: 10px; background: #fff; border-radius: 10px;
    box-shadow: var(--shadow-3); text-align: center;
    opacity: 0; visibility: hidden; pointer-events: none;
    transition: opacity .2s var(--ease), transform .2s var(--ease), visibility .2s;
}
.fc-wechat-pop img { width: 128px; height: 128px; object-fit: contain; margin: 0 auto; }
.fc-wechat-pop span { display: block; font-size: 12px; color: var(--ink-500); margin-top: 6px; }
.fc-wechat:hover .fc-wechat-pop,
.fc-wechat.is-open .fc-wechat-pop {
    opacity: 1; visibility: visible; pointer-events: auto;
    transform: translateY(-50%) scale(1);
}
.float-consult-group.is-left .fc-wechat-pop { right: auto; left: calc(100% + 12px); }
@media (max-width: 600px) {
    .float-consult-group { right: 12px; }
    .float-consult-group.is-left { left: 12px; right: auto; }
    .fc-stack { width: 64px; padding: 4px; }
    .fc-item { padding: 11px 0 9px; font-size: 12px; }
    .fc-top { width: 64px; }
    .fc-item svg { width: 20px; height: 20px; }
    .fc-wechat-pop { right: calc(100% + 8px); }
}

/* 咨询弹窗表单（自包含样式，不依赖 pages.css 的表单类）。
   高度口径（2026-09-28 用户要求压到原来的约 2/3）：
   · 头部/正文 padding 收紧，标题降一级
   · 姓名与电话、城市与类型两行并排（.consult-grid 双列），textarea/验证码/按钮通栏（.consult-full）
   · 输入框与滑块高度、间距整体收紧；textarea rows=2
   · ≤600px 回落单列（内容优先，不再硬挤双列） */
.consult-dialog { width: min(520px, 100%); }
.consult-dialog .modal-head { padding: 18px 24px 12px; }
.consult-dialog .modal-head h3 { font-size: var(--fs-lg); }
.consult-dialog .modal-head .sub { margin-top: 3px; }
.consult-dialog .modal-body { padding: 16px 24px 20px; }
.consult-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 10px 12px; }
.consult-full { grid-column: 1 / -1; }
.consult-grid label { display: block; margin-bottom: 4px; font-size: var(--fs-sm); font-weight: 600; color: var(--ink-700); }
.consult-grid label em { color: var(--danger); font-style: normal; }
.consult-grid input[type="text"],
.consult-grid input[type="tel"],
.consult-grid select,
.consult-grid textarea {
    width: 100%; padding: 8px 10px;
    border: 1px solid var(--line-200); border-radius: var(--r-sm);
    font-size: var(--fs-sm); font-family: inherit; color: var(--ink-900);
    background: #fff; transition: border-color .2s var(--ease);
}
.consult-grid select { cursor: pointer; }
.consult-grid input:focus, .consult-grid select:focus, .consult-grid textarea:focus {
    outline: none; border-color: var(--brand-600);
    box-shadow: 0 0 0 3px var(--brand-100);
}
.consult-grid textarea { resize: vertical; min-height: 52px; }
.consult-captcha { display: flex; align-items: center; gap: 10px; }
.consult-captcha input { flex: 1; }
.consult-cap-svg {
    width: 112px; height: 36px; flex: none;
    display: flex; align-items: center; justify-content: center;
    border: 1px solid var(--line-200); border-radius: var(--r-sm);
    background: #fff; overflow: hidden;
    font-size: 12px; color: var(--ink-500, #8a94a6);
}
.consult-cap-svg svg { width: 100%; height: 100%; }
.consult-tip { min-height: 18px; margin: 0; font-size: var(--fs-sm); }
.consult-dialog .btn-block { padding-top: 10px; padding-bottom: 10px; }
.consult-alt { margin: 0; text-align: center; font-size: var(--fs-sm); color: var(--ink-600); }
.consult-alt b { color: var(--brand-600); }
@media (max-width: 600px) {
    .consult-grid { grid-template-columns: 1fr; gap: 10px; }
    .consult-dialog .modal-head { padding: 14px 16px 10px; }
    .consult-dialog .modal-body { padding: 14px 16px 16px; }
}
