p-spore 0.1.4 → 0.1.42
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 +110 -15
- package/dist/agents/agent-manager.d.ts +3 -3
- package/dist/agents/agent-manager.d.ts.map +1 -1
- package/dist/agents/agent-manager.js +3 -2
- package/dist/agents/agent-manager.js.map +1 -1
- package/dist/application/agent-application.d.ts +29 -5
- package/dist/application/agent-application.d.ts.map +1 -1
- package/dist/application/agent-application.js +444 -14
- package/dist/application/agent-application.js.map +1 -1
- package/dist/articles/diff.d.ts +70 -0
- package/dist/articles/diff.d.ts.map +1 -0
- package/dist/articles/diff.js +330 -0
- package/dist/articles/diff.js.map +1 -0
- package/dist/articles/docx.d.ts +10 -0
- package/dist/articles/docx.d.ts.map +1 -0
- package/dist/articles/docx.js +219 -0
- package/dist/articles/docx.js.map +1 -0
- package/dist/articles/draft.d.ts +18 -0
- package/dist/articles/draft.d.ts.map +1 -0
- package/dist/articles/draft.js +88 -0
- package/dist/articles/draft.js.map +1 -0
- package/dist/articles/edits.d.ts +24 -0
- package/dist/articles/edits.d.ts.map +1 -0
- package/dist/articles/edits.js +54 -0
- package/dist/articles/edits.js.map +1 -0
- package/dist/articles/html.d.ts +10 -0
- package/dist/articles/html.d.ts.map +1 -0
- package/dist/articles/html.js +122 -0
- package/dist/articles/html.js.map +1 -0
- package/dist/articles/plain.d.ts +8 -0
- package/dist/articles/plain.d.ts.map +1 -0
- package/dist/articles/plain.js +69 -0
- package/dist/articles/plain.js.map +1 -0
- package/dist/articles/preview.d.ts +43 -0
- package/dist/articles/preview.d.ts.map +1 -0
- package/dist/articles/preview.js +90 -0
- package/dist/articles/preview.js.map +1 -0
- package/dist/articles/publish.d.ts +10 -0
- package/dist/articles/publish.d.ts.map +1 -0
- package/dist/articles/publish.js +54 -0
- package/dist/articles/publish.js.map +1 -0
- package/dist/articles/receipt.d.ts +16 -0
- package/dist/articles/receipt.d.ts.map +1 -0
- package/dist/articles/receipt.js +27 -0
- package/dist/articles/receipt.js.map +1 -0
- package/dist/articles/store.d.ts +78 -0
- package/dist/articles/store.d.ts.map +1 -0
- package/dist/articles/store.js +308 -0
- package/dist/articles/store.js.map +1 -0
- package/dist/articles/tool.d.ts +14 -0
- package/dist/articles/tool.d.ts.map +1 -0
- package/dist/articles/tool.js +175 -0
- package/dist/articles/tool.js.map +1 -0
- package/dist/articles/writer-context.d.ts +5 -0
- package/dist/articles/writer-context.d.ts.map +1 -0
- package/dist/articles/writer-context.js +56 -0
- package/dist/articles/writer-context.js.map +1 -0
- package/dist/articles/writer.d.ts +18 -0
- package/dist/articles/writer.d.ts.map +1 -0
- package/dist/articles/writer.js +79 -0
- package/dist/articles/writer.js.map +1 -0
- package/dist/articles/zip-write.d.ts +11 -0
- package/dist/articles/zip-write.d.ts.map +1 -0
- package/dist/articles/zip-write.js +63 -0
- package/dist/articles/zip-write.js.map +1 -0
- package/dist/bundled-skills/README.md +17 -0
- package/dist/bundled-skills/aegis-search/SKILL.md +59 -0
- package/dist/bundled-skills/aegis-search/bin/.gitkeep +0 -0
- package/dist/bundled-skills/article-canvas/SKILL.md +28 -0
- package/dist/bundled-skills/binaries.json +23 -0
- package/dist/bundled-skills/doc-extract/SKILL.md +56 -0
- package/dist/cli/main.d.ts.map +1 -1
- package/dist/cli/main.js +407 -54
- package/dist/cli/main.js.map +1 -1
- package/dist/config/config.d.ts +43 -0
- package/dist/config/config.d.ts.map +1 -1
- package/dist/config/config.js +150 -6
- package/dist/config/config.js.map +1 -1
- package/dist/daemon/daemon.d.ts.map +1 -1
- package/dist/daemon/daemon.js +80 -11
- package/dist/daemon/daemon.js.map +1 -1
- package/dist/desktop/application.d.ts +4 -0
- package/dist/desktop/application.d.ts.map +1 -0
- package/dist/desktop/application.js +1688 -0
- package/dist/desktop/application.js.map +1 -0
- package/dist/desktop/article-export.d.ts +12 -0
- package/dist/desktop/article-export.d.ts.map +1 -0
- package/dist/desktop/article-export.js +87 -0
- package/dist/desktop/article-export.js.map +1 -0
- package/dist/desktop/assets/pspore.png +0 -0
- package/dist/desktop/assets/pspore.svg +24 -0
- package/dist/desktop/conversation-smoke.d.ts +5 -0
- package/dist/desktop/conversation-smoke.d.ts.map +1 -0
- package/dist/desktop/conversation-smoke.js +93 -0
- package/dist/desktop/conversation-smoke.js.map +1 -0
- package/dist/desktop/daemon-bridge.d.ts.map +1 -1
- package/dist/desktop/daemon-bridge.js +62 -17
- package/dist/desktop/daemon-bridge.js.map +1 -1
- package/dist/desktop/ipc-contract.d.ts +124 -0
- package/dist/desktop/ipc-contract.d.ts.map +1 -1
- package/dist/desktop/ipc-contract.js +191 -12
- package/dist/desktop/ipc-contract.js.map +1 -1
- package/dist/desktop/local-path.d.ts +15 -0
- package/dist/desktop/local-path.d.ts.map +1 -0
- package/dist/desktop/local-path.js +59 -0
- package/dist/desktop/local-path.js.map +1 -0
- package/dist/desktop/main.d.ts +10 -1
- package/dist/desktop/main.d.ts.map +1 -1
- package/dist/desktop/main.js +122 -530
- package/dist/desktop/main.js.map +1 -1
- package/dist/desktop/native-startup.d.ts +4 -0
- package/dist/desktop/native-startup.d.ts.map +1 -0
- package/dist/desktop/native-startup.js +57 -0
- package/dist/desktop/native-startup.js.map +1 -0
- package/dist/desktop/preload.cjs +28 -1
- package/dist/desktop/renderer/article-panel.d.ts +45 -0
- package/dist/desktop/renderer/article-panel.d.ts.map +1 -0
- package/dist/desktop/renderer/article-panel.js +1126 -0
- package/dist/desktop/renderer/article-panel.js.map +1 -0
- package/dist/desktop/renderer/article-split.d.ts +32 -0
- package/dist/desktop/renderer/article-split.d.ts.map +1 -0
- package/dist/desktop/renderer/article-split.js +48 -0
- package/dist/desktop/renderer/article-split.js.map +1 -0
- package/dist/desktop/renderer/composer-file-references.d.ts +23 -0
- package/dist/desktop/renderer/composer-file-references.d.ts.map +1 -0
- package/dist/desktop/renderer/composer-file-references.js +51 -0
- package/dist/desktop/renderer/composer-file-references.js.map +1 -0
- package/dist/desktop/renderer/conversation.d.ts +23 -0
- package/dist/desktop/renderer/conversation.d.ts.map +1 -0
- package/dist/desktop/renderer/conversation.js +66 -0
- package/dist/desktop/renderer/conversation.js.map +1 -0
- package/dist/desktop/renderer/dom-reconcile.d.ts +15 -0
- package/dist/desktop/renderer/dom-reconcile.d.ts.map +1 -0
- package/dist/desktop/renderer/dom-reconcile.js +33 -0
- package/dist/desktop/renderer/dom-reconcile.js.map +1 -0
- package/dist/desktop/renderer/index.html +211 -34
- package/dist/desktop/renderer/indexing-view.d.ts +22 -0
- package/dist/desktop/renderer/indexing-view.d.ts.map +1 -0
- package/dist/desktop/renderer/indexing-view.js +115 -0
- package/dist/desktop/renderer/indexing-view.js.map +1 -0
- package/dist/desktop/renderer/markdown-view.d.ts +23 -0
- package/dist/desktop/renderer/markdown-view.d.ts.map +1 -0
- package/dist/desktop/renderer/markdown-view.js +436 -0
- package/dist/desktop/renderer/markdown-view.js.map +1 -0
- package/dist/desktop/renderer/motion.d.ts +67 -0
- package/dist/desktop/renderer/motion.d.ts.map +1 -0
- package/dist/desktop/renderer/motion.js +296 -0
- package/dist/desktop/renderer/motion.js.map +1 -0
- package/dist/desktop/renderer/renderer.js +1788 -151
- package/dist/desktop/renderer/renderer.js.map +1 -1
- package/dist/desktop/renderer/session-find.d.ts +18 -0
- package/dist/desktop/renderer/session-find.d.ts.map +1 -0
- package/dist/desktop/renderer/session-find.js +29 -0
- package/dist/desktop/renderer/session-find.js.map +1 -0
- package/dist/desktop/renderer/session-search.d.ts +30 -0
- package/dist/desktop/renderer/session-search.d.ts.map +1 -0
- package/dist/desktop/renderer/session-search.js +296 -0
- package/dist/desktop/renderer/session-search.js.map +1 -0
- package/dist/desktop/renderer/store.d.ts +33 -0
- package/dist/desktop/renderer/store.d.ts.map +1 -1
- package/dist/desktop/renderer/store.js +92 -19
- package/dist/desktop/renderer/store.js.map +1 -1
- package/dist/desktop/renderer/styles.css +910 -268
- package/dist/desktop/renderer/vendor/gsap.min.js +11 -0
- package/dist/desktop/renderer-diagnostics.d.ts +5 -0
- package/dist/desktop/renderer-diagnostics.d.ts.map +1 -0
- package/dist/desktop/renderer-diagnostics.js +47 -0
- package/dist/desktop/renderer-diagnostics.js.map +1 -0
- package/dist/desktop/security.d.ts +26 -1
- package/dist/desktop/security.d.ts.map +1 -1
- package/dist/desktop/security.js +26 -6
- package/dist/desktop/security.js.map +1 -1
- package/dist/desktop/smoke-fixture.d.ts.map +1 -1
- package/dist/desktop/smoke-fixture.js +77 -3
- package/dist/desktop/smoke-fixture.js.map +1 -1
- package/dist/desktop/splash/index.html +25 -0
- package/dist/desktop/splash/splash.d.ts +2 -0
- package/dist/desktop/splash/splash.d.ts.map +1 -0
- package/dist/desktop/splash/splash.js +8 -0
- package/dist/desktop/splash/splash.js.map +1 -0
- package/dist/desktop/splash/styles.css +24 -0
- package/dist/desktop/system-open.d.ts +16 -0
- package/dist/desktop/system-open.d.ts.map +1 -0
- package/dist/desktop/system-open.js +90 -0
- package/dist/desktop/system-open.js.map +1 -0
- package/dist/desktop/validation.d.ts.map +1 -1
- package/dist/desktop/validation.js +99 -21
- package/dist/desktop/validation.js.map +1 -1
- package/dist/desktop/window-security.d.ts +4 -0
- package/dist/desktop/window-security.d.ts.map +1 -0
- package/dist/desktop/window-security.js +26 -0
- package/dist/desktop/window-security.js.map +1 -0
- package/dist/documents/errors.d.ts +12 -0
- package/dist/documents/errors.d.ts.map +1 -0
- package/dist/documents/errors.js +12 -0
- package/dist/documents/errors.js.map +1 -0
- package/dist/documents/extract.d.ts +37 -0
- package/dist/documents/extract.d.ts.map +1 -0
- package/dist/documents/extract.js +90 -0
- package/dist/documents/extract.js.map +1 -0
- package/dist/documents/legacy-office.d.ts +23 -0
- package/dist/documents/legacy-office.d.ts.map +1 -0
- package/dist/documents/legacy-office.js +439 -0
- package/dist/documents/legacy-office.js.map +1 -0
- package/dist/documents/ole.d.ts +20 -0
- package/dist/documents/ole.d.ts.map +1 -0
- package/dist/documents/ole.js +189 -0
- package/dist/documents/ole.js.map +1 -0
- package/dist/documents/ooxml.d.ts +23 -0
- package/dist/documents/ooxml.d.ts.map +1 -0
- package/dist/documents/ooxml.js +197 -0
- package/dist/documents/ooxml.js.map +1 -0
- package/dist/documents/pdf.d.ts +20 -0
- package/dist/documents/pdf.d.ts.map +1 -0
- package/dist/documents/pdf.js +95 -0
- package/dist/documents/pdf.js.map +1 -0
- package/dist/documents/plain-text.d.ts +22 -0
- package/dist/documents/plain-text.d.ts.map +1 -0
- package/dist/documents/plain-text.js +57 -0
- package/dist/documents/plain-text.js.map +1 -0
- package/dist/documents/zip.d.ts +15 -0
- package/dist/documents/zip.d.ts.map +1 -0
- package/dist/documents/zip.js +137 -0
- package/dist/documents/zip.js.map +1 -0
- package/dist/domain/indexing.d.ts +60 -0
- package/dist/domain/indexing.d.ts.map +1 -0
- package/dist/domain/indexing.js +13 -0
- package/dist/domain/indexing.js.map +1 -0
- package/dist/domain/runtime.d.ts +133 -5
- package/dist/domain/runtime.d.ts.map +1 -1
- package/dist/gateway/local-gateway.d.ts +8 -0
- package/dist/gateway/local-gateway.d.ts.map +1 -1
- package/dist/gateway/local-gateway.js +105 -21
- package/dist/gateway/local-gateway.js.map +1 -1
- package/dist/indexing/index-service.d.ts +56 -0
- package/dist/indexing/index-service.d.ts.map +1 -0
- package/dist/indexing/index-service.js +262 -0
- package/dist/indexing/index-service.js.map +1 -0
- package/dist/kernel/loop.d.ts +10 -0
- package/dist/kernel/loop.d.ts.map +1 -1
- package/dist/kernel/loop.js +6 -2
- package/dist/kernel/loop.js.map +1 -1
- package/dist/kernel/reducer.d.ts.map +1 -1
- package/dist/kernel/reducer.js +17 -1
- package/dist/kernel/reducer.js.map +1 -1
- package/dist/kernel/state.d.ts +17 -4
- package/dist/kernel/state.d.ts.map +1 -1
- package/dist/kernel/state.js +2 -0
- package/dist/kernel/state.js.map +1 -1
- package/dist/pi/context-budget.d.ts +8 -0
- package/dist/pi/context-budget.d.ts.map +1 -0
- package/dist/pi/context-budget.js +62 -0
- package/dist/pi/context-budget.js.map +1 -0
- package/dist/pi/pi-runtime-adapter.d.ts +38 -3
- package/dist/pi/pi-runtime-adapter.d.ts.map +1 -1
- package/dist/pi/pi-runtime-adapter.js +551 -56
- package/dist/pi/pi-runtime-adapter.js.map +1 -1
- package/dist/plugins/bundled-skills.d.ts +56 -0
- package/dist/plugins/bundled-skills.d.ts.map +1 -0
- package/dist/plugins/bundled-skills.js +243 -0
- package/dist/plugins/bundled-skills.js.map +1 -0
- package/dist/plugins/extension-manager.d.ts +23 -1
- package/dist/plugins/extension-manager.d.ts.map +1 -1
- package/dist/plugins/extension-manager.js +117 -0
- package/dist/plugins/extension-manager.js.map +1 -1
- package/dist/plugins/types.d.ts +29 -0
- package/dist/plugins/types.d.ts.map +1 -1
- package/dist/plugins/workspace-skills.d.ts +36 -0
- package/dist/plugins/workspace-skills.d.ts.map +1 -0
- package/dist/plugins/workspace-skills.js +309 -0
- package/dist/plugins/workspace-skills.js.map +1 -0
- package/dist/policy/policy.d.ts.map +1 -1
- package/dist/policy/policy.js +22 -3
- package/dist/policy/policy.js.map +1 -1
- package/dist/protocol/client.d.ts +1 -0
- package/dist/protocol/client.d.ts.map +1 -1
- package/dist/protocol/client.js +49 -24
- package/dist/protocol/client.js.map +1 -1
- package/dist/protocol/limits.d.ts +69 -0
- package/dist/protocol/limits.d.ts.map +1 -0
- package/dist/protocol/limits.js +166 -0
- package/dist/protocol/limits.js.map +1 -0
- package/dist/protocol/schema.d.ts +6 -0
- package/dist/protocol/schema.d.ts.map +1 -1
- package/dist/protocol/schema.js.map +1 -1
- package/dist/protocol/server-frame-codec.d.ts +18 -0
- package/dist/protocol/server-frame-codec.d.ts.map +1 -0
- package/dist/protocol/server-frame-codec.js +211 -0
- package/dist/protocol/server-frame-codec.js.map +1 -0
- package/dist/service/legacy-daemon.d.ts +6 -0
- package/dist/service/legacy-daemon.d.ts.map +1 -0
- package/dist/service/legacy-daemon.js +42 -0
- package/dist/service/legacy-daemon.js.map +1 -0
- package/dist/service/service-launch.d.ts +10 -0
- package/dist/service/service-launch.d.ts.map +1 -0
- package/dist/service/service-launch.js +56 -0
- package/dist/service/service-launch.js.map +1 -0
- package/dist/service/system-service.d.ts +57 -0
- package/dist/service/system-service.d.ts.map +1 -0
- package/dist/service/system-service.js +263 -0
- package/dist/service/system-service.js.map +1 -0
- package/dist/sessions/session-catalog.d.ts +45 -0
- package/dist/sessions/session-catalog.d.ts.map +1 -0
- package/dist/sessions/session-catalog.js +270 -0
- package/dist/sessions/session-catalog.js.map +1 -0
- package/dist/sessions/session-file.d.ts +12 -0
- package/dist/sessions/session-file.d.ts.map +1 -0
- package/dist/sessions/session-file.js +47 -0
- package/dist/sessions/session-file.js.map +1 -0
- package/dist/settings/compaction-settings.d.ts +10 -0
- package/dist/settings/compaction-settings.d.ts.map +1 -0
- package/dist/settings/compaction-settings.js +8 -0
- package/dist/settings/compaction-settings.js.map +1 -0
- package/dist/settings/indexing-settings-service.d.ts +16 -0
- package/dist/settings/indexing-settings-service.d.ts.map +1 -0
- package/dist/settings/indexing-settings-service.js +57 -0
- package/dist/settings/indexing-settings-service.js.map +1 -0
- package/dist/settings/indexing-settings.d.ts +30 -0
- package/dist/settings/indexing-settings.d.ts.map +1 -0
- package/dist/settings/indexing-settings.js +58 -0
- package/dist/settings/indexing-settings.js.map +1 -0
- package/dist/settings/llm-settings-service.d.ts +6 -0
- package/dist/settings/llm-settings-service.d.ts.map +1 -1
- package/dist/settings/llm-settings-service.js +137 -12
- package/dist/settings/llm-settings-service.js.map +1 -1
- package/dist/settings/llm-settings.d.ts +68 -2
- package/dist/settings/llm-settings.d.ts.map +1 -1
- package/dist/settings/llm-settings.js +119 -17
- package/dist/settings/llm-settings.js.map +1 -1
- package/dist/settings/model-api.d.ts +10 -0
- package/dist/settings/model-api.d.ts.map +1 -0
- package/dist/settings/model-api.js +10 -0
- package/dist/settings/model-api.js.map +1 -0
- package/dist/storage/home.d.ts +1 -0
- package/dist/storage/home.d.ts.map +1 -1
- package/dist/storage/home.js +37 -2
- package/dist/storage/home.js.map +1 -1
- package/dist/tools/core-tools.d.ts +2 -0
- package/dist/tools/core-tools.d.ts.map +1 -1
- package/dist/tools/core-tools.js +91 -1
- package/dist/tools/core-tools.js.map +1 -1
- package/dist/ui/shared/activity.d.ts +2 -0
- package/dist/ui/shared/activity.d.ts.map +1 -1
- package/dist/ui/shared/activity.js +18 -4
- package/dist/ui/shared/activity.js.map +1 -1
- package/dist/ui/shared/full-message.d.ts +22 -0
- package/dist/ui/shared/full-message.d.ts.map +1 -0
- package/dist/ui/shared/full-message.js +40 -0
- package/dist/ui/shared/full-message.js.map +1 -0
- package/dist/ui/shared/local-links.d.ts +7 -0
- package/dist/ui/shared/local-links.d.ts.map +1 -0
- package/dist/ui/shared/local-links.js +24 -0
- package/dist/ui/shared/local-links.js.map +1 -0
- package/dist/ui/shared/markdown-stream.d.ts +25 -0
- package/dist/ui/shared/markdown-stream.d.ts.map +1 -0
- package/dist/ui/shared/markdown-stream.js +35 -0
- package/dist/ui/shared/markdown-stream.js.map +1 -0
- package/dist/ui/shared/markdown.d.ts +70 -0
- package/dist/ui/shared/markdown.d.ts.map +1 -0
- package/dist/ui/shared/markdown.js +434 -0
- package/dist/ui/shared/markdown.js.map +1 -0
- package/dist/ui/shared/presentation.d.ts +10 -2
- package/dist/ui/shared/presentation.d.ts.map +1 -1
- package/dist/ui/shared/presentation.js +83 -22
- package/dist/ui/shared/presentation.js.map +1 -1
- package/dist/ui/shared/protocol-state.d.ts +19 -0
- package/dist/ui/shared/protocol-state.d.ts.map +1 -1
- package/dist/ui/shared/protocol-state.js +188 -26
- package/dist/ui/shared/protocol-state.js.map +1 -1
- package/dist/ui/shared/virtual-list.d.ts +34 -0
- package/dist/ui/shared/virtual-list.d.ts.map +1 -0
- package/dist/ui/shared/virtual-list.js +143 -0
- package/dist/ui/shared/virtual-list.js.map +1 -0
- package/dist/ui/tui/commands.d.ts +1 -1
- package/dist/ui/tui/commands.d.ts.map +1 -1
- package/dist/ui/tui/commands.js +8 -3
- package/dist/ui/tui/commands.js.map +1 -1
- package/dist/ui/tui/store.d.ts +22 -1
- package/dist/ui/tui/store.d.ts.map +1 -1
- package/dist/ui/tui/store.js +50 -3
- package/dist/ui/tui/store.js.map +1 -1
- package/dist/ui/tui/tui-app.d.ts.map +1 -1
- package/dist/ui/tui/tui-app.js +231 -31
- package/dist/ui/tui/tui-app.js.map +1 -1
- package/dist/ui/tui/view.d.ts +7 -0
- package/dist/ui/tui/view.d.ts.map +1 -1
- package/dist/ui/tui/view.js +161 -57
- package/dist/ui/tui/view.js.map +1 -1
- package/dist/version.d.ts +1 -1
- package/dist/version.d.ts.map +1 -1
- package/dist/version.js +1 -1
- package/dist/version.js.map +1 -1
- package/package.json +13 -2
|
@@ -1,71 +1,93 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* pSpore desktop — "Cobalt Paper" design system.
|
|
3
|
+
* Daylight (default): cool white canvas, cobalt accent, navy ink.
|
|
4
|
+
* Dark: deep desaturated slate-navy, one restrained blue accent,
|
|
5
|
+
* hairline separation instead of glow or gradients.
|
|
6
|
+
*/
|
|
7
|
+
|
|
1
8
|
:root {
|
|
2
|
-
color-scheme:
|
|
3
|
-
--canvas: #
|
|
4
|
-
--canvas-glow: rgba(
|
|
5
|
-
--surface: #
|
|
6
|
-
--surface-raised: #
|
|
7
|
-
--surface-soft: #
|
|
8
|
-
--surface-input: #
|
|
9
|
-
--surface-hover: #
|
|
10
|
-
--surface-selected: #
|
|
11
|
-
--overlay: rgba(
|
|
12
|
-
--border: #
|
|
13
|
-
--border-soft: #
|
|
14
|
-
--border-strong: #
|
|
15
|
-
--text: #
|
|
16
|
-
--text-soft: #
|
|
17
|
-
--muted: #
|
|
18
|
-
--faint: #
|
|
19
|
-
--accent: #
|
|
20
|
-
--accent-strong: #
|
|
21
|
-
--accent-ink: #
|
|
22
|
-
--accent-soft: rgba(
|
|
23
|
-
--
|
|
24
|
-
--
|
|
25
|
-
--
|
|
26
|
-
--
|
|
27
|
-
--
|
|
28
|
-
--
|
|
29
|
-
--
|
|
9
|
+
color-scheme: light;
|
|
10
|
+
--canvas: #f4f7fb;
|
|
11
|
+
--canvas-glow: rgba(37, 99, 235, 0.055);
|
|
12
|
+
--surface: #ffffff;
|
|
13
|
+
--surface-raised: #f6f9fd;
|
|
14
|
+
--surface-soft: #f3f7fc;
|
|
15
|
+
--surface-input: #fdfeff;
|
|
16
|
+
--surface-hover: #eef4fb;
|
|
17
|
+
--surface-selected: #e9f1fd;
|
|
18
|
+
--overlay: rgba(21, 33, 56, 0.36);
|
|
19
|
+
--border: #dbe4ef;
|
|
20
|
+
--border-soft: #e8eef6;
|
|
21
|
+
--border-strong: #b7c7dc;
|
|
22
|
+
--text: #16243d;
|
|
23
|
+
--text-soft: #2e405f;
|
|
24
|
+
--muted: #5c6d88;
|
|
25
|
+
--faint: #8695ac;
|
|
26
|
+
--accent: #2563eb;
|
|
27
|
+
--accent-strong: #1d4ed8;
|
|
28
|
+
--accent-ink: #ffffff;
|
|
29
|
+
--accent-soft: rgba(37, 99, 235, 0.09);
|
|
30
|
+
--live: #0e8a63;
|
|
31
|
+
--live-soft: rgba(14, 138, 99, 0.1);
|
|
32
|
+
--honey: #ad5700;
|
|
33
|
+
--honey-soft: rgba(173, 87, 0, 0.08);
|
|
34
|
+
--rust: #bf3944;
|
|
35
|
+
--rust-soft: rgba(191, 57, 68, 0.09);
|
|
36
|
+
--lichen: #2563eb;
|
|
37
|
+
--lichen-soft: rgba(37, 99, 235, 0.07);
|
|
38
|
+
--shadow: 0 24px 64px rgba(23, 42, 76, 0.16);
|
|
39
|
+
--shadow-drawer: 0 18px 48px -12px rgba(23, 42, 76, 0.28);
|
|
40
|
+
--shadow-soft: 0 1px 2px rgba(23, 42, 76, 0.04);
|
|
30
41
|
--radius-lg: 16px;
|
|
31
|
-
--radius-md:
|
|
32
|
-
--radius-sm:
|
|
42
|
+
--radius-md: 10px;
|
|
43
|
+
--radius-sm: 7px;
|
|
33
44
|
--motion-out: cubic-bezier(0.16, 1, 0.3, 1);
|
|
34
|
-
--font-sans: "Noto Sans CJK SC", "Noto Sans SC", "Source Han Sans SC", sans-serif;
|
|
35
|
-
--font-mono: "JetBrains Mono", "SFMono-Regular", Consolas, monospace;
|
|
45
|
+
--font-sans: "Noto Sans CJK SC", "Noto Sans SC", "Source Han Sans SC", system-ui, "Noto Color Emoji", "Segoe UI Emoji", "Apple Color Emoji", "Noto Sans Symbols 2", sans-serif;
|
|
46
|
+
--font-mono: "JetBrains Mono", "SFMono-Regular", "DejaVu Sans Mono", Consolas, "Noto Color Emoji", "Noto Sans Symbols 2", monospace;
|
|
47
|
+
--chevron: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 12'%3E%3Cpath d='M2.5 4.5 6 8l3.5-3.5' fill='none' stroke='%235c6d88' stroke-width='1.4' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E");
|
|
36
48
|
font-family: var(--font-sans);
|
|
37
49
|
font-synthesis: none;
|
|
38
50
|
}
|
|
39
51
|
|
|
40
|
-
:root[data-theme="
|
|
41
|
-
color-scheme:
|
|
42
|
-
--canvas: #
|
|
43
|
-
--canvas-glow: rgba(
|
|
44
|
-
--surface: #
|
|
45
|
-
--surface-raised: #
|
|
46
|
-
--surface-soft: #
|
|
47
|
-
--surface-input: #
|
|
48
|
-
--surface-hover: #
|
|
49
|
-
--surface-selected: #
|
|
50
|
-
--overlay: rgba(
|
|
51
|
-
--border: #
|
|
52
|
-
--border-soft: #
|
|
53
|
-
--border-strong: #
|
|
54
|
-
--text: #
|
|
55
|
-
--text-soft: #
|
|
56
|
-
--muted: #
|
|
57
|
-
--faint: #
|
|
58
|
-
--accent: #
|
|
59
|
-
--accent-strong: #
|
|
60
|
-
--accent-ink: #
|
|
61
|
-
--accent-soft: rgba(
|
|
62
|
-
--
|
|
63
|
-
--
|
|
64
|
-
--
|
|
65
|
-
--
|
|
66
|
-
--
|
|
67
|
-
--
|
|
68
|
-
--
|
|
52
|
+
:root[data-theme="dark"] {
|
|
53
|
+
color-scheme: dark;
|
|
54
|
+
--canvas: #0b1119;
|
|
55
|
+
--canvas-glow: rgba(96, 145, 255, 0.05);
|
|
56
|
+
--surface: #101724;
|
|
57
|
+
--surface-raised: #16202f;
|
|
58
|
+
--surface-soft: #0d1420;
|
|
59
|
+
--surface-input: #0c121c;
|
|
60
|
+
--surface-hover: #182233;
|
|
61
|
+
--surface-selected: #13233c;
|
|
62
|
+
--overlay: rgba(2, 6, 12, 0.64);
|
|
63
|
+
--border: #223046;
|
|
64
|
+
--border-soft: #182435;
|
|
65
|
+
--border-strong: #384d70;
|
|
66
|
+
--text: #e6edf8;
|
|
67
|
+
--text-soft: #c5d1e3;
|
|
68
|
+
--muted: #8595ae;
|
|
69
|
+
--faint: #62728d;
|
|
70
|
+
--accent: #5f8dff;
|
|
71
|
+
--accent-strong: #82a8fa;
|
|
72
|
+
--accent-ink: #0a1120;
|
|
73
|
+
--accent-soft: rgba(95, 141, 255, 0.13);
|
|
74
|
+
--live: #3cba8d;
|
|
75
|
+
--live-soft: rgba(60, 186, 141, 0.11);
|
|
76
|
+
--honey: #d69c46;
|
|
77
|
+
--honey-soft: rgba(214, 156, 70, 0.1);
|
|
78
|
+
--rust: #e2686a;
|
|
79
|
+
--rust-soft: rgba(226, 104, 106, 0.11);
|
|
80
|
+
--lichen: #6f9eff;
|
|
81
|
+
--lichen-soft: rgba(111, 158, 255, 0.09);
|
|
82
|
+
--shadow: 0 24px 64px rgba(1, 4, 10, 0.55);
|
|
83
|
+
--shadow-drawer: 0 18px 48px -10px rgba(1, 4, 10, 0.7);
|
|
84
|
+
--shadow-soft: 0 1px 2px rgba(1, 4, 10, 0.35);
|
|
85
|
+
--chevron: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 12'%3E%3Cpath d='M2.5 4.5 6 8l3.5-3.5' fill='none' stroke='%238595ae' stroke-width='1.4' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E");
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
@media (prefers-contrast: more) {
|
|
89
|
+
:root,
|
|
90
|
+
:root[data-theme="dark"] { --muted: var(--text-soft); --faint: var(--text-soft); --border-soft: var(--border); }
|
|
69
91
|
}
|
|
70
92
|
|
|
71
93
|
* { box-sizing: border-box; }
|
|
@@ -75,14 +97,29 @@ html,
|
|
|
75
97
|
body {
|
|
76
98
|
width: 100%;
|
|
77
99
|
height: 100%;
|
|
100
|
+
min-height: 100%;
|
|
78
101
|
margin: 0;
|
|
79
102
|
overflow: hidden;
|
|
80
103
|
}
|
|
81
104
|
|
|
105
|
+
html {
|
|
106
|
+
height: 100%;
|
|
107
|
+
height: 100vh;
|
|
108
|
+
height: 100dvh;
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
body {
|
|
112
|
+
display: flex;
|
|
113
|
+
flex-direction: column;
|
|
114
|
+
min-height: 100%;
|
|
115
|
+
min-height: 100vh;
|
|
116
|
+
min-height: 100dvh;
|
|
117
|
+
}
|
|
118
|
+
|
|
82
119
|
body {
|
|
83
120
|
color: var(--text);
|
|
84
121
|
background:
|
|
85
|
-
radial-gradient(circle at 8% -
|
|
122
|
+
radial-gradient(circle at 8% -16%, var(--canvas-glow), transparent 36rem),
|
|
86
123
|
var(--canvas);
|
|
87
124
|
font-size: 15px;
|
|
88
125
|
-webkit-font-smoothing: antialiased;
|
|
@@ -99,19 +136,20 @@ input,
|
|
|
99
136
|
select,
|
|
100
137
|
button {
|
|
101
138
|
transition:
|
|
102
|
-
color
|
|
103
|
-
background-color
|
|
104
|
-
border-color
|
|
105
|
-
box-shadow
|
|
139
|
+
color 200ms var(--motion-out),
|
|
140
|
+
background-color 200ms var(--motion-out),
|
|
141
|
+
border-color 200ms var(--motion-out),
|
|
142
|
+
box-shadow 200ms var(--motion-out);
|
|
106
143
|
}
|
|
107
144
|
|
|
108
|
-
::selection { color: var(--
|
|
145
|
+
::selection { color: var(--text); background: color-mix(in srgb, var(--accent) 20%, transparent); }
|
|
109
146
|
button,
|
|
110
147
|
textarea,
|
|
111
148
|
input,
|
|
112
149
|
select { font: inherit; }
|
|
113
|
-
button { color: inherit; touch-action: manipulation; }
|
|
114
|
-
button:disabled { cursor: not-allowed; opacity: 0.
|
|
150
|
+
button { color: inherit; touch-action: manipulation; -webkit-tap-highlight-color: transparent; }
|
|
151
|
+
button:disabled { cursor: not-allowed; opacity: 0.42; }
|
|
152
|
+
h1, h2, h3 { text-wrap: balance; }
|
|
115
153
|
|
|
116
154
|
button:focus-visible,
|
|
117
155
|
textarea:focus-visible,
|
|
@@ -119,8 +157,8 @@ input:focus-visible,
|
|
|
119
157
|
select:focus-visible,
|
|
120
158
|
[tabindex]:focus-visible,
|
|
121
159
|
.skip-link:focus-visible {
|
|
122
|
-
outline: 2px solid var(--accent);
|
|
123
|
-
outline-offset:
|
|
160
|
+
outline: 2px solid color-mix(in srgb, var(--accent) 72%, transparent);
|
|
161
|
+
outline-offset: 2px;
|
|
124
162
|
}
|
|
125
163
|
|
|
126
164
|
.skip-link {
|
|
@@ -138,25 +176,32 @@ select:focus-visible,
|
|
|
138
176
|
}
|
|
139
177
|
.skip-link:focus { transform: translateY(0); }
|
|
140
178
|
|
|
179
|
+
/*
|
|
180
|
+
* Flex, not grid: the connection banner is `display: none` while connected, and a
|
|
181
|
+
* fixed three-row grid template kept its empty track's gap, leaving dead space
|
|
182
|
+
* under the workspace on first paint.
|
|
183
|
+
*/
|
|
141
184
|
.app-shell {
|
|
185
|
+
flex: 1 1 auto;
|
|
186
|
+
width: 100%;
|
|
187
|
+
min-height: 0;
|
|
142
188
|
height: 100%;
|
|
143
|
-
display:
|
|
144
|
-
|
|
145
|
-
gap:
|
|
146
|
-
padding: 10px;
|
|
189
|
+
display: flex;
|
|
190
|
+
flex-direction: column;
|
|
191
|
+
gap: 10px;
|
|
192
|
+
padding: 10px 12px 10px;
|
|
147
193
|
}
|
|
194
|
+
.app-shell > .topbar,
|
|
195
|
+
.app-shell > .connection-banner { flex: 0 0 auto; }
|
|
196
|
+
.app-shell > .workspace-grid { flex: 1 1 auto; }
|
|
148
197
|
|
|
198
|
+
/* The topbar floats on the canvas without its own card chrome. */
|
|
149
199
|
.topbar {
|
|
150
200
|
display: grid;
|
|
151
|
-
grid-template-columns:
|
|
201
|
+
grid-template-columns: auto auto minmax(0, 1fr);
|
|
152
202
|
align-items: center;
|
|
153
|
-
gap:
|
|
154
|
-
padding: 0
|
|
155
|
-
border: 1px solid var(--border);
|
|
156
|
-
border-radius: var(--radius-lg);
|
|
157
|
-
background: color-mix(in srgb, var(--surface) 97%, transparent);
|
|
158
|
-
box-shadow: var(--shadow-soft);
|
|
159
|
-
animation: surface-enter 480ms var(--motion-out) both;
|
|
203
|
+
gap: 22px;
|
|
204
|
+
padding: 2px 6px 0;
|
|
160
205
|
}
|
|
161
206
|
|
|
162
207
|
.topbar-leading,
|
|
@@ -166,44 +211,49 @@ select:focus-visible,
|
|
|
166
211
|
.session-health,
|
|
167
212
|
.composer-actions,
|
|
168
213
|
.settings-footer > div { display: flex; align-items: center; }
|
|
169
|
-
.topbar-leading { gap:
|
|
170
|
-
.topbar-actions { justify-self: end; gap:
|
|
171
|
-
.runtime-status { justify-self:
|
|
214
|
+
.topbar-leading { gap: 13px; min-width: 0; }
|
|
215
|
+
.topbar-actions { justify-self: end; gap: 6px; }
|
|
216
|
+
.runtime-status { justify-self: start; gap: 12px; min-width: 0; }
|
|
172
217
|
.brand-lockup { gap: 11px; min-width: 0; }
|
|
173
|
-
.brand-lockup h1 { margin: 0; font-size:
|
|
174
|
-
.brand-lockup span:not(.brand-mark) { display: block; margin-top: 5px; color: var(--
|
|
175
|
-
|
|
176
|
-
.brand-mark {
|
|
177
|
-
.brand-mark i { position: absolute; display: block; width: 10px; height: 10px; border: 2px solid var(--accent); border-radius: 50%; }
|
|
178
|
-
.brand-mark i:nth-child(1) { left: 0; top: 9px; }
|
|
179
|
-
.brand-mark i:nth-child(2) { right: 0; top: 1px; }
|
|
180
|
-
.brand-mark i:nth-child(3) { right: 0; bottom: 0; }
|
|
181
|
-
.brand-mark::before,
|
|
182
|
-
.brand-mark::after { content: ""; position: absolute; left: 8px; width: 12px; height: 1.5px; background: var(--accent); transform-origin: left; }
|
|
183
|
-
.brand-mark::before { top: 13px; transform: rotate(-32deg); }
|
|
184
|
-
.brand-mark::after { top: 15px; transform: rotate(32deg); }
|
|
218
|
+
.brand-lockup h1 { margin: 0; color: var(--text); font-size: 19px; line-height: 1; font-weight: 750; letter-spacing: -0.03em; }
|
|
219
|
+
.brand-lockup span:not(.brand-mark) { display: block; margin-top: 5px; color: var(--faint); font: 600 11px/1 var(--font-mono); letter-spacing: 0.16em; }
|
|
220
|
+
|
|
221
|
+
.brand-mark { width: 34px; height: 34px; display: block; flex: 0 0 auto; }
|
|
185
222
|
|
|
186
223
|
.connection-badge {
|
|
187
224
|
display: inline-flex;
|
|
188
225
|
align-items: center;
|
|
189
|
-
gap:
|
|
190
|
-
padding:
|
|
226
|
+
gap: 8px;
|
|
227
|
+
padding: 6px 11px;
|
|
191
228
|
border: 1px solid var(--border);
|
|
192
229
|
border-radius: 999px;
|
|
193
230
|
color: var(--muted);
|
|
194
|
-
|
|
195
|
-
|
|
231
|
+
background: var(--surface-raised);
|
|
232
|
+
font: 650 11.5px/1 var(--font-mono);
|
|
233
|
+
letter-spacing: 0.08em;
|
|
196
234
|
}
|
|
197
|
-
.connection-badge i { width:
|
|
198
|
-
.connection-badge.connected { color: var(--
|
|
199
|
-
.connection-badge.connected i { background: var(--
|
|
200
|
-
.connection-badge.
|
|
201
|
-
|
|
235
|
+
.connection-badge i { position: relative; width: 6px; height: 6px; border-radius: 50%; background: var(--faint); }
|
|
236
|
+
.connection-badge.connected { color: var(--live); border-color: color-mix(in srgb, var(--live) 34%, var(--border)); background: var(--live-soft); }
|
|
237
|
+
.connection-badge.connected i { background: var(--live); }
|
|
238
|
+
.connection-badge.connected i::after {
|
|
239
|
+
content: "";
|
|
240
|
+
position: absolute;
|
|
241
|
+
inset: -3px;
|
|
242
|
+
border: 1px solid var(--live);
|
|
243
|
+
border-radius: 50%;
|
|
244
|
+
animation: spore-pulse 2.6s var(--motion-out) infinite;
|
|
245
|
+
}
|
|
246
|
+
.connection-badge.connecting { color: var(--honey); border-color: color-mix(in srgb, var(--honey) 38%, var(--border)); background: var(--honey-soft); }
|
|
247
|
+
.connection-badge.connecting i { background: var(--honey); }
|
|
248
|
+
/* A masked reconnect stays ONLINE; only the dot warms up so a long run never
|
|
249
|
+
strobes the badge between states. */
|
|
250
|
+
.connection-badge[data-reconnecting="true"] i { background: var(--honey); }
|
|
251
|
+
.connection-badge[data-reconnecting="true"] i::after { border-color: var(--honey); }
|
|
202
252
|
|
|
203
|
-
.topbar-metrics { display: flex; align-items: stretch; margin-right:
|
|
204
|
-
.topbar-metrics > span { min-width:
|
|
253
|
+
.topbar-metrics { display: flex; align-items: stretch; gap: 18px; margin-right: 10px; }
|
|
254
|
+
.topbar-metrics > span { min-width: 58px; }
|
|
205
255
|
.topbar-metrics small { display: block; color: var(--faint); font-size: 11.5px; line-height: 1; }
|
|
206
|
-
.topbar-metrics b { display: block; margin-top: 6px; font:
|
|
256
|
+
.topbar-metrics b { display: block; margin-top: 6px; color: var(--text-soft); font: 600 13px/1 var(--font-mono); font-variant-numeric: tabular-nums; }
|
|
207
257
|
|
|
208
258
|
.icon-button,
|
|
209
259
|
.quiet-icon-button,
|
|
@@ -212,8 +262,8 @@ select:focus-visible,
|
|
|
212
262
|
.danger-ghost-button,
|
|
213
263
|
.secondary-button,
|
|
214
264
|
.primary-button {
|
|
215
|
-
min-height:
|
|
216
|
-
border: 1px solid
|
|
265
|
+
min-height: 34px;
|
|
266
|
+
border: 1px solid transparent;
|
|
217
267
|
border-radius: var(--radius-sm);
|
|
218
268
|
cursor: pointer;
|
|
219
269
|
transition:
|
|
@@ -224,86 +274,269 @@ select:focus-visible,
|
|
|
224
274
|
box-shadow 160ms var(--motion-out);
|
|
225
275
|
}
|
|
226
276
|
.icon-button:hover,
|
|
277
|
+
.quiet-icon-button:hover,
|
|
278
|
+
.quiet-text-button:hover { color: var(--text); background: var(--surface-hover); }
|
|
227
279
|
.ghost-button:hover,
|
|
228
280
|
.secondary-button:hover { color: var(--text); border-color: var(--border-strong); background: var(--surface-hover); }
|
|
229
281
|
.icon-button:active,
|
|
230
282
|
.ghost-button:active,
|
|
231
283
|
.secondary-button:active,
|
|
232
284
|
.primary-button:active { transform: translateY(1px); }
|
|
233
|
-
.icon-button { width:
|
|
285
|
+
.icon-button { width: 34px; padding: 0; display: grid; place-items: center; background: transparent; color: var(--muted); }
|
|
234
286
|
.icon-button svg,
|
|
235
|
-
.wide-button svg { width:
|
|
287
|
+
.wide-button svg { width: 17px; height: 17px; fill: none; stroke: currentColor; stroke-width: 1.7; stroke-linecap: round; stroke-linejoin: round; }
|
|
236
288
|
.theme-icon.moon { display: none; }
|
|
237
|
-
:root[data-theme="
|
|
238
|
-
:root[data-theme="
|
|
239
|
-
.
|
|
240
|
-
.quiet-icon-button
|
|
241
|
-
.quiet-text-button { min-height:
|
|
289
|
+
:root[data-theme="dark"] .theme-icon.sun { display: none; }
|
|
290
|
+
:root[data-theme="dark"] .theme-icon.moon { display: block; }
|
|
291
|
+
:root[data-theme="light"] .theme-icon.sun { display: block; }
|
|
292
|
+
.quiet-icon-button { width: 32px; padding: 0; background: transparent; color: var(--muted); font-size: 22px; line-height: 1; }
|
|
293
|
+
.quiet-text-button { min-height: 30px; padding: 0 11px; background: transparent; color: var(--text-soft); font: 600 12.5px/1 var(--font-mono); }
|
|
242
294
|
.ghost-button,
|
|
243
295
|
.danger-ghost-button { padding: 7px 12px; background: transparent; color: var(--muted); font-size: 13px; }
|
|
244
|
-
.danger-ghost-button { border-color: color-mix(in srgb, var(--
|
|
245
|
-
.danger-ghost-button:hover { border-color: var(--
|
|
246
|
-
.secondary-button { padding: 8px 13px; background: var(--surface-raised); color: var(--text); font-size: 13.5px; }
|
|
247
|
-
.primary-button {
|
|
248
|
-
|
|
296
|
+
.danger-ghost-button { border-color: color-mix(in srgb, var(--rust) 30%, var(--border)); color: var(--rust); }
|
|
297
|
+
.danger-ghost-button:hover { border-color: var(--rust); background: var(--rust-soft); }
|
|
298
|
+
.secondary-button { padding: 8px 13px; border-color: var(--border); background: var(--surface-raised); color: var(--text); font-size: 13.5px; }
|
|
299
|
+
.primary-button {
|
|
300
|
+
padding: 9px 15px;
|
|
301
|
+
color: var(--accent-ink);
|
|
302
|
+
background: var(--accent);
|
|
303
|
+
font-size: 13.5px;
|
|
304
|
+
font-weight: 650;
|
|
305
|
+
box-shadow: 0 1px 2px color-mix(in srgb, var(--accent) 32%, transparent);
|
|
306
|
+
}
|
|
307
|
+
.primary-button:hover { background: var(--accent-strong); }
|
|
249
308
|
.wide-button { width: 100%; display: flex; align-items: center; justify-content: center; gap: 8px; }
|
|
250
|
-
kbd {
|
|
309
|
+
kbd {
|
|
310
|
+
margin-left: 8px;
|
|
311
|
+
padding: 2px 6px;
|
|
312
|
+
border-radius: 4px;
|
|
313
|
+
color: color-mix(in srgb, var(--accent-ink) 78%, transparent);
|
|
314
|
+
background: color-mix(in srgb, var(--accent-ink) 14%, transparent);
|
|
315
|
+
font: 600 11px/1 var(--font-mono);
|
|
316
|
+
}
|
|
251
317
|
|
|
252
|
-
.connection-banner { display: none; align-items: center; justify-content: center; gap: 9px; min-height:
|
|
318
|
+
.connection-banner { display: none; align-items: center; justify-content: center; gap: 9px; min-height: 36px; padding: 8px 13px; border: 1px solid color-mix(in srgb, var(--honey) 38%, var(--border)); border-radius: var(--radius-md); background: var(--honey-soft); color: var(--honey); font-size: 13.5px; }
|
|
253
319
|
.connection-banner.visible { display: flex; }
|
|
254
|
-
.spinner { width: 12px; height: 12px; border: 2px solid color-mix(in srgb, var(--
|
|
320
|
+
.spinner { width: 12px; height: 12px; border: 2px solid color-mix(in srgb, var(--honey) 24%, transparent); border-top-color: var(--honey); border-radius: 50%; animation: spin 900ms cubic-bezier(0.5, 0, 0.5, 1) infinite; }
|
|
255
321
|
|
|
256
322
|
.workspace-grid {
|
|
257
323
|
position: relative;
|
|
258
324
|
min-height: 0;
|
|
325
|
+
align-self: stretch;
|
|
259
326
|
display: grid;
|
|
260
|
-
grid-template-columns: clamp(
|
|
261
|
-
gap:
|
|
327
|
+
grid-template-columns: clamp(232px, 14vw, 264px) minmax(520px, 1fr) clamp(320px, 20vw, 380px);
|
|
328
|
+
gap: 10px;
|
|
262
329
|
}
|
|
263
|
-
:root[data-navigation="closed"] .workspace-grid { grid-template-columns: minmax(520px, 1fr) clamp(320px, 20vw,
|
|
264
|
-
:root[data-inspector="closed"] .workspace-grid { grid-template-columns: clamp(
|
|
330
|
+
:root[data-navigation="closed"] .workspace-grid { grid-template-columns: minmax(520px, 1fr) clamp(320px, 20vw, 380px); }
|
|
331
|
+
:root[data-inspector="closed"] .workspace-grid { grid-template-columns: clamp(232px, 14vw, 264px) minmax(520px, 1fr); }
|
|
265
332
|
:root[data-navigation="closed"][data-inspector="closed"] .workspace-grid { grid-template-columns: minmax(0, 1fr); }
|
|
266
333
|
:root[data-navigation="closed"] .left-rail,
|
|
267
334
|
:root[data-inspector="closed"] .right-rail { display: none; }
|
|
268
335
|
|
|
269
|
-
.panel { min-width: 0; min-height: 0; overflow: hidden; border: 1px solid var(--border); border-radius: var(--radius-lg); background:
|
|
270
|
-
.left-rail { display: flex; flex-direction: column;
|
|
271
|
-
.
|
|
272
|
-
.right-rail { animation-delay: 120ms; }
|
|
336
|
+
.panel { min-width: 0; min-height: 0; height: 100%; overflow: hidden; border: 1px solid var(--border); border-radius: var(--radius-lg); background: var(--surface); box-shadow: var(--shadow-soft); }
|
|
337
|
+
.left-rail { display: flex; flex-direction: column; }
|
|
338
|
+
.right-rail { display: grid; grid-template-rows: auto auto minmax(0, 1fr); }
|
|
273
339
|
|
|
274
340
|
.panel-header,
|
|
275
|
-
.inspector-header { padding:
|
|
276
|
-
.navigation-header .section-heading { margin-bottom:
|
|
341
|
+
.inspector-header { padding: 18px 18px 15px; border-bottom: 1px solid var(--border-soft); }
|
|
342
|
+
.navigation-header .section-heading { margin-bottom: 6px; }
|
|
277
343
|
.panel-header p,
|
|
278
|
-
.section-description { margin: 0; color: var(--muted); font-size: 12.5px; line-height: 1.
|
|
344
|
+
.section-description { margin: 0; color: var(--muted); font-size: 12.5px; line-height: 1.6; }
|
|
279
345
|
.section-description code { color: var(--text-soft); font: 12px var(--font-mono); }
|
|
280
|
-
.section-heading { display: flex; align-items: center; justify-content: space-between; margin-bottom:
|
|
346
|
+
.section-heading { display: flex; align-items: center; justify-content: space-between; gap: 10px; margin-bottom: 14px; }
|
|
347
|
+
.section-heading-actions { display: flex; align-items: center; gap: 7px; }
|
|
281
348
|
.section-heading h2,
|
|
282
|
-
.inspector-header h2 { margin:
|
|
283
|
-
.eyebrow { color: var(--
|
|
284
|
-
.eyebrow.warning { color: var(--
|
|
285
|
-
.count-pill { min-width:
|
|
349
|
+
.inspector-header h2 { margin: 6px 0 0; font-size: 16px; line-height: 1.2; font-weight: 700; letter-spacing: -0.015em; }
|
|
350
|
+
.eyebrow { color: var(--faint); font: 600 11.5px/1 var(--font-mono); letter-spacing: 0.15em; }
|
|
351
|
+
.eyebrow.warning { color: var(--honey); }
|
|
352
|
+
.count-pill { min-width: 26px; padding: 5px 7px; text-align: center; border: 1px solid var(--border-soft); border-radius: 999px; color: var(--muted); background: var(--surface-soft); font: 600 11.5px/1 var(--font-mono); font-variant-numeric: tabular-nums; }
|
|
286
353
|
.muted { color: var(--muted); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
|
|
287
354
|
|
|
288
|
-
.sessions-section { min-height: 0; flex: 1 1 auto; overflow: auto; padding:
|
|
289
|
-
|
|
290
|
-
|
|
355
|
+
.sessions-section { min-height: 0; flex: 1 1 auto; overflow: auto; padding: 10px; }
|
|
356
|
+
/* Run activity: what the agent is doing while it produces no text. Each phase
|
|
357
|
+
gets a different mark because they fail differently — a tool that never
|
|
358
|
+
returns, a model that never answers, and an approval nobody saw are three
|
|
359
|
+
different problems, and the reader has to be able to tell them apart. */
|
|
360
|
+
.run-activity {
|
|
361
|
+
display: flex;
|
|
362
|
+
align-items: center;
|
|
363
|
+
gap: 9px;
|
|
364
|
+
margin: 0 18px;
|
|
365
|
+
padding: 7px 12px;
|
|
366
|
+
border: 1px solid var(--border-soft);
|
|
367
|
+
border-radius: var(--radius-sm);
|
|
368
|
+
background: var(--surface-soft);
|
|
369
|
+
color: var(--muted);
|
|
370
|
+
font: 12.5px/1.4 var(--font-mono);
|
|
371
|
+
}
|
|
372
|
+
.run-activity-label { min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
|
|
373
|
+
.run-activity-elapsed { margin-left: auto; flex: 0 0 auto; color: var(--faint); font-variant-numeric: tabular-nums; }
|
|
374
|
+
.run-activity-mark { flex: 0 0 auto; width: 12px; height: 12px; border-radius: 50%; }
|
|
375
|
+
|
|
376
|
+
/* Waiting on the model: a spinner, because the wait is one opaque request. */
|
|
377
|
+
.run-activity-mark[data-phase="waiting"] {
|
|
378
|
+
border: 2px solid color-mix(in srgb, var(--accent) 24%, transparent);
|
|
379
|
+
border-top-color: var(--accent);
|
|
380
|
+
animation: spin 900ms cubic-bezier(0.5, 0, 0.5, 1) infinite;
|
|
381
|
+
}
|
|
382
|
+
/* Thinking: a slow breath — output is coming, just not yet visible. */
|
|
383
|
+
.run-activity-mark[data-phase="thinking"] {
|
|
384
|
+
background: var(--accent);
|
|
385
|
+
animation: activity-breathe 1.8s var(--motion-out) infinite;
|
|
386
|
+
}
|
|
387
|
+
/* Streaming: a steady blink that matches text arriving. */
|
|
388
|
+
.run-activity-mark[data-phase="streaming"] {
|
|
389
|
+
background: var(--live);
|
|
390
|
+
animation: activity-blink 1s steps(2, end) infinite;
|
|
391
|
+
}
|
|
392
|
+
/* A tool is running: a travelling bar, because work is happening off-screen
|
|
393
|
+
and the reader should not read stillness as a hang. */
|
|
394
|
+
.run-activity[data-phase="tool"] .run-activity-mark {
|
|
395
|
+
width: 26px;
|
|
396
|
+
height: 4px;
|
|
397
|
+
border-radius: 2px;
|
|
398
|
+
background: color-mix(in srgb, var(--honey) 26%, transparent);
|
|
399
|
+
background-image: linear-gradient(90deg, transparent, var(--honey), transparent);
|
|
400
|
+
background-size: 60% 100%;
|
|
401
|
+
background-repeat: no-repeat;
|
|
402
|
+
animation: activity-travel 1.1s linear infinite;
|
|
403
|
+
}
|
|
404
|
+
/* Waiting on the reader: nothing will move until they act, so it insists. */
|
|
405
|
+
.run-activity[data-phase="approval"] { border-color: var(--honey); color: var(--honey); }
|
|
406
|
+
.run-activity[data-phase="approval"] .run-activity-mark {
|
|
407
|
+
background: var(--honey);
|
|
408
|
+
animation: activity-alert 1.1s var(--motion-out) infinite;
|
|
409
|
+
}
|
|
410
|
+
|
|
411
|
+
@keyframes activity-breathe { 0%, 100% { opacity: 0.35; transform: scale(0.8); } 50% { opacity: 1; transform: scale(1); } }
|
|
412
|
+
@keyframes activity-blink { 0% { opacity: 1; } 100% { opacity: 0.3; } }
|
|
413
|
+
@keyframes activity-travel { 0% { background-position: -60% 0; } 100% { background-position: 160% 0; } }
|
|
414
|
+
@keyframes activity-alert { 0%, 100% { box-shadow: 0 0 0 0 color-mix(in srgb, var(--honey) 60%, transparent); } 70% { box-shadow: 0 0 0 6px transparent; } }
|
|
415
|
+
|
|
416
|
+
@media (prefers-reduced-motion: reduce) {
|
|
417
|
+
.run-activity-mark { animation: none !important; }
|
|
418
|
+
/* Without motion the tinted track alone marks the bar as busy; the elapsed time carries the rest. */
|
|
419
|
+
.indexing-panel[data-progress="indeterminate"] .indexing-bar i { animation: none !important; background-image: none; }
|
|
420
|
+
}
|
|
421
|
+
|
|
422
|
+
/* The fixed tool list is long and every entry is one short identifier, so it
|
|
423
|
+
wraps as chips instead of turning the panel into a column of near-empty rows. */
|
|
424
|
+
.tool-chips { display: flex; flex-wrap: wrap; gap: 5px; margin-top: 8px; }
|
|
425
|
+
.tool-chip {
|
|
426
|
+
padding: 3px 7px;
|
|
427
|
+
border: 1px solid var(--border-soft);
|
|
428
|
+
border-radius: 999px;
|
|
429
|
+
background: var(--surface-soft);
|
|
430
|
+
color: var(--muted);
|
|
431
|
+
font: 11.5px/1.35 var(--font-mono);
|
|
432
|
+
}
|
|
433
|
+
|
|
434
|
+
.session-list { display: flex; flex-direction: column; gap: 3px; }
|
|
435
|
+
.session-row { position: relative; }
|
|
436
|
+
/* The delete control sits over the row's trailing edge: a button cannot be
|
|
437
|
+
nested inside the session button, and reserving a column for it would shrink
|
|
438
|
+
the title on every row for a control that is only occasionally used. */
|
|
439
|
+
.session-delete {
|
|
440
|
+
position: absolute;
|
|
441
|
+
top: 50%;
|
|
442
|
+
right: 8px;
|
|
443
|
+
transform: translateY(-50%);
|
|
444
|
+
padding: 4px 7px;
|
|
445
|
+
border: 1px solid transparent;
|
|
446
|
+
border-radius: var(--radius-sm);
|
|
447
|
+
background: transparent;
|
|
448
|
+
color: var(--faint);
|
|
449
|
+
font: 600 11.5px/1 var(--font-mono);
|
|
450
|
+
cursor: pointer;
|
|
451
|
+
opacity: 0;
|
|
452
|
+
transition: opacity 150ms var(--motion-out), color 150ms var(--motion-out), background-color 150ms var(--motion-out);
|
|
453
|
+
}
|
|
454
|
+
.session-row:hover .session-delete,
|
|
455
|
+
.session-row:focus-within .session-delete,
|
|
456
|
+
.session-delete.armed { opacity: 1; }
|
|
457
|
+
.session-delete:hover { color: var(--rust); background: var(--surface-soft); }
|
|
458
|
+
.session-delete:focus-visible { opacity: 1; outline: 2px solid var(--accent); outline-offset: 1px; }
|
|
459
|
+
.session-delete:disabled { cursor: not-allowed; opacity: 0; }
|
|
460
|
+
.session-delete.armed {
|
|
461
|
+
border-color: var(--rust);
|
|
462
|
+
color: var(--rust);
|
|
463
|
+
background: var(--surface-soft);
|
|
464
|
+
letter-spacing: 0.04em;
|
|
465
|
+
}
|
|
466
|
+
/* The control overlays the trailing status mark, so the mark yields whenever
|
|
467
|
+
the control is showing rather than the two drawing on top of each other. */
|
|
468
|
+
.session-row:hover .session-status-mark,
|
|
469
|
+
.session-row:focus-within .session-status-mark,
|
|
470
|
+
.session-row.arming .session-status-mark { visibility: hidden; }
|
|
471
|
+
.session-item {
|
|
472
|
+
--indent: calc(11px + var(--session-depth, 0) * 16px);
|
|
473
|
+
position: relative;
|
|
474
|
+
width: 100%;
|
|
475
|
+
min-height: 52px;
|
|
476
|
+
display: grid;
|
|
477
|
+
grid-template-columns: 8px minmax(0, 1fr) auto;
|
|
478
|
+
align-items: center;
|
|
479
|
+
gap: 10px;
|
|
480
|
+
padding: 9px 10px 9px var(--indent);
|
|
481
|
+
text-align: left;
|
|
482
|
+
border: 0;
|
|
483
|
+
border-radius: var(--radius-md);
|
|
484
|
+
background: transparent;
|
|
485
|
+
cursor: pointer;
|
|
486
|
+
transition: background-color 150ms var(--motion-out), box-shadow 150ms var(--motion-out);
|
|
487
|
+
}
|
|
291
488
|
.session-item:hover { background: var(--surface-hover); }
|
|
292
|
-
.session-item.selected {
|
|
293
|
-
.session-item
|
|
294
|
-
|
|
295
|
-
|
|
489
|
+
.session-item.selected { background: var(--surface-selected); box-shadow: inset 2.5px 0 0 var(--accent); }
|
|
490
|
+
.session-item[data-depth]:not([data-depth="0"])::before {
|
|
491
|
+
content: "";
|
|
492
|
+
position: absolute;
|
|
493
|
+
left: calc(var(--indent) - 13px);
|
|
494
|
+
top: -5px;
|
|
495
|
+
bottom: 50%;
|
|
496
|
+
width: 9px;
|
|
497
|
+
border-left: 1px solid var(--border-strong);
|
|
498
|
+
border-bottom: 1px solid var(--border-strong);
|
|
499
|
+
border-bottom-left-radius: 7px;
|
|
500
|
+
}
|
|
501
|
+
.session-item .node-dot { position: relative; width: 7px; height: 7px; border-radius: 50%; background: var(--faint); transition: background-color 150ms var(--motion-out); }
|
|
502
|
+
.session-item.running .node-dot { background: var(--live); }
|
|
503
|
+
.session-item.running .node-dot::after { content: ""; position: absolute; inset: -4px; border: 1px solid var(--live); border-radius: 50%; animation: spore-pulse 2.6s var(--motion-out) infinite; }
|
|
504
|
+
.session-item.failed .node-dot { background: var(--rust); }
|
|
296
505
|
.session-item .session-copy { min-width: 0; }
|
|
297
506
|
.session-item strong,
|
|
298
507
|
.session-item small { display: block; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
|
|
299
|
-
.session-item strong {
|
|
300
|
-
|
|
301
|
-
|
|
508
|
+
.session-item strong {
|
|
509
|
+
display: flex;
|
|
510
|
+
align-items: baseline;
|
|
511
|
+
gap: 8px;
|
|
512
|
+
font: 600 13.5px/1.2 var(--font-mono);
|
|
513
|
+
letter-spacing: -0.01em;
|
|
514
|
+
}
|
|
515
|
+
/* Pushed to the trailing edge so the ids stay left-aligned and scannable. */
|
|
516
|
+
.session-item .session-time {
|
|
517
|
+
margin-left: auto;
|
|
518
|
+
flex: 0 0 auto;
|
|
519
|
+
color: var(--faint);
|
|
520
|
+
font: 400 11px/1.2 var(--font-mono);
|
|
521
|
+
font-variant-numeric: tabular-nums;
|
|
522
|
+
}
|
|
523
|
+
.session-item small { margin-top: 5px; color: var(--muted); font-size: 12px; }
|
|
524
|
+
.session-item .session-status-mark { color: var(--faint); font: 11px/1 var(--font-mono); letter-spacing: 0.06em; }
|
|
525
|
+
.session-item.running .session-status-mark { color: var(--live); }
|
|
526
|
+
.session-item.failed .session-status-mark { color: var(--rust); }
|
|
527
|
+
|
|
528
|
+
.rail-summary { flex: 0 0 auto; padding: 4px 14px 14px; }
|
|
529
|
+
.rail-summary .subsection-heading { margin: 0 0 9px; }
|
|
530
|
+
.rail-metrics { display: grid; gap: 7px; margin: 0; }
|
|
531
|
+
.rail-metrics > div { display: flex; align-items: baseline; justify-content: space-between; gap: 10px; }
|
|
532
|
+
.rail-metrics dt { color: var(--muted); font-size: 12.5px; }
|
|
533
|
+
.rail-metrics dd { margin: 0; color: var(--text-soft); font: 600 12.5px/1 var(--font-mono); font-variant-numeric: tabular-nums; }
|
|
534
|
+
.rail-metrics dd.attention { color: var(--honey); }
|
|
302
535
|
|
|
303
536
|
.navigation-actions { flex: 0 0 auto; display: flex; flex-direction: column; gap: 8px; padding: 12px; border-top: 1px solid var(--border-soft); }
|
|
304
|
-
.inline-editor { padding:
|
|
537
|
+
.inline-editor { padding: 12px; border: 1px solid var(--border); border-radius: var(--radius-md); background: var(--surface-soft); }
|
|
305
538
|
.inline-editor-heading { display: flex; align-items: flex-start; justify-content: space-between; margin-bottom: 12px; }
|
|
306
|
-
.inline-editor-heading h3 { margin:
|
|
539
|
+
.inline-editor-heading h3 { margin: 6px 0 0; font-size: 14px; font-weight: 700; }
|
|
307
540
|
.compact-form { display: flex; flex-direction: column; gap: 9px; }
|
|
308
541
|
.compact-form label,
|
|
309
542
|
.settings-form label > span:first-child { color: var(--muted); font-size: 12.5px; }
|
|
@@ -314,111 +547,347 @@ textarea,
|
|
|
314
547
|
input { width: 100%; border-radius: var(--radius-sm); padding: 10px 11px; resize: none; font-size: 14px; line-height: 1.5; }
|
|
315
548
|
textarea::placeholder,
|
|
316
549
|
input::placeholder { color: var(--faint); }
|
|
317
|
-
|
|
550
|
+
textarea:disabled,
|
|
551
|
+
input:disabled,
|
|
552
|
+
select:disabled { color: var(--faint); background-color: var(--surface-soft); border-color: var(--border-soft); cursor: not-allowed; }
|
|
553
|
+
select {
|
|
554
|
+
min-height: 38px;
|
|
555
|
+
border-radius: var(--radius-sm);
|
|
556
|
+
padding: 7px 32px 7px 11px;
|
|
557
|
+
font-size: 13.5px;
|
|
558
|
+
appearance: none;
|
|
559
|
+
background-image: var(--chevron);
|
|
560
|
+
background-repeat: no-repeat;
|
|
561
|
+
background-position: right 10px center;
|
|
562
|
+
background-size: 12px 12px;
|
|
563
|
+
}
|
|
318
564
|
.inline-form > div { display: grid; grid-template-columns: minmax(0, 1fr) auto; gap: 8px; }
|
|
319
565
|
.child-controls { display: grid; grid-template-columns: 1fr 1fr; gap: 8px; }
|
|
320
|
-
.rail-footer { padding:
|
|
321
|
-
.rail-footer span { display: block; }
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
.
|
|
329
|
-
.
|
|
330
|
-
|
|
331
|
-
.
|
|
332
|
-
.
|
|
333
|
-
|
|
334
|
-
.
|
|
335
|
-
.
|
|
336
|
-
.
|
|
337
|
-
.
|
|
338
|
-
.
|
|
566
|
+
.rail-footer { padding: 2px 3px 0; color: var(--faint); font: 11px/1.6 var(--font-mono); }
|
|
567
|
+
.rail-footer span { display: block; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
|
|
568
|
+
|
|
569
|
+
/* One shrinkable column. With the implicit `auto` track, the widest unbreakable
|
|
570
|
+
line inside — a session-switch notice is a full session id, an error notice a
|
|
571
|
+
whole message — set the conversation's minimum width, so beside the document
|
|
572
|
+
it stopped shrinking and was clipped under it instead. The inline-size
|
|
573
|
+
container lets the paddings below follow the column rather than the window. */
|
|
574
|
+
.conversation { display: grid; grid-template-columns: minmax(0, 1fr); grid-template-rows: auto minmax(0, 1fr) auto; overflow: hidden; container-type: inline-size; }
|
|
575
|
+
.conversation-header { display: flex; flex-direction: column; align-items: stretch; gap: 0; padding: 17px 24px 15px; border-bottom: 1px solid var(--border-soft); }
|
|
576
|
+
.conversation-heading { display: flex; align-items: center; justify-content: space-between; gap: 20px; min-width: 0; }
|
|
577
|
+
.conversation-heading > div:first-child { min-width: 0; }
|
|
578
|
+
.conversation-header h2 { max-width: min(70%, 780px); margin: 6px 0 0; overflow: hidden; color: var(--text); font: 600 clamp(21px, 1.3vw, 25px)/1.1 var(--font-mono); letter-spacing: -0.02em; text-overflow: ellipsis; white-space: nowrap; }
|
|
579
|
+
#session-search-button[aria-expanded="true"] { color: var(--accent); background: var(--accent-soft); }
|
|
580
|
+
.session-search { display: flex; align-items: center; gap: 8px; margin-top: 12px; padding-top: 12px; border-top: 1px solid var(--border-soft); }
|
|
581
|
+
.session-search-field { flex: 1 1 auto; min-width: 0; display: flex; align-items: center; gap: 8px; height: 34px; padding: 0 10px; border: 1px solid var(--border); border-radius: var(--radius-sm); background: var(--surface-input); color: var(--faint); }
|
|
582
|
+
.session-search-field:focus-within { border-color: color-mix(in srgb, var(--accent) 55%, var(--border)); box-shadow: 0 0 0 3px var(--accent-soft); }
|
|
583
|
+
.session-search-field svg { width: 15px; height: 15px; flex: 0 0 auto; fill: none; stroke: currentColor; stroke-width: 1.7; stroke-linecap: round; stroke-linejoin: round; }
|
|
584
|
+
.session-search-field input { width: 100%; height: 100%; padding: 0; border: 0; border-radius: 0; background: transparent; color: var(--text); font-size: 14px; line-height: 1.4; }
|
|
585
|
+
.session-search-field input:focus-visible { outline: none; }
|
|
586
|
+
.session-search-count { flex: 0 0 auto; min-width: 4.6em; color: var(--faint); font: 12px/1 var(--font-mono); font-variant-numeric: tabular-nums; text-align: right; }
|
|
587
|
+
.session-search-nav { display: flex; align-items: center; gap: 2px; flex: 0 0 auto; }
|
|
588
|
+
.session-search-nav .icon-button { width: 28px; min-height: 28px; }
|
|
589
|
+
.session-search-nav .icon-button:disabled { opacity: 0.38; cursor: default; background: transparent; color: var(--faint); }
|
|
590
|
+
.session-search-nav .icon-button svg { width: 15px; height: 15px; }
|
|
591
|
+
.session-health { justify-content: flex-end; gap: 11px; max-width: 45%; min-width: 0; }
|
|
592
|
+
.session-health > * { flex: 0 0 auto; }
|
|
593
|
+
.session-health > #model-name { flex: 0 1 auto; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
|
|
594
|
+
.status-chip { padding: 6px 10px; border: 1px solid var(--border); border-radius: 999px; color: var(--muted); background: var(--surface-soft); font: 650 11.5px/1 var(--font-mono); letter-spacing: 0.08em; }
|
|
595
|
+
.status-chip.running { border-color: color-mix(in srgb, var(--live) 38%, var(--border)); color: var(--live); background: var(--live-soft); }
|
|
596
|
+
.status-chip.failed { border-color: color-mix(in srgb, var(--rust) 38%, var(--border)); color: var(--rust); background: var(--rust-soft); }
|
|
597
|
+
|
|
598
|
+
.transcript { min-height: 0; overflow: auto; padding: 32px min(clamp(24px, 4vw, 72px), max(18px, 6cqi)) 36px; scroll-behavior: auto; scroll-padding-block: 24px; }
|
|
599
|
+
.virtual-spacer { width: 1px; min-height: 0; margin: 0 auto; pointer-events: none; }
|
|
600
|
+
.empty-transcript { min-height: 100%; display: grid; place-items: center; color: var(--muted); }
|
|
601
|
+
.empty-transcript > div { max-width: 520px; }
|
|
602
|
+
.empty-transcript strong { display: block; margin-bottom: 12px; color: var(--text); font-size: 24px; font-weight: 750; letter-spacing: -0.025em; }
|
|
603
|
+
.empty-transcript span { display: block; color: var(--muted); font-size: 14.5px; line-height: 1.65; }
|
|
604
|
+
.transcript-suggestions { display: flex; flex-direction: column; gap: 7px; margin-top: 22px; }
|
|
605
|
+
.transcript-suggestions button {
|
|
606
|
+
display: flex;
|
|
607
|
+
align-items: center;
|
|
608
|
+
gap: 10px;
|
|
609
|
+
padding: 12px 14px;
|
|
610
|
+
text-align: left;
|
|
611
|
+
border: 1px solid var(--border-soft);
|
|
612
|
+
border-radius: var(--radius-md);
|
|
613
|
+
background: var(--surface);
|
|
614
|
+
color: var(--text-soft);
|
|
615
|
+
cursor: pointer;
|
|
616
|
+
font-size: 13.5px;
|
|
617
|
+
line-height: 1.45;
|
|
618
|
+
transition: color 150ms var(--motion-out), border-color 150ms var(--motion-out), background-color 150ms var(--motion-out), transform 150ms var(--motion-out);
|
|
619
|
+
}
|
|
620
|
+
.transcript-suggestions button::before { content: "›"; color: var(--accent); font: 600 15px/1 var(--font-mono); }
|
|
621
|
+
.transcript-suggestions button:hover { color: var(--text); border-color: var(--border-strong); transform: translateY(-1px); box-shadow: var(--shadow-soft); }
|
|
622
|
+
|
|
623
|
+
.message { max-width: 800px; margin: 0 auto 28px; }
|
|
624
|
+
.message-meta { display: flex; align-items: center; gap: 9px; margin-bottom: 10px; color: var(--faint); font: 600 11px/1 var(--font-mono); text-transform: uppercase; letter-spacing: 0.13em; }
|
|
625
|
+
.message-meta::after { content: ""; flex: 1 1 auto; height: 1px; background: var(--border-soft); }
|
|
626
|
+
.message-meta .role-dot { width: 6px; height: 6px; border-radius: 50%; background: var(--faint); }
|
|
627
|
+
.message.user .role-dot { background: var(--lichen); }
|
|
339
628
|
.message.assistant .role-dot,
|
|
340
629
|
.message.streaming .role-dot { background: var(--accent); }
|
|
341
|
-
.message.tool .role-dot { background: var(--
|
|
342
|
-
.message-body { color: var(--text-soft); font-size: 15.5px; line-height: 1.
|
|
343
|
-
.message.user .message-body {
|
|
630
|
+
.message.tool .role-dot { background: var(--honey); }
|
|
631
|
+
.message-body { color: var(--text-soft); font-size: 15.5px; line-height: 1.78; overflow-wrap: anywhere; white-space: pre-wrap; }
|
|
632
|
+
.message.user .message-body {
|
|
633
|
+
padding: 13px 15px;
|
|
634
|
+
border-left: 2px solid color-mix(in srgb, var(--lichen) 48%, transparent);
|
|
635
|
+
border-radius: 0 var(--radius-sm) var(--radius-sm) 0;
|
|
636
|
+
background: var(--lichen-soft);
|
|
637
|
+
}
|
|
344
638
|
.message pre,
|
|
345
639
|
.activity-detail,
|
|
346
|
-
.approval-command { max-width: 100%; overflow: auto; padding:
|
|
347
|
-
.message
|
|
348
|
-
|
|
640
|
+
.approval-command { max-width: 100%; overflow: auto; padding: 13px 15px; border: 1px solid var(--border-soft); border-radius: var(--radius-sm); background: var(--surface-soft); color: var(--text-soft); font: 13px/1.7 var(--font-mono); white-space: pre; tab-size: 2; }
|
|
641
|
+
.message-body > pre { margin: 14px 0; }
|
|
642
|
+
|
|
643
|
+
/* Markdown blocks: prose keeps `pre-wrap` only for messages that render as plain text. */
|
|
644
|
+
.message-body.markdown { white-space: normal; }
|
|
645
|
+
.message-body.markdown > :first-child { margin-top: 0; }
|
|
646
|
+
.message-body.markdown > :last-child { margin-bottom: 0; }
|
|
647
|
+
.md-p { margin: 0 0 12px; }
|
|
648
|
+
.md-h { margin: 22px 0 10px; color: var(--text); font-family: var(--font-sans); font-weight: 700; letter-spacing: -0.02em; line-height: 1.35; }
|
|
649
|
+
.md-h1 { font-size: 21px; }
|
|
650
|
+
.md-h2 { font-size: 19px; }
|
|
651
|
+
.md-h3 { font-size: 17px; }
|
|
652
|
+
.md-h4,
|
|
653
|
+
.md-h5,
|
|
654
|
+
.md-h6 { font-size: 15.5px; }
|
|
655
|
+
.md-h5,
|
|
656
|
+
.md-h6 { color: var(--muted); }
|
|
657
|
+
.md-h1,
|
|
658
|
+
.md-h2 { padding-bottom: 7px; border-bottom: 1px solid var(--border-soft); }
|
|
659
|
+
.md-rule { height: 0; margin: 20px 0; border: 0; border-top: 1px solid var(--border); }
|
|
660
|
+
|
|
661
|
+
.md-list { margin: 0 0 12px; padding-left: 22px; }
|
|
662
|
+
.md-list li { margin: 5px 0; }
|
|
663
|
+
.md-list li::marker { color: var(--faint); font-variant-numeric: tabular-nums; }
|
|
664
|
+
.md-list .md-list { margin: 5px 0 0; }
|
|
665
|
+
.md-list li.md-task { list-style: none; margin-left: -22px; padding-left: 0; display: flex; align-items: flex-start; gap: 9px; }
|
|
666
|
+
.md-check { flex: 0 0 auto; width: 15px; height: 15px; margin-top: 4px; display: inline-flex; align-items: center; justify-content: center; border: 1px solid var(--border-strong); border-radius: 4px; color: var(--live); background: var(--surface-input); font: 700 11px/1 var(--font-mono); }
|
|
667
|
+
.md-check.checked { border-color: color-mix(in srgb, var(--live) 55%, var(--border)); background: var(--live-soft); }
|
|
668
|
+
|
|
669
|
+
.md-quote { margin: 0 0 14px; padding: 3px 0 3px 15px; border-left: 2px solid var(--border-strong); color: var(--muted); }
|
|
670
|
+
.md-quote > :last-child { margin-bottom: 0; }
|
|
671
|
+
|
|
672
|
+
.md-code { margin: 14px 0; border: 1px solid var(--border-soft); border-radius: var(--radius-sm); background: var(--surface-soft); overflow: hidden; }
|
|
673
|
+
.md-code-bar { display: flex; align-items: center; justify-content: space-between; gap: 12px; padding: 7px 11px 7px 14px; border-bottom: 1px solid var(--border-soft); }
|
|
674
|
+
.md-code-lang { color: var(--faint); font: 600 11.5px/1 var(--font-mono); letter-spacing: 0.1em; text-transform: uppercase; }
|
|
675
|
+
.md-copy { min-height: 24px; padding: 0 9px; border: 1px solid transparent; border-radius: var(--radius-sm); color: var(--muted); background: transparent; cursor: pointer; font: 600 11.5px/1 var(--font-mono); }
|
|
676
|
+
.md-copy:hover { color: var(--text); border-color: var(--border); background: var(--surface-hover); }
|
|
677
|
+
.md-code pre { margin: 0; border: 0; border-radius: 0; background: transparent; }
|
|
678
|
+
.md-code.streaming .md-code-lang::after { content: " ·"; color: var(--accent); }
|
|
679
|
+
.md-copy-carrier { position: fixed; top: -1000px; left: -1000px; width: 1px; height: 1px; opacity: 0; }
|
|
680
|
+
|
|
681
|
+
.md-table-wrap { max-width: 100%; margin: 14px 0; overflow-x: auto; border: 1px solid var(--border-soft); border-radius: var(--radius-sm); }
|
|
682
|
+
.md-table { width: 100%; border-collapse: collapse; font-size: 14px; }
|
|
683
|
+
.md-table th,
|
|
684
|
+
.md-table td { padding: 9px 13px; border-bottom: 1px solid var(--border-soft); text-align: left; vertical-align: top; }
|
|
685
|
+
.md-table th { color: var(--text); background: var(--surface-raised); font: 650 12.5px/1.5 var(--font-mono); letter-spacing: 0.04em; white-space: nowrap; }
|
|
686
|
+
.md-table tbody tr:last-child td { border-bottom: 0; }
|
|
687
|
+
.md-table tbody tr:hover td { background: var(--surface-hover); }
|
|
688
|
+
.md-align-left { text-align: left; }
|
|
689
|
+
.md-align-center { text-align: center; }
|
|
690
|
+
.md-align-right { text-align: right; font-variant-numeric: tabular-nums; }
|
|
691
|
+
|
|
692
|
+
.md-code-span { padding: 2px 5px; border: 1px solid var(--border-soft); border-radius: 4px; color: var(--text); background: var(--surface-soft); font: 0.88em/1.4 var(--font-mono); overflow-wrap: anywhere; }
|
|
693
|
+
.message-body strong { color: var(--text); font-weight: 700; }
|
|
694
|
+
.message-body em { font-style: italic; }
|
|
695
|
+
.message-body s { color: var(--faint); }
|
|
696
|
+
.md-link { color: var(--accent); text-decoration: underline; text-decoration-color: color-mix(in srgb, var(--accent) 40%, transparent); text-underline-offset: 3px; }
|
|
697
|
+
.md-local-link { display: inline; padding: 0; border: 0; background: none; font: inherit; cursor: pointer; overflow-wrap: anywhere; }
|
|
698
|
+
.md-local-link.md-code-span { padding: 2px 5px; border: 1px solid var(--border-soft); background: var(--surface-soft); font: 0.88em/1.4 var(--font-mono); }
|
|
699
|
+
.md-local-link:hover { text-decoration-color: currentColor; }
|
|
700
|
+
.md-local-link:focus-visible { outline: 2px solid var(--accent); outline-offset: 2px; border-radius: 2px; }
|
|
701
|
+
.md-local-link:disabled { cursor: wait; opacity: 0.7; }
|
|
702
|
+
.md-local-reveal {
|
|
703
|
+
display: inline-flex;
|
|
704
|
+
align-items: center;
|
|
705
|
+
justify-content: center;
|
|
706
|
+
width: 1.15em;
|
|
707
|
+
height: 1.15em;
|
|
708
|
+
margin: 0 1px 0 3px;
|
|
709
|
+
padding: 0;
|
|
710
|
+
border: 0;
|
|
711
|
+
border-radius: 4px;
|
|
712
|
+
vertical-align: -0.18em;
|
|
713
|
+
color: var(--accent);
|
|
714
|
+
background: var(--accent-soft);
|
|
715
|
+
cursor: pointer;
|
|
716
|
+
}
|
|
717
|
+
.md-local-reveal svg { width: 0.82em; height: 0.82em; fill: none; stroke: currentColor; stroke-width: 1.7; stroke-linecap: round; stroke-linejoin: round; }
|
|
718
|
+
.md-local-reveal:hover { color: var(--accent-strong); background: color-mix(in srgb, var(--accent) 16%, transparent); }
|
|
719
|
+
.md-local-reveal:focus-visible { outline: 2px solid var(--accent); outline-offset: 1px; }
|
|
720
|
+
.md-local-reveal:disabled { cursor: wait; opacity: 0.55; }
|
|
721
|
+
.md-link-error { margin-left: 5px; color: var(--rust); font-size: 0.85em; }
|
|
722
|
+
.local-link-menu { position: fixed; z-index: 40; min-width: 188px; display: flex; flex-direction: column; gap: 2px; padding: 4px; border: 1px solid var(--border); border-radius: var(--radius-md); background: var(--surface); box-shadow: var(--shadow-drawer); }
|
|
723
|
+
.local-link-menu-item { width: 100%; padding: 8px 10px; border: 0; border-radius: var(--radius-sm); background: transparent; color: var(--text); cursor: pointer; font: 13.5px/1.3 var(--font-sans); text-align: left; }
|
|
724
|
+
.local-link-menu-item:hover,
|
|
725
|
+
.local-link-menu-item:focus-visible { background: var(--surface-hover); outline: none; }
|
|
726
|
+
mark.session-find-hit { padding: 0 0.05em; border-radius: 3px; color: inherit; background: color-mix(in srgb, var(--honey) 34%, transparent); }
|
|
727
|
+
mark.session-find-hit.current { background: color-mix(in srgb, var(--accent) 36%, transparent); box-shadow: inset 0 -1.5px 0 var(--accent); }
|
|
728
|
+
.md-link-url { margin-left: 5px; color: var(--faint); font: 0.82em/1.4 var(--font-mono); overflow-wrap: anywhere; }
|
|
729
|
+
.md-link-url::before { content: "("; }
|
|
730
|
+
.md-link-url::after { content: ")"; }
|
|
731
|
+
.message details { border: 1px solid var(--border-soft); border-radius: var(--radius-md); background: var(--surface-soft); }
|
|
732
|
+
.message details summary { padding: 11px 14px; cursor: pointer; color: var(--muted); font: 12.5px/1 var(--font-mono); }
|
|
733
|
+
.message details summary:hover { color: var(--text-soft); }
|
|
349
734
|
.message details pre { margin: 0; border-width: 1px 0 0; border-radius: 0 0 var(--radius-md) var(--radius-md); max-height: 360px; }
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
.
|
|
353
|
-
.
|
|
354
|
-
.
|
|
355
|
-
.
|
|
356
|
-
.
|
|
357
|
-
.
|
|
735
|
+
/* Offered on a message the daemon had to cut at its publishing ceiling. */
|
|
736
|
+
.message-truncated { display: flex; align-items: center; justify-content: space-between; gap: 12px; flex-wrap: wrap; margin-top: 12px; padding: 9px 12px; border: 1px dashed var(--border-soft); border-radius: var(--radius-sm); background: var(--surface-soft); }
|
|
737
|
+
.message-truncated span { color: var(--faint); font: 12px/1.5 var(--font-mono); }
|
|
738
|
+
.message-truncated button { padding: 5px 12px; font-size: 12.5px; }
|
|
739
|
+
.thinking-stream { margin: 0 0 12px; border: 1px solid color-mix(in srgb, var(--accent) 24%, var(--border-soft)); border-radius: var(--radius-sm); background: color-mix(in srgb, var(--surface-soft) 88%, var(--accent-soft)); overflow: hidden; }
|
|
740
|
+
.thinking-stream > header { display: flex; align-items: center; justify-content: space-between; gap: 12px; padding: 8px 11px; border-bottom: 1px solid var(--border-soft); }
|
|
741
|
+
.thinking-stream > header strong { color: var(--muted); font: 650 11.5px/1 var(--font-mono); letter-spacing: 0.08em; }
|
|
742
|
+
.thinking-stream > header span { color: var(--faint); font: 11px/1 var(--font-mono); }
|
|
743
|
+
.thinking-stream-body { max-height: 180px; padding: 10px 12px; overflow: auto; color: var(--muted); font: 12.5px/1.65 var(--font-mono); white-space: pre-wrap; overflow-wrap: anywhere; }
|
|
744
|
+
.process-message { min-width: 0; }
|
|
745
|
+
.message .process-details { background: transparent; }
|
|
746
|
+
.message .process-summary { line-height: 1.6; overflow-wrap: anywhere; }
|
|
747
|
+
.process-message[data-active="true"] > .process-details { border-color: var(--border-strong); }
|
|
748
|
+
.process-body { min-width: 0; padding: 8px 14px 14px; border-top: 1px solid var(--border-soft); }
|
|
749
|
+
.process-body > .message { margin: 12px 0; }
|
|
750
|
+
.process-body .message-meta { font-size: 11.5px; }
|
|
751
|
+
.settled-thinking { margin: 0; }
|
|
752
|
+
.tool-call { min-width: 0; margin-top: 10px; }
|
|
753
|
+
.message .tool-call-summary { display: flex; align-items: baseline; gap: 10px; line-height: 1.5; }
|
|
754
|
+
.tool-call-summary::before { content: "›"; flex: 0 0 auto; }
|
|
755
|
+
.tool-call > details[open] > .tool-call-summary::before { content: "⌄"; }
|
|
756
|
+
.tool-call-summary::-webkit-details-marker { display: none; }
|
|
757
|
+
.tool-call-name { flex: 0 1 auto; color: var(--text-soft); overflow-wrap: anywhere; }
|
|
758
|
+
.tool-call-target { min-width: 0; flex: 1; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
|
|
759
|
+
.tool-call-status { flex: 0 0 auto; color: var(--muted); font-size: 11.5px; }
|
|
760
|
+
.tool-call-status.error { color: var(--rust); }
|
|
761
|
+
.tool-section-label { padding: 10px 14px 6px; color: var(--muted); font-size: 11.5px; border-top: 1px solid var(--border-soft); }
|
|
762
|
+
.message .tool-call pre { border: 0; border-radius: 0; max-height: 280px; white-space: pre-wrap; overflow-wrap: anywhere; }
|
|
763
|
+
.stream-cursor { display: inline-block; width: 7px; height: 15px; margin-left: 4px; vertical-align: -2px; background: var(--accent); animation: blink 1s step-end infinite; }
|
|
764
|
+
|
|
765
|
+
.composer-wrap { position: relative; min-width: 0; padding: 0 20px 16px; background: linear-gradient(180deg, transparent, var(--surface) 18%); }
|
|
766
|
+
.notice-line { height: 26px; padding: 5px 3px 0; color: var(--muted); font-size: 12px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
|
|
767
|
+
.message-queue { display: flex; flex-direction: column; gap: 6px; max-height: 142px; margin: 0 0 8px; overflow: auto; }
|
|
768
|
+
.queue-message { display: grid; grid-template-columns: auto minmax(0, 1fr) auto; align-items: center; gap: 9px; padding: 7px 8px 7px 10px; border: 1px solid var(--border-soft); border-radius: var(--radius-sm); background: var(--surface-soft); }
|
|
769
|
+
.queue-message.direct { grid-template-columns: auto minmax(0, 1fr); border-color: color-mix(in srgb, var(--honey) 42%, var(--border-soft)); }
|
|
770
|
+
.queue-message > span { color: var(--honey); font: 600 11px/1 var(--font-mono); white-space: nowrap; }
|
|
771
|
+
.queue-message > p { min-width: 0; margin: 0; color: var(--text-soft); font-size: 12.5px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
|
|
772
|
+
.queue-message > button { min-height: 28px; padding: 4px 8px; font-size: 11.5px; }
|
|
773
|
+
.composer { position: relative; border: 1px solid var(--border); border-radius: var(--radius-md); background: var(--surface-input); box-shadow: var(--shadow-soft); }
|
|
774
|
+
.composer:focus-within { border-color: color-mix(in srgb, var(--accent) 55%, var(--border)); box-shadow: 0 0 0 3px var(--accent-soft); }
|
|
775
|
+
.composer[data-drop-active="true"] { border-color: var(--accent); box-shadow: 0 0 0 3px var(--accent-soft); }
|
|
776
|
+
.composer-drop-overlay { position: absolute; inset: -1px; z-index: 4; display: grid; place-content: center; gap: 7px; padding: 18px; text-align: center; border: 1px dashed var(--accent); border-radius: var(--radius-md); color: var(--accent); background: color-mix(in srgb, var(--surface-input) 94%, var(--accent-soft)); pointer-events: none; }
|
|
777
|
+
.composer-drop-overlay strong { font-size: 15px; font-weight: 700; }
|
|
778
|
+
.composer-drop-overlay span { color: var(--muted); font-size: 12.5px; }
|
|
779
|
+
.composer textarea { min-height: 62px; max-height: 180px; border: 0; border-radius: var(--radius-md) var(--radius-md) 0 0; background: transparent; padding: 13px 15px; font-size: 15px; line-height: 1.6; }
|
|
780
|
+
.composer textarea:focus-visible { outline: 0; }
|
|
781
|
+
.composer-references { display: flex; flex-wrap: wrap; gap: 6px; max-height: 88px; padding: 0 10px 10px; overflow: auto; }
|
|
782
|
+
.composer-reference { min-width: 0; max-width: min(100%, 440px); display: flex; align-items: center; gap: 7px; padding: 5px 6px 5px 8px; border: 1px solid color-mix(in srgb, var(--accent) 24%, var(--border)); border-radius: 999px; color: var(--text-soft); background: var(--accent-soft); }
|
|
783
|
+
.composer-reference-kind { flex: 0 0 auto; color: var(--accent); font: 650 10.5px/1 var(--font-mono); letter-spacing: 0.04em; }
|
|
784
|
+
.composer-reference-path { min-width: 0; overflow: hidden; font: 11.5px/1.35 var(--font-mono); text-overflow: ellipsis; white-space: nowrap; }
|
|
785
|
+
.composer-reference-remove { width: 22px; min-height: 22px; flex: 0 0 auto; padding: 0; border: 0; border-radius: 50%; color: var(--muted); background: transparent; cursor: pointer; font: 16px/1 var(--font-sans); }
|
|
786
|
+
.composer-reference-remove:hover { color: var(--rust); background: var(--rust-soft); }
|
|
358
787
|
.composer-toolbar { display: flex; align-items: center; justify-content: space-between; gap: 12px; padding: 8px; border-top: 1px solid var(--border-soft); }
|
|
359
|
-
|
|
360
|
-
|
|
788
|
+
/* The hint gives way; the controls do not. Wrapping a button label reads as a
|
|
789
|
+
broken layout, and there are enough of them now for a narrow conversation to
|
|
790
|
+
force it. */
|
|
791
|
+
.send-behavior-hint { flex: 0 1 auto; min-width: 0; padding-left: 5px; overflow: hidden; color: var(--faint); font-size: 11.5px; text-overflow: ellipsis; white-space: nowrap; }
|
|
792
|
+
.composer-actions { flex: 0 0 auto; }
|
|
793
|
+
.composer-actions > button { white-space: nowrap; }
|
|
361
794
|
.composer-actions { gap: 7px; }
|
|
362
795
|
|
|
363
|
-
.
|
|
364
|
-
.inspector-
|
|
365
|
-
.inspector-
|
|
366
|
-
.inspector-tab { min-height: 38px; padding: 0 4px; border: 0; border-radius: 7px; color: var(--muted); background: transparent; cursor: pointer; font-size: 12.5px; }
|
|
796
|
+
.inspector-header { display: flex; align-items: center; justify-content: space-between; padding: 17px 18px 14px; }
|
|
797
|
+
.inspector-tabs { display: grid; grid-template-columns: repeat(4, 1fr); gap: 2px; padding: 8px 10px; border-bottom: 1px solid var(--border-soft); }
|
|
798
|
+
.inspector-tab { min-height: 34px; padding: 0 4px; border: 1px solid transparent; border-radius: var(--radius-sm); color: var(--muted); background: transparent; cursor: pointer; font-size: 12.5px; transition: color 150ms var(--motion-out), background-color 150ms var(--motion-out), border-color 150ms var(--motion-out); }
|
|
367
799
|
.inspector-tab:hover { color: var(--text); background: var(--surface-hover); }
|
|
368
|
-
.inspector-tab.selected { color: var(--text); background: var(--surface-raised); box-shadow:
|
|
800
|
+
.inspector-tab.selected { color: var(--text); border-color: var(--border); background: var(--surface-raised); box-shadow: var(--shadow-soft); }
|
|
369
801
|
.inspector-content { min-height: 0; overflow: auto; }
|
|
370
|
-
.inspector-view { padding:
|
|
371
|
-
.subsection-heading { display: flex; align-items: center; gap: 10px; margin:
|
|
802
|
+
.inspector-view { padding: 18px; }
|
|
803
|
+
.subsection-heading { display: flex; align-items: center; gap: 10px; margin: 20px 0 10px; color: var(--faint); font: 600 11.5px/1 var(--font-mono); text-transform: uppercase; letter-spacing: 0.13em; }
|
|
372
804
|
.subsection-heading::after { content: ""; height: 1px; flex: 1; background: var(--border-soft); }
|
|
373
|
-
.section-description { margin: -
|
|
805
|
+
.section-description { margin: -2px 0 14px; }
|
|
374
806
|
|
|
375
807
|
.activity-list,
|
|
376
|
-
.dense-list { display: flex; flex-direction: column; gap:
|
|
808
|
+
.dense-list { display: flex; flex-direction: column; gap: 7px; }
|
|
377
809
|
.activity-card,
|
|
378
810
|
.dense-item { padding: 11px 12px; border: 1px solid var(--border-soft); border-radius: var(--radius-md); background: var(--surface-soft); min-width: 0; }
|
|
811
|
+
.activity-card[data-status="running"] { border-color: color-mix(in srgb, var(--live) 26%, var(--border-soft)); }
|
|
812
|
+
.activity-card[data-status="failed"] { border-color: color-mix(in srgb, var(--rust) 26%, var(--border-soft)); }
|
|
379
813
|
.activity-card header,
|
|
380
814
|
.dense-item header { display: flex; align-items: center; justify-content: space-between; gap: 9px; }
|
|
381
815
|
.activity-card b,
|
|
382
|
-
.dense-item b { min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; font-size:
|
|
816
|
+
.dense-item b { min-width: 0; display: flex; align-items: center; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; font-size: 13px; font-weight: 650; }
|
|
383
817
|
.activity-card time,
|
|
384
818
|
.dense-item small { color: var(--faint); font: 11.5px/1 var(--font-mono); white-space: nowrap; font-variant-numeric: tabular-nums; }
|
|
385
819
|
.activity-card p,
|
|
386
|
-
.dense-item p { margin: 7px 0 0; color: var(--muted); font-size: 12.5px; line-height: 1.
|
|
387
|
-
.activity-card details { margin-top:
|
|
388
|
-
.activity-card summary { color: var(--
|
|
389
|
-
.activity-
|
|
820
|
+
.dense-item p { margin: 7px 0 0; color: var(--muted); font-size: 12.5px; line-height: 1.55; overflow-wrap: anywhere; }
|
|
821
|
+
.activity-card details { margin-top: 9px; }
|
|
822
|
+
.activity-card summary { color: var(--faint); cursor: pointer; font: 11.5px/1 var(--font-mono); }
|
|
823
|
+
.activity-card summary:hover { color: var(--muted); }
|
|
824
|
+
.activity-detail { max-height: 230px; margin: 9px 0 0; font-size: 11.5px; }
|
|
390
825
|
.dense-item .item-actions { display: flex; gap: 7px; margin-top: 10px; }
|
|
391
|
-
.dense-item .item-actions button { flex: 1; min-height:
|
|
392
|
-
.state-dot { display: inline-block; width: 6px; height: 6px; margin-right:
|
|
826
|
+
.dense-item .item-actions button { flex: 1; min-height: 32px; padding: 5px 8px; }
|
|
827
|
+
.state-dot { flex: 0 0 auto; display: inline-block; width: 6px; height: 6px; margin-right: 8px; border-radius: 50%; background: var(--faint); }
|
|
393
828
|
.state-dot.ready,
|
|
394
829
|
.state-dot.active,
|
|
395
|
-
.state-dot.succeeded { background: var(--
|
|
830
|
+
.state-dot.succeeded { background: var(--live); }
|
|
396
831
|
.state-dot.running,
|
|
397
832
|
.state-dot.connecting,
|
|
398
|
-
.state-dot.starting { background: var(--
|
|
833
|
+
.state-dot.starting { background: var(--honey); }
|
|
399
834
|
.state-dot.failed,
|
|
400
835
|
.state-dot.degraded,
|
|
401
|
-
.state-dot.blocked { background: var(--
|
|
402
|
-
.empty-list { padding:
|
|
836
|
+
.state-dot.blocked { background: var(--rust); }
|
|
837
|
+
.empty-list { padding: 12px 0; color: var(--faint); font-size: 12.5px; line-height: 1.6; }
|
|
403
838
|
.inspection-result { margin-top: 14px; padding: 12px; border: 1px solid var(--border); border-radius: var(--radius-md); background: var(--surface-soft); color: var(--muted); font-size: 12.5px; overflow-wrap: anywhere; }
|
|
404
|
-
.inspection-result b { display: block; color: var(--text); margin-bottom:
|
|
405
|
-
.inspection-result p { line-height: 1.
|
|
406
|
-
.inspection-result code { display: block; color: var(--
|
|
407
|
-
.inspection-result button { width: 100%; margin-top:
|
|
839
|
+
.inspection-result b { display: block; color: var(--text); margin-bottom: 7px; font-size: 13.5px; }
|
|
840
|
+
.inspection-result p { line-height: 1.55; }
|
|
841
|
+
.inspection-result code { display: block; color: var(--text-soft); font: 11.5px/1.5 var(--font-mono); }
|
|
842
|
+
.inspection-result button { width: 100%; margin-top: 11px; }
|
|
408
843
|
|
|
409
844
|
.settings-overlay,
|
|
410
|
-
.approval-overlay { position: fixed; inset: 0; z-index: 50; display: grid; place-items: center; padding: 28px; background: var(--overlay); backdrop-filter: blur(
|
|
411
|
-
.settings-dialog { width: min(
|
|
412
|
-
.settings-header { position: sticky; top: 0; z-index: 1; display: flex; align-items: flex-start; justify-content: space-between; padding:
|
|
413
|
-
.settings-header h2 { margin:
|
|
414
|
-
.settings-header p { margin: 0; color: var(--muted); font-size: 13.5px; }
|
|
845
|
+
.approval-overlay { position: fixed; inset: 0; z-index: 50; display: grid; place-items: center; padding: 28px; background: var(--overlay); backdrop-filter: blur(10px); overscroll-behavior: contain; }
|
|
846
|
+
.settings-dialog { width: min(660px, 100%); max-height: calc(100vh - 56px); overflow: auto; border: 1px solid var(--border); border-radius: var(--radius-lg); background: var(--surface); box-shadow: var(--shadow); }
|
|
847
|
+
.settings-header { position: sticky; top: 0; z-index: 1; display: flex; align-items: flex-start; justify-content: space-between; gap: 16px; padding: 24px 26px 18px; border-bottom: 1px solid var(--border-soft); background: var(--surface); }
|
|
848
|
+
.settings-header h2 { margin: 8px 0 6px; color: var(--text); font-size: 24px; line-height: 1.15; font-weight: 750; letter-spacing: -0.03em; }
|
|
849
|
+
.settings-header p { margin: 0; color: var(--muted); font-size: 13.5px; line-height: 1.55; }
|
|
415
850
|
.settings-form { display: flex; flex-direction: column; }
|
|
416
|
-
.settings-section { padding:
|
|
417
|
-
.settings-section-title {
|
|
418
|
-
.settings-section-title
|
|
419
|
-
.settings-section-title
|
|
420
|
-
.settings-
|
|
421
|
-
.
|
|
851
|
+
.settings-section { padding: 20px 26px; border-bottom: 1px solid var(--border-soft); }
|
|
852
|
+
.settings-section-title { margin-bottom: 15px; }
|
|
853
|
+
.settings-section-title h3 { margin: 0 0 4px; color: var(--text); font-size: 15.5px; font-weight: 700; }
|
|
854
|
+
.settings-section-title p { margin: 0; color: var(--muted); font-size: 12.5px; line-height: 1.55; }
|
|
855
|
+
.settings-field-note { margin: 12px 0 0; color: var(--muted); font-size: 12.5px; line-height: 1.6; }
|
|
856
|
+
.indexing-directories { margin: 12px 0 0; }
|
|
857
|
+
.indexing-directories .subsection-heading { display: flex; align-items: center; justify-content: space-between; }
|
|
858
|
+
.indexing-dir-list { display: flex; flex-direction: column; gap: 6px; margin-top: 8px; }
|
|
859
|
+
.indexing-dir-list:empty::after { content: "尚未选择目录,启用后不会索引任何内容"; color: var(--faint); font-size: 12px; }
|
|
860
|
+
.indexing-dir { display: flex; align-items: center; gap: 8px; padding: 6px 9px; border: 1px solid var(--border); border-radius: var(--radius-sm); background: var(--surface-soft); }
|
|
861
|
+
.indexing-dir code { flex: 1 1 auto; min-width: 0; overflow-x: auto; color: var(--text); font-family: var(--font-mono); font-size: 11.5px; white-space: nowrap; }
|
|
862
|
+
.indexing-panel { margin: 0 0 18px; }
|
|
863
|
+
.indexing-bar { position: relative; height: 6px; margin: 0 0 10px; border-radius: 999px; background: var(--surface-soft); border: 1px solid var(--border-soft); overflow: hidden; }
|
|
864
|
+
.indexing-bar i { position: absolute; inset: 0 auto 0 0; width: 0; border-radius: 999px; background: var(--accent); transition: width 220ms var(--motion-out); }
|
|
865
|
+
.indexing-panel[data-phase="failed"] .indexing-bar i { background: var(--rust); }
|
|
866
|
+
/* The CLI walks and compares without reporting counts, sometimes for minutes:
|
|
867
|
+
a travelling fill says "working" where an empty bar read as a hang. */
|
|
868
|
+
.indexing-panel[data-progress="indeterminate"] .indexing-bar i {
|
|
869
|
+
inset: 0;
|
|
870
|
+
width: auto;
|
|
871
|
+
border-radius: 0;
|
|
872
|
+
background: color-mix(in srgb, var(--accent) 18%, transparent);
|
|
873
|
+
background-image: linear-gradient(90deg, transparent, var(--accent), transparent);
|
|
874
|
+
background-size: 45% 100%;
|
|
875
|
+
background-repeat: no-repeat;
|
|
876
|
+
transition: none;
|
|
877
|
+
animation: activity-travel 1.6s linear infinite;
|
|
878
|
+
}
|
|
879
|
+
.indexing-panel[data-phase="idle"] .indexing-bar i { background: var(--live); }
|
|
880
|
+
.indexing-panel[data-phase="disabled"] .indexing-bar,
|
|
881
|
+
.indexing-panel[data-phase="unconfigured"] .indexing-bar,
|
|
882
|
+
.indexing-panel[data-phase="unavailable"] .indexing-bar { opacity: 0.45; }
|
|
883
|
+
.indexing-counts { margin: 0; color: var(--text-soft); font-size: 12.5px; }
|
|
884
|
+
.indexing-current { margin: 4px 0 0; color: var(--faint); font-size: 11.5px; font-family: var(--font-mono); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
|
|
885
|
+
.indexing-current:empty { display: none; }
|
|
886
|
+
.settings-path-note { display: flex; align-items: center; flex-wrap: wrap; gap: 8px; margin: 10px 0 0; color: var(--muted); font-size: 12px; line-height: 1.6; }
|
|
887
|
+
.settings-path-note code { flex: 1 1 220px; min-width: 0; overflow-x: auto; padding: 4px 8px; border: 1px solid var(--border); border-radius: var(--radius-sm); background: var(--surface-soft); color: var(--text); font-family: var(--font-mono); font-size: 11.5px; white-space: nowrap; }
|
|
888
|
+
.settings-path-state { flex: 0 0 auto; padding: 2px 8px; border-radius: 999px; border: 1px solid var(--border); font-size: 11.5px; }
|
|
889
|
+
.settings-path-state[data-state="present"] { border-color: color-mix(in srgb, var(--live) 46%, var(--border)); color: var(--live); }
|
|
890
|
+
.settings-danger-note { margin: 10px 0 0; padding: 11px 13px; border: 1px solid color-mix(in srgb, var(--honey) 46%, var(--border)); border-radius: var(--radius-sm); color: var(--honey); background: var(--honey-soft); font-size: 12.5px; line-height: 1.65; }
|
|
422
891
|
.settings-section > label:not(.checkbox-field),
|
|
423
892
|
.field-grid > label { display: flex; flex-direction: column; gap: 7px; }
|
|
424
893
|
.settings-section > label + .field-grid,
|
|
@@ -427,63 +896,64 @@ select { min-height: 40px; border-radius: var(--radius-sm); padding: 7px 34px 7p
|
|
|
427
896
|
.field-grid { display: grid; gap: 12px; }
|
|
428
897
|
.field-grid.two-columns { grid-template-columns: repeat(2, minmax(0, 1fr)); }
|
|
429
898
|
.settings-form input,
|
|
430
|
-
.settings-form select { min-height:
|
|
899
|
+
.settings-form select { min-height: 40px; font-size: 14px; }
|
|
431
900
|
.checkbox-field { display: flex; align-items: flex-start; gap: 11px; padding: 11px 12px; border: 1px solid var(--border-soft); border-radius: var(--radius-md); background: var(--surface-soft); cursor: pointer; }
|
|
432
|
-
.checkbox-field input { width:
|
|
901
|
+
.checkbox-field input { width: 15px; min-height: 15px; margin: 3px 0 0; accent-color: var(--rust); }
|
|
433
902
|
.checkbox-field span { display: block; min-width: 0; }
|
|
434
903
|
.checkbox-field b,
|
|
435
904
|
.checkbox-field small { display: block; }
|
|
436
905
|
.checkbox-field b { color: var(--text); font-size: 13.5px; font-weight: 650; }
|
|
437
|
-
.checkbox-field small { margin-top:
|
|
438
|
-
.checkbox-field.destructive:has(input:checked) { border-color: color-mix(in srgb, var(--
|
|
906
|
+
.checkbox-field small { margin-top: 4px; color: var(--muted); font-size: 12px; line-height: 1.45; }
|
|
907
|
+
.checkbox-field.destructive:has(input:checked) { border-color: color-mix(in srgb, var(--rust) 42%, var(--border)); background: var(--rust-soft); }
|
|
439
908
|
.secret-input { display: grid; grid-template-columns: minmax(0, 1fr) auto; align-items: center; border: 1px solid var(--border); border-radius: var(--radius-sm); background: var(--surface-input); }
|
|
440
|
-
.secret-input:focus-within { outline: 2px solid var(--accent); outline-offset: 2px; }
|
|
909
|
+
.secret-input:focus-within { outline: 2px solid color-mix(in srgb, var(--accent) 72%, transparent); outline-offset: 2px; }
|
|
441
910
|
.secret-input input { border: 0; background: transparent; }
|
|
442
911
|
.secret-input input:focus-visible { outline: 0; }
|
|
443
|
-
.settings-footer { position: sticky; bottom: 0; display: flex; align-items: center; justify-content: space-between; gap: 18px; padding: 16px
|
|
444
|
-
.settings-footer p { min-width: 0; margin: 0; color: var(--muted); font-size: 12.5px; line-height: 1.
|
|
912
|
+
.settings-footer { position: sticky; bottom: 0; display: flex; align-items: center; justify-content: space-between; gap: 18px; padding: 16px 26px; border-top: 1px solid var(--border-soft); background: var(--surface); }
|
|
913
|
+
.settings-footer p { min-width: 0; margin: 0; color: var(--muted); font-size: 12.5px; line-height: 1.45; }
|
|
445
914
|
.settings-footer > div { flex: 0 0 auto; gap: 8px; }
|
|
446
915
|
|
|
447
|
-
.approval-dialog { width: min(
|
|
448
|
-
.approval-icon {
|
|
449
|
-
.approval-dialog h2 { margin: 9px 0; font-size:
|
|
450
|
-
.approval-dialog > p { margin: 0 0
|
|
451
|
-
.approval-details { display: grid; grid-template-columns: 1fr; gap: 1px; overflow: hidden; border: 1px solid var(--border); border-radius: var(--radius-md); }
|
|
452
|
-
.approval-details div { display: grid; grid-template-columns:
|
|
453
|
-
.approval-details dt { color: var(--
|
|
916
|
+
.approval-dialog { position: relative; width: min(580px, 100%); max-height: calc(100vh - 64px); overflow: auto; padding: 26px 28px 24px; border: 1px solid color-mix(in srgb, var(--honey) 42%, var(--border)); border-radius: var(--radius-lg); background: var(--surface); box-shadow: var(--shadow); }
|
|
917
|
+
.approval-icon { position: absolute; top: 26px; right: 28px; display: grid; place-items: center; width: 34px; height: 34px; border: 1px solid color-mix(in srgb, var(--honey) 48%, var(--border)); border-radius: 50%; color: var(--honey); background: var(--honey-soft); font: 700 17px/1 var(--font-mono); }
|
|
918
|
+
.approval-dialog h2 { margin: 9px 44px 10px 0; font-size: 22px; line-height: 1.25; font-weight: 750; letter-spacing: -0.025em; }
|
|
919
|
+
.approval-dialog > p { margin: 0 0 18px; color: var(--text-soft); font-size: 14.5px; line-height: 1.65; }
|
|
920
|
+
.approval-details { display: grid; grid-template-columns: 1fr; gap: 1px; overflow: hidden; border: 1px solid var(--border-soft); border-radius: var(--radius-md); background: var(--border-soft); }
|
|
921
|
+
.approval-details div { display: grid; grid-template-columns: 84px minmax(0, 1fr); gap: 12px; padding: 11px 13px; background: var(--surface-soft); }
|
|
922
|
+
.approval-details dt { color: var(--faint); font: 11.5px/1.5 var(--font-mono); text-transform: uppercase; letter-spacing: 0.1em; }
|
|
454
923
|
.approval-details dd { margin: 0; overflow-wrap: anywhere; font: 12.5px/1.5 var(--font-mono); }
|
|
455
|
-
.approval-command { margin:
|
|
456
|
-
.approval-actions { display: flex; flex-wrap: wrap; justify-content: flex-end; gap: 8px; margin-top:
|
|
457
|
-
.approval-actions button { padding: 9px
|
|
924
|
+
.approval-command { margin: 12px 0 0; max-height: 200px; border-color: color-mix(in srgb, var(--honey) 26%, var(--border)); }
|
|
925
|
+
.approval-actions { display: flex; flex-wrap: wrap; justify-content: flex-end; gap: 8px; margin-top: 20px; }
|
|
926
|
+
.approval-actions button { padding: 9px 14px; }
|
|
927
|
+
.approval-actions .danger-ghost-button { color: var(--text); border-color: var(--border-strong); background: var(--surface-raised); font-weight: 650; }
|
|
928
|
+
.approval-actions .danger-ghost-button:hover { border-color: var(--text-soft); background: var(--surface-hover); }
|
|
929
|
+
.approval-actions .secondary-button { color: var(--accent); border-color: color-mix(in srgb, var(--accent) 36%, var(--border)); background: transparent; }
|
|
930
|
+
.approval-actions .secondary-button:hover { border-color: var(--accent); background: var(--accent-soft); }
|
|
458
931
|
|
|
459
932
|
::-webkit-scrollbar { width: 10px; height: 10px; }
|
|
460
933
|
::-webkit-scrollbar-track { background: transparent; }
|
|
461
|
-
::-webkit-scrollbar-thumb { border: 3px solid transparent; border-radius: 999px; background: color-mix(in srgb, var(--muted)
|
|
462
|
-
::-webkit-scrollbar-thumb:hover { background: color-mix(in srgb, var(--muted)
|
|
934
|
+
::-webkit-scrollbar-thumb { border: 3px solid transparent; border-radius: 999px; background: color-mix(in srgb, var(--muted) 32%, transparent); background-clip: padding-box; }
|
|
935
|
+
::-webkit-scrollbar-thumb:hover { background: color-mix(in srgb, var(--muted) 55%, transparent); background-clip: padding-box; }
|
|
463
936
|
|
|
464
|
-
@keyframes
|
|
465
|
-
|
|
466
|
-
|
|
467
|
-
}
|
|
468
|
-
@keyframes dialog-enter {
|
|
469
|
-
from { opacity: 0; transform: translateY(12px) scale(0.985); }
|
|
470
|
-
to { opacity: 1; transform: translateY(0) scale(1); }
|
|
937
|
+
@keyframes spore-pulse {
|
|
938
|
+
0% { opacity: 0.75; transform: scale(0.7); }
|
|
939
|
+
70% { opacity: 0; transform: scale(1.9); }
|
|
940
|
+
100% { opacity: 0; transform: scale(1.9); }
|
|
471
941
|
}
|
|
472
942
|
@keyframes spin { to { transform: rotate(360deg); } }
|
|
473
943
|
@keyframes blink { 50% { opacity: 0; } }
|
|
474
944
|
|
|
475
945
|
@media (max-width: 1480px) {
|
|
476
|
-
.workspace-grid { grid-template-columns:
|
|
946
|
+
.workspace-grid { grid-template-columns: 238px minmax(500px, 1fr) 340px; }
|
|
477
947
|
:root[data-navigation="closed"] .workspace-grid { grid-template-columns: minmax(500px, 1fr) 340px; }
|
|
478
|
-
:root[data-inspector="closed"] .workspace-grid { grid-template-columns:
|
|
479
|
-
.topbar {
|
|
480
|
-
.topbar-metrics
|
|
481
|
-
.transcript { padding-inline: clamp(
|
|
948
|
+
:root[data-inspector="closed"] .workspace-grid { grid-template-columns: 238px minmax(500px, 1fr); }
|
|
949
|
+
.topbar { gap: 16px; }
|
|
950
|
+
.topbar-metrics { gap: 14px; }
|
|
951
|
+
.transcript { padding-inline: min(clamp(24px, 3.5vw, 56px), max(18px, 6cqi)); }
|
|
482
952
|
}
|
|
483
953
|
|
|
484
954
|
@media (max-width: 1320px) {
|
|
485
955
|
.workspace-grid,
|
|
486
|
-
:root[data-inspector="closed"] .workspace-grid { grid-template-columns:
|
|
956
|
+
:root[data-inspector="closed"] .workspace-grid { grid-template-columns: 238px minmax(0, 1fr); }
|
|
487
957
|
:root[data-navigation="closed"] .workspace-grid,
|
|
488
958
|
:root[data-navigation="closed"][data-inspector="closed"] .workspace-grid { grid-template-columns: minmax(0, 1fr); }
|
|
489
959
|
:root[data-inspector="open"] .right-rail {
|
|
@@ -493,10 +963,9 @@ select { min-height: 40px; border-radius: var(--radius-sm); padding: 7px 34px 7p
|
|
|
493
963
|
right: 0;
|
|
494
964
|
display: grid;
|
|
495
965
|
width: min(380px, calc(100% - 54px));
|
|
496
|
-
box-shadow: var(--shadow);
|
|
966
|
+
box-shadow: var(--shadow-drawer);
|
|
497
967
|
}
|
|
498
968
|
.runtime-status .muted { display: none; }
|
|
499
|
-
.topbar { grid-template-columns: 1fr auto auto; }
|
|
500
969
|
}
|
|
501
970
|
|
|
502
971
|
@media (max-width: 1160px) {
|
|
@@ -511,21 +980,194 @@ select { min-height: 40px; border-radius: var(--radius-sm); padding: 7px 34px 7p
|
|
|
511
980
|
left: 0;
|
|
512
981
|
display: flex;
|
|
513
982
|
width: min(280px, calc(100% - 54px));
|
|
514
|
-
box-shadow: var(--shadow);
|
|
983
|
+
box-shadow: var(--shadow-drawer);
|
|
515
984
|
}
|
|
516
985
|
.conversation-header { padding-inline: 20px; }
|
|
517
986
|
}
|
|
518
987
|
|
|
519
988
|
@media (max-height: 780px) {
|
|
520
|
-
.
|
|
521
|
-
.
|
|
522
|
-
.transcript { padding-block: 22px 30px; }
|
|
523
|
-
.message { margin-bottom: 24px; }
|
|
989
|
+
.transcript { padding-block: 22px 28px; }
|
|
990
|
+
.message { margin-bottom: 22px; }
|
|
524
991
|
.composer-wrap { padding: 0 14px 12px; }
|
|
525
992
|
.composer textarea { min-height: 52px; }
|
|
526
|
-
.panel-header { padding-block:
|
|
527
|
-
.settings-section { padding-block:
|
|
528
|
-
.settings-section-title { margin-bottom:
|
|
993
|
+
.panel-header { padding-block: 15px 13px; }
|
|
994
|
+
.settings-section { padding-block: 16px; }
|
|
995
|
+
.settings-section-title { margin-bottom: 12px; }
|
|
996
|
+
.transcript-suggestions { margin-top: 14px; }
|
|
997
|
+
}
|
|
998
|
+
|
|
999
|
+
.article-panel {
|
|
1000
|
+
display: grid;
|
|
1001
|
+
grid-template-rows: auto auto auto minmax(0, 1fr) auto;
|
|
1002
|
+
min-width: 0;
|
|
1003
|
+
}
|
|
1004
|
+
.article-panel[hidden] { display: none; }
|
|
1005
|
+
.article-header,
|
|
1006
|
+
.article-toolbar { display: flex; align-items: center; justify-content: space-between; gap: 12px; padding: 16px 18px 12px; }
|
|
1007
|
+
.article-header { border-bottom: 1px solid var(--border-soft); }
|
|
1008
|
+
.article-heading h2 { margin: 6px 0 0; font-size: 18px; line-height: 1.25; letter-spacing: -0.02em; }
|
|
1009
|
+
.article-header-actions,
|
|
1010
|
+
.article-export,
|
|
1011
|
+
.article-versions { display: flex; align-items: center; gap: 6px; min-width: 0; }
|
|
1012
|
+
.article-export { gap: 4px; }
|
|
1013
|
+
.article-versions { flex-wrap: wrap; }
|
|
1014
|
+
.article-version {
|
|
1015
|
+
border: 1px solid var(--border-soft);
|
|
1016
|
+
border-radius: 999px;
|
|
1017
|
+
background: var(--surface-soft);
|
|
1018
|
+
color: var(--muted);
|
|
1019
|
+
font: 600 12px/1 var(--font-mono);
|
|
1020
|
+
padding: 6px 8px;
|
|
1021
|
+
}
|
|
1022
|
+
.article-version[aria-pressed="true"] { color: var(--text); border-color: var(--text); }
|
|
1023
|
+
.article-diff-summary { margin: 0; padding: 0 18px 8px; color: var(--live); font: 600 12.5px/1.4 var(--font-mono); }
|
|
1024
|
+
.settings-headers { display: grid; gap: 8px; }
|
|
1025
|
+
.settings-headers-heading { display: flex; align-items: center; justify-content: space-between; gap: 12px; color: var(--muted); font: 600 12px/1 var(--font-mono); letter-spacing: 0.06em; }
|
|
1026
|
+
.settings-header-list { display: grid; gap: 6px; }
|
|
1027
|
+
.settings-header-list:empty { display: none; }
|
|
1028
|
+
.settings-header-row { display: grid; grid-template-columns: minmax(0, 12em) minmax(0, 1fr) auto; gap: 8px; align-items: center; }
|
|
1029
|
+
.settings-header-row input { min-width: 0; }
|
|
1030
|
+
/* Sits in the same row as the format buttons, so it carries their height and
|
|
1031
|
+
size rather than floating above their baseline. */
|
|
1032
|
+
.article-export-label {
|
|
1033
|
+
display: inline-flex;
|
|
1034
|
+
align-items: center;
|
|
1035
|
+
flex: 0 0 auto;
|
|
1036
|
+
min-height: 34px;
|
|
1037
|
+
padding-right: 4px;
|
|
1038
|
+
color: var(--muted);
|
|
1039
|
+
font-size: 13px;
|
|
1040
|
+
letter-spacing: 0.04em;
|
|
1041
|
+
white-space: nowrap;
|
|
1042
|
+
}
|
|
1043
|
+
.segmented { display: inline-flex; border: 1px solid var(--border-soft); border-radius: 999px; background: var(--surface-soft); padding: 2px; gap: 2px; }
|
|
1044
|
+
.segment {
|
|
1045
|
+
border: 0;
|
|
1046
|
+
border-radius: 999px;
|
|
1047
|
+
background: transparent;
|
|
1048
|
+
color: var(--muted);
|
|
1049
|
+
font: 600 12px/1 var(--font-mono);
|
|
1050
|
+
padding: 6px 10px;
|
|
1051
|
+
cursor: pointer;
|
|
1052
|
+
}
|
|
1053
|
+
.segment[aria-pressed="true"] { background: var(--surface); color: var(--text); box-shadow: 0 1px 2px rgb(0 0 0 / 18%); }
|
|
1054
|
+
.segment:disabled { opacity: 0.4; cursor: default; }
|
|
1055
|
+
|
|
1056
|
+
/* Revision view: one row per line, so a rewrite reads as a diff rather than as
|
|
1057
|
+
a paragraph that silently changed. */
|
|
1058
|
+
.article-panel:not([data-view="read"]) .article-render { font-family: var(--font-mono); }
|
|
1059
|
+
.article-diff-line {
|
|
1060
|
+
display: grid;
|
|
1061
|
+
grid-template-columns: 3.2em 1.2em minmax(0, 1fr);
|
|
1062
|
+
gap: 8px;
|
|
1063
|
+
align-items: baseline;
|
|
1064
|
+
min-height: 1.7em;
|
|
1065
|
+
padding: 1px 6px;
|
|
1066
|
+
border-radius: 4px;
|
|
1067
|
+
font: 12.5px/1.7 var(--font-mono);
|
|
1068
|
+
white-space: pre-wrap;
|
|
1069
|
+
overflow-wrap: anywhere;
|
|
1070
|
+
}
|
|
1071
|
+
.article-diff-gutter { color: var(--faint); text-align: right; user-select: none; }
|
|
1072
|
+
.article-diff-mark { color: var(--faint); user-select: none; }
|
|
1073
|
+
.article-diff-line[data-change="same"] { color: var(--muted); }
|
|
1074
|
+
.article-diff-line[data-change="add"] { background: color-mix(in srgb, var(--live) 12%, transparent); color: var(--text); }
|
|
1075
|
+
.article-diff-line[data-change="add"] .article-diff-mark { color: var(--live); }
|
|
1076
|
+
.article-diff-line[data-change="remove"] { background: color-mix(in srgb, var(--rust) 12%, transparent); color: var(--text); }
|
|
1077
|
+
.article-diff-line[data-change="remove"] .article-diff-mark { color: var(--rust); }
|
|
1078
|
+
.article-diff-text ins { background: color-mix(in srgb, var(--live) 30%, transparent); text-decoration: none; border-radius: 3px; padding: 0 1px; }
|
|
1079
|
+
.article-diff-text del { background: color-mix(in srgb, var(--rust) 30%, transparent); text-decoration: line-through; border-radius: 3px; padding: 0 1px; }
|
|
1080
|
+
.article-stage { min-height: 0; overflow: auto; padding: 8px 22px 28px; }
|
|
1081
|
+
.article-removed {
|
|
1082
|
+
margin: 0 0 12px;
|
|
1083
|
+
padding: 8px 10px;
|
|
1084
|
+
border-left: 2px solid var(--rust);
|
|
1085
|
+
color: var(--rust);
|
|
1086
|
+
background: color-mix(in srgb, var(--rust) 8%, transparent);
|
|
1087
|
+
white-space: pre-wrap;
|
|
1088
|
+
text-decoration: line-through;
|
|
1089
|
+
font-size: 13.5px;
|
|
1090
|
+
line-height: 1.6;
|
|
1091
|
+
}
|
|
1092
|
+
/* What this version changed, still visible after it lands. */
|
|
1093
|
+
.article-block[data-change="add"] {
|
|
1094
|
+
border-radius: 8px;
|
|
1095
|
+
border-left: 2px solid color-mix(in srgb, var(--live) 65%, transparent);
|
|
1096
|
+
padding-left: 10px;
|
|
1097
|
+
margin-left: -12px;
|
|
1098
|
+
}
|
|
1099
|
+
.article-status { margin: 0; padding: 10px 18px 14px; border-top: 1px solid var(--border-soft); color: var(--muted); font-size: 12.5px; }
|
|
1100
|
+
.article-status:empty { display: none; }
|
|
1101
|
+
/* A turn that only called a tool keeps its slot in the virtual list, measured at
|
|
1102
|
+
zero height, instead of printing an empty bubble above the tool card. */
|
|
1103
|
+
.message.message-silent { display: none; }
|
|
1104
|
+
.article-reopen { max-width: 180px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
|
|
1105
|
+
/* The way back into a document. Reopening a conversation, this is the row a
|
|
1106
|
+
reader is looking for, so it reads as an object rather than as tool output. */
|
|
1107
|
+
.article-receipt {
|
|
1108
|
+
display: flex;
|
|
1109
|
+
align-items: center;
|
|
1110
|
+
gap: 10px;
|
|
1111
|
+
flex-wrap: wrap;
|
|
1112
|
+
padding: 10px 12px;
|
|
1113
|
+
border: 1px solid color-mix(in srgb, var(--accent) 38%, var(--border-soft));
|
|
1114
|
+
border-left: 3px solid var(--accent);
|
|
1115
|
+
border-radius: var(--radius-sm);
|
|
1116
|
+
background: color-mix(in srgb, var(--surface-soft) 82%, var(--accent-soft));
|
|
1117
|
+
}
|
|
1118
|
+
.article-receipt strong { color: var(--text); font-size: 14.5px; }
|
|
1119
|
+
.article-receipt span { color: var(--muted); font: 12.5px var(--font-mono); }
|
|
1120
|
+
/* The document column is whatever width the reader dragged it to, and the value
|
|
1121
|
+
the open and close animations move between. It is a column beside the
|
|
1122
|
+
conversation at every window size the shell allows (1180px and up), never a
|
|
1123
|
+
drawer over it: the split is the reader's to drag either way. */
|
|
1124
|
+
:root { --article-width: 42vw; }
|
|
1125
|
+
:root[data-article="open"] .workspace-grid { grid-template-columns: clamp(232px, 14vw, 264px) minmax(0, 1fr) var(--article-width); }
|
|
1126
|
+
:root[data-article="open"][data-navigation="closed"] .workspace-grid { grid-template-columns: minmax(0, 1fr) var(--article-width); }
|
|
1127
|
+
:root[data-article="open"] .right-rail { display: none; }
|
|
1128
|
+
/* Sits just inside the panel's own left edge: `.panel` clips its overflow, so a
|
|
1129
|
+
handle hanging outside it would be invisible and unclickable. */
|
|
1130
|
+
.article-panel { position: relative; }
|
|
1131
|
+
.article-resize {
|
|
1132
|
+
position: absolute;
|
|
1133
|
+
inset: 0 auto 0 0;
|
|
1134
|
+
width: 10px;
|
|
1135
|
+
z-index: 3;
|
|
1136
|
+
cursor: col-resize;
|
|
1137
|
+
background: transparent;
|
|
1138
|
+
}
|
|
1139
|
+
.article-resize::after {
|
|
1140
|
+
content: "";
|
|
1141
|
+
position: absolute;
|
|
1142
|
+
inset: 0 auto 0 1px;
|
|
1143
|
+
width: 3px;
|
|
1144
|
+
border-radius: 3px;
|
|
1145
|
+
background: transparent;
|
|
1146
|
+
transition: background 160ms var(--motion-out);
|
|
1147
|
+
}
|
|
1148
|
+
.article-resize:hover::after,
|
|
1149
|
+
.article-resize:focus-visible::after,
|
|
1150
|
+
.article-resize[data-dragging="true"]::after { background: var(--accent); }
|
|
1151
|
+
.article-resize:focus-visible { outline: none; }
|
|
1152
|
+
:root[data-article-resizing="true"] { cursor: col-resize; }
|
|
1153
|
+
:root[data-article-resizing="true"] .article-stage,
|
|
1154
|
+
:root[data-article-resizing="true"] .transcript { user-select: none; }
|
|
1155
|
+
|
|
1156
|
+
@media (max-width: 1480px) {
|
|
1157
|
+
:root[data-article="open"] .workspace-grid { grid-template-columns: 238px minmax(0, 1fr) var(--article-width); }
|
|
1158
|
+
:root[data-article="open"][data-navigation="closed"] .workspace-grid { grid-template-columns: minmax(0, 1fr) var(--article-width); }
|
|
1159
|
+
}
|
|
1160
|
+
|
|
1161
|
+
@media (max-width: 1320px) {
|
|
1162
|
+
:root[data-article="open"] .workspace-grid { grid-template-columns: 238px minmax(0, 1fr) var(--article-width); }
|
|
1163
|
+
:root[data-article="open"][data-navigation="closed"] .workspace-grid { grid-template-columns: minmax(0, 1fr) var(--article-width); }
|
|
1164
|
+
}
|
|
1165
|
+
|
|
1166
|
+
/* The session rail is a drawer here, so it takes no column: the conversation and
|
|
1167
|
+
the document share the whole width, and the rail opens over both. */
|
|
1168
|
+
@media (max-width: 1160px) {
|
|
1169
|
+
:root[data-article="open"] .workspace-grid,
|
|
1170
|
+
:root[data-article="open"][data-navigation="closed"] .workspace-grid { grid-template-columns: minmax(0, 1fr) var(--article-width); }
|
|
529
1171
|
}
|
|
530
1172
|
|
|
531
1173
|
@media (prefers-reduced-motion: reduce) {
|