mirror of
https://github.com/Psychotoxical/psysonic.git
synced 2026-07-22 07:15:47 +00:00
Merge branch 'main' into exp/orbit
This commit is contained in:
+124
-11
@@ -2427,6 +2427,116 @@
|
||||
box-shadow: 0 0 0 2px color-mix(in srgb, var(--accent) 25%, transparent);
|
||||
}
|
||||
|
||||
/* ─ Lucky Mix pips (shared by the inline queue-lucky-cube indicator) ─ */
|
||||
.lucky-mix-pip {
|
||||
position: absolute;
|
||||
width: 14px;
|
||||
height: 14px;
|
||||
border-radius: 50%;
|
||||
background: #fff;
|
||||
box-shadow: 0 1px 3px rgba(0, 0, 0, 0.35);
|
||||
}
|
||||
|
||||
.lucky-mix-pip--tl { top: 16px; left: 16px; }
|
||||
.lucky-mix-pip--tr { top: 16px; right: 16px; }
|
||||
.lucky-mix-pip--bl { bottom: 16px; left: 16px; }
|
||||
.lucky-mix-pip--br { bottom: 16px; right: 16px; }
|
||||
.lucky-mix-pip--center {
|
||||
top: 50%;
|
||||
left: 50%;
|
||||
transform: translate(-50%, -50%);
|
||||
}
|
||||
|
||||
.queue-lucky-loading {
|
||||
margin: 2px 10px 4px;
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
padding: 7px 10px;
|
||||
background: transparent;
|
||||
border: 1px solid transparent;
|
||||
border-radius: 8px;
|
||||
cursor: pointer;
|
||||
width: calc(100% - 20px);
|
||||
transition: background 140ms ease, border-color 140ms ease;
|
||||
}
|
||||
.queue-lucky-loading:hover {
|
||||
background: color-mix(in srgb, var(--danger) 8%, transparent);
|
||||
border-color: color-mix(in srgb, var(--danger) 28%, transparent);
|
||||
}
|
||||
.queue-lucky-loading:hover .queue-lucky-cube {
|
||||
opacity: 0.55;
|
||||
}
|
||||
|
||||
.queue-lucky-loading__dice {
|
||||
position: relative;
|
||||
width: 56px;
|
||||
height: 30px;
|
||||
flex: 0 0 auto;
|
||||
}
|
||||
|
||||
.queue-lucky-cube {
|
||||
position: absolute;
|
||||
width: 18px;
|
||||
height: 18px;
|
||||
border-radius: 5px;
|
||||
border: 1px solid color-mix(in srgb, #fff 65%, var(--accent) 35%);
|
||||
background: linear-gradient(
|
||||
160deg,
|
||||
color-mix(in srgb, var(--accent) 66%, #fff 34%) 0%,
|
||||
color-mix(in srgb, var(--accent) 84%, #000 16%) 100%
|
||||
);
|
||||
box-shadow:
|
||||
0 4px 9px rgba(0, 0, 0, 0.28),
|
||||
inset -2px -3px 5px rgba(0, 0, 0, 0.18),
|
||||
inset 2px 2px 4px rgba(255, 255, 255, 0.18);
|
||||
}
|
||||
|
||||
.queue-lucky-cube .lucky-mix-pip {
|
||||
width: 3px;
|
||||
height: 3px;
|
||||
}
|
||||
|
||||
.queue-lucky-cube .lucky-mix-pip--tl { top: 4px; left: 4px; }
|
||||
.queue-lucky-cube .lucky-mix-pip--tr { top: 4px; right: 4px; }
|
||||
.queue-lucky-cube .lucky-mix-pip--bl { bottom: 4px; left: 4px; }
|
||||
.queue-lucky-cube .lucky-mix-pip--br { bottom: 4px; right: 4px; }
|
||||
|
||||
.queue-lucky-cube--a {
|
||||
left: 0;
|
||||
top: 11px;
|
||||
animation: queueLuckyCubeA 760ms ease-in-out infinite;
|
||||
}
|
||||
|
||||
.queue-lucky-cube--b {
|
||||
left: 18px;
|
||||
top: 3px;
|
||||
animation: queueLuckyCubeB 690ms ease-in-out infinite;
|
||||
}
|
||||
|
||||
.queue-lucky-cube--c {
|
||||
left: 36px;
|
||||
top: 11px;
|
||||
animation: queueLuckyCubeC 830ms ease-in-out infinite;
|
||||
}
|
||||
|
||||
@keyframes queueLuckyCubeA {
|
||||
0% { transform: translateY(0) rotate(0deg); }
|
||||
50% { transform: translateY(-6px) rotate(-10deg); }
|
||||
100% { transform: translateY(0) rotate(0deg); }
|
||||
}
|
||||
|
||||
@keyframes queueLuckyCubeB {
|
||||
0% { transform: translateY(0) rotate(0deg); }
|
||||
50% { transform: translateY(-8px) rotate(10deg); }
|
||||
100% { transform: translateY(0) rotate(0deg); }
|
||||
}
|
||||
|
||||
@keyframes queueLuckyCubeC {
|
||||
0% { transform: translateY(0) rotate(0deg); }
|
||||
50% { transform: translateY(-5px) rotate(12deg); }
|
||||
100% { transform: translateY(0) rotate(0deg); }
|
||||
}
|
||||
|
||||
/* ─ Playlist edit modal ─ */
|
||||
.playlist-edit-modal {
|
||||
max-width: 560px;
|
||||
@@ -9626,11 +9736,11 @@ html.no-compositing .fs-seekbar-played {
|
||||
.device-sync-row-meta { font-size: 0.75rem; color: var(--text-secondary); flex-shrink: 0; }
|
||||
|
||||
/* ── Pause CSS animations when the window is hidden / minimized ────────────
|
||||
Set via App.tsx on `visibilitychange`. WebView2 on Windows keeps compositing
|
||||
infinite CSS animations (mesh-aura, portrait-drift, eq-bounce, track-pulse,
|
||||
led-pulse, …) even when the app is minimized, causing constant GPU use.
|
||||
Pausing them cuts that to near zero while hidden without touching the
|
||||
running Rust/audio threads. */
|
||||
- `data-app-hidden`: App.tsx `visibilitychange` → `document.hidden` (all platforms).
|
||||
- `data-psy-native-hidden`: Rust inject on Tauri `win.hide()` / show (WebView2
|
||||
often keeps `document.hidden === false` when the native window is hidden).
|
||||
Either flag pauses infinite animations including portaled nodes and ::pseudo,
|
||||
without touching Rust/audio threads. */
|
||||
/* ─ What's New — banner + page ────────────────────────────────────────────
|
||||
Fixed neutral palette so it reads identically on every theme (light and
|
||||
dark). The banner sits in the sidebar just above Now Playing; the page
|
||||
@@ -10027,11 +10137,11 @@ html.no-compositing .fs-seekbar-played {
|
||||
}
|
||||
|
||||
.mini-player__volume-popover {
|
||||
position: absolute;
|
||||
top: calc(100% + 6px);
|
||||
left: 50%;
|
||||
transform: translateX(-50%);
|
||||
z-index: 50;
|
||||
/* Positioned via inline `style` (createPortal'd to document.body, so
|
||||
`position: fixed` + computed left/top from the trigger button's rect).
|
||||
Falls back gracefully if inline style is missing. */
|
||||
position: fixed;
|
||||
z-index: 99998;
|
||||
background: var(--bg-card);
|
||||
border: 1px solid var(--border-subtle);
|
||||
border-radius: 8px;
|
||||
@@ -10268,7 +10378,10 @@ html.no-compositing .fs-seekbar-played {
|
||||
|
||||
html[data-app-hidden="true"] *,
|
||||
html[data-app-hidden="true"] *::before,
|
||||
html[data-app-hidden="true"] *::after {
|
||||
html[data-app-hidden="true"] *::after,
|
||||
html[data-psy-native-hidden="true"] *,
|
||||
html[data-psy-native-hidden="true"] *::before,
|
||||
html[data-psy-native-hidden="true"] *::after {
|
||||
animation-play-state: paused !important;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user