@godxjp/ui 28.13.0 → 30.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (164) hide show
  1. package/agent/START-HERE.md +29 -10
  2. package/agent/components/Anchor.json +6 -1
  3. package/agent/components/AppShell.json +1 -1
  4. package/agent/components/AreaChart.json +19 -1
  5. package/agent/components/BarChart.json +11 -1
  6. package/agent/components/Cascader.json +1 -1
  7. package/agent/components/CompactBarTrend.json +1 -1
  8. package/agent/components/DataState.json +1 -1
  9. package/agent/components/DataTable.json +4 -4
  10. package/agent/components/FormField.json +1 -1
  11. package/agent/components/InfiniteQueryState.json +1 -1
  12. package/agent/components/Input.json +1 -1
  13. package/agent/components/LineChart.json +20 -2
  14. package/agent/components/ListRow.json +1 -1
  15. package/agent/components/Masonry.json +1 -1
  16. package/agent/components/MasterDetail.json +1 -1
  17. package/agent/components/PasswordStrength.json +1 -1
  18. package/agent/components/PermissionMatrix.json +1 -1
  19. package/agent/components/Select.json +1 -0
  20. package/agent/components/Sidebar.json +1 -1
  21. package/agent/components/Table.json +8 -3
  22. package/agent/components/ThemeScope.json +49 -0
  23. package/agent/components/Topbar.json +1 -0
  24. package/agent/components/TopbarItem.json +2 -1
  25. package/agent/components/Transfer.json +1 -1
  26. package/agent/components/TreeSelect.json +1 -1
  27. package/agent/components/UploadCropDialog.json +1 -1
  28. package/agent/components/formatDate.json +1 -1
  29. package/agent/components-index.json +5 -0
  30. package/agent/components.json +138 -30
  31. package/agent/index.json +19 -9
  32. package/agent/llms.txt +10 -10
  33. package/agent/patterns/tenant-brand-color.json +28 -0
  34. package/agent/patterns-index.json +27 -0
  35. package/agent/patterns.json +28 -0
  36. package/agent/rules.json +15 -0
  37. package/agent/tokens.json +5055 -1060
  38. package/dist/app/index.d.ts +3 -0
  39. package/dist/app/index.js +3 -0
  40. package/dist/app/tenant-theme.d.ts +80 -0
  41. package/dist/app/tenant-theme.js +154 -0
  42. package/dist/app/theme-axes.d.ts +14 -1
  43. package/dist/app/theme-axes.js +24 -31
  44. package/dist/components/charts/chart-cartesian.d.ts +5 -1
  45. package/dist/components/charts/chart-cartesian.js +15 -8
  46. package/dist/components/data-display/badge.d.ts +1 -1
  47. package/dist/components/data-display/badge.js +21 -3
  48. package/dist/components/data-display/carousel.js +4 -4
  49. package/dist/components/data-display/data-table.js +13 -2
  50. package/dist/components/data-display/permission-matrix.js +1 -1
  51. package/dist/components/data-display/table.d.ts +11 -2
  52. package/dist/components/data-display/table.js +19 -3
  53. package/dist/components/data-entry/control-appearance.d.ts +12 -6
  54. package/dist/components/data-entry/control-appearance.js +1 -1
  55. package/dist/components/data-entry/select.js +4 -3
  56. package/dist/components/feedback/dialog.js +6 -3
  57. package/dist/components/feedback/overlay-header-tone.d.ts +7 -0
  58. package/dist/components/feedback/overlay-header-tone.js +4 -4
  59. package/dist/components/feedback/sheet.d.ts +1 -1
  60. package/dist/components/feedback/sheet.js +6 -9
  61. package/dist/components/feedback/sonner.js +16 -3
  62. package/dist/components/general/button.js +22 -5
  63. package/dist/components/layout/affix.js +15 -1
  64. package/dist/components/layout/sidebar.js +7 -1
  65. package/dist/components/navigation/anchor.d.ts +1 -1
  66. package/dist/components/navigation/anchor.js +5 -4
  67. package/dist/components/navigation/app-setting-picker.js +1 -1
  68. package/dist/components/navigation/pagination.js +1 -1
  69. package/dist/components/navigation/tabs.js +15 -2
  70. package/dist/components/query/infinite-query-state.d.ts +22 -6
  71. package/dist/contracts/measurement.json +1 -1
  72. package/dist/lib/control-styles.d.ts +31 -11
  73. package/dist/lib/control-styles.js +6 -6
  74. package/dist/lib/overlay-portal.d.ts +20 -0
  75. package/dist/lib/overlay-portal.js +93 -0
  76. package/dist/props/components/app.prop.d.ts +12 -0
  77. package/dist/props/components/charts.prop.d.ts +30 -0
  78. package/dist/props/components/index.d.ts +1 -1
  79. package/dist/props/components/navigation.prop.d.ts +21 -2
  80. package/dist/props/components/query.prop.d.ts +36 -2
  81. package/dist/props/registry.d.ts +46 -1
  82. package/dist/props/registry.js +38 -3
  83. package/dist/styles/alert-layout.css +39 -19
  84. package/dist/styles/badge-layout.css +11 -7
  85. package/dist/styles/base.css +14 -5
  86. package/dist/styles/card-layout.css +29 -16
  87. package/dist/styles/chart-layout.css +27 -5
  88. package/dist/styles/control.css +225 -103
  89. package/dist/styles/data-display-layout.css +178 -76
  90. package/dist/styles/data-entry-layout.css +35 -99
  91. package/dist/styles/dialog-layout.css +58 -28
  92. package/dist/styles/float-button-layout.css +5 -5
  93. package/dist/styles/focus-ring.css +11 -7
  94. package/dist/styles/layout.css +53 -25
  95. package/dist/styles/logo-layout.css +3 -3
  96. package/dist/styles/motion.css +2 -2
  97. package/dist/styles/navigation-layout.css +117 -44
  98. package/dist/styles/shell-layout.css +90 -124
  99. package/dist/styles/table-layout.css +66 -24
  100. package/dist/styles/text-layout.css +13 -4
  101. package/dist/styles/toggle.css +9 -3
  102. package/dist/tokens/components/actions.css +1 -1
  103. package/dist/tokens/components/attachments.css +4 -4
  104. package/dist/tokens/components/badge.css +4 -4
  105. package/dist/tokens/components/banner.css +1 -1
  106. package/dist/tokens/components/callout.css +1 -1
  107. package/dist/tokens/components/card.css +13 -8
  108. package/dist/tokens/components/chart.css +11 -2
  109. package/dist/tokens/components/chat-bubble.css +2 -2
  110. package/dist/tokens/components/control.css +41 -22
  111. package/dist/tokens/components/conversations.css +2 -1
  112. package/dist/tokens/components/data-display.css +23 -18
  113. package/dist/tokens/components/data-entry.css +1 -1
  114. package/dist/tokens/components/descriptions.css +2 -2
  115. package/dist/tokens/components/draggable-panel.css +2 -2
  116. package/dist/tokens/components/feedback.css +29 -9
  117. package/dist/tokens/components/float-button.css +1 -1
  118. package/dist/tokens/components/legal-document.css +2 -2
  119. package/dist/tokens/components/logo.css +2 -2
  120. package/dist/tokens/components/mega-menu.css +6 -4
  121. package/dist/tokens/components/navigation.css +27 -13
  122. package/dist/tokens/components/segmented.css +11 -6
  123. package/dist/tokens/components/separator.css +1 -1
  124. package/dist/tokens/components/shell.css +24 -10
  125. package/dist/tokens/components/table.css +13 -5
  126. package/dist/tokens/components/thought-chain.css +2 -2
  127. package/dist/tokens/components/toggle.css +3 -1
  128. package/dist/tokens/components/tree.css +3 -1
  129. package/dist/tokens/components/upload.css +8 -8
  130. package/dist/tokens/components/welcome.css +1 -1
  131. package/dist/tokens/foundation.css +30 -3
  132. package/docs/COMPOSITION-VS-COMPONENT.md +31 -0
  133. package/docs/CUSTOMER-THEMING.md +637 -1
  134. package/docs/FRAME-COVERAGE-REPORT.md +3 -2
  135. package/docs/GLASSMORPHISM-STANDARD.md +196 -0
  136. package/docs/THEME-API-COVERAGE.md +538 -0
  137. package/docs/TOKEN-RESOLUTION.md +195 -0
  138. package/docs/TOKENS.md +63 -24
  139. package/docs/asset-modules.d.ts +7 -0
  140. package/docs/data-display/charts.tsx +80 -0
  141. package/docs/data-display/data-table/index.tsx +30 -0
  142. package/docs/data-display/popover.tsx +1 -1
  143. package/docs/data-display/table.tsx +52 -0
  144. package/docs/feedback/sheet.tsx +10 -10
  145. package/docs/foundation/density.tsx +4 -4
  146. package/docs/i18n/messages/en.json +506 -0
  147. package/docs/i18n/messages/ja.json +506 -0
  148. package/docs/i18n/messages/vi.json +506 -0
  149. package/docs/layout/account-chip.tsx +2 -2
  150. package/docs/layout/responsive-grid.tsx +1 -1
  151. package/docs/navigation/toolbar.tsx +20 -12
  152. package/docs/providers/theme-scope.tsx +186 -0
  153. package/docs/showcase/caimono-price-comparison.tsx +911 -0
  154. package/docs/showcase/case4-login.tsx +2 -2
  155. package/docs/showcase/permission-matrix.tsx +13 -5
  156. package/docs/showcase/table-pagination.tsx +2 -1
  157. package/docs/showcase/tenant-brand-color.tsx +338 -0
  158. package/docs/showcase/theme-lab.tsx +2125 -0
  159. package/docs/themes/flat.css +462 -0
  160. package/docs/themes/glassmorphism.css +958 -0
  161. package/docs/themes/index.ts +219 -0
  162. package/docs/themes/neubrutalism.css +475 -0
  163. package/package.json +4 -3
  164. package/scripts/explain-token.mjs +382 -0
@@ -7,8 +7,11 @@
7
7
  align-items: flex-start;
8
8
  gap: var(--alert-space-gap);
9
9
  width: 100%;
10
- border-radius: var(--alert-radius);
11
- border-width: 1px;
10
+ border-radius: var(
11
+ --alert-radius,
12
+ var(--card-radius, calc(var(--radius) * var(--radius-ratio)))
13
+ );
14
+ border-width: var(--stroke-hairline);
12
15
  padding: var(--alert-space-inset);
13
16
  font-size: var(--font-size-base);
14
17
  }
@@ -23,25 +26,25 @@
23
26
 
24
27
  [data-slot="alert"][data-tone="destructive"] {
25
28
  border-color: hsl(var(--destructive) / var(--alert-border-alpha));
26
- background-color: hsl(var(--destructive) / var(--alert-bg-alpha));
29
+ background-color: var(--surface-destructive, hsl(var(--destructive) / var(--alert-bg-alpha)));
27
30
  color: hsl(var(--foreground));
28
31
  }
29
32
 
30
33
  [data-slot="alert"][data-tone="warning"] {
31
34
  border-color: hsl(var(--warning) / var(--alert-border-alpha));
32
- background-color: hsl(var(--warning) / var(--alert-bg-alpha));
35
+ background-color: var(--surface-warning, hsl(var(--warning) / var(--alert-bg-alpha)));
33
36
  color: hsl(var(--foreground));
34
37
  }
35
38
 
36
39
  [data-slot="alert"][data-tone="success"] {
37
40
  border-color: hsl(var(--success) / var(--alert-border-alpha));
38
- background-color: hsl(var(--success) / var(--alert-bg-alpha));
41
+ background-color: var(--surface-success, hsl(var(--success) / var(--alert-bg-alpha)));
39
42
  color: hsl(var(--foreground));
40
43
  }
41
44
 
42
45
  [data-slot="alert"][data-tone="info"] {
43
46
  border-color: hsl(var(--info) / var(--alert-border-alpha));
44
- background-color: hsl(var(--info) / var(--alert-bg-alpha));
47
+ background-color: var(--surface-info, hsl(var(--info) / var(--alert-bg-alpha)));
45
48
  color: hsl(var(--foreground));
46
49
  }
47
50
 
@@ -49,7 +52,7 @@
49
52
  border-radius: var(--banner-radius);
50
53
  border-block-start-width: 0;
51
54
  border-inline-width: 0;
52
- border-block-end-width: var(--banner-border-width);
55
+ border-block-end-width: var(--banner-border-width, var(--stroke-hairline));
53
56
  padding-block: var(--banner-space-inset-block);
54
57
  padding-inline: var(--banner-space-inset-inline);
55
58
  }
@@ -63,7 +66,10 @@
63
66
  }
64
67
 
65
68
  [data-slot="alert"][data-variant="callout"] {
66
- border-radius: var(--callout-radius);
69
+ border-radius: var(
70
+ --callout-radius,
71
+ var(--alert-radius, var(--card-radius, calc(var(--radius) * var(--radius-ratio))))
72
+ );
67
73
  border-block-width: 0;
68
74
  border-inline-end-width: 0;
69
75
  border-inline-start-width: var(--callout-rail-width);
@@ -195,7 +201,10 @@
195
201
  position: absolute;
196
202
  top: var(--alert-dismiss-space-offset);
197
203
  inset-inline-end: var(--alert-dismiss-space-offset);
198
- border-radius: var(--radius-sm);
204
+ border-radius: var(
205
+ --radius-sm,
206
+ calc(var(--radius) / var(--radius-ratio) / var(--radius-ratio))
207
+ );
199
208
  opacity: var(--alert-dismiss-rest-alpha);
200
209
  transition: opacity var(--duration-fast) ease;
201
210
  }
@@ -219,12 +228,17 @@
219
228
  block-size: var(--toast-icon-size);
220
229
  }
221
230
 
231
+ [data-sonner-toast] {
232
+ backdrop-filter: blur(var(--toast-backdrop-blur-size))
233
+ saturate(var(--surface-backdrop-saturate, 160%));
234
+ }
235
+
222
236
  [data-sonner-toast][data-expanded="false"][data-front="false"][data-styled="true"] > * {
223
237
  visibility: hidden;
224
238
  }
225
239
 
226
240
  .ui-skeleton-block {
227
- border-radius: var(--skeleton-radius);
241
+ border-radius: var(--skeleton-radius, var(--radius));
228
242
  background: var(--skeleton-background, hsl(var(--muted)));
229
243
  animation: pulse 2s cubic-bezier(0.4, 0, 0.6, 1) infinite;
230
244
  }
@@ -255,21 +269,24 @@
255
269
  block-size: var(--skeleton-caption-height);
256
270
  inline-size: var(--skeleton-label-width);
257
271
  max-inline-size: 100%;
258
- border-radius: var(--skeleton-radius);
272
+ border-radius: var(--skeleton-radius, var(--radius));
259
273
  background: var(--skeleton-background, hsl(var(--muted)));
260
274
  }
261
275
 
262
276
  .ui-skeleton-form-control {
263
277
  block-size: var(--control-height);
264
278
  inline-size: 100%;
265
- border-radius: var(--skeleton-element-radius);
279
+ border-radius: var(
280
+ --skeleton-element-radius,
281
+ calc(var(--radius) / var(--radius-ratio) / var(--radius-ratio))
282
+ );
266
283
  background: var(--skeleton-background, hsl(var(--muted)));
267
284
  }
268
285
 
269
286
  .ui-skeleton-table {
270
287
  overflow: hidden;
271
- border: 1px solid hsl(var(--border));
272
- border-radius: var(--skeleton-radius);
288
+ border: var(--stroke-hairline) solid hsl(var(--border));
289
+ border-radius: var(--skeleton-radius, var(--radius));
273
290
  }
274
291
 
275
292
  [data-slot="card-content"][data-flush] .ui-skeleton-table {
@@ -290,7 +307,7 @@
290
307
  }
291
308
 
292
309
  .ui-skeleton-table-row + .ui-skeleton-table-row {
293
- border-top: 1px solid hsl(var(--border));
310
+ border-top: var(--stroke-hairline) solid hsl(var(--border));
294
311
  }
295
312
 
296
313
  .ui-skeleton-detail {
@@ -300,8 +317,8 @@
300
317
  .ui-skeleton-detail-box,
301
318
  .ui-skeleton-stat,
302
319
  .ui-skeleton-card {
303
- border: 1px solid hsl(var(--border));
304
- border-radius: var(--skeleton-radius);
320
+ border: var(--stroke-hairline) solid hsl(var(--border));
321
+ border-radius: var(--skeleton-radius, var(--radius));
305
322
  padding: var(--skeleton-card-inset);
306
323
 
307
324
  .ui-skeleton-line {
@@ -372,7 +389,10 @@
372
389
  display: inline-block;
373
390
  vertical-align: top;
374
391
  block-size: var(--skeleton-element-block-size);
375
- border-radius: var(--skeleton-element-radius);
392
+ border-radius: var(
393
+ --skeleton-element-radius,
394
+ calc(var(--radius) / var(--radius-ratio) / var(--radius-ratio))
395
+ );
376
396
  }
377
397
 
378
398
  [data-skeleton-element][data-size="xs"] {
@@ -389,7 +409,7 @@
389
409
 
390
410
  [data-skeleton-element="avatar"] {
391
411
  inline-size: var(--skeleton-element-block-size);
392
- border-radius: var(--avatar-square-radius);
412
+ border-radius: var(--avatar-square-radius, var(--radius));
393
413
  }
394
414
 
395
415
  [data-skeleton-element="avatar"][data-shape="circle"] {
@@ -3,14 +3,16 @@
3
3
  @layer components {
4
4
  [data-slot="badge"] {
5
5
  display: inline-flex;
6
+
7
+ inline-size: fit-content;
6
8
  align-items: center;
7
9
 
8
10
  vertical-align: middle;
9
11
  gap: var(--badge-space-gap);
10
12
  padding: var(--badge-space-y) var(--badge-space-x);
11
13
 
12
- border-radius: var(--badge-radius);
13
- border-width: 1px;
14
+ border-radius: var(--badge-radius, calc(var(--radius) / var(--radius-ratio)));
15
+ border-width: var(--stroke-hairline);
14
16
  font-size: var(--badge-font-size);
15
17
 
16
18
  line-height: var(--badge-line-height);
@@ -34,15 +36,17 @@
34
36
 
35
37
  background-color: color-mix(
36
38
  in srgb,
37
- var(--badge-tint-surface),
38
- var(--badge-color) var(--badge-tint-fill)
39
+ var(--badge-tint-surface, hsl(var(--card) / var(--card-alpha, 100%))),
40
+ var(--badge-color, var(--badge-tint-surface, hsl(var(--card) / var(--card-alpha, 100%))))
41
+ var(--badge-tint-fill)
39
42
  );
40
43
  border-color: color-mix(
41
44
  in srgb,
42
- var(--badge-tint-surface),
43
- var(--badge-color) var(--badge-tint-edge)
45
+ var(--badge-tint-surface, hsl(var(--card) / var(--card-alpha, 100%))),
46
+ var(--badge-color, var(--badge-tint-surface, hsl(var(--card) / var(--card-alpha, 100%))))
47
+ var(--badge-tint-edge)
44
48
  );
45
- color: var(--badge-tint-foreground);
49
+ color: var(--badge-tint-foreground, hsl(var(--card-foreground)));
46
50
  }
47
51
 
48
52
  [data-slot="badge-icon"] {
@@ -48,9 +48,9 @@
48
48
  @theme inline {
49
49
  --color-background: hsl(var(--background));
50
50
  --color-foreground: hsl(var(--foreground));
51
- --color-card: hsl(var(--card));
51
+ --color-card: hsl(var(--card) / var(--card-alpha, 100%));
52
52
  --color-card-foreground: hsl(var(--card-foreground));
53
- --color-popover: hsl(var(--popover));
53
+ --color-popover: hsl(var(--popover) / var(--popover-alpha, 100%));
54
54
  --color-popover-foreground: hsl(var(--popover-foreground));
55
55
  --color-primary: hsl(var(--primary));
56
56
  --color-primary-foreground: hsl(var(--primary-foreground));
@@ -63,7 +63,7 @@
63
63
  --color-destructive: hsl(var(--destructive));
64
64
  --color-destructive-foreground: hsl(var(--destructive-foreground));
65
65
  --color-border: hsl(var(--border));
66
- --color-input: hsl(var(--input));
66
+ --color-input: hsl(var(--input) / var(--input-alpha, 100%));
67
67
  --color-ring: hsl(var(--ring));
68
68
  --color-success: hsl(var(--success));
69
69
  --color-success-foreground: hsl(var(--success-foreground));
@@ -108,8 +108,8 @@
108
108
  --color-primary-active: hsl(
109
109
  var(--primary-active, from hsl(var(--primary)) var(--primary-active-channels))
110
110
  );
111
- --color-secondary-hover: hsl(var(--secondary-hover));
112
- --color-secondary-active: hsl(var(--secondary-active));
111
+ --color-secondary-hover: hsl(var(--secondary-hover) / var(--secondary-hover-alpha, 100%));
112
+ --color-secondary-active: hsl(var(--secondary-active) / var(--secondary-active-alpha, 100%));
113
113
  --color-destructive-hover: hsl(var(--destructive-hover));
114
114
  --color-destructive-active: hsl(var(--destructive-active));
115
115
 
@@ -164,6 +164,15 @@
164
164
  --text-5xl: var(--font-size-5xl, var(--font-size-display));
165
165
  }
166
166
 
167
+ :root {
168
+ --radius-xs: initial;
169
+ --radius-sm: initial;
170
+ --radius-md: initial;
171
+ --radius-lg: initial;
172
+ --radius-xl: initial;
173
+ --radius-2xl: initial;
174
+ }
175
+
167
176
  @layer base {
168
177
  * {
169
178
  border-color: hsl(var(--border));
@@ -7,16 +7,24 @@
7
7
  display: flex;
8
8
  flex-direction: column;
9
9
 
10
- border-width: 1px;
10
+ border-width: var(--stroke-hairline);
11
11
  border-style: solid;
12
12
  border-color: hsl(var(--card-border, var(--border)));
13
- border-radius: var(--card-radius);
13
+ border-radius: var(--card-radius, calc(var(--radius) * var(--radius-ratio)));
14
14
 
15
15
  background:
16
- linear-gradient(var(--card-tint), var(--card-tint)), hsl(var(--card-background, var(--card)));
16
+ linear-gradient(
17
+ var(--card-tint-angle, to bottom),
18
+ var(--card-tint),
19
+ var(--card-tint-end, var(--card-tint))
20
+ ),
21
+ hsl(var(--card-background, var(--card)) / var(--card-alpha, 100%));
17
22
  color: hsl(var(--card-foreground));
18
23
 
19
- box-shadow: var(--card-shadow), var(--card-glow);
24
+ backdrop-filter: blur(var(--card-backdrop-blur-size))
25
+ saturate(var(--surface-backdrop-saturate, 160%));
26
+
27
+ box-shadow: var(--card-shadow, var(--shadow-sm)), var(--card-glow);
20
28
  overflow: hidden;
21
29
  }
22
30
 
@@ -38,7 +46,7 @@
38
46
 
39
47
  [data-slot="card"][data-variant="featured"] {
40
48
  border-color: var(--card-featured-border-color, hsl(var(--primary)));
41
- box-shadow: 0 0 0 var(--card-featured-ring-width)
49
+ box-shadow: 0 0 0 var(--card-featured-ring-width, var(--stroke-hairline))
42
50
  var(--card-featured-border-color, hsl(var(--primary)));
43
51
  }
44
52
 
@@ -84,14 +92,16 @@
84
92
  }
85
93
 
86
94
  [data-slot="card"][data-accent] {
87
- border-inline-start-width: var(--card-accent-rail-width);
95
+ border-inline-start-width: var(--card-accent-rail-width, var(--stroke-2xl));
88
96
  border-inline-start-color: var(--card-accent-color);
89
97
  }
90
98
 
91
99
  [data-slot="card"][data-accent] > [data-slot="card-header"],
92
100
  [data-slot="card"][data-accent] > [data-slot="card-content"]:not([data-flush]),
93
101
  [data-slot="card"][data-accent] > [data-slot="card-footer"]:not([data-flush]) {
94
- padding-inline-start: calc(var(--card-space-inset) - var(--card-accent-rail-width));
102
+ padding-inline-start: calc(
103
+ var(--card-space-inset) - var(--card-accent-rail-width, var(--stroke-2xl))
104
+ );
95
105
  }
96
106
 
97
107
  [data-slot="card"] > [data-slot="card-footer"] {
@@ -99,11 +109,11 @@
99
109
  }
100
110
 
101
111
  [data-slot="card"][data-accent][data-accent-placement="perimeter"] {
102
- border-width: var(--card-accent-perimeter-width);
112
+ border-width: var(--card-accent-perimeter-width, var(--stroke-hairline));
103
113
  border-color: var(--card-accent-color);
104
114
  box-shadow:
105
- 0 0 0 var(--card-accent-perimeter-ring-width) var(--card-accent-color),
106
- var(--card-shadow),
115
+ 0 0 0 var(--card-accent-perimeter-ring-width, var(--stroke-hairline)) var(--card-accent-color),
116
+ var(--card-shadow, var(--shadow-sm)),
107
117
  var(--card-glow);
108
118
  }
109
119
 
@@ -147,7 +157,7 @@
147
157
  align-items: center;
148
158
  gap: var(--space-inline-md);
149
159
  padding: var(--card-space-header-y) var(--card-space-inset);
150
- border-block: 1px solid hsl(var(--card-border, var(--border)));
160
+ border-block: var(--stroke-hairline) solid hsl(var(--card-border, var(--border)));
151
161
  }
152
162
 
153
163
  [data-slot="card-bar"]:first-child {
@@ -393,7 +403,7 @@
393
403
  }
394
404
 
395
405
  [data-slot="card-footer"][data-separated] {
396
- border-top: 1px solid hsl(var(--card-border, var(--border)));
406
+ border-top: var(--stroke-hairline) solid hsl(var(--card-border, var(--border)));
397
407
 
398
408
  padding-block: var(--card-space-divided-y);
399
409
  justify-content: flex-end;
@@ -467,9 +477,9 @@
467
477
  width: var(--stat-card-icon-size);
468
478
  height: var(--stat-card-icon-size);
469
479
  margin-bottom: var(--stat-card-gap);
470
- border-radius: var(--stat-card-icon-radius);
480
+ border-radius: var(--stat-card-icon-radius, calc(var(--radius) / var(--radius-ratio)));
471
481
  background: var(--stat-card-icon-background, hsl(var(--primary) / 0.1));
472
- color: var(--stat-card-icon-foreground, hsl(var(--primary)));
482
+ color: var(--stat-card-icon-foreground, hsl(var(--text-brand, var(--primary))));
473
483
  }
474
484
 
475
485
  [data-slot="stat-card-icon"] svg {
@@ -559,9 +569,12 @@
559
569
  flex: none;
560
570
  align-items: center;
561
571
  justify-content: center;
562
- border-radius: var(--card-service-launcher-icon-radius);
572
+ border-radius: var(
573
+ --card-service-launcher-icon-radius,
574
+ calc(var(--radius) / var(--radius-ratio))
575
+ );
563
576
  background: hsl(var(--card-service-launcher-icon-background, var(--accent)));
564
- color: hsl(var(--card-service-launcher-icon-foreground, var(--primary)));
577
+ color: hsl(var(--card-service-launcher-icon-foreground, var(--text-brand, var(--primary))));
565
578
  }
566
579
 
567
580
  [data-slot="card"][data-service-launcher][data-unavailable] [data-slot="service-launcher-icon"] {
@@ -33,12 +33,25 @@
33
33
 
34
34
  .ui-chart .recharts-default-tooltip {
35
35
  border-radius: var(--radius);
36
- border: 1px solid hsl(var(--border)) !important;
37
- background: hsl(var(--popover)) !important;
36
+ border: var(--stroke-hairline) solid hsl(var(--border)) !important;
37
+ background: hsl(var(--popover) / var(--popover-alpha, 100%)) !important;
38
38
  color: hsl(var(--popover-foreground));
39
39
  font-size: var(--font-size-xs, calc(var(--font-size-base) / var(--font-size-ratio)));
40
40
  }
41
41
 
42
+ .ui-chart .recharts-line-curve,
43
+ .ui-chart .recharts-area-curve {
44
+ stroke-width: var(--chart-series-stroke-width);
45
+ }
46
+
47
+ .ui-chart .recharts-area-area {
48
+ fill-opacity: var(--chart-area-fill-alpha);
49
+ }
50
+
51
+ .ui-chart .recharts-cartesian-grid line {
52
+ stroke-dasharray: var(--chart-grid-line-dash);
53
+ }
54
+
42
55
  .ui-chart-footer {
43
56
  margin-block-start: var(--chart-trend-footer-gap);
44
57
  font-size: var(--font-size-xs, calc(var(--font-size-base) / var(--font-size-ratio)));
@@ -92,9 +105,18 @@
92
105
  inline-size: 100%;
93
106
  max-inline-size: var(--chart-trend-bar-max-width);
94
107
 
95
- block-size: max(var(--chart-trend-bar-min-height), calc(var(--chart-trend-bar-value, 0) * 100%));
96
- border-start-start-radius: var(--chart-trend-bar-radius);
97
- border-start-end-radius: var(--chart-trend-bar-radius);
108
+ block-size: max(
109
+ var(--chart-trend-bar-min-height, var(--stroke-md)),
110
+ calc(var(--chart-trend-bar-value, 0) * 100%)
111
+ );
112
+ border-start-start-radius: var(
113
+ --chart-trend-bar-radius,
114
+ calc(var(--radius) / var(--radius-ratio) / var(--radius-ratio))
115
+ );
116
+ border-start-end-radius: var(
117
+ --chart-trend-bar-radius,
118
+ calc(var(--radius) / var(--radius-ratio) / var(--radius-ratio))
119
+ );
98
120
  background: var(
99
121
  --chart-trend-bar-background,
100
122
  hsl(var(--muted-foreground) / var(--chart-trend-bar-background-alpha))