forked from Keelrleek/SoulStream
dark glass, the whole app: frost on every pane, and the periscope pattern for every glass bar the frost sits under - backdrop-filter black-flattens over see-through ground (measured 3-vs-40), so bars over frost blur a scroll-synced clone behind a static band cut instead; the bar moved out of the scroller (pane shell, inner .content keeping the closest-contract, the old negative-margin flow replayed by a spacer after the artist page's sticky physics named the scrollport padding sacred); painted pages declare data-painted and keep the real backdrop bar, which is how the artist hero runs under the glass again; np wash rides the scroll away and dissolves to frost like the album banner; perf measured to vsync - 142px blur wraps (27.9ms frames down to 6.9), idle scroll-gated reclones, clip-path band, content-visibility on library rows, async cover decode; mini frosts over the mini:glass channel and the rest-frame flags ride window config because the env-var lane dies on some webview2 runtimes
This commit is contained in:
1 parent
225c9139aa
commit
6ba1864498
16 files changed
+821
-117
No files matched your search
@@ -69,6 +69,19 @@
|
||||
background: var(--bg-player);
|
||||
user-select: none;
|
||||
}
|
||||
/* Dark glass, mini edition: unlike the main window (only the canvas
|
||||
BETWEEN panes thins), the mini is all pane — so the pane itself thins
|
||||
to the same black tint the main's .app uses (one dial, two files —
|
||||
keep the alphas in step), over the OS acrylic (window_glass).
|
||||
global.css already stops html/body painting under .glass; every
|
||||
shape's own --bg-player fill is overridden in one place here. The
|
||||
Wash art bleed stays as-is above it. */
|
||||
:global(:root.glass) .miniroot {
|
||||
background: transparent;
|
||||
}
|
||||
:global(:root.glass) .miniroot :global(.shape) {
|
||||
background: rgba(0, 0, 0, 0.55);
|
||||
}
|
||||
:global(.m-disc) {
|
||||
border-radius: 50%;
|
||||
background: var(--accent);
|
||||
|
||||
@@ -103,6 +103,16 @@ export function initMini() {
|
||||
mini.index = p.index ?? -1;
|
||||
mini.next = p.next ?? null;
|
||||
});
|
||||
// Dark glass, the mini's half: the brain streams the one setting
|
||||
// (glass.js emits on flips, the bridge answers hello); this window
|
||||
// toggles its own root class and asks the OS for its own acrylic —
|
||||
// window_glass acts on the calling window. Don't import glass.js here:
|
||||
// its applier emits mini:glass, which this listener would loop on.
|
||||
onEvent("mini:glass", (p) => {
|
||||
const on = !!p?.on;
|
||||
document.documentElement.classList.toggle("glass", on);
|
||||
void invoke("window_glass", { on }).catch(() => {});
|
||||
});
|
||||
// Ask the brain for a full snapshot; retry briefly in case the mini won
|
||||
// the race against the bridge's listener registration.
|
||||
void emit("mini:hello", {});
|
||||
|
||||
Reference in new issue
Block a user