anentrypoint-design 0.0.208 → 0.0.210

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
@@ -20,6 +20,13 @@
20
20
  .agentchat-controls .select,
21
21
  .agentchat-controls [role="combobox"] { min-width: 130px; max-width: 240px; }
22
22
  .agentchat-controls .ds-select { min-width: 130px; max-width: 240px; }
23
+ /* One shared control metric for the most-seen chrome row (mirrors the
24
+ .ds-dash-toolbar precedent): selects, buttons, export acts all 32px / r-1. */
25
+ .agentchat-controls .ds-select { min-height: 32px; padding: 4px 28px 4px 10px; font-size: var(--fs-sm); border-radius: var(--r-1); }
26
+ .agentchat-controls .btn, .agentchat-controls .btn-primary { padding: 5px 12px; min-height: 32px; border-radius: var(--r-1); font-weight: 500; }
27
+ @media (pointer: coarse) {
28
+ .agentchat-controls .ds-select, .agentchat-controls .btn, .agentchat-controls .btn-primary { min-height: 44px; }
29
+ }
23
30
 
24
31
  /* Narrow viewports: let the agent/model selects share the row two-up, then
25
32
  stack full-width on the smallest screens, and drop the status to its own
@@ -42,7 +49,7 @@
42
49
  gap: .4em;
43
50
  white-space: nowrap;
44
51
  margin-left: auto;
45
- font-size: .85em;
52
+ font-size: var(--fs-tiny);
46
53
  color: var(--fg-3);
47
54
  }
48
55
  /* status disc — a CSS-drawn dot, not a glyph; pulses while streaming */
@@ -68,7 +75,7 @@
68
75
  display: flex;
69
76
  align-items: center;
70
77
  gap: var(--space-2, 8px);
71
- font-size: .85em;
78
+ font-size: var(--fs-tiny);
72
79
  color: var(--fg-3);
73
80
  flex-wrap: wrap;
74
81
  }
@@ -109,7 +116,7 @@
109
116
  gap: .5em;
110
117
  }
111
118
  .agentchat-title { font-size: 1em; margin: 0; }
112
- .agentchat-sub { font-size: .85em; color: var(--fg-3); }
119
+ .agentchat-sub { font-size: var(--fs-tiny); color: var(--fg-3); }
113
120
  /* Thread wrapper hosts the absolutely-positioned jump-to-latest button. */
114
121
  .agentchat-thread-wrap { position: relative; flex: 1; min-height: 0; display: flex; flex-direction: column; }
115
122
  .agentchat-thread {
@@ -118,14 +125,14 @@
118
125
  overflow-y: auto;
119
126
  display: flex;
120
127
  flex-direction: column;
121
- gap: var(--space-2, 8px);
128
+ gap: calc(var(--space-2, 8px) * var(--density, 1));
122
129
  }
123
130
 
124
131
  /* Jump-to-latest: hidden until the thread scroll listener adds .show. */
125
132
  .agentchat-jump {
126
133
  position: absolute; right: 16px; bottom: 12px; z-index: 3;
127
134
  display: none; align-items: center; gap: .35em;
128
- padding: .4em .8em; font: inherit; font-size: .8em; cursor: pointer;
135
+ padding: .4em .8em; font: inherit; font-size: var(--fs-tiny); cursor: pointer;
129
136
  border-radius: 999px; border: var(--bw-hair) solid var(--rule);
130
137
  background: var(--bg-2); color: var(--fg-2, var(--fg));
131
138
  box-shadow: 0 2px 8px color-mix(in srgb, var(--fg) 14%, transparent);
@@ -169,7 +176,7 @@
169
176
  max-width: 46ch;
170
177
  }
171
178
  .agentchat-empty-title { margin: 0; font-size: 1.05em; color: var(--fg-2, var(--fg)); }
172
- .agentchat-empty-sub { margin: 0; font-size: .9em; }
179
+ .agentchat-empty-sub { margin: 0; font-size: var(--fs-sm); }
173
180
  .agentchat-empty-suggestions {
174
181
  display: flex;
175
182
  flex-wrap: wrap;
@@ -180,7 +187,7 @@
180
187
  .agentchat-empty-suggestion {
181
188
  cursor: pointer;
182
189
  font: inherit;
183
- font-size: .85em;
190
+ font-size: var(--fs-tiny);
184
191
  padding: .4em .8em;
185
192
  border-radius: 999px;
186
193
  border: 1px solid color-mix(in srgb, var(--fg) 16%, transparent);
@@ -200,7 +207,7 @@
200
207
  text-align: left;
201
208
  width: 100%;
202
209
  }
203
- .agentchat-install-text { margin: 0; font-size: .9em; color: var(--fg-3); }
210
+ .agentchat-install-text { margin: 0; font-size: var(--fs-sm); color: var(--fg-3); }
204
211
  .agentchat-install-list { margin: 0; padding: 0; list-style: none; display: flex; flex-direction: column; gap: var(--space-1, 4px); }
205
212
  .agentchat-install-row {
206
213
  display: flex; align-items: center; gap: var(--space-2, 8px);
@@ -241,7 +248,7 @@
241
248
  gap: .5em;
242
249
  padding: .3em .2em;
243
250
  color: var(--fg-3);
244
- font-size: .85em;
251
+ font-size: var(--fs-tiny);
245
252
  }
246
253
  .agentchat-working-text { color: var(--fg-3); }
247
254
  /* Self-contained dots (chat-thinking-dots lives in a kit sheet not bundled
@@ -304,28 +311,40 @@
304
311
  ConversationList — left-rail "Chats" column.
305
312
  ---------------------------------------------------------------------------- */
306
313
  .ds-sessions { display: flex; flex-direction: column; min-height: 0; height: 100%; }
307
- .ds-session-head { flex: 0 0 auto; display: flex; flex-direction: column; gap: var(--space-2); padding: var(--space-3); border-bottom: var(--bw-hair) solid var(--bg-3); }
314
+ /* One row: quiet icon new-chat beside the search. The list's new-chat must not
315
+ repeat the rail's primary CTA - two identical green buttons on screen at
316
+ once read as a layout mistake, and the rail action already owns 'new'. */
317
+ .ds-session-head { flex: 0 0 auto; display: flex; flex-direction: row; align-items: center; gap: var(--space-2); padding: var(--space-3); border-bottom: var(--bw-hair) solid var(--bg-3); }
308
318
  .ds-session-new {
309
- display: flex; align-items: center; gap: var(--space-2); justify-content: center;
310
- padding: var(--space-2) var(--space-3); min-height: 44px;
311
- background: var(--accent); color: var(--accent-fg, var(--bg)); border: none;
319
+ display: inline-flex; align-items: center; justify-content: center; gap: 0;
320
+ flex: 0 0 auto; order: 2;
321
+ width: 36px; min-height: 36px; padding: 0;
322
+ background: transparent; color: var(--fg-2);
323
+ border: var(--bw-hair) solid var(--rule);
312
324
  border-radius: var(--r-1); cursor: pointer; font-family: var(--ff-body);
313
- font-size: var(--fs-sm); font-weight: 600;
325
+ font-size: var(--fs-sm); font-weight: 500;
314
326
  }
315
- .ds-session-new:hover { filter: brightness(1.08); }
327
+ .ds-session-new > span { display: none; }
328
+ .ds-session-new:hover { background: var(--bg-2); color: var(--fg); }
329
+ .ds-session-search { order: 1; flex: 1 1 auto; min-width: 0; }
316
330
  .ds-session-new:focus-visible { outline: 2px solid var(--accent); outline-offset: 2px; }
317
331
  .ds-session-search {
318
- width: 100%; padding: var(--space-2) var(--space-3); min-height: 44px;
332
+ width: 100%; padding: var(--space-1) var(--space-3); min-height: 36px;
319
333
  background: var(--bg-2); border: var(--bw-hair) solid var(--bg-3); color: var(--fg);
320
334
  border-radius: var(--r-1); font-family: var(--ff-body); font-size: var(--fs-sm);
321
335
  }
322
- .ds-session-search:focus-visible { outline: 2px solid var(--accent); outline-offset: 1px; }
336
+ .ds-session-search:focus-visible { outline: none; box-shadow: inset 0 0 0 2px var(--accent); }
337
+ /* Touch floor (must FOLLOW the base rules - same specificity, order decides). */
338
+ @media (pointer: coarse) {
339
+ .ds-session-new { width: 44px; min-height: 44px; }
340
+ .ds-session-search { min-height: 44px; }
341
+ }
323
342
  .ds-session-list, .ds-session-groups { flex: 1; min-height: 0; overflow-y: auto; padding: var(--space-2); }
324
343
  /* Grouped rows (Today/Yesterday/...) lay out like the flat list; the section
325
344
  label sticks to the top of the scroll area for Claude-Desktop-style headers. */
326
345
  .ds-session-group { display: flex; flex-direction: column; }
327
346
  .ds-session-group-rows { display: flex; flex-direction: column; gap: 2px; }
328
- .ds-session-group-label { position: sticky; top: 0; z-index: 1; background: var(--bg-1, var(--bg)); font-size: var(--fs-tiny); color: var(--fg-3); text-transform: uppercase; letter-spacing: .04em; padding: var(--space-2) var(--space-2) var(--space-1); }
347
+ .ds-session-group-label { position: sticky; top: 0; z-index: 1; background: var(--bg-1, var(--bg)); font-size: var(--fs-tiny); font-weight: 600; color: var(--fg-3); text-transform: uppercase; letter-spacing: var(--tr-caps); padding: var(--space-2) var(--space-2) var(--space-1); }
329
348
  .ds-session-row {
330
349
  position: relative; display: flex; align-items: center; gap: var(--space-2);
331
350
  width: 100%; padding: var(--space-2); min-height: 52px; margin-bottom: 2px;
@@ -356,10 +375,24 @@
356
375
  SessionDashboard — grid of live-session cards.
357
376
  ---------------------------------------------------------------------------- */
358
377
  .ds-dash { display: flex; flex-direction: column; min-height: 0; }
359
- .ds-dash-header { flex: 0 0 auto; display: flex; align-items: center; gap: var(--space-3); padding: var(--space-3) var(--space-4) 0; }
378
+ .ds-dash-header { flex: 0 0 auto; display: flex; align-items: center; gap: var(--space-3); row-gap: var(--space-2); flex-wrap: wrap; padding: var(--space-3) var(--space-4) 0; }
360
379
  .ds-dash-count { font-size: var(--fs-sm); color: var(--fg-2); font-weight: 600; }
361
- .ds-dash-header .btn, .ds-dash-header .btn-primary { margin-left: auto; }
362
- .ds-dash-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(280px, 1fr)); gap: var(--space-3); padding: var(--space-4); }
380
+ /* Stop is a quiet destructive control in chrome, not a page-level red CTA;
381
+ it only goes loud while ARMED (the one-shot press-again confirm). */
382
+ .ds-dash-header .btn, .ds-dash-header .btn-primary {
383
+ margin-left: 0;
384
+ padding: 5px 12px; min-height: 32px; border-radius: var(--r-1); font-weight: 500;
385
+ }
386
+ .ds-dash-header .btn-primary.danger {
387
+ background: transparent; color: var(--warn);
388
+ border: var(--bw-hair) solid var(--warn);
389
+ }
390
+ .ds-dash-header .btn-primary.danger:hover {
391
+ background: color-mix(in oklab, var(--warn) 12%, transparent); color: var(--warn);
392
+ }
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(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)); } }
363
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); }
364
397
  .ds-dash-card.is-error { border-color: var(--flame); }
365
398
  .ds-dash-card-head { display: flex; align-items: center; gap: var(--space-2); }
@@ -385,7 +418,6 @@
385
418
  ---------------------------------------------------------------------------- */
386
419
  .ds-context { display: flex; flex-direction: column; gap: var(--space-3); padding: var(--space-3); }
387
420
  .ds-context .panel { background: var(--bg-2); border: var(--bw-hair) solid var(--bg-3); border-radius: var(--r-2); }
388
- .ds-context .row { font-size: var(--fs-sm); }
389
421
  .ds-context .row .meta { font-family: var(--ff-mono); font-size: var(--fs-tiny); color: var(--fg-2); }
390
422
  .ds-context .row .sub { font-family: var(--ff-mono); font-size: var(--fs-tiny); color: var(--fg-3); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
391
423
  .ds-context-actions { display: flex; gap: var(--space-2); }
@@ -438,7 +470,18 @@ button.chat-composer-context:focus-visible { outline: 2px solid var(--accent); o
438
470
  .ds-dash-status.is-running { color: var(--accent); }
439
471
 
440
472
  /* --- C2: dashboard sort/filter toolbar + stream-state line. --- */
473
+ /* The toolbar is part of the ONE header row (count | heartbeat ... filter,
474
+ sort, errors-only, stop): compact controls that align on a shared 32px
475
+ height, never a stacked full-width form column. */
441
476
  .ds-dash-toolbar { display: flex; align-items: center; gap: var(--space-2); flex-wrap: wrap; }
477
+ .ds-dash-toolbar .ds-search-input {
478
+ width: 200px; min-height: 32px; padding: 5px 10px;
479
+ font-size: var(--fs-sm); border-radius: var(--r-1);
480
+ }
481
+ .ds-dash-toolbar .ds-select, .ds-dash-toolbar select {
482
+ min-height: 32px; padding: 4px 10px; font-size: var(--fs-sm);
483
+ width: auto; border-radius: var(--r-1);
484
+ }
442
485
  .ds-dash-stream { font-size: var(--fs-tiny); color: var(--fg-3); }
443
486
  .ds-dash-stream.is-lost { color: var(--flame); }
444
487
  .ds-dash-stream.is-connecting { color: var(--amber, #d9a93a); }
@@ -644,12 +687,15 @@ button.chat-composer-context:focus-visible { outline: 2px solid var(--accent); o
644
687
  avatar-disc + colored-bubble layout. AgentChat passes flat:true; the demo
645
688
  Chat keeps the bubble layout. Turns are full-width to --measure; the user vs
646
689
  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); }
690
+ /* Center the flat turn at the reading measure so a wide content column does not
691
+ dump a one-sided dead gutter (claude.ai/code centers the thread). Padding
692
+ scales through --density so data-density=compact tightens the thread. */
693
+ .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); }
648
694
  .chat-msg-flat.them { background: color-mix(in oklab, var(--fg) 3%, transparent); }
649
695
  .chat-msg-flat.you { background: none; }
650
696
  .chat-msg-flat .chat-stack { max-width: var(--measure); width: 100%; margin: 0; align-items: stretch; }
651
697
  .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); }
698
+ .chat-role { font-size: var(--fs-tiny); font-weight: 600; text-transform: uppercase; letter-spacing: var(--tr-caps); color: var(--fg-3); margin-bottom: var(--space-1); }
653
699
  .chat-msg-flat.you .chat-role { color: var(--accent); }
654
700
  .chat-msg-flat .chat-bubble { background: none; border: none; border-radius: 0; padding: 0; max-width: 100%; box-shadow: none; transform: none; }
655
701
  .chat-msg-flat.you .chat-bubble { background: none; color: inherit; }
@@ -690,7 +736,7 @@ button.chat-composer-context:focus-visible { outline: 2px solid var(--accent); o
690
736
  .chat-msg .chat-tool.tool-error .chat-tool-status { color: var(--flame); background: color-mix(in oklab, var(--flame) 12%, transparent); }
691
737
  .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
738
  .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); }
739
+ .chat-tool-section-label { font-size: var(--fs-tiny); font-weight: 600; text-transform: uppercase; letter-spacing: var(--tr-caps); color: var(--fg-3); }
694
740
  .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
741
  .chat-tool-pre.is-error { color: var(--flame); }
696
742
  .chat-tool-pre.chat-tool-empty { color: var(--fg-3); }
@@ -729,7 +775,7 @@ button.chat-composer-context:focus-visible { outline: 2px solid var(--accent); o
729
775
 
730
776
  /* Live command-center: status-bucket groups + header breakdown + heartbeat. */
731
777
  .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); }
778
+ .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); }
733
779
  .ds-dash-breakdown { display: flex; align-items: center; gap: var(--space-1); font-size: var(--fs-sm); color: var(--fg-2); }
734
780
  .ds-dash-breakdown .seg.is-running { color: var(--green); font-weight: 600; }
735
781
  .ds-dash-breakdown .seg.is-error { color: var(--flame); font-weight: 600; }
@@ -755,9 +801,9 @@ button.chat-composer-context:focus-visible { outline: 2px solid var(--accent); o
755
801
  .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
802
  .ds-preview-code .token.punctuation { color: var(--fg-2); }
757
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, #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); }
804
+ .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
+ .ds-preview-code .token.atrule, .ds-preview-code .token.attr-value, .ds-preview-code .token.keyword { color: var(--code-keyword, var(--sky)); }
806
+ .ds-preview-code .token.function, .ds-preview-code .token.class-name { color: var(--code-fn, var(--flame)); }
761
807
  .ds-preview-code.has-gutter { display: grid; grid-template-columns: auto minmax(0, 1fr); gap: 0 var(--space-2); }
762
808
  .ds-preview-code.has-gutter code { display: block; min-width: 0; overflow-x: auto; }
763
809
  .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; }
@@ -769,3 +815,39 @@ button.chat-composer-context:focus-visible { outline: 2px solid var(--accent); o
769
815
  background-size: 16px 16px; background-position: 0 0, 0 8px, 8px -8px, -8px 0;
770
816
  }
771
817
  .ds-preview-media.is-actual { max-width: none; max-height: none; }
818
+
819
+ /* ----------------------------------------------------------------------------
820
+ Compact-button tiers — ONE spec for the small quiet rect buttons that eight
821
+ surfaces used to clone with drifting metrics/tones. chat.css loads after
822
+ app-shell.css in the bundle, so these same-specificity rules win by order.
823
+ Tier A (toolbar-grade, 32px) matches .ds-file-toolbar .btn, the reference;
824
+ tier B (inline-row-grade, 24px) for actions inside dense row strips.
825
+ Hover/focus/active-state rules on the originals still apply.
826
+ ---------------------------------------------------------------------------- */
827
+ .row-act, .ds-dash-errors-toggle, .agentchat-export-act, .ds-file-more-btn {
828
+ min-height: 32px; padding: 5px 12px; border-radius: var(--r-1);
829
+ font-family: var(--ff-body); font-size: var(--fs-tiny); font-weight: 500;
830
+ background: transparent; border: var(--bw-hair) solid var(--rule); color: var(--fg-2);
831
+ cursor: pointer;
832
+ }
833
+ .row-act:hover, .ds-dash-errors-toggle:hover, .agentchat-export-act:hover, .ds-file-more-btn:hover {
834
+ background: var(--bg-2); color: var(--fg);
835
+ }
836
+ .agentchat-install-copy, .ds-upload-act, .ds-session-meta-copy {
837
+ min-height: 24px; padding: 2px 8px; border-radius: var(--r-1);
838
+ font-family: var(--ff-body); font-size: var(--fs-tiny);
839
+ background: transparent; border: var(--bw-hair) solid var(--rule); color: var(--fg-3);
840
+ cursor: pointer;
841
+ }
842
+ .agentchat-install-copy:hover, .ds-upload-act:hover, .ds-session-meta-copy:hover {
843
+ background: var(--bg-2); color: var(--fg);
844
+ }
845
+ @media (pointer: coarse) {
846
+ .row-act, .ds-dash-errors-toggle, .agentchat-export-act, .ds-file-more-btn,
847
+ .agentchat-install-copy, .ds-upload-act, .ds-session-meta-copy { min-height: 44px; }
848
+ }
849
+
850
+ /* 11th run: ultrawide widens the reading measure where there is room. */
851
+ @media (min-width: 1600px) {
852
+ .agentchat-thread { --measure: 84ch; }
853
+ }
@@ -35,9 +35,21 @@
35
35
 
36
36
  /* Signals */
37
37
  --sun: #F5C344;
38
- --flame: #FF5A1F;
38
+ /* Error/status tones are theme-tuned: the root values are the LIGHT (paper)
39
+ pair (flame 4.74:1, amber 4.5+:1 on paper); the dark blocks below restore
40
+ the originals (#FF5A1F / #D9A93A) which were tuned on ink and fail on
41
+ paper (2.9:1 / 2.0:1). */
42
+ --flame: #C53E00;
43
+ --amber: #8A6512;
39
44
  --sky: #3A6EFF;
40
45
  --warn: #E0241A;
46
+ /* Syntax-token aliases: light values pass 4.5:1 on paper; the dark blocks
47
+ restore the bright dark-tuned originals. Components reference ONLY these. */
48
+ --code-string: var(--green);
49
+ --code-keyword: #2453C9;
50
+ --code-fn: #B84300;
51
+ --code-str-alt: var(--mascot-deep);
52
+ --code-num: #946300;
41
53
  --danger: oklch(0.55 0.18 25);
42
54
  --success: var(--green-2);
43
55
  --live: var(--green);
@@ -246,6 +258,13 @@ select:focus-visible {
246
258
  --accent-fg: var(--ink);
247
259
  --accent-bright: var(--green-2);
248
260
  --danger: oklch(0.68 0.19 25);
261
+ --flame: #FF5A1F;
262
+ --amber: #D9A93A;
263
+ --code-string: var(--green-2);
264
+ --code-keyword: var(--sky);
265
+ --code-fn: var(--flame);
266
+ --code-str-alt: var(--mascot);
267
+ --code-num: var(--sun);
249
268
  }
250
269
 
251
270
  /* NOTE: the [data-theme="auto"] block below intentionally duplicates the
@@ -272,6 +291,13 @@ select:focus-visible {
272
291
  --accent: var(--accent-bright, var(--green-2));
273
292
  --accent-fg: var(--ink);
274
293
  --accent-bright: var(--green-2);
294
+ --flame: #FF5A1F;
295
+ --amber: #D9A93A;
296
+ --code-string: var(--green-2);
297
+ --code-keyword: var(--sky);
298
+ --code-fn: var(--flame);
299
+ --code-str-alt: var(--mascot);
300
+ --code-num: var(--sun);
275
301
  }
276
302
  }
277
303
 
@@ -310,6 +336,11 @@ select:focus-visible {
310
336
  --cat-sun: inherit;
311
337
  --cat-flame: inherit;
312
338
  --cat-sky: inherit;
339
+ --code-string: inherit;
340
+ --code-keyword: inherit;
341
+ --code-fn: inherit;
342
+ --code-str-alt: inherit;
343
+ --code-num: inherit;
313
344
  }
314
345
 
315
346
  /* ============================================================
@@ -326,6 +357,8 @@ select:focus-visible {
326
357
  --bg: var(--paper); --bg-2: var(--paper-2); --bg-3: var(--paper-3);
327
358
  --fg: var(--ink); --fg-2: var(--ink-2); --fg-3: var(--ink-3);
328
359
  --accent: var(--green); --accent-fg: var(--paper);
360
+ /* A paper island under a dark ancestor must not inherit the dark signal pair. */
361
+ --flame: #C53E00; --amber: #8A6512;
329
362
  }
330
363
 
331
364
  /* thebird — warm-paper brand preset. A first-class swappable theme: it lives