includio-cms 0.1.3 → 0.5.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 (313) hide show
  1. package/CHANGELOG.md +76 -0
  2. package/ROADMAP.md +23 -13
  3. package/dist/admin/api/accept-invite.js +1 -5
  4. package/dist/admin/api/invite.js +7 -16
  5. package/dist/admin/client/account/account-page.svelte +20 -50
  6. package/dist/admin/client/account/lang.d.ts +15 -23
  7. package/dist/admin/client/account/lang.js +51 -67
  8. package/dist/admin/client/account/preferences-section.svelte +26 -84
  9. package/dist/admin/client/account/profile-section.svelte +60 -40
  10. package/dist/admin/client/account/schema.d.ts +11 -3
  11. package/dist/admin/client/account/schema.js +25 -16
  12. package/dist/admin/client/account/security-section.svelte +139 -105
  13. package/dist/admin/client/account/sessions-section.svelte +35 -34
  14. package/dist/admin/client/admin/admin-after-login-layout-content.svelte +3 -5
  15. package/dist/admin/client/admin/admin-layout.svelte +3 -2
  16. package/dist/admin/client/admin/admin-preloader.svelte +36 -0
  17. package/dist/admin/client/admin/admin-preloader.svelte.d.ts +18 -0
  18. package/dist/admin/client/admin/dashboard-page.svelte +55 -41
  19. package/dist/admin/client/collection/a11y-score-cell.svelte +45 -0
  20. package/dist/admin/client/collection/a11y-score-cell.svelte.d.ts +6 -0
  21. package/dist/admin/client/collection/bulk-actions-bar.svelte +83 -0
  22. package/dist/admin/client/collection/bulk-actions-bar.svelte.d.ts +9 -0
  23. package/dist/admin/client/collection/collection-entries.svelte +255 -256
  24. package/dist/admin/client/collection/collection-view.svelte.d.ts +4 -3
  25. package/dist/admin/client/collection/collection-view.svelte.js +9 -5
  26. package/dist/admin/client/collection/collection.svelte +22 -12
  27. package/dist/admin/client/collection/data-table.svelte +50 -39
  28. package/dist/admin/client/collection/data-table.svelte.d.ts +1 -0
  29. package/dist/admin/client/collection/date-cell.svelte +7 -5
  30. package/dist/admin/client/collection/date-cell.svelte.d.ts +1 -1
  31. package/dist/admin/client/collection/empty-state.svelte +28 -0
  32. package/dist/admin/client/collection/empty-state.svelte.d.ts +9 -0
  33. package/dist/admin/client/collection/entry-link.svelte +10 -4
  34. package/dist/admin/client/collection/entry-link.svelte.d.ts +1 -0
  35. package/dist/admin/client/collection/grid-view.svelte +21 -23
  36. package/dist/admin/client/collection/grid-view.svelte.d.ts +1 -2
  37. package/dist/admin/client/collection/row-actions.svelte +60 -0
  38. package/dist/admin/client/collection/row-actions.svelte.d.ts +9 -0
  39. package/dist/admin/client/collection/status-badge.svelte +7 -8
  40. package/dist/admin/client/collection/table-pagination.svelte +122 -79
  41. package/dist/admin/client/collection/table-pagination.svelte.d.ts +1 -0
  42. package/dist/admin/client/collection/table-toolbar.svelte +108 -88
  43. package/dist/admin/client/collection/table-toolbar.svelte.d.ts +8 -9
  44. package/dist/admin/client/entry/entry-form.svelte +109 -1
  45. package/dist/admin/client/entry/entry-header.svelte +96 -37
  46. package/dist/admin/client/entry/entry-header.svelte.d.ts +5 -0
  47. package/dist/admin/client/entry/entry.svelte +171 -60
  48. package/dist/admin/client/entry/header/a11y-validator.d.ts +46 -0
  49. package/dist/admin/client/entry/header/a11y-validator.js +311 -0
  50. package/dist/admin/client/entry/header/publish-panel.svelte +373 -131
  51. package/dist/admin/client/entry/header/publish-panel.svelte.d.ts +4 -0
  52. package/dist/admin/client/entry/header/save-indicator.svelte +33 -23
  53. package/dist/admin/client/entry/header/schedule-popover.svelte +1 -1
  54. package/dist/admin/client/entry/header/status-badge.svelte +25 -118
  55. package/dist/admin/client/entry/header/version-history-sheet.svelte +314 -98
  56. package/dist/admin/client/form/form-submission/form-submission.svelte +271 -83
  57. package/dist/admin/client/form/form-submission/submission-field.svelte +12 -12
  58. package/dist/admin/client/form/form-submissions.svelte +421 -139
  59. package/dist/admin/client/form/submission-link.svelte +8 -2
  60. package/dist/admin/client/form/submission-link.svelte.d.ts +1 -0
  61. package/dist/admin/client/form/submission-status-badge.svelte +18 -4
  62. package/dist/admin/client/form/submission-status-badge.svelte.d.ts +1 -0
  63. package/dist/admin/client/login/lang.d.ts +32 -0
  64. package/dist/admin/client/login/lang.js +66 -2
  65. package/dist/admin/client/login/login-form.svelte +237 -95
  66. package/dist/admin/client/login/login-form.svelte.d.ts +2 -17
  67. package/dist/admin/client/login/login-page.svelte +34 -98
  68. package/dist/admin/client/login/reset-password-page.svelte +235 -0
  69. package/dist/admin/client/login/reset-password-page.svelte.d.ts +4 -0
  70. package/dist/admin/client/login/schema.d.ts +15 -0
  71. package/dist/admin/client/login/schema.js +21 -0
  72. package/dist/admin/client/users/accept-invite-page.svelte +166 -37
  73. package/dist/admin/client/users/create-user-dialog.svelte +15 -7
  74. package/dist/admin/client/users/delete-user-dialog.svelte +81 -16
  75. package/dist/admin/client/users/delete-user-dialog.svelte.d.ts +4 -1
  76. package/dist/admin/client/users/edit-user-dialog.svelte +3 -0
  77. package/dist/admin/client/users/invite-user-dialog.svelte +16 -3
  78. package/dist/admin/client/users/lang.d.ts +27 -0
  79. package/dist/admin/client/users/lang.js +64 -10
  80. package/dist/admin/client/users/pending-invitations.svelte +59 -23
  81. package/dist/admin/client/users/users-page.svelte +471 -72
  82. package/dist/admin/components/accessibility/accessibility-overview.svelte +2 -7
  83. package/dist/admin/components/dashboard/a11y-gauge.svelte +90 -0
  84. package/dist/admin/components/dashboard/a11y-gauge.svelte.d.ts +18 -0
  85. package/dist/admin/components/dashboard/accessibility-hub.svelte +13 -12
  86. package/dist/admin/components/dashboard/form-submissions-widget.svelte +71 -113
  87. package/dist/admin/components/dashboard/index.d.ts +4 -2
  88. package/dist/admin/components/dashboard/index.js +4 -2
  89. package/dist/admin/components/dashboard/recent-activity.svelte +53 -75
  90. package/dist/admin/components/dashboard/recent-entries.svelte +94 -0
  91. package/dist/admin/components/dashboard/recent-entries.svelte.d.ts +18 -0
  92. package/dist/admin/components/dashboard/stat-card.svelte +2 -2
  93. package/dist/admin/components/dashboard/tip-of-the-day.svelte +109 -0
  94. package/dist/admin/components/dashboard/tip-of-the-day.svelte.d.ts +3 -0
  95. package/dist/admin/components/dashboard/welcome-header.svelte +45 -0
  96. package/dist/admin/components/dashboard/welcome-header.svelte.d.ts +3 -0
  97. package/dist/admin/components/fields/{array-field.svelte → blocks-field.svelte} +4 -4
  98. package/dist/admin/components/fields/{array-field.svelte.d.ts → blocks-field.svelte.d.ts} +5 -5
  99. package/dist/admin/components/fields/content-field.svelte +27 -0
  100. package/dist/admin/components/fields/content-field.svelte.d.ts +31 -0
  101. package/dist/admin/components/fields/field-renderer.svelte +9 -7
  102. package/dist/admin/components/fields/image-field.svelte +2 -2
  103. package/dist/admin/components/fields/media-field.svelte +2 -2
  104. package/dist/admin/components/fields/seo-field.svelte +205 -25
  105. package/dist/admin/components/fields/simple-array-field.svelte +289 -0
  106. package/dist/admin/components/fields/simple-array-field.svelte.d.ts +30 -0
  107. package/dist/admin/components/fields/slug-field.svelte +3 -2
  108. package/dist/admin/components/fields/standalone-field-renderer.svelte +148 -0
  109. package/dist/admin/components/fields/standalone-field-renderer.svelte.d.ts +9 -0
  110. package/dist/admin/components/fields/text-field-wrapper.svelte +13 -1
  111. package/dist/admin/components/fields/text-field-wrapper.svelte.d.ts +2 -2
  112. package/dist/admin/components/fields/url-field.svelte +5 -4
  113. package/dist/admin/components/layout/app-sidebar.svelte +27 -24
  114. package/dist/admin/components/layout/lang.d.ts +6 -0
  115. package/dist/admin/components/layout/lang.js +13 -1
  116. package/dist/admin/components/layout/layout-renderer.svelte +352 -0
  117. package/dist/admin/components/layout/layout-renderer.svelte.d.ts +14 -0
  118. package/dist/admin/components/layout/nav-breadcrumbs.svelte +4 -4
  119. package/dist/admin/components/layout/nav-collections.svelte +65 -36
  120. package/dist/admin/components/layout/nav-footer.svelte +31 -0
  121. package/dist/admin/components/layout/nav-footer.svelte.d.ts +18 -0
  122. package/dist/admin/components/layout/nav-forms.svelte +55 -30
  123. package/dist/admin/components/layout/nav-main.svelte +14 -52
  124. package/dist/admin/components/layout/nav-search.svelte +4 -3
  125. package/dist/admin/components/layout/nav-singletons.svelte +59 -17
  126. package/dist/admin/components/layout/nav-singletons.svelte.d.ts +17 -8
  127. package/dist/admin/components/layout/site-header.svelte +74 -13
  128. package/dist/admin/components/media/alt-input.svelte +32 -22
  129. package/dist/admin/components/media/bulk-action-bar.svelte +139 -150
  130. package/dist/admin/components/media/file/file-details.svelte +299 -217
  131. package/dist/admin/components/media/file/file-miniature.svelte +54 -41
  132. package/dist/admin/components/media/file/file-miniature.svelte.d.ts +1 -0
  133. package/dist/admin/components/media/file/file-preview.svelte +1 -1
  134. package/dist/admin/components/media/file-upload.svelte +24 -26
  135. package/dist/admin/components/media/files-list.svelte +112 -40
  136. package/dist/admin/components/media/files-list.svelte.d.ts +2 -0
  137. package/dist/admin/components/media/focal-point-input.svelte +122 -26
  138. package/dist/admin/components/media/media-library.svelte +127 -70
  139. package/dist/admin/components/media/media-search.svelte +6 -6
  140. package/dist/admin/components/media/media-sort.svelte +3 -1
  141. package/dist/admin/components/media/multi-file-summary.svelte +88 -68
  142. package/dist/admin/components/media/tag-combobox.svelte +141 -66
  143. package/dist/admin/components/media/tag-combobox.svelte.d.ts +1 -0
  144. package/dist/admin/components/media/tag-sidebar.svelte +139 -121
  145. package/dist/admin/components/tiptap/FigureNodeView.svelte +144 -15
  146. package/dist/admin/components/tiptap/InlineBlockNodeView.svelte +254 -0
  147. package/dist/admin/components/tiptap/InlineBlockNodeView.svelte.d.ts +4 -0
  148. package/dist/admin/components/tiptap/SlashCommandPopup.svelte +212 -0
  149. package/dist/admin/components/tiptap/SlashCommandPopup.svelte.d.ts +8 -0
  150. package/dist/admin/components/tiptap/content-editor.svelte +280 -0
  151. package/dist/admin/components/tiptap/content-editor.svelte.d.ts +9 -0
  152. package/dist/admin/components/tiptap/editor-toolbar.svelte +230 -0
  153. package/dist/admin/components/tiptap/editor-toolbar.svelte.d.ts +16 -0
  154. package/dist/admin/components/tiptap/heading-a11y-plugin.d.ts +2 -0
  155. package/dist/admin/components/tiptap/heading-a11y-plugin.js +67 -0
  156. package/dist/admin/components/tiptap/image-dialog.svelte +172 -11
  157. package/dist/admin/components/tiptap/inline-block-node.d.ts +19 -0
  158. package/dist/admin/components/tiptap/inline-block-node.js +98 -0
  159. package/dist/admin/components/tiptap/link-dialog.svelte +9 -4
  160. package/dist/admin/components/tiptap/slash-command.d.ts +17 -0
  161. package/dist/admin/components/tiptap/slash-command.js +181 -0
  162. package/dist/admin/components/tiptap/structured-content-utils.d.ts +21 -0
  163. package/dist/admin/components/tiptap/structured-content-utils.js +150 -0
  164. package/dist/admin/components/tiptap/tiptap-editor.svelte +18 -190
  165. package/dist/admin/email/invite-template.d.ts +8 -0
  166. package/dist/admin/email/invite-template.js +99 -0
  167. package/dist/admin/email/reset-password-template.d.ts +7 -0
  168. package/dist/admin/email/reset-password-template.js +96 -0
  169. package/dist/admin/remote/ai.remote.d.ts +1 -0
  170. package/dist/admin/remote/ai.remote.js +4 -1
  171. package/dist/admin/remote/entry.remote.d.ts +8 -0
  172. package/dist/admin/remote/entry.remote.js +53 -4
  173. package/dist/admin/remote/preview.remote.js +2 -1
  174. package/dist/admin/shared/password-schema.d.ts +5 -0
  175. package/dist/admin/shared/password-schema.js +10 -0
  176. package/dist/admin/styles/admin.css +1530 -151
  177. package/dist/admin/utils/formatDate.d.ts +1 -0
  178. package/dist/admin/utils/formatDate.js +8 -0
  179. package/dist/admin/utils/roleLabel.d.ts +2 -0
  180. package/dist/admin/utils/roleLabel.js +13 -0
  181. package/dist/ai-claude/index.d.ts +2 -0
  182. package/dist/ai-claude/index.js +56 -0
  183. package/dist/cms/runtime/api.d.ts +6 -1
  184. package/dist/cms/runtime/api.js +3 -0
  185. package/dist/cms/runtime/schemas.d.ts +9 -1
  186. package/dist/cms/runtime/schemas.js +8 -0
  187. package/dist/cms/runtime/types.d.ts +82 -10
  188. package/dist/cms/runtime/types.js +4 -0
  189. package/dist/components/ui/accordion/accordion.stories.svelte +39 -0
  190. package/dist/components/ui/accordion/accordion.stories.svelte.d.ts +27 -0
  191. package/dist/components/ui/alert/alert.stories.svelte +53 -0
  192. package/dist/components/ui/alert/alert.stories.svelte.d.ts +27 -0
  193. package/dist/components/ui/alert/alert.svelte +5 -0
  194. package/dist/components/ui/alert/alert.svelte.d.ts +9 -0
  195. package/dist/components/ui/avatar/avatar.stories.svelte +16 -0
  196. package/dist/components/ui/avatar/avatar.stories.svelte.d.ts +27 -0
  197. package/dist/components/ui/badge/badge.stories.svelte +33 -0
  198. package/dist/components/ui/badge/badge.stories.svelte.d.ts +27 -0
  199. package/dist/components/ui/breadcrumb/breadcrumb.stories.svelte +33 -0
  200. package/dist/components/ui/breadcrumb/breadcrumb.stories.svelte.d.ts +27 -0
  201. package/dist/components/ui/button/button.stories.svelte +43 -0
  202. package/dist/components/ui/button/button.stories.svelte.d.ts +27 -0
  203. package/dist/components/ui/button/button.svelte +1 -2
  204. package/dist/components/ui/button/button.svelte.d.ts +0 -3
  205. package/dist/components/ui/button-group/button-group-separator.svelte.d.ts +1 -1
  206. package/dist/components/ui/card/card.stories.svelte +42 -0
  207. package/dist/components/ui/card/card.stories.svelte.d.ts +27 -0
  208. package/dist/components/ui/command/command.stories.svelte +51 -0
  209. package/dist/components/ui/command/command.stories.svelte.d.ts +27 -0
  210. package/dist/components/ui/dialog/dialog.stories.svelte +29 -0
  211. package/dist/components/ui/dialog/dialog.stories.svelte.d.ts +27 -0
  212. package/dist/components/ui/field/field-label.svelte.d.ts +1 -1
  213. package/dist/components/ui/field/field.stories.svelte +21 -0
  214. package/dist/components/ui/field/field.stories.svelte.d.ts +27 -0
  215. package/dist/components/ui/input/input.stories.svelte +40 -0
  216. package/dist/components/ui/input/input.stories.svelte.d.ts +27 -0
  217. package/dist/components/ui/input/input.svelte +2 -4
  218. package/dist/components/ui/item/item-separator.svelte.d.ts +1 -1
  219. package/dist/components/ui/label/label.stories.svelte +20 -0
  220. package/dist/components/ui/label/label.stories.svelte.d.ts +27 -0
  221. package/dist/components/ui/popover/popover.stories.svelte +29 -0
  222. package/dist/components/ui/popover/popover.stories.svelte.d.ts +27 -0
  223. package/dist/components/ui/select/select-group-heading.svelte.d.ts +1 -1
  224. package/dist/components/ui/select/select.stories.svelte +23 -0
  225. package/dist/components/ui/select/select.stories.svelte.d.ts +27 -0
  226. package/dist/components/ui/separator/separator.stories.svelte +24 -0
  227. package/dist/components/ui/separator/separator.stories.svelte.d.ts +27 -0
  228. package/dist/components/ui/sheet/sheet.stories.svelte +29 -0
  229. package/dist/components/ui/sheet/sheet.stories.svelte.d.ts +27 -0
  230. package/dist/components/ui/sidebar/sidebar-group.svelte +3 -3
  231. package/dist/components/ui/sidebar/sidebar-group.svelte.d.ts +2 -2
  232. package/dist/components/ui/sidebar/sidebar-menu-button.svelte +28 -30
  233. package/dist/components/ui/sidebar/sidebar-menu-button.svelte.d.ts +7 -7
  234. package/dist/components/ui/sidebar/sidebar-separator.svelte.d.ts +1 -1
  235. package/dist/components/ui/sidebar/sidebar-trigger.svelte +4 -4
  236. package/dist/components/ui/sonner/sonner.stories.svelte +22 -0
  237. package/dist/components/ui/sonner/sonner.stories.svelte.d.ts +26 -0
  238. package/dist/components/ui/sonner/sonner.svelte +8 -2
  239. package/dist/components/ui/sonner/toast-demo.svelte +29 -0
  240. package/dist/components/ui/sonner/toast-demo.svelte.d.ts +6 -0
  241. package/dist/components/ui/textarea/textarea.stories.svelte +22 -0
  242. package/dist/components/ui/textarea/textarea.stories.svelte.d.ts +27 -0
  243. package/dist/components/ui/textarea/textarea.svelte +0 -2
  244. package/dist/components/ui/toggle/toggle.stories.svelte +22 -0
  245. package/dist/components/ui/toggle/toggle.stories.svelte.d.ts +27 -0
  246. package/dist/components/ui/toggle-group/toggle-group.stories.svelte +17 -0
  247. package/dist/components/ui/toggle-group/toggle-group.stories.svelte.d.ts +27 -0
  248. package/dist/components/ui/tooltip/tooltip.stories.svelte +26 -0
  249. package/dist/components/ui/tooltip/tooltip.stories.svelte.d.ts +27 -0
  250. package/dist/core/fields/fieldSchemaToTs.d.ts +1 -0
  251. package/dist/core/fields/fieldSchemaToTs.js +133 -1
  252. package/dist/core/fields/layoutUtils.d.ts +17 -0
  253. package/dist/core/fields/layoutUtils.js +149 -0
  254. package/dist/core/fields/structuredToHtml.d.ts +9 -0
  255. package/dist/core/fields/structuredToHtml.js +161 -0
  256. package/dist/core/server/entries/operations/create.js +2 -1
  257. package/dist/core/server/entries/operations/get.js +8 -6
  258. package/dist/core/server/entries/operations/update.d.ts +3 -0
  259. package/dist/core/server/entries/operations/update.js +30 -2
  260. package/dist/core/server/fields/queryStructuredContent.d.ts +15 -0
  261. package/dist/core/server/fields/queryStructuredContent.js +65 -0
  262. package/dist/core/server/fields/resolveImageFields.js +51 -2
  263. package/dist/core/server/fields/resolveRelationFields.js +2 -2
  264. package/dist/core/server/fields/resolveRichtextLinks.js +80 -13
  265. package/dist/core/server/fields/resolveUrlFields.js +57 -6
  266. package/dist/core/server/fields/slugResolver.d.ts +10 -0
  267. package/dist/core/server/fields/slugResolver.js +34 -0
  268. package/dist/core/server/generator/fields.js +15 -4
  269. package/dist/core/server/generator/generator.js +3 -2
  270. package/dist/files-local/index.js +126 -64
  271. package/dist/paraglide/.prettierignore +3 -0
  272. package/dist/paraglide/messages/_index.d.ts +36 -0
  273. package/dist/paraglide/messages/_index.js +72 -0
  274. package/dist/paraglide/messages/en.d.ts +5 -0
  275. package/dist/paraglide/messages/en.js +14 -0
  276. package/dist/paraglide/messages/pl.d.ts +5 -0
  277. package/dist/paraglide/messages/pl.js +14 -0
  278. package/dist/paraglide/messages.d.ts +2 -0
  279. package/dist/paraglide/messages.js +4 -0
  280. package/dist/paraglide/registry.d.ts +21 -0
  281. package/dist/paraglide/registry.js +31 -0
  282. package/dist/paraglide/runtime.d.ts +583 -0
  283. package/dist/paraglide/runtime.js +1402 -0
  284. package/dist/paraglide/server.d.ts +67 -0
  285. package/dist/paraglide/server.js +175 -0
  286. package/dist/server/auth.d.ts +5 -0
  287. package/dist/server/auth.js +12 -1
  288. package/dist/sveltekit/components/structured-content.svelte +204 -0
  289. package/dist/sveltekit/components/structured-content.svelte.d.ts +21 -0
  290. package/dist/sveltekit/config.d.ts +13 -3
  291. package/dist/sveltekit/index.d.ts +3 -0
  292. package/dist/sveltekit/index.js +3 -0
  293. package/dist/sveltekit/server/handle.js +1 -0
  294. package/dist/types/config.d.ts +3 -0
  295. package/dist/types/fields.d.ts +19 -2
  296. package/dist/types/index.d.ts +2 -0
  297. package/dist/types/index.js +2 -0
  298. package/dist/types/layout.d.ts +54 -0
  299. package/dist/types/layout.js +6 -0
  300. package/dist/types/structured-content.d.ts +63 -0
  301. package/dist/types/structured-content.js +1 -0
  302. package/dist/updates/0.1.4/index.d.ts +2 -0
  303. package/dist/updates/0.1.4/index.js +11 -0
  304. package/dist/updates/0.1.5/index.d.ts +2 -0
  305. package/dist/updates/0.1.5/index.js +18 -0
  306. package/dist/updates/0.2.0/index.d.ts +2 -0
  307. package/dist/updates/0.2.0/index.js +11 -0
  308. package/dist/updates/0.2.2/index.d.ts +2 -0
  309. package/dist/updates/0.2.2/index.js +13 -0
  310. package/dist/updates/0.5.0/index.d.ts +2 -0
  311. package/dist/updates/0.5.0/index.js +14 -0
  312. package/dist/updates/index.js +6 -1
  313. package/package.json +17 -10
@@ -4,99 +4,65 @@
4
4
 
5
5
  @source '../../';
6
6
 
7
- @custom-variant dark (&:is(.dark *));
8
-
9
7
  :root {
10
- --radius: 0.65rem;
11
- --background: oklch(1 0 0);
12
- --foreground: oklch(0.141 0.005 285.823);
13
- /* Depth system - light mode */
14
- --depth-0-bg: oklch(1 0 0);
15
- --depth-1-bg: oklch(0.98 0.002 286);
16
- --depth-2-bg: oklch(0.96 0.003 286);
17
- --depth-3-bg: oklch(0.94 0.004 286);
18
- --depth-border-1: oklch(0.92 0.004 286);
19
- --depth-border-2: oklch(0.88 0.006 286);
20
- --depth-shadow-sm: 0 1px 3px rgb(0 0 0 / 0.08);
21
- --depth-shadow-md: 0 4px 8px rgb(0 0 0 / 0.1);
8
+ --radius: 0.5rem;
9
+ --background: oklch(0.986 0.005 286);
10
+ --foreground: oklch(0.228 0.038 283);
22
11
  --card: oklch(1 0 0);
23
- --card-foreground: oklch(0.141 0.005 285.823);
12
+ --card-foreground: oklch(0.228 0.038 283);
24
13
  --popover: oklch(1 0 0);
25
- --popover-foreground: oklch(0.141 0.005 285.823);
26
- --primary: oklch(0.623 0.214 259.815);
27
- --primary-foreground: oklch(0.97 0.014 254.604);
28
- --secondary: oklch(0.967 0.001 286.375);
29
- --secondary-foreground: oklch(0.21 0.006 285.885);
30
- --muted: oklch(0.967 0.001 286.375);
31
- --muted-foreground: oklch(0.552 0.016 285.938);
32
- --accent: oklch(0.967 0.001 286.375);
33
- --accent-foreground: oklch(0.21 0.006 285.885);
34
- --destructive: oklch(0.577 0.245 27.325);
35
- --border: oklch(0.92 0.004 286.32);
36
- --input: oklch(0.92 0.004 286.32);
37
- --ring: oklch(0.623 0.214 259.815);
14
+ --popover-foreground: oklch(0.228 0.038 283);
15
+ --primary: oklch(0.469 0.131 290);
16
+ --primary-foreground: oklch(1 0 0);
17
+ --secondary: oklch(0.944 0.019 299);
18
+ --secondary-foreground: oklch(0.469 0.131 290);
19
+ --muted: oklch(0.965 0.011 297);
20
+ --muted-foreground: oklch(0.456 0.028 285);
21
+ --accent: oklch(0.944 0.019 299);
22
+ --accent-foreground: oklch(0.469 0.131 290);
23
+ --destructive: oklch(0.576 0.155 23);
24
+ --border: oklch(0.911 0.023 294);
25
+ --input: oklch(0.911 0.023 294);
26
+ --ring: oklch(0.469 0.131 290);
38
27
  --chart-1: oklch(0.646 0.222 41.116);
39
28
  --chart-2: oklch(0.6 0.118 184.704);
40
29
  --chart-3: oklch(0.398 0.07 227.392);
41
30
  --chart-4: oklch(0.828 0.189 84.429);
42
31
  --chart-5: oklch(0.769 0.188 70.08);
43
- --sidebar: oklch(0.985 0 0);
44
- --sidebar-foreground: oklch(0.141 0.005 285.823);
45
- --sidebar-primary: oklch(0.623 0.214 259.815);
46
- --sidebar-primary-foreground: oklch(0.97 0.014 254.604);
47
- --sidebar-accent: oklch(0.967 0.001 286.375);
48
- --sidebar-accent-foreground: oklch(0.21 0.006 285.885);
49
- --sidebar-border: oklch(0.92 0.004 286.32);
50
- --sidebar-ring: oklch(0.623 0.214 259.815);
51
- }
52
-
53
- .dark {
54
- --background: oklch(0.141 0.005 285.823);
55
- --foreground: oklch(0.985 0 0);
56
- /* Depth system - dark mode */
57
- --depth-0-bg: oklch(0.141 0.005 285);
58
- --depth-1-bg: oklch(0.18 0.006 285);
59
- --depth-2-bg: oklch(0.21 0.006 286);
60
- --depth-3-bg: oklch(0.24 0.007 286);
61
- --depth-border-1: oklch(1 0 0 / 0.08);
62
- --depth-border-2: oklch(1 0 0 / 0.12);
63
- --depth-shadow-sm: 0 1px 3px rgb(0 0 0 / 0.3), inset 0 1px 0 rgb(255 255 255 / 0.04);
64
- --depth-shadow-md: 0 4px 8px rgb(0 0 0 / 0.3), inset 0 1px 0 rgb(255 255 255 / 0.05);
65
- --card: oklch(0.21 0.006 285.885);
66
- --card-foreground: oklch(0.985 0 0);
67
- --popover: oklch(0.21 0.006 285.885);
68
- --popover-foreground: oklch(0.985 0 0);
69
- --primary: oklch(0.546 0.245 262.881);
70
- --primary-foreground: oklch(0.379 0.146 265.522);
71
- --secondary: oklch(0.274 0.006 286.033);
72
- --secondary-foreground: oklch(0.985 0 0);
73
- --muted: oklch(0.274 0.006 286.033);
74
- --muted-foreground: oklch(0.705 0.015 286.067);
75
- --accent: oklch(0.274 0.006 286.033);
76
- --accent-foreground: oklch(0.985 0 0);
77
- --destructive: oklch(0.704 0.191 22.216);
78
- --border: oklch(1 0 0 / 10%);
79
- --input: oklch(1 0 0 / 15%);
80
- --ring: oklch(0.488 0.243 264.376);
81
- --chart-1: oklch(0.488 0.243 264.376);
82
- --chart-2: oklch(0.696 0.17 162.48);
83
- --chart-3: oklch(0.769 0.188 70.08);
84
- --chart-4: oklch(0.627 0.265 303.9);
85
- --chart-5: oklch(0.645 0.246 16.439);
86
- --sidebar: oklch(0.21 0.006 285.885);
87
- --sidebar-foreground: oklch(0.985 0 0);
88
- --sidebar-primary: oklch(0.546 0.245 262.881);
89
- --sidebar-primary-foreground: oklch(0.379 0.146 265.522);
90
- --sidebar-accent: oklch(0.274 0.006 286.033);
91
- --sidebar-accent-foreground: oklch(0.985 0 0);
92
- --sidebar-border: oklch(1 0 0 / 10%);
93
- --sidebar-ring: oklch(0.488 0.243 264.376);
32
+ --sidebar: oklch(1 0 0);
33
+ --sidebar-foreground: oklch(0.228 0.038 283);
34
+ --sidebar-primary: oklch(0.469 0.131 290);
35
+ --sidebar-primary-foreground: oklch(1 0 0);
36
+ --sidebar-accent: oklch(0.965 0.011 297);
37
+ --sidebar-accent-foreground: oklch(0.228 0.038 283);
38
+ --sidebar-border: oklch(0.911 0.023 294);
39
+ --sidebar-ring: oklch(0.469 0.131 290);
40
+
41
+ /* Extended palette */
42
+ --plum-dark: oklch(0.39 0.107 291);
43
+ --plum-darker: oklch(0.304 0.088 288);
44
+ --lavender: oklch(0.77 0.09 295);
45
+ --lavender-light: oklch(0.889 0.042 298);
46
+ --lavender-lighter: oklch(0.944 0.019 299);
47
+ --success: oklch(0.571 0.107 156);
48
+ --success-bg: oklch(0.967 0.014 156);
49
+ --warning: oklch(0.675 0.118 71);
50
+ --warning-bg: oklch(0.976 0.015 77);
51
+ --error-bg: oklch(0.965 0.014 17);
52
+ --text-light: oklch(0.635 0.036 285);
53
+
54
+ /* Shadows plum-tinted */
55
+ --shadow-sm: 0 1px 2px rgba(43, 37, 88, 0.04);
56
+ --shadow: 0 2px 8px rgba(43, 37, 88, 0.06);
57
+ --shadow-lg: 0 8px 24px rgba(43, 37, 88, 0.1);
58
+ --shadow-xl: 0 16px 48px rgba(43, 37, 88, 0.14);
94
59
  }
95
60
 
96
61
  @theme inline {
97
- --radius-sm: calc(var(--radius) - 4px);
62
+ --font-sans: 'Plus Jakarta Sans', ui-sans-serif, system-ui, sans-serif;
63
+ --radius-sm: 0.375rem;
98
64
  --radius-md: calc(var(--radius) - 2px);
99
- --radius-lg: var(--radius);
65
+ --radius-lg: 0.75rem;
100
66
  --radius-xl: calc(var(--radius) + 4px);
101
67
  --color-background: var(--background);
102
68
  --color-foreground: var(--foreground);
@@ -129,6 +95,21 @@
129
95
  --color-sidebar-accent-foreground: var(--sidebar-accent-foreground);
130
96
  --color-sidebar-border: var(--sidebar-border);
131
97
  --color-sidebar-ring: var(--sidebar-ring);
98
+ --color-plum-dark: var(--plum-dark);
99
+ --color-plum-darker: var(--plum-darker);
100
+ --color-lavender: var(--lavender);
101
+ --color-lavender-light: var(--lavender-light);
102
+ --color-lavender-lighter: var(--lavender-lighter);
103
+ --color-success: var(--success);
104
+ --color-success-bg: var(--success-bg);
105
+ --color-warning: var(--warning);
106
+ --color-warning-bg: var(--warning-bg);
107
+ --color-error-bg: var(--error-bg);
108
+ --color-text-light: var(--text-light);
109
+ --shadow-sm: var(--shadow-sm);
110
+ --shadow-md: var(--shadow);
111
+ --shadow-lg: var(--shadow-lg);
112
+ --shadow-xl: var(--shadow-xl);
132
113
  }
133
114
 
134
115
  @layer base {
@@ -137,122 +118,1520 @@
137
118
  }
138
119
 
139
120
  body {
140
- @apply bg-background text-foreground;
121
+ @apply bg-background text-foreground antialiased;
122
+ }
123
+ }
124
+
125
+ /* ═══ Sidebar navigation — match mockup ═══ */
126
+
127
+ /* Scrollbar */
128
+ [data-slot='sidebar-content'] {
129
+ scrollbar-width: thin;
130
+ scrollbar-color: var(--border) transparent;
131
+ }
132
+ [data-slot='sidebar-content']::-webkit-scrollbar {
133
+ width: 4px;
134
+ }
135
+ [data-slot='sidebar-content']::-webkit-scrollbar-track {
136
+ background: transparent;
137
+ }
138
+ [data-slot='sidebar-content']::-webkit-scrollbar-thumb {
139
+ background: var(--border);
140
+ border-radius: 2px;
141
+ }
142
+
143
+ /* Group separators (adjacent groups get border-top) */
144
+ [data-slot='sidebar-content'] > [data-sidebar='group'] + [data-sidebar='group'] {
145
+ border-top: 1px solid var(--sidebar-border);
146
+ margin-top: 4px;
147
+ padding-top: 8px;
148
+ }
149
+
150
+ /* Group label typography */
151
+ [data-slot='sidebar-content'] [data-sidebar='group-label'] {
152
+ padding: 6px 16px 4px !important;
153
+ font-size: 10px !important;
154
+ font-weight: 700 !important;
155
+ letter-spacing: 0.06em !important;
156
+ text-transform: uppercase !important;
157
+ height: auto !important;
158
+ }
159
+
160
+ /* Menu list spacing */
161
+ [data-slot='sidebar-content'] [data-sidebar='menu'] {
162
+ gap: 1px !important;
163
+ padding-left: 6px !important;
164
+ padding-right: 6px !important;
165
+ }
166
+
167
+ /* Nav item button sizing */
168
+ [data-slot='sidebar-content'] [data-sidebar='menu-button'] {
169
+ gap: 10px !important;
170
+ padding: 6px 10px !important;
171
+ font-size: 13px !important;
172
+ font-weight: 500 !important;
173
+ min-height: 36px !important;
174
+ height: auto !important;
175
+ border-radius: 6px !important;
176
+ }
177
+
178
+ /* Active state */
179
+ [data-sidebar='menu-button'][data-active='true'] {
180
+ position: relative;
181
+ background: rgba(91, 74, 158, 0.08) !important;
182
+ color: var(--primary) !important;
183
+ font-weight: 600 !important;
184
+ }
185
+ [data-sidebar='menu-button'][data-active='true']:hover {
186
+ background: rgba(91, 74, 158, 0.12) !important;
187
+ }
188
+
189
+ /* Active left indicator bar */
190
+ div[data-collapsible]:not([data-collapsible='icon'])
191
+ [data-sidebar='menu-button'][data-active='true']::before {
192
+ content: '';
193
+ position: absolute;
194
+ left: 0;
195
+ top: 50%;
196
+ transform: translateY(-50%);
197
+ width: 3px;
198
+ height: 20px;
199
+ border-radius: 0 2px 2px 0;
200
+ background: var(--primary);
201
+ }
202
+
203
+ /* Prose typography — map to admin design system (outside @layer to override typography plugin) */
204
+ .prose {
205
+ --tw-prose-body: var(--foreground);
206
+ --tw-prose-headings: var(--foreground);
207
+ --tw-prose-links: var(--primary);
208
+ --tw-prose-code: var(--foreground);
209
+ --tw-prose-pre-bg: var(--muted);
210
+ --tw-prose-borders: var(--border);
211
+ --tw-prose-quotes: var(--muted-foreground);
212
+ --tw-prose-quote-borders: var(--lavender);
213
+ --tw-prose-bold: var(--foreground);
214
+ --tw-prose-counters: var(--muted-foreground);
215
+ --tw-prose-bullets: var(--muted-foreground);
216
+ --tw-prose-captions: var(--muted-foreground);
217
+ --tw-prose-pre-code: var(--foreground);
218
+ --tw-prose-th-borders: var(--border);
219
+ --tw-prose-td-borders: var(--border);
220
+ }
221
+
222
+ /* Inline code styling */
223
+ .prose :where(code):not(:where(pre *)) {
224
+ background: var(--muted);
225
+ padding: 0.2em 0.4em;
226
+ border-radius: 0.375rem;
227
+ font-size: 0.875em;
228
+ font-weight: 500;
229
+ }
230
+
231
+ .prose :where(code):not(:where(pre *))::before,
232
+ .prose :where(code):not(:where(pre *))::after {
233
+ content: none;
234
+ }
235
+
236
+ /* Blockquote — lavender left border */
237
+ .prose :where(blockquote) {
238
+ border-left-color: var(--lavender);
239
+ border-left-width: 3px;
240
+ }
241
+
242
+ /* Link — underline offset */
243
+ .prose :where(a) {
244
+ text-underline-offset: 3px;
245
+ text-decoration-thickness: 1px;
246
+ font-weight: inherit;
247
+ }
248
+
249
+ /* Table header — stronger visual weight */
250
+ .ProseMirror th {
251
+ font-size: 0.8125rem;
252
+ text-transform: uppercase;
253
+ letter-spacing: 0.03em;
254
+ }
255
+
256
+ /* ProseMirror editor shared styles */
257
+ .ProseMirror table {
258
+ border-collapse: collapse;
259
+ width: 100%;
260
+ margin: 1em 0;
261
+ }
262
+
263
+ .ProseMirror th,
264
+ .ProseMirror td {
265
+ border: 1px solid var(--border);
266
+ padding: 0.5em;
267
+ text-align: left;
268
+ }
269
+
270
+ .ProseMirror th {
271
+ background-color: var(--muted);
272
+ font-weight: 600;
273
+ }
274
+
275
+ .ProseMirror .selectedCell {
276
+ background-color: var(--accent);
277
+ }
278
+
279
+ .ProseMirror pre {
280
+ background-color: var(--muted);
281
+ border-radius: 0.5rem;
282
+ padding: 1rem;
283
+ overflow-x: auto;
284
+ }
285
+
286
+ .ProseMirror pre code {
287
+ background: none;
288
+ padding: 0;
289
+ font-size: 0.875rem;
290
+ }
291
+
292
+ /* Heading a11y inline warning */
293
+ .heading-a11y-warning {
294
+ display: flex;
295
+ align-items: center;
296
+ gap: 6px;
297
+ padding: 6px 10px;
298
+ margin: 4px 0;
299
+ border-radius: 6px;
300
+ background: var(--warning-bg);
301
+ color: #7a5520;
302
+ font-size: 12px;
303
+ font-weight: 500;
304
+ line-height: 1.4;
305
+ pointer-events: none;
306
+ }
307
+ .heading-a11y-warning svg {
308
+ flex-shrink: 0;
309
+ }
310
+
311
+ .tiptap-highlight {
312
+ background-color: rgb(250 204 21 / 0.4);
313
+ padding: 0.125em 0.25em;
314
+ border-radius: 0.25em;
315
+ }
316
+
317
+ .tiptap-image,
318
+ .tiptap-video {
319
+ max-width: 100%;
320
+ height: auto;
321
+ border-radius: 0.5rem;
322
+ }
323
+
324
+ .tiptap-figure {
325
+ margin: 1em 0;
326
+ display: table;
327
+ }
328
+
329
+ .tiptap-figure.align-left {
330
+ float: left;
331
+ margin-right: 1em;
332
+ max-width: 50%;
333
+ }
334
+
335
+ .tiptap-figure.align-right {
336
+ float: right;
337
+ margin-left: 1em;
338
+ max-width: 50%;
339
+ }
340
+
341
+ .tiptap-figure.align-center {
342
+ margin-left: auto;
343
+ margin-right: auto;
344
+ }
345
+
346
+ .tiptap-figure img {
347
+ max-width: 100%;
348
+ height: auto;
349
+ border-radius: 0.5rem;
350
+ }
351
+
352
+ .tiptap-figure figcaption {
353
+ font-size: 0.875rem;
354
+ color: var(--muted-foreground);
355
+ text-align: center;
356
+ margin-top: 0.5rem;
357
+ }
358
+
359
+ /* Syntax highlighting */
360
+ .hljs-comment,
361
+ .hljs-quote {
362
+ color: var(--muted-foreground);
363
+ font-style: italic;
364
+ }
365
+
366
+ .hljs-keyword,
367
+ .hljs-selector-tag,
368
+ .hljs-addition {
369
+ color: #c678dd;
370
+ }
371
+
372
+ .hljs-number,
373
+ .hljs-string,
374
+ .hljs-meta .hljs-meta-string,
375
+ .hljs-literal,
376
+ .hljs-doctag,
377
+ .hljs-regexp {
378
+ color: #98c379;
379
+ }
380
+
381
+ .hljs-title,
382
+ .hljs-section,
383
+ .hljs-name,
384
+ .hljs-selector-id,
385
+ .hljs-selector-class {
386
+ color: #e5c07b;
387
+ }
388
+
389
+ .hljs-attribute,
390
+ .hljs-attr,
391
+ .hljs-variable,
392
+ .hljs-template-variable,
393
+ .hljs-class .hljs-title,
394
+ .hljs-type {
395
+ color: #61afef;
396
+ }
397
+
398
+ .hljs-symbol,
399
+ .hljs-bullet,
400
+ .hljs-subst,
401
+ .hljs-meta,
402
+ .hljs-meta .hljs-keyword,
403
+ .hljs-selector-attr,
404
+ .hljs-selector-pseudo,
405
+ .hljs-link {
406
+ color: #56b6c2;
407
+ }
408
+
409
+ .hljs-built_in,
410
+ .hljs-deletion {
411
+ color: #e06c75;
412
+ }
413
+
414
+ .hljs-emphasis {
415
+ font-style: italic;
416
+ }
417
+
418
+ .hljs-strong {
419
+ font-weight: bold;
420
+ }
421
+
422
+ /* ═══════════ ACCOUNT SETTINGS ═══════════ */
423
+
424
+ /* Page wrapper */
425
+ .acct-content {
426
+ flex: 1;
427
+ overflow-y: auto;
428
+ padding: 32px 40px 60px;
429
+ }
430
+ .acct-inner {
431
+ max-width: 720px;
432
+ margin: 0 auto;
433
+ }
434
+
435
+ /* Staggered fadeUp */
436
+ @keyframes acct-fade-up {
437
+ from {
438
+ opacity: 0;
439
+ transform: translateY(6px);
141
440
  }
441
+ to {
442
+ opacity: 1;
443
+ transform: translateY(0);
444
+ }
445
+ }
446
+ .acct-fade-up {
447
+ animation: acct-fade-up 0.3s ease both;
448
+ }
449
+ .acct-fade-up:nth-child(2) {
450
+ animation-delay: 0.04s;
451
+ }
452
+ .acct-fade-up:nth-child(3) {
453
+ animation-delay: 0.08s;
454
+ }
455
+ .acct-fade-up:nth-child(4) {
456
+ animation-delay: 0.12s;
457
+ }
458
+ .acct-fade-up:nth-child(5) {
459
+ animation-delay: 0.16s;
460
+ }
461
+ .acct-fade-up:nth-child(6) {
462
+ animation-delay: 0.2s;
463
+ }
464
+
465
+ /* Profile avatar */
466
+ .acct-avatar {
467
+ width: 80px;
468
+ height: 80px;
469
+ border-radius: 50%;
470
+ background: linear-gradient(135deg, var(--primary), var(--lavender));
471
+ display: flex;
472
+ align-items: center;
473
+ justify-content: center;
474
+ font-size: 24px;
475
+ font-weight: 700;
476
+ color: white;
477
+ flex-shrink: 0;
478
+ }
479
+
480
+ /* Role badge */
481
+ .acct-role-badge {
482
+ display: inline-flex;
483
+ align-items: center;
484
+ padding: 5px 12px;
485
+ background: var(--lavender-lighter);
486
+ color: var(--primary);
487
+ font-size: 13px;
488
+ font-weight: 600;
489
+ border-radius: var(--radius-sm);
490
+ }
491
+
492
+ /* Input with icon/button on right */
493
+ .acct-input-wrap {
494
+ position: relative;
495
+ }
496
+ .acct-input-wrap input {
497
+ padding-right: 36px;
498
+ }
499
+ .acct-input-icon {
500
+ position: absolute;
501
+ right: 10px;
502
+ top: 50%;
503
+ transform: translateY(-50%);
504
+ color: var(--text-light);
505
+ display: flex;
506
+ align-items: center;
507
+ pointer-events: none;
508
+ }
509
+
510
+ /* Password toggle */
511
+ .acct-pw-toggle {
512
+ position: absolute;
513
+ right: 8px;
514
+ top: 50%;
515
+ transform: translateY(-50%);
516
+ background: none;
517
+ border: none;
518
+ cursor: pointer;
519
+ color: var(--text-light);
520
+ padding: 2px;
521
+ border-radius: 4px;
522
+ display: flex;
523
+ align-items: center;
524
+ justify-content: center;
525
+ transition: color 0.2s ease;
526
+ }
527
+ .acct-pw-toggle:hover {
528
+ color: var(--primary);
142
529
  }
530
+ .acct-pw-toggle:focus-visible {
531
+ outline: 2px solid var(--primary);
532
+ outline-offset: 2px;
533
+ }
534
+
535
+ /* Strength meter */
536
+ .acct-strength-meter {
537
+ display: flex;
538
+ gap: 4px;
539
+ margin-top: 8px;
540
+ margin-bottom: 4px;
541
+ }
542
+ .acct-strength-seg {
543
+ flex: 1;
544
+ height: 4px;
545
+ border-radius: 2px;
546
+ background: var(--border);
547
+ transition: background 0.2s ease;
548
+ }
549
+ .acct-strength-seg.filled-weak {
550
+ background: var(--destructive);
551
+ }
552
+ .acct-strength-seg.filled-medium {
553
+ background: var(--warning);
554
+ }
555
+ .acct-strength-seg.filled-strong {
556
+ background: var(--success);
557
+ }
558
+ .acct-strength-seg.filled-very-strong {
559
+ background: var(--success);
560
+ }
561
+
562
+ .acct-strength-text {
563
+ font-size: 12px;
564
+ font-weight: 500;
565
+ }
566
+ .acct-strength-text.weak {
567
+ color: var(--destructive);
568
+ }
569
+ .acct-strength-text.medium {
570
+ color: var(--warning);
571
+ }
572
+ .acct-strength-text.strong {
573
+ color: var(--success);
574
+ }
575
+ .acct-strength-text.very-strong {
576
+ color: var(--success);
577
+ }
578
+
579
+ /* Form actions with border-top */
580
+ .acct-form-actions {
581
+ display: flex;
582
+ justify-content: flex-end;
583
+ margin-top: 20px;
584
+ padding-top: 16px;
585
+ border-top: 1px solid var(--border);
586
+ }
587
+
588
+ /* Session items */
589
+ .acct-session-item {
590
+ display: flex;
591
+ align-items: center;
592
+ gap: 14px;
593
+ padding: 14px 0;
594
+ border-bottom: 1px solid var(--border);
595
+ }
596
+ .acct-session-item:first-of-type {
597
+ padding-top: 0;
598
+ }
599
+ .acct-session-item:last-of-type {
600
+ border-bottom: none;
601
+ }
602
+
603
+ .acct-session-icon {
604
+ width: 40px;
605
+ height: 40px;
606
+ border-radius: var(--radius);
607
+ background: var(--muted);
608
+ display: flex;
609
+ align-items: center;
610
+ justify-content: center;
611
+ flex-shrink: 0;
612
+ color: var(--muted-foreground);
613
+ }
614
+
615
+ .acct-session-badge {
616
+ font-size: 11px;
617
+ font-weight: 600;
618
+ background: var(--success-bg);
619
+ color: var(--success);
620
+ padding: 1px 8px;
621
+ border-radius: 10px;
622
+ }
623
+
624
+ .acct-dot-online {
625
+ width: 6px;
626
+ height: 6px;
627
+ border-radius: 50%;
628
+ background: var(--success);
629
+ display: inline-block;
630
+ }
631
+
632
+ .acct-sessions-footer {
633
+ margin-top: 16px;
634
+ padding-top: 16px;
635
+ border-top: 1px solid var(--border);
636
+ }
637
+
638
+ /* ═══════════ MEDIA LIBRARY ═══════════ */
639
+
640
+ /* Checkered transparency background */
641
+ .ml-checkered-bg {
642
+ background: repeating-conic-gradient(var(--muted) 0% 25%, var(--card) 0% 50%) 50% / 16px 16px;
643
+ }
644
+
645
+ /* Staggered fadeUp animation for file cards */
646
+ @keyframes ml-fade-up {
647
+ from {
648
+ opacity: 0;
649
+ transform: translateY(6px);
650
+ }
651
+ to {
652
+ opacity: 1;
653
+ transform: translateY(0);
654
+ }
655
+ }
656
+ .ml-fade-up {
657
+ animation: ml-fade-up 0.3s ease both;
658
+ }
659
+ .ml-fade-up:nth-child(1) {
660
+ animation-delay: 0.02s;
661
+ }
662
+ .ml-fade-up:nth-child(2) {
663
+ animation-delay: 0.04s;
664
+ }
665
+ .ml-fade-up:nth-child(3) {
666
+ animation-delay: 0.06s;
667
+ }
668
+ .ml-fade-up:nth-child(4) {
669
+ animation-delay: 0.08s;
670
+ }
671
+ .ml-fade-up:nth-child(5) {
672
+ animation-delay: 0.1s;
673
+ }
674
+ .ml-fade-up:nth-child(6) {
675
+ animation-delay: 0.12s;
676
+ }
677
+ .ml-fade-up:nth-child(7) {
678
+ animation-delay: 0.14s;
679
+ }
680
+ .ml-fade-up:nth-child(8) {
681
+ animation-delay: 0.16s;
682
+ }
683
+ .ml-fade-up:nth-child(9) {
684
+ animation-delay: 0.18s;
685
+ }
686
+ .ml-fade-up:nth-child(10) {
687
+ animation-delay: 0.2s;
688
+ }
689
+ .ml-fade-up:nth-child(11) {
690
+ animation-delay: 0.22s;
691
+ }
692
+ .ml-fade-up:nth-child(12) {
693
+ animation-delay: 0.24s;
694
+ }
695
+
696
+ /* Drop zone */
697
+ .ml-drop-zone {
698
+ border: 2px dashed var(--border);
699
+ border-radius: var(--radius-lg);
700
+ display: flex;
701
+ align-items: center;
702
+ justify-content: center;
703
+ gap: 8px;
704
+ color: var(--text-light);
705
+ font-size: 13px;
706
+ font-weight: 500;
707
+ transition: 0.2s cubic-bezier(0.4, 0, 0.2, 1);
708
+ }
709
+ .ml-drop-zone:hover,
710
+ .ml-drop-zone.drag-over {
711
+ border-color: var(--lavender);
712
+ background: var(--lavender-lighter);
713
+ color: var(--primary);
714
+ }
715
+
716
+ /* Selection checkmark overlay */
717
+ .ml-file-check {
718
+ position: absolute;
719
+ top: 6px;
720
+ right: 6px;
721
+ width: 22px;
722
+ height: 22px;
723
+ background: var(--primary);
724
+ border-radius: 50%;
725
+ display: flex;
726
+ align-items: center;
727
+ justify-content: center;
728
+ opacity: 0;
729
+ transform: scale(0.6);
730
+ transition:
731
+ opacity 0.15s ease,
732
+ transform 0.15s ease;
733
+ box-shadow: 0 2px 6px rgba(91, 74, 158, 0.3);
734
+ z-index: 10;
735
+ }
736
+ .ml-file-check.visible {
737
+ opacity: 1;
738
+ transform: scale(1);
739
+ }
740
+
741
+ /* Video play button overlay */
742
+ .ml-video-overlay {
743
+ position: absolute;
744
+ inset: 0;
745
+ display: flex;
746
+ align-items: center;
747
+ justify-content: center;
748
+ background: rgba(26, 26, 46, 0.15);
749
+ }
750
+ .ml-video-play {
751
+ width: 36px;
752
+ height: 36px;
753
+ border-radius: 50%;
754
+ background: rgba(255, 255, 255, 0.9);
755
+ backdrop-filter: blur(4px);
756
+ display: flex;
757
+ align-items: center;
758
+ justify-content: center;
759
+ box-shadow: 0 2px 8px rgba(0, 0, 0, 0.15);
760
+ }
761
+
762
+ /* File type icon thumbnail (pdf, audio, other) */
763
+ .ml-file-thumb {
764
+ position: absolute;
765
+ inset: 0;
766
+ display: flex;
767
+ align-items: center;
768
+ justify-content: center;
769
+ background: var(--muted);
770
+ color: var(--text-light);
771
+ }
772
+
773
+ /* Bulk action bar slide-up */
774
+ @keyframes ml-bulk-slide-up {
775
+ from {
776
+ opacity: 0;
777
+ transform: translateX(-50%) translateY(100%);
778
+ }
779
+ to {
780
+ opacity: 1;
781
+ transform: translateX(-50%) translateY(0);
782
+ }
783
+ }
784
+ .ml-bulk-bar {
785
+ position: fixed;
786
+ bottom: 24px;
787
+ left: 50%;
788
+ transform: translateX(-50%);
789
+ animation: ml-bulk-slide-up 0.3s cubic-bezier(0.32, 0.72, 0, 1) both;
790
+ z-index: 100;
791
+ }
792
+
793
+ /* ═══════════ LOGIN PAGE ═══════════ */
143
794
 
144
- /* Glassmorphism animations */
145
- @keyframes float-slow {
795
+ /* Orb drift animations */
796
+ @keyframes login-drift-1 {
146
797
  0%,
147
798
  100% {
148
- transform: translateY(0px) translateX(0px);
799
+ transform: translate(0, 0) scale(1);
149
800
  }
150
- 25% {
151
- transform: translateY(-20px) translateX(10px);
801
+ 33% {
802
+ transform: translate(-30px, 20px) scale(1.05);
152
803
  }
153
- 50% {
154
- transform: translateY(-10px) translateX(-5px);
804
+ 66% {
805
+ transform: translate(20px, -15px) scale(0.95);
806
+ }
807
+ }
808
+ @keyframes login-drift-2 {
809
+ 0%,
810
+ 100% {
811
+ transform: translate(0, 0) scale(1);
812
+ }
813
+ 33% {
814
+ transform: translate(25px, -20px) scale(1.08);
155
815
  }
156
- 75% {
157
- transform: translateY(-25px) translateX(5px);
816
+ 66% {
817
+ transform: translate(-15px, 25px) scale(0.96);
158
818
  }
159
819
  }
160
-
161
- @keyframes pulse-glow {
820
+ @keyframes login-drift-3 {
162
821
  0%,
163
822
  100% {
164
- opacity: 0.1;
165
823
  transform: translate(-50%, -50%) scale(1);
824
+ opacity: 0.3;
166
825
  }
167
826
  50% {
168
- opacity: 0.2;
169
- transform: translate(-50%, -50%) scale(1.1);
827
+ transform: translate(-50%, -50%) scale(1.15);
828
+ opacity: 0.5;
170
829
  }
171
830
  }
172
831
 
173
- .animate-float-slow {
174
- animation: float-slow 10s ease-in-out infinite;
832
+ /* Card entrance */
833
+ @keyframes login-card-enter {
834
+ from {
835
+ opacity: 0;
836
+ transform: translateY(16px) scale(0.98);
837
+ }
838
+ to {
839
+ opacity: 1;
840
+ transform: translateY(0) scale(1);
841
+ }
175
842
  }
176
843
 
177
- .animate-pulse-glow {
178
- animation: pulse-glow 4s ease-in-out infinite;
844
+ /* Background orbs */
845
+ .login-orb {
846
+ position: absolute;
847
+ border-radius: 50%;
848
+ filter: blur(80px);
849
+ opacity: 0.35;
850
+ }
851
+ .login-orb--1 {
852
+ width: 500px;
853
+ height: 500px;
854
+ background: radial-gradient(circle, var(--lavender-light) 0%, transparent 70%);
855
+ top: -10%;
856
+ right: -5%;
857
+ animation: login-drift-1 20s ease-in-out infinite;
858
+ }
859
+ .login-orb--2 {
860
+ width: 400px;
861
+ height: 400px;
862
+ background: radial-gradient(circle, var(--lavender) 0%, transparent 70%);
863
+ bottom: -8%;
864
+ left: -8%;
865
+ animation: login-drift-2 24s ease-in-out infinite;
866
+ }
867
+ .login-orb--3 {
868
+ width: 250px;
869
+ height: 250px;
870
+ background: radial-gradient(circle, var(--lavender-lighter) 0%, transparent 70%);
871
+ top: 50%;
872
+ left: 50%;
873
+ transform: translate(-50%, -50%);
874
+ animation: login-drift-3 18s ease-in-out infinite;
179
875
  }
180
876
 
181
- /* Utility classes */
877
+ /* Card & footer entrance animations */
878
+ .login-card-enter {
879
+ animation: login-card-enter 0.6s cubic-bezier(0.16, 1, 0.3, 1) both;
880
+ }
881
+ .login-footer-enter {
882
+ animation: login-card-enter 0.6s cubic-bezier(0.16, 1, 0.3, 1) 0.15s both;
883
+ }
182
884
 
183
- /* Static container - no hover lift */
184
- .glass-panel {
185
- @apply rounded-2xl border border-slate-200/50 bg-white/80 shadow-lg backdrop-blur-xl dark:border-white/10 dark:bg-slate-900/60;
885
+ /* Login input override taller, hover border */
886
+ .login-input {
887
+ height: 44px !important;
888
+ }
889
+ .login-input:hover {
890
+ border-color: var(--lavender) !important;
186
891
  }
187
892
 
188
- /* Interactive card - with hover lift (only for clickable elements) */
189
- .glass-card {
190
- @apply rounded-2xl border border-slate-200/50 bg-white/80 shadow-lg backdrop-blur-xl transition-all duration-300 dark:border-white/10 dark:bg-slate-900/60;
893
+ /* Reduced motion: disable login animations (WCAG 2.3.3) */
894
+ @media (prefers-reduced-motion: reduce) {
895
+ .login-orb {
896
+ animation: none !important;
897
+ }
898
+ .login-card-enter {
899
+ animation: none !important;
900
+ opacity: 1;
901
+ }
902
+ .login-footer-enter {
903
+ animation: none !important;
904
+ opacity: 1;
905
+ }
191
906
  }
192
907
 
193
- .glass-card:hover {
194
- @apply -translate-y-1 shadow-xl;
908
+ /* ═══════════ PRELOADER ═══════════ */
909
+
910
+ @keyframes preloader-spin {
911
+ to {
912
+ transform: rotate(360deg);
913
+ }
195
914
  }
196
915
 
197
- /* Better contrast for muted text on glass backgrounds */
198
- .glass-text-muted {
199
- @apply text-slate-600 dark:text-slate-300;
916
+ .preloader-ring {
917
+ width: 100%;
918
+ height: 100%;
919
+ border-radius: 50%;
920
+ border: 3px solid var(--lavender-light);
921
+ border-top-color: var(--primary);
922
+ animation: preloader-spin 0.9s cubic-bezier(0.4, 0.15, 0.6, 0.85) infinite;
200
923
  }
201
924
 
202
- .gradient-primary {
203
- background: linear-gradient(135deg, #2d4a77 0%, #4975ae 100%);
925
+ @keyframes preloader-fade-in {
926
+ from {
927
+ opacity: 0;
928
+ transform: scale(0.96);
929
+ }
930
+ to {
931
+ opacity: 1;
932
+ transform: scale(1);
933
+ }
204
934
  }
205
935
 
206
- /* Depth utility classes */
207
- .glass-depth-1 {
208
- background: var(--depth-1-bg);
209
- box-shadow: var(--depth-shadow-sm);
210
- border-color: var(--depth-border-1);
936
+ .preloader-fade-in {
937
+ animation: preloader-fade-in 0.5s cubic-bezier(0.16, 1, 0.3, 1) both;
211
938
  }
212
939
 
213
- .glass-depth-2 {
214
- background: var(--depth-2-bg);
215
- box-shadow: var(--depth-shadow-md);
216
- border-color: var(--depth-border-2);
940
+ @media (prefers-reduced-motion: reduce) {
941
+ .preloader-ring {
942
+ animation: none !important;
943
+ opacity: 0.7;
944
+ }
945
+ .preloader-fade-in {
946
+ animation: none !important;
947
+ opacity: 1;
948
+ transform: scale(1);
949
+ }
950
+ }
951
+
952
+ /* ═══════════ TOAST NOTIFICATIONS ═══════════ */
953
+
954
+ /* Rich color overrides — remap sonner vars to AriaCMS tokens */
955
+ [data-sonner-toaster][data-sonner-theme='light'] {
956
+ --success-bg: #edf7f0;
957
+ --success-border: #3a8a5c;
958
+ --success-text: #3a8a5c;
959
+ --error-bg: #fdf0f0;
960
+ --error-border: #c44b4b;
961
+ --error-text: #c44b4b;
962
+ --warning-bg: #fdf6ec;
963
+ --warning-border: #c4893a;
964
+ --warning-text: #7a5520;
965
+ --info-bg: #eeeaf8;
966
+ --info-border: #b8a9e8;
967
+ --info-text: #463879;
968
+ }
969
+
970
+ /* Base toast */
971
+ [data-sonner-toaster] [data-sonner-toast] {
972
+ font-family: 'Plus Jakarta Sans', ui-sans-serif, system-ui, sans-serif;
973
+ font-size: 14px;
974
+ box-shadow: var(--shadow);
975
+ border-left: 3px solid var(--border);
217
976
  }
218
977
 
219
- .glass-depth-3 {
220
- background: var(--depth-3-bg);
221
- box-shadow: var(--depth-shadow-md);
222
- border-color: var(--depth-border-2);
978
+ /* Per-type left border accent */
979
+ [data-sonner-toaster] [data-sonner-toast][data-type='success'] {
980
+ border-left-color: #3a8a5c;
981
+ }
982
+ [data-sonner-toaster] [data-sonner-toast][data-type='error'] {
983
+ border-left-color: #c44b4b;
984
+ }
985
+ [data-sonner-toaster] [data-sonner-toast][data-type='warning'] {
986
+ border-left-color: #c4893a;
987
+ }
988
+ [data-sonner-toaster] [data-sonner-toast][data-type='info'] {
989
+ border-left-color: #b8a9e8;
223
990
  }
224
991
 
225
- .glass-inset {
226
- background: oklch(0.97 0 0);
227
- box-shadow: inset 0 2px 4px rgb(0 0 0 / 0.05);
992
+ /* Title */
993
+ [data-sonner-toaster] [data-sonner-toast] [data-title] {
994
+ font-weight: 600;
995
+ font-size: 14px;
228
996
  }
229
997
 
230
- .dark .glass-inset {
231
- background: oklch(0.12 0.005 285);
232
- box-shadow: inset 0 2px 4px rgb(0 0 0 / 0.2);
998
+ /* Description */
999
+ [data-sonner-toaster] [data-sonner-toast] [data-description] {
1000
+ font-size: 13px;
1001
+ font-weight: 400;
1002
+ opacity: 0.85;
233
1003
  }
234
1004
 
235
- /* Nesting depth accent borders */
236
- [data-depth="1"] {
1005
+ /* Close button */
1006
+ [data-sonner-toaster] [data-sonner-toast] [data-close-button] {
1007
+ background: var(--card);
1008
+ border-color: var(--border);
1009
+ }
1010
+
1011
+ /* Action button */
1012
+ [data-sonner-toaster] [data-sonner-toast] [data-button] {
1013
+ background: var(--primary);
1014
+ color: var(--primary-foreground);
1015
+ font-weight: 600;
1016
+ border-radius: 8px;
1017
+ }
1018
+
1019
+ /* Focus ring */
1020
+ [data-sonner-toaster] [data-sonner-toast]:focus-visible {
1021
+ outline: 2px solid var(--ring);
1022
+ outline-offset: 2px;
1023
+ }
1024
+
1025
+ /* Reduced motion — disable toast animations (WCAG 2.3.3) */
1026
+ @media (prefers-reduced-motion: reduce) {
1027
+ [data-sonner-toaster] [data-sonner-toast] {
1028
+ transition: none !important;
1029
+ animation: none !important;
1030
+ }
1031
+ }
1032
+
1033
+ /* ═══════════ USERS PAGE ═══════════ */
1034
+
1035
+ /* Avatar circle */
1036
+ .users-avatar {
1037
+ width: 36px;
1038
+ height: 36px;
1039
+ border-radius: 50%;
1040
+ flex-shrink: 0;
1041
+ display: flex;
1042
+ align-items: center;
1043
+ justify-content: center;
1044
+ font-size: 13px;
1045
+ font-weight: 700;
1046
+ color: white;
1047
+ }
1048
+
1049
+ /* Role badge pills */
1050
+ .users-role-badge {
1051
+ display: inline-flex;
1052
+ align-items: center;
1053
+ gap: 5px;
1054
+ padding: 3px 10px;
1055
+ border-radius: 99px;
1056
+ font-size: 11px;
1057
+ font-weight: 600;
1058
+ white-space: nowrap;
1059
+ }
1060
+ .users-role-admin {
1061
+ background: rgba(91, 74, 158, 0.1);
1062
+ color: var(--primary);
1063
+ }
1064
+ .users-role-user {
1065
+ background: var(--muted);
1066
+ color: var(--muted-foreground);
1067
+ }
1068
+
1069
+ /* Sort icon in table headers */
1070
+ .users-sort-icon {
1071
+ display: inline-block;
1072
+ margin-left: 4px;
1073
+ opacity: 0.4;
1074
+ transition:
1075
+ opacity 0.2s ease,
1076
+ color 0.2s ease;
1077
+ }
1078
+ th[aria-sort] .users-sort-icon {
1079
+ opacity: 1;
1080
+ color: var(--primary);
1081
+ }
1082
+
1083
+ /* Delete dialog warning box */
1084
+ .users-delete-warning {
1085
+ display: flex;
1086
+ align-items: flex-start;
1087
+ gap: 14px;
1088
+ padding: 16px;
1089
+ background: var(--error-bg);
1090
+ border-radius: var(--radius);
1091
+ margin-bottom: 16px;
1092
+ }
1093
+ .users-delete-warning-icon {
1094
+ width: 40px;
1095
+ height: 40px;
1096
+ flex-shrink: 0;
1097
+ display: flex;
1098
+ align-items: center;
1099
+ justify-content: center;
1100
+ background: white;
1101
+ border-radius: 50%;
1102
+ color: var(--destructive);
1103
+ }
1104
+
1105
+ /* Expiring soon label */
1106
+ .users-expiring-soon {
1107
+ color: var(--warning);
1108
+ font-weight: 600;
1109
+ }
1110
+
1111
+ /* Bulk actions bar */
1112
+ .users-bulk-bar {
1113
+ position: fixed;
1114
+ bottom: 24px;
1115
+ left: 50%;
1116
+ transform: translateX(-50%);
1117
+ z-index: 100;
1118
+ }
1119
+
1120
+ /* Staggered fadeUp */
1121
+ @keyframes users-fade-up {
1122
+ from {
1123
+ opacity: 0;
1124
+ transform: translateY(6px);
1125
+ }
1126
+ to {
1127
+ opacity: 1;
1128
+ transform: translateY(0);
1129
+ }
1130
+ }
1131
+ .users-fade-up {
1132
+ animation: users-fade-up 0.3s ease both;
1133
+ }
1134
+ .users-fade-up:nth-child(2) {
1135
+ animation-delay: 0.04s;
1136
+ }
1137
+ .users-fade-up:nth-child(3) {
1138
+ animation-delay: 0.08s;
1139
+ }
1140
+ .users-fade-up:nth-child(4) {
1141
+ animation-delay: 0.12s;
1142
+ }
1143
+ .users-fade-up:nth-child(5) {
1144
+ animation-delay: 0.16s;
1145
+ }
1146
+
1147
+ @media (prefers-reduced-motion: reduce) {
1148
+ .users-fade-up {
1149
+ animation: none !important;
1150
+ opacity: 1;
1151
+ }
1152
+ }
1153
+
1154
+ /* ═══════════ DASHBOARD ═══════════ */
1155
+
1156
+ /* Page wrapper */
1157
+ .dash-main {
1158
+ flex: 1;
1159
+ overflow-y: auto;
1160
+ overflow-x: hidden;
1161
+ padding: 28px 32px 60px;
1162
+ }
1163
+
1164
+ /* Welcome header */
1165
+ .welcome-header {
1166
+ display: flex;
1167
+ align-items: flex-start;
1168
+ justify-content: space-between;
1169
+ gap: 20px;
1170
+ margin-bottom: 24px;
1171
+ animation: dash-fade-up 0.3s ease both;
1172
+ }
1173
+ .welcome-title {
1174
+ font-size: 24px;
1175
+ font-weight: 700;
1176
+ color: var(--foreground);
1177
+ line-height: 1.3;
1178
+ margin-bottom: 4px;
1179
+ }
1180
+ .welcome-date {
1181
+ font-size: 14px;
1182
+ color: var(--muted-foreground);
1183
+ }
1184
+
1185
+ /* Two-column grid */
1186
+ .dashboard-grid {
1187
+ display: grid;
1188
+ grid-template-columns: 1fr 380px;
1189
+ gap: 20px;
1190
+ }
1191
+
1192
+ /* Dashboard card */
1193
+ .dash-card {
1194
+ background: var(--card);
1195
+ border: 1px solid var(--border);
1196
+ border-radius: var(--radius-lg);
1197
+ box-shadow: var(--shadow-sm);
1198
+ animation: dash-fade-up 0.3s ease both;
1199
+ }
1200
+ .dash-card--entries {
1201
+ animation-delay: 0.2s;
1202
+ }
1203
+ .dash-card--forms {
1204
+ animation-delay: 0.22s;
1205
+ }
1206
+ .dash-card--activity {
1207
+ animation-delay: 0.24s;
1208
+ }
1209
+ .dash-card--a11y {
1210
+ animation-delay: 0.2s;
1211
+ }
1212
+ .dash-card--tip {
1213
+ animation-delay: 0.24s;
1214
+ }
1215
+
1216
+ .dash-card-header {
1217
+ display: flex;
1218
+ align-items: center;
1219
+ justify-content: space-between;
1220
+ padding: 18px 20px 14px;
1221
+ }
1222
+ .dash-card-title {
1223
+ font-size: 16px;
1224
+ font-weight: 700;
1225
+ color: var(--foreground);
1226
+ }
1227
+ .dash-card-link {
1228
+ font-size: 12px;
1229
+ font-weight: 600;
1230
+ color: var(--primary);
1231
+ text-decoration: none;
1232
+ transition: 0.2s cubic-bezier(0.4, 0, 0.2, 1);
1233
+ }
1234
+ .dash-card-link:hover {
1235
+ text-decoration: underline;
1236
+ }
1237
+ .dash-card-link:focus-visible {
1238
+ outline: 2px solid var(--primary);
1239
+ outline-offset: 2px;
1240
+ border-radius: 2px;
1241
+ }
1242
+
1243
+ /* Content duo (entries + forms side by side) */
1244
+ .content-duo {
1245
+ display: grid;
1246
+ grid-template-columns: 1fr 1fr;
1247
+ gap: 20px;
1248
+ }
1249
+
1250
+ /* Entries list */
1251
+ .entries-list {
1252
+ list-style: none;
1253
+ padding: 0 6px 6px;
1254
+ }
1255
+ .entry-item {
1256
+ border-bottom: 1px solid var(--border);
1257
+ }
1258
+ .entry-item:last-child {
1259
+ border-bottom: none;
1260
+ }
1261
+ .entry-item-link {
1262
+ display: flex;
1263
+ align-items: center;
1264
+ gap: 12px;
1265
+ padding: 10px 14px;
1266
+ text-decoration: none;
1267
+ transition: 0.2s cubic-bezier(0.4, 0, 0.2, 1);
1268
+ border-radius: 6px;
1269
+ }
1270
+ .entry-item-link:hover {
1271
+ background: var(--lavender-lighter);
1272
+ }
1273
+ .entry-item-link:focus-visible {
1274
+ outline: 2px solid var(--primary);
1275
+ outline-offset: -2px;
1276
+ border-radius: 6px;
1277
+ }
1278
+ .entry-item-main {
1279
+ flex: 1;
1280
+ min-width: 0;
1281
+ display: flex;
1282
+ flex-direction: column;
1283
+ gap: 2px;
1284
+ }
1285
+ .entry-item-title {
1286
+ font-size: 13px;
1287
+ font-weight: 600;
1288
+ color: var(--foreground);
1289
+ overflow: hidden;
1290
+ text-overflow: ellipsis;
1291
+ white-space: nowrap;
1292
+ }
1293
+ .entry-item-link:hover .entry-item-title {
1294
+ color: var(--primary);
1295
+ }
1296
+ .entry-item-meta {
1297
+ font-size: 12px;
1298
+ color: var(--text-light);
1299
+ }
1300
+
1301
+ /* Status badges */
1302
+ .dash-status-badge {
1303
+ display: inline-flex;
1304
+ align-items: center;
1305
+ gap: 5px;
1306
+ padding: 3px 10px;
1307
+ border-radius: 99px;
1308
+ font-size: 11px;
1309
+ font-weight: 600;
1310
+ white-space: nowrap;
1311
+ }
1312
+ .dash-status-published {
1313
+ background: var(--success-bg);
1314
+ color: var(--success);
1315
+ }
1316
+ .dash-status-draft {
1317
+ background: var(--muted);
1318
+ color: var(--text-light);
1319
+ }
1320
+ .dash-status-review {
1321
+ background: var(--warning-bg);
1322
+ color: var(--warning);
1323
+ }
1324
+
1325
+ /* Activity timeline */
1326
+ .activity-list {
1327
+ padding: 4px 20px 20px;
1328
+ list-style: none;
1329
+ }
1330
+ .activity-item {
1331
+ display: flex;
1332
+ gap: 14px;
1333
+ padding: 12px 0;
1334
+ border-bottom: 1px solid var(--border);
237
1335
  position: relative;
238
1336
  }
239
- [data-depth="1"]::before {
240
- content: '';
241
- position: absolute;
242
- left: 0;
243
- top: 0;
244
- bottom: 0;
245
- width: 3px;
1337
+ .activity-item:last-child {
1338
+ border-bottom: none;
1339
+ }
1340
+
1341
+ .activity-dot-col {
1342
+ display: flex;
1343
+ flex-direction: column;
1344
+ align-items: center;
1345
+ padding-top: 4px;
1346
+ flex-shrink: 0;
1347
+ width: 12px;
1348
+ }
1349
+ .activity-dot {
1350
+ width: 10px;
1351
+ height: 10px;
1352
+ border-radius: 50%;
1353
+ flex-shrink: 0;
1354
+ border: 2px solid var(--card);
1355
+ box-shadow: 0 0 0 1px var(--border);
1356
+ }
1357
+ .activity-dot--edit {
1358
+ background: var(--primary);
1359
+ box-shadow: 0 0 0 1px var(--primary);
1360
+ }
1361
+
1362
+ .activity-line {
1363
+ flex: 1;
1364
+ width: 2px;
1365
+ background: var(--border);
1366
+ margin-top: 4px;
1367
+ min-height: 0;
1368
+ }
1369
+ .activity-item:last-child .activity-line {
1370
+ display: none;
1371
+ }
1372
+
1373
+ .activity-body {
1374
+ flex: 1;
1375
+ min-width: 0;
1376
+ }
1377
+ .activity-text {
1378
+ font-size: 13px;
1379
+ font-weight: 500;
1380
+ color: var(--foreground);
1381
+ line-height: 1.4;
1382
+ }
1383
+ .activity-meta {
1384
+ font-size: 12px;
1385
+ color: var(--text-light);
1386
+ margin-top: 2px;
1387
+ }
1388
+
1389
+ /* Accessibility gauge */
1390
+ .a11y-card-body {
1391
+ padding: 0 20px 20px;
1392
+ }
1393
+
1394
+ .gauge-wrap {
1395
+ display: flex;
1396
+ flex-direction: column;
1397
+ align-items: center;
1398
+ margin-bottom: 20px;
1399
+ }
1400
+ .gauge-svg {
1401
+ width: 140px;
1402
+ height: 140px;
1403
+ }
1404
+ .gauge-bg {
1405
+ fill: none;
1406
+ stroke: var(--border);
1407
+ stroke-width: 8;
1408
+ }
1409
+ .gauge-fill {
1410
+ fill: none;
1411
+ stroke: var(--primary);
1412
+ stroke-width: 8;
1413
+ stroke-linecap: round;
1414
+ transform: rotate(-90deg);
1415
+ transform-origin: center;
1416
+ animation: dash-gauge-anim 1s cubic-bezier(0.4, 0, 0.2, 1) 0.4s both;
1417
+ }
1418
+ .gauge-text-group {
1419
+ text-anchor: middle;
1420
+ dominant-baseline: central;
1421
+ }
1422
+ .gauge-value {
1423
+ font-size: 32px;
1424
+ font-weight: 800;
1425
+ fill: var(--primary);
1426
+ font-family: var(--font-sans);
1427
+ }
1428
+ .gauge-label {
1429
+ font-size: 11px;
1430
+ font-weight: 500;
1431
+ fill: var(--text-light);
1432
+ font-family: var(--font-sans);
1433
+ }
1434
+
1435
+ .a11y-breakdown {
1436
+ list-style: none;
1437
+ margin-bottom: 16px;
1438
+ }
1439
+ .a11y-breakdown-item {
1440
+ display: flex;
1441
+ align-items: center;
1442
+ gap: 10px;
1443
+ padding: 8px 0;
1444
+ font-size: 13px;
1445
+ font-weight: 500;
1446
+ border-bottom: 1px solid var(--border);
1447
+ }
1448
+ .a11y-breakdown-item:last-child {
1449
+ border-bottom: none;
1450
+ }
1451
+ .a11y-breakdown-icon {
1452
+ width: 22px;
1453
+ height: 22px;
1454
+ border-radius: 50%;
1455
+ display: flex;
1456
+ align-items: center;
1457
+ justify-content: center;
1458
+ font-size: 12px;
1459
+ font-weight: 700;
1460
+ flex-shrink: 0;
1461
+ }
1462
+ .a11y-breakdown-icon--ok {
1463
+ background: var(--success-bg);
1464
+ color: var(--success);
1465
+ }
1466
+ .a11y-breakdown-icon--warn {
1467
+ background: var(--warning-bg);
1468
+ color: var(--warning);
1469
+ }
1470
+
1471
+ .a11y-hint {
1472
+ padding: 14px;
1473
+ border-radius: var(--radius);
1474
+ background: var(--lavender-lighter);
1475
+ font-size: 13px;
1476
+ font-weight: 500;
1477
+ color: var(--plum-dark);
1478
+ line-height: 1.5;
1479
+ }
1480
+
1481
+ /* Form submissions */
1482
+ .forms-card-body {
1483
+ padding: 0 20px 20px;
1484
+ }
1485
+
1486
+ .form-group + .form-group {
1487
+ margin-top: 16px;
1488
+ padding-top: 16px;
1489
+ border-top: 1px solid var(--border);
1490
+ }
1491
+ .form-group-header {
1492
+ display: flex;
1493
+ align-items: center;
1494
+ justify-content: space-between;
1495
+ margin-bottom: 10px;
1496
+ }
1497
+ .form-group-name {
1498
+ font-size: 13px;
1499
+ font-weight: 700;
1500
+ color: var(--foreground);
1501
+ }
1502
+ .form-group-badge {
1503
+ display: inline-flex;
1504
+ align-items: center;
1505
+ justify-content: center;
1506
+ min-width: 20px;
1507
+ height: 20px;
1508
+ padding: 0 6px;
1509
+ font-size: 11px;
1510
+ font-weight: 700;
1511
+ border-radius: 10px;
1512
+ background: var(--muted);
1513
+ color: var(--text-light);
1514
+ }
1515
+ .form-group-badge--unread {
246
1516
  background: var(--primary);
247
- opacity: 0.3;
248
- border-radius: 3px 0 0 3px;
1517
+ color: var(--primary-foreground);
1518
+ }
1519
+
1520
+ .form-submissions-list {
1521
+ list-style: none;
1522
+ display: flex;
1523
+ flex-direction: column;
1524
+ gap: 2px;
1525
+ }
1526
+ .form-submission-item {
1527
+ display: flex;
1528
+ align-items: center;
1529
+ gap: 10px;
1530
+ padding: 8px 10px;
1531
+ border-radius: 6px;
1532
+ transition: 0.2s cubic-bezier(0.4, 0, 0.2, 1);
1533
+ text-decoration: none;
1534
+ color: inherit;
1535
+ }
1536
+ .form-submission-item:hover {
1537
+ background: var(--lavender-lighter);
1538
+ }
1539
+ .form-submission-item:focus-visible {
1540
+ outline: 2px solid var(--primary);
1541
+ outline-offset: -2px;
1542
+ border-radius: 6px;
1543
+ }
1544
+
1545
+ /* Tip of the day */
1546
+ .tip-card {
1547
+ background: linear-gradient(135deg, var(--lavender-lighter), var(--lavender-light));
1548
+ border-color: var(--lavender);
1549
+ padding: 24px;
1550
+ }
1551
+ .tip-card-label {
1552
+ font-size: 11px;
1553
+ font-weight: 700;
1554
+ text-transform: uppercase;
1555
+ letter-spacing: 0.06em;
1556
+ color: var(--primary);
1557
+ margin-bottom: 12px;
1558
+ display: flex;
1559
+ align-items: center;
1560
+ gap: 8px;
1561
+ }
1562
+ .tip-card-text {
1563
+ font-size: 14px;
1564
+ font-weight: 500;
1565
+ color: var(--plum-darker);
1566
+ line-height: 1.6;
1567
+ margin-bottom: 14px;
1568
+ }
1569
+ .tip-card-link {
1570
+ font-size: 13px;
1571
+ font-weight: 600;
1572
+ color: var(--primary);
1573
+ text-decoration: none;
1574
+ transition: 0.2s cubic-bezier(0.4, 0, 0.2, 1);
1575
+ }
1576
+ .tip-card-link:hover {
1577
+ text-decoration: underline;
1578
+ }
1579
+ .tip-card-link:focus-visible {
1580
+ outline: 2px solid var(--primary);
1581
+ outline-offset: 2px;
1582
+ border-radius: 2px;
249
1583
  }
250
- [data-depth="2"]::before {
251
- opacity: 0.5;
1584
+
1585
+ /* Animations */
1586
+ @keyframes dash-fade-up {
1587
+ from {
1588
+ opacity: 0;
1589
+ transform: translateY(6px);
1590
+ }
1591
+ to {
1592
+ opacity: 1;
1593
+ transform: translateY(0);
1594
+ }
252
1595
  }
253
- [data-depth="3"]::before {
254
- opacity: 0.7;
1596
+ @keyframes dash-gauge-anim {
1597
+ from {
1598
+ stroke-dasharray: 0 339.292;
1599
+ }
1600
+ }
1601
+
1602
+ /* Responsive */
1603
+ @media (max-width: 1100px) {
1604
+ .dashboard-grid {
1605
+ grid-template-columns: 1fr;
1606
+ }
1607
+ .dashboard-grid-aside {
1608
+ display: grid;
1609
+ grid-template-columns: 1fr 1fr;
1610
+ gap: 20px;
1611
+ }
1612
+ }
1613
+ @media (max-width: 900px) {
1614
+ .content-duo {
1615
+ grid-template-columns: 1fr;
1616
+ }
1617
+ }
1618
+ @media (max-width: 700px) {
1619
+ .dash-main {
1620
+ padding: 20px 16px 60px;
1621
+ }
1622
+ .dashboard-grid-aside {
1623
+ grid-template-columns: 1fr;
1624
+ }
1625
+ }
1626
+
1627
+ /* Reduced motion */
1628
+ @media (prefers-reduced-motion: reduce) {
1629
+ .dash-card,
1630
+ .welcome-header {
1631
+ animation: none !important;
1632
+ opacity: 1;
1633
+ }
1634
+ .gauge-fill {
1635
+ animation: none !important;
1636
+ }
255
1637
  }
256
- [data-depth="4"]::before {
257
- opacity: 0.9;
258
- }