feat: Replay Gain, Crossfade, Download Folder Modal, Changelog in Settings (v1.6.0)

### Audio
- Replay Gain support (track + album mode, configurable pre-gain, hard limiter)
- Crossfade between tracks (configurable duration 1–10 s)
- Gapless preloading ⚠️ experimental/alpha — enable in Settings → Playback
- Atomic sink swap: old track plays until new one is decoded, then stops cleanly

### UI / UX
- Settings redesigned with tab navigation (General, Playback, About)
- Changelog viewer in Settings → About with collapsible version entries
- Download Folder Modal: choose folder + "remember" checkbox per-download
- EQ popup now accessible directly from the Player Bar
- "Also Featured On" section on Artist pages for non-album appearances

### Fixes
- Bundle identifier changed from dev.psysonic.app → dev.psysonic.player (fixes macOS warning)
- Version sync: all four version files (package.json, Cargo.toml, tauri.conf.json, PKGBUILD) now at 1.6.0

### Known Issues
- FLAC seeking via waveform seekbar does not work (MP3/OGG unaffected) — under investigation

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
Psychotoxical
2026-03-19 20:23:17 +01:00
parent 7de4b97df0
commit 0e88e8a5cd
24 changed files with 2701 additions and 775 deletions
+68
View File
@@ -489,6 +489,74 @@
min-width: 0;
}
.player-eq-btn {
color: var(--text-muted);
flex-shrink: 0;
transition: color 0.15s;
}
.player-eq-btn:hover,
.player-eq-btn.active {
color: var(--accent);
}
/* ─── EQ Popup ─── */
.eq-popup-backdrop {
position: fixed;
inset: 0;
z-index: 200;
background: rgba(0, 0, 0, 0.35);
backdrop-filter: blur(2px);
}
.eq-popup {
position: fixed;
z-index: 201;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
width: min(700px, 92vw);
background: var(--bg-sidebar);
border: 1px solid var(--border);
border-radius: 14px;
box-shadow: 0 24px 60px rgba(0, 0, 0, 0.5);
padding: 20px;
display: flex;
flex-direction: column;
gap: 16px;
}
.eq-popup .eq-wrap {
max-width: none;
}
.eq-popup-header {
display: flex;
align-items: center;
justify-content: space-between;
}
.eq-popup-title {
font-size: 15px;
font-weight: 600;
color: var(--text-primary);
}
.eq-popup-close {
display: flex;
align-items: center;
justify-content: center;
width: 28px;
height: 28px;
border-radius: 6px;
background: var(--bg-hover);
border: 1px solid var(--border);
color: var(--text-muted);
cursor: pointer;
transition: background 0.15s, color 0.15s;
}
.eq-popup-close:hover {
background: var(--accent);
color: var(--bg-app);
}
/* ─── Queue Panel ─── */
.queue-panel {