@poodle64/librarian 2026.9.16 → 2026.9.18

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.
@@ -353,13 +353,27 @@
353
353
  align-self: flex-end;
354
354
  }
355
355
 
356
+ /* The reader's own words carry the consuming app's hue, the way every chat
357
+ a person already uses colours THEIR side and leaves the other party
358
+ neutral. It is an identity mark, not decoration: scanning back for "what
359
+ did I ask" is a colour search, not a reading task.
360
+
361
+ --ds-color-primary-solid, falling back to --ds-color-primary, because a
362
+ dark-mode palette lightens its primary so the SAME token can serve as
363
+ coloured text on a dark page. A fill behind light text and text on a dark
364
+ ground want opposite lightness, and a brand asked to be both comes out
365
+ washed — a deep red reads as salmon. An app with a fill-grade brand
366
+ colour declares the solid pair; one that has not is unaffected.
367
+ It stays on the SHORT side of the transcript on purpose — a question is
368
+ a line or two, an answer is paragraphs, so filling the question is an
369
+ accent and filling the answer would be a wall. */
356
370
  .ds-lib-bubble {
357
371
  max-width: 85%;
358
- border: 1px solid var(--ds-color-border);
372
+ border: 1px solid transparent;
359
373
  border-radius: var(--ds-radius-xl);
360
- background: var(--ds-color-surface-3);
374
+ background: var(--ds-color-primary-solid, var(--ds-color-primary));
361
375
  padding: 0.625rem 1rem;
362
- color: var(--ds-color-foreground);
376
+ color: var(--ds-color-primary-solid-foreground, var(--ds-color-primary-foreground));
363
377
  font-size: 1rem;
364
378
  line-height: 1.5rem;
365
379
  overflow-wrap: break-word;
@@ -381,6 +395,7 @@
381
395
  flex-direction: column;
382
396
  gap: 0.75rem;
383
397
  border: 1px solid var(--ds-color-border);
398
+ border-inline-start: 3px solid var(--ds-color-primary);
384
399
  border-radius: var(--ds-radius-xl);
385
400
  background: var(--ds-color-surface-2);
386
401
  padding: 0.875rem 1rem 0.75rem;
@@ -400,8 +415,13 @@
400
415
  align-items: center;
401
416
  justify-content: center;
402
417
  border-radius: var(--ds-radius-full);
403
- background: color-mix(in oklab, var(--ds-color-primary) 18%, transparent);
404
- color: var(--ds-color-foreground);
418
+ /* Opaque, never a translucent tint. An 18% wash of a dark primary over a
419
+ dark surface has almost no luminance separation, so the initial fell
420
+ under the 3:1 floor for a non-text graphic and read as a smudge —
421
+ measured 2.55:1 on a dark-mode host. A solid fill carries the hue AND
422
+ the contrast. */
423
+ background: var(--ds-color-primary-solid, var(--ds-color-primary));
424
+ color: var(--ds-color-primary-solid-foreground, var(--ds-color-primary-foreground));
405
425
  font-size: var(--ds-text-2xs);
406
426
  font-weight: 600;
407
427
  text-transform: uppercase;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@poodle64/librarian",
3
- "version": "2026.9.16",
3
+ "version": "2026.9.18",
4
4
  "description": "An agent's conversation surface as a consumable Svelte 5 package: the stream client, transcript state and self-styling chat components (transcript, composer, markdown) every household app renders instead of rebuilding, speaking as whichever persona the app names.",
5
5
  "type": "module",
6
6
  "license": "MIT",