@runcontext/ui 0.5.2 → 0.5.4

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.
package/static/setup.css CHANGED
@@ -1,24 +1,38 @@
1
- /* ContextKit Setup Wizard — Dark Theme */
1
+ /* RunContext Setup Wizard — App Shell Layout + UXD Tokens */
2
2
 
3
+ /* ================================================================
4
+ :root — shorthand aliases mapping to --rc-* design tokens
5
+ ================================================================ */
3
6
  :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
-
7
+ --bg: var(--rc-color-surface-bg);
8
+ --surface: var(--rc-color-surface-card);
9
+ --surface-hover: var(--rc-color-surface-card-hover);
10
+ --border: var(--rc-color-border-default);
11
+ --border-hover: var(--rc-color-border-hover);
12
+ --border-focus: var(--rc-color-brand-gold);
13
+ --text: var(--rc-color-text-primary);
14
+ --text-secondary: var(--rc-color-text-secondary);
15
+ --text-muted: var(--rc-color-text-muted);
16
+ --accent: var(--rc-color-brand-gold);
17
+ --accent-light: var(--rc-color-brand-gold-light);
18
+ --accent-dim: var(--rc-color-brand-gold-dim);
19
+ --success: var(--rc-color-status-success);
20
+ --error: var(--rc-color-status-error);
21
+ --warning: var(--rc-color-status-warning);
22
+ --info: var(--rc-color-status-info);
23
+ --font: var(--rc-font-sans);
24
+ --font-mono: var(--rc-font-mono);
25
+ --radius-sm: var(--rc-radius-sm);
26
+ --radius: var(--rc-radius-md);
27
+ --radius-lg: var(--rc-radius-lg);
28
+ --shadow-sm: var(--rc-shadow-sm);
29
+ --shadow: var(--rc-shadow-md);
30
+ --shadow-lg: var(--rc-shadow-lg);
31
+ }
32
+
33
+ /* ================================================================
34
+ Reset
35
+ ================================================================ */
22
36
  *, *::before, *::after {
23
37
  box-sizing: border-box;
24
38
  margin: 0;
@@ -37,133 +51,247 @@ body {
37
51
  color: var(--text);
38
52
  line-height: 1.6;
39
53
  min-height: 100vh;
54
+ margin: 0;
55
+ padding: 0;
56
+ }
57
+
58
+ /* ================================================================
59
+ App Shell — CSS Grid
60
+ ================================================================ */
61
+ .app-shell {
62
+ display: grid;
63
+ grid-template-columns: 240px 1fr;
64
+ grid-template-rows: auto 1fr auto;
65
+ grid-template-areas:
66
+ "sidebar header"
67
+ "sidebar main"
68
+ "sidebar footer";
69
+ min-height: 100vh;
70
+ }
71
+
72
+ /* ================================================================
73
+ Sidebar
74
+ ================================================================ */
75
+ .sidebar {
76
+ grid-area: sidebar;
77
+ background: var(--surface);
78
+ border-right: 1px solid var(--border);
40
79
  display: flex;
41
- justify-content: center;
42
- padding: 2rem 1rem;
80
+ flex-direction: column;
81
+ position: sticky;
82
+ top: 0;
83
+ height: 100vh;
84
+ overflow-y: auto;
43
85
  }
44
86
 
45
- /* ---- Wizard Container ---- */
87
+ /* ---- Sidebar Brand ---- */
88
+ .sidebar-brand {
89
+ display: flex;
90
+ align-items: center;
91
+ gap: var(--rc-space-2, 8px);
92
+ padding: var(--rc-space-4, 16px) var(--rc-space-4, 16px);
93
+ border-bottom: 1px solid var(--border);
94
+ }
46
95
 
47
- .wizard {
48
- width: 100%;
49
- max-width: 640px;
96
+ .brand-chevron {
97
+ color: var(--text-muted);
98
+ font-size: 0.75rem;
99
+ flex-shrink: 0;
50
100
  }
51
101
 
52
- .wizard-header {
53
- text-align: center;
54
- margin-bottom: 2rem;
102
+ .brand-run {
103
+ color: #fff;
104
+ font-weight: 700;
105
+ font-size: 1rem;
55
106
  }
56
107
 
57
- .wizard-header h1 {
58
- font-size: 1.75rem;
108
+ .brand-context {
109
+ color: var(--accent);
59
110
  font-weight: 700;
60
- letter-spacing: -0.02em;
61
- color: var(--text);
111
+ font-size: 1rem;
62
112
  }
63
113
 
64
- .wizard-header .tagline {
65
- color: var(--text-muted);
66
- font-size: 0.95rem;
67
- margin-top: 0.25rem;
114
+ .brand-badge {
115
+ font-size: 10px;
116
+ text-transform: uppercase;
117
+ padding: 2px 6px;
118
+ border-radius: var(--radius-sm);
119
+ color: var(--accent);
120
+ background: rgba(201, 165, 90, 0.15);
121
+ border: 1px solid rgba(201, 165, 90, 0.3);
122
+ font-weight: 600;
123
+ letter-spacing: 0.04em;
124
+ line-height: 1.4;
125
+ white-space: nowrap;
68
126
  }
69
127
 
70
- /* ---- Progress Bar ---- */
128
+ /* ---- Nav Items ---- */
129
+ .sidebar-nav {
130
+ flex: 1;
131
+ padding: var(--rc-space-2, 8px) 0;
132
+ }
71
133
 
72
- .progress-bar {
134
+ .nav-item {
73
135
  display: flex;
74
- align-items: flex-start;
75
- justify-content: space-between;
76
- margin-bottom: 2.5rem;
77
- position: relative;
136
+ align-items: center;
137
+ gap: var(--rc-space-2, 8px);
138
+ padding: var(--rc-space-2, 8px) var(--rc-space-4, 16px);
139
+ font-size: 0.875rem;
140
+ color: var(--text);
141
+ cursor: pointer;
142
+ transition: background 0.15s ease, color 0.15s ease;
143
+ text-decoration: none;
144
+ border-left: 3px solid transparent;
78
145
  }
79
146
 
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;
147
+ .nav-item:hover {
148
+ background: var(--surface-hover);
149
+ }
150
+
151
+ .nav-item.active {
152
+ border-left-color: var(--accent);
153
+ color: var(--accent);
154
+ background: rgba(201, 165, 90, 0.06);
89
155
  }
90
156
 
91
- .progress-step {
157
+ .nav-item.locked {
158
+ color: var(--text-muted);
159
+ cursor: not-allowed;
160
+ opacity: 0.6;
161
+ }
162
+
163
+ .nav-item.locked:hover {
164
+ background: transparent;
165
+ }
166
+
167
+ .lock-icon {
168
+ width: 14px;
169
+ height: 14px;
170
+ flex-shrink: 0;
171
+ opacity: 0.6;
172
+ }
173
+
174
+ /* ---- Sidebar Status (bottom panel) ---- */
175
+ .sidebar-status {
176
+ border-top: 1px solid var(--border);
177
+ padding: var(--rc-space-3, 12px) var(--rc-space-4, 16px);
178
+ margin-top: auto;
92
179
  display: flex;
93
180
  flex-direction: column;
94
- align-items: center;
95
- gap: 0.4rem;
96
- position: relative;
97
- z-index: 1;
98
- flex: 1;
181
+ gap: var(--rc-space-2, 8px);
99
182
  }
100
183
 
101
- .step-num {
102
- width: 32px;
103
- height: 32px;
104
- border-radius: 50%;
184
+ .status-row {
105
185
  display: flex;
106
186
  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;
187
+ gap: var(--rc-space-2, 8px);
188
+ font-size: 0.8125rem;
189
+ }
190
+
191
+ .status-dot {
192
+ width: 8px;
193
+ height: 8px;
194
+ border-radius: 50%;
195
+ flex-shrink: 0;
196
+ }
197
+
198
+ .status-dot.success {
199
+ background: var(--success);
200
+ }
201
+
202
+ .status-dot.error {
203
+ background: var(--error);
114
204
  }
115
205
 
116
- .step-label {
206
+ .nav-detail {
117
207
  font-size: 0.75rem;
118
208
  color: var(--text-muted);
119
- transition: color 0.25s ease;
120
209
  }
121
210
 
122
- .progress-step.active .step-num {
123
- background: var(--accent);
124
- border-color: var(--accent);
125
- color: #fff;
211
+ /* ================================================================
212
+ Header
213
+ ================================================================ */
214
+ .app-header {
215
+ grid-area: header;
216
+ border-bottom: 1px solid var(--border);
217
+ padding: var(--rc-space-3, 12px) var(--rc-space-6, 24px);
218
+ display: flex;
219
+ align-items: center;
220
+ }
221
+
222
+ /* ---- Header Stepper / Breadcrumb ---- */
223
+ .header-stepper {
224
+ display: flex;
225
+ align-items: center;
226
+ font-size: 0.875rem;
126
227
  }
127
228
 
128
- .progress-step.active .step-label {
229
+ .step-completed {
129
230
  color: var(--accent);
231
+ cursor: pointer;
232
+ transition: text-decoration 0.15s ease;
130
233
  }
131
234
 
132
- .progress-step.completed .step-num {
133
- background: var(--success);
134
- border-color: var(--success);
135
- color: #fff;
235
+ .step-completed:hover {
236
+ text-decoration: underline;
136
237
  }
137
238
 
138
- .progress-step.completed .step-label {
139
- color: var(--success);
239
+ .step-active {
240
+ color: #fff;
241
+ font-weight: 700;
140
242
  }
141
243
 
142
- /* ---- Steps ---- */
244
+ .step-future {
245
+ color: var(--text-muted);
246
+ cursor: default;
247
+ }
143
248
 
144
- .step {
145
- display: none;
146
- animation: fadeIn 0.3s ease;
249
+ .step-separator {
250
+ color: var(--text-muted);
251
+ padding: 0 var(--rc-space-2, 8px);
252
+ user-select: none;
147
253
  }
148
254
 
149
- .step.active {
150
- display: block;
255
+ /* ================================================================
256
+ Main Content
257
+ ================================================================ */
258
+ .main-content {
259
+ grid-area: main;
260
+ overflow-y: auto;
261
+ padding: var(--rc-space-6, 24px);
151
262
  }
152
263
 
153
- @keyframes fadeIn {
154
- from { opacity: 0; transform: translateY(8px); }
155
- to { opacity: 1; transform: translateY(0); }
264
+ .content-wrapper {
265
+ max-width: 800px;
266
+ margin: 0 auto;
156
267
  }
157
268
 
158
- .step h2 {
159
- font-size: 1.25rem;
160
- font-weight: 600;
161
- margin-bottom: 1.5rem;
162
- letter-spacing: -0.01em;
269
+ /* ================================================================
270
+ Footer
271
+ ================================================================ */
272
+ .app-footer {
273
+ grid-area: footer;
274
+ border-top: 1px solid var(--border);
275
+ padding: var(--rc-space-3, 12px) var(--rc-space-6, 24px);
276
+ text-align: center;
277
+ color: var(--text-muted);
278
+ font-size: 0.75rem;
163
279
  }
164
280
 
165
- /* ---- Form Fields ---- */
281
+ /* ================================================================
282
+ Cards
283
+ ================================================================ */
284
+ .card {
285
+ background: var(--surface);
286
+ border: 1px solid var(--border);
287
+ border-radius: var(--radius-lg);
288
+ padding: 24px;
289
+ margin-bottom: 16px;
290
+ }
166
291
 
292
+ /* ================================================================
293
+ Form Fields
294
+ ================================================================ */
167
295
  .field {
168
296
  margin-bottom: 1.25rem;
169
297
  }
@@ -176,12 +304,21 @@ body {
176
304
  color: var(--text);
177
305
  }
178
306
 
307
+ /* Labels — uppercase small style */
308
+ .label-uppercase {
309
+ color: var(--text-secondary);
310
+ font-size: 0.75rem;
311
+ text-transform: uppercase;
312
+ letter-spacing: 0.05em;
313
+ font-weight: 600;
314
+ }
315
+
179
316
  .input, .textarea, .select {
180
317
  width: 100%;
181
318
  padding: 0.625rem 0.75rem;
182
319
  font-size: 0.9375rem;
183
320
  font-family: var(--font);
184
- background: var(--surface);
321
+ background: var(--bg);
185
322
  border: 1px solid var(--border);
186
323
  border-radius: var(--radius);
187
324
  color: var(--text);
@@ -191,7 +328,7 @@ body {
191
328
 
192
329
  .input:focus, .textarea:focus, .select:focus {
193
330
  border-color: var(--border-focus);
194
- box-shadow: 0 0 0 3px rgba(79, 158, 255, 0.15);
331
+ box-shadow: 0 0 0 3px rgba(201, 165, 90, 0.15);
195
332
  }
196
333
 
197
334
  .input::placeholder, .textarea::placeholder {
@@ -246,13 +383,9 @@ body {
246
383
  animation: pulse 1.2s infinite;
247
384
  }
248
385
 
249
- @keyframes pulse {
250
- 0%, 100% { opacity: 1; }
251
- 50% { opacity: 0.5; }
252
- }
253
-
254
- /* ---- Sensitivity Cards ---- */
255
-
386
+ /* ================================================================
387
+ Sensitivity Cards
388
+ ================================================================ */
256
389
  .sensitivity-cards {
257
390
  display: grid;
258
391
  grid-template-columns: repeat(2, 1fr);
@@ -274,7 +407,7 @@ body {
274
407
 
275
408
  .sensitivity-cards .card.selected {
276
409
  border-color: var(--accent);
277
- background: rgba(79, 158, 255, 0.08);
410
+ background: rgba(201, 165, 90, 0.08);
278
411
  }
279
412
 
280
413
  .sensitivity-cards .card strong {
@@ -288,52 +421,12 @@ body {
288
421
  color: var(--text-muted);
289
422
  }
290
423
 
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
-
424
+ /* ================================================================
425
+ Source Cards (legacy — see Connect Step section below for current styles)
426
+ ================================================================ */
329
427
  .source-card.selected {
330
428
  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);
429
+ background: rgba(201, 165, 90, 0.08);
337
430
  cursor: pointer;
338
431
  }
339
432
 
@@ -342,8 +435,9 @@ body {
342
435
  color: var(--success);
343
436
  }
344
437
 
345
- /* ---- Upload Area ---- */
346
-
438
+ /* ================================================================
439
+ Upload Area
440
+ ================================================================ */
347
441
  .upload-area {
348
442
  border: 2px dashed var(--border);
349
443
  border-radius: var(--radius);
@@ -355,7 +449,7 @@ body {
355
449
 
356
450
  .upload-area:hover, .upload-area.dragover {
357
451
  border-color: var(--accent);
358
- background: rgba(79, 158, 255, 0.05);
452
+ background: rgba(201, 165, 90, 0.05);
359
453
  }
360
454
 
361
455
  .upload-area p {
@@ -395,222 +489,420 @@ body {
395
489
  color: var(--success);
396
490
  }
397
491
 
398
- /* ---- Review ---- */
399
-
400
- .review-content {
401
- background: var(--surface);
492
+ /* ================================================================
493
+ Pipeline Accordion
494
+ ================================================================ */
495
+ .pipeline-stage {
402
496
  border: 1px solid var(--border);
403
497
  border-radius: var(--radius);
404
- padding: 1.25rem;
498
+ margin-bottom: var(--rc-space-2, 8px);
499
+ overflow: hidden;
405
500
  }
406
501
 
407
- .review-row {
502
+ .pipeline-stage-header {
408
503
  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;
504
+ align-items: center;
505
+ gap: var(--rc-space-2, 8px);
506
+ padding: var(--rc-space-3, 12px) var(--rc-space-4, 16px);
507
+ cursor: pointer;
508
+ transition: background 0.15s ease;
428
509
  }
429
510
 
430
- /* ---- Pipeline Timeline ---- */
431
-
432
- .pipeline-timeline {
433
- display: flex;
434
- flex-direction: column;
435
- gap: 0;
436
- margin-top: 1rem;
511
+ .pipeline-stage-header:hover {
512
+ background: var(--surface-hover);
437
513
  }
438
514
 
439
- .pipeline-stage {
440
- display: flex;
441
- align-items: flex-start;
442
- gap: 1rem;
443
- padding: 0.75rem 0;
444
- position: relative;
515
+ .pipeline-stage-body {
516
+ max-height: 0;
517
+ overflow: hidden;
518
+ transition: max-height 0.3s ease;
445
519
  }
446
520
 
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);
521
+ .pipeline-stage.expanded .pipeline-stage-body {
522
+ max-height: 600px;
455
523
  }
456
524
 
457
- .pipeline-stage:last-child::before {
458
- display: none;
525
+ .pipeline-stage-body-inner {
526
+ padding: 0 var(--rc-space-4, 16px) var(--rc-space-3, 12px);
459
527
  }
460
528
 
529
+ /* Stage status indicators */
461
530
  .stage-dot {
462
- width: 24px;
463
- height: 24px;
531
+ width: 12px;
532
+ height: 12px;
464
533
  border-radius: 50%;
465
534
  flex-shrink: 0;
466
- display: flex;
467
- align-items: center;
468
- justify-content: center;
469
- font-size: 0.7rem;
470
535
  border: 2px solid var(--border);
471
- background: var(--surface);
472
- color: var(--text-muted);
536
+ background: transparent;
473
537
  transition: all 0.3s ease;
474
538
  }
475
539
 
476
- .pipeline-stage.running .stage-dot {
540
+ .stage-pending .stage-dot {
541
+ border-color: var(--border);
542
+ background: transparent;
543
+ }
544
+
545
+ .stage-running .stage-dot {
477
546
  border-color: var(--accent);
478
- background: rgba(79, 158, 255, 0.15);
479
- color: var(--accent);
480
- animation: pulse 1.2s infinite;
547
+ background: var(--accent);
548
+ animation: stagePulse 1.5s ease-in-out infinite;
481
549
  }
482
550
 
483
- .pipeline-stage.done .stage-dot {
551
+ .stage-done .stage-dot {
484
552
  border-color: var(--success);
485
553
  background: var(--success);
486
- color: #fff;
487
554
  }
488
555
 
489
- .pipeline-stage.error .stage-dot {
556
+ .stage-error .stage-dot {
490
557
  border-color: var(--error);
491
558
  background: var(--error);
492
- color: #fff;
493
- }
494
-
495
- .stage-info {
496
- flex: 1;
497
559
  }
498
560
 
499
561
  .stage-name {
500
562
  font-weight: 500;
501
563
  font-size: 0.9375rem;
564
+ flex: 1;
502
565
  }
503
566
 
504
- .stage-status {
567
+ .stage-summary {
505
568
  font-size: 0.8rem;
506
569
  color: var(--text-muted);
507
- margin-top: 0.1rem;
508
570
  }
509
571
 
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);
572
+ .stage-detail-table {
573
+ width: 100%;
574
+ font-size: 0.8125rem;
575
+ border-collapse: collapse;
517
576
  }
518
577
 
519
- .pipeline-done p {
520
- font-size: 0.95rem;
578
+ .stage-detail-table td {
579
+ padding: var(--rc-space-1, 4px) var(--rc-space-2, 8px);
580
+ border-bottom: 1px solid var(--border);
521
581
  }
522
582
 
523
- .pipeline-done .muted {
583
+ .stage-detail-table td:first-child {
524
584
  color: var(--text-muted);
525
- font-size: 0.8rem;
526
- margin-top: 0.5rem;
585
+ white-space: nowrap;
527
586
  }
528
587
 
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;
588
+ .stage-detail-list {
589
+ list-style: none;
590
+ font-size: 0.8125rem;
591
+ padding: 0;
592
+ margin: 0;
543
593
  }
544
594
 
545
- .btn:disabled {
546
- opacity: 0.5;
547
- cursor: not-allowed;
595
+ .stage-detail-list li {
596
+ padding: var(--rc-space-1, 4px) 0;
597
+ border-bottom: 1px solid var(--border);
548
598
  }
549
599
 
550
- .btn-primary {
551
- background: var(--accent);
552
- color: #fff;
600
+ .stage-detail-list li:last-child {
601
+ border-bottom: none;
553
602
  }
554
603
 
555
- .btn-primary:hover:not(:disabled) {
556
- background: var(--accent-hover);
604
+ .pipeline-desc {
605
+ font-size: 0.9rem;
606
+ color: var(--text-secondary);
607
+ margin-bottom: 0.5rem;
557
608
  }
558
609
 
559
- .btn-secondary {
610
+ .stage-detail-item {
611
+ padding: 2px 0;
612
+ }
613
+
614
+ /* ================================================================
615
+ Pipeline Timeline (legacy, kept for backward compat)
616
+ ================================================================ */
617
+ .pipeline-timeline {
618
+ display: flex;
619
+ flex-direction: column;
620
+ gap: 0;
621
+ margin-top: 1rem;
622
+ }
623
+
624
+ .pipeline-done {
625
+ text-align: center;
626
+ margin-top: 2rem;
627
+ padding: 1.5rem;
628
+ background: rgba(34, 197, 94, 0.08);
629
+ border: 1px solid rgba(34, 197, 94, 0.25);
630
+ border-radius: var(--radius);
631
+ }
632
+
633
+ .pipeline-done p {
634
+ font-size: 0.95rem;
635
+ }
636
+
637
+ .pipeline-done .muted {
638
+ color: var(--text-muted);
639
+ font-size: 0.8rem;
640
+ margin-top: 0.5rem;
641
+ }
642
+
643
+ /* ================================================================
644
+ Locked Tooltip
645
+ ================================================================ */
646
+ .locked-tooltip {
647
+ position: fixed;
560
648
  background: var(--surface);
561
- color: var(--text);
562
649
  border: 1px solid var(--border);
650
+ border-radius: var(--radius);
651
+ padding: var(--rc-space-2, 8px) var(--rc-space-3, 12px);
652
+ box-shadow: var(--shadow);
653
+ z-index: 100;
654
+ font-size: 0.8125rem;
655
+ color: var(--text);
656
+ white-space: nowrap;
563
657
  }
564
658
 
565
- .btn-secondary:hover:not(:disabled) {
566
- background: var(--surface-hover);
659
+ .locked-tooltip::before {
660
+ content: '';
661
+ position: absolute;
662
+ top: -6px;
663
+ left: 16px;
664
+ width: 10px;
665
+ height: 10px;
666
+ background: var(--surface);
667
+ border-left: 1px solid var(--border);
668
+ border-top: 1px solid var(--border);
669
+ transform: rotate(45deg);
670
+ }
671
+
672
+ /* ================================================================
673
+ Tier Badge
674
+ ================================================================ */
675
+ .tier-badge {
676
+ font-size: 9px;
677
+ text-transform: uppercase;
678
+ padding: 1px 5px;
679
+ border-radius: var(--radius-sm);
680
+ color: var(--accent);
681
+ background: rgba(201, 165, 90, 0.15);
682
+ border: 1px solid rgba(201, 165, 90, 0.3);
683
+ font-weight: 600;
684
+ letter-spacing: 0.04em;
685
+ line-height: 1.4;
686
+ white-space: nowrap;
567
687
  }
568
688
 
569
- /* ---- Step Actions ---- */
689
+ /* ================================================================
690
+ Review Sections
691
+ ================================================================ */
692
+ .review-section {
693
+ border-bottom: 1px solid var(--border);
694
+ padding: var(--rc-space-4, 16px) 0;
695
+ }
570
696
 
571
- .step-actions {
697
+ .review-section:last-child {
698
+ border-bottom: none;
699
+ }
700
+
701
+ .review-header {
572
702
  display: flex;
573
703
  justify-content: space-between;
574
704
  align-items: center;
575
- margin-top: 2rem;
576
- padding-top: 1.5rem;
577
- border-top: 1px solid var(--border);
705
+ margin-bottom: var(--rc-space-2, 8px);
578
706
  }
579
707
 
580
- /* ---- Footer ---- */
708
+ .review-header h3 {
709
+ font-size: 0.9375rem;
710
+ font-weight: 600;
711
+ }
581
712
 
582
- .wizard-footer {
583
- margin-top: 3rem;
584
- text-align: center;
713
+ .review-edit-link {
714
+ color: var(--accent);
715
+ cursor: pointer;
716
+ font-size: 0.8125rem;
717
+ transition: text-decoration 0.15s ease;
585
718
  }
586
719
 
587
- .wizard-footer p {
588
- font-size: 0.8rem;
589
- color: var(--text-muted);
720
+ .review-edit-link:hover {
721
+ text-decoration: underline;
590
722
  }
591
723
 
592
- /* ---- Error ---- */
724
+ .review-body {
725
+ font-size: 0.875rem;
726
+ }
593
727
 
594
- .field-error {
595
- font-size: 0.8rem;
596
- color: var(--error);
597
- margin-top: 0.3rem;
728
+ .review-content {
729
+ background: var(--surface);
730
+ border: 1px solid var(--border);
731
+ border-radius: var(--radius);
732
+ padding: 1.25rem;
598
733
  }
599
734
 
600
- .input.error, .textarea.error {
601
- border-color: var(--error);
735
+ .review-row {
736
+ display: flex;
737
+ justify-content: space-between;
738
+ padding: 0.6rem 0;
739
+ border-bottom: 1px solid var(--border);
740
+ font-size: 0.9rem;
602
741
  }
603
742
 
604
- .muted {
743
+ .review-row:last-child {
744
+ border-bottom: none;
745
+ }
746
+
747
+ .review-row .review-label {
605
748
  color: var(--text-muted);
749
+ font-weight: 500;
750
+ }
751
+
752
+ .review-row .review-value {
753
+ text-align: right;
754
+ max-width: 60%;
755
+ word-break: break-word;
756
+ }
757
+
758
+ /* ================================================================
759
+ Completion Card
760
+ ================================================================ */
761
+ .completion-card {
762
+ text-align: center;
763
+ background: rgba(34, 197, 94, 0.06);
764
+ border: 1px solid rgba(34, 197, 94, 0.2);
765
+ border-radius: var(--radius-lg);
766
+ padding: var(--rc-space-8, 32px);
767
+ }
768
+
769
+ .completion-actions {
770
+ display: flex;
771
+ justify-content: center;
772
+ gap: var(--rc-space-3, 12px);
773
+ margin-top: var(--rc-space-4, 16px);
774
+ }
775
+
776
+ .completion-subtitle {
777
+ color: var(--muted);
778
+ font-size: 0.9375rem;
779
+ margin-top: var(--rc-space-2, 8px);
780
+ margin-bottom: var(--rc-space-4, 16px);
781
+ }
782
+
783
+ .completion-next-steps {
784
+ margin-top: var(--rc-space-6, 24px);
785
+ text-align: center;
786
+ }
787
+
788
+ .completion-next-steps h3 {
789
+ font-size: 1rem;
790
+ margin-bottom: var(--rc-space-2, 8px);
791
+ }
792
+
793
+ .completion-next-steps p {
794
+ color: var(--muted);
795
+ font-size: 0.875rem;
796
+ margin-bottom: var(--rc-space-1, 4px);
797
+ }
798
+
799
+ .completion-cli {
800
+ font-family: var(--font-mono);
801
+ background: var(--bg);
802
+ border: 1px solid var(--border);
803
+ border-radius: var(--radius);
804
+ padding: var(--rc-space-3, 12px) var(--rc-space-4, 16px);
805
+ font-size: 0.8125rem;
806
+ color: var(--text);
807
+ margin-top: var(--rc-space-3, 12px);
808
+ display: inline-block;
809
+ }
810
+
811
+ /* ================================================================
812
+ Buttons
813
+ ================================================================ */
814
+ .btn {
815
+ display: inline-flex;
816
+ align-items: center;
817
+ justify-content: center;
818
+ padding: 0.6rem 1.5rem;
819
+ font-size: 0.9375rem;
820
+ font-weight: 500;
821
+ font-family: var(--font);
822
+ border: none;
823
+ border-radius: var(--radius);
824
+ cursor: pointer;
825
+ transition: background 0.2s ease, opacity 0.2s ease;
606
826
  }
607
827
 
608
- /* ---- Existing Products Banner ---- */
828
+ .btn:disabled {
829
+ opacity: 0.5;
830
+ cursor: not-allowed;
831
+ }
832
+
833
+ .btn-primary {
834
+ background: var(--accent);
835
+ color: #fff;
836
+ padding: 12px 24px;
837
+ }
838
+
839
+ .btn-primary:hover:not(:disabled) {
840
+ background: var(--accent-light);
841
+ color: var(--bg);
842
+ }
843
+
844
+ .btn-secondary {
845
+ background: transparent;
846
+ color: var(--accent);
847
+ border: 1px solid var(--accent);
848
+ }
609
849
 
850
+ .btn-secondary:hover:not(:disabled) {
851
+ background: rgba(201, 165, 90, 0.1);
852
+ }
853
+ .btn-sm {
854
+ padding: 0.35rem 0.75rem;
855
+ font-size: 0.8125rem;
856
+ }
857
+
858
+ /* OAuth result header: label + back button */
859
+ .oauth-result-header {
860
+ display: flex;
861
+ align-items: center;
862
+ justify-content: space-between;
863
+ margin-bottom: var(--rc-space-4, 16px);
864
+ }
865
+ #connect-oauth-result {
866
+ display: flex;
867
+ flex-direction: column;
868
+ gap: var(--rc-space-3, 12px);
869
+ }
870
+
871
+ /* ================================================================
872
+ Steps (wizard step visibility)
873
+ ================================================================ */
874
+ .step {
875
+ display: none;
876
+ animation: fadeIn 0.3s ease;
877
+ }
878
+
879
+ .step.active {
880
+ display: block;
881
+ }
882
+
883
+ .step h2 {
884
+ font-size: 1.25rem;
885
+ font-weight: 600;
886
+ margin-bottom: 1.5rem;
887
+ letter-spacing: -0.01em;
888
+ }
889
+
890
+ .step-actions {
891
+ display: flex;
892
+ justify-content: space-between;
893
+ align-items: center;
894
+ margin-top: 2rem;
895
+ padding-top: 1.5rem;
896
+ border-top: 1px solid var(--border);
897
+ }
898
+
899
+ /* ================================================================
900
+ Existing Products Banner
901
+ ================================================================ */
610
902
  .existing-products-banner {
611
903
  background: var(--surface);
612
904
  border: 1px solid var(--border);
613
- border-radius: 8px;
905
+ border-radius: var(--radius);
614
906
  padding: 16px 20px;
615
907
  margin-bottom: 24px;
616
908
  }
@@ -629,40 +921,97 @@ body {
629
921
 
630
922
  .product-chip {
631
923
  display: inline-block;
632
- background: rgba(79, 158, 255, 0.15);
924
+ background: rgba(201, 165, 90, 0.15);
633
925
  color: var(--accent);
634
- border: 1px solid rgba(79, 158, 255, 0.3);
926
+ border: 1px solid rgba(201, 165, 90, 0.3);
635
927
  border-radius: 16px;
636
928
  padding: 4px 12px;
637
929
  font-size: 13px;
638
930
  }
639
931
 
640
- /* ---- Responsive ---- */
932
+ /* ================================================================
933
+ Error States
934
+ ================================================================ */
935
+ .field-error {
936
+ font-size: 0.8rem;
937
+ color: var(--error);
938
+ margin-top: 0.3rem;
939
+ }
641
940
 
642
- @media (max-width: 480px) {
643
- body {
644
- padding: 1rem 0.75rem;
645
- }
941
+ .input.error, .textarea.error {
942
+ border-color: var(--error);
943
+ }
646
944
 
647
- .wizard-header h1 {
648
- font-size: 1.4rem;
649
- }
945
+ .muted {
946
+ color: var(--text-muted);
947
+ }
650
948
 
651
- .sensitivity-cards {
652
- grid-template-columns: 1fr;
949
+ /* ================================================================
950
+ Typography — Headings use Plus Jakarta Sans, code uses Geist Mono
951
+ ================================================================ */
952
+ h1, h2, h3, h4, h5, h6 {
953
+ font-family: var(--font);
954
+ }
955
+
956
+ code, pre, .mono {
957
+ font-family: var(--font-mono);
958
+ }
959
+
960
+ /* ================================================================
961
+ Animations
962
+ ================================================================ */
963
+ @keyframes fadeIn {
964
+ from { opacity: 0; transform: translateY(8px); }
965
+ to { opacity: 1; transform: translateY(0); }
966
+ }
967
+
968
+ @keyframes stagePulse {
969
+ 0%, 100% {
970
+ box-shadow: 0 0 0 0 rgba(201, 165, 90, 0.5);
971
+ }
972
+ 50% {
973
+ box-shadow: 0 0 0 6px rgba(201, 165, 90, 0);
653
974
  }
975
+ }
654
976
 
655
- .source-cards {
977
+ @keyframes pulse {
978
+ 0%, 100% { opacity: 1; }
979
+ 50% { opacity: 0.5; }
980
+ }
981
+
982
+ /* ================================================================
983
+ Responsive — Sidebar collapses below 768px
984
+ ================================================================ */
985
+ @media (max-width: 768px) {
986
+ .app-shell {
656
987
  grid-template-columns: 1fr;
988
+ grid-template-rows: auto 1fr auto;
989
+ grid-template-areas:
990
+ "header"
991
+ "main"
992
+ "footer";
657
993
  }
658
994
 
659
- .step-label {
995
+ .sidebar {
660
996
  display: none;
661
997
  }
662
998
 
663
- .progress-bar::before {
664
- left: 20px;
665
- right: 20px;
999
+ .main-content {
1000
+ padding: var(--rc-space-4, 16px);
1001
+ }
1002
+
1003
+ .app-header {
1004
+ padding: var(--rc-space-2, 8px) var(--rc-space-4, 16px);
1005
+ }
1006
+ }
1007
+
1008
+ @media (max-width: 480px) {
1009
+ .sensitivity-cards {
1010
+ grid-template-columns: 1fr;
1011
+ }
1012
+
1013
+ .source-cards {
1014
+ grid-template-columns: 1fr;
666
1015
  }
667
1016
 
668
1017
  .review-row {
@@ -674,4 +1023,424 @@ body {
674
1023
  text-align: left;
675
1024
  max-width: 100%;
676
1025
  }
1026
+
1027
+ .completion-actions {
1028
+ flex-direction: column;
1029
+ align-items: stretch;
1030
+ }
1031
+ }
1032
+
1033
+ /* ================================================================
1034
+ Connect Step
1035
+ ================================================================ */
1036
+ .connect-heading { font-size: var(--rc-font-2xl); font-weight: 700; margin-bottom: var(--rc-space-2); }
1037
+ .connect-subheading { color: var(--rc-color-text-secondary, #94a3b8); margin-bottom: var(--rc-space-6); line-height: 1.6; }
1038
+
1039
+ .source-cards {
1040
+ display: grid;
1041
+ grid-template-columns: repeat(auto-fill, minmax(280px, 1fr));
1042
+ gap: var(--rc-space-4);
1043
+ margin-bottom: var(--rc-space-8);
1044
+ }
1045
+
1046
+ .source-card {
1047
+ background: var(--rc-color-bg-secondary, #1e293b);
1048
+ border: 1px solid var(--rc-color-border, #334155);
1049
+ border-radius: var(--rc-radius-lg, 12px);
1050
+ padding: var(--rc-space-4, 16px);
1051
+ display: flex;
1052
+ flex-direction: column;
1053
+ gap: var(--rc-space-2, 8px);
1054
+ transition: border-color 0.15s, box-shadow 0.15s;
1055
+ }
1056
+ .source-card:hover {
1057
+ border-color: var(--rc-color-accent, #c9a55a);
1058
+ box-shadow: 0 0 0 1px var(--rc-color-accent, #c9a55a);
1059
+ }
1060
+ .source-card-name { font-weight: 600; }
1061
+ .source-card-meta {
1062
+ font-size: var(--rc-font-sm, 0.8125rem);
1063
+ color: var(--rc-color-text-secondary, #94a3b8);
1064
+ word-break: break-all;
1065
+ }
1066
+ .source-card-host {
1067
+ font-size: 0.6875rem;
1068
+ color: var(--rc-color-text-tertiary, #64748b);
1069
+ word-break: break-all;
1070
+ font-family: var(--rc-font-mono, monospace);
1071
+ }
1072
+ .source-card .btn {
1073
+ align-self: flex-start;
1074
+ margin-top: var(--rc-space-2, 8px);
1075
+ padding: 0.4rem 1rem;
1076
+ font-size: 0.8125rem;
1077
+ }
1078
+
1079
+ /* Detected sources + providers layout */
1080
+ #connect-detected-hint {
1081
+ display: flex;
1082
+ flex-direction: column;
1083
+ gap: var(--rc-space-4, 16px);
1084
+ margin-bottom: var(--rc-space-4, 16px);
1085
+ }
1086
+ .connect-providers {
1087
+ display: flex;
1088
+ flex-direction: column;
1089
+ gap: var(--rc-space-4, 16px);
1090
+ }
1091
+
1092
+ /* Detected source hint banner */
1093
+ .detected-hint {
1094
+ display: flex;
1095
+ align-items: flex-start;
1096
+ gap: var(--rc-space-3, 12px);
1097
+ padding: var(--rc-space-3, 12px) var(--rc-space-4, 16px);
1098
+ background: rgba(201, 165, 90, 0.08);
1099
+ border: 1px solid rgba(201, 165, 90, 0.25);
1100
+ border-radius: var(--rc-radius-md, 8px);
1101
+ margin-bottom: var(--rc-space-4, 16px);
1102
+ font-size: var(--rc-font-sm, 0.8125rem);
1103
+ color: var(--rc-color-text-secondary, #94a3b8);
1104
+ line-height: 1.5;
1105
+ }
1106
+ .detected-hint-icon { font-size: 1.125rem; flex-shrink: 0; margin-top: 1px; }
1107
+
1108
+ /* Local file card in detected area */
1109
+ .source-card-local {
1110
+ max-width: 320px;
1111
+ }
1112
+
1113
+ /* Detected provider card (highlighted) */
1114
+ .source-card-detected {
1115
+ border-color: rgba(201, 165, 90, 0.4);
1116
+ }
1117
+ .source-card-badge {
1118
+ font-size: 0.6875rem;
1119
+ font-weight: 600;
1120
+ text-transform: uppercase;
1121
+ letter-spacing: 0.05em;
1122
+ color: var(--rc-color-accent, #c9a55a);
1123
+ }
1124
+
1125
+ .section-divider {
1126
+ display: flex;
1127
+ align-items: center;
1128
+ gap: var(--rc-space-3);
1129
+ margin: var(--rc-space-6) 0;
1130
+ color: var(--rc-color-text-secondary, #94a3b8);
1131
+ font-size: var(--rc-font-sm);
1132
+ }
1133
+ .section-divider::before,
1134
+ .section-divider::after {
1135
+ content: '';
1136
+ flex: 1;
1137
+ border-top: 1px solid var(--rc-color-border, #334155);
1138
+ }
1139
+
1140
+ .platform-grid {
1141
+ display: grid;
1142
+ grid-template-columns: repeat(auto-fill, minmax(140px, 1fr));
1143
+ gap: var(--rc-space-3);
1144
+ margin-bottom: var(--rc-space-6);
1145
+ }
1146
+
1147
+ .platform-btn {
1148
+ background: var(--rc-color-bg-secondary, #1e293b);
1149
+ border: 1px solid var(--rc-color-border, #334155);
1150
+ border-radius: var(--rc-radius-md, 8px);
1151
+ padding: var(--rc-space-3) var(--rc-space-4);
1152
+ color: var(--rc-color-text, #e2e8f0);
1153
+ font-size: var(--rc-font-sm);
1154
+ cursor: pointer;
1155
+ transition: border-color 0.15s;
1156
+ text-align: center;
1157
+ }
1158
+ .platform-btn:hover {
1159
+ border-color: var(--rc-color-accent, #c9a55a);
1160
+ }
1161
+
1162
+ .manual-connect {
1163
+ margin-top: var(--rc-space-6);
1164
+ padding: var(--rc-space-4);
1165
+ background: var(--rc-color-bg-secondary, #1e293b);
1166
+ border-radius: var(--rc-radius-lg, 12px);
1167
+ border: 1px solid var(--rc-color-border, #334155);
1168
+ }
1169
+ .manual-connect-row {
1170
+ display: flex;
1171
+ gap: var(--rc-space-3);
1172
+ align-items: center;
1173
+ }
1174
+ .manual-connect-row input {
1175
+ flex: 1;
1176
+ }
1177
+
1178
+ /* ================================================================
1179
+ Define Step
1180
+ ================================================================ */
1181
+ .define-form {
1182
+ display: grid;
1183
+ grid-template-columns: 1fr 1fr;
1184
+ gap: var(--rc-space-4, 16px);
1185
+ max-width: 700px;
1186
+ margin-top: var(--rc-space-6, 24px);
1187
+ }
1188
+ .define-form .full-width {
1189
+ grid-column: 1 / -1;
1190
+ }
1191
+ .define-actions {
1192
+ grid-column: 1 / -1;
1193
+ display: flex;
1194
+ gap: var(--rc-space-3, 12px);
1195
+ justify-content: flex-end;
1196
+ margin-top: var(--rc-space-4, 16px);
1197
+ }
1198
+
1199
+ /* ================================================================
1200
+ Scaffold Step
1201
+ ================================================================ */
1202
+ .scaffold-stages {
1203
+ display: flex;
1204
+ flex-direction: column;
1205
+ gap: var(--rc-space-3);
1206
+ max-width: 600px;
1207
+ margin: var(--rc-space-6) 0;
1208
+ }
1209
+ .stage-row {
1210
+ display: flex;
1211
+ align-items: center;
1212
+ gap: var(--rc-space-3);
1213
+ padding: var(--rc-space-3) var(--rc-space-4);
1214
+ background: var(--rc-color-bg-secondary, #1e293b);
1215
+ border: 1px solid var(--rc-color-border, #334155);
1216
+ border-radius: var(--rc-radius-md, 8px);
1217
+ }
1218
+ .scaffold-stages .stage-dot {
1219
+ width: 10px;
1220
+ height: 10px;
1221
+ border-radius: 50%;
1222
+ background: var(--rc-color-text-secondary, #64748b);
1223
+ flex-shrink: 0;
1224
+ }
1225
+ .scaffold-stages .stage-dot.running {
1226
+ background: var(--rc-color-accent, #c9a55a);
1227
+ animation: pulse 1.5s ease-in-out infinite;
1228
+ }
1229
+ .scaffold-stages .stage-dot.done { background: #22c55e; }
1230
+ .scaffold-stages .stage-dot.error { background: #ef4444; }
1231
+ .stage-row .stage-name { font-weight: 500; flex: 1; }
1232
+ .stage-row .stage-summary {
1233
+ font-size: var(--rc-font-sm);
1234
+ color: var(--rc-color-text-secondary, #94a3b8);
1235
+ max-width: 300px;
1236
+ overflow: hidden;
1237
+ text-overflow: ellipsis;
1238
+ white-space: nowrap;
1239
+ }
1240
+ .stage-row .stage-error {
1241
+ font-size: var(--rc-font-sm);
1242
+ color: #ef4444;
1243
+ }
1244
+
1245
+ /* ================================================================
1246
+ Checkpoint Step
1247
+ ================================================================ */
1248
+ .checkpoint-card {
1249
+ max-width: 600px;
1250
+ margin: var(--rc-space-6) 0;
1251
+ }
1252
+ .tier-scorecard {
1253
+ display: flex;
1254
+ flex-direction: column;
1255
+ gap: var(--rc-space-4);
1256
+ margin: var(--rc-space-6) 0;
1257
+ }
1258
+ .tier-row {
1259
+ display: flex;
1260
+ gap: var(--rc-space-4);
1261
+ padding: var(--rc-space-4);
1262
+ background: var(--rc-color-bg-secondary, #1e293b);
1263
+ border: 1px solid var(--rc-color-border, #334155);
1264
+ border-radius: var(--rc-radius-md, 8px);
1265
+ }
1266
+ .tier-row.achieved {
1267
+ border-color: var(--rc-color-accent, #c9a55a);
1268
+ background: rgba(201, 165, 90, 0.08);
1269
+ }
1270
+ .tier-label {
1271
+ font-weight: 700;
1272
+ min-width: 80px;
1273
+ color: var(--rc-color-accent, #c9a55a);
1274
+ }
1275
+ .tier-desc {
1276
+ color: var(--rc-color-text-secondary, #94a3b8);
1277
+ line-height: 1.5;
1278
+ }
1279
+ .checkpoint-ctas {
1280
+ display: flex;
1281
+ gap: var(--rc-space-3);
1282
+ margin-top: var(--rc-space-6);
1283
+ }
1284
+ .checkpoint-explain {
1285
+ color: var(--rc-color-text-secondary, #94a3b8);
1286
+ line-height: 1.6;
1287
+ margin-top: var(--rc-space-4);
1288
+ font-size: var(--rc-font-sm);
1289
+ }
1290
+
1291
+ /* ================================================================
1292
+ Enrich Step
1293
+ ================================================================ */
1294
+ .enrich-dashboard {
1295
+ display: flex;
1296
+ flex-direction: column;
1297
+ gap: var(--rc-space-6);
1298
+ max-width: 700px;
1299
+ }
1300
+
1301
+ .enrich-checklist {
1302
+ display: flex;
1303
+ flex-direction: column;
1304
+ gap: var(--rc-space-2);
1305
+ }
1306
+
1307
+ .enrich-row {
1308
+ background: var(--rc-color-bg-secondary, #1e293b);
1309
+ border: 1px solid var(--rc-color-border, #334155);
1310
+ border-radius: var(--rc-radius-md, 8px);
1311
+ overflow: hidden;
1312
+ }
1313
+
1314
+ .enrich-row-header {
1315
+ display: flex;
1316
+ align-items: center;
1317
+ gap: var(--rc-space-3);
1318
+ padding: var(--rc-space-3) var(--rc-space-4);
1319
+ cursor: pointer;
1320
+ transition: background 0.15s;
1321
+ }
1322
+ .enrich-row-header:hover {
1323
+ background: rgba(255,255,255,0.03);
1324
+ }
1325
+
1326
+ .enrich-req-name { font-weight: 500; flex: 1; }
1327
+ .enrich-progress {
1328
+ font-size: var(--rc-font-sm);
1329
+ color: var(--rc-color-text-secondary, #94a3b8);
1330
+ min-width: 80px;
1331
+ text-align: right;
1332
+ }
1333
+ .enrich-arrow {
1334
+ color: var(--rc-color-text-secondary, #94a3b8);
1335
+ transition: transform 0.2s;
1336
+ font-size: 12px;
1337
+ }
1338
+ .enrich-row.expanded .enrich-arrow {
1339
+ transform: rotate(90deg);
1340
+ }
1341
+ .enrich-row-detail {
1342
+ display: none;
1343
+ padding: var(--rc-space-3) var(--rc-space-4);
1344
+ border-top: 1px solid var(--rc-color-border, #334155);
1345
+ font-size: var(--rc-font-sm);
1346
+ color: var(--rc-color-text-secondary, #94a3b8);
1347
+ }
1348
+ .enrich-row.expanded .enrich-row-detail {
1349
+ display: block;
1350
+ }
1351
+
1352
+ .activity-log {
1353
+ background: var(--rc-color-bg-secondary, #1e293b);
1354
+ border: 1px solid var(--rc-color-border, #334155);
1355
+ border-radius: var(--rc-radius-md, 8px);
1356
+ padding: var(--rc-space-4);
1357
+ max-height: 300px;
1358
+ overflow-y: auto;
1359
+ }
1360
+ .activity-log-title {
1361
+ font-weight: 600;
1362
+ margin-bottom: var(--rc-space-3);
1363
+ font-size: var(--rc-font-sm);
1364
+ text-transform: uppercase;
1365
+ letter-spacing: 0.05em;
1366
+ color: var(--rc-color-text-secondary, #94a3b8);
1367
+ }
1368
+ .log-entry {
1369
+ font-size: var(--rc-font-sm);
1370
+ padding: var(--rc-space-1) 0;
1371
+ border-bottom: 1px solid rgba(255,255,255,0.04);
1372
+ }
1373
+ .log-time {
1374
+ color: var(--rc-color-text-secondary, #64748b);
1375
+ margin-right: var(--rc-space-2);
1376
+ font-family: var(--rc-font-mono, 'Geist Mono', monospace);
1377
+ font-size: 12px;
1378
+ }
1379
+
1380
+ /* ================================================================
1381
+ Serve Step
1382
+ ================================================================ */
1383
+ .serve-card {
1384
+ max-width: 650px;
1385
+ }
1386
+ .serve-tier-badge {
1387
+ display: inline-block;
1388
+ padding: var(--rc-space-2) var(--rc-space-4);
1389
+ border-radius: var(--rc-radius-md, 8px);
1390
+ font-weight: 700;
1391
+ font-size: var(--rc-font-lg);
1392
+ margin: var(--rc-space-4) 0;
1393
+ }
1394
+ .serve-tier-badge.bronze { background: rgba(205, 127, 50, 0.15); color: #cd7f32; border: 1px solid rgba(205, 127, 50, 0.3); }
1395
+ .serve-tier-badge.silver { background: rgba(192, 192, 192, 0.15); color: #c0c0c0; border: 1px solid rgba(192, 192, 192, 0.3); }
1396
+ .serve-tier-badge.gold { background: rgba(201, 165, 90, 0.15); color: var(--rc-color-accent, #c9a55a); border: 1px solid rgba(201, 165, 90, 0.3); }
1397
+
1398
+ .serve-ctas {
1399
+ display: flex;
1400
+ gap: var(--rc-space-3);
1401
+ margin: var(--rc-space-6) 0;
1402
+ }
1403
+
1404
+ .serve-commands {
1405
+ background: var(--rc-color-bg-secondary, #1e293b);
1406
+ border: 1px solid var(--rc-color-border, #334155);
1407
+ border-radius: var(--rc-radius-md, 8px);
1408
+ padding: var(--rc-space-4);
1409
+ margin: var(--rc-space-4) 0;
1410
+ }
1411
+ .serve-commands-title {
1412
+ font-weight: 600;
1413
+ margin-bottom: var(--rc-space-3);
1414
+ font-size: var(--rc-font-sm);
1415
+ text-transform: uppercase;
1416
+ letter-spacing: 0.05em;
1417
+ color: var(--rc-color-text-secondary, #94a3b8);
1418
+ }
1419
+ .serve-cmd-row {
1420
+ display: flex;
1421
+ gap: var(--rc-space-4);
1422
+ padding: var(--rc-space-2) 0;
1423
+ font-family: var(--rc-font-mono, 'Geist Mono', monospace);
1424
+ font-size: var(--rc-font-sm);
1425
+ }
1426
+ .serve-cmd {
1427
+ color: var(--rc-color-accent, #c9a55a);
1428
+ min-width: 280px;
1429
+ }
1430
+ .serve-cmd-desc {
1431
+ color: var(--rc-color-text-secondary, #94a3b8);
1432
+ }
1433
+
1434
+ .mcp-config-block {
1435
+ background: #0f172a;
1436
+ border: 1px solid var(--rc-color-border, #334155);
1437
+ border-radius: var(--rc-radius-md, 8px);
1438
+ padding: var(--rc-space-4);
1439
+ margin: var(--rc-space-4) 0;
1440
+ font-family: var(--rc-font-mono, 'Geist Mono', monospace);
1441
+ font-size: var(--rc-font-sm);
1442
+ white-space: pre-wrap;
1443
+ word-break: break-all;
1444
+ max-height: 300px;
1445
+ overflow-y: auto;
677
1446
  }