designlang 4.0.0 → 5.0.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,723 @@
1
+ :root {
2
+ --red: #ff0000;
3
+ --black: #0a0a0a;
4
+ --white: #f5f0e8;
5
+ --cream: #e8e0d0;
6
+ --yellow: #ffdd00;
7
+ --gray: #333;
8
+ }
9
+
10
+ * { margin: 0; padding: 0; box-sizing: border-box; }
11
+
12
+ html { scroll-behavior: smooth; }
13
+
14
+ body {
15
+ background: var(--black);
16
+ color: var(--white);
17
+ font-family: 'Inter', sans-serif;
18
+ overflow-x: hidden;
19
+ cursor: crosshair;
20
+ }
21
+
22
+ ::selection {
23
+ background: var(--red);
24
+ color: var(--black);
25
+ }
26
+
27
+ a { color: inherit; }
28
+
29
+ /* ── HERO ── */
30
+ .hero {
31
+ min-height: 100vh;
32
+ display: flex;
33
+ flex-direction: column;
34
+ justify-content: center;
35
+ align-items: center;
36
+ position: relative;
37
+ border-bottom: 4px solid var(--red);
38
+ overflow: hidden;
39
+ }
40
+
41
+ .hero::before {
42
+ content: 'DESIGNLANG DESIGNLANG DESIGNLANG DESIGNLANG DESIGNLANG ';
43
+ position: absolute;
44
+ top: 0;
45
+ left: 0;
46
+ width: 300%;
47
+ font-family: 'Unbounded', sans-serif;
48
+ font-size: 14vw;
49
+ font-weight: 900;
50
+ color: rgba(255, 0, 0, 0.03);
51
+ white-space: nowrap;
52
+ pointer-events: none;
53
+ animation: scroll-text 20s linear infinite;
54
+ line-height: 1;
55
+ }
56
+
57
+ @keyframes scroll-text {
58
+ 0% { transform: translateX(0); }
59
+ 100% { transform: translateX(-33.33%); }
60
+ }
61
+
62
+ .hero-title {
63
+ font-family: 'Unbounded', sans-serif;
64
+ font-size: clamp(4rem, 12vw, 10rem);
65
+ font-weight: 900;
66
+ text-transform: uppercase;
67
+ letter-spacing: -0.04em;
68
+ line-height: 0.9;
69
+ text-align: center;
70
+ position: relative;
71
+ z-index: 1;
72
+ }
73
+
74
+ .hero-title span {
75
+ display: block;
76
+ color: var(--red);
77
+ font-size: 0.4em;
78
+ letter-spacing: 0.2em;
79
+ margin-top: 16px;
80
+ }
81
+
82
+ .hero-sub {
83
+ font-family: 'JetBrains Mono', monospace;
84
+ font-size: clamp(14px, 1.5vw, 18px);
85
+ color: #888;
86
+ margin-top: 32px;
87
+ text-align: center;
88
+ max-width: 600px;
89
+ line-height: 1.6;
90
+ z-index: 1;
91
+ }
92
+
93
+ .hero-cmd {
94
+ margin-top: 48px;
95
+ background: #111;
96
+ border: 2px solid var(--red);
97
+ padding: 20px 40px;
98
+ font-family: 'JetBrains Mono', monospace;
99
+ font-size: clamp(16px, 2vw, 22px);
100
+ color: var(--yellow);
101
+ position: relative;
102
+ z-index: 1;
103
+ transition: all 0.2s;
104
+ text-decoration: none;
105
+ display: inline-block;
106
+ }
107
+
108
+ .hero-cmd:hover {
109
+ background: var(--red);
110
+ color: var(--black);
111
+ transform: translate(-4px, -4px);
112
+ box-shadow: 4px 4px 0 var(--yellow);
113
+ }
114
+
115
+ .hero-cmd::before {
116
+ content: '$ ';
117
+ color: var(--red);
118
+ }
119
+
120
+ .hero-cmd:hover::before {
121
+ color: var(--black);
122
+ }
123
+
124
+ .scroll-hint {
125
+ position: absolute;
126
+ bottom: 40px;
127
+ font-family: 'JetBrains Mono', monospace;
128
+ font-size: 12px;
129
+ color: #444;
130
+ letter-spacing: 0.3em;
131
+ text-transform: uppercase;
132
+ animation: pulse 2s ease-in-out infinite;
133
+ }
134
+
135
+ @keyframes pulse {
136
+ 0%, 100% { opacity: 0.3; }
137
+ 50% { opacity: 1; }
138
+ }
139
+
140
+ /* ── SECTION LAYOUT ── */
141
+ section {
142
+ padding: 100px 24px;
143
+ max-width: 1400px;
144
+ margin: 0 auto;
145
+ }
146
+
147
+ .section-red {
148
+ background: var(--red);
149
+ color: var(--black);
150
+ max-width: 100%;
151
+ padding: 80px 24px;
152
+ }
153
+
154
+ .section-cream {
155
+ background: var(--cream);
156
+ color: var(--black);
157
+ max-width: 100%;
158
+ padding: 80px 24px;
159
+ }
160
+
161
+ .section-inner {
162
+ max-width: 1400px;
163
+ margin: 0 auto;
164
+ }
165
+
166
+ .section-title {
167
+ font-family: 'Unbounded', sans-serif;
168
+ font-size: clamp(2rem, 5vw, 4rem);
169
+ font-weight: 900;
170
+ text-transform: uppercase;
171
+ letter-spacing: -0.02em;
172
+ margin-bottom: 48px;
173
+ line-height: 1;
174
+ }
175
+
176
+ .section-title::after {
177
+ content: ' ///';
178
+ color: var(--red);
179
+ }
180
+
181
+ .section-red .section-title::after {
182
+ color: var(--black);
183
+ }
184
+
185
+ .section-cream .section-title::after {
186
+ color: var(--red);
187
+ }
188
+
189
+ /* ── OUTPUT FILES ── */
190
+ .files-grid {
191
+ display: grid;
192
+ grid-template-columns: repeat(auto-fill, minmax(300px, 1fr));
193
+ gap: 2px;
194
+ }
195
+
196
+ .file-card {
197
+ background: #111;
198
+ border: 2px solid #222;
199
+ padding: 28px;
200
+ transition: all 0.15s;
201
+ position: relative;
202
+ overflow: hidden;
203
+ }
204
+
205
+ .file-card:hover {
206
+ border-color: var(--red);
207
+ transform: translate(-2px, -2px);
208
+ box-shadow: 2px 2px 0 var(--red);
209
+ }
210
+
211
+ .file-card::before {
212
+ content: attr(data-num);
213
+ position: absolute;
214
+ top: -10px;
215
+ right: 10px;
216
+ font-family: 'Unbounded', sans-serif;
217
+ font-size: 80px;
218
+ font-weight: 900;
219
+ color: rgba(255, 0, 0, 0.06);
220
+ line-height: 1;
221
+ }
222
+
223
+ .file-name {
224
+ font-family: 'JetBrains Mono', monospace;
225
+ font-size: 15px;
226
+ color: var(--yellow);
227
+ margin-bottom: 8px;
228
+ }
229
+
230
+ .file-desc {
231
+ font-size: 14px;
232
+ color: #888;
233
+ line-height: 1.5;
234
+ }
235
+
236
+ /* ── FEATURES ── */
237
+ .features-list {
238
+ display: grid;
239
+ grid-template-columns: repeat(auto-fill, minmax(400px, 1fr));
240
+ gap: 0;
241
+ }
242
+
243
+ .feature {
244
+ padding: 32px;
245
+ border: 1px solid #222;
246
+ transition: all 0.15s;
247
+ }
248
+
249
+ .feature:hover {
250
+ background: #111;
251
+ border-color: var(--red);
252
+ }
253
+
254
+ .feature-name {
255
+ font-family: 'Unbounded', sans-serif;
256
+ font-size: 18px;
257
+ font-weight: 700;
258
+ text-transform: uppercase;
259
+ margin-bottom: 8px;
260
+ }
261
+
262
+ .feature-cmd {
263
+ font-family: 'JetBrains Mono', monospace;
264
+ font-size: 13px;
265
+ color: var(--yellow);
266
+ margin-bottom: 12px;
267
+ }
268
+
269
+ .feature-desc {
270
+ font-size: 14px;
271
+ color: #888;
272
+ line-height: 1.5;
273
+ }
274
+
275
+ /* ── SCORE DEMO ── */
276
+ .score-demo {
277
+ background: #111;
278
+ border: 2px solid var(--red);
279
+ padding: 40px;
280
+ font-family: 'JetBrains Mono', monospace;
281
+ font-size: 14px;
282
+ line-height: 2;
283
+ overflow-x: auto;
284
+ color: #ccc;
285
+ }
286
+
287
+ .score-grade {
288
+ font-family: 'Unbounded', sans-serif;
289
+ font-size: 64px;
290
+ font-weight: 900;
291
+ color: var(--red);
292
+ display: inline;
293
+ }
294
+
295
+ /* ── COMMANDS ── */
296
+ .commands-grid {
297
+ display: grid;
298
+ grid-template-columns: repeat(auto-fill, minmax(350px, 1fr));
299
+ gap: 2px;
300
+ }
301
+
302
+ .command-card {
303
+ background: var(--black);
304
+ padding: 32px;
305
+ border: 2px solid rgba(255,0,0,0.3);
306
+ transition: all 0.15s;
307
+ }
308
+
309
+ .command-card:hover {
310
+ border-color: var(--red);
311
+ background: rgba(255, 0, 0, 0.05);
312
+ }
313
+
314
+ .command-name {
315
+ font-family: 'JetBrains Mono', monospace;
316
+ font-size: 18px;
317
+ font-weight: 700;
318
+ color: var(--yellow);
319
+ margin-bottom: 12px;
320
+ }
321
+
322
+ .command-desc {
323
+ font-size: 14px;
324
+ color: #ccc;
325
+ line-height: 1.5;
326
+ }
327
+
328
+ /* ── STATS STRIP ── */
329
+ .stats-strip {
330
+ display: flex;
331
+ flex-wrap: wrap;
332
+ border-top: 2px solid var(--red);
333
+ border-bottom: 2px solid var(--red);
334
+ }
335
+
336
+ .stat {
337
+ flex: 1;
338
+ min-width: 150px;
339
+ padding: 32px 24px;
340
+ text-align: center;
341
+ border-right: 1px solid #222;
342
+ }
343
+
344
+ .stat:last-child { border-right: none; }
345
+
346
+ .stat-value {
347
+ font-family: 'Unbounded', sans-serif;
348
+ font-size: 48px;
349
+ font-weight: 900;
350
+ color: var(--red);
351
+ line-height: 1;
352
+ }
353
+
354
+ .stat-label {
355
+ font-family: 'JetBrains Mono', monospace;
356
+ font-size: 11px;
357
+ color: #666;
358
+ text-transform: uppercase;
359
+ letter-spacing: 0.15em;
360
+ margin-top: 8px;
361
+ }
362
+
363
+ /* ── FOOTER ── */
364
+ footer {
365
+ padding: 60px 24px;
366
+ text-align: center;
367
+ border-top: 4px solid var(--red);
368
+ }
369
+
370
+ footer a {
371
+ text-decoration: underline;
372
+ text-underline-offset: 4px;
373
+ }
374
+
375
+ footer a:hover {
376
+ color: var(--red);
377
+ }
378
+
379
+ .footer-title {
380
+ font-family: 'Unbounded', sans-serif;
381
+ font-size: 24px;
382
+ font-weight: 900;
383
+ text-transform: uppercase;
384
+ margin-bottom: 16px;
385
+ }
386
+
387
+ .footer-links {
388
+ display: flex;
389
+ gap: 32px;
390
+ justify-content: center;
391
+ margin-top: 24px;
392
+ font-family: 'JetBrains Mono', monospace;
393
+ font-size: 14px;
394
+ }
395
+
396
+ .footer-copy {
397
+ margin-top: 48px;
398
+ font-size: 12px;
399
+ color: #444;
400
+ }
401
+
402
+ /* ── MARQUEE ── */
403
+ .marquee {
404
+ overflow: hidden;
405
+ white-space: nowrap;
406
+ border-top: 2px solid #222;
407
+ border-bottom: 2px solid #222;
408
+ padding: 12px 0;
409
+ font-family: 'JetBrains Mono', monospace;
410
+ font-size: 13px;
411
+ color: #444;
412
+ }
413
+
414
+ .marquee-inner {
415
+ display: inline-block;
416
+ animation: marquee 30s linear infinite;
417
+ }
418
+
419
+ @keyframes marquee {
420
+ 0% { transform: translateX(0); }
421
+ 100% { transform: translateX(-50%); }
422
+ }
423
+
424
+ /* ── EXTRACTOR ── */
425
+ .extractor {
426
+ max-width: 800px;
427
+ }
428
+
429
+ .extractor-form {
430
+ display: flex;
431
+ gap: 0;
432
+ }
433
+
434
+ .extractor-input {
435
+ flex: 1;
436
+ background: var(--black);
437
+ border: 2px solid var(--black);
438
+ border-right: none;
439
+ padding: 16px 20px;
440
+ font-family: 'JetBrains Mono', monospace;
441
+ font-size: 16px;
442
+ color: var(--yellow);
443
+ outline: none;
444
+ }
445
+
446
+ .extractor-input::placeholder {
447
+ color: #555;
448
+ }
449
+
450
+ .extractor-input:focus {
451
+ border-color: var(--yellow);
452
+ }
453
+
454
+ .extractor-btn {
455
+ background: var(--black);
456
+ border: 2px solid var(--black);
457
+ padding: 16px 32px;
458
+ font-family: 'Unbounded', sans-serif;
459
+ font-size: 14px;
460
+ font-weight: 700;
461
+ text-transform: uppercase;
462
+ color: var(--red);
463
+ cursor: pointer;
464
+ transition: all 0.15s;
465
+ white-space: nowrap;
466
+ }
467
+
468
+ .extractor-btn:hover:not(:disabled) {
469
+ background: var(--yellow);
470
+ color: var(--black);
471
+ border-color: var(--yellow);
472
+ }
473
+
474
+ .extractor-btn:disabled {
475
+ opacity: 0.5;
476
+ cursor: not-allowed;
477
+ }
478
+
479
+ .extractor-loading {
480
+ margin-top: 32px;
481
+ font-family: 'JetBrains Mono', monospace;
482
+ font-size: 14px;
483
+ }
484
+
485
+ .extractor-loading p {
486
+ color: var(--black);
487
+ }
488
+
489
+ .extractor-loading-sub {
490
+ color: #333 !important;
491
+ font-size: 12px;
492
+ margin-top: 4px;
493
+ }
494
+
495
+ .extractor-spinner {
496
+ width: 24px;
497
+ height: 24px;
498
+ border: 3px solid var(--black);
499
+ border-top-color: transparent;
500
+ border-radius: 50%;
501
+ animation: spin 0.8s linear infinite;
502
+ margin-bottom: 12px;
503
+ }
504
+
505
+ @keyframes spin {
506
+ to { transform: rotate(360deg); }
507
+ }
508
+
509
+ .extractor-error {
510
+ margin-top: 24px;
511
+ background: var(--black);
512
+ border: 2px solid var(--yellow);
513
+ padding: 16px 20px;
514
+ font-family: 'JetBrains Mono', monospace;
515
+ font-size: 14px;
516
+ color: var(--yellow);
517
+ }
518
+
519
+ .extractor-error-hint {
520
+ margin-top: 12px;
521
+ font-size: 12px;
522
+ color: #888;
523
+ line-height: 1.8;
524
+ }
525
+
526
+ .extractor-error-hint code {
527
+ display: inline-block;
528
+ margin-top: 4px;
529
+ background: #1a1a1a;
530
+ padding: 6px 12px;
531
+ color: var(--yellow);
532
+ font-size: 13px;
533
+ }
534
+
535
+ .extractor-results {
536
+ margin-top: 32px;
537
+ background: var(--black);
538
+ border: 2px solid var(--black);
539
+ }
540
+
541
+ .extractor-results-header {
542
+ display: flex;
543
+ justify-content: space-between;
544
+ align-items: center;
545
+ padding: 20px 24px;
546
+ border-bottom: 1px solid #222;
547
+ flex-wrap: wrap;
548
+ gap: 12px;
549
+ }
550
+
551
+ .extractor-results-header h3 {
552
+ font-family: 'Unbounded', sans-serif;
553
+ font-size: 16px;
554
+ font-weight: 700;
555
+ color: var(--white);
556
+ text-transform: uppercase;
557
+ }
558
+
559
+ .extractor-download {
560
+ background: var(--red);
561
+ border: none;
562
+ padding: 10px 20px;
563
+ font-family: 'JetBrains Mono', monospace;
564
+ font-size: 13px;
565
+ font-weight: 700;
566
+ color: var(--black);
567
+ cursor: pointer;
568
+ text-transform: uppercase;
569
+ transition: all 0.15s;
570
+ }
571
+
572
+ .extractor-download:hover {
573
+ background: var(--yellow);
574
+ transform: translate(-2px, -2px);
575
+ box-shadow: 2px 2px 0 var(--red);
576
+ }
577
+
578
+ .extractor-stats-grid {
579
+ display: grid;
580
+ grid-template-columns: repeat(3, 1fr);
581
+ border-bottom: 1px solid #222;
582
+ }
583
+
584
+ .extractor-stat {
585
+ padding: 20px 24px;
586
+ border-right: 1px solid #222;
587
+ border-bottom: 1px solid #222;
588
+ }
589
+
590
+ .extractor-stat:nth-child(3n) {
591
+ border-right: none;
592
+ }
593
+
594
+ .extractor-stat-value {
595
+ font-family: 'Unbounded', sans-serif;
596
+ font-size: 28px;
597
+ font-weight: 900;
598
+ color: var(--red);
599
+ line-height: 1;
600
+ }
601
+
602
+ .extractor-stat-label {
603
+ font-family: 'JetBrains Mono', monospace;
604
+ font-size: 11px;
605
+ color: #666;
606
+ text-transform: uppercase;
607
+ letter-spacing: 0.1em;
608
+ margin-top: 6px;
609
+ }
610
+
611
+ .extractor-section {
612
+ padding: 20px 24px;
613
+ border-bottom: 1px solid #222;
614
+ }
615
+
616
+ .extractor-section:last-child {
617
+ border-bottom: none;
618
+ }
619
+
620
+ .extractor-section-title {
621
+ font-family: 'Unbounded', sans-serif;
622
+ font-size: 12px;
623
+ font-weight: 700;
624
+ text-transform: uppercase;
625
+ letter-spacing: 0.1em;
626
+ color: var(--red);
627
+ margin-bottom: 12px;
628
+ }
629
+
630
+ .extractor-colors {
631
+ display: flex;
632
+ flex-wrap: wrap;
633
+ gap: 8px;
634
+ }
635
+
636
+ .extractor-swatch {
637
+ text-align: center;
638
+ }
639
+
640
+ .extractor-swatch-color {
641
+ width: 40px;
642
+ height: 40px;
643
+ border: 1px solid #333;
644
+ }
645
+
646
+ .extractor-swatch-hex {
647
+ font-family: 'JetBrains Mono', monospace;
648
+ font-size: 9px;
649
+ color: #666;
650
+ margin-top: 4px;
651
+ }
652
+
653
+ .extractor-fonts {
654
+ font-family: 'JetBrains Mono', monospace;
655
+ font-size: 14px;
656
+ color: #ccc;
657
+ }
658
+
659
+ .extractor-a11y {
660
+ display: flex;
661
+ align-items: center;
662
+ gap: 16px;
663
+ }
664
+
665
+ .extractor-a11y-score {
666
+ font-family: 'Unbounded', sans-serif;
667
+ font-size: 18px;
668
+ font-weight: 700;
669
+ }
670
+
671
+ .extractor-a11y-score.good { color: #4ade80; }
672
+ .extractor-a11y-score.ok { color: var(--yellow); }
673
+ .extractor-a11y-score.bad { color: var(--red); }
674
+
675
+ .extractor-a11y-fails {
676
+ font-family: 'JetBrains Mono', monospace;
677
+ font-size: 12px;
678
+ color: #888;
679
+ }
680
+
681
+ .extractor-files {
682
+ display: flex;
683
+ flex-direction: column;
684
+ gap: 4px;
685
+ }
686
+
687
+ .extractor-file {
688
+ display: flex;
689
+ justify-content: space-between;
690
+ padding: 6px 0;
691
+ border-bottom: 1px solid #1a1a1a;
692
+ }
693
+
694
+ .extractor-file:last-child {
695
+ border-bottom: none;
696
+ }
697
+
698
+ .extractor-file-name {
699
+ font-family: 'JetBrains Mono', monospace;
700
+ font-size: 13px;
701
+ color: var(--yellow);
702
+ }
703
+
704
+ .extractor-file-size {
705
+ font-family: 'JetBrains Mono', monospace;
706
+ font-size: 12px;
707
+ color: #555;
708
+ }
709
+
710
+ /* ── RESPONSIVE ── */
711
+ @media (max-width: 768px) {
712
+ .features-list { grid-template-columns: 1fr; }
713
+ .commands-grid { grid-template-columns: 1fr; }
714
+ .files-grid { grid-template-columns: 1fr; }
715
+ .stats-strip { flex-direction: column; }
716
+ .stat { border-right: none; border-bottom: 1px solid #222; }
717
+ .hero-cmd { font-size: 14px; padding: 16px 24px; }
718
+ .extractor-form { flex-direction: column; }
719
+ .extractor-input { border-right: 2px solid var(--black); border-bottom: none; }
720
+ .extractor-stats-grid { grid-template-columns: repeat(2, 1fr); }
721
+ .extractor-stat:nth-child(3n) { border-right: 1px solid #222; }
722
+ .extractor-stat:nth-child(2n) { border-right: none; }
723
+ }
@@ -0,0 +1,19 @@
1
+ import "./globals.css";
2
+
3
+ export const metadata = {
4
+ title: "DESIGNLANG — Reverse-Engineer Any Website's Design System",
5
+ description: "One command. 8 output files. Colors, typography, spacing, layout, accessibility, interactions, and more. npx designlang",
6
+ };
7
+
8
+ export default function RootLayout({ children }) {
9
+ return (
10
+ <html lang="en">
11
+ <head>
12
+ <link rel="preconnect" href="https://fonts.googleapis.com" />
13
+ <link rel="preconnect" href="https://fonts.gstatic.com" crossOrigin="" />
14
+ <link href="https://fonts.googleapis.com/css2?family=Unbounded:wght@400;700;900&family=JetBrains+Mono:wght@400;700&family=Inter:wght@400;500;600&display=swap" rel="stylesheet" />
15
+ </head>
16
+ <body>{children}</body>
17
+ </html>
18
+ );
19
+ }