anentrypoint-design 0.0.208 → 0.0.209

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 {
@@ -125,7 +132,7 @@
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,9 +375,22 @@
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; }
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); }
362
394
  .ds-dash-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(280px, 1fr)); gap: var(--space-3); padding: var(--space-4); }
363
395
  .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
396
  .ds-dash-card.is-error { border-color: var(--flame); }
@@ -385,7 +417,6 @@
385
417
  ---------------------------------------------------------------------------- */
386
418
  .ds-context { display: flex; flex-direction: column; gap: var(--space-3); padding: var(--space-3); }
387
419
  .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
420
  .ds-context .row .meta { font-family: var(--ff-mono); font-size: var(--fs-tiny); color: var(--fg-2); }
390
421
  .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
422
  .ds-context-actions { display: flex; gap: var(--space-2); }
@@ -438,7 +469,18 @@ button.chat-composer-context:focus-visible { outline: 2px solid var(--accent); o
438
469
  .ds-dash-status.is-running { color: var(--accent); }
439
470
 
440
471
  /* --- C2: dashboard sort/filter toolbar + stream-state line. --- */
472
+ /* The toolbar is part of the ONE header row (count | heartbeat ... filter,
473
+ sort, errors-only, stop): compact controls that align on a shared 32px
474
+ height, never a stacked full-width form column. */
441
475
  .ds-dash-toolbar { display: flex; align-items: center; gap: var(--space-2); flex-wrap: wrap; }
476
+ .ds-dash-toolbar .ds-search-input {
477
+ width: 200px; min-height: 32px; padding: 5px 10px;
478
+ font-size: var(--fs-sm); border-radius: var(--r-1);
479
+ }
480
+ .ds-dash-toolbar .ds-select, .ds-dash-toolbar select {
481
+ min-height: 32px; padding: 4px 10px; font-size: var(--fs-sm);
482
+ width: auto; border-radius: var(--r-1);
483
+ }
442
484
  .ds-dash-stream { font-size: var(--fs-tiny); color: var(--fg-3); }
443
485
  .ds-dash-stream.is-lost { color: var(--flame); }
444
486
  .ds-dash-stream.is-connecting { color: var(--amber, #d9a93a); }
@@ -649,7 +691,7 @@ button.chat-composer-context:focus-visible { outline: 2px solid var(--accent); o
649
691
  .chat-msg-flat.you { background: none; }
650
692
  .chat-msg-flat .chat-stack { max-width: var(--measure); width: 100%; margin: 0; align-items: stretch; }
651
693
  .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); }
694
+ .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
695
  .chat-msg-flat.you .chat-role { color: var(--accent); }
654
696
  .chat-msg-flat .chat-bubble { background: none; border: none; border-radius: 0; padding: 0; max-width: 100%; box-shadow: none; transform: none; }
655
697
  .chat-msg-flat.you .chat-bubble { background: none; color: inherit; }
@@ -690,7 +732,7 @@ button.chat-composer-context:focus-visible { outline: 2px solid var(--accent); o
690
732
  .chat-msg .chat-tool.tool-error .chat-tool-status { color: var(--flame); background: color-mix(in oklab, var(--flame) 12%, transparent); }
691
733
  .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
734
  .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); }
735
+ .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
736
  .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
737
  .chat-tool-pre.is-error { color: var(--flame); }
696
738
  .chat-tool-pre.chat-tool-empty { color: var(--fg-3); }
@@ -729,7 +771,7 @@ button.chat-composer-context:focus-visible { outline: 2px solid var(--accent); o
729
771
 
730
772
  /* Live command-center: status-bucket groups + header breakdown + heartbeat. */
731
773
  .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); }
774
+ .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
775
  .ds-dash-breakdown { display: flex; align-items: center; gap: var(--space-1); font-size: var(--fs-sm); color: var(--fg-2); }
734
776
  .ds-dash-breakdown .seg.is-running { color: var(--green); font-weight: 600; }
735
777
  .ds-dash-breakdown .seg.is-error { color: var(--flame); font-weight: 600; }
@@ -755,9 +797,9 @@ button.chat-composer-context:focus-visible { outline: 2px solid var(--accent); o
755
797
  .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
798
  .ds-preview-code .token.punctuation { color: var(--fg-2); }
757
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); }
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); }
800
+ .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
+ .ds-preview-code .token.atrule, .ds-preview-code .token.attr-value, .ds-preview-code .token.keyword { color: var(--code-keyword, var(--sky)); }
802
+ .ds-preview-code .token.function, .ds-preview-code .token.class-name { color: var(--code-fn, var(--flame)); }
761
803
  .ds-preview-code.has-gutter { display: grid; grid-template-columns: auto minmax(0, 1fr); gap: 0 var(--space-2); }
762
804
  .ds-preview-code.has-gutter code { display: block; min-width: 0; overflow-x: auto; }
763
805
  .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 +811,34 @@ button.chat-composer-context:focus-visible { outline: 2px solid var(--accent); o
769
811
  background-size: 16px 16px; background-position: 0 0, 0 8px, 8px -8px, -8px 0;
770
812
  }
771
813
  .ds-preview-media.is-actual { max-width: none; max-height: none; }
814
+
815
+ /* ----------------------------------------------------------------------------
816
+ Compact-button tiers — ONE spec for the small quiet rect buttons that eight
817
+ surfaces used to clone with drifting metrics/tones. chat.css loads after
818
+ app-shell.css in the bundle, so these same-specificity rules win by order.
819
+ Tier A (toolbar-grade, 32px) matches .ds-file-toolbar .btn, the reference;
820
+ tier B (inline-row-grade, 24px) for actions inside dense row strips.
821
+ Hover/focus/active-state rules on the originals still apply.
822
+ ---------------------------------------------------------------------------- */
823
+ .row-act, .ds-dash-errors-toggle, .agentchat-export-act, .ds-file-more-btn {
824
+ min-height: 32px; padding: 5px 12px; border-radius: var(--r-1);
825
+ font-family: var(--ff-body); font-size: var(--fs-tiny); font-weight: 500;
826
+ background: transparent; border: var(--bw-hair) solid var(--rule); color: var(--fg-2);
827
+ cursor: pointer;
828
+ }
829
+ .row-act:hover, .ds-dash-errors-toggle:hover, .agentchat-export-act:hover, .ds-file-more-btn:hover {
830
+ background: var(--bg-2); color: var(--fg);
831
+ }
832
+ .agentchat-install-copy, .ds-upload-act, .ds-session-meta-copy {
833
+ min-height: 24px; padding: 2px 8px; border-radius: var(--r-1);
834
+ font-family: var(--ff-body); font-size: var(--fs-tiny);
835
+ background: transparent; border: var(--bw-hair) solid var(--rule); color: var(--fg-3);
836
+ cursor: pointer;
837
+ }
838
+ .agentchat-install-copy:hover, .ds-upload-act:hover, .ds-session-meta-copy:hover {
839
+ background: var(--bg-2); color: var(--fg);
840
+ }
841
+ @media (pointer: coarse) {
842
+ .row-act, .ds-dash-errors-toggle, .agentchat-export-act, .ds-file-more-btn,
843
+ .agentchat-install-copy, .ds-upload-act, .ds-session-meta-copy { min-height: 44px; }
844
+ }
@@ -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