@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
@@ -114,7 +114,7 @@ async function clear() {
114
114
  <!-- Disabled affordance until an observability integration is connected. -->
115
115
  <div
116
116
  v-if="!connected"
117
- class="flex items-center justify-between gap-2 rounded-md border border-slate-800 bg-slate-900/60 px-2 py-1.5 text-[11px] text-slate-400"
117
+ class="flex items-center justify-between gap-2 rounded-md border border-default bg-default/60 px-2 py-1.5 text-[11px] text-muted"
118
118
  >
119
119
  <span>{{ t('inspector.releaseHealth.connectPrompt') }}</span>
120
120
  <UButton
@@ -130,7 +130,7 @@ async function clear() {
130
130
  </div>
131
131
 
132
132
  <div v-else class="space-y-2">
133
- <p class="text-[11px] text-slate-500">
133
+ <p class="text-[11px] text-dimmed">
134
134
  {{ t('inspector.releaseHealth.hint') }}
135
135
  </p>
136
136
  <div class="grid grid-cols-2 gap-2">
@@ -185,20 +185,20 @@ async function stop(mode: EnvironmentTestMode) {
185
185
  </script>
186
186
 
187
187
  <template>
188
- <div class="mt-3 space-y-3 border-t border-white/5 pt-3" data-testid="env-test-section">
188
+ <div class="mt-3 space-y-3 border-t border-default pt-3" data-testid="env-test-section">
189
189
  <!-- The precondition both self-tests share, stated once at the top: with no provision type
190
190
  there is no environment to stand up and therefore nothing for an agent to drive either. -->
191
- <p v-if="!canTest" class="text-[11px] text-slate-500">
191
+ <p v-if="!canTest" class="text-[11px] text-dimmed">
192
192
  {{ t('inspector.testConfig.envTest.infraless') }}
193
193
  </p>
194
194
 
195
195
  <!-- 1. The provisioning self-test: the whole lifecycle against a throwaway branch. -->
196
196
  <div class="flex items-center justify-between gap-2">
197
197
  <div class="min-w-0">
198
- <p class="text-[11px] font-medium text-slate-300">
198
+ <p class="text-[11px] font-medium text-toned">
199
199
  {{ t('inspector.testConfig.envTest.title') }}
200
200
  </p>
201
- <p class="text-[11px] text-slate-400">{{ t('inspector.testConfig.envTest.hint') }}</p>
201
+ <p class="text-[11px] text-muted">{{ t('inspector.testConfig.envTest.hint') }}</p>
202
202
  </div>
203
203
  <UButton
204
204
  v-if="!isRunning('provision')"
@@ -230,9 +230,9 @@ async function stop(mode: EnvironmentTestMode) {
230
230
  v-if="provisionRun"
231
231
  class="text-[11px]"
232
232
  :class="{
233
- 'text-sky-300/80': provisionRun.status === 'running',
234
- 'text-emerald-300/80': provisionRun.status === 'succeeded',
235
- 'text-rose-300/80': provisionRun.status === 'failed',
233
+ 'text-app-info-300/80': provisionRun.status === 'running',
234
+ 'text-app-success-300/80': provisionRun.status === 'succeeded',
235
+ 'text-app-error-300/80': provisionRun.status === 'failed',
236
236
  }"
237
237
  data-testid="env-test-status"
238
238
  >
@@ -247,13 +247,17 @@ async function stop(mode: EnvironmentTestMode) {
247
247
  <template v-if="provisionRun.failedStage">
248
248
  ({{ stageLabel(provisionRun.failedStage) }})
249
249
  </template>
250
- <span v-if="provisionRun.error" class="block text-rose-300/70">
250
+ <span v-if="provisionRun.error" class="block text-app-error-300/70">
251
251
  {{ provisionRun.error }}
252
252
  </span>
253
253
  </template>
254
254
  </p>
255
255
 
256
- <div v-if="errors.provision" class="text-[11px] text-rose-400" data-testid="env-test-error">
256
+ <div
257
+ v-if="errors.provision"
258
+ class="text-[11px] text-app-error-400"
259
+ data-testid="env-test-error"
260
+ >
257
261
  <p>{{ errors.provision.text }}</p>
258
262
  <!-- Only the not-provisionable handler case is one-click fixable: jump to Infrastructure →
259
263
  Test environments, where the workspace's per-type environment handler is registered. -->
@@ -273,12 +277,12 @@ async function stop(mode: EnvironmentTestMode) {
273
277
 
274
278
  <!-- 2. The agent dry run: the same lifecycle plus a prober, reporting what an agent could
275
279
  and could not do with the environment it was handed. -->
276
- <div class="flex items-center justify-between gap-2 border-t border-white/5 pt-3">
280
+ <div class="flex items-center justify-between gap-2 border-t border-default pt-3">
277
281
  <div class="min-w-0">
278
- <p class="text-[11px] font-medium text-slate-300">
282
+ <p class="text-[11px] font-medium text-toned">
279
283
  {{ t('inspector.testConfig.envProbe.title') }}
280
284
  </p>
281
- <p class="text-[11px] text-slate-400">
285
+ <p class="text-[11px] text-muted">
282
286
  {{ t('inspector.testConfig.envProbe.hint') }}
283
287
  {{
284
288
  probeSurface === 'ui'
@@ -317,9 +321,9 @@ async function stop(mode: EnvironmentTestMode) {
317
321
  v-if="probeRun"
318
322
  class="text-[11px]"
319
323
  :class="{
320
- 'text-sky-300/80': probeRun.status === 'running',
321
- 'text-emerald-300/80': probeRun.status === 'succeeded',
322
- 'text-rose-300/80': probeRun.status === 'failed',
324
+ 'text-app-info-300/80': probeRun.status === 'running',
325
+ 'text-app-success-300/80': probeRun.status === 'succeeded',
326
+ 'text-app-error-300/80': probeRun.status === 'failed',
323
327
  }"
324
328
  data-testid="env-probe-status"
325
329
  >
@@ -340,7 +344,7 @@ async function stop(mode: EnvironmentTestMode) {
340
344
  <template v-else>
341
345
  {{ t('inspector.testConfig.envProbe.failed') }}
342
346
  <template v-if="probeRun.failedStage">({{ stageLabel(probeRun.failedStage) }})</template>
343
- <span v-if="probeRun.error" class="block text-rose-300/70">{{ probeRun.error }}</span>
347
+ <span v-if="probeRun.error" class="block text-app-error-300/70">{{ probeRun.error }}</span>
344
348
  </template>
345
349
  </p>
346
350
 
@@ -351,7 +355,7 @@ async function stop(mode: EnvironmentTestMode) {
351
355
 
352
356
  <div
353
357
  v-if="errors['agent-probe']"
354
- class="text-[11px] text-rose-400"
358
+ class="text-[11px] text-app-error-400"
355
359
  data-testid="env-probe-error"
356
360
  >
357
361
  <p>{{ errors['agent-probe']!.text }}</p>
@@ -429,7 +429,7 @@ function setSize(value: InstanceSize) {
429
429
  :default-open="props.defaultOpen"
430
430
  >
431
431
  <div class="space-y-1">
432
- <span class="text-[11px] text-slate-400">{{ t('inspector.testConfig.provisionType') }}</span>
432
+ <span class="text-[11px] text-muted">{{ t('inspector.testConfig.provisionType') }}</span>
433
433
  <div class="flex flex-wrap gap-1">
434
434
  <UButton
435
435
  v-for="p in PROVISION_TYPES"
@@ -442,7 +442,7 @@ function setSize(value: InstanceSize) {
442
442
  {{ p.label }}
443
443
  </UButton>
444
444
  </div>
445
- <p class="text-[11px] leading-snug text-slate-500">
445
+ <p class="text-[11px] leading-snug text-dimmed">
446
446
  {{ t('inspector.testConfig.provisionTypeHint') }}
447
447
  </p>
448
448
  </div>
@@ -452,14 +452,14 @@ function setSize(value: InstanceSize) {
452
452
  provisions the compose stack, rather than editing the raw path inline. -->
453
453
  <div
454
454
  v-if="provisionType === 'docker-compose'"
455
- class="flex items-center justify-between gap-2 rounded border border-primary-800/40 bg-primary-950/20 p-2"
455
+ class="flex items-center justify-between gap-2 rounded border border-primary/40 bg-primary/10 p-2"
456
456
  data-testid="env-setup-nudge"
457
457
  >
458
458
  <div class="min-w-0">
459
- <p class="text-[11px] font-medium text-primary-200/90">
459
+ <p class="text-[11px] font-medium text-primary/90">
460
460
  {{ t('inspector.testConfig.envWizard.title') }}
461
461
  </p>
462
- <p class="text-[11px] leading-snug text-slate-500">
462
+ <p class="text-[11px] leading-snug text-dimmed">
463
463
  {{ t('inspector.testConfig.envWizard.hint') }}
464
464
  </p>
465
465
  </div>
@@ -477,9 +477,9 @@ function setSize(value: InstanceSize) {
477
477
 
478
478
  <!-- Auto-detect a recommended provisioning config from the repo (slice 11). Non-binding:
479
479
  it prefills the form below + the kube edit refs; the user confirms/edits everything. -->
480
- <div v-if="repoContext" class="space-y-2 rounded border border-slate-800 bg-slate-900/40 p-2">
480
+ <div v-if="repoContext" class="space-y-2 rounded border border-default bg-default/40 p-2">
481
481
  <div class="flex items-center justify-between gap-2">
482
- <span class="text-[11px] text-slate-400">{{ t('inspector.testConfig.detect.title') }}</span>
482
+ <span class="text-[11px] text-muted">{{ t('inspector.testConfig.detect.title') }}</span>
483
483
  <UButton
484
484
  size="xs"
485
485
  variant="soft"
@@ -491,23 +491,23 @@ function setSize(value: InstanceSize) {
491
491
  {{ t('inspector.testConfig.detect.button') }}
492
492
  </UButton>
493
493
  </div>
494
- <p class="text-[11px] leading-snug text-slate-500">
494
+ <p class="text-[11px] leading-snug text-dimmed">
495
495
  {{ t('inspector.testConfig.detect.hint') }}
496
496
  </p>
497
497
 
498
- <p v-if="detectError" class="text-[11px] text-rose-300/80">
498
+ <p v-if="detectError" class="text-[11px] text-app-error-300/80">
499
499
  {{ detectError }}
500
500
  </p>
501
501
 
502
502
  <template v-if="detectResult && !detecting">
503
503
  <p
504
504
  v-if="!detectResult.detected && detectResult.provisioning.type !== 'custom'"
505
- class="text-[11px] text-amber-300/80"
505
+ class="text-[11px] text-app-warning-300/80"
506
506
  >
507
507
  {{ t('inspector.testConfig.detect.none') }}
508
508
  </p>
509
509
  <template v-else>
510
- <p class="text-[11px] text-emerald-300/80">
510
+ <p class="text-[11px] text-app-success-300/80">
511
511
  {{
512
512
  t('inspector.testConfig.detect.applied', {
513
513
  type: provisionTypeLabel(detectResult.provisioning.type),
@@ -516,7 +516,7 @@ function setSize(value: InstanceSize) {
516
516
  </p>
517
517
 
518
518
  <div v-if="detectResult.serviceDirCandidates?.length" class="space-y-1">
519
- <span class="text-[11px] text-slate-400">{{
519
+ <span class="text-[11px] text-muted">{{
520
520
  t('inspector.testConfig.detect.serviceDirTitle')
521
521
  }}</span>
522
522
  <div class="flex flex-wrap gap-1">
@@ -534,7 +534,7 @@ function setSize(value: InstanceSize) {
534
534
  </div>
535
535
 
536
536
  <div v-if="detectResult.manifestRootCandidates?.length" class="space-y-1">
537
- <span class="text-[11px] text-slate-400">{{
537
+ <span class="text-[11px] text-muted">{{
538
538
  t('inspector.testConfig.detect.manifestRootTitle')
539
539
  }}</span>
540
540
  <div class="flex flex-wrap gap-1">
@@ -552,7 +552,7 @@ function setSize(value: InstanceSize) {
552
552
  </div>
553
553
 
554
554
  <div v-if="detectResult.overlayCandidates?.length" class="space-y-1">
555
- <span class="text-[11px] text-slate-400">{{
555
+ <span class="text-[11px] text-muted">{{
556
556
  t('inspector.testConfig.detect.overlayTitle')
557
557
  }}</span>
558
558
  <div class="flex flex-wrap gap-1">
@@ -570,7 +570,7 @@ function setSize(value: InstanceSize) {
570
570
  </div>
571
571
 
572
572
  <div v-if="detectResult.composeServiceCandidates?.length" class="space-y-1">
573
- <span class="text-[11px] text-slate-400">{{
573
+ <span class="text-[11px] text-muted">{{
574
574
  t('inspector.testConfig.detect.composeServiceTitle')
575
575
  }}</span>
576
576
  <div class="flex flex-wrap gap-1">
@@ -587,12 +587,12 @@ function setSize(value: InstanceSize) {
587
587
  </div>
588
588
  </div>
589
589
 
590
- <p v-if="detectResult.urlSource" class="text-[11px] text-slate-500">
590
+ <p v-if="detectResult.urlSource" class="text-[11px] text-dimmed">
591
591
  {{
592
592
  t('inspector.testConfig.detect.urlSource', { source: detectResult.urlSource.source })
593
593
  }}
594
594
  </p>
595
- <p v-if="detectResult.namespace" class="text-[11px] text-slate-500">
595
+ <p v-if="detectResult.namespace" class="text-[11px] text-dimmed">
596
596
  {{ t('inspector.testConfig.detect.namespace', { namespace: detectResult.namespace }) }}
597
597
  </p>
598
598
 
@@ -600,9 +600,13 @@ function setSize(value: InstanceSize) {
600
600
  <li
601
601
  v-for="(n, i) in detectResult.notes"
602
602
  :key="i"
603
- class="flex items-start gap-1.5 text-[11px] leading-snug text-slate-500"
603
+ class="flex items-start gap-1.5 text-[11px] leading-snug text-dimmed"
604
604
  >
605
- <span :class="n.confidence === 'high' ? 'text-emerald-400/70' : 'text-amber-400/70'">
605
+ <span
606
+ :class="
607
+ n.confidence === 'high' ? 'text-app-success-400/70' : 'text-app-warning-400/70'
608
+ "
609
+ >
606
610
  {{
607
611
  n.confidence === 'high'
608
612
  ? t('inspector.testConfig.detect.confidenceHigh')
@@ -618,9 +622,7 @@ function setSize(value: InstanceSize) {
618
622
 
619
623
  <div v-if="provisionType === 'docker-compose'" class="space-y-2">
620
624
  <div class="space-y-1">
621
- <label class="text-[11px] text-slate-400">{{
622
- t('inspector.testConfig.composePath')
623
- }}</label>
625
+ <label class="text-[11px] text-muted">{{ t('inspector.testConfig.composePath') }}</label>
624
626
  <div class="flex items-center gap-1">
625
627
  <UInput
626
628
  :model-value="composePath"
@@ -642,7 +644,7 @@ function setSize(value: InstanceSize) {
642
644
  @click="openBrowse('compose')"
643
645
  />
644
646
  </div>
645
- <p class="text-[11px] leading-snug text-slate-500">
647
+ <p class="text-[11px] leading-snug text-dimmed">
646
648
  {{ t('inspector.testConfig.composeHint') }}
647
649
  </p>
648
650
  </div>
@@ -658,7 +660,7 @@ function setSize(value: InstanceSize) {
658
660
  connection (the "how") is configured per-type in the Infrastructure window. -->
659
661
  <div v-if="provisionType === 'kubernetes'" class="space-y-2">
660
662
  <div class="space-y-1">
661
- <span class="text-[11px] text-slate-400">{{
663
+ <span class="text-[11px] text-muted">{{
662
664
  t('inspector.testConfig.manifestSourceLabel')
663
665
  }}</span>
664
666
  <div class="flex flex-wrap gap-1">
@@ -682,9 +684,7 @@ function setSize(value: InstanceSize) {
682
684
  </div>
683
685
 
684
686
  <div v-if="kubeSourceType === 'separate'" class="space-y-1">
685
- <label class="text-[11px] text-slate-400">{{
686
- t('inspector.testConfig.manifestRepo')
687
- }}</label>
687
+ <label class="text-[11px] text-muted">{{ t('inspector.testConfig.manifestRepo') }}</label>
688
688
  <UInput
689
689
  :model-value="kubeRepo"
690
690
  size="xs"
@@ -695,9 +695,7 @@ function setSize(value: InstanceSize) {
695
695
  />
696
696
  </div>
697
697
  <div v-if="kubeSourceType === 'separate'" class="space-y-1">
698
- <label class="text-[11px] text-slate-400">{{
699
- t('inspector.testConfig.manifestRef')
700
- }}</label>
698
+ <label class="text-[11px] text-muted">{{ t('inspector.testConfig.manifestRef') }}</label>
701
699
  <UInput
702
700
  :model-value="kubeRef"
703
701
  size="xs"
@@ -709,9 +707,7 @@ function setSize(value: InstanceSize) {
709
707
  </div>
710
708
 
711
709
  <div class="space-y-1">
712
- <label class="text-[11px] text-slate-400">{{
713
- t('inspector.testConfig.manifestPath')
714
- }}</label>
710
+ <label class="text-[11px] text-muted">{{ t('inspector.testConfig.manifestPath') }}</label>
715
711
  <div class="flex items-center gap-1">
716
712
  <UInput
717
713
  :model-value="kubePath"
@@ -731,15 +727,13 @@ function setSize(value: InstanceSize) {
731
727
  @click="openBrowse('k8s')"
732
728
  />
733
729
  </div>
734
- <p class="text-[11px] leading-snug text-slate-500">
730
+ <p class="text-[11px] leading-snug text-dimmed">
735
731
  {{ t('inspector.testConfig.manifestPathHint') }}
736
732
  </p>
737
733
  </div>
738
734
 
739
735
  <div class="space-y-1">
740
- <span class="text-[11px] text-slate-400">{{
741
- t('inspector.testConfig.rendererLabel')
742
- }}</span>
736
+ <span class="text-[11px] text-muted">{{ t('inspector.testConfig.rendererLabel') }}</span>
743
737
  <div class="flex flex-wrap gap-1">
744
738
  <UButton
745
739
  v-for="r in RENDERERS"
@@ -752,7 +746,7 @@ function setSize(value: InstanceSize) {
752
746
  {{ r.label }}
753
747
  </UButton>
754
748
  </div>
755
- <p class="text-[11px] leading-snug text-slate-500">
749
+ <p class="text-[11px] leading-snug text-dimmed">
756
750
  {{ t('inspector.testConfig.rendererHint') }}
757
751
  </p>
758
752
  </div>
@@ -762,7 +756,7 @@ function setSize(value: InstanceSize) {
762
756
  source), the per-PR recipe lives in the target repository's own preview workflow, so
763
757
  declaring the type IS the whole service-side configuration. Say so explicitly rather
764
758
  than rendering an empty panel that reads like something failed to load. -->
765
- <p v-if="provisionType === 'cloudflare'" class="text-[11px] text-slate-500">
759
+ <p v-if="provisionType === 'cloudflare'" class="text-[11px] text-dimmed">
766
760
  {{ t('inspector.testConfig.cloudflareHint') }}
767
761
  </p>
768
762
 
@@ -770,7 +764,7 @@ function setSize(value: InstanceSize) {
770
764
  handler the workspace configures). -->
771
765
  <div v-if="provisionType === 'custom'" class="space-y-2">
772
766
  <div class="space-y-1">
773
- <label class="text-[11px] text-slate-400">{{
767
+ <label class="text-[11px] text-muted">{{
774
768
  t('inspector.testConfig.customManifestId')
775
769
  }}</label>
776
770
  <USelect
@@ -782,15 +776,15 @@ function setSize(value: InstanceSize) {
782
776
  :placeholder="t('inspector.testConfig.customManifestIdPlaceholder')"
783
777
  @update:model-value="(v: string) => setCustomManifestId(v)"
784
778
  />
785
- <p v-else class="text-[11px] leading-snug text-amber-300/80">
779
+ <p v-else class="text-[11px] leading-snug text-app-warning-300/80">
786
780
  {{ t('inspector.testConfig.customNoTypes') }}
787
781
  </p>
788
- <p class="text-[11px] leading-snug text-slate-500">
782
+ <p class="text-[11px] leading-snug text-dimmed">
789
783
  {{ t('inspector.testConfig.customManifestIdHint') }}
790
784
  </p>
791
785
  </div>
792
786
  <div class="space-y-1">
793
- <label class="text-[11px] text-slate-400">{{
787
+ <label class="text-[11px] text-muted">{{
794
788
  t('inspector.testConfig.customManifestPath')
795
789
  }}</label>
796
790
  <UInput
@@ -802,7 +796,7 @@ function setSize(value: InstanceSize) {
802
796
  (e: KeyboardEvent) => setCustomManifestPath((e.target as HTMLInputElement).value)
803
797
  "
804
798
  />
805
- <p class="text-[11px] leading-snug text-slate-500">
799
+ <p class="text-[11px] leading-snug text-dimmed">
806
800
  {{ t('inspector.testConfig.customManifestPathHint') }}
807
801
  </p>
808
802
  </div>
@@ -811,10 +805,10 @@ function setSize(value: InstanceSize) {
811
805
  shown when the selected type declares a fixer prompt. -->
812
806
  <div
813
807
  v-if="manifestFixerAvailable && repoContext"
814
- class="space-y-1.5 rounded border border-slate-800 bg-slate-900/40 p-2"
808
+ class="space-y-1.5 rounded border border-default bg-default/40 p-2"
815
809
  >
816
810
  <div class="flex items-center justify-between gap-2">
817
- <span class="text-[11px] text-slate-400">{{
811
+ <span class="text-[11px] text-muted">{{
818
812
  t('inspector.testConfig.generateManifest.title')
819
813
  }}</span>
820
814
  <UButton
@@ -829,24 +823,24 @@ function setSize(value: InstanceSize) {
829
823
  {{ t('inspector.testConfig.generateManifest.button') }}
830
824
  </UButton>
831
825
  </div>
832
- <p class="text-[11px] leading-snug text-slate-500">
826
+ <p class="text-[11px] leading-snug text-dimmed">
833
827
  {{ t('inspector.testConfig.generateManifest.hint') }}
834
828
  </p>
835
- <p v-if="manifestRepairError" class="text-[11px] text-rose-300/80">
829
+ <p v-if="manifestRepairError" class="text-[11px] text-app-error-300/80">
836
830
  {{ t('inspector.testConfig.generateManifest.error') }}
837
831
  </p>
838
832
  <p
839
833
  v-else-if="manifestRepairJob"
840
834
  class="text-[11px]"
841
835
  :class="{
842
- 'text-sky-300/80': manifestRepairJob.status === 'running',
843
- 'text-emerald-300/80': manifestRepairJob.status === 'succeeded',
844
- 'text-rose-300/80': manifestRepairJob.status === 'failed',
836
+ 'text-app-info-300/80': manifestRepairJob.status === 'running',
837
+ 'text-app-success-300/80': manifestRepairJob.status === 'succeeded',
838
+ 'text-app-error-300/80': manifestRepairJob.status === 'failed',
845
839
  }"
846
840
  >
847
841
  {{ t(`inspector.testConfig.generateManifest.status.${manifestRepairJob.status}`) }}
848
842
  </p>
849
- <p v-else-if="manifestRepairJobId" class="text-[11px] text-sky-300/80">
843
+ <p v-else-if="manifestRepairJobId" class="text-[11px] text-app-info-300/80">
850
844
  {{ t('inspector.testConfig.generateManifest.dispatched') }}
851
845
  </p>
852
846
  </div>
@@ -862,7 +856,7 @@ function setSize(value: InstanceSize) {
862
856
  >
863
857
  <template #body>
864
858
  <div v-if="repoContext" class="space-y-3">
865
- <p class="text-xs text-slate-400">
859
+ <p class="text-xs text-muted">
866
860
  {{
867
861
  browseTarget === 'compose'
868
862
  ? t('inspector.testConfig.selectComposeHint')
@@ -876,11 +870,11 @@ function setSize(value: InstanceSize) {
876
870
  :start-path="repoContext.directory ?? ''"
877
871
  />
878
872
  <div class="flex items-center justify-between gap-2">
879
- <p class="truncate text-xs text-slate-400">
873
+ <p class="truncate text-xs text-muted">
880
874
  <template v-if="pickedPath">
881
875
  <i18n-t keypath="inspector.testConfig.selected" tag="span" scope="global">
882
876
  <template #path>
883
- <code class="text-slate-200">{{ pickedPath }}</code>
877
+ <code class="text-default">{{ pickedPath }}</code>
884
878
  </template>
885
879
  </i18n-t>
886
880
  </template>
@@ -902,9 +896,7 @@ function setSize(value: InstanceSize) {
902
896
  :hint="t('inspector.testConfig.provisioningHint')"
903
897
  >
904
898
  <div class="space-y-1">
905
- <span class="text-[11px] text-slate-400">{{
906
- t('inspector.testConfig.cloudProvider')
907
- }}</span>
899
+ <span class="text-[11px] text-muted">{{ t('inspector.testConfig.cloudProvider') }}</span>
908
900
  <div class="flex flex-wrap gap-1">
909
901
  <UButton
910
902
  v-for="p in PROVIDERS"
@@ -920,7 +912,7 @@ function setSize(value: InstanceSize) {
920
912
  </div>
921
913
 
922
914
  <div class="space-y-1">
923
- <span class="text-[11px] text-slate-400">{{ t('inspector.testConfig.instanceSize') }}</span>
915
+ <span class="text-[11px] text-muted">{{ t('inspector.testConfig.instanceSize') }}</span>
924
916
  <div class="flex flex-wrap gap-1">
925
917
  <UButton
926
918
  v-for="s in SIZES"
@@ -165,13 +165,13 @@ async function clearAll() {
165
165
 
166
166
  <!-- These are REAL secrets: an unmistakable sensitivity + replace-all warning. -->
167
167
  <div
168
- class="flex items-start gap-2 rounded-md border border-amber-500/40 bg-amber-500/10 px-2.5 py-2 text-[11px] leading-snug text-amber-200"
168
+ class="flex items-start gap-2 rounded-md border border-app-warning-500/40 bg-app-warning-500/10 px-2.5 py-2 text-[11px] leading-snug text-app-warning-200"
169
169
  >
170
- <UIcon name="i-lucide-shield-alert" class="mt-0.5 h-4 w-4 shrink-0 text-amber-400" />
170
+ <UIcon name="i-lucide-shield-alert" class="mt-0.5 h-4 w-4 shrink-0 text-app-warning-400" />
171
171
  <span>{{ t('inspector.testSecrets.warning') }}</span>
172
172
  </div>
173
173
 
174
- <p class="text-[11px] leading-snug text-slate-500">
174
+ <p class="text-[11px] leading-snug text-dimmed">
175
175
  {{ t('inspector.testSecrets.replaceNote') }}
176
176
  </p>
177
177
 
@@ -180,7 +180,7 @@ async function clearAll() {
180
180
  <div
181
181
  v-for="(row, index) in draft.rows"
182
182
  :key="row.uid"
183
- class="space-y-2 rounded-md border border-slate-800 p-2.5"
183
+ class="space-y-2 rounded-md border border-default p-2.5"
184
184
  :data-testid="`test-secret-row-${index}`"
185
185
  >
186
186
  <div class="flex items-start gap-2">
@@ -234,7 +234,7 @@ async function clearAll() {
234
234
  </UFormField>
235
235
  </div>
236
236
 
237
- <p v-if="duplicateKeys.size" class="text-[11px] text-error-400">
237
+ <p v-if="duplicateKeys.size" class="text-[11px] text-app-error-400">
238
238
  {{ t('inspector.testSecrets.duplicateKey') }}
239
239
  </p>
240
240
 
@@ -89,9 +89,9 @@ function revert() {
89
89
  >
90
90
  <!-- This text reaches the model in the prompt, so it must never hold a real secret. -->
91
91
  <div
92
- class="flex items-start gap-2 rounded-md border border-slate-700 bg-slate-800/40 px-2.5 py-2 text-[11px] leading-snug text-slate-300"
92
+ class="flex items-start gap-2 rounded-md border border-muted bg-elevated/40 px-2.5 py-2 text-[11px] leading-snug text-toned"
93
93
  >
94
- <UIcon name="i-lucide-info" class="mt-0.5 h-4 w-4 shrink-0 text-slate-400" />
94
+ <UIcon name="i-lucide-info" class="mt-0.5 h-4 w-4 shrink-0 text-muted" />
95
95
  <span>{{ t('inspector.testingContext.notSecret') }}</span>
96
96
  </div>
97
97
 
@@ -104,7 +104,7 @@ function revert() {
104
104
  />
105
105
 
106
106
  <div class="flex items-center justify-between gap-2">
107
- <p class="text-[11px] text-slate-500" :class="{ 'text-error-400': tooLong }">
107
+ <p class="text-[11px] text-dimmed" :class="{ 'text-app-error-400': tooLong }">
108
108
  {{
109
109
  t('inspector.testingContext.length', {
110
110
  count: outgoing.length,
@@ -234,7 +234,7 @@ async function clear() {
234
234
  />
235
235
  </UFormField>
236
236
 
237
- <p class="text-[11px] text-slate-500">
237
+ <p class="text-[11px] text-dimmed">
238
238
  {{ t('inspector.validationChecks.hint') }}
239
239
  </p>
240
240
 
@@ -273,7 +273,7 @@ async function clear() {
273
273
  />
274
274
  </div>
275
275
 
276
- <p v-if="rows.length === 0" class="text-[11px] text-slate-500" data-testid="validation-empty">
276
+ <p v-if="rows.length === 0" class="text-[11px] text-dimmed" data-testid="validation-empty">
277
277
  {{ t('inspector.validationChecks.empty') }}
278
278
  </p>
279
279
 
@@ -58,12 +58,12 @@ function setValue(id: string, value: string) {
58
58
  >
59
59
  <div v-for="d in descriptors" :key="d.id" class="space-y-1">
60
60
  <div class="flex items-center justify-between">
61
- <span class="text-[11px] text-slate-400">{{ d.label }}</span>
61
+ <span class="text-[11px] text-muted">{{ d.label }}</span>
62
62
  <div class="flex items-center gap-1.5">
63
63
  <UIcon
64
64
  v-if="isFrozen(d.agentKind)"
65
65
  name="i-lucide-lock"
66
- class="h-3 w-3 text-slate-500"
66
+ class="h-3 w-3 text-dimmed"
67
67
  :title="t('inspector.agentConfig.frozen')"
68
68
  />
69
69
  </div>
@@ -81,7 +81,7 @@ function setValue(id: string, value: string) {
81
81
  {{ opt.label }}
82
82
  </UButton>
83
83
  </div>
84
- <p class="text-[11px] leading-snug text-slate-500">{{ d.description }}</p>
84
+ <p class="text-[11px] leading-snug text-dimmed">{{ d.description }}</p>
85
85
  </div>
86
86
  </InspectorSection>
87
87
  </template>
@@ -150,7 +150,7 @@ function removeDisabled(entry: AprioriBranch): boolean {
150
150
  <template>
151
151
  <div v-if="repo" data-testid="apriori-branches">
152
152
  <div class="mb-1 flex items-center justify-between">
153
- <span class="text-[11px] font-semibold uppercase tracking-wide text-slate-400">
153
+ <span class="text-[11px] font-semibold uppercase tracking-wide text-muted">
154
154
  {{ t('inspector.aprioriBranches.title') }}
155
155
  </span>
156
156
  </div>
@@ -220,21 +220,24 @@ function removeDisabled(entry: AprioriBranch): boolean {
220
220
  class="w-full"
221
221
  data-testid="apriori-branch-search"
222
222
  />
223
- <div v-else class="text-[11px] text-slate-500">
223
+ <div v-else class="text-[11px] text-dimmed">
224
224
  {{ t('inspector.aprioriBranches.connectFirst') }}
225
225
  </div>
226
226
 
227
227
  <!-- A protected branch pushed to by the run is likely to be rejected — warn, don't block. -->
228
228
  <div
229
229
  v-if="workingName && isProtected(workingName)"
230
- class="mt-1.5 flex items-start gap-1.5 rounded-md border border-amber-500/40 bg-amber-950/40 p-2 text-[11px] text-amber-200/90"
230
+ class="mt-1.5 flex items-start gap-1.5 rounded-md border border-app-warning-500/40 bg-app-warning-950/40 p-2 text-[11px] text-app-warning-200/90"
231
231
  data-testid="apriori-branch-protected-warning"
232
232
  >
233
- <UIcon name="i-lucide-triangle-alert" class="mt-0.5 h-3.5 w-3.5 shrink-0 text-amber-400" />
233
+ <UIcon
234
+ name="i-lucide-triangle-alert"
235
+ class="mt-0.5 h-3.5 w-3.5 shrink-0 text-app-warning-400"
236
+ />
234
237
  <span>{{ t('inspector.aprioriBranches.protectedWarning', { branch: workingName }) }}</span>
235
238
  </div>
236
239
 
237
- <div class="mt-1 text-[11px] text-slate-500">
240
+ <div class="mt-1 text-[11px] text-dimmed">
238
241
  {{ t('inspector.aprioriBranches.hint') }}
239
242
  <template v-if="isMultiRepo">
240
243
  {{ t('inspector.aprioriBranches.multiRepoHint') }}
@@ -86,7 +86,7 @@ async function removeDep(dep: Block) {
86
86
  icon="i-lucide-git-branch"
87
87
  :title="t('inspector.dependencies.empty')"
88
88
  />
89
- <div v-if="!runnable" class="text-[10px] text-amber-400">
89
+ <div v-if="!runnable" class="text-[10px] text-app-warning-400">
90
90
  {{ t('inspector.dependencies.blocked') }}
91
91
  </div>
92
92
  </InspectorSection>