@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
@@ -5,7 +5,8 @@
5
5
  * Minimal shadows, monochromatic base with vibrant accents,
6
6
  * clean lines, and a focus on content clarity.
7
7
  */
8
- import { borderRadiusScale, durationScale, spacingScale, studioEasing, } from '../shared.js';
8
+ import { baselineTokens, opaqueGlass } from '../derive.js';
9
+ import { borderRadiusScale, darkInsetHighlight, durationScale, hairlineInset, hairlineMix, noInsetHighlight, noShadow, shadow, spacingScale, studioEasing, } from '../shared.js';
9
10
  /**
10
11
  * Studio light color palette
11
12
  * Monochromatic base with vibrant accent colors
@@ -26,6 +27,11 @@ const lightColors = {
26
27
  onTertiary: '#ffffff',
27
28
  tertiaryContainer: '#f3e8fd',
28
29
  onTertiaryContainer: '#6b12b8',
30
+ // Info - Shares the tertiary hue (no distinct info hue in this preset)
31
+ info: '#9334e6',
32
+ onInfo: '#ffffff',
33
+ infoContainer: '#f3e8fd',
34
+ onInfoContainer: '#6b12b8',
29
35
  // Error - Google red
30
36
  error: '#d93025',
31
37
  onError: '#ffffff',
@@ -91,6 +97,11 @@ const darkColors = {
91
97
  onTertiary: '#3e1385',
92
98
  tertiaryContainer: '#6b12b8',
93
99
  onTertiaryContainer: '#f3e8fd',
100
+ // Info - Shares the tertiary hue (no distinct info hue in this preset)
101
+ info: '#c58af9',
102
+ onInfo: '#3e1385',
103
+ infoContainer: '#6b12b8',
104
+ onInfoContainer: '#f3e8fd',
94
105
  // Error
95
106
  error: '#f28b82',
96
107
  onError: '#5c150c',
@@ -106,20 +117,20 @@ const darkColors = {
106
117
  onSuccess: '#0d3b1f',
107
118
  successContainer: '#137333',
108
119
  onSuccessContainer: '#e6f4ea',
109
- // Surface - Near black
110
- surface: '#0e0e0e',
120
+ // Surface - Cool flat greys; panel equals ground and is separated by a hairline
121
+ surface: '#131416',
111
122
  onSurface: '#e8eaed',
112
- surfaceVariant: '#1f1f1f',
123
+ surfaceVariant: '#1c1d20',
113
124
  onSurfaceVariant: '#9aa0a6',
114
- surfaceContainer: '#1f1f1f',
115
- surfaceContainerLow: '#141414',
116
- surfaceContainerHigh: '#2d2d2d',
117
- surfaceContainerHighest: '#3c4043',
118
- surfaceContainerLowest: '#0a0a0a',
119
- surfaceDim: '#141414',
120
- surfaceBright: '#2d2d2d',
125
+ surfaceContainer: '#1a1b1e',
126
+ surfaceContainerLow: '#16171a',
127
+ surfaceContainerHigh: '#202124',
128
+ surfaceContainerHighest: '#292a2d',
129
+ surfaceContainerLowest: '#0e0f10',
130
+ surfaceDim: '#0e0f10',
131
+ surfaceBright: '#2b2c2f',
121
132
  // Background
122
- background: '#0e0e0e',
133
+ background: '#131416',
123
134
  onBackground: '#e8eaed',
124
135
  // Outline
125
136
  outline: '#8c8e92',
@@ -141,35 +152,35 @@ const typography = {
141
152
  size: '3rem',
142
153
  lineHeight: '1.1',
143
154
  weight: '400',
144
- tracking: '-0.01em',
155
+ tracking: '-0.02em',
145
156
  fontFamily: 'var(--smrt-font-family)',
146
157
  },
147
158
  displayMedium: {
148
159
  size: '2.5rem',
149
160
  lineHeight: '1.15',
150
161
  weight: '400',
151
- tracking: '-0.008em',
162
+ tracking: '-0.015em',
152
163
  fontFamily: 'var(--smrt-font-family)',
153
164
  },
154
165
  displaySmall: {
155
166
  size: '2rem',
156
167
  lineHeight: '1.2',
157
168
  weight: '400',
158
- tracking: '-0.005em',
169
+ tracking: '-0.01em',
159
170
  fontFamily: 'var(--smrt-font-family)',
160
171
  },
161
172
  headlineLarge: {
162
173
  size: '1.75rem',
163
174
  lineHeight: '1.25',
164
175
  weight: '400',
165
- tracking: '0',
176
+ tracking: '-0.01em',
166
177
  fontFamily: 'var(--smrt-font-family)',
167
178
  },
168
179
  headlineMedium: {
169
180
  size: '1.5rem',
170
181
  lineHeight: '1.3',
171
182
  weight: '400',
172
- tracking: '0',
183
+ tracking: '-0.005em',
173
184
  fontFamily: 'var(--smrt-font-family)',
174
185
  },
175
186
  headlineSmall: {
@@ -225,14 +236,14 @@ const typography = {
225
236
  size: '0.875rem',
226
237
  lineHeight: '1.5',
227
238
  weight: '500',
228
- tracking: '0.02em',
239
+ tracking: '0.01em',
229
240
  fontFamily: 'var(--smrt-font-family)',
230
241
  },
231
242
  labelMedium: {
232
243
  size: '0.75rem',
233
244
  lineHeight: '1.5',
234
245
  weight: '500',
235
- tracking: '0.025em',
246
+ tracking: '0.02em',
236
247
  fontFamily: 'var(--smrt-font-family)',
237
248
  },
238
249
  labelSmall: {
@@ -244,33 +255,55 @@ const typography = {
244
255
  },
245
256
  };
246
257
  /**
247
- * Studio elevation (light) - Minimal, subtle shadows
248
- * Flat design philosophy with only slight depth indication
258
+ * Studio elevation (light) — flat. Level 1 is the hairline itself; the rest are
259
+ * crisp two-layer shadows (tight contact, short ambient) so overlays separate
260
+ * without softness.
249
261
  */
250
262
  const elevation = {
251
- 0: 'none',
252
- 1: 'inset 0 0 0 1px rgba(60, 64, 67, 0.08)',
253
- 2: '0 1px 2px 0 rgba(60, 64, 67, 0.08), 0 1px 3px 0 rgba(60, 64, 67, 0.04)',
254
- 3: '0 2px 4px 0 rgba(60, 64, 67, 0.1), 0 1px 2px 0 rgba(60, 64, 67, 0.06)',
255
- 4: '0 4px 8px 0 rgba(60, 64, 67, 0.1), 0 2px 4px 0 rgba(60, 64, 67, 0.06)',
256
- 5: '0 8px 16px 0 rgba(60, 64, 67, 0.12), 0 4px 8px 0 rgba(60, 64, 67, 0.06)',
263
+ 0: noShadow,
264
+ 1: hairlineInset,
265
+ 2: shadow([
266
+ [1, 2, 0, 10],
267
+ [2, 4, -2, 8],
268
+ ]),
269
+ 3: shadow([
270
+ [1, 2, 0, 12],
271
+ [4, 8, -3, 10],
272
+ ]),
273
+ 4: shadow([
274
+ [2, 3, 0, 12],
275
+ [8, 16, -4, 12],
276
+ ]),
277
+ 5: shadow([
278
+ [2, 4, 0, 14],
279
+ [16, 32, -8, 16],
280
+ ]),
257
281
  };
258
282
  /**
259
- * Studio elevation (dark) - Tuned for a near-black surface.
260
- *
261
- * The flat light shadows (tinted with the light surface color, very low alpha)
262
- * read as invisible on a dark surface, so dark mode uses a white inset hairline
263
- * at level 1 and deeper black shadows above it. Defining this here — rather than
264
- * only in the static `styles/studio.css` — keeps the JS ThemeProvider output and
265
- * the static dark CSS in lockstep (#1586).
283
+ * Studio elevation (dark) — the hairline at level 1, tighter shadows above it
284
+ * with the inset top highlight. Defined here (not only in the static
285
+ * `styles/studio.css`) so the JS ThemeProvider output and the static dark CSS
286
+ * stay in lockstep (#1586).
266
287
  */
267
288
  const darkElevation = {
268
- 0: 'none',
269
- 1: 'inset 0 0 0 1px rgba(255, 255, 255, 0.08)',
270
- 2: '0 1px 2px 0 rgba(0, 0, 0, 0.2), 0 1px 3px 0 rgba(0, 0, 0, 0.1)',
271
- 3: '0 2px 4px 0 rgba(0, 0, 0, 0.2), 0 1px 2px 0 rgba(0, 0, 0, 0.1)',
272
- 4: '0 4px 8px 0 rgba(0, 0, 0, 0.2), 0 2px 4px 0 rgba(0, 0, 0, 0.1)',
273
- 5: '0 8px 16px 0 rgba(0, 0, 0, 0.25), 0 4px 8px 0 rgba(0, 0, 0, 0.1)',
289
+ 0: noShadow,
290
+ 1: hairlineInset,
291
+ 2: shadow([
292
+ [1, 2, 0, 28],
293
+ [2, 4, -2, 20],
294
+ ], 'var(--smrt-inset-highlight)'),
295
+ 3: shadow([
296
+ [1, 2, 0, 30],
297
+ [4, 8, -3, 24],
298
+ ], 'var(--smrt-inset-highlight)'),
299
+ 4: shadow([
300
+ [2, 3, 0, 32],
301
+ [8, 16, -4, 28],
302
+ ], 'var(--smrt-inset-highlight)'),
303
+ 5: shadow([
304
+ [2, 4, 0, 34],
305
+ [16, 32, -8, 32],
306
+ ], 'var(--smrt-inset-highlight)'),
274
307
  };
275
308
  /**
276
309
  * Studio theme definition
@@ -287,6 +320,49 @@ export const studioTheme = {
287
320
  borderRadius: borderRadiusScale,
288
321
  duration: durationScale,
289
322
  easing: studioEasing,
323
+ glass: { ...opaqueGlass },
324
+ ...baselineTokens(lightColors, darkColors),
325
+ shadowColor: { light: 'rgb(60 64 67)', dark: 'rgb(0 0 0)' },
326
+ // Flat: panel equals ground (a hairline separates them); controls sit a hair
327
+ // darker in light and a step lighter in dark; overlays are the highest tier.
328
+ surfaces: {
329
+ light: {
330
+ ground: lightColors.background,
331
+ panel: lightColors.surface,
332
+ control: '#f6f7f8',
333
+ raised: lightColors.surfaceContainerLowest,
334
+ sunken: lightColors.surfaceContainer,
335
+ overlay: lightColors.scrim,
336
+ },
337
+ dark: {
338
+ ground: darkColors.background,
339
+ panel: darkColors.surface,
340
+ control: '#1c1d20',
341
+ raised: darkColors.surfaceContainerHighest,
342
+ sunken: darkColors.surfaceContainerLowest,
343
+ overlay: darkColors.scrim,
344
+ },
345
+ },
346
+ hairlines: {
347
+ light: hairlineMix(12, 32, noInsetHighlight),
348
+ dark: hairlineMix(14, 32, darkInsetHighlight(0.05)),
349
+ },
350
+ states: {
351
+ hover: '0.06',
352
+ pressed: '0.10',
353
+ selected: '0.10',
354
+ focus: '0.10',
355
+ dragged: '0.14',
356
+ disabled: '0.38',
357
+ },
358
+ // Crisp: a 6px radius and a denser control height.
359
+ controls: {
360
+ radius: '0.375rem',
361
+ radiusSmall: 'var(--smrt-radius-sm)',
362
+ height: '2.5rem',
363
+ heightSmall: '2rem',
364
+ weight: '500',
365
+ },
290
366
  fontFamily: '"Google Sans Text", "Roboto", "Segoe UI", system-ui, sans-serif',
291
367
  };
292
368
  export default studioTheme;
@@ -1,10 +1,12 @@
1
- /**
1
+
2
+ @layer smrt.reset, smrt.structure, smrt.theme;/**
2
3
  * Application baseline for SMRT interfaces.
3
4
  *
4
5
  * Import this once at an application entry point, alongside the selected
5
6
  * theme stylesheet. Components remain independently usable without it.
6
7
  */
7
8
 
9
+ @layer smrt.reset {
8
10
  *,
9
11
  *::before,
10
12
  *::after {
@@ -29,3 +31,229 @@ select,
29
31
  textarea {
30
32
  font: inherit;
31
33
  }
34
+ }
35
+
36
+ /*
37
+ * Typography (#3868). Headings and utilities consume the theme's type roles,
38
+ * so a preset's display face, tracking and weight reach plain markup. Hosts
39
+ * restyle with unlayered CSS; component styles in smrt.theme still win.
40
+ */
41
+ @layer smrt.structure {
42
+ :is(body, .smrt-theme-root) {
43
+ font-feature-settings: var(--smrt-font-feature-settings);
44
+ }
45
+
46
+ :is(body, .smrt-theme-root) h1 {
47
+ font-family: var(--smrt-typography-display-small-font-family);
48
+ font-size: var(--smrt-typography-display-small-size);
49
+ line-height: var(--smrt-typography-display-small-line-height);
50
+ font-weight: var(--smrt-typography-display-small-weight);
51
+ letter-spacing: var(--smrt-typography-display-small-tracking);
52
+ margin-block: var(--smrt-spacing-5) var(--smrt-spacing-3);
53
+ }
54
+
55
+ :is(body, .smrt-theme-root) h2 {
56
+ font-family: var(--smrt-typography-headline-large-font-family);
57
+ font-size: var(--smrt-typography-headline-large-size);
58
+ line-height: var(--smrt-typography-headline-large-line-height);
59
+ font-weight: var(--smrt-typography-headline-large-weight);
60
+ letter-spacing: var(--smrt-typography-headline-large-tracking);
61
+ margin-block: var(--smrt-spacing-5) var(--smrt-spacing-3);
62
+ }
63
+
64
+ :is(body, .smrt-theme-root) h3 {
65
+ font-family: var(--smrt-typography-headline-medium-font-family);
66
+ font-size: var(--smrt-typography-headline-medium-size);
67
+ line-height: var(--smrt-typography-headline-medium-line-height);
68
+ font-weight: var(--smrt-typography-headline-medium-weight);
69
+ letter-spacing: var(--smrt-typography-headline-medium-tracking);
70
+ margin-block: var(--smrt-spacing-4) var(--smrt-spacing-2);
71
+ }
72
+
73
+ :is(body, .smrt-theme-root) h4 {
74
+ font-family: var(--smrt-typography-headline-small-font-family);
75
+ font-size: var(--smrt-typography-headline-small-size);
76
+ line-height: var(--smrt-typography-headline-small-line-height);
77
+ font-weight: var(--smrt-typography-headline-small-weight);
78
+ letter-spacing: var(--smrt-typography-headline-small-tracking);
79
+ margin-block: var(--smrt-spacing-4) var(--smrt-spacing-2);
80
+ }
81
+
82
+ :is(body, .smrt-theme-root) h5 {
83
+ font-family: var(--smrt-typography-title-large-font-family);
84
+ font-size: var(--smrt-typography-title-large-size);
85
+ line-height: var(--smrt-typography-title-large-line-height);
86
+ font-weight: var(--smrt-typography-title-large-weight);
87
+ letter-spacing: var(--smrt-typography-title-large-tracking);
88
+ margin-block: var(--smrt-spacing-4) var(--smrt-spacing-2);
89
+ }
90
+
91
+ :is(body, .smrt-theme-root) h6 {
92
+ font-family: var(--smrt-typography-title-medium-font-family);
93
+ font-size: var(--smrt-typography-title-medium-size);
94
+ line-height: var(--smrt-typography-title-medium-line-height);
95
+ font-weight: var(--smrt-typography-title-medium-weight);
96
+ letter-spacing: var(--smrt-typography-title-medium-tracking);
97
+ margin-block: var(--smrt-spacing-4) var(--smrt-spacing-2);
98
+ }
99
+
100
+ :is(body, .smrt-theme-root) :is(h1, h2, h3, h4, h5, h6):first-child {
101
+ margin-block-start: 0;
102
+ }
103
+
104
+ .smrt-display-large {
105
+ font-family: var(--smrt-typography-display-large-font-family);
106
+ font-size: var(--smrt-typography-display-large-size);
107
+ line-height: var(--smrt-typography-display-large-line-height);
108
+ font-weight: var(--smrt-typography-display-large-weight);
109
+ letter-spacing: var(--smrt-typography-display-large-tracking);
110
+ }
111
+
112
+ .smrt-display-medium {
113
+ font-family: var(--smrt-typography-display-medium-font-family);
114
+ font-size: var(--smrt-typography-display-medium-size);
115
+ line-height: var(--smrt-typography-display-medium-line-height);
116
+ font-weight: var(--smrt-typography-display-medium-weight);
117
+ letter-spacing: var(--smrt-typography-display-medium-tracking);
118
+ }
119
+
120
+ .smrt-display-small {
121
+ font-family: var(--smrt-typography-display-small-font-family);
122
+ font-size: var(--smrt-typography-display-small-size);
123
+ line-height: var(--smrt-typography-display-small-line-height);
124
+ font-weight: var(--smrt-typography-display-small-weight);
125
+ letter-spacing: var(--smrt-typography-display-small-tracking);
126
+ }
127
+
128
+ .smrt-headline-large {
129
+ font-family: var(--smrt-typography-headline-large-font-family);
130
+ font-size: var(--smrt-typography-headline-large-size);
131
+ line-height: var(--smrt-typography-headline-large-line-height);
132
+ font-weight: var(--smrt-typography-headline-large-weight);
133
+ letter-spacing: var(--smrt-typography-headline-large-tracking);
134
+ }
135
+
136
+ .smrt-headline-medium {
137
+ font-family: var(--smrt-typography-headline-medium-font-family);
138
+ font-size: var(--smrt-typography-headline-medium-size);
139
+ line-height: var(--smrt-typography-headline-medium-line-height);
140
+ font-weight: var(--smrt-typography-headline-medium-weight);
141
+ letter-spacing: var(--smrt-typography-headline-medium-tracking);
142
+ }
143
+
144
+ .smrt-headline-small {
145
+ font-family: var(--smrt-typography-headline-small-font-family);
146
+ font-size: var(--smrt-typography-headline-small-size);
147
+ line-height: var(--smrt-typography-headline-small-line-height);
148
+ font-weight: var(--smrt-typography-headline-small-weight);
149
+ letter-spacing: var(--smrt-typography-headline-small-tracking);
150
+ }
151
+
152
+ .smrt-title-large {
153
+ font-family: var(--smrt-typography-title-large-font-family);
154
+ font-size: var(--smrt-typography-title-large-size);
155
+ line-height: var(--smrt-typography-title-large-line-height);
156
+ font-weight: var(--smrt-typography-title-large-weight);
157
+ letter-spacing: var(--smrt-typography-title-large-tracking);
158
+ }
159
+
160
+ .smrt-title-medium {
161
+ font-family: var(--smrt-typography-title-medium-font-family);
162
+ font-size: var(--smrt-typography-title-medium-size);
163
+ line-height: var(--smrt-typography-title-medium-line-height);
164
+ font-weight: var(--smrt-typography-title-medium-weight);
165
+ letter-spacing: var(--smrt-typography-title-medium-tracking);
166
+ }
167
+
168
+ .smrt-title-small {
169
+ font-family: var(--smrt-typography-title-small-font-family);
170
+ font-size: var(--smrt-typography-title-small-size);
171
+ line-height: var(--smrt-typography-title-small-line-height);
172
+ font-weight: var(--smrt-typography-title-small-weight);
173
+ letter-spacing: var(--smrt-typography-title-small-tracking);
174
+ }
175
+
176
+ .smrt-body-large {
177
+ font-family: var(--smrt-typography-body-large-font-family);
178
+ font-size: var(--smrt-typography-body-large-size);
179
+ line-height: var(--smrt-typography-body-large-line-height);
180
+ font-weight: var(--smrt-typography-body-large-weight);
181
+ letter-spacing: var(--smrt-typography-body-large-tracking);
182
+ }
183
+
184
+ .smrt-body-medium {
185
+ font-family: var(--smrt-typography-body-medium-font-family);
186
+ font-size: var(--smrt-typography-body-medium-size);
187
+ line-height: var(--smrt-typography-body-medium-line-height);
188
+ font-weight: var(--smrt-typography-body-medium-weight);
189
+ letter-spacing: var(--smrt-typography-body-medium-tracking);
190
+ }
191
+
192
+ .smrt-body-small {
193
+ font-family: var(--smrt-typography-body-small-font-family);
194
+ font-size: var(--smrt-typography-body-small-size);
195
+ line-height: var(--smrt-typography-body-small-line-height);
196
+ font-weight: var(--smrt-typography-body-small-weight);
197
+ letter-spacing: var(--smrt-typography-body-small-tracking);
198
+ }
199
+
200
+ .smrt-label-large {
201
+ font-family: var(--smrt-typography-label-large-font-family);
202
+ font-size: var(--smrt-typography-label-large-size);
203
+ line-height: var(--smrt-typography-label-large-line-height);
204
+ font-weight: var(--smrt-typography-label-large-weight);
205
+ letter-spacing: var(--smrt-typography-label-large-tracking);
206
+ }
207
+
208
+ .smrt-label-medium {
209
+ font-family: var(--smrt-typography-label-medium-font-family);
210
+ font-size: var(--smrt-typography-label-medium-size);
211
+ line-height: var(--smrt-typography-label-medium-line-height);
212
+ font-weight: var(--smrt-typography-label-medium-weight);
213
+ letter-spacing: var(--smrt-typography-label-medium-tracking);
214
+ }
215
+
216
+ .smrt-label-small {
217
+ font-family: var(--smrt-typography-label-small-font-family);
218
+ font-size: var(--smrt-typography-label-small-size);
219
+ line-height: var(--smrt-typography-label-small-line-height);
220
+ font-weight: var(--smrt-typography-label-small-weight);
221
+ letter-spacing: var(--smrt-typography-label-small-tracking);
222
+ }
223
+
224
+ table,
225
+ time,
226
+ [data-smrt-component="DataTable"],
227
+ [data-smrt-component="Badge"],
228
+ .smrt-tabular {
229
+ font-variant-numeric: tabular-nums;
230
+ }
231
+ }
232
+
233
+ /* Native chrome and scheme crossfade (premium baseline, #3867). */
234
+ @layer smrt.theme {
235
+ :root,
236
+ .smrt-theme-root {
237
+ accent-color: var(--smrt-accent-color);
238
+ caret-color: var(--smrt-caret-color);
239
+ scrollbar-color: var(--smrt-scrollbar-thumb) var(--smrt-scrollbar-track);
240
+ }
241
+
242
+ ::selection {
243
+ background: var(--smrt-selection-background);
244
+ color: var(--smrt-selection-color);
245
+ }
246
+
247
+ /* ThemeProvider sets data-smrt-theme-changing for the length of a scheme switch. */
248
+ @media (prefers-reduced-motion: no-preference) {
249
+ .smrt-theme-root[data-smrt-theme-changing],
250
+ .smrt-theme-root[data-smrt-theme-changing] * {
251
+ transition:
252
+ background-color var(--smrt-duration-scheme) var(--smrt-easing-standard),
253
+ color var(--smrt-duration-scheme) var(--smrt-easing-standard),
254
+ border-color var(--smrt-duration-scheme) var(--smrt-easing-standard),
255
+ fill var(--smrt-duration-scheme) var(--smrt-easing-standard),
256
+ stroke var(--smrt-duration-scheme) var(--smrt-easing-standard);
257
+ }
258
+ }
259
+ }