@jungherz-de/glasskit 1.24.0 → 1.26.0

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/glasskit.css CHANGED
@@ -1,6 +1,6 @@
1
1
  /* ============================================================
2
2
  GLASSKIT COMPONENT LIBRARY
3
- Jungherz GmbH – v1.24.0
3
+ Jungherz GmbH – v1.26.0
4
4
 
5
5
  Features:
6
6
  - Scoped Reset (box-sizing fix)
@@ -94,6 +94,15 @@
94
94
  light theme, to read like the others (measured, see CHANGELOG 1.18.0). */
95
95
  --gl-color-warning-on-surface: color-mix(in srgb, var(--gl-color-warning) 80%, #ffffff);
96
96
 
97
+ /* ---- Primary as text ----
98
+ Text and line icons in the primary colour, straight on the page or the
99
+ glass: links in .glass-prose, the active tab, the primary modal action,
100
+ accent list rows, the value of a range, the hovered and the open
101
+ accordion. It defaults to the primary. A brand that darkens its primary
102
+ for white button text sets a lighter tone here in its dark theme, and
103
+ the buttons keep theirs. */
104
+ --gl-color-primary-text: var(--gl-color-primary);
105
+
97
106
  /* ---- State Surfaces & Borders (badge, chip) ----
98
107
  The scrim sits *behind* the colored tint and makes the chip
99
108
  readable regardless of what shows through the glass. */
@@ -315,6 +324,7 @@
315
324
  --gl-color-success-on-surface: color-mix(in srgb, var(--gl-color-success) 68%, #000000);
316
325
  --gl-color-error-on-surface: color-mix(in srgb, var(--gl-color-error) 82%, #000000);
317
326
  --gl-color-warning-on-surface: color-mix(in srgb, var(--gl-color-warning) 56%, #000000);
327
+ --gl-color-primary-text: var(--gl-color-primary);
318
328
 
319
329
  --gl-state-scrim: rgba(255, 255, 255, 0.30);
320
330
  --gl-color-primary-surface: color-mix(in srgb, var(--gl-color-primary) 25%, transparent);
@@ -420,34 +430,63 @@
420
430
 
421
431
 
422
432
  /* ============================================================
423
- 1d. SURFACE PRESET – SOLID
433
+ 1d. SURFACE PRESETS – SOLID AND TINT
424
434
  ============================================================ */
425
- /* Opt-in, next to the theme and the density: <html data-surface="solid">.
426
- Opaque surfaces without blur and gloss, for admin screens, forms on a
427
- plain background, designs without glass (since 1.24.0). Each surface
428
- takes the colour the glass shows over the theme's middle background,
429
- --gl-color-bg-mid: one surface above another keeps its place in the
430
- order, and a re-branded background carries over. Blur, the inner shine
431
- (--gl-inset-*) and the gloss are off. Borders, drop shadows, the tints
432
- of badges and chips and the dimming overlay stay as they are.
433
-
434
- The bare selector matches <html>, like the density preset. A theme scope
435
+ /* Opt-in, next to the theme and the density, on <html>.
436
+
437
+ data-surface="solid" (since 1.24.0): opaque surfaces without blur and
438
+ gloss, for admin screens, forms on a plain background, designs without
439
+ glass. Each surface takes the colour the glass shows over the theme's
440
+ middle background, --gl-color-bg-mid: one surface above another keeps
441
+ its place in the order, and a re-branded background carries over.
442
+
443
+ data-surface="tint" (since 1.25.0): for a page with a background of its
444
+ own — a brand colour, a photo, a pattern — where a surface mixed over
445
+ --gl-color-bg-mid would stand out as a foreign block. The surfaces in the
446
+ flow of the page become see-through tints of the text colour, nothing
447
+ blurred: a field on a card stays as see-through as the card, and its
448
+ contrast follows the text. What lies over other content keeps the solid
449
+ values: modal, sheet, popover, toast and the tab bars (1e). So do the
450
+ milk surfaces, light plates for dark ink: a see-through secondary button
451
+ would lose its text on a dark page.
452
+
453
+ Both turn off the blur, the inner shine (--gl-inset-*) and the gloss.
454
+ Borders, drop shadows, the tints of badges and chips and the dimming
455
+ overlay stay as they are; a blur behind dialogs stays where a project
456
+ sets --gl-blur-overlay.
457
+
458
+ The bare selectors match <html>, like the density preset. A theme scope
435
459
  inside the page — an element with its own data-theme — re-declares its
436
- theme's glass tokens, so the preset names it too. build-styles-js.mjs
437
- moves both blocks into tokensCss, after the density block. */
460
+ theme's glass tokens, so the presets name it too. build-styles-js.mjs
461
+ moves the three blocks into tokensCss, after the density block. */
462
+
463
+ /* Solid, dark theme — and the ground of the tint preset. The solid
464
+ surfaces are kept under names of their own as well, --gl-solid-*: the
465
+ panels of the tint preset take them from there (1e). */
438
466
  [data-surface="solid"],
439
- [data-surface="solid"] [data-theme="dark"] {
440
- --gl-surface-1: color-mix(in srgb, #ffffff 8%, var(--gl-color-bg-mid));
441
- --gl-surface-2: color-mix(in srgb, #ffffff 10%, var(--gl-color-bg-mid));
442
- --gl-surface-3: color-mix(in srgb, #ffffff 14%, var(--gl-color-bg-mid));
443
- --gl-surface-4: color-mix(in srgb, #ffffff 16%, var(--gl-color-bg-mid));
444
- --gl-surface-5: color-mix(in srgb, #ffffff 22%, var(--gl-color-bg-mid));
467
+ [data-surface="tint"],
468
+ [data-surface="solid"] [data-theme="dark"],
469
+ [data-surface="tint"] [data-theme="dark"] {
470
+ --gl-solid-surface-1: color-mix(in srgb, #ffffff 8%, var(--gl-color-bg-mid));
471
+ --gl-solid-surface-2: color-mix(in srgb, #ffffff 10%, var(--gl-color-bg-mid));
472
+ --gl-solid-surface-3: color-mix(in srgb, #ffffff 14%, var(--gl-color-bg-mid));
473
+ --gl-solid-surface-4: color-mix(in srgb, #ffffff 16%, var(--gl-color-bg-mid));
474
+ --gl-solid-surface-5: color-mix(in srgb, #ffffff 22%, var(--gl-color-bg-mid));
475
+ --gl-solid-card-glow-top: color-mix(in srgb, #ffffff 32%, var(--gl-color-bg-mid));
476
+ --gl-solid-card-glow-mid: color-mix(in srgb, #ffffff 22%, var(--gl-color-bg-mid));
477
+ --gl-solid-card-glow-low: color-mix(in srgb, #ffffff 14%, var(--gl-color-bg-mid));
478
+ --gl-solid-card-glow-bottom: color-mix(in srgb, #ffffff 8%, var(--gl-color-bg-mid));
479
+ --gl-surface-1: var(--gl-solid-surface-1);
480
+ --gl-surface-2: var(--gl-solid-surface-2);
481
+ --gl-surface-3: var(--gl-solid-surface-3);
482
+ --gl-surface-4: var(--gl-solid-surface-4);
483
+ --gl-surface-5: var(--gl-solid-surface-5);
445
484
  --gl-surface-milk: color-mix(in srgb, #ffffff 55%, var(--gl-color-bg-mid));
446
485
  --gl-surface-milk-strong: color-mix(in srgb, #ffffff 75%, var(--gl-color-bg-mid));
447
- --gl-card-glow-top: color-mix(in srgb, #ffffff 32%, var(--gl-color-bg-mid));
448
- --gl-card-glow-mid: color-mix(in srgb, #ffffff 22%, var(--gl-color-bg-mid));
449
- --gl-card-glow-low: color-mix(in srgb, #ffffff 14%, var(--gl-color-bg-mid));
450
- --gl-card-glow-bottom: color-mix(in srgb, #ffffff 8%, var(--gl-color-bg-mid));
486
+ --gl-card-glow-top: var(--gl-solid-card-glow-top);
487
+ --gl-card-glow-mid: var(--gl-solid-card-glow-mid);
488
+ --gl-card-glow-low: var(--gl-solid-card-glow-low);
489
+ --gl-card-glow-bottom: var(--gl-solid-card-glow-bottom);
451
490
  --gl-toggle-thumb-bg: linear-gradient(to bottom, #ffffff 0%, #f0f0f0 100%);
452
491
  --gl-shadow-glow: 0 4px 16px rgba(0, 0, 0, 0.15);
453
492
  --gl-blur: 0px;
@@ -464,20 +503,33 @@
464
503
  --gl-gloss-progress: none;
465
504
  --gl-range-thumb-border: 2px solid transparent;
466
505
  }
506
+ /* Solid, light theme — and the tint preset's ground in it. */
467
507
  [data-surface="solid"][data-theme="light"],
468
508
  [data-surface="solid"] [data-theme="light"],
469
- [data-theme="light"] [data-surface="solid"] {
470
- --gl-surface-1: color-mix(in srgb, #ffffff 50%, var(--gl-color-bg-mid));
471
- --gl-surface-2: color-mix(in srgb, #ffffff 60%, var(--gl-color-bg-mid));
472
- --gl-surface-3: color-mix(in srgb, #ffffff 70%, var(--gl-color-bg-mid));
473
- --gl-surface-4: color-mix(in srgb, #ffffff 75%, var(--gl-color-bg-mid));
474
- --gl-surface-5: color-mix(in srgb, #ffffff 85%, var(--gl-color-bg-mid));
509
+ [data-theme="light"] [data-surface="solid"],
510
+ [data-surface="tint"][data-theme="light"],
511
+ [data-surface="tint"] [data-theme="light"],
512
+ [data-theme="light"] [data-surface="tint"] {
513
+ --gl-solid-surface-1: color-mix(in srgb, #ffffff 50%, var(--gl-color-bg-mid));
514
+ --gl-solid-surface-2: color-mix(in srgb, #ffffff 60%, var(--gl-color-bg-mid));
515
+ --gl-solid-surface-3: color-mix(in srgb, #ffffff 70%, var(--gl-color-bg-mid));
516
+ --gl-solid-surface-4: color-mix(in srgb, #ffffff 75%, var(--gl-color-bg-mid));
517
+ --gl-solid-surface-5: color-mix(in srgb, #ffffff 85%, var(--gl-color-bg-mid));
518
+ --gl-solid-card-glow-top: color-mix(in srgb, #ffffff 90%, var(--gl-color-bg-mid));
519
+ --gl-solid-card-glow-mid: color-mix(in srgb, #ffffff 78%, var(--gl-color-bg-mid));
520
+ --gl-solid-card-glow-low: color-mix(in srgb, #ffffff 65%, var(--gl-color-bg-mid));
521
+ --gl-solid-card-glow-bottom: color-mix(in srgb, #ffffff 50%, var(--gl-color-bg-mid));
522
+ --gl-surface-1: var(--gl-solid-surface-1);
523
+ --gl-surface-2: var(--gl-solid-surface-2);
524
+ --gl-surface-3: var(--gl-solid-surface-3);
525
+ --gl-surface-4: var(--gl-solid-surface-4);
526
+ --gl-surface-5: var(--gl-solid-surface-5);
475
527
  --gl-surface-milk: color-mix(in srgb, #ffffff 85%, var(--gl-color-bg-mid));
476
528
  --gl-surface-milk-strong: color-mix(in srgb, #ffffff 92%, var(--gl-color-bg-mid));
477
- --gl-card-glow-top: color-mix(in srgb, #ffffff 90%, var(--gl-color-bg-mid));
478
- --gl-card-glow-mid: color-mix(in srgb, #ffffff 78%, var(--gl-color-bg-mid));
479
- --gl-card-glow-low: color-mix(in srgb, #ffffff 65%, var(--gl-color-bg-mid));
480
- --gl-card-glow-bottom: color-mix(in srgb, #ffffff 50%, var(--gl-color-bg-mid));
529
+ --gl-card-glow-top: var(--gl-solid-card-glow-top);
530
+ --gl-card-glow-mid: var(--gl-solid-card-glow-mid);
531
+ --gl-card-glow-low: var(--gl-solid-card-glow-low);
532
+ --gl-card-glow-bottom: var(--gl-solid-card-glow-bottom);
481
533
  --gl-shadow-glow: 0 2px 8px rgba(0, 0, 0, 0.05),
482
534
  0 4px 12px rgba(0, 0, 0, 0.04);
483
535
  --gl-inset-subtle: inset 0 0 0 transparent;
@@ -485,6 +537,45 @@
485
537
  --gl-inset-strong: inset 0 0 0 transparent;
486
538
  --gl-inset-milk: inset 0 0 0 transparent;
487
539
  }
540
+ /* Tint: the surfaces in the flow of the page become see-through tints of
541
+ the text colour. One block for both themes: the text colour is the
542
+ theme's. It comes after the solid blocks and outranks the light one. */
543
+ :root[data-surface="tint"],
544
+ [data-surface="tint"][data-theme],
545
+ [data-surface="tint"] [data-theme],
546
+ [data-theme] [data-surface="tint"] {
547
+ --gl-surface-1: color-mix(in srgb, var(--gl-color-text) 4%, transparent);
548
+ --gl-surface-2: color-mix(in srgb, var(--gl-color-text) 6%, transparent);
549
+ --gl-surface-3: color-mix(in srgb, var(--gl-color-text) 9%, transparent);
550
+ --gl-surface-4: color-mix(in srgb, var(--gl-color-text) 12%, transparent);
551
+ --gl-surface-5: color-mix(in srgb, var(--gl-color-text) 16%, transparent);
552
+ --gl-card-glow-top: color-mix(in srgb, var(--gl-color-text) 16%, transparent);
553
+ --gl-card-glow-mid: color-mix(in srgb, var(--gl-color-text) 12%, transparent);
554
+ --gl-card-glow-low: color-mix(in srgb, var(--gl-color-text) 9%, transparent);
555
+ --gl-card-glow-bottom: color-mix(in srgb, var(--gl-color-text) 6%, transparent);
556
+ }
557
+
558
+
559
+ /* ============================================================
560
+ 1e. TINT PRESET – PANELS
561
+ ============================================================ */
562
+ /* What lies over other content stays opaque under data-surface="tint":
563
+ it takes the solid surfaces the preset keeps under --gl-solid-*, and so
564
+ does what sits inside it — a field in a modal, a row in a popover. A
565
+ component rule, not a token block, so that it also matches inside the
566
+ shadow roots of GlassKit Elements, on the theme wrapper that mirrors
567
+ data-surface. */
568
+ [data-surface="tint"] :is(.glass-modal, .glass-sheet, .glass-popover, .glass-toast, .glass-tab-bar, .glass-tab-bar__accessory) {
569
+ --gl-surface-1: var(--gl-solid-surface-1);
570
+ --gl-surface-2: var(--gl-solid-surface-2);
571
+ --gl-surface-3: var(--gl-solid-surface-3);
572
+ --gl-surface-4: var(--gl-solid-surface-4);
573
+ --gl-surface-5: var(--gl-solid-surface-5);
574
+ --gl-card-glow-top: var(--gl-solid-card-glow-top);
575
+ --gl-card-glow-mid: var(--gl-solid-card-glow-mid);
576
+ --gl-card-glow-low: var(--gl-solid-card-glow-low);
577
+ --gl-card-glow-bottom: var(--gl-solid-card-glow-bottom);
578
+ }
488
579
 
489
580
 
490
581
  /* ============================================================
@@ -802,6 +893,9 @@ a.glass-btn { display: inline-flex; text-decoration: none; }
802
893
  color: var(--gl-icon-strong);
803
894
  padding-inline-start: var(--gl-space-2xs);
804
895
  }
896
+ /* Without text a label takes no room: an empty one kept the group's gap
897
+ above its field (until 1.24.0). */
898
+ .glass-label:empty { display: none; }
805
899
 
806
900
  .glass-input {
807
901
  width: 100%; height: var(--gl-control-height, 52px);
@@ -818,7 +912,15 @@ a.glass-btn { display: inline-flex; text-decoration: none; }
818
912
  outline: none;
819
913
  box-shadow: var(--gl-inset-subtle);
820
914
  -webkit-tap-highlight-color: transparent;
915
+ /* A value or placeholder too long for the field ends in an ellipsis
916
+ while the field is not being edited (since 1.25.0). */
917
+ text-overflow: ellipsis;
821
918
  }
919
+ /* The browser's own picker button of a date or time field, and the arrow
920
+ of a datalist, unless --gl-input-picker-icon is none (since 1.25.0) —
921
+ when the field's prefix is the picker, for instance; call showPicker()
922
+ from it then. Unset, revert keeps each browser's own. */
923
+ .glass-input::-webkit-calendar-picker-indicator { display: var(--gl-input-picker-icon, revert); }
822
924
 
823
925
  .glass-input::placeholder { color: var(--gl-placeholder); }
824
926
 
@@ -931,7 +1033,13 @@ a.glass-btn { display: inline-flex; text-decoration: none; }
931
1033
  transition: var(--gl-transition);
932
1034
  outline: none;
933
1035
  box-shadow: var(--gl-inset-subtle);
1036
+ /* --gl-textarea-field-sizing: content lets text areas grow with their
1037
+ text (since 1.25.0); off by default, because it ignores rows. Browsers
1038
+ without field-sizing keep the fixed height. */
1039
+ field-sizing: var(--gl-textarea-field-sizing, fixed);
934
1040
  }
1041
+ /* Nothing to resize in a text area that cannot be edited (since 1.25.0). */
1042
+ .glass-textarea:read-only { resize: none; }
935
1043
  .glass-textarea::placeholder { color: var(--gl-placeholder); }
936
1044
  .glass-textarea:focus {
937
1045
  border-color: var(--gl-border-focus);
@@ -1031,7 +1139,9 @@ a.glass-btn { display: inline-flex; text-decoration: none; }
1031
1139
 
1032
1140
  .glass-toggle__track {
1033
1141
  position: relative; width: var(--gl-toggle-width, 52px); height: var(--gl-toggle-height, 30px);
1034
- background: var(--gl-surface-2);
1142
+ /* --gl-toggle-track-bg and -checked (since 1.25.0): a stronger track for
1143
+ a page without glass, where the surface can be hard to see. */
1144
+ background: var(--gl-toggle-track-bg, var(--gl-surface-2));
1035
1145
  backdrop-filter: blur(var(--gl-blur-soft));
1036
1146
  -webkit-backdrop-filter: blur(var(--gl-blur-soft));
1037
1147
  border: 1.5px solid var(--gl-border-medium);
@@ -1059,9 +1169,9 @@ a.glass-btn { display: inline-flex; text-decoration: none; }
1059
1169
  }
1060
1170
 
1061
1171
  .glass-toggle__input:checked + .glass-toggle__track {
1062
- background: linear-gradient(135deg,
1172
+ background: var(--gl-toggle-track-bg-checked, linear-gradient(135deg,
1063
1173
  var(--gl-color-primary) 0%, var(--gl-color-primary-dark) 100%
1064
- );
1174
+ ));
1065
1175
  border-color: var(--gl-border-warm);
1066
1176
  }
1067
1177
 
@@ -1180,12 +1290,15 @@ a.glass-btn { display: inline-flex; text-decoration: none; }
1180
1290
  margin-top: max(0px, calc((1lh - var(--gl-check-size, 24px)) / 2));
1181
1291
  }
1182
1292
 
1293
+ /* --gl-radio-* (since 1.25.0): fill, rim and dot, for a look without glass —
1294
+ a ring in the text colour that turns the accent colour when checked, say.
1295
+ The two rims are whole border values, so give both the same width. */
1183
1296
  .glass-radio__circle {
1184
1297
  width: var(--gl-check-size, 24px); height: var(--gl-check-size, 24px);
1185
1298
  border-radius: var(--gl-radius-pill);
1186
- background: var(--gl-surface-2);
1299
+ background: var(--gl-radio-bg, var(--gl-surface-2));
1187
1300
  backdrop-filter: blur(var(--gl-blur-soft));
1188
- border: 1.5px solid var(--gl-border-medium);
1301
+ border: var(--gl-radio-border, 1.5px solid var(--gl-border-medium));
1189
1302
  display: flex; align-items: center; justify-content: center;
1190
1303
  transition: var(--gl-transition);
1191
1304
  box-shadow: var(--gl-inset-subtle);
@@ -1194,18 +1307,18 @@ a.glass-btn { display: inline-flex; text-decoration: none; }
1194
1307
  }
1195
1308
 
1196
1309
  .glass-radio__dot {
1197
- width: 10px; height: 10px;
1310
+ width: var(--gl-radio-dot-size, 10px); height: var(--gl-radio-dot-size, 10px);
1198
1311
  border-radius: var(--gl-radius-pill);
1199
- background: white;
1312
+ background: var(--gl-radio-dot-color, white);
1200
1313
  opacity: 0; transform: scale(0);
1201
1314
  transition: var(--gl-transition-fast);
1202
1315
  }
1203
1316
 
1204
1317
  .glass-radio__input:checked + .glass-radio__circle {
1205
- background: linear-gradient(135deg,
1318
+ background: var(--gl-radio-bg-checked, linear-gradient(135deg,
1206
1319
  var(--gl-color-primary) 0%, var(--gl-color-primary-dark) 100%
1207
- );
1208
- border-color: var(--gl-border-warm);
1320
+ ));
1321
+ border: var(--gl-radio-border-checked, 1.5px solid var(--gl-border-warm));
1209
1322
  }
1210
1323
  .glass-radio__input:checked + .glass-radio__circle .glass-radio__dot { opacity: 1; transform: scale(1); }
1211
1324
  .glass-radio__input:focus-visible + .glass-radio__circle { box-shadow: var(--gl-shadow-focus); }
@@ -1231,7 +1344,7 @@ a.glass-btn { display: inline-flex; text-decoration: none; }
1231
1344
  .glass-range-value {
1232
1345
  font-size: var(--gl-font-size-sm);
1233
1346
  font-weight: var(--gl-font-weight-semibold);
1234
- color: var(--gl-color-primary);
1347
+ color: var(--gl-color-primary-text);
1235
1348
  font-variant-numeric: tabular-nums;
1236
1349
  }
1237
1350
 
@@ -1353,11 +1466,15 @@ a.glass-btn { display: inline-flex; text-decoration: none; }
1353
1466
  /* ============================================================
1354
1467
  16. MODAL
1355
1468
  ============================================================ */
1469
+ /* The dimmer behind a dialog blurs with --gl-blur-overlay where a project
1470
+ sets it, else with --gl-blur-soft (since 1.25.0). The surface presets set
1471
+ the blur tokens to 0 but leave this one alone: a blurred dimmer suits a
1472
+ page without glass as well. */
1356
1473
  .glass-modal-overlay {
1357
1474
  position: fixed; inset: 0;
1358
1475
  background: var(--gl-surface-overlay);
1359
- backdrop-filter: blur(var(--gl-blur-soft));
1360
- -webkit-backdrop-filter: blur(var(--gl-blur-soft));
1476
+ backdrop-filter: blur(var(--gl-blur-overlay, var(--gl-blur-soft)));
1477
+ -webkit-backdrop-filter: blur(var(--gl-blur-overlay, var(--gl-blur-soft)));
1361
1478
  display: flex; align-items: center; justify-content: center;
1362
1479
  padding: var(--gl-space-lg); z-index: 1000;
1363
1480
  opacity: 0; pointer-events: none;
@@ -1420,7 +1537,7 @@ dialog.glass-modal-overlay::backdrop { background: transparent; }
1420
1537
  .glass-modal__action:disabled { opacity: 0.45; cursor: not-allowed; }
1421
1538
  .glass-modal__action:disabled:hover { background: transparent; }
1422
1539
  .glass-modal__action + .glass-modal__action { border-inline-start: 1px solid var(--gl-border-subtle); }
1423
- .glass-modal__action--primary { color: var(--gl-color-primary); font-weight: var(--gl-font-weight-semibold); }
1540
+ .glass-modal__action--primary { color: var(--gl-color-primary-text); font-weight: var(--gl-font-weight-semibold); }
1424
1541
  .glass-modal__action--danger { color: var(--gl-color-error); font-weight: var(--gl-font-weight-semibold); }
1425
1542
 
1426
1543
 
@@ -1595,11 +1712,14 @@ dialog.glass-modal-overlay::backdrop { background: transparent; }
1595
1712
  letter-spacing: 0.2px;
1596
1713
  }
1597
1714
 
1715
+ /* --gl-tab-bar-active-color, where set, colours the active icon and label
1716
+ alone: the spotlight lightens the active item more than any other surface.
1717
+ Glow, dot and spotlight stay in the primary. */
1598
1718
  .glass-tab-bar__item.is-active .glass-tab-bar__icon svg {
1599
- stroke: var(--gl-color-primary);
1719
+ stroke: var(--gl-tab-bar-active-color, var(--gl-color-primary-text));
1600
1720
  filter: drop-shadow(0 0 6px color-mix(in srgb, var(--gl-color-primary) 35%, transparent));
1601
1721
  }
1602
- .glass-tab-bar__item.is-active .glass-tab-bar__label { color: var(--gl-color-primary); }
1722
+ .glass-tab-bar__item.is-active .glass-tab-bar__label { color: var(--gl-tab-bar-active-color, var(--gl-color-primary-text)); }
1603
1723
 
1604
1724
  .glass-tab-bar__item.is-active .glass-tab-bar__icon::after {
1605
1725
  content: '';
@@ -1810,7 +1930,7 @@ dialog.glass-modal-overlay::backdrop { background: transparent; }
1810
1930
  -webkit-tap-highlight-color: transparent;
1811
1931
  }
1812
1932
 
1813
- .glass-accordion__trigger:hover { color: var(--gl-color-primary); }
1933
+ .glass-accordion__trigger:hover { color: var(--gl-color-primary-text); }
1814
1934
 
1815
1935
  .glass-accordion__trigger-icon { display: flex; align-items: center; justify-content: center; flex-shrink: 0; }
1816
1936
 
@@ -1823,7 +1943,7 @@ dialog.glass-modal-overlay::backdrop { background: transparent; }
1823
1943
 
1824
1944
  .glass-accordion__item.is-open .glass-accordion__trigger-icon svg {
1825
1945
  transform: rotate(180deg);
1826
- stroke: var(--gl-color-primary);
1946
+ stroke: var(--gl-color-primary-text);
1827
1947
  }
1828
1948
 
1829
1949
  .glass-accordion__content {
@@ -2211,7 +2331,7 @@ dialog.glass-modal-overlay::backdrop { background: transparent; }
2211
2331
  .glass-list__item--danger .glass-list__title,
2212
2332
  .glass-list__item--danger .glass-list__leading { color: inherit; }
2213
2333
 
2214
- .glass-list__item--accent { color: var(--gl-color-primary); }
2334
+ .glass-list__item--accent { color: var(--gl-color-primary-text); }
2215
2335
  .glass-list__item--accent .glass-list__title,
2216
2336
  .glass-list__item--accent .glass-list__leading { color: inherit; }
2217
2337
 
@@ -2407,7 +2527,7 @@ dialog.glass-modal-overlay::backdrop { background: transparent; }
2407
2527
  .glass-prose ul, .glass-prose ol { padding-inline-start: 1.3em; }
2408
2528
  .glass-prose strong { color: var(--gl-color-text-heading); }
2409
2529
  /* Links in running text are underlined: colour alone does not mark them. */
2410
- .glass-prose a { color: var(--gl-color-primary); text-decoration: underline; text-underline-offset: 2px; }
2530
+ .glass-prose a { color: var(--gl-color-primary-text); text-decoration: underline; text-underline-offset: 2px; }
2411
2531
  .glass-prose code {
2412
2532
  font-family: ui-monospace, 'SF Mono', Menlo, monospace; font-size: 0.9em;
2413
2533
  background: var(--gl-surface-2); padding: 1px 5px; border-radius: 4px;
@@ -2566,8 +2686,9 @@ dialog.glass-modal-overlay::backdrop { background: transparent; }
2566
2686
  position: fixed; inset: 0; z-index: 1000;
2567
2687
  display: flex; align-items: flex-end; justify-content: center;
2568
2688
  background: var(--gl-surface-overlay);
2569
- backdrop-filter: blur(var(--gl-blur-soft));
2570
- -webkit-backdrop-filter: blur(var(--gl-blur-soft));
2689
+ /* Like the modal's dimmer: --gl-blur-overlay where set (1.25.0). */
2690
+ backdrop-filter: blur(var(--gl-blur-overlay, var(--gl-blur-soft)));
2691
+ -webkit-backdrop-filter: blur(var(--gl-blur-overlay, var(--gl-blur-soft)));
2571
2692
  font-family: var(--gl-font-family);
2572
2693
  -webkit-font-smoothing: antialiased;
2573
2694
  opacity: 0;