Jensin commited on
Commit
a6e07d5
·
verified ·
1 Parent(s): d1e2a34

Upload folder using huggingface_hub

Browse files
Files changed (1) hide show
  1. index.html +413 -272
index.html CHANGED
@@ -1,5 +1,29 @@
1
  <!DOCTYPE html>
2
  <html lang="en">
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
3
 
4
  <head>
5
  <meta charset="UTF-8">
@@ -53,17 +77,17 @@
53
  --rose-500: #f43f5e;
54
  --indigo-500: #6366f1;
55
  --violet-500: #8b5cf6;
56
- }
57
 
58
  * {
59
  margin: 0;
60
  padding: 0;
61
  box-sizing: border-box;
62
- }
63
 
64
  html {
65
  scroll-behavior: smooth;
66
- }
67
 
68
  body {
69
  font-family: 'Inter', -apple-system, BlinkMacSystemFont, sans-serif;
@@ -72,37 +96,42 @@
72
  min-height: 100vh;
73
  -webkit-font-smoothing: antialiased;
74
  -moz-osx-font-smoothing: grayscale;
75
- }
76
 
77
- ::-webkit-scrollbar {
78
  width: 8px;
79
  height: 8px;
80
- }
81
 
82
- ::-webkit-scrollbar-track {
83
  background: var(--dark-900);
84
- }
85
 
86
- ::-webkit-scrollbar-thumb {
87
  background: var(--dark-600);
88
  border-radius: 9999px;
89
- }
90
 
91
- ::-webkit-scrollbar-thumb:hover {
92
  background: var(--dark-500);
93
- }
94
-
95
- /* Header */
96
  .header {
97
  position: fixed;
98
  top: 0;
99
  left: 0;
100
  right: 0;
101
  z-index: 50;
102
- background: rgba(15, 23, 42, 0.8);
 
 
 
103
  backdrop-filter: blur(20px);
104
- border-bottom: 1px solid rgba(51, 65, 85, 0.5);
105
- }
 
 
 
106
 
107
  .header-content {
108
  max-width: 1280px;
@@ -111,19 +140,19 @@
111
  display: flex;
112
  align-items: center;
113
  justify-content: space-between;
114
- }
115
 
116
  .logo-section {
117
  display: flex;
118
  align-items: center;
119
  gap: 0.75rem;
120
- }
121
 
122
  .logo-icon {
123
  position: relative;
124
  width: 40px;
125
  height: 40px;
126
- }
127
 
128
  .logo-icon-bg {
129
  width: 100%;
@@ -133,12 +162,12 @@
133
  display: flex;
134
  align-items: center;
135
  justify-content: center;
136
- }
137
 
138
  .logo-icon-bg i {
139
  color: white;
140
  font-size: 1.25rem;
141
- }
142
 
143
  .logo-badge {
144
  position: absolute;
@@ -151,12 +180,12 @@
151
  display: flex;
152
  align-items: center;
153
  justify-content: center;
154
- }
155
 
156
  .logo-badge i {
157
  font-size: 0.5rem;
158
  color: white;
159
- }
160
 
161
  .logo-text h1 {
162
  font-size: 1.25rem;
@@ -165,103 +194,118 @@
165
  -webkit-background-clip: text;
166
  -webkit-text-fill-color: transparent;
167
  background-clip: text;
168
- }
169
 
170
  .logo-text p {
171
  font-size: 0.75rem;
172
  color: var(--dark-400);
173
- }
174
 
175
  .header-link {
176
  font-size: 0.875rem;
177
  color: var(--dark-400);
178
  text-decoration: none;
179
  transition: color 0.3s;
180
- }
181
 
182
  .header-link:hover {
183
  color: var(--primary-400);
184
- }
185
-
186
- /* Main Content */
187
  .main {
188
  padding-top: 80px;
189
  min-height: 100vh;
190
- }
191
 
192
  .container {
193
  max-width: 1280px;
194
  margin: 0 auto;
195
  padding: 2rem 1.5rem;
196
- }
197
-
198
- /* Glass Panel */
199
  .glass-panel {
200
- background: rgba(15, 23, 42, 0.8);
 
 
 
201
  backdrop-filter: blur(20px);
202
- border: 1px solid rgba(51, 65, 85, 0.5);
 
 
 
203
  border-radius: 1rem;
204
- }
205
 
206
  .gradient-border {
207
  position: relative;
208
- }
209
 
210
- .gradient-border::before {
211
  content: '';
212
  position: absolute;
213
  inset: 0;
214
  border-radius: 1rem;
215
  padding: 1px;
216
- background: linear-gradient(135deg, rgba(14, 165, 233, 0.5), rgba(139, 92, 246, 0.5));
 
 
 
 
 
 
217
  -webkit-mask: linear-gradient(#fff 0 0) content-box, linear-gradient(#fff 0 0);
218
  mask: linear-gradient(#fff 0 0) content-box, linear-gradient(#fff 0 0);
219
  -webkit-mask-composite: xor;
220
  mask-composite: exclude;
221
  pointer-events: none;
222
- }
223
-
224
- /* Project Wizard */
225
  .wizard {
226
  padding: 2rem;
227
- }
228
 
229
  .wizard-header {
230
  display: flex;
231
  align-items: center;
232
  gap: 0.75rem;
233
  margin-bottom: 1.5rem;
234
- }
235
 
236
  .wizard-icon {
237
  width: 48px;
238
  height: 48px;
239
- background: linear-gradient(135deg, rgba(14, 165, 233, 0.2), rgba(139, 92, 246, 0.2));
 
 
 
 
 
 
240
  border-radius: 12px;
241
  display: flex;
242
  align-items: center;
243
  justify-content: center;
244
- }
245
 
246
  .wizard-icon i {
247
  font-size: 1.5rem;
248
  color: var(--primary-400);
249
- }
250
 
251
  .wizard-title {
252
  font-size: 1.5rem;
253
  font-weight: 700;
254
  color: white;
255
- }
256
 
257
  .wizard-subtitle {
258
  color: var(--dark-400);
259
  font-size: 0.875rem;
260
- }
261
 
262
  .form-group {
263
  margin-bottom: 1.5rem;
264
- }
265
 
266
  .form-label {
267
  display: block;
@@ -269,98 +313,109 @@
269
  font-weight: 500;
270
  color: var(--dark-300);
271
  margin-bottom: 0.5rem;
272
- }
273
 
274
  .input-field {
275
  width: 100%;
276
  padding: 0.75rem 1rem;
277
- background: rgba(30, 41, 59, 0.5);
 
 
 
278
  border: 1px solid var(--dark-600);
279
  border-radius: 12px;
280
  color: var(--dark-100);
281
  font-family: inherit;
282
  font-size: 1rem;
283
  transition: all 0.3s;
284
- }
285
 
286
- .input-field::placeholder {
287
  color: var(--dark-400);
288
- }
289
 
290
  .input-field:focus {
291
  outline: none;
292
  border-color: var(--primary-500);
293
- box-shadow: 0 0 0 3px rgba(14, 165, 233, 0.2);
294
- }
 
 
 
295
 
296
  textarea.input-field {
297
  resize: none;
298
  min-height: 150px;
299
- }
300
-
301
- /* Stack Selection */
302
  .stack-grid {
303
  display: grid;
304
- grid-template-columns: repeat(auto-fit, minmax(250px, 1fr));
 
305
  gap: 1rem;
306
- }
307
 
308
  .stack-option {
309
  padding: 1rem;
310
  border-radius: 12px;
311
  border: 1px solid var(--dark-600);
312
- background: rgba(30, 41, 59, 0.5);
 
 
 
313
  cursor: pointer;
314
  transition: all 0.3s;
315
  text-align: left;
316
- }
317
 
318
  .stack-option:hover {
319
  border-color: var(--dark-500);
320
- }
321
 
322
  .stack-option.active {
323
  border-color: var(--primary-500);
324
- background: rgba(14, 165, 233, 0.1);
325
- }
 
 
 
326
 
327
  .stack-option-header {
328
  display: flex;
329
  align-items: center;
330
  gap: 0.75rem;
331
  margin-bottom: 0.5rem;
332
- }
333
 
334
  .stack-option-header i {
335
  font-size: 1.25rem;
336
- }
337
 
338
  .stack-option-header span {
339
  font-weight: 600;
340
  color: white;
341
- }
342
 
343
  .stack-option p {
344
  font-size: 0.875rem;
345
  color: var(--dark-400);
346
- }
347
-
348
- /* Examples */
349
  .examples-section {
350
  margin-bottom: 1.5rem;
351
- }
352
 
353
  .examples-label {
354
  font-size: 0.875rem;
355
  color: var(--dark-400);
356
  margin-bottom: 0.75rem;
357
- }
358
 
359
  .examples-list {
360
  display: flex;
361
  flex-wrap: wrap;
362
  gap: 0.5rem;
363
- }
364
 
365
  .example-btn {
366
  padding: 0.375rem 0.75rem;
@@ -371,14 +426,16 @@
371
  border-radius: 8px;
372
  cursor: pointer;
373
  transition: all 0.3s;
374
- }
375
 
376
  .example-btn:hover {
377
- border-color: rgba(14, 165, 233, 0.5);
 
 
 
378
  color: var(--primary-400);
379
- }
380
-
381
- /* Buttons */
382
  .btn-primary {
383
  width: 100%;
384
  padding: 0.875rem 1.5rem;
@@ -394,17 +451,20 @@
394
  justify-content: center;
395
  gap: 0.5rem;
396
  transition: all 0.3s;
397
- box-shadow: 0 10px 25px rgba(14, 165, 233, 0.25);
398
- }
 
 
 
399
 
400
  .btn-primary:hover:not(:disabled) {
401
  background: linear-gradient(to right, var(--primary-600), var(--primary-700));
402
- }
403
 
404
  .btn-primary:disabled {
405
  opacity: 0.5;
406
  cursor: not-allowed;
407
- }
408
 
409
  .btn-secondary {
410
  padding: 0.75rem 1.5rem;
@@ -418,36 +478,36 @@
418
  align-items: center;
419
  gap: 0.5rem;
420
  transition: all 0.3s;
421
- }
422
 
423
  .btn-secondary:hover {
424
  background: var(--dark-700);
425
  border-color: var(--dark-500);
426
- }
427
-
428
- /* Feature Cards */
429
  .features-section {
430
  margin-top: 3rem;
431
- }
432
 
433
  .features-grid {
434
  display: grid;
435
- grid-template-columns: repeat(auto-fit, minmax(300px, 1fr));
 
436
  gap: 1.5rem;
437
- }
438
 
439
  .feature-card {
440
  padding: 1.5rem;
441
  transition: all 0.3s;
442
- }
443
 
444
  .feature-card:hover {
445
  border-color: var(--dark-500);
446
- }
447
 
448
  .feature-card:hover .feature-icon {
449
  transform: scale(1.1);
450
- }
451
 
452
  .feature-icon {
453
  width: 48px;
@@ -456,7 +516,7 @@
456
  padding: 2px;
457
  margin-bottom: 1rem;
458
  transition: transform 0.3s;
459
- }
460
 
461
  .feature-icon-inner {
462
  width: 100%;
@@ -466,55 +526,57 @@
466
  display: flex;
467
  align-items: center;
468
  justify-content: center;
469
- }
470
 
471
  .feature-icon-inner i {
472
  font-size: 1.25rem;
473
  color: white;
474
- }
475
 
476
  .feature-card h3 {
477
  font-size: 1.125rem;
478
  font-weight: 600;
479
  color: white;
480
  margin-bottom: 0.5rem;
481
- }
482
 
483
  .feature-card p {
484
  font-size: 0.875rem;
485
  color: var(--dark-400);
486
  line-height: 1.6;
487
- }
488
-
489
- /* Loading State */
490
  .loading-container {
491
  padding: 2rem;
492
  display: none;
493
- }
494
 
495
  .loading-container.active {
496
  display: block;
497
- }
498
 
499
  .loading-header {
500
  text-align: center;
501
  margin-bottom: 2rem;
502
- }
503
 
504
  .loading-icon {
505
  width: 64px;
506
  height: 64px;
507
  margin: 0 auto 1rem;
508
  position: relative;
509
- }
510
 
511
  .loading-icon-bg {
512
  position: absolute;
513
  inset: 0;
514
  background: linear-gradient(to right, var(--primary-500), var(--purple-500));
515
  border-radius: 50%;
516
- animation: pulse-slow 3s cubic-bezier(0.4, 0, 0.6, 1) infinite;
517
- }
 
 
 
518
 
519
  .loading-icon-inner {
520
  position: absolute;
@@ -524,30 +586,30 @@
524
  display: flex;
525
  align-items: center;
526
  justify-content: center;
527
- }
528
 
529
  .loading-icon-inner i {
530
  color: var(--primary-400);
531
  font-size: 1.5rem;
532
  animation: float 6s ease-in-out infinite;
533
- }
534
 
535
  .loading-header h3 {
536
  font-size: 1.25rem;
537
  font-weight: 700;
538
  color: white;
539
  margin-bottom: 0.5rem;
540
- }
541
 
542
  .loading-header p {
543
  color: var(--dark-400);
544
- }
545
 
546
  .loading-steps {
547
  display: flex;
548
  flex-direction: column;
549
  gap: 1rem;
550
- }
551
 
552
  .loading-step {
553
  display: flex;
@@ -555,20 +617,35 @@
555
  gap: 1rem;
556
  padding: 1rem;
557
  border-radius: 12px;
558
- background: rgba(30, 41, 59, 0.5);
 
 
 
559
  border: 1px solid var(--dark-700);
560
  transition: all 0.5s;
561
- }
562
 
563
  .loading-step.current {
564
- background: rgba(14, 165, 233, 0.1);
565
- border-color: rgba(14, 165, 233, 0.3);
566
- }
 
 
 
 
 
 
567
 
568
  .loading-step.completed {
569
- background: rgba(34, 197, 94, 0.1);
570
- border-color: rgba(34, 197, 94, 0.3);
571
- }
 
 
 
 
 
 
572
 
573
  .loading-step-icon {
574
  width: 40px;
@@ -578,42 +655,48 @@
578
  align-items: center;
579
  justify-content: center;
580
  background: var(--dark-700);
581
- }
582
 
583
  .loading-step.current .loading-step-icon {
584
- background: rgba(14, 165, 233, 0.2);
585
- }
 
 
 
586
 
587
  .loading-step.completed .loading-step-icon {
588
- background: rgba(34, 197, 94, 0.2);
589
- }
 
 
 
590
 
591
  .loading-step-icon i {
592
  font-size: 1.25rem;
593
  color: var(--dark-500);
594
- }
595
 
596
  .loading-step.current .loading-step-icon i {
597
  color: var(--primary-400);
598
  animation: pulse 2s infinite;
599
- }
600
 
601
  .loading-step.completed .loading-step-icon i {
602
  color: var(--green-400);
603
- }
604
 
605
  .loading-step span {
606
  font-weight: 500;
607
  color: var(--dark-500);
608
- }
609
 
610
  .loading-step.current span {
611
  color: var(--primary-400);
612
- }
613
 
614
  .loading-step.completed span {
615
  color: var(--green-400);
616
- }
617
 
618
  .loading-spinner {
619
  margin-left: auto;
@@ -623,17 +706,16 @@
623
  border-top-color: transparent;
624
  border-radius: 50%;
625
  animation: spin 1s linear infinite;
626
- }
627
-
628
- /* Output Section */
629
  .output-section {
630
  display: none;
631
  margin-top: 2rem;
632
- }
633
 
634
  .output-section.active {
635
  display: block;
636
- }
637
 
638
  .output-header {
639
  display: flex;
@@ -642,27 +724,26 @@
642
  margin-bottom: 1.5rem;
643
  flex-wrap: wrap;
644
  gap: 1rem;
645
- }
646
 
647
  .output-header h2 {
648
  font-size: 1.25rem;
649
  font-weight: 700;
650
  color: white;
651
- }
652
 
653
  .output-actions {
654
  display: flex;
655
  gap: 0.75rem;
656
- }
657
-
658
- /* Tabs */
659
  .tabs {
660
  display: flex;
661
  gap: 0.5rem;
662
  margin-bottom: 1.5rem;
663
  overflow-x: auto;
664
  padding-bottom: 0.5rem;
665
- }
666
 
667
  .tab-btn {
668
  display: flex;
@@ -678,29 +759,33 @@
678
  cursor: pointer;
679
  white-space: nowrap;
680
  transition: all 0.3s;
681
- }
682
 
683
  .tab-btn:hover {
684
  border-color: var(--dark-500);
685
- }
686
 
687
  .tab-btn.active {
688
- background: rgba(14, 165, 233, 0.2);
 
 
 
689
  color: var(--primary-400);
690
- border-color: rgba(14, 165, 233, 0.5);
691
- }
692
-
693
- /* Tab Content */
 
 
694
  .tab-content {
695
  display: none;
696
  min-height: 400px;
697
- }
698
 
699
  .tab-content.active {
700
  display: block;
701
- }
702
-
703
- /* Schema Visualizer */
704
  .schema-container {
705
  background: var(--dark-900);
706
  border: 1px solid var(--dark-700);
@@ -708,21 +793,25 @@
708
  padding: 1.5rem;
709
  min-height: 400px;
710
  overflow: auto;
711
- }
712
 
713
  .schema-grid {
714
  display: grid;
715
- grid-template-columns: repeat(auto-fit, minmax(220px, 1fr));
 
716
  gap: 1.5rem;
717
- }
718
 
719
  .entity-card {
720
  background: var(--dark-800);
721
  border: 1px solid var(--dark-600);
722
  border-radius: 12px;
723
  overflow: hidden;
724
- box-shadow: 0 10px 25px rgba(0, 0, 0, 0.3);
725
- }
 
 
 
726
 
727
  .entity-header {
728
  background: linear-gradient(to right, var(--primary-600), var(--purple-600));
@@ -730,22 +819,22 @@
730
  display: flex;
731
  align-items: center;
732
  gap: 0.5rem;
733
- }
734
 
735
  .entity-header i {
736
  color: white;
737
  font-size: 0.875rem;
738
- }
739
 
740
  .entity-header span {
741
  font-weight: 700;
742
  color: white;
743
  font-size: 0.875rem;
744
- }
745
 
746
  .entity-fields {
747
  padding: 0.75rem;
748
- }
749
 
750
  .entity-field {
751
  display: flex;
@@ -753,39 +842,38 @@
753
  gap: 0.5rem;
754
  padding: 0.375rem 0;
755
  font-size: 0.75rem;
756
- }
757
 
758
  .entity-field i {
759
  font-size: 0.625rem;
760
- }
761
 
762
  .entity-field .field-name {
763
  color: var(--dark-200);
764
- }
765
 
766
  .entity-field .field-type {
767
  color: var(--dark-500);
768
  margin-left: auto;
769
- }
770
 
771
  .entity-field.primary .field-name {
772
  color: var(--yellow-400);
773
- }
774
 
775
  .entity-field.primary i {
776
  color: var(--yellow-400);
777
- }
778
 
779
  .entity-field.relation i {
780
  color: var(--primary-400);
781
- }
782
-
783
- /* Code Viewer */
784
  .code-viewer {
785
  border: 1px solid var(--dark-700);
786
  border-radius: 12px;
787
  overflow: hidden;
788
- }
789
 
790
  .code-header {
791
  background: var(--dark-800);
@@ -794,7 +882,7 @@
794
  align-items: center;
795
  justify-content: between;
796
  border-bottom: 1px solid var(--dark-700);
797
- }
798
 
799
  .code-filename {
800
  display: flex;
@@ -803,11 +891,11 @@
803
  font-size: 0.875rem;
804
  color: var(--dark-300);
805
  font-family: 'JetBrains Mono', monospace;
806
- }
807
 
808
  .code-filename i {
809
  color: var(--dark-400);
810
- }
811
 
812
  .copy-btn {
813
  margin-left: auto;
@@ -817,26 +905,26 @@
817
  border-radius: 8px;
818
  cursor: pointer;
819
  transition: background 0.3s;
820
- }
821
 
822
  .copy-btn:hover {
823
  background: var(--dark-700);
824
- }
825
 
826
  .copy-btn i {
827
  color: var(--dark-400);
828
- }
829
 
830
  .copy-btn.copied i {
831
  color: var(--green-400);
832
- }
833
 
834
  .code-block {
835
  background: var(--dark-900);
836
  padding: 1rem;
837
  max-height: 400px;
838
  overflow: auto;
839
- }
840
 
841
  .code-block pre {
842
  margin: 0;
@@ -846,81 +934,97 @@
846
  color: var(--dark-100);
847
  white-space: pre-wrap;
848
  word-break: break-word;
849
- }
850
-
851
- /* API Routes */
852
  .api-routes {
853
  display: flex;
854
  flex-direction: column;
855
  gap: 1rem;
856
- }
857
 
858
  .api-route {
859
- background: rgba(30, 41, 59, 0.5);
 
 
 
860
  border: 1px solid var(--dark-700);
861
  border-radius: 12px;
862
  padding: 1rem;
863
- }
864
 
865
  .api-route-header {
866
  display: flex;
867
  align-items: center;
868
  gap: 0.75rem;
869
  margin-bottom: 0.5rem;
870
- }
871
 
872
  .api-method {
873
  padding: 0.25rem 0.5rem;
874
  font-size: 0.75rem;
875
  font-weight: 700;
876
  border-radius: 4px;
877
- }
878
 
879
  .api-method.get {
880
- background: rgba(34, 197, 94, 0.2);
 
 
 
881
  color: var(--green-400);
882
- }
883
 
884
  .api-method.post {
885
- background: rgba(59, 130, 246, 0.2);
 
 
 
886
  color: var(--blue-400);
887
- }
888
 
889
  .api-method.put,
890
  .api-method.patch {
891
- background: rgba(234, 179, 8, 0.2);
 
 
 
892
  color: var(--yellow-400);
893
- }
894
 
895
  .api-method.delete {
896
- background: rgba(239, 68, 68, 0.2);
 
 
 
897
  color: var(--red-400);
898
- }
899
 
900
  .api-path {
901
  font-family: 'JetBrains Mono', monospace;
902
  font-size: 0.875rem;
903
  color: var(--dark-200);
904
- }
905
 
906
  .api-description {
907
  font-size: 0.875rem;
908
  color: var(--dark-400);
909
- }
910
-
911
- /* File List */
912
  .file-list {
913
  display: flex;
914
  flex-direction: column;
915
  gap: 0.75rem;
916
- }
917
 
918
  .file-item {
919
- background: rgba(30, 41, 59, 0.5);
 
 
 
920
  border: 1px solid var(--dark-700);
921
  border-radius: 12px;
922
  overflow: hidden;
923
- }
924
 
925
  .file-header {
926
  width: 100%;
@@ -932,11 +1036,14 @@
932
  border: none;
933
  cursor: pointer;
934
  transition: background 0.3s;
935
- }
936
 
937
  .file-header:hover {
938
- background: rgba(51, 65, 85, 0.5);
939
- }
 
 
 
940
 
941
  .file-name {
942
  display: flex;
@@ -945,126 +1052,117 @@
945
  font-family: 'JetBrains Mono', monospace;
946
  font-size: 0.875rem;
947
  color: var(--dark-200);
948
- }
949
 
950
  .file-name i {
951
  color: var(--primary-400);
952
- }
953
 
954
  .file-header .chevron {
955
  color: var(--dark-400);
956
  transition: transform 0.3s;
957
- }
958
 
959
  .file-item.expanded .file-header .chevron {
960
  transform: rotate(180deg);
961
- }
962
 
963
  .file-content {
964
  display: none;
965
  border-top: 1px solid var(--dark-700);
966
- }
967
 
968
  .file-item.expanded .file-content {
969
  display: block;
970
- }
971
-
972
- /* Animations */
973
  @keyframes pulse-slow {
974
-
975
- 0%,
976
- 100% {
977
  opacity: 1;
978
- }
979
-
980
  50% {
981
  opacity: 0.5;
982
- }
983
- }
984
 
985
  @keyframes float {
986
-
987
- 0%,
988
- 100% {
989
  transform: translateY(0);
990
- }
991
-
992
  50% {
993
  transform: translateY(-10px);
994
- }
995
- }
996
 
997
  @keyframes spin {
998
  to {
999
  transform: rotate(360deg);
1000
- }
1001
- }
1002
 
1003
  @keyframes pulse {
1004
-
1005
- 0%,
1006
- 100% {
1007
  opacity: 1;
1008
- }
1009
-
1010
  50% {
1011
  opacity: 0.5;
1012
- }
1013
- }
1014
-
1015
- /* Responsive */
1016
  @media (max-width: 768px) {
1017
  .header-content {
1018
  flex-direction: column;
1019
  gap: 1rem;
1020
- }
1021
 
1022
  .wizard {
1023
  padding: 1.5rem;
1024
- }
1025
 
1026
  .features-grid {
1027
  grid-template-columns: 1fr;
1028
- }
1029
 
1030
  .output-header {
1031
  flex-direction: column;
1032
  align-items: flex-start;
1033
- }
1034
 
1035
  .tabs {
1036
  flex-wrap: nowrap;
1037
- }
1038
- }
1039
-
1040
- /* Syntax Highlighting */
1041
  .keyword {
1042
  color: var(--primary-400);
1043
- }
1044
 
1045
  .string {
1046
  color: var(--green-400);
1047
- }
1048
 
1049
  .comment {
1050
  color: var(--dark-500);
1051
- }
1052
 
1053
  .type {
1054
  color: var(--purple-400);
1055
- }
1056
 
1057
  .function {
1058
  color: var(--yellow-400);
1059
- }
1060
 
1061
  .property {
1062
  color: var(--pink-400);
1063
- }
1064
 
1065
  .number {
1066
  color: var(--orange-400);
1067
- }
1068
  </style>
1069
  </head>
1070
 
@@ -1123,19 +1221,19 @@
1123
  <label class="form-label">Target Stack</label>
1124
  <div class="stack-grid">
1125
  <button type="button" class="stack-option active" data-stack="nestjs-prisma">
1126
- <div class="stack-option-header">
1127
- <i class="fas fa-server" style="color: var(--primary-400);"></i>
1128
- <span>NestJS + Prisma</span>
1129
- </div>
1130
- <p>TypeScript, NestJS framework, Prisma ORM, PostgreSQL</p>
1131
- </button>
1132
  <button type="button" class="stack-option" data-stack="express-drizzle">
1133
- <div class="stack-option-header">
1134
- <i class="fas fa-code" style="color: var(--green-400);"></i>
1135
- <span>Express + Drizzle</span>
1136
- </div>
1137
- <p>TypeScript, Express.js, Drizzle ORM, PostgreSQL</p>
1138
- </button>
1139
  </div>
1140
  </div>
1141
 
@@ -1149,9 +1247,9 @@
1149
  </div>
1150
 
1151
  <button type="submit" id="generate-btn" class="btn-primary" disabled>
1152
- <span>Generate Backend</span>
1153
- <i class="fas fa-arrow-right"></i>
1154
- </button>
1155
  </form>
1156
  </div>
1157
 
@@ -1200,4 +1298,47 @@
1200
  <div class="output-header">
1201
  <h2>Generated Backend</h2>
1202
  <div class="output-actions">
1203
- <button id="
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
  <!DOCTYPE html>
2
  <html lang="en">
3
+ <head>
4
+ <meta charset="UTF-8">
5
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
6
+ <title>ComfyUI Workflow</title>
7
+ <style>
8
+ body {
9
+ font-family: -apple-system, BlinkMacSystemFont, 'SF Pro Text', sans-serif;
10
+ background-color: #000000;
11
+ color: #f5f5f7;
12
+ padding: 40px;
13
+ }
14
+ pre {
15
+ background: #1d1d1f;
16
+ padding: 24px;
17
+ border-radius: 12px;
18
+ overflow-x: auto;
19
+ }
20
+ </style>
21
+ </head>
22
+ <body>
23
+ <h1>ComfyUI Workflow</h1>
24
+ <p>Error: Invalid JSON format</p>
25
+ <pre><!DOCTYPE html>
26
+ <html lang="en">
27
 
28
  <head>
29
  <meta charset="UTF-8">
 
77
  --rose-500: #f43f5e;
78
  --indigo-500: #6366f1;
79
  --violet-500: #8b5cf6;
80
+ }
81
 
82
  * {
83
  margin: 0;
84
  padding: 0;
85
  box-sizing: border-box;
86
+ }
87
 
88
  html {
89
  scroll-behavior: smooth;
90
+ }
91
 
92
  body {
93
  font-family: 'Inter', -apple-system, BlinkMacSystemFont, sans-serif;
 
96
  min-height: 100vh;
97
  -webkit-font-smoothing: antialiased;
98
  -moz-osx-font-smoothing: grayscale;
99
+ }
100
 
101
+ : :-webkit-scrollbar {
102
  width: 8px;
103
  height: 8px;
104
+ }
105
 
106
+ : :-webkit-scrollbar-track {
107
  background: var(--dark-900);
108
+ }
109
 
110
+ : :-webkit-scrollbar-thumb {
111
  background: var(--dark-600);
112
  border-radius: 9999px;
113
+ }
114
 
115
+ : :-webkit-scrollbar-thumb:hover {
116
  background: var(--dark-500);
117
+ }
118
+ /* Header */
 
119
  .header {
120
  position: fixed;
121
  top: 0;
122
  left: 0;
123
  right: 0;
124
  z-index: 50;
125
+ background: rgba(15,
126
+ 23,
127
+ 42,
128
+ 0.8);
129
  backdrop-filter: blur(20px);
130
+ border-bottom: 1px solid rgba(51,
131
+ 65,
132
+ 85,
133
+ 0.5);
134
+ }
135
 
136
  .header-content {
137
  max-width: 1280px;
 
140
  display: flex;
141
  align-items: center;
142
  justify-content: space-between;
143
+ }
144
 
145
  .logo-section {
146
  display: flex;
147
  align-items: center;
148
  gap: 0.75rem;
149
+ }
150
 
151
  .logo-icon {
152
  position: relative;
153
  width: 40px;
154
  height: 40px;
155
+ }
156
 
157
  .logo-icon-bg {
158
  width: 100%;
 
162
  display: flex;
163
  align-items: center;
164
  justify-content: center;
165
+ }
166
 
167
  .logo-icon-bg i {
168
  color: white;
169
  font-size: 1.25rem;
170
+ }
171
 
172
  .logo-badge {
173
  position: absolute;
 
180
  display: flex;
181
  align-items: center;
182
  justify-content: center;
183
+ }
184
 
185
  .logo-badge i {
186
  font-size: 0.5rem;
187
  color: white;
188
+ }
189
 
190
  .logo-text h1 {
191
  font-size: 1.25rem;
 
194
  -webkit-background-clip: text;
195
  -webkit-text-fill-color: transparent;
196
  background-clip: text;
197
+ }
198
 
199
  .logo-text p {
200
  font-size: 0.75rem;
201
  color: var(--dark-400);
202
+ }
203
 
204
  .header-link {
205
  font-size: 0.875rem;
206
  color: var(--dark-400);
207
  text-decoration: none;
208
  transition: color 0.3s;
209
+ }
210
 
211
  .header-link:hover {
212
  color: var(--primary-400);
213
+ }
214
+ /* Main Content */
 
215
  .main {
216
  padding-top: 80px;
217
  min-height: 100vh;
218
+ }
219
 
220
  .container {
221
  max-width: 1280px;
222
  margin: 0 auto;
223
  padding: 2rem 1.5rem;
224
+ }
225
+ /* Glass Panel */
 
226
  .glass-panel {
227
+ background: rgba(15,
228
+ 23,
229
+ 42,
230
+ 0.8);
231
  backdrop-filter: blur(20px);
232
+ border: 1px solid rgba(51,
233
+ 65,
234
+ 85,
235
+ 0.5);
236
  border-radius: 1rem;
237
+ }
238
 
239
  .gradient-border {
240
  position: relative;
241
+ }
242
 
243
+ .gradient-border: :before {
244
  content: '';
245
  position: absolute;
246
  inset: 0;
247
  border-radius: 1rem;
248
  padding: 1px;
249
+ background: linear-gradient(135deg, rgba(14,
250
+ 165,
251
+ 233,
252
+ 0.5), rgba(139,
253
+ 92,
254
+ 246,
255
+ 0.5));
256
  -webkit-mask: linear-gradient(#fff 0 0) content-box, linear-gradient(#fff 0 0);
257
  mask: linear-gradient(#fff 0 0) content-box, linear-gradient(#fff 0 0);
258
  -webkit-mask-composite: xor;
259
  mask-composite: exclude;
260
  pointer-events: none;
261
+ }
262
+ /* Project Wizard */
 
263
  .wizard {
264
  padding: 2rem;
265
+ }
266
 
267
  .wizard-header {
268
  display: flex;
269
  align-items: center;
270
  gap: 0.75rem;
271
  margin-bottom: 1.5rem;
272
+ }
273
 
274
  .wizard-icon {
275
  width: 48px;
276
  height: 48px;
277
+ background: linear-gradient(135deg, rgba(14,
278
+ 165,
279
+ 233,
280
+ 0.2), rgba(139,
281
+ 92,
282
+ 246,
283
+ 0.2));
284
  border-radius: 12px;
285
  display: flex;
286
  align-items: center;
287
  justify-content: center;
288
+ }
289
 
290
  .wizard-icon i {
291
  font-size: 1.5rem;
292
  color: var(--primary-400);
293
+ }
294
 
295
  .wizard-title {
296
  font-size: 1.5rem;
297
  font-weight: 700;
298
  color: white;
299
+ }
300
 
301
  .wizard-subtitle {
302
  color: var(--dark-400);
303
  font-size: 0.875rem;
304
+ }
305
 
306
  .form-group {
307
  margin-bottom: 1.5rem;
308
+ }
309
 
310
  .form-label {
311
  display: block;
 
313
  font-weight: 500;
314
  color: var(--dark-300);
315
  margin-bottom: 0.5rem;
316
+ }
317
 
318
  .input-field {
319
  width: 100%;
320
  padding: 0.75rem 1rem;
321
+ background: rgba(30,
322
+ 41,
323
+ 59,
324
+ 0.5);
325
  border: 1px solid var(--dark-600);
326
  border-radius: 12px;
327
  color: var(--dark-100);
328
  font-family: inherit;
329
  font-size: 1rem;
330
  transition: all 0.3s;
331
+ }
332
 
333
+ .input-field: :placeholder {
334
  color: var(--dark-400);
335
+ }
336
 
337
  .input-field:focus {
338
  outline: none;
339
  border-color: var(--primary-500);
340
+ box-shadow: 0 0 0 3px rgba(14,
341
+ 165,
342
+ 233,
343
+ 0.2);
344
+ }
345
 
346
  textarea.input-field {
347
  resize: none;
348
  min-height: 150px;
349
+ }
350
+ /* Stack Selection */
 
351
  .stack-grid {
352
  display: grid;
353
+ grid-template-columns: repeat(auto-fit, minmax(250px,
354
+ 1fr));
355
  gap: 1rem;
356
+ }
357
 
358
  .stack-option {
359
  padding: 1rem;
360
  border-radius: 12px;
361
  border: 1px solid var(--dark-600);
362
+ background: rgba(30,
363
+ 41,
364
+ 59,
365
+ 0.5);
366
  cursor: pointer;
367
  transition: all 0.3s;
368
  text-align: left;
369
+ }
370
 
371
  .stack-option:hover {
372
  border-color: var(--dark-500);
373
+ }
374
 
375
  .stack-option.active {
376
  border-color: var(--primary-500);
377
+ background: rgba(14,
378
+ 165,
379
+ 233,
380
+ 0.1);
381
+ }
382
 
383
  .stack-option-header {
384
  display: flex;
385
  align-items: center;
386
  gap: 0.75rem;
387
  margin-bottom: 0.5rem;
388
+ }
389
 
390
  .stack-option-header i {
391
  font-size: 1.25rem;
392
+ }
393
 
394
  .stack-option-header span {
395
  font-weight: 600;
396
  color: white;
397
+ }
398
 
399
  .stack-option p {
400
  font-size: 0.875rem;
401
  color: var(--dark-400);
402
+ }
403
+ /* Examples */
 
404
  .examples-section {
405
  margin-bottom: 1.5rem;
406
+ }
407
 
408
  .examples-label {
409
  font-size: 0.875rem;
410
  color: var(--dark-400);
411
  margin-bottom: 0.75rem;
412
+ }
413
 
414
  .examples-list {
415
  display: flex;
416
  flex-wrap: wrap;
417
  gap: 0.5rem;
418
+ }
419
 
420
  .example-btn {
421
  padding: 0.375rem 0.75rem;
 
426
  border-radius: 8px;
427
  cursor: pointer;
428
  transition: all 0.3s;
429
+ }
430
 
431
  .example-btn:hover {
432
+ border-color: rgba(14,
433
+ 165,
434
+ 233,
435
+ 0.5);
436
  color: var(--primary-400);
437
+ }
438
+ /* Buttons */
 
439
  .btn-primary {
440
  width: 100%;
441
  padding: 0.875rem 1.5rem;
 
451
  justify-content: center;
452
  gap: 0.5rem;
453
  transition: all 0.3s;
454
+ box-shadow: 0 10px 25px rgba(14,
455
+ 165,
456
+ 233,
457
+ 0.25);
458
+ }
459
 
460
  .btn-primary:hover:not(:disabled) {
461
  background: linear-gradient(to right, var(--primary-600), var(--primary-700));
462
+ }
463
 
464
  .btn-primary:disabled {
465
  opacity: 0.5;
466
  cursor: not-allowed;
467
+ }
468
 
469
  .btn-secondary {
470
  padding: 0.75rem 1.5rem;
 
478
  align-items: center;
479
  gap: 0.5rem;
480
  transition: all 0.3s;
481
+ }
482
 
483
  .btn-secondary:hover {
484
  background: var(--dark-700);
485
  border-color: var(--dark-500);
486
+ }
487
+ /* Feature Cards */
 
488
  .features-section {
489
  margin-top: 3rem;
490
+ }
491
 
492
  .features-grid {
493
  display: grid;
494
+ grid-template-columns: repeat(auto-fit, minmax(300px,
495
+ 1fr));
496
  gap: 1.5rem;
497
+ }
498
 
499
  .feature-card {
500
  padding: 1.5rem;
501
  transition: all 0.3s;
502
+ }
503
 
504
  .feature-card:hover {
505
  border-color: var(--dark-500);
506
+ }
507
 
508
  .feature-card:hover .feature-icon {
509
  transform: scale(1.1);
510
+ }
511
 
512
  .feature-icon {
513
  width: 48px;
 
516
  padding: 2px;
517
  margin-bottom: 1rem;
518
  transition: transform 0.3s;
519
+ }
520
 
521
  .feature-icon-inner {
522
  width: 100%;
 
526
  display: flex;
527
  align-items: center;
528
  justify-content: center;
529
+ }
530
 
531
  .feature-icon-inner i {
532
  font-size: 1.25rem;
533
  color: white;
534
+ }
535
 
536
  .feature-card h3 {
537
  font-size: 1.125rem;
538
  font-weight: 600;
539
  color: white;
540
  margin-bottom: 0.5rem;
541
+ }
542
 
543
  .feature-card p {
544
  font-size: 0.875rem;
545
  color: var(--dark-400);
546
  line-height: 1.6;
547
+ }
548
+ /* Loading State */
 
549
  .loading-container {
550
  padding: 2rem;
551
  display: none;
552
+ }
553
 
554
  .loading-container.active {
555
  display: block;
556
+ }
557
 
558
  .loading-header {
559
  text-align: center;
560
  margin-bottom: 2rem;
561
+ }
562
 
563
  .loading-icon {
564
  width: 64px;
565
  height: 64px;
566
  margin: 0 auto 1rem;
567
  position: relative;
568
+ }
569
 
570
  .loading-icon-bg {
571
  position: absolute;
572
  inset: 0;
573
  background: linear-gradient(to right, var(--primary-500), var(--purple-500));
574
  border-radius: 50%;
575
+ animation: pulse-slow 3s cubic-bezier(0.4,
576
+ 0,
577
+ 0.6,
578
+ 1) infinite;
579
+ }
580
 
581
  .loading-icon-inner {
582
  position: absolute;
 
586
  display: flex;
587
  align-items: center;
588
  justify-content: center;
589
+ }
590
 
591
  .loading-icon-inner i {
592
  color: var(--primary-400);
593
  font-size: 1.5rem;
594
  animation: float 6s ease-in-out infinite;
595
+ }
596
 
597
  .loading-header h3 {
598
  font-size: 1.25rem;
599
  font-weight: 700;
600
  color: white;
601
  margin-bottom: 0.5rem;
602
+ }
603
 
604
  .loading-header p {
605
  color: var(--dark-400);
606
+ }
607
 
608
  .loading-steps {
609
  display: flex;
610
  flex-direction: column;
611
  gap: 1rem;
612
+ }
613
 
614
  .loading-step {
615
  display: flex;
 
617
  gap: 1rem;
618
  padding: 1rem;
619
  border-radius: 12px;
620
+ background: rgba(30,
621
+ 41,
622
+ 59,
623
+ 0.5);
624
  border: 1px solid var(--dark-700);
625
  transition: all 0.5s;
626
+ }
627
 
628
  .loading-step.current {
629
+ background: rgba(14,
630
+ 165,
631
+ 233,
632
+ 0.1);
633
+ border-color: rgba(14,
634
+ 165,
635
+ 233,
636
+ 0.3);
637
+ }
638
 
639
  .loading-step.completed {
640
+ background: rgba(34,
641
+ 197,
642
+ 94,
643
+ 0.1);
644
+ border-color: rgba(34,
645
+ 197,
646
+ 94,
647
+ 0.3);
648
+ }
649
 
650
  .loading-step-icon {
651
  width: 40px;
 
655
  align-items: center;
656
  justify-content: center;
657
  background: var(--dark-700);
658
+ }
659
 
660
  .loading-step.current .loading-step-icon {
661
+ background: rgba(14,
662
+ 165,
663
+ 233,
664
+ 0.2);
665
+ }
666
 
667
  .loading-step.completed .loading-step-icon {
668
+ background: rgba(34,
669
+ 197,
670
+ 94,
671
+ 0.2);
672
+ }
673
 
674
  .loading-step-icon i {
675
  font-size: 1.25rem;
676
  color: var(--dark-500);
677
+ }
678
 
679
  .loading-step.current .loading-step-icon i {
680
  color: var(--primary-400);
681
  animation: pulse 2s infinite;
682
+ }
683
 
684
  .loading-step.completed .loading-step-icon i {
685
  color: var(--green-400);
686
+ }
687
 
688
  .loading-step span {
689
  font-weight: 500;
690
  color: var(--dark-500);
691
+ }
692
 
693
  .loading-step.current span {
694
  color: var(--primary-400);
695
+ }
696
 
697
  .loading-step.completed span {
698
  color: var(--green-400);
699
+ }
700
 
701
  .loading-spinner {
702
  margin-left: auto;
 
706
  border-top-color: transparent;
707
  border-radius: 50%;
708
  animation: spin 1s linear infinite;
709
+ }
710
+ /* Output Section */
 
711
  .output-section {
712
  display: none;
713
  margin-top: 2rem;
714
+ }
715
 
716
  .output-section.active {
717
  display: block;
718
+ }
719
 
720
  .output-header {
721
  display: flex;
 
724
  margin-bottom: 1.5rem;
725
  flex-wrap: wrap;
726
  gap: 1rem;
727
+ }
728
 
729
  .output-header h2 {
730
  font-size: 1.25rem;
731
  font-weight: 700;
732
  color: white;
733
+ }
734
 
735
  .output-actions {
736
  display: flex;
737
  gap: 0.75rem;
738
+ }
739
+ /* Tabs */
 
740
  .tabs {
741
  display: flex;
742
  gap: 0.5rem;
743
  margin-bottom: 1.5rem;
744
  overflow-x: auto;
745
  padding-bottom: 0.5rem;
746
+ }
747
 
748
  .tab-btn {
749
  display: flex;
 
759
  cursor: pointer;
760
  white-space: nowrap;
761
  transition: all 0.3s;
762
+ }
763
 
764
  .tab-btn:hover {
765
  border-color: var(--dark-500);
766
+ }
767
 
768
  .tab-btn.active {
769
+ background: rgba(14,
770
+ 165,
771
+ 233,
772
+ 0.2);
773
  color: var(--primary-400);
774
+ border-color: rgba(14,
775
+ 165,
776
+ 233,
777
+ 0.5);
778
+ }
779
+ /* Tab Content */
780
  .tab-content {
781
  display: none;
782
  min-height: 400px;
783
+ }
784
 
785
  .tab-content.active {
786
  display: block;
787
+ }
788
+ /* Schema Visualizer */
 
789
  .schema-container {
790
  background: var(--dark-900);
791
  border: 1px solid var(--dark-700);
 
793
  padding: 1.5rem;
794
  min-height: 400px;
795
  overflow: auto;
796
+ }
797
 
798
  .schema-grid {
799
  display: grid;
800
+ grid-template-columns: repeat(auto-fit, minmax(220px,
801
+ 1fr));
802
  gap: 1.5rem;
803
+ }
804
 
805
  .entity-card {
806
  background: var(--dark-800);
807
  border: 1px solid var(--dark-600);
808
  border-radius: 12px;
809
  overflow: hidden;
810
+ box-shadow: 0 10px 25px rgba(0,
811
+ 0,
812
+ 0,
813
+ 0.3);
814
+ }
815
 
816
  .entity-header {
817
  background: linear-gradient(to right, var(--primary-600), var(--purple-600));
 
819
  display: flex;
820
  align-items: center;
821
  gap: 0.5rem;
822
+ }
823
 
824
  .entity-header i {
825
  color: white;
826
  font-size: 0.875rem;
827
+ }
828
 
829
  .entity-header span {
830
  font-weight: 700;
831
  color: white;
832
  font-size: 0.875rem;
833
+ }
834
 
835
  .entity-fields {
836
  padding: 0.75rem;
837
+ }
838
 
839
  .entity-field {
840
  display: flex;
 
842
  gap: 0.5rem;
843
  padding: 0.375rem 0;
844
  font-size: 0.75rem;
845
+ }
846
 
847
  .entity-field i {
848
  font-size: 0.625rem;
849
+ }
850
 
851
  .entity-field .field-name {
852
  color: var(--dark-200);
853
+ }
854
 
855
  .entity-field .field-type {
856
  color: var(--dark-500);
857
  margin-left: auto;
858
+ }
859
 
860
  .entity-field.primary .field-name {
861
  color: var(--yellow-400);
862
+ }
863
 
864
  .entity-field.primary i {
865
  color: var(--yellow-400);
866
+ }
867
 
868
  .entity-field.relation i {
869
  color: var(--primary-400);
870
+ }
871
+ /* Code Viewer */
 
872
  .code-viewer {
873
  border: 1px solid var(--dark-700);
874
  border-radius: 12px;
875
  overflow: hidden;
876
+ }
877
 
878
  .code-header {
879
  background: var(--dark-800);
 
882
  align-items: center;
883
  justify-content: between;
884
  border-bottom: 1px solid var(--dark-700);
885
+ }
886
 
887
  .code-filename {
888
  display: flex;
 
891
  font-size: 0.875rem;
892
  color: var(--dark-300);
893
  font-family: 'JetBrains Mono', monospace;
894
+ }
895
 
896
  .code-filename i {
897
  color: var(--dark-400);
898
+ }
899
 
900
  .copy-btn {
901
  margin-left: auto;
 
905
  border-radius: 8px;
906
  cursor: pointer;
907
  transition: background 0.3s;
908
+ }
909
 
910
  .copy-btn:hover {
911
  background: var(--dark-700);
912
+ }
913
 
914
  .copy-btn i {
915
  color: var(--dark-400);
916
+ }
917
 
918
  .copy-btn.copied i {
919
  color: var(--green-400);
920
+ }
921
 
922
  .code-block {
923
  background: var(--dark-900);
924
  padding: 1rem;
925
  max-height: 400px;
926
  overflow: auto;
927
+ }
928
 
929
  .code-block pre {
930
  margin: 0;
 
934
  color: var(--dark-100);
935
  white-space: pre-wrap;
936
  word-break: break-word;
937
+ }
938
+ /* API Routes */
 
939
  .api-routes {
940
  display: flex;
941
  flex-direction: column;
942
  gap: 1rem;
943
+ }
944
 
945
  .api-route {
946
+ background: rgba(30,
947
+ 41,
948
+ 59,
949
+ 0.5);
950
  border: 1px solid var(--dark-700);
951
  border-radius: 12px;
952
  padding: 1rem;
953
+ }
954
 
955
  .api-route-header {
956
  display: flex;
957
  align-items: center;
958
  gap: 0.75rem;
959
  margin-bottom: 0.5rem;
960
+ }
961
 
962
  .api-method {
963
  padding: 0.25rem 0.5rem;
964
  font-size: 0.75rem;
965
  font-weight: 700;
966
  border-radius: 4px;
967
+ }
968
 
969
  .api-method.get {
970
+ background: rgba(34,
971
+ 197,
972
+ 94,
973
+ 0.2);
974
  color: var(--green-400);
975
+ }
976
 
977
  .api-method.post {
978
+ background: rgba(59,
979
+ 130,
980
+ 246,
981
+ 0.2);
982
  color: var(--blue-400);
983
+ }
984
 
985
  .api-method.put,
986
  .api-method.patch {
987
+ background: rgba(234,
988
+ 179,
989
+ 8,
990
+ 0.2);
991
  color: var(--yellow-400);
992
+ }
993
 
994
  .api-method.delete {
995
+ background: rgba(239,
996
+ 68,
997
+ 68,
998
+ 0.2);
999
  color: var(--red-400);
1000
+ }
1001
 
1002
  .api-path {
1003
  font-family: 'JetBrains Mono', monospace;
1004
  font-size: 0.875rem;
1005
  color: var(--dark-200);
1006
+ }
1007
 
1008
  .api-description {
1009
  font-size: 0.875rem;
1010
  color: var(--dark-400);
1011
+ }
1012
+ /* File List */
 
1013
  .file-list {
1014
  display: flex;
1015
  flex-direction: column;
1016
  gap: 0.75rem;
1017
+ }
1018
 
1019
  .file-item {
1020
+ background: rgba(30,
1021
+ 41,
1022
+ 59,
1023
+ 0.5);
1024
  border: 1px solid var(--dark-700);
1025
  border-radius: 12px;
1026
  overflow: hidden;
1027
+ }
1028
 
1029
  .file-header {
1030
  width: 100%;
 
1036
  border: none;
1037
  cursor: pointer;
1038
  transition: background 0.3s;
1039
+ }
1040
 
1041
  .file-header:hover {
1042
+ background: rgba(51,
1043
+ 65,
1044
+ 85,
1045
+ 0.5);
1046
+ }
1047
 
1048
  .file-name {
1049
  display: flex;
 
1052
  font-family: 'JetBrains Mono', monospace;
1053
  font-size: 0.875rem;
1054
  color: var(--dark-200);
1055
+ }
1056
 
1057
  .file-name i {
1058
  color: var(--primary-400);
1059
+ }
1060
 
1061
  .file-header .chevron {
1062
  color: var(--dark-400);
1063
  transition: transform 0.3s;
1064
+ }
1065
 
1066
  .file-item.expanded .file-header .chevron {
1067
  transform: rotate(180deg);
1068
+ }
1069
 
1070
  .file-content {
1071
  display: none;
1072
  border-top: 1px solid var(--dark-700);
1073
+ }
1074
 
1075
  .file-item.expanded .file-content {
1076
  display: block;
1077
+ }
1078
+ /* Animations */
 
1079
  @keyframes pulse-slow {
1080
+ 0%,
1081
+ 100% {
 
1082
  opacity: 1;
1083
+ }
 
1084
  50% {
1085
  opacity: 0.5;
1086
+ }
1087
+ }
1088
 
1089
  @keyframes float {
1090
+ 0%,
1091
+ 100% {
 
1092
  transform: translateY(0);
1093
+ }
 
1094
  50% {
1095
  transform: translateY(-10px);
1096
+ }
1097
+ }
1098
 
1099
  @keyframes spin {
1100
  to {
1101
  transform: rotate(360deg);
1102
+ }
1103
+ }
1104
 
1105
  @keyframes pulse {
1106
+ 0%,
1107
+ 100% {
 
1108
  opacity: 1;
1109
+ }
 
1110
  50% {
1111
  opacity: 0.5;
1112
+ }
1113
+ }
1114
+ /* Responsive */
 
1115
  @media (max-width: 768px) {
1116
  .header-content {
1117
  flex-direction: column;
1118
  gap: 1rem;
1119
+ }
1120
 
1121
  .wizard {
1122
  padding: 1.5rem;
1123
+ }
1124
 
1125
  .features-grid {
1126
  grid-template-columns: 1fr;
1127
+ }
1128
 
1129
  .output-header {
1130
  flex-direction: column;
1131
  align-items: flex-start;
1132
+ }
1133
 
1134
  .tabs {
1135
  flex-wrap: nowrap;
1136
+ }
1137
+ }
1138
+ /* Syntax Highlighting */
 
1139
  .keyword {
1140
  color: var(--primary-400);
1141
+ }
1142
 
1143
  .string {
1144
  color: var(--green-400);
1145
+ }
1146
 
1147
  .comment {
1148
  color: var(--dark-500);
1149
+ }
1150
 
1151
  .type {
1152
  color: var(--purple-400);
1153
+ }
1154
 
1155
  .function {
1156
  color: var(--yellow-400);
1157
+ }
1158
 
1159
  .property {
1160
  color: var(--pink-400);
1161
+ }
1162
 
1163
  .number {
1164
  color: var(--orange-400);
1165
+ }
1166
  </style>
1167
  </head>
1168
 
 
1221
  <label class="form-label">Target Stack</label>
1222
  <div class="stack-grid">
1223
  <button type="button" class="stack-option active" data-stack="nestjs-prisma">
1224
+ <div class="stack-option-header">
1225
+ <i class="fas fa-server" style="color: var(--primary-400);"></i>
1226
+ <span>NestJS + Prisma</span>
1227
+ </div>
1228
+ <p>TypeScript, NestJS framework, Prisma ORM, PostgreSQL</p>
1229
+ </button>
1230
  <button type="button" class="stack-option" data-stack="express-drizzle">
1231
+ <div class="stack-option-header">
1232
+ <i class="fas fa-code" style="color: var(--green-400);"></i>
1233
+ <span>Express + Drizzle</span>
1234
+ </div>
1235
+ <p>TypeScript, Express.js, Drizzle ORM, PostgreSQL</p>
1236
+ </button>
1237
  </div>
1238
  </div>
1239
 
 
1247
  </div>
1248
 
1249
  <button type="submit" id="generate-btn" class="btn-primary" disabled>
1250
+ <span>Generate Backend</span>
1251
+ <i class="fas fa-arrow-right"></i>
1252
+ </button>
1253
  </form>
1254
  </div>
1255
 
 
1298
  <div class="output-header">
1299
  <h2>Generated Backend</h2>
1300
  <div class="output-actions">
1301
+ <button id="download-btn" class="btn-secondary">
1302
+ <i class="fas fa-download"></i>
1303
+ <span>Download ZIP</span>
1304
+ </button>
1305
+ <button id="new-project-btn" class="btn-secondary">
1306
+ <i class="fas fa-plus"></i>
1307
+ <span>New Project</span>
1308
+ </button>
1309
+ </div>
1310
+ </div>
1311
+
1312
+ <!-- Tabs -->
1313
+ <div class="tabs">
1314
+ <button class="tab-btn active" data-tab="schema">
1315
+ <i class="fas fa-database"></i>
1316
+ <span>Schema</span>
1317
+ </button>
1318
+ <button class="tab-btn" data-tab="api">
1319
+ <i class="fas fa-server"></i>
1320
+ <span>API Routes</span>
1321
+ </button>
1322
+ <button class="tab-btn" data-tab="prisma">
1323
+ <i class="fas fa-file-code"></i>
1324
+ <span>Prisma Schema</span>
1325
+ </button>
1326
+ <button class="tab-btn" data-tab="files">
1327
+ <i class="fas fa-folder"></i>
1328
+ <span>All Files</span>
1329
+ </button>
1330
+ </div>
1331
+
1332
+ <!-- Schema Tab -->
1333
+ <div id="schema-tab" class="tab-content active">
1334
+ <div class="schema-container">
1335
+ <div id="schema-grid" class="schema-grid">
1336
+ <!-- Entity cards will be generated here -->
1337
+ </div>
1338
+ </div>
1339
+ </div>
1340
+
1341
+ <!-- API Tab -->
1342
+ <div</pre>
1343
+ </body>
1344
+ </html>