/* ============================================================
   潜龙八字 · 扫描亮光机制层（风格无关 · 全皮肤共用 · 261004 抽自 nova）
   ============================================================
   来源：`skins/nova.patch.css` 原有的「当前段扫描线」
         （`.tl-item.now::before` ＋ 局部 `@keyframes nova-scan`）。
   抽取理由：同一件事（「今」位扫光）此前**只存在于 nova 一套**，其余 8 套要用
     得整段抄 —— 即「同一事实两个写入方」（硬教训 23）；且时长/宽度/光色本应
     「按皮肤调性走」，旧写法把它们**硬编码在规则体里**。
   抽取取法（owner 261004 选「壳共用、参数分调」）：
     · **壳（本件）** ＝ keyframes ＋ 几何 ＋ 参数**默认值**，⛔ 不含任何皮肤限定前缀；
     · **调性（各套令牌层）** ＝ 在 `css/light.css`／`css/dark.css`／`css/skins/<id>.css`
       里覆盖 `--fx-scan-*` 三个变量。
   ⇒ 本件属「**机制层**」（与 `readability.css`／`xy3.css` 同级：风格无关、全皮肤共用），
     ⛔ 故**不**写进 `css/skins/*.patch.css`（patch 层是逐套的，且带「选择器必须限定
     本皮肤」的契约门禁 `test_skin_patch_contract.py` 断言 A）。

   【变量】--fx-scan-dur   扫一趟的时长（默认 3.4s ＝ nova 原值）
           --fx-scan-w     光带宽（默认 42% ＝ nova 原值）
           --fx-scan-glow  光色（默认取该皮肤既有的 `--brand-glow`
                           ⇒ 每套皮肤**天然**拿到自己的调性色，无需逐套重写）
   【纪律】
     · 位移走 `transform`（⛔ 不改 left/width）⇒ 不触发布局重排。
     · ⛔ 不用 `!important`；⛔ 不写版式属性（`grid-template-*`）。
     · 作用域＝`.tl-item.now` —— `.tl-item` 全仓仅运岁时间轴（小运/大运/流年/流月）产出，
       故本件不会外溢到报告页或其它卡片。
     · 尊重「减少动效」：app.css 的 `@media(prefers-reduced-motion)` 兜底把
       `animation-duration` 压到 .001ms ⇒ 动画**瞬停在终点**（translateX 240%）＝光带移出
       可视区 ⇒ 反而**失去**「今」位提示。故本件内另给一条定格规则，令其
       **停在起点并留一道静态光**（nova 原实现即如此，此处保留同一语义）。
   ============================================================ */
:root{
  --fx-scan-dur: 3.4s;
  --fx-scan-w: 42%;
  --fx-scan-glow: var(--brand-glow);
}

/* 扫光行程：左外侧 → 右外侧（±105% / 240% ＝ nova 原实测值，
   保证光带在循环两端都完整进出、不在可视区内「忽然出现/消失」） */
@keyframes ql-fx-scan{
  from{ transform: translateX(-105%); }
  to  { transform: translateX(240%); }
}

/* 「今」位（当前段）扫描亮光 —— 全皮肤共用壳，调性由 --fx-scan-* 提供 */
.tl-item.now::before{
  content: "";
  position: absolute;
  top: 0; bottom: 0; left: 0;
  width: var(--fx-scan-w);
  pointer-events: none;
  background: linear-gradient(90deg, transparent, var(--fx-scan-glow), transparent);
  animation: ql-fx-scan var(--fx-scan-dur) linear infinite;
}

/* 动效降级：尊重「减少动效」偏好 ⇒ 定格为一道静态光（⛔ 不是隐藏，否则「今」位失去唯一提示） */
@media (prefers-reduced-motion: reduce){
  .tl-item.now::before{
    animation: none;
    transform: translateX(0);
    opacity: .55;
  }
}
