| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201 |
- import SwiftUI
- enum AppTheme {
- static let windowWidth: CGFloat = 1100
- static let windowHeight: CGFloat = 720
- static let windowMinWidth: CGFloat = windowWidth
- static let windowMinHeight: CGFloat = windowHeight
- static let sidebarWidth: CGFloat = 240
- static let headerTopInset: CGFloat = 24
- static let logoMarkSize: CGFloat = 36
- /// Extra top inset so the sidebar logo clears the window traffic lights.
- static let trafficLightClearance: CGFloat = 16
- static let contentPadding: CGFloat = 40
- static let contentCardPadding: CGFloat = 14
- static let contentCardTopPadding: CGFloat = 18
- static let contentCardLeadingPadding: CGFloat = 20
- static let contentCardBottomPadding: CGFloat = 16
- static let contentCardSpacing: CGFloat = 10
- static let yourContentLogoHeight: CGFloat = 46
- static var sidebarLogoTopInset: CGFloat {
- headerTopInset + trafficLightClearance
- }
- static let sidebarLogoBottomSpacing: CGFloat = 20
- /// Aligns tool page titles with the sidebar "Gramora" label.
- static var brandLabelTopInset: CGFloat {
- headerTopInset + (logoMarkSize - 22) / 2
- }
- static let cardCornerRadius: CGFloat = 16
- static let buttonCornerRadius: CGFloat = 14
- static let navItemCornerRadius: CGFloat = 10
- static let inputCornerRadius: CGFloat = 12
- static let textEditorHorizontalInset: CGFloat = 20
- static let textEditorVerticalInset: CGFloat = 20
- static let compactTextEditorHeight: CGFloat = 240
- 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 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 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 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 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 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 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 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 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 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 {
- LinearGradient(
- colors: [gradientStart, gradientEnd],
- startPoint: .leading,
- endPoint: .trailing
- )
- }
- static var primaryGradientHover: LinearGradient {
- LinearGradient(
- colors: [gradientStartHover, gradientEndHover],
- startPoint: .leading,
- endPoint: .trailing
- )
- }
- }
|