dsh-data-domain-knowledge 0.1.0-alpha.9 → 0.1.1-alpha.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +118 -567
- package/cordis.patch.yml +5 -418
- package/eval/README.md +19 -8
- package/eval/benchmark-extraction-format.mjs +20 -0
- package/eval/evaluate-retrieval.mjs +17 -8
- package/eval/queries.example.jsonl +1 -0
- package/lib/client.js +4181 -3239
- package/lib/contract-envelope.d.ts +91 -0
- package/lib/contract-envelope.js +106 -0
- package/lib/contract-layout.d.ts +130 -0
- package/lib/contract-layout.js +138 -0
- package/lib/contract-refs.d.ts +39 -0
- package/lib/contract-refs.js +9 -0
- package/lib/contract-version.d.ts +311 -0
- package/lib/contract-version.js +270 -0
- package/lib/contract-wire.d.ts +147 -0
- package/lib/contract-wire.js +99 -0
- package/lib/contracts.d.ts +12 -0
- package/lib/contracts.js +12 -0
- package/lib/doc-page.js +2 -2
- package/lib/pages.js +3329 -1296
- package/lib/types/agent-behavior-rules.d.ts +10 -0
- package/lib/types/agent-behavior-rules.d.ts.map +1 -0
- package/lib/types/agent-behavior-rules.js +28 -0
- package/lib/types/agent-behavior-rules.js.map +1 -0
- package/lib/types/axis-registry.d.ts +37 -5
- package/lib/types/axis-registry.d.ts.map +1 -1
- package/lib/types/axis-registry.js +234 -26
- package/lib/types/axis-registry.js.map +1 -1
- package/lib/types/card-organize.d.ts +27 -12
- package/lib/types/card-organize.d.ts.map +1 -1
- package/lib/types/card-organize.js +58 -73
- package/lib/types/card-organize.js.map +1 -1
- package/lib/types/compiler/embedding-identity.d.ts +3 -0
- package/lib/types/compiler/embedding-identity.d.ts.map +1 -0
- package/lib/types/compiler/embedding-identity.js +24 -0
- package/lib/types/compiler/embedding-identity.js.map +1 -0
- package/lib/types/compiler/snapshot.d.ts +16 -0
- package/lib/types/compiler/snapshot.d.ts.map +1 -0
- package/lib/types/compiler/snapshot.js +2 -0
- package/lib/types/compiler/snapshot.js.map +1 -0
- package/lib/types/config-schema.d.ts +6 -3
- package/lib/types/config-schema.d.ts.map +1 -1
- package/lib/types/config-schema.js +6 -2
- package/lib/types/config-schema.js.map +1 -1
- package/lib/types/convert/host.d.ts +6 -5
- package/lib/types/convert/host.d.ts.map +1 -1
- package/lib/types/convert/host.js +58 -18
- package/lib/types/convert/host.js.map +1 -1
- package/lib/types/convert/ingest.d.ts +10 -1
- package/lib/types/convert/ingest.d.ts.map +1 -1
- package/lib/types/convert/ingest.js +68 -9
- package/lib/types/convert/ingest.js.map +1 -1
- package/lib/types/derive-contract.d.ts +3 -0
- package/lib/types/derive-contract.d.ts.map +1 -0
- package/lib/types/derive-contract.js +15 -0
- package/lib/types/derive-contract.js.map +1 -0
- package/lib/types/diagnosis/cards.d.ts +7 -3
- package/lib/types/diagnosis/cards.d.ts.map +1 -1
- package/lib/types/diagnosis/cards.js +13 -8
- package/lib/types/diagnosis/cards.js.map +1 -1
- package/lib/types/diagnosis/run.d.ts +4 -13
- package/lib/types/diagnosis/run.d.ts.map +1 -1
- package/lib/types/diagnosis/run.js +26 -16
- package/lib/types/diagnosis/run.js.map +1 -1
- package/lib/types/diagnosis/schema.js +2 -2
- package/lib/types/diagnosis/schema.js.map +1 -1
- package/lib/types/diagnosis/seed-source.d.ts +1 -1
- package/lib/types/diagnosis/seed-source.d.ts.map +1 -1
- package/lib/types/diagnosis/seed-source.js +5 -4
- package/lib/types/diagnosis/seed-source.js.map +1 -1
- package/lib/types/diagnosis/seed.d.ts +4 -4
- package/lib/types/diagnosis/seed.d.ts.map +1 -1
- package/lib/types/diagnosis/seed.js +6 -8
- package/lib/types/diagnosis/seed.js.map +1 -1
- package/lib/types/diagnosis/store.d.ts +24 -18
- package/lib/types/diagnosis/store.d.ts.map +1 -1
- package/lib/types/diagnosis/store.js +130 -65
- package/lib/types/diagnosis/store.js.map +1 -1
- package/lib/types/diagnosis/types.d.ts +47 -15
- package/lib/types/diagnosis/types.d.ts.map +1 -1
- package/lib/types/diagnosis/types.js.map +1 -1
- package/lib/types/environment/dsh-python.d.ts +77 -0
- package/lib/types/environment/dsh-python.d.ts.map +1 -0
- package/lib/types/environment/dsh-python.js +139 -0
- package/lib/types/environment/dsh-python.js.map +1 -0
- package/lib/types/environment/install.d.ts +15 -0
- package/lib/types/environment/install.d.ts.map +1 -0
- package/lib/types/environment/install.js +297 -0
- package/lib/types/environment/install.js.map +1 -0
- package/lib/types/environment/manifest.d.ts +208 -0
- package/lib/types/environment/manifest.d.ts.map +1 -0
- package/lib/types/environment/manifest.js +26 -0
- package/lib/types/environment/manifest.js.map +1 -0
- package/lib/types/environment/model-catalog.d.ts +223 -0
- package/lib/types/environment/model-catalog.d.ts.map +1 -0
- package/lib/types/environment/model-catalog.js +129 -0
- package/lib/types/environment/model-catalog.js.map +1 -0
- package/lib/types/environment/process.d.ts +10 -0
- package/lib/types/environment/process.d.ts.map +1 -0
- package/lib/types/environment/process.js +54 -0
- package/lib/types/environment/process.js.map +1 -0
- package/lib/types/environment/selection.d.ts +9 -0
- package/lib/types/environment/selection.d.ts.map +1 -0
- package/lib/types/environment/selection.js +29 -0
- package/lib/types/environment/selection.js.map +1 -0
- package/lib/types/environment/service.d.ts +64 -0
- package/lib/types/environment/service.d.ts.map +1 -0
- package/lib/types/environment/service.js +424 -0
- package/lib/types/environment/service.js.map +1 -0
- package/lib/types/environment/types.d.ts +56 -0
- package/lib/types/environment/types.d.ts.map +1 -0
- package/lib/types/environment/types.js +2 -0
- package/lib/types/environment/types.js.map +1 -0
- package/lib/types/events.d.ts +76 -0
- package/lib/types/events.d.ts.map +1 -0
- package/lib/types/events.js +52 -0
- package/lib/types/events.js.map +1 -0
- package/lib/types/extract-contract.d.ts +3 -0
- package/lib/types/extract-contract.d.ts.map +1 -0
- package/lib/types/extract-contract.js +41 -0
- package/lib/types/extract-contract.js.map +1 -0
- package/lib/types/extract-model.d.ts +5 -0
- package/lib/types/extract-model.d.ts.map +1 -1
- package/lib/types/extract-model.js.map +1 -1
- package/lib/types/extract-table-contract.d.ts +3 -0
- package/lib/types/extract-table-contract.d.ts.map +1 -0
- package/lib/types/extract-table-contract.js +27 -0
- package/lib/types/extract-table-contract.js.map +1 -0
- package/lib/types/extract-table.d.ts +8 -0
- package/lib/types/extract-table.d.ts.map +1 -0
- package/lib/types/extract-table.js +158 -0
- package/lib/types/extract-table.js.map +1 -0
- package/lib/types/extraction-runs.d.ts +30 -6
- package/lib/types/extraction-runs.d.ts.map +1 -1
- package/lib/types/extraction-runs.js +69 -8
- package/lib/types/extraction-runs.js.map +1 -1
- package/lib/types/fs-atomic.d.ts +0 -7
- package/lib/types/fs-atomic.d.ts.map +1 -1
- package/lib/types/fs-atomic.js +17 -2
- package/lib/types/fs-atomic.js.map +1 -1
- package/lib/types/images.d.ts +26 -0
- package/lib/types/images.d.ts.map +1 -0
- package/lib/types/images.js +196 -0
- package/lib/types/images.js.map +1 -0
- package/lib/types/index.d.ts +2 -2
- package/lib/types/index.d.ts.map +1 -1
- package/lib/types/index.js +598 -209
- package/lib/types/index.js.map +1 -1
- package/lib/types/intent/engine.d.ts +12 -4
- package/lib/types/intent/engine.d.ts.map +1 -1
- package/lib/types/intent/engine.js +43 -5
- package/lib/types/intent/engine.js.map +1 -1
- package/lib/types/intent/host.d.ts +5 -8
- package/lib/types/intent/host.d.ts.map +1 -1
- package/lib/types/intent/host.js +56 -11
- package/lib/types/intent/host.js.map +1 -1
- package/lib/types/intent/scope.d.ts +25 -0
- package/lib/types/intent/scope.d.ts.map +1 -0
- package/lib/types/intent/scope.js +116 -0
- package/lib/types/intent/scope.js.map +1 -0
- package/lib/types/intent/tools.d.ts +24 -20
- package/lib/types/intent/tools.d.ts.map +1 -1
- package/lib/types/intent/tools.js +65 -23
- package/lib/types/intent/tools.js.map +1 -1
- package/lib/types/intent/types.d.ts +11 -4
- package/lib/types/intent/types.d.ts.map +1 -1
- package/lib/types/knowledge-bases.d.ts +11 -5
- package/lib/types/knowledge-bases.d.ts.map +1 -1
- package/lib/types/knowledge-bases.js +52 -20
- package/lib/types/knowledge-bases.js.map +1 -1
- package/lib/types/knowledge-contract.d.ts +32 -0
- package/lib/types/knowledge-contract.d.ts.map +1 -0
- package/lib/types/knowledge-contract.js +116 -0
- package/lib/types/knowledge-contract.js.map +1 -0
- package/lib/types/knowledge.d.ts +31 -9
- package/lib/types/knowledge.d.ts.map +1 -1
- package/lib/types/knowledge.js +137 -60
- package/lib/types/knowledge.js.map +1 -1
- package/lib/types/layout.d.ts +10 -29
- package/lib/types/layout.d.ts.map +1 -1
- package/lib/types/layout.js +17 -36
- package/lib/types/layout.js.map +1 -1
- package/lib/types/materialize-snapshot.d.ts +49 -0
- package/lib/types/materialize-snapshot.d.ts.map +1 -0
- package/lib/types/materialize-snapshot.js +2 -0
- package/lib/types/materialize-snapshot.js.map +1 -0
- package/lib/types/migrate.d.ts +11 -0
- package/lib/types/migrate.d.ts.map +1 -1
- package/lib/types/migrate.js +83 -2
- package/lib/types/migrate.js.map +1 -1
- package/lib/types/model-text.d.ts +58 -1
- package/lib/types/model-text.d.ts.map +1 -1
- package/lib/types/model-text.js +85 -30
- package/lib/types/model-text.js.map +1 -1
- package/lib/types/oplog.d.ts.map +1 -1
- package/lib/types/oplog.js +7 -0
- package/lib/types/oplog.js.map +1 -1
- package/lib/types/organize-contract.d.ts +18 -0
- package/lib/types/organize-contract.d.ts.map +1 -0
- package/lib/types/organize-contract.js +82 -0
- package/lib/types/organize-contract.js.map +1 -0
- package/lib/types/pipeline/engine.d.ts +66 -0
- package/lib/types/pipeline/engine.d.ts.map +1 -0
- package/lib/types/pipeline/engine.js +352 -0
- package/lib/types/pipeline/engine.js.map +1 -0
- package/lib/types/pipeline/store.d.ts +73 -0
- package/lib/types/pipeline/store.d.ts.map +1 -0
- package/lib/types/pipeline/store.js +143 -0
- package/lib/types/pipeline/store.js.map +1 -0
- package/lib/types/pipeline/types.d.ts +102 -0
- package/lib/types/pipeline/types.d.ts.map +1 -0
- package/lib/types/pipeline/types.js +5 -0
- package/lib/types/pipeline/types.js.map +1 -0
- package/lib/types/present.d.ts +2 -0
- package/lib/types/present.d.ts.map +1 -1
- package/lib/types/present.js +9 -4
- package/lib/types/present.js.map +1 -1
- package/lib/types/preset-ids.d.ts +4 -0
- package/lib/types/preset-ids.d.ts.map +1 -0
- package/lib/types/preset-ids.js +6 -0
- package/lib/types/preset-ids.js.map +1 -0
- package/lib/types/query-analysis.d.ts +13 -1
- package/lib/types/query-analysis.d.ts.map +1 -1
- package/lib/types/query-analysis.js +62 -6
- package/lib/types/query-analysis.js.map +1 -1
- package/lib/types/recall-rank.d.ts +3 -3
- package/lib/types/recall-rank.d.ts.map +1 -1
- package/lib/types/recall-rank.js +4 -4
- package/lib/types/recall-rank.js.map +1 -1
- package/lib/types/retention.d.ts +39 -0
- package/lib/types/retention.d.ts.map +1 -0
- package/lib/types/retention.js +42 -0
- package/lib/types/retention.js.map +1 -0
- package/lib/types/retrieval/vector-index.d.ts +32 -0
- package/lib/types/retrieval/vector-index.d.ts.map +1 -0
- package/lib/types/retrieval/vector-index.js +15 -0
- package/lib/types/retrieval/vector-index.js.map +1 -0
- package/lib/types/retrieval/visibility.d.ts +6 -0
- package/lib/types/retrieval/visibility.d.ts.map +1 -0
- package/lib/types/retrieval/visibility.js +11 -0
- package/lib/types/retrieval/visibility.js.map +1 -0
- package/lib/types/runtime.d.ts +272 -27
- package/lib/types/runtime.d.ts.map +1 -1
- package/lib/types/runtime.js +2751 -537
- package/lib/types/runtime.js.map +1 -1
- package/lib/types/settings-schema.d.ts +17 -15
- package/lib/types/settings-schema.d.ts.map +1 -1
- package/lib/types/settings-schema.js +50 -47
- package/lib/types/settings-schema.js.map +1 -1
- package/lib/types/settings-volatile.d.ts +4 -4
- package/lib/types/settings-volatile.js +4 -4
- package/lib/types/source-evidence.d.ts +14 -0
- package/lib/types/source-evidence.d.ts.map +1 -0
- package/lib/types/source-evidence.js +36 -0
- package/lib/types/source-evidence.js.map +1 -0
- package/lib/types/store/axis-references.d.ts +5 -0
- package/lib/types/store/axis-references.d.ts.map +1 -0
- package/lib/types/store/axis-references.js +106 -0
- package/lib/types/store/axis-references.js.map +1 -0
- package/lib/types/store/derived.d.ts +12 -1
- package/lib/types/store/derived.d.ts.map +1 -1
- package/lib/types/store/derived.js +71 -12
- package/lib/types/store/derived.js.map +1 -1
- package/lib/types/store/knowledge-db.d.ts +31 -1
- package/lib/types/store/knowledge-db.d.ts.map +1 -1
- package/lib/types/store/knowledge-db.js +252 -18
- package/lib/types/store/knowledge-db.js.map +1 -1
- package/lib/types/store/migrate.d.ts.map +1 -1
- package/lib/types/store/migrate.js +17 -6
- package/lib/types/store/migrate.js.map +1 -1
- package/lib/types/trajectory-types.d.ts +172 -0
- package/lib/types/trajectory-types.d.ts.map +1 -0
- package/lib/types/trajectory-types.js +36 -0
- package/lib/types/trajectory-types.js.map +1 -0
- package/lib/types/types.d.ts +59 -27
- package/lib/types/types.d.ts.map +1 -1
- package/lib/types/types.js +6 -15
- package/lib/types/types.js.map +1 -1
- package/lib/types/wiki-finalize.d.ts +16 -0
- package/lib/types/wiki-finalize.d.ts.map +1 -1
- package/lib/types/wiki-finalize.js +26 -0
- package/lib/types/wiki-finalize.js.map +1 -1
- package/lib/types/wiki-materialize.d.ts +4 -0
- package/lib/types/wiki-materialize.d.ts.map +1 -1
- package/lib/types/wiki-materialize.js +21 -7
- package/lib/types/wiki-materialize.js.map +1 -1
- package/lib/types/wiki-trial-types.d.ts +87 -0
- package/lib/types/wiki-trial-types.d.ts.map +1 -1
- package/lib/types/wiki-trial-types.js +0 -16
- package/lib/types/wiki-trial-types.js.map +1 -1
- package/lib/types/wiki-trial.d.ts +40 -16
- package/lib/types/wiki-trial.d.ts.map +1 -1
- package/lib/types/wiki-trial.js +337 -224
- package/lib/types/wiki-trial.js.map +1 -1
- package/package.json +29 -20
- package/python/prepare-models.py +19 -0
- package/python/requirements.txt +8 -6
- package/scripts/doctor.mjs +13 -19
- package/scripts/environment.mjs +29 -0
- package/scripts/setup-embedding.sh +15 -5
- package/src/agent-behavior-rules.ts +37 -0
- package/src/axis-registry.ts +234 -27
- package/src/card-organize.ts +69 -75
- package/src/client/AgentBehaviorRulesCard.tsx +65 -0
- package/src/client/AttributionEventGuide.tsx +41 -39
- package/src/client/AxisRegistrySection.tsx +204 -164
- package/src/client/CompileDialogs.tsx +44 -29
- package/src/client/DeleteDocumentDialog.tsx +36 -5
- package/src/client/DirectoryPicker.tsx +0 -10
- package/src/client/EnvironmentSetup.tsx +243 -0
- package/src/client/ExpansionGraph.tsx +13 -7
- package/src/client/ExtractionTasksPage.tsx +578 -0
- package/src/client/GuideArchitectureCanvas.tsx +470 -0
- package/src/client/ImportFilesDialog.tsx +2 -13
- package/src/client/IntentLogic.tsx +2 -2
- package/src/client/IntentTab.tsx +118 -47
- package/src/client/KnowledgeBaseTab.tsx +277 -197
- package/src/client/KnowledgeLayerSection.tsx +24 -6
- package/src/client/KnowledgePanel.tsx +58 -93
- package/src/client/KnowledgeSettingsDrawer.tsx +90 -0
- package/src/client/ListPager.tsx +15 -5
- package/src/client/MaterializeTrajectoryView.tsx +124 -0
- package/src/client/NodeSettings.tsx +210 -89
- package/src/client/NormalizeTrajectoryView.tsx +136 -0
- package/src/client/PipelineNotice.tsx +26 -0
- package/src/client/PreviewSections.tsx +118 -51
- package/src/client/RecallPanel.tsx +89 -85
- package/src/client/TabGuide.tsx +159 -184
- package/src/client/TrialReportView.tsx +391 -214
- package/src/client/TypeDefinitionDrawer.tsx +150 -23
- package/src/client/WikiCardPreview.tsx +62 -16
- package/src/client/WikiFlowPanel.tsx +4 -4
- package/src/client/arch/NodeLogicPanel.tsx +3 -4
- package/src/client/arch/model.ts +6 -9
- package/src/client/architecture.tsx +23 -33
- package/src/client/attribution/AttributionGraph.tsx +10 -6
- package/src/client/attribution/AttributionTab.tsx +136 -84
- package/src/client/attribution/CaseView.tsx +3 -1
- package/src/client/attribution/EventView.tsx +108 -0
- package/src/client/attribution/RunView.tsx +2 -2
- package/src/client/attribution/StageChrome.tsx +34 -3
- package/src/client/attribution/ViewSwitch.tsx +20 -5
- package/src/client/attribution/graph-options.ts +47 -39
- package/src/client/attribution/model.ts +17 -10
- package/src/client/config-scope.ts +3 -3
- package/src/client/graph/palette.ts +165 -0
- package/src/client/index.ts +49 -42
- package/src/client/pages.css +459 -135
- package/src/client/pages.tsx +37 -9
- package/src/client/problem-domains.ts +1 -1
- package/src/client/session-remote.ts +9 -0
- package/src/client/styles.css +205 -62
- package/src/client/wiki-trial.ts +44 -3
- package/src/compiler/embedding-identity.ts +21 -0
- package/src/compiler/snapshot.ts +17 -0
- package/src/config-schema.ts +8 -3
- package/src/convert/host.ts +56 -21
- package/src/convert/ingest.ts +74 -10
- package/src/derive-contract.ts +14 -0
- package/src/diagnosis/cards.ts +13 -8
- package/src/diagnosis/run.ts +27 -17
- package/src/diagnosis/schema.ts +2 -2
- package/src/diagnosis/seed-source.ts +5 -4
- package/src/diagnosis/seed.ts +6 -8
- package/src/diagnosis/store.ts +138 -69
- package/src/diagnosis/types.ts +34 -15
- package/src/environment/dsh-python.ts +156 -0
- package/src/environment/install.ts +244 -0
- package/src/environment/manifest.ts +28 -0
- package/src/environment/model-catalog.ts +147 -0
- package/src/environment/process.ts +54 -0
- package/src/environment/selection.ts +29 -0
- package/src/environment/service.ts +348 -0
- package/src/environment/types.ts +45 -0
- package/src/events.ts +108 -0
- package/src/extract-contract.ts +42 -0
- package/src/extract-model.ts +10 -1
- package/src/extract-table-contract.ts +26 -0
- package/src/extract-table.ts +132 -0
- package/src/extraction-runs.ts +70 -11
- package/src/fs-atomic.ts +19 -2
- package/src/images.ts +203 -0
- package/src/index.ts +553 -205
- package/src/intent/README.md +8 -6
- package/src/intent/engine.ts +44 -6
- package/src/intent/host.ts +59 -18
- package/src/intent/scope.ts +125 -0
- package/src/intent/tools.ts +70 -28
- package/src/intent/types.ts +11 -4
- package/src/knowledge-bases.ts +56 -20
- package/src/knowledge-contract.ts +114 -0
- package/src/knowledge.ts +138 -69
- package/src/layout.ts +17 -37
- package/src/materialize-snapshot.ts +46 -0
- package/src/migrate.ts +75 -2
- package/src/model-text.ts +109 -4
- package/src/oplog.ts +7 -0
- package/src/organize-contract.ts +83 -0
- package/src/pipeline/engine.ts +323 -0
- package/src/pipeline/store.ts +147 -0
- package/src/pipeline/types.ts +93 -0
- package/src/present.ts +10 -4
- package/src/preset-ids.ts +6 -0
- package/src/python/embedding_worker.py +66 -2
- package/src/query-analysis.ts +68 -8
- package/src/recall-rank.ts +5 -5
- package/src/retention.ts +76 -0
- package/src/retrieval/vector-index.ts +45 -0
- package/src/retrieval/visibility.ts +14 -0
- package/src/runtime.ts +2708 -567
- package/src/settings-schema.ts +11 -8
- package/src/settings-volatile.ts +4 -4
- package/src/source-evidence.ts +37 -0
- package/src/store/axis-references.ts +96 -0
- package/src/store/derived.ts +70 -12
- package/src/store/knowledge-db.ts +248 -17
- package/src/store/migrate.ts +16 -6
- package/src/trajectory-types.ts +142 -0
- package/src/types.ts +61 -35
- package/src/wiki-finalize.ts +28 -0
- package/src/wiki-materialize.ts +25 -6
- package/src/wiki-trial-types.ts +83 -1
- package/src/wiki-trial.ts +357 -185
- package/lib/types/intent/preset-tools.d.ts +0 -37
- package/lib/types/intent/preset-tools.d.ts.map +0 -1
- package/lib/types/intent/preset-tools.js +0 -45
- package/lib/types/intent/preset-tools.js.map +0 -1
- package/preset/tita-data-agent/agent.cordis.yml +0 -394
- package/preset/tita-data-agent/preset.yml +0 -3
- package/scripts/install-agent-preset.mjs +0 -92
- package/scripts/sync-agent-preset.mjs +0 -188
- package/src/client/AgentPresetCard.tsx +0 -247
- package/src/client/agent-preset.ts +0 -121
- package/src/client/convert/ConvertPanel.tsx +0 -583
- package/src/client/convert/styles.css +0 -138
- package/src/client/convert/styles.ts +0 -49
- package/src/intent/preset-tools.ts +0 -48
package/src/client/pages.css
CHANGED
|
@@ -46,11 +46,17 @@ body {
|
|
|
46
46
|
|
|
47
47
|
.page-main { padding: 28px 28px 120px; }
|
|
48
48
|
|
|
49
|
-
/* 内容列。宽度按页给:说明 860,试跑报告
|
|
49
|
+
/* 内容列。宽度按页给:说明 860,试跑报告 1080,架构说明页 1560。 */
|
|
50
50
|
.page-column { width: 100%; margin-inline: auto; }
|
|
51
51
|
.page-column-help { max-width: 860px; }
|
|
52
52
|
.page-column-trial { max-width: 1080px; }
|
|
53
|
-
.page-column-
|
|
53
|
+
.page-column-tasks { max-width: 1220px; }
|
|
54
|
+
/* 架构说明页是**一块画布**,不是一栏正文:画布设计宽 1172px,再加右列 400px,
|
|
55
|
+
窄于 1560 就只能靠缩字把图塞进来(实测 0.55 倍,卡片上的字读不出)。 */
|
|
56
|
+
.page-column-guide { max-width: 1560px; }
|
|
57
|
+
/* 这一页的边框要贴住视口底,所以把给「读排版」那几页留的 120px 页脚内边距收成 40px ——
|
|
58
|
+
省下的 80px 全部换成画布高度。`:has` 不支持时这条被忽略,退回 120px,不会坏。 */
|
|
59
|
+
.page-main:has(> .page-column-guide) { padding-bottom: 40px; }
|
|
54
60
|
|
|
55
61
|
/* 地址不对、或还没载入时的整页状态。与 `doc-page.css` 的 `.docPage-state` 同形。 */
|
|
56
62
|
.page-state {
|
|
@@ -85,6 +91,230 @@ body {
|
|
|
85
91
|
}
|
|
86
92
|
.page-loading { margin: 0; color: var(--tita-ink-muted); font-size: 12px; }
|
|
87
93
|
|
|
94
|
+
/* ---------------------------------------------------------- 知识处理与运行记录
|
|
95
|
+
*
|
|
96
|
+
* 2026-10-18 重排。这一页只有三层,而每一层回答一个问题:
|
|
97
|
+
*
|
|
98
|
+
* 1. **页头** —— 现在什么状态(一行实时结论)+ 两个动作。**没有标题**:标题在常驻窄条上,
|
|
99
|
+
* 内容区再写一遍就是同一句话说两次。
|
|
100
|
+
* 2. **步骤轨** —— 四段各差多少。它横贯整页而不是缩在左栏里:这一页的骨架是一条有方向的
|
|
101
|
+
* 流水线,把骨架塞进左栏,右栏就变成了「第二根柱子」。
|
|
102
|
+
* 3. **两栏** —— 左栏「这一段跑了什么」,右栏「我要跑哪些」+「以前跑过什么」。
|
|
103
|
+
*
|
|
104
|
+
* 上一版的问题是**同一件事说了三遍**(页签徽标 / 段头 / 结果摘要的第一行都是「部分失败」),
|
|
105
|
+
* 而真正有用的「还剩多少待办」被压成一行 10.5px 的灰字,模型原始日志却占着一屏。
|
|
106
|
+
* 所以这里守一条:**一个事实只出现一次**。阶段状态只住在步骤轨上,待办计数只住在同一格的
|
|
107
|
+
* 第二行,段名只住在段头。
|
|
108
|
+
*/
|
|
109
|
+
.extractTasksPage { display: grid; min-width: 0; gap: 15px; color: var(--tita-ink); }
|
|
110
|
+
|
|
111
|
+
.extractTasksHead { display: flex; flex-wrap: wrap; align-items: center; justify-content: space-between; gap: 10px 18px; }
|
|
112
|
+
/* 结论行:12.5px 而不是 13px —— 它是一句状态,不是正文。宽度上限 76ch:
|
|
113
|
+
整页 1220px 时这一句会独占一整行,读起来像标题。 */
|
|
114
|
+
.extractTasksHeadline { max-width: 76ch; margin: 0; color: var(--tita-ink-muted); font-size: 12.5px; line-height: 1.6; }
|
|
115
|
+
.extractTasksHeadActions { display: flex; flex: 0 0 auto; align-items: center; gap: 6px; }
|
|
116
|
+
.extractTasksError { margin: 0; border: 1px solid color-mix(in srgb, var(--tita-danger) 32%, var(--tita-surface)); border-radius: 8px; background: color-mix(in srgb, var(--tita-danger) 8%, var(--tita-surface)); padding: 9px 12px; color: var(--tita-danger); font-size: 12px; }
|
|
117
|
+
|
|
118
|
+
/* ---- 步骤轨
|
|
119
|
+
*
|
|
120
|
+
* 复用 `KnowledgeStepRail` 那一套语言(节点 + 箭头 + 当前步描边),因为它们是同一件事:
|
|
121
|
+
* 一条流水线上「你现在站在哪一段」。区别只有一处 —— 这里的节点是 Radix 的 trigger,
|
|
122
|
+
* 所以键盘、`aria-controls`、方向键切换都是现成的。
|
|
123
|
+
*
|
|
124
|
+
* 默认的 `TabsList` 是「一排等宽按钮」(等宽 pill + 32px 高):它表达的是「几选一」,
|
|
125
|
+
* 而这里是「谁接谁」。所以把 pill 的底、内边距、固定高全部收掉,节点自己长成带描边的一格。
|
|
126
|
+
*/
|
|
127
|
+
.extractTasksWork { display: flex; min-width: 0; flex-direction: column; gap: 14px; }
|
|
128
|
+
.extractTasksRailList {
|
|
129
|
+
display: flex;
|
|
130
|
+
width: 100%;
|
|
131
|
+
height: auto;
|
|
132
|
+
align-items: stretch;
|
|
133
|
+
gap: 6px;
|
|
134
|
+
border-radius: 0;
|
|
135
|
+
background: transparent;
|
|
136
|
+
padding: 0;
|
|
137
|
+
}
|
|
138
|
+
.extractTasksRailArrow { display: inline-flex; flex: 0 0 auto; align-self: center; align-items: center; color: var(--tita-ink-faint); }
|
|
139
|
+
.extractTasksRailStep {
|
|
140
|
+
display: grid;
|
|
141
|
+
flex: 1 1 0;
|
|
142
|
+
box-sizing: border-box;
|
|
143
|
+
min-width: 0;
|
|
144
|
+
height: auto;
|
|
145
|
+
align-content: start;
|
|
146
|
+
justify-items: start;
|
|
147
|
+
gap: 7px;
|
|
148
|
+
border: 1px solid var(--tita-line);
|
|
149
|
+
border-radius: 9px;
|
|
150
|
+
background: var(--tita-surface);
|
|
151
|
+
padding: 10px 12px;
|
|
152
|
+
color: var(--tita-ink-muted);
|
|
153
|
+
text-align: left;
|
|
154
|
+
white-space: normal;
|
|
155
|
+
transition: border-color 120ms ease-out, background-color 120ms ease-out;
|
|
156
|
+
}
|
|
157
|
+
.extractTasksRailStep:hover { border-color: var(--tita-line-strong); background: var(--tita-surface-muted); color: var(--tita-ink); }
|
|
158
|
+
.extractTasksRailStep:focus-visible { outline: 2px solid var(--tita-focus-ring); outline-offset: 1px; }
|
|
159
|
+
/* 当前步不是「已选中」,而是「你站在哪一段」。用主色描边 + 浅底,不用左侧色条 ——
|
|
160
|
+
色条会把这一格读成一条「提示卡」,而它不是提示。两个属性都写上:Radix 给的是
|
|
161
|
+
`data-state="active"`,新版 shadcn 的类名等的是 `data-active`。 */
|
|
162
|
+
.extractTasksRailStep[data-state="active"],
|
|
163
|
+
.extractTasksRailStep[data-active] {
|
|
164
|
+
border-color: var(--tita-primary);
|
|
165
|
+
background: var(--tita-primary-soft);
|
|
166
|
+
box-shadow: inset 0 0 0 1px var(--tita-primary);
|
|
167
|
+
color: var(--tita-ink);
|
|
168
|
+
}
|
|
169
|
+
.extractTasksRailName { min-width: 0; color: inherit; font-size: 12.5px; font-weight: 680; line-height: 1.4; letter-spacing: -.01em; }
|
|
170
|
+
.extractTasksRailFacts { display: flex; min-width: 0; flex-wrap: wrap; align-items: center; gap: 6px; }
|
|
171
|
+
/* 待办计数:等宽数字,**比徽标轻** —— 徽标说的是「上次跑成什么样」(结论),
|
|
172
|
+
这一句说的是「现在还剩多少」(读数)。两件事不同重,才读得出哪句是结论。 */
|
|
173
|
+
.extractTasksRailPending { color: var(--tita-ink-faint); font-size: 10.5px; line-height: 1.4; white-space: nowrap; font-variant-numeric: tabular-nums; }
|
|
174
|
+
|
|
175
|
+
/* ---- 两栏 */
|
|
176
|
+
.extractTasksBody { display: grid; grid-template-columns: minmax(0, 1.6fr) minmax(316px, 1fr); align-items: start; gap: 18px; }
|
|
177
|
+
.extractTasksMain { min-width: 0; }
|
|
178
|
+
.extractTasksSide { display: grid; min-width: 0; gap: 14px; }
|
|
179
|
+
|
|
180
|
+
/* ---- 阶段卡
|
|
181
|
+
*
|
|
182
|
+
* 卡里**不再套卡**:输入范围 / 结果摘要 / 抽取报告 / 运行输出 都是这张卡里的**分节**,
|
|
183
|
+
* 用一条发丝线分开,不各长一圈描边。卡片套卡片读起来是四个同级的东西,
|
|
184
|
+
* 而它们其实是同一件事的四段。
|
|
185
|
+
*/
|
|
186
|
+
.extractTasksStage { min-width: 0; border: 1px solid var(--tita-line); border-radius: 10px; background: var(--tita-surface); padding: 15px 17px 17px; }
|
|
187
|
+
.extractTasksStageIntro { display: flex; align-items: flex-start; justify-content: space-between; gap: 14px; }
|
|
188
|
+
.extractTasksStageIntro > div { min-width: 0; }
|
|
189
|
+
.extractTasksStageIntro h2 { margin: 0; color: var(--tita-ink); font-size: 14.5px; font-weight: 700; line-height: 1.4; letter-spacing: -.015em; }
|
|
190
|
+
.extractTasksStageIntro p { margin: 3px 0 0; color: var(--tita-ink-muted); font-size: 11.5px; line-height: 1.55; }
|
|
191
|
+
|
|
192
|
+
.extractTasksFacts { display: grid; grid-template-columns: minmax(0, 1fr) minmax(0, 1fr); gap: 0; border-top: 1px solid var(--tita-line); margin-top: 13px; }
|
|
193
|
+
.extractTasksFacts > section { min-width: 0; padding-top: 13px; }
|
|
194
|
+
.extractTasksFacts > section + section { border-left: 1px solid var(--tita-line); padding-left: 20px; }
|
|
195
|
+
.extractTasksFacts h3 { margin: 0 0 9px; color: var(--tita-ink-muted); font-size: 10.5px; font-weight: 700; letter-spacing: .02em; }
|
|
196
|
+
.extractTasksFacts dl { display: grid; gap: 7px; margin: 0; }
|
|
197
|
+
.extractTasksFacts dl > div { display: grid; grid-template-columns: 68px minmax(0, 1fr); align-items: start; gap: 10px; }
|
|
198
|
+
.extractTasksFacts dt { color: var(--tita-ink-faint); font-size: 10.5px; line-height: 1.55; }
|
|
199
|
+
.extractTasksFacts dd { min-width: 0; margin: 0; color: var(--tita-ink); font-size: 11px; line-height: 1.55; overflow-wrap: anywhere; }
|
|
200
|
+
|
|
201
|
+
/* ---- 抽取报告 */
|
|
202
|
+
.extractTasksReports { border-top: 1px solid var(--tita-line); margin-top: 15px; padding-top: 13px; }
|
|
203
|
+
.extractTasksSubhead { display: flex; align-items: flex-start; justify-content: space-between; gap: 12px; }
|
|
204
|
+
.extractTasksSubhead > div { min-width: 0; }
|
|
205
|
+
.extractTasksSubhead h3 { margin: 0; color: var(--tita-ink); font-size: 11.5px; font-weight: 700; }
|
|
206
|
+
.extractTasksSubhead p { margin: 3px 0 0; color: var(--tita-ink-faint); font-size: 10.5px; line-height: 1.5; }
|
|
207
|
+
.extractTasksCount { flex: 0 0 auto; color: var(--tita-ink-muted); font-size: 11px; font-variant-numeric: tabular-nums; }
|
|
208
|
+
.extractTasksEmpty { margin: 0; padding: 14px 0; color: var(--tita-ink-muted); font-size: 11.5px; }
|
|
209
|
+
/* 这一行是一个 `<button>`:应用内路径不能靠 `<a href>` 开(见 `ExtractionTasksPage`
|
|
210
|
+
里那段注释)。所以要把裸按钮的浏览器默认样式复位掉,外观保持原样。 */
|
|
211
|
+
.extractReportRow { display: flex; width: 100%; min-width: 0; align-items: flex-start; justify-content: space-between; gap: 14px; border: 0; border-bottom: 1px solid var(--tita-line); border-radius: 0; background: none; padding: 11px 0; color: var(--tita-ink); font: inherit; text-align: left; text-decoration: none; cursor: pointer; }
|
|
212
|
+
.extractReportRow:last-child { border-bottom: 0; padding-bottom: 2px; }
|
|
213
|
+
.extractReportRow:hover .extractReportMain strong { color: var(--tita-primary); text-decoration: underline; text-underline-offset: 3px; }
|
|
214
|
+
.extractReportRow:focus-visible { outline: 2px solid var(--tita-focus-ring); outline-offset: 2px; border-radius: 6px; }
|
|
215
|
+
.extractReportMain { display: grid; min-width: 0; gap: 3px; }
|
|
216
|
+
.extractReportMain strong { font-size: 12px; font-weight: 650; line-height: 1.5; overflow-wrap: anywhere; }
|
|
217
|
+
.extractReportMain > span { color: var(--tita-ink-muted); font-size: 11px; line-height: 1.55; overflow-wrap: anywhere; }
|
|
218
|
+
.extractReportMeta { display: inline-flex; flex: 0 0 auto; align-items: center; gap: 6px; color: var(--tita-ink-faint); font-size: 10.5px; font-variant-numeric: tabular-nums; white-space: nowrap; }
|
|
219
|
+
|
|
220
|
+
/* ---- 运行输出(默认收起) */
|
|
221
|
+
.extractTasksOutput { border-top: 1px solid var(--tita-line); margin-top: 15px; padding-top: 4px; }
|
|
222
|
+
.extractTasksOutputToggle { gap: 5px; padding-inline: 2px 6px; color: var(--tita-ink-muted); font-size: 11px; font-weight: 650; }
|
|
223
|
+
.extractTasksOutputToggle:hover { color: var(--tita-ink); }
|
|
224
|
+
/* 第二段是「展开 / 收起」的补充说明:它是提示,不是按钮名,所以更轻。 */
|
|
225
|
+
.extractTasksOutputToggle > span { color: var(--tita-ink-faint); font-size: 10.5px; font-weight: 500; }
|
|
226
|
+
.extractTasksOutputToggle svg { transition: transform 140ms ease-out; }
|
|
227
|
+
.extractTasksOutputToggle[aria-expanded="true"] svg { transform: rotate(180deg); }
|
|
228
|
+
.extractTasksOutputBody { display: grid; gap: 8px; margin-top: 6px; }
|
|
229
|
+
.extractTasksOutputBody > p { margin: 0; color: var(--tita-ink-muted); font-size: 11px; line-height: 1.55; }
|
|
230
|
+
/* 模型原始返回:等宽、可滚、限高。**限高 320px** —— 它是底料,不是结论,
|
|
231
|
+
但也不能矮到看不见上下文。 */
|
|
232
|
+
.extractTasksPre { margin: 0; max-height: 320px; overflow: auto; border-radius: 8px; background: var(--tita-surface-muted); padding: 11px 13px; color: var(--tita-ink); font-family: var(--tita-mono); font-size: 11.5px; line-height: 1.6; white-space: pre-wrap; overflow-wrap: anywhere; tab-size: 2; }
|
|
233
|
+
.extractTasksReportsInline { display: flex; flex-wrap: wrap; gap: 14px; }
|
|
234
|
+
.extractTasksLink { height: auto; padding-inline: 0; color: var(--tita-primary); font-size: 11px; font-weight: 500; text-decoration: underline; text-underline-offset: 2px; }
|
|
235
|
+
.extractTasksLink:hover { background: transparent; color: var(--tita-primary); }
|
|
236
|
+
|
|
237
|
+
/* ---- 右侧两栏:面板 */
|
|
238
|
+
.extractTasksPanel { min-width: 0; overflow: hidden; border: 1px solid var(--tita-line); border-radius: 10px; background: var(--tita-surface); }
|
|
239
|
+
.extractTasksPanelHead { display: flex; align-items: flex-start; justify-content: space-between; gap: 12px; border-bottom: 1px solid var(--tita-line); padding: 13px 15px 11px; }
|
|
240
|
+
.extractTasksPanelHead > div { min-width: 0; }
|
|
241
|
+
.extractTasksPanelHead h2 { margin: 0; color: var(--tita-ink); font-size: 13px; font-weight: 700; letter-spacing: -.01em; }
|
|
242
|
+
.extractTasksPanelHead p { margin: 3px 0 0; color: var(--tita-ink-muted); font-size: 11px; line-height: 1.5; }
|
|
243
|
+
.extractTasksPanelBody { min-width: 0; padding: 0 15px; }
|
|
244
|
+
|
|
245
|
+
/* ---- 处理范围
|
|
246
|
+
*
|
|
247
|
+
* 每一行原来是一枚「选择」按钮 + 名字 + 徽标:N 行就有 N 枚写着同一个词的按钮,
|
|
248
|
+
* 而真正要读的是那一行的名字。现在整行就是按钮,前面一枚方框表示选中
|
|
249
|
+
* (`aria-pressed` 与视觉同时成立,键盘 Tab 也走得通)。
|
|
250
|
+
*/
|
|
251
|
+
.extractTasksScopeTab { margin-top: 12px; }
|
|
252
|
+
.extractTasksScopeNote { margin: 0 0 2px; color: var(--tita-ink-muted); font-size: 11px; line-height: 1.5; }
|
|
253
|
+
.extractTasksChoiceList { display: grid; max-height: 260px; overflow: auto; margin: 0; padding: 0; list-style: none; scrollbar-color: var(--tita-line-strong) transparent; scrollbar-width: thin; }
|
|
254
|
+
.extractTasksChoiceList > li { border-bottom: 1px solid var(--tita-line); }
|
|
255
|
+
.extractTasksChoiceList > li:last-child { border-bottom: 0; }
|
|
256
|
+
.extractTasksPick { display: flex; width: 100%; min-width: 0; align-items: center; gap: 9px; border: 0; border-radius: 7px; background: none; padding: 9px 4px 9px 2px; color: inherit; font: inherit; text-align: left; cursor: pointer; }
|
|
257
|
+
.extractTasksPick:hover { background: var(--tita-surface-muted); }
|
|
258
|
+
.extractTasksPick:focus-visible { outline: 2px solid var(--tita-focus-ring); outline-offset: 1px; }
|
|
259
|
+
.extractTasksPickBox { display: inline-flex; width: 14px; height: 14px; flex: 0 0 auto; align-items: center; justify-content: center; border: 1px solid var(--tita-line-strong); border-radius: 4px; background: var(--tita-surface); color: var(--tita-primary); }
|
|
260
|
+
.extractTasksPick[aria-pressed="true"] .extractTasksPickBox { border-color: var(--tita-primary); background: var(--tita-primary-soft); }
|
|
261
|
+
.extractTasksChoiceName { display: grid; min-width: 0; flex: 1 1 auto; gap: 2px; color: var(--tita-ink); font-size: 11.5px; line-height: 1.5; overflow-wrap: anywhere; }
|
|
262
|
+
.extractTasksChoiceName > span { color: var(--tita-ink-muted); font-size: 10.5px; }
|
|
263
|
+
.extractTasksChoiceName > span.extractTasksGroupReason { color: var(--tita-warning); }
|
|
264
|
+
.extractTasksChoiceName > strong { font-weight: 620; }
|
|
265
|
+
.extractTasksGroupList { max-height: 330px; }
|
|
266
|
+
.extractTasksScopeActions { display: flex; flex-wrap: wrap; align-items: center; gap: 6px; border-top: 1px solid var(--tita-line); margin-top: 4px; padding: 10px 0 11px; }
|
|
267
|
+
|
|
268
|
+
/* ---- 运行记录
|
|
269
|
+
*
|
|
270
|
+
* 一行一条,不设左右两列:这一栏只有 316–420px,右侧再挂一排动作会把摘要压成三行。
|
|
271
|
+
* 所以身份 / 摘要 / 时间 / 动作四行顺着写下来,动作在最下面一行左对齐 ——
|
|
272
|
+
* 视线从「哪一段、跑成什么样」自然落到「还能对它做什么」。
|
|
273
|
+
*/
|
|
274
|
+
.extractTaskRow { display: grid; gap: 5px; border-bottom: 1px solid var(--tita-line); padding: 12px 0; }
|
|
275
|
+
.extractTaskRow:last-of-type { border-bottom: 0; }
|
|
276
|
+
.extractTaskTitle { display: flex; min-width: 0; align-items: center; flex-wrap: wrap; gap: 7px; }
|
|
277
|
+
.extractTaskTitle strong { color: var(--tita-ink); font-size: 12px; font-weight: 680; }
|
|
278
|
+
.extractTaskSummary { margin: 0; color: var(--tita-ink-muted); font-size: 11px; line-height: 1.55; overflow-wrap: anywhere; }
|
|
279
|
+
.extractTaskTime { margin: 0; color: var(--tita-ink-faint); font-size: 10.5px; line-height: 1.5; overflow-wrap: anywhere; font-variant-numeric: tabular-nums; }
|
|
280
|
+
.extractTaskControls { display: flex; flex-wrap: wrap; align-items: center; gap: 5px; margin-top: 2px; }
|
|
281
|
+
.extractTaskStepToggle { gap: 4px; padding-inline: 6px; color: var(--tita-ink-muted); font-size: 10.5px; }
|
|
282
|
+
.extractTaskStepToggle[aria-expanded="true"] svg { transform: rotate(180deg); }
|
|
283
|
+
.extractTaskStepToggle svg { transition: transform 120ms ease-out; }
|
|
284
|
+
.extractTaskSteps { min-width: 0; }
|
|
285
|
+
|
|
286
|
+
/* ---- 窄屏 */
|
|
287
|
+
@media (max-width: 1080px) {
|
|
288
|
+
/* 两栏并排需要约 950px 才站得住(左栏 560 + 右栏 316 + 间隔)。再窄就把右栏落到下面 ——
|
|
289
|
+
硬挤的结果是左栏的结论被压成一行两个字。 */
|
|
290
|
+
.extractTasksBody { grid-template-columns: minmax(0, 1fr); }
|
|
291
|
+
}
|
|
292
|
+
|
|
293
|
+
@media (max-width: 720px) {
|
|
294
|
+
.page-main { padding: 18px 16px 70px; }
|
|
295
|
+
.page-bar { padding-inline: 16px; }
|
|
296
|
+
.extractTasksHead { align-items: flex-start; }
|
|
297
|
+
/* 窄屏把步骤轨排成 2×2:四个节点横排时每个不到 90px,段名会被折成三行。
|
|
298
|
+
箭头在这一档去掉 —— 网格的阅读顺序已经是 1→2→3→4,再画箭头只会插在两行之间空转。 */
|
|
299
|
+
.extractTasksRailList { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 8px; }
|
|
300
|
+
.extractTasksRailArrow { display: none; }
|
|
301
|
+
.extractTasksStageIntro { flex-direction: column; }
|
|
302
|
+
.extractTasksFacts { grid-template-columns: minmax(0, 1fr); }
|
|
303
|
+
.extractTasksFacts > section + section { border-top: 1px solid var(--tita-line); border-left: 0; margin-top: 13px; padding-left: 0; }
|
|
304
|
+
.extractReportRow { flex-direction: column; gap: 4px; }
|
|
305
|
+
.extractReportMeta { white-space: normal; }
|
|
306
|
+
.extractTaskStepToggle { padding-inline: 0 4px; }
|
|
307
|
+
}
|
|
308
|
+
|
|
309
|
+
@media (max-width: 420px) {
|
|
310
|
+
.extractTasksFacts dl > div { grid-template-columns: 62px minmax(0, 1fr); gap: 8px; }
|
|
311
|
+
.extractTasksRailStep { padding: 9px 10px; }
|
|
312
|
+
}
|
|
313
|
+
|
|
314
|
+
@media (prefers-reduced-motion: reduce) {
|
|
315
|
+
.extractTasksRailStep, .extractTaskStepToggle svg, .extractTasksOutputToggle svg { transition: none; }
|
|
316
|
+
}
|
|
317
|
+
|
|
88
318
|
/* ---------------------------------------------------------- attribution event guide
|
|
89
319
|
*
|
|
90
320
|
* 这是说明页,不是另一个业务面板。用一条主流程和几条细边界承载内容,避免把四个
|
|
@@ -105,8 +335,11 @@ body {
|
|
|
105
335
|
.attributionGuideSectionHead { display: grid; gap: 3px; }
|
|
106
336
|
.attributionGuideSectionHead h3 { margin: 0; color: var(--tita-ink); font-size: 16px; font-weight: 730; letter-spacing: -.018em; line-height: 1.35; }
|
|
107
337
|
.attributionGuideSectionHead p:last-child { max-width: 72ch; margin: 0; color: var(--tita-ink-muted); font-size: 12px; line-height: 1.7; }
|
|
108
|
-
.attributionGuidePipeline { display: grid; grid-template-columns: minmax(0, 1fr) auto minmax(0,
|
|
109
|
-
.
|
|
338
|
+
.attributionGuidePipeline { display: grid; grid-template-columns: minmax(0, 1fr) auto minmax(0, 1.25fr) auto minmax(0, 1fr); align-items: center; gap: 9px; border: 1px solid var(--tita-line); border-radius: 14px; background: var(--tita-surface); padding: 18px 16px; }
|
|
339
|
+
.attributionGuideBranches { display: grid; gap: 10px; border: 1px dashed var(--tita-line-strong); border-radius: 12px; background: var(--tita-surface-muted); padding: 10px; }
|
|
340
|
+
/* 1px 发丝线,不是 3px 色条:这一页其余的分隔全是发丝线,一条 3px 的竖条会把它读成
|
|
341
|
+
另一个东西(而且那是模板的记号)。段位身份色仍然在下面那枚小徽标上,没有丢。 */
|
|
342
|
+
.attributionGuideNode { display: grid; min-width: 0; gap: 3px; border-left: 1px solid var(--tita-line-strong); padding: 2px 0 2px 11px; }
|
|
110
343
|
.attributionGuideNode-source { border-left-color: var(--tita-tone-blue); }
|
|
111
344
|
.attributionGuideNode-event { border-left-color: var(--tita-tone-green); }
|
|
112
345
|
.attributionGuideNode-knowledge { border-left-color: var(--tita-tone-violet); }
|
|
@@ -124,7 +357,8 @@ body {
|
|
|
124
357
|
.attributionGuideRelations { display: flex; flex-wrap: wrap; gap: 8px 18px; border-top: 1px solid var(--tita-line); padding-top: 11px; color: var(--tita-ink-muted); font-size: 10.5px; }
|
|
125
358
|
.attributionGuideRelations span { display: inline-flex; align-items: center; gap: 5px; }
|
|
126
359
|
.attributionGuideRelations svg { color: var(--tita-primary); }
|
|
127
|
-
|
|
360
|
+
/* 底色留着(它说的是「这一块是案例」),竖条收成 1px。 */
|
|
361
|
+
.attributionGuideCaseIntro { display: flex; align-items: center; justify-content: space-between; gap: 14px; border-left: 1px solid var(--tita-tone-green); background: var(--tita-tone-green-tint); padding: 10px 13px; }
|
|
128
362
|
.attributionGuideCaseIntro > div { display: grid; gap: 3px; }
|
|
129
363
|
.attributionGuideLabel { color: var(--tita-ink-faint); font-family: var(--tita-mono); font-size: 9.5px; }
|
|
130
364
|
.attributionGuideCaseIntro p { margin: 0; color: var(--tita-ink-muted); font-size: 10.5px; }
|
|
@@ -159,151 +393,251 @@ body {
|
|
|
159
393
|
|
|
160
394
|
/* --------------------------------------------------------------- tab guide
|
|
161
395
|
*
|
|
162
|
-
*
|
|
163
|
-
*
|
|
396
|
+
* 架构说明页(`/knowledge/pages/help/overview`)。
|
|
397
|
+
*
|
|
398
|
+
* 版式:**一条链路 = 画布上的一条工序带**,右边一列是当前环节的说明。
|
|
399
|
+
* 画布的构图纪律写在 `GuideArchitectureCanvas.tsx` 的文件头 —— 这里只管长相。
|
|
400
|
+
*
|
|
401
|
+
* 尺寸上的两条硬规矩,改版时最容易踩:
|
|
402
|
+
* 1. **视口高度不是 CSS 定的**,它由组件按缩放比例写在行内 style 上;进入全屏后由 CSS 接管,
|
|
403
|
+
* 让画布填满视口。
|
|
404
|
+
* 2. **卡片、牌子、带的位置全部由 `arch/model.ts` 算好写在行内 style 上**,
|
|
405
|
+
* 这里不许出现第二套坐标。
|
|
164
406
|
*/
|
|
165
|
-
|
|
166
|
-
.
|
|
167
|
-
.
|
|
168
|
-
|
|
169
|
-
.
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
.
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
.
|
|
177
|
-
.
|
|
178
|
-
|
|
179
|
-
.
|
|
180
|
-
.
|
|
181
|
-
.
|
|
182
|
-
.
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
.
|
|
191
|
-
.
|
|
192
|
-
.
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
.
|
|
197
|
-
.
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
.
|
|
201
|
-
.
|
|
202
|
-
.
|
|
203
|
-
.
|
|
204
|
-
.
|
|
205
|
-
.
|
|
206
|
-
.
|
|
207
|
-
.
|
|
208
|
-
.
|
|
209
|
-
.
|
|
210
|
-
.
|
|
211
|
-
.
|
|
212
|
-
|
|
213
|
-
|
|
407
|
+
|
|
408
|
+
.tabGuide { display: grid; gap: 20px; }
|
|
409
|
+
.tabGuideWorkbench { display: block; }
|
|
410
|
+
/* 左列只有画布,不吸顶:整图最高 1120px,比视口高 —— 吸顶会把下半张图钉在屏幕外。 */
|
|
411
|
+
.tabGuideCanvasColumn { display: grid; min-width: 0; gap: 14px; }
|
|
412
|
+
|
|
413
|
+
/* ---------------------------------------------------------------- 画布 */
|
|
414
|
+
|
|
415
|
+
.tabGuideCanvas { position: relative; display: flex; min-width: 0; min-height: 0; flex-direction: column; overflow: hidden; border: 1px solid var(--tita-line); border-radius: 12px; background: var(--tita-canvas); box-shadow: 0 1px 2px rgb(16 24 40 / .04); container-type: inline-size; }
|
|
416
|
+
|
|
417
|
+
/* 浮层:画布上只剩左上角这一排链路 Tab。它不占画布的设计尺寸。 */
|
|
418
|
+
.tabGuideCanvasOverlay { position: absolute; z-index: 2; top: 10px; left: 10px; display: flex; align-items: flex-start; gap: 12px; pointer-events: none; }
|
|
419
|
+
.tabGuideCanvasOverlay > * { pointer-events: auto; }
|
|
420
|
+
|
|
421
|
+
.tabGuideChainTabs .tita-uiTabsList { display: inline-flex; max-width: 100%; overflow-x: auto; border: 1px solid var(--tita-line); border-radius: 9px; background: color-mix(in srgb, var(--tita-surface) 93%, transparent); padding: 2px; box-shadow: 0 1px 2px rgb(16 24 40 / .05); backdrop-filter: blur(6px); scrollbar-width: none; }
|
|
422
|
+
.tabGuideChainTabs .tita-uiTabsList::-webkit-scrollbar { display: none; }
|
|
423
|
+
.tabGuideChainTabs .tita-uiTabsTrigger { min-height: 30px; border: 0; border-radius: 7px; padding-inline: 13px; font-size: 12px; }
|
|
424
|
+
.tabGuideChainTabs .tita-uiTabsTrigger[data-state='active'] { border-bottom-color: transparent; background: var(--tita-surface); box-shadow: 0 1px 2px rgb(15 23 42 / .12), inset 0 0 0 1px var(--tita-primary-shadow); }
|
|
425
|
+
|
|
426
|
+
/* **固定边框。** 高度由这里给,不跟缩放走 —— 缩放只动框里的内容。
|
|
427
|
+
第一版把高度写成「板高 × 比例」,于是捏合时连边框一起长大/缩小,读起来像整页在动。
|
|
428
|
+
|
|
429
|
+
高度取「视口高 - 顶栏 - 内边距 - 一行读法」,上下限兜住:太矮读不了图,太高会把
|
|
430
|
+
一行读法挤出屏幕。滚动交给容器自己(滚到头会继续滚页面),**不要 `overscroll-behavior: contain`**
|
|
431
|
+
—— 那会把页面滚动锁在画布里。 */
|
|
432
|
+
.tabGuideCanvasViewport { position: relative; width: 100%; height: clamp(520px, calc(100vh - 124px), 1120px); overflow: auto; background: var(--tita-canvas); cursor: default; scrollbar-color: var(--tita-line-strong) transparent; touch-action: pan-x pan-y; }
|
|
433
|
+
.tabGuideCanvasViewport[data-pannable='true'] { cursor: grab; }
|
|
434
|
+
.tabGuideCanvasViewportPanning { cursor: grabbing !important; user-select: none; }
|
|
435
|
+
|
|
436
|
+
/* 板:设计尺寸 1172 × 902。缩放由 `transform` 承担 —— 比例是组件按裁剪区算的,
|
|
437
|
+
不写进 CSS,避免两处各写一份。 */
|
|
438
|
+
.tabGuideCanvasFrame { position: absolute; overflow: hidden; }
|
|
439
|
+
.tabGuideCanvasBoard { position: relative; transform-origin: top left; }
|
|
440
|
+
|
|
441
|
+
/* 节点详情是画布内的 Inspector:右侧固定,内容独立滚动,不改变图的设计宽度。 */
|
|
442
|
+
.tabGuideInspector { position: absolute; z-index: 3; top: 58px; right: 12px; display: flex; width: min(380px, calc(100% - 24px)); max-height: calc(100% - 70px); flex-direction: column; overflow: hidden; border: 1px solid var(--tita-line); border-radius: 10px; background: color-mix(in srgb, var(--tita-surface) 97%, transparent); box-shadow: 0 12px 28px rgb(16 24 40 / .13); backdrop-filter: blur(5px); }
|
|
443
|
+
.tabGuideInspectorHeader { display: flex; flex: 0 0 auto; align-items: center; justify-content: space-between; gap: 10px; border-bottom: 1px solid var(--tita-line); padding: 9px 10px 9px 13px; color: var(--tita-ink); }
|
|
444
|
+
.tabGuideInspectorHeaderCopy { display: grid; gap: 2px; min-width: 0; }
|
|
445
|
+
.tabGuideInspectorHeaderCopy span { color: var(--tita-ink-faint); font-family: var(--tita-mono); font-size: 9px; font-weight: 700; letter-spacing: .06em; text-transform: uppercase; }
|
|
446
|
+
.tabGuideInspectorHeaderCopy strong { color: var(--tita-ink); font-size: 12px; font-weight: 750; }
|
|
447
|
+
.tabGuideInspectorBody { min-height: 0; overflow-y: auto; padding: 0 14px 18px; scrollbar-color: var(--tita-line-strong) transparent; }
|
|
448
|
+
.tabGuideInspectorBody .tabGuideDetailColumn { gap: 0; }
|
|
449
|
+
.tabGuideInspectorBody .tabGuideDetailColumn .tabGuideDetailGrid,
|
|
450
|
+
.tabGuideInspectorBody .tabGuideDetailColumn .tabGuideSections { grid-template-columns: minmax(0, 1fr); }
|
|
451
|
+
.tabGuideInspectorBody .tabGuideDetailColumn .tabGuideDefinitions > div { grid-template-columns: minmax(0, 1fr); gap: 3px; }
|
|
452
|
+
.tabGuideInspectorBody .tabGuideDetail { border: 0; border-radius: 0; background: transparent; padding: 15px 0 18px; box-shadow: none; }
|
|
453
|
+
.tabGuideInspectorBody .tabGuideConceptRelation { border-right: 0; border-left: 0; border-radius: 0; margin-inline: -14px; padding-inline: 14px; }
|
|
454
|
+
|
|
455
|
+
/* ---------------------------------------------------------------- 带与连线 */
|
|
456
|
+
|
|
457
|
+
.tabGuideBoardEdges { position: absolute; top: 0; left: 0; }
|
|
458
|
+
/* 带只是**底纹**,不是卡片:它的作用是让人一眼看出「这几张卡是一条链路上的」。
|
|
459
|
+
所以它比画布底色只深一档,且不再铺满整屏(裁剪区有多高,它就有多高)。 */
|
|
460
|
+
.tabGuideBoardBand { fill: color-mix(in srgb, var(--tita-surface-muted) 62%, var(--tita-surface)); stroke: var(--tita-line); stroke-width: 1; }
|
|
461
|
+
.tabGuideBoardLaneBadge { fill: var(--tita-surface); stroke: var(--tita-line-strong); stroke-width: 1; }
|
|
462
|
+
.tabGuideBoardLaneBadge-interaction { fill: var(--tita-tone-blue-tint); stroke: var(--tita-tone-blue-line); }
|
|
463
|
+
.tabGuideBoardLaneBadge-knowledge { fill: var(--tita-tone-violet-tint); stroke: var(--tita-tone-violet-line); }
|
|
464
|
+
.tabGuideBoardLaneBadge-evolution { fill: var(--tita-tone-amber-tint); stroke: var(--tita-tone-amber-line); }
|
|
465
|
+
.tabGuideBoardLaneLabel { fill: var(--tita-ink); font-family: var(--tita-font); font-size: 11.5px; font-weight: 720; }
|
|
466
|
+
.tabGuideBoardLaneNote { fill: var(--tita-ink-muted); font-family: var(--tita-mono); font-size: 9.5px; }
|
|
467
|
+
.tabGuideBoardEdge { fill: none; stroke-linecap: round; stroke-linejoin: round; transition: opacity 180ms ease; }
|
|
468
|
+
/* 边标签压在通道上:白底靠 `paint-order: stroke` 描一圈画布色,而不是加一块矩形
|
|
469
|
+
—— 矩形会盖住底下那条线本身。 */
|
|
470
|
+
.tabGuideBoardEdgeLabel { fill: var(--tita-primary); font-family: var(--tita-font); font-size: 10px; font-weight: 700; text-anchor: middle; paint-order: stroke; stroke: var(--tita-canvas); stroke-width: 5px; stroke-linejoin: round; transition: opacity 180ms ease; }
|
|
471
|
+
|
|
472
|
+
/* ---------------------------------------------------------------- 环节卡片 */
|
|
473
|
+
|
|
474
|
+
.tabGuideCard { position: absolute; display: flex; box-sizing: border-box; flex-direction: column; gap: 5px; overflow: hidden; border: 1px solid var(--tita-line); border-radius: 8px; background: var(--tita-surface); padding: 10px 11px 9px; color: var(--tita-ink); font-family: var(--tita-font); text-align: left; cursor: pointer; box-shadow: 0 1px 2px rgb(16 24 40 / .04); transition: background 180ms ease, border-color 140ms ease, box-shadow 140ms ease; }
|
|
475
|
+
.tabGuideCard:hover { border-color: var(--tita-primary-line); box-shadow: 0 2px 8px rgb(16 24 40 / .09); }
|
|
476
|
+
.tabGuideCard:focus-visible { outline: 2px solid var(--tita-primary); outline-offset: 1px; }
|
|
477
|
+
.tabGuideCardSelected { border-color: var(--tita-primary); box-shadow: 0 0 0 3px var(--tita-primary-soft), 0 2px 8px rgb(16 24 40 / .09); }
|
|
478
|
+
/* 次级环节**不靠透明度**:0.14 的不透明文字是读不了的灰,而它们就在旁边,
|
|
479
|
+
仍然是这张图的一部分。改成「无底 + 无描边 + 灰字」,白底 4.97:1、灰带 4.93:1。 */
|
|
480
|
+
/* 次级卡片:丢底、丢描边,**整体再压一档透明度**。
|
|
481
|
+
只把字换成灰色是不够的 —— 边上那些线已经淡到 0.1,字还站在同一个深度上,
|
|
482
|
+
看上去像「没亮的那些反而更清楚」。悬停恢复,因为点它就是要切过去。 */
|
|
483
|
+
.tabGuideCardDim { border-color: transparent; background: transparent; box-shadow: none; opacity: .42; transition: opacity 180ms ease; }
|
|
484
|
+
.tabGuideCardDim:hover, .tabGuideCardDim:focus-visible { opacity: 1; }
|
|
485
|
+
.tabGuideCardDim .tabGuideCardTitle,
|
|
486
|
+
.tabGuideCardDim .tabGuideCardSub,
|
|
487
|
+
.tabGuideCardDim .tabGuideCardStep { color: var(--tita-ink-faint); }
|
|
488
|
+
.tabGuideCardDim .tabGuideCardStep i { color: var(--tita-line-strong); }
|
|
489
|
+
.tabGuideCardDim .tabGuideCardDot { background: var(--tita-line-strong) !important; }
|
|
490
|
+
.tabGuideCardDim:hover { border-color: var(--tita-primary-line); background: var(--tita-surface); }
|
|
491
|
+
.tabGuideCardDim:hover .tabGuideCardTitle { color: var(--tita-ink); }
|
|
492
|
+
.tabGuideCardDim:hover .tabGuideCardSub,
|
|
493
|
+
.tabGuideCardDim:hover .tabGuideCardStep { color: var(--tita-ink-muted); }
|
|
494
|
+
|
|
495
|
+
.tabGuideCardHead { display: flex; min-width: 0; align-items: center; gap: 6px; }
|
|
496
|
+
.tabGuideCardDot { width: 6px; height: 6px; flex: 0 0 auto; border-radius: 999px; }
|
|
497
|
+
.tabGuideCardTitle { overflow: hidden; min-width: 0; font-size: 12.5px; font-weight: 650; line-height: 1.25; text-overflow: ellipsis; white-space: nowrap; }
|
|
498
|
+
/* 状态词带色,且**四档各有自己的色**:这张图是契约,做没做出来是第一信息。 */
|
|
499
|
+
|
|
500
|
+
.tabGuideCardSub { display: -webkit-box; overflow: hidden; color: var(--tita-ink-muted); font-size: 11px; line-height: 1.4; -webkit-box-orient: vertical; }
|
|
501
|
+
/* 步骤表:**编号 + 一条**。编号说明顺序,而顺序正是链路的意思。 */
|
|
502
|
+
.tabGuideCardSteps { display: flex; min-height: 0; flex-direction: column; overflow: hidden; }
|
|
503
|
+
.tabGuideCardStep { display: flex; align-items: baseline; gap: 6px; overflow: hidden; color: var(--tita-ink-muted); font-size: 10.5px; line-height: 13.5px; white-space: nowrap; }
|
|
504
|
+
.tabGuideCardStep > i { flex: 0 0 auto; width: 9px; color: var(--tita-primary); font-family: var(--tita-mono); font-size: 9px; font-style: normal; font-weight: 700; text-align: right; }
|
|
505
|
+
.tabGuideCardStep[data-state='partial'] > i { color: var(--tita-tone-amber); }
|
|
506
|
+
.tabGuideCardStep[data-state='todo'],
|
|
507
|
+
.tabGuideCardStep[data-state='todo'] > i { color: var(--tita-ink-faint); }
|
|
508
|
+
.tabGuideCardStepRest { color: var(--tita-ink-faint); font-style: italic; }
|
|
509
|
+
|
|
510
|
+
/* ---------------------------------------------------------------- 右列 */
|
|
511
|
+
|
|
512
|
+
.tabGuideDetailColumn { display: grid; min-width: 0; gap: 14px; }
|
|
513
|
+
/* 右列只有 340–400px:详情里那两组两栏网格在这里会被挤成两条窄柱,一律改成单栏。
|
|
514
|
+
宽度再窄(≤1180px)时两栏工作台已经叠起来,那时再放开成两栏。 */
|
|
515
|
+
.tabGuideDetailColumn .tabGuideDetailGrid, .tabGuideDetailColumn .tabGuideSections { grid-template-columns: minmax(0, 1fr); }
|
|
516
|
+
/* 对象关系图在 400px 的右列里:三个节点 + 两支箭头要挤进一行,
|
|
517
|
+
否则「Document → Knowledge → WikiCard」会折成两行,链路就读断了。 */
|
|
518
|
+
.tabGuideDetailColumn .tabGuideDefinitions > div { grid-template-columns: minmax(0, 1fr); gap: 3px; }
|
|
519
|
+
|
|
520
|
+
/* 环节轨:这条链路有哪几环,点一下就走过去。它回答画布回答不了的那个问题 ——
|
|
521
|
+
画布上一条链路是空间关系,「我现在读的是第几环」是顺序关系。 */
|
|
522
|
+
.tabGuideChainRail { display: flex; flex-wrap: wrap; align-items: center; gap: 4px 8px; border: 1px solid var(--tita-line); border-radius: 10px; background: var(--tita-surface); padding: 9px 12px; }
|
|
523
|
+
.tabGuideChainRailHead { color: var(--tita-ink-faint); font-size: 10px; font-weight: 700; letter-spacing: .06em; }
|
|
524
|
+
.tabGuideChainRail ol { display: flex; flex-wrap: wrap; align-items: center; gap: 3px; margin: 0; padding: 0; list-style: none; }
|
|
525
|
+
.tabGuideChainRail li { display: flex; align-items: center; }
|
|
526
|
+
.tabGuideChainRail li + li::before { content: '›'; margin-right: 3px; color: var(--tita-ink-faint); font-size: 11px; }
|
|
527
|
+
.tabGuideChainRailStep { display: inline-flex; align-items: center; gap: 5px; border: 1px solid transparent; border-radius: 7px; background: transparent; padding: 3px 7px; color: var(--tita-ink-muted); font: inherit; font-size: 11px; cursor: pointer; transition: background 140ms ease, color 140ms ease, border-color 140ms ease; }
|
|
528
|
+
.tabGuideChainRailStep:hover { background: var(--tita-surface-muted); color: var(--tita-ink); }
|
|
529
|
+
.tabGuideChainRailStep:focus-visible { outline: 2px solid var(--tita-focus-ring); outline-offset: 1px; }
|
|
530
|
+
.tabGuideChainRailStep[aria-pressed='true'] { border-color: var(--tita-primary-line); background: var(--tita-primary-soft); color: var(--tita-primary); font-weight: 650; }
|
|
531
|
+
.tabGuideChainRailIndex { color: var(--tita-ink-faint); font-family: var(--tita-mono); font-size: 9.5px; font-variant-numeric: tabular-nums; }
|
|
532
|
+
.tabGuideChainRailStep[aria-pressed='true'] .tabGuideChainRailIndex { color: var(--tita-primary); }
|
|
533
|
+
|
|
534
|
+
/* ---------------------------------------------------------------- 详情 */
|
|
535
|
+
|
|
536
|
+
/* 对象关系图。**它只出现在 380px 的 Inspector 里**,所以版面按窄栏定:
|
|
537
|
+
上面一段话、下面两行节点。三个节点挤一行是硬要求 —— 折成两行就把链路读断了。 */
|
|
538
|
+
.tabGuideConceptRelation { display: grid; grid-template-columns: minmax(0, 1fr); gap: 12px; border: 1px solid var(--tita-primary-line); border-radius: 12px; background: var(--tita-primary-soft); padding: 14px 15px; }
|
|
214
539
|
.tabGuideConceptRelationIntro h3 { margin: 0; color: var(--tita-ink); font-size: 14px; font-weight: 760; line-height: 1.35; }
|
|
215
540
|
.tabGuideConceptRelationIntro p:last-child { margin: 7px 0 0; color: var(--tita-ink-muted); font-size: 11px; line-height: 1.65; }
|
|
216
541
|
.tabGuideRelationFlow { min-width: 0; }
|
|
217
|
-
.tabGuideRelationRow { display: flex; align-items: center; justify-content:
|
|
218
|
-
.tabGuideRelationNode { display: inline-flex; height: auto; min-width:
|
|
219
|
-
.tabGuideRelationNode span { color: currentColor; font-family: var(--tita-mono); font-size:
|
|
542
|
+
.tabGuideRelationRow { display: flex; flex-wrap: nowrap; align-items: center; justify-content: flex-start; gap: 6px; }
|
|
543
|
+
.tabGuideRelationNode { display: inline-flex; height: auto; min-width: 0; flex: 1 1 0; flex-direction: column; align-items: flex-start; gap: 1px; border-color: var(--tita-primary-line); padding: 6px 8px; }
|
|
544
|
+
.tabGuideRelationNode span { color: currentColor; font-family: var(--tita-mono); font-size: 9.5px; font-weight: 760; }
|
|
220
545
|
.tabGuideRelationNode small { color: var(--tita-ink-muted); font-size: 9px; font-weight: 500; line-height: 1.3; }
|
|
221
546
|
.tabGuideRelationNode[aria-pressed="true"] small { color: inherit; opacity: .78; }
|
|
222
|
-
.tabGuideRelationArrow { flex: 0 0 auto; color: var(--tita-primary); }
|
|
223
|
-
.tabGuideRelationBranch { display: flex; align-items: center; justify-content:
|
|
224
|
-
.
|
|
225
|
-
|
|
226
|
-
|
|
547
|
+
.tabGuideRelationArrow { width: 12px; flex: 0 0 auto; color: var(--tita-primary); }
|
|
548
|
+
.tabGuideRelationBranch { display: flex; align-items: center; justify-content: flex-start; gap: 6px; margin: 5px 0; padding-left: 40px; color: var(--tita-primary); font-size: 9.5px; font-weight: 700; }
|
|
549
|
+
.tabGuideRelationFootnote { margin: 9px 0 0; color: var(--tita-ink-faint); font-size: 10px; line-height: 1.5; text-align: left; }
|
|
550
|
+
|
|
551
|
+
/* 说明卡:一张卡、几条发丝线,不再是一摞小方块。 */
|
|
552
|
+
.tabGuideDetail { scroll-margin-top: 74px; border: 1px solid var(--tita-line); border-radius: 12px; background: var(--tita-surface); padding: 18px 20px 20px; box-shadow: 0 1px 2px rgb(16 24 40 / .04); }
|
|
553
|
+
.tabGuideDetailHeader { display: grid; grid-template-columns: auto minmax(0, 1fr) auto; align-items: start; gap: 12px; }
|
|
554
|
+
.tabGuideDetailIcon { display: inline-flex; width: 36px; height: 36px; align-items: center; justify-content: center; border: 1px solid var(--tita-primary-line); border-radius: 10px; background: var(--tita-primary-soft); color: var(--tita-primary); }
|
|
555
|
+
.tabGuideDetailIcon-knowledge { color: var(--tita-tone-violet); background: var(--tita-tone-violet-tint); border-color: var(--tita-tone-violet-line); }
|
|
556
|
+
.tabGuideDetailIcon-attribution { color: var(--tita-tone-green); background: var(--tita-tone-green-tint); border-color: var(--tita-tone-green-line); }
|
|
557
|
+
.tabGuideDetailIcon-memory { color: var(--tita-tone-amber); background: var(--tita-tone-amber-tint); border-color: var(--tita-tone-amber-line); }
|
|
558
|
+
.tabGuideDetailIcon-eval { color: var(--tita-tone-blue); background: var(--tita-tone-blue-tint); border-color: var(--tita-tone-blue-line); }
|
|
559
|
+
.tabGuideDetailHeader h2 { margin: 0; color: var(--tita-ink); font-size: 18px; font-weight: 740; letter-spacing: -.025em; line-height: 1.25; }
|
|
560
|
+
.tabGuideDetailSubtitle { margin: 3px 0 0; color: var(--tita-ink-muted); font-size: 11.5px; line-height: 1.5; }
|
|
561
|
+
/* 链路归属:一枚身份色圆点 + 链路名。颜色由行内 style 给(链路身份色在 model.ts 里)。 */
|
|
562
|
+
.tabGuideDetailLane { display: inline-flex; align-items: center; gap: 5px; margin-top: 6px; color: var(--tita-ink-faint); font-size: 10px; }
|
|
563
|
+
.tabGuideDetailLane > i { width: 6px; height: 6px; border-radius: 999px; }
|
|
564
|
+
.tabGuideDetailLaneConcept { color: var(--tita-ink-faint); }
|
|
227
565
|
.tabGuideDefinitionLabel { margin: 0; color: var(--tita-primary); font-family: var(--tita-mono); font-size: 10px; font-weight: 760; letter-spacing: .06em; }
|
|
228
|
-
.
|
|
229
|
-
.
|
|
230
|
-
|
|
566
|
+
.tabGuideSummary { margin: 0; color: var(--tita-ink-muted); font-size: 12px; line-height: 1.75; }
|
|
567
|
+
.tabGuideDefinitionBlock { display: grid; gap: 7px; border-bottom: 1px solid var(--tita-line); padding: 15px 0 15px; }
|
|
568
|
+
/* 输入 → 输出:并排两格,中间一支箭头。竖着堆会把这段拉成两行半高,
|
|
569
|
+
而它只是「凭什么能工作」的一句话。 */
|
|
570
|
+
.tabGuideFacts { display: grid; grid-template-columns: minmax(0, 1fr) auto minmax(0, 1fr); align-items: center; gap: 10px; border-bottom: 1px solid var(--tita-line); padding: 13px 0; }
|
|
571
|
+
.tabGuideDetailColumn .tabGuideFacts { grid-template-columns: minmax(0, 1fr) auto minmax(0, 1fr); }
|
|
572
|
+
.tabGuideFacts > div { display: grid; min-width: 0; gap: 3px; }
|
|
573
|
+
.tabGuideFacts > svg { flex: 0 0 auto; color: var(--tita-ink-faint); }
|
|
574
|
+
.tabGuideDetailColumn .tabGuideFacts > svg { transform: none; }
|
|
575
|
+
.tabGuideFacts span { color: var(--tita-ink-faint); font-size: 9.5px; font-weight: 700; letter-spacing: .06em; }
|
|
576
|
+
.tabGuideFacts strong { color: var(--tita-ink); font-family: var(--tita-mono); font-size: 10.5px; font-weight: 650; line-height: 1.5; }
|
|
577
|
+
.tabGuideDetailGrid { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 0 28px; }
|
|
578
|
+
.tabGuideLogicSection { min-width: 0; border-bottom: 1px solid var(--tita-line); padding: 15px 0 14px; }
|
|
579
|
+
.tabGuideLogicSection h3 { margin: 0 0 10px; color: var(--tita-ink); font-size: 12.5px; font-weight: 720; }
|
|
231
580
|
.tabGuideStatusNote { margin: 0; color: var(--tita-ink-muted); font-size: 11.5px; line-height: 1.7; }
|
|
232
|
-
|
|
233
|
-
.
|
|
581
|
+
/* 步骤是一条时间线:图标列下面拉一条发丝线,把「先后」画出来。 */
|
|
582
|
+
.tabGuideStepList { display: grid; gap: 11px; margin: 0; padding: 0; list-style: none; }
|
|
583
|
+
.tabGuideStep { position: relative; display: grid; grid-template-columns: 16px minmax(0, 1fr); gap: 8px; align-items: start; color: var(--tita-tone-green); }
|
|
584
|
+
.tabGuideStep:not(:last-child)::after { content: ''; position: absolute; top: 18px; bottom: -11px; left: 7px; width: 1px; background: var(--tita-line); }
|
|
234
585
|
.tabGuideStep-partial { color: var(--tita-tone-amber); }
|
|
235
586
|
.tabGuideStep-todo { color: var(--tita-ink-faint); }
|
|
236
587
|
.tabGuideStep > span { display: grid; gap: 2px; }
|
|
237
588
|
.tabGuideStep strong { color: var(--tita-ink); font-size: 11px; font-weight: 700; line-height: 1.45; }
|
|
238
589
|
.tabGuideStep small { color: var(--tita-ink-muted); font-size: 10.5px; line-height: 1.55; }
|
|
239
|
-
.tabGuideBand { fill: var(--tita-surface-muted); stroke: var(--tita-line); stroke-width: 1; }
|
|
240
|
-
.tabGuideLaneLabel { fill: var(--tita-ink-faint); font-family: var(--tita-font); font-size: 11px; font-weight: 700; letter-spacing: .02em; }
|
|
241
|
-
.tabGuideConnector { fill: none; stroke: var(--tita-line-strong); stroke-width: 1.4; }
|
|
242
|
-
.tabGuideConnectorCross { stroke: var(--tita-primary); stroke-width: 1.6; }
|
|
243
|
-
.tabGuideConnectorFeedback { stroke: var(--tita-ink-faint); stroke-dasharray: 5 5; stroke-width: 1.4; }
|
|
244
|
-
.tabGuideConnectorLabel { fill: var(--tita-ink-faint); font-family: var(--tita-font); font-size: 10px; text-anchor: middle; }
|
|
245
|
-
.tabGuideNode { cursor: pointer; outline: none; }
|
|
246
|
-
.tabGuideNodeRect { fill: var(--tita-surface); stroke: var(--tita-line-strong); stroke-width: 1.2; transition: fill .16s ease, stroke .16s ease, stroke-width .16s ease, filter .16s ease; }
|
|
247
|
-
.tabGuideNode:hover .tabGuideNodeRect { fill: var(--tita-surface-muted); stroke: var(--tita-primary-line); }
|
|
248
|
-
.tabGuideNode:focus-visible .tabGuideNodeRect { stroke: var(--tita-primary); stroke-width: 2; }
|
|
249
|
-
.tabGuideNodeSelected .tabGuideNodeRect { fill: var(--tita-primary-soft); stroke: var(--tita-primary); stroke-width: 2; filter: drop-shadow(0 3px 7px rgb(15 23 42 / .09)); }
|
|
250
|
-
.tabGuideNodeTitle { fill: var(--tita-ink); font-family: var(--tita-font); font-size: 16px; font-weight: 760; }
|
|
251
|
-
.tabGuideNodeSubtitle { fill: var(--tita-ink-muted); font-family: var(--tita-font); font-size: 11px; }
|
|
252
|
-
.tabGuideNodeAction { fill: var(--tita-primary); font-family: var(--tita-font); font-size: 10px; font-weight: 700; opacity: .78; }
|
|
253
|
-
.tabGuideNodeSelected .tabGuideNodeAction { opacity: 1; }
|
|
254
|
-
.tabGuideNode-intent .tabGuideNodeRect { stroke: var(--tita-tone-blue-line); }
|
|
255
|
-
.tabGuideNode-knowledge .tabGuideNodeRect { stroke: var(--tita-tone-violet-line); }
|
|
256
|
-
.tabGuideNode-attribution .tabGuideNodeRect { stroke: var(--tita-tone-green-line); }
|
|
257
|
-
.tabGuideNode-memory .tabGuideNodeRect { stroke: var(--tita-tone-amber-line); }
|
|
258
|
-
.tabGuideNode-eval .tabGuideNodeRect { stroke: var(--tita-tone-blue-line); }
|
|
259
|
-
.tabGuideNodeSelected .tabGuideNodeRect { stroke: var(--tita-primary); }
|
|
260
|
-
.tabGuideStaticNode { pointer-events: none; }
|
|
261
|
-
.tabGuideStaticNodeRect { fill: var(--tita-surface); stroke: var(--tita-line-strong); stroke-width: 1.1; }
|
|
262
|
-
.tabGuideStaticNode-document .tabGuideStaticNodeRect { stroke: var(--tita-tone-blue-line); }
|
|
263
|
-
.tabGuideStaticNode-card .tabGuideStaticNodeRect { stroke: var(--tita-tone-green-line); }
|
|
264
|
-
.tabGuideStaticNode-event .tabGuideStaticNodeRect { stroke: var(--tita-tone-amber-line); }
|
|
265
|
-
.tabGuideStaticNodeTitle { fill: var(--tita-ink); font-family: var(--tita-font); font-size: 15px; font-weight: 720; }
|
|
266
|
-
.tabGuideStaticNodeSubtitle { fill: var(--tita-ink-muted); font-family: var(--tita-font); font-size: 10.5px; }
|
|
267
|
-
.tabGuideMapHint { display: flex; align-items: center; gap: 7px; margin: -9px 0 0; color: var(--tita-ink-faint); font-size: 10.5px; }
|
|
268
|
-
.tabGuideHintDot { display: inline-block; width: 7px; height: 7px; border: 2px solid var(--tita-primary); border-radius: 999px; }
|
|
269
|
-
.tabGuideDetail { scroll-margin-top: 70px; border-top: 2px solid var(--tita-primary); background: var(--tita-surface); padding: 20px 22px 22px; }
|
|
270
|
-
.tabGuideDetailHeader { display: grid; grid-template-columns: auto minmax(0, 1fr) auto; align-items: start; gap: 13px; }
|
|
271
|
-
.tabGuideDetailIcon { display: inline-flex; width: 40px; height: 40px; align-items: center; justify-content: center; border: 1px solid var(--tita-primary-line); border-radius: 11px; background: var(--tita-primary-soft); color: var(--tita-primary); }
|
|
272
|
-
.tabGuideDetailIcon-knowledge { color: var(--tita-tone-violet); background: var(--tita-tone-violet-tint); border-color: var(--tita-tone-violet-line); }
|
|
273
|
-
.tabGuideDetailIcon-attribution { color: var(--tita-tone-green); background: var(--tita-tone-green-tint); border-color: var(--tita-tone-green-line); }
|
|
274
|
-
.tabGuideDetailIcon-memory { color: var(--tita-tone-amber); background: var(--tita-tone-amber-tint); border-color: var(--tita-tone-amber-line); }
|
|
275
|
-
.tabGuideDetailIcon-eval { color: var(--tita-tone-blue); background: var(--tita-tone-blue-tint); border-color: var(--tita-tone-blue-line); }
|
|
276
|
-
.tabGuideDetailHeader .tabGuideEyebrow { margin-bottom: 2px; }
|
|
277
|
-
.tabGuideDetailHeader h2 { margin: 0; color: var(--tita-ink); font-size: 20px; font-weight: 750; letter-spacing: -.025em; line-height: 1.25; }
|
|
278
|
-
.tabGuideDetailSubtitle { margin: 2px 0 0; color: var(--tita-ink-muted); font-size: 11.5px; }
|
|
279
|
-
.tabGuideDetailState { display: inline-flex; align-items: center; gap: 5px; color: var(--tita-tone-green); font-size: 10.5px; white-space: nowrap; }
|
|
280
|
-
.tabGuideSummary { max-width: 72ch; margin: 16px 0 14px; color: var(--tita-ink-muted); font-size: 12px; line-height: 1.75; }
|
|
281
|
-
.tabGuideFacts { display: flex; align-items: center; gap: 13px; border-top: 1px solid var(--tita-line); border-bottom: 1px solid var(--tita-line); padding: 13px 0; }
|
|
282
|
-
.tabGuideFacts > div { display: grid; min-width: 0; gap: 3px; }
|
|
283
|
-
.tabGuideFacts > div:first-child { flex: 1 1 0; }
|
|
284
|
-
.tabGuideFacts > div:last-child { flex: 1.2 1 0; }
|
|
285
|
-
.tabGuideFacts > svg { flex: 0 0 auto; color: var(--tita-primary); }
|
|
286
|
-
.tabGuideFacts span { color: var(--tita-ink-faint); font-size: 10px; }
|
|
287
|
-
.tabGuideFacts strong { color: var(--tita-ink); font-family: var(--tita-mono); font-size: 10.5px; font-weight: 650; line-height: 1.5; }
|
|
288
590
|
.tabGuideSections { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 0 28px; }
|
|
289
|
-
.tabGuideSection { border-bottom: 1px solid var(--tita-line); padding: 15px 0
|
|
591
|
+
.tabGuideSection { border-bottom: 1px solid var(--tita-line); padding: 15px 0 14px; }
|
|
290
592
|
.tabGuideSectionWide { grid-column: 1 / -1; }
|
|
291
|
-
.
|
|
292
|
-
.
|
|
593
|
+
.tabGuideSections > .tabGuideSection:last-child { border-bottom: 0; padding-bottom: 0; }
|
|
594
|
+
.tabGuideSection h3 { margin: 0 0 8px; color: var(--tita-ink); font-size: 12.5px; font-weight: 720; }
|
|
595
|
+
.tabGuideDefinitions { display: grid; margin: 0; }
|
|
293
596
|
.tabGuideDefinitions > div { display: grid; grid-template-columns: 112px minmax(0, 1fr); gap: 13px; align-items: baseline; border-bottom: 1px solid var(--tita-line); padding: 9px 0; }
|
|
597
|
+
.tabGuideDefinitions > div:last-child { border-bottom: 0; padding-bottom: 0; }
|
|
294
598
|
.tabGuideDefinitions dt { color: var(--tita-primary); font-family: var(--tita-mono); font-size: 10.5px; font-weight: 700; }
|
|
295
599
|
.tabGuideDefinitions dd { margin: 0; color: var(--tita-ink-muted); font-size: 11.5px; line-height: 1.65; }
|
|
600
|
+
/* 长提示词先折起来:380px 的栏里整段铺开会占掉好几屏,而它是参考材料不是正文。 */
|
|
601
|
+
.tabGuidePromptDetails { border: 1px solid var(--tita-line); border-radius: 8px; background: var(--tita-surface-muted); }
|
|
602
|
+
.tabGuidePromptDetails > summary { cursor: pointer; padding: 9px 13px; color: var(--tita-primary); font-size: 11px; font-weight: 650; list-style: none; }
|
|
603
|
+
.tabGuidePromptDetails > summary::-webkit-details-marker { display: none; }
|
|
604
|
+
.tabGuidePromptDetails > summary::before { content: '▸'; display: inline-block; width: 14px; color: var(--tita-ink-faint); }
|
|
605
|
+
.tabGuidePromptDetails[open] > summary { border-bottom: 1px solid var(--tita-line); }
|
|
606
|
+
.tabGuidePromptDetails[open] > summary::before { content: '▾'; }
|
|
607
|
+
.tabGuidePromptDetails > summary:hover { color: var(--tita-primary-hover); }
|
|
608
|
+
.tabGuidePromptDetails > summary:focus-visible { outline: 2px solid var(--tita-focus-ring); outline-offset: -2px; }
|
|
609
|
+
.tabGuidePromptDetails .tabGuidePrompt { border: 0; border-radius: 0; background: transparent; }
|
|
610
|
+
|
|
296
611
|
.tabGuidePrompt { overflow-x: auto; margin: 0; border: 1px solid var(--tita-line); border-radius: 8px; background: var(--tita-surface-muted); padding: 13px 14px; color: var(--tita-ink); font-family: var(--tita-mono); font-size: 10.5px; line-height: 1.7; white-space: pre-wrap; }
|
|
297
612
|
.tabGuidePrompt + ul { margin-top: 9px; }
|
|
298
613
|
.tabGuideSection ul { display: grid; gap: 6px; margin: 0; padding: 0 0 0 17px; color: var(--tita-ink-muted); font-size: 11.5px; line-height: 1.65; }
|
|
299
614
|
.tabGuideSection li::marker { color: var(--tita-primary); }
|
|
300
615
|
|
|
616
|
+
/* 两栏放不下时**叠成一栏**:画布拿到整幅宽度,说明落到它下面。
|
|
617
|
+
断点取 1520 而不是 1180:左列要装下 1172px 宽的整图,窄于 1520 时两栏会让图缩到
|
|
618
|
+
「一眼看全但读不出步骤」,那还不如叠起来。 */
|
|
619
|
+
@media (max-width: 1520px) {
|
|
620
|
+
.tabGuideDetailColumn .tabGuideDetailGrid, .tabGuideDetailColumn .tabGuideSections { grid-template-columns: repeat(2, minmax(0, 1fr)); }
|
|
621
|
+
.tabGuideDetailColumn .tabGuideDefinitions > div { grid-template-columns: 112px minmax(0, 1fr); gap: 13px; }
|
|
622
|
+
}
|
|
623
|
+
|
|
624
|
+
/* 窄到放不下「图 + 右栏」时,Inspector **落到画布下面**,不再浮在图上。
|
|
625
|
+
阈值与组件里的 `BESIDE_MIN_WIDTH` 是同一个数,两处必须一起改。 */
|
|
626
|
+
@container (max-width: 1100px) {
|
|
627
|
+
.tabGuideInspector { position: static; width: auto; max-height: none; margin: 0 14px 14px; box-shadow: none; }
|
|
628
|
+
.tabGuideInspectorBody { overflow: visible; }
|
|
629
|
+
}
|
|
630
|
+
|
|
631
|
+
@media (max-width: 820px) {
|
|
632
|
+
.tabGuideDetailColumn .tabGuideDetailGrid, .tabGuideDetailColumn .tabGuideSections { grid-template-columns: minmax(0, 1fr); }
|
|
633
|
+
.tabGuideDetailColumn .tabGuideDefinitions > div { grid-template-columns: minmax(0, 1fr); gap: 3px; }
|
|
634
|
+
}
|
|
635
|
+
|
|
301
636
|
@media (max-width: 820px) {
|
|
302
637
|
.attributionGuideIntro { grid-template-columns: auto minmax(0, 1fr); }
|
|
303
638
|
.attributionGuideFormula { grid-column: 2; justify-items: start; text-align: left; }
|
|
304
|
-
.attributionGuidePipeline { grid-template-columns:
|
|
305
|
-
.attributionGuidePipeline >
|
|
306
|
-
.attributionGuidePipeline > :nth-child(7) { grid-column: 2 / 4; }
|
|
639
|
+
.attributionGuidePipeline { grid-template-columns: 1fr; gap: 12px; }
|
|
640
|
+
.attributionGuidePipeline > .attributionGuideConnector svg { transform: rotate(90deg); }
|
|
307
641
|
.attributionGuideField { grid-template-columns: 90px minmax(0, 1fr); gap: 5px 12px; }
|
|
308
642
|
.attributionGuideField span { grid-column: 2; }
|
|
309
643
|
}
|
|
@@ -314,9 +648,7 @@ body {
|
|
|
314
648
|
.attributionGuideFormula { grid-column: auto; }
|
|
315
649
|
.attributionGuideIntroCopy h2 { font-size: 19px; }
|
|
316
650
|
.attributionGuidePipeline { grid-template-columns: 1fr; gap: 12px; padding: 14px; }
|
|
317
|
-
.attributionGuidePipeline > :nth-child(2), .attributionGuidePipeline > :nth-child(4), .attributionGuidePipeline > :nth-child(6) { display: grid; transform: none; }
|
|
318
651
|
.attributionGuidePipeline > .attributionGuideConnector svg { transform: rotate(90deg); }
|
|
319
|
-
.attributionGuidePipeline > :nth-child(7) { grid-column: auto; }
|
|
320
652
|
.attributionGuideConnector span { width: auto; }
|
|
321
653
|
.attributionGuideRelations { display: grid; }
|
|
322
654
|
.attributionGuideCaseIntro { display: grid; gap: 7px; }
|
|
@@ -424,25 +756,17 @@ body {
|
|
|
424
756
|
@media (max-width: 760px) {
|
|
425
757
|
.page-main { padding-inline: 20px; }
|
|
426
758
|
.page-bar { padding-inline: 20px; }
|
|
427
|
-
.tabGuideIntro { grid-template-columns: 1fr; gap: 12px; }
|
|
428
|
-
.tabGuideIntroMeta { border-top: 1px solid var(--tita-line); border-left: 0; padding: 11px 0 0; }
|
|
429
759
|
.tabGuideDetail { padding-inline: 17px; }
|
|
430
|
-
.tabGuideConceptRelation { grid-template-columns: 1fr; gap: 13px; }
|
|
431
|
-
.tabGuideConceptRelationIntro { max-width: 62ch; }
|
|
432
|
-
.tabGuideModuleRail { grid-template-columns: 1fr; gap: 11px; }
|
|
433
|
-
.tabGuideModuleButtons { justify-content: flex-start; }
|
|
434
760
|
.trialPageIntro { grid-template-columns: auto minmax(0, 1fr); }
|
|
435
761
|
.trialPageBoundary { grid-column: 2; justify-items: start; padding-top: 0; text-align: left; }
|
|
436
762
|
.trialEmptyState { grid-template-columns: 1fr; gap: 16px; }
|
|
437
763
|
}
|
|
438
764
|
|
|
765
|
+
|
|
439
766
|
@media (max-width: 560px) {
|
|
440
767
|
.page-main { padding: 20px 14px 90px; }
|
|
441
768
|
.page-bar { padding: 11px 14px; }
|
|
442
|
-
.tabGuideIntro h2 { font-size: 21px; }
|
|
443
|
-
.tabGuideMap { margin-inline: -2px; padding-inline: 10px; }
|
|
444
769
|
.tabGuideDetailHeader { grid-template-columns: auto minmax(0, 1fr); }
|
|
445
|
-
.tabGuideDetailState { grid-column: 2; }
|
|
446
770
|
.tabGuideDetailGrid { grid-template-columns: 1fr; }
|
|
447
771
|
.tabGuideFacts { align-items: stretch; flex-direction: column; gap: 8px; }
|
|
448
772
|
.tabGuideFacts > svg { display: none; }
|