@cat-factory/app 0.302.2 → 0.303.1

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 +99 -14
  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 +26 -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 +10 -9
@@ -64,9 +64,9 @@ const supersededLabel = computed(() => {
64
64
 
65
65
  /** Cool→hot bar colour by severity (low = sky, mid = amber, high = rose). */
66
66
  function barClass(n: number): string {
67
- if (n >= 0.66) return 'bg-rose-500'
68
- if (n >= 0.33) return 'bg-amber-500'
69
- return 'bg-sky-500'
67
+ if (n >= 0.66) return 'bg-app-error-500'
68
+ if (n >= 0.33) return 'bg-app-warning-500'
69
+ return 'bg-app-info-500'
70
70
  }
71
71
  </script>
72
72
 
@@ -78,18 +78,18 @@ function barClass(n: number): string {
78
78
  icon="i-lucide-gauge"
79
79
  default-open
80
80
  >
81
- <div class="space-y-1.5 rounded-lg border border-slate-800 bg-slate-900/40 p-2.5">
82
- <p class="text-[11px] text-slate-500" data-testid="task-estimate-basis">{{ basisLabel }}</p>
81
+ <div class="space-y-1.5 rounded-lg border border-default bg-default/40 p-2.5">
82
+ <p class="text-[11px] text-dimmed" data-testid="task-estimate-basis">{{ basisLabel }}</p>
83
83
  <p
84
84
  v-if="supersededLabel"
85
- class="text-[11px] text-slate-500"
85
+ class="text-[11px] text-dimmed"
86
86
  data-testid="task-estimate-superseded"
87
87
  >
88
88
  {{ supersededLabel }}
89
89
  </p>
90
90
  <div v-for="axis in AXES" :key="axis.key" class="flex items-center gap-2">
91
- <span class="w-20 shrink-0 text-xs text-slate-400">{{ axis.label }}</span>
92
- <div class="h-1.5 flex-1 overflow-hidden rounded-full bg-slate-800">
91
+ <span class="w-20 shrink-0 text-xs text-muted">{{ axis.label }}</span>
92
+ <div class="h-1.5 flex-1 overflow-hidden rounded-full bg-elevated">
93
93
  <div
94
94
  class="h-full rounded-full"
95
95
  :class="barClass(estimate[axis.key])"
@@ -98,15 +98,15 @@ function barClass(n: number): string {
98
98
  </div>
99
99
  <span
100
100
  v-if="axis.was"
101
- class="shrink-0 text-[11px] tabular-nums text-slate-500"
101
+ class="shrink-0 text-[11px] tabular-nums text-dimmed"
102
102
  :data-testid="`task-estimate-was-${axis.key}`"
103
103
  >{{ t('inspector.estimate.was', { value: axis.was }) }}</span
104
104
  >
105
- <span class="w-9 shrink-0 text-end text-xs tabular-nums text-slate-300">{{
105
+ <span class="w-9 shrink-0 text-end text-xs tabular-nums text-toned">{{
106
106
  n(estimate[axis.key], { key: 'percent' })
107
107
  }}</span>
108
108
  </div>
109
- <p v-if="estimate.rationale" class="pt-1 text-xs leading-relaxed text-slate-500">
109
+ <p v-if="estimate.rationale" class="pt-1 text-xs leading-relaxed text-dimmed">
110
110
  {{ estimate.rationale }}
111
111
  </p>
112
112
  </div>
@@ -306,7 +306,7 @@ async function mergePr() {
306
306
  <div v-if="instance">
307
307
  <div class="mb-1 flex items-center justify-between">
308
308
  <span class="flex min-w-0 items-center gap-1.5">
309
- <span class="truncate text-[11px] font-semibold uppercase tracking-wide text-slate-400">
309
+ <span class="truncate text-[11px] font-semibold uppercase tracking-wide text-muted">
310
310
  {{ instance.pipelineName }}
311
311
  </span>
312
312
  <!-- A sandboxed run looks exactly like one that simply has not reached the merge yet,
@@ -377,7 +377,7 @@ async function mergePr() {
377
377
  v-for="(s, i) in instance.steps"
378
378
  :key="i"
379
379
  class="rounded-md px-2 py-1"
380
- :class="i === instance.currentStep ? 'bg-slate-800/70' : ''"
380
+ :class="i === instance.currentStep ? 'bg-elevated/70' : ''"
381
381
  data-testid="run-step"
382
382
  :data-step-kind="s.agentKind"
383
383
  :data-step-state="s.state"
@@ -387,7 +387,7 @@ async function mergePr() {
387
387
  model, subtasks + the prose output when there is one). -->
388
388
  <button
389
389
  type="button"
390
- class="flex min-w-0 cursor-pointer items-center gap-2 text-start transition hover:text-white"
390
+ class="flex min-w-0 cursor-pointer items-center gap-2 text-start transition hover:text-highlighted"
391
391
  data-testid="run-step-open"
392
392
  :title="
393
393
  stepHasOutput(s)
@@ -401,24 +401,24 @@ async function mergePr() {
401
401
  class="h-4 w-4 shrink-0"
402
402
  :style="{ color: agentKindMeta(s.agentKind).color }"
403
403
  />
404
- <span class="truncate text-xs text-slate-200">
404
+ <span class="truncate text-xs text-default">
405
405
  {{ agentKindMeta(s.agentKind).label }}
406
406
  </span>
407
407
  <span
408
408
  v-if="isCompanionKind(s.agentKind)"
409
- class="shrink-0 rounded bg-slate-700/60 px-1 text-[9px] font-medium uppercase tracking-wide text-slate-300"
409
+ class="shrink-0 rounded bg-accented/60 px-1 text-[9px] font-medium uppercase tracking-wide text-toned"
410
410
  :title="t('inspector.execution.companionTooltip')"
411
411
  >
412
412
  {{ t('inspector.execution.companion') }}
413
413
  </span>
414
414
  <UIcon
415
415
  :name="stepHasOutput(s) ? 'i-lucide-book-open-text' : 'i-lucide-info'"
416
- class="h-3.5 w-3.5 shrink-0 text-slate-500"
416
+ class="h-3.5 w-3.5 shrink-0 text-dimmed"
417
417
  />
418
418
  </button>
419
419
  <span
420
420
  v-if="s.subtasks && s.subtasks.total > 0"
421
- class="ms-auto font-mono text-[10px] tabular-nums text-slate-300"
421
+ class="ms-auto font-mono text-[10px] tabular-nums text-toned"
422
422
  data-testid="run-subtasks"
423
423
  :title="
424
424
  s.subtasks.inProgress > 0
@@ -438,7 +438,7 @@ async function mergePr() {
438
438
  <span
439
439
  class="inline-flex items-center gap-1 text-[10px]"
440
440
  :class="[
441
- stepFailed(s) ? 'text-rose-400' : 'text-slate-400',
441
+ stepFailed(s) ? 'text-app-error-400' : 'text-muted',
442
442
  { 'ms-auto': !s.subtasks },
443
443
  ]"
444
444
  >
@@ -447,7 +447,7 @@ async function mergePr() {
447
447
  <!-- live elapsed clock: a running step counts up, a finished one shows total -->
448
448
  <span
449
449
  v-if="stepElapsed(s)"
450
- class="inline-flex items-center gap-0.5 font-mono tabular-nums text-slate-500"
450
+ class="inline-flex items-center gap-0.5 font-mono tabular-nums text-dimmed"
451
451
  :title="t('inspector.execution.elapsedTooltip')"
452
452
  >
453
453
  · {{ stepElapsed(s) }}
@@ -467,7 +467,7 @@ async function mergePr() {
467
467
  indicator, NOT a "Review" gate (the human is summoned only if needed) -->
468
468
  <span
469
469
  v-else-if="reviews.isBackground(s.agentKind, block.id) && reviewStage"
470
- class="inline-flex shrink-0 items-center gap-1 text-[10px] text-indigo-300"
470
+ class="inline-flex shrink-0 items-center gap-1 text-[10px] text-primary"
471
471
  >
472
472
  <UIcon name="i-lucide-loader-circle" class="h-3 w-3 animate-spin" />
473
473
  {{ reviewStageLabel }}
@@ -551,16 +551,16 @@ async function mergePr() {
551
551
  </div>
552
552
  <div
553
553
  v-if="s.subtasks && s.subtasks.total > 0"
554
- class="mt-1 ms-6 h-1 overflow-hidden rounded-full bg-slate-700/60"
554
+ class="mt-1 ms-6 h-1 overflow-hidden rounded-full bg-accented/60"
555
555
  >
556
556
  <div
557
- class="h-full rounded-full bg-indigo-400 transition-all duration-500"
557
+ class="h-full rounded-full bg-primary transition-all duration-500"
558
558
  :style="{ width: `${(s.subtasks.completed / s.subtasks.total) * 100}%` }"
559
559
  />
560
560
  </div>
561
561
  <div
562
562
  v-if="s.model"
563
- class="mt-0.5 flex items-center gap-1 ps-6 text-[10px] text-slate-500"
563
+ class="mt-0.5 flex items-center gap-1 ps-6 text-[10px] text-dimmed"
564
564
  :title="s.model"
565
565
  >
566
566
  <UIcon name="i-lucide-cpu" class="h-3 w-3" />
@@ -569,7 +569,7 @@ async function mergePr() {
569
569
  <!-- Prompt-fragment standards the library selected for this step. -->
570
570
  <div
571
571
  v-if="s.selectedFragmentIds && s.selectedFragmentIds.length"
572
- class="mt-0.5 flex flex-wrap items-center gap-1 ps-6 text-[10px] text-slate-500"
572
+ class="mt-0.5 flex flex-wrap items-center gap-1 ps-6 text-[10px] text-dimmed"
573
573
  :title="
574
574
  t('inspector.execution.fragmentsTooltip', {
575
575
  fragments: s.selectedFragmentIds.join(', '),
@@ -599,7 +599,7 @@ async function mergePr() {
599
599
  gateCompanionFor(s, runFailed)!.state === 'running' ? 'animate-spin' : '',
600
600
  ]"
601
601
  />
602
- <span class="text-slate-400">
602
+ <span class="text-muted">
603
603
  {{
604
604
  t('inspector.execution.companionOf', {
605
605
  label: agentKindMeta(gateCompanionFor(s, runFailed)!.kind).label,
@@ -641,7 +641,7 @@ async function mergePr() {
641
641
 
642
642
  <!-- Open PR: link straight to it on GitHub -->
643
643
  <div v-if="pr" class="space-y-2">
644
- <span class="text-[11px] font-semibold uppercase tracking-wide text-slate-400">
644
+ <span class="text-[11px] font-semibold uppercase tracking-wide text-muted">
645
645
  {{ t('inspector.execution.pullRequest') }}
646
646
  </span>
647
647
  <UButton
@@ -663,7 +663,7 @@ async function mergePr() {
663
663
  </UBadge>
664
664
  </span>
665
665
  </UButton>
666
- <p v-if="pr.branch" class="flex items-center gap-1 truncate text-[10px] text-slate-500">
666
+ <p v-if="pr.branch" class="flex items-center gap-1 truncate text-[10px] text-dimmed">
667
667
  <UIcon name="i-lucide-git-branch" class="h-3 w-3 shrink-0" />
668
668
  <span class="truncate" :title="pr.branch">{{ pr.branch }}</span>
669
669
  </p>
@@ -102,12 +102,12 @@ function revert() {
102
102
  </UButton>
103
103
  <p
104
104
  v-else-if="label"
105
- class="rounded-lg border border-slate-800 bg-slate-900/40 p-2.5 text-xs text-slate-300"
105
+ class="rounded-lg border border-default bg-default/40 p-2.5 text-xs text-toned"
106
106
  data-testid="inspector-review-target-link"
107
107
  >
108
108
  {{ label }}
109
109
  </p>
110
- <p v-if="focus" class="text-xs leading-relaxed text-slate-500">
110
+ <p v-if="focus" class="text-xs leading-relaxed text-dimmed">
111
111
  {{ t('inspector.reviewTarget.focus', { focus }) }}
112
112
  </p>
113
113
  <div data-testid="inspector-review-skills">
@@ -283,7 +283,7 @@ const technicalLabel = computed(() => {
283
283
  <!-- pipeline -->
284
284
  <div>
285
285
  <div class="mb-1 flex items-center justify-between">
286
- <span class="text-[11px] font-semibold uppercase tracking-wide text-slate-400">
286
+ <span class="text-[11px] font-semibold uppercase tracking-wide text-muted">
287
287
  {{ t('inspector.runSettings.pipeline') }}
288
288
  </span>
289
289
  <PipelinePicker
@@ -314,10 +314,10 @@ const technicalLabel = computed(() => {
314
314
  {{ selectedPipeline.name }}<UIcon name="i-lucide-x" class="ms-0.5 h-3 w-3" />
315
315
  </UBadge>
316
316
  </div>
317
- <div v-else class="text-[11px] text-slate-500">
317
+ <div v-else class="text-[11px] text-dimmed">
318
318
  {{ t('inspector.runSettings.pipelineEmpty') }}
319
319
  </div>
320
- <p class="mt-1 text-[11px] leading-snug text-slate-500">
320
+ <p class="mt-1 text-[11px] leading-snug text-dimmed">
321
321
  {{ t('inspector.runSettings.pipelineHint') }}
322
322
  </p>
323
323
  </div>
@@ -325,7 +325,7 @@ const technicalLabel = computed(() => {
325
325
  <!-- merge policy preset (advanced, or basic with an override already set) -->
326
326
  <div v-if="showOverrideField(uiMode.isAdvanced, block.riskPolicyId)">
327
327
  <div class="mb-1 flex items-center justify-between">
328
- <span class="text-[11px] font-semibold uppercase tracking-wide text-slate-400">
328
+ <span class="text-[11px] font-semibold uppercase tracking-wide text-muted">
329
329
  {{ t('inspector.runSettings.mergePolicy') }}
330
330
  </span>
331
331
  <RiskPolicyPicker
@@ -347,7 +347,7 @@ const technicalLabel = computed(() => {
347
347
  </template>
348
348
  </RiskPolicyPicker>
349
349
  </div>
350
- <div v-if="selectedPreset" class="text-[11px] text-slate-400">
350
+ <div v-if="selectedPreset" class="text-[11px] text-muted">
351
351
  <i18n-t
352
352
  v-if="selectedPreset.autoMergeEnabled"
353
353
  keypath="inspector.runSettings.riskPolicyDetail"
@@ -355,7 +355,7 @@ const technicalLabel = computed(() => {
355
355
  scope="global"
356
356
  >
357
357
  <template #name>
358
- <span class="text-slate-300">{{ selectedPreset.name }}</span>
358
+ <span class="text-toned">{{ selectedPreset.name }}</span>
359
359
  </template>
360
360
  <template #risk>{{ n(selectedPreset.maxRisk, { key: 'percent' }) }}</template>
361
361
  <template #impact>{{ n(selectedPreset.maxImpact, { key: 'percent' }) }}</template>
@@ -365,18 +365,18 @@ const technicalLabel = computed(() => {
365
365
  <!-- Auto-merge off: the ceilings never apply, so quoting them would misdescribe it. -->
366
366
  <i18n-t v-else keypath="inspector.runSettings.riskPolicyManual" tag="span" scope="global">
367
367
  <template #name>
368
- <span class="text-slate-300">{{ selectedPreset.name }}</span>
368
+ <span class="text-toned">{{ selectedPreset.name }}</span>
369
369
  </template>
370
370
  <template #attempts>{{ selectedPreset.ciMaxAttempts }}</template>
371
371
  </i18n-t>
372
- <span v-if="!block.riskPolicyId" class="text-slate-500">{{
372
+ <span v-if="!block.riskPolicyId" class="text-dimmed">{{
373
373
  t('inspector.runSettings.workspaceDefaultParen')
374
374
  }}</span>
375
375
  </div>
376
- <div v-else class="text-[11px] text-slate-500">
376
+ <div v-else class="text-[11px] text-dimmed">
377
377
  {{ t('inspector.runSettings.riskPolicyEmpty') }}
378
378
  </div>
379
- <p class="mt-1 text-[11px] leading-snug text-slate-500">
379
+ <p class="mt-1 text-[11px] leading-snug text-dimmed">
380
380
  {{ t('inspector.runSettings.mergePolicyHint') }}
381
381
  </p>
382
382
  </div>
@@ -384,7 +384,7 @@ const technicalLabel = computed(() => {
384
384
  <!-- model preset (advanced, or basic with an override already set) -->
385
385
  <div v-if="showOverrideField(uiMode.isAdvanced, block.modelPresetId)">
386
386
  <div class="mb-1 flex items-center justify-between">
387
- <span class="text-[11px] font-semibold uppercase tracking-wide text-slate-400">
387
+ <span class="text-[11px] font-semibold uppercase tracking-wide text-muted">
388
388
  {{ t('inspector.runSettings.modelPreset') }}
389
389
  </span>
390
390
  <UDropdownMenu :items="modelPresetMenu">
@@ -397,8 +397,8 @@ const technicalLabel = computed(() => {
397
397
  />
398
398
  </UDropdownMenu>
399
399
  </div>
400
- <div v-if="selectedModelPreset" class="text-[11px] text-slate-400">
401
- <span class="text-slate-300">{{ selectedModelPreset.name }}</span>
400
+ <div v-if="selectedModelPreset" class="text-[11px] text-muted">
401
+ <span class="text-toned">{{ selectedModelPreset.name }}</span>
402
402
  {{ t('inspector.runSettings.modelPresetBase', { model: selectedModelPreset.baseModelId })
403
403
  }}<span v-if="Object.keys(selectedModelPreset.overrides).length">{{
404
404
  t(
@@ -408,39 +408,39 @@ const technicalLabel = computed(() => {
408
408
  )
409
409
  }}</span
410
410
  >.
411
- <span v-if="!block.modelPresetId" class="text-slate-500">{{
411
+ <span v-if="!block.modelPresetId" class="text-dimmed">{{
412
412
  t('inspector.runSettings.workspaceDefaultParen')
413
413
  }}</span>
414
414
  </div>
415
- <div v-else class="text-[11px] text-slate-500">
415
+ <div v-else class="text-[11px] text-dimmed">
416
416
  {{ t('inspector.runSettings.modelPresetEmpty') }}
417
417
  </div>
418
418
  <div
419
419
  v-if="unavailablePresetModels.length"
420
- class="mt-2 rounded-md border border-amber-500/40 bg-amber-950/40 p-2 text-[11px] text-amber-200/90"
420
+ class="mt-2 rounded-md border border-app-warning-500/40 bg-app-warning-950/40 p-2 text-[11px] text-app-warning-200/90"
421
421
  >
422
422
  <div class="flex items-start gap-1.5">
423
423
  <UIcon
424
424
  name="i-lucide-triangle-alert"
425
- class="mt-0.5 h-3.5 w-3.5 shrink-0 text-amber-400"
425
+ class="mt-0.5 h-3.5 w-3.5 shrink-0 text-app-warning-400"
426
426
  />
427
427
  <div class="min-w-0">
428
428
  <p>
429
429
  <i18n-t keypath="inspector.runSettings.unavailableModels" tag="span" scope="global">
430
430
  <template #models>
431
- <span class="text-amber-100">{{ unavailablePresetModels.join(', ') }}</span>
431
+ <span class="text-app-warning-100">{{ unavailablePresetModels.join(', ') }}</span>
432
432
  </template>
433
433
  </i18n-t>
434
434
  </p>
435
435
  <div class="mt-1.5 flex flex-wrap gap-2">
436
436
  <button
437
- class="font-medium text-amber-100 underline-offset-2 hover:underline"
437
+ class="font-medium text-app-warning-100 underline-offset-2 hover:underline"
438
438
  @click="ui.openModelConfig()"
439
439
  >
440
440
  {{ t('inspector.runSettings.editPresets') }}
441
441
  </button>
442
442
  <button
443
- class="font-medium text-amber-100 underline-offset-2 hover:underline"
443
+ class="font-medium text-app-warning-100 underline-offset-2 hover:underline"
444
444
  @click="ui.openVendorCredentials()"
445
445
  >
446
446
  {{ t('inspector.runSettings.configureVendors') }}
@@ -449,7 +449,7 @@ const technicalLabel = computed(() => {
449
449
  </div>
450
450
  </div>
451
451
  </div>
452
- <p class="mt-1 text-[11px] text-slate-500">
452
+ <p class="mt-1 text-[11px] text-dimmed">
453
453
  {{ t('inspector.runSettings.modelPresetHint') }}
454
454
  {{ t('inspector.runSettings.modelPresetChangeHint') }}
455
455
  </p>
@@ -458,7 +458,7 @@ const technicalLabel = computed(() => {
458
458
  <!-- technical label (tri-state) — unset lets the engine infer it -->
459
459
  <div v-if="showOverrideField(uiMode.isAdvanced, block.technical)">
460
460
  <div class="mb-1 flex items-center justify-between">
461
- <span class="text-[11px] font-semibold uppercase tracking-wide text-slate-400">
461
+ <span class="text-[11px] font-semibold uppercase tracking-wide text-muted">
462
462
  {{ t('inspector.runSettings.taskKind') }}
463
463
  </span>
464
464
  <UDropdownMenu :items="technicalMenu">
@@ -473,7 +473,7 @@ const technicalLabel = computed(() => {
473
473
  </UButton>
474
474
  </UDropdownMenu>
475
475
  </div>
476
- <div class="text-[11px] text-slate-500">
476
+ <div class="text-[11px] text-dimmed">
477
477
  <template v-if="block.technical === true">
478
478
  {{ t('inspector.runSettings.technicalHint.technical') }}
479
479
  </template>
@@ -489,7 +489,7 @@ const technicalLabel = computed(() => {
489
489
  <!-- involved services: connected services this task spans (envs + possible code changes) -->
490
490
  <div data-testid="involved-services">
491
491
  <div class="mb-1 flex items-center justify-between">
492
- <span class="text-[11px] font-semibold uppercase tracking-wide text-slate-400">
492
+ <span class="text-[11px] font-semibold uppercase tracking-wide text-muted">
493
493
  {{ t('inspector.runSettings.involvedServices') }}
494
494
  </span>
495
495
  </div>
@@ -504,7 +504,7 @@ const technicalLabel = computed(() => {
504
504
  @update:model-value="(v: boolean | 'indeterminate') => toggleInvolved(s.id, v === true)"
505
505
  />
506
506
  </div>
507
- <div v-else class="text-[11px] text-slate-500">
507
+ <div v-else class="text-[11px] text-dimmed">
508
508
  {{ t('inspector.runSettings.involvedServicesEmpty') }}
509
509
  </div>
510
510
  <div v-if="staleInvolvedServices.length" class="mt-1 flex flex-wrap gap-1">
@@ -519,7 +519,7 @@ const technicalLabel = computed(() => {
519
519
  {{ board.getBlock(id)?.title ?? id }}
520
520
  </UBadge>
521
521
  </div>
522
- <div class="mt-1 text-[11px] text-slate-500">
522
+ <div class="mt-1 text-[11px] text-dimmed">
523
523
  {{ t('inspector.runSettings.involvedServicesHint') }}
524
524
  </div>
525
525
  </div>
@@ -543,13 +543,13 @@ const technicalLabel = computed(() => {
543
543
  "
544
544
  >
545
545
  <div class="mb-1 flex items-center justify-between">
546
- <span class="text-[11px] font-semibold uppercase tracking-wide text-slate-400">
546
+ <span class="text-[11px] font-semibold uppercase tracking-wide text-muted">
547
547
  {{ t('inspector.runSettings.issueWriteback') }}
548
548
  </span>
549
549
  </div>
550
550
  <div class="space-y-1.5">
551
551
  <div class="flex items-center justify-between">
552
- <span class="text-[11px] text-slate-400">{{
552
+ <span class="text-[11px] text-muted">{{
553
553
  t('inspector.runSettings.commentOnPrOpen')
554
554
  }}</span>
555
555
  <UDropdownMenu :items="writebackMenu(setCommentOnPrOpen)">
@@ -564,9 +564,7 @@ const technicalLabel = computed(() => {
564
564
  </UDropdownMenu>
565
565
  </div>
566
566
  <div class="flex items-center justify-between">
567
- <span class="text-[11px] text-slate-400">{{
568
- t('inspector.runSettings.closeOnMerge')
569
- }}</span>
567
+ <span class="text-[11px] text-muted">{{ t('inspector.runSettings.closeOnMerge') }}</span>
570
568
  <UDropdownMenu :items="writebackMenu(setResolveOnMerge)">
571
569
  <UButton
572
570
  size="xs"
@@ -579,7 +577,7 @@ const technicalLabel = computed(() => {
579
577
  </UDropdownMenu>
580
578
  </div>
581
579
  <div class="flex items-center justify-between">
582
- <span class="text-[11px] text-slate-400">{{
580
+ <span class="text-[11px] text-muted">{{
583
581
  t('inspector.runSettings.questionsOnPark')
584
582
  }}</span>
585
583
  <UDropdownMenu :items="writebackMenu(setQuestionsOnPark)">
@@ -594,7 +592,7 @@ const technicalLabel = computed(() => {
594
592
  </UDropdownMenu>
595
593
  </div>
596
594
  </div>
597
- <div class="mt-1 text-[11px] text-slate-500">
595
+ <div class="mt-1 text-[11px] text-dimmed">
598
596
  {{ t('inspector.runSettings.writebackHint') }}
599
597
  </div>
600
598
  </div>
@@ -602,7 +600,7 @@ const technicalLabel = computed(() => {
602
600
  <!-- responsible product person -->
603
601
  <div>
604
602
  <div class="mb-1 flex items-center justify-between">
605
- <span class="text-[11px] font-semibold uppercase tracking-wide text-slate-400">
603
+ <span class="text-[11px] font-semibold uppercase tracking-wide text-muted">
606
604
  {{ t('inspector.runSettings.responsibleProduct') }}
607
605
  </span>
608
606
  <UDropdownMenu :items="responsibleMenu">
@@ -626,7 +624,7 @@ const technicalLabel = computed(() => {
626
624
  {{ responsibleLabel }}<UIcon name="i-lucide-x" class="ms-0.5 h-3 w-3" />
627
625
  </UBadge>
628
626
  </div>
629
- <div v-else class="text-[11px] text-slate-500">
627
+ <div v-else class="text-[11px] text-dimmed">
630
628
  {{ t('inspector.runSettings.responsibleEmpty') }}
631
629
  </div>
632
630
  </div>
@@ -634,7 +632,7 @@ const technicalLabel = computed(() => {
634
632
  <!-- auto-start dependents: when this task merges, start the tasks that depend on it -->
635
633
  <div>
636
634
  <div class="flex items-center justify-between gap-2">
637
- <span class="text-[11px] font-semibold uppercase tracking-wide text-slate-400">
635
+ <span class="text-[11px] font-semibold uppercase tracking-wide text-muted">
638
636
  {{ t('inspector.runSettings.autoStartDependents') }}
639
637
  </span>
640
638
  <USwitch
@@ -643,7 +641,7 @@ const technicalLabel = computed(() => {
643
641
  @update:model-value="setAutoStartDependents"
644
642
  />
645
643
  </div>
646
- <div class="mt-1 text-[11px] text-slate-500">
644
+ <div class="mt-1 text-[11px] text-dimmed">
647
645
  {{ t('inspector.runSettings.autoStartHint') }}
648
646
  </div>
649
647
  </div>
@@ -83,7 +83,7 @@ function setFragments(ids: string[]) {
83
83
  <InspectorSection :title="t('inspector.structure.title')" :hint="t('inspector.structure.hint')">
84
84
  <!-- module assignment -->
85
85
  <div>
86
- <div class="mb-1 text-[11px] font-semibold uppercase tracking-wide text-slate-400">
86
+ <div class="mb-1 text-[11px] font-semibold uppercase tracking-wide text-muted">
87
87
  {{ t('inspector.structure.module') }}
88
88
  </div>
89
89
  <USelectMenu
@@ -99,7 +99,7 @@ function setFragments(ids: string[]) {
99
99
  @update:model-value="setModule"
100
100
  @create="setModule"
101
101
  />
102
- <p class="mt-1 text-[11px] leading-snug text-slate-500">
102
+ <p class="mt-1 text-[11px] leading-snug text-dimmed">
103
103
  {{ t('inspector.structure.moduleHint') }}
104
104
  </p>
105
105
  </div>
@@ -113,7 +113,7 @@ function setFragments(ids: string[]) {
113
113
  :empty-text="t('inspector.structure.bestPracticesEmpty')"
114
114
  @update:model-value="setFragments"
115
115
  />
116
- <p class="mt-1 text-[11px] leading-snug text-slate-500">
116
+ <p class="mt-1 text-[11px] leading-snug text-dimmed">
117
117
  {{ t('inspector.structure.bestPracticesHint') }}
118
118
  </p>
119
119
  </div>
@@ -25,6 +25,6 @@ const tooltip = computed(() =>
25
25
  <template>
26
26
  <span class="inline-flex items-center gap-2" :title="tooltip">
27
27
  <UIcon :name="meta.icon" :class="iconClass" class="shrink-0" :style="{ color: meta.color }" />
28
- <span v-if="showLabel" class="text-xs text-slate-100">{{ meta.label }}</span>
28
+ <span v-if="showLabel" class="text-xs text-app-100">{{ meta.label }}</span>
29
29
  </span>
30
30
  </template>
@@ -174,13 +174,13 @@ function revisionLabel(revision: AgentPromptRevision): string {
174
174
  :ui="{ content: 'max-w-[92vw] sm:max-w-3xl lg:max-w-5xl' }"
175
175
  >
176
176
  <template #body>
177
- <div v-if="prompts.loadingDetail" class="py-8 text-center text-sm text-slate-400">
177
+ <div v-if="prompts.loadingDetail" class="py-8 text-center text-sm text-muted">
178
178
  {{ t('common.loading') }}
179
179
  </div>
180
180
  <div v-else-if="detail" class="flex flex-col gap-3">
181
181
  <div class="flex flex-wrap items-center gap-2 text-xs">
182
182
  <AgentKindIcon v-if="agentKind" :kind="agentKind" icon-class="h-4 w-4" />
183
- <span class="font-medium text-slate-200">{{ label }}</span>
183
+ <span class="font-medium text-default">{{ label }}</span>
184
184
  <UBadge v-if="detail.builtinVersionLabel" color="neutral" variant="subtle" size="sm">
185
185
  {{ detail.builtinVersionLabel }}
186
186
  </UBadge>
@@ -192,14 +192,14 @@ function revisionLabel(revision: AgentPromptRevision): string {
192
192
  <!-- The workspace-wide output ceiling for this kind. Same per-agent-kind scope as the
193
193
  prompt below it; saves on change, since there is no revision log to commit to. -->
194
194
  <div class="flex flex-wrap items-center gap-2">
195
- <span class="text-[11px] text-slate-400">{{ t('pipeline.outputBudget.kindLabel') }}</span>
195
+ <span class="text-[11px] text-muted">{{ t('pipeline.outputBudget.kindLabel') }}</span>
196
196
  <OutputBudgetInput
197
197
  class="w-32"
198
198
  :model-value="budget"
199
199
  :disabled="agentSettings.saving"
200
200
  @update:model-value="saveBudget"
201
201
  />
202
- <span class="text-[10px] text-slate-500">
202
+ <span class="text-[10px] text-dimmed">
203
203
  {{ t('pipeline.outputBudget.kindHint') }}
204
204
  </span>
205
205
  </div>
@@ -207,7 +207,7 @@ function revisionLabel(revision: AgentPromptRevision): string {
207
207
  <!-- What the platform appends is SHOWN, not described. A prose summary of it is copy
208
208
  that silently goes stale the moment a directive is added, and a user who does not
209
209
  know what is already there writes a prompt that fights it. -->
210
- <p v-if="directives" class="text-[11px] leading-relaxed text-slate-500">
210
+ <p v-if="directives" class="text-[11px] leading-relaxed text-dimmed">
211
211
  {{ t('agentPrompt.managedNotice') }}
212
212
  <UButton
213
213
  variant="link"
@@ -220,13 +220,13 @@ function revisionLabel(revision: AgentPromptRevision): string {
220
220
  </p>
221
221
  <div
222
222
  v-if="directives && showDirectives"
223
- class="rounded-md border border-slate-800 bg-slate-950/60 p-2"
223
+ class="rounded-md border border-default bg-app-950/60 p-2"
224
224
  >
225
- <h4 class="mb-1 text-[11px] font-semibold uppercase tracking-wide text-slate-400">
225
+ <h4 class="mb-1 text-[11px] font-semibold uppercase tracking-wide text-muted">
226
226
  {{ t('agentPrompt.appendedHeading') }}
227
227
  </h4>
228
228
  <pre
229
- class="max-h-64 overflow-auto whitespace-pre-wrap break-words font-mono text-[11px] text-slate-300"
229
+ class="max-h-64 overflow-auto whitespace-pre-wrap break-words font-mono text-[11px] text-toned"
230
230
  >{{ directives.trim() }}</pre>
231
231
  </div>
232
232
 
@@ -278,28 +278,28 @@ function revisionLabel(revision: AgentPromptRevision): string {
278
278
  >
279
279
  {{ showBuiltin ? t('agentPrompt.hideBuiltin') : t('agentPrompt.showBuiltin') }}
280
280
  </UButton>
281
- <span v-if="restoredFrom !== undefined" class="text-[11px] text-slate-400">
281
+ <span v-if="restoredFrom !== undefined" class="text-[11px] text-muted">
282
282
  {{ t('agentPrompt.restoringFrom', { n: restoredFrom }) }}
283
283
  </span>
284
284
  </div>
285
285
 
286
- <div v-if="showBuiltin" class="rounded-md border border-slate-800 bg-slate-950/60 p-2">
287
- <h4 class="mb-1 text-[11px] font-semibold uppercase tracking-wide text-slate-400">
286
+ <div v-if="showBuiltin" class="rounded-md border border-default bg-app-950/60 p-2">
287
+ <h4 class="mb-1 text-[11px] font-semibold uppercase tracking-wide text-muted">
288
288
  {{ t('agentPrompt.builtinHeading') }}
289
289
  </h4>
290
290
  <pre
291
- class="max-h-64 overflow-auto whitespace-pre-wrap break-words font-mono text-[11px] text-slate-300"
291
+ class="max-h-64 overflow-auto whitespace-pre-wrap break-words font-mono text-[11px] text-toned"
292
292
  >{{ detail.builtinText }}</pre>
293
293
  </div>
294
294
 
295
295
  <div>
296
- <h4 class="mb-1 text-[11px] font-semibold uppercase tracking-wide text-slate-400">
296
+ <h4 class="mb-1 text-[11px] font-semibold uppercase tracking-wide text-muted">
297
297
  {{ t('agentPrompt.historyHeading') }}
298
298
  </h4>
299
- <p v-if="!detail.revisions.length" class="text-[11px] text-slate-500">
299
+ <p v-if="!detail.revisions.length" class="text-[11px] text-dimmed">
300
300
  {{ t('agentPrompt.historyEmpty') }}
301
301
  </p>
302
- <ul v-else class="max-h-52 divide-y divide-slate-800 overflow-y-auto text-xs">
302
+ <ul v-else class="max-h-52 divide-y divide-default overflow-y-auto text-xs">
303
303
  <li
304
304
  v-for="revision in detail.revisions"
305
305
  :key="revision.revision"
@@ -313,10 +313,10 @@ function revisionLabel(revision: AgentPromptRevision): string {
313
313
  >
314
314
  {{ t('agentPrompt.live') }}
315
315
  </UBadge>
316
- <span class="min-w-0 flex-1 truncate text-slate-300">
316
+ <span class="min-w-0 flex-1 truncate text-toned">
317
317
  {{ revisionLabel(revision) }}
318
318
  </span>
319
- <span class="shrink-0 text-[11px] text-slate-500">
319
+ <span class="shrink-0 text-[11px] text-dimmed">
320
320
  {{ d(new Date(revision.createdAt), 'short') }}
321
321
  </span>
322
322
  <UButton