anentrypoint-design 0.0.206 → 0.0.207
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/chat.css +139 -2
- package/dist/247420.css +139 -2
- package/dist/247420.js +14 -12
- package/package.json +1 -1
- package/src/components/agent-chat.js +5 -1
- package/src/components/chat.js +26 -3
- package/src/components/files-modals.js +45 -3
- package/src/components/files.js +2 -2
- package/src/components/sessions.js +131 -50
- package/src/components/shell.js +14 -6
package/chat.css
CHANGED
|
@@ -464,7 +464,10 @@ button.chat-composer-context:focus-visible { outline: 2px solid var(--accent); o
|
|
|
464
464
|
/* --- C5: active dashboard card (current conversation). --- */
|
|
465
465
|
.ds-dash-card.is-active { box-shadow: inset 2px 0 0 var(--accent); }
|
|
466
466
|
.ds-dash-card.is-selected { background: var(--accent-tint); }
|
|
467
|
-
|
|
467
|
+
/* Stale/idle card: a positive amber inset bar (mirrors is-active) so a stuck
|
|
468
|
+
agent is flagged in a dense grid, not merely faded near-invisibly. The word
|
|
469
|
+
'idle' co-carries state, so this stays colour-blind safe. */
|
|
470
|
+
.ds-dash-card.is-stale { box-shadow: inset 2px 0 0 var(--amber, #d9a93a); }
|
|
468
471
|
|
|
469
472
|
/* --- H3: dashboard live disc pulses; stale/error do not (handled by H1). --- */
|
|
470
473
|
|
|
@@ -550,7 +553,7 @@ button.chat-composer-context:focus-visible { outline: 2px solid var(--accent); o
|
|
|
550
553
|
/* Enter-to-send hint: visible while the composer is focused or carries a
|
|
551
554
|
draft; hidden under 420px to save rows. */
|
|
552
555
|
.chat-composer-hint {
|
|
553
|
-
display: none; padding: 2px var(--space-
|
|
556
|
+
display: none; width: 100%; order: 5; padding: 2px var(--space-1) 0;
|
|
554
557
|
font-size: var(--fs-micro); color: var(--fg-3);
|
|
555
558
|
}
|
|
556
559
|
.chat-composer:focus-within .chat-composer-hint,
|
|
@@ -632,3 +635,137 @@ button.chat-composer-context:focus-visible { outline: 2px solid var(--accent); o
|
|
|
632
635
|
|
|
633
636
|
/* One connection vocabulary: offline (is-lost kept as legacy alias). */
|
|
634
637
|
.ds-dash-stream.is-offline { color: var(--flame); }
|
|
638
|
+
|
|
639
|
+
/* ============================================================
|
|
640
|
+
10th run - Claude-Code-web design-language parity
|
|
641
|
+
============================================================ */
|
|
642
|
+
|
|
643
|
+
/* Flat full-width chat turns (claude.ai/code), replacing the messenger
|
|
644
|
+
avatar-disc + colored-bubble layout. AgentChat passes flat:true; the demo
|
|
645
|
+
Chat keeps the bubble layout. Turns are full-width to --measure; the user vs
|
|
646
|
+
assistant distinction is a role label + a faint assistant background. */
|
|
647
|
+
.chat-msg-flat { display: block; padding: var(--space-3) var(--space-4); margin: 0; background: none; border-radius: var(--r-2); }
|
|
648
|
+
.chat-msg-flat.them { background: color-mix(in oklab, var(--fg) 3%, transparent); }
|
|
649
|
+
.chat-msg-flat.you { background: none; }
|
|
650
|
+
.chat-msg-flat .chat-stack { max-width: var(--measure); width: 100%; margin: 0; align-items: stretch; }
|
|
651
|
+
.chat-msg-flat.you .chat-stack { align-items: stretch; }
|
|
652
|
+
.chat-role { font-size: var(--fs-tiny); font-weight: 700; text-transform: uppercase; letter-spacing: .05em; color: var(--fg-3); margin-bottom: var(--space-1); }
|
|
653
|
+
.chat-msg-flat.you .chat-role { color: var(--accent); }
|
|
654
|
+
.chat-msg-flat .chat-bubble { background: none; border: none; border-radius: 0; padding: 0; max-width: 100%; box-shadow: none; transform: none; }
|
|
655
|
+
.chat-msg-flat.you .chat-bubble { background: none; color: inherit; }
|
|
656
|
+
.chat-msg-flat:hover { background: color-mix(in oklab, var(--fg) 3%, transparent); }
|
|
657
|
+
.chat-msg-flat.you:hover { background: color-mix(in oklab, var(--fg) 2%, transparent); }
|
|
658
|
+
.chat-msg-flat:hover .chat-bubble { transform: none; box-shadow: none; background: none; }
|
|
659
|
+
.chat-msg-flat .chat-avatar { display: none; }
|
|
660
|
+
|
|
661
|
+
/* Tool-call card: a bordered, status-toned, scannable card (claude.ai/code),
|
|
662
|
+
not the raw mascot-tinted details dump. The node keeps the .chat-bubble
|
|
663
|
+
class, so these rules de-frame it and restyle. Placed after the flat-bubble
|
|
664
|
+
reset so they win on equal specificity. */
|
|
665
|
+
.chat-msg .chat-tool {
|
|
666
|
+
display: block; max-width: 100%; padding: 0; margin: var(--space-1) 0;
|
|
667
|
+
background: var(--bg); color: var(--fg);
|
|
668
|
+
border: var(--bw-hair) solid var(--rule); border-radius: var(--r-2);
|
|
669
|
+
box-shadow: none; overflow: hidden;
|
|
670
|
+
}
|
|
671
|
+
.chat-msg .chat-tool[open] { background: var(--bg); }
|
|
672
|
+
.chat-msg .chat-tool .chat-tool-head {
|
|
673
|
+
display: flex; align-items: center; gap: var(--space-2);
|
|
674
|
+
padding: var(--space-2) var(--space-3); cursor: pointer;
|
|
675
|
+
font-size: var(--fs-sm); list-style: none;
|
|
676
|
+
}
|
|
677
|
+
.chat-msg .chat-tool .chat-tool-head::-webkit-details-marker { display: none; }
|
|
678
|
+
.chat-msg .chat-tool .chat-tool-head:hover { background: var(--bg-2); }
|
|
679
|
+
.chat-tool-icon { display: inline-flex; color: var(--fg-3); }
|
|
680
|
+
.chat-tool-name { font-family: var(--ff-mono); font-weight: 600; color: var(--fg); }
|
|
681
|
+
.chat-tool-label { color: var(--fg-3); font-size: var(--fs-tiny); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; min-width: 0; }
|
|
682
|
+
.chat-tool-status {
|
|
683
|
+
margin-left: auto; flex: 0 0 auto;
|
|
684
|
+
font-size: var(--fs-micro); font-weight: 700; text-transform: uppercase; letter-spacing: .04em;
|
|
685
|
+
color: var(--fg-3);
|
|
686
|
+
padding: 2px var(--space-2); border-radius: var(--r-pill);
|
|
687
|
+
background: color-mix(in oklab, var(--fg) 6%, transparent);
|
|
688
|
+
}
|
|
689
|
+
.chat-msg .chat-tool.tool-running .chat-tool-status { color: var(--accent); background: color-mix(in oklab, var(--accent) 12%, transparent); }
|
|
690
|
+
.chat-msg .chat-tool.tool-error .chat-tool-status { color: var(--flame); background: color-mix(in oklab, var(--flame) 12%, transparent); }
|
|
691
|
+
.chat-tool-body { border-top: var(--bw-hair) solid var(--rule); padding: var(--space-2) var(--space-3); display: flex; flex-direction: column; gap: var(--space-2); }
|
|
692
|
+
.chat-tool-section { display: flex; flex-direction: column; gap: var(--space-1); }
|
|
693
|
+
.chat-tool-section-label { font-size: var(--fs-micro); font-weight: 700; text-transform: uppercase; letter-spacing: .04em; color: var(--fg-3); }
|
|
694
|
+
.chat-tool-pre { margin: 0; padding: var(--space-2); background: var(--bg-2); border-radius: var(--r-1); font-family: var(--ff-mono); font-size: var(--fs-tiny); line-height: 1.45; overflow-x: auto; max-height: 320px; overflow-y: auto; }
|
|
695
|
+
.chat-tool-pre.is-error { color: var(--flame); }
|
|
696
|
+
.chat-tool-pre.chat-tool-empty { color: var(--fg-3); }
|
|
697
|
+
|
|
698
|
+
/* Fenced-code language tab on every rendered-markdown block (not just the
|
|
699
|
+
structured CodeNode). injectCodeCopy reads the language- class. */
|
|
700
|
+
.chat-code-block { position: relative; }
|
|
701
|
+
.chat-code-lang {
|
|
702
|
+
position: absolute; top: 0; left: 0; z-index: 2;
|
|
703
|
+
padding: 2px var(--space-2); border-bottom-right-radius: var(--r-1);
|
|
704
|
+
font-family: var(--ff-mono); font-size: var(--fs-micro); text-transform: uppercase; letter-spacing: .04em;
|
|
705
|
+
color: var(--fg-3); background: color-mix(in oklab, var(--fg) 6%, transparent);
|
|
706
|
+
pointer-events: none;
|
|
707
|
+
}
|
|
708
|
+
.chat-code-block pre { padding-top: calc(var(--space-3) + 4px); }
|
|
709
|
+
|
|
710
|
+
/* Motion + microinteraction polish (all reduced-motion guarded). */
|
|
711
|
+
.ds-session-row { transition: background var(--dur-snap) var(--ease), box-shadow var(--dur-snap) var(--ease); }
|
|
712
|
+
@media (prefers-reduced-motion: no-preference) {
|
|
713
|
+
.agentchat-thread { scroll-behavior: smooth; }
|
|
714
|
+
.ds-alert { animation: ds-alert-in var(--dur-base) var(--ease); }
|
|
715
|
+
}
|
|
716
|
+
@keyframes ds-alert-in { from { opacity: 0; transform: translateY(-4px); } to { opacity: 1; transform: none; } }
|
|
717
|
+
.chat-code-copy { transition: opacity var(--dur-snap, .12s) var(--ease, ease), color var(--dur-snap) var(--ease), border-color var(--dur-snap) var(--ease), background var(--dur-snap) var(--ease); }
|
|
718
|
+
.chat-msg-action { transition: background var(--dur-snap) var(--ease), color var(--dur-snap) var(--ease); }
|
|
719
|
+
.agentchat-install-copy { transition: background var(--dur-snap) var(--ease), color var(--dur-snap) var(--ease); }
|
|
720
|
+
@media (prefers-reduced-motion: no-preference) {
|
|
721
|
+
.btn.is-armed, .btn-primary.is-armed { animation: ds-arm-pulse var(--dur-slow) var(--ease); }
|
|
722
|
+
}
|
|
723
|
+
@keyframes ds-arm-pulse { 0% { box-shadow: 0 0 0 0 color-mix(in oklab, var(--warn) 55%, transparent); } 100% { box-shadow: 0 0 0 6px color-mix(in oklab, var(--warn) 0%, transparent); } }
|
|
724
|
+
.ds-dash-card.is-new { box-shadow: inset 2px 0 0 var(--accent), 0 0 0 1px color-mix(in oklab, var(--accent) 40%, transparent); }
|
|
725
|
+
@media (prefers-reduced-motion: no-preference) {
|
|
726
|
+
.ds-dash-card.is-new { animation: ds-card-in var(--dur-slow) var(--ease); }
|
|
727
|
+
}
|
|
728
|
+
@keyframes ds-card-in { from { opacity: 0; transform: translateY(6px); } to { opacity: 1; transform: none; } }
|
|
729
|
+
|
|
730
|
+
/* Live command-center: status-bucket groups + header breakdown + heartbeat. */
|
|
731
|
+
.ds-dash-group { display: flex; flex-direction: column; gap: var(--space-2); }
|
|
732
|
+
.ds-dash-group-label { font-size: var(--fs-micro); font-weight: 700; text-transform: uppercase; letter-spacing: .05em; color: var(--fg-3); padding: 0 var(--space-1); }
|
|
733
|
+
.ds-dash-breakdown { display: flex; align-items: center; gap: var(--space-1); font-size: var(--fs-sm); color: var(--fg-2); }
|
|
734
|
+
.ds-dash-breakdown .seg.is-running { color: var(--green); font-weight: 600; }
|
|
735
|
+
.ds-dash-breakdown .seg.is-error { color: var(--flame); font-weight: 600; }
|
|
736
|
+
.ds-dash-breakdown .seg.is-idle { color: var(--amber, #d9a93a); }
|
|
737
|
+
.ds-dash-stream-disc { display: inline-flex; align-items: center; gap: var(--space-1); }
|
|
738
|
+
.ds-dash-selectall { display: inline-flex; align-items: center; gap: var(--space-1); font-size: var(--fs-tiny); color: var(--fg-2); cursor: pointer; background: none; border: none; padding: var(--space-1); }
|
|
739
|
+
.ds-dash-selectall:focus-visible { outline: 2px solid var(--accent); outline-offset: 1px; }
|
|
740
|
+
.ds-dash-clear { background: none; border: none; color: var(--fg-3); cursor: pointer; font-size: var(--fs-tiny); text-decoration: underline dotted; padding: var(--space-1); }
|
|
741
|
+
|
|
742
|
+
/* Conversation-rail loading skeleton (cold ccsniff walk). */
|
|
743
|
+
.ds-session-row-skeleton { display: flex; flex-direction: column; gap: 6px; padding: var(--space-2) var(--space-3); }
|
|
744
|
+
.ds-session-row-skeleton .ds-skel { background: var(--bg-3); border-radius: var(--r-1); }
|
|
745
|
+
.ds-session-row-skeleton .ds-skel-title { height: 12px; width: 70%; }
|
|
746
|
+
.ds-session-row-skeleton .ds-skel-meta { height: 9px; width: 45%; }
|
|
747
|
+
@media (prefers-reduced-motion: no-preference) {
|
|
748
|
+
.ds-session-row-skeleton .ds-skel { animation: ds-skel-shimmer 1.3s ease-in-out infinite; background: linear-gradient(90deg, var(--bg-3) 0%, var(--bg-2) 50%, var(--bg-3) 100%); background-size: 200% 100%; }
|
|
749
|
+
}
|
|
750
|
+
@keyframes ds-skel-shimmer { 0% { background-position: 200% 0; } 100% { background-position: -200% 0; } }
|
|
751
|
+
|
|
752
|
+
/* File code preview: paint Prism tokens (the bundle scoped them to the chat
|
|
753
|
+
block only) + an optional non-selectable line-number gutter. */
|
|
754
|
+
.ds-preview-code code { color: var(--fg); }
|
|
755
|
+
.ds-preview-code .token.comment, .ds-preview-code .token.prolog, .ds-preview-code .token.doctype, .ds-preview-code .token.cdata { color: var(--fg-3); }
|
|
756
|
+
.ds-preview-code .token.punctuation { color: var(--fg-2); }
|
|
757
|
+
.ds-preview-code .token.property, .ds-preview-code .token.tag, .ds-preview-code .token.boolean, .ds-preview-code .token.number, .ds-preview-code .token.constant, .ds-preview-code .token.symbol { color: var(--purple-2, #7F18A4); }
|
|
758
|
+
.ds-preview-code .token.selector, .ds-preview-code .token.attr-name, .ds-preview-code .token.string, .ds-preview-code .token.char, .ds-preview-code .token.builtin { color: var(--green-2, #3A9A34); }
|
|
759
|
+
.ds-preview-code .token.atrule, .ds-preview-code .token.attr-value, .ds-preview-code .token.keyword { color: var(--sky, #3A6EFF); }
|
|
760
|
+
.ds-preview-code .token.function, .ds-preview-code .token.class-name { color: var(--flame); }
|
|
761
|
+
.ds-preview-code.has-gutter { display: grid; grid-template-columns: auto minmax(0, 1fr); gap: 0 var(--space-2); }
|
|
762
|
+
.ds-preview-code.has-gutter code { display: block; min-width: 0; overflow-x: auto; }
|
|
763
|
+
.ds-preview-gutter { user-select: none; text-align: right; padding: 0 var(--space-2) 0 0; color: var(--fg-3); border-right: var(--bw-hair) solid var(--rule); font-family: var(--ff-mono); white-space: pre; line-height: inherit; }
|
|
764
|
+
|
|
765
|
+
/* Image preview: fit/actual control + alpha checkerboard. */
|
|
766
|
+
.ds-preview-media-controls { display: flex; gap: var(--space-2); padding: var(--space-2); justify-content: center; }
|
|
767
|
+
.ds-preview-media-alpha {
|
|
768
|
+
background-image: linear-gradient(45deg, var(--bg-3) 25%, transparent 25%), linear-gradient(-45deg, var(--bg-3) 25%, transparent 25%), linear-gradient(45deg, transparent 75%, var(--bg-3) 75%), linear-gradient(-45deg, transparent 75%, var(--bg-3) 75%);
|
|
769
|
+
background-size: 16px 16px; background-position: 0 0, 0 8px, 8px -8px, -8px 0;
|
|
770
|
+
}
|
|
771
|
+
.ds-preview-media.is-actual { max-width: none; max-height: none; }
|
package/dist/247420.css
CHANGED
|
@@ -5422,7 +5422,10 @@
|
|
|
5422
5422
|
/* --- C5: active dashboard card (current conversation). --- */
|
|
5423
5423
|
.ds-247420 .ds-dash-card.is-active { box-shadow: inset 2px 0 0 var(--accent); }
|
|
5424
5424
|
.ds-247420 .ds-dash-card.is-selected { background: var(--accent-tint); }
|
|
5425
|
-
|
|
5425
|
+
/* Stale/idle card: a positive amber inset bar (mirrors is-active) so a stuck
|
|
5426
|
+
agent is flagged in a dense grid, not merely faded near-invisibly. The word
|
|
5427
|
+
'idle' co-carries state, so this stays colour-blind safe. */
|
|
5428
|
+
.ds-247420 .ds-dash-card.is-stale { box-shadow: inset 2px 0 0 var(--amber, #d9a93a); }
|
|
5426
5429
|
|
|
5427
5430
|
/* --- H3: dashboard live disc pulses; stale/error do not (handled by H1). --- */
|
|
5428
5431
|
|
|
@@ -5508,7 +5511,7 @@
|
|
|
5508
5511
|
/* Enter-to-send hint: visible while the composer is focused or carries a
|
|
5509
5512
|
draft; hidden under 420px to save rows. */
|
|
5510
5513
|
.ds-247420 .chat-composer-hint {
|
|
5511
|
-
display: none; padding: 2px var(--space-
|
|
5514
|
+
display: none; width: 100%; order: 5; padding: 2px var(--space-1) 0;
|
|
5512
5515
|
font-size: var(--fs-micro); color: var(--fg-3);
|
|
5513
5516
|
}
|
|
5514
5517
|
.ds-247420 .chat-composer:focus-within .chat-composer-hint,
|
|
@@ -5591,6 +5594,140 @@
|
|
|
5591
5594
|
/* One connection vocabulary: offline (is-lost kept as legacy alias). */
|
|
5592
5595
|
.ds-247420 .ds-dash-stream.is-offline { color: var(--flame); }
|
|
5593
5596
|
|
|
5597
|
+
/* ============================================================
|
|
5598
|
+
10th run - Claude-Code-web design-language parity
|
|
5599
|
+
============================================================ */
|
|
5600
|
+
|
|
5601
|
+
/* Flat full-width chat turns (claude.ai/code), replacing the messenger
|
|
5602
|
+
avatar-disc + colored-bubble layout. AgentChat passes flat:true; the demo
|
|
5603
|
+
Chat keeps the bubble layout. Turns are full-width to --measure; the user vs
|
|
5604
|
+
assistant distinction is a role label + a faint assistant background. */
|
|
5605
|
+
.ds-247420 .chat-msg-flat { display: block; padding: var(--space-3) var(--space-4); margin: 0; background: none; border-radius: var(--r-2); }
|
|
5606
|
+
.ds-247420 .chat-msg-flat.them { background: color-mix(in oklab, var(--fg) 3%, transparent); }
|
|
5607
|
+
.ds-247420 .chat-msg-flat.you { background: none; }
|
|
5608
|
+
.ds-247420 .chat-msg-flat .chat-stack { max-width: var(--measure); width: 100%; margin: 0; align-items: stretch; }
|
|
5609
|
+
.ds-247420 .chat-msg-flat.you .chat-stack { align-items: stretch; }
|
|
5610
|
+
.ds-247420 .chat-role { font-size: var(--fs-tiny); font-weight: 700; text-transform: uppercase; letter-spacing: .05em; color: var(--fg-3); margin-bottom: var(--space-1); }
|
|
5611
|
+
.ds-247420 .chat-msg-flat.you .chat-role { color: var(--accent); }
|
|
5612
|
+
.ds-247420 .chat-msg-flat .chat-bubble { background: none; border: none; border-radius: 0; padding: 0; max-width: 100%; box-shadow: none; transform: none; }
|
|
5613
|
+
.ds-247420 .chat-msg-flat.you .chat-bubble { background: none; color: inherit; }
|
|
5614
|
+
.ds-247420 .chat-msg-flat:hover { background: color-mix(in oklab, var(--fg) 3%, transparent); }
|
|
5615
|
+
.ds-247420 .chat-msg-flat.you:hover { background: color-mix(in oklab, var(--fg) 2%, transparent); }
|
|
5616
|
+
.ds-247420 .chat-msg-flat:hover .chat-bubble { transform: none; box-shadow: none; background: none; }
|
|
5617
|
+
.ds-247420 .chat-msg-flat .chat-avatar { display: none; }
|
|
5618
|
+
|
|
5619
|
+
/* Tool-call card: a bordered, status-toned, scannable card (claude.ai/code),
|
|
5620
|
+
not the raw mascot-tinted details dump. The node keeps the .chat-bubble
|
|
5621
|
+
class, so these rules de-frame it and restyle. Placed after the flat-bubble
|
|
5622
|
+
reset so they win on equal specificity. */
|
|
5623
|
+
.ds-247420 .chat-msg .chat-tool {
|
|
5624
|
+
display: block; max-width: 100%; padding: 0; margin: var(--space-1) 0;
|
|
5625
|
+
background: var(--bg); color: var(--fg);
|
|
5626
|
+
border: var(--bw-hair) solid var(--rule); border-radius: var(--r-2);
|
|
5627
|
+
box-shadow: none; overflow: hidden;
|
|
5628
|
+
}
|
|
5629
|
+
.ds-247420 .chat-msg .chat-tool[open] { background: var(--bg); }
|
|
5630
|
+
.ds-247420 .chat-msg .chat-tool .chat-tool-head {
|
|
5631
|
+
display: flex; align-items: center; gap: var(--space-2);
|
|
5632
|
+
padding: var(--space-2) var(--space-3); cursor: pointer;
|
|
5633
|
+
font-size: var(--fs-sm); list-style: none;
|
|
5634
|
+
}
|
|
5635
|
+
.ds-247420 .chat-msg .chat-tool .chat-tool-head::-webkit-details-marker { display: none; }
|
|
5636
|
+
.ds-247420 .chat-msg .chat-tool .chat-tool-head:hover { background: var(--bg-2); }
|
|
5637
|
+
.ds-247420 .chat-tool-icon { display: inline-flex; color: var(--fg-3); }
|
|
5638
|
+
.ds-247420 .chat-tool-name { font-family: var(--ff-mono); font-weight: 600; color: var(--fg); }
|
|
5639
|
+
.ds-247420 .chat-tool-label { color: var(--fg-3); font-size: var(--fs-tiny); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; min-width: 0; }
|
|
5640
|
+
.ds-247420 .chat-tool-status {
|
|
5641
|
+
margin-left: auto; flex: 0 0 auto;
|
|
5642
|
+
font-size: var(--fs-micro); font-weight: 700; text-transform: uppercase; letter-spacing: .04em;
|
|
5643
|
+
color: var(--fg-3);
|
|
5644
|
+
padding: 2px var(--space-2); border-radius: var(--r-pill);
|
|
5645
|
+
background: color-mix(in oklab, var(--fg) 6%, transparent);
|
|
5646
|
+
}
|
|
5647
|
+
.ds-247420 .chat-msg .chat-tool.tool-running .chat-tool-status { color: var(--accent); background: color-mix(in oklab, var(--accent) 12%, transparent); }
|
|
5648
|
+
.ds-247420 .chat-msg .chat-tool.tool-error .chat-tool-status { color: var(--flame); background: color-mix(in oklab, var(--flame) 12%, transparent); }
|
|
5649
|
+
.ds-247420 .chat-tool-body { border-top: var(--bw-hair) solid var(--rule); padding: var(--space-2) var(--space-3); display: flex; flex-direction: column; gap: var(--space-2); }
|
|
5650
|
+
.ds-247420 .chat-tool-section { display: flex; flex-direction: column; gap: var(--space-1); }
|
|
5651
|
+
.ds-247420 .chat-tool-section-label { font-size: var(--fs-micro); font-weight: 700; text-transform: uppercase; letter-spacing: .04em; color: var(--fg-3); }
|
|
5652
|
+
.ds-247420 .chat-tool-pre { margin: 0; padding: var(--space-2); background: var(--bg-2); border-radius: var(--r-1); font-family: var(--ff-mono); font-size: var(--fs-tiny); line-height: 1.45; overflow-x: auto; max-height: 320px; overflow-y: auto; }
|
|
5653
|
+
.ds-247420 .chat-tool-pre.is-error { color: var(--flame); }
|
|
5654
|
+
.ds-247420 .chat-tool-pre.chat-tool-empty { color: var(--fg-3); }
|
|
5655
|
+
|
|
5656
|
+
/* Fenced-code language tab on every rendered-markdown block (not just the
|
|
5657
|
+
structured CodeNode). injectCodeCopy reads the language- class. */
|
|
5658
|
+
.ds-247420 .chat-code-block { position: relative; }
|
|
5659
|
+
.ds-247420 .chat-code-lang {
|
|
5660
|
+
position: absolute; top: 0; left: 0; z-index: 2;
|
|
5661
|
+
padding: 2px var(--space-2); border-bottom-right-radius: var(--r-1);
|
|
5662
|
+
font-family: var(--ff-mono); font-size: var(--fs-micro); text-transform: uppercase; letter-spacing: .04em;
|
|
5663
|
+
color: var(--fg-3); background: color-mix(in oklab, var(--fg) 6%, transparent);
|
|
5664
|
+
pointer-events: none;
|
|
5665
|
+
}
|
|
5666
|
+
.ds-247420 .chat-code-block pre { padding-top: calc(var(--space-3) + 4px); }
|
|
5667
|
+
|
|
5668
|
+
/* Motion + microinteraction polish (all reduced-motion guarded). */
|
|
5669
|
+
.ds-247420 .ds-session-row { transition: background var(--dur-snap) var(--ease), box-shadow var(--dur-snap) var(--ease); }
|
|
5670
|
+
@media (prefers-reduced-motion: no-preference) {
|
|
5671
|
+
.ds-247420 .agentchat-thread { scroll-behavior: smooth; }
|
|
5672
|
+
.ds-247420 .ds-alert { animation: ds-alert-in var(--dur-base) var(--ease); }
|
|
5673
|
+
}
|
|
5674
|
+
@keyframes ds-alert-in { from { opacity: 0; transform: translateY(-4px); } to { opacity: 1; transform: none; } }
|
|
5675
|
+
.ds-247420 .chat-code-copy { transition: opacity var(--dur-snap, .12s) var(--ease, ease), color var(--dur-snap) var(--ease), border-color var(--dur-snap) var(--ease), background var(--dur-snap) var(--ease); }
|
|
5676
|
+
.ds-247420 .chat-msg-action { transition: background var(--dur-snap) var(--ease), color var(--dur-snap) var(--ease); }
|
|
5677
|
+
.ds-247420 .agentchat-install-copy { transition: background var(--dur-snap) var(--ease), color var(--dur-snap) var(--ease); }
|
|
5678
|
+
@media (prefers-reduced-motion: no-preference) {
|
|
5679
|
+
.ds-247420 .btn.is-armed, .ds-247420 .btn-primary.is-armed { animation: ds-arm-pulse var(--dur-slow) var(--ease); }
|
|
5680
|
+
}
|
|
5681
|
+
@keyframes ds-arm-pulse { 0% { box-shadow: 0 0 0 0 color-mix(in oklab, var(--warn) 55%, transparent); } 100% { box-shadow: 0 0 0 6px color-mix(in oklab, var(--warn) 0%, transparent); } }
|
|
5682
|
+
.ds-247420 .ds-dash-card.is-new { box-shadow: inset 2px 0 0 var(--accent), 0 0 0 1px color-mix(in oklab, var(--accent) 40%, transparent); }
|
|
5683
|
+
@media (prefers-reduced-motion: no-preference) {
|
|
5684
|
+
.ds-247420 .ds-dash-card.is-new { animation: ds-card-in var(--dur-slow) var(--ease); }
|
|
5685
|
+
}
|
|
5686
|
+
@keyframes ds-card-in { from { opacity: 0; transform: translateY(6px); } to { opacity: 1; transform: none; } }
|
|
5687
|
+
|
|
5688
|
+
/* Live command-center: status-bucket groups + header breakdown + heartbeat. */
|
|
5689
|
+
.ds-247420 .ds-dash-group { display: flex; flex-direction: column; gap: var(--space-2); }
|
|
5690
|
+
.ds-247420 .ds-dash-group-label { font-size: var(--fs-micro); font-weight: 700; text-transform: uppercase; letter-spacing: .05em; color: var(--fg-3); padding: 0 var(--space-1); }
|
|
5691
|
+
.ds-247420 .ds-dash-breakdown { display: flex; align-items: center; gap: var(--space-1); font-size: var(--fs-sm); color: var(--fg-2); }
|
|
5692
|
+
.ds-247420 .ds-dash-breakdown .seg.is-running { color: var(--green); font-weight: 600; }
|
|
5693
|
+
.ds-247420 .ds-dash-breakdown .seg.is-error { color: var(--flame); font-weight: 600; }
|
|
5694
|
+
.ds-247420 .ds-dash-breakdown .seg.is-idle { color: var(--amber, #d9a93a); }
|
|
5695
|
+
.ds-247420 .ds-dash-stream-disc { display: inline-flex; align-items: center; gap: var(--space-1); }
|
|
5696
|
+
.ds-247420 .ds-dash-selectall { display: inline-flex; align-items: center; gap: var(--space-1); font-size: var(--fs-tiny); color: var(--fg-2); cursor: pointer; background: none; border: none; padding: var(--space-1); }
|
|
5697
|
+
.ds-247420 .ds-dash-selectall:focus-visible { outline: 2px solid var(--accent); outline-offset: 1px; }
|
|
5698
|
+
.ds-247420 .ds-dash-clear { background: none; border: none; color: var(--fg-3); cursor: pointer; font-size: var(--fs-tiny); text-decoration: underline dotted; padding: var(--space-1); }
|
|
5699
|
+
|
|
5700
|
+
/* Conversation-rail loading skeleton (cold ccsniff walk). */
|
|
5701
|
+
.ds-247420 .ds-session-row-skeleton { display: flex; flex-direction: column; gap: 6px; padding: var(--space-2) var(--space-3); }
|
|
5702
|
+
.ds-247420 .ds-session-row-skeleton .ds-skel { background: var(--bg-3); border-radius: var(--r-1); }
|
|
5703
|
+
.ds-247420 .ds-session-row-skeleton .ds-skel-title { height: 12px; width: 70%; }
|
|
5704
|
+
.ds-247420 .ds-session-row-skeleton .ds-skel-meta { height: 9px; width: 45%; }
|
|
5705
|
+
@media (prefers-reduced-motion: no-preference) {
|
|
5706
|
+
.ds-247420 .ds-session-row-skeleton .ds-skel { animation: ds-skel-shimmer 1.3s ease-in-out infinite; background: linear-gradient(90deg, var(--bg-3) 0%, var(--bg-2) 50%, var(--bg-3) 100%); background-size: 200% 100%; }
|
|
5707
|
+
}
|
|
5708
|
+
@keyframes ds-skel-shimmer { 0% { background-position: 200% 0; } 100% { background-position: -200% 0; } }
|
|
5709
|
+
|
|
5710
|
+
/* File code preview: paint Prism tokens (the bundle scoped them to the chat
|
|
5711
|
+
block only) + an optional non-selectable line-number gutter. */
|
|
5712
|
+
.ds-247420 .ds-preview-code code { color: var(--fg); }
|
|
5713
|
+
.ds-247420 .ds-preview-code .token.comment, .ds-247420 .ds-preview-code .token.prolog, .ds-247420 .ds-preview-code .token.doctype, .ds-247420 .ds-preview-code .token.cdata { color: var(--fg-3); }
|
|
5714
|
+
.ds-247420 .ds-preview-code .token.punctuation { color: var(--fg-2); }
|
|
5715
|
+
.ds-247420 .ds-preview-code .token.property, .ds-247420 .ds-preview-code .token.tag, .ds-247420 .ds-preview-code .token.boolean, .ds-247420 .ds-preview-code .token.number, .ds-247420 .ds-preview-code .token.constant, .ds-247420 .ds-preview-code .token.symbol { color: var(--purple-2, #7F18A4); }
|
|
5716
|
+
.ds-247420 .ds-preview-code .token.selector, .ds-247420 .ds-preview-code .token.attr-name, .ds-247420 .ds-preview-code .token.string, .ds-247420 .ds-preview-code .token.char, .ds-247420 .ds-preview-code .token.builtin { color: var(--green-2, #3A9A34); }
|
|
5717
|
+
.ds-247420 .ds-preview-code .token.atrule, .ds-247420 .ds-preview-code .token.attr-value, .ds-247420 .ds-preview-code .token.keyword { color: var(--sky, #3A6EFF); }
|
|
5718
|
+
.ds-247420 .ds-preview-code .token.function, .ds-247420 .ds-preview-code .token.class-name { color: var(--flame); }
|
|
5719
|
+
.ds-247420 .ds-preview-code.has-gutter { display: grid; grid-template-columns: auto minmax(0, 1fr); gap: 0 var(--space-2); }
|
|
5720
|
+
.ds-247420 .ds-preview-code.has-gutter code { display: block; min-width: 0; overflow-x: auto; }
|
|
5721
|
+
.ds-247420 .ds-preview-gutter { user-select: none; text-align: right; padding: 0 var(--space-2) 0 0; color: var(--fg-3); border-right: var(--bw-hair) solid var(--rule); font-family: var(--ff-mono); white-space: pre; line-height: inherit; }
|
|
5722
|
+
|
|
5723
|
+
/* Image preview: fit/actual control + alpha checkerboard. */
|
|
5724
|
+
.ds-247420 .ds-preview-media-controls { display: flex; gap: var(--space-2); padding: var(--space-2); justify-content: center; }
|
|
5725
|
+
.ds-247420 .ds-preview-media-alpha {
|
|
5726
|
+
background-image: linear-gradient(45deg, var(--bg-3) 25%, transparent 25%), linear-gradient(-45deg, var(--bg-3) 25%, transparent 25%), linear-gradient(45deg, transparent 75%, var(--bg-3) 75%), linear-gradient(-45deg, transparent 75%, var(--bg-3) 75%);
|
|
5727
|
+
background-size: 16px 16px; background-position: 0 0, 0 8px, 8px -8px, -8px 0;
|
|
5728
|
+
}
|
|
5729
|
+
.ds-247420 .ds-preview-media.is-actual { max-width: none; max-height: none; }
|
|
5730
|
+
|
|
5594
5731
|
/* editor-primitives.css */
|
|
5595
5732
|
/* editor-primitives.css — chrome for in-engine editors, inspectors, IDEs,
|
|
5596
5733
|
debug HUDs. All rules under .ds-247420 scope (build prefixes). Tokens
|