|
|
@@ -37,47 +37,158 @@ enum AppTheme {
|
|
|
static let textEditorVerticalInset: CGFloat = 20
|
|
|
static let compactTextEditorHeight: CGFloat = 240
|
|
|
|
|
|
- static let background = Color(red: 0.973, green: 0.980, blue: 0.984)
|
|
|
- static let sidebarBackground = Color.white
|
|
|
- static let cardBackground = Color.white
|
|
|
- static let textPrimary = Color(red: 0.10, green: 0.14, blue: 0.22)
|
|
|
- static let textSecondary = Color(red: 0.28, green: 0.32, blue: 0.38)
|
|
|
- static let textMuted = Color(red: 0.42, green: 0.46, blue: 0.50)
|
|
|
- static let border = Color(red: 0.78, green: 0.82, blue: 0.87)
|
|
|
- static let inputBorder = border
|
|
|
+ private static var isDark: Bool {
|
|
|
+ UserDefaults.standard.bool(forKey: ThemeManager.storageKey)
|
|
|
+ }
|
|
|
+
|
|
|
+ static var background: Color {
|
|
|
+ isDark
|
|
|
+ ? Color(red: 0.08, green: 0.09, blue: 0.11)
|
|
|
+ : Color(red: 0.973, green: 0.980, blue: 0.984)
|
|
|
+ }
|
|
|
+
|
|
|
+ static var sidebarBackground: Color {
|
|
|
+ isDark
|
|
|
+ ? Color(red: 0.11, green: 0.12, blue: 0.15)
|
|
|
+ : Color.white
|
|
|
+ }
|
|
|
+
|
|
|
+ static var cardBackground: Color {
|
|
|
+ isDark
|
|
|
+ ? Color(red: 0.14, green: 0.15, blue: 0.18)
|
|
|
+ : Color.white
|
|
|
+ }
|
|
|
+
|
|
|
+ static var surface: Color { cardBackground }
|
|
|
+
|
|
|
+ static var sectionBackground: Color {
|
|
|
+ isDark
|
|
|
+ ? Color(red: 0.12, green: 0.13, blue: 0.16)
|
|
|
+ : Color(red: 0.98, green: 0.99, blue: 0.99)
|
|
|
+ }
|
|
|
+
|
|
|
+ static var panelBackground: Color {
|
|
|
+ isDark
|
|
|
+ ? Color(red: 0.10, green: 0.11, blue: 0.13)
|
|
|
+ : Color(red: 0.96, green: 0.97, blue: 0.98)
|
|
|
+ }
|
|
|
+
|
|
|
+ static var textPrimary: Color {
|
|
|
+ isDark
|
|
|
+ ? Color(red: 0.94, green: 0.95, blue: 0.97)
|
|
|
+ : Color(red: 0.10, green: 0.14, blue: 0.22)
|
|
|
+ }
|
|
|
+
|
|
|
+ static var textSecondary: Color {
|
|
|
+ isDark
|
|
|
+ ? Color(red: 0.74, green: 0.77, blue: 0.82)
|
|
|
+ : Color(red: 0.28, green: 0.32, blue: 0.38)
|
|
|
+ }
|
|
|
+
|
|
|
+ static var textMuted: Color {
|
|
|
+ isDark
|
|
|
+ ? Color(red: 0.54, green: 0.57, blue: 0.62)
|
|
|
+ : Color(red: 0.42, green: 0.46, blue: 0.50)
|
|
|
+ }
|
|
|
+
|
|
|
+ static var border: Color {
|
|
|
+ isDark
|
|
|
+ ? Color(red: 0.24, green: 0.26, blue: 0.30)
|
|
|
+ : Color(red: 0.78, green: 0.82, blue: 0.87)
|
|
|
+ }
|
|
|
+
|
|
|
+ static var inputBorder: Color { border }
|
|
|
|
|
|
static let teal = Color(red: 0.0, green: 0.651, blue: 0.494)
|
|
|
- static let tealLight = Color(red: 0.90, green: 0.97, blue: 0.94)
|
|
|
static let tealDark = Color(red: 0.0, green: 0.55, blue: 0.42)
|
|
|
+
|
|
|
+ static var tealLight: Color {
|
|
|
+ isDark
|
|
|
+ ? Color(red: 0.0, green: 0.651, blue: 0.494).opacity(0.16)
|
|
|
+ : Color(red: 0.90, green: 0.97, blue: 0.94)
|
|
|
+ }
|
|
|
+
|
|
|
static let gradientStart = Color(red: 0.0, green: 0.62, blue: 0.47)
|
|
|
static let gradientEnd = Color(red: 0.20, green: 0.78, blue: 0.60)
|
|
|
|
|
|
- static let premiumBackground = Color(red: 0.91, green: 0.97, blue: 0.95)
|
|
|
- static let premiumBorder = Color(red: 0.82, green: 0.93, blue: 0.88)
|
|
|
- static let blobColor = Color(red: 0.0, green: 0.651, blue: 0.494).opacity(0.07)
|
|
|
- static let dotColor = Color(red: 0.0, green: 0.651, blue: 0.494).opacity(0.14)
|
|
|
+ static var premiumBackground: Color {
|
|
|
+ isDark
|
|
|
+ ? Color(red: 0.0, green: 0.651, blue: 0.494).opacity(0.12)
|
|
|
+ : Color(red: 0.91, green: 0.97, blue: 0.95)
|
|
|
+ }
|
|
|
|
|
|
- static let cardShadow = Color.black.opacity(0.06)
|
|
|
+ static var premiumBorder: Color {
|
|
|
+ isDark
|
|
|
+ ? Color(red: 0.0, green: 0.651, blue: 0.494).opacity(0.28)
|
|
|
+ : Color(red: 0.82, green: 0.93, blue: 0.88)
|
|
|
+ }
|
|
|
+
|
|
|
+ static var blobColor: Color {
|
|
|
+ Color(red: 0.0, green: 0.651, blue: 0.494).opacity(isDark ? 0.10 : 0.07)
|
|
|
+ }
|
|
|
+
|
|
|
+ static var dotColor: Color {
|
|
|
+ Color(red: 0.0, green: 0.651, blue: 0.494).opacity(isDark ? 0.18 : 0.14)
|
|
|
+ }
|
|
|
+
|
|
|
+ static var cardShadow: Color {
|
|
|
+ Color.black.opacity(isDark ? 0.24 : 0.06)
|
|
|
+ }
|
|
|
+
|
|
|
+ static var clearBackground: Color {
|
|
|
+ isDark
|
|
|
+ ? Color(red: 0.28, green: 0.12, blue: 0.14)
|
|
|
+ : Color(red: 1.0, green: 0.95, blue: 0.94)
|
|
|
+ }
|
|
|
+
|
|
|
+ static var clearBackgroundHover: Color {
|
|
|
+ isDark
|
|
|
+ ? Color(red: 0.34, green: 0.14, blue: 0.16)
|
|
|
+ : Color(red: 1.0, green: 0.91, blue: 0.90)
|
|
|
+ }
|
|
|
|
|
|
- static let clearBackground = Color(red: 1.0, green: 0.95, blue: 0.94)
|
|
|
- static let clearBackgroundHover = Color(red: 1.0, green: 0.91, blue: 0.90)
|
|
|
static let clearForeground = Color(red: 0.82, green: 0.32, blue: 0.36)
|
|
|
static let clearForegroundHover = Color(red: 0.72, green: 0.22, blue: 0.28)
|
|
|
- static let clearBorder = Color(red: 0.94, green: 0.80, blue: 0.80)
|
|
|
+
|
|
|
+ static var clearBorder: Color {
|
|
|
+ isDark
|
|
|
+ ? Color(red: 0.82, green: 0.32, blue: 0.36).opacity(0.35)
|
|
|
+ : Color(red: 0.94, green: 0.80, blue: 0.80)
|
|
|
+ }
|
|
|
+
|
|
|
static let clearShadow = Color(red: 0.82, green: 0.32, blue: 0.36).opacity(0.18)
|
|
|
|
|
|
- static let toolbarBackgroundHover = Color(red: 0.96, green: 0.99, blue: 0.98)
|
|
|
+ static var toolbarBackgroundHover: Color {
|
|
|
+ isDark
|
|
|
+ ? Color(red: 0.18, green: 0.19, blue: 0.22)
|
|
|
+ : Color(red: 0.96, green: 0.99, blue: 0.98)
|
|
|
+ }
|
|
|
+
|
|
|
static let toolbarForegroundHover = teal
|
|
|
- static let toolbarBorderHover = teal.opacity(0.35)
|
|
|
- static let toolbarShadow = Color.black.opacity(0.03)
|
|
|
- static let toolbarShadowHover = Color.black.opacity(0.08)
|
|
|
+
|
|
|
+ static var toolbarBorderHover: Color {
|
|
|
+ teal.opacity(isDark ? 0.45 : 0.35)
|
|
|
+ }
|
|
|
+
|
|
|
+ static var toolbarShadow: Color {
|
|
|
+ Color.black.opacity(isDark ? 0.18 : 0.03)
|
|
|
+ }
|
|
|
+
|
|
|
+ static var toolbarShadowHover: Color {
|
|
|
+ Color.black.opacity(isDark ? 0.28 : 0.08)
|
|
|
+ }
|
|
|
|
|
|
static let gradientStartHover = Color(red: 0.0, green: 0.68, blue: 0.52)
|
|
|
static let gradientEndHover = Color(red: 0.25, green: 0.84, blue: 0.66)
|
|
|
static let primaryShadow = teal.opacity(0.30)
|
|
|
static let primaryShadowHover = teal.opacity(0.42)
|
|
|
|
|
|
- static let navBackgroundHover = Color(red: 0.88, green: 0.96, blue: 0.93)
|
|
|
+ static var navBackgroundHover: Color {
|
|
|
+ isDark
|
|
|
+ ? Color(red: 0.0, green: 0.651, blue: 0.494).opacity(0.14)
|
|
|
+ : Color(red: 0.88, green: 0.96, blue: 0.93)
|
|
|
+ }
|
|
|
+
|
|
|
static let navForegroundHover = teal
|
|
|
|
|
|
static var primaryGradient: LinearGradient {
|