+ Controls what happens when a downloaded file is rejected (AcoustID mismatch, wrong version, or duration/integrity failure). Independent of post-processing.
+
+
+ When a download is quarantined (AcoustID mismatch or duration/integrity failure), automatically try the next-best candidate instead of failing the track. Off = quarantine and fail immediately.
+
+
+
+ Give every source (Soulseek, then HiFi/Tidal/…) its own retry budget. Each source spends queries × retries-per-query attempts before the track moves on. Worst case across two sources can mean many downloads — use for hard-to-match tracks (e.g. CJK artist names). Requires the option above.
+
+
+
+
+ In exhaustive mode, how many candidates to try per search query per source. The per-source budget is number of search queries × this value. Only used when Exhaustive retry is on.
+
+
+
+
+
@@ -5563,25 +5607,6 @@
Maximum drift between the file's actual length and the metadata source's expected length before the file is quarantined. 0 = auto (3s normal, 5s for tracks >10min). Raise this if tracks routinely quarantine for being a few seconds off (live recordings, alternate masterings, etc). Capped at 60s.
-
-
- When a download is quarantined (AcoustID mismatch or duration/integrity failure), automatically try the next-best candidate instead of failing the track. Off = quarantine and fail immediately.
-
-
-
- Give every source (Soulseek, then HiFi/Tidal/…) its own retry budget. Each source spends queries × retries-per-query attempts before the track moves on. Worst case across two sources can mean many downloads — use for hard-to-match tracks (e.g. CJK artist names). Requires the option above.
-
-
-
-
- In exhaustive mode, how many candidates to try per search query per source. The per-source budget is number of search queries × this value. Only used when Exhaustive retry is on.
-
diff --git a/webui/static/style.css b/webui/static/style.css
index 4c153f12..fb496285 100644
--- a/webui/static/style.css
+++ b/webui/static/style.css
@@ -471,6 +471,22 @@ body:not(.reduce-effects) .nav-button.active:hover {
inset 0 1px 0 rgba(255, 255, 255, 0.12);
}
+/* Reduce-effects mode keeps the sidebar hover/active highlight — the
+ feedback matters for navigation — but only the CHEAP parts: a flat
+ background + border-color change (the base already reserves a 1px
+ transparent border, so no layout shift). The expensive full-effects
+ bits (gradient, transform/translateX, multi-layer box-shadow) stay
+ off so hovering doesn't trigger compositing/repaint churn. */
+body.reduce-effects .nav-button:hover {
+ background: rgba(255, 255, 255, 0.05);
+ border-color: rgba(255, 255, 255, 0.08);
+}
+
+body.reduce-effects .nav-button.active:hover {
+ background: rgba(var(--accent-rgb), 0.18);
+ border-color: rgba(var(--accent-rgb), 0.3);
+}
+
.nav-icon {
width: 40px;
height: 40px;