Skip to content

v1.16.3 — 关掉玻璃后半个页面还在采样背景,标题栏被美术图盖住,MAGI 卡片没有光追

Choose a tag to compare

@github-actions github-actions released this 28 Aug 11:47
· 104 commits to main since this release

补丁版。三处独立的根因,都长在「材质开关」这条路径上。

标题栏不可读是绘制顺序,不是颜色

.core-band 的计算背景是完全不透明的,画面上却透出美术图。

.app-bgposition: fixed; z-index: 0,而 .core-band静态的——定位
元素的背景排在静态块背景之上
,所以美术图直接盖在状态栏上。材质开着时它能躲过去
纯属侥幸:backdrop-filter 让它成了 stacking context,因而被提升;一关材质,提升
随之消失,美术图就压上来。

.app-bg 降到 z-index: -1。html 自身没有背景,body 的背景会传播到 canvas,所以
这一层仍在 canvas 之上、所有内容之下。

关闭清单早就过期了

html.no-glass 只点名了七个选择器。后续给 .tabs-nav.lang-toggle
.eva-hud-frame.pane-list、图谱浮层以及所有 .btn 加的材质,一个都没进这个
清单——实测「关闭」状态下仍有 12+ 个元素在采样背景。于是模糊滑块继续推着半个
页面走,另一半纹丝不动。

改成不点名的写法:--glass-scale: 4 让所有写成
rgba(<tint>, calc(k * var(--glass-scale))) 的表面越过 alpha 1 被 rgba() 钳成
不透明(在用的最小 k 是 0.28),外加一条 html.no-glass * 的 backdrop-filter 封杀。
以后新加的表面不可能再漏。

顺带两处:旧规则里的 background-image: none !important 是照 light/dark 写的(那里
高光是 background-image),但 MAGI 卡片的背景本身就是一条 linear-gradient,于是
被一起抹掉,卡片变成全透明的框浮在美术图上;同一条规则里的 filter: none 还误杀了
它的悬浮投影。高光改为在颜色停止点上关掉,不碰 background-image

两个滑块在此模式下调的是一个已经关闭的材质,现在直接禁用,而不是留着看起来能动、
实际无效。CRT 扫描线和背景选择器与材质无关,保持可用。

MAGI 卡片没有光追:background: 简写重置了 background-image

简写会重置 background-image,基础规则画的指针高光就这么被静默丢掉。整个 MAGI 主题
里只有 HUD 幸存,因为它那条规则是后写的,把高光层重新拼了一遍。
.doc-preview-side 是同一个错误。

查下来问题比表面更大:引擎追踪 10 个选择器,只有 3 个真的在画高光——
.glass-tuner-panel.doc-preview-side 压根没有高光层,模态框和 .toast 只有
固定顶光。引擎一直在为一半不存在的东西做计算。

高光提取成 --glass-specular-layer,在 :root 定义一次。之前是同一段
radial-gradient 手抄在四处——副本会漂移,而这里最要命的那份副本压根没存在过。
引擎列表与「真的在画」严格对齐:补上 .pane-list.pane-view
.glass-tuner-panel.doc-preview-side、模态框;.toast 明确移出(小、短暂、会
自动消失,固定顶光足够)。

回归测试

五条新不变量:关闭清单必须是不点名的写法;不许用 background-image: none
.app-bg 必须在静态内容之后绘制;引擎列表与 CSS 双向一致;被追踪的表面不许用
background: 简写。最后一条正是这次的 bug——以后再写简写会直接测试红。

pipx upgrade --install magi-research

Browser buttonmagi-browser-extension-v1.2.1.zip below.
Unzip it, open chrome://extensions, turn on Developer Mode, and use Load unpacked on the unzipped folder. It sends the page you are reading to a local MAGI queue and nothing else; nothing enters a library until you approve the batch.