v0.6.5 — 网页端死代码清理 + 回归设计语言 + 触摸端 hover 守卫
改动
本次仅动网页端(docs/items_browser.html、docs/items_data_full.js),无 C# 源码变更。但网页三个文件是内嵌资源(<EmbeddedResource> + LogicalName 前缀 web.),由 TryRouteWeb 从 GetManifestResourceStream 提供、本地 http://localhost:26880/ 自服务,故 ProgressMod.dll 字节已变。InventorySorter.dll 与 NetworkUnlockMod.dll 与 v0.6.4 逐字节相同(sha256 一致)。
1. 死代码清理(4 条,均有 grep / ast-grep 证据)
| 规则 | 判据 |
|---|---|
.card:focus-visible |
card 渲染为 <article role="group">;全文件 tabindex 出现 0 次、<button class="card" 0 次 ⇒ 永不匹配 |
.btn:disabled |
全文件 disabled 仅此 1 处(它自己的定义),JS 从不置 disabled |
.btn.ok / .btn.bad |
无任何赋值 |
注意 .toast.ok / .toast.bad(L304/L305)是活代码,未误删;nav-item.active、dot.on、dot.off、fav.on 经 grep 证明均在 classList.toggle / className 赋值中使用。
2. 回归设计语言(docs/nvdesign.md)
- 删自造色:
.btn:hover{background:#8ad100}——#8ad100不在 nvdesign 任何 token 中,且比:active的primary-dark更亮 ⇒ 按压反馈方向反了。改回var(--primary-dark)(#5a8d00)。 - 消除强调色稀释:原先每张卡片 3 个绿元素(生成 / 生成十个 / 详情),其中两个同权重 2px outline 抢焦点。按文档 L169 的
button-ghost-link把「详情」降级为新.btn.link(绿字、无边框)⇒ 绿边框由 1.94 → 0.98 / 卡,回到文档 L276 的 primary + outline 一对。
3. 缺陷修复
.card{cursor:pointer}是假承诺:卡片无 click handler,实测点击卡片标题抽屉不打开、无任何响应(先前删掉整卡点击后的残留),鼠标指针在骗用户 ⇒ 删除。删除后按钮仍靠全局button{cursor:pointer}保留手型。--ash对比度不达标:#6e6e6e实测 4.12(纯黑)/ 3.81(surface)全底色低于 AA 正文 4.5。抬到#8a8a8a(5.63)。影响 placeholder 与 kbd 两处;此前 L187 已因同一原因修过.card-desc:empty。- 字面标签泄漏:
items_data_full.js中alarm_module_transmitter的描述含<b>治安部</b>,经esc()渲染后用户看到裸标签。移除标签并同步 bump?v=20260921 → 20260923(不 bump 则旧缓存用户看不到修复)。
4. 触摸端 hover 粘滞(@media (hover:hover))
L356 注释自称「桌面工具, 只服务鼠标」,但 14 条 :hover 规则全部裸放,全文件无 hover:hover / pointer:fine / any-hover 守卫 —— 名实不符。触摸设备无真悬停,移动端浏览器 tap 后会「粘住」:hover(按钮/卡片停在悬停态),并与 :focus-visible 同时命中成双重高亮。整段包进 @media (hover:hover){}。
选 (hover:hover) 而非 (any-hover:hover):后者在触屏笔记本上仍为 true,挡不住触摸粘滞。
验证
| 项 | 前 | 后 |
|---|---|---|
| 卡片高度 | 232px × 1 种 | 232px × 1 种(未动刻度) |
字面 <b> 卡片 |
1 | 0 |
| 每卡绿边框 | 1.94 | 0.98 |
.card cursor |
pointer | auto |
--ash |
#6e6e6e | #8a8a8a |
| img/svg/canvas/gradient | 0 | 0(设计约束守住) |
- hover 守卫双向实测:桌面
(hover:hover)=true、14 条规则仍在媒体块内生效;390×844 hasTouch 下(hover:hover)=false /(pointer:coarse)=true,块被正确跳过,卡片边框保持rgb(94,94,94)。CSSOM 顶层 145 条规则、大括号配平,prefers-reduced-motion与末端规则完好。 - 三个 csproj
dotnet build -c Release均 0 警告 0 错误。 - DLL 二进制标记确认内嵌资源已更新:
8ad100=0、btn:disabled=0、ash:#8a8a8a/btn.link/button-ghost-link/hover:hover均在。
未做:游戏侧运行时测试不在本次范围;游戏内生成行为未改动。