# Changelog All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). ## [1.17.1] - 2026-03-25 ### Fixed - **Windows crash on startup**: souvlaki SMTC init in `setup()` requires a valid HWND and a running COM message loop, neither of which exists at that point. Media controls are disabled on Windows until init can be properly deferred post-window. All other functionality unaffected. --- ## [1.17.0] - 2026-03-25 ### Added - **Media Keys & OS Media Controls** *(experimental)*: Initial integration via [souvlaki](https://github.com/Sinono3/souvlaki) — MPRIS2 on Linux, Now Playing on macOS, SMTC on Windows. Track metadata (title, artist, album, cover art) and playback state are pushed to the OS media overlay in real time. On Linux, init is skipped gracefully if no D-Bus session is present. This feature is still under active development and observation — behaviour may vary across desktop environments and OS versions. - **Random Mix — Artist Blacklist**: Artist names are now included in the keyword blacklist filter. Clickable artist chips in the tracklist let you add an artist to the blacklist with one click — same UX as the existing genre chips. - **Favorites — Remove Song**: Each song row in Favorites now has an inline X button to remove the track from favorites instantly (optimistic UI, server unstar happens in the background). - **3 New Themes**: - *Games*: **Horde** — Durotar blood-red earth, iron-plate sidebar, forge-fire gold glow on track name. - *Games*: **Alliance** — Stormwind deep navy, cathedral stone columns, paladin holy-light glow, gold sidebar trim and nav accent. - *Operating Systems*: **W11** — Windows 11 Fluent Design dark mode. Mica-style sidebar, clean neutral palette, taskbar-inspired player bar. No gradients — faithful to the minimal Fluent aesthetic. ### Changed - **Theme renames**: Cobalt Media → **WinMedPlayer**, Onyx Cinema → **P-DVD**, Navy Jukebox → **MuMa Jukebox**. - **NowPlayingDropdown**: Username / player name row now uses `--text-secondary` for improved readability across all themes. ### Fixed - **Performance — App-wide interaction lag**: Removed `[data-theme='X'] * { font-family: ... !important }` universal selectors from several themes (DOS, Unix, and others). The browser places universal selectors in the "universal bucket" and checks them against every DOM node on every style recalculation — measurably sluggish with 500–1000+ elements even when the affected theme is not active. `font-family` is now set on the theme root block (inherits to children) with a targeted `button, input, textarea, select` override for elements that don't inherit font. - **Performance — Scroll jank**: Removed `repeating-linear-gradient` / `repeating-radial-gradient` from `.app-shell` in DOS, Unix, GW1, Morpheus, Aqua Quartz, and others. WebKitGTK with `WEBKIT_DISABLE_COMPOSITING_MODE=1` (always set by the AUR wrapper) has no GPU compositing — fine-pitch repeating patterns on the full-viewport background re-rasterize every scroll frame. Patterns are now applied only to `.sidebar` and `.player-bar`, which never scroll. - **Contrast — 29 themes**: Audited all themes against WCAG AA. Fixed `--text-muted` and `--text-secondary` values in 29 themes that had insufficient contrast ratios (< 3.5:1). Affects Catppuccin (all four variants), Gruvbox (all six), Nord variants, GW1, Heisenberg, Ice and Fire, Spider-Tech, Morpheus, Hill Valley 85, Dune, and others. ### Removed - **Theme**: Azerothian Gold removed from the Games group. --- ## [1.16.0] - 2026-03-24 ### Added - **15 New Themes** across multiple categories: - *Operating Systems*: **Aqua Quartz** — Mac OS X Aqua (skeuomorphic jelly buttons, brushed aluminium player bar, pinstripe background, blue Source List sidebar, authentic `#3876f7` accent) - *Movies*: **Spider-Tech** (Spider-Man navy/red), **T-800** (Terminator Skynet blue), **B-Runner** (Blade Runner 2049 amber), **Hill Valley 85** (Back to the Future) - *Games*: **TetraStack** (Tetris 8-bit, cyan, grid background, 0px radii) - *Series*: **Turtle Power** (TMNT turtle green, brick tile sidebar) - *Social Media* (new group): **Insta** (Instagram dark pink), **ReadIt** (Reddit dark orange-red), **The Book** (Facebook light, blue sidebar) - *Operating Systems*: **W3.1** (Windows 3.1, light silver/teal, 0px radii, inset bevels) - *Mediaplayer*: **Jayfin** (Jellyfin-inspired — deep black, purple `#AA5CC3` primary, cyan `#00A4DC` secondary, brand gradient on player bar and progress fill) - **Aqua Quartz — Full Skeuomorphic Polish**: All button variants (`.btn-surface`, `.btn-ghost`, `.hero-play-btn`, `.album-card-details-btn`, `.queue-round-btn`) now have the authentic Aqua jelly gradient. Sidebar sports the iconic blue Source List gradient with white icons and a white pill for the active nav link. ### Changed - **W98 Theme — Complete Overhaul**: Rebuilt from scratch with authentic Windows 98 design language: correct `#d4d0c8` warm-gray button face (not flat `#c0c0c0`), full 4-layer 3D bevel on all panels and buttons (raised default, sunken on press), song title displays in the iconic navy→light-blue title bar gradient, progress bar is a sunken white trough with navy fill, 16px styled scrollbar, all hover/active states consistently navy `#000080` + white text. - **Theme Picker — Alphabetical Order**: All theme groups and themes within groups are now sorted alphabetically. - **Theme Picker — Group Rename**: "Psysonic Themes — Mediaplayer" renamed to "Mediaplayer". - **Sidebar + Queue Toggle Buttons**: Queue toggle button now uses the theme accent color (icon + hover). ### Fixed - **AlbumDetail — Genre not propagating**: Playing via the album detail Play All / Enqueue All buttons now correctly includes the track genre in the constructed Track objects, making it show up in the Queue strip. - **W98 — Theme Accordion active state**: Open category headers are now navy with white text instead of black-on-navy. - **Aqua Quartz — Sidebar section labels**: "Library" / "System" labels now render in white on the blue sidebar. - **W98 — Connection indicators**: Server name and Last.fm username in the header are now black (`#000000`) on the warm-gray background for full readability. ### Removed - **Themes**: Removed **Pandora**, **Order of the Phoenix**, and **Imperial Sith** — too similar to other better-executed themes in their respective groups. --- ## [1.15.0] - 2026-03-23 ### Added - **Queue — Genre · Format · Bitrate Strip**: The meta box above the queue now shows a full-width frosted strip with Genre, audio format, and bitrate (e.g. `Electronic · FLAC · 1411 kbps`). Genre is sourced directly from track metadata and is now propagated through all 11 track construction sites across the codebase. - **Lyrics — Accent Color Highlight**: The active synced lyrics line is now highlighted in the theme accent color instead of bold+larger text. Eliminates layout jumps caused by the font-weight change pushing lines to wrap. ### Fixed - **Sidebar — Collapse Button**: The collapse button now correctly sits on the right border of the sidebar, straddling the dividing line between sidebar and main content, and is always visible. ### Changed - **Queue — Tech Info**: Codec/bitrate badge replaced by the new full-width Genre · Format · Bitrate strip at the top of the meta box. --- ## [1.14.0] - 2026-03-22 ### Critical Fixes - **Prebuffer Flood — 300 simultaneous downloads eliminated**: The audio engine was spawning up to 300 concurrent HTTP download requests during prebuffering, causing network saturation of ~200 Mbit/s and significant CPU load. The root cause was unbounded parallel preload logic in the Rust engine. Fixed: the engine now buffers intelligently with a single controlled preload per track. Network usage dropped to under 100 kbit/s during normal playback. - **Gapless Playback — fully stable**: Gapless transitions now work correctly end-to-end. Previously, edge cases in the sample-accurate handoff between tracks caused audio glitches or silence between songs. - **Crossfade — fully stable**: The equal-power crossfade (sin/cos envelope) is now reliable across all track transitions. Previous instability was caused by race conditions in the fade-out trigger and Sink lifecycle management. - **Now Playing Page — performance**: The Now Playing page no longer causes sustained CPU spikes. Heavy re-renders triggered by frequent `audio:progress` events (previously every 500 ms with wall-clock drift) are resolved — progress is now driven by an atomic sample counter at 100 ms intervals with no layout thrashing. ### Fixed - **Volume — Clipping at 100%**: Audible distortion at maximum volume eliminated. A `MASTER_HEADROOM` constant of −1 dB (`0.891`) is now applied to all volume calculations, preventing inter-sample peaks from 0 dBFS masters and EQ biquad ripple from clipping. - **Seek — Display Desync**: Seeking while paused could cause the time display to jump to the new position while audio continued from the old one. `CountingSource::try_seek` now only resets the sample counter after confirming the seek succeeded. - **Gapless + Crossfade — Mutual Exclusion**: Both modes can no longer be active simultaneously. Enabling one auto-disables the other (Queue toolbar + Settings). Running both simultaneously caused a glitch where Song 2, gapless-chained inside the Sink, would play at full volume after Song 1's crossfade completed. - **Now Playing — About the Artist**: The "About the Artist" card is now hidden when no biography is available. Artist images that fail to load are silently hidden instead of showing a broken image placeholder. ### Added - **Waveform — Hover Tooltip**: Hovering over the waveform seekbar shows a floating time label above the cursor. Hidden when no track is loaded or the cursor leaves. - **Hero & Album Detail — Format Badge**: Audio format (FLAC, MP3, OGG, …) now shown alongside Year, Genre, and Track Count in the hero meta row on the Home page and in the Album Detail header. - **Help — FLAC Seeking**: New FAQ entry explaining that FLAC files without an embedded SEEKTABLE cannot be seeked, with instructions for adding one via `flac` or `metaflac`. ### Changed - **Queue — Tech Info**: Codec/bitrate badge moved from the frosted-glass cover overlay into the top-right corner of the meta box. Album artwork is no longer obscured. --- ## [1.13.0] - 2026-03-22 ### Added - **SVG Logo**: The Psysonic wordmark is now an inline SVG with a theme-adaptive gradient (`--accent` → `--ctp-blue`), matching the app's visual identity across all 47 themes. The collapsed sidebar shows a standalone P-icon with the same gradient. - **Player Bar — Marquee**: Song title and artist name scroll smoothly when the text overflows the fixed-width track info area, pause briefly, then jump back and repeat. - **Player Bar — Volume Tooltip**: A floating percentage label appears above the volume slider on hover and updates live while dragging. ### Changed - **Sidebar — Collapse button**: Moved from the brand header to a small circular hover-tab on the right edge of the sidebar. Hidden until you hover over the sidebar, keeping the logo area uncluttered. - **Player Bar — Layout**: Track info area is now a fixed 320 px width. Waveform section has increased margins on both sides for better visual separation between controls, waveform, and volume. - **Settings**: Server tab is now the default when opening Settings. - **Crossfade**: Experimental badge removed — considered stable. - **Help page**: Added entries for Lyrics, Configurable Keybindings, and Font Picker. Theme count corrected to 47 themes across 7 groups. ### Fixed - **Global shortcuts — double-fire**: Pressing a global shortcut (e.g. `Ctrl+Alt+→`) was triggering the action twice. Root cause: `on_shortcut()` in `tauri_plugin_global_shortcut` accumulates handlers per shortcut across JS HMR reloads. Fixed with a Rust-side `ShortcutMap` state that makes `register_global_shortcut` idempotent. - **W98 theme**: Comprehensive contrast fixes across all interactive elements — hover states, buttons, queue items, settings panels, and toggles now use silver-grey (`#e0e0e0`) text on navy (`#000080`) backgrounds. - **Help page**: Removed orphaned translation key that was rendering as raw text under the Playback section. ### Beta - **Global Shortcuts** (Settings → Global Shortcuts): System-wide keyboard shortcuts that trigger playback actions while Psysonic is in the background. Functional on all platforms, but edge cases with certain key combinations or OS-level conflicts may still occur. --- ## [1.12.0] - 2026-03-22 ### Added - **Synchronized Lyrics**: Lyrics pane integrated into the Queue sidebar, powered by [LRCLIB](https://lrclib.net) — no API key required. Shows time-synced lyrics with auto-scroll and active-line highlighting; falls back to plain text when synced lyrics are unavailable. Access via the microphone icon in the player bar, fullscreen player, or Now Playing page. #### 15 New Themes **Games** (new group — 6 themes): - **Ascalon**: Dark stone fantasy inspired by Guild Wars 1. Near-black base, gold accent (`#d4af37`). - **Azerothian Gold**: World of Warcraft inspired. Charcoal base, warm gold accent (`#c19e67`). - **Grand Theft Audio**: GTA-inspired night city aesthetic. Pure black base, green accent (`#57b05a`). - **Lambda 17**: Half-Life inspired. Deep blue-black base, amber accent (`#ff9d00`). - **NightCity 2077**: Cyberpunk 2077 inspired. Near-total black base, neon yellow accent (`#FCEE0A`). - **V-Tactical**: Battlefield inspired. Gunmetal base, burnt orange accent (`#ff8a00`). **Series** (new group — 3 themes): - **A Theme of Ice and Fire**: Game of Thrones inspired. Cold dark navy base, ice blue accent (`#70a1ff`). - **D'oh-matic**: The Simpsons inspired. Cream/yellow light base, blue accent (`#1F75FE`). - **Heisenberg**: Breaking Bad inspired. Dark desaturated green base, crystal blue accent (`#3fe0ff`). **Movies** (2 additions): - **Imperial Sith**: Star Wars dark side. Pure black base, red accent (`#e60000`). - **Order of the Phoenix**: Harry Potter inspired. Deep charcoal base, ember-orange accent (`#e63900`). **Operating Systems** (1 addition): - **W98**: Windows 98 teal desktop aesthetic. Classic teal background, silver card, navy accent (`#000080`). ### Changed - **Last.fm integration**: Promoted out of beta — scrobbling, Now Playing, love/unlove, Similar Artists, and top stats are considered stable. - **Crossfade**: No longer marked experimental. Stable on Windows and Linux; macOS under observation. - **Gapless playback**: Experimental badge removed — considered stable. - **Theme picker — groups reorganised**: Catppuccin, Nord, and Retro (Gruvbox) merged into a single **Open Source Classics** group. Streaming themes (Spotless, DZR, Cupertino Beats) moved into **Psysonic Themes — Mediaplayer**. The app now ships **47 themes** across **7 groups**. - **Tokyo Night themes removed**: `tokyo-night`, `tokyo-night-storm`, and `tokyo-night-light` retired to make room for the new groups. - **Settings — tab order**: Reordered to Server → Appearance → Playback → Library → Shortcuts → About. - **Settings — Theme picker**: "Betriebssysteme" group renamed to "Operating Systems". ### Fixed - **Text selection on double-click**: Double-clicking song titles or anywhere in the UI no longer accidentally selects text. `user-select: none` applied globally; re-enabled for bio/description text areas. - **Middle Earth theme — star buttons**: Active favourite star in the album tracklist and album header was barely visible (gold on parchment, ~1.4:1 contrast). Both active and inactive states now use darker brown tones with proper contrast. - **Middle Earth theme — play button hover**: Hovering the primary play/pause button no longer makes the icon invisible (gold icon on gold background). ## [1.11.0] - 2026-03-22 ### Added #### Five New Themes — Movies - **Middle Earth**: Warm parchment light theme. Cream/beige background, dark ebony player and sidebar, gold accent (`#d4af37`). Georgia serif for track names, subtle noise texture. - **Morpheus**: Pure black terminal aesthetic inspired by The Matrix. Phosphor green accent (`#00ff41`), monospace font. - **Pandora**: Deep bioluminescent navy inspired by Avatar. Cyan accent (`#00f2ff`), large radii, glow effects. - **Stark HUD**: Near-black tactical HUD inspired by Iron Man. Cyan accent, JetBrains Mono, uppercase track name. - **Blade**: Deep black with blood-red accent (`#b30000`). Sharp radii, uppercase track name. - All five themes in a new **Movies** group in the theme picker. ### Changed - **Settings — tab order**: Reordered to Server → Appearance → Playback → Library → Shortcuts → About. - **Settings — Appearance**: Language selector moved to the top of the tab, above Theme and Font. - **Settings — Theme picker**: "Betriebssysteme" group renamed to "Operating Systems". - **Default font**: Changed from Inter to **Lexend** for new installations. - **Gapless playback**: Experimental badge removed — gapless is now considered stable. - **Now Playing — background**: Ken Burns animation (40 s, subtle scale + translate). Background blur increased to eliminate JPEG block artefacts at high blur values. - **Now Playing — Similar Artists**: Tag cloud redesigned into 2 rows with varied font sizes and vertical offsets for a natural look. - **Statistics**: "Now Playing" indicator rendered as a styled badge matching the app's badge style. ## [1.10.0] - 2026-03-22 ### Added #### Three New Themes (Streaming Series) - **Spotless**: Flat dark theme inspired by modern music streaming. Pitch-black sidebar (`#000000`), dark-grey app background (`#121212`), Spotify-green accent (`#1ED760`). White play button, green hover on primary actions. - **DZR**: Flat light theme inspired by Deezer's modern redesign. White base, light-grey sidebar (`#F5F5F7`), purple accent (`#A238FF`). Crisp typography, large rounded radii. - **Cupertino Beats**: Apple Music-inspired dark theme. Near-black base (`#1c1c1e`), frosted-glass sidebar and player bar with heavy `backdrop-filter`, red accent (`#fa243c`). Active nav links styled with `accent-dim` background. - All three themes added to the **Psysonic Themes — Mediaplayer** group in the theme picker. ### Fixed - **Favourite/Unfavourite toggle**: Right-clicking a song, album, or artist that is already starred now shows "Remove from Favourites" and calls `unstar()` correctly. Previously always showed "Add to Favourites" regardless of starred state. - `Track` interface gained `starred?: string` — propagated via `songToTrack()` and all inline track-object construction sites. - `starredOverrides: Record` added to `playerStore` — updated immediately on star/unstar so the context menu and tracklist star icons reflect changes without a page reload. - **Home page — Artist Discovery**: Replaced card grid (which loaded artist images and caused performance issues) with lightweight pill-buttons — same `artist-ext-link` style as the "Similar Artists" section on artist pages. No image loading, instant render. - **Now Playing page**: Queue sidebar is no longer automatically hidden when entering the Now Playing page. It now behaves like all other pages and respects the user's current queue visibility setting. - **Random Mix filter panel**: Background now correctly uses `--bg-card` instead of the undefined `--bg-elevated` token, which caused the panel to render transparent in most themes. ### Changed - **Home page layout**: Section order is now: Recently Added → Discover → Artist Discovery → Starred → Most Played. ## [1.9.0] - 2026-03-21 ### Added #### Three New Themes - **Neon Drift**: Deep midnight-blue background (`#12132c`) with electric cyan accent (`#00f2ff`) — subtle synthwave/cyberpunk aesthetic. Glowing player track name, cyan-glow nav active state, neon-lit primary buttons, glowing range slider thumb. - **Cupertino Light**: macOS Ventura-inspired light theme. Clean white base, Apple-grey sidebar (`#f2f2f7`), Apple blue accent (`#0071e3`). Frosted-glass sidebar and player bar with `backdrop-filter: blur`. Solid blue pill nav active (white text, no left border). - **Cupertino Dark**: macOS Ventura-inspired dark theme. Space Grey base (`#1e1e1f`), dark frosted sidebar, vibrant blue accent (`#007aff`). Same pill nav active as Cupertino Light. Solid blue Play/Pause button with glow. #### New Theme Group: Betriebssysteme - OS-aesthetic themes are now consolidated into one group: **Cupertino Light**, **Cupertino Dark**, **Aero Glass**, **Luna Teal**. - **Psysonic Themes** and **Psysonic Themes — Mediaplayer** moved to the top of the theme picker. #### Configurable Keybindings - New `keybindingsStore` with 10 bindable actions: Play/Pause, Next, Previous, Volume Up/Down, Seek ±10 s, Toggle Queue, Fullscreen Player, Native Fullscreen. - Rebind any action in **Settings → Keybindings** — click the key badge, press any key, saved immediately to `localStorage`. - Defaults: `Space` = Play/Pause, `F11` = Native Fullscreen. All other actions unbound by default. #### Font Picker - 10 UI fonts selectable in **Settings → Appearance**: Inter, Outfit, DM Sans, Nunito, Rubik, Space Grotesk, Figtree, Manrope, Plus Jakarta Sans, Lexend. - Persisted in `localStorage` (`psysonic_font`), applied via `data-font` attribute on ``. #### Home Page — Instant Play - **Album cards**: "Details" button replaced with a **Play** button — clicking plays the album immediately with a smooth 700 ms fade-out of the current track. - **Hero**: "Play Album" button now starts playback directly (with fade-out) instead of navigating to the album detail page. - Fade-out implemented via `playAlbum.ts` utility: fades volume to 0 over 700 ms, restores volume in the store (no Rust side-effect) before handing off to `playTrack`. #### Now Playing Page — Layout & Readability - **3-column hero layout**: album cover + info (left, `flex: 1`) — EQ bars (centre, fixed width) — tag cloud (right, `flex: 1`). EQ bars are now truly centred regardless of content length on either side. - **Background**: increased brightness from `0.25` to `0.55`, reduced overlay opacity from `0.55` to `0.38` — background art is now visible instead of near-black. - **Text contrast**: track times, card links (artist/album), and section title opacity all increased for better readability on the blurred background. ### Changed #### Theme Renames — Trademark-Safe Names All media-player and OS-themed theme IDs and labels have been renamed to avoid potential trademark conflicts: | Old Name | New Name | |---|---| | Classic Winamp | WnAmp | | Musicmatch Jukebox | Navy Jukebox | | WMP8 Classic | Cobalt Media | | PowerDVD Classic | Onyx Cinema | | Win7 Aero | Aero Glass | | WinXP Luna | Luna Teal | > **Note**: If you had one of these themes selected, your preference will reset to Mocha on first launch. Re-select your preferred theme in Settings. ### Fixed - **Linux — ALSA underruns**: `PIPEWIRE_LATENCY` (`4096/48000` ≈ 85 ms) and `PULSE_LATENCY_MSEC` (`85`) are now set before audio stream creation, reducing the frequency of ALSA `snd_pcm_recover` underrun events on PipeWire systems. Existing user-set values are respected. --- ## [1.8.0] - 2026-03-21 ### Added #### Three New Themes - **Poison**: Dark charcoal background (`#1a1a1a`) with phosphor green (`#1bd655`) accent — high-contrast, industrial aesthetic. LCD glow text-shadow on the now-playing track name. - **Nucleo**: Warm brass/cream light theme inspired by vintage hi-fi equipment. Warm white cards, gold/amber accents, brushed-metal bevel buttons, and a warm LCD glow on the player track name. `color-scheme: light`. - **Classic Winamp**: Cool gray-blue dark theme (`#2b2b3a`) channelling the classic Winamp 2.x skin. Yellow primary accent (`#d4cc46`), orange volume slider override (`--volume-accent: #de9b35`), Courier New monospace font with bright-green LCD glow for the track name. #### Psychowave Theme — Major Overhaul - Psychowave recoloured from loud neon pink/purple to a refined deep violet palette: background `#161428`, accent `#a06ae0`. All neon colours replaced with muted, tasteful variants. No longer marked as WIP. #### ThemePicker Redesign - Themes reorganised into semantic groups: **Catppuccin**, **Nord**, **Retro** (formerly Gruvbox), **Tokyo Night**, and a new **Psysonic Themes** section (Classic Winamp, Poison, Nucleo, Psychowave). The separate *Experimental* group is removed. - "Gruvbox" renamed to **Retro**. #### Image Lightbox - Clicking the **album cover** on an Album Detail page or the **artist avatar** on an Artist Detail page opens a full-screen lightbox showing the high-resolution image (up to 2000 px). Click outside or press Escape to close. - Both use a shared `CoverLightbox` component — consistent behaviour across the app. #### Queue Toolbar — Complete Redesign - The queue panel now has a **centred icon toolbar** with round buttons (border-radius 50%, solid accent fill when active): - **Shuffle** — Fisher-Yates shuffle, keeps current track at position 0 - **Save** — save queue as playlist - **Load** — load a playlist into the queue - **Clear** — remove all tracks from the queue - **Gapless** (∞ icon) — toggle gapless playback on/off - **Crossfade** (≋ icon) — toggle crossfade on/off; when inactive, clicking enables crossfade *and* opens a popover slider - **Crossfade popover**: a small overlay below the Crossfade button with a range slider (1–10 s) to configure the fade duration. Clicking the active Crossfade button disables crossfade and closes the popover. Closes on outside click. - **Queue header**: title enlarged to 16 px/700, track count and total duration shown inline next to the title in accent colour. Close (×) button removed. - **Tech info overlay**: codec and bitrate displayed as a frosted glass badge (`backdrop-filter: blur(4px)`) overlaid on the bottom edge of the cover art image. #### French & Dutch Translations - Full UI translation added for **French** (`fr`) and **Dutch** (`nl`) — all namespaces covered. - Language selector in Settings now lists all four languages sorted alphabetically (Dutch, English, French, German). #### Help Page — Layout & Content Update - **2-column grid layout** for the accordion — makes better use of horizontal space on widescreen displays. - New Q&A entry: **Crossfade & Gapless** (Playback section) — explains what each feature does, how to enable them, and their experimental status. - Updated entries: Themes (reflects all 21 themes), Languages (4 languages), Scrobbling (direct Last.fm), System browser links, Linux distribution (no AppImage). #### Settings — Experimental Labels - Crossfade and Gapless toggles in Settings → Playback now show an **"Experimental"** badge next to their label. ### Fixed - **Now Playing dropdown — refresh button**: The refresh icon spin was applied to the entire button, blocking clicks during the animation. Spin state is now separate from the background poll loading state — the button is always clickable, and the icon spins for a minimum of 600 ms for clear visual feedback. - **Crossfade popover positioning**: Popover was overflowing the right edge of the viewport. Now right-aligned relative to the Crossfade button and positioned below it. --- ## [1.7.2] - 2026-03-20 ### Fixed - **Last.fm**: Stability improvements for the authentication flow and session handling. - **Settings**: Minor display fixes in the Last.fm profile badge. --- ## [1.7.1] - 2026-03-20 ### Fixed - **Build**: TypeScript errors in Settings.tsx and Statistics.tsx that broke the release build. --- ## [1.7.0] - 2026-03-20 ### Added #### Last.fm Integration *(Beta)* - **Direct Last.fm scrobbling**: Tracks are scrobbled directly via the Last.fm API at 50% playback — no longer routed through Navidrome. Configure in Settings → Server with your Last.fm username and password. - **Now Playing updates**: Last.fm receives the currently playing track in real time. - **Love / Unlove**: Heart button in the Now Playing page and player bar syncs the loved state with Last.fm instantly. - **Last.fm profile badge** in Settings → Server: shows your scrobble count and member since year once connected. - ⚠️ **This feature is in beta.** Session management and edge cases are still being refined. #### Similar Artists - Artist detail pages now show a **Similar Artists** section below Top Tracks, sourced from Last.fm and filtered to artists actually present in your library. Shown as chip buttons — click to navigate directly to that artist's page. - Requires Last.fm to be configured. Hidden when Last.fm is not connected or no library matches are found. #### Statistics — Last.fm Stats - New **Last.fm Stats** section on the Statistics page (requires Last.fm): top artists, albums, and tracks with proportional play-count bars. - **Period filter**: switch between Last 7 Days, 1 Month, 3 Months, 6 Months, 12 Months, and Overall. - **Recent Scrobbles**: last 20 scrobbled tracks with relative timestamps and a "Now Playing" badge for the currently active entry. - **Genre Distribution removed**: replaced by the Last.fm stats sections. #### Psychowave Theme *(Work in Progress)* - New **Psychowave** theme: a deep purple/violet dark theme inspired by synthwave and retrowave aesthetics. - ⚠️ **Still in active development** — colors and details will continue to be refined in upcoming releases. #### Tooltip System — TooltipPortal - All tooltips now use a **React portal** rendered into `document.body` at `z-index: 99999`. Replaces the previous CSS `::after` pseudo-element system. - Fixes tooltip clipping inside `overflow: hidden` containers (player bar, queue panel, EQ). - Fixes black OS-native tooltip boxes that appeared on native `title=` attributes — all converted to `data-tooltip`. - Smart edge detection: tooltip flips position automatically when it would overflow the viewport. #### Custom Select Dropdowns - **Theme**, **Language**, and **EQ preset** selectors are now rendered as styled portal dropdowns — no more unstyled native `