/* ==========================================================================
   图腾康动 TOTEM MOTION · 首页 V2.2 专属样式（满幅大图 · 科技蓝）
   --------------------------------------------------------------------------
   仅服务 index.html V2；全部 v2- 前缀，与旧 homepage/pages 体系零冲突。
   依赖 style.css 的设计令牌（颜色 / 字体 / 间距 / 缓动）。
   V2.2 变更（2026-11-01 深夜）：
   1. 四大功能区改回满幅大图（手册章节封面原图 1920×1080），Ken Burns 缓推 + 视差
   2. 新增关键词跑马灯（运动即良药 · 四大能力，无缝循环悬停暂停）
   3. 新增滚动顶部进度条（JS 注入 .v2-progress）
   4. 新增 v2-line 滚动行遮罩进场（章节标题逐行升起）
   5. CTA 装饰圆环虚线慢旋转；单元清单胶囊 stagger 进场
   6. NUTRITION 区浅底大图（营养检测合成图，蓝系），深浅交替节奏
   V2.4 变更（2026-11-01 深夜二 · 去重 + 吸顶）：
   7. LAB/RECOVERY 换去重新图（健康驿站 / 激光理疗，与首屏·场景卡零撞图）
   8. 四大功能区吸顶层叠（.v2-zones 包裹 → sticky 堆叠一体模块，
      后卡滚入覆盖前卡，被覆盖卡 JS 缩小 + .v2-zonef__dim 压暗）
   素材来源：images/manual/（2026 产品与系统手册 PPTX 原图提取，无烤字）
   幕序列：1 首屏 / 跑马灯 / 2 数字宣言 / 3 四大功能区 ×4 / 4 场景 / 5 案例 / 6 CTA
   ========================================================================== */

/* ---------- 幕通用 ---------- */
.v2-act { position: relative; }
/* V2.5：横向兜底（装饰伪元素/跑马灯循环内容的合规出界一律裁掉，零滚动条） */
html, body { overflow-x: clip; }
.v2-scrim {
  position: absolute; inset: 0; z-index: 1; pointer-events: none;
  background:
    linear-gradient(180deg, rgba(6,17,32,.40) 0%, rgba(6,17,32,0) 26%),
    linear-gradient(to top, rgba(6,17,32,.88) 0%, rgba(6,17,32,.44) 42%, rgba(6,17,32,0) 78%);
}
.v2-scrim--left {
  background:
    linear-gradient(180deg, rgba(6,17,32,.38) 0%, rgba(6,17,32,0) 24%),
    linear-gradient(100deg, rgba(6,17,32,.82) 0%, rgba(6,17,32,.34) 44%, rgba(6,17,32,0) 72%);
}
.v2-copy { position: relative; z-index: 2; }
.v2-arrow-link {
  display: inline-flex; align-items: center; gap: 12px;
  color: #fff; font-size: 15px; font-weight: 600; letter-spacing: .06em;
  padding-bottom: 8px; position: relative; cursor: pointer;
}
.v2-arrow-link::after {
  content: ""; position: absolute; left: 0; bottom: 0; height: 1px; width: 100%;
  background: rgba(255,255,255,.5);
  transform: scaleX(.32); transform-origin: left;
  transition: transform .5s var(--ease), background-color .5s var(--ease);
}
.v2-arrow-link .arr { transition: transform .5s var(--ease), color .5s var(--ease); }
.v2-arrow-link:hover::after { transform: scaleX(1); background: var(--brand); }
.v2-arrow-link:hover .arr { transform: translateX(8px); color: var(--brand); }
/* 浅底用的墨色变体（功能区 / 案例外链） */
.v2-arrow-link--ink { color: var(--ink); }
.v2-arrow-link--ink::after { background: rgba(15, 53, 87, .32); }

/* ---------- 进场动效系统 ---------- */
.js .v2-reveal {
  opacity: 0; transform: translateY(38px);
  transition: opacity .9s var(--ease), transform .9s var(--ease);
  transition-delay: calc(var(--d, 0) * 110ms);
}
.js .v2-reveal.is-in { opacity: 1; transform: none; }

.js .v2-clip { clip-path: inset(10% 8% 10% 8% round 14px); }
.js .v2-clip.is-in { clip-path: inset(0 0 0 0 round 14px); }
.v2-clip { transition: clip-path 1.1s var(--ease); }

.js .v2-mask { display: block; overflow: hidden; }
.js .v2-mask > span {
  display: block; transform: translateY(112%);
  transition: transform 1.05s var(--ease);
  transition-delay: calc(var(--d, 0) * 120ms + 260ms);
}
.is-booted .v2-mask > span { transform: none; }

/* 滚动触发的行遮罩进场（章节标题用，IO 加 is-in） */
.js .v2-line { display: block; overflow: hidden; }
.js .v2-line > span {
  display: block; transform: translateY(112%);
  transition: transform 1s var(--ease);
  transition-delay: calc(var(--d, 0) * 120ms + 60ms);
}
.v2-line.is-in > span { transform: none; }

/* 顶部滚动进度条（JS 注入） */
.v2-progress {
  position: fixed; top: 0; left: 0; height: 2px; width: 0; z-index: 90;
  background: linear-gradient(90deg, var(--brand), #6EA8FF);
  pointer-events: none; will-change: width;
}

@media (prefers-reduced-motion: reduce) {
  .js .v2-reveal, .js .v2-mask > span, .js .v2-line > span, .v2-clip { transition: none !important; }
  .js .v2-reveal { opacity: 1; transform: none; }
  .js .v2-mask > span, .js .v2-line > span { transform: none; }
  .js .v2-clip { clip-path: none; }
  .v2-marquee__track, .v2-zonef__media img, .v2-cta::after { animation: none !important; }
}

/* ---------- 1 · 首屏（深蓝面板 + 右侧满高实拍） ---------- */
.v2-hero {
  min-height: 100svh;
  display: grid; grid-template-columns: minmax(0, 46fr) minmax(0, 54fr);
}
.v2-hero__panel {
  position: relative; z-index: 2;
  background: var(--ink-deep);
  display: flex; flex-direction: column; justify-content: center;
  padding: calc(var(--header-h) + 44px) clamp(28px, 4.6vw, 76px) clamp(60px, 9vh, 104px);
}
/* 面板左上的科技蓝辉光 + 面板与图之间的蓝色接缝 */
.v2-hero__panel::before {
  content: ""; position: absolute; inset: 0; pointer-events: none;
  background: radial-gradient(720px 480px at -12% -14%, rgba(22, 119, 255, .16), transparent 62%);
}
.v2-hero__panel::after {
  content: ""; position: absolute; top: 0; right: 0; bottom: 0; width: 2px;
  background: linear-gradient(180deg, var(--brand) 0%, rgba(22, 119, 255, 0) 72%);
}
.v2-hero__media { position: relative; overflow: hidden; }
.js .v2-hero__media { transform: scale(1.055); transition: transform 2.4s var(--ease); }
.is-booted .v2-hero__media { transform: scale(1); }
.v2-hero__media img {
  position: absolute; left: 0; top: -7%; width: 100%; height: 114%;
  object-fit: cover; will-change: transform;
}
/* 顶栏导航浮在图上：顶部压暗带 + 与左面板的衔接渐变 */
.v2-hero__mediaScrim {
  position: absolute; inset: 0; z-index: 1; pointer-events: none;
  background:
    linear-gradient(180deg, rgba(6,17,32,.52) 0%, rgba(6,17,32,0) 24%),
    linear-gradient(100deg, rgba(6,17,32,.34) 0%, rgba(6,17,32,0) 30%);
}
.v2-hero__eyebrow {
  font-family: var(--font-serif); font-size: 14px; letter-spacing: .34em;
  text-transform: uppercase; color: rgba(255,255,255,.62); margin-bottom: 24px;
}
.v2-hero__title {
  font-size: clamp(42px, 5.6vw, 82px); line-height: 1.08; font-weight: 800;
  letter-spacing: -.015em; color: #fff;
}
.v2-hero__title em { font-style: normal; color: var(--brand); }
.v2-hero__sub {
  margin-top: 28px;
  color: rgba(255,255,255,.78); font-size: clamp(15px, 1.3vw, 18px); letter-spacing: .16em;
}
.v2-hero__actions { margin-top: 46px; display: flex; align-items: center; gap: 18px; flex-wrap: wrap; }
.v2-btn {
  display: inline-flex; align-items: center; gap: 12px;
  padding: 16px 36px; border-radius: var(--r-pill);
  font-size: 16px; font-weight: 600; letter-spacing: .08em; cursor: pointer;
  transition: background-color .4s var(--ease), border-color .4s var(--ease),
              transform .4s var(--ease), box-shadow .4s var(--ease);
}
.v2-btn .arr { transition: transform .4s var(--ease); }
.v2-btn:hover .arr { transform: translateX(7px); }
.v2-btn--primary {
  background: var(--brand); color: #fff; border: 1px solid var(--brand);
  box-shadow: 0 12px 32px rgba(22, 119, 255, .30);
}
.v2-btn--primary:hover { background: var(--brand-deep); border-color: var(--brand-deep); transform: translateY(-2px); }
.v2-btn--ghost {
  color: #fff; border: 1px solid rgba(255,255,255,.36); background: transparent;
}
.v2-btn--ghost:hover { border-color: rgba(255,255,255,.85); transform: translateY(-2px); }

/* ---------- 2 · 数字宣言（浅底 · 单行宣言式） ---------- */
.v2-stats { background: var(--paper-soft); overflow: hidden; }
.v2-stats__inner {
  max-width: var(--wrap); margin-inline: auto;
  padding: clamp(84px, 13vh, 150px) var(--gutter);
  display: flex; align-items: flex-start; gap: clamp(34px, 4.6vw, 76px);
}
.v2-stat { flex: 1; min-width: 0; }
.v2-stat + .v2-stat {
  border-left: 1px solid var(--line-strong);
  padding-left: clamp(34px, 4.6vw, 76px);
}
.v2-stat__num {
  display: flex; align-items: baseline; gap: .18em;
  font-family: var(--font-serif); font-weight: 400;
  font-size: clamp(72px, 8.2vw, 128px); line-height: .94;
  letter-spacing: -.02em; color: var(--ink);
}
.v2-stat__unit {
  font-family: var(--font-sans); font-size: clamp(15px, 1.5vw, 21px);
  font-weight: 600; color: var(--brand); letter-spacing: .06em; white-space: nowrap;
}
.v2-stat__label {
  margin-top: 18px; font-size: clamp(13px, 1.15vw, 15px);
  color: var(--ink-mute); letter-spacing: .08em;
}

/* ---------- 跑马灯（首屏与数字宣言之间） ---------- */
.v2-marquee {
  background: var(--paper-soft); border-bottom: 1px solid var(--line);
  overflow: hidden; padding: 19px 0; position: relative;
}
.v2-marquee__track {
  display: flex; width: max-content; will-change: transform;
  animation: v2mq 36s linear infinite;
}
.v2-marquee:hover .v2-marquee__track { animation-play-state: paused; }
.v2-marquee__group { display: flex; align-items: center; gap: 46px; padding-right: 46px; }
.v2-marquee__item {
  font-family: var(--font-serif); font-size: 15px; letter-spacing: .3em;
  white-space: nowrap; color: var(--ink-body); text-transform: uppercase;
}
.v2-marquee__item--lead { color: var(--ink); font-weight: 600; }
.v2-marquee__item--lead::after { content: none; }
.v2-marquee i {
  width: 6px; height: 6px; border-radius: 50%; background: var(--brand);
  opacity: .55; flex: none;
}
@keyframes v2mq { to { transform: translateX(-50%); } }

/* ---------- 3 · 四大功能区（满幅大图 · Ken Burns + 视差 + 幽灵序号） ---------- */
.v2-zonef {
  position: relative; overflow: hidden;
  min-height: 92svh;
  display: flex; align-items: center;
}
.v2-zonef__media {
  position: absolute; left: 0; top: -6%; width: 100%; height: 112%;
  overflow: hidden; z-index: 0; will-change: transform;
}
.v2-zonef__media img {
  width: 100%; height: 100%; object-fit: cover;
  animation: v2kb 26s var(--ease) infinite alternate;
  will-change: transform;
}
@keyframes v2kb {
  0%   { transform: scale(1.06) translate(0%, 0%); }
  100% { transform: scale(1.14) translate(-1.6%, -1%); }
}

/* V2.4 吸顶层叠：四区包在 .v2-zones 内，逐张 sticky 堆叠成一个整体模块。
   下滑时后卡从底部滚入并盖住已吸顶的前卡（z-index 递增保证覆盖顺序）；
   被覆盖卡由 JS 同步 scale 缩小 + dim 压暗，形成"层叠回收"的模块整体感。
   纯 CSS 即可 pin 住；JS 仅做增强；prefers-reduced-motion 时保留纯 sticky。 */
.v2-zones { position: relative; }
.v2-zones .v2-zonef {
  position: sticky; top: 0;
  height: 100svh; min-height: 100svh;
  will-change: transform;
}
.v2-zones .v2-zonef:nth-child(1) { z-index: 1; }
.v2-zones .v2-zonef:nth-child(2) { z-index: 2; }
.v2-zones .v2-zonef:nth-child(3) { z-index: 3; }
.v2-zones .v2-zonef:nth-child(4) { z-index: 4; }
/* 被覆盖卡的整体压暗层（JS 按covering 进度控 opacity；不用 filter 保性能） */
.v2-zonef__dim {
  position: absolute; inset: 0; z-index: 6;
  background: rgba(6,17,32,.55); opacity: 0;
  pointer-events: none;
}
/* 幕 4 场景区压在吸顶栈之上（保险层级，避免栈尾粘连） */
.v2-scenes { position: relative; z-index: 5; }
.v2-scrim--right {
  background:
    linear-gradient(180deg, rgba(6,17,32,.38) 0%, rgba(6,17,32,0) 24%),
    linear-gradient(260deg, rgba(6,17,32,.84) 0%, rgba(6,17,32,.36) 44%, rgba(6,17,32,0) 72%);
}
.v2-scrim--light {
  background:
    linear-gradient(260deg, rgba(245,248,252,.94) 0%, rgba(245,248,252,.62) 40%, rgba(245,248,252,0) 70%);
}
.v2-zonef__body {
  position: relative; z-index: 2; width: 100%;
  max-width: var(--wrap); margin-inline: auto;
  padding: clamp(110px, 16vh, 170px) var(--gutter);
}
/* 幽灵序号：巨型描边数字压底 */
.v2-zonef__body::before {
  content: attr(data-serial);
  position: absolute; top: clamp(10px, 4vh, 44px); right: var(--gutter);
  font-family: var(--font-serif); font-weight: 400;
  font-size: clamp(120px, 15vw, 230px); line-height: .82;
  color: transparent; -webkit-text-stroke: 1px rgba(255,255,255,.22);
  user-select: none; pointer-events: none;
}
.v2-zonef--flip .v2-zonef__body::before { right: auto; left: var(--gutter); }
.v2-zonef--flip .v2-zonef__body { margin-left: auto; max-width: min(var(--wrap), 860px); }
.v2-zonef__kicker {
  font-family: var(--font-serif); font-size: 13px; letter-spacing: .3em;
  text-transform: uppercase; color: var(--brand); margin-bottom: 18px;
}
.v2-zonef__name {
  font-size: clamp(34px, 4.6vw, 64px); line-height: 1.12; font-weight: 800;
  letter-spacing: -.01em; color: #fff;
}
.v2-zonef__line {
  margin-top: 22px; font-size: clamp(15px, 1.3vw, 18px); line-height: 1.9;
  color: rgba(255,255,255,.88); max-width: 34em;
}
/* 单元清单胶囊（stagger 进场） */
.v2-zonef__units {
  margin-top: 30px; padding: 0; list-style: none;
  display: flex; flex-wrap: wrap; gap: 10px 12px; max-width: 660px;
}
.v2-zonef__units li {
  font-size: 13.5px; letter-spacing: .05em; white-space: nowrap;
  color: rgba(255,255,255,.94);
  border: 1px solid rgba(255,255,255,.30); background: rgba(6,17,32,.30);
  backdrop-filter: blur(6px); -webkit-backdrop-filter: blur(6px);
  border-radius: var(--r-pill); padding: 8px 17px;
}
.js .v2-zonef__units li {
  opacity: 0; transform: translateY(14px);
  transition: opacity .6s var(--ease), transform .6s var(--ease);
}
.js .v2-zonef__units.is-in li {
  opacity: 1; transform: none;
  transition-delay: calc(var(--d, 0) * 70ms + 140ms);
}
.js .v2-zonef__units.v2-reveal { opacity: 1; transform: none; }
.v2-zonef__go { margin-top: 36px; }

/* NUTRITION 浅底变体（V2.3 去图化：渐变光斑 + 虚线圆环纯排版） */
.v2-zonef--light {
  background:
    radial-gradient(880px 520px at 82% 18%, rgba(22,119,255,.12), transparent 62%),
    radial-gradient(720px 560px at 12% 88%, rgba(14,95,216,.09), transparent 62%),
    linear-gradient(135deg, #F7FAFE 0%, #E9F1FC 58%, #DCE8FA 100%);
}
.v2-zonef--light::after {
  content: ""; position: absolute; right: -140px; bottom: -140px;
  width: 480px; height: 480px; border: 1px dashed rgba(22,119,255,.28);
  border-radius: 50%; animation: v2spin 70s linear infinite;
  pointer-events: none; z-index: 1;
}
.v2-zonef--light .v2-zonef__body::before { -webkit-text-stroke: 1px rgba(15,53,87,.18); }
.v2-zonef--light .v2-zonef__name { color: var(--ink); }
.v2-zonef--light .v2-zonef__line { color: var(--ink-body); }
.v2-zonef--light .v2-zonef__units li {
  color: var(--ink); border-color: rgba(15,53,87,.24); background: rgba(255,255,255,.68);
}

/* ---------- 4 · 场景 ---------- */
.v2-scenes { background: var(--paper); padding: clamp(88px, 14vh, 160px) 0; }
.v2-scenes__head {
  max-width: var(--wrap); margin: 0 auto clamp(48px, 6vh, 76px); padding: 0 var(--gutter);
  display: flex; align-items: flex-end; justify-content: space-between; gap: 32px;
}
.v2-scenes__title {
  font-size: clamp(30px, 3.6vw, 48px); font-weight: 800; letter-spacing: -.01em;
  color: var(--ink); line-height: 1.2;
}
.v2-scenes__title em { font-style: normal; color: var(--brand); }
.v2-scenes__note {
  font-family: var(--font-serif); font-size: 13px; letter-spacing: .26em;
  text-transform: uppercase; color: var(--ink-mute); padding-bottom: 8px;
}
.v2-scenes__grid {
  max-width: var(--wrap); margin-inline: auto; padding: 0 var(--gutter);
  display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); gap: clamp(18px, 1.8vw, 28px);
}
.v2-scene {
  position: relative; display: block; overflow: hidden; border-radius: var(--r-lg);
  background: var(--paper-mist); aspect-ratio: 4 / 4.6;
}
.v2-scene img {
  width: 100%; height: 100%; object-fit: cover;
  transition: transform 1s var(--ease), filter 1s var(--ease);
}
.v2-scene:hover img { transform: scale(1.06); }
.v2-scene::after {
  content: ""; position: absolute; inset: 0;
  background: linear-gradient(to top, rgba(6,17,32,.82) 0%, rgba(6,17,32,.18) 46%, rgba(6,17,32,0) 74%);
}
.v2-scene__info {
  position: absolute; left: 0; right: 0; bottom: 0; z-index: 2; padding: clamp(20px, 2vw, 30px);
  display: flex; align-items: flex-end; justify-content: space-between; gap: 12px;
}
.v2-scene__no {
  font-family: var(--font-serif); font-size: 13px; letter-spacing: .22em;
  color: rgba(255,255,255,.62); display: block; margin-bottom: 8px;
}
.v2-scene__name { color: #fff; font-size: clamp(19px, 1.7vw, 24px); font-weight: 700; letter-spacing: .04em; }
.v2-scene__arr {
  color: rgba(255,255,255,.78); font-size: 20px; line-height: 1;
  transition: transform .5s var(--ease), color .5s var(--ease);
}
.v2-scene:hover .v2-scene__arr { transform: translate(6px, -6px); color: var(--brand); }

/* ---------- 5 · 案例宽景带（V2.3 去水印裁切版，原生比例 1485:522） ---------- */
.v2-case {
  position: relative; overflow: hidden;
  aspect-ratio: 1485 / 522;
  min-height: 380px; max-height: 640px;
  display: flex; align-items: flex-end;
}
.v2-case__media { position: absolute; inset: 0; z-index: 0; overflow: hidden; }
.v2-case__media img {
  position: absolute; inset: 0; width: 100%; height: 100%;
  object-fit: cover; object-position: center 42%;
}
.v2-case__body {
  width: 100%; max-width: var(--wrap); margin-inline: auto;
  padding: 0 var(--gutter) clamp(48px, 7vh, 84px);
}
.v2-case__kicker {
  font-family: var(--font-serif); font-size: 13px; letter-spacing: .3em;
  text-transform: uppercase; color: rgba(255,255,255,.72); margin-bottom: 18px;
}
.v2-case__name {
  font-size: clamp(28px, 4vw, 56px); font-weight: 800; line-height: 1.16;
  letter-spacing: -.01em; color: #fff;
}
.v2-case__line { margin-top: 18px; color: rgba(255,255,255,.84); font-size: clamp(14px, 1.3vw, 18px); letter-spacing: .06em; }
.v2-case__go { margin-top: 30px; }

/* ---------- 6 · 收尾 CTA ---------- */
.v2-cta { background: var(--ink-deep); color: #fff; position: relative; overflow: hidden; }
.v2-cta::before {
  content: ""; position: absolute; right: -140px; top: -160px; width: 460px; height: 460px;
  border-radius: 50%; border: 1px solid rgba(22, 119, 255, .26); pointer-events: none;
}
.v2-cta::after {
  content: ""; position: absolute; right: -60px; top: -240px; width: 460px; height: 460px;
  border-radius: 50%; border: 1px dashed rgba(22, 119, 255, .30); pointer-events: none;
  animation: v2spin 70s linear infinite;
}
@keyframes v2spin { to { transform: rotate(360deg); } }
.v2-cta__inner {
  max-width: var(--wrap-narrow); margin-inline: auto; text-align: center;
  padding: clamp(110px, 17vh, 200px) var(--gutter);
}
.v2-cta__eyebrow {
  font-family: var(--font-serif); font-size: 13px; letter-spacing: .3em;
  text-transform: uppercase; color: var(--brand); margin-bottom: 24px;
}
.v2-cta__title {
  font-size: clamp(34px, 4.6vw, 62px); font-weight: 800; line-height: 1.18;
  letter-spacing: -.01em; color: #fff;
}
.v2-cta__desc { margin-top: 22px; color: rgba(255,255,255,.78); font-size: clamp(15px, 1.3vw, 18px); letter-spacing: .05em; }
.v2-cta__actions { margin-top: 44px; display: flex; align-items: center; justify-content: center; gap: 22px; flex-wrap: wrap; }
.v2-cta__btn {
  display: inline-flex; align-items: center; gap: 12px;
  padding: 17px 40px; border: 1px solid rgba(255,255,255,.42); border-radius: var(--r-pill);
  color: #fff; font-size: 16px; font-weight: 600; letter-spacing: .08em;
  position: relative; overflow: hidden; transition: border-color .45s var(--ease);
}
.v2-cta__btn::before {
  content: ""; position: absolute; inset: 0; background: var(--brand);
  transform: translateX(-101%); transition: transform .45s var(--ease); z-index: 0;
}
.v2-cta__btn span, .v2-cta__btn .arr { position: relative; z-index: 1; }
.v2-cta__btn .arr { transition: transform .45s var(--ease); }
.v2-cta__btn:hover { border-color: var(--brand); }
.v2-cta__btn:hover::before { transform: none; }
.v2-cta__btn:hover .arr { transform: translateX(7px); }
.v2-cta__contacts {
  margin-top: 40px; display: flex; justify-content: center; gap: 14px; flex-wrap: wrap;
  color: rgba(255,255,255,.62); font-size: 14px; letter-spacing: .1em;
}
.v2-cta__contacts a { color: rgba(255,255,255,.86); transition: color .3s var(--ease); }
.v2-cta__contacts a:hover { color: var(--brand); }

/* ---------- 右侧幕导航圆点 ---------- */
.v2-dots {
  position: fixed; right: 26px; top: 50%; transform: translateY(-50%); z-index: 60;
  display: grid; gap: 16px; padding: 14px 10px;
}
.v2-dot {
  width: 7px; height: 7px; border-radius: 50%; border: 0; padding: 0; cursor: pointer;
  background: rgba(15, 53, 87, .26); position: relative;
  transition: background-color .35s var(--ease), transform .35s var(--ease);
}
.v2-dot::after {
  content: attr(data-title); position: absolute; right: 20px; top: 50%; transform: translateY(-50%);
  font-size: 12px; letter-spacing: .14em; white-space: nowrap; color: var(--ink);
  background: rgba(255,255,255,.92); box-shadow: var(--shadow-md);
  border-radius: var(--r-sm); padding: 5px 10px; opacity: 0; pointer-events: none;
  transition: opacity .3s var(--ease);
}
.v2-dot:hover::after { opacity: 1; }
.v2-dot.is-on { background: var(--brand); transform: scale(1.5); }
.v2-dots--invert .v2-dot { background: rgba(255,255,255,.34); }
.v2-dots--invert .v2-dot.is-on { background: #fff; }

/* ---------- 响应式（仅 v2 构件） ---------- */
@media (max-width: 1180px) {
  .v2-scenes__grid { grid-template-columns: repeat(2, minmax(0, 1fr)); }
}
@media (max-width: 980px) {
  .v2-dots { display: none; }

  .v2-hero { grid-template-columns: minmax(0, 1fr); }
  .v2-hero__media { height: min(58svh, 560px); }
  .v2-hero__panel { padding-top: calc(var(--header-h) + 56px); }
  .v2-hero__title { font-size: clamp(40px, 10.5vw, 58px); }

  .v2-stats__inner { flex-direction: column; gap: 0; padding-block: 76px; }
  .v2-stat + .v2-stat {
    border-left: 0; padding-left: 0;
    border-top: 1px solid var(--line-strong);
    margin-top: 34px; padding-top: 34px;
  }

  .v2-zonef { min-height: 86svh; }
  .v2-zonef__body { padding-block: clamp(96px, 14vh, 140px); }
  .v2-zonef__body::before { font-size: clamp(96px, 24vw, 160px); }
  .v2-zonef--flip .v2-zonef__body { max-width: var(--wrap); }
  .v2-zonef__line { max-width: 40em; }
}
@media (max-width: 640px) {
  /* —— V2.6 移动端专属设计（非压缩桌面：卡片流 + 2×2 网格 + 扁图卡全构图） —— */

  /* 首屏：品牌眉标（蓝短线引导）+ 大标题 + 副题装饰线 + 图窗主体居中 */
  .v2-hero__eyebrow, .js .v2-hero__eyebrow.v2-mask {
    display: flex; align-items: center; gap: 10px;
    font-size: 11.5px; letter-spacing: .3em; margin-bottom: 20px;
  }
  .v2-hero__eyebrow::before {
    content: ""; width: 26px; height: 1px; background: var(--brand); flex: none;
  }
  .v2-hero__title { font-size: clamp(36px, 10vw, 42px); line-height: 1.16; }
  .v2-hero__sub { letter-spacing: .06em; font-size: 14px; }
  .v2-hero__sub::before {
    content: ""; display: block; width: 38px; height: 2px;
    background: var(--brand); border-radius: 2px; margin-bottom: 14px;
  }
  .v2-hero__actions { margin-top: 36px; gap: 12px; }
  .v2-hero__actions > span, .js .v2-hero__actions.v2-mask > span { display: flex; gap: 12px; }
  .v2-hero__actions .v2-btn {
    flex: 1 1 0; min-width: 0; justify-content: center;
    padding: 14px 10px; font-size: 14px; letter-spacing: .04em; white-space: nowrap;
  }
  .v2-btn:active { transform: translateY(1px); }
  .v2-hero__media { height: 46svh; min-height: 330px; }
  .v2-hero__media img { top: 0; height: 100%; object-position: 50% 30%; }

  /* 数字宣言：2+1 卡片组（白卡圆角轻立体；第三卡全宽横排，数字左标签右） */
  .v2-stats__inner {
    display: grid; grid-template-columns: repeat(2, minmax(0, 1fr));
    gap: 12px; padding: 50px 20px 64px;
  }
  .v2-stat, .v2-stat + .v2-stat {
    background: #fff; border: 1px solid var(--line); border-radius: 14px;
    padding: 18px 16px 16px; margin: 0;
    box-shadow: 0 1px 2px rgba(15, 53, 87, .04);
  }
  .v2-stat:nth-child(3) {
    grid-column: 1 / -1;
    display: flex; align-items: center; justify-content: space-between;
    gap: 14px; flex-wrap: wrap;
  }
  .v2-stat:nth-child(3) .v2-stat__label {
    margin-top: 0; text-align: right; flex: 1; min-width: 0;
  }
  .v2-stat__num { font-size: clamp(36px, 10.5vw, 42px); }
  .v2-stat__unit { font-size: 12px; }
  .v2-stat__label { margin-top: 8px; font-size: 11.5px; letter-spacing: .04em; line-height: 1.6; }

  /* 四大功能区：满幅压字 → 图上文下卡片流。
     1920×1080 横图在 16/9 扁窗内可显示约 90% 横向构图（原先仅 32%），
     设备主体与两侧单元全入镜；文字落图下独立面板，可读性不再依赖 scrim */
  .v2-zones .v2-zonef { position: static; height: auto; min-height: 0; }
  .v2-zonef {
    display: block; min-height: 0; background: var(--ink-deep);
    padding: 46px 0 52px; border-bottom: 1px solid rgba(255,255,255,.07);
  }
  .v2-zonef--light { border-bottom: 0; background: linear-gradient(160deg, #F7FAFE 0%, #E9F1FC 58%, #DCE8FA 100%); }
  .v2-zonef--light::after { display: none; }
  .v2-zonef__media {
    position: relative; top: 0; left: 0; width: auto; height: auto;
    margin: 20px 20px 0; aspect-ratio: 16 / 9; border-radius: 14px;
  }
  .v2-zonef__media img { position: absolute; inset: 0; height: 100%; object-position: 50% 40%; }
  .v2-zonef .v2-scrim, .v2-zonef__dim { display: none; }
  .v2-zonef__body { padding: 24px 20px 0; max-width: none; }
  .v2-zonef--flip .v2-zonef__body { max-width: none; }
  .v2-zonef__body::before { display: none; }
  .v2-zonef__kicker { margin-bottom: 12px; }
  .v2-zonef__name { font-size: clamp(26px, 7.6vw, 30px); }
  .v2-zonef__line { font-size: 14px; line-height: 1.85; margin-top: 14px; }
  .v2-zonef__units { margin-top: 20px; gap: 8px 10px; }
  .v2-zonef__units li {
    padding: 6px 13px; font-size: 12px;
    backdrop-filter: none; -webkit-backdrop-filter: none;
    background: rgba(6,17,32,.58); border-color: rgba(255,255,255,.26);
  }
  .v2-zonef--light .v2-zonef__units li { background: rgba(255,255,255,.9); }
  .v2-zonef__go { margin-top: 24px; }
  /* Ken Burns 移动档：幅度收小，保画面完整感 */
  .v2-zonef__media img { animation-name: v2kbm; animation-duration: 22s; }

  /* 场景区：16/10 扁比例卡，横向构图完整呈现 + 按压反馈 */
  .v2-scenes__grid { grid-template-columns: minmax(0, 1fr); }
  .v2-scene { aspect-ratio: 16 / 10; }
  .v2-scene:active { transform: scale(.985); }
  .v2-scene__name { font-size: 17px; }
  .v2-scenes__head { margin-bottom: 32px; }
  .v2-scenes__title { font-size: 26px; }
  .v2-scenes__note { display: none; }

  /* 案例宽景带：同卡片流（1485×522 全景在 16/9 窗内横向尽收） */
  .v2-case {
    display: block; height: auto; min-height: 0; aspect-ratio: auto;
    background: var(--ink-deep); padding: 46px 0 56px;
  }
  .v2-case__media {
    position: relative; inset: auto; margin: 20px 20px 0;
    aspect-ratio: 16 / 9; border-radius: 14px; overflow: hidden;
  }
  .v2-case__media img { object-position: center 42%; }
  .v2-case .v2-scrim { display: none; }
  .v2-case__body { padding: 24px 20px 0; }
  .v2-case__kicker { margin-bottom: 12px; }
  .v2-case__name { font-size: 26px; }
  .v2-case__line { font-size: 13.5px; margin-top: 12px; }
  .v2-case__go { margin-top: 20px; }

  /* 收尾 CTA 与跑马灯 */
  .v2-cta__inner { padding: 84px var(--gutter) 88px; }
  .v2-cta__title { font-size: 29px; }
  .v2-cta__desc { font-size: 14px; margin-top: 16px; }
  .v2-cta__actions { margin-top: 34px; }
  .v2-cta__btn { width: 100%; justify-content: center; }
  .v2-cta__contacts { font-size: 12.5px; gap: 8px 14px; }
  .v2-btn { padding: 14px 28px; font-size: 15px; }
  .v2-marquee { padding: 13px 0; }
  .v2-marquee__item { font-size: 12.5px; letter-spacing: .22em; }
}
@keyframes v2kbm {
  0%   { transform: scale(1.02) translate(0, 0); }
  100% { transform: scale(1.08) translate(-.8%, -.6%); }
}

/* ---------- 打印 ---------- */
@media print {
  .v2-dots { display: none !important; }
  .v2-hero { min-height: auto; }
  .v2-hero__media { height: 320px; }
  .v2-case { height: 320px; }
}
