@semanticus/semanticus-css 0.4.0 → 0.7.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.
Files changed (44) hide show
  1. package/README.md +4 -4
  2. package/dist/semanticus-semantics.css +1 -1
  3. package/dist/semanticus-utilities.css +2 -2
  4. package/dist/semanticus-variants.css +1 -1
  5. package/dist/semanticus.css +2 -2
  6. package/dist/semanticus.size.slim.css +1 -1
  7. package/package.json +5 -5
  8. package/src/index.css +4 -4
  9. package/src/semantics/_article.css +10 -4
  10. package/src/semantics/_aside.css +16 -0
  11. package/src/semantics/_body.css +5 -7
  12. package/src/semantics/_button.css +25 -1
  13. package/src/semantics/_details.css +7 -8
  14. package/src/semantics/_dialog.css +11 -17
  15. package/src/semantics/_footer.css +12 -0
  16. package/src/semantics/_header.css +12 -0
  17. package/src/semantics/_links.css +17 -0
  18. package/src/semantics/_main.css +8 -1
  19. package/src/semantics/_nav.css +55 -88
  20. package/src/semantics/_role-tooltip.css +1 -1
  21. package/src/semantics/_section.css +3 -0
  22. package/src/semantics/_typography.css +15 -6
  23. package/src/semantics/index.css +1 -1
  24. package/src/semantics/modules.css +3 -0
  25. package/src/sizes/slim.css +31 -2
  26. package/src/utilities/_variables.css +5 -0
  27. package/src/utilities/colors/_background-colors.css +39 -7
  28. package/src/utilities/colors/_text-colors.css +108 -18
  29. package/src/utilities/index.css +2 -2
  30. package/src/utilities/sizing/_height.css +4 -0
  31. package/src/utilities/sizing/_width.css +8 -0
  32. package/src/{_variables.css → variables/_all.css} +17 -145
  33. package/src/variables/_shared.css +121 -0
  34. package/src/variants/_card.css +4 -0
  35. package/src/variants/_contained.css +43 -0
  36. package/src/variants/_container.css +1 -1
  37. package/src/variants/_contrast.css +13 -16
  38. package/src/variants/_flow.css +15 -0
  39. package/src/variants/_ghost.css +36 -33
  40. package/src/variants/_panel.css +18 -0
  41. package/src/variants/_secondary.css +1 -4
  42. package/src/variants/_sidebar.css +11 -0
  43. package/src/variants/index.css +2 -2
  44. package/src/variants/modules.css +8 -2
@@ -1,49 +1,56 @@
1
1
  .text-bg-primary {
2
2
  --color-text: var(--color-primary-inverse) !important;
3
+ --color-heading-base: color-mix(in srgb, var(--color-text), black 18%);
3
4
 
4
- color: var(--color-primary-inverse) !important;
5
+ color: var(--color-text) !important;
5
6
  background-color: rgba(var(--primary-rgb), var(--bg-opacity, 1)) !important;
6
7
  }
7
8
 
8
9
  .text-bg-secondary {
9
10
  --color-text: var(--color-secondary-inverse) !important;
11
+ --color-heading-base: color-mix(in srgb, var(--color-text), black 18%);
10
12
 
11
- color: var(--color-secondary-inverse) !important;
13
+ color: var(--color-text) !important;
12
14
  background-color: rgba(var(--secondary-rgb), var(--bg-opacity, 1)) !important;
13
15
  }
14
16
 
15
17
  .text-bg-success {
16
18
  --color-text: var(--color-success-inverse) !important;
19
+ --color-heading-base: color-mix(in srgb, var(--color-text), black 18%);
17
20
 
18
- color: var(--color-success-inverse) !important;
21
+ color: var(--color-text) !important;
19
22
  background-color: rgba(var(--success-rgb), var(--bg-opacity, 1)) !important;
20
23
  }
21
24
 
22
25
  .text-bg-info {
23
26
  --color-text: var(--color-info-inverse) !important;
27
+ --color-heading-base: color-mix(in srgb, var(--color-text), black 18%);
24
28
 
25
- color: var(--color-info-inverse) !important;
29
+ color: var(--color-text) !important;
26
30
  background-color: rgba(var(--info-rgb), var(--bg-opacity, 1)) !important;
27
31
  }
28
32
 
29
33
  .text-bg-warning {
30
34
  --color-text: var(--color-warning-inverse) !important;
35
+ --color-heading-base: color-mix(in srgb, var(--color-text), black 18%);
31
36
 
32
- color: var(--color-warning-inverse) !important;
37
+ color: var(--color-text) !important;
33
38
  background-color: rgba(var(--warning-rgb), var(--bg-opacity, 1)) !important;
34
39
  }
35
40
 
36
41
  .text-bg-danger {
37
42
  --color-text: var(--color-danger-inverse) !important;
43
+ --color-heading-base: color-mix(in srgb, var(--color-text), black 18%);
38
44
 
39
- color: var(--color-danger-inverse) !important;
45
+ color: var(--color-text) !important;
40
46
  background-color: rgba(var(--danger-rgb), var(--bg-opacity, 1)) !important;
41
47
  }
42
48
 
43
49
  .text-bg-contrast {
44
50
  --color-text: var(--color-contrast-inverse) !important;
51
+ --color-heading-base: color-mix(in srgb, var(--color-text), black 18%);
45
52
 
46
- color: var(--color-contrast-inverse) !important;
53
+ color: var(--color-text) !important;
47
54
  background-color: rgba(var(--contrast-rgb), var(--bg-opacity, 1)) !important;
48
55
  }
49
56
 
@@ -207,3 +214,28 @@
207
214
  .bg-gradient {
208
215
  background-image: var(--gradient) !important;
209
216
  }
217
+
218
+ /* Dark mode: headings should be lighter than inverse text (mix in white) */
219
+ @media (prefers-color-scheme: dark) {
220
+ .text-bg-primary,
221
+ .text-bg-secondary,
222
+ .text-bg-success,
223
+ .text-bg-info,
224
+ .text-bg-warning,
225
+ .text-bg-danger,
226
+ .text-bg-contrast {
227
+ --color-heading-base: color-mix(in srgb, var(--color-text), white 75%);
228
+ }
229
+ }
230
+
231
+ [data-theme="dark"] {
232
+ .text-bg-primary,
233
+ .text-bg-secondary,
234
+ .text-bg-success,
235
+ .text-bg-info,
236
+ .text-bg-warning,
237
+ .text-bg-danger,
238
+ .text-bg-contrast {
239
+ --color-heading-base: color-mix(in srgb, var(--color-text), white 75%);
240
+ }
241
+ }
@@ -88,68 +88,90 @@
88
88
 
89
89
  .text-primary {
90
90
  --text-opacity: 1;
91
+ --color-text: rgba(var(--primary-rgb), var(--text-opacity)) !important;
92
+ --color-heading-base: color-mix(in srgb, var(--color-text), black 18%);
91
93
 
92
- color: rgba(var(--primary-rgb), var(--text-opacity)) !important;
94
+ color: var(--color-text) !important;
93
95
  }
94
96
 
95
97
  .text-secondary {
96
98
  --text-opacity: 1;
99
+ --color-text: rgba(var(--secondary-rgb), var(--text-opacity)) !important;
100
+ --color-heading-base: color-mix(in srgb, var(--color-text), black 18%);
97
101
 
98
- color: rgba(var(--secondary-rgb), var(--text-opacity)) !important;
102
+ color: var(--color-text) !important;
99
103
  }
100
104
 
101
105
  .text-success {
102
106
  --text-opacity: 1;
107
+ --color-text: rgba(var(--success-rgb), var(--text-opacity)) !important;
108
+ --color-heading-base: color-mix(in srgb, var(--color-text), black 18%);
103
109
 
104
- color: rgba(var(--success-rgb), var(--text-opacity)) !important;
110
+ color: var(--color-text) !important;
105
111
  }
106
112
 
107
113
  .text-info {
108
114
  --text-opacity: 1;
115
+ --color-text: rgba(var(--info-rgb), var(--text-opacity)) !important;
116
+ --color-heading-base: color-mix(in srgb, var(--color-text), black 18%);
109
117
 
110
- color: rgba(var(--info-rgb), var(--text-opacity)) !important;
118
+ color: var(--color-text) !important;
111
119
  }
112
120
 
113
121
  .text-warning {
114
122
  --text-opacity: 1;
123
+ --color-text: rgba(var(--warning-rgb), var(--text-opacity)) !important;
124
+ --color-heading-base: color-mix(in srgb, var(--color-text), black 18%);
115
125
 
116
- color: rgba(var(--warning-rgb), var(--text-opacity)) !important;
126
+ color: var(--color-text) !important;
117
127
  }
118
128
 
119
129
  .text-danger {
120
130
  --text-opacity: 1;
131
+ --color-text: rgba(var(--danger-rgb), var(--text-opacity)) !important;
132
+ --color-heading-base: color-mix(in srgb, var(--color-text), black 18%);
121
133
 
122
- color: rgba(var(--danger-rgb), var(--text-opacity)) !important;
134
+ color: var(--color-text) !important;
123
135
  }
124
136
 
125
137
  .text-contrast {
126
138
  --text-opacity: 1;
139
+ --color-text: rgba(var(--contrast-rgb), var(--text-opacity)) !important;
140
+ --color-heading-base: color-mix(in srgb, var(--color-text), black 18%);
127
141
 
128
- color: rgba(var(--contrast-rgb), var(--text-opacity)) !important;
142
+ color: var(--color-text) !important;
129
143
  }
130
144
 
131
145
  .text-body {
132
146
  --text-opacity: 1;
147
+ --color-text: rgba(var(--body-color-rgb), var(--text-opacity)) !important;
148
+ --color-heading-base: color-mix(in srgb, var(--color-text), black 18%);
133
149
 
134
- color: rgba(var(--body-color-rgb), var(--text-opacity)) !important;
150
+ color: var(--color-text) !important;
135
151
  }
136
152
 
137
153
  .text-muted {
138
154
  --text-opacity: 1;
155
+ --color-text: var(--secondary-color) !important;
156
+ --color-heading-base: color-mix(in srgb, var(--color-text), black 18%);
139
157
 
140
- color: var(--secondary-color) !important;
158
+ color: var(--color-text) !important;
141
159
  }
142
160
 
143
161
  .text-body-secondary {
144
162
  --text-opacity: 1;
163
+ --color-text: var(--secondary-color) !important;
164
+ --color-heading-base: color-mix(in srgb, var(--color-text), black 18%);
145
165
 
146
- color: var(--secondary-color) !important;
166
+ color: var(--color-text) !important;
147
167
  }
148
168
 
149
169
  .text-body-emphasis {
150
170
  --text-opacity: 1;
171
+ --color-text: var(--emphasis-color) !important;
172
+ --color-heading-base: color-mix(in srgb, var(--color-text), black 18%);
151
173
 
152
- color: var(--emphasis-color) !important;
174
+ color: var(--color-text) !important;
153
175
  }
154
176
 
155
177
  .text-reset {
@@ -175,31 +197,52 @@
175
197
  }
176
198
 
177
199
  .text-primary-emphasis {
178
- color: var(--primary-text-emphasis) !important;
200
+ --color-text: var(--primary-text-emphasis) !important;
201
+ --color-heading-base: color-mix(in srgb, var(--color-text), black 18%);
202
+
203
+ color: var(--color-text) !important;
179
204
  }
180
205
 
181
206
  .text-secondary-emphasis {
182
- color: var(--secondary-text-emphasis) !important;
207
+ --color-text: var(--secondary-text-emphasis) !important;
208
+ --color-heading-base: color-mix(in srgb, var(--color-text), black 18%);
209
+
210
+ color: var(--color-text) !important;
183
211
  }
184
212
 
185
213
  .text-success-emphasis {
186
- color: var(--success-text-emphasis) !important;
214
+ --color-text: var(--success-text-emphasis) !important;
215
+ --color-heading-base: color-mix(in srgb, var(--color-text), black 18%);
216
+
217
+ color: var(--color-text) !important;
187
218
  }
188
219
 
189
220
  .text-info-emphasis {
190
- color: var(--info-text-emphasis) !important;
221
+ --color-text: var(--info-text-emphasis) !important;
222
+ --color-heading-base: color-mix(in srgb, var(--color-text), black 18%);
223
+
224
+ color: var(--color-text) !important;
191
225
  }
192
226
 
193
227
  .text-warning-emphasis {
194
- color: var(--warning-text-emphasis) !important;
228
+ --color-text: var(--warning-text-emphasis) !important;
229
+ --color-heading-base: color-mix(in srgb, var(--color-text), black 18%);
230
+
231
+ color: var(--color-text) !important;
195
232
  }
196
233
 
197
234
  .text-danger-emphasis {
198
- color: var(--danger-text-emphasis) !important;
235
+ --color-text: var(--danger-text-emphasis) !important;
236
+ --color-heading-base: color-mix(in srgb, var(--color-text), black 18%);
237
+
238
+ color: var(--color-text) !important;
199
239
  }
200
240
 
201
241
  .text-contrast-emphasis {
202
- color: var(--contrast-text-emphasis) !important;
242
+ --color-text: var(--contrast-text-emphasis) !important;
243
+ --color-heading-base: color-mix(in srgb, var(--color-text), black 18%);
244
+
245
+ color: var(--color-text) !important;
203
246
  }
204
247
 
205
248
  .link-opacity-10 {
@@ -369,3 +412,50 @@
369
412
  .link-underline-opacity-100-hover:hover {
370
413
  --link-underline-opacity: 1;
371
414
  }
415
+
416
+ /* Dark mode: headings should be lighter than text color (mix in white) */
417
+ @media (prefers-color-scheme: dark) {
418
+ .text-primary,
419
+ .text-secondary,
420
+ .text-success,
421
+ .text-info,
422
+ .text-warning,
423
+ .text-danger,
424
+ .text-contrast,
425
+ .text-body,
426
+ .text-muted,
427
+ .text-body-secondary,
428
+ .text-body-emphasis,
429
+ .text-primary-emphasis,
430
+ .text-secondary-emphasis,
431
+ .text-success-emphasis,
432
+ .text-info-emphasis,
433
+ .text-warning-emphasis,
434
+ .text-danger-emphasis,
435
+ .text-contrast-emphasis {
436
+ --color-heading-base: color-mix(in srgb, var(--color-text), white 75%);
437
+ }
438
+ }
439
+
440
+ [data-theme="dark"] {
441
+ .text-primary,
442
+ .text-secondary,
443
+ .text-success,
444
+ .text-info,
445
+ .text-warning,
446
+ .text-danger,
447
+ .text-contrast,
448
+ .text-body,
449
+ .text-muted,
450
+ .text-body-secondary,
451
+ .text-body-emphasis,
452
+ .text-primary-emphasis,
453
+ .text-secondary-emphasis,
454
+ .text-success-emphasis,
455
+ .text-info-emphasis,
456
+ .text-warning-emphasis,
457
+ .text-danger-emphasis,
458
+ .text-contrast-emphasis {
459
+ --color-heading-base: color-mix(in srgb, var(--color-text), white 75%);
460
+ }
461
+ }
@@ -4,8 +4,8 @@
4
4
  * Perfect for utility-first development without semantic components
5
5
  */
6
6
 
7
- /* Global variables */
8
- @import '../_variables.css';
7
+ /* Variables */
8
+ @import './_variables.css';
9
9
 
10
10
  /* Normalize */
11
11
  @import '../_normalize.css';
@@ -29,3 +29,7 @@
29
29
  .min-vh-100 {
30
30
  min-height: 100vh !important;
31
31
  }
32
+
33
+ .min-svh-100 {
34
+ min-height: 100svh !important;
35
+ }
@@ -2,10 +2,18 @@
2
2
  width: 25% !important;
3
3
  }
4
4
 
5
+ .w-40 {
6
+ width: 40% !important;
7
+ }
8
+
5
9
  .w-50 {
6
10
  width: 50% !important;
7
11
  }
8
12
 
13
+ .w-60 {
14
+ width: 60% !important;
15
+ }
16
+
9
17
  .w-75 {
10
18
  width: 75% !important;
11
19
  }
@@ -10,123 +10,10 @@
10
10
 
11
11
  */
12
12
 
13
- /* ==========================================================================
14
- 1. Base Tokens
15
- ========================================================================== */
16
-
17
- :root {
18
- --transparent: transparent;
19
- }
20
-
21
- /* ==========================================================================
22
- Responsive Breakpoints (custom media queries)
23
- Used consistently across semantics, variants, and utilities.
24
- ========================================================================== */
25
-
26
- @custom-media --breakpoint-sm (min-width: 576px);
27
- @custom-media --breakpoint-md (min-width: 768px);
28
- @custom-media --breakpoint-lg (min-width: 1024px);
29
- @custom-media --breakpoint-xl (min-width: 1280px);
30
- @custom-media --breakpoint-xxl (min-width: 1536px);
31
-
32
- /* ==========================================================================
33
- 2. Typography & Layout Variables (from Pico Theme)
34
- ========================================================================== */
35
-
36
- :root,
37
- :host {
38
- /* Font Families */
39
- --font-family-emoji: "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";
40
- --font-family-sans-serif: system-ui, "Segoe UI", Roboto, Oxygen, Ubuntu, Cantarell, Helvetica, Arial, "Helvetica Neue", sans-serif, var(--font-family-emoji);
41
- --font-family-monospace: ui-monospace, SFMono-Regular, "SF Mono", Menlo, Consolas, "Liberation Mono", monospace, var(--font-family-emoji);
42
- --font-family: var(--font-family-sans-serif);
43
-
44
- /* Typography – base defaults inherited by all elements */
45
- --line-height: 1.5;
46
- --font-weight: 400;
47
- --font-size: 100%; /* Root font-size; overridden per breakpoint below and per element in §6 */
48
- --text-underline-offset: 0.1rem;
49
-
50
- /* Borders & Effects – global defaults for border-radius, border-width, outline, and transition */
51
- --border-radius: 0.25rem;
52
- --border-width: 0.0625rem; /* 1px – base border width used by forms, tables, etc. */
53
- --outline-width: 0.125rem; /* 2px – focus-ring width */
54
- --transition: 0.2s ease-in-out; /* Default transition timing for interactive state changes */
55
-
56
- /* Spacing – shared base unit used for padding, margins, and gaps throughout the layout */
57
- --spacing: 1rem;
58
- --typography-spacing-vertical: 1rem; /* Vertical margin below typographic elements (p, lists, etc.) */
59
- --block-spacing-vertical: var(--spacing); /* Vertical padding inside block-level components (cards, modals, etc.) */
60
- --block-spacing-horizontal: var(--spacing); /* Horizontal padding inside block-level components */
61
- --grid-column-gap: var(--spacing); /* Column gap in CSS Grid layouts */
62
- --grid-row-gap: var(--spacing); /* Row gap in CSS Grid layouts */
63
- --form-element-spacing-vertical: 0.75rem; /* Vertical padding inside form inputs, selects, and textareas */
64
- --form-element-spacing-horizontal: 1rem; /* Horizontal padding inside form inputs, selects, and textareas */
65
-
66
- /* Shadows – used by [role="group"] and [role="search"] button/input combos */
67
- --group-shadow: 0 0 0 rgba(0, 0, 0, 0); /* Default (no shadow) */
68
- --group-shadow-focus-with-button: 0 0 0 var(--outline-width) var(--color-primary-focus); /* Focus ring when a button inside the group is focused */
69
- --group-shadow-focus-with-input: 0 0 0 0.0625rem var(--form-border-color); /* Focus ring when an input inside the group is focused */
70
-
71
- /* Modal – backdrop overlay settings */
72
- --modal-overlay-backdrop-filter: blur(0.375rem); /* Applies a blur behind the modal overlay */
73
-
74
- /* Navigation – spacing and breadcrumb configuration */
75
- --nav-element-spacing-vertical: 1rem; /* Vertical padding for nav container items */
76
- --nav-element-spacing-horizontal: 0.5rem; /* Horizontal padding for nav container items */
77
- --nav-link-spacing-vertical: 0.5rem; /* Vertical padding inside nav links */
78
- --nav-link-spacing-horizontal: 0.5rem; /* Horizontal padding inside nav links */
79
- --nav-breadcrumb-divider: ">"; /* Character displayed between breadcrumb items */
80
-
81
- /* Icons – inline SVG data-URIs used by form elements and UI components */
82
- --icon-checkbox: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='rgb(255, 255, 255)' stroke-width='4' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpolyline points='20 6 9 17 4 12'%3E%3C/polyline%3E%3C/svg%3E"); /* Checkmark for checked checkboxes */
83
- --icon-minus: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='rgb(255, 255, 255)' stroke-width='4' stroke-linecap='round' stroke-linejoin='round'%3E%3Cline x1='5' y1='12' x2='19' y2='12'%3E%3C/line%3E%3C/svg%3E"); /* Minus icon for indeterminate checkboxes */
84
- --icon-chevron: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='rgb(136, 145, 164)' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpolyline points='6 9 12 15 18 9'%3E%3C/polyline%3E%3C/svg%3E"); /* Dropdown arrow for <select> elements */
85
- --icon-date: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='rgb(136, 145, 164)' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Crect x='3' y='4' width='18' height='18' rx='2' ry='2'%3E%3C/rect%3E%3Cline x1='16' y1='2' x2='16' y2='6'%3E%3C/line%3E%3Cline x1='8' y1='2' x2='8' y2='6'%3E%3C/line%3E%3Cline x1='3' y1='10' x2='21' y2='10'%3E%3C/line%3E%3C/svg%3E"); /* Calendar icon for date inputs */
86
- --icon-time: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='rgb(136, 145, 164)' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='12' cy='12' r='10'%3E%3C/circle%3E%3Cpolyline points='12 6 12 12 16 14'%3E%3C/polyline%3E%3C/svg%3E"); /* Clock icon for time inputs */
87
- --icon-search: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='rgb(136, 145, 164)' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='11' cy='11' r='8'%3E%3C/circle%3E%3Cline x1='21' y1='21' x2='16.65' y2='16.65'%3E%3C/line%3E%3C/svg%3E"); /* Magnifying glass for search inputs */
88
- --icon-close: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='rgb(136, 145, 164)' stroke-width='3' stroke-linecap='round' stroke-linejoin='round'%3E%3Cline x1='18' y1='6' x2='6' y2='18'%3E%3C/line%3E%3Cline x1='6' y1='6' x2='18' y2='18'%3E%3C/line%3E%3C/svg%3E"); /* X icon for close/dismiss actions (e.g. modal close button) */
89
- --icon-loading: url("data:image/svg+xml,%3Csvg fill='none' height='24' width='24' viewBox='0 0 24 24' xmlns='http://www.w3.org/2000/svg' %3E%3Cstyle%3E g %7B animation: rotate 2s linear infinite; transform-origin: center center; %7D circle %7B stroke-dasharray: 75,100; stroke-dashoffset: -5; animation: dash 1.5s ease-in-out infinite; stroke-linecap: round; %7D @keyframes rotate %7B 0%25 %7B transform: rotate(0deg); %7D 100%25 %7B transform: rotate(360deg); %7D %7D @keyframes dash %7B 0%25 %7B stroke-dasharray: 1,100; stroke-dashoffset: 0; %7D 50%25 %7B stroke-dasharray: 44.5,100; stroke-dashoffset: -17.5; %7D 100%25 %7B stroke-dasharray: 44.5,100; stroke-dashoffset: -62; %7D %7D %3C/style%3E%3Cg%3E%3Ccircle cx='12' cy='12' r='10' fill='none' stroke='rgb(136, 145, 164)' stroke-width='4' /%3E%3C/g%3E%3C/svg%3E"); /* Animated spinner for [aria-busy="true"] elements */
90
- }
91
-
92
- /* Responsive Font Sizes – progressively increase root font-size at wider viewports */
93
- @media (--breakpoint-sm) {
94
- :root,
95
- :host {
96
- --font-size: 106.25%;
97
- }
98
- }
99
-
100
- @media (--breakpoint-md) {
101
- :root,
102
- :host {
103
- --font-size: 112.5%;
104
- }
105
- }
106
-
107
- @media (--breakpoint-lg) {
108
- :root,
109
- :host {
110
- --font-size: 118.75%;
111
- }
112
- }
113
-
114
- @media (--breakpoint-xl) {
115
- :root,
116
- :host {
117
- --font-size: 125%;
118
- }
119
- }
120
-
121
- @media (--breakpoint-xxl) {
122
- :root,
123
- :host {
124
- --font-size: 131.25%;
125
- }
126
- }
13
+ @import './_shared.css';
127
14
 
128
15
  /* ==========================================================================
129
- 3. Semantic Colors - Light Theme (Default)
16
+ Semantic Colors - Light Theme (Default)
130
17
  ==========================================================================
131
18
 
132
19
  Color variable naming convention used throughout sections 3–5:
@@ -202,13 +89,8 @@
202
89
  --shadow-md: 0.0625rem 0.125rem 0.5rem rgba(129, 145, 181, 0.15); /* Medium elevation – e.g. dropdowns */
203
90
  --shadow-lg: 0.0145rem 0.029rem 0.174rem rgba(129, 145, 181, 0.01698), 0.0335rem 0.067rem 0.402rem rgba(129, 145, 181, 0.024), 0.0625rem 0.125rem 0.75rem rgba(129, 145, 181, 0.03), 0.1125rem 0.225rem 1.35rem rgba(129, 145, 181, 0.036), 0.2085rem 0.417rem 2.502rem rgba(129, 145, 181, 0.04302), 0.5rem 1rem 6rem rgba(129, 145, 181, 0.06), 0 0 0 0.0625rem rgba(129, 145, 181, 0.015); /* Multi-layer realistic shadow – e.g. cards, modals */
204
91
 
205
- /* Headings progressively lighter shades from h1 (darkest) to h6 (lightest) */
206
- --color-h1: #2d3138;
207
- --color-h2: #373c44;
208
- --color-h3: #424751;
209
- --color-h4: #4d535e;
210
- --color-h5: #5c6370;
211
- --color-h6: #646b79;
92
+ /* Headings - base color for progressive lightness via color-mix */
93
+ --color-heading-base: #2d3138;
212
94
 
213
95
  /* Mark & Text – colors for <mark>, <ins>, and <del> elements */
214
96
  --color-mark-bg: rgb(252.5, 230.5, 191.5); /* Background highlight for <mark> */
@@ -331,7 +213,7 @@
331
213
  }
332
214
 
333
215
  /* ==========================================================================
334
- 4. Semantic Colors - Dark Theme (System Preference)
216
+ Semantic Colors - Dark Theme (System Preference)
335
217
  ==========================================================================
336
218
 
337
219
  Applied when the user's OS is set to dark mode AND no explicit
@@ -398,13 +280,8 @@
398
280
  --shadow-md: 0.0625rem 0.125rem 0.5rem rgba(7, 8.5, 12, 0.15);
399
281
  --shadow-lg: 0.0145rem 0.029rem 0.174rem rgba(7, 8.5, 12, 0.01698), 0.0335rem 0.067rem 0.402rem rgba(7, 8.5, 12, 0.024), 0.0625rem 0.125rem 0.75rem rgba(7, 8.5, 12, 0.03), 0.1125rem 0.225rem 1.35rem rgba(7, 8.5, 12, 0.036), 0.2085rem 0.417rem 2.502rem rgba(7, 8.5, 12, 0.04302), 0.5rem 1rem 6rem rgba(7, 8.5, 12, 0.06), 0 0 0 0.0625rem rgba(7, 8.5, 12, 0.015);
400
282
 
401
- /* Headings */
402
- --color-h1: #f0f1f3;
403
- --color-h2: #e0e3e7;
404
- --color-h3: #c2c7d0;
405
- --color-h4: #b3b9c5;
406
- --color-h5: #a4acba;
407
- --color-h6: #8891a4;
283
+ /* Headings - base color for progressive lightness via color-mix */
284
+ --color-heading-base: #f0f1f3;
408
285
 
409
286
  /* Mark & Text */
410
287
  --color-mark-bg: #014063;
@@ -515,7 +392,7 @@
515
392
  }
516
393
 
517
394
  /* ==========================================================================
518
- 5. Semantic Colors - Dark Theme (Explicit)
395
+ Semantic Colors - Dark Theme (Explicit)
519
396
  ==========================================================================
520
397
 
521
398
  Applied when data-theme="dark" is set on the root element,
@@ -580,13 +457,8 @@
580
457
  --shadow-md: 0.0625rem 0.125rem 0.5rem rgba(7, 8.5, 12, 0.15);
581
458
  --shadow-lg: 0.0145rem 0.029rem 0.174rem rgba(7, 8.5, 12, 0.01698), 0.0335rem 0.067rem 0.402rem rgba(7, 8.5, 12, 0.024), 0.0625rem 0.125rem 0.75rem rgba(7, 8.5, 12, 0.03), 0.1125rem 0.225rem 1.35rem rgba(7, 8.5, 12, 0.036), 0.2085rem 0.417rem 2.502rem rgba(7, 8.5, 12, 0.04302), 0.5rem 1rem 6rem rgba(7, 8.5, 12, 0.06), 0 0 0 0.0625rem rgba(7, 8.5, 12, 0.015);
582
459
 
583
- /* Headings */
584
- --color-h1: #f0f1f3;
585
- --color-h2: #e0e3e7;
586
- --color-h3: #c2c7d0;
587
- --color-h4: #b3b9c5;
588
- --color-h5: #a4acba;
589
- --color-h6: #8891a4;
460
+ /* Headings - base color for progressive lightness via color-mix */
461
+ --color-heading-base: #f0f1f3;
590
462
 
591
463
  /* Mark & Text */
592
464
  --color-mark-bg: #014063;
@@ -689,7 +561,7 @@
689
561
  }
690
562
 
691
563
  /* ==========================================================================
692
- 6. Scoped Element Variables (from Pico Theme)
564
+ Scoped Element Variables (from Pico Theme)
693
565
  ==========================================================================
694
566
 
695
567
  These selectors override the global :root variables on a per-element
@@ -724,37 +596,37 @@ h6 {
724
596
  h1 {
725
597
  --font-size: 2rem;
726
598
  --line-height: 1.125;
727
- --typography-spacing-top: 3rem; /* Extra top margin to separate from previous content */
599
+ --typography-headings-top: 3rem; /* Extra top margin to separate from previous content */
728
600
  }
729
601
 
730
602
  h2 {
731
603
  --font-size: 1.75rem;
732
604
  --line-height: 1.15;
733
- --typography-spacing-top: 2.625rem;
605
+ --typography-headings-top: 2.625rem;
734
606
  }
735
607
 
736
608
  h3 {
737
609
  --font-size: 1.5rem;
738
610
  --line-height: 1.175;
739
- --typography-spacing-top: 2.25rem;
611
+ --typography-headings-top: 2.25rem;
740
612
  }
741
613
 
742
614
  h4 {
743
615
  --font-size: 1.25rem;
744
616
  --line-height: 1.2;
745
- --typography-spacing-top: 1.874rem;
617
+ --typography-headings-top: 1.874rem;
746
618
  }
747
619
 
748
620
  h5 {
749
621
  --font-size: 1.125rem;
750
622
  --line-height: 1.225;
751
- --typography-spacing-top: 1.6875rem;
623
+ --typography-headings-top: 1.6875rem;
752
624
  }
753
625
 
754
626
  h6 {
755
627
  --font-size: 1rem;
756
628
  --line-height: 1.25;
757
- --typography-spacing-top: 1.5rem;
629
+ --typography-headings-top: 1.5rem;
758
630
  }
759
631
 
760
632
  /* Table head/foot cells get a bolder weight and a thicker bottom border */