diff --git a/CHANGELOG.md b/CHANGELOG.md
index cf33d51..84f73db 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -5,6 +5,27 @@ All notable changes to DLSSync are documented here.
The format follows [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
+## [1.6.4] - 2026-06-02
+
+A visual overhaul. The game detail panel, the library filters, and the About, Settings, and Backups pages were rebuilt, the whole app reads correctly in light mode, and notifications stop repeating themselves and start telling you something worth reading.
+
+### Added
+
+- A "DLL updates ready" notification that sums up what is waiting — "8 updates ready in 3 games" — and opens the Library when you click it, so you are not counting per game.
+
+### Changed
+
+- The game detail panel is part of the window now, not a card floating beside it. The title bar runs the full width with minimize, maximize, and close in the corner where they belong, the whole top edge drags the window, and the panel keeps a fixed header and footer so the cover, the anti-cheat warning, and the Apply button stay put while the rest scrolls. The thin line above the cover takes its color from the game's art.
+- Library filters went from two rows of scattered pills to two compact menus, Launcher and Status, that never wrap; sort, view, and density sit together on the right.
+- About, Settings, and Backups were redesigned for clearer hierarchy and tidier stat cards, and every tab shows one title instead of two.
+- Notifications carry the vendor's logo — NVIDIA, AMD, Intel, Microsoft — in place of a generic glyph.
+
+### Fixed
+
+- Light mode is legible everywhere. White text over a bright cover no longer washes out, and the version picker, command palette, and notifications no longer bleed the blurred cover art into a reddish smear behind the content.
+- The same "new driver available" alert was re-posted on every launch; identical notifications collapse to one now.
+- The command palette search box dropped its boxy focus outline, and the page title no longer appears twice at the top of every tab.
+
## [1.6.3] - 2026-06-01
DLSSync speaks your language now, and it stops standing between you and the DLSS Enabler.
@@ -94,6 +115,7 @@ of the Arc desktop package, and install progress no longer breaks when you switc
- AMD opens its official download page instead of a constructed installer URL. The direct `.exe` is gated behind a license prompt and its filename changes per release, so a fabricated link was unreliable; version and changelog detection are unchanged.
- Vendor installer exit codes are reported with a readable message. Intel's "no compatible device" (exit code 8) now explains the GPU may be OEM-locked or need a different driver branch, pointing to the manufacturer or Windows Update.
+[1.6.4]: https://github.com/xt0n1-t3ch/DLSSync/releases/tag/v1.6.4
[1.6.3]: https://github.com/xt0n1-t3ch/DLSSync/releases/tag/v1.6.3
[1.6.2]: https://github.com/xt0n1-t3ch/DLSSync/releases/tag/v1.6.2
[1.6.1]: https://github.com/xt0n1-t3ch/DLSSync/releases/tag/v1.6.1
diff --git a/Cargo.lock b/Cargo.lock
index 946cd78..e8e295b 100644
--- a/Cargo.lock
+++ b/Cargo.lock
@@ -105,7 +105,7 @@ dependencies = [
[[package]]
name = "anticheat-detect"
-version = "1.6.3"
+version = "1.6.4"
dependencies = [
"jwalk",
"memchr",
@@ -352,7 +352,7 @@ checksum = "c08606f8c3cbf4ce6ec8e28fb0014a2c086708fe954eaa885384a6165172e7e8"
[[package]]
name = "backup-store"
-version = "1.6.3"
+version = "1.6.4"
dependencies = [
"chrono",
"rusqlite",
@@ -1094,7 +1094,7 @@ dependencies = [
[[package]]
name = "dll-catalog"
-version = "1.6.3"
+version = "1.6.4"
dependencies = [
"bytes",
"chrono",
@@ -1117,7 +1117,7 @@ dependencies = [
[[package]]
name = "dll-scanner"
-version = "1.6.3"
+version = "1.6.4"
dependencies = [
"jwalk",
"once_cell",
@@ -1154,7 +1154,7 @@ dependencies = [
[[package]]
name = "dlssync"
-version = "1.6.3"
+version = "1.6.4"
dependencies = [
"anticheat-detect",
"anyhow",
@@ -1236,7 +1236,7 @@ dependencies = [
[[package]]
name = "driver-catalog"
-version = "1.6.3"
+version = "1.6.4"
dependencies = [
"async-trait",
"chrono",
@@ -1252,7 +1252,7 @@ dependencies = [
[[package]]
name = "driver-install"
-version = "1.6.3"
+version = "1.6.4"
dependencies = [
"dll-catalog",
"futures-util",
@@ -2558,7 +2558,7 @@ dependencies = [
[[package]]
name = "launcher-scan"
-version = "1.6.3"
+version = "1.6.4"
dependencies = [
"serde",
"serde_json",
@@ -2695,7 +2695,7 @@ dependencies = [
[[package]]
name = "manifest-builder"
-version = "1.6.3"
+version = "1.6.4"
dependencies = [
"anyhow",
"chrono",
@@ -2880,7 +2880,7 @@ dependencies = [
[[package]]
name = "notifications-store"
-version = "1.6.3"
+version = "1.6.4"
dependencies = [
"chrono",
"rusqlite",
@@ -2972,7 +2972,7 @@ dependencies = [
[[package]]
name = "nvapi-drs"
-version = "1.6.3"
+version = "1.6.4"
dependencies = [
"serde",
"windows-sys 0.59.0",
@@ -3335,7 +3335,7 @@ checksum = "df94ce210e5bc13cb6651479fa48d14f601d9858cfe0467f43ae157023b938d3"
[[package]]
name = "pe-version"
-version = "1.6.3"
+version = "1.6.4"
dependencies = [
"pelite",
"serde",
@@ -4705,7 +4705,7 @@ dependencies = [
[[package]]
name = "system-drivers"
-version = "1.6.3"
+version = "1.6.4"
dependencies = [
"serde",
"tempfile",
diff --git a/Cargo.toml b/Cargo.toml
index c2181b1..3b2e5a4 100644
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -3,7 +3,7 @@ resolver = "2"
members = ["src-tauri", "crates/*"]
[workspace.package]
-version = "1.6.3"
+version = "1.6.4"
edition = "2021"
license = "Apache-2.0"
repository = "https://github.com/xt0n1-t3ch/DLSSync"
diff --git a/crates/notifications-store/src/lib.rs b/crates/notifications-store/src/lib.rs
index 3f3419c..ceb4819 100644
--- a/crates/notifications-store/src/lib.rs
+++ b/crates/notifications-store/src/lib.rs
@@ -25,6 +25,7 @@ pub enum NotificationKind {
CatalogUpdateAvailable,
DriverUpdateAvailable,
SystemDriverUpdateAvailable,
+ DllUpdatesAvailable,
BackupRestored,
ScanFailed,
CatalogRefreshFailed,
@@ -40,6 +41,7 @@ impl NotificationKind {
Self::CatalogUpdateAvailable => "catalog_update_available",
Self::DriverUpdateAvailable => "driver_update_available",
Self::SystemDriverUpdateAvailable => "system_driver_update_available",
+ Self::DllUpdatesAvailable => "dll_updates_available",
Self::BackupRestored => "backup_restored",
Self::ScanFailed => "scan_failed",
Self::CatalogRefreshFailed => "catalog_refresh_failed",
@@ -55,6 +57,7 @@ impl NotificationKind {
"catalog_update_available" => Ok(Self::CatalogUpdateAvailable),
"driver_update_available" => Ok(Self::DriverUpdateAvailable),
"system_driver_update_available" => Ok(Self::SystemDriverUpdateAvailable),
+ "dll_updates_available" => Ok(Self::DllUpdatesAvailable),
"backup_restored" => Ok(Self::BackupRestored),
"scan_failed" => Ok(Self::ScanFailed),
"catalog_refresh_failed" => Ok(Self::CatalogRefreshFailed),
@@ -384,6 +387,7 @@ mod tests {
NotificationKind::CatalogUpdateAvailable,
NotificationKind::DriverUpdateAvailable,
NotificationKind::SystemDriverUpdateAvailable,
+ NotificationKind::DllUpdatesAvailable,
NotificationKind::BackupRestored,
NotificationKind::ScanFailed,
NotificationKind::CatalogRefreshFailed,
diff --git a/frontend/package.json b/frontend/package.json
index e16a319..1989ef3 100644
--- a/frontend/package.json
+++ b/frontend/package.json
@@ -1,7 +1,7 @@
{
"name": "dlssync-frontend",
"private": true,
- "version": "1.6.3",
+ "version": "1.6.4",
"type": "module",
"scripts": {
"dev": "vite",
diff --git a/frontend/src/App.svelte b/frontend/src/App.svelte
index 7250858..fbf5e70 100644
--- a/frontend/src/App.svelte
+++ b/frontend/src/App.svelte
@@ -37,7 +37,7 @@
installDriverInstallListener,
installSystemDriverListener,
} from "./lib/driverInstallEvents";
- import { isLocale, localeFromNavigator, setLocale } from "./lib/i18n/index";
+ import { isLocale, localeFromNavigator, setLocale, t } from "./lib/i18n/index";
let theme = $state(localStorage.getItem("dlssync-theme") || "dark");
@@ -54,6 +54,7 @@
}
let collapsed = $derived($settings?.ui_prefs.sidebar_collapsed ?? false);
+ let railGameId = $derived($currentView === "library" ? $drawerGameId : null);
onMount(async () => {
await loadSettings();
@@ -114,7 +115,7 @@
});
-