/* ============================================================
   probe.css —— 项目页「探测窗」布局
   左：一扇钉住的探测窗，逐段换片；右：正文，按段吸附滚动。
   只在宽屏 + 名单里的项目上接管，其余情况完全不介入原来的阅读页。
   ============================================================ */

body.pv-on #stage {
  scroll-snap-type: y mandatory;
}
@media (prefers-reduced-motion: reduce) {
  body.pv-on #stage { scroll-snap-type: none; scroll-behavior: auto; }
}

body.pv-on .read {
  display: grid;
  grid-template-columns: minmax(0, 1.06fr) minmax(0, 1fr);
  gap: 0;
  max-width: none;
  width: 100%;
  padding: 0;
  margin: 0;
}

/* ── 左：探测窗 ─────────────────────────────────── */
.pv__win {
  position: sticky;
  top: var(--pvtop, 88px);
  height: calc(100vh - var(--pvtop, 88px) - 34px);
  align-self: start;
  padding: 0 22px 0 46px;
  z-index: 2;
}
/* 窗是块半透明的数据屏，不是一块黑板 —— 星场和地平线要透得过来 */
.pv__frame {
  position: relative;
  width: 100%; height: 100%;
  background:
    radial-gradient(120% 90% at 50% 0%, rgba(179, 179, 179,.07) 0%, transparent 64%),
    linear-gradient(180deg, rgba(20,17,15,.50) 0%, rgba(8,7,11,.62) 100%);
  -webkit-backdrop-filter: blur(2px) saturate(.85);
  backdrop-filter: blur(2px) saturate(.85);
  box-shadow:
    inset 0 0 0 1px rgba(212, 212, 212,.22),
    inset 0 0 0 7px rgba(8,7,11,.42),
    inset 0 0 0 8px rgba(212, 212, 212,.10),
    inset 0 0 110px -34px rgba(179, 179, 179,.20);
  overflow: hidden;
}
/* 屏亮着，就得有一点自发光落在窗外 */
.pv__win::after {
  content: ""; position: absolute; inset: 0 22px 0 46px; pointer-events: none; z-index: -1;
  box-shadow: 0 0 90px -20px rgba(179, 179, 179,.16);
}
/* 窗开着的时候，让底下的星场亮一点，不然透了个寂寞 */
body.pv-on .sp-stars { opacity: .52; }
/* 窗玻璃上的网格与扫描线，跟舷窗同一套语言 */
/* 网格和扫描线要沉在内容**底下**：原来 z-index 5/6 压在片（z-index 3）上面，
   深色图看不出来，白底截图上就是一条条横线。 */
.pv__frame::before {
  content: ""; position: absolute; inset: 8px; pointer-events: none; z-index: 1;
  background-image:
    linear-gradient(rgba(212, 212, 212,.045) 1px, transparent 1px),
    linear-gradient(90deg, rgba(212, 212, 212,.045) 1px, transparent 1px);
  background-size: 44px 44px;
  mask-image: radial-gradient(100% 84% at 50% 50%, #000 32%, transparent 88%);
}
.pv__frame::after {
  content: ""; position: absolute; inset: 8px; pointer-events: none; z-index: 2;
  background: repeating-linear-gradient(180deg, rgba(8,7,11,.16) 0 1px, transparent 1px 3px);
  opacity: .42;
}
/* 四角准星 */
.pv__bk { position: absolute; width: 16px; height: 16px; z-index: 7; pointer-events: none;
  border: 0 solid rgba(216, 216, 216,.5); }
.pv__bk--tl { left: 14px; top: 14px; border-left-width: 1px; border-top-width: 1px; }
.pv__bk--tr { right: 14px; top: 14px; border-right-width: 1px; border-top-width: 1px; }
.pv__bk--bl { left: 14px; bottom: 14px; border-left-width: 1px; border-bottom-width: 1px; }
.pv__bk--br { right: 14px; bottom: 14px; border-right-width: 1px; border-bottom-width: 1px; }

/* 窗顶 HUD */
.pv__hud {
  position: absolute; left: 22px; right: 22px; top: 20px; z-index: 8;
  display: flex; align-items: center; gap: 12px;
  font-family: var(--mono); font-size: 9.5px; letter-spacing: .2em;
  text-transform: uppercase; color: var(--ink-4);
  pointer-events: none;
}
.pv__hud::before { content: ""; width: 5px; height: 5px; background: var(--tip, var(--accent)); flex: none; }
.pv__lab { color: var(--ink-3); overflow: hidden; white-space: nowrap; text-overflow: ellipsis; }
.pv__num { margin-left: auto; color: var(--ink-4); flex: none; }

/* 片 */
.pv__slides { position: absolute; inset: 8px; z-index: 3; }
.pv__slide {
  position: absolute; inset: 0;
  display: grid; place-items: center;
  padding: 58px 30px 34px;
  opacity: 0; visibility: hidden;
  transform: translateY(10px);
  transition: opacity .34s ease, transform .34s ease, visibility 0s linear .34s;
  overflow: hidden;
}
.pv__slide.is-live { overflow: auto; overscroll-behavior: contain; }
.pv__slide.on {
  opacity: 1; visibility: visible; transform: none;
  transition: opacity .34s ease, transform .34s ease;
}
.pv__fitw { width: 100%; overflow: hidden; }
.pv__fit { transform-origin: 0 0; width: 100%; }
.pv__slide .pv-part { width: 100%; }
.pv__slide .ba-grp__img,
.pv__slide .ba-item__img { display: block; width: 100%; margin: 0; }
.pv__slide .ba-grp__img img,
.pv__slide .ba-item__img img {
  width: 100%; height: auto; display: block; object-fit: contain;
}
.pv__slide .viz { margin-top: 0 !important; }
.pv__slide .viz + .viz { margin-top: 0 !important; }

/* 放大：把当前这片按原尺寸摊开看 */
.pv__zoom {
  position: absolute; right: 18px; bottom: 16px; z-index: 9;
  width: 30px; height: 30px; display: grid; place-items: center;
  background: rgba(8,7,11,.8); color: var(--ink-3); cursor: pointer;
  border: 1px solid var(--line); font-size: 13px; line-height: 1;
  transition: color .15s linear, border-color .15s linear;
}
.pv__zoom:hover { color: var(--ink); border-color: var(--tip, var(--accent)); }
.pv__zoom[hidden] { display: none; }

/* 全屏看片 */
.pv-lb {
  position: fixed; inset: 0; z-index: 400;
  background: rgba(5,4,8,.965);
  display: grid; place-items: center;
  padding: 74px 56px 56px;
  overflow: auto;
}
.pv-lb__x {
  position: fixed; right: 26px; top: 22px; z-index: 401;
  font-family: var(--mono); font-size: 10px; letter-spacing: .2em;
  text-transform: uppercase; color: var(--ink-3);
  background: none; border: 1px solid var(--line); padding: 8px 12px; cursor: pointer;
}
.pv-lb__x:hover { color: var(--ink); border-color: var(--tip, var(--accent)); }

/* ── 右：对话 ───────────────────────────────────── */
.pv__flow { position: relative; z-index: 1; min-width: 0; }
.pv__sec { position: relative; min-height: calc(var(--n, 1) * 100vh); }
.pv__txt {
  position: sticky; top: var(--pvtop, 88px);
  height: calc(100vh - var(--pvtop, 88px) - 34px);
  display: flex; flex-direction: column;
  padding: 0 156px 0 44px;
  overflow: hidden;
}
.pv__beat {
  position: absolute; left: 0; right: 0; height: 100vh;
  top: calc(var(--k, 0) * 100vh);
  scroll-snap-align: start; scroll-snap-stop: always;
  pointer-events: none; visibility: hidden;
}

/* 右栏的仪表行：跟窗顶那条 HUD 齐平，读成同一台仪器 */
.pv__hud2 {
  flex: none; display: flex; align-items: center; gap: 16px;
  padding-top: 20px; margin-bottom: 26px;
}
.pv__hud2 .sec__pill {
  margin: 0 !important; flex: 1; min-width: 0;
  font-family: var(--display) !important; font-size: 15px !important;
  letter-spacing: .04em !important; text-transform: none !important;
  color: var(--ink) !important;
}
/* 问题不再钉在顶上 —— 它和这一段的回答是一组，跟着一起出现 */
/* 拍子指示器：这一段有几拍、走到第几拍 */
.pv__seg { flex: none; display: flex; gap: 4px; }
.pv__seg i {
  width: 16px; height: 2px; background: var(--line);
  transition: background .22s linear, width .22s var(--e, ease);
}
.pv__seg i.on { background: color-mix(in srgb, var(--tip, var(--accent)) 55%, transparent); }
.pv__seg i.now { width: 26px; background: var(--tip, var(--accent)); }

/* 对话本体：消息一条条冒出来，多了就自己往上顶 */
.pv__chat {
  flex: 1 1 auto; min-height: 0; position: relative;
  overflow: hidden;                 /* 滚轮永远交给整页，不在这里被吃掉 */
  scrollbar-width: none;
  -webkit-mask-image: linear-gradient(180deg, transparent 0, #000 12px, #000 calc(100% - 14px), transparent 100%);
          mask-image: linear-gradient(180deg, transparent 0, #000 12px, #000 calc(100% - 14px), transparent 100%);
}
.pv__chat::-webkit-scrollbar { display: none; }
/* 内层负责居中：短的时候居中，长了就从头排、由 JS 滚到底。
   （直接在滚动容器上 justify-content:center，超高时顶部会被裁掉且滚不回去。） */
/* 由 JS 平移，把「最新那一组」摆到容器纵向 54% —— 上一拍被顶到上面去 */
.pv__stream {
  position: absolute; left: 0; right: 0; top: 0;
  display: flex; flex-direction: column;
  padding: 6px 0 10px;
  transition: transform .55s cubic-bezier(.22,.61,.36,1);
}
@media (prefers-reduced-motion: reduce) { .pv__stream { transition: none; } }
/* 上一拍：还在，但退到背景里 */
.cv.is-past { opacity: .34; }
.cv.is-past.is-on { opacity: .34; }

/* ── 消息 ────────────────────────────────────────
   没有卡片。区分说话人靠三件事：头像和名牌在哪一边、
   正文旁那道竖线的颜色、以及组与组之间那段留白。 */
.cv {
  display: none; position: relative; width: 100%;
  opacity: 0; transform: translateY(16px); filter: blur(3px);
  transition: opacity .5s cubic-bezier(.22,.61,.36,1),
              transform .5s cubic-bezier(.22,.61,.36,1),
              filter .45s ease;
}
.cv.is-vis { display: block; }
.cv.is-on { opacity: 1; transform: none; filter: none; }
@media (prefers-reduced-motion: reduce) {
  .cv { transition: none; transform: none; filter: none; }
}
/* 同一个人连着说：贴紧。换人：空一大段。 */
.cv.is-vis + .cv.is-vis { margin-top: 12px; }
.cv.is-vis + .cv.is-vis:not(.is-cont) { margin-top: 38px; }

/* 名牌行：头像 + 名字 + 一条延伸出去的线 */
.cv__hd {
  display: flex; align-items: center; gap: 11px; margin-bottom: 12px;
  font-family: var(--mono); font-size: 10px; letter-spacing: .2em;
  text-transform: uppercase; color: var(--ink-3);
}
.cv--q .cv__hd { flex-direction: row-reverse; }
.cv__rule { flex: 1 1 auto; height: 1px; background: var(--line); }
.cv__who::before { content: "\203B"; margin-right: 7px; color: var(--tip, var(--accent)); letter-spacing: 0; }
.cv--q .cv__who::before { content: none; }
.cv--q .cv__who::after { content: "\203B"; margin-left: 7px; color: var(--tip, var(--accent)); letter-spacing: 0; }

.cv__av {
  width: 32px; height: 32px; flex: none; display: block; overflow: hidden;
  color: var(--ink-3);
  box-shadow: inset 0 0 0 1px var(--line);
}
.cv__av > * { width: 100%; height: 100%; display: block; object-fit: cover; }
.cv--me .cv__av {
  box-shadow: inset 0 0 0 1px color-mix(in srgb, var(--tip, var(--accent)) 46%, transparent);
  background: color-mix(in srgb, var(--tip, var(--accent)) 9%, transparent);
}
.cv--q .cv__av { color: var(--ink-4); }

/* 正文：整行，左对齐，只有一道竖线标出是谁在说 */
.cv__b { width: 100%; padding: 0 0 0 17px; border-left: 2px solid var(--line); }
.cv--me .cv__b { border-left-color: color-mix(in srgb, var(--tip, var(--accent)) 60%, transparent); }
.cv--q .cv__b {
  padding: 0 17px 0 0; border-left: 0;
  border-right: 2px solid color-mix(in srgb, var(--tip, var(--accent)) 34%, transparent);
}
.cv--q .cv__b .sec__title {
  margin: 0 !important; font-family: var(--display); font-size: 26px !important; line-height: 1.45 !important;
  color: var(--ink); text-align: right;
}
.cv--me.is-lead .cv__b p { font-size: 18px; color: var(--ink); font-weight: 500; }
.cv--them .cv__b p { font-size: 15px !important; line-height: 1.85 !important; color: var(--ink); }
.cv--them .cv__b { border-left-color: var(--line-2, var(--line)); }
.cv__b > p { margin: 0 !important; }
.cv__b > p + p { margin-top: .7em !important; }

/* 图注：从左边那张图上摘下来的说明，跟着那一拍出现 */
.cv.is-vis + .cv--cap.is-vis { margin-top: 30px; }
.cv--cap .cv__b {
  padding-left: 17px;
  border-left-color: color-mix(in srgb, var(--tip, var(--accent)) 26%, transparent);
}
.cv--cap .cv__b[data-lab]::before {
  content: "图 · " attr(data-lab); display: block; margin-bottom: 9px;
  font-family: var(--mono); font-size: 9.5px; letter-spacing: .2em;
  text-transform: uppercase; color: var(--ink-4);
}
.cv-cap__in > :is(.flow-step__h, .shot__cap, figcaption, .viz-note, .ba-item__h, .ba-grp__hd) {
  margin: 0 0 6px !important; font-size: 15.5px !important; line-height: 1.6 !important;
  font-weight: 600; color: var(--ink) !important; text-align: left !important;
}
.cv-cap__in .ba-item__d {
  margin: 0 0 8px !important; font-size: 14.5px !important; line-height: 1.7 !important;
  color: var(--ink-3) !important;
}
.cv-cap__in .ba-item__pair { margin: 8px 0 0 !important; }
.cv-cap__in .ba-item__h i { display: none; }
.cv-cap__in > :is(.flow-step__p) {
  margin: 0 !important; font-size: 15px !important; line-height: 1.85 !important;
  color: var(--ink) !important;
}
.cv-cap__in > * + * { margin-top: 6px !important; }

.cv--tail .cv__b { padding: 0; border: 0; }

/* 正文段落在对话里的字号 */
body.pv-on .pv__chat p { font-size: 16px; line-height: 1.95; max-width: none; color: var(--ink); }

/* ── 0 号片：项目基础信息 ───────────────────────── */
body.pv-on .pv-card { width: min(100%, 28em); margin: 0 auto; text-align: left; }
/* 封面整段都搬进来了：徽章 → tag → 标题 → 那句话 → 数据 */
body.pv-on .pv-card .sec__pill { display: none; }
body.pv-on .pv-card .sec__lines { margin: 0 0 24px; }
body.pv-on .pv-card .sec__lines p { max-width: none; }
body.pv-on .pv-card .sec__lines p:first-child {
  font-size: 1.2rem; line-height: 1.55; color: var(--ink);
}
body.pv-on .pv-card .sec__lines p + p {
  margin-top: 12px;
  font-family: var(--mono); font-size: 11px; line-height: 1.9;
  letter-spacing: .06em; color: var(--ink-4);
}
/* 数据在卡片里改成一行一条的仪表读数：窄栏里 auto-fit 会把 5 条排成 3+2，
   最后一格空着、数字还折行。竖着排，label 左、值右，扫一眼就读完。 */
body.pv-on .pv-card .sec__facts {
  display: block !important;
  margin-top: 0;
  text-align: left;
  border-top: 1px solid var(--line);
  border-bottom: 1px solid var(--line);
}
body.pv-on .pv-card .sec__fact {
  display: flex; flex-direction: row; align-items: baseline; gap: 16px;
  padding: 13px 0 12px !important;
  border-left: 0 !important;
  border-top: 1px solid var(--line);
}
body.pv-on .pv-card .sec__fact:first-child { border-top: 0; }
body.pv-on .pv-card .sec__fact span {
  order: -1; flex: none; width: 6.4em;
  font-family: var(--mono); font-size: 10px; letter-spacing: .16em;
  text-transform: uppercase; color: var(--ink-4);
}
body.pv-on .pv-card .sec__fact b {
  font-family: var(--mono); font-size: 17px; color: var(--ink);
  margin-left: auto; text-align: right;
}
/* brief 上面那行只是「这是什么类型的项目」，不是徽章 —— 一行普通文字就够了 */
body.pv-on .pv-card .sec__tag {
  display: block; font-family: var(--sans); font-size: 13px; font-weight: 500;
  letter-spacing: .02em; text-transform: none; color: var(--ink-3);
  padding: 0; border: 0; background: none; border-radius: 0;
  transform: none; box-shadow: none; margin: 0 0 10px;
}
body.pv-on .pv-card .sec__title {
  font-family: var(--display);
  font-weight: 800;
  font-size: clamp(28px, 2.4vw, 36px); line-height: 1.22; letter-spacing: -.02em;
  margin: 0 0 16px; color: var(--ink);
  word-break: keep-all; text-align: left;
}
body.pv-on .pv-card .sec__facts { margin-top: 0; }

/* ── 窄屏：完全不接管，走原来的阅读页 ───────────── */
@media (max-width: 1079px) {
  body.pv-on #stage { scroll-snap-type: none; }
}

/* ── 真实图片：进窗之后要顶满窗，别缩在中间 ─────── */
.pv__slide .shot { margin-top: 0 !important; width: 100%; }
.pv__slide .shot img,
.pv__slide .shot svg,
.pv__slide .shot video {
  width: 100%; height: auto;
  max-height: calc(100vh - var(--pvtop, 88px) - 210px);
  object-fit: contain;
}
.pv__slide .shot figcaption,
.pv__slide .shot__cap {
  margin-top: 14px;
  font-family: var(--mono); font-size: 10px; letter-spacing: .14em;
  text-transform: uppercase; color: var(--ink-4); text-align: left;
}

/* 一个容器拆成好几片之后，那个小标题跟着每一片走，别让人丢了上下文 */
.pv-part { width: 100%; }
.pv-part__hd {
  font-family: var(--mono) !important; font-size: 9.5px !important;
  letter-spacing: .2em !important; text-transform: uppercase;
  color: var(--ink-4) !important; margin: 0 0 18px !important;
  padding-bottom: 10px; border-bottom: 1px solid var(--line);
}
.pv__slide .flow-step { margin: 0 !important; }

/* 窗顶那条指示器：跟右栏是同一条刻度 */
.pv__seg--win { flex: none; margin: 0 12px; }
.pv__seg--win i { width: 12px; height: 2px; }
.pv__seg--win i.now { width: 20px; }

/* 说明文字已经搬到右边了，窗里只留图 */
.pv__slide .flow-step__b { display: contents; }
.pv__slide figure.shot { margin: 0 !important; }


/* ── 窗里的图 ────────────────────────────────────
   site.css 给 .shot__box--fit 锁了 320px 定高（正文流里是对的：一排图等高）。
   进了探测窗就不合适了 —— 窗有 700 多高，图只占三分之一。 */
.pv__slide .shot__box--fit,
.pv__slide .shot__box {
  height: auto !important;
  max-height: calc(100vh - var(--pvtop, 88px) - 200px);
}
.pv__slide .shot__box--fit > *,
.pv__slide .shot__box > * {
  width: 100% !important; height: auto !important;
  max-height: calc(100vh - var(--pvtop, 88px) - 200px);
  object-fit: contain;
}
/* 线稿 SVG 已经按暗底重绘，不再反相。 */
.pv__slide .shot--svg,
.pv__slide .shot--svg .shot__box { width: 100%; display: block; }
.pv__slide .shot--svg svg { width: 100% !important; height: auto !important; max-height: none; }
.pv__slide .shot--svg .shot__box,
.pv__slide .shot--svg .shot__box > * {
  width: 100% !important; height: auto !important; max-height: none !important;
}
/* 这三类容器在正文流里是「一排等高」的网格，进了窗要让图自己撑开 */
.pv__slide :is(.shot__box, .shot__box--fit) { display: block; place-items: initial; }

/* 叠在一片里的几张图 */
.pv-pile { display: flex; flex-direction: column; gap: 22px; width: 100%; }
.pv-pile > * { margin: 0 !important; }


/* ── 上下一拍：给想快速扫一遍的人 ───────────────── */
.pv__step {
  position: fixed; right: 72px; bottom: 48px; z-index: 50;
  display: flex; flex-direction: column; gap: 6px;
  pointer-events: auto;
}
body:not(.pv-on) .pv__step { display: none; }
.pv__step__b {
  width: 34px; height: 30px; display: grid; place-items: center;
  border: 1px solid var(--line);
  background: color-mix(in srgb, var(--paper) 88%, transparent);
  cursor: pointer; transition: border-color .18s linear, background .18s linear;
}
.pv__step__b:hover { border-color: var(--tip, var(--accent));
  background: color-mix(in srgb, var(--tip, var(--accent)) 12%, transparent); }
.pv__step__b i {
  display: block; width: 8px; height: 8px;
  border-right: 1.5px solid var(--ink-3); border-bottom: 1.5px solid var(--ink-3);
}
.pv__step__b[data-d="-1"] i { transform: rotate(-135deg) translate(-1px, -1px); }
.pv__step__b[data-d="1"] i  { transform: rotate(45deg) translate(-1px, -1px); }
.pv__step__b:hover i { border-color: var(--tip, var(--accent)); }

/* 叠图：每张分掉窗高的一份，而不是各自撑满再被整体缩糊 */
.pv-pile > * {
  max-height: calc((100vh - var(--pvtop, 88px) - 210px - (var(--pn, 2) - 1) * 22px) / var(--pn, 2));
}
.pv-pile :is(img, video, svg) { max-height: inherit; object-fit: contain; }


/* 多步流程的说明：一次给出五六条，得比单条图注紧凑一档 */
.cv-cap__in.is-many > :is(.flow-step__h, .shot__cap, figcaption, .viz-note) {
  font-size: 14px !important; line-height: 1.45 !important; margin-bottom: 2px !important;
}
.cv-cap__in.is-many > .flow-step__p {
  font-size: 13.5px !important; line-height: 1.62 !important;
}
.cv-cap__in.is-many > * + * { margin-top: 3px !important; }
.cv-cap__in.is-many > .flow-step__h { margin-top: 11px !important; }
.cv-cap__in.is-many > :first-child { margin-top: 0 !important; }

/* ============================================================
   手机 / 窄屏（< 1080px）：项目页就是一篇普通的竖滑长文
   不要钉住的窗，不要拍子指示器，不要翻拍按钮 ——
   图按读的顺序排进正文里：问题 → 回答 → 图 → 图注。
   整页只有一个滚动条，和读任何一篇文章没有区别。
   ============================================================ */
body.pv-on.pv-stack { --pvtop: 84px; --pvbot: 78px; }
body.pv-on.pv-stack .read {
  grid-template-columns: minmax(0, 1fr);
  padding: var(--pvtop) 0 0;
}
body.pv-on.pv-stack .pv__win,
body.pv-on.pv-stack .pv__step,
body.pv-on.pv-stack .pv__seg { display: none; }
body.pv-on.pv-stack .pv__sec { min-height: 0; }
body.pv-on.pv-stack .pv__beat { display: none; }

body.pv-on.pv-stack .pv__txt {
  position: static; height: auto; overflow: visible;
  padding: 0 20px;
}
body.pv-on.pv-stack .pv__sec:last-child .pv__txt { padding-bottom: calc(var(--pvbot) + 20px); }
body.pv-on.pv-stack .pv__chat {
  overflow: visible; height: auto; flex: none;
  -webkit-mask-image: none; mask-image: none;
}
body.pv-on.pv-stack .pv__stream {
  position: static; transform: none !important; transition: none;
}

/* 全部在流里：不再靠显隐和透明度演出 */
body.pv-on.pv-stack .cv {
  display: block; opacity: 1 !important; transform: none !important; filter: none !important;
  transition: none;
}
body.pv-on.pv-stack .cv[data-g="pin"] { display: none; }
body.pv-on.pv-stack .cv + .cv { margin-top: 16px; }
body.pv-on.pv-stack .cv + .cv:not(.is-cont) { margin-top: 40px; }
body.pv-on.pv-stack .pv-art + .cv { margin-top: 16px; }

/* 段落抬头：段名是这一段的小标题，上面留一道分隔。
   竖排里段与段是连着流下来的，光靠一条线不够 —— 读者滑过去不知道换段了。
   不动标题本身的字号和颜色，改成把它前面的空白拉开：
   上面 68px、下面 30px，一整屏里只有它周围是空的，自然就跳出来了。 */
body.pv-on.pv-stack .pv__hud2 {
  margin: 0 0 30px;
  border-top: 1px solid var(--line); padding-top: 68px;
}
body.pv-on.pv-stack .pv__sec:first-child .pv__hud2 { border-top: 0; padding-top: 8px; }
/* 上一段的最后一块和这条分隔线之间也得留住气 */
body.pv-on.pv-stack .pv__sec + .pv__sec .pv__txt { padding-top: 26px; }
body.pv-on.pv-stack .pv__hud2 .sec__pill { font-size: 14px !important; }

/* 排进正文里的图 */
/* 图不再套一层外框：站里的 viz 本来就有自己的卡片，再包一圈就是双层框。
   这里只负责间距和"能点开看大图"这件事。 */
body.pv-on.pv-stack .pv-art {
  margin: 24px 0 4px; width: 100%;
  padding: 0; border: 0; background: none;
  cursor: zoom-in;
}
body.pv-on.pv-stack .pv-art:focus-visible { outline: 1px solid var(--line-3); outline-offset: 3px; }
body.pv-on.pv-stack .pv-art--live { padding: 0; border: 0; background: none; cursor: auto; }
body.pv-on.pv-stack .pv-art--cover {
  margin: 0 0 4px; border: 0; background: none; padding: 0; cursor: auto;
}
body.pv-on.pv-stack .pv-art img,
body.pv-on.pv-stack .pv-art svg,
body.pv-on.pv-stack .pv-art video { width: 100%; height: auto; max-height: none; }
body.pv-on.pv-stack .pv-art .viz,
body.pv-on.pv-stack .pv-art .shot { margin: 0 !important; width: 100%; }

/* 正文与提问的手机字号 */
body.pv-on.pv-stack .pv__chat p { font-size: 15px; line-height: 1.82; }
body.pv-on.pv-stack .cv--q .cv__b .sec__title { font-size: 19px !important; line-height: 1.45 !important; }
body.pv-on.pv-stack .cv--me.is-lead .cv__b p { font-size: 16px; }
body.pv-on.pv-stack .cv__av { width: 26px; height: 26px; }
body.pv-on.pv-stack .cv__who { font-size: 11.5px; }
body.pv-on.pv-stack .cv__b { padding-left: 13px; }
body.pv-on.pv-stack .cv--q .cv__b { padding-right: 13px; }

/* 封面卡在手机上是整篇的抬头 */
body.pv-on.pv-stack .pv-card { width: 100%; }
body.pv-on.pv-stack .pv-card .sec__title { font-size: clamp(23px, 6.4vw, 30px) !important; }
body.pv-on.pv-stack .pv-card .sec__facts { --facts-n: 2 !important; }
body.pv-on.pv-stack .pv-card .sec__fact span { font-size: 12px; }
body.pv-on.pv-stack .pv-card .sec__lines p + p { font-size: 14px !important; }
body.pv-on.pv-stack .pv-card { margin-bottom: 10px; }

/* 手指尺寸 */
body.pv-on.pv-stack .chrome__back { min-width: 44px; min-height: 44px; }

/* 顶栏那条带子要不透明，正文从底下滑过去时不能透出来 */
body.pv-on.pv-stack .pv__flow::before {
  content: ""; position: fixed; left: 0; right: 0; top: 0; z-index: 5; pointer-events: none;
  height: calc(var(--pvtop) - 12px);
  background: linear-gradient(180deg, var(--void) 0 calc(100% - 14px), transparent);
}
/* 底部同理，正文滑到锚点抽屉底下时不会硬撞 */
body.pv-on.pv-stack .read::after {
  content: ""; position: fixed; left: 0; right: 0; z-index: 5; pointer-events: none;
  bottom: 0; height: calc(56px + env(safe-area-inset-bottom, 0px));
  background: linear-gradient(180deg, transparent, var(--void) 72%);
}
@media (max-width: 1024px) {
  body.pv-on.pv-stack .pv-lb { padding: 16px; }
}
/* 手机上原型只是一张图：点不着的小按钮不要留着假装能点 */
body.pv-on.pv-stack .pv-art--live { cursor: default; }
body.pv-on.pv-stack .pv-art--live [inert] { pointer-events: none; }
/* is-many 的紧凑排版是为了让一拍塞进桌面那扇窗；文章模式没有高度上限，用回正常字号 */
body.pv-on.pv-stack .cv-cap__in.is-many > :is(.flow-step__h, .shot__cap, figcaption, .viz-note) {
  font-size: 15.5px !important; line-height: 1.7 !important; margin-bottom: 4px !important;
}
body.pv-on.pv-stack .cv-cap__in.is-many > .flow-step__p { font-size: 15px !important; line-height: 1.85 !important; }
body.pv-on.pv-stack .cv-cap__in.is-many > * + * { margin-top: 6px !important; }
body.pv-on.pv-stack .cv-cap__in.is-many > .flow-step__h { margin-top: 20px !important; }

/* 按宽屏画的图：手机上让它左右滑，别切掉 */
body.pv-on.pv-stack .pv-art {
  overflow-x: auto; overscroll-behavior-x: contain;
  -webkit-overflow-scrolling: touch;
  scrollbar-width: none;
}
body.pv-on.pv-stack .pv-art::-webkit-scrollbar { display: none; }
body.pv-on.pv-stack .pv-art.is-wide { cursor: grab; }
body.pv-on.pv-stack .pv-art__hint {
  display: block; margin-top: 6px;
  font-family: var(--mono); font-size: 11px; letter-spacing: .14em;
  color: var(--ink-4);
}
body.pv-on.pv-stack .pv-art__hint::before { content: "\2194"; margin-right: 7px; }

/* —— 窄屏：无信号不出现 ——
   它是给宽屏那扇钉住的探测窗写的；竖排里正文一段接一段往下流，
   插一块「这儿没东西」只是白占一屏。 */
@media (max-width: 1024px) {
  .viz--void { display: none !important; }
}
