Fifty-seven built-in theme families, twenty of them new — plus random picks on refresh or view change, and appearance chrome that finally matches the palette you chose. Legacy theme ids migrate instead of silently falling back, background opacity fades only the backdrop, and the PWA manifest reads the same colour as the <meta name="theme-color"> tag.
New
- new Twenty built-in theme pairs — Patina Verdigris, Rhubarb Tart, Bio Abyss, Sumi Ink, Denim Fade, Pistachio Cream, Thunderhead, Desert Rose, Library Mahogany, Wheat Field, Cerulean Skylark, Smoked Plum, Licorice Layer, Terracotta Studio, Frosted Juniper, Candlelit Study, Electric Orchid, Sea Glass, Graphite Prism, and Midnight Firefly. Each ships dark and light variants in
colors.jsondefaults and picks up an auto-background gradient preset inTHEME_BACKGROUND_MAP(models.go,visual-settings.js). - new Random theme modes —
randomThemeModereplaces the legacy boolean with off, refresh, and view. Refresh picks once per page load; view re-picks when switching between bookmarks, config, inbox, and health. The session pick is shared throughThemeLoader; auto dark mode filters the pool to matching variants and falls back todark/lightwhen nothing else fits. Config shows Currently showing while random is on (theme-loader.js,dashboard-visual.js,handlers.goSSRdata-theme-pool). - new Page tab colour dot tip —
tipEditPageTabDotin Config → Help → Tips & tricks and the occasional dashboard toast catalogue (config-help-tips.js, locales).
Fixes
- fix Legacy theme ids map on read and save —
normalizeLegacyThemeID/LEGACY_THEME_MAPcover short ids from early clients (forest,aurora,neon-grid, …). Invalid stored themes fall back tomoss-stone-darkinstead ofcherry-graphite-dark.SaveSettingsnormalizes and validates the theme id against packaged and custom palettes (theme_random.go,models.go,theme-loader.js). - fix Background opacity fades only the backdrop — opacity moved from
body.style.opacitytobody::afterwith--dashboard-bg-opacity, so bookmark rows and chrome stay fully opaque while the gradient or image behind them fades (theme.css,visual-settings.js,dashboard-visual.js). - fix
backgroundTypedefault is none — server default, client fallback, config UI, and field metadata aligned so new installs do not assume a gradient until chosen. Opacity clamped to 0.65–1.0 consistently viaclampBackgroundOpacity()(models.go,dashboard-config.js). - fix Browser chrome follows the active theme — SSR
ThemeColorMetaand PWA manifestbackground_color/theme_colorusethemeBackgroundPrimary()instead of hardcoded light/dark hex pairs (handlers.go,manifest.go). - fix Config appearance toggle layout — boolean fields in the appearance panel use a clearer grid so labels, switches, and ℹ buttons stay aligned when the section wraps (
config-view.css). - fix Shared theme helpers —
getPairedThemeVariantandnormalizeRandomThemeModelive intheme-utils.jssotheme-loader.js,visual-settings.js, and dashboard code no longer duplicate the same logic.
Docs
- fix — What's new modal, config Overview → Latest update, CHANGELOG, README, MANUAL, and Config → Help What's new recap for v2026.07.26;
DASHBOARD_RELEASE→2026.07-dashboard-release-v144,NEXTDASH_WHATS_NEW_DATA_VERSION→whats-new-v202.