/* ROUTE ACQUISITION · 子页捕获动效（motionRegistry: route-acquire）
   所有效果都是画在已可见内容之上的一次性覆盖层：标题扫描、封面曝光、
   目录跟踪、版本轨道描迹，以及首页分区标题与留言接收。正文从不等待动效才显形；
   无 JS、减少动态、省流量或关闭站点特效时，页面保持完整的静态版本。 */

:root {
  --rm-beam: var(--signal, #d6ff73);
  --rm-cold: var(--platform-cyan, var(--ice, #8fd8ff));
  --rm-veil: color-mix(in srgb, var(--bg, #05060a) 62%, transparent);
  --rm-scanlines: repeating-linear-gradient(0deg, rgba(238, 241, 230, .05) 0 1px, transparent 1px 3px);
}
html[data-theme="light"] {
  --rm-veil: color-mix(in srgb, var(--bg, #f3f1ea) 58%, transparent);
  --rm-scanlines: repeating-linear-gradient(0deg, rgba(29, 35, 42, .06) 0 1px, transparent 1px 3px);
}

/* ---- 1. 标题信号捕获：一道扫描束扫过已显示的标题，随后锁定刻线 ---- */
.rm-title-acquire { position: relative; }
.rm-title-acquire::after {
  content: "";
  position: absolute;
  inset: -.08em 0;
  pointer-events: none;
  background: linear-gradient(90deg,
    transparent 0 42%,
    color-mix(in srgb, var(--rm-beam) 16%, transparent) 47%,
    color-mix(in srgb, var(--rm-beam) 70%, transparent) 49.6%,
    var(--rm-beam) 50%,
    transparent 50.4%,
    transparent 100%) no-repeat;
  background-size: 260% 100%;
  mix-blend-mode: screen;
  animation: rm-beam-sweep .9s var(--ease-swift, cubic-bezier(.65, 0, .35, 1)) both;
}
html[data-theme="light"] .rm-title-acquire::after { mix-blend-mode: multiply; }
.rm-title-acquire::before {
  content: "";
  position: absolute;
  left: 0;
  bottom: -.14em;
  width: min(100%, 4.2em);
  height: 1px;
  pointer-events: none;
  background: var(--rm-beam);
  box-shadow: 0 0 12px color-mix(in srgb, var(--rm-beam) 55%, transparent);
  transform-origin: left center;
  animation: rm-lock-line 1.25s var(--ease-out, cubic-bezier(.16, 1, .3, 1)) .5s both;
}

/* ---- 2. 档案封面曝光：半透明显影层自上而下揭开，边缘带一条分类色扫描线 ---- */
.rm-exposure { position: relative; }
.rm-exposure::before,
.rm-exposure::after {
  content: "";
  position: absolute;
  z-index: 2;
  inset: 0;
  pointer-events: none;
}
.rm-exposure::before {
  background: var(--rm-scanlines), var(--rm-veil);
  animation: rm-veil-lift var(--rm-exposure-ms, 820ms) var(--ease-swift, cubic-bezier(.65, 0, .35, 1)) var(--rm-delay, 0ms) both;
}
.rm-exposure::after {
  bottom: auto;
  height: 1px;
  background: var(--post-accent, var(--rm-cold));
  box-shadow: 0 0 10px var(--post-accent, var(--rm-cold));
  animation: rm-scan-edge var(--rm-exposure-ms, 820ms) var(--ease-swift, cubic-bezier(.65, 0, .35, 1)) var(--rm-delay, 0ms) both;
}
.archive-card.rm-captured::before {
  animation: rm-tick-extend .7s var(--ease-out, cubic-bezier(.16, 1, .3, 1)) var(--rm-delay, 0ms) both;
}

/* ---- 3. 文章目录跟踪：沿目录竖线滑动的定位标记，当前章节带 aria-current ---- */
.article-page-rail a[aria-current="location"] { color: var(--ink); }
.article-page-rail a[aria-current="location"] span { color: var(--rm-beam); }
.rm-rail-marker {
  position: absolute;
  top: 0;
  left: 0;
  width: 2px;
  height: 0;
  pointer-events: none;
  background: var(--rm-cold);
  box-shadow: 0 0 10px color-mix(in srgb, var(--rm-cold) 60%, transparent);
  transform: translateY(var(--rm-marker-y, 0px));
}
.rm-rail-marker[hidden] { display: none; }
.rm-motion .rm-rail-marker { transition: transform .45s var(--ease-out, cubic-bezier(.16, 1, .3, 1)), height .45s var(--ease-out, cubic-bezier(.16, 1, .3, 1)); }
.rm-motion .article-page-rail a.rm-just-locked span { animation: rm-digit-lock .5s steps(3, end) 1; }

/* ---- 4. 版本轨道描迹：信号沿更新记录竖轨下行，经过的节点被锁定 ---- */
.changelog-timeline { --rm-rail-x: 180px; }
.changelog-timeline.rm-trace::after {
  content: "";
  position: absolute;
  top: 48px;
  bottom: 0;
  left: var(--rm-rail-x);
  width: 1px;
  pointer-events: none;
  background: linear-gradient(180deg, color-mix(in srgb, var(--rm-beam) 20%, transparent), var(--rm-beam));
  box-shadow: 0 0 8px color-mix(in srgb, var(--rm-beam) 45%, transparent);
  transform-origin: top center;
  transform: scaleY(var(--rm-trace, 0));
}
.rm-trace .changelog-entry.rm-traced:not(.is-current)::before {
  border-color: var(--rm-beam);
  transition: border-color .3s, background-color .3s;
}
.rm-trace .changelog-entry.is-same-day.rm-traced::before { background: var(--rm-beam); }
.rm-trace .changelog-entry.rm-ping::after {
  content: "";
  position: absolute;
  top: var(--changelog-node-y, 37px);
  left: calc(var(--rm-rail-x) - 4px);
  width: 9px;
  height: 9px;
  border-radius: 50%;
  pointer-events: none;
  border: 1px solid var(--rm-beam);
  animation: rm-node-ping .8s var(--ease-out, cubic-bezier(.16, 1, .3, 1)) both;
}
.rm-trace .changelog-entry.rm-ping header strong { animation: rm-digit-lock .45s steps(3, end) 1; }

/* ---- 5. 档案读数：已归档数量从零计到真实值（仅首轮渲染） ---- */
.rm-counting { font-variant-numeric: tabular-nums; }

/* ---- 6. 首页留言接收：信号条沿留言左缘下行，日期短暂锁定 ---- */
.message-item.rm-received::before {
  content: "";
  position: absolute;
  top: 22px;
  bottom: 22px;
  left: 0;
  width: 2px;
  pointer-events: none;
  background: var(--rm-cold);
  box-shadow: 0 0 8px color-mix(in srgb, var(--rm-cold) 55%, transparent);
  transform-origin: top center;
  animation: rm-receipt 1.1s var(--ease-out, cubic-bezier(.16, 1, .3, 1)) var(--rm-delay, 0ms) both;
}
.message-item.rm-received .message-head time {
  animation: rm-digit-lock .5s steps(3, end) calc(var(--rm-delay, 0ms) + 250ms) 1;
}

@keyframes rm-beam-sweep {
  from { background-position: 100% 0; opacity: 1; }
  88% { opacity: 1; }
  to { background-position: 0% 0; opacity: 0; }
}
@keyframes rm-lock-line {
  0% { transform: scaleX(0); opacity: 1; }
  45% { transform: scaleX(1); opacity: 1; }
  100% { transform: scaleX(1); opacity: 0; }
}
@keyframes rm-veil-lift {
  from { clip-path: inset(0 0 0 0); }
  to { clip-path: inset(100% 0 0 0); }
}
@keyframes rm-scan-edge {
  0% { transform: translateY(0); opacity: 0; }
  8% { opacity: 1; }
  88% { opacity: 1; }
  100% { transform: translateY(var(--rm-exposure-h, 220px)); opacity: 0; }
}
@keyframes rm-tick-extend {
  from { width: 0; }
  to { width: 56px; }
}
@keyframes rm-receipt {
  0% { transform: scaleY(0); opacity: 1; }
  45% { transform: scaleY(1); opacity: 1; }
  100% { transform: scaleY(1); opacity: 0; }
}
@keyframes rm-node-ping {
  from { transform: scale(1); opacity: .95; }
  to { transform: scale(3.2); opacity: 0; }
}
@keyframes rm-digit-lock {
  0% { color: var(--rm-cold); }
  66% { color: var(--rm-beam); }
  100% { color: inherit; }
}

@media (max-width: 720px) {
  .changelog-timeline { --rm-rail-x: 104px; }
}
@media (max-width: 520px) {
  .changelog-timeline { --rm-rail-x: 7px; }
}

@media (prefers-reduced-motion: reduce) {
  .rm-title-acquire::before,
  .rm-title-acquire::after,
  .rm-exposure::before,
  .rm-exposure::after,
  .changelog-timeline.rm-trace::after,
  .rm-trace .changelog-entry.rm-ping::after,
  .message-item.rm-received::before { display: none; }
  .archive-card.rm-captured::before,
  .article-page-rail a span,
  .rm-trace .changelog-entry header strong,
  .message-item.rm-received .message-head time { animation: none !important; }
  .rm-rail-marker { transition: none !important; }
}

@media print {
  .rm-title-acquire::before,
  .rm-title-acquire::after,
  .rm-exposure::before,
  .rm-exposure::after,
  .rm-rail-marker,
  .changelog-timeline.rm-trace::after,
  .changelog-entry.rm-ping::after,
  .message-item.rm-received::before { display: none !important; }
}
