react-dockable-desktop 1.0.0

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,1766 @@
1
+ :root {
2
+ --bg-primary: #090b11;
3
+ --bg-workspace: #0f111a;
4
+ --bg-panel: #141722;
5
+ --bg-tab-bar: #0d0f16;
6
+ --text-primary: #f1f5f9;
7
+ --text-secondary: #94a3b8;
8
+ --border-color: rgba(255, 255, 255, 0.08);
9
+ --accent-color: #38bdf8; /* Modern Cyan/Sky-blue accent */
10
+ --accent-glow: rgba(56, 189, 248, 0.15);
11
+ /* Window skins variables */
12
+ --window-bg: rgba(20, 22, 28, var(--window-opacity, 0.85));
13
+ --window-border: rgba(255, 255, 255, 0.08);
14
+ --window-border-focused: rgba(255, 255, 255, 0.28);
15
+ --window-header-bg: rgba(0, 0, 0, 0.25);
16
+ --window-text: #f8f9fa;
17
+ --window-shadow: 0 16px 40px rgba(0, 0, 0, 0.4);
18
+ --window-shadow-focused: 0 24px 50px rgba(0, 0, 0, 0.55);
19
+ /* Grid/Docked panel theme variables */
20
+ --border-panel: rgba(255, 255, 255, 0.08);
21
+ --bg-tab-inactive: #0c0d12;
22
+ --text-tab-inactive: #858b99;
23
+ --text-tab-active: #ffffff;
24
+ /* Tab and control button hover colors */
25
+ --bg-tab-hover: #171a22;
26
+ --text-tab-hover: #e2e8f0;
27
+ --close-btn-hover-bg: rgba(255, 255, 255, 0.12);
28
+ --close-btn-hover-color: #ffffff;
29
+ --close-btn-color: #858b99;
30
+ --close-btn-active-color: #e2e8f0;
31
+ --resizer-bg: rgba(255, 255, 255, 0.08);
32
+ --custom-btn-bg: rgba(255, 255, 255, 0.03);
33
+ --custom-btn-border: rgba(255, 255, 255, 0.05);
34
+ --custom-btn-hover-bg: rgba(255, 255, 255, 0.12);
35
+ --custom-btn-hover-color: #ffffff;
36
+ /* Taskbar theme variables */
37
+ --taskbar-bg: rgba(0, 0, 0, 0.75);
38
+ --taskbar-border: rgba(255, 255, 255, 0.1);
39
+ --taskbar-nav-color: rgba(255, 255, 255, 0.5);
40
+ --taskbar-item-bg: rgba(15, 23, 42, 0.6);
41
+ --taskbar-item-hover-bg: rgba(15, 23, 42, 0.8);
42
+ --taskbar-item-border: rgba(255, 255, 255, 0.08);
43
+ --taskbar-item-text: var(--accent-color, #38bdf8);
44
+ /* Scrollbar theme variables */
45
+ --scrollbar-thumb: rgba(255, 255, 255, 0.1);
46
+ --scrollbar-thumb-hover: rgba(255, 255, 255, 0.2);
47
+ --scrollbar-track: rgba(255, 255, 255, 0.01);
48
+ /* Mockup Panel inner theme variables */
49
+ --panel-card-bg: rgba(0, 0, 0, 0.2);
50
+ --panel-card-border: rgba(255, 255, 255, 0.1);
51
+ --panel-text: var(--text-primary);
52
+ --panel-title-color: var(--accent-color, #38bdf8);
53
+ }
54
+
55
+ html,
56
+ body,
57
+ #root {
58
+ margin: 0;
59
+ padding: 0;
60
+ width: 100%;
61
+ height: 100%;
62
+ overflow: hidden;
63
+ background-color: var(--bg-primary);
64
+ color: var(--text-primary);
65
+ font-family: 'Outfit', 'Inter', system-ui, -apple-system, sans-serif;
66
+ -webkit-font-smoothing: antialiased;
67
+ }
68
+
69
+ #root {
70
+ display: flex;
71
+ flex-direction: column;
72
+ }
73
+
74
+ /* Premium full viewport layout */
75
+ .full-viewport-layout {
76
+ display: flex;
77
+ flex-direction: column;
78
+ height: 100%;
79
+ width: 100%;
80
+ background-color: var(--bg-primary);
81
+ }
82
+
83
+ /* Subtle, high-tech grid styling for the window manager workspace */
84
+ .desktop-workspace,
85
+ .window-manager-workspace {
86
+ background-color: var(--bg-workspace);
87
+ background-size: 32px 32px;
88
+ position: relative;
89
+ }
90
+
91
+ .show-grid .desktop-workspace,
92
+ .show-grid .window-manager-workspace {
93
+ background-image:
94
+ linear-gradient(rgba(255, 255, 255, 0.015) 1px, transparent 1px),
95
+ linear-gradient(90deg, rgba(255, 255, 255, 0.015) 1px, transparent 1px);
96
+ }
97
+
98
+ /* Workspace Panel Container */
99
+ .workspace-panel {
100
+ background-color: var(--bg-panel);
101
+ border: 1px solid var(--border-panel);
102
+ box-shadow: inset 0 0 20px rgba(0, 0, 0, 0.15);
103
+ }
104
+
105
+ /* Tab Headers Bar */
106
+ .workspace-tab-bar {
107
+ background-color: var(--bg-tab-bar);
108
+ border-bottom: 1px solid var(--border-panel);
109
+ padding: 0 4px;
110
+ }
111
+
112
+ /* Tab Headers Container */
113
+ .tab-headers-container {
114
+ display: flex;
115
+ align-items: flex-end;
116
+ height: 100%;
117
+ padding-top: 4px;
118
+ padding-left: 6px;
119
+ position: relative;
120
+ margin-bottom: -1px;
121
+ }
122
+
123
+ /* Premium Tab styling (VS Code Style) */
124
+ .workspace-tab {
125
+ position: relative;
126
+ background-color: var(--bg-tab-inactive) !important; /* VS Code dark background for inactive tabs */
127
+ color: var(--text-tab-inactive) !important; /* Clear readable gray */
128
+ border: none !important;
129
+ border-right: 1px solid var(--border-panel) !important; /* crisp separator */
130
+ padding: 0 8px 0 16px !important;
131
+ font-size: 0.75rem;
132
+ transition: background-color 0.1s ease, color 0.1s ease;
133
+ display: flex;
134
+ align-items: center;
135
+ border-radius: 0 !important; /* Square edges */
136
+ margin-right: 0 !important; /* No gaps between tabs */
137
+ font-weight: 500;
138
+ cursor: pointer;
139
+ user-select: none;
140
+ height: 35px; /* VS Code standard height */
141
+ box-sizing: border-box;
142
+ }
143
+
144
+ /* Remove original after element separator */
145
+ .workspace-tab:not(.active):not(:last-child)::after {
146
+ display: none !important;
147
+ }
148
+
149
+ .workspace-tab:hover {
150
+ background-color: var(--bg-tab-hover) !important;
151
+ color: var(--text-tab-hover) !important;
152
+ }
153
+
154
+ /* Active tab */
155
+ .workspace-tab.active {
156
+ background-color: var(--bg-panel) !important; /* matches panel content area */
157
+ color: var(--text-tab-active) !important;
158
+ font-weight: 500;
159
+ border-right: 1px solid var(--border-panel) !important;
160
+ z-index: 2;
161
+ }
162
+
163
+ /* Top accent line on active tab (VS Code style indicator) */
164
+ .workspace-tab.active::before {
165
+ content: '';
166
+ position: absolute;
167
+ top: 0;
168
+ left: 0;
169
+ right: 0;
170
+ height: 2px;
171
+ background-color: var(--accent-color);
172
+ border-radius: 0 !important;
173
+ box-shadow: 0 1px 4px var(--accent-glow);
174
+ }
175
+
176
+ .workspace-tab-inactive {
177
+ color: var(--close-btn-color) !important;
178
+ }
179
+
180
+ .workspace-tab-inactive:hover {
181
+ color: var(--text-tab-hover) !important;
182
+ }
183
+
184
+ /* Tab close button (VS Code style visibility) */
185
+ .close-tab-x {
186
+ opacity: 0; /* hidden by default on inactive tabs, allows hover/active overrides */
187
+ transition: opacity 0.12s ease, background-color 0.12s ease, color 0.12s ease;
188
+ margin-left: 8px;
189
+ border-radius: 3px;
190
+ color: var(--close-btn-color) !important;
191
+ display: flex;
192
+ align-items: center;
193
+ justify-content: center;
194
+ }
195
+
196
+ /* Always show close icon on active tab */
197
+ .workspace-tab.active .close-tab-x {
198
+ opacity: 0.75 !important;
199
+ color: var(--close-btn-active-color) !important;
200
+ }
201
+
202
+ /* Show close icon on hover of any tab */
203
+ .workspace-tab:hover .close-tab-x {
204
+ opacity: 0.75 !important;
205
+ color: var(--close-btn-active-color) !important;
206
+ }
207
+
208
+ /* Hover style on the close icon itself (VS Code dark rounded background) */
209
+ .close-tab-x:hover {
210
+ opacity: 1 !important;
211
+ background-color: var(--close-btn-hover-bg) !important;
212
+ color: var(--close-btn-hover-color) !important;
213
+ }
214
+
215
+ /* Drag resizer split bars */
216
+ .resizer-bar {
217
+ background-color: var(--resizer-bg) !important;
218
+ transition: background-color 0.15s cubic-bezier(0.4, 0, 0.2, 1) !important;
219
+ }
220
+
221
+ .resizer-bar:hover,
222
+ .resizer-bar.active {
223
+ background-color: var(--accent-color) !important;
224
+ box-shadow: 0 0 8px var(--accent-glow);
225
+ }
226
+
227
+ /* Control buttons inside tabs/windows */
228
+ .custom-tab-btn {
229
+ background: var(--custom-btn-bg);
230
+ border: 1px solid var(--custom-btn-border);
231
+ color: var(--text-secondary);
232
+ font-size: 9px;
233
+ width: 18px;
234
+ height: 18px;
235
+ border-radius: 4px;
236
+ display: flex;
237
+ align-items: center;
238
+ justify-content: center;
239
+ cursor: pointer;
240
+ transition: all 0.15s cubic-bezier(0.4, 0, 0.2, 1);
241
+ padding: 0;
242
+ line-height: 1;
243
+ }
244
+
245
+ .custom-tab-btn:hover {
246
+ background-color: var(--custom-btn-hover-bg);
247
+ color: var(--custom-btn-hover-color);
248
+ border-color: var(--custom-btn-border);
249
+ transform: scale(1.05);
250
+ }
251
+
252
+ /* Taskbar Sibling Footer Styling */
253
+ .taskbar-footer-container {
254
+ background-color: var(--taskbar-bg) !important;
255
+ border-top: 1px solid var(--taskbar-border) !important;
256
+ backdrop-filter: blur(12px) saturate(180%);
257
+ -webkit-backdrop-filter: blur(12px) saturate(180%);
258
+ }
259
+
260
+ .taskbar-nav-btn {
261
+ color: var(--taskbar-nav-color) !important;
262
+ }
263
+
264
+ .taskbar-nav-btn:hover {
265
+ color: var(--accent-color) !important;
266
+ }
267
+
268
+ /* macOS/Win11 Glassmorphic Taskbar */
269
+ .taskbar-glassmorphic-item {
270
+ background: var(--taskbar-item-bg) !important;
271
+ backdrop-filter: blur(12px) saturate(180%);
272
+ -webkit-backdrop-filter: blur(12px) saturate(180%);
273
+ border: 1px solid var(--taskbar-item-border) !important;
274
+ color: var(--taskbar-item-text) !important;
275
+ box-shadow: 0 4px 12px rgba(0, 0, 0, 0.1);
276
+ transition: all 0.25s cubic-bezier(0.4, 0, 0.2, 1) !important;
277
+ }
278
+
279
+ .taskbar-glassmorphic-item:hover {
280
+ background: var(--taskbar-item-hover-bg) !important;
281
+ border-color: var(--accent-color, #38bdf8) !important;
282
+ box-shadow: 0 6px 16px rgba(56, 189, 248, 0.15);
283
+ }
284
+
285
+ /* Minimalist Taskbar Icon-Only & Premium Tooltip Rules */
286
+ .taskbar-item-icon {
287
+ font-size: 22px !important;
288
+ line-height: 1 !important;
289
+ display: inline-flex;
290
+ align-items: center;
291
+ justify-content: center;
292
+ }
293
+
294
+ .taskbar-item-icon svg,
295
+ .taskbar-item-icon img {
296
+ width: 22px !important;
297
+ height: 22px !important;
298
+ max-width: 22px !important;
299
+ max-height: 22px !important;
300
+ object-fit: contain;
301
+ display: block;
302
+ }
303
+
304
+ @keyframes tooltipFadeIn {
305
+ from {
306
+ opacity: 0;
307
+ transform: translateX(-50%) translateY(-90%);
308
+ }
309
+ to {
310
+ opacity: 1;
311
+ transform: translateX(-50%) translateY(-100%);
312
+ }
313
+ }
314
+
315
+ .taskbar-item-tooltip {
316
+ background: var(--bg-panel, #1e1e1e) !important;
317
+ color: var(--text-primary, #ffffff) !important;
318
+ padding: 8px !important;
319
+ border-radius: 6px;
320
+ font-size: 11px !important;
321
+ font-family: 'Outfit', 'Inter', system-ui, sans-serif;
322
+ box-shadow: 0 4px 14px rgba(0, 0, 0, 0.35);
323
+ border: 1px solid var(--taskbar-item-border, rgba(255, 255, 255, 0.1)) !important;
324
+ animation: tooltipFadeIn 0.15s cubic-bezier(0.4, 0, 0.2, 1) forwards;
325
+ display: flex;
326
+ flex-direction: column;
327
+ }
328
+
329
+ /* Invisible bridge so mouse transitions smoothly to tooltip */
330
+ .taskbar-item-tooltip::before {
331
+ content: '';
332
+ position: absolute;
333
+ top: 100%;
334
+ left: 0;
335
+ width: 100%;
336
+ height: 12px;
337
+ background: transparent;
338
+ }
339
+
340
+ .taskbar-item-tooltip::after {
341
+ content: '';
342
+ position: absolute;
343
+ top: 100%;
344
+ left: 50%;
345
+ transform: translateX(-50%);
346
+ border-width: 5px;
347
+ border-style: solid;
348
+ border-color: var(--bg-panel, #1e1e1e) transparent transparent transparent;
349
+ }
350
+
351
+ /* Live preview thumbnail styles */
352
+ .taskbar-item-preview-frame {
353
+ border-radius: 4px;
354
+ overflow: hidden;
355
+ background: #000000;
356
+ border: 1px solid var(--taskbar-item-border, rgba(255, 255, 255, 0.15));
357
+ position: relative;
358
+ margin-top: 4px;
359
+ pointer-events: none !important;
360
+ user-select: none !important;
361
+ }
362
+
363
+ .taskbar-item-preview-host {
364
+ transform-origin: top left;
365
+ position: absolute;
366
+ top: 0;
367
+ left: 0;
368
+ }
369
+ .taskbar-item-preview-host * {
370
+ pointer-events: none !important;
371
+ user-select: none !important;
372
+ }
373
+
374
+
375
+
376
+ .tooltip-close-x {
377
+ width: 18px;
378
+ height: 18px;
379
+ border-radius: 3px;
380
+ background: transparent !important;
381
+ border: none !important;
382
+ color: var(--close-btn-color, var(--text-secondary, #888888)) !important;
383
+ cursor: pointer;
384
+ transition: opacity 0.12s ease, background-color 0.12s ease, color 0.12s ease;
385
+ flex-shrink: 0;
386
+ display: flex;
387
+ align-items: center;
388
+ justify-content: center;
389
+ opacity: 0.75;
390
+ }
391
+
392
+ .tooltip-close-x:hover {
393
+ background: var(--close-btn-hover-bg) !important;
394
+ color: var(--close-btn-hover-color) !important;
395
+ opacity: 1 !important;
396
+ }
397
+ .scrollbar-hidden::-webkit-scrollbar {
398
+ display: none;
399
+ }
400
+
401
+ /* Cross-browser scrollbar styling (Firefox standard) */
402
+ * {
403
+ scrollbar-width: thin;
404
+ scrollbar-color: var(--scrollbar-thumb) var(--scrollbar-track);
405
+ }
406
+
407
+ /* WebKit (Chrome, Safari, Edge) scrollbar styling */
408
+ ::-webkit-scrollbar {
409
+ width: 6px;
410
+ height: 6px;
411
+ }
412
+ ::-webkit-scrollbar-track {
413
+ background: var(--scrollbar-track);
414
+ }
415
+ ::-webkit-scrollbar-thumb {
416
+ background: var(--scrollbar-thumb);
417
+ border-radius: 4px;
418
+ }
419
+ ::-webkit-scrollbar-thumb:hover {
420
+ background: var(--scrollbar-thumb-hover);
421
+ }
422
+
423
+ /* Premium Hover Highlight Effects */
424
+ .hover-bg:hover {
425
+ background-color: rgba(56, 189, 248, 0.08) !important;
426
+ border-color: rgba(56, 189, 248, 0.25) !important;
427
+ }
428
+
429
+ /* Floating Windows customization styling */
430
+ .floating-window {
431
+ display: flex;
432
+ flex-direction: column;
433
+ border-radius: 8px;
434
+ border: 1px solid var(--window-border);
435
+ box-shadow: var(--window-shadow), inset 0 1px 0 rgba(255, 255, 255, 0.05);
436
+ backdrop-filter: blur(16px) saturate(180%);
437
+ -webkit-backdrop-filter: blur(16px) saturate(180%);
438
+ background-color: var(--window-bg);
439
+ overflow: hidden;
440
+ opacity: 0.88;
441
+ transition: opacity 0.2s, box-shadow 0.2s, border-color 0.2s;
442
+ }
443
+
444
+ .floating-window.v2-window-focused {
445
+ opacity: 1;
446
+ box-shadow: var(--window-shadow-focused), inset 0 1px 0 rgba(255, 255, 255, 0.08);
447
+ border-color: var(--window-border-focused);
448
+ }
449
+
450
+ .floating-window.maximized {
451
+ border-radius: 0;
452
+ border: none;
453
+ box-shadow: none;
454
+ }
455
+
456
+ /* Anchor Button Icon Rotations - Base line sits at the bottom in default 0deg state */
457
+ .anchor-icon {
458
+ transition: transform 0.2s ease, color 0.2s ease;
459
+ }
460
+ .anchor-sticky-right {
461
+ /* Rotates -90deg so the bottom flat line sits on the right-hand side */
462
+ transform: rotate(-90deg);
463
+ color: var(--accent-color, #38bdf8);
464
+ }
465
+ .anchor-sticky-bottom {
466
+ /* No rotation: the bottom flat line stays on the bottom */
467
+ transform: rotate(0deg);
468
+ color: var(--accent-color, #38bdf8);
469
+ }
470
+ .anchor-sticky-both {
471
+ /* Rotates -45deg so the bottom flat line sits on the bottom-right corner */
472
+ transform: rotate(-45deg);
473
+ color: var(--accent-color, #38bdf8);
474
+ filter: drop-shadow(0 0 4px var(--accent-glow));
475
+ }
476
+
477
+ .floating-window-titlebar {
478
+ padding: 8px 14px;
479
+ background-color: var(--window-header-bg);
480
+ border-bottom: 1px solid var(--window-border);
481
+ min-height: 38px;
482
+ }
483
+
484
+ .floating-window-title {
485
+ font-family: 'Outfit', sans-serif;
486
+ font-size: 0.78rem;
487
+ font-weight: 600;
488
+ color: var(--window-text);
489
+ letter-spacing: 0.02em;
490
+ }
491
+
492
+ .cursor-move {
493
+ cursor: grab;
494
+ }
495
+ .cursor-move:active {
496
+ cursor: grabbing;
497
+ }
498
+
499
+ /* VS Code Theme overrides for replace-react-contexify */
500
+ .react-contexify {
501
+ background-color: #1e1e1e !important;
502
+ border: 1px solid #3c3c3c !important;
503
+ box-shadow: 0 4px 12px rgba(0, 0, 0, 0.4) !important;
504
+ border-radius: 3px !important;
505
+ padding: 4px 0 !important;
506
+ min-width: 150px !important;
507
+ z-index: 99999 !important;
508
+ }
509
+
510
+ .react-contexify .react-contexify__item__content {
511
+ color: #cccccc !important;
512
+ font-family: 'Inter', system-ui, sans-serif !important;
513
+ font-size: 0.75rem !important;
514
+ padding: 6px 14px !important;
515
+ }
516
+
517
+ .react-contexify .react-contexify__item:not(.react-contexify__item--disabled):hover > .react-contexify__item__content {
518
+ background-color: #094771 !important; /* VS Code Blue selection background */
519
+ color: #ffffff !important;
520
+ }
521
+
522
+ .react-contexify .react-contexify__separator {
523
+ background-color: #3c3c3c !important;
524
+ margin: 4px 0 !important;
525
+ }
526
+
527
+ .react-contexify .react-contexify__item-row {
528
+ gap: 0 !important;
529
+ }
530
+
531
+ .react-contexify .react-contexify__item-label {
532
+ text-align: left !important;
533
+ }
534
+
535
+ /* Drag split target drop zone overlays */
536
+ .dock-drop-zone-overlay {
537
+ position: absolute;
538
+ inset: 0;
539
+ z-index: 100;
540
+ display: flex;
541
+ align-items: center;
542
+ justify-content: center;
543
+ background-color: rgba(0, 0, 0, 0.15);
544
+ pointer-events: none;
545
+ border-radius: 4px;
546
+ }
547
+
548
+ /* Translucent overlay preview highlighting the grid section about to split */
549
+ .dock-preview-highlight {
550
+ position: absolute;
551
+ background-color: rgba(56, 189, 248, 0.2) !important; /* neon cyan overlay */
552
+ border: 1.5px dashed var(--accent-color) !important;
553
+ transition: all 0.1s ease-out;
554
+ pointer-events: none;
555
+ z-index: 90;
556
+ }
557
+
558
+ /* Central cross layout container */
559
+ .dock-target-cross {
560
+ position: relative;
561
+ width: 140px;
562
+ height: 140px;
563
+ pointer-events: auto;
564
+ }
565
+
566
+ /* Visual split target buttons (top, bottom, left, right, center) */
567
+ .dock-target-box {
568
+ position: absolute;
569
+ background-color: rgba(15, 23, 42, 0.92);
570
+ border: 1px solid rgba(255, 255, 255, 0.15);
571
+ border-radius: 4px;
572
+ display: flex;
573
+ align-items: center;
574
+ justify-content: center;
575
+ cursor: copy;
576
+ transition: all 0.12s ease-in-out;
577
+ pointer-events: auto;
578
+ box-shadow: 0 4px 12px rgba(0,0,0,0.5);
579
+ color: var(--text-secondary);
580
+ }
581
+
582
+ .dock-target-box:hover {
583
+ background-color: var(--accent-color) !important;
584
+ border-color: #ffffff !important;
585
+ color: #090b11 !important;
586
+ transform: scale(1.12);
587
+ box-shadow: 0 0 12px var(--accent-color);
588
+ }
589
+
590
+ /* Specific split target layouts */
591
+ .dock-target-left {
592
+ left: 0;
593
+ top: 45px;
594
+ width: 40px;
595
+ height: 50px;
596
+ }
597
+ .dock-target-right {
598
+ right: 0;
599
+ top: 45px;
600
+ width: 40px;
601
+ height: 50px;
602
+ }
603
+ .dock-target-top {
604
+ left: 45px;
605
+ top: 0;
606
+ width: 50px;
607
+ height: 40px;
608
+ }
609
+ .dock-target-bottom {
610
+ left: 45px;
611
+ bottom: 0;
612
+ width: 50px;
613
+ height: 40px;
614
+ }
615
+ .dock-target-center {
616
+ left: 45px;
617
+ top: 45px;
618
+ width: 50px;
619
+ height: 50px;
620
+ background-color: rgba(30, 41, 59, 0.95);
621
+ color: var(--accent-color);
622
+ }
623
+
624
+ /* Drag hover indicators for tab reordering */
625
+ .workspace-tab.drag-hover-left {
626
+ border-left: 2px solid var(--accent-color, #00f0ff) !important;
627
+ }
628
+ .workspace-tab.drag-hover-right {
629
+ border-right: 2px solid var(--accent-color, #00f0ff) !important;
630
+ }
631
+
632
+ /* Close button for empty LeafGroups inside header */
633
+ .header-close-empty-group {
634
+ opacity: 0 !important;
635
+ transition: opacity 0.12s ease, background-color 0.12s ease, color 0.12s ease !important;
636
+ }
637
+
638
+ .workspace-panel:hover .header-close-empty-group {
639
+ opacity: 0.75 !important;
640
+ }
641
+
642
+ .header-close-empty-group:hover {
643
+ opacity: 1 !important;
644
+ background-color: rgba(255, 255, 255, 0.12) !important;
645
+ color: #ffffff !important;
646
+ }
647
+
648
+ /* Grabbing cursor style during active dragging */
649
+ .dragging-active,
650
+ .dragging-active * {
651
+ cursor: grabbing !important;
652
+ }
653
+
654
+ /* --- Theme Variables for Sidebar and Tabs --- */
655
+ [data-bs-theme="dark"] {
656
+ --sidebar-bg: #1e2024;
657
+ --sidebar-tabs-bg: #141619;
658
+ --sidebar-border: rgba(255, 255, 255, 0.08);
659
+ --sidebar-card-bg: rgba(255, 255, 255, 0.03);
660
+ --sidebar-card-border: rgba(255, 255, 255, 0.08);
661
+ --sidebar-card-active-bg: rgba(56, 189, 248, 0.06);
662
+ --sidebar-card-active-border: rgba(56, 189, 248, 0.3);
663
+ --sidebar-text-title: #f8f9fa;
664
+ --sidebar-text-muted: #8a90a0;
665
+ --sidebar-badge-bg: #2d3139;
666
+ --sidebar-badge-text: #b0b5c0;
667
+ --sidebar-btn-front-border: #38bdf8;
668
+ --sidebar-btn-front-text: #38bdf8;
669
+ --sidebar-btn-front-bg: transparent;
670
+ --sidebar-btn-front-hover-bg: rgba(56, 189, 248, 0.1);
671
+ --tab-icon-active: #38bdf8;
672
+ --tab-icon-inactive: #9ea4b0;
673
+ --tab-btn-active-bg: #1e2024; /* Seamless merge look */
674
+ }
675
+
676
+ [data-bs-theme="light"] {
677
+ --bg-primary: #f8f9fa;
678
+ --bg-workspace: #f1f5f9;
679
+ --bg-panel: #ffffff;
680
+ --bg-tab-bar: #e9ecef;
681
+ --text-primary: #212529;
682
+ --text-secondary: #6c757d;
683
+ --border-color: rgba(0, 0, 0, 0.08);
684
+
685
+ --sidebar-bg: #f8f9fa;
686
+ --sidebar-tabs-bg: #e9ecef;
687
+ --sidebar-border: rgba(0, 0, 0, 0.08);
688
+ --sidebar-card-bg: #ffffff;
689
+ --sidebar-card-border: rgba(0, 0, 0, 0.08);
690
+ --sidebar-card-active-bg: rgba(0, 102, 204, 0.05);
691
+ --sidebar-card-active-border: rgba(0, 102, 204, 0.3);
692
+ --sidebar-text-title: #212529;
693
+ --sidebar-text-muted: #6c757d;
694
+ --sidebar-badge-bg: #e9ecef;
695
+ --sidebar-badge-text: #495057;
696
+ --sidebar-btn-front-border: #0066cc;
697
+ --sidebar-btn-front-text: #0066cc;
698
+ --sidebar-btn-front-bg: transparent;
699
+ --sidebar-btn-front-hover-bg: rgba(0, 102, 204, 0.08);
700
+ --tab-icon-active: #0066cc;
701
+ --tab-icon-inactive: #555c66;
702
+ --tab-btn-active-bg: #f8f9fa; /* Seamless merge look */
703
+ /* Light skin window overrides */
704
+ --window-bg: rgba(243, 244, 246, var(--window-opacity, 0.9));
705
+ --window-border: rgba(0, 0, 0, 0.08);
706
+ --window-border-focused: rgba(0, 0, 0, 0.28);
707
+ --window-header-bg: rgba(0, 0, 0, 0.04);
708
+ --window-text: #212529;
709
+ --window-shadow: 0 10px 30px rgba(0, 0, 0, 0.06);
710
+ --window-shadow-focused: 0 16px 36px rgba(0, 0, 0, 0.12);
711
+ /* Light skin grid/docked panel overrides */
712
+ --border-panel: rgba(0, 0, 0, 0.08);
713
+ --bg-tab-inactive: #e9ecef;
714
+ --text-tab-inactive: #495057;
715
+ --text-tab-active: #212529;
716
+ /* Light skin tab and control button hover colors */
717
+ --bg-tab-hover: #dee2e6;
718
+ --text-tab-hover: #212529;
719
+ --close-btn-hover-bg: rgba(0, 0, 0, 0.08);
720
+ --close-btn-hover-color: #212529;
721
+ --close-btn-color: #6c757d;
722
+ --close-btn-active-color: #212529;
723
+ --resizer-bg: rgba(0, 0, 0, 0.08);
724
+ --custom-btn-bg: rgba(0, 0, 0, 0.03);
725
+ --custom-btn-border: rgba(0, 0, 0, 0.08);
726
+ --custom-btn-hover-bg: rgba(0, 0, 0, 0.08);
727
+ --custom-btn-hover-color: #212529;
728
+ /* Light skin taskbar theme variables */
729
+ --taskbar-bg: rgba(248, 249, 250, 0.85);
730
+ --taskbar-border: rgba(0, 0, 0, 0.08);
731
+ --taskbar-nav-color: rgba(0, 0, 0, 0.5);
732
+ --taskbar-item-bg: rgba(255, 255, 255, 0.65);
733
+ --taskbar-item-hover-bg: rgba(255, 255, 255, 0.85);
734
+ --taskbar-item-border: rgba(0, 0, 0, 0.08);
735
+ --taskbar-item-text: #0066cc;
736
+ /* Light skin scrollbar theme variables */
737
+ --scrollbar-thumb: rgba(0, 0, 0, 0.15);
738
+ --scrollbar-thumb-hover: rgba(0, 0, 0, 0.25);
739
+ --scrollbar-track: rgba(0, 0, 0, 0.02);
740
+ /* Light skin mockup panel inner theme variables */
741
+ --panel-card-bg: rgba(0, 0, 0, 0.03);
742
+ --panel-card-border: rgba(0, 0, 0, 0.08);
743
+ --panel-text: #212529;
744
+ --panel-title-color: #0066cc;
745
+ }
746
+
747
+ /* ==========================================================================
748
+ MULTI-THEME PRESETS (SKINS) DEFINITIONS
749
+ ========================================================================== */
750
+
751
+ /* --------------------------------------------------------------------------
752
+ SKIN 1: VS Code (Default Variables matching :root)
753
+ -------------------------------------------------------------------------- */
754
+ [data-workspace-skin="vscode"] {
755
+ /* Inherits everything from :root */
756
+ }
757
+
758
+ /* --------------------------------------------------------------------------
759
+ SKIN 2: macOS / Glassmorphic Preset
760
+ -------------------------------------------------------------------------- */
761
+ [data-workspace-skin="macos"] {
762
+ --bg-workspace: #1a1a24;
763
+ --bg-panel: rgba(30, 30, 40, 0.45);
764
+ --bg-tab-bar: rgba(18, 18, 24, 0.3);
765
+ --window-bg: rgba(25, 25, 35, var(--window-opacity, 0.7));
766
+ --window-border: rgba(255, 255, 255, 0.1);
767
+ --window-header-bg: rgba(0, 0, 0, 0.15);
768
+ --accent-color: #38bdf8;
769
+ --accent-glow: rgba(56, 189, 248, 0.25);
770
+ --border-panel: rgba(255, 255, 255, 0.08);
771
+ --bg-tab-inactive: transparent;
772
+ --text-tab-inactive: #94a3b8;
773
+ --text-tab-active: #ffffff;
774
+ --window-shadow: 0 16px 40px rgba(0, 0, 0, 0.4);
775
+ --window-shadow-focused: 0 24px 50px rgba(56, 189, 248, 0.15);
776
+ --panel-card-bg: rgba(255, 255, 255, 0.03);
777
+ --panel-card-border: rgba(255, 255, 255, 0.08);
778
+ }
779
+
780
+ [data-workspace-skin="macos"][data-bs-theme="light"] {
781
+ --bg-primary: #f3f4f6;
782
+ --bg-workspace: #e5e7eb;
783
+ --bg-panel: rgba(255, 255, 255, 0.7);
784
+ --bg-tab-bar: rgba(229, 231, 235, 0.5);
785
+ --window-bg: rgba(255, 255, 255, var(--window-opacity, 0.85));
786
+ --window-border: rgba(0, 0, 0, 0.12);
787
+ --window-header-bg: rgba(243, 244, 246, 0.5);
788
+ --accent-color: #0066cc;
789
+ --accent-glow: rgba(0, 102, 204, 0.15);
790
+ --border-panel: rgba(0, 0, 0, 0.1);
791
+ --bg-tab-inactive: transparent;
792
+ --text-tab-inactive: #4b5563;
793
+ --text-tab-active: #111827;
794
+ --window-text: #111827;
795
+ --window-shadow: 0 10px 30px rgba(0, 0, 0, 0.08);
796
+ --window-shadow-focused: 0 16px 36px rgba(0, 102, 204, 0.18);
797
+ --panel-card-bg: rgba(0, 0, 0, 0.04);
798
+ --panel-card-border: rgba(0, 0, 0, 0.08);
799
+ --panel-text: #111827;
800
+ --panel-title-color: #0066cc;
801
+ --close-btn-color: #4b5563;
802
+ --close-btn-active-color: #111827;
803
+ }
804
+
805
+ /* macOS structural adjustments */
806
+ [data-workspace-skin="macos"] .floating-window {
807
+ border-radius: 12px;
808
+ backdrop-filter: blur(20px) saturate(180%);
809
+ -webkit-backdrop-filter: blur(20px) saturate(180%);
810
+ border-color: var(--window-border);
811
+ }
812
+ [data-workspace-skin="macos"] .floating-window-titlebar {
813
+ border-top-left-radius: 12px;
814
+ border-top-right-radius: 12px;
815
+ }
816
+ [data-workspace-skin="macos"] .workspace-panel {
817
+ border-radius: 8px;
818
+ backdrop-filter: blur(12px) saturate(180%);
819
+ -webkit-backdrop-filter: blur(12px) saturate(180%);
820
+ }
821
+ [data-workspace-skin="macos"] .workspace-tab {
822
+ border-radius: 6px !important;
823
+ margin: 4px 4px 4px 4px !important;
824
+ height: 28px !important;
825
+ border: 1px solid var(--border-panel) !important;
826
+ }
827
+ [data-workspace-skin="macos"] .workspace-tab.active {
828
+ background-color: var(--bg-workspace) !important;
829
+ }
830
+ [data-workspace-skin="macos"] .workspace-tab.active::before {
831
+ display: none !important; /* Hide VS Code top line */
832
+ }
833
+
834
+ /* macOS Circle dots controls styling */
835
+ [data-workspace-skin="macos"] .custom-tab-btn {
836
+ border-radius: 50% !important;
837
+ width: 12px !important;
838
+ height: 12px !important;
839
+ background: var(--custom-btn-bg) !important;
840
+ border: none !important;
841
+ color: transparent !important;
842
+ font-size: 0 !important;
843
+ overflow: hidden;
844
+ margin: 0 2px;
845
+ }
846
+ [data-workspace-skin="macos"] .floating-window-titlebar {
847
+ flex-direction: row-reverse !important;
848
+ }
849
+ [data-workspace-skin="macos"] .floating-window-titlebar .d-flex.align-items-center {
850
+ flex-direction: row-reverse !important;
851
+ }
852
+ [data-workspace-skin="macos"] .custom-tab-btn:not(.btn-anchor-tab) svg {
853
+ display: none !important;
854
+ }
855
+ [data-workspace-skin="macos"] .btn-close-tab {
856
+ background-color: #ff5f56 !important;
857
+ }
858
+ [data-workspace-skin="macos"] .custom-tab-btn:nth-child(2) {
859
+ background-color: #ffbd2e !important;
860
+ }
861
+ [data-workspace-skin="macos"] .custom-tab-btn:nth-child(3) {
862
+ background-color: #27c93f !important;
863
+ }
864
+ [data-workspace-skin="macos"] .btn-anchor-tab {
865
+ /* Default: Neutral Graphite/Slate dot when inactive */
866
+ background-color: #8e8e93 !important;
867
+ }
868
+ /* When inactive (no sticky values) - show as a neutral grey macOS dot */
869
+ [data-workspace-skin="macos"] .btn-anchor-tab:not(:has(.anchor-sticky-right)):not(:has(.anchor-sticky-bottom)):not(:has(.anchor-sticky-both)) {
870
+ background-color: #8e8e93 !important;
871
+ }
872
+ [data-workspace-skin="macos"][data-bs-theme="light"] .btn-anchor-tab:not(:has(.anchor-sticky-right)):not(:has(.anchor-sticky-bottom)):not(:has(.anchor-sticky-both)) {
873
+ background-color: #a4a4a8 !important;
874
+ }
875
+
876
+ /* macOS Active Snapped Dot State: Solid active blue with high-contrast yellow icon */
877
+ [data-workspace-skin="macos"] .btn-anchor-tab:has(.anchor-sticky-right),
878
+ [data-workspace-skin="macos"] .btn-anchor-tab:has(.anchor-sticky-bottom),
879
+ [data-workspace-skin="macos"] .btn-anchor-tab:has(.anchor-sticky-both) {
880
+ background-color: #007aff !important;
881
+ border: 1px solid rgba(0,0,0,0.15) !important;
882
+ }
883
+
884
+ /* Ensure the anchor icon displays cleanly and is centered inside the macOS dot */
885
+ [data-workspace-skin="macos"] .btn-anchor-tab {
886
+ display: flex !important;
887
+ align-items: center !important;
888
+ justify-content: center !important;
889
+ }
890
+ [data-workspace-skin="macos"] .btn-anchor-tab svg {
891
+ display: block !important;
892
+ color: #ffbd2e !important; /* Premium macOS system yellow */
893
+ width: 9px !important;
894
+ height: 9px !important;
895
+ flex-shrink: 0;
896
+ }
897
+
898
+ /* Panel Icon Styling and Alignment */
899
+ .workspace-tab-icon,
900
+ .window-title-icon {
901
+ display: inline-flex;
902
+ align-items: center;
903
+ justify-content: center;
904
+ flex-shrink: 0;
905
+ vertical-align: middle;
906
+ line-height: 1;
907
+ margin-right: 4px !important; /* Forces the gap between the icon and the text title */
908
+ }
909
+
910
+ .workspace-tab-icon svg,
911
+ .workspace-tab-icon img,
912
+ .window-title-icon svg,
913
+ .window-title-icon img {
914
+ width: 14px !important;
915
+ height: 14px !important;
916
+ max-width: 14px !important;
917
+ max-height: 14px !important;
918
+ object-fit: contain;
919
+ display: block;
920
+ }
921
+
922
+ [data-workspace-skin="macos"] .custom-tab-btn:hover {
923
+ filter: brightness(0.85);
924
+ transform: none !important;
925
+ }
926
+
927
+ /* --------------------------------------------------------------------------
928
+ SKIN 3: Chrome / Browser-Style Preset
929
+ -------------------------------------------------------------------------- */
930
+ [data-workspace-skin="chrome"] {
931
+ --bg-workspace: #202124;
932
+ --bg-panel: #292a2d;
933
+ --bg-tab-bar: #202124;
934
+ --window-bg: rgba(41, 42, 45, var(--window-opacity, 1.0));
935
+ --window-border: #3c4043;
936
+ --window-header-bg: #202124;
937
+ --accent-color: #8ab4f8;
938
+ --accent-glow: rgba(138, 180, 248, 0.15);
939
+ --border-panel: #3c4043;
940
+ --bg-tab-inactive: #202124;
941
+ --text-tab-inactive: #9aa0a6;
942
+ --text-tab-active: #ffffff;
943
+ --panel-card-bg: #202124;
944
+ --panel-card-border: #3c4043;
945
+ --window-text: #ffffff;
946
+ --panel-text: #e8eaed;
947
+ }
948
+
949
+ [data-workspace-skin="chrome"][data-bs-theme="light"] {
950
+ --bg-workspace: #dee1e6;
951
+ --bg-panel: #ffffff;
952
+ --bg-tab-bar: #dee1e6;
953
+ --window-bg: rgba(255, 255, 255, var(--window-opacity, 1.0));
954
+ --window-border: #cbd5e1;
955
+ --window-header-bg: #dee1e6;
956
+ --accent-color: #1a73e8;
957
+ --accent-glow: rgba(26, 115, 232, 0.15);
958
+ --border-panel: #dadce0;
959
+ --bg-tab-inactive: #dee1e6;
960
+ --text-tab-inactive: #474747;
961
+ --text-tab-active: #1f1f1f;
962
+ --panel-card-bg: #f1f3f4;
963
+ --panel-card-border: #dadce0;
964
+ --window-text: #1f1f1f;
965
+ --panel-text: #1f1f1f;
966
+ --panel-title-color: #1a73e8;
967
+ --close-btn-color: #474747;
968
+ --close-btn-active-color: #1f1f1f;
969
+ }
970
+
971
+ /* Chrome tab angled geometry shapes */
972
+ [data-workspace-skin="chrome"] .workspace-tab {
973
+ clip-path: polygon(10px 0%, calc(100% - 10px) 0%, 100% 100%, 0% 100%);
974
+ padding: 0 18px !important;
975
+ margin-right: -4px !important;
976
+ border-right: none !important;
977
+ }
978
+ [data-workspace-skin="chrome"] .workspace-tab.active {
979
+ z-index: 5;
980
+ }
981
+ [data-workspace-skin="chrome"] .workspace-tab.active::before {
982
+ display: none !important;
983
+ }
984
+
985
+ /* --------------------------------------------------------------------------
986
+ SKIN 4: Fluent Slate Preset
987
+ -------------------------------------------------------------------------- */
988
+ [data-workspace-skin="slate"] {
989
+ --bg-workspace: #0f172a;
990
+ --bg-panel: #1e293b;
991
+ --bg-tab-bar: #0f172a;
992
+ --window-bg: rgba(30, 41, 59, var(--window-opacity, 1.0));
993
+ --window-border: #334155;
994
+ --window-header-bg: #1e293b;
995
+ --accent-color: #38bdf8;
996
+ --accent-glow: rgba(56, 189, 248, 0.15);
997
+ --border-panel: #334155;
998
+ --bg-tab-inactive: #1e293b;
999
+ --text-tab-inactive: #64748b;
1000
+ --text-tab-active: #f8fafc;
1001
+ --panel-card-bg: #0f172a;
1002
+ --panel-card-border: #334155;
1003
+ --window-text: #f8fafc;
1004
+ --panel-text: #f8fafc;
1005
+ }
1006
+
1007
+ [data-workspace-skin="slate"][data-bs-theme="light"] {
1008
+ --bg-workspace: #f1f5f9;
1009
+ --bg-panel: #ffffff;
1010
+ --bg-tab-bar: #f1f5f9;
1011
+ --window-bg: rgba(255, 255, 255, var(--window-opacity, 1.0));
1012
+ --window-border: #cbd5e1;
1013
+ --window-header-bg: #f8fafc;
1014
+ --accent-color: #0078d4;
1015
+ --accent-glow: rgba(0, 120, 212, 0.15);
1016
+ --border-panel: #e2e8f0;
1017
+ --bg-tab-inactive: #f8fafc;
1018
+ --text-tab-inactive: #475569;
1019
+ --text-tab-active: #0f172a;
1020
+ --panel-card-bg: #f8fafc;
1021
+ --panel-card-border: #cbd5e1;
1022
+ --window-text: #0f172a;
1023
+ --panel-text: #0f172a;
1024
+ --panel-title-color: #0078d4;
1025
+ --close-btn-color: #475569;
1026
+ --close-btn-active-color: #0f172a;
1027
+ }
1028
+
1029
+ [data-workspace-skin="slate"] .workspace-tab.active::before {
1030
+ top: auto !important;
1031
+ bottom: 0 !important;
1032
+ height: 3px !important;
1033
+ }
1034
+
1035
+ /* --------------------------------------------------------------------------
1036
+ SKIN 5: Nordic Frost Preset (Nord Theme)
1037
+ -------------------------------------------------------------------------- */
1038
+ [data-workspace-skin="nord"] {
1039
+ --bg-workspace: #2e3440;
1040
+ --bg-panel: #3b4252;
1041
+ --bg-tab-bar: #2e3440;
1042
+ --window-bg: rgba(59, 66, 82, var(--window-opacity, 1.0));
1043
+ --window-border: #434c5e;
1044
+ --window-header-bg: #2e3440;
1045
+ --accent-color: #88c0d0;
1046
+ --accent-glow: rgba(136, 192, 208, 0.2);
1047
+ --border-panel: #434c5e;
1048
+ --bg-tab-inactive: #2e3440;
1049
+ --text-tab-inactive: #d8dee9;
1050
+ --text-tab-active: #eceff4;
1051
+ --panel-card-bg: #2e3440;
1052
+ --panel-card-border: #4c566a;
1053
+ --close-btn-color: #d8dee9;
1054
+ --close-btn-active-color: #88c0d0;
1055
+ --scrollbar-thumb: rgba(136, 192, 208, 0.25);
1056
+ --scrollbar-thumb-hover: rgba(136, 192, 208, 0.4);
1057
+ --window-text: #eceff4;
1058
+ --panel-text: #eceff4;
1059
+ }
1060
+
1061
+ [data-workspace-skin="nord"][data-bs-theme="light"] {
1062
+ --bg-workspace: #e5e9f0;
1063
+ --bg-panel: #eceff4;
1064
+ --bg-tab-bar: #e5e9f0;
1065
+ --window-bg: rgba(236, 239, 244, var(--window-opacity, 1.0));
1066
+ --window-border: #d8dee9;
1067
+ --window-header-bg: #e5e9f0;
1068
+ --accent-color: #5e81ac;
1069
+ --accent-glow: rgba(94, 129, 172, 0.15);
1070
+ --border-panel: #d8dee9;
1071
+ --bg-tab-inactive: #e5e9f0;
1072
+ --text-tab-inactive: #4c566a;
1073
+ --text-tab-active: #2e3440;
1074
+ --panel-card-bg: #e5e9f0;
1075
+ --panel-card-border: #d8dee9;
1076
+ --close-btn-color: #4c566a;
1077
+ --close-btn-active-color: #5e81ac;
1078
+ --scrollbar-thumb: rgba(94, 129, 172, 0.2);
1079
+ --scrollbar-thumb-hover: rgba(94, 129, 172, 0.35);
1080
+ --window-text: #2e3440;
1081
+ --panel-text: #2e3440;
1082
+ --panel-title-color: #5e81ac;
1083
+ }
1084
+
1085
+ /* --------------------------------------------------------------------------
1086
+ SKIN 6: Midnight Obsidian Preset (Vercel Style)
1087
+ -------------------------------------------------------------------------- */
1088
+ [data-workspace-skin="obsidian"] {
1089
+ --bg-workspace: #000000;
1090
+ --bg-panel: #0a0a0a;
1091
+ --bg-tab-bar: #000000;
1092
+ --window-bg: rgba(10, 10, 10, var(--window-opacity, 1.0));
1093
+ --window-border: #1a1a1a;
1094
+ --window-border-focused: #333333;
1095
+ --window-header-bg: #000000;
1096
+ --accent-color: #ffffff;
1097
+ --accent-glow: rgba(255, 255, 255, 0.08);
1098
+ --border-panel: #1a1a1a;
1099
+ --bg-tab-inactive: #000000;
1100
+ --text-tab-inactive: #737373;
1101
+ --text-tab-active: #ffffff;
1102
+ --panel-card-bg: #030303;
1103
+ --panel-card-border: #1a1a1a;
1104
+ --close-btn-color: #737373;
1105
+ --close-btn-active-color: #ffffff;
1106
+ --scrollbar-thumb: rgba(255, 255, 255, 0.15);
1107
+ --scrollbar-thumb-hover: rgba(255, 255, 255, 0.35);
1108
+ --window-text: #ffffff;
1109
+ --panel-text: #ffffff;
1110
+ }
1111
+
1112
+ [data-workspace-skin="obsidian"][data-bs-theme="light"] {
1113
+ --bg-workspace: #ffffff;
1114
+ --bg-panel: #fafafa;
1115
+ --bg-tab-bar: #ffffff;
1116
+ --window-bg: rgba(250, 250, 250, var(--window-opacity, 1.0));
1117
+ --window-border: #e5e5e5;
1118
+ --window-border-focused: #a3a3a3;
1119
+ --window-header-bg: #ffffff;
1120
+ --accent-color: #000000;
1121
+ --accent-glow: rgba(0, 0, 0, 0.05);
1122
+ --border-panel: #eaeaea;
1123
+ --bg-tab-inactive: #ffffff;
1124
+ --text-tab-inactive: #737373;
1125
+ --text-tab-active: #000000;
1126
+ --panel-card-bg: #ffffff;
1127
+ --panel-card-border: #e5e5e5;
1128
+ --close-btn-color: #737373;
1129
+ --close-btn-active-color: #000000;
1130
+ --scrollbar-thumb: rgba(0, 0, 0, 0.1);
1131
+ --scrollbar-thumb-hover: rgba(0, 0, 0, 0.25);
1132
+ --window-text: #000000;
1133
+ --panel-text: #000000;
1134
+ --panel-title-color: #000000;
1135
+ }
1136
+
1137
+ /* Obsidian custom borderless panel elevations */
1138
+ [data-workspace-skin="obsidian"] .floating-window {
1139
+ box-shadow: 0 16px 40px rgba(0, 0, 0, 0.6), 0 0 1px rgba(255, 255, 255, 0.2) !important;
1140
+ border-radius: 6px;
1141
+ }
1142
+ [data-workspace-skin="obsidian"] .floating-window.v2-window-focused {
1143
+ box-shadow: 0 24px 50px rgba(255, 255, 255, 0.06), 0 0 1px rgba(255, 255, 255, 0.4) !important;
1144
+ }
1145
+ [data-workspace-skin="obsidian"][data-bs-theme="light"] .floating-window {
1146
+ box-shadow: 0 10px 30px rgba(0, 0, 0, 0.08), 0 0 1px rgba(0, 0, 0, 0.1) !important;
1147
+ }
1148
+ [data-workspace-skin="obsidian"][data-bs-theme="light"] .floating-window.v2-window-focused {
1149
+ box-shadow: 0 16px 40px rgba(0, 0, 0, 0.14), 0 0 1px rgba(0, 0, 0, 0.2) !important;
1150
+ }
1151
+
1152
+ /* --------------------------------------------------------------------------
1153
+ SKIN 7: Tokyo Night Preset
1154
+ -------------------------------------------------------------------------- */
1155
+ [data-workspace-skin="tokyo"] {
1156
+ --bg-workspace: #1a1b26;
1157
+ --bg-panel: #24283c;
1158
+ --bg-tab-bar: #1f2335;
1159
+ --window-bg: rgba(36, 40, 60, var(--window-opacity, 1.0));
1160
+ --window-border: #383e5a;
1161
+ --window-border-focused: #7aa2f7;
1162
+ --window-header-bg: #1f2335;
1163
+ --accent-color: #bb9af7;
1164
+ --accent-glow: rgba(187, 154, 247, 0.25);
1165
+ --border-panel: #383e5a;
1166
+ --bg-tab-inactive: #1f2335;
1167
+ --text-tab-inactive: #787c99;
1168
+ --text-tab-active: #c0caf5;
1169
+ --panel-card-bg: #1a1b26;
1170
+ --panel-card-border: #383e5a;
1171
+ --close-btn-color: #787c99;
1172
+ --close-btn-active-color: #7aa2f7;
1173
+ --scrollbar-thumb: rgba(122, 162, 247, 0.25);
1174
+ --scrollbar-thumb-hover: rgba(187, 154, 247, 0.4);
1175
+ --window-text: #c0caf5;
1176
+ --panel-text: #c0caf5;
1177
+ }
1178
+
1179
+ [data-workspace-skin="tokyo"][data-bs-theme="light"] {
1180
+ --bg-workspace: #e1e2e7;
1181
+ --bg-panel: #f2f4f8;
1182
+ --bg-tab-bar: #d5d6db;
1183
+ --window-bg: rgba(242, 244, 248, var(--window-opacity, 1.0));
1184
+ --window-border: #b4b5b9;
1185
+ --window-border-focused: #385af6;
1186
+ --window-header-bg: #d5d6db;
1187
+ --accent-color: #9854f1;
1188
+ --accent-glow: rgba(152, 84, 241, 0.15);
1189
+ --border-panel: #b4b5b9;
1190
+ --bg-tab-inactive: #d5d6db;
1191
+ --text-tab-inactive: #565a6e;
1192
+ --text-tab-active: #383e56;
1193
+ --panel-card-bg: #e1e2e7;
1194
+ --panel-card-border: #b4b5b9;
1195
+ --close-btn-color: #565a6e;
1196
+ --close-btn-active-color: #385af6;
1197
+ --scrollbar-thumb: rgba(56, 90, 246, 0.2);
1198
+ --scrollbar-thumb-hover: rgba(152, 84, 241, 0.35);
1199
+ --window-text: #383e56;
1200
+ --panel-text: #383e56;
1201
+ --panel-title-color: #9854f1;
1202
+ }
1203
+
1204
+ /* --- Modern Sidebar and Tabs UI Theme Customizations --- */
1205
+ .sidebar-content-drawer {
1206
+ background-color: var(--sidebar-bg) !important;
1207
+ color: var(--sidebar-text-title) !important;
1208
+ transition: width 0.2s cubic-bezier(0.4, 0, 0.2, 1);
1209
+ }
1210
+
1211
+ /* Position-specific drawer border and shadow alignment */
1212
+ .sidebar-content-drawer.left {
1213
+ border-right: 1px solid var(--sidebar-border) !important;
1214
+ border-left: none !important;
1215
+ box-shadow: 4px 0 16px rgba(0, 0, 0, 0.12);
1216
+ }
1217
+ .sidebar-content-drawer.right {
1218
+ border-left: 1px solid var(--sidebar-border) !important;
1219
+ border-right: none !important;
1220
+ box-shadow: -4px 0 16px rgba(0, 0, 0, 0.12);
1221
+ }
1222
+
1223
+ .sidebar-tabs-strip {
1224
+ background-color: var(--sidebar-tabs-bg) !important;
1225
+ display: flex;
1226
+ flex-direction: column;
1227
+ align-items: center;
1228
+ padding-top: 38px; /* Perfectly aligned to match the 38px height of the drawer header bar */
1229
+ padding-bottom: 12px;
1230
+ gap: 8px;
1231
+ flex-shrink: 0;
1232
+ z-index: 5;
1233
+ }
1234
+
1235
+ /* Position-specific tab strip border alignment */
1236
+ .sidebar-tabs-strip.left {
1237
+ border-right: 1px solid var(--sidebar-border) !important;
1238
+ border-left: none !important;
1239
+ }
1240
+ .sidebar-tabs-strip.right {
1241
+ border-left: 1px solid var(--sidebar-border) !important;
1242
+ border-right: none !important;
1243
+ }
1244
+
1245
+ /* Sidebar Header */
1246
+ .sidebar-header-title {
1247
+ font-family: monospace;
1248
+ font-weight: 700;
1249
+ letter-spacing: 0.05em;
1250
+ text-transform: uppercase;
1251
+ color: var(--sidebar-text-title);
1252
+ font-size: 0.85rem;
1253
+ }
1254
+
1255
+ /* Tab Button with real tabbed integration */
1256
+ .sidebar-tab-btn {
1257
+ width: 44px;
1258
+ height: 44px;
1259
+ display: flex;
1260
+ align-items: center;
1261
+ justify-content: center;
1262
+ border: 1px solid transparent !important;
1263
+ border-radius: 6px;
1264
+ background: transparent;
1265
+ color: var(--tab-icon-inactive);
1266
+ position: relative;
1267
+ transition: color 0.15s ease, background-color 0.15s ease, transform 0.15s ease;
1268
+ cursor: pointer;
1269
+ outline: none !important;
1270
+ }
1271
+
1272
+ /* Micro-interactions & hover tactile feedback for inactive buttons */
1273
+ .sidebar-tab-btn:not(.active):hover {
1274
+ color: var(--sidebar-text-title);
1275
+ background-color: rgba(255, 255, 255, 0.05) !important;
1276
+ transform: scale(1.05);
1277
+ }
1278
+ [data-bs-theme="light"] .sidebar-tab-btn:not(.active):hover {
1279
+ background-color: rgba(0, 0, 0, 0.04) !important;
1280
+ }
1281
+
1282
+ .sidebar-tab-btn.active {
1283
+ width: 100% !important; /* Take full width of the 56px strip to touch the drawer and close the gap */
1284
+ color: var(--tab-icon-active) !important;
1285
+ background-color: var(--tab-btn-active-bg) !important;
1286
+ border-top: 1px solid var(--sidebar-border) !important;
1287
+ border-bottom: 1px solid var(--sidebar-border) !important;
1288
+ border-radius: 0 !important; /* Square edges to align flat and eliminate curved gap */
1289
+ z-index: 6;
1290
+ transition: color 0.15s ease; /* Prevent transition jumps on active state toggle */
1291
+ }
1292
+
1293
+ /* Position-specific active button border & margin alignments to cover separation lines completely */
1294
+ .sidebar-tabs-strip.left .sidebar-tab-btn.active {
1295
+ border-left: 3px solid var(--tab-icon-active) !important; /* Accent bar on the left edge */
1296
+ border-right: none !important; /* Open right edge to merge with the drawer */
1297
+ margin-right: -2px !important; /* Overlap right border of tab strip completely to eliminate gap */
1298
+ margin-left: 0 !important;
1299
+ }
1300
+ .sidebar-tabs-strip.right .sidebar-tab-btn.active {
1301
+ border-left: none !important; /* Open left edge to connect directly with drawer */
1302
+ border-right: 3px solid var(--tab-icon-active) !important; /* Accent bar on the right edge */
1303
+ margin-left: -2px !important; /* Overlap left border of tab strip completely to eliminate gap */
1304
+ margin-right: 0 !important;
1305
+ }
1306
+
1307
+ /* Sidebar Window Cards */
1308
+ .sidebar-window-card {
1309
+ background-color: var(--sidebar-card-bg) !important;
1310
+ border: 1px solid var(--sidebar-card-border) !important;
1311
+ border-radius: 6px;
1312
+ padding: 10px;
1313
+ transition: all 0.15s ease;
1314
+ display: flex;
1315
+ flex-direction: column;
1316
+ gap: 8px;
1317
+ }
1318
+
1319
+ .sidebar-window-card:hover {
1320
+ border-color: rgba(56, 189, 248, 0.2);
1321
+ background-color: rgba(255, 255, 255, 0.04);
1322
+ }
1323
+
1324
+ .sidebar-window-card.active {
1325
+ background-color: var(--sidebar-card-active-bg) !important;
1326
+ border-color: var(--sidebar-card-active-border) !important;
1327
+ box-shadow: 0 0 10px rgba(56, 189, 248, 0.04);
1328
+ }
1329
+
1330
+ /* Custom Outlined Front Button */
1331
+ .btn-pill-outline {
1332
+ border: 1px solid var(--sidebar-btn-front-border) !important;
1333
+ color: var(--sidebar-btn-front-text) !important;
1334
+ background: var(--sidebar-btn-front-bg) !important;
1335
+ font-size: 0.68rem !important;
1336
+ font-weight: 500 !important;
1337
+ border-radius: 12px !important;
1338
+ padding: 2px 10px !important;
1339
+ transition: all 0.15s ease !important;
1340
+ line-height: 1 !important;
1341
+ text-decoration: none !important;
1342
+ }
1343
+
1344
+ .btn-pill-outline:hover {
1345
+ background: var(--sidebar-btn-front-hover-bg) !important;
1346
+ transform: scale(1.03);
1347
+ }
1348
+
1349
+ /* Badge (Grid / Float) */
1350
+ .badge-pill-dark {
1351
+ background-color: var(--sidebar-badge-bg) !important;
1352
+ color: var(--sidebar-badge-text) !important;
1353
+ font-size: 0.65rem;
1354
+ font-weight: 600;
1355
+ padding: 3px 8px;
1356
+ border-radius: 4px;
1357
+ text-transform: uppercase;
1358
+ }
1359
+
1360
+ /* Title text */
1361
+ .sidebar-card-title {
1362
+ font-size: 0.82rem;
1363
+ font-weight: 600;
1364
+ color: var(--sidebar-text-title);
1365
+ max-width: 130px;
1366
+ white-space: nowrap;
1367
+ overflow: hidden;
1368
+ text-overflow: ellipsis;
1369
+ }
1370
+
1371
+
1372
+ /* Disable transitions/animations when animations are disabled */
1373
+ html:not(.enable-animations) *,
1374
+ html:not(.enable-animations) *::before,
1375
+ html:not(.enable-animations) *::after {
1376
+ transition: none !important;
1377
+ animation: none !important;
1378
+ }
1379
+
1380
+ /* Dirty Close Interception Warning Modal */
1381
+ .close-warning-overlay {
1382
+ position: absolute;
1383
+ inset: 0;
1384
+ background-color: rgba(9, 11, 17, 0.7);
1385
+ backdrop-filter: blur(8px);
1386
+ display: flex;
1387
+ align-items: center;
1388
+ justify-content: center;
1389
+ z-index: 200000;
1390
+ animation: fadeIn 0.2s ease-out;
1391
+ }
1392
+
1393
+ .close-warning-modal {
1394
+ background: rgba(20, 23, 34, 0.95);
1395
+ border: 1px solid rgba(255, 255, 255, 0.08);
1396
+ box-shadow: 0 24px 48px rgba(0, 0, 0, 0.6), inset 0 1px 0 rgba(255, 255, 255, 0.05);
1397
+ border-radius: 12px;
1398
+ width: 420px;
1399
+ max-width: 90%;
1400
+ padding: 24px;
1401
+ display: flex;
1402
+ flex-direction: column;
1403
+ gap: 20px;
1404
+ font-family: 'Outfit', 'Inter', sans-serif;
1405
+ color: var(--text-primary);
1406
+ animation: scaleUp 0.2s cubic-bezier(0.34, 1.56, 0.64, 1);
1407
+ }
1408
+
1409
+ .close-warning-header {
1410
+ display: flex;
1411
+ align-items: center;
1412
+ gap: 12px;
1413
+ }
1414
+
1415
+ .close-warning-icon {
1416
+ width: 40px;
1417
+ height: 40px;
1418
+ border-radius: 50%;
1419
+ background-color: rgba(239, 68, 68, 0.1);
1420
+ color: #ef4444;
1421
+ display: flex;
1422
+ align-items: center;
1423
+ justify-content: center;
1424
+ font-size: 1.25rem;
1425
+ }
1426
+
1427
+ .close-warning-title {
1428
+ font-size: 1.1rem;
1429
+ font-weight: 600;
1430
+ margin: 0;
1431
+ }
1432
+
1433
+ .close-warning-message {
1434
+ font-size: 0.88rem;
1435
+ color: var(--text-secondary);
1436
+ line-height: 1.5;
1437
+ margin: 0;
1438
+ }
1439
+
1440
+ .close-warning-footer {
1441
+ display: flex;
1442
+ justify-content: flex-end;
1443
+ gap: 12px;
1444
+ }
1445
+
1446
+ .btn-warning-action {
1447
+ font-size: 0.82rem;
1448
+ font-weight: 500;
1449
+ padding: 8px 16px;
1450
+ border-radius: 6px;
1451
+ cursor: pointer;
1452
+ transition: all 0.15s ease;
1453
+ border: none;
1454
+ font-family: inherit;
1455
+ }
1456
+
1457
+ .btn-warning-cancel {
1458
+ background-color: rgba(255, 255, 255, 0.05);
1459
+ color: var(--text-primary);
1460
+ border: 1px solid rgba(255, 255, 255, 0.08);
1461
+ }
1462
+
1463
+ .btn-warning-cancel:hover {
1464
+ background-color: rgba(255, 255, 255, 0.1);
1465
+ }
1466
+
1467
+ .btn-warning-discard {
1468
+ background-color: #ef4444;
1469
+ color: #ffffff;
1470
+ }
1471
+
1472
+ .btn-warning-discard:hover {
1473
+ background-color: #dc2626;
1474
+ box-shadow: 0 0 12px rgba(239, 68, 68, 0.3);
1475
+ }
1476
+
1477
+ @keyframes fadeIn {
1478
+ from { opacity: 0; }
1479
+ to { opacity: 1; }
1480
+ }
1481
+
1482
+ @keyframes scaleUp {
1483
+ from { transform: scale(0.95); opacity: 0; }
1484
+ to { transform: scale(1); opacity: 1; }
1485
+ }
1486
+
1487
+ /* Stacked Modal Classes */
1488
+ .v2-modal-overlay {
1489
+ position: fixed;
1490
+ inset: 0;
1491
+ display: flex;
1492
+ align-items: center;
1493
+ justify-content: center;
1494
+ z-index: 10000;
1495
+ animation: fadeIn 0.18s ease-out;
1496
+ }
1497
+
1498
+ .v2-modal-curtain {
1499
+ position: absolute;
1500
+ inset: 0;
1501
+ background-color: rgba(9, 11, 17, 0.65);
1502
+ backdrop-filter: blur(6px);
1503
+ }
1504
+
1505
+ .v2-modal-window {
1506
+ position: relative;
1507
+ background: rgba(20, 23, 34, 0.95);
1508
+ border: 1px solid rgba(255, 255, 255, 0.08);
1509
+ box-shadow: 0 24px 48px rgba(0, 0, 0, 0.6), inset 0 1px 0 rgba(255, 255, 255, 0.05);
1510
+ border-radius: 12px;
1511
+ display: flex;
1512
+ flex-direction: column;
1513
+ color: var(--text-primary);
1514
+ max-width: 90%;
1515
+ animation: scaleUp 0.18s cubic-bezier(0.34, 1.56, 0.64, 1);
1516
+ overflow: hidden;
1517
+ }
1518
+
1519
+ .v2-modal-header {
1520
+ display: flex;
1521
+ align-items: center;
1522
+ padding: 12px 20px;
1523
+ border-bottom: 1px solid rgba(255, 255, 255, 0.06);
1524
+ background-color: rgba(0, 0, 0, 0.15);
1525
+ }
1526
+
1527
+ .v2-modal-icon {
1528
+ margin-right: 10px;
1529
+ font-size: 1.1rem;
1530
+ display: flex;
1531
+ align-items: center;
1532
+ }
1533
+
1534
+ .v2-modal-title {
1535
+ font-size: 1rem;
1536
+ font-weight: 600;
1537
+ margin: 0;
1538
+ flex-grow: 1;
1539
+ }
1540
+
1541
+ .v2-modal-close-button {
1542
+ background: transparent;
1543
+ border: none;
1544
+ color: var(--text-secondary);
1545
+ cursor: pointer;
1546
+ padding: 4px;
1547
+ display: flex;
1548
+ align-items: center;
1549
+ justify-content: center;
1550
+ border-radius: 4px;
1551
+ transition: all 0.15s ease;
1552
+ }
1553
+
1554
+ .v2-modal-close-button:hover {
1555
+ background-color: rgba(255, 255, 255, 0.08);
1556
+ color: #fff;
1557
+ }
1558
+
1559
+ .v2-modal-body {
1560
+ padding: 10px;
1561
+ overflow: auto;
1562
+ }
1563
+
1564
+ /* Modal Sizes */
1565
+ .v2-modal-size-small {
1566
+ width: 360px;
1567
+ max-height: 270px; /* 4:3 aspect ratio */
1568
+ }
1569
+ .v2-modal-size-medium {
1570
+ width: 560px;
1571
+ max-height: 420px; /* ~4:3 aspect ratio */
1572
+ }
1573
+ .v2-modal-size-large {
1574
+ width: 800px;
1575
+ max-height: 500px; /* ~16:10 aspect ratio */
1576
+ }
1577
+ .v2-modal-size-fullscreen {
1578
+ width: 98vw;
1579
+ height: 96vh;
1580
+ }
1581
+ .v2-modal-size-auto {
1582
+ width: auto;
1583
+ min-width: 300px;
1584
+ max-height: 80vh; /* Safe aspect ratio threshold for auto content */
1585
+ }
1586
+
1587
+ /* Side Drawer Panels */
1588
+ .v2-side-panel {
1589
+ position: absolute;
1590
+ top: 0;
1591
+ bottom: 0;
1592
+ width: 400px;
1593
+ background: rgba(20, 23, 34, 0.88);
1594
+ backdrop-filter: blur(20px) saturate(180%);
1595
+ -webkit-backdrop-filter: blur(20px) saturate(180%);
1596
+ border-right: 1px solid rgba(255, 255, 255, 0.08);
1597
+ z-index: 9000;
1598
+ box-shadow: 10px 0 30px rgba(0, 0, 0, 0.4);
1599
+ transition: transform 0.25s cubic-bezier(0.16, 1, 0.3, 1);
1600
+ display: flex;
1601
+ flex-direction: column;
1602
+ }
1603
+
1604
+ .v2-side-panel-right {
1605
+ right: 0;
1606
+ border-right: none;
1607
+ border-left: 1px solid rgba(255, 255, 255, 0.08);
1608
+ box-shadow: -10px 0 30px rgba(0, 0, 0, 0.4);
1609
+ }
1610
+
1611
+ .v2-side-panel-left {
1612
+ left: 0;
1613
+ }
1614
+
1615
+ .v2-side-panel-window {
1616
+ display: flex;
1617
+ flex-direction: column;
1618
+ height: 100%;
1619
+ width: 100%;
1620
+ }
1621
+
1622
+ .v2-side-panel-header {
1623
+ display: flex;
1624
+ align-items: center;
1625
+ padding: 12px 20px;
1626
+ border-bottom: 1px solid rgba(255, 255, 255, 0.06);
1627
+ background-color: rgba(0, 0, 0, 0.15);
1628
+ min-height: 44px;
1629
+ }
1630
+
1631
+ .v2-side-panel-icon {
1632
+ margin-right: 10px;
1633
+ font-size: 1.1rem;
1634
+ display: flex;
1635
+ align-items: center;
1636
+ }
1637
+
1638
+ .v2-side-panel-title {
1639
+ font-size: 0.95rem;
1640
+ font-weight: 600;
1641
+ margin: 0;
1642
+ flex-grow: 1;
1643
+ color: var(--text-primary);
1644
+ }
1645
+
1646
+ .v2-side-panel-close-button {
1647
+ background: transparent;
1648
+ border: none;
1649
+ color: var(--text-secondary);
1650
+ cursor: pointer;
1651
+ padding: 4px;
1652
+ display: flex;
1653
+ align-items: center;
1654
+ justify-content: center;
1655
+ border-radius: 4px;
1656
+ transition: all 0.15s ease;
1657
+ }
1658
+
1659
+ .v2-side-panel-close-button:hover {
1660
+ background-color: rgba(255, 255, 255, 0.08);
1661
+ color: #fff;
1662
+ }
1663
+
1664
+ .v2-side-panel-body {
1665
+ flex-grow: 1;
1666
+ overflow-y: auto;
1667
+ padding: 10px;
1668
+ }
1669
+
1670
+ .v2-side-panel-left.v2-side-panel-visible {
1671
+ animation: slideInLeft 0.25s cubic-bezier(0.16, 1, 0.3, 1);
1672
+ }
1673
+
1674
+ .v2-side-panel-right.v2-side-panel-visible {
1675
+ animation: slideInRight 0.25s cubic-bezier(0.16, 1, 0.3, 1);
1676
+ }
1677
+
1678
+ @keyframes slideInLeft {
1679
+ from { transform: translateX(-100%); }
1680
+ to { transform: translateX(0); }
1681
+ }
1682
+
1683
+ @keyframes slideInRight {
1684
+ from { transform: translateX(100%); }
1685
+ to { transform: translateX(0); }
1686
+ }
1687
+
1688
+ /* Outer Workspace Edge Drop Zones */
1689
+ .workspace-edge-trigger {
1690
+ position: absolute;
1691
+ z-index: 9999;
1692
+ background-color: rgba(0, 123, 255, 0.01);
1693
+ transition: background-color 0.2s;
1694
+ }
1695
+
1696
+ .workspace-edge-trigger:hover {
1697
+ background-color: rgba(0, 123, 255, 0.12);
1698
+ }
1699
+
1700
+ .edge-trigger-left {
1701
+ left: 0;
1702
+ top: 0;
1703
+ bottom: 0;
1704
+ width: 24px;
1705
+ }
1706
+
1707
+ .edge-trigger-right {
1708
+ right: 0;
1709
+ top: 0;
1710
+ bottom: 0;
1711
+ width: 24px;
1712
+ }
1713
+
1714
+ .edge-trigger-top {
1715
+ top: 0;
1716
+ left: 24px;
1717
+ right: 24px;
1718
+ height: 24px;
1719
+ }
1720
+
1721
+ .edge-trigger-bottom {
1722
+ bottom: 0;
1723
+ left: 24px;
1724
+ right: 24px;
1725
+ height: 24px;
1726
+ }
1727
+
1728
+ .workspace-edge-preview {
1729
+ position: absolute;
1730
+ z-index: 9998;
1731
+ background-color: rgba(0, 123, 255, 0.2);
1732
+ border: 2px dashed #007bff;
1733
+ pointer-events: none;
1734
+ animation: fadeIn 0.15s ease-out;
1735
+ }
1736
+
1737
+ .edge-preview-left {
1738
+ left: 0;
1739
+ top: 0;
1740
+ bottom: 0;
1741
+ width: 30%;
1742
+ }
1743
+
1744
+ .edge-preview-right {
1745
+ right: 0;
1746
+ top: 0;
1747
+ bottom: 0;
1748
+ width: 30%;
1749
+ }
1750
+
1751
+ .edge-preview-top {
1752
+ top: 0;
1753
+ left: 0;
1754
+ right: 0;
1755
+ height: 30%;
1756
+ }
1757
+
1758
+ .edge-preview-bottom {
1759
+ bottom: 0;
1760
+ left: 0;
1761
+ right: 0;
1762
+ height: 30%;
1763
+ }
1764
+
1765
+
1766
+