From 973d575b5190bc3f7c933bea75cedae92fe428a3 Mon Sep 17 00:00:00 2001 From: Tristan Michael Date: Mon, 6 Apr 2026 17:17:00 -0700 Subject: [PATCH 1/8] feat: add onyx dark theme support Add onyx theme as a new dark theme option. Register it in the dark themes set, add the theme option to the settings dropdown, and define complete color variables and scrollbar styling for the onyx theme. Also improve sync error handling to gracefully skip upload and conflict resolution actions when files are missing, preventing sync failures due to files moved or deleted between action computation and execution. --- apps/tauri/src/app.css | 27 +++++++++++++++++++ .../src/lib/screens/SettingsScreen.svelte | 1 + apps/tauri/src/lib/stores/app.svelte.ts | 2 +- crates/onyx-core/src/sync.rs | 24 +++++++++++++++-- 4 files changed, 51 insertions(+), 3 deletions(-) diff --git a/apps/tauri/src/app.css b/apps/tauri/src/app.css index c6f76be..926b3cf 100644 --- a/apps/tauri/src/app.css +++ b/apps/tauri/src/app.css @@ -139,6 +139,33 @@ body { --color-danger: #ff5555; } +[data-theme="onyx"] { + --color-primary: #ffffff; + --color-primary-hover: #e0e0e0; + --color-surface-light: #0a0a0a; + --color-surface-dark: #0a0a0a; + --color-card-light: #161616; + --color-card-dark: #161616; + --color-text-light: #c4a95a; + --color-text-dark: #c4a95a; + --color-text-secondary-light: #917a3e; + --color-text-secondary-dark: #917a3e; + --color-border-light: #2a2418; + --color-border-dark: #2a2418; + --color-danger: #ef4444; +} + +[data-theme="onyx"] * { + scrollbar-color: #917a3e transparent; +} +[data-theme="onyx"] ::-webkit-scrollbar-thumb { + background: #917a3e; +} +[data-theme="onyx"] select option { + background-color: #0a0a0a; + color: #c4a95a; +} + [data-theme="solarized"] { --color-primary: #268bd2; --color-primary-hover: #1e7ac0; diff --git a/apps/tauri/src/lib/screens/SettingsScreen.svelte b/apps/tauri/src/lib/screens/SettingsScreen.svelte index f35bc72..11c3219 100644 --- a/apps/tauri/src/lib/screens/SettingsScreen.svelte +++ b/apps/tauri/src/lib/screens/SettingsScreen.svelte @@ -259,6 +259,7 @@ + diff --git a/apps/tauri/src/lib/stores/app.svelte.ts b/apps/tauri/src/lib/stores/app.svelte.ts index c1f8bec..298c7d7 100644 --- a/apps/tauri/src/lib/stores/app.svelte.ts +++ b/apps/tauri/src/lib/stores/app.svelte.ts @@ -67,7 +67,7 @@ let hasWorkspace = $derived( Object.keys(config.workspaces).length > 0, ); -const DARK_THEMES = new Set(["dark", "nord", "dracula", "solarized"]); +const DARK_THEMES = new Set(["dark", "nord", "dracula", "solarized", "onyx"]); let currentTheme = $derived( config?.current_workspace ? config.workspaces[config.current_workspace]?.theme ?? null diff --git a/crates/onyx-core/src/sync.rs b/crates/onyx-core/src/sync.rs index dc7de5f..7f2c5e5 100644 --- a/crates/onyx-core/src/sync.rs +++ b/crates/onyx-core/src/sync.rs @@ -688,7 +688,18 @@ async fn execute_action( match action { SyncAction::Upload { path } => { let local_path = workspace_path.join(path.replace('/', std::path::MAIN_SEPARATOR_STR)); - let data = std::fs::read(&local_path)?; + let data = match std::fs::read(&local_path) { + Ok(d) => d, + Err(e) if e.kind() == std::io::ErrorKind::NotFound => { + // File was moved or deleted since the action was computed (e.g. task + // moved between lists). Drop the stale upload and clean up sync state + // so the next cycle can re-evaluate from a clean baseline. + report(&format!(" - Skipping upload for missing file {}", path)); + sync_state.files.remove(path.as_str()); + return Ok(()); + } + Err(e) => return Err(e.into()), + }; let checksum = compute_checksum(&data); if let Some(parent) = path_parent(path) { @@ -707,7 +718,16 @@ async fn execute_action( SyncAction::Conflict { path } => { let local_path = workspace_path.join(path.replace('/', std::path::MAIN_SEPARATOR_STR)); - let local_data = std::fs::read(&local_path)?; + let local_data = match std::fs::read(&local_path) { + Ok(d) => d, + Err(e) if e.kind() == std::io::ErrorKind::NotFound => { + // Local file gone — treat as remote-wins: download it on next cycle. + report(&format!(" - Skipping conflict for missing local file {}", path)); + sync_state.files.remove(path.as_str()); + return Ok(()); + } + Err(e) => return Err(e.into()), + }; let local_checksum = compute_checksum(&local_data); let remote_data = client.get_file(path).await?; From c13fbde1b8ee9d6e83b04a68139bbd934392a44c Mon Sep 17 00:00:00 2001 From: Tristan Michael Date: Mon, 6 Apr 2026 17:23:25 -0700 Subject: [PATCH 2/8] Tweak onyx theme colors to warmer gold tones Give the onyx theme a warmer, gold-accented look and slightly lighten deep blacks to improve contrast and legibility. Replace pure white primary colors with a soft yellow/gold, adjust surface and card blacks to be a bit lighter, and update related elements (select options, primary button text, checkbox borders, hover/focus highlights, and Linux window border) so interactive elements read clearly against the new palette. --- apps/tauri/src/app.css | 37 ++++++++++++++++++++++++++++++------- 1 file changed, 30 insertions(+), 7 deletions(-) diff --git a/apps/tauri/src/app.css b/apps/tauri/src/app.css index 926b3cf..c8c00be 100644 --- a/apps/tauri/src/app.css +++ b/apps/tauri/src/app.css @@ -140,12 +140,12 @@ body { } [data-theme="onyx"] { - --color-primary: #ffffff; - --color-primary-hover: #e0e0e0; - --color-surface-light: #0a0a0a; - --color-surface-dark: #0a0a0a; - --color-card-light: #161616; - --color-card-dark: #161616; + --color-primary: #f5ecd0; + --color-primary-hover: #e0d5b3; + --color-surface-light: #141414; + --color-surface-dark: #141414; + --color-card-light: #1e1e1e; + --color-card-dark: #1e1e1e; --color-text-light: #c4a95a; --color-text-dark: #c4a95a; --color-text-secondary-light: #917a3e; @@ -162,10 +162,33 @@ body { background: #917a3e; } [data-theme="onyx"] select option { - background-color: #0a0a0a; + background-color: #141414; color: #c4a95a; } +/* Dark text on primary buttons/FAB */ +[data-theme="onyx"] .bg-primary { + color: #141414; +} + +/* Checkbox borders: gold instead of gray */ +[data-theme="onyx"] .border-gray-400, +[data-theme="onyx"] .border-gray-500 { + border-color: #917a3e; +} + +/* Hover/focus highlights: gold tint instead of white */ +[data-theme="onyx"] .dark\:hover\:bg-white\/10:hover, +[data-theme="onyx"] .dark\:hover\:bg-white\/5:hover, +[data-theme="onyx"] .dark\:bg-white\/10 { + background-color: rgb(196 169 90 / 0.1); +} + +/* Linux window border */ +[data-theme="onyx"] .linux-window-border { + border-color: rgba(196, 169, 90, 0.15); +} + [data-theme="solarized"] { --color-primary: #268bd2; --color-primary-hover: #1e7ac0; From c4d6d28e12479b445e431d896e05a6d68dd16c4b Mon Sep 17 00:00:00 2001 From: Tristan Michael Date: Mon, 6 Apr 2026 17:25:02 -0700 Subject: [PATCH 3/8] Lighten onyx gold shades Adjust onyx theme gold tones to be slightly lighter and warmer for improved contrast and visual clarity. This updates primary text, secondary text, scrollbar, select option text, checkbox borders, hover/focus highlight backgrounds, and the Linux window border to use the new lighter gold color values so the UI reads better against dark surfaces. --- apps/tauri/src/app.css | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/apps/tauri/src/app.css b/apps/tauri/src/app.css index c8c00be..365f815 100644 --- a/apps/tauri/src/app.css +++ b/apps/tauri/src/app.css @@ -146,24 +146,24 @@ body { --color-surface-dark: #141414; --color-card-light: #1e1e1e; --color-card-dark: #1e1e1e; - --color-text-light: #c4a95a; - --color-text-dark: #c4a95a; - --color-text-secondary-light: #917a3e; - --color-text-secondary-dark: #917a3e; + --color-text-light: #d4bc72; + --color-text-dark: #d4bc72; + --color-text-secondary-light: #a6905a; + --color-text-secondary-dark: #a6905a; --color-border-light: #2a2418; --color-border-dark: #2a2418; --color-danger: #ef4444; } [data-theme="onyx"] * { - scrollbar-color: #917a3e transparent; + scrollbar-color: #a6905a transparent; } [data-theme="onyx"] ::-webkit-scrollbar-thumb { - background: #917a3e; + background: #a6905a; } [data-theme="onyx"] select option { background-color: #141414; - color: #c4a95a; + color: #d4bc72; } /* Dark text on primary buttons/FAB */ @@ -174,19 +174,19 @@ body { /* Checkbox borders: gold instead of gray */ [data-theme="onyx"] .border-gray-400, [data-theme="onyx"] .border-gray-500 { - border-color: #917a3e; + border-color: #a6905a; } /* Hover/focus highlights: gold tint instead of white */ [data-theme="onyx"] .dark\:hover\:bg-white\/10:hover, [data-theme="onyx"] .dark\:hover\:bg-white\/5:hover, [data-theme="onyx"] .dark\:bg-white\/10 { - background-color: rgb(196 169 90 / 0.1); + background-color: rgb(212 188 114 / 0.1); } /* Linux window border */ [data-theme="onyx"] .linux-window-border { - border-color: rgba(196, 169, 90, 0.15); + border-color: rgba(212, 188, 114, 0.15); } [data-theme="solarized"] { From 42ef8584ab9fa4fef68ec810d81cbe61c8101a56 Mon Sep 17 00:00:00 2001 From: Tristan Michael Date: Mon, 6 Apr 2026 17:25:46 -0700 Subject: [PATCH 4/8] Make large "+ new task" FAB use text gold Make the prominent "+ new task" floating action button match the primary text gold color in the Onyx theme. The FAB previously used the cream primary color; this change sets its background to #d4bc72 so the button visually aligns with other gold text elements in the UI. --- apps/tauri/src/app.css | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/apps/tauri/src/app.css b/apps/tauri/src/app.css index 365f815..0b71952 100644 --- a/apps/tauri/src/app.css +++ b/apps/tauri/src/app.css @@ -171,6 +171,11 @@ body { color: #141414; } +/* FAB: match text gold instead of cream primary */ +[data-theme="onyx"] .rounded-full.bg-primary.shadow-lg { + background-color: #d4bc72; +} + /* Checkbox borders: gold instead of gray */ [data-theme="onyx"] .border-gray-400, [data-theme="onyx"] .border-gray-500 { From b83a54328edb418d795ca3110e4ac394746cd06c Mon Sep 17 00:00:00 2001 From: Tristan Michael Date: Mon, 6 Apr 2026 17:28:29 -0700 Subject: [PATCH 5/8] Brighten dividers and submenu outlines Make the divider and submenu outline colors a brighter gold to improve contrast and visual clarity. Updated CSS variables --color-border-light and --color-border-dark from a dark brown (#2a2418) to a warmer gold-brown (#5c4d2e). This change enhances the UI by making separators and submenu outlines more visible and consistent with the app's gold text accents. --- apps/tauri/src/app.css | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/apps/tauri/src/app.css b/apps/tauri/src/app.css index 0b71952..f7e5fb3 100644 --- a/apps/tauri/src/app.css +++ b/apps/tauri/src/app.css @@ -150,8 +150,8 @@ body { --color-text-dark: #d4bc72; --color-text-secondary-light: #a6905a; --color-text-secondary-dark: #a6905a; - --color-border-light: #2a2418; - --color-border-dark: #2a2418; + --color-border-light: #5c4d2e; + --color-border-dark: #5c4d2e; --color-danger: #ef4444; } From 5756e19ceb9c490883c4ed071a689c88c0a4511a Mon Sep 17 00:00:00 2001 From: Tristan Michael Date: Mon, 6 Apr 2026 17:29:49 -0700 Subject: [PATCH 6/8] Desaturate onyx theme gold tones Tweak several onyx theme color variables to slightly desaturate the gold accents so the UI appears less saturated and more balanced. Update text, option, and FAB colors, hover/background and border RGBA values, and add a new thicker onyx-border utility for a prominent gold window border. --- apps/tauri/src/app.css | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) diff --git a/apps/tauri/src/app.css b/apps/tauri/src/app.css index f7e5fb3..55bf4f3 100644 --- a/apps/tauri/src/app.css +++ b/apps/tauri/src/app.css @@ -146,8 +146,8 @@ body { --color-surface-dark: #141414; --color-card-light: #1e1e1e; --color-card-dark: #1e1e1e; - --color-text-light: #d4bc72; - --color-text-dark: #d4bc72; + --color-text-light: #d1bf82; + --color-text-dark: #d1bf82; --color-text-secondary-light: #a6905a; --color-text-secondary-dark: #a6905a; --color-border-light: #5c4d2e; @@ -163,7 +163,7 @@ body { } [data-theme="onyx"] select option { background-color: #141414; - color: #d4bc72; + color: #d1bf82; } /* Dark text on primary buttons/FAB */ @@ -173,7 +173,7 @@ body { /* FAB: match text gold instead of cream primary */ [data-theme="onyx"] .rounded-full.bg-primary.shadow-lg { - background-color: #d4bc72; + background-color: #d1bf82; } /* Checkbox borders: gold instead of gray */ @@ -186,12 +186,17 @@ body { [data-theme="onyx"] .dark\:hover\:bg-white\/10:hover, [data-theme="onyx"] .dark\:hover\:bg-white\/5:hover, [data-theme="onyx"] .dark\:bg-white\/10 { - background-color: rgb(212 188 114 / 0.1); + background-color: rgb(209 191 130 / 0.1); } /* Linux window border */ [data-theme="onyx"] .linux-window-border { - border-color: rgba(212, 188, 114, 0.15); + border-color: rgba(209, 191, 130, 0.15); +} + +/* Thick gold window border */ +[data-theme="onyx"] .onyx-border { + border: 3px solid #a6905a; } [data-theme="solarized"] { From 58e205a0248ff88c55bfb85336505ed189dfdbea Mon Sep 17 00:00:00 2001 From: Tristan Michael Date: Mon, 6 Apr 2026 17:30:43 -0700 Subject: [PATCH 7/8] Fix visibility of completed checkmarks on onyx theme Ensure checkmarks under the "completed" state are visible on the near-white primary background for the onyx theme. The change adjusts selector scoping so dark text and icons (including elements with .text-white inside .bg-primary) are explicitly styled with a dark color, preventing white-on-near-white contrast issues. --- apps/tauri/src/app.css | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/apps/tauri/src/app.css b/apps/tauri/src/app.css index 55bf4f3..dc8b780 100644 --- a/apps/tauri/src/app.css +++ b/apps/tauri/src/app.css @@ -166,8 +166,9 @@ body { color: #d1bf82; } -/* Dark text on primary buttons/FAB */ -[data-theme="onyx"] .bg-primary { +/* Dark text/icons on primary buttons/FAB */ +[data-theme="onyx"] .bg-primary, +[data-theme="onyx"] .bg-primary .text-white { color: #141414; } From 9071f46050ef9f704386fb5d1be3196f44ab2d96 Mon Sep 17 00:00:00 2001 From: Tristan Michael Date: Mon, 6 Apr 2026 17:31:08 -0700 Subject: [PATCH 8/8] Rename Onyx theme to Black and Gold Update displayed theme name from "Onyx" to "Black and Gold" in the settings UI so the theme matches the requested branding. This change ensures users see the new theme name in the theme selector and aligns the UI with the prompt to call the theme Black and Gold. --- apps/tauri/src/App.svelte | 2 +- apps/tauri/src/lib/screens/SettingsScreen.svelte | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/apps/tauri/src/App.svelte b/apps/tauri/src/App.svelte index 5e29705..d9e8773 100644 --- a/apps/tauri/src/App.svelte +++ b/apps/tauri/src/App.svelte @@ -14,7 +14,7 @@
-
+
Nord - +