@atmem/architect 0.0.0-stage → 0.2.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/CONSTITUTION.md +144 -0
- package/LICENSE +202 -0
- package/NOTICE +6 -0
- package/README.md +31 -2
- package/agent-skills/discovery/SKILL.md +48 -0
- package/agent-skills/discovery/topics.json +139 -0
- package/agent-skills/generation-capabilities.json +760 -0
- package/agent-skills/service-lifecycle.json +21 -0
- package/agent-skills/specialists/architecture/SKILL.md +15 -0
- package/agent-skills/specialists/aws/SKILL.md +17 -0
- package/agent-skills/specialists/azure/SKILL.md +7 -0
- package/agent-skills/specialists/composition/SKILL.md +17 -0
- package/agent-skills/specialists/devops/SKILL.md +10 -0
- package/agent-skills/specialists/finops/SKILL.md +7 -0
- package/agent-skills/specialists/gcp/SKILL.md +7 -0
- package/agent-skills/specialists/ibm/SKILL.md +7 -0
- package/agent-skills/specialists/manifest.json +13 -0
- package/agent-skills/specialists/pulumi/SKILL.md +7 -0
- package/agent-skills/specialists/security/SKILL.md +7 -0
- package/agent-skills/specialists/terraform/SKILL.md +14 -0
- package/agent-skills/upstream/aws/LICENSE +175 -0
- package/agent-skills/upstream/aws/SKILL.md +125 -0
- package/agent-skills/upstream/azure/LICENSE +21 -0
- package/agent-skills/upstream/azure/SKILL.md +387 -0
- package/agent-skills/upstream/gcp/LICENSE +202 -0
- package/agent-skills/upstream/gcp/SKILL.md +159 -0
- package/agent-skills/upstream/manifest.json +57 -0
- package/agent-skills/upstream/pulumi/LICENSE +201 -0
- package/agent-skills/upstream/pulumi/SKILL.md +501 -0
- package/agent-skills/upstream/terraform/LICENSE +373 -0
- package/agent-skills/upstream/terraform/SKILL.md +316 -0
- package/agent-skills/workflows/workflows.json +601 -0
- package/cli/architect.mjs +3 -0
- package/cli/runtime.mjs +115 -0
- package/dist/assets/html2canvas.esm-QH1iLAAe.js +22 -0
- package/dist/assets/index-BTLHaa3J.css +1 -0
- package/dist/assets/index-CQ2C1gKF.js +21338 -0
- package/dist/assets/index.es-DTyqIdaO.js +18 -0
- package/dist/assets/purify.es-CAi2OJFm.js +3 -0
- package/dist/assets/visual-export-Ox0j5xj5.js +173 -0
- package/dist/favicon.svg +2 -0
- package/dist/fonts/DM-Sans-OFL.txt +93 -0
- package/dist/fonts/Manrope-OFL.txt +93 -0
- package/dist/fonts/NotoSans-Regular.ttf +0 -0
- package/dist/fonts/OFL.txt +94 -0
- package/dist/fonts/dm-sans-latin-wght-normal.woff2 +0 -0
- package/dist/fonts/manrope-latin-wght-normal.woff2 +0 -0
- package/dist/index.html +4 -0
- package/dist/licenses/atmem-APACHE-2.0.txt +202 -0
- package/dist/licenses/aws-architect-LICENSE.txt +17 -0
- package/dist/licenses/aws-mcp-LICENSE.txt +175 -0
- package/dist/licenses/aws-mcp-NOTICE.txt +1 -0
- package/dist/licenses/cloud-emulation-notices.txt +36619 -0
- package/dist/licenses/dependency-notices.txt +6379 -0
- package/dist/licenses/emulation-notices.txt +717 -0
- package/dist/licenses/github-copilot-sdk-LICENSE.txt +21 -0
- package/dist/licenses/memory-dependency-notices.txt +3319 -0
- package/dist/licenses/openarchflow-LICENSE.txt +21 -0
- package/dist/licenses/python-dependency-notices.txt +11951 -0
- package/docs/upstream-lock.json +26 -0
- package/knowledge/engineering-practices.json +536 -0
- package/package.json +30 -4
- package/packaging/uv-release-lock.json +54 -0
- package/public/licenses/atmem-APACHE-2.0.txt +202 -0
- package/public/licenses/aws-architect-LICENSE.txt +17 -0
- package/public/licenses/aws-mcp-LICENSE.txt +175 -0
- package/public/licenses/aws-mcp-NOTICE.txt +1 -0
- package/public/licenses/cloud-emulation-notices.txt +36619 -0
- package/public/licenses/dependency-notices.txt +6379 -0
- package/public/licenses/emulation-notices.txt +717 -0
- package/public/licenses/github-copilot-sdk-LICENSE.txt +21 -0
- package/public/licenses/memory-dependency-notices.txt +3319 -0
- package/public/licenses/openarchflow-LICENSE.txt +21 -0
- package/public/licenses/python-dependency-notices.txt +11951 -0
- package/scripts/terraform-render.mjs +8 -0
- package/server/__init__.py +0 -0
- package/server/abstraction.py +28 -0
- package/server/agent_runtime.py +153 -0
- package/server/app.py +257 -0
- package/server/architect.py +112 -0
- package/server/architecture_activity.py +67 -0
- package/server/attachments.py +101 -0
- package/server/cloud-emulation-requirements.txt +29 -0
- package/server/codex_app_server.py +219 -0
- package/server/codex_engineering_backend.py +266 -0
- package/server/codex_worker_policy.py +193 -0
- package/server/contracts.py +315 -0
- package/server/copilot_worker.py +16 -0
- package/server/dependency_mirror.py +54 -0
- package/server/design_patch.py +43 -0
- package/server/emulation-requirements.txt +8 -0
- package/server/emulation_adapters.py +20 -0
- package/server/emulation_routes.py +98 -0
- package/server/emulation_worker.py +351 -0
- package/server/engineering_artifacts.py +221 -0
- package/server/engineering_assets/application-runtime.json +4372 -0
- package/server/engineering_assets/architecture_work.schema.json +79 -0
- package/server/engineering_assets/materialize_runtime.py +62 -0
- package/server/engineering_assets/prepare_tools.py +96 -0
- package/server/engineering_assets/sql_validation.py +59 -0
- package/server/engineering_contexts.py +120 -0
- package/server/engineering_delivery.py +210 -0
- package/server/engineering_finalization.py +210 -0
- package/server/engineering_handoff.py +172 -0
- package/server/engineering_jobs.py +206 -0
- package/server/engineering_knowledge.py +75 -0
- package/server/engineering_reconciliation.py +159 -0
- package/server/engineering_routes.py +483 -0
- package/server/engineering_sessions.py +273 -0
- package/server/engineering_tools.py +166 -0
- package/server/generation_lint.py +18 -0
- package/server/local_providers.py +185 -0
- package/server/local_validation.py +236 -0
- package/server/memory-requirements.lock +181 -0
- package/server/memory-requirements.txt +6 -0
- package/server/memory_context.py +58 -0
- package/server/memory_routes.py +141 -0
- package/server/memory_service.py +306 -0
- package/server/memory_worker.py +129 -0
- package/server/openai_voice.py +80 -0
- package/server/orca_handoff.py +90 -0
- package/server/packaged_app.py +9 -0
- package/server/pricing.py +190 -0
- package/server/process_control_observation.py +31 -0
- package/server/prompts.py +136 -0
- package/server/public_faq_emulation_worker.py +44 -0
- package/server/requirements.lock +1618 -0
- package/server/requirements.txt +68 -0
- package/server/runtime_dependency_locks.py +27 -0
- package/server/runtime_evidence.py +93 -0
- package/server/settings.py +14 -0
- package/server/skills.py +103 -0
- package/server/storage_emulation_worker.py +160 -0
- package/server/structured_emulation_worker.py +48 -0
- package/server/terraform_routes.py +118 -0
- package/server/upstream/__init__.py +0 -0
- package/server/upstream/agent/__init__.py +1 -0
- package/server/upstream/agent/aws_architect.py +600 -0
- package/server/upstream/agent/config/__init__.py +1 -0
- package/server/upstream/agent/config/agent_config.py +82 -0
- package/server/upstream/agent/config/prompts.py +138 -0
- package/server/upstream/agent/rate_limiter.py +62 -0
- package/server/upstream/utils/__init__.py +1 -0
- package/server/upstream/utils/file_writer.py +43 -0
- package/server/validation_applicability.py +85 -0
- package/server/validation_jobs.py +252 -0
- package/server/validation_workers.py +48 -0
- package/server/voice_routes.py +91 -0
- package/server/voice_worker.py +26 -0
- package/server/windows_snapshot.py +119 -0
- package/specs/028-convergence-evaluation/evidence/20261110-ibm-invoice-native/registry-structured/qualification.json +72 -0
- package/specs/028-convergence-evaluation/evidence/20261110-invoice-runtime/durable-current/receipt.json +61 -0
- package/specs/029-general-purpose-engine/evidence/20261111-runtime-dependencies/sdk/receipt.json +22 -0
- package/src/ArchitectureActivity.jsx +54 -0
- package/src/ArchitectureWorkPanel.jsx +39 -0
- package/src/ArtifactChecks.jsx +49 -0
- package/src/BlockRequirements.jsx +13 -0
- package/src/BrainActivity.jsx +11 -0
- package/src/ChatMessage.jsx +29 -0
- package/src/ChatResizeHandle.jsx +6 -0
- package/src/CodePreview.jsx +8 -0
- package/src/ComponentReview.jsx +31 -0
- package/src/DeliveryViews.jsx +59 -0
- package/src/EmulationPanel.jsx +44 -0
- package/src/EngagementViews.jsx +387 -0
- package/src/EngineeringPanel.jsx +151 -0
- package/src/FileTree.jsx +7 -0
- package/src/FinalChecklist.jsx +15 -0
- package/src/HelpNote.jsx +3 -0
- package/src/ImplementationDelivery.jsx +91 -0
- package/src/JourneyViews.jsx +403 -0
- package/src/LocationChoices.jsx +12 -0
- package/src/MemoryPanel.jsx +58 -0
- package/src/OpenAIVoicePanel.jsx +66 -0
- package/src/OutputsView.jsx +71 -0
- package/src/ProjectChecks.jsx +44 -0
- package/src/TerraformView.jsx +57 -0
- package/src/WorkbenchDialogs.jsx +532 -0
- package/src/activity-presentation.mjs +28 -0
- package/src/ai-qualification-scenarios.mjs +31 -0
- package/src/approval-application-files.mjs +32 -0
- package/src/approval-applications.mjs +82 -0
- package/src/approval-spec-kit.mjs +30 -0
- package/src/architecture-activity.css +28 -0
- package/src/architecture-activity.mjs +63 -0
- package/src/architecture-work.mjs +176 -0
- package/src/artifact-work.mjs +103 -0
- package/src/async-documents.mjs +191 -0
- package/src/atflow.css +1140 -0
- package/src/atforma.css +748 -0
- package/src/atmem-tokens.css +79 -0
- package/src/aws-preflight.mjs +60 -0
- package/src/aws-public-faq.mjs +102 -0
- package/src/aws-validation-scenarios.mjs +10 -0
- package/src/aws-validation.mjs +48 -0
- package/src/azure-plan-mocks.mjs +25 -0
- package/src/azure-structured.mjs +133 -0
- package/src/bedrock-summary.mjs +152 -0
- package/src/bounded-rag.mjs +60 -0
- package/src/brand.css +9 -0
- package/src/canvas-view.mjs +28 -0
- package/src/capability-composition.mjs +44 -0
- package/src/chat-attachments.mjs +13 -0
- package/src/cloud-provider-locks.mjs +9 -0
- package/src/cloud-storage-scenarios.mjs +2 -0
- package/src/component-review.mjs +55 -0
- package/src/composition-spec-kit.mjs +30 -0
- package/src/consultation-context.mjs +15 -0
- package/src/consultation.mjs +52 -0
- package/src/container-contracts.mjs +5 -0
- package/src/container-inspection.mjs +75 -0
- package/src/container-runtime.mjs +30 -0
- package/src/container-security-inspection.mjs +49 -0
- package/src/container-terraform.mjs +109 -0
- package/src/conversation.mjs +18 -0
- package/src/core.mjs +863 -0
- package/src/cross-cloud-storage.mjs +100 -0
- package/src/delivery-capabilities.mjs +25 -0
- package/src/delivery.mjs +58 -0
- package/src/deployment-ownership.mjs +10 -0
- package/src/deployment-region.mjs +11 -0
- package/src/derive.mjs +31 -0
- package/src/design-build-flow.mjs +10 -0
- package/src/diagram-attention.mjs +24 -0
- package/src/discovery.mjs +359 -0
- package/src/document.mjs +170 -0
- package/src/emulation-feedback.mjs +61 -0
- package/src/emulation-guidance.mjs +37 -0
- package/src/engagement.mjs +274 -0
- package/src/engineering-client.mjs +73 -0
- package/src/engineering-defaults.mjs +17 -0
- package/src/engineering.css +31 -0
- package/src/enterprise-application.mjs +76 -0
- package/src/enterprise-aws-host-infrastructure.mjs +62 -0
- package/src/enterprise-aws-host-tests.mjs +15 -0
- package/src/enterprise-aws-infrastructure-tests.mjs +38 -0
- package/src/enterprise-aws-infrastructure.mjs +138 -0
- package/src/enterprise-google-infrastructure.mjs +84 -0
- package/src/enterprise-google-tests.mjs +25 -0
- package/src/estimate.mjs +190 -0
- package/src/existing-references.mjs +18 -0
- package/src/external-identities.mjs +17 -0
- package/src/faq-lambda-build.mjs +28 -0
- package/src/final-package.mjs +34 -0
- package/src/gcp-structured.mjs +104 -0
- package/src/generation-provider.mjs +7 -0
- package/src/generation-quality.mjs +69 -0
- package/src/handoff.mjs +141 -0
- package/src/ibm-registry.mjs +12 -0
- package/src/ibm-structured.mjs +103 -0
- package/src/identifiers.mjs +15 -0
- package/src/implementation-map.mjs +14 -0
- package/src/implementation-outcome.mjs +8 -0
- package/src/incomplete-terraform.mjs +9 -0
- package/src/integrations.ts +137 -0
- package/src/interface-contracts.mjs +30 -0
- package/src/invoice-application.mjs +66 -0
- package/src/invoice-aws-operations.mjs +136 -0
- package/src/invoice-aws.mjs +143 -0
- package/src/invoice-azure-operations.mjs +147 -0
- package/src/invoice-azure.mjs +134 -0
- package/src/invoice-builder.mjs +35 -0
- package/src/invoice-dependencies.mjs +43 -0
- package/src/invoice-gcp-operations.mjs +178 -0
- package/src/invoice-gcp.mjs +104 -0
- package/src/invoice-ibm-operations.mjs +278 -0
- package/src/invoice-ibm.mjs +142 -0
- package/src/invoice-operations.mjs +143 -0
- package/src/invoice-plan.mjs +45 -0
- package/src/invoice-region.mjs +6 -0
- package/src/invoice-spec-kit.mjs +61 -0
- package/src/invoice-state.mjs +7 -0
- package/src/invoice-terraform.mjs +29 -0
- package/src/invoice-tests.mjs +122 -0
- package/src/journey-workspace.css +106 -0
- package/src/journey.mjs +97 -0
- package/src/levels.mjs +145 -0
- package/src/local-agent.mjs +184 -0
- package/src/main.jsx +2481 -0
- package/src/model-policy-preflight.mjs +34 -0
- package/src/openai-voice.mjs +102 -0
- package/src/output-bundle.mjs +13 -0
- package/src/ownership-inspection.mjs +28 -0
- package/src/pack.mjs +201 -0
- package/src/pricing.mjs +85 -0
- package/src/production-state.mjs +8 -0
- package/src/project-copy.mjs +10 -0
- package/src/project-file.mjs +160 -0
- package/src/project-links.mjs +3 -0
- package/src/protected-state.mjs +43 -0
- package/src/public-faq-builder.mjs +19 -0
- package/src/public-faq-clouds.mjs +251 -0
- package/src/public-faq.mjs +122 -0
- package/src/pulumi.mjs +123 -0
- package/src/python-container.mjs +25 -0
- package/src/python-runtime.mjs +50 -0
- package/src/rag-handler.mjs +43 -0
- package/src/rag-web-assets.mjs +52 -0
- package/src/rag-web.mjs +68 -0
- package/src/records.mjs +177 -0
- package/src/resources.mjs +163 -0
- package/src/review.mjs +252 -0
- package/src/runtime/EnterpriseDocument.java +89 -0
- package/src/runtime/approved_http_destination.py +72 -0
- package/src/runtime/aws-lambda-qualification-lock.json +7 -0
- package/src/runtime/aws-python-lock.json +82 -0
- package/src/runtime/aws-web-python-lock.json +887 -0
- package/src/runtime/aws_json_model.py +42 -0
- package/src/runtime/azure-python-lock.json +863 -0
- package/src/runtime/azure-sources.json +8 -0
- package/src/runtime/azure-test-lock.json +23 -0
- package/src/runtime/azure_acceptance.py +192 -0
- package/src/runtime/azure_structured.py +153 -0
- package/src/runtime/bounded_rag.py +126 -0
- package/src/runtime/catalog_admin.py +70 -0
- package/src/runtime/cloud-sql-proxy-lock.json +8 -0
- package/src/runtime/cloud-sql-proxy-security-review.json +30 -0
- package/src/runtime/connector_cli.py +50 -0
- package/src/runtime/connector_sync.py +70 -0
- package/src/runtime/durable-python-lock.json +247 -0
- package/src/runtime/durable_workflow.py +325 -0
- package/src/runtime/enterprise-application-manifest.json +110 -0
- package/src/runtime/enterprise-application-sources.json +266 -0
- package/src/runtime/enterprise-auth-python-lock.json +592 -0
- package/src/runtime/enterprise-aws-host-bootstrap-source.json +1 -0
- package/src/runtime/enterprise-aws-host-probe-source.json +1 -0
- package/src/runtime/enterprise-aws-task-template.json +235 -0
- package/src/runtime/enterprise-document-lock.json +18 -0
- package/src/runtime/enterprise-document.Dockerfile +15 -0
- package/src/runtime/enterprise-runtime-aws-python-lock.json +1115 -0
- package/src/runtime/enterprise-runtime-azure-python-lock.json +1106 -0
- package/src/runtime/enterprise-runtime-gcp-python-lock.json +1060 -0
- package/src/runtime/enterprise-runtime-ibm-python-lock.json +1096 -0
- package/src/runtime/enterprise-runtime-python-lock.json +1058 -0
- package/src/runtime/enterprise-runtime.Dockerfile +15 -0
- package/src/runtime/enterprise-web-app.js +1 -0
- package/src/runtime/enterprise-web-entry.js +105 -0
- package/src/runtime/enterprise-web-lock.json +29 -0
- package/src/runtime/enterprise-web-notices.txt +229 -0
- package/src/runtime/enterprise-web.css +4 -0
- package/src/runtime/enterprise-web.html +8 -0
- package/src/runtime/enterprise_audit.py +91 -0
- package/src/runtime/enterprise_audit_schema.sql +25 -0
- package/src/runtime/enterprise_auth_schema.sql +67 -0
- package/src/runtime/enterprise_auth_store.py +241 -0
- package/src/runtime/enterprise_aws_host_bootstrap.py +120 -0
- package/src/runtime/enterprise_aws_host_probe.py +105 -0
- package/src/runtime/enterprise_aws_hosts.py +136 -0
- package/src/runtime/enterprise_aws_jobs.py +300 -0
- package/src/runtime/enterprise_aws_objects.py +93 -0
- package/src/runtime/enterprise_aws_transfer.py +83 -0
- package/src/runtime/enterprise_azure_batch_api.py +128 -0
- package/src/runtime/enterprise_azure_host.py +599 -0
- package/src/runtime/enterprise_azure_jobs.py +294 -0
- package/src/runtime/enterprise_azure_objects.py +234 -0
- package/src/runtime/enterprise_azure_pool.py +161 -0
- package/src/runtime/enterprise_azure_transfer.py +122 -0
- package/src/runtime/enterprise_configuration.py +136 -0
- package/src/runtime/enterprise_document.py +116 -0
- package/src/runtime/enterprise_document_cli.py +32 -0
- package/src/runtime/enterprise_document_contract.py +54 -0
- package/src/runtime/enterprise_document_job.py +109 -0
- package/src/runtime/enterprise_document_jobs.py +122 -0
- package/src/runtime/enterprise_document_jobs_schema.sql +23 -0
- package/src/runtime/enterprise_extraction_cache.py +186 -0
- package/src/runtime/enterprise_extraction_schema.sql +17 -0
- package/src/runtime/enterprise_google_jobs.py +275 -0
- package/src/runtime/enterprise_google_transfer.py +85 -0
- package/src/runtime/enterprise_http.py +212 -0
- package/src/runtime/enterprise_identity.py +52 -0
- package/src/runtime/enterprise_knowledge.py +152 -0
- package/src/runtime/enterprise_models.py +94 -0
- package/src/runtime/enterprise_native.py +181 -0
- package/src/runtime/enterprise_oauth.py +132 -0
- package/src/runtime/enterprise_operator.py +160 -0
- package/src/runtime/enterprise_parser_service.py +136 -0
- package/src/runtime/enterprise_parser_transport.py +68 -0
- package/src/runtime/enterprise_queries.py +255 -0
- package/src/runtime/enterprise_queries_schema.sql +27 -0
- package/src/runtime/enterprise_query_service.py +111 -0
- package/src/runtime/enterprise_secrets.py +110 -0
- package/src/runtime/enterprise_sessions.py +95 -0
- package/src/runtime/enterprise_sources.py +260 -0
- package/src/runtime/enterprise_web.py +39 -0
- package/src/runtime/enterprise_worker.py +68 -0
- package/src/runtime/export_contract_acceptance.py +18 -0
- package/src/runtime/faq-output-contract.json +40 -0
- package/src/runtime/faq-web-app.js +41 -0
- package/src/runtime/faq-web.css +1 -0
- package/src/runtime/faq-web.html +6 -0
- package/src/runtime/gcp-sources.json +9 -0
- package/src/runtime/gcp_acceptance.py +110 -0
- package/src/runtime/gcp_structured.py +150 -0
- package/src/runtime/http_acceptance.py +39 -0
- package/src/runtime/iap-web-app.js +36 -0
- package/src/runtime/iap-web-source.json +1 -0
- package/src/runtime/ibm-python-lock.json +856 -0
- package/src/runtime/ibm-sources.json +9 -0
- package/src/runtime/ibm_acceptance.py +133 -0
- package/src/runtime/ibm_structured.py +113 -0
- package/src/runtime/invoice-azapi-provider-lock.json +7 -0
- package/src/runtime/invoice-ibm-provider-lock.json +7 -0
- package/src/runtime/invoice-parser-lock.json +1199 -0
- package/src/runtime/invoice-parser-python-lock.json +56 -0
- package/src/runtime/invoice-parser.Dockerfile +190 -0
- package/src/runtime/invoice-sources.json +58 -0
- package/src/runtime/invoice-test-sources.json +24 -0
- package/src/runtime/invoice-web.css +2 -0
- package/src/runtime/invoice-web.html +12 -0
- package/src/runtime/invoice-web.js +112 -0
- package/src/runtime/invoice_configuration.py +17 -0
- package/src/runtime/invoice_document.py +95 -0
- package/src/runtime/invoice_extraction.py +96 -0
- package/src/runtime/invoice_http.py +129 -0
- package/src/runtime/invoice_identity.py +5 -0
- package/src/runtime/invoice_maintenance.py +40 -0
- package/src/runtime/invoice_native.py +77 -0
- package/src/runtime/invoice_object_store.py +153 -0
- package/src/runtime/invoice_operations.py +108 -0
- package/src/runtime/invoice_operator.py +79 -0
- package/src/runtime/invoice_operator_core.py +39 -0
- package/src/runtime/invoice_operator_job.py +147 -0
- package/src/runtime/invoice_parser_cli.py +17 -0
- package/src/runtime/invoice_parser_identity.py +39 -0
- package/src/runtime/invoice_parser_service.py +89 -0
- package/src/runtime/invoice_parser_transport.py +89 -0
- package/src/runtime/invoice_processing.py +24 -0
- package/src/runtime/invoice_retention.py +16 -0
- package/src/runtime/invoice_runtime_secrets.py +43 -0
- package/src/runtime/invoice_stage.py +80 -0
- package/src/runtime/invoice_web.py +39 -0
- package/src/runtime/invoice_worker.py +50 -0
- package/src/runtime/lambda_faq.py +5 -0
- package/src/runtime/parser-requirements.lock +4 -0
- package/src/runtime/policy_review.py +18 -0
- package/src/runtime/postgres-qualification-lock.json +21 -0
- package/src/runtime/public-faq-sources.json +22 -0
- package/src/runtime/public_catalog_admin.py +122 -0
- package/src/runtime/public_catalog_store.py +125 -0
- package/src/runtime/public_faq.py +144 -0
- package/src/runtime/public_faq_app.py +49 -0
- package/src/runtime/python-container-lock.json +18 -0
- package/src/runtime/rag-sources.json +10 -0
- package/src/runtime/rag_acceptance.py +60 -0
- package/src/runtime/rag_aws_adapter.py +95 -0
- package/src/runtime/rds-ca-source.json +9 -0
- package/src/runtime/rds-global-ca.pem +2888 -0
- package/src/runtime/state-contract-check-source.json +4 -0
- package/src/runtime/state_contract_check.py +338 -0
- package/src/runtime/structured-source.json +1 -0
- package/src/runtime/structured-web-app.js +71 -0
- package/src/runtime/structured-web-source.json +1 -0
- package/src/runtime/structured_http.py +105 -0
- package/src/runtime/structured_output.py +48 -0
- package/src/runtime/web-python-lock.json +802 -0
- package/src/runtime/web_user_admin.py +44 -0
- package/src/runtime/workflow_application.py +62 -0
- package/src/runtime/workflow_bindings.py +128 -0
- package/src/runtime/workflow_configuration.py +40 -0
- package/src/runtime/workflow_connection.py +105 -0
- package/src/runtime/workflow_contract.py +54 -0
- package/src/runtime/workflow_database.py +94 -0
- package/src/runtime/workflow_errors.py +6 -0
- package/src/runtime/workflow_http.py +178 -0
- package/src/runtime/workflow_identity.py +69 -0
- package/src/runtime/workflow_payload.py +118 -0
- package/src/runtime/workflow_process_stage.py +88 -0
- package/src/runtime/workflow_profile.py +91 -0
- package/src/runtime/workflow_review.py +106 -0
- package/src/runtime/workflow_role_bootstrap.py +104 -0
- package/src/runtime/workflow_schema.sql +72 -0
- package/src/runtime/workflow_worker.py +142 -0
- package/src/runtime-settings.mjs +15 -0
- package/src/s3-access.mjs +14 -0
- package/src/source-contracts.mjs +17 -0
- package/src/spec-kit.mjs +186 -0
- package/src/state-custody.mjs +32 -0
- package/src/state-inspection.mjs +45 -0
- package/src/state-spec-kit.mjs +13 -0
- package/src/storage-tests.mjs +25 -0
- package/src/structured-api.mjs +133 -0
- package/src/structured-contract.mjs +19 -0
- package/src/structured-operation-policy.mjs +2 -0
- package/src/structured-web.mjs +17 -0
- package/src/style.css +1 -0
- package/src/system-description.mjs +26 -0
- package/src/terraform-admission.mjs +66 -0
- package/src/terraform-composition.mjs +83 -0
- package/src/terraform-expressions.mjs +46 -0
- package/src/terraform-validation-coverage.mjs +11 -0
- package/src/terraform.mjs +128 -0
- package/src/text-statistics.mjs +51 -0
- package/src/upstream/openarchflow/format-payload.ts +26 -0
- package/src/upstream/openarchflow/import/mermaid.ts +205 -0
- package/src/upstream/openarchflow/import/sql-ddl.ts +109 -0
- package/src/upstream/openarchflow/layout.ts +54 -0
- package/src/upstream/openarchflow/providers/aws.ts +196 -0
- package/src/upstream/openarchflow/providers/azure.ts +126 -0
- package/src/upstream/openarchflow/providers/cloudnative.ts +71 -0
- package/src/upstream/openarchflow/providers/generic.ts +227 -0
- package/src/upstream/openarchflow/providers/integration.ts +22 -0
- package/src/upstream/openarchflow/providers/types.ts +2 -0
- package/src/upstream/openarchflow/templates.ts +937 -0
- package/src/upstream-catalog.mjs +10 -0
- package/src/useChatScroll.jsx +37 -0
- package/src/useEmulation.jsx +36 -0
- package/src/useEngineeringStatus.mjs +17 -0
- package/src/validation-receipt.mjs +10 -0
- package/src/visual-export.mjs +92 -0
- package/src/voice-conversation.mjs +117 -0
- package/src/work-intake.mjs +24 -0
- package/src/workflow-runtime-inventory.mjs +3 -0
package/src/atflow.css
ADDED
|
@@ -0,0 +1,1140 @@
|
|
|
1
|
+
/* Light by default; the header toggle sets data-theme="dark". */
|
|
2
|
+
:root { color-scheme: light; }
|
|
3
|
+
:root[data-theme="dark"] { color-scheme: dark; }
|
|
4
|
+
|
|
5
|
+
/* AtFlow — Architecture Canvas shell. Tokens from atmem-tokens.css (generated from AtMem.ai packages/tokens). */
|
|
6
|
+
@font-face { font-family: "DM Sans"; font-style: normal; font-display: swap; font-weight: 100 1000;
|
|
7
|
+
src: url("/fonts/dm-sans-latin-wght-normal.woff2") format("woff2-variations"), url("/fonts/dm-sans-latin-wght-normal.woff2") format("woff2"); }
|
|
8
|
+
@font-face { font-family: "Manrope"; font-style: normal; font-display: swap; font-weight: 200 800;
|
|
9
|
+
src: url("/fonts/manrope-latin-wght-normal.woff2") format("woff2-variations"), url("/fonts/manrope-latin-wght-normal.woff2") format("woff2"); }
|
|
10
|
+
:root {
|
|
11
|
+
/* Shared AtMem.ai tokens: pink actions, neutral surfaces, accessible light/dark contrast. */
|
|
12
|
+
--ink: var(--color-ink);
|
|
13
|
+
--ink-2: var(--color-muted);
|
|
14
|
+
--paper: var(--color-card);
|
|
15
|
+
--board: var(--color-bg);
|
|
16
|
+
--line: var(--color-line);
|
|
17
|
+
--edge: var(--color-muted);
|
|
18
|
+
--accent: var(--color-brand-text);
|
|
19
|
+
--accent-soft: var(--color-brand-soft);
|
|
20
|
+
--action: var(--color-brand);
|
|
21
|
+
--action-hover: light-dark(#EB8DA3, #F7B8C6);
|
|
22
|
+
--chrome: var(--color-card);
|
|
23
|
+
--chrome-2: var(--color-line);
|
|
24
|
+
--chrome-ink: var(--color-ink);
|
|
25
|
+
--good: var(--color-good);
|
|
26
|
+
--bad: var(--color-bad);
|
|
27
|
+
--warn: var(--color-warn);
|
|
28
|
+
--radius: var(--radius-lg);
|
|
29
|
+
--shadow: var(--elevation-card);
|
|
30
|
+
font-family: var(--type-family-sans);
|
|
31
|
+
color: var(--ink);
|
|
32
|
+
background: var(--board);
|
|
33
|
+
}
|
|
34
|
+
* { box-sizing: border-box; }
|
|
35
|
+
html, body, #root { margin: 0; height: 100%; }
|
|
36
|
+
body { background: var(--board); font-size: 14px; -webkit-font-smoothing: antialiased; }
|
|
37
|
+
button, input, select, textarea { font: inherit; color: inherit; }
|
|
38
|
+
button { cursor: pointer; background: none; border: 0; padding: 0; }
|
|
39
|
+
button:disabled { cursor: not-allowed; opacity: 0.4; }
|
|
40
|
+
:focus-visible { outline: 2px solid var(--accent); outline-offset: 2px; }
|
|
41
|
+
.muted { color: var(--ink-2); }
|
|
42
|
+
.small { font-size: 12px; }
|
|
43
|
+
.spin { animation: spin 0.9s linear infinite; }
|
|
44
|
+
@keyframes spin { to { transform: rotate(360deg); } }
|
|
45
|
+
|
|
46
|
+
/* ---------- Layout ---------- */
|
|
47
|
+
.app {
|
|
48
|
+
display: grid;
|
|
49
|
+
grid-template-columns: minmax(0, 1fr) 360px;
|
|
50
|
+
grid-template-rows: 52px 1fr;
|
|
51
|
+
height: 100vh;
|
|
52
|
+
}
|
|
53
|
+
.app.chat-closed { grid-template-columns: minmax(0, 1fr); }
|
|
54
|
+
.bar { grid-column: 1 / -1; }
|
|
55
|
+
|
|
56
|
+
/* ---------- Top bar ---------- */
|
|
57
|
+
.bar {
|
|
58
|
+
position: relative;
|
|
59
|
+
display: flex;
|
|
60
|
+
align-items: center;
|
|
61
|
+
gap: 14px;
|
|
62
|
+
padding: 0 12px;
|
|
63
|
+
background: var(--paper);
|
|
64
|
+
border-bottom: 1px solid var(--line);
|
|
65
|
+
z-index: 20;
|
|
66
|
+
}
|
|
67
|
+
.brand { display: flex; align-items: center; gap: 7px; font-weight: 700; font-size: 15px; padding: 6px; border-radius: 8px; }
|
|
68
|
+
.brand:hover { background: var(--board); }
|
|
69
|
+
.crumbs { display: flex; align-items: center; gap: 4px; min-width: 0; flex: 1; color: var(--ink-2); }
|
|
70
|
+
.crumbs button, .crumbs span { padding: 5px 8px; border-radius: 6px; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; max-width: 200px; }
|
|
71
|
+
.crumbs button:hover { background: var(--board); color: var(--ink); }
|
|
72
|
+
.crumbs .here { color: var(--ink); font-weight: 600; }
|
|
73
|
+
.crumbs .clear { padding: 4px; display: grid; place-items: center; }
|
|
74
|
+
.project-name {
|
|
75
|
+
border: 1px solid transparent; background: none; border-radius: 6px;
|
|
76
|
+
padding: 5px 8px; font-weight: 600; color: var(--ink); width: 22ch; min-width: 6ch;
|
|
77
|
+
text-overflow: ellipsis;
|
|
78
|
+
}
|
|
79
|
+
.project-name:hover { border-color: var(--line); }
|
|
80
|
+
.project-name:focus { border-color: var(--accent); outline: none; }
|
|
81
|
+
|
|
82
|
+
.modes { display: flex; background: var(--board); border: 1px solid var(--line); border-radius: 9px; padding: 3px; }
|
|
83
|
+
.modes button { padding: 5px 14px; border-radius: 6px; font-weight: 500; color: var(--ink-2); display: flex; gap: 5px; align-items: center; }
|
|
84
|
+
.modes button.on { background: var(--paper); color: var(--ink); box-shadow: 0 0 0 1px var(--line); }
|
|
85
|
+
.bar-actions { display: flex; align-items: center; gap: 6px; }
|
|
86
|
+
.warn-text { color: var(--warn); font-size: 12px; }
|
|
87
|
+
|
|
88
|
+
.icon {
|
|
89
|
+
display: inline-grid; place-items: center; width: 34px; height: 34px;
|
|
90
|
+
border-radius: 8px; color: var(--ink);
|
|
91
|
+
}
|
|
92
|
+
.icon:hover:not(:disabled) { background: var(--board); }
|
|
93
|
+
.btn {
|
|
94
|
+
display: inline-flex; align-items: center; justify-content: center; gap: 6px;
|
|
95
|
+
height: 34px; padding: 0 14px; border-radius: 8px; font-weight: 600;
|
|
96
|
+
border: 1.5px solid var(--ink); background: var(--paper);
|
|
97
|
+
}
|
|
98
|
+
.btn:hover:not(:disabled) { background: var(--board); }
|
|
99
|
+
.btn.primary { background: var(--ink); color: var(--paper); }
|
|
100
|
+
.btn.primary:hover:not(:disabled) { background: var(--accent); border-color: var(--accent); }
|
|
101
|
+
.btn.ghost { border-color: transparent; }
|
|
102
|
+
.btn.danger { color: var(--bad); }
|
|
103
|
+
.run-button.broken { background: var(--paper); color: var(--bad); border-color: var(--bad); }
|
|
104
|
+
.issues-pill {
|
|
105
|
+
display: flex; align-items: center; gap: 4px; height: 28px; padding: 0 9px;
|
|
106
|
+
border-radius: 99px; color: var(--bad); border: 1.5px solid var(--bad); font-weight: 600; font-size: 12px;
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
.menu {
|
|
110
|
+
position: absolute; top: 48px; right: 50px; min-width: 200px;
|
|
111
|
+
background: var(--paper); border: 1px solid var(--line); border-radius: var(--radius);
|
|
112
|
+
box-shadow: var(--shadow); padding: 6px; display: flex; flex-direction: column;
|
|
113
|
+
}
|
|
114
|
+
.menu button { text-align: left; padding: 8px 10px; border-radius: 6px; }
|
|
115
|
+
.menu button:hover:not(:disabled) { background: var(--board); }
|
|
116
|
+
.menu hr { border: 0; border-top: 1px solid var(--line); margin: 4px 0; width: 100%; }
|
|
117
|
+
.menu.issues { right: 140px; max-width: 360px; }
|
|
118
|
+
.menu.issues button { color: var(--bad); }
|
|
119
|
+
|
|
120
|
+
/* ---------- Canvas ---------- */
|
|
121
|
+
.canvas { position: relative; min-width: 0; min-height: 0; overflow: hidden; background: var(--board); }
|
|
122
|
+
.canvas .react-flow { background: var(--board); --xy-background-pattern-dots-color-default: light-dark(#c9cdce, #2c3133); }
|
|
123
|
+
.toolbar {
|
|
124
|
+
position: absolute; left: 14px; top: 50%; transform: translateY(-50%);
|
|
125
|
+
display: flex; flex-direction: column; gap: 2px; padding: 5px;
|
|
126
|
+
background: var(--paper); border: 1px solid var(--line); border-radius: 12px; box-shadow: var(--shadow); z-index: 5;
|
|
127
|
+
}
|
|
128
|
+
.toolbar .icon { width: 40px; height: 40px; }
|
|
129
|
+
.zoom {
|
|
130
|
+
position: absolute; right: 14px; bottom: 14px; display: flex; gap: 2px; padding: 4px;
|
|
131
|
+
background: var(--paper); border: 1px solid var(--line); border-radius: 10px; box-shadow: var(--shadow); z-index: 5;
|
|
132
|
+
}
|
|
133
|
+
.hint {
|
|
134
|
+
position: absolute; top: 12px; left: 50%; transform: translateX(-50%); margin: 0;
|
|
135
|
+
font-size: 12px; color: var(--ink-2); background: var(--paper); padding: 4px 10px;
|
|
136
|
+
border-radius: 99px; border: 1px solid var(--line); pointer-events: none; z-index: 4; white-space: nowrap;
|
|
137
|
+
}
|
|
138
|
+
.empty-canvas { position: absolute; inset: 0; display: grid; place-content: center; gap: 10px; text-align: center; z-index: 3; }
|
|
139
|
+
.empty-canvas p { font-size: 18px; font-weight: 600; margin: 0 0 4px; }
|
|
140
|
+
|
|
141
|
+
/* Blocks: one clear shape, icon for intent, label, provider. */
|
|
142
|
+
.blk {
|
|
143
|
+
display: flex; align-items: center; gap: 10px; width: 210px; min-height: 58px; padding: 10px 12px;
|
|
144
|
+
background: var(--paper); border: 2px solid var(--ink); border-radius: 12px;
|
|
145
|
+
transition: box-shadow var(--motion-fast), opacity var(--motion-fast);
|
|
146
|
+
}
|
|
147
|
+
.blk:hover { box-shadow: var(--shadow); }
|
|
148
|
+
.blk.selected { border-color: var(--accent); box-shadow: 0 0 0 4px var(--accent-soft); }
|
|
149
|
+
.blk.dim { opacity: 0.25; }
|
|
150
|
+
.blk.kind-source { border-radius: 12px 12px 22px 22px; }
|
|
151
|
+
.blk.kind-guard { border-style: double; border-width: 4px; }
|
|
152
|
+
.blk.kind-output { border-radius: 99px; }
|
|
153
|
+
.blk.kind-resource { border-style: dashed; }
|
|
154
|
+
.blk-icon {
|
|
155
|
+
display: grid; place-items: center; width: 34px; height: 34px; flex: none;
|
|
156
|
+
border-radius: 9px; background: var(--board); color: var(--ink);
|
|
157
|
+
}
|
|
158
|
+
.blk-text { display: flex; flex-direction: column; min-width: 0; flex: 1; }
|
|
159
|
+
.blk-text strong { font-size: 14px; line-height: 1.25; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
|
|
160
|
+
.blk-text small { display: flex; align-items: center; gap: 5px; color: var(--ink-2); font-size: 12px; }
|
|
161
|
+
.pdot { width: 8px; height: 8px; border-radius: 50%; background: var(--provider); display: inline-block; }
|
|
162
|
+
.blk-state { display: grid; place-items: center; width: 20px; height: 20px; border-radius: 50%; flex: none; }
|
|
163
|
+
.state-passed .blk-state { background: var(--good); color: #fff; }
|
|
164
|
+
.state-failed .blk-state { background: var(--bad); color: #fff; }
|
|
165
|
+
.state-running .blk-state { color: var(--accent); }
|
|
166
|
+
.blk.state-passed { border-color: var(--good); }
|
|
167
|
+
.blk.state-failed { border-color: var(--bad); box-shadow: 0 0 0 4px light-dark(#fde3e5, #3a1519); }
|
|
168
|
+
.blk.state-running { border-color: var(--accent); }
|
|
169
|
+
.blk.state-skipped { opacity: 0.45; border-style: dashed; }
|
|
170
|
+
|
|
171
|
+
.react-flow__handle {
|
|
172
|
+
width: 12px; height: 12px; background: var(--paper); border: 2px solid var(--ink);
|
|
173
|
+
opacity: 0; transition: opacity var(--motion-fast);
|
|
174
|
+
}
|
|
175
|
+
.react-flow__node:hover .react-flow__handle, .react-flow__node.selected .react-flow__handle,
|
|
176
|
+
.react-flow__handle.connectingfrom, .react-flow__handle.connectingto { opacity: 1; }
|
|
177
|
+
.react-flow__handle:hover { background: var(--accent); border-color: var(--accent); }
|
|
178
|
+
.level-system .react-flow__handle { opacity: 0 !important; }
|
|
179
|
+
|
|
180
|
+
/* Layers (System level) */
|
|
181
|
+
.layer {
|
|
182
|
+
width: 230px; padding: 16px 18px; background: var(--paper);
|
|
183
|
+
border: 2px solid var(--ink); border-radius: 16px; display: flex; flex-direction: column; gap: 6px;
|
|
184
|
+
box-shadow: 6px 6px 0 light-dark(#e3e5e6, #22282a);
|
|
185
|
+
}
|
|
186
|
+
.layer:hover { box-shadow: 6px 6px 0 var(--accent-soft); border-color: var(--accent); }
|
|
187
|
+
.layer-head { display: flex; justify-content: space-between; align-items: center; }
|
|
188
|
+
.layer-head strong { font-size: 17px; }
|
|
189
|
+
.layer small { color: var(--ink-2); }
|
|
190
|
+
.layer-providers { display: flex; gap: 4px; }
|
|
191
|
+
.layer-providers span { width: 10px; height: 10px; border-radius: 50%; }
|
|
192
|
+
.layer.state-passed { border-color: var(--good); }
|
|
193
|
+
.layer.state-failed { border-color: var(--bad); }
|
|
194
|
+
|
|
195
|
+
/* Wires */
|
|
196
|
+
.react-flow__edge-path { stroke: var(--edge); stroke-width: 2; }
|
|
197
|
+
.react-flow__edge .react-flow__arrowhead polyline,
|
|
198
|
+
.react-flow__arrowhead polyline { stroke: var(--edge); fill: var(--edge); }
|
|
199
|
+
.react-flow__edge.selected .react-flow__edge-path, .react-flow__edge:hover .react-flow__edge-path { stroke: var(--accent); stroke-width: 3; }
|
|
200
|
+
.wire-passed .react-flow__edge-path { stroke: var(--good); }
|
|
201
|
+
.wire-failed .react-flow__edge-path { stroke: var(--bad); stroke-dasharray: 6 4; }
|
|
202
|
+
.react-flow__edge.dim { opacity: 0.2; }
|
|
203
|
+
.react-flow__edge-text { fill: var(--ink-2); font-size: 11px; }
|
|
204
|
+
.react-flow__edge-textbg { fill: var(--board); }
|
|
205
|
+
.react-flow__connectionline path, .react-flow__connection-path { stroke: var(--accent); stroke-width: 2; }
|
|
206
|
+
|
|
207
|
+
/* Palette */
|
|
208
|
+
.palette {
|
|
209
|
+
position: absolute; left: 72px; top: 50%; transform: translateY(-50%); width: 300px; max-height: min(520px, 80%);
|
|
210
|
+
display: flex; flex-direction: column; background: var(--paper); border: 1px solid var(--line);
|
|
211
|
+
border-radius: 12px; box-shadow: var(--shadow); z-index: 6; overflow: hidden;
|
|
212
|
+
}
|
|
213
|
+
.palette-search { display: flex; align-items: center; gap: 8px; padding: 10px 12px; border-bottom: 1px solid var(--line); }
|
|
214
|
+
.palette-search input { flex: 1; border: 0; background: none; outline: none; min-width: 0; }
|
|
215
|
+
.palette-search select { border: 0; background: var(--board); border-radius: 6px; padding: 3px 4px; font-size: 12px; }
|
|
216
|
+
.chips { display: flex; flex-wrap: wrap; gap: 4px; padding: 8px 10px; }
|
|
217
|
+
.chips button { padding: 3px 9px; border-radius: 99px; border: 1px solid var(--line); font-size: 12px; }
|
|
218
|
+
.chips button.on { background: var(--ink); color: var(--paper); border-color: var(--ink); }
|
|
219
|
+
.palette-list { overflow: auto; padding: 4px 6px 8px; }
|
|
220
|
+
.palette-item { display: flex; align-items: center; gap: 10px; width: 100%; padding: 8px; border-radius: 7px; text-align: left; }
|
|
221
|
+
.palette-item:hover { background: var(--board); }
|
|
222
|
+
.palette-item span:not(.dot) { flex: 1; }
|
|
223
|
+
.dot { width: 8px; height: 8px; border-radius: 50%; flex: none; }
|
|
224
|
+
.pad { padding: 12px; margin: 0; }
|
|
225
|
+
|
|
226
|
+
/* Block detail (level 3) */
|
|
227
|
+
.detail {
|
|
228
|
+
position: absolute; inset: 0; z-index: 7; background: var(--board);
|
|
229
|
+
display: grid; grid-template-columns: minmax(0, 1fr) minmax(0, 380px) minmax(0, 1fr); gap: 20px; padding: 16px 28px 28px 80px; overflow: auto; align-content: start;
|
|
230
|
+
}
|
|
231
|
+
.detail-navigation { position: sticky; top: 0; grid-column: 1 / -1; align-self: start; z-index: 10; background: var(--board); padding-bottom: 8px; }
|
|
232
|
+
.detail .back { display: inline-flex; align-items: center; gap: 6px; padding: 6px 12px 6px 10px; border-radius: 20px; background: var(--paper); border: 1px solid var(--line); box-shadow: var(--shadow); font-weight: 600; font-size: 13px; z-index: 10; }
|
|
233
|
+
.detail .back:hover { border-color: var(--accent); color: var(--accent); }
|
|
234
|
+
.detail .back kbd { font: 11px var(--type-family-mono); color: var(--ink-2); border: 1px solid var(--line); border-radius: 4px; padding: 0 4px; }
|
|
235
|
+
.detail h3 { font-size: 12px; text-transform: uppercase; letter-spacing: 0.06em; color: var(--ink-2); margin: 0 0 10px; }
|
|
236
|
+
.detail h4 { font-size: 12px; color: var(--ink-2); margin: 16px 0 6px; font-weight: 600; }
|
|
237
|
+
.detail-col { min-width: 0; }
|
|
238
|
+
.terminal {
|
|
239
|
+
display: flex; justify-content: space-between; gap: 10px; width: 100%; padding: 10px 12px; margin-bottom: 6px;
|
|
240
|
+
background: var(--paper); border: 1.5px solid var(--ink); border-radius: 10px; text-align: left; font-weight: 500;
|
|
241
|
+
}
|
|
242
|
+
.terminal:hover { border-color: var(--accent); }
|
|
243
|
+
.terminal small { color: var(--ink-2); }
|
|
244
|
+
.detail pre {
|
|
245
|
+
margin: 0; padding: 12px; background: var(--paper); border: 1px solid var(--line); border-radius: 10px;
|
|
246
|
+
font: 12px/1.5 var(--type-family-mono); white-space: pre-wrap; word-break: break-word; max-height: 360px; overflow: auto;
|
|
247
|
+
}
|
|
248
|
+
.detail-col.probed pre { border-color: var(--accent); box-shadow: 0 0 0 3px var(--accent-soft); }
|
|
249
|
+
.detail-core {
|
|
250
|
+
align-self: start; background: var(--paper); border: 2px solid var(--ink); border-radius: 16px;
|
|
251
|
+
padding: 18px; min-width: 0; overflow-wrap: anywhere; display: flex; flex-direction: column; gap: 12px;
|
|
252
|
+
}
|
|
253
|
+
.detail-core p { margin: 0; }
|
|
254
|
+
.detail-title { display: flex; align-items: center; gap: 10px; }
|
|
255
|
+
.blk-provider { width: 12px; height: 12px; border-radius: 50%; background: var(--provider); flex: none; }
|
|
256
|
+
.detail-title input { flex: 1; min-width: 0; width: 100%; font-size: 18px; font-weight: 700; border: 0; background: none; outline: none; padding: 2px 0; border-bottom: 1.5px solid transparent; }
|
|
257
|
+
.detail-title input:focus { border-bottom-color: var(--accent); }
|
|
258
|
+
.fields { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 10px; }
|
|
259
|
+
.fields > label { min-width: 0; }
|
|
260
|
+
.fields .field-wide { grid-column: 1 / -1; }
|
|
261
|
+
.fields input:not([type="checkbox"]), .fields select { min-width: 0; width: 100%; max-width: 100%; }
|
|
262
|
+
.detail .terminal > * { min-width: 0; overflow-wrap: anywhere; }
|
|
263
|
+
@media (max-width: 520px) { .detail .fields { grid-template-columns: minmax(0, 1fr); } }
|
|
264
|
+
.fields label, .dialog-field { display: flex; flex-direction: column; gap: 4px; font-size: 12px; color: var(--ink-2); font-weight: 500; }
|
|
265
|
+
.fields input, .fields select, .dialog-field input, .dialog-field select, .runbar select, .code-input {
|
|
266
|
+
height: 34px; padding: 0 9px; border: 1.5px solid var(--line); border-radius: 8px; background: var(--paper); color: var(--ink); font-size: 13px;
|
|
267
|
+
}
|
|
268
|
+
.fields input:focus, .fields select:focus { border-color: var(--accent); outline: none; }
|
|
269
|
+
.trace { display: flex; flex-wrap: wrap; align-items: center; gap: 6px; font-weight: 600; }
|
|
270
|
+
.trace.passed { color: var(--good); }
|
|
271
|
+
.trace.failed { color: var(--bad); }
|
|
272
|
+
.trace .error-box { flex-basis: 100%; }
|
|
273
|
+
.error-box { margin: 0; padding: 10px 12px; border-radius: 8px; background: light-dark(#fde3e5, #3a1519); color: var(--bad); font-weight: 500; font-size: 13px; }
|
|
274
|
+
|
|
275
|
+
/* Test run bar */
|
|
276
|
+
.runbar {
|
|
277
|
+
position: absolute; left: 72px; right: 140px; bottom: 14px; z-index: 6;
|
|
278
|
+
display: flex; align-items: center; gap: 10px; padding: 8px 10px;
|
|
279
|
+
background: var(--paper); border: 1px solid var(--line); border-radius: 12px; box-shadow: var(--shadow);
|
|
280
|
+
}
|
|
281
|
+
.seg { display: flex; border: 1px solid var(--line); border-radius: 8px; padding: 2px; flex: none; }
|
|
282
|
+
.seg button { padding: 4px 10px; border-radius: 6px; font-size: 13px; color: var(--ink-2); }
|
|
283
|
+
.seg button.on { background: var(--ink); color: var(--paper); }
|
|
284
|
+
.run-summary { display: inline-flex; align-items: center; gap: 4px; font-weight: 600; white-space: nowrap; }
|
|
285
|
+
.run-summary.passed { color: var(--good); }
|
|
286
|
+
.run-summary.failed { color: var(--bad); }
|
|
287
|
+
.steps { display: flex; gap: 6px; overflow-x: auto; min-width: 0; flex: 1; }
|
|
288
|
+
.step {
|
|
289
|
+
white-space: nowrap; padding: 4px 10px; border-radius: 99px; font-size: 12px; font-weight: 500;
|
|
290
|
+
border: 1.5px solid var(--line);
|
|
291
|
+
}
|
|
292
|
+
.step.passed { border-color: var(--good); color: var(--good); }
|
|
293
|
+
.step.failed { border-color: var(--bad); color: var(--bad); background: light-dark(#fde3e5, #3a1519); }
|
|
294
|
+
.step.skipped { border-style: dashed; color: var(--ink-2); }
|
|
295
|
+
.step.on { box-shadow: 0 0 0 3px var(--accent-soft); }
|
|
296
|
+
|
|
297
|
+
/* Front panel (LabVIEW indicators) */
|
|
298
|
+
.front-panel {
|
|
299
|
+
position: absolute; inset: 0 0 72px; z-index: 5; background: var(--board);
|
|
300
|
+
display: grid; grid-template-columns: repeat(auto-fill, minmax(160px, 1fr)); align-content: start; gap: 14px; padding: 28px 28px 28px 80px; overflow: auto;
|
|
301
|
+
}
|
|
302
|
+
.indicator {
|
|
303
|
+
position: relative; display: flex; flex-direction: column; gap: 4px; align-items: flex-start;
|
|
304
|
+
padding: 16px; background: var(--paper); border: 2px solid var(--ink); border-radius: 14px; text-align: left;
|
|
305
|
+
}
|
|
306
|
+
.indicator strong { font-size: 28px; font-weight: 700; line-height: 1.1; }
|
|
307
|
+
.indicator span:last-child { color: var(--ink-2); font-size: 13px; }
|
|
308
|
+
.indicator-number { position: absolute; top: 10px; right: 12px; font-size: 11px; color: var(--ink-2); }
|
|
309
|
+
.indicator.passed { border-color: var(--good); }
|
|
310
|
+
.indicator.passed strong { color: var(--good); }
|
|
311
|
+
.indicator.failed { border-color: var(--bad); }
|
|
312
|
+
.indicator.failed strong { color: var(--bad); }
|
|
313
|
+
.indicator.skipped { border-style: dashed; opacity: 0.6; }
|
|
314
|
+
|
|
315
|
+
/* Deploy card */
|
|
316
|
+
.deploy {
|
|
317
|
+
position: absolute; right: 14px; top: 14px; width: 280px; z-index: 6;
|
|
318
|
+
display: flex; flex-direction: column; gap: 10px; padding: 16px;
|
|
319
|
+
background: var(--paper); border: 1px solid var(--line); border-radius: 14px; box-shadow: var(--shadow);
|
|
320
|
+
}
|
|
321
|
+
.deploy h3 { margin: 0; font-size: 15px; }
|
|
322
|
+
.deploy p { margin: 0; }
|
|
323
|
+
.checks { list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; gap: 6px; }
|
|
324
|
+
.checks li { display: flex; gap: 8px; align-items: center; color: var(--ink-2); font-size: 13px; }
|
|
325
|
+
.checks li::before { content: ""; width: 14px; height: 14px; border: 1.5px solid var(--ink-2); border-radius: 4px; flex: none; }
|
|
326
|
+
.checks li.ok { color: var(--ink); }
|
|
327
|
+
.checks li.ok::before { background: var(--good); border-color: var(--good); }
|
|
328
|
+
|
|
329
|
+
/* ---------- Architect chat ---------- */
|
|
330
|
+
.chat { display: flex; flex-direction: column; min-height: 0; background: var(--paper); border-left: 1px solid var(--line); }
|
|
331
|
+
.chat-head { display: flex; justify-content: space-between; align-items: center; padding: 12px 16px 8px; }
|
|
332
|
+
.chat-head strong { font-size: 15px; }
|
|
333
|
+
.model { display: flex; align-items: center; gap: 6px; font-size: 12px; color: var(--ink-2); padding: 4px 8px; border-radius: 99px; border: 1px solid var(--line); }
|
|
334
|
+
.model:hover { color: var(--ink); border-color: var(--ink); }
|
|
335
|
+
.led { width: 7px; height: 7px; border-radius: 50%; background: var(--ink-2); }
|
|
336
|
+
.led.on { background: var(--good); }
|
|
337
|
+
.phases { display: flex; list-style: none; margin: 0; padding: 0 16px 10px; gap: 4px; border-bottom: 1px solid var(--line); }
|
|
338
|
+
.phases li { flex: 1; }
|
|
339
|
+
.phases button {
|
|
340
|
+
width: 100%; padding: 6px 0 4px; font-size: 12px; color: var(--ink-2); border-top: 3px solid var(--line); text-align: left;
|
|
341
|
+
}
|
|
342
|
+
.phases button.done { border-top-color: var(--ink); color: var(--ink); }
|
|
343
|
+
.phases button.on { border-top-color: var(--accent); color: var(--ink); font-weight: 600; }
|
|
344
|
+
.messages { flex: 1; min-height: 0; overflow: auto; overflow-anchor: none; overscroll-behavior: contain; padding: 16px; }
|
|
345
|
+
.chat > :not(.messages) { flex-shrink: 0; }
|
|
346
|
+
.message-list { display: flex; flex-direction: column; gap: 12px; }
|
|
347
|
+
.msg { white-space: pre-wrap; line-height: 1.5; font-size: 14px; max-width: 95%; }
|
|
348
|
+
.msg.user { align-self: flex-end; background: var(--ink); color: var(--paper); padding: 8px 12px; border-radius: 14px 14px 4px 14px; max-width: 85%; }
|
|
349
|
+
.msg.working { display: flex; align-items: center; gap: 8px; color: var(--ink-2); }
|
|
350
|
+
.link { color: var(--accent); font-weight: 500; }
|
|
351
|
+
.proposal { border: 2px solid var(--ink); border-radius: 12px; padding: 12px; display: flex; flex-direction: column; gap: 8px; }
|
|
352
|
+
.proposal ul { list-style: none; margin: 0; padding: 0; font: 13px/1.6 var(--type-family-mono); }
|
|
353
|
+
.proposal .add { color: var(--good); }
|
|
354
|
+
.proposal .chg { color: var(--warn); }
|
|
355
|
+
.proposal .del { color: var(--bad); }
|
|
356
|
+
.row { display: flex; gap: 6px; }
|
|
357
|
+
.prompts { display: flex; flex-wrap: wrap; gap: 6px; padding: 0 16px 10px; }
|
|
358
|
+
.prompts button { padding: 5px 10px; border: 1px solid var(--line); border-radius: 99px; font-size: 12px; }
|
|
359
|
+
.prompts button:hover:not(:disabled) { border-color: var(--ink); }
|
|
360
|
+
.composer { position: relative; margin: 0 12px 12px; }
|
|
361
|
+
.composer textarea {
|
|
362
|
+
width: 100%; resize: none; padding: 10px 46px 10px 12px; border: 1.5px solid var(--ink); border-radius: 12px;
|
|
363
|
+
background: var(--paper); line-height: 1.4; min-height: 60px;
|
|
364
|
+
}
|
|
365
|
+
.composer textarea:focus { outline: none; border-color: var(--accent); box-shadow: 0 0 0 3px var(--accent-soft); }
|
|
366
|
+
.send { position: absolute; right: 8px; bottom: 10px; width: 32px; height: 32px; border-radius: 50%; display: grid; place-items: center; background: var(--ink); color: var(--paper); }
|
|
367
|
+
|
|
368
|
+
/* ---------- Toast & modal ---------- */
|
|
369
|
+
.toast {
|
|
370
|
+
position: fixed; bottom: 20px; left: 50%; transform: translateX(-50%); z-index: 50;
|
|
371
|
+
background: var(--ink); color: var(--paper); padding: 9px 16px; border-radius: 10px; font-size: 13px; box-shadow: var(--shadow); max-width: calc(100vw - 32px);
|
|
372
|
+
}
|
|
373
|
+
.backdrop { position: fixed; inset: 0; background: rgb(0 0 0 / 0.35); display: grid; place-items: center; z-index: 40; padding: 16px; }
|
|
374
|
+
.modal {
|
|
375
|
+
position: relative; width: min(560px, 100%); max-height: 86vh; overflow: auto;
|
|
376
|
+
background: var(--paper); border-radius: 16px; padding: 24px; box-shadow: var(--shadow);
|
|
377
|
+
display: flex; flex-direction: column; gap: 12px;
|
|
378
|
+
}
|
|
379
|
+
.modal h2 { margin: 0; font-size: 20px; padding-right: 32px; }
|
|
380
|
+
.modal p { margin: 0; color: var(--ink-2); line-height: 1.5; }
|
|
381
|
+
.modal .eyebrow { display: none; }
|
|
382
|
+
.modal-close { position: absolute; top: 14px; right: 14px; }
|
|
383
|
+
.modal-fine { font-size: 12px; }
|
|
384
|
+
.modal a { color: var(--accent); }
|
|
385
|
+
.template-list { display: flex; flex-direction: column; gap: 6px; }
|
|
386
|
+
.template-list button {
|
|
387
|
+
display: flex; align-items: center; gap: 12px; padding: 12px; border: 1.5px solid var(--line); border-radius: 10px; text-align: left;
|
|
388
|
+
}
|
|
389
|
+
.template-list button:hover { border-color: var(--ink); }
|
|
390
|
+
.template-list button span { flex: 1; display: flex; flex-direction: column; }
|
|
391
|
+
.template-list small { color: var(--ink-2); }
|
|
392
|
+
.section-label { font-size: 12px; font-weight: 600; color: var(--ink-2); text-transform: uppercase; letter-spacing: 0.05em; margin-top: 6px; }
|
|
393
|
+
.code-input { height: 160px; padding: 10px; font-family: var(--type-family-mono); resize: vertical; }
|
|
394
|
+
.run-button.full, .button.full { width: 100%; }
|
|
395
|
+
.modal .button {
|
|
396
|
+
display: inline-flex; align-items: center; justify-content: center; gap: 6px; height: 34px; padding: 0 14px;
|
|
397
|
+
border-radius: 8px; font-weight: 600; border: 1.5px solid var(--ink);
|
|
398
|
+
}
|
|
399
|
+
.modal .button.run-button { background: var(--ink); color: var(--paper); }
|
|
400
|
+
.sidecar-state, .inspector-info, .login-instructions, .snapshot-result, .pulumi-path, .snapshot-upload {
|
|
401
|
+
display: flex; flex-wrap: wrap; align-items: center; gap: 8px; padding: 10px 12px; border: 1px solid var(--line); border-radius: 10px; font-size: 13px;
|
|
402
|
+
}
|
|
403
|
+
.login-instructions { flex-direction: column; align-items: flex-start; }
|
|
404
|
+
.login-instructions code { font-family: var(--type-family-mono); background: var(--board); padding: 4px 8px; border-radius: 6px; }
|
|
405
|
+
.status-dot { width: 8px; height: 8px; border-radius: 50%; background: var(--ink-2); display: inline-block; }
|
|
406
|
+
.status-dot.passed { background: var(--good); }
|
|
407
|
+
.licences { margin: 0; display: grid; gap: 4px; }
|
|
408
|
+
.licences dt { font-weight: 600; margin-top: 8px; }
|
|
409
|
+
.licences dd { margin: 0; color: var(--ink-2); font-size: 13px; }
|
|
410
|
+
|
|
411
|
+
|
|
412
|
+
/* ---------- Engagement documents (Discover, Options, Decisions) ---------- */
|
|
413
|
+
.doc {
|
|
414
|
+
position: absolute; inset: 0; z-index: 8; overflow: auto; background: var(--board);
|
|
415
|
+
padding: 72px max(24px, calc((100% - 980px) / 2)) 40px;
|
|
416
|
+
display: flex; flex-direction: column; gap: 14px;
|
|
417
|
+
}
|
|
418
|
+
.doc-head h2 { margin: 0 0 2px; font-size: 22px; }
|
|
419
|
+
.doc-head p { margin: 0; }
|
|
420
|
+
.row-between { display: flex; justify-content: space-between; align-items: flex-end; gap: 12px; }
|
|
421
|
+
.doc-sub { display: flex; flex-wrap: wrap; gap: 4px 12px; justify-content: space-between; align-items: center; margin-top: 8px; }
|
|
422
|
+
.doc-sub h3 { margin: 0; font-size: 15px; }
|
|
423
|
+
.doc-foot { display: flex; justify-content: space-between; align-items: center; margin-top: 8px; }
|
|
424
|
+
.field { display: flex; flex-direction: column; gap: 4px; font-size: 12px; font-weight: 600; color: var(--ink-2); }
|
|
425
|
+
.field textarea, .doc input, .doc select, .build textarea {
|
|
426
|
+
font-size: 14px; font-weight: 400; color: var(--ink); background: var(--paper);
|
|
427
|
+
border: 1.5px solid var(--line); border-radius: 8px; padding: 8px 10px; resize: vertical; min-width: 0;
|
|
428
|
+
}
|
|
429
|
+
.doc select { padding: 6px 8px; }
|
|
430
|
+
.field textarea:focus, .doc input:focus, .doc select:focus, .build textarea:focus { outline: none; border-color: var(--accent); }
|
|
431
|
+
.field.known textarea { border-color: var(--ink); }
|
|
432
|
+
.field.wide textarea { min-height: 64px; font-size: 15px; }
|
|
433
|
+
.brief-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(280px, 1fr)); gap: 10px; }
|
|
434
|
+
.cases { display: flex; flex-direction: column; gap: 6px; }
|
|
435
|
+
.case { display: grid; grid-template-columns: 2fr 90px 90px 90px auto 2fr 34px; gap: 6px; align-items: center; }
|
|
436
|
+
.case.head { font-size: 12px; font-weight: 600; color: var(--ink-2); }
|
|
437
|
+
.verdicts button { font-size: 12px; padding: 4px 8px; white-space: nowrap; }
|
|
438
|
+
.case.verdict-pursue .verdicts .on { background: var(--good); }
|
|
439
|
+
.case.verdict-rule-out .verdicts .on { background: var(--bad); }
|
|
440
|
+
.case.verdict-rule-out > input:first-child { text-decoration: line-through; color: var(--ink-2); }
|
|
441
|
+
|
|
442
|
+
.subviews { position: absolute; top: 12px; left: 50%; transform: translateX(-50%); z-index: 9; background: var(--paper); box-shadow: var(--shadow); }
|
|
443
|
+
.level-system .hint, .level-flow .hint { top: 56px; }
|
|
444
|
+
|
|
445
|
+
.options-wrap { overflow-x: auto; }
|
|
446
|
+
.options { border-collapse: separate; border-spacing: 0; width: 100%; background: var(--paper); border: 1px solid var(--line); border-radius: 12px; }
|
|
447
|
+
.options th, .options td { padding: 10px; border-bottom: 1px solid var(--line); text-align: left; vertical-align: top; }
|
|
448
|
+
.options thead th { font-size: 14px; }
|
|
449
|
+
.options thead th .link { display: block; font-weight: 500; margin-top: 2px; }
|
|
450
|
+
.options tbody th { font-weight: 600; min-width: 170px; }
|
|
451
|
+
.options tbody th small { display: block; font-weight: 400; font-size: 11px; }
|
|
452
|
+
.options td textarea { width: 100%; min-width: 110px; font-size: 12px; }
|
|
453
|
+
.options .total td, .options .total th { font-size: 16px; font-weight: 700; }
|
|
454
|
+
.options .best { background: var(--accent-soft); }
|
|
455
|
+
|
|
456
|
+
.adr { background: var(--paper); border: 2px solid var(--ink); border-radius: 14px; padding: 14px; display: flex; flex-direction: column; gap: 10px; }
|
|
457
|
+
.adr.status-proposed { border-style: dashed; }
|
|
458
|
+
.adr.status-superseded { opacity: 0.55; }
|
|
459
|
+
.adr-head { display: grid; grid-template-columns: auto 1fr 160px 130px 34px; gap: 8px; align-items: center; }
|
|
460
|
+
.adr-head input:first-of-type { font-weight: 700; font-size: 15px; }
|
|
461
|
+
.adr-head .missing { border-color: var(--warn); }
|
|
462
|
+
.adr-id { font: 600 12px var(--type-family-mono); color: var(--ink-2); }
|
|
463
|
+
.adr-body { display: grid; grid-template-columns: 1fr 1fr; gap: 10px; }
|
|
464
|
+
|
|
465
|
+
.build { width: 300px; max-height: calc(100% - 100px); overflow: auto; }
|
|
466
|
+
.build h4 { margin: 4px 0 0; font-size: 12px; text-transform: uppercase; letter-spacing: 0.05em; color: var(--ink-2); }
|
|
467
|
+
.build textarea { font-size: 13px; }
|
|
468
|
+
.checks li.bad { color: var(--bad); }
|
|
469
|
+
.checks li.bad::before { background: var(--bad); border-color: var(--bad); }
|
|
470
|
+
.link-plain { text-align: left; }
|
|
471
|
+
.blk.existing { background: light-dark(#eef0f1, #1b2022); border-style: solid; }
|
|
472
|
+
|
|
473
|
+
.measures { display: flex; flex-direction: column; gap: 6px; }
|
|
474
|
+
.measures h4 { margin: 0; font-size: 12px; color: var(--ink-2); }
|
|
475
|
+
.measure { display: grid; grid-template-columns: 1.4fr 1.2fr 56px 70px 30px; gap: 4px; }
|
|
476
|
+
.measure input, .measure select { min-width: 0; height: 30px; padding: 0 6px; border: 1.5px solid var(--line); border-radius: 6px; background: var(--paper); font-size: 12px; }
|
|
477
|
+
.mono { font-family: var(--type-family-mono); }
|
|
478
|
+
label.check { flex-direction: row; align-items: center; gap: 8px; color: var(--ink); grid-column: 1 / -1; }
|
|
479
|
+
|
|
480
|
+
@media (max-width: 900px) {
|
|
481
|
+
.doc { padding: 64px 16px 24px; }
|
|
482
|
+
.case { grid-template-columns: 1fr 1fr; }
|
|
483
|
+
.line { grid-template-columns: 1fr 1fr; }
|
|
484
|
+
.discover .ask h2 { font-size: 20px; }
|
|
485
|
+
.case.head { display: none; }
|
|
486
|
+
.adr-head, .adr-body { grid-template-columns: 1fr; }
|
|
487
|
+
.build { width: auto; }
|
|
488
|
+
}
|
|
489
|
+
|
|
490
|
+
|
|
491
|
+
/* Requirements, assumptions, open questions */
|
|
492
|
+
.records { display: flex; flex-direction: column; gap: 8px; }
|
|
493
|
+
.record { background: var(--paper); border: 1.5px solid var(--line); border-radius: 12px; padding: 10px; display: flex; flex-direction: column; gap: 6px; }
|
|
494
|
+
.record.answered { opacity: 0.7; }
|
|
495
|
+
.record-row { display: flex; gap: 6px; align-items: center; flex-wrap: wrap; }
|
|
496
|
+
.record-row > input:first-child { flex: 1 1 260px; }
|
|
497
|
+
.measure-row input { width: 110px; }
|
|
498
|
+
.measure-row input:first-of-type { width: 170px; }
|
|
499
|
+
.links { display: flex; flex-wrap: wrap; gap: 4px; align-items: center; }
|
|
500
|
+
.chip { display: inline-flex; align-items: center; gap: 4px; padding: 2px 4px 2px 9px; border-radius: 99px; border: 1px solid var(--ink); font-size: 12px; }
|
|
501
|
+
.chip.missing { border-color: var(--warn); color: var(--warn); }
|
|
502
|
+
.chip button { width: 18px; height: 18px; border-radius: 50%; }
|
|
503
|
+
.chip button:hover { background: var(--board); }
|
|
504
|
+
.links select { font-size: 12px; padding: 2px 6px; border-radius: 99px; }
|
|
505
|
+
.adr-meta { display: flex; flex-wrap: wrap; gap: 10px; align-items: center; }
|
|
506
|
+
label.inline { display: flex; align-items: center; gap: 6px; font-size: 12px; font-weight: 600; color: var(--ink-2); }
|
|
507
|
+
label.inline input { width: 200px; font-size: 12px; }
|
|
508
|
+
.revise { display: flex; gap: 6px; align-items: center; flex: 1; }
|
|
509
|
+
.revise input { flex: 1; min-width: 160px; }
|
|
510
|
+
.history summary { cursor: pointer; font-size: 13px; color: var(--ink-2); }
|
|
511
|
+
.history ol { margin: 6px 0 0; padding-left: 18px; font-size: 13px; display: flex; flex-direction: column; gap: 4px; }
|
|
512
|
+
.linked { display: flex; flex-direction: column; gap: 4px; border-top: 1px solid var(--line); padding-top: 8px; }
|
|
513
|
+
.linked p { margin: 0; font-size: 13px; }
|
|
514
|
+
.linked strong { font-size: 11px; text-transform: uppercase; letter-spacing: 0.04em; color: var(--ink-2); margin-right: 4px; }
|
|
515
|
+
|
|
516
|
+
|
|
517
|
+
/* Discover: one open question at a time */
|
|
518
|
+
.discover .ask { background: var(--paper); border: 2px solid var(--ink); border-radius: 18px; padding: 22px; display: flex; flex-direction: column; gap: 8px; }
|
|
519
|
+
.discover .ask h2 { margin: 0; font-size: 24px; line-height: 1.25; }
|
|
520
|
+
.discover .ask p { margin: 0; }
|
|
521
|
+
.discover .ask form { display: flex; flex-direction: column; gap: 10px; margin-top: 6px; }
|
|
522
|
+
.discover .ask textarea { font-size: 16px; padding: 12px 14px; border: 1.5px solid var(--line); border-radius: 12px; background: var(--paper); color: var(--ink); resize: vertical; }
|
|
523
|
+
.discover .ask textarea:focus { outline: none; border-color: var(--accent); box-shadow: 0 0 0 3px var(--accent-soft); }
|
|
524
|
+
.why { color: var(--accent); font-size: 13px; }
|
|
525
|
+
.discover .intro { background: var(--paper); border: 2px solid var(--ink); border-radius: 18px; padding: 22px; }
|
|
526
|
+
.discover .intro h2 { margin: 0 0 6px; font-size: 22px; }
|
|
527
|
+
.discover .intro p { margin: 0; }
|
|
528
|
+
.prompts .primary-chip { background: var(--accent); border-color: var(--accent); color: #fff; font-weight: 600; }
|
|
529
|
+
.btn.sketch { margin-left: auto; background: var(--accent); border-color: var(--accent); color: #fff; }
|
|
530
|
+
.facts { display: flex; flex-wrap: wrap; gap: 6px; }
|
|
531
|
+
.field.assumed textarea { border-style: dashed; }
|
|
532
|
+
.extra summary { cursor: pointer; color: var(--ink-2); font-size: 13px; margin-top: 10px; }
|
|
533
|
+
.extra[open] summary { margin-bottom: 10px; }
|
|
534
|
+
.badge { display: inline-grid; place-items: center; min-width: 17px; height: 17px; padding: 0 4px; border-radius: 99px; background: var(--bad); color: #fff; font-size: 11px; font-weight: 700; }
|
|
535
|
+
|
|
536
|
+
/* Notes card and proposal preview on the board */
|
|
537
|
+
.notes-card {
|
|
538
|
+
position: absolute; top: 14px; left: 72px; width: 340px; max-height: calc(100% - 90px); overflow: auto; z-index: 6;
|
|
539
|
+
background: var(--paper); border: 1px solid var(--line); border-radius: 14px; box-shadow: var(--shadow); padding: 12px 14px;
|
|
540
|
+
display: flex; flex-direction: column; gap: 8px;
|
|
541
|
+
}
|
|
542
|
+
.notes-card .doc-sub { margin: 0; }
|
|
543
|
+
.notes-card .brief-grid { grid-template-columns: 1fr; }
|
|
544
|
+
.notes-card .field textarea, .notes-card input, .notes-card select { font-size: 13px; padding: 6px 8px; border: 1.5px solid var(--line); border-radius: 8px; background: var(--paper); color: var(--ink); }
|
|
545
|
+
.notes-card .case { grid-template-columns: 1fr; }
|
|
546
|
+
.connect { display: flex; flex-direction: column; gap: 12px; }
|
|
547
|
+
.connect .signin { min-height: 34px; display: flex; align-items: center; }
|
|
548
|
+
.connect code { font-family: var(--type-family-mono); }
|
|
549
|
+
.skills { display: flex; flex-wrap: wrap; gap: 4px; padding: 0 16px 10px; border-bottom: 1px solid var(--line); }
|
|
550
|
+
.skills span { font-size: 11px; font-weight: 600; padding: 2px 8px; border-radius: 99px; background: var(--accent-soft); color: var(--accent); cursor: default; }
|
|
551
|
+
.signals { display: flex; flex-wrap: wrap; gap: 4px; margin-top: 6px; }
|
|
552
|
+
.signals span { font-size: 11px; padding: 1px 7px; border-radius: 99px; border: 1px solid var(--line); color: var(--ink-2); }
|
|
553
|
+
.msg.user .signals span { color: inherit; }
|
|
554
|
+
.btn.fix { margin-top: 8px; height: 30px; }
|
|
555
|
+
.live-toggle { display: flex; align-items: center; gap: 5px; font-size: 12px; color: var(--ink-2); margin-left: auto; margin-right: 8px; cursor: pointer; }
|
|
556
|
+
.known { margin: 0; display: flex; flex-direction: column; gap: 8px; }
|
|
557
|
+
.known-item dt { font-size: 11px; font-weight: 700; text-transform: uppercase; letter-spacing: 0.04em; color: var(--ink-2); display: flex; gap: 6px; align-items: baseline; }
|
|
558
|
+
.known-item dt em { text-transform: none; font-weight: 500; color: var(--warn); }
|
|
559
|
+
.known-item dt .link { margin-left: auto; text-transform: none; letter-spacing: 0; font-weight: 500; opacity: 0; }
|
|
560
|
+
.known-item:hover dt .link, .known-item dt .link:focus { opacity: 1; }
|
|
561
|
+
.known-item dd { margin: 2px 0 0; font-size: 13px; line-height: 1.45; white-space: pre-wrap; }
|
|
562
|
+
.known-item dd textarea { width: 100%; }
|
|
563
|
+
.chat-title { display: flex; align-items: center; gap: 6px; }
|
|
564
|
+
.blk { width: 240px; align-items: flex-start; }
|
|
565
|
+
.blk-why { font-size: 12px; line-height: 1.35; color: var(--ink-2); display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden; margin: 2px 0 3px; }
|
|
566
|
+
.blk-text strong { white-space: normal; }
|
|
567
|
+
.note { width: 200px; min-height: 90px; background: light-dark(#fff7cc, #4a4318); border: 1px solid light-dark(#f2d96b, #7a6c22); border-radius: 4px; box-shadow: 2px 3px 8px rgb(0 0 0 / 0.12); padding: 8px; }
|
|
568
|
+
.note.selected { outline: 2px solid var(--accent); }
|
|
569
|
+
.note textarea { width: 100%; min-height: 72px; border: 0; background: transparent; resize: none; font-size: 13px; line-height: 1.4; color: var(--ink); }
|
|
570
|
+
.note textarea:focus { outline: none; }
|
|
571
|
+
.ctx-menu { position: fixed; z-index: 30; min-width: 190px; background: var(--paper); border: 1px solid var(--line); border-radius: 10px; box-shadow: var(--shadow); padding: 5px; display: flex; flex-direction: column; }
|
|
572
|
+
.ctx-menu button { text-align: left; padding: 8px 10px; border-radius: 6px; font-size: 13px; }
|
|
573
|
+
.ctx-menu button:hover:not(:disabled) { background: var(--board); }
|
|
574
|
+
.ctx-menu .danger { color: var(--bad); }
|
|
575
|
+
.projects-btn { color: #d1d5db; display: grid; place-items: center; width: 28px; height: 28px; border-radius: 6px; }
|
|
576
|
+
.projects-btn:hover { background: rgb(255 255 255 / 0.08); color: #fff; }
|
|
577
|
+
.projects { display: flex; flex-direction: column; gap: 12px; }
|
|
578
|
+
.project-list { list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; gap: 6px; }
|
|
579
|
+
.project-list li { display: flex; align-items: center; gap: 8px; border: 1.5px solid var(--line); border-radius: 10px; padding: 6px 8px; }
|
|
580
|
+
.project-list li.current { border-color: var(--accent); }
|
|
581
|
+
.project-list .open { flex: 1; display: flex; flex-direction: column; text-align: left; padding: 4px; min-width: 0; }
|
|
582
|
+
.project-list .open strong { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
|
|
583
|
+
.project-list .open small { color: var(--ink-2); font-size: 12px; }
|
|
584
|
+
.project-list .open:disabled { opacity: 1; cursor: default; }
|
|
585
|
+
.project-list .bin { font-size: 16px; }
|
|
586
|
+
.bin-list summary { cursor: pointer; color: var(--ink-2); font-size: 13px; }
|
|
587
|
+
.bin-list ul { margin-top: 8px; }
|
|
588
|
+
.btn.danger { color: var(--bad); border-color: var(--bad); }
|
|
589
|
+
.notes-tab { position: absolute; top: 14px; left: 72px; z-index: 6; padding: 6px 12px; border-radius: 99px; background: var(--paper); border: 1px solid var(--line); box-shadow: var(--shadow); font-size: 13px; font-weight: 600; }
|
|
590
|
+
.preview-bar {
|
|
591
|
+
position: absolute; top: 56px; left: 50%; transform: translateX(-50%); z-index: 9; display: flex; gap: 8px; align-items: center;
|
|
592
|
+
background: var(--paper); border: 2px solid var(--accent); border-radius: 12px; padding: 6px 8px 6px 14px; box-shadow: var(--shadow); white-space: nowrap;
|
|
593
|
+
}
|
|
594
|
+
.react-flow__node.preview .blk, .react-flow__node.preview .layer { border-style: dashed; border-color: var(--accent); }
|
|
595
|
+
.react-flow__edge.preview .react-flow__edge-path { stroke: var(--accent); stroke-dasharray: 6 4; }
|
|
596
|
+
|
|
597
|
+
/* Review */
|
|
598
|
+
.finding-group h3 { margin: 10px 0 6px; font-size: 15px; }
|
|
599
|
+
.finding { background: var(--paper); border: 1.5px solid var(--line); border-left: 5px solid var(--ink-2); border-radius: 10px; padding: 12px 14px; display: flex; flex-direction: column; gap: 4px; margin-bottom: 8px; }
|
|
600
|
+
.finding p { margin: 0; font-size: 13px; }
|
|
601
|
+
.finding.sev-blocker { border-left-color: var(--bad); }
|
|
602
|
+
.finding.sev-major { border-left-color: var(--warn); }
|
|
603
|
+
.finding.accepted { opacity: 0.65; }
|
|
604
|
+
.finding-head { display: flex; gap: 8px; align-items: baseline; }
|
|
605
|
+
.finding-foot { display: flex; flex-wrap: wrap; gap: 6px; align-items: center; margin-top: 4px; }
|
|
606
|
+
.finding-foot .chip { padding: 2px 9px; }
|
|
607
|
+
.sev { font-size: 11px; font-weight: 700; text-transform: uppercase; letter-spacing: 0.04em; padding: 1px 7px; border-radius: 99px; border: 1px solid currentColor; color: var(--ink-2); white-space: nowrap; }
|
|
608
|
+
.sev.blocker { color: var(--bad); }
|
|
609
|
+
.sev.major { color: var(--warn); }
|
|
610
|
+
|
|
611
|
+
/* Estimate */
|
|
612
|
+
.totals { display: grid; grid-template-columns: repeat(auto-fit, minmax(150px, 1fr)); gap: 10px; }
|
|
613
|
+
.totals > div { background: var(--paper); border: 1.5px solid var(--line); border-radius: 12px; padding: 12px 14px; display: flex; flex-direction: column; gap: 2px; }
|
|
614
|
+
.totals strong { font-size: 24px; }
|
|
615
|
+
.ok-text { color: var(--good); font-weight: 600; }
|
|
616
|
+
.bad-text { color: var(--bad); font-weight: 600; }
|
|
617
|
+
.warn-text { font-weight: 600; }
|
|
618
|
+
.usage { display: grid; grid-template-columns: repeat(auto-fill, minmax(220px, 1fr)); gap: 10px; }
|
|
619
|
+
.usage small { font-weight: 400; }
|
|
620
|
+
.lines { display: flex; flex-direction: column; gap: 6px; }
|
|
621
|
+
.line { display: grid; grid-template-columns: 2fr 110px 60px 1.4fr 110px; gap: 6px; align-items: center; background: var(--paper); border: 1.5px solid var(--line); border-radius: 10px; padding: 8px 10px; }
|
|
622
|
+
.line > span:first-child { display: flex; flex-direction: column; min-width: 0; }
|
|
623
|
+
.line.priced { border-color: var(--good); }
|
|
624
|
+
.line .cost { text-align: right; font-weight: 700; }
|
|
625
|
+
.line .cur { text-transform: uppercase; }
|
|
626
|
+
label.inline input { width: 60px; }
|
|
627
|
+
|
|
628
|
+
.runbar.note { font-size: 13px; }
|
|
629
|
+
|
|
630
|
+
/* Deploy */
|
|
631
|
+
.ready { border-radius: 12px; padding: 12px 14px; border: 2px solid var(--good); background: var(--paper); }
|
|
632
|
+
.ready.no { border-color: var(--bad); }
|
|
633
|
+
.ready ul { margin: 6px 0 0; padding-left: 18px; }
|
|
634
|
+
.steps-list { margin: 0; padding-left: 22px; display: flex; flex-direction: column; gap: 6px; }
|
|
635
|
+
|
|
636
|
+
|
|
637
|
+
/* ---------- Infrastructure console theme ---------- */
|
|
638
|
+
.bar { background: var(--chrome); border-bottom: 1px solid var(--chrome-2); color: var(--chrome-ink); }
|
|
639
|
+
.bar .brand { color: var(--chrome-ink); }
|
|
640
|
+
.bar .brand:hover, .bar .icon:hover:not(:disabled), .crumbs button:hover { background: rgb(255 255 255 / 0.08); color: #fff; }
|
|
641
|
+
.bar .icon { color: #d1d5db; }
|
|
642
|
+
.crumbs { color: #aab7b8; }
|
|
643
|
+
.crumbs .here, .project-name { color: #fff; }
|
|
644
|
+
.project-name:hover { border-color: rgb(255 255 255 / 0.25); }
|
|
645
|
+
.modes { background: transparent; border: 0; padding: 0; gap: 2px; }
|
|
646
|
+
.modes button { color: #d1d5db; border-radius: 0; padding: 14px 14px 12px; border-bottom: 3px solid transparent; display: flex; gap: 6px; align-items: center; }
|
|
647
|
+
.modes button:hover { color: #fff; }
|
|
648
|
+
.modes button.on { background: transparent; color: #fff; box-shadow: none; border-bottom-color: var(--action); }
|
|
649
|
+
.btn.primary, .button.run-button, .modal .button.run-button { background: var(--action); border-color: var(--action); color: #fff; }
|
|
650
|
+
.btn.primary:hover:not(:disabled), .button.run-button:hover:not(:disabled) { background: var(--action-hover); border-color: var(--action-hover); }
|
|
651
|
+
.btn { border-color: var(--line); border-width: 1.5px; border-radius: 20px; }
|
|
652
|
+
.btn:hover:not(:disabled) { border-color: var(--ink); }
|
|
653
|
+
.seg button.on, .chips button.on { background: var(--chrome); color: #fff; }
|
|
654
|
+
|
|
655
|
+
/* Service tiles: coloured by role like architecture icons */
|
|
656
|
+
.blk { border: 1px solid var(--line); border-radius: 10px; box-shadow: var(--shadow); gap: 12px; }
|
|
657
|
+
.blk:hover { border-color: var(--role); }
|
|
658
|
+
.blk.selected { border-color: var(--accent); box-shadow: 0 0 0 3px var(--accent-soft), var(--shadow); }
|
|
659
|
+
.blk-icon { background: var(--role); color: #fff; border-radius: 8px; width: 38px; height: 38px; box-shadow: inset 0 -2px 0 rgb(0 0 0 / 0.15); }
|
|
660
|
+
.blk.kind-guard, .blk.kind-source, .blk.kind-output { border-style: solid; border-width: 1px; border-radius: 10px; }
|
|
661
|
+
.blk.kind-resource { border-style: dashed; }
|
|
662
|
+
.blk.existing { background: light-dark(#f8f8f8, #142030); }
|
|
663
|
+
.layer { border: 1px solid var(--line); border-left: 6px solid var(--role); border-radius: 12px; box-shadow: var(--shadow); }
|
|
664
|
+
.layer:hover { border-color: var(--role); box-shadow: 0 0 0 3px light-dark(rgb(9 114 211 / 0.12), rgb(83 159 229 / 0.2)), var(--shadow); }
|
|
665
|
+
.layer-head strong { font-size: 16px; }
|
|
666
|
+
|
|
667
|
+
/* Wires: a calm flow so connections feel live */
|
|
668
|
+
.react-flow__edge-path { stroke: var(--edge); stroke-width: 1.8; }
|
|
669
|
+
.react-flow__edge.wire .react-flow__edge-path { stroke-dasharray: none; animation: none; }
|
|
670
|
+
.react-flow__edge.wire-passed .react-flow__edge-path { stroke: var(--good); stroke-dasharray: none; animation: none; }
|
|
671
|
+
.react-flow__edge.wire-failed .react-flow__edge-path { animation: none; }
|
|
672
|
+
@keyframes flow { to { stroke-dashoffset: -20; } }
|
|
673
|
+
|
|
674
|
+
.react-flow__edge-textbg { fill: var(--board); }
|
|
675
|
+
.canvas .react-flow { --xy-background-pattern-dots-color-default: light-dark(#c6cbd1, #2a3a4d); }
|
|
676
|
+
|
|
677
|
+
/* Chat */
|
|
678
|
+
.chat { background: var(--paper); }
|
|
679
|
+
.chat-title { font-size: 15px; }
|
|
680
|
+
.msg.user { background: var(--chrome); color: #fff; }
|
|
681
|
+
.msg.assistant { padding-left: 12px; border-left: 3px solid var(--accent-soft); }
|
|
682
|
+
.skills span, .skills .skill { background: var(--accent-soft); color: var(--accent); display: inline-flex; gap: 4px; align-items: center; font-size: 11px; font-weight: 600; padding: 2px 8px; border-radius: 99px; }
|
|
683
|
+
.skills > span::before, .skills .skill::before { content: "✦"; font-size: 10px; }
|
|
684
|
+
.skills .skill.on { background: var(--accent); color: #fff; }
|
|
685
|
+
.chat .notes-card { position: static; width: auto; max-height: 45%; margin: 0; border: 0; border-bottom: 1px solid var(--line); border-radius: 0; box-shadow: none; padding: 10px 16px; background: light-dark(#fafafa, #15202e); }
|
|
686
|
+
.dots { display: flex; gap: 2px; flex-wrap: wrap; }
|
|
687
|
+
.dot { display: inline-flex; align-items: center; gap: 4px; font-size: 11px; color: var(--ink-2); padding: 2px 6px; border-radius: 99px; }
|
|
688
|
+
.dot i { width: 8px; height: 8px; border-radius: 50%; border: 1.5px solid var(--ink-2); display: inline-block; }
|
|
689
|
+
.dot.known { color: var(--ink); }
|
|
690
|
+
.dot.known i { background: var(--good); border-color: var(--good); }
|
|
691
|
+
.dot.assumed i { background: linear-gradient(90deg, var(--warn) 50%, transparent 50%); border-color: var(--warn); }
|
|
692
|
+
.dot.on, .dot:hover { background: var(--accent-soft); }
|
|
693
|
+
.skills { align-items: center; }
|
|
694
|
+
.known-bar { display: inline-flex; align-items: center; gap: 6px; font-size: 11px; font-weight: 600; color: var(--ink-2); padding: 3px 8px; border-radius: 99px; }
|
|
695
|
+
.known-bar:hover, .known-bar.on { background: var(--accent-soft); color: var(--accent); }
|
|
696
|
+
.known-bar .segs { display: inline-flex; gap: 2px; }
|
|
697
|
+
.known-bar .segs i { width: 10px; height: 4px; border-radius: 2px; background: var(--line); }
|
|
698
|
+
.known-bar .segs i.known { background: var(--good); }
|
|
699
|
+
.known-bar .segs i.assumed { background: var(--warn); }
|
|
700
|
+
.known-list { list-style: none; display: flex; flex-direction: column; gap: 3px; }
|
|
701
|
+
.known-list li { display: grid; grid-template-columns: 14px auto 1fr; gap: 6px; align-items: baseline; font-size: 12px; }
|
|
702
|
+
.known-list li em { font-style: normal; color: var(--ink-2); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
|
|
703
|
+
.known-list li.open { color: var(--ink-2); }
|
|
704
|
+
.known-list li.known > span { color: var(--good); font-weight: 700; }
|
|
705
|
+
.known-list li.assumed > span { color: var(--warn); font-weight: 700; }
|
|
706
|
+
.peek { margin: 0 16px 8px; padding: 8px 10px; border-radius: 8px; background: var(--accent-soft); font-size: 13px; }
|
|
707
|
+
.peek p { margin: 4px 0 0; }
|
|
708
|
+
.knows { display: flex; flex-wrap: wrap; gap: 4px; margin-top: 6px; }
|
|
709
|
+
.knows span { font-size: 11px; padding: 2px 8px; border-radius: 99px; background: var(--paper); border: 1px solid var(--line); }
|
|
710
|
+
.doc .notes-card { position: static; width: auto; max-height: none; box-shadow: none; }
|
|
711
|
+
.cases.compact { display: flex; flex-direction: column; gap: 6px; }
|
|
712
|
+
.cases.compact .case { grid-template-columns: 1fr auto 28px; }
|
|
713
|
+
.cases.compact input { min-width: 0; }
|
|
714
|
+
.chat-head { flex-wrap: wrap; row-gap: 6px; }
|
|
715
|
+
.live-toggle { order: 3; flex-basis: 100%; margin: 0; }
|
|
716
|
+
.signals span::before { content: "↳ "; color: var(--accent); }
|
|
717
|
+
.composer textarea { border-color: var(--line); }
|
|
718
|
+
.composer textarea:focus { border-color: var(--accent); }
|
|
719
|
+
.send { background: var(--action); }
|
|
720
|
+
.composer textarea { padding-right: 84px; }
|
|
721
|
+
.mic { position: absolute; right: 46px; bottom: 10px; width: 32px; height: 32px; border-radius: 50%; display: grid; place-items: center; color: var(--ink-2); border: 1.5px solid var(--line); background: var(--paper); }
|
|
722
|
+
.mic:hover { color: var(--ink); border-color: var(--ink-2); }
|
|
723
|
+
.mic.on { color: #fff; background: var(--bad); border-color: var(--bad); animation: pulse 1.4s ease-in-out infinite; }
|
|
724
|
+
@keyframes pulse { 50% { box-shadow: 0 0 0 6px rgb(217 21 21 / 0.18); } }
|
|
725
|
+
@media (prefers-reduced-motion: reduce) { .mic.on { animation: none; } }
|
|
726
|
+
.prompts button { border-radius: 20px; }
|
|
727
|
+
|
|
728
|
+
/* Connection: provider tiles */
|
|
729
|
+
.provider-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(150px, 1fr)); gap: 8px; }
|
|
730
|
+
.provider-tile { display: flex; align-items: center; gap: 10px; padding: 10px; border: 1.5px solid var(--line); border-radius: 10px; background: var(--paper); text-align: left; }
|
|
731
|
+
.provider-tile:hover { border-color: var(--ink-2); }
|
|
732
|
+
.provider-tile.on { border-color: var(--accent); box-shadow: 0 0 0 3px var(--accent-soft); }
|
|
733
|
+
.provider-tile .mono { width: 30px; height: 30px; border-radius: 8px; display: grid; place-items: center; color: #fff; font-weight: 800; font-size: 13px; flex: none; }
|
|
734
|
+
.provider-tile small { display: block; color: var(--ink-2); font-size: 11px; }
|
|
735
|
+
.provider-tile .signed { margin-left: auto; color: var(--good); font-weight: 700; }
|
|
736
|
+
|
|
737
|
+
/* ---------- Small screens ---------- */
|
|
738
|
+
@media (max-width: 900px) {
|
|
739
|
+
.app { grid-template-columns: minmax(0, 1fr); grid-template-rows: auto 60vh auto; height: auto; min-height: 100vh; }
|
|
740
|
+
.bar { flex-wrap: wrap; padding: 8px 12px; gap: 8px; }
|
|
741
|
+
.crumbs { order: 3; flex-basis: 100%; overflow-x: auto; }
|
|
742
|
+
.project-name { width: 14ch; }
|
|
743
|
+
.chat { border-left: 0; border-top: 1px solid var(--line); height: 85dvh; min-height: 0; }
|
|
744
|
+
.runbar { left: 10px; right: 10px; bottom: 60px; flex-wrap: wrap; }
|
|
745
|
+
.detail { grid-template-columns: minmax(0, 1fr); padding: 16px; }
|
|
746
|
+
.palette { width: min(300px, calc(100vw - 90px)); }
|
|
747
|
+
.deploy { left: 70px; right: 10px; width: auto; }
|
|
748
|
+
.menu { right: 12px; }
|
|
749
|
+
.menu.issues { right: 12px; left: 12px; }
|
|
750
|
+
}
|
|
751
|
+
@media (max-width: 520px) {
|
|
752
|
+
.modes button { padding: 5px 9px; }
|
|
753
|
+
.brand span { display: none; }
|
|
754
|
+
}
|
|
755
|
+
|
|
756
|
+
/* Progressive delivery details stay collapsed until requested. */
|
|
757
|
+
.delivery-fields { display: grid; grid-template-columns: repeat(auto-fit, minmax(160px, 1fr)); gap: 12px; }
|
|
758
|
+
.charge-editor { min-width: 0; margin: 16px 0; padding: 14px; border: 1px solid var(--border, #d5dbd8); border-radius: 8px; }
|
|
759
|
+
.charge-editor legend { padding: 0 6px; font-weight: 600; }
|
|
760
|
+
.delivery-basis { grid-column: 1 / -1; }
|
|
761
|
+
.resource-schedule { display: grid; gap: 10px; margin: 16px 0; }
|
|
762
|
+
.resource-schedule article { display: grid; gap: 5px; padding: 12px; border: 1px solid var(--border, #d5dbd8); border-radius: 8px; overflow-wrap: anywhere; }
|
|
763
|
+
.resource-schedule article span, .resource-schedule article small { color: var(--muted, #58645e); }
|
|
764
|
+
@media (max-width: 600px) { .delivery-fields { grid-template-columns: minmax(0, 1fr); } }
|
|
765
|
+
|
|
766
|
+
/* Keep existing document cards readable inside the page's scroll area. */
|
|
767
|
+
.doc > * { flex-shrink: 0; }
|
|
768
|
+
.doc .notes-card { overflow: visible; }
|
|
769
|
+
.context-used { font-size: 11px; margin-top: 6px; overflow-wrap: anywhere; }
|
|
770
|
+
.context-used p { font-size: 11px; }
|
|
771
|
+
.memory-profile { display: grid; gap: 10px; margin: 14px 0; }
|
|
772
|
+
|
|
773
|
+
.requirements-summary li { margin: 1rem 0; }
|
|
774
|
+
.requirements-summary li > p { margin-bottom: .3rem; }
|
|
775
|
+
.requirements-summary li > .link { margin-left: .75rem; }
|
|
776
|
+
|
|
777
|
+
.consultation-summary { padding: 1rem 0; border-bottom: 1px solid var(--border, #334155); }
|
|
778
|
+
|
|
779
|
+
/* Requirements read as a continuous document, while chat stays alongside it. */
|
|
780
|
+
.requirements-document { background: var(--board); }
|
|
781
|
+
.requirements-actions { width: min(100%, 850px); margin: 0 auto 20px; }
|
|
782
|
+
.requirements-paper { box-sizing: border-box; width: min(100%, 850px); margin: 0 auto 32px; padding: 56px 64px; background: #fffefa; color: #172033; box-shadow: 0 4px 24px #0002; overflow-wrap: anywhere; }
|
|
783
|
+
.requirements-paper p { font-family: Georgia, 'Times New Roman', serif; font-size: 16px; line-height: 1.8; margin: 0 0 16px; white-space: pre-line; }
|
|
784
|
+
.requirements-cover { border-bottom: 2px solid #F3A2B4; padding-bottom: 24px; margin-bottom: 32px; }
|
|
785
|
+
.requirements-paper h2 { color: #172033; font-size: 32px; line-height: 1.25; margin: 16px 0; }
|
|
786
|
+
.requirements-paper .document-kicker, .requirements-paper .document-meta, .requirements-paper .document-subtitle { font-family: inherit; }
|
|
787
|
+
.requirements-paper .document-kicker { text-transform: uppercase; letter-spacing: .14em; font-size: 11px; color: #52616c; }
|
|
788
|
+
.requirements-paper .document-subtitle { font-size: 19px; color: #52616c; }
|
|
789
|
+
.requirements-paper .document-meta { font-size: 11px; line-height: 1.6; color: #63717b; }
|
|
790
|
+
.requirements-chapter { margin: 30px 0; }
|
|
791
|
+
.requirements-paper h3 { font-size: 19px; line-height: 1.4; color: #172033; margin: 0 0 16px; }
|
|
792
|
+
.requirement-paragraph { margin-bottom: 24px; }
|
|
793
|
+
.requirement-paragraph > p:first-child { margin-bottom: 8px; }
|
|
794
|
+
.requirements-paper .acceptance-target { font-size: 14px; }
|
|
795
|
+
.requirements-paper .document-discuss { color: #873B50; font-size: 12px; text-align: left; }
|
|
796
|
+
.document-footer { border-top: 1px solid #d8dee1; padding-top: 16px; margin-top: 44px; font-size: 10px; color: #63717b; }
|
|
797
|
+
@media (max-width: 700px) { .requirements-paper { padding: 28px 22px; } .requirements-paper h2 { font-size: 25px; } }
|
|
798
|
+
|
|
799
|
+
.requirements-actions { display:flex; flex-wrap:wrap; gap:12px; }
|
|
800
|
+
.requirement-comments { margin-top:10px; }
|
|
801
|
+
.requirement-comment { background:#FCF5F7; border-left:3px solid #DCA2B1; padding:10px 14px; margin:8px 0; }
|
|
802
|
+
.requirements-paper .requirement-comment p { font-family:inherit; font-size:13px; margin-bottom:4px; white-space:pre-wrap; }
|
|
803
|
+
.requirement-comment small { color:#52616c; margin-right:16px; }
|
|
804
|
+
.requirement-comments .link { color:#873B50; font-size:12px; }
|
|
805
|
+
.comment-composer textarea { display:block; width:100%; min-height:80px; margin:10px 0; padding:10px; background:white; color:#172033; border:1px solid #DCA2B1; border-radius:4px; box-sizing:border-box; font:inherit; }
|
|
806
|
+
.comment-composer .btn { background:#873B50; color:white; margin-right:12px; }
|
|
807
|
+
|
|
808
|
+
.requirements-paper .requirement-number { color:#873B50; font-size:12px; letter-spacing:.06em; margin:0 0 8px; }
|
|
809
|
+
|
|
810
|
+
.requirement-add-comment { display:inline-flex; align-items:center; padding:7px 12px; border:1px solid #DCA2B1; border-radius:5px; background:#FCECF0; color:#873B50; font-size:12px; font-weight:600; cursor:pointer; }
|
|
811
|
+
.requirement-add-comment:hover { background:#F6D7E0; }
|
|
812
|
+
.requirement-comments blockquote { border-left:3px solid #DCA2B1; margin:8px 0; padding:6px 12px; color:#52616c; font-size:13px; white-space:pre-wrap; }
|
|
813
|
+
.requirement-text-menu { z-index:100; }
|
|
814
|
+
.requirement-text::selection { background:#F6D7E0; color:#172033; }
|
|
815
|
+
|
|
816
|
+
.requirements-paper .requirement-reason { margin:12px 0; padding-left:14px; border-left:2px solid #F6D7E0; }
|
|
817
|
+
.requirements-paper .requirement-reason p { font-family:inherit; font-size:13px; line-height:1.7; }
|
|
818
|
+
.requirements-paper .comment-status { font-family:inherit; font-size:12px; color:#52616c; }
|
|
819
|
+
.requirement-comments .link { margin:8px 12px; }
|
|
820
|
+
.requirement-revision { margin-top:16px; }
|
|
821
|
+
.requirement-revision h5 { font-size:14px; margin:12px 0; }
|
|
822
|
+
.requirements-paper .revision-label { font-weight:600; margin-bottom:4px; }
|
|
823
|
+
.requirements-paper .revision-after { background:#e6f2e9; padding:12px; }
|
|
824
|
+
.comment-history { margin:10px 0; font-size:12px; color:#52616c; }
|
|
825
|
+
.comment-history summary, .requirements-chapter > summary { cursor:pointer; font-weight:600; }
|
|
826
|
+
|
|
827
|
+
.journey-guide { padding:12px 16px; border-top:1px solid var(--line); background:var(--paper); flex-shrink:0; }
|
|
828
|
+
.journey-guide small { color:var(--accent); font-weight:600; }
|
|
829
|
+
.journey-guide p { font-size:12px; line-height:1.5; margin:6px 0 10px; }
|
|
830
|
+
.journey-guide .btn { width:100%; font-size:12px; padding:7px 10px; }
|
|
831
|
+
.journey-continue { display:block; margin-top:8px; font-size:12px; text-align:left; }
|
|
832
|
+
|
|
833
|
+
/* Journey stays visible above the workspace, even with chat closed. */
|
|
834
|
+
.app { grid-template-rows:52px auto minmax(0,1fr); }
|
|
835
|
+
.journey-wizard { grid-column:1 / -1; padding:12px 22px; background:var(--paper); border-bottom:1px solid var(--line); min-width:0; }
|
|
836
|
+
.journey-steps { display:flex; align-items:center; flex-wrap:wrap; gap:10px 22px; list-style:none; padding:0; margin:0 0 12px; }
|
|
837
|
+
.journey-steps li { display:flex; align-items:center; gap:7px; color:var(--ink-2); font-size:12px; }
|
|
838
|
+
.journey-steps li span { width:22px; height:22px; display:grid; place-items:center; border:1px solid var(--line); border-radius:50%; }
|
|
839
|
+
.journey-steps li[aria-current=step] { color:var(--ink); font-weight:700; }
|
|
840
|
+
.journey-steps li[aria-current=step] span { background:var(--action); color:#fff; border-color:var(--action); }
|
|
841
|
+
.journey-current { display:flex; align-items:center; justify-content:space-between; gap:24px; }
|
|
842
|
+
.journey-current strong { font-size:14px; }
|
|
843
|
+
.journey-current p { margin:4px 0 0; color:var(--ink-2); font-size:12px; line-height:1.5; }
|
|
844
|
+
.journey-actions { display:flex; align-items:center; gap:14px; flex-shrink:0; }
|
|
845
|
+
.journey-actions .btn, .journey-actions .link { font-size:12px; }
|
|
846
|
+
.consultation-summary > button { margin-right:14px; margin-top:8px; }
|
|
847
|
+
@media(max-width:900px){.app { grid-template-rows:auto auto 60vh auto; }.journey-wizard{padding:12px;}.journey-current{align-items:flex-start;flex-direction:column;gap:12px;}.journey-actions{flex-wrap:wrap;}.journey-steps{gap:8px 14px;}}
|
|
848
|
+
|
|
849
|
+
.journey-steps li button { display:flex; align-items:center; gap:7px; padding:3px 5px; border:0; background:none; color:inherit; font:inherit; border-radius:5px; cursor:pointer; }
|
|
850
|
+
.journey-steps li button:disabled { cursor:default; }
|
|
851
|
+
.journey-steps li button:not(:disabled):hover { background:var(--color-brand-soft); text-decoration:none; }
|
|
852
|
+
.journey-steps li button:focus-visible { outline:2px solid var(--action); outline-offset:3px; }
|
|
853
|
+
.cloud-selection { display:flex; flex-wrap:wrap; gap:10px; align-items:center; padding:14px; border:1px solid var(--line); border-radius:8px; }
|
|
854
|
+
|
|
855
|
+
.journey-actions { flex-wrap:wrap; justify-content:flex-end; flex-shrink:1; }
|
|
856
|
+
@media(max-width:900px){.journey-actions{justify-content:flex-start;}}
|
|
857
|
+
|
|
858
|
+
.terraform-code { white-space:pre-wrap; overflow-wrap:anywhere; max-height:55vh; overflow:auto; padding:18px; background:var(--paper); border:1px solid var(--line); border-radius:8px; font-size:12px; line-height:1.6; }
|
|
859
|
+
.terraform-view .row, .terraform-view .seg { margin:16px 0; flex-wrap:wrap; }
|
|
860
|
+
|
|
861
|
+
/* AtMem · AtForma lockup and shared theme; retain workspace layout. */
|
|
862
|
+
.bar .icon, .crumbs, .modes button { color:var(--color-muted); }
|
|
863
|
+
.crumbs .here, .project-name, .modes button.on, .modes button:hover { color:var(--color-ink); }
|
|
864
|
+
.bar .brand:hover, .bar .icon:hover:not(:disabled), .crumbs button:hover { background:var(--color-brand-soft); color:var(--color-ink); }
|
|
865
|
+
.btn.primary, .button.run-button, .modal .button.run-button, .send, .journey-steps li[aria-current=step] span { color:var(--color-brand-ink); }
|
|
866
|
+
.seg button.on, .chips button.on { background:var(--color-brand-soft); color:var(--color-ink); }
|
|
867
|
+
.brand { white-space:nowrap; }
|
|
868
|
+
.brand-divider { color:var(--color-brand); padding:0 3px; }
|
|
869
|
+
@media(max-width:900px){.brand span{display:inline;}}
|
|
870
|
+
|
|
871
|
+
.outputs-view { overflow:auto; }
|
|
872
|
+
.outputs-view aside { min-width:0; overflow-wrap:anywhere; }
|
|
873
|
+
.outputs-browser { display:grid; grid-template-columns:220px minmax(0,1fr); gap:20px; align-items:start; margin-top:20px; }
|
|
874
|
+
.outputs-directory { border:1px solid var(--line); border-radius:8px; padding:12px; min-width:0; }
|
|
875
|
+
.outputs-directory details+details { margin-top:16px; }
|
|
876
|
+
.outputs-directory summary { font-weight:600; cursor:pointer; margin-bottom:8px; }
|
|
877
|
+
.outputs-directory button { display:block; width:100%; text-align:left; padding:7px 8px; overflow-wrap:anywhere; font-size:12px; border-radius:4px; }
|
|
878
|
+
.outputs-directory button[aria-current=page] { background:var(--accent-soft); color:var(--accent); }
|
|
879
|
+
.output-preview { min-width:0; }
|
|
880
|
+
.output-preview > h3 { overflow-wrap:anywhere; margin-top:0; }
|
|
881
|
+
.output-document { background:var(--paper); border:1px solid var(--line); padding:28px; border-radius:6px; overflow-wrap:anywhere; line-height:1.65; }
|
|
882
|
+
.output-document h2,.output-document h3,.output-document h4 { margin:26px 0 12px; }
|
|
883
|
+
.output-document h2:first-child { margin-top:0; }
|
|
884
|
+
.output-document ul { padding-left:22px; }
|
|
885
|
+
.output-document pre,.output-code { white-space:pre-wrap; overflow-wrap:anywhere; font-size:12px; padding:16px; background:var(--paper); border:1px solid var(--line); border-radius:6px; }
|
|
886
|
+
.output-table-row { font-family:var(--type-family-mono); font-size:12px; }
|
|
887
|
+
.output-image { display:block; width:100%; height:auto; background:white; border:1px solid var(--line); }
|
|
888
|
+
.output-pdf { width:100%; height:70vh; border:1px solid var(--line); background:white; }
|
|
889
|
+
@media(max-width:900px){.outputs-browser{grid-template-columns:minmax(0,1fr);}.outputs-directory{max-height:250px;overflow:auto;}.output-document{padding:18px;}}
|
|
890
|
+
|
|
891
|
+
.outputs-directory { position:sticky; top:12px; max-height:65vh; overflow:auto; }
|
|
892
|
+
@media(max-width:900px){.outputs-directory{position:static;max-height:250px;}}
|
|
893
|
+
|
|
894
|
+
/* ---------- Architecture Canvas type ---------- */
|
|
895
|
+
h1, h2, h3, .brand, .doc-head h2, .modal h2, .detail-title input, .indicator strong { font-family: var(--type-family-display); letter-spacing: -0.01em; }
|
|
896
|
+
|
|
897
|
+
/* ---------- Architecture Canvas: Miro-like, few edges ----------
|
|
898
|
+
Panels and controls separate by soft fills and shadow rather than outlines.
|
|
899
|
+
Text inputs keep a visible boundary so it stays obvious where to type. */
|
|
900
|
+
.modes { border-color: transparent; background: var(--color-card-raised); border-radius: 12px; padding: 4px; }
|
|
901
|
+
.modes button { border-radius: 9px; }
|
|
902
|
+
.modes button.on { box-shadow: var(--elevation-card); }
|
|
903
|
+
.seg { border-color: transparent; background: var(--color-card-raised); border-radius: 12px; padding: 3px; }
|
|
904
|
+
.seg button { border-radius: 9px; }
|
|
905
|
+
.seg button.on { background: var(--paper); color: var(--ink); box-shadow: var(--elevation-card); }
|
|
906
|
+
.chat { border-left-color: transparent; box-shadow: -10px 0 30px rgba(23, 32, 51, 0.05); }
|
|
907
|
+
.chips button, .prompts button, .skills, .linked, .notes-tab, .blk, .layer, .chat .notes-card, .cloud-selection, .outputs-directory, .output-document { border-color: transparent; background: var(--color-card-raised); border-radius: 12px; }
|
|
908
|
+
.ctx-menu, .palette-search { border-color: transparent; border-radius: 14px; box-shadow: var(--elevation-raised); }
|
|
909
|
+
.journey-guide, .journey-wizard { border-color: transparent; }
|
|
910
|
+
.composer textarea { border-radius: 18px; }
|
|
911
|
+
.terraform-code { border-radius: 12px; }
|
|
912
|
+
|
|
913
|
+
/* AtMem.ai lockup shared with the website and the other AtMem.ai apps. */
|
|
914
|
+
.atmem-mark { flex: none; color: var(--color-ink); }
|
|
915
|
+
.atmem-dot { fill: #F3A2B4; }
|
|
916
|
+
:root[data-theme="dark"] .atmem-dot { fill: #F3A2B4; }
|
|
917
|
+
.bar .brand { color: var(--color-ink); font-weight: 800; }
|
|
918
|
+
.brand-divider { color: var(--color-muted); font-weight: 500; padding: 0 6px; }
|
|
919
|
+
|
|
920
|
+
.voice-status{font-size:12px;line-height:1.5;padding:0 16px 10px;color:var(--muted)}
|
|
921
|
+
.voice-status:empty{display:none}
|
|
922
|
+
.voice-status button{display:block;margin-top:6px;text-decoration:underline;background:none;border:0;color:inherit;cursor:pointer;font:inherit}
|
|
923
|
+
|
|
924
|
+
/* Two gentle pulses, then a steady outline until the change cue expires. */
|
|
925
|
+
.react-flow__node.diagram-attention {
|
|
926
|
+
outline: 3px solid var(--accent);
|
|
927
|
+
outline-offset: 7px;
|
|
928
|
+
border-radius: 14px;
|
|
929
|
+
animation: diagram-change-pulse 1s ease-in-out 2;
|
|
930
|
+
}
|
|
931
|
+
.react-flow__edge.diagram-attention .react-flow__edge-path {
|
|
932
|
+
stroke: var(--accent);
|
|
933
|
+
stroke-width: 4;
|
|
934
|
+
animation: diagram-edge-pulse 1s ease-in-out 2;
|
|
935
|
+
}
|
|
936
|
+
@keyframes diagram-change-pulse {
|
|
937
|
+
50% { outline-offset: 13px; box-shadow: 0 0 0 12px var(--accent-soft); }
|
|
938
|
+
}
|
|
939
|
+
@keyframes diagram-edge-pulse { 50% { stroke-width: 7; } }
|
|
940
|
+
@media (prefers-reduced-motion: reduce) {
|
|
941
|
+
.react-flow__node.diagram-attention,
|
|
942
|
+
.react-flow__edge.diagram-attention .react-flow__edge-path { animation: none; }
|
|
943
|
+
}
|
|
944
|
+
|
|
945
|
+
.emulation-panel { margin: 16px 0; padding: 16px; border: 1px solid var(--line); border-radius: 12px; }
|
|
946
|
+
.emulation-panel h3 { margin-top: 0; }
|
|
947
|
+
.emulation-panel li { margin: 6px 0; }
|
|
948
|
+
.emulation-panel details { margin-top: 12px; }
|
|
949
|
+
/* Canvas-native emulation: a small live instrument, never a replacement page. */
|
|
950
|
+
.emulation-dock{position:absolute;left:76px;bottom:24px;z-index:10;width:min(370px,calc(100% - 100px));pointer-events:auto}
|
|
951
|
+
.emulation-panel{margin:0;padding:16px;background:var(--paper);border:1px solid var(--line);border-radius:20px;box-shadow:0 12px 40px #153c3c18;text-align:left}
|
|
952
|
+
.emulation-heading{display:flex;align-items:center;gap:12px}.emulation-heading>div{flex:1;min-width:0}.emulation-heading h3{font-size:14px;line-height:1.4;margin:3px 0}.emulation-eyebrow{font-size:9px;font-weight:700;letter-spacing:1.5px;color:var(--muted)}
|
|
953
|
+
.emulation-orb{display:grid;place-items:center;width:46px;height:46px;border-radius:16px;background:var(--accent-soft);color:var(--accent);flex-shrink:0}.emulation-orb.working{animation:mentor-pulse 1.6s ease-in-out infinite}
|
|
954
|
+
.emulation-controls{display:flex;gap:6px;align-items:center;margin:14px 0}.emulation-icon{width:36px;height:36px;border:1px solid var(--line);border-radius:11px;flex-shrink:0}.emulation-icon:hover,.emulation-icon:focus-visible{background:var(--accent-soft)}.emulation-icon.active{color:var(--color-brand-ink);background:var(--action);border-color:var(--action)}.emulation-controls .emulation-icon:last-child{margin-left:auto}
|
|
955
|
+
.emulation-track{display:flex;align-items:center;gap:7px;font-size:10px;color:var(--muted)}.emulation-track i{height:1px;background:var(--line);flex:1}.emulation-track .current,.emulation-track .complete{color:var(--accent);font-weight:700}.emulation-caption{font-size:11px!important;line-height:1.6;margin-top:10px!important;color:var(--muted)}
|
|
956
|
+
.emulation-evidence{max-height:260px;overflow:auto;border-top:1px solid var(--line);margin-top:12px;padding-top:10px;font-size:11px;line-height:1.6}.emulation-evidence p{margin:8px 0}.emulation-check{display:flex;align-items:flex-start;gap:8px;padding:8px 0}.emulation-check svg{flex-shrink:0;color:var(--accent)}.emulation-check small{display:block}
|
|
957
|
+
.emulation-progress{height:3px;overflow:hidden;border-radius:6px;background:var(--accent-soft);margin-top:12px}.emulation-progress span{display:block;width:35%;height:100%;background:var(--accent);animation:emulation-sweep 1.5s ease-in-out infinite}
|
|
958
|
+
@keyframes mentor-pulse{50%{box-shadow:0 0 0 7px var(--accent-soft);transform:scale(1.05)}}@keyframes emulation-sweep{from{transform:translateX(-110%)}to{transform:translateX(390%)}}
|
|
959
|
+
.workspace-label{font-size:9px;letter-spacing:1.4px;font-weight:700;color:var(--muted)}.crumbs{flex-wrap:wrap;gap:8px!important}.crumbs .project-name{width:clamp(220px,30vw,520px);max-width:none!important;font-size:15px;font-weight:650}.crumbs button.here{background:var(--accent-soft);border:1px solid var(--color-brand);border-radius:9px;padding:7px 10px;color:var(--accent)}.crumbs button:not(.projects-btn){gap:6px}.journey-actions>.btn{min-width:42px;min-height:42px}
|
|
960
|
+
@media(prefers-reduced-motion:reduce){.emulation-orb.working,.emulation-progress span{animation:none}}
|
|
961
|
+
@media(max-width:700px){.emulation-dock{left:12px;bottom:12px;width:min(340px,calc(100% - 24px))}.emulation-evidence{max-height:140px}.workspace-label{display:none}.crumbs .project-name{width:200px;max-width:55vw!important}.crumbs{font-size:11px}}
|
|
962
|
+
.system-component,.system-interaction{margin:26px 0;padding-bottom:22px;border-bottom:1px solid var(--line)}.system-component h4,.system-interaction h4{font-size:19px;margin:0 0 14px}.system-component h5{font-size:13px;margin:20px 0 8px}.requirements-paper .system-component p,.requirements-paper .system-interaction p{font-family:inherit;font-size:14px;line-height:1.8}.system-component ul{font-size:14px;line-height:1.8;padding-left:20px}
|
|
963
|
+
.app{grid-template-rows:auto auto minmax(0,1fr)}.bar{flex-wrap:wrap;padding:10px 16px;gap:10px}.crumbs{order:3;flex-basis:100%;flex-wrap:nowrap;overflow:visible}.crumbs .project-name{flex:1;min-width:0;width:auto;max-width:none!important}.workspace-label{flex-shrink:0}.component-navigator{position:relative;flex-shrink:0}.tree-trigger{border:1px solid var(--line);background:var(--board);padding:8px 12px!important;max-width:none!important}.current-view{display:flex;align-items:center;gap:6px;font-size:11px;color:var(--ink-2)}.component-tree{position:absolute;right:0;top:calc(100% + 8px);width:340px;max-height:65vh;overflow:auto;background:var(--paper);border:1px solid var(--line);border-radius:14px;box-shadow:var(--shadow);padding:16px;z-index:40}.component-tree strong{display:block;padding-bottom:12px;line-height:1.5}.component-tree summary{padding:10px 0;font-size:12px;font-weight:700}.component-tree button{width:100%;max-width:none!important;justify-content:flex-start;text-align:left;white-space:normal!important;padding:9px!important;border-radius:8px!important}.component-tree button span{padding:0;white-space:normal;max-width:none;font-size:12px}.component-tree small{display:block;color:var(--ink-2);font-size:10px}.component-tree details{border-top:1px solid var(--line)}.tree-views{padding-bottom:10px}.menu button{display:flex;align-items:center;justify-content:flex-start;gap:12px}.menu button svg{color:var(--ink-2);flex-shrink:0}.menu hr{border:0;border-top:1px solid var(--line);margin:7px 6px}.reset-actions{display:flex;flex-wrap:wrap;gap:10px;margin:24px 0}.reset-actions .btn{padding:12px 16px;min-height:44px;white-space:nowrap;border-radius:10px;line-height:1.3}
|
|
964
|
+
@media(max-width:900px){.app{grid-template-rows:auto auto 60vh auto}.current-view{display:none}.component-tree{position:fixed;top:110px;right:12px;width:min(340px,calc(100vw - 24px))}.tree-trigger{font-size:11px}.crumbs .project-name{max-width:none!important}.workspace-label{display:none}}
|
|
965
|
+
|
|
966
|
+
/* Filled brand controls use dark ink against the soft pink. */
|
|
967
|
+
.prompts .primary-chip, .btn.sketch, .skills .skill.on { background:var(--action); border-color:var(--action); color:var(--color-brand-ink); }
|
|
968
|
+
|
|
969
|
+
/* Place workspace controls beside the surface they affect. */
|
|
970
|
+
.bar-actions { margin-left:auto; gap:2px; padding:3px; border:1px solid var(--line); border-radius:12px; background:var(--paper); }
|
|
971
|
+
.bar>.menu { top:56px; right:16px; }
|
|
972
|
+
.chat-heading-row { display:flex; align-items:center; justify-content:space-between; width:100%; gap:12px; }
|
|
973
|
+
.chat-reopen { position:fixed; right:16px; top:180px; z-index:21; width:40px; height:40px; border:1px solid var(--line); background:var(--paper); box-shadow:var(--shadow); }
|
|
974
|
+
@media(max-width:900px){.chat-reopen{top:auto;bottom:16px;}}
|
|
975
|
+
|
|
976
|
+
/* Visible card boundaries on both the light and dark canvas. */
|
|
977
|
+
.blk, .layer { border-color:light-dark(#9AA2AD, #7B8B8D); }
|
|
978
|
+
|
|
979
|
+
.menu button:hover:not(:disabled), .menu button:focus-visible { background:var(--color-brand-soft); color:var(--color-brand-text); }
|
|
980
|
+
|
|
981
|
+
/* Shared interaction palette: hover and keyboard focus use the same rose family. */
|
|
982
|
+
:is(.icon,.btn,.menu button,.ctx-menu button,.palette-item,.chip button,.seg button,.chips button,.modes button,.prompts button,.template-list button,.provider-tile,.model,.link,.outputs-directory button,.tree-views button,.component-tree button,.journey-steps button):not(:disabled):is(:hover,:focus-visible) {
|
|
983
|
+
background:var(--color-brand-soft); color:var(--color-brand-text);
|
|
984
|
+
}
|
|
985
|
+
:is(.btn.primary,.button.run-button,.prompts .primary-chip,.btn.sketch,.emulation-icon.active):not(:disabled):is(:hover,:focus-visible) {
|
|
986
|
+
background:var(--action-hover); border-color:var(--action-hover); color:var(--color-brand-ink);
|
|
987
|
+
}
|
|
988
|
+
.blk:hover, .layer:hover { border-color:var(--color-brand-text); box-shadow:0 0 0 3px var(--color-brand-soft),var(--shadow); }
|
|
989
|
+
.project-name:hover, .model:hover, .provider-tile:hover, .prompts button:hover:not(:disabled), .template-list button:hover { border-color:var(--color-brand-text); }
|
|
990
|
+
|
|
991
|
+
.brain-activity { display:inline-block; vertical-align:middle; flex-shrink:0; overflow:visible; }
|
|
992
|
+
.brain-activity.is-active { animation:brain-breathe 1.6s ease-in-out infinite; }
|
|
993
|
+
@keyframes brain-breathe { 0%,100% { transform:scale(.92); } 50% { transform:scale(1.07); filter:drop-shadow(0 0 3px #F3A2B466); } }
|
|
994
|
+
@media(prefers-reduced-motion:reduce){.brain-activity.is-active{animation:none;}}
|
|
995
|
+
|
|
996
|
+
/* Persistent workspace navigation, aligned to the content edge. */
|
|
997
|
+
.subviews.seg { top:0; left:0; right:0; transform:none; display:flex; gap:8px; padding:10px 18px; border:0; border-bottom:1px solid var(--line); border-radius:0; background:var(--paper); box-shadow:none; }
|
|
998
|
+
.subviews.seg button { display:inline-flex; align-items:center; justify-content:center; gap:8px; padding:10px 14px; min-height:42px; font-size:14px; font-weight:600; border-radius:8px; white-space:nowrap; }
|
|
999
|
+
.subviews.seg button.on { background:var(--color-brand-soft); color:var(--color-brand-text); box-shadow:inset 0 -3px var(--color-brand); }
|
|
1000
|
+
.level-system .hint, .level-flow .hint { top:72px; }
|
|
1001
|
+
.canvas .doc { padding-top:88px; }
|
|
1002
|
+
@media(max-width:600px){.subviews.seg{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:4px;padding:8px;}.subviews.seg button{font-size:12px;padding:8px;}.canvas .doc{padding-top:112px;}.level-system .hint,.level-flow .hint{top:108px;}}
|
|
1003
|
+
|
|
1004
|
+
/* One journey, with workspace views and conversation context clearly secondary. */
|
|
1005
|
+
.journey-map { margin-bottom:12px; }
|
|
1006
|
+
.journey-map>summary { display:flex; align-items:center; gap:12px; width:fit-content; padding:6px 9px; border-radius:8px; color:var(--color-brand-text); font-size:12px; font-weight:600; cursor:pointer; list-style:none; }
|
|
1007
|
+
.journey-map>summary::-webkit-details-marker{display:none;}
|
|
1008
|
+
.journey-map>summary span { color:var(--ink-2); font-size:11px; font-weight:400; }
|
|
1009
|
+
.journey-map>summary::after{content:'⌄';}
|
|
1010
|
+
.journey-map[open]>summary::after{content:'⌃';}
|
|
1011
|
+
.journey-map>summary:is(:hover,:focus-visible){background:var(--color-brand-soft);}
|
|
1012
|
+
.journey-map .journey-steps{margin:12px 0;padding:12px;border:1px solid var(--line);border-radius:10px;}
|
|
1013
|
+
.journey-current .journey-next{margin-top:8px;color:var(--ink);font-weight:600;}
|
|
1014
|
+
.journey-next>span{font-size:10px;text-transform:uppercase;letter-spacing:.06em;color:var(--color-brand-text);margin-right:6px;}
|
|
1015
|
+
.workspace-views-label{align-self:center;font-size:10px;text-transform:uppercase;letter-spacing:.08em;color:var(--ink-2);margin-right:8px;}
|
|
1016
|
+
.known-bar{gap:6px;}.known-bar[aria-expanded=true]>svg:last-child{transform:rotate(90deg);}
|
|
1017
|
+
.known-list .context-caption{display:block;font-size:10px;color:var(--ink-2);padding-bottom:8px;}
|
|
1018
|
+
@media(max-width:600px){.workspace-views-label{display:none;}}
|
|
1019
|
+
|
|
1020
|
+
/* Canvas-first shell: one identity row and one compact working toolbar. */
|
|
1021
|
+
.bar { flex-wrap:nowrap; padding:5px 12px; gap:10px; min-height:52px; }
|
|
1022
|
+
.crumbs { order:0; flex-basis:auto; flex:1; gap:6px!important; }
|
|
1023
|
+
.crumbs .workspace-label,.crumbs .current-view { display:none; }
|
|
1024
|
+
.crumbs .project-name { font-size:13px; padding:5px 4px; }
|
|
1025
|
+
.crumbs .tree-trigger { padding:5px 8px!important; font-size:11px; }
|
|
1026
|
+
.bar .brand { font-size:13px; }
|
|
1027
|
+
.bar .modes button { padding:7px 9px; }
|
|
1028
|
+
.journey-wizard { display:flex; align-items:center; gap:12px; padding:6px 12px; min-height:48px; border-bottom:1px solid var(--line); }
|
|
1029
|
+
.journey-map { position:relative; margin:0; flex-shrink:0; }
|
|
1030
|
+
.journey-map>summary { font-size:11px; padding:7px; max-width:170px; }
|
|
1031
|
+
.journey-map .journey-steps { position:absolute; left:0; top:100%; z-index:30; width:270px; background:var(--paper); box-shadow:var(--shadow); display:flex; flex-direction:column; align-items:stretch; margin:8px 0; }
|
|
1032
|
+
.journey-current { margin-left:auto; display:block; }
|
|
1033
|
+
.journey-current>div:first-child { display:none; }
|
|
1034
|
+
.journey-actions { gap:5px; flex-wrap:nowrap; }
|
|
1035
|
+
.journey-actions>.btn { min-width:34px; min-height:34px; height:34px; padding:6px; border-radius:10px; }
|
|
1036
|
+
.workspace-tabs.seg { display:flex; gap:3px; padding:0; border:0; border-radius:0; background:none; box-shadow:none; }
|
|
1037
|
+
.workspace-tabs.seg button { display:flex; align-items:center; gap:6px; white-space:nowrap; font-size:12px; padding:7px 9px; min-height:34px; }
|
|
1038
|
+
.workspace-tabs.seg button.on { background:var(--color-brand-soft); color:var(--color-brand-text); box-shadow:inset 0 -2px var(--color-brand); }
|
|
1039
|
+
.canvas .doc { padding-top:24px; }
|
|
1040
|
+
.level-system .hint,.level-flow .hint { top:12px; }
|
|
1041
|
+
@media(max-width:1100px){.bar .brand>span{display:none;}.crumbs .tree-trigger>span{display:none;}.journey-wizard{gap:6px;}.workspace-tabs.seg button{font-size:11px;padding:7px;}.journey-map>summary{max-width:130px;}}
|
|
1042
|
+
@media(max-width:700px){.bar{flex-wrap:wrap;gap:4px;padding:4px 8px;}.crumbs{min-width:220px;}.bar .modes{order:2;}.journey-wizard{flex-wrap:wrap;padding:5px 8px;}.workspace-tabs.seg{order:3;width:100%;}.workspace-tabs.seg button{flex:1;justify-content:center;font-size:11px;}.journey-map>summary{max-width:none;}.journey-current{margin-left:auto;}.canvas .doc{padding-top:20px;}}
|
|
1043
|
+
|
|
1044
|
+
.chat-markdown { white-space:normal; overflow-wrap:anywhere; }
|
|
1045
|
+
.chat-markdown p { margin:0 0 10px; }.chat-markdown p:last-child{margin-bottom:0;}
|
|
1046
|
+
.chat-markdown h4 { margin:14px 0 8px; font-size:14px; }.chat-markdown ul,.chat-markdown ol{margin:8px 0;padding-left:20px;}.chat-markdown li{margin:5px 0;}
|
|
1047
|
+
.chat-markdown pre{white-space:pre-wrap;overflow:auto;padding:12px;background:var(--board);color:var(--ink);border:1px solid var(--line);border-radius:8px;font-size:12px;}
|
|
1048
|
+
.chat-markdown code{font-family:var(--type-family-mono);font-size:.9em;}.chat-markdown a{color:var(--color-brand-text);text-decoration:underline;}
|
|
1049
|
+
.attachment-tray{margin:6px 14px;font-size:11px;max-height:180px;overflow:auto;}.attachment-tray>p{color:var(--ink-2);margin:6px 0;}
|
|
1050
|
+
.attachment-chip{display:flex;align-items:center;gap:8px;padding:6px;margin:4px 0;background:var(--color-brand-soft);border-radius:9px;}.attachment-chip>img{width:36px;height:36px;object-fit:cover;border-radius:4px;}.attachment-chip>span{flex:1;min-width:0;overflow-wrap:anywhere;}.attachment-chip small{display:block;color:var(--ink-2);font-size:10px;}.attachment-chip .icon{width:28px;height:28px;flex-shrink:0;}
|
|
1051
|
+
.attachment-status{margin:6px 16px;font-size:12px;}.sent-attachments{display:flex;flex-wrap:wrap;gap:8px;margin-top:8px;}.sent-attachments figure{margin:0;max-width:100%;}.sent-attachments img{max-width:100%;max-height:180px;border-radius:8px;}.sent-attachments figcaption{display:flex;gap:5px;font-size:10px;overflow-wrap:anywhere;}
|
|
1052
|
+
|
|
1053
|
+
.modal-close { position:static; align-self:flex-end; flex-shrink:0; margin:-10px -10px -4px 0; border:1px solid var(--line); background:var(--paper); }
|
|
1054
|
+
|
|
1055
|
+
.composer { display:flex; flex-direction:column; gap:0; border:1px solid var(--line); border-radius:16px; background:var(--paper); padding:8px; }
|
|
1056
|
+
.composer:focus-within { border-color:var(--color-brand-text); box-shadow:0 0 0 2px var(--color-brand-soft); }
|
|
1057
|
+
.composer textarea { display:block; width:100%; min-height:58px; max-height:180px; padding:6px; border:0; border-radius:8px; resize:vertical; background:transparent; }
|
|
1058
|
+
.composer textarea:focus { border:0; box-shadow:none; }
|
|
1059
|
+
.composer-actions { display:flex; align-items:center; gap:8px; padding-top:6px; }
|
|
1060
|
+
.composer-actions .mic,.composer-actions .send { position:static; width:34px; height:34px; flex-shrink:0; }
|
|
1061
|
+
.composer-actions .mic { margin-left:auto; }
|
|
1062
|
+
|
|
1063
|
+
/* Clearly distinguish the user's own turns from architect replies. */
|
|
1064
|
+
.msg.user { align-self:flex-end; max-width:92%; background:var(--color-brand-soft); color:var(--color-ink); border:1px solid var(--color-line); border-radius:14px 14px 4px 14px; padding:12px 14px; }
|
|
1065
|
+
.msg.user .chat-markdown,.msg.user figcaption { color:var(--color-ink); }
|
|
1066
|
+
.msg.assistant { align-self:stretch; }
|
|
1067
|
+
.sent-attachments figcaption {display:flex;flex-wrap:wrap;align-items:center;gap:4px;overflow-wrap:anywhere;}
|
|
1068
|
+
.sent-attachments figcaption small {flex-basis:100%;font-size:10px;line-height:1.4;color:var(--color-muted);}
|
|
1069
|
+
/* Paper styling is tilted independently so note handles and typing stay aligned. */
|
|
1070
|
+
.note.sticky-note {position:relative;isolation:isolate;width:220px;min-height:140px;padding:22px 18px 24px;background:transparent;border:0;border-radius:0;box-shadow:none;}
|
|
1071
|
+
.note.sticky-note::before {content:"";position:absolute;inset:0;z-index:-1;pointer-events:none;background:linear-gradient(150deg,light-dark(#fff5ba,#51451f),light-dark(#fff0a0,#42391d));border:1px solid light-dark(#d9c46d,#938052);border-radius:2px 2px 18px 2px;box-shadow:3px 7px 12px rgb(0 0 0 / .16);transform:rotate(-1.5deg);}
|
|
1072
|
+
.note.sticky-note::after {content:"";position:absolute;right:-1px;bottom:2px;width:22px;height:22px;pointer-events:none;background:linear-gradient(135deg,light-dark(#ddc66e,#8c7840) 48%,light-dark(#fff9d9,#63562b) 50%);clip-path:polygon(0 0,100% 0,0 100%);transform:rotate(-1.5deg);filter:drop-shadow(-1px -1px 1px rgb(0 0 0 / .12));}
|
|
1073
|
+
.note.sticky-note.selected {outline:none;}
|
|
1074
|
+
.note.sticky-note.selected::before,.note.sticky-note:focus-within::before {outline:2px solid var(--accent);outline-offset:3px;}
|
|
1075
|
+
.note.sticky-note textarea {min-height:94px;font-size:14px;line-height:1.55;color:light-dark(#453918,#fff4cb);}
|
|
1076
|
+
.note.sticky-note textarea::placeholder {color:light-dark(#786b40,#cabc8e);}
|
|
1077
|
+
.ctx-menu {min-width:204px;padding:6px;border:1px solid var(--line);border-radius:12px;box-shadow:0 8px 28px rgb(0 0 0 / .14);}
|
|
1078
|
+
.ctx-menu button {display:flex;align-items:center;gap:10px;min-height:36px;padding:8px 10px;font-size:13px;border-radius:7px;}
|
|
1079
|
+
.ctx-menu button svg {flex-shrink:0;color:var(--muted);}
|
|
1080
|
+
.ctx-menu .danger svg {color:inherit;}
|
|
1081
|
+
.ctx-divider {height:1px;margin:5px 8px;background:var(--line);}
|
|
1082
|
+
.empty-canvas {pointer-events:none;}
|
|
1083
|
+
.emulation-icon[aria-busy="true"]:disabled {opacity:1;cursor:wait;}
|
|
1084
|
+
.journey-actions [aria-busy="true"] {box-shadow:0 0 0 2px var(--color-brand-soft);}
|
|
1085
|
+
.emulation-icon.active[aria-busy="true"],.journey-actions .btn.primary[aria-busy="true"] {background:var(--paper);border:1px solid var(--color-brand);}
|
|
1086
|
+
|
|
1087
|
+
/* Component design review stays distinct from execution evidence. */
|
|
1088
|
+
.block-review-badge { display:inline-flex; align-items:center; gap:5px; align-self:flex-start; max-width:100%; padding:4px 8px; border:1px solid var(--line); border-radius:99px; font-size:11px; font-weight:600; line-height:1.3; color:var(--ink-2); background:var(--board); }
|
|
1089
|
+
.blk .block-review-badge { margin-top:7px; }
|
|
1090
|
+
.block-review-badge svg { flex-shrink:0; }
|
|
1091
|
+
.block-review-badge.reviewed { color:var(--color-brand-text); background:var(--color-brand-soft); border-color:var(--color-brand); }
|
|
1092
|
+
.block-review-badge.questions { color:light-dark(#795215,#f2ce8e); background:light-dark(#fff6e5,#332a1c); border-color:light-dark(#e7ce9d,#746039); }
|
|
1093
|
+
.block-review-badge.changed { color:var(--color-brand-text); border-color:var(--color-brand); }
|
|
1094
|
+
.component-review { display:flex; flex-direction:column; gap:12px; min-width:0; padding:14px; border:1px solid var(--line); border-radius:12px; background:var(--board); }
|
|
1095
|
+
.block-review-heading,.block-review-progress { display:flex; align-items:center; justify-content:space-between; flex-wrap:wrap; gap:8px; }
|
|
1096
|
+
.block-review-heading strong { font-size:13px; }
|
|
1097
|
+
.block-review-progress progress { flex:1; min-width:40px; height:6px; accent-color:var(--color-brand); }
|
|
1098
|
+
.block-review-progress small,.block-review-boundary { color:var(--ink-2); font-size:11px; }
|
|
1099
|
+
.block-review-checks,.block-review-questions { list-style:none; padding:0; margin:0; display:grid; gap:8px; font-size:12px; }
|
|
1100
|
+
.block-review-checks li { display:flex; align-items:center; gap:6px; }
|
|
1101
|
+
.block-review-checks svg { flex-shrink:0; }
|
|
1102
|
+
.block-review-checks .complete { color:var(--ink-2); }
|
|
1103
|
+
.block-review-checks .incomplete { color:light-dark(#795215,#f2ce8e); }
|
|
1104
|
+
.block-review-questions li { display:grid; gap:6px; padding:10px; background:var(--paper); border-left:3px solid var(--color-brand); border-radius:4px; overflow-wrap:anywhere; }
|
|
1105
|
+
.block-review-questions small { color:var(--ink-2); }
|
|
1106
|
+
.block-review-actions { display:flex; flex-wrap:wrap; gap:6px; }
|
|
1107
|
+
.block-review-actions .btn,.block-review-navigation .btn { padding:7px 9px; font-size:12px; }
|
|
1108
|
+
.block-review-navigation { display:flex; justify-content:space-between; gap:8px; border-top:1px solid var(--line); padding-top:10px; }
|
|
1109
|
+
.block-question-form,.block-review-questions form { display:grid; gap:8px; }
|
|
1110
|
+
.block-question-form label,.block-review-questions label { display:grid; gap:5px; font-size:12px; }
|
|
1111
|
+
.block-question-form textarea,.block-review-questions textarea { width:100%; min-width:0; min-height:70px; resize:vertical; border:1px solid var(--line); border-radius:8px; padding:8px; background:var(--paper); color:var(--ink); }
|
|
1112
|
+
.block-review-questions summary { color:var(--color-brand-text); cursor:pointer; font-size:12px; }
|
|
1113
|
+
.tree-review-state.reviewed { color:var(--color-brand-text); }
|
|
1114
|
+
.tree-review-state.questions { color:light-dark(#795215,#f2ce8e); }
|
|
1115
|
+
.block-architect-note { padding:10px; border-radius:8px; background:var(--paper); font-size:12px; line-height:1.5; }
|
|
1116
|
+
.block-architect-note strong { display:block; margin-bottom:5px; color:var(--color-brand-text); }
|
|
1117
|
+
.canvas-view-switch { display:flex; align-items:center; flex-wrap:wrap; gap:4px; margin-left:auto; border:1px solid var(--line); border-radius:10px; padding:3px; }
|
|
1118
|
+
.canvas-view-switch button { display:inline-flex; align-items:center; gap:5px; padding:6px 8px; border-radius:7px; font-size:11px; color:var(--ink-2); }
|
|
1119
|
+
.canvas-view-switch button[aria-pressed="true"] { color:var(--color-brand-text); background:var(--color-brand-soft); }
|
|
1120
|
+
.canvas-view-switch .topology-organise { border-left:1px solid var(--line); border-radius:0; }
|
|
1121
|
+
.topology-review-summary { font-size:12px; color:var(--color-brand-text); }
|
|
1122
|
+
.layer .topology-drill-hint { font-size:10px; color:var(--ink-2); margin-top:6px; }
|
|
1123
|
+
.component-settings > summary { cursor:pointer; font-size:12px; color:var(--ink-2); font-weight:600; padding:5px 0; }
|
|
1124
|
+
.component-settings[open] > summary { margin-bottom:10px; }
|
|
1125
|
+
@media(max-width:600px){.canvas-view-switch{margin-left:0;}.canvas-view-switch .topology-organise{font-size:10px;}}
|
|
1126
|
+
.block-requirements { display:grid; gap:10px; padding:12px; border:1px solid var(--line); border-radius:10px; background:var(--board); }
|
|
1127
|
+
.block-requirements > strong { font-size:13px; }
|
|
1128
|
+
.block-requirement { display:grid; gap:8px; border-top:1px solid var(--line); padding-top:10px; font-size:12px; line-height:1.5; overflow-wrap:anywhere; }
|
|
1129
|
+
.block-requirement form,.block-requirement label { display:grid; gap:8px; }
|
|
1130
|
+
.block-requirement textarea { width:100%; min-height:110px; resize:vertical; padding:8px; border:1px solid var(--line); border-radius:8px; color:var(--ink); background:var(--paper); }
|
|
1131
|
+
.block-requirements small { font-size:11px; color:var(--ink-2); }
|
|
1132
|
+
.layer .topology-review-summary { justify-content:flex-start; padding:0; text-align:left; }
|
|
1133
|
+
.layer .topology-review-summary:hover { text-decoration:underline; }
|
|
1134
|
+
.layer .topology-drill-hint { display:inline-flex; align-items:center; justify-content:flex-start; gap:4px; padding:0; }
|
|
1135
|
+
.recorded-answer { display:block; margin-top:4px; color:var(--ink-2); }
|
|
1136
|
+
.emulation-next-step { display:grid; gap:10px; padding:10px 0; font-size:12px; line-height:1.5; }
|
|
1137
|
+
.emulation-next-step .btn { justify-self:start; }
|
|
1138
|
+
.emulation-next-step .link { justify-self:start; }
|
|
1139
|
+
.intake-status { display:flex; align-items:center; gap:8px; padding:8px 16px; font-size:12px; color:var(--color-brand-text); background:var(--color-brand-soft); }
|
|
1140
|
+
.message-work-state { display:flex; flex-wrap:wrap; align-items:center; gap:8px; margin-top:6px; font-size:11px; color:var(--ink-2); }
|