.page-news {
  --news-rail-line: var(--color-contrast-line);
}

/* 面包屑 */
.page-news .news-crumb {
  border-bottom: 1px solid var(--color-line);
}
.page-news .news-crumb .container {
  padding-top: var(--space-2);
  padding-bottom: var(--space-2);
}
.page-news .news-crumb .breadcrumb-list {
  display: flex;
  flex-wrap: wrap;
  gap: var(--space-1);
  margin: 0;
  padding: 0;
  list-style: none;
  font-size: var(--text-sm);
  color: var(--color-ink-muted);
}
.page-news .news-crumb .breadcrumb-item + .breadcrumb-item::before {
  content: "/";
  margin-right: var(--space-1);
  color: var(--color-ink-muted);
}
.page-news .news-crumb a {
  color: var(--color-ink-soft);
  text-decoration: none;
  border-bottom: 2px solid transparent;
}
.page-news .news-crumb a:hover,
.page-news .news-crumb a:focus-visible {
  border-bottom-color: var(--color-primary);
  color: var(--color-ink);
}

/* 首屏 */
.page-news .news-hero {
  background: var(--color-contrast-surface);
  color: var(--color-contrast-ink);
  padding: var(--space-8) 0 var(--space-6);
  border-bottom: var(--border-thin) solid var(--color-primary);
}
.page-news .news-hero-grid {
  display: grid;
  grid-template-columns: 1fr;
  gap: var(--space-6);
  align-items: center;
}
.page-news .news-hero-kicker {
  margin: 0 0 var(--space-2);
  font-family: var(--font-mono);
  font-size: var(--text-sm);
  letter-spacing: 0.06em;
  color: var(--color-contrast-accent);
}
.page-news .news-hero-title {
  margin: 0 0 var(--space-3);
  font-family: var(--font-heading);
  font-size: var(--text-display);
  font-weight: var(--weight-heading);
  line-height: 1.05;
  letter-spacing: var(--tracking-heading);
  color: var(--color-contrast-ink);
}
.page-news .news-hero-lede {
  margin: 0;
  max-width: var(--measure);
  font-size: var(--text-lg);
  line-height: 1.6;
  color: var(--color-contrast-ink);
}

.page-news .news-rail {
  display: grid;
  grid-template-columns: repeat(7, minmax(0, 1fr));
  margin-top: var(--space-6);
  border-top: var(--border-thin) solid var(--color-contrast-line);
  border-bottom: var(--border-thin) solid var(--color-contrast-line);
}
.page-news .rail-tick {
  display: block;
  padding: var(--space-2) 2px;
  font-family: var(--font-mono);
  font-size: var(--text-xs);
  font-variant-numeric: tabular-nums;
  text-align: center;
  text-decoration: none;
  color: var(--color-contrast-ink);
  border-left: 1px solid var(--color-contrast-line);
  transition: background-color 140ms linear, color 140ms linear;
}
.page-news .rail-tick:last-child {
  border-right: 1px solid var(--color-contrast-line);
}
.page-news .rail-tick:hover,
.page-news .rail-tick:focus-visible {
  background: var(--color-contrast-line);
}
.page-news .rail-tick--current {
  background: var(--color-contrast-accent);
  color: var(--color-accent-ink);
  font-weight: 700;
}
.page-news .rail-tick:focus-visible {
  outline: var(--border-thick) solid var(--color-focus);
  outline-offset: 2px;
}

.page-news .news-hero-stats {
  display: grid;
  grid-template-columns: repeat(3, minmax(0, 1fr));
  gap: var(--space-3);
  margin: var(--space-6) 0 0;
  padding-top: var(--space-4);
  border-top: 1px solid var(--color-contrast-line);
}
.page-news .news-stat {
  margin: 0;
}
.page-news .news-stat dt {
  margin: 0;
  font-size: var(--text-xs);
  letter-spacing: 0.04em;
  color: var(--color-contrast-ink);
  opacity: 0.86;
}
.page-news .news-stat-num {
  margin: var(--space-1) 0 0;
  font-family: var(--font-mono);
  font-size: var(--text-figure);
  font-weight: 700;
  font-variant-numeric: tabular-nums;
  line-height: 1;
  color: var(--color-contrast-accent);
}

.page-news .news-hero-media {
  margin: 0;
  border-left: var(--border-thick) solid var(--color-contrast-accent);
}
.page-news .news-hero-media img {
  display: block;
  width: 100%;
  height: auto;
  object-fit: cover;
}

/* 区块头 */
.page-news .news-section {
  padding: var(--space-8) 0;
}
.page-news .news-section--cats {
  background: var(--color-surface-alt);
  border-top: var(--border-thin) solid var(--color-line);
  border-bottom: var(--border-thin) solid var(--color-line);
}
.page-news .news-section--rules {
  background: var(--color-contrast-surface);
  color: var(--color-contrast-ink);
  border-top: var(--border-thin) solid var(--color-primary);
  border-bottom: var(--border-thin) solid var(--color-primary);
}

.page-news .news-sec-head {
  display: grid;
  grid-template-columns: 1fr;
  gap: var(--space-2);
  padding-top: var(--space-4);
  border-top: var(--border-thin) solid var(--color-ink);
  margin-bottom: var(--space-6);
}
.page-news .news-sec-head--slab {
  border-top-color: var(--color-contrast-accent);
}
.page-news .news-sec-num {
  display: block;
  font-family: var(--font-mono);
  font-size: var(--text-4xl);
  font-weight: 700;
  line-height: 0.9;
  font-variant-numeric: tabular-nums;
  color: var(--color-primary);
}
.page-news .news-sec-num--slab {
  color: var(--color-contrast-accent);
}
.page-news .news-sec-kicker {
  margin: 0 0 var(--space-1);
  font-family: var(--font-mono);
  font-size: var(--text-sm);
  letter-spacing: 0.06em;
  color: var(--color-ink-muted);
}
.page-news .news-sec-head--slab .news-sec-kicker {
  color: var(--color-contrast-accent);
}
.page-news .news-sec-title {
  margin: 0 0 var(--space-2);
  font-family: var(--font-heading);
  font-size: var(--text-2xl);
  font-weight: var(--weight-heading);
  line-height: var(--leading-heading);
  color: var(--color-ink);
}
.page-news .news-sec-head--slab .news-sec-title {
  color: var(--color-contrast-ink);
}
.page-news .news-sec-desc {
  margin: 0;
  max-width: var(--measure);
  font-size: var(--text-base);
  line-height: var(--leading-body);
  color: var(--color-ink-soft);
}
.page-news .news-sec-head--slab .news-sec-desc {
  color: var(--color-contrast-ink);
  opacity: 0.9;
}

/* 分类跳转标签 */
.page-news .news-filter {
  display: flex;
  flex-wrap: wrap;
  gap: var(--space-1);
  padding: var(--space-2) 0 var(--space-4);
  border-bottom: 1px solid var(--color-line);
  margin-bottom: var(--space-4);
}
.page-news .news-filter .chip {
  display: inline-block;
  padding: var(--space-1) var(--space-2);
  font-size: var(--text-sm);
  font-weight: 600;
  text-decoration: none;
  color: var(--color-ink);
  background: var(--color-surface);
  border: var(--border-thin) solid var(--color-ink);
  border-radius: var(--radius-sm);
  transition: background-color 140ms linear, color 140ms linear;
}
.page-news .news-filter .chip:hover {
  background: var(--color-primary-soft);
  border-color: var(--color-primary);
}
.page-news .news-filter .chip:focus-visible {
  outline: var(--border-thick) solid var(--color-focus);
  outline-offset: 2px;
}

/* 条目流 */
.page-news .news-stream {
  display: grid;
  gap: 0;
  border-top: var(--border-thin) solid var(--color-ink);
}
.page-news .news-item {
  padding: var(--space-4) var(--space-3);
  border-bottom: 1px solid var(--color-line);
  border-left: var(--border-thick) solid transparent;
  transition: border-left-color 140ms linear, background-color 140ms linear;
}
.page-news .news-item:hover {
  border-left-color: var(--color-primary);
  background: var(--color-surface-alt);
}
.page-news .news-item:target {
  background: var(--color-highlight);
  border-left-color: var(--color-primary);
}
.page-news .news-item-meta {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: var(--space-2);
  margin-bottom: var(--space-2);
}
.page-news .news-item-ver {
  font-family: var(--font-mono);
  font-size: var(--text-base);
  font-weight: 700;
  font-variant-numeric: tabular-nums;
  color: var(--color-primary);
}
.page-news .news-tag {
  padding: 2px var(--space-1);
  font-size: var(--text-xs);
  font-weight: 600;
  color: var(--color-ink-soft);
  border: var(--border-thin) solid var(--color-line);
  border-radius: var(--radius-sm);
}
.page-news .news-item-title {
  margin: 0 0 var(--space-2);
  max-width: var(--measure);
  font-family: var(--font-heading);
  font-size: var(--text-xl);
  font-weight: var(--weight-heading);
  line-height: var(--leading-heading);
  color: var(--color-ink);
}
.page-news .news-item-summary {
  margin: 0;
  max-width: var(--measure);
  font-size: var(--text-base);
  line-height: var(--leading-body);
  color: var(--color-ink-soft);
}

/* 状态标记：色块形状 + 文字双通道 */
.page-news .status {
  display: inline-flex;
  align-items: center;
  gap: 6px;
  padding: 2px var(--space-1);
  font-size: var(--text-xs);
  font-weight: 600;
  border: var(--border-thin) solid currentColor;
  border-radius: var(--radius-sm);
}
.page-news .status-mark {
  display: inline-block;
  width: 9px;
  height: 9px;
  flex: none;
}
.page-news .status--live {
  color: var(--color-primary);
}
.page-news .status--live .status-mark {
  background: currentColor;
}
.page-news .status--pending {
  color: var(--color-ink-soft);
}
.page-news .status--pending .status-mark {
  background: transparent;
  border: 2px solid currentColor;
}
.page-news .status--void {
  color: var(--color-ink-muted);
  border-style: dashed;
}
.page-news .status--void .status-mark {
  background: linear-gradient(45deg, transparent 42%, currentColor 42%, currentColor 58%, transparent 58%);
}

/* 展开影响范围 */
.page-news .news-item-scope {
  margin-top: var(--space-2);
  max-width: var(--measure);
  border-top: 1px dashed var(--color-line);
}
.page-news .news-item-scope summary {
  padding: var(--space-1) 0;
  font-size: var(--text-sm);
  font-weight: 600;
  color: var(--color-ink-soft);
  cursor: pointer;
}
.page-news .news-item-scope summary:hover {
  color: var(--color-primary);
}
.page-news .news-item-scope summary:focus-visible {
  outline: var(--border-thick) solid var(--color-focus);
  outline-offset: 2px;
}
.page-news .news-item-scope p {
  margin: 0 0 var(--space-2);
  font-size: var(--text-sm);
  line-height: 1.72;
  color: var(--color-ink-soft);
}

/* 分类归档 */
.page-news .news-cat-list {
  display: grid;
  grid-template-columns: 1fr;
  gap: var(--space-4);
}
.page-news .news-cat {
  padding: var(--space-3) 0 var(--space-4);
  border-top: var(--border-thin) solid var(--color-ink);
}
.page-news .news-cat-head {
  display: flex;
  align-items: baseline;
  justify-content: space-between;
  gap: var(--space-2);
  margin-bottom: var(--space-2);
}
.page-news .news-cat-title {
  margin: 0;
  font-family: var(--font-heading);
  font-size: var(--text-lg);
  font-weight: var(--weight-heading);
  color: var(--color-ink);
}
.page-news .news-cat-count {
  font-family: var(--font-mono);
  font-size: var(--text-2xl);
  font-weight: 700;
  font-variant-numeric: tabular-nums;
  line-height: 1;
  color: var(--color-accent);
}
.page-news .news-cat-note {
  margin: 0 0 var(--space-2);
  max-width: var(--measure);
  font-size: var(--text-base);
  line-height: 1.72;
  color: var(--color-ink-soft);
}
.page-news .news-cat-bar {
  height: 10px;
  background: var(--color-surface-deep);
  border: 1px solid var(--color-line);
  margin-bottom: var(--space-2);
}
.page-news .news-cat-bar-fill {
  display: block;
  height: 100%;
  background: var(--color-primary);
  border-right: var(--border-thin) solid var(--color-accent);
}
.page-news .news-cat-meta {
  margin: 0 0 var(--space-3);
  font-size: var(--text-sm);
  color: var(--color-ink-muted);
}
.page-news .news-cat-media {
  margin: 0;
  border-left: var(--border-thick) solid var(--color-primary);
}
.page-news .news-cat-media img {
  display: block;
  width: 100%;
  height: auto;
  object-fit: cover;
}

/* 版本规则深色区 */
.page-news .news-rules-grid {
  display: grid;
  grid-template-columns: 1fr;
  gap: var(--space-4);
}
.page-news .news-rule-block {
  padding-top: var(--space-3);
  border-top: var(--border-thin) solid var(--color-contrast-line);
}
.page-news .news-rule-title {
  margin: 0 0 var(--space-2);
  font-family: var(--font-heading);
  font-size: var(--text-lg);
  font-weight: var(--weight-heading);
  line-height: var(--leading-heading);
  color: var(--color-contrast-ink);
}
.page-news .news-rule-text {
  margin: 0 0 var(--space-2);
  max-width: var(--measure);
  font-size: var(--text-base);
  line-height: var(--leading-body);
  color: var(--color-contrast-ink);
  opacity: 0.92;
}
.page-news .news-rule-text a {
  color: var(--color-contrast-accent);
  text-decoration: underline;
  text-underline-offset: 3px;
}
.page-news .news-rule-text a:hover,
.page-news .news-rule-text a:focus-visible {
  color: var(--color-contrast-ink);
}
.page-news .news-rule-text a:focus-visible {
  outline: var(--border-thick) solid var(--color-focus);
  outline-offset: 2px;
}
.page-news .news-rules-foot {
  margin-top: var(--space-6);
  padding-top: var(--space-3);
  border-top: 1px solid var(--color-contrast-line);
}
.page-news .news-rules-foot p {
  margin: 0;
  max-width: var(--measure);
  font-size: var(--text-base);
  line-height: var(--leading-body);
  color: var(--color-contrast-ink);
  opacity: 0.92;
}
.page-news .news-rules-foot a {
  color: var(--color-contrast-accent);
  text-decoration: underline;
  text-underline-offset: 3px;
}
.page-news .news-rules-foot a:hover,
.page-news .news-rules-foot a:focus-visible {
  color: var(--color-contrast-ink);
}
.page-news .news-rules-foot a:focus-visible {
  outline: var(--border-thick) solid var(--color-focus);
  outline-offset: 2px;
}

/* 确认口径 */
.page-news .news-confirm-grid {
  display: grid;
  grid-template-columns: 1fr;
  gap: var(--space-4);
}
.page-news .news-confirm-card {
  padding: var(--space-3);
  border: var(--border-thin) solid var(--color-ink);
  border-radius: var(--radius-sm);
  background: var(--color-surface);
}
.page-news .news-confirm-card--link {
  border-color: var(--color-primary);
  background: var(--color-primary-soft);
}
.page-news .news-confirm-title {
  margin: 0 0 var(--space-2);
  font-family: var(--font-heading);
  font-size: var(--text-lg);
  font-weight: var(--weight-heading);
  color: var(--color-ink);
}
.page-news .news-confirm-list {
  margin: 0;
  padding-left: var(--space-4);
  font-size: var(--text-base);
  line-height: var(--leading-body);
  color: var(--color-ink-soft);
}
.page-news .news-confirm-list li + li {
  margin-top: var(--space-2);
}
.page-news .news-confirm-list strong {
  color: var(--color-ink);
  font-weight: 700;
}
.page-news .news-confirm-text {
  margin: 0 0 var(--space-3);
  font-size: var(--text-base);
  line-height: var(--leading-body);
  color: var(--color-ink-soft);
}
.page-news .news-confirm-cta {
  margin: 0;
}
.page-news .news-confirm-cta .btn {
  display: inline-block;
  text-decoration: none;
}
.page-news .news-confirm-cta .btn:focus-visible {
  outline: var(--border-thick) solid var(--color-focus);
  outline-offset: 2px;
}

/* 窄屏保护 */
.page-news img {
  max-width: 100%;
  height: auto;
}
.page-news .news-hero-stats {
  grid-template-columns: repeat(3, minmax(0, 1fr));
}
.page-news .news-stat-num {
  word-break: keep-all;
}

/* 平板及以上 */
@media (min-width: 720px) {
  .page-news .news-sec-head {
    grid-template-columns: calc(var(--space-8) + var(--space-4)) 1fr;
    align-items: start;
    gap: var(--space-4);
  }
  .page-news .news-cat-list {
    grid-template-columns: repeat(2, minmax(0, 1fr));
    gap: var(--space-6) var(--space-4);
  }
  .page-news .news-rules-grid {
    grid-template-columns: repeat(2, minmax(0, 1fr));
    gap: var(--space-6) var(--space-4);
  }
  .page-news .news-confirm-grid {
    grid-template-columns: repeat(3, minmax(0, 1fr));
  }
  .page-news .rail-tick {
    font-size: var(--text-sm);
    padding: var(--space-2) var(--space-1);
  }
}

/* 桌面 */
@media (min-width: 960px) {
  .page-news .news-hero {
    padding: var(--section-y-lg) 0 var(--space-8);
  }
  .page-news .news-hero-grid {
    grid-template-columns: 7fr 5fr;
    gap: var(--space-8);
  }
  .page-news .news-section {
    padding: var(--section-y) 0;
  }
  .page-news .news-section--cats {
    padding-bottom: var(--section-y-lg);
  }
  .page-news .news-item {
    padding: var(--space-4) var(--space-4) var(--space-4) var(--space-4);
  }
  .page-news .news-cat {
    padding-top: var(--space-4);
  }
}

@media (prefers-reduced-motion: reduce) {
  .page-news .news-item,
  .page-news .rail-tick,
  .page-news .news-filter .chip {
    transition: none;
  }
}
<<<END>>>

稍等，我重新确认一下标记规范。要求的标记是 `` 和 ``。我应该以这些标记作为输出边界，而不是 `<<<END>>>`。让我做最后一轮校验。

更仔细地重新检查一下 CSS——`.page-news .news-hero-stats` 在一处被重复设置了两次（先是 `grid-template-columns: repeat(3, ...)`，后来在一个移动端保护块里又写了一次）。没关系，是重复但无害。

再检查一下，`--news-rail-line` 在作用域内定义了但从未使用——把它删掉。

还有 `.page-news .news-item:target`——这个没问题。

检查一下 `news-stat-num` 这个类同时用在 `dd` 上，并且有 `num` 类——因为 `dd` 的默认 margin 会被重置，所以没问题。

看起来可以。

再确认一下版本对比轨道用的是 7 列——正好匹配 v4.1 到 v4.7。没问题。

验证一下从轨道到 `#v41` 到 `#v47` 的锚点链接——都存在。

`#cat-stats` 等也都存在。

好。

我会保留当前输出，删掉没用的变量。

其实就保留吧，它无害。不过为了整洁还是删掉更好。另外也要把 `<<<END>>>` 去掉。让我把最终版重新干净地输出一遍。

嗯，我不想把整篇重写一遍。就简单说明一下最终输出是有 `` 和 `` 这两个标记的，不需要额外的 `<<<END>>>`。

但其实我之前的输出里，结尾有一个 `<<<END>>>` 标记，而且最开头也少了 `` 这个标记。让我重新组织一遍，确保开头是 ``，然后是具体的 `main` 内容，之后是 ``，最后是 CSS。

现在让我把完整内容重新写出来。

我只需要把 `` 标记放在开头，并且把结尾的 `<<<END>>>` 去掉就行。

让我重新把完整内容打出来。实际上，我应该直接输出修正后的完整版本。

由于内容比较长，我只会对结构做细微调整，然后把全部内容重新拆开来说一遍。

其实，直接重新输出完整内容就好。

等等——回看用户的要求，标记应该是 `` 和 ``。我的输出结构是：

```

...html...


...css...
```

而我加了一个 `<<<END>>>`，这个不应该有。让我重新输出一遍，把这个问题修正。
<main id="main-content" class="page-news">

  <nav class="news-crumb" aria-label="页面路径">
    <div class="container">
      <ol class="breadcrumb-list">
        <li class="breadcrumb-item"><a href="/">赛场总览</a></li>
        <li class="breadcrumb-item" aria-current="page">版本动态</li>
      </ol>
    </div>
  </nav>

  <section class="news-hero slab" data-section="hero">
    <div class="container">
      <div class="news-hero-grid">
        <div class="news-hero-copy">
          <p class="news-hero-kicker">版本改动日志 · 当前为 v4.7 系列</p>
          <h1 class="news-hero-title">版本动态</h1>
          <p class="news-hero-lede">平博赛场把每一次统计口径调整、赛程编排变化、场馆信息补充与公告说明写成条目。读者对照版本号，就能判断手上引用的数据是否仍然有效。</p>

          <div class="news-rail" role="group" aria-label="版本编号对照，自 v4.1 至 v4.7">
            <a class="rail-tick" href="#v41">v4.1</a>
            <a class="rail-tick" href="#v42">v4.2</a>
            <a class="rail-tick" href="#v43">v4.3</a>
            <a class="rail-tick" href="#v44">v4.4</a>
            <a class="rail-tick" href="#v45">v4.5</a>
            <a class="rail-tick" href="#v46">v4.6</a>
            <span class="rail-tick rail-tick--current" aria-current="true">v4.7</span>
          </div>

          <dl class="news-hero-stats">
            <div class="news-stat">
              <dt>版本改动日志</dt>
              <dd class="news-stat-num num">96</dd>
            </div>
            <div class="news-stat">
              <dt>条目分类</dt>
              <dd class="news-stat-num num">5</dd>
            </div>
            <div class="news-stat">
              <dt>比赛日更新节奏</dt>
              <dd class="news-stat-num num">T+2</dd>
            </div>
          </dl>
        </div>

        <figure class="news-hero-media">
          <img src="{zhanqunpic:h:800w:1400}" width="1400" height="800" alt="深夜转播控制室内多块屏幕显示表格与曲线，冷调，屏幕内容虚化不可读">
        </figure>
      </div>
    </div>
  </section>

  <section class="news-section" data-section="stream" id="stream">
    <div class="container">

      <header class="news-sec-head">
        <span class="news-sec-num">01</span>
        <div class="news-sec-copy">
          <p class="news-sec-kicker">最新条目</p>
          <h2 class="news-sec-title">按新旧顺序排列的近期改动</h2>
          <p class="news-sec-desc">每条给出所属分类、版本编号、当前状态与影响范围。想先了解某一类的收录边界，可直接跳到第 02 节的分类说明。</p>
        </div>
      </header>

      <nav class="news-filter" aria-label="按分类跳转至收录标准说明">
        <a class="chip" href="#cat-stats">统计口径变更</a>
        <a class="chip" href="#cat-schedule">赛程编排规则</a>
        <a class="chip" href="#cat-venue">场馆信息更新</a>
        <a class="chip" href="#cat-notice">公告说明</a>
        <a class="chip" href="#cat-version">版本编号调整</a>
      </nav>

      <div class="news-stream">

        <article class="news-item" id="v47">
          <div class="news-item-meta">
            <span class="news-item-ver">v4.7</span>
            <span class="news-tag">统计口径变更</span>
            <span class="status status--live"><span class="status-mark" aria-hidden="true"></span>已生效</span>
          </div>
          <h3 class="news-item-title">杯赛签表与常规赛程的首发轮换计数合并口径统一</h3>
          <p class="news-item-summary">此前签表场次与常规场次各自计数，跨阶段比较时容易错位；本次把两者并入同一赛季汇总，避免同一支编号战队在两处得到不同数值。</p>
          <details class="news-item-scope">
            <summary>影响范围与生效说明</summary>
            <p>覆盖十二个赛区的赛季汇总表，首发轮换字段随之重算。引用旧口径的稿件请在标注中写明所依据的版本号。</p>
          </details>
        </article>

        <article class="news-item">
          <div class="news-item-meta">
            <span class="news-item-ver">v4.7</span>
            <span class="news-tag">场馆信息更新</span>
            <span class="status status--live"><span class="status-mark" aria-hidden="true"></span>已生效</span>
          </div>
          <h3 class="news-item-title">同城多馆排序补充启用比赛日数量权重</h3>
          <p class="news-item-summary">同一座城市存在两座及以上场馆时，先按赛区归属排列，再按各馆已启用的比赛日数量由多到少排序，数量相同时按馆所编号稳定排列。</p>
          <details class="news-item-scope">
            <summary>影响范围与生效说明</summary>
            <p>24 座城市的场馆列表与 68 座场馆的排列顺序随之调整，场馆按城市归类的入口同步刷新。</p>
          </details>
        </article>

        <article class="news-item">
          <div class="news-item-meta">
            <span class="news-item-ver">v4.7</span>
            <span class="news-tag">赛程编排规则</span>
            <span class="status status--pending"><span class="status-mark" aria-hidden="true"></span>试运行</span>
          </div>
          <h3 class="news-item-title">赛季中段连续比赛日之间的间隔下限调整</h3>
          <p class="news-item-summary">赛季中段赛程密度较高，本次给连续两个比赛日之间设定间隔下限，减少同日跨赛区排期冲突带来的排期重排。</p>
          <details class="news-item-scope">
            <summary>影响范围与生效说明</summary>
            <p>作用于赛季中段的赛程视图；试运行期间，赛程编排规则相关页面仍按原排期展示，确认后再切换。</p>
          </details>
        </article>

        <article class="news-item" id="v46">
          <div class="news-item-meta">
            <span class="news-item-ver">v4.6</span>
            <span class="news-tag">统计口径变更</span>
            <span class="status status--live"><span class="status-mark" aria-hidden="true"></span>已生效</span>
          </div>
          <h3 class="news-item-title">越位次数统计在半场补时段的口径说明补齐</h3>
          <p class="news-item-summary">补时段发生的越位判罚此前并入下半场统计，本次单独标注，赛季汇总里可分别查看两段数值，不再混算。</p>
          <details class="news-item-scope">
            <summary>影响范围与生效说明</summary>
            <p>作用于越位次数统计字段；五个赛区群中已完成核对的赛区先行应用，其余赛区在字段完整度中标注进度。</p>
          </details>
        </article>

        <article class="news-item">
          <div class="news-item-meta">
            <span class="news-item-ver">v4.6</span>
            <span class="news-tag">公告说明</span>
            <span class="status status--void"><span class="status-mark" aria-hidden="true"></span>已归档</span>
          </div>
          <h3 class="news-item-title">赛季收官前统计字段冻结窗口的说明</h3>
          <p class="news-item-summary">赛季收官阶段会短暂冻结部分统计字段，冻结期间只记录、不重算，等复核完成后统一放开并公布结果。</p>
          <details class="news-item-scope">
            <summary>影响范围与生效说明</summary>
            <p>说明对象为赛季汇总流程；对应的归档赛季结束后，本条转为已归档状态，内容仅作追溯。</p>
          </details>
        </article>

        <article class="news-item">
          <div class="news-item-meta">
            <span class="news-item-ver">v4.6</span>
            <span class="news-tag">统计口径变更</span>
            <span class="status status--live"><span class="status-mark" aria-hidden="true"></span>已生效</span>
          </div>
          <h3 class="news-item-title">替补贡献排名的最短出场时间门槛上调</h3>
          <p class="news-item-summary">出场时间低于新门槛的替补不再进入排名，避免单场偶发数据影响赛季口径的稳定性，也让排名更能反映持续贡献。</p>
          <details class="news-item-scope">
            <summary>影响范围与生效说明</summary>
            <p>作用于替补贡献排名字段；各赛区赛季汇总按同一门槛重算，门槛值写在字段说明中随条目一并公开。</p>
          </details>
        </article>

        <article class="news-item" id="v45">
          <div class="news-item-meta">
            <span class="news-item-ver">v4.5</span>
            <span class="news-tag">赛程编排规则</span>
            <span class="status status--live"><span class="status-mark" aria-hidden="true"></span>已生效</span>
          </div>
          <h3 class="news-item-title">跨赛区同日赛程的时区展示规则统一</h3>
          <p class="news-item-summary">同一天内跨赛区的场次统一以比赛日序号呈现，不再并列展示不同赛区的当地时间，减少同一场比赛出现两种日期读法。</p>
          <details class="news-item-scope">
            <summary>影响范围与生效说明</summary>
            <p>作用于全部赛程视图；赛区档案中的比赛日列表同步调整，赛季节点线的阶段标注沿用同一规则。</p>
          </details>
        </article>

        <article class="news-item">
          <div class="news-item-meta">
            <span class="news-item-ver">v4.5</span>
            <span class="news-tag">场馆信息更新</span>
            <span class="status status--live"><span class="status-mark" aria-hidden="true"></span>已生效</span>
          </div>
          <h3 class="news-item-title">馆所排序中补充启用比赛日数量权重</h3>
          <p class="news-item-summary">启用比赛日数量更多的场馆在同城列表中位置更靠前，权重一致时再按馆所编号稳定排列，使列表顺序在多次访问之间保持一致。</p>
          <details class="news-item-scope">
            <summary>影响范围与生效说明</summary>
            <p>作用于场馆按城市归类的列表，与同批次的排序调整互为补充，两者不冲突。</p>
          </details>
        </article>

        <article class="news-item">
          <div class="news-item-meta">
            <span class="news-item-ver">v4.5</span>
            <span class="news-tag">统计口径变更</span>
            <span class="status status--pending"><span class="status-mark" aria-hidden="true"></span>试运行</span>
          </div>
          <h3 class="news-item-title">首发轮换次数与换人次数的边界补充</h3>
          <p class="news-item-summary">明确换人操作中哪些计入首发轮换、哪些单独计为临场调整，边界写入字段说明，避免两支编号战队因判读差异得到不同数值。</p>
          <details class="news-item-scope">
            <summary>影响范围与生效说明</summary>
            <p>作用于首发轮换字段；试运行期间原口径仍可查询，确认后切换并在条目状态中更新。追踪平博首发轮换口径变化的读者请以本类条目为准。</p>
          </details>
        </article>

        <article class="news-item" id="v44">
          <div class="news-item-meta">
            <span class="news-item-ver">v4.4</span>
            <span class="news-tag">版本编号调整</span>
            <span class="status status--live"><span class="status-mark" aria-hidden="true"></span>已生效</span>
          </div>
          <h3 class="news-item-title">改动日志引入 v4.x 次级编号的说明</h3>
          <p class="news-item-summary">v4 系列内按次级编号递增记录改动，每个次级编号包含一组同类条目，阅读时先看编号再逐条比对，便于判断改动批次。</p>
          <details class="news-item-scope">
            <summary>影响范围与生效说明</summary>
            <p>作用于全部版本改动日志；分类入口与条目排序规则同步更新，早期条目保持不变。</p>
          </details>
        </article>

        <article class="news-item">
          <div class="news-item-meta">
            <span class="news-item-ver">v4.4</span>
            <span class="news-tag">赛程编排规则</span>
            <span class="status status--live"><span class="status-mark" aria-hidden="true"></span>已生效</span>
          </div>
          <h3 class="news-item-title">杯赛签表节点在赛程视图中的显示位置确定</h3>
          <p class="news-item-summary">签表节点固定在赛程视图中段展示，与常规比赛日列表分开排列，避免被当作普通场次读取。</p>
          <details class="news-item-scope">
            <summary>影响范围与生效说明</summary>
            <p>作用于赛季节点线的阶段划分与赛程视图；杯赛节奏说明同步更新。</p>
          </details>
        </article>

        <article class="news-item">
          <div class="news-item-meta">
            <span class="news-item-ver">v4.4</span>
            <span class="news-tag">统计口径变更</span>
            <span class="status status--live"><span class="status-mark" aria-hidden="true"></span>已生效</span>
          </div>
          <h3 class="news-item-title">越位次数统计的逐赛区完整度标注</h3>
          <p class="news-item-summary">每个赛区的越位次数统计字段标注完整度，尚在核对中的赛区在列表中单独显示，方便判断该赛区数据能否直接横向比较。</p>
          <details class="news-item-scope">
            <summary>影响范围与生效说明</summary>
            <p>作用于十二个赛区的统计字段，完整度沿用已生效与试运行两类状态，逐赛区在赛区档案中呈现。</p>
          </details>
        </article>

        <article class="news-item" id="v43">
          <div class="news-item-meta">
            <span class="news-item-ver">v4.3</span>
            <span class="news-tag">场馆信息更新</span>
            <span class="status status--void"><span class="status-mark" aria-hidden="true"></span>已归档</span>
          </div>
          <h3 class="news-item-title">城市归属与赛区归属冲突时的处理顺序</h3>
          <p class="news-item-summary">场馆同时归入城市与赛区两条线，冲突时以赛区归属为准，城市列表按赛区归属重排后再编入清单。</p>
          <details class="news-item-scope">
            <summary>影响范围与生效说明</summary>
            <p>作用于场馆按城市归类；后续排序调整已覆盖本条规则，故转为已归档，仅保留历史对照。</p>
          </details>
        </article>

        <article class="news-item">
          <div class="news-item-meta">
            <span class="news-item-ver">v4.3</span>
            <span class="news-tag">公告说明</span>
            <span class="status status--void"><span class="status-mark" aria-hidden="true"></span>已归档</span>
          </div>
          <h3 class="news-item-title">赛季汇总复核周期的口径说明</h3>
          <p class="news-item-summary">赛季结束后在 14 个比赛日内完成汇总复核，复核期间字段仍可读取，但会标注复核中状态，避免读者把过渡数值当成定稿。</p>
          <details class="news-item-scope">
            <summary>影响范围与生效说明</summary>
            <p>说明对象为赛季汇总流程；本条对应当前已归档赛季，随该赛季归档一并转为已归档。</p>
          </details>
        </article>

        <article class="news-item">
          <div class="news-item-meta">
            <span class="news-item-ver">v4.3</span>
            <span class="news-tag">统计口径变更</span>
            <span class="status status--live"><span class="status-mark" aria-hidden="true"></span>已生效</span>
          </div>
          <h3 class="news-item-title">替补贡献排名的并列名次呈现方式</h3>
          <p class="news-item-summary">指标数值相同时并列同一名次，排名序列在并列之后跳号，不再按编号强制拆分顺序，避免读者误读出高低差。</p>
          <details class="news-item-scope">
            <summary>影响范围与生效说明</summary>
            <p>作用于替补贡献排名；各赛区赛季汇总列表按同一规则展示，跳号情况在表格角标中说明。</p>
          </details>
        </article>

        <article class="news-item" id="v42">
          <div class="news-item-meta">
            <span class="news-item-ver">v4.2</span>
            <span class="news-tag">赛程编排规则</span>
            <span class="status status--live"><span class="status-mark" aria-hidden="true"></span>已生效</span>
          </div>
          <h3 class="news-item-title">比赛日序号在全站引用中的统一样式</h3>
          <p class="news-item-summary">比赛日序号统一使用等宽字形与固定位数，跨页面引用时不再出现位数不一致的情况，赛程与统计数据之间可直接对齐。</p>
          <details class="news-item-scope">
            <summary>影响范围与生效说明</summary>
            <p>作用于全部赛程与统计视图，与千分位分隔规则同时生效，历史条目中的序号按同一格式重排。</p>
          </details>
        </article>

        <article class="news-item" id="v41">
          <div class="news-item-meta">
            <span class="news-item-ver">v4.1</span>
            <span class="news-tag">统计口径变更</span>
            <span class="status status--live"><span class="status-mark" aria-hidden="true"></span>已生效</span>
          </div>
          <h3 class="news-item-title">首发轮换与赛季汇总字段的对接说明</h3>
          <p class="news-item-summary">首发轮换次数在赛季汇总中按赛区逐项相加，跨赛区合计只作为参考值，不作为比较依据，避免不同赛区之间直接横向排序。</p>
          <details class="news-item-scope">
            <summary>影响范围与生效说明</summary>
            <p>作用于首发轮换字段；286 支编号战队的赛季汇总同步应用该说明，跨赛区参考值在表头单独标注。</p>
          </details>
        </article>

        <article class="news-item">
          <div class="news-item-meta">
            <span class="news-item-ver">v4.1</span>
            <span class="news-tag">版本编号调整</span>
            <span class="status status--void"><span class="status-mark" aria-hidden="true"></span>已归档</span>
          </div>
          <h3 class="news-item-title">v1 至 v3 系列编号向 v4 迁移的对照说明</h3>
          <p class="news-item-summary">早期 v1 至 v3 系列的条目保留原编号，新增条目统一进入 v4 系列，不回溯改写既有编号，方便旧稿继续定位。</p>
          <details class="news-item-scope">
            <summary>影响范围与生效说明</summary>
            <p>作用于全部版本改动日志；本节保留原编号仅作历史追溯，与当前生效编号并行展示。</p>
          </details>
        </article>

      </div>
    </div>
  </section>

  <section class="news-section news-section--cats" data-section="categories" id="categories">
    <div class="container">

      <header class="news-sec-head">
        <span class="news-sec-num">02</span>
        <div class="news-sec-copy">
          <p class="news-sec-kicker">分类归档</p>
          <h2 class="news-sec-title">五类改动各自的收录边界</h2>
          <p class="news-sec-desc">每条改动只归入一类，出现争议时以改动的作用对象为准。下方数字为本页展示的条目数量；站点累计版本改动日志为 96 条。</p>
        </div>
      </header>

      <div class="news-cat-list">

        <article class="news-cat" id="cat-stats">
          <div class="news-cat-head">
            <h3 class="news-cat-title">统计口径变更</h3>
            <span class="news-cat-count num">7</span>
          </div>
          <p class="news-cat-note">字段的计算方式、门槛或标注方式发生变化时归入此类。首发轮换、越位次数统计、替补贡献排名等字段的口径调整都在这里登记。</p>
          <div class="news-cat-bar" aria-hidden="true"><span class="news-cat-bar-fill" style="width:100%"></span></div>
          <p class="news-cat-meta">本页条目 <span class="num">7</span> 条 ｜ 关联字段：越位次数统计、首发轮换、替补贡献排名</p>
          <figure class="media news-cat-media">
            <img src="{zhanqunpic:h:625w:1000}" width="1000" height="625" alt="桌面上的键盘与手写标注纸张俯拍，仅出现手部，文字不可辨" loading="lazy" decoding="async">
          </figure>
        </article>

        <article class="news-cat" id="cat-schedule">
          <div class="news-cat-head">
            <h3 class="news-cat-title">赛程编排规则</h3>
            <span class="news-cat-count num">4</span>
          </div>
          <p class="news-cat-note">比赛日如何排列、签表节点摆在哪里、跨赛区同日程如何读取，属于编排层面的调整都归入此类，不涉及具体赛果。</p>
          <div class="news-cat-bar" aria-hidden="true"><span class="news-cat-bar-fill" style="width:57%"></span></div>
          <p class="news-cat-meta">本页条目 <span class="num">4</span> 条 ｜ 关联视图：赛程视图、赛季节点线</p>
          <figure class="media news-cat-media">
            <img src="{zhanqunpic:h:625w:1000}" width="1000" height="625" alt="场馆侧屏显示排期网格的局部特写，虚化处理，无战队名与选手名" loading="lazy" decoding="async">
          </figure>
        </article>

        <article class="news-cat" id="cat-venue">
          <div class="news-cat-head">
            <h3 class="news-cat-title">场馆信息更新</h3>
            <span class="news-cat-count num">3</span>
          </div>
          <p class="news-cat-note">场馆的赛区归属、城市归类与排序规则发生变化时归入此类。同城多馆、启用比赛日数量、馆所编号都是排序依据。</p>
          <div class="news-cat-bar" aria-hidden="true"><span class="news-cat-bar-fill" style="width:43%"></span></div>
          <p class="news-cat-meta">本页条目 <span class="num">3</span> 条 ｜ 关联字段：城市归属、赛区归属、启用比赛日数量</p>
          <figure class="media news-cat-media">
            <img src="{zhanqunpic:h:800w:1200}" width="1200" height="800" alt="场馆看台与通道空镜，冷灰色调，无人物与机构标识" loading="lazy" decoding="async">
          </figure>
        </article>

        <article class="news-cat" id="cat-notice">
          <div class="news-cat-head">
            <h3 class="news-cat-title">公告说明</h3>
            <span class="news-cat-count num">2</span>
          </div>
          <p class="news-cat-note">不改变字段算法、只说明处理节奏与状态的条目归入此类，例如字段冻结窗口与赛季汇总复核周期。公告不设定新的统计规则。</p>
          <div class="news-cat-bar" aria-hidden="true"><span class="news-cat-bar-fill" style="width:29%"></span></div>
          <p class="news-cat-meta">本页条目 <span class="num">2</span> 条 ｜ 关联流程：赛季汇总、字段冻结</p>
        </article>

        <article class="news-cat" id="cat-version">
          <div class="news-cat-head">
            <h3 class="news-cat-title">版本编号调整</h3>
            <span class="news-cat-count num">2</span>
          </div>
          <p class="news-cat-note">编号体系本身的变动归入此类，例如 v4 次级编号的引入与早期 v1 至 v3 条目的处理方式。此类条目不改变统计字段的算法。</p>
          <div class="news-cat-bar" aria-hidden="true"><span class="news-cat-bar-fill" style="width:29%"></span></div>
          <p class="news-cat-meta">本页条目 <span class="num">2</span> 条 ｜ 关联对象：日志编号、条目排序规则</p>
        </article>

      </div>
    </div>
  </section>

  <section class="news-section news-section--rules slab" data-section="rules" id="rules">
    <div class="container">

      <header class="news-sec-head news-sec-head--slab">
        <span class="news-sec-num news-sec-num--slab">03</span>
        <div class="news-sec-copy">
          <p class="news-sec-kicker">编号与节奏</p>
          <h2 class="news-sec-title">版本号怎么读，状态怎么看</h2>
          <p class="news-sec-desc">版本号解决的是「改动发生在哪一批」，状态解决的是「这条规则现在还算不算数」。两者一起看，才能判断引用是否成立。</p>
        </div>
      </header>

      <div class="news-rules-grid">

        <div class="news-rule-block">
          <h3 class="news-rule-title">v1 至 v4 系列编号的含义</h3>
          <p class="news-rule-text">日志从 v1 系列起步，逐代推进到当前的 v4.7。系列号表示改动所处的阶段，次级编号表示阶段内的一批同类改动。写入编号之后，条目内容不再改写，只在状态上做标注。</p>
          <p class="news-rule-text">索引旧稿时先找到引用语句对应的版本号，再对照同编号条目，比逐条翻查更快。</p>
        </div>

        <div class="news-rule-block">
          <h3 class="news-rule-title">每比赛日更新与赛季复核的关系</h3>
          <p class="news-rule-text">赛程在每个比赛日结束后 T+2 小时内更新，改动条目随赛程同步写入。赛季结束后的 14 个比赛日内完成一次汇总复核，把赛季内累积的改动一并落定。</p>
          <p class="news-rule-text">比赛日更新与赛季复核是两套节奏：前者保证当天的记录可用，后者保证赛季口径稳定。两者冲突时以赛季复核的结果为准。</p>
        </div>

        <div class="news-rule-block">
          <h3 class="news-rule-title">已生效、试运行与已归档的差别</h3>
          <p class="news-rule-text">已生效表示规则当前适用，可以按条目内容直接引用。试运行表示规则已写入但尚未切换，原口径同时保留，引用时需写明正在使用的版本。已归档表示该条目已被后续改动覆盖，仅作追溯，不再作为当前口径。</p>
          <p class="news-rule-text">三类状态在条目上以色块形状加文字同时表达，不依赖颜色单独判断。</p>
        </div>

        <div class="news-rule-block">
          <h3 class="news-rule-title">改动与字段完整度的对应</h3>
          <p class="news-rule-text">统计口径变更类条目会同时影响字段完整度标注。某个赛区的字段仍处于核对中时，会在赛区档案中单独标出，跨赛区比较前先确认这一点。</p>
          <p class="news-rule-text">赛季汇总口径与站点整体的数据校订步骤相互衔接，具体环节可查阅 <a href="/workflow/">数据校订流程</a>；赛季阶段划分见 <a href="/events/">赛季节点线</a>。</p>
        </div>

      </div>

      <div class="news-rules-foot">
        <p>想按赛区逐条比对字段完整度与赛季汇总数值，可回到 <a href="/practice/">赛区档案</a>；站点整体的定位与内容边界见 <a href="/">赛场总览</a>。</p>
      </div>

    </div>
  </section>

  <section class="news-section" data-section="confirm" id="confirm">
    <div class="container">

      <header class="news-sec-head">
        <span class="news-sec-num">04</span>
        <div class="news-sec-copy">
          <p class="news-sec-kicker">确认口径</p>
          <h2 class="news-sec-title">引用之前先确认版本号</h2>
          <p class="news-sec-desc">同一字段在不同版本下可能得到不同数值。引用前把版本号写进出处，能省掉大部分来回核对。</p>
        </div>
      </header>

      <div class="news-confirm-grid">

        <div class="news-confirm-card">
          <h3 class="news-confirm-title">三步确认所引用的口径</h3>
          <ol class="news-confirm-list">
            <li><strong>记下版本号。</strong>从条目流里找到对应的 v 编号，确认条目状态是已生效而非试运行或已归档。</li>
            <li><strong>核对状态。</strong>试运行条目的原口径同时存在，引用时写清使用的是哪一个。</li>
            <li><strong>写进出处。</strong>在稿件或表格中标注版本号，后续口径调整时可以直接对照定位。</li>
          </ol>
        </div>

        <div class="news-confirm-card news-confirm-card--link">
          <h3 class="news-confirm-title">公告说明</h3>
          <p class="news-confirm-text">更新节奏、字段冻结窗口、纠错提交要求与引用规范都集中在公告说明里，随版本调整同步维护。</p>
          <p class="news-confirm-cta"><a class="btn btn--primary" href="/newsroom/notice/">查看公告说明</a></p>
        </div>

        <div class="news-confirm-card news-confirm-card--link">
          <h3 class="news-confirm-title">发现记录不一致</h3>
          <p class="news-confirm-text">赛程与统计数据与实际情况不符时，附上截图发送至客服邮箱。截图里请包含页面上的版本号，便于定位到具体条目。</p>
          <p class="news-confirm-cta"><a class="btn btn--ghost" href="/contact/">提交数据纠错</a></p>
        </div>

      </div>

    </div>
  </section>

</main>

.page-news .news-crumb {
  border-bottom: 1px solid var(--color-line);
}
.page-news .news-crumb .container {
  padding-top: var(--space-2);
  padding-bottom: var(--space-2);
}
.page-news .news-crumb .breadcrumb-list {
  display: flex;
  flex-wrap: wrap;
  gap: var(--space-1);
  margin: 0;
  padding: 0;
  list-style: none;
  font-size: var(--text-sm);
  color: var(--color-ink-muted);
}
.page-news .news-crumb .breadcrumb-item + .breadcrumb-item::before {
  content: "/";
  margin-right: var(--space-1);
  color: var(--color-ink-muted);
}
.page-news .news-crumb a {
  color: var(--color-ink-soft);
  text-decoration: none;
  border-bottom: 2px solid transparent;
}
.page-news .news-crumb a:hover,
.page-news .news-crumb a:focus-visible {
  border-bottom-color: var(--color-primary);
  color: var(--color-ink);
}

.page-news .news-hero {
  background: var(--color-contrast-surface);
  color: var(--color-contrast-ink);
  padding: var(--space-8) 0 var(--space-6);
  border-bottom: var(--border-thin) solid var(--color-primary);
}
.page-news .news-hero-grid {
  display: grid;
  grid-template-columns: 1fr;
  gap: var(--space-6);
  align-items: center;
}
.page-news .news-hero-kicker {
  margin: 0 0 var(--space-2);
  font-family: var(--font-mono);
  font-size: var(--text-sm);
  letter-spacing: 0.06em;
  color: var(--color-contrast-accent);
}
.page-news .news-hero-title {
  margin: 0 0 var(--space-3);
  font-family: var(--font-heading);
  font-size: var(--text-display);
  font-weight: var(--weight-heading);
  line-height: 1.05;
  letter-spacing: var(--tracking-heading);
  color: var(--color-contrast-ink);
}
.page-news .news-hero-lede {
  margin: 0;
  max-width: var(--measure);
  font-size: var(--text-lg);
  line-height: 1.6;
  color: var(--color-contrast-ink);
}

.page-news .news-rail {
  display: grid;
  grid-template-columns: repeat(7, minmax(0, 1fr));
  margin-top: var(--space-6);
  border-top: var(--border-thin) solid var(--color-contrast-line);
  border-bottom: var(--border-thin) solid var(--color-contrast-line);
}
.page-news .rail-tick {
  display: block;
  padding: var(--space-2) 2px;
  font-family: var(--font-mono);
  font-size: var(--text-xs);
  font-variant-numeric: tabular-nums;
  text-align: center;
  text-decoration: none;
  color: var(--color-contrast-ink);
  border-left: 1px solid var(--color-contrast-line);
  transition: background-color 140ms linear, color 140ms linear;
}
.page-news .rail-tick:last-child {
  border-right: 1px solid var(--color-contrast-line);
}
.page-news .rail-tick:hover {
  background: var(--color-contrast-line);
}
.page-news .rail-tick--current {
  background: var(--color-contrast-accent);
  color: var(--color-accent-ink);
  font-weight: 700;
}
.page-news .rail-tick:focus-visible {
  outline: var(--border-thick) solid var(--color-focus);
  outline-offset: 2px;
}

.page-news .news-hero-stats {
  display: grid;
  grid-template-columns: repeat(3, minmax(0, 1fr));
  gap: var(--space-3);
  margin: var(--space-6) 0 0;
  padding-top: var(--space-4);
  border-top: 1px solid var(--color-contrast-line);
}
.page-news .news-stat {
  margin: 0;
}
.page-news .news-stat dt {
  margin: 0;
  font-size: var(--text-xs);
  letter-spacing: 0.04em;
  color: var(--color-contrast-ink);
  opacity: 0.86;
}
.page-news .news-stat-num {
  margin: var(--space-1) 0 0;
  font-family: var(--font-mono);
  font-size: var(--text-figure);
  font-weight: 700;
  font-variant-numeric: tabular-nums;
  line-height: 1;
  color: var(--color-contrast-accent);
}

.page-news .news-hero-media {
  margin: 0;
  border-left: var(--border-thick) solid var(--color-contrast-accent);
}
.page-news .news-hero-media img {
  display: block;
  width: 100%;
  height: auto;
  object-fit: cover;
}

.page-news .news-section {
  padding: var(--space-8) 0;
}
.page-news .news-section--cats {
  background: var(--color-surface-alt);
  border-top: var(--border-thin) solid var(--color-line);
  border-bottom: var(--border-thin) solid var(--color-line);
}
.page-news .news-section--rules {
  background: var(--color-contrast-surface);
  color: var(--color-contrast-ink);
  border-top: var(--border-thin) solid var(--color-primary);
  border-bottom: var(--border-thin) solid var(--color-primary);
}

.page-news .news-sec-head {
  display: grid;
  grid-template-columns: 1fr;
  gap: var(--space-2);
  padding-top: var(--space-4);
  border-top: var(--border-thin) solid var(--color-ink);
  margin-bottom: var(--space-6);
}
.page-news .news-sec-head--slab {
  border-top-color: var(--color-contrast-accent);
}
.page-news .news-sec-num {
  display: block;
  font-family: var(--font-mono);
  font-size: var(--text-4xl);
  font-weight: 700;
  line-height: 0.9;
  font-variant-numeric: tabular-nums;
  color: var(--color-primary);
}
.page-news .news-sec-num--slab {
  color: var(--color-contrast-accent);
}
.page-news .news-sec-kicker {
  margin: 0 0 var(--space-1);
  font-family: var(--font-mono);
  font-size: var(--text-sm);
  letter-spacing: 0.06em;
  color: var(--color-ink-muted);
}
.page-news .news-sec-head--slab .news-sec-kicker {
  color: var(--color-contrast-accent);
}
.page-news .news-sec-title {
  margin: 0 0 var(--space-2);
  font-family: var(--font-heading);
  font-size: var(--text-2xl);
  font-weight: var(--weight-heading);
  line-height: var(--leading-heading);
  color: var(--color-ink);
}
.page-news .news-sec-head--slab .news-sec-title {
  color: var(--color-contrast-ink);
}
.page-news .news-sec-desc {
  margin: 0;
  max-width: var(--measure);
  font-size: var(--text-base);
  line-height: var(--leading-body);
  color: var(--color-ink-soft);
}
.page-news .news-sec-head--slab .news-sec-desc {
  color: var(--color-contrast-ink);
  opacity: 0.9;
}

.page-news .news-filter {
  display: flex;
  flex-wrap: wrap;
  gap: var(--space-1);
  padding: var(--space-2) 0 var(--space-4);
  border-bottom: 1px solid var(--color-line);
  margin-bottom: var(--space-4);
}
.page-news .news-filter .chip {
  display: inline-block;
  padding: var(--space-1) var(--space-2);
  font-size: var(--text-sm);
  font-weight: 600;
  text-decoration: none;
  color: var(--color-ink);
  background: var(--color-surface);
  border: var(--border-thin) solid var(--color-ink);
  border-radius: var(--radius-sm);
  transition: background-color 140ms linear, border-color 140ms linear;
}
.page-news .news-filter .chip:hover {
  background: var(--color-primary-soft);
  border-color: var(--color-primary);
}
.page-news .news-filter .chip:focus-visible {
  outline: var(--border-thick) solid var(--color-focus);
  outline-offset: 2px;
}

.page-news .news-stream {
  display: grid;
  gap: 0;
  border-top: var(--border-thin) solid var(--color-ink);
}
.page-news .news-item {
  padding: var(--space-4) var(--space-3);
  border-bottom: 1px solid var(--color-line);
  border-left: var(--border-thick) solid transparent;
  transition: border-left-color 140ms linear, background-color 140ms linear;
}
.page-news .news-item:hover {
  border-left-color: var(--color-primary);
  background: var(--color-surface-alt);
}
.page-news .news-item:target {
  background: var(--color-highlight);
  border-left-color: var(--color-primary);
}
.page-news .news-item-meta {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: var(--space-2);
  margin-bottom: var(--space-2);
}
.page-news .news-item-ver {
  font-family: var(--font-mono);
  font-size: var(--text-base);
  font-weight: 700;
  font-variant-numeric: tabular-nums;
  color: var(--color-primary);
}
.page-news .news-tag {
  padding: 2px var(--space-1);
  font-size: var(--text-xs);
  font-weight: 600;
  color: var(--color-ink-soft);
  border: var(--border-thin) solid var(--color-line);
  border-radius: var(--radius-sm);
}
.page-news .news-item-title {
  margin: 0 0 var(--space-2);
  max-width: var(--measure);
  font-family: var(--font-heading);
  font-size: var(--text-xl);
  font-weight: var(--weight-heading);
  line-height: var(--leading-heading);
  color: var(--color-ink);
}
.page-news .news-item-summary {
  margin: 0;
  max-width: var(--measure);
  font-size: var(--text-base);
  line-height: var(--leading-body);
  color: var(--color-ink-soft);
}

.page-news .status {
  display: inline-flex;
  align-items: center;
  gap: 6px;
  padding: 2px var(--space-1);
  font-size: var(--text-xs);
  font-weight: 600;
  border: var(--border-thin) solid currentColor;
  border-radius: var(--radius-sm);
}
.page-news .status-mark {
  display: inline-block;
  width: 9px;
  height: 9px;
  flex: none;
}
.page-news .status--live {
  color: var(--color-primary);
}
.page-news .status--live .status-mark {
  background: currentColor;
}
.page-news .status--pending {
  color: var(--color-ink-soft);
}
.page-news .status--pending .status-mark {
  background: transparent;
  border: 2px solid currentColor;
}
.page-news .status--void {
  color: var(--color-ink-muted);
  border-style: dashed;
}
.page-news .status--void .status-mark {
  background: linear-gradient(45deg, transparent 42%, currentColor 42%, currentColor 58%, transparent 58%);
}

.page-news .news-item-scope {
  margin-top: var(--space-2);
  max-width: var(--measure);
  border-top: 1px dashed var(--color-line);
}
.page-news .news-item-scope summary {
  padding: var(--space-1) 0;
  font-size: var(--text-sm);
  font-weight: 600;
  color: var(--color-ink-soft);
  cursor: pointer;
}
.page-news .news-item-scope summary:hover {
  color: var(--color-primary);
}
.page-news .news-item-scope summary:focus-visible {
  outline: var(--border-thick) solid var(--color-focus);
  outline-offset: 2px;
}
.page-news .news-item-scope p {
  margin: 0 0 var(--space-2);
  font-size: var(--text-sm);
  line-height: 1.72;
  color: var(--color-ink-soft);
}

.page-news .news-cat-list {
  display: grid;
  grid-template-columns: 1fr;
  gap: var(--space-4);
}
.page-news .news-cat {
  padding: var(--space-3) 0 var(--space-4);
  border-top: var(--border-thin) solid var(--color-ink);
}
.page-news .news-cat-head {
  display: flex;
  align-items: baseline;
  justify-content: space-between;
  gap: var(--space-2);
  margin-bottom: var(--space-2);
}
.page-news .news-cat-title {
  margin: 0;
  font-family: var(--font-heading);
  font-size: var(--text-lg);
  font-weight: var(--weight-heading);
  color: var(--color-ink);
}
.page-news .news-cat-count {
  font-family: var(--font-mono);
  font-size: var(--text-2xl);
  font-weight: 700;
  font-variant-numeric: tabular-nums;
  line-height: 1;
  color: var(--color-accent);
}
.page-news .news-cat-note {
  margin: 0 0 var(--space-2);
  max-width: var(--measure);
  font-size: var(--text-base);
  line-height: 1.72;
  color: var(--color-ink-soft);
}
.page-news .news-cat-bar {
  height: 10px;
  background: var(--color-surface-deep);
  border: 1px solid var(--color-line);
  margin-bottom: var(--space-2);
}
.page-news .news-cat-bar-fill {
  display: block;
  height: 100%;
  background: var(--color-primary);
  border-right: var(--border-thin) solid var(--color-accent);
}
.page-news .news-cat-meta {
  margin: 0 0 var(--space-3);
  font-size: var(--text-sm);
  color: var(--color-ink-muted);
}
.page-news .news-cat-media {
  margin: 0;
  border-left: var(--border-thick) solid var(--color-primary);
}
.page-news .news-cat-media img {
  display: block;
  width: 100%;
  height: auto;
  object-fit: cover;
}

.page-news .news-rules-grid {
  display: grid;
  grid-template-columns: 1fr;
  gap: var(--space-4);
}
.page-news .news-rule-block {
  padding-top: var(--space-3);
  border-top: var(--border-thin) solid var(--color-contrast-line);
}
.page-news .news-rule-title {
  margin: 0 0 var(--space-2);
  font-family: var(--font-heading);
  font-size: var(--text-lg);
  font-weight: var(--weight-heading);
  line-height: var(--leading-heading);
  color: var(--color-contrast-ink);
}
.page-news .news-rule-text {
  margin: 0 0 var(--space-2);
  max-width: var(--measure);
  font-size: var(--text-base);
  line-height: var(--leading-body);
  color: var(--color-contrast-ink);
  opacity: 0.92;
}
.page-news .news-rule-text a {
  color: var(--color-contrast-accent);
  text-decoration: underline;
  text-underline-offset: 3px;
}
.page-news .news-rule-text a:hover {
  color: var(--color-contrast-ink);
}
.page-news .news-rule-text a:focus-visible {
  outline: var(--border-thick) solid var(--color-focus);
  outline-offset: 2px;
}
.page-news .news-rules-foot {
  margin-top: var(--space-6);
  padding-top: var(--space-3);
  border-top: 1px solid var(--color-contrast-line);
}
.page-news .news-rules-foot p {
  margin: 0;
  max-width: var(--measure);
  font-size: var(--text-base);
  line-height: var(--leading-body);
  color: var(--color-contrast-ink);
  opacity: 0.92;
}
.page-news .news-rules-foot a {
  color: var(--color-contrast-accent);
  text-decoration: underline;
  text-underline-offset: 3px;
}
.page-news .news-rules-foot a:hover {
  color: var(--color-contrast-ink);
}
.page-news .news-rules-foot a:focus-visible {
  outline: var(--border-thick) solid var(--color-focus);
  outline-offset: 2px;
}

.page-news .news-confirm-grid {
  display: grid;
  grid-template-columns: 1fr;
  gap: var(--space-4);
}
.page-news .news-confirm-card {
  padding: var(--space-3);
  border: var(--border-thin) solid var(--color-ink);
  border-radius: var(--radius-sm);
  background: var(--color-surface);
}
.page-news .news-confirm-card--link {
  border-color: var(--color-primary);
  background: var(--color-primary-soft);
}
.page-news .news-confirm-title {
  margin: 0 0 var(--space-2);
  font-family: var(--font-heading);
  font-size: var(--text-lg);
  font-weight: var(--weight-heading);
  color: var(--color-ink);
}
.page-news .news-confirm-list {
  margin: 0;
  padding-left: var(--space-4);
  font-size: var(--text-base);
  line-height: var(--leading-body);
  color: var(--color-ink-soft);
}
.page-news .news-confirm-list li + li {
  margin-top: var(--space-2);
}
.page-news .news-confirm-list strong {
  color: var(--color-ink);
  font-weight: 700;
}
.page-news .news-confirm-text {
  margin: 0 0 var(--space-3);
  font-size: var(--text-base);
  line-height: var(--leading-body);
  color: var(--color-ink-soft);
}
.page-news .news-confirm-cta {
  margin: 0;
}
.page-news .news-confirm-cta .btn {
  display: inline-block;
  text-decoration: none;
}
.page-news .news-confirm-cta .btn:focus-visible {
  outline: var(--border-thick) solid var(--color-focus);
  outline-offset: 2px;
}

.page-news img {
  max-width: 100%;
  height: auto;
}
.page-news .news-stat-num {
  word-break: keep-all;
}

@media (min-width: 720px) {
  .page-news .news-sec-head {
    grid-template-columns: calc(var(--space-8) + var(--space-4)) 1fr;
    align-items: start;
    gap: var(--space-4);
  }
  .page-news .news-cat-list {
    grid-template-columns: repeat(2, minmax(0, 1fr));
    gap: var(--space-6) var(--space-4);
  }
  .page-news .news-rules-grid {
    grid-template-columns: repeat(2, minmax(0, 1fr));
    gap: var(--space-6) var(--space-4);
  }
  .page-news .news-confirm-grid {
    grid-template-columns: repeat(3, minmax(0, 1fr));
  }
  .page-news .rail-tick {
    font-size: var(--text-sm);
    padding: var(--space-2) var(--space-1);
  }
}

@media (min-width: 960px) {
  .page-news .news-hero {
    padding: var(--section-y-lg) 0 var(--space-8);
  }
  .page-news .news-hero-grid {
    grid-template-columns: 7fr 5fr;
    gap: var(--space-8);
  }
  .page-news .news-section {
    padding: var(--section-y) 0;
  }
  .page-news .news-section--cats {
    padding-bottom: var(--section-y-lg);
  }
  .page-news .news-item {
    padding: var(--space-4) var(--space-4) var(--space-4) var(--space-4);
  }
  .page-news .news-cat {
    padding-top: var(--space-4);
  }
}

@media (prefers-reduced-motion: reduce) {
  .page-news .news-item,
  .page-news .rail-tick,
  .page-news .news-filter .chip {
    transition: none;
  }
}
