@actuate-media/cms-admin 0.56.0 → 0.56.2

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 (216) hide show
  1. package/CHANGELOG.md +12 -0
  2. package/dist/__tests__/components/posts-badges.test.js +3 -3
  3. package/dist/__tests__/components/posts-badges.test.js.map +1 -1
  4. package/dist/actuate-admin.css +1 -1
  5. package/dist/components/AICoauthorBubbleMenu.js +2 -2
  6. package/dist/components/AICoauthorBubbleMenu.js.map +1 -1
  7. package/dist/components/Breadcrumbs.js +2 -2
  8. package/dist/components/Breadcrumbs.js.map +1 -1
  9. package/dist/components/CoauthorResultPopover.d.ts.map +1 -1
  10. package/dist/components/CoauthorResultPopover.js +1 -1
  11. package/dist/components/CoauthorResultPopover.js.map +1 -1
  12. package/dist/components/CommandPalette.d.ts.map +1 -1
  13. package/dist/components/CommandPalette.js +11 -11
  14. package/dist/components/CommandPalette.js.map +1 -1
  15. package/dist/components/CommentSidePanel.js +11 -11
  16. package/dist/components/CommentSidePanel.js.map +1 -1
  17. package/dist/components/ContentOverviewChart.js +2 -2
  18. package/dist/components/ContentOverviewChart.js.map +1 -1
  19. package/dist/components/FocalPointPicker.js +1 -1
  20. package/dist/components/FocalPointPicker.js.map +1 -1
  21. package/dist/components/LivePreview.d.ts.map +1 -1
  22. package/dist/components/LivePreview.js +5 -5
  23. package/dist/components/LivePreview.js.map +1 -1
  24. package/dist/components/LogoPlaceholder.js +1 -1
  25. package/dist/components/LogoPlaceholder.js.map +1 -1
  26. package/dist/components/MentionableTextarea.js +3 -3
  27. package/dist/components/MentionableTextarea.js.map +1 -1
  28. package/dist/components/NotificationBell.js +1 -1
  29. package/dist/components/NotificationBell.js.map +1 -1
  30. package/dist/components/OfflineStatus.js +8 -8
  31. package/dist/components/OfflineStatus.js.map +1 -1
  32. package/dist/components/PresenceChips.d.ts.map +1 -1
  33. package/dist/components/PresenceChips.js +10 -6
  34. package/dist/components/PresenceChips.js.map +1 -1
  35. package/dist/components/SEOConfigPanel.d.ts.map +1 -1
  36. package/dist/components/SEOConfigPanel.js +10 -10
  37. package/dist/components/SEOConfigPanel.js.map +1 -1
  38. package/dist/components/SEOPanel.js +12 -12
  39. package/dist/components/SEOPanel.js.map +1 -1
  40. package/dist/components/SEOPerformance.d.ts.map +1 -1
  41. package/dist/components/SEOPerformance.js +3 -3
  42. package/dist/components/SEOPerformance.js.map +1 -1
  43. package/dist/components/TipTapEditor.js +6 -6
  44. package/dist/components/TipTapEditor.js.map +1 -1
  45. package/dist/components/pages/tag-badges.js +6 -6
  46. package/dist/components/pages/tag-badges.js.map +1 -1
  47. package/dist/components/posts/badges.d.ts +0 -4
  48. package/dist/components/posts/badges.d.ts.map +1 -1
  49. package/dist/components/posts/badges.js +28 -42
  50. package/dist/components/posts/badges.js.map +1 -1
  51. package/dist/components/ui/Badge.js +5 -5
  52. package/dist/components/ui/Badge.js.map +1 -1
  53. package/dist/components/ui/Toast.d.ts.map +1 -1
  54. package/dist/components/ui/Toast.js +4 -4
  55. package/dist/components/ui/Toast.js.map +1 -1
  56. package/dist/fields/ComponentBlockField.js +2 -2
  57. package/dist/fields/ComponentBlockField.js.map +1 -1
  58. package/dist/fields/FieldRenderer.js +1 -1
  59. package/dist/fields/FieldRenderer.js.map +1 -1
  60. package/dist/fields/PropInput.js +1 -1
  61. package/dist/fields/PropInput.js.map +1 -1
  62. package/dist/fields/RelationshipField.js +5 -5
  63. package/dist/fields/RelationshipField.js.map +1 -1
  64. package/dist/fields/ToggleField.js +1 -1
  65. package/dist/fields/ToggleField.js.map +1 -1
  66. package/dist/views/Dashboard.js +5 -5
  67. package/dist/views/Dashboard.js.map +1 -1
  68. package/dist/views/DocumentEdit.d.ts.map +1 -1
  69. package/dist/views/DocumentEdit.js +5 -5
  70. package/dist/views/DocumentEdit.js.map +1 -1
  71. package/dist/views/ForgotPassword.d.ts.map +1 -1
  72. package/dist/views/ForgotPassword.js +3 -2
  73. package/dist/views/ForgotPassword.js.map +1 -1
  74. package/dist/views/FormEditor.d.ts.map +1 -1
  75. package/dist/views/FormEditor.js +5 -5
  76. package/dist/views/FormEditor.js.map +1 -1
  77. package/dist/views/Login.d.ts.map +1 -1
  78. package/dist/views/Login.js +17 -17
  79. package/dist/views/Login.js.map +1 -1
  80. package/dist/views/PageEditor.d.ts.map +1 -1
  81. package/dist/views/PageEditor.js +2 -2
  82. package/dist/views/PageEditor.js.map +1 -1
  83. package/dist/views/Pages/PagesListView.js +6 -6
  84. package/dist/views/Pages/PagesListView.js.map +1 -1
  85. package/dist/views/Pages.d.ts.map +1 -1
  86. package/dist/views/Pages.js +16 -19
  87. package/dist/views/Pages.js.map +1 -1
  88. package/dist/views/ResetPassword.d.ts.map +1 -1
  89. package/dist/views/ResetPassword.js +3 -2
  90. package/dist/views/ResetPassword.js.map +1 -1
  91. package/dist/views/Settings.js +2 -2
  92. package/dist/views/Settings.js.map +1 -1
  93. package/dist/views/SetupWizard.d.ts.map +1 -1
  94. package/dist/views/SetupWizard.js +6 -5
  95. package/dist/views/SetupWizard.js.map +1 -1
  96. package/dist/views/page-builder/DesignScore.js +12 -12
  97. package/dist/views/page-builder/DesignScore.js.map +1 -1
  98. package/dist/views/page-builder/SEOPanel.js +9 -9
  99. package/dist/views/page-builder/SEOPanel.js.map +1 -1
  100. package/dist/views/page-editor/EditorCanvas.js +1 -1
  101. package/dist/views/page-editor/EditorCanvas.js.map +1 -1
  102. package/dist/views/page-editor/EditorTopBar.js +2 -2
  103. package/dist/views/page-editor/EditorTopBar.js.map +1 -1
  104. package/dist/views/page-editor/PagePreview.js +1 -1
  105. package/dist/views/page-editor/PagePreview.js.map +1 -1
  106. package/dist/views/page-editor/SectionInspector.js +1 -1
  107. package/dist/views/page-editor/SectionInspector.js.map +1 -1
  108. package/dist/views/page-editor/SitePreviewFrame.js +1 -1
  109. package/dist/views/page-editor/SitePreviewFrame.js.map +1 -1
  110. package/dist/views/page-editor/sections/ArticleBodySection.js +1 -1
  111. package/dist/views/page-editor/sections/ArticleBodySection.js.map +1 -1
  112. package/dist/views/page-editor/sections/AuthorBioSection.js +2 -2
  113. package/dist/views/page-editor/sections/AuthorBioSection.js.map +1 -1
  114. package/dist/views/page-editor/sections/ByTheNumbersSection.js +1 -1
  115. package/dist/views/page-editor/sections/ByTheNumbersSection.js.map +1 -1
  116. package/dist/views/page-editor/sections/CtaBannerSection.js +1 -1
  117. package/dist/views/page-editor/sections/CtaBannerSection.js.map +1 -1
  118. package/dist/views/page-editor/sections/EmbedSection.d.ts.map +1 -1
  119. package/dist/views/page-editor/sections/EmbedSection.js +1 -1
  120. package/dist/views/page-editor/sections/EmbedSection.js.map +1 -1
  121. package/dist/views/page-editor/sections/FeatureHighlightSection.d.ts.map +1 -1
  122. package/dist/views/page-editor/sections/FeatureHighlightSection.js +2 -2
  123. package/dist/views/page-editor/sections/FeatureHighlightSection.js.map +1 -1
  124. package/dist/views/page-editor/sections/GallerySection.d.ts.map +1 -1
  125. package/dist/views/page-editor/sections/GallerySection.js +1 -1
  126. package/dist/views/page-editor/sections/GallerySection.js.map +1 -1
  127. package/dist/views/page-editor/sections/HeroBannerSection.js +1 -1
  128. package/dist/views/page-editor/sections/HeroBannerSection.js.map +1 -1
  129. package/dist/views/page-editor/sections/MissionSection.d.ts.map +1 -1
  130. package/dist/views/page-editor/sections/MissionSection.js +1 -1
  131. package/dist/views/page-editor/sections/MissionSection.js.map +1 -1
  132. package/dist/views/page-editor/sections/PullQuoteSection.js +1 -1
  133. package/dist/views/page-editor/sections/PullQuoteSection.js.map +1 -1
  134. package/dist/views/page-editor/sections/RelatedPostsSection.js +1 -1
  135. package/dist/views/page-editor/sections/RelatedPostsSection.js.map +1 -1
  136. package/dist/views/page-editor/sections/SectionRenderer.js +1 -1
  137. package/dist/views/page-editor/sections/SectionRenderer.js.map +1 -1
  138. package/dist/views/page-editor/sections/parts.js +6 -6
  139. package/dist/views/page-editor/sections/parts.js.map +1 -1
  140. package/dist/views/post-editor/PostEditorCanvas.js +2 -2
  141. package/dist/views/post-editor/PostEditorCanvas.js.map +1 -1
  142. package/dist/views/post-editor/PostHeader.js +2 -2
  143. package/dist/views/post-editor/PostHeader.js.map +1 -1
  144. package/dist/views/post-editor/PostHeaderPanel.js +1 -1
  145. package/dist/views/post-editor/PostHeaderPanel.js.map +1 -1
  146. package/dist/views/post-editor/PostPreview.js +1 -1
  147. package/dist/views/post-editor/PostPreview.js.map +1 -1
  148. package/dist/views/profile/AccountSecurity.js +1 -1
  149. package/dist/views/profile/AccountSecurity.js.map +1 -1
  150. package/dist/views/settings/components.js +1 -1
  151. package/dist/views/settings/components.js.map +1 -1
  152. package/package.json +2 -2
  153. package/src/__tests__/components/posts-badges.test.tsx +3 -3
  154. package/src/components/AICoauthorBubbleMenu.tsx +4 -4
  155. package/src/components/Breadcrumbs.tsx +5 -5
  156. package/src/components/CoauthorResultPopover.tsx +26 -23
  157. package/src/components/CommandPalette.tsx +41 -39
  158. package/src/components/CommentSidePanel.tsx +20 -20
  159. package/src/components/ContentOverviewChart.tsx +4 -4
  160. package/src/components/FocalPointPicker.tsx +2 -2
  161. package/src/components/LivePreview.tsx +20 -17
  162. package/src/components/LogoPlaceholder.tsx +1 -1
  163. package/src/components/MentionableTextarea.tsx +5 -5
  164. package/src/components/NotificationBell.tsx +10 -10
  165. package/src/components/OfflineStatus.tsx +8 -8
  166. package/src/components/PresenceChips.tsx +12 -8
  167. package/src/components/SEOConfigPanel.tsx +40 -38
  168. package/src/components/SEOPanel.tsx +15 -15
  169. package/src/components/SEOPerformance.tsx +25 -23
  170. package/src/components/TipTapEditor.tsx +7 -7
  171. package/src/components/pages/tag-badges.tsx +6 -6
  172. package/src/components/posts/badges.tsx +28 -46
  173. package/src/components/ui/Badge.tsx +5 -5
  174. package/src/components/ui/Toast.tsx +4 -5
  175. package/src/fields/ComponentBlockField.tsx +2 -2
  176. package/src/fields/FieldRenderer.tsx +1 -1
  177. package/src/fields/PropInput.tsx +1 -1
  178. package/src/fields/RelationshipField.tsx +5 -5
  179. package/src/fields/ToggleField.tsx +1 -1
  180. package/src/views/Dashboard.tsx +5 -5
  181. package/src/views/DocumentEdit.tsx +13 -11
  182. package/src/views/ForgotPassword.tsx +21 -18
  183. package/src/views/FormEditor.tsx +74 -69
  184. package/src/views/Login.tsx +45 -39
  185. package/src/views/PageEditor.tsx +26 -22
  186. package/src/views/Pages/PagesListView.tsx +6 -6
  187. package/src/views/Pages.tsx +64 -65
  188. package/src/views/ResetPassword.tsx +32 -29
  189. package/src/views/Settings.tsx +2 -2
  190. package/src/views/SetupWizard.tsx +42 -33
  191. package/src/views/page-builder/DesignScore.tsx +12 -12
  192. package/src/views/page-builder/SEOPanel.tsx +12 -12
  193. package/src/views/page-editor/EditorCanvas.tsx +1 -1
  194. package/src/views/page-editor/EditorTopBar.tsx +2 -2
  195. package/src/views/page-editor/PagePreview.tsx +1 -1
  196. package/src/views/page-editor/SectionInspector.tsx +1 -1
  197. package/src/views/page-editor/SitePreviewFrame.tsx +1 -1
  198. package/src/views/page-editor/sections/ArticleBodySection.tsx +5 -5
  199. package/src/views/page-editor/sections/AuthorBioSection.tsx +6 -6
  200. package/src/views/page-editor/sections/ByTheNumbersSection.tsx +5 -5
  201. package/src/views/page-editor/sections/CtaBannerSection.tsx +1 -1
  202. package/src/views/page-editor/sections/EmbedSection.tsx +6 -4
  203. package/src/views/page-editor/sections/FeatureHighlightSection.tsx +7 -5
  204. package/src/views/page-editor/sections/GallerySection.tsx +6 -4
  205. package/src/views/page-editor/sections/HeroBannerSection.tsx +2 -2
  206. package/src/views/page-editor/sections/MissionSection.tsx +4 -2
  207. package/src/views/page-editor/sections/PullQuoteSection.tsx +4 -4
  208. package/src/views/page-editor/sections/RelatedPostsSection.tsx +5 -5
  209. package/src/views/page-editor/sections/SectionRenderer.tsx +2 -2
  210. package/src/views/page-editor/sections/parts.tsx +6 -6
  211. package/src/views/post-editor/PostEditorCanvas.tsx +4 -4
  212. package/src/views/post-editor/PostHeader.tsx +5 -5
  213. package/src/views/post-editor/PostHeaderPanel.tsx +1 -1
  214. package/src/views/post-editor/PostPreview.tsx +1 -1
  215. package/src/views/profile/AccountSecurity.tsx +1 -1
  216. package/src/views/settings/components.tsx +1 -1
@@ -65,22 +65,22 @@ const OAUTH_LABELS: Record<string, string> = {
65
65
 
66
66
  const OAUTH_COLORS: Record<string, { border: string; bg: string; text: string; hover: string }> = {
67
67
  google: {
68
- border: 'border-gray-300',
69
- bg: 'bg-white',
70
- text: 'text-gray-700',
71
- hover: 'hover:bg-gray-50',
68
+ border: 'border-border',
69
+ bg: 'bg-card',
70
+ text: 'text-foreground',
71
+ hover: 'hover:bg-accent',
72
72
  },
73
73
  github: {
74
- border: 'border-gray-800',
75
- bg: 'bg-gray-900',
76
- text: 'text-white',
77
- hover: 'hover:bg-gray-800',
74
+ border: 'border-border',
75
+ bg: 'bg-foreground',
76
+ text: 'text-background',
77
+ hover: 'hover:bg-foreground/90',
78
78
  },
79
79
  microsoft: {
80
- border: 'border-blue-500',
81
- bg: 'bg-white',
82
- text: 'text-gray-700',
83
- hover: 'hover:bg-blue-50',
80
+ border: 'border-info',
81
+ bg: 'bg-card',
82
+ text: 'text-foreground',
83
+ hover: 'hover:bg-info/10',
84
84
  },
85
85
  }
86
86
 
@@ -377,7 +377,7 @@ export function Login({
377
377
  Boolean(branding?.name) || hasInitials(adminBrand.initials) || hasInitials(publicInitials)
378
378
 
379
379
  return (
380
- <div className="flex min-h-screen items-center justify-center bg-gray-50 px-4">
380
+ <div className="bg-muted flex min-h-screen items-center justify-center px-4">
381
381
  <div className="w-full max-w-md">
382
382
  <div className="mb-8 text-center">
383
383
  {showLogo &&
@@ -393,18 +393,18 @@ export function Login({
393
393
  ) : (
394
394
  <ActuateBrandLogo className="mx-auto mb-4 h-14 w-auto" />
395
395
  ))}
396
- <h1 className="text-2xl font-medium text-gray-900">{brandName}</h1>
397
- <p className="mt-2 text-gray-600">{brandTagline}</p>
396
+ <h1 className="text-foreground text-2xl font-medium">{brandName}</h1>
397
+ <p className="text-muted-foreground mt-2">{brandTagline}</p>
398
398
  </div>
399
399
 
400
400
  {mfaPendingToken ? (
401
401
  <form
402
402
  onSubmit={handleVerifyTotp}
403
- className="space-y-5 rounded-xl border border-gray-200 bg-white p-6 shadow-sm"
403
+ className="border-border bg-card space-y-5 rounded-xl border p-6 shadow-sm"
404
404
  >
405
405
  <div>
406
- <h2 className="text-lg font-medium text-gray-900">Two-factor authentication</h2>
407
- <p className="mt-1 text-sm text-gray-600">
406
+ <h2 className="text-foreground text-lg font-medium">Two-factor authentication</h2>
407
+ <p className="text-muted-foreground mt-1 text-sm">
408
408
  {useBackupCode
409
409
  ? 'Enter one of your one-time backup codes.'
410
410
  : 'Enter the 6-digit code from your authenticator app.'}
@@ -412,14 +412,17 @@ export function Login({
412
412
  </div>
413
413
 
414
414
  {totpError && (
415
- <div className="flex items-start gap-3 rounded-lg border border-red-200 bg-red-50 p-3">
416
- <AlertTriangle className="mt-0.5 h-5 w-5 shrink-0 text-red-600" />
417
- <p className="text-sm text-red-800">{totpError}</p>
415
+ <div className="border-destructive/30 bg-destructive/10 flex items-start gap-3 rounded-lg border p-3">
416
+ <AlertTriangle className="text-destructive mt-0.5 h-5 w-5 shrink-0" />
417
+ <p className="text-destructive text-sm">{totpError}</p>
418
418
  </div>
419
419
  )}
420
420
 
421
421
  <div>
422
- <label htmlFor="totp-code" className="mb-1.5 block text-sm font-medium text-gray-700">
422
+ <label
423
+ htmlFor="totp-code"
424
+ className="text-foreground mb-1.5 block text-sm font-medium"
425
+ >
423
426
  {useBackupCode ? 'Backup code' : 'Authentication code'}
424
427
  </label>
425
428
  <input
@@ -436,7 +439,7 @@ export function Login({
436
439
  )
437
440
  }
438
441
  placeholder={useBackupCode ? 'abcd1234' : '123456'}
439
- className="w-full rounded-lg border border-gray-300 px-3 py-2.5 text-center font-mono text-lg tracking-[0.3em] focus:border-blue-500 focus:ring-2 focus:ring-blue-500 focus:outline-none"
442
+ className="border-border bg-input-background text-foreground focus-visible:border-ring focus-visible:ring-ring/50 w-full rounded-lg border px-3 py-2.5 text-center font-mono text-lg tracking-[0.3em] focus-visible:ring-2 focus-visible:outline-none"
440
443
  autoFocus
441
444
  required
442
445
  />
@@ -445,7 +448,7 @@ export function Login({
445
448
  <button
446
449
  type="submit"
447
450
  disabled={!totpCode.trim() || verifying}
448
- className="flex w-full items-center justify-center gap-2 rounded-lg bg-blue-600 py-2.5 font-medium text-white transition-colors hover:bg-blue-700 disabled:cursor-not-allowed disabled:opacity-50"
451
+ className="bg-primary text-primary-foreground hover:bg-primary/90 flex w-full items-center justify-center gap-2 rounded-lg py-2.5 font-medium transition-colors disabled:cursor-not-allowed disabled:opacity-50"
449
452
  >
450
453
  {verifying ? (
451
454
  <>
@@ -465,14 +468,14 @@ export function Login({
465
468
  setTotpCode('')
466
469
  setTotpError('')
467
470
  }}
468
- className="font-medium text-blue-600 hover:text-blue-700"
471
+ className="text-primary hover:text-primary/80 font-medium"
469
472
  >
470
473
  {useBackupCode ? 'Use authenticator app instead' : 'Use a backup code'}
471
474
  </button>
472
475
  <button
473
476
  type="button"
474
477
  onClick={resetToPasswordStep}
475
- className="font-medium text-gray-500 hover:text-gray-700"
478
+ className="text-muted-foreground hover:text-foreground font-medium"
476
479
  >
477
480
  Back to sign in
478
481
  </button>
@@ -481,19 +484,19 @@ export function Login({
481
484
  ) : (
482
485
  <form
483
486
  onSubmit={handleSubmit}
484
- className="space-y-5 rounded-xl border border-gray-200 bg-white p-6 shadow-sm"
487
+ className="border-border bg-card space-y-5 rounded-xl border p-6 shadow-sm"
485
488
  >
486
489
  {error && (
487
- <div className="flex items-start gap-3 rounded-lg border border-red-200 bg-red-50 p-3">
488
- <AlertTriangle className="mt-0.5 h-5 w-5 shrink-0 text-red-600" />
489
- <p className="text-sm text-red-800">{error}</p>
490
+ <div className="border-destructive/30 bg-destructive/10 flex items-start gap-3 rounded-lg border p-3">
491
+ <AlertTriangle className="text-destructive mt-0.5 h-5 w-5 shrink-0" />
492
+ <p className="text-destructive text-sm">{error}</p>
490
493
  </div>
491
494
  )}
492
495
 
493
496
  <div>
494
497
  <label
495
498
  htmlFor="login-email"
496
- className="mb-1.5 block text-sm font-medium text-gray-700"
499
+ className="text-foreground mb-1.5 block text-sm font-medium"
497
500
  >
498
501
  Email Address
499
502
  </label>
@@ -503,7 +506,7 @@ export function Login({
503
506
  value={email}
504
507
  onChange={(e) => setEmail(e.target.value)}
505
508
  placeholder="admin@example.com"
506
- className="w-full rounded-lg border border-gray-300 px-3 py-2.5 text-sm focus:border-blue-500 focus:ring-2 focus:ring-blue-500 focus:outline-none"
509
+ className="border-border bg-input-background text-foreground focus-visible:border-ring focus-visible:ring-ring/50 w-full rounded-lg border px-3 py-2.5 text-sm focus-visible:ring-2 focus-visible:outline-none"
507
510
  required
508
511
  autoFocus
509
512
  autoComplete="email"
@@ -512,14 +515,17 @@ export function Login({
512
515
 
513
516
  <div>
514
517
  <div className="mb-1.5 flex items-center justify-between">
515
- <label htmlFor="login-password" className="block text-sm font-medium text-gray-700">
518
+ <label
519
+ htmlFor="login-password"
520
+ className="text-foreground block text-sm font-medium"
521
+ >
516
522
  Password
517
523
  </label>
518
524
  {onNavigate && (
519
525
  <button
520
526
  type="button"
521
527
  onClick={() => onNavigate('/forgot-password')}
522
- className="text-xs font-medium text-blue-600 hover:text-blue-700"
528
+ className="text-primary hover:text-primary/80 text-xs font-medium"
523
529
  >
524
530
  Forgot Password?
525
531
  </button>
@@ -532,14 +538,14 @@ export function Login({
532
538
  value={password}
533
539
  onChange={(e) => setPassword(e.target.value)}
534
540
  placeholder="Enter your password"
535
- className="w-full rounded-lg border border-gray-300 px-3 py-2.5 pr-10 text-sm focus:border-blue-500 focus:ring-2 focus:ring-blue-500 focus:outline-none"
541
+ className="border-border bg-input-background text-foreground focus-visible:border-ring focus-visible:ring-ring/50 w-full rounded-lg border px-3 py-2.5 pr-10 text-sm focus-visible:ring-2 focus-visible:outline-none"
536
542
  required
537
543
  autoComplete="current-password"
538
544
  />
539
545
  <button
540
546
  type="button"
541
547
  onClick={() => setShowPassword(!showPassword)}
542
- className="absolute top-1/2 right-3 -translate-y-1/2 text-gray-400 hover:text-gray-600"
548
+ className="text-muted-foreground hover:text-foreground absolute top-1/2 right-3 -translate-y-1/2"
543
549
  tabIndex={-1}
544
550
  >
545
551
  {showPassword ? <EyeOff className="h-4 w-4" /> : <Eye className="h-4 w-4" />}
@@ -550,7 +556,7 @@ export function Login({
550
556
  <button
551
557
  type="submit"
552
558
  disabled={!canSubmit}
553
- className="flex w-full items-center justify-center gap-2 rounded-lg bg-blue-600 py-2.5 font-medium text-white transition-colors hover:bg-blue-700 disabled:cursor-not-allowed disabled:opacity-50"
559
+ className="bg-primary text-primary-foreground hover:bg-primary/90 flex w-full items-center justify-center gap-2 rounded-lg py-2.5 font-medium transition-colors disabled:cursor-not-allowed disabled:opacity-50"
554
560
  >
555
561
  {submitting ? (
556
562
  <>
@@ -566,10 +572,10 @@ export function Login({
566
572
  <>
567
573
  <div className="relative">
568
574
  <div className="absolute inset-0 flex items-center">
569
- <div className="w-full border-t border-gray-200" />
575
+ <div className="border-border w-full border-t" />
570
576
  </div>
571
577
  <div className="relative flex justify-center text-sm">
572
- <span className="bg-white px-3 text-gray-500">Or continue with</span>
578
+ <span className="bg-card text-muted-foreground px-3">Or continue with</span>
573
579
  </div>
574
580
  </div>
575
581
 
@@ -82,31 +82,31 @@ export function PageEditor({ id, onNavigate }: PageEditorProps) {
82
82
  if (!isNew && loading) {
83
83
  return (
84
84
  <div className="flex h-full items-center justify-center">
85
- <Loader2 className="h-6 w-6 animate-spin text-blue-600" />
85
+ <Loader2 className="text-primary h-6 w-6 animate-spin" />
86
86
  </div>
87
87
  )
88
88
  }
89
89
 
90
90
  return (
91
- <div className="flex h-full flex-col bg-white">
91
+ <div className="bg-card flex h-full flex-col">
92
92
  {error && (
93
- <div className="mx-4 mt-3 flex items-center gap-3 rounded-lg border border-red-200 bg-red-50 p-3">
94
- <AlertTriangle className="h-5 w-5 shrink-0 text-red-600" />
95
- <span className="flex-1 text-sm text-red-800">{error}</span>
93
+ <div className="border-destructive/30 bg-destructive/10 mx-4 mt-3 flex items-center gap-3 rounded-lg border p-3">
94
+ <AlertTriangle className="text-destructive h-5 w-5 shrink-0" />
95
+ <span className="text-destructive flex-1 text-sm">{error}</span>
96
96
  </div>
97
97
  )}
98
98
 
99
- <div className="border-b border-gray-200 px-4 py-3">
99
+ <div className="border-border border-b px-4 py-3">
100
100
  <div className="flex items-center justify-between">
101
101
  <button
102
102
  onClick={() => onNavigate?.('/pages')}
103
- className="inline-flex items-center gap-2 text-sm text-gray-600 transition-colors hover:text-gray-900"
103
+ className="text-muted-foreground hover:text-foreground inline-flex items-center gap-2 text-sm transition-colors"
104
104
  >
105
105
  <ArrowLeft className="h-4 w-4" />
106
106
  Back to Pages
107
107
  </button>
108
108
  <div className="flex items-center gap-3">
109
- <button className="flex items-center gap-2 rounded-lg border border-gray-300 px-3 py-1.5 text-sm transition-colors hover:bg-gray-50">
109
+ <button className="border-border hover:bg-muted flex items-center gap-2 rounded-lg border px-3 py-1.5 text-sm transition-colors">
110
110
  <Eye className="h-4 w-4" />
111
111
  Preview
112
112
  </button>
@@ -122,41 +122,45 @@ export function PageEditor({ id, onNavigate }: PageEditorProps) {
122
122
  value={title}
123
123
  onChange={(e) => setTitle(e.target.value)}
124
124
  placeholder="Page title"
125
- className="mb-4 w-full border-none px-0 text-2xl font-medium placeholder:text-gray-300 focus:ring-0 focus:outline-none sm:text-3xl"
125
+ className="placeholder:text-muted-foreground mb-4 w-full border-none px-0 text-2xl font-medium focus:ring-0 focus:outline-none sm:text-3xl"
126
126
  />
127
127
 
128
128
  <div className="mb-4">
129
- <label className="mb-1 block text-xs font-medium text-gray-600">URL Slug</label>
129
+ <label className="text-muted-foreground mb-1 block text-xs font-medium">
130
+ URL Slug
131
+ </label>
130
132
  <input
131
133
  type="text"
132
134
  value={slug}
133
135
  onChange={(e) => setSlug(e.target.value)}
134
136
  placeholder="url-slug"
135
- className="w-full rounded-lg border border-gray-300 px-3 py-1.5 text-sm focus:ring-2 focus:ring-blue-500 focus:outline-none"
137
+ className="border-border focus-visible:ring-ring/50 w-full rounded-lg border px-3 py-1.5 text-sm focus:ring-2 focus:outline-none"
136
138
  />
137
139
  </div>
138
140
 
139
- <div className="rounded-lg border-2 border-dashed border-gray-300 p-8 text-center">
140
- <p className="mb-2 text-gray-500">No blocks added yet</p>
141
- <p className="text-sm text-gray-400">Click "Add Block" to start building your page</p>
142
- <button className="mt-4 rounded-lg bg-blue-600 px-4 py-2 text-sm text-white transition-colors hover:bg-blue-700">
141
+ <div className="border-border rounded-lg border-2 border-dashed p-8 text-center">
142
+ <p className="text-muted-foreground mb-2">No blocks added yet</p>
143
+ <p className="text-muted-foreground text-sm">
144
+ Click "Add Block" to start building your page
145
+ </p>
146
+ <button className="bg-primary text-primary-foreground hover:bg-primary/90 mt-4 rounded-lg px-4 py-2 text-sm transition-colors">
143
147
  Add Block
144
148
  </button>
145
149
  </div>
146
150
  </div>
147
151
  </div>
148
152
 
149
- <div className="w-[30%] overflow-y-auto border-l border-gray-200 bg-gray-50">
153
+ <div className="border-border bg-muted w-[30%] overflow-y-auto border-l">
150
154
  <div className="space-y-4 p-4">
151
- <div className="rounded-lg border border-gray-200 bg-white p-4">
152
- <h3 className="mb-3 text-sm font-medium text-gray-900">Publish</h3>
155
+ <div className="border-border bg-card rounded-lg border p-4">
156
+ <h3 className="text-foreground mb-3 text-sm font-medium">Publish</h3>
153
157
  <div className="space-y-3">
154
158
  <div>
155
- <label className="mb-1 block text-xs font-medium text-gray-700">Status</label>
159
+ <label className="text-foreground mb-1 block text-xs font-medium">Status</label>
156
160
  <select
157
161
  value={status}
158
162
  onChange={(e) => setStatus(e.target.value as 'draft' | 'published')}
159
- className="w-full rounded-lg border border-gray-300 px-3 py-1.5 text-sm focus:ring-2 focus:ring-blue-500 focus:outline-none"
163
+ className="border-border focus-visible:ring-ring/50 w-full rounded-lg border px-3 py-1.5 text-sm focus:ring-2 focus:outline-none"
160
164
  >
161
165
  <option value="draft">Draft</option>
162
166
  <option value="published">Published</option>
@@ -165,7 +169,7 @@ export function PageEditor({ id, onNavigate }: PageEditorProps) {
165
169
  <button
166
170
  onClick={savePage}
167
171
  disabled={saving}
168
- className="w-full rounded-lg bg-blue-600 py-2 text-sm font-medium text-white transition-colors hover:bg-blue-700 disabled:opacity-50"
172
+ className="bg-primary text-primary-foreground hover:bg-primary/90 w-full rounded-lg py-2 text-sm font-medium transition-colors disabled:opacity-50"
169
173
  >
170
174
  {saving ? 'Saving...' : 'Save Page'}
171
175
  </button>
@@ -173,7 +177,7 @@ export function PageEditor({ id, onNavigate }: PageEditorProps) {
173
177
  <button
174
178
  onClick={publishPage}
175
179
  disabled={saving}
176
- className="w-full rounded-lg bg-green-600 py-2 text-sm font-medium text-white transition-colors hover:bg-green-700 disabled:opacity-50"
180
+ className="bg-success text-success-foreground hover:bg-success/90 w-full rounded-lg py-2 text-sm font-medium transition-colors disabled:opacity-50"
177
181
  >
178
182
  {saving ? 'Publishing...' : 'Publish'}
179
183
  </button>
@@ -652,12 +652,12 @@ function GroupBlock({
652
652
 
653
653
  function dotFor(color: string): string {
654
654
  const map: Record<string, string> = {
655
- purple: 'bg-violet-500',
656
- green: 'bg-emerald-500',
657
- orange: 'bg-amber-500',
658
- red: 'bg-red-500',
659
- blue: 'bg-blue-500',
660
- pink: 'bg-pink-500',
655
+ purple: 'bg-brand',
656
+ green: 'bg-success',
657
+ orange: 'bg-warning',
658
+ red: 'bg-destructive',
659
+ blue: 'bg-info',
660
+ pink: 'bg-chart-4',
661
661
  }
662
662
  return map[color] ?? 'bg-muted-foreground'
663
663
  }