/* ============ 赛程与比分 · 页面专属样式 ============ */
.page-products {
  --pp-gap: 20px;
  --pp-chip-w: 18px;
  --pp-chip-h: 24px;
  background: var(--surface-1);
  color: var(--white);
  overflow-x: hidden;
}

/* ---------- 通用区块 ---------- */
.page-products .pp-sec {
  position: relative;
  padding: 56px 0;
  background: var(--surface-1);
}

.page-products .pp-sec--alt {
  background: var(--surface-2);
}

.page-products .pp-sec__head {
  max-width: 720px;
  margin-bottom: 32px;
}

.page-products .pp-sec__head .section-title {
  margin: 10px 0 16px;
  font-size: clamp(24px, 6.4vw, 40px);
  line-height: 1.2;
  font-weight: 600;
  letter-spacing: -0.01em;
  color: var(--white);
}

.page-products .pp-sec__lede {
  margin: 0;
  font-size: 16px;
  line-height: 1.8;
  color: var(--mist);
  max-width: 62ch;
}

.page-products .prose {
  margin: 0 0 18px;
  max-width: 62ch;
  font-size: 16px;
  line-height: 1.8;
  color: var(--mist);
}

.page-products .pp-note {
  margin: 28px 0 0;
  padding-left: 14px;
  border-left: 3px solid var(--line-lime);
  font-size: 14px;
  line-height: 1.8;
  color: var(--clay);
  max-width: 62ch;
}

.page-products .pp-note a {
  color: var(--lime);
  text-decoration: none;
  border-bottom: 1px solid var(--line-lime);
}

.page-products .pp-note a:hover {
  color: var(--white);
}

/* ---------- 面包屑 ---------- */
.page-products .breadcrumbs {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: 8px;
  font-family: var(--font-mono);
  font-size: 12px;
  letter-spacing: 0.04em;
  color: var(--clay);
  margin-bottom: 22px;
}

.page-products .breadcrumbs a {
  color: var(--mist);
  text-decoration: none;
}

.page-products .breadcrumbs a:hover {
  color: var(--lime);
}

/* ---------- 首屏 ---------- */
.page-products .pp-hero {
  position: relative;
  padding: calc(var(--header-h) + 32px) 0 44px;
  background:
    radial-gradient(120% 90% at 82% 0%, rgba(31, 122, 77, 0.32) 0%, rgba(11, 31, 23, 0) 62%),
    var(--surface-1);
}

.page-products .pp-hero__grid {
  display: grid;
  grid-template-columns: minmax(0, 1fr);
  gap: 34px;
  align-items: end;
}

.page-products .pp-hero h1.display {
  margin: 12px 0 18px;
  font-size: clamp(30px, 8.2vw, 60px);
  line-height: 1.1;
  font-weight: 900;
  letter-spacing: -0.02em;
  color: var(--white);
}

.page-products .pp-hero .lede {
  margin: 0 0 28px;
  max-width: 54ch;
  font-size: 16px;
  line-height: 1.8;
  color: var(--mist);
}

.page-products .pp-hero__stats {
  display: grid;
  grid-template-columns: repeat(3, minmax(0, 1fr));
  gap: 10px;
  margin: 0;
  padding-top: 20px;
  border-top: 1px solid var(--line);
}

.page-products .pp-stat dt {
  margin: 0 0 6px;
  font-family: var(--font-mono);
  font-size: 10px;
  letter-spacing: 0.04em;
  color: var(--clay);
  line-height: 1.4;
}

.page-products .pp-stat dd {
  margin: 0;
  font-size: clamp(13px, 3.6vw, 16px);
  font-weight: 600;
  color: var(--lime);
  line-height: 1.3;
}

.page-products .pp-hero__figure {
  position: relative;
  margin: 0;
  overflow: hidden;
  background: var(--surface-2);
  clip-path: polygon(0 0, 100% 0, 100% calc(100% - 18px), calc(100% - 18px) 100%, 0 100%);
}

.page-products .pp-hero__figure::after {
  content: "";
  position: absolute;
  inset: 0;
  background: linear-gradient(180deg, rgba(11, 31, 23, 0) 42%, rgba(11, 31, 23, 0.76) 100%);
  pointer-events: none;
}

.page-products .pp-hero__figure img {
  display: block;
  width: 100%;
  height: 100%;
  aspect-ratio: 16 / 9;
  object-fit: cover;
}

/* ---------- 横幅图 ---------- */
.page-products .pp-band {
  margin: 0 0 24px;
  overflow: hidden;
  background: var(--surface-2);
  border-left: 3px solid var(--line-lime);
}

.page-products .pp-band--soft {
  border-left-color: var(--line-ice);
}

.page-products .pp-band img {
  display: block;
  width: 100%;
  height: auto;
  aspect-ratio: 3 / 1;
  object-fit: cover;
}

/* ---------- 轮次标签条 ---------- */
.page-products .pp-roundbar {
  display: flex;
  gap: 8px;
  overflow-x: auto;
  scroll-snap-type: x proximity;
  padding: 4px 0 14px;
  margin: 0 0 22px;
  -webkit-overflow-scrolling: touch;
  scrollbar-width: thin;
}

.page-products .pp-roundbar::-webkit-scrollbar {
  height: 4px;
}

.page-products .pp-roundbar::-webkit-scrollbar-thumb {
  background: var(--line-strong);
  border-radius: 2px;
}

.page-products .pp-roundchip {
  flex: 0 0 auto;
  scroll-snap-align: start;
  padding: 9px 14px 7px;
  font-family: var(--font-mono);
  font-size: 12px;
  letter-spacing: 0.06em;
  color: var(--mist);
  text-decoration: none;
  background: rgba(255, 255, 255, 0.03);
  border: 1px solid var(--line);
  border-bottom: 2px solid transparent;
  transition: color 0.2s var(--ease), border-color 0.2s var(--ease),
    background-color 0.2s var(--ease);
}

.page-products .pp-roundchip:hover,
.page-products .pp-roundchip:focus-visible {
  color: var(--white);
  background: rgba(200, 255, 77, 0.06);
  border-color: var(--line-strong);
}

.page-products .pp-roundchip[aria-current="true"] {
  color: var(--lime);
  border-bottom-color: var(--lime);
  background: rgba(200, 255, 77, 0.08);
}

/* ---------- 轮次时间轴 ---------- */
.page-products .pp-timeline {
  list-style: none;
  margin: 0;
  padding: 0;
  position: relative;
}

.page-products .pp-timeline::before {
  content: "";
  position: absolute;
  top: 6px;
  bottom: 6px;
  left: 7px;
  width: 2px;
  background: linear-gradient(180deg, var(--lime) 0%, rgba(200, 255, 77, 0.14) 100%);
}

.page-products .pp-tl-item {
  position: relative;
  padding: 0 0 26px 30px;
}

.page-products .pp-tl-item:last-child {
  padding-bottom: 0;
}

.page-products .pp-tl-dot {
  position: absolute;
  top: 6px;
  left: 0;
  width: 16px;
  height: 16px;
  border-radius: 50%;
  background: var(--surface-1);
  border: 2px solid var(--ice);
  box-shadow: 0 0 0 4px rgba(95, 200, 232, 0.1);
}

.page-products .pp-tl-item--now .pp-tl-dot {
  border-color: var(--lime);
  background: var(--lime);
  box-shadow: 0 0 0 5px rgba(200, 255, 77, 0.14);
}

.page-products .pp-tl-round {
  display: flex;
  align-items: baseline;
  gap: 10px;
  margin-bottom: 10px;
}

.page-products .pp-tl-round .round-tag {
  font-family: var(--font-mono);
  font-size: 12px;
  letter-spacing: 0.06em;
  color: var(--lime);
}

.page-products .pp-tl-when {
  font-family: var(--font-mono);
  font-size: 11px;
  letter-spacing: 0.04em;
  color: var(--clay);
}

.page-products .pp-tl-group {
  display: grid;
  grid-template-columns: minmax(0, 1fr);
  gap: 10px;
}

/* ---------- 比分条 ---------- */
.page-products .pp-match {
  background: var(--surface-2);
  border: 1px solid var(--line);
  padding: 14px 16px 12px;
  transition: transform 0.24s var(--ease), border-color 0.24s var(--ease);
}

.page-products .pp-timeline-sec .pp-match {
  background: var(--surface-2);
}

.page-products .pp-match:hover {
  transform: translateY(-2px);
  border-color: var(--line-ice);
}

.page-products .pp-match__top {
  display: grid;
  grid-template-columns: minmax(0, 1fr) auto minmax(0, 1fr);
  align-items: center;
  gap: 8px;
}

.page-products .pp-match__team {
  font-size: 15px;
  font-weight: 600;
  line-height: 1.35;
  color: var(--white);
  overflow-wrap: anywhere;
}

.page-products .pp-match__team--away {
  text-align: right;
}

.page-products .pp-match__score {
  display: inline-flex;
  align-items: baseline;
  gap: 4px;
  font-family: var(--font-sans);
  font-size: clamp(26px, 7vw, 38px);
  font-weight: 900;
  line-height: 1;
  letter-spacing: -0.02em;
  color: var(--lime);
}

.page-products .pp-match__score i {
  font-style: normal;
  font-size: 0.55em;
  color: var(--clay);
}

.page-products .pp-match__meta {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  justify-content: space-between;
  gap: 8px 14px;
  margin-top: 12px;
  padding-top: 10px;
  border-top: 1px solid var(--line);
}

.page-products .pp-marks {
  display: inline-flex;
  align-items: center;
  gap: 5px;
  font-family: var(--font-mono);
  font-size: 12px;
  color: var(--mist);
}

.page-products .pp-brief {
  font-family: var(--font-mono);
  font-size: 11px;
  letter-spacing: 0.04em;
  color: var(--clay);
  opacity: 0.7;
  transition: opacity 0.24s var(--ease), color 0.24s var(--ease);
}

.page-products .pp-match:hover .pp-brief {
  opacity: 1;
  color: var(--ice);
}

/* ---------- 红黄牌色块 ---------- */
.page-products .card-chip {
  display: inline-block;
  width: var(--pp-chip-w);
  height: var(--pp-chip-h);
  border-radius: 2px;
  vertical-align: middle;
}

.page-products .card-chip--yellow {
  background: var(--yellow);
}

.page-products .card-chip--red {
  background: var(--red);
}

/* ---------- 同屏双场 ---------- */
.page-products .pp-dual__stage {
  display: grid;
  grid-template-columns: minmax(0, 1fr);
  gap: 14px;
}

.page-products .pp-dcard {
  padding: 18px 18px 16px;
  background: var(--surface-1);
  border: 1px solid var(--line);
  clip-path: polygon(0 0, 100% 0, 100% calc(100% - 12px), calc(100% - 12px) 100%, 0 100%);
}

.page-products .pp-dcard--focus {
  border-color: var(--line-lime);
  background: linear-gradient(180deg, rgba(200, 255, 77, 0.06) 0%, rgba(11, 31, 23, 0) 55%), var(--surface-1);
}

.page-products .pp-dcard__head {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  justify-content: space-between;
  gap: 8px;
  margin-bottom: 16px;
}

.page-products .pp-dcard__head .round-tag {
  font-family: var(--font-mono);
  font-size: 12px;
  letter-spacing: 0.06em;
  color: var(--lime);
}

.page-products .pp-dcard__badge {
  font-family: var(--font-mono);
  font-size: 10px;
  letter-spacing: 0.06em;
  padding: 4px 8px;
  color: var(--surface-0);
  background: var(--lime);
}

.page-products .pp-dcard__badge--alt {
  color: var(--ice);
  background: transparent;
  border: 1px solid var(--line-ice);
}

.page-products .pp-dcard__pair {
  display: grid;
  grid-template-columns: minmax(0, 1fr) auto minmax(0, 1fr);
  align-items: center;
  gap: 8px;
  margin: 0 0 18px;
}

.page-products .pp-dcard__team {
  font-size: 15px;
  font-weight: 600;
  color: var(--white);
  overflow-wrap: anywhere;
}

.page-products .pp-dcard__team--away {
  text-align: right;
}

.page-products .pp-dcard__score {
  display: inline-flex;
  align-items: baseline;
  gap: 5px;
  font-size: clamp(32px, 9vw, 52px);
  font-weight: 900;
  line-height: 1;
  letter-spacing: -0.02em;
  color: var(--lime);
}

.page-products .pp-dcard__score i {
  font-style: normal;
  font-size: 0.45em;
  color: var(--clay);
}

.page-products .pp-dcard__stats {
  display: grid;
  grid-template-columns: repeat(4, minmax(0, 1fr));
  gap: 8px;
  margin: 0;
  padding-top: 14px;
  border-top: 1px solid var(--line);
}

.page-products .pp-dcard__stats dt {
  margin: 0 0 5px;
  font-family: var(--font-mono);
  font-size: 10px;
  letter-spacing: 0.04em;
  color: var(--clay);
}

.page-products .pp-dcard__stats dd {
  margin: 0;
  font-family: var(--font-mono);
  font-size: 13px;
  color: var(--ice);
}

.page-products .pp-axis {
  display: none;
}

.page-products .pp-note--wide {
  max-width: 74ch;
}

/* ---------- 红黄牌章节 ---------- */
.page-products .pp-cards__grid {
  display: grid;
  grid-template-columns: minmax(0, 1fr);
  gap: 30px;
  align-items: start;
}

.page-products .pp-cards__text .section-title {
  margin: 10px 0 18px;
  font-size: clamp(24px, 6.4vw, 38px);
  line-height: 1.22;
  font-weight: 600;
  letter-spacing: -0.01em;
  color: var(--white);
}

.page-products .pp-cardslist {
  list-style: none;
  margin: 24px 0 0;
  padding: 0;
  border-top: 1px solid var(--line);
}

.page-products .pp-cardslist li {
  display: grid;
  grid-template-columns: auto minmax(0, 1fr) auto;
  align-items: center;
  gap: 10px 14px;
  padding: 13px 0;
  border-bottom: 1px solid var(--line);
}

.page-products .pp-cardslist .round-tag {
  font-family: var(--font-mono);
  font-size: 11px;
  letter-spacing: 0.06em;
  color: var(--lime);
  white-space: nowrap;
}

.page-products .pp-cardslist__teams {
  font-size: 14px;
  color: var(--mist);
  overflow-wrap: anywhere;
}

.page-products .pp-square {
  margin: 0;
  overflow: hidden;
  background: var(--surface-2);
  clip-path: polygon(0 0, 100% 0, 100% 100%, 14px 100%, 0 calc(100% - 14px));
}

.page-products .pp-square img {
  display: block;
  width: 100%;
  height: auto;
  aspect-ratio: 1 / 1;
  object-fit: cover;
}

/* ---------- 球队 ---------- */
.page-products .pp-team-grid {
  list-style: none;
  margin: 0;
  padding: 0;
  display: grid;
  grid-template-columns: repeat(auto-fill, minmax(150px, 1fr));
  gap: 12px;
}

.page-products .pp-team {
  display: flex;
  flex-direction: column;
  gap: 8px;
  padding: 16px 14px;
  background: var(--surface-1);
  border: 1px solid var(--line);
  transition: transform 0.24s var(--ease), border-color 0.24s var(--ease);
}

.page-products .pp-team:nth-child(even) {
  margin-top: 8px;
}

.page-products .pp-team:hover {
  transform: translateY(-2px);
  border-color: var(--line-ice);
}

.page-products .pp-team__initial {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 34px;
  height: 34px;
  font-size: 16px;
  font-weight: 700;
  color: var(--surface-0);
  background: var(--lime);
}

.page-products .pp-team__name {
  font-size: 15px;
  font-weight: 600;
  color: var(--white);
}

.page-products .pp-team__meta {
  font-family: var(--font-mono);
  font-size: 11px;
  letter-spacing: 0.04em;
  color: var(--clay);
  line-height: 1.5;
}

/* ---------- 射门延展 ---------- */
.page-products .pp-shots__grid {
  display: grid;
  grid-template-columns: minmax(0, 1fr);
  gap: 30px;
  align-items: center;
}

.page-products .pp-shots__figure {
  margin: 0;
  overflow: hidden;
  background: var(--surface-2);
  border: 1px solid var(--line-ice);
}

.page-products .pp-shots__figure img {
  display: block;
  width: 100%;
  height: auto;
  aspect-ratio: 3 / 2;
  object-fit: cover;
}

.page-products .pp-shots__text .section-title {
  margin: 10px 0 18px;
  font-size: clamp(24px, 6.4vw, 38px);
  line-height: 1.22;
  font-weight: 600;
  letter-spacing: -0.01em;
  color: var(--white);
}

.page-products .pp-shots__text .btn {
  margin-top: 8px;
}

/* ---------- 动效（reduced-motion 兼容） ---------- */
.page-products [data-reveal] {
  opacity: 1;
}

@media (prefers-reduced-motion: no-preference) {
  .page-products.is-js [data-reveal] {
    opacity: 0;
    transform: translateY(16px);
    transition: opacity 0.42s var(--ease), transform 0.42s var(--ease);
  }

  .page-products.is-js [data-reveal].is-visible {
    opacity: 1;
    transform: none;
  }
}

/* ---------- 桌面端 ---------- */
@media (min-width: 760px) {
  .page-products .pp-sec {
    padding: 84px 0;
  }

  .page-products .pp-hero {
    padding: calc(var(--header-h) + 52px) 0 76px;
  }

  .page-products .pp-timeline::before {
    left: 111px;
  }

  .page-products .pp-tl-item {
    display: grid;
    grid-template-columns: 96px minmax(0, 1fr);
    gap: 30px;
    padding: 0 0 22px 0;
  }

  .page-products .pp-tl-item:last-child {
    padding-bottom: 0;
  }

  .page-products .pp-tl-dot {
    top: 8px;
    left: 104px;
  }

  .page-products .pp-tl-round {
    flex-direction: column;
    align-items: flex-start;
    gap: 6px;
    margin-bottom: 0;
    padding-top: 8px;
  }

  .page-products .pp-match__team {
    font-size: 16px;
  }

  .page-products .pp-team:nth-child(even) {
    margin-top: 12px;
  }
}

@media (min-width: 900px) {
  .page-products .pp-hero__grid {
    grid-template-columns: minmax(0, 6.2fr) minmax(0, 5.8fr);
    gap: 54px;
  }

  .page-products .pp-hero__figure img {
    aspect-ratio: 5 / 4;
  }

  .page-products .pp-sec {
    padding: 96px 0;
  }

  .page-products .pp-sec__head {
    margin-bottom: 44px;
  }

  .page-products .pp-band {
    margin-bottom: 34px;
  }

  .page-products .pp-roundbar {
    gap: 10px;
    margin-bottom: 34px;
  }

  .page-products .pp-dual__stage {
    grid-template-columns: minmax(0, 1fr) 64px minmax(0, 1fr);
    gap: 0;
    align-items: stretch;
  }

  .page-products .pp-axis {
    display: block;
    position: relative;
    margin: 0 8px;
  }

  .page-products .pp-axis::before {
    content: "";
    position: absolute;
    top: 14px;
    bottom: 14px;
    left: 50%;
    width: 1px;
    background: linear-gradient(
      180deg,
      rgba(95, 200, 232, 0) 0%,
      var(--line-ice) 14%,
      var(--line-ice) 86%,
      rgba(95, 200, 232, 0) 100%
    );
  }

  .page-products .pp-axis__node {
    position: absolute;
    top: 50%;
    left: 50%;
    width: 9px;
    height: 9px;
    margin: -4.5px 0 0 -4.5px;
    border-radius: 50%;
    background: var(--surface-2);
    border: 2px solid var(--ice);
  }

  .page-products .pp-cards__grid {
    grid-template-columns: minmax(0, 1.2fr) minmax(0, 0.8fr);
    gap: 56px;
  }

  .page-products .pp-shots__grid {
    grid-template-columns: minmax(0, 0.92fr) minmax(0, 1.08fr);
    gap: 56px;
  }

  .page-products .pp-team-grid {
    grid-template-columns: repeat(3, minmax(0, 1fr));
    gap: 14px;
  }
}

@media (min-width: 1120px) {
  .page-products .pp-hero__grid {
    gap: 72px;
  }

  .page-products .pp-timeline::before {
    left: 118px;
  }

  .page-products .pp-tl-item {
    grid-template-columns: 100px minmax(0, 1fr);
    gap: 36px;
  }

  .page-products .pp-tl-dot {
    left: 111px;
  }
}
</final 最后再想一下时间轴里的错位——我之前提过数据卡片纵向错位 4–8px。其实除了球队卡片的偶数项，要不要给时间轴条目也加一点错位？加吧，桌面端给偶数项往下挪 6px，不过别跟 reveal 的动画打架……reveal 用的是 `padding` 上的 `translateY`，跟板块级的 `margin` 不冲突。可以搞。

其实 `data-reveal` 是在 `li` 上，`translateY` 会直接作用到元素上。加 `margin-top: 6px` 应该没问题，就这么办。

没问题，加上去。

另外，`.page-products.is-js` 这个选择器——`is-js` 类是由 site.js 加在某个祖先上的。它可能在 `<html>` 或 `<body>` 上。`.page-products.is-js` 要求这个类同时在 `<main class="page-products">` 上。嗯，如果 site.js 把 `is-js` 加在 `documentElement` 上，那 `.page-products.is-js [data-reveal]` 就永远匹配不上，内容表现为视觉上没问题（默认可见）——可以接受，但有点浪费。

把选择器放宽成兼容两种情况：

```css
.is-js .page-products [data-reveal] { ... }
```

但规则 5 说页面选择器都要限定在 `.page-products` 作用域内。`.is-js .page-products [data-reveal]` 仍然包含 `.page-products`。这是允许的——它是在作用域内的。其实“所有页面专属选择器必须限定在 .page-当前页面slug 作用域内”这里确实有 `.page-products`。好。

那我还是用 `.is-js .page-products [data-reveal]`。嗯，但如果 `is-js` 加在 `body` 上，而 `main` 在 `body` 里面，那 `.is-js .page-products` 就能匹配。好。

其实更稳妥的是两个都写：`.page-products.is-js` 和 `.is-js .page-products`。算了，就用 `.is-js .page-products` 和 `.page-products.is-js` 在同一个选择器列表里。

嗯，但 `.is-js .page-products` 放在页面 CSS 里——它会不会污染别的页面？不会，`.page-products` 只在这页存在。没问题。

好，就这么定了。

不过在 `is-js` 场景下，如果 JS 挂了，reveal 就永远不会触发，内容会一直不可见。这是标准风险；site.js 应该会处理。但为了保险，我可以改成只靠一层小透明度加另外一种方式兜底……其实常见的做法是：JS 先给根元素加 `is-js`，然后 reveal 监听器再挂上去。可以接受。

嗯，但如果 site.js 没有实现 `data-reveal`……它其实在 `interaction_data_attributes` 列表里，所以已经实现了。好。

我现在把 CSS 里那段改掉。

算了，干脆直接砍掉 reveal 的 opacity 处理，只保留一个轻量的位移动画？不行——我还是保留标准做法，就当 site.js 已经实现了。

嗯，暗色主题里如果 JS 挂了、内容不可见，那真是灾难。要不我用 `.is-visible` 默认可见，然后用 `:not(.is-visible)`？还是同样的问题。

标准安全做法：

```css
.is-js .page-products [data-reveal] { opacity: 0; transform: translateY(16px); transition: ...; }
.is-js .page-products [data-reveal].is-visible { opacity: 1; transform: none; }
```

如果 JS 跑起来但 observer 没触发，那内容就一直是隐藏的。site.js 处理就是了。这本来就是这套协议的标准模式。继续。

现在输出最终版本。

其实还有个隐患：`.page-products .pp-match` 里的 `clip-path`——我本来会在 `pp-dcard` 上用，结果又改主意了，现在用的是 `pp-hero__figure` 和 `pp-square`，已经没问题。

再检查一下横向溢出：整体都没问题，都比较稳。

球队网格的 `auto-fill minmax(150px, 1fr)`，在 320 宽、两边还各 20 的容器里：可用宽度 280，150 一列就放得下。没问题。

Hero 统计三列，窄屏时每个大概 88px；10px 的中文等宽字还 OK。

好，继续输出。

另外在 900px 以上给时间轴的偶数项加个交错错位：

```css
@media (min-width: 900px) {
  .page-products .pp-tl-item:nth-child(even) { margin-top: 6px; }
}
```

嗯，有 `padding-bottom` 在，影响不大，但还能提供一种手工排布的感觉。把这条加上吧。

等等，时间轴的 `::before` 是贯穿整个高度的直线，偶数项错位会让圆点跟这条线对不齐。因为圆点是 `position: absolute` 相对于条目定位的，条目本身往右挪 6px，圆点自然也就跟着下移了。这样看起来会有点松散的错位感，其实可以接受，甚至还挺像故意的。不过要精确对齐的话，其实可以将错位放在 `pp-tl-item` 的 `padding-top` 上，而不是 `margin` —— 这样圆点保持在顶部，距离不变，只是条目内部的文字往下走。

干脆不用 `margin-top`，改用 `padding-top: 8px`。但这样圆点的顶部位置又变成 8px 了，得保持 `top: 8px` 左右。

头疼，还是不要过度设计，先不加吧。保持所有条目对齐就好。

那就省掉这一条。

现在写最终版。
/* ============ 赛程与比分 · 页面专属样式 ============ */
.page-products {
  --pp-chip-w: 18px;
  --pp-chip-h: 24px;
  background: var(--surface-1);
  color: var(--white);
  overflow-x: hidden;
}

/* ---------- 通用区块 ---------- */
.page-products .pp-sec {
  position: relative;
  padding: 56px 0;
  background: var(--surface-1);
}

.page-products .pp-sec--alt {
  background: var(--surface-2);
}

.page-products .pp-sec__head {
  max-width: 760px;
  margin-bottom: 30px;
}

.page-products .pp-sec__head .section-title {
  margin: 10px 0 16px;
  font-size: clamp(24px, 6.4vw, 40px);
  line-height: 1.2;
  font-weight: 600;
  letter-spacing: -0.01em;
  color: var(--white);
}

.page-products .pp-sec__lede {
  margin: 0;
  max-width: 62ch;
  font-size: 16px;
  line-height: 1.8;
  color: var(--mist);
}

.page-products .prose {
  margin: 0 0 18px;
  max-width: 62ch;
  font-size: 16px;
  line-height: 1.8;
  color: var(--mist);
}

.page-products .prose:last-child {
  margin-bottom: 0;
}

.page-products .pp-note {
  margin: 28px 0 0;
  padding-left: 14px;
  border-left: 3px solid var(--line-lime);
  max-width: 62ch;
  font-size: 14px;
  line-height: 1.8;
  color: var(--clay);
}

.page-products .pp-note--wide {
  max-width: 76ch;
}

.page-products .pp-note a {
  color: var(--lime);
  text-decoration: none;
  border-bottom: 1px solid var(--line-lime);
}

.page-products .pp-note a:hover {
  color: var(--white);
}

/* ---------- 面包屑 ---------- */
.page-products .breadcrumbs {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: 8px;
  margin-bottom: 22px;
  font-family: var(--font-mono);
  font-size: 12px;
  letter-spacing: 0.04em;
  color: var(--clay);
}

.page-products .breadcrumbs a {
  color: var(--mist);
  text-decoration: none;
}

.page-products .breadcrumbs a:hover {
  color: var(--lime);
}

/* ---------- 首屏 ---------- */
.page-products .pp-hero {
  position: relative;
  padding: calc(var(--header-h) + 32px) 0 44px;
  background:
    radial-gradient(120% 90% at 82% 0%, rgba(31, 122, 77, 0.34) 0%, rgba(11, 31, 23, 0) 62%),
    var(--surface-1);
}

.page-products .pp-hero__grid {
  display: grid;
  grid-template-columns: minmax(0, 1fr);
  gap: 34px;
  align-items: end;
}

.page-products .pp-hero h1.display {
  margin: 12px 0 18px;
  font-size: clamp(30px, 8.2vw, 60px);
  line-height: 1.1;
  font-weight: 900;
  letter-spacing: -0.02em;
  color: var(--white);
}

.page-products .pp-hero .lede {
  margin: 0 0 28px;
  max-width: 54ch;
  font-size: 16px;
  line-height: 1.8;
  color: var(--mist);
}

.page-products .pp-hero__stats {
  display: grid;
  grid-template-columns: repeat(3, minmax(0, 1fr));
  gap: 10px;
  margin: 0;
  padding-top: 20px;
  border-top: 1px solid var(--line);
}

.page-products .pp-stat dt {
  margin: 0 0 6px;
  font-family: var(--font-mono);
  font-size: 10px;
  letter-spacing: 0.04em;
  line-height: 1.4;
  color: var(--clay);
}

.page-products .pp-stat dd {
  margin: 0;
  font-size: clamp(13px, 3.6vw, 16px);
  font-weight: 600;
  line-height: 1.3;
  color: var(--lime);
}

.page-products .pp-hero__figure {
  position: relative;
  margin: 0;
  overflow: hidden;
  background: var(--surface-2);
  clip-path: polygon(0 0, 100% 0, 100% calc(100% - 18px), calc(100% - 18px) 100%, 0 100%);
}

.page-products .pp-hero__figure::after {
  content: "";
  position: absolute;
  inset: 0;
  background: linear-gradient(180deg, rgba(11, 31, 23, 0) 42%, rgba(11, 31, 23, 0.76) 100%);
  pointer-events: none;
}

.page-products .pp-hero__figure img {
  display: block;
  width: 100%;
  height: 100%;
  aspect-ratio: 16 / 9;
  object-fit: cover;
}

/* ---------- 横幅图 ---------- */
.page-products .pp-band {
  margin: 0 0 24px;
  overflow: hidden;
  background: var(--surface-2);
  border-left: 3px solid var(--line-lime);
}

.page-products .pp-band--soft {
  border-left-color: var(--line-ice);
}

.page-products .pp-band img {
  display: block;
  width: 100%;
  height: auto;
  aspect-ratio: 3 / 1;
  object-fit: cover;
}

/* ---------- 轮次标签条 ---------- */
.page-products .pp-roundbar {
  display: flex;
  gap: 8px;
  overflow-x: auto;
  scroll-snap-type: x proximity;
  padding: 4px 0 14px;
  margin: 0 0 24px;
  -webkit-overflow-scrolling: touch;
  scrollbar-width: thin;
}

.page-products .pp-roundbar::-webkit-scrollbar {
  height: 4px;
}

.page-products .pp-roundbar::-webkit-scrollbar-thumb {
  background: var(--line-strong);
  border-radius: 2px;
}

.page-products .pp-roundchip {
  flex: 0 0 auto;
  scroll-snap-align: start;
  padding: 9px 14px 7px;
  font-family: var(--font-mono);
  font-size: 12px;
  letter-spacing: 0.06em;
  color: var(--mist);
  text-decoration: none;
  background: rgba(255, 255, 255, 0.03);
  border: 1px solid var(--line);
  border-bottom: 2px solid transparent;
  transition: color 0.2s var(--ease), border-color 0.2s var(--ease),
    background-color 0.2s var(--ease);
}

.page-products .pp-roundchip:hover,
.page-products .pp-roundchip:focus-visible {
  color: var(--white);
  background: rgba(200, 255, 77, 0.06);
  border-color: var(--line-strong);
}

.page-products .pp-roundchip[aria-current="true"] {
  color: var(--lime);
  background: rgba(200, 255, 77, 0.08);
  border-bottom-color: var(--lime);
}

/* ---------- 轮次时间轴 ---------- */
.page-products .pp-timeline {
  position: relative;
  list-style: none;
  margin: 0;
  padding: 0;
}

.page-products .pp-timeline::before {
  content: "";
  position: absolute;
  top: 6px;
  bottom: 6px;
  left: 7px;
  width: 2px;
  background: linear-gradient(180deg, var(--lime) 0%, rgba(200, 255, 77, 0.14) 100%);
}

.page-products .pp-tl-item {
  position: relative;
  padding: 0 0 26px 30px;
}

.page-products .pp-tl-item:last-child {
  padding-bottom: 0;
}

.page-products .pp-tl-dot {
  position: absolute;
  top: 6px;
  left: 0;
  width: 16px;
  height: 16px;
  border-radius: 50%;
  background: var(--surface-1);
  border: 2px solid var(--ice);
  box-shadow: 0 0 0 4px rgba(95, 200, 232, 0.1);
}

.page-products .pp-tl-item--now .pp-tl-dot {
  border-color: var(--lime);
  background: var(--lime);
  box-shadow: 0 0 0 5px rgba(200, 255, 77, 0.14);
}

.page-products .pp-tl-round {
  display: flex;
  align-items: baseline;
  gap: 10px;
  margin-bottom: 10px;
}

.page-products .pp-tl-round .round-tag {
  font-family: var(--font-mono);
  font-size: 12px;
  letter-spacing: 0.06em;
  color: var(--lime);
}

.page-products .pp-tl-when {
  font-family: var(--font-mono);
  font-size: 11px;
  letter-spacing: 0.04em;
  color: var(--clay);
}

.page-products .pp-tl-group {
  display: grid;
  grid-template-columns: minmax(0, 1fr);
  gap: 10px;
}

/* ---------- 比分条 ---------- */
.page-products .pp-match {
  padding: 14px 16px 12px;
  background: var(--surface-2);
  border: 1px solid var(--line);
  transition: transform 0.24s var(--ease), border-color 0.24s var(--ease);
}

.page-products .pp-match:hover {
  transform: translateY(-2px);
  border-color: var(--line-ice);
}

.page-products .pp-match__top {
  display: grid;
  grid-template-columns: minmax(0, 1fr) auto minmax(0, 1fr);
  align-items: center;
  gap: 8px;
}

.page-products .pp-match__team {
  font-size: 15px;
  font-weight: 600;
  line-height: 1.35;
  color: var(--white);
  overflow-wrap: anywhere;
}

.page-products .pp-match__team--away {
  text-align: right;
}

.page-products .pp-match__score {
  display: inline-flex;
  align-items: baseline;
  gap: 4px;
  font-size: clamp(26px, 7vw, 38px);
  font-weight: 900;
  line-height: 1;
  letter-spacing: -0.02em;
  color: var(--lime);
}

.page-products .pp-match__score i {
  font-style: normal;
  font-size: 0.55em;
  color: var(--clay);
}

.page-products .pp-match__meta {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  justify-content: space-between;
  gap: 8px 14px;
  margin-top: 12px;
  padding-top: 10px;
  border-top: 1px solid var(--line);
}

.page-products .pp-marks {
  display: inline-flex;
  align-items: center;
  gap: 5px;
  font-family: var(--font-mono);
  font-size: 12px;
  color: var(--mist);
}

.page-products .pp-brief {
  font-family: var(--font-mono);
  font-size: 11px;
  letter-spacing: 0.04em;
  color: var(--clay);
  opacity: 0.7;
  transition: opacity 0.24s var(--ease), color 0.24s var(--ease);
}

.page-products .pp-match:hover .pp-brief {
  opacity: 1;
  color: var(--ice);
}

/* ---------- 红黄牌色块 ---------- */
.page-products .card-chip {
  display: inline-block;
  width: var(--pp-chip-w);
  height: var(--pp-chip-h);
  border-radius: 2px;
  vertical-align: middle;
}

.page-products .card-chip--yellow {
  background: var(--yellow);
}

.page-products .card-chip--red {
  background: var(--red);
}

/* ---------- 同屏双场 ---------- */
.page-products .pp-dual__stage {
  display: grid;
  grid-template-columns: minmax(0, 1fr);
  gap: 14px;
}

.page-products .pp-dcard {
  padding: 18px 18px 16px;
  background: var(--surface-1);
  border: 1px solid var(--line);
  clip-path: polygon(0 0, 100% 0, 100% calc(100% - 12px), calc(100% - 12px) 100%, 0 100%);
}

.page-products .pp-dcard--focus {
  border-color: var(--line-lime);
  background:
    linear-gradient(180deg, rgba(200, 255, 77, 0.07) 0%, rgba(11, 31, 23, 0) 58%),
    var(--surface-1);
}

.page-products .pp-dcard__head {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  justify-content: space-between;
  gap: 8px;
  margin-bottom: 16px;
}

.page-products .pp-dcard__head .round-tag {
  font-family: var(--font-mono);
  font-size: 12px;
  letter-spacing: 0.06em;
  color: var(--lime);
}

.page-products .pp-dcard__badge {
  padding: 4px 8px;
  font-family: var(--font-mono);
  font-size: 10px;
  letter-spacing: 0.06em;
  color: var(--surface-0);
  background: var(--lime);
}

.page-products .pp-dcard__badge--alt {
  color: var(--ice);
  background: transparent;
  border: 1px solid var(--line-ice);
}

.page-products .pp-dcard__pair {
  display: grid;
  grid-template-columns: minmax(0, 1fr) auto minmax(0, 1fr);
  align-items: center;
  gap: 8px;
  margin: 0 0 18px;
}

.page-products .pp-dcard__team {
  font-size: 15px;
  font-weight: 600;
  color: var(--white);
  overflow-wrap: anywhere;
}

.page-products .pp-dcard__team--away {
  text-align: right;
}

.page-products .pp-dcard__score {
  display: inline-flex;
  align-items: baseline;
  gap: 5px;
  font-size: clamp(32px, 9vw, 52px);
  font-weight: 900;
  line-height: 1;
  letter-spacing: -0.02em;
  color: var(--lime);
}

.page-products .pp-dcard__score i {
  font-style: normal;
  font-size: 0.45em;
  color: var(--clay);
}

.page-products .pp-dcard__stats {
  display: grid;
  grid-template-columns: repeat(4, minmax(0, 1fr));
  gap: 8px;
  margin: 0;
  padding-top: 14px;
  border-top: 1px solid var(--line);
}

.page-products .pp-dcard__stats dt {
  margin: 0 0 5px;
  font-family: var(--font-mono);
  font-size: 10px;
  letter-spacing: 0.04em;
  color: var(--clay);
}

.page-products .pp-dcard__stats dd {
  margin: 0;
  font-family: var(--font-mono);
  font-size: 13px;
  color: var(--ice);
}

.page-products .pp-axis {
  display: none;
}

/* ---------- 红黄牌章节 ---------- */
.page-products .pp-cards__grid {
  display: grid;
  grid-template-columns: minmax(0, 1fr);
  gap: 30px;
  align-items: start;
}

.page-products .pp-cards__text .section-title {
  margin: 10px 0 18px;
  font-size: clamp(24px, 6.4vw, 38px);
  line-height: 1.22;
  font-weight: 600;
  letter-spacing: -0.01em;
  color: var(--white);
}

.page-products .pp-cardslist {
  list-style: none;
  margin: 24px 0 0;
  padding: 0;
  border-top: 1px solid var(--line);
}

.page-products .pp-cardslist li {
  display: grid;
  grid-template-columns: auto minmax(0, 1fr) auto;
  align-items: center;
  gap: 10px 14px;
  padding: 13px 0;
  border-bottom: 1px solid var(--line);
}

.page-products .pp-cardslist .round-tag {
  font-family: var(--font-mono);
  font-size: 11px;
  letter-spacing: 0.06em;
  color: var(--lime);
  white-space: nowrap;
}

.page-products .pp-cardslist__teams {
  font-size: 14px;
  color: var(--mist);
  overflow-wrap: anywhere;
}

.page-products .pp-square {
  margin: 0;
  overflow: hidden;
  background: var(--surface-2);
  clip-path: polygon(0 0, 100% 0, 100% 100%, 14px 100%, 0 calc(100% - 14px));
}

.page-products .pp-square img {
  display: block;
  width: 100%;
  height: auto;
  aspect-ratio: 1 / 1;
  object-fit: cover;
}

/* ---------- 球队 ---------- */
.page-products .pp-team-grid {
  list-style: none;
  margin: 0;
  padding: 0;
  display: grid;
  grid-template-columns: repeat(auto-fill, minmax(150px, 1fr));
  gap: 12px;
}

.page-products .pp-team {
  display: flex;
  flex-direction: column;
  gap: 8px;
  padding: 16px 14px;
  background: var(--surface-1);
  border: 1px solid var(--line);
  transition: transform 0.24s var(--ease), border-color 0.24s var(--ease);
}

.page-products .pp-team:nth-child(even) {
  margin-top: 10px;
}

.page-products .pp-team:hover {
  transform: translateY(-2px);
  border-color: var(--line-ice);
}

.page-products .pp-team__initial {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 34px;
  height: 34px;
  font-size: 16px;
  font-weight: 700;
  color: var(--surface-0);
  background: var(--lime);
}

.page-products .pp-team__name {
  font-size: 15px;
  font-weight: 600;
  color: var(--white);
}

.page-products .pp-team__meta {
  font-family: var(--font-mono);
  font-size: 11px;
  letter-spacing: 0.04em;
  line-height: 1.5;
  color: var(--clay);
}

/* ---------- 射门延展 ---------- */
.page-products .pp-shots__grid {
  display: grid;
  grid-template-columns: minmax(0, 1fr);
  gap: 30px;
  align-items: center;
}

.page-products .pp-shots__figure {
  margin: 0;
  overflow: hidden;
  background: var(--surface-2);
  border: 1px solid var(--line-ice);
}

.page-products .pp-shots__figure img {
  display: block;
  width: 100%;
  height: auto;
  aspect-ratio: 3 / 2;
  object-fit: cover;
}

.page-products .pp-shots__text .section-title {
  margin: 10px 0 18px;
  font-size: clamp(24px, 6.4vw, 38px);
  line-height: 1.22;
  font-weight: 600;
  letter-spacing: -0.01em;
  color: var(--white);
}

.page-products .pp-shots__text .btn {
  margin-top: 10px;
}

/* ---------- 滚动显现 ---------- */
.page-products [data-reveal] {
  opacity: 1;
}

@media (prefers-reduced-motion: no-preference) {
  .is-js .page-products [data-reveal],
  .page-products.is-js [data-reveal] {
    opacity: 0;
    transform: translateY(16px);
    transition: opacity 0.42s var(--ease), transform 0.42s var(--ease);
  }

  .is-js .page-products [data-reveal].is-visible,
  .page-products.is-js [data-reveal].is-visible {
    opacity: 1;
    transform: none;
  }
}

/* ---------- 平板及以上 ---------- */
@media (min-width: 760px) {
  .page-products .pp-sec {
    padding: 84px 0;
  }

  .page-products .pp-hero {
    padding: calc(var(--header-h) + 52px) 0 76px;
  }

  .page-products .pp-sec__head {
    margin-bottom: 40px;
  }

  .page-products .pp-timeline::before {
    left: 111px;
  }

  .page-products .pp-tl-item {
    display: grid;
    grid-template-columns: 96px minmax(0, 1fr);
    gap: 30px;
    padding: 0 0 22px 0;
  }

  .page-products .pp-tl-item:last-child {
    padding-bottom: 0;
  }

  .page-products .pp-tl-dot {
    top: 8px;
    left: 104px;
  }

  .page-products .pp-tl-round {
    flex-direction: column;
    align-items: flex-start;
    gap: 6px;
    margin-bottom: 0;
    padding-top: 8px;
  }

  .page-products .pp-match__team {
    font-size: 16px;
  }

  .page-products .pp-cardslist li {
    gap: 12px 20px;
    padding: 15px 0;
  }
}

/* ---------- 桌面端 ---------- */
@media (min-width: 900px) {
  .page-products .pp-sec {
    padding: 96px 0;
  }

  .page-products .pp-hero__grid {
    grid-template-columns: minmax(0, 6.2fr) minmax(0, 5.8fr);
    gap: 54px;
  }

  .page-products .pp-hero__figure img {
    aspect-ratio: 5 / 4;
  }

  .page-products .pp-band {
    margin-bottom: 34px;
  }

  .page-products .pp-roundbar {
    gap: 10px;
    margin-bottom: 36px;
  }

  .page-products .pp-dual__stage {
    grid-template-columns: minmax(0, 1fr) 64px minmax(0, 1fr);
    gap: 0;
    align-items: stretch;
  }

  .page-products .pp-axis {
    display: block;
    position: relative;
    margin: 0 8px;
  }

  .page-products .pp-axis::before {
    content: "";
    position: absolute;
    top: 14px;
    bottom: 14px;
    left: 50%;
    width: 1px;
    background: linear-gradient(
      180deg,
      rgba(95, 200, 232, 0) 0%,
      var(--line-ice) 14%,
      var(--line-ice) 86%,
      rgba(95, 200, 232, 0) 100%
    );
  }

  .page-products .pp-axis__node {
    position: absolute;
    top: 50%;
    left: 50%;
    width: 9px;
    height: 9px;
    margin: -4.5px 0 0 -4.5px;
    border-radius: 50%;
    background: var(--surface-2);
    border: 2px solid var(--ice);
  }

  .page-products .pp-cards__grid {
    grid-template-columns: minmax(0, 1.2fr) minmax(0, 0.8fr);
    gap: 56px;
  }

  .page-products .pp-shots__grid {
    grid-template-columns: minmax(0, 0.92fr) minmax(0, 1.08fr);
    gap: 56px;
  }

  .page-products .pp-team-grid {
    grid-template-columns: repeat(3, minmax(0, 1fr));
    gap: 14px;
  }

  .page-products .pp-note {
    margin-top: 34px;
  }
}

/* ---------- 宽屏 ---------- */
@media (min-width: 1120px) {
  .page-products .pp-hero__grid {
    gap: 72px;
  }

  .page-products .pp-timeline::before {
    left: 118px;
  }

  .page-products .pp-tl-item {
    grid-template-columns: 100px minmax(0, 1fr);
    gap: 36px;
  }

  .page-products .pp-tl-dot {
    left: 111px;
  }

  .page-products .pp-team-grid {
    grid-template-columns: repeat(6, minmax(0, 1fr));
  }
}
