senangwebs-tour 1.0.2

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,1002 @@
1
+ /* SenangWebs Tour Editor - Main Styles */
2
+
3
+ * {
4
+ margin: 0;
5
+ padding: 0;
6
+ box-sizing: border-box;
7
+ }
8
+
9
+ :root {
10
+ --bg-primary: #09090B; /* darker */
11
+ --bg-secondary: #18181B; /* dark (brand.dark) */
12
+ --bg-tertiary: #1F1F22; /* slightly lighter for panels */
13
+ --bg-hover: #232426; /* hover state for dark surfaces */
14
+ --border-color: #2A2A2D; /* subtle border on dark bg */
15
+ --text-primary: #FFFFFF; /* readable on dark backgrounds */
16
+ --text-secondary: #A7CFC6; /* soft mint/teal for secondary text */
17
+ --text-muted: #7A8086; /* muted gray for helper text */
18
+ --accent-primary: #00FF99; /* brand primary */
19
+ --accent-hover: #00D882; /* ~15% darker than primary for hover */
20
+ --accent-cyan: #00D1E6; /* cyan/teal accent (mix of primary + blue tone) */
21
+ --success: #006045; /* green success tone (derived from primary) */
22
+ --danger: #EF4444; /* standard danger red */
23
+ --warning: #F59E0B; /* standard warning orange */
24
+ }
25
+
26
+ body {
27
+ font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif;
28
+ background: var(--bg-primary);
29
+ color: var(--text-primary);
30
+ height: 100vh;
31
+ overflow: hidden;
32
+ }
33
+
34
+ /* Header */
35
+ .editor-header {
36
+ background: var(--bg-secondary);
37
+ border-bottom: 1px solid var(--border-color);
38
+ padding: 12px 20px;
39
+ display: flex;
40
+ align-items: center;
41
+ justify-content: space-between;
42
+ height: 60px;
43
+ }
44
+
45
+ .header-left {
46
+ display: flex;
47
+ align-items: center;
48
+ gap: 16px;
49
+ }
50
+
51
+ .logo {
52
+ display: flex;
53
+ align-items: center;
54
+ gap: 8px;
55
+ font-size: 18px;
56
+ font-weight: 600;
57
+ }
58
+
59
+ .logo-icon {
60
+ width: 24px;
61
+ height: 24px;
62
+ background: linear-gradient(135deg, var(--accent-primary), var(--accent-cyan));
63
+ border-radius: 4px;
64
+ }
65
+
66
+ .project-info {
67
+ display: flex;
68
+ align-items: center;
69
+ gap: 8px;
70
+ padding-left: 16px;
71
+ border-left: 1px solid var(--border-color);
72
+ }
73
+
74
+ .project-label {
75
+ color: var(--text-muted);
76
+ font-size: 12px;
77
+ text-transform: uppercase;
78
+ letter-spacing: 0.5px;
79
+ }
80
+
81
+ .project-name {
82
+ color: var(--text-primary);
83
+ font-size: 14px;
84
+ font-weight: 500;
85
+ }
86
+
87
+ .header-actions {
88
+ display: flex;
89
+ align-items: center;
90
+ gap: 8px;
91
+ }
92
+
93
+ .btn {
94
+ padding: 8px 16px;
95
+ border: none;
96
+ border-radius: 6px;
97
+ font-size: 14px;
98
+ font-weight: 500;
99
+ cursor: pointer;
100
+ transition: all 0.2s;
101
+ display: flex;
102
+ align-items: center;
103
+ gap: 6px;
104
+ }
105
+
106
+ .btn-secondary {
107
+ background: var(--bg-tertiary);
108
+ color: var(--text-primary);
109
+ border: 1px solid var(--border-color);
110
+ }
111
+
112
+ .btn-secondary:hover {
113
+ background: var(--bg-hover);
114
+ }
115
+
116
+ .btn-primary {
117
+ background: var(--accent-primary);
118
+ color: var(--bg-primary);
119
+ }
120
+
121
+ .btn-primary:hover {
122
+ background: var(--accent-hover);
123
+ }
124
+
125
+ .btn-success {
126
+ background: var(--success);
127
+ color: white;
128
+ }
129
+
130
+ .btn-success:hover {
131
+ opacity: 0.9;
132
+ }
133
+
134
+ .btn-icon {
135
+ width: 16px;
136
+ height: 16px;
137
+ }
138
+
139
+ /* Main Layout */
140
+ .editor-main {
141
+ display: flex;
142
+ height: calc(100vh - 60px);
143
+ position: relative;
144
+ }
145
+
146
+ /* Sidebar */
147
+ .sidebar {
148
+ width: 280px;
149
+ background: var(--bg-secondary);
150
+ border-right: 1px solid var(--border-color);
151
+ display: flex;
152
+ flex-direction: column;
153
+ }
154
+
155
+ .sidebar-header {
156
+ padding: 12px 16px;
157
+ border-bottom: 1px solid var(--border-color);
158
+ display: flex;
159
+ align-items: center;
160
+ justify-content: space-between;
161
+ }
162
+
163
+ .sidebar-title {
164
+ font-size: 14px;
165
+ font-weight: 600;
166
+ text-transform: uppercase;
167
+ letter-spacing: 0.5px;
168
+ color: var(--text-secondary);
169
+ }
170
+
171
+ .btn-add {
172
+ background: var(--accent-primary);
173
+ color: var(--bg-primary);
174
+ padding: 8px 16px;
175
+ border: none;
176
+ border-radius: 6px;
177
+ font-size: 14px;
178
+ font-weight: 500;
179
+ cursor: pointer;
180
+ transition: all 0.2s;
181
+ display: flex;
182
+ align-items: center;
183
+ gap: 6px;
184
+ }
185
+
186
+ .btn-add:hover {
187
+ background: var(--accent-hover);
188
+ }
189
+
190
+ .scenes-list {
191
+ flex: 1;
192
+ overflow-y: auto;
193
+ padding: 12px;
194
+ }
195
+
196
+ .scene-card {
197
+ background: var(--bg-tertiary);
198
+ border: 2px solid transparent;
199
+ border-radius: 8px;
200
+ margin-bottom: 12px;
201
+ cursor: pointer;
202
+ transition: all 0.2s;
203
+ position: relative;
204
+ overflow: hidden;
205
+ }
206
+
207
+ .scene-card img {
208
+ width: 100%;
209
+ aspect-ratio: 2/1;
210
+ object-fit: cover;
211
+ }
212
+
213
+ .scene-card:hover {
214
+ border-color: var(--border-color);
215
+ }
216
+
217
+ .scene-card.active {
218
+ border-color: var(--accent-primary);
219
+ background: rgba(59, 130, 246, 0.1);
220
+ }
221
+
222
+ .scene-thumbnail {
223
+ width: 100%;
224
+ height: 120px;
225
+ background: var(--bg-primary);
226
+ border-radius: 4px;
227
+ margin-bottom: 8px;
228
+ overflow: hidden;
229
+ position: relative;
230
+ }
231
+
232
+ .scene-thumbnail img {
233
+ width: 100%;
234
+ height: 100%;
235
+ object-fit: cover;
236
+ }
237
+
238
+ .scene-info {
239
+ display: flex;
240
+ flex-direction: column;
241
+ gap: 4px;
242
+ margin: 6px 8px;
243
+ }
244
+
245
+ .scene-name {
246
+ font-size: 14px;
247
+ font-weight: 500;
248
+ color: var(--text-primary);
249
+ }
250
+
251
+ .scene-meta {
252
+ font-size: 12px;
253
+ color: var(--text-muted);
254
+ }
255
+
256
+ .scene-actions {
257
+ display: flex;
258
+ gap: 4px;
259
+ margin: 6px 8px;
260
+ }
261
+
262
+ .btn-icon-small {
263
+ padding: 4px 8px;
264
+ background: var(--bg-hover);
265
+ border: 1px solid var(--border-color);
266
+ border-radius: 4px;
267
+ cursor: pointer;
268
+ font-size: 11px;
269
+ color: var(--text-secondary);
270
+ transition: all 0.2s;
271
+ }
272
+
273
+ .btn-icon-small:hover {
274
+ background: var(--bg-tertiary);
275
+ color: var(--text-primary);
276
+ }
277
+
278
+ .btn-icon {
279
+ width: 32px;
280
+ height: 32px;
281
+ background: transparent;
282
+ border: 1px solid var(--border-color);
283
+ border-radius: 4px;
284
+ cursor: pointer;
285
+ font-size: 12px;
286
+ color: var(--text-secondary);
287
+ transition: all 0.2s;
288
+ }
289
+
290
+ .btn-icon:hover {
291
+ background: var(--danger);
292
+ color: white;
293
+ border-color: var(--danger);
294
+ }
295
+
296
+ .drag-handle {
297
+ position: absolute;
298
+ top: 8px;
299
+ right: 8px;
300
+ cursor: move;
301
+ padding: 8px;
302
+ background: rgba(0, 0, 0, 0.75);
303
+ border-radius: 4px;
304
+ z-index: 10;
305
+ cursor: move;
306
+ width: 32px;
307
+ height: 32px;
308
+ display: flex;
309
+ align-items: center;
310
+ justify-content: center;
311
+ fill: var(--text-secondary);
312
+ }
313
+
314
+ /* Canvas Area */
315
+ .canvas-area {
316
+ flex: 1;
317
+ display: flex;
318
+ flex-direction: column;
319
+ background: var(--bg-primary);
320
+ }
321
+
322
+ .canvas-area.preview-active {
323
+ position: absolute;
324
+ top: 0px;
325
+ left: 0px;
326
+ width: 100vw;
327
+ height: 100%;
328
+ z-index: 100;
329
+ }
330
+
331
+ .toolbar {
332
+ background: var(--bg-secondary);
333
+ border-bottom: 1px solid var(--border-color);
334
+ padding: 12px 16px;
335
+ display: flex;
336
+ align-items: center;
337
+ justify-content: center;
338
+ }
339
+
340
+ .toolbar-tabs {
341
+ display: flex;
342
+ width: 100%;
343
+ justify-content: space-evenly;
344
+ gap: 4px;
345
+ }
346
+
347
+ .tab {
348
+ padding: 8px 16px;
349
+ background: transparent;
350
+ border: none;
351
+ border-radius: 6px;
352
+ color: var(--text-secondary);
353
+ font-size: 14px;
354
+ font-weight: 500;
355
+ cursor: pointer;
356
+ transition: all 0.2s;
357
+ }
358
+
359
+ .tab:hover {
360
+ background: var(--bg-tertiary);
361
+ color: var(--text-primary);
362
+ }
363
+
364
+ .tab.active {
365
+ background: var(--accent-primary);
366
+ color: var(--bg-primary);
367
+ }
368
+
369
+ .toolbar-controls {
370
+ display: flex;
371
+ gap: 8px;
372
+ align-items: center;
373
+ }
374
+
375
+ .zoom-control {
376
+ display: flex;
377
+ align-items: center;
378
+ gap: 8px;
379
+ padding: 4px 12px;
380
+ background: var(--bg-tertiary);
381
+ border-radius: 6px;
382
+ border: 1px solid var(--border-color);
383
+ }
384
+
385
+ .zoom-btn {
386
+ background: none;
387
+ border: none;
388
+ color: var(--text-secondary);
389
+ cursor: pointer;
390
+ padding: 4px;
391
+ font-size: 16px;
392
+ transition: color 0.2s;
393
+ }
394
+
395
+ .zoom-btn:hover {
396
+ color: var(--text-primary);
397
+ }
398
+
399
+ .zoom-value {
400
+ font-size: 12px;
401
+ color: var(--text-secondary);
402
+ min-width: 40px;
403
+ text-align: center;
404
+ }
405
+
406
+ .canvas-container {
407
+ flex: 1;
408
+ display: flex;
409
+ align-items: center;
410
+ justify-content: center;
411
+ padding: 20px;
412
+ overflow: hidden;
413
+ position: relative;
414
+ }
415
+
416
+ .preview-container {
417
+ flex: 1;
418
+ width: 100%;
419
+ height: 100%;
420
+ position: relative;
421
+ }
422
+
423
+ .preview-area {
424
+ width: 100%;
425
+ height: 100%;
426
+ position: relative;
427
+ }
428
+
429
+ #preview {
430
+ width: 100%;
431
+ height: 100%;
432
+ }
433
+
434
+ .preview-empty {
435
+ display: flex;
436
+ flex-direction: column;
437
+ align-items: center;
438
+ justify-content: center;
439
+ height: 100%;
440
+ color: var(--text-muted);
441
+ }
442
+
443
+ .preview-empty p {
444
+ margin: 4px 0;
445
+ }
446
+
447
+ .canvas-viewport {
448
+ width: 100%;
449
+ max-width: 1200px;
450
+ aspect-ratio: 16/9;
451
+ background: var(--bg-secondary);
452
+ border-radius: 8px;
453
+ border: 1px solid var(--border-color);
454
+ position: relative;
455
+ overflow: hidden;
456
+ }
457
+
458
+ .canvas-viewport img {
459
+ width: 100%;
460
+ height: 100%;
461
+ object-fit: cover;
462
+ }
463
+
464
+ .hotspot-marker {
465
+ position: absolute;
466
+ width: 40px;
467
+ height: 40px;
468
+ border-radius: 50%;
469
+ border: 3px solid white;
470
+ cursor: pointer;
471
+ transition: all 0.2s;
472
+ box-shadow: 0 2px 8px rgba(0, 0, 0, 0.3);
473
+ }
474
+
475
+ .hotspot-marker:hover {
476
+ transform: scale(1.2);
477
+ box-shadow: 0 4px 12px rgba(0, 0, 0, 0.5);
478
+ }
479
+
480
+ .hotspot-marker.selected {
481
+ border-width: 4px;
482
+ box-shadow: 0 0 0 4px rgba(255, 255, 255, 0.3);
483
+ }
484
+
485
+ .empty-state {
486
+ text-align: center;
487
+ padding: 40px 20px;
488
+ color: var(--text-muted);
489
+ }
490
+
491
+ .empty-state p {
492
+ margin: 8px 0;
493
+ }
494
+
495
+ .empty-state .hint {
496
+ font-size: 12px;
497
+ color: var(--text-muted);
498
+ }
499
+
500
+ /* Properties Panel */
501
+ .properties-panel {
502
+ width: 320px;
503
+ background: var(--bg-secondary);
504
+ border-left: 1px solid var(--border-color);
505
+ display: flex;
506
+ flex-direction: column;
507
+ }
508
+
509
+ .panel-header {
510
+ padding: 16px;
511
+ border-bottom: 1px solid var(--border-color);
512
+ }
513
+
514
+ .panel-title {
515
+ font-size: 14px;
516
+ font-weight: 600;
517
+ text-transform: uppercase;
518
+ letter-spacing: 0.5px;
519
+ color: var(--text-secondary);
520
+ }
521
+
522
+ .panel-content {
523
+ flex: 1;
524
+ overflow-y: auto;
525
+ padding: 16px;
526
+ }
527
+
528
+ .form-group {
529
+ margin-bottom: 20px;
530
+ }
531
+
532
+ .form-label {
533
+ display: block;
534
+ font-size: 12px;
535
+ font-weight: 500;
536
+ color: var(--text-secondary);
537
+ margin-bottom: 8px;
538
+ text-transform: uppercase;
539
+ letter-spacing: 0.5px;
540
+ }
541
+
542
+ .form-input {
543
+ width: 100%;
544
+ padding: 10px 12px;
545
+ background: var(--bg-tertiary);
546
+ border: 1px solid var(--border-color);
547
+ border-radius: 6px;
548
+ color: var(--text-primary);
549
+ font-size: 14px;
550
+ transition: all 0.2s;
551
+ }
552
+
553
+ .form-input:focus {
554
+ outline: none;
555
+ border-color: var(--accent-primary);
556
+ background: var(--bg-primary);
557
+ }
558
+
559
+ .form-textarea {
560
+ min-height: 80px;
561
+ resize: vertical;
562
+ font-family: inherit;
563
+ }
564
+
565
+ .form-select {
566
+ width: 100%;
567
+ padding: 10px 12px;
568
+ background: var(--bg-tertiary);
569
+ border: 1px solid var(--border-color);
570
+ border-radius: 6px;
571
+ color: var(--text-primary);
572
+ font-size: 14px;
573
+ cursor: pointer;
574
+ }
575
+
576
+ .form-checkbox {
577
+ display: flex;
578
+ align-items: center;
579
+ gap: 8px;
580
+ cursor: pointer;
581
+ }
582
+
583
+ .form-checkbox input {
584
+ width: 18px;
585
+ height: 18px;
586
+ cursor: pointer;
587
+ }
588
+
589
+ .form-checkbox label {
590
+ font-size: 14px;
591
+ color: var(--text-primary);
592
+ cursor: pointer;
593
+ }
594
+
595
+ .color-picker-group {
596
+ display: flex;
597
+ gap: 12px;
598
+ align-items: center;
599
+ }
600
+
601
+ .color-preview {
602
+ width: 40px;
603
+ height: 40px;
604
+ border-radius: 6px;
605
+ border: 2px solid var(--border-color);
606
+ cursor: pointer;
607
+ }
608
+
609
+ .color-input {
610
+ flex: 1;
611
+ }
612
+
613
+ .position-grid {
614
+ display: grid;
615
+ grid-template-columns: repeat(3, 1fr);
616
+ gap: 8px;
617
+ }
618
+
619
+ .position-input {
620
+ padding: 8px;
621
+ background: var(--bg-tertiary);
622
+ border: 1px solid var(--border-color);
623
+ border-radius: 4px;
624
+ color: var(--text-primary);
625
+ font-size: 12px;
626
+ text-align: center;
627
+ }
628
+
629
+ .hotspot-controls {
630
+ display: flex;
631
+ gap: 8px;
632
+ margin-bottom: 20px;
633
+ justify-content: space-between;
634
+ }
635
+
636
+ .hotspot-list {
637
+ display: flex;
638
+ flex-direction: column;
639
+ gap: 8px;
640
+ margin-bottom: 16px;
641
+ }
642
+
643
+ .hotspot-item {
644
+ display: flex;
645
+ align-items: center;
646
+ gap: 12px;
647
+ padding: 12px;
648
+ background: var(--bg-tertiary);
649
+ border: 2px solid transparent;
650
+ border-radius: 6px;
651
+ cursor: pointer;
652
+ transition: all 0.2s;
653
+ }
654
+
655
+ .hotspot-item:hover {
656
+ border-color: var(--border-color);
657
+ }
658
+
659
+ .hotspot-item.active {
660
+ border-color: var(--accent-primary);
661
+ background: rgba(59, 130, 246, 0.1);
662
+ }
663
+
664
+ .hotspot-color {
665
+ width: 24px;
666
+ height: 24px;
667
+ border-radius: 4px;
668
+ border: 2px solid var(--border-color);
669
+ flex-shrink: 0;
670
+ }
671
+
672
+ .hotspot-info {
673
+ flex: 1;
674
+ min-width: 0;
675
+ }
676
+
677
+ .hotspot-title {
678
+ font-size: 14px;
679
+ font-weight: 500;
680
+ color: var(--text-primary);
681
+ white-space: nowrap;
682
+ overflow: hidden;
683
+ text-overflow: ellipsis;
684
+ }
685
+
686
+ .hotspot-target {
687
+ font-size: 12px;
688
+ color: var(--text-muted);
689
+ white-space: nowrap;
690
+ overflow: hidden;
691
+ text-overflow: ellipsis;
692
+ }
693
+
694
+ .hotspot-actions {
695
+ display: flex;
696
+ gap: 4px;
697
+ }
698
+
699
+ .btn-delete {
700
+ padding: 4px 8px;
701
+ background: transparent;
702
+ border: 1px solid var(--border-color);
703
+ border-radius: 4px;
704
+ color: var(--danger);
705
+ cursor: pointer;
706
+ font-size: 12px;
707
+ transition: all 0.2s;
708
+ }
709
+
710
+ .btn-delete:hover {
711
+ background: var(--danger);
712
+ color: white;
713
+ }
714
+
715
+ .section {
716
+ margin-bottom: 20px;
717
+ }
718
+
719
+ .section h3 {
720
+ font-size: 14px;
721
+ font-weight: 600;
722
+ color: var(--text-secondary);
723
+ margin-bottom: 16px;
724
+ text-transform: uppercase;
725
+ letter-spacing: 0.5px;
726
+ }
727
+
728
+ .btn-block {
729
+ width: 100%;
730
+ }
731
+
732
+ /* Toast Notification */
733
+ .toast {
734
+ position: fixed;
735
+ bottom: 20px;
736
+ right: 20px;
737
+ background: var(--bg-secondary);
738
+ color: var(--text-primary);
739
+ padding: 12px 20px;
740
+ border-radius: 8px;
741
+ border: 1px solid var(--border-color);
742
+ box-shadow: 0 4px 12px rgba(0, 0, 0, 0.3);
743
+ opacity: 0;
744
+ transform: translateY(20px);
745
+ transition: all 0.3s;
746
+ pointer-events: none;
747
+ z-index: 10000;
748
+ }
749
+
750
+ .toast.show {
751
+ opacity: 1;
752
+ transform: translateY(0);
753
+ pointer-events: auto;
754
+ }
755
+
756
+ .toast.success {
757
+ border-color: var(--success);
758
+ background: rgba(16, 185, 129, 0.1);
759
+ }
760
+
761
+ .toast.error {
762
+ border-color: var(--danger);
763
+ background: rgba(239, 68, 68, 0.1);
764
+ }
765
+
766
+ .toast.info {
767
+ border-color: var(--accent-cyan);
768
+ background: rgba(6, 182, 212, 0.1);
769
+ }
770
+
771
+ /* Modal */
772
+ .modal {
773
+ display: none;
774
+ position: fixed;
775
+ top: 0;
776
+ left: 0;
777
+ width: 100%;
778
+ height: 100%;
779
+ background: rgba(0, 0, 0, 0.7);
780
+ z-index: 9999;
781
+ align-items: center;
782
+ justify-content: center;
783
+ }
784
+
785
+ .modal.show {
786
+ display: flex;
787
+ }
788
+
789
+ .modal-content {
790
+ background: var(--bg-secondary);
791
+ border-radius: 12px;
792
+ border: 1px solid var(--border-color);
793
+ max-width: 600px;
794
+ width: 90%;
795
+ max-height: 90vh;
796
+ overflow: hidden;
797
+ display: flex;
798
+ flex-direction: column;
799
+ }
800
+
801
+ .modal-header {
802
+ padding: 20px;
803
+ border-bottom: 1px solid var(--border-color);
804
+ display: flex;
805
+ align-items: center;
806
+ justify-content: space-between;
807
+ }
808
+
809
+ .modal-header h3 {
810
+ font-size: 18px;
811
+ font-weight: 600;
812
+ color: var(--text-primary);
813
+ }
814
+
815
+ .modal-close {
816
+ background: none;
817
+ border: none;
818
+ color: var(--text-secondary);
819
+ font-size: 24px;
820
+ cursor: pointer;
821
+ padding: 0;
822
+ width: 32px;
823
+ height: 32px;
824
+ display: flex;
825
+ align-items: center;
826
+ justify-content: center;
827
+ border-radius: 4px;
828
+ transition: all 0.2s;
829
+ }
830
+
831
+ .modal-close:hover {
832
+ background: var(--bg-hover);
833
+ color: var(--text-primary);
834
+ }
835
+
836
+ .modal-body {
837
+ padding: 20px;
838
+ overflow-y: auto;
839
+ flex: 1;
840
+ }
841
+
842
+ .modal-body h4 {
843
+ font-size: 16px;
844
+ font-weight: 600;
845
+ margin-top: 20px;
846
+ margin-bottom: 12px;
847
+ color: var(--text-primary);
848
+ }
849
+
850
+ .modal-body h4:first-child {
851
+ margin-top: 0;
852
+ }
853
+
854
+ .modal-body p {
855
+ margin-bottom: 12px;
856
+ line-height: 1.6;
857
+ color: var(--text-secondary);
858
+ }
859
+
860
+ .modal-body ul, .modal-body ol {
861
+ margin-bottom: 12px;
862
+ padding-left: 24px;
863
+ line-height: 1.8;
864
+ color: var(--text-secondary);
865
+ }
866
+
867
+ .modal-body li {
868
+ margin-bottom: 8px;
869
+ }
870
+
871
+ .modal-body kbd {
872
+ background: var(--bg-tertiary);
873
+ border: 1px solid var(--border-color);
874
+ border-radius: 4px;
875
+ padding: 2px 6px;
876
+ font-family: monospace;
877
+ font-size: 12px;
878
+ }
879
+
880
+ .modal-footer {
881
+ padding: 16px 20px;
882
+ border-top: 1px solid var(--border-color);
883
+ display: flex;
884
+ gap: 8px;
885
+ justify-content: flex-end;
886
+ }
887
+
888
+ .export-info {
889
+ background: var(--bg-tertiary);
890
+ border: 1px solid var(--border-color);
891
+ border-radius: 6px;
892
+ padding: 16px;
893
+ margin-bottom: 16px;
894
+ }
895
+
896
+ .export-info p {
897
+ margin-bottom: 8px;
898
+ font-size: 13px;
899
+ }
900
+
901
+ .export-info p:last-child {
902
+ margin-bottom: 0;
903
+ }
904
+
905
+ .export-preview {
906
+ width: 100%;
907
+ height: 200px;
908
+ background: var(--bg-tertiary);
909
+ border: 1px solid var(--border-color);
910
+ border-radius: 6px;
911
+ padding: 12px;
912
+ font-family: monospace;
913
+ font-size: 12px;
914
+ color: var(--text-primary);
915
+ resize: vertical;
916
+ }
917
+
918
+ .btn-active {
919
+ animation: pulse 2s infinite;
920
+ }
921
+
922
+ @keyframes pulse {
923
+ 0%, 100% { opacity: 1; }
924
+ 50% { opacity: 0.7; }
925
+ }
926
+
927
+ .dragging {
928
+ opacity: 0.5;
929
+ }
930
+
931
+ /* Scrollbar Styling */
932
+ ::-webkit-scrollbar {
933
+ width: 8px;
934
+ height: 8px;
935
+ }
936
+
937
+ ::-webkit-scrollbar-track {
938
+ background: var(--bg-primary);
939
+ }
940
+
941
+ ::-webkit-scrollbar-thumb {
942
+ background: var(--bg-tertiary);
943
+ border-radius: 4px;
944
+ }
945
+
946
+ ::-webkit-scrollbar-thumb:hover {
947
+ background: var(--bg-hover);
948
+ }
949
+
950
+ /* Loading Overlay */
951
+ .preview-loading {
952
+ position: absolute;
953
+ top: 0;
954
+ left: 0;
955
+ right: 0;
956
+ bottom: 0;
957
+ background: rgba(9, 9, 11, 0.85);
958
+ backdrop-filter: blur(4px);
959
+ display: flex;
960
+ flex-direction: column;
961
+ align-items: center;
962
+ justify-content: center;
963
+ z-index: 1000;
964
+ transition: opacity 0.3s ease;
965
+ }
966
+
967
+ .preview-loading.hidden {
968
+ opacity: 0;
969
+ pointer-events: none;
970
+ }
971
+
972
+ .loading-spinner {
973
+ width: 48px;
974
+ height: 48px;
975
+ border: 3px solid var(--border-color);
976
+ border-top-color: var(--accent-primary);
977
+ border-radius: 50%;
978
+ animation: spin 0.8s linear infinite;
979
+ }
980
+
981
+ .loading-text {
982
+ margin-top: 16px;
983
+ color: var(--text-secondary);
984
+ font-size: 14px;
985
+ font-weight: 500;
986
+ }
987
+
988
+ @keyframes spin {
989
+ to {
990
+ transform: rotate(360deg);
991
+ }
992
+ }
993
+
994
+ /* Responsive */
995
+ @media (max-width: 1024px) {
996
+ .sidebar {
997
+ width: 240px;
998
+ }
999
+ .properties-panel {
1000
+ width: 280px;
1001
+ }
1002
+ }