@happyvertical/smrt-ui 0.55.16 → 0.55.18

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (166) hide show
  1. package/AGENTS.md +14 -0
  2. package/README.md +75 -0
  3. package/dist/components/calendar/Calendar.svelte +59 -56
  4. package/dist/components/calendar/CalendarView.svelte +80 -77
  5. package/dist/components/calendar/DayView.svelte +39 -36
  6. package/dist/components/chat/MessageBubble.svelte +26 -23
  7. package/dist/components/chat/ReactionPicker.svelte +12 -9
  8. package/dist/components/chat/TypingIndicator.svelte +12 -9
  9. package/dist/components/data/CollectionList.svelte +11 -8
  10. package/dist/components/data/CollectionToolbar.svelte +5 -2
  11. package/dist/components/data/DataTable.svelte +74 -59
  12. package/dist/components/data/ListSortSelect.svelte +8 -5
  13. package/dist/components/data/SortableHeader.svelte +10 -7
  14. package/dist/components/display/ConfidenceBadge.svelte +11 -8
  15. package/dist/components/display/CurrencyDisplay.svelte +7 -4
  16. package/dist/components/display/DateDisplay.svelte +6 -3
  17. package/dist/components/display/Icon.svelte +4 -1
  18. package/dist/components/display/StatusBadge.svelte +9 -6
  19. package/dist/components/feedback/Alert.svelte +12 -8
  20. package/dist/components/feedback/ConfirmDialog.svelte +13 -10
  21. package/dist/components/feedback/LoadingOverlay.svelte +37 -34
  22. package/dist/components/feedback/Meter.svelte +4 -1
  23. package/dist/components/feedback/Modal.svelte +26 -21
  24. package/dist/components/feedback/PhoneSheet.svelte +6 -3
  25. package/dist/components/feedback/Progress.svelte +8 -5
  26. package/dist/components/feedback/ProgressBar.svelte +13 -10
  27. package/dist/components/feedback/Spinner.svelte +4 -1
  28. package/dist/components/feedback/ToastViewport.svelte +18 -15
  29. package/dist/components/feedback/WorkingStrip.svelte +6 -3
  30. package/dist/components/forms/CameraCapture.svelte +8 -5
  31. package/dist/components/forms/Checkbox.svelte +11 -8
  32. package/dist/components/forms/Combobox.svelte +5 -2
  33. package/dist/components/forms/DatePicker.svelte +7 -2
  34. package/dist/components/forms/DictationButton.svelte +17 -14
  35. package/dist/components/forms/DictationStatus.svelte +12 -9
  36. package/dist/components/forms/ErrorSummary.svelte +4 -1
  37. package/dist/components/forms/FieldLabel.svelte +9 -6
  38. package/dist/components/forms/Fieldset.svelte +4 -1
  39. package/dist/components/forms/FilePicker.svelte +5 -2
  40. package/dist/components/forms/Form.svelte +1 -1
  41. package/dist/components/forms/FormActionBar.svelte +4 -1
  42. package/dist/components/forms/FormGroup.svelte +6 -3
  43. package/dist/components/forms/Input.svelte +22 -15
  44. package/dist/components/forms/InputGroup.svelte +6 -3
  45. package/dist/components/forms/Listbox.svelte +5 -2
  46. package/dist/components/forms/MultiSelect.svelte +4 -1
  47. package/dist/components/forms/Radio.svelte +9 -6
  48. package/dist/components/forms/RadioGroup.svelte +5 -2
  49. package/dist/components/forms/RangeSlider.svelte +5 -2
  50. package/dist/components/forms/RelationInput.svelte +7 -4
  51. package/dist/components/forms/SearchInput.svelte +7 -4
  52. package/dist/components/forms/SegmentedControl.svelte +6 -3
  53. package/dist/components/forms/Select.svelte +20 -13
  54. package/dist/components/forms/SignaturePad.svelte +8 -5
  55. package/dist/components/forms/Slider.svelte +5 -2
  56. package/dist/components/forms/StagedControlReview.svelte +15 -12
  57. package/dist/components/forms/Switch.svelte +8 -5
  58. package/dist/components/forms/TagsInput.svelte +5 -2
  59. package/dist/components/forms/Textarea.svelte +20 -13
  60. package/dist/components/forms/TimePicker.svelte +7 -2
  61. package/dist/components/forms/Toggle.svelte +14 -11
  62. package/dist/components/forms/ToggleButton.svelte +5 -2
  63. package/dist/components/layout/ActionGroup.svelte +4 -1
  64. package/dist/components/layout/Container.svelte +4 -1
  65. package/dist/components/layout/EmptyState.svelte +11 -8
  66. package/dist/components/layout/Footer.svelte +4 -1
  67. package/dist/components/layout/Grid.svelte +13 -10
  68. package/dist/components/layout/Header.svelte +4 -1
  69. package/dist/components/layout/Masthead.svelte +4 -1
  70. package/dist/components/layout/PageHeader.svelte +12 -9
  71. package/dist/components/layout/PageLayout.svelte +3 -0
  72. package/dist/components/layout/SummaryCard.svelte +9 -6
  73. package/dist/components/memberships/MembershipCard.svelte +5 -2
  74. package/dist/components/memberships/MembershipList.svelte +5 -2
  75. package/dist/components/nav/FilterChips.svelte +13 -10
  76. package/dist/components/nav/Tabs.svelte +75 -41
  77. package/dist/components/permissions/PermissionPicker.svelte +5 -2
  78. package/dist/components/roles/RoleBadge.svelte +8 -5
  79. package/dist/components/roles/RoleSelector.svelte +22 -19
  80. package/dist/components/theme/ThemeProvider.svelte +7 -4
  81. package/dist/components/ui/Accordion.svelte +4 -1
  82. package/dist/components/ui/AccordionItem.svelte +5 -2
  83. package/dist/components/ui/Avatar.svelte +10 -7
  84. package/dist/components/ui/Badge.svelte +6 -2
  85. package/dist/components/ui/Button.svelte +49 -37
  86. package/dist/components/ui/Card.svelte +18 -14
  87. package/dist/components/ui/Chip.svelte +41 -14
  88. package/dist/components/ui/Disclosure.svelte +5 -2
  89. package/dist/components/ui/Dropdown.svelte +33 -25
  90. package/dist/components/ui/IconToggle.svelte +12 -9
  91. package/dist/components/ui/IconToggle.svelte.d.ts +1 -1
  92. package/dist/components/ui/IconToggle.svelte.d.ts.map +1 -1
  93. package/dist/components/ui/IconToggleGroup.svelte +8 -5
  94. package/dist/components/ui/Pagination.svelte +11 -8
  95. package/dist/components/ui/Popover.svelte +9 -6
  96. package/dist/components/ui/Skeleton.svelte +10 -7
  97. package/dist/components/ui/Tooltip.svelte +13 -9
  98. package/dist/components/ui/Tree.svelte +12 -9
  99. package/dist/styles/layers.css +8 -0
  100. package/dist/styles/layers.d.ts +9 -0
  101. package/dist/styles/layers.d.ts.map +1 -0
  102. package/dist/styles/layers.js +8 -0
  103. package/dist/styles/tokens.css +27 -69
  104. package/dist/styles/unstyled.css +65 -0
  105. package/dist/svelte/playground/BaseControlsPreview.svelte +3 -0
  106. package/dist/svelte/playground/CalendarPreview.svelte +5 -2
  107. package/dist/svelte/playground/CapturePreview.svelte +3 -0
  108. package/dist/svelte/playground/CodeSelectorsPreview.svelte +3 -0
  109. package/dist/svelte/playground/CollectionsPreview.svelte +3 -0
  110. package/dist/svelte/playground/DataTablePreview.svelte +3 -0
  111. package/dist/svelte/playground/FeedbackPreview.svelte +3 -0
  112. package/dist/svelte/playground/InteractiveControlsPreview.svelte +3 -0
  113. package/dist/svelte/playground/StylelessPreview.svelte +110 -0
  114. package/dist/svelte/playground/StylelessPreview.svelte.d.ts +4 -0
  115. package/dist/svelte/playground/StylelessPreview.svelte.d.ts.map +1 -0
  116. package/dist/svelte/playground.d.ts.map +1 -1
  117. package/dist/svelte/playground.js +10 -0
  118. package/dist/test-support/setup.js +9 -0
  119. package/dist/theme/ThemeProvider.svelte +3 -0
  120. package/dist/themes/CUSTOM_THEME_GUIDE.md +40 -0
  121. package/dist/themes/README.md +151 -0
  122. package/dist/themes/ThemeProvider.svelte +181 -12
  123. package/dist/themes/ThemeProvider.svelte.d.ts +7 -2
  124. package/dist/themes/ThemeProvider.svelte.d.ts.map +1 -1
  125. package/dist/themes/components/ColorSchemeToggle.svelte +17 -14
  126. package/dist/themes/components/ThemeSwitcher.svelte +14 -11
  127. package/dist/themes/create-theme.d.ts +22 -1
  128. package/dist/themes/create-theme.d.ts.map +1 -1
  129. package/dist/themes/create-theme.js +100 -9
  130. package/dist/themes/css-generator.d.ts.map +1 -1
  131. package/dist/themes/css-generator.js +20 -20
  132. package/dist/themes/derive.d.ts +31 -0
  133. package/dist/themes/derive.d.ts.map +1 -0
  134. package/dist/themes/derive.js +183 -0
  135. package/dist/themes/glass/index.d.ts.map +1 -1
  136. package/dist/themes/glass/index.js +127 -14
  137. package/dist/themes/happyvertical/index.d.ts.map +1 -1
  138. package/dist/themes/happyvertical/index.js +101 -20
  139. package/dist/themes/index.d.ts +2 -2
  140. package/dist/themes/index.d.ts.map +1 -1
  141. package/dist/themes/index.js +1 -1
  142. package/dist/themes/material/index.d.ts.map +1 -1
  143. package/dist/themes/material/index.js +129 -28
  144. package/dist/themes/required-tokens.generated.json +201 -0
  145. package/dist/themes/shared.d.ts +35 -0
  146. package/dist/themes/shared.d.ts.map +1 -1
  147. package/dist/themes/shared.js +32 -0
  148. package/dist/themes/smrt/index.d.ts +3 -0
  149. package/dist/themes/smrt/index.d.ts.map +1 -1
  150. package/dist/themes/smrt/index.js +108 -26
  151. package/dist/themes/studio/index.d.ts.map +1 -1
  152. package/dist/themes/studio/index.js +116 -40
  153. package/dist/themes/styles/base.css +229 -1
  154. package/dist/themes/styles/glass.css +107 -20
  155. package/dist/themes/styles/happyvertical.css +111 -15
  156. package/dist/themes/styles/material.css +127 -35
  157. package/dist/themes/styles/smrt.css +126 -31
  158. package/dist/themes/styles/studio.css +132 -37
  159. package/dist/themes/theme-script.d.ts +3 -1
  160. package/dist/themes/theme-script.d.ts.map +1 -1
  161. package/dist/themes/theme-script.js +7 -2
  162. package/dist/themes/types.d.ts +118 -6
  163. package/dist/themes/types.d.ts.map +1 -1
  164. package/dist/utils/theme/typography.d.ts +21 -21
  165. package/dist/utils/theme/typography.js +21 -21
  166. package/package.json +8 -2
@@ -1,4 +1,5 @@
1
- /**
1
+
2
+ @layer smrt.reset, smrt.structure, smrt.theme;/**
2
3
  * Glass Theme CSS
3
4
  *
4
5
  * Static CSS file for Glass theme.
@@ -26,6 +27,10 @@
26
27
  --smrt-color-on-tertiary: #ffffff;
27
28
  --smrt-color-tertiary-container: rgba(88, 86, 214, 0.15);
28
29
  --smrt-color-on-tertiary-container: #2a2866;
30
+ --smrt-color-info: #5856d6;
31
+ --smrt-color-on-info: #ffffff;
32
+ --smrt-color-info-container: rgba(88, 86, 214, 0.15);
33
+ --smrt-color-on-info-container: #2a2866;
29
34
  --smrt-color-error: #ff3b30;
30
35
  --smrt-color-on-error: #ffffff;
31
36
  --smrt-color-error-container: rgba(255, 59, 48, 0.15);
@@ -146,10 +151,10 @@
146
151
  --smrt-typography-label-medium-font: 500 0.8125rem/1.4 var(--smrt-font-family);
147
152
  --smrt-typography-label-small-size: 0.6875rem;
148
153
  --smrt-typography-label-small-line-height: 1.3;
149
- --smrt-typography-label-small-weight: 600;
154
+ --smrt-typography-label-small-weight: 500;
150
155
  --smrt-typography-label-small-tracking: -0.004em;
151
156
  --smrt-typography-label-small-font-family: var(--smrt-font-family);
152
- --smrt-typography-label-small-font: 600 0.6875rem/1.3 var(--smrt-font-family);
157
+ --smrt-typography-label-small-font: 500 0.6875rem/1.3 var(--smrt-font-family);
153
158
  --smrt-spacing-0: 0;
154
159
  --smrt-spacing-1: 0.25rem;
155
160
  --smrt-spacing-2: 0.5rem;
@@ -191,12 +196,12 @@
191
196
  --smrt-radius-medium: 0.5rem;
192
197
  --smrt-radius-large: 0.75rem;
193
198
  --smrt-radius-extra-large: 1rem;
194
- --smrt-elevation-0: none;
195
- --smrt-elevation-1: 0 1px 3px rgba(0, 0, 0, 0.04), 0 1px 2px rgba(0, 0, 0, 0.02);
196
- --smrt-elevation-2: 0 3px 6px rgba(0, 0, 0, 0.06), 0 2px 4px rgba(0, 0, 0, 0.03);
197
- --smrt-elevation-3: 0 6px 12px rgba(0, 0, 0, 0.08), 0 4px 8px rgba(0, 0, 0, 0.04);
198
- --smrt-elevation-4: 0 12px 24px rgba(0, 0, 0, 0.1), 0 8px 16px rgba(0, 0, 0, 0.05);
199
- --smrt-elevation-5: 0 24px 48px rgba(0, 0, 0, 0.12), 0 16px 32px rgba(0, 0, 0, 0.06);
199
+ --smrt-elevation-0: 0 0 0 0 transparent;
200
+ --smrt-elevation-1: 0 1px 2px 0 color-mix(in srgb, var(--smrt-shadow-color) 5%, transparent), 0 2px 6px -2px color-mix(in srgb, var(--smrt-shadow-color) 5%, transparent);
201
+ --smrt-elevation-2: 0 1px 3px 0 color-mix(in srgb, var(--smrt-shadow-color) 6%, transparent), 0 6px 14px -4px color-mix(in srgb, var(--smrt-shadow-color) 8%, transparent);
202
+ --smrt-elevation-3: 0 2px 4px 0 color-mix(in srgb, var(--smrt-shadow-color) 7%, transparent), 0 12px 24px -8px color-mix(in srgb, var(--smrt-shadow-color) 10%, transparent);
203
+ --smrt-elevation-4: 0 2px 6px 0 color-mix(in srgb, var(--smrt-shadow-color) 8%, transparent), 0 20px 40px -12px color-mix(in srgb, var(--smrt-shadow-color) 12%, transparent);
204
+ --smrt-elevation-5: 0 4px 8px 0 color-mix(in srgb, var(--smrt-shadow-color) 8%, transparent), 0 32px 64px -16px color-mix(in srgb, var(--smrt-shadow-color) 16%, transparent);
200
205
  --smrt-duration-instant: 0ms;
201
206
  --smrt-duration-fast: 100ms;
202
207
  --smrt-duration-normal: 200ms;
@@ -234,10 +239,48 @@
234
239
  --smrt-z-index-toast: 1500;
235
240
  --smrt-z-index-tooltip: 1600;
236
241
  --smrt-z-index-loading: 1700;
242
+ --smrt-surface-ground: #f2f2f7;
243
+ --smrt-surface-panel: color-mix(in srgb, #ffffff 72%, transparent);
244
+ --smrt-surface-control: color-mix(in srgb, #767680 12%, transparent);
245
+ --smrt-surface-raised: color-mix(in srgb, #ffffff 88%, transparent);
246
+ --smrt-surface-sunken: color-mix(in srgb, #767680 8%, transparent);
247
+ --smrt-surface-overlay: rgba(0, 0, 0, 0.4);
248
+ --smrt-hairline-color: color-mix(in srgb, var(--smrt-color-on-surface) 10%, transparent);
249
+ --smrt-hairline-strong-color: color-mix(in srgb, var(--smrt-color-on-surface) 26%, transparent);
250
+ --smrt-hairline: 1px solid var(--smrt-hairline-color);
251
+ --smrt-hairline-strong: 1px solid var(--smrt-hairline-strong-color);
252
+ --smrt-inset-highlight: inset 0 1px 0 transparent;
253
+ --smrt-state-hover: 0.10;
254
+ --smrt-state-pressed: 0.14;
255
+ --smrt-state-selected: 0.14;
256
+ --smrt-state-focus: 0.14;
257
+ --smrt-state-dragged: 0.18;
258
+ --smrt-state-disabled: 0.38;
259
+ --smrt-shadow-color: rgb(0 0 0);
260
+ --smrt-control-radius: var(--smrt-radius-lg);
261
+ --smrt-control-radius-small: var(--smrt-radius-md);
262
+ --smrt-control-height: 2.75rem;
263
+ --smrt-control-height-small: 2.25rem;
264
+ --smrt-control-weight: 500;
265
+ --smrt-control-border: var(--smrt-hairline-strong);
266
+ --smrt-focus-ring-color: var(--smrt-color-primary);
267
+ --smrt-focus-ring-width: 2px;
268
+ --smrt-focus-ring-offset: 2px;
269
+ --smrt-accent-color: var(--smrt-color-primary);
270
+ --smrt-selection-background: var(--smrt-color-primary-container);
271
+ --smrt-selection-color: var(--smrt-color-on-primary-container);
272
+ --smrt-caret-color: var(--smrt-color-primary);
273
+ --smrt-scrollbar-thumb: var(--smrt-hairline-strong-color);
274
+ --smrt-scrollbar-track: transparent;
237
275
  --smrt-glass-blur: 20px;
238
276
  --smrt-glass-saturation: 180%;
277
+ --smrt-glass-surface: color-mix(in srgb, #ffffff 72%, transparent);
278
+ --smrt-glass-surface-strong: color-mix(in srgb, #ffffff 88%, transparent);
279
+ --smrt-glass-border: var(--smrt-hairline-color);
239
280
  --smrt-glass-border-opacity: 0.3;
240
281
  --smrt-glass-background-opacity: 0.72;
282
+ --smrt-duration-scheme: var(--smrt-duration-medium1);
283
+ --smrt-font-feature-settings: normal;
241
284
  }
242
285
 
243
286
  [data-theme="glass"][data-color-scheme="dark"] {
@@ -259,6 +302,10 @@
259
302
  --smrt-color-on-tertiary: #ffffff;
260
303
  --smrt-color-tertiary-container: rgba(94, 92, 230, 0.25);
261
304
  --smrt-color-on-tertiary-container: #d4d3ff;
305
+ --smrt-color-info: #5e5ce6;
306
+ --smrt-color-on-info: #ffffff;
307
+ --smrt-color-info-container: rgba(94, 92, 230, 0.25);
308
+ --smrt-color-on-info-container: #d4d3ff;
262
309
  --smrt-color-error: #ff453a;
263
310
  --smrt-color-on-error: #000000;
264
311
  --smrt-color-error-container: rgba(255, 69, 58, 0.25);
@@ -271,7 +318,7 @@
271
318
  --smrt-color-on-success: #000000;
272
319
  --smrt-color-success-container: rgba(48, 209, 88, 0.25);
273
320
  --smrt-color-on-success-container: #b8f5c9;
274
- --smrt-color-surface: rgba(30, 30, 30, 0.72);
321
+ --smrt-color-surface: rgba(29, 29, 38, 0.72);
275
322
  --smrt-color-on-surface: #ffffff;
276
323
  --smrt-color-surface-variant: rgba(44, 44, 46, 0.65);
277
324
  --smrt-color-on-surface-variant: #8e8e93;
@@ -282,7 +329,7 @@
282
329
  --smrt-color-surface-container-lowest: rgba(28, 28, 30, 0.55);
283
330
  --smrt-color-surface-dim: rgba(0, 0, 0, 0.3);
284
331
  --smrt-color-surface-bright: rgba(58, 58, 60, 0.9);
285
- --smrt-color-background: #000000;
332
+ --smrt-color-background: #0b0b0f;
286
333
  --smrt-color-on-background: #ffffff;
287
334
  --smrt-color-outline: rgba(160, 160, 166, 0.8);
288
335
  --smrt-color-outline-variant: rgba(84, 84, 88, 0.35);
@@ -291,7 +338,7 @@
291
338
  --smrt-color-inverse-primary: #007aff;
292
339
  --smrt-color-shadow: rgba(0, 0, 0, 0.4);
293
340
  --smrt-color-scrim: rgba(0, 0, 0, 0.6);
294
- --smrt-color-glass-backdrop: rgba(30, 30, 30, 0.72);
341
+ --smrt-color-glass-backdrop: rgba(29, 29, 38, 0.72);
295
342
  --smrt-color-glass-border: rgba(255, 255, 255, 0.1);
296
343
  --smrt-typography-display-large-size: 3rem;
297
344
  --smrt-typography-display-large-line-height: 1.1;
@@ -379,10 +426,10 @@
379
426
  --smrt-typography-label-medium-font: 500 0.8125rem/1.4 var(--smrt-font-family);
380
427
  --smrt-typography-label-small-size: 0.6875rem;
381
428
  --smrt-typography-label-small-line-height: 1.3;
382
- --smrt-typography-label-small-weight: 600;
429
+ --smrt-typography-label-small-weight: 500;
383
430
  --smrt-typography-label-small-tracking: -0.004em;
384
431
  --smrt-typography-label-small-font-family: var(--smrt-font-family);
385
- --smrt-typography-label-small-font: 600 0.6875rem/1.3 var(--smrt-font-family);
432
+ --smrt-typography-label-small-font: 500 0.6875rem/1.3 var(--smrt-font-family);
386
433
  --smrt-spacing-0: 0;
387
434
  --smrt-spacing-1: 0.25rem;
388
435
  --smrt-spacing-2: 0.5rem;
@@ -424,12 +471,12 @@
424
471
  --smrt-radius-medium: 0.5rem;
425
472
  --smrt-radius-large: 0.75rem;
426
473
  --smrt-radius-extra-large: 1rem;
427
- --smrt-elevation-0: none;
428
- --smrt-elevation-1: 0 1px 3px rgba(0, 0, 0, 0.04), 0 1px 2px rgba(0, 0, 0, 0.02);
429
- --smrt-elevation-2: 0 3px 6px rgba(0, 0, 0, 0.06), 0 2px 4px rgba(0, 0, 0, 0.03);
430
- --smrt-elevation-3: 0 6px 12px rgba(0, 0, 0, 0.08), 0 4px 8px rgba(0, 0, 0, 0.04);
431
- --smrt-elevation-4: 0 12px 24px rgba(0, 0, 0, 0.1), 0 8px 16px rgba(0, 0, 0, 0.05);
432
- --smrt-elevation-5: 0 24px 48px rgba(0, 0, 0, 0.12), 0 16px 32px rgba(0, 0, 0, 0.06);
474
+ --smrt-elevation-0: 0 0 0 0 transparent;
475
+ --smrt-elevation-1: 0 1px 2px 0 color-mix(in srgb, var(--smrt-shadow-color) 20%, transparent), 0 2px 6px -2px color-mix(in srgb, var(--smrt-shadow-color) 14%, transparent);
476
+ --smrt-elevation-2: var(--smrt-inset-highlight), 0 1px 3px 0 color-mix(in srgb, var(--smrt-shadow-color) 24%, transparent), 0 6px 14px -4px color-mix(in srgb, var(--smrt-shadow-color) 18%, transparent);
477
+ --smrt-elevation-3: var(--smrt-inset-highlight), 0 2px 4px 0 color-mix(in srgb, var(--smrt-shadow-color) 26%, transparent), 0 12px 24px -8px color-mix(in srgb, var(--smrt-shadow-color) 22%, transparent);
478
+ --smrt-elevation-4: var(--smrt-inset-highlight), 0 2px 6px 0 color-mix(in srgb, var(--smrt-shadow-color) 28%, transparent), 0 20px 40px -12px color-mix(in srgb, var(--smrt-shadow-color) 26%, transparent);
479
+ --smrt-elevation-5: var(--smrt-inset-highlight), 0 4px 8px 0 color-mix(in srgb, var(--smrt-shadow-color) 30%, transparent), 0 32px 64px -16px color-mix(in srgb, var(--smrt-shadow-color) 30%, transparent);
433
480
  --smrt-duration-instant: 0ms;
434
481
  --smrt-duration-fast: 100ms;
435
482
  --smrt-duration-normal: 200ms;
@@ -467,13 +514,52 @@
467
514
  --smrt-z-index-toast: 1500;
468
515
  --smrt-z-index-tooltip: 1600;
469
516
  --smrt-z-index-loading: 1700;
517
+ --smrt-surface-ground: #0b0b0f;
518
+ --smrt-surface-panel: color-mix(in srgb, #1d1d26 72%, transparent);
519
+ --smrt-surface-control: color-mix(in srgb, #000000 28%, transparent);
520
+ --smrt-surface-raised: color-mix(in srgb, #2a2a34 88%, transparent);
521
+ --smrt-surface-sunken: color-mix(in srgb, #000000 38%, transparent);
522
+ --smrt-surface-overlay: rgba(0, 0, 0, 0.6);
523
+ --smrt-hairline-color: color-mix(in srgb, var(--smrt-color-on-surface) 12%, transparent);
524
+ --smrt-hairline-strong-color: color-mix(in srgb, var(--smrt-color-on-surface) 28%, transparent);
525
+ --smrt-hairline: 1px solid var(--smrt-hairline-color);
526
+ --smrt-hairline-strong: 1px solid var(--smrt-hairline-strong-color);
527
+ --smrt-inset-highlight: inset 0 1px 0 rgb(255 255 255 / 0.1);
528
+ --smrt-state-hover: 0.10;
529
+ --smrt-state-pressed: 0.14;
530
+ --smrt-state-selected: 0.14;
531
+ --smrt-state-focus: 0.14;
532
+ --smrt-state-dragged: 0.18;
533
+ --smrt-state-disabled: 0.38;
534
+ --smrt-shadow-color: rgb(0 0 0);
535
+ --smrt-control-radius: var(--smrt-radius-lg);
536
+ --smrt-control-radius-small: var(--smrt-radius-md);
537
+ --smrt-control-height: 2.75rem;
538
+ --smrt-control-height-small: 2.25rem;
539
+ --smrt-control-weight: 500;
540
+ --smrt-control-border: var(--smrt-hairline-strong);
541
+ --smrt-focus-ring-color: var(--smrt-color-primary);
542
+ --smrt-focus-ring-width: 2px;
543
+ --smrt-focus-ring-offset: 2px;
544
+ --smrt-accent-color: var(--smrt-color-primary);
545
+ --smrt-selection-background: var(--smrt-color-primary-container);
546
+ --smrt-selection-color: var(--smrt-color-on-primary-container);
547
+ --smrt-caret-color: var(--smrt-color-primary);
548
+ --smrt-scrollbar-thumb: var(--smrt-hairline-strong-color);
549
+ --smrt-scrollbar-track: transparent;
470
550
  --smrt-glass-blur: 20px;
471
551
  --smrt-glass-saturation: 180%;
552
+ --smrt-glass-surface: color-mix(in srgb, #1d1d26 72%, transparent);
553
+ --smrt-glass-surface-strong: color-mix(in srgb, #1d1d26 88%, transparent);
554
+ --smrt-glass-border: color-mix(in srgb, #ffffff 10%, transparent);
472
555
  --smrt-glass-border-opacity: 0.3;
473
556
  --smrt-glass-background-opacity: 0.72;
557
+ --smrt-duration-scheme: var(--smrt-duration-medium1);
558
+ --smrt-font-feature-settings: normal;
474
559
  }
475
560
 
476
561
  /* Glass utility classes */
562
+ @layer smrt.theme {
477
563
  .smrt-glass {
478
564
  background: var(--smrt-color-surface);
479
565
  backdrop-filter: blur(var(--smrt-glass-blur)) saturate(var(--smrt-glass-saturation));
@@ -494,6 +580,7 @@
494
580
  -webkit-backdrop-filter: blur(calc(var(--smrt-glass-blur) * 0.5)) saturate(var(--smrt-glass-saturation));
495
581
  border: 1px solid var(--smrt-color-glass-border);
496
582
  }
583
+ }
497
584
 
498
585
  /*
499
586
  * Material-3 vocabulary aliases + helper tokens (issue #1431).
@@ -1,4 +1,5 @@
1
- /**
1
+
2
+ @layer smrt.reset, smrt.structure, smrt.theme;/**
2
3
  * HappyVertical Theme CSS — "Day Shift"
3
4
  *
4
5
  * Static CSS for the HappyVertical brand theme (happyvertical/smrt#2318): a
@@ -39,6 +40,10 @@
39
40
  --smrt-color-on-tertiary: #ffffff;
40
41
  --smrt-color-tertiary-container: #d7e4ea;
41
42
  --smrt-color-on-tertiary-container: #1b333e;
43
+ --smrt-color-info: #3c5a68;
44
+ --smrt-color-on-info: #ffffff;
45
+ --smrt-color-info-container: #d7e4ea;
46
+ --smrt-color-on-info-container: #1b333e;
42
47
  --smrt-color-error: #9b3b32;
43
48
  --smrt-color-on-error: #ffffff;
44
49
  --smrt-color-error-container: #f6dfdc;
@@ -202,12 +207,12 @@
202
207
  --smrt-radius-medium: 0.375rem;
203
208
  --smrt-radius-large: 0.5rem;
204
209
  --smrt-radius-extra-large: 0.75rem;
205
- --smrt-elevation-0: none;
206
- --smrt-elevation-1: inset 0 0 0 1px rgba(32, 39, 43, 0.1);
207
- --smrt-elevation-2: 0 1px 2px 0 rgba(32, 39, 43, 0.06);
208
- --smrt-elevation-3: 0 2px 6px -2px rgba(32, 39, 43, 0.1);
209
- --smrt-elevation-4: 0 6px 16px -6px rgba(32, 39, 43, 0.14);
210
- --smrt-elevation-5: 0 12px 28px -12px rgba(32, 39, 43, 0.18);
210
+ --smrt-elevation-0: 0 0 0 0 transparent;
211
+ --smrt-elevation-1: inset 0 0 0 1px var(--smrt-hairline-color);
212
+ --smrt-elevation-2: 0 1px 2px 0 color-mix(in srgb, var(--smrt-shadow-color) 8%, transparent);
213
+ --smrt-elevation-3: 0 1px 2px 0 color-mix(in srgb, var(--smrt-shadow-color) 8%, transparent), 0 2px 6px -2px color-mix(in srgb, var(--smrt-shadow-color) 8%, transparent);
214
+ --smrt-elevation-4: 0 1px 3px 0 color-mix(in srgb, var(--smrt-shadow-color) 10%, transparent), 0 6px 16px -6px color-mix(in srgb, var(--smrt-shadow-color) 12%, transparent);
215
+ --smrt-elevation-5: 0 2px 4px 0 color-mix(in srgb, var(--smrt-shadow-color) 10%, transparent), 0 12px 28px -12px color-mix(in srgb, var(--smrt-shadow-color) 16%, transparent);
211
216
  --smrt-duration-instant: 0ms;
212
217
  --smrt-duration-fast: 90ms;
213
218
  --smrt-duration-normal: 120ms;
@@ -245,6 +250,48 @@
245
250
  --smrt-z-index-toast: 1500;
246
251
  --smrt-z-index-tooltip: 1600;
247
252
  --smrt-z-index-loading: 1700;
253
+ --smrt-surface-ground: #e8ebe9;
254
+ --smrt-surface-panel: #f4f6f5;
255
+ --smrt-surface-control: #fbfcfb;
256
+ --smrt-surface-raised: #f4f6f5;
257
+ --smrt-surface-sunken: #e1e6e3;
258
+ --smrt-surface-overlay: rgba(20, 24, 27, 0.45);
259
+ --smrt-hairline-color: var(--smrt-color-outline-variant);
260
+ --smrt-hairline-strong-color: var(--smrt-color-outline);
261
+ --smrt-hairline: 1px solid var(--smrt-hairline-color);
262
+ --smrt-hairline-strong: 1px solid var(--smrt-hairline-strong-color);
263
+ --smrt-inset-highlight: inset 0 1px 0 transparent;
264
+ --smrt-state-hover: 0.06;
265
+ --smrt-state-pressed: 0.10;
266
+ --smrt-state-selected: 0.10;
267
+ --smrt-state-focus: 0.10;
268
+ --smrt-state-dragged: 0.12;
269
+ --smrt-state-disabled: 0.38;
270
+ --smrt-shadow-color: rgb(32 39 43);
271
+ --smrt-control-radius: var(--smrt-radius-md);
272
+ --smrt-control-radius-small: var(--smrt-radius-sm);
273
+ --smrt-control-height: 2.5rem;
274
+ --smrt-control-height-small: 2rem;
275
+ --smrt-control-weight: 500;
276
+ --smrt-control-border: var(--smrt-hairline-strong);
277
+ --smrt-focus-ring-color: var(--smrt-color-primary);
278
+ --smrt-focus-ring-width: 2px;
279
+ --smrt-focus-ring-offset: 2px;
280
+ --smrt-accent-color: var(--smrt-color-primary);
281
+ --smrt-selection-background: var(--smrt-color-primary-container);
282
+ --smrt-selection-color: var(--smrt-color-on-primary-container);
283
+ --smrt-caret-color: var(--smrt-color-primary);
284
+ --smrt-scrollbar-thumb: var(--smrt-hairline-strong-color);
285
+ --smrt-scrollbar-track: transparent;
286
+ --smrt-glass-blur: 0px;
287
+ --smrt-glass-saturation: 100%;
288
+ --smrt-glass-surface: var(--smrt-surface-panel);
289
+ --smrt-glass-surface-strong: var(--smrt-surface-raised);
290
+ --smrt-glass-border: var(--smrt-hairline-color);
291
+ --smrt-glass-border-opacity: 1;
292
+ --smrt-glass-background-opacity: 1;
293
+ --smrt-duration-scheme: var(--smrt-duration-medium1);
294
+ --smrt-font-feature-settings: normal;
248
295
  }
249
296
 
250
297
  [data-theme="happyvertical"][data-color-scheme="dark"] {
@@ -266,6 +313,10 @@
266
313
  --smrt-color-on-tertiary: #10262e;
267
314
  --smrt-color-tertiary-container: #1e313a;
268
315
  --smrt-color-on-tertiary-container: #c6dee8;
316
+ --smrt-color-info: #9cbecc;
317
+ --smrt-color-on-info: #10262e;
318
+ --smrt-color-info-container: #1e313a;
319
+ --smrt-color-on-info-container: #c6dee8;
269
320
  --smrt-color-error: #e89b92;
270
321
  --smrt-color-on-error: #3b120d;
271
322
  --smrt-color-error-container: #402019;
@@ -429,12 +480,12 @@
429
480
  --smrt-radius-medium: 0.375rem;
430
481
  --smrt-radius-large: 0.5rem;
431
482
  --smrt-radius-extra-large: 0.75rem;
432
- --smrt-elevation-0: none;
433
- --smrt-elevation-1: inset 0 0 0 1px rgba(228, 233, 231, 0.08);
434
- --smrt-elevation-2: 0 1px 2px 0 rgba(0, 0, 0, 0.4);
435
- --smrt-elevation-3: 0 2px 6px -2px rgba(0, 0, 0, 0.5);
436
- --smrt-elevation-4: 0 6px 16px -6px rgba(0, 0, 0, 0.6);
437
- --smrt-elevation-5: 0 12px 28px -12px rgba(0, 0, 0, 0.7);
483
+ --smrt-elevation-0: 0 0 0 0 transparent;
484
+ --smrt-elevation-1: inset 0 0 0 1px var(--smrt-hairline-color);
485
+ --smrt-elevation-2: var(--smrt-inset-highlight), 0 1px 2px 0 color-mix(in srgb, var(--smrt-shadow-color) 40%, transparent);
486
+ --smrt-elevation-3: var(--smrt-inset-highlight), 0 1px 2px 0 color-mix(in srgb, var(--smrt-shadow-color) 40%, transparent), 0 2px 6px -2px color-mix(in srgb, var(--smrt-shadow-color) 36%, transparent);
487
+ --smrt-elevation-4: var(--smrt-inset-highlight), 0 1px 3px 0 color-mix(in srgb, var(--smrt-shadow-color) 44%, transparent), 0 6px 16px -6px color-mix(in srgb, var(--smrt-shadow-color) 44%, transparent);
488
+ --smrt-elevation-5: var(--smrt-inset-highlight), 0 2px 4px 0 color-mix(in srgb, var(--smrt-shadow-color) 46%, transparent), 0 12px 28px -12px color-mix(in srgb, var(--smrt-shadow-color) 52%, transparent);
438
489
  --smrt-duration-instant: 0ms;
439
490
  --smrt-duration-fast: 90ms;
440
491
  --smrt-duration-normal: 120ms;
@@ -472,6 +523,48 @@
472
523
  --smrt-z-index-toast: 1500;
473
524
  --smrt-z-index-tooltip: 1600;
474
525
  --smrt-z-index-loading: 1700;
526
+ --smrt-surface-ground: #14181b;
527
+ --smrt-surface-panel: #1c2226;
528
+ --smrt-surface-control: #212930;
529
+ --smrt-surface-raised: #1c2226;
530
+ --smrt-surface-sunken: #0f1315;
531
+ --smrt-surface-overlay: rgba(0, 0, 0, 0.6);
532
+ --smrt-hairline-color: var(--smrt-color-outline-variant);
533
+ --smrt-hairline-strong-color: var(--smrt-color-outline);
534
+ --smrt-hairline: 1px solid var(--smrt-hairline-color);
535
+ --smrt-hairline-strong: 1px solid var(--smrt-hairline-strong-color);
536
+ --smrt-inset-highlight: inset 0 1px 0 rgb(255 255 255 / 0.04);
537
+ --smrt-state-hover: 0.06;
538
+ --smrt-state-pressed: 0.10;
539
+ --smrt-state-selected: 0.10;
540
+ --smrt-state-focus: 0.10;
541
+ --smrt-state-dragged: 0.12;
542
+ --smrt-state-disabled: 0.38;
543
+ --smrt-shadow-color: rgb(0 0 0);
544
+ --smrt-control-radius: var(--smrt-radius-md);
545
+ --smrt-control-radius-small: var(--smrt-radius-sm);
546
+ --smrt-control-height: 2.5rem;
547
+ --smrt-control-height-small: 2rem;
548
+ --smrt-control-weight: 500;
549
+ --smrt-control-border: var(--smrt-hairline-strong);
550
+ --smrt-focus-ring-color: var(--smrt-color-primary);
551
+ --smrt-focus-ring-width: 2px;
552
+ --smrt-focus-ring-offset: 2px;
553
+ --smrt-accent-color: var(--smrt-color-primary);
554
+ --smrt-selection-background: var(--smrt-color-primary-container);
555
+ --smrt-selection-color: var(--smrt-color-on-primary-container);
556
+ --smrt-caret-color: var(--smrt-color-primary);
557
+ --smrt-scrollbar-thumb: var(--smrt-hairline-strong-color);
558
+ --smrt-scrollbar-track: transparent;
559
+ --smrt-glass-blur: 0px;
560
+ --smrt-glass-saturation: 100%;
561
+ --smrt-glass-surface: var(--smrt-surface-panel);
562
+ --smrt-glass-surface-strong: var(--smrt-surface-raised);
563
+ --smrt-glass-border: var(--smrt-hairline-color);
564
+ --smrt-glass-border-opacity: 1;
565
+ --smrt-glass-background-opacity: 1;
566
+ --smrt-duration-scheme: var(--smrt-duration-medium1);
567
+ --smrt-font-feature-settings: normal;
475
568
  }
476
569
 
477
570
  /* ============================================================================
@@ -479,10 +572,12 @@
479
572
  *
480
573
  * A 2px amber outline, offset off the control. Defined by the preset so every
481
574
  * focusable element — including plain markup a consumer app renders itself —
482
- * carries the brand focus indicator. Component-scoped `:focus-visible` rules
483
- * are more specific and still win where a primitive tunes its own offset.
575
+ * carries the brand focus indicator. This rule and component-scoped
576
+ * `:focus-visible` rules both sit in `smrt.theme`, so specificity still decides:
577
+ * a primitive that tunes its own offset wins over this default.
484
578
  * ========================================================================== */
485
579
 
580
+ @layer smrt.theme {
486
581
  [data-theme="happyvertical"] :focus-visible {
487
582
  outline: 2px solid var(--smrt-color-primary);
488
583
  outline-offset: 2px;
@@ -563,3 +658,4 @@
563
658
  transition: none;
564
659
  }
565
660
  }
661
+ }