anentrypoint-design 0.0.210 → 0.0.212
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/app-shell.css +120 -74
- package/chat.css +94 -20
- package/colors_and_type.css +19 -4
- package/community.css +5 -1
- package/dist/247420.css +489 -100
- package/dist/247420.js +13 -13
- package/package.json +1 -1
- package/src/components/content.js +8 -2
- package/src/components/files.js +24 -28
- package/src/components/sessions.js +9 -4
- package/src/components/shell.js +32 -10
package/chat.css
CHANGED
|
@@ -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. */
|
|
@@ -268,6 +268,23 @@
|
|
|
268
268
|
@media (prefers-reduced-motion: reduce) {
|
|
269
269
|
.agentchat-working .chat-thinking-dots span { animation: none; opacity: .7; }
|
|
270
270
|
}
|
|
271
|
+
/* Standalone thinking part (ThinkingNode renders .chat-bubble.chat-thinking with
|
|
272
|
+
.chat-thinking-dots + .chat-thinking-text OUTSIDE the .agentchat-working tail).
|
|
273
|
+
Without these base rules the dots are invisible empty spans and the text has
|
|
274
|
+
no muted tone. Reuse the agentchat-dot-bounce keyframe. */
|
|
275
|
+
.chat-thinking { display: flex; align-items: center; gap: .5em; color: var(--fg-3); font-size: var(--fs-tiny); background: none; padding: .3em .2em; }
|
|
276
|
+
.chat-thinking-text { color: var(--fg-3); }
|
|
277
|
+
.chat-thinking-dots { display: inline-flex; gap: 3px; }
|
|
278
|
+
.chat-thinking-dots span {
|
|
279
|
+
width: 5px; height: 5px; border-radius: 50%;
|
|
280
|
+
background: var(--fg); opacity: .4;
|
|
281
|
+
animation: agentchat-dot-bounce 1.2s infinite ease-in-out;
|
|
282
|
+
}
|
|
283
|
+
.chat-thinking-dots span:nth-child(2) { animation-delay: .15s; }
|
|
284
|
+
.chat-thinking-dots span:nth-child(3) { animation-delay: .3s; }
|
|
285
|
+
@media (prefers-reduced-motion: reduce) {
|
|
286
|
+
.chat-thinking-dots span { animation: none; opacity: .7; }
|
|
287
|
+
}
|
|
271
288
|
|
|
272
289
|
/* Responsive: the control cluster + cwd bar must stay usable on phones/tablets.
|
|
273
290
|
The cwd path can't eat the row beside its label + buttons on a narrow screen. */
|
|
@@ -295,16 +312,20 @@
|
|
|
295
312
|
display: inline-block; width: 8px; height: 8px; border-radius: 50%;
|
|
296
313
|
background: var(--fg-3); flex: 0 0 auto;
|
|
297
314
|
}
|
|
315
|
+
/* Each variant carries a non-colour channel (fill vs halo vs hollow ring) so the
|
|
316
|
+
states stay distinguishable for colour-blind users and when stale/connecting
|
|
317
|
+
would otherwise share a hue. Mirrors the rail-tone shape differentiation. */
|
|
298
318
|
.status-dot-disc.status-dot-live { background: var(--accent); animation: status-disc-pulse 1.8s ease-in-out infinite; }
|
|
299
|
-
.status-dot-disc.status-dot-error { background: var(--flame); }
|
|
300
|
-
.status-dot-disc.status-dot-connecting { background: var(--amber
|
|
301
|
-
.status-dot-disc.status-dot-stale { background: var(--
|
|
319
|
+
.status-dot-disc.status-dot-error { background: var(--flame); box-shadow: 0 0 0 1.5px color-mix(in oklab, var(--flame) 38%, transparent); }
|
|
320
|
+
.status-dot-disc.status-dot-connecting { background: transparent; box-shadow: inset 0 0 0 2px var(--amber); }
|
|
321
|
+
.status-dot-disc.status-dot-stale { background: color-mix(in oklab, var(--warn) 70%, var(--fg-3)); }
|
|
302
322
|
@keyframes status-disc-pulse {
|
|
303
323
|
0%, 100% { box-shadow: 0 0 0 0 color-mix(in oklab, var(--accent) 55%, transparent); }
|
|
304
324
|
50% { box-shadow: 0 0 0 4px color-mix(in oklab, var(--accent) 0%, transparent); }
|
|
305
325
|
}
|
|
306
326
|
@media (prefers-reduced-motion: reduce) {
|
|
307
|
-
|
|
327
|
+
/* Keep the live disc shape-differentiated without motion: a static concentric ring. */
|
|
328
|
+
.status-dot-disc.status-dot-live { animation: none; box-shadow: 0 0 0 2px color-mix(in oklab, var(--accent) 35%, transparent); }
|
|
308
329
|
}
|
|
309
330
|
|
|
310
331
|
/* ----------------------------------------------------------------------------
|
|
@@ -360,14 +381,16 @@
|
|
|
360
381
|
/* Rail tones MUST match .row.rail-* in app-shell.css so the same semantic state
|
|
361
382
|
reads as one colour across the conversation list and content rows. */
|
|
362
383
|
.ds-session-row.rail-green::before { background: var(--accent); }
|
|
363
|
-
.ds-session-row.rail-purple::before { background: var(--purple-2
|
|
384
|
+
.ds-session-row.rail-purple::before { background: var(--purple-2); }
|
|
364
385
|
.ds-session-row.rail-flame::before { background: var(--flame); }
|
|
365
386
|
.ds-session-main { flex: 1; min-width: 0; display: flex; flex-direction: column; gap: 2px; }
|
|
366
387
|
.ds-session-title { font-size: var(--fs-sm); color: var(--fg); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
|
|
367
388
|
.ds-session-sub { font-size: var(--fs-tiny); color: var(--fg-3); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
|
|
368
389
|
.ds-session-meta { display: flex; align-items: center; gap: var(--space-2); flex: 0 0 auto; }
|
|
369
390
|
.ds-session-agent { font-family: var(--ff-mono); font-size: var(--fs-tiny); color: var(--fg-3); }
|
|
370
|
-
|
|
391
|
+
/* New-activity cue is a hollow accent RING so it stays shape-distinct from the
|
|
392
|
+
running live disc (a solid pulsing accent dot) for colour-blind / reduced-motion users. */
|
|
393
|
+
.ds-session-unread { width: 8px; height: 8px; border-radius: 50%; background: transparent; box-shadow: inset 0 0 0 2px var(--accent); display: inline-block; }
|
|
371
394
|
.ds-session-state { padding: var(--space-5) var(--space-3); text-align: center; color: var(--fg-3); font-size: var(--fs-sm); }
|
|
372
395
|
.ds-session-state-error { color: var(--flame); }
|
|
373
396
|
|
|
@@ -397,13 +420,15 @@
|
|
|
397
420
|
.ds-dash-card.is-error { border-color: var(--flame); }
|
|
398
421
|
.ds-dash-card-head { display: flex; align-items: center; gap: var(--space-2); }
|
|
399
422
|
.ds-dash-status { font-size: var(--fs-tiny); font-weight: 600; text-transform: uppercase; letter-spacing: .03em; }
|
|
400
|
-
|
|
423
|
+
/* running tone unified on --accent (the later is-running rule + the live disc all
|
|
424
|
+
use --accent); the dead var(--green) duplicate that lived here was removed. */
|
|
401
425
|
.ds-dash-status.is-error { color: var(--flame); }
|
|
402
426
|
.ds-dash-agent { font-size: var(--fs-body); font-weight: 600; color: var(--fg); }
|
|
403
427
|
.ds-dash-model { font-family: var(--ff-mono); font-size: var(--fs-tiny); color: var(--fg-3); margin-left: auto; }
|
|
404
428
|
.ds-dash-meta { display: flex; flex-direction: column; gap: 2px; }
|
|
405
429
|
.ds-dash-cwd { font-family: var(--ff-mono); font-size: var(--fs-tiny); color: var(--fg-3); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
|
|
406
430
|
.ds-dash-stat { font-family: var(--ff-mono); font-size: var(--fs-tiny); color: var(--fg-2); }
|
|
431
|
+
.ds-dash-stat-cost { color: var(--fg); font-weight: 600; }
|
|
407
432
|
.ds-dash-activity { font-size: var(--fs-tiny); color: var(--fg-3); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
|
|
408
433
|
.ds-dash-actions { display: flex; flex-wrap: wrap; gap: var(--space-2); margin-top: var(--space-1); }
|
|
409
434
|
.ds-dash-state { padding: var(--space-6) var(--space-4); text-align: center; color: var(--fg-3); font-size: var(--fs-body); }
|
|
@@ -450,6 +475,13 @@
|
|
|
450
475
|
/* --- B1: streaming pre shell — monospaced bubble while a fenced block streams,
|
|
451
476
|
so it does not reflow prose->block on settle. --- */
|
|
452
477
|
.chat-stream-pre pre { margin: 0; white-space: pre-wrap; word-break: break-word; font-family: var(--ff-mono); font-size: var(--fs-sm); }
|
|
478
|
+
/* Persistent minimal chrome so a fenced block does not pop a border + lang tab +
|
|
479
|
+
copy button only on settle - the streaming slab already reads as a code block. */
|
|
480
|
+
.chat-stream-pre { position: relative; }
|
|
481
|
+
.chat-stream-pre pre {
|
|
482
|
+
border: var(--bw-hair) solid var(--rule); border-radius: var(--r-1);
|
|
483
|
+
padding: var(--space-3); background: color-mix(in oklab, var(--fg) 4%, transparent);
|
|
484
|
+
}
|
|
453
485
|
|
|
454
486
|
/* --- A5: composer context line (agent / model / cwd at point of typing). --- */
|
|
455
487
|
.chat-composer-context {
|
|
@@ -462,11 +494,25 @@ button.chat-composer-context { cursor: pointer; }
|
|
|
462
494
|
button.chat-composer-context:hover { color: var(--fg-2); }
|
|
463
495
|
button.chat-composer-context:focus-visible { outline: 2px solid var(--accent); outline-offset: 1px; }
|
|
464
496
|
|
|
497
|
+
/* Composer send/cancel button row: a non-wrapping cluster pinned to the
|
|
498
|
+
bottom-right of the flex-end composer (was unstyled, so the send button
|
|
499
|
+
could wrap below the textarea instead of anchoring like claude.ai/code). */
|
|
500
|
+
.chat-composer-toolbar { display: flex; align-items: center; gap: var(--space-1); flex: 0 0 auto; margin-left: auto; align-self: flex-end; }
|
|
501
|
+
/* Unify the toolbar cluster on one 32px / --r-1 square metric (the round 40px
|
|
502
|
+
ghost buttons + 36px square send read as two button systems; the kit moved
|
|
503
|
+
.btn* off --r-pill). chat.css loads after app-shell.css so this wins by order. */
|
|
504
|
+
.chat-composer-toolbar .composer-btn,
|
|
505
|
+
.chat-composer-toolbar .send { width: 32px; height: 32px; border-radius: var(--r-1); }
|
|
506
|
+
@media (pointer: coarse) {
|
|
507
|
+
.chat-composer-toolbar .composer-btn,
|
|
508
|
+
.chat-composer-toolbar .send { width: 44px; height: 44px; }
|
|
509
|
+
}
|
|
510
|
+
|
|
465
511
|
/* --- B2: follow-up chips below the last settled assistant turn. --- */
|
|
466
512
|
.agentchat-followups { display: flex; flex-wrap: wrap; gap: var(--space-2); padding: var(--space-2) var(--space-3); }
|
|
467
513
|
|
|
468
514
|
/* --- C1: stale/idle dashboard status (static, NOT pulsing). --- */
|
|
469
|
-
.ds-dash-status.is-stale { color: var(--amber
|
|
515
|
+
.ds-dash-status.is-stale { color: var(--amber); }
|
|
470
516
|
.ds-dash-status.is-running { color: var(--accent); }
|
|
471
517
|
|
|
472
518
|
/* --- C2: dashboard sort/filter toolbar + stream-state line. --- */
|
|
@@ -484,7 +530,7 @@ button.chat-composer-context:focus-visible { outline: 2px solid var(--accent); o
|
|
|
484
530
|
}
|
|
485
531
|
.ds-dash-stream { font-size: var(--fs-tiny); color: var(--fg-3); }
|
|
486
532
|
.ds-dash-stream.is-lost { color: var(--flame); }
|
|
487
|
-
.ds-dash-stream.is-connecting { color: var(--amber
|
|
533
|
+
.ds-dash-stream.is-connecting { color: var(--amber); }
|
|
488
534
|
.ds-dash-header .spread { flex: 1; }
|
|
489
535
|
.ds-dash-errors-toggle {
|
|
490
536
|
padding: 4px 10px; min-height: 32px; border: var(--bw-hair) solid var(--bg-3);
|
|
@@ -510,7 +556,7 @@ button.chat-composer-context:focus-visible { outline: 2px solid var(--accent); o
|
|
|
510
556
|
/* Stale/idle card: a positive amber inset bar (mirrors is-active) so a stuck
|
|
511
557
|
agent is flagged in a dense grid, not merely faded near-invisibly. The word
|
|
512
558
|
'idle' co-carries state, so this stays colour-blind safe. */
|
|
513
|
-
.ds-dash-card.is-stale { box-shadow: inset 2px 0 0 var(--amber
|
|
559
|
+
.ds-dash-card.is-stale { box-shadow: inset 2px 0 0 var(--amber); }
|
|
514
560
|
|
|
515
561
|
/* --- H3: dashboard live disc pulses; stale/error do not (handled by H1). --- */
|
|
516
562
|
|
|
@@ -667,7 +713,7 @@ button.chat-composer-context:focus-visible { outline: 2px solid var(--accent); o
|
|
|
667
713
|
}
|
|
668
714
|
|
|
669
715
|
/* Stopping state: in-flight cancel reads distinctly from running/error. */
|
|
670
|
-
.ds-dash-status.is-stopping { color: var(--amber
|
|
716
|
+
.ds-dash-status.is-stopping { color: var(--amber); }
|
|
671
717
|
|
|
672
718
|
/* External (observed, not owned) session card: no stop control exists. */
|
|
673
719
|
.ds-dash-external {
|
|
@@ -699,8 +745,29 @@ button.chat-composer-context:focus-visible { outline: 2px solid var(--accent); o
|
|
|
699
745
|
.chat-msg-flat.you .chat-role { color: var(--accent); }
|
|
700
746
|
.chat-msg-flat .chat-bubble { background: none; border: none; border-radius: 0; padding: 0; max-width: 100%; box-shadow: none; transform: none; }
|
|
701
747
|
.chat-msg-flat.you .chat-bubble { background: none; color: inherit; }
|
|
702
|
-
|
|
703
|
-
.
|
|
748
|
+
/* Flat turns strip the bubble padding, so the role label sat 4px above the first
|
|
749
|
+
paragraph and the .them tint hugged text flush. Restore reading rhythm + give
|
|
750
|
+
the tinted assistant row inner breathing room so it reads as a card. */
|
|
751
|
+
.chat-msg-flat .chat-role { margin-bottom: var(--space-2); }
|
|
752
|
+
.chat-msg-flat .chat-md { line-height: 1.65; }
|
|
753
|
+
.chat-msg-flat .chat-md p { margin: 8px 0; }
|
|
754
|
+
.chat-msg-flat.them { padding-block: calc(var(--space-3) * var(--density, 1) + 2px); }
|
|
755
|
+
/* Inline backtick code (renderInline tags <code class=chat-tick>) - was a dead
|
|
756
|
+
class relying on the generic .chat-bubble code rule, so notices / non-bubble
|
|
757
|
+
surfaces got unstyled monospace. Self-style it regardless of container. */
|
|
758
|
+
.chat-tick { font-family: var(--ff-mono); font-size: .92em; background: color-mix(in oklab, var(--fg) 10%, transparent); padding: 1px 6px; border-radius: var(--r-1); }
|
|
759
|
+
/* Structured tool/code output earns more width than running prose (claude.ai/code
|
|
760
|
+
lets diffs/tables break out wider than the reading measure). A flat turn that
|
|
761
|
+
contains a tool card or code block widens itself AND its stack past --measure;
|
|
762
|
+
prose-only turns stay clamped. */
|
|
763
|
+
.chat-msg-flat:has(.chat-tool),
|
|
764
|
+
.chat-msg-flat:has(.chat-bubble.chat-code) { max-width: calc(var(--measure) + 14ch); }
|
|
765
|
+
.chat-msg-flat:has(.chat-tool) .chat-stack,
|
|
766
|
+
.chat-msg-flat:has(.chat-bubble.chat-code) .chat-stack { max-width: calc(var(--measure) + 14ch); }
|
|
767
|
+
/* Hover tint exceeds each role's REST tint so the row gives feedback (and the
|
|
768
|
+
ladder stays monotonic): assistant 5% > its 3% rest; user 4% > transparent. */
|
|
769
|
+
.chat-msg-flat.them:hover { background: color-mix(in oklab, var(--fg) 5%, transparent); }
|
|
770
|
+
.chat-msg-flat.you:hover { background: color-mix(in oklab, var(--fg) 4%, transparent); }
|
|
704
771
|
.chat-msg-flat:hover .chat-bubble { transform: none; box-shadow: none; background: none; }
|
|
705
772
|
.chat-msg-flat .chat-avatar { display: none; }
|
|
706
773
|
|
|
@@ -734,6 +801,9 @@ button.chat-composer-context:focus-visible { outline: 2px solid var(--accent); o
|
|
|
734
801
|
}
|
|
735
802
|
.chat-msg .chat-tool.tool-running .chat-tool-status { color: var(--accent); background: color-mix(in oklab, var(--accent) 12%, transparent); }
|
|
736
803
|
.chat-msg .chat-tool.tool-error .chat-tool-status { color: var(--flame); background: color-mix(in oklab, var(--flame) 12%, transparent); }
|
|
804
|
+
/* Completed tool: a positive (success) tone so done reads distinctly from the
|
|
805
|
+
neutral pill and from the accent-toned running pill (--success = green-2). */
|
|
806
|
+
.chat-msg .chat-tool.tool-done .chat-tool-status { color: var(--success); background: color-mix(in oklab, var(--success) 12%, transparent); }
|
|
737
807
|
.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); }
|
|
738
808
|
.chat-tool-section { display: flex; flex-direction: column; gap: var(--space-1); }
|
|
739
809
|
.chat-tool-section-label { font-size: var(--fs-tiny); font-weight: 600; text-transform: uppercase; letter-spacing: var(--tr-caps); color: var(--fg-3); }
|
|
@@ -768,6 +838,10 @@ button.chat-composer-context:focus-visible { outline: 2px solid var(--accent); o
|
|
|
768
838
|
}
|
|
769
839
|
@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); } }
|
|
770
840
|
.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); }
|
|
841
|
+
/* Error card carries the strongest left-bar tone (flame > stale amber > active
|
|
842
|
+
accent), placed last so its inset bar wins source order over is-active/is-stale.
|
|
843
|
+
The full-perimeter border-color (line ~396) stays for extra severity emphasis. */
|
|
844
|
+
.ds-dash-card.is-error { box-shadow: inset 2px 0 0 var(--flame); }
|
|
771
845
|
@media (prefers-reduced-motion: no-preference) {
|
|
772
846
|
.ds-dash-card.is-new { animation: ds-card-in var(--dur-slow) var(--ease); }
|
|
773
847
|
}
|
|
@@ -777,9 +851,9 @@ button.chat-composer-context:focus-visible { outline: 2px solid var(--accent); o
|
|
|
777
851
|
.ds-dash-group { display: flex; flex-direction: column; gap: var(--space-2); }
|
|
778
852
|
.ds-dash-group-label { font-size: var(--fs-tiny); font-weight: 600; text-transform: uppercase; letter-spacing: var(--tr-caps); color: var(--fg-3); padding: 0 var(--space-1); }
|
|
779
853
|
.ds-dash-breakdown { display: flex; align-items: center; gap: var(--space-1); font-size: var(--fs-sm); color: var(--fg-2); }
|
|
780
|
-
.ds-dash-breakdown .seg.is-running { color: var(--
|
|
854
|
+
.ds-dash-breakdown .seg.is-running { color: var(--accent); font-weight: 600; }
|
|
781
855
|
.ds-dash-breakdown .seg.is-error { color: var(--flame); font-weight: 600; }
|
|
782
|
-
.ds-dash-breakdown .seg.is-idle { color: var(--amber
|
|
856
|
+
.ds-dash-breakdown .seg.is-idle { color: var(--amber); font-weight: 600; }
|
|
783
857
|
.ds-dash-stream-disc { display: inline-flex; align-items: center; gap: var(--space-1); }
|
|
784
858
|
.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); }
|
|
785
859
|
.ds-dash-selectall:focus-visible { outline: 2px solid var(--accent); outline-offset: 1px; }
|
|
@@ -800,7 +874,7 @@ button.chat-composer-context:focus-visible { outline: 2px solid var(--accent); o
|
|
|
800
874
|
.ds-preview-code code { color: var(--fg); }
|
|
801
875
|
.ds-preview-code .token.comment, .ds-preview-code .token.prolog, .ds-preview-code .token.doctype, .ds-preview-code .token.cdata { color: var(--fg-3); }
|
|
802
876
|
.ds-preview-code .token.punctuation { color: var(--fg-2); }
|
|
803
|
-
.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
|
|
877
|
+
.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); }
|
|
804
878
|
.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)); }
|
|
805
879
|
.ds-preview-code .token.atrule, .ds-preview-code .token.attr-value, .ds-preview-code .token.keyword { color: var(--code-keyword, var(--sky)); }
|
|
806
880
|
.ds-preview-code .token.function, .ds-preview-code .token.class-name { color: var(--code-fn, var(--flame)); }
|
package/colors_and_type.css
CHANGED
|
@@ -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:
|
|
207
|
-
outline-offset:
|
|
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:
|
|
215
|
-
outline-offset:
|
|
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);
|
package/community.css
CHANGED
|
@@ -1166,7 +1166,11 @@
|
|
|
1166
1166
|
.cm-vs-btn,
|
|
1167
1167
|
.cm-user-btn,
|
|
1168
1168
|
.cm-ch-spinner,
|
|
1169
|
-
.cm-ch-voice-badge
|
|
1169
|
+
.cm-ch-voice-badge,
|
|
1170
|
+
.vx-ptt,
|
|
1171
|
+
.vx-ptt-glow,
|
|
1172
|
+
.vx-vad-meter,
|
|
1173
|
+
.vx-vad-fill {
|
|
1170
1174
|
transition: none !important;
|
|
1171
1175
|
animation: none !important;
|
|
1172
1176
|
}
|