Browse Source

Refactor overview step; persist preferences; extend startup step

Deniz Cengiz 1 year ago
parent
commit
f9982f9f03

+ 36 - 5
Trio/Sources/Localizations/Main/Localizable.xcstrings

@@ -30132,6 +30132,7 @@
       }
     },
     "Algorithm" : {
+      "extractionState" : "stale",
       "localizations" : {
         "bg" : {
           "stringUnit" : {
@@ -33427,6 +33428,9 @@
         }
       }
     },
+    "Already using Trio and updating from an older version?" : {
+
+    },
     "Also add source info" : {
       "extractionState" : "manual",
       "localizations" : {
@@ -57833,6 +57837,9 @@
         }
       }
     },
+    "Configure diagnostics sharing, optionally sync with Nightscout, and enter essentials." : {
+
+    },
     "Configure Libre Transmitter" : {
       "extractionState" : "manual",
       "localizations" : {
@@ -62443,6 +62450,9 @@
         }
       }
     },
+    "Customize Trio’s algorithm features. Most users start with the recommended settings." : {
+
+    },
     "CV" : {
       "comment" : "CV",
       "localizations" : {
@@ -69543,6 +69553,9 @@
         }
       }
     },
+    "Define your glucose target, basal rates, carb ratios, and insulin sensitivity." : {
+
+    },
     "Delay between fat & protein entry and first FPU entry." : {
       "localizations" : {
         "bg" : {
@@ -111381,6 +111394,9 @@
         }
       }
     },
+    "In the next few steps, you’ll configure your algorithm settings for" : {
+
+    },
     "Include IOB & COB in the calendar event data." : {
       "localizations" : {
         "bg" : {
@@ -152835,6 +152851,9 @@
         }
       }
     },
+    "Prepare Trio" : {
+
+    },
     "Preset" : {
       "localizations" : {
         "bg" : {
@@ -168882,6 +168901,9 @@
         }
       }
     },
+    "Set boundaries for insulin delivery and carb entries to help Trio keep you safe." : {
+
+    },
     "Set Display Values" : {
       "localizations" : {
         "bg" : {
@@ -203557,6 +203579,9 @@
         }
       }
     },
+    "Trio can automatically adapt insulin delivery based on inputs and glucose forecasts. Your algorithm settings play a major part in accurate and effective dosing." : {
+
+    },
     "Trio comes with a helpful Startup Guide. We recommend opening it now and following along as you go — side by side." : {
 
     },
@@ -206383,10 +206408,7 @@
         }
       }
     },
-    "Trio’s algorithm can automatically adapt insulin delivery based on inputs and glucose forecsasts. Your algorithm settings play a major part in accurate and effective dosing." : {
-
-    },
-    "Trio's Onboarding consists of several steps. It takes about 5-10 minutes to complete. We'll guide you through each step." : {
+    "Trio's Onboarding takes about 15-30 minutes to complete. We'll guide you through each step." : {
 
     },
     "Trio's Simple Lock Screen Widget displays current glucose reading, trend arrow, delta and the timestamp of the current reading." : {
@@ -215180,6 +215202,9 @@
         }
       }
     },
+    "We recommend reviewing them carefully — Trio will guide you step-by-step." : {
+
+    },
     "We strongly recommend not changing DIA — it’s essential to stable and safe operation." : {
 
     },
@@ -219786,7 +219811,10 @@
     "You're All Set!" : {
 
     },
-    "You've successfully completed the initial setup of Trio. Tap 'Get Started' to save your settings and get ready to start using Trio." : {
+    "You've successfully completed the initial setup of Trio. Tap 'Get Started' to save your settings and start using Trio." : {
+
+    },
+    "Your algorithm settings (previously called \"OpenAPS settings\") will be reset to defaults." : {
 
     },
     "Your basal profile represents the amount of background insulin you need throughout the day. This helps Trio calculate your insulin needs." : {
@@ -220227,6 +220255,9 @@
     "your progress will not be saved." : {
 
     },
+    "Your therapy settings, pump, and CGM configurations will be carried over." : {
+
+    },
     "ZT" : {
       "localizations" : {
         "bg" : {

+ 33 - 5
Trio/Sources/Modules/Onboarding/OnboardingStateModel.swift

@@ -517,11 +517,39 @@ extension Onboarding {
 
         /// Applies the selected delivery preferences to the app's settings.
         func applyToPreferences() {
-            var preferencesCopy = settingsManager.preferences
-            preferencesCopy.maxIOB = maxIOB
-            preferencesCopy.maxCOB = maxCOB
-            preferencesCopy.threshold_setting = minimumSafetyThreshold
-            settingsManager.preferences = preferencesCopy
+            var preferences = Preferences()
+
+            // delivery limits (those that are preference-bound, not pump-settings-bound
+            preferences.maxIOB = maxIOB
+            preferences.maxCOB = maxCOB
+            preferences.threshold_setting = minimumSafetyThreshold
+
+            // autosens
+            preferences.autosensMin = autosensMin
+            preferences.autosensMax = autosensMax
+            preferences.rewindResetsAutosens = rewindResetsAutosens
+
+            // smb settings
+            preferences.enableSMBAlways = enableSMBAlways
+            preferences.enableSMBWithCOB = enableSMBWithCOB
+            preferences.enableSMBWithTemptarget = enableSMBWithTempTarget
+            preferences.enableSMBAfterCarbs = enableSMBAfterCarbs
+            preferences.enableSMB_high_bg = enableSMBWithHighGlucoseTarget
+            preferences.enableSMB_high_bg_target = highGlucoseTarget
+            preferences.allowSMBWithHighTemptarget = allowSMBWithHighTempTarget
+            preferences.enableUAM = enableUAM
+            preferences.maxSMBBasalMinutes = maxSMBMinutes
+            preferences.maxUAMSMBBasalMinutes = maxUAMMinutes
+            preferences.maxDeltaBGthreshold = maxDeltaGlucoseThreshold
+
+            // target behavior
+            preferences.highTemptargetRaisesSensitivity = highTempTargetRaisesSensitivity
+            preferences.lowTemptargetLowersSensitivity = lowTempTargetLowersSensitivity
+            preferences.sensitivityRaisesTarget = sensitivityRaisesTarget
+            preferences.resistanceLowersTarget = resistanceLowersTarget
+            preferences.halfBasalExerciseTarget = halfBasalTarget
+
+            settingsManager.preferences = preferences
         }
 
         /// Saves pump delivery limits to persistent storage and broadcasts changes.

+ 5 - 5
Trio/Sources/Modules/Onboarding/View/OnboardingRootView.swift

@@ -238,7 +238,7 @@ struct OnboardingStepContent: View {
 
                             VStack(alignment: .leading) {
                                 Text(currentStep.title)
-                                    .font(.largeTitle)
+                                    .font(.title)
                                     .fontWeight(.bold)
                                     .foregroundColor(.primary)
 
@@ -387,7 +387,7 @@ struct OnboardingNavigationButtons: View {
                 currentDeliverySubstep = previousSub
             } else if let previous = currentStep.previous {
                 currentStep = previous
-                currentDeliverySubstep = .maxIOB
+                currentDeliverySubstep = .minimumSafetyThreshold
             }
 
         case .autosensSettings:
@@ -395,7 +395,7 @@ struct OnboardingNavigationButtons: View {
                 currentAutosensSubstep = previous
             } else if let previousStep = currentStep.previous {
                 currentStep = previousStep
-                currentAutosensSubstep = .autosensMin
+                currentAutosensSubstep = .rewindResetsAutosens
             }
 
         case .smbSettings:
@@ -403,7 +403,7 @@ struct OnboardingNavigationButtons: View {
                 currentSMBSubstep = previous
             } else if let previousStep = currentStep.previous {
                 currentStep = previousStep
-                currentSMBSubstep = .enableSMBAlways
+                currentSMBSubstep = .maxDeltaGlucoseThreshold
             }
 
         case .targetBehavior:
@@ -411,7 +411,7 @@ struct OnboardingNavigationButtons: View {
                 currentTargetBehaviorSubstep = previous
             } else if let previousStep = currentStep.previous {
                 currentStep = previousStep
-                currentTargetBehaviorSubstep = .highTempTargetRaisesSensitivity
+                currentTargetBehaviorSubstep = .halfBasalTarget
             }
 
         default:

+ 8 - 5
Trio/Sources/Modules/Onboarding/View/OnboardingSteps/AlgorithmSettings/AlgorithmSettingsStepView.swift

@@ -24,20 +24,23 @@ struct AlgorithmSettingsStepView: View {
 
             VStack(alignment: .leading, spacing: 10) {
                 Text(
-                    "Trio’s algorithm can automatically adapt insulin delivery based on inputs and glucose forecsasts. Your algorithm settings play a major part in accurate and effective dosing."
-                )
+                    "Trio can automatically adapt insulin delivery based on inputs and glucose forecasts. Your algorithm settings play a major part in accurate and effective dosing."
+                ).multilineTextAlignment(.leading)
+
+                Text("In the next few steps, you’ll configure your algorithm settings for")
+                BulletPoint(String(localized: "Autosens"))
+                BulletPoint(String(localized: "Super Micro Bolus (SMB)"))
+                BulletPoint(String(localized: "Target Behavior"))
 
                 Text("Our strong recommendation is to ")
                     + Text("leave everything on default").bold()
                     + Text(" as a beginner.")
 
                 Text("Only adjust these settings if you’re an advanced or returning user who knows what they’re doing.")
+                    .multilineTextAlignment(.leading)
             }
             .padding(.horizontal)
 
-            Divider()
-                .padding(.horizontal)
-
             VStack(alignment: .leading, spacing: 10) {
                 Text("A few important notes:")
                     .font(.headline)

+ 2 - 2
Trio/Sources/Modules/Onboarding/View/OnboardingSteps/CompletedStepView.swift

@@ -5,7 +5,7 @@ struct CompletedStepView: View {
     var body: some View {
         VStack(alignment: .center, spacing: 20) {
             Image(systemName: "checkmark.circle.fill")
-                .font(.system(size: 80))
+                .font(.system(size: 60))
                 .foregroundColor(.green)
 
             Text("You're All Set!")
@@ -14,7 +14,7 @@ struct CompletedStepView: View {
                 .multilineTextAlignment(.center)
 
             Text(
-                "You've successfully completed the initial setup of Trio. Tap 'Get Started' to save your settings and get ready to start using Trio."
+                "You've successfully completed the initial setup of Trio. Tap 'Get Started' to save your settings and start using Trio."
             )
             .multilineTextAlignment(.center)
             .foregroundColor(.secondary)

+ 1 - 0
Trio/Sources/Modules/Onboarding/View/OnboardingSteps/Nightscout/NightscoutImportStepView.swift

@@ -52,6 +52,7 @@ struct NightscoutImportStepView: View {
 
                     VStack(alignment: .leading, spacing: 10) {
                         Text("Trio will import the following therapy settings from your Nightscout instance:")
+                            .multilineTextAlignment(.leading)
                         VStack(alignment: .leading) {
                             Text("• Glucose Targets")
                             Text("• Basal Rates")

+ 76 - 6
Trio/Sources/Modules/Onboarding/View/OnboardingSteps/OverviewStepView.swift

@@ -14,16 +14,86 @@ struct OverviewStepView: View {
                 .padding(.horizontal)
 
             VStack(alignment: .center, spacing: 12) {
-                ForEach(
-                    nonInfoOnboardingSteps,
-                    id: \.self
-                ) { step in
-                    SettingItemView(step: step, icon: step.iconName, title: step.title, type: .overview)
-                }
+                overviewItem(
+                    stepIndex: 1,
+                    title: String(localized: "Prepare Trio"),
+                    duration: "3-5",
+                    description: String(
+                        localized: "Configure diagnostics sharing, optionally sync with Nightscout, and enter essentials."
+                    )
+                )
+
+                Divider()
+
+                overviewItem(
+                    stepIndex: 2,
+                    title: String(localized: "Therapy Settings"),
+                    duration: "5-10",
+                    description: String(
+                        localized: "Define your glucose target, basal rates, carb ratios, and insulin sensitivity."
+                    )
+                )
+
+                Divider()
+
+                overviewItem(
+                    stepIndex: 3,
+                    title: String(localized: "Delivery Limits"),
+                    duration: "3-5",
+                    description: String(
+                        localized: "Set boundaries for insulin delivery and carb entries to help Trio keep you safe."
+                    )
+                )
+
+                Divider()
+
+                overviewItem(
+                    stepIndex: 4,
+                    title: String(localized: "Algorithm Settings"),
+                    duration: "5-10",
+                    description: String(
+                        localized: "Customize Trio’s algorithm features. Most users start with the recommended settings."
+                    )
+                )
             }
             .padding()
             .background(Color.chart.opacity(0.65))
             .cornerRadius(10)
         }
     }
+
+    @ViewBuilder private func overviewItem(
+        stepIndex: Int,
+        title: String,
+        duration: String,
+        description: String
+    ) -> some View {
+        VStack(alignment: .leading) {
+            HStack {
+                HStack(spacing: 14) {
+                    stepCount(stepIndex)
+                    Text(title).font(.headline)
+                }
+
+                Spacer()
+
+                Text("\(duration) \(String(localized: "min"))")
+                    .font(.subheadline)
+            }
+
+            Text(description)
+                .font(.footnote)
+                .foregroundStyle(Color.secondary)
+                .padding(.vertical, 8)
+        }
+    }
+
+    @ViewBuilder private func stepCount(_ count: Int) -> some View {
+        Text(count.description)
+            .font(.subheadline.bold())
+            .frame(width: 26, height: 26, alignment: .center)
+            .background(Color.blue)
+            .foregroundStyle(.white)
+            .clipShape(Capsule())
+    }
 }

+ 14 - 2
Trio/Sources/Modules/Onboarding/View/OnboardingSteps/StartupGuideStepView.swift

@@ -12,8 +12,9 @@ struct StartupGuideStepView: View {
     var body: some View {
         VStack(alignment: .leading, spacing: 20) {
             Text("Before you begin…")
-                .font(.title.bold())
                 .padding(.horizontal)
+                .font(.title3)
+                .bold()
 
             VStack(alignment: .leading, spacing: 10) {
                 BulletPoint(String(localized: "Take a deep breath — you've got this."))
@@ -31,7 +32,18 @@ struct StartupGuideStepView: View {
                         .cornerRadius(8)
                 }
                 .frame(maxWidth: .infinity, alignment: .center)
-                .padding([.top, .horizontal])
+                .padding(.horizontal)
+            }.padding(.horizontal)
+
+            VStack(alignment: .leading, spacing: 10) {
+                Text("Already using Trio and updating from an older version?").bold()
+                BulletPoint(String(localized: "Your therapy settings, pump, and CGM configurations will be carried over."))
+                BulletPoint(
+                    String(
+                        localized: "Your algorithm settings (previously called \"OpenAPS settings\") will be reset to defaults."
+                    )
+                )
+                BulletPoint(String(localized: "We recommend reviewing them carefully — Trio will guide you step-by-step."))
             }.padding(.horizontal)
 
             HStack {

+ 34 - 29
Trio/Sources/Modules/Onboarding/View/OnboardingView+AlgorithmUtil.swift

@@ -163,7 +163,7 @@ enum AlgorithmSettingsSubstep: Int, CaseIterable, Identifiable {
         switch self {
         case .autosensMin:
             return VStack(alignment: .leading, spacing: 8) {
-                Text("Default: 70%").bold()
+                Text("Default: 70%").bold().foregroundStyle(Color.primary)
                 Text(
                     "Autosens Min sets the minimum Autosens Ratio used by Autosens, Dynamic ISF, and Sigmoid Formula."
                 )
@@ -176,7 +176,7 @@ enum AlgorithmSettingsSubstep: Int, CaseIterable, Identifiable {
             }
         case .autosensMax:
             return VStack(alignment: .leading, spacing: 8) {
-                Text("Default: 120%").bold()
+                Text("Default: 120%").bold().foregroundStyle(Color.primary)
                 Text(
                     "Autosens Max sets the maximum Autosens Ratio used by Autosens, Dynamic ISF, and Sigmoid Formula."
                 )
@@ -188,20 +188,24 @@ enum AlgorithmSettingsSubstep: Int, CaseIterable, Identifiable {
                 )
             }
         case .rewindResetsAutosens:
-            return VStack(alignment: .leading, spacing: 8) {
-                Text(
-                    "This feature resets the Autosens Ratio to neutral when you rewind your pump on the assumption that this corresponds to a site change."
-                )
-                Text(
-                    "Autosens will begin learning sensitivity anew from the time of the rewind, which may take up to 6 hours."
-                )
-                Text(
-                    "Tip: If you usually rewind your pump independently of site changes, you may want to consider disabling this feature."
-                )
+            return VStack(alignment: .leading, spacing: 5) {
+                Text("Default: ON").bold().foregroundStyle(Color.primary)
+                Text("Medtronic Users Only").bold()
+                VStack(alignment: .leading, spacing: 8) {
+                    Text(
+                        "This feature resets the Autosens Ratio to neutral when you rewind your pump on the assumption that this corresponds to a site change."
+                    )
+                    Text(
+                        "Autosens will begin learning sensitivity anew from the time of the rewind, which may take up to 6 hours."
+                    )
+                    Text(
+                        "Tip: If you usually rewind your pump independently of site changes, you may want to consider disabling this feature."
+                    )
+                }
             }
         case .enableSMBAlways:
             return VStack(alignment: .leading, spacing: 8) {
-                Text("Default: OFF").bold()
+                Text("Default: OFF").bold().foregroundStyle(Color.primary)
                 Text(
                     "When enabled, Super Micro Boluses (SMBs) will always be allowed if dosing calculations determine insulin is needed via the SMB delivery method, except when a high Temp Target is set. Enabling SMB Always will remove redundant \"Enable SMB\" options when this setting is enacted."
                 )
@@ -211,7 +215,7 @@ enum AlgorithmSettingsSubstep: Int, CaseIterable, Identifiable {
             }
         case .enableSMBWithCOB:
             return VStack(alignment: .leading, spacing: 8) {
-                Text("Default: OFF").bold()
+                Text("Default: OFF").bold().foregroundStyle(Color.primary)
                 Text(
                     "When the carb on board (COB) forecast line is active, enabling this feature allows Trio to use Super Micro Boluses (SMB) to deliver the insulin required."
                 )
@@ -221,7 +225,7 @@ enum AlgorithmSettingsSubstep: Int, CaseIterable, Identifiable {
             }
         case .enableSMBWithTempTarget:
             return VStack(alignment: .leading, spacing: 8) {
-                Text("Default: OFF").bold()
+                Text("Default: OFF").bold().foregroundStyle(Color.primary)
                 Text(
                     "Enabling this feature allows Trio to deliver insulin required using Super Micro Boluses (SMB) at times when a manual Temporary Target under \(units == .mgdL ? "100" : 100.formattedAsMmolL) \(units.rawValue) is set."
                 )
@@ -231,7 +235,7 @@ enum AlgorithmSettingsSubstep: Int, CaseIterable, Identifiable {
             }
         case .enableSMBAfterCarbs:
             return VStack(alignment: .leading, spacing: 8) {
-                Text("Default: OFF").bold()
+                Text("Default: OFF").bold().foregroundStyle(Color.primary)
                 Text(
                     "Enabling this feature allows Trio to deliver insulin required using Super Micro Boluses (SMB) for 6 hours after a carb entry, regardless of whether there are active carbs on board (COB)."
                 )
@@ -241,7 +245,7 @@ enum AlgorithmSettingsSubstep: Int, CaseIterable, Identifiable {
             }
         case .enableSMBWithHighGlucoseTarget:
             return VStack(alignment: .leading, spacing: 8) {
-                Text("Default: OFF").bold()
+                Text("Default: OFF").bold().foregroundStyle(Color.primary)
                 Text(
                     "Enabling this feature allows Trio to deliver insulin required using Super Micro Boluses (SMB) when glucose reading is above the value set as High BG Target."
                 )
@@ -251,7 +255,7 @@ enum AlgorithmSettingsSubstep: Int, CaseIterable, Identifiable {
             }
         case .allowSMBWithHighTempTarget:
             return VStack(alignment: .leading, spacing: 8) {
-                Text("Default: OFF").bold()
+                Text("Default: OFF").bold().foregroundStyle(Color.primary)
                 Text(
                     "Enabling this feature allows Trio to deliver insulin required using Super Micro Boluses (SMB) when a manual Temporary Target above \(units == .mgdL ? "100" : 100.formattedAsMmolL) \(units.rawValue) is set."
                 )
@@ -264,7 +268,7 @@ enum AlgorithmSettingsSubstep: Int, CaseIterable, Identifiable {
             }
         case .enableUAM:
             return VStack(alignment: .leading, spacing: 8) {
-                Text("Default: OFF").bold()
+                Text("Default: OFF").bold().foregroundStyle(Color.primary)
                 Text(
                     "Enabling the UAM (Unannounced Meals) feature allows the system to detect and respond to unexpected rises in glucose readings caused by unannounced or miscalculated carbs, meals high in fat or protein, or other factors like adrenaline."
                 )
@@ -279,8 +283,8 @@ enum AlgorithmSettingsSubstep: Int, CaseIterable, Identifiable {
             return VStack(spacing: 8) {
                 VStack(alignment: .leading, spacing: 8) {
                     VStack(alignment: .leading, spacing: 1) {
-                        Text("Default: 30 minutes").bold()
-                        Text("(50% current basal rate)").bold()
+                        Text("Default: 30 minutes").bold().foregroundStyle(Color.primary)
+                        Text("(50% current basal rate)")
                     }
                     VStack(alignment: .leading, spacing: 8) {
                         Text(
@@ -309,9 +313,10 @@ enum AlgorithmSettingsSubstep: Int, CaseIterable, Identifiable {
             return VStack(spacing: 8) {
                 VStack(alignment: .leading, spacing: 8) {
                     VStack(alignment: .leading, spacing: 1) {
-                        Text("Default: 30 minutes").bold()
-                        Text("(50% current basal rate)").bold()
+                        Text("Default: 30 minutes").bold().foregroundStyle(Color.primary)
+                        Text("(50% current basal rate)")
                     }
+
                     VStack(alignment: .leading, spacing: 8) {
                         Text(
                             "This is a limit on the size of a single UAM SMB. One UAM SMB can only be as large as this many minutes of your current profile basal rate."
@@ -336,7 +341,7 @@ enum AlgorithmSettingsSubstep: Int, CaseIterable, Identifiable {
             }
         case .maxDeltaGlucoseThreshold:
             return VStack(alignment: .leading, spacing: 8) {
-                Text("Default: 20% increase").bold()
+                Text("Default: 20% increase").bold().foregroundStyle(Color.primary)
                 Text(
                     "Maximum allowed positive percent change in glucose level to permit SMBs. If the difference in glucose is greater than this, Trio will disable SMBs."
                 )
@@ -344,7 +349,7 @@ enum AlgorithmSettingsSubstep: Int, CaseIterable, Identifiable {
             }
         case .highTempTargetRaisesSensitivity:
             return VStack(alignment: .leading, spacing: 8) {
-                Text("Default: OFF").bold()
+                Text("Default: OFF").bold().foregroundStyle(Color.primary)
                 Text(
                     "When this feature is enabled, manually setting a temporary target above \(units == .mgdL ? "100" : 100.formattedAsMmolL) \(units.rawValue) will decrease the Autosens Ratio used for ISF and basal adjustments, resulting in less insulin delivered overall. This scales with the temporary target set; the higher the temp target, the lower the Autosens Ratio used."
                 )
@@ -355,7 +360,7 @@ enum AlgorithmSettingsSubstep: Int, CaseIterable, Identifiable {
             }
         case .lowTempTargetLowersSensitivity:
             return VStack(alignment: .leading, spacing: 8) {
-                Text("Default: OFF").bold()
+                Text("Default: OFF").bold().foregroundStyle(Color.primary)
                 Text(
                     "When this feature is enabled, setting a temporary target below \(units == .mgdL ? "100" : 100.formattedAsMmolL) \(units.rawValue) will increase the Autosens Ratio used for ISF and basal adjustments, resulting in more insulin delivered overall. This scales with the temporary target set; the lower the Temp Target, the higher the Autosens Ratio used. It requires Algorithm Settings > Autosens > Autosens Max to be set to > 100% to work."
                 )
@@ -366,14 +371,14 @@ enum AlgorithmSettingsSubstep: Int, CaseIterable, Identifiable {
             }
         case .sensitivityRaisesTarget:
             return VStack(alignment: .leading, spacing: 8) {
-                Text("Default: OFF").bold()
+                Text("Default: OFF").bold().foregroundStyle(Color.primary)
                 Text(
                     "Enabling this feature causes Trio to automatically raise the targeted glucose if it detects an increase in insulin sensitivity from your baseline."
                 )
             }
         case .resistanceLowersTarget:
             return VStack(alignment: .leading, spacing: 8) {
-                Text("Default: OFF").bold()
+                Text("Default: OFF").bold().foregroundStyle(Color.primary)
                 Text(
                     "Enabling this feature causes Trio to automatically reduce the targeted glucose if it detects a decrease in sensitivity (resistance) from your baseline."
                 )
@@ -383,7 +388,7 @@ enum AlgorithmSettingsSubstep: Int, CaseIterable, Identifiable {
                 Text(
                     "Default: \(units == .mgdL ? "160" : 160.formattedAsMmolL) \(units.rawValue)"
                 )
-                .bold()
+                .bold().foregroundStyle(Color.primary)
                 Text(
                     "The Half Basal Exercise Target allows you to scale down your basal insulin during exercise or scale up your basal insulin when eating soon when a temporary glucose target is set."
                 )

+ 2 - 2
Trio/Sources/Modules/Onboarding/View/OnboardingView+Util.swift

@@ -62,7 +62,7 @@ enum OnboardingStep: Int, CaseIterable, Identifiable, Equatable {
         case .deliveryLimits:
             return String(localized: "Delivery Limits")
         case .algorithmSettings:
-            return String(localized: "Algorithm")
+            return String(localized: "Algorithm Settings")
         case .autosensSettings:
             return String(localized: "Autosens")
         case .smbSettings:
@@ -87,7 +87,7 @@ enum OnboardingStep: Int, CaseIterable, Identifiable, Equatable {
             )
         case .overview:
             return String(
-                localized: "Trio's Onboarding consists of several steps. It takes about 5-10 minutes to complete. We'll guide you through each step."
+                localized: "Trio's Onboarding takes about 15-30 minutes to complete. We'll guide you through each step."
             )
         case .diagnostics:
             return String(