@svadmin/ui 0.85.0 → 0.86.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 (69) hide show
  1. package/README.md +29 -0
  2. package/dist/app-shell.css +216 -0
  3. package/dist/app.css +483 -172
  4. package/dist/app.theme.css +483 -172
  5. package/dist/component-registry.d.ts +7292 -529
  6. package/dist/component-registry.js +32 -3
  7. package/dist/components/AppShellPage.svelte +172 -0
  8. package/dist/components/AppShellPage.svelte.d.ts +30 -0
  9. package/dist/components/AutoForm.svelte +7 -12
  10. package/dist/components/AutoForm.svelte.d.ts +0 -1
  11. package/dist/components/AutoTable.svelte +2 -0
  12. package/dist/components/AutoTable.svelte.d.ts +2 -0
  13. package/dist/components/ConfigurationPage.svelte +0 -3
  14. package/dist/components/ConfigurationPage.svelte.d.ts +0 -1
  15. package/dist/components/CreatePage.svelte +1 -5
  16. package/dist/components/CreatePage.svelte.d.ts +0 -1
  17. package/dist/components/EditPage.svelte +1 -5
  18. package/dist/components/EditPage.svelte.d.ts +0 -1
  19. package/dist/components/FieldRenderer.svelte +2 -10
  20. package/dist/components/FieldRenderer.svelte.d.ts +0 -1
  21. package/dist/components/ListPage.svelte +2 -5
  22. package/dist/components/ListPage.svelte.d.ts +0 -1
  23. package/dist/components/PageHeader.svelte +1 -3
  24. package/dist/components/PageHeader.svelte.d.ts +0 -1
  25. package/dist/components/PagePattern.svelte +36 -13
  26. package/dist/components/PagePattern.svelte.d.ts +7 -0
  27. package/dist/components/QuickEditDrawer.svelte +0 -1
  28. package/dist/components/ShowPage.svelte +5 -9
  29. package/dist/components/ShowPage.svelte.d.ts +0 -1
  30. package/dist/components/SvarAutoTable.svelte +2 -1
  31. package/dist/components/SvarDataGrid.svelte +8 -4
  32. package/dist/components/SvarDataGrid.svelte.d.ts +3 -0
  33. package/dist/components/SvarResourceTable.svelte +0 -1
  34. package/dist/components/SvarResourceTable.svelte.d.ts +0 -1
  35. package/dist/components/SvarResourceTableView.svelte +2 -2
  36. package/dist/components/auto-table-grid.d.ts +1 -0
  37. package/dist/components/content/ContentPageHeader.svelte +2 -1
  38. package/dist/components/content/ContentPageHeader.svelte.d.ts +1 -0
  39. package/dist/components/content/ContentPageShell.svelte +1 -1
  40. package/dist/components/content/ContentPageShell.svelte.d.ts +1 -0
  41. package/dist/components/content/DataPanel.svelte +58 -0
  42. package/dist/components/content/DataPanel.svelte.d.ts +16 -0
  43. package/dist/components/content/DescriptionList.svelte +5 -8
  44. package/dist/components/content/DescriptionList.svelte.d.ts +0 -1
  45. package/dist/components/content/FilterToolbar.svelte +2 -5
  46. package/dist/components/content/FilterToolbar.svelte.d.ts +0 -1
  47. package/dist/components/content/NetworkTable.svelte +3 -3
  48. package/dist/components/content/NetworkTable.svelte.d.ts +0 -1
  49. package/dist/components/content/PageSection.svelte +1 -1
  50. package/dist/components/content/StatusTabs.svelte +2 -7
  51. package/dist/components/content/StatusTabs.svelte.d.ts +0 -1
  52. package/dist/components/content/index.d.ts +1 -0
  53. package/dist/components/content/index.js +1 -0
  54. package/dist/components/ui/table/index.d.ts +0 -1
  55. package/dist/components/ui/table/table.svelte +1 -0
  56. package/dist/components/ui/table/table.svelte.d.ts +1 -0
  57. package/dist/components.css +1 -11
  58. package/dist/data-panel.css +88 -0
  59. package/dist/design-contract.d.ts +11 -0
  60. package/dist/design-contract.js +8 -0
  61. package/dist/design-system.d.ts +3 -2
  62. package/dist/design-system.js +3 -2
  63. package/dist/index.d.ts +4 -2
  64. package/dist/index.js +2 -0
  65. package/dist/page-chrome.css +40 -62
  66. package/dist/recipes.d.ts +67 -154
  67. package/dist/recipes.js +32 -68
  68. package/dist/styles/recipes.css +15 -48
  69. package/package.json +4 -4
package/dist/app.css CHANGED
@@ -5522,23 +5522,16 @@
5522
5522
  --container-xs: 20rem;
5523
5523
  --container-sm: 24rem;
5524
5524
  --container-xl: 36rem;
5525
- --container-2xl: 42rem;
5526
5525
  --container-3xl: 48rem;
5527
5526
  --text-xs: 0.75rem;
5528
5527
  --text-xs--line-height: calc(1 / 0.75);
5529
5528
  --text-sm: 0.875rem;
5530
5529
  --text-sm--line-height: calc(1.25 / 0.875);
5531
- --text-base: 1rem;
5532
- --text-base--line-height: calc(1.5 / 1);
5533
- --text-lg: 1.125rem;
5534
- --text-lg--line-height: calc(1.75 / 1.125);
5535
- --text-xl: 1.25rem;
5536
- --text-xl--line-height: calc(1.75 / 1.25);
5537
5530
  --text-2xl: 1.5rem;
5538
5531
  --text-2xl--line-height: calc(2 / 1.5);
5539
5532
  --font-weight-medium: 500;
5540
5533
  --font-weight-semibold: 600;
5541
- --leading-tight: 1.25;
5534
+ --radius-md: calc(var(--radius) - 2px);
5542
5535
  --shadow-lg: 0 10px 15px -3px rgb(0 0 0 / 0.1), 0 4px 6px -4px rgb(0 0 0 / 0.1);
5543
5536
  --drop-shadow-sm: 0 1px 2px rgb(0 0 0 / 0.15);
5544
5537
  --ease-in-out: cubic-bezier(0.4, 0, 0.2, 1);
@@ -5605,6 +5598,9 @@
5605
5598
  .mt-3 {
5606
5599
  margin-top: calc(var(--spacing) * 3);
5607
5600
  }
5601
+ .mt-\[var\(--svadmin-space-1\)\] {
5602
+ margin-top: var(--svadmin-space-1);
5603
+ }
5608
5604
  .block {
5609
5605
  display: block;
5610
5606
  }
@@ -5653,9 +5649,6 @@
5653
5649
  .w-full {
5654
5650
  width: 100%;
5655
5651
  }
5656
- .max-w-2xl {
5657
- max-width: var(--container-2xl);
5658
- }
5659
5652
  .max-w-3xl {
5660
5653
  max-width: var(--container-3xl);
5661
5654
  }
@@ -5665,9 +5658,6 @@
5665
5658
  .max-w-\[64rem\] {
5666
5659
  max-width: 64rem;
5667
5660
  }
5668
- .max-w-\[65ch\] {
5669
- max-width: 65ch;
5670
- }
5671
5661
  .max-w-\[74rem\] {
5672
5662
  max-width: 74rem;
5673
5663
  }
@@ -5677,6 +5667,9 @@
5677
5667
  .max-w-\[92rem\] {
5678
5668
  max-width: 92rem;
5679
5669
  }
5670
+ .max-w-\[var\(--svadmin-measure\)\] {
5671
+ max-width: var(--svadmin-measure);
5672
+ }
5680
5673
  .max-w-full {
5681
5674
  max-width: 100%;
5682
5675
  }
@@ -5695,8 +5688,8 @@
5695
5688
  .flex-1 {
5696
5689
  flex: 1;
5697
5690
  }
5698
- .flex-\[1_1_16rem\] {
5699
- flex: 1 1 16rem;
5691
+ .flex-\[1_1_var\(--svadmin-chrome-basis\)\] {
5692
+ flex: 1 1 var(--svadmin-chrome-basis);
5700
5693
  }
5701
5694
  .flex-shrink {
5702
5695
  flex-shrink: 1;
@@ -5770,15 +5763,14 @@
5770
5763
  .gap-8 {
5771
5764
  gap: calc(var(--spacing) * 8);
5772
5765
  }
5773
- :where(.space-y-0\.5 > :not(:last-child)) {
5774
- --tw-space-y-reverse: 0;
5775
- margin-block-start: calc(calc(var(--spacing) * 0.5) * var(--tw-space-y-reverse));
5776
- margin-block-end: calc(calc(var(--spacing) * 0.5) * calc(1 - var(--tw-space-y-reverse)));
5766
+ .gap-\[var\(--svadmin-space-2\)\] {
5767
+ gap: var(--svadmin-space-2);
5777
5768
  }
5778
- :where(.space-y-1 > :not(:last-child)) {
5779
- --tw-space-y-reverse: 0;
5780
- margin-block-start: calc(var(--spacing) * var(--tw-space-y-reverse));
5781
- margin-block-end: calc(var(--spacing) * calc(1 - var(--tw-space-y-reverse)));
5769
+ .gap-\[var\(--svadmin-space-3\)\] {
5770
+ gap: var(--svadmin-space-3);
5771
+ }
5772
+ .gap-\[var\(--svadmin-space-5\)\] {
5773
+ gap: var(--svadmin-space-5);
5782
5774
  }
5783
5775
  :where(.space-y-2 > :not(:last-child)) {
5784
5776
  --tw-space-y-reverse: 0;
@@ -5805,6 +5797,21 @@
5805
5797
  margin-block-start: calc(calc(var(--spacing) * 6) * var(--tw-space-y-reverse));
5806
5798
  margin-block-end: calc(calc(var(--spacing) * 6) * calc(1 - var(--tw-space-y-reverse)));
5807
5799
  }
5800
+ :where(.space-y-\[var\(--svadmin-space-1\)\] > :not(:last-child)) {
5801
+ --tw-space-y-reverse: 0;
5802
+ margin-block-start: calc(var(--svadmin-space-1) * var(--tw-space-y-reverse));
5803
+ margin-block-end: calc(var(--svadmin-space-1) * calc(1 - var(--tw-space-y-reverse)));
5804
+ }
5805
+ :where(.space-y-\[var\(--svadmin-space-3\)\] > :not(:last-child)) {
5806
+ --tw-space-y-reverse: 0;
5807
+ margin-block-start: calc(var(--svadmin-space-3) * var(--tw-space-y-reverse));
5808
+ margin-block-end: calc(var(--svadmin-space-3) * calc(1 - var(--tw-space-y-reverse)));
5809
+ }
5810
+ :where(.space-y-\[var\(--svadmin-space-5\)\] > :not(:last-child)) {
5811
+ --tw-space-y-reverse: 0;
5812
+ margin-block-start: calc(var(--svadmin-space-5) * var(--tw-space-y-reverse));
5813
+ margin-block-end: calc(var(--svadmin-space-5) * calc(1 - var(--tw-space-y-reverse)));
5814
+ }
5808
5815
  .overflow-hidden {
5809
5816
  overflow: hidden;
5810
5817
  }
@@ -5895,9 +5902,6 @@
5895
5902
  .p-0 {
5896
5903
  padding: 0px;
5897
5904
  }
5898
- .p-3 {
5899
- padding: calc(var(--spacing) * 3);
5900
- }
5901
5905
  .p-4 {
5902
5906
  padding: calc(var(--spacing) * 4);
5903
5907
  }
@@ -5910,6 +5914,9 @@
5910
5914
  .px-4 {
5911
5915
  padding-inline: calc(var(--spacing) * 4);
5912
5916
  }
5917
+ .px-\[var\(--svadmin-space-4\)\] {
5918
+ padding-inline: var(--svadmin-space-4);
5919
+ }
5913
5920
  .py-1 {
5914
5921
  padding-block: var(--spacing);
5915
5922
  }
@@ -5919,9 +5926,6 @@
5919
5926
  .py-3 {
5920
5927
  padding-block: calc(var(--spacing) * 3);
5921
5928
  }
5922
- .py-4 {
5923
- padding-block: calc(var(--spacing) * 4);
5924
- }
5925
5929
  .py-5 {
5926
5930
  padding-block: calc(var(--spacing) * 5);
5927
5931
  }
@@ -5931,6 +5935,15 @@
5931
5935
  .py-\[7px\] {
5932
5936
  padding-block: 7px;
5933
5937
  }
5938
+ .py-\[var\(--svadmin-space-1\)\] {
5939
+ padding-block: var(--svadmin-space-1);
5940
+ }
5941
+ .py-\[var\(--svadmin-space-3\)\] {
5942
+ padding-block: var(--svadmin-space-3);
5943
+ }
5944
+ .py-\[var\(--svadmin-space-4\)\] {
5945
+ padding-block: var(--svadmin-space-4);
5946
+ }
5934
5947
  .text-left {
5935
5948
  text-align: left;
5936
5949
  }
@@ -5938,22 +5951,10 @@
5938
5951
  font-size: var(--text-2xl);
5939
5952
  line-height: var(--tw-leading, var(--text-2xl--line-height));
5940
5953
  }
5941
- .text-base {
5942
- font-size: var(--text-base);
5943
- line-height: var(--tw-leading, var(--text-base--line-height));
5944
- }
5945
- .text-lg {
5946
- font-size: var(--text-lg);
5947
- line-height: var(--tw-leading, var(--text-lg--line-height));
5948
- }
5949
5954
  .text-sm {
5950
5955
  font-size: var(--text-sm);
5951
5956
  line-height: var(--tw-leading, var(--text-sm--line-height));
5952
5957
  }
5953
- .text-xl {
5954
- font-size: var(--text-xl);
5955
- line-height: var(--tw-leading, var(--text-xl--line-height));
5956
- }
5957
5958
  .text-xs {
5958
5959
  font-size: var(--text-xs);
5959
5960
  line-height: var(--tw-leading, var(--text-xs--line-height));
@@ -5961,17 +5962,32 @@
5961
5962
  .text-\[0\.8125rem\] {
5962
5963
  font-size: 0.8125rem;
5963
5964
  }
5964
- .leading-5 {
5965
- --tw-leading: calc(var(--spacing) * 5);
5966
- line-height: calc(var(--spacing) * 5);
5965
+ .text-\[length\:var\(--svadmin-text-body\)\] {
5966
+ font-size: var(--svadmin-text-body);
5967
+ }
5968
+ .text-\[length\:var\(--svadmin-text-caption\)\] {
5969
+ font-size: var(--svadmin-text-caption);
5970
+ }
5971
+ .text-\[length\:var\(--svadmin-text-label\)\] {
5972
+ font-size: var(--svadmin-text-label);
5973
+ }
5974
+ .text-\[length\:var\(--svadmin-text-section\)\] {
5975
+ font-size: var(--svadmin-text-section);
5976
+ }
5977
+ .text-\[length\:var\(--svadmin-text-title\)\] {
5978
+ font-size: var(--svadmin-text-title);
5967
5979
  }
5968
5980
  .leading-6 {
5969
5981
  --tw-leading: calc(var(--spacing) * 6);
5970
5982
  line-height: calc(var(--spacing) * 6);
5971
5983
  }
5972
- .leading-tight {
5973
- --tw-leading: var(--leading-tight);
5974
- line-height: var(--leading-tight);
5984
+ .leading-\[var\(--svadmin-leading-body\)\] {
5985
+ --tw-leading: var(--svadmin-leading-body);
5986
+ line-height: var(--svadmin-leading-body);
5987
+ }
5988
+ .leading-\[var\(--svadmin-leading-tight\)\] {
5989
+ --tw-leading: var(--svadmin-leading-tight);
5990
+ line-height: var(--svadmin-leading-tight);
5975
5991
  }
5976
5992
  .font-medium {
5977
5993
  --tw-font-weight: var(--font-weight-medium);
@@ -6095,15 +6111,9 @@
6095
6111
  .\[--svadmin-metric-state-border-width\:3px\] {
6096
6112
  --svadmin-metric-state-border-width: 3px;
6097
6113
  }
6098
- .\[--svadmin-metric-state-height\:4\.5rem\] {
6099
- --svadmin-metric-state-height: 4.5rem;
6100
- }
6101
6114
  .\[--svadmin-metric-state-height\:6rem\] {
6102
6115
  --svadmin-metric-state-height: 6rem;
6103
6116
  }
6104
- .\[--svadmin-metric-state-padding\:0\.75rem\] {
6105
- --svadmin-metric-state-padding: 0.75rem;
6106
- }
6107
6117
  .\[--svadmin-metric-state-padding\:1\.25rem\] {
6108
6118
  --svadmin-metric-state-padding: 1.25rem;
6109
6119
  }
@@ -6122,11 +6132,8 @@
6122
6132
  .\[--svadmin-status-color\:var\(--warning\)\] {
6123
6133
  --svadmin-status-color: var(--warning);
6124
6134
  }
6125
- .\[--svadmin-table-state-height\:6rem\] {
6126
- --svadmin-table-state-height: 6rem;
6127
- }
6128
- .\[--svadmin-table-state-height\:8rem\] {
6129
- --svadmin-table-state-height: 8rem;
6135
+ .\[--svadmin-table-state-height\:var\(--svadmin-table-state-min-h\)\] {
6136
+ --svadmin-table-state-height: var(--svadmin-table-state-min-h);
6130
6137
  }
6131
6138
  .\[writing-mode\:vertical-rl\] {
6132
6139
  writing-mode: vertical-rl;
@@ -6207,33 +6214,17 @@
6207
6214
  .\[\&_\[data-command-group-heading\]\]\:uppercase [data-command-group-heading] {
6208
6215
  text-transform: uppercase;
6209
6216
  }
6210
- .\[\&\[data-slot\=table-cell\]\]\:py-1[data-slot=table-cell] {
6211
- padding-block: var(--spacing);
6217
+ .\[\&\[data-slot\=table-cell\]\]\:py-\[var\(--svadmin-space-2\)\][data-slot=table-cell] {
6218
+ padding-block: var(--svadmin-space-2);
6212
6219
  }
6213
- .\[\&\[data-slot\=table-cell\]\]\:py-2[data-slot=table-cell] {
6214
- padding-block: calc(var(--spacing) * 2);
6220
+ .\[\&\[data-slot\=table-cell\]\]\:text-\[length\:var\(--svadmin-text-body\)\][data-slot=table-cell] {
6221
+ font-size: var(--svadmin-text-body);
6215
6222
  }
6216
- .\[\&\[data-slot\=table-cell\]\]\:text-sm[data-slot=table-cell] {
6217
- font-size: var(--text-sm);
6218
- line-height: var(--tw-leading, var(--text-sm--line-height));
6223
+ .\[\&\[data-slot\=table-head\]\]\:py-\[var\(--svadmin-space-2\)\][data-slot=table-head] {
6224
+ padding-block: var(--svadmin-space-2);
6219
6225
  }
6220
- .\[\&\[data-slot\=table-cell\]\]\:text-xs[data-slot=table-cell] {
6221
- font-size: var(--text-xs);
6222
- line-height: var(--tw-leading, var(--text-xs--line-height));
6223
- }
6224
- .\[\&\[data-slot\=table-head\]\]\:py-1[data-slot=table-head] {
6225
- padding-block: var(--spacing);
6226
- }
6227
- .\[\&\[data-slot\=table-head\]\]\:py-2[data-slot=table-head] {
6228
- padding-block: calc(var(--spacing) * 2);
6229
- }
6230
- .\[\&\[data-slot\=table-head\]\]\:text-sm[data-slot=table-head] {
6231
- font-size: var(--text-sm);
6232
- line-height: var(--tw-leading, var(--text-sm--line-height));
6233
- }
6234
- .\[\&\[data-slot\=table-head\]\]\:text-xs[data-slot=table-head] {
6235
- font-size: var(--text-xs);
6236
- line-height: var(--tw-leading, var(--text-xs--line-height));
6226
+ .\[\&\[data-slot\=table-head\]\]\:text-\[length\:var\(--svadmin-text-body\)\][data-slot=table-head] {
6227
+ font-size: var(--svadmin-text-body);
6237
6228
  }
6238
6229
  }
6239
6230
  @property --tw-rotate-x {
@@ -6478,7 +6469,7 @@
6478
6469
  * the host application's utility CSS implementation.
6479
6470
  */
6480
6471
  [data-svadmin-skip-link] {
6481
- transform: translateY(calc(-100% - 1rem));
6472
+ transform: translateY(calc(-100% - var(--svadmin-space-4)));
6482
6473
  }
6483
6474
  [data-svadmin-skip-link]:focus,
6484
6475
  [data-svadmin-skip-link]:focus-visible {
@@ -6486,24 +6477,17 @@
6486
6477
  }
6487
6478
 
6488
6479
  .svadmin-page-header {
6489
- --svadmin-page-header-gap: 0.5rem;
6480
+ --svadmin-page-header-gap: var(--svadmin-space-2);
6490
6481
  min-width: 0;
6491
6482
  }
6492
- .svadmin-page-header[data-density="compact"] {
6493
- --svadmin-page-header-gap: 0.375rem;
6494
- }
6495
6483
  .svadmin-page-header__breadcrumbs {
6496
- margin-bottom: 1rem;
6497
- }
6498
- .svadmin-page-header[data-density="compact"] .svadmin-page-header__breadcrumbs {
6499
- margin-bottom: 0.375rem;
6500
- font-size: 0.75rem;
6484
+ margin-bottom: var(--svadmin-space-4);
6501
6485
  }
6502
6486
  .svadmin-page-header__row, .svadmin-filter-toolbar__row {
6503
6487
  display: flex;
6504
6488
  flex-direction: column;
6505
6489
  min-width: 0;
6506
- gap: 0.5rem;
6490
+ gap: var(--svadmin-space-2);
6507
6491
  }
6508
6492
  .svadmin-page-header__row {
6509
6493
  gap: var(--svadmin-page-header-gap);
@@ -6512,7 +6496,7 @@
6512
6496
  display: flex;
6513
6497
  align-items: center;
6514
6498
  min-width: 0;
6515
- gap: 0.625rem;
6499
+ gap: var(--svadmin-space-3);
6516
6500
  }
6517
6501
  .svadmin-page-header__text {
6518
6502
  min-width: 0;
@@ -6522,7 +6506,7 @@
6522
6506
  flex-wrap: wrap;
6523
6507
  align-items: center;
6524
6508
  min-width: 0;
6525
- gap: 0.5rem;
6509
+ gap: var(--svadmin-space-2);
6526
6510
  }
6527
6511
  .svadmin-page-header__tags, .svadmin-page-header__actions {
6528
6512
  max-width: 100%;
@@ -6531,24 +6515,17 @@
6531
6515
  .svadmin-page-header__title {
6532
6516
  min-width: 0;
6533
6517
  color: var(--foreground);
6534
- font-size: 1.25rem;
6518
+ font-size: var(--svadmin-text-title);
6535
6519
  font-weight: 600;
6536
- line-height: 1.75rem;
6520
+ line-height: var(--svadmin-leading-tight);
6537
6521
  overflow-wrap: anywhere;
6538
6522
  }
6539
6523
  .svadmin-page-header__description {
6540
6524
  color: var(--muted-foreground);
6541
- font-size: 0.875rem;
6542
- line-height: 1.25rem;
6525
+ font-size: var(--svadmin-text-body);
6526
+ line-height: var(--svadmin-leading-body);
6543
6527
  overflow-wrap: anywhere;
6544
6528
  }
6545
- .svadmin-page-header[data-density="compact"] .svadmin-page-header__title {
6546
- font-size: 1.125rem;
6547
- }
6548
- .svadmin-page-header[data-density="compact"] .svadmin-page-header__description {
6549
- font-size: 0.75rem;
6550
- line-height: 1rem;
6551
- }
6552
6529
  .svadmin-page-header .svadmin-page-header__back {
6553
6530
  flex-shrink: 0;
6554
6531
  color: var(--muted-foreground);
@@ -6557,14 +6534,14 @@
6557
6534
  color: var(--foreground);
6558
6535
  }
6559
6536
  .svadmin-page-header .svadmin-page-header__back-icon {
6560
- width: 1rem;
6561
- height: 1rem;
6537
+ width: var(--svadmin-space-4);
6538
+ height: var(--svadmin-space-4);
6562
6539
  }
6563
6540
  .svadmin-breadcrumbs {
6564
6541
  min-width: 0;
6565
6542
  }
6566
6543
  .svadmin-breadcrumbs--spaced {
6567
- margin-bottom: 1rem;
6544
+ margin-bottom: var(--svadmin-space-4);
6568
6545
  }
6569
6546
  .svadmin-breadcrumbs__item {
6570
6547
  display: inline-flex;
@@ -6575,16 +6552,11 @@
6575
6552
  color: var(--muted-foreground);
6576
6553
  }
6577
6554
  .svadmin-filter-toolbar {
6578
- --svadmin-filter-control-height: 2.25rem;
6579
- --svadmin-filter-control-font: 0.875rem;
6580
- --svadmin-filter-search-icon-size: 1rem;
6555
+ --svadmin-filter-control-height: var(--svadmin-control-h);
6556
+ --svadmin-filter-control-font: var(--svadmin-text-body);
6557
+ --svadmin-filter-search-icon-size: var(--svadmin-space-4);
6581
6558
  min-width: 0;
6582
6559
  }
6583
- .svadmin-filter-toolbar[data-density="compact"] {
6584
- --svadmin-filter-control-height: 2rem;
6585
- --svadmin-filter-control-font: 0.75rem;
6586
- --svadmin-filter-search-icon-size: 0.875rem;
6587
- }
6588
6560
  .svadmin-filter-toolbar__search {
6589
6561
  position: relative;
6590
6562
  min-width: 0;
@@ -6592,60 +6564,57 @@
6592
6564
  .svadmin-filter-toolbar__search-icon {
6593
6565
  position: absolute;
6594
6566
  top: 50%;
6595
- inset-inline-start: 0.75rem;
6567
+ inset-inline-start: var(--svadmin-space-3);
6596
6568
  width: var(--svadmin-filter-search-icon-size);
6597
6569
  height: var(--svadmin-filter-search-icon-size);
6598
6570
  color: var(--muted-foreground);
6599
6571
  transform: translateY(-50%);
6600
6572
  pointer-events: none;
6601
6573
  }
6602
- .svadmin-filter-toolbar[data-density] .svadmin-filter-toolbar__input {
6574
+ .svadmin-filter-toolbar .svadmin-filter-toolbar__input {
6603
6575
  height: var(--svadmin-filter-control-height);
6604
- padding-inline: 2.25rem;
6576
+ padding-inline: calc(var(--svadmin-space-5) + var(--svadmin-space-3));
6605
6577
  font-size: var(--svadmin-filter-control-font);
6606
- line-height: 1rem;
6578
+ line-height: var(--svadmin-leading-tight);
6607
6579
  }
6608
- .svadmin-filter-toolbar[data-density] .svadmin-filter-toolbar__clear {
6580
+ .svadmin-filter-toolbar .svadmin-filter-toolbar__clear {
6609
6581
  position: absolute;
6610
6582
  top: 50%;
6611
- inset-inline-end: 0.25rem;
6583
+ inset-inline-end: var(--svadmin-space-1);
6612
6584
  transform: translateY(-50%);
6613
6585
  }
6614
- .svadmin-filter-toolbar[data-density] .svadmin-filter-toolbar__toggle {
6586
+ .svadmin-filter-toolbar .svadmin-filter-toolbar__toggle {
6615
6587
  flex-shrink: 0;
6616
- gap: 0.375rem;
6588
+ gap: var(--svadmin-space-2);
6617
6589
  height: var(--svadmin-filter-control-height);
6618
6590
  font-size: var(--svadmin-filter-control-font);
6619
6591
  max-width: 100%;
6620
6592
  white-space: normal;
6621
6593
  overflow-wrap: anywhere;
6622
6594
  }
6623
- .svadmin-filter-toolbar[data-density="compact"] .svadmin-filter-toolbar__toggle {
6624
- padding-inline: 0.625rem;
6625
- }
6626
6595
  .svadmin-filter-toolbar .svadmin-filter-toolbar__control-icon {
6627
- width: 0.875rem;
6628
- height: 0.875rem;
6596
+ width: var(--svadmin-space-3);
6597
+ height: var(--svadmin-space-3);
6629
6598
  }
6630
6599
  .svadmin-filter-toolbar .svadmin-filter-toolbar__chevron {
6631
- width: 0.75rem;
6632
- height: 0.75rem;
6633
- margin-inline-start: 0.125rem;
6600
+ width: var(--svadmin-space-3);
6601
+ height: var(--svadmin-space-3);
6602
+ margin-inline-start: var(--svadmin-space-1);
6634
6603
  color: var(--muted-foreground);
6635
6604
  }
6636
- .svadmin-filter-toolbar[data-density] .svadmin-filter-toolbar__count {
6637
- height: 1rem;
6638
- min-height: 1rem;
6639
- min-width: 1rem;
6640
- margin-inline-start: 0.125rem;
6641
- padding: 0 0.25rem;
6642
- font-size: 0.625rem;
6605
+ .svadmin-filter-toolbar .svadmin-filter-toolbar__count {
6606
+ height: var(--svadmin-space-4);
6607
+ min-height: var(--svadmin-space-4);
6608
+ min-width: var(--svadmin-space-4);
6609
+ margin-inline-start: var(--svadmin-space-1);
6610
+ padding: 0 var(--svadmin-space-1);
6611
+ font-size: var(--svadmin-text-caption);
6643
6612
  font-weight: 600;
6644
6613
  line-height: 1;
6645
6614
  font-variant-numeric: tabular-nums;
6646
6615
  }
6647
6616
  .svadmin-filter-toolbar .svadmin-filter-toolbar-advanced {
6648
- margin-top: 0.5rem;
6617
+ margin-top: var(--svadmin-space-2);
6649
6618
  border: 1px solid var(--border);
6650
6619
  @supports (color: color-mix(in lab, red, red)) {
6651
6620
  border: 1px solid color-mix(in oklch, var(--border) 60%, transparent);
@@ -6655,7 +6624,7 @@
6655
6624
  @supports (color: color-mix(in lab, red, red)) {
6656
6625
  background: color-mix(in oklch, var(--muted) 20%, transparent);
6657
6626
  }
6658
- padding: 0.75rem;
6627
+ padding: var(--svadmin-space-3);
6659
6628
  overflow-wrap: anywhere;
6660
6629
  }
6661
6630
  @media (min-width: 640px) {
@@ -6668,13 +6637,317 @@
6668
6637
  justify-content: space-between;
6669
6638
  }
6670
6639
  .svadmin-page-header__heading {
6671
- flex: 1 1 16rem;
6640
+ flex: 1 1 var(--svadmin-chrome-basis);
6672
6641
  }
6673
6642
  .svadmin-filter-toolbar__search {
6674
- flex: 1 1 14rem;
6643
+ flex: 1 1 var(--svadmin-chrome-basis);
6675
6644
  }
6676
6645
  }
6677
6646
  }
6647
+ /* Router-agnostic application shell.
6648
+ *
6649
+ * Every length, size and color here comes from a token. That is the contract
6650
+ * hosts rely on: a host with its own router composes the shell with snippets and
6651
+ * overrides tokens, instead of re-implementing sidebar, topbar and page
6652
+ * composition in bespoke CSS. See docs/components/app-shell.md. */
6653
+ @layer components {
6654
+ .svadmin-app-shell {
6655
+ display: grid;
6656
+ grid-template-rows: auto minmax(0, 1fr) auto;
6657
+ grid-template-columns: minmax(0, 1fr);
6658
+ min-height: 100dvh;
6659
+ background: var(--background);
6660
+ color: var(--foreground);
6661
+ font-size: var(--svadmin-text-body);
6662
+ line-height: var(--svadmin-leading-body);
6663
+ }
6664
+ .svadmin-app-shell[data-width="narrow"] {
6665
+ --svadmin-shell-max: 48rem;
6666
+ }
6667
+ .svadmin-app-shell[data-width="wide"] {
6668
+ --svadmin-shell-max: 92rem;
6669
+ }
6670
+ .svadmin-app-shell[data-width="full"] {
6671
+ --svadmin-shell-max: none;
6672
+ }
6673
+ .svadmin-app-shell[data-sidebar="true"] {
6674
+ grid-template-columns: var(--svadmin-shell-sidebar-w) minmax(0, 1fr);
6675
+ grid-template-areas:
6676
+ "topbar topbar"
6677
+ "sidebar main"
6678
+ "sidebar footer";
6679
+ }
6680
+ .svadmin-app-shell[data-collapsed="true"] {
6681
+ --svadmin-shell-sidebar-w: var(--svadmin-shell-sidebar-w-collapsed);
6682
+ }
6683
+ .svadmin-app-shell[data-aside="true"] .svadmin-app-shell__body {
6684
+ grid-template-columns: minmax(0, 1fr) minmax(0, var(--svadmin-shell-aside-w));
6685
+ }
6686
+
6687
+ .svadmin-app-shell__skip {
6688
+ position: fixed;
6689
+ z-index: 60;
6690
+ inset-block-start: var(--svadmin-space-2);
6691
+ inset-inline-start: var(--svadmin-space-2);
6692
+ border: 1px solid var(--border);
6693
+ border-radius: var(--radius-md);
6694
+ background: var(--card);
6695
+ padding: var(--svadmin-space-2) var(--svadmin-space-3);
6696
+ color: var(--foreground);
6697
+ font-size: var(--svadmin-text-caption);
6698
+ font-weight: 600;
6699
+ transform: translateY(calc(-1 * (var(--svadmin-space-6) + var(--svadmin-space-5))));
6700
+ }
6701
+ .svadmin-app-shell__skip:focus-visible {
6702
+ transform: none;
6703
+ outline: var(--svadmin-focus-width) solid var(--ring);
6704
+ outline-offset: var(--svadmin-focus-offset);
6705
+ }
6706
+
6707
+ .svadmin-app-shell__topbar {
6708
+ grid-area: topbar;
6709
+ display: flex;
6710
+ align-items: center;
6711
+ gap: var(--svadmin-space-3);
6712
+ min-width: 0;
6713
+ min-height: var(--svadmin-shell-topbar-h);
6714
+ border-bottom: 1px solid var(--border);
6715
+ background: var(--card);
6716
+ padding-inline: var(--svadmin-shell-gutter);
6717
+ }
6718
+ .svadmin-app-shell__topbar-start,
6719
+ .svadmin-app-shell__topbar-end {
6720
+ display: flex;
6721
+ align-items: center;
6722
+ min-width: 0;
6723
+ gap: var(--svadmin-space-2);
6724
+ }
6725
+ .svadmin-app-shell__topbar-main {
6726
+ display: flex;
6727
+ flex: 1 1 auto;
6728
+ align-items: center;
6729
+ min-width: 0;
6730
+ gap: var(--svadmin-space-3);
6731
+ }
6732
+ .svadmin-app-shell__topbar-end {
6733
+ flex: 0 0 auto;
6734
+ justify-content: flex-end;
6735
+ }
6736
+
6737
+ .svadmin-app-shell__sidebar {
6738
+ grid-area: sidebar;
6739
+ display: flex;
6740
+ flex-direction: column;
6741
+ min-width: 0;
6742
+ min-height: 0;
6743
+ border-inline-end: 1px solid var(--sidebar-border, var(--border));
6744
+ background: var(--sidebar, var(--card));
6745
+ color: var(--sidebar-foreground, var(--foreground));
6746
+ overflow-y: auto;
6747
+ overscroll-behavior: contain;
6748
+ }
6749
+ .svadmin-app-shell__sidebar-inner {
6750
+ display: flex;
6751
+ flex: 1 1 auto;
6752
+ flex-direction: column;
6753
+ gap: var(--svadmin-space-2);
6754
+ min-width: 0;
6755
+ padding: var(--svadmin-space-3) var(--svadmin-space-2);
6756
+ }
6757
+
6758
+ .svadmin-app-shell__main {
6759
+ grid-area: main;
6760
+ display: flex;
6761
+ flex-direction: column;
6762
+ min-width: 0;
6763
+ min-height: 0;
6764
+ }
6765
+ .svadmin-app-shell__body {
6766
+ display: grid;
6767
+ grid-template-columns: minmax(0, 1fr);
6768
+ align-items: start;
6769
+ gap: var(--svadmin-section-gap);
6770
+ width: 100%;
6771
+ max-width: var(--svadmin-shell-max);
6772
+ margin-inline: auto;
6773
+ padding: var(--svadmin-shell-gutter);
6774
+ min-width: 0;
6775
+ }
6776
+ .svadmin-app-shell__content {
6777
+ display: grid;
6778
+ gap: var(--svadmin-section-gap);
6779
+ min-width: 0;
6780
+ }
6781
+ .svadmin-app-shell__aside {
6782
+ display: grid;
6783
+ gap: var(--svadmin-section-gap);
6784
+ min-width: 0;
6785
+ }
6786
+
6787
+ .svadmin-app-shell__footer {
6788
+ grid-area: footer;
6789
+ display: flex;
6790
+ flex-wrap: wrap;
6791
+ align-items: center;
6792
+ justify-content: space-between;
6793
+ gap: var(--svadmin-space-2);
6794
+ width: 100%;
6795
+ max-width: var(--svadmin-shell-max);
6796
+ margin-inline: auto;
6797
+ border-top: 1px solid var(--border);
6798
+ padding: var(--svadmin-space-3) var(--svadmin-shell-gutter);
6799
+ color: var(--muted-foreground);
6800
+ font-size: var(--svadmin-text-caption);
6801
+ }
6802
+
6803
+ /* The mobile navigation trigger only exists below the sidebar breakpoint. */
6804
+ .svadmin-app-shell__mobile-toggle {
6805
+ display: none;
6806
+ }
6807
+ .svadmin-app-shell__scrim {
6808
+ display: none;
6809
+ }
6810
+
6811
+ @media (max-width: 63.999rem) {
6812
+ .svadmin-app-shell[data-sidebar="true"] {
6813
+ grid-template-columns: minmax(0, 1fr);
6814
+ grid-template-areas:
6815
+ "topbar"
6816
+ "main"
6817
+ "footer";
6818
+ }
6819
+ .svadmin-app-shell[data-aside="true"] .svadmin-app-shell__body {
6820
+ grid-template-columns: minmax(0, 1fr);
6821
+ }
6822
+ .svadmin-app-shell__mobile-toggle {
6823
+ display: inline-flex;
6824
+ }
6825
+ .svadmin-app-shell__sidebar {
6826
+ position: fixed;
6827
+ z-index: 45;
6828
+ inset-block: var(--svadmin-shell-topbar-h) 0;
6829
+ inset-inline-start: 0;
6830
+ width: var(--svadmin-shell-sidebar-w);
6831
+ max-width: 85vw;
6832
+ box-shadow: var(--shadow-overlay);
6833
+ transform: translateX(-100%);
6834
+ visibility: hidden;
6835
+ transition: transform var(--svadmin-motion-standard) var(--svadmin-motion-easing), visibility var(--svadmin-motion-standard);
6836
+ }
6837
+ [dir="rtl"] .svadmin-app-shell__sidebar {
6838
+ transform: translateX(100%);
6839
+ }
6840
+ .svadmin-app-shell[data-mobile-open="true"] .svadmin-app-shell__sidebar {
6841
+ transform: none;
6842
+ visibility: visible;
6843
+ }
6844
+ .svadmin-app-shell[data-mobile-open="true"] .svadmin-app-shell__scrim {
6845
+ display: block;
6846
+ position: fixed;
6847
+ z-index: 40;
6848
+ inset: var(--svadmin-shell-topbar-h) 0 0;
6849
+ border: 0;
6850
+ background: var(--foreground);
6851
+ opacity: 0.28;
6852
+ cursor: pointer;
6853
+ }
6854
+ }
6855
+
6856
+ /* 窄视口下页面容器自己承担横向留白,外壳不再重复叠加。 */
6857
+ @media (max-width: 40rem) {
6858
+ .svadmin-app-shell {
6859
+ --svadmin-shell-gutter: var(--svadmin-space-4);
6860
+ }
6861
+ }
6862
+ }
6863
+ /* Data panel: the recurring "titled surface with a body" container.
6864
+ *
6865
+ * Hosts previously hand-rolled this block per page, which is how a project ends
6866
+ * up with three panel paddings and two radii. Every length here is a token. */
6867
+ @layer components {
6868
+ .svadmin-data-panel {
6869
+ --svadmin-panel-padding: var(--svadmin-space-5);
6870
+ display: grid;
6871
+ grid-template-columns: minmax(0, 1fr);
6872
+ align-content: start;
6873
+ min-width: 0;
6874
+ border: 1px solid var(--border);
6875
+ border-radius: var(--radius-lg);
6876
+ background: var(--card);
6877
+ color: var(--card-foreground);
6878
+ overflow: hidden;
6879
+ }
6880
+ .svadmin-data-panel[data-padding="compact"] {
6881
+ --svadmin-panel-padding: var(--svadmin-space-4);
6882
+ }
6883
+ .svadmin-data-panel[data-padding="none"] {
6884
+ --svadmin-panel-padding: 0;
6885
+ }
6886
+
6887
+ .svadmin-data-panel__header {
6888
+ display: flex;
6889
+ flex-wrap: wrap;
6890
+ align-items: flex-start;
6891
+ justify-content: space-between;
6892
+ gap: var(--svadmin-space-3);
6893
+ min-width: 0;
6894
+ padding: var(--svadmin-panel-padding);
6895
+ padding-block-end: 0;
6896
+ }
6897
+ .svadmin-data-panel[data-padding="none"] .svadmin-data-panel__header {
6898
+ padding: var(--svadmin-space-4) var(--svadmin-space-5);
6899
+ border-bottom: 1px solid var(--border);
6900
+ }
6901
+ .svadmin-data-panel__heading {
6902
+ display: grid;
6903
+ gap: var(--svadmin-space-1);
6904
+ min-width: 0;
6905
+ flex: 1 1 0;
6906
+ }
6907
+ .svadmin-data-panel__title {
6908
+ margin: 0;
6909
+ color: var(--foreground);
6910
+ font-size: var(--svadmin-text-section);
6911
+ font-weight: 600;
6912
+ line-height: var(--svadmin-leading-tight);
6913
+ overflow-wrap: anywhere;
6914
+ }
6915
+ .svadmin-data-panel__description {
6916
+ max-width: var(--svadmin-measure);
6917
+ margin: 0;
6918
+ color: var(--muted-foreground);
6919
+ font-size: var(--svadmin-text-body);
6920
+ line-height: var(--svadmin-leading-body);
6921
+ overflow-wrap: anywhere;
6922
+ }
6923
+ .svadmin-data-panel__actions {
6924
+ display: flex;
6925
+ flex-wrap: wrap;
6926
+ align-items: center;
6927
+ gap: var(--svadmin-space-2);
6928
+ flex: 0 0 auto;
6929
+ }
6930
+ .svadmin-data-panel__body {
6931
+ display: grid;
6932
+ gap: var(--svadmin-space-4);
6933
+ min-width: 0;
6934
+ padding: var(--svadmin-panel-padding);
6935
+ }
6936
+ .svadmin-data-panel[data-padding="none"] .svadmin-data-panel__body {
6937
+ gap: 0;
6938
+ }
6939
+ .svadmin-data-panel__footer {
6940
+ display: flex;
6941
+ flex-wrap: wrap;
6942
+ align-items: center;
6943
+ justify-content: flex-end;
6944
+ gap: var(--svadmin-space-2);
6945
+ padding: var(--svadmin-space-3) var(--svadmin-space-5);
6946
+ border-top: 1px solid var(--border);
6947
+ color: var(--muted-foreground);
6948
+ font-size: var(--svadmin-text-caption);
6949
+ }
6950
+ }
6678
6951
 
6679
6952
  /* 保留状态对比度和 clean-flat 卡片表现,颜色始终来自宿主 token。 */
6680
6953
  .svadmin-product-status[data-slot="badge"] {
@@ -6753,6 +7026,41 @@
6753
7026
  --svadmin-shadow-control: 0 1px 2px rgb(15 23 42 / 0.04);
6754
7027
  --svadmin-shadow-surface: 0 1px 2px rgb(15 23 42 / 0.035);
6755
7028
  --svadmin-shadow-surface-hover: 0 2px 5px rgb(15 23 42 / 0.06);
7029
+
7030
+ /* Size rhythm. Single source of truth for control, row, spacing and type
7031
+ * sizes; components read these tokens and hosts override the token instead
7032
+ * of re-writing component CSS. Values stay on the 4px grid from DESIGN.md
7033
+ * (xs 4, sm 8, md 16, lg 24, xl 32). */
7034
+ --svadmin-control-h-sm: 1.75rem; /* 28px */
7035
+ --svadmin-control-h: 2.25rem; /* 36px */
7036
+ --svadmin-control-h-lg: 2.5rem; /* 40px */
7037
+ --svadmin-row-h: 3rem; /* 48px */
7038
+ --svadmin-table-head-h: 2.75rem; /* 44px */
7039
+ --svadmin-table-state-min-h: 8rem; /* 128px */
7040
+ --svadmin-space-1: 0.25rem; /* 4px */
7041
+ --svadmin-space-2: 0.5rem; /* 8px */
7042
+ --svadmin-space-3: 0.75rem; /* 12px */
7043
+ --svadmin-space-4: 1rem; /* 16px */
7044
+ --svadmin-space-5: 1.5rem; /* 24px */
7045
+ --svadmin-space-6: 2rem; /* 32px */
7046
+ --svadmin-section-gap: var(--svadmin-space-5);
7047
+ --svadmin-text-caption: 0.75rem; /* 12px */
7048
+ --svadmin-text-label: 0.8125rem; /* 13px */
7049
+ --svadmin-text-body: 0.875rem; /* 14px */
7050
+ --svadmin-text-section: 1rem; /* 16px */
7051
+ --svadmin-text-title: 1.25rem; /* 20px */
7052
+ --svadmin-leading-tight: 1.25;
7053
+ --svadmin-leading-snug: 1.35;
7054
+ --svadmin-leading-body: 1.5;
7055
+ --svadmin-focus-width: 2px;
7056
+ --svadmin-measure: 65ch;
7057
+ --svadmin-shell-sidebar-w: 15rem;
7058
+ --svadmin-shell-sidebar-w-collapsed: 3.5rem;
7059
+ --svadmin-shell-topbar-h: 3.5rem;
7060
+ --svadmin-shell-gutter: var(--svadmin-space-5);
7061
+ --svadmin-shell-max: 74rem;
7062
+ --svadmin-chrome-basis: 16rem;
7063
+ --svadmin-shell-aside-w: 22rem;
6756
7064
  --svadmin-shadow-overlay: 0 20px 52px rgb(15 23 42 / 0.18), 0 6px 16px rgb(15 23 42 / 0.1);
6757
7065
  }
6758
7066
 
@@ -7178,15 +7486,15 @@ h6,
7178
7486
  }
7179
7487
 
7180
7488
  :is([data-slot="button"], .svadmin-button):is([data-size="default"], .svadmin-button-size--default),
7181
- :is([data-svadmin-button], .svadmin-button):is([data-size="default"], .svadmin-button-size--default) { min-height: 2.25rem; padding: 0 0.75rem; }
7489
+ :is([data-svadmin-button], .svadmin-button):is([data-size="default"], .svadmin-button-size--default) { min-height: var(--svadmin-control-h); padding: 0 0.75rem; }
7182
7490
  :is([data-slot="button"], .svadmin-button):is([data-size="xs"], .svadmin-button-size--xs),
7183
7491
  :is([data-svadmin-button], .svadmin-button):is([data-size="xs"], .svadmin-button-size--xs) { min-height: 1.5rem; padding: 0 0.5rem; font-size: 0.75rem; }
7184
7492
  :is([data-slot="button"], .svadmin-button):is([data-size="sm"], .svadmin-button-size--sm),
7185
7493
  :is([data-svadmin-button], .svadmin-button):is([data-size="sm"], .svadmin-button-size--sm) { min-height: 2rem; padding: 0 0.75rem; font-size: 0.8rem; }
7186
7494
  :is([data-slot="button"], .svadmin-button):is([data-size="lg"], .svadmin-button-size--lg),
7187
- :is([data-svadmin-button], .svadmin-button):is([data-size="lg"], .svadmin-button-size--lg) { min-height: 2.5rem; padding: 0 1rem; }
7495
+ :is([data-svadmin-button], .svadmin-button):is([data-size="lg"], .svadmin-button-size--lg) { min-height: var(--svadmin-control-h-lg); padding: 0 1rem; }
7188
7496
  :is([data-slot="button"], .svadmin-button):is([data-size="icon"], .svadmin-button-size--icon),
7189
- :is([data-svadmin-button], .svadmin-button):is([data-size="icon"], .svadmin-button-size--icon) { width: 2.25rem; height: 2.25rem; }
7497
+ :is([data-svadmin-button], .svadmin-button):is([data-size="icon"], .svadmin-button-size--icon) { width: var(--svadmin-control-h); height: var(--svadmin-control-h); }
7190
7498
  :is([data-slot="button"], .svadmin-button):is([data-size="icon-xs"], .svadmin-button-size--icon-xs),
7191
7499
  :is([data-svadmin-button], .svadmin-button):is([data-size="icon-xs"], .svadmin-button-size--icon-xs) { width: 1.5rem; height: 1.5rem; }
7192
7500
  :is([data-slot="button"], .svadmin-button):is([data-size="icon-sm"], .svadmin-button-size--icon-sm),
@@ -7638,7 +7946,7 @@ main {
7638
7946
  .svadmin-input {
7639
7947
  width: 100%;
7640
7948
  min-width: 0;
7641
- height: 2.25rem;
7949
+ height: var(--svadmin-control-h);
7642
7950
  border: 1px solid var(--border);
7643
7951
  border-radius: 0.5rem;
7644
7952
  background: transparent;
@@ -7728,15 +8036,17 @@ main {
7728
8036
  }
7729
8037
 
7730
8038
  .svadmin-table-cell {
7731
- padding: 0.5rem;
8039
+ height: var(--svadmin-row-h);
8040
+ padding: var(--svadmin-space-2);
8041
+ font-size: var(--svadmin-text-label);
7732
8042
  vertical-align: middle;
7733
8043
  white-space: nowrap;
7734
8044
  }
7735
8045
 
7736
8046
  .svadmin-table-cell[data-density="compact"] {
7737
- height: 2rem;
7738
- padding: 0.25rem 0.5rem;
7739
- font-size: 0.75rem;
8047
+ height: calc(var(--svadmin-row-h) - var(--svadmin-space-4));
8048
+ padding: var(--svadmin-space-1) var(--svadmin-space-2);
8049
+ font-size: var(--svadmin-text-caption);
7740
8050
  }
7741
8051
 
7742
8052
  .svadmin-table-cell[data-sticky="right"],
@@ -8062,9 +8372,9 @@ main {
8062
8372
  }
8063
8373
 
8064
8374
  .svadmin-table-caption {
8065
- margin-top: 1rem;
8375
+ margin-top: var(--svadmin-space-4);
8066
8376
  color: var(--muted-foreground);
8067
- font-size: 0.875rem;
8377
+ font-size: var(--svadmin-text-body);
8068
8378
  }
8069
8379
 
8070
8380
  .svadmin-table-footer {
@@ -8221,7 +8531,7 @@ main {
8221
8531
 
8222
8532
  .svadmin-select {
8223
8533
  width: 100%;
8224
- height: 2.25rem;
8534
+ height: var(--svadmin-control-h);
8225
8535
  border: 1px solid var(--border);
8226
8536
  border-radius: 0.5rem;
8227
8537
  padding: 0.375rem 0.75rem;
@@ -8258,7 +8568,7 @@ main {
8258
8568
  .svadmin-tabs-list {
8259
8569
  display: inline-flex;
8260
8570
  width: fit-content;
8261
- height: 2.25rem;
8571
+ height: var(--svadmin-control-h);
8262
8572
  align-items: center;
8263
8573
  justify-content: center;
8264
8574
  gap: 0.25rem;
@@ -8605,7 +8915,7 @@ main {
8605
8915
  .svadmin-navigation-trigger {
8606
8916
  display: inline-flex;
8607
8917
  width: max-content;
8608
- height: 2.25rem;
8918
+ height: var(--svadmin-control-h);
8609
8919
  align-items: center;
8610
8920
  justify-content: center;
8611
8921
  gap: 0.25rem;
@@ -9005,19 +9315,20 @@ main {
9005
9315
  }
9006
9316
 
9007
9317
  .svadmin-table-head {
9008
- height: 2.25rem;
9009
- padding: 0.5rem;
9318
+ height: var(--svadmin-table-head-h);
9319
+ padding: var(--svadmin-space-2);
9010
9320
  color: var(--foreground);
9011
9321
  text-align: left;
9012
9322
  vertical-align: middle;
9323
+ font-size: var(--svadmin-text-caption);
9013
9324
  font-weight: 500;
9014
9325
  white-space: nowrap;
9015
9326
  }
9016
9327
 
9017
9328
  .svadmin-table-head[data-density="compact"] {
9018
- height: 2rem;
9019
- padding: 0.25rem 0.5rem;
9020
- font-size: 0.75rem;
9329
+ height: calc(var(--svadmin-table-head-h) - var(--svadmin-space-3));
9330
+ padding: var(--svadmin-space-1) var(--svadmin-space-2);
9331
+ font-size: var(--svadmin-text-caption);
9021
9332
  }
9022
9333
 
9023
9334
  .svadmin-table-head[data-sticky="right"],
@@ -9067,8 +9378,8 @@ main {
9067
9378
  }
9068
9379
 
9069
9380
  .svadmin-pagination-icon {
9070
- width: 1rem;
9071
- height: 1rem;
9381
+ width: var(--svadmin-space-4);
9382
+ height: var(--svadmin-space-4);
9072
9383
  }
9073
9384
 
9074
9385
  @keyframes svadmin-menu-enter {
@@ -9370,11 +9681,11 @@ details[data-svadmin-filter][open] > :not(summary),
9370
9681
  }
9371
9682
 
9372
9683
  .layout-clean-flat [data-svadmin-table-head] [data-slot="table-head"] {
9373
- height: 2.75rem;
9684
+ height: var(--svadmin-table-head-h);
9374
9685
  border-bottom-color: var(--svadmin-border);
9375
9686
  background: var(--svadmin-surface-muted);
9376
9687
  color: var(--svadmin-text-muted);
9377
- font-size: 0.75rem;
9688
+ font-size: var(--svadmin-text-caption);
9378
9689
  font-weight: 600;
9379
9690
  letter-spacing: 0;
9380
9691
  text-transform: none;
@@ -9385,10 +9696,10 @@ details[data-svadmin-filter][open] > :not(summary),
9385
9696
  }
9386
9697
 
9387
9698
  .layout-clean-flat [data-svadmin-table-row] [data-slot="table-cell"] {
9388
- height: 3rem;
9699
+ height: var(--svadmin-row-h);
9389
9700
  border-bottom-color: var(--svadmin-border);
9390
9701
  color: var(--svadmin-text);
9391
- font-size: 0.8125rem;
9702
+ font-size: var(--svadmin-text-label);
9392
9703
  }
9393
9704
 
9394
9705
  .layout-clean-flat [data-svadmin-table-head] [data-slot="table-head"][data-density="compact"],
@@ -9440,19 +9751,19 @@ details[data-svadmin-filter][open] > :not(summary),
9440
9751
  border-bottom: 1px solid var(--svadmin-border);
9441
9752
  border-radius: 0;
9442
9753
  background: transparent;
9443
- padding: 0.75rem 0;
9754
+ padding: var(--svadmin-space-3) 0;
9444
9755
  box-shadow: none;
9445
9756
  }
9446
9757
 
9447
9758
  .layout-clean-flat [data-svadmin-table-toolbar] [data-slot="input"] {
9448
- height: 2.625rem;
9759
+ height: var(--svadmin-control-h-lg);
9449
9760
  background: var(--svadmin-surface-muted);
9450
9761
  }
9451
9762
 
9452
9763
  .layout-clean-flat [data-svadmin-list-actions] :is([data-slot="button"], .svadmin-button),
9453
9764
  .layout-clean-flat [data-svadmin-table-toolbar] :is([data-slot="button"], .svadmin-button),
9454
9765
  .layout-clean-flat [data-svadmin-form-actions] :is([data-slot="button"], .svadmin-button) {
9455
- height: 2.5rem;
9766
+ height: var(--svadmin-control-h-lg);
9456
9767
  flex-shrink: 0;
9457
9768
  }
9458
9769