anentrypoint-design 0.0.209 → 0.0.211

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 CHANGED
@@ -125,7 +125,7 @@
125
125
  overflow-y: auto;
126
126
  display: flex;
127
127
  flex-direction: column;
128
- gap: var(--space-2, 8px);
128
+ gap: calc(var(--space-2, 8px) * var(--density, 1));
129
129
  }
130
130
 
131
131
  /* Jump-to-latest: hidden until the thread scroll listener adds .show. */
@@ -177,14 +177,14 @@
177
177
  }
178
178
  .agentchat-empty-title { margin: 0; font-size: 1.05em; color: var(--fg-2, var(--fg)); }
179
179
  .agentchat-empty-sub { margin: 0; font-size: var(--fs-sm); }
180
- .agentchat-empty-suggestions {
180
+ .agentchat-empty-suggestions, .chat-empty-suggestions {
181
181
  display: flex;
182
182
  flex-wrap: wrap;
183
183
  gap: .5em;
184
184
  justify-content: center;
185
185
  margin-top: .5em;
186
186
  }
187
- .agentchat-empty-suggestion {
187
+ .agentchat-empty-suggestion, .chat-empty-suggestion {
188
188
  cursor: pointer;
189
189
  font: inherit;
190
190
  font-size: var(--fs-tiny);
@@ -194,8 +194,8 @@
194
194
  background: color-mix(in srgb, var(--fg) 5%, transparent);
195
195
  color: var(--fg-2, var(--fg));
196
196
  }
197
- .agentchat-empty-suggestion:hover { background: color-mix(in srgb, var(--accent, var(--fg)) 12%, transparent); }
198
- .agentchat-empty-suggestion:focus-visible { outline: 2px solid var(--accent, var(--fg)); outline-offset: 2px; }
197
+ .agentchat-empty-suggestion:hover, .chat-empty-suggestion:hover { background: color-mix(in srgb, var(--accent, var(--fg)) 12%, transparent); }
198
+ .agentchat-empty-suggestion:focus-visible, .chat-empty-suggestion:focus-visible { outline: 2px solid var(--accent, var(--fg)); outline-offset: 2px; }
199
199
 
200
200
  /* Guided install path in the empty state: copy line + monospaced command rows
201
201
  (each with its own copy button) + a recheck button. No animation. */
@@ -297,8 +297,8 @@
297
297
  }
298
298
  .status-dot-disc.status-dot-live { background: var(--accent); animation: status-disc-pulse 1.8s ease-in-out infinite; }
299
299
  .status-dot-disc.status-dot-error { background: var(--flame); }
300
- .status-dot-disc.status-dot-connecting { background: var(--amber, #d9a93a); }
301
- .status-dot-disc.status-dot-stale { background: var(--amber, #d9a93a); }
300
+ .status-dot-disc.status-dot-connecting { background: var(--amber); }
301
+ .status-dot-disc.status-dot-stale { background: var(--amber); }
302
302
  @keyframes status-disc-pulse {
303
303
  0%, 100% { box-shadow: 0 0 0 0 color-mix(in oklab, var(--accent) 55%, transparent); }
304
304
  50% { box-shadow: 0 0 0 4px color-mix(in oklab, var(--accent) 0%, transparent); }
@@ -360,7 +360,7 @@
360
360
  /* Rail tones MUST match .row.rail-* in app-shell.css so the same semantic state
361
361
  reads as one colour across the conversation list and content rows. */
362
362
  .ds-session-row.rail-green::before { background: var(--accent); }
363
- .ds-session-row.rail-purple::before { background: var(--purple-2, #7F18A4); }
363
+ .ds-session-row.rail-purple::before { background: var(--purple-2); }
364
364
  .ds-session-row.rail-flame::before { background: var(--flame); }
365
365
  .ds-session-main { flex: 1; min-width: 0; display: flex; flex-direction: column; gap: 2px; }
366
366
  .ds-session-title { font-size: var(--fs-sm); color: var(--fg); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
@@ -391,7 +391,8 @@
391
391
  background: color-mix(in oklab, var(--warn) 12%, transparent); color: var(--warn);
392
392
  }
393
393
  .ds-dash-header .btn-primary.danger.is-armed { background: var(--warn); color: var(--paper); border-color: var(--warn); }
394
- .ds-dash-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(280px, 1fr)); gap: var(--space-3); padding: var(--space-4); }
394
+ .ds-dash-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(240px, 1fr)); gap: var(--space-2); padding: var(--space-3); }
395
+ @media (min-width: 1500px) { .ds-dash-grid { grid-template-columns: repeat(auto-fill, minmax(220px, 1fr)); } }
395
396
  .ds-dash-card { display: flex; flex-direction: column; gap: var(--space-2); padding: var(--space-3); background: var(--bg-2); border: var(--bw-hair) solid var(--bg-3); border-radius: var(--r-2); }
396
397
  .ds-dash-card.is-error { border-color: var(--flame); }
397
398
  .ds-dash-card-head { display: flex; align-items: center; gap: var(--space-2); }
@@ -461,11 +462,16 @@ button.chat-composer-context { cursor: pointer; }
461
462
  button.chat-composer-context:hover { color: var(--fg-2); }
462
463
  button.chat-composer-context:focus-visible { outline: 2px solid var(--accent); outline-offset: 1px; }
463
464
 
465
+ /* Composer send/cancel button row: a non-wrapping cluster pinned to the
466
+ bottom-right of the flex-end composer (was unstyled, so the send button
467
+ could wrap below the textarea instead of anchoring like claude.ai/code). */
468
+ .chat-composer-toolbar { display: flex; align-items: center; gap: var(--space-1); flex: 0 0 auto; margin-left: auto; align-self: flex-end; }
469
+
464
470
  /* --- B2: follow-up chips below the last settled assistant turn. --- */
465
471
  .agentchat-followups { display: flex; flex-wrap: wrap; gap: var(--space-2); padding: var(--space-2) var(--space-3); }
466
472
 
467
473
  /* --- C1: stale/idle dashboard status (static, NOT pulsing). --- */
468
- .ds-dash-status.is-stale { color: var(--amber, #d9a93a); }
474
+ .ds-dash-status.is-stale { color: var(--amber); }
469
475
  .ds-dash-status.is-running { color: var(--accent); }
470
476
 
471
477
  /* --- C2: dashboard sort/filter toolbar + stream-state line. --- */
@@ -483,7 +489,7 @@ button.chat-composer-context:focus-visible { outline: 2px solid var(--accent); o
483
489
  }
484
490
  .ds-dash-stream { font-size: var(--fs-tiny); color: var(--fg-3); }
485
491
  .ds-dash-stream.is-lost { color: var(--flame); }
486
- .ds-dash-stream.is-connecting { color: var(--amber, #d9a93a); }
492
+ .ds-dash-stream.is-connecting { color: var(--amber); }
487
493
  .ds-dash-header .spread { flex: 1; }
488
494
  .ds-dash-errors-toggle {
489
495
  padding: 4px 10px; min-height: 32px; border: var(--bw-hair) solid var(--bg-3);
@@ -509,7 +515,7 @@ button.chat-composer-context:focus-visible { outline: 2px solid var(--accent); o
509
515
  /* Stale/idle card: a positive amber inset bar (mirrors is-active) so a stuck
510
516
  agent is flagged in a dense grid, not merely faded near-invisibly. The word
511
517
  'idle' co-carries state, so this stays colour-blind safe. */
512
- .ds-dash-card.is-stale { box-shadow: inset 2px 0 0 var(--amber, #d9a93a); }
518
+ .ds-dash-card.is-stale { box-shadow: inset 2px 0 0 var(--amber); }
513
519
 
514
520
  /* --- H3: dashboard live disc pulses; stale/error do not (handled by H1). --- */
515
521
 
@@ -666,7 +672,7 @@ button.chat-composer-context:focus-visible { outline: 2px solid var(--accent); o
666
672
  }
667
673
 
668
674
  /* Stopping state: in-flight cancel reads distinctly from running/error. */
669
- .ds-dash-status.is-stopping { color: var(--amber, #d9a93a); }
675
+ .ds-dash-status.is-stopping { color: var(--amber); }
670
676
 
671
677
  /* External (observed, not owned) session card: no stop control exists. */
672
678
  .ds-dash-external {
@@ -686,7 +692,10 @@ button.chat-composer-context:focus-visible { outline: 2px solid var(--accent); o
686
692
  avatar-disc + colored-bubble layout. AgentChat passes flat:true; the demo
687
693
  Chat keeps the bubble layout. Turns are full-width to --measure; the user vs
688
694
  assistant distinction is a role label + a faint assistant background. */
689
- .chat-msg-flat { display: block; padding: var(--space-3) var(--space-4); margin: 0; background: none; border-radius: var(--r-2); }
695
+ /* Center the flat turn at the reading measure so a wide content column does not
696
+ dump a one-sided dead gutter (claude.ai/code centers the thread). Padding
697
+ scales through --density so data-density=compact tightens the thread. */
698
+ .chat-msg-flat { display: block; max-width: var(--measure); margin-inline: auto; padding: calc(var(--space-3) * var(--density, 1)) var(--space-4); margin-block: 0; background: none; border-radius: var(--r-2); }
690
699
  .chat-msg-flat.them { background: color-mix(in oklab, var(--fg) 3%, transparent); }
691
700
  .chat-msg-flat.you { background: none; }
692
701
  .chat-msg-flat .chat-stack { max-width: var(--measure); width: 100%; margin: 0; align-items: stretch; }
@@ -695,8 +704,10 @@ button.chat-composer-context:focus-visible { outline: 2px solid var(--accent); o
695
704
  .chat-msg-flat.you .chat-role { color: var(--accent); }
696
705
  .chat-msg-flat .chat-bubble { background: none; border: none; border-radius: 0; padding: 0; max-width: 100%; box-shadow: none; transform: none; }
697
706
  .chat-msg-flat.you .chat-bubble { background: none; color: inherit; }
698
- .chat-msg-flat:hover { background: color-mix(in oklab, var(--fg) 3%, transparent); }
699
- .chat-msg-flat.you:hover { background: color-mix(in oklab, var(--fg) 2%, transparent); }
707
+ /* Hover tint exceeds each role's REST tint so the row gives feedback (and the
708
+ ladder stays monotonic): assistant 5% > its 3% rest; user 4% > transparent. */
709
+ .chat-msg-flat.them:hover { background: color-mix(in oklab, var(--fg) 5%, transparent); }
710
+ .chat-msg-flat.you:hover { background: color-mix(in oklab, var(--fg) 4%, transparent); }
700
711
  .chat-msg-flat:hover .chat-bubble { transform: none; box-shadow: none; background: none; }
701
712
  .chat-msg-flat .chat-avatar { display: none; }
702
713
 
@@ -730,6 +741,9 @@ button.chat-composer-context:focus-visible { outline: 2px solid var(--accent); o
730
741
  }
731
742
  .chat-msg .chat-tool.tool-running .chat-tool-status { color: var(--accent); background: color-mix(in oklab, var(--accent) 12%, transparent); }
732
743
  .chat-msg .chat-tool.tool-error .chat-tool-status { color: var(--flame); background: color-mix(in oklab, var(--flame) 12%, transparent); }
744
+ /* Completed tool: a positive (success) tone so done reads distinctly from the
745
+ neutral pill and from the accent-toned running pill (--success = green-2). */
746
+ .chat-msg .chat-tool.tool-done .chat-tool-status { color: var(--success); background: color-mix(in oklab, var(--success) 12%, transparent); }
733
747
  .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); }
734
748
  .chat-tool-section { display: flex; flex-direction: column; gap: var(--space-1); }
735
749
  .chat-tool-section-label { font-size: var(--fs-tiny); font-weight: 600; text-transform: uppercase; letter-spacing: var(--tr-caps); color: var(--fg-3); }
@@ -764,6 +778,10 @@ button.chat-composer-context:focus-visible { outline: 2px solid var(--accent); o
764
778
  }
765
779
  @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); } }
766
780
  .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); }
781
+ /* Error card carries the strongest left-bar tone (flame > stale amber > active
782
+ accent), placed last so its inset bar wins source order over is-active/is-stale.
783
+ The full-perimeter border-color (line ~396) stays for extra severity emphasis. */
784
+ .ds-dash-card.is-error { box-shadow: inset 2px 0 0 var(--flame); }
767
785
  @media (prefers-reduced-motion: no-preference) {
768
786
  .ds-dash-card.is-new { animation: ds-card-in var(--dur-slow) var(--ease); }
769
787
  }
@@ -775,7 +793,7 @@ button.chat-composer-context:focus-visible { outline: 2px solid var(--accent); o
775
793
  .ds-dash-breakdown { display: flex; align-items: center; gap: var(--space-1); font-size: var(--fs-sm); color: var(--fg-2); }
776
794
  .ds-dash-breakdown .seg.is-running { color: var(--green); font-weight: 600; }
777
795
  .ds-dash-breakdown .seg.is-error { color: var(--flame); font-weight: 600; }
778
- .ds-dash-breakdown .seg.is-idle { color: var(--amber, #d9a93a); }
796
+ .ds-dash-breakdown .seg.is-idle { color: var(--amber); }
779
797
  .ds-dash-stream-disc { display: inline-flex; align-items: center; gap: var(--space-1); }
780
798
  .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); }
781
799
  .ds-dash-selectall:focus-visible { outline: 2px solid var(--accent); outline-offset: 1px; }
@@ -796,7 +814,7 @@ button.chat-composer-context:focus-visible { outline: 2px solid var(--accent); o
796
814
  .ds-preview-code code { color: var(--fg); }
797
815
  .ds-preview-code .token.comment, .ds-preview-code .token.prolog, .ds-preview-code .token.doctype, .ds-preview-code .token.cdata { color: var(--fg-3); }
798
816
  .ds-preview-code .token.punctuation { color: var(--fg-2); }
799
- .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); }
817
+ .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); }
800
818
  .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(--code-string, var(--green)); }
801
819
  .ds-preview-code .token.atrule, .ds-preview-code .token.attr-value, .ds-preview-code .token.keyword { color: var(--code-keyword, var(--sky)); }
802
820
  .ds-preview-code .token.function, .ds-preview-code .token.class-name { color: var(--code-fn, var(--flame)); }
@@ -842,3 +860,8 @@ button.chat-composer-context:focus-visible { outline: 2px solid var(--accent); o
842
860
  .row-act, .ds-dash-errors-toggle, .agentchat-export-act, .ds-file-more-btn,
843
861
  .agentchat-install-copy, .ds-upload-act, .ds-session-meta-copy { min-height: 44px; }
844
862
  }
863
+
864
+ /* 11th run: ultrawide widens the reading measure where there is room. */
865
+ @media (min-width: 1600px) {
866
+ .agentchat-thread { --measure: 84ch; }
867
+ }
@@ -197,22 +197,31 @@
197
197
  --size-sm: 32px;
198
198
  --size-base: 42px;
199
199
  --size-lg: 56px;
200
+
201
+ /* Unified focus-ring tokens (single source for the design system). Outset
202
+ rings (the default) tokenize colour+width+offset; bordered text fields use
203
+ the inset variant. Deliberate negative offsets on edge-flush/clipping
204
+ containers stay literal. */
205
+ --focus-color: var(--accent);
206
+ --focus-w: 2px;
207
+ --focus-offset: 2px;
208
+ --focus-ring-inset: inset 0 0 0 var(--focus-w) var(--focus-color);
200
209
  }
201
210
 
202
211
  /* ============================================================
203
212
  Focus-visible styles for keyboard navigation
204
213
  ============================================================ */
205
214
  :focus-visible {
206
- outline: 2px solid var(--accent);
207
- outline-offset: 2px;
215
+ outline: var(--focus-w) solid var(--focus-color);
216
+ outline-offset: var(--focus-offset);
208
217
  }
209
218
 
210
219
  /* Button variants with focus-visible */
211
220
  .btn:focus-visible,
212
221
  .btn-primary:focus-visible,
213
222
  .btn-ghost:focus-visible {
214
- outline: 2px solid var(--accent);
215
- outline-offset: 2px;
223
+ outline: var(--focus-w) solid var(--focus-color);
224
+ outline-offset: var(--focus-offset);
216
225
  }
217
226
 
218
227
  /* Link focus-visible */
@@ -260,6 +269,10 @@ select:focus-visible {
260
269
  --danger: oklch(0.68 0.19 25);
261
270
  --flame: #FF5A1F;
262
271
  --amber: #D9A93A;
272
+ /* warn/sky dark-tuned pairs (mirror flame/amber): the :root paper values
273
+ (#E0241A / #3A6EFF) are too dark on ink; these clear AA 4.5:1 on --ink. */
274
+ --warn: #FF5A52;
275
+ --sky: #6E9BFF;
263
276
  --code-string: var(--green-2);
264
277
  --code-keyword: var(--sky);
265
278
  --code-fn: var(--flame);
@@ -293,6 +306,8 @@ select:focus-visible {
293
306
  --accent-bright: var(--green-2);
294
307
  --flame: #FF5A1F;
295
308
  --amber: #D9A93A;
309
+ --warn: #FF5A52;
310
+ --sky: #6E9BFF;
296
311
  --code-string: var(--green-2);
297
312
  --code-keyword: var(--sky);
298
313
  --code-fn: var(--flame);