@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
@@ -0,0 +1,298 @@
1
+ /* The app's own colour tokens, layered on Nuxt UI's (issue #2239).
2
+ *
3
+ * Nuxt UI gives every alias ONE mode-adaptive token (`--ui-primary`, `--ui-warning`: shade 500 in
4
+ * light, 400 in dark) plus the fixed numbered ramp (`--ui-color-warning-300`), and gives the
5
+ * neutral ramp the role tokens (`--ui-bg`, `--ui-text-muted`, ...). The SPA's status and accent
6
+ * surfaces are painted in SPECIFIC ramp shades (a `300` text on a `950/40` fill inside an `800`
7
+ * border), and a fixed shade cannot serve both modes: what reads on a dark surface vanishes on a
8
+ * light one. These tokens give each numbered shade a light twin by MIRRORING the ramp (`50↔950`,
9
+ * `100↔900`, `200↔800`, `300↔700`, `400↔600`, `500` is its own midpoint): the dark value is the
10
+ * exact shade the raw class used, so dark mode is unchanged, and the light value is the shade the
11
+ * same intent lands on against a light surface.
12
+ *
13
+ * Every value is a reference into Nuxt UI's `--ui-color-<alias>-<n>` ramps, never a literal, so a
14
+ * theme that maps `warning` to another palette recolours every warning surface, and a theme
15
+ * document can override any single token here through its `tokens` block (the theme stylesheet's
16
+ * selectors outrank these; see `utils/theme/css.ts`).
17
+ *
18
+ * `@theme inline` binds each to a Tailwind colour so the `bg-app-warning-950/40` /
19
+ * `text-app-error-300` utilities exist (with opacity modifiers). Five NEUTRAL shades ride the same
20
+ * scheme under the shorter `app-<n>` name because the role tokens cover the rest of that ramp.
21
+ * PRIMARY has no numbered tokens: brand accents use Nuxt UI's bare alias (`text-primary`,
22
+ * `bg-primary/10`), the idiom the editor's primary slider and `blackAsPrimary` address directly.
23
+ *
24
+ * CATEGORY hues (`--app-hue-<h>`) are identity colours for agent kinds, task types and pipeline
25
+ * step kinds: one per Tailwind hue, mode-adaptive on Nuxt UI's own convention (`400` in dark,
26
+ * `600` in light), consumed as `text-app-hue-pink` or as `var(--app-hue-pink)` in an inline style.
27
+ * They reference Tailwind's ramps, not an alias, because a category is not a status; a theme
28
+ * document recolours one through its `tokens` block (`'--app-hue-pink': 'var(--color-rose-400)'`).
29
+ *
30
+ * `scripts/check-frontend-palette.mjs` bans the raw and the fixed-alias forms these replace, and
31
+ * `palette-token-parity.spec.ts` pins the dark values. */
32
+
33
+ /* ---- Neutral: the five shades with no role token ------------------------------------------- */
34
+ :root,
35
+ .dark {
36
+ --app-950: var(--ui-color-neutral-950);
37
+ --app-100: var(--ui-color-neutral-100);
38
+ --app-600: var(--ui-color-neutral-600);
39
+ --app-500: var(--ui-color-neutral-500);
40
+ --app-400: var(--ui-color-neutral-400);
41
+ /* The board canvas: one step BELOW `bg-default` (900), so panels and cards lift off it. The
42
+ * only surface in the app below the page background, hence its own token. */
43
+ --app-bg-canvas: var(--ui-color-neutral-950);
44
+ }
45
+ .light {
46
+ /* The one deliberate break in the mirror: 950 lands on 100, not 50. Some 350 panels are painted
47
+ * `bg-default/60` / `bg-elevated/40` over this surface; in dark that is two distinct dark greys, in
48
+ * light white-at-60% over neutral-50 composites to within 1% of it and every panel edge vanishes.
49
+ * One step deeper keeps the translucent-panel idiom legible without re-tuning 350 alphas. */
50
+ --app-950: var(--ui-color-neutral-100);
51
+ --app-100: var(--ui-color-neutral-900);
52
+ --app-600: var(--ui-color-neutral-400);
53
+ --app-500: var(--ui-color-neutral-500);
54
+ --app-400: var(--ui-color-neutral-600);
55
+ --app-bg-canvas: var(--ui-color-neutral-200);
56
+ }
57
+
58
+ /* ---- The five status ramps, every shade mirrored -------------------------------------------- */
59
+ :root,
60
+ .dark {
61
+ --app-secondary-50: var(--ui-color-secondary-50);
62
+ --app-secondary-100: var(--ui-color-secondary-100);
63
+ --app-secondary-200: var(--ui-color-secondary-200);
64
+ --app-secondary-300: var(--ui-color-secondary-300);
65
+ --app-secondary-400: var(--ui-color-secondary-400);
66
+ --app-secondary-500: var(--ui-color-secondary-500);
67
+ --app-secondary-600: var(--ui-color-secondary-600);
68
+ --app-secondary-700: var(--ui-color-secondary-700);
69
+ --app-secondary-800: var(--ui-color-secondary-800);
70
+ --app-secondary-900: var(--ui-color-secondary-900);
71
+ --app-secondary-950: var(--ui-color-secondary-950);
72
+ --app-success-50: var(--ui-color-success-50);
73
+ --app-success-100: var(--ui-color-success-100);
74
+ --app-success-200: var(--ui-color-success-200);
75
+ --app-success-300: var(--ui-color-success-300);
76
+ --app-success-400: var(--ui-color-success-400);
77
+ --app-success-500: var(--ui-color-success-500);
78
+ --app-success-600: var(--ui-color-success-600);
79
+ --app-success-700: var(--ui-color-success-700);
80
+ --app-success-800: var(--ui-color-success-800);
81
+ --app-success-900: var(--ui-color-success-900);
82
+ --app-success-950: var(--ui-color-success-950);
83
+ --app-info-50: var(--ui-color-info-50);
84
+ --app-info-100: var(--ui-color-info-100);
85
+ --app-info-200: var(--ui-color-info-200);
86
+ --app-info-300: var(--ui-color-info-300);
87
+ --app-info-400: var(--ui-color-info-400);
88
+ --app-info-500: var(--ui-color-info-500);
89
+ --app-info-600: var(--ui-color-info-600);
90
+ --app-info-700: var(--ui-color-info-700);
91
+ --app-info-800: var(--ui-color-info-800);
92
+ --app-info-900: var(--ui-color-info-900);
93
+ --app-info-950: var(--ui-color-info-950);
94
+ --app-warning-50: var(--ui-color-warning-50);
95
+ --app-warning-100: var(--ui-color-warning-100);
96
+ --app-warning-200: var(--ui-color-warning-200);
97
+ --app-warning-300: var(--ui-color-warning-300);
98
+ --app-warning-400: var(--ui-color-warning-400);
99
+ --app-warning-500: var(--ui-color-warning-500);
100
+ --app-warning-600: var(--ui-color-warning-600);
101
+ --app-warning-700: var(--ui-color-warning-700);
102
+ --app-warning-800: var(--ui-color-warning-800);
103
+ --app-warning-900: var(--ui-color-warning-900);
104
+ --app-warning-950: var(--ui-color-warning-950);
105
+ --app-error-50: var(--ui-color-error-50);
106
+ --app-error-100: var(--ui-color-error-100);
107
+ --app-error-200: var(--ui-color-error-200);
108
+ --app-error-300: var(--ui-color-error-300);
109
+ --app-error-400: var(--ui-color-error-400);
110
+ --app-error-500: var(--ui-color-error-500);
111
+ --app-error-600: var(--ui-color-error-600);
112
+ --app-error-700: var(--ui-color-error-700);
113
+ --app-error-800: var(--ui-color-error-800);
114
+ --app-error-900: var(--ui-color-error-900);
115
+ --app-error-950: var(--ui-color-error-950);
116
+ }
117
+ .light {
118
+ --app-secondary-50: var(--ui-color-secondary-950);
119
+ --app-secondary-100: var(--ui-color-secondary-900);
120
+ --app-secondary-200: var(--ui-color-secondary-800);
121
+ --app-secondary-300: var(--ui-color-secondary-700);
122
+ --app-secondary-400: var(--ui-color-secondary-600);
123
+ --app-secondary-500: var(--ui-color-secondary-500);
124
+ --app-secondary-600: var(--ui-color-secondary-400);
125
+ --app-secondary-700: var(--ui-color-secondary-300);
126
+ --app-secondary-800: var(--ui-color-secondary-200);
127
+ --app-secondary-900: var(--ui-color-secondary-100);
128
+ --app-secondary-950: var(--ui-color-secondary-50);
129
+ --app-success-50: var(--ui-color-success-950);
130
+ --app-success-100: var(--ui-color-success-900);
131
+ --app-success-200: var(--ui-color-success-800);
132
+ --app-success-300: var(--ui-color-success-700);
133
+ --app-success-400: var(--ui-color-success-600);
134
+ --app-success-500: var(--ui-color-success-500);
135
+ --app-success-600: var(--ui-color-success-400);
136
+ --app-success-700: var(--ui-color-success-300);
137
+ --app-success-800: var(--ui-color-success-200);
138
+ --app-success-900: var(--ui-color-success-100);
139
+ --app-success-950: var(--ui-color-success-50);
140
+ --app-info-50: var(--ui-color-info-950);
141
+ --app-info-100: var(--ui-color-info-900);
142
+ --app-info-200: var(--ui-color-info-800);
143
+ --app-info-300: var(--ui-color-info-700);
144
+ --app-info-400: var(--ui-color-info-600);
145
+ --app-info-500: var(--ui-color-info-500);
146
+ --app-info-600: var(--ui-color-info-400);
147
+ --app-info-700: var(--ui-color-info-300);
148
+ --app-info-800: var(--ui-color-info-200);
149
+ --app-info-900: var(--ui-color-info-100);
150
+ --app-info-950: var(--ui-color-info-50);
151
+ --app-warning-50: var(--ui-color-warning-950);
152
+ --app-warning-100: var(--ui-color-warning-900);
153
+ --app-warning-200: var(--ui-color-warning-800);
154
+ --app-warning-300: var(--ui-color-warning-700);
155
+ --app-warning-400: var(--ui-color-warning-600);
156
+ --app-warning-500: var(--ui-color-warning-500);
157
+ --app-warning-600: var(--ui-color-warning-400);
158
+ --app-warning-700: var(--ui-color-warning-300);
159
+ --app-warning-800: var(--ui-color-warning-200);
160
+ --app-warning-900: var(--ui-color-warning-100);
161
+ --app-warning-950: var(--ui-color-warning-50);
162
+ --app-error-50: var(--ui-color-error-950);
163
+ --app-error-100: var(--ui-color-error-900);
164
+ --app-error-200: var(--ui-color-error-800);
165
+ --app-error-300: var(--ui-color-error-700);
166
+ --app-error-400: var(--ui-color-error-600);
167
+ --app-error-500: var(--ui-color-error-500);
168
+ --app-error-600: var(--ui-color-error-400);
169
+ --app-error-700: var(--ui-color-error-300);
170
+ --app-error-800: var(--ui-color-error-200);
171
+ --app-error-900: var(--ui-color-error-100);
172
+ --app-error-950: var(--ui-color-error-50);
173
+ }
174
+
175
+ /* ---- Category hues: one mode-adaptive value per Tailwind hue ---------------------------------- */
176
+ :root,
177
+ .dark {
178
+ --app-hue-slate: var(--color-slate-400);
179
+ --app-hue-red: var(--color-red-400);
180
+ --app-hue-orange: var(--color-orange-400);
181
+ --app-hue-amber: var(--color-amber-400);
182
+ --app-hue-yellow: var(--color-yellow-400);
183
+ --app-hue-lime: var(--color-lime-400);
184
+ --app-hue-green: var(--color-green-400);
185
+ --app-hue-emerald: var(--color-emerald-400);
186
+ --app-hue-teal: var(--color-teal-400);
187
+ --app-hue-cyan: var(--color-cyan-400);
188
+ --app-hue-sky: var(--color-sky-400);
189
+ --app-hue-blue: var(--color-blue-400);
190
+ --app-hue-indigo: var(--color-indigo-400);
191
+ --app-hue-violet: var(--color-violet-400);
192
+ --app-hue-purple: var(--color-purple-400);
193
+ --app-hue-fuchsia: var(--color-fuchsia-400);
194
+ --app-hue-pink: var(--color-pink-400);
195
+ --app-hue-rose: var(--color-rose-400);
196
+ }
197
+ .light {
198
+ --app-hue-slate: var(--color-slate-600);
199
+ --app-hue-red: var(--color-red-600);
200
+ --app-hue-orange: var(--color-orange-600);
201
+ --app-hue-amber: var(--color-amber-600);
202
+ --app-hue-yellow: var(--color-yellow-600);
203
+ --app-hue-lime: var(--color-lime-600);
204
+ --app-hue-green: var(--color-green-600);
205
+ --app-hue-emerald: var(--color-emerald-600);
206
+ --app-hue-teal: var(--color-teal-600);
207
+ --app-hue-cyan: var(--color-cyan-600);
208
+ --app-hue-sky: var(--color-sky-600);
209
+ --app-hue-blue: var(--color-blue-600);
210
+ --app-hue-indigo: var(--color-indigo-600);
211
+ --app-hue-violet: var(--color-violet-600);
212
+ --app-hue-purple: var(--color-purple-600);
213
+ --app-hue-fuchsia: var(--color-fuchsia-600);
214
+ --app-hue-pink: var(--color-pink-600);
215
+ --app-hue-rose: var(--color-rose-600);
216
+ }
217
+
218
+ @theme inline {
219
+ --color-app-hue-slate: var(--app-hue-slate);
220
+ --color-app-hue-red: var(--app-hue-red);
221
+ --color-app-hue-orange: var(--app-hue-orange);
222
+ --color-app-hue-amber: var(--app-hue-amber);
223
+ --color-app-hue-yellow: var(--app-hue-yellow);
224
+ --color-app-hue-lime: var(--app-hue-lime);
225
+ --color-app-hue-green: var(--app-hue-green);
226
+ --color-app-hue-emerald: var(--app-hue-emerald);
227
+ --color-app-hue-teal: var(--app-hue-teal);
228
+ --color-app-hue-cyan: var(--app-hue-cyan);
229
+ --color-app-hue-sky: var(--app-hue-sky);
230
+ --color-app-hue-blue: var(--app-hue-blue);
231
+ --color-app-hue-indigo: var(--app-hue-indigo);
232
+ --color-app-hue-violet: var(--app-hue-violet);
233
+ --color-app-hue-purple: var(--app-hue-purple);
234
+ --color-app-hue-fuchsia: var(--app-hue-fuchsia);
235
+ --color-app-hue-pink: var(--app-hue-pink);
236
+ --color-app-hue-rose: var(--app-hue-rose);
237
+ --color-app-950: var(--app-950);
238
+ --color-app-100: var(--app-100);
239
+ --color-app-600: var(--app-600);
240
+ --color-app-500: var(--app-500);
241
+ --color-app-400: var(--app-400);
242
+ --color-app-canvas: var(--app-bg-canvas);
243
+ --color-app-secondary-50: var(--app-secondary-50);
244
+ --color-app-secondary-100: var(--app-secondary-100);
245
+ --color-app-secondary-200: var(--app-secondary-200);
246
+ --color-app-secondary-300: var(--app-secondary-300);
247
+ --color-app-secondary-400: var(--app-secondary-400);
248
+ --color-app-secondary-500: var(--app-secondary-500);
249
+ --color-app-secondary-600: var(--app-secondary-600);
250
+ --color-app-secondary-700: var(--app-secondary-700);
251
+ --color-app-secondary-800: var(--app-secondary-800);
252
+ --color-app-secondary-900: var(--app-secondary-900);
253
+ --color-app-secondary-950: var(--app-secondary-950);
254
+ --color-app-success-50: var(--app-success-50);
255
+ --color-app-success-100: var(--app-success-100);
256
+ --color-app-success-200: var(--app-success-200);
257
+ --color-app-success-300: var(--app-success-300);
258
+ --color-app-success-400: var(--app-success-400);
259
+ --color-app-success-500: var(--app-success-500);
260
+ --color-app-success-600: var(--app-success-600);
261
+ --color-app-success-700: var(--app-success-700);
262
+ --color-app-success-800: var(--app-success-800);
263
+ --color-app-success-900: var(--app-success-900);
264
+ --color-app-success-950: var(--app-success-950);
265
+ --color-app-info-50: var(--app-info-50);
266
+ --color-app-info-100: var(--app-info-100);
267
+ --color-app-info-200: var(--app-info-200);
268
+ --color-app-info-300: var(--app-info-300);
269
+ --color-app-info-400: var(--app-info-400);
270
+ --color-app-info-500: var(--app-info-500);
271
+ --color-app-info-600: var(--app-info-600);
272
+ --color-app-info-700: var(--app-info-700);
273
+ --color-app-info-800: var(--app-info-800);
274
+ --color-app-info-900: var(--app-info-900);
275
+ --color-app-info-950: var(--app-info-950);
276
+ --color-app-warning-50: var(--app-warning-50);
277
+ --color-app-warning-100: var(--app-warning-100);
278
+ --color-app-warning-200: var(--app-warning-200);
279
+ --color-app-warning-300: var(--app-warning-300);
280
+ --color-app-warning-400: var(--app-warning-400);
281
+ --color-app-warning-500: var(--app-warning-500);
282
+ --color-app-warning-600: var(--app-warning-600);
283
+ --color-app-warning-700: var(--app-warning-700);
284
+ --color-app-warning-800: var(--app-warning-800);
285
+ --color-app-warning-900: var(--app-warning-900);
286
+ --color-app-warning-950: var(--app-warning-950);
287
+ --color-app-error-50: var(--app-error-50);
288
+ --color-app-error-100: var(--app-error-100);
289
+ --color-app-error-200: var(--app-error-200);
290
+ --color-app-error-300: var(--app-error-300);
291
+ --color-app-error-400: var(--app-error-400);
292
+ --color-app-error-500: var(--app-error-500);
293
+ --color-app-error-600: var(--app-error-600);
294
+ --color-app-error-700: var(--app-error-700);
295
+ --color-app-error-800: var(--app-error-800);
296
+ --color-app-error-900: var(--app-error-900);
297
+ --color-app-error-950: var(--app-error-950);
298
+ }
@@ -154,16 +154,16 @@ function reveal(blockId: string): void {
154
154
  <UModal v-model:open="open" :title="t('assistant.title')" :ui="{ content: 'max-w-2xl' }">
155
155
  <template #body>
156
156
  <div class="space-y-4">
157
- <p class="text-sm text-slate-400">{{ t('assistant.intro') }}</p>
157
+ <p class="text-sm text-muted">{{ t('assistant.intro') }}</p>
158
158
 
159
159
  <!-- The read FAILED: this deployment may well have a model, and nobody can tell from here.
160
160
  So it offers the read again instead of explaining a configuration that may be fine. -->
161
161
  <div
162
162
  v-if="surface === 'unreadable'"
163
- class="flex items-start gap-2 rounded-md bg-slate-800/60 p-3 text-sm text-slate-300"
163
+ class="flex items-start gap-2 rounded-md bg-elevated/60 p-3 text-sm text-toned"
164
164
  data-testid="assistant-unreadable"
165
165
  >
166
- <UIcon name="i-lucide-unplug" class="mt-0.5 h-4 w-4 shrink-0 text-amber-400" />
166
+ <UIcon name="i-lucide-unplug" class="mt-0.5 h-4 w-4 shrink-0 text-app-warning-400" />
167
167
  <div class="space-y-2">
168
168
  <p>{{ t('assistant.unreadable') }}</p>
169
169
  <UButton
@@ -181,10 +181,10 @@ function reveal(blockId: string): void {
181
181
  <!-- No model wired: say so, rather than offering a box whose every submit would 503. -->
182
182
  <div
183
183
  v-else-if="surface === 'unwired'"
184
- class="flex items-start gap-2 rounded-md bg-slate-800/60 p-3 text-sm text-slate-300"
184
+ class="flex items-start gap-2 rounded-md bg-elevated/60 p-3 text-sm text-toned"
185
185
  data-testid="assistant-unwired"
186
186
  >
187
- <UIcon name="i-lucide-plug" class="mt-0.5 h-4 w-4 shrink-0 text-slate-500" />
187
+ <UIcon name="i-lucide-plug" class="mt-0.5 h-4 w-4 shrink-0 text-dimmed" />
188
188
  <span>{{ t('assistant.unavailable') }}</span>
189
189
  </div>
190
190
 
@@ -192,10 +192,10 @@ function reveal(blockId: string): void {
192
192
  and every submit against it would be refused with `assistant_no_actions`. -->
193
193
  <div
194
194
  v-else-if="surface === 'no_actions'"
195
- class="flex items-start gap-2 rounded-md bg-slate-800/60 p-3 text-sm text-slate-300"
195
+ class="flex items-start gap-2 rounded-md bg-elevated/60 p-3 text-sm text-toned"
196
196
  data-testid="assistant-no-actions"
197
197
  >
198
- <UIcon name="i-lucide-list-x" class="mt-0.5 h-4 w-4 shrink-0 text-slate-500" />
198
+ <UIcon name="i-lucide-list-x" class="mt-0.5 h-4 w-4 shrink-0 text-dimmed" />
199
199
  <span>{{ t('assistant.noActions') }}</span>
200
200
  </div>
201
201
 
@@ -240,7 +240,7 @@ function reveal(blockId: string): void {
240
240
  role="status"
241
241
  :aria-live="submitReason ? 'polite' : 'off'"
242
242
  class="flex items-center gap-1 text-xs"
243
- :class="submitReason ? 'text-amber-400' : 'text-slate-500'"
243
+ :class="submitReason ? 'text-app-warning-400' : 'text-dimmed'"
244
244
  data-testid="assistant-submit-status"
245
245
  >
246
246
  <UIcon
@@ -254,7 +254,7 @@ function reveal(blockId: string): void {
254
254
 
255
255
  <!-- What it can do, always visible: the catalog is the affordance. -->
256
256
  <div v-if="examples.length" class="space-y-2">
257
- <p class="text-xs font-medium uppercase tracking-wide text-slate-500">
257
+ <p class="text-xs font-medium uppercase tracking-wide text-dimmed">
258
258
  {{ t('assistant.examplesTitle') }}
259
259
  </p>
260
260
  <div class="flex flex-col gap-1">
@@ -262,11 +262,11 @@ function reveal(blockId: string): void {
262
262
  v-for="entry in examples"
263
263
  :key="entry.actionId"
264
264
  type="button"
265
- class="rounded-md px-2 py-1 text-left text-sm text-slate-300 hover:bg-slate-800"
265
+ class="rounded-md px-2 py-1 text-left text-sm text-toned hover:bg-elevated"
266
266
  @click="useExample(entry.example)"
267
267
  >
268
- <span class="text-slate-400">{{ entry.label }}</span>
269
- <span class="block text-xs text-slate-500">“{{ entry.example }}”</span>
268
+ <span class="text-muted">{{ entry.label }}</span>
269
+ <span class="block text-xs text-dimmed">“{{ entry.example }}”</span>
270
270
  </button>
271
271
  </div>
272
272
  </div>
@@ -274,12 +274,12 @@ function reveal(blockId: string): void {
274
274
  <!-- The outcome. Rendered from the turn's data; no model prose reaches this. -->
275
275
  <div
276
276
  v-if="outcome"
277
- class="rounded-md border border-slate-700 p-3 text-sm"
277
+ class="rounded-md border border-muted p-3 text-sm"
278
278
  data-testid="assistant-outcome"
279
279
  >
280
280
  <template v-if="outcome.status === 'performed'">
281
- <div class="flex items-start gap-2 text-slate-200">
282
- <UIcon name="i-lucide-check" class="mt-0.5 h-4 w-4 shrink-0 text-emerald-400" />
281
+ <div class="flex items-start gap-2 text-default">
282
+ <UIcon name="i-lucide-check" class="mt-0.5 h-4 w-4 shrink-0 text-app-success-400" />
283
283
  <div class="space-y-2">
284
284
  <p v-if="outcome.result.actionId === 'declare-service-dependency'">
285
285
  {{
@@ -329,8 +329,11 @@ function reveal(blockId: string): void {
329
329
  </template>
330
330
 
331
331
  <template v-else-if="outcome.status === 'needs_input'">
332
- <div class="flex items-start gap-2 text-slate-200">
333
- <UIcon name="i-lucide-help-circle" class="mt-0.5 h-4 w-4 shrink-0 text-amber-400" />
332
+ <div class="flex items-start gap-2 text-default">
333
+ <UIcon
334
+ name="i-lucide-help-circle"
335
+ class="mt-0.5 h-4 w-4 shrink-0 text-app-warning-400"
336
+ />
334
337
  <div class="space-y-2">
335
338
  <p>{{ t(`assistant.needsInput.${outcome.reason}`) }}</p>
336
339
  <div v-if="outcome.candidates.length" class="flex flex-wrap gap-1">
@@ -351,11 +354,8 @@ function reveal(blockId: string): void {
351
354
  </template>
352
355
 
353
356
  <template v-else>
354
- <div class="flex items-start gap-2 text-slate-200">
355
- <UIcon
356
- name="i-lucide-circle-slash"
357
- class="mt-0.5 h-4 w-4 shrink-0 text-slate-500"
358
- />
357
+ <div class="flex items-start gap-2 text-default">
358
+ <UIcon name="i-lucide-circle-slash" class="mt-0.5 h-4 w-4 shrink-0 text-dimmed" />
359
359
  <p>{{ t('assistant.declined') }}</p>
360
360
  </div>
361
361
  </template>
@@ -22,7 +22,7 @@ onMounted(() => void auth.bootstrap().finally(() => markBoot('auth-ready')))
22
22
  <template>
23
23
  <div
24
24
  v-if="!auth.ready"
25
- class="flex h-screen w-screen flex-col items-center justify-center gap-3 bg-slate-950 text-slate-400"
25
+ class="flex h-screen w-screen flex-col items-center justify-center gap-3 bg-app-950 text-muted"
26
26
  >
27
27
  <UIcon name="i-lucide-loader" class="h-8 w-8 animate-spin" />
28
28
  <span class="text-sm">{{ t('auth.gate.loading') }}</span>
@@ -18,13 +18,13 @@ function reload() {
18
18
 
19
19
  <template>
20
20
  <div
21
- class="flex h-screen w-screen flex-col items-center justify-center bg-slate-950 p-6 text-slate-200"
21
+ class="flex h-screen w-screen flex-col items-center justify-center bg-app-950 p-6 text-default"
22
22
  >
23
23
  <div class="w-full max-w-2xl">
24
24
  <div class="mb-6 text-center">
25
- <UIcon name="i-lucide-server-cog" class="mx-auto mb-3 h-10 w-10 text-amber-400" />
25
+ <UIcon name="i-lucide-server-cog" class="mx-auto mb-3 h-10 w-10 text-app-warning-400" />
26
26
  <h1 class="text-lg font-semibold">{{ t('app.misconfigured.title') }}</h1>
27
- <p class="mx-auto mt-2 max-w-lg text-sm text-slate-400">
27
+ <p class="mx-auto mt-2 max-w-lg text-sm text-muted">
28
28
  {{ t('app.misconfigured.intro') }}
29
29
  </p>
30
30
  </div>
@@ -33,12 +33,12 @@ function reload() {
33
33
  <li
34
34
  v-for="problem in problems"
35
35
  :key="problem.key"
36
- class="rounded-lg border border-slate-800 bg-slate-900/60 p-4"
36
+ class="rounded-lg border border-default bg-default/60 p-4"
37
37
  >
38
- <code class="text-sm font-semibold text-amber-300">{{ problem.key }}</code>
39
- <p class="mt-1 text-sm text-slate-300">{{ problem.summary }}</p>
40
- <p class="mt-2 text-sm text-slate-400">
41
- <span class="font-medium text-slate-300">{{ t('app.misconfigured.howToFix') }}</span>
38
+ <code class="text-sm font-semibold text-app-warning-300">{{ problem.key }}</code>
39
+ <p class="mt-1 text-sm text-toned">{{ problem.summary }}</p>
40
+ <p class="mt-2 text-sm text-muted">
41
+ <span class="font-medium text-toned">{{ t('app.misconfigured.howToFix') }}</span>
42
42
  {{ problem.remedy }}
43
43
  </p>
44
44
  <a
@@ -46,7 +46,7 @@ function reload() {
46
46
  :href="problem.docsUrl"
47
47
  target="_blank"
48
48
  rel="noopener noreferrer"
49
- class="mt-2 inline-flex items-center gap-1 text-sm text-amber-300 hover:text-amber-200"
49
+ class="mt-2 inline-flex items-center gap-1 text-sm text-app-warning-300 hover:text-app-warning-200"
50
50
  >
51
51
  <UIcon name="i-lucide-book-open" class="h-4 w-4" />
52
52
  {{ t('app.misconfigured.viewDocs') }}
@@ -59,7 +59,7 @@ function reload() {
59
59
  {{ t('app.misconfigured.reload') }}
60
60
  </UButton>
61
61
  </div>
62
- <p class="mt-4 text-center text-xs text-slate-500">{{ t('app.misconfigured.hint') }}</p>
62
+ <p class="mt-4 text-center text-xs text-dimmed">{{ t('app.misconfigured.hint') }}</p>
63
63
  </div>
64
64
  </div>
65
65
  </template>