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:
KeelrLeek committed 2026-08-26 14:55:25 -05:00
1 parent 225c9139aa
commit 6ba1864498
16 files changed
+821 -117

No files matched your search

+14 -2
View File
@@ -2,9 +2,21 @@
// root (global.css thins the base surfaces), the OS half is the acrylic
// backdrop behind the transparent window (window_glass command). Both are
// idempotent, so boot and the Settings toggle share this one entry point.
//
// This file runs in the MAIN window only. The mini frosts itself from the
// `mini:glass` event this emits (one setting, two windows): it toggles its
// own root class and invokes window_glass, which acts on the CALLING window.
// The mini must never import this — its applier would re-emit into its own
// listener.
import { emit } from "@tauri-apps/api/event";
import { windowGlass } from "./api.js";
let current = false;
export const glassOn = () => current;
export function applyGlass(on) {
document.documentElement.classList.toggle("glass", !!on);
void windowGlass(!!on).catch(() => {});
current = !!on;
document.documentElement.classList.toggle("glass", current);
void windowGlass(current).catch(() => {});
void emit("mini:glass", { on: current });
}
+6
View File
@@ -11,11 +11,14 @@
// throttled ~5/s
// mini:queue { rows: [{ title, dur }], index, next: { title, artUrl } }
// on queue shape change
// mini:glass { on } on dark-glass flips
// (applyGlass) + hello
// mini:cmd { op, value } mini → here
// mini:hello {} mini → here, answered
// with a full snapshot
import { emit } from "@tauri-apps/api/event";
import * as api from "./api.js";
import { glassOn } from "./glass.js";
import {
player,
theme,
@@ -154,6 +157,9 @@ export function initMiniBridge() {
void emitTrack();
void emitQueue();
emitTick();
// Frost state rides its own channel: hello answers with the current
// value, applyGlass pushes flips live (see glass.js).
void emit("mini:glass", { on: glassOn() });
});
api.onEvent("mini:cmd", (p) => {
const { op, value } = p ?? {};