thevoidforge 21.0.0 → 21.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,1029 @@
1
+ /* VoidForge Wizard — Vanilla CSS */
2
+
3
+ :root {
4
+ --bg: #0a0a0a;
5
+ --bg-card: #141414;
6
+ --bg-input: #1a1a1a;
7
+ --border: #333;
8
+ --border-focus: #5b5bf7;
9
+ --text: #e5e5e5;
10
+ --text-dim: #888;
11
+ --text-muted: #8a8a8a; /* UX-R2-005: raised from #767676 for WCAG AA 4.5:1 contrast on #0a0a0a */
12
+ --accent: #5b5bf7;
13
+ --accent-hover: #7070ff;
14
+ --success: #22c55e;
15
+ --error: #ef4444;
16
+ --warning: #f59e0b;
17
+ --info: #3b82f6;
18
+ --radius: 8px;
19
+ --radius-sm: 4px;
20
+ --font: -apple-system, BlinkMacSystemFont, 'Segoe UI', system-ui, sans-serif;
21
+ --mono: 'SF Mono', 'Fira Code', 'JetBrains Mono', monospace;
22
+ /* Financial Color Tokens (§9.15.3) */
23
+ --fin-positive: #22c55e;
24
+ --fin-negative: #ef4444;
25
+ --fin-warning: #f59e0b;
26
+ --fin-neutral: #94a3b8;
27
+ --fin-healthy: #22c55e;
28
+ --fin-error: #ef4444;
29
+ --fin-inactive: #475569;
30
+ --fin-frozen: #3b82f6;
31
+ }
32
+
33
+ *, *::before, *::after {
34
+ box-sizing: border-box;
35
+ margin: 0;
36
+ padding: 0;
37
+ }
38
+
39
+ body {
40
+ font-family: var(--font);
41
+ background: var(--bg);
42
+ color: var(--text);
43
+ line-height: 1.6;
44
+ min-height: 100vh;
45
+ }
46
+
47
+ a {
48
+ color: var(--accent);
49
+ text-decoration: none;
50
+ }
51
+ a:hover { text-decoration: underline; }
52
+
53
+ /* Wizard Layout */
54
+ .wizard {
55
+ max-width: 720px;
56
+ margin: 0 auto;
57
+ min-height: 100vh;
58
+ display: flex;
59
+ flex-direction: column;
60
+ }
61
+
62
+ .wizard-header {
63
+ padding: 24px 24px 16px;
64
+ border-bottom: 1px solid var(--border);
65
+ }
66
+
67
+ .logo {
68
+ font-size: 18px;
69
+ font-weight: 700;
70
+ letter-spacing: -0.5px;
71
+ margin-bottom: 16px;
72
+ color: var(--accent);
73
+ }
74
+
75
+ .progress {
76
+ height: 4px;
77
+ background: var(--border);
78
+ border-radius: 2px;
79
+ overflow: hidden;
80
+ }
81
+
82
+ .progress-bar {
83
+ height: 100%;
84
+ background: var(--accent);
85
+ border-radius: 2px;
86
+ transition: width 0.4s ease;
87
+ width: 20%;
88
+ }
89
+
90
+ .step-label {
91
+ font-size: 13px;
92
+ color: var(--text-dim);
93
+ margin-top: 8px;
94
+ }
95
+
96
+ .wizard-body {
97
+ flex: 1;
98
+ padding: 32px 24px;
99
+ overflow-y: auto;
100
+ }
101
+
102
+ .wizard-footer {
103
+ padding: 16px 24px;
104
+ border-top: 1px solid var(--border);
105
+ display: flex;
106
+ justify-content: space-between;
107
+ gap: 12px;
108
+ }
109
+
110
+ /* Visibility */
111
+ .hidden { display: none; }
112
+
113
+ /* Steps — ENCHANT-R2-012: Directional transitions */
114
+ .step { animation: slideInRight 0.3s ease; }
115
+ .step.entering-backward { animation: slideInLeft 0.3s ease; }
116
+
117
+ @keyframes slideInRight {
118
+ from { opacity: 0; transform: translateX(20px); }
119
+ to { opacity: 1; transform: translateX(0); }
120
+ }
121
+
122
+ @keyframes slideInLeft {
123
+ from { opacity: 0; transform: translateX(-20px); }
124
+ to { opacity: 1; transform: translateX(0); }
125
+ }
126
+
127
+ /* Skip navigation — UX-R2-010 */
128
+ .skip-nav {
129
+ position: absolute;
130
+ left: -9999px;
131
+ top: auto;
132
+ z-index: 100;
133
+ padding: 8px 16px;
134
+ background: var(--accent);
135
+ color: #fff;
136
+ border-radius: var(--radius-sm);
137
+ font-size: 14px;
138
+ text-decoration: none;
139
+ }
140
+ .skip-nav:focus {
141
+ left: 8px;
142
+ top: 8px;
143
+ }
144
+
145
+ /* ENCHANT-R2-002: Subtitle delayed entrance */
146
+ .step .subtitle {
147
+ opacity: 0;
148
+ animation: subtitleReveal 0.6s ease 0.2s forwards;
149
+ }
150
+
151
+ @keyframes subtitleReveal {
152
+ from { opacity: 0; transform: translateY(4px); }
153
+ to { opacity: 1; transform: translateY(0); }
154
+ }
155
+
156
+ /* ENCHANT-R2-003: Forge-lit pulse on vault unlock */
157
+ .forge-lit {
158
+ animation: forgePulse 0.6s ease-out;
159
+ }
160
+
161
+ @keyframes forgePulse {
162
+ 0% { box-shadow: 0 0 0 0 rgba(91, 91, 247, 0.4); }
163
+ 50% { box-shadow: 0 0 30px 10px rgba(91, 91, 247, 0.15); border-color: var(--accent); }
164
+ 100% { box-shadow: 0 0 0 0 rgba(91, 91, 247, 0); }
165
+ }
166
+
167
+ /* ENCHANT-R2-006: Streaming cursor for PRD generation */
168
+ .generation-output pre.streaming::after {
169
+ content: '';
170
+ display: inline-block;
171
+ width: 2px;
172
+ height: 1em;
173
+ background: var(--accent);
174
+ margin-left: 2px;
175
+ vertical-align: text-bottom;
176
+ animation: cursorBlink 0.8s ease-in-out infinite;
177
+ }
178
+
179
+ @keyframes cursorBlink {
180
+ 0%, 100% { opacity: 1; }
181
+ 50% { opacity: 0; }
182
+ }
183
+
184
+ /* ENCHANT-R2-011: Success icon pop animation */
185
+ .success-icon {
186
+ opacity: 0;
187
+ transform: scale(0.5);
188
+ animation: successPop 0.5s cubic-bezier(0.175, 0.885, 0.32, 1.275) 0.2s forwards;
189
+ }
190
+
191
+ @keyframes successPop {
192
+ 0% { opacity: 0; transform: scale(0.5); }
193
+ 70% { opacity: 1; transform: scale(1.1); }
194
+ 100% { opacity: 1; transform: scale(1); }
195
+ }
196
+
197
+ /* ENCHANT-R2-014: Status message slide-in */
198
+ .status-row:not(:empty) {
199
+ animation: statusSlideIn 0.25s ease;
200
+ }
201
+
202
+ @keyframes statusSlideIn {
203
+ from { opacity: 0; transform: translateY(-4px); }
204
+ to { opacity: 1; transform: translateY(0); }
205
+ }
206
+
207
+ /* noscript fallback — UX-R2-030 */
208
+ .noscript-msg {
209
+ padding: 40px;
210
+ text-align: center;
211
+ color: var(--error);
212
+ font-size: 16px;
213
+ }
214
+
215
+ h1 {
216
+ font-size: 28px;
217
+ font-weight: 700;
218
+ letter-spacing: -0.5px;
219
+ margin-bottom: 8px;
220
+ }
221
+
222
+ h2 {
223
+ font-size: 18px;
224
+ font-weight: 600;
225
+ margin-bottom: 8px;
226
+ }
227
+
228
+ h3 {
229
+ font-size: 15px;
230
+ font-weight: 600;
231
+ margin-bottom: 12px;
232
+ }
233
+
234
+ .subtitle {
235
+ color: var(--text-dim);
236
+ margin-bottom: 24px;
237
+ }
238
+
239
+ /* Cards */
240
+ .card {
241
+ background: var(--bg-card);
242
+ border: 1px solid var(--border);
243
+ border-radius: var(--radius);
244
+ padding: 24px;
245
+ margin-bottom: 16px;
246
+ }
247
+
248
+ /* Form Fields */
249
+ .field {
250
+ margin-bottom: 16px;
251
+ }
252
+
253
+ .field:last-child { margin-bottom: 0; }
254
+
255
+ label {
256
+ display: block;
257
+ font-size: 14px;
258
+ font-weight: 500;
259
+ margin-bottom: 6px;
260
+ }
261
+
262
+ .optional {
263
+ color: var(--text-muted);
264
+ font-weight: 400;
265
+ }
266
+
267
+ input[type="text"],
268
+ input[type="password"],
269
+ textarea,
270
+ select {
271
+ width: 100%;
272
+ padding: 10px 12px;
273
+ font-size: 14px;
274
+ font-family: var(--font);
275
+ background: var(--bg-input);
276
+ border: 1px solid var(--border);
277
+ border-radius: var(--radius-sm);
278
+ color: var(--text);
279
+ outline: none;
280
+ transition: border-color 0.2s;
281
+ }
282
+
283
+ input:focus, textarea:focus, select:focus {
284
+ border-color: var(--border-focus);
285
+ box-shadow: 0 0 0 2px rgba(91, 91, 247, 0.25);
286
+ outline: none;
287
+ }
288
+
289
+ .btn:focus-visible {
290
+ border-color: var(--border-focus);
291
+ box-shadow: 0 0 0 2px rgba(91, 91, 247, 0.25);
292
+ outline: none;
293
+ }
294
+
295
+ textarea {
296
+ resize: vertical;
297
+ font-family: var(--mono);
298
+ font-size: 13px;
299
+ line-height: 1.5;
300
+ }
301
+
302
+ select {
303
+ cursor: pointer;
304
+ appearance: none;
305
+ background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' fill='%23888' viewBox='0 0 16 16'%3E%3Cpath d='M8 11L3 6h10z'/%3E%3C/svg%3E");
306
+ background-repeat: no-repeat;
307
+ background-position: right 12px center;
308
+ padding-right: 32px;
309
+ }
310
+
311
+ .field-hint {
312
+ font-size: 12px;
313
+ color: var(--text-muted);
314
+ margin-top: 4px;
315
+ }
316
+
317
+ .field-row {
318
+ display: grid;
319
+ grid-template-columns: 1fr 1fr 1fr;
320
+ gap: 12px;
321
+ }
322
+
323
+ .input-row {
324
+ display: flex;
325
+ gap: 8px;
326
+ }
327
+
328
+ .input-row input { flex: 1; }
329
+
330
+ /* Checkbox Label */
331
+ .checkbox-label {
332
+ display: inline-flex;
333
+ align-items: flex-start;
334
+ gap: 8px;
335
+ cursor: pointer;
336
+ font-size: 14px;
337
+ line-height: 1.5;
338
+ }
339
+
340
+ .checkbox-label input[type="checkbox"] {
341
+ margin-top: 3px;
342
+ min-width: 18px;
343
+ min-height: 18px;
344
+ cursor: pointer;
345
+ }
346
+
347
+ /* Buttons */
348
+ .btn {
349
+ padding: 10px 20px;
350
+ font-size: 14px;
351
+ font-weight: 500;
352
+ font-family: var(--font);
353
+ border: 1px solid var(--border);
354
+ border-radius: var(--radius-sm);
355
+ cursor: pointer;
356
+ transition: all 0.2s;
357
+ background: var(--bg-card);
358
+ color: var(--text);
359
+ }
360
+
361
+ .btn:disabled {
362
+ opacity: 0.4;
363
+ cursor: not-allowed;
364
+ }
365
+
366
+ /* ENCHANT-R2-013: Primary button gradient glow */
367
+ .btn-primary {
368
+ background: linear-gradient(135deg, var(--accent) 0%, #6b6bff 100%);
369
+ border-color: var(--accent);
370
+ color: #fff;
371
+ box-shadow: 0 2px 8px rgba(91, 91, 247, 0.25);
372
+ }
373
+
374
+ .btn-primary:hover:not(:disabled) {
375
+ background: linear-gradient(135deg, var(--accent-hover) 0%, #8080ff 100%);
376
+ border-color: var(--accent-hover);
377
+ box-shadow: 0 4px 16px rgba(91, 91, 247, 0.35);
378
+ transform: translateY(-1px);
379
+ }
380
+
381
+ .btn-primary:active:not(:disabled) {
382
+ transform: translateY(0);
383
+ box-shadow: 0 1px 4px rgba(91, 91, 247, 0.2);
384
+ }
385
+
386
+ .btn-secondary:hover:not(:disabled) {
387
+ border-color: var(--text-dim);
388
+ }
389
+
390
+ .btn-small {
391
+ padding: 4px 10px;
392
+ font-size: 12px;
393
+ }
394
+
395
+ .btn-row {
396
+ display: flex;
397
+ gap: 12px;
398
+ margin-top: 16px;
399
+ }
400
+
401
+ /* Status Messages */
402
+ .status-row {
403
+ font-size: 13px;
404
+ padding: 8px 12px;
405
+ border-radius: var(--radius-sm);
406
+ margin-top: 12px;
407
+ }
408
+
409
+ .status-row:empty { display: none; }
410
+
411
+ .status-row.success {
412
+ background: rgba(34, 197, 94, 0.1);
413
+ border: 1px solid rgba(34, 197, 94, 0.3);
414
+ color: var(--success);
415
+ }
416
+
417
+ .status-row.error {
418
+ background: rgba(239, 68, 68, 0.1);
419
+ border: 1px solid rgba(239, 68, 68, 0.3);
420
+ color: var(--error);
421
+ }
422
+
423
+ .status-row.info {
424
+ background: rgba(59, 130, 246, 0.1);
425
+ border: 1px solid rgba(59, 130, 246, 0.3);
426
+ color: var(--info);
427
+ }
428
+
429
+ .status-row.loading {
430
+ background: rgba(91, 91, 247, 0.1);
431
+ border: 1px solid rgba(91, 91, 247, 0.3);
432
+ color: var(--accent);
433
+ }
434
+
435
+ /* Tabs */
436
+ .tabs {
437
+ display: flex;
438
+ gap: 0;
439
+ margin-bottom: 16px;
440
+ border-bottom: 1px solid var(--border);
441
+ }
442
+
443
+ .tab {
444
+ padding: 10px 20px;
445
+ font-size: 14px;
446
+ font-family: var(--font);
447
+ background: none;
448
+ border: none;
449
+ border-bottom: 2px solid transparent;
450
+ color: var(--text-dim);
451
+ cursor: pointer;
452
+ transition: all 0.2s;
453
+ }
454
+
455
+ .tab:hover { color: var(--text); }
456
+
457
+ .tab.active {
458
+ color: var(--accent);
459
+ border-bottom-color: var(--accent);
460
+ }
461
+
462
+ .tab-panel { display: none; }
463
+ .tab-panel.active { display: block; }
464
+
465
+ /* Review Table */
466
+ .review-table {
467
+ width: 100%;
468
+ border-collapse: collapse;
469
+ }
470
+
471
+ .review-table td {
472
+ padding: 10px 0;
473
+ border-bottom: 1px solid var(--border);
474
+ font-size: 14px;
475
+ }
476
+
477
+ .review-table tr:last-child td { border-bottom: none; }
478
+
479
+ #register-domain-row {
480
+ transition: background-color 0.3s ease;
481
+ }
482
+
483
+ #register-domain-row.highlight {
484
+ background-color: rgba(99, 102, 241, 0.08);
485
+ }
486
+
487
+ .review-label {
488
+ color: var(--text-dim);
489
+ width: 120px;
490
+ font-weight: 500;
491
+ }
492
+
493
+ /* Setup Choice Cards */
494
+ .setup-card {
495
+ background: var(--bg-card);
496
+ border: 1px solid var(--border);
497
+ border-radius: var(--radius);
498
+ padding: 20px 24px;
499
+ margin-bottom: 12px;
500
+ cursor: pointer;
501
+ transition: border-color 0.2s, background 0.2s;
502
+ }
503
+
504
+ .setup-card:hover {
505
+ border-color: var(--accent);
506
+ background: rgba(91, 91, 247, 0.03);
507
+ }
508
+
509
+ .setup-card-header {
510
+ display: flex;
511
+ justify-content: space-between;
512
+ align-items: center;
513
+ margin-bottom: 8px;
514
+ }
515
+
516
+ .setup-card-name {
517
+ font-size: 18px;
518
+ font-weight: 600;
519
+ }
520
+
521
+ .setup-card-desc {
522
+ font-size: 14px;
523
+ color: var(--text-dim);
524
+ margin-bottom: 12px;
525
+ }
526
+
527
+ .setup-card-includes {
528
+ list-style: none;
529
+ font-size: 13px;
530
+ color: var(--text-dim);
531
+ }
532
+
533
+ .setup-card-includes li {
534
+ padding: 2px 0;
535
+ }
536
+
537
+ .setup-card-includes li::before {
538
+ content: "\2713\00a0";
539
+ color: var(--success);
540
+ }
541
+
542
+ .setup-card-includes li:first-child::before {
543
+ content: "";
544
+ }
545
+
546
+ /* Provider Cards */
547
+ .provider-card {
548
+ background: var(--bg-card);
549
+ border: 1px solid var(--border);
550
+ border-radius: var(--radius);
551
+ padding: 16px 20px;
552
+ margin-bottom: 12px;
553
+ }
554
+
555
+ .provider-card.configured {
556
+ border-color: rgba(34, 197, 94, 0.3);
557
+ }
558
+
559
+ .provider-header {
560
+ display: flex;
561
+ justify-content: space-between;
562
+ align-items: center;
563
+ cursor: pointer;
564
+ }
565
+
566
+ .provider-header-left {
567
+ display: flex;
568
+ align-items: center;
569
+ gap: 10px;
570
+ flex: 1;
571
+ min-width: 0;
572
+ }
573
+
574
+ .provider-chevron {
575
+ font-size: 12px;
576
+ color: var(--text-muted);
577
+ transition: transform 0.2s;
578
+ flex-shrink: 0;
579
+ }
580
+
581
+ .provider-card.open .provider-chevron {
582
+ transform: rotate(90deg);
583
+ }
584
+
585
+ .provider-name {
586
+ font-weight: 600;
587
+ font-size: 15px;
588
+ }
589
+
590
+ .provider-desc {
591
+ font-size: 12px;
592
+ color: var(--text-muted);
593
+ margin-top: 2px;
594
+ }
595
+
596
+ .provider-badge {
597
+ font-size: 11px;
598
+ padding: 2px 8px;
599
+ border-radius: 10px;
600
+ font-weight: 500;
601
+ }
602
+
603
+ .provider-badge.connected {
604
+ background: rgba(34, 197, 94, 0.15);
605
+ color: var(--success);
606
+ }
607
+
608
+ .provider-badge.not-connected {
609
+ background: rgba(136, 136, 136, 0.15);
610
+ color: var(--text-dim);
611
+ }
612
+
613
+ .provider-fields {
614
+ margin-top: 12px;
615
+ }
616
+
617
+ .provider-body {
618
+ margin-top: 12px;
619
+ padding-top: 12px;
620
+ border-top: 1px solid var(--border);
621
+ }
622
+
623
+ .provider-help-btn {
624
+ width: 24px;
625
+ height: 24px;
626
+ border-radius: 50%;
627
+ border: 1px solid var(--border);
628
+ background: var(--bg-input);
629
+ color: var(--text-dim);
630
+ font-size: 13px;
631
+ font-weight: 600;
632
+ cursor: pointer;
633
+ transition: all 0.2s;
634
+ display: inline-flex;
635
+ align-items: center;
636
+ justify-content: center;
637
+ margin-left: 8px;
638
+ flex-shrink: 0;
639
+ }
640
+
641
+ .provider-help-btn:hover {
642
+ border-color: var(--accent);
643
+ color: var(--accent);
644
+ }
645
+
646
+ .provider-help {
647
+ position: relative;
648
+ margin-top: 12px;
649
+ padding: 12px 16px;
650
+ padding-right: 36px;
651
+ background: rgba(59, 130, 246, 0.06);
652
+ border: 1px solid rgba(59, 130, 246, 0.15);
653
+ border-radius: var(--radius-sm);
654
+ font-size: 13px;
655
+ line-height: 1.6;
656
+ }
657
+
658
+ .provider-help-close {
659
+ position: absolute;
660
+ top: 8px;
661
+ right: 8px;
662
+ width: 22px;
663
+ height: 22px;
664
+ border: none;
665
+ background: rgba(59, 130, 246, 0.15);
666
+ color: var(--info);
667
+ border-radius: 50%;
668
+ font-size: 14px;
669
+ cursor: pointer;
670
+ display: flex;
671
+ align-items: center;
672
+ justify-content: center;
673
+ transition: background 0.2s;
674
+ }
675
+
676
+ .provider-help-close:hover {
677
+ background: rgba(59, 130, 246, 0.3);
678
+ }
679
+
680
+ .provider-help ol {
681
+ padding-left: 18px;
682
+ margin: 8px 0;
683
+ }
684
+
685
+ .provider-help li {
686
+ padding: 2px 0;
687
+ }
688
+
689
+ .provider-help a {
690
+ color: var(--accent);
691
+ font-weight: 500;
692
+ }
693
+
694
+ .provider-help .help-link {
695
+ display: inline-block;
696
+ margin-top: 8px;
697
+ padding: 6px 12px;
698
+ background: var(--accent);
699
+ color: #fff;
700
+ border-radius: var(--radius-sm);
701
+ font-size: 12px;
702
+ font-weight: 500;
703
+ text-decoration: none;
704
+ transition: background 0.2s;
705
+ }
706
+
707
+ .provider-help .help-link:hover {
708
+ background: var(--accent-hover);
709
+ text-decoration: none;
710
+ }
711
+
712
+ /* Deploy Target Cards */
713
+ .deploy-card {
714
+ background: var(--bg-card);
715
+ border: 1px solid var(--border);
716
+ border-radius: var(--radius);
717
+ padding: 16px 20px;
718
+ margin-bottom: 12px;
719
+ cursor: pointer;
720
+ transition: border-color 0.2s;
721
+ }
722
+
723
+ .deploy-card:hover { border-color: var(--text-dim); }
724
+
725
+ .deploy-card.selected {
726
+ border-color: var(--accent);
727
+ background: rgba(91, 91, 247, 0.05);
728
+ }
729
+
730
+ .deploy-card.unavailable {
731
+ opacity: 0.45;
732
+ cursor: not-allowed;
733
+ }
734
+
735
+ .deploy-card-header {
736
+ display: flex;
737
+ justify-content: space-between;
738
+ align-items: center;
739
+ }
740
+
741
+ .deploy-card-name {
742
+ font-weight: 600;
743
+ font-size: 15px;
744
+ }
745
+
746
+ .deploy-card-desc {
747
+ font-size: 13px;
748
+ color: var(--text-dim);
749
+ margin-top: 4px;
750
+ }
751
+
752
+ /* File List */
753
+ .file-list {
754
+ list-style: none;
755
+ font-size: 14px;
756
+ }
757
+
758
+ .file-list li {
759
+ padding: 6px 0;
760
+ border-bottom: 1px solid var(--border);
761
+ }
762
+
763
+ .file-list li:last-child { border-bottom: none; }
764
+
765
+ code {
766
+ font-family: var(--mono);
767
+ font-size: 13px;
768
+ background: var(--bg-input);
769
+ padding: 2px 6px;
770
+ border-radius: 3px;
771
+ }
772
+
773
+ /* Generation Output */
774
+ .generation-output {
775
+ margin-top: 16px;
776
+ border: 1px solid var(--border);
777
+ border-radius: var(--radius-sm);
778
+ overflow: hidden;
779
+ }
780
+
781
+
782
+ .generation-header {
783
+ display: flex;
784
+ justify-content: space-between;
785
+ align-items: center;
786
+ padding: 8px 12px;
787
+ background: var(--bg-input);
788
+ border-bottom: 1px solid var(--border);
789
+ font-size: 13px;
790
+ color: var(--text-dim);
791
+ }
792
+
793
+ .generation-output pre {
794
+ padding: 16px;
795
+ font-family: var(--mono);
796
+ font-size: 12px;
797
+ line-height: 1.5;
798
+ max-height: 400px;
799
+ overflow-y: auto;
800
+ white-space: pre-wrap;
801
+ word-wrap: break-word;
802
+ }
803
+
804
+ /* Success Card */
805
+ .success-card {
806
+ text-align: center;
807
+ border-color: rgba(34, 197, 94, 0.3);
808
+ }
809
+
810
+ .success-icon {
811
+ font-size: 48px;
812
+ color: var(--success);
813
+ margin-bottom: 16px;
814
+ }
815
+
816
+ /* Next Steps */
817
+ .next-steps {
818
+ padding-left: 20px;
819
+ font-size: 14px;
820
+ }
821
+
822
+ .next-steps li {
823
+ padding: 4px 0;
824
+ }
825
+
826
+ /* Spinner */
827
+ .spinner {
828
+ width: 40px;
829
+ height: 40px;
830
+ border: 3px solid var(--border);
831
+ border-top-color: var(--accent);
832
+ border-radius: 50%;
833
+ animation: spin 0.8s linear infinite;
834
+ margin: 24px auto;
835
+ }
836
+
837
+ @keyframes spin {
838
+ to { transform: rotate(360deg); }
839
+ }
840
+
841
+ /* Screen reader only */
842
+ .sr-only {
843
+ position: absolute;
844
+ width: 1px;
845
+ height: 1px;
846
+ padding: 0;
847
+ margin: -1px;
848
+ overflow: hidden;
849
+ clip: rect(0, 0, 0, 0);
850
+ white-space: nowrap;
851
+ border: 0;
852
+ }
853
+
854
+ /* Provision Log */
855
+ .provision-log {
856
+ font-family: var(--mono);
857
+ font-size: 13px;
858
+ line-height: 1.5;
859
+ min-height: 120px;
860
+ max-height: 400px;
861
+ overflow-y: auto;
862
+ }
863
+
864
+ .provision-empty {
865
+ color: var(--text-muted);
866
+ font-style: italic;
867
+ padding: 16px 0;
868
+ }
869
+
870
+ /* Danger ghost button for risky actions */
871
+ .btn-danger-ghost {
872
+ color: var(--text-muted);
873
+ border-color: var(--border);
874
+ }
875
+
876
+ .btn-danger-ghost:hover:not(:disabled) {
877
+ color: var(--error);
878
+ border-color: var(--error);
879
+ }
880
+
881
+ .provision-step {
882
+ display: flex;
883
+ align-items: flex-start;
884
+ gap: 10px;
885
+ padding: 4px 0;
886
+ }
887
+
888
+ .provision-icon {
889
+ flex-shrink: 0;
890
+ width: 18px;
891
+ text-align: center;
892
+ line-height: 1.5;
893
+ }
894
+
895
+ .provision-icon.started {
896
+ color: var(--accent);
897
+ animation: pulse 1s ease-in-out infinite;
898
+ }
899
+
900
+ .provision-icon.done { color: var(--success); }
901
+ .provision-icon.error { color: var(--error); }
902
+ .provision-icon.skipped { color: var(--text-muted); }
903
+
904
+ @keyframes pulse {
905
+ 0%, 100% { opacity: 1; }
906
+ 50% { opacity: 0.4; }
907
+ }
908
+
909
+ .provision-message { flex: 1; }
910
+
911
+ .provision-detail {
912
+ font-size: 11px;
913
+ color: var(--text-muted);
914
+ margin-left: 28px;
915
+ margin-top: -2px;
916
+ padding-bottom: 4px;
917
+ }
918
+
919
+ /* Infra details on done page */
920
+ .infra-item {
921
+ display: flex;
922
+ justify-content: space-between;
923
+ padding: 8px 0;
924
+ border-bottom: 1px solid var(--border);
925
+ font-size: 14px;
926
+ }
927
+
928
+ .infra-item:last-child { border-bottom: none; }
929
+
930
+ .infra-label {
931
+ color: var(--text-dim);
932
+ font-weight: 500;
933
+ }
934
+
935
+ .infra-value {
936
+ font-family: var(--mono);
937
+ font-size: 13px;
938
+ }
939
+
940
+ /* Operations Menu (Act 3) */
941
+ .ops-card {
942
+ border: 1px solid var(--border);
943
+ border-radius: var(--radius);
944
+ margin-bottom: 8px;
945
+ background: var(--bg-card);
946
+ transition: border-color 0.2s;
947
+ }
948
+ .ops-card:hover { border-color: var(--accent); }
949
+
950
+ .ops-card-header {
951
+ display: flex;
952
+ align-items: center;
953
+ padding: 14px 16px;
954
+ cursor: pointer;
955
+ gap: 12px;
956
+ }
957
+ .ops-card-header:focus-visible {
958
+ outline: 2px solid var(--accent);
959
+ outline-offset: -2px;
960
+ border-radius: var(--radius);
961
+ }
962
+
963
+ .ops-card-title {
964
+ font-weight: 600;
965
+ font-size: 14px;
966
+ flex: 1;
967
+ }
968
+ .ops-card-summary {
969
+ font-size: 12px;
970
+ color: var(--text-dim);
971
+ }
972
+ .ops-card-chevron {
973
+ font-size: 10px;
974
+ color: var(--text-dim);
975
+ transition: transform 0.2s;
976
+ }
977
+ .ops-card.expanded .ops-card-chevron { transform: rotate(90deg); }
978
+
979
+ .ops-card-body {
980
+ padding: 0 16px 16px;
981
+ border-top: 1px solid var(--border);
982
+ }
983
+ .ops-card-body.hidden { display: none; }
984
+
985
+ /* Resilience Pack toggles */
986
+ .resilience-grid {
987
+ display: grid;
988
+ grid-template-columns: 1fr 1fr;
989
+ gap: 8px;
990
+ }
991
+ .resilience-toggle {
992
+ display: flex;
993
+ align-items: center;
994
+ gap: 8px;
995
+ font-size: 13px;
996
+ color: var(--text-dim);
997
+ cursor: pointer;
998
+ padding: 4px 0;
999
+ }
1000
+ .resilience-toggle input[type="checkbox"] {
1001
+ accent-color: var(--accent);
1002
+ width: 16px;
1003
+ height: 16px;
1004
+ }
1005
+
1006
+ /* Responsive */
1007
+ @media (max-width: 600px) {
1008
+ .resilience-grid { grid-template-columns: 1fr; }
1009
+ .wizard-body { padding: 24px 16px; }
1010
+ .wizard-header { padding: 16px; }
1011
+ .wizard-footer { padding: 12px 16px; }
1012
+ .field-row { grid-template-columns: 1fr; }
1013
+ .tabs { flex-wrap: wrap; }
1014
+ .tab { padding: 8px 14px; font-size: 13px; }
1015
+ .input-row { flex-wrap: wrap; }
1016
+ h1 { font-size: 22px; }
1017
+ .provision-log { max-height: 250px; }
1018
+ .infra-item { flex-direction: column; gap: 2px; }
1019
+ .infra-value { word-break: break-all; font-size: 12px; }
1020
+ }
1021
+
1022
+ /* Reduced motion */
1023
+ @media (prefers-reduced-motion: reduce) {
1024
+ *, *::before, *::after {
1025
+ animation-duration: 0.01ms !important;
1026
+ animation-iteration-count: 1 !important;
1027
+ transition-duration: 0.01ms !important;
1028
+ }
1029
+ }