machinaos 0.0.76 → 0.0.78
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 +143 -107
- package/client/dist/assets/ActionBar-Du2MSFSz.js +1 -0
- package/client/dist/assets/ApiKeyInput-k2LBmBjb.js +1 -0
- package/client/dist/assets/ApiKeyPanel-C_bV9U0X.js +1 -0
- package/client/dist/assets/ApiUsageSection-CmVfwZzL.js +1 -0
- package/client/dist/assets/EmailPanel-CeKIMGu-.js +1 -0
- package/client/dist/assets/OAuthPanel-KA3t3Q2K.js +1 -0
- package/client/dist/assets/QrPairingPanel-NgNpJNuk.js +1 -0
- package/client/dist/assets/RateLimitSection-Du5YNVIA.js +1 -0
- package/client/dist/assets/StatusCard-DNLyayXc.js +1 -0
- package/client/dist/assets/index-DQ0nwhec.js +257 -0
- package/client/dist/assets/index-DxmbVskS.css +1 -0
- package/client/dist/assets/vendor-flow-CZmBvHRo.js +1 -0
- package/client/dist/assets/vendor-icons-CVrPjN2Q.js +22 -0
- package/client/dist/assets/vendor-markdown-CRou3yQ5.js +62 -0
- package/client/dist/assets/vendor-misc-C4VxKHs5.js +1 -0
- package/client/dist/assets/vendor-query-SzWcOU0G.js +1 -0
- package/client/dist/assets/vendor-radix-Dnos29jG.js +56 -0
- package/client/dist/assets/vendor-react-DvWIbVx0.js +1 -0
- package/client/dist/index.html +37 -3
- package/client/index.html +28 -1
- package/client/package.json +44 -40
- package/client/src/App.tsx +2 -0
- package/client/src/Dashboard.tsx +157 -45
- package/client/src/ParameterPanel.tsx +3 -5
- package/client/src/adapters/nodeSpecToDescription.ts +1 -0
- package/client/src/assets/icons/NodeIcon.tsx +32 -0
- package/client/src/assets/icons/index.ts +4 -0
- package/client/src/assets/icons/stripe.svg +1 -0
- package/client/src/assets/icons/themedGlyphs.ts +404 -0
- package/client/src/components/AIAgentNode.tsx +77 -53
- package/client/src/components/GenericNode.tsx +34 -52
- package/client/src/components/OutputPanel.tsx +64 -147
- package/client/src/components/ParameterRenderer.tsx +5 -3
- package/client/src/components/SkillEditorModal.tsx +9 -18
- package/client/src/components/SquareNode.tsx +97 -115
- package/client/src/components/StartNode.tsx +32 -42
- package/client/src/components/SvgFilterDefs.tsx +54 -0
- package/client/src/components/TeamMonitorNode.tsx +12 -14
- package/client/src/components/ToolkitNode.tsx +35 -60
- package/client/src/components/TriggerNode.tsx +43 -77
- package/client/src/components/__tests__/CredentialsModal.test.tsx +49 -45
- package/client/src/components/credentials/CredentialsModal.tsx +98 -30
- package/client/src/components/credentials/CredentialsPalette.tsx +73 -5
- package/client/src/components/credentials/catalogueAdapter.ts +17 -1
- package/client/src/components/credentials/panels/ApiKeyPanel.tsx +102 -37
- package/client/src/components/credentials/panels/EmailPanel.tsx +7 -19
- package/client/src/components/credentials/panels/OAuthPanel.tsx +5 -1
- package/client/src/components/credentials/panels/QrPairingPanel.tsx +1 -3
- package/client/src/components/credentials/primitives/ActionBar.tsx +7 -11
- package/client/src/components/credentials/primitives/OAuthConnect.tsx +19 -28
- package/client/src/components/credentials/sections/ProviderDefaultsSection.tsx +24 -3
- package/client/src/components/credentials/types.ts +12 -2
- package/client/src/components/credentials/useCredentialPanel.ts +43 -19
- package/client/src/components/icons/AIProviderIcons.tsx +16 -0
- package/client/src/components/onboarding/OnboardingWizard.tsx +23 -63
- package/client/src/components/onboarding/nodeRoleClasses.ts +23 -0
- package/client/src/components/onboarding/steps/CanvasStep.tsx +15 -21
- package/client/src/components/onboarding/steps/ConceptsStep.tsx +2 -11
- package/client/src/components/onboarding/steps/GetStartedStep.tsx +2 -10
- package/client/src/components/parameterPanel/InputSection.tsx +9 -7
- package/client/src/components/parameterPanel/MasterSkillEditor.tsx +84 -198
- package/client/src/components/parameterPanel/MiddleSection.tsx +57 -80
- package/client/src/components/parameterPanel/ToolSchemaEditor.tsx +31 -25
- package/client/src/components/parameterPanel/__tests__/InputSection.test.tsx +7 -2
- package/client/src/components/ui/AIResultModal.tsx +1 -1
- package/client/src/components/ui/CollapsibleSection.tsx +9 -5
- package/client/src/components/ui/CommandPalette.tsx +147 -0
- package/client/src/components/ui/CommandPaletteHost.tsx +189 -0
- package/client/src/components/ui/ComponentItem.tsx +13 -7
- package/client/src/components/ui/ComponentPalette.tsx +24 -13
- package/client/src/components/ui/ConsolePanel.tsx +19 -11
- package/client/src/components/ui/DropCap.tsx +28 -0
- package/client/src/components/ui/EditableNodeLabel.tsx +10 -2
- package/client/src/components/ui/InputNodesPanel.tsx +1 -1
- package/client/src/components/ui/Modal.tsx +38 -6
- package/client/src/components/ui/OutputDisplayPanel.tsx +1 -1
- package/client/src/components/ui/SettingsPanel.tsx +42 -13
- package/client/src/components/ui/StatusBar.tsx +108 -0
- package/client/src/components/ui/ThemeSwitcher.tsx +109 -0
- package/client/src/components/ui/TopToolbar.tsx +42 -25
- package/client/src/components/ui/WorkflowSidebar.tsx +32 -16
- package/client/src/components/ui/action-button.tsx +40 -15
- package/client/src/components/ui/button.tsx +24 -1
- package/client/src/components/ui/dropdown-menu.tsx +24 -2
- package/client/src/components/ui/input.tsx +19 -2
- package/client/src/components/ui/select.tsx +15 -0
- package/client/src/components/ui/textarea.tsx +15 -2
- package/client/src/contexts/AuthContext.tsx +148 -109
- package/client/src/contexts/ThemeContext.tsx +93 -17
- package/client/src/contexts/WebSocketContext.tsx +373 -206
- package/client/src/contexts/__tests__/AuthContext.test.tsx +221 -0
- package/client/src/hooks/__tests__/useDragVariable.test.ts +7 -1
- package/client/src/hooks/__tests__/useWorkflowOpsListener.test.ts +142 -0
- package/client/src/hooks/useAppTheme.ts +209 -7
- package/client/src/hooks/useAutoSkillEdges.ts +7 -2
- package/client/src/hooks/useCatalogueQuery.ts +67 -1
- package/client/src/hooks/useDragVariable.ts +1 -1
- package/client/src/hooks/useNodeAllowlist.ts +115 -8
- package/client/src/hooks/useOnboarding.ts +20 -8
- package/client/src/hooks/useParameterPanel.ts +2 -1
- package/client/src/hooks/useReactFlowNodes.ts +2 -1
- package/client/src/hooks/useSound.ts +185 -0
- package/client/src/hooks/useWorkflowManagement.ts +6 -8
- package/client/src/hooks/useWorkflowOpsListener.ts +90 -0
- package/client/src/index.css +65 -3
- package/client/src/lib/__tests__/connectionConfig.test.ts +91 -0
- package/client/src/lib/aiModelProviders.ts +8 -0
- package/client/src/lib/connectionConfig.ts +107 -0
- package/client/src/lib/queryPersist.ts +13 -5
- package/client/src/lib/sound.ts +393 -0
- package/client/src/main.tsx +20 -0
- package/client/src/store/useAppStore.ts +26 -0
- package/client/src/styles/canvasAnimations.ts +37 -36
- package/client/src/styles/theme.ts +36 -20
- package/client/src/test/setup.ts +1 -0
- package/client/src/themes/atomic.css +253 -0
- package/client/src/themes/base.css +373 -0
- package/client/src/themes/cyber.css +890 -0
- package/client/src/themes/dark.css +70 -0
- package/client/src/themes/edo.css +246 -0
- package/client/src/themes/greek.css +293 -0
- package/client/src/themes/light.css +78 -0
- package/client/src/themes/plague.css +253 -0
- package/client/src/themes/renaissance.css +727 -0
- package/client/src/themes/rot.css +249 -0
- package/client/src/themes/steampunk.css +272 -0
- package/client/src/themes/surveillance.css +289 -0
- package/client/src/themes/wasteland.css +250 -0
- package/client/src/types/INodeProperties.ts +5 -0
- package/client/src/types/NodeTypes.ts +11 -1
- package/client/src/types/__tests__/cloudEvents.test.ts +99 -0
- package/client/src/types/cloudEvents.ts +78 -0
- package/client/src/vite-env.d.ts +7 -0
- package/client/tsconfig.json +1 -1
- package/client/vite.config.js +62 -2
- package/install.ps1 +1 -1
- package/install.sh +1 -1
- package/machina/commands/build.py +51 -7
- package/machina/pyproject.toml +4 -0
- package/machina/supervisor.py +12 -2
- package/machina/tree.py +71 -21
- package/package.json +4 -4
- package/scripts/install.js +16 -1
- package/server/config/ai_cli_providers.json +54 -0
- package/server/config/credential_providers.json +109 -2
- package/server/config/llm_defaults.json +24 -0
- package/server/config/model_registry.json +338 -499
- package/server/config/node_allowlist.json +16 -1
- package/server/config/pricing.json +8 -0
- package/server/constants.py +38 -15
- package/server/core/container.py +2 -2
- package/server/core/credentials_database.py +35 -2
- package/server/core/logging.py +4 -3
- package/server/main.py +99 -13
- package/server/models/node_metadata.py +1 -0
- package/server/nodejs/package.json +8 -6
- package/server/nodejs/src/index.ts +22 -5
- package/server/nodes/README.md +31 -4
- package/server/nodes/agent/_inline.py +2 -0
- package/server/nodes/agent/_specialized.py +6 -3
- package/server/nodes/agent/ai_agent.py +13 -3
- package/server/nodes/agent/chat_agent.py +6 -3
- package/server/nodes/agent/claude_code_agent.py +287 -75
- package/server/nodes/agent/codex_agent.py +239 -0
- package/server/nodes/agent/deep_agent.py +3 -3
- package/server/nodes/agent/rlm_agent.py +3 -3
- package/server/nodes/android/__init__.py +31 -1
- package/server/nodes/android/_base.py +9 -5
- package/server/{services/android_service.py → nodes/android/_dispatcher.py} +2 -2
- package/server/nodes/android/_handlers.py +154 -0
- package/server/nodes/android/_option_loaders.py +44 -0
- package/server/nodes/android/_refresh.py +127 -0
- package/server/{services/android → nodes/android/_relay}/client.py +4 -4
- package/server/{routers/android.py → nodes/android/_router.py} +27 -8
- package/server/nodes/browser/browser.py +2 -2
- package/server/nodes/code/_base.py +6 -2
- package/server/nodes/code/_claude_code.py +134 -0
- package/server/nodes/document/embedding_generator.py +3 -3
- package/server/nodes/document/http_scraper.py +3 -3
- package/server/nodes/document/vector_store.py +5 -5
- package/server/nodes/email/__init__.py +11 -1
- package/server/nodes/email/_filters.py +21 -0
- package/server/{services/himalaya_service.py → nodes/email/_himalaya.py} +6 -10
- package/server/{services/email_service.py → nodes/email/_service.py} +9 -13
- package/server/nodes/email/email_read.py +1 -1
- package/server/nodes/email/email_receive.py +54 -5
- package/server/nodes/email/email_send.py +1 -1
- package/server/nodes/filesystem/shell.py +24 -1
- package/server/nodes/google/__init__.py +55 -1
- package/server/{services/handlers/google_auth.py → nodes/google/_auth_helper.py} +8 -5
- package/server/nodes/google/_base.py +2 -2
- package/server/nodes/google/_credentials.py +5 -5
- package/server/nodes/google/_filters.py +25 -0
- package/server/nodes/google/_handlers.py +57 -0
- package/server/{services/google_oauth.py → nodes/google/_oauth.py} +195 -162
- package/server/nodes/google/_option_loaders.py +107 -0
- package/server/nodes/google/_refresh.py +66 -0
- package/server/nodes/google/_router.py +131 -0
- package/server/nodes/google/gmail_receive.py +41 -4
- package/server/nodes/groups.py +1 -0
- package/server/nodes/location/_credentials.py +45 -1
- package/server/{services/maps.py → nodes/location/_service.py} +18 -3
- package/server/nodes/location/gmaps_create.py +4 -4
- package/server/nodes/location/gmaps_locations.py +4 -4
- package/server/nodes/location/gmaps_nearby_places.py +4 -4
- package/server/nodes/model/_base.py +8 -3
- package/server/nodes/model/_credentials.py +96 -8
- package/server/nodes/model/_local_validator.py +345 -0
- package/server/nodes/model/lmstudio_chat_model.py +23 -0
- package/server/nodes/model/ollama_chat_model.py +25 -0
- package/server/nodes/proxy/_usage.py +2 -2
- package/server/nodes/proxy/proxy_config.py +14 -14
- package/server/nodes/proxy/proxy_request.py +4 -4
- package/server/nodes/scraper/_credentials.py +29 -1
- package/server/nodes/scraper/apify_actor.py +9 -9
- package/server/nodes/scraper/crawlee_scraper.py +5 -5
- package/server/nodes/search/brave_search.py +4 -0
- package/server/nodes/search/perplexity_search.py +9 -0
- package/server/nodes/search/serper_search.py +3 -0
- package/server/nodes/skill/simple_memory.py +12 -0
- package/server/nodes/social/_base.py +2 -2
- package/server/nodes/stripe/__init__.py +46 -0
- package/server/nodes/stripe/_credentials.py +33 -0
- package/server/nodes/stripe/_handlers.py +270 -0
- package/server/nodes/stripe/_install.py +127 -0
- package/server/nodes/stripe/_source.py +174 -0
- package/server/nodes/stripe/stripe_action.py +81 -0
- package/server/nodes/stripe/stripe_receive.py +92 -0
- package/server/nodes/telegram/_credentials.py +52 -1
- package/server/nodes/telegram/_handlers.py +19 -18
- package/server/nodes/telegram/_service.py +134 -32
- package/server/nodes/telegram/telegram_send.py +5 -6
- package/server/nodes/text/file_handler.py +2 -2
- package/server/nodes/text/text_generator.py +2 -2
- package/server/nodes/tool/agent_builder.py +630 -0
- package/server/nodes/tool/task_manager.py +144 -2
- package/server/nodes/twitter/__init__.py +38 -1
- package/server/nodes/twitter/_base.py +7 -7
- package/server/nodes/twitter/_credentials.py +1 -1
- package/server/nodes/twitter/_filters.py +37 -0
- package/server/nodes/twitter/_handlers.py +77 -0
- package/server/nodes/twitter/_oauth.py +124 -0
- package/server/nodes/twitter/_refresh.py +78 -0
- package/server/nodes/twitter/_router.py +29 -0
- package/server/nodes/twitter/twitter_receive.py +4 -0
- package/server/nodes/visuals.json +64 -19
- package/server/nodes/whatsapp/__init__.py +45 -5
- package/server/nodes/whatsapp/_base.py +3 -3
- package/server/nodes/whatsapp/_filters.py +137 -0
- package/server/nodes/whatsapp/_handlers.py +167 -0
- package/server/nodes/whatsapp/_option_loaders.py +68 -0
- package/server/nodes/whatsapp/_refresh.py +62 -0
- package/server/nodes/whatsapp/_runtime.py +1 -1
- package/server/pyproject.toml +29 -7
- package/server/routers/schemas.py +2 -2
- package/server/routers/webhook.py +26 -9
- package/server/routers/websocket.py +149 -810
- package/server/services/ai.py +89 -8
- package/server/services/auth.py +220 -43
- package/server/services/claude_oauth.py +126 -100
- package/server/services/cli_agent/__init__.py +78 -0
- package/server/services/cli_agent/_handlers.py +237 -0
- package/server/services/cli_agent/config.py +112 -0
- package/server/services/cli_agent/factory.py +48 -0
- package/server/services/cli_agent/lockfile.py +141 -0
- package/server/services/cli_agent/mcp_server.py +482 -0
- package/server/services/cli_agent/protocol.py +173 -0
- package/server/services/cli_agent/providers/__init__.py +9 -0
- package/server/services/cli_agent/providers/anthropic_claude.py +419 -0
- package/server/services/cli_agent/providers/google_gemini.py +80 -0
- package/server/services/cli_agent/providers/openai_codex.py +310 -0
- package/server/services/cli_agent/service.py +607 -0
- package/server/services/cli_agent/session.py +618 -0
- package/server/services/cli_agent/types.py +227 -0
- package/server/services/cli_agent/workflow_tools.py +233 -0
- package/server/services/credential_registry.py +26 -1
- package/server/services/deployment/manager.py +26 -145
- package/server/services/deployment/poll_registry.py +59 -0
- package/server/services/event_waiter.py +76 -246
- package/server/services/events/__init__.py +54 -0
- package/server/services/events/cli.py +78 -0
- package/server/services/events/daemon.py +163 -0
- package/server/services/events/envelope.py +281 -0
- package/server/services/events/lifecycle.py +99 -0
- package/server/services/events/oauth_lifecycle.py +534 -0
- package/server/services/events/polling.py +60 -0
- package/server/services/events/push.py +36 -0
- package/server/services/events/source.py +63 -0
- package/server/services/events/triggers.py +118 -0
- package/server/services/events/verifiers/__init__.py +25 -0
- package/server/services/events/verifiers/base.py +28 -0
- package/server/services/events/verifiers/github.py +25 -0
- package/server/services/events/verifiers/hmac_basic.py +32 -0
- package/server/services/events/verifiers/standard_webhooks.py +47 -0
- package/server/services/events/verifiers/stripe.py +42 -0
- package/server/services/events/webhook.py +105 -0
- package/server/services/handlers/tools.py +28 -186
- package/server/services/llm/config.py +7 -0
- package/server/services/llm/factory.py +8 -2
- package/server/services/memory/__init__.py +52 -0
- package/server/services/memory/jsonl.py +80 -0
- package/server/services/memory/markdown.py +65 -0
- package/server/services/memory/state.py +112 -0
- package/server/services/memory/vector_store.py +40 -0
- package/server/services/model_registry.py +76 -0
- package/server/services/node_allowlist.py +71 -15
- package/server/services/node_executor.py +2 -2
- package/server/services/node_output_schemas.py +21 -10
- package/server/services/node_spec.py +1 -1
- package/server/services/oauth_utils.py +1 -1
- package/server/services/plugin/__init__.py +2 -0
- package/server/services/plugin/base.py +44 -2
- package/server/services/plugin/credential.py +288 -1
- package/server/services/plugin/deps.py +105 -0
- package/server/services/plugin/edge_walker.py +12 -4
- package/server/services/plugin/oauth.py +381 -0
- package/server/services/plugin/polling.py +247 -0
- package/server/services/plugin/registry.py +145 -0
- package/server/services/plugin/singleton.py +65 -0
- package/server/services/plugin/ws.py +81 -0
- package/server/services/process_service.py +31 -2
- package/server/services/status_broadcaster.py +155 -238
- package/server/services/temporal/workflow.py +7 -7
- package/server/services/workflow.py +21 -3
- package/server/services/ws_handler_registry.py +111 -28
- package/server/skills/GUIDE.md +16 -1
- package/server/skills/assistant/agent-builder-skill/SKILL.md +166 -0
- package/server/skills/payments_agent/stripe-skill/SKILL.md +306 -0
- package/server/tests/credentials/test_auth_service.py +16 -9
- package/server/tests/credentials/test_credential_broadcasts.py +219 -0
- package/server/tests/credentials/test_google_oauth.py +6 -6
- package/server/tests/credentials/test_oauth_utils.py +1 -1
- package/server/tests/credentials/test_twitter_oauth.py +2 -2
- package/server/tests/credentials/test_websocket_handlers.py +44 -20
- package/server/tests/llm/test_factory.py +1 -0
- package/server/tests/llm/test_wiring.py +5 -1
- package/server/tests/nodes/_compat.py +24 -24
- package/server/tests/nodes/test_agent_builder.py +439 -0
- package/server/tests/nodes/test_ai_tools.py +18 -14
- package/server/tests/nodes/test_code_fs_process.py +17 -8
- package/server/tests/nodes/test_email.py +10 -9
- package/server/tests/nodes/test_google_workspace.py +2 -2
- package/server/tests/nodes/test_specialized_agents.py +100 -53
- package/server/tests/nodes/test_stripe_plugin.py +293 -0
- package/server/tests/nodes/test_telegram_social.py +4 -4
- package/server/tests/nodes/test_twitter.py +1 -1
- package/server/tests/nodes/test_web_automation.py +2 -2
- package/server/tests/nodes/test_whatsapp.py +9 -9
- package/server/tests/services/cli_agent/__init__.py +0 -0
- package/server/tests/services/cli_agent/test_mcp_server.py +432 -0
- package/server/tests/services/cli_agent/test_providers.py +358 -0
- package/server/tests/services/cli_agent/test_service.py +298 -0
- package/server/tests/services/memory/__init__.py +0 -0
- package/server/tests/services/memory/test_jsonl.py +188 -0
- package/server/tests/services/test_events.py +333 -0
- package/server/tests/test_node_spec.py +56 -16
- package/server/tests/test_plugin_helpers.py +116 -0
- package/server/tests/test_plugin_self_containment.py +486 -0
- package/server/tests/test_status_broadcasts.py +425 -0
- package/workflows/{AI Assistant_workflow-1777421105154-0m4snkzjf.json → AI Assistant_workflow-1778504793388-ou1m1tz2x.json } +70 -266
- package/workflows/{AI Employee_workflow-1777720598005-u4cm858dv.json → AI Employee_example_workflow-1777720598005-u4cm858dv.json } +112 -112
- package/workflows/Claude Assistant_workflow-1778380124051-mdibn807c.json +709 -0
- package/client/dist/assets/ActionBar-vzPpSR77.js +0 -1
- package/client/dist/assets/ApiKeyInput-Ds7AKFe8.js +0 -1
- package/client/dist/assets/ApiKeyPanel-gfblELep.js +0 -1
- package/client/dist/assets/ApiUsageSection-BMNWTe2r.js +0 -1
- package/client/dist/assets/EmailPanel-B1Om64p5.js +0 -1
- package/client/dist/assets/OAuthPanel-CXyQYGBz.js +0 -1
- package/client/dist/assets/QrPairingPanel-BgNuI1we.js +0 -1
- package/client/dist/assets/RateLimitSection-YYK8sx1T.js +0 -1
- package/client/dist/assets/StatusCard-DuYA5hJR.js +0 -1
- package/client/dist/assets/index-D9tZfgvi.js +0 -363
- package/client/dist/assets/index-al7snTkG.css +0 -1
- package/client/src/components/credentials/providers.tsx +0 -177
- package/server/routers/google.py +0 -277
- package/server/routers/maps.py +0 -142
- package/server/routers/twitter.py +0 -365
- package/server/services/claude_code_service.py +0 -106
- package/server/services/memory.py +0 -159
- package/server/services/node_option_loaders/__init__.py +0 -77
- package/server/services/node_option_loaders/android_loaders.py +0 -55
- package/server/services/node_option_loaders/google_loaders.py +0 -97
- package/server/services/node_option_loaders/whatsapp_loaders.py +0 -69
- package/server/services/twitter_oauth.py +0 -411
- package/server/services/websocket_client.py +0 -29
- /package/server/{services/android → nodes/android/_relay}/__init__.py +0 -0
- /package/server/{services/android → nodes/android/_relay}/broadcaster.py +0 -0
- /package/server/{services/android → nodes/android/_relay}/manager.py +0 -0
- /package/server/{services/android → nodes/android/_relay}/protocol.py +0 -0
- /package/server/{services/browser_service.py → nodes/browser/_service.py} +0 -0
- /package/server/{services/whatsapp_service.py → nodes/whatsapp/_service.py} +0 -0
- /package/server/skills/{task_agent → assistant}/write-todos-skill/SKILL.md +0 -0
|
@@ -0,0 +1,727 @@
|
|
|
1
|
+
/* ============================================================================
|
|
2
|
+
* themes/renaissance.css — illuminated codex / Florentine workshop manuscript.
|
|
3
|
+
*
|
|
4
|
+
* Defines the full new-contract token block AND overrides the shadcn
|
|
5
|
+
* HSL-triplet tokens so existing Tailwind utilities (bg-card, text-muted-
|
|
6
|
+
* foreground, bg-action-save-soft, etc.) retint correctly without any
|
|
7
|
+
* component changes.
|
|
8
|
+
*
|
|
9
|
+
* Palette: vellum cream (#fbf3dc), ink brown (#5a3a14), gold leaf
|
|
10
|
+
* (#d4a030), crimson seal (#8a1410). HSL triplets are conversions of
|
|
11
|
+
* the same hex values.
|
|
12
|
+
*
|
|
13
|
+
* Decorative layers (vellum noise, fleur-de-lis, marginalia, gilded
|
|
14
|
+
* corner ornaments) are deferred to Phase 3 fan-out — they target
|
|
15
|
+
* `.app-frame`, `.canvas`, `.sidebar` etc. which don't exist as
|
|
16
|
+
* dedicated React component classes today.
|
|
17
|
+
*
|
|
18
|
+
* Source: design_handoff_machinaos_themes/themes/renaissance.css.
|
|
19
|
+
* ============================================================================ */
|
|
20
|
+
|
|
21
|
+
:root[data-theme="renaissance"] {
|
|
22
|
+
/* ── New contract — full colour values ────────────────────────────── */
|
|
23
|
+
|
|
24
|
+
/* Surfaces */
|
|
25
|
+
--bg-app: #f3e8c8;
|
|
26
|
+
--bg-panel: #ead09a;
|
|
27
|
+
--bg-canvas: #e8d4a0;
|
|
28
|
+
--bg-elevated: #fbf3dc;
|
|
29
|
+
--bg-input: #fbf3dc;
|
|
30
|
+
--bg-hover: rgba(138, 94, 28, 0.10);
|
|
31
|
+
--bg-active: rgba(212, 160, 48, 0.20);
|
|
32
|
+
--bg-overlay: rgba(58, 32, 8, 0.55);
|
|
33
|
+
|
|
34
|
+
/* Borders */
|
|
35
|
+
--border-default: #8a5e1c;
|
|
36
|
+
--border-strong: #5a3a14;
|
|
37
|
+
--border-focus: #4a8230;
|
|
38
|
+
--ornament-frame: inset 0 0 0 2px #8a5e1c, inset 0 0 0 6px #d4a030, inset 0 0 0 8px #5a3a14;
|
|
39
|
+
|
|
40
|
+
/* Foreground */
|
|
41
|
+
--fg-default: #3a2008;
|
|
42
|
+
--fg-muted: #6a4a1c;
|
|
43
|
+
--fg-faint: #8a6a3c;
|
|
44
|
+
--fg-on-accent: #fbf3dc;
|
|
45
|
+
--fg-on-success: #fbf3dc;
|
|
46
|
+
--fg-on-danger: #fbf3dc;
|
|
47
|
+
--fg-on-warning: #3a2008;
|
|
48
|
+
|
|
49
|
+
/* Theme-specific accents (used by decorative layers; safe to read in
|
|
50
|
+
* components migrated to the new contract) */
|
|
51
|
+
--gold: #d4a030;
|
|
52
|
+
--gold-bright: #f0c850;
|
|
53
|
+
--crimson: #8a1410;
|
|
54
|
+
/* Wave 30.2: ultramarine ("lapis lazuli") — historically the most
|
|
55
|
+
* prestigious Renaissance pigment, used in illuminated manuscripts +
|
|
56
|
+
* Marian iconography. Hue 230° sits ~180° opposite the warm vellum
|
|
57
|
+
* canvas (#e8d4a0, hue 45°) so it reads luminously against cream. */
|
|
58
|
+
--lapis: #2548c8;
|
|
59
|
+
--lapis-bright: #4a72e8;
|
|
60
|
+
|
|
61
|
+
/* Type — Cinzel display + Cormorant body + IM Fell English mono */
|
|
62
|
+
--font-display: 'Cinzel', 'Trajan Pro', Georgia, serif;
|
|
63
|
+
--font-body: 'Cormorant Garamond', 'EB Garamond', Georgia, serif;
|
|
64
|
+
--font-mono: 'IM Fell English', 'Courier Prime', monospace;
|
|
65
|
+
--type-scale-base: 15px;
|
|
66
|
+
--type-tracking-display: 0.10em;
|
|
67
|
+
--type-uppercase: uppercase;
|
|
68
|
+
|
|
69
|
+
/* Geometry — slim radii (parchment + wax-pressed feel) */
|
|
70
|
+
--radius-sm: 2px;
|
|
71
|
+
--radius-md: 3px;
|
|
72
|
+
--radius-lg: 4px;
|
|
73
|
+
--radius-pill: 12px;
|
|
74
|
+
|
|
75
|
+
/* Motion — slow, weighted */
|
|
76
|
+
--ease-default: cubic-bezier(0.4, 0, 0.2, 1);
|
|
77
|
+
--ease-emphasis: cubic-bezier(0.7, -0.1, 0.3, 1.2);
|
|
78
|
+
--dur-fast: 140ms;
|
|
79
|
+
--dur-default: 280ms;
|
|
80
|
+
--dur-slow: 520ms;
|
|
81
|
+
--motion-style: organic;
|
|
82
|
+
--sound-pack: parchment;
|
|
83
|
+
|
|
84
|
+
/* Wave 30.2: ultramarine pulse — maximum hue contrast (180° opposite)
|
|
85
|
+
* against warm vellum. Earlier gold + crimson attempts were either
|
|
86
|
+
* too similar to the cream background (gold) or too dark to read as
|
|
87
|
+
* luminous glow (crimson). Lapis ultramarine sits cool against warm
|
|
88
|
+
* vellum and reads as a Marian-blue halo, the canonical "this thing
|
|
89
|
+
* is sacred / important" signal in Renaissance iconography. */
|
|
90
|
+
--node-pulse-color: var(--lapis-bright);
|
|
91
|
+
|
|
92
|
+
/* Cursor — quill pen with gold-leaf nib (upstream design handoff) */
|
|
93
|
+
--cursor-default: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='28' height='28' viewBox='0 0 28 28'><path d='M3 25 L10 17 L13 20 L6 27 Z' fill='%235a3a14'/><path d='M10 17 L20 5 L24 9 L13 20 Z' fill='%23d4a030' stroke='%235a3a14' stroke-width='1'/><path d='M14 9 L18 13 M12 11 L16 15 M10 13 L14 17' stroke='%235a3a14' stroke-width='0.5' fill='none'/></svg>") 3 25, auto;
|
|
94
|
+
--cursor-pointer: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='28' height='28' viewBox='0 0 28 28'><path d='M5 5 L20 12 L13 14 L11 22 Z' fill='%23d4a030' stroke='%235a3a14' stroke-width='1.5'/></svg>") 5 5, pointer;
|
|
95
|
+
|
|
96
|
+
/* Canvas backplane — faint cartography ornament (fleur-de-lis on
|
|
97
|
+
* 80x80 tile, light gold ink) */
|
|
98
|
+
--canvas-grid:
|
|
99
|
+
url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='80' height='80' viewBox='0 0 80 80'><g fill='none' stroke='%238a5e1c' stroke-width='0.4' opacity='0.35'><path d='M40 22 Q35 32, 30 32 Q26 32, 28 28 Q32 26, 40 28 Q48 26, 52 28 Q54 32, 50 32 Q45 32, 40 22 Z'/><path d='M40 28 L40 40 M36 36 L44 36'/><circle cx='40' cy='42' r='2'/></g></svg>");
|
|
100
|
+
--canvas-grid-opacity: 1;
|
|
101
|
+
|
|
102
|
+
--scrollbar-track: #e8d09a;
|
|
103
|
+
--scrollbar-thumb: #8a5e1c;
|
|
104
|
+
|
|
105
|
+
/* ── Shadcn HSL-triplet bridge ─────────────────────────────────────
|
|
106
|
+
* Same colours as the new contract above, expressed as HSL triplets
|
|
107
|
+
* so Tailwind utilities like bg-card/50 (alpha composition) keep
|
|
108
|
+
* working. */
|
|
109
|
+
|
|
110
|
+
--background: 40 65% 87%; /* #f3e8c8 */
|
|
111
|
+
--foreground: 28 76% 13%; /* #3a2008 */
|
|
112
|
+
--card: 41 79% 92%; /* #fbf3dc */
|
|
113
|
+
--card-foreground: 28 76% 13%;
|
|
114
|
+
--popover: 41 79% 92%;
|
|
115
|
+
--popover-foreground: 28 76% 13%;
|
|
116
|
+
|
|
117
|
+
--primary: 32 53% 48%; /* #b8893c gold accent */
|
|
118
|
+
--primary-foreground: 41 79% 92%;
|
|
119
|
+
--secondary: 38 65% 76%; /* #ead09a panel */
|
|
120
|
+
--secondary-foreground: 28 76% 13%;
|
|
121
|
+
--muted: 38 65% 76%;
|
|
122
|
+
--muted-foreground: 33 60% 26%; /* #6a4a1c */
|
|
123
|
+
--accent: 41 65% 51%; /* #d4a030 gold leaf */
|
|
124
|
+
--accent-foreground: 28 76% 13%;
|
|
125
|
+
|
|
126
|
+
--destructive: 2 79% 30%; /* #8a1410 crimson */
|
|
127
|
+
--destructive-foreground: 41 79% 92%;
|
|
128
|
+
--success: 78 63% 25%; /* #4a6818 olive */
|
|
129
|
+
--warning: 35 71% 44%; /* #c08020 amber */
|
|
130
|
+
--info: 211 56% 23%; /* #1a3a5a navy */
|
|
131
|
+
|
|
132
|
+
--border: 33 66% 33%; /* #8a5e1c */
|
|
133
|
+
--input: 33 66% 33%;
|
|
134
|
+
--ring: 41 65% 51%; /* gold focus */
|
|
135
|
+
|
|
136
|
+
/* Action role tokens — re-derived from Renaissance semantic palette.
|
|
137
|
+
* Keep the soft / hover / border alpha pattern so ActionButton still
|
|
138
|
+
* works without any code change. */
|
|
139
|
+
--action-run: 78 63% 25%; /* olive (success) */
|
|
140
|
+
--action-run-soft: 78 63% 25% / 0.18;
|
|
141
|
+
--action-run-hover: 78 63% 25% / 0.30;
|
|
142
|
+
--action-run-border: 78 63% 25% / 0.6;
|
|
143
|
+
|
|
144
|
+
--action-stop: 2 79% 30%; /* crimson (destructive) */
|
|
145
|
+
--action-stop-soft: 2 79% 30% / 0.15;
|
|
146
|
+
--action-stop-hover: 2 79% 30% / 0.25;
|
|
147
|
+
--action-stop-border: 2 79% 30% / 0.6;
|
|
148
|
+
|
|
149
|
+
--action-save: 41 65% 51%; /* gold leaf (primary action) */
|
|
150
|
+
--action-save-soft: 41 65% 51% / 0.20;
|
|
151
|
+
--action-save-hover: 41 65% 51% / 0.35;
|
|
152
|
+
--action-save-border: 32 53% 48% / 0.7;
|
|
153
|
+
|
|
154
|
+
--action-config: 35 71% 44%; /* amber (warning) */
|
|
155
|
+
--action-config-soft: 35 71% 44% / 0.18;
|
|
156
|
+
--action-config-hover: 35 71% 44% / 0.30;
|
|
157
|
+
--action-config-border: 35 71% 44% / 0.6;
|
|
158
|
+
|
|
159
|
+
--action-secret: 211 56% 23%; /* navy (info / secret) */
|
|
160
|
+
--action-secret-soft: 211 56% 23% / 0.15;
|
|
161
|
+
--action-secret-hover: 211 56% 23% / 0.25;
|
|
162
|
+
--action-secret-border: 211 56% 23% / 0.6;
|
|
163
|
+
|
|
164
|
+
--action-tools: 32 53% 48%; /* gold accent */
|
|
165
|
+
--action-tools-soft: 32 53% 48% / 0.18;
|
|
166
|
+
--action-tools-hover: 32 53% 48% / 0.30;
|
|
167
|
+
--action-tools-border: 32 53% 48% / 0.6;
|
|
168
|
+
|
|
169
|
+
/* Tint utilities — slightly stronger on parchment so brand-coloured
|
|
170
|
+
* surfaces (provider icons, skill colours) stay legible. */
|
|
171
|
+
--tint-soft: 14%;
|
|
172
|
+
--tint-border: 35%;
|
|
173
|
+
}
|
|
174
|
+
|
|
175
|
+
/* ── Body parchment background ─────────────────────────────────────────
|
|
176
|
+
* The handoff layers radial gradients + an SVG noise texture on body.
|
|
177
|
+
* Safe to apply since `body` is theme-agnostic. */
|
|
178
|
+
|
|
179
|
+
:root[data-theme="renaissance"] body {
|
|
180
|
+
background:
|
|
181
|
+
radial-gradient(ellipse at 15% 25%, rgba(138, 70, 20, 0.12), transparent 35%),
|
|
182
|
+
radial-gradient(ellipse at 85% 75%, rgba(180, 100, 30, 0.10), transparent 40%),
|
|
183
|
+
radial-gradient(circle at 70% 20%, rgba(90, 50, 18, 0.08), transparent 25%),
|
|
184
|
+
url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='240' height='240'><filter id='n'><feTurbulence baseFrequency='0.85' numOctaves='3' seed='5'/><feColorMatrix values='0 0 0 0 0.36 0 0 0 0 0.23 0 0 0 0 0.05 0 0 0 0.10 0'/></filter><rect width='240' height='240' filter='url(%23n)'/></svg>"),
|
|
185
|
+
var(--bg-app);
|
|
186
|
+
}
|
|
187
|
+
|
|
188
|
+
/* ::selection — gold leaf highlight */
|
|
189
|
+
:root[data-theme="renaissance"] ::selection {
|
|
190
|
+
background: rgba(212, 160, 48, 0.5);
|
|
191
|
+
color: #3a2008;
|
|
192
|
+
}
|
|
193
|
+
|
|
194
|
+
/* Gilded scrollbars — gold thumb on cream track with carved inset rule */
|
|
195
|
+
:root[data-theme="renaissance"] ::-webkit-scrollbar {
|
|
196
|
+
width: 12px;
|
|
197
|
+
height: 12px;
|
|
198
|
+
}
|
|
199
|
+
:root[data-theme="renaissance"] ::-webkit-scrollbar-track {
|
|
200
|
+
background: var(--scrollbar-track);
|
|
201
|
+
}
|
|
202
|
+
:root[data-theme="renaissance"] ::-webkit-scrollbar-thumb {
|
|
203
|
+
background: var(--scrollbar-thumb);
|
|
204
|
+
border-radius: var(--radius-sm, 2px);
|
|
205
|
+
box-shadow: inset 0 0 0 1px var(--border-strong);
|
|
206
|
+
}
|
|
207
|
+
:root[data-theme="renaissance"] ::-webkit-scrollbar-thumb:hover {
|
|
208
|
+
background: color-mix(in srgb, var(--scrollbar-thumb) 80%, white);
|
|
209
|
+
}
|
|
210
|
+
|
|
211
|
+
/* ── Per-component decorations (Wave 16 port from handoff) ─── */
|
|
212
|
+
|
|
213
|
+
/* Floating illuminated initial as ambient ornament */
|
|
214
|
+
@keyframes ren-flicker {
|
|
215
|
+
0%, 100% { opacity: 0.5; }
|
|
216
|
+
50% { opacity: 0.8; }
|
|
217
|
+
}
|
|
218
|
+
|
|
219
|
+
/* ─── ILLUMINATED FRAME with gilded corners ─── */
|
|
220
|
+
:root[data-theme="renaissance"] .app-frame {
|
|
221
|
+
box-shadow: var(--ornament-frame), 0 0 60px rgba(90, 50, 18, 0.3) inset;
|
|
222
|
+
position: relative;
|
|
223
|
+
}
|
|
224
|
+
:root[data-theme="renaissance"] .app-frame::before,
|
|
225
|
+
:root[data-theme="renaissance"] .app-frame::after {
|
|
226
|
+
content: ''; position: absolute; width: 36px; height: 36px;
|
|
227
|
+
background: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 36 36'><path d='M2 2 L34 2 L34 6 L6 6 L6 34 L2 34 Z' fill='%23d4a030' stroke='%235a3a14' stroke-width='1'/><circle cx='6' cy='6' r='3' fill='%238a1410' stroke='%235a3a14' stroke-width='0.8'/><path d='M10 2 L14 2 M18 2 L22 2 M26 2 L30 2 M2 10 L2 14 M2 18 L2 22 M2 26 L2 30' stroke='%235a3a14' stroke-width='0.6'/></svg>") no-repeat;
|
|
228
|
+
pointer-events: none; z-index: 100;
|
|
229
|
+
}
|
|
230
|
+
:root[data-theme="renaissance"] .app-frame::before { top: 0; left: 0; }
|
|
231
|
+
:root[data-theme="renaissance"] .app-frame::after { top: 0; right: 0; transform: scaleX(-1); }
|
|
232
|
+
|
|
233
|
+
/* ─── PANELS get a vellum lining ─── */
|
|
234
|
+
:root[data-theme="renaissance"] .toolbar,
|
|
235
|
+
:root[data-theme="renaissance"] .sidebar,
|
|
236
|
+
:root[data-theme="renaissance"] .palette,
|
|
237
|
+
:root[data-theme="renaissance"] .chat {
|
|
238
|
+
background:
|
|
239
|
+
url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='200' height='200'><filter id='n'><feTurbulence baseFrequency='0.9' numOctaves='2'/><feColorMatrix values='0 0 0 0 0.36 0 0 0 0 0.23 0 0 0 0 0.05 0 0 0 0.06 0'/></filter><rect width='200' height='200' filter='url(%23n)'/></svg>"),
|
|
240
|
+
var(--bg-panel);
|
|
241
|
+
}
|
|
242
|
+
:root[data-theme="renaissance"] .toolbar { border-bottom: 2px double var(--border-strong); }
|
|
243
|
+
:root[data-theme="renaissance"] .sidebar { border-right: 2px double var(--border-strong); }
|
|
244
|
+
:root[data-theme="renaissance"] .palette { border-left: 2px double var(--border-strong); }
|
|
245
|
+
:root[data-theme="renaissance"] .chat { border-top: 2px double var(--border-strong); }
|
|
246
|
+
|
|
247
|
+
/* ─── CANVAS — workshop floor with fleur-de-lis pattern + vignette ─── */
|
|
248
|
+
:root[data-theme="renaissance"] .canvas {
|
|
249
|
+
background:
|
|
250
|
+
radial-gradient(ellipse at center, transparent 30%, rgba(90, 50, 18, 0.25) 100%),
|
|
251
|
+
url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='80' height='80' viewBox='0 0 80 80'><g fill='none' stroke='%238a5e1c' stroke-width='0.4' opacity='0.35'><path d='M40 22 Q35 32, 30 32 Q26 32, 28 28 Q32 26, 40 28 Q48 26, 52 28 Q54 32, 50 32 Q45 32, 40 22 Z'/><path d='M40 28 L40 40 M36 36 L44 36'/><circle cx='40' cy='42' r='2'/></g></svg>"),
|
|
252
|
+
url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='200' height='200'><filter id='n'><feTurbulence baseFrequency='0.95' numOctaves='2'/><feColorMatrix values='0 0 0 0 0.36 0 0 0 0 0.23 0 0 0 0 0.05 0 0 0 0.08 0'/></filter><rect width='200' height='200' filter='url(%23n)'/></svg>"),
|
|
253
|
+
var(--bg-canvas);
|
|
254
|
+
}
|
|
255
|
+
|
|
256
|
+
/* Marginalia — handwritten marginal note in canvas */
|
|
257
|
+
:root[data-theme="renaissance"] .canvas::before {
|
|
258
|
+
content: '" Ars longa, vita brevis "';
|
|
259
|
+
position: absolute; bottom: 12px; right: 16px;
|
|
260
|
+
font-family: var(--font-mono);
|
|
261
|
+
font-style: italic;
|
|
262
|
+
font-size: 13px;
|
|
263
|
+
color: var(--border-default);
|
|
264
|
+
opacity: 0.7;
|
|
265
|
+
transform: rotate(-2deg);
|
|
266
|
+
pointer-events: none;
|
|
267
|
+
z-index: 0;
|
|
268
|
+
}
|
|
269
|
+
:root[data-theme="renaissance"] .canvas::after {
|
|
270
|
+
content: ''; position: absolute; top: 12px; left: 16px;
|
|
271
|
+
width: 64px; height: 64px;
|
|
272
|
+
background: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 64 64'><g fill='none' stroke='%238a5e1c' stroke-width='1' opacity='0.5'><circle cx='32' cy='32' r='28'/><circle cx='32' cy='32' r='22'/><path d='M32 4 L32 60 M4 32 L60 32 M11 11 L53 53 M53 11 L11 53'/><circle cx='32' cy='32' r='3' fill='%23d4a030'/></g></svg>") no-repeat center / contain;
|
|
273
|
+
pointer-events: none;
|
|
274
|
+
z-index: 0;
|
|
275
|
+
}
|
|
276
|
+
/* Make sure nodes/edges sit above marginalia */
|
|
277
|
+
:root[data-theme="renaissance"] .canvas .node,
|
|
278
|
+
:root[data-theme="renaissance"] .canvas .edge { z-index: 2; }
|
|
279
|
+
|
|
280
|
+
/* Floating illuminated initial as ambient ornament */
|
|
281
|
+
:root[data-theme="renaissance"] .canvas .ornament {
|
|
282
|
+
position: absolute;
|
|
283
|
+
font-family: var(--font-display);
|
|
284
|
+
color: var(--gold);
|
|
285
|
+
text-shadow: 2px 2px 0 var(--border-strong);
|
|
286
|
+
font-size: 120px;
|
|
287
|
+
font-weight: 700;
|
|
288
|
+
opacity: 0.12;
|
|
289
|
+
pointer-events: none;
|
|
290
|
+
animation: ren-flicker 6s ease-in-out infinite;
|
|
291
|
+
}
|
|
292
|
+
|
|
293
|
+
/* ─── BUTTONS as pressed gold foil ─── */
|
|
294
|
+
:root[data-theme="renaissance"] .btn {
|
|
295
|
+
background: linear-gradient(180deg, #fbf3dc 0%, #e8c478 100%);
|
|
296
|
+
border: 1px solid var(--border-default);
|
|
297
|
+
color: var(--fg-default);
|
|
298
|
+
font-family: var(--font-display);
|
|
299
|
+
letter-spacing: 0.10em;
|
|
300
|
+
text-transform: uppercase;
|
|
301
|
+
font-size: 11px; font-weight: 600;
|
|
302
|
+
padding: 7px 14px;
|
|
303
|
+
box-shadow: 0 1px 0 #fbf3dc inset, 0 -1px 0 rgba(90, 50, 18, 0.2) inset, 0 2px 0 var(--border-strong);
|
|
304
|
+
transition: transform var(--dur-fast), box-shadow var(--dur-fast);
|
|
305
|
+
}
|
|
306
|
+
:root[data-theme="renaissance"] .btn:hover {
|
|
307
|
+
background: linear-gradient(180deg, var(--gold-bright), var(--gold));
|
|
308
|
+
box-shadow: 0 1px 0 #fff inset, 0 3px 0 var(--border-strong);
|
|
309
|
+
}
|
|
310
|
+
:root[data-theme="renaissance"] .btn:active {
|
|
311
|
+
transform: translateY(2px);
|
|
312
|
+
box-shadow: 0 1px 0 #fff inset, 0 0 0 var(--border-strong);
|
|
313
|
+
}
|
|
314
|
+
|
|
315
|
+
/* ─── INPUTS — ruled-line paper ─── */
|
|
316
|
+
:root[data-theme="renaissance"] .input {
|
|
317
|
+
background:
|
|
318
|
+
repeating-linear-gradient(transparent, transparent 21px, rgba(138, 94, 28, 0.18) 21px, rgba(138, 94, 28, 0.18) 22px),
|
|
319
|
+
var(--bg-input);
|
|
320
|
+
border: 1px solid var(--border-default);
|
|
321
|
+
border-radius: var(--radius-sm);
|
|
322
|
+
font-family: var(--font-body);
|
|
323
|
+
font-size: 14px;
|
|
324
|
+
color: var(--fg-default);
|
|
325
|
+
padding: 6px 10px;
|
|
326
|
+
}
|
|
327
|
+
:root[data-theme="renaissance"] .input:focus {
|
|
328
|
+
outline: none; background: #fff;
|
|
329
|
+
box-shadow: 0 0 0 1px var(--gold), 0 0 0 2px var(--border-strong);
|
|
330
|
+
}
|
|
331
|
+
|
|
332
|
+
/* ─── ROWS — ink-spread on hover ─── */
|
|
333
|
+
:root[data-theme="renaissance"] .row {
|
|
334
|
+
font-family: var(--font-body);
|
|
335
|
+
font-size: 15px;
|
|
336
|
+
color: var(--fg-default);
|
|
337
|
+
padding: 6px 10px;
|
|
338
|
+
position: relative;
|
|
339
|
+
background-image: linear-gradient(90deg, var(--bg-hover), var(--bg-hover));
|
|
340
|
+
background-size: 0% 100%;
|
|
341
|
+
background-repeat: no-repeat;
|
|
342
|
+
transition: background-size var(--dur-default) var(--ease-default), color var(--dur-fast);
|
|
343
|
+
}
|
|
344
|
+
:root[data-theme="renaissance"] .row:hover {
|
|
345
|
+
background-size: 100% 100%;
|
|
346
|
+
color: var(--crimson);
|
|
347
|
+
}
|
|
348
|
+
:root[data-theme="renaissance"] .row:hover::before {
|
|
349
|
+
content: '✦'; position: absolute; left: -2px; top: 50%; transform: translateY(-50%);
|
|
350
|
+
color: var(--gold); font-size: 10px;
|
|
351
|
+
}
|
|
352
|
+
|
|
353
|
+
/* ─── NODES as illuminated cards with red wax ─── */
|
|
354
|
+
:root[data-theme="renaissance"] .node {
|
|
355
|
+
background: var(--bg-elevated);
|
|
356
|
+
border: 1.5px solid var(--border-strong);
|
|
357
|
+
border-radius: var(--radius-md);
|
|
358
|
+
font-family: var(--font-display);
|
|
359
|
+
font-size: 11px;
|
|
360
|
+
letter-spacing: 0.08em;
|
|
361
|
+
text-transform: uppercase;
|
|
362
|
+
color: var(--fg-default);
|
|
363
|
+
padding: 10px 14px;
|
|
364
|
+
box-shadow:
|
|
365
|
+
0 0 0 1px var(--gold) inset,
|
|
366
|
+
0 0 0 3px var(--bg-elevated) inset,
|
|
367
|
+
0 0 0 4px var(--border-strong) inset,
|
|
368
|
+
0 4px 0 var(--border-strong),
|
|
369
|
+
0 6px 12px rgba(58, 32, 8, 0.25);
|
|
370
|
+
position: relative;
|
|
371
|
+
transition: transform var(--dur-default) var(--ease-emphasis);
|
|
372
|
+
}
|
|
373
|
+
:root[data-theme="renaissance"] .node:hover {
|
|
374
|
+
transform: translateY(-2px);
|
|
375
|
+
box-shadow:
|
|
376
|
+
0 0 0 1px var(--gold-bright) inset,
|
|
377
|
+
0 0 0 3px var(--bg-elevated) inset,
|
|
378
|
+
0 0 0 4px var(--border-strong) inset,
|
|
379
|
+
0 6px 0 var(--border-strong),
|
|
380
|
+
0 10px 20px rgba(58, 32, 8, 0.35);
|
|
381
|
+
}
|
|
382
|
+
/* Wax seal corner */
|
|
383
|
+
:root[data-theme="renaissance"] .node::after {
|
|
384
|
+
content: ''; position: absolute; top: -6px; right: -6px;
|
|
385
|
+
width: 16px; height: 16px;
|
|
386
|
+
background: radial-gradient(circle at 35% 30%, #c4202a, #5a0a08);
|
|
387
|
+
border-radius: 50%;
|
|
388
|
+
box-shadow: 0 1px 2px rgba(0,0,0,0.4);
|
|
389
|
+
}
|
|
390
|
+
|
|
391
|
+
/* ─── SQUARE NODES — guild emblems ─── */
|
|
392
|
+
:root[data-theme="renaissance"] .sq-node-box {
|
|
393
|
+
background: linear-gradient(180deg, var(--bg-elevated), #d4b078);
|
|
394
|
+
border: 2px solid var(--border-strong);
|
|
395
|
+
border-radius: 4px;
|
|
396
|
+
box-shadow: 0 3px 0 var(--border-strong), inset 0 0 0 1px var(--gold);
|
|
397
|
+
color: var(--crimson);
|
|
398
|
+
}
|
|
399
|
+
:root[data-theme="renaissance"] .sq-node.selected .sq-node-box {
|
|
400
|
+
border-color: var(--gold);
|
|
401
|
+
box-shadow: 0 0 0 3px rgba(212, 160, 48, 0.5), 0 3px 0 var(--border-strong), inset 0 0 0 1px var(--gold);
|
|
402
|
+
}
|
|
403
|
+
|
|
404
|
+
/* Wave 29: Renaissance executing nodes flicker like candlelight using
|
|
405
|
+
* ren-flicker (opacity pulse) — NOT the digital node-pulse. The gold
|
|
406
|
+
* border stays steady; only the ambient glow shimmers. Higher specificity
|
|
407
|
+
* than base.css's generic rule, so this wins. */
|
|
408
|
+
/* Wave 30.2: dedicated executing-pulse keyframe that animates
|
|
409
|
+
* BOX-SHADOW only (the original `ren-flicker` opacity-fade
|
|
410
|
+
* washed the whole node). Pulses ultramarine (lapis lazuli)
|
|
411
|
+
* intensity at high opacity for visibility against vellum.
|
|
412
|
+
* Lapis is 180° opposite the warm cream canvas, so even at the
|
|
413
|
+
* far halo (40% opacity) it reads as a luminous Marian halo
|
|
414
|
+
* rather than blending into the background. Smooth ease-in-out
|
|
415
|
+
* preserves the candleflame-flicker quality. */
|
|
416
|
+
@keyframes ren-pulse-exec {
|
|
417
|
+
0%, 100% {
|
|
418
|
+
box-shadow:
|
|
419
|
+
0 0 0 3px rgba(74, 114, 232, 0.85),
|
|
420
|
+
0 0 36px 8px rgba(74, 114, 232, 0.65),
|
|
421
|
+
0 0 72px 18px rgba(37, 72, 200, 0.40);
|
|
422
|
+
}
|
|
423
|
+
50% {
|
|
424
|
+
box-shadow:
|
|
425
|
+
0 0 0 4px rgba(74, 114, 232, 1),
|
|
426
|
+
0 0 52px 12px rgba(74, 114, 232, 0.85),
|
|
427
|
+
0 0 96px 28px rgba(37, 72, 200, 0.55);
|
|
428
|
+
}
|
|
429
|
+
}
|
|
430
|
+
|
|
431
|
+
:root[data-theme="renaissance"] .sq-node[data-executing] .sq-node-box,
|
|
432
|
+
:root[data-theme="renaissance"] .react-flow__node.executing .sq-node-box,
|
|
433
|
+
:root[data-theme="renaissance"] .react-flow__node.executing .node {
|
|
434
|
+
animation: ren-pulse-exec 2.0s ease-in-out infinite;
|
|
435
|
+
border-color: var(--lapis-bright);
|
|
436
|
+
}
|
|
437
|
+
:root[data-theme="renaissance"] .sq-node-pip {
|
|
438
|
+
border: 1px solid var(--border-strong);
|
|
439
|
+
box-shadow: 0 0 4px currentColor;
|
|
440
|
+
}
|
|
441
|
+
:root[data-theme="renaissance"] .sq-node-gear {
|
|
442
|
+
background: var(--gold);
|
|
443
|
+
color: var(--border-strong);
|
|
444
|
+
border: 1px solid var(--border-strong);
|
|
445
|
+
font-size: 10px;
|
|
446
|
+
}
|
|
447
|
+
:root[data-theme="renaissance"] .sq-node-handle.out { background: var(--crimson); }
|
|
448
|
+
:root[data-theme="renaissance"] .sq-node-label {
|
|
449
|
+
color: var(--fg-default);
|
|
450
|
+
letter-spacing: 0.08em;
|
|
451
|
+
font-weight: 600;
|
|
452
|
+
}
|
|
453
|
+
|
|
454
|
+
/* ─── CATEGORY (palette) — illuminated section ─── */
|
|
455
|
+
:root[data-theme="renaissance"] .cat {
|
|
456
|
+
background: var(--bg-elevated);
|
|
457
|
+
border: 1px solid var(--border-default);
|
|
458
|
+
border-radius: 2px;
|
|
459
|
+
}
|
|
460
|
+
:root[data-theme="renaissance"] .cat-head {
|
|
461
|
+
border-bottom: 1px solid var(--border-default);
|
|
462
|
+
background: linear-gradient(180deg, transparent, rgba(212, 160, 48, 0.08));
|
|
463
|
+
}
|
|
464
|
+
:root[data-theme="renaissance"] .cat-tile {
|
|
465
|
+
background: var(--gold);
|
|
466
|
+
border: 1px solid var(--border-strong);
|
|
467
|
+
color: var(--border-strong);
|
|
468
|
+
}
|
|
469
|
+
:root[data-theme="renaissance"] .cat-name {
|
|
470
|
+
font-family: var(--font-display);
|
|
471
|
+
letter-spacing: 0.10em;
|
|
472
|
+
text-transform: uppercase;
|
|
473
|
+
color: var(--crimson);
|
|
474
|
+
}
|
|
475
|
+
:root[data-theme="renaissance"] .cat-count {
|
|
476
|
+
background: var(--bg-active);
|
|
477
|
+
color: var(--fg-muted);
|
|
478
|
+
border: 1px solid var(--border-default);
|
|
479
|
+
}
|
|
480
|
+
|
|
481
|
+
/* ─── COMP ITEMS — entry cards ─── */
|
|
482
|
+
:root[data-theme="renaissance"] .comp {
|
|
483
|
+
background: var(--bg-panel);
|
|
484
|
+
border: 1px solid var(--border-default);
|
|
485
|
+
border-radius: 2px;
|
|
486
|
+
}
|
|
487
|
+
:root[data-theme="renaissance"] .comp:hover {
|
|
488
|
+
background: var(--bg-hover);
|
|
489
|
+
border-color: var(--gold);
|
|
490
|
+
}
|
|
491
|
+
:root[data-theme="renaissance"] .comp-ico {
|
|
492
|
+
background: var(--bg-elevated);
|
|
493
|
+
border: 1px solid var(--border-default);
|
|
494
|
+
color: var(--crimson);
|
|
495
|
+
}
|
|
496
|
+
:root[data-theme="renaissance"] .comp-name {
|
|
497
|
+
font-family: var(--font-display);
|
|
498
|
+
font-weight: 600;
|
|
499
|
+
letter-spacing: 0.04em;
|
|
500
|
+
}
|
|
501
|
+
:root[data-theme="renaissance"] .comp-desc {
|
|
502
|
+
font-style: italic;
|
|
503
|
+
color: var(--fg-muted);
|
|
504
|
+
}
|
|
505
|
+
|
|
506
|
+
/* ─── MENU POP — parchment dropdown ─── */
|
|
507
|
+
:root[data-theme="renaissance"] .menu-pop {
|
|
508
|
+
background: var(--bg-elevated);
|
|
509
|
+
border: 2px solid var(--border-strong);
|
|
510
|
+
box-shadow: inset 0 0 0 1px var(--gold), 0 8px 24px rgba(58,32,8,0.4);
|
|
511
|
+
}
|
|
512
|
+
:root[data-theme="renaissance"] .menu-pop-item {
|
|
513
|
+
font-family: var(--font-body);
|
|
514
|
+
font-size: 13px;
|
|
515
|
+
}
|
|
516
|
+
:root[data-theme="renaissance"] .menu-pop-item:hover {
|
|
517
|
+
background: var(--bg-hover);
|
|
518
|
+
color: var(--crimson);
|
|
519
|
+
}
|
|
520
|
+
|
|
521
|
+
/* ─── SETTINGS SECTIONS ─── */
|
|
522
|
+
:root[data-theme="renaissance"] .settings-section {
|
|
523
|
+
background: var(--bg-elevated);
|
|
524
|
+
border: 1px solid var(--border-default);
|
|
525
|
+
}
|
|
526
|
+
:root[data-theme="renaissance"] .settings-section h3 {
|
|
527
|
+
color: var(--crimson);
|
|
528
|
+
font-family: var(--font-display);
|
|
529
|
+
border-bottom: 1px solid var(--gold);
|
|
530
|
+
padding-bottom: 8px;
|
|
531
|
+
letter-spacing: 0.06em;
|
|
532
|
+
}
|
|
533
|
+
:root[data-theme="renaissance"] .settings-summary {
|
|
534
|
+
background: var(--bg-panel);
|
|
535
|
+
border: 1px dashed var(--border-default);
|
|
536
|
+
font-family: var(--font-mono);
|
|
537
|
+
font-style: italic;
|
|
538
|
+
}
|
|
539
|
+
|
|
540
|
+
/* ─── CRED CARDS ─── */
|
|
541
|
+
:root[data-theme="renaissance"] .cred-card {
|
|
542
|
+
background: var(--bg-elevated);
|
|
543
|
+
border: 1px solid var(--border-default);
|
|
544
|
+
border-radius: 2px;
|
|
545
|
+
}
|
|
546
|
+
:root[data-theme="renaissance"] .cred-card-head {
|
|
547
|
+
background: linear-gradient(180deg, transparent, rgba(212, 160, 48, 0.10));
|
|
548
|
+
border-bottom: 1px solid var(--border-default);
|
|
549
|
+
}
|
|
550
|
+
:root[data-theme="renaissance"] .cred-card .name {
|
|
551
|
+
font-family: var(--font-display);
|
|
552
|
+
letter-spacing: 0.08em;
|
|
553
|
+
text-transform: uppercase;
|
|
554
|
+
font-size: 12px;
|
|
555
|
+
}
|
|
556
|
+
:root[data-theme="renaissance"] .cred-tag {
|
|
557
|
+
font-family: var(--font-display);
|
|
558
|
+
letter-spacing: 0.08em;
|
|
559
|
+
font-size: 9px;
|
|
560
|
+
}
|
|
561
|
+
:root[data-theme="renaissance"] .cred-card-desc { font-style: italic; }
|
|
562
|
+
|
|
563
|
+
/* Credential rows — sealed entries */
|
|
564
|
+
:root[data-theme="renaissance"] .cred-row {
|
|
565
|
+
background: var(--bg-elevated);
|
|
566
|
+
border: 1px solid var(--border-default);
|
|
567
|
+
position: relative;
|
|
568
|
+
}
|
|
569
|
+
:root[data-theme="renaissance"] .cred-row::before {
|
|
570
|
+
content: '✦'; color: var(--gold); margin-right: 4px;
|
|
571
|
+
}
|
|
572
|
+
:root[data-theme="renaissance"] .cred-row .name {
|
|
573
|
+
font-family: var(--font-display);
|
|
574
|
+
font-size: 12px;
|
|
575
|
+
letter-spacing: 0.10em;
|
|
576
|
+
}
|
|
577
|
+
:root[data-theme="renaissance"] .cred-row .badge {
|
|
578
|
+
font-family: var(--font-display);
|
|
579
|
+
letter-spacing: 0.10em;
|
|
580
|
+
font-size: 9px;
|
|
581
|
+
padding: 3px 8px;
|
|
582
|
+
}
|
|
583
|
+
|
|
584
|
+
/* ─── PARAMETER PANEL COLS ─── */
|
|
585
|
+
:root[data-theme="renaissance"] .param-col {
|
|
586
|
+
background: var(--bg-elevated);
|
|
587
|
+
border-right: 2px double var(--border-strong);
|
|
588
|
+
}
|
|
589
|
+
:root[data-theme="renaissance"] .param-col-head {
|
|
590
|
+
background: linear-gradient(180deg, transparent, rgba(212, 160, 48, 0.10));
|
|
591
|
+
border-bottom: 1px solid var(--gold);
|
|
592
|
+
font-family: var(--font-display);
|
|
593
|
+
color: var(--crimson);
|
|
594
|
+
letter-spacing: 0.10em;
|
|
595
|
+
text-transform: uppercase;
|
|
596
|
+
}
|
|
597
|
+
:root[data-theme="renaissance"] .json-block {
|
|
598
|
+
background: var(--bg-panel);
|
|
599
|
+
border: 1px solid var(--border-default);
|
|
600
|
+
font-family: var(--font-mono);
|
|
601
|
+
color: var(--fg-default);
|
|
602
|
+
}
|
|
603
|
+
:root[data-theme="renaissance"] .json-key { color: var(--crimson); font-style: italic; }
|
|
604
|
+
:root[data-theme="renaissance"] .json-str { color: hsl(var(--success)); }
|
|
605
|
+
:root[data-theme="renaissance"] .json-num { color: var(--gold-bright); }
|
|
606
|
+
|
|
607
|
+
/* ─── CHAT TABS ─── */
|
|
608
|
+
:root[data-theme="renaissance"] .chat-tab {
|
|
609
|
+
font-family: var(--font-display);
|
|
610
|
+
letter-spacing: 0.08em;
|
|
611
|
+
text-transform: uppercase;
|
|
612
|
+
font-size: 10px;
|
|
613
|
+
}
|
|
614
|
+
:root[data-theme="renaissance"] .chat-tab.active {
|
|
615
|
+
background: var(--gold);
|
|
616
|
+
color: var(--border-strong);
|
|
617
|
+
}
|
|
618
|
+
|
|
619
|
+
/* ─── CHAT MESSAGES — letter-style ─── */
|
|
620
|
+
:root[data-theme="renaissance"] .chat-msg {
|
|
621
|
+
font-family: var(--font-body);
|
|
622
|
+
font-size: 14px;
|
|
623
|
+
border-radius: var(--radius-sm);
|
|
624
|
+
}
|
|
625
|
+
:root[data-theme="renaissance"] .chat-msg-user {
|
|
626
|
+
background: linear-gradient(180deg, var(--gold-bright), var(--gold));
|
|
627
|
+
color: var(--fg-default);
|
|
628
|
+
border: 1px solid var(--border-strong);
|
|
629
|
+
}
|
|
630
|
+
:root[data-theme="renaissance"] .chat-msg-bot {
|
|
631
|
+
background: var(--bg-elevated);
|
|
632
|
+
border: 1px solid var(--border-default);
|
|
633
|
+
position: relative;
|
|
634
|
+
}
|
|
635
|
+
:root[data-theme="renaissance"] .chat-msg-bot::before {
|
|
636
|
+
content: '✦'; color: var(--gold); margin-right: 6px;
|
|
637
|
+
}
|
|
638
|
+
|
|
639
|
+
/* ─── THEME SWITCHER chrome ─── */
|
|
640
|
+
:root[data-theme="renaissance"] .theme-switcher {
|
|
641
|
+
background: linear-gradient(180deg, var(--bg-elevated), #e8c478);
|
|
642
|
+
border: 1.5px solid var(--border-strong);
|
|
643
|
+
box-shadow: 0 0 0 1px var(--gold) inset, 0 6px 16px rgba(58, 32, 8, 0.4);
|
|
644
|
+
}
|
|
645
|
+
|
|
646
|
+
/* ─── EMPTY STATE drop cap ─── */
|
|
647
|
+
:root[data-theme="renaissance"] .empty-state .glyph {
|
|
648
|
+
font-family: var(--font-display);
|
|
649
|
+
font-size: 96px;
|
|
650
|
+
color: var(--gold);
|
|
651
|
+
text-shadow: 3px 3px 0 var(--border-strong);
|
|
652
|
+
font-weight: 700;
|
|
653
|
+
}
|
|
654
|
+
|
|
655
|
+
/* ─── STATUS BAR — illuminated footer rule ─── */
|
|
656
|
+
:root[data-theme="renaissance"] .statusbar {
|
|
657
|
+
background: linear-gradient(180deg, var(--bg-panel), #d4b078);
|
|
658
|
+
border-top: 2px double var(--border-strong);
|
|
659
|
+
font-family: var(--font-mono);
|
|
660
|
+
color: var(--fg-muted);
|
|
661
|
+
font-style: italic;
|
|
662
|
+
}
|
|
663
|
+
:root[data-theme="renaissance"] .statusbar .pip {
|
|
664
|
+
background: hsl(var(--success));
|
|
665
|
+
box-shadow: 0 0 6px hsl(var(--success)), 0 0 0 1px var(--border-strong);
|
|
666
|
+
}
|
|
667
|
+
|
|
668
|
+
/* ─── MODAL — illuminated codex page ─── */
|
|
669
|
+
:root[data-theme="renaissance"] .modal {
|
|
670
|
+
background:
|
|
671
|
+
url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='200' height='200'><filter id='n'><feTurbulence baseFrequency='0.85' numOctaves='2'/><feColorMatrix values='0 0 0 0 0.36 0 0 0 0 0.23 0 0 0 0 0.05 0 0 0 0.06 0'/></filter><rect width='200' height='200' filter='url(%23n)'/></svg>"),
|
|
672
|
+
var(--bg-elevated);
|
|
673
|
+
border: 2px solid var(--border-strong);
|
|
674
|
+
box-shadow:
|
|
675
|
+
inset 0 0 0 1px var(--gold),
|
|
676
|
+
inset 0 0 0 5px var(--bg-elevated),
|
|
677
|
+
inset 0 0 0 6px var(--gold),
|
|
678
|
+
0 30px 80px rgba(58, 32, 8, 0.6);
|
|
679
|
+
padding: 8px;
|
|
680
|
+
}
|
|
681
|
+
:root[data-theme="renaissance"] .modal-head {
|
|
682
|
+
border-bottom: 2px double var(--border-strong);
|
|
683
|
+
padding: 16px 20px 14px;
|
|
684
|
+
}
|
|
685
|
+
:root[data-theme="renaissance"] .modal-title {
|
|
686
|
+
color: var(--fg-default);
|
|
687
|
+
font-family: var(--font-display);
|
|
688
|
+
}
|
|
689
|
+
:root[data-theme="renaissance"] .modal-foot {
|
|
690
|
+
border-top: 2px double var(--border-strong);
|
|
691
|
+
}
|
|
692
|
+
:root[data-theme="renaissance"] .field label {
|
|
693
|
+
color: #8a5e1c;
|
|
694
|
+
}
|
|
695
|
+
|
|
696
|
+
/* ─── COMMAND PALETTE — open scroll ─── */
|
|
697
|
+
:root[data-theme="renaissance"] .cmdk {
|
|
698
|
+
background:
|
|
699
|
+
url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='200' height='200'><filter id='n'><feTurbulence baseFrequency='0.85' numOctaves='2'/><feColorMatrix values='0 0 0 0 0.36 0 0 0 0 0.23 0 0 0 0 0.05 0 0 0 0.06 0'/></filter><rect width='200' height='200' filter='url(%23n)'/></svg>"),
|
|
700
|
+
var(--bg-elevated);
|
|
701
|
+
border: 2px solid var(--border-strong);
|
|
702
|
+
box-shadow: inset 0 0 0 1px var(--gold), 0 30px 60px rgba(58, 32, 8, 0.5);
|
|
703
|
+
}
|
|
704
|
+
:root[data-theme="renaissance"] .cmdk input {
|
|
705
|
+
font-family: var(--font-display);
|
|
706
|
+
font-size: 14px;
|
|
707
|
+
letter-spacing: 0.06em;
|
|
708
|
+
border-bottom: 2px double var(--border-strong);
|
|
709
|
+
background: transparent;
|
|
710
|
+
color: var(--fg-default);
|
|
711
|
+
}
|
|
712
|
+
:root[data-theme="renaissance"] .cmdk-item {
|
|
713
|
+
font-family: var(--font-body);
|
|
714
|
+
font-size: 14px;
|
|
715
|
+
}
|
|
716
|
+
:root[data-theme="renaissance"] .cmdk-item.active {
|
|
717
|
+
background: linear-gradient(90deg, transparent, var(--bg-hover), transparent);
|
|
718
|
+
color: var(--crimson);
|
|
719
|
+
}
|
|
720
|
+
:root[data-theme="renaissance"] .cmdk-item.active::before {
|
|
721
|
+
content: '✦'; color: var(--gold); margin-right: 6px;
|
|
722
|
+
}
|
|
723
|
+
:root[data-theme="renaissance"] .cmdk-item kbd {
|
|
724
|
+
background: var(--bg-active);
|
|
725
|
+
border: 1px solid var(--border-default);
|
|
726
|
+
font-family: var(--font-mono);
|
|
727
|
+
}
|