diff --git a/Gaze/Services/TimerEngine.swift b/Gaze/Services/TimerEngine.swift index b68ab51..935787c 100644 --- a/Gaze/Services/TimerEngine.swift +++ b/Gaze/Services/TimerEngine.swift @@ -99,7 +99,7 @@ class TimerEngine: ObservableObject { } } - private func triggerReminder(for type: TimerType) { + func triggerReminder(for type: TimerType) { switch type { case .lookAway: pause() diff --git a/Gaze/Views/Components/AnimatedFaceView.swift b/Gaze/Views/Components/AnimatedFaceView.swift index dde7a54..f55f9a9 100644 --- a/Gaze/Views/Components/AnimatedFaceView.swift +++ b/Gaze/Views/Components/AnimatedFaceView.swift @@ -16,7 +16,7 @@ struct AnimatedFaceView: View { ZStack { // Face circle Circle() - .fill(Color.yellow) + .stroke(Color.accentColor, lineWidth: size * 0.04) .frame(width: size, height: size) // Eyes @@ -28,7 +28,7 @@ struct AnimatedFaceView: View { // Smile Arc(startAngle: .degrees(20), endAngle: .degrees(160), clockwise: false) - .stroke(Color.black, lineWidth: size * 0.05) + .stroke(Color.accentColor, lineWidth: size * 0.04) .frame(width: size * 0.5, height: size * 0.3) .offset(y: size * 0.15) } @@ -75,12 +75,12 @@ struct Eye: View { var body: some View { ZStack { Circle() - .fill(Color.white) + .stroke(Color.accentColor, lineWidth: size * 0.15) .frame(width: size, height: size) Circle() - .fill(Color.black) - .frame(width: size * 0.5, height: size * 0.5) + .fill(Color.accentColor) + .frame(width: size * 0.3, height: size * 0.3) .offset(offset) } } diff --git a/Gaze/Views/Components/InfoBox.swift b/Gaze/Views/Components/InfoBox.swift index 859ea26..a61ad64 100644 --- a/Gaze/Views/Components/InfoBox.swift +++ b/Gaze/Views/Components/InfoBox.swift @@ -33,7 +33,7 @@ struct InfoBox: View { .foregroundColor(.white) } .padding() - .glassEffect(.regular.tint(.blue), in: .rect(cornerRadius: 8)) + .glassEffect(.regular.tint(.accentColor), in: .rect(cornerRadius: 8)) } } diff --git a/Gaze/Views/MenuBar/MenuBarContentView.swift b/Gaze/Views/MenuBar/MenuBarContentView.swift index f62edba..2efee63 100644 --- a/Gaze/Views/MenuBar/MenuBarContentView.swift +++ b/Gaze/Views/MenuBar/MenuBarContentView.swift @@ -14,7 +14,7 @@ struct MenuBarButtonStyle: ButtonStyle { .background( RoundedRectangle(cornerRadius: 6) .fill( - configuration.isPressed ? Color.blue.opacity(0.2) : Color.gray.opacity(0.1) + configuration.isPressed ? Color.accentColor.opacity(0.2) : Color.gray.opacity(0.1) ) .opacity(configuration.isPressed ? 1 : 0) ) @@ -30,7 +30,7 @@ struct MenuBarHoverButtonStyle: ButtonStyle { configuration.label .background( RoundedRectangle(cornerRadius: 6) - .fill(isHovered ? Color.blue.opacity(0.35) : Color.clear) + .fill(isHovered ? Color.accentColor.opacity(0.35) : Color.clear) ) .contentShape(Rectangle()) .onHover { hovering in @@ -54,7 +54,7 @@ struct MenuBarContentView: View { HStack { Image(systemName: "eye.fill") .font(.title2) - .foregroundColor(.blue) + .foregroundColor(.accentColor) Text("Gaze") .font(.title2) .fontWeight(.semibold) @@ -79,6 +79,9 @@ struct MenuBarContentView: View { state: state, onSkip: { timerEngine.skipNext(type: timerType) + }, + onDevTrigger: { + timerEngine.triggerReminder(for: timerType) } ) } @@ -153,7 +156,9 @@ struct TimerStatusRow: View { let type: TimerType let state: TimerState var onSkip: () -> Void + var onDevTrigger: (() -> Void)? = nil @State private var isHoveredSkip = false + @State private var isHoveredDevTrigger = false @State private var isHoveredBody = false var body: some View { @@ -174,14 +179,34 @@ struct TimerStatusRow: View { Spacer() + #if DEBUG + if let onDevTrigger = onDevTrigger { + Button(action: onDevTrigger) { + Image(systemName: "bolt.fill") + .font(.caption) + .foregroundColor(.yellow) + .padding(6) + .background( + Circle() + .fill(isHoveredDevTrigger ? Color.yellow.opacity(0.35) : Color.clear) + ) + } + .buttonStyle(.plain) + .help("Trigger \(type.displayName) reminder now (dev)") + .onHover { hovering in + isHoveredDevTrigger = hovering + } + } + #endif + Button(action: onSkip) { Image(systemName: "forward.fill") .font(.caption) - .foregroundColor(.blue) + .foregroundColor(.accentColor) .padding(6) .background( Circle() - .fill(isHoveredSkip ? Color.blue.opacity(0.35) : Color.clear) + .fill(isHoveredSkip ? Color.accentColor.opacity(0.35) : Color.clear) ) } .buttonStyle(.plain) @@ -194,7 +219,7 @@ struct TimerStatusRow: View { isHoveredBody = hovering }.background( RoundedRectangle(cornerRadius: 6).fill( - isHoveredBody ? Color.blue.opacity(0.35) : Color.clear) + isHoveredBody ? Color.accentColor.opacity(0.35) : Color.clear) ) .padding(.horizontal) .padding(.vertical, 4) @@ -202,7 +227,7 @@ struct TimerStatusRow: View { private var iconColor: Color { switch type { - case .lookAway: return .blue + case .lookAway: return .accentColor case .blink: return .green case .posture: return .orange } diff --git a/Gaze/Views/Onboarding/BlinkSetupView.swift b/Gaze/Views/Onboarding/BlinkSetupView.swift index 960dc15..a4d4f55 100644 --- a/Gaze/Views/Onboarding/BlinkSetupView.swift +++ b/Gaze/Views/Onboarding/BlinkSetupView.swift @@ -47,7 +47,7 @@ struct BlinkSetupView: View { .foregroundColor(.white) } .padding() - .glassEffect(.regular.tint(.blue), in: .rect(cornerRadius: 8)) + .glassEffect(.regular.tint(.accentColor), in: .rect(cornerRadius: 8)) VStack(alignment: .leading, spacing: 20) { Toggle("Enable Blink Reminders", isOn: $enabled) diff --git a/Gaze/Views/Onboarding/CompletionView.swift b/Gaze/Views/Onboarding/CompletionView.swift index ff397b7..e36e6da 100644 --- a/Gaze/Views/Onboarding/CompletionView.swift +++ b/Gaze/Views/Onboarding/CompletionView.swift @@ -32,7 +32,7 @@ struct CompletionView: View { HStack(spacing: 16) { Image(systemName: "menubar.rectangle") - .foregroundColor(.blue) + .foregroundColor(.accentColor) .frame(width: 30) Text("Gaze will appear in your menu bar") .font(.subheadline) @@ -41,7 +41,7 @@ struct CompletionView: View { HStack(spacing: 16) { Image(systemName: "clock") - .foregroundColor(.blue) + .foregroundColor(.accentColor) .frame(width: 30) Text("Timers will start automatically") .font(.subheadline) @@ -50,7 +50,7 @@ struct CompletionView: View { HStack(spacing: 16) { Image(systemName: "gearshape") - .foregroundColor(.blue) + .foregroundColor(.accentColor) .frame(width: 30) Text("Adjust settings anytime from the menu bar") .font(.subheadline) diff --git a/Gaze/Views/Onboarding/LookAwaySetupView.swift b/Gaze/Views/Onboarding/LookAwaySetupView.swift index 55175be..0740633 100644 --- a/Gaze/Views/Onboarding/LookAwaySetupView.swift +++ b/Gaze/Views/Onboarding/LookAwaySetupView.swift @@ -22,7 +22,7 @@ struct LookAwaySetupView: View { VStack(spacing: 30) { Image(systemName: "eye.fill") .font(.system(size: 60)) - .foregroundColor(.blue) + .foregroundColor(.accentColor) Text("Look Away Reminder") .font(.system(size: 28, weight: .bold)) @@ -48,7 +48,7 @@ struct LookAwaySetupView: View { .foregroundColor(.white) } .padding() - .glassEffect(.regular.tint(.blue), in: .rect(cornerRadius: 8)) + .glassEffect(.regular.tint(.accentColor), in: .rect(cornerRadius: 8)) VStack(alignment: .leading, spacing: 20) { Toggle("Enable Look Away Reminders", isOn: $enabled) diff --git a/Gaze/Views/Onboarding/OnboardingContainerView.swift b/Gaze/Views/Onboarding/OnboardingContainerView.swift index 24de23f..013941e 100644 --- a/Gaze/Views/Onboarding/OnboardingContainerView.swift +++ b/Gaze/Views/Onboarding/OnboardingContainerView.swift @@ -127,7 +127,7 @@ struct OnboardingContainerView: View { .foregroundColor(.white) } .glassEffect( - .regular.tint(currentPage == 5 ? .green : .blue).interactive(), + .regular.tint(currentPage == 5 ? .green : .accentColor).interactive(), in: .rect(cornerRadius: 10)) } .padding(.horizontal, 40) diff --git a/Gaze/Views/Onboarding/PostureSetupView.swift b/Gaze/Views/Onboarding/PostureSetupView.swift index e39eb9e..34d33f4 100644 --- a/Gaze/Views/Onboarding/PostureSetupView.swift +++ b/Gaze/Views/Onboarding/PostureSetupView.swift @@ -47,7 +47,7 @@ struct PostureSetupView: View { .foregroundColor(.white) } .padding() - .glassEffect(.regular.tint(.blue), in: .rect(cornerRadius: 8)) + .glassEffect(.regular.tint(.accentColor), in: .rect(cornerRadius: 8)) VStack(alignment: .leading, spacing: 20) { Toggle("Enable Posture Reminders", isOn: $enabled) diff --git a/Gaze/Views/Onboarding/SettingsOnboardingView.swift b/Gaze/Views/Onboarding/SettingsOnboardingView.swift index 98226ac..7bdca93 100644 --- a/Gaze/Views/Onboarding/SettingsOnboardingView.swift +++ b/Gaze/Views/Onboarding/SettingsOnboardingView.swift @@ -16,7 +16,7 @@ struct SettingsOnboardingView: View { Image(systemName: "gearshape.fill") .font(.system(size: 80)) - .foregroundColor(.blue) + .foregroundColor(.accentColor) Text("Final Settings") .font(.system(size: 36, weight: .bold)) diff --git a/Gaze/Views/Onboarding/WelcomeView.swift b/Gaze/Views/Onboarding/WelcomeView.swift index d61bdd5..a0f27e5 100644 --- a/Gaze/Views/Onboarding/WelcomeView.swift +++ b/Gaze/Views/Onboarding/WelcomeView.swift @@ -14,7 +14,7 @@ struct WelcomeView: View { Image(systemName: "eye.fill") .font(.system(size: 80)) - .foregroundColor(.blue) + .foregroundColor(.accentColor) Text("Welcome to Gaze") .font(.system(size: 36, weight: .bold)) @@ -48,7 +48,7 @@ struct FeatureRow: View { HStack(alignment: .top, spacing: 16) { Image(systemName: icon) .font(.title2) - .foregroundColor(.blue) + .foregroundColor(.accentColor) .frame(width: 30) VStack(alignment: .leading, spacing: 4) { diff --git a/Gaze/Views/Reminders/LookAwayReminderView.swift b/Gaze/Views/Reminders/LookAwayReminderView.swift index d78c395..c55b7b2 100644 --- a/Gaze/Views/Reminders/LookAwayReminderView.swift +++ b/Gaze/Views/Reminders/LookAwayReminderView.swift @@ -46,7 +46,7 @@ struct LookAwayReminderView: View { Circle() .trim(from: 0, to: progress) - .stroke(Color.blue, lineWidth: 8) + .stroke(Color.accentColor, lineWidth: 8) .frame(width: 120, height: 120) .rotationEffect(.degrees(-90)) .animation(.linear(duration: 1), value: progress)