export const baseColors = { // Base colors white: "#ffffff", black: "#000000", // Zinc scale (primary gray palette) zinc: { 50: "#fafafa", 100: "#f4f4f5", 200: "#e4e4e7", 300: "#d4d4d8", 400: "#a1a1aa", 500: "#71717a", 600: "#52525b", 700: "#3f3f46", 800: "#27272a", 850: "#1a1a1d", 900: "#18181b", 950: "#121214", }, // Gray scale gray: { 50: "#f9fafb", 100: "#f3f4f6", 200: "#e5e7eb", 300: "#d1d5db", 400: "#9ca3af", 500: "#6b7280", 600: "#4b5563", 700: "#374151", 800: "#1f2937", 900: "#111827", }, // Slate scale slate: { 200: "#e2e8f0", }, // Blue scale blue: { 50: "#eff6ff", 100: "#dbeafe", 200: "#bfdbfe", 300: "#93c5fd", 400: "#60a5fa", 500: "#3b82f6", 600: "#2563eb", 700: "#1d4ed8", 800: "#1e40af", 900: "#1e3a8a", 950: "#172554", }, // Green scale green: { 100: "#dcfce7", 200: "#bbf7d0", 400: "#4ade80", 500: "#22c55e", 600: "#16a34a", 800: "#166534", 900: "#14532d", }, // Red scale red: { 100: "#fee2e2", 200: "#fecaca", 300: "#fca5a5", 500: "#ef4444", 600: "#dc2626", 800: "#991b1b", 900: "#7f1d1d", }, // Teal scale teal: { 200: "#99f6e4", }, // Amber scale amber: { 500: "#f59e0b", }, // Yellow scale yellow: { 400: "#fbbf24", }, // Purple scale purple: { 500: "#a855f7", 600: "#9333ea", }, // Orange scale orange: { 500: "#f97316", 600: "#ea580c", }, } as const; // Semantic color tokens - Layer-based system const lightSemanticColors = { // Surfaces (layers) - shifted one step lighter surface0: "#ffffff", // App background surface1: "#fafafa", // Subtle hover (was zinc-100, now zinc-50) surface2: "#f4f4f5", // Elevated: badges, inputs, sheets (was zinc-200, now zinc-100) surface3: "#e4e4e7", // Highest elevation (was zinc-300, now zinc-200) surface4: "#d4d4d8", // Extra emphasis (was zinc-400, now zinc-300) surfaceDiffEmpty: "#f6f6f6", // Empty side of split diff rows, between surface1 and surface2 and biased toward surface2 surfaceSidebar: "#f4f4f5", // Sidebar background (darker than main) surfaceWorkspace: "#ffffff", // Workspace main background // Text foreground: "#09090b", foregroundMuted: "#71717a", // Controls scrollbarHandle: "#3f3f46", // zinc-700 // Borders - shifted one step lighter border: "#e4e4e7", // (was zinc-200, now zinc-200 - keep for contrast) borderAccent: "#ececf1", // Softer accent border for low-emphasis outlines // Brand accent: "#20744A", accentBright: "#239956", accentForeground: "#ffffff", // Semantic destructive: "#dc2626", destructiveForeground: "#ffffff", success: "#20744A", successForeground: "#ffffff", // Legacy aliases (for gradual migration) background: "#ffffff", popover: "#ffffff", popoverForeground: "#09090b", primary: "#18181b", primaryForeground: "#fafafa", secondary: "#f4f4f5", secondaryForeground: "#09090b", muted: "#f4f4f5", mutedForeground: "#71717a", accentBorder: "#ececf1", input: "#f4f4f5", ring: "#18181b", terminal: { background: "#ffffff", foreground: "#09090b", cursor: "#09090b", cursorAccent: "#ffffff", selectionBackground: "rgba(0, 0, 0, 0.15)", selectionForeground: "#09090b", black: "#09090b", red: "#dc2626", green: "#16a34a", yellow: "#ca8a04", blue: "#2563eb", magenta: "#9333ea", cyan: "#0891b2", white: "#ffffff", brightBlack: "#3f3f46", brightRed: "#ef4444", brightGreen: "#22c55e", brightYellow: "#f59e0b", brightBlue: "#3b82f6", brightMagenta: "#a855f7", brightCyan: "#06b6d4", brightWhite: "#fafafa", }, } as const; const darkSemanticColors = { // Surfaces (layers) — subtle teal tint surface0: "#181B1A", // App background surface1: "#1E2120", // Subtle hover surface2: "#272A29", // Elevated: badges, inputs, sheets surface3: "#434645", // Highest elevation surface4: "#595B5B", // Extra emphasis surfaceDiffEmpty: "#252827", // Empty side of split diff rows, between surface1 and surface2 and biased toward surface2 surfaceSidebar: "#141716", // Sidebar background (darker than main) surfaceWorkspace: "#1E2120", // Workspace main background (surface1) // Text foreground: "#fafafa", foregroundMuted: "#A1A5A4", // Controls scrollbarHandle: "#717574", // zinc-500 w/ teal tint // Borders border: "#252B2A", borderAccent: "#2F3534", // Brand accent: "#20744A", accentBright: "#7ccba0", accentForeground: "#ffffff", // Semantic destructive: "#ef4444", destructiveForeground: "#ffffff", success: "#20744A", successForeground: "#ffffff", // Legacy aliases (for gradual migration) background: "#181B1A", popover: "#272A29", popoverForeground: "#fafafa", primary: "#fafafa", primaryForeground: "#181B1A", secondary: "#272A29", secondaryForeground: "#fafafa", muted: "#272A29", mutedForeground: "#A1A5A4", accentBorder: "#2F3534", input: "#272A29", ring: "#d4d4d8", terminal: { background: "#181B1A", foreground: "#fafafa", cursor: "#fafafa", cursorAccent: "#181B1A", selectionBackground: "rgba(255, 255, 255, 0.2)", selectionForeground: "#fafafa", black: "#141716", red: "#ef4444", green: "#22c55e", yellow: "#f59e0b", blue: "#3b82f6", magenta: "#a855f7", cyan: "#06b6d4", white: "#e4e4e7", brightBlack: "#434645", brightRed: "#f87171", brightGreen: "#4ade80", brightYellow: "#fbbf24", brightBlue: "#60a5fa", brightMagenta: "#c084fc", brightCyan: "#22d3ee", brightWhite: "#ffffff", }, } as const; const commonTheme = { spacing: { 0: 0, 1: 4, 1.5: 6, 2: 8, 3: 12, 4: 16, 6: 24, 8: 32, 12: 48, 16: 64, 20: 80, 24: 96, 32: 128, }, fontSize: { xs: 12, sm: 14, base: 16, lg: 18, xl: 20, "2xl": 22, "3xl": 26, "4xl": 34, }, lineHeight: { diff: 22, }, iconSize: { xs: 12, sm: 14, md: 16, lg: 20, }, fontWeight: { normal: "normal" as const, medium: "500" as const, semibold: "600" as const, bold: "bold" as const, }, borderRadius: { none: 0, sm: 2, base: 4, md: 6, lg: 8, xl: 12, "2xl": 16, full: 9999, }, borderWidth: { 0: 0, 1: 1, 2: 2, }, opacity: { 0: 0, 50: 0.5, 100: 1, }, } as const; export const darkTheme = { colorScheme: "dark" as const, colors: { ...darkSemanticColors, palette: baseColors, }, shadow: { sm: { shadowColor: "rgba(0, 0, 0, 0.25)", shadowOffset: { width: 0, height: 2 }, shadowRadius: 4, elevation: 2, }, md: { shadowColor: "rgba(0, 0, 0, 0.20)", shadowOffset: { width: 0, height: 4 }, shadowRadius: 8, elevation: 8, }, lg: { shadowColor: "rgba(0, 0, 0, 0.40)", shadowOffset: { width: 0, height: 12 }, shadowRadius: 24, elevation: 8, }, }, ...commonTheme, } as const; export const lightTheme = { colorScheme: "light" as const, colors: { ...lightSemanticColors, palette: baseColors, }, shadow: { sm: { shadowColor: "rgba(0, 0, 0, 0.02)", shadowOffset: { width: 0, height: 2 }, shadowRadius: 8, elevation: 2, }, md: { shadowColor: "rgba(0, 0, 0, 0.04)", shadowOffset: { width: 0, height: 4 }, shadowRadius: 16, elevation: 4, }, lg: { shadowColor: "rgba(0, 0, 0, 0.08)", shadowOffset: { width: 0, height: 8 }, shadowRadius: 24, elevation: 8, }, }, ...commonTheme, } as const; // Keep compatibility with existing code export const theme = darkTheme; // Export a union type that works for both themes export type Theme = typeof darkTheme | typeof lightTheme;