@runcontext/ui 0.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,677 @@
1
+ /* ContextKit Setup Wizard — Dark Theme */
2
+
3
+ :root {
4
+ --bg: #0a0a0f;
5
+ --surface: #111118;
6
+ --surface-hover: #16161f;
7
+ --border: #222233;
8
+ --border-focus: #4f9eff;
9
+ --text: #e4e4e7;
10
+ --text-muted: #71717a;
11
+ --accent: #4f9eff;
12
+ --accent-hover: #3b8beb;
13
+ --success: #22c55e;
14
+ --error: #ef4444;
15
+ --warning: #eab308;
16
+ --font: system-ui, -apple-system, 'Segoe UI', Roboto, sans-serif;
17
+ --radius: 8px;
18
+ --radius-sm: 4px;
19
+ --shadow: 0 2px 8px rgba(0, 0, 0, 0.4);
20
+ }
21
+
22
+ *, *::before, *::after {
23
+ box-sizing: border-box;
24
+ margin: 0;
25
+ padding: 0;
26
+ }
27
+
28
+ html {
29
+ font-size: 16px;
30
+ -webkit-font-smoothing: antialiased;
31
+ -moz-osx-font-smoothing: grayscale;
32
+ }
33
+
34
+ body {
35
+ font-family: var(--font);
36
+ background: var(--bg);
37
+ color: var(--text);
38
+ line-height: 1.6;
39
+ min-height: 100vh;
40
+ display: flex;
41
+ justify-content: center;
42
+ padding: 2rem 1rem;
43
+ }
44
+
45
+ /* ---- Wizard Container ---- */
46
+
47
+ .wizard {
48
+ width: 100%;
49
+ max-width: 640px;
50
+ }
51
+
52
+ .wizard-header {
53
+ text-align: center;
54
+ margin-bottom: 2rem;
55
+ }
56
+
57
+ .wizard-header h1 {
58
+ font-size: 1.75rem;
59
+ font-weight: 700;
60
+ letter-spacing: -0.02em;
61
+ color: var(--text);
62
+ }
63
+
64
+ .wizard-header .tagline {
65
+ color: var(--text-muted);
66
+ font-size: 0.95rem;
67
+ margin-top: 0.25rem;
68
+ }
69
+
70
+ /* ---- Progress Bar ---- */
71
+
72
+ .progress-bar {
73
+ display: flex;
74
+ align-items: flex-start;
75
+ justify-content: space-between;
76
+ margin-bottom: 2.5rem;
77
+ position: relative;
78
+ }
79
+
80
+ .progress-bar::before {
81
+ content: '';
82
+ position: absolute;
83
+ top: 16px;
84
+ left: 32px;
85
+ right: 32px;
86
+ height: 2px;
87
+ background: var(--border);
88
+ z-index: 0;
89
+ }
90
+
91
+ .progress-step {
92
+ display: flex;
93
+ flex-direction: column;
94
+ align-items: center;
95
+ gap: 0.4rem;
96
+ position: relative;
97
+ z-index: 1;
98
+ flex: 1;
99
+ }
100
+
101
+ .step-num {
102
+ width: 32px;
103
+ height: 32px;
104
+ border-radius: 50%;
105
+ display: flex;
106
+ align-items: center;
107
+ justify-content: center;
108
+ font-size: 0.85rem;
109
+ font-weight: 600;
110
+ background: var(--surface);
111
+ border: 2px solid var(--border);
112
+ color: var(--text-muted);
113
+ transition: all 0.25s ease;
114
+ }
115
+
116
+ .step-label {
117
+ font-size: 0.75rem;
118
+ color: var(--text-muted);
119
+ transition: color 0.25s ease;
120
+ }
121
+
122
+ .progress-step.active .step-num {
123
+ background: var(--accent);
124
+ border-color: var(--accent);
125
+ color: #fff;
126
+ }
127
+
128
+ .progress-step.active .step-label {
129
+ color: var(--accent);
130
+ }
131
+
132
+ .progress-step.completed .step-num {
133
+ background: var(--success);
134
+ border-color: var(--success);
135
+ color: #fff;
136
+ }
137
+
138
+ .progress-step.completed .step-label {
139
+ color: var(--success);
140
+ }
141
+
142
+ /* ---- Steps ---- */
143
+
144
+ .step {
145
+ display: none;
146
+ animation: fadeIn 0.3s ease;
147
+ }
148
+
149
+ .step.active {
150
+ display: block;
151
+ }
152
+
153
+ @keyframes fadeIn {
154
+ from { opacity: 0; transform: translateY(8px); }
155
+ to { opacity: 1; transform: translateY(0); }
156
+ }
157
+
158
+ .step h2 {
159
+ font-size: 1.25rem;
160
+ font-weight: 600;
161
+ margin-bottom: 1.5rem;
162
+ letter-spacing: -0.01em;
163
+ }
164
+
165
+ /* ---- Form Fields ---- */
166
+
167
+ .field {
168
+ margin-bottom: 1.25rem;
169
+ }
170
+
171
+ .field label {
172
+ display: block;
173
+ font-size: 0.875rem;
174
+ font-weight: 500;
175
+ margin-bottom: 0.4rem;
176
+ color: var(--text);
177
+ }
178
+
179
+ .input, .textarea, .select {
180
+ width: 100%;
181
+ padding: 0.625rem 0.75rem;
182
+ font-size: 0.9375rem;
183
+ font-family: var(--font);
184
+ background: var(--surface);
185
+ border: 1px solid var(--border);
186
+ border-radius: var(--radius);
187
+ color: var(--text);
188
+ transition: border-color 0.2s ease, box-shadow 0.2s ease;
189
+ outline: none;
190
+ }
191
+
192
+ .input:focus, .textarea:focus, .select:focus {
193
+ border-color: var(--border-focus);
194
+ box-shadow: 0 0 0 3px rgba(79, 158, 255, 0.15);
195
+ }
196
+
197
+ .input::placeholder, .textarea::placeholder {
198
+ color: var(--text-muted);
199
+ }
200
+
201
+ .textarea {
202
+ resize: vertical;
203
+ min-height: 80px;
204
+ }
205
+
206
+ .hint {
207
+ font-size: 0.8rem;
208
+ color: var(--text-muted);
209
+ margin-top: 0.3rem;
210
+ }
211
+
212
+ .textarea-wrapper {
213
+ position: relative;
214
+ }
215
+
216
+ .textarea-wrapper .textarea {
217
+ padding-right: 3rem;
218
+ }
219
+
220
+ .btn-icon {
221
+ position: absolute;
222
+ right: 8px;
223
+ top: 8px;
224
+ width: 32px;
225
+ height: 32px;
226
+ display: flex;
227
+ align-items: center;
228
+ justify-content: center;
229
+ background: transparent;
230
+ border: 1px solid var(--border);
231
+ border-radius: var(--radius-sm);
232
+ cursor: pointer;
233
+ font-size: 1rem;
234
+ color: var(--text-muted);
235
+ transition: border-color 0.2s ease, color 0.2s ease;
236
+ }
237
+
238
+ .btn-icon:hover {
239
+ border-color: var(--accent);
240
+ color: var(--accent);
241
+ }
242
+
243
+ .btn-icon.recording {
244
+ border-color: var(--error);
245
+ color: var(--error);
246
+ animation: pulse 1.2s infinite;
247
+ }
248
+
249
+ @keyframes pulse {
250
+ 0%, 100% { opacity: 1; }
251
+ 50% { opacity: 0.5; }
252
+ }
253
+
254
+ /* ---- Sensitivity Cards ---- */
255
+
256
+ .sensitivity-cards {
257
+ display: grid;
258
+ grid-template-columns: repeat(2, 1fr);
259
+ gap: 0.75rem;
260
+ }
261
+
262
+ .sensitivity-cards .card {
263
+ background: var(--surface);
264
+ border: 2px solid var(--border);
265
+ border-radius: var(--radius);
266
+ padding: 1rem;
267
+ cursor: pointer;
268
+ transition: border-color 0.2s ease, background 0.2s ease;
269
+ }
270
+
271
+ .sensitivity-cards .card:hover {
272
+ background: var(--surface-hover);
273
+ }
274
+
275
+ .sensitivity-cards .card.selected {
276
+ border-color: var(--accent);
277
+ background: rgba(79, 158, 255, 0.08);
278
+ }
279
+
280
+ .sensitivity-cards .card strong {
281
+ display: block;
282
+ font-size: 0.9375rem;
283
+ margin-bottom: 0.2rem;
284
+ }
285
+
286
+ .sensitivity-cards .card p {
287
+ font-size: 0.8rem;
288
+ color: var(--text-muted);
289
+ }
290
+
291
+ /* ---- Source Cards ---- */
292
+
293
+ .source-cards {
294
+ display: grid;
295
+ grid-template-columns: repeat(auto-fill, minmax(180px, 1fr));
296
+ gap: 0.75rem;
297
+ }
298
+
299
+ .source-card {
300
+ background: var(--surface);
301
+ border: 1px solid var(--border);
302
+ border-radius: var(--radius);
303
+ padding: 0.875rem;
304
+ display: flex;
305
+ flex-direction: column;
306
+ gap: 0.3rem;
307
+ }
308
+
309
+ .source-card .source-name {
310
+ font-weight: 600;
311
+ font-size: 0.9rem;
312
+ }
313
+
314
+ .source-card .source-type {
315
+ font-size: 0.8rem;
316
+ color: var(--text-muted);
317
+ text-transform: capitalize;
318
+ }
319
+
320
+ .source-card .source-status {
321
+ font-size: 0.75rem;
322
+ padding: 0.15rem 0.4rem;
323
+ border-radius: var(--radius-sm);
324
+ display: inline-block;
325
+ width: fit-content;
326
+ margin-top: 0.2rem;
327
+ }
328
+
329
+ .source-card.selected {
330
+ border-color: var(--accent);
331
+ background: rgba(79, 158, 255, 0.08);
332
+ cursor: pointer;
333
+ }
334
+
335
+ .source-card:hover {
336
+ border-color: var(--accent);
337
+ cursor: pointer;
338
+ }
339
+
340
+ .source-status.detected {
341
+ background: rgba(34, 197, 94, 0.15);
342
+ color: var(--success);
343
+ }
344
+
345
+ /* ---- Upload Area ---- */
346
+
347
+ .upload-area {
348
+ border: 2px dashed var(--border);
349
+ border-radius: var(--radius);
350
+ padding: 2rem 1.5rem;
351
+ text-align: center;
352
+ cursor: pointer;
353
+ transition: border-color 0.2s ease, background 0.2s ease;
354
+ }
355
+
356
+ .upload-area:hover, .upload-area.dragover {
357
+ border-color: var(--accent);
358
+ background: rgba(79, 158, 255, 0.05);
359
+ }
360
+
361
+ .upload-area p {
362
+ color: var(--text-muted);
363
+ font-size: 0.9rem;
364
+ }
365
+
366
+ .upload-area .hint {
367
+ font-size: 0.75rem;
368
+ margin-top: 0.5rem;
369
+ }
370
+
371
+ #uploaded-files {
372
+ margin-top: 0.5rem;
373
+ display: flex;
374
+ flex-direction: column;
375
+ gap: 0.3rem;
376
+ }
377
+
378
+ .uploaded-file {
379
+ display: flex;
380
+ align-items: center;
381
+ justify-content: space-between;
382
+ background: var(--surface);
383
+ border: 1px solid var(--border);
384
+ border-radius: var(--radius-sm);
385
+ padding: 0.4rem 0.75rem;
386
+ font-size: 0.85rem;
387
+ }
388
+
389
+ .uploaded-file .file-name {
390
+ color: var(--text);
391
+ }
392
+
393
+ .uploaded-file .file-status {
394
+ font-size: 0.75rem;
395
+ color: var(--success);
396
+ }
397
+
398
+ /* ---- Review ---- */
399
+
400
+ .review-content {
401
+ background: var(--surface);
402
+ border: 1px solid var(--border);
403
+ border-radius: var(--radius);
404
+ padding: 1.25rem;
405
+ }
406
+
407
+ .review-row {
408
+ display: flex;
409
+ justify-content: space-between;
410
+ padding: 0.6rem 0;
411
+ border-bottom: 1px solid var(--border);
412
+ font-size: 0.9rem;
413
+ }
414
+
415
+ .review-row:last-child {
416
+ border-bottom: none;
417
+ }
418
+
419
+ .review-row .review-label {
420
+ color: var(--text-muted);
421
+ font-weight: 500;
422
+ }
423
+
424
+ .review-row .review-value {
425
+ text-align: right;
426
+ max-width: 60%;
427
+ word-break: break-word;
428
+ }
429
+
430
+ /* ---- Pipeline Timeline ---- */
431
+
432
+ .pipeline-timeline {
433
+ display: flex;
434
+ flex-direction: column;
435
+ gap: 0;
436
+ margin-top: 1rem;
437
+ }
438
+
439
+ .pipeline-stage {
440
+ display: flex;
441
+ align-items: flex-start;
442
+ gap: 1rem;
443
+ padding: 0.75rem 0;
444
+ position: relative;
445
+ }
446
+
447
+ .pipeline-stage::before {
448
+ content: '';
449
+ position: absolute;
450
+ left: 11px;
451
+ top: 32px;
452
+ bottom: -4px;
453
+ width: 2px;
454
+ background: var(--border);
455
+ }
456
+
457
+ .pipeline-stage:last-child::before {
458
+ display: none;
459
+ }
460
+
461
+ .stage-dot {
462
+ width: 24px;
463
+ height: 24px;
464
+ border-radius: 50%;
465
+ flex-shrink: 0;
466
+ display: flex;
467
+ align-items: center;
468
+ justify-content: center;
469
+ font-size: 0.7rem;
470
+ border: 2px solid var(--border);
471
+ background: var(--surface);
472
+ color: var(--text-muted);
473
+ transition: all 0.3s ease;
474
+ }
475
+
476
+ .pipeline-stage.running .stage-dot {
477
+ border-color: var(--accent);
478
+ background: rgba(79, 158, 255, 0.15);
479
+ color: var(--accent);
480
+ animation: pulse 1.2s infinite;
481
+ }
482
+
483
+ .pipeline-stage.done .stage-dot {
484
+ border-color: var(--success);
485
+ background: var(--success);
486
+ color: #fff;
487
+ }
488
+
489
+ .pipeline-stage.error .stage-dot {
490
+ border-color: var(--error);
491
+ background: var(--error);
492
+ color: #fff;
493
+ }
494
+
495
+ .stage-info {
496
+ flex: 1;
497
+ }
498
+
499
+ .stage-name {
500
+ font-weight: 500;
501
+ font-size: 0.9375rem;
502
+ }
503
+
504
+ .stage-status {
505
+ font-size: 0.8rem;
506
+ color: var(--text-muted);
507
+ margin-top: 0.1rem;
508
+ }
509
+
510
+ .pipeline-done {
511
+ text-align: center;
512
+ margin-top: 2rem;
513
+ padding: 1.5rem;
514
+ background: rgba(34, 197, 94, 0.08);
515
+ border: 1px solid rgba(34, 197, 94, 0.25);
516
+ border-radius: var(--radius);
517
+ }
518
+
519
+ .pipeline-done p {
520
+ font-size: 0.95rem;
521
+ }
522
+
523
+ .pipeline-done .muted {
524
+ color: var(--text-muted);
525
+ font-size: 0.8rem;
526
+ margin-top: 0.5rem;
527
+ }
528
+
529
+ /* ---- Buttons ---- */
530
+
531
+ .btn {
532
+ display: inline-flex;
533
+ align-items: center;
534
+ justify-content: center;
535
+ padding: 0.6rem 1.5rem;
536
+ font-size: 0.9375rem;
537
+ font-weight: 500;
538
+ font-family: var(--font);
539
+ border: none;
540
+ border-radius: var(--radius);
541
+ cursor: pointer;
542
+ transition: background 0.2s ease, opacity 0.2s ease;
543
+ }
544
+
545
+ .btn:disabled {
546
+ opacity: 0.5;
547
+ cursor: not-allowed;
548
+ }
549
+
550
+ .btn-primary {
551
+ background: var(--accent);
552
+ color: #fff;
553
+ }
554
+
555
+ .btn-primary:hover:not(:disabled) {
556
+ background: var(--accent-hover);
557
+ }
558
+
559
+ .btn-secondary {
560
+ background: var(--surface);
561
+ color: var(--text);
562
+ border: 1px solid var(--border);
563
+ }
564
+
565
+ .btn-secondary:hover:not(:disabled) {
566
+ background: var(--surface-hover);
567
+ }
568
+
569
+ /* ---- Step Actions ---- */
570
+
571
+ .step-actions {
572
+ display: flex;
573
+ justify-content: space-between;
574
+ align-items: center;
575
+ margin-top: 2rem;
576
+ padding-top: 1.5rem;
577
+ border-top: 1px solid var(--border);
578
+ }
579
+
580
+ /* ---- Footer ---- */
581
+
582
+ .wizard-footer {
583
+ margin-top: 3rem;
584
+ text-align: center;
585
+ }
586
+
587
+ .wizard-footer p {
588
+ font-size: 0.8rem;
589
+ color: var(--text-muted);
590
+ }
591
+
592
+ /* ---- Error ---- */
593
+
594
+ .field-error {
595
+ font-size: 0.8rem;
596
+ color: var(--error);
597
+ margin-top: 0.3rem;
598
+ }
599
+
600
+ .input.error, .textarea.error {
601
+ border-color: var(--error);
602
+ }
603
+
604
+ .muted {
605
+ color: var(--text-muted);
606
+ }
607
+
608
+ /* ---- Existing Products Banner ---- */
609
+
610
+ .existing-products-banner {
611
+ background: var(--surface);
612
+ border: 1px solid var(--border);
613
+ border-radius: 8px;
614
+ padding: 16px 20px;
615
+ margin-bottom: 24px;
616
+ }
617
+
618
+ .banner-title {
619
+ color: var(--text);
620
+ margin: 0 0 8px 0;
621
+ font-size: 14px;
622
+ }
623
+
624
+ .product-chips {
625
+ display: flex;
626
+ flex-wrap: wrap;
627
+ gap: 8px;
628
+ }
629
+
630
+ .product-chip {
631
+ display: inline-block;
632
+ background: rgba(79, 158, 255, 0.15);
633
+ color: var(--accent);
634
+ border: 1px solid rgba(79, 158, 255, 0.3);
635
+ border-radius: 16px;
636
+ padding: 4px 12px;
637
+ font-size: 13px;
638
+ }
639
+
640
+ /* ---- Responsive ---- */
641
+
642
+ @media (max-width: 480px) {
643
+ body {
644
+ padding: 1rem 0.75rem;
645
+ }
646
+
647
+ .wizard-header h1 {
648
+ font-size: 1.4rem;
649
+ }
650
+
651
+ .sensitivity-cards {
652
+ grid-template-columns: 1fr;
653
+ }
654
+
655
+ .source-cards {
656
+ grid-template-columns: 1fr;
657
+ }
658
+
659
+ .step-label {
660
+ display: none;
661
+ }
662
+
663
+ .progress-bar::before {
664
+ left: 20px;
665
+ right: 20px;
666
+ }
667
+
668
+ .review-row {
669
+ flex-direction: column;
670
+ gap: 0.2rem;
671
+ }
672
+
673
+ .review-row .review-value {
674
+ text-align: left;
675
+ max-width: 100%;
676
+ }
677
+ }