cmssy-cli 0.20.1 → 0.24.1

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 (80) hide show
  1. package/config.d.ts +1 -1
  2. package/dist/cli.js +136 -23
  3. package/dist/cli.js.map +1 -1
  4. package/dist/commands/add-source.d.ts +7 -0
  5. package/dist/commands/add-source.d.ts.map +1 -0
  6. package/dist/commands/add-source.js +238 -0
  7. package/dist/commands/add-source.js.map +1 -0
  8. package/dist/commands/build.d.ts +1 -0
  9. package/dist/commands/build.d.ts.map +1 -1
  10. package/dist/commands/build.js +56 -12
  11. package/dist/commands/build.js.map +1 -1
  12. package/dist/commands/create.d.ts.map +1 -1
  13. package/dist/commands/create.js +22 -2
  14. package/dist/commands/create.js.map +1 -1
  15. package/dist/commands/dev.d.ts.map +1 -1
  16. package/dist/commands/dev.js +652 -410
  17. package/dist/commands/dev.js.map +1 -1
  18. package/dist/commands/init.d.ts.map +1 -1
  19. package/dist/commands/init.js +3 -1
  20. package/dist/commands/init.js.map +1 -1
  21. package/dist/commands/migrate.d.ts.map +1 -1
  22. package/dist/commands/migrate.js +3 -1
  23. package/dist/commands/migrate.js.map +1 -1
  24. package/dist/commands/publish.js +74 -0
  25. package/dist/commands/publish.js.map +1 -1
  26. package/dist/dev-ui/app.js +166 -19
  27. package/dist/dev-ui/index.html +138 -0
  28. package/dist/dev-ui-react/App.tsx +164 -0
  29. package/dist/dev-ui-react/__tests__/previewData.test.ts +193 -0
  30. package/dist/dev-ui-react/components/BlocksList.tsx +232 -0
  31. package/dist/dev-ui-react/components/Editor.tsx +469 -0
  32. package/dist/dev-ui-react/components/Preview.tsx +146 -0
  33. package/dist/dev-ui-react/hooks/useBlocks.ts +80 -0
  34. package/dist/dev-ui-react/index.html +13 -0
  35. package/dist/dev-ui-react/main.tsx +8 -0
  36. package/dist/dev-ui-react/styles.css +856 -0
  37. package/dist/dev-ui-react/types.ts +45 -0
  38. package/dist/types/block-config.d.ts +100 -2
  39. package/dist/types/block-config.d.ts.map +1 -1
  40. package/dist/types/block-config.js +6 -1
  41. package/dist/types/block-config.js.map +1 -1
  42. package/dist/utils/block-config.js +3 -3
  43. package/dist/utils/block-config.js.map +1 -1
  44. package/dist/utils/blocks-meta-cache.d.ts +28 -0
  45. package/dist/utils/blocks-meta-cache.d.ts.map +1 -0
  46. package/dist/utils/blocks-meta-cache.js +72 -0
  47. package/dist/utils/blocks-meta-cache.js.map +1 -0
  48. package/dist/utils/builder.d.ts +3 -0
  49. package/dist/utils/builder.d.ts.map +1 -1
  50. package/dist/utils/builder.js +17 -14
  51. package/dist/utils/builder.js.map +1 -1
  52. package/dist/utils/field-schema.d.ts +2 -0
  53. package/dist/utils/field-schema.d.ts.map +1 -1
  54. package/dist/utils/field-schema.js +21 -4
  55. package/dist/utils/field-schema.js.map +1 -1
  56. package/dist/utils/graphql.d.ts +2 -0
  57. package/dist/utils/graphql.d.ts.map +1 -1
  58. package/dist/utils/graphql.js +22 -0
  59. package/dist/utils/graphql.js.map +1 -1
  60. package/dist/utils/scanner.d.ts +5 -3
  61. package/dist/utils/scanner.d.ts.map +1 -1
  62. package/dist/utils/scanner.js +23 -16
  63. package/dist/utils/scanner.js.map +1 -1
  64. package/dist/utils/type-generator.d.ts +7 -1
  65. package/dist/utils/type-generator.d.ts.map +1 -1
  66. package/dist/utils/type-generator.js +58 -41
  67. package/dist/utils/type-generator.js.map +1 -1
  68. package/package.json +8 -3
  69. package/dist/commands/deploy.d.ts +0 -9
  70. package/dist/commands/deploy.d.ts.map +0 -1
  71. package/dist/commands/deploy.js +0 -226
  72. package/dist/commands/deploy.js.map +0 -1
  73. package/dist/commands/push.d.ts +0 -9
  74. package/dist/commands/push.d.ts.map +0 -1
  75. package/dist/commands/push.js +0 -199
  76. package/dist/commands/push.js.map +0 -1
  77. package/dist/utils/blockforge-config.d.ts +0 -19
  78. package/dist/utils/blockforge-config.d.ts.map +0 -1
  79. package/dist/utils/blockforge-config.js +0 -19
  80. package/dist/utils/blockforge-config.js.map +0 -1
@@ -0,0 +1,856 @@
1
+ /* CSS Reset */
2
+ *,
3
+ *::before,
4
+ *::after {
5
+ box-sizing: border-box;
6
+ }
7
+
8
+ html,
9
+ body,
10
+ #root {
11
+ height: 100%;
12
+ margin: 0;
13
+ padding: 0;
14
+ }
15
+
16
+ body {
17
+ font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;
18
+ background: #f5f5f5;
19
+ overflow: hidden;
20
+ line-height: 1.5;
21
+ -webkit-font-smoothing: antialiased;
22
+ }
23
+
24
+ /* Main Container */
25
+ .container {
26
+ display: grid;
27
+ grid-template-columns: 280px 1fr 400px;
28
+ height: 100vh;
29
+ gap: 0;
30
+ }
31
+
32
+ /* Collapsed panels */
33
+ .blocks-panel.collapsed,
34
+ .editor-panel.collapsed {
35
+ width: 48px;
36
+ min-width: 48px;
37
+ }
38
+
39
+ .container:has(.blocks-panel.collapsed) {
40
+ grid-template-columns: 48px 1fr 400px;
41
+ }
42
+
43
+ .container:has(.editor-panel.collapsed) {
44
+ grid-template-columns: 280px 1fr 48px;
45
+ }
46
+
47
+ .container:has(.blocks-panel.collapsed):has(.editor-panel.collapsed) {
48
+ grid-template-columns: 48px 1fr 48px;
49
+ }
50
+
51
+ /* Blocks Panel */
52
+ .blocks-panel {
53
+ background: #fff;
54
+ border-right: 1px solid #e0e0e0;
55
+ display: flex;
56
+ flex-direction: column;
57
+ overflow: hidden;
58
+ transition: width 0.2s ease;
59
+ }
60
+
61
+ .blocks-panel.collapsed .blocks-header-content,
62
+ .blocks-panel.collapsed .blocks-filters,
63
+ .blocks-panel.collapsed .blocks-list {
64
+ display: none;
65
+ }
66
+
67
+ .blocks-header {
68
+ padding: 16px;
69
+ border-bottom: 1px solid #e0e0e0;
70
+ background: #fafafa;
71
+ display: flex;
72
+ align-items: center;
73
+ justify-content: space-between;
74
+ min-height: 60px;
75
+ flex-shrink: 0;
76
+ }
77
+
78
+ .blocks-header h1 {
79
+ font-size: 18px;
80
+ font-weight: 600;
81
+ color: #1a1a1a;
82
+ margin: 0 0 4px 0;
83
+ }
84
+
85
+ .blocks-header p {
86
+ font-size: 13px;
87
+ color: #666;
88
+ margin: 0;
89
+ }
90
+
91
+ .panel-toggle {
92
+ width: 32px;
93
+ height: 32px;
94
+ border: none;
95
+ background: transparent;
96
+ cursor: pointer;
97
+ display: flex;
98
+ align-items: center;
99
+ justify-content: center;
100
+ border-radius: 6px;
101
+ transition: background 0.2s;
102
+ flex-shrink: 0;
103
+ }
104
+
105
+ .panel-toggle:hover {
106
+ background: #e0e0e0;
107
+ }
108
+
109
+ .toggle-icon {
110
+ font-size: 16px;
111
+ color: #333;
112
+ }
113
+
114
+ /* Filters */
115
+ .blocks-filters {
116
+ padding: 12px;
117
+ border-bottom: 1px solid #e0e0e0;
118
+ background: #fafafa;
119
+ display: flex;
120
+ flex-direction: column;
121
+ gap: 12px;
122
+ flex-shrink: 0;
123
+ }
124
+
125
+ .search-input {
126
+ width: 100%;
127
+ padding: 8px 12px;
128
+ border: 1px solid #ddd;
129
+ border-radius: 6px;
130
+ font-size: 13px;
131
+ background: white;
132
+ transition: border-color 0.2s, box-shadow 0.2s;
133
+ }
134
+
135
+ .search-input:focus {
136
+ outline: none;
137
+ border-color: #667eea;
138
+ box-shadow: 0 0 0 3px rgba(102, 126, 234, 0.1);
139
+ }
140
+
141
+ .filter-tabs {
142
+ display: flex;
143
+ gap: 4px;
144
+ background: #e0e0e0;
145
+ padding: 3px;
146
+ border-radius: 8px;
147
+ }
148
+
149
+ .filter-tab {
150
+ flex: 1;
151
+ padding: 6px 12px;
152
+ border: none;
153
+ background: transparent;
154
+ cursor: pointer;
155
+ font-size: 12px;
156
+ font-weight: 500;
157
+ color: #666;
158
+ border-radius: 6px;
159
+ transition: all 0.2s;
160
+ }
161
+
162
+ .filter-tab:hover {
163
+ color: #333;
164
+ }
165
+
166
+ .filter-tab.active {
167
+ background: white;
168
+ color: #333;
169
+ box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1);
170
+ }
171
+
172
+ .filter-select {
173
+ width: 100%;
174
+ padding: 8px 12px;
175
+ border: 1px solid #ddd;
176
+ border-radius: 6px;
177
+ font-size: 12px;
178
+ background: white;
179
+ cursor: pointer;
180
+ }
181
+
182
+ .tags-filter {
183
+ display: flex;
184
+ flex-wrap: wrap;
185
+ gap: 6px;
186
+ max-height: 80px;
187
+ overflow-y: auto;
188
+ }
189
+
190
+ .tag-chip {
191
+ padding: 4px 10px;
192
+ border: 1px solid #ddd;
193
+ border-radius: 12px;
194
+ font-size: 11px;
195
+ cursor: pointer;
196
+ background: white;
197
+ color: #666;
198
+ transition: all 0.2s;
199
+ }
200
+
201
+ .tag-chip:hover {
202
+ border-color: #667eea;
203
+ color: #667eea;
204
+ }
205
+
206
+ .tag-chip.active {
207
+ background: #667eea;
208
+ border-color: #667eea;
209
+ color: white;
210
+ }
211
+
212
+ .clear-filters {
213
+ padding: 4px 10px;
214
+ border: 1px dashed #ddd;
215
+ border-radius: 12px;
216
+ font-size: 11px;
217
+ cursor: pointer;
218
+ background: transparent;
219
+ color: #999;
220
+ }
221
+
222
+ .clear-filters:hover {
223
+ border-color: #e53935;
224
+ color: #e53935;
225
+ }
226
+
227
+ /* Blocks List */
228
+ .blocks-list {
229
+ padding: 12px;
230
+ overflow-y: auto;
231
+ flex: 1;
232
+ }
233
+
234
+ .block-category {
235
+ margin-bottom: 16px;
236
+ }
237
+
238
+ .category-header {
239
+ font-size: 11px;
240
+ font-weight: 600;
241
+ text-transform: uppercase;
242
+ letter-spacing: 0.5px;
243
+ color: #999;
244
+ padding: 8px 12px 6px;
245
+ display: flex;
246
+ align-items: center;
247
+ gap: 8px;
248
+ }
249
+
250
+ .category-count {
251
+ font-size: 10px;
252
+ font-weight: 500;
253
+ background: #e0e0e0;
254
+ padding: 2px 6px;
255
+ border-radius: 10px;
256
+ color: #666;
257
+ }
258
+
259
+ .block-item {
260
+ padding: 12px 16px;
261
+ margin-bottom: 4px;
262
+ border-radius: 8px;
263
+ cursor: pointer;
264
+ transition: all 0.2s;
265
+ border: 1px solid transparent;
266
+ }
267
+
268
+ .block-item:hover {
269
+ background: #f5f5f5;
270
+ }
271
+
272
+ .block-item.active {
273
+ background: #667eea;
274
+ color: white;
275
+ }
276
+
277
+ .block-item.active .block-item-type,
278
+ .block-item.active .status-badge {
279
+ opacity: 0.8;
280
+ }
281
+
282
+ .block-item-header {
283
+ display: flex;
284
+ justify-content: space-between;
285
+ align-items: center;
286
+ margin-bottom: 4px;
287
+ }
288
+
289
+ .block-item-name {
290
+ font-size: 14px;
291
+ font-weight: 500;
292
+ display: flex;
293
+ align-items: center;
294
+ gap: 8px;
295
+ }
296
+
297
+ .type-badge {
298
+ font-size: 10px;
299
+ padding: 2px 6px;
300
+ border-radius: 4px;
301
+ font-weight: 500;
302
+ }
303
+
304
+ .type-badge.template {
305
+ background: #f3e8ff;
306
+ color: #7c3aed;
307
+ }
308
+
309
+ .block-item.active .type-badge.template {
310
+ background: rgba(255, 255, 255, 0.2);
311
+ color: white;
312
+ }
313
+
314
+ .version-badge {
315
+ font-size: 11px;
316
+ padding: 2px 6px;
317
+ background: #e3f2fd;
318
+ color: #1976d2;
319
+ border-radius: 4px;
320
+ font-weight: 500;
321
+ }
322
+
323
+ .block-item.active .version-badge {
324
+ background: rgba(255, 255, 255, 0.2);
325
+ color: white;
326
+ }
327
+
328
+ .block-item-footer {
329
+ display: flex;
330
+ justify-content: space-between;
331
+ align-items: center;
332
+ }
333
+
334
+ .block-item-type {
335
+ font-size: 12px;
336
+ opacity: 0.7;
337
+ }
338
+
339
+ .status-badge {
340
+ font-size: 11px;
341
+ padding: 2px 8px;
342
+ border-radius: 10px;
343
+ font-weight: 500;
344
+ }
345
+
346
+ .status-badge.status-local {
347
+ background: #fff3e0;
348
+ color: #e65100;
349
+ }
350
+
351
+ .block-item.active .status-badge.status-local {
352
+ background: rgba(255, 255, 255, 0.2);
353
+ color: white;
354
+ }
355
+
356
+ /* Loading & Empty States */
357
+ .loading {
358
+ display: flex;
359
+ align-items: center;
360
+ justify-content: center;
361
+ padding: 40px;
362
+ color: #999;
363
+ gap: 12px;
364
+ }
365
+
366
+ .spinner {
367
+ width: 20px;
368
+ height: 20px;
369
+ border: 2px solid #f3f3f3;
370
+ border-top: 2px solid #667eea;
371
+ border-radius: 50%;
372
+ animation: spin 1s linear infinite;
373
+ }
374
+
375
+ @keyframes spin {
376
+ to {
377
+ transform: rotate(360deg);
378
+ }
379
+ }
380
+
381
+ .no-results {
382
+ text-align: center;
383
+ padding: 40px 20px;
384
+ color: #999;
385
+ }
386
+
387
+ .no-results-icon {
388
+ font-size: 32px;
389
+ margin-bottom: 12px;
390
+ opacity: 0.5;
391
+ }
392
+
393
+ .btn-clear {
394
+ margin-top: 12px;
395
+ padding: 6px 16px;
396
+ background: #667eea;
397
+ color: white;
398
+ border: none;
399
+ border-radius: 6px;
400
+ cursor: pointer;
401
+ font-size: 13px;
402
+ }
403
+
404
+ /* Preview Panel */
405
+ .preview-panel {
406
+ background: #fafafa;
407
+ display: flex;
408
+ flex-direction: column;
409
+ overflow: hidden;
410
+ }
411
+
412
+ .preview-header {
413
+ padding: 16px 24px;
414
+ background: white;
415
+ border-bottom: 1px solid #e0e0e0;
416
+ display: flex;
417
+ justify-content: space-between;
418
+ align-items: center;
419
+ }
420
+
421
+ .preview-title {
422
+ font-size: 16px;
423
+ font-weight: 600;
424
+ color: #1a1a1a;
425
+ }
426
+
427
+ .preview-actions {
428
+ display: flex;
429
+ gap: 8px;
430
+ align-items: center;
431
+ }
432
+
433
+ .preview-badge {
434
+ font-size: 12px;
435
+ padding: 4px 12px;
436
+ background: #e8f5e9;
437
+ color: #2e7d32;
438
+ border-radius: 12px;
439
+ font-weight: 500;
440
+ }
441
+
442
+ .btn-publish {
443
+ padding: 8px 16px;
444
+ background: #667eea;
445
+ color: white;
446
+ border: none;
447
+ border-radius: 6px;
448
+ font-size: 14px;
449
+ font-weight: 500;
450
+ cursor: pointer;
451
+ transition: background 0.2s;
452
+ }
453
+
454
+ .btn-publish:hover {
455
+ background: #5568d3;
456
+ }
457
+
458
+ .preview-content {
459
+ flex: 1;
460
+ padding: 24px;
461
+ overflow: auto;
462
+ display: flex;
463
+ align-items: center;
464
+ justify-content: center;
465
+ }
466
+
467
+ .preview-iframe-wrapper {
468
+ width: 100%;
469
+ height: 100%;
470
+ background: white;
471
+ border-radius: 12px;
472
+ box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1);
473
+ overflow: hidden;
474
+ }
475
+
476
+ .preview-iframe-wrapper.template-preview {
477
+ background: #1a1a2e;
478
+ }
479
+
480
+ .preview-iframe {
481
+ width: 100%;
482
+ height: 100%;
483
+ border: none;
484
+ }
485
+
486
+ .preview-empty {
487
+ text-align: center;
488
+ color: #999;
489
+ padding: 60px 20px;
490
+ }
491
+
492
+ .preview-empty-icon {
493
+ font-size: 48px;
494
+ margin-bottom: 16px;
495
+ opacity: 0.3;
496
+ }
497
+
498
+ /* Editor Panel */
499
+ .editor-panel {
500
+ background: #fff;
501
+ border-left: 1px solid #e0e0e0;
502
+ display: flex;
503
+ flex-direction: column;
504
+ overflow: hidden;
505
+ transition: width 0.2s ease;
506
+ }
507
+
508
+ .editor-panel.collapsed .editor-header-content,
509
+ .editor-panel.collapsed .editor-content {
510
+ display: none;
511
+ }
512
+
513
+ .editor-header {
514
+ padding: 16px;
515
+ border-bottom: 1px solid #e0e0e0;
516
+ background: #fafafa;
517
+ display: flex;
518
+ align-items: center;
519
+ gap: 12px;
520
+ min-height: 60px;
521
+ flex-shrink: 0;
522
+ }
523
+
524
+ .editor-header h2 {
525
+ font-size: 16px;
526
+ font-weight: 600;
527
+ color: #1a1a1a;
528
+ margin: 0 0 4px 0;
529
+ }
530
+
531
+ .editor-header p {
532
+ font-size: 13px;
533
+ color: #666;
534
+ margin: 0;
535
+ }
536
+
537
+ .editor-content {
538
+ flex: 1;
539
+ overflow-y: auto;
540
+ padding: 20px;
541
+ }
542
+
543
+ .editor-empty {
544
+ text-align: center;
545
+ color: #999;
546
+ padding: 40px 20px;
547
+ }
548
+
549
+ /* Form Fields */
550
+ .field-group {
551
+ margin-bottom: 24px;
552
+ }
553
+
554
+ .field-label {
555
+ display: block;
556
+ font-size: 13px;
557
+ font-weight: 500;
558
+ color: #333;
559
+ margin-bottom: 8px;
560
+ }
561
+
562
+ .field-required {
563
+ color: #e53935;
564
+ margin-left: 2px;
565
+ }
566
+
567
+ .field-help {
568
+ font-size: 12px;
569
+ color: #666;
570
+ margin-top: 4px;
571
+ }
572
+
573
+ .field-input {
574
+ width: 100%;
575
+ padding: 10px 12px;
576
+ border: 1px solid #ddd;
577
+ border-radius: 6px;
578
+ font-size: 14px;
579
+ font-family: inherit;
580
+ transition: border-color 0.2s, box-shadow 0.2s;
581
+ }
582
+
583
+ .field-input:focus {
584
+ outline: none;
585
+ border-color: #667eea;
586
+ box-shadow: 0 0 0 3px rgba(102, 126, 234, 0.1);
587
+ }
588
+
589
+ .field-textarea {
590
+ min-height: 80px;
591
+ resize: vertical;
592
+ }
593
+
594
+ .field-checkbox-label {
595
+ display: flex;
596
+ align-items: center;
597
+ gap: 8px;
598
+ cursor: pointer;
599
+ }
600
+
601
+ .field-checkbox-label input {
602
+ width: auto;
603
+ }
604
+
605
+ /* Color Field */
606
+ .color-field {
607
+ display: flex;
608
+ gap: 12px;
609
+ align-items: center;
610
+ }
611
+
612
+ .color-preview {
613
+ width: 40px;
614
+ height: 40px;
615
+ border: 1px solid #ddd;
616
+ border-radius: 6px;
617
+ cursor: pointer;
618
+ padding: 0;
619
+ }
620
+
621
+ .color-input {
622
+ flex: 1;
623
+ }
624
+
625
+ /* Media Field */
626
+ .media-field {
627
+ display: flex;
628
+ gap: 12px;
629
+ align-items: flex-start;
630
+ }
631
+
632
+ .media-preview {
633
+ width: 80px;
634
+ height: 80px;
635
+ border: 1px solid #ddd;
636
+ border-radius: 6px;
637
+ overflow: hidden;
638
+ background: #fafafa;
639
+ display: flex;
640
+ align-items: center;
641
+ justify-content: center;
642
+ flex-shrink: 0;
643
+ }
644
+
645
+ .media-preview img {
646
+ width: 100%;
647
+ height: 100%;
648
+ object-fit: cover;
649
+ }
650
+
651
+ .media-placeholder {
652
+ color: #999;
653
+ font-size: 12px;
654
+ }
655
+
656
+ .media-input-group {
657
+ flex: 1;
658
+ }
659
+
660
+ /* Repeater Fields */
661
+ .repeater-items {
662
+ border: 1px solid #e0e0e0;
663
+ border-radius: 8px;
664
+ padding: 12px;
665
+ background: #fafafa;
666
+ }
667
+
668
+ .repeater-item {
669
+ background: white;
670
+ border: 1px solid #e0e0e0;
671
+ border-radius: 6px;
672
+ padding: 16px;
673
+ margin-bottom: 12px;
674
+ }
675
+
676
+ .repeater-item:last-child {
677
+ margin-bottom: 0;
678
+ }
679
+
680
+ .repeater-item-header {
681
+ display: flex;
682
+ justify-content: space-between;
683
+ align-items: center;
684
+ margin-bottom: 12px;
685
+ padding-bottom: 12px;
686
+ border-bottom: 1px solid #f0f0f0;
687
+ }
688
+
689
+ .repeater-item-title {
690
+ font-size: 13px;
691
+ font-weight: 500;
692
+ color: #666;
693
+ }
694
+
695
+ .repeater-item-remove {
696
+ background: #ffebee;
697
+ color: #c62828;
698
+ border: none;
699
+ padding: 4px 12px;
700
+ border-radius: 4px;
701
+ font-size: 12px;
702
+ cursor: pointer;
703
+ font-weight: 500;
704
+ }
705
+
706
+ .repeater-item-remove:hover {
707
+ background: #ffcdd2;
708
+ }
709
+
710
+ .repeater-add {
711
+ width: 100%;
712
+ padding: 10px;
713
+ background: white;
714
+ border: 1px dashed #667eea;
715
+ color: #667eea;
716
+ border-radius: 6px;
717
+ font-size: 13px;
718
+ font-weight: 500;
719
+ cursor: pointer;
720
+ margin-top: 8px;
721
+ }
722
+
723
+ .repeater-add:hover {
724
+ background: #f5f7ff;
725
+ border-style: solid;
726
+ }
727
+
728
+ /* Template Editor */
729
+ .template-editor {
730
+ padding: 0;
731
+ }
732
+
733
+ .template-info {
734
+ padding: 16px;
735
+ background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
736
+ color: white;
737
+ border-radius: 8px;
738
+ margin-bottom: 20px;
739
+ }
740
+
741
+ .template-info-badge {
742
+ display: inline-block;
743
+ background: rgba(255, 255, 255, 0.2);
744
+ padding: 4px 10px;
745
+ border-radius: 12px;
746
+ font-size: 11px;
747
+ font-weight: 600;
748
+ text-transform: uppercase;
749
+ letter-spacing: 0.5px;
750
+ margin-bottom: 8px;
751
+ }
752
+
753
+ .template-info-desc {
754
+ margin: 0;
755
+ font-size: 13px;
756
+ opacity: 0.9;
757
+ line-height: 1.5;
758
+ }
759
+
760
+ .template-section {
761
+ margin-bottom: 24px;
762
+ }
763
+
764
+ .template-section-title {
765
+ font-size: 12px;
766
+ font-weight: 600;
767
+ text-transform: uppercase;
768
+ letter-spacing: 0.5px;
769
+ color: #666;
770
+ margin: 0 0 12px 0;
771
+ padding-bottom: 8px;
772
+ border-bottom: 1px solid #eee;
773
+ }
774
+
775
+ .template-pages-list {
776
+ display: flex;
777
+ flex-direction: column;
778
+ gap: 8px;
779
+ }
780
+
781
+ .template-page-item {
782
+ padding: 12px 16px;
783
+ background: #f8f9fa;
784
+ border: 1px solid #e9ecef;
785
+ border-radius: 8px;
786
+ cursor: pointer;
787
+ transition: all 0.2s;
788
+ }
789
+
790
+ .template-page-item:hover {
791
+ background: #e9ecef;
792
+ border-color: #667eea;
793
+ }
794
+
795
+ .template-page-header {
796
+ display: flex;
797
+ justify-content: space-between;
798
+ align-items: center;
799
+ margin-bottom: 4px;
800
+ }
801
+
802
+ .template-page-name {
803
+ font-weight: 500;
804
+ font-size: 14px;
805
+ color: #333;
806
+ }
807
+
808
+ .template-page-blocks {
809
+ font-size: 11px;
810
+ color: #666;
811
+ background: #e9ecef;
812
+ padding: 2px 8px;
813
+ border-radius: 10px;
814
+ }
815
+
816
+ .template-page-slug {
817
+ font-size: 12px;
818
+ color: #999;
819
+ font-family: monospace;
820
+ }
821
+
822
+ .template-layout-slot {
823
+ display: flex;
824
+ justify-content: space-between;
825
+ align-items: center;
826
+ padding: 10px 14px;
827
+ background: #f8f9fa;
828
+ border-radius: 6px;
829
+ margin-bottom: 8px;
830
+ }
831
+
832
+ .slot-type {
833
+ font-size: 12px;
834
+ font-weight: 500;
835
+ text-transform: capitalize;
836
+ color: #667eea;
837
+ }
838
+
839
+ .slot-block {
840
+ font-size: 12px;
841
+ color: #666;
842
+ font-family: monospace;
843
+ }
844
+
845
+ .template-hint {
846
+ padding: 12px;
847
+ background: #fff3cd;
848
+ border-radius: 6px;
849
+ margin-top: 20px;
850
+ }
851
+
852
+ .template-hint p {
853
+ margin: 0;
854
+ font-size: 12px;
855
+ color: #856404;
856
+ }