/* ============================================================
 * 全站布局大气化 + 细节精修层（refine.css v3）
 * ------------------------------------------------------------
 * 设计基准：ec.css（品牌蓝 var(--brand) / --maxw / ec-* 组件体系）
 * 本层职责（只增强，不复写同能力冲突）：
 *   ① 主容器加宽 1180 → 1260，大屏不再显窄
 *   ② 导航舒展 + 折叠断点提前（≤1150 收汉堡），消除挤压
 *   ③ 区块上下留白统一加码，建立呼吸节奏
 *   ④ hero / CTA / 页脚等关键面的大气与细节打磨
 *   ⑤ 表单、卡片、徽章等交互细节（统一品牌蓝体系）
 * 所有写死颜色遵循 var(--brand) 蓝体系，不使用旧青绿色。
 * ============================================================ */

/* ---------- ① 全局变量：全宽流体（v4 取消 1260 限制） ---------- */
:root{
  --maxw:100%;                         /* 宽度交回屏宽；左右留白由下方 clamp 控制 */
  --sh-1:0 2px 10px -4px rgba(15,23,42,.08);
  --sh-2:0 6px 18px -8px rgba(15,23,42,.12), 0 20px 46px -22px rgba(15,23,42,.22);
  --sh-brand:0 12px 28px -12px rgba(47,107,255,.55);
  --r-md:14px; --r-lg:20px;
}
/* 页面级 wrapper 统一「全宽 + 流体留白」——这才是真正的 100% 布局 */
.container,.nav-inner,.ec-foot .wrap,.ticker__inner,.trustbar__inner,
.hero__inner,.why__inner,.guarantee__inner,.cs-hero__inner,.cta__inner{
  max-width:100%;margin-left:auto;margin-right:auto;
  padding-left:clamp(20px,4vw,80px);padding-right:clamp(20px,4vw,80px)
}

/* ---------- ② 导航：菜单间留白加大 + 分档自适应 ----------
   背景：2026-09 新增「小红书运营推广」后一级菜单到 9 项。实测（1440px，中文）
   .nav-links 宽 863px、.nav-cta 自然宽 91px，整条导航只剩几十 px 余量 → 直接加间距必胜不下。
   所以按「可用宽度」分档，而不是只留一种间距：

     中文 / 繁体          英文
     ≥1440  宽松档        ≥1560  宽松档
     1300~1439 紧凑档     1440~1559 紧凑档
     ≤1299  折叠汉堡      ≤1439  折叠汉堡

   ⚠ 英文页为什么整体推迟一档：英文的品牌标语块比中文宽 88px（实测 281 vs 193），
   菜单名（Global Social / Xiaohongshu / Website…）也更长，整条导航比中文多吃约 150px。
   实测英文在 1300px 下即便用紧凑档仍溢出 150px、把 .nav-cta 压到 34px（自然宽 108px），
   按钮文字会溢出边框 —— 所以英文必须更早折叠，不能跟中文共用同一套断点。
   所有断点均由实测「.nav-links 右边界 + 间距 < .nav-cta 左边界」校准，改文案后请重测。 */
.site-nav .nav-inner{height:72px;gap:6px}
.nav-links{gap:8px}
.nav-links a{font-size:var(--fs-14);padding:9px 12px;white-space:nowrap}
.nav-links a:hover,.nav-links a.on{
  background:var(--brand-l);
  box-shadow:inset 0 -2px 0 var(--brand);
}
.brand{margin-right:auto}
.brand__mark{width:40px;height:40px;border-radius:12px;
  box-shadow:inset 0 1px 0 rgba(255,255,255,.35), var(--sh-brand)}
.brand__name{font-size:var(--fs-18)}
.nav-cta{margin-left:8px;font-size:var(--fs-14);padding:10px 16px}
/* 导航「免费咨询」CTA：换醒目橙红渐变 + 对话图标 + 轻微脉冲，从品牌蓝按钮里跳出来 */
.nav-cta--hot{display:inline-flex;align-items:center;gap:6px;background:linear-gradient(135deg,#ff7a18,#ff2d55);color:#fff;border:none;font-weight:800;padding:9px 15px;box-shadow:0 6px 18px -6px rgba(255,45,85,.6);animation:ctaPulse 2.6s ease-in-out infinite}
.nav-cta--hot .nav-cta__ico{width:16px;height:16px;flex:none}
.nav-cta--hot span{white-space:nowrap}
.nav-cta--hot:hover{filter:brightness(1.07);transform:translateY(-1px);color:#fff}
@keyframes ctaPulse{0%,100%{box-shadow:0 6px 18px -6px rgba(255,45,85,.5)}50%{box-shadow:0 9px 26px -4px rgba(255,45,85,.85)}}
@media (prefers-reduced-motion:reduce){.nav-cta--hot{animation:none}}
.lang-switch{margin-left:6px}
/* 语言切换：横排 简/繁/EN → 下拉，省横向空间、视觉更收敛 */
.lang-select{-webkit-appearance:none;appearance:none;font:600 var(--fs-12)/1 system-ui,sans-serif;color:var(--ink);background:#fff url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='10' height='6' viewBox='0 0 10 6'%3E%3Cpath d='M1 1l4 4 4-4' fill='none' stroke='%235a6b82' stroke-width='1.6' stroke-linecap='round'/%3E%3C/svg%3E") no-repeat right 10px center;border:1px solid var(--line);border-radius:9px;padding:7px 26px 7px 11px;cursor:pointer;transition:.15s}
.lang-select:hover{border-color:var(--brand);color:var(--brand-d)}
.lang-select:focus{outline:none;border-color:var(--brand);box-shadow:0 0 0 3px var(--brand-l)}

/* ②-a 汉堡展开态：只写一次，区间取两种语言折叠范围的并集（≤1439）。
   好处：中文/繁体与英文共用同一套下拉样式，不必按语言复制一遍。 */
@media (max-width:1439px){
  .site-nav.nav-open .nav-links{display:flex;position:absolute;top:72px;left:0;right:0;
    background:#fff;flex-direction:column;padding:14px 24px;gap:2px;
    border-bottom:1px solid var(--line);box-shadow:0 24px 40px -24px rgba(15,23,42,.28)}
  .site-nav.nav-open .nav-links a{padding:13px 16px;font-size:var(--fs-15);border-radius:10px}
  .site-nav.nav-open .nav-links a::after,.site-nav.nav-open .nav-links a{box-shadow:none}
}
/* ②-b 折叠触发：中文/繁体 ≤1299，英文 ≤1439 */
@media (max-width:1299px){
  .nav-links{display:none}
  .nav-burger{display:flex}
}
@media (max-width:1439px){
  html[lang="en"] .nav-links{display:none}
  html[lang="en"] .nav-burger{display:flex}
}
/* ②-c 紧凑档：中文/繁体 1300~1439、英文 1440~1559。
   这一档顺带把中文/繁体可能残留的 nav-open 绝对定位复位 —— 否则「先窄屏点开汉堡、
   再拉宽到 1300~1439」会看到一个悬空的下拉菜单（汉堡此时已隐藏，点不掉）。 */
@media (max-width:1439px) and (min-width:1300px){
  html:not([lang="en"]) .nav-links{display:flex;position:static;flex-direction:row;
    padding:0;background:none;border:0;box-shadow:none;gap:0}
  html:not([lang="en"]) .nav-links a{padding:9px 9px;font-size:var(--fs-14);border-radius:9px}
  html:not([lang="en"]) .nav-burger{display:none}
}
@media (max-width:1559px) and (min-width:1440px){
  html[lang="en"] .nav-links{gap:0}
  html[lang="en"] .nav-links a{padding:9px 9px}
}

/* ---------- ③ 区块节奏：留白加码 ---------- */
.ec-sec,.section{padding-block:clamp(72px,8.5vw,124px)}
.ec-sec--gray,.cases,.faq{background:linear-gradient(180deg,#f8fafd 0%,#f2f6fb 55%,#f8fafd 100%)}
.ec-sec-head,.sec-head{margin-bottom:clamp(36px,4.5vw,58px)}
.ec-grid2,.ec-grid3,.ec-grid4,.tracks__grid,.prod__grid,.cases__grid,.pain__grid{column-gap:26px;row-gap:26px}

/* 首页服务卡：四张改五张（GEO / 海外社媒 / 短视频 / 小红书 / 官网，与导航顺序一致）。
   5 张在偶数栅格里必然剩一张孤卡，所以统一用「跨列 + 定点落位」排成
   上 3 下 2（宽屏）/ 上 2 下 2 + 第 5 张居中（中屏），不留左对齐的挂单。
   注意：跨列规则写在非媒体查询里 → 所有更窄的档位都必须显式重置 grid-column，
   否则 span 2 会在单列栅格里撑出隐式第二列，直接造成横向溢出。
   （历史坑：原来 921-1199 与 ≤920 是两条互相打架的块，后者被后文 ≤1024 静默覆盖，
     实际生效是 761-1199 全部 2 列。这里合并成一条真理来源，别再拆开。） */
.prod__grid{grid-template-columns:repeat(6,1fr)}
.prod__grid>*{grid-column:span 2}
.prod__grid>*:nth-child(4){grid-column:2/span 2}
.prod__grid>*:nth-child(5){grid-column:4/span 2}
@media (max-width:1199px){
  .prod__grid{grid-template-columns:repeat(4,1fr)}
  /* 第 4 张必须显式写回 span 2：基础规则里它是 2/span 2（宽屏 6 轨下的定点落位），
     在 4 轨栅格里会把卡顶到第 3 行。两种错误写法都别用 ——
     ① grid-column:auto 会连 span 2 一起清掉，卡缩成单轨（实测 1100 档 234px vs 应有的 493px）；
     ② 干脆不写，则继承 2/span 2，第 4/5 张各占一行、整块错位（实测行距翻倍）。 */
  .prod__grid>*:nth-child(4){grid-column:span 2}
  .prod__grid>*:nth-child(5){grid-column:2/span 2}
}

/* 「新上线」徽标：小红书线用品牌红，与 GEO 的热卡橙徽标区分 */
.prod__badge.prod__badge--new{background:#B02A4C}

/* ---------- ④ 首页深色 Hero 大气化 ---------- */
.hero{padding:88px 0 96px}
.hero__inner{gap:clamp(40px,5vw,80px)}
.hero__title{font-size:clamp(40px,5vw,62px);line-height:1.16;letter-spacing:-1px}
.hero__sub{font-size:var(--fs-18);line-height:1.85;color:#c6d4e6;max-width:560px}
.hero__sub .hl{color:#ffb85c}
.hero__cta{gap:16px;margin-top:34px}
.hero__stats{border-top:1px solid rgba(255,255,255,.12);padding-top:26px;margin-top:44px}
.hero__stats b{font-size:var(--fs-30);color:#fff;font-variant-numeric:tabular-nums}
.hero__stats span{color:#8ba5c2}
/* 首页 Hero 底部向下一区块柔和过渡 */
.hero::after{content:"";position:absolute;left:0;right:0;bottom:0;height:90px;
  background:linear-gradient(180deg,rgba(255,255,255,0),rgba(255,255,255,.06));
  pointer-events:none}
/* Hero 右侧「获客看板」：把空间填实，更像真实后台产品图 */
.hero__card{width:100%}
.mock{padding:18px 18px 16px}
.mock__bar{align-items:center}
.mock__title{margin-left:4px;font-size:var(--fs-13);font-weight:700;color:#cfeffb;letter-spacing:.3px}
.mock__live{margin-left:auto;font-size:var(--fs-11);font-weight:800;letter-spacing:.6px;color:var(--ok);
  background:rgba(34,197,94,.14);border:1px solid rgba(34,197,94,.42);border-radius:999px;padding:2px 9px}
.mock__spark{display:flex;align-items:flex-end;gap:6px;height:74px;margin:2px 0 14px}
.mock__spark i{flex:1;height:var(--h,50%);border-radius:5px 5px 2px 2px;
  background:linear-gradient(180deg,rgba(47,107,255,.95),rgba(30,84,232,.7))}
.mock__foot{border-top:1px solid rgba(255,255,255,.1);padding-top:12px;font-size:var(--fs-13);color:#a9bdd0}
.mock__foot b{color:var(--warm);font-size:var(--fs-19);font-weight:900;margin:0 3px}

/* ---------- 内页 Hero 提气 ---------- */
.ec-hero{padding:96px 0 104px}
.ec-hero .ec-tags{flex-wrap:wrap}
.ec-hero h1,.cs-hero__title{font-size:clamp(34px,4.2vw,54px);line-height:1.18;letter-spacing:-.8px}
.ec-hero .sub,.cs-hero__sub{font-size:var(--fs-18);line-height:1.9;max-width:640px}
.hero-stats{gap:34px}
.hero-stats b{font-size:var(--fs-32);letter-spacing:-.5px}
.ec-actions{gap:16px;margin-top:30px}

/* ---------- ⑤ 卡片 / 组件打磨（品牌蓝体系） ---------- */
.ec-card,.ec-pain,.prod__card,.price__card,.team__card,.cs-card,.dash-card,.quiz__box,.wm__card,.ec-ind,.report__card{
  transition:transform .3s cubic-bezier(.22,1,.36,1),box-shadow .3s,border-color .3s
}
.ec-card:hover,.ec-pain:hover,.prod__card:hover,.price__card:hover,.team__card:hover,
.cs-card:hover,.dash-card:hover,.quiz__box:hover,.wm__card:hover,.ec-ind:hover,.report__card:hover{
  transform:translateY(-5px);box-shadow:var(--sh-2);border-color:#c9d9ff
}
/* 按钮：内高光 + 品牌投影 + 按压反馈 */
.btn{font-weight:800;letter-spacing:.2px;
  transition:transform .22s cubic-bezier(.4,0,.2,1),box-shadow .22s,border-color .22s,background .22s,color .22s}
.btn:active{transform:translateY(0) scale(.97)}
.btn--primary,.btn--brand{box-shadow:inset 0 1px 0 rgba(255,255,255,.28),var(--sh-brand)}
.btn--ghost:hover{transform:translateY(-2px);box-shadow:var(--sh-2)}
/* 表单：品牌 focus 光环 */
.field input,.field textarea,.field select{
  border:1.5px solid var(--line);border-radius:var(--r-md);background:#fbfdff;
  transition:border-color .2s,box-shadow .2s,background .2s;width:100%
}
.field input:focus,.field textarea:focus,.field select:focus{
  outline:none;border-color:var(--brand);background:#fff;
  box-shadow:0 0 0 4px rgba(47,107,255,.12)
}
.field input::placeholder,.field textarea::placeholder{color:#9db0c9}
.field.error input,.field.error textarea{border-color:#e5484d}
.field .err-msg{display:block;color:#d33;font-size:var(--fs-13);font-weight:600;margin-top:6px}
/* FAQ 展开态 */
.faq__item,.ec-faq details{transition:border-color .25s,box-shadow .25s}
.faq__item[open],.ec-faq details[open]{border-color:#c9d9ff;box-shadow:var(--sh-1)}
/* CTA 大卡更大气 */
.cta__inner{padding:clamp(36px,4.5vw,60px);gap:clamp(30px,4vw,60px);border-radius:30px;box-shadow:var(--sh-2)}
.cta__text h2{font-size:clamp(28px,3.2vw,40px);line-height:1.25}
.cta__text p{font-size:var(--fs-17);line-height:1.9}
.cta__points li{font-size:var(--fs-16)}
.cta__guarantee span{font-size:var(--fs-14)}
/* 页脚 CTA 面板：品牌蓝光晕网格 */
.ec-foot-cta .inner{
  border-radius:28px;border:1px solid rgba(255,255,255,.14);
  background:
    linear-gradient(rgba(255,255,255,.04) 1px,transparent 1px),
    linear-gradient(90deg,rgba(255,255,255,.04) 1px,transparent 1px),
    radial-gradient(560px 300px at 88% 0%,rgba(47,107,255,.34),transparent 60%),
    linear-gradient(120deg,rgba(47,107,255,.22),rgba(24,158,255,.16));
  background-size:44px 44px,44px 44px,100% 100%,100% 100%;
  box-shadow:0 30px 80px -34px rgba(3,10,26,.85),inset 0 1px 0 rgba(255,255,255,.1);
  padding:clamp(34px,4vw,56px)
}
.ec-foot-badge{
  border:1px solid rgba(255,255,255,.1);border-radius:var(--r-md);
  background:rgba(255,255,255,.045);transition:background .25s,transform .25s
}
.ec-foot-badge:hover{background:rgba(255,255,255,.09);transform:translateY(-2px)}
.ec-foot-badge b{color:#fff}
/* 数字等宽、选区、滚动条、可见焦点 */
.count,.case__num,.hero-stats b,.ec-stat b,.dash-card .v,.report__stat b,.price__amount,.prod__price,.hitbar__count{
  font-variant-numeric:tabular-nums
}
::selection{background:rgba(47,107,255,.2)}
:focus-visible{outline:2px solid var(--brand);outline-offset:2px;border-radius:6px}
::-webkit-scrollbar{width:10px;height:10px}
::-webkit-scrollbar-track{background:#f1f5f9}
::-webkit-scrollbar-thumb{background:#c3d2ea;border-radius:8px;border:2px solid #f1f5f9}
::-webkit-scrollbar-thumb:hover{background:var(--brand-200)}
/* 入场动效过渡更顺滑 */
.rv,.reveal{will-change:transform,opacity}
.rv{transition:opacity .65s ease,transform .65s cubic-bezier(.22,1,.36,1)}

/* ---------- ⑥ 移动端（≤760） 细节 ---------- */
@media (max-width:760px){
  .container{padding:0 18px}
  .site-nav .nav-inner{height:68px;padding:0 16px}
  .ec-sec,.section{padding-block:60px}
  .ec-hero{padding:52px 0 58px}
  .hero{padding:64px 0 76px}
  .hero__title{font-size:var(--fs-34)}
  .hero__sub{font-size:var(--fs-16)}
  .hero-stats{gap:22px}
  .hero-stats b{font-size:var(--fs-24)}
  .cta__inner{padding:30px 22px;border-radius:22px}
  .ec-grid2,.ec-grid3,.ec-grid4{column-gap:14px;row-gap:14px}
  .ec-foot-cta .inner{border-radius:20px}
}

/* ---------- ⑩ 动效降级 ---------- */

@media (prefers-reduced-motion:reduce){
  *,*::before,*::after{transition:none!important;animation-duration:.001s!important;
    animation-iteration-count:1!important;scroll-behavior:auto!important}
  .rv,.reveal{opacity:1;transform:none}
}

/* ============================================================
   ⑧ 全站响应式统一层（refine.css 最后加载，覆盖 ec/home/cases 冲突）
   断点：>1200 桌面 ｜ 1025–1200 小笔电/横屏平板 ｜ 768–1024 平板
         481–767 大手机 ｜ ≤480 小手机
   目标：流体留白 + 干净的平板/手机栅格 + 杜绝横向溢出
   ============================================================ */

/* 容器全宽与流体留白统一在 ① 段定义，此处不再重复（否则会把留白又压回 28px） */

/* 杜绝移动端横向溢出：裁掉 CTA 装饰圆（right:-60px 会顶破视口） */
.ec-cta{overflow:hidden}

/* 平板（≤1024）：多列网格统一收 2 列，保证可读不拥挤 */
@media (max-width:1024px){
  .ec-grid4,.ec-grid3,.ec-stats,.ec-shots,.team__grid,.wm__grid,
  .pain__grid{grid-template-columns:repeat(2,1fr)}
  .ec-tl5{grid-template-columns:repeat(3,1fr)}
  .process__steps{grid-template-columns:repeat(3,1fr)}
  .tracks__grid,.vs-grid{grid-template-columns:1fr}
  .cases__grid{grid-template-columns:1fr 1fr}
  .case__small{grid-column:1 / -1}
  .ec-foot-nav{grid-template-columns:repeat(3,1fr)}
  .ec-foot-nav .ec-foot-brand{grid-column:1 / -1}
  .ec-foot-badges{grid-template-columns:repeat(2,1fr)}
  .ec-foot-cta .inner{flex-direction:column;align-items:flex-start;gap:24px}
  .ec-foot-cta .acts{width:100%}
}

/* 大手机（≤760）：一切栅格单列，间距收紧，表单/汉堡菜单纵向 */
@media (max-width:760px){
  .ec-grid2,.ec-grid3,.ec-grid4,.ec-stats,.ec-shots,.team__grid,
  .wm__grid,.pain__grid,.ec-tl5,.cases__grid{grid-template-columns:1fr}
  /* 单列时必须收回跨列，否则 span 2 会生成隐式列 → 横向溢出 */
  .prod__grid{grid-template-columns:1fr}
  .prod__grid>*:nth-child(n){grid-column:auto}
  .process__steps{grid-template-columns:repeat(2,1fr)}
  .ec-foot-nav{grid-template-columns:1fr 1fr}
  .ec-hero .container,.hero__inner,.why__inner{grid-template-columns:1fr}
  .ec-hero .container{gap:30px}
  .ec-cta{flex-direction:column;align-items:stretch;text-align:left}
  .ec-cta .btn{width:100%;text-align:center}
  .ec-form{grid-template-columns:1fr}
  .hitbar,.ec-hitbar{flex-direction:column;align-items:flex-start}
  .hitbar__links,.ec-hitbar .pfs{margin-left:0}
  .hitbar__count,.ec-hitbar .cnt{margin-left:0;text-align:left}
  .ec-sec-head h2,.ec-head h2{font-size:var(--fs-24)}
  .ec-card h3,.ec-step b{font-size:var(--fs-18)}
  .site-nav.nav-open .nav-links{top:68px;max-height:calc(100vh - 68px);overflow-y:auto;-webkit-overflow-scrolling:touch}
}

/* 小手机（≤480）：进一步收紧，按钮满宽，字号收敛 */
@media (max-width:480px){
  .ec-sec,.section{padding-block:48px}
  .ec-hero{padding:44px 0 50px}
  .hero{padding:54px 0 64px}
  .cs-hero{padding:42px 0 48px}
  .cs-detail-hero{padding:46px 0 48px}
  .btn--lg{padding:14px 22px;font-size:var(--fs-15)}
  .ec-actions,.hero__cta{flex-direction:column}
  .ec-actions .btn,.hero__cta .btn{width:100%;text-align:center}
  .ec-faq summary,.faq__item summary{font-size:var(--fs-14);padding:14px 16px}
  .ec-card,.ec-step,.ec-pain,.prod__card,.cs-card,.cs-fi{padding:22px 18px}
  .brand__name small{display:none}
  .nav-cta{display:none}
  .ec-foot-bar{flex-direction:column;align-items:flex-start;gap:10px}
  .hero-stats b,.cs-hero__stats b{font-size:var(--fs-22)}
  .ticker__inner{font-size:var(--fs-11)}
  .ec-stats{grid-template-columns:1fr 1fr;gap:12px}
  .ec-shots{grid-template-columns:1fr 1fr}
}

/* ============================================================
   ⑨ 视觉精修层 v5 —— 排版节奏 / 对比度 / 单栏 Hero 收口
   目标：全宽之后，让「看起来」也跟上——断行不孤字、浅底不灰字、
         单栏深色 Hero 不再右侧空一大片。
   ============================================================ */

/* 1) 智能断行：消灭「标题最后一行只剩一个字」的孤行 */
.sec-head__title,.ec-sec-head h2,.hero__title,.ec-hero h1,.cs-hero__title,
.cs-detail-hero h1,.prod__card h3,.ec-card h3,.pain__item h3,.cta__text h2{
  text-wrap:balance
}
/* 正文段落用 pretty 断行：避免行尾单字，但不强行拉平 */
.sec-head__desc,.ec-sec-head>p,.ec-hero .sub,.hero__sub,.cs-hero__sub,
.cs-detail-hero p,.prod__card li{text-wrap:pretty}

/* 2) 浅色 Hero 的「平台覆盖」徽章：原样式是按深色底写的（白色半透明），
      放在 .ec-hero 的浅底上几乎看不见 —— 这里按浅底重写一版。 */
.ec-hero-pfs{color:#54688c}
.ec-hero-pfs .pf{
  background:#fff;border:1px solid #dbe6ff;color:var(--brand-d);
  box-shadow:0 1px 2px rgba(15,23,42,.05);transition:border-color .2s,background .2s,transform .2s
}
.ec-hero-pfs .pf:hover{border-color:#b9cdff;background:#f6f9ff;transform:translateY(-1px)}

/* 3) 单栏深色 Hero（联系页 / 案例列表 / 文章与案例详情）：
      文案原本贴左，全宽后在右侧留出巨大空带 —— 收成居中的一栏，视觉立刻端正。 */
.cs-hero .cs-hero__inner,
.cs-detail-hero .cs-hero__inner{
  max-width:940px;text-align:center;
  margin-left:auto;margin-right:auto
}
.cs-hero .cs-hero__sub,
.cs-detail-hero p{margin-left:auto;margin-right:auto}
.cs-detail-hero .cs-kicker,.cs-hero .cs-kicker{margin-left:auto;margin-right:auto}
/* 移动端不必居中受限，恢复左对齐更好读 */
@media (max-width:760px){
  .cs-hero .cs-hero__inner,
  .cs-detail-hero .cs-hero__inner{max-width:100%;text-align:left}
  .cs-hero .cs-hero__sub,.cs-detail-hero p{margin-left:0}
  .cs-detail-hero .cs-kicker,.cs-hero .cs-kicker{margin-left:0}
}

/* 4) 超宽屏：全宽保留，但让卡片栅格间距跟着放大，避免卡片被拉得过散 */
@media (min-width:1600px){
  .prod__grid,.pain__grid,.cases__grid,.ec-grid3,.ec-grid4{column-gap:32px;row-gap:32px}
}

/* 5) ≤920 平板：home.css 把 hero 收成单列，但看板卡仍被 440px 卡住 →
      卡片右边空出半屏。单列时让它铺满整列（宽度已由 .hero__card{width:100%} 接管）。 */
@media (max-width:920px){
  .hero__card{max-width:none}
}

/* 6) 宽屏下案例卡太窄：auto-fill(300px) 在 1440 会挤成 4 列，
      30px 的结果标题被压成 4 行。给桌面一档更大的最小列宽，落成 3 列更舒展。 */
@media (min-width:1200px){
  .cs-cards{grid-template-columns:repeat(auto-fill,minmax(360px,1fr))}
}

/* 7) 区块小标签独占一行。
      kicker 与 h2 都是 inline-block，标题一旦变窄（例如 why 区块里手动 <br> 换行后
      只剩 414px），就会被挤到标签右侧、整块右移约 125px，和下面的列表对不齐。
      把标签改成块级（仍居中/左对齐各自生效），标题就永远另起一行。 */
.sec-head__kicker{display:block;width:fit-content;margin-left:auto;margin-right:auto}
.sec-head--left .sec-head__kicker{margin-left:0}

/* 8) 后台界面示意卡（替代真实后台截图）
      背景：真实后台截图会把账号密码、内部数据、旧品牌名一起公开出去，
            而且改一次品牌就得重拍。这里改成纯 CSS 骨架：
            零位图 → 零版权风险、零额外请求、随时跟着品牌走。
      与 .ec-shots 的栅格/悬停样式复用，不重复定义。 */
.ui-shot{display:flex;flex-direction:column;background:#fff}
.ui-shot__bar{display:flex;align-items:center;gap:5px;padding:8px 10px;
  background:#f4f7fd;border-bottom:1px solid var(--line)}
.ui-shot__bar i{width:7px;height:7px;border-radius:50%;background:#d7e0ee;display:block;flex:none}
.ui-shot__bar span{margin-left:6px;font-size:var(--fs-11);font-weight:800;color:#93a8c4;letter-spacing:.2px;
  overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.ui-shot__body{flex:1;min-height:150px;padding:14px 12px;display:flex;flex-direction:column;gap:8px;
  background:linear-gradient(180deg,#fbfdff,#fff)}
.ui-shot__body i{display:block;height:8px;border-radius:4px;width:var(--w,100%);
  background:linear-gradient(90deg,#e9eff9,#dde7f6)}
.ui-shot__body i.b{height:11px;background:linear-gradient(90deg,var(--brand),var(--brand-l))}
.ui-shot__body i.btn{height:22px;border-radius:7px;margin-top:auto;
  background:linear-gradient(90deg,var(--brand),var(--brand-l));box-shadow:0 6px 14px -8px rgba(47,107,255,.8)}
.ui-shot__body--mid{justify-content:center;gap:9px}
.ui-shot__body .grid2{display:grid;grid-template-columns:1fr 1fr;gap:7px}
.ui-shot__body .tile{border:1px solid var(--line);border-radius:8px;padding:8px 9px;background:#fff;
  display:flex;align-items:baseline;gap:5px}
.ui-shot__body .tile b{font-size:var(--fs-16);font-weight:900;color:var(--brand);line-height:1}
.ui-shot__body .tile span{font-size:var(--fs-10);font-weight:700;color:#9db0c9}
.ui-shot__body .bars{display:flex;align-items:flex-end;gap:5px;height:52px;margin-top:auto}
.ui-shot__body .bars i{flex:1;height:var(--h,50%);border-radius:4px 4px 2px 2px;
  background:linear-gradient(180deg,rgba(47,107,255,.85),rgba(30,84,232,.5))}
.ui-shot__body .row{display:flex;align-items:center;gap:8px;border:1px solid var(--line);
  border-radius:8px;padding:8px 9px;background:#fff}
.ui-shot__body .row em{font-style:normal;font-size:var(--fs-10);font-weight:800;color:var(--brand-d);
  background:var(--brand-l);border-radius:5px;padding:2px 6px;flex:none}
.ui-shot__body .row i{flex:none}
.ui-shot__body .row .dot{width:9px;height:9px;border-radius:50%;flex:none;
  background:var(--brand);margin-left:auto;box-shadow:0 0 0 3px rgba(47,107,255,.14)}


/* ============================================================
   ⑩ 合规披露层 —— 效果示意标注 + 页脚数据/商标声明
   广告法要求：效果类图文不得使人误解为真实凭证；
   商标合规要求：提及第三方平台须声明归属、不暗示背书。
   ============================================================ */

/* 1) 示意模块下方的小字标注（AI 问答示意 / 数据看板示意） */
.ec-demo-note{
  margin:14px auto 0;max-width:760px;text-align:center;
  font-size:var(--fs-12);line-height:1.7;color:var(--ink-soft,#6b7a90);
}
.ec-sec--blue .ec-demo-note,
.hero .ec-demo-note{color:rgba(255,255,255,.72)}

/* 2) 页脚合规声明：整段小字，字号明显低于正文，不与正文抢注意力 */
.ec-foot-legal{
  max-width:var(--maxw,100%);margin:0 auto;
  padding:18px clamp(20px,4vw,80px) 4px;
  border-top:1px solid rgba(148,163,184,.28);
}
.ec-foot-legal p{
  margin:0 0 7px;font-size:var(--fs-12);line-height:1.75;
  color:#8a99ad;font-weight:400;
}
.ec-foot-legal p:last-child{margin-bottom:0}

/* 3) 页脚主底栏与声明之间的呼吸 */
.ec-foot-legal + .ec-foot-bar{margin-top:8px}

@media (max-width:760px){
  .ec-demo-note{margin-top:12px;font-size:var(--fs-12)}
  .ec-foot-legal p{font-size:var(--fs-11);line-height:1.7}
}


/* ============================================================
   ⑪ 营销组件层 —— 首屏微文案 + 「算一笔账」ROI 自算器
   设计原则：结论由访客自己算出（自我说服），页面不预置行业基准数，
             因此也规避了「广告主自造效果数据」的合规风险。
   ============================================================ */

/* 1) 首屏 CTA 下方微文案（深色 Hero 内） */
.hero__micro{
  margin:16px 0 0;max-width:640px;
  font-size:var(--fs-14);line-height:1.75;color:rgba(198,212,230,.8);
}
.hero__micro b{color:#fff}

/* 2) 算一笔账 —— 左输入 / 右结果的整卡布局 */
.roi__box{
  display:grid;grid-template-columns:1.05fr .95fr;gap:0;
  max-width:980px;margin:0 auto;background:#fff;overflow:hidden;
  border:1px solid var(--line);border-radius:18px;
  box-shadow:0 20px 48px -32px rgba(15,23,42,.3);
}
.roi__in{padding:28px 30px;display:flex;flex-direction:column;justify-content:center;gap:16px}
.roi__f{display:flex;flex-direction:column;gap:7px}
.roi__f span{font-size:var(--fs-13);font-weight:700;color:#3d4a5c;line-height:1.5}
.roi__f input{
  width:100%;border:1px solid #d7e0ee;border-radius:10px;background:#fbfdff;
  padding:11px 13px;font-family:inherit;font-size:var(--fs-16);font-weight:800;color:#0e1b2e;
}
.roi__f input:focus{outline:2px solid var(--brand);outline-offset:1px;border-color:transparent;background:#fff}

.roi__out{
  padding:28px 30px;display:flex;flex-direction:column;justify-content:center;
  background:linear-gradient(155deg,var(--brand),var(--brand-d) 58%,var(--brand-d));color:#fff;
}
.roi__cap{font-size:var(--fs-12);font-weight:700;color:rgba(255,255,255,.72)}
.roi__m{font-size:var(--fs-34);font-weight:900;line-height:1.1;letter-spacing:-.01em}
.roi__y{font-size:var(--fs-23);font-weight:900;line-height:1.15;color:#cfe0ff}
.roi__note{
  margin:14px 0 16px;font-size:var(--fs-12);line-height:1.65;
  color:rgba(255,255,255,.66);font-weight:400;
}
.roi__out .btn{align-self:flex-start;background:#fff;color:var(--brand-d);box-shadow:none}
.roi__out .btn:hover{background:#f2f7ff;transform:translateY(-2px)}

@media (max-width:860px){
  .roi__box{grid-template-columns:1fr}
  .roi__in,.roi__out{padding:22px 20px}
  .roi__m{font-size:var(--fs-30)}
  .roi__out .btn{align-self:stretch;text-align:center}
}


/* ============================================================
   ⑫ 窄屏导航防溢出
   问题：英文品牌名（Yi Qihang Promotion）比中文长一倍，≤600px 时
         把语言切换器顶出屏幕 —— 实测英文首页 390px 横向溢出 72px。
   解法：品牌名可收缩 + 省略号截断（单一 flex 子项），语言切换器与
         汉堡按钮 flex:none 禁止收缩，保证三语切换永远点得到。
   ============================================================ */
@media (max-width:600px){
  .site-nav .nav-inner{gap:6px}
  .brand{min-width:0;flex:0 1 auto;overflow:hidden}
  .brand__mark{flex:none;width:34px;height:34px;font-size:var(--fs-16);border-radius:10px}
  .brand__name{
    display:block;min-width:0;font-size:var(--fs-15);line-height:1.2;
    overflow:hidden;text-overflow:ellipsis;white-space:nowrap
  }
  .brand__name small{display:none}
  .lang-switch{flex:none;margin-left:0;gap:3px}
  .lang-switch a{padding:5px 8px;font-size:var(--fs-12);border-radius:8px}
  .nav-burger{flex:none;width:38px;height:38px}
}
@media (max-width:420px){
  .brand__name{font-size:var(--fs-14)}
  .lang-switch a{padding:4px 6px}
  .site-nav .nav-inner{gap:4px}
}

/* ============================================================
   ⑬ 真相比条 / 后台示意条在窄屏的防溢出
   问题：style.css 给 .btn 定了 white-space:nowrap，按钮的 min-content
         就等于整行文案宽度。英文文案（"Want the full hit log? Book a
         walkthrough →" 等）比中文长一倍，在 flex 容器里因 min-width:auto
         拒绝收缩 → 把 .hitbar / .ec-hitbar 撑破容器。
         实测：英文首页 360px 溢出 17px，英文 GEO 页溢出 26px。
   解法：① 让条内的 flex 子项可以收缩到 min-content 以下（min-width:0）
         ② 窄屏放开按钮换行、居中，并让链接组占满整行
   ============================================================ */
@media (max-width:640px){
  .hitbar,.ec-hitbar{min-width:0}
  .hitbar__brand,.hitbar__platforms,.hitbar__links,.hitbar__count,
  .ec-hitbar b.brand,.ec-hitbar .pfs,.ec-hitbar .cnt{
    min-width:0;max-width:100%
  }
  .hitbar__links,.ec-hitbar .cnt{width:100%;margin-left:0}
  .hitbar__links .btn,.ec-hitbar .cnt .btn{
    white-space:normal;text-align:center;line-height:1.35;
    flex:1 1 auto;min-width:0
  }
  .hitbar__count b,.ec-hitbar .cnt b{font-size:var(--fs-23)}
  .hitbar,.ec-hitbar{padding:16px 16px;gap:12px}
  /* 长英文说明允许断行，避免小屏出现横向滚动 */
  .hitbar__brand small,.ec-hitbar b.brand small{overflow-wrap:anywhere}
}
@media (max-width:420px){
  .hitbar__pf,.ec-hitbar .pf{font-size:var(--fs-12);padding:4px 9px}
  .hitbar__brand,.ec-hitbar b.brand{font-size:var(--fs-15)}
  .hitbar__brand small,.ec-hitbar b.brand small{font-size:var(--fs-12)}
}





/* ============================================================================
   ⑭ 视觉节奏与卡片质感（v7 · 2026-09-23）
   ----------------------------------------------------------------------------
   量测发现两个问题：
     1) 交替底色原本用 #f7fafc，与白底 #fff 只差约 3% —— 肉眼读不出来，
        所以 Hero 的深色之后整页视觉上"一片白"，缺少翻页节奏。
     2) #sales-mind → #team → #why-month 连续三段都是纯白，两块内容糊在一起。
   本段：① 底色加深到可感知的一档 ② 补 #team 底色打断连续白
        ③ 卡片加重边界与投影，让它从浅底上"浮"起来
   ============================================================================ */
:root{ --tint:#eef4fb; }

/* ① 交替底色 —— 约 7% 灰阶差，清晰可辨但仍克制 */
.pain,.tracks,.process,.ec-sec--gray{background:var(--tint)}
.cases,.faq{background:linear-gradient(180deg,#f5f9fd 0%,var(--tint) 55%,#f5f9fd 100%)}
#team{background:var(--tint)}   /* 打断 sales-mind / team / why-month 的连续白 */

/* ② 卡片质感 —— 原 border:var(--line)=#E8EDF4 压在浅底上几乎不可见。
      #hot 卡自带品牌色高亮，必须用 :not() 排除，否则会被这里盖掉。 */
.pain__item,.track,.team__card,.wm__card,
.prod__card:not(.prod__card--hot){
  border-color:#d7e3f2;
  box-shadow:0 1px 2px rgba(15,23,42,.05),0 12px 30px -22px rgba(15,23,42,.35);
}
.pain__item:hover,.track:hover,.team__card:hover,.wm__card:hover,
.prod__card:not(.prod__card--hot):hover{
  border-color:#b9cfea;
  box-shadow:0 2px 5px rgba(15,23,42,.06),0 22px 44px -24px rgba(47,107,255,.44);
}
.wm__card{background:var(--tint)}   /* #why-month 是白底 → 卡片刻意用浅底反衬 */

/* ③ 图标统一化 —— emoji 已换成内联 SVG，套统一浅蓝圆角容器 */
.prod__icon,.track__icon,.team__icon{
  display:inline-flex;align-items:center;justify-content:center;
  width:52px;height:52px;border-radius:14px;
  background:linear-gradient(145deg,#e9f1ff,#f6faff);
  border:1px solid #d5e4fb;color:var(--brand);
  font-size:0;                 /* 兜底：万一还有未映射的 emoji，不会撑破容器 */
}
.prod__icon{margin-bottom:14px}
.track__icon{width:58px;height:58px;border-radius:16px;flex:0 0 auto}
.team__icon{width:56px;height:56px;border-radius:50%;margin:0 auto 14px}
.prod__icon svg,.team__icon svg{width:26px;height:26px}
.track__icon svg{width:28px;height:28px}

/* 数组图标渲染处（原来是带内联 font-size 的裸 emoji） */
.ico-30,.ico-22{
  display:flex;align-items:center;justify-content:center;
  background:linear-gradient(145deg,#e9f1ff,#f6faff);
  border:1px solid #d5e4fb;color:var(--brand)
}
.ico-30{width:56px;height:56px;margin:0 auto;border-radius:16px}
.ico-22{width:40px;height:40px;border-radius:11px}

/* ④ 可读性微调：团队卡正文原 13.5px 偏小 */
.team__card p{font-size:var(--fs-15)}

/* 案例分类标签：新增「小红书」分类。
   原有三个变体定义在 cases.css（geo 蓝 / social 青 / video 橙），
   按项目约定新规则一律写在 refine.css（最后加载），不散改基础 CSS。
   颜色取低饱和玫红，与「小红书」的直觉一致，但不使用其品牌标准色值，避免商标性使用。 */
.cs-card__tag--xhs{background:#fdeaf0;color:#B02A4C;border:1px solid #f7cdd9}

/* ============================================================
   ⑮ 反向筛选层 —— 「我们先不接哪几类客户」(#pullback)
   设计意图：把「丑话说前面」当成信任资产来做。
   · 底色用 --tint，与上一屏 why-month(白) 形成浅底反衬；
     下一屏 guarantee 是品牌蓝渐变，三屏连起来 = 白→浅→蓝，节奏分明。
   · 卡片走「左图标 + 右文字」横排（全站其他区块都是居中竖排卡），
     横排读起来像一份「条件清单」，更冷静、更像大人之间的对话。
   · 图标容器刻意用灰蓝（非品牌蓝）：表达「边界 / 门槛」，
     不抢戏、不带攻击性，避免像警告牌。
   ============================================================ */
.pullback{background:var(--tint)}
.pullback__grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:18px}
.pullback__card{
  display:flex;align-items:flex-start;gap:16px;
  background:#fff;border:1px solid #d7e3f2;border-radius:16px;
  padding:22px 24px;
  box-shadow:0 1px 2px rgba(15,23,42,.05),0 12px 30px -22px rgba(15,23,42,.35);
  transition:border-color .2s,box-shadow .2s,transform .2s
}
.pullback__card:hover{
  border-color:#b9cfea;transform:translateY(-2px);
  box-shadow:0 2px 5px rgba(15,23,42,.06),0 22px 44px -24px rgba(47,107,255,.44)
}
.pullback__icon{
  flex:0 0 auto;display:flex;align-items:center;justify-content:center;
  width:46px;height:46px;border-radius:12px;
  background:linear-gradient(145deg,#eef2f7,#f8fafc);
  border:1px solid #dbe3ec;color:#5B6B82
}
.pullback__icon svg{width:22px;height:22px}
.pullback__body{min-width:0}
.pullback__body h4{margin:0 0 7px;font-size:var(--fs-17);line-height:1.4;color:var(--ink)}
.pullback__body p{margin:0;font-size:var(--fs-15);line-height:1.75;color:var(--ink-soft)}
.pullback__foot{
  margin:26px 0 0;padding:16px 24px;text-align:center;
  background:#fff;border:1px dashed #c7d8ee;border-radius:14px;
  font-size:var(--fs-15);color:var(--ink)
}
.pullback__foot strong{color:var(--brand-d);font-weight:800}
@media (max-width:880px){
  .pullback__grid{grid-template-columns:1fr;gap:14px}
  .pullback__card{padding:19px 20px}
  .pullback__icon{width:42px;height:42px;border-radius:11px}
  .pullback__body h4{font-size:var(--fs-16)}
}
@media (max-width:480px){
  .pullback__card{gap:13px;padding:17px 16px}
  .pullback__body h4{font-size:var(--fs-16)}
  .pullback__body p{font-size:var(--fs-14)}
  .pullback__foot{font-size:var(--fs-14);padding:14px 16px}
}


/* ============================================================================
   ⑯ 深色门面统一层 + 动效生命感（v8 · 2026-09-26）
   ----------------------------------------------------------------------------
   全站体检结论（9 页首屏逐张截图核对）：
     1) 「不够吸引」的主因不是缺动效，而是【门面不统一】——首页 hero、cases/contact
        的 .cs-hero 是深色（有 blob 漂移 + 网格流动，有生命感），而 geo/social/video/
        xhs/web 五个业务页的 .ec-hero 是浅色静态的，一进内页气势就塌了。
     2) main.js 早就给网格子元素设了交错变量 --i，但【没有任何 CSS 消费它】，
        交错入场一直是白写的 —— 本段补上，所有网格卡片依次浮入。
     3) 业务页 hero-stats 三种排法（3+1 孤行 / 2x2 / 4 并排），geo/video 的第 4 项
        孤零零掉行 —— 统一成可收缩均分的 flex。
   注意：blobDrift/gridPan/floaty 等 keyframes 定义在 home.css / style.css，
   业务页不加载这两个文件，所以本段自带 keyframes（命名 ec* 前缀避免冲突）。
   ============================================================================ */
:root{ --dark:#0b1f33; --dark-2:#102a43; }   /* cases.css 只在 cases/post/contact 加载，这里补全站定义 */

@keyframes ecBlobDrift{0%,100%{transform:translate(0,0)}50%{transform:translate(26px,-22px)}}
@keyframes ecGridPan{to{background-position:46px 46px}}
@keyframes ecFloat{0%,100%{transform:translateY(0)}50%{transform:translateY(-9px)}}

/* ---------- A. 业务页 Hero 深色化（geo / social / video / xhs / web 共用 .ec-hero） ---------- */
.ec-hero{
  background:
    radial-gradient(1000px 560px at 86% -14%,rgba(47,107,255,.30),transparent 60%),
    radial-gradient(760px 440px at 2% 112%,rgba(47,107,255,.17),transparent 58%),
    linear-gradient(180deg,var(--dark) 0%,var(--dark-2) 100%);
  color:#fff;
  min-height:min(86vh,860px);
  display:flex;align-items:center;
}
/* ::before 原是两个浅色光斑（ec.css），深底下改成了流动网格 */
.ec-hero::before{
  background-image:
    linear-gradient(rgba(255,255,255,.05) 1px,transparent 1px),
    linear-gradient(90deg,rgba(255,255,255,.05) 1px,transparent 1px);
  background-size:46px 46px;
  mask:radial-gradient(circle at 50% 28%,#000,transparent 76%);
  -webkit-mask:radial-gradient(circle at 50% 28%,#000,transparent 76%);
  animation:ecGridPan 20s linear infinite;
}
/* ::after 做缓慢漂移的品牌蓝光斑 —— 与首页/cases 页同一套「呼吸感」 */
.ec-hero::after{
  content:"";position:absolute;width:430px;height:430px;border-radius:50%;
  filter:blur(72px);opacity:.4;background:var(--brand);
  top:-130px;left:-90px;pointer-events:none;
  animation:ecBlobDrift 18s ease-in-out infinite;
}
.ec-hero .container{position:relative;z-index:1;width:100%}

/* 文字 / 徽章 / 统计 全部按深底重写 */
.ec-hero h1{color:#fff}
.ec-hero h1 em{
  background:linear-gradient(120deg,var(--brand-200),#DCE8FF);
  -webkit-background-clip:text;background-clip:text;color:transparent;
}
.ec-hero .sub{color:#c6d4e6}
.ec-hero .sub strong{color:#fff}
.ec-tag{
  background:rgba(255,255,255,.07);border:1px solid rgba(255,255,255,.16);
  color:var(--brand-100);box-shadow:none;
}
.ec-hero .btn--ghost{
  background:transparent;color:#fff;border-color:rgba(255,255,255,.34);
}
.ec-hero .btn--ghost:hover{
  background:rgba(255,255,255,.1);border-color:rgba(255,255,255,.6);
  color:#fff;transform:translateY(-2px);
}
.hero-stats div b{color:var(--brand-200)}
.hero-stats div span{color:#8ba5c2}
/* 统计固定 2×2：业务页 hero 左列只有约 520px，四项按 flex 均分（每项 ≥150px）放不下，
   无论怎么调基准都会 3+1 孤行（geo/video/web 三页实测）。2×2 与 xhs/social 原有排法一致，
   也与 cs-hero__stats 的节奏对齐；字号从 32 收到 26，长标题（「内容 / 投流分开报价」）不再折行。 */
.ec-hero .hero-stats{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:22px 30px}
.ec-hero .hero-stats b{font-size:var(--fs-26)}

/* 平台覆盖徽章：refine ⑨ 按浅底重写过，这里再按深底覆盖（后加载者胜） */
.ec-hero-pfs{color:#8ba5c2}
.ec-hero-pfs .pf{
  background:rgba(255,255,255,.07);border:1px solid rgba(255,255,255,.16);color:var(--brand-100);
  box-shadow:none;transition:border-color .2s,background .2s,transform .2s;
}
.ec-hero-pfs .pf:hover{border-color:rgba(255,255,255,.4);background:rgba(255,255,255,.12);transform:translateY(-1px)}

/* 右侧产品示意卡：白卡浮在深色上，对比即「产品截图」的质感；加极缓浮动 */
.ec-pw{box-shadow:0 34px 80px -34px rgba(3,10,26,.9),0 0 0 1px rgba(255,255,255,.06);
  animation:ecFloat 7.5s ease-in-out infinite}

/* ---------- B. 交错入场：消费 main.js 早已设好的 --i（此前从未生效） ----------
   main.js 的 STAGGER 列表与此处必须保持一致：
   pain__grid / prod__grid / price__grid / tracks__grid / team__grid / wm__grid /
   why-us__grid / cases__grid / process__steps / report__stats */
.reveal :is(.pain__grid,.prod__grid,.price__grid,.tracks__grid,.team__grid,
            .wm__grid,.why-us__grid,.cases__grid,.process__steps,.report__stats)>*{
  opacity:0;transform:translateY(20px);
  transition:opacity .55s ease,transform .62s cubic-bezier(.22,1,.36,1);
  transition-delay:calc(var(--i,0) * 70ms);
}
.reveal.in :is(.pain__grid,.prod__grid,.price__grid,.tracks__grid,.team__grid,
            .wm__grid,.why-us__grid,.cases__grid,.process__steps,.report__stats)>*{
  opacity:1;transform:none;
}

/* ---------- C. contact 页断层修复 ----------
   两个来源：
   1) .cta 的背景来自 style.css 老系统的青绿渐变（var(--sky) 系，违反品牌蓝约定），
      统一成品牌蓝系浅渐变，首页 #contact 同样受益。
   2) .cs-blob--2 是 cases.css 里的 teal（青绿）光斑，压在深色 Hero 底部右侧，
      contact 页 Hero 短、光斑大，形成一条突兀的青绿带 —— 换成品牌蓝。
      contact 页 Hero 与表单区之间的留白也收窄一档，断层感随之消失。 */
.cta{background:linear-gradient(180deg,#f6f9ff 0%,#eef4fb 100%)}
.cta::before,.cta::after{content:none}
.cs-blob--2{background:var(--brand)}
.cs-hero + .cta{padding-top:clamp(40px,5vw,64px)}

/* ---------- D. 移动端收口 ---------- */
@media (max-width:760px){
  /* 满屏感只在桌面成立；移动端内容本就排得满，保持原有紧凑节奏 */
  .ec-hero{min-height:0;padding:56px 0 60px}
  .ec-hero::after{width:300px;height:300px;filter:blur(56px);opacity:.34;top:-90px;left:-70px}
  .ec-pw{animation:none}          /* 小屏不浮动，省电也避免与滚动冲突 */
  .ec-hero .hero-stats{gap:16px 18px}
  .ec-hero .btn--ghost{width:100%;justify-content:center}
}

/* ---------- F. 轮播关键词防断行 ----------
   .rotator 轮换的词长短不一（「AI智能推广」5 字 vs 「GEO 生成式引擎优化」10 字），
   词内部一旦换行，切换瞬间会出现两行高亮跳成一行，很扎眼。词本身不允许断行，
   整段 reflow 仍有但只有一行高度变化，观感稳定得多。 */
.rotator{white-space:nowrap}

/* ---------- E. 动效降级（并入既有 ⑩ 段的口径） ---------- */
@media (prefers-reduced-motion:reduce){
  .ec-hero::after,.ec-hero::before,.ec-pw{animation:none}
  .reveal :is(.pain__grid,.prod__grid,.price__grid,.tracks__grid,.team__grid,
              .wm__grid,.why-us__grid,.cases__grid,.process__steps,.report__stats)>*{
    opacity:1;transform:none;transition:none;
  }
}


/* ============================================================================
   ⑰ 霓虹科技层（v9 · 2026-09-26）
   ----------------------------------------------------------------------------
   上轮反馈：「还不够漂亮，动态感、科技感、炫动感没有，布局死板没个性化」。
   本轮在深色门面（⑯）之上叠加科技感动效，全部零位图（渐变/transform/animation）：

     1) 透视网格地面 —— 深色 Hero 底部铺一块 perspective 倾斜的流动网格，
        AI 平台官网的经典科技元素（纯 CSS 伪元素，不加 HTML）。
     2) 极光层 —— conic-gradient 大光团 + 慢速旋转，首页 ::before、业务页 ::after。
     3) 流光标题 —— h1 em 背景位移动画（首页 home.css 本有 titleShimmer，
        业务页/cs-hero 在这里补齐同款）。
     4) 鼠标光斑 —— Hero 背景第一层 radial 跟随 --mx/--my（main.js ⑰ 注入）。
     5) Ghost 大数字 —— 每个区块标题背后一对 counter 自动编号的巨型半透明数字，
        打破「白底标题列表」的死板。
     6) 卡片光束扫过 —— hover 时一道斜光从左扫到右（::before，这些卡片原本都空着）。
     7) 斜切色块 —— 全宽色块（ec-sec--blue / ec-race）顶部 clip-path 斜切，
        打断全站矩形节奏。
     8) 数字辉光 + ticker 桌面跑马灯（JS 重组后）。
   ============================================================================ */
@keyframes ecAuroraSpin{to{transform:rotate(360deg)}}
@keyframes ecShine{to{background-position:220% center}}
@keyframes ecTicker{to{transform:translateX(-50%)}}

/* ---------- 1) 透视网格地面 + 2) 极光 + 4) 鼠标光斑（业务页 .ec-hero） ---------- */
.ec-hero{--mx:50%;--my:34%}
.ec-hero{
  background:
    radial-gradient(560px circle at var(--mx) var(--my),rgba(126,170,255,.14),transparent 62%),
    radial-gradient(1000px 560px at 86% -14%,rgba(47,107,255,.30),transparent 60%),
    radial-gradient(760px 440px at 2% 112%,rgba(47,107,255,.17),transparent 58%),
    linear-gradient(180deg,var(--dark) 0%,var(--dark-2) 100%);
}
/* ::before 从平面网格升级为透视地面（rotateX 让网格向后倒），宽度外溢避免边缘露馅 */
.ec-hero::before{
  left:-14%;right:-14%;top:auto;bottom:-4%;height:56%;
  background-image:
    linear-gradient(rgba(130,175,255,.20) 1px,transparent 1px),
    linear-gradient(90deg,rgba(130,175,255,.20) 1px,transparent 1px);
  background-size:46px 46px;
  transform:perspective(660px) rotateX(63deg);
  transform-origin:50% 100%;
  -webkit-mask-image:linear-gradient(180deg,transparent 0,#000 44%);
  mask-image:linear-gradient(180deg,transparent 0,#000 44%);
  animation:ecGridPan 18s linear infinite;
}
/* ::after 从漂移光斑升级为旋转极光团（conic 蓝紫光弧） */
.ec-hero::after{
  width:600px;height:600px;left:-190px;top:-250px;border-radius:50%;
  filter:blur(54px);opacity:.65;
  background:conic-gradient(from 0deg,transparent 0 28%,rgba(47,107,255,.42) 44%,rgba(139,92,246,.30) 58%,rgba(47,107,255,.30) 68%,transparent 80% 100%);
  animation:ecAuroraSpin 26s linear infinite;
}

/* 首页 hero：::before 做顶部旋转极光（.hero::after 已有白色过渡层，不动） */
.hero{--mx:50%;--my:30%}
.hero::before{
  content:"";position:absolute;width:66vw;height:66vw;min-width:700px;min-height:700px;
  left:50%;top:-46%;border-radius:50%;
  background:conic-gradient(from 0deg,transparent 0 16%,rgba(47,107,255,.30) 30%,rgba(139,92,246,.20) 44%,rgba(47,107,255,.24) 56%,transparent 68% 100%);
  filter:blur(48px);opacity:.8;pointer-events:none;
  animation:ecAuroraSpin 30s linear infinite;
}
/* 首页 hero 网格同样升级成透视地面 */
.hero .grid{
  top:auto;bottom:-6%;height:56%;left:-14%;right:-14%;width:auto;
  transform:perspective(660px) rotateX(63deg);
  transform-origin:50% 100%;
  -webkit-mask-image:linear-gradient(180deg,transparent 0,#000 44%);
  mask-image:linear-gradient(180deg,transparent 0,#000 44%);
}
/* cases/contact 的 cs-hero 也接鼠标光斑（保留原 teal 顶部光晕层，只加跟随层） */
.cs-hero{
  --mx:50%;--my:34%;
  background:
    radial-gradient(560px circle at var(--mx) var(--my),rgba(126,170,255,.13),transparent 62%),
    radial-gradient(1000px 560px at 85% -12%,rgba(30,84,232,.18),transparent 60%),
    linear-gradient(180deg,var(--dark),var(--dark-2));
}

/* ---------- 3) 流光标题 ----------
   全站业务页 h1 都没有 <em> 高亮词（cs-hero__title 才有），所以业务页直接整标题流光；
   em 规则保留给 cs 系列页（em 的 background 会自然覆盖 h1 的，互不打架）。 */
.ec-hero h1{
  background:linear-gradient(110deg,#F2F7FF 26%,var(--brand-200) 42%,#E2CFFF 50%,var(--brand-200) 58%,#F2F7FF 72%);
  background-size:240% auto;
  -webkit-background-clip:text;background-clip:text;color:transparent;
  animation:ecShine 6.5s linear infinite;
}
.ec-hero h1 em,.cs-hero__title em,.cs-detail-hero h1 em{
  background:linear-gradient(110deg,#EAF2FF 22%,var(--brand-200) 40%,#D9BCFF 52%,var(--brand-200) 64%,#EAF2FF 78%);
  background-size:220% auto;
  -webkit-background-clip:text;background-clip:text;color:transparent;
  animation:ecShine 5.5s linear infinite;
}

/* ---------- 5) Ghost 大数字（counter 自动编号，压在所有区块标题背后） ---------- */
body{counter-reset:ecsec}
.ec-sec-head,.sec-head{position:relative}
.ec-sec-head{counter-increment:ecsec}
.ec-sec-head::before{
  content:"0" counter(ecsec);
  position:absolute;left:50%;top:44%;transform:translate(-50%,-50%);
  font-size:clamp(96px,11vw,168px);font-weight:900;letter-spacing:-.04em;line-height:1;
  color:rgba(47,107,255,.09);pointer-events:none;user-select:none;font-variant-numeric:tabular-nums;
}
.sec-head{counter-increment:ecsec}
.sec-head::before{
  content:"0" counter(ecsec);
  position:absolute;left:50%;top:44%;transform:translate(-50%,-50%);
  font-size:clamp(96px,11vw,168px);font-weight:900;letter-spacing:-.04em;line-height:1;
  color:rgba(47,107,255,.09);pointer-events:none;user-select:none;font-variant-numeric:tabular-nums;
}
.sec-head--left::before,.ec-sec-head--left::before{left:6px;transform:translate(0,-50%)}
@media (max-width:760px){
  .ec-sec-head::before,.sec-head::before{font-size:var(--fs-84);top:38%}
}

/* ---------- 6) 卡片光束扫过（hover 斜光从左到右；这些类原本均无伪元素占用） ---------- */
.ec-card,.prod__card,.cs-card,.track,.team__card,.pain__item,.ec-step,.price__card,.wm__card,.pullback__card{
  position:relative;
}
:is(.ec-card,.prod__card,.cs-card,.track,.team__card,.pain__item,.ec-step,.price__card,.wm__card,.pullback__card)::before{
  content:"";position:absolute;top:-25%;bottom:-25%;left:-75%;width:45%;
  background:linear-gradient(100deg,transparent,rgba(255,255,255,.55),transparent);
  transform:skewX(-18deg);opacity:0;pointer-events:none;
  transition:left .7s cubic-bezier(.4,0,.2,1),opacity .25s ease;
}
:is(.ec-card,.prod__card,.cs-card,.track,.team__card,.pain__item,.ec-step,.price__card,.wm__card,.pullback__card):hover::before{
  left:135%;opacity:1;
}

/* ---------- 7) 斜切色块（只切全宽 section，圆角大卡如 .cta 不能切） ---------- */
.ec-sec--blue{clip-path:polygon(0 clamp(30px,4vw,66px),100% 0,100% 100%,0 100%)}
.ec-race{clip-path:polygon(0 clamp(22px,3vw,50px),100% 0,100% 100%,0 100%)}

/* ---------- 8) 数字辉光 ---------- */
.ec-stat:hover b,.hero-stats div:hover b,.cs-hero__stats div:hover b{
  text-shadow:0 0 26px rgba(120,170,255,.8);transition:text-shadow .3s;
}

/* ---------- 9) ticker 桌面跑马灯（JS 重组结构后生效；移动端保持既有静态精简） ----------
   所有重组样式挂在 .is-marquee 上 —— JS 没跑（无 JS/打印/降级）时维持原静态布局，
   否则 display:block + overflow:hidden 会把静态内容裁没。 */
@media (min-width:761px){
  .ticker{position:relative}
  .ticker__inner.is-marquee{display:block;height:42px;overflow:hidden;padding:0 110px 0 0}
  .ticker__track{display:flex;align-items:center;width:max-content;height:42px;
    animation:ecTicker 26s linear infinite}
  .ticker:hover .ticker__track{animation-play-state:paused}
  /* 组 = 一份完整内容；用「子项右 margin」代替 gap，保证 translateX(-50%) 无缝对齐 */
  .ticker__group{display:flex;align-items:center;flex:none}
  .ticker__group>*{margin-right:14px;flex:none}
  .is-marquee .ticker__cta{
    position:absolute;right:0;top:0;bottom:0;margin-left:0;
    display:flex;align-items:center;padding:0 24px 0 44px;
    background:linear-gradient(90deg,transparent,#0b1f33 40%);
  }
}

/* ---------- 降级：reduced-motion 停掉旋转/跑马灯（全局 .001s 已兜底，这里显式归零） ---------- */
@media (prefers-reduced-motion:reduce){
  .ec-hero::after,.hero::before,.ticker__track{animation:none!important}
}