@cat-factory/app 0.302.2 → 0.303.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (328) hide show
  1. package/README.md +16 -0
  2. package/app/app.config.ts +19 -10
  3. package/app/assets/css/main.css +13 -13
  4. package/app/assets/css/prose.css +22 -22
  5. package/app/assets/css/tokens.css +298 -0
  6. package/app/components/assistant/AssistantModal.vue +22 -22
  7. package/app/components/auth/AuthGate.vue +1 -1
  8. package/app/components/auth/BackendMisconfiguredScreen.vue +10 -10
  9. package/app/components/auth/LoginScreen.vue +34 -36
  10. package/app/components/auth/ResetPasswordScreen.vue +12 -12
  11. package/app/components/auth/UserMenu.vue +4 -4
  12. package/app/components/binaryCandidates/BinaryCandidatesWindow.vue +27 -25
  13. package/app/components/binaryOutput/BinaryOutputReport.vue +15 -15
  14. package/app/components/binaryOutput/StoredAssetView.vue +5 -5
  15. package/app/components/board/AddTaskModal.vue +17 -20
  16. package/app/components/board/AgentFailureCard.vue +11 -11
  17. package/app/components/board/AgentFailureHistory.vue +2 -2
  18. package/app/components/board/BoardCanvas.vue +6 -5
  19. package/app/components/board/CreateInitiativeModal.vue +8 -10
  20. package/app/components/board/DependencyConnectOverlay.vue +1 -1
  21. package/app/components/board/FailureHistoryList.vue +7 -7
  22. package/app/components/board/RecurringPipelineModal.vue +17 -17
  23. package/app/components/board/ReviewFrictionDialog.vue +6 -6
  24. package/app/components/board/StepExecutionHistory.vue +13 -13
  25. package/app/components/board/TaskDependencyEdges.vue +8 -8
  26. package/app/components/board/nodes/AgentChip.vue +10 -10
  27. package/app/components/board/nodes/BlockNode.vue +29 -29
  28. package/app/components/board/nodes/DecisionBadge.vue +2 -2
  29. package/app/components/board/nodes/EpicNode.vue +14 -10
  30. package/app/components/board/nodes/FrameSwimlanes.vue +7 -9
  31. package/app/components/board/nodes/InitiativeCard.vue +8 -8
  32. package/app/components/board/nodes/LaneGroup.vue +1 -1
  33. package/app/components/board/nodes/LaneTask.vue +2 -2
  34. package/app/components/board/nodes/ResizeGrips.vue +4 -4
  35. package/app/components/board/nodes/TaskCard.vue +18 -18
  36. package/app/components/board/nodes/TaskLane.vue +5 -5
  37. package/app/components/board/nodes/TaskPipelineMini.vue +18 -18
  38. package/app/components/bootstrap/AdoptionReviewModal.vue +29 -26
  39. package/app/components/bootstrap/BootstrapModal.vue +21 -23
  40. package/app/components/bootstrap/BootstrapRunSteps.vue +1 -1
  41. package/app/components/brainstorm/BrainstormWindow.vue +30 -33
  42. package/app/components/bugFishing/BugFishingWindow.vue +49 -49
  43. package/app/components/clarity/ClarityReviewWindow.vue +30 -30
  44. package/app/components/common/AsyncViewError.vue +5 -5
  45. package/app/components/common/ClarificationItem.vue +8 -13
  46. package/app/components/common/ConfirmDialog.vue +4 -2
  47. package/app/components/common/DescriptorFields.vue +1 -1
  48. package/app/components/common/EmptyState.vue +3 -3
  49. package/app/components/common/InterviewGateNotice.vue +7 -7
  50. package/app/components/common/KeyboardShortcutsHelp.vue +1 -1
  51. package/app/components/common/MarkdownProse.vue +14 -13
  52. package/app/components/consensus/ConsensusSessionWindow.vue +26 -26
  53. package/app/components/context/ContextAttachmentFields.vue +17 -17
  54. package/app/components/docs/DocInterviewWindow.vue +14 -14
  55. package/app/components/documents/ContextDocumentPicker.vue +17 -17
  56. package/app/components/documents/DocumentImportModal.vue +7 -7
  57. package/app/components/documents/DocumentSourceConnectModal.vue +3 -3
  58. package/app/components/documents/DocumentSyncState.vue +5 -5
  59. package/app/components/documents/DocumentTemplatesModal.vue +15 -15
  60. package/app/components/documents/RepoContextDocPicker.vue +5 -5
  61. package/app/components/documents/SpawnPreviewModal.vue +12 -12
  62. package/app/components/documents/StartFromDesignModal.vue +11 -11
  63. package/app/components/documents/TaskContextDocs.vue +5 -5
  64. package/app/components/environments/EnvSetupStepper.vue +6 -6
  65. package/app/components/environments/EnvironmentStatusPanel.vue +17 -17
  66. package/app/components/environments/steps/EnvPickStep.vue +3 -3
  67. package/app/components/environments/steps/EnvPreflightStep.vue +9 -9
  68. package/app/components/environments/steps/EnvReviewStep.vue +25 -22
  69. package/app/components/environments/steps/EnvSaveStep.vue +7 -5
  70. package/app/components/environments/steps/JourneyStepNav.vue +1 -1
  71. package/app/components/focus/BlockFocusView.vue +17 -19
  72. package/app/components/followUp/FollowUpWindow.vue +23 -23
  73. package/app/components/forkDecision/ForkDecisionWindow.vue +37 -39
  74. package/app/components/foundational/FoundationalContractSummary.vue +7 -7
  75. package/app/components/foundational/FoundationalServiceCatalogList.vue +11 -11
  76. package/app/components/foundational/FoundationalServiceManager.vue +1 -1
  77. package/app/components/foundational/FoundationalServiceRegistry.vue +13 -13
  78. package/app/components/foundational/FoundationalServiceSources.vue +13 -13
  79. package/app/components/foundational/FoundationalSuppressions.vue +7 -7
  80. package/app/components/foundational/ServiceCatalogConnection.vue +10 -10
  81. package/app/components/fragments/FragmentLibraryManager.vue +41 -44
  82. package/app/components/fragments/FragmentSelector.vue +13 -13
  83. package/app/components/fragments/GitHubDocUrlImport.vue +1 -1
  84. package/app/components/gates/GateFailingCheckList.vue +5 -5
  85. package/app/components/gates/GateResultView.vue +50 -47
  86. package/app/components/github/AddServiceFromRepoModal.vue +14 -14
  87. package/app/components/github/BranchProtectionPreflight.vue +13 -13
  88. package/app/components/github/GitHubConnect.vue +7 -7
  89. package/app/components/github/GitHubOnboarding.vue +7 -7
  90. package/app/components/github/GitHubPanel.vue +37 -40
  91. package/app/components/github/RepoTreeBrowser.vue +18 -18
  92. package/app/components/humanTest/HumanTestWindow.vue +30 -33
  93. package/app/components/initiative/InitiativePlanNotice.vue +5 -5
  94. package/app/components/initiative/InitiativePlanReview.vue +27 -29
  95. package/app/components/initiative/InitiativePlanningWindow.vue +10 -10
  96. package/app/components/initiative/InitiativeTrackerWindow.vue +71 -65
  97. package/app/components/inputGate/InputGateNotice.vue +2 -4
  98. package/app/components/judge/JudgeResultView.vue +30 -32
  99. package/app/components/kaizen/KaizenPanel.vue +40 -36
  100. package/app/components/kaizen/KaizenStepStatus.vue +21 -21
  101. package/app/components/layout/AccountAuditLog.vue +10 -10
  102. package/app/components/layout/AccountDeploymentSettings.vue +20 -20
  103. package/app/components/layout/AccountFailureKindRules.vue +13 -13
  104. package/app/components/layout/AccountFoundationalSettings.vue +1 -1
  105. package/app/components/layout/AccountFragmentSettings.vue +1 -1
  106. package/app/components/layout/AccountModelPolicySettings.vue +9 -9
  107. package/app/components/layout/AccountPlatformAlertSettings.vue +11 -11
  108. package/app/components/layout/AccountRiskPolicySettings.vue +2 -2
  109. package/app/components/layout/AccountRunCredentialSettings.vue +5 -5
  110. package/app/components/layout/AccountSkillSettings.vue +1 -1
  111. package/app/components/layout/AccountTeamSettings.vue +23 -15
  112. package/app/components/layout/AiProvidersBanner.vue +11 -8
  113. package/app/components/layout/AppearanceSwitcher.vue +108 -0
  114. package/app/components/layout/BoardSwitcher.vue +8 -11
  115. package/app/components/layout/BoardToolbar.vue +3 -3
  116. package/app/components/layout/CommandBar.vue +7 -9
  117. package/app/components/layout/ConnectionStatusBanner.vue +2 -2
  118. package/app/components/layout/DefaultTestEnvBanner.vue +5 -5
  119. package/app/components/layout/GitHubPatBanner.vue +5 -5
  120. package/app/components/layout/GitHubPatPermissionsBanner.vue +16 -10
  121. package/app/components/layout/InfraSetupBanner.vue +6 -6
  122. package/app/components/layout/IntegrationsHub.vue +15 -15
  123. package/app/components/layout/LanguageSwitcher.vue +5 -5
  124. package/app/components/layout/ModelProvidersHub.vue +13 -16
  125. package/app/components/layout/NotificationsInbox.vue +10 -10
  126. package/app/components/layout/PersonalSetupModal.vue +8 -8
  127. package/app/components/layout/ProviderConfigBanner.vue +4 -4
  128. package/app/components/layout/RolePrompt.vue +7 -7
  129. package/app/components/layout/SideBar.vue +6 -4
  130. package/app/components/layout/SpendWarningBanner.vue +17 -14
  131. package/app/components/layout/TranslationWarningBanner.vue +4 -4
  132. package/app/components/layout/UiModeSwitcher.vue +13 -13
  133. package/app/components/layout/UiRoleSwitcher.vue +8 -8
  134. package/app/components/layout/WorkspaceMembersSettings.vue +15 -11
  135. package/app/components/media/ArtifactLightbox.vue +13 -13
  136. package/app/components/media/ImageCompare.vue +31 -24
  137. package/app/components/merge/MergeEffortChips.vue +2 -2
  138. package/app/components/notifications/NotificationSettingsPanel.vue +14 -12
  139. package/app/components/observability/OutcomeFilterChips.vue +6 -6
  140. package/app/components/observability/RunFailureSummary.vue +28 -25
  141. package/app/components/observability/StepMetricsBar.vue +26 -28
  142. package/app/components/observability/StepModelActivity.vue +2 -2
  143. package/app/components/observability/ToolCallList.vue +24 -24
  144. package/app/components/outcome/OutcomeSummaryWindow.vue +47 -47
  145. package/app/components/palettes/AgentPalette.vue +8 -8
  146. package/app/components/palettes/AgentTierSelect.vue +1 -1
  147. package/app/components/palettes/PipelinePurposeSelect.vue +1 -1
  148. package/app/components/panels/AgentStepDetail.vue +52 -51
  149. package/app/components/panels/AttemptEntryHeader.vue +4 -6
  150. package/app/components/panels/DecisionModal.vue +7 -7
  151. package/app/components/panels/GenericStructuredResultView.vue +7 -7
  152. package/app/components/panels/InspectorPanel.vue +17 -17
  153. package/app/components/panels/MergerResultView.vue +19 -19
  154. package/app/components/panels/ObservabilityPanel.vue +115 -123
  155. package/app/components/panels/OperatorDashboardPanel.vue +89 -97
  156. package/app/components/panels/ReportsPanel.vue +69 -66
  157. package/app/components/panels/ReportsSpendBreakdown.vue +9 -9
  158. package/app/components/panels/ResultWindowShell.vue +38 -38
  159. package/app/components/panels/RunDetailLoadState.vue +2 -2
  160. package/app/components/panels/StepContainerStatus.vue +9 -9
  161. package/app/components/panels/StepDelegatedStatus.logic.spec.ts +135 -0
  162. package/app/components/panels/StepDelegatedStatus.logic.ts +160 -0
  163. package/app/components/panels/StepDelegatedStatus.vue +181 -0
  164. package/app/components/panels/StepEffortReport.vue +16 -15
  165. package/app/components/panels/StepFragmentAdherence.vue +14 -10
  166. package/app/components/panels/StepMetadataCard.vue +74 -45
  167. package/app/components/panels/StepReproductionReport.vue +25 -21
  168. package/app/components/panels/StepRunMeta.vue +20 -20
  169. package/app/components/panels/StepTestReport.logic.spec.ts +8 -3
  170. package/app/components/panels/StepTestReport.logic.ts +4 -4
  171. package/app/components/panels/StepTestReport.vue +28 -28
  172. package/app/components/panels/StepToolServers.vue +14 -11
  173. package/app/components/panels/StepValidationReport.vue +7 -7
  174. package/app/components/panels/inspector/ContainerSummary.vue +9 -9
  175. package/app/components/panels/inspector/DocReferenceRepos.vue +3 -3
  176. package/app/components/panels/inspector/EnvProbeReport.vue +24 -27
  177. package/app/components/panels/inspector/EpicChildren.vue +8 -12
  178. package/app/components/panels/inspector/FrontendBindingsResolved.vue +11 -11
  179. package/app/components/panels/inspector/FrontendConfig.vue +37 -41
  180. package/app/components/panels/inspector/InitiativeInspector.vue +3 -3
  181. package/app/components/panels/inspector/InspectorSection.vue +6 -6
  182. package/app/components/panels/inspector/RecurringScheduleSettings.vue +16 -19
  183. package/app/components/panels/inspector/ServiceConnections.vue +2 -2
  184. package/app/components/panels/inspector/ServiceReleaseHealthConfig.vue +2 -2
  185. package/app/components/panels/inspector/ServiceSelfTests.vue +21 -17
  186. package/app/components/panels/inspector/ServiceTestConfig.vue +51 -59
  187. package/app/components/panels/inspector/ServiceTestSecrets.vue +5 -5
  188. package/app/components/panels/inspector/ServiceTestingContext.vue +3 -3
  189. package/app/components/panels/inspector/ServiceValidationConfig.vue +2 -2
  190. package/app/components/panels/inspector/TaskAgentConfig.vue +3 -3
  191. package/app/components/panels/inspector/TaskAprioriBranches.vue +8 -5
  192. package/app/components/panels/inspector/TaskDependencies.vue +1 -1
  193. package/app/components/panels/inspector/TaskEstimateBadge.vue +11 -11
  194. package/app/components/panels/inspector/TaskExecution.vue +17 -17
  195. package/app/components/panels/inspector/TaskReviewTarget.vue +2 -2
  196. package/app/components/panels/inspector/TaskRunSettings.vue +35 -37
  197. package/app/components/panels/inspector/TaskStructure.vue +3 -3
  198. package/app/components/pipeline/AgentKindIcon.vue +1 -1
  199. package/app/components/pipeline/AgentPromptEditor.vue +17 -17
  200. package/app/components/pipeline/BinaryOutputStepPicker.vue +42 -56
  201. package/app/components/pipeline/EstimateThresholdFields.vue +4 -4
  202. package/app/components/pipeline/GateConfigFields.vue +13 -10
  203. package/app/components/pipeline/IterationCapPrompt.vue +4 -2
  204. package/app/components/pipeline/PipelineBuilder.vue +47 -55
  205. package/app/components/pipeline/PipelineHealthModal.vue +27 -29
  206. package/app/components/pipeline/PipelinePicker.vue +10 -10
  207. package/app/components/pipeline/PipelinePreview.vue +10 -10
  208. package/app/components/pipeline/PipelineProgress.vue +64 -67
  209. package/app/components/prReview/PrReviewPhaseBadge.vue +7 -7
  210. package/app/components/prReview/PrReviewWindow.vue +75 -77
  211. package/app/components/providers/AiPresetMismatchDialog.vue +5 -5
  212. package/app/components/providers/AiProviderOnboardingModal.vue +9 -9
  213. package/app/components/providers/ApiKeysSection.vue +13 -13
  214. package/app/components/providers/PersonalCredentialModal.vue +2 -2
  215. package/app/components/providers/PersonalSubscriptionSection.vue +10 -10
  216. package/app/components/providers/SignInRequiredNotice.vue +1 -1
  217. package/app/components/providers/VendorCredentialsModal.vue +10 -10
  218. package/app/components/provisioning/ProvisioningLogsDrawer.vue +13 -13
  219. package/app/components/ralph/RalphLoopResultView.vue +28 -30
  220. package/app/components/recurring/RecurrenceEditor.vue +2 -2
  221. package/app/components/requirements/RequirementsReviewWindow.vue +51 -58
  222. package/app/components/riskPolicy/RiskPolicyPicker.vue +12 -15
  223. package/app/components/riskPolicy/RiskPolicyPreview.vue +14 -14
  224. package/app/components/sandbox/SandboxPanel.vue +58 -59
  225. package/app/components/settings/AccountSettingsPanel.vue +1 -1
  226. package/app/components/settings/ApiTokensPanel.vue +10 -10
  227. package/app/components/settings/BudgetSettings.vue +18 -22
  228. package/app/components/settings/CapabilityCredentialsPanel.vue +15 -15
  229. package/app/components/settings/CloudflareHandlerSection.vue +20 -20
  230. package/app/components/settings/ComposeEnvironmentSetupSection.vue +13 -13
  231. package/app/components/settings/ConnectionTestVerdict.vue +3 -3
  232. package/app/components/settings/ConnectionWarnings.vue +1 -1
  233. package/app/components/settings/ConsensusGroupsSection.vue +27 -35
  234. package/app/components/settings/CustomManifestTypeEditor.vue +10 -10
  235. package/app/components/settings/DefaultProvisionTypeSection.vue +6 -6
  236. package/app/components/settings/InfraHandlersConfigurator.vue +24 -22
  237. package/app/components/settings/InfrastructureBackendPicker.vue +6 -6
  238. package/app/components/settings/InfrastructureWindow.vue +5 -5
  239. package/app/components/settings/IssueTrackerPanel.vue +29 -23
  240. package/app/components/settings/KubernetesEngineForm.vue +11 -11
  241. package/app/components/settings/KubernetesEnvironmentForm.vue +4 -4
  242. package/app/components/settings/LocalContainerPoolSettings.vue +6 -11
  243. package/app/components/settings/LocalModelEndpointsPanel.vue +20 -18
  244. package/app/components/settings/McpAuthorizeScreen.vue +13 -15
  245. package/app/components/settings/McpOAuthCallbackScreen.vue +16 -10
  246. package/app/components/settings/MergeClassRulesEditor.vue +6 -9
  247. package/app/components/settings/MergeRolePolicyEditor.vue +16 -16
  248. package/app/components/settings/ModelConfigurationPanel.vue +23 -30
  249. package/app/components/settings/ModelPresetHealthModal.vue +15 -13
  250. package/app/components/settings/ObservabilityConnectionPanel.vue +4 -4
  251. package/app/components/settings/OpenRouterCatalogPanel.vue +23 -19
  252. package/app/components/settings/PackageRegistriesPanel.vue +8 -8
  253. package/app/components/settings/ProviderConnectionTab.vue +8 -11
  254. package/app/components/settings/ProviderManifestEditor.vue +9 -9
  255. package/app/components/settings/ProviderPreferenceEditor.vue +8 -8
  256. package/app/components/settings/RiskPolicyCreateForm.vue +10 -10
  257. package/app/components/settings/RiskPolicyEditorRow.vue +14 -14
  258. package/app/components/settings/RiskPolicyHealthModal.vue +15 -13
  259. package/app/components/settings/RiskPolicyInheritedRow.vue +1 -1
  260. package/app/components/settings/RiskPolicyPanel.vue +10 -15
  261. package/app/components/settings/ServiceFragmentDefaultsPanel.vue +7 -7
  262. package/app/components/settings/SharedStacksPanel.vue +9 -12
  263. package/app/components/settings/TaskSourceCard.vue +4 -4
  264. package/app/components/settings/TaskTypeSuppressionsPanel.vue +6 -6
  265. package/app/components/settings/ToolServerChecklist.vue +36 -29
  266. package/app/components/settings/UsageSettings.vue +15 -15
  267. package/app/components/settings/UserSecretsSection.vue +9 -12
  268. package/app/components/settings/WorkspaceMetadataSettings.vue +5 -5
  269. package/app/components/settings/WorkspaceSettingsPanel.vue +47 -47
  270. package/app/components/skills/ReviewSkillQueue.vue +10 -10
  271. package/app/components/skills/SkillLibraryManager.vue +23 -20
  272. package/app/components/slack/SlackPanel.vue +13 -17
  273. package/app/components/spec/ServiceSpecWindow.vue +45 -42
  274. package/app/components/tasks/BugHuntModal.vue +24 -27
  275. package/app/components/tasks/ContextIssuePicker.vue +11 -11
  276. package/app/components/tasks/TaskContextIssues.vue +3 -3
  277. package/app/components/tasks/TaskImportModal.vue +7 -7
  278. package/app/components/tasks/TaskSourceConnectModal.vue +10 -8
  279. package/app/components/testing/TestReportWindow.vue +99 -82
  280. package/app/components/theme/ThemeImportModal.vue +115 -0
  281. package/app/components/tutorial/TutorialCatalogue.vue +9 -9
  282. package/app/components/tutorial/TutorialNudge.vue +5 -5
  283. package/app/components/tutorial/TutorialOverlay.vue +12 -12
  284. package/app/components/tutorial/TutorialPrompt.vue +6 -9
  285. package/app/components/vcs/GitLabConnect.vue +4 -4
  286. package/app/components/vcs/VcsConnectSurfaces.vue +2 -2
  287. package/app/components/visualConfirm/VisualConfirmationWindow.vue +36 -36
  288. package/app/composables/api/client.ts +6 -1
  289. package/app/composables/usePipelineErrorToast.ts +17 -0
  290. package/app/modular/agent-kinds.ts +24 -0
  291. package/app/pages/index.vue +5 -5
  292. package/app/plugins/theme.client.ts +125 -0
  293. package/app/spa-loading-template.html +52 -14
  294. package/app/stores/agents.ts +1 -1
  295. package/app/stores/theme.spec.ts +56 -0
  296. package/app/stores/theme.ts +87 -0
  297. package/app/types/domain.ts +19 -0
  298. package/app/types/execution.ts +4 -0
  299. package/app/utils/agentOutput.ts +1 -1
  300. package/app/utils/binaryOutput.ts +6 -6
  301. package/app/utils/bootstrapSteps.ts +14 -14
  302. package/app/utils/catalog.ts +87 -83
  303. package/app/utils/colorTint.ts +10 -0
  304. package/app/utils/failureKinds.ts +1 -0
  305. package/app/utils/observability.ts +3 -3
  306. package/app/utils/pipelineRender.ts +13 -17
  307. package/app/utils/swimlanes.ts +4 -4
  308. package/app/utils/theme/bootPalette.spec.ts +54 -0
  309. package/app/utils/theme/bootPalette.ts +108 -0
  310. package/app/utils/theme/builtins.spec.ts +38 -0
  311. package/app/utils/theme/builtins.ts +55 -0
  312. package/app/utils/theme/css.ts +162 -0
  313. package/app/utils/theme/doc.ts +353 -0
  314. package/app/utils/theme/link.ts +93 -0
  315. package/app/utils/theme/presets.ts +509 -0
  316. package/app/utils/theme/theme.spec.ts +224 -0
  317. package/i18n/locales/de.json +61 -4
  318. package/i18n/locales/en.json +70 -4
  319. package/i18n/locales/es.json +61 -4
  320. package/i18n/locales/fr.json +61 -4
  321. package/i18n/locales/he.json +61 -4
  322. package/i18n/locales/it.json +61 -4
  323. package/i18n/locales/ja.json +61 -4
  324. package/i18n/locales/pl.json +61 -4
  325. package/i18n/locales/tr.json +61 -4
  326. package/i18n/locales/uk.json +61 -4
  327. package/nuxt.config.ts +37 -11
  328. package/package.json +9 -8
@@ -141,33 +141,31 @@ function backToApp() {
141
141
 
142
142
  <template>
143
143
  <div
144
- class="flex min-h-screen w-screen items-center justify-center bg-slate-950 p-4 text-slate-100"
144
+ class="flex min-h-screen w-screen items-center justify-center bg-app-950 p-4 text-app-100"
145
145
  data-testid="mcp-authorize"
146
146
  >
147
- <div
148
- class="w-full max-w-md rounded-xl border border-slate-800 bg-slate-900/80 p-8 backdrop-blur"
149
- >
147
+ <div class="w-full max-w-md rounded-xl border border-default bg-default/80 p-8 backdrop-blur">
150
148
  <template v-if="screen === 'loading'">
151
- <UIcon name="i-lucide-loader" class="mx-auto h-10 w-10 animate-spin text-indigo-400" />
149
+ <UIcon name="i-lucide-loader" class="mx-auto h-10 w-10 animate-spin text-primary" />
152
150
  </template>
153
151
 
154
152
  <template v-else-if="screen === 'failed'">
155
- <UIcon name="i-lucide-alert-triangle" class="mx-auto mb-3 h-10 w-10 text-red-400" />
153
+ <UIcon name="i-lucide-alert-triangle" class="mx-auto mb-3 h-10 w-10 text-app-error-400" />
156
154
  <h1
157
- class="mb-1 text-center text-lg font-semibold text-white"
155
+ class="mb-1 text-center text-lg font-semibold text-highlighted"
158
156
  data-testid="mcp-authorize-failed"
159
157
  >
160
158
  {{ t('mcpAuthorize.error.title') }}
161
159
  </h1>
162
- <p class="mb-6 text-center text-sm break-words text-slate-400">{{ detail }}</p>
160
+ <p class="mb-6 text-center text-sm break-words text-muted">{{ detail }}</p>
163
161
  <UButton block color="neutral" variant="subtle" @click="backToApp">
164
162
  {{ t('mcpAuthorize.back') }}
165
163
  </UButton>
166
164
  </template>
167
165
 
168
166
  <template v-else>
169
- <UIcon name="i-lucide-plug-zap" class="mx-auto mb-3 h-10 w-10 text-indigo-400" />
170
- <h1 class="mb-1 text-center text-lg font-semibold text-white">
167
+ <UIcon name="i-lucide-plug-zap" class="mx-auto mb-3 h-10 w-10 text-primary" />
168
+ <h1 class="mb-1 text-center text-lg font-semibold text-highlighted">
171
169
  {{ t('mcpAuthorize.title', { client: clientName }) }}
172
170
  </h1>
173
171
  <!-- The origin is the one fact here an attacker cannot choose: it was matched against what
@@ -176,11 +174,11 @@ function backToApp() {
176
174
  The copy reads "It says it is {client}, and …" in every locale, so BOTH holes have to
177
175
  be filled: an unpassed `client` renders a sentence naming nobody, on the one screen
178
176
  whose whole subject is who is asking. -->
179
- <p class="mb-6 text-center text-sm text-slate-400">
177
+ <p class="mb-6 text-center text-sm text-muted">
180
178
  {{ t('mcpAuthorize.subtitle', { client: clientName, origin: redirectOrigin }) }}
181
179
  </p>
182
180
 
183
- <div v-if="!workspaces.length" class="mb-6 text-center text-sm text-amber-300">
181
+ <div v-if="!workspaces.length" class="mb-6 text-center text-sm text-app-warning-300">
184
182
  {{ t('mcpAuthorize.noWorkspaces') }}
185
183
  </div>
186
184
 
@@ -213,7 +211,7 @@ function backToApp() {
213
211
  host rather than acted on: raising the grant stays a thing a person does. -->
214
212
  <p
215
213
  v-if="requestedScope"
216
- class="mb-6 text-xs text-amber-300"
214
+ class="mb-6 text-xs text-app-warning-300"
217
215
  data-testid="mcp-authorize-requested-scope"
218
216
  >
219
217
  {{
@@ -227,7 +225,7 @@ function backToApp() {
227
225
 
228
226
  <p
229
227
  v-if="decisionError"
230
- class="mb-4 text-center text-sm break-words text-red-400"
228
+ class="mb-4 text-center text-sm break-words text-app-error-400"
231
229
  data-testid="mcp-authorize-decision-error"
232
230
  >
233
231
  {{ decisionError }}
@@ -255,7 +253,7 @@ function backToApp() {
255
253
  </UButton>
256
254
  </div>
257
255
 
258
- <p class="mt-4 text-center text-xs text-slate-500">{{ t('mcpAuthorize.revokeHint') }}</p>
256
+ <p class="mt-4 text-center text-xs text-dimmed">{{ t('mcpAuthorize.revokeHint') }}</p>
259
257
  </template>
260
258
  </div>
261
259
  </div>
@@ -62,25 +62,28 @@ function backToApp() {
62
62
 
63
63
  <template>
64
64
  <div
65
- class="flex h-screen w-screen items-center justify-center bg-slate-950 text-slate-100"
65
+ class="flex h-screen w-screen items-center justify-center bg-app-950 text-app-100"
66
66
  data-testid="mcp-oauth-callback"
67
67
  >
68
68
  <div
69
- class="w-full max-w-sm rounded-xl border border-slate-800 bg-slate-900/80 p-8 text-center backdrop-blur"
69
+ class="w-full max-w-sm rounded-xl border border-default bg-default/80 p-8 text-center backdrop-blur"
70
70
  >
71
71
  <template v-if="state === 'working'">
72
- <UIcon name="i-lucide-loader" class="mx-auto mb-3 h-10 w-10 animate-spin text-indigo-400" />
73
- <h1 class="mb-1 text-lg font-semibold text-white">
72
+ <UIcon name="i-lucide-loader" class="mx-auto mb-3 h-10 w-10 animate-spin text-primary" />
73
+ <h1 class="mb-1 text-lg font-semibold text-highlighted">
74
74
  {{ t('settings.toolServers.oauth.callback.working') }}
75
75
  </h1>
76
76
  </template>
77
77
 
78
78
  <template v-else-if="state === 'done'">
79
- <UIcon name="i-lucide-check-circle" class="mx-auto mb-3 h-10 w-10 text-emerald-400" />
80
- <h1 class="mb-1 text-lg font-semibold text-white" data-testid="mcp-oauth-callback-done">
79
+ <UIcon name="i-lucide-check-circle" class="mx-auto mb-3 h-10 w-10 text-app-success-400" />
80
+ <h1
81
+ class="mb-1 text-lg font-semibold text-highlighted"
82
+ data-testid="mcp-oauth-callback-done"
83
+ >
81
84
  {{ t('settings.toolServers.oauth.callback.done', { server: serverId }) }}
82
85
  </h1>
83
- <p class="mb-6 text-sm text-slate-400">
86
+ <p class="mb-6 text-sm text-muted">
84
87
  {{ t('settings.toolServers.oauth.callback.doneHint') }}
85
88
  </p>
86
89
  <UButton block color="primary" @click="backToApp">
@@ -89,11 +92,14 @@ function backToApp() {
89
92
  </template>
90
93
 
91
94
  <template v-else>
92
- <UIcon name="i-lucide-alert-triangle" class="mx-auto mb-3 h-10 w-10 text-red-400" />
93
- <h1 class="mb-1 text-lg font-semibold text-white" data-testid="mcp-oauth-callback-failed">
95
+ <UIcon name="i-lucide-alert-triangle" class="mx-auto mb-3 h-10 w-10 text-app-error-400" />
96
+ <h1
97
+ class="mb-1 text-lg font-semibold text-highlighted"
98
+ data-testid="mcp-oauth-callback-failed"
99
+ >
94
100
  {{ t('settings.toolServers.oauth.callback.failedTitle') }}
95
101
  </h1>
96
- <p class="mb-6 text-sm break-words text-slate-400">{{ detail }}</p>
102
+ <p class="mb-6 text-sm break-words text-muted">{{ detail }}</p>
97
103
  <UButton block color="neutral" variant="subtle" @click="backToApp">
98
104
  {{ t('settings.toolServers.oauth.callback.back') }}
99
105
  </UButton>
@@ -83,13 +83,13 @@ function setRule(changeClass: (typeof RULEABLE_CHANGE_CLASSES)[number], rule: Me
83
83
  <template>
84
84
  <div data-testid="merge-class-rules" class="space-y-2">
85
85
  <div>
86
- <span class="block text-[10px] uppercase tracking-wide text-slate-500">
86
+ <span class="block text-[10px] uppercase tracking-wide text-dimmed">
87
87
  {{ t('settings.riskPolicy.classRules.heading') }}
88
88
  </span>
89
- <p class="mt-0.5 text-[11px] leading-snug text-slate-500">
89
+ <p class="mt-0.5 text-[11px] leading-snug text-dimmed">
90
90
  {{ t('settings.riskPolicy.classRules.help') }}
91
91
  </p>
92
- <p v-if="!autoMergeEnabled" class="mt-1 text-[11px] leading-snug text-amber-400/90">
92
+ <p v-if="!autoMergeEnabled" class="mt-1 text-[11px] leading-snug text-app-warning-400/90">
93
93
  {{ t('settings.riskPolicy.classRules.autoMergeOffWarning') }}
94
94
  </p>
95
95
  </div>
@@ -97,10 +97,10 @@ function setRule(changeClass: (typeof RULEABLE_CHANGE_CLASSES)[number], rule: Me
97
97
  <div
98
98
  v-for="row in rows"
99
99
  :key="row.changeClass"
100
- class="flex flex-wrap items-center gap-2 rounded-md border border-slate-700/50 bg-slate-900/30 px-2 py-1.5"
100
+ class="flex flex-wrap items-center gap-2 rounded-md border border-muted/50 bg-default/30 px-2 py-1.5"
101
101
  :data-testid="`merge-class-row-${row.changeClass}`"
102
102
  >
103
- <span class="min-w-[7rem] text-xs text-slate-300">{{ row.label }}</span>
103
+ <span class="min-w-[7rem] text-xs text-toned">{{ row.label }}</span>
104
104
  <USelect
105
105
  :model-value="row.rule"
106
106
  :items="RULE_OPTIONS"
@@ -111,10 +111,7 @@ function setRule(changeClass: (typeof RULEABLE_CHANGE_CLASSES)[number], rule: Me
111
111
  :data-testid="`merge-class-rule-${row.changeClass}`"
112
112
  @update:model-value="setRule(row.changeClass, $event as MergeClassRule)"
113
113
  />
114
- <span
115
- class="text-[11px] text-slate-500"
116
- :data-testid="`merge-class-record-${row.changeClass}`"
117
- >
114
+ <span class="text-[11px] text-dimmed" :data-testid="`merge-class-record-${row.changeClass}`">
118
115
  <template v-if="row.merged === 0">
119
116
  {{ t('settings.riskPolicy.classRules.noData') }}
120
117
  </template>
@@ -162,10 +162,10 @@ function setSubmissionClass(
162
162
  <template>
163
163
  <div data-testid="merge-role-policy" class="space-y-2">
164
164
  <div>
165
- <span class="block text-[10px] uppercase tracking-wide text-slate-500">
165
+ <span class="block text-[10px] uppercase tracking-wide text-dimmed">
166
166
  {{ t('settings.riskPolicy.roleRules.heading') }}
167
167
  </span>
168
- <p class="mt-0.5 text-[11px] leading-snug text-slate-500">
168
+ <p class="mt-0.5 text-[11px] leading-snug text-dimmed">
169
169
  {{ t('settings.riskPolicy.roleRules.help') }}
170
170
  </p>
171
171
  <!-- Auto-merge off already sends every pull request to a human, so the per-class narrowing
@@ -173,7 +173,7 @@ function setSubmissionClass(
173
173
  MANUAL merge as well, which is the one thing the master switch leaves open. -->
174
174
  <p
175
175
  v-if="!autoMergeEnabled"
176
- class="mt-1 text-[11px] leading-snug text-amber-400/90"
176
+ class="mt-1 text-[11px] leading-snug text-app-warning-400/90"
177
177
  data-testid="merge-role-auto-merge-off"
178
178
  >
179
179
  {{ t('settings.riskPolicy.roleRules.autoMergeOffWarning') }}
@@ -183,11 +183,11 @@ function setSubmissionClass(
183
183
  <div
184
184
  v-for="group in roles"
185
185
  :key="group.role"
186
- class="rounded-md border border-slate-700/50 bg-slate-900/30 px-2 py-1.5"
186
+ class="rounded-md border border-muted/50 bg-default/30 px-2 py-1.5"
187
187
  :data-testid="`merge-role-group-${group.role}`"
188
188
  >
189
189
  <div class="flex flex-wrap items-center gap-2">
190
- <span class="min-w-[5rem] text-xs text-slate-300">{{ group.label }}</span>
190
+ <span class="min-w-[5rem] text-xs text-toned">{{ group.label }}</span>
191
191
  <USwitch
192
192
  :model-value="group.sandboxed"
193
193
  size="sm"
@@ -218,7 +218,7 @@ function setSubmissionClass(
218
218
  only, and a role can land nothing at all while showing "No class limits". -->
219
219
  <span
220
220
  v-if="group.submissionScoped"
221
- class="text-[11px] text-amber-400/90"
221
+ class="text-[11px] text-app-warning-400/90"
222
222
  :data-testid="`merge-role-submission-badge-${group.role}`"
223
223
  >
224
224
  {{ t('settings.riskPolicy.roleRules.submissionBadge') }}
@@ -230,13 +230,13 @@ function setSubmissionClass(
230
230
  row says which of the three is actually governing. -->
231
231
  <p
232
232
  v-if="group.sandboxed"
233
- class="mt-1 text-[11px] leading-snug text-amber-400/90"
233
+ class="mt-1 text-[11px] leading-snug text-app-warning-400/90"
234
234
  :data-testid="`merge-role-sandbox-note-${group.role}`"
235
235
  >
236
236
  {{ t('settings.riskPolicy.roleRules.sandboxNote') }}
237
237
  </p>
238
238
 
239
- <div v-if="group.open" class="mt-2 space-y-2 border-t border-slate-800 pt-2">
239
+ <div v-if="group.open" class="mt-2 space-y-2 border-t border-default pt-2">
240
240
  <!-- What this role may LAND at all. Above the class rules because it outranks them: a
241
241
  class can be auto-mergeable under the rules and still outside this list, and then
242
242
  nothing merges, through the review card's own button included. -->
@@ -249,7 +249,7 @@ function setSubmissionClass(
249
249
  :data-testid="`merge-role-submission-${group.role}`"
250
250
  @update:model-value="setSubmissionScoped(group.role, $event)"
251
251
  />
252
- <p class="text-[11px] leading-snug text-slate-500">
252
+ <p class="text-[11px] leading-snug text-dimmed">
253
253
  {{ t('settings.riskPolicy.roleRules.submissionHelp') }}
254
254
  </p>
255
255
  <div v-if="group.submissionScoped" class="flex flex-wrap gap-x-4 gap-y-1">
@@ -268,18 +268,18 @@ function setSubmissionClass(
268
268
  does rather than reading as a switch somebody forgot to fill in. -->
269
269
  <p
270
270
  v-if="group.submissionScoped && !group.submissionRows.some((r) => r.allowed)"
271
- class="text-[11px] leading-snug text-amber-400/90"
271
+ class="text-[11px] leading-snug text-app-warning-400/90"
272
272
  :data-testid="`merge-role-submission-none-${group.role}`"
273
273
  >
274
274
  {{ t('settings.riskPolicy.roleRules.submissionNone') }}
275
275
  </p>
276
276
  </div>
277
277
 
278
- <div class="space-y-1.5 border-t border-slate-800/70 pt-2">
279
- <p class="text-[11px] leading-snug text-slate-500">
278
+ <div class="space-y-1.5 border-t border-default/70 pt-2">
279
+ <p class="text-[11px] leading-snug text-dimmed">
280
280
  {{ t('settings.riskPolicy.roleRules.classHeading') }}
281
281
  </p>
282
- <p v-if="!anyBaseRule" class="text-[11px] leading-snug text-slate-500">
282
+ <p v-if="!anyBaseRule" class="text-[11px] leading-snug text-dimmed">
283
283
  {{ t('settings.riskPolicy.roleRules.baseHint') }}
284
284
  </p>
285
285
  <div
@@ -288,7 +288,7 @@ function setSubmissionClass(
288
288
  class="flex flex-wrap items-center gap-2"
289
289
  :data-testid="`merge-role-row-${group.role}-${row.changeClass}`"
290
290
  >
291
- <span class="min-w-[7rem] text-xs text-slate-400">{{ row.label }}</span>
291
+ <span class="min-w-[7rem] text-xs text-muted">{{ row.label }}</span>
292
292
  <USelect
293
293
  :model-value="row.selected"
294
294
  :items="row.items"
@@ -302,12 +302,12 @@ function setSubmissionClass(
302
302
  "
303
303
  />
304
304
  <!-- Nothing left to narrow: the base rule already routes this class to a human. -->
305
- <span v-if="row.items.length === 1" class="text-[11px] text-slate-500">
305
+ <span v-if="row.items.length === 1" class="text-[11px] text-dimmed">
306
306
  {{ t('settings.riskPolicy.roleRules.alreadyStrictest') }}
307
307
  </span>
308
308
  <span
309
309
  v-else-if="row.redundant"
310
- class="text-[11px] text-amber-400/90"
310
+ class="text-[11px] text-app-warning-400/90"
311
311
  :data-testid="`merge-role-redundant-${group.role}-${row.changeClass}`"
312
312
  >
313
313
  {{ t('settings.riskPolicy.roleRules.redundant') }}
@@ -298,21 +298,19 @@ async function save() {
298
298
  <Transition name="reader-fade">
299
299
  <div
300
300
  v-if="open"
301
- class="fixed inset-0 z-50 flex max-h-[100dvh] flex-col bg-slate-950/96 backdrop-blur-sm"
301
+ class="fixed inset-0 z-50 flex max-h-[100dvh] flex-col bg-app-950/96 backdrop-blur-sm"
302
302
  role="dialog"
303
303
  aria-modal="true"
304
304
  >
305
- <header class="flex items-center gap-3 border-b border-slate-800 px-6 py-4">
306
- <div
307
- class="flex h-9 w-9 shrink-0 items-center justify-center rounded-lg bg-indigo-500/15"
308
- >
309
- <UIcon name="i-lucide-cpu" class="h-5 w-5 text-indigo-300" />
305
+ <header class="flex items-center gap-3 border-b border-default px-6 py-4">
306
+ <div class="flex h-9 w-9 shrink-0 items-center justify-center rounded-lg bg-primary/15">
307
+ <UIcon name="i-lucide-cpu" class="h-5 w-5 text-primary" />
310
308
  </div>
311
309
  <div class="min-w-0">
312
- <h1 class="truncate text-base font-semibold text-white">
310
+ <h1 class="truncate text-base font-semibold text-highlighted">
313
311
  {{ t('settings.modelConfiguration.title') }}
314
312
  </h1>
315
- <p class="truncate text-xs text-slate-500">
313
+ <p class="truncate text-xs text-dimmed">
316
314
  {{ t('settings.modelConfiguration.subtitle') }}
317
315
  </p>
318
316
  </div>
@@ -352,14 +350,14 @@ async function save() {
352
350
  <!-- ===== list view ===== -->
353
351
  <template v-if="!editor">
354
352
  <div class="flex items-center justify-between">
355
- <p class="text-sm leading-relaxed text-slate-400">
353
+ <p class="text-sm leading-relaxed text-muted">
356
354
  <i18n-t
357
355
  keypath="settings.modelConfiguration.list.intro"
358
356
  scope="global"
359
357
  tag="span"
360
358
  >
361
359
  <template #baseModel>
362
- <span class="text-slate-300">{{
360
+ <span class="text-toned">{{
363
361
  t('settings.modelConfiguration.list.introBaseModel')
364
362
  }}</span>
365
363
  </template>
@@ -376,7 +374,7 @@ async function save() {
376
374
  </UButton>
377
375
  </div>
378
376
 
379
- <p v-if="models.models.length === 0" class="py-4 text-center text-sm text-slate-500">
377
+ <p v-if="models.models.length === 0" class="py-4 text-center text-sm text-dimmed">
380
378
  {{ t('settings.modelConfiguration.list.loadingCatalog') }}
381
379
  </p>
382
380
 
@@ -384,10 +382,10 @@ async function save() {
384
382
  <div
385
383
  v-for="p in sortedPresets"
386
384
  :key="p.id"
387
- class="rounded-xl border border-slate-800 bg-slate-900/50 p-4"
385
+ class="rounded-xl border border-default bg-default/50 p-4"
388
386
  >
389
387
  <div class="flex items-center gap-2">
390
- <span class="truncate text-sm font-semibold text-slate-100">{{ p.name }}</span>
388
+ <span class="truncate text-sm font-semibold text-app-100">{{ p.name }}</span>
391
389
  <UBadge v-if="p.isDefault" color="primary" variant="subtle" size="xs">
392
390
  {{ t('settings.modelConfiguration.list.default') }}
393
391
  </UBadge>
@@ -426,9 +424,9 @@ async function save() {
426
424
  />
427
425
  </div>
428
426
  </div>
429
- <div class="mt-1.5 text-[11px] text-slate-400">
427
+ <div class="mt-1.5 text-[11px] text-muted">
430
428
  {{ t('settings.modelConfiguration.list.basePrefix') }}
431
- <span class="text-slate-300">{{ modelLabel(p.baseModelId) }}</span>
429
+ <span class="text-toned">{{ modelLabel(p.baseModelId) }}</span>
432
430
  <span v-if="Object.keys(p.overrides).length">
433
431
  ·
434
432
  {{
@@ -442,15 +440,12 @@ async function save() {
442
440
  <!-- A custom route order changes which provider the same model runs on, so the
443
441
  list says so rather than leaving it visible only inside the editor (which
444
442
  basic mode hides). -->
445
- <span v-if="p.providerPreference?.length" class="text-slate-300">
443
+ <span v-if="p.providerPreference?.length" class="text-toned">
446
444
  · {{ t('settings.modelConfiguration.list.customRouteOrder') }}
447
445
  </span>
448
446
  </div>
449
447
  </div>
450
- <p
451
- v-if="sortedPresets.length === 0"
452
- class="py-6 text-center text-sm text-slate-500"
453
- >
448
+ <p v-if="sortedPresets.length === 0" class="py-6 text-center text-sm text-dimmed">
454
449
  {{ t('settings.modelConfiguration.list.empty') }}
455
450
  </p>
456
451
  </div>
@@ -463,10 +458,10 @@ async function save() {
463
458
 
464
459
  <!-- ===== editor view ===== -->
465
460
  <template v-else>
466
- <div class="space-y-4 rounded-xl border border-slate-800 bg-slate-900/50 p-4">
461
+ <div class="space-y-4 rounded-xl border border-default bg-default/50 p-4">
467
462
  <div>
468
463
  <label
469
- class="mb-1 block text-[11px] font-semibold uppercase tracking-wide text-slate-400"
464
+ class="mb-1 block text-[11px] font-semibold uppercase tracking-wide text-muted"
470
465
  >
471
466
  {{ t('settings.modelConfiguration.editor.nameLabel') }}
472
467
  </label>
@@ -480,7 +475,7 @@ async function save() {
480
475
 
481
476
  <div>
482
477
  <label
483
- class="mb-1 block text-[11px] font-semibold uppercase tracking-wide text-slate-400"
478
+ class="mb-1 block text-[11px] font-semibold uppercase tracking-wide text-muted"
484
479
  >
485
480
  {{ t('settings.modelConfiguration.editor.baseModelLabel') }}
486
481
  </label>
@@ -500,7 +495,7 @@ async function save() {
500
495
  </UDropdownMenu>
501
496
  </div>
502
497
 
503
- <label class="flex items-center gap-2 text-sm text-slate-300">
498
+ <label class="flex items-center gap-2 text-sm text-toned">
504
499
  <UCheckbox v-model="editor.isDefault" />
505
500
  {{ t('settings.modelConfiguration.editor.makeDefault') }}
506
501
  </label>
@@ -519,7 +514,7 @@ async function save() {
519
514
 
520
515
  <div>
521
516
  <div class="mb-1 flex items-start justify-between gap-3">
522
- <span class="text-[11px] font-semibold uppercase tracking-wide text-slate-400">
517
+ <span class="text-[11px] font-semibold uppercase tracking-wide text-muted">
523
518
  {{ t('settings.modelConfiguration.editor.perAgentOverrides') }}
524
519
  </span>
525
520
  <AgentTierSelect class="w-56 shrink-0" :hidden-count="hiddenByTier" />
@@ -531,9 +526,7 @@ async function save() {
531
526
  :placeholder="t('settings.modelConfiguration.editor.filterPlaceholder')"
532
527
  class="mb-3 w-full"
533
528
  />
534
- <div
535
- class="divide-y divide-slate-800 rounded-xl border border-slate-800 bg-slate-900/50"
536
- >
529
+ <div class="divide-y divide-default rounded-xl border border-default bg-default/50">
537
530
  <div
538
531
  v-for="a in filteredKinds"
539
532
  :key="a.kind"
@@ -546,7 +539,7 @@ async function save() {
546
539
  :title="a.description"
547
540
  />
548
541
  <div class="min-w-0 flex-1" :title="a.description">
549
- <p class="truncate text-sm text-slate-200">{{ a.label }}</p>
542
+ <p class="truncate text-sm text-default">{{ a.label }}</p>
550
543
  </div>
551
544
  <UDropdownMenu
552
545
  :items="overrideMenu(a.kind)"
@@ -565,7 +558,7 @@ async function save() {
565
558
  </div>
566
559
  <p
567
560
  v-if="filteredKinds.length === 0"
568
- class="px-4 py-6 text-center text-sm text-slate-500"
561
+ class="px-4 py-6 text-center text-sm text-dimmed"
569
562
  >
570
563
  {{ t('settings.modelConfiguration.editor.noAgentsMatch', { filter }) }}
571
564
  </p>
@@ -59,8 +59,8 @@ const reseedableCount = computed(
59
59
  <template>
60
60
  <UModal v-model:open="open" :title="t('modelPreset.health.title')" :ui="{ content: 'max-w-2xl' }">
61
61
  <template #body>
62
- <div v-if="!hasIssues" class="py-6 text-center text-sm text-slate-400">
63
- <UIcon name="i-lucide-check-circle-2" class="mx-auto mb-2 h-8 w-8 text-emerald-400" />
62
+ <div v-if="!hasIssues" class="py-6 text-center text-sm text-muted">
63
+ <UIcon name="i-lucide-check-circle-2" class="mx-auto mb-2 h-8 w-8 text-app-success-400" />
64
64
  {{ t('modelPreset.health.allValid') }}
65
65
  </div>
66
66
 
@@ -68,20 +68,20 @@ const reseedableCount = computed(
68
68
  <!-- New built-in presets the workspace can add. -->
69
69
  <section v-if="newPresets.length" class="space-y-2">
70
70
  <div class="flex items-center gap-2">
71
- <UIcon name="i-lucide-sparkles" class="h-4 w-4 text-emerald-400" />
72
- <h3 class="text-sm font-semibold text-slate-200">
71
+ <UIcon name="i-lucide-sparkles" class="h-4 w-4 text-app-success-400" />
72
+ <h3 class="text-sm font-semibold text-default">
73
73
  {{ t('modelPreset.health.newHeading') }}
74
74
  </h3>
75
75
  </div>
76
- <p class="text-[11px] text-slate-500">{{ t('modelPreset.health.newDescription') }}</p>
76
+ <p class="text-[11px] text-dimmed">{{ t('modelPreset.health.newDescription') }}</p>
77
77
  <ul class="space-y-2">
78
78
  <li
79
79
  v-for="i in newPresets"
80
80
  :key="i.id"
81
- class="flex items-center justify-between gap-3 rounded-lg border border-slate-800 bg-slate-900/40 p-3"
81
+ class="flex items-center justify-between gap-3 rounded-lg border border-default bg-default/40 p-3"
82
82
  >
83
83
  <div class="min-w-0">
84
- <span class="truncate text-sm font-medium text-slate-100 capitalize">{{
84
+ <span class="truncate text-sm font-medium text-app-100 capitalize">{{
85
85
  i.name
86
86
  }}</span>
87
87
  </div>
@@ -103,21 +103,23 @@ const reseedableCount = computed(
103
103
  <!-- Outdated built-ins: a newer catalog version is available. -->
104
104
  <section v-if="outdated.length" class="space-y-2">
105
105
  <div class="flex items-center gap-2">
106
- <UIcon name="i-lucide-arrow-up-circle" class="h-4 w-4 text-amber-400" />
107
- <h3 class="text-sm font-semibold text-slate-200">
106
+ <UIcon name="i-lucide-arrow-up-circle" class="h-4 w-4 text-app-warning-400" />
107
+ <h3 class="text-sm font-semibold text-default">
108
108
  {{ t('modelPreset.health.updatesHeading') }}
109
109
  </h3>
110
110
  </div>
111
- <p class="text-[11px] text-slate-500">{{ t('modelPreset.health.updatesDescription') }}</p>
111
+ <p class="text-[11px] text-dimmed">
112
+ {{ t('modelPreset.health.updatesDescription') }}
113
+ </p>
112
114
  <ul class="space-y-2">
113
115
  <li
114
116
  v-for="i in outdated"
115
117
  :key="i.id"
116
- class="flex items-center justify-between gap-3 rounded-lg border border-slate-800 bg-slate-900/40 p-3"
118
+ class="flex items-center justify-between gap-3 rounded-lg border border-default bg-default/40 p-3"
117
119
  >
118
120
  <div class="min-w-0">
119
- <span class="truncate text-sm font-medium text-slate-100">{{ i.name }}</span>
120
- <p class="text-[11px] text-amber-400/80">
121
+ <span class="truncate text-sm font-medium text-app-100">{{ i.name }}</span>
122
+ <p class="text-[11px] text-app-warning-400/80">
121
123
  {{
122
124
  t('modelPreset.health.versionAvailable', {
123
125
  from: i.fromVersion ?? 0,
@@ -160,7 +160,7 @@ const connectedLabel = computed(() => {
160
160
  <i18n-t
161
161
  keypath="settings.observabilityConnection.intro"
162
162
  tag="p"
163
- class="text-sm text-slate-400"
163
+ class="text-sm text-muted"
164
164
  scope="global"
165
165
  >
166
166
  <template #gate>
@@ -168,7 +168,7 @@ const connectedLabel = computed(() => {
168
168
  </template>
169
169
  </i18n-t>
170
170
 
171
- <section class="space-y-3 rounded-lg border border-slate-700 p-3">
171
+ <section class="space-y-3 rounded-lg border border-muted p-3">
172
172
  <div class="flex items-center justify-between">
173
173
  <h3 class="text-sm font-semibold">
174
174
  {{ t('settings.observabilityConnection.connection.heading') }}
@@ -222,7 +222,7 @@ const connectedLabel = computed(() => {
222
222
  already opened from the same monitors/SLOs. -->
223
223
  <section
224
224
  v-if="store.incidentAvailable !== false"
225
- class="space-y-3 rounded-lg border border-slate-700 p-3"
225
+ class="space-y-3 rounded-lg border border-muted p-3"
226
226
  >
227
227
  <div class="flex items-center justify-between">
228
228
  <h3 class="text-sm font-semibold">
@@ -236,7 +236,7 @@ const connectedLabel = computed(() => {
236
236
  }}
237
237
  </UBadge>
238
238
  </div>
239
- <p class="text-[11px] text-slate-400">
239
+ <p class="text-[11px] text-muted">
240
240
  {{ t('settings.observabilityConnection.incident.description') }}
241
241
  </p>
242
242