create-openclaw-bot 5.5.0 → 5.6.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 (39) hide show
  1. package/README.md +18 -17
  2. package/README.vi.md +18 -17
  3. package/{cli.js → dist/cli.js} +295 -224
  4. package/dist/setup/shared/install-gen.js +485 -0
  5. package/{setup/shared/scaffold-gen.js → dist/setup/shared/workspace-gen.js} +247 -25
  6. package/{setup.js → dist/setup.js} +771 -1158
  7. package/package.json +10 -7
  8. package/.github/workflows/check-openclaw-update.yml +0 -106
  9. package/CHANGELOG.md +0 -602
  10. package/CHANGELOG.vi.md +0 -588
  11. package/docs/SETUP.md +0 -532
  12. package/docs/SETUP.vi.md +0 -439
  13. package/docs/ai-providers.md +0 -144
  14. package/docs/ai-providers.vi.md +0 -144
  15. package/docs/browser-automation-guide.md +0 -207
  16. package/docs/faq.md +0 -63
  17. package/docs/faq.vi.md +0 -63
  18. package/docs/hardware-guide.md +0 -55
  19. package/docs/hardware-guide.vi.md +0 -55
  20. package/docs/install-docker.md +0 -161
  21. package/docs/install-docker.vi.md +0 -161
  22. package/docs/install-native.md +0 -96
  23. package/docs/install-native.vi.md +0 -96
  24. package/docs/preview.png +0 -0
  25. package/docs/skills-plugins-guide.md +0 -126
  26. package/index.html +0 -589
  27. package/old_v510.js +0 -0
  28. package/setup/shared/runtime-gen.js +0 -710
  29. package/style.css +0 -1653
  30. package/upgrade.ps1 +0 -90
  31. package/upgrade.sh +0 -93
  32. /package/{setup → dist/setup}/data/channels.js +0 -0
  33. /package/{setup → dist/setup}/data/header.js +0 -0
  34. /package/{setup → dist/setup}/data/index.js +0 -0
  35. /package/{setup → dist/setup}/data/plugins.js +0 -0
  36. /package/{setup → dist/setup}/data/providers.js +0 -0
  37. /package/{setup → dist/setup}/data/skills.js +0 -0
  38. /package/{setup → dist/setup}/shared/common-gen.js +0 -0
  39. /package/{setup → dist/setup}/shared/docker-gen.js +0 -0
package/style.css DELETED
@@ -1,1653 +0,0 @@
1
- /* ============================================
2
- OpenClaw Setup Wizard — Design System v2
3
- Enhanced gradients, multi-provider, plugin grid
4
- ============================================ */
5
-
6
- @import url('https://fonts.googleapis.com/css2?family=Inter:wght@300;400;500;600;700;800&display=swap');
7
-
8
- :root {
9
- /* Brand */
10
- --claw-coral: #FF6B35;
11
- --claw-coral-light: #FF8F66;
12
- --claw-coral-dark: #E05520;
13
-
14
- /* Neutrals */
15
- --bg-primary: #060612;
16
- --bg-secondary: #0e0e1c;
17
- --bg-card: rgba(255, 255, 255, 0.04);
18
- --bg-card-hover: rgba(255, 255, 255, 0.08);
19
- --bg-glass: rgba(255, 255, 255, 0.05);
20
- --bg-glass-strong: rgba(255, 255, 255, 0.08);
21
-
22
- /* Text */
23
- --text-primary: #f0f0f5;
24
- --text-secondary: #9494b0;
25
- --text-muted: #5a5a72;
26
-
27
- /* Channels */
28
- --telegram-blue: #26A5E4;
29
- --zalo-blue: #0068FF;
30
- --zalo-personal: #8B5CF6;
31
-
32
- /* Providers */
33
- --google-blue: #4285F4;
34
- --anthropic-orange: #D97706;
35
- --openai-green: #10B981;
36
- --openrouter-purple: #7C3AED;
37
- --ollama-pink: #EC4899;
38
-
39
- /* Status */
40
- --success: #22c55e;
41
- --warning: #f59e0b;
42
- --danger: #ef4444;
43
-
44
- /* Spacing */
45
- --radius-sm: 8px;
46
- --radius-md: 12px;
47
- --radius-lg: 16px;
48
- --radius-xl: 24px;
49
-
50
- /* Transitions */
51
- --ease-out: cubic-bezier(0.16, 1, 0.3, 1);
52
- --duration-fast: 200ms;
53
- --duration-normal: 350ms;
54
- --duration-slow: 600ms;
55
- }
56
-
57
- /* ============ Reset & Base ============ */
58
- *,
59
- *::before,
60
- *::after {
61
- margin: 0;
62
- padding: 0;
63
- box-sizing: border-box;
64
- }
65
-
66
- html {
67
- font-size: 16px;
68
- scroll-behavior: smooth;
69
- }
70
-
71
- body {
72
- font-family: 'Inter', -apple-system, BlinkMacSystemFont, sans-serif;
73
- background: var(--bg-primary);
74
- color: var(--text-primary);
75
- min-height: 100vh;
76
- overflow-x: hidden;
77
- -webkit-font-smoothing: antialiased;
78
- }
79
-
80
- /* ========== Multi-layer animated background ========== */
81
- body::before {
82
- content: '';
83
- position: fixed;
84
- top: 0;
85
- left: 0;
86
- width: 100%;
87
- height: 100%;
88
- background:
89
- radial-gradient(ellipse 80% 50% at 50% -10%, rgba(255, 107, 53, 0.15), transparent 60%),
90
- radial-gradient(ellipse 50% 60% at 85% 80%, rgba(38, 165, 228, 0.08), transparent 60%),
91
- radial-gradient(ellipse 50% 60% at 15% 80%, rgba(139, 92, 246, 0.08), transparent 60%),
92
- radial-gradient(circle at 50% 50%, rgba(16, 185, 129, 0.04), transparent 70%);
93
- pointer-events: none;
94
- z-index: 0;
95
- animation: bgPulse 8s ease-in-out infinite alternate;
96
- }
97
-
98
- body::after {
99
- content: '';
100
- position: fixed;
101
- top: 0;
102
- left: 0;
103
- width: 100%;
104
- height: 100%;
105
- background:
106
- radial-gradient(circle 300px at 20% 30%, rgba(255, 107, 53, 0.06), transparent),
107
- radial-gradient(circle 300px at 80% 60%, rgba(124, 58, 237, 0.06), transparent);
108
- pointer-events: none;
109
- z-index: 0;
110
- animation: bgPulse 12s ease-in-out infinite alternate-reverse;
111
- }
112
-
113
- @keyframes bgPulse {
114
- 0% { opacity: 1; }
115
- 100% { opacity: 0.6; }
116
- }
117
-
118
- /* ============ Layout ============ */
119
- .app-container {
120
- position: relative;
121
- z-index: 1;
122
- max-width: 900px;
123
- margin: 0 auto;
124
- padding: 40px 24px 80px;
125
- }
126
-
127
- /* ============ Header ============ */
128
- .header {
129
- text-align: center;
130
- margin-bottom: 48px;
131
- }
132
-
133
- .header__logo {
134
- font-size: 52px;
135
- margin-bottom: 8px;
136
- animation: float 3s ease-in-out infinite;
137
- filter: drop-shadow(0 8px 24px rgba(255, 107, 53, 0.3));
138
- }
139
-
140
- @keyframes float {
141
- 0%, 100% { transform: translateY(0px); }
142
- 50% { transform: translateY(-8px); }
143
- }
144
-
145
- .header__title {
146
- font-size: 34px;
147
- font-weight: 800;
148
- letter-spacing: -0.5px;
149
- background: linear-gradient(135deg, var(--claw-coral), #FF9966, var(--claw-coral-light));
150
- background-size: 200% 200%;
151
- -webkit-background-clip: text;
152
- -webkit-text-fill-color: transparent;
153
- background-clip: text;
154
- margin-bottom: 8px;
155
- animation: shimmer 3s ease-in-out infinite;
156
- }
157
-
158
- @keyframes shimmer {
159
- 0%, 100% { background-position: 0% 50%; }
160
- 50% { background-position: 100% 50%; }
161
- }
162
-
163
- .header__subtitle {
164
- font-size: 16px;
165
- color: var(--text-secondary);
166
- font-weight: 400;
167
- }
168
-
169
- /* ============ Progress Bar ============ */
170
- .progress-bar {
171
- display: flex;
172
- align-items: center;
173
- justify-content: center;
174
- gap: 0;
175
- margin-bottom: 48px;
176
- }
177
-
178
- .progress-step {
179
- display: flex;
180
- align-items: center;
181
- gap: 8px;
182
- cursor: pointer;
183
- transition: all var(--duration-normal) var(--ease-out);
184
- }
185
-
186
- .progress-step__circle {
187
- width: 36px;
188
- height: 36px;
189
- border-radius: 50%;
190
- display: flex;
191
- align-items: center;
192
- justify-content: center;
193
- font-size: 14px;
194
- font-weight: 600;
195
- background: var(--bg-card);
196
- border: 2px solid var(--text-muted);
197
- color: var(--text-muted);
198
- transition: all var(--duration-normal) var(--ease-out);
199
- flex-shrink: 0;
200
- }
201
-
202
- .progress-step__label {
203
- font-size: 13px;
204
- font-weight: 500;
205
- color: var(--text-muted);
206
- white-space: nowrap;
207
- transition: color var(--duration-normal) var(--ease-out);
208
- }
209
-
210
- .progress-step--active .progress-step__circle {
211
- background: var(--claw-coral);
212
- border-color: var(--claw-coral);
213
- color: white;
214
- box-shadow: 0 0 24px rgba(255, 107, 53, 0.5);
215
- }
216
-
217
- .progress-step--active .progress-step__label {
218
- color: var(--text-primary);
219
- }
220
-
221
- .progress-step--completed .progress-step__circle {
222
- background: var(--success);
223
- border-color: var(--success);
224
- color: white;
225
- }
226
-
227
- .progress-step--completed .progress-step__label {
228
- color: var(--text-secondary);
229
- }
230
-
231
- .progress-line {
232
- width: 48px;
233
- height: 2px;
234
- background: var(--text-muted);
235
- margin: 0 4px;
236
- transition: background var(--duration-normal) var(--ease-out);
237
- flex-shrink: 0;
238
- }
239
-
240
- .progress-line--active {
241
- background: linear-gradient(90deg, var(--success), var(--success));
242
- }
243
-
244
- /* ============ Steps Container ============ */
245
- .steps-container {
246
- position: relative;
247
- }
248
-
249
- .step {
250
- display: none;
251
- animation: fadeSlideIn var(--duration-slow) var(--ease-out);
252
- }
253
-
254
- .step--active {
255
- display: block;
256
- }
257
-
258
- @keyframes fadeSlideIn {
259
- from {
260
- opacity: 0;
261
- transform: translateY(20px);
262
- }
263
- to {
264
- opacity: 1;
265
- transform: translateY(0);
266
- }
267
- }
268
-
269
- .step__title {
270
- font-size: 24px;
271
- font-weight: 700;
272
- margin-bottom: 8px;
273
- }
274
-
275
- .step__description {
276
- font-size: 15px;
277
- color: var(--text-secondary);
278
- margin-bottom: 32px;
279
- line-height: 1.6;
280
- }
281
-
282
- /* ============ Channel Cards (Step 1) ============ */
283
- .channel-grid {
284
- display: grid;
285
- grid-template-columns: repeat(3, 1fr);
286
- gap: 16px;
287
- }
288
-
289
- .channel-card {
290
- position: relative;
291
- background: var(--bg-glass);
292
- backdrop-filter: blur(16px);
293
- -webkit-backdrop-filter: blur(16px);
294
- border: 1px solid rgba(255, 255, 255, 0.08);
295
- border-radius: var(--radius-lg);
296
- padding: 28px 20px;
297
- text-align: center;
298
- cursor: pointer;
299
- transition: all var(--duration-normal) var(--ease-out);
300
- overflow: hidden;
301
- }
302
-
303
- .channel-card::before {
304
- content: '';
305
- position: absolute;
306
- top: 0;
307
- left: 0;
308
- right: 0;
309
- height: 3px;
310
- opacity: 0;
311
- transition: opacity var(--duration-normal) var(--ease-out);
312
- }
313
-
314
- .channel-card[data-channel="telegram"]::before {
315
- background: linear-gradient(90deg, var(--telegram-blue), #66ccff);
316
- }
317
-
318
- .channel-card[data-channel="zalo-bot"]::before {
319
- background: linear-gradient(90deg, var(--zalo-blue), #4d9fff);
320
- }
321
-
322
- .channel-card[data-channel="zalo-personal"]::before {
323
- background: linear-gradient(90deg, var(--zalo-personal), #c084fc);
324
- }
325
-
326
- .channel-card:hover {
327
- background: var(--bg-card-hover);
328
- border-color: rgba(255, 255, 255, 0.15);
329
- transform: translateY(-4px);
330
- box-shadow: 0 12px 40px rgba(0, 0, 0, 0.3);
331
- }
332
-
333
- .channel-card--selected {
334
- border-color: var(--claw-coral) !important;
335
- background: rgba(255, 107, 53, 0.06) !important;
336
- box-shadow: 0 0 30px rgba(255, 107, 53, 0.12), inset 0 0 30px rgba(255, 107, 53, 0.03);
337
- }
338
-
339
- .channel-card--selected::before {
340
- opacity: 1;
341
- }
342
-
343
- .channel-card__icon {
344
- width: 56px;
345
- height: 56px;
346
- border-radius: var(--radius-md);
347
- display: flex;
348
- align-items: center;
349
- justify-content: center;
350
- font-size: 28px;
351
- margin: 0 auto 16px;
352
- }
353
-
354
- .channel-card__icon img {
355
- width: 32px;
356
- height: 32px;
357
- object-fit: contain;
358
- }
359
-
360
- .channel-card[data-channel="telegram"] .channel-card__icon {
361
- background: linear-gradient(135deg, rgba(38, 165, 228, 0.2), rgba(38, 165, 228, 0.05));
362
- }
363
-
364
- .channel-card[data-channel="zalo-bot"] .channel-card__icon {
365
- background: linear-gradient(135deg, rgba(0, 104, 255, 0.2), rgba(0, 104, 255, 0.05));
366
- }
367
-
368
- .channel-card[data-channel="zalo-personal"] .channel-card__icon {
369
- background: linear-gradient(135deg, rgba(139, 92, 246, 0.2), rgba(139, 92, 246, 0.05));
370
- }
371
-
372
- .channel-card__name {
373
- font-size: 16px;
374
- font-weight: 600;
375
- margin-bottom: 8px;
376
- }
377
-
378
- .channel-card__desc {
379
- font-size: 13px;
380
- color: var(--text-secondary);
381
- line-height: 1.5;
382
- margin-bottom: 12px;
383
- }
384
-
385
- .channel-card__badge {
386
- display: inline-block;
387
- padding: 4px 10px;
388
- border-radius: 20px;
389
- font-size: 11px;
390
- font-weight: 600;
391
- text-transform: uppercase;
392
- letter-spacing: 0.5px;
393
- }
394
-
395
- .badge--official {
396
- background: rgba(34, 197, 94, 0.12);
397
- color: var(--success);
398
- }
399
-
400
- .badge--warning {
401
- background: rgba(245, 158, 11, 0.12);
402
- color: var(--warning);
403
- }
404
-
405
- /* ============ Form Fields (Step 2) ============ */
406
- .form-group {
407
- margin-bottom: 24px;
408
- }
409
-
410
- .form-group__label {
411
- display: block;
412
- font-size: 14px;
413
- font-weight: 600;
414
- margin-bottom: 8px;
415
- color: var(--text-primary);
416
- }
417
-
418
- .form-group__hint {
419
- font-size: 12px;
420
- color: var(--text-muted);
421
- margin-top: 6px;
422
- }
423
-
424
- .form-input,
425
- .form-select,
426
- .form-textarea {
427
- width: 100%;
428
- padding: 12px 16px;
429
- background: var(--bg-glass);
430
- backdrop-filter: blur(8px);
431
- -webkit-backdrop-filter: blur(8px);
432
- border: 1px solid rgba(255, 255, 255, 0.1);
433
- border-radius: var(--radius-md);
434
- color: var(--text-primary);
435
- font-family: inherit;
436
- font-size: 15px;
437
- transition: all var(--duration-fast) var(--ease-out);
438
- outline: none;
439
- }
440
-
441
- .form-input:focus,
442
- .form-select:focus,
443
- .form-textarea:focus {
444
- border-color: var(--claw-coral);
445
- box-shadow: 0 0 0 3px rgba(255, 107, 53, 0.1), 0 0 20px rgba(255, 107, 53, 0.08);
446
- }
447
-
448
- .form-input::placeholder,
449
- .form-textarea::placeholder {
450
- color: var(--text-muted);
451
- }
452
-
453
- .form-select {
454
- cursor: pointer;
455
- -webkit-appearance: none;
456
- appearance: none;
457
- background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='8' viewBox='0 0 12 8'%3E%3Cpath d='M1 1l5 5 5-5' stroke='%238b8ba3' fill='none' stroke-width='2'/%3E%3C/svg%3E");
458
- background-repeat: no-repeat;
459
- background-position: right 16px center;
460
- padding-right: 40px;
461
- }
462
-
463
- .form-select option {
464
- background: var(--bg-secondary);
465
- color: var(--text-primary);
466
- }
467
-
468
- /* ============ Language Toggle Switch ============ */
469
- .model-header {
470
- display: flex;
471
- align-items: center;
472
- justify-content: space-between;
473
- margin-bottom: 8px;
474
- }
475
-
476
- .model-header .form-group__label {
477
- margin-bottom: 0;
478
- }
479
-
480
- .lang-toggle {
481
- display: inline-flex;
482
- background: rgba(255, 255, 255, 0.06);
483
- border: 1px solid rgba(255, 255, 255, 0.08);
484
- border-radius: 24px;
485
- overflow: hidden;
486
- height: 48px;
487
- padding: 4px;
488
- gap: 2px;
489
- }
490
-
491
- .lang-toggle__btn {
492
- display: flex;
493
- align-items: center;
494
- gap: 4px;
495
- padding: 0 10px;
496
- background: transparent;
497
- border: none;
498
- color: var(--text-secondary);
499
- font-size: 11px;
500
- font-weight: 700;
501
- font-family: inherit;
502
- letter-spacing: 0.5px;
503
- cursor: pointer;
504
- transition: all var(--duration-fast) var(--ease-out);
505
- white-space: nowrap;
506
- border-radius: 20px;
507
- }
508
-
509
- .lang-toggle__btn:hover {
510
- color: var(--text-primary);
511
- }
512
-
513
- .lang-toggle__btn--active {
514
- background: rgba(255, 255, 255, 0.12);
515
- color: var(--text-primary);
516
- box-shadow: 0 1px 4px rgba(0, 0, 0, 0.2);
517
- }
518
-
519
- .lang-toggle__flag {
520
- display: flex;
521
- align-items: center;
522
- flex-shrink: 0;
523
- }
524
-
525
- .lang-toggle__flag svg {
526
- width: 16px;
527
- height: 16px;
528
- border-radius: 50%;
529
- }
530
-
531
- /* ============ Provider Card Images ============ */
532
- .provider-card__icon {
533
- width: 40px;
534
- height: 40px;
535
- border-radius: var(--radius-sm);
536
- display: flex;
537
- align-items: center;
538
- justify-content: center;
539
- }
540
-
541
- .provider-card__icon img {
542
- width: 28px;
543
- height: 28px;
544
- object-fit: contain;
545
- }
546
-
547
- /* Colored backgrounds per provider */
548
- .provider-card[data-provider="google"] .provider-card__icon {
549
- background: rgba(142, 117, 178, 0.15);
550
- }
551
-
552
- .provider-card[data-provider="anthropic"] .provider-card__icon {
553
- background: rgba(217, 119, 6, 0.15);
554
- }
555
- .provider-card[data-provider="anthropic"] .provider-card__icon img {
556
- filter: brightness(0) saturate(100%) invert(56%) sepia(85%) saturate(600%) hue-rotate(360deg) brightness(100%) contrast(100%);
557
- }
558
-
559
- .provider-card[data-provider="openai"] .provider-card__icon {
560
- background: rgba(16, 185, 129, 0.15);
561
- }
562
- .provider-card[data-provider="openai"] .provider-card__icon img {
563
- filter: brightness(0) saturate(100%) invert(62%) sepia(52%) saturate(500%) hue-rotate(116deg) brightness(96%) contrast(92%);
564
- }
565
-
566
- .provider-card[data-provider="openrouter"] .provider-card__icon {
567
- background: rgba(124, 58, 237, 0.15);
568
- }
569
- .provider-card[data-provider="openrouter"] .provider-card__icon img {
570
- filter: brightness(0) saturate(100%) invert(30%) sepia(90%) saturate(1200%) hue-rotate(246deg) brightness(95%) contrast(90%);
571
- }
572
-
573
- .provider-card[data-provider="ollama"] .provider-card__icon {
574
- background: rgba(0, 210, 211, 0.15);
575
- }
576
- .provider-card[data-provider="ollama"] .provider-card__icon img {
577
- filter: brightness(0) saturate(100%) invert(72%) sepia(50%) saturate(500%) hue-rotate(140deg) brightness(105%) contrast(95%);
578
- }
579
-
580
- .provider-card[data-provider="9router"] .provider-card__icon {
581
- background: rgba(0, 200, 200, 0.15);
582
- }
583
-
584
- .form-textarea {
585
- min-height: 180px;
586
- max-height: none;
587
- overflow: hidden;
588
- resize: none;
589
- line-height: 1.6;
590
- font-size: 14px;
591
- field-sizing: content;
592
- }
593
-
594
- .form-row {
595
- display: grid;
596
- grid-template-columns: 1fr 1fr;
597
- gap: 16px;
598
- }
599
-
600
- /* ============ Identity Grid ============ */
601
- .identity-grid {
602
- display: grid;
603
- grid-template-columns: 1fr 1fr 72px;
604
- gap: 16px;
605
- margin-bottom: 24px;
606
- }
607
-
608
- .form-input--emoji {
609
- text-align: center;
610
- font-size: 22px;
611
- line-height: 1;
612
- padding: 10px 4px;
613
- }
614
-
615
- /* ============ Section Dividers ============ */
616
- .section-divider {
617
- display: flex;
618
- align-items: center;
619
- gap: 10px;
620
- margin: 32px 0 20px;
621
- padding: 0;
622
- }
623
-
624
- .section-divider::before,
625
- .section-divider::after {
626
- content: '';
627
- flex: 1;
628
- height: 1px;
629
- background: linear-gradient(90deg, transparent, rgba(255,255,255,0.08), transparent);
630
- }
631
-
632
- .section-divider::before {
633
- background: linear-gradient(90deg, transparent, rgba(255,255,255,0.08));
634
- }
635
-
636
- .section-divider::after {
637
- background: linear-gradient(90deg, rgba(255,255,255,0.08), transparent);
638
- }
639
-
640
- .section-divider__icon {
641
- font-size: 18px;
642
- flex-shrink: 0;
643
- }
644
-
645
- .section-divider__text {
646
- font-size: 13px;
647
- font-weight: 600;
648
- color: var(--text-secondary);
649
- letter-spacing: 0.3px;
650
- white-space: nowrap;
651
- }
652
-
653
- /* ============ Security Rules ============ */
654
- .security-rules-header {
655
- display: flex;
656
- align-items: center;
657
- justify-content: space-between;
658
- margin-bottom: 8px;
659
- }
660
-
661
- .security-rules-header .form-group__label {
662
- margin-bottom: 0;
663
- }
664
-
665
- .btn-toggle-edit {
666
- padding: 4px 12px;
667
- background: rgba(255, 255, 255, 0.06);
668
- border: 1px solid rgba(255, 255, 255, 0.1);
669
- border-radius: 16px;
670
- color: var(--text-secondary);
671
- font-size: 12px;
672
- font-weight: 500;
673
- font-family: inherit;
674
- cursor: pointer;
675
- transition: all var(--duration-fast) var(--ease-out);
676
- }
677
-
678
- .btn-toggle-edit:hover {
679
- background: rgba(255, 255, 255, 0.1);
680
- color: var(--text-primary);
681
- }
682
-
683
- .btn-toggle-edit--active {
684
- background: rgba(239, 68, 68, 0.1);
685
- border-color: rgba(239, 68, 68, 0.3);
686
- color: #f87171;
687
- }
688
-
689
- .security-textarea {
690
- min-height: 200px;
691
- font-size: 12px !important;
692
- line-height: 1.7 !important;
693
- font-family: 'JetBrains Mono', 'Fira Code', monospace !important;
694
- opacity: 0.7;
695
- transition: opacity var(--duration-fast) var(--ease-out);
696
- }
697
-
698
- .security-textarea:not([readonly]) {
699
- opacity: 1;
700
- border-color: rgba(239, 68, 68, 0.3);
701
- }
702
-
703
- /* ============ Provider Cards ============ */
704
- .provider-grid {
705
- display: grid;
706
- grid-template-columns: repeat(3, 1fr);
707
- gap: 10px;
708
- }
709
-
710
- .provider-card {
711
- display: flex;
712
- flex-direction: column;
713
- align-items: center;
714
- gap: 6px;
715
- padding: 20px 12px 16px;
716
- background: var(--bg-glass);
717
- backdrop-filter: blur(12px);
718
- -webkit-backdrop-filter: blur(12px);
719
- border: 1px solid rgba(255, 255, 255, 0.08);
720
- border-radius: var(--radius-md);
721
- cursor: pointer;
722
- transition: all var(--duration-normal) var(--ease-out);
723
- text-align: center;
724
- min-height: 130px;
725
- justify-content: flex-start;
726
- }
727
-
728
- .provider-card:hover {
729
- background: var(--bg-card-hover);
730
- border-color: rgba(255, 255, 255, 0.15);
731
- transform: translateY(-2px);
732
- }
733
-
734
- .provider-card--selected {
735
- border-color: var(--claw-coral) !important;
736
- background: rgba(255, 107, 53, 0.06) !important;
737
- box-shadow: 0 0 20px rgba(255, 107, 53, 0.1), inset 0 0 20px rgba(255, 107, 53, 0.02);
738
- }
739
-
740
- .provider-card__icon {
741
- font-size: 24px;
742
- }
743
-
744
- .provider-card__info {
745
- display: flex;
746
- flex-direction: column;
747
- gap: 4px;
748
- }
749
-
750
- .provider-card__name {
751
- font-size: 13px;
752
- font-weight: 700;
753
- color: var(--text-primary);
754
- white-space: nowrap;
755
- margin-top: 2px;
756
- }
757
-
758
- .provider-card__desc {
759
- font-size: 11px;
760
- color: var(--text-secondary);
761
- line-height: 1.45;
762
- text-align: center;
763
- margin-top: 2px;
764
- max-width: 140px;
765
- word-break: keep-all;
766
- overflow-wrap: break-word;
767
- white-space: normal;
768
- min-height: 28px;
769
- }
770
-
771
- .cred-step a, .prompt-notice a, .form-group__hint a, .form-group__label a {
772
- color: #ffffff;
773
- text-decoration: underline;
774
- text-underline-offset: 2px;
775
- }
776
- .cred-step a:hover, .prompt-notice a:hover, .form-group__hint a:hover, .form-group__label a:hover {
777
- color: var(--claw-coral);
778
- }
779
-
780
- .provider-card__badge {
781
- display: inline-block;
782
- padding: 2px 8px;
783
- border-radius: 12px;
784
- font-size: 10px;
785
- font-weight: 600;
786
- white-space: nowrap;
787
- }
788
-
789
- .badge--free {
790
- background: rgba(34, 197, 94, 0.12);
791
- color: var(--success);
792
- }
793
-
794
- .badge--paid {
795
- background: rgba(245, 158, 11, 0.12);
796
- color: var(--warning);
797
- }
798
-
799
- .badge--proxy {
800
- background: rgba(0, 200, 200, 0.12);
801
- color: #22d3ee;
802
- }
803
-
804
- /* ============ Plugin Grid ============ */
805
- .plugin-grid {
806
- display: grid;
807
- grid-template-columns: repeat(3, minmax(0, 1fr));
808
- gap: 10px;
809
- align-items: stretch;
810
- width: 100%;
811
- }
812
-
813
- .plugin-card {
814
- display: flex;
815
- flex-direction: column;
816
- gap: 0;
817
- padding: 12px;
818
- background: var(--bg-glass);
819
- backdrop-filter: blur(12px);
820
- -webkit-backdrop-filter: blur(12px);
821
- border: 1px solid rgba(255, 255, 255, 0.08);
822
- border-radius: var(--radius-md);
823
- cursor: pointer;
824
- transition: all var(--duration-normal) var(--ease-out);
825
- position: relative;
826
- min-height: 60px;
827
- height: 100%;
828
- min-width: 0;
829
- overflow: visible;
830
- }
831
-
832
- .plugin-card:hover {
833
- background: var(--bg-card-hover);
834
- border-color: rgba(255, 255, 255, 0.15);
835
- z-index: 5;
836
- }
837
-
838
- .plugin-card--selected {
839
- border-color: var(--claw-coral) !important;
840
- background: rgba(255, 107, 53, 0.06) !important;
841
- }
842
-
843
- .plugin-checkbox {
844
- position: absolute;
845
- opacity: 0;
846
- width: 0;
847
- height: 0;
848
- }
849
-
850
- .plugin-card__info {
851
- width: 100%;
852
- min-width: 0;
853
- min-height: 62px;
854
- display: flex;
855
- flex-direction: column;
856
- gap: 8px;
857
- }
858
-
859
- .plugin-card__topline {
860
- display: flex;
861
- align-items: center;
862
- justify-content: space-between;
863
- gap: 12px;
864
- }
865
-
866
- .plugin-card__titleline {
867
- display: flex;
868
- align-items: center;
869
- gap: 10px;
870
- min-width: 0;
871
- flex: 1;
872
- }
873
-
874
- .plugin-card__icon {
875
- font-size: 20px;
876
- flex-shrink: 0;
877
- width: 24px;
878
- text-align: center;
879
- }
880
-
881
- .plugin-card__name {
882
- font-size: 13px;
883
- font-weight: 600;
884
- color: var(--text-primary);
885
- line-height: 1.35;
886
- display: -webkit-box;
887
- -webkit-line-clamp: 2;
888
- -webkit-box-orient: vertical;
889
- overflow: hidden;
890
- margin-bottom: 0;
891
- padding-right: 0;
892
- min-width: 0;
893
- }
894
-
895
- .plugin-card__subline {
896
- display: flex;
897
- align-items: center;
898
- justify-content: space-between;
899
- padding-left: 0;
900
- gap: 6px;
901
- min-height: 26px;
902
- margin-top: 4px;
903
- }
904
-
905
- .plugin-card__badge-slot {
906
- width: auto;
907
- min-width: 0;
908
- display: flex;
909
- justify-content: flex-end;
910
- align-items: center;
911
- }
912
-
913
- .plugin-card__badge {
914
- display: inline-flex;
915
- align-items: center;
916
- gap: 4px;
917
- padding: 3px 8px;
918
- border-radius: 999px;
919
- font-size: 9px;
920
- font-weight: 700;
921
- white-space: nowrap;
922
- flex-shrink: 0;
923
- letter-spacing: 0.01em;
924
- }
925
-
926
- .plugin-card__badge--placeholder {
927
- visibility: hidden;
928
- }
929
-
930
- .plugin-card__badge--recommended {
931
- background: rgba(255, 107, 53, 0.14);
932
- color: #ffd3bf;
933
- border: 1px solid rgba(255, 107, 53, 0.34);
934
- box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.05);
935
- }
936
-
937
- .plugin-card__hint-slot {
938
- display: flex;
939
- justify-content: flex-start;
940
- align-items: center;
941
- }
942
-
943
- .plugin-card__hint {
944
- position: relative;
945
- display: inline-flex;
946
- align-items: center;
947
- justify-content: center;
948
- width: 22px;
949
- height: 22px;
950
- border-radius: 50%;
951
- background: rgba(255, 255, 255, 0.08);
952
- border: 1px solid rgba(255, 255, 255, 0.14);
953
- color: rgba(255, 255, 255, 0.88);
954
- font-size: 10px;
955
- font-weight: 700;
956
- transition: all var(--duration-fast) var(--ease-out);
957
- box-shadow: 0 6px 16px rgba(0, 0, 0, 0.2);
958
- }
959
-
960
- .plugin-card__hint--placeholder {
961
- visibility: hidden;
962
- }
963
-
964
- .plugin-card__hint:hover,
965
- .plugin-card__hint:focus-visible {
966
- background: rgba(255, 107, 53, 0.18);
967
- border-color: rgba(255, 107, 53, 0.38);
968
- color: #fff4ee;
969
- box-shadow: 0 10px 24px rgba(255, 107, 53, 0.18);
970
- }
971
-
972
- .plugin-card__tooltip {
973
- position: absolute;
974
- left: 0;
975
- top: calc(100% + 10px);
976
- width: 240px;
977
- padding: 11px 13px;
978
- border-radius: 14px;
979
- background: linear-gradient(180deg, rgba(30, 22, 22, 0.98), rgba(20, 20, 30, 0.98));
980
- border: 1px solid rgba(255, 145, 96, 0.22);
981
- box-shadow: 0 22px 48px rgba(0, 0, 0, 0.42);
982
- color: #f3dde0;
983
- font-size: 11px;
984
- line-height: 1.5;
985
- opacity: 0;
986
- visibility: hidden;
987
- transform: translateY(6px);
988
- transition: opacity var(--duration-fast) var(--ease-out), transform var(--duration-fast) var(--ease-out), visibility var(--duration-fast) var(--ease-out);
989
- pointer-events: none;
990
- z-index: 20;
991
- white-space: normal;
992
- }
993
-
994
- .plugin-card__tooltip::before {
995
- content: '';
996
- position: absolute;
997
- top: -6px;
998
- left: 8px;
999
- width: 12px;
1000
- height: 12px;
1001
- background: rgba(27, 21, 28, 0.98);
1002
- border-left: 1px solid rgba(255, 145, 96, 0.22);
1003
- border-top: 1px solid rgba(255, 145, 96, 0.22);
1004
- transform: rotate(45deg);
1005
- }
1006
-
1007
- .plugin-card__hint:hover .plugin-card__tooltip,
1008
- .plugin-card__hint:focus-visible .plugin-card__tooltip {
1009
- opacity: 1;
1010
- visibility: visible;
1011
- transform: translateY(0);
1012
- }
1013
-
1014
- .plugin-card__hint:hover,
1015
- .plugin-card__hint:focus-visible {
1016
- z-index: 8;
1017
- }
1018
-
1019
- .plugin-card__switch {
1020
- pointer-events: none;
1021
- flex-shrink: 0;
1022
- }
1023
-
1024
- .plugin-card--selected .plugin-card__badge--recommended {
1025
- background: rgba(255, 107, 53, 0.2);
1026
- border-color: rgba(255, 107, 53, 0.38);
1027
- color: #ffd1bc;
1028
- }
1029
-
1030
- /* ============ Prompt Notice ============ */
1031
- .prompt-notice {
1032
- display: flex;
1033
- align-items: flex-start;
1034
- gap: 10px;
1035
- margin-top: 10px;
1036
- padding: 14px 16px;
1037
- background: linear-gradient(135deg, rgba(34, 197, 94, 0.06), rgba(34, 197, 94, 0.02));
1038
- border: 1px solid rgba(34, 197, 94, 0.15);
1039
- border-radius: var(--radius-md);
1040
- backdrop-filter: blur(8px);
1041
- -webkit-backdrop-filter: blur(8px);
1042
- }
1043
-
1044
- .prompt-notice__icon {
1045
- font-size: 18px;
1046
- flex-shrink: 0;
1047
- }
1048
-
1049
- .prompt-notice__text {
1050
- font-size: 12px;
1051
- color: var(--text-secondary);
1052
- line-height: 1.6;
1053
- }
1054
-
1055
- .prompt-notice__text strong {
1056
- color: var(--success);
1057
- }
1058
-
1059
- /* ============ Credentials Checklist (Step 3) ============ */
1060
- .cred-section {
1061
- background: var(--bg-glass);
1062
- backdrop-filter: blur(16px);
1063
- -webkit-backdrop-filter: blur(16px);
1064
- border: 1px solid rgba(255, 255, 255, 0.08);
1065
- border-radius: var(--radius-lg);
1066
- padding: 24px;
1067
- margin-bottom: 20px;
1068
- }
1069
-
1070
- .cred-section__title {
1071
- font-size: 16px;
1072
- font-weight: 600;
1073
- margin-bottom: 16px;
1074
- display: flex;
1075
- align-items: center;
1076
- gap: 8px;
1077
- }
1078
-
1079
- .cred-step {
1080
- display: flex;
1081
- align-items: flex-start;
1082
- gap: 12px;
1083
- padding: 12px 0;
1084
- border-bottom: 1px solid rgba(255, 255, 255, 0.04);
1085
- }
1086
-
1087
- .cred-step:last-child {
1088
- border-bottom: none;
1089
- }
1090
-
1091
- .cred-step__number {
1092
- width: 24px;
1093
- height: 24px;
1094
- border-radius: 50%;
1095
- background: linear-gradient(135deg, rgba(255, 107, 53, 0.2), rgba(255, 107, 53, 0.08));
1096
- color: var(--claw-coral);
1097
- font-size: 12px;
1098
- font-weight: 700;
1099
- display: flex;
1100
- align-items: center;
1101
- justify-content: center;
1102
- flex-shrink: 0;
1103
- margin-top: 2px;
1104
- }
1105
-
1106
- .cred-step__text {
1107
- font-size: 14px;
1108
- color: var(--text-secondary);
1109
- line-height: 1.5;
1110
- }
1111
-
1112
- .cred-step__text a {
1113
- color: var(--claw-coral);
1114
- text-decoration: none;
1115
- }
1116
-
1117
- .cred-step__text a:hover {
1118
- text-decoration: underline;
1119
- }
1120
-
1121
- .cred-step__text code {
1122
- background: rgba(255, 255, 255, 0.08);
1123
- padding: 2px 6px;
1124
- border-radius: 4px;
1125
- font-size: 13px;
1126
- font-family: 'JetBrains Mono', 'Fira Code', monospace;
1127
- color: var(--claw-coral-light);
1128
- }
1129
-
1130
- .env-preview {
1131
- background: var(--bg-secondary);
1132
- border: 1px solid rgba(255, 255, 255, 0.08);
1133
- border-radius: var(--radius-md);
1134
- padding: 16px;
1135
- margin-top: 16px;
1136
- position: relative;
1137
- }
1138
-
1139
- .env-preview__header {
1140
- display: flex;
1141
- align-items: center;
1142
- justify-content: space-between;
1143
- margin-bottom: 12px;
1144
- }
1145
-
1146
- .env-preview__filename {
1147
- font-size: 13px;
1148
- font-weight: 600;
1149
- color: var(--text-muted);
1150
- }
1151
-
1152
- .env-preview pre {
1153
- font-family: 'JetBrains Mono', 'Fira Code', monospace;
1154
- font-size: 13px;
1155
- line-height: 1.8;
1156
- color: var(--text-secondary);
1157
- white-space: pre-wrap;
1158
- }
1159
-
1160
- .env-preview .env-key {
1161
- color: var(--claw-coral-light);
1162
- }
1163
-
1164
- .env-preview .env-val {
1165
- color: var(--success);
1166
- }
1167
-
1168
- .env-preview .env-comment {
1169
- color: var(--text-muted);
1170
- font-style: italic;
1171
- }
1172
-
1173
- /* Warning box */
1174
- .warning-box {
1175
- background: linear-gradient(135deg, rgba(245, 158, 11, 0.08), rgba(245, 158, 11, 0.03));
1176
- border: 1px solid rgba(245, 158, 11, 0.2);
1177
- border-radius: var(--radius-md);
1178
- padding: 14px 16px;
1179
- display: flex;
1180
- align-items: flex-start;
1181
- gap: 10px;
1182
- margin-top: 16px;
1183
- backdrop-filter: blur(8px);
1184
- -webkit-backdrop-filter: blur(8px);
1185
- }
1186
-
1187
- .warning-box__icon {
1188
- font-size: 18px;
1189
- flex-shrink: 0;
1190
- }
1191
-
1192
- .warning-box__text {
1193
- font-size: 13px;
1194
- color: var(--warning);
1195
- line-height: 1.5;
1196
- }
1197
-
1198
- /* ============ Generated Output (Step 4) ============ */
1199
- .output-section {
1200
- margin-bottom: 24px;
1201
- }
1202
-
1203
- .output-section__title {
1204
- font-size: 15px;
1205
- font-weight: 600;
1206
- margin-bottom: 12px;
1207
- display: flex;
1208
- align-items: center;
1209
- gap: 8px;
1210
- }
1211
-
1212
- .code-block {
1213
- background: var(--bg-secondary);
1214
- border: 1px solid rgba(255, 255, 255, 0.08);
1215
- border-radius: var(--radius-md);
1216
- overflow: hidden;
1217
- }
1218
-
1219
- .code-block__header {
1220
- display: flex;
1221
- align-items: center;
1222
- justify-content: space-between;
1223
- padding: 10px 16px;
1224
- background: rgba(255, 255, 255, 0.03);
1225
- border-bottom: 1px solid rgba(255, 255, 255, 0.06);
1226
- }
1227
-
1228
- .code-block__filename {
1229
- font-size: 12px;
1230
- font-weight: 600;
1231
- color: var(--text-muted);
1232
- font-family: 'JetBrains Mono', 'Fira Code', monospace;
1233
- }
1234
-
1235
- .code-block__content {
1236
- padding: 16px;
1237
- font-family: 'JetBrains Mono', 'Fira Code', monospace;
1238
- font-size: 13px;
1239
- line-height: 1.7;
1240
- color: var(--text-secondary);
1241
- white-space: pre-wrap;
1242
- word-break: break-all;
1243
- overflow-x: auto;
1244
- max-height: 320px;
1245
- overflow-y: auto;
1246
- }
1247
-
1248
- /* Copy button */
1249
- .btn-copy {
1250
- display: inline-flex;
1251
- align-items: center;
1252
- gap: 6px;
1253
- padding: 6px 12px;
1254
- background: rgba(255, 255, 255, 0.06);
1255
- border: 1px solid rgba(255, 255, 255, 0.1);
1256
- border-radius: var(--radius-sm);
1257
- color: var(--text-secondary);
1258
- font-size: 12px;
1259
- font-weight: 500;
1260
- cursor: pointer;
1261
- transition: all var(--duration-fast) var(--ease-out);
1262
- font-family: inherit;
1263
- }
1264
-
1265
- .btn-copy:hover {
1266
- background: rgba(255, 255, 255, 0.1);
1267
- color: var(--text-primary);
1268
- }
1269
-
1270
- .btn-copy--copied {
1271
- color: var(--success) !important;
1272
- border-color: rgba(34, 197, 94, 0.3) !important;
1273
- }
1274
-
1275
- /* File tree */
1276
- .file-tree {
1277
- background: var(--bg-glass);
1278
- backdrop-filter: blur(12px);
1279
- -webkit-backdrop-filter: blur(12px);
1280
- border: 1px solid rgba(255, 255, 255, 0.08);
1281
- border-radius: var(--radius-md);
1282
- padding: 20px;
1283
- font-family: 'JetBrains Mono', 'Fira Code', monospace;
1284
- font-size: 13px;
1285
- line-height: 1.8;
1286
- color: var(--text-secondary);
1287
- white-space: pre;
1288
- overflow-x: auto;
1289
- }
1290
-
1291
- .file-tree .dir {
1292
- color: var(--claw-coral-light);
1293
- }
1294
-
1295
- .file-tree .file {
1296
- color: var(--text-secondary);
1297
- }
1298
-
1299
- .file-tree .comment {
1300
- color: var(--text-muted);
1301
- font-style: italic;
1302
- }
1303
-
1304
- /* ============ Navigation Buttons ============ */
1305
- .nav-buttons {
1306
- display: flex;
1307
- justify-content: space-between;
1308
- align-items: center;
1309
- margin-top: 40px;
1310
- padding-top: 24px;
1311
- border-top: 1px solid rgba(255, 255, 255, 0.06);
1312
- }
1313
-
1314
- .btn {
1315
- display: inline-flex;
1316
- align-items: center;
1317
- gap: 8px;
1318
- padding: 12px 28px;
1319
- border-radius: var(--radius-md);
1320
- font-size: 15px;
1321
- font-weight: 600;
1322
- font-family: inherit;
1323
- cursor: pointer;
1324
- transition: all var(--duration-normal) var(--ease-out);
1325
- border: none;
1326
- outline: none;
1327
- }
1328
-
1329
- .btn--primary {
1330
- background: linear-gradient(135deg, var(--claw-coral), var(--claw-coral-dark));
1331
- color: white;
1332
- box-shadow: 0 4px 20px rgba(255, 107, 53, 0.35);
1333
- }
1334
-
1335
- .btn--primary:hover {
1336
- transform: translateY(-2px);
1337
- box-shadow: 0 8px 30px rgba(255, 107, 53, 0.5);
1338
- }
1339
-
1340
- .btn--primary:disabled {
1341
- opacity: 0.4;
1342
- cursor: not-allowed;
1343
- transform: none;
1344
- box-shadow: none;
1345
- }
1346
-
1347
- .btn--secondary {
1348
- background: var(--bg-glass);
1349
- border: 1px solid rgba(255, 255, 255, 0.1);
1350
- color: var(--text-secondary);
1351
- }
1352
-
1353
- .btn--secondary:hover {
1354
- background: var(--bg-card-hover);
1355
- color: var(--text-primary);
1356
- }
1357
-
1358
- .btn--ghost {
1359
- background: transparent;
1360
- color: var(--text-muted);
1361
- padding: 12px 16px;
1362
- }
1363
-
1364
- .btn--ghost:hover {
1365
- color: var(--text-primary);
1366
- }
1367
-
1368
- /* ============ Responsive ============ */
1369
- @media (max-width: 768px) {
1370
- .app-container {
1371
- padding: 24px 16px 60px;
1372
- }
1373
-
1374
- .header__title {
1375
- font-size: 24px;
1376
- }
1377
-
1378
- .channel-grid {
1379
- grid-template-columns: 1fr;
1380
- gap: 12px;
1381
- }
1382
-
1383
- .provider-grid {
1384
- grid-template-columns: repeat(2, 1fr);
1385
- }
1386
-
1387
- .plugin-grid {
1388
- grid-template-columns: 1fr;
1389
- }
1390
-
1391
- .form-row {
1392
- grid-template-columns: 1fr;
1393
- }
1394
-
1395
- .identity-grid {
1396
- grid-template-columns: 1fr 72px;
1397
- }
1398
-
1399
- .identity-grid > .form-group:first-child {
1400
- grid-column: 1 / -1;
1401
- }
1402
-
1403
- .progress-step__label {
1404
- display: none;
1405
- }
1406
-
1407
- .progress-line {
1408
- width: 32px;
1409
- }
1410
-
1411
- .nav-buttons {
1412
- flex-direction: column-reverse;
1413
- gap: 12px;
1414
- }
1415
-
1416
- .nav-buttons .btn {
1417
- width: 100%;
1418
- justify-content: center;
1419
- }
1420
- }
1421
-
1422
- @media (max-width: 480px) {
1423
- .provider-grid {
1424
- grid-template-columns: repeat(2, 1fr);
1425
- }
1426
- }
1427
-
1428
- /* ============ Scrollbar ============ */
1429
- ::-webkit-scrollbar {
1430
- width: 6px;
1431
- height: 6px;
1432
- }
1433
-
1434
- ::-webkit-scrollbar-track {
1435
- background: transparent;
1436
- }
1437
-
1438
- ::-webkit-scrollbar-thumb {
1439
- background: rgba(255, 255, 255, 0.1);
1440
- border-radius: 3px;
1441
- }
1442
-
1443
- ::-webkit-scrollbar-thumb:hover {
1444
- background: rgba(255, 255, 255, 0.2);
1445
- }
1446
-
1447
- /* ============ Collapsible ============ */
1448
- .collapsible {
1449
- margin-bottom: 12px;
1450
- }
1451
-
1452
- .collapsible__toggle {
1453
- width: 100%;
1454
- display: flex;
1455
- align-items: center;
1456
- justify-content: space-between;
1457
- padding: 14px 16px;
1458
- background: var(--bg-glass);
1459
- backdrop-filter: blur(12px);
1460
- -webkit-backdrop-filter: blur(12px);
1461
- border: 1px solid rgba(255, 255, 255, 0.08);
1462
- border-radius: var(--radius-md);
1463
- color: var(--text-primary);
1464
- font-size: 14px;
1465
- font-weight: 500;
1466
- cursor: pointer;
1467
- font-family: inherit;
1468
- transition: all var(--duration-fast) var(--ease-out);
1469
- }
1470
-
1471
- .collapsible__toggle:hover {
1472
- background: var(--bg-card-hover);
1473
- }
1474
-
1475
- .collapsible__arrow {
1476
- transition: transform var(--duration-fast) var(--ease-out);
1477
- }
1478
-
1479
- .collapsible--open .collapsible__arrow {
1480
- transform: rotate(180deg);
1481
- }
1482
-
1483
- .collapsible__content {
1484
- max-height: 0;
1485
- overflow: hidden;
1486
- transition: max-height var(--duration-normal) var(--ease-out);
1487
- }
1488
-
1489
- .collapsible--open .collapsible__content {
1490
- max-height: 2000px;
1491
- }
1492
-
1493
- .collapsible__inner {
1494
- padding: 16px 0 0;
1495
- }
1496
-
1497
- /* ============ Toggle Switch (iOS-style) ============ */
1498
- .toggle-switch {
1499
- position: relative;
1500
- display: inline-block;
1501
- width: 44px;
1502
- height: 24px;
1503
- flex-shrink: 0;
1504
- }
1505
- .toggle-switch input {
1506
- opacity: 0;
1507
- width: 0;
1508
- height: 0;
1509
- }
1510
- .toggle-slider {
1511
- position: absolute;
1512
- cursor: pointer;
1513
- inset: 0;
1514
- background: rgba(255,255,255,0.1);
1515
- border-radius: 24px;
1516
- transition: background 0.3s ease;
1517
- }
1518
- .toggle-slider::before {
1519
- content: '';
1520
- position: absolute;
1521
- width: 18px;
1522
- height: 18px;
1523
- left: 3px;
1524
- bottom: 3px;
1525
- background: #fff;
1526
- border-radius: 50%;
1527
- transition: transform 0.3s ease;
1528
- box-shadow: 0 1px 4px rgba(0,0,0,0.3);
1529
- }
1530
- .toggle-switch input:checked + .toggle-slider {
1531
- background: var(--claw-coral);
1532
- }
1533
- .toggle-switch input:checked + .toggle-slider::before {
1534
- transform: translateX(20px);
1535
- }
1536
-
1537
- /* Plugin card visual-only toggle (no input inside — state driven by plugin-card--selected) */
1538
- .plugin-card--selected .plugin-card__switch .toggle-slider {
1539
- background: var(--claw-coral);
1540
- }
1541
- .plugin-card--selected .plugin-card__switch .toggle-slider::before {
1542
- transform: translateX(20px);
1543
- }
1544
- .plugin-card__switch {
1545
- pointer-events: none;
1546
- flex-shrink: 0;
1547
- cursor: default;
1548
- }
1549
-
1550
- /* ============================================================
1551
- Step 1 — OS Cards & Smart Advisory Panel
1552
- ============================================================ */
1553
-
1554
- /* OS Card grid responsive */
1555
- #native-os-grid {
1556
- display: grid;
1557
- grid-template-columns: repeat(4, 1fr);
1558
- gap: 12px;
1559
- margin-top: 20px;
1560
- }
1561
-
1562
- @media (max-width: 640px) {
1563
- #native-os-grid {
1564
- grid-template-columns: repeat(2, 1fr);
1565
- }
1566
- }
1567
-
1568
- /* OS card base */
1569
- .env-os-card {
1570
- padding: 20px 14px 16px !important;
1571
- text-align: center !important;
1572
- transition: all var(--duration-normal) var(--ease-out) !important;
1573
- cursor: pointer;
1574
- }
1575
-
1576
- .env-os-card:hover {
1577
- transform: translateY(-5px) scale(1.02) !important;
1578
- border-color: rgba(255, 255, 255, 0.2) !important;
1579
- box-shadow: 0 16px 40px rgba(0, 0, 0, 0.35) !important;
1580
- }
1581
-
1582
- /* Per-OS accent on hover */
1583
- #card-os-win:hover { border-color: rgba(0, 120, 215, 0.5) !important; box-shadow: 0 16px 40px rgba(0,120,215,0.15) !important; }
1584
- #card-os-linux:hover { border-color: rgba(255, 153, 0, 0.5) !important; box-shadow: 0 16px 40px rgba(255,153,0,0.12) !important; }
1585
- #card-os-vps:hover { border-color: rgba(240, 100, 50, 0.5) !important; box-shadow: 0 16px 40px rgba(240,100,50,0.12) !important; }
1586
- #card-os-linux-desktop:hover { border-color: rgba(100, 210, 130, 0.5) !important; box-shadow: 0 16px 40px rgba(100,210,130,0.12) !important; }
1587
-
1588
- /* Selected OS — coral glow */
1589
- .env-os-card.channel-card--selected {
1590
- border-color: var(--claw-coral) !important;
1591
- background: rgba(255, 107, 53, 0.07) !important;
1592
- box-shadow: 0 0 28px rgba(255, 107, 53, 0.18), inset 0 0 24px rgba(255, 107, 53, 0.04) !important;
1593
- transform: translateY(-2px);
1594
- }
1595
-
1596
- /* OS card top stripe */
1597
- .env-os-card.channel-card--selected::before {
1598
- content: '';
1599
- position: absolute;
1600
- top: 0; left: 0; right: 0;
1601
- height: 2px;
1602
- border-radius: 999px 999px 0 0;
1603
- opacity: 1;
1604
- }
1605
- #card-os-win.channel-card--selected::before { background: linear-gradient(90deg, #0078d7, #50b4fc); }
1606
- #card-os-linux.channel-card--selected::before { background: linear-gradient(90deg, #ff9900, #ffcc44); }
1607
- #card-os-vps.channel-card--selected::before { background: linear-gradient(90deg, #f06432, #f59e0b); }
1608
- #card-os-linux-desktop.channel-card--selected::before { background: linear-gradient(90deg, #64d282, #22c55e); }
1609
-
1610
- /* deploy badge inside OS card */
1611
- .env-deploy-badge {
1612
- font-size: 10.5px !important;
1613
- padding: 3px 9px !important;
1614
- border-radius: 20px;
1615
- display: inline-block;
1616
- font-weight: 600;
1617
- letter-spacing: 0.2px;
1618
- transition: all var(--duration-fast) var(--ease-out);
1619
- }
1620
- .env-deploy-badge.badge--official {
1621
- background: rgba(16, 185, 129, 0.12);
1622
- color: #10b981;
1623
- border: 1px solid rgba(16,185,129,0.25);
1624
- }
1625
- .env-deploy-badge.badge--warning {
1626
- background: rgba(245, 158, 11, 0.12);
1627
- color: #f59e0b;
1628
- border: 1px solid rgba(245,158,11,0.25);
1629
- }
1630
-
1631
- /* Advisory panel */
1632
- #env-advisory {
1633
- margin-top: 16px;
1634
- border-radius: 12px;
1635
- overflow: hidden;
1636
- border: 1px solid rgba(255,255,255,0.08);
1637
- background: rgba(255,255,255,0.025);
1638
- transition: all var(--duration-normal) var(--ease-out);
1639
- backdrop-filter: blur(8px);
1640
- -webkit-backdrop-filter: blur(8px);
1641
- }
1642
-
1643
- /* Deploy override cards (compact horizontal) */
1644
- #deploy-mode-grid .channel-card {
1645
- text-align: left !important;
1646
- padding: 12px 14px !important;
1647
- display: flex !important;
1648
- align-items: center !important;
1649
- gap: 10px !important;
1650
- }
1651
- #deploy-mode-grid .channel-card:hover {
1652
- transform: translateY(-2px) !important;
1653
- }