diff --git a/src/components/ui/alert-dialog.tsx b/src/components/ui/alert-dialog.tsx index 5284517e..1c376739 100644 --- a/src/components/ui/alert-dialog.tsx +++ b/src/components/ui/alert-dialog.tsx @@ -34,7 +34,7 @@ function AlertDialogOverlay({ ))} diff --git a/src/components/ui/sonner.tsx b/src/components/ui/sonner.tsx index 04e0013c..264f0503 100644 --- a/src/components/ui/sonner.tsx +++ b/src/components/ui/sonner.tsx @@ -1,4 +1,4 @@ -import { useTheme } from "next-themes"; +import { useTheme } from "@/components/theme-provider"; import { Toaster as Sonner, type ToasterProps, toast } from "sonner"; import { useRef } from "react"; diff --git a/src/index.css b/src/index.css index 54785e07..7ce244ea 100644 --- a/src/index.css +++ b/src/index.css @@ -79,6 +79,9 @@ --scrollbar-thumb: #c1c1c3; --scrollbar-thumb-hover: #a1a1a3; --scrollbar-track: #f3f4f6; + + /* Modal Overlay - Light Mode */ + --bg-overlay: rgba(0, 0, 0, 0.5); } @theme inline { @@ -168,6 +171,9 @@ /* NEW SEMANTIC TEXT COLOR MAPPINGS - Creates Tailwind text classes */ --color-foreground-secondary: var(--foreground-secondary); --color-foreground-subtle: var(--foreground-subtle); + + /* Modal Overlay Mapping - Creates Tailwind bg-overlay class */ + --color-overlay: var(--bg-overlay); } .dark { @@ -233,6 +239,9 @@ --scrollbar-thumb: #434345; --scrollbar-thumb-hover: #5a5a5d; --scrollbar-track: #18181b; + + /* Modal Overlay - Dark Mode */ + --bg-overlay: rgba(0, 0, 0, 0.7); } @layer base { diff --git a/src/locales/en.json b/src/locales/en.json index d3d522c2..d83a9b2a 100644 --- a/src/locales/en.json +++ b/src/locales/en.json @@ -2427,5 +2427,9 @@ "stats": "Stats", "consoleTab": "Console", "startContainerToAccess": "Start the container to access the console" + }, + "theme": { + "switchToLight": "Switch to Light", + "switchToDark": "Switch to Dark" } } diff --git a/src/ui/desktop/DesktopApp.tsx b/src/ui/desktop/DesktopApp.tsx index 9fd5c141..d5c38610 100644 --- a/src/ui/desktop/DesktopApp.tsx +++ b/src/ui/desktop/DesktopApp.tsx @@ -200,8 +200,8 @@ function AppContent() { 225deg, transparent, transparent 35px, - rgba(255, 255, 255, 0.03) 35px, - rgba(255, 255, 255, 0.03) 37px + var(--border-subtle) 35px, + var(--border-subtle) 37px )`, }} > @@ -310,17 +310,16 @@ function AppContent() { {isTransitioning && (
diff --git a/src/ui/desktop/apps/features/docker/components/ConsoleTerminal.tsx b/src/ui/desktop/apps/features/docker/components/ConsoleTerminal.tsx index 6b953860..30b474ff 100644 --- a/src/ui/desktop/apps/features/docker/components/ConsoleTerminal.tsx +++ b/src/ui/desktop/apps/features/docker/components/ConsoleTerminal.tsx @@ -103,8 +103,8 @@ export function ConsoleTerminal({ .trim(); terminal.options.theme = { - background: backgroundColor || "#ffffff", - foreground: foregroundColor || "#09090b", + background: backgroundColor || "var(--bg-elevated)", + foreground: foregroundColor || "var(--foreground)", }; setTimeout(() => { diff --git a/src/ui/desktop/apps/features/docker/components/ContainerCard.tsx b/src/ui/desktop/apps/features/docker/components/ContainerCard.tsx index c45ab169..788bb581 100644 --- a/src/ui/desktop/apps/features/docker/components/ContainerCard.tsx +++ b/src/ui/desktop/apps/features/docker/components/ContainerCard.tsx @@ -312,7 +312,7 @@ export function ContainerCard({
-
+
{container.state !== "running" && ( @@ -325,7 +325,7 @@ export function ContainerCard({ disabled={isLoading} > {isStarting ? ( -
+
) : ( )} @@ -346,7 +346,7 @@ export function ContainerCard({ disabled={isLoading} > {isStopping ? ( -
+
) : ( )} @@ -368,7 +368,7 @@ export function ContainerCard({ disabled={isLoading} > {isPausing ? ( -
+
) : container.state === "paused" ? ( ) : ( @@ -394,7 +394,7 @@ export function ContainerCard({ disabled={isLoading || container.state === "exited"} > {isRestarting ? ( -
+
) : ( )} diff --git a/src/ui/desktop/apps/features/docker/components/LogViewer.tsx b/src/ui/desktop/apps/features/docker/components/LogViewer.tsx index e00d2387..0babe7f7 100644 --- a/src/ui/desktop/apps/features/docker/components/LogViewer.tsx +++ b/src/ui/desktop/apps/features/docker/components/LogViewer.tsx @@ -184,7 +184,7 @@ export function LogViewer({ className="flex-1 h-full" > {isLoading ? ( -
+
) : ( )} @@ -197,7 +197,7 @@ export function LogViewer({ className="flex-1 h-full" > {isDownloading ? ( -
+
) : ( )} diff --git a/src/ui/desktop/apps/features/file-manager/FileManagerGrid.tsx b/src/ui/desktop/apps/features/file-manager/FileManagerGrid.tsx index 11768f29..020c7a7b 100644 --- a/src/ui/desktop/apps/features/file-manager/FileManagerGrid.tsx +++ b/src/ui/desktop/apps/features/file-manager/FileManagerGrid.tsx @@ -1091,7 +1091,7 @@ export function FileManagerGrid({ onKeyDown={handleEditKeyDown} onBlur={handleEditConfirm} className={cn( - "max-w-[120px] min-w-[60px] w-fit rounded-md border border-gray-300 dark:border-gray-600 bg-white dark:bg-gray-800 px-2 py-1 text-xs shadow-xs transition-[color,box-shadow] outline-none", + "max-w-[120px] min-w-[60px] w-fit rounded-md border border-edge bg-elevated px-2 py-1 text-xs shadow-xs transition-[color,box-shadow] outline-none", "text-center text-foreground placeholder:text-muted-foreground", "focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[2px]", )} @@ -1180,7 +1180,7 @@ export function FileManagerGrid({ onKeyDown={handleEditKeyDown} onBlur={handleEditConfirm} className={cn( - "flex-1 min-w-0 max-w-[200px] rounded-md border border-gray-300 dark:border-gray-600 bg-white dark:bg-gray-800 px-2 py-1 text-sm shadow-xs transition-[color,box-shadow] outline-none", + "flex-1 min-w-0 max-w-[200px] rounded-md border border-edge bg-elevated px-2 py-1 text-sm shadow-xs transition-[color,box-shadow] outline-none", "text-foreground placeholder:text-muted-foreground", "focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[2px]", )} @@ -1370,7 +1370,7 @@ function CreateIntentGridItem({ onChange={(e) => setInputName(e.target.value)} onKeyDown={handleKeyDown} onBlur={() => onConfirm?.(inputName.trim())} - className="w-full max-w-[120px] rounded-md border border-gray-300 dark:border-gray-600 bg-white dark:bg-gray-800 px-2 py-1 text-xs text-center text-foreground placeholder:text-muted-foreground focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[2px] outline-none" + className="w-full max-w-[120px] rounded-md border border-edge bg-elevated px-2 py-1 text-xs text-center text-foreground placeholder:text-muted-foreground focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[2px] outline-none" placeholder={ intent.type === "directory" ? t("fileManager.folderName") @@ -1426,7 +1426,7 @@ function CreateIntentListItem({ onChange={(e) => setInputName(e.target.value)} onKeyDown={handleKeyDown} onBlur={() => onConfirm?.(inputName.trim())} - className="flex-1 min-w-0 max-w-[200px] rounded-md border border-gray-300 dark:border-gray-600 bg-white dark:bg-gray-800 px-2 py-1 text-sm text-foreground placeholder:text-muted-foreground focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[2px] outline-none" + className="flex-1 min-w-0 max-w-[200px] rounded-md border border-edge bg-elevated px-2 py-1 text-sm text-foreground placeholder:text-muted-foreground focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[2px] outline-none" placeholder={ intent.type === "directory" ? t("fileManager.folderName") diff --git a/src/ui/desktop/apps/features/file-manager/components/FileViewer.tsx b/src/ui/desktop/apps/features/file-manager/components/FileViewer.tsx index 8de9c877..f294c83b 100644 --- a/src/ui/desktop/apps/features/file-manager/components/FileViewer.tsx +++ b/src/ui/desktop/apps/features/file-manager/components/FileViewer.tsx @@ -1255,7 +1255,7 @@ export function FileViewer({
-
+
{pdfError ? (
diff --git a/src/ui/desktop/apps/features/server-stats/widgets/NetworkWidget.tsx b/src/ui/desktop/apps/features/server-stats/widgets/NetworkWidget.tsx index 00299ee6..08eaf348 100644 --- a/src/ui/desktop/apps/features/server-stats/widgets/NetworkWidget.tsx +++ b/src/ui/desktop/apps/features/server-stats/widgets/NetworkWidget.tsx @@ -57,7 +57,7 @@ export function NetworkWidget({ metrics }: NetworkWidgetProps) { className={`text-xs px-2.5 py-0.5 rounded-full font-medium ${ iface.state === "UP" ? "bg-green-500/20 text-green-400" - : "bg-gray-500/20 text-foreground-subtle" + : "bg-surface text-foreground-subtle" }`} > {iface.state} diff --git a/src/ui/desktop/apps/features/terminal/command-history/CommandAutocomplete.tsx b/src/ui/desktop/apps/features/terminal/command-history/CommandAutocomplete.tsx index 40ef12b9..9099ca2e 100644 --- a/src/ui/desktop/apps/features/terminal/command-history/CommandAutocomplete.tsx +++ b/src/ui/desktop/apps/features/terminal/command-history/CommandAutocomplete.tsx @@ -56,7 +56,7 @@ export function CommandAutocomplete({ className={cn( "px-3 py-1.5 text-sm font-mono cursor-pointer transition-colors", "hover:bg-hover", - index === selectedIndex && "bg-gray-500/20 text-muted-foreground", + index === selectedIndex && "bg-surface text-muted-foreground", )} onClick={() => onSelect(suggestion)} onMouseEnter={() => {}} diff --git a/src/ui/desktop/apps/features/tunnel/TunnelManager.tsx b/src/ui/desktop/apps/features/tunnel/TunnelManager.tsx index 11110b40..ea7346cc 100644 --- a/src/ui/desktop/apps/features/tunnel/TunnelManager.tsx +++ b/src/ui/desktop/apps/features/tunnel/TunnelManager.tsx @@ -127,10 +127,10 @@ export function TunnelManager({ ) : (
-

+

{t("tunnel.noTunnelsConfigured")}

-

+

{t("tunnel.configureTunnelsInHostSettings")}

diff --git a/src/ui/desktop/apps/host-manager/credentials/CredentialEditor.tsx b/src/ui/desktop/apps/host-manager/credentials/CredentialEditor.tsx index bc9ff2fe..795ffdec 100644 --- a/src/ui/desktop/apps/host-manager/credentials/CredentialEditor.tsx +++ b/src/ui/desktop/apps/host-manager/credentials/CredentialEditor.tsx @@ -616,12 +616,12 @@ export function CredentialEditor({ (tag: string, idx: number) => ( {tag}