@cat-factory/app 0.302.1 → 0.303.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +16 -0
- package/app/app.config.ts +19 -10
- package/app/assets/css/main.css +13 -13
- package/app/assets/css/prose.css +22 -22
- package/app/assets/css/tokens.css +298 -0
- package/app/components/assistant/AssistantModal.vue +22 -22
- package/app/components/auth/AuthGate.vue +1 -1
- package/app/components/auth/BackendMisconfiguredScreen.vue +10 -10
- package/app/components/auth/LoginScreen.vue +34 -36
- package/app/components/auth/ResetPasswordScreen.vue +12 -12
- package/app/components/auth/UserMenu.vue +4 -4
- package/app/components/binaryCandidates/BinaryCandidatesWindow.vue +27 -25
- package/app/components/binaryOutput/BinaryOutputReport.vue +15 -15
- package/app/components/binaryOutput/StoredAssetView.vue +5 -5
- package/app/components/board/AddTaskModal.vue +17 -20
- package/app/components/board/AgentFailureCard.vue +11 -11
- package/app/components/board/AgentFailureHistory.vue +2 -2
- package/app/components/board/BoardCanvas.vue +6 -5
- package/app/components/board/CreateInitiativeModal.vue +8 -10
- package/app/components/board/DependencyConnectOverlay.vue +1 -1
- package/app/components/board/FailureHistoryList.vue +7 -7
- package/app/components/board/RecurringPipelineModal.vue +17 -17
- package/app/components/board/ReviewFrictionDialog.vue +6 -6
- package/app/components/board/StepExecutionHistory.vue +13 -13
- package/app/components/board/TaskDependencyEdges.vue +8 -8
- package/app/components/board/nodes/AgentChip.vue +10 -10
- package/app/components/board/nodes/BlockNode.vue +29 -29
- package/app/components/board/nodes/DecisionBadge.vue +2 -2
- package/app/components/board/nodes/EpicNode.vue +14 -10
- package/app/components/board/nodes/FrameSwimlanes.vue +7 -9
- package/app/components/board/nodes/InitiativeCard.vue +8 -8
- package/app/components/board/nodes/LaneGroup.vue +1 -1
- package/app/components/board/nodes/LaneTask.vue +2 -2
- package/app/components/board/nodes/ResizeGrips.vue +4 -4
- package/app/components/board/nodes/TaskCard.vue +18 -18
- package/app/components/board/nodes/TaskLane.vue +5 -5
- package/app/components/board/nodes/TaskPipelineMini.vue +18 -18
- package/app/components/bootstrap/AdoptionReviewModal.vue +29 -26
- package/app/components/bootstrap/BootstrapModal.vue +21 -23
- package/app/components/bootstrap/BootstrapRunSteps.vue +1 -1
- package/app/components/brainstorm/BrainstormWindow.vue +30 -33
- package/app/components/bugFishing/BugFishingWindow.vue +49 -49
- package/app/components/clarity/ClarityReviewWindow.vue +30 -30
- package/app/components/common/AsyncViewError.vue +5 -5
- package/app/components/common/ClarificationItem.vue +8 -13
- package/app/components/common/ConfirmDialog.vue +4 -2
- package/app/components/common/DescriptorFields.vue +1 -1
- package/app/components/common/EmptyState.vue +3 -3
- package/app/components/common/InterviewGateNotice.vue +7 -7
- package/app/components/common/KeyboardShortcutsHelp.vue +1 -1
- package/app/components/common/MarkdownProse.vue +14 -13
- package/app/components/consensus/ConsensusSessionWindow.vue +26 -26
- package/app/components/context/ContextAttachmentFields.vue +17 -17
- package/app/components/docs/DocInterviewWindow.vue +14 -14
- package/app/components/documents/ContextDocumentPicker.vue +17 -17
- package/app/components/documents/DocumentImportModal.vue +7 -7
- package/app/components/documents/DocumentSourceConnectModal.vue +3 -3
- package/app/components/documents/DocumentSyncState.vue +5 -5
- package/app/components/documents/DocumentTemplatesModal.vue +15 -15
- package/app/components/documents/RepoContextDocPicker.vue +5 -5
- package/app/components/documents/SpawnPreviewModal.vue +12 -12
- package/app/components/documents/StartFromDesignModal.vue +11 -11
- package/app/components/documents/TaskContextDocs.vue +5 -5
- package/app/components/environments/EnvSetupStepper.vue +6 -6
- package/app/components/environments/EnvironmentStatusPanel.vue +17 -17
- package/app/components/environments/steps/EnvPickStep.vue +3 -3
- package/app/components/environments/steps/EnvPreflightStep.vue +9 -9
- package/app/components/environments/steps/EnvReviewStep.vue +25 -22
- package/app/components/environments/steps/EnvSaveStep.vue +7 -5
- package/app/components/environments/steps/JourneyStepNav.vue +1 -1
- package/app/components/focus/BlockFocusView.vue +17 -19
- package/app/components/followUp/FollowUpWindow.vue +23 -23
- package/app/components/forkDecision/ForkDecisionWindow.vue +37 -39
- package/app/components/foundational/FoundationalContractSummary.vue +7 -7
- package/app/components/foundational/FoundationalServiceCatalogList.vue +11 -11
- package/app/components/foundational/FoundationalServiceManager.vue +1 -1
- package/app/components/foundational/FoundationalServiceRegistry.vue +13 -13
- package/app/components/foundational/FoundationalServiceSources.vue +13 -13
- package/app/components/foundational/FoundationalSuppressions.vue +7 -7
- package/app/components/foundational/ServiceCatalogConnection.vue +10 -10
- package/app/components/fragments/FragmentLibraryManager.vue +41 -44
- package/app/components/fragments/FragmentSelector.vue +13 -13
- package/app/components/fragments/GitHubDocUrlImport.vue +1 -1
- package/app/components/gates/GateFailingCheckList.vue +5 -5
- package/app/components/gates/GateResultView.vue +50 -47
- package/app/components/github/AddServiceFromRepoModal.vue +14 -14
- package/app/components/github/BranchProtectionPreflight.vue +13 -13
- package/app/components/github/GitHubConnect.vue +7 -7
- package/app/components/github/GitHubOnboarding.vue +7 -7
- package/app/components/github/GitHubPanel.vue +37 -40
- package/app/components/github/RepoTreeBrowser.vue +18 -18
- package/app/components/humanTest/HumanTestWindow.vue +30 -33
- package/app/components/initiative/InitiativePlanNotice.vue +5 -5
- package/app/components/initiative/InitiativePlanReview.vue +27 -29
- package/app/components/initiative/InitiativePlanningWindow.vue +10 -10
- package/app/components/initiative/InitiativeTrackerWindow.vue +71 -65
- package/app/components/inputGate/InputGateNotice.vue +2 -4
- package/app/components/judge/JudgeResultView.vue +30 -32
- package/app/components/kaizen/KaizenPanel.vue +40 -36
- package/app/components/kaizen/KaizenStepStatus.vue +21 -21
- package/app/components/layout/AccountAuditLog.vue +10 -10
- package/app/components/layout/AccountDeploymentSettings.vue +20 -20
- package/app/components/layout/AccountFailureKindRules.vue +13 -13
- package/app/components/layout/AccountFoundationalSettings.vue +1 -1
- package/app/components/layout/AccountFragmentSettings.vue +1 -1
- package/app/components/layout/AccountModelPolicySettings.vue +9 -9
- package/app/components/layout/AccountPlatformAlertSettings.vue +11 -11
- package/app/components/layout/AccountRiskPolicySettings.vue +2 -2
- package/app/components/layout/AccountRunCredentialSettings.vue +5 -5
- package/app/components/layout/AccountSkillSettings.vue +1 -1
- package/app/components/layout/AccountTeamSettings.vue +23 -15
- package/app/components/layout/AiProvidersBanner.vue +11 -8
- package/app/components/layout/AppearanceSwitcher.vue +108 -0
- package/app/components/layout/BoardSwitcher.vue +8 -11
- package/app/components/layout/BoardToolbar.vue +3 -3
- package/app/components/layout/CommandBar.vue +7 -9
- package/app/components/layout/ConnectionStatusBanner.vue +2 -2
- package/app/components/layout/DefaultTestEnvBanner.vue +5 -5
- package/app/components/layout/GitHubPatBanner.vue +5 -5
- package/app/components/layout/GitHubPatPermissionsBanner.vue +16 -10
- package/app/components/layout/InfraSetupBanner.vue +6 -6
- package/app/components/layout/IntegrationsHub.vue +15 -15
- package/app/components/layout/LanguageSwitcher.vue +5 -5
- package/app/components/layout/ModelProvidersHub.vue +13 -16
- package/app/components/layout/NotificationsInbox.vue +10 -10
- package/app/components/layout/PersonalSetupModal.vue +8 -8
- package/app/components/layout/ProviderConfigBanner.vue +4 -4
- package/app/components/layout/RolePrompt.vue +7 -7
- package/app/components/layout/SideBar.vue +6 -4
- package/app/components/layout/SpendWarningBanner.vue +17 -14
- package/app/components/layout/TranslationWarningBanner.vue +4 -4
- package/app/components/layout/UiModeSwitcher.vue +13 -13
- package/app/components/layout/UiRoleSwitcher.vue +8 -8
- package/app/components/layout/WorkspaceMembersSettings.vue +15 -11
- package/app/components/media/ArtifactLightbox.vue +13 -13
- package/app/components/media/ImageCompare.vue +31 -24
- package/app/components/merge/MergeEffortChips.vue +2 -2
- package/app/components/notifications/NotificationSettingsPanel.vue +14 -12
- package/app/components/observability/OutcomeFilterChips.vue +6 -6
- package/app/components/observability/RunFailureSummary.vue +28 -25
- package/app/components/observability/StepMetricsBar.vue +26 -28
- package/app/components/observability/StepModelActivity.vue +2 -2
- package/app/components/observability/ToolCallList.vue +24 -24
- package/app/components/outcome/OutcomeSummaryWindow.vue +47 -47
- package/app/components/palettes/AgentPalette.vue +8 -8
- package/app/components/palettes/AgentTierSelect.vue +1 -1
- package/app/components/palettes/PipelinePurposeSelect.vue +1 -1
- package/app/components/panels/AgentStepDetail.vue +52 -51
- package/app/components/panels/AttemptEntryHeader.vue +4 -6
- package/app/components/panels/DecisionModal.vue +7 -7
- package/app/components/panels/GenericStructuredResultView.vue +7 -7
- package/app/components/panels/InspectorPanel.vue +17 -17
- package/app/components/panels/MergerResultView.vue +19 -19
- package/app/components/panels/ObservabilityPanel.vue +115 -123
- package/app/components/panels/OperatorDashboardPanel.vue +89 -97
- package/app/components/panels/ReportsPanel.vue +69 -66
- package/app/components/panels/ReportsSpendBreakdown.vue +9 -9
- package/app/components/panels/ResultWindowShell.vue +38 -38
- package/app/components/panels/RunDetailLoadState.vue +2 -2
- package/app/components/panels/StepContainerStatus.vue +9 -9
- package/app/components/panels/StepDelegatedStatus.logic.spec.ts +135 -0
- package/app/components/panels/StepDelegatedStatus.logic.ts +160 -0
- package/app/components/panels/StepDelegatedStatus.vue +181 -0
- package/app/components/panels/StepEffortReport.vue +16 -15
- package/app/components/panels/StepFragmentAdherence.vue +14 -10
- package/app/components/panels/StepMetadataCard.vue +74 -45
- package/app/components/panels/StepReproductionReport.vue +25 -21
- package/app/components/panels/StepRunMeta.vue +20 -20
- package/app/components/panels/StepTestReport.logic.spec.ts +8 -3
- package/app/components/panels/StepTestReport.logic.ts +4 -4
- package/app/components/panels/StepTestReport.vue +28 -28
- package/app/components/panels/StepToolServers.vue +14 -11
- package/app/components/panels/StepValidationReport.vue +7 -7
- package/app/components/panels/inspector/ContainerSummary.vue +9 -9
- package/app/components/panels/inspector/DocReferenceRepos.vue +3 -3
- package/app/components/panels/inspector/EnvProbeReport.vue +24 -27
- package/app/components/panels/inspector/EpicChildren.vue +8 -12
- package/app/components/panels/inspector/FrontendBindingsResolved.vue +11 -11
- package/app/components/panels/inspector/FrontendConfig.vue +37 -41
- package/app/components/panels/inspector/InitiativeInspector.vue +3 -3
- package/app/components/panels/inspector/InspectorSection.vue +6 -6
- package/app/components/panels/inspector/RecurringScheduleSettings.vue +16 -19
- package/app/components/panels/inspector/ServiceConnections.vue +2 -2
- package/app/components/panels/inspector/ServiceReleaseHealthConfig.vue +2 -2
- package/app/components/panels/inspector/ServiceSelfTests.vue +21 -17
- package/app/components/panels/inspector/ServiceTestConfig.vue +51 -59
- package/app/components/panels/inspector/ServiceTestSecrets.vue +5 -5
- package/app/components/panels/inspector/ServiceTestingContext.vue +3 -3
- package/app/components/panels/inspector/ServiceValidationConfig.vue +2 -2
- package/app/components/panels/inspector/TaskAgentConfig.vue +3 -3
- package/app/components/panels/inspector/TaskAprioriBranches.vue +8 -5
- package/app/components/panels/inspector/TaskDependencies.vue +1 -1
- package/app/components/panels/inspector/TaskEstimateBadge.vue +11 -11
- package/app/components/panels/inspector/TaskExecution.vue +17 -17
- package/app/components/panels/inspector/TaskReviewTarget.vue +2 -2
- package/app/components/panels/inspector/TaskRunSettings.vue +35 -37
- package/app/components/panels/inspector/TaskStructure.vue +3 -3
- package/app/components/pipeline/AgentKindIcon.vue +1 -1
- package/app/components/pipeline/AgentPromptEditor.vue +17 -17
- package/app/components/pipeline/BinaryOutputStepPicker.vue +42 -56
- package/app/components/pipeline/EstimateThresholdFields.vue +4 -4
- package/app/components/pipeline/GateConfigFields.vue +13 -10
- package/app/components/pipeline/IterationCapPrompt.vue +4 -2
- package/app/components/pipeline/PipelineBuilder.vue +47 -55
- package/app/components/pipeline/PipelineHealthModal.vue +27 -29
- package/app/components/pipeline/PipelinePicker.vue +10 -10
- package/app/components/pipeline/PipelinePreview.vue +10 -10
- package/app/components/pipeline/PipelineProgress.vue +64 -67
- package/app/components/prReview/PrReviewPhaseBadge.vue +7 -7
- package/app/components/prReview/PrReviewWindow.vue +75 -77
- package/app/components/providers/AiPresetMismatchDialog.vue +5 -5
- package/app/components/providers/AiProviderOnboardingModal.vue +9 -9
- package/app/components/providers/ApiKeysSection.vue +13 -13
- package/app/components/providers/PersonalCredentialModal.vue +2 -2
- package/app/components/providers/PersonalSubscriptionSection.vue +10 -10
- package/app/components/providers/SignInRequiredNotice.vue +1 -1
- package/app/components/providers/VendorCredentialsModal.vue +10 -10
- package/app/components/provisioning/ProvisioningLogsDrawer.vue +13 -13
- package/app/components/ralph/RalphLoopResultView.vue +28 -30
- package/app/components/recurring/RecurrenceEditor.vue +2 -2
- package/app/components/requirements/RequirementsReviewWindow.vue +51 -58
- package/app/components/riskPolicy/RiskPolicyPicker.vue +12 -15
- package/app/components/riskPolicy/RiskPolicyPreview.vue +14 -14
- package/app/components/sandbox/SandboxPanel.vue +58 -59
- package/app/components/settings/AccountSettingsPanel.vue +1 -1
- package/app/components/settings/ApiTokensPanel.vue +10 -10
- package/app/components/settings/BudgetSettings.vue +18 -22
- package/app/components/settings/CapabilityCredentialsPanel.vue +15 -15
- package/app/components/settings/CloudflareHandlerSection.vue +20 -20
- package/app/components/settings/ComposeEnvironmentSetupSection.vue +13 -13
- package/app/components/settings/ConnectionTestVerdict.vue +3 -3
- package/app/components/settings/ConnectionWarnings.vue +1 -1
- package/app/components/settings/ConsensusGroupsSection.vue +27 -35
- package/app/components/settings/CustomManifestTypeEditor.vue +10 -10
- package/app/components/settings/DefaultProvisionTypeSection.vue +6 -6
- package/app/components/settings/InfraHandlersConfigurator.vue +24 -22
- package/app/components/settings/InfrastructureBackendPicker.vue +6 -6
- package/app/components/settings/InfrastructureWindow.vue +5 -5
- package/app/components/settings/IssueTrackerPanel.vue +29 -23
- package/app/components/settings/KubernetesEngineForm.vue +11 -11
- package/app/components/settings/KubernetesEnvironmentForm.vue +4 -4
- package/app/components/settings/LocalContainerPoolSettings.vue +6 -11
- package/app/components/settings/LocalModelEndpointsPanel.vue +20 -18
- package/app/components/settings/McpAuthorizeScreen.vue +13 -15
- package/app/components/settings/McpOAuthCallbackScreen.vue +16 -10
- package/app/components/settings/MergeClassRulesEditor.vue +6 -9
- package/app/components/settings/MergeRolePolicyEditor.vue +16 -16
- package/app/components/settings/ModelConfigurationPanel.vue +23 -30
- package/app/components/settings/ModelPresetHealthModal.vue +15 -13
- package/app/components/settings/ObservabilityConnectionPanel.vue +4 -4
- package/app/components/settings/OpenRouterCatalogPanel.vue +23 -19
- package/app/components/settings/PackageRegistriesPanel.vue +8 -8
- package/app/components/settings/ProviderConnectionTab.vue +8 -11
- package/app/components/settings/ProviderManifestEditor.vue +9 -9
- package/app/components/settings/ProviderPreferenceEditor.vue +8 -8
- package/app/components/settings/RiskPolicyCreateForm.vue +10 -10
- package/app/components/settings/RiskPolicyEditorRow.vue +14 -14
- package/app/components/settings/RiskPolicyHealthModal.vue +15 -13
- package/app/components/settings/RiskPolicyInheritedRow.vue +1 -1
- package/app/components/settings/RiskPolicyPanel.vue +10 -15
- package/app/components/settings/ServiceFragmentDefaultsPanel.vue +7 -7
- package/app/components/settings/SharedStacksPanel.vue +9 -12
- package/app/components/settings/TaskSourceCard.vue +4 -4
- package/app/components/settings/TaskTypeSuppressionsPanel.vue +6 -6
- package/app/components/settings/ToolServerChecklist.vue +36 -29
- package/app/components/settings/UsageSettings.vue +15 -15
- package/app/components/settings/UserSecretsSection.vue +9 -12
- package/app/components/settings/WorkspaceMetadataSettings.vue +5 -5
- package/app/components/settings/WorkspaceSettingsPanel.vue +47 -47
- package/app/components/skills/ReviewSkillQueue.vue +10 -10
- package/app/components/skills/SkillLibraryManager.vue +23 -20
- package/app/components/slack/SlackPanel.vue +13 -17
- package/app/components/spec/ServiceSpecWindow.vue +45 -42
- package/app/components/tasks/BugHuntModal.vue +24 -27
- package/app/components/tasks/ContextIssuePicker.vue +11 -11
- package/app/components/tasks/TaskContextIssues.vue +3 -3
- package/app/components/tasks/TaskImportModal.vue +7 -7
- package/app/components/tasks/TaskSourceConnectModal.vue +10 -8
- package/app/components/testing/TestReportWindow.vue +99 -82
- package/app/components/theme/ThemeImportModal.vue +115 -0
- package/app/components/tutorial/TutorialCatalogue.vue +9 -9
- package/app/components/tutorial/TutorialNudge.vue +5 -5
- package/app/components/tutorial/TutorialOverlay.vue +12 -12
- package/app/components/tutorial/TutorialPrompt.vue +6 -9
- package/app/components/vcs/GitLabConnect.vue +4 -4
- package/app/components/vcs/VcsConnectSurfaces.vue +2 -2
- package/app/components/visualConfirm/VisualConfirmationWindow.vue +36 -36
- package/app/composables/api/client.ts +6 -1
- package/app/composables/usePipelineErrorToast.ts +17 -0
- package/app/modular/agent-kinds.ts +24 -0
- package/app/pages/index.vue +5 -5
- package/app/plugins/theme.client.ts +125 -0
- package/app/spa-loading-template.html +52 -14
- package/app/stores/agents.ts +1 -1
- package/app/stores/theme.spec.ts +56 -0
- package/app/stores/theme.ts +87 -0
- package/app/types/domain.ts +19 -0
- package/app/types/execution.ts +4 -0
- package/app/utils/agentOutput.ts +1 -1
- package/app/utils/binaryOutput.ts +6 -6
- package/app/utils/bootstrapSteps.ts +14 -14
- package/app/utils/catalog.ts +87 -83
- package/app/utils/colorTint.ts +10 -0
- package/app/utils/failureKinds.ts +1 -0
- package/app/utils/observability.ts +3 -3
- package/app/utils/pipelineRender.ts +13 -17
- package/app/utils/swimlanes.ts +4 -4
- package/app/utils/theme/bootPalette.spec.ts +54 -0
- package/app/utils/theme/bootPalette.ts +108 -0
- package/app/utils/theme/builtins.spec.ts +38 -0
- package/app/utils/theme/builtins.ts +55 -0
- package/app/utils/theme/css.ts +162 -0
- package/app/utils/theme/doc.ts +353 -0
- package/app/utils/theme/link.ts +93 -0
- package/app/utils/theme/presets.ts +509 -0
- package/app/utils/theme/theme.spec.ts +224 -0
- package/i18n/locales/de.json +61 -4
- package/i18n/locales/en.json +70 -4
- package/i18n/locales/es.json +61 -4
- package/i18n/locales/fr.json +61 -4
- package/i18n/locales/he.json +61 -4
- package/i18n/locales/it.json +61 -4
- package/i18n/locales/ja.json +61 -4
- package/i18n/locales/pl.json +61 -4
- package/i18n/locales/tr.json +61 -4
- package/i18n/locales/uk.json +61 -4
- package/nuxt.config.ts +37 -11
- package/package.json +10 -9
package/README.md
CHANGED
|
@@ -288,6 +288,22 @@ it has nothing to do at mount, and running it there would announce a close that
|
|
|
288
288
|
|
|
289
289
|
A status → chip map feeding a `<UBadge :color="…">` types its values as `BadgeColor` (`utils/badge.ts`), which is derived from `UBadge`'s own prop type rather than restated as a literal union. Typed `string`, the binding does not compile and the reflex is `as any` at each call site: seven of them had accumulated. That cast also accepts a colour Nuxt UI does not define, which renders as an unstyled badge with nothing failing.
|
|
290
290
|
|
|
291
|
+
### Colour through theme tokens, never a fixed palette shade
|
|
292
|
+
|
|
293
|
+
Every colour in the SPA is a token that follows the THEME and the colour MODE. Three kinds exist:
|
|
294
|
+
|
|
295
|
+
- **Nuxt UI role tokens** for greys (`bg-default`, `bg-elevated`, `bg-accented`, `text-default`, `text-toned`, `text-muted`, `text-dimmed`, `text-highlighted`, `border-default`, `border-muted`) and the **bare aliases** for an accent at Nuxt UI's own shade (`text-primary`, `bg-warning/10`, `ring-error/25`).
|
|
296
|
+
- **The app's mirrored numbered tokens** (`app/assets/css/tokens.css`) for a STATUS surface painted in a specific ramp shade: `bg-app-950` / `text-app-100` / `text-app-600` / `bg-app-500` / `ring-app-400` for the five grey shades with no role token, `bg-app-canvas` for the board canvas (the one surface below the page background; in light the page surface `app-950` sits at neutral-100 rather than the mirror's 50 and the canvas at 200, so the ~350 translucent `bg-default/NN` panels keep an edge), and `text-app-warning-300` / `bg-app-error-950/40` / `border-app-success-800` for the five status ramps (`secondary`, `success`, `info`, `warning`, `error`). Each token's dark value is the exact ramp shade and its light value is the MIRRORED shade (`50↔950`, `100↔900`, `200↔800`, `300↔700`, `400↔600`, `500` its own midpoint), so a `300` text on a `950/40` fill reads on both surfaces from one class list. Every value is a reference into the `--ui-color-<alias>-<n>` ramps, so a theme that remaps `warning` recolours every warning surface. `primary` has NO numbered token: brand accents use the bare alias, which is what the editor's primary slider and `blackAsPrimary` address.
|
|
297
|
+
- **Category hues** (`text-app-hue-pink`, `var(--app-hue-teal)` in an inline style) for an IDENTITY colour: an agent kind, a task type, a pipeline step kind (`utils/catalog.ts`). One token per Tailwind hue, `400` in dark and `600` in light (Nuxt UI's own alias convention), referencing Tailwind's ramps because a category is not a status. A STATUS (task status, step state, test verdict, finding severity) is not a category and takes the alias directly (`var(--ui-warning)`, `var(--ui-success)`, `var(--ui-text-muted)` for planned / done / skipped), so the halo, the badge and the dot recolour together. A translucent tile behind a category glyph goes through `tint()` (`utils/colorTint.ts`), which also accepts the hex a deployment-registered kind may send. A theme recolours a hue through its `tokens` block.
|
|
298
|
+
- **Never** a raw Tailwind hue (`bg-slate-900`, `text-amber-300`, `text-pink-300`) nor a fixed numbered alias (`text-primary-400`, `bg-warning-950/40`): the first is welded to one palette and one mode, the second follows the palette but not the mode. `scripts/check-frontend-palette.mjs` (CI) bans both. `red` and `rose` both mean `error`.
|
|
299
|
+
- **Never** a fixed `white` / `black` utility (`bg-white`, `text-black`, `border-white/5`, `bg-white/[0.02]`): invisible or wrong in light mode. Use `border-inverted` (a selection ring), `border-default` / `bg-muted` (faint chrome) or `text-inverted` (text over a filled surface). A line that genuinely needs a fixed value says why with a `fixed-colour-ok:` comment, on that line or the one above it.
|
|
300
|
+
|
|
301
|
+
### Themes and colour mode
|
|
302
|
+
|
|
303
|
+
A **theme** is a Nuxt UI theme editor document (https://ui.nuxt.com/theme): the sparse `ThemeDoc` the editor edits and shares as a `?doc=` link, decoded by `utils/theme/link.ts` and typed in `utils/theme/doc.ts` (a port of the editor engine's tables). The app speaks THAT format rather than one of its own, so a theme built in the editor imports as-is and a built-in theme is a document a user could have exported. `utils/theme/builtins.ts` ships `Cat Factory` (the default; its `colors` MUST equal `app.config.ts`'s `ui.colors`, which paints the first frame) and the editor's own `Mono` preset, referenced from the preset table rather than copied. The `theme` store persists the pick and the user's imported documents in this browser; `plugins/theme.client.ts` applies the active document at runtime: aliases onto `appConfig.ui.colors` (Nuxt UI's own colours plugin re-emits the ramps), default variants and component overrides onto `appConfig.ui.<component>` merged INTO the layer's own overrides, and tokens / radius / fonts onto one `<style id="app-theme">` whose selectors anchor on the `data-theme` attribute on `<html>` (`utils/theme/css.ts`, which is also the write boundary for untrusted values). The faces the built-in themes name (Geist, Geist Mono) are self-hosted through `@nuxt/fonts` (`fonts.families` in `nuxt.config.ts`, pinned by `builtins.spec.ts`); a font an IMPORTED theme names is applied as a family name only, so it renders when the device or the deployment provides it. A editor link whose document equals one of the editor's presets collapses to `{ preset: 'mono' }`; `utils/theme/presets.ts` is a copy of the editor's preset table so such a link rebuilds (a decode table, not menu entries).
|
|
304
|
+
|
|
305
|
+
**Colour mode** (system / light / dark) is `@nuxtjs/color-mode`'s, registered by Nuxt UI, with its own persistence; `nuxt.config.ts` follows the system preference and falls back to dark. `AppearanceSwitcher` at the sidebar bottom is the one control for both axes. The pre-JS loading shell (`spa-loading-template.html`) cannot resolve a token (no stylesheet is loaded yet), so the plugin caches the computed colours of the four tokens the shell paints with, per colour mode, in `localStorage` (`utils/theme/bootPalette.ts`), and a two-line inline script in the shell applies the entry for the mode the `<head>` colour-mode script has already put on `<html>`. The hardcoded defaults are the default theme's, used only until a theme has been seen in that mode.
|
|
306
|
+
|
|
291
307
|
## Task swimlanes
|
|
292
308
|
|
|
293
309
|
A service frame lays its tasks out in **status lanes**, not at coordinates. Three lanes a reader
|
package/app/app.config.ts
CHANGED
|
@@ -1,25 +1,34 @@
|
|
|
1
1
|
export default defineAppConfig({
|
|
2
2
|
ui: {
|
|
3
|
+
// The default theme's alias map. It MUST equal `CAT_FACTORY_THEME.doc.colors`
|
|
4
|
+
// (`utils/theme/builtins.ts`): this is what the first paint renders from, before the theme
|
|
5
|
+
// plugin applies the active document over it (`theme.builtins.spec.ts` pins the equality).
|
|
3
6
|
colors: {
|
|
4
7
|
primary: 'indigo',
|
|
8
|
+
secondary: 'violet',
|
|
9
|
+
success: 'emerald',
|
|
10
|
+
info: 'sky',
|
|
11
|
+
warning: 'amber',
|
|
12
|
+
error: 'rose',
|
|
5
13
|
neutral: 'slate',
|
|
6
14
|
},
|
|
7
|
-
// Give every overlay the same layered
|
|
8
|
-
//
|
|
9
|
-
//
|
|
10
|
-
//
|
|
15
|
+
// Give every overlay the same layered surface the agent-run-details reader uses: the deep
|
|
16
|
+
// `app-950` surface (below `bg-default`) so the `bg-default` panels/cards inside pop, with
|
|
17
|
+
// `border-default` chrome. All tokens are theme role tokens (`app-950` is the hand-defined
|
|
18
|
+
// flipping token for the deep shade), so overlays track dark/light. Applies to all
|
|
19
|
+
// UModal/USlideover instances so they stay consistent without per-instance `:ui` overrides.
|
|
11
20
|
modal: {
|
|
12
21
|
slots: {
|
|
13
|
-
content: 'bg-
|
|
14
|
-
header: 'border-b border-
|
|
15
|
-
title: 'text-
|
|
22
|
+
content: 'bg-app-950 ring-default divide-default',
|
|
23
|
+
header: 'border-b border-default',
|
|
24
|
+
title: 'text-highlighted',
|
|
16
25
|
},
|
|
17
26
|
},
|
|
18
27
|
slideover: {
|
|
19
28
|
slots: {
|
|
20
|
-
content: 'bg-
|
|
21
|
-
header: 'border-b border-
|
|
22
|
-
title: 'text-
|
|
29
|
+
content: 'bg-app-950 ring-default divide-default',
|
|
30
|
+
header: 'border-b border-default',
|
|
31
|
+
title: 'text-highlighted',
|
|
23
32
|
},
|
|
24
33
|
},
|
|
25
34
|
// The toaster's scroll region is the ONE `[data-slot='viewport']` the app's own
|
package/app/assets/css/main.css
CHANGED
|
@@ -3,6 +3,9 @@
|
|
|
3
3
|
/* The shared rendered-markdown reader presentation (see prose.css). */
|
|
4
4
|
@import './prose.css';
|
|
5
5
|
|
|
6
|
+
/* The app's own mode-adaptive colour tokens (`app-*`), layered on Nuxt UI's. */
|
|
7
|
+
@import './tokens.css';
|
|
8
|
+
|
|
6
9
|
/* The two toaster rules below are scoped by the `app-toaster` marker class that
|
|
7
10
|
* `app.config.ts` puts on the toaster's viewport slot, NOT by `[data-slot='viewport']`.
|
|
8
11
|
* That attribute is Nuxt UI's name for the scroll region of ELEVEN components
|
|
@@ -53,10 +56,6 @@
|
|
|
53
56
|
|
|
54
57
|
/* ---- Agent Architecture Board: shared visual language ---------------------- */
|
|
55
58
|
|
|
56
|
-
:root {
|
|
57
|
-
--board-bg: #0b1020;
|
|
58
|
-
}
|
|
59
|
-
|
|
60
59
|
html,
|
|
61
60
|
body,
|
|
62
61
|
#__nuxt {
|
|
@@ -68,9 +67,9 @@ body {
|
|
|
68
67
|
overflow: hidden;
|
|
69
68
|
}
|
|
70
69
|
|
|
71
|
-
/* Vue Flow surface
|
|
70
|
+
/* The Vue Flow surface is the board canvas: one step below the page background in both modes. */
|
|
72
71
|
.vue-flow__background {
|
|
73
|
-
background-color: var(--
|
|
72
|
+
background-color: var(--app-bg-canvas);
|
|
74
73
|
}
|
|
75
74
|
|
|
76
75
|
/* Touch: let the pane own one-finger pan + pinch-zoom rather than the browser
|
|
@@ -83,14 +82,15 @@ body {
|
|
|
83
82
|
touch-action: none;
|
|
84
83
|
}
|
|
85
84
|
|
|
86
|
-
/* Status-pulse used by blocked / decision-needed blocks
|
|
85
|
+
/* Status-pulse used by blocked / decision-needed blocks: the warning alias, so a theme that
|
|
86
|
+
* recolours `warning` recolours the halo. `color-mix` is how a custom property gets an alpha. */
|
|
87
87
|
@keyframes board-pulse {
|
|
88
88
|
0%,
|
|
89
89
|
100% {
|
|
90
|
-
box-shadow: 0 0 0 0
|
|
90
|
+
box-shadow: 0 0 0 0 color-mix(in srgb, var(--ui-warning) 55%, transparent);
|
|
91
91
|
}
|
|
92
92
|
50% {
|
|
93
|
-
box-shadow: 0 0 0 10px
|
|
93
|
+
box-shadow: 0 0 0 10px transparent;
|
|
94
94
|
}
|
|
95
95
|
}
|
|
96
96
|
|
|
@@ -98,14 +98,14 @@ body {
|
|
|
98
98
|
animation: board-pulse 1.4s ease-in-out infinite;
|
|
99
99
|
}
|
|
100
100
|
|
|
101
|
-
/*
|
|
101
|
+
/* Success pulse used when a block reaches the "PR ready" state */
|
|
102
102
|
@keyframes board-pulse-green {
|
|
103
103
|
0%,
|
|
104
104
|
100% {
|
|
105
|
-
box-shadow: 0 0 0 0
|
|
105
|
+
box-shadow: 0 0 0 0 color-mix(in srgb, var(--ui-success) 60%, transparent);
|
|
106
106
|
}
|
|
107
107
|
50% {
|
|
108
|
-
box-shadow: 0 0 0 12px
|
|
108
|
+
box-shadow: 0 0 0 12px transparent;
|
|
109
109
|
}
|
|
110
110
|
}
|
|
111
111
|
|
|
@@ -121,7 +121,7 @@ body {
|
|
|
121
121
|
|
|
122
122
|
/* A selected edge: highlight it so the user knows what Delete/Backspace removes */
|
|
123
123
|
.vue-flow__edge.selected .vue-flow__edge-path {
|
|
124
|
-
stroke:
|
|
124
|
+
stroke: var(--ui-error) !important;
|
|
125
125
|
stroke-width: 2.5 !important;
|
|
126
126
|
}
|
|
127
127
|
|
package/app/assets/css/prose.css
CHANGED
|
@@ -21,8 +21,8 @@
|
|
|
21
21
|
transition: background 0.12s ease;
|
|
22
22
|
}
|
|
23
23
|
.reader-prose.review-mode [data-src-start]:hover {
|
|
24
|
-
background:
|
|
25
|
-
box-shadow: inset 2px 0 0
|
|
24
|
+
background: color-mix(in srgb, var(--ui-primary) 8%, transparent);
|
|
25
|
+
box-shadow: inset 2px 0 0 color-mix(in srgb, var(--ui-primary) 50%, transparent);
|
|
26
26
|
}
|
|
27
27
|
.reader-prose.review-mode [data-src-start]::before {
|
|
28
28
|
content: '+';
|
|
@@ -35,23 +35,23 @@
|
|
|
35
35
|
align-items: center;
|
|
36
36
|
justify-content: center;
|
|
37
37
|
border-radius: 0.25rem;
|
|
38
|
-
background:
|
|
39
|
-
color:
|
|
38
|
+
background: var(--ui-primary);
|
|
39
|
+
color: var(--ui-text-inverted);
|
|
40
40
|
font-size: 0.8rem;
|
|
41
41
|
line-height: 1;
|
|
42
42
|
}
|
|
43
43
|
.reader-prose.review-mode [data-src-start]:hover::before {
|
|
44
44
|
display: flex;
|
|
45
45
|
}
|
|
46
|
-
/* Persistent markers:
|
|
47
|
-
the block whose composer is currently open. */
|
|
46
|
+
/* Persistent markers: the warning alias for a block that already has a comment, the primary
|
|
47
|
+
alias for the block whose composer is currently open. */
|
|
48
48
|
.reader-prose .cf-commented {
|
|
49
|
-
background:
|
|
50
|
-
box-shadow: inset 2px 0 0
|
|
49
|
+
background: color-mix(in srgb, var(--ui-warning) 10%, transparent);
|
|
50
|
+
box-shadow: inset 2px 0 0 color-mix(in srgb, var(--ui-warning) 60%, transparent);
|
|
51
51
|
}
|
|
52
52
|
.reader-prose .cf-selected {
|
|
53
|
-
background:
|
|
54
|
-
box-shadow: inset 2px 0 0
|
|
53
|
+
background: color-mix(in srgb, var(--ui-primary) 12%, transparent);
|
|
54
|
+
box-shadow: inset 2px 0 0 color-mix(in srgb, var(--ui-primary) 80%, transparent);
|
|
55
55
|
}
|
|
56
56
|
|
|
57
57
|
/* Styling for the markdown HTML injected via v-html (out of scoped reach without
|
|
@@ -75,36 +75,36 @@
|
|
|
75
75
|
}
|
|
76
76
|
.reader-prose strong {
|
|
77
77
|
font-weight: 600;
|
|
78
|
-
color:
|
|
78
|
+
color: var(--ui-text-highlighted);
|
|
79
79
|
}
|
|
80
80
|
.reader-prose em {
|
|
81
81
|
font-style: italic;
|
|
82
82
|
}
|
|
83
83
|
.reader-prose code {
|
|
84
84
|
border-radius: 0.25rem;
|
|
85
|
-
background:
|
|
85
|
+
background: var(--ui-bg-elevated);
|
|
86
86
|
padding: 0.1rem 0.3rem;
|
|
87
|
-
font-family:
|
|
87
|
+
font-family: var(--font-mono);
|
|
88
88
|
font-size: 0.85em;
|
|
89
|
-
color:
|
|
89
|
+
color: var(--ui-primary);
|
|
90
90
|
}
|
|
91
91
|
.reader-prose pre {
|
|
92
92
|
margin: 0.6rem 0;
|
|
93
93
|
overflow: auto;
|
|
94
94
|
border-radius: 0.5rem;
|
|
95
|
-
background:
|
|
95
|
+
background: var(--app-bg-canvas);
|
|
96
96
|
padding: 0.75rem 0.9rem;
|
|
97
97
|
}
|
|
98
98
|
.reader-prose pre code {
|
|
99
99
|
background: transparent;
|
|
100
100
|
padding: 0;
|
|
101
|
-
color:
|
|
101
|
+
color: var(--ui-text-toned);
|
|
102
102
|
}
|
|
103
103
|
.reader-prose blockquote {
|
|
104
104
|
margin: 0.6rem 0;
|
|
105
|
-
border-left: 3px solid
|
|
105
|
+
border-left: 3px solid color-mix(in srgb, var(--ui-primary) 50%, transparent);
|
|
106
106
|
padding-left: 0.75rem;
|
|
107
|
-
color:
|
|
107
|
+
color: var(--ui-text-muted);
|
|
108
108
|
}
|
|
109
109
|
.reader-prose table {
|
|
110
110
|
margin: 0.6rem 0;
|
|
@@ -113,17 +113,17 @@
|
|
|
113
113
|
}
|
|
114
114
|
.reader-prose th,
|
|
115
115
|
.reader-prose td {
|
|
116
|
-
border: 1px solid
|
|
116
|
+
border: 1px solid var(--ui-border-muted);
|
|
117
117
|
padding: 0.3rem 0.6rem;
|
|
118
118
|
}
|
|
119
119
|
.reader-prose th {
|
|
120
|
-
background:
|
|
120
|
+
background: var(--ui-bg-elevated);
|
|
121
121
|
font-weight: 600;
|
|
122
122
|
}
|
|
123
123
|
.reader-prose hr {
|
|
124
124
|
margin: 1rem 0;
|
|
125
125
|
border: none;
|
|
126
|
-
border-top: 1px solid
|
|
126
|
+
border-top: 1px solid var(--ui-border-muted);
|
|
127
127
|
}
|
|
128
128
|
.reader-prose h1,
|
|
129
129
|
.reader-prose h2,
|
|
@@ -131,5 +131,5 @@
|
|
|
131
131
|
.reader-prose h4 {
|
|
132
132
|
margin: 0.6rem 0 0.3rem;
|
|
133
133
|
font-weight: 600;
|
|
134
|
-
color:
|
|
134
|
+
color: var(--ui-text-highlighted);
|
|
135
135
|
}
|
|
@@ -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
|
+
}
|