@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/CHANGELOG.md +35 -1
- package/README.md +42 -7
- package/SKILL.md +38 -3
- package/glasskit-styles.js +3 -3
- package/glasskit.css +177 -56
- package/glasskit.min.css +2 -2
- package/glasskit.min.css.map +1 -1
- package/package.json +1 -1
- package/theme-override.css +24 -0
package/glasskit.css
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/* ============================================================
|
|
2
2
|
GLASSKIT COMPONENT LIBRARY
|
|
3
|
-
Jungherz GmbH – v1.
|
|
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
|
|
433
|
+
1d. SURFACE PRESETS – SOLID AND TINT
|
|
424
434
|
============================================================ */
|
|
425
|
-
/* Opt-in, next to the theme and the density
|
|
426
|
-
|
|
427
|
-
|
|
428
|
-
|
|
429
|
-
|
|
430
|
-
|
|
431
|
-
|
|
432
|
-
|
|
433
|
-
|
|
434
|
-
|
|
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
|
|
437
|
-
moves
|
|
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="
|
|
440
|
-
|
|
441
|
-
|
|
442
|
-
--gl-surface-
|
|
443
|
-
--gl-surface-
|
|
444
|
-
--gl-surface-
|
|
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:
|
|
448
|
-
--gl-card-glow-mid:
|
|
449
|
-
--gl-card-glow-low:
|
|
450
|
-
--gl-card-glow-bottom:
|
|
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
|
-
|
|
471
|
-
|
|
472
|
-
|
|
473
|
-
--gl-surface-
|
|
474
|
-
--gl-surface-
|
|
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:
|
|
478
|
-
--gl-card-glow-mid:
|
|
479
|
-
--gl-card-glow-low:
|
|
480
|
-
--gl-card-glow-bottom:
|
|
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
|
-
|
|
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
|
|
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
|
-
|
|
2570
|
-
|
|
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;
|