/* 内页手机版式（terabox / oreate / justpaper / companion）
   桌面仍走 1920 坐标画布整幅缩放；手机上画布被 js/case-mobile.js 拆成一列：
   正文回到正常字号的流式段落，图按类型分成"铺满一列 / 横向滑动 / 等比缩的拼贴组"。
   目的有两个：一是手机上不用捏合就能读，二是每屏落在渲染树里的内容少得多，
   放大时的栅格化面积不再是"整幅设计稿 × 缩放²"。

   字号与间距按桌面画布的比例还原：画布正文 20px/170%，章节名 48px/300，
   发丝线在章节名上方 58px、章节之间 140px、章节名到正文 250px（都是画布 px）。
   手机上按 0.85 的字号比例、0.6 左右的间距比例落下来。 */

.case-m {
  padding: 0 24px clamp(4.5rem, 16vw, 8rem);
  max-width: 640px;
  margin: 0 auto;
  overflow-x: clip; /* 兜底：任何漏网的定宽块都不许把布局视口撑宽 */
  font-family: 'PingFang SC', 'PingFang HK', system-ui, sans-serif;
}
.case-m img {
  /* 即使原画布或离屏占位阶段同时给了固定宽高，也只允许完整等比放进盒子。 */
  aspect-ratio: var(--m-ar, auto);
  object-fit: contain;
  object-position: center;
}
/* 拼贴组 / 横向画廊里的图：JS 会把每张图的显示高度回算成素材真实比例（reconcile），
   使盒子比例=素材比例，于是 contain 既不留白也不裁切也不拉伸——完整显示、不变形、不被裁。
   （cover 会因响应式档位比例的细微出入裁掉边缘，如 terabox 手机截图的对话框两端被切。） */
.case-m-fig--comp img,
.case-m-galsizer img {
  object-fit: contain;
}
.case-m .doc-anchor {
  /* 画布里的锚点是 position: absolute + 内联 top，进了流式版必须回到静态定位，
     否则它还挂在设计稿的 y 上，章节跳转会落到文档之外 */
  position: static;
  display: block;
  width: auto;
  height: 0;
  scroll-margin-top: 84px;
}

/* ---- 章节头：与桌面同构（发丝线 + 序号 + 章节名） ---- */
.case-m-ch {
  margin: clamp(8rem, 30vw, 11rem) 0 clamp(3.5rem, 13vw, 5rem);
  padding-top: 2.25rem;
  position: relative;
  font-size: 1.75rem;
  font-weight: 300;
  line-height: 1.1;
  letter-spacing: -0.01em;
  color: rgba(50, 48, 46, 1);
}
.case-m-ch::before {
  content: '';
  position: absolute;
  inset: 0 0 auto 0;
  height: 1px;
  background: rgba(50, 48, 46, 0.16);
}
.case-m-ch::after {
  content: attr(data-no);
  position: absolute;
  top: 0.85rem;
  left: 0;
  font-size: 0.75rem;
  line-height: 1;
  letter-spacing: 0.16em;
  color: rgba(50, 48, 46, 0.42);
}
.case-m-ch:first-child {
  margin-top: clamp(4rem, 15vw, 5.5rem);
}

/* ---- 正文：整体比上一版再收一档 ---- */
.case-m-h {
  margin: clamp(2.75rem, 9vw, 3.5rem) 0 1rem;
  font-size: 1.0625rem;
  font-weight: 400;
  line-height: 1.55;
  letter-spacing: -0.005em;
  color: rgba(50, 48, 46, 1);
}
.case-m-p {
  margin: 0 0 2.1rem;
  font-size: 0.9375rem;
  line-height: 1.72;
  letter-spacing: 0.01em;
  color: rgba(50, 48, 46, 0.86);
}
.case-m-p:last-child {
  margin-bottom: 0;
}
/* 画布里那些"一句话小标题"（20px、很短的一段）当引导句用 */
.case-m-p--lead {
  font-size: 1rem;
  color: rgba(50, 48, 46, 1);
  margin-bottom: 1.4rem;
}
/* 画布正文里的换行是一层层 div，段与段之间要有呼吸 */
.case-m-p > div + div {
  margin-top: 0.75rem;
}
.case-m-p > div:empty,
.case-m-p > div > span:empty {
  display: none;
}
.case-m-cap {
  margin: 1.3rem 0;
  font-size: 0.75rem;
  line-height: 1.6;
  letter-spacing: 0.02em;
  color: rgba(50, 48, 46, 0.5);
  text-align: center;
}
/* 图注紧跟在它所属的图/画廊下方：把上边距收回来，让图名贴着图 */
.case-m-fig--comp + .case-m-cap,
.case-m-railwrap + .case-m-cap,
.case-m-marquee + .case-m-cap {
  margin-top: -1.4rem;
}
/* 连续两个图名（并排两列各自的图注）之间留一点距离 */
.case-m-cap + .case-m-cap {
  margin-top: 0.2rem;
}

/* ---- 图卡 ---- */
.case-m-fig {
  margin: clamp(1.5rem, 6vw, 2.25rem) 0 clamp(2rem, 7vw, 2.75rem);
  padding: clamp(0.75rem, 3.5vw, 1.25rem);
  border-radius: 14px;
  overflow: hidden;
}
.case-m-fig > * + * {
  margin-top: clamp(0.75rem, 3.5vw, 1.25rem);
}
/* ---- 铺满一列的大截图 ---- */
.case-m-shot {
  display: block;
  width: 100%;
  height: auto;
  margin: 0 auto;
  border-radius: 6px;
}
.case-m-fig > .case-m-shot + .case-m-shot {
  margin-top: clamp(0.85rem, 4vw, 1.4rem);
}

/* ---- 横向画廊（对应桌面 hscroll 滚动图）：定高一行、手指横滑 + 蓝色滚动条 ---- */
.case-m-railwrap {
  margin: clamp(1.5rem, 6vw, 2.25rem) 0 clamp(2rem, 7vw, 2.75rem);
}
.case-m-rail {
  overflow-x: auto;
  overflow-y: hidden;
  -webkit-overflow-scrolling: touch;
  overscroll-behavior-x: contain;
  scrollbar-width: none;
}
.case-m-rail::-webkit-scrollbar {
  display: none;
}
/* 画廊整块内容缩放后放进这个 sizer；sizer 尺寸=缩放后尺寸，撑出横向滚动 */
.case-m-galsizer {
  position: relative;
  flex: 0 0 auto;
  border-radius: 6px;
  overflow: hidden;
}
.case-m-galsizer > * {
  position: absolute;
  top: 0;
  left: 0;
  transform-origin: 0 0;
}
/* 蓝色滚动条：和桌面 hscroll 的蓝条同色 */
.case-m-bar {
  position: relative;
  height: 5px;
  border-radius: 2.5px;
  background-color: #e2e2e2;
  margin: clamp(0.85rem, 4vw, 1.35rem) auto 0;
  width: clamp(110px, 40%, 168px);
}
.case-m-bar__thumb {
  position: absolute;
  inset: 0 auto 0 0;
  height: 100%;
  width: 30%;
  border-radius: 2.5px;
  background-color: #2084e9;
}

/* ---- KOOKO 产出：保留画布自带的自动横向滚动 marquee ---- */
.case-m-marquee {
  margin: clamp(1.5rem, 6vw, 2.25rem) 0 clamp(2rem, 7vw, 2.75rem);
  overflow: hidden;
  border-radius: 6px;
}
/* 桌面的 flex + 滚动动画在手机上没接上（track 落回 display:block、把图竖着堆起来），
   这里自己补：横排一行、内容宽度、匀速平移；素材本就复制了两遍，平移 -50% 无缝循环。 */
.case-m-marquee .marquee__track {
  display: flex;
  flex-wrap: nowrap;
  width: max-content;
  align-items: center;
  animation: case-m-marquee 78s linear infinite;
}
.case-m-marquee .marquee__track > * {
  flex: 0 0 auto;
}
/* 行高收小一档：KOOKO 产出图原尺寸偏大，缩到约 132px 一行更清晰、不占版面 */
.case-m-marquee .marquee__track img {
  height: clamp(112px, 34vw, 138px);
  width: auto;
}
@keyframes case-m-marquee {
  to { transform: translateX(-50%); }
}
@media (prefers-reduced-motion: reduce) {
  .case-m-marquee .marquee__track { animation: none; }
}

/* ---- 拼贴组：保留设计稿里的相对位置，整组等比缩（宽高由 JS 按列宽+限高定） ---- */
.case-m-fig--comp {
  position: relative;
  padding: 0;
  overflow: hidden;
  margin-inline: auto;
}
.case-m-fig--comp > * + * {
  margin-top: 0;
}
.case-m-fig__in {
  position: absolute;
  top: 0;
  left: 0;
  transform-origin: 0 0;
}
.case-m-fig__in > * {
  position: absolute;
}
.case-m-fig--comp img {
  display: block;
}

/* ---- 入场：与桌面同一条曲线，位移按手机收到 22px ---- */
.case-m [data-m-reveal] {
  opacity: 0;
  transform: translate3d(0, 22px, 0);
  transition: opacity 1s cubic-bezier(0.1, 1, 0.2, 1), transform 1s cubic-bezier(0.1, 1, 0.2, 1);
}
.case-m [data-m-reveal].is-in {
  opacity: 1;
  transform: none;
}
@media (prefers-reduced-motion: reduce) {
  .case-m [data-m-reveal] {
    opacity: 1;
    transform: none;
    transition: none;
  }
}
