@runflow-ai/cli 0.2.10 → 0.2.12

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/style.css DELETED
@@ -1,1354 +0,0 @@
1
- /* ============================================================================
2
- Runflow Test Interface - Enterprise Design System
3
- Version: 2.0.0
4
- Description: Professional styling for developer testing interface
5
- ============================================================================ */
6
-
7
- /* ============================================================================
8
- CSS Variables & Design Tokens
9
- ============================================================================ */
10
-
11
- :root {
12
- /* Brand Colors */
13
- --brand-50: #eef2ff;
14
- --brand-100: #e0e7ff;
15
- --brand-200: #c7d2fe;
16
- --brand-300: #a5b4fc;
17
- --brand-400: #818cf8;
18
- --brand-500: #6366f1;
19
- --brand-600: #4f46e5;
20
- --brand-700: #4338ca;
21
- --brand-800: #3730a3;
22
- --brand-900: #312e81;
23
-
24
- /* Semantic Colors */
25
- --primary: var(--brand-600);
26
- --primary-hover: var(--brand-700);
27
- --primary-light: var(--brand-100);
28
- --success: #059669;
29
- --success-light: #10b981;
30
- --warning: #d97706;
31
- --warning-light: #fbbf24;
32
- --error: #dc2626;
33
- --error-light: #f87171;
34
- --info: #0284c7;
35
- --info-light: #38bdf8;
36
-
37
- /* Neutral Palette */
38
- --gray-50: #f8fafc;
39
- --gray-100: #f1f5f9;
40
- --gray-200: #e2e8f0;
41
- --gray-300: #cbd5e1;
42
- --gray-400: #94a3b8;
43
- --gray-500: #64748b;
44
- --gray-600: #475569;
45
- --gray-700: #334155;
46
- --gray-800: #1e293b;
47
- --gray-900: #0f172a;
48
- --gray-950: #020617;
49
-
50
- /* Typography */
51
- --font-sans: 'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif;
52
- --font-mono: 'SF Mono', Monaco, Consolas, 'Liberation Mono', 'Courier New', monospace;
53
-
54
- --text-xs: 0.75rem;
55
- --text-sm: 0.875rem;
56
- --text-base: 1rem;
57
- --text-lg: 1.125rem;
58
- --text-xl: 1.25rem;
59
- --text-2xl: 1.5rem;
60
-
61
- /* Spacing Scale */
62
- --space-1: 0.25rem;
63
- --space-2: 0.5rem;
64
- --space-3: 0.75rem;
65
- --space-4: 1rem;
66
- --space-5: 1.25rem;
67
- --space-6: 1.5rem;
68
- --space-8: 2rem;
69
- --space-10: 2.5rem;
70
-
71
- /* Border Radius */
72
- --radius-sm: 0.25rem;
73
- --radius-md: 0.375rem;
74
- --radius-lg: 0.5rem;
75
- --radius-xl: 0.75rem;
76
- --radius-2xl: 1rem;
77
- --radius-full: 9999px;
78
-
79
- /* Shadows - Cleaner and more subtle */
80
- --shadow-sm: 0 1px 2px rgba(0, 0, 0, 0.04);
81
- --shadow-md: 0 2px 4px rgba(0, 0, 0, 0.06);
82
- --shadow-lg: 0 4px 8px rgba(0, 0, 0, 0.08);
83
- --shadow-xl: 0 8px 16px rgba(0, 0, 0, 0.1);
84
-
85
- /* Transitions */
86
- --transition-fast: 150ms ease;
87
- --transition-base: 200ms ease;
88
- --transition-slow: 300ms ease;
89
-
90
- /* Layout */
91
- --header-height: 4rem;
92
- --footer-height: 3rem;
93
- --sidebar-width: 320px;
94
- --max-width: 1400px;
95
- }
96
-
97
- /* ============================================================================
98
- Base Styles & Reset
99
- ============================================================================ */
100
-
101
- *,
102
- *::before,
103
- *::after {
104
- box-sizing: border-box;
105
- margin: 0;
106
- padding: 0;
107
- }
108
-
109
- html {
110
- font-size: 16px;
111
- -webkit-font-smoothing: antialiased;
112
- -moz-osx-font-smoothing: grayscale;
113
- }
114
-
115
- body {
116
- font-family: var(--font-sans);
117
- font-size: var(--text-base);
118
- line-height: 1.6;
119
- color: var(--gray-900);
120
- background: var(--gray-50);
121
- min-height: 100vh;
122
- }
123
-
124
- /* ============================================================================
125
- Layout Structure
126
- ============================================================================ */
127
-
128
- .container {
129
- max-width: var(--max-width);
130
- margin: 0 auto;
131
- padding: var(--space-4);
132
- height: 100vh;
133
- display: flex;
134
- flex-direction: column;
135
- gap: var(--space-4);
136
- overflow: hidden;
137
- }
138
-
139
- /* ============================================================================
140
- Header Styles
141
- ============================================================================ */
142
-
143
- .app-header {
144
- background: white;
145
- border-radius: var(--radius-xl);
146
- box-shadow: var(--shadow-sm);
147
- transition: box-shadow var(--transition-base);
148
- flex-shrink: 0;
149
- }
150
-
151
- .app-header:hover {
152
- box-shadow: var(--shadow-md);
153
- }
154
-
155
- .header-content {
156
- display: flex;
157
- justify-content: space-between;
158
- align-items: center;
159
- padding: var(--space-4) var(--space-6);
160
- }
161
-
162
- .header-left {
163
- display: flex;
164
- align-items: center;
165
- gap: var(--space-8);
166
- }
167
-
168
- .logo-section {
169
- display: flex;
170
- align-items: center;
171
- gap: var(--space-3);
172
- }
173
-
174
- .logo-image {
175
- width: 40px;
176
- height: 40px;
177
- object-fit: contain;
178
- }
179
-
180
- .logo-icon {
181
- width: 40px;
182
- height: 40px;
183
- background: var(--primary);
184
- color: white;
185
- border-radius: var(--radius-lg);
186
- display: flex;
187
- align-items: center;
188
- justify-content: center;
189
- font-weight: 700;
190
- font-size: var(--text-xl);
191
- }
192
-
193
- .brand-text {
194
- display: flex;
195
- flex-direction: column;
196
- }
197
-
198
- .brand-title {
199
- font-size: var(--text-xl);
200
- font-weight: 700;
201
- color: var(--gray-900);
202
- line-height: 1.2;
203
- }
204
-
205
- .brand-subtitle {
206
- font-size: var(--text-xs);
207
- color: var(--gray-500);
208
- text-transform: uppercase;
209
- letter-spacing: 0.05em;
210
- }
211
-
212
- .project-info {
213
- display: flex;
214
- align-items: center;
215
- gap: var(--space-2);
216
- padding: var(--space-2) var(--space-4);
217
- background: var(--gray-50);
218
- border-radius: var(--radius-full);
219
- }
220
-
221
- .project-label {
222
- font-size: var(--text-sm);
223
- color: var(--gray-500);
224
- }
225
-
226
- .project-name {
227
- font-size: var(--text-sm);
228
- font-weight: 600;
229
- color: var(--gray-700);
230
- }
231
-
232
- /* Connection Status */
233
- .connection-status,
234
- .status {
235
- display: flex;
236
- align-items: center;
237
- gap: var(--space-2);
238
- padding: var(--space-2) var(--space-4);
239
- background: var(--gray-50);
240
- border-radius: var(--radius-full);
241
- transition: all var(--transition-base);
242
- }
243
-
244
- .connection-status.connected,
245
- .status.connected {
246
- background: var(--success);
247
- color: white;
248
- }
249
-
250
- .connection-status.error,
251
- .status.error {
252
- background: var(--error);
253
- color: white;
254
- }
255
-
256
- /* Status Dot */
257
- .status .dot {
258
- width: 8px;
259
- height: 8px;
260
- border-radius: 50%;
261
- background: var(--gray-400);
262
- }
263
-
264
- .status-indicator {
265
- width: 8px;
266
- height: 8px;
267
- border-radius: 50%;
268
- background: var(--gray-400);
269
- animation: pulse 2s infinite;
270
- }
271
-
272
- .connected .status-indicator {
273
- background: white;
274
- animation: pulse 2s infinite;
275
- }
276
-
277
- .status-text {
278
- font-size: var(--text-sm);
279
- font-weight: 500;
280
- }
281
-
282
- /* ============================================================================
283
- Main Content Layout
284
- ============================================================================ */
285
-
286
- .main-content {
287
- flex: 1;
288
- display: grid;
289
- grid-template-columns: minmax(0, 1fr) var(--sidebar-width);
290
- gap: var(--space-4);
291
- min-height: 0; /* Important for flexbox to work properly */
292
- overflow: hidden;
293
- width: 100%;
294
- }
295
-
296
- /* ============================================================================
297
- Chat Container
298
- ============================================================================ */
299
-
300
- .chat-container {
301
- background: white;
302
- border-radius: var(--radius-xl);
303
- box-shadow: var(--shadow-sm);
304
- display: flex;
305
- flex-direction: column;
306
- height: 100%;
307
- min-height: 0;
308
- min-width: 0;
309
- overflow: hidden;
310
- }
311
-
312
- /* Messages Area */
313
- .messages {
314
- flex: 1 1 auto;
315
- padding: var(--space-4);
316
- overflow-y: auto;
317
- overflow-x: hidden;
318
- scroll-behavior: smooth;
319
- background: white;
320
- min-height: 0; /* CRITICAL for flexbox scrolling to work */
321
- max-height: 100%;
322
- width: 100%;
323
- }
324
-
325
- /* Custom scrollbar for messages */
326
- .messages::-webkit-scrollbar {
327
- width: 6px;
328
- }
329
-
330
- .messages::-webkit-scrollbar-track {
331
- background: var(--gray-100);
332
- border-radius: var(--radius-full);
333
- }
334
-
335
- .messages::-webkit-scrollbar-thumb {
336
- background: var(--gray-400);
337
- border-radius: var(--radius-full);
338
- }
339
-
340
- .messages::-webkit-scrollbar-thumb:hover {
341
- background: var(--gray-500);
342
- }
343
-
344
- /* Message Styles */
345
- .message {
346
- margin-bottom: var(--space-3);
347
- animation: messageSlide 0.3s ease;
348
- width: 100%;
349
- max-width: 100%;
350
- overflow: hidden;
351
- }
352
-
353
- @keyframes messageSlide {
354
- from {
355
- opacity: 0;
356
- transform: translateY(10px);
357
- }
358
- to {
359
- opacity: 1;
360
- transform: translateY(0);
361
- }
362
- }
363
-
364
- .message-bubble {
365
- display: inline-block;
366
- max-width: 75%;
367
- padding: var(--space-3) var(--space-4);
368
- border-radius: var(--radius-xl);
369
- position: relative;
370
- line-height: 1.5;
371
- overflow-x: hidden;
372
- word-break: break-word;
373
- }
374
-
375
- /* Message Types */
376
- .message.system .message-bubble {
377
- background: var(--brand-50);
378
- color: var(--brand-700);
379
- max-width: 100%;
380
- border: 1px solid var(--brand-100);
381
- font-weight: 500;
382
- }
383
-
384
- .message.user {
385
- text-align: right;
386
- }
387
-
388
- .message.user .message-bubble {
389
- background: var(--brand-600);
390
- color: white;
391
- margin-left: auto;
392
- text-align: left;
393
- box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1);
394
- }
395
-
396
- .message.assistant .message-bubble {
397
- background: white;
398
- border: 1px solid var(--gray-200);
399
- box-shadow: 0 1px 3px rgba(0, 0, 0, 0.08);
400
- color: var(--gray-800);
401
- max-width: 100%;
402
- }
403
-
404
- .message.error .message-bubble {
405
- background: var(--error);
406
- color: white;
407
- border: 1px solid var(--error);
408
- }
409
-
410
- /* Message Header */
411
- .message-header {
412
- display: flex;
413
- align-items: center;
414
- margin-bottom: var(--space-2);
415
- }
416
-
417
- .message-type {
418
- font-size: var(--text-xs);
419
- font-weight: 600;
420
- text-transform: uppercase;
421
- letter-spacing: 0.05em;
422
- opacity: 0.9;
423
- }
424
-
425
- /* Message Content */
426
- .message .content {
427
- font-size: var(--text-sm);
428
- line-height: 1.7;
429
- word-wrap: break-word;
430
- }
431
-
432
- .message .content strong {
433
- font-weight: 600;
434
- color: inherit;
435
- }
436
-
437
- /* Message Metadata */
438
- .message-metadata {
439
- display: flex;
440
- flex-wrap: wrap;
441
- gap: var(--space-2);
442
- margin-top: var(--space-2);
443
- padding-top: var(--space-2);
444
- border-top: 1px solid rgba(0, 0, 0, 0.05);
445
- }
446
-
447
- .message.user .message-metadata {
448
- border-top-color: rgba(255, 255, 255, 0.15);
449
- }
450
-
451
- .meta-item {
452
- font-size: 11px;
453
- padding: 2px 8px;
454
- background: rgba(0, 0, 0, 0.05);
455
- border-radius: var(--radius-full);
456
- color: var(--gray-600);
457
- }
458
-
459
- .message.user .meta-item {
460
- background: rgba(255, 255, 255, 0.15);
461
- color: rgba(255, 255, 255, 0.9);
462
- }
463
-
464
- /* Message Footer */
465
- .message-footer {
466
- display: flex;
467
- align-items: center;
468
- gap: var(--space-2);
469
- margin-top: var(--space-2);
470
- }
471
-
472
- .message .content pre {
473
- background: var(--gray-900);
474
- color: var(--gray-100);
475
- padding: var(--space-3);
476
- border-radius: var(--radius-md);
477
- margin: var(--space-2) 0;
478
- overflow-x: auto;
479
- font-family: var(--font-mono);
480
- font-size: var(--text-xs);
481
- }
482
-
483
- .message.user .content pre {
484
- background: rgba(255, 255, 255, 0.15);
485
- color: white;
486
- }
487
-
488
- .message.assistant .content pre {
489
- background: var(--gray-800);
490
- color: var(--gray-100);
491
- }
492
-
493
- .message .timestamp {
494
- font-size: var(--text-xs);
495
- opacity: 0.6;
496
- margin-top: var(--space-2);
497
- }
498
-
499
- .message.user .timestamp {
500
- opacity: 0.8;
501
- }
502
-
503
- .message .duration {
504
- display: inline-block;
505
- margin-left: var(--space-2);
506
- padding: 2px 6px;
507
- background: var(--gray-100);
508
- color: var(--gray-600);
509
- border-radius: var(--radius-sm);
510
- font-size: 10px;
511
- font-weight: 600;
512
- font-family: var(--font-mono);
513
- }
514
-
515
- .message.user .duration {
516
- background: rgba(255, 255, 255, 0.2);
517
- color: rgba(255, 255, 255, 0.9);
518
- }
519
-
520
- /* JSON Toggle */
521
- .json-toggle-wrapper {
522
- margin-top: var(--space-3);
523
- padding-top: var(--space-3);
524
- border-top: 1px solid var(--gray-200);
525
- width: 100%;
526
- max-width: 100%;
527
- overflow: hidden;
528
- }
529
-
530
- .json-toggle {
531
- background: var(--gray-100);
532
- border: 1px solid var(--gray-200);
533
- border-radius: var(--radius-md);
534
- padding: var(--space-2) var(--space-3);
535
- font-size: var(--text-xs);
536
- color: var(--gray-700);
537
- cursor: pointer;
538
- transition: all var(--transition-fast);
539
- font-weight: 500;
540
- }
541
-
542
- .json-toggle:hover {
543
- background: var(--gray-200);
544
- color: var(--gray-900);
545
- }
546
-
547
- .json-response {
548
- margin-top: var(--space-3);
549
- border-radius: var(--radius-lg);
550
- overflow: hidden;
551
- animation: slideDown 0.3s ease;
552
- max-width: 100%;
553
- }
554
-
555
- @keyframes slideDown {
556
- from {
557
- opacity: 0;
558
- transform: translateY(-10px);
559
- }
560
- to {
561
- opacity: 1;
562
- transform: translateY(0);
563
- }
564
- }
565
-
566
- .json-response pre {
567
- background: var(--gray-900);
568
- color: var(--gray-100);
569
- padding: var(--space-4);
570
- margin: 0;
571
- font-size: var(--text-xs);
572
- max-height: 250px;
573
- overflow: auto;
574
- white-space: pre;
575
- word-wrap: normal;
576
- max-width: 100%;
577
- }
578
-
579
- /* Custom scrollbar for JSON */
580
- .json-response pre::-webkit-scrollbar {
581
- width: 8px;
582
- height: 8px;
583
- }
584
-
585
- .json-response pre::-webkit-scrollbar-track {
586
- background: var(--gray-800);
587
- }
588
-
589
- .json-response pre::-webkit-scrollbar-thumb {
590
- background: var(--gray-600);
591
- border-radius: var(--radius-sm);
592
- }
593
-
594
- .json-response pre::-webkit-scrollbar-corner {
595
- background: var(--gray-800);
596
- }
597
-
598
- /* Scenario Select Styling */
599
- #scenarioSelect optgroup {
600
- font-weight: 600;
601
- color: var(--gray-700);
602
- background: var(--gray-50);
603
- }
604
-
605
- #scenarioSelect option {
606
- padding: var(--space-2);
607
- font-weight: 400;
608
- }
609
-
610
- /* ============================================================================
611
- Input Form
612
- ============================================================================ */
613
-
614
- .input-form {
615
- display: flex;
616
- gap: var(--space-3);
617
- padding: var(--space-4) var(--space-6);
618
- background: white;
619
- border-top: 1px solid var(--gray-200);
620
- flex-shrink: 0; /* Never shrink */
621
- flex-grow: 0; /* Never grow */
622
- backdrop-filter: blur(10px);
623
- background: rgba(255, 255, 255, 0.98);
624
- }
625
-
626
- .input-wrapper {
627
- flex: 1;
628
- position: relative;
629
- display: flex;
630
- align-items: center;
631
- }
632
-
633
- .message-input {
634
- width: 100%;
635
- padding: var(--space-3) var(--space-4);
636
- padding-right: var(--space-10);
637
- font-size: var(--text-sm);
638
- border: 2px solid var(--gray-200);
639
- border-radius: var(--radius-lg);
640
- background: white;
641
- transition: all var(--transition-base);
642
- }
643
-
644
- .message-input:focus {
645
- outline: none;
646
- border-color: var(--primary);
647
- box-shadow: 0 0 0 3px var(--primary-light);
648
- }
649
-
650
- .clear-btn {
651
- position: absolute;
652
- right: var(--space-3);
653
- background: none;
654
- border: none;
655
- color: var(--gray-400);
656
- cursor: pointer;
657
- padding: var(--space-2);
658
- border-radius: var(--radius-md);
659
- transition: all var(--transition-fast);
660
- }
661
-
662
- .clear-btn:hover {
663
- color: var(--gray-600);
664
- background: var(--gray-100);
665
- }
666
-
667
- .send-button {
668
- padding: var(--space-3) var(--space-6);
669
- background: var(--primary);
670
- color: white;
671
- border: none;
672
- border-radius: var(--radius-lg);
673
- font-size: var(--text-sm);
674
- font-weight: 600;
675
- cursor: pointer;
676
- transition: all var(--transition-base);
677
- display: flex;
678
- align-items: center;
679
- gap: var(--space-2);
680
- }
681
-
682
- .send-button:hover:not(:disabled) {
683
- background: var(--primary-hover);
684
- transform: translateY(-1px);
685
- box-shadow: var(--shadow-md);
686
- }
687
-
688
- .send-button:disabled {
689
- opacity: 0.5;
690
- cursor: not-allowed;
691
- }
692
-
693
- /* ============================================================================
694
- Sidebar Tabs
695
- ============================================================================ */
696
-
697
- .sidebar-tabs {
698
- display: flex;
699
- gap: 4px;
700
- padding: 8px 12px;
701
- background: var(--gray-50);
702
- border-bottom: 1px solid var(--gray-200);
703
- }
704
-
705
- .sidebar-tab {
706
- flex: 1;
707
- display: flex;
708
- align-items: center;
709
- justify-content: center;
710
- gap: 6px;
711
- padding: 8px 12px;
712
- border: none;
713
- background: transparent;
714
- color: var(--gray-600);
715
- font-size: 13px;
716
- font-weight: 500;
717
- cursor: pointer;
718
- border-radius: var(--radius-md);
719
- transition: all var(--transition-fast);
720
- }
721
-
722
- .sidebar-tab:hover {
723
- background: var(--gray-100);
724
- color: var(--gray-800);
725
- }
726
-
727
- .sidebar-tab.active {
728
- background: white;
729
- color: var(--primary);
730
- box-shadow: var(--shadow-sm);
731
- }
732
-
733
- .sidebar-tab .tab-icon {
734
- font-size: 14px;
735
- }
736
-
737
- .sidebar-tab .tab-label {
738
- font-size: 12px;
739
- }
740
-
741
- .tab-content {
742
- display: none;
743
- }
744
-
745
- .tab-content.active {
746
- display: block;
747
- }
748
-
749
- /* ============================================================================
750
- Sidebar
751
- ============================================================================ */
752
-
753
- .sidebar {
754
- display: flex;
755
- flex-direction: column;
756
- gap: var(--space-3);
757
- height: 100%;
758
- min-height: 0;
759
- overflow-y: auto;
760
- overflow-x: hidden;
761
- padding-right: var(--space-2);
762
- width: var(--sidebar-width);
763
- flex-shrink: 0;
764
- }
765
-
766
- /* Custom scrollbar for sidebar */
767
- .sidebar::-webkit-scrollbar {
768
- width: 4px;
769
- }
770
-
771
- .sidebar::-webkit-scrollbar-track {
772
- background: transparent;
773
- }
774
-
775
- .sidebar::-webkit-scrollbar-thumb {
776
- background: var(--gray-300);
777
- border-radius: var(--radius-full);
778
- }
779
-
780
- .sidebar::-webkit-scrollbar-thumb:hover {
781
- background: var(--gray-400);
782
- }
783
-
784
- /* Panel Styles */
785
- .panel {
786
- background: white;
787
- border-radius: var(--radius-xl);
788
- box-shadow: var(--shadow-sm);
789
- padding: var(--space-4);
790
- transition: all var(--transition-base);
791
- flex-shrink: 0;
792
- }
793
-
794
- .panel:hover {
795
- box-shadow: var(--shadow-md);
796
- }
797
-
798
- .panel-title {
799
- font-size: var(--text-sm);
800
- font-weight: 600;
801
- color: var(--gray-900);
802
- margin-bottom: var(--space-3);
803
- display: flex;
804
- align-items: center;
805
- gap: var(--space-2);
806
- }
807
-
808
- .panel-icon {
809
- font-size: var(--text-base);
810
- }
811
-
812
- /* Info Items */
813
- .info-item {
814
- display: flex;
815
- justify-content: space-between;
816
- align-items: center;
817
- padding: var(--space-2) 0;
818
- font-size: var(--text-sm);
819
- border-bottom: 1px solid var(--gray-100);
820
- }
821
-
822
- .info-item:last-child {
823
- border-bottom: none;
824
- }
825
-
826
- /* Settings Group */
827
- .settings-group {
828
- display: flex;
829
- flex-direction: column;
830
- gap: var(--space-3);
831
- }
832
-
833
- .setting-item {
834
- display: flex;
835
- align-items: center;
836
- gap: var(--space-2);
837
- cursor: pointer;
838
- font-size: var(--text-sm);
839
- color: var(--gray-700);
840
- transition: color var(--transition-fast);
841
- }
842
-
843
- .setting-item:hover {
844
- color: var(--gray-900);
845
- }
846
-
847
- .setting-item input[type="checkbox"] {
848
- cursor: pointer;
849
- }
850
-
851
- .setting-item-input {
852
- margin-top: var(--space-3);
853
- padding-top: var(--space-3);
854
- border-top: 1px solid var(--gray-200);
855
- }
856
-
857
- .setting-item-input label {
858
- display: block;
859
- font-size: var(--text-sm);
860
- font-weight: 500;
861
- color: var(--gray-700);
862
- margin-bottom: var(--space-1);
863
- }
864
-
865
- .info-item strong {
866
- color: var(--gray-600);
867
- font-weight: 500;
868
- }
869
-
870
- .info-item span {
871
- color: var(--gray-900);
872
- font-weight: 600;
873
- }
874
-
875
- /* Status Indicators */
876
- .status-ready {
877
- color: var(--success);
878
- }
879
-
880
- .status-error {
881
- color: var(--error);
882
- }
883
-
884
- /* Control Buttons Grid */
885
- .controls-grid {
886
- display: grid;
887
- gap: var(--space-3);
888
- }
889
-
890
- .control-btn {
891
- display: flex;
892
- align-items: center;
893
- justify-content: center;
894
- gap: var(--space-2);
895
- padding: var(--space-2) var(--space-4);
896
- background: white;
897
- border: 1px solid var(--gray-200);
898
- border-radius: var(--radius-md);
899
- font-size: var(--text-sm);
900
- font-weight: 500;
901
- color: var(--gray-700);
902
- cursor: pointer;
903
- transition: all var(--transition-fast);
904
- height: 36px;
905
- }
906
-
907
- .control-btn:hover {
908
- background: var(--gray-50);
909
- color: var(--gray-900);
910
- border-color: var(--gray-300);
911
- }
912
-
913
- .control-btn:active {
914
- transform: translateY(1px);
915
- }
916
-
917
- .control-btn.refresh-btn:hover {
918
- background: var(--brand-50);
919
- color: var(--brand-700);
920
- border-color: var(--brand-200);
921
- }
922
-
923
- .control-btn.export-btn:hover {
924
- background: var(--success);
925
- color: white;
926
- border-color: var(--success);
927
- }
928
-
929
- .control-btn.danger:hover {
930
- background: var(--error);
931
- color: white;
932
- border-color: var(--error);
933
- }
934
-
935
- .btn-icon {
936
- font-size: var(--text-base);
937
- }
938
-
939
- /* Example Buttons */
940
- .example-buttons {
941
- display: grid;
942
- grid-template-columns: 1fr 1fr;
943
- gap: var(--space-2);
944
- }
945
-
946
- .example-btn {
947
- padding: var(--space-2) var(--space-3);
948
- background: white;
949
- border: 1px solid var(--gray-200);
950
- border-radius: var(--radius-md);
951
- font-size: var(--text-xs);
952
- color: var(--gray-700);
953
- cursor: pointer;
954
- transition: all var(--transition-fast);
955
- text-align: center;
956
- font-weight: 500;
957
- }
958
-
959
- .example-btn:hover {
960
- background: var(--brand-50);
961
- border-color: var(--brand-200);
962
- color: var(--brand-700);
963
- }
964
-
965
- .example-btn:active {
966
- transform: scale(0.98);
967
- }
968
-
969
- /* ============================================================================
970
- Footer
971
- ============================================================================ */
972
-
973
- .app-footer {
974
- background: white;
975
- border-radius: var(--radius-xl);
976
- box-shadow: var(--shadow-sm);
977
- padding: var(--space-3) var(--space-6);
978
- flex-shrink: 0;
979
- }
980
-
981
- .footer-content {
982
- display: flex;
983
- justify-content: space-between;
984
- align-items: center;
985
- }
986
-
987
- .footer-left {
988
- display: flex;
989
- align-items: center;
990
- gap: var(--space-4);
991
- }
992
-
993
- .powered-by {
994
- font-size: var(--text-sm);
995
- color: var(--gray-600);
996
- }
997
-
998
- .powered-by strong {
999
- color: var(--primary);
1000
- font-weight: 600;
1001
- }
1002
-
1003
- .version {
1004
- font-size: var(--text-xs);
1005
- color: var(--gray-400);
1006
- padding: var(--space-1) var(--space-2);
1007
- background: var(--gray-100);
1008
- border-radius: var(--radius-md);
1009
- }
1010
-
1011
- .shortcuts {
1012
- display: flex;
1013
- align-items: center;
1014
- gap: var(--space-2);
1015
- font-size: var(--text-sm);
1016
- color: var(--gray-600);
1017
- }
1018
-
1019
- .shortcut kbd {
1020
- padding: var(--space-1) var(--space-2);
1021
- background: var(--gray-100);
1022
- border: 1px solid var(--gray-300);
1023
- border-radius: var(--radius-sm);
1024
- font-family: var(--font-mono);
1025
- font-size: var(--text-xs);
1026
- font-weight: 600;
1027
- color: var(--gray-700);
1028
- }
1029
-
1030
- .shortcut-separator {
1031
- color: var(--gray-400);
1032
- }
1033
-
1034
- /* ============================================================================
1035
- Loading Overlay
1036
- ============================================================================ */
1037
-
1038
- .loading-overlay {
1039
- position: fixed;
1040
- top: 0;
1041
- left: 0;
1042
- right: 0;
1043
- bottom: 0;
1044
- background: rgba(255, 255, 255, 0.95);
1045
- backdrop-filter: blur(10px);
1046
- display: flex;
1047
- align-items: center;
1048
- justify-content: center;
1049
- z-index: 9999;
1050
- transition: opacity var(--transition-slow);
1051
- }
1052
-
1053
- .loading-content {
1054
- text-align: center;
1055
- padding: var(--space-8);
1056
- background: white;
1057
- border-radius: var(--radius-2xl);
1058
- box-shadow: var(--shadow-xl);
1059
- }
1060
-
1061
- .loading-spinner {
1062
- width: 48px;
1063
- height: 48px;
1064
- margin: 0 auto var(--space-4);
1065
- border: 3px solid var(--gray-200);
1066
- border-top-color: var(--primary);
1067
- border-radius: 50%;
1068
- animation: spin 1s linear infinite;
1069
- }
1070
-
1071
- .loading-title {
1072
- font-size: var(--text-xl);
1073
- font-weight: 700;
1074
- color: var(--gray-900);
1075
- margin-bottom: var(--space-2);
1076
- }
1077
-
1078
- .loading-message {
1079
- font-size: var(--text-sm);
1080
- color: var(--gray-600);
1081
- margin-bottom: var(--space-4);
1082
- }
1083
-
1084
- .loading-steps {
1085
- display: flex;
1086
- flex-direction: column;
1087
- gap: var(--space-2);
1088
- text-align: left;
1089
- margin-top: var(--space-4);
1090
- }
1091
-
1092
- .loading-step {
1093
- font-size: var(--text-sm);
1094
- color: var(--gray-500);
1095
- padding-left: var(--space-6);
1096
- position: relative;
1097
- }
1098
-
1099
- .loading-step::before {
1100
- content: '○';
1101
- position: absolute;
1102
- left: 0;
1103
- color: var(--gray-400);
1104
- }
1105
-
1106
- .loading-step.active::before {
1107
- content: '●';
1108
- color: var(--primary);
1109
- animation: pulse 1s infinite;
1110
- }
1111
-
1112
- .loading-step.completed::before {
1113
- content: '✓';
1114
- color: var(--success);
1115
- }
1116
-
1117
- /* ============================================================================
1118
- Animations
1119
- ============================================================================ */
1120
-
1121
- @keyframes spin {
1122
- to { transform: rotate(360deg); }
1123
- }
1124
-
1125
- @keyframes pulse {
1126
- 0%, 100% { opacity: 1; }
1127
- 50% { opacity: 0.5; }
1128
- }
1129
-
1130
- /* ============================================================================
1131
- Utility Classes
1132
- ============================================================================ */
1133
-
1134
- .sr-only {
1135
- position: absolute;
1136
- width: 1px;
1137
- height: 1px;
1138
- padding: 0;
1139
- margin: -1px;
1140
- overflow: hidden;
1141
- clip: rect(0, 0, 0, 0);
1142
- white-space: nowrap;
1143
- border: 0;
1144
- }
1145
-
1146
- .spinner {
1147
- width: 16px;
1148
- height: 16px;
1149
- border: 2px solid rgba(255, 255, 255, 0.3);
1150
- border-top-color: white;
1151
- border-radius: 50%;
1152
- animation: spin 0.6s linear infinite;
1153
- }
1154
-
1155
- /* ============================================================================
1156
- Responsive Design
1157
- ============================================================================ */
1158
-
1159
- @media (max-width: 1024px) {
1160
- .main-content {
1161
- grid-template-columns: 1fr;
1162
- }
1163
-
1164
- .sidebar {
1165
- display: grid;
1166
- grid-template-columns: repeat(2, 1fr);
1167
- gap: var(--space-4);
1168
- }
1169
- }
1170
-
1171
- @media (max-width: 768px) {
1172
- .header-content {
1173
- flex-direction: column;
1174
- gap: var(--space-3);
1175
- }
1176
-
1177
- .footer-content {
1178
- flex-direction: column;
1179
- gap: var(--space-3);
1180
- text-align: center;
1181
- }
1182
-
1183
- .shortcuts {
1184
- flex-wrap: wrap;
1185
- justify-content: center;
1186
- }
1187
-
1188
- .sidebar {
1189
- grid-template-columns: 1fr;
1190
- }
1191
- }
1192
-
1193
- /* ============================================================================
1194
- Dark Theme Support (Optional)
1195
- ============================================================================ */
1196
-
1197
- [data-theme="dark"] {
1198
- --gray-50: #020617;
1199
- --gray-100: #0f172a;
1200
- --gray-200: #1e293b;
1201
- --gray-300: #334155;
1202
- --gray-400: #475569;
1203
- --gray-500: #64748b;
1204
- --gray-600: #94a3b8;
1205
- --gray-700: #cbd5e1;
1206
- --gray-800: #e2e8f0;
1207
- --gray-900: #f1f5f9;
1208
- --gray-950: #f8fafc;
1209
- }
1210
-
1211
- /* ============================================================================
1212
- Print Styles
1213
- ============================================================================ */
1214
-
1215
- @media print {
1216
- .sidebar,
1217
- .app-footer,
1218
- .input-form,
1219
- .loading-overlay {
1220
- display: none;
1221
- }
1222
-
1223
- .main-content {
1224
- grid-template-columns: 1fr;
1225
- }
1226
-
1227
- .messages {
1228
- max-height: none;
1229
- }
1230
- }
1231
-
1232
- /* ============================================================================
1233
- Traces Panel Styles
1234
- ============================================================================ */
1235
-
1236
- .traces-panel {
1237
- margin-top: 0;
1238
- }
1239
-
1240
- .trace-item {
1241
- padding: 12px;
1242
- margin-bottom: 8px;
1243
- background: var(--gray-50);
1244
- border: 1px solid var(--gray-200);
1245
- border-radius: var(--radius-md);
1246
- cursor: pointer;
1247
- transition: all var(--transition-fast);
1248
- }
1249
-
1250
- .trace-item:hover {
1251
- background: white;
1252
- border-color: var(--primary);
1253
- box-shadow: var(--shadow-sm);
1254
- }
1255
-
1256
- .trace-item-header {
1257
- display: flex;
1258
- justify-content: space-between;
1259
- align-items: center;
1260
- margin-bottom: 6px;
1261
- }
1262
-
1263
- .trace-item-title {
1264
- font-size: 13px;
1265
- font-weight: 600;
1266
- color: var(--gray-800);
1267
- display: flex;
1268
- align-items: center;
1269
- gap: 6px;
1270
- }
1271
-
1272
- .trace-item-badge {
1273
- display: inline-flex;
1274
- align-items: center;
1275
- padding: 2px 8px;
1276
- border-radius: var(--radius-full);
1277
- font-size: 10px;
1278
- font-weight: 600;
1279
- text-transform: uppercase;
1280
- letter-spacing: 0.05em;
1281
- }
1282
-
1283
- .trace-item-badge.phone {
1284
- background: var(--brand-100);
1285
- color: var(--brand-700);
1286
- }
1287
-
1288
- .trace-item-badge.email {
1289
- background: #dbeafe;
1290
- color: #0284c7;
1291
- }
1292
-
1293
- .trace-item-badge.session {
1294
- background: var(--gray-200);
1295
- color: var(--gray-700);
1296
- }
1297
-
1298
- .trace-item-meta {
1299
- display: flex;
1300
- gap: 12px;
1301
- font-size: 11px;
1302
- color: var(--gray-600);
1303
- }
1304
-
1305
- .trace-item-stat {
1306
- display: flex;
1307
- align-items: center;
1308
- gap: 4px;
1309
- }
1310
-
1311
- .trace-details-tree {
1312
- font-family: var(--font-mono);
1313
- font-size: 11px;
1314
- line-height: 1.6;
1315
- }
1316
-
1317
- .trace-node {
1318
- padding: 8px;
1319
- margin: 4px 0;
1320
- background: var(--gray-50);
1321
- border-left: 2px solid var(--gray-300);
1322
- border-radius: var(--radius-sm);
1323
- }
1324
-
1325
- .trace-node.success {
1326
- border-left-color: var(--success);
1327
- }
1328
-
1329
- .trace-node.error {
1330
- border-left-color: var(--error);
1331
- background: rgba(220, 38, 38, 0.05);
1332
- }
1333
-
1334
- .trace-node-header {
1335
- display: flex;
1336
- justify-content: space-between;
1337
- align-items: center;
1338
- font-weight: 600;
1339
- margin-bottom: 4px;
1340
- color: var(--gray-800);
1341
- }
1342
-
1343
- .trace-node-meta {
1344
- font-size: 10px;
1345
- color: var(--gray-600);
1346
- margin-top: 4px;
1347
- }
1348
-
1349
- .trace-children {
1350
- margin-left: 16px;
1351
- margin-top: 8px;
1352
- border-left: 1px dashed var(--gray-300);
1353
- padding-left: 12px;
1354
- }