@svadmin/ui 0.68.0 → 0.69.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 (315) hide show
  1. package/README.md +52 -0
  2. package/dist/app.css +7627 -853
  3. package/dist/app.theme.css +7676 -850
  4. package/dist/components/AboutSettings.svelte +8 -8
  5. package/dist/components/ActivityFeed.svelte +25 -40
  6. package/dist/components/AdminApp.svelte +14 -14
  7. package/dist/components/AnomalyBadge.svelte +6 -5
  8. package/dist/components/ApiSettings.svelte +8 -8
  9. package/dist/components/AppearanceSettings.svelte +13 -13
  10. package/dist/components/ApprovalActionCard.svelte +35 -35
  11. package/dist/components/AuditLogDrawer.svelte +17 -17
  12. package/dist/components/AuditLogViewer.svelte +42 -42
  13. package/dist/components/AuthPageShell.svelte +11 -11
  14. package/dist/components/AutoForm.svelte +28 -28
  15. package/dist/components/AutoSaveIndicator.svelte +8 -8
  16. package/dist/components/AutoTable.svelte +141 -141
  17. package/dist/components/BatchActionBar.svelte +15 -15
  18. package/dist/components/Breadcrumbs.svelte +4 -4
  19. package/dist/components/CancelTaskButton.svelte +2 -2
  20. package/dist/components/CanvasAnnotation.svelte +27 -27
  21. package/dist/components/Cascader.svelte +20 -20
  22. package/dist/components/CatchAllNavigate.svelte +2 -2
  23. package/dist/components/ColumnHeaderFilter.svelte +21 -21
  24. package/dist/components/ColumnSettings.svelte +20 -20
  25. package/dist/components/ComboboxField.svelte +17 -17
  26. package/dist/components/CommandPalette.svelte +23 -23
  27. package/dist/components/ConfigErrorScreen.svelte +27 -27
  28. package/dist/components/ConfirmDialog.svelte +1 -1
  29. package/dist/components/CreateInferencer.svelte +1 -1
  30. package/dist/components/CreatePage.svelte +1 -1
  31. package/dist/components/DecisionTable.svelte +39 -39
  32. package/dist/components/DetailDrawer.svelte +9 -9
  33. package/dist/components/DevTools.svelte +96 -96
  34. package/dist/components/DraggableGrid.svelte +6 -6
  35. package/dist/components/DraggableHeader.svelte +1 -1
  36. package/dist/components/DraggableRowTable.svelte +13 -13
  37. package/dist/components/DrawerForm.svelte +10 -10
  38. package/dist/components/DynamicFormList.svelte +19 -19
  39. package/dist/components/EditInferencer.svelte +3 -3
  40. package/dist/components/EditInferencer.svelte.d.ts +1 -1
  41. package/dist/components/EditPage.svelte +1 -1
  42. package/dist/components/EditableTable.svelte +30 -30
  43. package/dist/components/EmptyState.svelte +6 -6
  44. package/dist/components/ErrorBoundary.svelte +8 -8
  45. package/dist/components/ErrorComponent.svelte +5 -5
  46. package/dist/components/FieldRenderer.svelte +30 -30
  47. package/dist/components/FilterBuilder.svelte +31 -31
  48. package/dist/components/FilterDropdown.svelte +26 -26
  49. package/dist/components/ForgotPasswordPage.svelte +14 -14
  50. package/dist/components/GanttChart.svelte +30 -30
  51. package/dist/components/Header.svelte +13 -13
  52. package/dist/components/ImageCropper.svelte +21 -21
  53. package/dist/components/ImportWizard.svelte +49 -49
  54. package/dist/components/InferencerPanel.svelte +35 -35
  55. package/dist/components/InfiniteList.svelte +8 -8
  56. package/dist/components/InlineEdit.svelte +5 -5
  57. package/dist/components/IntegrationsSettings.svelte +5 -5
  58. package/dist/components/JsonSchemaForm.svelte +18 -18
  59. package/dist/components/KanbanBoard.svelte +30 -30
  60. package/dist/components/KeyboardShortcuts.svelte +8 -8
  61. package/dist/components/Layout.svelte +22 -22
  62. package/dist/components/LazyPage.svelte +4 -4
  63. package/dist/components/ListInferencer.svelte +2 -2
  64. package/dist/components/ListPage.svelte +1 -1
  65. package/dist/components/LiveIndicator.svelte +11 -11
  66. package/dist/components/LoginPage.svelte +27 -27
  67. package/dist/components/MasterDetailView.svelte +24 -24
  68. package/dist/components/MediaLibraryModal.svelte +37 -37
  69. package/dist/components/MentionsInput.svelte +11 -11
  70. package/dist/components/MetricStrip.svelte +18 -58
  71. package/dist/components/ModalForm.svelte +8 -8
  72. package/dist/components/MultiTabKeepAlive.svelte +14 -14
  73. package/dist/components/NavigateToResource.svelte +3 -3
  74. package/dist/components/NotificationsSettings.svelte +4 -4
  75. package/dist/components/OfflineSyncBanner.svelte +28 -28
  76. package/dist/components/PageHeader.svelte +12 -13
  77. package/dist/components/PageSkeleton.svelte +26 -26
  78. package/dist/components/PasswordInput.svelte +11 -11
  79. package/dist/components/PdfDocumentViewer.svelte +45 -45
  80. package/dist/components/PermissionMatrix.svelte +48 -48
  81. package/dist/components/PivotTable.svelte +21 -21
  82. package/dist/components/PresenceAvatarGroup.svelte +11 -11
  83. package/dist/components/PrintableBill.svelte +43 -43
  84. package/dist/components/ProfilePage.svelte +34 -34
  85. package/dist/components/RecordDetailDrawer.svelte +15 -15
  86. package/dist/components/RegisterPage.svelte +9 -9
  87. package/dist/components/ResourceInferencer.svelte +3 -3
  88. package/dist/components/ResourceOperationsPage.svelte +44 -44
  89. package/dist/components/RetryTaskButton.svelte +2 -2
  90. package/dist/components/RolesSettings.svelte +4 -4
  91. package/dist/components/RowActions.svelte +10 -10
  92. package/dist/components/SecuritySettings.svelte +8 -8
  93. package/dist/components/SensitiveDataMask.svelte +8 -8
  94. package/dist/components/SettingsPage.svelte +17 -17
  95. package/dist/components/ShowInferencer.svelte +3 -3
  96. package/dist/components/ShowInferencer.svelte.d.ts +1 -1
  97. package/dist/components/ShowPage.svelte +24 -24
  98. package/dist/components/Sidebar.svelte +63 -63
  99. package/dist/components/SidebarItem.svelte +35 -35
  100. package/dist/components/SignaturePad.svelte +16 -16
  101. package/dist/components/SplitPaneLayout.svelte +10 -10
  102. package/dist/components/SpreadsheetView.svelte +35 -35
  103. package/dist/components/StatsCard.svelte +12 -25
  104. package/dist/components/StepForm.svelte +23 -23
  105. package/dist/components/StepsForm.svelte +17 -17
  106. package/dist/components/SvadminLogo.svelte +1 -1
  107. package/dist/components/SystemPageShell.svelte +6 -6
  108. package/dist/components/TableSummary.svelte +8 -8
  109. package/dist/components/TaskDetails.svelte +29 -29
  110. package/dist/components/TaskList.svelte +17 -17
  111. package/dist/components/TaskProgressBar.svelte +4 -4
  112. package/dist/components/TaskQueueDrawer.svelte +44 -44
  113. package/dist/components/TaskStatusBadge.svelte +5 -5
  114. package/dist/components/TenantSwitcher.svelte +17 -17
  115. package/dist/components/ThemedTitle.svelte +4 -4
  116. package/dist/components/Toast.svelte +2 -2
  117. package/dist/components/Transfer.svelte +40 -40
  118. package/dist/components/TreeSelect.svelte +32 -32
  119. package/dist/components/TreeTable.svelte +28 -28
  120. package/dist/components/TwoFactorAuthPage.svelte +15 -15
  121. package/dist/components/UndoableNotification.svelte +10 -10
  122. package/dist/components/UpdatePasswordPage.svelte +6 -6
  123. package/dist/components/VersionDiffViewer.svelte +38 -38
  124. package/dist/components/VirtualTable.svelte +9 -9
  125. package/dist/components/Watermark.svelte +2 -2
  126. package/dist/components/account/CompanyProfilePage.svelte +4 -4
  127. package/dist/components/account/GetStartedPage.svelte +19 -19
  128. package/dist/components/account/ImportMembersPage.svelte +42 -42
  129. package/dist/components/account/MembersStarterPage.svelte +18 -18
  130. package/dist/components/account/SecurityLogPage.svelte +1 -1
  131. package/dist/components/account/SettingsEnterprisePage.svelte +7 -7
  132. package/dist/components/account/SettingsPlainPage.svelte +3 -3
  133. package/dist/components/account/SettingsSidebarPage.svelte +5 -5
  134. package/dist/components/account/TeamMembersPage.svelte +2 -2
  135. package/dist/components/account/UserProfilePage.svelte +3 -3
  136. package/dist/components/buttons/CloneButton.svelte +2 -2
  137. package/dist/components/buttons/CreateButton.svelte +2 -2
  138. package/dist/components/buttons/DeleteButton.svelte +4 -4
  139. package/dist/components/buttons/EditButton.svelte +2 -2
  140. package/dist/components/buttons/ExportButton.svelte +2 -2
  141. package/dist/components/buttons/ImportButton.svelte +3 -3
  142. package/dist/components/buttons/ListButton.svelte +2 -2
  143. package/dist/components/buttons/RefreshButton.svelte +2 -2
  144. package/dist/components/buttons/SaveButton.svelte +3 -3
  145. package/dist/components/buttons/ShowButton.svelte +2 -2
  146. package/dist/components/charts/BarChart.svelte +3 -3
  147. package/dist/components/charts/LineChart.svelte +3 -3
  148. package/dist/components/charts/PieChart.svelte +7 -7
  149. package/dist/components/content/ApiKeyList.svelte +12 -12
  150. package/dist/components/content/AuditTimeline.svelte +18 -18
  151. package/dist/components/content/ContentPageHeader.svelte +9 -9
  152. package/dist/components/content/ContentPageShell.svelte +2 -2
  153. package/dist/components/content/DataState.svelte +8 -8
  154. package/dist/components/content/DescriptionList.svelte +25 -25
  155. package/dist/components/content/FeedbackNotice.svelte +11 -11
  156. package/dist/components/content/FileList.svelte +2 -2
  157. package/dist/components/content/FilterToolbar.svelte +15 -15
  158. package/dist/components/content/ImportDropzone.svelte +6 -6
  159. package/dist/components/content/IntegrationCard.svelte +4 -4
  160. package/dist/components/content/MediaThumbnail.svelte +16 -16
  161. package/dist/components/content/MemberList.svelte +2 -2
  162. package/dist/components/content/MetricBlock.svelte +7 -7
  163. package/dist/components/content/NetworkTable.svelte +1 -1
  164. package/dist/components/content/NetworkUserCard.svelte +12 -12
  165. package/dist/components/content/OtpInput.svelte +2 -2
  166. package/dist/components/content/PageToolbar.svelte +3 -3
  167. package/dist/components/content/ProjectCard.svelte +11 -11
  168. package/dist/components/content/SectionHeader.svelte +5 -5
  169. package/dist/components/content/SecurityEventTable.svelte +2 -2
  170. package/dist/components/content/SettingsFieldRow.svelte +5 -5
  171. package/dist/components/content/SettingsGroup.svelte +7 -7
  172. package/dist/components/content/StatusBadge.svelte +6 -6
  173. package/dist/components/content/StatusTabs.svelte +28 -28
  174. package/dist/components/content/SystemErrorState.svelte +2 -2
  175. package/dist/components/content/TeamCard.svelte +6 -6
  176. package/dist/components/content/TwoFactorStepper.svelte +3 -3
  177. package/dist/components/content/WorkspaceActionBar.svelte +12 -12
  178. package/dist/components/content/WorkspaceInspector.svelte +11 -11
  179. package/dist/components/content/WorkspaceLayout.svelte +5 -5
  180. package/dist/components/content/WorkspaceSplitPane.svelte +4 -4
  181. package/dist/components/content/WorkspaceStageStepper.svelte +16 -16
  182. package/dist/components/content/WorkspaceTabBar.svelte +16 -16
  183. package/dist/components/fields/ArrayField.svelte +12 -12
  184. package/dist/components/fields/AvatarField.svelte +15 -15
  185. package/dist/components/fields/BooleanField.svelte +14 -14
  186. package/dist/components/fields/CodeField.svelte +10 -10
  187. package/dist/components/fields/CopyField.svelte +6 -6
  188. package/dist/components/fields/CurrencyField.svelte +6 -6
  189. package/dist/components/fields/DateField.svelte +1 -1
  190. package/dist/components/fields/DateRangeField.svelte +2 -2
  191. package/dist/components/fields/EmailField.svelte +2 -2
  192. package/dist/components/fields/FileField.svelte +3 -3
  193. package/dist/components/fields/ImageField.svelte +1 -1
  194. package/dist/components/fields/JsonField.svelte +11 -11
  195. package/dist/components/fields/MarkdownField.svelte +2 -2
  196. package/dist/components/fields/MultiSelectField.svelte +3 -3
  197. package/dist/components/fields/NumberField.svelte +1 -1
  198. package/dist/components/fields/PercentField.svelte +9 -9
  199. package/dist/components/fields/PhoneField.svelte +8 -8
  200. package/dist/components/fields/RatingField.svelte +10 -10
  201. package/dist/components/fields/RelationField.svelte +3 -3
  202. package/dist/components/fields/RichTextField.svelte +4 -4
  203. package/dist/components/fields/TagField.svelte +11 -11
  204. package/dist/components/fields/TextField.svelte +2 -2
  205. package/dist/components/fields/UrlField.svelte +3 -3
  206. package/dist/components/network/TeamCrewTablePage.svelte +2 -2
  207. package/dist/components/network/UserCardsNFTPage.svelte +1 -1
  208. package/dist/components/profile/ActivityTimeline.svelte +8 -8
  209. package/dist/components/profile/ProfileCard.svelte +47 -47
  210. package/dist/components/profile/ProfileVariantSections.svelte +158 -158
  211. package/dist/components/profile/ProjectsGrid.svelte +6 -6
  212. package/dist/components/profile/PublicProfilePage.svelte +6 -6
  213. package/dist/components/profile/TeamsShowcase.svelte +3 -3
  214. package/dist/components/ui/alert/alert-description.svelte +1 -1
  215. package/dist/components/ui/alert/alert-title.svelte +1 -1
  216. package/dist/components/ui/alert/alert-variants.d.ts +7 -0
  217. package/dist/components/ui/alert/alert-variants.js +2 -0
  218. package/dist/components/ui/alert/alert.svelte +4 -15
  219. package/dist/components/ui/alert/alert.svelte.d.ts +7 -24
  220. package/dist/components/ui/alert-dialog/alert-dialog-content.svelte +2 -2
  221. package/dist/components/ui/alert-dialog/alert-dialog-description.svelte +1 -1
  222. package/dist/components/ui/alert-dialog/alert-dialog-footer.svelte +1 -1
  223. package/dist/components/ui/alert-dialog/alert-dialog-header.svelte +1 -1
  224. package/dist/components/ui/alert-dialog/alert-dialog-overlay.svelte +1 -1
  225. package/dist/components/ui/alert-dialog/alert-dialog-title.svelte +1 -1
  226. package/dist/components/ui/avatar/avatar-variants.d.ts +7 -0
  227. package/dist/components/ui/avatar/avatar-variants.js +2 -0
  228. package/dist/components/ui/avatar/avatar.svelte +11 -20
  229. package/dist/components/ui/avatar/avatar.svelte.d.ts +12 -28
  230. package/dist/components/ui/badge/badge-variants.d.ts +7 -0
  231. package/dist/components/ui/badge/badge-variants.js +2 -0
  232. package/dist/components/ui/badge/badge.svelte +4 -24
  233. package/dist/components/ui/badge/badge.svelte.d.ts +7 -45
  234. package/dist/components/ui/breadcrumb/breadcrumb-ellipsis.svelte +3 -3
  235. package/dist/components/ui/breadcrumb/breadcrumb-item.svelte +1 -1
  236. package/dist/components/ui/breadcrumb/breadcrumb-link.svelte +1 -1
  237. package/dist/components/ui/breadcrumb/breadcrumb-list.svelte +1 -1
  238. package/dist/components/ui/breadcrumb/breadcrumb-page.svelte +1 -1
  239. package/dist/components/ui/breadcrumb/breadcrumb-separator.svelte +2 -2
  240. package/dist/components/ui/button/button-variants.d.ts +9 -0
  241. package/dist/components/ui/button/button-variants.js +3 -0
  242. package/dist/components/ui/button/button.svelte +12 -31
  243. package/dist/components/ui/button/button.svelte.d.ts +9 -61
  244. package/dist/components/ui/card/card-action.svelte +1 -4
  245. package/dist/components/ui/card/card-content.svelte +1 -1
  246. package/dist/components/ui/card/card-description.svelte +1 -1
  247. package/dist/components/ui/card/card-footer.svelte +1 -1
  248. package/dist/components/ui/card/card-header.svelte +1 -4
  249. package/dist/components/ui/card/card-title.svelte +1 -1
  250. package/dist/components/ui/card/card.svelte +1 -1
  251. package/dist/components/ui/checkbox/checkbox.svelte +2 -5
  252. package/dist/components/ui/command/command-dialog.svelte +3 -3
  253. package/dist/components/ui/command/command-empty.svelte +1 -1
  254. package/dist/components/ui/command/command-group.svelte +2 -2
  255. package/dist/components/ui/command/command-input.svelte +1 -4
  256. package/dist/components/ui/command/command-item.svelte +1 -4
  257. package/dist/components/ui/command/command-list.svelte +1 -1
  258. package/dist/components/ui/command/command-separator.svelte +1 -1
  259. package/dist/components/ui/command/command.svelte +1 -4
  260. package/dist/components/ui/dialog/dialog-content.svelte +3 -3
  261. package/dist/components/ui/dialog/dialog-description.svelte +1 -1
  262. package/dist/components/ui/dialog/dialog-footer.svelte +1 -1
  263. package/dist/components/ui/dialog/dialog-header.svelte +1 -1
  264. package/dist/components/ui/dialog/dialog-overlay.svelte +1 -1
  265. package/dist/components/ui/dialog/dialog-title.svelte +1 -1
  266. package/dist/components/ui/dropdown-menu/dropdown-menu-checkbox-item.svelte +2 -5
  267. package/dist/components/ui/dropdown-menu/dropdown-menu-content.svelte +1 -6
  268. package/dist/components/ui/dropdown-menu/dropdown-menu-item.svelte +3 -9
  269. package/dist/components/ui/dropdown-menu/dropdown-menu-separator.svelte +1 -1
  270. package/dist/components/ui/dropdown-menu/dropdown-menu.svelte +1 -1
  271. package/dist/components/ui/input/input.svelte +3 -2
  272. package/dist/components/ui/label/label.svelte +1 -4
  273. package/dist/components/ui/navigation-menu/navigation-menu-content.svelte +1 -5
  274. package/dist/components/ui/navigation-menu/navigation-menu-indicator.svelte +2 -5
  275. package/dist/components/ui/navigation-menu/navigation-menu-item.svelte +1 -1
  276. package/dist/components/ui/navigation-menu/navigation-menu-link.svelte +1 -4
  277. package/dist/components/ui/navigation-menu/navigation-menu-list.svelte +1 -1
  278. package/dist/components/ui/navigation-menu/navigation-menu-trigger.svelte +2 -5
  279. package/dist/components/ui/navigation-menu/navigation-menu-viewport.svelte +2 -5
  280. package/dist/components/ui/navigation-menu/navigation-menu.svelte +1 -1
  281. package/dist/components/ui/pagination/pagination-content.svelte +1 -1
  282. package/dist/components/ui/pagination/pagination-ellipsis.svelte +3 -3
  283. package/dist/components/ui/pagination/pagination-link.svelte +3 -0
  284. package/dist/components/ui/pagination/pagination-next.svelte +5 -2
  285. package/dist/components/ui/pagination/pagination-previous.svelte +5 -2
  286. package/dist/components/ui/pagination/pagination.svelte +1 -1
  287. package/dist/components/ui/popover/popover-content.svelte +1 -4
  288. package/dist/components/ui/progress/progress.svelte +2 -2
  289. package/dist/components/ui/scroll-area/scroll-area.svelte +3 -4
  290. package/dist/components/ui/select/select.svelte +1 -2
  291. package/dist/components/ui/separator/separator.svelte +1 -6
  292. package/dist/components/ui/sheet/sheet-content.svelte +1 -4
  293. package/dist/components/ui/sheet/sheet-description.svelte +1 -1
  294. package/dist/components/ui/sheet/sheet-footer.svelte +1 -1
  295. package/dist/components/ui/sheet/sheet-header.svelte +1 -1
  296. package/dist/components/ui/sheet/sheet-title.svelte +1 -1
  297. package/dist/components/ui/sheet/sheet.svelte +5 -10
  298. package/dist/components/ui/skeleton/skeleton.svelte +1 -1
  299. package/dist/components/ui/switch/switch.svelte +2 -9
  300. package/dist/components/ui/table/table-caption.svelte +1 -1
  301. package/dist/components/ui/table/table-cell.svelte +8 -11
  302. package/dist/components/ui/table/table-footer.svelte +1 -1
  303. package/dist/components/ui/table/table-head.svelte +1 -11
  304. package/dist/components/ui/table/table-header.svelte +1 -1
  305. package/dist/components/ui/table/table-row.svelte +2 -2
  306. package/dist/components/ui/table/table-row.svelte.d.ts +1 -1
  307. package/dist/components/ui/table/table.svelte +2 -2
  308. package/dist/components/ui/tabs/tabs-content.svelte +1 -1
  309. package/dist/components/ui/tabs/tabs-list.svelte +1 -4
  310. package/dist/components/ui/tabs/tabs-trigger.svelte +1 -7
  311. package/dist/components/ui/tabs/tabs.svelte +1 -1
  312. package/dist/components/ui/textarea/textarea.svelte +1 -4
  313. package/dist/components/ui/tooltip/tooltip-content.svelte +1 -1
  314. package/dist/page-chrome.css +228 -0
  315. package/package.json +14 -9
@@ -81,85 +81,85 @@
81
81
  const showCreate = $derived(resource.canCreate !== false && createPermission.allowed);
82
82
  </script>
83
83
 
84
- <div class="space-y-6" data-svadmin-resource-operations={resourceName} data-svadmin-workspace-style={workspaceStyle} data-svadmin-layout-identity={workspaceStyle}>
85
- <header class="flex flex-col gap-4 border-b border-border pb-5 sm:flex-row sm:items-start sm:justify-between" data-svadmin-ops-hero>
86
- <div class="flex min-w-0 items-start gap-3">
87
- {#if Icon}<span class="flex size-9 shrink-0 items-center justify-center rounded-md border border-border bg-card text-primary"><Icon class="size-4" /></span>{/if}
88
- <div class="min-w-0"><Badge variant="outline">{eyebrow}</Badge><h1 class="mt-2 text-xl font-semibold text-foreground">{title}</h1><p class="mt-1 max-w-3xl text-sm leading-6 text-muted-foreground">{description}</p></div>
84
+ <div class="svadmin-u-b3542e058833" data-svadmin-resource-operations={resourceName} data-svadmin-workspace-style={workspaceStyle} data-svadmin-layout-identity={workspaceStyle}>
85
+ <header class="svadmin-u-60fbb7713999 svadmin-u-8dddea0773ed svadmin-u-0c3bc98565dd svadmin-u-65fdbade2025 svadmin-u-18049387f0af svadmin-u-09c1ba5f3e1a svadmin-u-020ba687fa12 svadmin-u-64cac80d2e9a svadmin-u-3b9871a0bf93" data-svadmin-ops-hero>
86
+ <div class="svadmin-u-60fbb7713999 svadmin-u-7e0b7cdf1a94 svadmin-u-60541e1e26f8 svadmin-u-1004c0c3954c">
87
+ {#if Icon}<span class="svadmin-u-60fbb7713999 svadmin-u-665f07fe73cc svadmin-u-012fbd121f37 svadmin-u-3960ffc248d9 svadmin-u-86843cf1e227 svadmin-u-421ac2be5045 svadmin-u-ca6bcd4b6f3f svadmin-u-18049387f0af svadmin-u-cd0ad9a56558 svadmin-u-20aaf08a7ed1"><Icon class="svadmin-u-f7b5fa971871" /></span>{/if}
88
+ <div class="svadmin-u-7e0b7cdf1a94"><Badge variant="outline">{eyebrow}</Badge><h1 class="svadmin-u-50d0d216a2f8 svadmin-u-d5c9b0001e7e svadmin-u-e83a7042bc91 svadmin-u-d4108abe6359">{title}</h1><p class="svadmin-u-b6b02c0ebef6 svadmin-u-fa3f7111e53b svadmin-u-fc7473ca09eb svadmin-u-18550d5945ae svadmin-u-bfa603190748">{description}</p></div>
89
89
  </div>
90
90
  {#if showCreate}
91
- <Button class="shrink-0" size="sm" onclick={() => navigation.create(resourceName)}>{actionLabel}</Button>
91
+ <Button class="svadmin-u-012fbd121f37" size="sm" onclick={() => navigation.create(resourceName)}>{actionLabel}</Button>
92
92
  {/if}
93
93
  </header>
94
94
 
95
95
  {#if workspaceStyle === 'inventory'}
96
- <section class="grid gap-6 xl:grid-cols-[minmax(0,1fr)_18rem]" data-svadmin-inventory-layout>
97
- <div class="space-y-5"><div class="grid gap-px overflow-hidden rounded-lg border border-border bg-border sm:grid-cols-3">{#each metrics as metric (metric.label)}<div class="bg-card p-4"><p class="text-sm text-muted-foreground">{metric.label}</p><p class="mt-2 text-2xl font-semibold text-foreground">{metric.value}</p>{#if metric.hint}<p class="mt-1 text-xs text-muted-foreground">{metric.hint}</p>{/if}</div>{/each}</div><AutoTable {resourceName} /></div>
98
- <aside class="space-y-5"><section><h2 class="text-sm font-semibold text-foreground">{tableLabel}</h2><p class="mt-1 text-sm text-muted-foreground">{tableDescription}</p><div class="mt-3 divide-y divide-border border-y border-border">{#each lanes as lane (lane.label)}<div class="flex items-center justify-between gap-3 py-3"><div><p class="text-sm font-medium text-foreground">{lane.label}</p>{#if lane.hint}<p class="text-xs text-muted-foreground">{lane.hint}</p>{/if}</div><Badge variant="outline">{lane.value}</Badge></div>{:else}<p class="py-3 text-sm text-muted-foreground">{emptyLanesText}</p>{/each}</div></section><section><h2 class="text-sm font-semibold text-foreground">{highlightsLabel}</h2><div class="mt-3 space-y-2">{#each highlights as item (item.title)}<article class="rounded-lg border border-border bg-card p-3"><div class="flex items-start justify-between gap-3"><p class="text-sm font-medium text-foreground">{item.title}</p>{#if item.badge}<Badge variant="secondary">{item.badge}</Badge>{/if}</div>{#if item.description}<p class="mt-1 text-xs leading-5 text-muted-foreground">{item.description}</p>{/if}{#if item.meta}<p class="mt-2 text-xs font-medium text-primary">{item.meta}</p>{/if}</article>{/each}</div></section></aside>
96
+ <section class="svadmin-u-f3c543ad5fe9 svadmin-u-0d304f904cb0 svadmin-u-64f847a259bc" data-svadmin-inventory-layout>
97
+ <div class="svadmin-u-b43b4c086d9a"><div class="svadmin-u-f3c543ad5fe9 svadmin-u-ceb7ac66b25b svadmin-u-2cd02d11d1af svadmin-u-5f22e64f2282 svadmin-u-ca6bcd4b6f3f svadmin-u-18049387f0af svadmin-u-a59afa8d9b9d svadmin-u-ab1b20c2292a">{#each metrics as metric (metric.label)}<div class="svadmin-u-cd0ad9a56558 svadmin-u-8e63407b5ceb"><p class="svadmin-u-fc7473ca09eb svadmin-u-bfa603190748">{metric.label}</p><p class="svadmin-u-50d0d216a2f8 svadmin-u-3febee094e85 svadmin-u-e83a7042bc91 svadmin-u-d4108abe6359">{metric.value}</p>{#if metric.hint}<p class="svadmin-u-b6b02c0ebef6 svadmin-u-359090c2d529 svadmin-u-bfa603190748">{metric.hint}</p>{/if}</div>{/each}</div><AutoTable {resourceName} /></div>
98
+ <aside class="svadmin-u-b43b4c086d9a"><section><h2 class="svadmin-u-fc7473ca09eb svadmin-u-e83a7042bc91 svadmin-u-d4108abe6359">{tableLabel}</h2><p class="svadmin-u-b6b02c0ebef6 svadmin-u-fc7473ca09eb svadmin-u-bfa603190748">{tableDescription}</p><div class="svadmin-u-eccd13ef4f2f svadmin-u-fa6acbf81d74 svadmin-u-e783642739e3 svadmin-u-8b8196092091 svadmin-u-18049387f0af">{#each lanes as lane (lane.label)}<div class="svadmin-u-60fbb7713999 svadmin-u-3960ffc248d9 svadmin-u-8ef2268efbbc svadmin-u-1004c0c3954c svadmin-u-1b2d54a3fd12"><div><p class="svadmin-u-fc7473ca09eb svadmin-u-2689f3958069 svadmin-u-d4108abe6359">{lane.label}</p>{#if lane.hint}<p class="svadmin-u-359090c2d529 svadmin-u-bfa603190748">{lane.hint}</p>{/if}</div><Badge variant="outline">{lane.value}</Badge></div>{:else}<p class="svadmin-u-1b2d54a3fd12 svadmin-u-fc7473ca09eb svadmin-u-bfa603190748">{emptyLanesText}</p>{/each}</div></section><section><h2 class="svadmin-u-fc7473ca09eb svadmin-u-e83a7042bc91 svadmin-u-d4108abe6359">{highlightsLabel}</h2><div class="svadmin-u-eccd13ef4f2f svadmin-u-6f7e013d6499">{#each highlights as item (item.title)}<article class="svadmin-u-5f22e64f2282 svadmin-u-ca6bcd4b6f3f svadmin-u-18049387f0af svadmin-u-cd0ad9a56558 svadmin-u-eb6e8b881acd"><div class="svadmin-u-60fbb7713999 svadmin-u-60541e1e26f8 svadmin-u-8ef2268efbbc svadmin-u-1004c0c3954c"><p class="svadmin-u-fc7473ca09eb svadmin-u-2689f3958069 svadmin-u-d4108abe6359">{item.title}</p>{#if item.badge}<Badge variant="secondary">{item.badge}</Badge>{/if}</div>{#if item.description}<p class="svadmin-u-b6b02c0ebef6 svadmin-u-359090c2d529 svadmin-u-7054e2767710 svadmin-u-bfa603190748">{item.description}</p>{/if}{#if item.meta}<p class="svadmin-u-50d0d216a2f8 svadmin-u-359090c2d529 svadmin-u-2689f3958069 svadmin-u-20aaf08a7ed1">{item.meta}</p>{/if}</article>{/each}</div></section></aside>
99
99
  </section>
100
100
  {:else if workspaceStyle === 'operations'}
101
- <section class="space-y-5" data-svadmin-operations-layout>
102
- <div class="grid gap-4 lg:grid-cols-[1fr_1.4fr]"><div class="rounded-lg border border-border bg-card p-4"><h2 class="text-sm font-semibold text-foreground">{tableLabel}</h2><div class="mt-4 space-y-4">{#each lanes as lane (lane.label)}<div><div class="flex items-center justify-between gap-3 text-sm"><span class="font-medium">{lane.label}</span><span class="text-muted-foreground">{lane.value}</span></div><div class="mt-2 h-1.5 overflow-hidden rounded-full bg-muted"><div class="h-full rounded-full bg-primary" style:width={`${Math.min(100, Math.max(12, Number(lane.value) * 8))}%`}></div></div>{#if lane.hint}<p class="mt-1 text-xs text-muted-foreground">{lane.hint}</p>{/if}</div>{/each}</div></div><div class="rounded-lg border border-border bg-card"><div class="border-b border-border px-4 py-3"><h2 class="text-sm font-semibold text-foreground">{highlightsLabel}</h2></div><div class="divide-y divide-border">{#each highlights as item (item.title)}<div class="grid gap-2 px-4 py-3 sm:grid-cols-[1fr_auto]"><div><p class="text-sm font-medium text-foreground">{item.title}</p>{#if item.description}<p class="mt-1 text-xs text-muted-foreground">{item.description}</p>{/if}</div><div class="flex items-center gap-2">{#if item.badge}<Badge variant="outline">{item.badge}</Badge>{/if}{#if item.meta}<span class="text-xs text-muted-foreground">{item.meta}</span>{/if}</div></div>{/each}</div></div></div>
103
- <div class="grid gap-px overflow-hidden rounded-lg border border-border bg-border sm:grid-cols-3">{#each metrics as metric (metric.label)}<div class="flex items-center justify-between gap-3 bg-card p-4"><div><p class="text-sm text-muted-foreground">{metric.label}</p>{#if metric.hint}<p class="mt-1 text-xs text-muted-foreground">{metric.hint}</p>{/if}</div><p class="text-xl font-semibold text-foreground">{metric.value}</p></div>{/each}</div>
101
+ <section class="svadmin-u-b43b4c086d9a" data-svadmin-operations-layout>
102
+ <div class="svadmin-u-f3c543ad5fe9 svadmin-u-0c3bc98565dd svadmin-u-478497d5efa5"><div class="svadmin-u-5f22e64f2282 svadmin-u-ca6bcd4b6f3f svadmin-u-18049387f0af svadmin-u-cd0ad9a56558 svadmin-u-8e63407b5ceb"><h2 class="svadmin-u-fc7473ca09eb svadmin-u-e83a7042bc91 svadmin-u-d4108abe6359">{tableLabel}</h2><div class="svadmin-u-0ab8667228fd svadmin-u-3e7ce58d64fa">{#each lanes as lane (lane.label)}<div><div class="svadmin-u-60fbb7713999 svadmin-u-3960ffc248d9 svadmin-u-8ef2268efbbc svadmin-u-1004c0c3954c svadmin-u-fc7473ca09eb"><span class="svadmin-u-2689f3958069">{lane.label}</span><span class="svadmin-u-bfa603190748">{lane.value}</span></div><div class="svadmin-u-50d0d216a2f8 svadmin-u-095acb275581 svadmin-u-2cd02d11d1af svadmin-u-ac204c108886 svadmin-u-2ef11f1cb219"><div class="svadmin-u-668b21aa5409 svadmin-u-ac204c108886 svadmin-u-75b1bec3ea0e" style:width={`${Math.min(100, Math.max(12, Number(lane.value) * 8))}%`}></div></div>{#if lane.hint}<p class="svadmin-u-b6b02c0ebef6 svadmin-u-359090c2d529 svadmin-u-bfa603190748">{lane.hint}</p>{/if}</div>{/each}</div></div><div class="svadmin-u-5f22e64f2282 svadmin-u-ca6bcd4b6f3f svadmin-u-18049387f0af svadmin-u-cd0ad9a56558"><div class="svadmin-u-65fdbade2025 svadmin-u-18049387f0af svadmin-u-f0faeb26d656 svadmin-u-1b2d54a3fd12"><h2 class="svadmin-u-fc7473ca09eb svadmin-u-e83a7042bc91 svadmin-u-d4108abe6359">{highlightsLabel}</h2></div><div class="svadmin-u-fa6acbf81d74 svadmin-u-e783642739e3">{#each highlights as item (item.title)}<div class="svadmin-u-f3c543ad5fe9 svadmin-u-77a2a20e90d4 svadmin-u-f0faeb26d656 svadmin-u-1b2d54a3fd12 svadmin-u-18d3e28787c3"><div><p class="svadmin-u-fc7473ca09eb svadmin-u-2689f3958069 svadmin-u-d4108abe6359">{item.title}</p>{#if item.description}<p class="svadmin-u-b6b02c0ebef6 svadmin-u-359090c2d529 svadmin-u-bfa603190748">{item.description}</p>{/if}</div><div class="svadmin-u-60fbb7713999 svadmin-u-3960ffc248d9 svadmin-u-77a2a20e90d4">{#if item.badge}<Badge variant="outline">{item.badge}</Badge>{/if}{#if item.meta}<span class="svadmin-u-359090c2d529 svadmin-u-bfa603190748">{item.meta}</span>{/if}</div></div>{/each}</div></div></div>
103
+ <div class="svadmin-u-f3c543ad5fe9 svadmin-u-ceb7ac66b25b svadmin-u-2cd02d11d1af svadmin-u-5f22e64f2282 svadmin-u-ca6bcd4b6f3f svadmin-u-18049387f0af svadmin-u-a59afa8d9b9d svadmin-u-ab1b20c2292a">{#each metrics as metric (metric.label)}<div class="svadmin-u-60fbb7713999 svadmin-u-3960ffc248d9 svadmin-u-8ef2268efbbc svadmin-u-1004c0c3954c svadmin-u-cd0ad9a56558 svadmin-u-8e63407b5ceb"><div><p class="svadmin-u-fc7473ca09eb svadmin-u-bfa603190748">{metric.label}</p>{#if metric.hint}<p class="svadmin-u-b6b02c0ebef6 svadmin-u-359090c2d529 svadmin-u-bfa603190748">{metric.hint}</p>{/if}</div><p class="svadmin-u-d5c9b0001e7e svadmin-u-e83a7042bc91 svadmin-u-d4108abe6359">{metric.value}</p></div>{/each}</div>
104
104
  <AutoTable {resourceName} />
105
105
  </section>
106
106
  {:else if workspaceStyle === 'orders'}
107
- <section class="grid gap-5 xl:grid-cols-[minmax(0,1fr)_20rem]" data-svadmin-orders-layout>
108
- <div class="space-y-5"><div class="grid gap-3 sm:grid-cols-3">{#each metrics as metric (metric.label)}<div class="border-l-2 border-primary pl-3"><p class="text-sm text-muted-foreground">{metric.label}</p><p class="mt-1 text-2xl font-semibold text-foreground">{metric.value}</p>{#if metric.hint}<p class="text-xs text-muted-foreground">{metric.hint}</p>{/if}</div>{/each}</div><AutoTable {resourceName} /></div>
109
- <aside class="rounded-lg border border-border bg-card"><div class="border-b border-border p-4"><h2 class="text-sm font-semibold text-foreground">{highlightsLabel}</h2><p class="mt-1 text-xs text-muted-foreground">{tableDescription}</p></div><div class="divide-y divide-border">{#each highlights as item (item.title)}<div class="p-4"><div class="flex items-center justify-between gap-2"><p class="text-sm font-medium text-foreground">{item.title}</p>{#if item.badge}<Badge>{item.badge}</Badge>{/if}</div>{#if item.description}<p class="mt-1 text-xs leading-5 text-muted-foreground">{item.description}</p>{/if}{#if item.meta}<p class="mt-2 text-xs text-primary">{item.meta}</p>{/if}</div>{/each}{#each lanes as lane (lane.label)}<div class="flex items-center justify-between gap-3 p-4"><div><p class="text-sm font-medium">{lane.label}</p>{#if lane.hint}<p class="text-xs text-muted-foreground">{lane.hint}</p>{/if}</div><Badge variant="outline">{lane.value}</Badge></div>{/each}</div></aside>
107
+ <section class="svadmin-u-f3c543ad5fe9 svadmin-u-b39e60c339f4 svadmin-u-956fcc198f22" data-svadmin-orders-layout>
108
+ <div class="svadmin-u-b43b4c086d9a"><div class="svadmin-u-f3c543ad5fe9 svadmin-u-1004c0c3954c svadmin-u-ab1b20c2292a">{#each metrics as metric (metric.label)}<div class="svadmin-u-f57e7530965b svadmin-u-6cbc84dd9e1a svadmin-u-81976f3f2c63"><p class="svadmin-u-fc7473ca09eb svadmin-u-bfa603190748">{metric.label}</p><p class="svadmin-u-b6b02c0ebef6 svadmin-u-3febee094e85 svadmin-u-e83a7042bc91 svadmin-u-d4108abe6359">{metric.value}</p>{#if metric.hint}<p class="svadmin-u-359090c2d529 svadmin-u-bfa603190748">{metric.hint}</p>{/if}</div>{/each}</div><AutoTable {resourceName} /></div>
109
+ <aside class="svadmin-u-5f22e64f2282 svadmin-u-ca6bcd4b6f3f svadmin-u-18049387f0af svadmin-u-cd0ad9a56558"><div class="svadmin-u-65fdbade2025 svadmin-u-18049387f0af svadmin-u-8e63407b5ceb"><h2 class="svadmin-u-fc7473ca09eb svadmin-u-e83a7042bc91 svadmin-u-d4108abe6359">{highlightsLabel}</h2><p class="svadmin-u-b6b02c0ebef6 svadmin-u-359090c2d529 svadmin-u-bfa603190748">{tableDescription}</p></div><div class="svadmin-u-fa6acbf81d74 svadmin-u-e783642739e3">{#each highlights as item (item.title)}<div class="svadmin-u-8e63407b5ceb"><div class="svadmin-u-60fbb7713999 svadmin-u-3960ffc248d9 svadmin-u-8ef2268efbbc svadmin-u-77a2a20e90d4"><p class="svadmin-u-fc7473ca09eb svadmin-u-2689f3958069 svadmin-u-d4108abe6359">{item.title}</p>{#if item.badge}<Badge>{item.badge}</Badge>{/if}</div>{#if item.description}<p class="svadmin-u-b6b02c0ebef6 svadmin-u-359090c2d529 svadmin-u-7054e2767710 svadmin-u-bfa603190748">{item.description}</p>{/if}{#if item.meta}<p class="svadmin-u-50d0d216a2f8 svadmin-u-359090c2d529 svadmin-u-20aaf08a7ed1">{item.meta}</p>{/if}</div>{/each}{#each lanes as lane (lane.label)}<div class="svadmin-u-60fbb7713999 svadmin-u-3960ffc248d9 svadmin-u-8ef2268efbbc svadmin-u-1004c0c3954c svadmin-u-8e63407b5ceb"><div><p class="svadmin-u-fc7473ca09eb svadmin-u-2689f3958069">{lane.label}</p>{#if lane.hint}<p class="svadmin-u-359090c2d529 svadmin-u-bfa603190748">{lane.hint}</p>{/if}</div><Badge variant="outline">{lane.value}</Badge></div>{/each}</div></aside>
110
110
  </section>
111
111
  {:else if workspaceStyle === 'people'}
112
- <section class="grid gap-5 xl:grid-cols-[18rem_minmax(0,1fr)]" data-svadmin-people-layout>
113
- <aside class="space-y-5 rounded-lg border border-border bg-card p-4">
114
- <div><h2 class="text-sm font-semibold text-foreground">{highlightsLabel}</h2><p class="mt-1 text-xs leading-5 text-muted-foreground">{tableDescription}</p></div>
115
- <div class="grid gap-px overflow-hidden rounded-md border border-border bg-border sm:grid-cols-3 xl:grid-cols-1">{#each metrics as metric (metric.label)}<div class="bg-card py-3"><div class="flex items-center justify-between gap-3"><p class="text-sm text-muted-foreground">{metric.label}</p><p class="text-lg font-semibold text-foreground">{metric.value}</p></div>{#if metric.hint}<p class="text-xs text-muted-foreground">{metric.hint}</p>{/if}</div>{/each}</div>
116
- <div class="space-y-3">{#each lanes as lane (lane.label)}<div class="flex items-center justify-between gap-3"><div><p class="text-sm font-medium text-foreground">{lane.label}</p>{#if lane.hint}<p class="text-xs text-muted-foreground">{lane.hint}</p>{/if}</div><Badge variant="outline">{lane.value}</Badge></div>{/each}</div>
112
+ <section class="svadmin-u-f3c543ad5fe9 svadmin-u-b39e60c339f4 svadmin-u-6643d7cf66cb" data-svadmin-people-layout>
113
+ <aside class="svadmin-u-b43b4c086d9a svadmin-u-5f22e64f2282 svadmin-u-ca6bcd4b6f3f svadmin-u-18049387f0af svadmin-u-cd0ad9a56558 svadmin-u-8e63407b5ceb">
114
+ <div><h2 class="svadmin-u-fc7473ca09eb svadmin-u-e83a7042bc91 svadmin-u-d4108abe6359">{highlightsLabel}</h2><p class="svadmin-u-b6b02c0ebef6 svadmin-u-359090c2d529 svadmin-u-7054e2767710 svadmin-u-bfa603190748">{tableDescription}</p></div>
115
+ <div class="svadmin-u-f3c543ad5fe9 svadmin-u-ceb7ac66b25b svadmin-u-2cd02d11d1af svadmin-u-421ac2be5045 svadmin-u-ca6bcd4b6f3f svadmin-u-18049387f0af svadmin-u-a59afa8d9b9d svadmin-u-ab1b20c2292a svadmin-u-bb10ec63a8d0">{#each metrics as metric (metric.label)}<div class="svadmin-u-cd0ad9a56558 svadmin-u-1b2d54a3fd12"><div class="svadmin-u-60fbb7713999 svadmin-u-3960ffc248d9 svadmin-u-8ef2268efbbc svadmin-u-1004c0c3954c"><p class="svadmin-u-fc7473ca09eb svadmin-u-bfa603190748">{metric.label}</p><p class="svadmin-u-42536e69e639 svadmin-u-e83a7042bc91 svadmin-u-d4108abe6359">{metric.value}</p></div>{#if metric.hint}<p class="svadmin-u-359090c2d529 svadmin-u-bfa603190748">{metric.hint}</p>{/if}</div>{/each}</div>
116
+ <div class="svadmin-u-6ed543e2fbbb">{#each lanes as lane (lane.label)}<div class="svadmin-u-60fbb7713999 svadmin-u-3960ffc248d9 svadmin-u-8ef2268efbbc svadmin-u-1004c0c3954c"><div><p class="svadmin-u-fc7473ca09eb svadmin-u-2689f3958069 svadmin-u-d4108abe6359">{lane.label}</p>{#if lane.hint}<p class="svadmin-u-359090c2d529 svadmin-u-bfa603190748">{lane.hint}</p>{/if}</div><Badge variant="outline">{lane.value}</Badge></div>{/each}</div>
117
117
  </aside>
118
- <div class="space-y-5"><div class="divide-y divide-border rounded-lg border border-border bg-card">{#each highlights as item (item.title)}<article class="flex items-start justify-between gap-4 p-4"><div><p class="text-sm font-medium text-foreground">{item.title}</p>{#if item.description}<p class="mt-1 text-xs leading-5 text-muted-foreground">{item.description}</p>{/if}{#if item.meta}<p class="mt-2 text-xs text-primary">{item.meta}</p>{/if}</div>{#if item.badge}<Badge variant="secondary">{item.badge}</Badge>{/if}</article>{/each}</div><AutoTable {resourceName} /></div>
118
+ <div class="svadmin-u-b43b4c086d9a"><div class="svadmin-u-fa6acbf81d74 svadmin-u-e783642739e3 svadmin-u-5f22e64f2282 svadmin-u-ca6bcd4b6f3f svadmin-u-18049387f0af svadmin-u-cd0ad9a56558">{#each highlights as item (item.title)}<article class="svadmin-u-60fbb7713999 svadmin-u-60541e1e26f8 svadmin-u-8ef2268efbbc svadmin-u-0c3bc98565dd svadmin-u-8e63407b5ceb"><div><p class="svadmin-u-fc7473ca09eb svadmin-u-2689f3958069 svadmin-u-d4108abe6359">{item.title}</p>{#if item.description}<p class="svadmin-u-b6b02c0ebef6 svadmin-u-359090c2d529 svadmin-u-7054e2767710 svadmin-u-bfa603190748">{item.description}</p>{/if}{#if item.meta}<p class="svadmin-u-50d0d216a2f8 svadmin-u-359090c2d529 svadmin-u-20aaf08a7ed1">{item.meta}</p>{/if}</div>{#if item.badge}<Badge variant="secondary">{item.badge}</Badge>{/if}</article>{/each}</div><AutoTable {resourceName} /></div>
119
119
  </section>
120
120
  {:else if workspaceStyle === 'calendar'}
121
- <section class="space-y-5" data-svadmin-calendar-layout>
122
- <div class="grid gap-px overflow-hidden rounded-lg border border-border bg-border sm:grid-cols-3">{#each metrics as metric (metric.label)}<div class="bg-card p-4"><p class="text-xs text-muted-foreground">{metric.label}</p><p class="mt-1 text-xl font-semibold text-foreground">{metric.value}</p>{#if metric.hint}<p class="mt-1 text-xs text-muted-foreground">{metric.hint}</p>{/if}</div>{/each}</div>
123
- <div class="grid gap-5 lg:grid-cols-[minmax(0,1fr)_17rem]"><div class="rounded-lg border border-border bg-card"><div class="border-b border-border px-4 py-3"><h2 class="text-sm font-semibold text-foreground">{highlightsLabel}</h2></div><div class="divide-y divide-border">{#each highlights as item (item.title)}<article class="grid gap-2 p-4 sm:grid-cols-[5rem_minmax(0,1fr)_auto]"><p class="text-xs font-medium text-primary">{item.meta}</p><div><p class="text-sm font-medium text-foreground">{item.title}</p>{#if item.description}<p class="mt-1 text-xs text-muted-foreground">{item.description}</p>{/if}</div>{#if item.badge}<Badge variant="outline">{item.badge}</Badge>{/if}</article>{/each}</div></div><aside class="space-y-3">{#each lanes as lane (lane.label)}<div class="rounded-lg border border-border bg-card p-4"><div class="flex items-center justify-between gap-3"><p class="text-sm font-medium text-foreground">{lane.label}</p><Badge variant="outline">{lane.value}</Badge></div>{#if lane.hint}<p class="mt-1 text-xs text-muted-foreground">{lane.hint}</p>{/if}</div>{/each}</aside></div>
121
+ <section class="svadmin-u-b43b4c086d9a" data-svadmin-calendar-layout>
122
+ <div class="svadmin-u-f3c543ad5fe9 svadmin-u-ceb7ac66b25b svadmin-u-2cd02d11d1af svadmin-u-5f22e64f2282 svadmin-u-ca6bcd4b6f3f svadmin-u-18049387f0af svadmin-u-a59afa8d9b9d svadmin-u-ab1b20c2292a">{#each metrics as metric (metric.label)}<div class="svadmin-u-cd0ad9a56558 svadmin-u-8e63407b5ceb"><p class="svadmin-u-359090c2d529 svadmin-u-bfa603190748">{metric.label}</p><p class="svadmin-u-b6b02c0ebef6 svadmin-u-d5c9b0001e7e svadmin-u-e83a7042bc91 svadmin-u-d4108abe6359">{metric.value}</p>{#if metric.hint}<p class="svadmin-u-b6b02c0ebef6 svadmin-u-359090c2d529 svadmin-u-bfa603190748">{metric.hint}</p>{/if}</div>{/each}</div>
123
+ <div class="svadmin-u-f3c543ad5fe9 svadmin-u-b39e60c339f4 svadmin-u-d9a1932be4d4"><div class="svadmin-u-5f22e64f2282 svadmin-u-ca6bcd4b6f3f svadmin-u-18049387f0af svadmin-u-cd0ad9a56558"><div class="svadmin-u-65fdbade2025 svadmin-u-18049387f0af svadmin-u-f0faeb26d656 svadmin-u-1b2d54a3fd12"><h2 class="svadmin-u-fc7473ca09eb svadmin-u-e83a7042bc91 svadmin-u-d4108abe6359">{highlightsLabel}</h2></div><div class="svadmin-u-fa6acbf81d74 svadmin-u-e783642739e3">{#each highlights as item (item.title)}<article class="svadmin-u-f3c543ad5fe9 svadmin-u-77a2a20e90d4 svadmin-u-8e63407b5ceb svadmin-u-8045cf4c0182"><p class="svadmin-u-359090c2d529 svadmin-u-2689f3958069 svadmin-u-20aaf08a7ed1">{item.meta}</p><div><p class="svadmin-u-fc7473ca09eb svadmin-u-2689f3958069 svadmin-u-d4108abe6359">{item.title}</p>{#if item.description}<p class="svadmin-u-b6b02c0ebef6 svadmin-u-359090c2d529 svadmin-u-bfa603190748">{item.description}</p>{/if}</div>{#if item.badge}<Badge variant="outline">{item.badge}</Badge>{/if}</article>{/each}</div></div><aside class="svadmin-u-6ed543e2fbbb">{#each lanes as lane (lane.label)}<div class="svadmin-u-5f22e64f2282 svadmin-u-ca6bcd4b6f3f svadmin-u-18049387f0af svadmin-u-cd0ad9a56558 svadmin-u-8e63407b5ceb"><div class="svadmin-u-60fbb7713999 svadmin-u-3960ffc248d9 svadmin-u-8ef2268efbbc svadmin-u-1004c0c3954c"><p class="svadmin-u-fc7473ca09eb svadmin-u-2689f3958069 svadmin-u-d4108abe6359">{lane.label}</p><Badge variant="outline">{lane.value}</Badge></div>{#if lane.hint}<p class="svadmin-u-b6b02c0ebef6 svadmin-u-359090c2d529 svadmin-u-bfa603190748">{lane.hint}</p>{/if}</div>{/each}</aside></div>
124
124
  <AutoTable {resourceName} />
125
125
  </section>
126
126
  {:else if workspaceStyle === 'crm'}
127
- <section class="space-y-5" data-svadmin-crm-layout>
128
- <div class="grid gap-4 sm:grid-cols-3">{#each metrics as metric (metric.label)}<div class="border-l-2 border-primary pl-3"><p class="text-sm text-muted-foreground">{metric.label}</p><p class="mt-1 text-2xl font-semibold text-foreground">{metric.value}</p>{#if metric.hint}<p class="text-xs text-muted-foreground">{metric.hint}</p>{/if}</div>{/each}</div>
129
- <div class="grid gap-4 lg:grid-cols-[minmax(0,1fr)_20rem]"><div class="grid gap-4 sm:grid-cols-3">{#each lanes as lane (lane.label)}<section class="rounded-lg border border-border bg-muted/15"><div class="flex items-center justify-between border-b border-border px-4 py-3"><h2 class="text-sm font-semibold text-foreground">{lane.label}</h2><Badge variant="outline">{lane.value}</Badge></div>{#if lane.hint}<p class="p-4 text-xs leading-5 text-muted-foreground">{lane.hint}</p>{/if}</section>{/each}</div><aside class="divide-y divide-border rounded-lg border border-border bg-card">{#each highlights as item (item.title)}<article class="p-4"><div class="flex items-start justify-between gap-2"><p class="text-sm font-medium text-foreground">{item.title}</p>{#if item.badge}<Badge variant="secondary">{item.badge}</Badge>{/if}</div>{#if item.description}<p class="mt-1 text-xs text-muted-foreground">{item.description}</p>{/if}{#if item.meta}<p class="mt-2 text-xs text-primary">{item.meta}</p>{/if}</article>{/each}</aside></div>
127
+ <section class="svadmin-u-b43b4c086d9a" data-svadmin-crm-layout>
128
+ <div class="svadmin-u-f3c543ad5fe9 svadmin-u-0c3bc98565dd svadmin-u-ab1b20c2292a">{#each metrics as metric (metric.label)}<div class="svadmin-u-f57e7530965b svadmin-u-6cbc84dd9e1a svadmin-u-81976f3f2c63"><p class="svadmin-u-fc7473ca09eb svadmin-u-bfa603190748">{metric.label}</p><p class="svadmin-u-b6b02c0ebef6 svadmin-u-3febee094e85 svadmin-u-e83a7042bc91 svadmin-u-d4108abe6359">{metric.value}</p>{#if metric.hint}<p class="svadmin-u-359090c2d529 svadmin-u-bfa603190748">{metric.hint}</p>{/if}</div>{/each}</div>
129
+ <div class="svadmin-u-f3c543ad5fe9 svadmin-u-0c3bc98565dd svadmin-u-4a33def12a78"><div class="svadmin-u-f3c543ad5fe9 svadmin-u-0c3bc98565dd svadmin-u-ab1b20c2292a">{#each lanes as lane (lane.label)}<section class="svadmin-u-5f22e64f2282 svadmin-u-ca6bcd4b6f3f svadmin-u-18049387f0af svadmin-u-46daeb0b661f"><div class="svadmin-u-60fbb7713999 svadmin-u-3960ffc248d9 svadmin-u-8ef2268efbbc svadmin-u-65fdbade2025 svadmin-u-18049387f0af svadmin-u-f0faeb26d656 svadmin-u-1b2d54a3fd12"><h2 class="svadmin-u-fc7473ca09eb svadmin-u-e83a7042bc91 svadmin-u-d4108abe6359">{lane.label}</h2><Badge variant="outline">{lane.value}</Badge></div>{#if lane.hint}<p class="svadmin-u-8e63407b5ceb svadmin-u-359090c2d529 svadmin-u-7054e2767710 svadmin-u-bfa603190748">{lane.hint}</p>{/if}</section>{/each}</div><aside class="svadmin-u-fa6acbf81d74 svadmin-u-e783642739e3 svadmin-u-5f22e64f2282 svadmin-u-ca6bcd4b6f3f svadmin-u-18049387f0af svadmin-u-cd0ad9a56558">{#each highlights as item (item.title)}<article class="svadmin-u-8e63407b5ceb"><div class="svadmin-u-60fbb7713999 svadmin-u-60541e1e26f8 svadmin-u-8ef2268efbbc svadmin-u-77a2a20e90d4"><p class="svadmin-u-fc7473ca09eb svadmin-u-2689f3958069 svadmin-u-d4108abe6359">{item.title}</p>{#if item.badge}<Badge variant="secondary">{item.badge}</Badge>{/if}</div>{#if item.description}<p class="svadmin-u-b6b02c0ebef6 svadmin-u-359090c2d529 svadmin-u-bfa603190748">{item.description}</p>{/if}{#if item.meta}<p class="svadmin-u-50d0d216a2f8 svadmin-u-359090c2d529 svadmin-u-20aaf08a7ed1">{item.meta}</p>{/if}</article>{/each}</aside></div>
130
130
  <AutoTable {resourceName} />
131
131
  </section>
132
132
  {:else if workspaceStyle === 'property'}
133
- <section class="space-y-5" data-svadmin-property-layout>
134
- <div class="grid gap-5 xl:grid-cols-[minmax(0,1fr)_18rem]"><div class="grid gap-4 md:grid-cols-2">{#each highlights as item (item.title)}<Card.Root><Card.Content class="p-4"><div class="flex aspect-[16/7] items-center justify-center rounded-md bg-muted text-primary">{#if Icon}<Icon class="size-7" />{/if}</div><div class="mt-4 flex items-start justify-between gap-3"><div><h2 class="text-sm font-semibold text-foreground">{item.title}</h2>{#if item.description}<p class="mt-1 text-xs leading-5 text-muted-foreground">{item.description}</p>{/if}</div>{#if item.badge}<Badge>{item.badge}</Badge>{/if}</div>{#if item.meta}<p class="mt-3 text-xs font-medium text-primary">{item.meta}</p>{/if}</Card.Content></Card.Root>{/each}</div><aside class="space-y-4">{#each metrics as metric (metric.label)}<div class="border-b border-border pb-4"><div class="flex items-center justify-between gap-3"><p class="text-sm text-muted-foreground">{metric.label}</p><p class="text-lg font-semibold text-foreground">{metric.value}</p></div>{#if metric.hint}<p class="mt-1 text-xs text-muted-foreground">{metric.hint}</p>{/if}</div>{/each}{#each lanes as lane (lane.label)}<div class="flex items-center justify-between gap-3"><span class="text-sm text-muted-foreground">{lane.label}</span><Badge variant="outline">{lane.value}</Badge></div>{/each}</aside></div>
133
+ <section class="svadmin-u-b43b4c086d9a" data-svadmin-property-layout>
134
+ <div class="svadmin-u-f3c543ad5fe9 svadmin-u-b39e60c339f4 svadmin-u-64f847a259bc"><div class="svadmin-u-f3c543ad5fe9 svadmin-u-0c3bc98565dd svadmin-u-e4d6f343b9ff">{#each highlights as item (item.title)}<Card.Root><Card.Content class="svadmin-u-8e63407b5ceb"><div class="svadmin-u-60fbb7713999 svadmin-u-89a62219c1a7 svadmin-u-3960ffc248d9 svadmin-u-86843cf1e227 svadmin-u-421ac2be5045 svadmin-u-2ef11f1cb219 svadmin-u-20aaf08a7ed1">{#if Icon}<Icon class="svadmin-u-cc46d0fa277d" />{/if}</div><div class="svadmin-u-0ab8667228fd svadmin-u-60fbb7713999 svadmin-u-60541e1e26f8 svadmin-u-8ef2268efbbc svadmin-u-1004c0c3954c"><div><h2 class="svadmin-u-fc7473ca09eb svadmin-u-e83a7042bc91 svadmin-u-d4108abe6359">{item.title}</h2>{#if item.description}<p class="svadmin-u-b6b02c0ebef6 svadmin-u-359090c2d529 svadmin-u-7054e2767710 svadmin-u-bfa603190748">{item.description}</p>{/if}</div>{#if item.badge}<Badge>{item.badge}</Badge>{/if}</div>{#if item.meta}<p class="svadmin-u-eccd13ef4f2f svadmin-u-359090c2d529 svadmin-u-2689f3958069 svadmin-u-20aaf08a7ed1">{item.meta}</p>{/if}</Card.Content></Card.Root>{/each}</div><aside class="svadmin-u-3e7ce58d64fa">{#each metrics as metric (metric.label)}<div class="svadmin-u-65fdbade2025 svadmin-u-18049387f0af svadmin-u-9fcd8a13827e"><div class="svadmin-u-60fbb7713999 svadmin-u-3960ffc248d9 svadmin-u-8ef2268efbbc svadmin-u-1004c0c3954c"><p class="svadmin-u-fc7473ca09eb svadmin-u-bfa603190748">{metric.label}</p><p class="svadmin-u-42536e69e639 svadmin-u-e83a7042bc91 svadmin-u-d4108abe6359">{metric.value}</p></div>{#if metric.hint}<p class="svadmin-u-b6b02c0ebef6 svadmin-u-359090c2d529 svadmin-u-bfa603190748">{metric.hint}</p>{/if}</div>{/each}{#each lanes as lane (lane.label)}<div class="svadmin-u-60fbb7713999 svadmin-u-3960ffc248d9 svadmin-u-8ef2268efbbc svadmin-u-1004c0c3954c"><span class="svadmin-u-fc7473ca09eb svadmin-u-bfa603190748">{lane.label}</span><Badge variant="outline">{lane.value}</Badge></div>{/each}</aside></div>
135
135
  <AutoTable {resourceName} />
136
136
  </section>
137
137
  {:else if workspaceStyle === 'ai'}
138
- <section class="grid min-h-[30rem] overflow-hidden rounded-lg border border-border bg-card lg:grid-cols-[16rem_minmax(0,1fr)]" data-svadmin-ai-layout>
139
- <aside class="border-b border-border bg-muted/20 p-4 lg:border-b-0 lg:border-r"><h2 class="text-sm font-semibold text-foreground">{tableLabel}</h2><p class="mt-1 text-xs leading-5 text-muted-foreground">{tableDescription}</p><div class="mt-4 space-y-2">{#each lanes as lane (lane.label)}<div class="rounded-md border border-border bg-card px-3 py-2"><div class="flex items-center justify-between gap-3"><p class="text-sm font-medium text-foreground">{lane.label}</p><Badge variant="outline">{lane.value}</Badge></div>{#if lane.hint}<p class="mt-1 text-xs text-muted-foreground">{lane.hint}</p>{/if}</div>{/each}</div></aside>
140
- <div class="min-w-0"><div class="border-b border-border px-4 py-3"><h2 class="text-sm font-semibold text-foreground">{highlightsLabel}</h2></div><div class="space-y-3 p-4">{#each highlights as item (item.title)}<article class="max-w-2xl rounded-lg border border-border bg-muted/15 p-4"><div class="flex items-start justify-between gap-3"><p class="text-sm font-medium text-foreground">{item.title}</p>{#if item.badge}<Badge variant="secondary">{item.badge}</Badge>{/if}</div>{#if item.description}<p class="mt-2 text-sm leading-6 text-muted-foreground">{item.description}</p>{/if}{#if item.meta}<p class="mt-2 text-xs text-primary">{item.meta}</p>{/if}</article>{/each}</div><div class="border-t border-border p-4"><AutoTable {resourceName} /></div></div>
138
+ <section class="svadmin-u-f3c543ad5fe9 svadmin-u-479a710e57e6 svadmin-u-2cd02d11d1af svadmin-u-5f22e64f2282 svadmin-u-ca6bcd4b6f3f svadmin-u-18049387f0af svadmin-u-cd0ad9a56558 svadmin-u-cecf8bbb11d7" data-svadmin-ai-layout>
139
+ <aside class="svadmin-u-65fdbade2025 svadmin-u-18049387f0af svadmin-u-967d113a1451 svadmin-u-8e63407b5ceb svadmin-u-e2f2b4a69d35 svadmin-u-64a6e3fce6e0"><h2 class="svadmin-u-fc7473ca09eb svadmin-u-e83a7042bc91 svadmin-u-d4108abe6359">{tableLabel}</h2><p class="svadmin-u-b6b02c0ebef6 svadmin-u-359090c2d529 svadmin-u-7054e2767710 svadmin-u-bfa603190748">{tableDescription}</p><div class="svadmin-u-0ab8667228fd svadmin-u-6f7e013d6499">{#each lanes as lane (lane.label)}<div class="svadmin-u-421ac2be5045 svadmin-u-ca6bcd4b6f3f svadmin-u-18049387f0af svadmin-u-cd0ad9a56558 svadmin-u-0e17f2bd9074 svadmin-u-03b4dd7f172b"><div class="svadmin-u-60fbb7713999 svadmin-u-3960ffc248d9 svadmin-u-8ef2268efbbc svadmin-u-1004c0c3954c"><p class="svadmin-u-fc7473ca09eb svadmin-u-2689f3958069 svadmin-u-d4108abe6359">{lane.label}</p><Badge variant="outline">{lane.value}</Badge></div>{#if lane.hint}<p class="svadmin-u-b6b02c0ebef6 svadmin-u-359090c2d529 svadmin-u-bfa603190748">{lane.hint}</p>{/if}</div>{/each}</div></aside>
140
+ <div class="svadmin-u-7e0b7cdf1a94"><div class="svadmin-u-65fdbade2025 svadmin-u-18049387f0af svadmin-u-f0faeb26d656 svadmin-u-1b2d54a3fd12"><h2 class="svadmin-u-fc7473ca09eb svadmin-u-e83a7042bc91 svadmin-u-d4108abe6359">{highlightsLabel}</h2></div><div class="svadmin-u-6ed543e2fbbb svadmin-u-8e63407b5ceb">{#each highlights as item (item.title)}<article class="svadmin-u-2cc8041eca99 svadmin-u-5f22e64f2282 svadmin-u-ca6bcd4b6f3f svadmin-u-18049387f0af svadmin-u-46daeb0b661f svadmin-u-8e63407b5ceb"><div class="svadmin-u-60fbb7713999 svadmin-u-60541e1e26f8 svadmin-u-8ef2268efbbc svadmin-u-1004c0c3954c"><p class="svadmin-u-fc7473ca09eb svadmin-u-2689f3958069 svadmin-u-d4108abe6359">{item.title}</p>{#if item.badge}<Badge variant="secondary">{item.badge}</Badge>{/if}</div>{#if item.description}<p class="svadmin-u-50d0d216a2f8 svadmin-u-fc7473ca09eb svadmin-u-18550d5945ae svadmin-u-bfa603190748">{item.description}</p>{/if}{#if item.meta}<p class="svadmin-u-50d0d216a2f8 svadmin-u-359090c2d529 svadmin-u-20aaf08a7ed1">{item.meta}</p>{/if}</article>{/each}</div><div class="svadmin-u-b950dda299d3 svadmin-u-18049387f0af svadmin-u-8e63407b5ceb"><AutoTable {resourceName} /></div></div>
141
141
  </section>
142
142
  {:else if workspaceStyle === 'communications'}
143
- <section class="grid min-h-[32rem] overflow-hidden rounded-lg border border-border bg-card lg:grid-cols-[15rem_minmax(0,1fr)]" data-svadmin-communications-layout>
144
- <nav class="border-b border-border bg-muted/20 p-3 lg:border-b-0 lg:border-r">{#each lanes as lane (lane.label)}<button class="flex w-full items-center justify-between gap-3 rounded-md px-3 py-2 text-left text-sm hover:bg-card"><span><span class="block font-medium text-foreground">{lane.label}</span>{#if lane.hint}<span class="text-xs text-muted-foreground">{lane.hint}</span>{/if}</span><Badge variant="outline">{lane.value}</Badge></button>{/each}</nav>
145
- <div class="min-w-0"><div class="border-b border-border p-4"><h2 class="text-sm font-semibold text-foreground">{highlightsLabel}</h2></div><div class="divide-y divide-border">{#each highlights as item (item.title)}<article class="grid gap-3 p-4 sm:grid-cols-[1fr_auto]"><div><p class="text-sm font-medium text-foreground">{item.title}</p>{#if item.description}<p class="mt-1 text-sm text-muted-foreground">{item.description}</p>{/if}</div><div class="flex items-center gap-2">{#if item.badge}<Badge variant="secondary">{item.badge}</Badge>{/if}{#if item.meta}<span class="text-xs text-muted-foreground">{item.meta}</span>{/if}</div></article>{/each}</div><div class="border-t border-border p-4"><AutoTable {resourceName} /></div></div>
143
+ <section class="svadmin-u-f3c543ad5fe9 svadmin-u-89904d276530 svadmin-u-2cd02d11d1af svadmin-u-5f22e64f2282 svadmin-u-ca6bcd4b6f3f svadmin-u-18049387f0af svadmin-u-cd0ad9a56558 svadmin-u-c98d73ab4dcd" data-svadmin-communications-layout>
144
+ <nav class="svadmin-u-65fdbade2025 svadmin-u-18049387f0af svadmin-u-967d113a1451 svadmin-u-eb6e8b881acd svadmin-u-e2f2b4a69d35 svadmin-u-64a6e3fce6e0">{#each lanes as lane (lane.label)}<button class="svadmin-u-60fbb7713999 svadmin-u-6da6a3c3f741 svadmin-u-3960ffc248d9 svadmin-u-8ef2268efbbc svadmin-u-1004c0c3954c svadmin-u-421ac2be5045 svadmin-u-0e17f2bd9074 svadmin-u-03b4dd7f172b svadmin-u-2eba0d65d059 svadmin-u-fc7473ca09eb svadmin-u-300b7bc3815e"><span><span class="svadmin-u-0214b4b355d1 svadmin-u-2689f3958069 svadmin-u-d4108abe6359">{lane.label}</span>{#if lane.hint}<span class="svadmin-u-359090c2d529 svadmin-u-bfa603190748">{lane.hint}</span>{/if}</span><Badge variant="outline">{lane.value}</Badge></button>{/each}</nav>
145
+ <div class="svadmin-u-7e0b7cdf1a94"><div class="svadmin-u-65fdbade2025 svadmin-u-18049387f0af svadmin-u-8e63407b5ceb"><h2 class="svadmin-u-fc7473ca09eb svadmin-u-e83a7042bc91 svadmin-u-d4108abe6359">{highlightsLabel}</h2></div><div class="svadmin-u-fa6acbf81d74 svadmin-u-e783642739e3">{#each highlights as item (item.title)}<article class="svadmin-u-f3c543ad5fe9 svadmin-u-1004c0c3954c svadmin-u-8e63407b5ceb svadmin-u-18d3e28787c3"><div><p class="svadmin-u-fc7473ca09eb svadmin-u-2689f3958069 svadmin-u-d4108abe6359">{item.title}</p>{#if item.description}<p class="svadmin-u-b6b02c0ebef6 svadmin-u-fc7473ca09eb svadmin-u-bfa603190748">{item.description}</p>{/if}</div><div class="svadmin-u-60fbb7713999 svadmin-u-3960ffc248d9 svadmin-u-77a2a20e90d4">{#if item.badge}<Badge variant="secondary">{item.badge}</Badge>{/if}{#if item.meta}<span class="svadmin-u-359090c2d529 svadmin-u-bfa603190748">{item.meta}</span>{/if}</div></article>{/each}</div><div class="svadmin-u-b950dda299d3 svadmin-u-18049387f0af svadmin-u-8e63407b5ceb"><AutoTable {resourceName} /></div></div>
146
146
  </section>
147
147
  {:else if workspaceStyle === 'store'}
148
- <section class="space-y-5" data-svadmin-store-layout><div class="flex flex-col gap-4 border-b border-border pb-4 sm:flex-row sm:items-end sm:justify-between"><div><h2 class="text-base font-semibold text-foreground">{highlightsLabel}</h2><p class="mt-1 text-sm text-muted-foreground">{tableDescription}</p></div><div class="flex gap-5">{#each metrics as metric (metric.label)}<div><p class="text-xs text-muted-foreground">{metric.label}</p><p class="text-lg font-semibold text-foreground">{metric.value}</p></div>{/each}</div></div><div class="grid gap-4 md:grid-cols-2 xl:grid-cols-3">{#each highlights as item (item.title)}<Card.Root><Card.Content class="p-4"><div class="flex aspect-[16/8] items-center justify-center rounded-md bg-muted text-primary">{#if Icon}<Icon class="size-8" />{/if}</div><div class="mt-4 flex items-start justify-between gap-3"><div><h3 class="text-sm font-semibold text-foreground">{item.title}</h3>{#if item.description}<p class="mt-1 text-sm text-muted-foreground">{item.description}</p>{/if}</div>{#if item.badge}<Badge>{item.badge}</Badge>{/if}</div>{#if item.meta}<p class="mt-3 text-xs font-medium text-primary">{item.meta}</p>{/if}</Card.Content></Card.Root>{/each}</div><div class="grid gap-4 lg:grid-cols-[18rem_minmax(0,1fr)]"><aside class="rounded-lg border border-border bg-card p-4"><h2 class="text-sm font-semibold text-foreground">{tableLabel}</h2><div class="mt-3 space-y-3">{#each lanes as lane (lane.label)}<div class="flex items-center justify-between gap-3"><span class="text-sm text-muted-foreground">{lane.label}</span><Badge variant="outline">{lane.value}</Badge></div>{/each}</div></aside><AutoTable {resourceName} /></div></section>
148
+ <section class="svadmin-u-b43b4c086d9a" data-svadmin-store-layout><div class="svadmin-u-60fbb7713999 svadmin-u-8dddea0773ed svadmin-u-0c3bc98565dd svadmin-u-65fdbade2025 svadmin-u-18049387f0af svadmin-u-9fcd8a13827e svadmin-u-020ba687fa12 svadmin-u-f89e35297f0f svadmin-u-3b9871a0bf93"><div><h2 class="svadmin-u-4ee734926ff6 svadmin-u-e83a7042bc91 svadmin-u-d4108abe6359">{highlightsLabel}</h2><p class="svadmin-u-b6b02c0ebef6 svadmin-u-fc7473ca09eb svadmin-u-bfa603190748">{tableDescription}</p></div><div class="svadmin-u-60fbb7713999 svadmin-u-b39e60c339f4">{#each metrics as metric (metric.label)}<div><p class="svadmin-u-359090c2d529 svadmin-u-bfa603190748">{metric.label}</p><p class="svadmin-u-42536e69e639 svadmin-u-e83a7042bc91 svadmin-u-d4108abe6359">{metric.value}</p></div>{/each}</div></div><div class="svadmin-u-f3c543ad5fe9 svadmin-u-0c3bc98565dd svadmin-u-e4d6f343b9ff svadmin-u-b86f7f946cd8">{#each highlights as item (item.title)}<Card.Root><Card.Content class="svadmin-u-8e63407b5ceb"><div class="svadmin-u-60fbb7713999 svadmin-u-9e50f522071f svadmin-u-3960ffc248d9 svadmin-u-86843cf1e227 svadmin-u-421ac2be5045 svadmin-u-2ef11f1cb219 svadmin-u-20aaf08a7ed1">{#if Icon}<Icon class="svadmin-u-d8f5213f0fe0" />{/if}</div><div class="svadmin-u-0ab8667228fd svadmin-u-60fbb7713999 svadmin-u-60541e1e26f8 svadmin-u-8ef2268efbbc svadmin-u-1004c0c3954c"><div><h3 class="svadmin-u-fc7473ca09eb svadmin-u-e83a7042bc91 svadmin-u-d4108abe6359">{item.title}</h3>{#if item.description}<p class="svadmin-u-b6b02c0ebef6 svadmin-u-fc7473ca09eb svadmin-u-bfa603190748">{item.description}</p>{/if}</div>{#if item.badge}<Badge>{item.badge}</Badge>{/if}</div>{#if item.meta}<p class="svadmin-u-eccd13ef4f2f svadmin-u-359090c2d529 svadmin-u-2689f3958069 svadmin-u-20aaf08a7ed1">{item.meta}</p>{/if}</Card.Content></Card.Root>{/each}</div><div class="svadmin-u-f3c543ad5fe9 svadmin-u-0c3bc98565dd svadmin-u-4d62c2e3009b"><aside class="svadmin-u-5f22e64f2282 svadmin-u-ca6bcd4b6f3f svadmin-u-18049387f0af svadmin-u-cd0ad9a56558 svadmin-u-8e63407b5ceb"><h2 class="svadmin-u-fc7473ca09eb svadmin-u-e83a7042bc91 svadmin-u-d4108abe6359">{tableLabel}</h2><div class="svadmin-u-eccd13ef4f2f svadmin-u-6ed543e2fbbb">{#each lanes as lane (lane.label)}<div class="svadmin-u-60fbb7713999 svadmin-u-3960ffc248d9 svadmin-u-8ef2268efbbc svadmin-u-1004c0c3954c"><span class="svadmin-u-fc7473ca09eb svadmin-u-bfa603190748">{lane.label}</span><Badge variant="outline">{lane.value}</Badge></div>{/each}</div></aside><AutoTable {resourceName} /></div></section>
149
149
  {:else if workspaceStyle === 'planning'}
150
- <section class="space-y-5" data-svadmin-planning-layout><div class="grid gap-4 lg:grid-cols-3">{#each lanes as lane, laneIndex (lane.label)}<section class="rounded-lg border border-border bg-muted/15"><div class="flex items-center justify-between border-b border-border px-4 py-3"><h2 class="text-sm font-semibold text-foreground">{lane.label}</h2><Badge variant="outline">{lane.value}</Badge></div><div class="space-y-3 p-3">{#each highlights.filter((_, itemIndex) => itemIndex % lanes.length === laneIndex) as item (item.title)}<article class="rounded-md border border-border bg-card p-3"><div class="flex items-start justify-between gap-2"><p class="text-sm font-medium text-foreground">{item.title}</p>{#if item.badge}<Badge variant="secondary">{item.badge}</Badge>{/if}</div>{#if item.description}<p class="mt-1 text-xs leading-5 text-muted-foreground">{item.description}</p>{/if}{#if item.meta}<p class="mt-2 text-xs text-primary">{item.meta}</p>{/if}</article>{/each}</div></section>{/each}</div><div class="grid gap-px overflow-hidden rounded-lg border border-border bg-border sm:grid-cols-3">{#each metrics as metric (metric.label)}<div class="bg-card p-4"><p class="text-sm text-muted-foreground">{metric.label}</p><p class="mt-1 text-xl font-semibold text-foreground">{metric.value}</p>{#if metric.hint}<p class="text-xs text-muted-foreground">{metric.hint}</p>{/if}</div>{/each}</div><AutoTable {resourceName} /></section>
150
+ <section class="svadmin-u-b43b4c086d9a" data-svadmin-planning-layout><div class="svadmin-u-f3c543ad5fe9 svadmin-u-0c3bc98565dd svadmin-u-19d9b25e8fae">{#each lanes as lane, laneIndex (lane.label)}<section class="svadmin-u-5f22e64f2282 svadmin-u-ca6bcd4b6f3f svadmin-u-18049387f0af svadmin-u-46daeb0b661f"><div class="svadmin-u-60fbb7713999 svadmin-u-3960ffc248d9 svadmin-u-8ef2268efbbc svadmin-u-65fdbade2025 svadmin-u-18049387f0af svadmin-u-f0faeb26d656 svadmin-u-1b2d54a3fd12"><h2 class="svadmin-u-fc7473ca09eb svadmin-u-e83a7042bc91 svadmin-u-d4108abe6359">{lane.label}</h2><Badge variant="outline">{lane.value}</Badge></div><div class="svadmin-u-6ed543e2fbbb svadmin-u-eb6e8b881acd">{#each highlights.filter((_, itemIndex) => itemIndex % lanes.length === laneIndex) as item (item.title)}<article class="svadmin-u-421ac2be5045 svadmin-u-ca6bcd4b6f3f svadmin-u-18049387f0af svadmin-u-cd0ad9a56558 svadmin-u-eb6e8b881acd"><div class="svadmin-u-60fbb7713999 svadmin-u-60541e1e26f8 svadmin-u-8ef2268efbbc svadmin-u-77a2a20e90d4"><p class="svadmin-u-fc7473ca09eb svadmin-u-2689f3958069 svadmin-u-d4108abe6359">{item.title}</p>{#if item.badge}<Badge variant="secondary">{item.badge}</Badge>{/if}</div>{#if item.description}<p class="svadmin-u-b6b02c0ebef6 svadmin-u-359090c2d529 svadmin-u-7054e2767710 svadmin-u-bfa603190748">{item.description}</p>{/if}{#if item.meta}<p class="svadmin-u-50d0d216a2f8 svadmin-u-359090c2d529 svadmin-u-20aaf08a7ed1">{item.meta}</p>{/if}</article>{/each}</div></section>{/each}</div><div class="svadmin-u-f3c543ad5fe9 svadmin-u-ceb7ac66b25b svadmin-u-2cd02d11d1af svadmin-u-5f22e64f2282 svadmin-u-ca6bcd4b6f3f svadmin-u-18049387f0af svadmin-u-a59afa8d9b9d svadmin-u-ab1b20c2292a">{#each metrics as metric (metric.label)}<div class="svadmin-u-cd0ad9a56558 svadmin-u-8e63407b5ceb"><p class="svadmin-u-fc7473ca09eb svadmin-u-bfa603190748">{metric.label}</p><p class="svadmin-u-b6b02c0ebef6 svadmin-u-d5c9b0001e7e svadmin-u-e83a7042bc91 svadmin-u-d4108abe6359">{metric.value}</p>{#if metric.hint}<p class="svadmin-u-359090c2d529 svadmin-u-bfa603190748">{metric.hint}</p>{/if}</div>{/each}</div><AutoTable {resourceName} /></section>
151
151
  {:else if workspaceStyle === 'generation'}
152
- <section class="grid gap-5 xl:grid-cols-[19rem_minmax(0,1fr)]" data-svadmin-generation-layout>
153
- <aside class="rounded-lg border border-border bg-card p-4"><h2 class="text-sm font-semibold text-foreground">{highlightsLabel}</h2><div class="mt-4 space-y-4">{#each lanes as lane, index (lane.label)}<div class="flex items-start gap-3"><span class="flex size-7 shrink-0 items-center justify-center rounded-md border border-border bg-muted text-xs font-semibold text-foreground">{index + 1}</span><div><div class="flex items-center gap-2"><p class="text-sm font-medium text-foreground">{lane.label}</p><Badge variant="outline">{lane.value}</Badge></div>{#if lane.hint}<p class="mt-1 text-xs leading-5 text-muted-foreground">{lane.hint}</p>{/if}</div></div>{/each}</div></aside>
154
- <div class="space-y-5"><div class="grid gap-px overflow-hidden rounded-lg border border-border bg-border sm:grid-cols-3">{#each metrics as metric (metric.label)}<div class="bg-card p-4"><p class="text-sm text-muted-foreground">{metric.label}</p><p class="mt-1 text-xl font-semibold text-foreground">{metric.value}</p>{#if metric.hint}<p class="text-xs text-muted-foreground">{metric.hint}</p>{/if}</div>{/each}</div><div class="grid gap-3 md:grid-cols-3">{#each highlights as item (item.title)}<article class="rounded-lg border border-border bg-card p-4"><div class="flex items-start justify-between gap-2"><p class="text-sm font-medium text-foreground">{item.title}</p>{#if item.badge}<Badge variant="secondary">{item.badge}</Badge>{/if}</div>{#if item.description}<p class="mt-2 text-xs leading-5 text-muted-foreground">{item.description}</p>{/if}</article>{/each}</div><AutoTable {resourceName} /></div>
152
+ <section class="svadmin-u-f3c543ad5fe9 svadmin-u-b39e60c339f4 svadmin-u-fd0beb7ec078" data-svadmin-generation-layout>
153
+ <aside class="svadmin-u-5f22e64f2282 svadmin-u-ca6bcd4b6f3f svadmin-u-18049387f0af svadmin-u-cd0ad9a56558 svadmin-u-8e63407b5ceb"><h2 class="svadmin-u-fc7473ca09eb svadmin-u-e83a7042bc91 svadmin-u-d4108abe6359">{highlightsLabel}</h2><div class="svadmin-u-0ab8667228fd svadmin-u-3e7ce58d64fa">{#each lanes as lane, index (lane.label)}<div class="svadmin-u-60fbb7713999 svadmin-u-60541e1e26f8 svadmin-u-1004c0c3954c"><span class="svadmin-u-60fbb7713999 svadmin-u-cc46d0fa277d svadmin-u-012fbd121f37 svadmin-u-3960ffc248d9 svadmin-u-86843cf1e227 svadmin-u-421ac2be5045 svadmin-u-ca6bcd4b6f3f svadmin-u-18049387f0af svadmin-u-2ef11f1cb219 svadmin-u-359090c2d529 svadmin-u-e83a7042bc91 svadmin-u-d4108abe6359">{index + 1}</span><div><div class="svadmin-u-60fbb7713999 svadmin-u-3960ffc248d9 svadmin-u-77a2a20e90d4"><p class="svadmin-u-fc7473ca09eb svadmin-u-2689f3958069 svadmin-u-d4108abe6359">{lane.label}</p><Badge variant="outline">{lane.value}</Badge></div>{#if lane.hint}<p class="svadmin-u-b6b02c0ebef6 svadmin-u-359090c2d529 svadmin-u-7054e2767710 svadmin-u-bfa603190748">{lane.hint}</p>{/if}</div></div>{/each}</div></aside>
154
+ <div class="svadmin-u-b43b4c086d9a"><div class="svadmin-u-f3c543ad5fe9 svadmin-u-ceb7ac66b25b svadmin-u-2cd02d11d1af svadmin-u-5f22e64f2282 svadmin-u-ca6bcd4b6f3f svadmin-u-18049387f0af svadmin-u-a59afa8d9b9d svadmin-u-ab1b20c2292a">{#each metrics as metric (metric.label)}<div class="svadmin-u-cd0ad9a56558 svadmin-u-8e63407b5ceb"><p class="svadmin-u-fc7473ca09eb svadmin-u-bfa603190748">{metric.label}</p><p class="svadmin-u-b6b02c0ebef6 svadmin-u-d5c9b0001e7e svadmin-u-e83a7042bc91 svadmin-u-d4108abe6359">{metric.value}</p>{#if metric.hint}<p class="svadmin-u-359090c2d529 svadmin-u-bfa603190748">{metric.hint}</p>{/if}</div>{/each}</div><div class="svadmin-u-f3c543ad5fe9 svadmin-u-1004c0c3954c svadmin-u-9a638cfe8212">{#each highlights as item (item.title)}<article class="svadmin-u-5f22e64f2282 svadmin-u-ca6bcd4b6f3f svadmin-u-18049387f0af svadmin-u-cd0ad9a56558 svadmin-u-8e63407b5ceb"><div class="svadmin-u-60fbb7713999 svadmin-u-60541e1e26f8 svadmin-u-8ef2268efbbc svadmin-u-77a2a20e90d4"><p class="svadmin-u-fc7473ca09eb svadmin-u-2689f3958069 svadmin-u-d4108abe6359">{item.title}</p>{#if item.badge}<Badge variant="secondary">{item.badge}</Badge>{/if}</div>{#if item.description}<p class="svadmin-u-50d0d216a2f8 svadmin-u-359090c2d529 svadmin-u-7054e2767710 svadmin-u-bfa603190748">{item.description}</p>{/if}</article>{/each}</div><AutoTable {resourceName} /></div>
155
155
  </section>
156
156
  {:else if workspaceStyle === 'billing'}
157
- <section class="space-y-5" data-svadmin-billing-layout><div class="grid gap-4 md:grid-cols-3">{#each highlights as item (item.title)}<Card.Root><Card.Header><div class="flex items-center justify-between gap-3"><Card.Title class="text-base">{item.title}</Card.Title>{#if item.badge}<Badge>{item.badge}</Badge>{/if}</div>{#if item.description}<Card.Description>{item.description}</Card.Description>{/if}</Card.Header><Card.Content>{#if item.meta}<p class="text-2xl font-semibold text-foreground">{item.meta}</p>{/if}<Button variant="outline" size="sm" class="mt-4 w-full">{actionLabel}</Button></Card.Content></Card.Root>{/each}</div><div class="grid gap-5 xl:grid-cols-[minmax(0,1fr)_18rem]"><AutoTable {resourceName} /><aside class="space-y-4">{#each metrics as metric (metric.label)}<div class="border-b border-border pb-4"><div class="flex items-center justify-between gap-3"><p class="text-sm text-muted-foreground">{metric.label}</p><p class="text-lg font-semibold text-foreground">{metric.value}</p></div>{#if metric.hint}<p class="mt-1 text-xs text-muted-foreground">{metric.hint}</p>{/if}</div>{/each}{#each lanes as lane (lane.label)}<div class="flex items-center justify-between gap-3"><span class="text-sm text-muted-foreground">{lane.label}</span><Badge variant="outline">{lane.value}</Badge></div>{/each}</aside></div></section>
157
+ <section class="svadmin-u-b43b4c086d9a" data-svadmin-billing-layout><div class="svadmin-u-f3c543ad5fe9 svadmin-u-0c3bc98565dd svadmin-u-9a638cfe8212">{#each highlights as item (item.title)}<Card.Root><Card.Header><div class="svadmin-u-60fbb7713999 svadmin-u-3960ffc248d9 svadmin-u-8ef2268efbbc svadmin-u-1004c0c3954c"><Card.Title class="svadmin-u-4ee734926ff6">{item.title}</Card.Title>{#if item.badge}<Badge>{item.badge}</Badge>{/if}</div>{#if item.description}<Card.Description>{item.description}</Card.Description>{/if}</Card.Header><Card.Content>{#if item.meta}<p class="svadmin-u-3febee094e85 svadmin-u-e83a7042bc91 svadmin-u-d4108abe6359">{item.meta}</p>{/if}<Button variant="outline" size="sm" class="svadmin-u-0ab8667228fd svadmin-u-6da6a3c3f741">{actionLabel}</Button></Card.Content></Card.Root>{/each}</div><div class="svadmin-u-f3c543ad5fe9 svadmin-u-b39e60c339f4 svadmin-u-64f847a259bc"><AutoTable {resourceName} /><aside class="svadmin-u-3e7ce58d64fa">{#each metrics as metric (metric.label)}<div class="svadmin-u-65fdbade2025 svadmin-u-18049387f0af svadmin-u-9fcd8a13827e"><div class="svadmin-u-60fbb7713999 svadmin-u-3960ffc248d9 svadmin-u-8ef2268efbbc svadmin-u-1004c0c3954c"><p class="svadmin-u-fc7473ca09eb svadmin-u-bfa603190748">{metric.label}</p><p class="svadmin-u-42536e69e639 svadmin-u-e83a7042bc91 svadmin-u-d4108abe6359">{metric.value}</p></div>{#if metric.hint}<p class="svadmin-u-b6b02c0ebef6 svadmin-u-359090c2d529 svadmin-u-bfa603190748">{metric.hint}</p>{/if}</div>{/each}{#each lanes as lane (lane.label)}<div class="svadmin-u-60fbb7713999 svadmin-u-3960ffc248d9 svadmin-u-8ef2268efbbc svadmin-u-1004c0c3954c"><span class="svadmin-u-fc7473ca09eb svadmin-u-bfa603190748">{lane.label}</span><Badge variant="outline">{lane.value}</Badge></div>{/each}</aside></div></section>
158
158
  {:else if workspaceStyle === 'security'}
159
- <section class="space-y-5" data-svadmin-security-layout><div class="grid gap-4 lg:grid-cols-[0.7fr_1.3fr]"><div class="rounded-lg border border-border bg-card p-5"><p class="text-sm font-medium text-muted-foreground">{metrics[0]?.label}</p><p class="mt-3 text-3xl font-semibold text-foreground">{metrics[0]?.value}</p><p class="mt-1 text-sm text-muted-foreground">{metrics[0]?.hint}</p><div class="mt-5 space-y-3">{#each lanes as lane (lane.label)}<div class="flex items-center justify-between gap-3"><span class="text-sm text-muted-foreground">{lane.label}</span><Badge variant="outline">{lane.value}</Badge></div>{/each}</div></div><div class="rounded-lg border border-border bg-card"><div class="border-b border-border px-4 py-3"><h2 class="text-sm font-semibold text-foreground">{highlightsLabel}</h2></div><div class="divide-y divide-border">{#each highlights as item (item.title)}<div class="flex items-start justify-between gap-3 p-4"><div><p class="text-sm font-medium text-foreground">{item.title}</p>{#if item.description}<p class="mt-1 text-xs text-muted-foreground">{item.description}</p>{/if}{#if item.meta}<p class="mt-2 text-xs text-primary">{item.meta}</p>{/if}</div>{#if item.badge}<Badge variant="outline">{item.badge}</Badge>{/if}</div>{/each}</div></div></div><AutoTable {resourceName} /></section>
159
+ <section class="svadmin-u-b43b4c086d9a" data-svadmin-security-layout><div class="svadmin-u-f3c543ad5fe9 svadmin-u-0c3bc98565dd svadmin-u-2ee0591bf105"><div class="svadmin-u-5f22e64f2282 svadmin-u-ca6bcd4b6f3f svadmin-u-18049387f0af svadmin-u-cd0ad9a56558 svadmin-u-c07e54fd1439"><p class="svadmin-u-fc7473ca09eb svadmin-u-2689f3958069 svadmin-u-bfa603190748">{metrics[0]?.label}</p><p class="svadmin-u-eccd13ef4f2f svadmin-u-751fb0d102ba svadmin-u-e83a7042bc91 svadmin-u-d4108abe6359">{metrics[0]?.value}</p><p class="svadmin-u-b6b02c0ebef6 svadmin-u-fc7473ca09eb svadmin-u-bfa603190748">{metrics[0]?.hint}</p><div class="svadmin-u-fb77735ed17c svadmin-u-6ed543e2fbbb">{#each lanes as lane (lane.label)}<div class="svadmin-u-60fbb7713999 svadmin-u-3960ffc248d9 svadmin-u-8ef2268efbbc svadmin-u-1004c0c3954c"><span class="svadmin-u-fc7473ca09eb svadmin-u-bfa603190748">{lane.label}</span><Badge variant="outline">{lane.value}</Badge></div>{/each}</div></div><div class="svadmin-u-5f22e64f2282 svadmin-u-ca6bcd4b6f3f svadmin-u-18049387f0af svadmin-u-cd0ad9a56558"><div class="svadmin-u-65fdbade2025 svadmin-u-18049387f0af svadmin-u-f0faeb26d656 svadmin-u-1b2d54a3fd12"><h2 class="svadmin-u-fc7473ca09eb svadmin-u-e83a7042bc91 svadmin-u-d4108abe6359">{highlightsLabel}</h2></div><div class="svadmin-u-fa6acbf81d74 svadmin-u-e783642739e3">{#each highlights as item (item.title)}<div class="svadmin-u-60fbb7713999 svadmin-u-60541e1e26f8 svadmin-u-8ef2268efbbc svadmin-u-1004c0c3954c svadmin-u-8e63407b5ceb"><div><p class="svadmin-u-fc7473ca09eb svadmin-u-2689f3958069 svadmin-u-d4108abe6359">{item.title}</p>{#if item.description}<p class="svadmin-u-b6b02c0ebef6 svadmin-u-359090c2d529 svadmin-u-bfa603190748">{item.description}</p>{/if}{#if item.meta}<p class="svadmin-u-50d0d216a2f8 svadmin-u-359090c2d529 svadmin-u-20aaf08a7ed1">{item.meta}</p>{/if}</div>{#if item.badge}<Badge variant="outline">{item.badge}</Badge>{/if}</div>{/each}</div></div></div><AutoTable {resourceName} /></section>
160
160
  {:else if workspaceStyle === 'referral'}
161
- <section class="grid gap-6 lg:grid-cols-[minmax(0,1fr)_20rem]" data-svadmin-referral-layout><div class="space-y-5"><div class="rounded-lg border border-border bg-card p-5"><h2 class="text-base font-semibold text-foreground">{highlightsLabel}</h2><p class="mt-1 text-sm text-muted-foreground">{tableDescription}</p><div class="mt-5 grid gap-3 sm:grid-cols-3">{#each metrics as metric (metric.label)}<div><p class="text-sm text-muted-foreground">{metric.label}</p><p class="mt-1 text-2xl font-semibold text-foreground">{metric.value}</p><p class="text-xs text-muted-foreground">{metric.hint}</p></div>{/each}</div></div><AutoTable {resourceName} /></div><aside class="space-y-3">{#each highlights as item (item.title)}<article class="rounded-lg border border-border bg-card p-4"><div class="flex items-center justify-between gap-3"><p class="text-sm font-medium text-foreground">{item.title}</p>{#if item.badge}<Badge>{item.badge}</Badge>{/if}</div>{#if item.description}<p class="mt-1 text-xs leading-5 text-muted-foreground">{item.description}</p>{/if}{#if item.meta}<p class="mt-3 rounded-md bg-muted px-3 py-2 font-mono text-xs text-foreground">{item.meta}</p>{/if}</article>{/each}</aside></section>
161
+ <section class="svadmin-u-f3c543ad5fe9 svadmin-u-0d304f904cb0 svadmin-u-4a33def12a78" data-svadmin-referral-layout><div class="svadmin-u-b43b4c086d9a"><div class="svadmin-u-5f22e64f2282 svadmin-u-ca6bcd4b6f3f svadmin-u-18049387f0af svadmin-u-cd0ad9a56558 svadmin-u-c07e54fd1439"><h2 class="svadmin-u-4ee734926ff6 svadmin-u-e83a7042bc91 svadmin-u-d4108abe6359">{highlightsLabel}</h2><p class="svadmin-u-b6b02c0ebef6 svadmin-u-fc7473ca09eb svadmin-u-bfa603190748">{tableDescription}</p><div class="svadmin-u-fb77735ed17c svadmin-u-f3c543ad5fe9 svadmin-u-1004c0c3954c svadmin-u-ab1b20c2292a">{#each metrics as metric (metric.label)}<div><p class="svadmin-u-fc7473ca09eb svadmin-u-bfa603190748">{metric.label}</p><p class="svadmin-u-b6b02c0ebef6 svadmin-u-3febee094e85 svadmin-u-e83a7042bc91 svadmin-u-d4108abe6359">{metric.value}</p><p class="svadmin-u-359090c2d529 svadmin-u-bfa603190748">{metric.hint}</p></div>{/each}</div></div><AutoTable {resourceName} /></div><aside class="svadmin-u-6ed543e2fbbb">{#each highlights as item (item.title)}<article class="svadmin-u-5f22e64f2282 svadmin-u-ca6bcd4b6f3f svadmin-u-18049387f0af svadmin-u-cd0ad9a56558 svadmin-u-8e63407b5ceb"><div class="svadmin-u-60fbb7713999 svadmin-u-3960ffc248d9 svadmin-u-8ef2268efbbc svadmin-u-1004c0c3954c"><p class="svadmin-u-fc7473ca09eb svadmin-u-2689f3958069 svadmin-u-d4108abe6359">{item.title}</p>{#if item.badge}<Badge>{item.badge}</Badge>{/if}</div>{#if item.description}<p class="svadmin-u-b6b02c0ebef6 svadmin-u-359090c2d529 svadmin-u-7054e2767710 svadmin-u-bfa603190748">{item.description}</p>{/if}{#if item.meta}<p class="svadmin-u-eccd13ef4f2f svadmin-u-421ac2be5045 svadmin-u-2ef11f1cb219 svadmin-u-0e17f2bd9074 svadmin-u-03b4dd7f172b svadmin-u-0e65706bcccd svadmin-u-359090c2d529 svadmin-u-d4108abe6359">{item.meta}</p>{/if}</article>{/each}</aside></section>
162
162
  {:else}
163
- <section class="space-y-4" data-svadmin-default-layout><div class="grid gap-px overflow-hidden rounded-lg border border-border bg-border sm:grid-cols-3">{#each metrics as metric (metric.label)}<div class="bg-card p-4"><p class="text-sm text-muted-foreground">{metric.label}</p><p class="mt-1 text-xl font-semibold text-foreground">{metric.value}</p></div>{/each}</div><AutoTable {resourceName} /></section>
163
+ <section class="svadmin-u-3e7ce58d64fa" data-svadmin-default-layout><div class="svadmin-u-f3c543ad5fe9 svadmin-u-ceb7ac66b25b svadmin-u-2cd02d11d1af svadmin-u-5f22e64f2282 svadmin-u-ca6bcd4b6f3f svadmin-u-18049387f0af svadmin-u-a59afa8d9b9d svadmin-u-ab1b20c2292a">{#each metrics as metric (metric.label)}<div class="svadmin-u-cd0ad9a56558 svadmin-u-8e63407b5ceb"><p class="svadmin-u-fc7473ca09eb svadmin-u-bfa603190748">{metric.label}</p><p class="svadmin-u-b6b02c0ebef6 svadmin-u-d5c9b0001e7e svadmin-u-e83a7042bc91 svadmin-u-d4108abe6359">{metric.value}</p></div>{/each}</div><AutoTable {resourceName} /></section>
164
164
  {/if}
165
165
  </div>
@@ -65,9 +65,9 @@
65
65
 
66
66
  <Button {variant} {size} onclick={handleRetry} disabled={disabled || pending || !taskProvider?.retry}>
67
67
  {#if pending}
68
- <Loader2 class="mr-1.5 h-3.5 w-3.5 animate-spin" />
68
+ <Loader2 class="svadmin-u-82cc6c6581cd svadmin-u-7fc7f732bf7e svadmin-u-bf600f8e029c svadmin-u-afbdd13a380e" />
69
69
  {:else}
70
- <RotateCcw class="mr-1.5 h-3.5 w-3.5" />
70
+ <RotateCcw class="svadmin-u-82cc6c6581cd svadmin-u-7fc7f732bf7e svadmin-u-bf600f8e029c" />
71
71
  {/if}
72
72
  {#if children}
73
73
  {@render children()}
@@ -156,10 +156,10 @@
156
156
  </script>
157
157
 
158
158
  {#if error}
159
- <div class="h-full flex items-center justify-center">
160
- <div class="max-w-md p-6 border border-destructive/20 bg-destructive/10 text-destructive rounded-lg flex flex-col items-center gap-3 text-center">
161
- <AlertCircle class="h-8 w-8" />
162
- <h3 class="font-bold text-lg">{i18n.t('common.error') ?? 'Error'}</h3>
159
+ <div class="svadmin-u-668b21aa5409 svadmin-u-60fbb7713999 svadmin-u-3960ffc248d9 svadmin-u-86843cf1e227">
160
+ <div class="svadmin-u-9794ab45094d svadmin-u-0478c89a150f svadmin-u-ca6bcd4b6f3f svadmin-u-f0c1e65bd6f2 svadmin-u-43928fcc832f svadmin-u-811148b13d1e svadmin-u-5f22e64f2282 svadmin-u-60fbb7713999 svadmin-u-8dddea0773ed svadmin-u-3960ffc248d9 svadmin-u-1004c0c3954c svadmin-u-ca6bf63030aa">
161
+ <AlertCircle class="svadmin-u-ed8a5df7b2fb svadmin-u-2bbcfc3b5179" />
162
+ <h3 class="svadmin-u-69450ef1487e svadmin-u-42536e69e639">{i18n.t('common.error') ?? 'Error'}</h3>
163
163
  <p>{error}</p>
164
164
  </div>
165
165
  </div>
@@ -132,7 +132,7 @@
132
132
  <div
133
133
  bind:this={ref}
134
134
  data-slot="row-actions"
135
- class={cn("inline-flex items-center gap-1.5", className)}
135
+ class={cn("svadmin-u-52083e7da442 svadmin-u-3960ffc248d9 svadmin-u-58284b4ea568", className)}
136
136
  onkeydown={manageMenuKeyboard}
137
137
  {...restProps}
138
138
  >
@@ -148,11 +148,11 @@
148
148
  href={action.href}
149
149
  disabled={action.disabled}
150
150
  title={action.title || action.label}
151
- class="h-8 px-2 text-xs"
151
+ class="svadmin-u-ed8a5df7b2fb svadmin-u-d5eab218aa34 svadmin-u-359090c2d529"
152
152
  >
153
153
  {#if action.icon}
154
154
  {@const Icon = action.icon}
155
- <Icon class="mr-1 size-3.5" />
155
+ <Icon class="svadmin-u-618162408e7a svadmin-u-783b0d9d1e2c" />
156
156
  {/if}
157
157
  {action.label}
158
158
  </Button>
@@ -163,11 +163,11 @@
163
163
  onclick={action.onclick}
164
164
  disabled={action.disabled}
165
165
  title={action.title || action.label}
166
- class="h-8 px-2 text-xs"
166
+ class="svadmin-u-ed8a5df7b2fb svadmin-u-d5eab218aa34 svadmin-u-359090c2d529"
167
167
  >
168
168
  {#if action.icon}
169
169
  {@const Icon = action.icon}
170
- <Icon class="mr-1 size-3.5" />
170
+ <Icon class="svadmin-u-618162408e7a svadmin-u-783b0d9d1e2c" />
171
171
  {/if}
172
172
  {action.label}
173
173
  </Button>
@@ -179,11 +179,11 @@
179
179
  <DropdownMenu.Trigger>
180
180
  {#snippet child({ props })}
181
181
  <Button {...props} variant="ghost" size="icon-sm" title={moreLabel} aria-label={moreLabel} aria-haspopup="menu" aria-expanded={overflowOpen}>
182
- <Ellipsis class="size-4" />
182
+ <Ellipsis class="svadmin-u-f7b5fa971871" />
183
183
  </Button>
184
184
  {/snippet}
185
185
  </DropdownMenu.Trigger>
186
- <DropdownMenu.Content align="end" class="min-w-[8rem]" role="menu" aria-label={moreLabel}>
186
+ <DropdownMenu.Content align="end" class="svadmin-u-3143d72a3869" role="menu" aria-label={moreLabel}>
187
187
  {#each overflowActions as action (action)}
188
188
  {#if action.href}
189
189
  <Button
@@ -194,11 +194,11 @@
194
194
  onclick={(event) => handleOverflowAction(action, event)}
195
195
  role="menuitem"
196
196
  tabindex={-1}
197
- class="h-auto w-full justify-start rounded-md px-2 py-1.5 text-sm font-normal"
197
+ class="svadmin-u-b8f0a08ece1e svadmin-u-6da6a3c3f741 svadmin-u-4b5cc19bfdfc svadmin-u-421ac2be5045 svadmin-u-d5eab218aa34 svadmin-u-ec0091ee009b svadmin-u-fc7473ca09eb svadmin-u-8ecebc9f80e6"
198
198
  >
199
199
  {#if action.icon}
200
200
  {@const Icon = action.icon}
201
- <Icon class="size-3.5" />
201
+ <Icon class="svadmin-u-783b0d9d1e2c" />
202
202
  {/if}
203
203
  {action.label}
204
204
  </Button>
@@ -212,7 +212,7 @@
212
212
  >
213
213
  {#if action.icon}
214
214
  {@const Icon = action.icon}
215
- <Icon class="size-3.5" />
215
+ <Icon class="svadmin-u-783b0d9d1e2c" />
216
216
  {/if}
217
217
  {action.label}
218
218
  </DropdownMenu.Item>
@@ -159,8 +159,8 @@
159
159
  }
160
160
  </script>
161
161
 
162
- <div class="space-y-6">
163
- <div><h2 class="text-xl font-semibold text-foreground">{i18n.t('settings.security')}</h2><p class="mt-1 text-sm text-muted-foreground">{i18n.t('settings.securityDescription')}</p></div>
162
+ <div class="svadmin-u-b3542e058833">
163
+ <div><h2 class="svadmin-u-d5c9b0001e7e svadmin-u-e83a7042bc91 svadmin-u-d4108abe6359">{i18n.t('settings.security')}</h2><p class="svadmin-u-b6b02c0ebef6 svadmin-u-fc7473ca09eb svadmin-u-bfa603190748">{i18n.t('settings.securityDescription')}</p></div>
164
164
  {#if !sessionProvider}
165
165
  <FeedbackNotice tone="warning" message={isZh ? '未配置 SessionProvider。会话和 MFA 设置不会使用模拟数据。' : 'SessionProvider is not configured. Session and MFA controls do not use simulated data.'} />
166
166
  {/if}
@@ -171,8 +171,8 @@
171
171
  </SettingsGroup>
172
172
  <SettingsGroup title={i18n.t('profile.changePassword')} description={isZh ? '密码修改由 AuthProvider 持久化。' : 'Password changes are persisted by AuthProvider.'}>
173
173
  {#if !authProvider?.updatePassword}<FeedbackNotice tone="warning" message={isZh ? '当前 AuthProvider 不支持修改密码。' : 'The current AuthProvider does not support password updates.'} />{/if}
174
- <form onsubmit={handlePasswordChange} class="max-w-lg space-y-4">
175
- {#if passwordErrorMessage}<Alert.Root variant="destructive"><AlertTriangle class="h-4 w-4" /><Alert.Description>{passwordErrorMessage}</Alert.Description></Alert.Root>{/if}
174
+ <form onsubmit={handlePasswordChange} class="svadmin-u-6199866f612f svadmin-u-3e7ce58d64fa">
175
+ {#if passwordErrorMessage}<Alert.Root variant="destructive"><AlertTriangle class="svadmin-u-11e59c6d5f6b svadmin-u-dc7972ebf3f3" /><Alert.Description>{passwordErrorMessage}</Alert.Description></Alert.Root>{/if}
176
176
  <PasswordInput id="security-current-password" label={i18n.t('profile.currentPassword')} bind:value={currentPassword} autocomplete="current-password" disabled={!authProvider?.updatePassword || changingPassword} />
177
177
  <PasswordInput id="security-new-password" label={i18n.t('profile.newPassword')} bind:value={newPassword} autocomplete="new-password" showStrength disabled={!authProvider?.updatePassword || changingPassword} />
178
178
  <PasswordInput id="security-confirm-password" label={i18n.t('auth.confirmPassword')} bind:value={confirmPassword} autocomplete="new-password" disabled={!authProvider?.updatePassword || changingPassword} />
@@ -188,11 +188,11 @@
188
188
  {:else if sessions.length === 0}
189
189
  <DataState state="empty" title={i18n.t('security.noSessions')} description={sessionProvider ? (isZh ? 'Provider 未返回活跃会话。' : 'The provider returned no active sessions.') : (isZh ? '配置 SessionProvider 后可管理真实会话。' : 'Configure SessionProvider to manage real sessions.')} />
190
190
  {:else}
191
- <div class="divide-y">
191
+ <div class="svadmin-u-fa6acbf81d74">
192
192
  {#each sessions as session (session.id)}
193
- <div class="flex items-center justify-between gap-4 py-3">
194
- <div class="flex min-w-0 items-center gap-3"><div class="rounded-lg bg-muted p-2 text-muted-foreground">{#if (session.os ?? '').toLowerCase().includes('ios') || (session.os ?? '').toLowerCase().includes('android')}<Smartphone class="h-5 w-5" />{:else}<Monitor class="h-5 w-5" />{/if}</div><div class="min-w-0 space-y-1"><div class="flex flex-wrap items-center gap-2"><span class="text-sm font-medium">{session.os ?? (isZh ? '未知系统' : 'Unknown OS')} - {session.browser ?? (isZh ? '未知浏览器' : 'Unknown browser')}</span>{#if session.current}<span class="rounded bg-primary/10 px-1.5 py-0.5 text-[10px] font-semibold text-primary">{i18n.t('security.currentSession')}</span>{/if}</div><div class="flex flex-wrap items-center gap-2 text-xs text-muted-foreground"><span>{session.ipAddress ?? '-'}</span><span>{session.lastActiveAt ? new Date(session.lastActiveAt).toLocaleString() : '-'}</span></div></div></div>
195
- {#if !session.current}<Button variant="ghost" size="icon-sm" disabled={revoking !== null} onclick={() => revokeSession(session.id)} title={i18n.t('security.revokeSession')}><Trash2 class="h-4 w-4" /></Button>{/if}
193
+ <div class="svadmin-u-60fbb7713999 svadmin-u-3960ffc248d9 svadmin-u-8ef2268efbbc svadmin-u-0c3bc98565dd svadmin-u-1b2d54a3fd12">
194
+ <div class="svadmin-u-60fbb7713999 svadmin-u-7e0b7cdf1a94 svadmin-u-3960ffc248d9 svadmin-u-1004c0c3954c"><div class="svadmin-u-5f22e64f2282 svadmin-u-2ef11f1cb219 svadmin-u-7660b450905a svadmin-u-bfa603190748">{#if (session.os ?? '').toLowerCase().includes('ios') || (session.os ?? '').toLowerCase().includes('android')}<Smartphone class="svadmin-u-cd0d9c512cdc svadmin-u-72470489ff4e" />{:else}<Monitor class="svadmin-u-cd0d9c512cdc svadmin-u-72470489ff4e" />{/if}</div><div class="svadmin-u-7e0b7cdf1a94 svadmin-u-da7c36cd8867"><div class="svadmin-u-60fbb7713999 svadmin-u-1eb5c6df38c1 svadmin-u-3960ffc248d9 svadmin-u-77a2a20e90d4"><span class="svadmin-u-fc7473ca09eb svadmin-u-2689f3958069">{session.os ?? (isZh ? '未知系统' : 'Unknown OS')} - {session.browser ?? (isZh ? '未知浏览器' : 'Unknown browser')}</span>{#if session.current}<span class="svadmin-u-07389a777c1f svadmin-u-375dc44df6e9 svadmin-u-45d828117213 svadmin-u-465609a240a8 svadmin-u-1dc571a3609f svadmin-u-e83a7042bc91 svadmin-u-20aaf08a7ed1">{i18n.t('security.currentSession')}</span>{/if}</div><div class="svadmin-u-60fbb7713999 svadmin-u-1eb5c6df38c1 svadmin-u-3960ffc248d9 svadmin-u-77a2a20e90d4 svadmin-u-359090c2d529 svadmin-u-bfa603190748"><span>{session.ipAddress ?? '-'}</span><span>{session.lastActiveAt ? new Date(session.lastActiveAt).toLocaleString() : '-'}</span></div></div></div>
195
+ {#if !session.current}<Button variant="ghost" size="icon-sm" disabled={revoking !== null} onclick={() => revokeSession(session.id)} title={i18n.t('security.revokeSession')}><Trash2 class="svadmin-u-11e59c6d5f6b svadmin-u-dc7972ebf3f3" /></Button>{/if}
196
196
  </div>
197
197
  {/each}
198
198
  </div>
@@ -88,21 +88,21 @@
88
88
  }
89
89
  </script>
90
90
 
91
- <div class={cn('inline-flex items-center gap-1.5 font-mono text-xs text-foreground', className)}>
92
- <span class="truncate select-all">{displayedText}</span>
91
+ <div class={cn('svadmin-u-52083e7da442 svadmin-u-3960ffc248d9 svadmin-u-58284b4ea568 svadmin-u-0e65706bcccd svadmin-u-359090c2d529 svadmin-u-d4108abe6359', className)}>
92
+ <span class="svadmin-u-f283ea9bea0e svadmin-u-8078c71d23ee">{displayedText}</span>
93
93
 
94
94
  {#if allowUnmask && rawString}
95
95
  <Button
96
96
  variant="ghost"
97
97
  size="icon"
98
- class="h-5 w-5 text-muted-foreground hover:text-foreground"
98
+ class="svadmin-u-cd0d9c512cdc svadmin-u-72470489ff4e svadmin-u-bfa603190748 svadmin-u-ea7b2e9e070e"
99
99
  onclick={toggleMask}
100
100
  aria-label={isMasked ? 'Reveal sensitive data' : 'Mask sensitive data'}
101
101
  >
102
102
  {#if isMasked}
103
- <Eye class="h-3 w-3" />
103
+ <Eye class="svadmin-u-6a60c09e6aaa svadmin-u-9cea05671a29" />
104
104
  {:else}
105
- <EyeOff class="h-3 w-3" />
105
+ <EyeOff class="svadmin-u-6a60c09e6aaa svadmin-u-9cea05671a29" />
106
106
  {/if}
107
107
  </Button>
108
108
  {/if}
@@ -111,14 +111,14 @@
111
111
  <Button
112
112
  variant="ghost"
113
113
  size="icon"
114
- class="h-5 w-5 text-muted-foreground hover:text-foreground"
114
+ class="svadmin-u-cd0d9c512cdc svadmin-u-72470489ff4e svadmin-u-bfa603190748 svadmin-u-ea7b2e9e070e"
115
115
  onclick={handleCopy}
116
116
  aria-label="Copy to clipboard"
117
117
  >
118
118
  {#if isCopied}
119
- <Check class="h-3 w-3 text-success" />
119
+ <Check class="svadmin-u-6a60c09e6aaa svadmin-u-9cea05671a29 svadmin-u-76747e5e02ff" />
120
120
  {:else}
121
- <Copy class="h-3 w-3" />
121
+ <Copy class="svadmin-u-6a60c09e6aaa svadmin-u-9cea05671a29" />
122
122
  {/if}
123
123
  </Button>
124
124
  {/if}