.page-news {
  --news-cat-rule: var(--c-cyan);
  --news-cat-sub: var(--c-orange);
  --news-cat-client: #A08BFF;
  --news-cat-notice: var(--c-signal);
  --news-index-w: 190px;
  padding-bottom: calc(var(--dock-h) + 48px);
}

/* ---------- 首屏 ---------- */
.page-news .news-hero {
  position: relative;
  overflow: hidden;
  border-bottom: 1px solid var(--c-line);
  padding-bottom: clamp(28px, 5vw, 56px);
}
.page-news .news-hero::before {
  content: "";
  position: absolute;
  inset: -25% -12% 30% -12%;
  background:
    radial-gradient(58% 62% at 82% 14%, rgba(59, 42, 107, 0.9), transparent 70%),
    radial-gradient(38% 42% at 8% 4%, rgba(53, 224, 208, 0.13), transparent 72%);
  pointer-events: none;
}
.page-news .news-hero::after {
  content: "";
  position: absolute;
  inset: 0;
  background-image: linear-gradient(to right, rgba(74, 88, 120, 0.26) 1px, transparent 1px);
  background-size: 96px 100%;
  -webkit-mask-image: linear-gradient(to bottom, #000, transparent 88%);
  mask-image: linear-gradient(to bottom, #000, transparent 88%);
  pointer-events: none;
}
.page-news .news-hero__inner,
.page-news .news-hero__figure {
  position: relative;
  z-index: 1;
}
.page-news .news-hero__eyebrow {
  margin: 18px 0 14px;
  color: var(--c-cyan);
}
.page-news .news-hero__title {
  margin: 0 0 20px;
  line-height: 0.98;
  letter-spacing: -0.02em;
  color: var(--c-stardust);
}
.page-news .news-hero__lead {
  max-width: 64ch;
  margin: 0 0 22px;
  color: var(--c-body);
}
.page-news .news-hero__status {
  display: flex;
  align-items: center;
  gap: 10px;
  padding-top: 16px;
  border-top: 1px solid var(--c-line);
  font-family: var(--font-mono);
  font-size: 13px;
  letter-spacing: 0.02em;
  color: var(--c-observ);
}
.page-news .news-hero__figure {
  margin-top: clamp(26px, 4vw, 44px);
}
.page-news .news-hero__figure .media-frame {
  width: 100%;
}

/* ---------- 最近条目刻度带 ---------- */
.page-news .news-ticks {
  position: sticky;
  top: var(--header-h);
  z-index: 18;
  background: rgba(16, 26, 61, 0.94);
  -webkit-backdrop-filter: blur(10px);
  backdrop-filter: blur(10px);
  border-bottom: 1px solid var(--c-line);
}
.page-news .news-ticks__inner {
  display: flex;
  align-items: center;
  gap: 16px;
  min-height: 52px;
  padding-top: 8px;
  padding-bottom: 8px;
}
.page-news .news-ticks__label {
  flex: none;
  color: var(--c-observ);
}
.page-news .news-ticks__track {
  display: flex;
  align-items: center;
  gap: 4px;
  margin: 0;
  padding: 0;
  list-style: none;
  overflow-x: auto;
  scrollbar-width: none;
}
.page-news .news-ticks__track::-webkit-scrollbar {
  display: none;
}
.page-news .news-ticks__item {
  flex: none;
}
.page-news .news-ticks__link {
  position: relative;
  display: inline-flex;
  align-items: center;
  gap: 7px;
  padding: 7px 10px;
  border: 1px solid transparent;
  border-radius: var(--radius);
  color: var(--c-observ);
  text-decoration: none;
  transition: border-color 0.18s ease-out, color 0.18s ease-out;
}
.page-news .news-ticks__link:hover,
.page-news .news-ticks__link:focus-visible {
  border-color: var(--c-line);
  color: var(--c-stardust);
}
.page-news .news-ticks__dot {
  width: 7px;
  height: 7px;
  flex: none;
  background: var(--news-cat-rule);
  transform: rotate(45deg);
}
.page-news .news-ticks__dot[data-cat="sub"] { background: var(--news-cat-sub); }
.page-news .news-ticks__dot[data-cat="client"] { background: var(--news-cat-client); }
.page-news .news-ticks__dot[data-cat="notice"] { background: var(--news-cat-notice); }
.page-news .news-ticks__code {
  font-size: 12px;
  letter-spacing: 0.04em;
}
.page-news .news-ticks__link::after {
  content: attr(data-summary);
  position: absolute;
  left: 0;
  bottom: calc(100% + 10px);
  width: min(240px, 62vw);
  padding: 9px 11px;
  background: var(--c-void);
  border: 1px solid var(--c-line);
  border-radius: var(--radius);
  color: var(--c-body);
  font-family: var(--font-sans);
  font-size: 12px;
  line-height: 1.6;
  letter-spacing: 0;
  opacity: 0;
  visibility: hidden;
  pointer-events: none;
  transition: opacity 0.18s ease-out, visibility 0.18s ease-out;
  z-index: 30;
}
.page-news .news-ticks__link:hover::after,
.page-news .news-ticks__link:focus-visible::after {
  opacity: 1;
  visibility: visible;
}

/* ---------- 变更条目布局 ---------- */
.page-news .news-layout {
  display: grid;
  grid-template-columns: minmax(0, 1fr);
  gap: clamp(20px, 3vw, 40px);
}
.page-news .news-index {
  order: 2;
}
.page-news .news-main {
  order: 1;
  min-width: 0;
}
.page-news .news-head .prose {
  max-width: 62ch;
}
.page-news .news-filter {
  margin: 22px 0 20px;
}
.page-news .pill {
  border-radius: var(--radius);
}

/* ---------- 条目卡 ---------- */
.page-news .news-stream {
  border-top: 1px solid var(--c-line);
}
.page-news .change-item {
  border: 0;
  border-bottom: 1px solid var(--c-line);
  border-radius: 0;
  background: transparent;
  margin: 0;
  transition: background 0.2s ease-out;
}
.page-news .change-item:hover {
  background: rgba(16, 26, 61, 0.6);
}
.page-news .change-item__heading {
  margin: 0;
  font-size: inherit;
  font-weight: inherit;
}
.page-news .change-item__trigger {
  display: grid;
  grid-template-columns: auto minmax(0, 1fr) auto;
  align-items: baseline;
  gap: 14px;
  width: 100%;
  padding: 20px 4px;
  border: 0;
  background: transparent;
  color: inherit;
  text-align: left;
  cursor: pointer;
}
.page-news .change-item__idx {
  font-size: 13px;
  letter-spacing: 0.04em;
  color: var(--news-cat-rule);
}
.page-news .change-item--sub .change-item__idx { color: var(--news-cat-sub); }
.page-news .change-item--client .change-item__idx { color: var(--news-cat-client); }
.page-news .change-item--notice .change-item__idx { color: var(--news-cat-notice); }
.page-news .change-item__title {
  font-family: var(--font-sans);
  font-weight: 500;
  font-size: clamp(16px, 2.1vw, 19px);
  line-height: 1.5;
  color: var(--c-stardust);
}
.page-news .change-item__trigger[aria-expanded="true"] .change-item__title {
  color: var(--c-cyan);
}
.page-news .change-item__panel {
  overflow: hidden;
}
.page-news .change-item__body {
  padding: 0 4px 26px;
  max-width: 74ch;
}
.page-news .change-item__body > p {
  margin: 0 0 1.2em;
  color: var(--c-body);
}
.page-news .change-item__body a {
  color: var(--c-cyan);
  text-decoration: none;
  border-bottom: 1px solid rgba(53, 224, 208, 0.45);
}
.page-news .change-item__body a:hover {
  border-bottom-color: var(--c-cyan);
}
.page-news .change-item__figure {
  margin: 0 0 22px;
}

.page-news .change-meta {
  margin: 0;
  border-top: 1px solid var(--c-line);
}
.page-news .change-meta__row {
  display: grid;
  grid-template-columns: 96px minmax(0, 1fr);
  gap: 12px;
  padding: 11px 0;
  border-bottom: 1px solid rgba(74, 88, 120, 0.45);
}
.page-news .change-meta__row dt {
  font-size: 12px;
  letter-spacing: 0.14em;
  color: var(--c-observ);
}
.page-news .change-meta__row dd {
  margin: 0;
  font-size: 14.5px;
  line-height: 1.7;
  color: var(--c-body);
}

/* ---------- 赛季专题 ---------- */
.page-news .season-grid {
  display: grid;
  grid-template-columns: minmax(0, 1fr);
  gap: clamp(20px, 3vw, 34px);
  align-items: start;
}
.page-news .season-list {
  display: grid;
  gap: 14px;
}
.page-news .season-card {
  position: relative;
  padding: 20px 20px 18px;
  border: 1px solid var(--c-line);
  border-left: 2px solid var(--c-nebula);
  border-radius: var(--radius);
  background: var(--c-cabin);
  transition: border-left-color 0.2s ease-out, transform 0.2s ease-out;
}
.page-news .season-card:hover {
  border-left-color: var(--c-cyan);
  transform: translateX(3px);
}
.page-news .season-card__stage {
  margin: 0 0 8px;
  color: var(--c-observ);
}
.page-news .season-card__title {
  margin: 0 0 10px;
  color: var(--c-stardust);
}
.page-news .season-card__text {
  margin: 0 0 12px;
  color: var(--c-body);
}
.page-news .season-card__who {
  margin: 0 0 10px;
  font-size: 13.5px;
  color: var(--c-observ);
}
.page-news .season-card__codes {
  margin: 0;
  padding-top: 10px;
  border-top: 1px solid rgba(74, 88, 120, 0.5);
  font-size: 12px;
  letter-spacing: 0.08em;
  color: var(--c-cyan);
}
.page-news .season-cover {
  margin: 0;
}
.page-news .season-cover .media-frame__img {
  width: 100%;
  height: auto;
  object-fit: cover;
}

/* ---------- 更新节奏 ---------- */
.page-news .cadence {
  display: grid;
  gap: clamp(20px, 3vw, 32px);
  padding: clamp(20px, 3vw, 32px);
  border: 1px solid var(--c-line);
  border-radius: var(--radius);
  background:
    linear-gradient(180deg, rgba(59, 42, 107, 0.32), transparent 70%),
    var(--c-cabin);
}
.page-news .cadence__lane-head {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 12px;
  padding-bottom: 14px;
  border-bottom: 1px solid rgba(74, 88, 120, 0.5);
}
.page-news .cadence__rate {
  font-size: 12.5px;
  letter-spacing: 0.06em;
  color: var(--c-observ);
}
.page-news .cadence__points {
  position: relative;
  display: flex;
  gap: 6px;
  margin: 0;
  padding: 26px 0 0;
  list-style: none;
}
.page-news .cadence__points::before {
  content: "";
  position: absolute;
  left: 6px;
  right: 6px;
  top: 4px;
  height: 1px;
  background: var(--c-line);
}
.page-news .cadence__point {
  position: relative;
  flex: 1 1 0;
  min-width: 0;
  text-align: center;
}
.page-news .cadence__dot {
  position: absolute;
  top: 0;
  left: 50%;
  width: 9px;
  height: 9px;
  margin-left: -4.5px;
  border: 1px solid var(--c-line);
  background: var(--c-orbit);
  transform: rotate(45deg);
}
.page-news .cadence__lane--warm .cadence__dot {
  border-color: rgba(255, 138, 61, 0.6);
}
.page-news .cadence__point--now .cadence__dot {
  background: var(--c-cyan);
  border-color: var(--c-cyan);
  box-shadow: 0 0 0 4px rgba(53, 224, 208, 0.18);
}
.page-news .cadence__lane--warm .cadence__point--now .cadence__dot {
  background: var(--c-orange);
  border-color: var(--c-orange);
  box-shadow: 0 0 0 4px rgba(255, 138, 61, 0.18);
}
.page-news .cadence__code {
  display: block;
  font-size: 13px;
  color: var(--c-stardust);
}
.page-news .cadence__point--now .cadence__code {
  color: var(--c-cyan);
}
.page-news .cadence__lane--warm .cadence__point--now .cadence__code {
  color: var(--c-orange);
}
.page-news .cadence__note {
  display: block;
  margin-top: 4px;
  font-size: 11px;
  letter-spacing: 0.06em;
  color: var(--c-observ);
}

/* ---------- 通知方式 ---------- */
.page-news .notify-grid {
  align-items: stretch;
}
.page-news .notify-card {
  padding: clamp(20px, 3vw, 30px);
  border: 1px solid var(--c-line);
  border-radius: var(--radius);
  background: rgba(7, 11, 31, 0.55);
}
.page-news .notify-card--warm {
  border-color: rgba(255, 138, 61, 0.5);
  background: linear-gradient(180deg, rgba(255, 138, 61, 0.09), rgba(7, 11, 31, 0.6));
}
.page-news .notify-card__label {
  margin: 0 0 10px;
  color: var(--c-cyan);
}
.page-news .notify-card--warm .notify-card__label {
  color: var(--c-orange);
}
.page-news .notify-card__title {
  margin: 0 0 12px;
  color: var(--c-stardust);
}
.page-news .notify-card p {
  color: var(--c-body);
}
.page-news .notify-card__tip {
  margin: 0;
  padding-top: 14px;
  border-top: 1px solid rgba(74, 88, 120, 0.5);
  font-size: 13.5px;
  color: var(--c-observ);
}
.page-news .notify-card__links {
  display: flex;
  flex-wrap: wrap;
  gap: 10px;
  margin: 18px 0 0;
}

/* ---------- 热点解读 ---------- */
.page-news .digest-list {
  display: grid;
  gap: 0;
  border-top: 1px solid var(--c-line);
}
.page-news .digest-item {
  padding: 22px 0;
  border-bottom: 1px solid var(--c-line);
}
.page-news .digest-item__q {
  display: flex;
  gap: 12px;
  margin: 0 0 10px;
  font-family: var(--font-sans);
  font-size: clamp(16px, 2vw, 18px);
  font-weight: 500;
  line-height: 1.55;
  color: var(--c-stardust);
}
.page-news .digest-item__q::before {
  content: "";
  flex: none;
  width: 8px;
  height: 8px;
  margin-top: 9px;
  background: var(--c-cyan);
  transform: rotate(45deg);
}
.page-news .digest-item__a {
  margin: 0;
  max-width: 76ch;
  padding-left: 20px;
  color: var(--c-body);
}
.page-news .digest-item__a a {
  color: var(--c-cyan);
  text-decoration: none;
  border-bottom: 1px solid rgba(53, 224, 208, 0.45);
}
.page-news .digest-item__a a:hover {
  border-bottom-color: var(--c-cyan);
}
.page-news .news-digest__foot {
  margin: 26px 0 0;
  padding-top: 18px;
  border-top: 1px solid var(--c-line);
  font-size: 14px;
  max-width: 76ch;
}
.page-news .news-digest__foot a {
  color: var(--c-cyan);
  text-decoration: none;
  border-bottom: 1px solid rgba(53, 224, 208, 0.45);
}
.page-news .news-digest__foot a:hover {
  border-bottom-color: var(--c-cyan);
}

/* ---------- 响应式 ---------- */
@media (min-width: 760px) {
  .page-news .season-grid {
    grid-template-columns: minmax(0, 1.35fr) minmax(0, 1fr);
  }
  .page-news .season-cover {
    position: sticky;
    top: calc(var(--header-h) + 80px);
  }
  .page-news .cadence {
    grid-template-columns: repeat(2, minmax(0, 1fr));
  }
}

@media (min-width: 1024px) {
  .page-news .news-layout {
    grid-template-columns: var(--news-index-w) minmax(0, 1fr);
  }
  .page-news .news-index {
    order: 0;
    position: sticky;
    top: calc(var(--header-h) + 86px);
    align-self: start;
  }
  .page-news .news-main {
    order: 0;
  }
  .page-news .change-item__trigger {
    padding: 24px 6px;
    gap: 22px;
  }
  .page-news .change-item__body {
    padding-left: 74px;
  }
  .page-news .change-meta__row {
    grid-template-columns: 118px minmax(0, 1fr);
  }
}

@media (max-width: 599px) {
  .page-news .news-ticks__inner {
    gap: 10px;
  }
  .page-news .news-ticks__label {
    display: none;
  }
  .page-news .news-ticks__link::after {
    display: none;
  }
  .page-news .change-item__trigger {
    grid-template-columns: minmax(0, 1fr) auto;
    gap: 8px 12px;
  }
  .page-news .change-item__idx {
    grid-column: 1 / -1;
  }
  .page-news .change-meta__row {
    grid-template-columns: minmax(0, 1fr);
    gap: 4px;
  }
  .page-news .cadence__note {
    display: none;
  }
  .page-news .digest-item__a {
    padding-left: 0;
  }
}

@media (prefers-reduced-motion: reduce) {
  .page-news .season-card,
  .page-news .change-item,
  .page-news .news-ticks__link,
  .page-news .news-ticks__link::after {
    transition: none;
  }
  .page-news .season-card:hover {
    transform: none;
  }
}
<<<END>>>

等等，我需要在最后写上结束标记吗？指令说每个标记只能出现一次，而且标记必须是三个尖括号。它说的是“严格按照以下标记顺序输出，每个标记只能出现一次”——只需要 MAIN_HTML 和 PAGE_CSS 这两个标记。我不应该加 <<<END>>>，因为那不在既定的标记里。让我去掉它。

其实我再读一遍：“严格按照以下标记顺序输出，每个标记只能出现一次，标记必须是三个尖括号： ...  ...”。所以只有两个标记。<<<END>>> 是多余的。我从最终输出里删掉它。

另外，我也该再检查一下有没有禁止出现的短语。“核对”这个词——我去搜一下……我在正文里用了“比对”，没问题。让我检查一下“口径”——没有用。“边界”——没用。“不代表”——没用。

“校对”倒是用了几次——这是允许的，因为 allowed_facts 里就用了这个词。

好，现在定稿吧。
<main id="main-content" class="page-news">
  <section class="page-top news-hero" aria-labelledby="news-title">
    <div class="wrap news-hero__inner">
      <nav class="breadcrumb" aria-label="当前位置">
        <ol class="breadcrumb__list">
          <li class="breadcrumb__item"><a class="breadcrumb__link" href="/">首页</a></li>
          <li class="breadcrumb__item">动态与变更</li>
        </ol>
      </nav>
      <p class="eyebrow news-hero__eyebrow">中国区公告 · 版本与规则记录</p>
      <h1 class="display news-hero__title" id="news-title">规则改了什么<br>你第一时间看得见</h1>
      <p class="lede news-hero__lead">星空体育把每一次数据规则调整、订阅权益变化和客户端版本更新都写成条目，讲清楚改了哪一段、牵动哪些赛事和功能、你需要做什么。站内公告和订阅邮件同时推送，赛季进行到一半也不会漏掉关键改动。</p>
      <div class="news-hero__status">
        <span class="status-dot" aria-hidden="true"><span class="status-dot__pulse"></span></span>
        <span class="news-hero__status-text">当前功能版本 <span class="num">C-052</span>　·　当前数据规则编号 <span class="num">R-148</span></span>
      </div>
    </div>
    <div class="wrap news-hero__figure">
      <figure class="media-frame media-frame--wide">
        <img class="media-frame__img" src="{zhanqunpic:h:700w:1400}" width="1400" height="700" alt="深空背景上排列着规则条文般的细线结构，象征公告与版本记录">
        <figcaption class="media-frame__caption">每条变更都写明影响范围和生效节点，扫一眼就知道跟自己有没有关系。</figcaption>
      </figure>
    </div>
  </section>

  <div class="news-ticks">
    <div class="wrap news-ticks__inner">
      <span class="eyebrow news-ticks__label">最近条目</span>
      <ol class="news-ticks__track">
        <li class="news-ticks__item">
          <a class="news-ticks__link" href="#entry-r148" data-summary="射手榜并列名次改按助攻数与出场时间排序">
            <span class="news-ticks__dot" data-cat="rule" aria-hidden="true"></span>
            <span class="news-ticks__code num">R-148</span>
          </a>
        </li>
        <li class="news-ticks__item">
          <a class="news-ticks__link" href="#entry-r146" data-summary="单轮结束后 10 分钟内完成射手榜刷新">
            <span class="news-ticks__dot" data-cat="rule" aria-hidden="true"></span>
            <span class="news-ticks__code num">R-146</span>
          </a>
        </li>
        <li class="news-ticks__item">
          <a class="news-ticks__link" href="#entry-c052" data-summary="大屏模式支持射手榜与实时比分同屏">
            <span class="news-ticks__dot" data-cat="client" aria-hidden="true"></span>
            <span class="news-ticks__code num">C-052</span>
          </a>
        </li>
        <li class="news-ticks__item">
          <a class="news-ticks__link" href="#entry-s031" data-summary="赛季订阅开放中途追加球队的升级通道">
            <span class="news-ticks__dot" data-cat="sub" aria-hidden="true"></span>
            <span class="news-ticks__code num">S-031</span>
          </a>
        </li>
        <li class="news-ticks__item">
          <a class="news-ticks__link" href="#entry-a019" data-summary="弱网下文字战报优先加载阈值明确为 200KB/s">
            <span class="news-ticks__dot" data-cat="notice" aria-hidden="true"></span>
            <span class="news-ticks__code num">A-019</span>
          </a>
        </li>
        <li class="news-ticks__item">
          <a class="news-ticks__link" href="#entry-r144" data-summary="历史轮次列表标出校对状态">
            <span class="news-ticks__dot" data-cat="rule" aria-hidden="true"></span>
            <span class="news-ticks__code num">R-144</span>
          </a>
        </li>
      </ol>
    </div>
  </div>

  <section class="section news-changes" id="rules" data-section="rules" data-filter-root>
    <div class="wrap news-layout">
      <aside class="news-index">
        <nav class="anchor-index" aria-label="页内导航">
          <a class="anchor-index__link" href="#rules">变更条目</a>
          <a class="anchor-index__link" href="#seasons">赛季专题</a>
          <a class="anchor-index__link" href="#cadence">更新节奏</a>
          <a class="anchor-index__link" href="#notify">通知方式</a>
          <a class="anchor-index__link" href="#digest">热点解读</a>
        </nav>
      </aside>

      <div class="news-main">
        <div class="section__head news-head">
          <p class="section__num eyebrow">01 / 变更条目</p>
          <h2 class="h2">这个赛季改了什么</h2>
          <p class="prose muted">按数据规则、订阅与价目、客户端版本、服务公告归成四类，最近的在最前面。点开任意一条，能看到影响范围和你要做的操作。</p>
        </div>

        <div class="pills news-filter" data-filter-group role="group" aria-label="按变更分类筛选">
          <button class="pill is-active" type="button" data-filter="all" aria-pressed="true">全部</button>
          <button class="pill" type="button" data-filter="rule" aria-pressed="false">数据规则</button>
          <button class="pill" type="button" data-filter="sub" aria-pressed="false">订阅与价目</button>
          <button class="pill" type="button" data-filter="client" aria-pressed="false">客户端版本</button>
          <button class="pill" type="button" data-filter="notice" aria-pressed="false">服务公告</button>
        </div>

        <div class="news-stream accordion">
          <article id="entry-r148" class="accordion__item change-item change-item--rule" data-disclosure data-filter-item="rule" data-reveal>
            <h3 class="change-item__heading">
              <button class="accordion__trigger change-item__trigger" type="button" data-disclosure-trigger aria-expanded="false" aria-controls="panel-r148">
                <span class="change-item__idx num">R-148</span>
                <span class="change-item__title">射手榜并列名次改按助攻数与出场时间排序</span>
                <span class="accordion__mark" aria-hidden="true"></span>
              </button>
            </h3>
            <div class="accordion__panel change-item__panel" id="panel-r148" data-disclosure-panel>
              <div class="accordion__body change-item__body">
                <p>本赛季第 12 轮结束后，射手榜上进球数相同的名次不再按姓氏笔画排位，改为先比助攻数、再比出场时间，两项都相同才沿用原来的顺序。这条改动让并列名次的先后更贴近场上实际贡献，也让名单读起来更服气。</p>
                <dl class="change-meta">
                  <div class="change-meta__row"><dt>影响范围</dt><dd>全部 42 项联赛的射手榜与赛后战报</dd></div>
                  <div class="change-meta__row"><dt>你需要做的</dt><dd>无需任何操作，刷新页面即可看到新排序</dd></div>
                  <div class="change-meta__row"><dt>生效节点</dt><dd>本赛季第 12 轮之后的全部轮次；此前轮次保持原排序归档</dd></div>
                </dl>
              </div>
            </div>
          </article>

          <article id="entry-r146" class="accordion__item change-item change-item--rule" data-disclosure data-filter-item="rule" data-reveal>
            <h3 class="change-item__heading">
              <button class="accordion__trigger change-item__trigger" type="button" data-disclosure-trigger aria-expanded="false" aria-controls="panel-r146">
                <span class="change-item__idx num">R-146</span>
                <span class="change-item__title">单轮结束后 10 分钟内完成射手榜刷新</span>
                <span class="accordion__mark" aria-hidden="true"></span>
              </button>
            </h3>
            <div class="accordion__panel change-item__panel" id="panel-r146" data-disclosure-panel>
              <div class="accordion__body change-item__body">
                <p>上一版规则把射手榜的刷新窗口定在 15 分钟，这一版压缩到 10 分钟。赛事数据在每轮结束后进入校对流程，校对完成的轮次才会进入历史归档，所以从终场哨响到榜单呈现最终名次，现在最长等待 10 分钟。习惯终场就来看名次的用户，不用再掐着表反复刷新。</p>
                <figure class="media-frame media-frame--16x9 change-item__figure">
                  <img class="media-frame__img" src="{zhanqunpic:h:600w:1000}" width="1000" height="600" alt="由采集、校对、发布三个环节组成的流程示意图，线条简洁" loading="lazy" decoding="async">
                  <figcaption class="media-frame__caption">采集、校对、发布三段走完，名次才会落定并进入归档。</figcaption>
                </figure>
                <dl class="change-meta">
                  <div class="change-meta__row"><dt>影响范围</dt><dd>全部联赛轮次的射手榜刷新与赛后战报</dd></div>
                  <div class="change-meta__row"><dt>你需要做的</dt><dd>无需操作，刷新页面即可看到最新名次</dd></div>
                  <div class="change-meta__row"><dt>生效节点</dt><dd>本赛季第 13 轮起</dd></div>
                </dl>
              </div>
            </div>
          </article>

          <article id="entry-c052" class="accordion__item change-item change-item--client" data-disclosure data-filter-item="client" data-reveal>
            <h3 class="change-item__heading">
              <button class="accordion__trigger change-item__trigger" type="button" data-disclosure-trigger aria-expanded="false" aria-controls="panel-c052">
                <span class="change-item__idx num">C-052</span>
                <span class="change-item__title">大屏模式支持射手榜与实时比分同屏</span>
                <span class="accordion__mark" aria-hidden="true"></span>
              </button>
            </h3>
            <div class="accordion__panel change-item__panel" id="panel-c052" data-disclosure-panel>
              <div class="accordion__body change-item__body">
                <p>大屏观战新增同屏数据开关，射手榜和实时比分可以并排显示，界面按 55 至 120 英寸的显示设备重新排布。观赛空间和球迷社团用一台大屏就能同时盯住比分走势和射手名次，不用在两个页面之间来回切。</p>
                <figure class="media-frame media-frame--16x9 change-item__figure">
                  <img class="media-frame__img" src="{zhanqunpic:h:600w:1000}" width="1000" height="600" alt="多个版本节点沿一条轨迹排列的抽象示意图，节点为荧光青色" loading="lazy" decoding="async">
                  <figcaption class="media-frame__caption">功能版本每 6 周发布一次，C-052 是当前这一版。</figcaption>
                </figure>
                <dl class="change-meta">
                  <div class="change-meta__row"><dt>影响范围</dt><dd>大屏观战模式；移动端与 PC 网页端不受影响</dd></div>
                  <div class="change-meta__row"><dt>你需要做的</dt><dd>在观战设置里打开「同屏数据」，旧版本需更新到 C-052 后可用</dd></div>
                  <div class="change-meta__row"><dt>生效节点</dt><dd>C-052 版本发布后立即可用</dd></div>
                </dl>
              </div>
            </div>
          </article>

          <article id="entry-s031" class="accordion__item change-item change-item--sub" data-disclosure data-filter-item="sub" data-reveal>
            <h3 class="change-item__heading">
              <button class="accordion__trigger change-item__trigger" type="button" data-disclosure-trigger aria-expanded="false" aria-controls="panel-s031">
                <span class="change-item__idx num">S-031</span>
                <span class="change-item__title">赛季订阅开放中途追加球队的升级通道</span>
                <span class="accordion__mark" aria-hidden="true"></span>
              </button>
            </h3>
            <div class="accordion__panel change-item__panel" id="panel-s031" data-disclosure-panel>
              <div class="accordion__body change-item__body">
                <p>按赛季订阅的用户可以在赛季进行中追加球队，差额按剩余轮次折算，已经进行过的轮次不重复计算。赛季过半才想跟着另一支球队走，不用等到下个赛季重新起订。三种订阅方式的适用人群和费用对照放在<a href="/apps/">应用与订阅价目</a>，一页就能比完。</p>
                <dl class="change-meta">
                  <div class="change-meta__row"><dt>影响范围</dt><dd>按赛季订阅的用户；按自然月订阅的用户同样支持在下一周期切换</dd></div>
                  <div class="change-meta__row"><dt>你需要做的</dt><dd>在订阅管理里发起升级，系统按剩余轮次折算差额；企业用户可按新周期开具电子发票</dd></div>
                  <div class="change-meta__row"><dt>生效节点</dt><dd>本赛季中段起开放</dd></div>
                </dl>
              </div>
            </div>
          </article>

          <article id="entry-a019" class="accordion__item change-item change-item--notice" data-disclosure data-filter-item="notice" data-reveal>
            <h3 class="change-item__heading">
              <button class="accordion__trigger change-item__trigger" type="button" data-disclosure-trigger aria-expanded="false" aria-controls="panel-a019">
                <span class="change-item__idx num">A-019</span>
                <span class="change-item__title">弱网下文字战报优先加载阈值明确为 200KB/s</span>
                <span class="accordion__mark" aria-hidden="true"></span>
              </button>
            </h3>
            <div class="accordion__panel change-item__panel" id="panel-a019" data-disclosure-panel>
              <div class="accordion__body change-item__body">
                <p>网速低于 200KB/s 时，页面自动切换为文字战报优先加载模式：比分和关键事件先出来，图片与图表随网络恢复补齐。通勤路上、球场看台、场馆后台这些信号不稳的地方，这条最实用。移动端与 PC 端的数据同步延迟不超过 3 秒，切换加载模式不会让比分落后。</p>
                <dl class="change-meta">
                  <div class="change-meta__row"><dt>影响范围</dt><dd>移动端与 PC 网页端；大屏观战模式在断流恢复后自动补齐图表</dd></div>
                  <div class="change-meta__row"><dt>你需要做的</dt><dd>无需设置，系统按实际网速自动判断</dd></div>
                  <div class="change-meta__row"><dt>生效节点</dt><dd>A-019 公告发布后立即生效</dd></div>
                </dl>
              </div>
            </div>
          </article>

          <article id="entry-r144" class="accordion__item change-item change-item--rule" data-disclosure data-filter-item="rule" data-reveal>
            <h3 class="change-item__heading">
              <button class="accordion__trigger change-item__trigger" type="button" data-disclosure-trigger aria-expanded="false" aria-controls="panel-r144">
                <span class="change-item__idx num">R-144</span>
                <span class="change-item__title">历史轮次列表标出校对状态</span>
                <span class="accordion__mark" aria-hidden="true"></span>
              </button>
            </h3>
            <div class="accordion__panel change-item__panel" id="panel-r144" data-disclosure-panel>
              <div class="accordion__body change-item__body">
                <p>每轮赛事数据在结束后进入校对流程，校对完成的轮次才会进入历史归档。现在已结束的轮次列表会直接标出当前处于哪个环节，你翻旧赛季数据时一眼就能分辨哪些轮次已经定稿、哪些还在走流程。数据准确率按赛季抽检，保持在 99.2% 以上，这条标识让每一轮的状态都能对上。</p>
                <dl class="change-meta">
                  <div class="change-meta__row"><dt>影响范围</dt><dd>已结束轮次的历史归档列表与球队数据主页</dd></div>
                  <div class="change-meta__row"><dt>你需要做的</dt><dd>无需操作，打开历史轮次即可看到状态标识</dd></div>
                  <div class="change-meta__row"><dt>生效节点</dt><dd>R-144 规则生效后产生的所有新归档轮次</dd></div>
                </dl>
              </div>
            </div>
          </article>
        </div>
      </div>
    </div>
  </section>

  <section class="section section--alt news-seasons" id="seasons" data-section="seasons">
    <div class="wrap">
      <div class="section__head">
        <p class="section__num eyebrow">02 / 赛季专题</p>
        <h2 class="h2">按赛季阶段，看事情是怎么一步步变的</h2>
        <p class="prose muted">一个赛季里的改动往往围绕同一件事展开。专题把同一阶段的规则调整和重点数据能力升级串在一起，读一个专题，就知道这段赛程里发生了什么。</p>
      </div>

      <div class="season-grid">
        <div class="season-list">
          <article class="season-card" data-reveal>
            <p class="season-card__stage eyebrow">常规阶段</p>
            <h3 class="h3 season-card__title">名次怎么排，终场后多久定</h3>
            <p class="season-card__text">这一段集中在射手榜本身：并列名次的排序依据换了，单轮刷新窗口从 15 分钟压到 10 分钟，历史轮次列表也标出了校对状态。</p>
            <p class="season-card__who">适合习惯每轮结束就比对名次变化的用户</p>
            <p class="season-card__codes num">R-148 · R-146 · R-144</p>
          </article>

          <article class="season-card" data-reveal>
            <p class="season-card__stage eyebrow">赛季中段</p>
            <h3 class="h3 season-card__title">订阅能改，大屏能同屏</h3>
            <p class="season-card__text">中段的改动偏向使用方式：赛季订阅开放中途追加球队，大屏观战随客户端版本上线射手榜与实时比分同屏，弱网下的文字战报优先策略也同步明确。</p>
            <p class="season-card__who">适合赛季过半才决定追加球队、或需要把战报投到大屏的用户</p>
            <p class="season-card__codes num">S-031 · C-052 · A-019</p>
          </article>

          <article class="season-card" data-reveal>
            <p class="season-card__stage eyebrow">收官阶段</p>
            <h3 class="h3 season-card__title">整个赛季的数据怎么留档</h3>
            <p class="season-card__text">收官段的重点是归档与下个周期：收官轮次的归档节奏会提前说明，赛季订阅的续订与转自然月路径在同一入口完成，赛季数据总览能力同步升级。</p>
            <p class="season-card__who">适合想把整个赛季数据留档、或者打算换个订阅周期的用户</p>
            <p class="season-card__codes num">R-148 · S-031</p>
          </article>
        </div>

        <figure class="media-frame media-frame--16x9 season-cover">
          <img class="media-frame__img" src="{zhanqunpic:h:675w:1200}" width="1200" height="675" alt="球场灯光与星轨融合的抽象封面，无具体赛果信息" loading="lazy" decoding="async">
          <figcaption class="media-frame__caption">每个赛季阶段的改动方向不同，专题把它们按阶段归拢在一起。</figcaption>
        </figure>
      </div>
    </div>
  </section>

  <section class="section news-cadence" id="cadence" data-section="cadence">
    <div class="wrap">
      <div class="section__head">
        <p class="section__num eyebrow">03 / 更新节奏</p>
        <h2 class="h2">功能版本每 6 周一个，数据规则每 2 周一次</h2>
        <p class="prose muted">两条线分开走：功能版本改的是你能看到和点到的界面，数据规则改的是榜单怎么算、什么时候定稿。各自独立编号，看到编号就知道该去哪一类条目里找详情。</p>
      </div>

      <div class="cadence">
        <div class="cadence__lane">
          <div class="cadence__lane-head">
            <span class="tag tag--cyan">功能版本</span>
            <span class="cadence__rate num">每 6 周发布</span>
          </div>
          <ol class="cadence__points" aria-label="最近四个功能版本">
            <li class="cadence__point"><span class="cadence__dot" aria-hidden="true"></span><span class="cadence__code num">C-046</span><span class="cadence__note">六个版本前</span></li>
            <li class="cadence__point"><span class="cadence__dot" aria-hidden="true"></span><span class="cadence__code num">C-048</span><span class="cadence__note">四个版本前</span></li>
            <li class="cadence__point"><span class="cadence__dot" aria-hidden="true"></span><span class="cadence__code num">C-050</span><span class="cadence__note">上一版本</span></li>
            <li class="cadence__point cadence__point--now"><span class="cadence__dot" aria-hidden="true"></span><span class="cadence__code num">C-052</span><span class="cadence__note">当前版本</span></li>
          </ol>
        </div>

        <div class="cadence__lane cadence__lane--warm">
          <div class="cadence__lane-head">
            <span class="tag tag--warm">数据规则</span>
            <span class="cadence__rate num">每 2 周更新</span>
          </div>
          <ol class="cadence__points" aria-label="最近五个数据规则编号">
            <li class="cadence__point"><span class="cadence__dot" aria-hidden="true"></span><span class="cadence__code num">R-140</span><span class="cadence__note">八个周期前</span></li>
            <li class="cadence__point"><span class="cadence__dot" aria-hidden="true"></span><span class="cadence__code num">R-142</span><span class="cadence__note">六个周期前</span></li>
            <li class="cadence__point"><span class="cadence__dot" aria-hidden="true"></span><span class="cadence__code num">R-144</span><span class="cadence__note">四个周期前</span></li>
            <li class="cadence__point"><span class="cadence__dot" aria-hidden="true"></span><span class="cadence__code num">R-146</span><span class="cadence__note">上一周期</span></li>
            <li class="cadence__point cadence__point--now"><span class="cadence__dot" aria-hidden="true"></span><span class="cadence__code num">R-148</span><span class="cadence__note">当前规则</span></li>
          </ol>
        </div>
      </div>
    </div>
  </section>

  <section class="section section--nebula news-notify" id="notify" data-section="notify">
    <div class="wrap">
      <div class="section__head">
        <p class="section__num eyebrow">04 / 通知方式</p>
        <h2 class="h2">改了什么，两个通道同时到</h2>
        <p class="prose muted">站内公告和订阅邮件一起推，赛后高峰也不会漏掉关键改动。</p>
      </div>

      <div class="grid grid--7-5 notify-grid">
        <article class="notify-card" data-reveal>
          <p class="notify-card__label eyebrow">站内公告</p>
          <h3 class="h3 notify-card__title">打开页面就能看到最新一条</h3>
          <p>公告条目按编号顺序发布，首页和本页同步出现。条目里写明影响范围与生效节点，需要你操作的会单独标出。数据规则每 2 周更新一次，功能版本每 6 周发布一次，公告跟着这两条节奏走。</p>
          <p class="notify-card__tip">客服工作时段为周一至周日 09:00-22:00，赛事高峰期优先处理订阅与费用查询。</p>
        </article>

        <article class="notify-card notify-card--warm" data-reveal>
          <p class="notify-card__label eyebrow">订阅邮件</p>
          <h3 class="h3 notify-card__title">按订阅周期送达，不频繁打扰</h3>
          <p>订阅生效的用户按订阅周期收到变更摘要邮件。赛季订阅覆盖完整赛季轮次，赛季里所有规则调整和版本更新都会汇总在同一封里，不用天天翻公告。变更记录保留 24 个月，用户可随时查阅历史版本。</p>
          <p class="notify-card__links">
            <a class="btn btn--ghost btn--sm" href="/faq/">看订阅与邮件常见问题</a>
            <a class="btn btn--ghost btn--sm" href="/consult/">联系咨询与服务</a>
          </p>
        </article>
      </div>
    </div>
  </section>

  <section class="section news-digest" id="digest" data-section="digest">
    <div class="wrap">
      <div class="section__head">
        <p class="section__num eyebrow">05 / 热点解读</p>
        <h2 class="h2">改动大的几条，展开讲一讲</h2>
        <p class="prose muted">影响面越大的改动，越容易在赛季里引起疑问。这三条被问得最多，先把话说在前面。</p>
      </div>

      <div class="digest-list">
        <article class="digest-item" data-reveal>
          <h3 class="digest-item__q">排序规则变了，我以前存下来的名次对不上，是不是数据出错了？</h3>
          <p class="digest-item__a">不是。历史轮次按当时生效的规则归档，不会因为新规则回头重排。你在 R-148 生效之前存下的名次，跟新规则下的榜单有出入属于正常，翻回对应轮次看到的仍是原来那一版。要比对时，认准条目里写的生效节点就行。</p>
        </article>

        <article class="digest-item" data-reveal>
          <h3 class="digest-item__q">大屏开了同屏数据，网络不稳的时候会不会卡住不刷新？</h3>
          <p class="digest-item__a">不会。网速低于 200KB/s 时页面自动切到文字战报优先加载，比分和关键事件先出来，图表随网络恢复补齐。大屏模式在断流恢复后自动补上缺失部分，中途不会停在旧画面不动。</p>
        </article>

        <article class="digest-item" data-reveal>
          <h3 class="digest-item__q">赛季中途追加球队，原来的订阅周期怎么算？</h3>
          <p class="digest-item__a">差额按剩余轮次折算，已经进行过的轮次不重复计算，原订阅的到期时间不变。想从按赛季改成按自然月，同样在下一个周期切换即可，不用重新走一遍订阅流程。费用对照见<a href="/apps/">应用与订阅价目</a>。</p>
        </article>
      </div>

      <p class="news-digest__foot muted">变更背后的规则讨论、数据校对与版本发布由内容与数据团队承担，团队构成与协作方式见<a href="/who-we-are/">我们是谁</a>。对某条变更还有疑问，通过<a href="/consult/">咨询与服务</a>联系我们。</p>
    </div>
  </section>
</main>

.page-news {
  --news-cat-rule: var(--c-cyan);
  --news-cat-sub: var(--c-orange);
  --news-cat-client: #A08BFF;
  --news-cat-notice: var(--c-signal);
  --news-index-w: 190px;
  padding-bottom: calc(var(--dock-h) + 48px);
}

/* ---------- 首屏 ---------- */
.page-news .news-hero {
  position: relative;
  overflow: hidden;
  border-bottom: 1px solid var(--c-line);
  padding-bottom: clamp(28px, 5vw, 56px);
}
.page-news .news-hero::before {
  content: "";
  position: absolute;
  inset: -25% -12% 30% -12%;
  background:
    radial-gradient(58% 62% at 82% 14%, rgba(59, 42, 107, 0.9), transparent 70%),
    radial-gradient(38% 42% at 8% 4%, rgba(53, 224, 208, 0.13), transparent 72%);
  pointer-events: none;
}
.page-news .news-hero::after {
  content: "";
  position: absolute;
  inset: 0;
  background-image: linear-gradient(to right, rgba(74, 88, 120, 0.26) 1px, transparent 1px);
  background-size: 96px 100%;
  -webkit-mask-image: linear-gradient(to bottom, #000, transparent 88%);
  mask-image: linear-gradient(to bottom, #000, transparent 88%);
  pointer-events: none;
}
.page-news .news-hero__inner,
.page-news .news-hero__figure {
  position: relative;
  z-index: 1;
}
.page-news .news-hero__eyebrow {
  margin: 18px 0 14px;
  color: var(--c-cyan);
}
.page-news .news-hero__title {
  margin: 0 0 20px;
  line-height: 0.98;
  letter-spacing: -0.02em;
  color: var(--c-stardust);
}
.page-news .news-hero__lead {
  max-width: 64ch;
  margin: 0 0 22px;
  color: var(--c-body);
}
.page-news .news-hero__status {
  display: flex;
  align-items: center;
  gap: 10px;
  padding-top: 16px;
  border-top: 1px solid var(--c-line);
  font-family: var(--font-mono);
  font-size: 13px;
  letter-spacing: 0.02em;
  color: var(--c-observ);
}
.page-news .news-hero__figure {
  margin-top: clamp(26px, 4vw, 44px);
}
.page-news .news-hero__figure .media-frame {
  width: 100%;
}

/* ---------- 最近条目刻度带 ---------- */
.page-news .news-ticks {
  position: sticky;
  top: var(--header-h);
  z-index: 18;
  background: rgba(16, 26, 61, 0.94);
  -webkit-backdrop-filter: blur(10px);
  backdrop-filter: blur(10px);
  border-bottom: 1px solid var(--c-line);
}
.page-news .news-ticks__inner {
  display: flex;
  align-items: center;
  gap: 16px;
  min-height: 52px;
  padding-top: 8px;
  padding-bottom: 8px;
}
.page-news .news-ticks__label {
  flex: none;
  color: var(--c-observ);
}
.page-news .news-ticks__track {
  display: flex;
  align-items: center;
  gap: 4px;
  margin: 0;
  padding: 0;
  list-style: none;
  overflow-x: auto;
  scrollbar-width: none;
}
.page-news .news-ticks__track::-webkit-scrollbar {
  display: none;
}
.page-news .news-ticks__item {
  flex: none;
}
.page-news .news-ticks__link {
  position: relative;
  display: inline-flex;
  align-items: center;
  gap: 7px;
  padding: 7px 10px;
  border: 1px solid transparent;
  border-radius: var(--radius);
  color: var(--c-observ);
  text-decoration: none;
  transition: border-color 0.18s ease-out, color 0.18s ease-out;
}
.page-news .news-ticks__link:hover,
.page-news .news-ticks__link:focus-visible {
  border-color: var(--c-line);
  color: var(--c-stardust);
}
.page-news .news-ticks__dot {
  width: 7px;
  height: 7px;
  flex: none;
  background: var(--news-cat-rule);
  transform: rotate(45deg);
}
.page-news .news-ticks__dot[data-cat="sub"] { background: var(--news-cat-sub); }
.page-news .news-ticks__dot[data-cat="client"] { background: var(--news-cat-client); }
.page-news .news-ticks__dot[data-cat="notice"] { background: var(--news-cat-notice); }
.page-news .news-ticks__code {
  font-size: 12px;
  letter-spacing: 0.04em;
}
.page-news .news-ticks__link::after {
  content: attr(data-summary);
  position: absolute;
  left: 0;
  bottom: calc(100% + 10px);
  width: min(240px, 62vw);
  padding: 9px 11px;
  background: var(--c-void);
  border: 1px solid var(--c-line);
  border-radius: var(--radius);
  color: var(--c-body);
  font-family: var(--font-sans);
  font-size: 12px;
  line-height: 1.6;
  letter-spacing: 0;
  opacity: 0;
  visibility: hidden;
  pointer-events: none;
  transition: opacity 0.18s ease-out, visibility 0.18s ease-out;
  z-index: 30;
}
.page-news .news-ticks__link:hover::after,
.page-news .news-ticks__link:focus-visible::after {
  opacity: 1;
  visibility: visible;
}

/* ---------- 变更条目布局 ---------- */
.page-news .news-layout {
  display: grid;
  grid-template-columns: minmax(0, 1fr);
  gap: clamp(20px, 3vw, 40px);
}
.page-news .news-index {
  order: 2;
}
.page-news .news-main {
  order: 1;
  min-width: 0;
}
.page-news .news-head .prose {
  max-width: 62ch;
}
.page-news .news-filter {
  margin: 22px 0 20px;
}
.page-news .pill {
  border-radius: var(--radius);
}

/* ---------- 条目卡 ---------- */
.page-news .news-stream {
  border-top: 1px solid var(--c-line);
}
.page-news .change-item {
  border: 0;
  border-bottom: 1px solid var(--c-line);
  border-radius: 0;
  background: transparent;
  margin: 0;
  transition: background 0.2s ease-out;
}
.page-news .change-item:hover {
  background: rgba(16, 26, 61, 0.6);
}
.page-news .change-item__heading {
  margin: 0;
  font-size: inherit;
  font-weight: inherit;
}
.page-news .change-item__trigger {
  display: grid;
  grid-template-columns: auto minmax(0, 1fr) auto;
  align-items: baseline;
  gap: 14px;
  width: 100%;
  padding: 20px 4px;
  border: 0;
  background: transparent;
  color: inherit;
  text-align: left;
  cursor: pointer;
}
.page-news .change-item__idx {
  font-size: 13px;
  letter-spacing: 0.04em;
  color: var(--news-cat-rule);
}
.page-news .change-item--sub .change-item__idx { color: var(--news-cat-sub); }
.page-news .change-item--client .change-item__idx { color: var(--news-cat-client); }
.page-news .change-item--notice .change-item__idx { color: var(--news-cat-notice); }
.page-news .change-item__title {
  font-family: var(--font-sans);
  font-weight: 500;
  font-size: clamp(16px, 2.1vw, 19px);
  line-height: 1.5;
  color: var(--c-stardust);
}
.page-news .change-item__trigger[aria-expanded="true"] .change-item__title {
  color: var(--c-cyan);
}
.page-news .change-item__panel {
  overflow: hidden;
}
.page-news .change-item__body {
  padding: 0 4px 26px;
  max-width: 74ch;
}
.page-news .change-item__body > p {
  margin: 0 0 1.2em;
  color: var(--c-body);
}
.page-news .change-item__body a {
  color: var(--c-cyan);
  text-decoration: none;
  border-bottom: 1px solid rgba(53, 224, 208, 0.45);
}
.page-news .change-item__body a:hover {
  border-bottom-color: var(--c-cyan);
}
.page-news .change-item__figure {
  margin: 0 0 22px;
}

.page-news .change-meta {
  margin: 0;
  border-top: 1px solid var(--c-line);
}
.page-news .change-meta__row {
  display: grid;
  grid-template-columns: 96px minmax(0, 1fr);
  gap: 12px;
  padding: 11px 0;
  border-bottom: 1px solid rgba(74, 88, 120, 0.45);
}
.page-news .change-meta__row dt {
  font-size: 12px;
  letter-spacing: 0.14em;
  color: var(--c-observ);
}
.page-news .change-meta__row dd {
  margin: 0;
  font-size: 14.5px;
  line-height: 1.7;
  color: var(--c-body);
}

/* ---------- 赛季专题 ---------- */
.page-news .season-grid {
  display: grid;
  grid-template-columns: minmax(0, 1fr);
  gap: clamp(20px, 3vw, 34px);
  align-items: start;
}
.page-news .season-list {
  display: grid;
  gap: 14px;
}
.page-news .season-card {
  position: relative;
  padding: 20px 20px 18px;
  border: 1px solid var(--c-line);
  border-left: 2px solid var(--c-nebula);
  border-radius: var(--radius);
  background: var(--c-cabin);
  transition: border-left-color 0.2s ease-out, transform 0.2s ease-out;
}
.page-news .season-card:hover {
  border-left-color: var(--c-cyan);
  transform: translateX(3px);
}
.page-news .season-card__stage {
  margin: 0 0 8px;
  color: var(--c-observ);
}
.page-news .season-card__title {
  margin: 0 0 10px;
  color: var(--c-stardust);
}
.page-news .season-card__text {
  margin: 0 0 12px;
  color: var(--c-body);
}
.page-news .season-card__who {
  margin: 0 0 10px;
  font-size: 13.5px;
  color: var(--c-observ);
}
.page-news .season-card__codes {
  margin: 0;
  padding-top: 10px;
  border-top: 1px solid rgba(74, 88, 120, 0.5);
  font-size: 12px;
  letter-spacing: 0.08em;
  color: var(--c-cyan);
}
.page-news .season-cover {
  margin: 0;
}
.page-news .season-cover .media-frame__img {
  width: 100%;
  height: auto;
  object-fit: cover;
}

/* ---------- 更新节奏 ---------- */
.page-news .cadence {
  display: grid;
  gap: clamp(20px, 3vw, 32px);
  padding: clamp(20px, 3vw, 32px);
  border: 1px solid var(--c-line);
  border-radius: var(--radius);
  background:
    linear-gradient(180deg, rgba(59, 42, 107, 0.32), transparent 70%),
    var(--c-cabin);
}
.page-news .cadence__lane-head {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 12px;
  padding-bottom: 14px;
  border-bottom: 1px solid rgba(74, 88, 120, 0.5);
}
.page-news .cadence__rate {
  font-size: 12.5px;
  letter-spacing: 0.06em;
  color: var(--c-observ);
}
.page-news .cadence__points {
  position: relative;
  display: flex;
  gap: 6px;
  margin: 0;
  padding: 26px 0 0;
  list-style: none;
}
.page-news .cadence__points::before {
  content: "";
  position: absolute;
  left: 6px;
  right: 6px;
  top: 4px;
  height: 1px;
  background: var(--c-line);
}
.page-news .cadence__point {
  position: relative;
  flex: 1 1 0;
  min-width: 0;
  text-align: center;
}
.page-news .cadence__dot {
  position: absolute;
  top: 0;
  left: 50%;
  width: 9px;
  height: 9px;
  margin-left: -4.5px;
  border: 1px solid var(--c-line);
  background: var(--c-orbit);
  transform: rotate(45deg);
}
.page-news .cadence__lane--warm .cadence__dot {
  border-color: rgba(255, 138, 61, 0.6);
}
.page-news .cadence__point--now .cadence__dot {
  background: var(--c-cyan);
  border-color: var(--c-cyan);
  box-shadow: 0 0 0 4px rgba(53, 224, 208, 0.18);
}
.page-news .cadence__lane--warm .cadence__point--now .cadence__dot {
  background: var(--c-orange);
  border-color: var(--c-orange);
  box-shadow: 0 0 0 4px rgba(255, 138, 61, 0.18);
}
.page-news .cadence__code {
  display: block;
  font-size: 13px;
  color: var(--c-stardust);
}
.page-news .cadence__point--now .cadence__code {
  color: var(--c-cyan);
}
.page-news .cadence__lane--warm .cadence__point--now .cadence__code {
  color: var(--c-orange);
}
.page-news .cadence__note {
  display: block;
  margin-top: 4px;
  font-size: 11px;
  letter-spacing: 0.06em;
  color: var(--c-observ);
}

/* ---------- 通知方式 ---------- */
.page-news .notify-grid {
  align-items: stretch;
}
.page-news .notify-card {
  padding: clamp(20px, 3vw, 30px);
  border: 1px solid var(--c-line);
  border-radius: var(--radius);
  background: rgba(7, 11, 31, 0.55);
}
.page-news .notify-card--warm {
  border-color: rgba(255, 138, 61, 0.5);
  background: linear-gradient(180deg, rgba(255, 138, 61, 0.09), rgba(7, 11, 31, 0.6));
}
.page-news .notify-card__label {
  margin: 0 0 10px;
  color: var(--c-cyan);
}
.page-news .notify-card--warm .notify-card__label {
  color: var(--c-orange);
}
.page-news .notify-card__title {
  margin: 0 0 12px;
  color: var(--c-stardust);
}
.page-news .notify-card p {
  color: var(--c-body);
}
.page-news .notify-card__tip {
  margin: 0;
  padding-top: 14px;
  border-top: 1px solid rgba(74, 88, 120, 0.5);
  font-size: 13.5px;
  color: var(--c-observ);
}
.page-news .notify-card__links {
  display: flex;
  flex-wrap: wrap;
  gap: 10px;
  margin: 18px 0 0;
}

/* ---------- 热点解读 ---------- */
.page-news .digest-list {
  display: grid;
  gap: 0;
  border-top: 1px solid var(--c-line);
}
.page-news .digest-item {
  padding: 22px 0;
  border-bottom: 1px solid var(--c-line);
}
.page-news .digest-item__q {
  display: flex;
  gap: 12px;
  margin: 0 0 10px;
  font-family: var(--font-sans);
  font-size: clamp(16px, 2vw, 18px);
  font-weight: 500;
  line-height: 1.55;
  color: var(--c-stardust);
}
.page-news .digest-item__q::before {
  content: "";
  flex: none;
  width: 8px;
  height: 8px;
  margin-top: 9px;
  background: var(--c-cyan);
  transform: rotate(45deg);
}
.page-news .digest-item__a {
  margin: 0;
  max-width: 76ch;
  padding-left: 20px;
  color: var(--c-body);
}
.page-news .digest-item__a a {
  color: var(--c-cyan);
  text-decoration: none;
  border-bottom: 1px solid rgba(53, 224, 208, 0.45);
}
.page-news .digest-item__a a:hover {
  border-bottom-color: var(--c-cyan);
}
.page-news .news-digest__foot {
  margin: 26px 0 0;
  padding-top: 18px;
  border-top: 1px solid var(--c-line);
  font-size: 14px;
  max-width: 76ch;
}
.page-news .news-digest__foot a {
  color: var(--c-cyan);
  text-decoration: none;
  border-bottom: 1px solid rgba(53, 224, 208, 0.45);
}
.page-news .news-digest__foot a:hover {
  border-bottom-color: var(--c-cyan);
}

/* ---------- 响应式 ---------- */
@media (min-width: 760px) {
  .page-news .season-grid {
    grid-template-columns: minmax(0, 1.35fr) minmax(0, 1fr);
  }
  .page-news .season-cover {
    position: sticky;
    top: calc(var(--header-h) + 80px);
  }
  .page-news .cadence {
    grid-template-columns: repeat(2, minmax(0, 1fr));
  }
}

@media (min-width: 1024px) {
  .page-news .news-layout {
    grid-template-columns: var(--news-index-w) minmax(0, 1fr);
  }
  .page-news .news-index {
    order: 0;
    position: sticky;
    top: calc(var(--header-h) + 86px);
    align-self: start;
  }
  .page-news .news-main {
    order: 0;
  }
  .page-news .change-item__trigger {
    padding: 24px 6px;
    gap: 22px;
  }
  .page-news .change-item__body {
    padding-left: 74px;
  }
  .page-news .change-meta__row {
    grid-template-columns: 118px minmax(0, 1fr);
  }
}

@media (max-width: 599px) {
  .page-news .news-ticks__inner {
    gap: 10px;
  }
  .page-news .news-ticks__label {
    display: none;
  }
  .page-news .news-ticks__link::after {
    display: none;
  }
  .page-news .change-item__trigger {
    grid-template-columns: minmax(0, 1fr) auto;
    gap: 8px 12px;
  }
  .page-news .change-item__idx {
    grid-column: 1 / -1;
  }
  .page-news .change-meta__row {
    grid-template-columns: minmax(0, 1fr);
    gap: 4px;
  }
  .page-news .cadence__note {
    display: none;
  }
  .page-news .digest-item__a {
    padding-left: 0;
  }
}

@media (prefers-reduced-motion: reduce) {
  .page-news .season-card,
  .page-news .change-item,
  .page-news .news-ticks__link,
  .page-news .news-ticks__link::after {
    transition: none;
  }
  .page-news .season-card:hover {
    transform: none;
  }
}
<<<END>>>
