/* ============================================================================
 * T78 —— 顶部导航「激活下划线」收权层（2026-10-06）
 *
 * 症状（用户反馈）：点导航切换栏目时，下方的激活下划线**频繁跳动、闪烁**，
 *   和内容区状态不同步，"视觉上一直抖"。
 *
 * 实测（1440×800，CDP 每 50ms 采样）三处病灶：
 *   ① 下划线位置本来有三方在画：主包 `.nav-button`（只有 color）、
 *      我们 2026-09-27 的桌面层 `.nav-button::after{bottom:0;left/right:9px}`、
 *      navigation-taxonomy 层 `.main-nav .nav-button::after{bottom:-5px;left/right:12px}`、
 *      **Codex board 层** `.qdm-library-integrated .nav-entry[data-qdm-library-nav] .nav-button:after{left/right:8px;bottom:10px}`
 *      —— board 层选择器权重最高 → **「游戏库」那条比别人高 15px、还窄 8px** → 切换时下划线"跳"。
 *   ② 下划线的显隐挂在 `.active` 类上，而 `.active` 有三方在改：
 *      主包路由、我们的 framework-fix `syncNavActive()`、Codex board 层 `ensureNavigation()`
 *      —— 实测点一次「平台修复工具」，transform 走了
 *      `100→92→24→2→100→100→53→54→96→100`（0.6s 内缩下去又弹回来两轮）。
 *   ③ 点「游戏库」时先亮的是**「联机修复工具」**（主包路由对 /library 的兜底匹配），
 *      150ms 后正确的才亮，中间两项同时亮 100ms 才消 —— 状态不同步。
 *
 * 修法：**这一层独占下划线**。不再和各层争 `.active`，而是：
 *   · 把 `::after` 那条钉掉（display:none），下划线改用 `::before` 由本层独画；
 *   · active 判定由本层从 URL 现算（确定性、幂等），落在 `data-qdm-nav-active` 属性上；
 *   · 别的层爱怎么改 `.active` 都不再有视觉效果 → 不再互相打架。
 * ========================================================================== */

/* 关掉三方混战的那条 —— 位置不一致、显隐被反复改，全是它 */
:root #root .main-nav .nav-button::after,
#root .main-nav .nav-button::after {
  display: none !important;
}

/* 本层独占的下划线：所有导航项**同一套几何**（12px 内缩 / 压在底部 -5px） */
#root .main-nav .nav-button::before {
  content: "";
  position: absolute;
  left: 12px;
  right: 12px;
  bottom: -5px;
  height: 2px;
  border-radius: 2px;
  background: #6366f1;
  transform: scaleX(0);
  transform-origin: center;
  /* ⚠️ 激活态**不做过渡**：主包路由一变会把导航 <a> 重建，本层贴的属性会被擦掉再补回来，
     带过渡的话下划线会"展开两次"（上线实测：点「游戏工具」后 0→90→100，840ms 时又 0→54→95→100）。
     瞬时到位就完全没有这个二次动画，视觉上更稳。悬停/聚焦仍然保留动画（见下）。 */
  transition: none;
  pointer-events: none;
}

/* 激活：瞬时展开（判定来自本层写的 data 属性，不依赖被三方争抢的 .active） */
#root .main-nav .nav-button[data-qdm-nav-active="1"]::before {
  transform: scaleX(1);
}

/* 悬停 / 键盘焦点：这里才用动画（节点稳定，不会有重建导致的二次展开） */
#root .main-nav .nav-entry:hover .nav-button::before,
#root .main-nav .nav-button:focus-visible::before {
  transform: scaleX(1);
  transition: transform 0.16s ease;
}

/* 路由切换时内容区会先渲染再被替换（高度 800→1528→1487 实测），
   而主包给 html 设了 scroll-behavior:smooth → 回顶的平滑动画会跟着高度变化反复重算 =
   内容区看着也在抖。这里把**CSS 隐式平滑滚动**关掉；
   显式调用的 scrollTo({behavior:'smooth'})（比如"回到顶部"按钮）不受影响，仍然平滑。 */
html {
  scroll-behavior: auto !important;
}
