@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
@@ -418,15 +418,15 @@ function toastRemoved() {
418
418
  === true). While it's still being probed (null) show a loading line instead of flashing
419
419
  the full form, and render nothing when the integration is off (false). -->
420
420
  <div v-if="infra.available === true" class="space-y-5">
421
- <p class="text-xs text-slate-400">{{ t('settings.infrastructure.handler.intro') }}</p>
421
+ <p class="text-xs text-muted">{{ t('settings.infrastructure.handler.intro') }}</p>
422
422
 
423
423
  <!-- kubernetes -->
424
424
  <section
425
425
  ref="kubeSection"
426
- class="space-y-2 rounded-lg border border-slate-700 bg-slate-900/40 p-3"
426
+ class="space-y-2 rounded-lg border border-muted bg-default/40 p-3"
427
427
  data-testid="infra-kubernetes-section"
428
428
  >
429
- <h3 class="text-sm font-semibold text-slate-200">
429
+ <h3 class="text-sm font-semibold text-default">
430
430
  {{ t('inspector.testConfig.provisionTypes.kubernetes') }}
431
431
  </h3>
432
432
  <!-- Established-connection card: a prominent checkbox signals a connection is stored, and
@@ -434,7 +434,7 @@ function toastRemoved() {
434
434
  re-opening the form. Absent ⇒ the "not connected yet" hint. -->
435
435
  <div
436
436
  v-if="kubeHandler"
437
- class="space-y-2 rounded-md border border-emerald-500/30 bg-emerald-500/5 p-2.5"
437
+ class="space-y-2 rounded-md border border-app-success-500/30 bg-app-success-500/5 p-2.5"
438
438
  >
439
439
  <div class="flex items-start justify-between gap-2">
440
440
  <UCheckbox
@@ -442,7 +442,7 @@ function toastRemoved() {
442
442
  disabled
443
443
  size="lg"
444
444
  :label="t('settings.infrastructure.handler.connectionEstablished')"
445
- :ui="{ label: 'text-[13px] font-semibold text-emerald-300' }"
445
+ :ui="{ label: 'text-[13px] font-semibold text-app-success-300' }"
446
446
  />
447
447
  <UButton
448
448
  icon="i-lucide-trash-2"
@@ -454,9 +454,9 @@ function toastRemoved() {
454
454
  @click="removeKube"
455
455
  />
456
456
  </div>
457
- <p class="pl-7 text-[11px] text-slate-300">
457
+ <p class="pl-7 text-[11px] text-toned">
458
458
  {{ t('settings.infrastructure.handler.activeEngine') }}
459
- <span class="text-slate-200">{{ kubeHandlerEngineLabel }}</span>
459
+ <span class="text-default">{{ kubeHandlerEngineLabel }}</span>
460
460
  </p>
461
461
  <div class="space-y-1.5 pl-7">
462
462
  <UButton
@@ -472,13 +472,13 @@ function toastRemoved() {
472
472
  <ConnectionTestVerdict :result="kubeSavedTestResult" />
473
473
  </div>
474
474
  </div>
475
- <p v-else class="flex items-center gap-1.5 text-[12px] text-slate-500">
475
+ <p v-else class="flex items-center gap-1.5 text-[12px] text-dimmed">
476
476
  <UIcon name="i-lucide-circle-dashed" class="h-3.5 w-3.5" />
477
477
  {{ t('settings.infrastructure.handler.notConnected') }}
478
478
  </p>
479
479
 
480
480
  <div class="space-y-1">
481
- <span class="text-[11px] text-slate-400">{{
481
+ <span class="text-[11px] text-muted">{{
482
482
  t('settings.infrastructure.handler.engineLabel')
483
483
  }}</span>
484
484
  <div class="flex flex-wrap gap-1">
@@ -512,10 +512,10 @@ function toastRemoved() {
512
512
  />
513
513
 
514
514
  <!-- Local mode: a personal override for THIS machine, layered over the workspace handler. -->
515
- <div v-if="userOverridesOn" class="border-t border-slate-800 pt-2">
515
+ <div v-if="userOverridesOn" class="border-t border-default pt-2">
516
516
  <button
517
517
  type="button"
518
- class="flex w-full items-center gap-1.5 text-start text-[11px] font-semibold uppercase tracking-wide text-slate-500 hover:text-slate-300"
518
+ class="flex w-full items-center gap-1.5 text-start text-[11px] font-semibold uppercase tracking-wide text-dimmed hover:text-toned"
519
519
  @click="showKubeOverride = !showKubeOverride"
520
520
  >
521
521
  <UIcon
@@ -528,7 +528,7 @@ function toastRemoved() {
528
528
  </UBadge>
529
529
  </button>
530
530
  <div v-if="showKubeOverride" class="mt-2 space-y-2">
531
- <p class="text-[11px] text-slate-500">
531
+ <p class="text-[11px] text-dimmed">
532
532
  {{ t('settings.infrastructure.handler.personalOverrideHint') }}
533
533
  </p>
534
534
  <p v-if="kubeUserHandler" class="flex justify-end">
@@ -558,11 +558,13 @@ function toastRemoved() {
558
558
  </section>
559
559
 
560
560
  <!-- docker-compose: handled by the runtime's local Docker capability, no connection. -->
561
- <section class="space-y-1 rounded-lg border border-slate-700 bg-slate-900/40 p-3">
562
- <h3 class="text-sm font-semibold text-slate-200">
561
+ <section class="space-y-1 rounded-lg border border-muted bg-default/40 p-3">
562
+ <h3 class="text-sm font-semibold text-default">
563
563
  {{ t('inspector.testConfig.provisionTypes.docker-compose') }}
564
564
  </h3>
565
- <p class="text-[12px] text-slate-400">{{ t('settings.infrastructure.dockerComposeInfo') }}</p>
565
+ <p class="text-[12px] text-muted">
566
+ {{ t('settings.infrastructure.dockerComposeInfo') }}
567
+ </p>
566
568
  </section>
567
569
 
568
570
  <!-- cloudflare: a self-contained section (see the component's own note on why it is not
@@ -570,15 +572,15 @@ function toastRemoved() {
570
572
  <CloudflareHandlerSection />
571
573
 
572
574
  <!-- custom: the catalog editor + a remote-custom HTTP handler per custom type. -->
573
- <section class="space-y-3 rounded-lg border border-slate-700 bg-slate-900/40 p-3">
574
- <h3 class="text-sm font-semibold text-slate-200">
575
+ <section class="space-y-3 rounded-lg border border-muted bg-default/40 p-3">
576
+ <h3 class="text-sm font-semibold text-default">
575
577
  {{ t('inspector.testConfig.provisionTypes.custom') }}
576
578
  </h3>
577
579
 
578
580
  <CustomManifestTypeEditor />
579
581
 
580
- <div v-if="infra.customTypes.length" class="space-y-2 border-t border-slate-800 pt-3">
581
- <p class="text-[11px] font-semibold uppercase tracking-wide text-slate-400">
582
+ <div v-if="infra.customTypes.length" class="space-y-2 border-t border-default pt-3">
583
+ <p class="text-[11px] font-semibold uppercase tracking-wide text-muted">
582
584
  {{ t('settings.infrastructure.handler.customHandlerTitle') }}
583
585
  </p>
584
586
  <UFormField :label="t('settings.infrastructure.handler.customTypeLabel')">
@@ -595,9 +597,9 @@ function toastRemoved() {
595
597
  </UFormField>
596
598
  <p
597
599
  v-if="customHandler"
598
- class="flex items-center justify-between gap-2 text-[12px] text-slate-300"
600
+ class="flex items-center justify-between gap-2 text-[12px] text-toned"
599
601
  >
600
- <span class="text-emerald-400">{{
602
+ <span class="text-app-success-400">{{
601
603
  t('settings.infrastructure.handler.customConnected')
602
604
  }}</span>
603
605
  <UButton
@@ -625,7 +627,7 @@ function toastRemoved() {
625
627
  </div>
626
628
  </section>
627
629
  </div>
628
- <p v-else-if="infra.available === null" class="text-xs text-slate-500">
630
+ <p v-else-if="infra.available === null" class="text-xs text-dimmed">
629
631
  {{ t('settings.infrastructure.handler.loading') }}
630
632
  </p>
631
633
  </template>
@@ -267,11 +267,11 @@ const labelKey = computed(() =>
267
267
  </script>
268
268
 
269
269
  <template>
270
- <section v-if="cap" class="space-y-2 rounded-lg border border-slate-700 bg-slate-900/40 p-3">
271
- <h3 class="text-sm font-semibold text-slate-200">{{ t(labelKey) }}</h3>
270
+ <section v-if="cap" class="space-y-2 rounded-lg border border-muted bg-default/40 p-3">
271
+ <h3 class="text-sm font-semibold text-default">{{ t(labelKey) }}</h3>
272
272
 
273
273
  <!-- Off-local: the active backend is deployment/registration-driven; state it plainly. -->
274
- <p v-if="!writable" class="text-sm text-slate-300" :data-testid="`${axis}-backend-active`">
274
+ <p v-if="!writable" class="text-sm text-toned" :data-testid="`${axis}-backend-active`">
275
275
  {{ t('settings.infrastructure.active', { backend: activeLabel }) }}
276
276
  </p>
277
277
 
@@ -287,13 +287,13 @@ const labelKey = computed(() =>
287
287
  @change="select(item.id)"
288
288
  />
289
289
  <span class="min-w-0">
290
- <span class="text-sm text-slate-200">{{ item.label }}</span>
291
- <span v-if="item.desc" class="block text-[11px] text-slate-400">{{ item.desc }}</span>
290
+ <span class="text-sm text-default">{{ item.label }}</span>
291
+ <span v-if="item.desc" class="block text-[11px] text-muted">{{ item.desc }}</span>
292
292
  </span>
293
293
  </label>
294
294
  </div>
295
295
 
296
- <p v-if="showRegisterHint" class="text-[11px] text-amber-300/80">
296
+ <p v-if="showRegisterHint" class="text-[11px] text-app-warning-300/80">
297
297
  {{ t('settings.infrastructure.registerHint') }}
298
298
  </p>
299
299
 
@@ -174,8 +174,8 @@ watch([tabs, () => store.loaded], () => {
174
174
  <InfrastructureBackendPicker axis="execution" />
175
175
  <!-- Local mode: the warm-pool + checkout reuse ARE the host agent-container
176
176
  runtime, so they live here rather than in a separate menu. -->
177
- <section v-if="isLocal" class="border-t border-slate-800 pt-4">
178
- <h3 class="mb-3 text-sm font-semibold text-slate-200">
177
+ <section v-if="isLocal" class="border-t border-default pt-4">
178
+ <h3 class="mb-3 text-sm font-semibold text-default">
179
179
  {{ t('settings.localMode.title') }}
180
180
  </h3>
181
181
  <LocalContainerPoolSettings />
@@ -191,13 +191,13 @@ watch([tabs, () => store.loaded], () => {
191
191
  <!-- The Tester's environment is driven by each SERVICE's declared provision type
192
192
  (the "what/where"); the workspace configures HOW each type is handled here —
193
193
  the engine + connection per provision type, plus the custom-type catalog. -->
194
- <div class="border-t border-slate-800 pt-4">
194
+ <div class="border-t border-default pt-4">
195
195
  <InfraHandlersConfigurator />
196
196
  </div>
197
197
  <!-- The guided per-SERVICE Compose flow (formerly the standalone "Environment
198
198
  setup" sidebar entry). Last, because it fills in one service's recipe on
199
199
  top of the workspace-wide choices above. -->
200
- <div class="border-t border-slate-800 pt-4">
200
+ <div class="border-t border-default pt-4">
201
201
  <ComposeEnvironmentSetupSection />
202
202
  </div>
203
203
  </div>
@@ -213,7 +213,7 @@ watch([tabs, () => store.loaded], () => {
213
213
  </template>
214
214
  </UTabs>
215
215
 
216
- <p v-else class="px-1 py-6 text-center text-sm text-slate-500">
216
+ <p v-else class="px-1 py-6 text-center text-sm text-dimmed">
217
217
  {{ t('settings.providerConnection.noneAvailable') }}
218
218
  </p>
219
219
  </div>
@@ -201,13 +201,13 @@ async function checkSetup(source: TaskSourceKind) {
201
201
  <!-- 1. Filing tracker ----------------------------------------------------->
202
202
  <section class="space-y-3">
203
203
  <div>
204
- <h3 class="text-sm font-semibold text-slate-200">
204
+ <h3 class="text-sm font-semibold text-default">
205
205
  {{ t('settings.issueTracker.filing.heading') }}
206
206
  </h3>
207
- <p class="mt-1 text-[11px] text-slate-400">
207
+ <p class="mt-1 text-[11px] text-muted">
208
208
  <i18n-t keypath="settings.issueTracker.filing.description" tag="span" scope="global">
209
209
  <template #none>
210
- <span class="text-slate-300">{{ t('settings.issueTracker.filing.none') }}</span>
210
+ <span class="text-toned">{{ t('settings.issueTracker.filing.none') }}</span>
211
211
  </template>
212
212
  </i18n-t>
213
213
  </p>
@@ -269,7 +269,10 @@ async function checkSetup(source: TaskSourceKind) {
269
269
  </div>
270
270
 
271
271
  <!-- Inline readiness hints for the picked tracker. -->
272
- <p v-if="trackerKind === 'github' && !githubAvailable" class="text-[11px] text-amber-400">
272
+ <p
273
+ v-if="trackerKind === 'github' && !githubAvailable"
274
+ class="text-[11px] text-app-warning-400"
275
+ >
273
276
  <i18n-t keypath="settings.issueTracker.filing.githubHint" tag="span" scope="global">
274
277
  <template #link>
275
278
  <button class="underline" @click="ui.openGitHub()">
@@ -278,7 +281,10 @@ async function checkSetup(source: TaskSourceKind) {
278
281
  </template>
279
282
  </i18n-t>
280
283
  </p>
281
- <p v-else-if="trackerKind === 'jira' && !jiraConnected" class="text-[11px] text-amber-400">
284
+ <p
285
+ v-else-if="trackerKind === 'jira' && !jiraConnected"
286
+ class="text-[11px] text-app-warning-400"
287
+ >
282
288
  <i18n-t keypath="settings.issueTracker.filing.jiraHint" tag="span" scope="global">
283
289
  <template #link>
284
290
  <button class="underline" @click="ui.openTaskConnect('jira')">
@@ -289,7 +295,7 @@ async function checkSetup(source: TaskSourceKind) {
289
295
  </p>
290
296
  <p
291
297
  v-else-if="trackerKind === 'linear' && !linearConnected"
292
- class="text-[11px] text-amber-400"
298
+ class="text-[11px] text-app-warning-400"
293
299
  >
294
300
  <i18n-t keypath="settings.issueTracker.filing.linearHint" tag="span" scope="global">
295
301
  <template #link>
@@ -307,7 +313,7 @@ async function checkSetup(source: TaskSourceKind) {
307
313
  >
308
314
  <UInput v-model="jiraProjectKey" placeholder="ENG" size="sm" class="w-full" />
309
315
  <template #help>
310
- <span class="text-[11px] text-slate-500">
316
+ <span class="text-[11px] text-dimmed">
311
317
  {{ t('settings.issueTracker.filing.jiraProjectKeyHelp') }}
312
318
  </span>
313
319
  </template>
@@ -334,7 +340,7 @@ async function checkSetup(source: TaskSourceKind) {
334
340
  />
335
341
  <UInput v-else v-model="linearTeamId" placeholder="team_…" size="sm" class="w-full" />
336
342
  <template #help>
337
- <span class="text-[11px] text-slate-500">
343
+ <span class="text-[11px] text-dimmed">
338
344
  {{ t('settings.issueTracker.filing.linearTeamIdHelp') }}
339
345
  </span>
340
346
  </template>
@@ -344,10 +350,10 @@ async function checkSetup(source: TaskSourceKind) {
344
350
  <!-- 2. Linking sources ---------------------------------------------------->
345
351
  <section class="space-y-3">
346
352
  <div>
347
- <h3 class="text-sm font-semibold text-slate-200">
353
+ <h3 class="text-sm font-semibold text-default">
348
354
  {{ t('settings.issueTracker.linking.heading') }}
349
355
  </h3>
350
- <p class="mt-1 text-[11px] text-slate-400">
356
+ <p class="mt-1 text-[11px] text-muted">
351
357
  {{ t('settings.issueTracker.linking.description') }}
352
358
  </p>
353
359
  </div>
@@ -364,7 +370,7 @@ async function checkSetup(source: TaskSourceKind) {
364
370
  @remedy="openRemedy(source)"
365
371
  />
366
372
 
367
- <p v-if="tasks.sources.length === 0" class="text-[11px] text-slate-500">
373
+ <p v-if="tasks.sources.length === 0" class="text-[11px] text-dimmed">
368
374
  {{ t('settings.issueTracker.linking.none') }}
369
375
  </p>
370
376
  </section>
@@ -372,49 +378,49 @@ async function checkSetup(source: TaskSourceKind) {
372
378
  <!-- 3. Writeback ---------------------------------------------------------->
373
379
  <section class="space-y-3">
374
380
  <div>
375
- <h3 class="text-sm font-semibold text-slate-200">
381
+ <h3 class="text-sm font-semibold text-default">
376
382
  {{ t('settings.issueTracker.writeback.heading') }}
377
383
  </h3>
378
- <p class="mt-1 text-[11px] text-slate-400">
384
+ <p class="mt-1 text-[11px] text-muted">
379
385
  <i18n-t keypath="settings.issueTracker.writeback.description" tag="span" scope="global">
380
386
  <template #done>
381
- <span class="text-slate-300">{{ t('settings.issueTracker.writeback.done') }}</span>
387
+ <span class="text-toned">{{ t('settings.issueTracker.writeback.done') }}</span>
382
388
  </template>
383
389
  </i18n-t>
384
390
  </p>
385
391
  </div>
386
392
 
387
- <label class="flex items-start gap-3 rounded-lg border border-slate-700 bg-slate-800/40 p-3">
393
+ <label class="flex items-start gap-3 rounded-lg border border-muted bg-elevated/40 p-3">
388
394
  <USwitch v-model="commentOnPrOpen" />
389
395
  <span class="text-sm">
390
- <span class="block text-slate-200">
396
+ <span class="block text-default">
391
397
  {{ t('settings.issueTracker.writeback.commentOnOpen.label') }}
392
398
  </span>
393
- <span class="block text-xs text-slate-500">
399
+ <span class="block text-xs text-dimmed">
394
400
  {{ t('settings.issueTracker.writeback.commentOnOpen.help') }}
395
401
  </span>
396
402
  </span>
397
403
  </label>
398
404
 
399
- <label class="flex items-start gap-3 rounded-lg border border-slate-700 bg-slate-800/40 p-3">
405
+ <label class="flex items-start gap-3 rounded-lg border border-muted bg-elevated/40 p-3">
400
406
  <USwitch v-model="resolveOnMerge" />
401
407
  <span class="text-sm">
402
- <span class="block text-slate-200">
408
+ <span class="block text-default">
403
409
  {{ t('settings.issueTracker.writeback.resolveOnMerge.label') }}
404
410
  </span>
405
- <span class="block text-xs text-slate-500">
411
+ <span class="block text-xs text-dimmed">
406
412
  {{ t('settings.issueTracker.writeback.resolveOnMerge.help') }}
407
413
  </span>
408
414
  </span>
409
415
  </label>
410
416
 
411
- <label class="flex items-start gap-3 rounded-lg border border-slate-700 bg-slate-800/40 p-3">
417
+ <label class="flex items-start gap-3 rounded-lg border border-muted bg-elevated/40 p-3">
412
418
  <USwitch v-model="questionsOnPark" />
413
419
  <span class="text-sm">
414
- <span class="block text-slate-200">
420
+ <span class="block text-default">
415
421
  {{ t('settings.issueTracker.writeback.questionsOnPark.label') }}
416
422
  </span>
417
- <span class="block text-xs text-slate-500">
423
+ <span class="block text-xs text-dimmed">
418
424
  {{ t('settings.issueTracker.writeback.questionsOnPark.help') }}
419
425
  </span>
420
426
  </span>
@@ -368,8 +368,8 @@ async function copyAutoSetupCommand() {
368
368
  </script>
369
369
 
370
370
  <template>
371
- <div class="rounded-lg border border-dashed border-slate-700 p-3 space-y-3">
372
- <p class="text-[11px] font-semibold uppercase tracking-wide text-slate-400">
371
+ <div class="rounded-lg border border-dashed border-muted p-3 space-y-3">
372
+ <p class="text-[11px] font-semibold uppercase tracking-wide text-muted">
373
373
  {{
374
374
  connected
375
375
  ? t('settings.providerConnection.form.updateConfiguration')
@@ -379,7 +379,7 @@ async function copyAutoSetupCommand() {
379
379
 
380
380
  <p
381
381
  v-if="engine === 'local-k3s'"
382
- class="rounded-md border border-sky-500/30 bg-sky-500/10 p-2 text-[11px] text-sky-200"
382
+ class="rounded-md border border-app-info-500/30 bg-app-info-500/10 p-2 text-[11px] text-app-info-200"
383
383
  >
384
384
  {{ t('settings.infrastructure.kubernetesEngine.localK3sHint') }}
385
385
  </p>
@@ -389,18 +389,18 @@ async function copyAutoSetupCommand() {
389
389
  (the token is pasted, never in the link). -->
390
390
  <div
391
391
  v-if="engine === 'local-k3s'"
392
- class="rounded-md border border-slate-700 bg-slate-900/40 p-2 space-y-1.5"
392
+ class="rounded-md border border-muted bg-default/40 p-2 space-y-1.5"
393
393
  >
394
- <p class="flex items-center gap-1.5 text-[11px] font-semibold text-slate-300">
395
- <UIcon name="i-lucide-wand-2" class="h-3.5 w-3.5 text-slate-400" />
394
+ <p class="flex items-center gap-1.5 text-[11px] font-semibold text-toned">
395
+ <UIcon name="i-lucide-wand-2" class="h-3.5 w-3.5 text-muted" />
396
396
  {{ t('settings.infrastructure.kubernetesEngine.autoSetup.title') }}
397
397
  </p>
398
- <p class="text-[11px] text-slate-400">
398
+ <p class="text-[11px] text-muted">
399
399
  {{ t('settings.infrastructure.kubernetesEngine.autoSetup.description') }}
400
400
  </p>
401
401
  <div class="flex items-center gap-1.5">
402
402
  <code
403
- class="flex-1 rounded bg-slate-950 px-2 py-1 font-mono text-[11px] text-slate-200 select-all"
403
+ class="flex-1 rounded bg-app-950 px-2 py-1 font-mono text-[11px] text-default select-all"
404
404
  >
405
405
  {{ AUTO_SETUP_COMMAND }}
406
406
  </code>
@@ -438,7 +438,7 @@ async function copyAutoSetupCommand() {
438
438
  "
439
439
  >
440
440
  <template v-if="tokenStored" #hint>
441
- <span class="inline-flex items-center gap-1 text-[11px] text-emerald-400">
441
+ <span class="inline-flex items-center gap-1 text-[11px] text-app-success-400">
442
442
  <UIcon name="i-lucide-check-circle-2" class="h-3.5 w-3.5" />
443
443
  {{ t('settings.infrastructure.kubernetesEngine.tokenSaved') }}
444
444
  </span>
@@ -458,7 +458,7 @@ async function copyAutoSetupCommand() {
458
458
  <p
459
459
  v-if="tokenProblem"
460
460
  class="mt-1 text-[11px]"
461
- :class="tokenBlocking ? 'text-rose-400' : 'text-amber-400'"
461
+ :class="tokenBlocking ? 'text-app-error-400' : 'text-app-warning-400'"
462
462
  data-testid="service-account-token-problem"
463
463
  >
464
464
  {{ tokenProblem }}
@@ -600,7 +600,7 @@ async function copyAutoSetupCommand() {
600
600
  </div>
601
601
 
602
602
  <div class="flex items-center justify-end gap-3">
603
- <p v-if="connectBlockedReason" class="flex-1 text-left text-xs text-rose-400">
603
+ <p v-if="connectBlockedReason" class="flex-1 text-left text-xs text-app-error-400">
604
604
  {{ connectBlockedReason }}
605
605
  </p>
606
606
  <UButton
@@ -263,8 +263,8 @@ function optional(label: string): string {
263
263
  </script>
264
264
 
265
265
  <template>
266
- <div class="rounded-lg border border-dashed border-slate-700 p-3 space-y-3">
267
- <p class="text-[11px] font-semibold uppercase tracking-wide text-slate-400">
266
+ <div class="rounded-lg border border-dashed border-muted p-3 space-y-3">
267
+ <p class="text-[11px] font-semibold uppercase tracking-wide text-muted">
268
268
  {{
269
269
  connection?.kind === 'kubernetes'
270
270
  ? t('settings.providerConnection.form.updateConfiguration')
@@ -296,7 +296,7 @@ function optional(label: string): string {
296
296
  <p
297
297
  v-if="tokenProblem"
298
298
  class="mt-1 text-[11px]"
299
- :class="tokenBlocking ? 'text-rose-400' : 'text-amber-400'"
299
+ :class="tokenBlocking ? 'text-app-error-400' : 'text-app-warning-400'"
300
300
  data-testid="service-account-token-problem"
301
301
  >
302
302
  {{ tokenProblem }}
@@ -454,7 +454,7 @@ function optional(label: string): string {
454
454
  <ConnectionWarnings :warnings="testResult?.warnings" />
455
455
 
456
456
  <div class="flex items-center justify-end gap-3">
457
- <p v-if="connectBlockedReason" class="flex-1 text-left text-xs text-rose-400">
457
+ <p v-if="connectBlockedReason" class="flex-1 text-left text-xs text-app-error-400">
458
458
  {{ connectBlockedReason }}
459
459
  </p>
460
460
  <UButton
@@ -75,12 +75,7 @@ async function save() {
75
75
 
76
76
  <template>
77
77
  <div class="space-y-6" data-testid="local-container-pool-settings">
78
- <i18n-t
79
- keypath="settings.localMode.intro"
80
- tag="p"
81
- class="text-xs text-slate-400"
82
- scope="global"
83
- >
78
+ <i18n-t keypath="settings.localMode.intro" tag="p" class="text-xs text-muted" scope="global">
84
79
  <template #poolVars>
85
80
  <code>LOCAL_POOL_*</code>
86
81
  </template>
@@ -92,13 +87,13 @@ async function save() {
92
87
  <!-- Warm container pool -->
93
88
  <section class="space-y-3">
94
89
  <div>
95
- <h4 class="text-sm font-semibold text-slate-200">
90
+ <h4 class="text-sm font-semibold text-default">
96
91
  {{ t('settings.localMode.pool.heading') }}
97
92
  </h4>
98
93
  <i18n-t
99
94
  keypath="settings.localMode.pool.description"
100
95
  tag="p"
101
- class="text-[11px] text-slate-400"
96
+ class="text-[11px] text-muted"
102
97
  scope="global"
103
98
  >
104
99
  <template #appleContainer>
@@ -141,12 +136,12 @@ async function save() {
141
136
  </section>
142
137
 
143
138
  <!-- Checkout reuse -->
144
- <section class="space-y-3 border-t border-slate-800 pt-6">
139
+ <section class="space-y-3 border-t border-default pt-6">
145
140
  <div>
146
- <h4 class="text-sm font-semibold text-slate-200">
141
+ <h4 class="text-sm font-semibold text-default">
147
142
  {{ t('settings.localMode.checkout.heading') }}
148
143
  </h4>
149
- <p class="text-[11px] text-slate-400">
144
+ <p class="text-[11px] text-muted">
150
145
  {{ t('settings.localMode.checkout.description') }}
151
146
  </p>
152
147
  </div>
@@ -279,13 +279,13 @@ async function remove(p: LocalRunner) {
279
279
  </template>
280
280
  <template #body>
281
281
  <div class="space-y-4">
282
- <p class="text-xs text-slate-400">
282
+ <p class="text-xs text-muted">
283
283
  <i18n-t keypath="settings.localModelEndpoints.intro" tag="span" scope="global">
284
284
  <template #ownMachine>
285
285
  <strong>{{ t('settings.localModelEndpoints.introOwnMachine') }}</strong>
286
286
  </template>
287
287
  <template #justForYou>
288
- <span class="text-slate-300">{{
288
+ <span class="text-toned">{{
289
289
  t('settings.localModelEndpoints.introJustForYou')
290
290
  }}</span>
291
291
  </template>
@@ -296,12 +296,12 @@ async function remove(p: LocalRunner) {
296
296
  <div
297
297
  v-for="e in store.endpoints"
298
298
  :key="e.provider"
299
- class="flex items-center justify-between rounded-md border border-slate-700 bg-slate-900/50 px-3 py-2 text-sm"
299
+ class="flex items-center justify-between rounded-md border border-muted bg-default/50 px-3 py-2 text-sm"
300
300
  >
301
301
  <div>
302
- <span class="font-medium text-slate-200">{{ e.label }}</span>
303
- <span class="ms-2 text-xs text-slate-500">{{ LOCAL_RUNNER_LABELS[e.provider] }}</span>
304
- <div class="text-[11px] text-slate-500">
302
+ <span class="font-medium text-default">{{ e.label }}</span>
303
+ <span class="ms-2 text-xs text-dimmed">{{ LOCAL_RUNNER_LABELS[e.provider] }}</span>
304
+ <div class="text-[11px] text-dimmed">
305
305
  {{ e.baseUrl }} ·
306
306
  {{
307
307
  t(
@@ -316,14 +316,16 @@ async function remove(p: LocalRunner) {
316
316
  </div>
317
317
  <!-- A row whose URL the deployment no longer permits: its models are withheld
318
318
  from the picker, so this is the only place that can say why. -->
319
- <div v-if="e.urlBlockedReason" class="mt-1 text-[11px] text-amber-400">
319
+ <div v-if="e.urlBlockedReason" class="mt-1 text-[11px] text-app-warning-400">
320
320
  {{ t('settings.localModelEndpoints.blocked') }}
321
- <span class="block text-amber-300/70">{{ urlReasonText(e.urlBlockedReason) }}</span>
321
+ <span class="block text-app-warning-300/70">{{
322
+ urlReasonText(e.urlBlockedReason)
323
+ }}</span>
322
324
  </div>
323
325
  <!-- Part of the stored model list could not be read and was discarded. Without this
324
326
  the shortened list reads exactly like a runner nothing was ever enabled on, and
325
327
  only one of those is fixed by re-ticking. -->
326
- <div v-if="e.unreadableModels" class="mt-1 text-[11px] text-amber-400">
328
+ <div v-if="e.unreadableModels" class="mt-1 text-[11px] text-app-warning-400">
327
329
  {{ t('settings.localModelEndpoints.modelsDiscarded') }}
328
330
  </div>
329
331
  </div>
@@ -349,8 +351,8 @@ async function remove(p: LocalRunner) {
349
351
  </div>
350
352
 
351
353
  <!-- add / edit form -->
352
- <div class="rounded-lg border border-dashed border-slate-700 p-3 space-y-3">
353
- <p class="text-[11px] font-semibold uppercase tracking-wide text-slate-400">
354
+ <div class="rounded-lg border border-dashed border-muted p-3 space-y-3">
355
+ <p class="text-[11px] font-semibold uppercase tracking-wide text-muted">
354
356
  {{
355
357
  existing
356
358
  ? t('settings.localModelEndpoints.editRunner')
@@ -411,13 +413,13 @@ async function remove(p: LocalRunner) {
411
413
  >
412
414
  {{ t('settings.localModelEndpoints.testConnection') }}
413
415
  </UButton>
414
- <span v-if="testError" class="text-xs text-rose-400">
416
+ <span v-if="testError" class="text-xs text-app-error-400">
415
417
  {{ testError }}
416
- <span v-if="testErrorDetail" class="block text-[11px] text-rose-300/70">{{
418
+ <span v-if="testErrorDetail" class="block text-[11px] text-app-error-300/70">{{
417
419
  testErrorDetail
418
420
  }}</span>
419
421
  </span>
420
- <span v-else-if="tested && discovered.length" class="text-xs text-emerald-400">
422
+ <span v-else-if="tested && discovered.length" class="text-xs text-app-success-400">
421
423
  {{
422
424
  t(
423
425
  'settings.localModelEndpoints.reachable',
@@ -426,22 +428,22 @@ async function remove(p: LocalRunner) {
426
428
  )
427
429
  }}
428
430
  </span>
429
- <span v-else-if="tested" class="text-xs text-slate-500">{{
431
+ <span v-else-if="tested" class="text-xs text-dimmed">{{
430
432
  t('settings.localModelEndpoints.noModels')
431
433
  }}</span>
432
434
  </div>
433
435
 
434
436
  <!-- discovered models multi-select, each with its declared image support -->
435
437
  <div v-if="discovered.length" class="space-y-1.5">
436
- <span class="block text-[10px] uppercase tracking-wide text-slate-500">
438
+ <span class="block text-[10px] uppercase tracking-wide text-dimmed">
437
439
  {{ t('settings.localModelEndpoints.enableModels') }}
438
440
  </span>
439
- <p class="text-[11px] text-slate-500">
441
+ <p class="text-[11px] text-dimmed">
440
442
  {{ t('settings.localModelEndpoints.imageInputHint') }}
441
443
  </p>
442
444
  <div class="space-y-1.5">
443
445
  <div v-for="m in discovered" :key="m" class="flex items-center gap-2">
444
- <label class="flex min-w-0 flex-1 items-center gap-2 text-sm text-slate-300">
446
+ <label class="flex min-w-0 flex-1 items-center gap-2 text-sm text-toned">
445
447
  <UCheckbox
446
448
  :model-value="selected.includes(m)"
447
449
  @update:model-value="