/** Shopify CDN: Minification failed

Line 6997:0 Unexpected "}"

**/
/* ==========================================================================
   Comu custom sections — scoped styles (all contained under .comu-section to avoid polluting the global theme)
   ==========================================================================

   z-index 层级约定（2026-08-11 全面梳理，新增浮层请对照这张表，不要「谁大谁上」地加码）

   ┌── 全局固定层（position: fixed，在根层叠上下文里互相比较）
   │  99999  .comu-qv                 商品快速查看弹窗。数值夸张但**别动**——
   │                                  客服气泡等第三方组件常用极高 z-index，压低会被它们盖住
   │   1001  .comu-fsub__overlay      悬浮订阅弹窗遮罩（主动打开，压住抽屉是对的）
   │    999  Impact 的 drawer/popover 购物车抽屉、菜单抽屉。**上游值，不可改**
   │    998  .comu-sticky-bar         悬浮加购条，有意压在抽屉之下
   │    997  .comu-fsub__btn          悬浮订阅按钮（常驻入口，不该盖住任何主动打开的东西）
   │     60  .comu-info-bar__region-menu  信息条地区下拉。打开时 portal 到 <body>，
   │                                  故在根层比较：高于 header、低于加购条与抽屉
   │     10  Impact header            上游值
   │      9  .comu-info-bar           有意低于 header
   │      5  .comu-quick-nav          吸顶快捷导航，必须低于 header
   └──

   区块内部的 z-index（.ckm-* 的 99/28/24、.qr-tooltip 的 100 等）都被各自祖先的
   层叠上下文封顶，与上表不在同一个比较域，不必跟全局值对齐——但**新建时要确认
   祖先确实是层叠上下文**，否则数值会漏到全局去压住 header。
   ========================================================================== */
@import url('https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700&display=swap');

.comu-section {
  --cp-color-primary: #2277FF;
  --cp-color-primary-hover: color-mix(in srgb, var(--cp-color-primary) 80%, #000);
  --cp-color-bg: transparent;
  --cp-color-bg-base: #FFFFFF;
  --cp-color-bg-alt: #F8F9FD;
  --cp-color-text-main: #191C1D;
  --cp-color-text-muted: color-mix(in srgb, var(--cp-color-text-main) 62%, #FFFFFF);
  --cp-color-border: #E5E7EB;
  --cp-color-border-hover: #D1D5DB;
  --cp-max-width: 1128px;
  --cp-rounded-pill: 999px;
  --cp-shadow-md: 0 10px 30px rgba(16, 24, 40, 0.05);
  --cp-transition-fast: 160ms cubic-bezier(0.4, 0, 0.2, 1);
  --cp-transition-normal: 250ms cubic-bezier(0.4, 0, 0.2, 1);

  font-family: 'Inter', -apple-system, BlinkMacSystemFont, sans-serif;
  color: var(--cp-color-text-main);
  -webkit-font-smoothing: antialiased;
}

.comu-section *,
.comu-section *::before,
.comu-section *::after {
  box-sizing: border-box;
}

.comu-section h1,
.comu-section h2,
.comu-section h3,
.comu-section p {
  margin: 0;
}

/* ---------- 通用布局 ---------- */
.comu-section .cp-container {
  /* 本 section 根元素不带 .comu-section，拿不到 --cp-max-width，必须给回退值 */
  width: min(100% - 48px, var(--cp-max-width, 1128px));
  margin: 0 auto;
}

.comu-section.cp-section {
  padding: var(--cp-section-pad-top, 96px) 0 var(--cp-section-pad-bottom, 96px);
  background: var(--cp-color-bg);
}

@media (max-width: 768px) {
  .comu-section.cp-section {
    padding: var(--cp-section-pad-top-mobile, var(--cp-section-pad-top, 96px)) 0 var(--cp-section-pad-bottom-mobile, var(--cp-section-pad-bottom, 96px));
  }
}

/* ---------- 通用区块标题 ---------- */
/* 标题区到内容的间距：设计稿是 37px，预热页沿用 56px，
   由各 section 的「标题下间距」设置决定（0 = 用默认 56px）。 */
.comu-section .section-heading {
  text-align: center;
  max-width: 720px;
  margin: 0 auto var(--cp-heading-gap, 56px) auto;
}

.comu-section .section-heading h2 {
  font-size: 24px;
  font-weight: 600;
  line-height: 32px;
  margin-bottom: 11px;
}

.comu-section .section-heading p {
  color: var(--cp-color-text-muted);
  font-size: 14px;
  line-height: 23px;
}

/* 设计稿默认隐藏小标题（.eyebrow 也是 display:none）；
   勾选「显示小标题」后才按设计稿样式展示 */
.comu-section .section-heading .cp-eyebrow {
  display: none;
  color: var(--cp-color-primary);
  font-size: 12px;
  font-weight: 600;
  text-transform: uppercase;
  letter-spacing: 0.05em;
  margin-bottom: 12px;
}

.comu-section .section-heading .cp-eyebrow--visible {
  display: block;
}

/* ---------- 按钮 ---------- */
.comu-section .cp-btn {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  gap: 8px;
  padding: 10px 24px;
  border-radius: var(--cp-rounded-pill);
  font-size: 14px;
  font-weight: 600;
  font-family: inherit;
  text-decoration: none;
  border: 0;
  cursor: pointer;
  transition: all var(--cp-transition-fast);
}

.comu-section .cp-btn--primary {
  background-color: #FFFFFF;
  color: #1A1C1D;
  box-shadow: 0 4px 12px rgba(255, 255, 255, 0.15);
}

.comu-section .cp-btn--primary:hover {
  background-color: #F3F4F6;
  transform: translateY(-1px);
}

.comu-section .cp-btn--ghost {
  background-color: rgba(255, 255, 255, 0.1);
  color: #FFFFFF;
  border: 1px solid rgba(255, 255, 255, 0.25);
  backdrop-filter: blur(8px);
}

.comu-section .cp-btn--ghost:hover {
  background-color: rgba(255, 255, 255, 0.2);
  border-color: #FFFFFF;
}

.comu-section .cp-btn--large {
  padding: 14px 36px;
  font-size: 15px;
}

/* ==========================================================================
   区块一 · Hero（视频背景 + 悬浮文字）
   高度模式：adaptive（默认）| full_viewport | compact | custom
   ========================================================================== */
.shopify-section--comu-hero {
  margin-top: 0;
}

.comu-section.comu-hero {
  position: relative;
  height: auto;
  min-height: 0;
  display: block;
  padding: 0;
  box-sizing: border-box;
  color: var(--cp-color-text-main, #FFFFFF);
  background-color: var(--cp-color-bg, transparent);
  overflow: hidden;
  --hero-content-bottom-gap: clamp(48px, 10%, 480px);
}

.comu-section.comu-hero.comu-hero--height-full_viewport {
  --comu-hero-block-height: var(--comu-hero-viewport-height-desktop, 90svh);
  --comu-hero-block-min-height: 0;
}

.comu-section.comu-hero.comu-hero--height-compact {
  --comu-hero-block-height: clamp(400px, 42svh, 520px);
  --comu-hero-block-min-height: 0;
}

.comu-section.comu-hero.comu-hero--height-custom {
  --comu-hero-block-height: var(--comu-hero-height-desktop, 720px);
  --comu-hero-block-min-height: 0;
}

.comu-section.comu-hero.comu-hero--height-full_viewport,
.comu-section.comu-hero.comu-hero--height-compact,
.comu-section.comu-hero.comu-hero--height-custom {
  height: var(--comu-hero-block-height);
  min-height: var(--comu-hero-block-min-height, 0);
}

.comu-section.comu-hero.comu-hero--height-adapt_to_image .hero-media,
.comu-section.comu-hero.comu-hero--height-full_viewport .hero-media,
.comu-section.comu-hero.comu-hero--height-compact .hero-media,
.comu-section.comu-hero.comu-hero--height-custom .hero-media {
  position: absolute;
  inset: 0;
  width: 100%;
  height: 100%;
}

.comu-section.comu-hero.comu-hero--height-adapt_to_image .hero-media--yt,
.comu-section.comu-hero.comu-hero--height-full_viewport .hero-media--yt,
.comu-section.comu-hero.comu-hero--height-compact .hero-media--yt,
.comu-section.comu-hero.comu-hero--height-custom .hero-media--yt {
  aspect-ratio: auto;
}

.comu-section.comu-hero.comu-hero--height-adapt_to_image .hero-video,
.comu-section.comu-hero.comu-hero--height-full_viewport .hero-video,
.comu-section.comu-hero.comu-hero--height-compact .hero-video,
.comu-section.comu-hero.comu-hero--height-custom .hero-video {
  position: absolute;
  top: 50%;
  left: 50%;
  width: 100%;
  height: 100%;
  transform: translate(-50%, -50%);
  object-fit: cover;
}

.comu-section.comu-hero.comu-hero--height-adapt_to_image .hero-video--yt,
.comu-section.comu-hero.comu-hero--height-full_viewport .hero-video--yt,
.comu-section.comu-hero.comu-hero--height-compact .hero-video--yt,
.comu-section.comu-hero.comu-hero--height-custom .hero-video--yt {
  width: 100vw;
  height: 56.25vw;
  min-height: 100%;
  min-width: 177.78vh;
}

.comu-section .hero-media {
  position: relative;
  width: 100%;
  line-height: 0;
}

.comu-section .hero-media--yt {
  aspect-ratio: 16 / 9;
}

.comu-section.comu-hero .cp-container {
  position: absolute;
  inset: 0;
  z-index: 3;
  width: 100%;
  max-width: none;
  display: flex;
  align-items: flex-end;
  justify-content: center;
  padding-inline: max(24px, calc((100% - var(--cp-max-width)) / 2));
  box-sizing: border-box;
  pointer-events: none;
}

.comu-section .hero-video {
  position: relative;
  top: auto;
  left: auto;
  display: block;
  width: 100%;
  height: auto;
  transform: none;
  object-fit: cover;
  z-index: 1;
}

.comu-section .hero-video--yt {
  position: absolute;
  inset: 0;
  width: 100%;
  height: 100%;
  min-height: 0;
  min-width: 0;
  object-fit: cover;
  border: 0;
  pointer-events: none;
}

.comu-section .hero-shade {
  position: absolute;
  inset: 0;
  background: rgba(0, 0, 0, 0.45);
  z-index: 2;
}

.comu-section .hero-content {
  position: relative;
  z-index: 3;
  width: min(100%, var(--comu-hero-content-max-width, 1000px));
  max-width: var(--comu-hero-content-max-width, 1000px);
  margin-left: auto;
  margin-right: auto;
  padding-bottom: var(--hero-content-bottom-gap, clamp(48px, 10%, 480px));
  text-align: center;
  text-shadow: 0 2px 10px rgba(0, 0, 0, 0.3);
  pointer-events: auto;
}

/* 投影默认开（预热页是视频背景，白字靠它压住）；浅色背景 + 深色文字的场景
   （设计稿首页）由 hero 的「文字投影」开关关掉。 */
.comu-section.comu-hero:not(.comu-hero--shadow) .hero-content {
  text-shadow: none;
}

.comu-section .hero-eyebrow {
  font-size: var(--comu-hero-eyebrow-size, 16px);
  font-weight: var(--comu-hero-eyebrow-weight, 600);
  text-transform: uppercase;
  letter-spacing: var(--comu-hero-eyebrow-tracking, 0.15em);
  margin: 0 0 12px;
  color: var(
    --comu-hero-eyebrow-color,
    color-mix(in srgb, var(--cp-color-text-main, #FFFFFF) 70%, transparent)
  );
  opacity: 1;
}

.comu-section .hero-eyebrow-inner {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  flex-wrap: wrap;
  gap: 12px;
  max-width: 100%;
}

.comu-section .hero-eyebrow--has-badge {
  color: var(--comu-hero-eyebrow-color, var(--cp-color-text-main, #FFFFFF));
}

.comu-section .hero-eyebrow-text {
  line-height: 1.2;
}

.comu-section .hero-eyebrow-badge {
  display: inline-flex;
  align-items: center;
  padding: 5px 14px;
  border-radius: var(--cp-rounded-pill);
  background-color: var(--comu-hero-eyebrow-badge-bg, #F3EBDD);
  color: var(--comu-hero-eyebrow-badge-text, #6F5F4A);
  font-size: calc(var(--comu-hero-eyebrow-size, 16px) * 0.875);
  font-weight: 600;
  letter-spacing: 0.08em;
  line-height: 1.2;
  text-transform: uppercase;
  white-space: nowrap;
}

.comu-section .hero-title {
  font-size: var(--comu-hero-heading-size, 62px);
  font-weight: 700;
  line-height: 1.15;
  margin-bottom: 16px;
  color: var(--comu-hero-heading-color, var(--cp-color-text-main, #FFFFFF));
}

.comu-section .hero-copy {
  font-size: var(--comu-hero-copy-size, 18px);
  line-height: 28px;
  margin-bottom: 24px;
  color: var(
    --comu-hero-copy-color,
    color-mix(in srgb, var(--cp-color-text-main, #FFFFFF) 85%, transparent)
  );
  max-width: 600px;
  margin-left: auto;
  margin-right: auto;
}

.comu-section .hero-copy p {
  margin: 0;
}

.comu-section .hero-actions {
  display: flex;
  justify-content: center;
  gap: 16px;
}

.comu-section.comu-hero .cp-btn--primary {
  background-color: var(--comu-hero-primary-btn-bg, var(--cp-color-primary, #FFFFFF));
  color: var(--comu-hero-primary-btn-text, #1A1C1D);
  border: 1px solid var(--comu-hero-primary-btn-border, transparent);
  /* 发光（投影）默认关闭，由「按钮发光」开关加 .comu-hero--glow 后再打开。
     见文件末尾的 .comu-hero--glow 规则。 */
  box-shadow: none;
}

.comu-section.comu-hero .cp-btn--primary:hover {
  background-color: var(
    --comu-hero-primary-btn-bg-hover,
    color-mix(in srgb, var(--comu-hero-primary-btn-bg, var(--cp-color-primary, #FFFFFF)) 92%, #000000)
  );
  color: var(--comu-hero-primary-btn-text-hover, var(--comu-hero-primary-btn-text, #1A1C1D));
  border-color: var(--comu-hero-primary-btn-border-hover, var(--comu-hero-primary-btn-border, transparent));
  transform: translateY(-1px);
}

.comu-section.comu-hero .cp-btn--ghost {
  background-color: var(--comu-hero-secondary-btn-bg, rgba(255, 255, 255, 0.1));
  color: var(--comu-hero-secondary-btn-text, var(--cp-color-text-main, #FFFFFF));
  border: 1px solid var(
    --comu-hero-secondary-btn-border,
    color-mix(in srgb, var(--cp-color-text-main, #FFFFFF) 25%, transparent)
  );
  backdrop-filter: blur(8px);
}

.comu-section.comu-hero .cp-btn--ghost:hover {
  background-color: var(--comu-hero-secondary-btn-bg-hover, rgba(255, 255, 255, 0.2));
  color: var(--comu-hero-secondary-btn-text-hover, var(--comu-hero-secondary-btn-text, var(--cp-color-text-main, #FFFFFF)));
  border-color: var(
    --comu-hero-secondary-btn-border-hover,
    var(--comu-hero-secondary-btn-border, var(--cp-color-text-main, #FFFFFF))
  );
}

@media (min-width: 1900px) {
  .comu-section.comu-hero {
    --hero-content-bottom-gap: clamp(48px, 12%, 680px);
  }

  .comu-section .hero-content {
    max-width: var(--comu-hero-content-max-width, 1000px);
    width: min(100%, var(--comu-hero-content-max-width, 1000px));
  }
  /* ≥1900px 这一档的用意是「把标题的两行并成一行」——靠隐藏手动换行符 .hero-br
     就够了。原来还加了 white-space: nowrap，那是有害的：一旦标题的自然宽度超过
     「文案区最大宽度」，文字既不换行、又被 .comu-hero 的 overflow: hidden 裁掉。
     实测改动前首页与 About 在 1900/2400 宽屏上标题就已经被裁，不需要运营改任何设置。
     去掉 nowrap 后：能一行放下的仍是一行（并行的效果不变），放不下的自动换行。 */
  .comu-section .hero-br {
    display: none;
  }
}

/* Hero · 矮视口 PC（≤760px 高）：短视频时改为顶部锚定文案，避免 bottom 定位溢出 */
@media (max-height: 760px) and (min-width: 1025px) {
  .comu-section.comu-hero .cp-container {
    align-items: flex-start;
    padding-top: clamp(24px, 4svh, 48px);
  }

  .comu-section .hero-content {
    padding-bottom: clamp(24px, 5%, 48px);
  }
}

/* ==========================================================================
   区块二 · Benefits（左侧三列权益 + 右侧产品图）
   ========================================================================== */
.comu-section.comu-benefits {
  --cp-section-pad-top: 58px;
  --cp-section-pad-bottom: 14px;
}

.comu-section .benefits-showcase {
  padding: 24px 0 19px;
  display: grid;
  grid-template-columns: 1.1fr 0.9fr;
  gap: 64px;
  align-items: center;
  transform: translateX(30px);
}

.comu-section .benefits-showcase-left {
  display: flex;
  flex-direction: column;
  gap: 36px;
}

.comu-section .benefits-showcase-left h2 {
  font-size: 24px;
  font-weight: 700;
  line-height: 32px;
  color: var(--cp-color-text-main);
  letter-spacing: 0;
}

.comu-section .benefits-icons-row {
  display: flex;
  gap: 32px;
  align-items: flex-start;
}

.comu-section .benefit-icon-col {
  flex: 1;
  display: flex;
  flex-direction: column;
  align-items: flex-start;
  gap: 12px;
  position: relative;
}

.comu-section .benefit-icon-col:not(:last-child)::after {
  content: '';
  position: absolute;
  right: -16px;
  top: 15%;
  bottom: 15%;
  width: 1px;
  background-color: rgba(25, 28, 29, 0.08);
}

.comu-section .b-icon-box {
  color: var(--cp-color-primary);
  display: flex;
  align-items: center;
  justify-content: center;
  width: 56px;
  height: 56px;
}

.comu-section .b-icon-box img,
.comu-section .b-icon-box svg {
  width: 52px;
  height: 52px;
}

.comu-section .benefit-icon-col p {
  font-size: 13px;
  font-weight: 600;
  line-height: 18px;
  color: var(--cp-color-text-main);
}

.comu-section .benefits-showcase-right {
  display: flex;
  justify-content: flex-end;
}

.comu-section .benefits-showcase-right img {
  max-height: 430px;
  width: 100%;
  max-width: 500px;
  object-fit: contain;
  display: block;
  transform: scale(1.1) translateY(20px);
}

/* ==========================================================================
   区块三 · Subscribe（订阅卡片）
   ========================================================================== */
.comu-section.comu-subscribe {
  --cp-section-pad-top: 41px;
  --cp-section-pad-bottom: 63px;
  /* #subscribe 锚点落位时给吸顶导航留出高度 */
  scroll-margin-top: 96px;
}

.comu-section .subscribe-card {
  background: linear-gradient(135deg, var(--cp-subscribe-card-a, #F3F5F9) 0%, var(--cp-subscribe-card-b, #E8EDF5) 100%);
  border-radius: 20px;
  padding: 48px 56px;
  display: grid;
  grid-template-columns: 1.1fr 0.9fr;
  gap: 48px;
  align-items: center;
  box-sizing: border-box;
  width: 100%;
  max-width: 100%;
  overflow: visible;
}

.comu-section .subscribe-card-left,
.comu-section .subscribe-card-right,
.comu-section .comu-subscribe-form-wrap {
  min-width: 0;
}

.comu-section .subscribe-card-left h3 {
  font-size: 24px;
  font-weight: 700;
  line-height: 32px;
  color: var(--cp-color-text-main);
  letter-spacing: -0.01em;
  margin: 0;
  overflow-wrap: anywhere;
  word-break: break-word;
  hyphens: auto;
}

.comu-section .comu-subscribe-form {
  display: flex;
  flex-direction: column;
  gap: 12px;
  width: 100%;
}

.comu-section .comu-subscribe-form-wrap {
  width: 100%;
}

.comu-section .comu-subscribe-fields {
  display: flex;
  flex-direction: column;
  gap: 12px;
  width: 100%;
}

.comu-section .subscribe-input-wrapper {
  position: relative;
  display: flex;
  align-items: center;
  width: 100%;
  max-width: 100%;
  box-sizing: border-box;
  background-color: var(--cp-subscribe-input-bg, #FFFFFF);
  border-radius: var(--cp-rounded-pill);
  padding: 6px;
  border: 1px solid rgba(25, 28, 29, 0.08);
}

.comu-section .subscribe-input-wrapper input {
  flex: 1;
  min-width: 0;
  border: none;
  background: transparent;
  padding: 10px 16px;
  font-size: 14px;
  color: var(--cp-color-text-main);
  outline: none;
}

.comu-section .subscribe-input-wrapper input::placeholder {
  color: var(--cp-color-text-muted);
}

.comu-section .subscribe-submit {
  position: relative;
  z-index: 1;
  display: grid;
  place-items: center;
  width: 44px;
  height: 44px;
  background-color: var(--cp-subscribe-btn-bg, #161B28);
  color: var(--cp-subscribe-btn-fg, #FFFFFF);
  border: none;
  border-radius: 50%;
  cursor: pointer;
  transition: background-color var(--cp-transition-fast);
  flex-shrink: 0;
  touch-action: manipulation;
  -webkit-tap-highlight-color: transparent;
}

.comu-section .subscribe-submit:hover {
  background-color: color-mix(in srgb, var(--cp-subscribe-btn-bg, #161B28) 85%, #000);
}

.comu-section .subscribe-submit:disabled {
  opacity: 0.85;
  cursor: wait;
}

.comu-section .subscribe-submit-icon,
.comu-section .subscribe-submit-spinner {
  display: grid;
  place-items: center;
  width: 20px;
  height: 20px;
}

.comu-section .subscribe-submit-icon svg,
.comu-section .subscribe-submit-spinner svg {
  width: 20px;
  height: 20px;
}

.comu-section .subscribe-submit-spinner {
  display: none;
}

.comu-section .subscribe-submit.is-loading .subscribe-submit-icon {
  display: none;
}

.comu-section .subscribe-submit.is-loading .subscribe-submit-spinner {
  display: grid;
}

.comu-section .subscribe-submit-spinner svg {
  animation: comu-subscribe-spin 0.8s linear infinite;
}

@keyframes comu-subscribe-spin {
  to {
    transform: rotate(360deg);
  }
}

.comu-section .comu-subscribe-form .banner,
.comu-section .comu-subscribe-success .banner {
  text-align: left;
}

.comu-section .comu-subscribe-success .banner {
  width: 100%;
}

.comu-section .comu-subscribe-feedback {
  display: grid;
  gap: 12px;
}

.comu-section .comu-subscribe-fields[hidden],
.comu-section .comu-subscribe-success[hidden] {
  display: none;
}

.comu-section .subscribe-consent {
  display: flex;
  align-items: flex-start;
  gap: 8px;
  font-size: 11px;
  color: var(--cp-color-text-muted);
  line-height: 15px;
  cursor: pointer;
  user-select: none;
}

.comu-section .subscribe-consent input[type="checkbox"] {
  margin-top: 2px;
  accent-color: var(--cp-subscribe-btn-bg, #161B28);
}

.comu-section .subscribe-consent a {
  color: var(--cp-color-text-main);
  text-decoration: underline;
}

/* ==========================================================================
   响应式（≤1024px，平板：showcase 堆叠，图标保持横排）
   ========================================================================== */
@media (max-width: 1024px) {
  .comu-section .benefits-showcase {
    grid-template-columns: 1fr;
    padding: 24px 0;
    text-align: center;
    gap: 40px;
    transform: none;
  }

  .comu-section .benefits-showcase-left {
    align-items: center;
    gap: 28px;
  }

  .comu-section .benefits-icons-row {
    justify-content: center;
  }

  .comu-section .benefit-icon-col {
    align-items: center;
    text-align: center;
  }

  .comu-section .benefits-showcase-right {
    justify-content: center;
  }

  .comu-section .benefits-showcase-right img {
    max-height: 380px;
  }
}

/* ==========================================================================
   Hero · 平板 / 手机（≤1024px）
   adaptive：全屏 + cover；其余固定高度模式同步移动断点 token
   ========================================================================== */
@media (max-width: 1024px) {
  .shopify-section--comu-hero {
    margin-top: calc(-1 * var(--sticky-area-height, 0px));
  }

  .comu-section.comu-hero.comu-hero--height-adaptive {
    height: var(--comu-hero-viewport-height-mobile, 90svh);
    min-height: 0;
    --hero-content-inset-top: clamp(40px, 7svh, 96px);
    --hero-content-bottom-gap: min(
      clamp(32px, 8svh, 80px),
      calc(var(--comu-hero-viewport-height-mobile, 90svh) - var(--sticky-area-height, 72px) - 32px - 240px)
    );
  }

  .comu-section.comu-hero.comu-hero--height-full_viewport {
    --comu-hero-block-height: var(--comu-hero-viewport-height-mobile, 90svh);
    --hero-content-inset-top: clamp(40px, 7svh, 96px);
    --hero-content-bottom-gap: min(
      clamp(32px, 8svh, 80px),
      calc(var(--comu-hero-viewport-height-mobile, 90svh) - var(--sticky-area-height, 72px) - 32px - 240px)
    );
  }

  .comu-section.comu-hero.comu-hero--height-compact {
    --comu-hero-block-height: clamp(460px, 58svh, 620px);
    --comu-hero-block-min-height: 0;
    height: var(--comu-hero-block-height);
    --hero-content-inset-top: clamp(32px, 6svh, 72px);
    --hero-content-bottom-gap: clamp(24px, 6svh, 56px);
  }

  .comu-section.comu-hero.comu-hero--height-custom {
    --comu-hero-block-height: var(--comu-hero-height-mobile, 600px);
    height: var(--comu-hero-block-height);
    --hero-content-inset-top: clamp(32px, 6svh, 72px);
    --hero-content-bottom-gap: clamp(24px, 6svh, 56px);
  }

  .comu-section.comu-hero.comu-hero--height-adaptive .hero-media {
    position: absolute;
    inset: 0;
    width: 100%;
    height: 100%;
  }

  .comu-section.comu-hero.comu-hero--height-adaptive .hero-media--yt {
    aspect-ratio: auto;
  }

  .comu-section.comu-hero.comu-hero--height-adaptive .hero-video {
    position: absolute;
    top: 50%;
    left: 50%;
    width: 100%;
    height: 100%;
    transform: translate(-50%, -50%);
    object-fit: cover;
  }

  .comu-section.comu-hero.comu-hero--height-adaptive .hero-video--yt {
    width: 100vw;
    height: 56.25vw;
    min-height: 100%;
    min-width: 177.78vh;
  }

  .comu-section.comu-hero .cp-container {
    align-items: flex-start;
    justify-content: center;
    padding-top: calc(var(--sticky-area-height, 72px) + env(safe-area-inset-top, 0px) + var(--hero-content-inset-top));
    padding-inline: 16px;
  }

  .comu-section .hero-content {
    max-width: 100%;
    width: 100%;
    padding-top: 0;
    padding-bottom: var(--hero-content-bottom-gap);
    margin: 0 auto;
    text-shadow: none;
  }

  .comu-section .hero-eyebrow {
    margin-top: 0;
  }

  .comu-section .hero-title {
    font-size: var(--comu-hero-heading-size-mobile, var(--comu-hero-heading-size, 32px));
    line-height: 1.25;
  }

  .comu-section .hero-copy {
    font-size: var(--comu-hero-copy-size-mobile, var(--comu-hero-copy-size, 14px));
    line-height: 1.5;
    margin-bottom: 20px;
    padding: 0 10px;
  }

  .comu-section .hero-actions {
    justify-content: center;
    flex-wrap: wrap;
    gap: 12px;
  }
}

/* ==========================================================================
   响应式（≤768px）
   ========================================================================== */
@media (max-width: 768px) {
  .comu-section.comu-hero.comu-hero--height-adaptive,
  .comu-section.comu-hero.comu-hero--height-full_viewport {
    --hero-content-inset-top: clamp(28px, 5.5svh, 72px);
  }

  .comu-section.comu-hero.comu-hero--height-compact,
  .comu-section.comu-hero.comu-hero--height-custom {
    --hero-content-inset-top: clamp(24px, 5svh, 56px);
  }

  .comu-section .hero-title {
    font-size: var(--comu-hero-heading-size-mobile, 28px);
    line-height: 1.25;
  }

  .comu-section .hero-copy {
    font-size: var(--comu-hero-copy-size-mobile, 13px);
    line-height: 1.5;
    margin-bottom: 20px;
    padding: 0 10px;
  }

  .comu-section.comu-hero .hero-actions .cp-btn,
  .comu-section.comu-hero .hero-actions .cp-btn--large {
    padding: 12px 20px;
    font-size: 14px;
  }

  .comu-section .benefits-showcase {
    grid-template-columns: 1fr;
    padding: 24px 0;
    text-align: center;
    gap: 40px;
    transform: none;
  }

  .comu-section .benefits-showcase-left {
    align-items: center;
    gap: 28px;
  }

  .comu-section .benefits-icons-row {
    display: grid;
    grid-template-columns: repeat(2, 1fr);
    gap: 32px 12px;
    width: 100%;
    align-items: start;
  }

  .comu-section .benefit-icon-col {
    align-items: center;
    width: 100%;
    text-align: center;
  }

  .comu-section .benefit-icon-col:not(:last-child)::after {
    display: none;
  }

  .comu-section .benefits-showcase-right {
    justify-content: center;
  }

  .comu-section .benefits-showcase-right img {
    max-height: 280px;
  }

  .comu-section .subscribe-card {
    grid-template-columns: 1fr;
    padding: 32px 20px;
    gap: 24px;
    text-align: center;
  }

  .comu-section.comu-subscribe .cp-container {
    width: min(100% - 32px, var(--cp-max-width));
  }

  .comu-section .subscribe-card-left h3 {
    font-size: 22px;
    line-height: 30px;
    padding-inline: 4px;
  }

  .comu-section .subscribe-input-wrapper {
    padding: 4px;
  }

  .comu-section .subscribe-input-wrapper input {
    font-size: 16px;
    padding: 10px 12px;
  }

  .comu-section .subscribe-submit {
    width: 40px;
    height: 40px;
  }

  .comu-section .subscribe-consent {
    text-align: left;
  }
}

@media (max-width: 390px) {
  .comu-section .subscribe-card {
    padding: 28px 16px;
    gap: 20px;
  }

  .comu-section .subscribe-card-left h3 {
    font-size: 20px;
    line-height: 28px;
  }

  .comu-section .subscribe-input-wrapper input {
    padding: 10px 10px;
  }
}

/* ==========================================================================
   区块五 · AI Key 模块（Say what you need. Get work done.）
   ========================================================================== */
.comu-section {
  --ckm-ink: #050B18;
  --ckm-soft: #5F6B7A;
  --ckm-blue: var(--cp-color-primary);
  --ckm-ease: cubic-bezier(0.22, 1, 0.36, 1);
}

.comu-section.comu-ai-key .section-heading {
  margin-bottom: 24px;
}

.comu-section .ckm-module,
.comu-section .ckm-module * {
  box-sizing: border-box;
}

.comu-section .ckm-module {
  width: 100%;
  max-width: 1464px;
  height: 750px;
  overflow: visible;
  clip-path: inset(-150px -150px 0 -150px);
  position: relative;
  margin: 0 auto;
  color: var(--ckm-ink);
  background: transparent;
  box-shadow: none;
}

.comu-section .ckm-tabs {
  position: absolute;
  top: 20px;
  left: 50%;
  z-index: 28;
  display: flex;
  gap: 12px;
  transform: translateX(-50%);
}

.comu-section .ckm-tab {
  display: inline-flex;
  align-items: center;
  background-color: var(--cp-color-bg-alt);
  border: 1px solid var(--cp-color-border);
  border-radius: var(--cp-rounded-pill);
  padding: 10px 22px;
  font-size: 13px;
  font-weight: 600;
  color: var(--cp-color-text-muted);
  cursor: pointer;
  transition: all var(--cp-transition-fast);
}

.comu-section .ckm-tab:hover {
  border-color: color-mix(in srgb, var(--cp-color-primary) 35%, transparent);
  color: var(--cp-color-primary);
}

.comu-section .ckm-tab.is-active {
  background-color: color-mix(in srgb, var(--cp-color-primary) 6%, transparent);
  border-color: color-mix(in srgb, var(--cp-color-primary) 65%, transparent);
  color: var(--cp-color-primary);
  box-shadow: 0 8px 22px color-mix(in srgb, var(--cp-color-primary) 8%, transparent);
}

.comu-section .ckm-command {
  position: absolute;
  top: 82px;
  left: 50%;
  z-index: 24;
  display: flex;
  align-items: center;
  justify-content: center;
  gap: 12px;
  min-width: 420px;
  max-width: 680px;
  padding: 14px 20px;
  border: 1px solid rgba(0, 0, 0, 0.08);
  border-radius: var(--cp-rounded-pill);
  background: rgba(255, 255, 255, 0.88);
  box-shadow: 0 12px 35px rgba(25, 54, 105, 0.05);
  backdrop-filter: blur(24px);
  transform: translateX(-50%);
}

.comu-section .ckm-command-dot {
  display: flex;
  align-items: center;
  justify-content: center;
  flex: 0 0 auto;
  color: var(--ckm-blue);
  margin-right: 4px;
}

@keyframes soundwave {
  0%, 100% {
    transform: scaleY(0.7);
  }
  50% {
    transform: scaleY(1.3);
  }
}

.comu-section .record-icon-svg,
.comu-section .record-icon-img {
  width: var(--ckm-wave-icon-size, 36px);
  height: var(--ckm-wave-icon-size, 36px);
  flex-shrink: 0;
}

.comu-section .record-icon-svg {
  overflow: visible;
}

.comu-section .record-icon-img {
  object-fit: contain;
  display: block;
}

.comu-section .wave-line {
  transform-box: fill-box;
  transform-origin: center;
  animation: soundwave 1s ease-in-out infinite;
}

.comu-section .wave-1,
.comu-section .wave-5 {
  animation-delay: 0s;
}

.comu-section .wave-2,
.comu-section .wave-4 {
  animation-delay: 0.2s;
}

.comu-section .wave-3 {
  animation-delay: 0.4s;
}

.comu-section .ckm-command span:last-child {
  color: #111827;
  font-size: 17px;
  font-weight: 680;
  white-space: nowrap;
}

.comu-section .ckm-stage {
  position: absolute;
  top: 172px;
  left: 50%;
  z-index: 10;
  width: 1160px;
  height: 400px;
  perspective: 1500px;
  transform: translateX(-50%);
}

.comu-section .ckm-slide {
  position: absolute;
  overflow: hidden;
  aspect-ratio: 16 / 9;
  border: 1px solid rgba(255, 255, 255, 0.86);
  border-radius: 20px;
  background: linear-gradient(180deg, rgba(255, 255, 255, 0.96), rgba(255, 255, 255, 0.78));
  box-shadow: 0 30px 80px rgba(17, 48, 94, 0.13), 0 2px 10px rgba(17, 48, 94, 0.04), inset 0 0 0 1px rgba(255, 255, 255, 0.56);
  opacity: 0;
  filter: blur(12px);
  backdrop-filter: blur(24px);
}

.comu-section .ckm-slide img {
  width: 100%;
  height: 100%;
  object-fit: cover;
  object-position: top;
  display: block;
  border-radius: inherit;
}

.comu-section .ckm-slide-main {
  top: 0;
  left: 270px;
  z-index: 6;
  width: 620px;
  transform: translateY(76px) scale(0.965);
  animation: ckm-mainIn 0.86s var(--ckm-ease) forwards;
}

.comu-section .ckm-slide-left {
  top: 80px;
  left: 20px;
  z-index: 2;
  width: 400px;
  transform: translateY(88px) rotate(-7deg) scale(0.95);
  animation: ckm-leftIn 0.86s var(--ckm-ease) 0.12s forwards;
}

.comu-section .ckm-slide-right {
  top: 80px;
  right: 20px;
  z-index: 2;
  width: 400px;
  transform: translateY(88px) rotate(7deg) scale(0.95);
  animation: ckm-rightIn 0.86s var(--ckm-ease) 0.17s forwards;
}

@keyframes ckm-mainIn {
  to { opacity: 1; filter: blur(0); transform: translateY(0) scale(1); }
}

@keyframes ckm-leftIn {
  to { opacity: 0.5; filter: blur(0); transform: translateY(0) rotate(-7deg) scale(1); }
}

@keyframes ckm-rightIn {
  to { opacity: 0.5; filter: blur(0); transform: translateY(0) rotate(7deg) scale(1); }
}

.comu-section .ckm-device-zone {
  position: absolute;
  right: 0;
  bottom: -15px;
  left: 0;
  z-index: 99;
  height: 320px;
  overflow: visible;
  pointer-events: none;
  transform: translateZ(10px);
}

.comu-section .ckm-device-shadow {
  position: absolute;
  bottom: 18px;
  left: 50%;
  width: 560px;
  height: 64px;
  border-radius: 50%;
  background: radial-gradient(ellipse, rgba(13, 28, 50, 0.25), transparent 68%);
  filter: blur(16px);
  transform: translateX(-50%);
}

.comu-section .ckm-device-wrap {
  position: absolute;
  bottom: -400px;
  left: 50%;
  width: 650px;
  height: 650px;
  transform: translateX(-50%);
}

.comu-section .ckm-device-img {
  display: block;
  width: 100%;
  height: 100%;
  object-fit: contain;
  position: relative;
  z-index: 2;
  filter: drop-shadow(0 30px 45px rgba(7, 18, 38, 0.35));
}

.comu-section .ckm-ai-hotspot {
  position: absolute;
  top: 25px;
  left: 413px;
  z-index: 5;
  width: 106px;
  height: 66px;
}

.comu-section .ckm-ai-glow {
  position: absolute;
  inset: -7px -7px -13px -13px;
  border-radius: 100px;
  background: radial-gradient(ellipse, color-mix(in srgb, var(--cp-color-primary) 85%, transparent), color-mix(in srgb, var(--cp-color-primary) 35%, transparent) 44%, transparent 72%);
  animation: ckm-breath 2s ease-in-out infinite;
}

@keyframes ckm-breath {
  0%, 100% { opacity: 0.5; transform: scale(0.9); }
  50% { opacity: 1; transform: scale(1.3); }
}

.comu-section .ckm-ripple {
  position: absolute;
  top: calc(50% + 3px);
  left: calc(50% - 3px);
  width: 80px;
  height: 50px;
  border: 2px solid color-mix(in srgb, #1E90FF 95%, transparent);
  box-shadow: 0 0 12px color-mix(in srgb, #1E90FF 80%, transparent), inset 0 0 12px color-mix(in srgb, #1E90FF 80%, transparent);
  border-radius: 100px;
  opacity: 0;
  transform: translate(-50%, -50%) scale(0.5);
}

.comu-section .ckm-ripple-one { animation: ckm-ripple 1.9s infinite; }
.comu-section .ckm-ripple-two { animation: ckm-ripple 1.9s 0.6s infinite; }
.comu-section .ckm-ripple-three { animation: ckm-ripple 1.9s 1.2s infinite; }

@keyframes ckm-ripple {
  0% {
    opacity: 1;
    border-width: 3px;
    box-shadow: 0 0 24px color-mix(in srgb, #1E90FF 100%, transparent), inset 0 0 24px color-mix(in srgb, #1E90FF 100%, transparent);
    transform: translate(-50%, -50%) scale(0.6);
  }
  100% {
    opacity: 0;
    border-width: 0;
    box-shadow: 0 0 0 color-mix(in srgb, #1E90FF 0%, transparent), inset 0 0 0 color-mix(in srgb, #1E90FF 0%, transparent);
    transform: translate(-50%, -50%) scale(2.6);
  }
}

.comu-section .ckm-finger-img {
  position: absolute;
  top: -5.7%;
  left: 55.1%;
  z-index: 20;
  width: 100%;
  height: auto;
  filter: drop-shadow(0 10px 18px rgba(88, 48, 30, 0.18));
}

@media (prefers-reduced-motion: reduce) {
  .comu-section .ckm-slide,
  .comu-section .ckm-slide-main,
  .comu-section .ckm-slide-left,
  .comu-section .ckm-slide-right {
    animation: none;
    opacity: 1;
    filter: none;
  }
  .comu-section .ckm-ai-glow,
  .comu-section .ckm-ripple-one,
  .comu-section .ckm-ripple-two,
  .comu-section .ckm-ripple-three {
    animation: none;
  }
}

@media (max-width: 1024px) {
  .comu-section .ckm-module { height: 750px; }
  .comu-section .ckm-stage { width: 940px; }
  .comu-section .ckm-slide-main { left: 240px; width: 460px; }
  .comu-section .ckm-slide-left { left: 80px; width: 300px; }
  .comu-section .ckm-slide-right { right: 80px; width: 300px; }
}

@media (max-width: 768px) {
  .comu-section .ckm-module {
    height: 520px;
    overflow: hidden;
  }

  .comu-section .ckm-tabs {
    top: 20px;
    gap: 8px;
    max-width: calc(100% - 24px);
    overflow-x: auto;
    -webkit-overflow-scrolling: touch;
    scrollbar-width: none;
  }

  .comu-section .ckm-tabs::-webkit-scrollbar {
    display: none;
  }

  .comu-section .ckm-tab {
    padding: 6px 20px;
    font-size: 12px;
    height: auto;
    white-space: nowrap;
  }

  .comu-section .ckm-command {
    top: 76px;
    width: min(86vw, 520px);
    min-width: 0;
  }

  .comu-section .ckm-command span:last-child {
    font-size: 14px;
    white-space: normal;
  }

  .comu-section .ckm-stage {
    top: 166px;
    width: 92%;
    height: 260px;
  }

  .comu-section .ckm-slide-main {
    left: 50%;
    width: min(100%, 520px);
    transform: translateX(-50%) translateY(76px) scale(0.965);
    animation-name: ckm-mobileMain;
  }

  @keyframes ckm-mobileMain {
    to {
      opacity: 1;
      filter: blur(0);
      transform: translateX(-50%) translateY(0) scale(1);
    }
  }

  .comu-section .ckm-slide-left,
  .comu-section .ckm-slide-right {
    display: none;
  }

  .comu-section .ckm-device-wrap {
    bottom: auto;
    top: 100px;
    width: 100vw;
    max-width: 570px;
    height: 100vw;
    max-height: 570px;
  }

  .comu-section .ckm-ai-hotspot {
    top: 3.86%;
    left: 63.68%;
    width: 16.14%;
    height: 10%;
  }

  .comu-section .ckm-ripple {
    width: 76.92%;
    height: 76.92%;
  }
}

/* ==========================================================================
   区块 · Feature Map（From Capture to Action，1:1 图）
   ========================================================================== */
.comu-section .feature-map-figure {
  width: 100%;
  margin: 0 auto;
  border-radius: 12px;
  overflow: hidden;
}

.comu-section .feature-map-figure img {
  width: 100%;
  height: auto;
  display: block;
}

.comu-section .feature-map-figure picture {
  display: block;
  width: 100%;
}

/* ==========================================================================
   区块 · Scenarios（Ready for Every Conversation，focus 画廊）
   ========================================================================== */
.comu-section .scenario-focus-gallery {
  width: 100%;
  max-width: 1200px;
  margin: 0 auto;
  display: flex;
  justify-content: center;
  align-items: stretch;
  gap: clamp(12px, 1.4vw, 22px);
  overflow: visible;
  padding: 8px 0 0;
}

.comu-section .scenario-photo {
  position: relative;
  flex: 1;
  height: 380px;
  min-width: 0;
  border-radius: 14px;
  overflow: hidden;
  border: 0;
  opacity: 0.65;
  box-shadow: 0 10px 25px rgba(16, 24, 40, 0.06);
  cursor: pointer;
  transition:
    flex 850ms cubic-bezier(0.16, 1, 0.3, 1),
    height 850ms cubic-bezier(0.16, 1, 0.3, 1),
    opacity 500ms ease,
    box-shadow 500ms ease;
}

.comu-section .scenario-photo img {
  width: 100%;
  height: 100%;
  display: block;
  object-fit: cover;
}

.comu-section .scenario-photo.active {
  flex: 3.2;
  box-shadow: 0 20px 45px rgba(16, 24, 40, 0.12);
  opacity: 1;
  z-index: 2;
}

.comu-section .scenario-overlay {
  position: absolute;
  inset: 0;
  background: linear-gradient(to top, rgba(0, 0, 0, 0.72) 0%, rgba(0, 0, 0, 0.18) 50%, transparent 100%);
  display: flex;
  align-items: flex-end;
  justify-content: flex-start;
  padding: 24px;
  color: #FFFFFF;
  pointer-events: none;
  opacity: 0.85;
  text-align: left;
  transition: opacity 0.5s ease;
}

.comu-section .scenario-photo.active .scenario-overlay {
  opacity: 1;
  background: linear-gradient(to top, rgba(0, 0, 0, 0.82) 0%, rgba(0, 0, 0, 0.28) 60%, transparent 100%);
}

.comu-section .scenario-meta {
  display: flex;
  flex-direction: column;
}

.comu-section .scenario-meta h3 {
  margin: 0;
  font-size: 20px;
  font-weight: 700;
  color: #FFFFFF;
  letter-spacing: 0.02em;
  text-shadow: 0 2px 4px rgba(0, 0, 0, 0.15);
  text-align: left;
}

.comu-section .scenario-desc {
  margin: 0;
  font-size: 13.5px;
  line-height: 1.45;
  color: rgba(255, 255, 255, 0.82);
  max-width: 320px;
  opacity: 0;
  max-height: 0;
  overflow: hidden;
  transform: translateY(10px);
  text-align: left;
  transition:
    opacity 0.6s cubic-bezier(0.16, 1, 0.3, 1),
    max-height 0.6s cubic-bezier(0.16, 1, 0.3, 1),
    margin-top 0.6s cubic-bezier(0.16, 1, 0.3, 1),
    transform 0.6s cubic-bezier(0.16, 1, 0.3, 1);
  transition-delay: 0s;
}

.comu-section .scenario-photo.active .scenario-desc {
  opacity: 1;
  max-height: 120px;
  margin-top: 6px;
  transform: translateY(0);
  transition-delay: 0.12s;
}

@media (prefers-reduced-motion: reduce) {
  .comu-section .scenario-photo {
    transition: none;
  }
}

@media (max-width: 768px) {
  .comu-section .scenario-focus-gallery {
    width: 100%;
    margin-left: 0;
    flex-direction: column;
    justify-content: flex-start;
    align-items: stretch;
    gap: 12px;
    padding: 0;
    overflow: visible;
    /* 固定总高度，避免手风琴展开/收起时页面上下跳动 */
    height: calc(280px + (var(--scenario-count, 4) - 1) * 92px);
    min-height: calc(280px + (var(--scenario-count, 4) - 1) * 92px);
  }

  .comu-section .scenario-photo {
    width: 100%;
    flex: 0 0 auto;
    height: 80px;
    opacity: 0.85;
    transition:
      height 450ms cubic-bezier(0.25, 1, 0.5, 1),
      opacity 300ms ease,
      box-shadow 300ms ease;
  }

  .comu-section .scenario-photo.active {
    height: 280px;
    opacity: 1;
    box-shadow: 0 12px 30px rgba(16, 24, 40, 0.12);
  }

  .comu-section .scenario-overlay {
    padding: 20px;
    align-items: flex-end;
    transition: background-color 400ms ease;
  }

  .comu-section .scenario-photo:not(.active) .scenario-overlay {
    background: linear-gradient(to right, rgba(0, 0, 0, 0.72) 0%, rgba(0, 0, 0, 0.35) 100%);
  }

  .comu-section .scenario-photo.active .scenario-overlay {
    background: linear-gradient(to top, rgba(0, 0, 0, 0.82) 0%, rgba(0, 0, 0, 0.28) 60%, transparent 100%);
  }

  .comu-section .scenario-photo:not(.active) .scenario-desc {
    transition-delay: 0s;
  }

  .comu-section .scenario-photo.active .scenario-desc {
    transition-delay: 0s;
  }

  .comu-section .scenario-photo img {
    transition: filter 400ms ease;
  }

  .comu-section .scenario-photo:not(.active) img {
    filter: brightness(0.65) contrast(0.95);
  }

  .comu-section .scenario-photo.active img {
    filter: brightness(1) contrast(1);
  }
}

/* ==========================================================================
   区块 · Compliance（Privacy and Compliance You Can Trust）
   ========================================================================== */
.comu-section .compliance-badges-banner {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(160px, 1fr));
  gap: 24px;
  margin: 0 0 8px 0;
  background: transparent;
}

.comu-section .compliance-badge-item {
  display: flex;
  align-items: center;
  justify-content: center;
  gap: 12px;
  padding: 16px 20px;
  font-size: 20px;
  font-weight: 700;
  color: var(--cp-compliance-badge-text, var(--cp-color-text-main, #111827));
}

.comu-section .compliance-badge-item img {
  width: 84px;
  height: 84px;
  object-fit: contain;
  flex: 0 0 auto;
}

.comu-section .compliance-grid {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));
  gap: 24px;
}

.comu-section .compliance-card--icon {
  display: flex;
  flex-direction: column;
  align-items: center;
  padding: 32px 24px;
}

.comu-section .compliance-card__icon {
  width: 40px;
  height: 40px;
  margin-bottom: 24px;
  color: var(--cp-compliance-icon-color, var(--cp-color-text-main, #111827));
  flex: 0 0 auto;
}

.comu-section .compliance-card {
  background-color: var(--cp-compliance-card-bg, #F8FAFC);
  border: none;
  border-radius: var(--cp-rounded-block, 20px);
  /* 纵向内边距走变量：About 页这一节设计稿是 22px，首页是 48px，同一个 section
     两处用法不同，只能交给设置项。原来只有 .compliance-card--icon 认这个变量，
     普通徽章卡写死 48px，改了设置也不动。 */
  padding: var(--cp-compliance-card-pad, 48px) 24px;
  text-align: center;
  box-shadow: none;
}

.comu-section .compliance-card img {
  height: 108px;
  width: auto;
  margin: 0 auto 20px auto;
  display: block;
}

.comu-section .compliance-card h3 {
  margin-bottom: 4px;
  font-size: 20px;
  font-weight: 700;
  line-height: var(--cp-compliance-title-lh, 1.6);
  color: var(--cp-color-text-main);
}

.comu-section .compliance-status {
  line-height: var(--cp-compliance-status-lh, normal);
  font-size: 12px;
  color: var(--cp-color-primary);
  font-weight: 600;
  margin-bottom: 8px;
}

.comu-section .compliance-desc {
  font-size: 13px;
  line-height: var(--cp-compliance-desc-lh, 1.5);
  color: var(--cp-color-text-muted);
}

@media (max-width: 768px) {
  .comu-section .compliance-badges-banner {
    grid-template-columns: repeat(2, 1fr);
    gap: 12px;
  }

  .comu-section .compliance-badge-item {
    padding: 12px;
    font-size: 16px;
    gap: 8px;
  }

  .comu-section .compliance-badge-item img {
    width: 56px;
    height: 56px;
  }

  .comu-section.comu-compliance .compliance-grid {
    /* ⚠️ 设计稿移动端是「2 列换行网格」（grid-template-columns: repeat(2,1fr); gap:12px），
       不是横向滚动。之前做成 flex + overflow-x:auto 与设计稿不符，已改回。 */
    display: grid;
    grid-template-columns: repeat(2, minmax(0, 1fr));
    gap: 12px;
    padding: 0;
    overflow-x: visible;
  }

  .comu-section.comu-compliance .compliance-grid::-webkit-scrollbar {
    display: none;
  }

  .comu-section.comu-compliance .compliance-grid .compliance-card {
    min-width: 0;
    padding: 20px 12px;
  }

  .comu-section.comu-compliance .compliance-card img {
    height: 72px;
  }

  .comu-section.comu-compliance .cp-container {
    overflow: visible;
  }
}

/* 合规 · 图标链接 */
.comu-section .compliance-badge-link {
  display: inline-block;
  line-height: 0;
  transition: transform var(--cp-transition-fast, 160ms cubic-bezier(0.4, 0, 0.2, 1));
}
.comu-section .compliance-badge-link:hover {
  transform: scale(1.04);
}

/* 合规 · 轮播 */
.comu-section .compliance-carousel {
  position: relative;
}
.comu-section .compliance-carousel__viewport {
  display: flex;
  gap: 24px;
  overflow-x: auto;
  scroll-snap-type: x mandatory;
  -webkit-overflow-scrolling: touch;
  scrollbar-width: none;
  padding: 4px;
  scroll-behavior: smooth;
}
.comu-section .compliance-carousel__viewport::-webkit-scrollbar {
  display: none;
}
.comu-section .compliance-carousel .compliance-card {
  flex: 0 0 auto;
  width: min(100%, 360px);
  scroll-snap-align: center;
}
.comu-section .cp-carousel-btn {
  position: absolute;
  top: 108px;
  transform: translateY(-50%);
  z-index: 5;
  width: 40px;
  height: 40px;
  border-radius: 50%;
  border: 1px solid var(--cp-color-border);
  background: var(--cp-color-bg-base);
  color: var(--cp-color-text-main);
  font-size: 20px;
  line-height: 1;
  display: grid;
  place-items: center;
  cursor: pointer;
  box-shadow: 0 4px 14px rgba(16, 24, 40, 0.08);
  transition: all var(--cp-transition-fast, 160ms cubic-bezier(0.4, 0, 0.2, 1));
}
.comu-section .cp-carousel-btn:hover {
  border-color: var(--cp-color-primary);
  color: var(--cp-color-primary);
}
.comu-section .cp-carousel-prev { left: -8px; }
.comu-section .cp-carousel-next { right: -8px; }
@media (max-width: 768px) {
  .comu-section.comu-compliance .compliance-carousel__viewport {
    gap: 12px;
    padding: 4px 24px 12px 24px;
    margin-left: -24px;
    margin-right: -24px;
    scroll-padding-left: 24px;
  }

  .comu-section.comu-compliance .compliance-carousel .compliance-card {
    flex: 0 0 47%;
    width: auto;
    min-width: 0;
    scroll-snap-align: start;
    padding: 28px 16px;
  }

  .comu-section.comu-compliance .compliance-carousel .compliance-card img {
    height: 72px;
  }

  .comu-section .cp-carousel-btn {
    display: none;
  }
}

/* ==========================================================================
   区块 · Compare（See How Comu Action Pro Compares）
   ========================================================================== */
.comu-section .comparison-scroll-wrapper {
  width: 100%;
  overflow-x: auto;
  scrollbar-width: thin;
  -webkit-overflow-scrolling: touch;
  margin-bottom: 20px;
  padding: 10px 4px;
}
.comu-section .comparison-scroll-wrapper::-webkit-scrollbar { -webkit-appearance: none; height: 8px; }
.comu-section .comparison-scroll-wrapper::-webkit-scrollbar-track { background: transparent; }
.comu-section .comparison-scroll-wrapper::-webkit-scrollbar-thumb { background-color: rgba(0, 0, 0, 0.15); border-radius: 10px; }

.comu-section .comparison-cards-container {
  display: grid;
  grid-template-columns: 1.25fr 1fr 1fr 1fr;
  gap: 16px;
  align-items: stretch;
  width: 100%;
  min-width: 950px;
}

.comu-section .comparison-features-col {
  display: flex;
  flex-direction: column;
}

.comu-section .comp-feature-header {
  height: 140px;
  display: flex;
  align-items: flex-end;
  padding-bottom: 24px;
  font-size: 15px;
  font-weight: 700;
  color: var(--cp-color-text-main);
  border-bottom: 2px solid var(--cp-color-border);
}

.comu-section .comp-feature-cell {
  height: 52px;
  display: flex;
  align-items: center;
  font-size: 14px;
  font-weight: 600;
  color: var(--cp-color-text-main);
  border-bottom: 1px solid rgba(0, 0, 0, 0.05);
  padding-right: 12px;
}

.comu-section .comp-feature-cell:nth-child(even) {
  background-color: rgba(0, 0, 0, 0.015);
}

.comu-section .comparison-card {
  background-color: var(--cp-color-bg-base);
  border: 1px solid var(--cp-color-border);
  border-radius: 16px;
  box-shadow: 0 4px 18px rgba(0, 0, 0, 0.03);
  display: flex;
  flex-direction: column;
  overflow: hidden;
  transition: all 0.3s cubic-bezier(0.16, 1, 0.3, 1);
  position: relative;
}

.comu-section .comparison-card:hover {
  transform: translateY(-5px);
  box-shadow: 0 12px 30px rgba(0, 0, 0, 0.07);
}

.comu-section .comparison-card.featured {
  border: 2px solid var(--cp-color-primary);
  box-shadow: 0 8px 30px color-mix(in srgb, var(--cp-color-primary) 8%, transparent);
}

.comu-section .comparison-card.featured:hover {
  box-shadow: 0 16px 45px color-mix(in srgb, var(--cp-color-primary) 16%, transparent);
}

.comu-section .comp-card-header {
  height: 140px;
  padding: 20px 12px 16px;
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  gap: 8px;
  border-bottom: 2px solid var(--cp-color-border);
  background-color: var(--cp-compare-header-bg, var(--cp-color-bg-alt));
  text-align: center;
}

.comu-section .comparison-card.featured .comp-card-header {
  background-color: color-mix(in srgb, var(--cp-color-primary) 3%, transparent);
  border-bottom-color: color-mix(in srgb, var(--cp-color-primary) 15%, transparent);
}

.comu-section .comp-card-img {
  width: auto;
  max-width: 100%;
  height: 48px;
  object-fit: contain;
  margin-bottom: 8px;
}

.comu-section .comp-badge {
  display: inline-block;
  font-size: 10px;
  font-weight: 800;
  text-transform: uppercase;
  letter-spacing: 0.8px;
  padding: 4px 10px;
  border-radius: 100px;
  line-height: 1;
}

.comu-section .comparison-card.featured .comp-badge {
  background-color: var(--cp-color-primary);
  color: var(--cp-compare-badge-text, #FFFFFF);
}

.comu-section .comp-badge.competitor {
  background-color: rgba(0, 0, 0, 0.05);
  color: var(--cp-color-text-muted);
}

.comu-section .comp-card-title {
  font-size: 13px;
  font-weight: 700;
  color: var(--cp-color-text-main);
  margin: 0;
}

.comu-section .comparison-card.featured .comp-card-title {
  color: var(--cp-color-primary);
}

.comu-section .comp-val-cell {
  height: 52px;
  display: flex;
  align-items: center;
  justify-content: center;
  border-bottom: 1px solid rgba(0, 0, 0, 0.05);
}

.comu-section .comp-val-cell:last-child {
  border-bottom: 0;
}

.comu-section .comp-val-cell:nth-child(even) {
  background-color: rgba(0, 0, 0, 0.015);
}

.comu-section .comparison-card.featured .comp-val-cell.yes {
  background-color: color-mix(in srgb, var(--cp-color-primary) 1.5%, transparent);
}

.comu-section .comparison-card.featured .comp-val-cell:nth-child(even).yes {
  background-color: color-mix(in srgb, var(--cp-color-primary) 3.5%, transparent);
}

.comu-section .check-icon,
.comu-section .cross-icon {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  /* 设计稿 product-sections.css 是 18px / 图案 11px；主题历来用 22px / 13px。
     走变量，由 comu-plans 的「表格行高=紧凑」切到设计稿值，
     不动 comu-compare 等既有用法。 */
  width: var(--cp-check-size, 22px);
  height: var(--cp-check-size, 22px);
  border-radius: 50%;
  vertical-align: middle;
}

.comu-section .check-icon {
  background-color: var(--cp-color-primary);
  background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='white' stroke-width='3' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpolyline points='20 6 9 17 4 12'/%3E%3C/svg%3E");
  background-size: var(--cp-check-mark, 13px) var(--cp-check-mark, 13px);
  background-repeat: no-repeat;
  background-position: center;
}

/* 仅对比表：改用 mask 取形状 + background-color 上色，笔画色才能跟设置走。
   comu-plans 也用 .check-icon，但它靠基础规则的 background-image 出对勾、
   自己只改底色（第 3 列还换成深色对勾），所以这套不能做成全局规则。 */
.comu-section.comu-compare .check-icon {
  background-image: none;
}

.comu-section.comu-compare .check-icon::after {
  content: '';
  width: 13px;
  height: 13px;
  background-color: var(--cp-compare-check-mark, #ffffff);
  -webkit-mask: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='3' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpolyline points='20 6 9 17 4 12'/%3E%3C/svg%3E") center / 13px 13px no-repeat;
  mask: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='3' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpolyline points='20 6 9 17 4 12'/%3E%3C/svg%3E") center / 13px 13px no-repeat;
}

.comu-section .cross-icon::after {
  content: '✕';
  font-size: 13px;
  color: var(--cp-compare-cross, #C8CDD6);
  line-height: 1;
}

.comu-section .comp-val-text {
  font-size: 12.5px;
  font-weight: 500;
  color: var(--cp-color-text-muted);
  text-align: center;
  line-height: 1.35;
  padding: 0 8px;
}

.comu-section .comparison-card.featured .comp-val-cell .comp-val-text {
  color: var(--cp-color-primary);
  font-weight: 700;
}

@media (max-width: 768px) {
  .comu-section.comu-compare .comparison-scroll-wrapper {
    margin-left: 0;
    margin-right: 0;
    width: 100%;
    overflow-x: hidden;
    padding: 0 3px;
    box-sizing: border-box;
    scrollbar-width: none;
  }

  .comu-section.comu-compare .comparison-scroll-wrapper::-webkit-scrollbar {
    display: none;
    height: 0;
  }

  .comu-section.comu-compare .comparison-cards-container {
    display: grid;
    grid-template-columns: 1fr 1fr 1fr 1fr;
    width: 100%;
    min-width: 0;
    gap: 2px;
    padding: 0;
    box-sizing: border-box;
  }

  .comu-section.comu-compare .comparison-features-col {
    position: relative;
    left: auto;
    z-index: auto;
    background-color: transparent;
    box-shadow: none;
    transform: none;
    width: auto;
  }

  .comu-section.comu-compare .comp-feature-header {
    height: 70px;
    margin-top: 2px;
    padding: 4px 2px;
    font-size: 11px;
    display: flex;
    align-items: center;
    justify-content: center;
    text-align: center;
    background-color: transparent;
  }

  .comu-section.comu-compare .comp-card-header {
    height: 70px;
    padding: 4px 2px;
    gap: 2px;
  }

  .comu-section.comu-compare .comp-card-header .comp-card-img,
  .comu-section.comu-compare .comp-card-header img {
    width: auto;
    height: 24px;
    margin-bottom: 2px;
    object-fit: contain;
  }

  .comu-section.comu-compare .comp-card-icon {
    height: 24px;
    width: 24px;
    margin-bottom: 2px;
    display: flex;
    align-items: center;
    justify-content: center;
  }

  .comu-section.comu-compare .comp-card-icon svg {
    width: 24px;
    height: 24px;
  }

  .comu-section.comu-compare .comp-card-title {
    font-size: 9px;
    line-height: 1.1;
    text-align: center;
    word-break: break-word;
  }

  .comu-section.comu-compare .comp-badge {
    font-size: 8px;
    padding: 2px 4px;
  }

  .comu-section.comu-compare .comp-feature-cell {
    height: 52px;
    font-size: 9px;
    line-height: 1.2;
    padding: 4px;
    text-align: left;
    word-break: break-word;
  }

  .comu-section.comu-compare .comp-feature-cell:nth-child(even) {
    background-color: var(--cp-color-bg-alt);
  }

  .comu-section.comu-compare .comp-val-cell {
    height: 52px;
    font-size: 9px;
    line-height: 1.2;
    padding: 0 4px;
    text-align: center;
  }

  .comu-section.comu-compare .comp-val-text {
    font-size: 9px;
    line-height: 1.2;
    padding: 0 2px;
    word-break: break-word;
  }

  .comu-section.comu-compare .check-icon,
  .comu-section.comu-compare .cross-icon {
    width: 18px;
    height: 18px;
  }

  .comu-section.comu-compare .check-icon {
    background-size: 11px 11px;
  }

  .comu-section.comu-compare .cross-icon::after {
    font-size: 11px;
  }

  .comu-section.comu-compare .comparison-card {
    border-radius: 12px;
  }

  .comu-section.comu-compare .comparison-card:hover {
    transform: none;
  }
}

/* ==========================================================================
   区块 · Timeline（Join the Pre-Sale 预售时间线）
   ========================================================================== */
.comu-section .timeline {
  position: relative;
  max-width: 1200px;
  margin: 0 auto;
  --timeline-node-center-y: 95px;
  display: grid;
  grid-template-columns: repeat(var(--timeline-cols, 4), 1fr);
  gap: 20px;
  align-items: stretch;
}

.comu-section .timeline-row {
  position: relative;
  display: flex;
  flex-direction: column;
  align-items: center;
  cursor: pointer;
  text-align: center;
}

.comu-section .timeline-row::after {
  content: '';
  position: absolute;
  top: var(--timeline-node-center-y);
  left: 50%;
  width: calc(100% + 20px);
  height: 2px;
  background-image: repeating-linear-gradient(to right, rgba(102, 112, 133, 0.3) 0, rgba(102, 112, 133, 0.3) 6px, transparent 6px, transparent 14px);
  z-index: 0;
}

.comu-section .timeline-row:last-child::after {
  display: none;
}

.comu-section .timeline-date {
  width: 100%;
  text-align: center;
  margin-bottom: 24px;
  height: 48px;
  display: flex;
  flex-direction: column;
  justify-content: flex-end;
}

.comu-section .timeline-date span {
  display: block;
  font-size: 12px;
  line-height: 18px;
  color: #A0AAB5;
  font-weight: 500;
  transition: color var(--cp-transition-fast);
}

.comu-section .timeline-date strong {
  display: block;
  font-size: 20px;
  font-weight: 600;
  color: #8C94A1;
  line-height: 26px;
  margin-top: 2px;
  transition: color var(--cp-transition-fast);
}

.comu-section .timeline-row:hover:not(.active) .timeline-date strong {
  color: #555E6D;
}

.comu-section .timeline-row:hover:not(.active) .timeline-date span {
  color: #8C94A1;
}

.comu-section .timeline-node {
  position: relative;
  width: 46px;
  height: 46px;
  margin: 0 auto 24px auto;
  background-color: var(--cp-color-bg-base);
  border: 2px solid rgba(102, 112, 133, 0.3);
  border-radius: 50%;
  z-index: 2;
  display: grid;
  place-items: center;
  color: var(--cp-color-text-main);
  transition: all var(--cp-transition-normal);
}

.comu-section .timeline-node svg {
  width: 20px;
  height: 20px;
  stroke-width: 1.8;
}

.comu-section .timeline-card {
  min-height: 76px;
  background-color: var(--cp-color-bg-alt);
  border: 1px solid transparent;
  border-radius: 20px;
  padding: 16px 18px;
  transition: all var(--cp-transition-normal);
  text-align: left;
  width: 100%;
  flex-grow: 1;
  display: flex;
  flex-direction: column;
}

.comu-section .timeline-card p {
  color: var(--cp-color-text-muted);
  font-size: 11px;
  font-weight: 600;
  margin-bottom: 4px;
}

.comu-section .timeline-card h3 {
  font-size: 14px;
  line-height: 20px;
  margin-bottom: 4px;
  min-height: 40px;
  color: var(--cp-color-text-main);
}

.comu-section .timeline-card span {
  display: block;
  font-size: 12px;
  line-height: 18px;
  color: var(--cp-color-text-muted);
}

.comu-section .timeline-row.active .timeline-node {
  background-color: var(--cp-color-primary);
  border-color: var(--cp-color-primary);
  color: #FFFFFF;
  box-shadow: 0 0 0 4px color-mix(in srgb, var(--cp-color-primary) 15%, transparent);
}

.comu-section .timeline-row.active .timeline-card {
  border-color: color-mix(in srgb, var(--cp-color-primary) 65%, transparent);
  background-color: color-mix(in srgb, var(--cp-color-primary) 6%, transparent);
  box-shadow: 0 8px 22px color-mix(in srgb, var(--cp-color-primary) 8%, transparent);
}

.comu-section .timeline-row.active .timeline-date strong {
  color: var(--cp-color-primary);
}

.comu-section .timeline-row.active .timeline-date span {
  color: var(--cp-color-primary);
  opacity: 0.8;
}

.comu-section .timeline-row.active .timeline-card p,
.comu-section .timeline-row.active .timeline-card span {
  color: var(--cp-color-primary);
  opacity: 0.85;
}

.comu-section .timeline-row.active .timeline-card h3 {
  color: var(--cp-color-primary);
}

@media (max-width: 768px) {
  .comu-section .timeline {
    padding-left: 0;
    max-width: 100%;
    grid-template-columns: repeat(2, 1fr);
    gap: 32px 16px;
  }

  .comu-section .timeline-row {
    margin-bottom: 0;
  }

  .comu-section .timeline-row::after {
    display: none;
  }

  .comu-section .timeline-date {
    margin-bottom: 12px;
    height: auto;
  }

  .comu-section .timeline-date strong {
    font-size: 18px;
    line-height: 1.3;
  }

  .comu-section .timeline-node {
    display: flex;
    align-items: center;
    justify-content: center;
    width: 44px;
    height: 44px;
    margin: 0 auto 16px auto;
  }

  .comu-section .timeline-card {
    padding: 14px 16px;
    width: 100%;
    box-sizing: border-box;
  }
}

/* ==========================================================================
   区块 · Audience（What Works for You? 人群自动轮播）
   ========================================================================== */
.comu-section .audience-rotator {
  display: grid;
  grid-template-columns: minmax(0, 0.85fr) minmax(360px, 1.15fr);
  align-items: stretch;
  gap: clamp(42px, 5vw, 76px);
  margin-top: clamp(28px, 4vw, 56px);
}

.comu-section .audience-visual {
  width: 100%;
  height: 100%;
  position: relative;
  -webkit-mask-image: linear-gradient(to bottom, transparent 0%, #000 15%, #000 85%, transparent 100%);
  mask-image: linear-gradient(to bottom, transparent 0%, #000 15%, #000 85%, transparent 100%);
}

.comu-section .audience-visual-image {
  position: absolute;
  left: 8%;
  width: 84%;
  height: 56%;
  display: block;
  object-fit: cover;
  border-radius: 20px;
  box-shadow: 0 8px 24px rgba(0, 0, 0, 0.08);
  transition: opacity 450ms cubic-bezier(0.25, 1, 0.5, 1), transform 450ms cubic-bezier(0.25, 1, 0.5, 1), filter 450ms cubic-bezier(0.25, 1, 0.5, 1);
}

.comu-section .audience-visual-image.active {
  top: 50%;
  transform: translateY(-50%) scale(1);
  z-index: 3;
  opacity: 1;
  filter: none;
  height: auto;
  aspect-ratio: 1 / 1;
}

.comu-section .audience-visual-image.prev {
  top: 0;
  transform: scale(0.9) translateY(0);
  transform-origin: top center;
  z-index: 1;
  opacity: 0.4;
  filter: blur(4px);
}

.comu-section .audience-visual-image.next {
  bottom: 0;
  transform: scale(0.9) translateY(0);
  transform-origin: bottom center;
  z-index: 2;
  opacity: 0.4;
  filter: blur(4px);
}

.comu-section .audience-visual-image.is-changing { opacity: 0.15; }
.comu-section .audience-visual-image.active.is-changing { transform: translateY(-50%) scale(0.92); filter: blur(2px); }
.comu-section .audience-visual-image.prev.is-changing { transform: scale(0.85) translateY(10px); }
.comu-section .audience-visual-image.next.is-changing { transform: scale(0.85) translateY(-10px); }

.comu-section .audience-list {
  display: flex;
  flex-direction: column;
  gap: 0;
  max-height: clamp(460px, 38vw, 580px);
  overflow-y: auto;
  padding: 90px 0;
  scrollbar-width: none;
  -ms-overflow-style: none;
  -webkit-mask-image: linear-gradient(to bottom, transparent 0, #000 90px, #000 calc(100% - 90px), transparent 100%);
  mask-image: linear-gradient(to bottom, transparent 0, #000 90px, #000 calc(100% - 90px), transparent 100%);
}

.comu-section .audience-list::-webkit-scrollbar { display: none; }

.comu-section .audience-item {
  display: block;
  flex: 0 0 auto;
  width: 100%;
  box-sizing: border-box;
  padding: 22px 16px;
  border: 0;
  border-bottom: 1px dashed rgba(25, 28, 29, 0.08);
  background: transparent;
  color: var(--cp-color-text-muted);
  text-align: left;
  cursor: pointer;
  transition: background-color var(--cp-transition-fast), color var(--cp-transition-fast);
}

.comu-section .audience-item:last-child { border-bottom: none; }

.comu-section .audience-item:hover {
  background-color: color-mix(in srgb, var(--cp-color-primary) 4%, transparent);
  color: var(--cp-color-text-main);
}

.comu-section .audience-copy {
  display: flex;
  flex-direction: column;
  align-items: flex-start;
  gap: 6px;
}

.comu-section .audience-role-badge {
  position: relative;
  isolation: isolate;
  display: inline-flex;
  align-items: center;
  padding: 0 0 6px 0;
  color: var(--cp-color-text-muted);
  margin-bottom: 2px;
}

.comu-section .audience-role-badge::after {
  content: '';
  position: absolute;
  bottom: 0;
  left: 0;
  width: 100%;
  height: 3px;
  background: linear-gradient(to right, #0A69FE, #32E8D6);
  transform: scaleX(0);
  transform-origin: left;
  border-radius: var(--cp-rounded-pill);
  opacity: 0;
  transition: opacity var(--cp-transition-fast);
}

.comu-section .audience-role {
  position: relative;
  z-index: 1;
  font-size: 14px;
  line-height: 1.2;
  font-weight: 700;
  color: inherit;
  text-transform: uppercase;
  letter-spacing: 0.04em;
}

.comu-section .audience-copy > strong {
  font-size: 22px;
  line-height: 1.3;
  font-weight: 700;
  color: var(--cp-color-text-main);
  margin-top: 4px;
}

.comu-section .audience-copy > span:last-child {
  display: block;
  max-width: 440px;
  font-size: 16px;
  line-height: 1.6;
  color: var(--cp-color-text-muted);
  margin-top: 4px;
}

.comu-section .audience-item.active .audience-role-badge { color: var(--cp-color-primary); }

.comu-section .audience-item.active .audience-role-badge::after {
  opacity: 1;
  animation: comuAudienceLine var(--audience-delay, 5400ms) linear forwards;
}

@keyframes comuAudienceLine {
  from { transform: scaleX(0); }
  to { transform: scaleX(1); }
}

@media (prefers-reduced-motion: reduce) {
  .comu-section .audience-visual-image { transition: none; }
  .comu-section .audience-item.active .audience-role-badge::after { animation: none; transform: scaleX(1); }
}

@media (max-width: 1024px) {
  .comu-section .audience-rotator {
    grid-template-columns: minmax(0, 1fr) minmax(320px, 0.85fr);
    gap: 44px;
  }
}

@media (max-width: 768px) {
  .comu-section .audience-rotator {
    grid-template-columns: 1fr;
    gap: 28px;
    margin-top: 28px;
  }

  .comu-section.comu-audience .cp-container {
    overflow: visible;
  }

  .comu-section .audience-visual {
    height: auto;
    aspect-ratio: 1 / 1;
    border-radius: 20px;
    -webkit-mask-image: none !important;
    mask-image: none !important;
  }

  .comu-section .audience-visual-image.active {
    width: 100% !important;
    left: 0 !important;
  }

  .comu-section .audience-visual-image.prev,
  .comu-section .audience-visual-image.next {
    opacity: 0 !important;
    visibility: hidden !important;
    pointer-events: none !important;
  }

  .comu-section .audience-list {
    display: flex;
    flex-direction: row;
    overflow-x: auto;
    overflow-y: visible;
    overscroll-behavior: auto;
    max-height: none;
    padding: 16px 40px 16px 20px;
    margin-left: -20px;
    margin-right: -20px;
    gap: 16px;
    -webkit-overflow-scrolling: touch;
    scroll-snap-type: x mandatory;
    scroll-padding-inline: 20px;
    -webkit-mask-image: none;
    mask-image: none;
    scrollbar-width: none;
  }

  .comu-section .audience-list::-webkit-scrollbar {
    display: none;
  }

  .comu-section .audience-item {
    flex: 0 0 calc(100% - 40px);
    width: calc(100% - 40px);
    min-width: 0;
    scroll-snap-align: center;
    min-height: auto;
    padding: 20px;
    border: 1px solid var(--cp-color-border);
    border-radius: 20px;
    background-color: var(--cp-color-bg-base);
    color: var(--cp-color-text-muted);
  }

  .comu-section .audience-item:last-child {
    border-bottom: 1px solid var(--cp-color-border);
  }

  .comu-section .audience-item:hover {
    background-color: var(--cp-color-bg-base);
    color: var(--cp-color-text-muted);
  }

  .comu-section .audience-item.active {
    background-color: var(--cp-color-bg-base);
    color: var(--cp-color-text-main);
  }

  .comu-section .audience-role-badge {
    min-height: auto;
    padding: 0 0 6px 0;
  }

  .comu-section .audience-role {
    font-size: 11px;
  }

  .comu-section .audience-copy {
    gap: 6px;
  }

  .comu-section .audience-item.active .audience-role-badge {
    color: var(--cp-color-primary);
  }

  .comu-section .audience-copy > strong {
    font-size: 16px;
    margin-top: 0;
  }

  .comu-section .audience-copy > span:last-child {
    font-size: 13px;
    line-height: 1.45;
    margin-top: 0;
  }
}

/* ==========================================================================
   区块 · Media Marquee（Logo 无限横向滚动）
   ========================================================================== */
.comu-section .section-heading--tight {
  margin-bottom: 24px;
}

.comu-section .media-quote-box {
  display: flex;
  align-items: flex-start;
  justify-content: center;
  max-width: 900px;
  margin: 0 auto 12px;
  padding: 0;
  gap: 16px;
  text-align: center;
  border: 0;
}

.comu-section .media-quote-box .quote-mark {
  font-family: Georgia, serif;
  font-size: 36px;
  font-weight: 900;
  line-height: 1;
  color: var(--cp-media-quote-mark, #9ca3af);
  flex: 0 0 auto;
}

.comu-section .media-quote-box .quote-text {
  margin: 0;
  padding-top: 4px;
  font-size: 18px;
  font-weight: 500;
  line-height: 1.5;
  color: var(--cp-media-quote, #374151);
  transition: opacity 0.2s ease-in-out;
}

.comu-section .media-logo-item {
  display: flex;
  align-items: center;
  flex: 0 0 auto;
}

.comu-section .media-logo-item[data-comu-quote] {
  cursor: pointer;
}

.comu-section .media-logo-marquee {
  width: 100vw;
  margin-left: calc(50% - 50vw);
  overflow: hidden;
  padding: 24px 0;
}

.comu-section .media-logo-track {
  display: flex;
  align-items: center;
  width: max-content;
  animation: comuMediaScroll var(--comu-marquee-duration, 38s) linear infinite;
}

.comu-section .media-logo-set {
  display: flex;
  align-items: center;
  gap: var(--cp-logo-gap, 140px);
  padding-right: var(--cp-logo-gap, 140px);
  flex: 0 0 auto;
}

.comu-section .media-logo {
  height: var(--comu-logo-h, 100px);
  width: auto;
  flex: 0 0 auto;
  display: block;
}

.comu-section .media-logo--sm {
  height: 48px;
}

@keyframes comuMediaScroll {
  from { transform: translateX(0); }
  to { transform: translateX(-20%); }
}

@media (prefers-reduced-motion: reduce) {
  .comu-section .media-logo-track {
    animation: none;
  }
}

@media (max-width: 768px) {
  .comu-section .media-quote-box .quote-text {
    font-size: 16px;
  }

  .comu-section .media-logo-set {
    gap: 72px;
    padding-right: 72px;
  }
  .comu-section .media-logo {
    height: calc(var(--comu-logo-h, 100px) * 0.64);
  }
  /* --sm 不复用 --comu-logo-h 的桌面值，否则「降低高度」开关会被打穿 */
  .comu-section .media-logo--sm {
    height: 34px;
  }
}

/* ==========================================================================
   Comu Plans（订阅套餐对比表）
   ========================================================================== */
.comu-section.comu-plans .cp-container {
  overflow: visible;
}

/* 表格 min-width 是 900px，容器在 900~1200 这一段比它窄，overflow: visible
   会把整页撑出横滚（预热页 1200/900、App 下载页 900 都因此中招；设计稿同样如此）。
   改成 overflow-x: auto 让表格在自己的框里横滑——下面那几条滚动条样式本来就是
   给它准备的，只是一直没生效。表头是 position: relative 不是 sticky，不受影响。 */
.comu-section.comu-plans .plan-table-wrap {
  overflow-x: auto;
  overflow-y: visible;
  padding-top: 0;
  padding-bottom: 10px;
  /* 把表头的 z-index:10 关在这个盒子里。
     表头写 10 只是为了压住高亮列的底色，但它和吸顶 header 的 z-index 打平，
     而表格在 DOM 里排在 header 之后——平局时后者赢，滚到套餐表时表头会盖住站点头部
     （预热页 PC 实测复现）。isolation 建一个层叠上下文，内部次序不变、也不外泄。 */
  isolation: isolate;
}

.comu-section.comu-plans .plan-table-wrap::-webkit-scrollbar {
  -webkit-appearance: none;
  height: 8px;
}

.comu-section.comu-plans .plan-table-wrap::-webkit-scrollbar-track {
  background: transparent;
}

.comu-section.comu-plans .plan-table-wrap::-webkit-scrollbar-thumb {
  background-color: rgba(0, 0, 0, 0.15);
  border-radius: 10px;
}

.comu-section.comu-plans .plan-table {
  border-collapse: separate;
  border-spacing: 0;
  width: 100%;
  min-width: 900px;
  text-align: left;
}

.comu-section.comu-plans .plan-table th,
.comu-section.comu-plans .plan-table td {
  /* 设计稿是 line-height: normal；主题默认继承 1.6，20 行累计高出约 100px。
     默认保持现状（预热页/comu-app 页已按 1.6 排版），由 cell_density 切换。 */
  line-height: var(--cp-plans-cell-lh, inherit);
  padding: 12px 16px;
  /* Impact 的 theme.css 给全局 td 加了 border-top: 1px，设计稿那边不加载 theme.css
     所以没有——每行因此高 1px，24 行累计 24px，而且和下一行的 border-bottom
     叠成双线。紧凑档把它去掉；标准档保持现状，免得动到预热页与 comu-app 页。 */
  border-top: var(--cp-plans-cell-bt, 1px) solid transparent;
  border-bottom: 1px dashed rgba(0, 0, 0, 0.08);
  font-size: calc(var(--cp-plans-fs-table, 13px) * var(--cp-plans-fs, 1));
  vertical-align: middle;
}

.comu-section.comu-plans .plan-table th {
  font-weight: 700;
  background-color: #ffffff;
  border-bottom: 1px solid rgba(0, 0, 0, 0.08);
  position: relative;
  z-index: 10;
  padding: 16px;
}

.comu-section.comu-plans .plan-table th:first-child {
  font-size: calc(var(--cp-plans-fs-rowlabel, 18px) * var(--cp-plans-fs, 1));
  color: #1e293b;
  width: 26%;
}

.comu-section.comu-plans .plan-table th:nth-child(2) { width: 20%; }
.comu-section.comu-plans .plan-table th:nth-child(3) { width: 24%; }
.comu-section.comu-plans .plan-table th:nth-child(4) { width: 30%; }

.comu-section.comu-plans .plan-table th:not(:first-child) {
  text-align: center;
}

.comu-section.comu-plans .plan-header-flex {
  display: flex;
  align-items: center;
  justify-content: center;
  gap: 12px;
  text-align: center;
}

.comu-section.comu-plans .plan-header-icon {
  display: flex;
  align-items: center;
  justify-content: center;
  width: 36px;
  height: 36px;
  border-radius: 8px;
  flex-shrink: 0;
}

.comu-section.comu-plans .plan-header-icon.bg-blue {
  background-color: var(--cp-color-primary);
  box-shadow: 0 4px 10px rgba(34, 119, 255, 0.2);
}

.comu-section.comu-plans .plan-header-icon.bg-teal {
  background-color: var(--cp-plans-col4, #7c3aed);
  box-shadow: 0 4px 10px rgba(124, 58, 237, 0.2);
}

.comu-section.comu-plans .plan-header-icon.bg-gold {
  background-color: #FAE7CF;
  box-shadow: 0 4px 10px rgba(250, 231, 207, 0.3);
}

.comu-section.comu-plans .plan-header-icon svg {
  width: 20px;
  height: 20px;
}

.comu-section.comu-plans .plan-header-icon img {
  width: 100%;
  height: 100%;
  object-fit: contain;
  display: block;
}

.comu-section.comu-plans .plan-header-text {
  display: flex;
  flex-direction: column;
  align-items: flex-start;
  text-align: left;
}

.comu-section.comu-plans .plan-header-text strong {
  font-size: calc(var(--cp-plans-fs-planname, 16px) * var(--cp-plans-fs, 1));
  font-weight: 700;
}

.comu-section.comu-plans .plan-header-text.text-blue strong { color: var(--cp-color-primary); }
.comu-section.comu-plans .plan-header-text.text-teal strong { color: var(--cp-plans-col4, #7c3aed); }
.comu-section.comu-plans .plan-header-text.text-gold strong { color: #191c1d; }

.comu-section.comu-plans .plan-header-text span {
  font-size: calc(11px * var(--cp-plans-fs, 1));
  color: #64748b;
  font-weight: 400;
  margin-top: 2px;
  line-height: 1.3;
}

/* Recommended 角标已按新设计移除；保留选择器避免旧缓存样式残留 */
.comu-section.comu-plans .best-value-badge {
  display: none !important;
}

.comu-section.comu-plans .best-value-badge__compact {
  display: none;
}

.comu-section.comu-plans .plan-table th:nth-child(4),
.comu-section.comu-plans .plan-table td:nth-child(4),
.comu-section.comu-plans .plan-table tr:not(.group-row):not(.unified-highlight-row):not(.progressive-highlight-row) td:nth-child(4) {
  background-color: #ffffff;
}

.comu-section.comu-plans .plan-table th.elite-col {
  position: relative;
  overflow: visible;
}

.comu-section.comu-plans .plan-table tr:last-child td:nth-child(4) {
  border-radius: 0;
}

.comu-section.comu-plans .plan-table td:nth-child(3) small {
  color: var(--cp-plans-col3, #a37a28);
}

.comu-section.comu-plans .plan-table td:nth-child(4) small {
  color: var(--cp-plans-col4, #7c3aed);
}

.comu-section.comu-plans .plan-table tr:not(.group-row):not(.unified-highlight-row):not(.progressive-highlight-row) td:nth-child(1) {
  font-weight: 600;
}

.comu-section.comu-plans .plan-table tr:not(.group-row):not(.unified-highlight-row):not(.progressive-highlight-row) td:nth-child(2),
.comu-section.comu-plans .plan-table tr:not(.group-row):not(.unified-highlight-row):not(.progressive-highlight-row) td:nth-child(3),
.comu-section.comu-plans .plan-table tr:not(.group-row):not(.unified-highlight-row):not(.progressive-highlight-row) td:nth-child(4) {
  text-align: center;
}

.comu-section.comu-plans .plan-table tr:not(.group-row):not(.unified-highlight-row):not(.progressive-highlight-row) td:nth-child(4) {
  font-weight: 700;
}

.comu-section.comu-plans .plan-table td small {
  display: block;
  font-size: calc(11px * var(--cp-plans-fs, 1));
  color: var(--cp-color-text-muted);
  margin-top: 2px;
}

.comu-section.comu-plans .plan-table td span {
  font-size: calc(11px * var(--cp-plans-fs, 1));
  color: var(--cp-color-text-muted);
}

.comu-section.comu-plans .price-val {
  font-size: calc(var(--cp-plans-fs-price, 16px) * var(--cp-plans-fs, 1));
  font-weight: 800;
  color: var(--cp-color-text-main);
}

.comu-section.comu-plans .price-val.text-gold,
.comu-section.comu-plans .text-gold {
  color: var(--cp-plans-col3, #a37a28);
}

.comu-section.comu-plans .plan-table td:nth-child(3) span.text-gold,
.comu-section.comu-plans .plan-table td:nth-child(3) small.text-gold,
.comu-section.comu-plans .plan-table td:nth-child(3) .price-val.text-gold {
  color: var(--cp-plans-col3, #a37a28);
}

.comu-section.comu-plans .price-val.text-teal,
.comu-section.comu-plans .text-teal,
.comu-section.comu-plans .text-teal strong {
  color: var(--cp-plans-col4, #7c3aed);
}

.comu-section.comu-plans .plan-table td:nth-child(4) span.text-teal,
.comu-section.comu-plans .plan-table td:nth-child(4) small.text-teal,
.comu-section.comu-plans .plan-table td:nth-child(4) .price-val.text-teal {
  color: var(--cp-plans-col4, #7c3aed);
}

.comu-section.comu-plans .plan-table tr.group-row td {
  background-color: #f8fafc;
  color: #475569;
  font-weight: 800;
  font-size: calc(11px * var(--cp-plans-fs, 1));
  text-transform: uppercase;
  letter-spacing: 0.08em;
  padding: 8px 16px;
  border-bottom: 1px solid rgba(0, 0, 0, 0.05);
}

.comu-section.comu-plans .plan-table tr.group-row td.elite-col-group {
  background-color: #f8fafc;
}

.comu-section.comu-plans .plan-table tr.unified-highlight-row td,
.comu-section.comu-plans .plan-table tr.progressive-highlight-row td {
  padding: 14px 16px;
  border-bottom: 1px dashed rgba(0, 0, 0, 0.08);
  background: transparent;
}

.comu-section.comu-plans .plan-table tr.unified-highlight-row td,
.comu-section.comu-plans .plan-table tr.unified-highlight-row td strong {
  color: #191C1D;
}

.comu-section.comu-plans .plan-table tr.unified-highlight-row td:first-child,
.comu-section.comu-plans .plan-table tr.progressive-highlight-row td:first-child {
  background: var(--cp-color-bg-alt);
}

.comu-section.comu-plans .plan-table tr.unified-highlight-row td:nth-child(2),
.comu-section.comu-plans .plan-table tr.progressive-highlight-row td:nth-child(2) {
  background: rgba(34, 119, 255, 0.15);
}

.comu-section.comu-plans .plan-table tr.unified-highlight-row td:nth-child(3),
.comu-section.comu-plans .plan-table tr.progressive-highlight-row td:nth-child(3) {
  background: rgba(250, 231, 207, 0.2);
}

.comu-section.comu-plans .plan-table tr.unified-highlight-row td:nth-child(4),
.comu-section.comu-plans .plan-table tr.progressive-highlight-row td:nth-child(4) {
  background: rgba(124, 58, 237, 0.2);
  font-weight: 800;
}

.comu-section.comu-plans .plan-table tr.unified-highlight-row td:not(:first-child),
.comu-section.comu-plans .plan-table tr.progressive-highlight-row td:not(:first-child) {
  font-size: calc(15px * var(--cp-plans-fs, 1));
  font-weight: 700;
  text-align: center;
}

.comu-section.comu-plans .plan-table tr.progressive-highlight-row td:nth-child(3) {
  font-weight: 600;
}

.comu-section.comu-plans .plan-table tr.progressive-highlight-row td:nth-child(4) {
  font-size: calc(15px * var(--cp-plans-fs, 1));
}

.comu-section.comu-plans .plan-table td:nth-child(2) .check-icon {
  background-color: var(--cp-color-primary);
  box-shadow: 0 2px 6px rgba(34, 119, 255, 0.2);
}

.comu-section.comu-plans .plan-table td:nth-child(3) .check-icon {
  background-color: #FAE7CF;
  background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23191c1d' stroke-width='3' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpolyline points='20 6 9 17 4 12'/%3E%3C/svg%3E");
  box-shadow: 0 2px 6px rgba(250, 231, 207, 0.4);
}

.comu-section.comu-plans .plan-table td:nth-child(4) .check-icon {
  background-color: var(--cp-plans-col4, #7c3aed);
  background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='white' stroke-width='3' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpolyline points='20 6 9 17 4 12'/%3E%3C/svg%3E");
  box-shadow: 0 2px 6px rgba(124, 58, 237, 0.2);
}

.comu-section.comu-plans .plan-footnote {
  font-size: calc(12px * var(--cp-plans-fs, 1));
  color: var(--cp-color-text-muted);
  margin-top: 16px;
  text-align: center;
}

@media (max-width: 768px) {
  .comu-section.comu-plans {
    overflow: visible;
  }

  .comu-section.comu-plans .cp-container {
    overflow: visible;
    width: min(100% - 24px, var(--cp-max-width));
  }

  .comu-section.comu-plans .plan-table-wrap {
    overflow: visible;
    padding-top: 0;
    padding-bottom: 15px;
    padding-inline: 0;
  }

  .comu-section.comu-plans .plan-table {
    min-width: 0;
    table-layout: fixed;
  }

  .comu-section.comu-plans .plan-table th:first-child,
  .comu-section.comu-plans .plan-table td:first-child {
    width: 25%;
    font-size: calc(9px * var(--cp-plans-fs, 1));
    line-height: 1.2;
    word-break: break-word;
    white-space: normal;
    padding-left: 2px;
    padding-right: 2px;
  }

  .comu-section.comu-plans .plan-table th:not(:first-child),
  .comu-section.comu-plans .plan-table td:not(:first-child) {
    width: 25%;
    padding-left: 1px;
    padding-right: 1px;
    font-size: calc(9px * var(--cp-plans-fs, 1));
    text-align: center;
    word-break: break-word;
  }

  .comu-section.comu-plans .plan-table tr.group-row td {
    font-size: calc(8px * var(--cp-plans-fs, 1));
    padding-left: 4px;
  }

  .comu-section.comu-plans .plan-header-flex {
    display: flex;
    flex-direction: column;
    align-items: center;
    justify-content: center;
    width: 100%;
    text-align: center;
  }

  .comu-section.comu-plans .plan-header-icon,
  .comu-section.comu-plans .plan-header-text span {
    display: none;
  }

  .comu-section.comu-plans .plan-header-text {
    align-items: center;
    width: 100%;
    text-align: center;
  }

  .comu-section.comu-plans .plan-header-text strong {
    font-size: calc(10px * var(--cp-plans-fs, 1));
    display: block;
    width: 100%;
    text-align: center;
  }

  .comu-section.comu-plans .plan-table th.elite-col {
    overflow: visible;
    vertical-align: middle;
    padding-top: 16px;
  }

  .comu-section.comu-plans .plan-table td span,
  .comu-section.comu-plans .plan-table td small {
    font-size: calc(7px * var(--cp-plans-fs, 1));
    line-height: 1.1;
  }

  .comu-section.comu-plans .price-val {
    font-size: calc(11px * var(--cp-plans-fs, 1));
  }

  .comu-section.comu-plans .plan-table td .check-icon {
    display: block;
    margin: 0 auto;
  }

  /* Unlimited 行：保持移动端原有 11px（与 progressive Unlimited 一致），靠收紧内边距避免换行 */
  .comu-section.comu-plans .plan-table tr.unified-highlight-row td {
    padding: 10px 2px;
  }

  .comu-section.comu-plans .plan-table tr.unified-highlight-row td:not(:first-child),
  .comu-section.comu-plans .plan-table tr.unified-highlight-row td:not(:first-child) strong,
  .comu-section.comu-plans .plan-table tr.progressive-highlight-row td:not(:first-child) {
    font-size: calc(11px * var(--cp-plans-fs, 1));
    line-height: 1.15;
  }

  .comu-section.comu-plans .plan-table tr.unified-highlight-row td:not(:first-child),
  .comu-section.comu-plans .plan-table tr.unified-highlight-row td:not(:first-child) strong {
    white-space: nowrap;
  }

  .comu-section.comu-plans .plan-table tr.progressive-highlight-row td:nth-child(4) {
    font-size: calc(9px * var(--cp-plans-fs, 1));
    line-height: 1.1;
  }
}

@media (max-width: 470px) {
  .comu-section.comu-plans .cp-container {
    width: min(100% - 16px, var(--cp-max-width));
  }

  .comu-section.comu-plans .plan-table th:first-child,
  .comu-section.comu-plans .plan-table td:first-child {
    padding-left: 1px;
    padding-right: 1px;
  }

  .comu-section.comu-plans .plan-table th:not(:first-child),
  .comu-section.comu-plans .plan-table td:not(:first-child) {
    padding-left: 0;
    padding-right: 0;
  }

  .comu-section.comu-plans .plan-table tr.unified-highlight-row td {
    padding: 8px 1px;
  }

  /* 小屏不再把 Unlimited 从 11px 压到 8px，继续靠内边距防换行 */
  .comu-section.comu-plans .plan-table tr.unified-highlight-row td:not(:first-child),
  .comu-section.comu-plans .plan-table tr.unified-highlight-row td:not(:first-child) strong {
    font-size: calc(11px * var(--cp-plans-fs, 1));
    line-height: 1.15;
    white-space: nowrap;
  }
}

/* ==========================================================================
   Hero 内容定位（对齐 Impact Slideshow 的 Mobile/Desktop content position）
   类由 comu-hero.liquid 按设置输出：--d-* 桌面，--m-* 移动。
   默认值（d: bottom-center / m: top-center）复现历史视觉，不新增规则。
   置于文件末尾以覆盖前面的默认布局，勿上移。
   ========================================================================== */
@media (min-width: 1025px) {
  .comu-section.comu-hero--d-v-top .cp-container {
    align-items: flex-start;
  }

  .comu-section.comu-hero--d-v-middle .cp-container {
    align-items: center;
  }

  .comu-hero--d-v-top .hero-content,
  .comu-hero--d-v-middle .hero-content {
    padding-bottom: 0;
    padding-top: clamp(24px, 4svh, 48px);
  }

  .comu-hero--d-h-left .hero-content {
    margin-left: 0;
    text-align: left;
  }

  .comu-hero--d-h-left .hero-copy {
    margin-left: 0;
  }

  .comu-hero--d-h-left .hero-actions {
    justify-content: flex-start;
  }

  .comu-hero--d-h-right .hero-content {
    margin-right: 0;
    text-align: right;
  }

  .comu-hero--d-h-right .hero-copy {
    margin-right: 0;
  }

  .comu-hero--d-h-right .hero-actions {
    justify-content: flex-end;
  }
}

@media (max-width: 1024px) {
  .comu-section.comu-hero--m-v-top .cp-container {
    align-items: flex-start;
    padding-top: calc(var(--sticky-area-height, 72px) + env(safe-area-inset-top, 0px) + var(--hero-content-inset-top));
  }

  .comu-section.comu-hero--m-v-middle .cp-container {
    align-items: center;
    padding-top: 0;
  }

  .comu-section.comu-hero--m-v-bottom .cp-container {
    align-items: flex-end;
    padding-top: 0;
  }

  .comu-section.comu-hero--m-v-middle .hero-content,
  .comu-section.comu-hero--m-v-bottom .hero-content {
    padding-bottom: var(--hero-content-bottom-gap, clamp(32px, 8%, 80px));
  }

  .comu-section.comu-hero--m-h-left {
    text-align: left;
  }

  .comu-hero--m-h-left .hero-content {
    margin-left: 0;
  }

  .comu-hero--m-h-left .hero-copy {
    margin-left: 0;
    padding-left: 0;
  }

  .comu-hero--m-h-left .hero-actions {
    justify-content: flex-start;
  }

  .comu-section.comu-hero--m-h-right {
    text-align: right;
  }

  .comu-hero--m-h-right .hero-content {
    margin-right: 0;
  }

  .comu-hero--m-h-right .hero-copy {
    margin-right: 0;
    padding-right: 0;
  }

  .comu-hero--m-h-right .hero-actions {
    justify-content: flex-end;
  }
}

/* ==========================================================================
   Comu Image Grid — 图片网格（1/2/3/4 列，可选图注）
   ========================================================================== */
.comu-section.comu-image-grid .comu-image-grid__list {
  display: grid;
  grid-template-columns: repeat(var(--cp-grid-columns, 2), minmax(0, 1fr));
  gap: var(--cp-grid-gap, 24px);
}

.comu-image-grid__item {
  display: flex;
  flex-direction: column;
  align-items: center;
  margin: 0;
}

.comu-image-grid__image {
  width: 100%;
  height: auto;
  display: block;
  border-radius: var(--cp-grid-radius, 20px);
  object-fit: cover;
}

.comu-image-grid__caption {
  margin-top: 16px;
  font-size: 18px;
  line-height: 23px;
  font-weight: 500;
  text-align: center;
  color: var(--cp-color-text-main);
}

.comu-section.comu-image-grid .section-heading {
  margin-bottom: 40px;
}

@media (max-width: 768px) {
  .comu-section.comu-image-grid .comu-image-grid__list {
    grid-template-columns: repeat(var(--cp-grid-columns-mobile, 2), minmax(0, 1fr));
    /* 单列（agent stack）保持设计稿的 24px，多列（hardware grid）才收到 16px */
    gap: var(--cp-grid-gap-mobile, var(--cp-grid-gap, 24px));
  }

  .comu-image-grid__caption {
    margin-top: 12px;
    font-size: 14.4px;
    line-height: 23px;
  }
}

/* ==========================================================================
   Comu Image Carousel — 整幅图轮播（复用主题 slideshow-carousel / page-dots）
   ========================================================================== */
.comu-image-carousel__wrapper {
  position: relative;
}

.comu-image-carousel__track {
  display: flex;
  overflow-x: auto;
  scroll-snap-type: x mandatory;
  scrollbar-width: none;
  -webkit-overflow-scrolling: touch;
  border-radius: var(--cp-carousel-radius, 24px);
}

.comu-image-carousel__track::-webkit-scrollbar {
  display: none;
}

.comu-image-carousel__slide {
  flex: 0 0 100%;
  width: 100%;
  scroll-snap-align: start;
}

.comu-image-carousel__image {
  width: 100%;
  height: auto;
  display: block;
  object-fit: cover;
}

.comu-image-carousel__nav {
  position: absolute;
  top: 50%;
  transform: translateY(-50%);
  width: 38px;
  height: 38px;
  border: none;
  border-radius: 50%;
  background: rgba(0, 0, 0, 0.15);
  backdrop-filter: blur(4px);
  -webkit-backdrop-filter: blur(4px);
  color: #ffffff;
  display: flex;
  align-items: center;
  justify-content: center;
  cursor: pointer;
  z-index: 2;
  transition: background 0.3s ease;
  box-shadow: 0 4px 12px rgba(0, 0, 0, 0.05);
}

.comu-image-carousel__nav:hover {
  background: rgba(0, 0, 0, 0.25);
}

.comu-image-carousel__nav svg {
  width: 20px;
  height: 20px;
}

.comu-image-carousel__nav--prev {
  left: 24px;
}

.comu-image-carousel__nav--next {
  right: 24px;
}

.comu-image-carousel__dots {
  position: absolute;
  bottom: 4%;
  left: 50%;
  transform: translateX(-50%);
  display: flex;
  gap: 8px;
  z-index: 2;
}

.comu-image-carousel__dot {
  width: 8px;
  height: 8px;
  padding: 0;
  border: none;
  border-radius: 50%;
  background-color: rgba(17, 24, 39, 0.2);
  cursor: pointer;
  transition: background-color 0.3s, transform 0.3s;
}

.comu-image-carousel__dot[aria-current='true'] {
  background-color: #111827;
  transform: scale(1.2);
}

.comu-section.comu-image-carousel .section-heading {
  margin-bottom: 40px;
}

/* 设计稿圆角断点是 900px（radius-system.css），移动端收到 16px */
@media (max-width: 900px) {
  .comu-image-carousel__track {
    border-radius: var(--cp-carousel-radius-mobile, 16px);
  }
}

@media (max-width: 768px) {
  /* 设计稿移动端不隐藏箭头，而是整体缩小并贴边 */
  .comu-image-carousel__nav {
    width: 24px;
    height: 24px;
  }

  .comu-image-carousel__nav svg {
    width: 14px;
    height: 14px;
  }

  .comu-image-carousel__nav--prev {
    left: 4px;
  }

  .comu-image-carousel__nav--next {
    right: 4px;
  }

  .comu-image-carousel__dot {
    width: 4px;
    height: 4px;
  }
}

/* ==========================================================================
   Comu Video Tabs — 标签页 + 视频（复用主题 video-media）
   ========================================================================== */
.comu-video-tabs__nav {
  display: flex;
  justify-content: center;
  flex-wrap: wrap;
  gap: 12px;
  width: fit-content;
  max-width: 100%;
  margin: 0 auto 32px auto;
}

.comu-video-tabs__tab {
  display: inline-flex;
  align-items: center;
  padding: 10px 22px;
  border: 1px solid var(--cp-color-border);
  border-radius: var(--cp-rounded-pill);
  background: var(--cp-color-bg-alt);
  color: var(--cp-color-text-muted);
  font-size: 13px;
  font-weight: 600;
  line-height: 20px;
  cursor: pointer;
  white-space: nowrap;
  transition: all 0.2s cubic-bezier(0.4, 0, 0.2, 1);
}

.comu-video-tabs__tab:hover {
  border-color: color-mix(in srgb, var(--cp-color-primary) 35%, transparent);
  background: var(--cp-color-bg-alt);
  color: var(--cp-color-primary);
}

/* 设计稿是浅蓝底 + 蓝边 + 蓝字的轻量选中态，不是实心蓝按钮 */
.comu-video-tabs__tab.is-active {
  background: color-mix(in srgb, var(--cp-color-primary) 6%, transparent);
  border-color: color-mix(in srgb, var(--cp-color-primary) 65%, transparent);
  color: var(--cp-color-primary);
  box-shadow: none;
}

/* PC 端所有 Tab 等宽，视觉是整齐一排 */
@media (min-width: 901px) {
  .comu-video-tabs__tab {
    width: 170px;
    justify-content: center;
    padding-left: 0;
    padding-right: 0;
  }
}

.comu-video-tabs__panel[hidden] {
  display: none;
}

/* 面板底色 + 强制 16:9，避免仅有封面图时切 Tab 高度跳动 */
.comu-video-tabs__panels {
  position: relative;
  width: 100%;
  overflow: hidden;
  border-radius: var(--cp-video-radius, 20px);
  background: #f9fafb;
}

.comu-video-tabs__media--poster {
  position: relative;
  width: 100%;
  aspect-ratio: 16 / 9;
}

.comu-video-tabs__media--poster > img {
  position: absolute;
  inset: 0;
  width: 100%;
  height: 100%;
  object-fit: cover;
}

/* 图片型标签页（首页 #app）。默认强制 16:9 与视频面板一致；
   media_fit=natural 时按图片原始比例，需要图组内比例一致否则切换会跳高度。 */
.comu-video-tabs__media--image {
  position: relative;
  display: block;
  width: 100%;
  aspect-ratio: 16 / 9;
}

.comu-video-tabs__media--image > img {
  width: 100%;
  height: 100%;
  display: block;
  object-fit: cover;
}

.comu-video-tabs--fit-natural .comu-video-tabs__media--image {
  aspect-ratio: auto;
}

.comu-video-tabs--fit-natural .comu-video-tabs__media--image > img {
  height: auto;
  object-fit: contain;
}

/* 标题区间距：设计稿 24px（interactive 区块 18px），不是全局的 56px */
.comu-video-tabs .section-heading {
  margin-bottom: 24px;
}

#interactive-features .section-heading {
  margin-bottom: 18px;
}

/* video-showcase 型区块（TVC / 精工）标题放大到 32px */
#tvc-wrapper .section-heading h2,
#precision-engineering .section-heading h2 {
  font-size: 32px;
  font-weight: 700;
  line-height: 40px;
  color: var(--cp-color-text-main, #1f2937);
  margin-bottom: 11px;
}

/* TVC 视频框：黑底 + 常驻遮罩（hover 加深）+ 外投影 */
#tvc-wrapper .comu-video-tabs__media {
  position: relative;
  background-color: #000000;
  box-shadow: 0 10px 30px rgba(0, 0, 0, 0.1);
  cursor: pointer;
}

#tvc-wrapper .comu-video-tabs__media::after {
  content: '';
  position: absolute;
  inset: 0;
  z-index: 1;
  background: rgba(0, 0, 0, 0.25);
  pointer-events: none;
  transition: background 0.3s ease;
}

#tvc-wrapper .comu-video-tabs__media:hover::after {
  background: rgba(0, 0, 0, 0.4);
}

#tvc-wrapper .comu-video-tabs__media video,
#tvc-wrapper .comu-video-tabs__media img {
  transition: transform 0.3s ease;
}

#tvc-wrapper .comu-video-tabs__media:hover video,
#tvc-wrapper .comu-video-tabs__media:hover img {
  transform: scale(1.02);
}

.comu-video-tabs__media {
  display: block;
  width: 100%;
  overflow: hidden;
  border-radius: var(--cp-video-radius, 24px);
  /* 把播放按钮的 z-index 关在视频框内，避免盖住 fixed 的悬浮加购条（.product-quick-add，z-index: 2） */
  isolation: isolate;
}

.comu-video-tabs__media video,
.comu-video-tabs__media img,
.comu-video-tabs__media iframe {
  width: 100%;
  height: 100%;
  display: block;
  object-fit: cover;
  border: 0;
}

.comu-video-play-btn {
  position: absolute;
  top: 24px;
  right: 24px;
  z-index: 2;
  display: flex;
  align-items: center;
  justify-content: center;
  width: 60px;
  height: 60px;
  padding: 0;
  border: none;
  border-radius: 50%;
  background: rgba(0, 0, 0, 0.85);
  box-shadow: 0 8px 24px rgba(0, 0, 0, 0.15);
  color: #ffffff;
  cursor: pointer;
  transition: background-color 0.2s ease, transform 0.2s ease;
}

video-media:hover > .comu-video-play-btn,
.comu-video-tabs__media--inset:hover > .comu-video-play-btn {
  background: #000000;
  transform: scale(1.05);
}

.comu-video-play-btn svg {
  width: 26px;
  height: 26px;
}

.comu-video-play-btn__play {
  margin-left: 5px;
}

.comu-video-play-btn__pause,
.comu-video-play-btn[data-playing='true'] .comu-video-play-btn__play {
  display: none;
}

.comu-video-play-btn[data-playing='true'] .comu-video-play-btn__pause {
  display: block;
}

@media (max-width: 768px) {
  .comu-video-play-btn {
    top: 16px;
    right: 16px;
    width: 53px;
    height: 53px;
  }

  .comu-video-play-btn svg {
    width: 22px;
    height: 22px;
  }

  /* 设计稿移动端是三列等宽网格，不是横向滚动 */
  .comu-video-tabs__nav {
    display: grid;
    grid-template-columns: repeat(3, 1fr);
    gap: 8px;
    width: 100%;
    max-width: 100%;
    margin-bottom: 16px;
    overflow: visible;
    text-align: center;
  }

  .comu-video-tabs__tab {
    display: flex;
    align-items: center;
    justify-content: center;
    margin: 0;
    padding: 8px 4px;
    font-size: 12px;
    font-weight: 600;
    line-height: 1.2;
    white-space: normal;
  }

  /* 之前这里写死了 white-space: nowrap，长文案（Speaker-Labeled & Searchable AI Notes）
     在窄屏必然溢出。设计稿是 white-space: normal + 换行，字号 12px。 */
  .comu-video-tabs__nav {
    grid-template-columns: repeat(var(--cp-vt-tab-cols-m, 3), minmax(0, 1fr));
  }

  .comu-video-tabs--tabs-equal .comu-video-tabs__nav {
    display: grid;
    max-width: 100%;
  }

  .comu-video-tabs--tabs-equal .comu-video-tabs__tab {
    height: auto;
    min-height: 40px;
    padding: 8px 6px;
    font-size: 12px;
  }

  #tvc-wrapper .section-heading h2,
  #precision-engineering .section-heading h2 {
    font-size: 24px;
    line-height: 32px;
  }

  .comu-video-play-btn__play {
    margin-left: 4px;
  }

  /* Video Tabs 的播放键在移动端另有一档，比通用值小得多。
     设计稿 product-first-section.css 移动端共三档：
       通用 .video-play-btn            → 53×53 / 上右 16 / svg 22（App 下载页的视频展示模块用这档）
       .hp-video-carousel .video-play-btn   → 34×34 / 上右 10 / svg 14（首页 Why Choose Comu?）
       .cap-features-tabs / .cap-hero-video → 同上 34 档（商品页 Just Record and Ask、
                                              Precision Engineering、TVC）
     我们所有 comu-video-tabs 实例都对应后两类，所以整体走 34 档；
     comu-video-showcase（App 下载页）不在这里，继续用通用的 53 档。
     图标的 margin-left 也要归零——设计稿在这一档显式写了 0，
     34px 的圆里再偏移 4px 会明显偏心。 */
  .comu-video-tabs .comu-video-play-btn {
    top: 10px;
    right: 10px;
    width: 34px;
    height: 34px;
  }

  .comu-video-tabs .comu-video-play-btn svg {
    width: 14px;
    height: 14px;
  }

  .comu-video-tabs .comu-video-play-btn__play {
    margin-left: 0;
  }
}

/* Hero 纯图片模式：object-position 可配，其余定位复用 .hero-video 既有规则 */
.comu-section.comu-hero .hero-media-image {
  object-position: var(--cp-hero-img-pos, center);
}

@media (max-width: 767.98px) {
  .comu-section.comu-hero .hero-media-image {
    object-position: var(--cp-hero-img-pos-m, var(--cp-hero-img-pos, center));
  }
}

.comu-section.comu-subscribe .subscribe-card-subtext {
  margin-top: 8px;
  color: var(--cp-color-text-muted);
  font-size: 15px;
  line-height: 1.6;
}

.comu-section.comu-subscribe .subscribe-card-subtext p {
  margin: 0;
}

/* --- Comu Scenarios · 横滑卡片布局（layout=cards）------------------------
   源自设计稿 product-sections.css:1582-1672。全部加 .comu-scenarios 前缀，
   避免与其他模块串味；右侧 breakout 那两行是卡片贴屏幕右缘的关键，勿删。 */
.comu-section.comu-scenarios .comu-scenarios__wrapper {
  margin-top: 48px;
}

.comu-section.comu-scenarios .comu-scenarios__track {
  display: flex;
  gap: 24px;
  overflow-x: auto;
  padding-bottom: 21px;
  scroll-snap-type: x mandatory;
  scrollbar-width: none;
  -webkit-overflow-scrolling: touch;
  /* 左侧跟随容器，右侧出血到屏幕边缘 */
  margin-right: calc(50% - 50vw);
  padding-right: max(24px, calc(50vw - 50%));
}

.comu-section.comu-scenarios .comu-scenarios__track::-webkit-scrollbar {
  display: none;
}

.comu-section.comu-scenarios .scenario-card-new {
  flex: 0 0 min(85vw, var(--cp-scenario-card-w, 340px));
  scroll-snap-align: start;
  display: flex;
  flex-direction: column;
  gap: 20px;
}

.comu-section.comu-scenarios .scenario-image {
  width: 100%;
  aspect-ratio: 16 / 9;
  border-radius: 24px;
  overflow: hidden;
  background: #f3f4f6;
  transform: translateZ(0);
}

.comu-section.comu-scenarios .scenario-image img {
  width: 100%;
  height: 100%;
  object-fit: cover;
  transition: transform 0.5s ease;
}

.comu-section.comu-scenarios .scenario-card-new:hover .scenario-image img {
  transform: scale(1.05);
}

.comu-section.comu-scenarios .scenario-text-new {
  padding: 0 8px;
  font-size: 16px;
  line-height: 1.6;
  color: var(--cp-color-text-muted);
}

.comu-section.comu-scenarios .scenario-text-new strong {
  display: block;
  margin-bottom: 6px;
  color: var(--cp-color-text-main);
  font-size: 20px;
  font-weight: 600;
}

.comu-section.comu-scenarios .comu-scenarios__controls {
  display: flex;
  justify-content: center;
  gap: 16px;
  margin-top: 21px;
}

.comu-section.comu-scenarios .comu-scenarios__nav {
  display: flex;
  align-items: center;
  justify-content: center;
  width: 38px;
  height: 38px;
  border: none;
  border-radius: 50%;
  background: #f3f4f6;
  color: #111827;
  cursor: pointer;
  transition: background-color 0.2s ease, opacity 0.2s ease;
}

.comu-section.comu-scenarios .comu-scenarios__nav:hover {
  background: #e5e7eb;
}

.comu-section.comu-scenarios .comu-scenarios__nav[disabled] {
  opacity: 0.5;
  cursor: not-allowed;
}

.comu-section.comu-scenarios .comu-scenarios__nav svg {
  width: 20px;
  height: 20px;
}

/* ==========================================================================
   Comu Bento Benefits — 购买保障网格（设计稿 #bento-benefits-container）
   卡面只显示图标+标题+底图；正文与支付图标是弹窗的数据源，卡面上隐藏。
   ========================================================================== */
/* 设计稿是 `display:grid; grid-template-columns: repeat(4,1fr)`，这里刻意改用 flex：
   设计稿固定 4 列，而这个 section 的列数由运营配置决定，空列会被 Liquid 跳过。
   grid 的固定 4 轨会在只配 3 列时留一道空白，flex + `flex:1` 则自然均分。
   ≤900px 仍按设计稿切回 2 列 grid。勿按设计稿字面值改回 grid。 */
.comu-section.comu-bento .bento-grid-masonry {
  display: flex;
  gap: var(--cp-bento-gap, 12px);
  align-items: stretch;
}

.comu-section.comu-bento .bento-col {
  display: flex;
  flex-direction: column;
  gap: var(--cp-bento-gap, 12px);
  flex: 1;
  min-width: 0;
}

.comu-section.comu-bento .bento-card {
  position: relative;
  display: flex;
  flex-direction: column;
  justify-content: flex-start;
  align-items: center;
  text-align: center;
  overflow: hidden;
  min-height: 0;
  padding: 17px 24px 32px;
  border-radius: var(--cp-bento-radius, 12px);
  background: var(--cp-bento-card-bg, #f8f9fa);
  cursor: pointer;
  transition: background-color 0.2s ease;
}

.comu-section.comu-bento .bento-card:hover,
.comu-section.comu-bento .bento-card:focus-visible {
  background: var(--cp-bento-card-bg-hover, #f1f3f5);
}

.comu-section.comu-bento .bento-content {
  position: relative;
  z-index: 2;
  width: 100%;
}

/* ⚠️ 卡面不显示图标：设计稿 site-sections.css:393-398 明确把 .bento-icon 与 .bento-body、
   .bento-payments 一起隐藏，卡面只留标题 + 底图。图标存在 DOM 里只是为了给弹窗当数据源
   （comu-sections.js 的 initBentoModule 会克隆它并改类名为 .comu-bento-modal__icon）。
   运营上传 SVG 图标后若发现卡面冒出图标，是这条规则被删了，不是配错。 */

.comu-section.comu-bento .bento-heading {
  margin: 0;
  font-size: 17.6px;
  font-weight: 600;
  line-height: 1.3;
  color: var(--cp-color-text-main);
}

.comu-section.comu-bento .bento-heading--long {
  font-size: 14.6px;
}

/* 数字强调卡 */
.comu-section.comu-bento .bento-heading--stat {
  display: flex;
  flex-direction: column;
  gap: 2px;
}

/* 设计稿 site-sections.css:614-625 —— 数字与支付主字是渐变描字，不是纯色。
   用 background-clip:text 实现；-webkit-text-fill-color 必须一起写，否则 Safari 不透明。 */
.comu-section.comu-bento .bento-stat-value,
.comu-section.comu-bento .bento-pay-main {
  font-weight: 800;
  line-height: 1.1;
  letter-spacing: -0.8px;
  background: var(--cp-bento-gradient, linear-gradient(135deg, #0062ff 0%, #00c6ff 45%, #36e4da 100%));
  -webkit-background-clip: text;
  background-clip: text;
  -webkit-text-fill-color: transparent;
  color: transparent;
}

.comu-section.comu-bento .bento-stat-value {
  display: block;
  font-size: 44px;
  margin-bottom: 6px;
}

.comu-section.comu-bento .bento-stat-label {
  display: block;
  font-size: 17.6px;
  font-weight: 600;
  letter-spacing: 0.2px;
  color: var(--cp-color-text-main);
}

/* 支付保障卡 */
.comu-section.comu-bento .bento-heading--payment {
  display: flex;
  flex-direction: column;
  gap: 2px;
}

.comu-section.comu-bento .bento-pay-top,
.comu-section.comu-bento .bento-pay-bottom {
  display: block;
  font-size: 17.6px;
  font-weight: 600;
  letter-spacing: 0.2px;
  color: var(--cp-color-text-main);
}

/* 主字与图标并排（设计稿 .payment-main-row） */
.comu-section.comu-bento .bento-pay-row {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  gap: 10px;
  margin: 2px 0;
}

.comu-section.comu-bento .bento-pay-icon {
  height: 48px;
  width: auto;
  flex-shrink: 0;
}

.comu-section.comu-bento .bento-pay-main {
  font-size: 42px;
}

/* 数字卡与支付卡整卡居中（设计稿用 :has()，这里直接挂在 card_style 类上，兼容性更好） */
.comu-section.comu-bento .bento-card--stat,
.comu-section.comu-bento .bento-card--payment {
  justify-content: center;
  align-items: center;
  padding: 24px;
  text-align: center;
}

.comu-section.comu-bento .bento-heading--stat,
.comu-section.comu-bento .bento-heading--payment {
  align-items: center;
  text-align: center;
  width: 100%;
}

/* 设计稿 site-sections.css:569 —— 底图是「整卡铺满、贴底裁切」的背景层，
   不是流式排在底部的一张图。z-index 1 压在 .bento-content(2) 之下。 */
.comu-section.comu-bento .bento-bottom-img {
  position: absolute;
  bottom: 0;
  left: 0;
  width: 100%;
  height: 100%;
  display: block;
  object-position: center bottom;
  border-radius: inherit;
  z-index: 1;
  pointer-events: none;
  object-fit: cover;
}

/* ⚠️ 设计前提：正文、支付图标只作为弹窗的数据源，卡面上不显示。勿删这条。 */
.comu-section.comu-bento .bento-icon,
.comu-section.comu-bento .bento-body,
.comu-section.comu-bento .bento-payments {
  display: none;
}

/* 支付徽章：设计稿按品牌配色，类名由文案 | handle 生成。
   运营在「支付方式」里填的文案决定类名，例如 "Apple Pay" → .payment-badge--apple-pay。
   填了未收录的品牌名会落到下面的默认深色样式，不会破版。 */
/* ⚠️ 只给弹窗里的徽章排版。卡面上的 .bento-payments 必须保持 display:none
   （设计稿卡面只有「Secure and flexible / Payment / Protection」三行）。
   这里如果把 .bento-payments 一起写进来，会覆盖上面的隐藏规则，
   徽章就会跑到卡面上并把渐变主字挤出卡片——本项目已经因此出过一次问题。 */
.comu-bento-modal__payments {
  display: flex;
  flex-wrap: wrap;
  gap: 8px;
  align-items: center;
}

.payment-badge {
  padding: 2px 8px;
  height: 22px;
  min-width: 50px;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  border: 1px solid #2e2e2e;
  border-radius: 4px;
  background-color: #1a1a1a;
  color: #888;
  font-size: 9px;
  font-weight: 800;
  text-transform: uppercase;
  user-select: none;
}

.payment-badge--amazon,
.payment-badge--amazon-pay { background-color: #fff; color: #000; border-color: #e5e5e5; }
.payment-badge--amex { background-color: #1b75bc; color: #fff; border-color: #1b75bc; }
.payment-badge--apple-pay { background-color: #fff; color: #000; border-color: #e5e5e5; }
.payment-badge--diners,
.payment-badge--diners-club { background-color: #0079c1; color: #fff; border-color: #0079c1; }
.payment-badge--discover { background-color: #f68620; color: #fff; border-color: #f68620; }
.payment-badge--google-pay { background-color: #fff; color: #444; border-color: #e5e5e5; }
.payment-badge--mastercard { background-color: #1c1c1c; color: #ff5f00; border-color: #2e2e2e; }
.payment-badge--paypal { background-color: #fff; color: #003087; border-color: #e5e5e5; }
.payment-badge--shop-pay { background-color: #5a31f4; color: #fff; border-color: #5a31f4; }
.payment-badge--visa { background-color: #1a1f71; color: #fff; border-color: #1a1f71; }

/* --- 弹窗（由 comu-sections.js 动态建 <dialog>）--- */
.comu-bento-modal {
  width: 90%;
  max-width: 520px;
  padding: 28px;
  border: none;
  border-radius: 20px;
  background: #ffffff;
  box-shadow: 0 24px 60px rgb(0 0 0 / 18%);
  overflow: visible;
}

.comu-bento-modal::backdrop {
  background: rgb(0 0 0 / 55%);
  -webkit-backdrop-filter: blur(4px);
  backdrop-filter: blur(4px);
}

.comu-bento-modal__close {
  position: absolute;
  top: -48px;
  right: 0;
  display: flex;
  align-items: center;
  justify-content: center;
  width: 40px;
  height: 40px;
  border: none;
  border-radius: 50%;
  background: rgb(255 255 255 / 20%);
  color: #ffffff;
  cursor: pointer;
  transition: background-color 0.2s ease, transform 0.2s ease;
}

.comu-bento-modal__close:hover {
  background: rgb(255 255 255 / 36%);
  transform: scale(1.05);
}

.comu-bento-modal__close svg {
  width: 20px;
  height: 20px;
}

.comu-bento-modal__icon {
  width: 40px;
  height: 40px;
  display: block;
  margin-bottom: 14px;
  object-fit: contain;
}

.comu-bento-modal__title {
  margin: 0 0 14px;
  font-size: 20px;
  font-weight: 600;
  line-height: 1.3;
  color: #111827;
}

.comu-bento-modal__body h5 {
  margin: 0 0 8px;
  font-size: 16px;
  font-weight: 600;
  color: #111827;
}

.comu-bento-modal__body p {
  margin: 0 0 10px;
  font-size: 15px;
  line-height: 1.6;
  color: #4b5563;
}

.comu-bento-modal__body .small-note {
  font-size: 13px;
  color: #6b7280;
}

.comu-bento-modal__body .bento-link {
  display: inline-block;
  margin-top: 4px;
  color: var(--cp-color-primary, #2277ff);
  font-weight: 500;
  text-decoration: underline;
}

.comu-bento-modal__payments {
  display: flex;
  flex-wrap: wrap;
  gap: 8px;
  margin-top: 16px;
}

/* ⚠️ 这里**只设字号**，不要再设底色/文字色/描边。
   原来这条把 padding / border / background / color 全写死成统一的灰色药丸，
   两个类的权重压过了下面那批 `.payment-badge--amex` 等单类品牌色规则，
   于是七个徽章在弹窗里长得一模一样——设计稿是逐个品牌配色的。
   设计稿对应规则是 `.bento-payments .payment-badge { font-size: 11px }`，
   其余（2px 8px 内边距、4px 圆角、800 字重、大写）都由 .payment-badge 基础样式给。 */
.comu-bento-modal__payments .payment-badge {
  font-size: 11px;
}

/* 设计稿 ≤900px：4 列 flex 改 2 列 grid，字号改 vw。这是既定行为，勿改成 rem。 */
@media (max-width: 900px) {
  .comu-section.comu-bento .bento-grid-masonry {
    display: grid;
    grid-template-columns: repeat(2, minmax(0, 1fr));
    overflow-x: visible;
  }

  .comu-section.comu-bento .bento-col {
    aspect-ratio: 282 / 400;
  }

  .comu-section.comu-bento .bento-heading {
    font-size: 3.1vw;
  }

  .comu-section.comu-bento .bento-heading--long {
    font-size: 2.7vw;
  }

  .comu-section.comu-bento .bento-stat-value {
    font-size: 8.5vw;
  }

  .comu-section.comu-bento .bento-pay-main {
    font-size: 6.5vw;
  }

  .comu-section.comu-bento .bento-stat-label,
  .comu-section.comu-bento .bento-pay-top,
  .comu-section.comu-bento .bento-pay-bottom {
    font-size: 3.1vw;
  }

  /* 卡片本身也随视口缩放（设计稿 site-sections.css:504-508），
     否则两列变窄后 24px 的内边距会把文字挤成竖条。 */
  .comu-section.comu-bento .bento-card {
    padding: 2.76vw 3.91vw 5.24vw;
    border-radius: 1.97vw;
  }

  .comu-section.comu-bento .bento-card--stat,
  .comu-section.comu-bento .bento-card--payment {
    padding: 2.76vw 3.91vw;
  }

  .comu-section.comu-bento .bento-pay-icon {
    height: 7.5vw;
  }

  .comu-section.comu-bento .bento-pay-row {
    gap: 1.2vw;
  }
}

@media (max-width: 600px) {
  .comu-section.comu-bento .bento-heading {
    font-size: 2.8vw;
  }

  .comu-section.comu-bento .bento-heading--long {
    font-size: 2.4vw;
  }

  .comu-section.comu-bento .bento-stat-value {
    font-size: 7.5vw;
  }

  .comu-section.comu-bento .bento-pay-main {
    font-size: 6vw;
  }

  .comu-section.comu-bento .bento-stat-label,
  .comu-section.comu-bento .bento-pay-top,
  .comu-section.comu-bento .bento-pay-bottom {
    font-size: 2.8vw;
  }

  .comu-section.comu-bento .bento-pay-icon {
    height: 6.5vw;
  }

  .comu-section.comu-bento .bento-card {
    padding: 2.16vw 3.06vw 4.1vw;
    border-radius: 1.54vw;
  }

}

/* ==========================================================================
   Comu Product Entry — 首页商品入口卡（设计稿 #products）
   源自 product-sections.css:165-285 + :558-566，全部加 .comu-product-entry 前缀
   ========================================================================== */
.comu-section.comu-product-entry .product-entry-grid {
  display: grid;
  grid-template-columns: repeat(var(--cp-pe-cols, 2), minmax(0, 1fr));
  gap: 24px;
}

.comu-section.comu-product-entry .product-card-immersive {
  position: relative;
  height: var(--cp-pe-height, 480px);
  border-radius: var(--cp-pe-radius, 24px);
  overflow: hidden;
  display: flex;
  align-items: flex-end;
}

/* 背景层用 <img> 而非 background-image，才能走 CDN 裁剪与 srcset */
.comu-section.comu-product-entry .product-card-bg {
  position: absolute;
  inset: 0;
  background: #f3f4f6;
  transition: transform 0.5s ease;
}

.comu-section.comu-product-entry .product-card-bg__img {
  width: 100%;
  height: 100%;
  display: block;
  object-fit: cover;
}

.comu-section.comu-product-entry .product-card-immersive:hover .product-card-bg {
  transform: scale(1.05);
}

.comu-section.comu-product-entry .product-card-overlay {
  position: absolute;
  inset: 0;
  pointer-events: none;
  background: linear-gradient(
    to top,
    rgb(0 0 0 / var(--cp-pe-overlay, 55%)) 0%,
    transparent 40%
  );
}

.comu-section.comu-product-entry .product-card-content {
  position: relative;
  /* 只需压过同一张卡里绝对定位的背景图，1 就够。
     原来写 10 与吸顶 header 的 z-index 打平，而这一节在 DOM 里排在 header 之后——
     z-index 相同时后出现的元素赢，于是卡片上的按钮和价格会盖住 header。 */
  z-index: 1;
  width: 100%;
  padding: 32px;
  display: flex;
  justify-content: space-between;
  align-items: flex-end;
  gap: 16px;
  flex-wrap: wrap;
}

.comu-section.comu-product-entry .product-card-badge {
  position: absolute;
  top: -12px;
  left: 32px;
  display: inline-block;
  padding: 6px 12px;
  border-radius: 6px;
  background: #fff2e0;
  color: #936729;
  font-size: 12px;
  font-weight: 700;
}

.comu-section.comu-product-entry .product-card-text {
  flex: 1;
  min-width: 0;
  padding-right: 24px;
  color: #ffffff;
}

.comu-section.comu-product-entry .product-card-title-row {
  display: flex;
  align-items: center;
  flex-wrap: wrap;
  gap: 12px;
  margin-bottom: 12px;
}

.comu-section.comu-product-entry .product-card-title {
  margin: 0;
  font-size: 18px;
  font-weight: 600;
  color: #ffffff;
  letter-spacing: 0;
}

/* 设计稿的价格是橙色高亮（#FF5A00），不是白字 —— 压在深色遮罩上刚好跳出来。 */
.comu-section.comu-product-entry .product-card-price {
  display: inline-flex;
  align-items: baseline;
  gap: 8px;
  color: #ff5a00;
  /* 不换行：设计稿标题与价格是同一行，价格断行会把标题挤到上一行 */
  white-space: nowrap;
}

.comu-section.comu-product-entry .product-card-price__now {
  font-size: 20px;
  font-weight: 700;
}

.comu-section.comu-product-entry .product-card-price__was {
  /* 设计稿移动端划线价是 13px（现价 20px/700 两边一致，只有这一项差 1px） */
  font-size: 13px;
  color: rgb(255 255 255 / 65%);
}

.comu-section.comu-product-entry .product-card-desc {
  margin: 0;
  font-size: 16px;
  line-height: 1.6;
  color: rgb(255 255 255 / 85%);
}

/* 设计稿 index.html 里两张卡的 .product-card-actions 都带内联
   `flex-direction: column; gap: 10px; align-items: flex-end`——按钮是竖排贴右下角的，
   不是横排。CSS 文件里的 `.product-card-actions { display:flex; gap:12px }` 是被内联覆盖掉的基类，
   照抄它会得到错误的横排布局。移动端（≤768px）再切回横排铺满。 */
.comu-section.comu-product-entry .product-card-actions {
  display: flex;
  flex-direction: column;
  align-items: flex-end;
  gap: 10px;
  flex-shrink: 0;
}

.comu-section.comu-product-entry .btn-light-gray {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  height: 40px;
  min-width: 130px;
  padding: 0 24px;
  border: none;
  border-radius: 999px;
  background: #e5e5ea;
  color: #000000;
  font-size: 15px;
  font-weight: 600;
  text-decoration: none;
  white-space: nowrap;
  transition: background-color 0.2s ease, transform 0.2s ease;
}

.comu-section.comu-product-entry .btn-light-gray:hover {
  background: #d1d1d6;
  transform: translateY(-1px);
}

@media (max-width: 992px) {
  .comu-section.comu-product-entry .product-entry-grid {
    grid-template-columns: minmax(0, 1fr);
  }
}

@media (max-width: 768px) {
  /* 设计稿移动端并没有把文字与按钮拆成上下两行 —— 仍是左文右钮的横排，
     只是内边距收到 20px、按钮缩到 30px 高、间距 6px。之前那版竖排是我自己加的，
     跟设计稿不符，已改回。 */
  /* 设计稿移动端把卡片改成 23:20 的自然高度，而不是桌面的 480px 固定高——
     固定高会把背景图里烘焙好的奖项角标裁掉。 */
  .comu-section.comu-product-entry .product-card-immersive {
    height: auto;
    aspect-ratio: 23 / 20;
  }

  .comu-section.comu-product-entry .product-card-content {
    padding: 20px;
    flex-direction: row;
    align-items: flex-end;
  }

  .comu-section.comu-product-entry .product-card-text {
    padding-right: 0;
  }

  .comu-section.comu-product-entry .product-card-actions {
    flex: 0 0 auto;
    gap: 6px;
  }

  /* 小屏划线价被 Learn more 按钮遮挡的修复（2026-08-12）
     原因：.product-card-price 内容宽 215px（"$179.99 USD" 125 + gap 8 + "$256.99 USD" 82），
     而 .product-card-title-row 在 375px 下只有 168px、320px 下只有 113px。
     它带 white-space:nowrap，作为 flex 项又是 min-width:auto，既压不动也不换行，
     整块溢出到右侧按钮底下（≤390px 起重叠，≤360px 完全被盖住）。

     flex-wrap:wrap 让 min-content 从「两条价格之和」降为「最宽的那一条」，
     放不下时划线价自然掉到第二行——只在真的放不下时才换，宽屏仍是一行。
     min-width:0 一并解开 flex 项默认的最小尺寸限制。 */
  .comu-section.comu-product-entry .product-card-content .product-card-price {
    flex-wrap: wrap;
    min-width: 0;
    max-width: 100%;
    row-gap: 2px;
  }

  /* 两条价格各自仍不许断行，否则 "$179.99" 和 "USD" 会被拆开 */
  .comu-section.comu-product-entry .product-card-content .product-card-price__now,
  .comu-section.comu-product-entry .product-card-content .product-card-price__was {
    white-space: nowrap;
  }

  .comu-section.comu-product-entry .product-card-content .product-card-price__now {
    font-size: 17px;
  }

  .comu-section.comu-product-entry .product-card-content .product-card-price__was {
    font-size: 12px;
  }

  .comu-section.comu-product-entry .product-card-actions .btn-light-gray {
    height: 30px;
    min-width: 0;
    padding: 0 16px;
    font-size: 13px;
  }

}

/* ==========================================================================
   Comu Quick Nav — 锚点导航条
   ========================================================================== */
.comu-quick-nav {
  background-color: var(--cp-quick-nav-bg, #f8f9fa);
  border-bottom: 1px solid var(--cp-quick-nav-border, #e5e7eb);
  transition: box-shadow 0.3s ease;
}

.comu-quick-nav__list {
  display: flex;
  justify-content: center;
  align-items: center;
  list-style: none;
  /* 等价设计稿的 .container：最大 1128px、左右各 24px 安全边距 */
  width: min(100% - 48px, var(--cp-max-width));
  margin: 0 auto;
  padding: 0;
  flex-wrap: nowrap;
  overflow-x: auto;
  scrollbar-width: none;
  -webkit-overflow-scrolling: touch;
}

.comu-quick-nav__list::-webkit-scrollbar {
  display: none;
}

.comu-quick-nav__list li {
  flex-shrink: 0;
}

.comu-quick-nav__link {
  display: block;
  padding: 16px 28px;
  color: var(--cp-quick-nav-color, #667085);
  font-size: 15px;
  font-weight: 500;
  text-decoration: none;
  white-space: nowrap;
  border-bottom: 2px solid transparent;
  transition: color 0.2s ease, border-color 0.2s ease;
}

.comu-quick-nav__link:hover {
  color: var(--cp-quick-nav-hover, #191c1d);
}

.comu-quick-nav__link.is-active {
  color: var(--cp-quick-nav-active, #2277ff);
  border-bottom-color: var(--cp-quick-nav-active, #2277ff);
  font-weight: 600;
}

/* 设计稿断点是 900px，不是 768px —— 平板/横屏手机同样走移动端参数 */
@media (max-width: 900px) {
  .comu-quick-nav__list {
    justify-content: flex-start;
    padding-left: 16px;
    padding-right: 16px;
  }

  .comu-quick-nav__link {
    padding: 14px 20px;
    font-size: 14px;
  }
}

/* ==========================================================================
   Comu Review Cards — 评论卡横向轮播 + 全文弹窗
   ========================================================================== */
.comu-review-cards__wrapper {
  position: relative;
  margin-top: 32px;
}

.comu-review-cards__track {
  display: flex;
  gap: 24px;
  overflow-x: auto;
  scroll-snap-type: x mandatory;
  scrollbar-width: none;
  -webkit-overflow-scrolling: touch;
  padding-inline: max(24px, calc((100% - var(--cp-max-width)) / 2));
  padding-bottom: 40px;
}

.comu-review-cards__track::-webkit-scrollbar {
  display: none;
}

/* 设计稿卡片高度由内容决定（图 16:9 + 24px + 文案），固定 420px 会在底部留空 */
.comu-review-card {
  flex: 0 0 var(--cp-review-card-width, 400px);
  /* 同时写 width：轨道是 Impact 的 <scroll-carousel> 自定义元素，
     万一它的 display 被上游改掉，只靠 flex-basis 会失效，卡片会撑满整行。 */
  width: var(--cp-review-card-width, 400px);
  max-width: 100%;
  height: auto;
  box-sizing: border-box;
  padding-inline: 40px;
  display: flex;
  flex-direction: column;
  scroll-snap-align: start;
  text-align: left;
}

.comu-review-card[data-comu-review-open] {
  cursor: pointer;
}

.comu-review-card__media {
  width: 100%;
  /* 配图改为 1:1 正方形展示；比例做成变量，以后要调不必再改 CSS */
  aspect-ratio: var(--cp-review-media-ratio, 1 / 1);
  background: #f3f4f6;
  border-radius: 8px;
  overflow: hidden;
  margin-bottom: 24px;
}

.comu-review-card__image {
  width: 100%;
  height: 100%;
  display: block;
  object-fit: cover;
}

.comu-review-card__body {
  display: flex;
  flex: 1;
  flex-direction: column;
}

.comu-review-card__top {
  display: flex;
  align-items: center;
  justify-content: space-between;
  margin-bottom: 12px;
}

.comu-review-card__stars {
  display: flex;
  gap: 4px;
  color: var(--cp-review-star, #facc15);
}

/* 设计稿是纯实心星（stroke: none）；带描边会让星星视觉上粗一圈 */
.comu-review-card__stars svg {
  width: 16px;
  height: 16px;
  stroke: none;
}

/* 弹窗星星比卡片大一档：设计稿卡片 .story-rating .star-icon 是 16px，
   弹窗 .modal-stars 没有尺寸覆盖，走 lucide 默认 24px。 */
.comu-review-modal__head .comu-review-card__stars svg {
  width: 24px;
  height: 24px;
}

/* 弹窗里的星色比卡片深一档 */
.comu-review-modal__head .comu-review-card__stars {
  color: var(--cp-review-star-modal, #f59e0b);
}

.comu-review-card__expand {
  display: flex;
  align-items: center;
  justify-content: center;
  width: 24px;
  height: 24px;
  padding: 4px;
  box-sizing: content-box;
  border: 2px solid #111827;
  border-radius: 50%;
  color: #111827;
  transition: transform 0.2s ease;
}

.comu-review-card__expand svg {
  width: 100%;
  height: 100%;
}

.comu-review-card:hover .comu-review-card__expand {
  transform: translate(2px, -2px);
}

.comu-review-card__profile {
  display: flex;
  align-items: baseline;
  gap: 8px;
  margin-bottom: 16px;
}

.comu-review-card__author {
  font-size: 16px;
  font-weight: 600;
  color: var(--cp-review-title, #111827);
}

.comu-review-card__badge {
  font-size: 14px;
  color: var(--cp-review-meta, #6b7280);
}

.comu-review-card__excerpt {
  display: -webkit-box;
  /* 设计稿 .story-review-excerpt 是 3 行截断 */
  -webkit-line-clamp: 3;
  -webkit-box-orient: vertical;
  overflow: hidden;
  text-overflow: ellipsis;
  font-size: 15px;
  line-height: 1.6;
  color: var(--cp-review-body, #4b5563);
  margin: 0;
}

.comu-review-card__excerpt strong {
  color: #111827;
  margin-right: 4px;
}

.comu-review-cards__controls {
  display: flex;
  justify-content: center;
  gap: 16px;
  margin-top: 32px;
}

.comu-review-cards__nav {
  display: flex;
  align-items: center;
  justify-content: center;
  width: 40px;
  height: 40px;
  border: 1px solid #e5e7eb;
  border-radius: 50%;
  background: var(--cp-review-nav-bg, #ffffff);
  color: var(--cp-review-nav-icon, #111827);
  cursor: pointer;
  transition: background-color 0.2s ease, border-color 0.2s ease;
}

.comu-review-cards__nav:hover {
  background: #f3f4f6;
}

.comu-review-cards__nav[disabled] {
  opacity: 0.35;
  cursor: default;
}

.comu-review-cards__nav svg {
  width: 20px;
  height: 20px;
}

.comu-review-modal {
  width: min(900px, calc(100vw - 32px));
  max-height: 85vh;
  padding: 40px;
  border: none;
  border-radius: 20px;
  overflow: visible;
  box-shadow: 0 25px 50px -12px rgba(0, 0, 0, 0.3);
  color: var(--cp-color-text-main);
}

.comu-review-modal::backdrop {
  background: rgba(0, 0, 0, 0.6);
  backdrop-filter: blur(4px);
}

.comu-review-modal__close {
  position: absolute;
  top: -48px;
  right: 0;
  display: flex;
  align-items: center;
  justify-content: center;
  padding: 8px;
  border: none;
  background: none;
  color: #ffffff;
  cursor: pointer;
  transition: transform 0.2s ease;
}

.comu-review-modal__close:hover {
  transform: scale(1.1);
}

.comu-review-modal__close svg {
  width: 26px;
  height: 26px;
}

.comu-review-modal__main {
  display: flex;
  flex-direction: row;
  gap: 32px;
  max-height: calc(85vh - 80px);
}

.comu-review-modal__left {
  flex: 1;
  min-width: 0;
  display: flex;
  flex-direction: column;
  overflow-y: auto;
  padding-right: 12px;
  scrollbar-width: thin;
}

.comu-review-modal__aside {
  width: 320px;
  flex-shrink: 0;
}

.comu-review-modal__figure {
  width: 320px;
  height: 320px;
  border: 1px solid #e5e7eb;
  border-radius: 12px;
  overflow: hidden;
  background: #f9fafb;
}

.comu-review-modal__figure img {
  width: 100%;
  height: 100%;
  display: block;
  object-fit: contain;
}

.comu-review-modal__head {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 16px;
  margin-bottom: 24px;
}

/* 弹窗第一行右侧的日期 */
.comu-review-modal__date {
  font-size: 14px;
  color: var(--cp-review-meta, #6b7280);
  flex: 0 0 auto;
}

/* 弹窗第二行：头像 + 用户名/地区 */
.comu-review-modal__user {
  display: flex;
  align-items: center;
  gap: 12px;
  margin-bottom: 20px;
}

.comu-review-modal__avatar {
  width: 36px;
  height: 36px;
  border-radius: 50%;
  object-fit: cover;
  background-color: #e5e7eb;
  flex-shrink: 0;
}

/* 多图缩略图切换 */
.comu-review-modal__thumbs {
  display: flex;
  flex-wrap: wrap;
  gap: 12px;
  margin-top: 12px;
}

.comu-review-modal__thumb {
  width: 64px;
  height: 64px;
  padding: 0;
  overflow: hidden;
  border: 1px solid #e5e7eb;
  border-radius: 8px;
  background: none;
  opacity: 0.7;
  cursor: pointer;
  transition: opacity 0.2s ease, border-color 0.2s ease;
}

.comu-review-modal__thumb:hover {
  opacity: 1;
}

.comu-review-modal__thumb.is-active {
  border: 2px solid var(--cp-color-primary, #2277ff);
  opacity: 1;
}

.comu-review-modal__thumb img {
  width: 100%;
  height: 100%;
  display: block;
  object-fit: cover;
}

.comu-review-modal__title {
  font-size: 20px;
  font-weight: 700;
  line-height: 1.4;
  margin: 0 0 16px;
}

.comu-review-modal__text {
  position: relative;
  max-height: 140px;
  overflow: hidden;
  transition: max-height 0.3s ease;
}

.comu-review-modal__fade {
  position: absolute;
  bottom: 0;
  left: 0;
  width: 100%;
  height: 60px;
  background: linear-gradient(to bottom, rgba(255, 255, 255, 0), rgba(255, 255, 255, 1));
  pointer-events: none;
}

.comu-review-modal__text.is-expanded .comu-review-modal__fade {
  opacity: 0;
}

.comu-review-modal__body {
  font-size: 15px;
  line-height: 1.6;
  color: #4b5563;
}

.comu-review-modal__more {
  display: flex;
  align-items: center;
  gap: 4px;
  margin-top: 8px;
  padding: 0;
  border: none;
  background: none;
  color: var(--cp-color-primary, #2277ff);
  font-size: 14px;
  font-weight: 600;
  cursor: pointer;
}

.comu-review-modal__more svg {
  width: 16px;
  height: 16px;
  transition: transform 0.2s ease;
}

.comu-review-modal__more.is-expanded svg {
  transform: rotate(180deg);
}

@media (max-width: 768px) {
  .comu-review-cards__track {
    gap: 16px;
    padding-inline: 0;
  }

  /* 设计稿移动端并没有改 .user-story-block 的宽度与内边距——仍是
     `flex: 0 0 400px; padding: 0 40px`，卡片略宽于 375 视口，右侧刚好露出下一张的一角。
     之前改成 82vw + 去掉内边距，卡片偏窄且文字贴边，与设计稿不符。 */
  .comu-review-card {
    flex-basis: var(--cp-review-card-width, 400px);
    height: auto;
    min-height: 380px;
    padding-inline: 40px;
  }

  /* 设计稿移动端弹窗锁定 85vh，内容少也占满 */
  .comu-review-modal {
    padding: 24px;
    height: 85vh;
    box-sizing: border-box;
  }

  .comu-review-modal__main {
    flex-direction: column;
    gap: 16px;
    max-height: calc(85vh - 48px);
  }

  /* 设计稿移动端图片仍在文字下方，不做 order 反转 */
  .comu-review-modal__left {
    padding-right: 0;
  }

  .comu-review-modal__aside {
    display: flex;
    align-items: center;
    justify-content: center;
    width: 100%;
  }

  .comu-review-modal__figure {
    width: 100%;
    max-width: 220px;
    height: 220px;
    aspect-ratio: auto;
  }

  .comu-review-modal__title {
    font-size: 18px;
    margin-bottom: 8px;
  }

  .comu-review-modal__body {
    font-size: 14px;
  }

  .comu-review-modal__head {
    margin-bottom: 12px;
  }

  .comu-review-modal__close {
    top: -44px;
    right: 0;
  }
}

/* ==========================================================================
   Comu KOL Video Cards — 竖版达人视频卡 + 视频弹窗
   ========================================================================== */
.comu-kol-cards__wrapper {
  position: relative;
}

/* 设计稿轨道左对齐容器、右侧突破到视口边缘，滚到底只留 24px；且无 scroll-snap（自由横滑） */
.comu-kol-cards__track {
  display: flex;
  gap: 16px;
  overflow-x: auto;
  scrollbar-width: none;
  -webkit-overflow-scrolling: touch;
  padding-left: max(24px, calc((100% - var(--cp-max-width)) / 2));
  padding-right: 24px;
  padding-bottom: 24px;
}

.comu-kol-cards__track::-webkit-scrollbar {
  display: none;
}

.comu-kol-card {
  position: relative;
  flex: 0 0 var(--cp-kol-card-width, 280px);
  max-width: 100%;
  aspect-ratio: 9 / 16;
  border-radius: var(--cp-kol-radius, 20px);
  overflow: hidden;
  display: flex;
  flex-direction: column;
  justify-content: space-between;
  padding: 24px;
  text-align: left;
}

.comu-kol-card[data-comu-kol-open] {
  cursor: pointer;
}

.comu-kol-card__bg {
  position: absolute;
  inset: 0;
  z-index: 0;
  background: #e5e7eb;
  transition: transform 0.8s cubic-bezier(0.2, 0.8, 0.2, 1);
}

.comu-kol-card__image {
  width: 100%;
  height: 100%;
  display: block;
  object-fit: cover;
}

.comu-kol-card:hover .comu-kol-card__bg {
  transform: scale(1.05);
}

.comu-kol-card__scrim {
  position: absolute;
  inset: 0;
  z-index: 1;
  background: linear-gradient(180deg, rgb(0 0 0 / 10%) 0%, rgb(0 0 0 / 40%) 50%, rgb(0 0 0 / 90%) 100%);
}

.comu-kol-card__top {
  position: relative;
  z-index: 2;
  display: flex;
  justify-content: flex-end;
}

.comu-kol-card__play {
  width: 32px;
  height: 32px;
  border-radius: 50%;
  background: var(--cp-kol-play-bg, #fff);
  color: var(--cp-kol-play-icon, #111827);
  display: flex;
  align-items: center;
  justify-content: center;
  flex-shrink: 0;
  box-shadow: 0 2px 8px rgb(0 0 0 / 4%);
  transition: transform 0.2s ease;
}

.comu-kol-card:hover .comu-kol-card__play {
  transform: scale(1.05);
}

.comu-kol-card__play svg {
  width: 14px;
  height: 14px;
}

.comu-kol-card__bottom {
  position: relative;
  z-index: 2;
  display: flex;
  flex-direction: column;
  gap: 12px;
}

.comu-kol-card__quote {
  margin: 0;
  font-size: 16px;
  font-weight: 400;
  line-height: 1.4;
  color: var(--cp-kol-text, #fff);
  text-shadow: 0 2px 4px rgb(0 0 0 / 40%);
  display: -webkit-box;
  -webkit-line-clamp: 4;
  -webkit-box-orient: vertical;
  overflow: hidden;
  /* hover 时文字由白色切成渐变填充（设计稿效果） */
  background-image: linear-gradient(90deg, var(--cp-kol-grad-a, #00c9a7) 0%, var(--cp-kol-grad-b, #2563eb) 100%);
  background-size: 200% auto;
  -webkit-background-clip: text;
  background-clip: text;
  transition: color 0.4s ease, text-shadow 0.4s ease;
}

.comu-kol-card:hover .comu-kol-card__quote {
  color: transparent;
  text-shadow: none;
}

.comu-kol-card__profile {
  display: flex;
  align-items: center;
  gap: 12px;
}

.comu-kol-card__avatar {
  width: 36px;
  height: 36px;
  border-radius: 50%;
  object-fit: cover;
  border: 2px solid rgb(255 255 255 / 20%);
  flex-shrink: 0;
}

.comu-kol-card__name {
  margin: 0;
  font-size: 13px;
  font-weight: 500;
  color: rgb(255 255 255 / 90%);
  text-shadow: 0 1px 3px rgb(0 0 0 / 60%);
}

.comu-kol-cards__controls {
  display: flex;
  justify-content: center;
  gap: 16px;
  margin-top: 32px;
}

.comu-kol-cards__nav {
  width: 48px;
  height: 48px;
  border-radius: 50%;
  border: none;
  background: var(--cp-kol-nav-bg, #f3f4f6);
  color: var(--cp-kol-nav-icon, #111827);
  display: flex;
  align-items: center;
  justify-content: center;
  cursor: pointer;
  transition: background 0.2s ease, opacity 0.2s ease;
}

.comu-kol-cards__nav:hover {
  background: #e5e7eb;
}

.comu-kol-cards__nav[disabled] {
  opacity: 0.5;
  cursor: not-allowed;
}

.comu-kol-cards__nav svg {
  width: 20px;
  height: 20px;
}

/* --- 标题 hover 扫光渐变（设计稿 site-sections.css 的 STICKY GRADIENT TITLES）-------
   静止时 background-position: 100% 0 落在 currentColor 段上，所以外观与普通文字完全一致；
   hover 时移到 0%，青绿→蓝的色段用 1.5s 从右往左扫过来。
   注意 -webkit-text-fill-color: transparent 必须和 background-clip: text 成对出现，
   缺一个字就整个消失。 */
.comu-gradient-title {
  background-image: linear-gradient(
    90deg,
    var(--cp-title-grad-a, #00c9a7) 0%,
    var(--cp-title-grad-b, #2563eb) 33%,
    currentColor 66%,
    currentColor 100%
  );
  background-size: 300% 100%;
  background-position: 100% 0;
  -webkit-background-clip: text;
  background-clip: text;
  -webkit-text-fill-color: transparent;
  transition: background-position 1.5s cubic-bezier(0.22, 1, 0.36, 1);
}

.comu-gradient-title.is-swept {
  background-position: 0% 0;
}

@media (prefers-reduced-motion: reduce) {
  .comu-gradient-title {
    transition: none;
  }
}

/* --- hero 按钮「设计稿首页」尺寸（site-hero.css 的最终生效值）------------------
   预热页保持默认尺寸，所以做成变体类而不是直接改 .cp-btn--large。 */
.comu-hero--btn-compact .cp-btn--primary,
.comu-hero--btn-compact .cp-btn--ghost {
  padding: 8px 24px;
  border-radius: 9999px;
  /* 实测设计稿计算值是 18px —— site-hero.css 里那条 16px 被更靠后的规则覆盖了，
     只读 CSS 会读错，必须量渲染结果。 */
  font-size: 18px;
  font-weight: 400;
  line-height: normal;
  letter-spacing: normal;
  text-transform: none;
  box-shadow: none;
}

/* --- compliance：每行固定列数 + 卡片内边距 ------------------------------------
   设计稿首页是 repeat(4, 1fr) + padding 22px 24px；预热页 6 张卡沿用自适应，
   所以两者都做成设置，默认值 = 预热页现有行为。 */
.comu-section.comu-compliance--cols-3 .compliance-grid {
  grid-template-columns: repeat(3, minmax(0, 1fr));
}

.comu-section.comu-compliance--cols-4 .compliance-grid {
  grid-template-columns: repeat(4, minmax(0, 1fr));
}

.comu-section.comu-compliance .compliance-card--icon {
  padding-top: var(--cp-compliance-card-pad, 32px);
  padding-bottom: var(--cp-compliance-card-pad, 32px);
}

/* --- video-tabs：等分标签栏（设计稿 .features-tabs + .feature-tab）------------
   设计稿的标签是 `flex: 1 1 0` 一行铺满、48px 固定高、文字在标签内换行；
   旧的「自适应」是按文字长度撑宽 + 换行到第二排，长文案会溢出。 */
.comu-video-tabs--tabs-equal .comu-video-tabs__nav {
  flex-wrap: nowrap;
  width: 100%;
  max-width: var(--cp-vt-tabs-max, 100%);
}

.comu-video-tabs--tabs-equal .comu-video-tabs__tab {
  flex: 1 1 0;
  min-width: 0;
  height: 48px;
  padding: 0 12px;
  font-size: var(--cp-vt-tab-font, 14px);
  line-height: 1.2;
  text-align: center;
  white-space: normal;
}

/* --- video-tabs：图片 + 嵌入视频模式（设计稿首页 #interactive-features）---------
   背景图自然高度撑开面板，视频按百分比绝对定位嵌进图里的手机屏幕区域。
   几何值来自设计稿内联样式，可在后台按背景图微调。 */
.comu-video-tabs--mode-image_inset_video .comu-video-tabs__media--inset {
  position: relative;
  width: 100%;
  height: auto;
  aspect-ratio: auto;
  overflow: visible;
  border-radius: 0;
}

.comu-video-tabs--mode-image_inset_video .comu-video-tabs__inset-bg {
  display: block;
  width: 100%;
  border-radius: var(--cp-video-radius, 24px);
  overflow: hidden;
  /* translateZ 保证圆角在 Safari 下正确裁切嵌进去的视频 */
  transform: translateZ(0);
}

.comu-video-tabs--mode-image_inset_video .comu-video-tabs__inset-bg img {
  display: block;
  width: 100%;
  height: auto;
  object-fit: cover;
}

.comu-video-tabs--mode-image_inset_video .comu-video-tabs__inset {
  position: absolute;
  left: var(--cp-vt-inset-left, 66.4%);
  top: var(--cp-vt-inset-top, 12.8%);
  width: var(--cp-vt-inset-width, 25.5%);
  height: var(--cp-vt-inset-height, 87.2%);
  border-radius: 7.6% 7.6% 0 0 / 4% 4% 0 0;
  overflow: hidden;
  transform: translateZ(0);
}

.comu-video-tabs--mode-image_inset_video .comu-video-tabs__inset video,
.comu-video-tabs--mode-image_inset_video .comu-video-tabs__inset img {
  width: 100%;
  height: 100%;
  display: block;
  object-fit: cover;
  /* 设计稿的 object-position：视频顶部略微上提，对齐手机状态栏下方 */
  object-position: center 5%;
}

/* --- KOL 缩略图卡变体（首页 #featured-video）---------------------------
   源自新设计稿 index.html 内联 <style>。关键是覆盖沉浸卡的 9:16 约束。 */
.comu-kol-cards--thumbnail .comu-kol-card {
  aspect-ratio: auto;
  display: flex;
  flex-direction: column;
  padding: 0;
  background: #ffffff;
}

.comu-kol-cards--thumbnail .comu-kol-card__thumb {
  position: relative;
  width: 100%;
  aspect-ratio: 16 / 9;
  overflow: hidden;
  background: #000000;
  flex-shrink: 0;
}

.comu-kol-cards--thumbnail .comu-kol-card__thumb .comu-kol-card__image {
  width: 100%;
  height: 100%;
  object-fit: cover;
  transition: transform 0.4s ease;
}

.comu-kol-cards--thumbnail .comu-kol-card:hover .comu-kol-card__image {
  transform: scale(1.04);
}

/* 播放钮改到缩略图右上角，与沉浸卡的居中大钮不同 */
.comu-kol-cards--thumbnail .comu-kol-card__thumb .comu-kol-card__play {
  position: absolute;
  top: 12px;
  right: 12px;
  z-index: 3;
  width: 32px;
  height: 32px;
  border-radius: 50%;
  background: #ffffff;
  color: #111827;
  box-shadow: 0 4px 12px rgb(0 0 0 / 15%);
  transition: transform 0.2s ease;
}

.comu-kol-cards--thumbnail .comu-kol-card:hover .comu-kol-card__play {
  transform: scale(1.1);
}

.comu-kol-cards--thumbnail .comu-kol-card__play svg {
  width: 14px;
  height: 14px;
}

.comu-kol-cards--thumbnail .comu-kol-card__info {
  display: flex;
  flex-direction: column;
  gap: 8px;
  flex: 1;
  padding: 12px 14px 14px;
  background: var(--cp-kol-info-bg, #f6f6f6);
}

.comu-kol-cards--thumbnail .comu-kol-card__text {
  display: flex;
  flex-direction: column;
  gap: 3px;
}

.comu-kol-cards--thumbnail .comu-kol-card__title {
  margin: 0;
  font-size: 14px;
  font-weight: 700;
  line-height: 1.35;
  color: #111827;
  text-shadow: none;
  display: -webkit-box;
  -webkit-line-clamp: 2;
  -webkit-box-orient: vertical;
  overflow: hidden;
}

.comu-kol-cards--thumbnail .comu-kol-card__meta {
  margin: 0;
  font-size: 12px;
  line-height: 1.4;
  color: #888;
}

.comu-kol-cards--thumbnail .comu-kol-card__channel {
  display: flex;
  align-items: center;
  gap: 8px;
  margin-top: 2px;
}

.comu-kol-cards--thumbnail .comu-kol-card__avatar {
  width: 24px;
  height: 24px;
  border: none;
  border-radius: 50%;
  object-fit: cover;
  flex-shrink: 0;
}

.comu-kol-cards--thumbnail .comu-kol-card__channel-name {
  font-size: 12px;
  color: #555;
  text-shadow: none;
}

/* 缩略图卡不需要沉浸卡的遮罩与引言渐变 */
.comu-kol-cards--thumbnail .comu-kol-card__scrim {
  display: none;
}

@media (max-width: 768px) {
  .comu-kol-cards--thumbnail .comu-kol-card {
    flex-basis: 240px;
  }
}

/* 竖版视频弹窗 */
.comu-kol-modal {
  border: none;
  padding: 0;
  background: transparent;
  max-width: none;
  overflow: visible;
  /* <dialog> 默认 width: fit-content。内容用 width:90% 去取百分比时，
     父级本身又是收缩到内容，形成退化解——竖版凑巧还能看（270×480），
     横版就只有 270×152。把弹窗撑满视口并居中，百分比才有确定的参照。 */
  width: 100%;
  height: 100%;
  max-height: none;
  margin: 0;
  place-items: center;
}

/* display 必须只在 [open] 时给：<dialog> 关闭态靠浏览器默认的 display:none 隐藏，
   在基础规则里写 display:grid 会把这个默认覆盖掉，未打开的弹窗也会占位，
   在模块下方显示成一大块黑区。 */
.comu-kol-modal[open] {
  display: grid;
}

.comu-kol-modal::backdrop {
  background: rgb(0 0 0 / 85%);
  -webkit-backdrop-filter: blur(5px);
  backdrop-filter: blur(5px);
}

/* 设计稿竖版弹窗：9:16、最宽 450px、最高 90vh */
.comu-kol-modal__content {
  position: relative;
  width: 90%;
  height: auto;
  aspect-ratio: 9 / 16;
  max-width: 450px;
  max-height: 90vh;
  border-radius: 12px;
  overflow: hidden;
  background: #000;
  box-shadow: 0 25px 50px -12px rgb(0 0 0 / 50%);
}

.comu-kol-modal__media,
.comu-kol-modal__media video,
.comu-kol-modal__media iframe {
  width: 100%;
  height: 100%;
  display: block;
  border: 0;
  /* contain 而不是 cover：cover 会把不符合弹窗比例的画面裁掉两边。
     弹窗比例已经由 JS 按视频朝向套好，contain 只是最后一道保险，
     遇到 21:9 之类的非常规比例时宁可留黑边也不能裁内容。 */
  object-fit: contain;
  background: #000;
}

/* 横屏视频：比例与最大宽度都要换，否则 450px 宽的框放 16:9 只有 253px 高 */
.comu-kol-modal__content--landscape {
  max-width: min(1040px, 92vw);
  max-height: 86vh;
}

.comu-kol-modal__close {
  position: absolute;
  z-index: 2;
  top: 16px;
  right: 16px;
  width: 48px;
  height: 48px;
  border-radius: 50%;
  border: none;
  background: rgb(255 255 255 / 20%);
  color: #fff;
  display: flex;
  align-items: center;
  justify-content: center;
  cursor: pointer;
  backdrop-filter: blur(8px);
  transition: background-color 160ms ease, transform 160ms ease;
}

.comu-kol-modal__close:hover {
  background: rgb(255 255 255 / 36%);
  transform: scale(1.04);
}

.comu-kol-modal__close svg {
  width: 24px;
  height: 24px;
}

/* 设计稿的响应式档位：≤1200 四张、≤900 三张、≤600 一张 + peek */
@media (max-width: 1200px) {
  .comu-kol-card {
    flex-basis: calc(25% - 12px);
  }
}

@media (max-width: 900px) {
  .comu-kol-card {
    flex-basis: calc(33.333% - 11px);
  }
}

@media (max-width: 768px) {
  /* 轨道左边距与标题容器对齐（设计稿 .container 是 24px） */
  .comu-kol-cards__track {
    padding-left: 24px;
  }

  .comu-kol-cards__controls {
    margin-top: 10px;
  }
}

@media (max-width: 600px) {
  .comu-kol-card {
    flex-basis: 75%;
  }
}

/* ==========================================================================
   video-tabs 等分标签栏的移动端覆盖
   ==========================================================================
   桌面的 `.comu-video-tabs--tabs-equal .comu-video-tabs__tab`（48px 固定高、
   14px 字）与下面的移动端规则同权重，而它在文件里排得更靠后，会把移动端值盖掉，
   导致 375px 下文字溢出药丸、上下两行标签互相重叠。
   这里刻意提高一级权重（多带一个 .comu-section），确保移动端稳定生效。
   取值来自设计稿 (max-width:768px) 下的 .feature-tab。 */
@media (max-width: 768px) {
  .comu-section.comu-video-tabs--tabs-equal .comu-video-tabs__nav {
    display: grid;
    grid-template-columns: repeat(var(--cp-vt-tab-cols-m, 3), minmax(0, 1fr));
    gap: 8px;
    width: 100%;
    max-width: 100%;
  }

  .comu-section.comu-video-tabs--tabs-equal .comu-video-tabs__tab {
    height: auto;
    min-height: var(--cp-vt-tab-mh-m, 40px);
    padding: 8px 6px;
    font-size: 12px;
    font-weight: 600;
    line-height: 1.2;
    white-space: normal;
    text-align: center;
  }
}

/* ==========================================================================
   移动端权重修正（≤768px）
   ==========================================================================
   下面两条在原位置被「同权重但排得更后」的规则盖掉了，所以在文件末尾以更高权重重申。
   同类问题在 video-tabs 的等分标签上也出现过——改移动端值时务必回到浏览器量一遍，
   光看规则写没写对不够。 */
@media (max-width: 768px) {
  /* 每行列数设置（--cols-4）是基础规则、排在移动端之后，会把 2 列网格顶成 4 列 */
  .comu-section.comu-compliance.comu-compliance--cols-3 .compliance-grid,
  .comu-section.comu-compliance.comu-compliance--cols-4 .compliance-grid,
  .comu-section.comu-compliance .compliance-grid {
    grid-template-columns: repeat(2, minmax(0, 1fr));
    gap: 12px;
  }

  /* 设计稿移动端描述是 12px / 1.4 */
  .comu-section.comu-product-entry .product-card-content .product-card-desc {
    font-size: 12px;
    line-height: 1.4;
  }
}

/* ==========================================================================
   评论区箭头显示范围 / 移动端标签字号 / 商品卡按钮等宽
   ========================================================================== */

/* 设计稿首页移动端没有左右箭头（靠自动横向滚动），做成可配置 */
.comu-review-cards--arrows-none .comu-review-cards__controls {
  display: none;
}

@media (max-width: 768px) {
  .comu-review-cards--arrows-desktop .comu-review-cards__controls {
    display: none;
  }

  /* 设计稿实测标签字号是 10px（文案长，12px 会溢出）；此处可后台调 */
  .comu-section.comu-video-tabs--tabs-equal .comu-video-tabs__tab {
    font-size: var(--cp-vt-tab-font-m, 12px);
  }

  /* 两个按钮必须等宽：容器从桌面继承的 align-items:flex-end 会让子项按内容收缩，
     「Shop」只有 64px 而「Learn more」103px。stretch 才能对齐。 */
  .comu-section.comu-product-entry .product-card-content .product-card-actions {
    align-items: stretch;
  }

  .comu-section.comu-product-entry .product-card-content .product-card-actions .btn-light-gray {
    width: 100%;
  }
}

@media (max-width: 768px) {
  /* 设计稿移动端卡片保持 400px（略宽于 375 视口，右侧露出下一张的一角）。
     桌面基础规则里的 max-width:100% 会把它压到视口宽，露不出来，这里解掉。 */
  .comu-section.comu-review-cards .comu-review-card {
    max-width: none;
  }
}

/* 徽章填了链接时渲染成 <a>，去掉浏览器默认样式 */
.comu-section a.compliance-badge-item {
  color: inherit;
  text-decoration: none;
}

/* 新增的可点击变体：去掉浏览器默认样式，视觉与不可点时一致 */
.comu-section .media-logo-link,
.comu-section a.scenario-card-new {
  color: inherit;
  text-decoration: none;
  display: block;
}

/* ==========================================================================
   hero 平板档高度（768–991px）
   ==========================================================================
   设计稿 .plaud-hero 有四档：≥1440 = 650、992–1439 = 600、768–991 = 550、<768 = 600
   （site-hero.css 的 --hero-height-wide/desktop/tablet/mobile）。
   我原来只有桌面 + 移动两档，且移动档在 ≤1024 就接管，900 时套用了移动值。
   这里补一档平板；未设时沿用移动值，预热页不受影响。
   放在文件末尾以压过前面 (max-width: 1024px) 的那条同权重规则。 */
/* ⚠️ 必须带下界：这几条平板规则排在文件末尾，若只写 max-width 会把前面
   ≤768px 的移动端规则整体盖掉（本项目已因此在 768 档出过一次回归）。 */
/* 下界取 768 而不是 769：设计稿平板档是 max-width: 991.98、移动档是 max-width: 767.98，
   768 这一格属于平板。用 769 会让 768px 恰好掉进两档中间（实测那一格高 600，应为 550）。
   这里能安全用 768 是因为本规则的移动端对手写的是 767.98；文件里其他用 769 下界的规则
   对手是 `max-width: 768px`，那些不能跟着改。 */
@media (min-width: 768px) and (max-width: 991.98px) {
  .comu-section.comu-hero.comu-hero--height-custom {
    --comu-hero-block-height: var(--comu-hero-height-tablet, var(--comu-hero-height-mobile, 600px));
  }
}

@media (max-width: 767.98px) {
  .comu-section.comu-hero.comu-hero--height-custom {
    --comu-hero-block-height: var(--comu-hero-height-mobile, 600px);
  }
}

/* ==========================================================================
   900 档量化比对后的修正（768–991px）
   ========================================================================== */
@media (min-width: 769px) and (max-width: 991px) {
  /* 设计稿这一档标签字号是 13px；≤768 归移动端设置管，故此处带下界 */
  .comu-section.comu-video-tabs--tabs-equal .comu-video-tabs__tab {
    font-size: 13px;
  }
}

@media (max-width: 900px) {
  /* 设计稿 ≤900 的 bento 网格间距是 8px、底部留 24px（我原来是 12px / 0）。
     这条对 ≤768 也成立（设计稿同值），所以不加下界。 */
  .comu-section.comu-bento .bento-grid-masonry {
    gap: 8px;
    padding-bottom: 24px;
  }

  .comu-section.comu-bento .bento-col {
    gap: 8px;
  }
}

/* ==========================================================================
   hero 文案区间距（可配）
   ==========================================================================
   横向：原本只靠 .cp-container 的 padding-inline（跟容器宽走），无法单独收窄文案；
   这里在 .hero-content 上再加一层可配内边距，用于把文案从背景图主体上挪开。
   纵向：下间距原本由 --hero-content-bottom-gap 随高度自适应，用回退链保证
   「没填就保持原自适应行为，填了就以填的为准」。
   全部「0 = 用默认」，Liquid 侧已判 > 0 才输出变量，所以 var() 回退可靠。
   放文件末尾是为了压过前面按内容位置分档的 .comu-hero--d-v-* / --m-v-* 规则。 */
.comu-section.comu-hero .hero-content {
  box-sizing: border-box;
  padding-inline: var(--comu-hero-content-pad-x, 0px);
  padding-top: var(--comu-hero-content-pad-top, 0px);
  padding-bottom: var(
    --comu-hero-content-pad-bottom,
    var(--hero-content-bottom-gap, clamp(48px, 10%, 480px))
  );
}

@media (max-width: 768px) {
  .comu-section.comu-hero .hero-content {
    padding-inline: var(--comu-hero-content-pad-x-m, var(--comu-hero-content-pad-x, 0px));
    padding-top: var(--comu-hero-content-pad-top-m, var(--comu-hero-content-pad-top, 0px));
    padding-bottom: var(
      --comu-hero-content-pad-bottom-m,
      var(--comu-hero-content-pad-bottom, var(--hero-content-bottom-gap, clamp(32px, 8%, 80px)))
    );
  }
}

/* ==========================================================================
   悬浮订阅按钮 + 弹窗（设计稿 .np-discount-widget / .np-discount-modal-overlay）
   ========================================================================== */
.comu-fsub__btn {
  position: fixed;
  bottom: var(--cp-fsub-bottom, 104px);
  /* 左右两侧都声明，由 Liquid 按「位置」设置只输出其中一侧，另一侧回退 auto。
     起因：日本站客服 Shopify Inbox 也停在左下角，且 z-index 是 2147483000
     （int32 上限）压不过去，只能让本按钮换边。 */
  left: var(--cp-fsub-left, 24px);
  right: var(--cp-fsub-right, auto);
  /* 必须低于 998（悬浮加购条）与 999（Impact 的 drawer / popover）。
     原来是 1000，购物车抽屉打开时这颗按钮会浮在抽屉之上——PC 与移动端都复现。
     它只是个常驻入口，不该盖住任何被主动打开的东西。
     配套的 .comu-fsub__overlay 仍是 1001：那是主动打开的弹窗，压住抽屉是对的。 */
  z-index: 997;
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  width: var(--cp-fsub-size, 62px);
  height: var(--cp-fsub-size, 62px);
  padding: 0;
  border: none;
  border-radius: 50%;
  background: linear-gradient(
    135deg,
    var(--cp-fsub-grad-a, #99d6f6) 0%,
    var(--cp-fsub-grad-b, #ccece7) 100%
  );
  box-shadow: 0 4px 16px rgb(0 0 0 / 12%), inset 0 0 0 1px rgb(255 255 255 / 50%);
  color: var(--cp-fsub-text, #0f172a);
  cursor: pointer;
  transition: transform 0.3s cubic-bezier(0.175, 0.885, 0.32, 1.275);
}

.comu-fsub__btn:hover {
  transform: scale(1.1) rotate(-5deg);
}

/* 图片版按钮：整块填满圆形，圆角继承按钮 */
.comu-fsub__img {
  width: 100%;
  height: 100%;
  display: block;
  object-fit: cover;
  border-radius: 50%;
}

.comu-fsub__badge {
  display: flex;
  flex-direction: column;
  align-items: center;
}

.comu-fsub__main {
  display: flex;
  align-items: baseline;
  justify-content: center;
  gap: 2px;
  font-weight: 800;
}

.comu-fsub__num {
  font-size: 18px;
  line-height: 1;
}

.comu-fsub__off {
  font-size: 10px;
  line-height: 1;
}

.comu-fsub__sub {
  margin-top: 2px;
  font-size: 7px;
  font-weight: 700;
  text-transform: uppercase;
  color: #334155;
}

/* 遮罩层级高于按钮：设计稿是按钮 1001 / 遮罩 1000，弹窗打开时按钮会浮在暗色遮罩上，
   看着像穿帮，这里对调。 */
.comu-fsub__overlay {
  position: fixed;
  inset: 0;
  z-index: 1001;
  display: flex;
  align-items: center;
  justify-content: center;
  /* 设计稿遮罩无内边距、面板用 width:90%；这里保持一致，
     之前加 24px 内边距会让移动端面板窄 11px。 */
  padding: 0;
  background: rgb(0 0 0 / 50%);
  backdrop-filter: blur(4px);
  opacity: 0;
  pointer-events: none;
  transition: opacity 0.3s ease;
}

.comu-fsub__overlay.is-visible {
  opacity: 1;
  pointer-events: auto;
}

.comu-fsub__panel {
  position: relative;
  width: 90%;
  max-width: 400px;
  max-height: calc(100vh - 48px);
  overflow: auto;
  border-radius: 16px;
  background: #fff;
  box-shadow: 0 24px 48px rgb(0 0 0 / 20%);
  transform: translateY(20px) scale(0.95);
  transition: transform 0.3s cubic-bezier(0.175, 0.885, 0.32, 1.275);
}

.comu-fsub__overlay.is-visible .comu-fsub__panel {
  transform: translateY(0) scale(1);
}

.comu-fsub__close {
  position: absolute;
  top: 12px;
  right: 12px;
  z-index: 2;
  display: flex;
  align-items: center;
  justify-content: center;
  width: 32px;
  height: 32px;
  border: none;
  border-radius: 50%;
  background: rgb(255 255 255 / 90%);
  color: #333;
  cursor: pointer;
  transition: background 0.2s, transform 0.2s;
}

.comu-fsub__close:hover {
  background: #fff;
  transform: scale(1.1);
}

.comu-fsub__close svg {
  width: 18px;
  height: 18px;
}

.comu-fsub__media {
  height: 180px;
  background: #f5f6f8;
}

.comu-fsub__media img {
  width: 100%;
  height: 100%;
  display: block;
  object-fit: cover;
  object-position: center;
}

.comu-fsub__body {
  padding: 32px 24px;
  text-align: center;
}

.comu-fsub__title {
  margin: 0 0 8px;
  font-size: 24px;
  font-weight: 800;
  color: #111827;
}

.comu-fsub__desc {
  margin: 0 0 24px;
  font-size: 14px;
  line-height: 1.5;
  color: #4b5563;
}

.comu-fsub__fields {
  display: flex;
  flex-direction: column;
  gap: 12px;
}

.comu-fsub__input {
  /* Impact 给表单元素设了 line-height: 1.6，会把 14px 内边距 + 15px 字撑到 54px，
     而设计稿是 45px。显式设 normal 才对得上。 */
  line-height: normal;
  height: 47px;
  padding: 0 20px;
  border: 1px solid #d1d5db;
  border-radius: 100px;
  font-size: 15px;
  outline: none;
  transition: border-color 0.2s, box-shadow 0.2s;
}

.comu-fsub__input:focus {
  border-color: #191c1d;
  box-shadow: 0 0 0 3px rgb(25 28 29 / 10%);
}

.comu-fsub__submit {
  line-height: normal;
  height: 46px;
  padding: 0 14px;
  border: none;
  border-radius: 100px;
  background: #191c1d;
  color: #fff;
  font-size: 16px;
  font-weight: 700;
  cursor: pointer;
  transition: background 0.2s, transform 0.1s;
}

.comu-fsub__submit:hover {
  background: #000;
}

.comu-fsub__submit:active {
  transform: scale(0.98);
}

.comu-fsub__consent {
  display: flex;
  gap: 8px;
  align-items: flex-start;
  font-size: 12px;
  line-height: 1.5;
  color: #6b7280;
  text-align: left;
}

.comu-fsub__consent p {
  margin: 0;
}

.comu-fsub__msg {
  margin: 12px 0 0;
  font-size: 14px;
}

.comu-fsub__msg--ok {
  color: #15803d;
}

.comu-fsub__msg--err {
  color: #b91c1c;
}

.comu-fsub__terms {
  margin: 16px 0 0;
  font-size: 12px;
  color: #9ca3af;
}

.comu-fsub__terms p {
  margin: 0;
}

@media (max-width: 768px) {
  .comu-fsub__btn {
    width: var(--cp-fsub-size-m, 48px);
    height: var(--cp-fsub-size-m, 48px);
    bottom: var(--cp-fsub-bottom-m, 114px);
    left: var(--cp-fsub-left-m, 16px);
    right: var(--cp-fsub-right-m, auto);
  }

  .comu-fsub__num { font-size: 13px; }
  .comu-fsub__off { font-size: 8px; }
  .comu-fsub__sub { font-size: 6px; margin-top: 0; }
}

@media (prefers-reduced-motion: reduce) {
  .comu-fsub__btn,
  .comu-fsub__overlay,
  .comu-fsub__panel {
    transition: none;
  }
}

/* 标签固定宽度（设计稿的 .features-tabs .feature-tab { width: 170px } 那种写法）。
   必须排在等分规则之后并多带一级权重：等分规则是 `.comu-video-tabs--tabs-equal
   .comu-video-tabs__tab { flex: 1 1 0 }`，同权重时后者赢，写在前面会被盖掉。 */
.comu-section.comu-video-tabs--tabw-fixed .comu-video-tabs__nav {
  justify-content: center;
  flex-wrap: wrap;
}

.comu-section.comu-video-tabs--tabw-fixed .comu-video-tabs__tab {
  flex: 0 0 var(--cp-vt-tab-w, 170px);
  width: var(--cp-vt-tab-w, 170px);
}

@media (max-width: 768px) {
  /* 移动端仍走网格分列，定宽会撑破窄屏 */
  .comu-section.comu-video-tabs--tabw-fixed .comu-video-tabs__tab {
    flex: initial;
    width: auto;
  }
}

/* ==========================================================================
   Hero 多 Banner 轮播
   ==========================================================================
   幻灯片整张叠放，复用 .hero-media / .hero-content 那套已有规则，
   高度、内容定位、按钮尺寸都不必为轮播另写。 */
.comu-hero--carousel .hero-slides {
  position: absolute;
  inset: 0;
}

.comu-hero--carousel .hero-slide {
  position: absolute;
  inset: 0;
}

/* 淡入淡出 */
.comu-hero--fx-fade .hero-slide {
  opacity: 0;
  pointer-events: none;
  transition: opacity 0.6s ease;
}

.comu-hero--fx-fade .hero-slide.is-active {
  opacity: 1;
  pointer-events: auto;
}

/* 横向滑动 */
.comu-hero--fx-slide .hero-slide {
  transform: translateX(100%);
  pointer-events: none;
  transition: transform 0.6s cubic-bezier(0.4, 0, 0.2, 1);
}

.comu-hero--fx-slide .hero-slide.is-active {
  transform: translateX(0);
  pointer-events: auto;
}

.comu-hero--fx-slide .hero-slide.is-prev {
  transform: translateX(-100%);
}

/* 幻灯片内的容器要撑满，否则内容定位规则算不到高度 */
.comu-hero--carousel .hero-slide > .cp-container {
  position: absolute;
  inset: 0;
}

.comu-hero--carousel .hero-nav {
  position: absolute;
  top: 50%;
  z-index: 5;
  display: flex;
  align-items: center;
  justify-content: center;
  width: 40px;
  height: 40px;
  transform: translateY(-50%);
  border: none;
  border-radius: 50%;
  background: rgb(255 255 255 / 80%);
  color: #111827;
  cursor: pointer;
  transition: background 0.2s, transform 0.2s;
}

.comu-hero--carousel .hero-nav:hover {
  background: #fff;
}

.comu-hero--carousel .hero-nav--prev { left: 16px; }
.comu-hero--carousel .hero-nav--next { right: 16px; }

.comu-hero--carousel .hero-nav svg {
  width: 20px;
  height: 20px;
}

.comu-hero--carousel .hero-dots {
  position: absolute;
  bottom: 20px;
  left: 50%;
  z-index: 5;
  display: flex;
  gap: 8px;
  transform: translateX(-50%);
}

.comu-hero--carousel .hero-dot {
  width: 8px;
  height: 8px;
  padding: 0;
  border: none;
  border-radius: 50%;
  background: rgb(255 255 255 / 55%);
  cursor: pointer;
  transition: background 0.2s, width 0.2s;
}

.comu-hero--carousel .hero-dot.is-active {
  width: 22px;
  border-radius: 999px;
  background: #fff;
}

@media (max-width: 768px) {
  /* 移动端保留左右箭头，参考 Impact 默认 slideshow：它在 ≤699px 只把圆钮缩小
     （--spacing-10），并不隐藏。原来这里直接 display:none，多 banner 时
     用户完全看不出还能左右切换。改成缩小 + 收紧边距，避免压住文案。 */
  .comu-hero--carousel .hero-nav {
    width: 34px;
    height: 34px;
  }

  .comu-hero--carousel .hero-nav svg {
    width: 17px;
    height: 17px;
  }

  .comu-hero--carousel .hero-nav--prev { left: 8px; }
  .comu-hero--carousel .hero-nav--next { right: 8px; }

  /* 运营想在移动端关掉时，在后台勾掉「移动端显示左右箭头」 */
  .comu-hero--carousel.comu-hero--no-arrows-m .hero-nav { display: none; }
  .comu-hero--carousel .hero-dots { bottom: 14px; }
}

@media (prefers-reduced-motion: reduce) {
  .comu-hero--carousel .hero-slide { transition: none; }
}

/* ==========================================================================
   Bento 桌面端网格高度
   ==========================================================================
   设计稿 site-sections.css:373-375 用 `.col-tall .bento-card { min-height:400px }`
   把整行撑到 400px，其余列靠 flex 配比在这 400px 内分配。本主题的列数由运营配置、
   「哪一列是高列」不固定，所以改成把最小高度加在网格上——align-items:stretch 会让
   所有列一起跟到这个高度，结果与设计稿等价（实测两侧同为 400px）。
   漏了这条时卡面只有标题、没有撑高的东西，整个模块会被压到 234px。
   只在 >900px 生效：≤900px 设计稿改用 .bento-col 的 282/400 比例控高。
   放文件末尾是为了压过前面 .bento-card 的 min-height:0。 */
@media (min-width: 901px) {
  .comu-section.comu-bento .bento-grid-masonry {
    min-height: var(--cp-bento-min-h, 400px);
  }
}

/* ==========================================================================
   Bento 圆角
   ==========================================================================
   设计稿的 bento 圆角不由 site-sections.css 决定——radius-system.css 用 !important
   覆盖了它：>900px 卡片 20px（--comu-radius-standard）、≤900px 卡片 16px
   （--comu-mobile-radius-standard）、底图恒 8px（small）。
   所以 site-sections.css 里那个 12px 与 ≤900 的 1.97vw 都是死值，别照抄。
   底图不能用 border-radius: inherit：它跟卡片同尺寸绝对定位，跟着卡片走会变成
   20px，与设计稿的 8px 不符。 */
@media (max-width: 900px) {
  .comu-section.comu-bento .bento-card {
    border-radius: 16px;
  }
}

.comu-section.comu-bento .bento-bottom-img {
  border-radius: 8px;
}

/* 设计稿 ≤900 档把卡片标题行高从 1.3 提到 1.35（site-sections.css:521-525），
   这一档标题多是两行，行高差会累积成整卡文字块高度差。 */
@media (max-width: 900px) {
  .comu-section.comu-bento .bento-heading {
    line-height: 1.35;
  }
}

/* ==========================================================================
   商品入口卡「Learn more」快速查看弹窗（设计稿 .np-quick-view-modal）
   ==========================================================================
   设计稿那套选择器全是 np-*，是给设计稿自己那份静态购买区写的；本主题购买区
   走的是 Impact 结构 + comu-* 装饰层，所以这里按设计稿的**尺寸与版式**重写，
   不照抄类名。对齐的量：面板 min(1096px, 100vw-64px) × min(900px, 100dvh-64px)、
   圆角 18px、遮罩 rgba(0,0,0,.65) + blur(5px)、左右 52/48、≤900px 单列。
   设计稿面板另有 transform: scale(0.88)——那是设计稿整体按 0.8 出图留下的补偿，
   这里不带，直接用等比换算后的真实尺寸。 */
.comu-qv {
  position: fixed;
  inset: 0;
  z-index: 99999;
  display: flex;
  align-items: center;
  justify-content: center;
  padding: 32px;
  opacity: 0;
  transition: opacity 0.3s ease;
  overscroll-behavior: contain;
}

.comu-qv[hidden] {
  display: none;
}

.comu-qv.is-active {
  opacity: 1;
}

.comu-qv__overlay {
  position: absolute;
  inset: 0;
  background: rgba(0, 0, 0, 0.65);
  backdrop-filter: blur(5px);
}

.comu-qv__panel {
  position: relative;
  z-index: 1;
  display: flex;
  flex-direction: column;
  box-sizing: border-box;
  width: min(1096px, calc(100vw - 64px));
  height: min(900px, calc(100dvh - 64px));
  min-height: 560px;
  background: #fff;
  border-radius: 18px;
  box-shadow: 0 25px 50px -12px rgba(0, 0, 0, 0.3);
  overflow: hidden;
  transform: translateY(10px);
  transition: transform 0.3s ease;
}

.comu-qv.is-active .comu-qv__panel {
  transform: translateY(0);
}

.comu-qv__close {
  position: absolute;
  top: 20px;
  right: 20px;
  z-index: 60;
  display: flex;
  align-items: center;
  justify-content: center;
  width: 40px;
  height: 40px;
  padding: 0;
  border: none;
  border-radius: 50%;
  background: #f3f4f6;
  color: #4b5563;
  cursor: pointer;
  box-shadow: 0 2px 6px rgba(0, 0, 0, 0.08);
  transition: background-color 0.2s ease, color 0.2s ease;
}

.comu-qv__close svg {
  width: 20px;
  height: 20px;
}

.comu-qv__close:hover {
  background: #e5e7eb;
  color: #111827;
}

.comu-qv__body {
  flex: 1;
  min-height: 0;
  overflow-y: auto;
  overflow-x: hidden;
  overscroll-behavior: contain;
  padding: 28px 24px 24px 32px;
}

/* 注入的是商品页购买区。商品页上它是整页两栏，这里要压进弹窗，
   所以在弹窗作用域内把它的栅格重设成 52/48。
   `.product` 是 Impact 与 Comu v2 共用的外层类，两种模板都命中。 */
.comu-qv__body .product {
  display: grid;
  grid-template-columns: minmax(0, 52%) minmax(0, 48%);
  gap: 24px;
  align-items: start;
  margin: 0;
  padding: 0;
  max-width: none;
}

.comu-qv__body .product > * {
  min-width: 0;
}

/* 设计稿在快速查看里砍掉的长模块（site index.html:2493-2499）：
   优惠手风琴、促销卡、包装清单、ComuCare。弹窗只留核心购买链路。 */
.comu-qv__body .comu-ba,
.comu-qv__body .comu-promo-card,
.comu-qv__body .comu-included,
.comu-qv__body .comu-care,
.comu-qv__body .product-quick-add,
.comu-qv__body .comu-sticky-bar {
  display: none !important;
}

/* 抓来的购买区若自带支付图标，隐掉——弹窗底部那条由外壳渲染，可开关，是唯一一份。 */
.comu-qv__body .comu-payment-methods,
.comu-qv__body .comu-payment-methods__heading {
  display: none !important;
}

.comu-qv__status {
  display: flex;
  align-items: center;
  justify-content: center;
  gap: 10px;
  min-height: 240px;
  color: #6b7280;
  font-size: 15px;
}

.comu-qv__spinner {
  width: 18px;
  height: 18px;
  border: 2px solid #e5e7eb;
  border-top-color: #9ca3af;
  border-radius: 50%;
  animation: comu-qv-spin 0.8s linear infinite;
}

@keyframes comu-qv-spin {
  to { transform: rotate(360deg); }
}

@media (prefers-reduced-motion: reduce) {
  .comu-qv__spinner { animation: none; }
}

.comu-qv__footer {
  flex: none;
  padding: 14px 32px 18px;
  border-top: 1px solid #f1f5f9;
  background: #fff;
}

.comu-qv__pay-heading {
  margin: 0 0 8px;
  font-size: 13px;
  color: #6b7280;
}

.comu-qv__payments {
  display: flex;
  flex-wrap: wrap;
  gap: 6px;
  margin: 0;
  padding: 0;
  list-style: none;
}

.comu-qv__payments li {
  display: flex;
}

.comu-qv__payments svg {
  width: 38px;
  height: 24px;
}

/* 打开弹窗时锁页面滚动。用 position:fixed + top 负偏移保住滚动位置，
   关闭时 JS 再 scrollTo 回去——单纯 overflow:hidden 在 iOS 上锁不住。 */
body.comu-qv-open {
  position: fixed;
  width: 100%;
  overflow: hidden;
}

@media (max-width: 900px) {
  .comu-qv {
    padding: 12px;
  }

  .comu-qv__panel {
    width: 100%;
    height: min(100%, calc(100dvh - 24px));
    min-height: 0;
    border-radius: 14px;
  }

  .comu-qv__body {
    padding: 20px 16px;
  }

  .comu-qv__body .product {
    grid-template-columns: minmax(0, 1fr);
    gap: 16px;
  }

  .comu-qv__footer {
    padding: 12px 16px 14px;
  }
}

/* --------------------------------------------------------------------------
   快速查看弹窗内的购买区：把商品页版式收进弹窗
   --------------------------------------------------------------------------
   两类问题，成因不同，别混着改：

   ① 商品页里有一批样式是 `#shopify-section-<id>` 作用域的（见
      sections/main-product-comu.liquid 顶部的 <style>）。抓出来的 DOM 脱离了那个
      容器，这些规则全部失效——评分星星会竖着堆成一列就是这么来的。必须在弹窗
      作用域里补一份。
   ② 商品页的画廊在桌面是整列平铺（19 张图纵向排到 6700px 高）。弹窗里要的是
      单图 + 缩略图切换，所以把 media-list 从纵向 grid 改成横向 grid。
      它本身已经带 scroll-snap-type: x mandatory 与 overflow-x: auto，
      改了排列方向后 Impact 的缩略图（page-dots）就能直接驱动，不用写 JS。
   -------------------------------------------------------------------------- */

/* ② 画廊改横向轮播 */
.comu-qv__body .product-gallery__media-list {
  grid-auto-flow: column;
  grid-auto-columns: 100%;
  overflow-x: auto;
}

.comu-qv__body .product-gallery__media img,
.comu-qv__body .product-gallery__media video {
  max-height: min(46vh, 420px);
  width: 100%;
  object-fit: contain;
}

.comu-qv__body .product-gallery__thumbnail-list {
  padding-top: 4px;
}

/* 商品页的信息栏是 sticky 的；弹窗里外层已经在滚，sticky 会让它卡住不动。 */
.comu-qv__body .product-info,
.comu-qv__body safe-sticky {
  position: static;
  top: auto;
}

/* ① 补回被作用域丢掉的评分样式（源：main-product-comu.liquid 的 <style>） */
.comu-qv__body .review-badge {
  display: inline-flex;
  align-items: center;
  gap: 8px;
  width: fit-content;
  text-decoration: none;
  color: currentColor;
}

.comu-qv__body .review-badge__stars {
  position: relative;
  display: inline-flex;
  line-height: 0;
  color: #d8d8d8;
}

.comu-qv__body .review-badge__stars svg {
  display: block;
}

.comu-qv__body .review-badge__stars-base,
.comu-qv__body .review-badge__stars-fill {
  display: inline-flex;
  gap: 2px;
}

.comu-qv__body .review-badge__stars-fill {
  position: absolute;
  inset: 0 auto 0 0;
  overflow: hidden;
  color: #f7a416;
}

.comu-qv__body .review-badge__stars-fill > span {
  display: inline-flex;
  gap: 2px;
  flex: none;
}

.comu-qv__body .review-badge__count {
  font-size: 0.875rem;
}

/* 标题：商品页 h1 是 48px，弹窗右栏只有 ~500px 宽，按设计稿收到 26px。 */
.comu-qv__body .product-info__title {
  font-size: 26px;
  line-height: 1.25;
}

@media (max-width: 900px) {
  .comu-qv__body .product-info__title {
    font-size: 22px;
  }

  /* 移动端单列：画廊压到 32vh，保证标题/价格在首屏内可见，
     否则一屏全是图，用户得先滚一段才看到自己点开的是什么。 */
  .comu-qv__body .product-gallery__media img,
  .comu-qv__body .product-gallery__media video {
    max-height: 32vh;
  }
}

/* 滚动分工按设计稿：左侧画廊固定不动，只有右侧信息栏滚。
   （设计稿 .np-product-layout 高 100%、.np-gallery 高 100%、.np-product-info overflow-y:auto）
   放在这里而不是上面的 .comu-qv__body 定义处，是要压过它的 overflow-y:auto。 */
@media (min-width: 901px) {
  .comu-qv__body {
    overflow: hidden;
    padding: 0;
  }

  .comu-qv__body .product {
    height: 100%;
    gap: 0;
  }

  .comu-qv__body .product-gallery {
    height: 100%;
    overflow: hidden;
    padding: 28px 24px 24px 32px;
    box-sizing: border-box;
    align-content: center;
  }

  .comu-qv__body .product-info {
    height: 100%;
    overflow-y: auto;
    overscroll-behavior: contain;
    padding: 44px 24px 32px 40px;
    box-sizing: border-box;
    scrollbar-width: thin;
  }

  .comu-qv__body .product-info::-webkit-scrollbar {
    width: 8px;
  }

  .comu-qv__body .product-info::-webkit-scrollbar-thumb {
    background: #cbd5e1;
    border-radius: 4px;
  }
}

/* ==========================================================================
   hero 笔记本档高度（992–1439.98px）
   ==========================================================================
   设计稿 site-hero.css 是四档，不是三档：
     ≥1440 = 650（--hero-height-wide）
     992–1439.98 = 600（--hero-height-desktop）
     768–991.98 = 550（--hero-height-tablet）
     ≤767.98 = 600（--hero-height-mobile）
   我原来把「桌面」当成 ≥992 一整段，1200px 这类常见笔记本宽度会拿到 650，
   比设计稿高 50px。这里补出中间那一档。
   未设时沿用桌面值 → 预热页等既有实例行为不变。
   必须带下界 992px：不带的话会盖掉下面 769–991 的平板档（本项目栽过一次）。 */
@media (min-width: 992px) and (max-width: 1439.98px) {
  .comu-section.comu-hero.comu-hero--height-custom {
    --comu-hero-block-height: var(--comu-hero-height-laptop, var(--comu-hero-height-desktop, 720px));
  }
}

/* ==========================================================================
   hero 移动端按图片比例定高（≤767.98px）
   ==========================================================================
   About 首屏在设计稿里手机档不是固定高：图片按原始比例铺满宽度，section 跟着
   图高走（375 宽 → 538 高，767 宽 → 1100 高）。任何 px 值都做不到随宽度缩放。
   变量由 Liquid 从「移动端图片」的 aspect_ratio 写出，没选这个模式就不输出，
   所以这条规则对既有实例（预热页等）完全无影响。
   height:auto 必须写，否则前面按 height_mode 分档的 height 会压过 aspect-ratio。 */
@media (max-width: 767.98px) {
  .comu-section.comu-hero.comu-hero--m-aspect {
    height: auto;
    min-height: 0;
    aspect-ratio: var(--comu-hero-m-ar, 16 / 9);
  }
}

/* hero 平板档：让 --comu-hero-height-tablet 在所有高度模式下都生效
   （原来只在 custom 模式认这个值，full_viewport 模式的实例调不了平板高度）。
   未设置时回退到该模式自己算出的高度，行为不变。 */
@media (min-width: 768px) and (max-width: 991.98px) {
  .comu-section.comu-hero.comu-hero--height-full_viewport,
  .comu-section.comu-hero.comu-hero--height-compact,
  .comu-section.comu-hero.comu-hero--height-custom {
    height: var(--comu-hero-height-tablet, var(--comu-hero-block-height));
  }
}

/* ==========================================================================
   合规卡移动端横滑（About 页设计稿）
   ==========================================================================
   首页设计稿这一节手机上是 2 列换行，About 页设计稿是**一行横滑、整幅出血**
   （flex + overflow-x:auto，卡宽 154px，容器 padding 4px 24px 12px）。
   同一个 section 两种用法，靠 mobile_layout 设置区分，别改默认的两列。
   放文件末尾以压过前面 ≤768 那条同权重的两列 grid 规则。 */
@media (max-width: 768px) {
  .comu-section.comu-compliance--m-scroll .compliance-grid {
    display: flex;
    flex-wrap: nowrap;
    gap: 12px;
    width: 100vw;
    margin-inline: calc(50% - 50vw);
    padding: 4px 24px 12px;
    overflow-x: auto;
    scroll-snap-type: x mandatory;
    scroll-padding-inline: 24px;
    scrollbar-width: none;
  }

  .comu-section.comu-compliance--m-scroll .compliance-grid::-webkit-scrollbar {
    display: none;
  }

  .comu-section.comu-compliance--m-scroll .compliance-grid .compliance-card {
    /* 设计稿这张卡是竖向 flex + 居中，不是普通块流。块流下描述文字的可用宽度
       会少 8px，多折一行，卡片高出 26px。 */
    display: flex;
    flex: 0 0 154px;
    flex-direction: column;
    align-items: center;
    padding: 28px 16px;
    scroll-snap-align: start;
  }
}

/* About 横滑变体在手机上卡宽只有 154px，字号必须跟着降，否则描述要多折 3 行、
   卡片高 341px（设计稿 265px）。数值取自设计稿实测：标题 13/18、描述 11/15.4。 */
@media (max-width: 768px) {
  .comu-section.comu-compliance--m-scroll .compliance-card h3 {
    font-size: 13px;
    line-height: 18px;
  }

  .comu-section.comu-compliance--m-scroll .compliance-desc {
    font-size: 11px;
    line-height: 15.4px;
  }
}

/* hero 背景图放大裁切
   App 下载页设计稿把首屏底图 `transform: scale(1.35)` + origin center bottom，
   目的是把画面顶出构图、只留下方的手机与桌面画面。变量没设时是 scale(1)，
   对既有实例完全无影响。写在 .hero-media-image 上而不是容器上，
   容器还要承载 hero-shade 遮罩，一起缩会把遮罩也放大。 */
.comu-section.comu-hero .hero-media-image {
  transform: scale(var(--cp-hero-img-scale, 1));
  transform-origin: var(--cp-hero-img-origin, center center);
}

/* 标题区下间距的移动端档。桌面与移动端在设计稿里常常差很多
   （App 下载页桌面 37px、手机 10~12px），只有一个值会让手机端整页虚高。
   未设 --cp-heading-gap-m 时回退到桌面值，既有实例行为不变。 */
@media (max-width: 768px) {
  .comu-section .section-heading {
    margin-bottom: var(--cp-heading-gap-m, var(--cp-heading-gap, 56px));
  }
}


/* AI Key 模块的设备图在 900~1024 这一段比容器宽（.ckm-device-wrap 内部实测 1008px，
   容器只有 852px），撑得整页横滚——预热页、comu-app 页、v2 商品页、App 下载页都中招。
   设计稿同样溢出，属于照搬过来的既有缺陷，不是本次移植引入的。

   用 overflow-x: clip 而不是 hidden：clip 不会把 overflow-y 隐式变成 auto，
   设备图往下溢出 400px 的那段构图（.ckm-device-wrap 的 bottom: -400px）才保得住。 */
.comu-section.comu-ai-key {
  overflow-x: clip;
}

/* comu-benefits 的展示图带 `transform: scale(1.1)` 且靠右对齐，放大出来的那 5%
   会越过容器右缘——1200 档容器几乎贴着视口，于是整页横滚 18px。
   与 comu-ai-key 同样用 overflow-x: clip 裁掉：更宽的视口下容器两侧还有留白，
   裁不到任何画面，只在 1200 这一段把溢出的部分收住。 */
.comu-section.comu-benefits {
  overflow-x: clip;
}

/* ==========================================================================
   hero「按原图比例」高度（对标 Impact 原生的 Original image ratio）
   ==========================================================================
   Impact 的做法是让 <img> 走正常流、由图片自己撑出高度；本 section 的媒体层是
   绝对定位的（要承载遮罩层和文案层），撑不了高，所以用 aspect-ratio 达到等效结果。
   比例值由 Liquid 从图片的 aspect_ratio 写出。

   移动端不再有独立断点：比例的切换点和 <picture> 里移动图的切换点都是 767.98px。
   两者若错开，就会出现「显示的是这张图、高度按的是另一张图」的错位。 */
.comu-section.comu-hero.comu-hero--height-adapt_to_image {
  height: auto;
  min-height: 0;
  aspect-ratio: var(--comu-hero-d-ar, 16 / 9);
}

/* ==========================================================================
   adaptive 档的桌面端实现（2026-08-13 补）
   ==========================================================================
   「视频比例自适应」是 height_mode 的**默认值**，但它原先的规则全写在
   @media (max-width: 1024px) 里，桌面端没有任何 height 规则——
   .comu-section.comu-hero 基础规则是 height:auto，而媒体层是绝对定位的、
   撑不了高，于是桌面端高度塌成 0，再被区块自带的 overflow:hidden 裁光，
   表现为「模块完全不显示」。日本站首页实测：1025px 起 0px，1024px 及以下正常。
   运营在后台加 hero、不动高度设置就会踩到，属于「schema 有选项但前台不可用」。

   桌面端按媒体自身比例撑高，与选项名「自适应」语义一致；比例由 Liquid 从
   image / poster_image 的 aspect_ratio 写出，取不到时回退 16/9。

   ⚠️ 只作用于 ≥1025px：移动端那套 90svh 视口高度的规则原样保留，
   以免影响预热页等已在用 adaptive 的实例。 */
@media (min-width: 1025px) {
  .comu-section.comu-hero.comu-hero--height-adaptive {
    height: auto;
    min-height: 0;
    aspect-ratio: var(--comu-hero-d-ar, 16 / 9);
  }
}
}

@media (max-width: 767.98px) {
  .comu-section.comu-hero.comu-hero--height-adapt_to_image {
    aspect-ratio: var(--comu-hero-m-ar, var(--comu-hero-d-ar, 16 / 9));
  }
}

/* ==========================================================================
   hero 按图片比例定高时，不要上移到 header 底下
   ==========================================================================
   comu-sections.css:761-764 在 ≤1024px 给 hero 加了
   `margin-top: calc(-1 * var(--sticky-area-height))`，让区块滑到公告条 + header
   下面——预热页那种「满屏视频 + 白字、header 浮在画面上」需要这个。

   但「按图片比例」定高时，区块高度**就等于图片高度**，上移多少就等于从图片顶部
   裁掉多少：375 档实测被公告条(44) + header(56) 压掉 100px，正好是用户看到的
   「背景图被 header 遮住一截」。

   这里只把这两种模式排除掉，其余模式（满屏 / 自定义 / 自适应）保持原样，
   预热页与首页不受影响。
   用 :has() 是因为负外边距挂在 Shopify 生成的外层 <section> 上，
   而模式类在内层 div——不支持 :has() 的老浏览器会退回现有行为（图被裁），
   不会更糟。 */
@media (max-width: 1024px) {
  .shopify-section--comu-hero:has(.comu-hero--m-aspect),
  .shopify-section--comu-hero:has(.comu-hero--height-adapt_to_image) {
    margin-top: 0;
  }
}

/* ==========================================================================
   hero 按图片比例定高时，文案区不要再为 header 预留空间
   ==========================================================================
   ≤1024px 时 .cp-container 的 padding-top 是
     var(--sticky-area-height)          ← 补偿「区块上移到 header 底下」
   + env(safe-area-inset-top)
   + var(--hero-content-inset-top)      ← 让文案避开浮在画面上的 header
   实测 375 档合计 149.5px（100 + 49.5）。

   这两项都只在「区块被上移到 header 底下」时才有意义。按图片比例定高的 hero
   已经不再上移（见上一条规则），却仍在预留这 149.5px——于是即便把内容定位设成
   top-center、把「文案上间距」设成 0，文案还是被顶到了半腰，看起来像居中。
   「文案上间距」控制的是 .hero-content 的 padding-top，和这里不是同一个元素，
   所以调它没用。

   这里把容器的上留白清零，文案区的上间距就完全交给设置项——
   设 0 就是贴着区块顶部，设多少就是多少。 */
@media (max-width: 1024px) {
  .comu-section.comu-hero.comu-hero--m-aspect .cp-container,
  .comu-section.comu-hero.comu-hero--height-adapt_to_image .cp-container {
    padding-top: 0;
  }
}

/* ==========================================================================
   Bento 弹窗几何对齐设计稿（site-sections.css:401-461 的 .benefits-modal-*）
   ==========================================================================
   我原来那版是自拟的尺寸（520 宽 / 28 内边距 / 标题 20px），和设计稿差得比较远：
   设计稿是 760 宽、68-72-64 的大留白、标题 clamp(1.6rem, 2.2vw, 2rem)。
   关闭按钮在设计稿里是**框内右上角**的浅灰图标按钮，不是浮在框外的白色圆钮。
   放文件末尾以压过前面的定义。 */
.comu-bento-modal {
  box-sizing: border-box;
  width: min(90vw, 760px);
  max-width: none;
  max-height: min(78vh, 560px);
  padding: 68px 72px 64px;
  border-radius: 24px;
  overflow-y: auto;
  box-shadow: 0 24px 70px rgb(0 0 0 / 28%);
  color: var(--cp-color-text-main, #191c1d);
  line-height: normal;
}

.comu-bento-modal::backdrop {
  background: rgba(12, 16, 22, 0.62);
  -webkit-backdrop-filter: blur(5px);
  backdrop-filter: blur(5px);
}

.comu-bento-modal__close {
  top: 20px;
  right: 22px;
  width: 36px;
  height: 36px;
  padding: 6px;
  background: none;
  color: #b3b3b3;
}

.comu-bento-modal__close:hover {
  background: #f2f4f6;
  color: #1a1a1a;
  transform: none;
}

/* 用 .comu-bento-modal 前缀提高一级权重——前面 4261 行那条同名规则里的
   `margin: 0 0 14px` 与本条同权重，靠后不一定能压过（同权重时才比顺序，
   但那条在别处还被更具体的选择器命中过）。 */
.comu-bento-modal .comu-bento-modal__title {
  /* 设计稿 1440 档实测 31.68px / 行高 39.6px；右侧留 44px 给关闭按钮 */
  margin: 0 44px 20px 0;
  font-size: clamp(1.6rem, 2.2vw, 2rem);
  line-height: 1.25;
  color: #1b1b1b;
}

.comu-bento-modal__body {
  line-height: normal;
}

@media (max-width: 768px) {
  .comu-bento-modal {
    padding: 56px 24px 32px;
  }
}

/* ==========================================================================
   Comu 视频标签页 · 标签横向滑动档
   ==========================================================================
   标签文案长时（首页「Just record and ask…」那一节），换行会把标签栏撑成三四行，
   把下面的画面推得很低。这一档让标签排成不换行的一行、超出部分裁掉，用户左右滑动。

   要点：
   · flex-wrap: nowrap + overflow-x: auto —— 这就是「超出部分隐藏 + 可滑动」
   · justify-content 写两遍：标签少时居中，多到溢出时用 `safe center` 退回左对齐。
     只写 center 的话，溢出方向会往两边跑，最左边那个标签会滑不到、被永久裁掉。
   · 滚动条隐藏：设计稿的标签栏没有可见滚动条，靠手势/触控板滑
   · 字号回退 11px（本档专属）——其它档保持原来的 13px，不影响另一个实例
   · 放文件末尾，以压过 ≤768 档把标签栏改成 grid 的那几条 */
.comu-video-tabs--ovf-scroll .comu-video-tabs__nav {
  display: flex;
  flex-wrap: nowrap;
  justify-content: flex-start;
  justify-content: safe center;
  width: 100%;
  max-width: 100%;
  overflow-x: auto;
  overflow-y: hidden;
  -webkit-overflow-scrolling: touch;
  scroll-snap-type: x proximity;
  scroll-padding-inline: 4px;
  scrollbar-width: none;
  -ms-overflow-style: none;
}

.comu-video-tabs--ovf-scroll .comu-video-tabs__nav::-webkit-scrollbar {
  display: none;
}

.comu-video-tabs--ovf-scroll .comu-video-tabs__tab {
  flex: 0 0 auto;
  width: auto;
  min-height: 0;
  scroll-snap-align: start;
  white-space: nowrap;
  font-size: var(--cp-vt-tab-font, 11px);
}

@media (max-width: 768px) {
  /* ≤768 档原本把标签栏改成 grid（两三列换行），横滑档要把它扳回 flex。
     取值对齐 2026-08-10 设计稿 `#interactive-features .home-ask-carousel`：
     nav padding 0 20px 4px（首尾标签离屏幕边缘留白，靠 scroll-padding 保证能滑到）、
     标签 padding 6px 8px / line-height 1.16 / 吸附居中。 */
  .comu-video-tabs--ovf-scroll .comu-video-tabs__nav,
  .comu-video-tabs--ovf-scroll.comu-video-tabs--tabs-equal .comu-video-tabs__nav {
    display: flex;
    grid-template-columns: none;
    padding: 0 20px 4px;
    scroll-padding-inline: 20px;
  }

  .comu-video-tabs--ovf-scroll .comu-video-tabs__tab,
  .comu-video-tabs--ovf-scroll.comu-video-tabs--tabs-equal .comu-video-tabs__tab {
    /* 定宽（--cp-vt-tab-w-m）未设时退回按文字宽度，老实例行为不变 */
    flex: 0 0 var(--cp-vt-tab-w-m, auto);
    width: var(--cp-vt-tab-w-m, auto);
    height: auto;
    min-height: var(--cp-vt-tab-mh-m, 0px);
    padding: 6px 8px;
    font-size: var(--cp-vt-tab-font-m, var(--cp-vt-tab-font, 11px));
    line-height: 1.16;
    /* 定宽时文案要在标签内换行，不能 nowrap（基础横滑规则写的是 nowrap） */
    white-space: normal;
    scroll-snap-align: center;
  }
}

/* ==========================================================================
   视频标签页「固定裁切」档：画面框比例由设置决定，不跟素材走
   ==========================================================================
   Liquid 里画面框的比例来自素材自身：
     <video-media style="--aspect-ratio: {{ video.aspect_ratio }}">
   首页那组「Just record and ask」的视频是**竖版手机录屏**（比例约 0.458），
   因为在首页它们是嵌在手机框里的（image_inset_video 模式），竖版才对。
   同一支视频拿到商品页的 standard 模式用，画面框就继承了 0.458 —— 实测被拉成
   1128×2463，这就是「模块变形」。

   `media_fit: fixed` 这个设置名本来就承诺「固定裁切」，但此前只有 --fit-natural
   有规则、fixed 什么都没做。这里把它补上：固定档下画面框按设定比例，素材 cover 裁切。
   放文件末尾以压过 <video-media> 自带的 --aspect-ratio。 */
.comu-video-tabs--fit-fixed .comu-video-tabs__media,
.comu-video-tabs--fit-fixed .comu-video-tabs__media--poster,
.comu-video-tabs--fit-fixed .comu-video-tabs__media--image {
  aspect-ratio: var(--cp-vt-ratio, 16 / 9);
  height: auto;
}

.comu-video-tabs--fit-fixed .comu-video-tabs__media video,
.comu-video-tabs--fit-fixed .comu-video-tabs__media img,
.comu-video-tabs--fit-fixed .comu-video-tabs__media iframe {
  width: 100%;
  height: 100%;
  object-fit: cover;
}

/* 嵌手机框那一档不受影响：它的画面框由手机底图决定，比例本来就该跟着底图 */
.comu-video-tabs--mode-image_inset_video.comu-video-tabs--fit-fixed .comu-video-tabs__media--inset {
  aspect-ratio: auto;
}

/* --- Comu 套餐表：字号缩放（2026-08-10）-----------------------------------
   表里有十几处写死的 font-size（桌面 7~18px 不等，移动端另有一档），
   逐个开设置项不现实，所以统一改成 `calc(原值 * var(--cp-plans-fs, 1))`：
   缩放留空 = 1，渲染与改造前逐像素一致。
   另有 4 个最常调的走独立变量（--cp-plans-fs-table / -rowlabel / -planname / -price），
   默认值就是各自原值。
   移动端单独一档缩放，写在末尾 + 多带一级权重，压过前面按断点分好的规则。 */
@media (max-width: 768px) {
  .comu-section.comu-plans {
    --cp-plans-fs: var(--cp-plans-fs-m, var(--cp-plans-fs-d, 1));
  }
}

/* --- hero 按钮：对齐 2026-08-10 设计稿的 .plaud-hero .hero-actions .btn ---------
   设计稿实测（首页 hero）：
     ≥768px   160×60，padding 0（文字靠 flex 居中），font 18
     <768px   padding 8px 24px、font 16，宽高跟内容走（实测 147×38）
   只作用在 `--btn-compact` 变体上——About 页与预热页用 `--btn-default`，不受影响。

   选择器必须写到 `.comu-hero.comu-hero--btn-compact .hero-actions .cp-btn`：
   要压过的那条是 `.comu-section.comu-hero .hero-actions .cp-btn`（4 个类），
   只写 3 个类会输——本项目已经在移动端权重上栽过三次。 */
@media (min-width: 768px) {
  .comu-section.comu-hero.comu-hero--btn-compact .hero-actions .cp-btn,
  .comu-section.comu-hero.comu-hero--btn-compact .hero-actions .cp-btn--large {
    /* 定宽定高时 padding 必须归零，否则 box-sizing 之外再撑一圈 */
    width: var(--cp-hero-btn-w, 160px);
    height: var(--cp-hero-btn-h, 60px);
    padding: 0;
    font-size: 18px;
    box-sizing: border-box;
    display: inline-flex;
    align-items: center;
    justify-content: center;
  }
}

@media (max-width: 767.98px) {
  .comu-section.comu-hero.comu-hero--btn-compact .hero-actions .cp-btn,
  .comu-section.comu-hero.comu-hero--btn-compact .hero-actions .cp-btn--large {
    width: auto;
    height: auto;
    padding: 8px 24px;
    font-size: 16px;
  }
}


/* --- hero 按钮发光开关（2026-08-11）-----------------------------------------
   原来主按钮无条件带 `0 4px 12px` 的同色投影，首页/About/预热页都在发光。
   改成后台可控、默认关闭；勾选后恢复原来的取值。
   选择器要 4 个类：基础规则是 `.comu-section.comu-hero .cp-btn--primary`（3 个），
   同权重时靠后者赢，但这里刻意多带一级，避免以后有人在中间插规则又被压掉。 */
.comu-section.comu-hero.comu-hero--glow .cp-btn--primary {
  box-shadow: 0 4px 12px color-mix(in srgb, var(--comu-hero-primary-btn-bg, var(--cp-color-primary, #FFFFFF)) 35%, transparent);
}

/* --- bento 支付卡：自动取店铺支付图标（2026-08-11）---------------------------
   芯片本身沿用 .payment-badge 的几何（22px 高、4px 圆角、8px 间距、深色底），
   只把里面的文字换成 Shopify 官方支付 SVG。
   官方图标自带白/彩底的圆角卡片，所以芯片这里去掉自己的深色底与描边，
   否则会出现「深框套白卡」的双层边。宽度改为按图标自适应。 */
.payment-badge--icon {
  padding: 0;
  min-width: 0;
  width: auto;
  background-color: transparent;
  border-color: transparent;
  overflow: hidden;
}

.payment-badge--icon svg,
.payment-badge--icon img {
  display: block;
  height: 22px;
  width: auto;
  border-radius: 4px;
}

/* 模态框里的那份由 JS 复制卡面 innerHTML 而来，几何一致，只是外层间距不同 */
.comu-bento-modal__payments .payment-badge--icon svg,
.comu-bento-modal__payments .payment-badge--icon img {
  height: 24px;
}

/* --- 标签数 ≥5 时：标签栏与下方画面等宽、各标签均分（2026-08-11）--------------
   标签多了以后，按文字宽度排会长短不一（实测 133/144/171/195/132），
   且 tabs_max_width 会把标签栏卡得比画面窄（商品页 6 个标签时 1080 vs 1128）。
   ≥5 个时统一改成「与画面等宽 + 均分」。

   只作用于桌面：移动端标签多时走横向滑动更合适，均分会把每个压到 70px 放不下文字。
   选择器要 3 个类才压得过末尾的横滑档规则（.comu-video-tabs--ovf-scroll .…__tab
   把 flex 设成了 0 0 auto），且必须排在它之后。 */
@media (min-width: 769px) {
  .comu-section.comu-video-tabs.comu-video-tabs--tabs-fill .comu-video-tabs__nav {
    width: 100%;
    max-width: none;
    justify-content: stretch;
    overflow-x: visible;
  }

  .comu-section.comu-video-tabs.comu-video-tabs--tabs-fill .comu-video-tabs__tab {
    flex: 1 1 0;
    width: auto;
    /* min-width:0 是关键——不写的话 flex 项目的最小尺寸是内容宽度，
       文字长的那个标签仍会撑得更宽，均分失效。 */
    min-width: 0;
  }
}

/* --- Scenarios 横滑：移动端按「露出张数」定卡宽（2026-08-11）------------------
   原来是 `flex: 0 0 min(85vw, 340px)`——390px 屏上算出 331px，
   一屏正好一张多一条缝，看不出还能滑。
   改成按露出张数反推：露出 N 张时，卡宽 = (轨道宽 − 间距×(N−1)) / N。
   N 可在后台调（默认 1.3），gap 与基础规则保持一致的 24px。 */
@media (max-width: 768px) {
  .comu-section.comu-scenarios .scenario-card-new {
    flex: 0 0 calc(
      (100% - var(--cp-scn-gap, 24px) * (var(--cp-scn-peek, 1.3) - 1)) / var(--cp-scn-peek, 1.3)
    );
  }
}


/* --- 套餐表第 4 列勾选图标配色（2026-08-11）---------------------------------
   设计稿 App 下载页把第 4 列（Elite）从紫色改成深蓝黑底 + 香槟金勾。
   底色与符号色分开给变量：留空时底色跟随该列强调色、符号保持白色，
   老页面（预热页等）行为不变。 */
.comu-section.comu-plans .plan-table td:nth-child(4) .check-icon,
.comu-section.comu-plans .plan-table td:nth-child(4) .plan-check {
  background-color: var(--cp-plans-col4-check-bg, var(--cp-plans-col4, #7c3aed));
}

.comu-section.comu-plans .plan-table td:nth-child(4) .check-icon::after,
.comu-section.comu-plans .plan-table td:nth-child(4) .plan-check::after,
.comu-section.comu-plans .plan-table td:nth-child(4) .check-icon svg {
  color: var(--cp-plans-col4-check-mark, #ffffff);
  stroke: var(--cp-plans-col4-check-mark, #ffffff);
}

/* --- Video Tabs 弹窗播放（设计稿 .global-video-modal / modal-controls.css:1695）-----
   取值逐条对齐设计稿：遮罩 rgba(0,0,0,.85) + 5px 模糊、容器 max-width 1000 / 圆角 12 /
   黑底 / 90vh 封顶、视频 object-fit: contain、右上 40px 圆形关闭钮（hover 加亮）。

   不写 z-index：<dialog> 用 showModal() 打开后在浏览器的 top layer 里，
   天然压在所有内容之上，参与不了也不需要参与层级表那套比较。 */
.comu-video-modal {
  width: 100vw;
  max-width: 100vw;
  height: 100vh;
  max-height: 100vh;
  margin: 0;
  padding: 0;
  border: 0;
  background: transparent;
  overflow: hidden;
}

/* <dialog> 关闭态靠 UA 的 display:none。基础规则里一旦写了 display，
   关着的弹窗就会占位——所以只在 [open] 上开 flex。 */
.comu-video-modal[open] {
  display: flex;
  align-items: center;
  justify-content: center;
}

.comu-video-modal::backdrop {
  background-color: rgb(0 0 0 / 85%);
  backdrop-filter: blur(5px);
  -webkit-backdrop-filter: blur(5px);
}

.comu-video-modal__content {
  position: relative;
  width: 90%;
  max-width: 1000px;
  max-height: 90vh;
  aspect-ratio: 16 / 9;
  border-radius: 12px;
  overflow: hidden;
  background-color: #000;
  box-shadow: 0 25px 50px -12px rgb(0 0 0 / 50%);
}

.comu-video-modal__content--portrait {
  max-width: 450px;
}

.comu-video-modal__media,
.comu-video-modal__media video,
.comu-video-modal__media iframe {
  width: 100%;
  height: 100%;
  display: block;
  border: 0;
}

.comu-video-modal__media video {
  object-fit: contain;
}

.comu-video-modal__content--portrait .comu-video-modal__media video {
  object-fit: cover;
}

.comu-video-modal__close {
  position: absolute;
  top: 16px;
  right: 16px;
  z-index: 1;
  display: flex;
  align-items: center;
  justify-content: center;
  width: 40px;
  height: 40px;
  padding: 0;
  border: none;
  border-radius: 50%;
  background: rgb(255 255 255 / 20%);
  color: #fff;
  cursor: pointer;
  transition: background 0.2s ease;
}

.comu-video-modal__close:hover {
  background: rgb(255 255 255 / 40%);
}

.comu-video-modal__close svg {
  width: 24px;
  height: 24px;
}

/* 弹窗模式的视频框整块可点，光标要跟上 */
.comu-video-tabs__media--modal {
  cursor: pointer;
}

/* --- Product Entry 标题不换行 + 375 档价格字号（2026-08-12）--------------------
   标题换行的临界点很窄：「Comulytic Note Pro」@18px 天然宽 169px，而文字区可用宽
   375 档只有 168px（差 1px 就折行）、360 档 153、320 档 113。

   光加 white-space: nowrap 不够——放不下时文字会直接溢出到右侧按钮底下，
   比换行更糟。所以配 min-width:0 + overflow:hidden + ellipsis 兜底：
   永不换行、永不溢出，实在放不下就省略号。
   min-width:0 是必需的：flex 项默认 min-width:auto，压不到内容宽度以下，
   ellipsis 根本不会触发。 */
.comu-section.comu-product-entry .product-card-title {
  min-width: 0;
  white-space: nowrap;
  /* 不加 text-overflow: ellipsis —— 产品名不允许出现省略号。
     overflow: hidden 保留作兜底：万一运营填了远超现有长度的标题，
     宁可在文字区边缘截断，也不要让它滑到右侧按钮底下去。
     现有两个标题在 320~430 全档都放得下，兜底不会触发。 */
  overflow: hidden;
}

@media (max-width: 375px) {
  /* 标题 18 → 14px：「Comulytic Note Pro」169 → 131px。
     375（可用 168）与 360（可用 153）都放得下且留有余量。 */
  .comu-section.comu-product-entry .product-card-content .product-card-title {
    font-size: 14px;
  }

  /* 价格按要求进一步缩小。缩到这个尺寸后划线价回到与现价同一行：
     现价 15px ≈ 94px + 间距 8 + 划线价 8px ≈ 50px = 152px < 可用 168px。 */
  .comu-section.comu-product-entry .product-card-content .product-card-price__now {
    font-size: 15px;
  }

  .comu-section.comu-product-entry .product-card-content .product-card-price__was {
    font-size: 8px;
  }
}

/* 320 档文字区只有 113px，14px 的标题（131px）仍放不下，而按钮列固定占了 103px。
   标题不允许换行也不允许省略号，只能从按钮那边匀宽度出来：
   内边距 16 → 8、字号 13 → 12，按钮约 103 → 82px，文字区随之涨到约 134px。
   只在这一档收窄，375/360 的按钮维持原样。 */
@media (max-width: 340px) {
  .comu-section.comu-product-entry .product-card-content .product-card-actions .btn-light-gray {
    padding: 0 8px;
    font-size: 12px;
  }

  /* 文字区与按钮列之间的间距也收一点，给标题再多留几像素冗余 */
  .comu-section.comu-product-entry .product-card-content {
    gap: 10px;
  }
}
