designnn 0.2.0

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.
@@ -0,0 +1,756 @@
1
+ /* ============================================
2
+ DESIGNNN Web UI
3
+ Brand: Black base × Neon Yellow (#CCFF00)
4
+ Font: Inter (body), JetBrains Mono (code)
5
+ ============================================ */
6
+
7
+ :root {
8
+ --bg-primary: #0A0A0A;
9
+ --bg-secondary: #111111;
10
+ --bg-card: #161616;
11
+ --bg-card-hover: #1C1C1C;
12
+ --bg-input: #1A1A1A;
13
+ --accent: #CCFF00;
14
+ --accent-dim: rgba(204, 255, 0, 0.15);
15
+ --accent-glow: rgba(204, 255, 0, 0.08);
16
+ --text-primary: #F5F5F5;
17
+ --text-secondary: #999999;
18
+ --text-dim: #666666;
19
+ --border: #2A2A2A;
20
+ --border-hover: #3A3A3A;
21
+ --success: #00FF88;
22
+ --error: #FF4444;
23
+ --radius: 12px;
24
+ --radius-sm: 8px;
25
+ --radius-lg: 16px;
26
+ --font-body: 'Inter', -apple-system, BlinkMacSystemFont, sans-serif;
27
+ --font-mono: 'JetBrains Mono', 'Fira Code', monospace;
28
+ }
29
+
30
+ * {
31
+ margin: 0;
32
+ padding: 0;
33
+ box-sizing: border-box;
34
+ }
35
+
36
+ html {
37
+ font-size: 16px;
38
+ -webkit-font-smoothing: antialiased;
39
+ -moz-osx-font-smoothing: grayscale;
40
+ }
41
+
42
+ body {
43
+ font-family: var(--font-body);
44
+ background-color: var(--bg-primary);
45
+ color: var(--text-primary);
46
+ min-height: 100vh;
47
+ display: flex;
48
+ flex-direction: column;
49
+ }
50
+
51
+ /* ---- Scrollbar ---- */
52
+ ::-webkit-scrollbar { width: 6px; }
53
+ ::-webkit-scrollbar-track { background: var(--bg-primary); }
54
+ ::-webkit-scrollbar-thumb { background: var(--border); border-radius: 3px; }
55
+ ::-webkit-scrollbar-thumb:hover { background: var(--text-dim); }
56
+
57
+ /* ============================================
58
+ HEADER
59
+ ============================================ */
60
+ .header {
61
+ display: flex;
62
+ align-items: center;
63
+ justify-content: space-between;
64
+ padding: 16px 32px;
65
+ border-bottom: 1px solid var(--border);
66
+ position: sticky;
67
+ top: 0;
68
+ background: rgba(10, 10, 10, 0.85);
69
+ backdrop-filter: blur(20px);
70
+ -webkit-backdrop-filter: blur(20px);
71
+ z-index: 100;
72
+ }
73
+
74
+ .header-left {
75
+ display: flex;
76
+ align-items: baseline;
77
+ gap: 12px;
78
+ }
79
+
80
+ .logo {
81
+ font-size: 1.5rem;
82
+ font-weight: 900;
83
+ letter-spacing: 2px;
84
+ color: var(--accent);
85
+ }
86
+
87
+ .tagline {
88
+ font-size: 0.75rem;
89
+ color: var(--text-dim);
90
+ font-weight: 400;
91
+ letter-spacing: 0.5px;
92
+ }
93
+
94
+ .nav {
95
+ display: flex;
96
+ gap: 4px;
97
+ background: var(--bg-secondary);
98
+ border-radius: var(--radius);
99
+ padding: 4px;
100
+ border: 1px solid var(--border);
101
+ }
102
+
103
+ .nav-btn {
104
+ padding: 8px 20px;
105
+ border: none;
106
+ background: transparent;
107
+ color: var(--text-secondary);
108
+ font-family: var(--font-body);
109
+ font-size: 0.875rem;
110
+ font-weight: 500;
111
+ border-radius: var(--radius-sm);
112
+ cursor: pointer;
113
+ transition: all 0.2s ease;
114
+ }
115
+
116
+ .nav-btn:hover {
117
+ color: var(--text-primary);
118
+ background: var(--bg-card);
119
+ }
120
+
121
+ .nav-btn.active {
122
+ color: var(--bg-primary);
123
+ background: var(--accent);
124
+ font-weight: 600;
125
+ }
126
+
127
+ .github-link {
128
+ color: var(--text-dim);
129
+ transition: color 0.2s;
130
+ display: flex;
131
+ align-items: center;
132
+ }
133
+
134
+ .github-link:hover {
135
+ color: var(--accent);
136
+ }
137
+
138
+ /* ============================================
139
+ MAIN
140
+ ============================================ */
141
+ .main {
142
+ flex: 1;
143
+ max-width: 960px;
144
+ width: 100%;
145
+ margin: 0 auto;
146
+ padding: 40px 24px;
147
+ }
148
+
149
+ .tab-content {
150
+ display: none;
151
+ }
152
+
153
+ .tab-content.active {
154
+ display: block;
155
+ animation: fadeIn 0.3s ease;
156
+ }
157
+
158
+ @keyframes fadeIn {
159
+ from { opacity: 0; transform: translateY(8px); }
160
+ to { opacity: 1; transform: translateY(0); }
161
+ }
162
+
163
+ .tab-hero {
164
+ text-align: center;
165
+ margin-bottom: 40px;
166
+ }
167
+
168
+ .tab-hero h2 {
169
+ font-size: 2rem;
170
+ font-weight: 800;
171
+ margin-bottom: 8px;
172
+ letter-spacing: -0.5px;
173
+ }
174
+
175
+ .tab-hero p {
176
+ color: var(--text-secondary);
177
+ font-size: 1rem;
178
+ max-width: 560px;
179
+ margin: 0 auto;
180
+ line-height: 1.6;
181
+ }
182
+
183
+ /* ============================================
184
+ CHAT TAB
185
+ ============================================ */
186
+ .input-group {
187
+ display: flex;
188
+ gap: 8px;
189
+ margin-bottom: 16px;
190
+ }
191
+
192
+ .input-group input {
193
+ flex: 1;
194
+ padding: 14px 20px;
195
+ background: var(--bg-input);
196
+ border: 1px solid var(--border);
197
+ border-radius: var(--radius);
198
+ color: var(--text-primary);
199
+ font-family: var(--font-body);
200
+ font-size: 0.9375rem;
201
+ outline: none;
202
+ transition: border-color 0.2s;
203
+ }
204
+
205
+ .input-group input:focus {
206
+ border-color: var(--accent);
207
+ box-shadow: 0 0 0 3px var(--accent-dim);
208
+ }
209
+
210
+ .input-group input::placeholder {
211
+ color: var(--text-dim);
212
+ }
213
+
214
+ .btn-primary {
215
+ padding: 14px 28px;
216
+ background: var(--accent);
217
+ color: var(--bg-primary);
218
+ border: none;
219
+ border-radius: var(--radius);
220
+ font-family: var(--font-body);
221
+ font-size: 0.9375rem;
222
+ font-weight: 700;
223
+ cursor: pointer;
224
+ transition: all 0.2s;
225
+ white-space: nowrap;
226
+ }
227
+
228
+ .btn-primary:hover {
229
+ background: #D4FF33;
230
+ transform: translateY(-1px);
231
+ box-shadow: 0 4px 20px var(--accent-dim);
232
+ }
233
+
234
+ .btn-primary:active {
235
+ transform: translateY(0);
236
+ }
237
+
238
+ .btn-primary:disabled {
239
+ opacity: 0.5;
240
+ cursor: not-allowed;
241
+ transform: none;
242
+ }
243
+
244
+ .quick-prompts {
245
+ display: flex;
246
+ align-items: center;
247
+ gap: 8px;
248
+ flex-wrap: wrap;
249
+ margin-bottom: 24px;
250
+ }
251
+
252
+ .quick-label {
253
+ font-size: 0.8125rem;
254
+ color: var(--text-dim);
255
+ font-weight: 500;
256
+ }
257
+
258
+ .quick-btn {
259
+ padding: 6px 14px;
260
+ background: var(--bg-card);
261
+ border: 1px solid var(--border);
262
+ border-radius: 999px;
263
+ color: var(--text-secondary);
264
+ font-family: var(--font-body);
265
+ font-size: 0.8125rem;
266
+ cursor: pointer;
267
+ transition: all 0.2s;
268
+ }
269
+
270
+ .quick-btn:hover {
271
+ border-color: var(--accent);
272
+ color: var(--accent);
273
+ background: var(--accent-glow);
274
+ }
275
+
276
+ /* ============================================
277
+ RESULT AREA
278
+ ============================================ */
279
+ .result-area {
280
+ margin-top: 24px;
281
+ background: var(--bg-card);
282
+ border: 1px solid var(--border);
283
+ border-radius: var(--radius-lg);
284
+ overflow: hidden;
285
+ }
286
+
287
+ .result-area.hidden {
288
+ display: none;
289
+ }
290
+
291
+ .result-header {
292
+ display: flex;
293
+ align-items: center;
294
+ justify-content: space-between;
295
+ padding: 16px 20px;
296
+ border-bottom: 1px solid var(--border);
297
+ }
298
+
299
+ .result-title {
300
+ font-size: 0.875rem;
301
+ font-weight: 600;
302
+ color: var(--accent);
303
+ display: flex;
304
+ align-items: center;
305
+ gap: 8px;
306
+ }
307
+
308
+ .result-title::before {
309
+ content: '';
310
+ display: inline-block;
311
+ width: 8px;
312
+ height: 8px;
313
+ background: var(--accent);
314
+ border-radius: 50%;
315
+ }
316
+
317
+ .btn-copy {
318
+ padding: 6px 16px;
319
+ background: transparent;
320
+ border: 1px solid var(--border);
321
+ border-radius: var(--radius-sm);
322
+ color: var(--text-secondary);
323
+ font-family: var(--font-body);
324
+ font-size: 0.8125rem;
325
+ cursor: pointer;
326
+ transition: all 0.2s;
327
+ display: flex;
328
+ align-items: center;
329
+ gap: 6px;
330
+ }
331
+
332
+ .btn-copy:hover {
333
+ border-color: var(--accent);
334
+ color: var(--accent);
335
+ }
336
+
337
+ .btn-copy.copied {
338
+ border-color: var(--success);
339
+ color: var(--success);
340
+ }
341
+
342
+ .result-body {
343
+ padding: 20px;
344
+ }
345
+
346
+ .result-body pre {
347
+ font-family: var(--font-mono);
348
+ font-size: 0.875rem;
349
+ line-height: 1.7;
350
+ color: var(--text-primary);
351
+ white-space: pre-wrap;
352
+ word-break: break-word;
353
+ }
354
+
355
+ .result-footer {
356
+ padding: 12px 20px;
357
+ border-top: 1px solid var(--border);
358
+ display: flex;
359
+ align-items: center;
360
+ gap: 8px;
361
+ font-size: 0.8125rem;
362
+ color: var(--text-dim);
363
+ }
364
+
365
+ /* Loading state */
366
+ .loading-indicator {
367
+ display: flex;
368
+ align-items: center;
369
+ justify-content: center;
370
+ gap: 12px;
371
+ padding: 40px;
372
+ color: var(--text-secondary);
373
+ font-size: 0.9375rem;
374
+ }
375
+
376
+ .loading-dots {
377
+ display: flex;
378
+ gap: 4px;
379
+ }
380
+
381
+ .loading-dots span {
382
+ width: 8px;
383
+ height: 8px;
384
+ background: var(--accent);
385
+ border-radius: 50%;
386
+ animation: bounce 1.4s infinite ease-in-out both;
387
+ }
388
+
389
+ .loading-dots span:nth-child(1) { animation-delay: -0.32s; }
390
+ .loading-dots span:nth-child(2) { animation-delay: -0.16s; }
391
+
392
+ @keyframes bounce {
393
+ 0%, 80%, 100% { transform: scale(0); opacity: 0.4; }
394
+ 40% { transform: scale(1); opacity: 1; }
395
+ }
396
+
397
+ /* ============================================
398
+ EXPLORE TAB
399
+ ============================================ */
400
+ .filter-bar {
401
+ display: flex;
402
+ gap: 6px;
403
+ margin-bottom: 24px;
404
+ flex-wrap: wrap;
405
+ }
406
+
407
+ .filter-btn {
408
+ padding: 8px 18px;
409
+ background: var(--bg-card);
410
+ border: 1px solid var(--border);
411
+ border-radius: 999px;
412
+ color: var(--text-secondary);
413
+ font-family: var(--font-body);
414
+ font-size: 0.8125rem;
415
+ font-weight: 500;
416
+ cursor: pointer;
417
+ transition: all 0.2s;
418
+ text-transform: capitalize;
419
+ }
420
+
421
+ .filter-btn:hover {
422
+ border-color: var(--accent);
423
+ color: var(--accent);
424
+ }
425
+
426
+ .filter-btn.active {
427
+ background: var(--accent);
428
+ color: var(--bg-primary);
429
+ border-color: var(--accent);
430
+ font-weight: 600;
431
+ }
432
+
433
+ .trends-grid {
434
+ display: grid;
435
+ grid-template-columns: repeat(auto-fill, minmax(280px, 1fr));
436
+ gap: 16px;
437
+ margin-bottom: 24px;
438
+ }
439
+
440
+ .trend-card {
441
+ background: var(--bg-card);
442
+ border: 1px solid var(--border);
443
+ border-radius: var(--radius);
444
+ padding: 20px;
445
+ cursor: pointer;
446
+ transition: all 0.25s ease;
447
+ position: relative;
448
+ overflow: hidden;
449
+ }
450
+
451
+ .trend-card::before {
452
+ content: '';
453
+ position: absolute;
454
+ top: 0;
455
+ left: 0;
456
+ right: 0;
457
+ height: 3px;
458
+ background: var(--accent);
459
+ transform: scaleX(0);
460
+ transform-origin: left;
461
+ transition: transform 0.3s ease;
462
+ }
463
+
464
+ .trend-card:hover {
465
+ border-color: var(--border-hover);
466
+ background: var(--bg-card-hover);
467
+ transform: translateY(-2px);
468
+ box-shadow: 0 8px 32px rgba(0, 0, 0, 0.3);
469
+ }
470
+
471
+ .trend-card:hover::before {
472
+ transform: scaleX(1);
473
+ }
474
+
475
+ .trend-card.selected {
476
+ border-color: var(--accent);
477
+ background: var(--accent-glow);
478
+ }
479
+
480
+ .trend-card-header {
481
+ display: flex;
482
+ align-items: center;
483
+ justify-content: space-between;
484
+ margin-bottom: 8px;
485
+ }
486
+
487
+ .trend-name {
488
+ font-size: 1rem;
489
+ font-weight: 700;
490
+ color: var(--text-primary);
491
+ }
492
+
493
+ .trend-category {
494
+ font-size: 0.6875rem;
495
+ font-weight: 600;
496
+ text-transform: uppercase;
497
+ letter-spacing: 1px;
498
+ color: var(--accent);
499
+ background: var(--accent-dim);
500
+ padding: 3px 8px;
501
+ border-radius: 4px;
502
+ }
503
+
504
+ .trend-desc {
505
+ font-size: 0.8125rem;
506
+ color: var(--text-secondary);
507
+ line-height: 1.5;
508
+ margin-bottom: 12px;
509
+ }
510
+
511
+ .trend-popularity {
512
+ display: flex;
513
+ align-items: center;
514
+ gap: 8px;
515
+ }
516
+
517
+ .popularity-bar {
518
+ flex: 1;
519
+ height: 4px;
520
+ background: var(--border);
521
+ border-radius: 2px;
522
+ overflow: hidden;
523
+ }
524
+
525
+ .popularity-fill {
526
+ height: 100%;
527
+ background: var(--accent);
528
+ border-radius: 2px;
529
+ transition: width 0.5s ease;
530
+ }
531
+
532
+ .popularity-value {
533
+ font-size: 0.75rem;
534
+ font-weight: 600;
535
+ color: var(--text-dim);
536
+ font-family: var(--font-mono);
537
+ min-width: 32px;
538
+ text-align: right;
539
+ }
540
+
541
+ .trend-keywords {
542
+ display: flex;
543
+ flex-wrap: wrap;
544
+ gap: 4px;
545
+ margin-top: 10px;
546
+ }
547
+
548
+ .keyword-tag {
549
+ font-size: 0.6875rem;
550
+ color: var(--text-dim);
551
+ background: var(--bg-primary);
552
+ padding: 2px 8px;
553
+ border-radius: 4px;
554
+ border: 1px solid var(--border);
555
+ }
556
+
557
+ .trend-card-action {
558
+ margin-top: 14px;
559
+ padding-top: 14px;
560
+ border-top: 1px solid var(--border);
561
+ }
562
+
563
+ .btn-generate {
564
+ width: 100%;
565
+ padding: 10px;
566
+ background: transparent;
567
+ border: 1px solid var(--accent);
568
+ border-radius: var(--radius-sm);
569
+ color: var(--accent);
570
+ font-family: var(--font-body);
571
+ font-size: 0.8125rem;
572
+ font-weight: 600;
573
+ cursor: pointer;
574
+ transition: all 0.2s;
575
+ }
576
+
577
+ .btn-generate:hover {
578
+ background: var(--accent);
579
+ color: var(--bg-primary);
580
+ }
581
+
582
+ /* ============================================
583
+ MIX TAB
584
+ ============================================ */
585
+ .mix-selectors {
586
+ display: flex;
587
+ align-items: center;
588
+ gap: 20px;
589
+ margin-bottom: 20px;
590
+ }
591
+
592
+ .mix-slot {
593
+ flex: 1;
594
+ }
595
+
596
+ .slot-label {
597
+ font-size: 0.75rem;
598
+ font-weight: 600;
599
+ color: var(--text-dim);
600
+ text-transform: uppercase;
601
+ letter-spacing: 1px;
602
+ margin-bottom: 8px;
603
+ }
604
+
605
+ .mix-select {
606
+ width: 100%;
607
+ padding: 14px 16px;
608
+ background: var(--bg-input);
609
+ border: 1px solid var(--border);
610
+ border-radius: var(--radius);
611
+ color: var(--text-primary);
612
+ font-family: var(--font-body);
613
+ font-size: 0.9375rem;
614
+ outline: none;
615
+ cursor: pointer;
616
+ appearance: none;
617
+ background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='0 0 24 24' fill='none' stroke='%23999' stroke-width='2'%3E%3Cpath d='M6 9l6 6 6-6'/%3E%3C/svg%3E");
618
+ background-repeat: no-repeat;
619
+ background-position: right 16px center;
620
+ transition: border-color 0.2s;
621
+ }
622
+
623
+ .mix-select:focus {
624
+ border-color: var(--accent);
625
+ box-shadow: 0 0 0 3px var(--accent-dim);
626
+ }
627
+
628
+ .mix-select option {
629
+ background: var(--bg-secondary);
630
+ color: var(--text-primary);
631
+ }
632
+
633
+ .mix-icon {
634
+ display: flex;
635
+ flex-direction: column;
636
+ align-items: center;
637
+ gap: 4px;
638
+ color: var(--accent);
639
+ font-size: 0.6875rem;
640
+ font-weight: 700;
641
+ letter-spacing: 2px;
642
+ padding-top: 20px;
643
+ }
644
+
645
+ .context-group {
646
+ margin-bottom: 20px;
647
+ }
648
+
649
+ .context-group input {
650
+ width: 100%;
651
+ padding: 14px 20px;
652
+ background: var(--bg-input);
653
+ border: 1px solid var(--border);
654
+ border-radius: var(--radius);
655
+ color: var(--text-primary);
656
+ font-family: var(--font-body);
657
+ font-size: 0.9375rem;
658
+ outline: none;
659
+ transition: border-color 0.2s;
660
+ }
661
+
662
+ .context-group input:focus {
663
+ border-color: var(--accent);
664
+ box-shadow: 0 0 0 3px var(--accent-dim);
665
+ }
666
+
667
+ .context-group input::placeholder {
668
+ color: var(--text-dim);
669
+ }
670
+
671
+ .btn-mix {
672
+ width: 100%;
673
+ padding: 16px;
674
+ font-size: 1rem;
675
+ margin-bottom: 8px;
676
+ }
677
+
678
+ /* ============================================
679
+ FOOTER
680
+ ============================================ */
681
+ .footer {
682
+ text-align: center;
683
+ padding: 24px;
684
+ border-top: 1px solid var(--border);
685
+ color: var(--text-dim);
686
+ font-size: 0.8125rem;
687
+ }
688
+
689
+ .footer a {
690
+ color: var(--accent);
691
+ text-decoration: none;
692
+ }
693
+
694
+ .footer a:hover {
695
+ text-decoration: underline;
696
+ }
697
+
698
+ /* ============================================
699
+ ERROR STATE
700
+ ============================================ */
701
+ .error-message {
702
+ padding: 16px 20px;
703
+ background: rgba(255, 68, 68, 0.08);
704
+ border: 1px solid rgba(255, 68, 68, 0.2);
705
+ border-radius: var(--radius);
706
+ color: var(--error);
707
+ font-size: 0.875rem;
708
+ }
709
+
710
+ /* ============================================
711
+ RESPONSIVE
712
+ ============================================ */
713
+ @media (max-width: 768px) {
714
+ .header {
715
+ padding: 12px 16px;
716
+ flex-wrap: wrap;
717
+ gap: 12px;
718
+ }
719
+
720
+ .header-left { order: 1; }
721
+ .github-link { order: 2; }
722
+ .nav { order: 3; width: 100%; justify-content: center; }
723
+
724
+ .main {
725
+ padding: 24px 16px;
726
+ }
727
+
728
+ .tab-hero h2 {
729
+ font-size: 1.5rem;
730
+ }
731
+
732
+ .input-group {
733
+ flex-direction: column;
734
+ }
735
+
736
+ .mix-selectors {
737
+ flex-direction: column;
738
+ gap: 12px;
739
+ }
740
+
741
+ .mix-icon {
742
+ padding-top: 0;
743
+ flex-direction: row;
744
+ gap: 8px;
745
+ }
746
+
747
+ .trends-grid {
748
+ grid-template-columns: 1fr;
749
+ }
750
+ }
751
+
752
+ @media (max-width: 480px) {
753
+ .logo { font-size: 1.25rem; }
754
+ .nav-btn { padding: 6px 14px; font-size: 0.8125rem; }
755
+ .quick-prompts { display: none; }
756
+ }