@kyro-cms/admin 0.1.6 → 0.1.8

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 (179) hide show
  1. package/README.md +149 -51
  2. package/package.json +54 -5
  3. package/src/collections/auth/index.ts +2 -2
  4. package/src/collections/portfolio/index.ts +343 -0
  5. package/src/components/ActionBar.tsx +153 -16
  6. package/src/components/Admin.tsx +137 -28
  7. package/src/components/ApiExplorer.tsx +325 -0
  8. package/src/components/ApiKeysManager.tsx +563 -0
  9. package/src/components/AuditLogsPage.tsx +664 -0
  10. package/src/components/AutoForm.tsx +2155 -770
  11. package/src/components/BrandingHub.tsx +267 -0
  12. package/src/components/BulkActionsBar.tsx +3 -3
  13. package/src/components/CreateView.tsx +4 -4
  14. package/src/components/Dashboard.tsx +393 -0
  15. package/src/components/DetailView.tsx +200 -58
  16. package/src/components/DeveloperCenter.tsx +403 -0
  17. package/src/components/EnhancedListView.tsx +890 -0
  18. package/src/components/GraphQLExplorer.tsx +675 -0
  19. package/src/components/GraphQLPlayground.tsx +627 -0
  20. package/src/components/ListView.tsx +192 -54
  21. package/src/components/MediaGallery.tsx +1569 -0
  22. package/src/components/Modal.tsx +206 -0
  23. package/src/components/RestPlayground.tsx +951 -0
  24. package/src/components/Sidebar.astro +237 -0
  25. package/src/components/ThemeProvider.tsx +8 -2
  26. package/src/components/UserManagement.tsx +204 -0
  27. package/src/components/VersionHistoryPanel.tsx +3 -3
  28. package/src/components/WebhookManager.tsx +608 -0
  29. package/src/components/blocks/AccordionBlock.tsx +65 -0
  30. package/src/components/blocks/ArrayBlock.tsx +84 -0
  31. package/src/components/blocks/BlockEditModal.tsx +363 -0
  32. package/src/components/blocks/ButtonBlock.tsx +64 -0
  33. package/src/components/blocks/ChildBlocksTree.tsx +551 -0
  34. package/src/components/blocks/CodeBlock.tsx +114 -0
  35. package/src/components/blocks/ColumnsBlock.tsx +93 -0
  36. package/src/components/blocks/DividerBlock.tsx +43 -0
  37. package/src/components/blocks/FileBlock.tsx +63 -0
  38. package/src/components/blocks/HeadingBlock.tsx +59 -0
  39. package/src/components/blocks/HeroBlock.tsx +99 -0
  40. package/src/components/blocks/ImageBlock.tsx +82 -0
  41. package/src/components/blocks/LinkBlock.tsx +65 -0
  42. package/src/components/blocks/ListBlock.tsx +60 -0
  43. package/src/components/blocks/ParagraphBlock.tsx +61 -0
  44. package/src/components/blocks/RelationshipBlock.tsx +72 -0
  45. package/src/components/blocks/RichTextBlock.tsx +66 -0
  46. package/src/components/blocks/VStackBlock.tsx +61 -0
  47. package/src/components/blocks/VideoBlock.tsx +65 -0
  48. package/src/components/blocks/index.ts +10 -0
  49. package/src/components/fields/AccordionField.tsx +213 -0
  50. package/src/components/fields/ArrayField.tsx +241 -0
  51. package/src/components/fields/BlocksField.tsx +323 -0
  52. package/src/components/fields/ButtonField.tsx +53 -0
  53. package/src/components/fields/CheckboxField.tsx +18 -8
  54. package/src/components/fields/ChildrenField.tsx +48 -0
  55. package/src/components/fields/CodeField.tsx +294 -0
  56. package/src/components/fields/ColumnsField.tsx +137 -0
  57. package/src/components/fields/DateField.tsx +24 -12
  58. package/src/components/fields/EditorClient.tsx +537 -0
  59. package/src/components/fields/HeadingField.tsx +31 -0
  60. package/src/components/fields/HeroField.tsx +101 -0
  61. package/src/components/fields/JSONField.tsx +341 -0
  62. package/src/components/fields/LinkField.tsx +81 -0
  63. package/src/components/fields/ListField.tsx +74 -0
  64. package/src/components/fields/MarkdownField.tsx +260 -0
  65. package/src/components/fields/NumberField.tsx +25 -13
  66. package/src/components/fields/PortableTextField.tsx +155 -0
  67. package/src/components/fields/PortableTextRenderer.tsx +68 -0
  68. package/src/components/fields/RelationshipBlockField.tsx +233 -0
  69. package/src/components/fields/RelationshipField.tsx +278 -60
  70. package/src/components/fields/SelectField.tsx +28 -16
  71. package/src/components/fields/TextField.tsx +31 -15
  72. package/src/components/fields/UploadField.tsx +613 -0
  73. package/src/components/fields/VideoField.tsx +73 -0
  74. package/src/components/fields/extensions/blockComponents.tsx +247 -0
  75. package/src/components/fields/extensions/blocksStore.ts +273 -0
  76. package/src/components/fields/index.ts +24 -0
  77. package/src/components/index.ts +1 -2
  78. package/src/components/layout/Header.tsx +2 -2
  79. package/src/components/layout/Layout.tsx +3 -3
  80. package/src/components/ui/Badge.tsx +9 -4
  81. package/src/components/ui/BlockDrawer.tsx +79 -0
  82. package/src/components/ui/Button.tsx +1 -1
  83. package/src/components/ui/CommandPalette.tsx +362 -0
  84. package/src/components/ui/CommandPaletteWrapper.tsx +97 -0
  85. package/src/components/ui/Dropdown.tsx +1 -1
  86. package/src/components/ui/Modal.tsx +37 -12
  87. package/src/components/ui/PromptModal.tsx +94 -0
  88. package/src/components/ui/SlidePanel.tsx +43 -16
  89. package/src/components/ui/Toast.tsx +80 -14
  90. package/src/env.d.ts +16 -0
  91. package/src/env.ts +20 -0
  92. package/src/index.ts +0 -1
  93. package/src/layouts/AdminLayout.astro +164 -170
  94. package/src/layouts/AuthLayout.astro +23 -6
  95. package/src/lib/MediaService.ts +541 -0
  96. package/src/lib/api.ts +163 -0
  97. package/src/lib/auth/sqlite-adapter.ts +319 -0
  98. package/src/lib/config.ts +23 -7
  99. package/src/lib/dataStore.ts +188 -73
  100. package/src/lib/date-utils.ts +69 -0
  101. package/src/lib/db/adapter.ts +54 -0
  102. package/src/lib/db/drizzle-mysql-adapter.ts +194 -0
  103. package/src/lib/db/drizzle-mysql-auth-adapter.ts +327 -0
  104. package/src/lib/db/drizzle-postgres-adapter.ts +202 -0
  105. package/src/lib/db/drizzle-postgres-auth-adapter.ts +304 -0
  106. package/src/lib/db/drizzle-sqlite-adapter.ts +227 -0
  107. package/src/lib/db/drizzle-sqlite-auth-adapter.ts +548 -0
  108. package/src/lib/db/index.ts +449 -0
  109. package/src/lib/db/mongodb-adapter.ts +207 -0
  110. package/src/lib/db/mongodb-auth-adapter.ts +305 -0
  111. package/src/lib/db/schema/mysql-auth.ts +113 -0
  112. package/src/lib/db/schema/mysql-content.ts +20 -0
  113. package/src/lib/db/schema/postgres-auth.ts +116 -0
  114. package/src/lib/db/schema/postgres-content.ts +35 -0
  115. package/src/lib/db/schema/postgres-media.ts +52 -0
  116. package/src/lib/db/schema/postgres-settings.ts +11 -0
  117. package/src/lib/db/schema/sqlite-auth.ts +112 -0
  118. package/src/lib/db/schema/sqlite-content.ts +20 -0
  119. package/src/lib/db/version-adapter.ts +248 -0
  120. package/src/lib/graphql/index.ts +1 -0
  121. package/src/lib/graphql/schema.ts +443 -0
  122. package/src/lib/i18n.tsx +353 -0
  123. package/src/lib/rate-limit.ts +267 -0
  124. package/src/lib/slugify.ts +15 -0
  125. package/src/lib/storage.ts +374 -0
  126. package/src/lib/store.ts +85 -0
  127. package/src/lib/validation.ts +250 -0
  128. package/src/middleware.ts +70 -11
  129. package/src/pages/[collection]/[id].astro +178 -122
  130. package/src/pages/[collection]/index.astro +24 -156
  131. package/src/pages/admin/api-explorer.astro +98 -0
  132. package/src/pages/admin/graphql-explorer.astro +40 -0
  133. package/src/pages/admin/graphql.astro +97 -0
  134. package/src/pages/admin/index.astro +200 -139
  135. package/src/pages/admin/keys.astro +8 -0
  136. package/src/pages/admin/rest-playground.astro +44 -0
  137. package/src/pages/admin/webhooks.astro +8 -0
  138. package/src/pages/api/[collection]/[id]/publish.ts +52 -0
  139. package/src/pages/api/[collection]/[id]/unpublish.ts +42 -0
  140. package/src/pages/api/[collection]/[id]/versions.ts +66 -0
  141. package/src/pages/api/[collection]/[id].ts +114 -159
  142. package/src/pages/api/[collection]/index.ts +150 -230
  143. package/src/pages/api/auth/[id].ts +48 -69
  144. package/src/pages/api/auth/audit-logs.ts +20 -43
  145. package/src/pages/api/auth/login.ts +159 -45
  146. package/src/pages/api/auth/logout.ts +42 -24
  147. package/src/pages/api/auth/refresh.ts +119 -0
  148. package/src/pages/api/auth/register.ts +110 -40
  149. package/src/pages/api/auth/users.ts +22 -97
  150. package/src/pages/api/collections.ts +59 -0
  151. package/src/pages/api/globals/[slug]/test.ts +172 -0
  152. package/src/pages/api/globals/[slug].ts +42 -0
  153. package/src/pages/api/graphql.ts +90 -0
  154. package/src/pages/api/health.ts +417 -40
  155. package/src/pages/api/keys/[id].ts +26 -0
  156. package/src/pages/api/keys/index.ts +75 -0
  157. package/src/pages/api/media/[id].ts +309 -0
  158. package/src/pages/api/media/folders.ts +609 -0
  159. package/src/pages/api/media/index.ts +146 -0
  160. package/src/pages/api/media/resize.ts +267 -0
  161. package/src/pages/api/search.ts +82 -0
  162. package/src/pages/api/slug-availability.ts +70 -0
  163. package/src/pages/api/storage-config.ts +20 -0
  164. package/src/pages/api/storage-status.ts +206 -0
  165. package/src/pages/api/upload.ts +334 -0
  166. package/src/pages/api/webhooks/index.ts +71 -0
  167. package/src/pages/audit/index.astro +2 -104
  168. package/src/pages/login.astro +11 -11
  169. package/src/pages/media.astro +10 -0
  170. package/src/pages/preview/[collection]/[id].astro +178 -0
  171. package/src/pages/register.astro +13 -13
  172. package/src/pages/roles/index.astro +21 -21
  173. package/src/pages/settings/[slug].astro +162 -0
  174. package/src/pages/settings/index.astro +9 -0
  175. package/src/pages/users/[id].astro +29 -21
  176. package/src/pages/users/index.astro +22 -17
  177. package/src/pages/users/new.astro +18 -17
  178. package/src/styles/main.css +563 -128
  179. package/src/components/layout/Sidebar.tsx +0 -497
@@ -1,4 +1,5 @@
1
1
  @import "tailwindcss";
2
+ @custom-variant dark (&:where(.dark, .dark *));
2
3
 
3
4
  @source "../../src/**/*.{astro,html,js,jsx,ts,tsx}";
4
5
 
@@ -63,23 +64,106 @@
63
64
  /* Dashboard Theme */
64
65
  --kyro-bg: #eaeff2;
65
66
  --kyro-surface: #ffffff;
67
+ --kyro-surface-accent: #f9fafb;
66
68
  --kyro-sidebar-bg: #ffffff;
67
69
  --kyro-sidebar-active: #0b1222;
68
70
  --kyro-sidebar-text: #64748b;
69
71
  --kyro-sidebar-text-active: #ffffff;
70
72
  --kyro-sidebar-border: rgba(0, 0, 0, 0.05);
71
73
 
74
+ /* Semantic Typography */
75
+ --kyro-text-primary: #0b1222;
76
+ --kyro-text-secondary: #64748b;
77
+ --kyro-text-muted: #94a3b8;
78
+
79
+ /* Semantic UI */
80
+ --kyro-border: #f3f4f6;
81
+ --kyro-input-bg: #ffffff;
82
+ --kyro-input-border: #e5e7eb;
83
+
72
84
  /* Elevation & Radius */
73
85
  --kyro-radius-tile: 32px;
74
86
  --kyro-radius-lg: 16px;
75
87
  --kyro-radius-xl: 48px;
76
88
  --kyro-shadow-tile: 0 10px 40px -10px rgba(0, 0, 0, 0.04);
77
89
 
90
+ /* Primary Brand Color */
91
+ --kyro-primary: #0b1222;
92
+ --kyro-primary-hover: #1a2332;
93
+
94
+ /* Success Color */
95
+ --kyro-success: #22c55e;
96
+ --kyro-success-bg: rgba(34, 197, 94, 0.1);
97
+
98
+ /* Danger/Error Color */
99
+ --kyro-danger: #ef4444;
100
+ --kyro-danger-bg: rgba(239, 68, 68, 0.1);
101
+ --kyro-error: #ef4444;
102
+
103
+ /* Warning Color */
104
+ --kyro-warning: #ffae00;
105
+ --kyro-warning-bg: rgba(255, 174, 0, 0.1);
106
+
107
+ /* Border Active */
108
+ --kyro-border-active: #0b1222;
109
+
110
+ /* Secondary Backgrounds */
111
+ --kyro-bg-secondary: #f3f4f6;
112
+
78
113
  /* Layout */
79
114
  --kyro-sidebar-width: 320px;
80
115
  --kyro-header-height: 80px;
81
116
  }
82
117
 
118
+ :root.dark {
119
+ --kyro-bg: #050912;
120
+ --kyro-surface: #0b1222;
121
+ --kyro-surface-accent: #111a2e;
122
+ --kyro-sidebar-bg: #0b1222;
123
+ --kyro-sidebar-active: #ffffff;
124
+ --kyro-sidebar-text: #94a3b8;
125
+ --kyro-sidebar-text-active: #0b1222;
126
+ --kyro-sidebar-border: rgba(255, 255, 255, 0.05);
127
+
128
+ --kyro-text-primary: #ffffff;
129
+ --kyro-text-secondary: #94a3b8;
130
+ --kyro-text-muted: #64748b;
131
+
132
+ --kyro-border: #1a2332;
133
+ --kyro-input-bg: #111a2e;
134
+ --kyro-input-border: #1e293b;
135
+
136
+ --kyro-black: #ffffff;
137
+ --kyro-gray-50: #1a2332;
138
+ --kyro-gray-100: #1e293b;
139
+ --kyro-gray-200: #334155;
140
+
141
+ /* Primary Brand Color (dark) - Use sidebar accent for consistency */
142
+ --kyro-primary: var(--kyro-sidebar-active);
143
+ --kyro-primary-hover: var(--kyro-sidebar-text-active);
144
+
145
+ /* Success Color (dark) */
146
+ --kyro-success: #22c55e;
147
+ --kyro-success-bg: rgba(34, 197, 94, 0.15);
148
+
149
+ /* Danger/Error Color (dark) */
150
+ --kyro-danger: #f87171;
151
+ --kyro-danger-bg: rgba(248, 113, 113, 0.15);
152
+ --kyro-error: #f87171;
153
+
154
+ /* Warning Color (dark) */
155
+ --kyro-warning: #ffae00;
156
+ --kyro-warning-bg: rgba(255, 174, 0, 0.15);
157
+
158
+ /* Border Active (dark) */
159
+ --kyro-border-active: #ffffff;
160
+
161
+ /* Secondary Backgrounds (dark) */
162
+ --kyro-bg-secondary: #111a2e;
163
+
164
+ color-scheme: dark;
165
+ }
166
+
83
167
  @theme {
84
168
  --font-sans: "Serotiva Sans", ui-sans-serif, system-ui, sans-serif;
85
169
 
@@ -98,6 +182,18 @@
98
182
  --radius-xl: var(--kyro-radius-xl);
99
183
 
100
184
  --shadow-tile: var(--kyro-shadow-tile);
185
+
186
+ /* Drawer slide animation */
187
+ --animate-slide-in-from-right: slide-in-from-right 200ms ease-out;
188
+
189
+ @keyframes slide-in-from-right {
190
+ from {
191
+ transform: translateX(100%);
192
+ }
193
+ to {
194
+ transform: translateX(0);
195
+ }
196
+ }
101
197
  }
102
198
 
103
199
  @layer base {
@@ -105,8 +201,20 @@
105
201
  font-family: var(--font-sans);
106
202
  font-size: 14px;
107
203
  line-height: 1.5;
108
- color: #0b1222;
204
+ color: var(--kyro-text-primary);
109
205
  background: var(--kyro-bg);
206
+ transition:
207
+ background-color 300ms ease,
208
+ color 300ms ease;
209
+ }
210
+
211
+ a,
212
+ button,
213
+ [role="button"],
214
+ input[type="button"],
215
+ input[type="submit"],
216
+ input[type="reset"] {
217
+ cursor: pointer;
110
218
  }
111
219
  }
112
220
 
@@ -163,6 +271,12 @@
163
271
  color: var(--kyro-gray-500);
164
272
  }
165
273
 
274
+ .kyro-sidebar-divider {
275
+ height: 1px;
276
+ background: var(--kyro-sidebar-border);
277
+ margin: 12px 20px;
278
+ }
279
+
166
280
  .kyro-sidebar-item {
167
281
  display: flex;
168
282
  align-items: center;
@@ -235,12 +349,14 @@
235
349
  display: flex;
236
350
  flex-direction: column;
237
351
  overflow: hidden;
352
+ pointer-events: auto;
238
353
  }
239
354
 
240
355
  .kyro-admin-content {
241
356
  flex: 1;
242
357
  overflow-y: auto;
243
358
  padding: 24px;
359
+ pointer-events: auto;
244
360
  }
245
361
 
246
362
  /* Buttons — Monochrome */
@@ -250,7 +366,7 @@
250
366
  justify-content: center;
251
367
  gap: 6px;
252
368
  font-weight: 500;
253
- border-radius: 6px;
369
+ border-radius: 9999px;
254
370
  cursor: pointer;
255
371
  transition: all 150ms ease;
256
372
  border: 1px solid transparent;
@@ -281,7 +397,7 @@
281
397
 
282
398
  .kyro-btn-primary {
283
399
  background: var(--kyro-black);
284
- color: white;
400
+ color: var(--kyro-sidebar-text-active);
285
401
  border-color: var(--kyro-black);
286
402
  }
287
403
 
@@ -291,9 +407,9 @@
291
407
  }
292
408
 
293
409
  .kyro-btn-secondary {
294
- background: white;
295
- color: var(--kyro-gray-700);
296
- border-color: var(--kyro-gray-200);
410
+ background: var(--kyro-surface);
411
+ color: var(--kyro-text-primary);
412
+ border-color: var(--kyro-border);
297
413
  }
298
414
 
299
415
  .kyro-btn-secondary:hover:not(:disabled) {
@@ -302,9 +418,9 @@
302
418
  }
303
419
 
304
420
  .kyro-btn-danger {
305
- background: white;
306
- color: var(--kyro-gray-900);
307
- border-color: var(--kyro-gray-900);
421
+ background: var(--kyro-surface);
422
+ color: var(--kyro-text-primary);
423
+ border-color: var(--kyro-text-primary);
308
424
  }
309
425
 
310
426
  .kyro-btn-danger:hover:not(:disabled) {
@@ -319,20 +435,48 @@
319
435
 
320
436
  .kyro-btn-ghost:hover:not(:disabled) {
321
437
  background: var(--kyro-gray-100);
322
- color: var(--kyro-gray-900);
438
+ color: var(--kyro-text-primary);
439
+ }
440
+
441
+ .kyro-btn-success {
442
+ background: #10b981;
443
+ color: white;
444
+ border-color: #10b981;
445
+ }
446
+
447
+ .kyro-btn-success:hover:not(:disabled) {
448
+ background: #059669;
449
+ border-color: #059669;
450
+ }
451
+
452
+ .kyro-btn-success:disabled {
453
+ background: var(--kyro-gray-300);
454
+ border-color: var(--kyro-gray-300);
455
+ color: var(--kyro-gray-500);
456
+ }
457
+
458
+ .kyro-btn-warning {
459
+ background: #f59e0b;
460
+ color: white;
461
+ border-color: #f59e0b;
462
+ }
463
+
464
+ .kyro-btn-warning:hover:not(:disabled) {
465
+ background: #d97706;
466
+ border-color: #d97706;
323
467
  }
324
468
 
325
469
  /* Cards & Tiles */
326
470
  .surface-tile {
327
471
  box-shadow: var(--kyro-shadow-tile);
328
- border: 1px solid rgba(255, 255, 255, 0.8);
472
+ /* border: 1px solid rgba(255, 255, 255, 0.8); */
329
473
  padding: 24px;
330
474
  background: var(--kyro-surface);
331
475
  border-radius: var(--kyro-radius-tile);
332
476
  }
333
477
 
334
478
  .kyro-card {
335
- border: 1px solid #eef2f5;
479
+ border: 1px solid var(--kyro-border);
336
480
  box-shadow: var(--kyro-shadow-tile);
337
481
  padding: 24px;
338
482
  background: var(--kyro-surface);
@@ -349,7 +493,7 @@
349
493
  .kyro-card-title {
350
494
  font-size: 24px;
351
495
  font-weight: 700;
352
- color: #0b1222;
496
+ color: var(--kyro-text-primary);
353
497
  letter-spacing: -0.01em;
354
498
  }
355
499
 
@@ -373,7 +517,7 @@
373
517
  .kyro-list-title {
374
518
  font-size: 18px;
375
519
  font-weight: 600;
376
- color: var(--kyro-gray-900);
520
+ color: var(--kyro-text-primary);
377
521
  }
378
522
 
379
523
  .kyro-table {
@@ -382,7 +526,7 @@
382
526
  background: white;
383
527
  border-radius: 8px;
384
528
  overflow: hidden;
385
- border: 1px solid var(--kyro-gray-200);
529
+ border: 1px solid var(--kyro-border);
386
530
  }
387
531
 
388
532
  .kyro-table th {
@@ -393,7 +537,7 @@
393
537
  letter-spacing: 0.03em;
394
538
  color: var(--kyro-gray-500);
395
539
  background: var(--kyro-gray-50);
396
- border-bottom: 1px solid var(--kyro-gray-200);
540
+ border-bottom: 1px solid var(--kyro-border);
397
541
  text-align: left;
398
542
  }
399
543
 
@@ -401,7 +545,7 @@
401
545
  padding: 14px 16px;
402
546
  border-bottom: 1px solid var(--kyro-gray-100);
403
547
  font-size: 14px;
404
- color: var(--kyro-gray-900);
548
+ color: var(--kyro-text-primary);
405
549
  }
406
550
 
407
551
  .kyro-table tr:last-child td {
@@ -433,11 +577,11 @@
433
577
 
434
578
  .kyro-table-action:hover {
435
579
  background: var(--kyro-gray-100);
436
- color: var(--kyro-gray-900);
580
+ color: var(--kyro-text-primary);
437
581
  }
438
582
 
439
583
  .kyro-table-action.danger:hover {
440
- background: var(--kyro-gray-200);
584
+ background: var(--kyro-surface-accent);
441
585
  color: var(--kyro-black);
442
586
  }
443
587
 
@@ -457,7 +601,7 @@
457
601
  .kyro-empty-title {
458
602
  font-size: 14px;
459
603
  font-weight: 600;
460
- color: var(--kyro-gray-900);
604
+ color: var(--kyro-text-primary);
461
605
  margin-bottom: 4px;
462
606
  }
463
607
 
@@ -485,9 +629,9 @@
485
629
  justify-content: center;
486
630
  width: 36px;
487
631
  height: 36px;
488
- border: 1px solid var(--kyro-gray-200);
489
- background: white;
490
- color: var(--kyro-gray-500);
632
+ border: 1px solid var(--kyro-border);
633
+ background: var(--kyro-surface);
634
+ color: var(--kyro-text-secondary);
491
635
  border-radius: 6px;
492
636
  cursor: pointer;
493
637
  transition: all 150ms ease;
@@ -496,13 +640,13 @@
496
640
 
497
641
  .kyro-detail-back:hover {
498
642
  background: var(--kyro-gray-50);
499
- color: var(--kyro-gray-900);
643
+ color: var(--kyro-text-primary);
500
644
  }
501
645
 
502
646
  .kyro-detail-title {
503
647
  font-size: 18px;
504
648
  font-weight: 600;
505
- color: var(--kyro-gray-900);
649
+ color: var(--kyro-text-primary);
506
650
  }
507
651
 
508
652
  .kyro-detail-meta {
@@ -552,29 +696,29 @@
552
696
 
553
697
  .kyro-meta-value {
554
698
  font-size: 14px;
555
- color: var(--kyro-gray-900);
699
+ color: var(--kyro-text-primary);
556
700
  }
557
701
 
558
702
  /* Forms */
559
703
  .kyro-form {
560
704
  display: flex;
561
705
  flex-direction: column;
562
- gap: 20px;
706
+ gap: 12px;
563
707
  }
564
708
 
565
709
  .kyro-form-field {
566
710
  display: flex;
567
711
  flex-direction: column;
568
- gap: 6px;
712
+ gap: 4px;
569
713
  }
570
714
 
571
715
  .kyro-form-label {
572
- font-size: 13px;
716
+ font-size: 12px;
573
717
  font-weight: 500;
574
- color: var(--kyro-gray-900);
718
+ color: var(--kyro-text-primary);
575
719
  display: flex;
576
720
  align-items: center;
577
- gap: 4px;
721
+ gap: 3px;
578
722
  }
579
723
 
580
724
  .kyro-form-label-required {
@@ -584,14 +728,45 @@
584
728
 
585
729
  .kyro-form-input {
586
730
  width: 100%;
587
- padding: 10px 12px;
588
- font-size: 14px;
589
- color: var(--kyro-gray-900);
590
- background: white;
591
- border: 1px solid var(--kyro-gray-200);
731
+ padding: 6px 10px;
732
+ font-size: 13px;
733
+ color: var(--kyro-text-primary);
734
+ background: var(--kyro-input-bg);
735
+ border: 1px solid var(--kyro-input-border);
592
736
  border-radius: 6px;
593
737
  transition: all 150ms ease;
594
738
  font-family: inherit;
739
+ pointer-events: auto !important;
740
+ position: relative;
741
+ z-index: 1;
742
+ }
743
+
744
+ .kyro-form-input:disabled {
745
+ pointer-events: none !important;
746
+ opacity: 0.5;
747
+ }
748
+
749
+ .kyro-form-input[disabled] {
750
+ pointer-events: none !important;
751
+ opacity: 0.5;
752
+ }
753
+
754
+ textarea.kyro-form-input,
755
+ textarea.kyro-form-textarea {
756
+ pointer-events: auto !important;
757
+ cursor: text;
758
+ }
759
+
760
+ input[type="text"],
761
+ input[type="email"],
762
+ input[type="password"],
763
+ input[type="number"],
764
+ input[type="search"],
765
+ input[type="url"],
766
+ input[type="tel"],
767
+ select.kyro-form-input {
768
+ pointer-events: auto !important;
769
+ cursor: text;
595
770
  }
596
771
 
597
772
  .kyro-form-input:hover {
@@ -601,7 +776,7 @@
601
776
  .kyro-form-input:focus {
602
777
  outline: none;
603
778
  border-color: var(--kyro-black);
604
- box-shadow: 0 0 0 3px rgba(11, 18, 34, 0.08);
779
+ box-shadow: 0 0 0 3px var(--kyro-sidebar-border);
605
780
  }
606
781
 
607
782
  .kyro-form-input::placeholder {
@@ -644,7 +819,7 @@
644
819
 
645
820
  .kyro-form-checkbox-label {
646
821
  font-size: 14px;
647
- color: var(--kyro-gray-900);
822
+ color: var(--kyro-text-primary);
648
823
  }
649
824
 
650
825
  .kyro-form-radio-group {
@@ -673,24 +848,24 @@
673
848
  }
674
849
 
675
850
  .kyro-form-group {
676
- border: 1px solid var(--kyro-gray-200);
851
+ border: 1px solid var(--kyro-border);
677
852
  border-radius: 8px;
678
853
  overflow: hidden;
679
854
  }
680
855
 
681
856
  .kyro-form-group-header {
682
857
  padding: 12px 16px;
683
- background: var(--kyro-gray-50);
684
- border-bottom: 1px solid var(--kyro-gray-200);
858
+ background: var(--kyro-surface-accent);
859
+ border-bottom: 1px solid var(--kyro-border);
685
860
  }
686
861
 
687
862
  .kyro-form-group-title {
688
863
  font-size: 13px;
689
864
  font-weight: 600;
690
- color: var(--kyro-gray-900);
865
+ color: var(--kyro-text-primary);
691
866
  padding: 12px 16px;
692
- background: var(--kyro-gray-50);
693
- border-bottom: 1px solid var(--kyro-gray-200);
867
+ background: var(--kyro-surface-accent);
868
+ border-bottom: 1px solid var(--kyro-border);
694
869
  }
695
870
 
696
871
  .kyro-form-group-fields {
@@ -734,7 +909,7 @@
734
909
  .kyro-form-color {
735
910
  width: 42px;
736
911
  height: 42px;
737
- border: 1px solid var(--kyro-gray-200);
912
+ border: 1px solid var(--kyro-border);
738
913
  border-radius: 6px;
739
914
  cursor: pointer;
740
915
  padding: 2px;
@@ -760,7 +935,7 @@
760
935
 
761
936
  /* Relationship field */
762
937
  .kyro-form-relationship {
763
- border: 1px solid var(--kyro-gray-200);
938
+ border: 1px solid var(--kyro-border);
764
939
  border-radius: 6px;
765
940
  cursor: pointer;
766
941
  transition: all 150ms ease;
@@ -775,8 +950,8 @@
775
950
  display: flex;
776
951
  align-items: center;
777
952
  justify-content: space-between;
778
- background: var(--kyro-gray-50);
779
- border-bottom: 1px solid var(--kyro-gray-200);
953
+ background: var(--kyro-surface-accent);
954
+ border-bottom: 1px solid var(--kyro-border);
780
955
  border-radius: 5px 5px 0 0;
781
956
  }
782
957
 
@@ -791,8 +966,8 @@
791
966
  .kyro-form-relationship-badge {
792
967
  font-size: 10px;
793
968
  padding: 2px 6px;
794
- background: var(--kyro-gray-200);
795
- color: var(--kyro-gray-600);
969
+ background: var(--kyro-gray-100);
970
+ color: var(--kyro-text-secondary);
796
971
  border-radius: 3px;
797
972
  font-weight: 600;
798
973
  }
@@ -800,7 +975,7 @@
800
975
  .kyro-form-relationship-value {
801
976
  padding: 10px 12px;
802
977
  font-size: 14px;
803
- color: var(--kyro-gray-900);
978
+ color: var(--kyro-text-primary);
804
979
  }
805
980
 
806
981
  .kyro-form-relationship-empty {
@@ -809,69 +984,106 @@
809
984
  color: var(--kyro-gray-400);
810
985
  }
811
986
 
812
- /* Array field */
987
+ /* Array field - more compact */
813
988
  .kyro-form-array {
814
989
  display: flex;
815
990
  flex-direction: column;
816
- gap: 12px;
991
+ gap: 6px;
817
992
  }
818
993
 
819
994
  .kyro-form-array-empty {
820
- padding: 32px;
995
+ padding: 12px;
821
996
  text-align: center;
822
- background: white;
823
- border: 2px dashed var(--kyro-gray-200);
824
- border-radius: 8px;
825
- color: var(--kyro-gray-500);
826
- font-size: 13px;
997
+ background: var(--kyro-surface);
998
+ border: 2px dashed var(--kyro-border);
999
+ border-radius: 6px;
1000
+ color: var(--kyro-text-muted);
1001
+ font-size: 12px;
827
1002
  }
828
1003
 
829
1004
  .kyro-form-array-item {
830
- background: white;
831
- border: 1px solid var(--kyro-gray-200);
832
- border-radius: 8px;
1005
+ background: var(--kyro-surface);
1006
+ border: 1px solid var(--kyro-border);
1007
+ border-radius: 6px;
833
1008
  overflow: hidden;
1009
+ padding: 6px;
834
1010
  }
835
1011
 
836
1012
  .kyro-form-array-item-header {
837
1013
  display: flex;
838
1014
  align-items: center;
839
1015
  justify-content: space-between;
840
- padding: 10px 12px;
841
- background: var(--kyro-gray-50);
842
- border-bottom: 1px solid var(--kyro-gray-200);
1016
+ padding: 4px 6px;
1017
+ background: var(--kyro-surface-accent);
1018
+ border-bottom: 1px solid var(--kyro-border);
843
1019
  }
844
1020
 
845
1021
  .kyro-form-array-item-number {
846
- font-size: 12px;
1022
+ font-size: 10px;
847
1023
  font-weight: 600;
848
1024
  color: var(--kyro-gray-500);
1025
+ background: var(--kyro-surface);
1026
+ padding: 1px 4px;
1027
+ border-radius: 3px;
849
1028
  }
850
1029
 
851
1030
  .kyro-form-array-item-remove {
852
1031
  display: flex;
853
1032
  align-items: center;
854
1033
  justify-content: center;
855
- width: 24px;
856
- height: 24px;
1034
+ width: 18px;
1035
+ height: 18px;
857
1036
  border: none;
858
1037
  background: transparent;
859
1038
  color: var(--kyro-gray-400);
860
1039
  cursor: pointer;
861
- border-radius: 4px;
1040
+ border-radius: 3px;
862
1041
  transition: all 150ms ease;
863
1042
  }
864
1043
 
865
1044
  .kyro-form-array-item-remove:hover {
866
- background: var(--kyro-gray-200);
867
- color: var(--kyro-black);
1045
+ background: #fee2e2;
1046
+ color: #dc2626;
868
1047
  }
869
1048
 
870
1049
  .kyro-form-array-item-fields {
871
- padding: 16px;
1050
+ padding: 6px;
872
1051
  display: flex;
873
1052
  flex-direction: column;
874
- gap: 12px;
1053
+ gap: 6px;
1054
+ }
1055
+
1056
+ /* Make sub-field labels more compact in arrays */
1057
+ .kyro-form-array-item-fields .kyro-form-label {
1058
+ font-size: 10px;
1059
+ margin-bottom: 1px;
1060
+ }
1061
+
1062
+ .kyro-form-array-item-fields .kyro-form-input {
1063
+ padding: 4px 6px;
1064
+ font-size: 11px;
1065
+ }
1066
+
1067
+ /* Array item add button */
1068
+ .kyro-form-array-add {
1069
+ display: inline-flex;
1070
+ align-items: center;
1071
+ gap: 4px;
1072
+ padding: 6px 10px;
1073
+ font-size: 11px;
1074
+ font-weight: 600;
1075
+ color: var(--kyro-text-secondary);
1076
+ background: var(--kyro-surface-accent);
1077
+ border: 1px dashed var(--kyro-border);
1078
+ border-radius: 6px;
1079
+ cursor: pointer;
1080
+ transition: all 150ms ease;
1081
+ }
1082
+
1083
+ .kyro-form-array-add:hover {
1084
+ background: var(--kyro-surface);
1085
+ border-color: var(--kyro-sidebar-active);
1086
+ color: var(--kyro-sidebar-active);
875
1087
  }
876
1088
 
877
1089
  /* Blocks field */
@@ -884,18 +1096,19 @@
884
1096
  .kyro-form-blocks-empty {
885
1097
  padding: 32px;
886
1098
  text-align: center;
887
- background: white;
888
- border: 2px dashed var(--kyro-gray-200);
1099
+ background: var(--kyro-surface);
1100
+ border: 2px dashed var(--kyro-border);
889
1101
  border-radius: 8px;
890
- color: var(--kyro-gray-500);
1102
+ color: var(--kyro-text-muted);
891
1103
  font-size: 13px;
892
1104
  }
893
1105
 
894
1106
  .kyro-form-block-item {
895
- background: white;
896
- border: 1px solid var(--kyro-gray-200);
1107
+ background: var(--kyro-surface);
1108
+ border: 1px solid var(--kyro-border);
897
1109
  border-radius: 8px;
898
1110
  overflow: hidden;
1111
+ padding: 10px;
899
1112
  }
900
1113
 
901
1114
  .kyro-form-block-item-header {
@@ -903,8 +1116,8 @@
903
1116
  align-items: center;
904
1117
  justify-content: space-between;
905
1118
  padding: 10px 12px;
906
- background: var(--kyro-gray-50);
907
- border-bottom: 1px solid var(--kyro-gray-200);
1119
+ background: var(--kyro-surface-accent);
1120
+ border-bottom: 1px solid var(--kyro-border);
908
1121
  }
909
1122
 
910
1123
  .kyro-form-block-item-type {
@@ -935,7 +1148,7 @@
935
1148
 
936
1149
  .kyro-form-block-item-move:hover,
937
1150
  .kyro-form-block-item-remove:hover {
938
- background: var(--kyro-gray-200);
1151
+ background: var(--kyro-surface-accent);
939
1152
  color: var(--kyro-black);
940
1153
  }
941
1154
 
@@ -973,7 +1186,7 @@
973
1186
  }
974
1187
 
975
1188
  .kyro-form-tab {
976
- border: 1px solid var(--kyro-gray-200);
1189
+ border: 1px solid var(--kyro-border);
977
1190
  border-radius: 8px;
978
1191
  overflow: hidden;
979
1192
  }
@@ -981,10 +1194,10 @@
981
1194
  .kyro-form-tab-title {
982
1195
  font-size: 13px;
983
1196
  font-weight: 600;
984
- color: var(--kyro-gray-900);
1197
+ color: var(--kyro-text-primary);
985
1198
  padding: 10px 16px;
986
- background: var(--kyro-gray-50);
987
- border-bottom: 1px solid var(--kyro-gray-200);
1199
+ background: var(--kyro-surface-accent);
1200
+ border-bottom: 1px solid var(--kyro-border);
988
1201
  margin: 0;
989
1202
  }
990
1203
 
@@ -997,7 +1210,7 @@
997
1210
 
998
1211
  /* Collapsible */
999
1212
  .kyro-form-collapsible {
1000
- border: 1px solid var(--kyro-gray-200);
1213
+ border: 1px solid var(--kyro-border);
1001
1214
  border-radius: 8px;
1002
1215
  overflow: hidden;
1003
1216
  }
@@ -1008,10 +1221,10 @@
1008
1221
  gap: 8px;
1009
1222
  width: 100%;
1010
1223
  padding: 12px 16px;
1011
- background: var(--kyro-gray-50);
1224
+ background: var(--kyro-surface-accent);
1012
1225
  font-size: 13px;
1013
1226
  font-weight: 600;
1014
- color: var(--kyro-gray-900);
1227
+ color: var(--kyro-text-primary);
1015
1228
  border: none;
1016
1229
  cursor: pointer;
1017
1230
  text-align: left;
@@ -1040,23 +1253,23 @@
1040
1253
 
1041
1254
  /* Upload */
1042
1255
  .kyro-form-upload {
1043
- border: 2px dashed var(--kyro-gray-200);
1256
+ border: 2px dashed var(--kyro-border);
1044
1257
  border-radius: 8px;
1045
1258
  padding: 32px;
1046
1259
  text-align: center;
1047
1260
  cursor: pointer;
1048
1261
  transition: all 150ms ease;
1049
- background: white;
1262
+ background: var(--kyro-surface);
1050
1263
  }
1051
1264
 
1052
1265
  .kyro-form-upload:hover,
1053
1266
  .kyro-form-upload-dragging {
1054
1267
  border-color: var(--kyro-black);
1055
- background: var(--kyro-gray-50);
1268
+ background: var(--kyro-surface-accent);
1056
1269
  }
1057
1270
 
1058
1271
  .kyro-form-upload-error {
1059
- border-color: var(--kyro-gray-900);
1272
+ border-color: var(--kyro-black);
1060
1273
  }
1061
1274
 
1062
1275
  .kyro-form-upload-input {
@@ -1092,7 +1305,7 @@
1092
1305
  height: 64px;
1093
1306
  border-radius: 6px;
1094
1307
  object-fit: cover;
1095
- border: 1px solid var(--kyro-gray-200);
1308
+ border: 1px solid var(--kyro-border);
1096
1309
  }
1097
1310
 
1098
1311
  .kyro-form-upload-info {
@@ -1105,7 +1318,7 @@
1105
1318
  .kyro-form-upload-filename {
1106
1319
  font-size: 13px;
1107
1320
  font-weight: 500;
1108
- color: var(--kyro-gray-900);
1321
+ color: var(--kyro-text-primary);
1109
1322
  }
1110
1323
 
1111
1324
  .kyro-form-upload-change {
@@ -1136,27 +1349,27 @@
1136
1349
 
1137
1350
  .kyro-badge-default {
1138
1351
  background: var(--kyro-gray-100);
1139
- color: var(--kyro-gray-600);
1352
+ color: var(--kyro-text-secondary);
1140
1353
  }
1141
1354
 
1142
1355
  .kyro-badge-success {
1143
1356
  background: var(--kyro-gray-100);
1144
- color: var(--kyro-gray-900);
1357
+ color: var(--kyro-text-primary);
1145
1358
  }
1146
1359
 
1147
1360
  .kyro-badge-warning {
1148
1361
  background: var(--kyro-gray-200);
1149
- color: var(--kyro-gray-800);
1362
+ color: var(--kyro-text-primary);
1150
1363
  }
1151
1364
 
1152
1365
  .kyro-badge-danger {
1153
1366
  background: var(--kyro-gray-200);
1154
- color: var(--kyro-gray-900);
1367
+ color: var(--kyro-text-primary);
1155
1368
  }
1156
1369
 
1157
1370
  .kyro-badge-info {
1158
1371
  background: var(--kyro-gray-100);
1159
- color: var(--kyro-gray-700);
1372
+ color: var(--kyro-text-secondary);
1160
1373
  }
1161
1374
 
1162
1375
  /* Toast — Monochrome */
@@ -1169,11 +1382,12 @@
1169
1382
  gap: 12px;
1170
1383
  padding: 14px 18px;
1171
1384
  background: var(--kyro-black);
1172
- color: white;
1385
+ color: var(--kyro-sidebar-text-active);
1173
1386
  border-radius: 8px;
1174
1387
  box-shadow: 0 10px 40px rgba(0, 0, 0, 0.3);
1175
1388
  animation: toast-in 0.2s ease;
1176
- z-index: 1000;
1389
+ z-index: 9999;
1390
+ pointer-events: auto;
1177
1391
  }
1178
1392
 
1179
1393
  @keyframes toast-in {
@@ -1189,11 +1403,11 @@
1189
1403
  }
1190
1404
 
1191
1405
  .kyro-toast-success {
1192
- border-left: 4px solid var(--kyro-gray-300);
1406
+ border-left: 4px solid var(--kyro-success);
1193
1407
  }
1194
1408
 
1195
1409
  .kyro-toast-error {
1196
- border-left: 4px solid white;
1410
+ border-left: 4px solid #ef4444;
1197
1411
  }
1198
1412
 
1199
1413
  .kyro-toast-warning {
@@ -1212,7 +1426,7 @@
1212
1426
  height: 20px;
1213
1427
  border: none;
1214
1428
  background: transparent;
1215
- color: rgba(255, 255, 255, 0.5);
1429
+ color: var(--kyro-text-muted);
1216
1430
  cursor: pointer;
1217
1431
  margin-left: 8px;
1218
1432
  }
@@ -1227,6 +1441,11 @@
1227
1441
  color: var(--kyro-black);
1228
1442
  }
1229
1443
 
1444
+ /* Alias used by inline upload spinner */
1445
+ .kyro-spin {
1446
+ animation: spin 0.8s linear infinite;
1447
+ }
1448
+
1230
1449
  .kyro-spinner-sm {
1231
1450
  width: 14px;
1232
1451
  height: 14px;
@@ -1268,12 +1487,13 @@
1268
1487
  display: flex;
1269
1488
  align-items: center;
1270
1489
  justify-content: center;
1271
- z-index: 1000;
1490
+ z-index: 9999;
1272
1491
  backdrop-filter: blur(4px);
1492
+ pointer-events: auto;
1273
1493
  }
1274
1494
 
1275
1495
  .kyro-modal {
1276
- background: white;
1496
+ background: var(--kyro-surface);
1277
1497
  border-radius: 10px;
1278
1498
  padding: 24px;
1279
1499
  max-width: 400px;
@@ -1297,12 +1517,12 @@
1297
1517
  margin: 0 0 8px;
1298
1518
  font-size: 18px;
1299
1519
  font-weight: 600;
1300
- color: var(--kyro-gray-900);
1520
+ color: var(--kyro-text-primary);
1301
1521
  }
1302
1522
 
1303
1523
  .kyro-modal p {
1304
1524
  margin: 0 0 16px;
1305
- color: var(--kyro-gray-600);
1525
+ color: var(--kyro-text-secondary);
1306
1526
  font-size: 14px;
1307
1527
  }
1308
1528
 
@@ -1314,7 +1534,7 @@
1314
1534
 
1315
1535
  /* Searchable Relationship Modal */
1316
1536
  .kyro-relation-modal {
1317
- background: white;
1537
+ background: var(--kyro-surface);
1318
1538
  border-radius: 12px;
1319
1539
  max-width: 520px;
1320
1540
  width: 100%;
@@ -1336,7 +1556,7 @@
1336
1556
  .kyro-relation-modal-header h3 {
1337
1557
  font-size: 16px;
1338
1558
  font-weight: 600;
1339
- color: var(--kyro-gray-900);
1559
+ color: var(--kyro-text-primary);
1340
1560
  margin: 0;
1341
1561
  }
1342
1562
 
@@ -1344,9 +1564,9 @@
1344
1564
  width: 100%;
1345
1565
  padding: 10px 12px;
1346
1566
  font-size: 14px;
1347
- color: var(--kyro-gray-900);
1348
- background: var(--kyro-gray-50);
1349
- border: 1px solid var(--kyro-gray-200);
1567
+ color: var(--kyro-text-primary);
1568
+ background: var(--kyro-surface-accent);
1569
+ border: 1px solid var(--kyro-border);
1350
1570
  border-radius: 6px;
1351
1571
  transition: all 150ms ease;
1352
1572
  font-family: inherit;
@@ -1355,8 +1575,8 @@
1355
1575
  .kyro-relation-modal-search:focus {
1356
1576
  outline: none;
1357
1577
  border-color: var(--kyro-black);
1358
- box-shadow: 0 0 0 3px rgba(11, 18, 34, 0.08);
1359
- background: white;
1578
+ box-shadow: 0 0 0 3px var(--kyro-sidebar-border);
1579
+ background: var(--kyro-surface);
1360
1580
  }
1361
1581
 
1362
1582
  .kyro-relation-modal-search::placeholder {
@@ -1377,7 +1597,7 @@
1377
1597
  width: 100%;
1378
1598
  padding: 10px 16px;
1379
1599
  font-size: 14px;
1380
- color: var(--kyro-gray-900);
1600
+ color: var(--kyro-text-primary);
1381
1601
  background: transparent;
1382
1602
  border: none;
1383
1603
  border-radius: 6px;
@@ -1388,12 +1608,12 @@
1388
1608
  }
1389
1609
 
1390
1610
  .kyro-relation-modal-item:hover {
1391
- background: var(--kyro-gray-50);
1611
+ background: var(--kyro-surface-accent);
1392
1612
  }
1393
1613
 
1394
1614
  .kyro-relation-modal-item.selected {
1395
1615
  background: var(--kyro-black);
1396
- color: white;
1616
+ color: var(--kyro-sidebar-text-active);
1397
1617
  }
1398
1618
 
1399
1619
  .kyro-relation-modal-item-id {
@@ -1415,7 +1635,7 @@
1415
1635
 
1416
1636
  .kyro-relation-modal-footer {
1417
1637
  padding: 16px 24px;
1418
- border-top: 1px solid var(--kyro-gray-100);
1638
+ border-top: 1px solid var(--kyro-border);
1419
1639
  display: flex;
1420
1640
  justify-content: flex-end;
1421
1641
  gap: 8px;
@@ -1432,7 +1652,7 @@
1432
1652
  width: 36px;
1433
1653
  height: 36px;
1434
1654
  border-radius: 6px;
1435
- border: 1px solid var(--kyro-gray-200);
1655
+ border: 1px solid var(--kyro-border);
1436
1656
  cursor: pointer;
1437
1657
  padding: 0;
1438
1658
  overflow: hidden;
@@ -1474,7 +1694,7 @@
1474
1694
  .kyro-login-title {
1475
1695
  font-size: 24px;
1476
1696
  font-weight: 700;
1477
- color: var(--kyro-black);
1697
+ color: var(--kyro-text-primary);
1478
1698
  margin: 0 0 8px;
1479
1699
  letter-spacing: -0.02em;
1480
1700
  }
@@ -1500,16 +1720,16 @@
1500
1720
  .kyro-login-form .kyro-form-group label {
1501
1721
  font-size: 13px;
1502
1722
  font-weight: 500;
1503
- color: var(--kyro-gray-900);
1723
+ color: var(--kyro-text-primary);
1504
1724
  }
1505
1725
 
1506
1726
  .kyro-login-form .kyro-form-group input {
1507
1727
  width: 100%;
1508
1728
  padding: 10px 12px;
1509
1729
  font-size: 14px;
1510
- color: var(--kyro-gray-900);
1511
- background: white;
1512
- border: 1px solid var(--kyro-gray-200);
1730
+ color: var(--kyro-text-primary);
1731
+ background: var(--kyro-input-bg);
1732
+ border: 1px solid var(--kyro-input-border);
1513
1733
  border-radius: 6px;
1514
1734
  transition: all 150ms ease;
1515
1735
  font-family: inherit;
@@ -1522,7 +1742,7 @@
1522
1742
  .kyro-login-form .kyro-form-group input:focus {
1523
1743
  outline: none;
1524
1744
  border-color: var(--kyro-black);
1525
- box-shadow: 0 0 0 3px rgba(11, 18, 34, 0.08);
1745
+ box-shadow: 0 0 0 3px var(--kyro-sidebar-border);
1526
1746
  }
1527
1747
 
1528
1748
  .kyro-login-form .kyro-form-group input::placeholder {
@@ -1548,7 +1768,7 @@
1548
1768
  .kyro-login-link {
1549
1769
  background: none;
1550
1770
  border: none;
1551
- color: var(--kyro-black);
1771
+ color: var(--kyro-text-primary);
1552
1772
  font-weight: 600;
1553
1773
  cursor: pointer;
1554
1774
  font-size: 14px;
@@ -1559,6 +1779,7 @@
1559
1779
 
1560
1780
  .kyro-login-link:hover {
1561
1781
  color: var(--kyro-black-hover);
1782
+ text-decoration: none;
1562
1783
  }
1563
1784
 
1564
1785
  /* Sidebar User Info */
@@ -1592,6 +1813,220 @@
1592
1813
 
1593
1814
  .kyro-sidebar-logout:hover {
1594
1815
  color: var(--kyro-black) !important;
1595
- background: var(--kyro-gray-100);
1816
+ background: var(--kyro-surface-accent);
1817
+ }
1818
+ }
1819
+
1820
+ /* ============================================================================
1821
+ PORTABLE TEXT EDITOR
1822
+ Basic styles for Portable Text Editor - handled by component inline styles
1823
+ ============================================================================ */
1824
+
1825
+ /* End of styles */
1826
+
1827
+ .tiptap-editor-wrapper .ProseMirror {
1828
+ outline: none;
1829
+ }
1830
+
1831
+ .tiptap-editor-wrapper .ProseMirror > * + * {
1832
+ margin-top: 0.75em;
1833
+ }
1834
+
1835
+ /* NodeView wrapper isolation - prevents CSS Grid/Flexbox interference */
1836
+ .tiptap-editor-wrapper [data-node-view-wrapper],
1837
+ .tiptap-editor-wrapper [data-node-view-wrapper] * {
1838
+ isolation: isolate;
1839
+ position: relative;
1840
+ }
1841
+
1842
+ /* Block node styles */
1843
+ .tiptap-editor-wrapper .tiptap-hero-block,
1844
+ .tiptap-editor-wrapper .tiptap-heading-block,
1845
+ .tiptap-editor-wrapper .tiptap-paragraph-block,
1846
+ .tiptap-editor-wrapper .tiptap-quote-block,
1847
+ .tiptap-editor-wrapper .tiptap-code-block,
1848
+ .tiptap-editor-wrapper .tiptap-image-block,
1849
+ .tiptap-editor-wrapper .tiptap-video-block,
1850
+ .tiptap-editor-wrapper .tiptap-divider-block,
1851
+ .tiptap-editor-wrapper .tiptap-button-block,
1852
+ .tiptap-editor-wrapper .tiptap-callout-block {
1853
+ position: relative;
1854
+ z-index: 1;
1855
+ }
1856
+
1857
+ /* Layout blocks with proper isolation */
1858
+ .tiptap-editor-wrapper .tiptap-columns-block,
1859
+ .tiptap-editor-wrapper .tiptap-stack-block,
1860
+ .tiptap-editor-wrapper .tiptap-column-block,
1861
+ .tiptap-editor-wrapper .tiptap-group-block,
1862
+ .tiptap-editor-wrapper .tiptap-card-block,
1863
+ .tiptap-editor-wrapper .tiptap-repeater-block,
1864
+ .tiptap-editor-wrapper .tiptap-accordion-block {
1865
+ position: relative;
1866
+ z-index: 1;
1867
+ isolation: isolate;
1868
+ }
1869
+
1870
+ .tiptap-editor-wrapper .tiptap-columns-grid[data-node-view-content] {
1871
+ display: flex;
1872
+ flex-wrap: wrap;
1873
+ gap: 0.75rem;
1874
+ align-items: start;
1875
+ font-size: 0;
1876
+ }
1877
+
1878
+ .tiptap-editor-wrapper .tiptap-columns-grid[data-node-view-content] > * {
1879
+ font-size: 0.875rem;
1880
+ min-width: 0;
1881
+ }
1882
+
1883
+ .tiptap-editor-wrapper .tiptap-columns-grid--1[data-node-view-content] {
1884
+ display: block;
1885
+ }
1886
+
1887
+ .tiptap-editor-wrapper .tiptap-columns-grid--2[data-node-view-content] {
1888
+ display: flex;
1889
+ }
1890
+
1891
+ .tiptap-editor-wrapper .tiptap-columns-grid--3[data-node-view-content] {
1892
+ display: flex;
1893
+ }
1894
+
1895
+ .tiptap-editor-wrapper .tiptap-columns-grid--4[data-node-view-content] {
1896
+ display: flex;
1897
+ }
1898
+
1899
+ .tiptap-editor-wrapper .tiptap-columns-grid--5[data-node-view-content] {
1900
+ display: flex;
1901
+ }
1902
+
1903
+ .tiptap-editor-wrapper .tiptap-columns-grid--6[data-node-view-content] {
1904
+ display: flex;
1905
+ }
1906
+
1907
+ .tiptap-editor-wrapper .tiptap-column-block {
1908
+ display: inline-block;
1909
+ font-size: 0.875rem;
1910
+ flex: 0 0 auto;
1911
+ min-width: 0;
1912
+ height: 100%;
1913
+ vertical-align: top;
1914
+ }
1915
+
1916
+ .tiptap-editor-wrapper .tiptap-column-content[data-node-view-content] {
1917
+ display: block;
1918
+ min-height: 84px;
1919
+ }
1920
+
1921
+ .tiptap-editor-wrapper
1922
+ .tiptap-column-content[data-node-view-content]
1923
+ > *:first-child {
1924
+ margin-top: 0;
1925
+ }
1926
+
1927
+ .tiptap-editor-wrapper
1928
+ .tiptap-column-content[data-node-view-content]
1929
+ > *:last-child {
1930
+ margin-bottom: 0;
1931
+ }
1932
+
1933
+ .tiptap-editor-wrapper .tiptap-stack-block [data-node-view-content],
1934
+ .tiptap-editor-wrapper .tiptap-group-block [data-node-view-content],
1935
+ .tiptap-editor-wrapper .tiptap-card-block [data-node-view-content] {
1936
+ display: contents;
1937
+ }
1938
+
1939
+ .tiptap-editor-wrapper .tiptap-columns-block--1 .tiptap-column-block {
1940
+ width: 100%;
1941
+ flex-basis: 100%;
1942
+ }
1943
+
1944
+ .tiptap-editor-wrapper
1945
+ .tiptap-columns-block--1
1946
+ .tiptap-columns-grid[data-node-view-content]
1947
+ > * {
1948
+ width: 100%;
1949
+ flex: 0 0 100%;
1950
+ }
1951
+
1952
+ .tiptap-editor-wrapper .tiptap-columns-block--2 .tiptap-column-block {
1953
+ width: calc(50% - 0.375rem);
1954
+ flex-basis: calc(50% - 0.375rem);
1955
+ }
1956
+
1957
+ .tiptap-editor-wrapper
1958
+ .tiptap-columns-block--2
1959
+ .tiptap-columns-grid[data-node-view-content]
1960
+ > * {
1961
+ width: calc(50% - 0.375rem);
1962
+ flex: 0 0 calc(50% - 0.375rem);
1963
+ }
1964
+
1965
+ .tiptap-editor-wrapper .tiptap-columns-block--3 .tiptap-column-block {
1966
+ width: calc(33.333% - 0.5rem);
1967
+ flex-basis: calc(33.333% - 0.5rem);
1968
+ }
1969
+
1970
+ .tiptap-editor-wrapper
1971
+ .tiptap-columns-block--3
1972
+ .tiptap-columns-grid[data-node-view-content]
1973
+ > * {
1974
+ width: calc(33.333% - 0.5rem);
1975
+ flex: 0 0 calc(33.333% - 0.5rem);
1976
+ }
1977
+
1978
+ .tiptap-editor-wrapper .tiptap-columns-block--4 .tiptap-column-block {
1979
+ width: calc(25% - 0.5625rem);
1980
+ flex-basis: calc(25% - 0.5625rem);
1981
+ }
1982
+
1983
+ .tiptap-editor-wrapper
1984
+ .tiptap-columns-block--4
1985
+ .tiptap-columns-grid[data-node-view-content]
1986
+ > * {
1987
+ width: calc(25% - 0.5625rem);
1988
+ flex: 0 0 calc(25% - 0.5625rem);
1989
+ }
1990
+
1991
+ .tiptap-editor-wrapper .tiptap-columns-block--5 .tiptap-column-block {
1992
+ width: calc(20% - 0.6rem);
1993
+ flex-basis: calc(20% - 0.6rem);
1994
+ }
1995
+
1996
+ .tiptap-editor-wrapper
1997
+ .tiptap-columns-block--5
1998
+ .tiptap-columns-grid[data-node-view-content]
1999
+ > * {
2000
+ width: calc(20% - 0.6rem);
2001
+ flex: 0 0 calc(20% - 0.6rem);
2002
+ }
2003
+
2004
+ .tiptap-editor-wrapper .tiptap-columns-block--6 .tiptap-column-block {
2005
+ width: calc(16.666% - 0.625rem);
2006
+ flex-basis: calc(16.666% - 0.625rem);
2007
+ }
2008
+
2009
+ .tiptap-editor-wrapper
2010
+ .tiptap-columns-block--6
2011
+ .tiptap-columns-grid[data-node-view-content]
2012
+ > * {
2013
+ width: calc(16.666% - 0.625rem);
2014
+ flex: 0 0 calc(16.666% - 0.625rem);
2015
+ }
2016
+
2017
+ @media (max-width: 720px) {
2018
+ .tiptap-editor-wrapper .tiptap-columns-grid[data-node-view-content] {
2019
+ display: block !important;
1596
2020
  }
1597
2021
  }
2022
+
2023
+ /* Drag handle visibility */
2024
+ .tiptap-editor-wrapper .group:hover .drag-handle,
2025
+ .tiptap-editor-wrapper .group:hover .tiptap-drag-handle {
2026
+ opacity: 1;
2027
+ }
2028
+
2029
+ /* Ensure NodeViews render correctly within ProseMirror */
2030
+ .tiptap-editor-wrapper .ProseMirror .node--component {
2031
+ display: block;
2032
+ }