mini player + dark glass: eight shapes run by the hidden main as the one brain, dissolving covers and accents, drag from anywhere, and the space between the panes turned to real acrylic - with the webview flags that keep rest frames honest
This commit is contained in:
1 parent
9b84b30aef
commit
dc7ea16b22
33 files changed
+2432
-5
No files matched your search
@@ -5582,6 +5582,13 @@ const DEFAULT_ACCENT_HOVER = "#41b7ee";
|
||||
export const theme = $state({
|
||||
accent: DEFAULT_ACCENT,
|
||||
accentHover: DEFAULT_ACCENT_HOVER,
|
||||
// Where the crossfade is HEADED, set synchronously the moment it starts.
|
||||
// The mini bridge streams THESE: the lerped pair above only advances via
|
||||
// rAF in this window, and rAF never fires while this window is hidden —
|
||||
// mirror the lerp and the mini goes stale the moment it's the only
|
||||
// window on screen.
|
||||
accentTarget: DEFAULT_ACCENT,
|
||||
accentHoverTarget: DEFAULT_ACCENT_HOVER,
|
||||
});
|
||||
|
||||
let accentRaf = null;
|
||||
@@ -5589,6 +5596,8 @@ let accentRaf = null;
|
||||
/** Animate --accent/--accent-hover to the target colors (ease-out). */
|
||||
function crossfadeAccent(accent, hover, ms = 1200) {
|
||||
if (accent === theme.accent && hover === theme.accentHover) return;
|
||||
theme.accentTarget = accent;
|
||||
theme.accentHoverTarget = hover;
|
||||
if (accentRaf) cancelAnimationFrame(accentRaf);
|
||||
const fromA = hexToRgb(theme.accent);
|
||||
const fromH = hexToRgb(theme.accentHover);
|
||||
|
||||
Reference in new issue
Block a user