@lifecorner/angular-ui-kit 3.26.0 → 3.27.1

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 (66) hide show
  1. package/fesm2022/lifecorner-angular-ui-kit-callout.mjs +2 -2
  2. package/fesm2022/lifecorner-angular-ui-kit-callout.mjs.map +1 -1
  3. package/fesm2022/lifecorner-angular-ui-kit-chat.mjs +2 -2
  4. package/fesm2022/lifecorner-angular-ui-kit-chat.mjs.map +1 -1
  5. package/fesm2022/lifecorner-angular-ui-kit-color-picker.mjs +2 -2
  6. package/fesm2022/lifecorner-angular-ui-kit-color-picker.mjs.map +1 -1
  7. package/fesm2022/lifecorner-angular-ui-kit-date-range-picker.mjs +2 -2
  8. package/fesm2022/lifecorner-angular-ui-kit-date-range-picker.mjs.map +1 -1
  9. package/fesm2022/lifecorner-angular-ui-kit-datepicker.mjs +2 -2
  10. package/fesm2022/lifecorner-angular-ui-kit-datepicker.mjs.map +1 -1
  11. package/fesm2022/lifecorner-angular-ui-kit-dependency-viewer.mjs +47 -9
  12. package/fesm2022/lifecorner-angular-ui-kit-dependency-viewer.mjs.map +1 -1
  13. package/fesm2022/lifecorner-angular-ui-kit-description-list.mjs +2 -2
  14. package/fesm2022/lifecorner-angular-ui-kit-description-list.mjs.map +1 -1
  15. package/fesm2022/lifecorner-angular-ui-kit-document-viewer.mjs +2 -2
  16. package/fesm2022/lifecorner-angular-ui-kit-document-viewer.mjs.map +1 -1
  17. package/fesm2022/lifecorner-angular-ui-kit-file-upload.mjs +4 -4
  18. package/fesm2022/lifecorner-angular-ui-kit-file-upload.mjs.map +1 -1
  19. package/fesm2022/lifecorner-angular-ui-kit-filter-bar.mjs +2 -2
  20. package/fesm2022/lifecorner-angular-ui-kit-filter-bar.mjs.map +1 -1
  21. package/fesm2022/lifecorner-angular-ui-kit-gallery.mjs +2 -2
  22. package/fesm2022/lifecorner-angular-ui-kit-gallery.mjs.map +1 -1
  23. package/fesm2022/lifecorner-angular-ui-kit-gantt-chart.mjs +2 -2
  24. package/fesm2022/lifecorner-angular-ui-kit-gantt-chart.mjs.map +1 -1
  25. package/fesm2022/lifecorner-angular-ui-kit-header.mjs +2 -2
  26. package/fesm2022/lifecorner-angular-ui-kit-header.mjs.map +1 -1
  27. package/fesm2022/lifecorner-angular-ui-kit-input.mjs +2 -2
  28. package/fesm2022/lifecorner-angular-ui-kit-input.mjs.map +1 -1
  29. package/fesm2022/lifecorner-angular-ui-kit-kanban-board.mjs +2 -2
  30. package/fesm2022/lifecorner-angular-ui-kit-kanban-board.mjs.map +1 -1
  31. package/fesm2022/lifecorner-angular-ui-kit-log-viewer.mjs +4 -4
  32. package/fesm2022/lifecorner-angular-ui-kit-log-viewer.mjs.map +1 -1
  33. package/fesm2022/lifecorner-angular-ui-kit-notification-center.mjs +2 -2
  34. package/fesm2022/lifecorner-angular-ui-kit-notification-center.mjs.map +1 -1
  35. package/fesm2022/lifecorner-angular-ui-kit-number-input.mjs +2 -2
  36. package/fesm2022/lifecorner-angular-ui-kit-number-input.mjs.map +1 -1
  37. package/fesm2022/lifecorner-angular-ui-kit-rich-text-editor.mjs +2 -2
  38. package/fesm2022/lifecorner-angular-ui-kit-rich-text-editor.mjs.map +1 -1
  39. package/fesm2022/lifecorner-angular-ui-kit-scatter-plot.mjs +2 -2
  40. package/fesm2022/lifecorner-angular-ui-kit-scatter-plot.mjs.map +1 -1
  41. package/fesm2022/lifecorner-angular-ui-kit-search-input.mjs +2 -2
  42. package/fesm2022/lifecorner-angular-ui-kit-search-input.mjs.map +1 -1
  43. package/fesm2022/lifecorner-angular-ui-kit-select.mjs +2 -2
  44. package/fesm2022/lifecorner-angular-ui-kit-select.mjs.map +1 -1
  45. package/fesm2022/lifecorner-angular-ui-kit-split-pane.mjs +2 -2
  46. package/fesm2022/lifecorner-angular-ui-kit-split-pane.mjs.map +1 -1
  47. package/fesm2022/lifecorner-angular-ui-kit-table.mjs +4 -4
  48. package/fesm2022/lifecorner-angular-ui-kit-table.mjs.map +1 -1
  49. package/fesm2022/lifecorner-angular-ui-kit-tabs.mjs +2 -2
  50. package/fesm2022/lifecorner-angular-ui-kit-tabs.mjs.map +1 -1
  51. package/fesm2022/lifecorner-angular-ui-kit-tag-input.mjs +2 -2
  52. package/fesm2022/lifecorner-angular-ui-kit-tag-input.mjs.map +1 -1
  53. package/fesm2022/lifecorner-angular-ui-kit-textarea.mjs +2 -2
  54. package/fesm2022/lifecorner-angular-ui-kit-textarea.mjs.map +1 -1
  55. package/fesm2022/lifecorner-angular-ui-kit-toggle-group.mjs +2 -2
  56. package/fesm2022/lifecorner-angular-ui-kit-toggle-group.mjs.map +1 -1
  57. package/package.json +1 -1
  58. package/src/styles/_reset.scss +4 -2
  59. package/src/styles/_theme-dark.scss +154 -137
  60. package/src/styles/_theme-light.scss +158 -138
  61. package/src/styles/focus-indicators.spec.ts +205 -0
  62. package/src/styles/theme-contrast.spec.ts +14 -2
  63. package/src/styles/theme-modes.spec.ts +40 -0
  64. package/src/styles/touch-targets-contrast.spec.ts +286 -0
  65. package/types/lifecorner-angular-ui-kit-dependency-viewer.d.ts +33 -4
  66. package/types/lifecorner-angular-ui-kit-file-upload.d.ts +6 -1
@@ -14,16 +14,12 @@
14
14
  @use './tokens/animation' as *;
15
15
  @use './tokens/size' as *;
16
16
 
17
- // Design System 2.0: dark is the DEFAULT look. `:root:not(.light)` makes dark
18
- // apply before any theme class is set (no first-paint white flash); `.light` is
19
- // the explicit opt-in escape hatch defined in _theme-light.scss.
20
- //
21
- // 3.3 (G-6): `:root.system` follows the OS without a script. A root with the
22
- // `system` class gets the light tokens from _theme-light.scss (`:root`) and
23
- // these dark tokens only under `prefers-color-scheme: dark`, so the page
24
- // switches with the OS setting, also before (or without) any JavaScript.
25
- // The declarations live in one mixin and are emitted twice (identical values).
26
- @mixin dark-theme-tokens {
17
+ // Every colour token of the dark theme: --color-*, --gradient-*, --shadow-*,
18
+ // --elevation-*, --accent-line and --app-background-image (request 043, F-25).
19
+ // `dark-theme-tokens` below includes them for the root, and `.lc-header--dark`
20
+ // emits them a second time, so a dark header inside a light page gives its
21
+ // slot content the dark values (see `.lc-header--light` in _theme-light.scss).
22
+ @mixin -dark-theme-colors {
27
23
  // ============================================================================
28
24
  // Colors - Primary (Inverted for dark mode)
29
25
  // ============================================================================
@@ -98,65 +94,6 @@
98
94
  --color-accent-rust: #{$color-accent-rust};
99
95
  --color-accent-violet: #{$color-accent-violet};
100
96
 
101
- // ============================================================================
102
- // Spacing (Same as light theme)
103
- // ============================================================================
104
- --spacing-0: #{$spacing-0};
105
- --spacing-0-5: #{$spacing-0-5};
106
- --spacing-1: #{$spacing-1};
107
- --spacing-1-5: #{$spacing-1-5};
108
- --spacing-2: #{$spacing-2};
109
- --spacing-2-5: #{$spacing-2-5};
110
- --spacing-3: #{$spacing-3};
111
- --spacing-3-5: #{$spacing-3-5};
112
- --spacing-4: #{$spacing-4};
113
- --spacing-5: #{$spacing-5};
114
- --spacing-6: #{$spacing-6};
115
- --spacing-7: #{$spacing-7};
116
- --spacing-8: #{$spacing-8};
117
- --spacing-9: #{$spacing-9};
118
- --spacing-10: #{$spacing-10};
119
- --spacing-11: #{$spacing-11};
120
- --spacing-12: #{$spacing-12};
121
- --spacing-14: #{$spacing-14};
122
- --spacing-16: #{$spacing-16};
123
-
124
- // ============================================================================
125
- // Typography - Font Families (Same as light theme)
126
- // ============================================================================
127
- --typography-font-family-base: #{$typography-font-family-base};
128
- --typography-font-family-mono: #{$typography-font-family-mono};
129
-
130
- // ============================================================================
131
- // Typography - Font Sizes (Same as light theme)
132
- // ============================================================================
133
- --typography-font-size-xs: #{$typography-font-size-xs};
134
- --typography-font-size-sm: #{$typography-font-size-sm};
135
- --typography-font-size-base: #{$typography-font-size-base};
136
- --typography-font-size-lg: #{$typography-font-size-lg};
137
- --typography-font-size-xl: #{$typography-font-size-xl};
138
- --typography-font-size-2xl: #{$typography-font-size-2xl};
139
- --typography-font-size-3xl: #{$typography-font-size-3xl};
140
- --typography-font-size-4xl: #{$typography-font-size-4xl};
141
- --typography-font-size-5xl: #{$typography-font-size-5xl};
142
- --typography-font-size-6xl: #{$typography-font-size-6xl};
143
- --typography-font-size-7xl: #{$typography-font-size-7xl};
144
-
145
- // ============================================================================
146
- // Typography - Font Weights (Same as light theme)
147
- // ============================================================================
148
- --typography-font-weight-normal: #{$typography-font-weight-normal};
149
- --typography-font-weight-medium: #{$typography-font-weight-medium};
150
- --typography-font-weight-semibold: #{$typography-font-weight-semibold};
151
- --typography-font-weight-bold: #{$typography-font-weight-bold};
152
-
153
- // ============================================================================
154
- // Typography - Line Heights (Same as light theme)
155
- // ============================================================================
156
- --typography-line-height-tight: #{$typography-line-height-tight};
157
- --typography-line-height-normal: #{$typography-line-height-normal};
158
- --typography-line-height-relaxed: #{$typography-line-height-relaxed};
159
-
160
97
  // ============================================================================
161
98
  // Elevation (DS2.0 deep layered shadows — from generated tokens)
162
99
  // ============================================================================
@@ -165,55 +102,6 @@
165
102
  --elevation-3: #{$elevation-3};
166
103
  --elevation-4: #{$elevation-4};
167
104
 
168
- // ============================================================================
169
- // Border Radius (Same as light theme)
170
- // ============================================================================
171
- --border-radius-none: #{$border-radius-none};
172
- --border-radius-sm: #{$border-radius-sm};
173
- --border-radius-md: #{$border-radius-md};
174
- --border-radius-lg: #{$border-radius-lg};
175
- --border-radius-xl: #{$border-radius-xl};
176
- --border-radius-2xl: #{$border-radius-2xl};
177
- --border-radius-full: #{$border-radius-full};
178
-
179
- // ============================================================================
180
- // Animation (Same as light theme)
181
- // ============================================================================
182
- --animation-duration-base: #{$animation-duration-fast};
183
- --animation-easing-ease-in: #{$animation-easing-ease-in};
184
- --animation-easing-ease-out: #{$animation-easing-ease-out};
185
- --animation-easing-ease-in-out: #{$animation-easing-ease-in-out};
186
-
187
- // ============================================================================
188
- // Size - Interactive Elements (Same as light theme)
189
- // ============================================================================
190
- --size-interactive-xs-height: #{$size-interactive-xs-height};
191
- --size-interactive-xs-padding: #{$size-interactive-xs-padding};
192
- --size-interactive-xs-font-size: #{$size-interactive-xs-font-size};
193
-
194
- --size-interactive-sm-height: #{$size-interactive-sm-height};
195
- --size-interactive-sm-padding: #{$size-interactive-sm-padding};
196
- --size-interactive-sm-font-size: #{$size-interactive-sm-font-size};
197
-
198
- --size-interactive-md-height: #{$size-interactive-md-height};
199
- --size-interactive-md-padding: #{$size-interactive-md-padding};
200
- --size-interactive-md-font-size: #{$size-interactive-md-font-size};
201
-
202
- --size-interactive-lg-height: #{$size-interactive-lg-height};
203
- --size-interactive-lg-padding: #{$size-interactive-lg-padding};
204
- --size-interactive-lg-font-size: #{$size-interactive-lg-font-size};
205
-
206
- // ============================================================================
207
- // Size - Minimum Touch Target (Same as light theme)
208
- // ============================================================================
209
- --size-min-touch-width: #{$size-min-touch-width};
210
- --size-min-touch-height: #{$size-min-touch-height};
211
-
212
- // ============================================================================
213
- // Layout - Content Width (Same as light theme)
214
- // ============================================================================
215
- --lc-content-max-width: #{$size-content-max-width};
216
-
217
105
  // ============================================================================
218
106
  // Semantic Color Mappings for Dark Theme (DS2.0 — teal-tinted surfaces)
219
107
  // ============================================================================
@@ -397,25 +285,6 @@
397
285
  --color-skeleton: rgba(132, 199, 212, 0.07);
398
286
  --color-skeleton-highlight: rgba(132, 199, 212, 0.13);
399
287
 
400
- // ============================================================================
401
- // Short Aliases for Common Usage (Component Convenience)
402
- // ============================================================================
403
- --font-family-sans: var(--typography-font-family-base);
404
- --font-family-mono: var(--typography-font-family-mono);
405
- --font-size-xs: var(--typography-font-size-xs);
406
- --font-size-sm: var(--typography-font-size-sm);
407
- --font-size-base: var(--typography-font-size-base);
408
- --font-size-lg: var(--typography-font-size-lg);
409
- --font-size-xl: var(--typography-font-size-xl);
410
- --font-weight-normal: var(--typography-font-weight-normal);
411
- --font-weight-medium: var(--typography-font-weight-medium);
412
- --font-weight-semibold: var(--typography-font-weight-semibold);
413
- --font-weight-bold: var(--typography-font-weight-bold);
414
- --line-height-tight: var(--typography-line-height-tight);
415
- --line-height-normal: var(--typography-line-height-normal);
416
- --line-height-relaxed: var(--typography-line-height-relaxed);
417
- --animation-timing-ease: var(--animation-easing-ease-in-out);
418
-
419
288
  // Semantic color scale aliases — resolve the numeric scale some components
420
289
  // use onto the canonical semantic shades (already dark-tuned above).
421
290
  --color-error-50: rgba(157, 14, 14, 0.18);
@@ -441,6 +310,146 @@
441
310
  --color-info-700: var(--color-info-dark);
442
311
  }
443
312
 
313
+ // Design System 2.0: dark is the DEFAULT look. `:root:not(.light)` makes dark
314
+ // apply before any theme class is set (no first-paint white flash); `.light` is
315
+ // the explicit opt-in escape hatch defined in _theme-light.scss.
316
+ //
317
+ // 3.3 (G-6): `:root.system` follows the OS without a script. A root with the
318
+ // `system` class gets the light tokens from _theme-light.scss (`:root`) and
319
+ // these dark tokens only under `prefers-color-scheme: dark`, so the page
320
+ // switches with the OS setting, also before (or without) any JavaScript.
321
+ // The declarations live in one mixin and are emitted twice (identical values).
322
+ @mixin dark-theme-tokens {
323
+ @include -dark-theme-colors;
324
+
325
+ // ============================================================================
326
+ // Spacing (Same as light theme)
327
+ // ============================================================================
328
+ --spacing-0: #{$spacing-0};
329
+ --spacing-0-5: #{$spacing-0-5};
330
+ --spacing-1: #{$spacing-1};
331
+ --spacing-1-5: #{$spacing-1-5};
332
+ --spacing-2: #{$spacing-2};
333
+ --spacing-2-5: #{$spacing-2-5};
334
+ --spacing-3: #{$spacing-3};
335
+ --spacing-3-5: #{$spacing-3-5};
336
+ --spacing-4: #{$spacing-4};
337
+ --spacing-5: #{$spacing-5};
338
+ --spacing-6: #{$spacing-6};
339
+ --spacing-7: #{$spacing-7};
340
+ --spacing-8: #{$spacing-8};
341
+ --spacing-9: #{$spacing-9};
342
+ --spacing-10: #{$spacing-10};
343
+ --spacing-11: #{$spacing-11};
344
+ --spacing-12: #{$spacing-12};
345
+ --spacing-14: #{$spacing-14};
346
+ --spacing-16: #{$spacing-16};
347
+
348
+ // ============================================================================
349
+ // Typography - Font Families (Same as light theme)
350
+ // ============================================================================
351
+ --typography-font-family-base: #{$typography-font-family-base};
352
+ --typography-font-family-mono: #{$typography-font-family-mono};
353
+
354
+ // ============================================================================
355
+ // Typography - Font Sizes (Same as light theme)
356
+ // ============================================================================
357
+ --typography-font-size-xs: #{$typography-font-size-xs};
358
+ --typography-font-size-sm: #{$typography-font-size-sm};
359
+ --typography-font-size-base: #{$typography-font-size-base};
360
+ --typography-font-size-lg: #{$typography-font-size-lg};
361
+ --typography-font-size-xl: #{$typography-font-size-xl};
362
+ --typography-font-size-2xl: #{$typography-font-size-2xl};
363
+ --typography-font-size-3xl: #{$typography-font-size-3xl};
364
+ --typography-font-size-4xl: #{$typography-font-size-4xl};
365
+ --typography-font-size-5xl: #{$typography-font-size-5xl};
366
+ --typography-font-size-6xl: #{$typography-font-size-6xl};
367
+ --typography-font-size-7xl: #{$typography-font-size-7xl};
368
+
369
+ // ============================================================================
370
+ // Typography - Font Weights (Same as light theme)
371
+ // ============================================================================
372
+ --typography-font-weight-normal: #{$typography-font-weight-normal};
373
+ --typography-font-weight-medium: #{$typography-font-weight-medium};
374
+ --typography-font-weight-semibold: #{$typography-font-weight-semibold};
375
+ --typography-font-weight-bold: #{$typography-font-weight-bold};
376
+
377
+ // ============================================================================
378
+ // Typography - Line Heights (Same as light theme)
379
+ // ============================================================================
380
+ --typography-line-height-tight: #{$typography-line-height-tight};
381
+ --typography-line-height-normal: #{$typography-line-height-normal};
382
+ --typography-line-height-relaxed: #{$typography-line-height-relaxed};
383
+
384
+ // ============================================================================
385
+ // Border Radius (Same as light theme)
386
+ // ============================================================================
387
+ --border-radius-none: #{$border-radius-none};
388
+ --border-radius-sm: #{$border-radius-sm};
389
+ --border-radius-md: #{$border-radius-md};
390
+ --border-radius-lg: #{$border-radius-lg};
391
+ --border-radius-xl: #{$border-radius-xl};
392
+ --border-radius-2xl: #{$border-radius-2xl};
393
+ --border-radius-full: #{$border-radius-full};
394
+
395
+ // ============================================================================
396
+ // Animation (Same as light theme)
397
+ // ============================================================================
398
+ --animation-duration-base: #{$animation-duration-fast};
399
+ --animation-easing-ease-in: #{$animation-easing-ease-in};
400
+ --animation-easing-ease-out: #{$animation-easing-ease-out};
401
+ --animation-easing-ease-in-out: #{$animation-easing-ease-in-out};
402
+
403
+ // ============================================================================
404
+ // Size - Interactive Elements (Same as light theme)
405
+ // ============================================================================
406
+ --size-interactive-xs-height: #{$size-interactive-xs-height};
407
+ --size-interactive-xs-padding: #{$size-interactive-xs-padding};
408
+ --size-interactive-xs-font-size: #{$size-interactive-xs-font-size};
409
+
410
+ --size-interactive-sm-height: #{$size-interactive-sm-height};
411
+ --size-interactive-sm-padding: #{$size-interactive-sm-padding};
412
+ --size-interactive-sm-font-size: #{$size-interactive-sm-font-size};
413
+
414
+ --size-interactive-md-height: #{$size-interactive-md-height};
415
+ --size-interactive-md-padding: #{$size-interactive-md-padding};
416
+ --size-interactive-md-font-size: #{$size-interactive-md-font-size};
417
+
418
+ --size-interactive-lg-height: #{$size-interactive-lg-height};
419
+ --size-interactive-lg-padding: #{$size-interactive-lg-padding};
420
+ --size-interactive-lg-font-size: #{$size-interactive-lg-font-size};
421
+
422
+ // ============================================================================
423
+ // Size - Minimum Touch Target (Same as light theme)
424
+ // ============================================================================
425
+ --size-min-touch-width: #{$size-min-touch-width};
426
+ --size-min-touch-height: #{$size-min-touch-height};
427
+
428
+ // ============================================================================
429
+ // Layout - Content Width (Same as light theme)
430
+ // ============================================================================
431
+ --lc-content-max-width: #{$size-content-max-width};
432
+
433
+ // ============================================================================
434
+ // Short Aliases for Common Usage (Component Convenience)
435
+ // ============================================================================
436
+ --font-family-sans: var(--typography-font-family-base);
437
+ --font-family-mono: var(--typography-font-family-mono);
438
+ --font-size-xs: var(--typography-font-size-xs);
439
+ --font-size-sm: var(--typography-font-size-sm);
440
+ --font-size-base: var(--typography-font-size-base);
441
+ --font-size-lg: var(--typography-font-size-lg);
442
+ --font-size-xl: var(--typography-font-size-xl);
443
+ --font-weight-normal: var(--typography-font-weight-normal);
444
+ --font-weight-medium: var(--typography-font-weight-medium);
445
+ --font-weight-semibold: var(--typography-font-weight-semibold);
446
+ --font-weight-bold: var(--typography-font-weight-bold);
447
+ --line-height-tight: var(--typography-line-height-tight);
448
+ --line-height-normal: var(--typography-line-height-normal);
449
+ --line-height-relaxed: var(--typography-line-height-relaxed);
450
+ --animation-timing-ease: var(--animation-easing-ease-in-out);
451
+ }
452
+
444
453
  :root.dark,
445
454
  :root:not(.light):not(.system) {
446
455
  @include dark-theme-tokens;
@@ -457,3 +466,11 @@
457
466
  :root.system {
458
467
  color-scheme: light dark;
459
468
  }
469
+
470
+ // `<lc-header theme="dark">` keeps the dark palette inside a light page
471
+ // (request 043, F-25): its slot buttons measured 1.00:1 (outline) and 3.12:1
472
+ // (link) there; with the tokens re-declared they match a dark page (16.32:1,
473
+ // 12.13:1). A root-level token override does not reach inside a themed header.
474
+ .lc-header--dark {
475
+ @include -dark-theme-colors;
476
+ }
@@ -14,9 +14,14 @@
14
14
  @use './tokens/animation' as *;
15
15
  @use './tokens/size' as *;
16
16
 
17
- // Default theme (light) on :root
18
- :root,
19
- :root.light {
17
+ // Every colour token of the light theme: --color-*, --gradient-*, --shadow-*,
18
+ // --elevation-*, --accent-line and --app-background-image (request 043, F-25).
19
+ // The root rule below emits them, and `.lc-header--light` emits them a second
20
+ // time: derived tokens (`--color-primary: var(--color-primary-500)`) resolve
21
+ // where they are declared, so only the full set on the header gives its slot
22
+ // content (buttons, links, the theme toggle, the account menu) the light
23
+ // values inside a dark page.
24
+ @mixin -light-theme-colors {
20
25
  // ============================================================================
21
26
  // Colors - Primary
22
27
  // ============================================================================
@@ -91,65 +96,6 @@
91
96
  --color-accent-rust: #{$color-accent-rust};
92
97
  --color-accent-violet: #{$color-accent-violet};
93
98
 
94
- // ============================================================================
95
- // Spacing
96
- // ============================================================================
97
- --spacing-0: #{$spacing-0};
98
- --spacing-0-5: #{$spacing-0-5};
99
- --spacing-1: #{$spacing-1};
100
- --spacing-1-5: #{$spacing-1-5};
101
- --spacing-2: #{$spacing-2};
102
- --spacing-2-5: #{$spacing-2-5};
103
- --spacing-3: #{$spacing-3};
104
- --spacing-3-5: #{$spacing-3-5};
105
- --spacing-4: #{$spacing-4};
106
- --spacing-5: #{$spacing-5};
107
- --spacing-6: #{$spacing-6};
108
- --spacing-7: #{$spacing-7};
109
- --spacing-8: #{$spacing-8};
110
- --spacing-9: #{$spacing-9};
111
- --spacing-10: #{$spacing-10};
112
- --spacing-11: #{$spacing-11};
113
- --spacing-12: #{$spacing-12};
114
- --spacing-14: #{$spacing-14};
115
- --spacing-16: #{$spacing-16};
116
-
117
- // ============================================================================
118
- // Typography - Font Families
119
- // ============================================================================
120
- --typography-font-family-base: #{$typography-font-family-base};
121
- --typography-font-family-mono: #{$typography-font-family-mono};
122
-
123
- // ============================================================================
124
- // Typography - Font Sizes
125
- // ============================================================================
126
- --typography-font-size-xs: #{$typography-font-size-xs};
127
- --typography-font-size-sm: #{$typography-font-size-sm};
128
- --typography-font-size-base: #{$typography-font-size-base};
129
- --typography-font-size-lg: #{$typography-font-size-lg};
130
- --typography-font-size-xl: #{$typography-font-size-xl};
131
- --typography-font-size-2xl: #{$typography-font-size-2xl};
132
- --typography-font-size-3xl: #{$typography-font-size-3xl};
133
- --typography-font-size-4xl: #{$typography-font-size-4xl};
134
- --typography-font-size-5xl: #{$typography-font-size-5xl};
135
- --typography-font-size-6xl: #{$typography-font-size-6xl};
136
- --typography-font-size-7xl: #{$typography-font-size-7xl};
137
-
138
- // ============================================================================
139
- // Typography - Font Weights
140
- // ============================================================================
141
- --typography-font-weight-normal: #{$typography-font-weight-normal};
142
- --typography-font-weight-medium: #{$typography-font-weight-medium};
143
- --typography-font-weight-semibold: #{$typography-font-weight-semibold};
144
- --typography-font-weight-bold: #{$typography-font-weight-bold};
145
-
146
- // ============================================================================
147
- // Typography - Line Heights
148
- // ============================================================================
149
- --typography-line-height-tight: #{$typography-line-height-tight};
150
- --typography-line-height-normal: #{$typography-line-height-normal};
151
- --typography-line-height-relaxed: #{$typography-line-height-relaxed};
152
-
153
99
  // ============================================================================
154
100
  // Elevation (Box Shadows) — light-tuned
155
101
  // ============================================================================
@@ -162,58 +108,6 @@
162
108
  --elevation-3: 0 4px 6px -2px rgba(16, 24, 40, 0.05), 0 12px 16px -4px rgba(16, 24, 40, 0.10);
163
109
  --elevation-4: 0 8px 8px -4px rgba(16, 24, 40, 0.04), 0 20px 24px -4px rgba(16, 24, 40, 0.10);
164
110
 
165
- // ============================================================================
166
- // Border Radius
167
- // ============================================================================
168
- --border-radius-none: #{$border-radius-none};
169
- --border-radius-sm: #{$border-radius-sm};
170
- --border-radius-md: #{$border-radius-md};
171
- --border-radius-lg: #{$border-radius-lg};
172
- --border-radius-xl: #{$border-radius-xl};
173
- --border-radius-2xl: #{$border-radius-2xl};
174
- --border-radius-full: #{$border-radius-full};
175
-
176
- // ============================================================================
177
- // Animation
178
- // ============================================================================
179
- --animation-duration-base: #{$animation-duration-fast};
180
- --animation-easing-ease-in: #{$animation-easing-ease-in};
181
- --animation-easing-ease-out: #{$animation-easing-ease-out};
182
- --animation-easing-ease-in-out: #{$animation-easing-ease-in-out};
183
-
184
- // ============================================================================
185
- // Size - Interactive Elements
186
- // ============================================================================
187
- --size-interactive-xs-height: #{$size-interactive-xs-height};
188
- --size-interactive-xs-padding: #{$size-interactive-xs-padding};
189
- --size-interactive-xs-font-size: #{$size-interactive-xs-font-size};
190
-
191
- --size-interactive-sm-height: #{$size-interactive-sm-height};
192
- --size-interactive-sm-padding: #{$size-interactive-sm-padding};
193
- --size-interactive-sm-font-size: #{$size-interactive-sm-font-size};
194
-
195
- --size-interactive-md-height: #{$size-interactive-md-height};
196
- --size-interactive-md-padding: #{$size-interactive-md-padding};
197
- --size-interactive-md-font-size: #{$size-interactive-md-font-size};
198
-
199
- --size-interactive-lg-height: #{$size-interactive-lg-height};
200
- --size-interactive-lg-padding: #{$size-interactive-lg-padding};
201
- --size-interactive-lg-font-size: #{$size-interactive-lg-font-size};
202
-
203
- // ============================================================================
204
- // Size - Minimum Touch Target
205
- // ============================================================================
206
- --size-min-touch-width: #{$size-min-touch-width};
207
- --size-min-touch-height: #{$size-min-touch-height};
208
-
209
- // ============================================================================
210
- // Layout - Content Width
211
- // ============================================================================
212
- // Canonical cap for page content. `lc-container size="xxl"` reads this, so an
213
- // app shell that centres its own content against the same custom property
214
- // stays in lockstep with the container instead of hard-coding a width.
215
- --lc-content-max-width: #{$size-content-max-width};
216
-
217
111
  // ============================================================================
218
112
  // Semantic Color Mappings for Light Theme (DS2.0 — mirrors dark token names)
219
113
  // ============================================================================
@@ -415,6 +309,147 @@
415
309
  --color-skeleton: #e6eff1;
416
310
  --color-skeleton-highlight: #f2f7f8;
417
311
 
312
+ // Semantic color scale aliases — map the numeric scale some components use
313
+ // onto the three canonical semantic shades so they always resolve.
314
+ --color-error-50: #{$color-error-light};
315
+ --color-error-100: #{$color-error-light};
316
+ --color-error-500: var(--color-error-default);
317
+ --color-error-600: var(--color-error-default);
318
+ --color-error-700: var(--color-error-dark);
319
+ --color-error-800: #5a0707; // Darker shade for active state
320
+ --color-success-50: #{$color-success-light};
321
+ --color-success-100: #{$color-success-light};
322
+ --color-success-500: var(--color-success-default);
323
+ --color-success-600: var(--color-success-default);
324
+ --color-success-700: var(--color-success-dark);
325
+ --color-warning-50: #{$color-warning-light};
326
+ --color-warning-100: #{$color-warning-light};
327
+ --color-warning-500: var(--color-warning-default);
328
+ --color-warning-600: var(--color-warning-default);
329
+ --color-warning-700: var(--color-warning-dark);
330
+ --color-info-50: #{$color-info-light};
331
+ --color-info-100: #{$color-info-light};
332
+ --color-info-500: var(--color-info-default);
333
+ --color-info-600: var(--color-info-default);
334
+ --color-info-700: var(--color-info-dark);
335
+ }
336
+
337
+ // Default theme (light) on :root
338
+ :root,
339
+ :root.light {
340
+ @include -light-theme-colors;
341
+
342
+ // ============================================================================
343
+ // Spacing
344
+ // ============================================================================
345
+ --spacing-0: #{$spacing-0};
346
+ --spacing-0-5: #{$spacing-0-5};
347
+ --spacing-1: #{$spacing-1};
348
+ --spacing-1-5: #{$spacing-1-5};
349
+ --spacing-2: #{$spacing-2};
350
+ --spacing-2-5: #{$spacing-2-5};
351
+ --spacing-3: #{$spacing-3};
352
+ --spacing-3-5: #{$spacing-3-5};
353
+ --spacing-4: #{$spacing-4};
354
+ --spacing-5: #{$spacing-5};
355
+ --spacing-6: #{$spacing-6};
356
+ --spacing-7: #{$spacing-7};
357
+ --spacing-8: #{$spacing-8};
358
+ --spacing-9: #{$spacing-9};
359
+ --spacing-10: #{$spacing-10};
360
+ --spacing-11: #{$spacing-11};
361
+ --spacing-12: #{$spacing-12};
362
+ --spacing-14: #{$spacing-14};
363
+ --spacing-16: #{$spacing-16};
364
+
365
+ // ============================================================================
366
+ // Typography - Font Families
367
+ // ============================================================================
368
+ --typography-font-family-base: #{$typography-font-family-base};
369
+ --typography-font-family-mono: #{$typography-font-family-mono};
370
+
371
+ // ============================================================================
372
+ // Typography - Font Sizes
373
+ // ============================================================================
374
+ --typography-font-size-xs: #{$typography-font-size-xs};
375
+ --typography-font-size-sm: #{$typography-font-size-sm};
376
+ --typography-font-size-base: #{$typography-font-size-base};
377
+ --typography-font-size-lg: #{$typography-font-size-lg};
378
+ --typography-font-size-xl: #{$typography-font-size-xl};
379
+ --typography-font-size-2xl: #{$typography-font-size-2xl};
380
+ --typography-font-size-3xl: #{$typography-font-size-3xl};
381
+ --typography-font-size-4xl: #{$typography-font-size-4xl};
382
+ --typography-font-size-5xl: #{$typography-font-size-5xl};
383
+ --typography-font-size-6xl: #{$typography-font-size-6xl};
384
+ --typography-font-size-7xl: #{$typography-font-size-7xl};
385
+
386
+ // ============================================================================
387
+ // Typography - Font Weights
388
+ // ============================================================================
389
+ --typography-font-weight-normal: #{$typography-font-weight-normal};
390
+ --typography-font-weight-medium: #{$typography-font-weight-medium};
391
+ --typography-font-weight-semibold: #{$typography-font-weight-semibold};
392
+ --typography-font-weight-bold: #{$typography-font-weight-bold};
393
+
394
+ // ============================================================================
395
+ // Typography - Line Heights
396
+ // ============================================================================
397
+ --typography-line-height-tight: #{$typography-line-height-tight};
398
+ --typography-line-height-normal: #{$typography-line-height-normal};
399
+ --typography-line-height-relaxed: #{$typography-line-height-relaxed};
400
+
401
+ // ============================================================================
402
+ // Border Radius
403
+ // ============================================================================
404
+ --border-radius-none: #{$border-radius-none};
405
+ --border-radius-sm: #{$border-radius-sm};
406
+ --border-radius-md: #{$border-radius-md};
407
+ --border-radius-lg: #{$border-radius-lg};
408
+ --border-radius-xl: #{$border-radius-xl};
409
+ --border-radius-2xl: #{$border-radius-2xl};
410
+ --border-radius-full: #{$border-radius-full};
411
+
412
+ // ============================================================================
413
+ // Animation
414
+ // ============================================================================
415
+ --animation-duration-base: #{$animation-duration-fast};
416
+ --animation-easing-ease-in: #{$animation-easing-ease-in};
417
+ --animation-easing-ease-out: #{$animation-easing-ease-out};
418
+ --animation-easing-ease-in-out: #{$animation-easing-ease-in-out};
419
+
420
+ // ============================================================================
421
+ // Size - Interactive Elements
422
+ // ============================================================================
423
+ --size-interactive-xs-height: #{$size-interactive-xs-height};
424
+ --size-interactive-xs-padding: #{$size-interactive-xs-padding};
425
+ --size-interactive-xs-font-size: #{$size-interactive-xs-font-size};
426
+
427
+ --size-interactive-sm-height: #{$size-interactive-sm-height};
428
+ --size-interactive-sm-padding: #{$size-interactive-sm-padding};
429
+ --size-interactive-sm-font-size: #{$size-interactive-sm-font-size};
430
+
431
+ --size-interactive-md-height: #{$size-interactive-md-height};
432
+ --size-interactive-md-padding: #{$size-interactive-md-padding};
433
+ --size-interactive-md-font-size: #{$size-interactive-md-font-size};
434
+
435
+ --size-interactive-lg-height: #{$size-interactive-lg-height};
436
+ --size-interactive-lg-padding: #{$size-interactive-lg-padding};
437
+ --size-interactive-lg-font-size: #{$size-interactive-lg-font-size};
438
+
439
+ // ============================================================================
440
+ // Size - Minimum Touch Target
441
+ // ============================================================================
442
+ --size-min-touch-width: #{$size-min-touch-width};
443
+ --size-min-touch-height: #{$size-min-touch-height};
444
+
445
+ // ============================================================================
446
+ // Layout - Content Width
447
+ // ============================================================================
448
+ // Canonical cap for page content. `lc-container size="xxl"` reads this, so an
449
+ // app shell that centres its own content against the same custom property
450
+ // stays in lockstep with the container instead of hard-coding a width.
451
+ --lc-content-max-width: #{$size-content-max-width};
452
+
418
453
  // ============================================================================
419
454
  // Short Aliases for Common Usage (Component Convenience)
420
455
  // ============================================================================
@@ -441,28 +476,13 @@
441
476
  --line-height-normal: var(--typography-line-height-normal);
442
477
  --line-height-relaxed: var(--typography-line-height-relaxed);
443
478
  --animation-timing-ease: var(--animation-easing-ease-in-out);
444
-
445
- // Semantic color scale aliases — map the numeric scale some components use
446
- // onto the three canonical semantic shades so they always resolve.
447
- --color-error-50: #{$color-error-light};
448
- --color-error-100: #{$color-error-light};
449
- --color-error-500: var(--color-error-default);
450
- --color-error-600: var(--color-error-default);
451
- --color-error-700: var(--color-error-dark);
452
- --color-error-800: #5a0707; // Darker shade for active state
453
- --color-success-50: #{$color-success-light};
454
- --color-success-100: #{$color-success-light};
455
- --color-success-500: var(--color-success-default);
456
- --color-success-600: var(--color-success-default);
457
- --color-success-700: var(--color-success-dark);
458
- --color-warning-50: #{$color-warning-light};
459
- --color-warning-100: #{$color-warning-light};
460
- --color-warning-500: var(--color-warning-default);
461
- --color-warning-600: var(--color-warning-default);
462
- --color-warning-700: var(--color-warning-dark);
463
- --color-info-50: #{$color-info-light};
464
- --color-info-100: #{$color-info-light};
465
- --color-info-500: var(--color-info-default);
466
- --color-info-600: var(--color-info-default);
467
- --color-info-700: var(--color-info-dark);
479
+ }
480
+
481
+ // `<lc-header theme="light">` keeps the light palette inside a dark page
482
+ // (request 043, F-25): its slot buttons and primary inks measured 1.05:1
483
+ // (outline) and 1.59:1 (link) there; with the tokens re-declared they match a
484
+ // light page (17.12:1, 6.21:1). A root-level token override does not reach
485
+ // inside a themed header.
486
+ .lc-header--light {
487
+ @include -light-theme-colors;
468
488
  }