ccnew 0.1.10

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 (62) hide show
  1. package/README.md +107 -0
  2. package/build/icon.ico +0 -0
  3. package/build/icon.png +0 -0
  4. package/core/apply.js +152 -0
  5. package/core/backup.js +53 -0
  6. package/core/constants.js +78 -0
  7. package/core/desktop-service.js +403 -0
  8. package/core/desktop-state.js +1021 -0
  9. package/core/index.js +1468 -0
  10. package/core/paths.js +99 -0
  11. package/core/presets.js +171 -0
  12. package/core/probe.js +70 -0
  13. package/core/routing.js +334 -0
  14. package/core/store.js +218 -0
  15. package/core/utils.js +225 -0
  16. package/core/writers/codex.js +102 -0
  17. package/core/writers/index.js +16 -0
  18. package/core/writers/openclaw.js +93 -0
  19. package/core/writers/opencode.js +91 -0
  20. package/desktop/assets/fml-icon.png +0 -0
  21. package/desktop/assets/march-mark.svg +26 -0
  22. package/desktop/main.js +275 -0
  23. package/desktop/preload.cjs +67 -0
  24. package/desktop/preload.js +49 -0
  25. package/desktop/renderer/app.js +327 -0
  26. package/desktop/renderer/index.html +130 -0
  27. package/desktop/renderer/styles.css +490 -0
  28. package/package.json +111 -0
  29. package/scripts/build-web.mjs +95 -0
  30. package/scripts/desktop-dev.mjs +90 -0
  31. package/scripts/desktop-pack-win.mjs +81 -0
  32. package/scripts/postinstall.mjs +49 -0
  33. package/scripts/prepublish-check.mjs +57 -0
  34. package/scripts/serve-site.mjs +51 -0
  35. package/site/app.js +10 -0
  36. package/site/assets/fml-icon.png +0 -0
  37. package/site/assets/march-mark.svg +26 -0
  38. package/site/index.html +337 -0
  39. package/site/styles.css +840 -0
  40. package/src/App.tsx +1557 -0
  41. package/src/components/layout/app-sidebar.tsx +103 -0
  42. package/src/components/layout/top-toolbar.tsx +44 -0
  43. package/src/components/layout/workspace-tabs.tsx +32 -0
  44. package/src/components/providers/inspector-panel.tsx +84 -0
  45. package/src/components/providers/metric-strip.tsx +26 -0
  46. package/src/components/providers/provider-editor.tsx +87 -0
  47. package/src/components/providers/provider-table.tsx +85 -0
  48. package/src/components/ui/logo-mark.tsx +32 -0
  49. package/src/features/mcp/mcp-view.tsx +45 -0
  50. package/src/features/prompts/prompts-view.tsx +40 -0
  51. package/src/features/providers/providers-view.tsx +40 -0
  52. package/src/features/providers/types.ts +26 -0
  53. package/src/features/skills/skills-view.tsx +44 -0
  54. package/src/hooks/use-control-workspace.ts +235 -0
  55. package/src/index.css +22 -0
  56. package/src/lib/client.ts +726 -0
  57. package/src/lib/query-client.ts +3 -0
  58. package/src/lib/workspace-sections.ts +34 -0
  59. package/src/main.tsx +14 -0
  60. package/src/types.ts +137 -0
  61. package/src/vite-env.d.ts +64 -0
  62. package/src-tauri/README.md +11 -0
@@ -0,0 +1,840 @@
1
+ :root {
2
+ --bg: #06070b;
3
+ --bg-strong: #0f131a;
4
+ --panel: rgba(14, 17, 24, 0.78);
5
+ --panel-strong: rgba(18, 23, 32, 0.88);
6
+ --line: rgba(255, 255, 255, 0.1);
7
+ --ink: rgba(255, 255, 255, 0.96);
8
+ --muted: rgba(222, 229, 239, 0.72);
9
+ --accent: #8ec5ff;
10
+ --accent-soft: rgba(142, 197, 255, 0.12);
11
+ --accent-strong: #5b9dff;
12
+ --gold: #ff9159;
13
+ --rose: #ff5fa2;
14
+ --shadow: 0 28px 90px rgba(0, 0, 0, 0.42);
15
+ }
16
+
17
+ * {
18
+ box-sizing: border-box;
19
+ }
20
+
21
+ html {
22
+ scroll-behavior: smooth;
23
+ }
24
+
25
+ body {
26
+ margin: 0;
27
+ font-family: "Manrope", "Segoe UI Variable", "PingFang SC", sans-serif;
28
+ color: var(--ink);
29
+ background:
30
+ radial-gradient(900px 640px at 12% 10%, rgba(91, 157, 255, 0.36), rgba(0, 0, 0, 0) 58%),
31
+ radial-gradient(840px 600px at 88% 16%, rgba(255, 95, 162, 0.24), rgba(0, 0, 0, 0) 62%),
32
+ radial-gradient(960px 720px at 50% 100%, rgba(255, 145, 89, 0.18), rgba(0, 0, 0, 0) 60%),
33
+ linear-gradient(180deg, #090b11 0%, #05060a 100%);
34
+ }
35
+
36
+ body::before,
37
+ body::after {
38
+ content: "";
39
+ position: fixed;
40
+ inset: -10%;
41
+ pointer-events: none;
42
+ }
43
+
44
+ body::before {
45
+ background:
46
+ repeating-linear-gradient(
47
+ 90deg,
48
+ rgba(255, 255, 255, 0.025) 0,
49
+ rgba(255, 255, 255, 0.025) 1px,
50
+ transparent 1px,
51
+ transparent 52px
52
+ ),
53
+ repeating-linear-gradient(
54
+ 0deg,
55
+ rgba(255, 255, 255, 0.025) 0,
56
+ rgba(255, 255, 255, 0.025) 1px,
57
+ transparent 1px,
58
+ transparent 52px
59
+ );
60
+ opacity: 0.32;
61
+ transform: rotate(-7deg);
62
+ }
63
+
64
+ body::after {
65
+ background:
66
+ radial-gradient(700px 460px at 20% 18%, rgba(142, 197, 255, 0.18), rgba(0, 0, 0, 0) 62%),
67
+ radial-gradient(720px 520px at 84% 20%, rgba(255, 95, 162, 0.14), rgba(0, 0, 0, 0) 66%),
68
+ radial-gradient(860px 620px at 52% 88%, rgba(255, 145, 89, 0.14), rgba(0, 0, 0, 0) 64%);
69
+ filter: blur(28px);
70
+ opacity: 0.95;
71
+ }
72
+
73
+ a {
74
+ color: inherit;
75
+ text-decoration: none;
76
+ }
77
+
78
+ button {
79
+ font: inherit;
80
+ }
81
+
82
+ .page-shell {
83
+ position: relative;
84
+ z-index: 1;
85
+ width: min(1320px, calc(100% - 32px));
86
+ margin: 0 auto;
87
+ padding-bottom: 56px;
88
+ }
89
+
90
+ .topbar {
91
+ position: sticky;
92
+ top: 16px;
93
+ z-index: 20;
94
+ display: flex;
95
+ align-items: center;
96
+ justify-content: space-between;
97
+ gap: 16px;
98
+ margin: 16px 0 32px;
99
+ padding: 16px 18px;
100
+ border: 1px solid rgba(255, 255, 255, 0.08);
101
+ border-radius: 24px;
102
+ background: rgba(14, 17, 24, 0.68);
103
+ backdrop-filter: blur(18px);
104
+ box-shadow: 0 18px 60px rgba(0, 0, 0, 0.32);
105
+ }
106
+
107
+ .brand {
108
+ display: inline-flex;
109
+ align-items: center;
110
+ gap: 12px;
111
+ }
112
+
113
+ .brand img,
114
+ .sidebar-brand img {
115
+ width: 46px;
116
+ height: 46px;
117
+ }
118
+
119
+ .brand-copy,
120
+ .sidebar-brand div {
121
+ display: grid;
122
+ }
123
+
124
+ .brand-copy strong,
125
+ .sidebar-brand strong,
126
+ .hero h1,
127
+ .workspace-header h2,
128
+ .panel h3,
129
+ .detail-card h2,
130
+ .section-title h2 {
131
+ font-family: "Space Grotesk", "Segoe UI Variable", sans-serif;
132
+ }
133
+
134
+ .brand-copy strong,
135
+ .sidebar-brand strong {
136
+ font-size: 1rem;
137
+ letter-spacing: 0.04em;
138
+ }
139
+
140
+ .brand-copy em,
141
+ .sidebar-brand span,
142
+ .sidebar-label,
143
+ .panel-kicker,
144
+ .eyebrow {
145
+ color: var(--muted);
146
+ font-style: normal;
147
+ font-size: 0.8rem;
148
+ letter-spacing: 0.12em;
149
+ text-transform: uppercase;
150
+ }
151
+
152
+ .hero-eyebrow {
153
+ display: inline-flex;
154
+ align-items: center;
155
+ gap: 10px;
156
+ padding: 9px 14px;
157
+ border-radius: 999px;
158
+ background: rgba(255, 255, 255, 0.04);
159
+ border: 1px solid rgba(255, 255, 255, 0.08);
160
+ color: var(--muted);
161
+ font-size: 0.76rem;
162
+ font-weight: 700;
163
+ letter-spacing: 0.08em;
164
+ text-transform: uppercase;
165
+ }
166
+
167
+ .eyebrow-dot {
168
+ width: 10px;
169
+ height: 10px;
170
+ border-radius: 999px;
171
+ background: var(--accent);
172
+ box-shadow: 0 0 18px rgba(142, 197, 255, 0.58);
173
+ }
174
+
175
+ .topnav {
176
+ display: inline-flex;
177
+ gap: 22px;
178
+ color: var(--muted);
179
+ }
180
+
181
+ .topnav a:hover {
182
+ color: #ffffff;
183
+ }
184
+
185
+ .top-cta,
186
+ .button,
187
+ .header-actions button {
188
+ border-radius: 999px;
189
+ transition: transform 0.2s ease, box-shadow 0.2s ease, background 0.2s ease;
190
+ }
191
+
192
+ .top-cta {
193
+ padding: 12px 18px;
194
+ color: #f7fbff;
195
+ background: linear-gradient(135deg, #5b9dff, #ff5fa2);
196
+ box-shadow: 0 16px 36px rgba(91, 157, 255, 0.22);
197
+ }
198
+
199
+ .top-cta:hover,
200
+ .button:hover,
201
+ .header-actions button:hover,
202
+ .download-card:hover {
203
+ transform: translateY(-2px);
204
+ }
205
+
206
+ .hero {
207
+ position: relative;
208
+ overflow: hidden;
209
+ display: grid;
210
+ grid-template-columns: minmax(0, 0.98fr) minmax(360px, 1.02fr);
211
+ gap: 24px;
212
+ align-items: start;
213
+ padding: 28px;
214
+ border: 1px solid var(--line);
215
+ border-radius: 34px;
216
+ background: linear-gradient(180deg, rgba(18, 24, 34, 0.86), rgba(10, 13, 19, 0.94));
217
+ box-shadow: var(--shadow);
218
+ }
219
+
220
+ .hero::before {
221
+ content: "";
222
+ position: absolute;
223
+ inset: -30% auto auto -20%;
224
+ width: 240px;
225
+ height: 240px;
226
+ border-radius: 999px;
227
+ background: radial-gradient(circle, rgba(142, 197, 255, 0.18), rgba(0, 0, 0, 0));
228
+ }
229
+
230
+ .hero::after {
231
+ content: "";
232
+ position: absolute;
233
+ right: -120px;
234
+ top: -100px;
235
+ width: 320px;
236
+ height: 320px;
237
+ border-radius: 999px;
238
+ background: radial-gradient(circle, rgba(255, 95, 162, 0.18), rgba(0, 0, 0, 0));
239
+ }
240
+
241
+ .hero-copy {
242
+ position: relative;
243
+ z-index: 1;
244
+ padding-right: 10px;
245
+ }
246
+
247
+ .hero h1 {
248
+ margin: 18px 0 18px;
249
+ font-size: clamp(3rem, 5vw, 4.8rem);
250
+ line-height: 0.96;
251
+ letter-spacing: -0.05em;
252
+ max-width: 8ch;
253
+ }
254
+
255
+ .hero p,
256
+ .hero-card p,
257
+ .preview-head p,
258
+ .detail-card p,
259
+ .faq-list p,
260
+ .feature-strip p,
261
+ .panel-note {
262
+ color: var(--muted);
263
+ font-size: 1.02rem;
264
+ line-height: 1.7;
265
+ }
266
+
267
+ .hero-actions {
268
+ display: flex;
269
+ gap: 14px;
270
+ margin: 28px 0 26px;
271
+ }
272
+
273
+ .button {
274
+ display: inline-flex;
275
+ align-items: center;
276
+ justify-content: center;
277
+ min-width: 146px;
278
+ padding: 14px 20px;
279
+ border: 1px solid var(--line);
280
+ }
281
+
282
+ .button.primary {
283
+ color: #f7fbff;
284
+ background: linear-gradient(135deg, var(--accent-strong), var(--rose));
285
+ box-shadow: 0 16px 36px rgba(91, 157, 255, 0.24);
286
+ }
287
+
288
+ .button.secondary {
289
+ color: #edf4ff;
290
+ background: rgba(255, 255, 255, 0.04);
291
+ backdrop-filter: blur(14px);
292
+ }
293
+
294
+ .hero-metrics {
295
+ display: grid;
296
+ grid-template-columns: repeat(3, minmax(0, 1fr));
297
+ gap: 14px;
298
+ padding: 0;
299
+ margin: 0;
300
+ list-style: none;
301
+ }
302
+
303
+ .hero-metrics li,
304
+ .hero-card,
305
+ .feature-strip article,
306
+ .detail-card,
307
+ .faq-list article {
308
+ border: 1px solid rgba(255, 255, 255, 0.08);
309
+ border-radius: 24px;
310
+ background: rgba(18, 24, 34, 0.72);
311
+ backdrop-filter: blur(18px);
312
+ box-shadow: var(--shadow);
313
+ }
314
+
315
+ .hero-metrics li {
316
+ display: grid;
317
+ gap: 8px;
318
+ padding: 18px;
319
+ }
320
+
321
+ .hero-metrics strong {
322
+ font-size: 1.3rem;
323
+ }
324
+
325
+ .command-strip {
326
+ display: flex;
327
+ flex-wrap: wrap;
328
+ gap: 10px;
329
+ margin-top: 18px;
330
+ }
331
+
332
+ .command-strip code {
333
+ padding: 12px 16px;
334
+ border-radius: 999px;
335
+ border: 1px solid rgba(255, 255, 255, 0.1);
336
+ background: rgba(255, 255, 255, 0.04);
337
+ color: #edf4ff;
338
+ font-size: 0.95rem;
339
+ }
340
+
341
+ .hero-stack {
342
+ display: grid;
343
+ gap: 16px;
344
+ position: relative;
345
+ z-index: 1;
346
+ }
347
+
348
+ .hero-console {
349
+ position: relative;
350
+ z-index: 1;
351
+ display: grid;
352
+ gap: 16px;
353
+ }
354
+
355
+ .hero-console-grid {
356
+ display: grid;
357
+ grid-template-columns: repeat(2, minmax(0, 1fr));
358
+ gap: 14px;
359
+ }
360
+
361
+ .console-metric,
362
+ .hero-terminal {
363
+ border: 1px solid rgba(255, 255, 255, 0.08);
364
+ border-radius: 26px;
365
+ background: rgba(18, 24, 34, 0.72);
366
+ backdrop-filter: blur(18px);
367
+ box-shadow: var(--shadow);
368
+ }
369
+
370
+ .console-metric {
371
+ display: grid;
372
+ gap: 10px;
373
+ padding: 22px;
374
+ }
375
+
376
+ .console-metric strong {
377
+ font-family: "Space Grotesk", "Segoe UI Variable", sans-serif;
378
+ font-size: 1.46rem;
379
+ letter-spacing: -0.04em;
380
+ overflow-wrap: anywhere;
381
+ }
382
+
383
+ .hero-terminal {
384
+ padding: 16px;
385
+ background:
386
+ radial-gradient(circle at top right, rgba(91, 157, 255, 0.14), transparent 32%),
387
+ linear-gradient(180deg, rgba(13, 17, 25, 0.96), rgba(9, 12, 18, 0.94));
388
+ }
389
+
390
+ .terminal-head {
391
+ display: flex;
392
+ align-items: center;
393
+ justify-content: space-between;
394
+ gap: 12px;
395
+ margin-bottom: 14px;
396
+ }
397
+
398
+ .terminal-head small {
399
+ color: rgba(237, 244, 255, 0.6);
400
+ font-size: 0.78rem;
401
+ letter-spacing: 0.08em;
402
+ text-transform: uppercase;
403
+ }
404
+
405
+ .terminal-lights {
406
+ display: inline-flex;
407
+ gap: 8px;
408
+ }
409
+
410
+ .terminal-lights span {
411
+ width: 10px;
412
+ height: 10px;
413
+ border-radius: 999px;
414
+ background: rgba(255, 255, 255, 0.2);
415
+ }
416
+
417
+ .terminal-lights span:nth-child(1) {
418
+ background: #ff7c76;
419
+ }
420
+
421
+ .terminal-lights span:nth-child(2) {
422
+ background: #ffd166;
423
+ }
424
+
425
+ .terminal-lights span:nth-child(3) {
426
+ background: #5eead4;
427
+ }
428
+
429
+ .terminal-lines {
430
+ display: grid;
431
+ gap: 10px;
432
+ }
433
+
434
+ .terminal-line {
435
+ padding: 13px 14px;
436
+ border-radius: 18px;
437
+ border: 1px solid rgba(255, 255, 255, 0.06);
438
+ background: rgba(255, 255, 255, 0.03);
439
+ font-family: "Cascadia Code", "Consolas", monospace;
440
+ font-size: 0.92rem;
441
+ line-height: 1.6;
442
+ }
443
+
444
+ .terminal-line.prompt {
445
+ color: #eef6ff;
446
+ }
447
+
448
+ .terminal-line.note {
449
+ color: rgba(255, 255, 255, 0.7);
450
+ }
451
+
452
+ .terminal-line.success {
453
+ color: #8ff7d4;
454
+ }
455
+
456
+ .hero-card {
457
+ display: grid;
458
+ gap: 10px;
459
+ padding: 22px;
460
+ }
461
+
462
+ .hero-card-primary {
463
+ background:
464
+ radial-gradient(circle at top right, rgba(91, 157, 255, 0.18), transparent 32%),
465
+ linear-gradient(180deg, rgba(21, 28, 40, 0.96), rgba(12, 17, 25, 0.92));
466
+ }
467
+
468
+ .hero-card-grid {
469
+ display: grid;
470
+ grid-template-columns: repeat(2, minmax(0, 1fr));
471
+ gap: 14px;
472
+ }
473
+
474
+ .hero-card-label {
475
+ color: rgba(237, 244, 255, 0.62);
476
+ font-size: 0.76rem;
477
+ font-weight: 700;
478
+ letter-spacing: 0.12em;
479
+ text-transform: uppercase;
480
+ }
481
+
482
+ .hero-card strong {
483
+ font-family: "Space Grotesk", "Segoe UI Variable", sans-serif;
484
+ font-size: 1.42rem;
485
+ letter-spacing: -0.04em;
486
+ }
487
+
488
+ .hero-card-primary strong {
489
+ font-size: clamp(2rem, 3vw, 2.7rem);
490
+ }
491
+
492
+ .hero-card-tags {
493
+ display: flex;
494
+ flex-wrap: wrap;
495
+ gap: 10px;
496
+ margin-top: 2px;
497
+ }
498
+
499
+ .hero-card-tags span {
500
+ padding: 10px 14px;
501
+ border-radius: 999px;
502
+ background: rgba(255, 255, 255, 0.05);
503
+ border: 1px solid rgba(255, 255, 255, 0.08);
504
+ font-size: 0.84rem;
505
+ font-weight: 700;
506
+ }
507
+
508
+ .preview-shell {
509
+ margin-top: 24px;
510
+ padding: 24px;
511
+ border: 1px solid rgba(255, 255, 255, 0.08);
512
+ border-radius: 34px;
513
+ background: rgba(12, 15, 22, 0.62);
514
+ backdrop-filter: blur(18px);
515
+ box-shadow: var(--shadow);
516
+ }
517
+
518
+ .preview-head,
519
+ .workspace-header,
520
+ .panel-head,
521
+ .row {
522
+ display: flex;
523
+ align-items: center;
524
+ justify-content: space-between;
525
+ gap: 12px;
526
+ }
527
+
528
+ .preview-head {
529
+ margin-bottom: 22px;
530
+ }
531
+
532
+ .preview-head h2,
533
+ .workspace-header h2,
534
+ .section-title h2 {
535
+ margin: 8px 0 0;
536
+ font-size: 2rem;
537
+ letter-spacing: -0.04em;
538
+ }
539
+
540
+ .preview-head p {
541
+ max-width: 420px;
542
+ margin: 0;
543
+ }
544
+
545
+ .app-frame {
546
+ position: relative;
547
+ display: grid;
548
+ grid-template-columns: 248px minmax(0, 1fr);
549
+ border: 1px solid rgba(255, 255, 255, 0.08);
550
+ border-radius: 34px;
551
+ overflow: hidden;
552
+ background: rgba(12, 15, 22, 0.72);
553
+ backdrop-filter: blur(18px);
554
+ box-shadow: 0 28px 80px rgba(0, 0, 0, 0.38);
555
+ }
556
+
557
+ .sidebar {
558
+ display: flex;
559
+ flex-direction: column;
560
+ justify-content: space-between;
561
+ padding: 28px 18px;
562
+ background:
563
+ radial-gradient(circle at top, rgba(91, 157, 255, 0.16), transparent 42%),
564
+ linear-gradient(180deg, rgba(8, 12, 18, 0.98), rgba(13, 18, 28, 0.94));
565
+ color: rgba(248, 252, 252, 0.9);
566
+ }
567
+
568
+ .sidebar-brand {
569
+ display: flex;
570
+ align-items: center;
571
+ gap: 12px;
572
+ }
573
+
574
+ .sidebar-section {
575
+ display: grid;
576
+ gap: 10px;
577
+ }
578
+
579
+ .nav-item,
580
+ .mini-provider {
581
+ padding: 12px 14px;
582
+ border: 1px solid rgba(255, 255, 255, 0.08);
583
+ border-radius: 18px;
584
+ background: rgba(255, 255, 255, 0.04);
585
+ }
586
+
587
+ .nav-item.active {
588
+ background: linear-gradient(135deg, rgba(91, 157, 255, 0.24), rgba(255, 95, 162, 0.12));
589
+ border-color: rgba(142, 197, 255, 0.22);
590
+ }
591
+
592
+ .mini-provider {
593
+ display: grid;
594
+ gap: 6px;
595
+ }
596
+
597
+ .mini-provider span {
598
+ color: rgba(255, 255, 255, 0.56);
599
+ font-size: 0.85rem;
600
+ }
601
+
602
+ .workspace {
603
+ padding: 26px;
604
+ background:
605
+ radial-gradient(circle at top right, rgba(91, 157, 255, 0.12), transparent 32%),
606
+ linear-gradient(180deg, rgba(9, 12, 18, 0.92), rgba(7, 9, 14, 0.94));
607
+ }
608
+
609
+ .header-actions {
610
+ display: inline-flex;
611
+ gap: 10px;
612
+ }
613
+
614
+ .header-actions button {
615
+ padding: 12px 16px;
616
+ border: 1px solid var(--line);
617
+ color: #edf4ff;
618
+ background: rgba(255, 255, 255, 0.04);
619
+ }
620
+
621
+ .header-actions .solid {
622
+ color: #f7fbff;
623
+ border-color: transparent;
624
+ background: linear-gradient(135deg, var(--accent-strong), var(--gold));
625
+ }
626
+
627
+ .workspace-grid {
628
+ display: grid;
629
+ grid-template-columns: 1.2fr 0.8fr;
630
+ gap: 18px;
631
+ margin-top: 24px;
632
+ }
633
+
634
+ .panel {
635
+ padding: 22px;
636
+ border: 1px solid rgba(255, 255, 255, 0.08);
637
+ border-radius: 26px;
638
+ background: rgba(18, 24, 34, 0.72);
639
+ }
640
+
641
+ .panel-highlight {
642
+ background:
643
+ radial-gradient(circle at top right, rgba(91, 157, 255, 0.16), transparent 26%),
644
+ linear-gradient(180deg, rgba(19, 26, 37, 0.94), rgba(13, 17, 25, 0.92));
645
+ }
646
+
647
+ .panel-badge {
648
+ padding: 8px 12px;
649
+ color: #dbe9ff;
650
+ border-radius: 999px;
651
+ background: rgba(91, 157, 255, 0.14);
652
+ font-size: 0.82rem;
653
+ font-weight: 700;
654
+ }
655
+
656
+ .provider-list,
657
+ .download-grid {
658
+ display: grid;
659
+ gap: 12px;
660
+ margin-top: 18px;
661
+ }
662
+
663
+ .provider-card,
664
+ .download-card {
665
+ display: grid;
666
+ gap: 5px;
667
+ padding: 16px 18px;
668
+ border: 1px solid rgba(255, 255, 255, 0.08);
669
+ border-radius: 22px;
670
+ background: rgba(255, 255, 255, 0.04);
671
+ transition: border-color 0.2s ease, background 0.2s ease, box-shadow 0.2s ease;
672
+ }
673
+
674
+ .provider-card span,
675
+ .provider-card small,
676
+ .download-card span,
677
+ .download-card small {
678
+ color: var(--muted);
679
+ }
680
+
681
+ .provider-card.active,
682
+ .download-card.active {
683
+ border-color: rgba(142, 197, 255, 0.24);
684
+ background: linear-gradient(180deg, rgba(91, 157, 255, 0.12), rgba(255, 255, 255, 0.06));
685
+ box-shadow: 0 16px 36px rgba(91, 157, 255, 0.12);
686
+ }
687
+
688
+ .speed-table {
689
+ display: grid;
690
+ gap: 12px;
691
+ margin-top: 18px;
692
+ }
693
+
694
+ .row {
695
+ padding: 14px 16px;
696
+ border-radius: 18px;
697
+ background: rgba(255, 255, 255, 0.04);
698
+ }
699
+
700
+ .client-stack {
701
+ display: flex;
702
+ flex-wrap: wrap;
703
+ gap: 10px;
704
+ margin: 18px 0 12px;
705
+ }
706
+
707
+ .chip {
708
+ padding: 10px 14px;
709
+ border-radius: 999px;
710
+ background: rgba(255, 255, 255, 0.05);
711
+ font-weight: 700;
712
+ }
713
+
714
+ .panel-download {
715
+ grid-column: 1 / -1;
716
+ }
717
+
718
+ .feature-strip,
719
+ .details,
720
+ .faq-list {
721
+ display: grid;
722
+ gap: 18px;
723
+ }
724
+
725
+ .feature-strip {
726
+ grid-template-columns: repeat(3, minmax(0, 1fr));
727
+ margin: 34px 0;
728
+ }
729
+
730
+ .feature-strip article,
731
+ .detail-card,
732
+ .faq-list article {
733
+ padding: 24px;
734
+ }
735
+
736
+ .feature-strip span {
737
+ display: inline-flex;
738
+ margin-bottom: 14px;
739
+ font-family: "Space Grotesk", sans-serif;
740
+ font-size: 0.94rem;
741
+ color: var(--gold);
742
+ }
743
+
744
+ .details {
745
+ grid-template-columns: repeat(2, minmax(0, 1fr));
746
+ margin-bottom: 34px;
747
+ }
748
+
749
+ .detail-card.accent {
750
+ color: #edf4ff;
751
+ background: linear-gradient(145deg, rgba(91, 157, 255, 0.24), rgba(255, 95, 162, 0.16)), rgba(12, 15, 22, 0.88);
752
+ }
753
+
754
+ .detail-card.accent .eyebrow,
755
+ .detail-card.accent p {
756
+ color: rgba(237, 248, 247, 0.76);
757
+ }
758
+
759
+ .faq {
760
+ padding: 24px 0 8px;
761
+ }
762
+
763
+ .section-title {
764
+ margin-bottom: 18px;
765
+ }
766
+
767
+ .faq-list {
768
+ grid-template-columns: repeat(3, minmax(0, 1fr));
769
+ }
770
+
771
+ @media (max-width: 1100px) {
772
+ .hero,
773
+ .details,
774
+ .feature-strip,
775
+ .faq-list {
776
+ grid-template-columns: 1fr;
777
+ }
778
+
779
+ .app-frame {
780
+ grid-template-columns: 1fr;
781
+ }
782
+
783
+ .workspace-grid {
784
+ grid-template-columns: 1fr;
785
+ }
786
+
787
+ .hero-console-grid {
788
+ grid-template-columns: 1fr;
789
+ }
790
+
791
+ .sidebar {
792
+ gap: 24px;
793
+ }
794
+ }
795
+
796
+ @media (max-width: 780px) {
797
+ .page-shell {
798
+ width: min(100% - 20px, 1320px);
799
+ }
800
+
801
+ .topbar {
802
+ position: static;
803
+ flex-wrap: wrap;
804
+ justify-content: center;
805
+ }
806
+
807
+ .topnav {
808
+ flex-wrap: wrap;
809
+ justify-content: center;
810
+ }
811
+
812
+ .hero {
813
+ gap: 24px;
814
+ padding: 24px;
815
+ }
816
+
817
+ .hero-card-grid,
818
+ .hero-metrics,
819
+ .faq-list,
820
+ .hero-console-grid {
821
+ grid-template-columns: 1fr;
822
+ }
823
+
824
+ .hero-actions,
825
+ .header-actions,
826
+ .preview-head {
827
+ flex-direction: column;
828
+ }
829
+
830
+ .workspace {
831
+ padding: 18px;
832
+ }
833
+
834
+ .preview-head,
835
+ .workspace-header,
836
+ .panel-head {
837
+ flex-direction: column;
838
+ align-items: flex-start;
839
+ }
840
+ }