/* ============================================================
   金朵云企业官网 · 生产样式表 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);
}
/* 注：原页头「服务热线 + 立即咨询」操作区（含其纵向堆叠与热线单行样式）已于2026-10-13
   整块移除—— 服务热线迁至右侧「在线咨询」悬浮模块（.fc-phone，见下方浮窗组），
   「在线咨询」浮窗全站常驻，页头不再重复放按钮，导航区宽度全部让给 9 项菜单。 */
.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; }

/* Logo 墙跑马灯（data-marquee 门控增强）：cms-bind.js 负责把槽位包进 .mq-track 并整组复制一份，
   CSS 端做无缝横滚；无 data-marquee 属性的页面/模板零改动。
   位移公式：单组宽 = 组内 n 颗 + n 个 gap，translateX(-50% - gap/2) 恰好走完一组 → 视觉无缝。 */
.logo-wall.is-marquee {
    display: block; overflow: hidden; padding: var(--sp-2) 0;
    -webkit-mask-image: linear-gradient(90deg, transparent, #000 7%, #000 93%, transparent);
    mask-image: linear-gradient(90deg, transparent, #000 7%, #000 93%, transparent);
}
.logo-wall.is-marquee .mq-track {
    display: flex; gap: 10px; width: max-content;
    animation: logo-marquee 42s linear infinite;
}
.logo-wall.is-marquee:hover .mq-track { animation-play-state: paused; }
.logo-wall.is-marquee .slot { flex: none; width: 200px; height: 78px; aspect-ratio: auto; min-height: 0; }
@keyframes logo-marquee { to { transform: translateX(calc(-50% - 5px)); } }
@media (prefers-reduced-motion: reduce) {
    .logo-wall.is-marquee .mq-track { animation: none; }
}

/* ============================================================
   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 { display: none; }
    .nav-toggle { display: grid; }
}
@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-phone 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); }

/* 服务热线（2026-10-13 由页头迁入）：整项是 tel: 拨号链接，号码气泡仅作展示说明。
   气泡 pointer-events:none —— 既不拦截点击（点哪儿都是拨号），也避免 hover 时
   触发 <a> 的 :hover 抖动导致展开/收起反复。号码文案由 cms-bind.js 写入 <b data-site>，
   取不到有效号码时整项 hidden，气泡永远看不到空壳。 */
.fc-phone { position: relative; }
.fc-phone-pop {
    position: absolute; right: calc(100% + 12px); top: 50%;
    transform: translateY(-50%) scale(.95);
    padding: 9px 14px; background: #fff; border-radius: 10px;
    box-shadow: var(--shadow-3); white-space: nowrap; text-align: center;
    opacity: 0; visibility: hidden; pointer-events: none;
    transition: opacity .2s var(--ease), transform .2s var(--ease), visibility .2s;
}
.fc-phone-pop b {
    display: block; font-size: 15px; font-weight: 700; line-height: 1.25;
    color: var(--ink-900, #1f2937); letter-spacing: .3px;
}
.fc-phone-pop i {
    display: block; font-style: normal; font-size: 12px;
    color: var(--ink-500, #5a6b85); margin-top: 4px;
}
.fc-phone:hover .fc-phone-pop,
.fc-phone:focus-visible .fc-phone-pop {
    opacity: 1; visibility: visible;
    transform: translateY(-50%) scale(1);
}
/* 键盘可达：焦点环与其它 .fc-item 一致（内缩胶囊） */
.fc-phone:focus-visible { outline: 2px solid var(--brand-600, #2563eb); outline-offset: -2px; border-radius: 12px; }
.float-consult-group.is-left .fc-phone-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); }
    .fc-phone-pop { right: calc(100% + 8px); padding: 8px 12px; }
    .fc-phone-pop b { font-size: 14px; }
    .float-consult-group.is-left .fc-phone-pop { left: calc(100% + 8px); right: auto; }
}

/* 咨询弹窗表单（自包含样式，不依赖 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; }
}

/* ============================================================
   Nova Glass 覆盖层（浅色 AI 科技风 · 首页强动效）
   基于 default 底座；变量契约见本模板 tokens.css。
   注释内禁止出现星号紧跟斜杠（防提前闭合吞规则）。
   ============================================================ */

/* ---- 动画注册：conic 旋转描边角度 ---- */
@property --ng-angle { syntax: '<angle>'; initial-value: 0deg; inherits: false; }

/* ==================== 1. 全页氛围 ==================== */

/* 全页极光光晕：两团大光斑缓慢漂移（常驻） */
body::before {
    content: ""; position: fixed; inset: -20%; z-index: -1; pointer-events: none;
    background:
        radial-gradient(42% 34% at 18% 12%, var(--hero-o1), transparent 70%),
        radial-gradient(38% 30% at 82% 22%, var(--hero-o2), transparent 70%),
        radial-gradient(46% 36% at 68% 86%, var(--hero-o3), transparent 70%);
    animation: ngAurora 26s ease-in-out infinite alternate;
}
@keyframes ngAurora {
    0%   { transform: translate3d(0, 0, 0) scale(1); }
    50%  { transform: translate3d(-2.5%, 2%, 0) scale(1.06); }
    100% { transform: translate3d(2.5%, -2%, 0) scale(1.03); }
}

/* 阅读进度条：支持 scroll-timeline 的浏览器渐变细线（渐进增强） */
@supports (animation-timeline: scroll()) {
    body::after {
        content: ""; position: fixed; top: 0; left: 0; right: 0; height: 3px; z-index: 999;
        background: var(--ng-grad); transform-origin: 0 50%; transform: scaleX(0);
        animation: ngProgress linear both;
        animation-timeline: scroll();
    }
    @keyframes ngProgress { to { transform: scaleX(1); } }
}

::selection { background: var(--brand-100); color: var(--brand-800); }

/* ==================== 2. 玻璃导航 ==================== */

.site-header {
    background: rgba(255, 255, 255, 0.72);
    backdrop-filter: blur(18px) saturate(160%);
    -webkit-backdrop-filter: blur(18px) saturate(160%);
    border-bottom: 1px solid rgba(255, 255, 255, 0.6);
}
.site-header.is-scrolled { box-shadow: 0 8px 32px rgba(79, 70, 229, 0.10); }
.logo-mark {
    background: var(--ng-grad); color: #fff;
    box-shadow: 0 6px 16px var(--ng-ring);
    border-radius: 12px;
}
.nav a { border-radius: 999px; transition: color var(--dur), background var(--dur), transform var(--dur) var(--ease); }
.nav a:hover, .nav a.on { color: var(--brand-600); background: var(--brand-50); }
.nav a.on { font-weight: 600; }

/* ==================== 3. 按钮系统（胶囊 + 渐变 + 扫光） ==================== */

.btn { border-radius: 999px; position: relative; overflow: hidden; }
.btn-primary {
    background: var(--ng-grad); background-size: 170% 100%;
    box-shadow: 0 10px 28px var(--ng-ring);
}
.btn-primary:hover {
    background-position: 100% 50%;
    box-shadow: 0 16px 40px var(--ng-ring);
}
.btn-primary, .btn-white {
    background: var(--ng-grad); background-size: 170% 100%; color: #fff;
    box-shadow: 0 10px 28px var(--ng-ring);
}
.btn-white:hover { background-position: 100% 50%; box-shadow: 0 16px 40px var(--ng-ring); color: #fff; }
.btn-outline, .btn-outline--light {
    background: var(--ng-glass-strong); color: var(--ink-900);
    border: 1px solid rgba(255, 255, 255, 0.9);
    backdrop-filter: blur(12px); -webkit-backdrop-filter: blur(12px);
    box-shadow: 0 8px 24px rgba(15, 23, 42, 0.08);
}
.btn-outline:hover, .btn-outline--light:hover {
    border-color: var(--brand-300); color: var(--brand-600);
    transform: translateY(-3px);
}
.btn-primary:hover, .btn-white:hover { transform: translateY(-3px); }
/* 扫光：悬停时一道高光掠过 */
.btn-primary::after, .btn-white::after {
    content: ""; position: absolute; top: 0; bottom: 0; left: -80%; width: 50%;
    background: linear-gradient(105deg, transparent, rgba(255, 255, 255, 0.45), transparent);
    transform: skewX(-20deg); transition: left 0.6s var(--ease);
}
.btn-primary:hover::after, .btn-white:hover::after { left: 130%; }

/* ==================== 4. Hero：深空极光暗色大幕 + 点阵 + 流动标题 ==================== */
/* 2026-10-19 首屏去惨白改版（用户选定方案 A）：回归基础层暗色 hero 意图，
   画布走 --hd-canvas（tokens.css 恒定），光晕/点阵/渐变标题随签名色主题联动。 */

.hero { background: var(--hd-canvas); overflow: hidden; }
.hero-bg img {
    opacity: 0.20; filter: saturate(1.35) blur(2px) brightness(0.9);
    transform: scale(1.06);
}
.hero::before {
    content: ""; position: absolute; inset: 0; z-index: -1;
    background-image: radial-gradient(var(--hd-grid-dot) 1.2px, transparent 1.2px);
    background-size: 26px 26px;
    -webkit-mask-image: radial-gradient(58% 62% at 50% 42%, #000 30%, transparent 100%);
    mask-image: radial-gradient(58% 62% at 50% 42%, #000 30%, transparent 100%);
}
/* 光球一号（大，左上）：hero-bg 之后最上层的柔光 */
.hero::after {
    content: ""; position: absolute; z-index: -1; left: 8%; top: 12%;
    width: 420px; height: 420px; border-radius: 50%;
    background: radial-gradient(circle, var(--hd-glow-a), transparent 68%);
    filter: blur(10px);
    animation: ngFloat 14s ease-in-out infinite;
}
@keyframes ngFloat {
    0%, 100% { transform: translate(0, 0) scale(1); }
    50%      { transform: translate(46px, -28px) scale(1.12); }
}
/* 光球二号（小，右下）：由覆盖页插入的装饰节点承载 */
.hero .orb {
    position: absolute; z-index: -1; right: 10%; bottom: 6%;
    width: 300px; height: 300px; border-radius: 50%;
    background: radial-gradient(circle, var(--hd-glow-b), transparent 66%);
    filter: blur(8px);
    animation: ngFloat 11s ease-in-out infinite reverse;
    pointer-events: none;
}
.hero-inner { max-width: 860px; margin: 0 auto; text-align: center; }
.hero h1 {
    color: #fff;
    font-weight: 800; letter-spacing: -0.02em; line-height: 1.12;
    font-size: clamp(40px, 6vw, 74px);
}
.hero h1 em {
    font-style: normal;
    background: var(--hd-em-grad); background-size: 220% 100%;
    -webkit-background-clip: text; background-clip: text; color: transparent;
    animation: gradFlow 7s ease-in-out infinite;
}
@keyframes gradFlow {
    0%, 100% { background-position: 0% 50%; }
    50%      { background-position: 100% 50%; }
}
.hero-desc { color: var(--hd-sub); margin-left: auto; margin-right: auto; }
.hero-cta { justify-content: center; }
.hero-note { justify-content: center; }
.hero-note i {
    background: rgba(255, 255, 255, 0.08); border: 1px solid rgba(255, 255, 255, 0.22);
    border-radius: 999px; color: var(--hd-note);
}
/* 首屏五级入场（页面加载即播，spring 曲线） */
.hero .badge, .hero h1, .hero-desc, .hero-cta, .hero-note {
    animation: ngRise 0.85s cubic-bezier(0.22, 1, 0.36, 1) both;
}
.hero .badge { animation-delay: 0.05s; }
.hero h1 { animation-delay: 0.13s; }
.hero-desc { animation-delay: 0.21s; }
.hero-cta { animation-delay: 0.29s; }
.hero-note { animation-delay: 0.37s; }
@keyframes ngRise {
    from { opacity: 0; transform: translateY(28px); }
    to   { opacity: 1; transform: none; }
}
/* 徽章玻璃化（暗底） + 呼吸光点 */
.hero .badge {
    display: inline-flex; align-items: center; gap: 8px;
    padding: 8px 18px; border-radius: 999px;
    background: rgba(255, 255, 255, 0.10); border: 1px solid rgba(255, 255, 255, 0.22);
    backdrop-filter: blur(12px); -webkit-backdrop-filter: blur(12px);
    box-shadow: 0 8px 24px rgba(0, 0, 0, 0.28);
    color: var(--brand-300); font-weight: 500;
}
.hero .badge::before {
    content: ""; width: 8px; height: 8px; border-radius: 50%;
    background: var(--brand-600); animation: ngPulse 2.2s infinite;
}
@keyframes ngPulse {
    0%   { box-shadow: 0 0 0 0 var(--ng-ring); }
    70%  { box-shadow: 0 0 0 9px rgba(99, 102, 241, 0); }
    100% { box-shadow: 0 0 0 0 rgba(99, 102, 241, 0); }
}

/* ==================== 5. 段头 / eyebrow 胶囊化 ==================== */

.eyebrow {
    display: inline-flex; align-items: center; gap: 8px;
    padding: 6px 16px; border-radius: 999px;
    background: var(--brand-50); border: 1px solid var(--brand-100);
    color: var(--brand-600); font-size: var(--fs-xs); font-weight: 700; letter-spacing: 0.28em;
}
.eyebrow::before {
    content: ""; width: 6px; height: 6px; border-radius: 50%;
    background: var(--ng-grad);
}
.section--dark .eyebrow { background: rgba(255, 255, 255, 0.08); border-color: rgba(255, 255, 255, 0.16); }
.section-title em {
    font-style: normal; background: var(--ng-grad);
    -webkit-background-clip: text; background-clip: text; color: transparent;
}

/* ==================== 6. 统计带（intro-facts 玻璃格） ==================== */

.intro-facts { gap: var(--sp-4); }
.intro-facts .fact {
    background: var(--ng-glass); border: 1px solid rgba(255, 255, 255, 0.8);
    border-radius: var(--r-md); padding: var(--sp-5) var(--sp-4);
    box-shadow: 0 10px 30px rgba(79, 70, 229, 0.07);
    transition: transform 0.45s cubic-bezier(0.22, 1, 0.36, 1), box-shadow 0.45s;
}
.intro-facts .fact:hover { transform: translateY(-6px); box-shadow: 0 22px 48px rgba(79, 70, 229, 0.14); }
.intro-facts .fact b {
    background: var(--ng-grad); -webkit-background-clip: text; background-clip: text; color: transparent;
}
.intro-visual img { border-radius: var(--r-xl); box-shadow: var(--shadow-3); }
.intro-visual .float-card {
    background: var(--ng-glass-strong); backdrop-filter: blur(14px); -webkit-backdrop-filter: blur(14px);
    border: 1px solid rgba(255, 255, 255, 0.9); border-radius: var(--r-md);
    box-shadow: var(--shadow-2);
    animation: ngBob 6s ease-in-out infinite;
}
@keyframes ngBob {
    0%, 100% { transform: translateY(0); }
    50%      { transform: translateY(-10px); }
}

/* ==================== 7. 核心业务（1:1 双卡 + 悬停弹性变宽） ==================== */

/* 悬停扩张：grid 轨道插值 + :has() 感知——hover 哪张卡，该侧轨道 1fr→1.16fr、
   另一侧→0.84fr，卡片平滑变宽挤压邻卡。>2 张业务卡自动换行各占轨道不塌列；
   不支持 :has 的浏览器降级为静态 1:1 等宽（无动画、无破版） */
.biz-grid {
    display: grid; grid-template-columns: 1fr 1fr; gap: 20px;
    transition: grid-template-columns 0.55s cubic-bezier(0.22, 1, 0.36, 1);
}
.biz-grid:has(> .card:nth-child(1):hover) { grid-template-columns: 1.16fr 0.84fr; }
.biz-grid:has(> .card:nth-child(2):hover) { grid-template-columns: 0.84fr 1.16fr; }
.biz-grid .card {
    min-width: 0;
    background: var(--ng-glass); border: 1px solid rgba(255, 255, 255, 0.85);
    border-radius: var(--r-xl); overflow: hidden;
    box-shadow: 0 12px 36px rgba(79, 70, 229, 0.09);
    transition: transform 0.5s cubic-bezier(0.22, 1, 0.36, 1), box-shadow 0.5s;
    position: relative;
}
/* conic 旋转描边（悬停激活） */
.biz-grid .card::after {
    content: ""; position: absolute; inset: 0; border-radius: inherit; padding: 1.5px;
    background: conic-gradient(from var(--ng-angle), transparent 0%, var(--brand-500) 12%, var(--accent-500) 20%, transparent 32%);
    -webkit-mask: linear-gradient(#000 0 0) content-box, linear-gradient(#000 0 0);
    -webkit-mask-composite: xor; mask-composite: exclude;
    opacity: 0; transition: opacity 0.4s; pointer-events: none;
}
.biz-grid .card:hover { transform: translateY(-8px); box-shadow: 0 28px 64px rgba(79, 70, 229, 0.20); }
.biz-grid .card:hover::after { opacity: 1; animation: ngSpin 2.6s linear infinite; }
@keyframes ngSpin { to { --ng-angle: 360deg; } }
.biz-grid .card > .cover { position: relative; overflow: hidden; }
.biz-grid .card > .cover img { transition: transform 0.8s cubic-bezier(0.22, 1, 0.36, 1); }
.biz-grid .card:hover > .cover img { transform: scale(1.06); }
.biz-grid .card .tag {
    position: absolute; top: 16px; left: 16px; z-index: 2;
    padding: 6px 14px; border-radius: 999px;
    background: rgba(255, 255, 255, 0.85); border: 1px solid rgba(255, 255, 255, 0.9);
    backdrop-filter: blur(8px); -webkit-backdrop-filter: blur(8px);
    color: var(--brand-700); font-weight: 600;
}
/* 卡片内部形态：两卡同构——竖排图上文下，样式与 hover 交互完全一致 */
.biz-grid .card { display: flex; flex-direction: column; }
.biz-grid .card > .cover { height: 300px; }
.biz-grid .biz-cta { grid-column: 1 / -1; display: flex; align-items: center; text-align: left !important; background: var(--ng-grad-soft) !important; padding: 22px 32px !important; justify-content: flex-start !important; border: 1px solid rgba(255, 255, 255, 0.9); }
/* biz-cta 真实 DOM：外层 article 内只有一个 div 包裹全部内容——把它变成横排内容层，
   千万不要把它当徽标压缩（midnight e086726 同款教训：先核对 DOM 再写选择器） */
.biz-grid .biz-cta > div { display: flex; align-items: center; flex-wrap: wrap; gap: 10px 20px; width: 100%; text-align: left; }
/* ＋图标：56px 圆角方块 → 46px 渐变徽标（原行内 margin:0 auto 须压掉） */
.biz-grid .biz-cta > div > div:first-child {
    width: 46px !important; height: 46px !important; border-radius: 12px !important;
    background: var(--ng-grad) !important; color: #fff !important;
    margin: 0 !important; flex: none; font-size: 20px !important;
    box-shadow: 0 6px 16px var(--ng-ring);
}
.biz-grid .biz-cta h3 { font-size: var(--fs-lg) !important; margin: 0 !important; }
.biz-grid .biz-cta .desc { flex: 1 1 260px !important; margin: 0 !important; }
.biz-grid .biz-cta .link-arrow { margin: 0 0 0 auto !important; white-space: nowrap; }

/* ==================== 8. 产品（一大两小行卡） ==================== */

.product-grid { display: grid; grid-template-columns: repeat(12, 1fr); gap: 20px; }
.product-grid .card {
    display: flex; flex-direction: row; border-radius: var(--r-xl); overflow: hidden;
    background: var(--ng-glass); border: 1px solid rgba(255, 255, 255, 0.85);
    box-shadow: 0 12px 36px rgba(79, 70, 229, 0.09);
    transition: transform 0.5s cubic-bezier(0.22, 1, 0.36, 1), box-shadow 0.5s;
}
.product-grid .card:hover { transform: translateY(-6px); box-shadow: 0 26px 56px rgba(79, 70, 229, 0.18); }
.product-grid .card > .cover { width: 220px; flex: none; overflow: hidden; }
.product-grid .card > .cover img { transition: transform 0.8s cubic-bezier(0.22, 1, 0.36, 1); }
.product-grid .card:hover > .cover img { transform: scale(1.06); }
.product-grid .card > .body { padding: 26px 30px; }
.product-grid .card ul li::marker { color: var(--brand-500); }
/* 第 4+ 张卡（内页产品多于 3 款时）默认半宽，防止无 span 规则塌成 1 列窄条 */
.product-grid .card { grid-column: span 6; }
.product-grid .card:nth-child(1) { grid-column: span 12; }
/* 内页产品列表（容器带 data-cms 且有分类筛选）：规则 2 列网格。
   筛选会 display:none 隐藏卡片，nth-child 仍按 DOM 全集计算 → Bento 跨度在
   筛选视图下必错位；规则网格对任意可见组合都稳定，筛选页不用 Bento。 */
.product-grid[data-cms] { grid-template-columns: repeat(2, 1fr); }
.product-grid[data-cms] .card,
.product-grid[data-cms] .card:nth-child(1),
.product-grid[data-cms] .card:last-child:nth-child(odd):not(:nth-child(1)) { grid-column: auto; }
.product-grid[data-cms] .card > .cover { width: 240px; }
.product-grid .card:nth-child(2) > .cover, .product-grid .card:nth-child(3) > .cover { width: 220px; }

/* ==================== 9. 案例（分屏聚光舞台） ==================== */

/* 左 62% 舞台 + 右 38% 编号条目；hover 条目 → 舞台 crossfade 切换（:has 感知，纯 CSS） */
.case-showcase {
    display: grid; grid-template-columns: 62fr 38fr; gap: 24px;
    align-items: stretch;
}
/* ---- 左：主舞台 ---- */
.case-showcase .stage {
    position: relative; height: 560px; border-radius: var(--r-xl);
    overflow: hidden; background: #10132B;
    box-shadow: 0 26px 64px rgba(30, 27, 75, 0.22);
}
.case-showcase .slide {
    position: absolute; inset: 0;
    opacity: 0; transform: scale(1.045);
    transition: opacity 0.55s var(--ease), transform 0.9s var(--ease);
    pointer-events: none;
}
.case-showcase .slide img { position: absolute; inset: 0; width: 100%; height: 100%; object-fit: cover; }
.case-showcase .slide .veil {
    position: absolute; inset: 0;
    background: linear-gradient(200deg, rgba(13, 14, 38, 0) 34%, rgba(13, 14, 38, 0.62) 68%, rgba(10, 11, 32, 0.94));
}
.case-showcase .slide .info { position: absolute; left: 34px; right: 34px; bottom: 32px; color: #fff; }
.case-showcase .slide .industry {
    display: inline-flex; padding: 5px 14px; border-radius: 999px;
    background: rgba(255, 255, 255, 0.14); border: 1px solid rgba(255, 255, 255, 0.28);
    backdrop-filter: blur(8px); -webkit-backdrop-filter: blur(8px);
    font-size: 12px; letter-spacing: 0.08em;
    opacity: 0; transform: translateY(16px);
    transition: opacity 0.4s var(--ease) 0.1s, transform 0.4s var(--ease) 0.1s;
}
.case-showcase .slide h3 {
    font-size: 26px; font-weight: 800; line-height: 1.35; margin-top: 14px; color: #fff;
    opacity: 0; transform: translateY(18px);
    transition: opacity 0.45s var(--ease) 0.16s, transform 0.45s var(--ease) 0.16s;
}
.case-showcase .slide .info > p {
    font-size: 14px; line-height: 1.75; color: rgba(255, 255, 255, 0.84);
    margin-top: 10px; max-width: 520px;
    opacity: 0; transform: translateY(18px);
    transition: opacity 0.45s var(--ease) 0.22s, transform 0.45s var(--ease) 0.22s;
}
.case-showcase .slide .go {
    display: inline-flex; align-items: center; gap: 8px; margin-top: 18px;
    padding: 10px 20px; border-radius: 999px;
    background: var(--ng-grad); color: #fff; font-size: 13.5px; font-weight: 600;
    box-shadow: 0 8px 22px var(--ng-ring);
    opacity: 0; transform: translateY(18px);
    transition: opacity 0.45s var(--ease) 0.28s, transform 0.45s var(--ease) 0.28s;
}
/* slide 显隐：默认第一条（.on）；hover 条目时全隐再显对应 slide（防叠加） */
.case-showcase .slide.on,
.case-showcase:has(.case-card:nth-child(1):hover) .slide.s1 {
    opacity: 1; transform: none; pointer-events: auto;
}
/* 默认第一条的浮层文字也要完整点亮 */
.case-showcase .slide.on :is(.industry, h3, .info > p, .go) { opacity: 1; transform: none; }
.case-showcase:has(.case-card:hover) .slide:not(.s1):not(.on),
.case-showcase:has(.case-card:nth-child(2):hover) .slide.s1,
.case-showcase:has(.case-card:nth-child(3):hover) .slide.s1 {
    opacity: 0; transform: scale(1.045); pointer-events: none;
}
.case-showcase:has(.case-card:nth-child(2):hover) .slide.s2 { opacity: 1; transform: none; pointer-events: auto; }
.case-showcase:has(.case-card:nth-child(3):hover) .slide.s3 { opacity: 1; transform: none; pointer-events: auto; }
/* 浮层文字重入场：hover 对应条目时点亮该 slide 的四元素 */
.case-showcase:has(.case-card:nth-child(1):hover) .slide.s1 :is(.industry, h3, .info > p, .go),
.case-showcase:has(.case-card:nth-child(2):hover) .slide.s2 :is(.industry, h3, .info > p, .go),
.case-showcase:has(.case-card:nth-child(3):hover) .slide.s3 :is(.industry, h3, .info > p, .go) {
    opacity: 1; transform: none;
}
/* CASE 徽章编号随 hover 联动（三枚叠放按 opacity 切换） */
.case-showcase .badge {
    position: absolute; top: 24px; right: 28px; z-index: 3;
    font-family: var(--font-mono); font-size: 15px; font-weight: 700; letter-spacing: 0.06em;
    color: rgba(255, 255, 255, 0.92);
    padding: 8px 16px; border-radius: 999px;
    background: rgba(255, 255, 255, 0.10); border: 1px solid rgba(255, 255, 255, 0.22);
    backdrop-filter: blur(10px); -webkit-backdrop-filter: blur(10px);
    transition: opacity 0.4s;
}
.case-showcase .badge.b2, .case-showcase .badge.b3 { opacity: 0; }
.case-showcase:has(.case-card:nth-child(2):hover) .badge.b1,
.case-showcase:has(.case-card:nth-child(3):hover) .badge.b1 { opacity: 0; }
.case-showcase:has(.case-card:nth-child(2):hover) .badge.b2,
.case-showcase:has(.case-card:nth-child(3):hover) .badge.b3 { opacity: 1; }

/* ---- 右：编号条目列表（.case-card 重定义，img/.mask 钩子保留） ---- */
.case-showcase .case-grid { display: flex; flex-direction: column; gap: 14px; }
.case-showcase .case-card {
    position: relative; display: flex; align-items: center; gap: 18px;
    flex: 1; min-height: 0; padding: 20px 22px;
    background: var(--ng-glass); border: 1px solid rgba(255, 255, 255, 0.9);
    border-radius: var(--r-lg); overflow: hidden; color: inherit;
    box-shadow: 0 10px 30px rgba(79, 70, 229, 0.07);
    transition: background 0.4s, box-shadow 0.4s, transform 0.4s var(--ease);
}
.case-showcase .case-card::before {
    content: ""; position: absolute; left: 0; top: 0; bottom: 0; width: 4px;
    background: var(--ng-grad); transform: scaleY(0);
    transition: transform 0.4s var(--ease);
}
.case-showcase .case-card:hover {
    transform: translateX(6px); background: rgba(255, 255, 255, 0.95);
    box-shadow: 0 18px 44px rgba(79, 70, 229, 0.16);
}
.case-showcase .case-card:hover::before { transform: scaleY(1); }
/* 缩略图：覆盖底座 aspect-ratio，固定方圆角 */
.case-showcase .case-card img {
    width: 92px; height: 92px; flex: none; aspect-ratio: auto;
    border-radius: 14px; object-fit: cover;
    box-shadow: 0 8px 20px rgba(30, 27, 75, 0.14);
    transition: transform 0.5s var(--ease);
}
.case-showcase .case-card:hover img { transform: scale(1.05) rotate(-2deg); }
/* 文字区 */
.case-showcase .case-card .meta { flex: 1; min-width: 0; }
.case-showcase .case-card .no {
    font-family: var(--font-mono); font-size: 13px; font-weight: 700;
    color: var(--brand-500); letter-spacing: 0.1em;
}
.case-showcase .case-card .meta .industry {
    display: inline-block; margin-left: 10px; padding: 0;
    background: none; border: 0; backdrop-filter: none; -webkit-backdrop-filter: none;
    font-size: 11.5px; color: var(--ink-600); letter-spacing: 0.06em;
}
.case-showcase .case-card h3 {
    font-size: 16px; font-weight: 700; line-height: 1.45; margin-top: 6px; color: var(--ink-900);
    display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden;
}
/* 箭头圆钮 */
.case-showcase .case-card .go {
    width: 42px; height: 42px; flex: none; border-radius: 50%;
    display: grid; place-items: center;
    background: var(--brand-50); color: var(--brand-600); font-size: 16px;
    transition: background 0.4s, color 0.4s, transform 0.4s var(--ease);
}
.case-showcase .case-card:hover .go {
    background: var(--ng-grad); color: #fff; transform: translateX(3px);
    box-shadow: 0 8px 18px var(--ng-ring);
}
/* 底座浮层 .mask 钩子保留但隐藏（条目形态不展示浮层） */
.case-showcase .case-card .mask { display: none; }

/* ==================== 10. 优势带（深靛渐变 + 玻璃卡） ==================== */

.section--dark {
    background:
        radial-gradient(50% 40% at 15% 10%, rgba(129, 140, 248, 0.25), transparent 70%),
        radial-gradient(40% 36% at 85% 80%, rgba(34, 211, 238, 0.16), transparent 70%),
        linear-gradient(135deg, #1E1B4B 0%, #312E81 100%);
}
.adv-grid { gap: 20px; }
.adv-item {
    background: rgba(255, 255, 255, 0.07); border: 1px solid rgba(255, 255, 255, 0.14);
    border-radius: var(--r-xl);
    backdrop-filter: blur(10px); -webkit-backdrop-filter: blur(10px);
    transition: transform 0.5s cubic-bezier(0.22, 1, 0.36, 1), background 0.4s, box-shadow 0.5s;
}
.adv-item:hover {
    transform: translateY(-8px); background: rgba(255, 255, 255, 0.11);
    box-shadow: 0 24px 56px rgba(0, 0, 0, 0.28);
}
.adv-item .no {
    background: var(--ng-grad); -webkit-background-clip: text; background-clip: text; color: transparent;
    font-weight: 800;
}
.adv-item h3 { position: relative; }
.adv-item h3::after {
    content: ""; position: absolute; left: 0; bottom: -10px; width: 34px; height: 3px;
    border-radius: 3px; background: var(--ng-grad);
    transition: width 0.45s cubic-bezier(0.22, 1, 0.36, 1);
}
.adv-item:hover h3::after { width: 62px; }

/* ==================== 11. Logo 墙 / 招聘 / 浮窗 ==================== */

.logo-wall .slot {
    background: rgba(255, 255, 255, 0.6); border: 1px solid rgba(255, 255, 255, 0.85);
    border-radius: var(--r-md); box-shadow: 0 6px 18px rgba(79, 70, 229, 0.06);
}
.section--tint { background: linear-gradient(180deg, rgba(238, 242, 255, 0.6), rgba(245, 246, 252, 0.2)); }
.job-item {
    background: var(--ng-glass); border: 1px solid rgba(255, 255, 255, 0.85);
    border-radius: var(--r-md); position: relative; overflow: hidden;
    transition: transform 0.4s cubic-bezier(0.22, 1, 0.36, 1), box-shadow 0.4s, padding-left 0.35s;
}
.job-item::before {
    content: ""; position: absolute; left: 0; top: 0; bottom: 0; width: 3px;
    background: var(--ng-grad); transform: scaleY(0);
    transition: transform 0.35s cubic-bezier(0.22, 1, 0.36, 1);
}
.job-item:hover { transform: translateX(4px); box-shadow: 0 14px 36px rgba(79, 70, 229, 0.14); }
.job-item:hover::before { transform: scaleY(1); }
/* 在线咨询不做渐变特化：.fc-primary 回归 .fc-item 统一版式（白底 + 品牌色图标
   + hover 白胶囊，规则见浮窗组基础段），四项观感一致。
   2026-10-18 用户确认删此前渐变主按钮（特化破坏主卡四项统一版式，两轮反馈均因它起）。 */
#consultModal .modal-card, .modal-card { border-radius: var(--r-lg); }

/* ==================== 12. 表单 / 通用卡片玻璃化 ==================== */

.form-card { background: var(--ng-glass-strong); border: 1px solid rgba(255, 255, 255, 0.9); }
.form-card input, .form-card select, .form-card textarea { border-radius: 10px; }
.form-card input:focus, .form-card select:focus, .form-card textarea:focus {
    border-color: var(--brand-500); box-shadow: 0 0 0 4px rgba(99, 102, 241, 0.12);
}

/* ==================== 13. Reveal 弹簧入场 ==================== */

.reveal {
    transition: opacity 0.8s cubic-bezier(0.22, 1, 0.36, 1), transform 0.8s cubic-bezier(0.22, 1, 0.36, 1);
}
.reveal { transform: translateY(30px); }
.reveal.in { transform: none; }

/* ==================== 14. 响应式 ==================== */

@media (max-width: 900px) {
    .biz-grid { grid-template-columns: 1fr; transition: none; }
    /* 案例舞台：单列、舞台固定第一条、条目横向铺开 */
    .case-showcase { grid-template-columns: 1fr; }
    .case-showcase .stage { height: 380px; }
    .case-showcase:has(.case-card:hover) .slide:not(.s1):not(.on),
    .case-showcase:has(.case-card:hover) .slide.s1:not(.on) { opacity: 0; transform: scale(1.045); }
    .case-showcase .slide.on { opacity: 1; transform: none; pointer-events: auto; }
    .case-showcase .slide.on :is(.industry, h3, .info > p, .go) { opacity: 1; transform: none; }
    .case-showcase .badge.b2, .case-showcase .badge.b3 { display: none; }
    .biz-grid:has(> .card:nth-child(1):hover),
    .biz-grid:has(> .card:nth-child(2):hover) { grid-template-columns: 1fr; }   /* 窄屏单列下悬停不再变宽 */
    .biz-grid .card > .cover { height: 220px; }
    .product-grid .card { grid-column: span 12; flex-direction: column; }
    .product-grid .card > .cover { width: 100%; height: 200px; }
    .case-card:first-child { min-height: 280px; }
}
@media (max-width: 640px) {
    .hero::after { left: -20%; }
    .hero .orb { right: -24%; }
    .biz-grid .biz-cta { flex-wrap: wrap; }
    .product-grid .card > .body { padding: 20px; }
    .intro-visual::before { right: 0; bottom: 0; }
    .intro-visual .float-card { left: 12px; }
}
@media (prefers-reduced-motion: reduce) {
    body::before, body::after, .hero::after, .hero .orb, .hero h1 em, .hero .badge::before,
    .intro-visual .float-card, .biz-grid .card::after, .hero .badge, .hero h1, .hero-desc,
    .hero-cta, .hero-note { animation: none !important; }
}
