/* ============================================================
   MOAT 品牌层（配色与参考网站一致：黑白灰 + 克制深绿 accent）
   原站 token 保留生效：--text-color #1e2124 / --body-color #fff /
   --body-color-medium #f3f3f3 / --accent-color #2b5945 / hover rgba(30,33,36,.33)
   本文件只承载 MOAT 新增的几何视觉组件，不覆盖配色。
   ============================================================ */

/* ---------- 通用字体渲染 ---------- */
body {
  -webkit-font-smoothing: antialiased;
  text-rendering: optimizeLegibility;
}

/* ---------- topNav「MOAT」文字标：浏览器默认下划线覆盖（用户反馈） ---------- */
.ptcom-design__branding__dvbsn2 {
  text-decoration: none;
}

/* ---------- 「MOAT」文字标（Geist Sans 700 特殊字距，替代 LOGO 图） ---------- */
.moat-wordmark {
  font-family: "Geist Sans Variable", "PingFang SC", "Microsoft YaHei", sans-serif;
  font-weight: 700;
  font-size: 1.02rem;
  line-height: 1;
  letter-spacing: -0.02em;
  color: inherit;
  white-space: nowrap;
  display: inline-block;
  user-select: none;
}
.ptcom-design__navBrand__dvbsn2 .moat-wordmark {
  font-size: 1.05rem;
  letter-spacing: -0.025em;
}
/* 加载页（白底灰擦除动画，深色字 + 更大字号） */
.ptcom-design__palantirLogo__ec3r6t .moat-wordmark {
  font-size: 3.5rem;
  font-weight: 800;
  letter-spacing: -0.03em;
  color: var(--text-color, #1e2124);
}
/* 深色横幅（banner dark 状态）自动反白 */
.ptcom-design__banner__todd69.ptcom-design__dark__todd69 .moat-wordmark {
  color: #fff;
}

/* ---------- 几何视觉组件（子页面 hero / 封面占位用） ---------- */
.moat-hero-bg {
  position: absolute;
  inset: 0;
  background: radial-gradient(ellipse 60% 50% at 72% 30%, rgba(255, 255, 255, 0.05), transparent 60%),
    radial-gradient(ellipse 40% 35% at 18% 75%, rgba(43, 89, 69, 0.12), transparent 55%),
    #0d0e10;
}
.moat-hero-grid {
  position: absolute;
  inset: 0;
  background-image:
    linear-gradient(rgba(255, 255, 255, 0.045) 1px, transparent 1px),
    linear-gradient(90deg, rgba(255, 255, 255, 0.045) 1px, transparent 1px);
  background-size: 64px 64px;
  mask-image: radial-gradient(ellipse 85% 75% at 60% 40%, black 30%, transparent 75%);
  -webkit-mask-image: radial-gradient(ellipse 85% 75% at 60% 40%, black 30%, transparent 75%);
}
.moat-hero-glow {
  position: absolute;
  left: 50%;
  bottom: -20%;
  width: 60%;
  height: 45%;
  background: radial-gradient(ellipse, rgba(255, 255, 255, 0.07), transparent 70%);
  transform: translateX(-50%);
  filter: blur(20px);
}

/* ---------- 轮播封面占位（无图时用；当前轮播已恢复原图） ---------- */
.moat-card-cover {
  width: 100%;
  height: 100%;
  border-radius: 6px;
  background: #0d0e10;
  position: relative;
  display: flex;
  align-items: flex-start;
  justify-content: flex-end;
  overflow: hidden;
  z-index: 0;
}
.moat-card-cover::before {
  content: "";
  position: absolute;
  inset: 0;
  background-image:
    linear-gradient(rgba(255, 255, 255, 0.055) 1px, transparent 1px),
    linear-gradient(90deg, rgba(255, 255, 255, 0.055) 1px, transparent 1px);
  background-size: 42px 42px;
}
.moat-card-cover::after {
  content: "";
  position: absolute;
  inset: 0;
  background: radial-gradient(ellipse 70% 55% at 75% 25%, rgba(43, 89, 69, 0.25), transparent 65%);
}
.moat-card-cover span {
  position: relative;
  z-index: 1;
  font-family: "Geist Mono Variable", monospace;
  font-size: clamp(4rem, 9vw, 7rem);
  font-weight: 500;
  line-height: 1;
  color: rgba(255, 255, 255, 0.92);
  letter-spacing: -0.04em;
  margin: 28px 28px 0 0;
}

/* ---------- 产品区视觉（≥1500px 显示；v8.0 起作为描述列的第二子列，
   原站 CSS >div:last-child{display:block;width:50%} 命中的就是它——宽度自适应列） ---------- */
.moat-product-visual {
  display: none;
}
@media (min-width: 93.75em) {
  .moat-product-visual {
    display: flex;
    align-items: center;
    justify-content: center;
    width: 100%;
    height: 100%;
    min-height: 200px;
    background: #0d0e10;
    border-radius: 6px;
    position: relative;
    overflow: hidden;
  }
  .moat-product-visual::before {
    content: "";
    position: absolute;
    inset: 0;
    background-image:
      linear-gradient(rgba(255, 255, 255, 0.06) 1px, transparent 1px),
      linear-gradient(90deg, rgba(255, 255, 255, 0.06) 1px, transparent 1px);
    background-size: 28px 28px;
  }
  .moat-product-no {
    position: relative;
    font-family: "Geist Mono Variable", monospace;
    font-size: 3rem;
    font-weight: 500;
    /* v8.10：产品区只允许黑白灰，编号去绿色 accent */
    color: #1e2124;
    letter-spacing: -0.03em;
  }
}

/* ---------- 产品区入场点亮（v8.0：对齐原站"滚动到产品行才点亮标题"——
   IO 一次性触发（clone.js 第 5 节 js-lit），不再像 v5.0 scroll 监听那样反复闪烁；
   只做 opacity，transform 留给原站 hover slide 动画） ---------- */
.ptcom-design__productListItem__1wh9urk h3 {
  opacity: 0.12;
  transition: opacity 0.7s ease;
}
.ptcom-design__productListItem__1wh9urk.js-lit h3 {
  opacity: 1;
}
.ptcom-design__productListItem__1wh9urk:nth-child(2).js-lit h3,
.ptcom-design__productListItem__1wh9urk:nth-child(3).js-lit h3,
.ptcom-design__productListItem__1wh9urk:nth-child(4).js-lit h3,
.ptcom-design__productListItem__1wh9urk:nth-child(5).js-lit h3 {
  transition: opacity 0.7s ease 0.12s; /* 逐条错峰 120ms，与轮播/列表点亮的节奏一致 */
}

/* ---------- Duplex 视觉面板（当前已恢复原图） ---------- */
.moat-duplex-visual {
  width: 100%;
  height: 100%;
  min-height: 320px;
  background: #0d0e10;
  border-radius: 6px;
  position: relative;
  overflow: hidden;
  display: flex;
  align-items: flex-end;
  padding: 24px;
  box-sizing: border-box;
}
.moat-duplex-grid {
  position: absolute;
  inset: 0;
  background-image:
    linear-gradient(rgba(255, 255, 255, 0.055) 1px, transparent 1px),
    linear-gradient(90deg, rgba(255, 255, 255, 0.055) 1px, transparent 1px);
  background-size: 48px 48px;
  mask-image: radial-gradient(ellipse 80% 80% at 30% 20%, black 20%, transparent 70%);
  -webkit-mask-image: radial-gradient(ellipse 80% 80% at 30% 20%, black 20%, transparent 70%);
}
.moat-duplex-visual::after {
  content: "";
  position: absolute;
  width: 55%;
  height: 60%;
  right: -8%;
  top: -15%;
  background: radial-gradient(ellipse, rgba(43, 89, 69, 0.3), transparent 65%);
}
.moat-duplex-tag {
  position: relative;
  z-index: 1;
  font-family: "Geist Mono Variable", monospace;
  font-size: 0.72rem;
  letter-spacing: 0.18em;
  color: rgba(255, 255, 255, 0.75);
  text-transform: uppercase;
}

/* ---------- 产品区（五关键）v7.0：恢复原站布局与 hover 动效 ----------
   原站结构：左描述中段文本（50% 宽）+ 右标题词组，328px 行高；
   hover 全宽背景条 + 标题 slide-right + 编号变黑由原站 CSS 承接，此处不再覆盖。 */

/* v7.1：产品行入场动画对齐原站——滚动到该行时标题+描述从暗点亮（一次性，不闪烁）。
   原站是"滚动到对应产品才亮标题"的粘性区设计；v5.0 滚动监听反复置 opacity 会闪烁，
   改用 IntersectionObserver 一次性点亮（clone.js 第 5 节），视觉一致且无闪烁。 */
.ptcom-design__productListItem__1wh9urk .ptcom-design__productTitleContainer__1wh9urk h3,
.ptcom-design__productListItem__1wh9urk .ptcom-design__productDescriptionContainer__1wh9urk p:first-child {
  opacity: 0.12;
  transition: opacity 0.7s ease 0.1s;
}
.ptcom-design__productListItem__1wh9urk.js-lit .ptcom-design__productTitleContainer__1wh9urk h3,
.ptcom-design__productListItem__1wh9urk.js-lit .ptcom-design__productDescriptionContainer__1wh9urk p:first-child {
  opacity: 1;
}
/* v7.1：五业务标题下方的小字描述（用户反馈"标题下面需要有一段小字简单描述"——
   原站描述 20px 偏大，收敛为 16px 克制小字 + 中灰） */
.ptcom-design__productDescriptionContainer__1wh9urk p:first-child {
  font-size: 16px;
  line-height: 1.75;
  color: #636363;
  max-width: 34em;
}
/* v8.2：描述加长后，描述列 30% → 60%（视觉列 50% → 30%）。
   覆盖原站 ≥1500px 的 >div:first-child{width:30%} / >div:last-child{width:50%}，
   同断点后载生效；60%+30%+gap48px = 696px ≤ 720px 列宽 */
@media (min-width: 93.75em) {
  .ptcom-design__productDescriptionContainer__1wh9urk > div:first-child {
    width: 60%;
  }
  .ptcom-design__productDescriptionContainer__1wh9urk > div:last-child {
    width: 30%;
  }
}
/* v8.2：删掉描述列小编号后，长文本 p 同时是 first-child 与 last-child——
   原站 p:last-child{display:none}（≤1499px）会误伤整段描述（v8.0 同类陷阱，
   当时靠补第二列规避）；:only-child 保底显示，全宽度生效 */
.ptcom-design__productDescriptionContainer__1wh9urk p:only-child {
  display: block;
}

/* ---------- callout（五判断上方文段）：68px 巨字 → 克制小字（用户反馈） ---------- */
.ptcom-design__callout__1mqe29f {
  font-size: clamp(1.25rem, 2vw, 1.6rem) !important;
  line-height: 1.65 !important;
  letter-spacing: -0.015em !important;
  max-width: 860px !important;
  margin: 0 auto !important;
  padding: 0 48px;
}
.ptcom-design__callout__1mqe29f > span {
  /* v8.14：全站去绿（用户：页面出现的绿色删干净） */
  color: #1e2124;
}

/* ---------- 减少动效偏好 ---------- */
@media (prefers-reduced-motion: reduce) {
  .moat-hero-glow,
  .moat-duplex-visual::after {
    animation: none !important;
  }
  .js-callout {
    background-image: none;
    color: inherit;
    opacity: 1 !important;
    transform: none !important;
  }
}

/* ---------- 行业落地区块标题（2.16a，v6.0：只留词组式 h2，删 kicker/lead） ----------
   v8.2：标题位置对齐修复——删 max-width:1200 居中 + 48px 侧内边距
   （标题 x=248 而下方 selector 行 x=80，左右错位 168px）；
   删 72px 上内边距（父级 productListContent 已有 padding-top:72px，双层间距让标题悬空） */
.moat-impact-head {
  max-width: none;
  margin: 0;
  padding: 0 0 24px;
}
.moat-impact-title {
  font-size: clamp(1.9rem, 3.4vw, 2.75rem);
  line-height: 1.18;
  letter-spacing: -0.02em;
  color: #1e2124;
  margin: 0;
  font-weight: 600;
}
@media (max-width: 768px) {
  .moat-impact-head {
    padding: 0 0 20px;
  }
}

/* ---------- 行业落地模块移动端适配（v8.20：仅 <768px 生效，桌面端完全不动）
   原 palantir 断点 35em(560px) 切桌面形态，导致 561~767px 看到巨型卡 + 12 标签
   挤成多行；<560px 标签条整个隐藏，用户失去位置感知。
   策略：移动端标签条可见可横滚、卡片 88% 宽留出下一张边缘、文字底部深色渐变
   保证任意图都可读、隐藏冗余 ctaButton 与 mobileReferenceText。 ---------- */
@media (max-width: 767px) {
  /* 1. 标签按钮条：可见 + 横向滚动 */
  .ptcom-design__carouselHeader__1meiksk {
    display: flex;
    margin-bottom: 16px;
  }
  .ptcom-design__cardSelectorContainer__1meiksk {
    flex-wrap: nowrap;
    overflow-x: auto;
    -webkit-overflow-scrolling: touch;
    scrollbar-width: none;
    padding: 0 16px;
    gap: 8px;
    justify-content: flex-start;
  }
  .ptcom-design__cardSelectorContainer__1meiksk::-webkit-scrollbar {
    display: none;
  }
  .ptcom-design__cardSelector__1meiksk {
    flex-shrink: 0;
    padding: 10px 14px;
    height: 32px;
    font-size: 13px;
    gap: 0;
  }

  /* 2. 卡片容器：高度 auto + 88% 宽可见下一张边缘 */
  .ptcom-design__container__1meiksk {
    height: auto;
    scroll-snap-type: x mandatory;
    padding: 0 16px;
    margin-top: 24px;
  }
  .ptcom-design__item__1meiksk {
    flex: 0 0 88%;
    scroll-snap-align: center;
  }
  .ptcom-design__feature__3v2tsm {
    height: auto;
  }
  .ptcom-design__image__3v2tsm {
    height: 280px;
  }

  /* 3. 文字容器：底部深色渐变蒙版（不用 blur 避免移动端性能问题） */
  .ptcom-design__textContainer__3v2tsm {
    position: absolute;
    left: 0;
    right: 0;
    bottom: 0;
    top: auto;
    margin: 0;
    padding: 32px 18px 18px;
    background: linear-gradient(
      to top,
      rgba(0, 0, 0, 0.88) 0%,
      rgba(0, 0, 0, 0.6) 60%,
      transparent 100%
    );
    border-radius: 0 0 6px 6px;
    -webkit-backdrop-filter: none;
    backdrop-filter: none;
  }
  .ptcom-design__title__3v2tsm {
    text-align: left;
    font-size: 20px;
    line-height: 24px;
    letter-spacing: -0.4px;
    color: #fff;
  }
  .ptcom-design__title__3v2tsm:after {
    content: " ↗";
  }
  .moat-card-sub {
    font-size: 13px;
    line-height: 1.55;
    color: rgba(255, 255, 255, 0.88);
    max-width: 100%;
    margin-top: 8px;
  }

  /* 4. 隐藏冗余元素：mobileReferenceText 与标签条重复、ctaButton 与卡片本身链接重复 */
  .ptcom-design__mobileReferenceText__1meiksk {
    display: none;
  }
  .ptcom-design__ctaButton__3v2tsm {
    display: none;
  }
  .ptcom-design__controls__3v2tsm {
    display: none !important;
    animation: none !important;
  }
  /* 移动端用原生横滑，桌面端的浮动 ← → 按钮不显示 */
  .moat-carousel-controls {
    display: none !important;
  }
}

/* ---------- 行业卡描述（v6.0：深色 blur overlay 上白字才看得清） ---------- */
.moat-card-sub {
  font-size: 1rem;
  line-height: 1.55;
  color: #fff;
  opacity: 0.95;
  margin: 12px 0 0;
  max-width: 44ch;
}

/* ---------- 研究 marquee 卡链接化（原站 partner 证言卡 CSS 自带 text-decoration:none，补 color 继承） ---------- */
a.ptcom-design__card__c3vru4 {
  color: inherit;
}

/* ---------- callout 点亮入场（v6.0：恢复原站"滑入时文本逐渐点亮"——背景位置扫光，如进度条；
   v8.1：扫光数学修复——渐变左右两半（左实色 #1e2124 / 右半透明 0.25），
   background-size 200% 使 position 100% 时只显示右半（文字半透明未点亮）、
   position 0% 时只显示左半（文字全实色点亮），transition 扫过时亮段从左向右扩展。
   此前 size 220% + position 0% 只显示渐变前 45%，文字后半段永远透明（用户反馈"只显示中间四个字"）。 ----------
   初始态：opacity 0.4 + translateY 80px（build-moat 内联），进入视口后 clone.js 置 js-in-view：
   文字从左到右扫光点亮 + 上浮归位。span（深绿强调）不受 background-clip 影响，保持常显。 */
.js-callout {
  background-image: linear-gradient(90deg, #1e2124 0%, #1e2124 50%, rgba(30, 33, 36, 0.25) 50%, rgba(30, 33, 36, 0.25) 100%);
  background-clip: text;
  -webkit-background-clip: text;
  color: transparent;
  background-size: 200% 100%;
  background-position: 100% 0;
  transition:
    background-position 1.6s cubic-bezier(0.4, 0, 0.2, 1) 0.15s,
    opacity 1s ease,
    transform 1s cubic-bezier(0.4, 0, 0.2, 1);
}
.js-callout.js-in-view {
  background-position: 0% 0;
}

/* ---------- 产品行标题下小字（v8.0 引入；v8.8：桌面统一隐藏——跟随移动端内容结构，
   副标「感知 · 推理 · 执行」与下方描述文字信息重复，1500px+ 显示时还会在标题与
   描述之间插一行、破坏紧凑列表节奏；用 !important 压过原站 1500px 断点的 >p{display:none}
   反向需求） ---------- */
.moat-product-sub {
  display: none !important;
}

/* ---------- 研究 marquee 卡 hover（v7.0：原站"摘要从卡片外滑入"改掉——用户反馈奇怪。
   新思路：摘要常显半透明（未点亮），hover 点亮 + 轻上浮，卡片整体上浮 + 阴影；
   与 callout 扫光点亮的"点亮"语义一致） ---------- */
@media (min-width: 47.5em) {
  .ptcom-design__hoverTitleText__c3vru4 {
    transform: translateY(0);
    opacity: 0.45;
    transition: opacity 0.3s ease, transform 0.3s ease;
  }
  .ptcom-design__hoverTextContainer__c3vru4:hover .ptcom-design__hoverTitleText__c3vru4 {
    opacity: 1;
    transform: translateY(-4px);
  }
  .ptcom-design__hoverAppearSection__c3vru4 {
    opacity: 0.5;
    visibility: visible;
    transform: translateY(0);
    transition: opacity 0.3s ease, transform 0.3s ease;
  }
  .ptcom-design__hoverTextContainer__c3vru4:hover .ptcom-design__hoverAppearSection__c3vru4 {
    opacity: 1;
    transform: translateY(-4px);
  }
  a.ptcom-design__card__c3vru4 {
    transition: color 0.3s ease, transform 0.3s ease, box-shadow 0.3s ease;
  }
  a.ptcom-design__card__c3vru4:hover {
    transform: translateY(-6px);
    box-shadow: 0 16px 40px rgba(30, 33, 36, 0.14);
  }
}

/* ---------- navbar 按钮去竖线（v8.6：搜索/汉堡按钮基线 border:1px solid currentColor，
   在深色 banner 上表现为两按钮之间的黑色竖线；hover 背景反色动效不受影响；
   v8.7：追加 __1d8xeyx（预约咨询主按钮）——其与汉堡按钮相邻的左边黑竖线同源） ---------- */
.ptcom-design__button__17iacsa,
.ptcom-design__button__2ojheh,
.ptcom-design__button__1d8xeyx {
  border: none;
}

/* ---------- launchpad 品牌区（v8.3：左列 Navigation 眉标 → MOAT 字标 + slogan） ---------- */
.moat-lp-brand {
  padding-bottom: 28px;
}
.moat-lp-wordmark {
  font-size: 1.9rem;
  font-weight: 800;
  letter-spacing: -0.03em;
  color: var(--text-color, #1e2124);
}
.moat-lp-slogan {
  margin: 10px 0 0;
  font-size: 0.95rem;
  line-height: 1.5;
  color: #8a8a8a;
  max-width: 24em;
}
/* ---------- launchpad「全部研究」链接（v8.3：卡片列底部） ---------- */
.moat-lp-all {
  display: inline-block;
  margin-top: 24px;
  font-size: 0.95rem;
  line-height: 1.4;
  /* v8.10：全站只允许黑白灰，链接去绿色 accent */
  color: #1e2124;
  text-decoration: none;
  border-bottom: 1px solid transparent;
  transition: color 0.25s ease;
}
.moat-lp-all:hover {
  color: rgba(30, 33, 36, 0.65);
}
/* ---------- launchpad 研究卡 7 张（v8.6：七篇研究全部作为入口；
   ≥35em：wrap + 46% basis → 3×2 + 末卡全宽横条（7 张整齐 4 行）；
   移动端单列全显） ---------- */
@media (min-width: 35em) {
  .ptcom-design__launchpadBlock__4os7w7 {
    flex-wrap: wrap;
    gap: 24px;
  }
  .ptcom-design__launchpadBlock__4os7w7 > li {
    flex: 1 1 46%;
  }
  .ptcom-design__launchpadBlock__4os7w7 > li:last-child {
    flex: 1 1 100%;
  }
}
@media (max-width: 34.9375em) {
  .ptcom-design__launchpadBlock__4os7w7 > li:not(:first-child) {
    display: block;
  }
  .ptcom-design__launchpadBlock__4os7w7 > li {
    flex: 1 1 100%;
  }
}
/* ---------- launchpad 右区（v8.3：原站 4 块两列排布 → 现单 article 承载 4 卡，
   让 article 跨满 gridRow 两列，避免右半区空白） ---------- */
.ptcom-design__gridRow__4os7w7 > article {
  grid-column: 1 / -1;
}

/* ============================================================
   v8.18：footer 艺术感极简 + 柱廊底图（雕版画风格）
   底图来源：D:\MOAT\moat.best\public\images\footer-colonnade-1.webp
   处理：全局一层 ~85% 黑蒙版均匀覆盖整个 footer，柱廊成底纹
   风格延续 v8.17 极简研究列表 + 超大字标 + 极端字重对比。
   ============================================================ */
.moat-footer {
  position: relative;
  background-image: url("../images/footer-colonnade.webp");
  background-size: cover;
  background-position: center center;
  background-repeat: no-repeat;
  color: #c3c7ca;
  padding: 200px max(80px, calc((100vw - 1440px) / 2 + 80px)) 64px;
  font-family: "Geist Sans Variable", "PingFang SC", "Microsoft YaHei", sans-serif;
  width: 100vw;
  margin-left: calc(50% - 50vw);
  box-sizing: border-box;
  overflow: hidden;
}
/* 蒙版层：纯黑磨砂质感（颗粒噪点，不模糊底图） */
.moat-footer::before {
  content: "";
  position: absolute;
  inset: 0;
  background:
    url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='160' height='160'><filter id='n'><feTurbulence type='fractalNoise' baseFrequency='0.9' numOctaves='2' stitchTiles='stitch'/><feColorMatrix values='0 0 0 0 0  0 0 0 0 0  0 0 0 0 0  0 0 0 0.5 0'/></filter><rect width='100%' height='100%' filter='url(%23n)' opacity='0.6'/></svg>"),
    rgba(0, 0, 0, 0.75);
  background-size: 160px 160px, auto;
  background-repeat: repeat, no-repeat;
  z-index: 0;
  pointer-events: none;
  mix-blend-mode: normal;
}
.moat-footer,
.moat-footer * {
  box-sizing: border-box;
  position: relative;
  z-index: 1; /* 内容浮在底图之上 */
}
/* ---------- 字标：超大字标，海报感核心 ---------- */
.moat-footer-mark {
  display: block;
  font-family: "MiSans", "PingFang SC", "Microsoft YaHei", sans-serif;
  font-weight: 700;
  font-size: clamp(56px, 13vw, 200px);
  letter-spacing: -0.05em;
  line-height: 0.82;
  color: #f2f3f4;
  text-decoration: none;
  margin: 0;
  padding: 0;
  text-shadow: 0 2px 24px rgba(0, 0, 0, 0.4);
}
.moat-footer-slogan {
  display: block;
  margin: 48px 0 0;
  font-family: "Geist Mono Variable", "Geist Mono", monospace;
  font-size: 14px;
  font-weight: 400;
  line-height: 1.5;
  color: #9da2a6;
  letter-spacing: 0.04em;
}
/* ---------- 研究列表：双线目录式 ---------- */
.moat-footer-research {
  list-style: none;
  margin: 160px 0 0;
  padding: 0;
  display: grid;
  grid-template-columns: 1fr;
  border-top: 1px solid rgba(255, 255, 255, 0.18);
}
.moat-footer-research li a {
  display: flex;
  align-items: baseline;
  gap: 48px;
  padding: 28px 0;
  border-bottom: 1px solid rgba(255, 255, 255, 0.1);
  color: #b6babf;
  text-decoration: none;
  position: relative;
  transition: color 0.4s ease;
}
.moat-footer-research li a::after {
  content: "";
  position: absolute;
  left: 0;
  bottom: -1px;
  width: 0;
  height: 1px;
  background: #ffffff;
  transition: width 0.6s cubic-bezier(0.22, 1, 0.36, 1);
}
.moat-footer-research li a:hover {
  color: #ffffff;
}
.moat-footer-research li a:hover::after {
  width: 100%;
}
.moat-footer-research li a:hover .moat-footer-no,
.moat-footer-research li a:hover .moat-footer-name {
  color: #ffffff;
}
.moat-footer-no {
  font-family: "Geist Mono Variable", "Geist Mono", monospace;
  font-size: 36px;
  font-weight: 500;
  letter-spacing: 0.02em;
  color: #8a8e93;
  min-width: 72px;
  transition: color 0.4s ease;
}
.moat-footer-name {
  font-family: "Geist Sans Variable", "PingFang SC", "Microsoft YaHei", sans-serif;
  font-size: 16px;
  font-weight: 400;
  letter-spacing: 0.04em;
  color: #b6babf;
  transition: color 0.4s ease;
}
/* ---------- meta：邮件 + 版权 ---------- */
.moat-footer-meta {
  margin: 120px 0 0;
  padding: 0;
  display: flex;
  justify-content: space-between;
  align-items: baseline;
  gap: 24px;
  flex-wrap: wrap;
}
.moat-footer-mail {
  font-family: "Geist Mono Variable", "Geist Mono", monospace;
  font-size: 14px;
  font-weight: 400;
  color: #b6babf;
  text-decoration: none;
  letter-spacing: 0.04em;
  transition: color 0.3s ease;
}
.moat-footer-mail:hover {
  color: #ffffff;
}
.moat-footer-copy {
  margin: 0;
  font-family: "Geist Mono Variable", "Geist Mono", monospace;
  font-size: 13px;
  font-weight: 400;
  color: #7c8186;
  letter-spacing: 0.04em;
}
/* ---------- pages：关于 / 服务 / 术语表 链接行 ---------- */
.moat-footer-pages {
  list-style: none;
  margin: 44px 0 0;
  padding: 0;
  display: flex;
  gap: 36px;
  flex-wrap: wrap;
}
.moat-footer-pages a {
  font-family: "Geist Mono Variable", "Geist Mono", monospace;
  font-size: 13px;
  font-weight: 400;
  letter-spacing: 0.06em;
  color: #8a8e93;
  text-decoration: none;
  transition: color 0.3s ease;
}
.moat-footer-pages a:hover {
  color: #ffffff;
}

/* ---------- 平板 768-1023 ---------- */
@media (max-width: 1023px) {
  .moat-footer {
    padding: 140px 40px 56px;
  }
  .moat-footer-mark {
    font-size: clamp(56px, 14vw, 140px);
  }
  .moat-footer-slogan {
    margin-top: 36px;
    font-size: 13px;
  }
  .moat-footer-research {
    margin-top: 120px;
  }
  .moat-footer-research li a {
    padding: 22px 0;
    gap: 32px;
  }
  .moat-footer-no {
    font-size: 28px;
    min-width: 56px;
  }
  .moat-footer-name {
    font-size: 15px;
  }
  .moat-footer-meta {
    margin-top: 96px;
  }
}

/* ---------- 移动 <768 ---------- */
@media (max-width: 767px) {
  .moat-footer {
    padding: 96px 24px 48px;
  }
  .moat-footer-mark {
    font-size: clamp(48px, 16vw, 88px);
    letter-spacing: -0.04em;
  }
  .moat-footer-slogan {
    margin-top: 28px;
    font-size: 12px;
  }
  .moat-footer-research {
    margin-top: 80px;
  }
  .moat-footer-research li a {
    padding: 18px 0;
    gap: 20px;
  }
  .moat-footer-no {
    font-size: 22px;
    min-width: 44px;
  }
  .moat-footer-name {
    font-size: 14px;
  }
  .moat-footer-meta {
    margin-top: 72px;
    flex-direction: column;
    align-items: flex-start;
    gap: 16px;
  }
  .moat-footer-copy {
    font-size: 11px;
  }
}

/* ---------- 极小屏 <380 ---------- */
@media (max-width: 379px) {
  .moat-footer {
    padding: 72px 20px 36px;
  }
  .moat-footer-mark {
    font-size: 48px;
  }
  .moat-footer-research li a {
    padding: 16px 0;
    gap: 16px;
  }
  .moat-footer-no {
    font-size: 20px;
    min-width: 40px;
  }
}

/* ---------- 行业轮播 selector 进度条 ----------
   v8.19：去掉底部横线视觉。保留 DOM 与动画运行以驱动 animationend → 自动切下一张，
   仅把背景设为透明，视觉上完全不可见。 */
.ptcom-design__cardSelector__1meiksk {
  position: relative;
}
.moat-selector-progress {
  position: absolute;
  left: 0;
  bottom: 0;
  height: 2px;
  width: 100%;
  background: transparent;
  transform: scaleX(0);
  transform-origin: left;
  pointer-events: none;
}
.moat-selector-progress.is-running {
  animation: moat-progress var(--moat-auto-ms, 6s) linear forwards;
}
@keyframes moat-progress {
  from { transform: scaleX(0); }
  to { transform: scaleX(1); }
}
@media (prefers-reduced-motion: reduce) {
  .moat-selector-progress.is-running {
    animation: none; /* 动画不跑 → animationend 不触发 → 自动轮播自然停止 */
  }
  a.ptcom-design__card__c3vru4:hover {
    transform: none;
    box-shadow: none;
  }
}

/* v8.4：产品行大标题换得意黑（Smiley Sans，OFL 开源展示字体，字形右倾 8° 自带动感，
   与正文 Geist 形成「展示体 / 正文字」的字体层级对照；仅一档字重，保持 400）
   v8.9：换 MiSans Bold——用户反馈要「科技感 + 立正」的字体，得意黑右倾 8° 不正；
   MiSans（小米，Apache-2.0）字形立正、几何现代，拉丁/数字同为家族内字形 */
.ptcom-design__productTitleContainer__1wh9urk > h3 {
  font-family: "MiSans", "PingFang SC", "Microsoft YaHei", sans-serif;
  font-weight: 700;
  letter-spacing: 0.01em;
}
/* ---------- 产品区桌面化（v8.8：原站 ≥1500px 行布局——328px 高、10em 超大标题、
   hover 全宽灰底 + 图片/视频切换 + 标题滑动动画，花哨且与全站节奏不协调；
   桌面统一为移动端的纵向列表结构：编号+标题一行、描述紧随其下、清晰 hairline 行分隔，
   仅保留 hover 标题变品牌绿；48em 以下保持原移动端形态） ---------- */
@media (min-width: 47.5em) {
  .ptcom-design__productListItem__1wh9urk {
    flex-direction: column-reverse; /* 与移动端同构：title 上、desc 下 */
    height: auto;
    padding: 32px 0;
  }
  .ptcom-design__productListItem__1wh9urk .ptcom-design__icon__1wh9urk,
  .ptcom-design__productListItem__1wh9urk .ptcom-design__hoverVideo__1wh9urk {
    display: none; /* 1500px 断点会打开它们，覆盖禁用 */
  }
  .ptcom-design__productTitleContainer__1wh9urk {
    width: 100%;
    padding-bottom: 6px;
  }
  .ptcom-design__productTitleContainer__1wh9urk > h3 {
    font-size: 52px; /* v8.9：44 → 52（用户反馈「略微调大」） */
    letter-spacing: -0.02em;
  }
  .ptcom-design__productTitleContainer__1wh9urk > p.ptcom-design__number__1wh9urk {
    display: block; /* 1500px 断点隐藏 /01 编号，桌面统一显示（副标 moat-product-sub 保持隐藏） */
  }
  .ptcom-design__productDescriptionContainer__1wh9urk {
    width: 100%;
    max-width: 640px; /* 限制描述行长，避免全宽一行 */
  }
  .ptcom-design__productDescriptionContainer__1wh9urk > div:first-child {
    width: 100%;
    padding-bottom: 0;
  }
  .ptcom-design__productDescriptionContainer__1wh9urk > div:last-child {
    display: none; /* 1500px 断点打开图片区，覆盖禁用 */
  }
  .ptcom-design__productDescriptionContainer__1wh9urk > div:first-child > p:first-child {
    color: #26282b; /* 1500px 断点会把描述 p 变灰（p:last-child 命中唯一 p），锁定正文色 */
  }
  /* 禁原站 hover 动效（灰底全宽、标题滑动、编号变黑、图标/视频切换），
     换为标题 + 编号变品牌绿 */
  .ptcom-design__productListItem__1wh9urk:hover:before {
    display: none;
  }
  .ptcom-design__productListItem__1wh9urk:hover .ptcom-design__productTitleContainer__1wh9urk > h3,
  .ptcom-design__productListItem__1wh9urk:not(:hover) .ptcom-design__productTitleContainer__1wh9urk > h3,
  .ptcom-design__productListItem__1wh9urk:hover .ptcom-design__number__1wh9urk,
  .ptcom-design__productListItem__1wh9urk:not(:hover) .ptcom-design__number__1wh9urk {
    animation: none;
  }
  .ptcom-design__productListItem__1wh9urk:hover .ptcom-design__productTitleContainer__1wh9urk > h3,
  .ptcom-design__productListItem__1wh9urk:hover .ptcom-design__number__1wh9urk {
    /* v8.10：用户明确要求产品区只允许黑白灰，hover 去掉绿色 */
    color: #1e2124;
    transition: color 0.3s ease;
  }
}
/* 行分隔线：原 #f7f7f7 在白底上几乎不可见，改为清晰 hairline（全宽度统一） */
.ptcom-design__productListItem__1wh9urk {
  border-top-color: rgba(30, 33, 36, 0.12);
}
/* v8.9：移动端标题 72px 时「智能体架构」5 字 + MiSans 全宽字形 = 360px 超 375px 视口
   （得意黑斜体字形窄，恰好单行；换 MiSans 后换行两行）→ 60px 保证单行 */
@media (max-width: 47.4375em) {
  .ptcom-design__productTitleContainer__1wh9urk > h3 {
    font-size: 60px;
  }
}

/* v8.9：MiSans Bold 自托管（npm misans@4.1.0 分包，Apache-2.0；仅下载覆盖
   产品标题所需字符的 6 个分片，共 ~133KB；unicode-range 与源包一致；
   覆盖字符：智能/体/架构/企业/化/原/生产/品 + 拉丁数字。若产品文案出现
   分片外汉字 → 该字回退 PingFang/YaHei，需按 NOTES v8.9 的解析脚本补分片） */
@font-face { font-family: "MiSans"; font-style: normal; font-weight: 700; font-display: swap; src: url("../fonts/MiSans-Bold.114.woff2") format("woff2"); unicode-range: U+7e,U+2026,U+4e03,U+4e25,U+4e30,U+4e34,U+4e45,U+4e5d,U+4e89,U+4eae,U+4ed8,U+4f11,U+4f19,U+4f24,U+4f34,U+4f59,U+4f73,U+4f9d,U+4fb5,U+5047,U+505c,U+5170,U+519c,U+51cf,U+5267,U+5356,U+5374,U+5382,U+538b,U+53e6,U+5426,U+542b,U+542f,U+5462,U+5473,U+554a,U+5566,U+5708,U+571f,U+5757,U+57df,U+57f9,U+5802,U+590f,U+591c,U+591f,U+592b,U+5965,U+5979,U+5a01,U+5a5a,U+5b63,U+5b69,U+5b81,U+5ba1,U+5ba3,U+5c3c,U+5c42,U+5c81,U+5de7,U+5dee,U+5e0c,U+5e10,U+5e55,U+5e86,U+5e8f,U+5ea7,U+5f02,U+5f52,U+5f81,U+5ff5,U+60ca,U+60e0,U+6279,U+62c5,U+62ff,U+63cf,U+6444,U+64cd,U+653b,U+65bd,U+65e9,U+665a,U+66b4,U+66fe,U+6728,U+6742,U+677e,U+67b6,U+680f,U+68a6,U+68c0,U+699c,U+6b4c,U+6b66,U+6b7b,U+6bcd,U+6bdb,U+6c38,U+6c47,U+6c49,U+6cb3,U+6cb9,U+6ce2,U+6d32,U+6d3e,U+6d4f,U+6e56,U+6fc0,U+7075,U+7206,U+725b,U+72c2,U+73ed,U+7565,U+7591,U+7597,U+75c5,U+76ae,U+76d1,U+76df,U+7834,U+7968,U+7981,U+79c0,U+7a7f,U+7a81,U+7ae5,U+7b14,U+7c89,U+7d27,U+7eaf,U+7eb3,U+7eb8,U+7ec7,U+7ee7,U+7eff,U+7f57,U+7ffb,U+805a,U+80a1,U+822c,U+82cf,U+82e5,U+8363,U+836f,U+84dd,U+878d,U+8840,U+8857,U+8863,U+8865,U+8b66,U+8bb2,U+8bda,U+8c01,U+8c08,U+8c46,U+8d1f,U+8d35,U+8d5b,U+8d5e,U+8da3,U+8ddf,U+8f93,U+8fdd,U+8ff0,U+8ff7,U+8ffd,U+9000,U+9047,U+9152,U+949f,U+94c1,U+94f6,U+9646,U+9648,U+9669,U+969c,U+96ea,U+97e9,U+987b,U+987e,U+989d,U+9970,U+9986,U+9c7c,U+9c9c; }
@font-face { font-family: "MiSans"; font-style: normal; font-weight: 700; font-display: swap; src: url("../fonts/MiSans-Bold.115.woff2") format("woff2"); unicode-range: U+25,U+4e14,U+4e1d,U+4e3d,U+4e49,U+4e60,U+4e9a,U+4eb2,U+4ec5,U+4efd,U+4f3c,U+4f4f,U+4f8b,U+4fbf,U+5019,U+5145,U+514b,U+516b,U+516d,U+5174,U+5178,U+517b,U+5199,U+519b,U+51b3,U+51b5,U+5207,U+5212,U+5219,U+521d,U+52bf,U+533b,U+5343,U+5347,U+534a,U+536b,U+5370,U+53e4,U+53f2,U+5403,U+542c,U+547d,U+54a8,U+54cd,U+54ea,U+552e,U+56f4,U+5747,U+575b,U+5883,U+589e,U+5931,U+5947,U+5956-5957,U+5a92,U+5b83,U+5ba4,U+5bb3,U+5bcc,U+5c14,U+5c1a,U+5c3d,U+5c40,U+5c45,U+5c5e,U+5df4,U+5e72,U+5e95,U+5f80,U+5f85,U+5fb7,U+5fd7,U+601d,U+626b,U+627f,U+62c9,U+62cd,U+6309,U+63a7,U+6545,U+65ad,U+65af,U+65c5,U+666e,U+667a,U+670b,U+671b,U+674e,U+677f,U+6781,U+6790,U+6797,U+6821,U+6838-6839,U+697c,U+6b27,U+6b62,U+6bb5,U+6c7d,U+6c99,U+6d4b,U+6d4e,U+6d6a,U+6e29,U+6e2f,U+6ee1,U+6f14,U+6f2b,U+72b6,U+72ec,U+7387,U+7533,U+753b,U+76ca,U+76d8,U+7701,U+773c,U+77ed,U+77f3,U+7814,U+793c,U+79bb,U+79c1,U+79d8,U+79ef,U+79fb,U+7a76,U+7b11,U+7b54,U+7b56,U+7b97,U+7bc7,U+7c73,U+7d20,U+7eaa,U+7ec8,U+7edd,U+7eed,U+7efc,U+7fa4,U+804c,U+8058,U+80cc,U+8111,U+817e,U+826f,U+8303,U+843d,U+89c9,U+89d2,U+8ba2,U+8bbf,U+8bc9,U+8bcd,U+8be6,U+8c22,U+8c61,U+8d22,U+8d26-8d27,U+8d8a,U+8f6f,U+8f7b,U+8f83,U+8f91,U+8fb9,U+8fd4,U+8fdc,U+9002,U+94b1,U+9519,U+95ed,U+961f,U+9632-9633,U+963f,U+968f-9690,U+96be,U+9876,U+9884,U+98de,U+9988,U+9999,U+9ec4,U+ff1b; }
@font-face { font-family: "MiSans"; font-style: normal; font-weight: 700; font-display: swap; src: url("../fonts/MiSans-Bold.116.woff2") format("woff2"); unicode-range: U+2b,U+40,U+3000,U+300a-300b,U+4e16,U+4e66,U+4e70,U+4e91-4e92,U+4e94,U+4e9b,U+4ec0,U+4eca,U+4f01,U+4f17-4f18,U+4f46,U+4f4e,U+4f9b,U+4fee,U+503c,U+5065,U+50cf,U+513f,U+5148,U+518d,U+51c6,U+51e0,U+5217,U+529e-529f,U+5341,U+534f,U+5361,U+5386,U+53c2,U+53c8,U+53cc,U+53d7-53d8,U+53ea,U+5404,U+5411,U+5417,U+5427,U+5468,U+559c,U+5668,U+56e0,U+56e2,U+56ed,U+5740,U+57fa,U+58eb,U+5904,U+592a,U+59cb,U+5a31,U+5b58,U+5b9d,U+5bc6,U+5c71,U+5dde,U+5df1,U+5e08,U+5e26,U+5e2e,U+5e93,U+5e97,U+5eb7,U+5f15,U+5f20,U+5f3a,U+5f62,U+5f69,U+5f88,U+5f8b,U+5fc5,U+600e,U+620f,U+6218,U+623f,U+627e,U+628a,U+62a4,U+62db,U+62e9,U+6307,U+6362,U+636e,U+64ad,U+6539,U+653f,U+6548,U+6574,U+6613,U+6625,U+663e,U+666f,U+672a,U+6750,U+6784,U+6a21,U+6b3e,U+6b65,U+6bcf,U+6c11,U+6c5f,U+6df1,U+706b,U+7167,U+724c,U+738b,U+73a9,U+73af,U+7403,U+7537,U+754c,U+7559,U+767d,U+7740,U+786e,U+795e,U+798f,U+79f0,U+7aef,U+7b7e,U+7bb1,U+7ea2,U+7ea6,U+7ec4,U+7ec6,U+7ecd,U+7edc,U+7ef4,U+8003,U+80b2,U+81f3-81f4,U+822a,U+827a,U+82f1,U+83b7,U+8425,U+89c2,U+89c8,U+8ba9,U+8bb8,U+8bc6,U+8bd5,U+8be2,U+8be5,U+8bed,U+8c03,U+8d23,U+8d2d,U+8d34,U+8d70,U+8db3,U+8fbe,U+8fce,U+8fd1,U+8fde,U+9001,U+901f-9020,U+90a3,U+914d,U+91c7,U+94fe,U+9500,U+952e,U+9605,U+9645,U+9662,U+9664,U+9700,U+9752,U+975e,U+97f3,U+9879,U+9886,U+98df,U+9a6c,U+9a8c,U+9ed1,U+9f99; }
@font-face { font-family: "MiSans"; font-style: normal; font-weight: 700; font-display: swap; src: url("../fonts/MiSans-Bold.117.woff2") format("woff2"); unicode-range: U+4e,U+201c-201d,U+3010-3011,U+4e07,U+4e1c,U+4e24,U+4e3e,U+4e48,U+4e50,U+4e5f,U+4e8b-4e8c,U+4ea4,U+4eab-4eac,U+4ecb,U+4ece,U+4ed6,U+4ee3,U+4ef6-4ef7,U+4efb,U+4f20,U+4f55,U+4f7f,U+4fdd,U+505a,U+5143,U+5149,U+514d,U+5171,U+5177,U+518c,U+51fb,U+521b,U+5229,U+522b,U+52a9,U+5305,U+5317,U+534e,U+5355,U+5357,U+535a,U+5373,U+539f,U+53bb,U+53ca,U+53cd,U+53d6,U+53e3,U+53f0,U+5458,U+5546,U+56db,U+573a,U+578b,U+57ce,U+58f0,U+590d,U+5934,U+5973,U+5b57,U+5b8c,U+5b98,U+5bb9,U+5bfc,U+5c06,U+5c11,U+5c31,U+5c55,U+5df2,U+5e03,U+5e38,U+5e76,U+5e94,U+5efa,U+5f71,U+5f97,U+5feb,U+6001,U+603b,U+60f3,U+611f,U+6216,U+624d,U+6253,U+6295,U+6301,U+6392,U+641c,U+652f,U+653e,U+6559,U+6599,U+661f,U+671f,U+672f,U+6761,U+67e5,U+6807,U+6837,U+683c,U+6848,U+6b22,U+6b64,U+6bd4,U+6c14,U+6c34,U+6c42,U+6ca1,U+6d41,U+6d77,U+6d88,U+6e05,U+6e38,U+6e90,U+7136,U+7231,U+7531,U+767e,U+76ee,U+76f4,U+771f,U+7801,U+793a,U+79cd,U+7a0b,U+7a7a,U+7acb,U+7ae0,U+7b2c,U+7b80,U+7ba1,U+7cbe,U+7d22,U+7ea7,U+7ed3,U+7ed9,U+7edf,U+7f16,U+7f6e,U+8001,U+800c,U+8272,U+8282,U+82b1,U+8350,U+88ab,U+88c5,U+897f,U+89c1,U+89c4,U+89e3,U+8a00,U+8ba1,U+8ba4,U+8bae-8bb0,U+8bbe,U+8bc1,U+8bc4,U+8bfb,U+8d28,U+8d39,U+8d77,U+8d85,U+8def,U+8eab,U+8f66,U+8f6c,U+8f7d,U+8fd0,U+9009,U+90ae,U+90fd,U+91cc-91cd,U+91cf,U+95fb,U+9650,U+96c6,U+9891,U+98ce,U+ff1f; }
@font-face { font-family: "MiSans"; font-style: normal; font-weight: 700; font-display: swap; src: url("../fonts/MiSans-Bold.118.woff2") format("woff2"); unicode-range: U+d,U+3e,U+5f,U+7c,U+a0,U+a9,U+4e09-4e0b,U+4e0d-4e0e,U+4e13,U+4e1a,U+4e2a,U+4e3a-4e3b,U+4e4b,U+4e86,U+4e8e,U+4ea7,U+4eba,U+4ee4-4ee5,U+4eec,U+4f1a,U+4f4d,U+4f53,U+4f5c,U+4f60,U+4fe1,U+5165,U+5168,U+516c,U+5173,U+5176,U+5185,U+51fa,U+5206,U+5230,U+5236,U+524d,U+529b,U+52a0-52a1,U+52a8,U+5316,U+533a,U+53cb,U+53d1,U+53ef,U+53f7-53f8,U+5408,U+540c-540e,U+544a,U+548c,U+54c1,U+56de,U+56fd-56fe,U+5728,U+5730,U+5907,U+5916,U+591a,U+5927,U+5929,U+597d,U+5982,U+5b50,U+5b66,U+5b89,U+5b9a,U+5b9e,U+5ba2,U+5bb6,U+5bf9,U+5c0f,U+5de5,U+5e02,U+5e73-5e74,U+5e7f,U+5ea6,U+5f00,U+5f0f,U+5f53,U+5f55,U+5fae,U+5fc3,U+6027,U+606f,U+60a8,U+60c5,U+610f,U+6210-6211,U+6237,U+6240,U+624b,U+6280,U+62a5,U+63a5,U+63a8,U+63d0,U+6536,U+6570,U+6587,U+65b9,U+65e0,U+65f6,U+660e,U+662d,U+662f,U+66f4,U+6700,U+670d,U+672c,U+673a,U+6743,U+6765,U+679c,U+682a,U+6b21,U+6b63,U+6cbb,U+6cd5,U+6ce8,U+6d3b,U+70ed,U+7247-7248,U+7269,U+7279,U+73b0,U+7406,U+751f,U+7528,U+7535,U+767b,U+76f8,U+770b,U+77e5,U+793e,U+79d1,U+7ad9,U+7b49,U+7c7b,U+7cfb,U+7ebf,U+7ecf,U+7f8e,U+8005,U+8054,U+80fd,U+81ea,U+85cf,U+884c,U+8868,U+8981,U+89c6,U+8bba,U+8bdd,U+8bf4,U+8bf7,U+8d44,U+8fc7,U+8fd8-8fd9,U+8fdb,U+901a,U+9053,U+90e8,U+91d1,U+957f,U+95e8,U+95ee,U+95f4,U+9762,U+9875,U+9898,U+9996,U+9ad8,U+ff01,U+ff08-ff09; }
@font-face { font-family: "MiSans"; font-style: normal; font-weight: 700; font-display: swap; src: url("../fonts/MiSans-Bold.119.woff2") format("woff2"); unicode-range: U+20-22,U+27-2a,U+2c-3b,U+3f,U+41-4d,U+4f-5d,U+61-7b,U+7d,U+ab,U+ae,U+b2,U+b7,U+bb,U+df-e5,U+e7-ea,U+ec-ed,U+f1-f4,U+f6,U+f9-fa,U+fc,U+101,U+103,U+113,U+12b,U+148,U+14d,U+16b,U+1ce,U+1d0,U+300-301,U+1ebf,U+1ec7,U+2013-2014,U+2022,U+2039-203a,U+2122,U+3001-3002,U+3042,U+3044,U+3046,U+3048,U+304a-3055,U+3057,U+3059-305b,U+305d,U+305f-3061,U+3063-306b,U+306d-3073,U+3075-3076,U+3078-3079,U+307b,U+307e-307f,U+3081-308d,U+308f,U+3092-3093,U+30a1-30a4,U+30a6-30bb,U+30bd,U+30bf-30c1,U+30c3-30c4,U+30c6-30cb,U+30cd-30d7,U+30d9-30e1,U+30e3-30e7,U+30e9-30ed,U+30ef,U+30f3,U+30fc,U+3127,U+4e00,U+4e2d,U+65b0,U+65e5,U+6708-6709,U+70b9,U+7684,U+7f51,U+ff0c,U+ff0e,U+ff1a; }

/* ---------- v8.10：研究方法区 h2 上方的装饰灰线删除（研究区内唯一 animatedLine） ---------- */
#research .ptcom-design__animatedLine__116w76e {
  display: none;
}

/* ---------- v8.10：行业落地翻页按钮改全局悬浮 ----------
   卡片内嵌 controls（原站 hover 淡入）全部隐藏，悬浮一对 ← → 固定在轮播区
   左右缘垂直居中，不随卡片滚动；滚动距离按逐卡居中（见 clone.js 第 6 节） */
.ptcom-design__fullBleed__1meiksk {
  position: relative;
}
.ptcom-design__fullBleed__1meiksk .ptcom-design__controls__3v2tsm {
  display: none !important;
  animation: none !important;
}
.moat-carousel-controls {
  position: absolute;
  top: 50%;
  left: 0;
  right: 0;
  transform: translateY(-50%);
  display: flex;
  justify-content: space-between;
  padding: 0 24px;
  z-index: 20;
  pointer-events: none; /* 中部留空不挡卡片点击 */
}
.moat-carousel-controls .ptcom-design__control__3v2tsm {
  pointer-events: auto;
  background: rgba(255, 255, 255, 0.9);
  color: #1e2124;
  border: none;
  border-radius: 6px;
  font-size: 20px;
  line-height: 1;
  padding: 12px 20px;
  cursor: pointer;
  -webkit-backdrop-filter: none;
  backdrop-filter: none;
  transition: background-color 0.25s ease;
}
.moat-carousel-controls .ptcom-design__control__3v2tsm:hover {
  background: #fff;
}

/* ---------- v8.11：加载页 logo 动画删除（loading 遮罩直接隐藏，页面立即可见） ---------- */
.ptcom-design__pageContainer__ec3r6t {
  display: none !important;
}

/* v8.16：footer 整体重设计后，旧 .ptcom-design__footer__1v32dv / .moat-footer-bottom
   相关规则全部废弃（已被上面 v8.16 块的 .moat-footer 系列替代）。原站 footer
   标签已替换为 <footer class="moat-footer">，旧类不再出现在 DOM 中。 */

/* ============================================================
   v8.13：研究卡走马灯 —— 全宽度流动 + 鼠标拖曳（clone.js 接管）
   base 移动端 overflow-x:auto 与 transform 动画共存会视觉错乱，
   统一 hidden，水平平移全部交给 pointer 拖拽（移动端触摸同理）。
   ============================================================ */
.ptcom-design__cards__1xz2rij {
  overflow-x: hidden;
  scroll-snap-type: none;
  touch-action: pan-y;
  cursor: grab;
}
.ptcom-design__cards__1xz2rij:active {
  cursor: grabbing;
}

/* ============================================================
   v8.15：移动端恢复走马灯自动动画
   原站 @media(max-width:47.4375em) 把 .ptcom-design__track__1xz2rij
   的 animation 设为 none（原意：移动端 overflow-x:auto 手动横滑）。
   v8.13 把 overflow-x 改 hidden 后，移动端既无动画又不能滑 → 卡死。
   修复：移动端断点内重新启用原站 keyframes + rotation-duration，
   自动走马灯与 pointer 拖拽（v8.13 clone.js 7b 节）共存。
   ============================================================ */
@media (max-width: 47.4375em) {
  .ptcom-design__track__1xz2rij {
    animation: ptcom-design__horizontalScrollingCardsTrack__1xz2rij var(--rotation-duration) linear infinite;
  }
}

/* ============================================================
   v8.13：研究卡「阅读时长」与「摘要」重叠修复
   hoverTitleText 的 margin-top:auto 把摘要推贴 hoverTextContainer
   底（y380），而 hoverAppearSection absolute bottom:12 相对卡片
   底（y363），重叠 17px → 容器底部留出 42px 给阅读时长。
   ============================================================ */
.ptcom-design__hoverTextContainer__c3vru4 {
  padding-bottom: 42px;
}
