@kyro-cms/admin 0.1.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 (102) hide show
  1. package/.astro/content.d.ts +154 -0
  2. package/.astro/settings.json +5 -0
  3. package/.astro/types.d.ts +2 -0
  4. package/astro.config.mjs +28 -0
  5. package/bun.lock +1374 -0
  6. package/dist/client/_astro/AdminLayout.DkDpng53.css +1 -0
  7. package/dist/client/_astro/AutoForm.3eJCmCJp.js +1 -0
  8. package/dist/client/_astro/client.DyczpTbx.js +9 -0
  9. package/dist/client/_astro/index.B02hbnpo.js +1 -0
  10. package/dist/client/fonts/Serotiva-Black.woff2 +0 -0
  11. package/dist/client/fonts/Serotiva-Bold.woff2 +0 -0
  12. package/dist/client/fonts/Serotiva-Medium.woff2 +0 -0
  13. package/dist/client/fonts/Serotiva-Regular.woff2 +0 -0
  14. package/dist/client/fonts/Serotiva-SemiBold.woff2 +0 -0
  15. package/dist/server/chunks/AdminLayout_D-_JeUqC.mjs +26 -0
  16. package/dist/server/chunks/_id__BzI_o0qT.mjs +50 -0
  17. package/dist/server/chunks/_id__Cd-jOuY3.mjs +238 -0
  18. package/dist/server/chunks/_id__DvbD--iR.mjs +992 -0
  19. package/dist/server/chunks/_id__vpVaEo16.mjs +128 -0
  20. package/dist/server/chunks/_virtual_astro_server-island-manifest_CQQ1F5PF.mjs +7 -0
  21. package/dist/server/chunks/_virtual_astro_session-driver_Bk3Q189E.mjs +4 -0
  22. package/dist/server/chunks/astro-component_Dbx3T2Nh.mjs +37 -0
  23. package/dist/server/chunks/audit-logs_DrnUMRvY.mjs +74 -0
  24. package/dist/server/chunks/config_CPXslElD.mjs +4221 -0
  25. package/dist/server/chunks/dataStore_Dl7cA2Qp.mjs +89 -0
  26. package/dist/server/chunks/index_CVqOkerS.mjs +2960 -0
  27. package/dist/server/chunks/index_CX8SQ4BF.mjs +55 -0
  28. package/dist/server/chunks/index_CYofDU51.mjs +58 -0
  29. package/dist/server/chunks/index_DdNRhuaM.mjs +55 -0
  30. package/dist/server/chunks/index_DupPvtIF.mjs +42 -0
  31. package/dist/server/chunks/index_YTS_M-B9.mjs +263 -0
  32. package/dist/server/chunks/index_YeCzuVps.mjs +53 -0
  33. package/dist/server/chunks/login_DLyqMRO8.mjs +93 -0
  34. package/dist/server/chunks/logout_CSbt5wea.mjs +50 -0
  35. package/dist/server/chunks/me_C04jlYhH.mjs +41 -0
  36. package/dist/server/chunks/new_BbQ9b55M.mjs +92 -0
  37. package/dist/server/chunks/node_9bvTewss.mjs +1014 -0
  38. package/dist/server/chunks/noop-entrypoint_BOlrdqWF.mjs +3 -0
  39. package/dist/server/chunks/sequence_9cl7AJy-.mjs +2503 -0
  40. package/dist/server/chunks/server_peBx9VXG.mjs +8117 -0
  41. package/dist/server/chunks/sharp_pmJ7nHES.mjs +142 -0
  42. package/dist/server/chunks/users_Dzddy_YR.mjs +137 -0
  43. package/dist/server/entry.mjs +5 -0
  44. package/dist/server/virtual_astro_middleware.mjs +48 -0
  45. package/package.json +33 -0
  46. package/public/fonts/Serotiva-Black.woff2 +0 -0
  47. package/public/fonts/Serotiva-Bold.woff2 +0 -0
  48. package/public/fonts/Serotiva-Medium.woff2 +0 -0
  49. package/public/fonts/Serotiva-Regular.woff2 +0 -0
  50. package/public/fonts/Serotiva-SemiBold.woff2 +0 -0
  51. package/src/collections/auth/index.ts +155 -0
  52. package/src/components/ActionBar.tsx +215 -0
  53. package/src/components/Admin.tsx +214 -0
  54. package/src/components/AutoForm.tsx +1123 -0
  55. package/src/components/BulkActionsBar.tsx +80 -0
  56. package/src/components/CreateView.tsx +99 -0
  57. package/src/components/DetailView.tsx +329 -0
  58. package/src/components/Icons.tsx +23 -0
  59. package/src/components/ListView.tsx +192 -0
  60. package/src/components/StatusBadge.tsx +76 -0
  61. package/src/components/ThemeProvider.tsx +155 -0
  62. package/src/components/VersionHistoryPanel.tsx +205 -0
  63. package/src/components/fields/CheckboxField.tsx +37 -0
  64. package/src/components/fields/DateField.tsx +42 -0
  65. package/src/components/fields/NumberField.tsx +44 -0
  66. package/src/components/fields/RelationshipField.tsx +87 -0
  67. package/src/components/fields/SelectField.tsx +56 -0
  68. package/src/components/fields/TextField.tsx +49 -0
  69. package/src/components/index.ts +30 -0
  70. package/src/components/layout/Breadcrumbs.tsx +36 -0
  71. package/src/components/layout/Header.tsx +37 -0
  72. package/src/components/layout/Layout.tsx +25 -0
  73. package/src/components/layout/Sidebar.tsx +462 -0
  74. package/src/components/ui/Badge.tsx +14 -0
  75. package/src/components/ui/Button.tsx +41 -0
  76. package/src/components/ui/Dropdown.tsx +82 -0
  77. package/src/components/ui/Modal.tsx +135 -0
  78. package/src/components/ui/SlidePanel.tsx +73 -0
  79. package/src/components/ui/Spinner.tsx +24 -0
  80. package/src/components/ui/Toast.tsx +78 -0
  81. package/src/layouts/AdminLayout.astro +197 -0
  82. package/src/lib/config.ts +68 -0
  83. package/src/lib/dataStore.ts +111 -0
  84. package/src/middleware.ts +48 -0
  85. package/src/pages/[collection]/[id].astro +176 -0
  86. package/src/pages/[collection]/index.astro +180 -0
  87. package/src/pages/api/[collection]/[id].ts +258 -0
  88. package/src/pages/api/[collection]/index.ts +289 -0
  89. package/src/pages/api/auth/[id].ts +142 -0
  90. package/src/pages/api/auth/audit-logs.ts +80 -0
  91. package/src/pages/api/auth/login.ts +101 -0
  92. package/src/pages/api/auth/logout.ts +48 -0
  93. package/src/pages/api/auth/me.ts +36 -0
  94. package/src/pages/api/auth/users.ts +150 -0
  95. package/src/pages/audit/index.astro +110 -0
  96. package/src/pages/index.astro +225 -0
  97. package/src/pages/roles/index.astro +114 -0
  98. package/src/pages/users/[id].astro +174 -0
  99. package/src/pages/users/index.astro +142 -0
  100. package/src/pages/users/new.astro +91 -0
  101. package/src/styles/main.css +1449 -0
  102. package/tsconfig.json +12 -0
@@ -0,0 +1,1449 @@
1
+ @import "tailwindcss";
2
+
3
+ @source "../../src/**/*.{astro,html,js,jsx,ts,tsx}";
4
+
5
+ @font-face {
6
+ font-family: "Serotiva Sans";
7
+ src: url("/fonts/Serotiva-Regular.woff2") format("woff2");
8
+ font-weight: 400;
9
+ font-style: normal;
10
+ font-display: swap;
11
+ }
12
+
13
+ @font-face {
14
+ font-family: "Serotiva Sans";
15
+ src: url("/fonts/Serotiva-Medium.woff2") format("woff2");
16
+ font-weight: 500;
17
+ font-style: normal;
18
+ font-display: swap;
19
+ }
20
+
21
+ @font-face {
22
+ font-family: "Serotiva Sans";
23
+ src: url("/fonts/Serotiva-SemiBold.woff2") format("woff2");
24
+ font-weight: 600;
25
+ font-style: normal;
26
+ font-display: swap;
27
+ }
28
+
29
+ @font-face {
30
+ font-family: "Serotiva Sans";
31
+ src: url("/fonts/Serotiva-Bold.woff2") format("woff2");
32
+ font-weight: 700;
33
+ font-style: normal;
34
+ font-display: swap;
35
+ }
36
+
37
+ @font-face {
38
+ font-family: "Serotiva Sans";
39
+ src: url("/fonts/Serotiva-Black.woff2") format("woff2");
40
+ font-weight: 900;
41
+ font-style: normal;
42
+ font-display: swap;
43
+ }
44
+
45
+ :root {
46
+ /* Monochrome Palette */
47
+ --kyro-black: #0b1222;
48
+ --kyro-black-light: #1a2332;
49
+ --kyro-black-hover: #2a3342;
50
+
51
+ /* Neutral Palette */
52
+ --kyro-gray-50: #f9fafb;
53
+ --kyro-gray-100: #f3f4f6;
54
+ --kyro-gray-200: #e5e7eb;
55
+ --kyro-gray-300: #d1d5db;
56
+ --kyro-gray-400: #9ca3af;
57
+ --kyro-gray-500: #6b7280;
58
+ --kyro-gray-600: #4b5563;
59
+ --kyro-gray-700: #374151;
60
+ --kyro-gray-800: #1f2937;
61
+ --kyro-gray-900: #111827;
62
+
63
+ /* Dashboard Theme */
64
+ --kyro-bg: #eaeff2;
65
+ --kyro-surface: #ffffff;
66
+ --kyro-sidebar-bg: #ffffff;
67
+ --kyro-sidebar-active: #0b1222;
68
+ --kyro-sidebar-text: #64748b;
69
+ --kyro-sidebar-text-active: #ffffff;
70
+ --kyro-sidebar-border: rgba(0, 0, 0, 0.05);
71
+
72
+ /* Elevation & Radius */
73
+ --kyro-radius-tile: 32px;
74
+ --kyro-radius-lg: 16px;
75
+ --kyro-radius-xl: 48px;
76
+ --kyro-shadow-tile: 0 10px 40px -10px rgba(0, 0, 0, 0.04);
77
+
78
+ /* Layout */
79
+ --kyro-sidebar-width: 320px;
80
+ --kyro-header-height: 80px;
81
+ }
82
+
83
+ @theme {
84
+ --font-sans: "Serotiva Sans", ui-sans-serif, system-ui, sans-serif;
85
+
86
+ --color-primary: var(--kyro-black);
87
+ --color-primary-hover: var(--kyro-black-hover);
88
+ --color-primary-light: var(--kyro-gray-100);
89
+
90
+ --color-gray-50: var(--kyro-gray-50);
91
+ --color-gray-100: var(--kyro-gray-100);
92
+ --color-gray-200: var(--kyro-gray-200);
93
+ --color-gray-400: var(--kyro-gray-400);
94
+ --color-gray-500: var(--kyro-gray-500);
95
+
96
+ --radius-tile: var(--kyro-radius-tile);
97
+ --radius-lg: var(--kyro-radius-lg);
98
+ --radius-xl: var(--kyro-radius-xl);
99
+
100
+ --shadow-tile: var(--kyro-shadow-tile);
101
+ }
102
+
103
+ @layer base {
104
+ html {
105
+ font-family: var(--font-sans);
106
+ font-size: 14px;
107
+ line-height: 1.5;
108
+ color: #0b1222;
109
+ background: var(--kyro-bg);
110
+ }
111
+ }
112
+
113
+ @layer components {
114
+ .kyro-admin {
115
+ display: flex;
116
+ height: 100vh;
117
+ padding: 16px;
118
+ gap: 16px;
119
+ background: var(--kyro-bg);
120
+ }
121
+
122
+ /* Sidebar */
123
+ .kyro-sidebar {
124
+ width: var(--kyro-sidebar-width);
125
+ background: var(--kyro-sidebar-bg);
126
+ display: flex;
127
+ flex-direction: column;
128
+ flex-shrink: 0;
129
+ overflow: hidden;
130
+ }
131
+
132
+ .kyro-sidebar-logo {
133
+ height: var(--kyro-header-height);
134
+ display: flex;
135
+ align-items: center;
136
+ padding: 0 20px;
137
+ border-bottom: 1px solid var(--kyro-sidebar-border);
138
+ }
139
+
140
+ .kyro-sidebar-logo-text {
141
+ font-size: 16px;
142
+ font-weight: 600;
143
+ color: var(--kyro-sidebar-text-active);
144
+ letter-spacing: -0.02em;
145
+ }
146
+
147
+ .kyro-sidebar-nav {
148
+ flex: 1;
149
+ overflow-y: auto;
150
+ padding: 12px 0;
151
+ }
152
+
153
+ .kyro-sidebar-section {
154
+ margin-bottom: 8px;
155
+ }
156
+
157
+ .kyro-sidebar-section-title {
158
+ padding: 8px 20px;
159
+ font-size: 11px;
160
+ font-weight: 600;
161
+ text-transform: uppercase;
162
+ letter-spacing: 0.05em;
163
+ color: var(--kyro-gray-500);
164
+ }
165
+
166
+ .kyro-sidebar-item {
167
+ display: flex;
168
+ align-items: center;
169
+ gap: 12px;
170
+ width: 100%;
171
+ padding: 10px 20px;
172
+ font-size: 14px;
173
+ font-weight: 500;
174
+ color: var(--kyro-sidebar-text);
175
+ background: transparent;
176
+ border: none;
177
+ cursor: pointer;
178
+ transition: all 150ms ease;
179
+ text-align: left;
180
+ text-decoration: none;
181
+ }
182
+
183
+ .kyro-sidebar-item:hover {
184
+ color: var(--kyro-black);
185
+ background: var(--kyro-gray-50);
186
+ }
187
+
188
+ .kyro-sidebar-item.active {
189
+ color: var(--kyro-sidebar-text-active);
190
+ background: var(--kyro-sidebar-active);
191
+ }
192
+
193
+ .kyro-sidebar-item svg {
194
+ width: 18px;
195
+ height: 18px;
196
+ flex-shrink: 0;
197
+ opacity: 0.7;
198
+ }
199
+
200
+ .kyro-sidebar-item.active svg,
201
+ .kyro-sidebar-item:hover svg {
202
+ opacity: 1;
203
+ }
204
+
205
+ .kyro-sidebar-footer {
206
+ padding: 12px 20px;
207
+ border-top: 1px solid var(--kyro-sidebar-border);
208
+ }
209
+
210
+ .kyro-sidebar.collapsed {
211
+ width: 72px;
212
+ }
213
+
214
+ .kyro-sidebar.collapsed .kyro-sidebar-item {
215
+ justify-content: center;
216
+ padding: 12px;
217
+ }
218
+
219
+ .kyro-sidebar.collapsed .kyro-sidebar-item span {
220
+ display: none;
221
+ }
222
+
223
+ .kyro-sidebar.collapsed .kyro-sidebar-section-title {
224
+ display: none;
225
+ }
226
+
227
+ .kyro-sidebar.collapsed .kyro-sidebar-logo {
228
+ justify-content: center;
229
+ padding: 0;
230
+ }
231
+
232
+ /* Main Content */
233
+ .kyro-admin-main {
234
+ flex: 1;
235
+ display: flex;
236
+ flex-direction: column;
237
+ overflow: hidden;
238
+ }
239
+
240
+ .kyro-admin-content {
241
+ flex: 1;
242
+ overflow-y: auto;
243
+ padding: 24px;
244
+ }
245
+
246
+ /* Buttons — Monochrome */
247
+ .kyro-btn {
248
+ display: inline-flex;
249
+ align-items: center;
250
+ justify-content: center;
251
+ gap: 6px;
252
+ font-weight: 500;
253
+ border-radius: 6px;
254
+ cursor: pointer;
255
+ transition: all 150ms ease;
256
+ border: 1px solid transparent;
257
+ font-family: inherit;
258
+ white-space: nowrap;
259
+ text-decoration: none;
260
+ }
261
+
262
+ .kyro-btn:disabled {
263
+ opacity: 0.5;
264
+ cursor: not-allowed;
265
+ }
266
+
267
+ .kyro-btn-sm {
268
+ padding: 6px 10px;
269
+ font-size: 12px;
270
+ }
271
+
272
+ .kyro-btn-md {
273
+ padding: 8px 14px;
274
+ font-size: 13px;
275
+ }
276
+
277
+ .kyro-btn-lg {
278
+ padding: 10px 18px;
279
+ font-size: 14px;
280
+ }
281
+
282
+ .kyro-btn-primary {
283
+ background: var(--kyro-black);
284
+ color: white;
285
+ border-color: var(--kyro-black);
286
+ }
287
+
288
+ .kyro-btn-primary:hover:not(:disabled) {
289
+ background: var(--kyro-black-hover);
290
+ border-color: var(--kyro-black-hover);
291
+ }
292
+
293
+ .kyro-btn-secondary {
294
+ background: white;
295
+ color: var(--kyro-gray-700);
296
+ border-color: var(--kyro-gray-200);
297
+ }
298
+
299
+ .kyro-btn-secondary:hover:not(:disabled) {
300
+ background: var(--kyro-gray-50);
301
+ border-color: var(--kyro-gray-300);
302
+ }
303
+
304
+ .kyro-btn-danger {
305
+ background: white;
306
+ color: var(--kyro-gray-900);
307
+ border-color: var(--kyro-gray-900);
308
+ }
309
+
310
+ .kyro-btn-danger:hover:not(:disabled) {
311
+ background: var(--kyro-gray-900);
312
+ color: white;
313
+ }
314
+
315
+ .kyro-btn-ghost {
316
+ background: transparent;
317
+ color: var(--kyro-gray-500);
318
+ }
319
+
320
+ .kyro-btn-ghost:hover:not(:disabled) {
321
+ background: var(--kyro-gray-100);
322
+ color: var(--kyro-gray-900);
323
+ }
324
+
325
+ /* Cards & Tiles */
326
+ .surface-tile {
327
+ box-shadow: var(--kyro-shadow-tile);
328
+ border: 1px solid rgba(255, 255, 255, 0.8);
329
+ padding: 24px;
330
+ background: var(--kyro-surface);
331
+ border-radius: var(--kyro-radius-tile);
332
+ }
333
+
334
+ .kyro-card {
335
+ border: 1px solid #eef2f5;
336
+ box-shadow: var(--kyro-shadow-tile);
337
+ padding: 24px;
338
+ background: var(--kyro-surface);
339
+ border-radius: var(--kyro-radius-lg);
340
+ }
341
+
342
+ .kyro-card-header {
343
+ display: flex;
344
+ align-items: center;
345
+ justify-content: space-between;
346
+ padding: 24px 32px;
347
+ }
348
+
349
+ .kyro-card-title {
350
+ font-size: 24px;
351
+ font-weight: 700;
352
+ color: #0b1222;
353
+ letter-spacing: -0.01em;
354
+ }
355
+
356
+ .kyro-card-content {
357
+ padding: 0 32px 32px;
358
+ }
359
+
360
+ /* List View */
361
+ .kyro-list {
362
+ display: flex;
363
+ flex-direction: column;
364
+ gap: 20px;
365
+ }
366
+
367
+ .kyro-list-header {
368
+ display: flex;
369
+ align-items: center;
370
+ justify-content: space-between;
371
+ }
372
+
373
+ .kyro-list-title {
374
+ font-size: 18px;
375
+ font-weight: 600;
376
+ color: var(--kyro-gray-900);
377
+ }
378
+
379
+ .kyro-table {
380
+ width: 100%;
381
+ border-collapse: collapse;
382
+ background: white;
383
+ border-radius: 8px;
384
+ overflow: hidden;
385
+ border: 1px solid var(--kyro-gray-200);
386
+ }
387
+
388
+ .kyro-table th {
389
+ padding: 12px 16px;
390
+ font-size: 12px;
391
+ font-weight: 600;
392
+ text-transform: uppercase;
393
+ letter-spacing: 0.03em;
394
+ color: var(--kyro-gray-500);
395
+ background: var(--kyro-gray-50);
396
+ border-bottom: 1px solid var(--kyro-gray-200);
397
+ text-align: left;
398
+ }
399
+
400
+ .kyro-table td {
401
+ padding: 14px 16px;
402
+ border-bottom: 1px solid var(--kyro-gray-100);
403
+ font-size: 14px;
404
+ color: var(--kyro-gray-900);
405
+ }
406
+
407
+ .kyro-table tr:last-child td {
408
+ border-bottom: none;
409
+ }
410
+
411
+ .kyro-table tr:hover td {
412
+ background: var(--kyro-gray-50);
413
+ }
414
+
415
+ .kyro-table-actions {
416
+ display: flex;
417
+ gap: 4px;
418
+ }
419
+
420
+ .kyro-table-action {
421
+ display: flex;
422
+ align-items: center;
423
+ justify-content: center;
424
+ width: 32px;
425
+ height: 32px;
426
+ border: none;
427
+ background: transparent;
428
+ color: var(--kyro-gray-500);
429
+ border-radius: 6px;
430
+ cursor: pointer;
431
+ transition: all 150ms ease;
432
+ }
433
+
434
+ .kyro-table-action:hover {
435
+ background: var(--kyro-gray-100);
436
+ color: var(--kyro-gray-900);
437
+ }
438
+
439
+ .kyro-table-action.danger:hover {
440
+ background: var(--kyro-gray-200);
441
+ color: var(--kyro-black);
442
+ }
443
+
444
+ .kyro-empty {
445
+ padding: 48px 24px;
446
+ text-align: center;
447
+ color: var(--kyro-gray-500);
448
+ }
449
+
450
+ .kyro-empty-icon {
451
+ width: 40px;
452
+ height: 40px;
453
+ margin: 0 auto 12px;
454
+ color: var(--kyro-gray-400);
455
+ }
456
+
457
+ .kyro-empty-title {
458
+ font-size: 14px;
459
+ font-weight: 600;
460
+ color: var(--kyro-gray-900);
461
+ margin-bottom: 4px;
462
+ }
463
+
464
+ .kyro-empty-text {
465
+ font-size: 13px;
466
+ color: var(--kyro-gray-500);
467
+ }
468
+
469
+ /* Detail View */
470
+ .kyro-detail {
471
+ display: flex;
472
+ flex-direction: column;
473
+ gap: 20px;
474
+ }
475
+
476
+ .kyro-detail-header {
477
+ display: flex;
478
+ align-items: center;
479
+ gap: 12px;
480
+ }
481
+
482
+ .kyro-detail-back {
483
+ display: flex;
484
+ align-items: center;
485
+ justify-content: center;
486
+ width: 36px;
487
+ height: 36px;
488
+ border: 1px solid var(--kyro-gray-200);
489
+ background: white;
490
+ color: var(--kyro-gray-500);
491
+ border-radius: 6px;
492
+ cursor: pointer;
493
+ transition: all 150ms ease;
494
+ text-decoration: none;
495
+ }
496
+
497
+ .kyro-detail-back:hover {
498
+ background: var(--kyro-gray-50);
499
+ color: var(--kyro-gray-900);
500
+ }
501
+
502
+ .kyro-detail-title {
503
+ font-size: 18px;
504
+ font-weight: 600;
505
+ color: var(--kyro-gray-900);
506
+ }
507
+
508
+ .kyro-detail-meta {
509
+ font-size: 13px;
510
+ color: var(--kyro-gray-500);
511
+ font-family: monospace;
512
+ }
513
+
514
+ .kyro-detail-actions {
515
+ margin-left: auto;
516
+ display: flex;
517
+ gap: 8px;
518
+ }
519
+
520
+ .kyro-detail-body {
521
+ display: grid;
522
+ grid-template-columns: 1fr 300px;
523
+ gap: 20px;
524
+ }
525
+
526
+ @media (max-width: 1024px) {
527
+ .kyro-detail-body {
528
+ grid-template-columns: 1fr;
529
+ }
530
+ }
531
+
532
+ .kyro-meta-card {
533
+ display: flex;
534
+ flex-direction: column;
535
+ gap: 16px;
536
+ height: fit-content;
537
+ }
538
+
539
+ .kyro-meta-item {
540
+ display: flex;
541
+ flex-direction: column;
542
+ gap: 4px;
543
+ }
544
+
545
+ .kyro-meta-label {
546
+ font-size: 11px;
547
+ font-weight: 600;
548
+ text-transform: uppercase;
549
+ letter-spacing: 0.03em;
550
+ color: var(--kyro-gray-500);
551
+ }
552
+
553
+ .kyro-meta-value {
554
+ font-size: 14px;
555
+ color: var(--kyro-gray-900);
556
+ }
557
+
558
+ /* Forms */
559
+ .kyro-form {
560
+ display: flex;
561
+ flex-direction: column;
562
+ gap: 20px;
563
+ }
564
+
565
+ .kyro-form-field {
566
+ display: flex;
567
+ flex-direction: column;
568
+ gap: 6px;
569
+ }
570
+
571
+ .kyro-form-label {
572
+ font-size: 13px;
573
+ font-weight: 500;
574
+ color: var(--kyro-gray-900);
575
+ display: flex;
576
+ align-items: center;
577
+ gap: 4px;
578
+ }
579
+
580
+ .kyro-form-label-required {
581
+ color: var(--kyro-gray-400);
582
+ font-weight: 400;
583
+ }
584
+
585
+ .kyro-form-input {
586
+ 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);
592
+ border-radius: 6px;
593
+ transition: all 150ms ease;
594
+ font-family: inherit;
595
+ }
596
+
597
+ .kyro-form-input:hover {
598
+ border-color: var(--kyro-gray-300);
599
+ }
600
+
601
+ .kyro-form-input:focus {
602
+ outline: none;
603
+ border-color: var(--kyro-black);
604
+ box-shadow: 0 0 0 3px rgba(11, 18, 34, 0.08);
605
+ }
606
+
607
+ .kyro-form-input::placeholder {
608
+ color: var(--kyro-gray-400);
609
+ }
610
+
611
+ .kyro-form-input-error {
612
+ border-color: var(--kyro-gray-900) !important;
613
+ }
614
+
615
+ .kyro-form-textarea {
616
+ min-height: 100px;
617
+ resize: vertical;
618
+ }
619
+
620
+ .kyro-form-number {
621
+ font-variant-numeric: tabular-nums;
622
+ }
623
+
624
+ .kyro-form-select {
625
+ appearance: none;
626
+ background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' viewBox='0 0 24 24' fill='none' stroke='%236b7280' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='m6 9 6 6 6-6'/%3E%3C/svg%3E");
627
+ background-repeat: no-repeat;
628
+ background-position: right 10px center;
629
+ padding-right: 36px;
630
+ }
631
+
632
+ .kyro-form-checkbox {
633
+ display: flex;
634
+ align-items: center;
635
+ gap: 8px;
636
+ cursor: pointer;
637
+ }
638
+
639
+ .kyro-form-checkbox input {
640
+ width: 16px;
641
+ height: 16px;
642
+ accent-color: var(--kyro-black);
643
+ }
644
+
645
+ .kyro-form-checkbox-label {
646
+ font-size: 14px;
647
+ color: var(--kyro-gray-900);
648
+ }
649
+
650
+ .kyro-form-radio-group {
651
+ display: flex;
652
+ flex-direction: column;
653
+ gap: 8px;
654
+ }
655
+
656
+ .kyro-form-radio {
657
+ display: flex;
658
+ align-items: center;
659
+ gap: 8px;
660
+ cursor: pointer;
661
+ font-size: 14px;
662
+ color: var(--kyro-gray-700);
663
+ }
664
+
665
+ .kyro-form-radio input {
666
+ accent-color: var(--kyro-black);
667
+ }
668
+
669
+ .kyro-form-row {
670
+ display: grid;
671
+ grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));
672
+ gap: 16px;
673
+ }
674
+
675
+ .kyro-form-group {
676
+ border: 1px solid var(--kyro-gray-200);
677
+ border-radius: 8px;
678
+ overflow: hidden;
679
+ }
680
+
681
+ .kyro-form-group-header {
682
+ padding: 12px 16px;
683
+ background: var(--kyro-gray-50);
684
+ border-bottom: 1px solid var(--kyro-gray-200);
685
+ }
686
+
687
+ .kyro-form-group-title {
688
+ font-size: 13px;
689
+ font-weight: 600;
690
+ color: var(--kyro-gray-900);
691
+ padding: 12px 16px;
692
+ background: var(--kyro-gray-50);
693
+ border-bottom: 1px solid var(--kyro-gray-200);
694
+ }
695
+
696
+ .kyro-form-group-fields {
697
+ padding: 16px;
698
+ display: flex;
699
+ flex-direction: column;
700
+ gap: 16px;
701
+ }
702
+
703
+ .kyro-form-group-content {
704
+ padding: 16px;
705
+ display: flex;
706
+ flex-direction: column;
707
+ gap: 16px;
708
+ }
709
+
710
+ .kyro-form-error {
711
+ font-size: 12px;
712
+ color: var(--kyro-gray-600);
713
+ font-style: italic;
714
+ }
715
+
716
+ .kyro-form-help {
717
+ font-size: 12px;
718
+ color: var(--kyro-gray-500);
719
+ }
720
+
721
+ .kyro-form-unsupported {
722
+ font-size: 12px;
723
+ color: var(--kyro-gray-400);
724
+ font-style: italic;
725
+ }
726
+
727
+ /* Color field */
728
+ .kyro-form-color-wrapper {
729
+ display: flex;
730
+ align-items: center;
731
+ gap: 12px;
732
+ }
733
+
734
+ .kyro-form-color {
735
+ width: 42px;
736
+ height: 42px;
737
+ border: 1px solid var(--kyro-gray-200);
738
+ border-radius: 6px;
739
+ cursor: pointer;
740
+ padding: 2px;
741
+ }
742
+
743
+ .kyro-form-color-value {
744
+ font-size: 13px;
745
+ font-family: monospace;
746
+ color: var(--kyro-gray-600);
747
+ }
748
+
749
+ /* Richtext placeholder */
750
+ .kyro-form-richtext {
751
+ min-height: 200px;
752
+ font-family: inherit;
753
+ }
754
+
755
+ .kyro-form-code {
756
+ font-family: "SF Mono", "Fira Code", monospace;
757
+ font-size: 13px;
758
+ tab-size: 2;
759
+ }
760
+
761
+ /* Relationship field */
762
+ .kyro-form-relationship {
763
+ border: 1px solid var(--kyro-gray-200);
764
+ border-radius: 6px;
765
+ cursor: pointer;
766
+ transition: all 150ms ease;
767
+ }
768
+
769
+ .kyro-form-relationship:hover {
770
+ border-color: var(--kyro-gray-300);
771
+ }
772
+
773
+ .kyro-form-relationship-header {
774
+ padding: 8px 12px;
775
+ display: flex;
776
+ align-items: center;
777
+ justify-content: space-between;
778
+ background: var(--kyro-gray-50);
779
+ border-bottom: 1px solid var(--kyro-gray-200);
780
+ border-radius: 5px 5px 0 0;
781
+ }
782
+
783
+ .kyro-form-relationship-type {
784
+ font-size: 11px;
785
+ font-weight: 600;
786
+ color: var(--kyro-gray-500);
787
+ text-transform: uppercase;
788
+ letter-spacing: 0.03em;
789
+ }
790
+
791
+ .kyro-form-relationship-badge {
792
+ font-size: 10px;
793
+ padding: 2px 6px;
794
+ background: var(--kyro-gray-200);
795
+ color: var(--kyro-gray-600);
796
+ border-radius: 3px;
797
+ font-weight: 600;
798
+ }
799
+
800
+ .kyro-form-relationship-value {
801
+ padding: 10px 12px;
802
+ font-size: 14px;
803
+ color: var(--kyro-gray-900);
804
+ }
805
+
806
+ .kyro-form-relationship-empty {
807
+ padding: 10px 12px;
808
+ font-size: 14px;
809
+ color: var(--kyro-gray-400);
810
+ }
811
+
812
+ /* Array field */
813
+ .kyro-form-array {
814
+ display: flex;
815
+ flex-direction: column;
816
+ gap: 12px;
817
+ }
818
+
819
+ .kyro-form-array-empty {
820
+ padding: 32px;
821
+ 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;
827
+ }
828
+
829
+ .kyro-form-array-item {
830
+ background: white;
831
+ border: 1px solid var(--kyro-gray-200);
832
+ border-radius: 8px;
833
+ overflow: hidden;
834
+ }
835
+
836
+ .kyro-form-array-item-header {
837
+ display: flex;
838
+ align-items: center;
839
+ justify-content: space-between;
840
+ padding: 10px 12px;
841
+ background: var(--kyro-gray-50);
842
+ border-bottom: 1px solid var(--kyro-gray-200);
843
+ }
844
+
845
+ .kyro-form-array-item-number {
846
+ font-size: 12px;
847
+ font-weight: 600;
848
+ color: var(--kyro-gray-500);
849
+ }
850
+
851
+ .kyro-form-array-item-remove {
852
+ display: flex;
853
+ align-items: center;
854
+ justify-content: center;
855
+ width: 24px;
856
+ height: 24px;
857
+ border: none;
858
+ background: transparent;
859
+ color: var(--kyro-gray-400);
860
+ cursor: pointer;
861
+ border-radius: 4px;
862
+ transition: all 150ms ease;
863
+ }
864
+
865
+ .kyro-form-array-item-remove:hover {
866
+ background: var(--kyro-gray-200);
867
+ color: var(--kyro-black);
868
+ }
869
+
870
+ .kyro-form-array-item-fields {
871
+ padding: 16px;
872
+ display: flex;
873
+ flex-direction: column;
874
+ gap: 12px;
875
+ }
876
+
877
+ /* Blocks field */
878
+ .kyro-form-blocks {
879
+ display: flex;
880
+ flex-direction: column;
881
+ gap: 12px;
882
+ }
883
+
884
+ .kyro-form-blocks-empty {
885
+ padding: 32px;
886
+ text-align: center;
887
+ background: white;
888
+ border: 2px dashed var(--kyro-gray-200);
889
+ border-radius: 8px;
890
+ color: var(--kyro-gray-500);
891
+ font-size: 13px;
892
+ }
893
+
894
+ .kyro-form-block-item {
895
+ background: white;
896
+ border: 1px solid var(--kyro-gray-200);
897
+ border-radius: 8px;
898
+ overflow: hidden;
899
+ }
900
+
901
+ .kyro-form-block-item-header {
902
+ display: flex;
903
+ align-items: center;
904
+ justify-content: space-between;
905
+ padding: 10px 12px;
906
+ background: var(--kyro-gray-50);
907
+ border-bottom: 1px solid var(--kyro-gray-200);
908
+ }
909
+
910
+ .kyro-form-block-item-type {
911
+ font-size: 12px;
912
+ font-weight: 600;
913
+ color: var(--kyro-gray-700);
914
+ }
915
+
916
+ .kyro-form-block-item-actions {
917
+ display: flex;
918
+ gap: 4px;
919
+ }
920
+
921
+ .kyro-form-block-item-move,
922
+ .kyro-form-block-item-remove {
923
+ display: flex;
924
+ align-items: center;
925
+ justify-content: center;
926
+ width: 24px;
927
+ height: 24px;
928
+ border: none;
929
+ background: transparent;
930
+ color: var(--kyro-gray-400);
931
+ cursor: pointer;
932
+ border-radius: 4px;
933
+ transition: all 150ms ease;
934
+ }
935
+
936
+ .kyro-form-block-item-move:hover,
937
+ .kyro-form-block-item-remove:hover {
938
+ background: var(--kyro-gray-200);
939
+ color: var(--kyro-black);
940
+ }
941
+
942
+ .kyro-form-block-item-fields {
943
+ padding: 16px;
944
+ display: flex;
945
+ flex-direction: column;
946
+ gap: 12px;
947
+ }
948
+
949
+ .kyro-form-blocks-add {
950
+ display: flex;
951
+ align-items: center;
952
+ gap: 8px;
953
+ padding-top: 8px;
954
+ }
955
+
956
+ .kyro-form-blocks-add-label {
957
+ font-size: 12px;
958
+ font-weight: 500;
959
+ color: var(--kyro-gray-500);
960
+ }
961
+
962
+ .kyro-form-blocks-add-buttons {
963
+ display: flex;
964
+ gap: 6px;
965
+ flex-wrap: wrap;
966
+ }
967
+
968
+ /* Tabs */
969
+ .kyro-form-tabs {
970
+ display: flex;
971
+ flex-direction: column;
972
+ gap: 16px;
973
+ }
974
+
975
+ .kyro-form-tab {
976
+ border: 1px solid var(--kyro-gray-200);
977
+ border-radius: 8px;
978
+ overflow: hidden;
979
+ }
980
+
981
+ .kyro-form-tab-title {
982
+ font-size: 13px;
983
+ font-weight: 600;
984
+ color: var(--kyro-gray-900);
985
+ padding: 10px 16px;
986
+ background: var(--kyro-gray-50);
987
+ border-bottom: 1px solid var(--kyro-gray-200);
988
+ margin: 0;
989
+ }
990
+
991
+ .kyro-form-tab-content {
992
+ padding: 16px;
993
+ display: flex;
994
+ flex-direction: column;
995
+ gap: 16px;
996
+ }
997
+
998
+ /* Collapsible */
999
+ .kyro-form-collapsible {
1000
+ border: 1px solid var(--kyro-gray-200);
1001
+ border-radius: 8px;
1002
+ overflow: hidden;
1003
+ }
1004
+
1005
+ .kyro-form-collapsible-header {
1006
+ display: flex;
1007
+ align-items: center;
1008
+ gap: 8px;
1009
+ width: 100%;
1010
+ padding: 12px 16px;
1011
+ background: var(--kyro-gray-50);
1012
+ font-size: 13px;
1013
+ font-weight: 600;
1014
+ color: var(--kyro-gray-900);
1015
+ border: none;
1016
+ cursor: pointer;
1017
+ text-align: left;
1018
+ list-style: none;
1019
+ }
1020
+
1021
+ .kyro-form-collapsible-header::-webkit-details-marker {
1022
+ display: none;
1023
+ }
1024
+
1025
+ .kyro-form-collapsible-header svg {
1026
+ color: var(--kyro-gray-500);
1027
+ transition: transform 150ms ease;
1028
+ }
1029
+
1030
+ .kyro-form-collapsible[open] .kyro-form-collapsible-header svg {
1031
+ transform: rotate(90deg);
1032
+ }
1033
+
1034
+ .kyro-form-collapsible-content {
1035
+ padding: 16px;
1036
+ display: flex;
1037
+ flex-direction: column;
1038
+ gap: 16px;
1039
+ }
1040
+
1041
+ /* Upload */
1042
+ .kyro-form-upload {
1043
+ border: 2px dashed var(--kyro-gray-200);
1044
+ border-radius: 8px;
1045
+ padding: 32px;
1046
+ text-align: center;
1047
+ cursor: pointer;
1048
+ transition: all 150ms ease;
1049
+ background: white;
1050
+ }
1051
+
1052
+ .kyro-form-upload:hover,
1053
+ .kyro-form-upload-dragging {
1054
+ border-color: var(--kyro-black);
1055
+ background: var(--kyro-gray-50);
1056
+ }
1057
+
1058
+ .kyro-form-upload-error {
1059
+ border-color: var(--kyro-gray-900);
1060
+ }
1061
+
1062
+ .kyro-form-upload-input {
1063
+ display: none;
1064
+ }
1065
+
1066
+ .kyro-form-upload-placeholder {
1067
+ display: flex;
1068
+ flex-direction: column;
1069
+ align-items: center;
1070
+ gap: 8px;
1071
+ color: var(--kyro-gray-500);
1072
+ font-size: 14px;
1073
+ }
1074
+
1075
+ .kyro-form-upload-placeholder svg {
1076
+ color: var(--kyro-gray-400);
1077
+ }
1078
+
1079
+ .kyro-form-upload-hint {
1080
+ font-size: 12px;
1081
+ color: var(--kyro-gray-400);
1082
+ }
1083
+
1084
+ .kyro-form-upload-preview {
1085
+ display: flex;
1086
+ align-items: center;
1087
+ gap: 12px;
1088
+ }
1089
+
1090
+ .kyro-form-upload-image {
1091
+ width: 64px;
1092
+ height: 64px;
1093
+ border-radius: 6px;
1094
+ object-fit: cover;
1095
+ border: 1px solid var(--kyro-gray-200);
1096
+ }
1097
+
1098
+ .kyro-form-upload-info {
1099
+ display: flex;
1100
+ flex-direction: column;
1101
+ gap: 4px;
1102
+ text-align: left;
1103
+ }
1104
+
1105
+ .kyro-form-upload-filename {
1106
+ font-size: 13px;
1107
+ font-weight: 500;
1108
+ color: var(--kyro-gray-900);
1109
+ }
1110
+
1111
+ .kyro-form-upload-change {
1112
+ font-size: 12px;
1113
+ color: var(--kyro-gray-500);
1114
+ background: none;
1115
+ border: none;
1116
+ padding: 0;
1117
+ cursor: pointer;
1118
+ text-decoration: underline;
1119
+ }
1120
+
1121
+ .kyro-form-upload-change:hover {
1122
+ color: var(--kyro-black);
1123
+ }
1124
+
1125
+ /* Badges — Monochrome */
1126
+ .kyro-badge {
1127
+ display: inline-flex;
1128
+ align-items: center;
1129
+ padding: 2px 8px;
1130
+ font-size: 11px;
1131
+ font-weight: 600;
1132
+ border-radius: 4px;
1133
+ text-transform: uppercase;
1134
+ letter-spacing: 0.02em;
1135
+ }
1136
+
1137
+ .kyro-badge-default {
1138
+ background: var(--kyro-gray-100);
1139
+ color: var(--kyro-gray-600);
1140
+ }
1141
+
1142
+ .kyro-badge-success {
1143
+ background: var(--kyro-gray-100);
1144
+ color: var(--kyro-gray-900);
1145
+ }
1146
+
1147
+ .kyro-badge-warning {
1148
+ background: var(--kyro-gray-200);
1149
+ color: var(--kyro-gray-800);
1150
+ }
1151
+
1152
+ .kyro-badge-danger {
1153
+ background: var(--kyro-gray-200);
1154
+ color: var(--kyro-gray-900);
1155
+ }
1156
+
1157
+ .kyro-badge-info {
1158
+ background: var(--kyro-gray-100);
1159
+ color: var(--kyro-gray-700);
1160
+ }
1161
+
1162
+ /* Toast — Monochrome */
1163
+ .kyro-toast {
1164
+ position: fixed;
1165
+ bottom: 20px;
1166
+ right: 20px;
1167
+ display: flex;
1168
+ align-items: center;
1169
+ gap: 12px;
1170
+ padding: 14px 18px;
1171
+ background: var(--kyro-black);
1172
+ color: white;
1173
+ border-radius: 8px;
1174
+ box-shadow: 0 10px 40px rgba(0, 0, 0, 0.3);
1175
+ animation: toast-in 0.2s ease;
1176
+ z-index: 1000;
1177
+ }
1178
+
1179
+ @keyframes toast-in {
1180
+ from {
1181
+ transform: translateY(20px);
1182
+ opacity: 0;
1183
+ }
1184
+
1185
+ to {
1186
+ transform: translateY(0);
1187
+ opacity: 1;
1188
+ }
1189
+ }
1190
+
1191
+ .kyro-toast-success {
1192
+ border-left: 4px solid var(--kyro-gray-300);
1193
+ }
1194
+
1195
+ .kyro-toast-error {
1196
+ border-left: 4px solid white;
1197
+ }
1198
+
1199
+ .kyro-toast-warning {
1200
+ border-left: 4px solid var(--kyro-gray-400);
1201
+ }
1202
+
1203
+ .kyro-toast-info {
1204
+ border-left: 4px solid var(--kyro-gray-500);
1205
+ }
1206
+
1207
+ .kyro-toast-close {
1208
+ display: flex;
1209
+ align-items: center;
1210
+ justify-content: center;
1211
+ width: 20px;
1212
+ height: 20px;
1213
+ border: none;
1214
+ background: transparent;
1215
+ color: rgba(255, 255, 255, 0.5);
1216
+ cursor: pointer;
1217
+ margin-left: 8px;
1218
+ }
1219
+
1220
+ .kyro-toast-close:hover {
1221
+ color: white;
1222
+ }
1223
+
1224
+ /* Spinner — Monochrome */
1225
+ .kyro-spinner {
1226
+ animation: spin 0.8s linear infinite;
1227
+ color: var(--kyro-black);
1228
+ }
1229
+
1230
+ .kyro-spinner-sm {
1231
+ width: 14px;
1232
+ height: 14px;
1233
+ }
1234
+
1235
+ .kyro-spinner-md {
1236
+ width: 20px;
1237
+ height: 20px;
1238
+ }
1239
+
1240
+ .kyro-spinner-lg {
1241
+ width: 28px;
1242
+ height: 28px;
1243
+ }
1244
+
1245
+ @keyframes spin {
1246
+ from {
1247
+ transform: rotate(0deg);
1248
+ }
1249
+
1250
+ to {
1251
+ transform: rotate(360deg);
1252
+ }
1253
+ }
1254
+
1255
+ .kyro-loading {
1256
+ display: flex;
1257
+ align-items: center;
1258
+ justify-content: center;
1259
+ padding: 48px;
1260
+ color: var(--kyro-gray-500);
1261
+ }
1262
+
1263
+ /* Modal — Monochrome */
1264
+ .kyro-modal-overlay {
1265
+ position: fixed;
1266
+ inset: 0;
1267
+ background: rgba(11, 18, 34, 0.6);
1268
+ display: flex;
1269
+ align-items: center;
1270
+ justify-content: center;
1271
+ z-index: 1000;
1272
+ backdrop-filter: blur(4px);
1273
+ }
1274
+
1275
+ .kyro-modal {
1276
+ background: white;
1277
+ border-radius: 10px;
1278
+ padding: 24px;
1279
+ max-width: 400px;
1280
+ width: 100%;
1281
+ animation: modal-in 0.2s ease;
1282
+ }
1283
+
1284
+ @keyframes modal-in {
1285
+ from {
1286
+ transform: scale(0.95);
1287
+ opacity: 0;
1288
+ }
1289
+
1290
+ to {
1291
+ transform: scale(1);
1292
+ opacity: 1;
1293
+ }
1294
+ }
1295
+
1296
+ .kyro-modal h3 {
1297
+ margin: 0 0 8px;
1298
+ font-size: 18px;
1299
+ font-weight: 600;
1300
+ color: var(--kyro-gray-900);
1301
+ }
1302
+
1303
+ .kyro-modal p {
1304
+ margin: 0 0 16px;
1305
+ color: var(--kyro-gray-600);
1306
+ font-size: 14px;
1307
+ }
1308
+
1309
+ .kyro-modal-actions {
1310
+ display: flex;
1311
+ justify-content: flex-end;
1312
+ gap: 8px;
1313
+ }
1314
+
1315
+ /* Searchable Relationship Modal */
1316
+ .kyro-relation-modal {
1317
+ background: white;
1318
+ border-radius: 12px;
1319
+ max-width: 520px;
1320
+ width: 100%;
1321
+ max-height: 80vh;
1322
+ display: flex;
1323
+ flex-direction: column;
1324
+ animation: modal-in 0.2s ease;
1325
+ overflow: hidden;
1326
+ box-shadow: 0 25px 50px -12px rgba(0, 0, 0, 0.25);
1327
+ }
1328
+
1329
+ .kyro-relation-modal-header {
1330
+ padding: 20px 24px 0;
1331
+ display: flex;
1332
+ flex-direction: column;
1333
+ gap: 16px;
1334
+ }
1335
+
1336
+ .kyro-relation-modal-header h3 {
1337
+ font-size: 16px;
1338
+ font-weight: 600;
1339
+ color: var(--kyro-gray-900);
1340
+ margin: 0;
1341
+ }
1342
+
1343
+ .kyro-relation-modal-search {
1344
+ width: 100%;
1345
+ padding: 10px 12px;
1346
+ font-size: 14px;
1347
+ color: var(--kyro-gray-900);
1348
+ background: var(--kyro-gray-50);
1349
+ border: 1px solid var(--kyro-gray-200);
1350
+ border-radius: 6px;
1351
+ transition: all 150ms ease;
1352
+ font-family: inherit;
1353
+ }
1354
+
1355
+ .kyro-relation-modal-search:focus {
1356
+ outline: none;
1357
+ border-color: var(--kyro-black);
1358
+ box-shadow: 0 0 0 3px rgba(11, 18, 34, 0.08);
1359
+ background: white;
1360
+ }
1361
+
1362
+ .kyro-relation-modal-search::placeholder {
1363
+ color: var(--kyro-gray-400);
1364
+ }
1365
+
1366
+ .kyro-relation-modal-list {
1367
+ flex: 1;
1368
+ overflow-y: auto;
1369
+ padding: 8px;
1370
+ max-height: 320px;
1371
+ }
1372
+
1373
+ .kyro-relation-modal-item {
1374
+ display: flex;
1375
+ align-items: center;
1376
+ gap: 12px;
1377
+ width: 100%;
1378
+ padding: 10px 16px;
1379
+ font-size: 14px;
1380
+ color: var(--kyro-gray-900);
1381
+ background: transparent;
1382
+ border: none;
1383
+ border-radius: 6px;
1384
+ cursor: pointer;
1385
+ transition: all 100ms ease;
1386
+ text-align: left;
1387
+ font-family: inherit;
1388
+ }
1389
+
1390
+ .kyro-relation-modal-item:hover {
1391
+ background: var(--kyro-gray-50);
1392
+ }
1393
+
1394
+ .kyro-relation-modal-item.selected {
1395
+ background: var(--kyro-black);
1396
+ color: white;
1397
+ }
1398
+
1399
+ .kyro-relation-modal-item-id {
1400
+ font-size: 11px;
1401
+ color: var(--kyro-gray-400);
1402
+ font-family: monospace;
1403
+ }
1404
+
1405
+ .kyro-relation-modal-item.selected .kyro-relation-modal-item-id {
1406
+ color: rgba(255, 255, 255, 0.6);
1407
+ }
1408
+
1409
+ .kyro-relation-modal-empty {
1410
+ padding: 32px;
1411
+ text-align: center;
1412
+ color: var(--kyro-gray-400);
1413
+ font-size: 13px;
1414
+ }
1415
+
1416
+ .kyro-relation-modal-footer {
1417
+ padding: 16px 24px;
1418
+ border-top: 1px solid var(--kyro-gray-100);
1419
+ display: flex;
1420
+ justify-content: flex-end;
1421
+ gap: 8px;
1422
+ }
1423
+
1424
+ /* Color picker */
1425
+ .kyro-color {
1426
+ display: flex;
1427
+ align-items: center;
1428
+ gap: 12px;
1429
+ }
1430
+
1431
+ .kyro-color-swatch {
1432
+ width: 36px;
1433
+ height: 36px;
1434
+ border-radius: 6px;
1435
+ border: 1px solid var(--kyro-gray-200);
1436
+ cursor: pointer;
1437
+ padding: 0;
1438
+ overflow: hidden;
1439
+ }
1440
+
1441
+ .kyro-color-swatch::-webkit-color-swatch-wrapper {
1442
+ padding: 0;
1443
+ }
1444
+
1445
+ .kyro-color-swatch::-webkit-color-swatch {
1446
+ border: none;
1447
+ border-radius: 5px;
1448
+ }
1449
+ }