Mode
diff --git a/src/components/tasks/kanban-column.tsx b/src/components/tasks/kanban-column.tsx
index 4f483ec..f541593 100644
--- a/src/components/tasks/kanban-column.tsx
+++ b/src/components/tasks/kanban-column.tsx
@@ -10,8 +10,8 @@ import type { KanbanColumn as KanbanColumnType } from "@/lib/api/tasks";
const COLUMN_COLORS: Record
= {
overdue_tasks: "border-red-200 bg-red-50/40 dark:border-red-500/20 dark:bg-red-950/20",
due_soon_tasks: "border-amber-200 bg-amber-50/40 dark:border-amber-500/20 dark:bg-amber-950/20",
- upcoming_tasks: "border-blue-200 bg-blue-50/40 dark:border-blue-500/20 dark:bg-blue-950/20",
- in_progress_tasks: "border-emerald-200 bg-emerald-50/40 dark:border-emerald-500/20 dark:bg-emerald-950/20",
+ upcoming_tasks: "border-[#6B8F71]/20 bg-[#EDF2ED]/50 dark:border-[#8FB896]/20 dark:bg-[#8FB896]/5",
+ in_progress_tasks: "border-[#C4856A]/20 bg-[#FDF3EE]/50 dark:border-[#D4A08A]/20 dark:bg-[#D4A08A]/5",
completed_tasks: "border-stone-200 bg-stone-50/40 dark:border-stone-500/20 dark:bg-stone-950/20",
cancelled_tasks: "border-slate-200 bg-slate-50/40 dark:border-slate-500/20 dark:bg-slate-950/20",
};
@@ -19,8 +19,8 @@ const COLUMN_COLORS: Record = {
const COLUMN_HEADER_COLORS: Record = {
overdue_tasks: "text-red-700 dark:text-red-400",
due_soon_tasks: "text-amber-700 dark:text-amber-400",
- upcoming_tasks: "text-blue-700 dark:text-blue-400",
- in_progress_tasks: "text-emerald-700 dark:text-emerald-400",
+ upcoming_tasks: "text-[#6B8F71] dark:text-[#8FB896]",
+ in_progress_tasks: "text-[#C4856A] dark:text-[#D4A08A]",
completed_tasks: "text-stone-600 dark:text-stone-400",
cancelled_tasks: "text-slate-600 dark:text-slate-400",
};
@@ -28,8 +28,8 @@ const COLUMN_HEADER_COLORS: Record = {
const COUNT_BADGE_COLORS: Record = {
overdue_tasks: "bg-red-100 text-red-700 dark:bg-red-900/50 dark:text-red-300",
due_soon_tasks: "bg-amber-100 text-amber-700 dark:bg-amber-900/50 dark:text-amber-300",
- upcoming_tasks: "bg-blue-100 text-blue-700 dark:bg-blue-900/50 dark:text-blue-300",
- in_progress_tasks: "bg-emerald-100 text-emerald-700 dark:bg-emerald-900/50 dark:text-emerald-300",
+ upcoming_tasks: "bg-[#6B8F71]/15 text-[#6B8F71] dark:bg-[#8FB896]/20 dark:text-[#8FB896]",
+ in_progress_tasks: "bg-[#C4856A]/15 text-[#C4856A] dark:bg-[#D4A08A]/20 dark:text-[#D4A08A]",
completed_tasks: "bg-stone-100 text-stone-700 dark:bg-stone-900/50 dark:text-stone-300",
cancelled_tasks: "bg-slate-100 text-slate-700 dark:bg-slate-900/50 dark:text-slate-300",
};
diff --git a/src/components/ui/theme-switcher.tsx b/src/components/ui/theme-switcher.tsx
index 878f3e3..488d800 100644
--- a/src/components/ui/theme-switcher.tsx
+++ b/src/components/ui/theme-switcher.tsx
@@ -1,6 +1,6 @@
"use client";
-import { Sun, Moon, Monitor, Check } from "lucide-react";
+import { Sun, Moon, Monitor } from "lucide-react";
import { useTheme, type ColorMode } from "@/lib/themes/use-theme";
import { cn } from "@/lib/utils";
@@ -13,11 +13,10 @@ const modeOptions: { value: ColorMode; label: string; icon: React.ElementType }[
/**
* Theme switcher component.
*
- * Shows a grid of 11 color swatches (one per theme) and a
- * light/dark/system segmented toggle.
+ * Light/dark/system segmented toggle.
*/
export function ThemeSwitcher({ className }: { className?: string }) {
- const { themeId, mode, effectiveMode, themes, setTheme, setMode } = useTheme();
+ const { mode, setMode } = useTheme();
return (
@@ -40,42 +39,6 @@ export function ThemeSwitcher({ className }: { className?: string }) {
))}
-
- {/* Theme swatches */}
-
- {themes.map((theme) => {
- const isActive = theme.id === themeId;
- // Show the primary color for the effective mode so the swatch
- // preview matches what the user actually sees.
- const previewColor =
- effectiveMode === "dark"
- ? theme.dark.primary
- : theme.light.primary;
-
- return (
-
- );
- })}
-
);
}
diff --git a/src/lib/themes/theme-config.ts b/src/lib/themes/theme-config.ts
index 58bb092..5d1ff9b 100644
--- a/src/lib/themes/theme-config.ts
+++ b/src/lib/themes/theme-config.ts
@@ -19,305 +19,34 @@ export interface ThemeDefinition {
}
/**
- * All 11 themes matching the KMM/iOS theme system.
- * Hex values are taken directly from ThemeColors.kt.
+ * Single "Warm Sage" theme — the Casera brand palette.
*/
export const themes: ThemeDefinition[] = [
{
id: "default",
- name: "Default",
- description: "Warm orange with teal accents",
+ name: "Warm Sage",
+ description: "Calming sage with warm clay accents",
light: {
- primary: "#E07A3A",
- secondary: "#0D7C66",
- accent: "#D4A574",
- error: "#DC2626",
- bgPrimary: "#FFFFFF",
- bgSecondary: "#F7F7F7",
- textPrimary: "#1C1917",
- textSecondary: "#78716C",
+ primary: "#6B8F71",
+ secondary: "#C4856A",
+ accent: "#C4856A",
+ error: "#C75B4A",
+ bgPrimary: "#FAFAF7",
+ bgSecondary: "#F2EFE9",
+ textPrimary: "#2D3436",
+ textSecondary: "#8A8F87",
textOnPrimary: "#FFFFFF",
},
dark: {
- primary: "#F0A070",
- secondary: "#4FC9AF",
- accent: "#DDB892",
- error: "#EF4444",
- bgPrimary: "#0A0A0A",
- bgSecondary: "#161616",
- textPrimary: "#FAFAFA",
- textSecondary: "#A1A1A1",
- textOnPrimary: "#0A0A0A",
- },
- },
- {
- id: "teal",
- name: "Teal",
- description: "Blue-green with warm accents",
- light: {
- primary: "#069FC3",
- secondary: "#0054A4",
- accent: "#EFC707",
- error: "#DD1C1A",
- bgPrimary: "#FFF0D0",
- bgSecondary: "#FFFFFF",
- textPrimary: "#111111",
- textSecondary: "#444444",
- textOnPrimary: "#FFFFFF",
- },
- dark: {
- primary: "#60CCE2",
- secondary: "#60A5D8",
- accent: "#EFC707",
- error: "#FF5244",
- bgPrimary: "#091829",
- bgSecondary: "#1A2E3E",
- textPrimary: "#F5F5F5",
- textSecondary: "#C6C6C6",
- textOnPrimary: "#FFFFFF",
- },
- },
- {
- id: "ocean",
- name: "Ocean",
- description: "Deep blues and coral tones",
- light: {
- primary: "#006B8F",
- secondary: "#008A8A",
- accent: "#FF7E50",
- error: "#DD1C1A",
- bgPrimary: "#E4EBF1",
- bgSecondary: "#BCCAD5",
- textPrimary: "#111111",
- textSecondary: "#444444",
- textOnPrimary: "#FFFFFF",
- },
- dark: {
- primary: "#49B5D1",
- secondary: "#60D1C6",
- accent: "#FF7E50",
- error: "#FF5244",
- bgPrimary: "#161B22",
- bgSecondary: "#313A4B",
- textPrimary: "#F5F5F5",
- textSecondary: "#C6C6C6",
- textOnPrimary: "#FFFFFF",
- },
- },
- {
- id: "forest",
- name: "Forest",
- description: "Earth greens and golden hues",
- light: {
- primary: "#2C5015",
- secondary: "#6B8E22",
- accent: "#FFD600",
- error: "#DD1C1A",
- bgPrimary: "#EBEEE2",
- bgSecondary: "#C1C8AD",
- textPrimary: "#111111",
- textSecondary: "#444444",
- textOnPrimary: "#FFFFFF",
- },
- dark: {
- primary: "#93C66B",
- secondary: "#AFD182",
- accent: "#FFD600",
- error: "#FF5244",
- bgPrimary: "#181E17",
- bgSecondary: "#384436",
- textPrimary: "#F5F5F5",
- textSecondary: "#C6C6C6",
- textOnPrimary: "#FFFFFF",
- },
- },
- {
- id: "sunset",
- name: "Sunset",
- description: "Warm oranges and reds",
- light: {
- primary: "#FF4500",
- secondary: "#FF6246",
- accent: "#FFD600",
- error: "#DD1C1A",
- bgPrimary: "#F7F0E8",
- bgSecondary: "#DCD0BA",
- textPrimary: "#111111",
- textSecondary: "#444444",
- textOnPrimary: "#FFFFFF",
- },
- dark: {
- primary: "#FF9E60",
- secondary: "#FFAD7C",
- accent: "#FFD600",
- error: "#FF5244",
- bgPrimary: "#201813",
- bgSecondary: "#433329",
- textPrimary: "#F5F5F5",
- textSecondary: "#C6C6C6",
- textOnPrimary: "#FFFFFF",
- },
- },
- {
- id: "monochrome",
- name: "Monochrome",
- description: "Elegant grayscale",
- light: {
- primary: "#333333",
- secondary: "#666666",
- accent: "#999999",
- error: "#DD1C1A",
- bgPrimary: "#F0F0F0",
- bgSecondary: "#D4D4D4",
- textPrimary: "#111111",
- textSecondary: "#444444",
- textOnPrimary: "#FFFFFF",
- },
- dark: {
- primary: "#E5E5E5",
- secondary: "#BFBFBF",
- accent: "#D1D1D1",
- error: "#FF5244",
- bgPrimary: "#161616",
- bgSecondary: "#3B3B3B",
- textPrimary: "#F5F5F5",
- textSecondary: "#C6C6C6",
- textOnPrimary: "#FFFFFF",
- },
- },
- {
- id: "lavender",
- name: "Lavender",
- description: "Soft purple with pink accents",
- light: {
- primary: "#6B418A",
- secondary: "#8A60AF",
- accent: "#E24982",
- error: "#DD1C1A",
- bgPrimary: "#F1EFF5",
- bgSecondary: "#D9D1DF",
- textPrimary: "#111111",
- textSecondary: "#444444",
- textOnPrimary: "#FFFFFF",
- },
- dark: {
- primary: "#D1AFE2",
- secondary: "#DDBFEA",
- accent: "#FF9EC6",
- error: "#FF5244",
- bgPrimary: "#17131E",
- bgSecondary: "#393042",
- textPrimary: "#F5F5F5",
- textSecondary: "#C6C6C6",
- textOnPrimary: "#FFFFFF",
- },
- },
- {
- id: "crimson",
- name: "Crimson",
- description: "Bold red with warm highlights",
- light: {
- primary: "#B51E28",
- secondary: "#992D38",
- accent: "#E26000",
- error: "#DD1C1A",
- bgPrimary: "#F6EDEB",
- bgSecondary: "#DECFCC",
- textPrimary: "#111111",
- textSecondary: "#444444",
- textOnPrimary: "#FFFFFF",
- },
- dark: {
- primary: "#FF827C",
- secondary: "#F99993",
- accent: "#FFB56B",
- error: "#FF5244",
- bgPrimary: "#1B1215",
- bgSecondary: "#412E39",
- textPrimary: "#F5F5F5",
- textSecondary: "#C6C6C6",
- textOnPrimary: "#FFFFFF",
- },
- },
- {
- id: "midnight",
- name: "Midnight",
- description: "Deep navy with sky blue",
- light: {
- primary: "#1E4993",
- secondary: "#2D60AF",
- accent: "#4993E2",
- error: "#DD1C1A",
- bgPrimary: "#EDF0F7",
- bgSecondary: "#CCD5E2",
- textPrimary: "#111111",
- textSecondary: "#444444",
- textOnPrimary: "#FFFFFF",
- },
- dark: {
- primary: "#82B5EA",
- secondary: "#93C6F2",
- accent: "#9ED8FF",
- error: "#FF5244",
- bgPrimary: "#12161F",
- bgSecondary: "#2F3848",
- textPrimary: "#F5F5F5",
- textSecondary: "#C6C6C6",
- textOnPrimary: "#FFFFFF",
- },
- },
- {
- id: "desert",
- name: "Desert",
- description: "Warm terracotta and sand tones",
- light: {
- primary: "#AF6049",
- secondary: "#9E7C60",
- accent: "#D1932D",
- error: "#DD1C1A",
- bgPrimary: "#F6F0EA",
- bgSecondary: "#E5D8C6",
- textPrimary: "#111111",
- textSecondary: "#444444",
- textOnPrimary: "#FFFFFF",
- },
- dark: {
- primary: "#F2B593",
- secondary: "#EAD1AF",
- accent: "#FFD86B",
- error: "#FF5244",
- bgPrimary: "#1F1C16",
- bgSecondary: "#494138",
- textPrimary: "#F5F5F5",
- textSecondary: "#C6C6C6",
- textOnPrimary: "#FFFFFF",
- },
- },
- {
- id: "mint",
- name: "Mint",
- description: "Fresh green with turquoise",
- light: {
- primary: "#38AF93",
- secondary: "#60C6AF",
- accent: "#2D9EAF",
- error: "#DD1C1A",
- bgPrimary: "#EDF6F0",
- bgSecondary: "#D1E2D8",
- textPrimary: "#111111",
- textSecondary: "#444444",
- textOnPrimary: "#FFFFFF",
- },
- dark: {
- primary: "#93F2D8",
- secondary: "#BFF9EA",
- accent: "#6BEAF2",
- error: "#FF5244",
- bgPrimary: "#161F1F",
- bgSecondary: "#384949",
- textPrimary: "#F5F5F5",
- textSecondary: "#C6C6C6",
- textOnPrimary: "#FFFFFF",
+ primary: "#8FB896",
+ secondary: "#D4A08A",
+ accent: "#D4A08A",
+ error: "#E07A6B",
+ bgPrimary: "#1A1D1A",
+ bgSecondary: "#2A2E2A",
+ textPrimary: "#E8E5DF",
+ textSecondary: "#9A9E97",
+ textOnPrimary: "#1A1D1A",
},
},
];
diff --git a/src/lib/themes/theme-provider.tsx b/src/lib/themes/theme-provider.tsx
index 849f12d..3c96c12 100644
--- a/src/lib/themes/theme-provider.tsx
+++ b/src/lib/themes/theme-provider.tsx
@@ -4,14 +4,8 @@ import { useEffect } from "react";
import { useThemeStore } from "@/stores/theme";
export function ThemeProvider({ children }: { children: React.ReactNode }) {
- const themeId = useThemeStore((s) => s.themeId);
const mode = useThemeStore((s) => s.mode);
- // Sync data-theme attribute
- useEffect(() => {
- document.documentElement.setAttribute("data-theme", themeId);
- }, [themeId]);
-
// Sync dark class based on mode + system preference
useEffect(() => {
const applyDarkClass = (isDark: boolean) => {
@@ -41,22 +35,5 @@ export function ThemeProvider({ children }: { children: React.ReactNode }) {
return () => mql.removeEventListener("change", handler);
}, [mode]);
- // On mount, migrate any stale persisted state to light mode
- useEffect(() => {
- const stored = localStorage.getItem("casera-theme");
- if (stored) {
- try {
- const parsed = JSON.parse(stored);
- if (parsed?.state?.mode === "system") {
- parsed.state.mode = "light";
- localStorage.setItem("casera-theme", JSON.stringify(parsed));
- useThemeStore.getState().setMode("light");
- }
- } catch {
- // ignore
- }
- }
- }, []);
-
return <>{children}>;
}
diff --git a/src/lib/themes/use-theme.ts b/src/lib/themes/use-theme.ts
index 6bd3148..51567e2 100644
--- a/src/lib/themes/use-theme.ts
+++ b/src/lib/themes/use-theme.ts
@@ -9,7 +9,7 @@ import { themes, getThemeById, type ThemeDefinition } from "./theme-config";
* (accounting for system preference), and setters.
*/
export function useTheme() {
- const { themeId, mode, setTheme, setMode } = useThemeStore();
+ const { mode, setMode } = useThemeStore();
const [effectiveMode, setEffectiveMode] = useState<"light" | "dark">("light");
@@ -28,11 +28,9 @@ export function useTheme() {
return () => mql.removeEventListener("change", handler);
}, [mode]);
- const currentTheme: ThemeDefinition = getThemeById(themeId);
+ const currentTheme: ThemeDefinition = getThemeById("default");
return {
- /** Current theme ID string */
- themeId,
/** Current mode setting (light | dark | system) */
mode,
/** Resolved mode after considering system preference */
@@ -41,8 +39,6 @@ export function useTheme() {
currentTheme,
/** All available theme definitions */
themes,
- /** Set the active theme by ID */
- setTheme,
/** Set the color mode */
setMode,
};
diff --git a/src/stores/theme.ts b/src/stores/theme.ts
index 2fcc02a..b8c8de4 100644
--- a/src/stores/theme.ts
+++ b/src/stores/theme.ts
@@ -1,22 +1,17 @@
import { create } from "zustand";
import { persist } from "zustand/middleware";
-import { DEFAULT_THEME_ID } from "@/lib/themes/theme-config";
export type ColorMode = "light" | "dark" | "system";
interface ThemeState {
- themeId: string;
mode: ColorMode;
- setTheme: (themeId: string) => void;
setMode: (mode: ColorMode) => void;
}
export const useThemeStore = create
()(
persist(
(set) => ({
- themeId: DEFAULT_THEME_ID,
mode: "light",
- setTheme: (themeId: string) => set({ themeId }),
setMode: (mode: ColorMode) => set({ mode }),
}),
{
diff --git a/src/styles/themes.css b/src/styles/themes.css
index 5d339eb..f7ce3f5 100644
--- a/src/styles/themes.css
+++ b/src/styles/themes.css
@@ -1,9 +1,7 @@
/*
- * Casera multi-theme design system
- * 11 themes x 2 modes (light/dark) = 22 palettes
+ * Casera "Warm Sage" design system
+ * Single brand palette — light + dark mode
* Maps to shadcn/ui CSS variables and custom app variables
- *
- * Spacing and radius tokens are theme-independent.
*/
/* ------------------------------------------------------------------ */
@@ -24,27 +22,19 @@
--radius-xxl: 24px;
}
-/* ------------------------------------------------------------------ */
-/* Helper: map app vars to shadcn vars */
-/* Each theme block sets --color-* vars, then this maps them. */
-/* We inline shadcn mapping directly in each theme block for */
-/* specificity, so this section documents the pattern. */
-/* ------------------------------------------------------------------ */
-
/* ================================================================== */
-/* THEME: Default — Warm orange brand with teal accents */
+/* Light mode (default) */
/* ================================================================== */
-[data-theme="default"],
:root {
/* App color tokens – light */
- --color-primary: #E07A3A;
- --color-secondary: #0D7C66;
- --color-accent: #D4A574;
- --color-error: #DC2626;
- --color-bg-primary: #FFFFFF;
- --color-bg-secondary: #F7F7F7;
- --color-text-primary: #1C1917;
- --color-text-secondary: #78716C;
+ --color-primary: #6B8F71;
+ --color-secondary: #C4856A;
+ --color-accent: #C4856A;
+ --color-error: #C75B4A;
+ --color-bg-primary: #FAFAF7;
+ --color-bg-secondary: #F2EFE9;
+ --color-text-primary: #2D3436;
+ --color-text-secondary: #8A8F87;
--color-text-on-primary: #FFFFFF;
/* shadcn overrides */
@@ -63,8 +53,8 @@
--muted: var(--color-bg-secondary);
--muted-foreground: var(--color-text-secondary);
--destructive: var(--color-error);
- --border: #E8E8E8;
- --input: #E8E8E8;
+ --border: #E8E3DC;
+ --input: #E8E3DC;
--ring: var(--color-primary);
--sidebar: #FFFFFF;
@@ -73,21 +63,30 @@
--sidebar-primary-foreground: var(--color-text-on-primary);
--sidebar-accent: var(--color-bg-secondary);
--sidebar-accent-foreground: var(--color-text-primary);
- --sidebar-border: #E7E5E4;
+ --sidebar-border: #E8E3DC;
--sidebar-ring: var(--color-primary);
+
+ /* Chart palette */
+ --chart-1: #6B8F71;
+ --chart-2: #C4856A;
+ --chart-3: #8FB896;
+ --chart-4: #D4A08A;
+ --chart-5: #A3C4A8;
}
-[data-theme="default"].dark,
-.dark[data-theme="default"] {
- --color-primary: #F0A070;
- --color-secondary: #4FC9AF;
- --color-accent: #DDB892;
- --color-error: #EF4444;
- --color-bg-primary: #0A0A0A;
- --color-bg-secondary: #161616;
- --color-text-primary: #FAFAFA;
- --color-text-secondary: #A1A1A1;
- --color-text-on-primary: #0A0A0A;
+/* ================================================================== */
+/* Dark mode */
+/* ================================================================== */
+.dark {
+ --color-primary: #8FB896;
+ --color-secondary: #D4A08A;
+ --color-accent: #D4A08A;
+ --color-error: #E07A6B;
+ --color-bg-primary: #1A1D1A;
+ --color-bg-secondary: #2A2E2A;
+ --color-text-primary: #E8E5DF;
+ --color-text-secondary: #9A9E97;
+ --color-text-on-primary: #1A1D1A;
--primary: var(--color-primary);
--primary-foreground: var(--color-text-on-primary);
@@ -97,9 +96,9 @@
--accent-foreground: var(--color-text-primary);
--background: var(--color-bg-primary);
--foreground: var(--color-text-primary);
- --card: #141414;
+ --card: #232823;
--card-foreground: var(--color-text-primary);
- --popover: #141414;
+ --popover: #232823;
--popover-foreground: var(--color-text-primary);
--muted: var(--color-bg-secondary);
--muted-foreground: var(--color-text-secondary);
@@ -108,7 +107,7 @@
--input: rgba(255, 255, 255, 0.12);
--ring: var(--color-primary);
- --sidebar: #141414;
+ --sidebar: #232823;
--sidebar-foreground: var(--color-text-primary);
--sidebar-primary: var(--color-primary);
--sidebar-primary-foreground: var(--color-text-on-primary);
@@ -116,844 +115,11 @@
--sidebar-accent-foreground: var(--color-text-primary);
--sidebar-border: rgba(255, 255, 255, 0.1);
--sidebar-ring: var(--color-primary);
-}
-
-/* ================================================================== */
-/* THEME: Teal — Blue-green with warm accents */
-/* ================================================================== */
-[data-theme="teal"] {
- --color-primary: #069FC3;
- --color-secondary: #0054A4;
- --color-accent: #EFC707;
- --color-error: #DD1C1A;
- --color-bg-primary: #FFF0D0;
- --color-bg-secondary: #FFFFFF;
- --color-text-primary: #111111;
- --color-text-secondary: #444444;
- --color-text-on-primary: #FFFFFF;
-
- --primary: var(--color-primary);
- --primary-foreground: var(--color-text-on-primary);
- --secondary: var(--color-bg-secondary);
- --secondary-foreground: var(--color-text-primary);
- --accent: var(--color-bg-secondary);
- --accent-foreground: var(--color-text-primary);
- --background: var(--color-bg-primary);
- --foreground: var(--color-text-primary);
- --card: var(--color-bg-secondary);
- --card-foreground: var(--color-text-primary);
- --popover: var(--color-bg-primary);
- --popover-foreground: var(--color-text-primary);
- --muted: var(--color-bg-secondary);
- --muted-foreground: var(--color-text-secondary);
- --destructive: var(--color-error);
- --border: color-mix(in srgb, var(--color-text-primary) 15%, transparent);
- --input: color-mix(in srgb, var(--color-text-primary) 15%, transparent);
- --ring: var(--color-primary);
-
- --sidebar: var(--color-bg-secondary);
- --sidebar-foreground: var(--color-text-primary);
- --sidebar-primary: var(--color-primary);
- --sidebar-primary-foreground: var(--color-text-on-primary);
- --sidebar-accent: var(--color-bg-primary);
- --sidebar-accent-foreground: var(--color-text-primary);
- --sidebar-border: color-mix(in srgb, var(--color-text-primary) 15%, transparent);
- --sidebar-ring: var(--color-primary);
-}
-
-[data-theme="teal"].dark,
-.dark[data-theme="teal"] {
- --color-primary: #60CCE2;
- --color-secondary: #60A5D8;
- --color-accent: #EFC707;
- --color-error: #FF5244;
- --color-bg-primary: #091829;
- --color-bg-secondary: #1A2E3E;
- --color-text-primary: #F5F5F5;
- --color-text-secondary: #C6C6C6;
- --color-text-on-primary: #FFFFFF;
-
- --primary: var(--color-primary);
- --primary-foreground: var(--color-text-on-primary);
- --secondary: var(--color-bg-secondary);
- --secondary-foreground: var(--color-text-primary);
- --accent: var(--color-bg-secondary);
- --accent-foreground: var(--color-text-primary);
- --background: var(--color-bg-primary);
- --foreground: var(--color-text-primary);
- --card: var(--color-bg-secondary);
- --card-foreground: var(--color-text-primary);
- --popover: var(--color-bg-secondary);
- --popover-foreground: var(--color-text-primary);
- --muted: var(--color-bg-secondary);
- --muted-foreground: var(--color-text-secondary);
- --destructive: var(--color-error);
- --border: color-mix(in srgb, var(--color-text-primary) 12%, transparent);
- --input: color-mix(in srgb, var(--color-text-primary) 15%, transparent);
- --ring: var(--color-primary);
-
- --sidebar: var(--color-bg-secondary);
- --sidebar-foreground: var(--color-text-primary);
- --sidebar-primary: var(--color-primary);
- --sidebar-primary-foreground: var(--color-text-on-primary);
- --sidebar-accent: var(--color-bg-primary);
- --sidebar-accent-foreground: var(--color-text-primary);
- --sidebar-border: color-mix(in srgb, var(--color-text-primary) 12%, transparent);
- --sidebar-ring: var(--color-primary);
-}
-
-/* ================================================================== */
-/* THEME: Ocean — Deep blues and coral tones */
-/* ================================================================== */
-[data-theme="ocean"] {
- --color-primary: #006B8F;
- --color-secondary: #008A8A;
- --color-accent: #FF7E50;
- --color-error: #DD1C1A;
- --color-bg-primary: #E4EBF1;
- --color-bg-secondary: #BCCAD5;
- --color-text-primary: #111111;
- --color-text-secondary: #444444;
- --color-text-on-primary: #FFFFFF;
-
- --primary: var(--color-primary);
- --primary-foreground: var(--color-text-on-primary);
- --secondary: var(--color-bg-secondary);
- --secondary-foreground: var(--color-text-primary);
- --accent: var(--color-bg-secondary);
- --accent-foreground: var(--color-text-primary);
- --background: var(--color-bg-primary);
- --foreground: var(--color-text-primary);
- --card: var(--color-bg-secondary);
- --card-foreground: var(--color-text-primary);
- --popover: var(--color-bg-primary);
- --popover-foreground: var(--color-text-primary);
- --muted: var(--color-bg-secondary);
- --muted-foreground: var(--color-text-secondary);
- --destructive: var(--color-error);
- --border: color-mix(in srgb, var(--color-text-primary) 15%, transparent);
- --input: color-mix(in srgb, var(--color-text-primary) 15%, transparent);
- --ring: var(--color-primary);
-
- --sidebar: var(--color-bg-secondary);
- --sidebar-foreground: var(--color-text-primary);
- --sidebar-primary: var(--color-primary);
- --sidebar-primary-foreground: var(--color-text-on-primary);
- --sidebar-accent: var(--color-bg-primary);
- --sidebar-accent-foreground: var(--color-text-primary);
- --sidebar-border: color-mix(in srgb, var(--color-text-primary) 15%, transparent);
- --sidebar-ring: var(--color-primary);
-}
-
-[data-theme="ocean"].dark,
-.dark[data-theme="ocean"] {
- --color-primary: #49B5D1;
- --color-secondary: #60D1C6;
- --color-accent: #FF7E50;
- --color-error: #FF5244;
- --color-bg-primary: #161B22;
- --color-bg-secondary: #313A4B;
- --color-text-primary: #F5F5F5;
- --color-text-secondary: #C6C6C6;
- --color-text-on-primary: #FFFFFF;
-
- --primary: var(--color-primary);
- --primary-foreground: var(--color-text-on-primary);
- --secondary: var(--color-bg-secondary);
- --secondary-foreground: var(--color-text-primary);
- --accent: var(--color-bg-secondary);
- --accent-foreground: var(--color-text-primary);
- --background: var(--color-bg-primary);
- --foreground: var(--color-text-primary);
- --card: var(--color-bg-secondary);
- --card-foreground: var(--color-text-primary);
- --popover: var(--color-bg-secondary);
- --popover-foreground: var(--color-text-primary);
- --muted: var(--color-bg-secondary);
- --muted-foreground: var(--color-text-secondary);
- --destructive: var(--color-error);
- --border: color-mix(in srgb, var(--color-text-primary) 12%, transparent);
- --input: color-mix(in srgb, var(--color-text-primary) 15%, transparent);
- --ring: var(--color-primary);
-
- --sidebar: var(--color-bg-secondary);
- --sidebar-foreground: var(--color-text-primary);
- --sidebar-primary: var(--color-primary);
- --sidebar-primary-foreground: var(--color-text-on-primary);
- --sidebar-accent: var(--color-bg-primary);
- --sidebar-accent-foreground: var(--color-text-primary);
- --sidebar-border: color-mix(in srgb, var(--color-text-primary) 12%, transparent);
- --sidebar-ring: var(--color-primary);
-}
-
-/* ================================================================== */
-/* THEME: Forest — Earth greens and golden hues */
-/* ================================================================== */
-[data-theme="forest"] {
- --color-primary: #2C5015;
- --color-secondary: #6B8E22;
- --color-accent: #FFD600;
- --color-error: #DD1C1A;
- --color-bg-primary: #EBEEE2;
- --color-bg-secondary: #C1C8AD;
- --color-text-primary: #111111;
- --color-text-secondary: #444444;
- --color-text-on-primary: #FFFFFF;
-
- --primary: var(--color-primary);
- --primary-foreground: var(--color-text-on-primary);
- --secondary: var(--color-bg-secondary);
- --secondary-foreground: var(--color-text-primary);
- --accent: var(--color-bg-secondary);
- --accent-foreground: var(--color-text-primary);
- --background: var(--color-bg-primary);
- --foreground: var(--color-text-primary);
- --card: var(--color-bg-secondary);
- --card-foreground: var(--color-text-primary);
- --popover: var(--color-bg-primary);
- --popover-foreground: var(--color-text-primary);
- --muted: var(--color-bg-secondary);
- --muted-foreground: var(--color-text-secondary);
- --destructive: var(--color-error);
- --border: color-mix(in srgb, var(--color-text-primary) 15%, transparent);
- --input: color-mix(in srgb, var(--color-text-primary) 15%, transparent);
- --ring: var(--color-primary);
-
- --sidebar: var(--color-bg-secondary);
- --sidebar-foreground: var(--color-text-primary);
- --sidebar-primary: var(--color-primary);
- --sidebar-primary-foreground: var(--color-text-on-primary);
- --sidebar-accent: var(--color-bg-primary);
- --sidebar-accent-foreground: var(--color-text-primary);
- --sidebar-border: color-mix(in srgb, var(--color-text-primary) 15%, transparent);
- --sidebar-ring: var(--color-primary);
-}
-
-[data-theme="forest"].dark,
-.dark[data-theme="forest"] {
- --color-primary: #93C66B;
- --color-secondary: #AFD182;
- --color-accent: #FFD600;
- --color-error: #FF5244;
- --color-bg-primary: #181E17;
- --color-bg-secondary: #384436;
- --color-text-primary: #F5F5F5;
- --color-text-secondary: #C6C6C6;
- --color-text-on-primary: #FFFFFF;
-
- --primary: var(--color-primary);
- --primary-foreground: var(--color-text-on-primary);
- --secondary: var(--color-bg-secondary);
- --secondary-foreground: var(--color-text-primary);
- --accent: var(--color-bg-secondary);
- --accent-foreground: var(--color-text-primary);
- --background: var(--color-bg-primary);
- --foreground: var(--color-text-primary);
- --card: var(--color-bg-secondary);
- --card-foreground: var(--color-text-primary);
- --popover: var(--color-bg-secondary);
- --popover-foreground: var(--color-text-primary);
- --muted: var(--color-bg-secondary);
- --muted-foreground: var(--color-text-secondary);
- --destructive: var(--color-error);
- --border: color-mix(in srgb, var(--color-text-primary) 12%, transparent);
- --input: color-mix(in srgb, var(--color-text-primary) 15%, transparent);
- --ring: var(--color-primary);
-
- --sidebar: var(--color-bg-secondary);
- --sidebar-foreground: var(--color-text-primary);
- --sidebar-primary: var(--color-primary);
- --sidebar-primary-foreground: var(--color-text-on-primary);
- --sidebar-accent: var(--color-bg-primary);
- --sidebar-accent-foreground: var(--color-text-primary);
- --sidebar-border: color-mix(in srgb, var(--color-text-primary) 12%, transparent);
- --sidebar-ring: var(--color-primary);
-}
-
-/* ================================================================== */
-/* THEME: Sunset — Warm oranges and reds */
-/* ================================================================== */
-[data-theme="sunset"] {
- --color-primary: #FF4500;
- --color-secondary: #FF6246;
- --color-accent: #FFD600;
- --color-error: #DD1C1A;
- --color-bg-primary: #F7F0E8;
- --color-bg-secondary: #DCD0BA;
- --color-text-primary: #111111;
- --color-text-secondary: #444444;
- --color-text-on-primary: #FFFFFF;
-
- --primary: var(--color-primary);
- --primary-foreground: var(--color-text-on-primary);
- --secondary: var(--color-bg-secondary);
- --secondary-foreground: var(--color-text-primary);
- --accent: var(--color-bg-secondary);
- --accent-foreground: var(--color-text-primary);
- --background: var(--color-bg-primary);
- --foreground: var(--color-text-primary);
- --card: var(--color-bg-secondary);
- --card-foreground: var(--color-text-primary);
- --popover: var(--color-bg-primary);
- --popover-foreground: var(--color-text-primary);
- --muted: var(--color-bg-secondary);
- --muted-foreground: var(--color-text-secondary);
- --destructive: var(--color-error);
- --border: color-mix(in srgb, var(--color-text-primary) 15%, transparent);
- --input: color-mix(in srgb, var(--color-text-primary) 15%, transparent);
- --ring: var(--color-primary);
-
- --sidebar: var(--color-bg-secondary);
- --sidebar-foreground: var(--color-text-primary);
- --sidebar-primary: var(--color-primary);
- --sidebar-primary-foreground: var(--color-text-on-primary);
- --sidebar-accent: var(--color-bg-primary);
- --sidebar-accent-foreground: var(--color-text-primary);
- --sidebar-border: color-mix(in srgb, var(--color-text-primary) 15%, transparent);
- --sidebar-ring: var(--color-primary);
-}
-
-[data-theme="sunset"].dark,
-.dark[data-theme="sunset"] {
- --color-primary: #FF9E60;
- --color-secondary: #FFAD7C;
- --color-accent: #FFD600;
- --color-error: #FF5244;
- --color-bg-primary: #201813;
- --color-bg-secondary: #433329;
- --color-text-primary: #F5F5F5;
- --color-text-secondary: #C6C6C6;
- --color-text-on-primary: #FFFFFF;
-
- --primary: var(--color-primary);
- --primary-foreground: var(--color-text-on-primary);
- --secondary: var(--color-bg-secondary);
- --secondary-foreground: var(--color-text-primary);
- --accent: var(--color-bg-secondary);
- --accent-foreground: var(--color-text-primary);
- --background: var(--color-bg-primary);
- --foreground: var(--color-text-primary);
- --card: var(--color-bg-secondary);
- --card-foreground: var(--color-text-primary);
- --popover: var(--color-bg-secondary);
- --popover-foreground: var(--color-text-primary);
- --muted: var(--color-bg-secondary);
- --muted-foreground: var(--color-text-secondary);
- --destructive: var(--color-error);
- --border: color-mix(in srgb, var(--color-text-primary) 12%, transparent);
- --input: color-mix(in srgb, var(--color-text-primary) 15%, transparent);
- --ring: var(--color-primary);
-
- --sidebar: var(--color-bg-secondary);
- --sidebar-foreground: var(--color-text-primary);
- --sidebar-primary: var(--color-primary);
- --sidebar-primary-foreground: var(--color-text-on-primary);
- --sidebar-accent: var(--color-bg-primary);
- --sidebar-accent-foreground: var(--color-text-primary);
- --sidebar-border: color-mix(in srgb, var(--color-text-primary) 12%, transparent);
- --sidebar-ring: var(--color-primary);
-}
-
-/* ================================================================== */
-/* THEME: Monochrome — Elegant grayscale */
-/* ================================================================== */
-[data-theme="monochrome"] {
- --color-primary: #333333;
- --color-secondary: #666666;
- --color-accent: #999999;
- --color-error: #DD1C1A;
- --color-bg-primary: #F0F0F0;
- --color-bg-secondary: #D4D4D4;
- --color-text-primary: #111111;
- --color-text-secondary: #444444;
- --color-text-on-primary: #FFFFFF;
-
- --primary: var(--color-primary);
- --primary-foreground: var(--color-text-on-primary);
- --secondary: var(--color-bg-secondary);
- --secondary-foreground: var(--color-text-primary);
- --accent: var(--color-bg-secondary);
- --accent-foreground: var(--color-text-primary);
- --background: var(--color-bg-primary);
- --foreground: var(--color-text-primary);
- --card: var(--color-bg-secondary);
- --card-foreground: var(--color-text-primary);
- --popover: var(--color-bg-primary);
- --popover-foreground: var(--color-text-primary);
- --muted: var(--color-bg-secondary);
- --muted-foreground: var(--color-text-secondary);
- --destructive: var(--color-error);
- --border: color-mix(in srgb, var(--color-text-primary) 15%, transparent);
- --input: color-mix(in srgb, var(--color-text-primary) 15%, transparent);
- --ring: var(--color-primary);
-
- --sidebar: var(--color-bg-secondary);
- --sidebar-foreground: var(--color-text-primary);
- --sidebar-primary: var(--color-primary);
- --sidebar-primary-foreground: var(--color-text-on-primary);
- --sidebar-accent: var(--color-bg-primary);
- --sidebar-accent-foreground: var(--color-text-primary);
- --sidebar-border: color-mix(in srgb, var(--color-text-primary) 15%, transparent);
- --sidebar-ring: var(--color-primary);
-}
-
-[data-theme="monochrome"].dark,
-.dark[data-theme="monochrome"] {
- --color-primary: #E5E5E5;
- --color-secondary: #BFBFBF;
- --color-accent: #D1D1D1;
- --color-error: #FF5244;
- --color-bg-primary: #161616;
- --color-bg-secondary: #3B3B3B;
- --color-text-primary: #F5F5F5;
- --color-text-secondary: #C6C6C6;
- --color-text-on-primary: #FFFFFF;
-
- --primary: var(--color-primary);
- --primary-foreground: var(--color-text-on-primary);
- --secondary: var(--color-bg-secondary);
- --secondary-foreground: var(--color-text-primary);
- --accent: var(--color-bg-secondary);
- --accent-foreground: var(--color-text-primary);
- --background: var(--color-bg-primary);
- --foreground: var(--color-text-primary);
- --card: var(--color-bg-secondary);
- --card-foreground: var(--color-text-primary);
- --popover: var(--color-bg-secondary);
- --popover-foreground: var(--color-text-primary);
- --muted: var(--color-bg-secondary);
- --muted-foreground: var(--color-text-secondary);
- --destructive: var(--color-error);
- --border: color-mix(in srgb, var(--color-text-primary) 12%, transparent);
- --input: color-mix(in srgb, var(--color-text-primary) 15%, transparent);
- --ring: var(--color-primary);
-
- --sidebar: var(--color-bg-secondary);
- --sidebar-foreground: var(--color-text-primary);
- --sidebar-primary: var(--color-primary);
- --sidebar-primary-foreground: var(--color-text-on-primary);
- --sidebar-accent: var(--color-bg-primary);
- --sidebar-accent-foreground: var(--color-text-primary);
- --sidebar-border: color-mix(in srgb, var(--color-text-primary) 12%, transparent);
- --sidebar-ring: var(--color-primary);
-}
-
-/* ================================================================== */
-/* THEME: Lavender — Soft purple with pink accents */
-/* ================================================================== */
-[data-theme="lavender"] {
- --color-primary: #6B418A;
- --color-secondary: #8A60AF;
- --color-accent: #E24982;
- --color-error: #DD1C1A;
- --color-bg-primary: #F1EFF5;
- --color-bg-secondary: #D9D1DF;
- --color-text-primary: #111111;
- --color-text-secondary: #444444;
- --color-text-on-primary: #FFFFFF;
-
- --primary: var(--color-primary);
- --primary-foreground: var(--color-text-on-primary);
- --secondary: var(--color-bg-secondary);
- --secondary-foreground: var(--color-text-primary);
- --accent: var(--color-bg-secondary);
- --accent-foreground: var(--color-text-primary);
- --background: var(--color-bg-primary);
- --foreground: var(--color-text-primary);
- --card: var(--color-bg-secondary);
- --card-foreground: var(--color-text-primary);
- --popover: var(--color-bg-primary);
- --popover-foreground: var(--color-text-primary);
- --muted: var(--color-bg-secondary);
- --muted-foreground: var(--color-text-secondary);
- --destructive: var(--color-error);
- --border: color-mix(in srgb, var(--color-text-primary) 15%, transparent);
- --input: color-mix(in srgb, var(--color-text-primary) 15%, transparent);
- --ring: var(--color-primary);
-
- --sidebar: var(--color-bg-secondary);
- --sidebar-foreground: var(--color-text-primary);
- --sidebar-primary: var(--color-primary);
- --sidebar-primary-foreground: var(--color-text-on-primary);
- --sidebar-accent: var(--color-bg-primary);
- --sidebar-accent-foreground: var(--color-text-primary);
- --sidebar-border: color-mix(in srgb, var(--color-text-primary) 15%, transparent);
- --sidebar-ring: var(--color-primary);
-}
-
-[data-theme="lavender"].dark,
-.dark[data-theme="lavender"] {
- --color-primary: #D1AFE2;
- --color-secondary: #DDBFEA;
- --color-accent: #FF9EC6;
- --color-error: #FF5244;
- --color-bg-primary: #17131E;
- --color-bg-secondary: #393042;
- --color-text-primary: #F5F5F5;
- --color-text-secondary: #C6C6C6;
- --color-text-on-primary: #FFFFFF;
-
- --primary: var(--color-primary);
- --primary-foreground: var(--color-text-on-primary);
- --secondary: var(--color-bg-secondary);
- --secondary-foreground: var(--color-text-primary);
- --accent: var(--color-bg-secondary);
- --accent-foreground: var(--color-text-primary);
- --background: var(--color-bg-primary);
- --foreground: var(--color-text-primary);
- --card: var(--color-bg-secondary);
- --card-foreground: var(--color-text-primary);
- --popover: var(--color-bg-secondary);
- --popover-foreground: var(--color-text-primary);
- --muted: var(--color-bg-secondary);
- --muted-foreground: var(--color-text-secondary);
- --destructive: var(--color-error);
- --border: color-mix(in srgb, var(--color-text-primary) 12%, transparent);
- --input: color-mix(in srgb, var(--color-text-primary) 15%, transparent);
- --ring: var(--color-primary);
-
- --sidebar: var(--color-bg-secondary);
- --sidebar-foreground: var(--color-text-primary);
- --sidebar-primary: var(--color-primary);
- --sidebar-primary-foreground: var(--color-text-on-primary);
- --sidebar-accent: var(--color-bg-primary);
- --sidebar-accent-foreground: var(--color-text-primary);
- --sidebar-border: color-mix(in srgb, var(--color-text-primary) 12%, transparent);
- --sidebar-ring: var(--color-primary);
-}
-
-/* ================================================================== */
-/* THEME: Crimson — Bold red with warm highlights */
-/* ================================================================== */
-[data-theme="crimson"] {
- --color-primary: #B51E28;
- --color-secondary: #992D38;
- --color-accent: #E26000;
- --color-error: #DD1C1A;
- --color-bg-primary: #F6EDEB;
- --color-bg-secondary: #DECFCC;
- --color-text-primary: #111111;
- --color-text-secondary: #444444;
- --color-text-on-primary: #FFFFFF;
-
- --primary: var(--color-primary);
- --primary-foreground: var(--color-text-on-primary);
- --secondary: var(--color-bg-secondary);
- --secondary-foreground: var(--color-text-primary);
- --accent: var(--color-bg-secondary);
- --accent-foreground: var(--color-text-primary);
- --background: var(--color-bg-primary);
- --foreground: var(--color-text-primary);
- --card: var(--color-bg-secondary);
- --card-foreground: var(--color-text-primary);
- --popover: var(--color-bg-primary);
- --popover-foreground: var(--color-text-primary);
- --muted: var(--color-bg-secondary);
- --muted-foreground: var(--color-text-secondary);
- --destructive: var(--color-error);
- --border: color-mix(in srgb, var(--color-text-primary) 15%, transparent);
- --input: color-mix(in srgb, var(--color-text-primary) 15%, transparent);
- --ring: var(--color-primary);
-
- --sidebar: var(--color-bg-secondary);
- --sidebar-foreground: var(--color-text-primary);
- --sidebar-primary: var(--color-primary);
- --sidebar-primary-foreground: var(--color-text-on-primary);
- --sidebar-accent: var(--color-bg-primary);
- --sidebar-accent-foreground: var(--color-text-primary);
- --sidebar-border: color-mix(in srgb, var(--color-text-primary) 15%, transparent);
- --sidebar-ring: var(--color-primary);
-}
-
-[data-theme="crimson"].dark,
-.dark[data-theme="crimson"] {
- --color-primary: #FF827C;
- --color-secondary: #F99993;
- --color-accent: #FFB56B;
- --color-error: #FF5244;
- --color-bg-primary: #1B1215;
- --color-bg-secondary: #412E39;
- --color-text-primary: #F5F5F5;
- --color-text-secondary: #C6C6C6;
- --color-text-on-primary: #FFFFFF;
-
- --primary: var(--color-primary);
- --primary-foreground: var(--color-text-on-primary);
- --secondary: var(--color-bg-secondary);
- --secondary-foreground: var(--color-text-primary);
- --accent: var(--color-bg-secondary);
- --accent-foreground: var(--color-text-primary);
- --background: var(--color-bg-primary);
- --foreground: var(--color-text-primary);
- --card: var(--color-bg-secondary);
- --card-foreground: var(--color-text-primary);
- --popover: var(--color-bg-secondary);
- --popover-foreground: var(--color-text-primary);
- --muted: var(--color-bg-secondary);
- --muted-foreground: var(--color-text-secondary);
- --destructive: var(--color-error);
- --border: color-mix(in srgb, var(--color-text-primary) 12%, transparent);
- --input: color-mix(in srgb, var(--color-text-primary) 15%, transparent);
- --ring: var(--color-primary);
-
- --sidebar: var(--color-bg-secondary);
- --sidebar-foreground: var(--color-text-primary);
- --sidebar-primary: var(--color-primary);
- --sidebar-primary-foreground: var(--color-text-on-primary);
- --sidebar-accent: var(--color-bg-primary);
- --sidebar-accent-foreground: var(--color-text-primary);
- --sidebar-border: color-mix(in srgb, var(--color-text-primary) 12%, transparent);
- --sidebar-ring: var(--color-primary);
-}
-
-/* ================================================================== */
-/* THEME: Midnight — Deep navy with sky blue */
-/* ================================================================== */
-[data-theme="midnight"] {
- --color-primary: #1E4993;
- --color-secondary: #2D60AF;
- --color-accent: #4993E2;
- --color-error: #DD1C1A;
- --color-bg-primary: #EDF0F7;
- --color-bg-secondary: #CCD5E2;
- --color-text-primary: #111111;
- --color-text-secondary: #444444;
- --color-text-on-primary: #FFFFFF;
-
- --primary: var(--color-primary);
- --primary-foreground: var(--color-text-on-primary);
- --secondary: var(--color-bg-secondary);
- --secondary-foreground: var(--color-text-primary);
- --accent: var(--color-bg-secondary);
- --accent-foreground: var(--color-text-primary);
- --background: var(--color-bg-primary);
- --foreground: var(--color-text-primary);
- --card: var(--color-bg-secondary);
- --card-foreground: var(--color-text-primary);
- --popover: var(--color-bg-primary);
- --popover-foreground: var(--color-text-primary);
- --muted: var(--color-bg-secondary);
- --muted-foreground: var(--color-text-secondary);
- --destructive: var(--color-error);
- --border: color-mix(in srgb, var(--color-text-primary) 15%, transparent);
- --input: color-mix(in srgb, var(--color-text-primary) 15%, transparent);
- --ring: var(--color-primary);
-
- --sidebar: var(--color-bg-secondary);
- --sidebar-foreground: var(--color-text-primary);
- --sidebar-primary: var(--color-primary);
- --sidebar-primary-foreground: var(--color-text-on-primary);
- --sidebar-accent: var(--color-bg-primary);
- --sidebar-accent-foreground: var(--color-text-primary);
- --sidebar-border: color-mix(in srgb, var(--color-text-primary) 15%, transparent);
- --sidebar-ring: var(--color-primary);
-}
-
-[data-theme="midnight"].dark,
-.dark[data-theme="midnight"] {
- --color-primary: #82B5EA;
- --color-secondary: #93C6F2;
- --color-accent: #9ED8FF;
- --color-error: #FF5244;
- --color-bg-primary: #12161F;
- --color-bg-secondary: #2F3848;
- --color-text-primary: #F5F5F5;
- --color-text-secondary: #C6C6C6;
- --color-text-on-primary: #FFFFFF;
-
- --primary: var(--color-primary);
- --primary-foreground: var(--color-text-on-primary);
- --secondary: var(--color-bg-secondary);
- --secondary-foreground: var(--color-text-primary);
- --accent: var(--color-bg-secondary);
- --accent-foreground: var(--color-text-primary);
- --background: var(--color-bg-primary);
- --foreground: var(--color-text-primary);
- --card: var(--color-bg-secondary);
- --card-foreground: var(--color-text-primary);
- --popover: var(--color-bg-secondary);
- --popover-foreground: var(--color-text-primary);
- --muted: var(--color-bg-secondary);
- --muted-foreground: var(--color-text-secondary);
- --destructive: var(--color-error);
- --border: color-mix(in srgb, var(--color-text-primary) 12%, transparent);
- --input: color-mix(in srgb, var(--color-text-primary) 15%, transparent);
- --ring: var(--color-primary);
-
- --sidebar: var(--color-bg-secondary);
- --sidebar-foreground: var(--color-text-primary);
- --sidebar-primary: var(--color-primary);
- --sidebar-primary-foreground: var(--color-text-on-primary);
- --sidebar-accent: var(--color-bg-primary);
- --sidebar-accent-foreground: var(--color-text-primary);
- --sidebar-border: color-mix(in srgb, var(--color-text-primary) 12%, transparent);
- --sidebar-ring: var(--color-primary);
-}
-
-/* ================================================================== */
-/* THEME: Desert — Warm terracotta and sand tones */
-/* ================================================================== */
-[data-theme="desert"] {
- --color-primary: #AF6049;
- --color-secondary: #9E7C60;
- --color-accent: #D1932D;
- --color-error: #DD1C1A;
- --color-bg-primary: #F6F0EA;
- --color-bg-secondary: #E5D8C6;
- --color-text-primary: #111111;
- --color-text-secondary: #444444;
- --color-text-on-primary: #FFFFFF;
-
- --primary: var(--color-primary);
- --primary-foreground: var(--color-text-on-primary);
- --secondary: var(--color-bg-secondary);
- --secondary-foreground: var(--color-text-primary);
- --accent: var(--color-bg-secondary);
- --accent-foreground: var(--color-text-primary);
- --background: var(--color-bg-primary);
- --foreground: var(--color-text-primary);
- --card: var(--color-bg-secondary);
- --card-foreground: var(--color-text-primary);
- --popover: var(--color-bg-primary);
- --popover-foreground: var(--color-text-primary);
- --muted: var(--color-bg-secondary);
- --muted-foreground: var(--color-text-secondary);
- --destructive: var(--color-error);
- --border: color-mix(in srgb, var(--color-text-primary) 15%, transparent);
- --input: color-mix(in srgb, var(--color-text-primary) 15%, transparent);
- --ring: var(--color-primary);
-
- --sidebar: var(--color-bg-secondary);
- --sidebar-foreground: var(--color-text-primary);
- --sidebar-primary: var(--color-primary);
- --sidebar-primary-foreground: var(--color-text-on-primary);
- --sidebar-accent: var(--color-bg-primary);
- --sidebar-accent-foreground: var(--color-text-primary);
- --sidebar-border: color-mix(in srgb, var(--color-text-primary) 15%, transparent);
- --sidebar-ring: var(--color-primary);
-}
-
-[data-theme="desert"].dark,
-.dark[data-theme="desert"] {
- --color-primary: #F2B593;
- --color-secondary: #EAD1AF;
- --color-accent: #FFD86B;
- --color-error: #FF5244;
- --color-bg-primary: #1F1C16;
- --color-bg-secondary: #494138;
- --color-text-primary: #F5F5F5;
- --color-text-secondary: #C6C6C6;
- --color-text-on-primary: #FFFFFF;
-
- --primary: var(--color-primary);
- --primary-foreground: var(--color-text-on-primary);
- --secondary: var(--color-bg-secondary);
- --secondary-foreground: var(--color-text-primary);
- --accent: var(--color-bg-secondary);
- --accent-foreground: var(--color-text-primary);
- --background: var(--color-bg-primary);
- --foreground: var(--color-text-primary);
- --card: var(--color-bg-secondary);
- --card-foreground: var(--color-text-primary);
- --popover: var(--color-bg-secondary);
- --popover-foreground: var(--color-text-primary);
- --muted: var(--color-bg-secondary);
- --muted-foreground: var(--color-text-secondary);
- --destructive: var(--color-error);
- --border: color-mix(in srgb, var(--color-text-primary) 12%, transparent);
- --input: color-mix(in srgb, var(--color-text-primary) 15%, transparent);
- --ring: var(--color-primary);
-
- --sidebar: var(--color-bg-secondary);
- --sidebar-foreground: var(--color-text-primary);
- --sidebar-primary: var(--color-primary);
- --sidebar-primary-foreground: var(--color-text-on-primary);
- --sidebar-accent: var(--color-bg-primary);
- --sidebar-accent-foreground: var(--color-text-primary);
- --sidebar-border: color-mix(in srgb, var(--color-text-primary) 12%, transparent);
- --sidebar-ring: var(--color-primary);
-}
-
-/* ================================================================== */
-/* THEME: Mint — Fresh green with turquoise */
-/* ================================================================== */
-[data-theme="mint"] {
- --color-primary: #38AF93;
- --color-secondary: #60C6AF;
- --color-accent: #2D9EAF;
- --color-error: #DD1C1A;
- --color-bg-primary: #EDF6F0;
- --color-bg-secondary: #D1E2D8;
- --color-text-primary: #111111;
- --color-text-secondary: #444444;
- --color-text-on-primary: #FFFFFF;
-
- --primary: var(--color-primary);
- --primary-foreground: var(--color-text-on-primary);
- --secondary: var(--color-bg-secondary);
- --secondary-foreground: var(--color-text-primary);
- --accent: var(--color-bg-secondary);
- --accent-foreground: var(--color-text-primary);
- --background: var(--color-bg-primary);
- --foreground: var(--color-text-primary);
- --card: var(--color-bg-secondary);
- --card-foreground: var(--color-text-primary);
- --popover: var(--color-bg-primary);
- --popover-foreground: var(--color-text-primary);
- --muted: var(--color-bg-secondary);
- --muted-foreground: var(--color-text-secondary);
- --destructive: var(--color-error);
- --border: color-mix(in srgb, var(--color-text-primary) 15%, transparent);
- --input: color-mix(in srgb, var(--color-text-primary) 15%, transparent);
- --ring: var(--color-primary);
-
- --sidebar: var(--color-bg-secondary);
- --sidebar-foreground: var(--color-text-primary);
- --sidebar-primary: var(--color-primary);
- --sidebar-primary-foreground: var(--color-text-on-primary);
- --sidebar-accent: var(--color-bg-primary);
- --sidebar-accent-foreground: var(--color-text-primary);
- --sidebar-border: color-mix(in srgb, var(--color-text-primary) 15%, transparent);
- --sidebar-ring: var(--color-primary);
-}
-
-[data-theme="mint"].dark,
-.dark[data-theme="mint"] {
- --color-primary: #93F2D8;
- --color-secondary: #BFF9EA;
- --color-accent: #6BEAF2;
- --color-error: #FF5244;
- --color-bg-primary: #161F1F;
- --color-bg-secondary: #384949;
- --color-text-primary: #F5F5F5;
- --color-text-secondary: #C6C6C6;
- --color-text-on-primary: #FFFFFF;
-
- --primary: var(--color-primary);
- --primary-foreground: var(--color-text-on-primary);
- --secondary: var(--color-bg-secondary);
- --secondary-foreground: var(--color-text-primary);
- --accent: var(--color-bg-secondary);
- --accent-foreground: var(--color-text-primary);
- --background: var(--color-bg-primary);
- --foreground: var(--color-text-primary);
- --card: var(--color-bg-secondary);
- --card-foreground: var(--color-text-primary);
- --popover: var(--color-bg-secondary);
- --popover-foreground: var(--color-text-primary);
- --muted: var(--color-bg-secondary);
- --muted-foreground: var(--color-text-secondary);
- --destructive: var(--color-error);
- --border: color-mix(in srgb, var(--color-text-primary) 12%, transparent);
- --input: color-mix(in srgb, var(--color-text-primary) 15%, transparent);
- --ring: var(--color-primary);
-
- --sidebar: var(--color-bg-secondary);
- --sidebar-foreground: var(--color-text-primary);
- --sidebar-primary: var(--color-primary);
- --sidebar-primary-foreground: var(--color-text-on-primary);
- --sidebar-accent: var(--color-bg-primary);
- --sidebar-accent-foreground: var(--color-text-primary);
- --sidebar-border: color-mix(in srgb, var(--color-text-primary) 12%, transparent);
- --sidebar-ring: var(--color-primary);
+
+ /* Chart palette */
+ --chart-1: #8FB896;
+ --chart-2: #D4A08A;
+ --chart-3: #6B8F71;
+ --chart-4: #C4856A;
+ --chart-5: #A3C4A8;
}