create-warlock 5.2.3 → 5.3.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.
Files changed (46) hide show
  1. package/esm/commands/create-new-app/index.mjs.map +1 -1
  2. package/esm/commands/create-warlock-app/index.mjs +1 -1
  3. package/esm/commands/create-warlock-app/index.mjs.map +1 -1
  4. package/esm/features/database-drivers.mjs.map +1 -1
  5. package/esm/features/features-map.mjs.map +1 -1
  6. package/esm/helpers/app.mjs +44 -17
  7. package/esm/helpers/app.mjs.map +1 -1
  8. package/esm/helpers/exec.mjs.map +1 -1
  9. package/esm/helpers/package-manager.mjs.map +1 -1
  10. package/esm/helpers/warlock-versions.mjs.map +1 -1
  11. package/esm/index.mjs.map +1 -1
  12. package/package.json +2 -2
  13. package/templates/warlock/eslint.config.js +98 -98
  14. package/templates/warlock/postcss.config.mjs +6 -0
  15. package/templates/warlock/src/app/contact/controllers/contact.controller.ts +21 -0
  16. package/templates/warlock/src/app/contact/routes.ts +4 -0
  17. package/templates/warlock/src/app/{shared → home}/controllers/home-page.controller.ts +1 -7
  18. package/templates/warlock/src/app/home/services/home.service.ts +86 -0
  19. package/templates/warlock/src/app/locale/controllers/locale.controller.ts +16 -0
  20. package/templates/warlock/src/app/locale/routes.ts +4 -0
  21. package/templates/warlock/src/shared/contact.schema.ts +7 -0
  22. package/templates/warlock/src/shared/locale.schema.ts +11 -0
  23. package/templates/warlock/src/shared/locales.ts +7 -0
  24. package/templates/warlock/src/web/404.css +113 -0
  25. package/templates/warlock/src/web/404.page.tsx +23 -0
  26. package/templates/warlock/src/web/app.css +3 -0
  27. package/templates/warlock/src/web/home/components/contact-form-controls.tsx +42 -0
  28. package/templates/warlock/src/web/home/components/contact-section.tsx +108 -0
  29. package/templates/warlock/src/web/home/components/content-sections.tsx +61 -0
  30. package/templates/warlock/src/web/home/components/hero-section.tsx +68 -0
  31. package/templates/warlock/src/web/home/components/home-footer.tsx +35 -0
  32. package/templates/warlock/src/web/home/components/home-header.tsx +26 -0
  33. package/templates/warlock/src/web/home/components/logo.tsx +19 -0
  34. package/templates/warlock/src/web/home/components/runtime-preview.tsx +75 -0
  35. package/templates/warlock/src/web/home/hooks/use-contact-form.ts +57 -0
  36. package/templates/warlock/src/web/home/hooks/use-locale-switcher.ts +35 -0
  37. package/templates/warlock/src/web/home/index.page.tsx +44 -0
  38. package/templates/warlock/src/web/home/register.ts +30 -0
  39. package/templates/warlock/src/web/home/styles/home.css +1185 -0
  40. package/templates/warlock/src/web/root.tsx +49 -0
  41. package/templates/warlock/src/web/shared/utils/set-form-errors.ts +60 -0
  42. package/templates/warlock/tsconfig.json +3 -1
  43. package/templates/warlock/public/home.css +0 -523
  44. package/templates/warlock/src/app/shared/components/HomePageComponent.tsx +0 -229
  45. package/templates/warlock/src/app/shared/controllers/home-page.controller.tsx +0 -17
  46. /package/templates/warlock/src/app/{shared → home}/routes.ts +0 -0
@@ -0,0 +1,1185 @@
1
+ :root {
2
+ color-scheme: dark;
3
+ --warlock-ink: #0a0e1a;
4
+ --warlock-panel: #10141f;
5
+ --warlock-surface-darker: #070a13;
6
+ --warlock-line: rgba(255, 255, 255, 0.08);
7
+ --warlock-text: #f8fafc;
8
+ --warlock-muted: #94a3b8;
9
+ --warlock-yellow: #facc15;
10
+ --warlock-yellow-bright: #fde047;
11
+ --warlock-yellow-glow: rgba(250, 204, 21, 0.18);
12
+ --warlock-font-sans:
13
+ -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif;
14
+ --warlock-font-mono: "Cascadia Code", "SFMono-Regular", Consolas, "Liberation Mono", monospace;
15
+ }
16
+
17
+ * {
18
+ box-sizing: border-box;
19
+ }
20
+
21
+ html {
22
+ scroll-behavior: smooth;
23
+ }
24
+
25
+ body {
26
+ margin: 0;
27
+ background: var(--warlock-ink);
28
+ color: var(--warlock-text);
29
+ font-family: var(--warlock-font-sans);
30
+ font-synthesis: none;
31
+ }
32
+
33
+ button,
34
+ a {
35
+ font: inherit;
36
+ }
37
+
38
+ a {
39
+ color: inherit;
40
+ }
41
+
42
+ .warlock-home {
43
+ min-height: 100vh;
44
+ overflow: hidden;
45
+ background:
46
+ radial-gradient(circle at 82% 10%, rgba(250, 204, 21, 0.12), transparent 28rem),
47
+ radial-gradient(circle at 5% 38%, rgba(148, 163, 184, 0.06), transparent 25rem),
48
+ var(--warlock-ink);
49
+ }
50
+
51
+ .warlock-nav {
52
+ position: relative;
53
+ z-index: 20;
54
+ width: min(1180px, calc(100% - 48px));
55
+ min-height: 78px;
56
+ margin: 0 auto;
57
+ display: grid;
58
+ grid-template-columns: 1fr auto 1fr;
59
+ align-items: center;
60
+ gap: 28px;
61
+ border-bottom: 1px solid var(--warlock-line);
62
+ }
63
+
64
+ .warlock-brand {
65
+ display: inline-flex;
66
+ align-items: center;
67
+ gap: 10px;
68
+ width: max-content;
69
+ color: var(--warlock-text);
70
+ text-decoration: none;
71
+ }
72
+
73
+ .warlock-logo-shell {
74
+ width: 36px;
75
+ height: 36px;
76
+ display: grid;
77
+ place-items: center;
78
+ overflow: hidden;
79
+ border: 1px solid rgba(250, 204, 21, 0.35);
80
+ border-radius: 11px;
81
+ background: linear-gradient(145deg, rgba(250, 204, 21, 0.2), rgba(255, 255, 255, 0.03));
82
+ box-shadow: inset 0 0 18px rgba(250, 204, 21, 0.1);
83
+ }
84
+
85
+ .warlock-logo {
86
+ display: block;
87
+ width: 28px;
88
+ height: 28px;
89
+ object-fit: contain;
90
+ }
91
+
92
+ .warlock-wordmark {
93
+ font-size: 1rem;
94
+ font-weight: 700;
95
+ letter-spacing: -0.025em;
96
+ }
97
+
98
+ .warlock-version {
99
+ padding: 3px 7px;
100
+ border: 1px solid var(--warlock-line);
101
+ border-radius: 999px;
102
+ color: var(--warlock-muted);
103
+ font-size: 0.66rem;
104
+ font-weight: 700;
105
+ text-transform: uppercase;
106
+ }
107
+
108
+ .warlock-nav-links {
109
+ display: flex;
110
+ align-items: center;
111
+ gap: 30px;
112
+ }
113
+
114
+ .warlock-nav-links a,
115
+ .warlock-footer a {
116
+ color: var(--warlock-muted);
117
+ font-size: 0.84rem;
118
+ font-weight: 600;
119
+ text-decoration: none;
120
+ transition: color 160ms ease;
121
+ }
122
+
123
+ .warlock-nav-links a:hover,
124
+ .warlock-footer a:hover {
125
+ color: var(--warlock-text);
126
+ }
127
+
128
+ .warlock-nav-cta {
129
+ justify-self: end;
130
+ display: inline-flex;
131
+ align-items: center;
132
+ gap: 9px;
133
+ padding: 10px 15px;
134
+ border: 1px solid var(--warlock-line);
135
+ border-radius: 10px;
136
+ color: var(--warlock-text);
137
+ background: rgba(255, 255, 255, 0.035);
138
+ font-size: 0.78rem;
139
+ font-weight: 600;
140
+ text-decoration: none;
141
+ transition:
142
+ border-color 160ms ease,
143
+ background 160ms ease,
144
+ transform 160ms ease;
145
+ }
146
+
147
+ .warlock-nav-cta:hover {
148
+ transform: translateY(-1px);
149
+ border-color: rgba(250, 204, 21, 0.4);
150
+ background: rgba(250, 204, 21, 0.08);
151
+ }
152
+
153
+ .warlock-hero {
154
+ position: relative;
155
+ width: min(1180px, calc(100% - 48px));
156
+ min-height: 680px;
157
+ margin: 0 auto;
158
+ padding: 110px 0 92px;
159
+ display: grid;
160
+ grid-template-columns: 1.02fr 0.98fr;
161
+ align-items: center;
162
+ gap: 68px;
163
+ }
164
+
165
+ .warlock-hero::before {
166
+ content: "";
167
+ position: absolute;
168
+ inset: 0 50% 0 auto;
169
+ width: 1px;
170
+ background: linear-gradient(transparent, rgba(255, 255, 255, 0.08), transparent);
171
+ }
172
+
173
+ .warlock-orbit {
174
+ position: absolute;
175
+ pointer-events: none;
176
+ border: 1px solid rgba(250, 204, 21, 0.1);
177
+ border-radius: 50%;
178
+ }
179
+
180
+ .warlock-orbit-one {
181
+ top: -250px;
182
+ right: -210px;
183
+ width: 720px;
184
+ height: 720px;
185
+ }
186
+
187
+ .warlock-orbit-two {
188
+ top: -135px;
189
+ right: -95px;
190
+ width: 490px;
191
+ height: 490px;
192
+ }
193
+
194
+ .warlock-hero-copy,
195
+ .warlock-hero-stage {
196
+ position: relative;
197
+ z-index: 2;
198
+ }
199
+
200
+ .warlock-kicker,
201
+ .warlock-overline {
202
+ margin: 0 0 22px;
203
+ color: var(--warlock-yellow-bright);
204
+ font-size: 0.7rem;
205
+ font-weight: 800;
206
+ letter-spacing: 0.17em;
207
+ text-transform: uppercase;
208
+ }
209
+
210
+ .warlock-kicker {
211
+ display: flex;
212
+ align-items: center;
213
+ gap: 10px;
214
+ }
215
+
216
+ .warlock-kicker-dot {
217
+ width: 7px;
218
+ height: 7px;
219
+ border-radius: 50%;
220
+ background: var(--warlock-yellow);
221
+ box-shadow: 0 0 16px rgba(250, 204, 21, 0.65);
222
+ }
223
+
224
+ .warlock-hero h1,
225
+ .warlock-section h2,
226
+ .warlock-cta h2 {
227
+ margin: 0;
228
+ font-family: var(--warlock-font-sans);
229
+ font-weight: 700;
230
+ letter-spacing: -0.045em;
231
+ }
232
+
233
+ .warlock-hero h1 {
234
+ max-width: 650px;
235
+ font-size: clamp(4.1rem, 7.1vw, 6.9rem);
236
+ line-height: 0.94;
237
+ }
238
+
239
+ .warlock-hero h1 span {
240
+ display: block;
241
+ color: transparent;
242
+ background: linear-gradient(
243
+ 105deg,
244
+ var(--warlock-yellow-bright) 5%,
245
+ var(--warlock-yellow) 65%,
246
+ var(--warlock-text) 115%
247
+ );
248
+ -webkit-background-clip: text;
249
+ background-clip: text;
250
+ }
251
+
252
+ .warlock-hero-lede {
253
+ max-width: 590px;
254
+ margin: 30px 0 0;
255
+ color: var(--warlock-muted);
256
+ font-size: clamp(1rem, 1.4vw, 1.18rem);
257
+ line-height: 1.75;
258
+ }
259
+
260
+ .warlock-hero-actions {
261
+ display: flex;
262
+ flex-wrap: wrap;
263
+ gap: 12px;
264
+ margin-top: 36px;
265
+ }
266
+
267
+ .warlock-button {
268
+ min-height: 48px;
269
+ display: inline-flex;
270
+ align-items: center;
271
+ justify-content: center;
272
+ gap: 12px;
273
+ padding: 0 20px;
274
+ border-radius: 11px;
275
+ font-size: 0.82rem;
276
+ font-weight: 700;
277
+ text-decoration: none;
278
+ transition:
279
+ transform 160ms ease,
280
+ box-shadow 160ms ease,
281
+ border-color 160ms ease;
282
+ }
283
+
284
+ .warlock-button:hover {
285
+ transform: translateY(-2px);
286
+ }
287
+
288
+ .warlock-button-primary {
289
+ color: var(--warlock-surface-darker);
290
+ background: linear-gradient(120deg, var(--warlock-yellow-bright), var(--warlock-yellow));
291
+ box-shadow: 0 16px 40px rgba(250, 204, 21, 0.18);
292
+ }
293
+
294
+ .warlock-button-primary:hover {
295
+ box-shadow: 0 18px 46px rgba(250, 204, 21, 0.3);
296
+ }
297
+
298
+ .warlock-button-ghost {
299
+ border: 1px solid var(--warlock-line);
300
+ color: var(--warlock-text);
301
+ background: rgba(255, 255, 255, 0.025);
302
+ }
303
+
304
+ .warlock-button-ghost:hover {
305
+ border-color: rgba(250, 204, 21, 0.35);
306
+ }
307
+
308
+ .warlock-hero-stats {
309
+ display: flex;
310
+ gap: 36px;
311
+ margin: 50px 0 0;
312
+ }
313
+
314
+ .warlock-hero-stats div {
315
+ position: relative;
316
+ padding-left: 14px;
317
+ }
318
+
319
+ .warlock-hero-stats div::before {
320
+ content: "";
321
+ position: absolute;
322
+ top: 2px;
323
+ bottom: 2px;
324
+ left: 0;
325
+ width: 1px;
326
+ background: linear-gradient(var(--warlock-yellow), transparent);
327
+ }
328
+
329
+ .warlock-hero-stats dt {
330
+ font-family: var(--warlock-font-sans);
331
+ font-size: 1.55rem;
332
+ font-weight: 700;
333
+ }
334
+
335
+ .warlock-hero-stats dd {
336
+ margin: 4px 0 0;
337
+ color: var(--warlock-muted);
338
+ font-size: 0.69rem;
339
+ }
340
+
341
+ .warlock-hero-stage {
342
+ min-width: 0;
343
+ }
344
+
345
+ .warlock-glow {
346
+ position: absolute;
347
+ inset: 8% 5% 0;
348
+ border-radius: 50%;
349
+ background: rgba(250, 204, 21, 0.22);
350
+ filter: blur(90px);
351
+ }
352
+
353
+ .warlock-terminal {
354
+ position: relative;
355
+ overflow: hidden;
356
+ border: 1px solid rgba(250, 204, 21, 0.16);
357
+ border-radius: 21px;
358
+ background: rgba(7, 10, 19, 0.94);
359
+ box-shadow:
360
+ 0 40px 90px rgba(0, 0, 0, 0.48),
361
+ inset 0 1px rgba(255, 255, 255, 0.04);
362
+ backdrop-filter: blur(22px);
363
+ }
364
+
365
+ .warlock-terminal::after {
366
+ content: "";
367
+ position: absolute;
368
+ inset: 0;
369
+ pointer-events: none;
370
+ background: linear-gradient(130deg, rgba(255, 255, 255, 0.035), transparent 28%);
371
+ }
372
+
373
+ .warlock-terminal-bar {
374
+ height: 52px;
375
+ display: grid;
376
+ grid-template-columns: 1fr auto 1fr;
377
+ align-items: center;
378
+ padding: 0 18px;
379
+ border-bottom: 1px solid var(--warlock-line);
380
+ color: var(--warlock-muted);
381
+ font-family: var(--warlock-font-mono);
382
+ font-size: 0.66rem;
383
+ }
384
+
385
+ .warlock-terminal-dots {
386
+ display: flex;
387
+ gap: 6px;
388
+ }
389
+
390
+ .warlock-terminal-dots span {
391
+ width: 7px;
392
+ height: 7px;
393
+ border-radius: 50%;
394
+ background: #475569;
395
+ }
396
+
397
+ .warlock-terminal-dots span:nth-child(1) {
398
+ background: #ff7b77;
399
+ }
400
+ .warlock-terminal-dots span:nth-child(2) {
401
+ background: #e9c56b;
402
+ }
403
+ .warlock-terminal-dots span:nth-child(3) {
404
+ background: #65d39d;
405
+ }
406
+
407
+ .warlock-terminal-live {
408
+ justify-self: end;
409
+ color: var(--warlock-yellow-bright);
410
+ text-transform: uppercase;
411
+ letter-spacing: 0.12em;
412
+ }
413
+
414
+ .warlock-code {
415
+ min-height: 335px;
416
+ margin: 0;
417
+ padding: 46px 42px 34px;
418
+ color: #cbd5e1;
419
+ font-family: var(--warlock-font-mono);
420
+ font-size: clamp(0.75rem, 1.15vw, 0.92rem);
421
+ line-height: 1.85;
422
+ white-space: pre-wrap;
423
+ }
424
+
425
+ .warlock-code-spacer {
426
+ height: 1.85em;
427
+ }
428
+
429
+ .warlock-code-indent {
430
+ padding-left: 2ch;
431
+ }
432
+
433
+ .code-purple {
434
+ color: var(--warlock-yellow-bright);
435
+ }
436
+ .code-green {
437
+ color: #fef08a;
438
+ }
439
+ .code-blue {
440
+ color: #cbd5e1;
441
+ }
442
+
443
+ .warlock-runtime {
444
+ position: relative;
445
+ z-index: 2;
446
+ min-height: 88px;
447
+ display: flex;
448
+ align-items: center;
449
+ justify-content: space-between;
450
+ gap: 20px;
451
+ padding: 18px 22px;
452
+ border-top: 1px solid var(--warlock-line);
453
+ background: rgba(255, 255, 255, 0.025);
454
+ }
455
+
456
+ .warlock-runtime > div {
457
+ display: flex;
458
+ align-items: center;
459
+ gap: 12px;
460
+ }
461
+
462
+ .warlock-runtime-pulse {
463
+ width: 9px;
464
+ height: 9px;
465
+ border-radius: 50%;
466
+ background: var(--warlock-yellow);
467
+ box-shadow:
468
+ 0 0 0 6px rgba(250, 204, 21, 0.08),
469
+ 0 0 18px rgba(250, 204, 21, 0.48);
470
+ }
471
+
472
+ .warlock-runtime strong,
473
+ .warlock-runtime small {
474
+ display: block;
475
+ }
476
+
477
+ .warlock-runtime strong {
478
+ font-size: 0.76rem;
479
+ }
480
+
481
+ .warlock-runtime small {
482
+ margin-top: 4px;
483
+ color: var(--warlock-muted);
484
+ font-size: 0.62rem;
485
+ }
486
+
487
+ .warlock-runtime-marks {
488
+ display: flex;
489
+ align-items: center;
490
+ gap: 6px;
491
+ }
492
+
493
+ .warlock-runtime-marks span {
494
+ padding: 7px 9px;
495
+ border: 1px solid rgba(250, 204, 21, 0.2);
496
+ border-radius: 999px;
497
+ color: var(--warlock-yellow-bright);
498
+ background: rgba(250, 204, 21, 0.08);
499
+ font-size: 0.58rem;
500
+ font-weight: 700;
501
+ letter-spacing: 0.08em;
502
+ text-transform: uppercase;
503
+ }
504
+
505
+ .warlock-stage-note {
506
+ position: absolute;
507
+ z-index: 5;
508
+ display: flex;
509
+ align-items: center;
510
+ gap: 10px;
511
+ padding: 10px 13px;
512
+ border: 1px solid var(--warlock-line);
513
+ border-radius: 10px;
514
+ color: var(--warlock-muted);
515
+ background: rgba(16, 20, 31, 0.92);
516
+ box-shadow: 0 12px 35px rgba(0, 0, 0, 0.3);
517
+ font-size: 0.63rem;
518
+ backdrop-filter: blur(16px);
519
+ }
520
+
521
+ .warlock-stage-note span {
522
+ color: var(--warlock-yellow-bright);
523
+ font-size: 0.58rem;
524
+ font-weight: 900;
525
+ letter-spacing: 0.12em;
526
+ }
527
+
528
+ .warlock-stage-note-top {
529
+ top: 18%;
530
+ right: -45px;
531
+ }
532
+
533
+ .warlock-stage-note-bottom {
534
+ bottom: 16%;
535
+ left: -42px;
536
+ }
537
+
538
+ .warlock-trust {
539
+ width: min(1180px, calc(100% - 48px));
540
+ margin: 0 auto;
541
+ padding: 30px 0;
542
+ display: flex;
543
+ align-items: center;
544
+ justify-content: space-between;
545
+ gap: 30px;
546
+ border-top: 1px solid var(--warlock-line);
547
+ border-bottom: 1px solid var(--warlock-line);
548
+ }
549
+
550
+ .warlock-trust p {
551
+ margin: 0;
552
+ color: var(--warlock-muted);
553
+ font-size: 0.7rem;
554
+ }
555
+
556
+ .warlock-trust div {
557
+ display: flex;
558
+ flex-wrap: wrap;
559
+ justify-content: flex-end;
560
+ gap: 10px;
561
+ }
562
+
563
+ .warlock-trust span {
564
+ padding: 6px 10px;
565
+ border: 1px solid var(--warlock-line);
566
+ border-radius: 999px;
567
+ color: var(--warlock-muted);
568
+ font-size: 0.62rem;
569
+ font-weight: 700;
570
+ }
571
+
572
+ .warlock-section {
573
+ width: min(1180px, calc(100% - 48px));
574
+ margin: 0 auto;
575
+ padding: 135px 0;
576
+ }
577
+
578
+ .warlock-section-heading {
579
+ max-width: 700px;
580
+ }
581
+
582
+ .warlock-section h2,
583
+ .warlock-cta h2 {
584
+ font-size: clamp(2.9rem, 5.4vw, 5.4rem);
585
+ line-height: 0.98;
586
+ }
587
+
588
+ .warlock-section-heading > p:last-child,
589
+ .warlock-package-copy > p,
590
+ .warlock-contact-copy > p,
591
+ .warlock-cta > p:not(.warlock-overline) {
592
+ color: var(--warlock-muted);
593
+ line-height: 1.75;
594
+ }
595
+
596
+ .warlock-section-heading > p:last-child {
597
+ max-width: 590px;
598
+ margin: 28px 0 0;
599
+ }
600
+
601
+ .warlock-feature-grid {
602
+ margin-top: 68px;
603
+ display: grid;
604
+ grid-template-columns: repeat(2, 1fr);
605
+ border-top: 1px solid var(--warlock-line);
606
+ border-left: 1px solid var(--warlock-line);
607
+ }
608
+
609
+ .warlock-feature-card {
610
+ min-height: 310px;
611
+ padding: 36px;
612
+ border-right: 1px solid var(--warlock-line);
613
+ border-bottom: 1px solid var(--warlock-line);
614
+ background: linear-gradient(145deg, rgba(255, 255, 255, 0.025), transparent 65%);
615
+ transition: background 200ms ease;
616
+ }
617
+
618
+ .warlock-feature-card:hover {
619
+ background: linear-gradient(145deg, rgba(250, 204, 21, 0.08), transparent 70%);
620
+ }
621
+
622
+ .warlock-feature-meta {
623
+ display: flex;
624
+ align-items: center;
625
+ justify-content: space-between;
626
+ }
627
+
628
+ .warlock-feature-meta span {
629
+ color: var(--warlock-yellow-bright);
630
+ font-family: var(--warlock-font-sans);
631
+ font-size: 1rem;
632
+ font-weight: 700;
633
+ }
634
+
635
+ .warlock-feature-meta small {
636
+ color: var(--warlock-muted);
637
+ font-size: 0.61rem;
638
+ font-weight: 800;
639
+ letter-spacing: 0.13em;
640
+ text-transform: uppercase;
641
+ }
642
+
643
+ .warlock-feature-card h3 {
644
+ margin: 76px 0 18px;
645
+ font-family: var(--warlock-font-sans);
646
+ font-size: clamp(1.65rem, 2.7vw, 2.35rem);
647
+ font-weight: 600;
648
+ letter-spacing: -0.035em;
649
+ }
650
+
651
+ .warlock-feature-card p {
652
+ max-width: 440px;
653
+ margin: 0;
654
+ color: var(--warlock-muted);
655
+ font-size: 0.88rem;
656
+ line-height: 1.72;
657
+ }
658
+
659
+ .warlock-package-section {
660
+ display: grid;
661
+ grid-template-columns: 0.8fr 1.2fr;
662
+ align-items: center;
663
+ gap: 100px;
664
+ border-top: 1px solid var(--warlock-line);
665
+ }
666
+
667
+ .warlock-package-copy h2,
668
+ .warlock-contact-copy h2 {
669
+ font-size: clamp(2.8rem, 4.8vw, 4.8rem);
670
+ }
671
+
672
+ .warlock-package-copy > p,
673
+ .warlock-contact-copy > p {
674
+ margin: 28px 0 0;
675
+ }
676
+
677
+ .warlock-package-copy > a {
678
+ display: inline-flex;
679
+ align-items: center;
680
+ gap: 10px;
681
+ margin-top: 28px;
682
+ color: var(--warlock-yellow-bright);
683
+ font-size: 0.78rem;
684
+ font-weight: 700;
685
+ text-decoration: none;
686
+ }
687
+
688
+ .warlock-package-grid {
689
+ display: grid;
690
+ grid-template-columns: repeat(2, minmax(0, 1fr));
691
+ gap: 12px;
692
+ }
693
+
694
+ .warlock-package {
695
+ min-width: 0;
696
+ padding: 22px;
697
+ border: 1px solid var(--warlock-line);
698
+ border-radius: 12px;
699
+ color: var(--warlock-text);
700
+ background: linear-gradient(145deg, rgba(250, 204, 21, 0.05), rgba(16, 20, 31, 0.94) 55%);
701
+ box-shadow: 0 14px 32px rgba(0, 0, 0, 0.22);
702
+ }
703
+
704
+ .warlock-package small {
705
+ color: var(--warlock-yellow-bright);
706
+ font-size: 0.58rem;
707
+ font-weight: 700;
708
+ letter-spacing: 0.12em;
709
+ text-transform: uppercase;
710
+ }
711
+
712
+ .warlock-package h3 {
713
+ margin: 9px 0 10px;
714
+ font-family: var(--warlock-font-mono);
715
+ font-size: 0.9rem;
716
+ }
717
+
718
+ .warlock-package h3 span {
719
+ color: #64748b;
720
+ font-weight: 400;
721
+ }
722
+
723
+ .warlock-package p {
724
+ margin: 0;
725
+ color: var(--warlock-muted);
726
+ font-size: 0.76rem;
727
+ line-height: 1.6;
728
+ }
729
+
730
+ .warlock-contact {
731
+ display: grid;
732
+ grid-template-columns: 0.85fr 1.15fr;
733
+ align-items: start;
734
+ gap: 100px;
735
+ border-top: 1px solid var(--warlock-line);
736
+ }
737
+
738
+ .warlock-contact-copy > p {
739
+ max-width: 560px;
740
+ }
741
+
742
+ .warlock-contact-flow {
743
+ margin: 38px 0 0;
744
+ padding: 0;
745
+ list-style: none;
746
+ }
747
+
748
+ .warlock-contact-flow li {
749
+ display: grid;
750
+ grid-template-columns: 34px 1fr;
751
+ align-items: center;
752
+ gap: 16px;
753
+ padding: 16px 0;
754
+ border-bottom: 1px solid var(--warlock-line);
755
+ }
756
+
757
+ .warlock-contact-flow > li > span {
758
+ color: var(--warlock-yellow-bright);
759
+ font-family: var(--warlock-font-mono);
760
+ font-size: 0.6rem;
761
+ }
762
+
763
+ .warlock-contact-flow strong,
764
+ .warlock-contact-flow small {
765
+ display: block;
766
+ }
767
+
768
+ .warlock-contact-flow strong {
769
+ font-size: 0.78rem;
770
+ }
771
+
772
+ .warlock-contact-flow small {
773
+ margin-top: 4px;
774
+ color: var(--warlock-muted);
775
+ font-size: 0.65rem;
776
+ }
777
+
778
+ .warlock-contact-form {
779
+ padding: 34px;
780
+ border: 1px solid rgba(250, 204, 21, 0.16);
781
+ border-radius: 18px;
782
+ background: linear-gradient(145deg, rgba(250, 204, 21, 0.05), rgba(16, 20, 31, 0.96) 45%);
783
+ box-shadow: 0 28px 65px rgba(0, 0, 0, 0.28);
784
+ }
785
+
786
+ .warlock-form-heading {
787
+ display: flex;
788
+ align-items: center;
789
+ justify-content: space-between;
790
+ gap: 20px;
791
+ margin-bottom: 28px;
792
+ padding-bottom: 20px;
793
+ border-bottom: 1px solid var(--warlock-line);
794
+ }
795
+
796
+ .warlock-form-heading > div {
797
+ display: flex;
798
+ align-items: center;
799
+ gap: 10px;
800
+ }
801
+
802
+ .warlock-form-heading small,
803
+ .warlock-locale-toggle {
804
+ color: var(--warlock-yellow-bright);
805
+ font-size: 0.58rem;
806
+ font-weight: 700;
807
+ letter-spacing: 0.1em;
808
+ text-transform: uppercase;
809
+ }
810
+
811
+ .warlock-form-heading code {
812
+ color: #cbd5e1;
813
+ font-size: 0.72rem;
814
+ }
815
+
816
+ .warlock-locale-toggle {
817
+ padding: 6px 9px;
818
+ border: 1px solid rgba(250, 204, 21, 0.2);
819
+ border-radius: 999px;
820
+ cursor: pointer;
821
+ background: rgba(250, 204, 21, 0.06);
822
+ }
823
+
824
+ .warlock-locale-toggle:disabled {
825
+ cursor: wait;
826
+ opacity: 0.65;
827
+ }
828
+
829
+ .warlock-contact-form label {
830
+ display: block;
831
+ margin-top: 18px;
832
+ }
833
+
834
+ .warlock-contact-form label > span {
835
+ display: block;
836
+ margin-bottom: 8px;
837
+ color: #cbd5e1;
838
+ font-size: 0.68rem;
839
+ font-weight: 600;
840
+ }
841
+
842
+ .warlock-contact-form input,
843
+ .warlock-contact-form textarea {
844
+ width: 100%;
845
+ border: 1px solid var(--warlock-line);
846
+ border-radius: 10px;
847
+ outline: none;
848
+ color: var(--warlock-text);
849
+ background: rgba(0, 0, 0, 0.24);
850
+ font: 400 0.82rem/1.5 var(--warlock-font-sans);
851
+ transition:
852
+ border-color 160ms ease,
853
+ box-shadow 160ms ease,
854
+ background 160ms ease;
855
+ }
856
+
857
+ .warlock-contact-form input {
858
+ height: 48px;
859
+ padding: 0 14px;
860
+ }
861
+
862
+ .warlock-contact-form textarea {
863
+ min-height: 126px;
864
+ padding: 12px 14px;
865
+ resize: vertical;
866
+ }
867
+
868
+ .warlock-contact-form input::placeholder,
869
+ .warlock-contact-form textarea::placeholder {
870
+ color: #64748b;
871
+ }
872
+
873
+ .warlock-contact-form input:focus,
874
+ .warlock-contact-form textarea:focus {
875
+ border-color: rgba(250, 204, 21, 0.55);
876
+ background: rgba(0, 0, 0, 0.34);
877
+ box-shadow: 0 0 0 3px rgba(250, 204, 21, 0.08);
878
+ }
879
+
880
+ .warlock-contact-submit {
881
+ width: 100%;
882
+ min-height: 50px;
883
+ margin-top: 22px;
884
+ display: flex;
885
+ align-items: center;
886
+ justify-content: space-between;
887
+ padding: 0 16px;
888
+ border: 0;
889
+ border-radius: 10px;
890
+ cursor: pointer;
891
+ color: var(--warlock-surface-darker);
892
+ background: linear-gradient(120deg, var(--warlock-yellow-bright), var(--warlock-yellow));
893
+ font-size: 0.76rem;
894
+ font-weight: 700;
895
+ }
896
+
897
+ .warlock-contact-submit:disabled {
898
+ cursor: wait;
899
+ opacity: 0.65;
900
+ }
901
+
902
+ .warlock-field-error {
903
+ display: block;
904
+ margin-top: 7px;
905
+ color: #ff7b77;
906
+ font-size: 0.62rem;
907
+ line-height: 1.4;
908
+ }
909
+
910
+ .warlock-form-status {
911
+ min-height: 1.2em;
912
+ margin: 14px 2px 0;
913
+ color: var(--warlock-muted);
914
+ font-size: 0.64rem;
915
+ line-height: 1.5;
916
+ }
917
+
918
+ .warlock-form-status.is-success {
919
+ color: var(--warlock-yellow-bright);
920
+ }
921
+
922
+ .warlock-form-status.is-error {
923
+ color: #ff7b77;
924
+ }
925
+
926
+ .warlock-cta {
927
+ position: relative;
928
+ width: min(1180px, calc(100% - 48px));
929
+ margin: 0 auto 76px;
930
+ padding: 105px 24px;
931
+ overflow: hidden;
932
+ border: 1px solid rgba(250, 204, 21, 0.18);
933
+ border-radius: 24px;
934
+ text-align: center;
935
+ background:
936
+ radial-gradient(circle at 50% 0, rgba(250, 204, 21, 0.18), transparent 45%),
937
+ linear-gradient(145deg, var(--warlock-panel), var(--warlock-surface-darker));
938
+ }
939
+
940
+ .warlock-cta-mark {
941
+ position: absolute;
942
+ top: -160px;
943
+ left: 50%;
944
+ color: rgba(255, 255, 255, 0.018);
945
+ font-family: var(--warlock-font-sans);
946
+ font-weight: 700;
947
+ font-size: 36rem;
948
+ line-height: 1;
949
+ transform: translateX(-50%);
950
+ }
951
+
952
+ .warlock-cta > *:not(.warlock-cta-mark) {
953
+ position: relative;
954
+ z-index: 2;
955
+ }
956
+
957
+ .warlock-cta > p:not(.warlock-overline) {
958
+ margin: 24px auto 0;
959
+ }
960
+
961
+ .warlock-command {
962
+ width: min(530px, 100%);
963
+ min-height: 56px;
964
+ margin: 34px auto 0;
965
+ display: flex;
966
+ align-items: center;
967
+ justify-content: space-between;
968
+ gap: 20px;
969
+ padding: 0 18px;
970
+ border: 1px solid var(--warlock-line);
971
+ border-radius: 11px;
972
+ text-align: left;
973
+ background: rgba(0, 0, 0, 0.28);
974
+ }
975
+
976
+ .warlock-command code {
977
+ color: var(--warlock-yellow-bright);
978
+ font-size: 0.78rem;
979
+ }
980
+
981
+ .warlock-command span {
982
+ color: var(--warlock-muted);
983
+ font-size: 0.62rem;
984
+ }
985
+
986
+ .warlock-footer {
987
+ width: min(1180px, calc(100% - 48px));
988
+ min-height: 100px;
989
+ margin: 0 auto;
990
+ display: grid;
991
+ grid-template-columns: 1fr auto 1fr;
992
+ align-items: center;
993
+ gap: 24px;
994
+ border-top: 1px solid var(--warlock-line);
995
+ }
996
+
997
+ .warlock-footer p {
998
+ margin: 0;
999
+ color: #64748b;
1000
+ font-size: 0.68rem;
1001
+ }
1002
+
1003
+ .warlock-footer > div:last-child {
1004
+ justify-self: end;
1005
+ display: flex;
1006
+ gap: 18px;
1007
+ align-items: center;
1008
+ }
1009
+
1010
+ .warlock-footer > div:last-child span {
1011
+ color: #64748b;
1012
+ font-size: 0.62rem;
1013
+ }
1014
+
1015
+ @media (max-width: 1050px) {
1016
+ .warlock-nav {
1017
+ grid-template-columns: 1fr auto;
1018
+ }
1019
+
1020
+ .warlock-nav-links {
1021
+ display: none;
1022
+ }
1023
+
1024
+ .warlock-hero {
1025
+ grid-template-columns: 1fr;
1026
+ gap: 80px;
1027
+ padding-top: 85px;
1028
+ }
1029
+
1030
+ .warlock-hero::before {
1031
+ display: none;
1032
+ }
1033
+
1034
+ .warlock-hero-copy {
1035
+ max-width: 760px;
1036
+ }
1037
+
1038
+ .warlock-hero-stage {
1039
+ width: min(680px, 92%);
1040
+ margin: 0 auto;
1041
+ }
1042
+
1043
+ .warlock-package-section,
1044
+ .warlock-contact {
1045
+ grid-template-columns: 1fr;
1046
+ gap: 68px;
1047
+ }
1048
+
1049
+ .warlock-package-copy {
1050
+ max-width: 650px;
1051
+ }
1052
+
1053
+ .warlock-footer {
1054
+ grid-template-columns: 1fr 1fr;
1055
+ }
1056
+
1057
+ .warlock-footer p {
1058
+ display: none;
1059
+ }
1060
+ }
1061
+
1062
+ @media (max-width: 720px) {
1063
+ .warlock-nav,
1064
+ .warlock-hero,
1065
+ .warlock-trust,
1066
+ .warlock-section,
1067
+ .warlock-cta,
1068
+ .warlock-footer {
1069
+ width: min(100% - 30px, 1180px);
1070
+ }
1071
+
1072
+ .warlock-nav {
1073
+ min-height: 70px;
1074
+ }
1075
+
1076
+ .warlock-nav-cta {
1077
+ padding: 9px 10px;
1078
+ font-size: 0;
1079
+ }
1080
+
1081
+ .warlock-nav-cta span {
1082
+ font-size: 0.9rem;
1083
+ }
1084
+
1085
+ .warlock-hero {
1086
+ min-height: 0;
1087
+ padding: 70px 0 76px;
1088
+ }
1089
+
1090
+ .warlock-hero h1 {
1091
+ font-size: clamp(3.55rem, 18vw, 5.1rem);
1092
+ }
1093
+
1094
+ .warlock-hero-stats {
1095
+ gap: 18px;
1096
+ }
1097
+
1098
+ .warlock-hero-stats dd {
1099
+ max-width: 72px;
1100
+ }
1101
+
1102
+ .warlock-hero-stage {
1103
+ width: 100%;
1104
+ }
1105
+
1106
+ .warlock-stage-note {
1107
+ display: none;
1108
+ }
1109
+
1110
+ .warlock-code {
1111
+ min-height: 300px;
1112
+ padding: 34px 22px;
1113
+ font-size: 0.68rem;
1114
+ }
1115
+
1116
+ .warlock-runtime,
1117
+ .warlock-trust {
1118
+ align-items: flex-start;
1119
+ flex-direction: column;
1120
+ }
1121
+
1122
+ .warlock-trust div {
1123
+ justify-content: flex-start;
1124
+ }
1125
+
1126
+ .warlock-section {
1127
+ padding: 94px 0;
1128
+ }
1129
+
1130
+ .warlock-feature-grid {
1131
+ grid-template-columns: 1fr;
1132
+ margin-top: 48px;
1133
+ }
1134
+
1135
+ .warlock-feature-card {
1136
+ min-height: 280px;
1137
+ padding: 28px;
1138
+ }
1139
+
1140
+ .warlock-package-grid {
1141
+ grid-template-columns: 1fr;
1142
+ }
1143
+
1144
+ .warlock-contact-form {
1145
+ padding: 22px;
1146
+ }
1147
+
1148
+ .warlock-form-heading {
1149
+ align-items: flex-start;
1150
+ flex-direction: column;
1151
+ }
1152
+
1153
+ .warlock-cta {
1154
+ margin-bottom: 30px;
1155
+ padding: 82px 18px;
1156
+ }
1157
+
1158
+ .warlock-command {
1159
+ align-items: flex-start;
1160
+ flex-direction: column;
1161
+ padding: 16px;
1162
+ }
1163
+
1164
+ .warlock-footer {
1165
+ padding: 30px 0;
1166
+ grid-template-columns: 1fr;
1167
+ }
1168
+
1169
+ .warlock-footer > div:last-child {
1170
+ justify-self: start;
1171
+ flex-wrap: wrap;
1172
+ }
1173
+ }
1174
+
1175
+ @media (prefers-reduced-motion: reduce) {
1176
+ html {
1177
+ scroll-behavior: auto;
1178
+ }
1179
+
1180
+ *,
1181
+ *::before,
1182
+ *::after {
1183
+ transition-duration: 0.01ms !important;
1184
+ }
1185
+ }