@prenta/admin 2.6.0 → 2.7.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 (801) hide show
  1. package/CHANGELOG.md +104 -0
  2. package/design-system/tokens.css +179 -85
  3. package/design-system/tokens.json +276 -85
  4. package/design-system/tokens.scss +148 -44
  5. package/design-system/tokens.tailwind.cjs +50 -1
  6. package/dist/AdminRoot.d.ts.map +1 -1
  7. package/dist/AdminRoot.js +42 -20
  8. package/dist/AdminRoot.js.map +1 -1
  9. package/dist/LoginRoot.d.ts.map +1 -1
  10. package/dist/LoginRoot.js +2 -1
  11. package/dist/LoginRoot.js.map +1 -1
  12. package/dist/__tests__/components/author-avatar.test.js +3 -17
  13. package/dist/__tests__/components/author-avatar.test.js.map +1 -1
  14. package/dist/__tests__/components/notification-bell.test.js +86 -15
  15. package/dist/__tests__/components/notification-bell.test.js.map +1 -1
  16. package/dist/__tests__/components/responsive-tiers.render.test.d.ts +2 -0
  17. package/dist/__tests__/components/responsive-tiers.render.test.d.ts.map +1 -0
  18. package/dist/__tests__/components/responsive-tiers.render.test.js +313 -0
  19. package/dist/__tests__/components/responsive-tiers.render.test.js.map +1 -0
  20. package/dist/__tests__/components/serp-preview.render.test.js +6 -3
  21. package/dist/__tests__/components/serp-preview.render.test.js.map +1 -1
  22. package/dist/__tests__/components/shell-primitives.render.test.d.ts +2 -0
  23. package/dist/__tests__/components/shell-primitives.render.test.d.ts.map +1 -0
  24. package/dist/__tests__/components/shell-primitives.render.test.js +716 -0
  25. package/dist/__tests__/components/shell-primitives.render.test.js.map +1 -0
  26. package/dist/__tests__/components/theme-provider-accent.test.js +49 -7
  27. package/dist/__tests__/components/theme-provider-accent.test.js.map +1 -1
  28. package/dist/__tests__/components/toggle.test.js +10 -3
  29. package/dist/__tests__/components/toggle.test.js.map +1 -1
  30. package/dist/__tests__/components/ui-primitives.test.js +3 -7
  31. package/dist/__tests__/components/ui-primitives.test.js.map +1 -1
  32. package/dist/__tests__/layout/build-nav-items.test.js +1 -1
  33. package/dist/__tests__/layout/build-nav-items.test.js.map +1 -1
  34. package/dist/__tests__/layout/shell-nav.render.test.d.ts +2 -0
  35. package/dist/__tests__/layout/shell-nav.render.test.d.ts.map +1 -0
  36. package/dist/__tests__/layout/shell-nav.render.test.js +736 -0
  37. package/dist/__tests__/layout/shell-nav.render.test.js.map +1 -0
  38. package/dist/__tests__/layout/sidebar-forms-submenu.render.test.js +8 -4
  39. package/dist/__tests__/layout/sidebar-forms-submenu.render.test.js.map +1 -1
  40. package/dist/__tests__/layout/sidebar-groups.render.test.d.ts +2 -0
  41. package/dist/__tests__/layout/sidebar-groups.render.test.d.ts.map +1 -0
  42. package/dist/__tests__/layout/sidebar-groups.render.test.js +56 -0
  43. package/dist/__tests__/layout/sidebar-groups.render.test.js.map +1 -0
  44. package/dist/__tests__/layout/sidebar-menus.render.test.d.ts +2 -0
  45. package/dist/__tests__/layout/sidebar-menus.render.test.d.ts.map +1 -0
  46. package/dist/__tests__/layout/sidebar-menus.render.test.js +82 -0
  47. package/dist/__tests__/layout/sidebar-menus.render.test.js.map +1 -0
  48. package/dist/__tests__/layout/sidebar-plugin-nav.test.js +1 -1
  49. package/dist/__tests__/layout/sidebar-plugin-nav.test.js.map +1 -1
  50. package/dist/__tests__/layout/sidebar-posts.test.js +48 -38
  51. package/dist/__tests__/layout/sidebar-posts.test.js.map +1 -1
  52. package/dist/__tests__/layout/sidebar-submenu.render.test.js +26 -10
  53. package/dist/__tests__/layout/sidebar-submenu.render.test.js.map +1 -1
  54. package/dist/__tests__/layout/topbar.render.test.d.ts +2 -0
  55. package/dist/__tests__/layout/topbar.render.test.d.ts.map +1 -0
  56. package/dist/__tests__/layout/topbar.render.test.js +406 -0
  57. package/dist/__tests__/layout/topbar.render.test.js.map +1 -0
  58. package/dist/__tests__/lib/api.test.js +2 -0
  59. package/dist/__tests__/lib/api.test.js.map +1 -1
  60. package/dist/__tests__/lib/job-drawer.test.d.ts +2 -0
  61. package/dist/__tests__/lib/job-drawer.test.d.ts.map +1 -0
  62. package/dist/__tests__/lib/job-drawer.test.js +393 -0
  63. package/dist/__tests__/lib/job-drawer.test.js.map +1 -0
  64. package/dist/__tests__/lib/job-view.test.d.ts +2 -0
  65. package/dist/__tests__/lib/job-view.test.d.ts.map +1 -0
  66. package/dist/__tests__/lib/job-view.test.js +387 -0
  67. package/dist/__tests__/lib/job-view.test.js.map +1 -0
  68. package/dist/__tests__/lib/jobs-service.test.d.ts +2 -0
  69. package/dist/__tests__/lib/jobs-service.test.d.ts.map +1 -0
  70. package/dist/__tests__/lib/jobs-service.test.js +88 -0
  71. package/dist/__tests__/lib/jobs-service.test.js.map +1 -0
  72. package/dist/__tests__/router/admin-route-order.test.d.ts +2 -0
  73. package/dist/__tests__/router/admin-route-order.test.d.ts.map +1 -0
  74. package/dist/__tests__/router/admin-route-order.test.js +36 -0
  75. package/dist/__tests__/router/admin-route-order.test.js.map +1 -0
  76. package/dist/__tests__/styles/ai-gradient-contrast.test.d.ts +2 -0
  77. package/dist/__tests__/styles/ai-gradient-contrast.test.d.ts.map +1 -0
  78. package/dist/__tests__/styles/ai-gradient-contrast.test.js +110 -0
  79. package/dist/__tests__/styles/ai-gradient-contrast.test.js.map +1 -0
  80. package/dist/__tests__/styles/breakpoint-order.test.d.ts +2 -0
  81. package/dist/__tests__/styles/breakpoint-order.test.d.ts.map +1 -0
  82. package/dist/__tests__/styles/breakpoint-order.test.js +52 -0
  83. package/dist/__tests__/styles/breakpoint-order.test.js.map +1 -0
  84. package/dist/__tests__/styles/responsive-layer.test.js +303 -12
  85. package/dist/__tests__/styles/responsive-layer.test.js.map +1 -1
  86. package/dist/__tests__/styles/tailwind-preset.test.d.ts +2 -0
  87. package/dist/__tests__/styles/tailwind-preset.test.d.ts.map +1 -0
  88. package/dist/__tests__/styles/tailwind-preset.test.js +147 -0
  89. package/dist/__tests__/styles/tailwind-preset.test.js.map +1 -0
  90. package/dist/__tests__/styles/theme-token-scope.test.js +9 -3
  91. package/dist/__tests__/styles/theme-token-scope.test.js.map +1 -1
  92. package/dist/__tests__/styles/tiers.test.d.ts +2 -0
  93. package/dist/__tests__/styles/tiers.test.d.ts.map +1 -0
  94. package/dist/__tests__/styles/tiers.test.js +121 -0
  95. package/dist/__tests__/styles/tiers.test.js.map +1 -0
  96. package/dist/__tests__/styles/tokens-drift.test.js +57 -6
  97. package/dist/__tests__/styles/tokens-drift.test.js.map +1 -1
  98. package/dist/__tests__/views/admin-lazy-route.render.test.js +27 -1
  99. package/dist/__tests__/views/admin-lazy-route.render.test.js.map +1 -1
  100. package/dist/__tests__/views/ai-settings.render.test.js +4 -4
  101. package/dist/__tests__/views/appearance-menus-route.render.test.d.ts +2 -0
  102. package/dist/__tests__/views/appearance-menus-route.render.test.d.ts.map +1 -0
  103. package/dist/__tests__/views/appearance-menus-route.render.test.js +50 -0
  104. package/dist/__tests__/views/appearance-menus-route.render.test.js.map +1 -0
  105. package/dist/__tests__/views/appearance-settings.render.test.js +8 -6
  106. package/dist/__tests__/views/appearance-settings.render.test.js.map +1 -1
  107. package/dist/__tests__/views/appearance-theme-provider.render.test.d.ts +2 -0
  108. package/dist/__tests__/views/appearance-theme-provider.render.test.d.ts.map +1 -0
  109. package/dist/__tests__/views/appearance-theme-provider.render.test.js +286 -0
  110. package/dist/__tests__/views/appearance-theme-provider.render.test.js.map +1 -0
  111. package/dist/__tests__/views/dashboard.test.js +37 -0
  112. package/dist/__tests__/views/dashboard.test.js.map +1 -1
  113. package/dist/__tests__/views/document-edit-navigation.render.test.d.ts +2 -0
  114. package/dist/__tests__/views/document-edit-navigation.render.test.d.ts.map +1 -0
  115. package/dist/__tests__/views/document-edit-navigation.render.test.js +101 -0
  116. package/dist/__tests__/views/document-edit-navigation.render.test.js.map +1 -0
  117. package/dist/__tests__/views/document-edit-routes.render.test.d.ts +2 -0
  118. package/dist/__tests__/views/document-edit-routes.render.test.d.ts.map +1 -0
  119. package/dist/__tests__/views/document-edit-routes.render.test.js +113 -0
  120. package/dist/__tests__/views/document-edit-routes.render.test.js.map +1 -0
  121. package/dist/__tests__/views/email-settings.render.test.js +2 -2
  122. package/dist/__tests__/views/form-entries.render.test.js +15 -0
  123. package/dist/__tests__/views/form-entries.render.test.js.map +1 -1
  124. package/dist/__tests__/views/form-submissions.render.test.js +18 -0
  125. package/dist/__tests__/views/form-submissions.render.test.js.map +1 -1
  126. package/dist/__tests__/views/forms-list.render.test.js +12 -0
  127. package/dist/__tests__/views/forms-list.render.test.js.map +1 -1
  128. package/dist/__tests__/views/general-settings.render.test.js +26 -10
  129. package/dist/__tests__/views/general-settings.render.test.js.map +1 -1
  130. package/dist/__tests__/views/jobs-drawer.render.test.d.ts +2 -0
  131. package/dist/__tests__/views/jobs-drawer.render.test.d.ts.map +1 -0
  132. package/dist/__tests__/views/jobs-drawer.render.test.js +908 -0
  133. package/dist/__tests__/views/jobs-drawer.render.test.js.map +1 -0
  134. package/dist/__tests__/views/jobs-list.render.test.d.ts +2 -0
  135. package/dist/__tests__/views/jobs-list.render.test.d.ts.map +1 -0
  136. package/dist/__tests__/views/jobs-list.render.test.js +695 -0
  137. package/dist/__tests__/views/jobs-list.render.test.js.map +1 -0
  138. package/dist/__tests__/views/kpi-grid.test.d.ts +2 -0
  139. package/dist/__tests__/views/kpi-grid.test.d.ts.map +1 -0
  140. package/dist/__tests__/views/kpi-grid.test.js +26 -0
  141. package/dist/__tests__/views/kpi-grid.test.js.map +1 -0
  142. package/dist/__tests__/views/mcp-connect.render.test.js +1 -0
  143. package/dist/__tests__/views/mcp-connect.render.test.js.map +1 -1
  144. package/dist/__tests__/views/post-section-editor.test.js +3 -1
  145. package/dist/__tests__/views/post-section-editor.test.js.map +1 -1
  146. package/dist/__tests__/views/script-tags.render.test.js +25 -0
  147. package/dist/__tests__/views/script-tags.render.test.js.map +1 -1
  148. package/dist/__tests__/views/security-settings.render.test.js +9 -8
  149. package/dist/__tests__/views/security-settings.render.test.js.map +1 -1
  150. package/dist/__tests__/views/seo-settings.render.test.js +7 -7
  151. package/dist/__tests__/views/seo-settings.render.test.js.map +1 -1
  152. package/dist/__tests__/views/settings-save-bar.render.test.d.ts +2 -0
  153. package/dist/__tests__/views/settings-save-bar.render.test.d.ts.map +1 -0
  154. package/dist/__tests__/views/settings-save-bar.render.test.js +68 -0
  155. package/dist/__tests__/views/settings-save-bar.render.test.js.map +1 -0
  156. package/dist/__tests__/views/settings-save-footer.render.test.js +23 -15
  157. package/dist/__tests__/views/settings-save-footer.render.test.js.map +1 -1
  158. package/dist/__tests__/views/settings-tabs.render.test.d.ts +2 -0
  159. package/dist/__tests__/views/settings-tabs.render.test.d.ts.map +1 -0
  160. package/dist/__tests__/views/settings-tabs.render.test.js +319 -0
  161. package/dist/__tests__/views/settings-tabs.render.test.js.map +1 -0
  162. package/dist/__tests__/views/updates-tab.render.test.js +4 -3
  163. package/dist/__tests__/views/updates-tab.render.test.js.map +1 -1
  164. package/dist/components/Breadcrumbs.d.ts +8 -1
  165. package/dist/components/Breadcrumbs.d.ts.map +1 -1
  166. package/dist/components/Breadcrumbs.js +6 -0
  167. package/dist/components/Breadcrumbs.js.map +1 -1
  168. package/dist/components/CommandPalette.d.ts.map +1 -1
  169. package/dist/components/CommandPalette.js +40 -4
  170. package/dist/components/CommandPalette.js.map +1 -1
  171. package/dist/components/LocaleSwitcher.d.ts.map +1 -1
  172. package/dist/components/LocaleSwitcher.js +1 -1
  173. package/dist/components/LocaleSwitcher.js.map +1 -1
  174. package/dist/components/NotificationBell.d.ts.map +1 -1
  175. package/dist/components/NotificationBell.js +44 -3
  176. package/dist/components/NotificationBell.js.map +1 -1
  177. package/dist/components/OfflineStatus.js +1 -1
  178. package/dist/components/OfflineStatus.js.map +1 -1
  179. package/dist/components/PresenceIndicator.d.ts.map +1 -1
  180. package/dist/components/PresenceIndicator.js +2 -1
  181. package/dist/components/PresenceIndicator.js.map +1 -1
  182. package/dist/components/ReflowMeter.js +2 -2
  183. package/dist/components/ReflowMeter.js.map +1 -1
  184. package/dist/components/SEOPanel.js +2 -2
  185. package/dist/components/SEOPanel.js.map +1 -1
  186. package/dist/components/ThemeProvider.d.ts +24 -4
  187. package/dist/components/ThemeProvider.d.ts.map +1 -1
  188. package/dist/components/ThemeProvider.js +80 -22
  189. package/dist/components/ThemeProvider.js.map +1 -1
  190. package/dist/components/TipTapEditor.d.ts.map +1 -1
  191. package/dist/components/TipTapEditor.js +3 -4
  192. package/dist/components/TipTapEditor.js.map +1 -1
  193. package/dist/components/forms/EmbedPanel.js +1 -1
  194. package/dist/components/forms/EmbedPanel.js.map +1 -1
  195. package/dist/components/forms/FormEntryDetailPane.js +6 -1
  196. package/dist/components/forms/FormEntryDetailPane.js.map +1 -1
  197. package/dist/components/forms/ShortcodeGlossary.d.ts.map +1 -1
  198. package/dist/components/forms/ShortcodeGlossary.js +6 -1
  199. package/dist/components/forms/ShortcodeGlossary.js.map +1 -1
  200. package/dist/components/forms/primitives.d.ts +15 -5
  201. package/dist/components/forms/primitives.d.ts.map +1 -1
  202. package/dist/components/forms/primitives.js +11 -11
  203. package/dist/components/forms/primitives.js.map +1 -1
  204. package/dist/components/pages/tag-badges.d.ts +2 -1
  205. package/dist/components/pages/tag-badges.d.ts.map +1 -1
  206. package/dist/components/pages/tag-badges.js +4 -3
  207. package/dist/components/pages/tag-badges.js.map +1 -1
  208. package/dist/components/seo/PageAuditPanel.js +2 -2
  209. package/dist/components/seo/PageAuditPanel.js.map +1 -1
  210. package/dist/components/seo/SerpPreview.d.ts +4 -4
  211. package/dist/components/seo/SerpPreview.js +1 -1
  212. package/dist/components/seo/SerpPreview.js.map +1 -1
  213. package/dist/components/seo/primitives.js +2 -2
  214. package/dist/components/seo/primitives.js.map +1 -1
  215. package/dist/components/ui/AuthorAvatar.d.ts +4 -4
  216. package/dist/components/ui/AuthorAvatar.d.ts.map +1 -1
  217. package/dist/components/ui/AuthorAvatar.js +11 -10
  218. package/dist/components/ui/AuthorAvatar.js.map +1 -1
  219. package/dist/components/ui/Badge.d.ts +1 -1
  220. package/dist/components/ui/Badge.js +1 -1
  221. package/dist/components/ui/Badge.js.map +1 -1
  222. package/dist/components/ui/Breadcrumb.d.ts +27 -0
  223. package/dist/components/ui/Breadcrumb.d.ts.map +1 -0
  224. package/dist/components/ui/Breadcrumb.js +41 -0
  225. package/dist/components/ui/Breadcrumb.js.map +1 -0
  226. package/dist/components/ui/Button.d.ts +2 -2
  227. package/dist/components/ui/Button.d.ts.map +1 -1
  228. package/dist/components/ui/Button.js +31 -16
  229. package/dist/components/ui/Button.js.map +1 -1
  230. package/dist/components/ui/Card.d.ts +8 -4
  231. package/dist/components/ui/Card.d.ts.map +1 -1
  232. package/dist/components/ui/Card.js +21 -13
  233. package/dist/components/ui/Card.js.map +1 -1
  234. package/dist/components/ui/CardListControls.d.ts +34 -0
  235. package/dist/components/ui/CardListControls.d.ts.map +1 -0
  236. package/dist/components/ui/CardListControls.js +25 -0
  237. package/dist/components/ui/CardListControls.js.map +1 -0
  238. package/dist/components/ui/CountChip.d.ts +20 -0
  239. package/dist/components/ui/CountChip.d.ts.map +1 -0
  240. package/dist/components/ui/CountChip.js +48 -0
  241. package/dist/components/ui/CountChip.js.map +1 -0
  242. package/dist/components/ui/FilterPill.d.ts +2 -1
  243. package/dist/components/ui/FilterPill.d.ts.map +1 -1
  244. package/dist/components/ui/FilterPill.js +3 -2
  245. package/dist/components/ui/FilterPill.js.map +1 -1
  246. package/dist/components/ui/Input.d.ts +1 -1
  247. package/dist/components/ui/InspectorPane.d.ts +1 -1
  248. package/dist/components/ui/InspectorPane.d.ts.map +1 -1
  249. package/dist/components/ui/InspectorPane.js +15 -4
  250. package/dist/components/ui/InspectorPane.js.map +1 -1
  251. package/dist/components/ui/Modal.d.ts.map +1 -1
  252. package/dist/components/ui/Modal.js +10 -2
  253. package/dist/components/ui/Modal.js.map +1 -1
  254. package/dist/components/ui/PageHeader.d.ts +28 -0
  255. package/dist/components/ui/PageHeader.d.ts.map +1 -0
  256. package/dist/components/ui/PageHeader.js +18 -0
  257. package/dist/components/ui/PageHeader.js.map +1 -0
  258. package/dist/components/ui/RowActions.d.ts +5 -0
  259. package/dist/components/ui/RowActions.d.ts.map +1 -1
  260. package/dist/components/ui/RowActions.js +7 -2
  261. package/dist/components/ui/RowActions.js.map +1 -1
  262. package/dist/components/ui/Segmented.d.ts +21 -0
  263. package/dist/components/ui/Segmented.d.ts.map +1 -0
  264. package/dist/components/ui/Segmented.js +41 -0
  265. package/dist/components/ui/Segmented.js.map +1 -0
  266. package/dist/components/ui/Toaster.d.ts +12 -0
  267. package/dist/components/ui/Toaster.d.ts.map +1 -0
  268. package/dist/components/ui/Toaster.js +103 -0
  269. package/dist/components/ui/Toaster.js.map +1 -0
  270. package/dist/components/ui/Toggle.d.ts +4 -3
  271. package/dist/components/ui/Toggle.d.ts.map +1 -1
  272. package/dist/components/ui/Toggle.js +16 -12
  273. package/dist/components/ui/Toggle.js.map +1 -1
  274. package/dist/components/ui/UnderlineTabs.d.ts +56 -0
  275. package/dist/components/ui/UnderlineTabs.d.ts.map +1 -0
  276. package/dist/components/ui/UnderlineTabs.js +205 -0
  277. package/dist/components/ui/UnderlineTabs.js.map +1 -0
  278. package/dist/components/ui/UnsavedBar.d.ts +25 -0
  279. package/dist/components/ui/UnsavedBar.d.ts.map +1 -0
  280. package/dist/components/ui/UnsavedBar.js +22 -0
  281. package/dist/components/ui/UnsavedBar.js.map +1 -0
  282. package/dist/components/ui/admin-links.d.ts +11 -0
  283. package/dist/components/ui/admin-links.d.ts.map +1 -0
  284. package/dist/components/ui/admin-links.js +10 -0
  285. package/dist/components/ui/admin-links.js.map +1 -0
  286. package/dist/components/ui/card-table.d.ts +43 -0
  287. package/dist/components/ui/card-table.d.ts.map +1 -0
  288. package/dist/components/ui/card-table.js +31 -0
  289. package/dist/components/ui/card-table.js.map +1 -0
  290. package/dist/components/virtual-window.d.ts +7 -0
  291. package/dist/components/virtual-window.d.ts.map +1 -1
  292. package/dist/components/virtual-window.js +5 -2
  293. package/dist/components/virtual-window.js.map +1 -1
  294. package/dist/fields/RelationshipField.js +1 -1
  295. package/dist/fields/RelationshipField.js.map +1 -1
  296. package/dist/files/dm-mono-latin-400-normal.woff +0 -0
  297. package/dist/files/dm-mono-latin-400-normal.woff2 +0 -0
  298. package/dist/files/dm-mono-latin-500-normal.woff +0 -0
  299. package/dist/files/dm-mono-latin-500-normal.woff2 +0 -0
  300. package/dist/files/dm-mono-latin-ext-400-normal.woff +0 -0
  301. package/dist/files/dm-mono-latin-ext-400-normal.woff2 +0 -0
  302. package/dist/files/dm-mono-latin-ext-500-normal.woff +0 -0
  303. package/dist/files/dm-mono-latin-ext-500-normal.woff2 +0 -0
  304. package/dist/files/dm-sans-latin-400-normal.woff +0 -0
  305. package/dist/files/dm-sans-latin-400-normal.woff2 +0 -0
  306. package/dist/files/dm-sans-latin-500-normal.woff +0 -0
  307. package/dist/files/dm-sans-latin-500-normal.woff2 +0 -0
  308. package/dist/files/dm-sans-latin-600-normal.woff +0 -0
  309. package/dist/files/dm-sans-latin-600-normal.woff2 +0 -0
  310. package/dist/files/dm-sans-latin-700-normal.woff +0 -0
  311. package/dist/files/dm-sans-latin-700-normal.woff2 +0 -0
  312. package/dist/files/dm-sans-latin-ext-400-normal.woff +0 -0
  313. package/dist/files/dm-sans-latin-ext-400-normal.woff2 +0 -0
  314. package/dist/files/dm-sans-latin-ext-500-normal.woff +0 -0
  315. package/dist/files/dm-sans-latin-ext-500-normal.woff2 +0 -0
  316. package/dist/files/dm-sans-latin-ext-600-normal.woff +0 -0
  317. package/dist/files/dm-sans-latin-ext-600-normal.woff2 +0 -0
  318. package/dist/files/dm-sans-latin-ext-700-normal.woff +0 -0
  319. package/dist/files/dm-sans-latin-ext-700-normal.woff2 +0 -0
  320. package/dist/hooks/useAppearanceBootstrap.d.ts.map +1 -1
  321. package/dist/hooks/useAppearanceBootstrap.js +9 -3
  322. package/dist/hooks/useAppearanceBootstrap.js.map +1 -1
  323. package/dist/index.d.ts +15 -0
  324. package/dist/index.d.ts.map +1 -1
  325. package/dist/index.js +8 -0
  326. package/dist/index.js.map +1 -1
  327. package/dist/layout/Header.d.ts +14 -5
  328. package/dist/layout/Header.d.ts.map +1 -1
  329. package/dist/layout/Header.js +78 -13
  330. package/dist/layout/Header.js.map +1 -1
  331. package/dist/layout/Layout.d.ts +5 -3
  332. package/dist/layout/Layout.d.ts.map +1 -1
  333. package/dist/layout/Layout.js +45 -54
  334. package/dist/layout/Layout.js.map +1 -1
  335. package/dist/layout/MobileTabBar.d.ts +20 -0
  336. package/dist/layout/MobileTabBar.d.ts.map +1 -0
  337. package/dist/layout/MobileTabBar.js +29 -0
  338. package/dist/layout/MobileTabBar.js.map +1 -0
  339. package/dist/layout/Sidebar.d.ts +8 -26
  340. package/dist/layout/Sidebar.d.ts.map +1 -1
  341. package/dist/layout/Sidebar.js +309 -345
  342. package/dist/layout/Sidebar.js.map +1 -1
  343. package/dist/layout/nav-config.d.ts +101 -0
  344. package/dist/layout/nav-config.d.ts.map +1 -0
  345. package/dist/layout/nav-config.js +297 -0
  346. package/dist/layout/nav-config.js.map +1 -0
  347. package/dist/layout/primitives/AdminShell.d.ts +10 -2
  348. package/dist/layout/primitives/AdminShell.d.ts.map +1 -1
  349. package/dist/layout/primitives/AdminShell.js +114 -6
  350. package/dist/layout/primitives/AdminShell.js.map +1 -1
  351. package/dist/layout/topbar-classes.d.ts +8 -0
  352. package/dist/layout/topbar-classes.d.ts.map +1 -0
  353. package/dist/layout/topbar-classes.js +8 -0
  354. package/dist/layout/topbar-classes.js.map +1 -0
  355. package/dist/layout/use-nav-items.d.ts +10 -0
  356. package/dist/layout/use-nav-items.d.ts.map +1 -0
  357. package/dist/layout/use-nav-items.js +39 -0
  358. package/dist/layout/use-nav-items.js.map +1 -0
  359. package/dist/lib/api.d.ts +6 -0
  360. package/dist/lib/api.d.ts.map +1 -1
  361. package/dist/lib/api.js +1 -1
  362. package/dist/lib/api.js.map +1 -1
  363. package/dist/lib/appearance-api.d.ts +3 -1
  364. package/dist/lib/appearance-api.d.ts.map +1 -1
  365. package/dist/lib/appearance-api.js +1 -0
  366. package/dist/lib/appearance-api.js.map +1 -1
  367. package/dist/lib/job-drawer.d.ts +128 -0
  368. package/dist/lib/job-drawer.d.ts.map +1 -0
  369. package/dist/lib/job-drawer.js +351 -0
  370. package/dist/lib/job-drawer.js.map +1 -0
  371. package/dist/lib/job-view.d.ts +187 -0
  372. package/dist/lib/job-view.d.ts.map +1 -0
  373. package/dist/lib/job-view.js +363 -0
  374. package/dist/lib/job-view.js.map +1 -0
  375. package/dist/lib/jobs-service.d.ts +134 -0
  376. package/dist/lib/jobs-service.d.ts.map +1 -0
  377. package/dist/lib/jobs-service.js +179 -0
  378. package/dist/lib/jobs-service.js.map +1 -0
  379. package/dist/lib/sheet-focus.d.ts +24 -0
  380. package/dist/lib/sheet-focus.d.ts.map +1 -0
  381. package/dist/lib/sheet-focus.js +61 -0
  382. package/dist/lib/sheet-focus.js.map +1 -0
  383. package/dist/lib/tiers.d.ts +30 -0
  384. package/dist/lib/tiers.d.ts.map +1 -0
  385. package/dist/lib/tiers.js +43 -0
  386. package/dist/lib/tiers.js.map +1 -0
  387. package/dist/prenta-admin.css +1 -1
  388. package/dist/router/admin-routes.d.ts.map +1 -1
  389. package/dist/router/admin-routes.js +8 -0
  390. package/dist/router/admin-routes.js.map +1 -1
  391. package/dist/router/index.d.ts +5 -1
  392. package/dist/router/index.d.ts.map +1 -1
  393. package/dist/router/index.js +7 -0
  394. package/dist/router/index.js.map +1 -1
  395. package/dist/views/ApiKeys.js +2 -2
  396. package/dist/views/ApiKeys.js.map +1 -1
  397. package/dist/views/AppearanceChrome.d.ts +6 -0
  398. package/dist/views/AppearanceChrome.d.ts.map +1 -0
  399. package/dist/views/AppearanceChrome.js +25 -0
  400. package/dist/views/AppearanceChrome.js.map +1 -0
  401. package/dist/views/CollectionList.d.ts.map +1 -1
  402. package/dist/views/CollectionList.js +73 -53
  403. package/dist/views/CollectionList.js.map +1 -1
  404. package/dist/views/Dashboard.d.ts.map +1 -1
  405. package/dist/views/Dashboard.js +14 -8
  406. package/dist/views/Dashboard.js.map +1 -1
  407. package/dist/views/DocumentEdit.d.ts +6 -1
  408. package/dist/views/DocumentEdit.d.ts.map +1 -1
  409. package/dist/views/DocumentEdit.js +44 -8
  410. package/dist/views/DocumentEdit.js.map +1 -1
  411. package/dist/views/FormDeliveries.d.ts.map +1 -1
  412. package/dist/views/FormDeliveries.js +7 -1
  413. package/dist/views/FormDeliveries.js.map +1 -1
  414. package/dist/views/FormEntries.d.ts.map +1 -1
  415. package/dist/views/FormEntries.js +11 -2
  416. package/dist/views/FormEntries.js.map +1 -1
  417. package/dist/views/FormSubmissions.d.ts +1 -1
  418. package/dist/views/FormSubmissions.d.ts.map +1 -1
  419. package/dist/views/FormSubmissions.js +15 -4
  420. package/dist/views/FormSubmissions.js.map +1 -1
  421. package/dist/views/Forms.d.ts.map +1 -1
  422. package/dist/views/Forms.js +6 -4
  423. package/dist/views/Forms.js.map +1 -1
  424. package/dist/views/FormsSettings.d.ts +2 -0
  425. package/dist/views/FormsSettings.d.ts.map +1 -0
  426. package/dist/views/FormsSettings.js +37 -0
  427. package/dist/views/FormsSettings.js.map +1 -0
  428. package/dist/views/Jobs/BusyButton.d.ts +15 -0
  429. package/dist/views/Jobs/BusyButton.d.ts.map +1 -0
  430. package/dist/views/Jobs/BusyButton.js +26 -0
  431. package/dist/views/Jobs/BusyButton.js.map +1 -0
  432. package/dist/views/Jobs/CancelJobDialog.d.ts +21 -0
  433. package/dist/views/Jobs/CancelJobDialog.d.ts.map +1 -0
  434. package/dist/views/Jobs/CancelJobDialog.js +66 -0
  435. package/dist/views/Jobs/CancelJobDialog.js.map +1 -0
  436. package/dist/views/Jobs/DrawerActivity.d.ts +16 -0
  437. package/dist/views/Jobs/DrawerActivity.d.ts.map +1 -0
  438. package/dist/views/Jobs/DrawerActivity.js +59 -0
  439. package/dist/views/Jobs/DrawerActivity.js.map +1 -0
  440. package/dist/views/Jobs/DrawerOverview.d.ts +28 -0
  441. package/dist/views/Jobs/DrawerOverview.d.ts.map +1 -0
  442. package/dist/views/Jobs/DrawerOverview.js +32 -0
  443. package/dist/views/Jobs/DrawerOverview.js.map +1 -0
  444. package/dist/views/Jobs/DrawerResults.d.ts +25 -0
  445. package/dist/views/Jobs/DrawerResults.d.ts.map +1 -0
  446. package/dist/views/Jobs/DrawerResults.js +50 -0
  447. package/dist/views/Jobs/DrawerResults.js.map +1 -0
  448. package/dist/views/Jobs/DrawerReview.d.ts +44 -0
  449. package/dist/views/Jobs/DrawerReview.d.ts.map +1 -0
  450. package/dist/views/Jobs/DrawerReview.js +110 -0
  451. package/dist/views/Jobs/DrawerReview.js.map +1 -0
  452. package/dist/views/Jobs/JobDrawer.d.ts +31 -0
  453. package/dist/views/Jobs/JobDrawer.d.ts.map +1 -0
  454. package/dist/views/Jobs/JobDrawer.js +353 -0
  455. package/dist/views/Jobs/JobDrawer.js.map +1 -0
  456. package/dist/views/Jobs/JobsTable.d.ts +19 -0
  457. package/dist/views/Jobs/JobsTable.d.ts.map +1 -0
  458. package/dist/views/Jobs/JobsTable.js +80 -0
  459. package/dist/views/Jobs/JobsTable.js.map +1 -0
  460. package/dist/views/Jobs/WorkerStrip.d.ts +22 -0
  461. package/dist/views/Jobs/WorkerStrip.d.ts.map +1 -0
  462. package/dist/views/Jobs/WorkerStrip.js +63 -0
  463. package/dist/views/Jobs/WorkerStrip.js.map +1 -0
  464. package/dist/views/Jobs/atoms.d.ts +19 -0
  465. package/dist/views/Jobs/atoms.d.ts.map +1 -0
  466. package/dist/views/Jobs/atoms.js +52 -0
  467. package/dist/views/Jobs/atoms.js.map +1 -0
  468. package/dist/views/Jobs/focus.d.ts +23 -0
  469. package/dist/views/Jobs/focus.d.ts.map +1 -0
  470. package/dist/views/Jobs/focus.js +54 -0
  471. package/dist/views/Jobs/focus.js.map +1 -0
  472. package/dist/views/Jobs/icons.d.ts +22 -0
  473. package/dist/views/Jobs/icons.d.ts.map +1 -0
  474. package/dist/views/Jobs/icons.js +23 -0
  475. package/dist/views/Jobs/icons.js.map +1 -0
  476. package/dist/views/Jobs/placeholders.d.ts +6 -0
  477. package/dist/views/Jobs/placeholders.d.ts.map +1 -0
  478. package/dist/views/Jobs/placeholders.js +20 -0
  479. package/dist/views/Jobs/placeholders.js.map +1 -0
  480. package/dist/views/Jobs/useJobDetail.d.ts +21 -0
  481. package/dist/views/Jobs/useJobDetail.d.ts.map +1 -0
  482. package/dist/views/Jobs/useJobDetail.js +39 -0
  483. package/dist/views/Jobs/useJobDetail.js.map +1 -0
  484. package/dist/views/Jobs/useJobsFeed.d.ts +35 -0
  485. package/dist/views/Jobs/useJobsFeed.d.ts.map +1 -0
  486. package/dist/views/Jobs/useJobsFeed.js +231 -0
  487. package/dist/views/Jobs/useJobsFeed.js.map +1 -0
  488. package/dist/views/Jobs/useReviewItems.d.ts +39 -0
  489. package/dist/views/Jobs/useReviewItems.d.ts.map +1 -0
  490. package/dist/views/Jobs/useReviewItems.js +140 -0
  491. package/dist/views/Jobs/useReviewItems.js.map +1 -0
  492. package/dist/views/Jobs.d.ts +10 -1
  493. package/dist/views/Jobs.d.ts.map +1 -1
  494. package/dist/views/Jobs.js +126 -35
  495. package/dist/views/Jobs.js.map +1 -1
  496. package/dist/views/MediaBrowser.d.ts.map +1 -1
  497. package/dist/views/MediaBrowser.js +37 -9
  498. package/dist/views/MediaBrowser.js.map +1 -1
  499. package/dist/views/Pages/PagesListView.d.ts +1 -1
  500. package/dist/views/Pages/PagesListView.d.ts.map +1 -1
  501. package/dist/views/Pages/PagesListView.js +34 -5
  502. package/dist/views/Pages/PagesListView.js.map +1 -1
  503. package/dist/views/Posts/NewPostTypeInstructions.d.ts.map +1 -1
  504. package/dist/views/Posts/NewPostTypeInstructions.js +12 -2
  505. package/dist/views/Posts/NewPostTypeInstructions.js.map +1 -1
  506. package/dist/views/Posts/PostTypesView.d.ts.map +1 -1
  507. package/dist/views/Posts/PostTypesView.js +10 -1
  508. package/dist/views/Posts/PostTypesView.js.map +1 -1
  509. package/dist/views/Posts/PostsListView.d.ts +1 -2
  510. package/dist/views/Posts/PostsListView.d.ts.map +1 -1
  511. package/dist/views/Posts/PostsListView.js +31 -3
  512. package/dist/views/Posts/PostsListView.js.map +1 -1
  513. package/dist/views/SEO.d.ts.map +1 -1
  514. package/dist/views/SEO.js +3 -3
  515. package/dist/views/SEO.js.map +1 -1
  516. package/dist/views/ScriptTags.d.ts.map +1 -1
  517. package/dist/views/ScriptTags.js +20 -15
  518. package/dist/views/ScriptTags.js.map +1 -1
  519. package/dist/views/Settings.d.ts.map +1 -1
  520. package/dist/views/Settings.js +115 -51
  521. package/dist/views/Settings.js.map +1 -1
  522. package/dist/views/SpamFolder.d.ts +2 -0
  523. package/dist/views/SpamFolder.d.ts.map +1 -0
  524. package/dist/views/SpamFolder.js +14 -0
  525. package/dist/views/SpamFolder.js.map +1 -0
  526. package/dist/views/Trash.d.ts +6 -1
  527. package/dist/views/Trash.d.ts.map +1 -1
  528. package/dist/views/Trash.js +7 -2
  529. package/dist/views/Trash.js.map +1 -1
  530. package/dist/views/Users.js +2 -2
  531. package/dist/views/Users.js.map +1 -1
  532. package/dist/views/WidgetsPlaceholder.d.ts +2 -0
  533. package/dist/views/WidgetsPlaceholder.d.ts.map +1 -0
  534. package/dist/views/WidgetsPlaceholder.js +15 -0
  535. package/dist/views/WidgetsPlaceholder.js.map +1 -0
  536. package/dist/views/dashboard/kpi-grid.d.ts +18 -0
  537. package/dist/views/dashboard/kpi-grid.d.ts.map +1 -0
  538. package/dist/views/dashboard/kpi-grid.js +36 -0
  539. package/dist/views/dashboard/kpi-grid.js.map +1 -0
  540. package/dist/views/lazy-views.d.ts +4 -0
  541. package/dist/views/lazy-views.d.ts.map +1 -1
  542. package/dist/views/lazy-views.js +4 -0
  543. package/dist/views/lazy-views.js.map +1 -1
  544. package/dist/views/page-editor/PageTab.js +1 -1
  545. package/dist/views/page-editor/PageTab.js.map +1 -1
  546. package/dist/views/page-editor/ReviewBar.js +1 -1
  547. package/dist/views/page-editor/ReviewBar.js.map +1 -1
  548. package/dist/views/page-editor/VersionHistoryPanel.js +1 -1
  549. package/dist/views/page-editor/VersionHistoryPanel.js.map +1 -1
  550. package/dist/views/seo/AuditTab.js +1 -1
  551. package/dist/views/seo/AuditTab.js.map +1 -1
  552. package/dist/views/seo/OverviewTab.d.ts.map +1 -1
  553. package/dist/views/seo/OverviewTab.js +2 -2
  554. package/dist/views/seo/OverviewTab.js.map +1 -1
  555. package/dist/views/seo/ProposalsTab.js +1 -1
  556. package/dist/views/seo/ProposalsTab.js.map +1 -1
  557. package/dist/views/settings/AISettingsTab.d.ts.map +1 -1
  558. package/dist/views/settings/AISettingsTab.js +4 -2
  559. package/dist/views/settings/AISettingsTab.js.map +1 -1
  560. package/dist/views/settings/AccessProtectionCard.js +1 -1
  561. package/dist/views/settings/AccessProtectionCard.js.map +1 -1
  562. package/dist/views/settings/AdminThemeCard.d.ts.map +1 -1
  563. package/dist/views/settings/AdminThemeCard.js +63 -15
  564. package/dist/views/settings/AdminThemeCard.js.map +1 -1
  565. package/dist/views/settings/AppearanceTab.d.ts.map +1 -1
  566. package/dist/views/settings/AppearanceTab.js +4 -2
  567. package/dist/views/settings/AppearanceTab.js.map +1 -1
  568. package/dist/views/settings/BrandPreviewCard.js +1 -1
  569. package/dist/views/settings/BrandPreviewCard.js.map +1 -1
  570. package/dist/views/settings/BrandVoiceCard.js +1 -1
  571. package/dist/views/settings/BrandVoiceCard.js.map +1 -1
  572. package/dist/views/settings/EmailSettingsTab.d.ts.map +1 -1
  573. package/dist/views/settings/EmailSettingsTab.js +5 -3
  574. package/dist/views/settings/EmailSettingsTab.js.map +1 -1
  575. package/dist/views/settings/GeneralSettingsTab.d.ts.map +1 -1
  576. package/dist/views/settings/GeneralSettingsTab.js +4 -2
  577. package/dist/views/settings/GeneralSettingsTab.js.map +1 -1
  578. package/dist/views/settings/McpConnectTab.d.ts.map +1 -1
  579. package/dist/views/settings/McpConnectTab.js +1 -1
  580. package/dist/views/settings/McpConnectTab.js.map +1 -1
  581. package/dist/views/settings/ProviderConnectionCard.js +1 -1
  582. package/dist/views/settings/ProviderConnectionCard.js.map +1 -1
  583. package/dist/views/settings/SearchDataCard.js +1 -1
  584. package/dist/views/settings/SearchDataCard.js.map +1 -1
  585. package/dist/views/settings/SecurityStatusCard.js +2 -2
  586. package/dist/views/settings/SecurityStatusCard.js.map +1 -1
  587. package/dist/views/settings/SecurityTab.d.ts.map +1 -1
  588. package/dist/views/settings/SecurityTab.js +4 -2
  589. package/dist/views/settings/SecurityTab.js.map +1 -1
  590. package/dist/views/settings/SeoAutopilotCard.js +2 -2
  591. package/dist/views/settings/SeoAutopilotCard.js.map +1 -1
  592. package/dist/views/settings/SeoSettingsTab.d.ts.map +1 -1
  593. package/dist/views/settings/SeoSettingsTab.js +5 -3
  594. package/dist/views/settings/SeoSettingsTab.js.map +1 -1
  595. package/dist/views/settings/SiteIndexStatusCard.js +1 -1
  596. package/dist/views/settings/SiteIndexStatusCard.js.map +1 -1
  597. package/dist/views/settings/SiteThemeCard.js +1 -1
  598. package/dist/views/settings/UpdatesTab.d.ts.map +1 -1
  599. package/dist/views/settings/UpdatesTab.js +6 -5
  600. package/dist/views/settings/UpdatesTab.js.map +1 -1
  601. package/dist/views/settings/components.d.ts +7 -11
  602. package/dist/views/settings/components.d.ts.map +1 -1
  603. package/dist/views/settings/components.js +18 -12
  604. package/dist/views/settings/components.js.map +1 -1
  605. package/dist/views/settings/useAppearanceSettings.d.ts +7 -1
  606. package/dist/views/settings/useAppearanceSettings.d.ts.map +1 -1
  607. package/dist/views/settings/useAppearanceSettings.js +89 -22
  608. package/dist/views/settings/useAppearanceSettings.js.map +1 -1
  609. package/dist/views/users/UserDetailDrawer.js +1 -1
  610. package/dist/views/users/UserDetailDrawer.js.map +1 -1
  611. package/package.json +11 -9
  612. package/src/AdminRoot.tsx +88 -30
  613. package/src/LoginRoot.tsx +2 -1
  614. package/src/__tests__/components/author-avatar.test.tsx +3 -20
  615. package/src/__tests__/components/notification-bell.test.tsx +146 -14
  616. package/src/__tests__/components/responsive-tiers.render.test.tsx +461 -0
  617. package/src/__tests__/components/serp-preview.render.test.tsx +6 -3
  618. package/src/__tests__/components/shell-primitives.render.test.tsx +951 -0
  619. package/src/__tests__/components/theme-provider-accent.test.tsx +83 -8
  620. package/src/__tests__/components/toggle.test.tsx +11 -3
  621. package/src/__tests__/components/ui-primitives.test.tsx +5 -8
  622. package/src/__tests__/layout/build-nav-items.test.ts +1 -1
  623. package/src/__tests__/layout/shell-nav.render.test.tsx +983 -0
  624. package/src/__tests__/layout/sidebar-forms-submenu.render.test.tsx +8 -4
  625. package/src/__tests__/layout/sidebar-groups.render.test.tsx +116 -0
  626. package/src/__tests__/layout/sidebar-menus.render.test.tsx +116 -0
  627. package/src/__tests__/layout/sidebar-plugin-nav.test.ts +1 -1
  628. package/src/__tests__/layout/sidebar-posts.test.ts +48 -40
  629. package/src/__tests__/layout/sidebar-submenu.render.test.tsx +35 -10
  630. package/src/__tests__/layout/topbar.render.test.tsx +464 -0
  631. package/src/__tests__/lib/api.test.ts +2 -0
  632. package/src/__tests__/lib/job-drawer.test.ts +493 -0
  633. package/src/__tests__/lib/job-view.test.ts +437 -0
  634. package/src/__tests__/lib/jobs-service.test.ts +98 -0
  635. package/src/__tests__/router/admin-route-order.test.ts +39 -0
  636. package/src/__tests__/styles/ai-gradient-contrast.test.ts +135 -0
  637. package/src/__tests__/styles/breakpoint-order.test.ts +68 -0
  638. package/src/__tests__/styles/responsive-layer.test.ts +367 -12
  639. package/src/__tests__/styles/tailwind-preset.test.ts +154 -0
  640. package/src/__tests__/styles/theme-token-scope.test.ts +10 -3
  641. package/src/__tests__/styles/tiers.test.ts +136 -0
  642. package/src/__tests__/styles/tokens-drift.test.ts +67 -6
  643. package/src/__tests__/views/admin-lazy-route.render.test.tsx +41 -1
  644. package/src/__tests__/views/ai-settings.render.test.tsx +4 -4
  645. package/src/__tests__/views/appearance-menus-route.render.test.tsx +58 -0
  646. package/src/__tests__/views/appearance-settings.render.test.tsx +10 -8
  647. package/src/__tests__/views/appearance-theme-provider.render.test.tsx +347 -0
  648. package/src/__tests__/views/dashboard.test.tsx +48 -0
  649. package/src/__tests__/views/document-edit-navigation.render.test.tsx +130 -0
  650. package/src/__tests__/views/document-edit-routes.render.test.tsx +130 -0
  651. package/src/__tests__/views/email-settings.render.test.tsx +2 -2
  652. package/src/__tests__/views/form-entries.render.test.tsx +22 -0
  653. package/src/__tests__/views/form-submissions.render.test.tsx +22 -0
  654. package/src/__tests__/views/forms-list.render.test.tsx +13 -0
  655. package/src/__tests__/views/general-settings.render.test.tsx +38 -11
  656. package/src/__tests__/views/jobs-drawer.render.test.tsx +1047 -0
  657. package/src/__tests__/views/jobs-list.render.test.tsx +850 -0
  658. package/src/__tests__/views/kpi-grid.test.ts +29 -0
  659. package/src/__tests__/views/mcp-connect.render.test.tsx +1 -0
  660. package/src/__tests__/views/post-section-editor.test.tsx +5 -1
  661. package/src/__tests__/views/script-tags.render.test.tsx +29 -0
  662. package/src/__tests__/views/security-settings.render.test.tsx +9 -10
  663. package/src/__tests__/views/seo-settings.render.test.tsx +7 -9
  664. package/src/__tests__/views/settings-save-bar.render.test.tsx +91 -0
  665. package/src/__tests__/views/settings-save-footer.render.test.tsx +25 -15
  666. package/src/__tests__/views/settings-tabs.render.test.tsx +371 -0
  667. package/src/__tests__/views/updates-tab.render.test.tsx +4 -3
  668. package/src/components/Breadcrumbs.tsx +7 -1
  669. package/src/components/CommandPalette.tsx +51 -3
  670. package/src/components/LocaleSwitcher.tsx +5 -6
  671. package/src/components/NotificationBell.tsx +74 -18
  672. package/src/components/OfflineStatus.tsx +1 -1
  673. package/src/components/PresenceIndicator.tsx +2 -1
  674. package/src/components/ReflowMeter.tsx +3 -3
  675. package/src/components/SEOPanel.tsx +2 -2
  676. package/src/components/ThemeProvider.tsx +122 -42
  677. package/src/components/TipTapEditor.tsx +3 -4
  678. package/src/components/forms/EmbedPanel.tsx +1 -1
  679. package/src/components/forms/FormEntryDetailPane.tsx +7 -1
  680. package/src/components/forms/ShortcodeGlossary.tsx +7 -1
  681. package/src/components/forms/primitives.tsx +37 -21
  682. package/src/components/pages/tag-badges.tsx +4 -3
  683. package/src/components/seo/PageAuditPanel.tsx +2 -2
  684. package/src/components/seo/SerpPreview.tsx +5 -5
  685. package/src/components/seo/primitives.tsx +2 -2
  686. package/src/components/ui/AuthorAvatar.tsx +11 -10
  687. package/src/components/ui/Badge.tsx +1 -1
  688. package/src/components/ui/Breadcrumb.tsx +109 -0
  689. package/src/components/ui/Button.tsx +40 -15
  690. package/src/components/ui/Card.tsx +35 -32
  691. package/src/components/ui/CardListControls.tsx +90 -0
  692. package/src/components/ui/CountChip.tsx +90 -0
  693. package/src/components/ui/FilterPill.tsx +5 -3
  694. package/src/components/ui/InspectorPane.tsx +21 -7
  695. package/src/components/ui/Modal.tsx +20 -6
  696. package/src/components/ui/PageHeader.tsx +63 -0
  697. package/src/components/ui/RowActions.tsx +7 -2
  698. package/src/components/ui/Segmented.tsx +97 -0
  699. package/src/components/ui/Toaster.tsx +139 -0
  700. package/src/components/ui/Toggle.tsx +18 -14
  701. package/src/components/ui/UnderlineTabs.tsx +373 -0
  702. package/src/components/ui/UnsavedBar.tsx +119 -0
  703. package/src/components/ui/admin-links.tsx +20 -0
  704. package/src/components/ui/card-table.ts +34 -0
  705. package/src/components/virtual-window.tsx +13 -2
  706. package/src/fields/RelationshipField.tsx +1 -1
  707. package/src/hooks/useAppearanceBootstrap.ts +9 -3
  708. package/src/index.ts +19 -0
  709. package/src/layout/Header.tsx +210 -135
  710. package/src/layout/Layout.tsx +61 -108
  711. package/src/layout/MobileTabBar.tsx +92 -0
  712. package/src/layout/Sidebar.tsx +555 -593
  713. package/src/layout/nav-config.tsx +425 -0
  714. package/src/layout/primitives/AdminShell.tsx +154 -6
  715. package/src/layout/topbar-classes.ts +8 -0
  716. package/src/layout/use-nav-items.ts +40 -0
  717. package/src/lib/api.ts +7 -1
  718. package/src/lib/appearance-api.ts +4 -0
  719. package/src/lib/job-drawer.ts +424 -0
  720. package/src/lib/job-view.ts +456 -0
  721. package/src/lib/jobs-service.ts +290 -0
  722. package/src/lib/sheet-focus.ts +71 -0
  723. package/src/lib/tiers.ts +43 -0
  724. package/src/router/admin-routes.ts +8 -0
  725. package/src/router/index.ts +9 -1
  726. package/src/styles/prenta-tokens.css +263 -82
  727. package/src/styles/responsive.css +460 -22
  728. package/src/styles/theme.css +177 -28
  729. package/src/views/ApiKeys.tsx +2 -2
  730. package/src/views/AppearanceChrome.tsx +74 -0
  731. package/src/views/CollectionList.tsx +264 -205
  732. package/src/views/Dashboard.tsx +26 -13
  733. package/src/views/DocumentEdit.tsx +111 -56
  734. package/src/views/FormDeliveries.tsx +30 -17
  735. package/src/views/FormEntries.tsx +28 -20
  736. package/src/views/FormSubmissions.tsx +32 -34
  737. package/src/views/Forms.tsx +55 -34
  738. package/src/views/FormsSettings.tsx +94 -0
  739. package/src/views/Jobs/BusyButton.tsx +56 -0
  740. package/src/views/Jobs/CancelJobDialog.tsx +127 -0
  741. package/src/views/Jobs/DrawerActivity.tsx +142 -0
  742. package/src/views/Jobs/DrawerOverview.tsx +139 -0
  743. package/src/views/Jobs/DrawerResults.tsx +155 -0
  744. package/src/views/Jobs/DrawerReview.tsx +464 -0
  745. package/src/views/Jobs/JobDrawer.tsx +556 -0
  746. package/src/views/Jobs/JobsTable.tsx +260 -0
  747. package/src/views/Jobs/WorkerStrip.tsx +144 -0
  748. package/src/views/Jobs/atoms.tsx +93 -0
  749. package/src/views/Jobs/focus.ts +56 -0
  750. package/src/views/Jobs/icons.tsx +111 -0
  751. package/src/views/Jobs/placeholders.tsx +66 -0
  752. package/src/views/Jobs/useJobDetail.ts +64 -0
  753. package/src/views/Jobs/useJobsFeed.ts +249 -0
  754. package/src/views/Jobs/useReviewItems.ts +187 -0
  755. package/src/views/Jobs.tsx +282 -105
  756. package/src/views/MediaBrowser.tsx +71 -21
  757. package/src/views/Pages/PagesListView.tsx +115 -39
  758. package/src/views/Posts/NewPostTypeInstructions.tsx +15 -10
  759. package/src/views/Posts/PostTypesView.tsx +28 -6
  760. package/src/views/Posts/PostsListView.tsx +130 -40
  761. package/src/views/SEO.tsx +23 -8
  762. package/src/views/ScriptTags.tsx +233 -153
  763. package/src/views/Settings.tsx +215 -256
  764. package/src/views/SpamFolder.tsx +32 -0
  765. package/src/views/Trash.tsx +12 -1
  766. package/src/views/Users.tsx +2 -2
  767. package/src/views/WidgetsPlaceholder.tsx +33 -0
  768. package/src/views/dashboard/kpi-grid.ts +38 -0
  769. package/src/views/lazy-views.tsx +12 -0
  770. package/src/views/page-editor/PageTab.tsx +2 -2
  771. package/src/views/page-editor/ReviewBar.tsx +1 -1
  772. package/src/views/page-editor/VersionHistoryPanel.tsx +1 -1
  773. package/src/views/seo/AuditTab.tsx +1 -1
  774. package/src/views/seo/OverviewTab.tsx +6 -5
  775. package/src/views/seo/ProposalsTab.tsx +1 -1
  776. package/src/views/settings/AISettingsTab.tsx +10 -6
  777. package/src/views/settings/AccessProtectionCard.tsx +1 -1
  778. package/src/views/settings/AdminThemeCard.tsx +228 -35
  779. package/src/views/settings/AppearanceTab.tsx +10 -6
  780. package/src/views/settings/BrandPreviewCard.tsx +1 -1
  781. package/src/views/settings/BrandVoiceCard.tsx +1 -1
  782. package/src/views/settings/EmailSettingsTab.tsx +11 -7
  783. package/src/views/settings/GeneralSettingsTab.tsx +10 -6
  784. package/src/views/settings/McpConnectTab.tsx +2 -1
  785. package/src/views/settings/ProviderConnectionCard.tsx +1 -1
  786. package/src/views/settings/SearchDataCard.tsx +1 -1
  787. package/src/views/settings/SecurityStatusCard.tsx +2 -2
  788. package/src/views/settings/SecurityTab.tsx +10 -6
  789. package/src/views/settings/SeoAutopilotCard.tsx +2 -2
  790. package/src/views/settings/SeoSettingsTab.tsx +13 -9
  791. package/src/views/settings/SiteIndexStatusCard.tsx +1 -1
  792. package/src/views/settings/SiteThemeCard.tsx +1 -1
  793. package/src/views/settings/UpdatesTab.tsx +107 -101
  794. package/src/views/settings/components.tsx +26 -62
  795. package/src/views/settings/useAppearanceSettings.ts +116 -25
  796. package/src/views/users/UserDetailDrawer.tsx +1 -1
  797. package/dist/components/ui/StatPill.d.ts +0 -18
  798. package/dist/components/ui/StatPill.d.ts.map +0 -1
  799. package/dist/components/ui/StatPill.js +0 -5
  800. package/dist/components/ui/StatPill.js.map +0 -1
  801. package/src/components/ui/StatPill.tsx +0 -37
package/CHANGELOG.md CHANGED
@@ -1,5 +1,109 @@
1
1
  # @actuate-media/cms-admin
2
2
 
3
+ ## 2.7.0
4
+
5
+ ### Minor Changes
6
+
7
+ - 69b9667: Porcelain, Linen, and Graphite replace the purple admin palette. Accent presets are Cobalt, Teal, Actuate coral, Rust, and Slate, each tuned to 4.5:1. Shared page header, count chip, tabs, and unsaved bar are new exports. Legacy accent names still resolve.
8
+
9
+ Jobs can be cancelled. A queued job stops immediately; a running job stops after the current slice. Review decisions, batch estimates, and the admin-only automatic apply rule are enforced in cms-core.
10
+
11
+ Menus keep a location on one menu and stop new indents at depth 2. Chrome is a code-first schema with `defineRegion` and `prenta pull chrome`. Form settings cover attribution windows, spam terms, closed forms, and retention.
12
+
13
+ - 69b9667: Admin tokens now match the October 2026 design kit. Linen joins Porcelain and Graphite as a base in Settings → Admin appearance, and every kit token is available, including Tailwind names like `bg-card`, `text-sub`, `rounded-12` and `shadow-shd`. Warning amber, card radius, shadows, motion, toast layering and the high-contrast values use the kit's values, and the last purple v1 colors are gone. The published Tailwind v3 preset adds the kit sizes without redefining stock keys (`text-sm2`, `rounded-4`, `rounded-5`).
14
+
15
+ Any accent color is accepted now (hex, `rgb()`, `hsl()` or `oklch()`). Instead of rejecting a low-contrast pick, `tuneAccent` in `@prenta/core` adjusts it until text clears 4.6:1 on light bases, on Graphite and on its own tint. `admin.branding.primaryColor` is tuned the same way and wins over the saved accent; a value the admin can't read is ignored with a console warning and the accent stays editable. Unsaved Appearance changes are undone when you leave the tab. The admin root carries `--acc-base`, `--acc-lt` and `--acc-dk` (`accentPickCssVars`) and derives the rest. `accentTokensToCssVars` keeps its old output and is deprecated, as is `MIN_ACCENT_CONTRAST`. `AppearanceSettings` gains an optional `adminLightBase`.
16
+
17
+ `@prenta/admin` needs the `@prenta/core` release that ships with it (8.10.0): it imports `accentPickCssVars`, `toHex` and `tuneAccent`, which older core versions don't export. Upgrade both together.
18
+
19
+ - 69b9667: The admin sidebar now follows the October 2026 design kit. Dashboard, Pages, Posts and Appearance sit at the top, Media, Forms, SEO and Script Tags under CONTENT, then your own collections, and Jobs above Settings under SETTINGS. Appearance is a group (Menus, Header & Footer, Widgets). Under Forms, All Entries and All Forms each open a row per form. Clicking a group opens it; the current page's group opens on its own.
20
+
21
+ At tablet width the sidebar is a 60px icon rail: sub-pages open in a flyout, the parent is marked for any of its pages, unread counts stay visible and labels remain available to screen readers. Hovering a rail item no longer moves keyboard focus, Esc closes its flyout or label without moving focus, and opening a flyout from the keyboard moves focus into it. On phones a bottom tab bar replaces the sidebar and leaves room for the home indicator. Its More tab opens the full menu, including the Settings tabs, as a dialog with its own Close button: focus moves into it and stays there, Esc or Close closes it and focus returns to More. Widening the window closes it. Sheets and dialogs cover the tab bar, toasts appear above it, and the Reduce motion setting stops the menu's slide. The current page stays outlined in Windows high-contrast mode.
22
+
23
+ `AdminShell` takes an optional `tabBar` for the mobile bar and makes its open mobile sidebar a modal dialog, and `Sidebar` accepts the nav `items` so a page can share one tree between the sidebar and the tab bar.
24
+
25
+ - 69b9667: The admin's controls now match the October 2026 design kit: 34px buttons with 13px semibold text, radius-12 cards with a 13px 16px header row, 34×19 switches, and the kit's count chips and tabs. On light themes the AI button's gradient ends darker, so its white label stays readable.
26
+
27
+ New exports: `Breadcrumb` (items take an admin `path` and render as real links; `AdminLinksProvider` supplies the base path outside `AdminRoot`) and `UnderlineTabPanel`, which pairs with `UnderlineTabs` through a shared `idBase`. `UnderlineTabs` tabs take an `icon`, `count` and `badge`, and move with the arrow keys, Home and End. `Segmented` takes `counts` and moves with the arrow keys. `PageHeader` takes `flush` and a rich `subtitle`. `UnsavedBar` takes `saveDisabled`, `saveLabel`, `discardLabel` and a `card` variant, renders only while the form is dirty, and announces itself to screen readers.
28
+
29
+ Breadcrumbs appear only on second-level screens. The shell no longer adds a breadcrumb bar under the top bar; screens such as Post Types, All Entries, Trash and collection documents pass a `Breadcrumb` to `PageHeader` instead. `Breadcrumbs` (the path-derived bar) is still exported but deprecated. Collection document screens get their Cancel button and post-create redirect back, open a created or duplicated document fresh, and no longer ask about unsaved changes after a successful Create. Their fields are read-only while a new document is being created, so nothing typed during the save is lost. Pages › Trash opens Trash again instead of the page editor.
30
+
31
+ Settings tabs show the kit's unsaved-changes bar ("Reset" / "Save changes") only while the form has unsaved changes, and a successful save shows a "Saved" toast. Saving Admin appearance now clears its unsaved state. Toasts appear at the bottom centre in the kit's dark style; errors and warnings stay up for 6 seconds unless the call sets its own duration.
32
+
33
+ - 69b9667: The admin top bar now follows the October 2026 design kit. Search is a single "Search…" field with a shortcut hint, ⌘K on Mac, iPhone and iPad and Ctrl+K elsewhere (both shortcuts work everywhere): it opens the command palette with the cursor in its search box, and closing the palette puts focus back where it was. On the right sit the dark-mode toggle, notifications and a round avatar with your initials, which opens the account menu (Profile, Settings, Logout). A red dot on the bell means you have unread notifications, and screen readers hear how many. The notifications panel closes with Esc (focus goes back to the bell), with a click elsewhere, or when you Tab past it. While the command palette is open, Tab stays inside it. The bell now also shows unread notifications when the admin runs in development mode.
34
+
35
+ On phones the search field becomes a 44px icon and the menu button is gone, since the tab bar's More opens the full menu. On 4K screens the top bar is 64px tall with a wider search field. `Header`'s `onToggleSidebar` is now optional: pass it only if your own shell needs a menu button on small screens.
36
+
37
+ - 69b9667: The admin now adapts to the October 2026 design kit's screen sizes: phones (up to 768px), tablets (769–1024px), laptops, wide screens and 4K.
38
+ - **Tablets:** the secondary buttons in a page header (View Site, Export and the like) shrink to 40px icons that keep their names for screen readers. The main action and AI buttons keep their text. Page titles are 19px and the page gutter is 20px.
39
+ - **Phones:**
40
+ - Every page-header button becomes a 44px icon.
41
+ - The main create action ("New page", "New Post", "Upload Files", "New Form", "New Script", "New Post Type" and each collection's "New …") floats as a round button above the tab bar.
42
+ - The Pages, Posts, Forms, Script Tags and collection lists show each row as a card, with the column names as labels, long values wrapping, and the checkbox and row actions at a touch-friendly size. Where the table header could sort or select all, a "Sort by" menu and a "Select all" checkbox sit above the cards. Other tables scroll sideways inside their own box, never the whole page.
43
+ - Dialogs open as bottom sheets.
44
+ - Side panels (entry details, form schema, script editor, SEO editor, redirects) and the media details panel fill the screen between the top bar and the tab bar. Focus moves into them and back to the row you came from, and the media grid keeps its place.
45
+ - Toasts appear above the floating button instead of over it.
46
+ - The media folder list starts closed and opens above the files.
47
+ - **Row actions** are always visible on tablets, phones and touch screens, since there is no hover to reveal them.
48
+ - **4K:** titles are 26px and the gutter is 44px.
49
+
50
+ For custom admin screens, `@prenta/admin`'s Tailwind build now has `mobile:`, `tablet:`, `laptop:`, `wide:`, `4k:` and `narrow:` (tablet and phone) variants, along with `not-mobile:` and `not-narrow:`.
51
+
52
+ - 69b9667: A polish pass on the admin, following the October 2026 design kit.
53
+ - **Titles match the sidebar.** Media (was "Media Library"), SEO (was "SEO Operations Center") and SMTP Log (was "Deliveries"), with the kit's subtitles on Media and SEO. A form's entries page is titled with the form's name under a Dashboard / Forms breadcrumb, which replaces its "Back to Forms" button. Breadcrumbs stay on second-level screens only.
54
+ - **One count chip.** The header counts on Forms, All Entries, a form's entries, Media and Script Tags share the kit's rounded count chip. On All Entries and a form's entries, the unread and starred chips turn that filter on, and a second click goes back to all entries.
55
+ - **No wrapping.** Script Tags' location and consent filters, its "Consent-gated" count, Media's counts and the Pages tag chips (such as "Landing Pages") stay on one line, and Script Tags' search box keeps at least 180px.
56
+ - **Dashboard stat cards.** Five cards sit in one row from 1400px, two above three below that, and two per row on phones with the last one full width. With four cards (a site with one content collection) they sit in one row from 1400px and two by two below, with no empty slot. Below 1025px the Recent Activity grid and the SEO score row stack in one column.
57
+ - **Settings** uses the kit's header and tab strip: each tab has its icon, and Email reads "Email (SMTP)" (also in the phone menu). When the tabs don't fit, the side that hides tabs fades out and a chevron there scrolls the strip; the selected tab scrolls into view, including when you open Settings on a later tab. On phones the tabs are 40px tall, 44px on touch screens. In Windows high-contrast mode the selected tab, a pressed count chip and an active filter pill are outlined, so they still stand out.
58
+ - **Create actions live in the page header.** "New Post Type" moved from the top bar into the Post Types header, and the top bar no longer repeats a collection's "New …" button.
59
+
60
+ `CountChip` now takes a string `n` for formatted values ("2.4 GB"), `tone="muted"` and a leading `icon`. `UnderlineTabs` takes `variant="page"` for a page-level strip, fades only the edges that hide tabs (at any width, not only at 1280px and below) and shows scroll buttons there. All its tabs get the phone and touch heights above.
61
+
62
+ - 69b9667: The Jobs screen (under Settings in the sidebar) has been redesigned. It shows when the background worker last ran and when it runs next, the SEO scan and content health schedules with Run now, and alerts for failed jobs and for AI changes waiting for review. Each job shows a plain status (Running, In progress, Retrying, Queued, Needs review, Succeeded, Failed, Cancelling or Cancelled), what's happening now, its progress, and who started it. Filter by state or type; the counts follow the type you pick.
63
+
64
+ The list updates every 5 seconds while Live is on and the browser tab is in view. Turn Live off to keep it still while you read.
65
+
66
+ From the list you can run a scan now (if one is already queued or running, that job opens instead of a second one starting), retry a failed job from where it stopped, and cancel a queued or running job after confirming. A running job finishes its current slice first.
67
+
68
+ Light mode now shows the info colour again: it was missing, which left the SEO scan icon and other info-coloured text and tints without their colour.
69
+
70
+ - 69b9667: Opening a job on the Jobs screen now shows its details in a panel on the right (full screen on a phone), with five tabs:
71
+ - **Overview**: what the job is doing in plain words, its progress, the last error with a Copy button, the AI's explanation of a failure or summary of a scan, and the facts (who started it, attempts, operation or schedule, AI usage).
72
+ - **Review** (batch AI jobs): each suggested change next to the current text, 20 at a time. Approve it as a draft or publish it, edit it first, or reject it, and undo any decision. On a published document, "Keep current status" leaves the change waiting, because saving it would make it live; Publish applies it. Approve all approves every waiting change. An edit you're making stays put while the list updates. People who can't edit content don't see this tab.
73
+ - **Results** (SEO scans and content health checks): the key numbers, the AI summary, the issues by kind with a link to where each gets fixed, and whether the SEO digest went out.
74
+ - **Activity**: the job's slices, pauses, failures and retries, newest first.
75
+ - **Details**: the raw job record, for developers.
76
+
77
+ When a change can't be saved (the document changed at the same moment, a link points to a page that's no longer published, or someone else already decided it), the change says why.
78
+
79
+ `cmsApi` results now include the parsed response `body` next to `data`, for endpoints that send fields beside `data`.
80
+
81
+ ### Patch Changes
82
+
83
+ - 69b9667: Appearance → Menus opens the menu editor again, and sidebar groups open when you're on one of their pages. Settings tabs show the save bar only after a change.
84
+
85
+ A form's open and close dates, entry limit, and closed message now save and are enforced on submit.
86
+
87
+ Cancelling a job while a slice is running now sticks: the job stops after that slice. Migration 0025 ships a `down.sql` for manual rollback.
88
+
89
+ - 69b9667: Settings → Layout now works like the other Settings tabs: instead of an always-visible "Save Changes" button, the "Unsaved changes" bar appears once you change a default variant, with Reset to go back to the saved defaults and a "Saved" toast after saving. Clearing every default variant now saves too (before, the old defaults came back), and a failed read of the settings no longer overwrites them.
90
+
91
+ Settings tabs also open from the design kit's `#hash` links (`/settings#appearance`, `#keys` for API Keys) as well as `?tab=`.
92
+
93
+ If you leave Admin appearance while a save is still running, the admin keeps the look you saved instead of putting the previous one back; if that save fails, the saved look comes back and an error toast says so.
94
+
95
+ - 69b9667: Sites declare what editors can change in their header and footer with `defineRegion(name, { component, variants, fields })` and `field.brand`, `menu`, `link`, `text`, `textarea`, `select`, `boolean` and `social`, from `@prenta/core/config`. Saved values are typed per region: `RegionValues<typeof header>` for what the CMS stores, `ChromeFieldsOf<typeof header>` for what the site receives. The earlier array-of-fields `defineRegion` and `DEFAULT_CHROME_SCHEMA` are gone, and the `@prenta/core/chrome/schema` entry with them.
96
+
97
+ `prenta push chrome` sends the regions `prenta.config.ts` exports to the CMS, with the repo, branch and commit; run it on every deploy, with an admin API key. The CMS stores each region's schema and fits the saved values to it. A value whose field was removed is kept as an orphan for 30 days, or until someone removes it. A field with `renamedFrom` keeps the old key's value. `prenta pull chrome` writes the CMS's schema to `.prenta/chrome.json`, and `prenta types` generates `ChromeFields` from it.
98
+
99
+ Migration 0027 adds the `prenta_chrome_regions` table. It ships a `down.sql` for manual rollback.
100
+
101
+ ## 2.6.1
102
+
103
+ ### Patch Changes
104
+
105
+ - 626b0fb: Describe each section as the band it looks like, and have a connected agent report which bands it built or skipped. A design image is the reference; photos are uploaded from their own files.
106
+
3
107
  ## 2.6.0
4
108
 
5
109
  ### Minor Changes
@@ -1,74 +1,67 @@
1
1
  /*
2
- * PrentaCMS — Design Tokens v2.0.0
2
+ * PrentaCMS — Design Tokens v2.1.0
3
3
  * GENERATED FILE — DO NOT EDIT. Source: design-system/tokens.json.
4
4
  * Regenerate: pnpm --filter @prenta/admin generate
5
5
  *
6
- * Light theme is the default (:root); dark activates via [data-theme="dark"]
7
- * on <html>. Consumers embedding @prenta/admin should import
8
- * src/styles/prenta-tokens.css instead — it scopes the same values to
9
- * .prenta-admin so a host page's :root cannot override them.
6
+ * Porcelain is the default (:root). Linen activates via data-light="linen"
7
+ * and Graphite via [data-theme="dark"] on <html>. Consumers embedding
8
+ * @prenta/admin should import src/styles/prenta-tokens.css instead — it
9
+ * scopes the same values to .prenta-admin so a host page's :root cannot
10
+ * override them.
10
11
  */
11
12
 
12
13
  :root {
13
14
  /* Surfaces */
14
- --bg: #f5f4fa; /* App background */
15
+ --bg: #f4f5f7; /* Porcelain app background */
15
16
  --sb: #ffffff; /* Sidebar / topbar surface */
16
17
  --card: #ffffff; /* Card / panel surface */
17
- --bdr: #e8e6f2; /* Hairline border */
18
+ --bdr: #e3e5ea; /* Hairline border */
18
19
 
19
20
  /* Text */
20
- --txt: #1a1827; /* Primary text */
21
- --sub: #6b6878; /* Secondary text */
21
+ --txt: #16181d; /* Primary text */
22
+ --sub: #50555f; /* Secondary text */
22
23
  /*
23
- * Tertiary text. The handoff value #B0ADBE is 2.2:1 on --card — below WCAG
24
- * AA. The admin uses --muted as real text (section labels, check hints,
25
- * canvas meta line, character counters), so it is darkened to 4.6:1 while
26
- * staying one step lighter than --sub to preserve the hierarchy. Do not
27
- * revert without also changing every --muted consumer to decorative use.
28
- * Handoff value: #b0adbe — deliberately overridden.
24
+ * Tertiary text. October 2026 Porcelain value, 5.27:1 on white. Tailwind
25
+ * exposes it as text-faint, because bg-muted is a surface in this repo.
29
26
  */
30
- --muted: #716e83;
27
+ --muted: #676c76;
31
28
 
32
29
  /* Accent */
33
- --acc: #7c3aed; /* Accent / interactive */
34
- --acc-l: #ede9fe; /* Accent tint (hover/active bg) */
35
- --acc-m: #c4b5fd; /* Accent mid (focus ring) */
36
-
37
- /* Semantic */
38
30
  /*
39
- * Success text/fill. The handoff value #059669 is 3.57:1 on --suc-l at
40
- * 11.5px (axe on Pages Published chips). Emerald-700 meets 4.5:1 on that
41
- * tint, on bg-success/10 over a card, and with white. Handoff value: #059669
42
- * — deliberately overridden.
31
+ * Picked accent, Cobalt by default. Presets: Teal #0F8A7E, Actuate coral
32
+ * #E8645A, Rust #C2410C, Slate #3F4A5A.
43
33
  */
44
- --suc: #047857;
45
- --suc-l: #ecfdf5;
34
+ --acc-base: #2f5bea;
46
35
  /*
47
- * Warning text/fill. The handoff value #D97706 is 2.85:1 on --warn-l.
48
- * Amber-700 #B45309 is 4.39:1 on bg-warning/10 over a card (axe on dashboard
49
- * Scheduled chips). Amber-800 meets 4.5:1 on that mixed tint and with white.
50
- * Handoff value: #d97706 — deliberately overridden.
36
+ * Accent text and fills. --acc-lt is the pick nudged toward black until it
37
+ * clears 4.6:1.
51
38
  */
52
- --warn: #92400e;
53
- --warn-l: #fffbeb;
39
+ --acc: var(--acc-lt, var(--acc-base));
40
+ /* Accent tint: hover, selected rows, active nav */
41
+ --acc-l: color-mix(in oklch, var(--acc) 11%, var(--card));
42
+ /* Accent mid: focus ring, hover borders */
43
+ --acc-m: color-mix(in oklch, var(--acc) 38%, var(--card));
44
+ --on-acc: #ffffff; /* Text on accent fills */
45
+
46
+ /* Semantic */
47
+ --suc: #047857; /* Success text/fill. Text on its own tint clears 4.5:1. */
48
+ --suc-l: #ecfdf5;
54
49
  /*
55
- * Error text/fill. The handoff value #DC2626 is 4.41:1 on --err-l — just
56
- * under AA for 11.5px StatusBadge text. Red-700 meets 4.5:1 on that tint and
57
- * with white. Handoff value: #dc2626 — deliberately overridden.
50
+ * Warning text/fill. 4.84:1 on --warn-l, 5.02:1 on white. Pair it with
51
+ * --warn-l, not a translucent warn mix (4.39:1 at 10%).
58
52
  */
59
- --err: #b91c1c;
53
+ --warn: #b45309;
54
+ --warn-l: #fffbeb;
55
+ --err: #b91c1c; /* Error text/fill */
60
56
  --err-l: #fef2f2;
61
- /*
62
- * Info text/fill. The handoff value #0891B2 is 3.31:1 on --info-l. Cyan-700
63
- * meets 4.5:1 on that tint and with white. Handoff value: #0891b2 —
64
- * deliberately overridden.
65
- */
66
- --info: #0e7490;
57
+ --info: #0e7490; /* Info text/fill */
67
58
  --info-l: #e0f7fa;
59
+ --orange: #c2410c;
60
+ --notify-dot: #e11d48; /* Topbar bell unread dot */
68
61
 
69
62
  /* Tag palette */
70
- --tag-purple: #7c3aed;
71
- --tag-purple-soft: #f3e8ff;
63
+ --tag-purple: #4f46e5;
64
+ --tag-purple-soft: #eef2ff;
72
65
  --tag-green: #0f766e;
73
66
  --tag-green-soft: #ccfbf1;
74
67
  --tag-orange: #c2410c;
@@ -92,10 +85,55 @@
92
85
  --tag-gray: #475569;
93
86
  --tag-gray-soft: #f1f5f9;
94
87
 
88
+ /* Avatars */
89
+ --avatar-1: #2f5bea;
90
+ --avatar-2: #0e7490;
91
+ --avatar-3: #047857;
92
+ --avatar-4: #b45309;
93
+ --avatar-5: #e11d48;
94
+ --avatar-6: #4f46e5;
95
+ --avatar-7: #db2777;
96
+ /*
97
+ * The handoff value #0D9488 is 3.74:1 with white initials. Teal-700 meets
98
+ * 4.5:1. Handoff value: #0d9488 — deliberately overridden.
99
+ */
100
+ --avatar-8: #0f766e;
101
+
95
102
  /* AI */
96
- --ai1: #7c3aed;
97
- --ai2: #c026d3;
98
- --ai-soft: linear-gradient(135deg, rgba(124, 58, 237, 0.09), rgba(192, 38, 211, 0.07));
103
+ --ai1: var(--acc);
104
+ /*
105
+ * Second AI gradient stop: the accent rotated 50°. Darkened on light bases
106
+ * so white text keeps 4.5:1, hover brightness included (the kit lightens it,
107
+ * 2.85:1 on Cobalt)
108
+ */
109
+ --ai2: oklch(from var(--acc) calc(l - 0.07) c calc(h - 50));
110
+ --ai-soft: linear-gradient(
111
+ 135deg,
112
+ color-mix(in oklch, var(--ai1) 9%, transparent),
113
+ color-mix(in oklch, var(--ai2) 7%, transparent)
114
+ );
115
+
116
+ /* Overlays */
117
+ --scrim: rgba(10, 12, 20, 0.38); /* Modal backdrop */
118
+ --scrim-drawer: rgba(10, 12, 20, 0.28); /* Drawer backdrop */
119
+
120
+ /* Code surfaces */
121
+ --code-bg: #0f1115;
122
+ --code-txt: #d6dae1;
123
+ --code-cmt: #6b7280;
124
+ --code-str: #9fd39b;
125
+ --code-kw: #c4a7ff;
126
+ --code-err: #f2b8b5;
127
+ --code-btn-bg: #171a20;
128
+ --code-btn-bdr: #2a2e36;
129
+ --code-btn-txt: #c9cdd4;
130
+
131
+ /* Search preview */
132
+ /*
133
+ * Search result title in the SERP preview. Google's link blue, so the card
134
+ * looks like the result it previews; never derived from the accent.
135
+ */
136
+ --serp-link: #1a0dab;
99
137
 
100
138
  /* Controls */
101
139
  /*
@@ -105,31 +143,47 @@
105
143
  --toggle-thumb: #ffffff;
106
144
 
107
145
  /* Type */
108
- /*
109
- * UI text. system-ui until OFL woff2 ships under design-system/fonts/. Never
110
- * a third-party request — the admin renders inside consumer applications.
111
- */
112
- --font-sans: system-ui, -apple-system, 'Segoe UI', Roboto, sans-serif;
113
- /* Code, robots directives, token names */
146
+ /* UI text. DM Sans is self-hosted via @fontsource (no Google Fonts request). */
147
+ --font-sans: 'DM Sans', system-ui, -apple-system, 'Segoe UI', Roboto, sans-serif;
148
+ /* Code, keys, ids, paths and slugs */
114
149
  --font-mono: 'DM Mono', ui-monospace, 'SFMono-Regular', monospace;
115
150
  --fw-reg: 450;
116
151
  --fw-med: 500;
117
152
  --fw-semi: 600;
118
153
  --fw-bold: 700;
119
154
  --fs-page: 21px; /* Page title */
120
- --fs-card: 14px; /* Card / section title */
155
+ --fs-drawer: 16px; /* Drawer / modal title */
156
+ --fs-stat: 20px; /* Jobs drawer result numbers */
157
+ --fs-card: 13.5px; /* Card heading */
121
158
  --fs-body: 13px; /* Body, controls, table cells */
122
- --fs-sub: 12px; /* Secondary / captions */
123
- --fs-hint: 11.5px; /* Hints, metadata */
124
- --fs-label: 10px; /* Section labels */
159
+ --fs-sm: 12.5px; /* Secondary rows, breadcrumbs, chips */
160
+ --fs-sub: 12px; /* Meta, help */
161
+ --fs-hint: 11.5px; /* Hints, table meta, mono */
162
+ --fs-badge: 9.5px; /* Nav unread badges */
163
+ --fs-tab: 9px; /* Mobile tab bar labels */
164
+ --fs-count: 10.5px; /* Count badges in tabs and nav */
165
+ --fs-micro: 11px; /* Table headers */
166
+ --fs-label: 10px; /* Sidebar section labels */
125
167
 
126
168
  /* Layout */
127
- --sbw: 224px;
128
- --sbw-col: 60px;
169
+ --sbw: 224px; /* Sidebar expanded */
170
+ --sbw-col: 60px; /* Sidebar collapsed / tablet rail */
129
171
  --tbh: 56px;
172
+ --gut: 28px; /* Page gutter (laptop tier) */
173
+ --drawer-w: 440px; /* Generic drawer */
174
+ --jobs-drawer-w: 620px; /* Jobs detail drawer */
175
+ --tabbar-h: 56px; /* Mobile bottom tab bar */
130
176
 
131
177
  /* Radius */
132
- --r-sm: 6px; /* Small buttons, badges, tags, chips-in-rows */
178
+ --r-xs: 4px; /* kbd, consent badge */
179
+ --r-sm: 5px; /* Tiny tags */
180
+ --r-6: 6px; /* Small icon buttons, chips in rows */
181
+ --r-7: 7px; /* Nav items, menu buttons */
182
+ --r-8: 8px; /* Buttons, inputs, selects */
183
+ --r-9: 9px; /* Toasts, list items */
184
+ --r-10: 10px; /* Inner cards, alerts, KPI tiles */
185
+ --r-12: 12px; /* Page cards */
186
+ --r-14: 14px; /* Modals */
133
187
  --r-field: 7px; /* Text inputs, textareas, selects */
134
188
  /*
135
189
  * Primary / secondary buttons, dropdowns. --r-control is the pre-2.0 name,
@@ -137,7 +191,7 @@
137
191
  */
138
192
  --r-ctl: 8px;
139
193
  --r-control: var(--r-ctl); /* deprecated alias */
140
- --r: 10px; /* Cards and panels */
194
+ --r: 12px; /* Cards and panels */
141
195
  --r-fig: 12px; /* Canvas figures and media frames */
142
196
  --r-pill: 99px; /* Toggles, meters, notice pills */
143
197
 
@@ -169,13 +223,17 @@
169
223
  --ring: 0 0 0 3px var(--acc-m); /* Focus ring shadow */
170
224
 
171
225
  /* Elevation */
172
- --shd: 0 1px 2px rgba(0, 0, 0, 0.05), 0 1px 4px rgba(0, 0, 0, 0.04); /* Card resting */
173
- --shd2: 0 4px 16px rgba(0, 0, 0, 0.1); /* Popovers, modals, hover */
226
+ --shd: 0 1px 2px rgba(16, 18, 24, 0.05), 0 1px 4px rgba(16, 18, 24, 0.04); /* Card resting */
227
+ --shd2: 0 4px 16px rgba(16, 18, 24, 0.1); /* Popovers, modals, hover */
228
+ --shd-bar: 0 10px 30px rgba(0, 0, 0, 0.22); /* Floating unsaved-changes bar */
229
+ --shd-knob: 0 1px 2px rgba(0, 0, 0, 0.25); /* Switch knob */
230
+ --shd-save: 0 -3px 16px rgba(0, 0, 0, 0.06); /* Settings save bar (Settings.html .ap-save) */
231
+ --shd-tabbar: 0 -2px 12px rgba(0, 0, 0, 0.08); /* Mobile bottom tab bar */
174
232
 
175
233
  /* Motion */
176
234
  --mo-fast: 0.12s; /* Hover, color */
177
235
  --motion-fast: var(--mo-fast); /* deprecated alias */
178
- --mo-base: 0.18s; /* Toggles, reveals */
236
+ --mo-base: 0.15s; /* Toggles, reveals */
179
237
  --motion-base: var(--mo-base); /* deprecated alias */
180
238
  --mo-slow: 0.22s; /* Panels, canvas scale */
181
239
  --ease: cubic-bezier(0.4, 0, 0.2, 1);
@@ -184,32 +242,60 @@
184
242
 
185
243
  /* Layering */
186
244
  --z-raise: 2; /* Canvas section labels, sticky group headers */
245
+ --z-bar: 20; /* Sticky bars */
187
246
  --z-resizer: 30; /* Panel drag handle */
188
247
  --z-overlay: 45; /* In-panel overlays (version history) */
248
+ /*
249
+ * Mobile bottom tab bar. Kit 110; below the admin's overlays (scrims 40,
250
+ * drawers and dialogs 50+) so it never covers a sheet's footer
251
+ */
252
+ --z-tabbar: 30;
189
253
  --z-menu: 120; /* Dropdowns, flyouts */
190
- --z-toast: 200;
254
+ --z-drawer-scrim: 150;
255
+ --z-drawer: 160;
256
+ --z-modal: 200;
257
+ --z-toast: 260;
258
+ --z-toast-jobs: 300; /* Jobs toasts over the Jobs drawer */
259
+ }
260
+
261
+ :root[data-light='linen']:not([data-theme='dark']) {
262
+ /* Surfaces */
263
+ --bg: #f5f2ec;
264
+ --sb: #fbfaf7;
265
+ --card: #ffffff;
266
+ --bdr: #e6e0d6;
267
+
268
+ /* Text */
269
+ --txt: #1e1a15;
270
+ --sub: #5c554a;
271
+ --muted: #6d665a;
272
+
273
+ /* Elevation */
274
+ --shd: 0 1px 2px rgba(40, 30, 15, 0.06), 0 1px 4px rgba(40, 30, 15, 0.04);
275
+ --shd2: 0 4px 16px rgba(40, 30, 15, 0.1);
191
276
  }
192
277
 
193
278
  [data-theme='dark'] {
194
279
  /* Surfaces */
195
- --bg: #0d0c18;
196
- --sb: #141222;
197
- --card: #1c1a2e;
198
- --bdr: #2c2a42;
280
+ --bg: #0e0f11;
281
+ --sb: #15161a;
282
+ --card: #1b1d21;
283
+ --bdr: #2a2d33;
199
284
 
200
285
  /* Text */
201
- --txt: #eae8f5;
202
- --sub: #8e8ba8;
203
- /*
204
- * Same AA correction as light mode — the handoff value #504E68 is 2.1:1 on
205
- * --card. Handoff value: #504e68 — deliberately overridden.
206
- */
207
- --muted: #8784a2;
286
+ --txt: #ecedef;
287
+ --sub: #adb1ba;
288
+ --muted: #9499a3; /* Graphite tertiary text. 5.90:1 on the Graphite card. */
208
289
 
209
290
  /* Accent */
210
- --acc: #9d71f0;
211
- --acc-l: #231950;
212
- --acc-m: #5e3eaa;
291
+ /*
292
+ * --acc-dk is the pick nudged toward white until it clears 4.6:1 on
293
+ * Graphite.
294
+ */
295
+ --acc: var(--acc-dk, color-mix(in oklch, var(--acc-base) 70%, #ffffff));
296
+ --acc-l: color-mix(in oklch, var(--acc-base) 20%, var(--card));
297
+ --acc-m: color-mix(in oklch, var(--acc-base) 50%, var(--card));
298
+ --on-acc: #0e0f11;
213
299
 
214
300
  /* Semantic */
215
301
  --suc: #10b981;
@@ -220,10 +306,11 @@
220
306
  --err-l: #200808;
221
307
  --info: #38bdf8;
222
308
  --info-l: #0a2838;
309
+ --orange: #fb923c;
223
310
 
224
311
  /* Tag palette */
225
- --tag-purple: #a78bfa;
226
- --tag-purple-soft: #2e1065;
312
+ --tag-purple: #818cf8;
313
+ --tag-purple-soft: #1e1b4b;
227
314
  --tag-green: #2dd4bf;
228
315
  --tag-green-soft: #042f2e;
229
316
  --tag-orange: #fb923c;
@@ -238,9 +325,16 @@
238
325
  --tag-gray-soft: #1e293b;
239
326
 
240
327
  /* AI */
241
- --ai1: #7c3aed;
242
- --ai2: #c026d3;
243
- --ai-soft: linear-gradient(135deg, rgba(157, 113, 240, 0.16), rgba(192, 38, 211, 0.12));
328
+ /* Graphite keeps the kit's lighter stop: the text on it is dark */
329
+ --ai2: oklch(from var(--acc) calc(l + 0.1) c calc(h - 50));
330
+ --ai-soft: linear-gradient(
331
+ 135deg,
332
+ color-mix(in oklch, var(--ai1) 16%, transparent),
333
+ color-mix(in oklch, var(--ai2) 12%, transparent)
334
+ );
335
+
336
+ /* Search preview */
337
+ --serp-link: #8ab4f8;
244
338
 
245
339
  /* Elevation */
246
340
  --shd: 0 1px 2px rgba(0, 0, 0, 0.3), 0 1px 4px rgba(0, 0, 0, 0.2);