@visns-studio/visns-components 5.9.8 → 5.9.9

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,2032 @@
1
+ @use 'sass:color';
2
+
3
+ // Variables
4
+ $primary-color: #2563eb;
5
+ $primary-hover: #1d4ed8;
6
+ $secondary-color: #6b7280;
7
+ $success-color: #10b981;
8
+ $danger-color: #ef4444;
9
+ $warning-color: #f59e0b;
10
+ $info-color: #3b82f6;
11
+ $border-color: #e5e7eb;
12
+ $bg-light: #f9fafb;
13
+ $bg-lighter: #f3f4f6;
14
+ $text-primary: #1f2937;
15
+ $text-secondary: #4b5563;
16
+ $text-muted: #9ca3af;
17
+ $shadow-sm: 0 1px 2px 0 rgba(0, 0, 0, 0.05);
18
+ $shadow-md: 0 4px 6px -1px rgba(0, 0, 0, 0.1),
19
+ 0 2px 4px -1px rgba(0, 0, 0, 0.06);
20
+ $shadow-lg: 0 10px 15px -3px rgba(0, 0, 0, 0.1),
21
+ 0 4px 6px -2px rgba(0, 0, 0, 0.05);
22
+ $radius-sm: 4px;
23
+ $radius-md: 6px;
24
+ $radius-lg: 8px;
25
+
26
+ // Main container
27
+ .reportBuilder {
28
+ width: 100%;
29
+ min-height: 100vh;
30
+ background-color: $bg-light;
31
+ }
32
+
33
+ // Header
34
+ .header {
35
+ background-color: white;
36
+ border-bottom: 1px solid $border-color;
37
+ padding: 16px 24px;
38
+ display: flex;
39
+ justify-content: space-between;
40
+ align-items: center;
41
+ box-shadow: $shadow-sm;
42
+ position: sticky;
43
+ top: 0;
44
+ z-index: 100;
45
+ }
46
+
47
+ .headerLeft {
48
+ display: flex;
49
+ align-items: center;
50
+ gap: 16px;
51
+
52
+ h1 {
53
+ margin: 0;
54
+ font-size: 1.5rem;
55
+ font-weight: 700;
56
+ color: $text-primary;
57
+ }
58
+ }
59
+
60
+ .helpButton {
61
+ display: flex;
62
+ align-items: center;
63
+ gap: 6px;
64
+ background-color: $bg-light;
65
+ border: 1px solid $border-color;
66
+ border-radius: $radius-md;
67
+ padding: 8px 16px;
68
+ font-size: 0.875rem;
69
+ color: $text-secondary;
70
+ cursor: pointer;
71
+ transition: all 0.2s ease;
72
+
73
+ &:hover {
74
+ background-color: $bg-lighter;
75
+ color: $text-primary;
76
+ box-shadow: $shadow-sm;
77
+ }
78
+
79
+ svg {
80
+ color: $primary-color;
81
+ }
82
+ }
83
+
84
+ .headerRight {
85
+ display: flex;
86
+ align-items: center;
87
+ gap: 16px;
88
+ }
89
+
90
+ // Mode toggle
91
+ .modeToggle {
92
+ display: flex;
93
+ align-items: center;
94
+ gap: 12px;
95
+ padding: 8px;
96
+ background-color: $bg-light;
97
+ border-radius: $radius-lg;
98
+
99
+ span {
100
+ display: flex;
101
+ align-items: center;
102
+ gap: 6px;
103
+ font-size: 0.875rem;
104
+ color: $text-muted;
105
+ transition: color 0.2s ease;
106
+
107
+ &.active {
108
+ color: $text-primary;
109
+ font-weight: 500;
110
+ }
111
+ }
112
+ }
113
+
114
+ .switch {
115
+ position: relative;
116
+ display: inline-block;
117
+ width: 44px;
118
+ height: 24px;
119
+
120
+ input {
121
+ opacity: 0;
122
+ width: 0;
123
+ height: 0;
124
+
125
+ &:checked + .slider {
126
+ background-color: $primary-color;
127
+
128
+ &:before {
129
+ transform: translateX(20px);
130
+ }
131
+ }
132
+ }
133
+ }
134
+
135
+ .slider {
136
+ position: absolute;
137
+ cursor: pointer;
138
+ top: 0;
139
+ left: 0;
140
+ right: 0;
141
+ bottom: 0;
142
+ background-color: #ccc;
143
+ transition: 0.3s;
144
+ border-radius: 24px;
145
+
146
+ &:before {
147
+ position: absolute;
148
+ content: '';
149
+ height: 18px;
150
+ width: 18px;
151
+ left: 3px;
152
+ bottom: 3px;
153
+ background-color: white;
154
+ transition: 0.3s;
155
+ border-radius: 50%;
156
+ box-shadow: $shadow-sm;
157
+ }
158
+ }
159
+
160
+ // Content
161
+ .content {
162
+ padding: 24px;
163
+ }
164
+
165
+ // Template Selection
166
+ .templateSelection {
167
+ max-width: 1200px;
168
+ margin: 0 auto;
169
+ }
170
+
171
+ .templateHeader {
172
+ text-align: center;
173
+ margin-bottom: 40px;
174
+
175
+ h2 {
176
+ font-size: 2rem;
177
+ font-weight: 700;
178
+ color: $text-primary;
179
+ margin-bottom: 12px;
180
+ }
181
+
182
+ p {
183
+ font-size: 1.125rem;
184
+ color: $text-secondary;
185
+ }
186
+ }
187
+
188
+ .templateCategories {
189
+ display: grid;
190
+ gap: 32px;
191
+ }
192
+
193
+ .templateCategory {
194
+ background-color: white;
195
+ border-radius: $radius-lg;
196
+ padding: 24px;
197
+ box-shadow: $shadow-sm;
198
+ border: 1px solid $border-color;
199
+ }
200
+
201
+ .categoryHeader {
202
+ display: flex;
203
+ align-items: center;
204
+ gap: 12px;
205
+ margin-bottom: 20px;
206
+
207
+ svg {
208
+ color: $primary-color;
209
+ }
210
+
211
+ h3 {
212
+ margin: 0;
213
+ font-size: 1.25rem;
214
+ font-weight: 600;
215
+ color: $text-primary;
216
+ }
217
+ }
218
+
219
+ .templateGrid {
220
+ display: grid;
221
+ grid-template-columns: repeat(auto-fill, minmax(250px, 1fr));
222
+ gap: 16px;
223
+ }
224
+
225
+ .templateCard {
226
+ background-color: $bg-light;
227
+ border: 2px solid transparent;
228
+ border-radius: $radius-md;
229
+ padding: 20px;
230
+ cursor: pointer;
231
+ transition: all 0.2s ease;
232
+ text-align: center;
233
+
234
+ &:hover {
235
+ border-color: $primary-color;
236
+ background-color: white;
237
+ box-shadow: $shadow-md;
238
+ transform: translateY(-2px);
239
+ }
240
+
241
+ svg {
242
+ color: $primary-color;
243
+ margin-bottom: 12px;
244
+ }
245
+
246
+ h4 {
247
+ margin: 0 0 8px 0;
248
+ font-size: 1rem;
249
+ font-weight: 600;
250
+ color: $text-primary;
251
+ }
252
+
253
+ p {
254
+ margin: 0;
255
+ font-size: 0.875rem;
256
+ color: $text-secondary;
257
+ line-height: 1.4;
258
+ }
259
+ }
260
+
261
+ .customTemplate {
262
+ background: linear-gradient(135deg, $primary-color 0%, $primary-hover 100%);
263
+ color: white;
264
+ border-radius: $radius-md;
265
+ padding: 32px;
266
+ cursor: pointer;
267
+ transition: all 0.2s ease;
268
+ text-align: center;
269
+ display: flex;
270
+ flex-direction: column;
271
+ align-items: center;
272
+ justify-content: center;
273
+ min-height: 200px;
274
+
275
+ &:hover {
276
+ box-shadow: $shadow-lg;
277
+ transform: translateY(-2px);
278
+ }
279
+
280
+ svg {
281
+ color: white;
282
+ margin-bottom: 16px;
283
+ }
284
+
285
+ h4 {
286
+ margin: 0 0 8px 0;
287
+ font-size: 1.25rem;
288
+ font-weight: 700;
289
+ }
290
+
291
+ p {
292
+ margin: 0;
293
+ font-size: 0.875rem;
294
+ opacity: 0.9;
295
+ }
296
+ }
297
+
298
+ // Reports Dashboard
299
+ .reportsDashboard {
300
+ max-width: 800px;
301
+ margin: 0 auto;
302
+ }
303
+
304
+ .newReportSection {
305
+ margin-bottom: 32px;
306
+ }
307
+
308
+ .newReportCard {
309
+ background: linear-gradient(135deg, $primary-color 0%, $primary-hover 100%);
310
+ color: white;
311
+ border-radius: $radius-lg;
312
+ padding: 32px;
313
+ text-align: center;
314
+ cursor: pointer;
315
+ transition: all 0.2s ease;
316
+ border: none;
317
+
318
+ &:hover {
319
+ transform: translateY(-2px);
320
+ box-shadow: $shadow-lg;
321
+ }
322
+
323
+ svg {
324
+ margin-bottom: 16px;
325
+ }
326
+
327
+ h4 {
328
+ margin: 0 0 8px 0;
329
+ font-size: 1.25rem;
330
+ font-weight: 700;
331
+ color: white;
332
+ }
333
+
334
+ p {
335
+ margin: 0;
336
+ opacity: 0.9;
337
+ font-size: 0.875rem;
338
+ color: white;
339
+ }
340
+ }
341
+
342
+ .savedReportsSection {
343
+ h3 {
344
+ margin: 0 0 16px 0;
345
+ font-size: 1.125rem;
346
+ font-weight: 600;
347
+ color: $text-primary;
348
+ }
349
+ }
350
+
351
+ .reportsGrid {
352
+ display: grid;
353
+ grid-template-columns: repeat(auto-fill, minmax(280px, 1fr));
354
+ gap: 16px;
355
+ }
356
+
357
+ .reportCard {
358
+ background-color: white;
359
+ border: 2px solid $border-color;
360
+ border-radius: $radius-md;
361
+ overflow: hidden;
362
+ transition: all 0.2s ease;
363
+ position: relative;
364
+
365
+ &:hover {
366
+ border-color: $primary-color;
367
+ box-shadow: $shadow-md;
368
+ transform: translateY(-2px);
369
+ }
370
+
371
+ .reportCardContent {
372
+ padding: 16px;
373
+ cursor: pointer;
374
+ min-height: 120px;
375
+ display: flex;
376
+ flex-direction: column;
377
+ justify-content: space-between;
378
+ }
379
+
380
+ .reportHeader {
381
+ margin-bottom: 12px;
382
+
383
+ h4 {
384
+ margin: 0 0 8px 0;
385
+ font-size: 1rem;
386
+ font-weight: 600;
387
+ color: $text-primary;
388
+ line-height: 1.3;
389
+ overflow: hidden;
390
+ text-overflow: ellipsis;
391
+ white-space: nowrap;
392
+ }
393
+
394
+ .reportMeta {
395
+ display: flex;
396
+ align-items: center;
397
+ gap: 8px;
398
+ font-size: 0.75rem;
399
+ color: $text-secondary;
400
+
401
+ .reportVisibility {
402
+ font-size: 0.875rem;
403
+ }
404
+
405
+ .reportDate {
406
+ color: $text-muted;
407
+ }
408
+ }
409
+ }
410
+
411
+ .reportTableInfo {
412
+ margin-bottom: 12px;
413
+
414
+ .reportTable {
415
+ display: inline-block;
416
+ font-size: 0.75rem;
417
+ background-color: $bg-light;
418
+ color: $text-secondary;
419
+ padding: 4px 8px;
420
+ border-radius: $radius-sm;
421
+ border: 1px solid $border-color;
422
+ }
423
+ }
424
+
425
+ .reportClickHint {
426
+ font-size: 0.75rem;
427
+ color: $text-muted;
428
+ font-style: italic;
429
+ margin-top: auto;
430
+ }
431
+
432
+ .reportActions {
433
+ position: absolute;
434
+ top: 8px;
435
+ right: 8px;
436
+
437
+ .deleteReportBtn {
438
+ width: 24px;
439
+ height: 24px;
440
+ border-radius: 50%;
441
+ background-color: rgba($danger-color, 0.1);
442
+ border: 1px solid rgba($danger-color, 0.2);
443
+ color: $danger-color;
444
+ font-size: 16px;
445
+ font-weight: bold;
446
+ cursor: pointer;
447
+ display: flex;
448
+ align-items: center;
449
+ justify-content: center;
450
+ transition: all 0.2s ease;
451
+ opacity: 0.7;
452
+
453
+ &:hover {
454
+ background-color: $danger-color;
455
+ color: white;
456
+ opacity: 1;
457
+ transform: scale(1.1);
458
+ }
459
+ }
460
+ }
461
+ }
462
+
463
+ .noReports {
464
+ text-align: center;
465
+ padding: 48px 24px;
466
+ color: $text-secondary;
467
+
468
+ svg {
469
+ color: $text-muted;
470
+ margin-bottom: 16px;
471
+ }
472
+
473
+ h3 {
474
+ margin: 0 0 8px 0;
475
+ color: $text-primary;
476
+ }
477
+
478
+ p {
479
+ margin: 0;
480
+ max-width: 400px;
481
+ margin: 0 auto;
482
+ }
483
+ }
484
+
485
+ // Wizard Mode
486
+ .wizardMode {
487
+ max-width: 1400px; // Expanded from 1000px to fit more content
488
+ margin: 0 auto;
489
+ }
490
+
491
+ .wizardProgress {
492
+ background-color: white;
493
+ border-radius: $radius-lg;
494
+ padding: 20px;
495
+ margin-bottom: 24px;
496
+ box-shadow: $shadow-sm;
497
+ display: flex;
498
+ justify-content: space-between;
499
+ align-items: center;
500
+ position: relative;
501
+ gap: 16px;
502
+
503
+ // Remove the line - we'll use arrows instead
504
+ &::before {
505
+ display: none;
506
+ }
507
+ }
508
+
509
+ .wizardStep {
510
+ display: flex;
511
+ flex-direction: column;
512
+ align-items: center;
513
+ gap: 8px;
514
+ cursor: pointer;
515
+ position: relative;
516
+ z-index: 1;
517
+ transition: all 0.2s ease;
518
+ flex: 1;
519
+ max-width: 200px;
520
+
521
+ // Add arrow after each step except the last
522
+ &:not(:last-child)::after {
523
+ content: '→';
524
+ position: absolute;
525
+ right: -20px;
526
+ top: 20px; // Align with step icon center
527
+ color: $border-color;
528
+ font-size: 20px;
529
+ font-weight: bold;
530
+ z-index: 1;
531
+ transition: color 0.2s ease;
532
+ }
533
+
534
+ &.active {
535
+ .stepIcon {
536
+ background-color: $primary-color;
537
+ color: white;
538
+ box-shadow: 0 0 0 4px rgba($primary-color, 0.1);
539
+ }
540
+
541
+ .stepTitle {
542
+ color: $primary-color;
543
+ font-weight: 600;
544
+ }
545
+
546
+ // Color the arrow after active step
547
+ &:not(:last-child)::after {
548
+ color: $primary-color;
549
+ }
550
+ }
551
+
552
+ &.complete {
553
+ .stepIcon {
554
+ background-color: $text-secondary; // Changed from green to neutral
555
+ color: white;
556
+ }
557
+
558
+ .stepTitle {
559
+ color: $text-secondary; // Changed from primary to neutral
560
+ }
561
+
562
+ // Color the arrow after completed step
563
+ &:not(:last-child)::after {
564
+ color: $text-secondary;
565
+ }
566
+ }
567
+
568
+ &:hover:not(.active) {
569
+ .stepIcon {
570
+ transform: scale(1.05);
571
+ }
572
+ }
573
+ }
574
+
575
+ .stepIcon {
576
+ width: 40px; // Reduced from 48px for more compact look
577
+ height: 40px;
578
+ border-radius: 50%;
579
+ background-color: white;
580
+ border: 2px solid $border-color;
581
+ display: flex;
582
+ align-items: center;
583
+ justify-content: center;
584
+ transition: all 0.2s ease;
585
+ }
586
+
587
+ .stepInfo {
588
+ text-align: center;
589
+
590
+ .stepTitle {
591
+ display: block;
592
+ font-size: 0.875rem;
593
+ font-weight: 500;
594
+ color: $text-secondary;
595
+ margin-bottom: 2px;
596
+ }
597
+
598
+ .stepDescription {
599
+ display: block;
600
+ font-size: 0.75rem;
601
+ color: $text-muted;
602
+ max-width: 150px;
603
+ line-height: 1.3;
604
+ }
605
+ }
606
+
607
+ .wizardContent {
608
+ background-color: white;
609
+ border-radius: $radius-lg;
610
+ box-shadow: $shadow-md;
611
+ overflow: hidden;
612
+ }
613
+
614
+ .stepHeader {
615
+ display: flex;
616
+ align-items: center;
617
+ gap: 24px;
618
+ padding: 24px 32px;
619
+ border-bottom: 1px solid $border-color;
620
+ background: linear-gradient(135deg, $primary-color 0%, $primary-hover 100%);
621
+ color: white;
622
+
623
+ .stepNumber {
624
+ display: flex;
625
+ align-items: center;
626
+ justify-content: center;
627
+ width: 48px;
628
+ height: 48px;
629
+ background-color: rgba(255, 255, 255, 0.2);
630
+ border-radius: 50%;
631
+ font-size: 1.5rem;
632
+ font-weight: 700;
633
+ color: white;
634
+ }
635
+
636
+ .stepHeaderContent {
637
+ display: flex;
638
+ align-items: center;
639
+ gap: 16px;
640
+ flex: 1;
641
+
642
+ .stepIcon {
643
+ display: flex;
644
+ align-items: center;
645
+ justify-content: center;
646
+ width: 40px;
647
+ height: 40px;
648
+ background-color: rgba(255, 255, 255, 0.15);
649
+ border-radius: $radius-lg;
650
+
651
+ svg {
652
+ color: white;
653
+ }
654
+ }
655
+
656
+ .stepHeaderText {
657
+ h2 {
658
+ margin: 0 0 4px 0;
659
+ font-size: 1.5rem;
660
+ font-weight: 700;
661
+ color: white;
662
+ }
663
+
664
+ p {
665
+ margin: 0;
666
+ font-size: 1rem;
667
+ color: rgba(255, 255, 255, 0.9);
668
+ }
669
+ }
670
+ }
671
+ }
672
+
673
+ .stepGuidance {
674
+ padding: 20px 32px;
675
+ background-color: rgba($info-color, 0.05);
676
+ border-top: 1px solid $border-color;
677
+ border-bottom: 1px solid $border-color;
678
+
679
+ .guidanceContent {
680
+ h3 {
681
+ margin: 0 0 16px 0;
682
+ font-size: 1.125rem;
683
+ font-weight: 600;
684
+ color: $text-primary;
685
+ }
686
+
687
+ .howToSteps {
688
+ margin-bottom: 16px;
689
+
690
+ h4 {
691
+ margin: 0 0 8px 0;
692
+ font-size: 0.875rem;
693
+ font-weight: 600;
694
+ color: $text-secondary;
695
+ text-transform: uppercase;
696
+ letter-spacing: 0.5px;
697
+ }
698
+
699
+ ol {
700
+ margin: 0;
701
+ padding-left: 20px;
702
+ color: $text-secondary;
703
+
704
+ li {
705
+ margin-bottom: 4px;
706
+ font-size: 0.875rem;
707
+ line-height: 1.4;
708
+ }
709
+ }
710
+ }
711
+
712
+ .guidanceTip {
713
+ display: flex;
714
+ align-items: flex-start;
715
+ gap: 8px;
716
+ padding: 12px;
717
+ background-color: rgba($warning-color, 0.1);
718
+ border: 1px solid rgba($warning-color, 0.2);
719
+ border-radius: $radius-sm;
720
+
721
+ svg {
722
+ color: $warning-color;
723
+ flex-shrink: 0;
724
+ margin-top: 2px;
725
+ }
726
+
727
+ span {
728
+ font-size: 0.875rem;
729
+ color: $text-primary;
730
+ }
731
+ }
732
+ }
733
+ }
734
+
735
+ .stepBody {
736
+ padding: 32px;
737
+ min-height: 500px; // Increased from 400px to accommodate grid layout
738
+ }
739
+
740
+ .wizardNavigation {
741
+ display: flex;
742
+ justify-content: space-between;
743
+ align-items: center;
744
+ padding: 24px 32px;
745
+ border-top: 1px solid $border-color;
746
+ background-color: $bg-light;
747
+ }
748
+
749
+ // Table Selection
750
+ .tableSelection {
751
+ .noTables {
752
+ text-align: center;
753
+ padding: 48px 24px;
754
+ color: $text-secondary;
755
+
756
+ svg {
757
+ color: $text-muted;
758
+ margin-bottom: 16px;
759
+ }
760
+
761
+ h3 {
762
+ margin: 0 0 8px 0;
763
+ color: $text-primary;
764
+ }
765
+
766
+ p {
767
+ margin: 0;
768
+ max-width: 400px;
769
+ margin: 0 auto;
770
+ }
771
+ }
772
+
773
+ .simpleTableList {
774
+ max-width: 100%; // Use full width instead of 600px
775
+ margin: 0 auto;
776
+
777
+ .tableListHeader {
778
+ text-align: center;
779
+ margin-bottom: 24px;
780
+
781
+ h3 {
782
+ margin: 0 0 8px 0;
783
+ font-size: 1.25rem;
784
+ font-weight: 600;
785
+ color: $text-primary;
786
+ }
787
+
788
+ p {
789
+ margin: 0;
790
+ color: $text-secondary;
791
+ font-size: 0.875rem;
792
+ }
793
+ }
794
+
795
+ .tableGrid {
796
+ display: grid;
797
+ grid-template-columns: repeat(
798
+ auto-fill,
799
+ minmax(220px, 1fr)
800
+ ); // Reduced from 280px for more compact
801
+ gap: 12px; // Reduced from 16px
802
+ }
803
+
804
+ .tableCard {
805
+ display: flex;
806
+ flex-direction: column;
807
+ padding: 16px; // Reduced from 20px
808
+ background-color: white;
809
+ border: 2px solid $border-color;
810
+ border-radius: $radius-lg;
811
+ cursor: pointer;
812
+ transition: all 0.2s ease;
813
+ text-align: center;
814
+ position: relative;
815
+ min-height: 120px; // Reduced from 140px
816
+
817
+ &:hover {
818
+ border-color: $primary-color;
819
+ box-shadow: $shadow-md;
820
+ transform: translateY(-2px);
821
+ }
822
+
823
+ &.selected {
824
+ border-color: $primary-color;
825
+ background-color: rgba($primary-color, 0.05);
826
+ box-shadow: $shadow-md;
827
+ }
828
+
829
+ .tableCardIcon {
830
+ display: flex;
831
+ align-items: center;
832
+ justify-content: center;
833
+ width: 40px; // Reduced from 48px
834
+ height: 40px;
835
+ background-color: rgba($primary-color, 0.1);
836
+ border-radius: $radius-lg;
837
+ margin: 0 auto 12px auto; // Reduced from 16px
838
+ flex-shrink: 0;
839
+
840
+ svg {
841
+ color: $primary-color;
842
+ }
843
+ }
844
+
845
+ .tableCardInfo {
846
+ flex: 1;
847
+
848
+ h4 {
849
+ margin: 0 0 6px 0; // Reduced from 8px
850
+ font-size: 0.9rem; // Reduced from 1rem
851
+ font-weight: 600;
852
+ color: $text-primary;
853
+ line-height: 1.2;
854
+ }
855
+
856
+ p {
857
+ margin: 0;
858
+ font-size: 0.7rem; // Reduced from 0.75rem
859
+ color: $text-muted;
860
+ line-height: 1.3; // Reduced from 1.4
861
+ display: -webkit-box;
862
+ -webkit-line-clamp: 2; // Reduced from 3 lines
863
+ -webkit-box-orient: vertical;
864
+ overflow: hidden;
865
+ }
866
+ }
867
+
868
+ .tableCardCheck {
869
+ position: absolute;
870
+ top: 12px;
871
+ right: 12px;
872
+ display: flex;
873
+ align-items: center;
874
+ justify-content: center;
875
+ width: 24px;
876
+ height: 24px;
877
+ background-color: $primary-color;
878
+ border-radius: 50%;
879
+ color: white;
880
+
881
+ svg {
882
+ color: white;
883
+ }
884
+ }
885
+ }
886
+
887
+ .selectedTableInfo {
888
+ display: flex;
889
+ align-items: center;
890
+ justify-content: center;
891
+ gap: 8px;
892
+ margin-top: 16px;
893
+ padding: 12px;
894
+ background-color: rgba($success-color, 0.1);
895
+ border: 1px solid rgba($success-color, 0.2);
896
+ border-radius: $radius-md;
897
+ color: $success-color;
898
+ font-weight: 500;
899
+ font-size: 0.875rem;
900
+
901
+ svg {
902
+ color: $success-color;
903
+ }
904
+ }
905
+ }
906
+ }
907
+
908
+ .tableCategory {
909
+ margin-bottom: 32px;
910
+
911
+ h3 {
912
+ margin: 0 0 16px 0;
913
+ font-size: 1.125rem;
914
+ font-weight: 600;
915
+ color: $text-primary;
916
+ }
917
+ }
918
+
919
+ .tableGrid {
920
+ display: grid;
921
+ grid-template-columns: repeat(auto-fill, minmax(180px, 1fr));
922
+ gap: 12px;
923
+ }
924
+
925
+ .tableCard {
926
+ background-color: $bg-light;
927
+ border: 2px solid transparent;
928
+ border-radius: $radius-md;
929
+ padding: 16px;
930
+ cursor: pointer;
931
+ transition: all 0.2s ease;
932
+ display: flex;
933
+ flex-direction: column;
934
+ align-items: center;
935
+ gap: 8px;
936
+ position: relative;
937
+
938
+ &:hover {
939
+ border-color: $primary-color;
940
+ background-color: white;
941
+ box-shadow: $shadow-sm;
942
+ }
943
+
944
+ &.selected {
945
+ border-color: $primary-color;
946
+ background-color: rgba($primary-color, 0.05);
947
+ }
948
+
949
+ svg {
950
+ color: $primary-color;
951
+ }
952
+
953
+ span {
954
+ font-size: 0.875rem;
955
+ font-weight: 500;
956
+ color: $text-primary;
957
+ text-align: center;
958
+ }
959
+
960
+ .checkIcon {
961
+ position: absolute;
962
+ top: 8px;
963
+ right: 8px;
964
+ color: $primary-color;
965
+ }
966
+ }
967
+
968
+ // Column Selection
969
+ .columnSelection {
970
+ .noColumns {
971
+ text-align: center;
972
+ padding: 48px 24px;
973
+ color: $text-secondary;
974
+
975
+ svg {
976
+ color: $text-muted;
977
+ margin-bottom: 16px;
978
+ }
979
+
980
+ h3 {
981
+ margin: 0 0 8px 0;
982
+ color: $text-primary;
983
+ }
984
+
985
+ p {
986
+ margin: 0;
987
+ max-width: 400px;
988
+ margin: 0 auto;
989
+ }
990
+ }
991
+
992
+ .columnSelectionHeader {
993
+ margin-bottom: 24px;
994
+
995
+ p {
996
+ margin: 0 0 12px 0;
997
+ font-size: 1rem;
998
+ color: $text-secondary;
999
+ }
1000
+ }
1001
+
1002
+ .quickActions {
1003
+ display: flex;
1004
+ gap: 16px;
1005
+ }
1006
+
1007
+ .linkButton {
1008
+ background: none;
1009
+ border: none;
1010
+ color: $primary-color;
1011
+ font-size: 0.875rem;
1012
+ font-weight: 500;
1013
+ cursor: pointer;
1014
+ transition: all 0.2s ease;
1015
+
1016
+ &:hover {
1017
+ color: $primary-hover;
1018
+ text-decoration: underline;
1019
+ }
1020
+ }
1021
+ }
1022
+
1023
+ .columnCategories {
1024
+ display: grid;
1025
+ gap: 16px; // Reduced from 24px for more compact layout
1026
+ }
1027
+
1028
+ .columnCategory {
1029
+ background-color: $bg-light;
1030
+ border-radius: $radius-md;
1031
+ padding: 16px; // Reduced from 20px
1032
+ border: 1px solid $border-color;
1033
+
1034
+ .categoryHeader {
1035
+ display: flex;
1036
+ align-items: center;
1037
+ gap: 12px;
1038
+ margin-bottom: 16px;
1039
+
1040
+ svg {
1041
+ color: $primary-color;
1042
+ }
1043
+
1044
+ h4 {
1045
+ margin: 0;
1046
+ font-size: 1rem;
1047
+ font-weight: 600;
1048
+ color: $text-primary;
1049
+ }
1050
+
1051
+ span {
1052
+ font-size: 0.875rem;
1053
+ color: $text-secondary;
1054
+ }
1055
+ }
1056
+ }
1057
+
1058
+ .columnList {
1059
+ display: grid;
1060
+ grid-template-columns: repeat(
1061
+ auto-fill,
1062
+ minmax(180px, 1fr)
1063
+ ); // Reduced from 200px
1064
+ gap: 6px; // Reduced from 8px
1065
+ }
1066
+
1067
+ .columnItem {
1068
+ display: flex;
1069
+ align-items: center;
1070
+ gap: 6px; // Reduced from 8px
1071
+ padding: 6px 10px; // Reduced from 8px 12px
1072
+ background-color: white;
1073
+ border-radius: $radius-sm;
1074
+ cursor: pointer;
1075
+ transition: all 0.2s ease;
1076
+
1077
+ &:hover {
1078
+ background-color: rgba($primary-color, 0.05);
1079
+ }
1080
+
1081
+ input[type='checkbox'] {
1082
+ width: 16px;
1083
+ height: 16px;
1084
+ cursor: pointer;
1085
+ accent-color: $primary-color;
1086
+ }
1087
+
1088
+ .columnName {
1089
+ flex: 1;
1090
+ font-size: 0.875rem;
1091
+ font-weight: 500;
1092
+ color: $text-primary;
1093
+ }
1094
+
1095
+ .columnType {
1096
+ font-size: 0.75rem;
1097
+ color: $text-muted;
1098
+ padding: 2px 8px;
1099
+ background-color: $bg-light;
1100
+ border-radius: $radius-sm;
1101
+ }
1102
+ }
1103
+
1104
+ .selectedSummary {
1105
+ margin-top: 24px;
1106
+ padding: 16px;
1107
+ background-color: rgba($primary-color, 0.05);
1108
+ border: 1px solid rgba($primary-color, 0.2);
1109
+ border-radius: $radius-md;
1110
+ text-align: center;
1111
+ font-size: 0.875rem;
1112
+ color: $primary-color;
1113
+ }
1114
+
1115
+ .tableColumnSections {
1116
+ display: flex;
1117
+ flex-direction: column;
1118
+ gap: 24px;
1119
+ }
1120
+
1121
+ .tableSection {
1122
+ background-color: white;
1123
+ border: 1px solid $border-color;
1124
+ border-radius: $radius-md;
1125
+ padding: 16px;
1126
+
1127
+ .tableSectionHeader {
1128
+ display: flex;
1129
+ align-items: center;
1130
+ justify-content: space-between;
1131
+ margin-bottom: 16px;
1132
+ padding-bottom: 12px;
1133
+ border-bottom: 1px solid $border-color;
1134
+
1135
+ h3 {
1136
+ margin: 0;
1137
+ font-size: 1.125rem;
1138
+ font-weight: 600;
1139
+ color: $text-primary;
1140
+ }
1141
+
1142
+ .tableColumnCount {
1143
+ font-size: 0.875rem;
1144
+ color: $text-muted;
1145
+ background-color: $bg-light;
1146
+ padding: 4px 8px;
1147
+ border-radius: $radius-sm;
1148
+ }
1149
+ }
1150
+ }
1151
+
1152
+ // Help boxes
1153
+ .helpBox {
1154
+ display: flex;
1155
+ gap: 16px;
1156
+ padding: 16px;
1157
+ background-color: rgba($info-color, 0.05);
1158
+ border: 1px solid rgba($info-color, 0.2);
1159
+ border-radius: $radius-md;
1160
+ margin-bottom: 24px;
1161
+
1162
+ svg {
1163
+ color: $info-color;
1164
+ flex-shrink: 0;
1165
+ }
1166
+
1167
+ h4 {
1168
+ margin: 0 0 8px 0;
1169
+ font-size: 1rem;
1170
+ font-weight: 600;
1171
+ color: $text-primary;
1172
+ }
1173
+
1174
+ p {
1175
+ margin: 0;
1176
+ font-size: 0.875rem;
1177
+ color: $text-secondary;
1178
+ line-height: 1.5;
1179
+ }
1180
+ }
1181
+
1182
+ // Skip options
1183
+ .skipOption {
1184
+ text-align: center;
1185
+ margin-top: 32px;
1186
+ padding-top: 32px;
1187
+ border-top: 1px solid $border-color;
1188
+
1189
+ p {
1190
+ margin: 0 0 16px 0;
1191
+ font-size: 0.875rem;
1192
+ color: $text-secondary;
1193
+ }
1194
+ }
1195
+
1196
+ // Advanced Filters section (from original GenericReport)
1197
+ .filtersSection {
1198
+ // Filter operator container
1199
+ .filterOperatorContainer {
1200
+ margin-bottom: 24px;
1201
+ padding: 20px;
1202
+ background-color: white;
1203
+ border: 1px solid $border-color;
1204
+ border-radius: $radius-md;
1205
+ display: flex;
1206
+ justify-content: space-between;
1207
+ align-items: center;
1208
+ gap: 20px;
1209
+ }
1210
+
1211
+ .mainFilterOperator {
1212
+ flex: 1;
1213
+
1214
+ label {
1215
+ display: block;
1216
+ margin-bottom: 12px;
1217
+ font-size: 1rem;
1218
+ font-weight: 600;
1219
+ color: $text-primary;
1220
+ }
1221
+ }
1222
+
1223
+ .operatorOptions {
1224
+ display: flex;
1225
+ gap: 16px;
1226
+ }
1227
+
1228
+ .operatorOption {
1229
+ padding: 16px 20px;
1230
+ border: 2px solid $border-color;
1231
+ border-radius: $radius-md;
1232
+ cursor: pointer;
1233
+ transition: all 0.2s ease;
1234
+ background-color: white;
1235
+ text-align: center;
1236
+ flex: 1;
1237
+
1238
+ &:hover {
1239
+ border-color: $primary-color;
1240
+ background-color: rgba($primary-color, 0.05);
1241
+ }
1242
+
1243
+ &.operatorOptionSelected {
1244
+ border-color: $primary-color;
1245
+ background-color: rgba($primary-color, 0.1);
1246
+
1247
+ .operatorName {
1248
+ color: $primary-color;
1249
+ }
1250
+ }
1251
+ }
1252
+
1253
+ .operatorName {
1254
+ font-size: 1rem;
1255
+ font-weight: 600;
1256
+ color: $text-primary;
1257
+ margin-bottom: 4px;
1258
+ }
1259
+
1260
+ .operatorDescription {
1261
+ font-size: 0.875rem;
1262
+ color: $text-secondary;
1263
+ line-height: 1.3;
1264
+ }
1265
+
1266
+ .filterActionButtons {
1267
+ display: flex;
1268
+ gap: 12px;
1269
+ }
1270
+
1271
+ // Filter groups
1272
+ .filterGroup {
1273
+ margin-bottom: 24px;
1274
+ background-color: white;
1275
+ border: 1px solid $border-color;
1276
+ border-radius: $radius-md;
1277
+ overflow: hidden;
1278
+ }
1279
+
1280
+ .filterGroupHeader {
1281
+ background-color: $bg-light;
1282
+ padding: 16px 20px;
1283
+ border-bottom: 1px solid $border-color;
1284
+ display: flex;
1285
+ justify-content: space-between;
1286
+ align-items: center;
1287
+ gap: 20px;
1288
+ }
1289
+
1290
+ .filterGroupTitle {
1291
+ display: flex;
1292
+ align-items: center;
1293
+ gap: 24px;
1294
+ flex: 1;
1295
+
1296
+ h4 {
1297
+ margin: 0;
1298
+ font-size: 1.125rem;
1299
+ font-weight: 600;
1300
+ color: $text-primary;
1301
+ }
1302
+ }
1303
+
1304
+ .filterGroupOperator {
1305
+ display: flex;
1306
+ align-items: center;
1307
+ gap: 12px;
1308
+
1309
+ label {
1310
+ font-size: 0.875rem;
1311
+ font-weight: 500;
1312
+ color: $text-secondary;
1313
+ }
1314
+ }
1315
+
1316
+ .operatorButtonGroup {
1317
+ display: flex;
1318
+ border-radius: $radius-sm;
1319
+ overflow: hidden;
1320
+ border: 1px solid $border-color;
1321
+ }
1322
+
1323
+ .operatorButton {
1324
+ padding: 8px 16px;
1325
+ background-color: white;
1326
+ border: none;
1327
+ font-size: 0.875rem;
1328
+ font-weight: 500;
1329
+ color: $text-secondary;
1330
+ cursor: pointer;
1331
+ transition: all 0.2s ease;
1332
+ border-right: 1px solid $border-color;
1333
+
1334
+ &:last-child {
1335
+ border-right: none;
1336
+ }
1337
+
1338
+ &:hover {
1339
+ background-color: rgba($primary-color, 0.05);
1340
+ color: $primary-color;
1341
+ }
1342
+
1343
+ &.operatorButtonSelected {
1344
+ background-color: $primary-color;
1345
+ color: white;
1346
+ }
1347
+ }
1348
+
1349
+ .filterGroupActions {
1350
+ display: flex;
1351
+ gap: 12px;
1352
+ align-items: center;
1353
+ }
1354
+
1355
+ // Filter criteria
1356
+ .filterCriteriaContainer {
1357
+ padding: 20px;
1358
+ }
1359
+
1360
+ .filterCriterion {
1361
+ background-color: $bg-light;
1362
+ border: 1px solid $border-color;
1363
+ border-radius: $radius-md;
1364
+ margin-bottom: 16px;
1365
+ overflow: hidden;
1366
+
1367
+ &:last-child {
1368
+ margin-bottom: 0;
1369
+ }
1370
+ }
1371
+
1372
+ .filterCriterionHeader {
1373
+ padding: 12px 16px;
1374
+ background-color: white;
1375
+ border-bottom: 1px solid $border-color;
1376
+ display: flex;
1377
+ justify-content: space-between;
1378
+ align-items: center;
1379
+
1380
+ h4 {
1381
+ margin: 0;
1382
+ font-size: 0.875rem;
1383
+ font-weight: 500;
1384
+ color: $text-primary;
1385
+ }
1386
+ }
1387
+
1388
+ .filterCriterionFields {
1389
+ padding: 16px;
1390
+ display: grid;
1391
+ grid-template-columns: 2fr 1fr 2fr;
1392
+ gap: 16px;
1393
+ align-items: end;
1394
+
1395
+ @media (max-width: 768px) {
1396
+ grid-template-columns: 1fr;
1397
+ gap: 12px;
1398
+ }
1399
+ }
1400
+
1401
+ .filterField {
1402
+ display: flex;
1403
+ flex-direction: column;
1404
+ gap: 4px;
1405
+
1406
+ label {
1407
+ font-size: 0.75rem;
1408
+ font-weight: 500;
1409
+ color: $text-secondary;
1410
+ text-transform: uppercase;
1411
+ letter-spacing: 0.5px;
1412
+ }
1413
+ }
1414
+
1415
+ .filterSelect {
1416
+ padding: 8px 12px;
1417
+ border: 1px solid $border-color;
1418
+ border-radius: $radius-sm;
1419
+ background-color: white;
1420
+ font-size: 0.875rem;
1421
+ color: $text-primary;
1422
+ cursor: pointer;
1423
+
1424
+ &:focus {
1425
+ outline: none;
1426
+ border-color: $primary-color;
1427
+ box-shadow: 0 0 0 2px rgba($primary-color, 0.1);
1428
+ }
1429
+ }
1430
+
1431
+ .filterInput {
1432
+ padding: 8px 12px;
1433
+ border: 1px solid $border-color;
1434
+ border-radius: $radius-sm;
1435
+ font-size: 0.875rem;
1436
+ color: $text-primary;
1437
+
1438
+ &:focus {
1439
+ outline: none;
1440
+ border-color: $primary-color;
1441
+ box-shadow: 0 0 0 2px rgba($primary-color, 0.1);
1442
+ }
1443
+
1444
+ &::placeholder {
1445
+ color: $text-muted;
1446
+ }
1447
+ }
1448
+
1449
+ .removeJoinBtn {
1450
+ background: none;
1451
+ border: none;
1452
+ color: $danger-color;
1453
+ font-size: 1.25rem;
1454
+ cursor: pointer;
1455
+ padding: 4px 8px;
1456
+ border-radius: $radius-sm;
1457
+ transition: all 0.2s ease;
1458
+ flex-shrink: 0;
1459
+
1460
+ &:hover {
1461
+ background-color: rgba($danger-color, 0.1);
1462
+ }
1463
+ }
1464
+
1465
+ .emptyFilterGroup {
1466
+ padding: 40px 20px;
1467
+ text-align: center;
1468
+ color: $text-secondary;
1469
+ background-color: $bg-lighter;
1470
+
1471
+ p {
1472
+ margin: 0;
1473
+ font-style: italic;
1474
+ }
1475
+ }
1476
+ }
1477
+
1478
+ // Preview section
1479
+ .previewSection {
1480
+ .previewActions {
1481
+ margin-bottom: 24px;
1482
+ text-align: center;
1483
+ }
1484
+
1485
+ .resultSummary {
1486
+ display: flex;
1487
+ align-items: center;
1488
+ justify-content: center;
1489
+ gap: 8px;
1490
+ padding: 16px;
1491
+ background-color: rgba($success-color, 0.1);
1492
+ border-radius: $radius-md;
1493
+ margin-bottom: 24px;
1494
+ font-size: 1rem;
1495
+ font-weight: 500;
1496
+ color: $success-color;
1497
+
1498
+ svg {
1499
+ color: $success-color;
1500
+ }
1501
+ }
1502
+
1503
+ .gridContainer {
1504
+ margin-bottom: 32px;
1505
+ border: 1px solid $border-color;
1506
+ border-radius: $radius-md;
1507
+ overflow: hidden;
1508
+ }
1509
+
1510
+ .exportOptions {
1511
+ text-align: center;
1512
+
1513
+ h3 {
1514
+ margin: 0 0 16px 0;
1515
+ font-size: 1.125rem;
1516
+ font-weight: 600;
1517
+ color: $text-primary;
1518
+ }
1519
+ }
1520
+
1521
+ .exportButtons {
1522
+ display: flex;
1523
+ justify-content: center;
1524
+ gap: 12px;
1525
+ }
1526
+ }
1527
+
1528
+ // Loading state
1529
+ .loading {
1530
+ text-align: center;
1531
+ padding: 40px;
1532
+ font-size: 1rem;
1533
+ color: $text-secondary;
1534
+ }
1535
+
1536
+ // Buttons
1537
+ .btn {
1538
+ display: inline-flex;
1539
+ align-items: center;
1540
+ gap: 8px;
1541
+ padding: 10px 20px;
1542
+ border: none;
1543
+ border-radius: $radius-md;
1544
+ font-size: 0.875rem;
1545
+ font-weight: 500;
1546
+ cursor: pointer;
1547
+ transition: all 0.2s ease;
1548
+ text-decoration: none;
1549
+
1550
+ &:disabled {
1551
+ opacity: 0.5;
1552
+ cursor: not-allowed;
1553
+ }
1554
+
1555
+ svg {
1556
+ width: 16px;
1557
+ height: 16px;
1558
+ }
1559
+ }
1560
+
1561
+ .btnPrimary {
1562
+ background-color: $primary-color;
1563
+ color: white;
1564
+
1565
+ &:hover:not(:disabled) {
1566
+ background-color: $primary-hover;
1567
+ box-shadow: $shadow-md;
1568
+ }
1569
+ }
1570
+
1571
+ .btnSecondary {
1572
+ background-color: $secondary-color;
1573
+ color: white;
1574
+
1575
+ &:hover:not(:disabled) {
1576
+ background-color: color.scale($secondary-color, $lightness: -20%);
1577
+ box-shadow: $shadow-md;
1578
+ }
1579
+ }
1580
+
1581
+ .btnSuccess {
1582
+ background-color: $success-color;
1583
+ color: white;
1584
+
1585
+ &:hover:not(:disabled) {
1586
+ background-color: color.scale($success-color, $lightness: -20%);
1587
+ box-shadow: $shadow-md;
1588
+ }
1589
+ }
1590
+
1591
+ // Advanced mode placeholder
1592
+ .advancedMode {
1593
+ background-color: white;
1594
+ border-radius: $radius-lg;
1595
+ padding: 40px;
1596
+ text-align: center;
1597
+ box-shadow: $shadow-sm;
1598
+
1599
+ p {
1600
+ font-size: 1rem;
1601
+ color: $text-secondary;
1602
+ }
1603
+ }
1604
+
1605
+ // Relationships section
1606
+ .relationshipsSection {
1607
+ .currentJoins {
1608
+ margin-bottom: 24px;
1609
+
1610
+ h3 {
1611
+ margin: 0 0 16px 0;
1612
+ font-size: 1.125rem;
1613
+ font-weight: 600;
1614
+ color: $text-primary;
1615
+ }
1616
+ }
1617
+
1618
+ .joinItem {
1619
+ display: flex;
1620
+ align-items: center;
1621
+ justify-content: space-between;
1622
+ padding: 12px 16px;
1623
+ background-color: rgba($success-color, 0.05);
1624
+ border: 1px solid rgba($success-color, 0.2);
1625
+ border-radius: $radius-md;
1626
+ margin-bottom: 8px;
1627
+
1628
+ .joinInfo {
1629
+ flex: 1;
1630
+
1631
+ .joinDescription {
1632
+ display: block;
1633
+ font-weight: 500;
1634
+ color: $text-primary;
1635
+ margin-bottom: 4px;
1636
+ }
1637
+
1638
+ .joinDetails {
1639
+ display: block;
1640
+ font-size: 0.875rem;
1641
+ color: $text-secondary;
1642
+ }
1643
+ }
1644
+
1645
+ .removeJoinBtn {
1646
+ background: none;
1647
+ border: none;
1648
+ color: $danger-color;
1649
+ font-size: 1.25rem;
1650
+ cursor: pointer;
1651
+ padding: 4px 8px;
1652
+ border-radius: $radius-sm;
1653
+ transition: all 0.2s ease;
1654
+
1655
+ &:hover {
1656
+ background-color: rgba($danger-color, 0.1);
1657
+ }
1658
+ }
1659
+ }
1660
+
1661
+ .suggestedJoins {
1662
+ margin-bottom: 24px;
1663
+
1664
+ h3 {
1665
+ margin: 0 0 8px 0;
1666
+ font-size: 1.125rem;
1667
+ font-weight: 600;
1668
+ color: $text-primary;
1669
+ }
1670
+
1671
+ p {
1672
+ margin: 0 0 16px 0;
1673
+ color: $text-secondary;
1674
+ }
1675
+ }
1676
+
1677
+ .suggestionCard {
1678
+ display: flex;
1679
+ align-items: center;
1680
+ justify-content: space-between;
1681
+ padding: 16px;
1682
+ background-color: white;
1683
+ border: 2px solid $border-color;
1684
+ border-radius: $radius-md;
1685
+ margin-bottom: 12px;
1686
+ transition: all 0.2s ease;
1687
+
1688
+ &:hover {
1689
+ border-color: $primary-color;
1690
+ box-shadow: $shadow-sm;
1691
+ }
1692
+
1693
+ .suggestionInfo {
1694
+ flex: 1;
1695
+
1696
+ .suggestionTitle {
1697
+ display: flex;
1698
+ align-items: center;
1699
+ gap: 8px;
1700
+ margin-bottom: 8px;
1701
+
1702
+ span {
1703
+ font-weight: 500;
1704
+ color: $text-primary;
1705
+ }
1706
+
1707
+ .confidenceRating {
1708
+ margin-left: auto;
1709
+ font-size: 0.875rem;
1710
+ }
1711
+
1712
+ svg {
1713
+ color: $primary-color;
1714
+ }
1715
+ }
1716
+
1717
+ .suggestionDescription {
1718
+ margin: 0;
1719
+ font-size: 0.875rem;
1720
+ color: $text-secondary;
1721
+ }
1722
+ }
1723
+ }
1724
+
1725
+ .currentFilters {
1726
+ margin-bottom: 24px;
1727
+
1728
+ h3 {
1729
+ margin: 0 0 16px 0;
1730
+ font-size: 1.125rem;
1731
+ font-weight: 600;
1732
+ color: $text-primary;
1733
+ }
1734
+ }
1735
+
1736
+ // Manual join section styling
1737
+ .manualJoinSection {
1738
+ margin-bottom: 24px;
1739
+ padding: 20px;
1740
+ background-color: $bg-lighter;
1741
+ border-radius: $radius-md;
1742
+ border: 1px solid $border-color;
1743
+
1744
+ h3 {
1745
+ margin: 0 0 8px 0;
1746
+ font-size: 1.125rem;
1747
+ font-weight: 600;
1748
+ color: $text-primary;
1749
+ }
1750
+
1751
+ p {
1752
+ margin: 0 0 16px 0;
1753
+ color: $text-secondary;
1754
+ font-size: 0.875rem;
1755
+ }
1756
+ }
1757
+
1758
+ .manualJoinForm {
1759
+ background-color: white;
1760
+ padding: 20px;
1761
+ border-radius: $radius-md;
1762
+ border: 1px solid $border-color;
1763
+ margin-top: 16px;
1764
+ }
1765
+
1766
+ .manualJoinGrid {
1767
+ display: grid;
1768
+ grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));
1769
+ gap: 16px;
1770
+ margin-bottom: 20px;
1771
+ }
1772
+
1773
+ .manualJoinField {
1774
+ display: flex;
1775
+ flex-direction: column;
1776
+ gap: 6px;
1777
+
1778
+ label {
1779
+ font-size: 0.875rem;
1780
+ font-weight: 500;
1781
+ color: $text-secondary;
1782
+ }
1783
+
1784
+ select {
1785
+ padding: 8px 12px;
1786
+ border: 1px solid $border-color;
1787
+ border-radius: $radius-sm;
1788
+ background-color: white;
1789
+ font-size: 0.875rem;
1790
+ color: $text-primary;
1791
+
1792
+ &:focus {
1793
+ outline: none;
1794
+ border-color: $primary-color;
1795
+ box-shadow: 0 0 0 2px rgba($primary-color, 0.1);
1796
+ }
1797
+
1798
+ &:disabled {
1799
+ background-color: $bg-light;
1800
+ color: $text-muted;
1801
+ cursor: not-allowed;
1802
+ }
1803
+ }
1804
+ }
1805
+
1806
+ .manualJoinActions {
1807
+ display: flex;
1808
+ gap: 12px;
1809
+ justify-content: flex-end;
1810
+ padding-top: 16px;
1811
+ border-top: 1px solid $border-color;
1812
+ }
1813
+
1814
+ .filterItem {
1815
+ display: flex;
1816
+ align-items: center;
1817
+ justify-content: space-between;
1818
+ padding: 12px 16px;
1819
+ background-color: rgba($info-color, 0.05);
1820
+ border: 1px solid rgba($info-color, 0.2);
1821
+ border-radius: $radius-md;
1822
+ margin-bottom: 8px;
1823
+
1824
+ .filterInfo {
1825
+ flex: 1;
1826
+
1827
+ .filterDescription {
1828
+ font-weight: 500;
1829
+ color: $text-primary;
1830
+ }
1831
+ }
1832
+
1833
+ .removeFilterBtn {
1834
+ background: none;
1835
+ border: none;
1836
+ color: $danger-color;
1837
+ font-size: 1.25rem;
1838
+ cursor: pointer;
1839
+ padding: 4px 8px;
1840
+ border-radius: $radius-sm;
1841
+ transition: all 0.2s ease;
1842
+
1843
+ &:hover {
1844
+ background-color: rgba($danger-color, 0.1);
1845
+ }
1846
+ }
1847
+ }
1848
+
1849
+ .reportActions {
1850
+ display: grid;
1851
+ grid-template-columns: 1fr 1fr;
1852
+ gap: 24px;
1853
+ margin-top: 32px;
1854
+
1855
+ .saveSection,
1856
+ .exportOptions {
1857
+ background-color: $bg-light;
1858
+ border-radius: $radius-md;
1859
+ padding: 20px;
1860
+ border: 1px solid $border-color;
1861
+
1862
+ h3 {
1863
+ margin: 0 0 8px 0;
1864
+ font-size: 1.125rem;
1865
+ font-weight: 600;
1866
+ color: $text-primary;
1867
+ }
1868
+
1869
+ p {
1870
+ margin: 0 0 16px 0;
1871
+ font-size: 0.875rem;
1872
+ color: $text-secondary;
1873
+ }
1874
+ }
1875
+
1876
+ .saveButtons {
1877
+ display: flex;
1878
+ gap: 12px;
1879
+ flex-wrap: wrap;
1880
+ }
1881
+ }
1882
+ }
1883
+
1884
+ // Responsive design
1885
+ @media (max-width: 768px) {
1886
+ .header {
1887
+ flex-direction: column;
1888
+ gap: 16px;
1889
+ align-items: stretch;
1890
+ }
1891
+
1892
+ .headerLeft,
1893
+ .headerRight {
1894
+ justify-content: center;
1895
+ }
1896
+
1897
+ .wizardProgress {
1898
+ overflow-x: auto;
1899
+ padding-bottom: 20px;
1900
+
1901
+ &::before {
1902
+ display: none;
1903
+ }
1904
+ }
1905
+
1906
+ .wizardStep {
1907
+ min-width: 120px;
1908
+
1909
+ .stepDescription {
1910
+ display: none;
1911
+ }
1912
+ }
1913
+
1914
+ .tableGrid,
1915
+ .columnList {
1916
+ grid-template-columns: 1fr;
1917
+ }
1918
+
1919
+ .exportButtons {
1920
+ flex-direction: column;
1921
+ align-items: center;
1922
+ }
1923
+ }
1924
+
1925
+ // Human-friendly JSON styling (from original GenericReport)
1926
+ .humanJsonContainer {
1927
+ display: flex;
1928
+ flex-direction: column;
1929
+ gap: 3px;
1930
+ padding: 10px 12px;
1931
+ background-color: #f9fafb;
1932
+ border: 1px solid #e5e7eb;
1933
+ border-radius: $radius-sm;
1934
+ box-shadow: 0 1px 3px rgba(0, 0, 0, 0.05);
1935
+ font-size: 0.9rem;
1936
+ margin: 2px 0;
1937
+ }
1938
+
1939
+ .humanJsonRow {
1940
+ display: flex;
1941
+ align-items: center;
1942
+ padding: 5px 2px;
1943
+ line-height: 1.4;
1944
+ border-radius: 4px;
1945
+ transition: background-color 0.15s ease;
1946
+ min-height: 28px;
1947
+ word-break: break-word;
1948
+ overflow-wrap: break-word;
1949
+
1950
+ &:hover {
1951
+ background-color: rgba(0, 0, 0, 0.03);
1952
+ }
1953
+ }
1954
+
1955
+ .humanJsonKey {
1956
+ font-weight: 600;
1957
+ color: #2563eb; // Blue
1958
+ margin-right: 12px;
1959
+ min-width: 120px;
1960
+ flex: 0 0 auto;
1961
+ padding-left: 3px;
1962
+ }
1963
+
1964
+ .humanJsonValue {
1965
+ flex: 1;
1966
+ word-break: break-word;
1967
+ padding-right: 5px;
1968
+ color: #1f2937;
1969
+ font-weight: 500;
1970
+ }
1971
+
1972
+ // Pagination info styling
1973
+ .paginationInfo {
1974
+ display: flex;
1975
+ justify-content: center;
1976
+ align-items: center;
1977
+ padding: 12px 16px;
1978
+ background-color: $bg-light;
1979
+ border-top: 1px solid $border-color;
1980
+ font-size: 0.875rem;
1981
+ color: $text-secondary;
1982
+ font-weight: 500;
1983
+ }
1984
+
1985
+ // Grid container enhancements for JSON content
1986
+ .gridContainer {
1987
+ // Ensure the grid can handle dynamic row heights
1988
+ :global(.InovuaReactDataGrid) {
1989
+ // Allow rows to expand for JSON content
1990
+ .InovuaReactDataGrid__row {
1991
+ min-height: 40px;
1992
+ // Allow rows to expand to fit content
1993
+ height: auto !important;
1994
+
1995
+ // JSON cell styling
1996
+ .InovuaReactDataGrid__cell {
1997
+ // Ensure proper vertical alignment for JSON content
1998
+ display: flex;
1999
+ align-items: flex-start;
2000
+ padding: 8px 12px;
2001
+
2002
+ // Handle text overflow for JSON content
2003
+ overflow: visible;
2004
+ // Allow cells to expand vertically
2005
+ height: auto !important;
2006
+
2007
+ // JSON content wrapper
2008
+ > div {
2009
+ width: 100%;
2010
+ // Remove height restrictions for JSON content
2011
+ height: auto;
2012
+
2013
+ // JSON container should expand fully
2014
+ .humanJsonContainer {
2015
+ // Remove any height restrictions
2016
+ max-height: none;
2017
+ overflow: visible;
2018
+ }
2019
+ }
2020
+ }
2021
+ }
2022
+
2023
+ // Ensure header alignment
2024
+ .InovuaReactDataGrid__header {
2025
+ .InovuaReactDataGrid__header-cell {
2026
+ display: flex;
2027
+ align-items: center;
2028
+ padding: 8px 12px;
2029
+ }
2030
+ }
2031
+ }
2032
+ }