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