pmx-canvas 0.4.8 → 0.5.1
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/.github/extensions/pmx-canvas/extension.mjs +154 -5
- package/.github/extensions/pmx-canvas/steering-delivery.mjs +79 -0
- package/CHANGELOG.md +156 -0
- package/Readme.md +72 -23
- package/dist/canvas/global.css +3071 -796
- package/dist/canvas/index.js +122 -104
- package/dist/json-render/index.css +1 -1
- package/dist/types/cli/agent.d.ts +1 -0
- package/dist/types/cli/commands/pump.d.ts +9 -0
- package/dist/types/client/App.d.ts +1 -1
- package/dist/types/client/canvas/AgentPresenceLayer.d.ts +11 -0
- package/dist/types/client/canvas/BarHint.d.ts +22 -0
- package/dist/types/client/canvas/CanvasNode.d.ts +5 -0
- package/dist/types/client/canvas/CanvasViewport.d.ts +4 -4
- package/dist/types/client/canvas/CommandBar.d.ts +10 -0
- package/dist/types/client/canvas/ConnectionBanner.d.ts +13 -0
- package/dist/types/client/canvas/ContextMenu.d.ts +6 -0
- package/dist/types/client/canvas/EdgeLayer.d.ts +2 -1
- package/dist/types/client/canvas/EmptyState.d.ts +11 -0
- package/dist/types/client/canvas/ExternalWriters.d.ts +5 -0
- package/dist/types/client/canvas/HumanPresenceLayer.d.ts +8 -0
- package/dist/types/client/canvas/Minimap.d.ts +12 -1
- package/dist/types/client/canvas/ScopeFenceLayer.d.ts +8 -0
- package/dist/types/client/canvas/SelectionBar.d.ts +6 -0
- package/dist/types/client/canvas/SessionPanel.d.ts +1 -0
- package/dist/types/client/canvas/SessionReceipt.d.ts +17 -0
- package/dist/types/client/canvas/TextPrompt.d.ts +25 -0
- package/dist/types/client/canvas/ToolRail.d.ts +21 -0
- package/dist/types/client/canvas/TopBar.d.ts +7 -0
- package/dist/types/client/canvas/canvas-area.d.ts +39 -0
- package/dist/types/client/canvas/create-in-view.d.ts +18 -0
- package/dist/types/client/canvas/import-files.d.ts +8 -0
- package/dist/types/client/canvas/kind-colors.d.ts +3 -0
- package/dist/types/client/canvas/use-focus-trap.d.ts +14 -0
- package/dist/types/client/canvas/use-now.d.ts +6 -0
- package/dist/types/client/icons.d.ts +11 -4
- package/dist/types/client/nodes/ExtAppFrame.d.ts +2 -0
- package/dist/types/client/nodes/GroupNode.d.ts +6 -1
- package/dist/types/client/nodes/MarkdownNode.d.ts +2 -0
- package/dist/types/client/nodes/inline-editor-commands.d.ts +3 -4
- package/dist/types/client/state/canvas-store.d.ts +49 -5
- package/dist/types/client/state/human-store.d.ts +26 -0
- package/dist/types/client/state/iframe-mode.d.ts +1 -0
- package/dist/types/client/state/intent-bridge.d.ts +37 -5
- package/dist/types/client/state/node-factory.d.ts +0 -1
- package/dist/types/client/state/presence-store.d.ts +78 -0
- package/dist/types/client/state/session-store.d.ts +176 -0
- package/dist/types/client/types.d.ts +2 -1
- package/dist/types/client/utils/platform.d.ts +2 -0
- package/dist/types/server/agent-presence.d.ts +192 -0
- package/dist/types/server/ax-gate-ttl.d.ts +6 -0
- package/dist/types/server/ax-interaction.d.ts +4 -10
- package/dist/types/server/ax-state-manager.d.ts +21 -2
- package/dist/types/server/ax-state.d.ts +49 -3
- package/dist/types/server/ax-wait.d.ts +13 -0
- package/dist/types/server/canvas-db.d.ts +9 -1
- package/dist/types/server/canvas-operations.d.ts +11 -0
- package/dist/types/server/canvas-state.d.ts +27 -13
- package/dist/types/server/canvas-validation.d.ts +0 -14
- package/dist/types/server/html-surface.d.ts +1 -1
- package/dist/types/server/human-presence.d.ts +40 -0
- package/dist/types/server/index.d.ts +29 -3
- package/dist/types/server/intent-registry.d.ts +7 -0
- package/dist/types/server/mutation-history.d.ts +15 -2
- package/dist/types/server/operations/invoker.d.ts +13 -2
- package/dist/types/server/operations/ops/ax-presence.d.ts +2 -0
- package/dist/types/server/operations/ops/human-presence.d.ts +3 -0
- package/dist/types/server/operations/registry.d.ts +11 -0
- package/dist/types/server/operations/types.d.ts +1 -1
- package/dist/types/server/scope-fence.d.ts +62 -0
- package/dist/types/server/server.d.ts +0 -12
- package/dist/types/shared/agent-presence.d.ts +130 -0
- package/dist/types/shared/approval-gates.d.ts +19 -0
- package/dist/types/shared/auto-arrange.d.ts +0 -1
- package/dist/types/shared/ax-kinds.d.ts +11 -0
- package/dist/types/shared/human-presence.d.ts +31 -0
- package/dist/types/shared/iframe-probe.d.ts +8 -0
- package/dist/types/shared/scope-fence.d.ts +21 -0
- package/docs/RELEASE.md +20 -0
- package/docs/ax-host-adapter-contract.md +30 -14
- package/docs/cli.md +37 -1
- package/docs/environment.md +3 -0
- package/docs/http-api.md +222 -5
- package/docs/mcp.md +6 -5
- package/docs/node-types.md +3 -1
- package/docs/plans/plan-009-tech-debt-backlog.md +13 -0
- package/docs/screenshot.png +0 -0
- package/docs/screenshots/multi-agent-live.png +0 -0
- package/docs/screenshots/workbench-live-dark.png +0 -0
- package/docs/screenshots/workbench-live-light.png +0 -0
- package/docs/sdk.md +1 -1
- package/package.json +4 -4
- package/skills/pmx-canvas/SKILL.md +112 -17
- package/skills/pmx-canvas/references/codex-app-adapter.md +28 -0
- package/skills/pmx-canvas/references/full-reference.md +55 -16
- package/skills/pmx-canvas/references/github-copilot-app-adapter.md +41 -24
- package/skills/pmx-canvas-orchestration/SKILL.md +56 -2
- package/skills/pmx-canvas-testing/SKILL.md +17 -0
- package/src/cli/agent.ts +1 -0
- package/src/cli/commands/copilot.ts +15 -8
- package/src/cli/commands/nodes.ts +1 -19
- package/src/cli/commands/pump.ts +263 -0
- package/src/cli/index.ts +2 -5
- package/src/cli/shared.ts +1 -1
- package/src/client/App.tsx +209 -585
- package/src/client/canvas/AgentPresenceLayer.tsx +74 -0
- package/src/client/canvas/AttentionHistory.tsx +0 -10
- package/src/client/canvas/BarHint.tsx +49 -0
- package/src/client/canvas/CanvasNode.tsx +488 -136
- package/src/client/canvas/CanvasViewport.tsx +190 -94
- package/src/client/canvas/CommandBar.tsx +140 -0
- package/src/client/canvas/CommandPalette.tsx +133 -58
- package/src/client/canvas/ConnectionBanner.tsx +65 -0
- package/src/client/canvas/ContextMenu.tsx +88 -27
- package/src/client/canvas/ContextPinBar.tsx +2 -2
- package/src/client/canvas/EdgeLayer.tsx +121 -38
- package/src/client/canvas/EmptyState.tsx +93 -0
- package/src/client/canvas/ExpandedNodeOverlay.tsx +64 -118
- package/src/client/canvas/ExternalWriters.tsx +308 -0
- package/src/client/canvas/FocusFieldLayer.tsx +12 -1
- package/src/client/canvas/HumanPresenceLayer.tsx +45 -0
- package/src/client/canvas/IntentLayer.tsx +1 -1
- package/src/client/canvas/Minimap.tsx +117 -190
- package/src/client/canvas/ScopeFenceLayer.tsx +38 -0
- package/src/client/canvas/SelectionBar.tsx +175 -23
- package/src/client/canvas/SessionPanel.tsx +481 -0
- package/src/client/canvas/SessionReceipt.tsx +141 -0
- package/src/client/canvas/ShortcutOverlay.tsx +21 -6
- package/src/client/canvas/SnapshotPanel.tsx +166 -80
- package/src/client/canvas/TextPrompt.tsx +128 -0
- package/src/client/canvas/ToolRail.tsx +447 -0
- package/src/client/canvas/TopBar.tsx +308 -0
- package/src/client/canvas/auto-fit.ts +1 -5
- package/src/client/canvas/canvas-area.ts +74 -0
- package/src/client/canvas/create-in-view.ts +48 -0
- package/src/client/canvas/import-files.ts +64 -0
- package/src/client/canvas/kind-colors.ts +22 -0
- package/src/client/canvas/snap-guides.ts +1 -1
- package/src/client/canvas/use-focus-trap.ts +54 -0
- package/src/client/canvas/use-now.ts +17 -0
- package/src/client/canvas/use-pan-zoom.ts +13 -2
- package/src/client/icons.tsx +57 -18
- package/src/client/nodes/ExtAppFrame.tsx +86 -20
- package/src/client/nodes/GroupNode.tsx +9 -28
- package/src/client/nodes/InlineFormatBar.tsx +4 -3
- package/src/client/nodes/InlineMarkdownEditor.tsx +27 -0
- package/src/client/nodes/MarkdownNode.tsx +59 -24
- package/src/client/nodes/MdFormatBar.tsx +2 -4
- package/src/client/nodes/inline-editor-commands.ts +17 -6
- package/src/client/nodes/use-surface-frame.ts +3 -1
- package/src/client/state/attention-bridge.ts +3 -0
- package/src/client/state/canvas-store.ts +285 -90
- package/src/client/state/human-store.ts +175 -0
- package/src/client/state/iframe-mode.ts +33 -9
- package/src/client/state/intent-bridge.ts +75 -13
- package/src/client/state/node-factory.ts +2 -8
- package/src/client/state/presence-store.ts +168 -0
- package/src/client/state/session-store.ts +419 -0
- package/src/client/state/sse-bridge.ts +93 -30
- package/src/client/theme/global.css +3071 -796
- package/src/client/types.ts +3 -1
- package/src/client/utils/platform.ts +6 -1
- package/src/mcp/canvas-access.ts +2 -2
- package/src/server/agent-presence.ts +755 -0
- package/src/server/ax-context.ts +45 -0
- package/src/server/ax-gate-ttl.ts +61 -0
- package/src/server/ax-interaction.ts +29 -1
- package/src/server/ax-state-manager.ts +78 -6
- package/src/server/ax-state.ts +82 -15
- package/src/server/ax-wait.ts +33 -0
- package/src/server/canvas-db.ts +103 -33
- package/src/server/canvas-operations.ts +58 -14
- package/src/server/canvas-state.ts +131 -58
- package/src/server/canvas-validation.ts +3 -53
- package/src/server/demo-state.json +2 -70
- package/src/server/html-surface.ts +11 -2
- package/src/server/human-presence.ts +160 -0
- package/src/server/index.ts +111 -6
- package/src/server/intent-registry.ts +13 -0
- package/src/server/mutation-history.ts +47 -2
- package/src/server/operations/composites.ts +6 -3
- package/src/server/operations/http.ts +10 -1
- package/src/server/operations/index.ts +4 -0
- package/src/server/operations/invoker.ts +33 -6
- package/src/server/operations/ops/ax-presence.ts +62 -0
- package/src/server/operations/ops/ax-read.ts +8 -0
- package/src/server/operations/ops/ax-state.ts +106 -1
- package/src/server/operations/ops/ax-timeline.ts +54 -5
- package/src/server/operations/ops/ax-work.ts +46 -0
- package/src/server/operations/ops/batch.ts +3 -1
- package/src/server/operations/ops/edges.ts +88 -2
- package/src/server/operations/ops/groups.ts +4 -3
- package/src/server/operations/ops/human-presence.ts +35 -0
- package/src/server/operations/ops/json-render.ts +11 -1
- package/src/server/operations/ops/nodes.ts +77 -16
- package/src/server/operations/ops/query.ts +1 -0
- package/src/server/operations/ops/snapshots.ts +7 -4
- package/src/server/operations/registry.ts +196 -1
- package/src/server/operations/types.ts +1 -1
- package/src/server/scope-fence.ts +207 -0
- package/src/server/server.ts +177 -79
- package/src/server/trace-manager.ts +0 -2
- package/src/server/web-artifacts.ts +0 -1
- package/src/shared/agent-presence.ts +162 -0
- package/src/shared/approval-gates.ts +35 -0
- package/src/shared/auto-arrange.ts +121 -13
- package/src/shared/ax-kinds.ts +23 -0
- package/src/shared/human-presence.ts +30 -0
- package/src/shared/iframe-probe.ts +8 -0
- package/src/shared/scope-fence.ts +31 -0
- package/dist/types/client/canvas/DockedNode.d.ts +0 -4
- package/src/client/canvas/DockedNode.tsx +0 -165
package/dist/canvas/global.css
CHANGED
|
@@ -56,9 +56,7 @@
|
|
|
56
56
|
--mono: "IBM Plex Mono", "SF Mono", "Fira Code", monospace;
|
|
57
57
|
--radius: 10px;
|
|
58
58
|
--radius-sm: 6px;
|
|
59
|
-
/* Shared height
|
|
60
|
-
status/context widgets that flank it line up to the same height. Matches the
|
|
61
|
-
toolbar's natural content height (icon buttons at 6px padding). */
|
|
59
|
+
/* Shared height of the top bar and the session panel header. */
|
|
62
60
|
--hud-bar-height: 44px;
|
|
63
61
|
}
|
|
64
62
|
|
|
@@ -546,9 +544,11 @@ body,
|
|
|
546
544
|
/* Node card shared styles */
|
|
547
545
|
.canvas-node {
|
|
548
546
|
position: absolute;
|
|
547
|
+
/* Standard card shell (rail-chrome-v2): node surface, 12px radius, soft
|
|
548
|
+
shadow. Every node kind shares it; the kind shows in the icon color. */
|
|
549
549
|
background: var(--c-panel);
|
|
550
550
|
border: 1px solid var(--c-line);
|
|
551
|
-
border-radius:
|
|
551
|
+
border-radius: 12px;
|
|
552
552
|
box-shadow: 0 4px 24px var(--c-shadow);
|
|
553
553
|
display: flex;
|
|
554
554
|
flex-direction: column;
|
|
@@ -623,7 +623,7 @@ body,
|
|
|
623
623
|
display: flex;
|
|
624
624
|
align-items: center;
|
|
625
625
|
gap: calc(8px * var(--node-chrome-scale, 1));
|
|
626
|
-
padding: calc(
|
|
626
|
+
padding: calc(7px * var(--node-chrome-scale, 1)) calc(12px * var(--node-chrome-scale, 1));
|
|
627
627
|
background: var(--c-panel-overlay);
|
|
628
628
|
border-bottom: 1px solid var(--c-line);
|
|
629
629
|
cursor: grab;
|
|
@@ -638,7 +638,7 @@ body,
|
|
|
638
638
|
.canvas-node .node-title {
|
|
639
639
|
font-size: calc(12px * var(--node-chrome-scale, 1));
|
|
640
640
|
font-weight: 600;
|
|
641
|
-
color: var(--c-
|
|
641
|
+
color: var(--c-text-soft);
|
|
642
642
|
white-space: nowrap;
|
|
643
643
|
overflow: hidden;
|
|
644
644
|
text-overflow: ellipsis;
|
|
@@ -654,14 +654,28 @@ body,
|
|
|
654
654
|
display: inline-flex;
|
|
655
655
|
align-items: center;
|
|
656
656
|
justify-content: center;
|
|
657
|
-
width: calc(
|
|
658
|
-
height: calc(
|
|
659
|
-
|
|
660
|
-
color: var(--c-accent);
|
|
661
|
-
background: var(--c-accent-10);
|
|
657
|
+
width: calc(14px * var(--node-chrome-scale, 1));
|
|
658
|
+
height: calc(14px * var(--node-chrome-scale, 1));
|
|
659
|
+
color: var(--kind-accent, var(--c-accent));
|
|
662
660
|
flex-shrink: 0;
|
|
663
661
|
}
|
|
664
662
|
|
|
663
|
+
/* Node kind accents (rail-chrome-v2): the icon carries the kind. */
|
|
664
|
+
.canvas-node[data-node-type='image'],
|
|
665
|
+
.canvas-node[data-node-type='mermaid'] {
|
|
666
|
+
--kind-accent: var(--c-warn);
|
|
667
|
+
}
|
|
668
|
+
.canvas-node[data-node-type='webpage'],
|
|
669
|
+
.canvas-node[data-node-type='status'],
|
|
670
|
+
.canvas-node[data-node-type='trace'] {
|
|
671
|
+
--kind-accent: var(--c-ok);
|
|
672
|
+
}
|
|
673
|
+
.canvas-node[data-node-type='context'],
|
|
674
|
+
.canvas-node[data-node-type='prompt'],
|
|
675
|
+
.canvas-node[data-node-type='response'] {
|
|
676
|
+
--kind-accent: var(--c-purple);
|
|
677
|
+
}
|
|
678
|
+
|
|
665
679
|
.canvas-node .node-type-badge {
|
|
666
680
|
font-size: calc(10px * var(--node-chrome-scale, 1));
|
|
667
681
|
padding: calc(1px * var(--node-chrome-scale, 1)) calc(6px * var(--node-chrome-scale, 1));
|
|
@@ -713,7 +727,7 @@ body,
|
|
|
713
727
|
.canvas-node .node-controls button {
|
|
714
728
|
background: none;
|
|
715
729
|
border: none;
|
|
716
|
-
color: var(--c-
|
|
730
|
+
color: var(--c-dim);
|
|
717
731
|
cursor: pointer;
|
|
718
732
|
display: inline-flex;
|
|
719
733
|
align-items: center;
|
|
@@ -734,8 +748,11 @@ body,
|
|
|
734
748
|
.canvas-node .node-body {
|
|
735
749
|
flex: 1;
|
|
736
750
|
overflow: auto;
|
|
737
|
-
padding:
|
|
751
|
+
padding: 10px 14px;
|
|
738
752
|
min-height: 0;
|
|
753
|
+
font-size: 11px;
|
|
754
|
+
line-height: 1.6;
|
|
755
|
+
color: var(--c-text-soft);
|
|
739
756
|
}
|
|
740
757
|
|
|
741
758
|
/* Markdown rendered content inside nodes */
|
|
@@ -761,16 +778,62 @@ body,
|
|
|
761
778
|
color: var(--c-muted);
|
|
762
779
|
}
|
|
763
780
|
|
|
781
|
+
/* GFM task lists: custom-drawn checkboxes — native inputs are an 11px target
|
|
782
|
+
at typical zoom and render inconsistently (or not at all) in embedding
|
|
783
|
+
apps — and no double marker (• plus box) on task rows. */
|
|
784
|
+
.canvas-node .node-body li:has(> input[type='checkbox']),
|
|
785
|
+
.md-reader-content li:has(> input[type='checkbox']) {
|
|
786
|
+
list-style: none;
|
|
787
|
+
/* Reclaim the bullet gutter, then indent the whole item past the box — the
|
|
788
|
+
box sits OUT of the text flow so wrapped lines align under the first. */
|
|
789
|
+
margin-left: -1.3em;
|
|
790
|
+
padding-left: 1.65em;
|
|
791
|
+
position: relative;
|
|
792
|
+
}
|
|
793
|
+
.canvas-node .node-body li > input[type='checkbox'],
|
|
794
|
+
.md-reader-content li > input[type='checkbox'] {
|
|
795
|
+
appearance: none;
|
|
796
|
+
-webkit-appearance: none;
|
|
797
|
+
position: absolute;
|
|
798
|
+
left: 0;
|
|
799
|
+
top: 0.22em;
|
|
800
|
+
width: 15px;
|
|
801
|
+
height: 15px;
|
|
802
|
+
margin: 0;
|
|
803
|
+
border: 1.5px solid var(--c-muted);
|
|
804
|
+
border-radius: 4px;
|
|
805
|
+
background: var(--c-panel);
|
|
806
|
+
cursor: pointer;
|
|
807
|
+
/* Embedding webviews (Copilot app) force color schemes on form controls —
|
|
808
|
+
this box is fully custom-drawn, keep its colors ours. */
|
|
809
|
+
forced-color-adjust: none;
|
|
810
|
+
color-scheme: light;
|
|
811
|
+
}
|
|
812
|
+
.canvas-node .node-body li > input[type='checkbox']:hover,
|
|
813
|
+
.md-reader-content li > input[type='checkbox']:hover {
|
|
814
|
+
border-color: var(--c-accent);
|
|
815
|
+
}
|
|
816
|
+
.canvas-node .node-body li > input[type='checkbox']:checked,
|
|
817
|
+
.md-reader-content li > input[type='checkbox']:checked {
|
|
818
|
+
border-color: var(--c-accent);
|
|
819
|
+
background-color: var(--c-accent);
|
|
820
|
+
background-image: url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='10' height='8'%3E%3Cpath d='M1 4l2.6 2.6L9 1' fill='none' stroke='white' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E");
|
|
821
|
+
background-repeat: no-repeat;
|
|
822
|
+
background-position: center;
|
|
823
|
+
}
|
|
824
|
+
|
|
825
|
+
/* Hanging indent: with `inside`, a wrapped line falls back to the card edge
|
|
826
|
+
under the marker instead of aligning with its own first line. */
|
|
764
827
|
.canvas-node .node-body ul,
|
|
765
828
|
.canvas-node .node-body ol {
|
|
766
829
|
margin: 0.4em 0;
|
|
767
|
-
padding-left:
|
|
768
|
-
list-style-position:
|
|
830
|
+
padding-left: 1.3em;
|
|
831
|
+
list-style-position: outside;
|
|
769
832
|
}
|
|
770
833
|
|
|
771
834
|
.canvas-node .node-body li {
|
|
772
835
|
margin: 0.2em 0;
|
|
773
|
-
padding-left: 0.
|
|
836
|
+
padding-left: 0.1em;
|
|
774
837
|
}
|
|
775
838
|
|
|
776
839
|
.canvas-node .node-body a {
|
|
@@ -821,226 +884,2226 @@ body,
|
|
|
821
884
|
font-weight: 600;
|
|
822
885
|
}
|
|
823
886
|
|
|
824
|
-
/*
|
|
825
|
-
|
|
826
|
-
.hud-layer {
|
|
827
|
-
position: fixed;
|
|
828
|
-
top: 12px;
|
|
829
|
-
left: 12px;
|
|
830
|
-
right: 12px;
|
|
831
|
-
display: flex;
|
|
832
|
-
flex-wrap: wrap;
|
|
833
|
-
align-items: flex-start;
|
|
834
|
-
justify-content: center;
|
|
835
|
-
gap: 8px;
|
|
836
|
-
z-index: 9999;
|
|
837
|
-
pointer-events: none;
|
|
838
|
-
}
|
|
839
|
-
.hud-layer > * {
|
|
840
|
-
pointer-events: auto;
|
|
841
|
-
}
|
|
842
|
-
.hud-left,
|
|
843
|
-
.hud-right {
|
|
887
|
+
/* ── App shell: rail + top bar + canvas region (rail-chrome-v2) ── */
|
|
888
|
+
.app-shell {
|
|
844
889
|
display: flex;
|
|
845
|
-
|
|
846
|
-
|
|
890
|
+
width: 100%;
|
|
891
|
+
height: 100%;
|
|
892
|
+
overflow: hidden;
|
|
893
|
+
background: var(--c-bg);
|
|
847
894
|
}
|
|
848
895
|
|
|
849
|
-
|
|
850
|
-
|
|
896
|
+
.tool-rail {
|
|
897
|
+
width: 52px;
|
|
898
|
+
flex-shrink: 0;
|
|
851
899
|
display: flex;
|
|
852
|
-
flex-
|
|
900
|
+
flex-direction: column;
|
|
853
901
|
align-items: center;
|
|
854
|
-
gap:
|
|
855
|
-
padding:
|
|
856
|
-
|
|
857
|
-
|
|
858
|
-
|
|
859
|
-
|
|
860
|
-
|
|
861
|
-
|
|
862
|
-
|
|
902
|
+
gap: 4px;
|
|
903
|
+
padding: 10px 0;
|
|
904
|
+
background: var(--c-panel-soft);
|
|
905
|
+
border-right: 1px solid var(--c-line);
|
|
906
|
+
overflow-y: auto;
|
|
907
|
+
scrollbar-width: none;
|
|
908
|
+
/* The rail is a stacking context: its popovers can only win against the
|
|
909
|
+
canvas region's overlays (annotation capture layer at 9996) if the rail
|
|
910
|
+
ITSELF stacks above them — a child's z-index never escapes this context. */
|
|
911
|
+
z-index: 9999;
|
|
912
|
+
}
|
|
913
|
+
.tool-rail::-webkit-scrollbar {
|
|
914
|
+
display: none;
|
|
863
915
|
}
|
|
864
916
|
|
|
865
|
-
.
|
|
866
|
-
position: relative;
|
|
917
|
+
.rail-brand {
|
|
867
918
|
display: inline-flex;
|
|
868
919
|
align-items: center;
|
|
920
|
+
justify-content: center;
|
|
921
|
+
width: 36px;
|
|
922
|
+
height: 36px;
|
|
923
|
+
color: var(--c-accent);
|
|
924
|
+
flex-shrink: 0;
|
|
869
925
|
}
|
|
870
926
|
|
|
871
|
-
.
|
|
872
|
-
|
|
873
|
-
|
|
927
|
+
.rail-btn {
|
|
928
|
+
display: inline-flex;
|
|
929
|
+
align-items: center;
|
|
930
|
+
justify-content: center;
|
|
931
|
+
width: 36px;
|
|
932
|
+
height: 36px;
|
|
933
|
+
border-radius: 8px;
|
|
934
|
+
border: 1px solid transparent;
|
|
935
|
+
background: none;
|
|
936
|
+
color: var(--c-muted);
|
|
937
|
+
cursor: pointer;
|
|
938
|
+
flex-shrink: 0;
|
|
874
939
|
}
|
|
875
|
-
|
|
876
|
-
|
|
877
|
-
left: auto;
|
|
878
|
-
right: 0;
|
|
879
|
-
transform: translateX(0) translateY(6px);
|
|
940
|
+
.rail-btn svg {
|
|
941
|
+
display: block;
|
|
880
942
|
}
|
|
881
|
-
|
|
882
|
-
|
|
883
|
-
position: absolute;
|
|
884
|
-
left: 50%;
|
|
885
|
-
top: calc(100% + 10px);
|
|
886
|
-
transform: translateX(-50%) translateY(6px);
|
|
887
|
-
display: flex;
|
|
888
|
-
flex-direction: column;
|
|
889
|
-
gap: 4px;
|
|
890
|
-
min-width: 168px;
|
|
891
|
-
max-width: 240px;
|
|
892
|
-
padding: 10px 12px;
|
|
893
|
-
background: color-mix(in srgb, var(--c-panel) 92%, black 8%);
|
|
894
|
-
border: 1px solid color-mix(in srgb, var(--c-line) 78%, var(--c-accent) 22%);
|
|
895
|
-
border-radius: 10px;
|
|
896
|
-
box-shadow: 0 14px 36px var(--c-shadow-heavy), 0 0 0 1px var(--c-accent-8);
|
|
897
|
-
backdrop-filter: blur(14px);
|
|
943
|
+
.rail-btn:hover {
|
|
944
|
+
background: var(--c-surface-hover);
|
|
898
945
|
color: var(--c-text);
|
|
899
|
-
font-size: 12px;
|
|
900
|
-
line-height: 1.35;
|
|
901
|
-
white-space: normal;
|
|
902
|
-
opacity: 0;
|
|
903
|
-
pointer-events: none;
|
|
904
|
-
z-index: 10010;
|
|
905
|
-
transition: opacity 0.14s ease, transform 0.14s ease;
|
|
906
946
|
}
|
|
907
|
-
|
|
908
|
-
|
|
909
|
-
|
|
910
|
-
|
|
911
|
-
|
|
912
|
-
|
|
913
|
-
|
|
914
|
-
height: 10px;
|
|
915
|
-
background: inherit;
|
|
916
|
-
border-top: 1px solid color-mix(in srgb, var(--c-line) 78%, var(--c-accent) 22%);
|
|
917
|
-
border-left: 1px solid color-mix(in srgb, var(--c-line) 78%, var(--c-accent) 22%);
|
|
918
|
-
transform: translateX(-50%) rotate(45deg);
|
|
947
|
+
.rail-btn.active {
|
|
948
|
+
background: var(--c-accent-10);
|
|
949
|
+
border-color: var(--c-accent-25);
|
|
950
|
+
color: var(--c-accent);
|
|
951
|
+
}
|
|
952
|
+
.rail-btn.active:hover {
|
|
953
|
+
background: var(--c-accent-15, var(--c-accent-10));
|
|
919
954
|
}
|
|
920
955
|
|
|
921
|
-
.
|
|
922
|
-
|
|
923
|
-
|
|
956
|
+
.rail-divider {
|
|
957
|
+
width: 24px;
|
|
958
|
+
height: 1px;
|
|
959
|
+
background: var(--c-line);
|
|
960
|
+
flex-shrink: 0;
|
|
961
|
+
margin: 3px 0;
|
|
924
962
|
}
|
|
925
963
|
|
|
926
|
-
.
|
|
927
|
-
|
|
928
|
-
|
|
929
|
-
transform: rotate(45deg);
|
|
964
|
+
.rail-spacer {
|
|
965
|
+
flex: 1;
|
|
966
|
+
min-height: 8px;
|
|
930
967
|
}
|
|
931
968
|
|
|
932
|
-
.
|
|
933
|
-
|
|
934
|
-
|
|
935
|
-
|
|
969
|
+
.app-main {
|
|
970
|
+
flex: 1;
|
|
971
|
+
min-width: 0;
|
|
972
|
+
display: flex;
|
|
973
|
+
flex-direction: column;
|
|
936
974
|
}
|
|
937
975
|
|
|
938
|
-
.
|
|
939
|
-
|
|
940
|
-
|
|
941
|
-
|
|
942
|
-
|
|
976
|
+
.top-bar {
|
|
977
|
+
height: var(--hud-bar-height);
|
|
978
|
+
flex-shrink: 0;
|
|
979
|
+
display: flex;
|
|
980
|
+
align-items: center;
|
|
981
|
+
gap: 12px;
|
|
982
|
+
padding: 0 14px;
|
|
983
|
+
background: color-mix(in srgb, var(--c-panel-soft) 92%, transparent);
|
|
984
|
+
backdrop-filter: blur(12px);
|
|
985
|
+
border-bottom: 1px solid var(--c-line);
|
|
986
|
+
/* NOT overflow:hidden — the BarHint tooltips hang below the bar and were
|
|
987
|
+
clipped invisible for everyone (the e2e asserted opacity, which cannot
|
|
988
|
+
see ancestor clipping). Children ellipsize themselves; the narrow-screen
|
|
989
|
+
collapse is media-query display, not clipping. */
|
|
990
|
+
min-width: 0;
|
|
991
|
+
z-index: 9998;
|
|
943
992
|
}
|
|
944
993
|
|
|
945
|
-
.
|
|
994
|
+
.top-bar-title {
|
|
946
995
|
font-size: 13px;
|
|
947
996
|
font-weight: 600;
|
|
948
|
-
letter-spacing: 0.01em;
|
|
949
997
|
color: var(--c-text);
|
|
998
|
+
white-space: nowrap;
|
|
999
|
+
overflow: hidden;
|
|
1000
|
+
text-overflow: ellipsis;
|
|
1001
|
+
min-width: 60px;
|
|
1002
|
+
flex-shrink: 1;
|
|
950
1003
|
}
|
|
951
1004
|
|
|
952
|
-
.
|
|
953
|
-
|
|
954
|
-
|
|
955
|
-
|
|
956
|
-
|
|
957
|
-
color: var(--c-text-soft);
|
|
1005
|
+
.top-bar-meta {
|
|
1006
|
+
font: 11px var(--mono);
|
|
1007
|
+
color: var(--c-dim);
|
|
1008
|
+
white-space: nowrap;
|
|
1009
|
+
flex-shrink: 0;
|
|
958
1010
|
}
|
|
959
1011
|
|
|
960
|
-
.
|
|
1012
|
+
.top-bar-spacer {
|
|
1013
|
+
flex: 1;
|
|
1014
|
+
min-width: 0;
|
|
1015
|
+
}
|
|
1016
|
+
|
|
1017
|
+
.top-bar-sep {
|
|
1018
|
+
width: 1px;
|
|
1019
|
+
height: 20px;
|
|
1020
|
+
background: var(--c-line);
|
|
1021
|
+
flex-shrink: 0;
|
|
1022
|
+
}
|
|
1023
|
+
|
|
1024
|
+
.top-bar-btn {
|
|
961
1025
|
display: inline-flex;
|
|
962
1026
|
align-items: center;
|
|
963
1027
|
justify-content: center;
|
|
964
|
-
|
|
965
|
-
padding: 2px 7px;
|
|
966
|
-
border-radius: 999px;
|
|
967
|
-
border: 1px solid var(--c-accent-25);
|
|
968
|
-
background: var(--c-accent-10);
|
|
969
|
-
color: var(--c-accent);
|
|
970
|
-
font: 11px/1 var(--mono);
|
|
971
|
-
white-space: nowrap;
|
|
972
|
-
}
|
|
973
|
-
|
|
974
|
-
.canvas-toolbar button {
|
|
1028
|
+
padding: 6px 8px;
|
|
975
1029
|
background: none;
|
|
976
1030
|
border: 1px solid transparent;
|
|
977
|
-
color: var(--c-muted);
|
|
978
|
-
padding: 6px 10px;
|
|
979
1031
|
border-radius: var(--radius-sm);
|
|
980
|
-
|
|
981
|
-
font-size: 14px;
|
|
1032
|
+
color: var(--c-muted);
|
|
982
1033
|
cursor: pointer;
|
|
1034
|
+
flex-shrink: 0;
|
|
983
1035
|
}
|
|
984
|
-
|
|
985
|
-
|
|
1036
|
+
.top-bar-btn svg {
|
|
1037
|
+
display: block;
|
|
1038
|
+
}
|
|
1039
|
+
.top-bar-btn:hover {
|
|
986
1040
|
background: var(--c-surface-hover);
|
|
987
1041
|
color: var(--c-text);
|
|
988
1042
|
border-color: var(--c-line);
|
|
989
1043
|
}
|
|
990
1044
|
|
|
991
|
-
.
|
|
992
|
-
width:
|
|
993
|
-
|
|
994
|
-
|
|
995
|
-
|
|
996
|
-
|
|
997
|
-
|
|
998
|
-
|
|
999
|
-
|
|
1000
|
-
|
|
1001
|
-
width: 28px;
|
|
1002
|
-
height: 28px;
|
|
1003
|
-
color: var(--c-accent);
|
|
1045
|
+
.top-bar-zoom-label {
|
|
1046
|
+
min-width: 38px;
|
|
1047
|
+
text-align: center;
|
|
1048
|
+
font: 11px var(--mono);
|
|
1049
|
+
color: var(--c-muted);
|
|
1050
|
+
background: none;
|
|
1051
|
+
border: 1px solid transparent;
|
|
1052
|
+
border-radius: var(--radius-sm);
|
|
1053
|
+
padding: 6px 4px;
|
|
1054
|
+
cursor: pointer;
|
|
1004
1055
|
flex-shrink: 0;
|
|
1005
1056
|
}
|
|
1057
|
+
.top-bar-zoom-label:hover {
|
|
1058
|
+
background: var(--c-surface-hover);
|
|
1059
|
+
color: var(--c-text);
|
|
1060
|
+
}
|
|
1006
1061
|
|
|
1007
|
-
.canvas-
|
|
1008
|
-
|
|
1009
|
-
height:
|
|
1010
|
-
|
|
1011
|
-
|
|
1062
|
+
.canvas-region {
|
|
1063
|
+
flex: 1;
|
|
1064
|
+
min-height: 0;
|
|
1065
|
+
position: relative;
|
|
1066
|
+
overflow: hidden;
|
|
1012
1067
|
}
|
|
1013
1068
|
|
|
1014
|
-
|
|
1015
|
-
|
|
1069
|
+
/* ── Agent presence (rail-chrome-v2 phase 3) ────────────────────
|
|
1070
|
+
Every surface below mounts only while a session is attached. Phase colors
|
|
1071
|
+
are tokens so all nine themes agree: thinking=purple, tooling=accent,
|
|
1072
|
+
waiting=warn, idle=dim. */
|
|
1073
|
+
.agent-chip,
|
|
1074
|
+
.agent-cursor,
|
|
1075
|
+
.minimap-presence {
|
|
1076
|
+
--presence-color: var(--c-dim);
|
|
1016
1077
|
}
|
|
1017
|
-
.
|
|
1018
|
-
|
|
1019
|
-
|
|
1078
|
+
.agent-chip.phase-thinking,
|
|
1079
|
+
.agent-cursor.phase-thinking,
|
|
1080
|
+
.minimap-presence.phase-thinking {
|
|
1081
|
+
--presence-color: var(--c-purple);
|
|
1020
1082
|
}
|
|
1021
|
-
.
|
|
1022
|
-
|
|
1083
|
+
.agent-chip.phase-tooling,
|
|
1084
|
+
.agent-cursor.phase-tooling,
|
|
1085
|
+
.minimap-presence.phase-tooling {
|
|
1086
|
+
--presence-color: var(--c-accent);
|
|
1087
|
+
}
|
|
1088
|
+
.agent-chip.phase-waiting-approval,
|
|
1089
|
+
.agent-cursor.phase-waiting-approval,
|
|
1090
|
+
.minimap-presence.phase-waiting-approval {
|
|
1091
|
+
--presence-color: var(--c-warn);
|
|
1023
1092
|
}
|
|
1024
1093
|
|
|
1025
|
-
|
|
1026
|
-
|
|
1027
|
-
|
|
1028
|
-
|
|
1029
|
-
|
|
1030
|
-
|
|
1031
|
-
|
|
1094
|
+
/* Top-bar chip */
|
|
1095
|
+
.agent-chip {
|
|
1096
|
+
display: inline-flex;
|
|
1097
|
+
align-items: center;
|
|
1098
|
+
gap: 7px;
|
|
1099
|
+
padding: 5px 12px;
|
|
1100
|
+
border-radius: 999px;
|
|
1101
|
+
border: 1px solid color-mix(in srgb, var(--presence-color) 35%, transparent);
|
|
1102
|
+
background: color-mix(in srgb, var(--presence-color) 12%, transparent);
|
|
1103
|
+
color: var(--presence-color);
|
|
1104
|
+
font-size: 11px;
|
|
1105
|
+
font-weight: 600;
|
|
1106
|
+
white-space: nowrap;
|
|
1107
|
+
flex-shrink: 0;
|
|
1108
|
+
min-width: 0;
|
|
1109
|
+
max-width: 280px;
|
|
1110
|
+
}
|
|
1111
|
+
.agent-chip.phase-idle {
|
|
1112
|
+
background: none;
|
|
1113
|
+
border-color: var(--c-line);
|
|
1114
|
+
}
|
|
1115
|
+
.agent-chip-dot {
|
|
1116
|
+
width: 7px;
|
|
1117
|
+
height: 7px;
|
|
1118
|
+
border-radius: 50%;
|
|
1119
|
+
background: var(--presence-color);
|
|
1120
|
+
flex-shrink: 0;
|
|
1121
|
+
}
|
|
1122
|
+
.agent-chip.phase-thinking .agent-chip-dot,
|
|
1123
|
+
.agent-chip.phase-tooling .agent-chip-dot {
|
|
1124
|
+
animation: presence-pulse 1.4s ease-in-out infinite;
|
|
1125
|
+
}
|
|
1126
|
+
.agent-chip-label {
|
|
1127
|
+
overflow: hidden;
|
|
1128
|
+
text-overflow: ellipsis;
|
|
1129
|
+
white-space: nowrap;
|
|
1130
|
+
min-width: 0;
|
|
1131
|
+
}
|
|
1132
|
+
.agent-chip-who {
|
|
1133
|
+
font: 10px var(--mono);
|
|
1134
|
+
font-weight: 400;
|
|
1135
|
+
color: var(--c-muted);
|
|
1136
|
+
white-space: nowrap;
|
|
1137
|
+
}
|
|
1138
|
+
|
|
1139
|
+
/* On-canvas cursor + phase chip (world layer; counter-scaled inner) */
|
|
1140
|
+
.agent-presence-layer {
|
|
1141
|
+
display: contents;
|
|
1142
|
+
}
|
|
1143
|
+
.agent-cursor {
|
|
1144
|
+
position: absolute;
|
|
1145
|
+
left: 0;
|
|
1146
|
+
top: 0;
|
|
1147
|
+
z-index: 9000;
|
|
1148
|
+
pointer-events: none;
|
|
1149
|
+
transition: transform 220ms cubic-bezier(0.22, 1, 0.36, 1);
|
|
1150
|
+
color: var(--presence-color);
|
|
1151
|
+
}
|
|
1152
|
+
.agent-cursor.is-worker {
|
|
1153
|
+
opacity: 0.85;
|
|
1154
|
+
}
|
|
1155
|
+
.agent-cursor.is-worker .agent-cursor-glyph {
|
|
1156
|
+
transform: scale(0.75);
|
|
1157
|
+
transform-origin: top left;
|
|
1158
|
+
}
|
|
1159
|
+
.agent-cursor.is-worker .agent-cursor-chip {
|
|
1160
|
+
font-size: 9px;
|
|
1161
|
+
padding: 1px 6px;
|
|
1162
|
+
}
|
|
1163
|
+
.agent-chip-workers {
|
|
1164
|
+
margin-left: 4px;
|
|
1165
|
+
padding: 0 5px;
|
|
1166
|
+
border-radius: 8px;
|
|
1167
|
+
background: color-mix(in srgb, var(--c-accent) 16%, transparent);
|
|
1168
|
+
color: var(--c-accent);
|
|
1169
|
+
font-size: 9px;
|
|
1170
|
+
font-weight: 700;
|
|
1171
|
+
letter-spacing: 0.04em;
|
|
1172
|
+
white-space: nowrap;
|
|
1173
|
+
}
|
|
1174
|
+
|
|
1175
|
+
/* End THIS session — each chip carries its own ×, so a two-agent board can
|
|
1176
|
+
end one writer without hunting for it in the session panel. */
|
|
1177
|
+
.agent-chip-end {
|
|
1178
|
+
margin-left: 2px;
|
|
1179
|
+
padding: 0 3px;
|
|
1180
|
+
border: none;
|
|
1181
|
+
background: none;
|
|
1182
|
+
color: var(--c-muted);
|
|
1183
|
+
font-size: 12px;
|
|
1184
|
+
line-height: 1;
|
|
1185
|
+
cursor: pointer;
|
|
1186
|
+
border-radius: 6px;
|
|
1187
|
+
}
|
|
1188
|
+
|
|
1189
|
+
.agent-chip-end:hover {
|
|
1190
|
+
color: var(--c-danger, #ef4444);
|
|
1191
|
+
background: color-mix(in srgb, currentColor 12%, transparent);
|
|
1192
|
+
}
|
|
1193
|
+
|
|
1194
|
+
.agent-cursor-glyph path {
|
|
1195
|
+
fill: var(--identity-color, currentColor);
|
|
1196
|
+
}
|
|
1197
|
+
.agent-cursor-chip {
|
|
1198
|
+
border-left: 3px solid var(--identity-color, transparent);
|
|
1199
|
+
}
|
|
1200
|
+
.agent-chip {
|
|
1201
|
+
border-left: 3px solid var(--identity-color, transparent);
|
|
1202
|
+
}
|
|
1203
|
+
.minimap-presence {
|
|
1204
|
+
background: var(--identity-color, var(--presence-color));
|
|
1205
|
+
}
|
|
1206
|
+
|
|
1207
|
+
.agent-cursor.is-external {
|
|
1208
|
+
opacity: 0.8;
|
|
1209
|
+
}
|
|
1210
|
+
.agent-cursor.is-external .agent-cursor-chip {
|
|
1211
|
+
border-style: dashed;
|
|
1212
|
+
}
|
|
1213
|
+
|
|
1214
|
+
.agent-cursor-inner {
|
|
1215
|
+
position: relative;
|
|
1216
|
+
transform-origin: 0 0;
|
|
1217
|
+
}
|
|
1218
|
+
.agent-cursor-glyph {
|
|
1219
|
+
display: block;
|
|
1220
|
+
filter: drop-shadow(0 2px 6px rgba(0, 0, 0, 0.35));
|
|
1221
|
+
}
|
|
1222
|
+
.agent-cursor-chip {
|
|
1223
|
+
position: absolute;
|
|
1224
|
+
left: 14px;
|
|
1225
|
+
top: 18px;
|
|
1226
|
+
display: inline-flex;
|
|
1227
|
+
align-items: center;
|
|
1228
|
+
gap: 6px;
|
|
1229
|
+
padding: 3px 9px;
|
|
1230
|
+
border-radius: 999px;
|
|
1231
|
+
border: 1px solid color-mix(in srgb, var(--presence-color) 35%, transparent);
|
|
1232
|
+
background: color-mix(in srgb, var(--c-panel) 92%, var(--presence-color) 8%);
|
|
1233
|
+
color: var(--presence-color);
|
|
1234
|
+
font-size: 10.5px;
|
|
1235
|
+
font-weight: 600;
|
|
1236
|
+
white-space: nowrap;
|
|
1237
|
+
box-shadow: 0 4px 16px rgba(0, 0, 0, 0.3);
|
|
1238
|
+
}
|
|
1239
|
+
.agent-cursor-dot {
|
|
1240
|
+
width: 6px;
|
|
1241
|
+
height: 6px;
|
|
1242
|
+
border-radius: 50%;
|
|
1243
|
+
background: var(--presence-color);
|
|
1244
|
+
}
|
|
1245
|
+
.agent-cursor.phase-thinking .agent-cursor-dot,
|
|
1246
|
+
.agent-cursor.phase-tooling .agent-cursor-dot {
|
|
1247
|
+
animation: presence-pulse 1.4s ease-in-out infinite;
|
|
1248
|
+
}
|
|
1249
|
+
.agent-cursor-who {
|
|
1250
|
+
font: 9.5px var(--mono);
|
|
1251
|
+
font-weight: 400;
|
|
1252
|
+
color: var(--c-muted);
|
|
1253
|
+
}
|
|
1254
|
+
|
|
1255
|
+
/* Node shimmer: the node an attached agent is mutating right now */
|
|
1256
|
+
.canvas-node.agent-mutating {
|
|
1257
|
+
border-color: color-mix(in srgb, var(--c-accent) 45%, transparent) !important;
|
|
1258
|
+
background-image: linear-gradient(
|
|
1259
|
+
100deg,
|
|
1260
|
+
transparent 20%,
|
|
1261
|
+
color-mix(in srgb, var(--c-accent) 13%, transparent) 50%,
|
|
1262
|
+
transparent 80%
|
|
1263
|
+
);
|
|
1264
|
+
background-size: 200% 100%;
|
|
1265
|
+
animation: presence-shimmer 1.6s linear infinite;
|
|
1266
|
+
}
|
|
1267
|
+
|
|
1268
|
+
@keyframes presence-pulse {
|
|
1269
|
+
0%,
|
|
1270
|
+
100% {
|
|
1271
|
+
opacity: 1;
|
|
1272
|
+
}
|
|
1273
|
+
50% {
|
|
1274
|
+
opacity: 0.45;
|
|
1275
|
+
}
|
|
1276
|
+
}
|
|
1277
|
+
@keyframes presence-shimmer {
|
|
1278
|
+
from {
|
|
1279
|
+
background-position: 200% 0;
|
|
1280
|
+
}
|
|
1281
|
+
to {
|
|
1282
|
+
background-position: -200% 0;
|
|
1283
|
+
}
|
|
1284
|
+
}
|
|
1285
|
+
|
|
1286
|
+
/* Reduced motion: keep every static color state, drop the motion. */
|
|
1287
|
+
@media (prefers-reduced-motion: reduce) {
|
|
1288
|
+
.agent-cursor {
|
|
1289
|
+
transition: none;
|
|
1290
|
+
}
|
|
1291
|
+
.agent-chip-dot,
|
|
1292
|
+
.agent-cursor-dot,
|
|
1293
|
+
.canvas-node.agent-mutating {
|
|
1294
|
+
animation: none;
|
|
1295
|
+
}
|
|
1296
|
+
.canvas-node.agent-mutating {
|
|
1297
|
+
background-image: none;
|
|
1298
|
+
}
|
|
1299
|
+
}
|
|
1300
|
+
|
|
1301
|
+
/* ── Session panel (rail-chrome-v2 phase 4) ─────────────────────
|
|
1302
|
+
Right sibling of the centre column while a session is attached. Below
|
|
1303
|
+
1180px it becomes a fixed overlay drawer and the canvas reclaims its width. */
|
|
1304
|
+
.session-panel {
|
|
1305
|
+
width: 320px;
|
|
1306
|
+
flex-shrink: 0;
|
|
1307
|
+
display: flex;
|
|
1308
|
+
flex-direction: column;
|
|
1309
|
+
background: var(--c-panel-soft);
|
|
1310
|
+
border-left: 1px solid var(--c-line);
|
|
1311
|
+
min-height: 0;
|
|
1312
|
+
z-index: 9997;
|
|
1313
|
+
animation: session-panel-in 180ms ease;
|
|
1314
|
+
}
|
|
1315
|
+
.session-panel.is-collapsed {
|
|
1316
|
+
width: 28px;
|
|
1317
|
+
align-items: center;
|
|
1318
|
+
padding-top: 10px;
|
|
1319
|
+
gap: 10px;
|
|
1320
|
+
}
|
|
1321
|
+
.session-collapsed-label {
|
|
1322
|
+
writing-mode: vertical-rl;
|
|
1323
|
+
font-size: 10px;
|
|
1324
|
+
font-weight: 600;
|
|
1325
|
+
letter-spacing: 0.08em;
|
|
1326
|
+
text-transform: uppercase;
|
|
1327
|
+
color: var(--c-dim);
|
|
1328
|
+
}
|
|
1329
|
+
|
|
1330
|
+
.session-panel-header {
|
|
1331
|
+
height: var(--hud-bar-height);
|
|
1332
|
+
flex-shrink: 0;
|
|
1333
|
+
display: flex;
|
|
1334
|
+
align-items: center;
|
|
1335
|
+
gap: 10px;
|
|
1336
|
+
padding: 0 12px 0 16px;
|
|
1337
|
+
border-bottom: 1px solid var(--c-line);
|
|
1338
|
+
}
|
|
1339
|
+
.session-panel-title {
|
|
1340
|
+
font-size: 11px;
|
|
1341
|
+
font-weight: 700;
|
|
1342
|
+
letter-spacing: 0.08em;
|
|
1343
|
+
text-transform: uppercase;
|
|
1344
|
+
color: var(--c-text);
|
|
1345
|
+
}
|
|
1346
|
+
.session-live {
|
|
1347
|
+
--presence-color: var(--c-dim);
|
|
1348
|
+
display: inline-flex;
|
|
1349
|
+
align-items: center;
|
|
1350
|
+
gap: 5px;
|
|
1351
|
+
font: 10px var(--mono);
|
|
1352
|
+
color: var(--c-muted);
|
|
1353
|
+
}
|
|
1354
|
+
.session-live.phase-thinking {
|
|
1355
|
+
--presence-color: var(--c-purple);
|
|
1356
|
+
}
|
|
1357
|
+
.session-live.phase-tooling {
|
|
1358
|
+
--presence-color: var(--c-accent);
|
|
1359
|
+
}
|
|
1360
|
+
.session-live.phase-waiting-approval {
|
|
1361
|
+
--presence-color: var(--c-warn);
|
|
1362
|
+
}
|
|
1363
|
+
.session-live-dot {
|
|
1364
|
+
width: 6px;
|
|
1365
|
+
height: 6px;
|
|
1366
|
+
border-radius: 50%;
|
|
1367
|
+
background: var(--presence-color);
|
|
1368
|
+
}
|
|
1369
|
+
.session-live.phase-thinking .session-live-dot,
|
|
1370
|
+
.session-live.phase-tooling .session-live-dot {
|
|
1371
|
+
animation: presence-pulse 1.4s ease-in-out infinite;
|
|
1372
|
+
}
|
|
1373
|
+
.session-collapse {
|
|
1374
|
+
width: 26px;
|
|
1375
|
+
height: 26px;
|
|
1376
|
+
border: 1px solid transparent;
|
|
1377
|
+
border-radius: 6px;
|
|
1378
|
+
background: none;
|
|
1379
|
+
color: var(--c-muted);
|
|
1380
|
+
font-size: 16px;
|
|
1381
|
+
line-height: 1;
|
|
1382
|
+
cursor: pointer;
|
|
1383
|
+
}
|
|
1384
|
+
.session-collapse:hover {
|
|
1385
|
+
background: var(--c-surface-hover);
|
|
1386
|
+
color: var(--c-text);
|
|
1387
|
+
}
|
|
1388
|
+
|
|
1389
|
+
.session-panel-body {
|
|
1390
|
+
flex: 1;
|
|
1391
|
+
min-height: 0;
|
|
1392
|
+
overflow-y: auto;
|
|
1393
|
+
padding: 12px 12px 16px;
|
|
1394
|
+
display: flex;
|
|
1395
|
+
flex-direction: column;
|
|
1396
|
+
gap: 16px;
|
|
1397
|
+
}
|
|
1398
|
+
.session-section-title {
|
|
1399
|
+
margin: 0 0 8px;
|
|
1400
|
+
font-size: 10px;
|
|
1401
|
+
font-weight: 700;
|
|
1402
|
+
letter-spacing: 0.08em;
|
|
1403
|
+
text-transform: uppercase;
|
|
1404
|
+
color: var(--c-dim);
|
|
1405
|
+
}
|
|
1406
|
+
.session-empty {
|
|
1407
|
+
font-size: 10.5px;
|
|
1408
|
+
line-height: 1.5;
|
|
1409
|
+
color: var(--c-dim);
|
|
1410
|
+
}
|
|
1411
|
+
.session-list {
|
|
1412
|
+
list-style: none;
|
|
1413
|
+
margin: 0;
|
|
1414
|
+
padding: 0;
|
|
1415
|
+
display: flex;
|
|
1416
|
+
flex-direction: column;
|
|
1417
|
+
gap: 6px;
|
|
1418
|
+
}
|
|
1419
|
+
|
|
1420
|
+
/* Work items + gates */
|
|
1421
|
+
.session-item {
|
|
1422
|
+
--glyph: var(--c-dim);
|
|
1423
|
+
display: flex;
|
|
1424
|
+
align-items: flex-start;
|
|
1425
|
+
gap: 8px;
|
|
1426
|
+
padding: 8px 10px;
|
|
1427
|
+
border: 1px solid var(--c-line);
|
|
1428
|
+
border-radius: 8px;
|
|
1429
|
+
background: color-mix(in srgb, var(--c-panel) 70%, transparent);
|
|
1430
|
+
}
|
|
1431
|
+
.session-item.status-running {
|
|
1432
|
+
--glyph: var(--c-accent);
|
|
1433
|
+
}
|
|
1434
|
+
.session-item.status-awaiting {
|
|
1435
|
+
--glyph: var(--c-warn);
|
|
1436
|
+
}
|
|
1437
|
+
.session-item.status-done {
|
|
1438
|
+
--glyph: var(--c-ok);
|
|
1439
|
+
}
|
|
1440
|
+
.session-item.status-vetoed {
|
|
1441
|
+
--glyph: var(--c-danger);
|
|
1442
|
+
}
|
|
1443
|
+
.session-glyph {
|
|
1444
|
+
width: 7px;
|
|
1445
|
+
height: 7px;
|
|
1446
|
+
margin-top: 5px;
|
|
1447
|
+
border-radius: 50%;
|
|
1448
|
+
background: var(--glyph);
|
|
1449
|
+
flex-shrink: 0;
|
|
1450
|
+
}
|
|
1451
|
+
.session-item.status-running .session-glyph {
|
|
1452
|
+
animation: presence-pulse 1.4s ease-in-out infinite;
|
|
1453
|
+
}
|
|
1454
|
+
.session-item-main {
|
|
1455
|
+
flex: 1;
|
|
1456
|
+
min-width: 0;
|
|
1457
|
+
}
|
|
1458
|
+
.session-item-title {
|
|
1459
|
+
display: block;
|
|
1460
|
+
width: 100%;
|
|
1461
|
+
padding: 0;
|
|
1462
|
+
border: none;
|
|
1463
|
+
background: none;
|
|
1464
|
+
text-align: left;
|
|
1465
|
+
font-size: 12px;
|
|
1466
|
+
font-weight: 600;
|
|
1467
|
+
color: var(--c-text-soft);
|
|
1468
|
+
cursor: pointer;
|
|
1469
|
+
white-space: nowrap;
|
|
1470
|
+
overflow: hidden;
|
|
1471
|
+
text-overflow: ellipsis;
|
|
1472
|
+
}
|
|
1473
|
+
.session-item-title:disabled {
|
|
1474
|
+
cursor: default;
|
|
1475
|
+
}
|
|
1476
|
+
.session-item-title:not(:disabled):hover {
|
|
1477
|
+
color: var(--c-text);
|
|
1478
|
+
}
|
|
1479
|
+
.session-item-detail {
|
|
1480
|
+
margin-top: 2px;
|
|
1481
|
+
font-size: 10.5px;
|
|
1482
|
+
line-height: 1.45;
|
|
1483
|
+
color: var(--c-muted);
|
|
1484
|
+
}
|
|
1485
|
+
.session-item-status {
|
|
1486
|
+
font-size: 9px;
|
|
1487
|
+
font-weight: 700;
|
|
1488
|
+
letter-spacing: 0.06em;
|
|
1489
|
+
text-transform: uppercase;
|
|
1490
|
+
color: var(--glyph);
|
|
1491
|
+
flex-shrink: 0;
|
|
1492
|
+
margin-top: 3px;
|
|
1493
|
+
}
|
|
1494
|
+
.session-item-time {
|
|
1495
|
+
font: 9px var(--mono);
|
|
1496
|
+
color: var(--c-dim);
|
|
1497
|
+
flex-shrink: 0;
|
|
1498
|
+
margin-top: 4px;
|
|
1499
|
+
}
|
|
1500
|
+
.session-gate {
|
|
1501
|
+
border-color: color-mix(in srgb, var(--c-warn) 35%, transparent);
|
|
1502
|
+
background: color-mix(in srgb, var(--c-warn) 6%, transparent);
|
|
1503
|
+
}
|
|
1504
|
+
.session-gate-ttl {
|
|
1505
|
+
margin-top: 4px;
|
|
1506
|
+
font: 10px var(--mono);
|
|
1507
|
+
color: var(--c-warn);
|
|
1508
|
+
}
|
|
1509
|
+
.session-gate-held {
|
|
1510
|
+
opacity: 0.85;
|
|
1511
|
+
}
|
|
1512
|
+
.session-gate-actions {
|
|
1513
|
+
display: flex;
|
|
1514
|
+
gap: 6px;
|
|
1515
|
+
margin-top: 8px;
|
|
1516
|
+
}
|
|
1517
|
+
.session-gate-approve,
|
|
1518
|
+
.session-gate-reject {
|
|
1519
|
+
padding: 4px 12px;
|
|
1520
|
+
border-radius: 7px;
|
|
1521
|
+
font-size: 11px;
|
|
1522
|
+
font-weight: 600;
|
|
1523
|
+
cursor: pointer;
|
|
1524
|
+
}
|
|
1525
|
+
.session-gate-approve {
|
|
1526
|
+
border: 1px solid transparent;
|
|
1527
|
+
background: color-mix(in srgb, var(--c-ok) 15%, transparent);
|
|
1528
|
+
color: var(--c-ok);
|
|
1529
|
+
}
|
|
1530
|
+
.session-gate-approve:hover {
|
|
1531
|
+
background: color-mix(in srgb, var(--c-ok) 25%, transparent);
|
|
1532
|
+
}
|
|
1533
|
+
.session-gate-reject {
|
|
1534
|
+
border: 1px solid var(--c-line);
|
|
1535
|
+
background: none;
|
|
1536
|
+
color: var(--c-muted);
|
|
1537
|
+
}
|
|
1538
|
+
.session-gate-reject:hover {
|
|
1539
|
+
border-color: color-mix(in srgb, var(--c-danger) 45%, transparent);
|
|
1540
|
+
color: var(--c-danger);
|
|
1541
|
+
}
|
|
1542
|
+
.session-gate-approve:disabled,
|
|
1543
|
+
.session-gate-reject:disabled {
|
|
1544
|
+
opacity: 0.6;
|
|
1545
|
+
cursor: progress;
|
|
1546
|
+
}
|
|
1547
|
+
|
|
1548
|
+
/* Timeline */
|
|
1549
|
+
/* One row, always: compact chips, no wrapping, and the row runs full-bleed
|
|
1550
|
+
across the panel's inner padding so all six fit. If a theme/locale ever
|
|
1551
|
+
makes them wider still, the row pans horizontally instead of stacking. */
|
|
1552
|
+
.session-section-toggle {
|
|
1553
|
+
display: flex;
|
|
1554
|
+
align-items: center;
|
|
1555
|
+
gap: 8px;
|
|
1556
|
+
width: 100%;
|
|
1557
|
+
padding: 0;
|
|
1558
|
+
background: none;
|
|
1559
|
+
border: none;
|
|
1560
|
+
cursor: pointer;
|
|
1561
|
+
text-align: left;
|
|
1562
|
+
}
|
|
1563
|
+
.session-work-summary {
|
|
1564
|
+
margin-left: auto;
|
|
1565
|
+
display: inline-flex;
|
|
1566
|
+
align-items: center;
|
|
1567
|
+
gap: 6px;
|
|
1568
|
+
font: 10px/1 var(--mono);
|
|
1569
|
+
color: var(--c-muted);
|
|
1570
|
+
}
|
|
1571
|
+
.session-work-dot {
|
|
1572
|
+
width: 8px;
|
|
1573
|
+
height: 8px;
|
|
1574
|
+
border-radius: 50%;
|
|
1575
|
+
background: var(--c-ok);
|
|
1576
|
+
animation: session-work-pulse 1.6s ease-in-out infinite;
|
|
1577
|
+
}
|
|
1578
|
+
@keyframes session-work-pulse {
|
|
1579
|
+
0%,
|
|
1580
|
+
100% {
|
|
1581
|
+
opacity: 0.45;
|
|
1582
|
+
transform: scale(0.85);
|
|
1583
|
+
}
|
|
1584
|
+
50% {
|
|
1585
|
+
opacity: 1;
|
|
1586
|
+
transform: scale(1);
|
|
1587
|
+
}
|
|
1588
|
+
}
|
|
1589
|
+
.session-section-chevron {
|
|
1590
|
+
color: var(--c-muted);
|
|
1591
|
+
font-size: 13px;
|
|
1592
|
+
transition: transform 0.15s ease;
|
|
1593
|
+
}
|
|
1594
|
+
.session-section-chevron.is-open {
|
|
1595
|
+
transform: rotate(90deg);
|
|
1596
|
+
}
|
|
1597
|
+
|
|
1598
|
+
.session-undo-row {
|
|
1599
|
+
display: flex;
|
|
1600
|
+
align-items: center;
|
|
1601
|
+
gap: 8px;
|
|
1602
|
+
padding: 7px 12px;
|
|
1603
|
+
border-bottom: 1px solid var(--c-line);
|
|
1604
|
+
background: var(--c-accent-8);
|
|
1605
|
+
}
|
|
1606
|
+
.session-undo-text {
|
|
1607
|
+
flex: 1;
|
|
1608
|
+
min-width: 0;
|
|
1609
|
+
overflow: hidden;
|
|
1610
|
+
text-overflow: ellipsis;
|
|
1611
|
+
white-space: nowrap;
|
|
1612
|
+
font-size: 11px;
|
|
1613
|
+
color: var(--c-text-soft);
|
|
1614
|
+
}
|
|
1615
|
+
.session-undo-btn {
|
|
1616
|
+
flex-shrink: 0;
|
|
1617
|
+
padding: 3px 10px;
|
|
1618
|
+
border: 1px solid var(--c-accent-25);
|
|
1619
|
+
border-radius: 999px;
|
|
1620
|
+
background: none;
|
|
1621
|
+
color: var(--c-accent);
|
|
1622
|
+
font-size: 11px;
|
|
1623
|
+
font-weight: 600;
|
|
1624
|
+
cursor: pointer;
|
|
1625
|
+
}
|
|
1626
|
+
.session-undo-btn:hover {
|
|
1627
|
+
background: var(--c-accent-10);
|
|
1628
|
+
}
|
|
1629
|
+
|
|
1630
|
+
.session-timeline-filters {
|
|
1631
|
+
display: flex;
|
|
1632
|
+
flex-wrap: nowrap;
|
|
1633
|
+
gap: 1px;
|
|
1634
|
+
margin: 2px -12px 8px;
|
|
1635
|
+
/* Compact panels (Amp portal, 0.5.0 report B): six chips overflowed the
|
|
1636
|
+
row by 11px — tighter inset + chip padding buys ~16px back. */
|
|
1637
|
+
padding: 0 8px;
|
|
1638
|
+
overflow-x: auto;
|
|
1639
|
+
scrollbar-width: none;
|
|
1640
|
+
}
|
|
1641
|
+
.session-timeline-filters::-webkit-scrollbar {
|
|
1642
|
+
display: none;
|
|
1643
|
+
}
|
|
1644
|
+
|
|
1645
|
+
/* The hovered/active chip's one-line meaning — rendered in flow because an
|
|
1646
|
+
anchored tooltip would clip against the filter row's own scroll container. */
|
|
1647
|
+
.session-timeline-hint {
|
|
1648
|
+
margin: -4px 0 8px;
|
|
1649
|
+
font-size: 10px;
|
|
1650
|
+
line-height: 1.35;
|
|
1651
|
+
color: var(--c-muted);
|
|
1652
|
+
min-height: 14px;
|
|
1653
|
+
}
|
|
1654
|
+
.session-timeline-filters .activity-filter {
|
|
1655
|
+
flex-shrink: 0;
|
|
1656
|
+
padding: 2px 4px;
|
|
1657
|
+
}
|
|
1658
|
+
|
|
1659
|
+
.session-timeline-row {
|
|
1660
|
+
--tone: var(--c-muted);
|
|
1661
|
+
display: flex;
|
|
1662
|
+
gap: 8px;
|
|
1663
|
+
padding: 4px 2px;
|
|
1664
|
+
}
|
|
1665
|
+
.session-timeline-row.tone-accent {
|
|
1666
|
+
--tone: var(--c-accent);
|
|
1667
|
+
}
|
|
1668
|
+
.session-timeline-row.tone-ok {
|
|
1669
|
+
--tone: var(--c-ok);
|
|
1670
|
+
}
|
|
1671
|
+
.session-timeline-row.tone-warn {
|
|
1672
|
+
--tone: var(--c-warn);
|
|
1673
|
+
}
|
|
1674
|
+
.session-timeline-row.tone-danger {
|
|
1675
|
+
--tone: var(--c-danger);
|
|
1676
|
+
}
|
|
1677
|
+
.session-timeline-row.tone-purple {
|
|
1678
|
+
--tone: var(--c-purple);
|
|
1679
|
+
}
|
|
1680
|
+
.session-timeline-dot {
|
|
1681
|
+
width: 6px;
|
|
1682
|
+
height: 6px;
|
|
1683
|
+
margin-top: 5px;
|
|
1684
|
+
border-radius: 50%;
|
|
1685
|
+
background: var(--tone);
|
|
1686
|
+
flex-shrink: 0;
|
|
1687
|
+
}
|
|
1688
|
+
.session-timeline-main {
|
|
1689
|
+
flex: 1;
|
|
1690
|
+
min-width: 0;
|
|
1691
|
+
}
|
|
1692
|
+
.session-timeline-head {
|
|
1693
|
+
display: flex;
|
|
1694
|
+
align-items: baseline;
|
|
1695
|
+
gap: 8px;
|
|
1696
|
+
}
|
|
1697
|
+
.session-timeline-label {
|
|
1698
|
+
font-size: 11px;
|
|
1699
|
+
font-weight: 600;
|
|
1700
|
+
color: var(--tone);
|
|
1701
|
+
}
|
|
1702
|
+
/* Row writer in its identity hue — multi-assistant boards need every row to
|
|
1703
|
+
answer "who wrote this" without opening anything. */
|
|
1704
|
+
.session-timeline-who {
|
|
1705
|
+
font-size: 10px;
|
|
1706
|
+
font-weight: 600;
|
|
1707
|
+
color: var(--identity-color, var(--c-muted));
|
|
1708
|
+
white-space: nowrap;
|
|
1709
|
+
overflow: hidden;
|
|
1710
|
+
text-overflow: ellipsis;
|
|
1711
|
+
max-width: 40%;
|
|
1712
|
+
}
|
|
1713
|
+
.session-timeline-undo {
|
|
1714
|
+
display: inline-flex;
|
|
1715
|
+
align-items: center;
|
|
1716
|
+
gap: 5px;
|
|
1717
|
+
margin-top: 5px;
|
|
1718
|
+
padding: 4px 12px;
|
|
1719
|
+
border: 1px solid var(--c-accent);
|
|
1720
|
+
border-radius: 999px;
|
|
1721
|
+
background: var(--c-accent-10);
|
|
1722
|
+
color: var(--c-accent);
|
|
1723
|
+
font-size: 11.5px;
|
|
1724
|
+
font-weight: 700;
|
|
1725
|
+
cursor: pointer;
|
|
1726
|
+
animation: session-work-pulse 1.6s ease-in-out 2;
|
|
1727
|
+
}
|
|
1728
|
+
.session-timeline-undo:hover {
|
|
1729
|
+
background: var(--c-accent);
|
|
1730
|
+
color: var(--c-bg);
|
|
1731
|
+
}
|
|
1732
|
+
.session-timeline-undone {
|
|
1733
|
+
margin-top: 2px;
|
|
1734
|
+
font: 9px var(--mono);
|
|
1735
|
+
color: var(--c-dim);
|
|
1736
|
+
}
|
|
1737
|
+
.session-timeline-body {
|
|
1738
|
+
font-size: 10.5px;
|
|
1739
|
+
line-height: 1.5;
|
|
1740
|
+
color: var(--c-text-soft);
|
|
1741
|
+
overflow-wrap: anywhere;
|
|
1742
|
+
}
|
|
1743
|
+
|
|
1744
|
+
/* Scope row (session panel) */
|
|
1745
|
+
.session-scope {
|
|
1746
|
+
display: flex;
|
|
1747
|
+
align-items: center;
|
|
1748
|
+
gap: 8px;
|
|
1749
|
+
padding: 8px 12px 8px 16px;
|
|
1750
|
+
border-bottom: 1px solid var(--c-line);
|
|
1751
|
+
font-size: 10.5px;
|
|
1752
|
+
color: var(--c-muted);
|
|
1753
|
+
}
|
|
1754
|
+
.session-scope.is-fenced {
|
|
1755
|
+
background: color-mix(in srgb, var(--c-purple) 8%, transparent);
|
|
1756
|
+
color: var(--c-text-soft);
|
|
1757
|
+
}
|
|
1758
|
+
.session-scope-dot {
|
|
1759
|
+
width: 6px;
|
|
1760
|
+
height: 6px;
|
|
1761
|
+
border-radius: 50%;
|
|
1762
|
+
background: var(--c-dim);
|
|
1763
|
+
flex-shrink: 0;
|
|
1764
|
+
}
|
|
1765
|
+
.session-scope.is-fenced .session-scope-dot {
|
|
1766
|
+
background: var(--c-purple);
|
|
1767
|
+
}
|
|
1768
|
+
.session-scope-text {
|
|
1769
|
+
flex: 1;
|
|
1770
|
+
min-width: 0;
|
|
1771
|
+
}
|
|
1772
|
+
.session-scope-text strong {
|
|
1773
|
+
color: var(--c-purple);
|
|
1774
|
+
}
|
|
1775
|
+
.session-scope-action {
|
|
1776
|
+
padding: 3px 9px;
|
|
1777
|
+
border-radius: 6px;
|
|
1778
|
+
border: 1px solid var(--c-line);
|
|
1779
|
+
background: none;
|
|
1780
|
+
color: var(--c-muted);
|
|
1781
|
+
font-size: 10.5px;
|
|
1782
|
+
font-weight: 600;
|
|
1783
|
+
cursor: pointer;
|
|
1784
|
+
white-space: nowrap;
|
|
1785
|
+
}
|
|
1786
|
+
.session-scope-action:hover:not(:disabled) {
|
|
1787
|
+
border-color: color-mix(in srgb, var(--c-purple) 45%, transparent);
|
|
1788
|
+
color: var(--c-purple);
|
|
1789
|
+
}
|
|
1790
|
+
.session-scope-action:disabled {
|
|
1791
|
+
opacity: 0.5;
|
|
1792
|
+
cursor: default;
|
|
1793
|
+
}
|
|
1794
|
+
|
|
1795
|
+
/* Scope fence on the canvas (world layer) */
|
|
1796
|
+
.scope-fence {
|
|
1797
|
+
position: absolute;
|
|
1798
|
+
left: 0;
|
|
1799
|
+
top: 0;
|
|
1800
|
+
z-index: 1;
|
|
1801
|
+
pointer-events: none;
|
|
1802
|
+
border: 1.5px dashed color-mix(in srgb, var(--c-purple) 40%, transparent);
|
|
1803
|
+
border-radius: 16px;
|
|
1804
|
+
background: color-mix(in srgb, var(--c-purple) 3%, transparent);
|
|
1805
|
+
}
|
|
1806
|
+
.scope-fence-pill {
|
|
1807
|
+
position: absolute;
|
|
1808
|
+
left: 14px;
|
|
1809
|
+
transform-origin: 0 50%;
|
|
1810
|
+
padding: 3px 10px;
|
|
1811
|
+
border-radius: 999px;
|
|
1812
|
+
border: 1px solid color-mix(in srgb, var(--c-purple) 35%, transparent);
|
|
1813
|
+
background: color-mix(in srgb, var(--c-panel) 92%, var(--c-purple) 8%);
|
|
1814
|
+
color: var(--c-purple);
|
|
1815
|
+
font-size: 10px;
|
|
1816
|
+
font-weight: 600;
|
|
1817
|
+
letter-spacing: 0.04em;
|
|
1818
|
+
white-space: nowrap;
|
|
1819
|
+
}
|
|
1820
|
+
.scope-fence-pill-top {
|
|
1821
|
+
top: -11px;
|
|
1822
|
+
}
|
|
1823
|
+
.scope-fence-pill-bottom {
|
|
1824
|
+
bottom: -11px;
|
|
1825
|
+
color: var(--c-muted);
|
|
1826
|
+
font-weight: 500;
|
|
1827
|
+
letter-spacing: 0;
|
|
1828
|
+
}
|
|
1829
|
+
|
|
1830
|
+
/* ── Command bar (rail-chrome-v2 phase 5) ─────────────────────
|
|
1831
|
+
The human's steering surface while a session is attached: the design's
|
|
1832
|
+
floating composer, centered at the bottom of the canvas region, with the
|
|
1833
|
+
pinned-context chips floating above it. */
|
|
1834
|
+
.command-bar {
|
|
1835
|
+
position: absolute;
|
|
1836
|
+
left: 50%;
|
|
1837
|
+
bottom: 18px;
|
|
1838
|
+
transform: translateX(-50%);
|
|
1839
|
+
width: min(560px, calc(100% - 48px));
|
|
1840
|
+
z-index: 65;
|
|
1841
|
+
display: flex;
|
|
1842
|
+
flex-direction: column;
|
|
1843
|
+
gap: 6px;
|
|
1844
|
+
}
|
|
1845
|
+
.command-bar-chips {
|
|
1846
|
+
display: flex;
|
|
1847
|
+
flex-wrap: wrap;
|
|
1848
|
+
align-items: center;
|
|
1849
|
+
gap: 6px;
|
|
1850
|
+
}
|
|
1851
|
+
.command-bar-chip {
|
|
1852
|
+
display: inline-flex;
|
|
1853
|
+
align-items: center;
|
|
1854
|
+
gap: 5px;
|
|
1855
|
+
max-width: 240px;
|
|
1856
|
+
padding: 2px 5px 2px 9px;
|
|
1857
|
+
border-radius: 999px;
|
|
1858
|
+
border: 1px solid color-mix(in srgb, var(--c-warn) 35%, transparent);
|
|
1859
|
+
background: color-mix(in srgb, var(--c-warn) 12%, transparent);
|
|
1860
|
+
color: var(--c-warn);
|
|
1861
|
+
font-size: 10px;
|
|
1862
|
+
font-weight: 600;
|
|
1863
|
+
}
|
|
1864
|
+
.command-bar-chip-glyph {
|
|
1865
|
+
font-size: 10px;
|
|
1866
|
+
line-height: 1;
|
|
1867
|
+
}
|
|
1868
|
+
.command-bar-chip-label {
|
|
1869
|
+
overflow: hidden;
|
|
1870
|
+
text-overflow: ellipsis;
|
|
1871
|
+
white-space: nowrap;
|
|
1872
|
+
}
|
|
1873
|
+
.command-bar-chip-unpin {
|
|
1874
|
+
width: 14px;
|
|
1875
|
+
height: 14px;
|
|
1876
|
+
border: none;
|
|
1877
|
+
border-radius: 50%;
|
|
1878
|
+
background: none;
|
|
1879
|
+
color: var(--c-warn);
|
|
1880
|
+
font-size: 12px;
|
|
1881
|
+
line-height: 1;
|
|
1882
|
+
cursor: pointer;
|
|
1883
|
+
opacity: 0.7;
|
|
1884
|
+
}
|
|
1885
|
+
.command-bar-chip-unpin:hover {
|
|
1886
|
+
opacity: 1;
|
|
1887
|
+
background: color-mix(in srgb, var(--c-warn) 25%, transparent);
|
|
1888
|
+
}
|
|
1889
|
+
.command-bar-chips-note {
|
|
1890
|
+
font-size: 10px;
|
|
1891
|
+
color: var(--c-dim);
|
|
1892
|
+
}
|
|
1893
|
+
.command-bar-composer {
|
|
1894
|
+
display: flex;
|
|
1895
|
+
align-items: center;
|
|
1896
|
+
gap: 10px;
|
|
1897
|
+
padding: 10px 14px;
|
|
1898
|
+
border-radius: 12px;
|
|
1899
|
+
border: 1px solid var(--c-line);
|
|
1900
|
+
background: color-mix(in srgb, var(--c-panel) 95%, transparent);
|
|
1901
|
+
backdrop-filter: blur(16px);
|
|
1902
|
+
box-shadow: 0 12px 40px rgba(0, 0, 0, 0.5);
|
|
1903
|
+
}
|
|
1904
|
+
.command-bar-target {
|
|
1905
|
+
appearance: none;
|
|
1906
|
+
-webkit-appearance: none;
|
|
1907
|
+
max-width: 148px;
|
|
1908
|
+
padding: 4px 18px 4px 8px;
|
|
1909
|
+
border: 1px solid var(--c-line);
|
|
1910
|
+
border-radius: 7px;
|
|
1911
|
+
background: color-mix(in srgb, var(--c-panel) 80%, transparent)
|
|
1912
|
+
url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='8' height='5'%3E%3Cpath d='M1 1l3 3 3-3' fill='none' stroke='%237a8699' stroke-width='1.4'/%3E%3C/svg%3E")
|
|
1913
|
+
no-repeat right 6px center;
|
|
1914
|
+
color: var(--c-text-soft);
|
|
1915
|
+
font: 12px/1.3 var(--mono);
|
|
1916
|
+
cursor: pointer;
|
|
1917
|
+
flex-shrink: 0;
|
|
1918
|
+
}
|
|
1919
|
+
.command-bar-target:hover,
|
|
1920
|
+
.command-bar-target:focus-visible {
|
|
1921
|
+
border-color: var(--c-accent-25);
|
|
1922
|
+
color: var(--c-text);
|
|
1923
|
+
}
|
|
1924
|
+
|
|
1925
|
+
.command-bar-icon {
|
|
1926
|
+
flex-shrink: 0;
|
|
1927
|
+
color: var(--c-purple);
|
|
1928
|
+
}
|
|
1929
|
+
.command-bar-input {
|
|
1930
|
+
flex: 1;
|
|
1931
|
+
min-width: 0;
|
|
1932
|
+
padding: 0;
|
|
1933
|
+
border: none;
|
|
1934
|
+
outline: none;
|
|
1935
|
+
background: none;
|
|
1936
|
+
color: var(--c-text);
|
|
1937
|
+
font: 13px var(--font);
|
|
1938
|
+
}
|
|
1939
|
+
.command-bar-input::placeholder {
|
|
1940
|
+
color: var(--c-dim);
|
|
1941
|
+
}
|
|
1942
|
+
.command-bar-composer:focus-within {
|
|
1943
|
+
border-color: color-mix(in srgb, var(--c-accent) 45%, var(--c-line));
|
|
1944
|
+
}
|
|
1945
|
+
.command-bar-send {
|
|
1946
|
+
flex-shrink: 0;
|
|
1947
|
+
padding: 5px 14px;
|
|
1948
|
+
border-radius: 7px;
|
|
1949
|
+
border: none;
|
|
1950
|
+
background: var(--c-accent);
|
|
1951
|
+
color: var(--c-bg);
|
|
1952
|
+
font-size: 11px;
|
|
1953
|
+
font-weight: 600;
|
|
1954
|
+
cursor: pointer;
|
|
1955
|
+
}
|
|
1956
|
+
.command-bar-send:hover:not(:disabled) {
|
|
1957
|
+
background: color-mix(in srgb, var(--c-accent) 80%, white);
|
|
1958
|
+
}
|
|
1959
|
+
.command-bar-send:disabled {
|
|
1960
|
+
opacity: 0.45;
|
|
1961
|
+
cursor: default;
|
|
1962
|
+
}
|
|
1963
|
+
|
|
1964
|
+
/* Context-budget meter in the top bar (session-only) */
|
|
1965
|
+
.context-budget {
|
|
1966
|
+
--tone: var(--c-ok);
|
|
1967
|
+
display: inline-flex;
|
|
1968
|
+
align-items: center;
|
|
1969
|
+
gap: 8px;
|
|
1970
|
+
flex-shrink: 0;
|
|
1971
|
+
}
|
|
1972
|
+
.context-budget.tone-warn {
|
|
1973
|
+
--tone: var(--c-warn);
|
|
1974
|
+
}
|
|
1975
|
+
.context-budget.tone-danger {
|
|
1976
|
+
--tone: var(--c-danger);
|
|
1977
|
+
}
|
|
1978
|
+
.context-budget-caption {
|
|
1979
|
+
font-size: 10px;
|
|
1980
|
+
font-weight: 600;
|
|
1981
|
+
letter-spacing: 0.06em;
|
|
1982
|
+
text-transform: uppercase;
|
|
1983
|
+
color: var(--c-muted);
|
|
1984
|
+
}
|
|
1985
|
+
.context-budget-track {
|
|
1986
|
+
display: block;
|
|
1987
|
+
width: 72px;
|
|
1988
|
+
height: 5px;
|
|
1989
|
+
border-radius: 3px;
|
|
1990
|
+
background: var(--c-line);
|
|
1991
|
+
overflow: hidden;
|
|
1992
|
+
}
|
|
1993
|
+
.context-budget-fill {
|
|
1994
|
+
display: block;
|
|
1995
|
+
height: 100%;
|
|
1996
|
+
border-radius: 3px;
|
|
1997
|
+
background: linear-gradient(90deg, var(--c-accent), var(--c-warn));
|
|
1998
|
+
transition: width 180ms ease;
|
|
1999
|
+
}
|
|
2000
|
+
.context-budget.tone-warn .context-budget-fill,
|
|
2001
|
+
.context-budget.tone-danger .context-budget-fill {
|
|
2002
|
+
background: var(--tone);
|
|
2003
|
+
}
|
|
2004
|
+
.context-budget-label {
|
|
2005
|
+
font: 11px var(--mono);
|
|
2006
|
+
color: var(--c-text-soft);
|
|
2007
|
+
min-width: 30px;
|
|
2008
|
+
text-align: right;
|
|
2009
|
+
}
|
|
2010
|
+
|
|
2011
|
+
/* ── External Steering (rail-chrome-v2 phase 6) ───────────────
|
|
2012
|
+
External writers, no session: a passive top-bar indicator, the activity
|
|
2013
|
+
feed popover under it, and the connected-writers sheet. Quiet otherwise. */
|
|
2014
|
+
.writer-avatar {
|
|
2015
|
+
display: inline-flex;
|
|
2016
|
+
align-items: center;
|
|
2017
|
+
justify-content: center;
|
|
2018
|
+
border-radius: 50%;
|
|
2019
|
+
border: 1.5px solid var(--c-panel-soft);
|
|
2020
|
+
color: var(--c-bg);
|
|
2021
|
+
font-size: 8.5px;
|
|
2022
|
+
font-weight: 700;
|
|
2023
|
+
flex-shrink: 0;
|
|
2024
|
+
}
|
|
2025
|
+
.external-indicator {
|
|
2026
|
+
display: inline-flex;
|
|
2027
|
+
align-items: center;
|
|
2028
|
+
gap: 8px;
|
|
2029
|
+
padding: 4px 12px 4px 6px;
|
|
2030
|
+
border-radius: 999px;
|
|
2031
|
+
border: 1px solid color-mix(in srgb, var(--c-purple) 35%, transparent);
|
|
2032
|
+
background: color-mix(in srgb, var(--c-purple) 8%, transparent);
|
|
2033
|
+
color: var(--c-purple);
|
|
2034
|
+
cursor: pointer;
|
|
2035
|
+
white-space: nowrap;
|
|
2036
|
+
flex-shrink: 0;
|
|
2037
|
+
font: inherit;
|
|
2038
|
+
}
|
|
2039
|
+
.external-indicator:hover,
|
|
2040
|
+
.external-indicator[aria-expanded='true'] {
|
|
2041
|
+
background: color-mix(in srgb, var(--c-purple) 15%, transparent);
|
|
2042
|
+
}
|
|
2043
|
+
.external-indicator-avatars {
|
|
2044
|
+
display: inline-flex;
|
|
2045
|
+
align-items: center;
|
|
2046
|
+
}
|
|
2047
|
+
.external-indicator-avatars .writer-avatar + .writer-avatar {
|
|
2048
|
+
margin-left: -6px;
|
|
2049
|
+
}
|
|
2050
|
+
.external-indicator-label {
|
|
2051
|
+
font-size: 11px;
|
|
2052
|
+
font-weight: 600;
|
|
2053
|
+
}
|
|
2054
|
+
.external-indicator-ops {
|
|
2055
|
+
font: 10px var(--mono);
|
|
2056
|
+
color: var(--c-muted);
|
|
2057
|
+
}
|
|
2058
|
+
.external-indicator-dot {
|
|
2059
|
+
width: 7px;
|
|
2060
|
+
height: 7px;
|
|
2061
|
+
border-radius: 50%;
|
|
2062
|
+
background: var(--c-purple);
|
|
2063
|
+
flex-shrink: 0;
|
|
2064
|
+
animation: presence-pulse 1.4s ease-in-out infinite;
|
|
2065
|
+
}
|
|
2066
|
+
|
|
2067
|
+
.activity-feed {
|
|
2068
|
+
position: absolute;
|
|
2069
|
+
top: 10px;
|
|
2070
|
+
right: 14px;
|
|
2071
|
+
width: min(304px, calc(100% - 28px));
|
|
2072
|
+
max-height: calc(100% - 20px);
|
|
2073
|
+
display: flex;
|
|
2074
|
+
flex-direction: column;
|
|
2075
|
+
background: var(--c-panel);
|
|
2076
|
+
border: 1px solid color-mix(in srgb, var(--c-purple) 30%, transparent);
|
|
2077
|
+
border-radius: 10px;
|
|
2078
|
+
box-shadow: 0 12px 40px rgba(0, 0, 0, 0.5);
|
|
2079
|
+
/* Popover-level like the rail menus: above the minimap, below the rail. */
|
|
2080
|
+
z-index: 9999;
|
|
2081
|
+
overflow: hidden;
|
|
2082
|
+
}
|
|
2083
|
+
.activity-feed-head {
|
|
2084
|
+
display: flex;
|
|
2085
|
+
align-items: center;
|
|
2086
|
+
gap: 8px;
|
|
2087
|
+
padding: 9px 13px;
|
|
2088
|
+
border-bottom: 1px solid var(--c-line);
|
|
2089
|
+
background: color-mix(in srgb, var(--c-bg) 60%, transparent);
|
|
2090
|
+
}
|
|
2091
|
+
.activity-feed-titles {
|
|
2092
|
+
flex: 1;
|
|
2093
|
+
min-width: 0;
|
|
2094
|
+
}
|
|
2095
|
+
.activity-feed-title {
|
|
2096
|
+
font-size: 11.5px;
|
|
2097
|
+
font-weight: 600;
|
|
2098
|
+
color: var(--c-text);
|
|
2099
|
+
}
|
|
2100
|
+
.activity-feed-sub {
|
|
2101
|
+
font: 9px var(--mono);
|
|
2102
|
+
color: var(--c-dim);
|
|
2103
|
+
}
|
|
2104
|
+
.activity-feed-close {
|
|
2105
|
+
background: none;
|
|
2106
|
+
border: none;
|
|
2107
|
+
color: var(--c-muted);
|
|
2108
|
+
font-size: 14px;
|
|
2109
|
+
cursor: pointer;
|
|
2110
|
+
padding: 0 2px;
|
|
2111
|
+
}
|
|
2112
|
+
.activity-feed-close:hover {
|
|
2113
|
+
color: var(--c-text);
|
|
2114
|
+
}
|
|
2115
|
+
.activity-filters {
|
|
2116
|
+
display: flex;
|
|
2117
|
+
flex-wrap: wrap;
|
|
2118
|
+
gap: 4px;
|
|
2119
|
+
padding: 7px 10px;
|
|
2120
|
+
border-bottom: 1px solid var(--c-line);
|
|
2121
|
+
}
|
|
2122
|
+
.activity-filter {
|
|
2123
|
+
--writer: var(--c-purple);
|
|
2124
|
+
padding: 2px 9px;
|
|
2125
|
+
border-radius: 999px;
|
|
2126
|
+
border: 1px solid var(--c-line);
|
|
2127
|
+
background: none;
|
|
2128
|
+
color: var(--c-muted);
|
|
2129
|
+
font-size: 10px;
|
|
2130
|
+
font-weight: 600;
|
|
2131
|
+
cursor: pointer;
|
|
2132
|
+
}
|
|
2133
|
+
.activity-filter.is-active {
|
|
2134
|
+
border-color: color-mix(in srgb, var(--writer) 45%, transparent);
|
|
2135
|
+
background: color-mix(in srgb, var(--writer) 14%, transparent);
|
|
2136
|
+
color: var(--writer);
|
|
2137
|
+
}
|
|
2138
|
+
.activity-rows {
|
|
2139
|
+
display: flex;
|
|
2140
|
+
flex-direction: column;
|
|
2141
|
+
overflow-y: auto;
|
|
2142
|
+
min-height: 0;
|
|
2143
|
+
}
|
|
2144
|
+
.activity-row {
|
|
2145
|
+
display: flex;
|
|
2146
|
+
gap: 9px;
|
|
2147
|
+
padding: 9px 13px;
|
|
2148
|
+
border-bottom: 1px solid var(--c-line);
|
|
2149
|
+
}
|
|
2150
|
+
.activity-row:last-child {
|
|
2151
|
+
border-bottom: none;
|
|
2152
|
+
}
|
|
2153
|
+
.activity-row.is-pending {
|
|
2154
|
+
background: color-mix(in srgb, var(--c-purple) 5%, transparent);
|
|
2155
|
+
}
|
|
2156
|
+
.activity-glyph {
|
|
2157
|
+
flex-shrink: 0;
|
|
2158
|
+
width: 13px;
|
|
2159
|
+
margin-top: 1px;
|
|
2160
|
+
text-align: center;
|
|
2161
|
+
font-size: 11px;
|
|
2162
|
+
font-weight: 700;
|
|
2163
|
+
line-height: 1.3;
|
|
2164
|
+
}
|
|
2165
|
+
.activity-glyph.tone-ok {
|
|
2166
|
+
color: var(--c-ok);
|
|
2167
|
+
}
|
|
2168
|
+
.activity-glyph.tone-danger {
|
|
2169
|
+
color: var(--c-danger);
|
|
2170
|
+
}
|
|
2171
|
+
.activity-glyph.tone-accent {
|
|
2172
|
+
color: var(--c-accent);
|
|
2173
|
+
}
|
|
2174
|
+
.activity-glyph.tone-purple {
|
|
2175
|
+
color: var(--c-purple);
|
|
2176
|
+
}
|
|
2177
|
+
.activity-main {
|
|
2178
|
+
flex: 1;
|
|
2179
|
+
min-width: 0;
|
|
2180
|
+
}
|
|
2181
|
+
.activity-text {
|
|
2182
|
+
font-size: 11px;
|
|
2183
|
+
color: var(--c-text-soft);
|
|
2184
|
+
overflow-wrap: anywhere;
|
|
2185
|
+
}
|
|
2186
|
+
.activity-meta {
|
|
2187
|
+
font-size: 10px;
|
|
2188
|
+
line-height: 1.45;
|
|
2189
|
+
color: var(--c-muted);
|
|
2190
|
+
}
|
|
2191
|
+
.activity-writer {
|
|
2192
|
+
font: 8.5px var(--mono);
|
|
2193
|
+
}
|
|
2194
|
+
.activity-actions {
|
|
2195
|
+
display: flex;
|
|
2196
|
+
align-items: center;
|
|
2197
|
+
gap: 6px;
|
|
2198
|
+
margin-top: 6px;
|
|
2199
|
+
}
|
|
2200
|
+
.activity-veto {
|
|
2201
|
+
padding: 3px 10px;
|
|
2202
|
+
border-radius: 7px;
|
|
2203
|
+
background: none;
|
|
2204
|
+
border: 1px solid color-mix(in srgb, var(--c-danger) 40%, transparent);
|
|
2205
|
+
color: var(--c-danger);
|
|
2206
|
+
font-size: 10.5px;
|
|
2207
|
+
font-weight: 600;
|
|
2208
|
+
cursor: pointer;
|
|
2209
|
+
}
|
|
2210
|
+
.activity-veto:hover {
|
|
2211
|
+
background: color-mix(in srgb, var(--c-danger) 10%, transparent);
|
|
2212
|
+
}
|
|
2213
|
+
.activity-hint,
|
|
2214
|
+
.activity-age {
|
|
2215
|
+
font: 9px var(--mono);
|
|
2216
|
+
color: var(--c-dim);
|
|
2217
|
+
flex-shrink: 0;
|
|
2218
|
+
}
|
|
2219
|
+
.activity-empty {
|
|
2220
|
+
padding: 14px 13px;
|
|
2221
|
+
font-size: 11px;
|
|
2222
|
+
color: var(--c-dim);
|
|
2223
|
+
}
|
|
2224
|
+
.activity-feed-foot {
|
|
2225
|
+
display: flex;
|
|
2226
|
+
align-items: center;
|
|
2227
|
+
gap: 10px;
|
|
2228
|
+
padding: 8px 13px;
|
|
2229
|
+
border-top: 1px solid var(--c-line);
|
|
2230
|
+
background: color-mix(in srgb, var(--c-bg) 50%, transparent);
|
|
2231
|
+
}
|
|
2232
|
+
.activity-feed-note {
|
|
2233
|
+
flex: 1;
|
|
2234
|
+
font-size: 10px;
|
|
2235
|
+
color: var(--c-dim);
|
|
2236
|
+
}
|
|
2237
|
+
.activity-feed-link {
|
|
2238
|
+
background: none;
|
|
2239
|
+
border: none;
|
|
2240
|
+
padding: 0;
|
|
2241
|
+
color: var(--c-muted);
|
|
2242
|
+
font-size: 10.5px;
|
|
2243
|
+
font-weight: 600;
|
|
2244
|
+
cursor: pointer;
|
|
2245
|
+
}
|
|
2246
|
+
.activity-feed-link:hover {
|
|
2247
|
+
color: var(--c-text);
|
|
2248
|
+
}
|
|
2249
|
+
.activity-feed-link.is-accent {
|
|
2250
|
+
color: var(--c-purple);
|
|
2251
|
+
}
|
|
2252
|
+
.activity-feed-link.is-accent:hover {
|
|
2253
|
+
text-decoration: underline;
|
|
2254
|
+
}
|
|
2255
|
+
|
|
2256
|
+
.writers-scrim {
|
|
2257
|
+
position: absolute;
|
|
2258
|
+
inset: 0;
|
|
2259
|
+
background: rgba(4, 10, 18, 0.55);
|
|
2260
|
+
z-index: 9999;
|
|
2261
|
+
}
|
|
2262
|
+
.writers-sheet {
|
|
2263
|
+
position: absolute;
|
|
2264
|
+
top: 50%;
|
|
2265
|
+
left: 50%;
|
|
2266
|
+
transform: translate(-50%, -50%);
|
|
2267
|
+
width: 400px;
|
|
2268
|
+
max-width: calc(100% - 48px);
|
|
2269
|
+
background: var(--c-panel);
|
|
2270
|
+
border: 1px solid var(--c-line);
|
|
2271
|
+
border-radius: 12px;
|
|
2272
|
+
box-shadow: 0 24px 60px rgba(0, 0, 0, 0.6);
|
|
2273
|
+
z-index: 10000;
|
|
2274
|
+
overflow: hidden;
|
|
2275
|
+
}
|
|
2276
|
+
.writers-head {
|
|
2277
|
+
display: flex;
|
|
2278
|
+
align-items: center;
|
|
2279
|
+
gap: 8px;
|
|
2280
|
+
padding: 11px 14px;
|
|
2281
|
+
border-bottom: 1px solid var(--c-line);
|
|
2282
|
+
background: color-mix(in srgb, var(--c-bg) 60%, transparent);
|
|
2283
|
+
}
|
|
2284
|
+
.writers-title {
|
|
2285
|
+
flex: 1;
|
|
2286
|
+
font-size: 12px;
|
|
2287
|
+
font-weight: 600;
|
|
2288
|
+
color: var(--c-text);
|
|
2289
|
+
}
|
|
2290
|
+
.writers-board {
|
|
2291
|
+
font: 9px var(--mono);
|
|
2292
|
+
color: var(--c-dim);
|
|
2293
|
+
}
|
|
2294
|
+
.writers-body {
|
|
2295
|
+
display: flex;
|
|
2296
|
+
flex-direction: column;
|
|
2297
|
+
gap: 4px;
|
|
2298
|
+
padding: 10px 14px;
|
|
2299
|
+
}
|
|
2300
|
+
.writers-section {
|
|
2301
|
+
padding: 8px 0 2px;
|
|
2302
|
+
font-size: 9px;
|
|
2303
|
+
font-weight: 700;
|
|
2304
|
+
letter-spacing: 0.08em;
|
|
2305
|
+
text-transform: uppercase;
|
|
2306
|
+
color: var(--c-dim);
|
|
2307
|
+
}
|
|
2308
|
+
.writers-row {
|
|
2309
|
+
display: flex;
|
|
2310
|
+
align-items: center;
|
|
2311
|
+
gap: 9px;
|
|
2312
|
+
padding: 6px 0;
|
|
2313
|
+
}
|
|
2314
|
+
.writers-name {
|
|
2315
|
+
flex: 1;
|
|
2316
|
+
font-size: 11.5px;
|
|
2317
|
+
color: var(--c-text-soft);
|
|
2318
|
+
min-width: 0;
|
|
2319
|
+
overflow: hidden;
|
|
2320
|
+
text-overflow: ellipsis;
|
|
2321
|
+
white-space: nowrap;
|
|
2322
|
+
}
|
|
2323
|
+
.writers-name.is-mono {
|
|
2324
|
+
font: 11px var(--mono);
|
|
2325
|
+
}
|
|
2326
|
+
.writers-config {
|
|
2327
|
+
font-size: 9.5px;
|
|
2328
|
+
font-weight: 600;
|
|
2329
|
+
padding: 2px 8px;
|
|
2330
|
+
border-radius: 999px;
|
|
2331
|
+
background: color-mix(in srgb, var(--c-purple) 12%, transparent);
|
|
2332
|
+
color: var(--c-purple);
|
|
2333
|
+
}
|
|
2334
|
+
.writers-meta {
|
|
2335
|
+
font: 9.5px var(--mono);
|
|
2336
|
+
color: var(--c-dim);
|
|
2337
|
+
}
|
|
2338
|
+
.writers-empty {
|
|
2339
|
+
font-size: 10.5px;
|
|
2340
|
+
color: var(--c-dim);
|
|
2341
|
+
padding: 4px 0;
|
|
2342
|
+
}
|
|
2343
|
+
.writers-foot {
|
|
2344
|
+
display: flex;
|
|
2345
|
+
align-items: center;
|
|
2346
|
+
gap: 10px;
|
|
2347
|
+
padding: 10px 14px;
|
|
2348
|
+
border-top: 1px solid var(--c-line);
|
|
2349
|
+
background: color-mix(in srgb, var(--c-bg) 50%, transparent);
|
|
2350
|
+
}
|
|
2351
|
+
.writers-note {
|
|
2352
|
+
flex: 1;
|
|
2353
|
+
font-size: 10px;
|
|
2354
|
+
color: var(--c-dim);
|
|
2355
|
+
}
|
|
2356
|
+
.writers-done {
|
|
2357
|
+
padding: 5px 14px;
|
|
2358
|
+
border: none;
|
|
2359
|
+
border-radius: 7px;
|
|
2360
|
+
background: var(--c-accent);
|
|
2361
|
+
color: var(--c-bg);
|
|
2362
|
+
font-size: 11px;
|
|
2363
|
+
font-weight: 600;
|
|
2364
|
+
cursor: pointer;
|
|
2365
|
+
}
|
|
2366
|
+
|
|
2367
|
+
/* ── Minimap v2 (rail-chrome-v2 phase 7, item 19) ─────────────
|
|
2368
|
+
True-scale map from the store; magnifies ×1.7 from the bottom-right on hover. */
|
|
2369
|
+
.minimap {
|
|
2370
|
+
position: absolute;
|
|
2371
|
+
bottom: 18px;
|
|
2372
|
+
right: 16px;
|
|
2373
|
+
width: 168px;
|
|
2374
|
+
height: 112px;
|
|
2375
|
+
border: 1px solid var(--c-line);
|
|
2376
|
+
border-radius: 8px;
|
|
2377
|
+
overflow: hidden;
|
|
2378
|
+
box-shadow: 0 4px 16px rgba(0, 0, 0, 0.35);
|
|
2379
|
+
background: color-mix(in srgb, var(--c-panel-soft) 94%, transparent);
|
|
2380
|
+
backdrop-filter: blur(8px);
|
|
2381
|
+
z-index: 60;
|
|
2382
|
+
opacity: 0.85;
|
|
2383
|
+
transform-origin: bottom right;
|
|
2384
|
+
transition:
|
|
2385
|
+
transform 160ms ease,
|
|
2386
|
+
opacity 120ms ease;
|
|
2387
|
+
cursor: crosshair;
|
|
2388
|
+
user-select: none;
|
|
2389
|
+
}
|
|
2390
|
+
.minimap:hover {
|
|
2391
|
+
opacity: 1;
|
|
2392
|
+
transform: scale(1.7);
|
|
2393
|
+
box-shadow: 0 12px 40px rgba(0, 0, 0, 0.55);
|
|
2394
|
+
}
|
|
2395
|
+
.minimap-node {
|
|
2396
|
+
position: absolute;
|
|
2397
|
+
border-radius: 1.5px;
|
|
2398
|
+
background: var(--kind);
|
|
2399
|
+
opacity: 0.55;
|
|
2400
|
+
}
|
|
2401
|
+
.minimap-node.is-group {
|
|
2402
|
+
background: color-mix(in srgb, var(--kind) 4%, transparent);
|
|
2403
|
+
border: 1px dashed color-mix(in srgb, var(--kind) 55%, transparent);
|
|
2404
|
+
opacity: 1;
|
|
2405
|
+
border-radius: 2px;
|
|
2406
|
+
}
|
|
2407
|
+
.minimap-node.is-selected {
|
|
2408
|
+
outline: 1px solid var(--c-accent);
|
|
2409
|
+
opacity: 0.8;
|
|
2410
|
+
}
|
|
2411
|
+
.minimap-fence {
|
|
2412
|
+
position: absolute;
|
|
2413
|
+
border: 1px dashed color-mix(in srgb, var(--c-purple) 45%, transparent);
|
|
2414
|
+
border-radius: 2px;
|
|
2415
|
+
background: color-mix(in srgb, var(--c-purple) 3%, transparent);
|
|
2416
|
+
}
|
|
2417
|
+
.minimap-presence {
|
|
2418
|
+
position: absolute;
|
|
2419
|
+
width: 8px;
|
|
2420
|
+
height: 8px;
|
|
2421
|
+
border-radius: 50%;
|
|
2422
|
+
background: var(--presence-color);
|
|
2423
|
+
border: 1.5px solid var(--c-bg);
|
|
2424
|
+
box-shadow: 0 0 0 2px color-mix(in srgb, var(--presence-color) 45%, transparent);
|
|
2425
|
+
z-index: 4;
|
|
2426
|
+
}
|
|
2427
|
+
/* Actively working = the moment the human is looking for: pulse the halo. */
|
|
2428
|
+
.minimap-presence.phase-thinking,
|
|
2429
|
+
.minimap-presence.phase-tooling {
|
|
2430
|
+
animation: presence-pulse 1.6s ease-in-out infinite;
|
|
2431
|
+
}
|
|
2432
|
+
.minimap-presence.is-worker {
|
|
2433
|
+
width: 6px;
|
|
2434
|
+
height: 6px;
|
|
2435
|
+
}
|
|
2436
|
+
.minimap-presence.is-external {
|
|
2437
|
+
opacity: 0.75;
|
|
2438
|
+
}
|
|
2439
|
+
.minimap-frame {
|
|
2440
|
+
position: absolute;
|
|
2441
|
+
border: 1.5px solid color-mix(in srgb, var(--c-accent) 85%, transparent);
|
|
2442
|
+
border-radius: 2px;
|
|
2443
|
+
background: color-mix(in srgb, var(--c-accent) 5%, transparent);
|
|
2444
|
+
cursor: grab;
|
|
2445
|
+
}
|
|
2446
|
+
.minimap-zoom {
|
|
2447
|
+
position: absolute;
|
|
2448
|
+
right: 5px;
|
|
2449
|
+
bottom: 3px;
|
|
2450
|
+
font: 8px var(--mono);
|
|
2451
|
+
color: var(--c-dim);
|
|
2452
|
+
}
|
|
2453
|
+
|
|
2454
|
+
/* ── Accessibility sweep (rail-chrome-v2 item 18) ───────────────
|
|
2455
|
+
One focus ring for every chrome control; nodes are focusable for the
|
|
2456
|
+
keyboard (arrow keys traverse, Enter opens); reduced motion below. */
|
|
2457
|
+
.tool-rail button:focus-visible,
|
|
2458
|
+
.top-bar button:focus-visible,
|
|
2459
|
+
.connection-banner button:focus-visible,
|
|
2460
|
+
.session-panel button:focus-visible,
|
|
2461
|
+
.session-panel input:focus-visible,
|
|
2462
|
+
.command-bar button:focus-visible,
|
|
2463
|
+
.command-bar-input:focus-visible,
|
|
2464
|
+
.selection-bar button:focus-visible,
|
|
2465
|
+
.activity-feed button:focus-visible,
|
|
2466
|
+
.writers-sheet button:focus-visible,
|
|
2467
|
+
.empty-state button:focus-visible,
|
|
2468
|
+
.session-receipt button:focus-visible,
|
|
2469
|
+
.snapshot-panel button:focus-visible,
|
|
2470
|
+
.expanded-header button:focus-visible,
|
|
2471
|
+
.group-action:focus-visible,
|
|
2472
|
+
.group-menu button:focus-visible,
|
|
2473
|
+
.command-palette-item:focus-visible,
|
|
2474
|
+
.canvas-node:focus-visible {
|
|
2475
|
+
outline: 2px solid var(--c-accent);
|
|
2476
|
+
outline-offset: 2px;
|
|
2477
|
+
}
|
|
2478
|
+
.command-bar-input:focus-visible {
|
|
2479
|
+
outline: none;
|
|
2480
|
+
}
|
|
2481
|
+
.canvas-node:focus {
|
|
2482
|
+
outline: none;
|
|
2483
|
+
}
|
|
2484
|
+
.canvas-node:focus-visible {
|
|
2485
|
+
outline: 2px solid var(--c-accent);
|
|
2486
|
+
outline-offset: 3px;
|
|
2487
|
+
}
|
|
2488
|
+
|
|
2489
|
+
@media (prefers-reduced-motion: reduce) {
|
|
2490
|
+
.human-cursor {
|
|
2491
|
+
transition: none;
|
|
2492
|
+
}
|
|
2493
|
+
.connection-banner-progress-fill,
|
|
2494
|
+
.connection-dot,
|
|
2495
|
+
.external-indicator-dot,
|
|
2496
|
+
.group-chip-expand,
|
|
2497
|
+
.beta-tag {
|
|
2498
|
+
margin-left: 2px;
|
|
2499
|
+
padding: 1px 5px;
|
|
2500
|
+
border-radius: 8px;
|
|
2501
|
+
border: 1px solid color-mix(in srgb, var(--c-accent) 45%, transparent);
|
|
2502
|
+
color: var(--c-accent);
|
|
2503
|
+
font-size: 9px;
|
|
2504
|
+
font-weight: 700;
|
|
2505
|
+
letter-spacing: 0.06em;
|
|
2506
|
+
text-transform: uppercase;
|
|
2507
|
+
line-height: 1.4;
|
|
2508
|
+
}
|
|
2509
|
+
|
|
2510
|
+
.start-session-dot {
|
|
2511
|
+
animation: none;
|
|
2512
|
+
}
|
|
2513
|
+
.command-palette,
|
|
2514
|
+
.snapshot-panel,
|
|
2515
|
+
.session-receipt,
|
|
2516
|
+
.canvas-node.group-node,
|
|
2517
|
+
.activity-feed,
|
|
2518
|
+
.writers-sheet,
|
|
2519
|
+
.context-budget-fill {
|
|
2520
|
+
animation: none;
|
|
2521
|
+
transition: none;
|
|
2522
|
+
}
|
|
2523
|
+
}
|
|
2524
|
+
|
|
2525
|
+
/* ── Edge creation (rail-chrome-v2 item 15) ───────────────────── */
|
|
2526
|
+
.canvas-node.is-edge-target {
|
|
2527
|
+
box-shadow: 0 0 0 2px var(--c-accent), 0 0 0 6px color-mix(in srgb, var(--c-accent) 18%, transparent);
|
|
2528
|
+
}
|
|
2529
|
+
.canvas-node.is-edge-target .node-port {
|
|
2530
|
+
opacity: 1;
|
|
2531
|
+
background: var(--c-accent);
|
|
2532
|
+
}
|
|
2533
|
+
.edge-hint-pill {
|
|
2534
|
+
position: absolute;
|
|
2535
|
+
z-index: 10000;
|
|
2536
|
+
display: inline-flex;
|
|
2537
|
+
align-items: center;
|
|
2538
|
+
gap: 6px;
|
|
2539
|
+
padding: 3px 10px;
|
|
2540
|
+
border-radius: 999px;
|
|
2541
|
+
background: color-mix(in srgb, var(--c-panel) 96%, transparent);
|
|
2542
|
+
border: 1px solid color-mix(in srgb, var(--c-accent) 40%, transparent);
|
|
2543
|
+
pointer-events: none;
|
|
2544
|
+
white-space: nowrap;
|
|
2545
|
+
}
|
|
2546
|
+
.edge-hint-main {
|
|
2547
|
+
font-size: 10px;
|
|
2548
|
+
font-weight: 600;
|
|
2549
|
+
color: var(--c-accent);
|
|
2550
|
+
}
|
|
2551
|
+
.edge-hint-keys {
|
|
2552
|
+
font: 9px var(--mono);
|
|
2553
|
+
color: var(--c-dim);
|
|
2554
|
+
}
|
|
2555
|
+
|
|
2556
|
+
/* ── Human collaborator presence (rail-chrome-v2 phase 8) ─────── */
|
|
2557
|
+
.human-presence-layer {
|
|
2558
|
+
position: absolute;
|
|
2559
|
+
left: 0;
|
|
2560
|
+
top: 0;
|
|
2561
|
+
pointer-events: none;
|
|
2562
|
+
z-index: 69;
|
|
2563
|
+
}
|
|
2564
|
+
.human-cursor {
|
|
2565
|
+
position: absolute;
|
|
2566
|
+
left: 0;
|
|
2567
|
+
top: 0;
|
|
2568
|
+
color: var(--c-ok);
|
|
2569
|
+
transition: transform 120ms linear;
|
|
2570
|
+
}
|
|
2571
|
+
.human-cursor-inner {
|
|
2572
|
+
transform-origin: top left;
|
|
2573
|
+
display: flex;
|
|
2574
|
+
flex-direction: column;
|
|
2575
|
+
align-items: flex-start;
|
|
2576
|
+
}
|
|
2577
|
+
.human-cursor-tag {
|
|
2578
|
+
margin-left: 11px;
|
|
2579
|
+
margin-top: -2px;
|
|
2580
|
+
padding: 3px 9px;
|
|
2581
|
+
border-radius: 999px;
|
|
2582
|
+
background: color-mix(in srgb, var(--c-ok) 92%, transparent);
|
|
2583
|
+
color: var(--c-bg);
|
|
2584
|
+
font-size: 10px;
|
|
2585
|
+
font-weight: 600;
|
|
2586
|
+
white-space: nowrap;
|
|
2587
|
+
}
|
|
2588
|
+
.human-cursor.is-grabbing .human-cursor-tag::after {
|
|
2589
|
+
content: ' · editing';
|
|
2590
|
+
font-weight: 500;
|
|
2591
|
+
opacity: 0.8;
|
|
2592
|
+
}
|
|
2593
|
+
.node-yield-pill {
|
|
2594
|
+
/* Inside the card (paint containment clips anything outside it). */
|
|
2595
|
+
position: absolute;
|
|
2596
|
+
left: 10px;
|
|
2597
|
+
bottom: 8px;
|
|
2598
|
+
z-index: 5;
|
|
2599
|
+
display: inline-flex;
|
|
2600
|
+
align-items: center;
|
|
2601
|
+
gap: 5px;
|
|
2602
|
+
padding: 2px 9px;
|
|
2603
|
+
border-radius: 999px;
|
|
2604
|
+
background: var(--c-panel-soft);
|
|
2605
|
+
border: 1px solid color-mix(in srgb, var(--c-warn) 40%, transparent);
|
|
2606
|
+
color: var(--c-warn);
|
|
2607
|
+
font-size: 9.5px;
|
|
2608
|
+
font-weight: 600;
|
|
2609
|
+
white-space: nowrap;
|
|
2610
|
+
}
|
|
2611
|
+
.node-yield-dot {
|
|
2612
|
+
width: 6px;
|
|
2613
|
+
height: 6px;
|
|
2614
|
+
border-radius: 50%;
|
|
2615
|
+
background: var(--c-warn);
|
|
2616
|
+
}
|
|
2617
|
+
|
|
2618
|
+
/* Quiet-board affordance in the top bar */
|
|
2619
|
+
.start-session-btn {
|
|
2620
|
+
display: inline-flex;
|
|
2621
|
+
align-items: center;
|
|
2622
|
+
gap: 7px;
|
|
2623
|
+
padding: 5px 12px;
|
|
2624
|
+
border-radius: 999px;
|
|
2625
|
+
border: 1px solid var(--c-line);
|
|
2626
|
+
background: none;
|
|
2627
|
+
color: var(--c-muted);
|
|
2628
|
+
font-size: 11px;
|
|
2629
|
+
font-weight: 600;
|
|
2630
|
+
white-space: nowrap;
|
|
2631
|
+
cursor: pointer;
|
|
2632
|
+
flex-shrink: 0;
|
|
2633
|
+
}
|
|
2634
|
+
.start-session-btn:hover {
|
|
2635
|
+
border-color: color-mix(in srgb, var(--c-purple) 40%, transparent);
|
|
2636
|
+
color: var(--c-purple);
|
|
2637
|
+
}
|
|
2638
|
+
.start-session-dot {
|
|
2639
|
+
width: 7px;
|
|
2640
|
+
height: 7px;
|
|
2641
|
+
border-radius: 50%;
|
|
2642
|
+
background: var(--c-dim);
|
|
2643
|
+
}
|
|
2644
|
+
.start-session-btn:hover .start-session-dot {
|
|
2645
|
+
background: var(--c-purple);
|
|
2646
|
+
}
|
|
2647
|
+
.session-end {
|
|
2648
|
+
padding: 3px 10px;
|
|
2649
|
+
border-radius: 6px;
|
|
2650
|
+
border: 1px solid var(--c-line);
|
|
2651
|
+
background: none;
|
|
2652
|
+
color: var(--c-muted);
|
|
2653
|
+
font-size: 10.5px;
|
|
2654
|
+
font-weight: 600;
|
|
2655
|
+
cursor: pointer;
|
|
2656
|
+
}
|
|
2657
|
+
.session-end:hover {
|
|
2658
|
+
border-color: color-mix(in srgb, var(--c-danger) 45%, transparent);
|
|
2659
|
+
color: var(--c-danger);
|
|
2660
|
+
}
|
|
2661
|
+
|
|
2662
|
+
/* Session receipt (design item 2) */
|
|
2663
|
+
.session-receipt {
|
|
2664
|
+
position: absolute;
|
|
2665
|
+
top: 14px;
|
|
2666
|
+
right: 14px;
|
|
2667
|
+
width: 290px;
|
|
2668
|
+
z-index: 9998;
|
|
2669
|
+
padding: 12px 14px;
|
|
2670
|
+
border-radius: 12px;
|
|
2671
|
+
border: 1px solid var(--c-line);
|
|
2672
|
+
background: color-mix(in srgb, var(--c-panel) 96%, transparent);
|
|
2673
|
+
box-shadow: 0 12px 40px rgba(0, 0, 0, 0.5);
|
|
2674
|
+
animation: session-panel-in 180ms ease;
|
|
2675
|
+
}
|
|
2676
|
+
.session-receipt-head {
|
|
2677
|
+
display: flex;
|
|
2678
|
+
align-items: center;
|
|
2679
|
+
gap: 8px;
|
|
2680
|
+
}
|
|
2681
|
+
.session-receipt-dot {
|
|
2682
|
+
width: 7px;
|
|
2683
|
+
height: 7px;
|
|
2684
|
+
border-radius: 50%;
|
|
2685
|
+
background: var(--c-dim);
|
|
2686
|
+
}
|
|
2687
|
+
.session-receipt-title {
|
|
2688
|
+
flex: 1;
|
|
2689
|
+
font-size: 12px;
|
|
2690
|
+
font-weight: 600;
|
|
2691
|
+
color: var(--c-text);
|
|
2692
|
+
}
|
|
2693
|
+
.session-receipt-close {
|
|
2694
|
+
width: 22px;
|
|
2695
|
+
height: 22px;
|
|
2696
|
+
border: none;
|
|
2697
|
+
border-radius: 6px;
|
|
2698
|
+
background: none;
|
|
2699
|
+
color: var(--c-muted);
|
|
2700
|
+
font-size: 14px;
|
|
2701
|
+
cursor: pointer;
|
|
2702
|
+
}
|
|
2703
|
+
.session-receipt-close:hover {
|
|
2704
|
+
background: var(--c-surface-hover);
|
|
2705
|
+
color: var(--c-text);
|
|
2706
|
+
}
|
|
2707
|
+
.session-receipt-tiles {
|
|
2708
|
+
display: grid;
|
|
2709
|
+
grid-template-columns: repeat(3, 1fr);
|
|
2710
|
+
gap: 8px;
|
|
2711
|
+
margin-top: 12px;
|
|
2712
|
+
}
|
|
2713
|
+
.session-receipt-tile {
|
|
2714
|
+
padding: 8px 10px;
|
|
2715
|
+
border-radius: 8px;
|
|
2716
|
+
border: 1px solid var(--c-line);
|
|
2717
|
+
background: color-mix(in srgb, var(--c-panel-soft) 70%, transparent);
|
|
2718
|
+
display: flex;
|
|
2719
|
+
flex-direction: column;
|
|
2720
|
+
gap: 2px;
|
|
2721
|
+
}
|
|
2722
|
+
.session-receipt-tile-label {
|
|
2723
|
+
font-size: 9.5px;
|
|
2724
|
+
color: var(--c-dim);
|
|
2725
|
+
}
|
|
2726
|
+
.session-receipt-tile-value {
|
|
2727
|
+
font-size: 15px;
|
|
2728
|
+
font-weight: 700;
|
|
2729
|
+
color: var(--c-text);
|
|
2730
|
+
}
|
|
2731
|
+
.session-receipt-tile-value.tone-ok {
|
|
2732
|
+
color: var(--c-ok);
|
|
2733
|
+
}
|
|
2734
|
+
.session-receipt-tile-value.tone-danger {
|
|
2735
|
+
color: var(--c-danger);
|
|
2736
|
+
}
|
|
2737
|
+
.session-receipt-note,
|
|
2738
|
+
.session-receipt-diff {
|
|
2739
|
+
margin-top: 10px;
|
|
2740
|
+
font-size: 10.5px;
|
|
2741
|
+
line-height: 1.5;
|
|
2742
|
+
color: var(--c-muted);
|
|
2743
|
+
}
|
|
2744
|
+
.session-receipt-diff {
|
|
2745
|
+
color: var(--c-text-soft);
|
|
2746
|
+
}
|
|
2747
|
+
.session-receipt-actions {
|
|
2748
|
+
display: flex;
|
|
2749
|
+
gap: 8px;
|
|
2750
|
+
margin-top: 12px;
|
|
2751
|
+
}
|
|
2752
|
+
.session-receipt-primary,
|
|
2753
|
+
.session-receipt-secondary {
|
|
2754
|
+
flex: 1;
|
|
2755
|
+
padding: 7px 10px;
|
|
2756
|
+
border-radius: 8px;
|
|
2757
|
+
font-size: 11px;
|
|
2758
|
+
font-weight: 600;
|
|
2759
|
+
cursor: pointer;
|
|
2760
|
+
}
|
|
2761
|
+
.session-receipt-primary {
|
|
2762
|
+
border: 1px solid var(--c-accent-25);
|
|
2763
|
+
background: var(--c-accent-12);
|
|
2764
|
+
color: var(--c-accent);
|
|
2765
|
+
}
|
|
2766
|
+
.session-receipt-primary:disabled {
|
|
2767
|
+
opacity: 0.5;
|
|
2768
|
+
cursor: default;
|
|
2769
|
+
}
|
|
2770
|
+
.session-receipt-secondary {
|
|
2771
|
+
border: 1px solid var(--c-line);
|
|
2772
|
+
background: none;
|
|
2773
|
+
color: var(--c-muted);
|
|
2774
|
+
}
|
|
2775
|
+
.session-receipt-secondary:hover {
|
|
2776
|
+
color: var(--c-text);
|
|
2777
|
+
}
|
|
2778
|
+
|
|
2779
|
+
/* Top-bar escalation badge while gates are pending */
|
|
2780
|
+
.gate-badge {
|
|
2781
|
+
display: inline-flex;
|
|
2782
|
+
align-items: center;
|
|
2783
|
+
padding: 5px 10px;
|
|
2784
|
+
border-radius: 999px;
|
|
2785
|
+
border: 1px solid color-mix(in srgb, var(--c-warn) 35%, transparent);
|
|
2786
|
+
background: color-mix(in srgb, var(--c-warn) 12%, transparent);
|
|
2787
|
+
color: var(--c-warn);
|
|
2788
|
+
font: 11px var(--mono);
|
|
2789
|
+
font-weight: 600;
|
|
2790
|
+
white-space: nowrap;
|
|
2791
|
+
flex-shrink: 0;
|
|
2792
|
+
}
|
|
2793
|
+
|
|
2794
|
+
@keyframes session-panel-in {
|
|
2795
|
+
from {
|
|
2796
|
+
opacity: 0;
|
|
2797
|
+
transform: translateX(8px);
|
|
2798
|
+
}
|
|
2799
|
+
to {
|
|
2800
|
+
opacity: 1;
|
|
2801
|
+
transform: none;
|
|
2802
|
+
}
|
|
2803
|
+
}
|
|
2804
|
+
|
|
2805
|
+
/* Below 1180px the panel floats over the canvas as a drawer (design item 12). */
|
|
2806
|
+
@media (max-width: 1180px) {
|
|
2807
|
+
.session-panel:not(.is-collapsed) {
|
|
2808
|
+
position: fixed;
|
|
2809
|
+
top: var(--hud-bar-height);
|
|
2810
|
+
right: 0;
|
|
2811
|
+
bottom: 0;
|
|
2812
|
+
width: 312px;
|
|
2813
|
+
box-shadow: -16px 0 40px rgba(0, 0, 0, 0.5);
|
|
2814
|
+
}
|
|
2815
|
+
}
|
|
2816
|
+
|
|
2817
|
+
@media (prefers-reduced-motion: reduce) {
|
|
2818
|
+
.session-panel {
|
|
2819
|
+
animation: none;
|
|
2820
|
+
}
|
|
2821
|
+
.session-live-dot,
|
|
2822
|
+
.session-item.status-running .session-glyph,
|
|
2823
|
+
.external-indicator-dot,
|
|
2824
|
+
.minimap-presence {
|
|
2825
|
+
animation: none;
|
|
2826
|
+
}
|
|
2827
|
+
.minimap {
|
|
2828
|
+
transition: none;
|
|
2829
|
+
}
|
|
2830
|
+
}
|
|
2831
|
+
|
|
2832
|
+
/* Pan tool / held Space: the world layer goes pointer-inert so drags land on
|
|
2833
|
+
the viewport container itself and pan — nodes cannot swallow the drag. */
|
|
2834
|
+
.canvas-viewport.pan-mode .canvas-world {
|
|
2835
|
+
pointer-events: none;
|
|
2836
|
+
}
|
|
2837
|
+
.canvas-viewport.pan-mode:active {
|
|
2838
|
+
cursor: grabbing;
|
|
2839
|
+
}
|
|
2840
|
+
|
|
2841
|
+
.toolbar-tooltip-anchor {
|
|
2842
|
+
position: relative;
|
|
2843
|
+
display: inline-flex;
|
|
2844
|
+
align-items: center;
|
|
2845
|
+
}
|
|
2846
|
+
|
|
2847
|
+
.toolbar-tooltip-anchor-start .toolbar-tooltip {
|
|
2848
|
+
left: 0;
|
|
2849
|
+
transform: translateX(0) translateY(6px);
|
|
2850
|
+
}
|
|
2851
|
+
|
|
2852
|
+
.toolbar-tooltip-anchor-end .toolbar-tooltip {
|
|
2853
|
+
left: auto;
|
|
2854
|
+
right: 0;
|
|
2855
|
+
transform: translateX(0) translateY(6px);
|
|
2856
|
+
}
|
|
2857
|
+
|
|
2858
|
+
.toolbar-tooltip {
|
|
2859
|
+
position: absolute;
|
|
2860
|
+
left: 50%;
|
|
2861
|
+
top: calc(100% + 10px);
|
|
2862
|
+
transform: translateX(-50%) translateY(6px);
|
|
2863
|
+
display: flex;
|
|
2864
|
+
flex-direction: column;
|
|
2865
|
+
gap: 4px;
|
|
2866
|
+
min-width: 168px;
|
|
2867
|
+
max-width: 240px;
|
|
2868
|
+
padding: 10px 12px;
|
|
2869
|
+
background: color-mix(in srgb, var(--c-panel) 92%, black 8%);
|
|
2870
|
+
border: 1px solid color-mix(in srgb, var(--c-line) 78%, var(--c-accent) 22%);
|
|
2871
|
+
border-radius: 10px;
|
|
2872
|
+
box-shadow: 0 14px 36px var(--c-shadow-heavy), 0 0 0 1px var(--c-accent-8);
|
|
2873
|
+
backdrop-filter: blur(14px);
|
|
2874
|
+
color: var(--c-text);
|
|
2875
|
+
font-size: 12px;
|
|
2876
|
+
line-height: 1.35;
|
|
2877
|
+
white-space: normal;
|
|
2878
|
+
opacity: 0;
|
|
2879
|
+
pointer-events: none;
|
|
2880
|
+
z-index: 10010;
|
|
2881
|
+
transition: opacity 0.14s ease, transform 0.14s ease;
|
|
2882
|
+
}
|
|
2883
|
+
|
|
2884
|
+
.toolbar-tooltip::after {
|
|
2885
|
+
content: '';
|
|
2886
|
+
position: absolute;
|
|
2887
|
+
left: 50%;
|
|
2888
|
+
top: -5px;
|
|
2889
|
+
width: 10px;
|
|
2890
|
+
height: 10px;
|
|
2891
|
+
background: inherit;
|
|
2892
|
+
border-top: 1px solid color-mix(in srgb, var(--c-line) 78%, var(--c-accent) 22%);
|
|
2893
|
+
border-left: 1px solid color-mix(in srgb, var(--c-line) 78%, var(--c-accent) 22%);
|
|
2894
|
+
transform: translateX(-50%) rotate(45deg);
|
|
2895
|
+
}
|
|
2896
|
+
|
|
2897
|
+
.toolbar-tooltip-anchor-start .toolbar-tooltip::after {
|
|
2898
|
+
left: 18px;
|
|
2899
|
+
transform: rotate(45deg);
|
|
2900
|
+
}
|
|
2901
|
+
|
|
2902
|
+
.toolbar-tooltip-anchor-end .toolbar-tooltip::after {
|
|
2903
|
+
left: auto;
|
|
2904
|
+
right: 18px;
|
|
2905
|
+
transform: rotate(45deg);
|
|
2906
|
+
}
|
|
2907
|
+
|
|
2908
|
+
/* Up variant: bottom-anchored bars (selection bar) open their tooltip above. */
|
|
2909
|
+
.toolbar-tooltip-anchor-up .toolbar-tooltip {
|
|
2910
|
+
top: auto;
|
|
2911
|
+
bottom: calc(100% + 10px);
|
|
2912
|
+
transform: translateX(-50%) translateY(-6px);
|
|
2913
|
+
}
|
|
2914
|
+
.toolbar-tooltip-anchor-up .toolbar-tooltip::after {
|
|
2915
|
+
top: auto;
|
|
2916
|
+
bottom: -5px;
|
|
2917
|
+
border-top: none;
|
|
2918
|
+
border-left: none;
|
|
2919
|
+
border-bottom: 1px solid color-mix(in srgb, var(--c-line) 78%, var(--c-accent) 22%);
|
|
2920
|
+
border-right: 1px solid color-mix(in srgb, var(--c-line) 78%, var(--c-accent) 22%);
|
|
2921
|
+
}
|
|
2922
|
+
.toolbar-tooltip-anchor-up:hover .toolbar-tooltip,
|
|
2923
|
+
.toolbar-tooltip-anchor-up > :focus-visible + .toolbar-tooltip {
|
|
2924
|
+
transform: translateX(-50%) translateY(0);
|
|
2925
|
+
}
|
|
2926
|
+
|
|
2927
|
+
/* :focus-within opens the tooltip only on tap-to-open (informational)
|
|
2928
|
+
anchors — an action button's tooltip must dismiss after its click. */
|
|
2929
|
+
.toolbar-tooltip-anchor:hover .toolbar-tooltip,
|
|
2930
|
+
.toolbar-tooltip-anchor-tap:focus-within .toolbar-tooltip,
|
|
2931
|
+
.toolbar-tooltip-anchor > :focus-visible + .toolbar-tooltip {
|
|
2932
|
+
opacity: 1;
|
|
2933
|
+
transform: translateX(-50%) translateY(0);
|
|
2934
|
+
}
|
|
2935
|
+
|
|
2936
|
+
.toolbar-tooltip-anchor-start:hover .toolbar-tooltip,
|
|
2937
|
+
.toolbar-tooltip-anchor-start.toolbar-tooltip-anchor-tap:focus-within .toolbar-tooltip,
|
|
2938
|
+
.toolbar-tooltip-anchor-start > :focus-visible + .toolbar-tooltip,
|
|
2939
|
+
.toolbar-tooltip-anchor-end:hover .toolbar-tooltip,
|
|
2940
|
+
.toolbar-tooltip-anchor-end.toolbar-tooltip-anchor-tap:focus-within .toolbar-tooltip,
|
|
2941
|
+
.toolbar-tooltip-anchor-end > :focus-visible + .toolbar-tooltip {
|
|
2942
|
+
transform: translateX(0) translateY(0);
|
|
2943
|
+
}
|
|
2944
|
+
|
|
2945
|
+
.toolbar-tooltip-anchor {
|
|
2946
|
+
outline: none;
|
|
2947
|
+
}
|
|
2948
|
+
|
|
2949
|
+
/* Rail variant: fixed beside the hovered button (the rail's scroll clip would
|
|
2950
|
+
swallow an absolute one), arrow on the left, mounted only while hovered. */
|
|
2951
|
+
.toolbar-tooltip.rail-tooltip {
|
|
2952
|
+
position: fixed;
|
|
2953
|
+
right: auto;
|
|
2954
|
+
bottom: auto;
|
|
2955
|
+
min-width: 0;
|
|
2956
|
+
opacity: 1;
|
|
2957
|
+
transform: translateY(-50%);
|
|
2958
|
+
animation: rail-tooltip-in 0.14s ease both;
|
|
2959
|
+
}
|
|
2960
|
+
.toolbar-tooltip.rail-tooltip::after {
|
|
2961
|
+
left: -5px;
|
|
2962
|
+
top: 50%;
|
|
2963
|
+
border-top: none;
|
|
2964
|
+
border-right: none;
|
|
2965
|
+
border-bottom: 1px solid color-mix(in srgb, var(--c-line) 78%, var(--c-accent) 22%);
|
|
2966
|
+
border-left: 1px solid color-mix(in srgb, var(--c-line) 78%, var(--c-accent) 22%);
|
|
2967
|
+
transform: translateY(-50%) rotate(45deg);
|
|
2968
|
+
}
|
|
2969
|
+
@keyframes rail-tooltip-in {
|
|
2970
|
+
from {
|
|
2971
|
+
opacity: 0;
|
|
2972
|
+
transform: translateY(-50%) translateX(-4px);
|
|
2973
|
+
}
|
|
2974
|
+
to {
|
|
2975
|
+
opacity: 1;
|
|
2976
|
+
transform: translateY(-50%) translateX(0);
|
|
1032
2977
|
}
|
|
1033
2978
|
}
|
|
1034
2979
|
|
|
1035
|
-
.toolbar-
|
|
2980
|
+
.toolbar-tooltip-body {
|
|
2981
|
+
font-size: 11.5px;
|
|
2982
|
+
line-height: 1.45;
|
|
2983
|
+
color: var(--c-text-soft);
|
|
2984
|
+
}
|
|
2985
|
+
|
|
2986
|
+
.toolbar-tooltip-label {
|
|
2987
|
+
font-size: 13px;
|
|
2988
|
+
font-weight: 600;
|
|
2989
|
+
letter-spacing: 0.01em;
|
|
2990
|
+
color: var(--c-text);
|
|
2991
|
+
}
|
|
2992
|
+
|
|
2993
|
+
.toolbar-tooltip-meta {
|
|
2994
|
+
display: flex;
|
|
2995
|
+
align-items: center;
|
|
2996
|
+
justify-content: space-between;
|
|
2997
|
+
gap: 10px;
|
|
2998
|
+
color: var(--c-text-soft);
|
|
2999
|
+
}
|
|
3000
|
+
|
|
3001
|
+
.toolbar-tooltip-shortcut {
|
|
3002
|
+
display: inline-flex;
|
|
3003
|
+
align-items: center;
|
|
3004
|
+
justify-content: center;
|
|
3005
|
+
min-height: 20px;
|
|
3006
|
+
padding: 2px 7px;
|
|
3007
|
+
border-radius: 999px;
|
|
3008
|
+
border: 1px solid var(--c-accent-25);
|
|
3009
|
+
background: var(--c-accent-10);
|
|
3010
|
+
color: var(--c-accent);
|
|
3011
|
+
font: 11px/1 var(--mono);
|
|
3012
|
+
white-space: nowrap;
|
|
3013
|
+
}
|
|
3014
|
+
|
|
3015
|
+
.connection-dot {
|
|
3016
|
+
width: 8px;
|
|
3017
|
+
height: 8px;
|
|
3018
|
+
border-radius: 50%;
|
|
3019
|
+
flex-shrink: 0;
|
|
3020
|
+
}
|
|
3021
|
+
|
|
3022
|
+
.connection-dot.connected {
|
|
3023
|
+
background: var(--c-ok);
|
|
3024
|
+
}
|
|
3025
|
+
.connection-dot.connecting {
|
|
3026
|
+
background: var(--c-warn);
|
|
3027
|
+
animation: pulse 1.5s infinite;
|
|
3028
|
+
}
|
|
3029
|
+
.connection-dot.disconnected {
|
|
3030
|
+
background: var(--c-danger);
|
|
3031
|
+
}
|
|
3032
|
+
.connection-dot.reconnecting {
|
|
3033
|
+
background: var(--c-warn);
|
|
3034
|
+
animation: pulse 1.5s infinite;
|
|
3035
|
+
}
|
|
3036
|
+
.connection-dot.resyncing {
|
|
3037
|
+
background: var(--c-accent);
|
|
3038
|
+
animation: pulse 1.5s infinite;
|
|
3039
|
+
}
|
|
3040
|
+
|
|
3041
|
+
/* Degraded-connection banner under the top bar (phase 7, item 14) */
|
|
3042
|
+
.connection-banner {
|
|
1036
3043
|
display: flex;
|
|
1037
|
-
flex-wrap: wrap;
|
|
1038
3044
|
align-items: center;
|
|
1039
|
-
gap:
|
|
3045
|
+
gap: 9px;
|
|
3046
|
+
padding: 7px 14px;
|
|
3047
|
+
flex-shrink: 0;
|
|
3048
|
+
border-bottom: 1px solid var(--c-line);
|
|
3049
|
+
font-size: 11.5px;
|
|
3050
|
+
}
|
|
3051
|
+
.connection-banner.is-reconnecting {
|
|
3052
|
+
background: color-mix(in srgb, var(--c-warn) 10%, transparent);
|
|
3053
|
+
border-bottom-color: color-mix(in srgb, var(--c-warn) 35%, transparent);
|
|
3054
|
+
color: var(--c-warn);
|
|
3055
|
+
}
|
|
3056
|
+
.connection-banner.is-resyncing {
|
|
3057
|
+
background: color-mix(in srgb, var(--c-accent) 8%, transparent);
|
|
3058
|
+
border-bottom-color: color-mix(in srgb, var(--c-accent) 30%, transparent);
|
|
3059
|
+
color: var(--c-accent);
|
|
3060
|
+
}
|
|
3061
|
+
.connection-banner-glyph {
|
|
3062
|
+
font-size: 13px;
|
|
3063
|
+
line-height: 1;
|
|
3064
|
+
}
|
|
3065
|
+
.connection-banner-text {
|
|
3066
|
+
flex: 1;
|
|
1040
3067
|
min-width: 0;
|
|
1041
|
-
|
|
3068
|
+
}
|
|
3069
|
+
.connection-banner-meta {
|
|
3070
|
+
font: 9.5px var(--mono);
|
|
3071
|
+
color: var(--c-muted);
|
|
3072
|
+
}
|
|
3073
|
+
.connection-banner-progress {
|
|
3074
|
+
width: 90px;
|
|
3075
|
+
height: 4px;
|
|
3076
|
+
border-radius: 2px;
|
|
3077
|
+
background: var(--c-line);
|
|
3078
|
+
overflow: hidden;
|
|
3079
|
+
}
|
|
3080
|
+
.connection-banner-progress-fill {
|
|
3081
|
+
display: block;
|
|
3082
|
+
width: 40%;
|
|
3083
|
+
height: 100%;
|
|
3084
|
+
background: var(--c-accent);
|
|
3085
|
+
animation: connection-resync 1.1s ease-in-out infinite;
|
|
3086
|
+
}
|
|
3087
|
+
@keyframes connection-resync {
|
|
3088
|
+
from {
|
|
3089
|
+
transform: translateX(-100%);
|
|
3090
|
+
}
|
|
3091
|
+
to {
|
|
3092
|
+
transform: translateX(260%);
|
|
3093
|
+
}
|
|
3094
|
+
}
|
|
3095
|
+
|
|
3096
|
+
@keyframes pulse {
|
|
3097
|
+
0%,
|
|
3098
|
+
100% {
|
|
3099
|
+
opacity: 1;
|
|
3100
|
+
}
|
|
3101
|
+
50% {
|
|
3102
|
+
opacity: 0.4;
|
|
3103
|
+
}
|
|
1042
3104
|
}
|
|
1043
3105
|
|
|
3106
|
+
|
|
1044
3107
|
/* Positioning parent for a toolbar popover menu. Every menu MUST live inside
|
|
1045
3108
|
one of these wrapped around its trigger — anchoring to a wider ancestor
|
|
1046
3109
|
opens the menu far from the button (0.4.2 report Finding T). */
|
|
@@ -1049,16 +3112,15 @@ body,
|
|
|
1049
3112
|
display: inline-flex;
|
|
1050
3113
|
}
|
|
1051
3114
|
|
|
1052
|
-
.canvas-toolbar button svg {
|
|
1053
|
-
display: block;
|
|
1054
|
-
}
|
|
1055
3115
|
|
|
1056
3116
|
/* ── Toolbar popover menus (theme picker + narrow-screen More menu) ── */
|
|
1057
3117
|
.toolbar-menu {
|
|
1058
3118
|
position: absolute;
|
|
1059
3119
|
top: calc(100% + 8px);
|
|
1060
3120
|
right: 0;
|
|
1061
|
-
|
|
3121
|
+
/* Above the annotation capture layer (9996) — rail popovers overlap the
|
|
3122
|
+
canvas region and must stay clickable while an annotation tool is armed. */
|
|
3123
|
+
z-index: 9999;
|
|
1062
3124
|
display: flex;
|
|
1063
3125
|
flex-direction: column;
|
|
1064
3126
|
gap: 2px;
|
|
@@ -1141,40 +3203,6 @@ body,
|
|
|
1141
3203
|
border-radius: 50%;
|
|
1142
3204
|
}
|
|
1143
3205
|
|
|
1144
|
-
.toolbar-more-glyph {
|
|
1145
|
-
display: block;
|
|
1146
|
-
font-size: 16px;
|
|
1147
|
-
font-weight: 700;
|
|
1148
|
-
line-height: 1;
|
|
1149
|
-
}
|
|
1150
|
-
|
|
1151
|
-
/* Wide screens: the full two-bar toolbar; the More trigger stays hidden. */
|
|
1152
|
-
.toolbar-collapsible {
|
|
1153
|
-
display: contents;
|
|
1154
|
-
}
|
|
1155
|
-
|
|
1156
|
-
.toolbar-more {
|
|
1157
|
-
display: none;
|
|
1158
|
-
}
|
|
1159
|
-
|
|
1160
|
-
/* Narrow screens / embedded panels: ONE compact bar (brand, status, view
|
|
1161
|
-
controls) — every secondary control folds into the More menu instead of
|
|
1162
|
-
wrapping into a second toolbar row. */
|
|
1163
|
-
@media (max-width: 900px) {
|
|
1164
|
-
.toolbar-collapsible {
|
|
1165
|
-
display: none;
|
|
1166
|
-
}
|
|
1167
|
-
|
|
1168
|
-
.toolbar-actions-bar {
|
|
1169
|
-
display: none;
|
|
1170
|
-
}
|
|
1171
|
-
|
|
1172
|
-
.toolbar-more {
|
|
1173
|
-
/* inline-flex (NOT contents): this span is also the positioning anchor
|
|
1174
|
-
for the More menu — display:contents cannot anchor absolute children. */
|
|
1175
|
-
display: inline-flex;
|
|
1176
|
-
}
|
|
1177
|
-
}
|
|
1178
3206
|
|
|
1179
3207
|
@media (max-width: 900px) {
|
|
1180
3208
|
.toolbar-tooltip {
|
|
@@ -1193,16 +3221,39 @@ body,
|
|
|
1193
3221
|
}
|
|
1194
3222
|
}
|
|
1195
3223
|
|
|
1196
|
-
/*
|
|
1197
|
-
|
|
1198
|
-
|
|
1199
|
-
@media (max-width:
|
|
3224
|
+
/* Below 1180px the top bar drops its low-value meta text (board id, counts).
|
|
3225
|
+
Buttons keep their aria-labels + tooltips, so nothing is lost for a11y or
|
|
3226
|
+
discovery. */
|
|
3227
|
+
@media (max-width: 1180px) {
|
|
1200
3228
|
.hud-collapsible-text {
|
|
1201
3229
|
display: none;
|
|
1202
3230
|
}
|
|
1203
3231
|
}
|
|
1204
3232
|
|
|
1205
3233
|
/* Raw markdown source editor */
|
|
3234
|
+
.md-edit-btn {
|
|
3235
|
+
position: absolute;
|
|
3236
|
+
top: 4px;
|
|
3237
|
+
right: 4px;
|
|
3238
|
+
padding: 3px 8px;
|
|
3239
|
+
font-size: 10px;
|
|
3240
|
+
background: var(--c-panel);
|
|
3241
|
+
border: 1px solid var(--c-line);
|
|
3242
|
+
border-radius: 4px;
|
|
3243
|
+
color: var(--c-text-soft);
|
|
3244
|
+
cursor: pointer;
|
|
3245
|
+
opacity: 0;
|
|
3246
|
+
transition: opacity 0.12s ease;
|
|
3247
|
+
}
|
|
3248
|
+
.canvas-node:hover .md-edit-btn,
|
|
3249
|
+
.md-edit-btn:focus-visible {
|
|
3250
|
+
opacity: 1;
|
|
3251
|
+
}
|
|
3252
|
+
.md-edit-btn:hover {
|
|
3253
|
+
color: var(--c-text);
|
|
3254
|
+
border-color: var(--c-accent-25);
|
|
3255
|
+
}
|
|
3256
|
+
|
|
1206
3257
|
.md-editor-split {
|
|
1207
3258
|
display: flex;
|
|
1208
3259
|
height: 100%;
|
|
@@ -1736,6 +3787,10 @@ html.is-node-resizing .ext-app-preview-catcher {
|
|
|
1736
3787
|
color: var(--c-accent);
|
|
1737
3788
|
}
|
|
1738
3789
|
|
|
3790
|
+
.context-menu-item.is-danger .context-menu-label {
|
|
3791
|
+
color: var(--c-danger, #e5484d);
|
|
3792
|
+
}
|
|
3793
|
+
|
|
1739
3794
|
.context-menu-shortcut {
|
|
1740
3795
|
color: var(--c-muted);
|
|
1741
3796
|
font-size: 10px;
|
|
@@ -1861,7 +3916,7 @@ html.is-node-resizing .ext-app-preview-catcher {
|
|
|
1861
3916
|
constant screen size while zoomed out (see edgeChromeScale in EdgeLayer). */
|
|
1862
3917
|
.edge-label {
|
|
1863
3918
|
font-family: var(--font);
|
|
1864
|
-
font-size: calc(11px * var(--edge-
|
|
3919
|
+
font-size: calc(11px * var(--edge-label-scale, 1));
|
|
1865
3920
|
pointer-events: none;
|
|
1866
3921
|
user-select: none;
|
|
1867
3922
|
}
|
|
@@ -1869,7 +3924,7 @@ html.is-node-resizing .ext-app-preview-catcher {
|
|
|
1869
3924
|
.edge-label-bg {
|
|
1870
3925
|
fill: var(--c-panel-glass);
|
|
1871
3926
|
stroke: var(--c-line);
|
|
1872
|
-
stroke-width: calc(0.5 * var(--edge-
|
|
3927
|
+
stroke-width: calc(0.5 * var(--edge-label-scale, 1));
|
|
1873
3928
|
}
|
|
1874
3929
|
|
|
1875
3930
|
/* Trace nodes — compact pills for agent tool/subagent visualization */
|
|
@@ -2061,112 +4116,6 @@ html.is-node-resizing .ext-app-preview-catcher {
|
|
|
2061
4116
|
color: var(--c-accent);
|
|
2062
4117
|
}
|
|
2063
4118
|
|
|
2064
|
-
/* Docked node — compact toolbar-flanking panel */
|
|
2065
|
-
.docked-node {
|
|
2066
|
-
min-width: 200px;
|
|
2067
|
-
max-width: 360px;
|
|
2068
|
-
background: var(--c-panel-glass);
|
|
2069
|
-
backdrop-filter: blur(16px);
|
|
2070
|
-
border: 1px solid var(--c-line);
|
|
2071
|
-
border-radius: var(--radius);
|
|
2072
|
-
box-shadow: 0 12px 40px var(--c-shadow-heavy), 0 0 0 1px rgba(255, 255, 255, 0.04);
|
|
2073
|
-
display: flex;
|
|
2074
|
-
flex-direction: column;
|
|
2075
|
-
overflow: hidden;
|
|
2076
|
-
}
|
|
2077
|
-
|
|
2078
|
-
.docked-node:has(.context-body) {
|
|
2079
|
-
width: 320px;
|
|
2080
|
-
max-width: 320px;
|
|
2081
|
-
}
|
|
2082
|
-
|
|
2083
|
-
/* Collapsed docked widget = a single menu-height pill that flanks the toolbar.
|
|
2084
|
-
Pinned to the same height as .canvas-toolbar so the top HUD row reads as one
|
|
2085
|
-
continuous bar (status on the left, context on the right). */
|
|
2086
|
-
.docked-node--collapsed {
|
|
2087
|
-
height: var(--hud-bar-height);
|
|
2088
|
-
box-sizing: border-box;
|
|
2089
|
-
justify-content: center;
|
|
2090
|
-
width: auto;
|
|
2091
|
-
/* Reset the base .docked-node min-width so the collapsed pill hugs its content
|
|
2092
|
-
(badge + count + controls) instead of stretching to a 200px bar. */
|
|
2093
|
-
min-width: 0;
|
|
2094
|
-
}
|
|
2095
|
-
.docked-node--collapsed .docked-node-header {
|
|
2096
|
-
height: 100%;
|
|
2097
|
-
padding: 0 10px;
|
|
2098
|
-
border-bottom: none;
|
|
2099
|
-
}
|
|
2100
|
-
.docked-node-count {
|
|
2101
|
-
min-width: 18px;
|
|
2102
|
-
height: 18px;
|
|
2103
|
-
padding: 0 5px;
|
|
2104
|
-
display: inline-flex;
|
|
2105
|
-
align-items: center;
|
|
2106
|
-
justify-content: center;
|
|
2107
|
-
border-radius: 9px;
|
|
2108
|
-
background: var(--c-accent);
|
|
2109
|
-
color: var(--c-contrast-fg);
|
|
2110
|
-
font-size: 10px;
|
|
2111
|
-
font-weight: 700;
|
|
2112
|
-
flex-shrink: 0;
|
|
2113
|
-
}
|
|
2114
|
-
|
|
2115
|
-
.docked-node-header {
|
|
2116
|
-
display: flex;
|
|
2117
|
-
align-items: center;
|
|
2118
|
-
gap: 6px;
|
|
2119
|
-
padding: 6px 10px;
|
|
2120
|
-
border-bottom: 1px solid var(--c-line);
|
|
2121
|
-
user-select: none;
|
|
2122
|
-
flex-shrink: 0;
|
|
2123
|
-
}
|
|
2124
|
-
|
|
2125
|
-
.docked-node-header .node-type-badge {
|
|
2126
|
-
font-size: 10px;
|
|
2127
|
-
padding: 1px 6px;
|
|
2128
|
-
border-radius: 4px;
|
|
2129
|
-
background: var(--c-accent-12);
|
|
2130
|
-
color: var(--c-accent);
|
|
2131
|
-
text-transform: uppercase;
|
|
2132
|
-
letter-spacing: 0.04em;
|
|
2133
|
-
flex-shrink: 0;
|
|
2134
|
-
}
|
|
2135
|
-
|
|
2136
|
-
.docked-node-controls {
|
|
2137
|
-
display: flex;
|
|
2138
|
-
gap: 4px;
|
|
2139
|
-
margin-left: auto;
|
|
2140
|
-
flex-shrink: 0;
|
|
2141
|
-
}
|
|
2142
|
-
|
|
2143
|
-
.docked-node-controls button {
|
|
2144
|
-
background: none;
|
|
2145
|
-
border: none;
|
|
2146
|
-
color: var(--c-muted);
|
|
2147
|
-
cursor: pointer;
|
|
2148
|
-
padding: 2px 4px;
|
|
2149
|
-
font-size: 14px;
|
|
2150
|
-
line-height: 1;
|
|
2151
|
-
border-radius: 3px;
|
|
2152
|
-
}
|
|
2153
|
-
|
|
2154
|
-
.docked-node-controls button:hover {
|
|
2155
|
-
background: var(--c-surface-hover);
|
|
2156
|
-
color: var(--c-text);
|
|
2157
|
-
}
|
|
2158
|
-
|
|
2159
|
-
.docked-node-body {
|
|
2160
|
-
padding: 8px 10px;
|
|
2161
|
-
max-height: 200px;
|
|
2162
|
-
overflow-y: auto;
|
|
2163
|
-
}
|
|
2164
|
-
|
|
2165
|
-
.docked-node-body.context-body {
|
|
2166
|
-
max-height: 420px;
|
|
2167
|
-
padding: 10px 14px;
|
|
2168
|
-
}
|
|
2169
|
-
|
|
2170
4119
|
/* MCP app iframe */
|
|
2171
4120
|
.mcp-app-frame {
|
|
2172
4121
|
width: 100%;
|
|
@@ -2222,10 +4171,36 @@ html.is-node-resizing .ext-app-preview-catcher {
|
|
|
2222
4171
|
}
|
|
2223
4172
|
}
|
|
2224
4173
|
|
|
2225
|
-
/* ── Multi-node selection
|
|
4174
|
+
/* ── Multi-node selection (item 13: outline, corner handles, soft glow) ── */
|
|
2226
4175
|
.canvas-node.selected {
|
|
2227
4176
|
border-color: var(--c-accent);
|
|
2228
|
-
box-shadow: 0 0 0
|
|
4177
|
+
box-shadow: 0 0 0 1px var(--c-accent), 0 0 0 4px color-mix(in srgb, var(--c-accent) 10%, transparent);
|
|
4178
|
+
}
|
|
4179
|
+
.node-selection-handle {
|
|
4180
|
+
position: absolute;
|
|
4181
|
+
width: 7px;
|
|
4182
|
+
height: 7px;
|
|
4183
|
+
background: var(--c-bg);
|
|
4184
|
+
border: 1.5px solid var(--c-accent);
|
|
4185
|
+
border-radius: 2px;
|
|
4186
|
+
pointer-events: none;
|
|
4187
|
+
z-index: 3;
|
|
4188
|
+
}
|
|
4189
|
+
.node-selection-handle.is-tl {
|
|
4190
|
+
left: -4px;
|
|
4191
|
+
top: -4px;
|
|
4192
|
+
}
|
|
4193
|
+
.node-selection-handle.is-tr {
|
|
4194
|
+
right: -4px;
|
|
4195
|
+
top: -4px;
|
|
4196
|
+
}
|
|
4197
|
+
.node-selection-handle.is-bl {
|
|
4198
|
+
left: -4px;
|
|
4199
|
+
bottom: -4px;
|
|
4200
|
+
}
|
|
4201
|
+
.node-selection-handle.is-br {
|
|
4202
|
+
right: -4px;
|
|
4203
|
+
bottom: -4px;
|
|
2229
4204
|
}
|
|
2230
4205
|
|
|
2231
4206
|
/* Lasso rectangle overlay */
|
|
@@ -2343,83 +4318,147 @@ html.is-node-resizing .ext-app-preview-catcher {
|
|
|
2343
4318
|
z-index: 9999;
|
|
2344
4319
|
}
|
|
2345
4320
|
|
|
2346
|
-
/*
|
|
4321
|
+
/* In-canvas text prompt (window.prompt replacement — embedded panes no-op it). */
|
|
4322
|
+
.text-prompt-backdrop {
|
|
4323
|
+
position: absolute;
|
|
4324
|
+
inset: 0;
|
|
4325
|
+
display: flex;
|
|
4326
|
+
align-items: flex-start;
|
|
4327
|
+
justify-content: center;
|
|
4328
|
+
padding-top: 18vh;
|
|
4329
|
+
background: color-mix(in srgb, var(--c-bg) 42%, transparent);
|
|
4330
|
+
z-index: 10015;
|
|
4331
|
+
}
|
|
4332
|
+
.text-prompt {
|
|
4333
|
+
width: min(440px, calc(100% - 48px));
|
|
4334
|
+
padding: 14px;
|
|
4335
|
+
background: var(--c-panel);
|
|
4336
|
+
border: 1px solid var(--c-line);
|
|
4337
|
+
border-radius: 12px;
|
|
4338
|
+
box-shadow: 0 18px 60px var(--c-shadow-heavy);
|
|
4339
|
+
display: flex;
|
|
4340
|
+
flex-direction: column;
|
|
4341
|
+
gap: 10px;
|
|
4342
|
+
}
|
|
4343
|
+
.text-prompt-title {
|
|
4344
|
+
font-size: 13px;
|
|
4345
|
+
font-weight: 600;
|
|
4346
|
+
color: var(--c-text);
|
|
4347
|
+
}
|
|
4348
|
+
.text-prompt-input {
|
|
4349
|
+
width: 100%;
|
|
4350
|
+
padding: 8px 10px;
|
|
4351
|
+
border: 1px solid var(--c-line);
|
|
4352
|
+
border-radius: 8px;
|
|
4353
|
+
background: var(--c-bg);
|
|
4354
|
+
color: var(--c-text);
|
|
4355
|
+
font: 13px/1.4 var(--mono);
|
|
4356
|
+
}
|
|
4357
|
+
.text-prompt-input:focus {
|
|
4358
|
+
outline: none;
|
|
4359
|
+
border-color: var(--c-accent);
|
|
4360
|
+
}
|
|
4361
|
+
.text-prompt-actions {
|
|
4362
|
+
display: flex;
|
|
4363
|
+
justify-content: flex-end;
|
|
4364
|
+
gap: 8px;
|
|
4365
|
+
}
|
|
4366
|
+
.text-prompt-cancel,
|
|
4367
|
+
.text-prompt-confirm {
|
|
4368
|
+
padding: 5px 12px;
|
|
4369
|
+
border-radius: 7px;
|
|
4370
|
+
border: 1px solid var(--c-line);
|
|
4371
|
+
background: none;
|
|
4372
|
+
color: var(--c-text-soft);
|
|
4373
|
+
cursor: pointer;
|
|
4374
|
+
font-size: 12px;
|
|
4375
|
+
}
|
|
4376
|
+
.text-prompt-confirm {
|
|
4377
|
+
background: var(--c-accent);
|
|
4378
|
+
border-color: var(--c-accent);
|
|
4379
|
+
color: var(--c-bg);
|
|
4380
|
+
font-weight: 600;
|
|
4381
|
+
}
|
|
4382
|
+
|
|
4383
|
+
/* Selection action bar — floating bottom-center of the canvas region
|
|
4384
|
+
(rail-chrome-v2 phase 7, item 13). */
|
|
4385
|
+
/* In a session the command bar owns the bottom-center slot — lift the
|
|
4386
|
+
selection bar clear of it (composer + chips row); on the quiet board the
|
|
4387
|
+
pin bar does, so lift past that instead. */
|
|
4388
|
+
[data-session-active='true'] .selection-bar {
|
|
4389
|
+
bottom: 124px;
|
|
4390
|
+
}
|
|
4391
|
+
.selection-bar.is-above-pin-bar {
|
|
4392
|
+
bottom: 70px;
|
|
4393
|
+
}
|
|
2347
4394
|
.selection-bar {
|
|
2348
|
-
position:
|
|
2349
|
-
bottom:
|
|
4395
|
+
position: absolute;
|
|
4396
|
+
bottom: 18px;
|
|
2350
4397
|
left: 50%;
|
|
2351
4398
|
transform: translateX(-50%);
|
|
2352
4399
|
display: flex;
|
|
2353
4400
|
align-items: center;
|
|
2354
|
-
gap:
|
|
2355
|
-
padding: 8px
|
|
2356
|
-
background: var(--c-panel
|
|
2357
|
-
backdrop-filter: blur(12px);
|
|
2358
|
-
border: 1px solid var(--c-
|
|
2359
|
-
border-radius:
|
|
2360
|
-
box-shadow: 0
|
|
2361
|
-
z-index:
|
|
4401
|
+
gap: 2px;
|
|
4402
|
+
padding: 6px 8px;
|
|
4403
|
+
background: color-mix(in srgb, var(--c-panel) 97%, transparent);
|
|
4404
|
+
backdrop-filter: blur(12px);
|
|
4405
|
+
border: 1px solid var(--c-line);
|
|
4406
|
+
border-radius: 10px;
|
|
4407
|
+
box-shadow: 0 12px 40px rgba(0, 0, 0, 0.5);
|
|
4408
|
+
z-index: 66;
|
|
2362
4409
|
white-space: nowrap;
|
|
2363
4410
|
}
|
|
2364
|
-
|
|
2365
4411
|
.selection-bar-count {
|
|
2366
|
-
|
|
2367
|
-
font-
|
|
2368
|
-
color: var(--c-accent);
|
|
2369
|
-
}
|
|
2370
|
-
|
|
2371
|
-
.selection-bar-btn {
|
|
2372
|
-
padding: 5px 12px;
|
|
2373
|
-
font-size: 12px;
|
|
4412
|
+
padding: 0 8px;
|
|
4413
|
+
font-size: 11px;
|
|
2374
4414
|
font-weight: 600;
|
|
2375
|
-
background: var(--c-accent-10);
|
|
2376
|
-
border: 1px solid var(--c-accent-30);
|
|
2377
|
-
border-radius: var(--radius-sm);
|
|
2378
4415
|
color: var(--c-accent);
|
|
2379
|
-
cursor: pointer;
|
|
2380
|
-
font-family: var(--font);
|
|
2381
|
-
}
|
|
2382
|
-
|
|
2383
|
-
.selection-bar-btn:hover {
|
|
2384
|
-
background: var(--c-accent-25);
|
|
2385
|
-
border-color: var(--c-accent);
|
|
2386
|
-
}
|
|
2387
|
-
|
|
2388
|
-
.selection-bar-ask {
|
|
2389
|
-
background: var(--c-accent);
|
|
2390
|
-
color: var(--c-contrast-fg);
|
|
2391
|
-
border-color: var(--c-accent);
|
|
2392
4416
|
}
|
|
2393
|
-
|
|
2394
|
-
|
|
2395
|
-
|
|
2396
|
-
|
|
4417
|
+
.selection-bar-sep {
|
|
4418
|
+
width: 1px;
|
|
4419
|
+
height: 18px;
|
|
4420
|
+
margin: 0 4px;
|
|
4421
|
+
background: var(--c-line);
|
|
2397
4422
|
}
|
|
2398
|
-
|
|
2399
|
-
.selection-bar-
|
|
2400
|
-
|
|
4423
|
+
.selection-bar-icon,
|
|
4424
|
+
.selection-bar-action {
|
|
4425
|
+
display: inline-flex;
|
|
4426
|
+
align-items: center;
|
|
4427
|
+
justify-content: center;
|
|
4428
|
+
gap: 5px;
|
|
4429
|
+
height: 28px;
|
|
2401
4430
|
border: none;
|
|
4431
|
+
border-radius: 6px;
|
|
4432
|
+
background: none;
|
|
2402
4433
|
color: var(--c-muted);
|
|
2403
|
-
|
|
2404
|
-
|
|
2405
|
-
|
|
4434
|
+
cursor: pointer;
|
|
4435
|
+
font: inherit;
|
|
4436
|
+
font-size: 11px;
|
|
4437
|
+
font-weight: 600;
|
|
2406
4438
|
}
|
|
2407
|
-
|
|
2408
|
-
|
|
4439
|
+
.selection-bar-icon {
|
|
4440
|
+
width: 28px;
|
|
4441
|
+
font-size: 14px;
|
|
4442
|
+
}
|
|
4443
|
+
.selection-bar-action {
|
|
4444
|
+
padding: 0 9px;
|
|
4445
|
+
}
|
|
4446
|
+
.selection-bar-icon:hover,
|
|
4447
|
+
.selection-bar-action:hover {
|
|
4448
|
+
background: color-mix(in srgb, var(--c-text) 6%, transparent);
|
|
2409
4449
|
color: var(--c-text);
|
|
2410
|
-
background: var(--c-surface-hover);
|
|
2411
4450
|
}
|
|
2412
|
-
|
|
2413
|
-
|
|
2414
|
-
|
|
2415
|
-
|
|
2416
|
-
|
|
4451
|
+
.selection-bar-icon:disabled {
|
|
4452
|
+
opacity: 0.35;
|
|
4453
|
+
cursor: default;
|
|
4454
|
+
}
|
|
4455
|
+
.selection-bar-action.is-pin:hover {
|
|
4456
|
+
background: color-mix(in srgb, var(--c-warn) 10%, transparent);
|
|
2417
4457
|
color: var(--c-warn);
|
|
2418
4458
|
}
|
|
2419
|
-
|
|
2420
|
-
|
|
2421
|
-
|
|
2422
|
-
border-color: var(--c-warn);
|
|
4459
|
+
.selection-bar-icon.is-danger:hover {
|
|
4460
|
+
background: color-mix(in srgb, var(--c-danger) 12%, transparent);
|
|
4461
|
+
color: var(--c-danger);
|
|
2423
4462
|
}
|
|
2424
4463
|
|
|
2425
4464
|
/* ── Context-pinned nodes — amber glow ───────────────────────── */
|
|
@@ -2589,11 +4628,13 @@ html.is-node-resizing .ext-app-preview-catcher {
|
|
|
2589
4628
|
box-shadow: 0 0 24px rgba(75, 188, 255, 0.12);
|
|
2590
4629
|
}
|
|
2591
4630
|
|
|
4631
|
+
/* Anchored to the canvas region (not the window): since the rail-chrome
|
|
4632
|
+
restructure the session panel owns the window's right edge. */
|
|
2592
4633
|
.attention-toast {
|
|
2593
|
-
position:
|
|
2594
|
-
top:
|
|
4634
|
+
position: absolute;
|
|
4635
|
+
top: 18px;
|
|
2595
4636
|
right: 18px;
|
|
2596
|
-
max-width: min(260px, calc(
|
|
4637
|
+
max-width: min(260px, calc(100% - 24px));
|
|
2597
4638
|
display: inline-flex;
|
|
2598
4639
|
align-items: center;
|
|
2599
4640
|
gap: 8px;
|
|
@@ -2606,7 +4647,7 @@ html.is-node-resizing .ext-app-preview-catcher {
|
|
|
2606
4647
|
color: var(--c-text);
|
|
2607
4648
|
font: inherit;
|
|
2608
4649
|
cursor: pointer;
|
|
2609
|
-
z-index:
|
|
4650
|
+
z-index: 9990; /* above the world, below the rail popovers and every modal overlay */
|
|
2610
4651
|
animation: attention-toast-in 180ms ease-out;
|
|
2611
4652
|
}
|
|
2612
4653
|
|
|
@@ -2651,96 +4692,11 @@ html.is-node-resizing .ext-app-preview-catcher {
|
|
|
2651
4692
|
max-width: 200px;
|
|
2652
4693
|
}
|
|
2653
4694
|
|
|
2654
|
-
/* Context dock — expanded panel anchored top-right edge.
|
|
2655
|
-
Mutually exclusive with the Updates panel (see DockedNode.tsx and
|
|
2656
|
-
AttentionHistory.tsx) — opening one collapses the other, so they can both
|
|
2657
|
-
share the same right: 18px anchor without overlapping. */
|
|
2658
|
-
.context-dock-panel {
|
|
2659
|
-
position: fixed;
|
|
2660
|
-
top: 92px;
|
|
2661
|
-
right: 18px;
|
|
2662
|
-
width: min(360px, calc(100vw - 24px));
|
|
2663
|
-
max-height: calc(100vh - 110px);
|
|
2664
|
-
display: flex;
|
|
2665
|
-
flex-direction: column;
|
|
2666
|
-
gap: 10px;
|
|
2667
|
-
padding: 14px;
|
|
2668
|
-
background: color-mix(in srgb, var(--c-panel-glass) 96%, transparent);
|
|
2669
|
-
backdrop-filter: blur(16px);
|
|
2670
|
-
border: 1px solid color-mix(in srgb, var(--c-line) 82%, var(--c-accent) 18%);
|
|
2671
|
-
border-radius: 18px;
|
|
2672
|
-
box-shadow: 0 14px 36px var(--c-shadow), 0 0 0 1px color-mix(in srgb, var(--c-accent) 8%, transparent);
|
|
2673
|
-
z-index: 10001;
|
|
2674
|
-
overflow: hidden;
|
|
2675
|
-
}
|
|
2676
|
-
|
|
2677
|
-
.context-dock-header {
|
|
2678
|
-
display: flex;
|
|
2679
|
-
align-items: flex-start;
|
|
2680
|
-
justify-content: space-between;
|
|
2681
|
-
gap: 8px;
|
|
2682
|
-
padding: 2px 2px 4px;
|
|
2683
|
-
flex-shrink: 0;
|
|
2684
|
-
}
|
|
2685
|
-
|
|
2686
|
-
.context-dock-header-text {
|
|
2687
|
-
display: flex;
|
|
2688
|
-
flex-direction: column;
|
|
2689
|
-
gap: 2px;
|
|
2690
|
-
min-width: 0;
|
|
2691
|
-
}
|
|
2692
|
-
|
|
2693
|
-
.context-dock-title {
|
|
2694
|
-
font-size: 12px;
|
|
2695
|
-
font-weight: 700;
|
|
2696
|
-
letter-spacing: 0.08em;
|
|
2697
|
-
text-transform: uppercase;
|
|
2698
|
-
color: var(--c-text);
|
|
2699
|
-
}
|
|
2700
|
-
|
|
2701
|
-
.context-dock-subtitle {
|
|
2702
|
-
font-size: 11px;
|
|
2703
|
-
color: var(--c-dim);
|
|
2704
|
-
}
|
|
2705
|
-
|
|
2706
|
-
.context-dock-controls {
|
|
2707
|
-
display: flex;
|
|
2708
|
-
gap: 4px;
|
|
2709
|
-
flex-shrink: 0;
|
|
2710
|
-
}
|
|
2711
|
-
|
|
2712
|
-
.context-dock-icon-button {
|
|
2713
|
-
width: 22px;
|
|
2714
|
-
height: 22px;
|
|
2715
|
-
border: 0;
|
|
2716
|
-
border-radius: 6px;
|
|
2717
|
-
background: transparent;
|
|
2718
|
-
color: var(--c-dim);
|
|
2719
|
-
font-size: 16px;
|
|
2720
|
-
line-height: 1;
|
|
2721
|
-
cursor: pointer;
|
|
2722
|
-
display: grid;
|
|
2723
|
-
place-items: center;
|
|
2724
|
-
padding: 0;
|
|
2725
|
-
}
|
|
2726
|
-
|
|
2727
|
-
.context-dock-icon-button:hover {
|
|
2728
|
-
color: var(--c-text);
|
|
2729
|
-
background: var(--c-surface-hover);
|
|
2730
|
-
}
|
|
2731
|
-
|
|
2732
|
-
.context-dock-body {
|
|
2733
|
-
flex: 1 1 auto;
|
|
2734
|
-
min-height: 0;
|
|
2735
|
-
overflow-y: auto;
|
|
2736
|
-
padding-right: 2px;
|
|
2737
|
-
}
|
|
2738
|
-
|
|
2739
4695
|
.attention-history {
|
|
2740
|
-
position:
|
|
2741
|
-
top:
|
|
4696
|
+
position: absolute;
|
|
4697
|
+
top: 60px;
|
|
2742
4698
|
right: 18px;
|
|
2743
|
-
width: min(320px, calc(
|
|
4699
|
+
width: min(320px, calc(100% - 24px));
|
|
2744
4700
|
display: flex;
|
|
2745
4701
|
flex-direction: column;
|
|
2746
4702
|
gap: 10px;
|
|
@@ -2750,12 +4706,12 @@ html.is-node-resizing .ext-app-preview-catcher {
|
|
|
2750
4706
|
border: 1px solid color-mix(in srgb, var(--c-line) 82%, var(--c-warn) 18%);
|
|
2751
4707
|
border-radius: 18px;
|
|
2752
4708
|
box-shadow: 0 14px 36px var(--c-shadow), 0 0 0 1px color-mix(in srgb, var(--c-warn) 8%, transparent);
|
|
2753
|
-
z-index:
|
|
4709
|
+
z-index: 9990;
|
|
2754
4710
|
}
|
|
2755
4711
|
|
|
2756
4712
|
.attention-history-tab {
|
|
2757
|
-
position:
|
|
2758
|
-
top:
|
|
4713
|
+
position: absolute;
|
|
4714
|
+
top: 60px;
|
|
2759
4715
|
right: 0;
|
|
2760
4716
|
display: flex;
|
|
2761
4717
|
align-items: center;
|
|
@@ -2967,82 +4923,265 @@ html.is-node-resizing .ext-app-preview-catcher {
|
|
|
2967
4923
|
color: color-mix(in srgb, var(--c-danger) 78%, var(--c-text) 22%);
|
|
2968
4924
|
}
|
|
2969
4925
|
|
|
2970
|
-
/* ── Group node — spatial container/frame
|
|
4926
|
+
/* ── Group node — spatial container/frame (groups v2, item 20) ─────
|
|
4927
|
+
Dashed frame with the name pill + action cluster ON the top edge; the
|
|
4928
|
+
children live in the world layer. The frame brightens while a dragged node
|
|
4929
|
+
would join on release; a collapsed group is a compact chip. */
|
|
2971
4930
|
.canvas-node.group-node {
|
|
2972
|
-
background: transparent;
|
|
2973
|
-
border:
|
|
2974
|
-
border-radius:
|
|
4931
|
+
background: color-mix(in srgb, var(--group-color, var(--c-accent)) 3%, transparent);
|
|
4932
|
+
border: 1.5px dashed color-mix(in srgb, var(--group-color, var(--c-accent)) 35%, transparent);
|
|
4933
|
+
border-radius: 14px;
|
|
2975
4934
|
box-shadow: none;
|
|
2976
4935
|
overflow: visible;
|
|
4936
|
+
/* The edge row hangs outside the frame: no paint containment here. */
|
|
4937
|
+
contain: layout style;
|
|
2977
4938
|
min-width: 200px;
|
|
2978
4939
|
min-height: 120px;
|
|
4940
|
+
transition:
|
|
4941
|
+
border-color 150ms ease,
|
|
4942
|
+
background 150ms ease;
|
|
2979
4943
|
}
|
|
2980
|
-
|
|
2981
|
-
|
|
2982
|
-
background: color-mix(in srgb, var(--group-color, var(--c-accent)) 12%, transparent);
|
|
2983
|
-
border-bottom: 1px solid color-mix(in srgb, var(--group-color, var(--c-accent)) 25%, transparent);
|
|
2984
|
-
border-radius: 10px 10px 0 0;
|
|
4944
|
+
.canvas-node.group-node:hover {
|
|
4945
|
+
border-color: color-mix(in srgb, var(--group-color, var(--c-accent)) 55%, transparent);
|
|
2985
4946
|
}
|
|
2986
|
-
|
|
2987
|
-
.canvas-node.group-node
|
|
2988
|
-
|
|
2989
|
-
color: var(--group-color, var(--c-accent));
|
|
4947
|
+
.canvas-node.group-node.active,
|
|
4948
|
+
.canvas-node.group-node.selected {
|
|
4949
|
+
border-style: dashed;
|
|
4950
|
+
border-color: color-mix(in srgb, var(--group-color, var(--c-accent)) 70%, transparent);
|
|
4951
|
+
}
|
|
4952
|
+
.canvas-node.group-node.is-drop-target {
|
|
4953
|
+
border-color: color-mix(in srgb, var(--group-color, var(--c-accent)) 80%, transparent);
|
|
4954
|
+
background: color-mix(in srgb, var(--group-color, var(--c-accent)) 9%, transparent);
|
|
4955
|
+
}
|
|
4956
|
+
.canvas-node.group-node.is-drop-source {
|
|
4957
|
+
border-color: color-mix(in srgb, var(--c-warn) 60%, transparent);
|
|
2990
4958
|
}
|
|
2991
|
-
|
|
2992
4959
|
.canvas-node.group-node .node-body {
|
|
2993
|
-
background:
|
|
2994
|
-
padding:
|
|
4960
|
+
background: none;
|
|
4961
|
+
padding: 0;
|
|
4962
|
+
display: flex;
|
|
4963
|
+
align-items: center;
|
|
4964
|
+
justify-content: center;
|
|
2995
4965
|
}
|
|
2996
|
-
|
|
2997
|
-
|
|
2998
|
-
|
|
2999
|
-
|
|
4966
|
+
.group-empty-hint {
|
|
4967
|
+
font-size: 11px;
|
|
4968
|
+
color: var(--c-dim);
|
|
4969
|
+
font-style: italic;
|
|
4970
|
+
text-align: center;
|
|
4971
|
+
padding: 12px 18px;
|
|
4972
|
+
opacity: 0.8;
|
|
4973
|
+
pointer-events: none;
|
|
3000
4974
|
}
|
|
3001
4975
|
|
|
3002
|
-
|
|
3003
|
-
|
|
3004
|
-
|
|
3005
|
-
|
|
4976
|
+
/* Frame edge row: the drag handle for the whole group */
|
|
4977
|
+
.canvas-node.group-node .node-titlebar.group-edge-row {
|
|
4978
|
+
position: absolute;
|
|
4979
|
+
top: -12px;
|
|
4980
|
+
left: 12px;
|
|
4981
|
+
right: 12px;
|
|
4982
|
+
height: 24px;
|
|
4983
|
+
padding: 0;
|
|
4984
|
+
display: flex;
|
|
4985
|
+
align-items: center;
|
|
4986
|
+
gap: 6px;
|
|
4987
|
+
background: none;
|
|
4988
|
+
border: none;
|
|
4989
|
+
border-radius: 0;
|
|
4990
|
+
cursor: grab;
|
|
4991
|
+
overflow: visible;
|
|
4992
|
+
}
|
|
4993
|
+
.group-name-pill {
|
|
4994
|
+
display: inline-flex;
|
|
4995
|
+
align-items: center;
|
|
4996
|
+
gap: 6px;
|
|
4997
|
+
padding: 2px 10px;
|
|
4998
|
+
border-radius: 999px;
|
|
4999
|
+
background: var(--c-panel-soft);
|
|
5000
|
+
border: 1px solid color-mix(in srgb, var(--group-color, var(--c-accent)) 35%, transparent);
|
|
5001
|
+
max-width: 70%;
|
|
5002
|
+
}
|
|
5003
|
+
.group-name {
|
|
5004
|
+
font-size: 10px;
|
|
5005
|
+
font-weight: 700;
|
|
5006
|
+
letter-spacing: 0.08em;
|
|
5007
|
+
text-transform: uppercase;
|
|
5008
|
+
color: var(--group-color, var(--c-accent));
|
|
5009
|
+
white-space: nowrap;
|
|
5010
|
+
overflow: hidden;
|
|
5011
|
+
text-overflow: ellipsis;
|
|
5012
|
+
}
|
|
5013
|
+
.group-count {
|
|
5014
|
+
font: 9px var(--mono);
|
|
5015
|
+
color: var(--c-dim);
|
|
5016
|
+
}
|
|
5017
|
+
.group-title-input {
|
|
5018
|
+
width: 140px;
|
|
5019
|
+
font-size: 11px;
|
|
5020
|
+
}
|
|
5021
|
+
.group-edge-spacer {
|
|
5022
|
+
flex: 1;
|
|
5023
|
+
}
|
|
5024
|
+
.group-actions {
|
|
5025
|
+
position: relative;
|
|
5026
|
+
display: inline-flex;
|
|
5027
|
+
gap: 1px;
|
|
5028
|
+
padding: 2px 4px;
|
|
5029
|
+
border-radius: 999px;
|
|
5030
|
+
background: var(--c-panel-soft);
|
|
5031
|
+
border: 1px solid var(--c-line);
|
|
5032
|
+
}
|
|
5033
|
+
.group-action {
|
|
5034
|
+
display: inline-flex;
|
|
5035
|
+
width: 20px;
|
|
5036
|
+
height: 20px;
|
|
5037
|
+
align-items: center;
|
|
5038
|
+
justify-content: center;
|
|
5039
|
+
background: none;
|
|
5040
|
+
border: none;
|
|
5041
|
+
border-radius: 99px;
|
|
5042
|
+
color: var(--c-muted);
|
|
5043
|
+
cursor: pointer;
|
|
5044
|
+
font-size: 11px;
|
|
5045
|
+
line-height: 1;
|
|
5046
|
+
padding: 0;
|
|
5047
|
+
}
|
|
5048
|
+
.group-action:hover:not(:disabled) {
|
|
5049
|
+
color: var(--group-color, var(--c-accent));
|
|
5050
|
+
}
|
|
5051
|
+
.group-action:disabled {
|
|
5052
|
+
opacity: 0.35;
|
|
5053
|
+
cursor: default;
|
|
5054
|
+
}
|
|
5055
|
+
/* A group stacks BELOW its children by design (bringToFront re-stacks members
|
|
5056
|
+
above the frame), so the frame's own popover would paint under the member
|
|
5057
|
+
cards. While the ⋯ menu is open, lift the whole frame — !important because
|
|
5058
|
+
the node's z-index is an inline style from the store. */
|
|
5059
|
+
.canvas-node.group-menu-open {
|
|
5060
|
+
z-index: 9500 !important;
|
|
3006
5061
|
}
|
|
3007
5062
|
|
|
3008
|
-
.group-
|
|
5063
|
+
.group-menu {
|
|
5064
|
+
position: absolute;
|
|
5065
|
+
top: 26px;
|
|
5066
|
+
right: 0;
|
|
5067
|
+
min-width: 160px;
|
|
3009
5068
|
display: flex;
|
|
3010
5069
|
flex-direction: column;
|
|
3011
|
-
|
|
3012
|
-
|
|
5070
|
+
padding: 4px;
|
|
5071
|
+
background: var(--c-panel);
|
|
5072
|
+
border: 1px solid var(--c-line);
|
|
5073
|
+
border-radius: 8px;
|
|
5074
|
+
box-shadow: 0 12px 32px rgba(0, 0, 0, 0.45);
|
|
5075
|
+
z-index: 20;
|
|
5076
|
+
}
|
|
5077
|
+
.group-menu button {
|
|
5078
|
+
padding: 6px 10px;
|
|
5079
|
+
border: none;
|
|
5080
|
+
border-radius: 6px;
|
|
5081
|
+
background: none;
|
|
5082
|
+
color: var(--c-text-soft);
|
|
5083
|
+
font: inherit;
|
|
5084
|
+
font-size: 11px;
|
|
5085
|
+
text-align: left;
|
|
5086
|
+
cursor: pointer;
|
|
5087
|
+
}
|
|
5088
|
+
.group-menu button:hover:not(:disabled) {
|
|
5089
|
+
background: color-mix(in srgb, var(--c-text) 6%, transparent);
|
|
5090
|
+
color: var(--c-text);
|
|
5091
|
+
}
|
|
5092
|
+
.group-menu button:disabled {
|
|
5093
|
+
opacity: 0.4;
|
|
5094
|
+
cursor: default;
|
|
5095
|
+
}
|
|
5096
|
+
.group-menu button.is-danger:hover {
|
|
5097
|
+
color: var(--c-danger);
|
|
5098
|
+
}
|
|
5099
|
+
|
|
5100
|
+
/* Collapsed group chip */
|
|
5101
|
+
.canvas-node.group-node.group-chip {
|
|
5102
|
+
min-width: 0;
|
|
5103
|
+
min-height: 0;
|
|
5104
|
+
padding: 0;
|
|
5105
|
+
background: color-mix(in srgb, var(--group-color, var(--c-accent)) 4%, transparent);
|
|
5106
|
+
border: 1.5px dashed color-mix(in srgb, var(--group-color, var(--c-accent)) 35%, transparent);
|
|
5107
|
+
border-radius: 12px;
|
|
5108
|
+
cursor: pointer;
|
|
5109
|
+
}
|
|
5110
|
+
.canvas-node.group-node.group-chip:hover {
|
|
5111
|
+
border-color: color-mix(in srgb, var(--group-color, var(--c-accent)) 60%, transparent);
|
|
5112
|
+
background: color-mix(in srgb, var(--group-color, var(--c-accent)) 8%, transparent);
|
|
3013
5113
|
}
|
|
3014
|
-
|
|
3015
|
-
.group-summary {
|
|
5114
|
+
.canvas-node.group-node .node-titlebar.group-chip-inner {
|
|
3016
5115
|
display: flex;
|
|
3017
5116
|
align-items: center;
|
|
3018
5117
|
gap: 10px;
|
|
3019
|
-
|
|
5118
|
+
padding: 10px 14px;
|
|
5119
|
+
background: none;
|
|
5120
|
+
border: none;
|
|
5121
|
+
cursor: grab;
|
|
3020
5122
|
}
|
|
3021
|
-
|
|
3022
|
-
|
|
5123
|
+
.group-chip-expand {
|
|
5124
|
+
background: none;
|
|
5125
|
+
border: none;
|
|
5126
|
+
padding: 0;
|
|
5127
|
+
color: var(--group-color, var(--c-accent));
|
|
3023
5128
|
font-size: 13px;
|
|
3024
|
-
|
|
5129
|
+
line-height: 1;
|
|
5130
|
+
cursor: pointer;
|
|
5131
|
+
}
|
|
5132
|
+
.group-chip-name {
|
|
5133
|
+
font-size: 10px;
|
|
5134
|
+
font-weight: 700;
|
|
5135
|
+
letter-spacing: 0.08em;
|
|
5136
|
+
text-transform: uppercase;
|
|
3025
5137
|
color: var(--group-color, var(--c-accent));
|
|
5138
|
+
white-space: nowrap;
|
|
3026
5139
|
}
|
|
3027
|
-
|
|
3028
|
-
|
|
3029
|
-
|
|
3030
|
-
|
|
5140
|
+
.group-chip-meta {
|
|
5141
|
+
display: flex;
|
|
5142
|
+
align-items: center;
|
|
5143
|
+
gap: 5px;
|
|
5144
|
+
margin-top: 4px;
|
|
5145
|
+
}
|
|
5146
|
+
.group-kind-dot {
|
|
5147
|
+
width: 6px;
|
|
5148
|
+
height: 6px;
|
|
5149
|
+
border-radius: 2px;
|
|
5150
|
+
opacity: 0.8;
|
|
5151
|
+
}
|
|
5152
|
+
.group-chip-count {
|
|
5153
|
+
font: 9px var(--mono);
|
|
5154
|
+
color: var(--c-dim);
|
|
3031
5155
|
}
|
|
3032
5156
|
|
|
3033
|
-
|
|
3034
|
-
|
|
3035
|
-
|
|
3036
|
-
|
|
3037
|
-
|
|
3038
|
-
|
|
3039
|
-
|
|
5157
|
+
/* Release pill under the dragged node */
|
|
5158
|
+
.drop-pill {
|
|
5159
|
+
position: absolute;
|
|
5160
|
+
z-index: 10000;
|
|
5161
|
+
display: inline-flex;
|
|
5162
|
+
align-items: center;
|
|
5163
|
+
gap: 6px;
|
|
5164
|
+
padding: 3px 10px;
|
|
5165
|
+
border-radius: 999px;
|
|
5166
|
+
background: color-mix(in srgb, var(--c-panel) 96%, transparent);
|
|
5167
|
+
border: 1px solid color-mix(in srgb, var(--c-accent) 40%, transparent);
|
|
5168
|
+
pointer-events: none;
|
|
5169
|
+
white-space: nowrap;
|
|
5170
|
+
}
|
|
5171
|
+
.drop-pill-text {
|
|
5172
|
+
font-size: 10px;
|
|
5173
|
+
font-weight: 600;
|
|
5174
|
+
color: var(--c-accent);
|
|
5175
|
+
}
|
|
5176
|
+
.drop-pill-hint {
|
|
5177
|
+
font: 9px var(--mono);
|
|
5178
|
+
color: var(--c-dim);
|
|
3040
5179
|
}
|
|
3041
5180
|
|
|
3042
5181
|
/* ── Context pin bar — persistent floating indicator ─────────── */
|
|
3043
5182
|
.context-pin-bar {
|
|
3044
|
-
position:
|
|
3045
|
-
bottom:
|
|
5183
|
+
position: absolute;
|
|
5184
|
+
bottom: 18px;
|
|
3046
5185
|
left: 50%;
|
|
3047
5186
|
transform: translateX(-50%);
|
|
3048
5187
|
display: flex;
|
|
@@ -3054,7 +5193,7 @@ html.is-node-resizing .ext-app-preview-catcher {
|
|
|
3054
5193
|
border: 1px solid var(--c-warn);
|
|
3055
5194
|
border-radius: var(--radius);
|
|
3056
5195
|
box-shadow: 0 8px 32px var(--c-shadow), 0 0 0 1px var(--c-warn-15);
|
|
3057
|
-
z-index:
|
|
5196
|
+
z-index: 64;
|
|
3058
5197
|
white-space: nowrap;
|
|
3059
5198
|
}
|
|
3060
5199
|
|
|
@@ -3107,6 +5246,114 @@ html.is-node-resizing .ext-app-preview-catcher {
|
|
|
3107
5246
|
}
|
|
3108
5247
|
|
|
3109
5248
|
/* ── Expanded overlay actions ────────────────────────────────── */
|
|
5249
|
+
/* Expanded node view (rail-chrome-v2 phase 7, item 16): scrim + inset panel
|
|
5250
|
+
with 36/48px margins, header with kind pill + pin state, footer strip. */
|
|
5251
|
+
.expanded-overlay-backdrop {
|
|
5252
|
+
position: absolute;
|
|
5253
|
+
inset: 0;
|
|
5254
|
+
z-index: 10001;
|
|
5255
|
+
background: rgba(4, 10, 18, 0.6);
|
|
5256
|
+
display: flex;
|
|
5257
|
+
align-items: stretch;
|
|
5258
|
+
justify-content: center;
|
|
5259
|
+
padding: 36px 48px;
|
|
5260
|
+
}
|
|
5261
|
+
.expanded-overlay-panel {
|
|
5262
|
+
flex: 1;
|
|
5263
|
+
max-width: 1400px;
|
|
5264
|
+
display: flex;
|
|
5265
|
+
flex-direction: column;
|
|
5266
|
+
background: var(--c-panel);
|
|
5267
|
+
border: 1px solid var(--c-line);
|
|
5268
|
+
border-radius: 14px;
|
|
5269
|
+
box-shadow: 0 24px 80px rgba(0, 0, 0, 0.6);
|
|
5270
|
+
overflow: hidden;
|
|
5271
|
+
}
|
|
5272
|
+
.expanded-overlay-panel.is-pinned {
|
|
5273
|
+
border-color: color-mix(in srgb, var(--c-warn) 45%, var(--c-line));
|
|
5274
|
+
}
|
|
5275
|
+
.expanded-header {
|
|
5276
|
+
display: flex;
|
|
5277
|
+
align-items: center;
|
|
5278
|
+
gap: 10px;
|
|
5279
|
+
height: 46px;
|
|
5280
|
+
padding: 0 16px;
|
|
5281
|
+
border-bottom: 1px solid var(--c-line);
|
|
5282
|
+
background: color-mix(in srgb, var(--c-bg) 60%, transparent);
|
|
5283
|
+
flex-shrink: 0;
|
|
5284
|
+
}
|
|
5285
|
+
.expanded-kind-icon {
|
|
5286
|
+
display: inline-flex;
|
|
5287
|
+
color: var(--c-accent);
|
|
5288
|
+
}
|
|
5289
|
+
.expanded-title {
|
|
5290
|
+
font-size: 13px;
|
|
5291
|
+
font-weight: 600;
|
|
5292
|
+
color: var(--c-text);
|
|
5293
|
+
white-space: nowrap;
|
|
5294
|
+
overflow: hidden;
|
|
5295
|
+
text-overflow: ellipsis;
|
|
5296
|
+
min-width: 0;
|
|
5297
|
+
}
|
|
5298
|
+
.expanded-kind-pill {
|
|
5299
|
+
font-size: 9px;
|
|
5300
|
+
font-weight: 600;
|
|
5301
|
+
padding: 2px 8px;
|
|
5302
|
+
border-radius: 999px;
|
|
5303
|
+
border: 1px solid var(--c-line);
|
|
5304
|
+
color: var(--c-muted);
|
|
5305
|
+
white-space: nowrap;
|
|
5306
|
+
}
|
|
5307
|
+
.expanded-pin {
|
|
5308
|
+
background: none;
|
|
5309
|
+
border: none;
|
|
5310
|
+
padding: 0 2px;
|
|
5311
|
+
font-size: 12px;
|
|
5312
|
+
color: var(--c-dim);
|
|
5313
|
+
cursor: pointer;
|
|
5314
|
+
}
|
|
5315
|
+
.expanded-pin.is-on {
|
|
5316
|
+
color: var(--c-warn);
|
|
5317
|
+
}
|
|
5318
|
+
.expanded-spacer {
|
|
5319
|
+
flex: 1;
|
|
5320
|
+
}
|
|
5321
|
+
.expanded-close {
|
|
5322
|
+
background: none;
|
|
5323
|
+
border: none;
|
|
5324
|
+
color: var(--c-muted);
|
|
5325
|
+
font-size: 16px;
|
|
5326
|
+
line-height: 1;
|
|
5327
|
+
cursor: pointer;
|
|
5328
|
+
padding: 0 4px;
|
|
5329
|
+
}
|
|
5330
|
+
.expanded-close:hover {
|
|
5331
|
+
color: var(--c-text);
|
|
5332
|
+
}
|
|
5333
|
+
.expanded-body {
|
|
5334
|
+
flex: 1;
|
|
5335
|
+
min-height: 0;
|
|
5336
|
+
overflow: auto;
|
|
5337
|
+
padding: 16px;
|
|
5338
|
+
}
|
|
5339
|
+
.expanded-body.is-embedded {
|
|
5340
|
+
display: flex;
|
|
5341
|
+
flex-direction: column;
|
|
5342
|
+
}
|
|
5343
|
+
.expanded-footer {
|
|
5344
|
+
display: flex;
|
|
5345
|
+
align-items: center;
|
|
5346
|
+
gap: 12px;
|
|
5347
|
+
padding: 8px 16px;
|
|
5348
|
+
border-top: 1px solid var(--c-line);
|
|
5349
|
+
background: color-mix(in srgb, var(--c-bg) 50%, transparent);
|
|
5350
|
+
font: 9.5px var(--mono);
|
|
5351
|
+
color: var(--c-dim);
|
|
5352
|
+
flex-shrink: 0;
|
|
5353
|
+
}
|
|
5354
|
+
.expanded-footer-hint.is-saving {
|
|
5355
|
+
color: var(--c-warn);
|
|
5356
|
+
}
|
|
3110
5357
|
.expanded-actions {
|
|
3111
5358
|
display: flex;
|
|
3112
5359
|
align-items: center;
|
|
@@ -3369,51 +5616,60 @@ html.is-node-resizing .ext-app-preview-catcher {
|
|
|
3369
5616
|
|
|
3370
5617
|
/* ── Snapshot Panel ───────────────────────────────────────── */
|
|
3371
5618
|
|
|
5619
|
+
/* History drawer (rail-chrome-v2 phase 7, item 8): snapshots + sessions as
|
|
5620
|
+
one reverse-chronological list in a right drawer of the canvas region. */
|
|
3372
5621
|
.snapshot-panel {
|
|
3373
|
-
position:
|
|
3374
|
-
|
|
3375
|
-
|
|
5622
|
+
position: absolute;
|
|
5623
|
+
top: 0;
|
|
5624
|
+
right: 0;
|
|
5625
|
+
bottom: 0;
|
|
5626
|
+
width: min(300px, 100%);
|
|
3376
5627
|
display: flex;
|
|
3377
5628
|
flex-direction: column;
|
|
3378
|
-
background: var(--c-panel-
|
|
3379
|
-
|
|
3380
|
-
|
|
3381
|
-
|
|
3382
|
-
|
|
3383
|
-
z-index: 10001;
|
|
5629
|
+
background: var(--c-panel-soft);
|
|
5630
|
+
border-left: 1px solid var(--c-line);
|
|
5631
|
+
box-shadow: -16px 0 40px rgba(0, 0, 0, 0.45);
|
|
5632
|
+
/* Above the receipt it is opened from, below the rail popovers. */
|
|
5633
|
+
z-index: 9999;
|
|
3384
5634
|
overflow: hidden;
|
|
3385
|
-
animation: snapshot-panel-in 0.
|
|
5635
|
+
animation: snapshot-panel-in 0.18s ease-out;
|
|
3386
5636
|
}
|
|
3387
5637
|
|
|
3388
5638
|
@keyframes snapshot-panel-in {
|
|
3389
|
-
from { opacity: 0; transform:
|
|
3390
|
-
to { opacity: 1; transform:
|
|
5639
|
+
from { opacity: 0; transform: translateX(12px); }
|
|
5640
|
+
to { opacity: 1; transform: translateX(0); }
|
|
3391
5641
|
}
|
|
3392
5642
|
|
|
3393
5643
|
.snapshot-panel-header {
|
|
3394
5644
|
display: flex;
|
|
3395
5645
|
align-items: center;
|
|
3396
|
-
|
|
3397
|
-
|
|
5646
|
+
gap: 8px;
|
|
5647
|
+
height: var(--hud-bar-height);
|
|
5648
|
+
padding: 0 14px;
|
|
3398
5649
|
border-bottom: 1px solid var(--c-line);
|
|
5650
|
+
flex-shrink: 0;
|
|
3399
5651
|
}
|
|
3400
|
-
|
|
3401
5652
|
.snapshot-panel-title {
|
|
3402
5653
|
font-size: 11px;
|
|
3403
|
-
font-weight:
|
|
5654
|
+
font-weight: 700;
|
|
5655
|
+
letter-spacing: 0.08em;
|
|
3404
5656
|
text-transform: uppercase;
|
|
3405
|
-
|
|
3406
|
-
|
|
5657
|
+
color: var(--c-text);
|
|
5658
|
+
}
|
|
5659
|
+
.snapshot-panel-sub {
|
|
5660
|
+
font-size: 10px;
|
|
5661
|
+
color: var(--c-dim);
|
|
5662
|
+
}
|
|
5663
|
+
.snapshot-panel-spacer {
|
|
5664
|
+
flex: 1;
|
|
3407
5665
|
}
|
|
3408
|
-
|
|
3409
5666
|
.snapshot-panel-close {
|
|
3410
5667
|
background: none;
|
|
3411
5668
|
border: none;
|
|
3412
|
-
color: var(--c-
|
|
3413
|
-
font-size:
|
|
5669
|
+
color: var(--c-muted);
|
|
5670
|
+
font-size: 14px;
|
|
3414
5671
|
cursor: pointer;
|
|
3415
5672
|
padding: 0 2px;
|
|
3416
|
-
line-height: 1;
|
|
3417
5673
|
}
|
|
3418
5674
|
.snapshot-panel-close:hover {
|
|
3419
5675
|
color: var(--c-text);
|
|
@@ -3422,152 +5678,172 @@ html.is-node-resizing .ext-app-preview-catcher {
|
|
|
3422
5678
|
.snapshot-save-form {
|
|
3423
5679
|
display: flex;
|
|
3424
5680
|
gap: 6px;
|
|
3425
|
-
padding: 10px
|
|
3426
|
-
border-bottom: 1px solid var(--c-line);
|
|
5681
|
+
padding: 10px 12px 6px;
|
|
3427
5682
|
}
|
|
3428
|
-
|
|
3429
5683
|
.snapshot-name-input {
|
|
3430
5684
|
flex: 1;
|
|
3431
|
-
|
|
5685
|
+
min-width: 0;
|
|
5686
|
+
padding: 6px 10px;
|
|
3432
5687
|
border: 1px solid var(--c-line);
|
|
3433
|
-
border-radius:
|
|
5688
|
+
border-radius: 7px;
|
|
5689
|
+
background: var(--c-panel);
|
|
3434
5690
|
color: var(--c-text);
|
|
3435
|
-
font
|
|
3436
|
-
font-size: 12px;
|
|
3437
|
-
padding: 6px 10px;
|
|
3438
|
-
outline: none;
|
|
3439
|
-
transition: border-color 0.15s;
|
|
5691
|
+
font: 11.5px var(--font);
|
|
3440
5692
|
}
|
|
3441
5693
|
.snapshot-name-input:focus {
|
|
3442
|
-
|
|
5694
|
+
outline: 2px solid var(--c-accent);
|
|
5695
|
+
outline-offset: 1px;
|
|
3443
5696
|
}
|
|
3444
5697
|
.snapshot-name-input::placeholder {
|
|
3445
5698
|
color: var(--c-dim);
|
|
3446
5699
|
}
|
|
3447
|
-
|
|
3448
5700
|
.snapshot-save-btn {
|
|
3449
|
-
|
|
5701
|
+
padding: 6px 12px;
|
|
3450
5702
|
border: none;
|
|
3451
|
-
|
|
3452
|
-
|
|
5703
|
+
border-radius: 7px;
|
|
5704
|
+
background: var(--c-accent);
|
|
5705
|
+
color: var(--c-bg);
|
|
3453
5706
|
font-size: 11px;
|
|
3454
5707
|
font-weight: 600;
|
|
3455
|
-
padding: 6px 14px;
|
|
3456
|
-
border-radius: var(--radius-sm);
|
|
3457
5708
|
cursor: pointer;
|
|
3458
|
-
white-space: nowrap;
|
|
3459
|
-
transition: background 0.15s;
|
|
3460
|
-
}
|
|
3461
|
-
.snapshot-save-btn:hover:not(:disabled) {
|
|
3462
|
-
background: var(--c-accent-hover);
|
|
3463
5709
|
}
|
|
3464
5710
|
.snapshot-save-btn:disabled {
|
|
3465
|
-
opacity: 0.
|
|
5711
|
+
opacity: 0.45;
|
|
3466
5712
|
cursor: default;
|
|
3467
5713
|
}
|
|
3468
|
-
|
|
3469
5714
|
.snapshot-restore-note {
|
|
3470
|
-
padding: 0 12px
|
|
3471
|
-
font-size:
|
|
5715
|
+
padding: 0 12px 8px;
|
|
5716
|
+
font-size: 9.5px;
|
|
3472
5717
|
color: var(--c-dim);
|
|
3473
5718
|
}
|
|
3474
5719
|
|
|
3475
5720
|
.snapshot-list {
|
|
3476
|
-
overflow-y: auto;
|
|
3477
5721
|
flex: 1;
|
|
3478
|
-
|
|
5722
|
+
min-height: 0;
|
|
5723
|
+
overflow-y: auto;
|
|
5724
|
+
padding: 4px 12px 10px;
|
|
5725
|
+
display: flex;
|
|
5726
|
+
flex-direction: column;
|
|
5727
|
+
gap: 8px;
|
|
3479
5728
|
}
|
|
3480
|
-
|
|
3481
5729
|
.snapshot-empty {
|
|
3482
|
-
padding:
|
|
5730
|
+
padding: 14px 2px;
|
|
5731
|
+
font-size: 11px;
|
|
3483
5732
|
color: var(--c-dim);
|
|
3484
|
-
|
|
3485
|
-
|
|
3486
|
-
|
|
5733
|
+
}
|
|
5734
|
+
.snapshot-section-header {
|
|
5735
|
+
margin: 10px 2px 4px;
|
|
5736
|
+
font-size: 10px;
|
|
5737
|
+
font-weight: 700;
|
|
5738
|
+
letter-spacing: 0.08em;
|
|
5739
|
+
text-transform: uppercase;
|
|
5740
|
+
color: var(--c-muted);
|
|
3487
5741
|
}
|
|
3488
5742
|
|
|
3489
5743
|
.snapshot-item {
|
|
5744
|
+
padding: 10px 12px;
|
|
5745
|
+
border: 1px solid var(--c-line);
|
|
5746
|
+
border-radius: 10px;
|
|
5747
|
+
}
|
|
5748
|
+
.snapshot-item.is-session {
|
|
5749
|
+
border-color: color-mix(in srgb, var(--c-purple) 30%, transparent);
|
|
5750
|
+
background: color-mix(in srgb, var(--c-purple) 5%, transparent);
|
|
5751
|
+
}
|
|
5752
|
+
.snapshot-item-head {
|
|
3490
5753
|
display: flex;
|
|
3491
5754
|
align-items: center;
|
|
3492
|
-
|
|
3493
|
-
gap: 8px;
|
|
3494
|
-
padding: 8px 14px;
|
|
3495
|
-
transition: background 0.1s;
|
|
5755
|
+
gap: 7px;
|
|
3496
5756
|
}
|
|
3497
|
-
.snapshot-
|
|
3498
|
-
|
|
5757
|
+
.snapshot-session-dot {
|
|
5758
|
+
width: 7px;
|
|
5759
|
+
height: 7px;
|
|
5760
|
+
border-radius: 50%;
|
|
5761
|
+
background: var(--c-purple);
|
|
5762
|
+
flex-shrink: 0;
|
|
3499
5763
|
}
|
|
3500
|
-
|
|
3501
|
-
|
|
3502
|
-
|
|
3503
|
-
|
|
3504
|
-
gap: 2px;
|
|
3505
|
-
min-width: 0;
|
|
3506
|
-
flex: 1;
|
|
5764
|
+
.snapshot-item-glyph {
|
|
5765
|
+
color: var(--c-muted);
|
|
5766
|
+
font-size: 12px;
|
|
5767
|
+
line-height: 1;
|
|
3507
5768
|
}
|
|
3508
|
-
|
|
3509
5769
|
.snapshot-item-name {
|
|
3510
|
-
|
|
3511
|
-
|
|
3512
|
-
|
|
5770
|
+
flex: 1;
|
|
5771
|
+
min-width: 0;
|
|
5772
|
+
font-size: 11.5px;
|
|
5773
|
+
font-weight: 600;
|
|
5774
|
+
color: var(--c-text-soft);
|
|
3513
5775
|
white-space: nowrap;
|
|
3514
5776
|
overflow: hidden;
|
|
3515
5777
|
text-overflow: ellipsis;
|
|
3516
5778
|
}
|
|
3517
|
-
|
|
3518
|
-
|
|
3519
|
-
|
|
5779
|
+
.snapshot-item.is-session .snapshot-item-name {
|
|
5780
|
+
color: var(--c-text);
|
|
5781
|
+
}
|
|
5782
|
+
.snapshot-item-time {
|
|
5783
|
+
font: 9px var(--mono);
|
|
3520
5784
|
color: var(--c-dim);
|
|
3521
5785
|
}
|
|
3522
|
-
|
|
5786
|
+
.snapshot-item-meta {
|
|
5787
|
+
margin-top: 3px;
|
|
5788
|
+
font-size: 10.5px;
|
|
5789
|
+
color: var(--c-muted);
|
|
5790
|
+
}
|
|
5791
|
+
.snapshot-item-diff {
|
|
5792
|
+
color: var(--c-accent);
|
|
5793
|
+
}
|
|
3523
5794
|
.snapshot-item-actions {
|
|
3524
5795
|
display: flex;
|
|
3525
|
-
gap:
|
|
3526
|
-
|
|
3527
|
-
opacity: 0;
|
|
3528
|
-
transition: opacity 0.1s;
|
|
3529
|
-
}
|
|
3530
|
-
.snapshot-item:hover .snapshot-item-actions {
|
|
3531
|
-
opacity: 1;
|
|
5796
|
+
gap: 6px;
|
|
5797
|
+
margin-top: 8px;
|
|
3532
5798
|
}
|
|
3533
|
-
|
|
3534
5799
|
.snapshot-action-btn {
|
|
3535
|
-
|
|
5800
|
+
flex: 1;
|
|
5801
|
+
padding: 5px 0;
|
|
3536
5802
|
border: 1px solid var(--c-line);
|
|
5803
|
+
border-radius: 6px;
|
|
5804
|
+
background: none;
|
|
3537
5805
|
color: var(--c-muted);
|
|
3538
|
-
font-
|
|
3539
|
-
font-
|
|
3540
|
-
padding: 3px 8px;
|
|
3541
|
-
border-radius: var(--radius-sm);
|
|
5806
|
+
font-size: 10.5px;
|
|
5807
|
+
font-weight: 600;
|
|
3542
5808
|
cursor: pointer;
|
|
3543
|
-
transition: all 0.1s;
|
|
3544
5809
|
}
|
|
3545
|
-
|
|
5810
|
+
.snapshot-action-btn:hover:not(:disabled) {
|
|
5811
|
+
color: var(--c-text);
|
|
5812
|
+
}
|
|
5813
|
+
.snapshot-action-btn:disabled {
|
|
5814
|
+
opacity: 0.5;
|
|
5815
|
+
cursor: default;
|
|
5816
|
+
}
|
|
5817
|
+
.snapshot-action-diff,
|
|
3546
5818
|
.snapshot-action-restore {
|
|
5819
|
+
background: color-mix(in srgb, var(--c-accent) 12%, transparent);
|
|
5820
|
+
border-color: color-mix(in srgb, var(--c-accent) 30%, transparent);
|
|
3547
5821
|
color: var(--c-accent);
|
|
3548
|
-
border-color: var(--c-accent-25);
|
|
3549
5822
|
}
|
|
3550
|
-
.snapshot-action-
|
|
3551
|
-
|
|
3552
|
-
|
|
5823
|
+
.snapshot-action-diff:hover:not(:disabled),
|
|
5824
|
+
.snapshot-action-restore:hover:not(:disabled) {
|
|
5825
|
+
background: color-mix(in srgb, var(--c-accent) 20%, transparent);
|
|
5826
|
+
color: var(--c-accent);
|
|
3553
5827
|
}
|
|
3554
|
-
|
|
3555
5828
|
.snapshot-action-delete {
|
|
3556
|
-
|
|
3557
|
-
|
|
3558
|
-
padding: 3px 5px;
|
|
5829
|
+
flex: 0 0 auto;
|
|
5830
|
+
padding: 5px 9px;
|
|
3559
5831
|
}
|
|
3560
|
-
.snapshot-action-delete:hover {
|
|
5832
|
+
.snapshot-action-delete:hover:not(:disabled) {
|
|
5833
|
+
border-color: color-mix(in srgb, var(--c-danger) 40%, transparent);
|
|
3561
5834
|
color: var(--c-danger);
|
|
3562
|
-
border-color: var(--c-danger-12);
|
|
3563
5835
|
}
|
|
3564
|
-
|
|
3565
5836
|
.snapshot-action-confirm {
|
|
5837
|
+
background: color-mix(in srgb, var(--c-danger) 12%, transparent);
|
|
5838
|
+
border-color: color-mix(in srgb, var(--c-danger) 40%, transparent);
|
|
3566
5839
|
color: var(--c-danger);
|
|
3567
|
-
border-color: var(--c-danger);
|
|
3568
5840
|
}
|
|
3569
|
-
.snapshot-
|
|
3570
|
-
|
|
5841
|
+
.snapshot-panel-foot {
|
|
5842
|
+
padding: 9px 14px;
|
|
5843
|
+
border-top: 1px solid var(--c-line);
|
|
5844
|
+
font-size: 9.5px;
|
|
5845
|
+
color: var(--c-dim);
|
|
5846
|
+
flex-shrink: 0;
|
|
3571
5847
|
}
|
|
3572
5848
|
|
|
3573
5849
|
/* ── Command Palette (Cmd/Ctrl+K) ──────────────────────────── */
|
|
@@ -3576,22 +5852,23 @@ html.is-node-resizing .ext-app-preview-catcher {
|
|
|
3576
5852
|
position: fixed;
|
|
3577
5853
|
inset: 0;
|
|
3578
5854
|
z-index: 10002;
|
|
3579
|
-
background: rgba(
|
|
5855
|
+
background: rgba(4, 10, 18, 0.55);
|
|
3580
5856
|
display: flex;
|
|
3581
5857
|
justify-content: center;
|
|
3582
|
-
padding-top:
|
|
5858
|
+
padding-top: 56px;
|
|
3583
5859
|
}
|
|
3584
5860
|
|
|
5861
|
+
/* ⌘K palette (rail-chrome-v2 phase 7, item 7): 560px, top-anchored at 56px,
|
|
5862
|
+
grouped results, footer key hints. */
|
|
3585
5863
|
.command-palette {
|
|
3586
|
-
width:
|
|
3587
|
-
max-height:
|
|
5864
|
+
width: min(560px, calc(100% - 48px));
|
|
5865
|
+
max-height: min(520px, calc(100vh - 80px));
|
|
3588
5866
|
display: flex;
|
|
3589
5867
|
flex-direction: column;
|
|
3590
|
-
background: var(--c-panel
|
|
3591
|
-
backdrop-filter: blur(16px);
|
|
5868
|
+
background: var(--c-panel);
|
|
3592
5869
|
border: 1px solid var(--c-line);
|
|
3593
|
-
border-radius:
|
|
3594
|
-
box-shadow: 0
|
|
5870
|
+
border-radius: 12px;
|
|
5871
|
+
box-shadow: 0 24px 60px rgba(0, 0, 0, 0.6);
|
|
3595
5872
|
overflow: hidden;
|
|
3596
5873
|
animation: command-palette-in 0.12s ease-out;
|
|
3597
5874
|
align-self: flex-start;
|
|
@@ -3602,107 +5879,99 @@ html.is-node-resizing .ext-app-preview-catcher {
|
|
|
3602
5879
|
to { opacity: 1; transform: translateY(0) scale(1); }
|
|
3603
5880
|
}
|
|
3604
5881
|
|
|
5882
|
+
.command-palette-search {
|
|
5883
|
+
display: flex;
|
|
5884
|
+
align-items: center;
|
|
5885
|
+
gap: 10px;
|
|
5886
|
+
padding: 12px 14px;
|
|
5887
|
+
border-bottom: 1px solid var(--c-line);
|
|
5888
|
+
color: var(--c-accent);
|
|
5889
|
+
}
|
|
3605
5890
|
.command-palette-input {
|
|
3606
|
-
|
|
5891
|
+
flex: 1;
|
|
5892
|
+
min-width: 0;
|
|
5893
|
+
padding: 0;
|
|
3607
5894
|
border: none;
|
|
3608
|
-
border-bottom: 1px solid var(--c-line);
|
|
3609
|
-
color: var(--c-text);
|
|
3610
|
-
font-family: var(--font);
|
|
3611
|
-
font-size: 14px;
|
|
3612
|
-
padding: 14px 16px;
|
|
3613
5895
|
outline: none;
|
|
3614
|
-
|
|
3615
|
-
|
|
3616
|
-
|
|
3617
|
-
.command-palette-input:focus {
|
|
3618
|
-
border-bottom-color: var(--c-accent);
|
|
5896
|
+
background: none;
|
|
5897
|
+
color: var(--c-text);
|
|
5898
|
+
font: 13px var(--font);
|
|
3619
5899
|
}
|
|
3620
5900
|
.command-palette-input::placeholder {
|
|
3621
5901
|
color: var(--c-dim);
|
|
3622
5902
|
}
|
|
3623
|
-
|
|
3624
|
-
.command-palette-
|
|
3625
|
-
|
|
3626
|
-
gap: 12px;
|
|
3627
|
-
padding: 6px 16px;
|
|
3628
|
-
font-size: 10px;
|
|
3629
|
-
color: var(--c-dim);
|
|
3630
|
-
border-bottom: 1px solid var(--c-line);
|
|
3631
|
-
}
|
|
3632
|
-
.command-palette-hint kbd {
|
|
3633
|
-
display: inline-block;
|
|
3634
|
-
background: var(--c-surface-hover);
|
|
5903
|
+
.command-palette-esc,
|
|
5904
|
+
.command-palette-kbd {
|
|
5905
|
+
padding: 1px 6px;
|
|
3635
5906
|
border: 1px solid var(--c-line);
|
|
3636
|
-
border-radius:
|
|
3637
|
-
|
|
3638
|
-
|
|
3639
|
-
|
|
3640
|
-
|
|
3641
|
-
|
|
5907
|
+
border-radius: 4px;
|
|
5908
|
+
font: 9.5px var(--mono);
|
|
5909
|
+
color: var(--c-muted);
|
|
5910
|
+
}
|
|
5911
|
+
.command-palette-esc {
|
|
5912
|
+
padding: 2px 7px;
|
|
5913
|
+
border-radius: 5px;
|
|
5914
|
+
color: var(--c-dim);
|
|
3642
5915
|
}
|
|
3643
5916
|
|
|
3644
5917
|
.command-palette-results {
|
|
3645
|
-
overflow-y: auto;
|
|
3646
5918
|
flex: 1;
|
|
3647
|
-
|
|
5919
|
+
min-height: 0;
|
|
5920
|
+
overflow-y: auto;
|
|
5921
|
+
padding: 6px 6px 4px;
|
|
3648
5922
|
}
|
|
3649
|
-
|
|
3650
5923
|
.command-palette-empty {
|
|
3651
|
-
padding:
|
|
3652
|
-
text-align: center;
|
|
3653
|
-
color: var(--c-dim);
|
|
5924
|
+
padding: 14px 10px;
|
|
3654
5925
|
font-size: 12px;
|
|
5926
|
+
color: var(--c-dim);
|
|
5927
|
+
}
|
|
5928
|
+
.command-palette-group {
|
|
5929
|
+
padding: 6px 10px 4px;
|
|
5930
|
+
font-size: 9px;
|
|
5931
|
+
font-weight: 700;
|
|
5932
|
+
letter-spacing: 0.08em;
|
|
5933
|
+
text-transform: uppercase;
|
|
5934
|
+
color: var(--c-dim);
|
|
3655
5935
|
}
|
|
3656
|
-
|
|
3657
5936
|
.command-palette-item {
|
|
3658
5937
|
display: flex;
|
|
3659
5938
|
align-items: center;
|
|
3660
5939
|
gap: 10px;
|
|
3661
5940
|
width: 100%;
|
|
3662
|
-
padding:
|
|
3663
|
-
background: none;
|
|
5941
|
+
padding: 7px 10px;
|
|
3664
5942
|
border: none;
|
|
3665
|
-
|
|
3666
|
-
|
|
3667
|
-
|
|
5943
|
+
border-radius: 8px;
|
|
5944
|
+
background: none;
|
|
5945
|
+
color: var(--c-text-soft);
|
|
3668
5946
|
cursor: pointer;
|
|
3669
5947
|
text-align: left;
|
|
3670
|
-
|
|
3671
|
-
}
|
|
3672
|
-
|
|
3673
|
-
.command-palette-item.selected {
|
|
3674
|
-
background: var(--c-accent-10);
|
|
5948
|
+
font: inherit;
|
|
3675
5949
|
}
|
|
3676
|
-
|
|
3677
5950
|
.command-palette-item:hover {
|
|
3678
|
-
background: var(--c-
|
|
5951
|
+
background: color-mix(in srgb, var(--c-text) 5%, transparent);
|
|
3679
5952
|
}
|
|
3680
|
-
|
|
5953
|
+
.command-palette-item.selected,
|
|
3681
5954
|
.command-palette-item.selected:hover {
|
|
3682
|
-
background: var(--c-accent
|
|
5955
|
+
background: color-mix(in srgb, var(--c-accent) 12%, transparent);
|
|
5956
|
+
color: var(--c-text);
|
|
3683
5957
|
}
|
|
3684
|
-
|
|
3685
|
-
|
|
3686
|
-
font-size: 9px;
|
|
3687
|
-
padding: 1px 6px;
|
|
3688
|
-
border-radius: 4px;
|
|
3689
|
-
background: var(--c-accent-12);
|
|
3690
|
-
color: var(--c-accent);
|
|
5958
|
+
.command-palette-icon {
|
|
5959
|
+
display: inline-flex;
|
|
3691
5960
|
flex-shrink: 0;
|
|
3692
|
-
|
|
3693
|
-
|
|
3694
|
-
|
|
3695
|
-
min-width: 32px;
|
|
3696
|
-
text-align: center;
|
|
5961
|
+
width: 14px;
|
|
5962
|
+
height: 14px;
|
|
5963
|
+
color: var(--c-accent);
|
|
3697
5964
|
}
|
|
3698
|
-
|
|
3699
|
-
.command-palette-badge--action {
|
|
3700
|
-
background: rgba(176, 122, 255, 0.12);
|
|
5965
|
+
.command-palette-icon.tone-purple {
|
|
3701
5966
|
color: var(--c-purple);
|
|
3702
5967
|
}
|
|
3703
|
-
|
|
5968
|
+
.command-palette-icon.tone-muted {
|
|
5969
|
+
color: var(--c-muted);
|
|
5970
|
+
}
|
|
3704
5971
|
.command-palette-label {
|
|
3705
5972
|
flex: 1;
|
|
5973
|
+
min-width: 0;
|
|
5974
|
+
font-size: 12px;
|
|
3706
5975
|
white-space: nowrap;
|
|
3707
5976
|
overflow: hidden;
|
|
3708
5977
|
text-overflow: ellipsis;
|
|
@@ -3712,15 +5981,21 @@ html.is-node-resizing .ext-app-preview-catcher {
|
|
|
3712
5981
|
color: var(--c-accent);
|
|
3713
5982
|
font-weight: 600;
|
|
3714
5983
|
}
|
|
3715
|
-
|
|
3716
5984
|
.command-palette-desc {
|
|
3717
|
-
font-size: 11px;
|
|
3718
5985
|
color: var(--c-dim);
|
|
3719
|
-
|
|
3720
|
-
|
|
3721
|
-
|
|
3722
|
-
|
|
3723
|
-
|
|
5986
|
+
}
|
|
5987
|
+
|
|
5988
|
+
.command-palette-hint {
|
|
5989
|
+
display: flex;
|
|
5990
|
+
gap: 14px;
|
|
5991
|
+
padding: 8px 14px;
|
|
5992
|
+
border-top: 1px solid var(--c-line);
|
|
5993
|
+
background: color-mix(in srgb, var(--c-bg) 50%, transparent);
|
|
5994
|
+
font: 9.5px var(--mono);
|
|
5995
|
+
color: var(--c-dim);
|
|
5996
|
+
}
|
|
5997
|
+
.command-palette-hint-spacer {
|
|
5998
|
+
flex: 1;
|
|
3724
5999
|
}
|
|
3725
6000
|
|
|
3726
6001
|
/* ── Shortcut Overlay (Press ?) ────────────────────────────── */
|
|
@@ -3829,88 +6104,117 @@ html.is-node-resizing .ext-app-preview-catcher {
|
|
|
3829
6104
|
line-height: 1.4;
|
|
3830
6105
|
}
|
|
3831
6106
|
|
|
3832
|
-
/* ──
|
|
3833
|
-
.
|
|
6107
|
+
/* ── Empty board (rail-chrome-v2 phase 7, design item 11) ───── */
|
|
6108
|
+
.empty-state {
|
|
3834
6109
|
position: absolute;
|
|
3835
6110
|
top: 50%;
|
|
3836
6111
|
left: 50%;
|
|
3837
6112
|
transform: translate(-50%, -50%);
|
|
3838
6113
|
z-index: 5;
|
|
6114
|
+
width: 560px;
|
|
6115
|
+
max-width: calc(100% - 48px);
|
|
3839
6116
|
display: flex;
|
|
3840
6117
|
flex-direction: column;
|
|
3841
6118
|
align-items: center;
|
|
3842
|
-
gap:
|
|
3843
|
-
padding: 36px 44px;
|
|
3844
|
-
background: var(--c-panel-glass);
|
|
3845
|
-
backdrop-filter: blur(16px);
|
|
3846
|
-
border: 1px solid var(--c-line);
|
|
3847
|
-
border-radius: 16px;
|
|
3848
|
-
box-shadow: 0 8px 32px var(--c-shadow), 0 0 0 1px var(--c-line-30);
|
|
3849
|
-
animation: welcome-fade-in 0.5s ease-out;
|
|
3850
|
-
pointer-events: auto;
|
|
3851
|
-
max-width: 380px;
|
|
6119
|
+
gap: 16px;
|
|
3852
6120
|
text-align: center;
|
|
6121
|
+
animation: empty-state-in 0.4s ease-out;
|
|
3853
6122
|
}
|
|
3854
|
-
|
|
3855
|
-
|
|
3856
|
-
|
|
3857
|
-
|
|
6123
|
+
@keyframes empty-state-in {
|
|
6124
|
+
from {
|
|
6125
|
+
opacity: 0;
|
|
6126
|
+
transform: translate(-50%, -46%);
|
|
6127
|
+
}
|
|
6128
|
+
to {
|
|
6129
|
+
opacity: 1;
|
|
6130
|
+
transform: translate(-50%, -50%);
|
|
6131
|
+
}
|
|
3858
6132
|
}
|
|
3859
|
-
|
|
3860
|
-
|
|
3861
|
-
|
|
3862
|
-
color: var(--c-accent);
|
|
3863
|
-
opacity: 0.7;
|
|
3864
|
-
line-height: 1;
|
|
6133
|
+
.empty-state-mark {
|
|
6134
|
+
stroke: var(--c-line);
|
|
6135
|
+
stroke-width: 2.5;
|
|
3865
6136
|
}
|
|
3866
|
-
|
|
3867
|
-
|
|
3868
|
-
|
|
3869
|
-
|
|
6137
|
+
.empty-state-mark rect + rect {
|
|
6138
|
+
stroke: color-mix(in srgb, var(--c-line) 70%, var(--c-accent));
|
|
6139
|
+
}
|
|
6140
|
+
.empty-state-title {
|
|
6141
|
+
font-size: 20px;
|
|
6142
|
+
font-weight: 700;
|
|
6143
|
+
letter-spacing: -0.01em;
|
|
3870
6144
|
color: var(--c-text);
|
|
3871
|
-
letter-spacing: -0.3px;
|
|
3872
6145
|
}
|
|
3873
|
-
|
|
3874
|
-
|
|
3875
|
-
font-size:
|
|
3876
|
-
color: var(--c-
|
|
3877
|
-
margin-bottom: 8px;
|
|
3878
|
-
line-height: 1.55;
|
|
6146
|
+
.empty-state-sub {
|
|
6147
|
+
margin-top: 6px;
|
|
6148
|
+
font-size: 12.5px;
|
|
6149
|
+
color: var(--c-muted);
|
|
3879
6150
|
}
|
|
3880
|
-
|
|
3881
|
-
|
|
3882
|
-
|
|
3883
|
-
|
|
3884
|
-
gap: 6px;
|
|
6151
|
+
.empty-state-grid {
|
|
6152
|
+
display: grid;
|
|
6153
|
+
grid-template-columns: 1fr 1fr;
|
|
6154
|
+
gap: 10px;
|
|
3885
6155
|
width: 100%;
|
|
3886
6156
|
}
|
|
3887
|
-
|
|
3888
|
-
.welcome-hint {
|
|
6157
|
+
.empty-state-action {
|
|
3889
6158
|
display: flex;
|
|
3890
6159
|
align-items: center;
|
|
3891
|
-
gap:
|
|
3892
|
-
padding:
|
|
3893
|
-
background: var(--c-
|
|
3894
|
-
border: 1px solid
|
|
3895
|
-
border-radius:
|
|
6160
|
+
gap: 10px;
|
|
6161
|
+
padding: 13px 14px;
|
|
6162
|
+
background: var(--c-panel);
|
|
6163
|
+
border: 1px solid var(--c-line);
|
|
6164
|
+
border-radius: 10px;
|
|
6165
|
+
color: var(--c-text-soft);
|
|
6166
|
+
cursor: pointer;
|
|
3896
6167
|
text-align: left;
|
|
3897
|
-
cursor: default;
|
|
3898
6168
|
font: inherit;
|
|
3899
|
-
color: inherit;
|
|
3900
6169
|
}
|
|
3901
|
-
|
|
3902
|
-
|
|
6170
|
+
.empty-state-action:hover {
|
|
6171
|
+
border-color: color-mix(in srgb, var(--c-accent) 40%, transparent);
|
|
6172
|
+
}
|
|
6173
|
+
.empty-state-action.is-agent:hover {
|
|
6174
|
+
border-color: color-mix(in srgb, var(--c-purple) 45%, transparent);
|
|
6175
|
+
}
|
|
6176
|
+
.empty-state-action .tone-accent {
|
|
6177
|
+
color: var(--c-accent);
|
|
6178
|
+
}
|
|
6179
|
+
.empty-state-action .tone-warn {
|
|
6180
|
+
color: var(--c-warn);
|
|
6181
|
+
}
|
|
6182
|
+
.empty-state-action .tone-ok {
|
|
6183
|
+
color: var(--c-ok);
|
|
6184
|
+
}
|
|
6185
|
+
.empty-state-action .tone-purple {
|
|
6186
|
+
color: var(--c-purple);
|
|
6187
|
+
}
|
|
6188
|
+
.empty-state-action-label {
|
|
6189
|
+
flex: 1;
|
|
6190
|
+
font-size: 12px;
|
|
6191
|
+
font-weight: 600;
|
|
6192
|
+
}
|
|
6193
|
+
.empty-state-action kbd {
|
|
6194
|
+
padding: 1px 6px;
|
|
6195
|
+
border: 1px solid var(--c-line);
|
|
6196
|
+
border-radius: 4px;
|
|
6197
|
+
font: 9.5px var(--mono);
|
|
6198
|
+
color: var(--c-dim);
|
|
6199
|
+
}
|
|
6200
|
+
.empty-state-action-hint {
|
|
6201
|
+
font-size: 10px;
|
|
6202
|
+
color: var(--c-dim);
|
|
6203
|
+
}
|
|
6204
|
+
.empty-state-hint {
|
|
6205
|
+
background: none;
|
|
6206
|
+
border: none;
|
|
6207
|
+
padding: 0;
|
|
6208
|
+
font: 10.5px var(--mono);
|
|
6209
|
+
color: var(--c-dim);
|
|
3903
6210
|
cursor: pointer;
|
|
3904
6211
|
}
|
|
3905
|
-
|
|
3906
|
-
|
|
3907
|
-
background: var(--c-surface-hover);
|
|
3908
|
-
border-color: var(--c-line);
|
|
6212
|
+
.empty-state-hint:hover {
|
|
6213
|
+
color: var(--c-muted);
|
|
3909
6214
|
}
|
|
3910
6215
|
|
|
3911
6216
|
@media (max-width: 980px) {
|
|
3912
6217
|
.attention-toast {
|
|
3913
|
-
top: 70px;
|
|
3914
6218
|
left: 12px;
|
|
3915
6219
|
right: 12px;
|
|
3916
6220
|
width: auto;
|
|
@@ -3924,16 +6228,11 @@ button.welcome-hint:hover {
|
|
|
3924
6228
|
width: auto;
|
|
3925
6229
|
}
|
|
3926
6230
|
|
|
3927
|
-
.welcome-card {
|
|
3928
|
-
width: calc(100vw - 24px);
|
|
3929
|
-
max-width: 420px;
|
|
3930
|
-
padding: 28px 24px;
|
|
3931
|
-
}
|
|
3932
6231
|
}
|
|
3933
6232
|
|
|
3934
6233
|
@media (prefers-reduced-motion: reduce) {
|
|
3935
6234
|
.attention-toast,
|
|
3936
|
-
.
|
|
6235
|
+
.empty-state,
|
|
3937
6236
|
.canvas-node.attention-pulse {
|
|
3938
6237
|
animation: none !important;
|
|
3939
6238
|
}
|
|
@@ -3945,32 +6244,8 @@ button.welcome-hint:hover {
|
|
|
3945
6244
|
}
|
|
3946
6245
|
}
|
|
3947
6246
|
|
|
3948
|
-
.welcome-hint kbd {
|
|
3949
|
-
display: inline-block;
|
|
3950
|
-
background: var(--c-input-bg);
|
|
3951
|
-
border: 1px solid var(--c-line);
|
|
3952
|
-
border-radius: 4px;
|
|
3953
|
-
padding: 2px 7px;
|
|
3954
|
-
font-family: var(--mono);
|
|
3955
|
-
font-size: 10px;
|
|
3956
|
-
color: var(--c-accent);
|
|
3957
|
-
white-space: nowrap;
|
|
3958
|
-
min-width: 70px;
|
|
3959
|
-
text-align: center;
|
|
3960
|
-
flex-shrink: 0;
|
|
3961
|
-
}
|
|
3962
6247
|
|
|
3963
|
-
.welcome-hint span {
|
|
3964
|
-
font-size: 12px;
|
|
3965
|
-
color: var(--c-muted);
|
|
3966
|
-
}
|
|
3967
6248
|
|
|
3968
|
-
.welcome-footer {
|
|
3969
|
-
font-size: 11px;
|
|
3970
|
-
color: var(--c-dim);
|
|
3971
|
-
margin-top: 4px;
|
|
3972
|
-
line-height: 1.4;
|
|
3973
|
-
}
|
|
3974
6249
|
|
|
3975
6250
|
/* ── Image Node ─────────────────────────────────────────────── */
|
|
3976
6251
|
.image-node {
|