@qodalis/cli 2.0.0-beta.1

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,817 @@
1
+ /* Qodalis CLI Panel — shared styles for React, Vue, and vanilla JS
2
+ *
3
+ * Override with CSS custom properties:
4
+ * --cli-panel-bg: #111827
5
+ * --cli-panel-header-bg: #1f2937
6
+ * --cli-panel-border: #374151
7
+ * --cli-panel-text: rgba(255, 255, 255, 0.87)
8
+ * --cli-panel-text-secondary: rgba(255, 255, 255, 0.6)
9
+ * --cli-panel-accent: #818cf8
10
+ * --cli-btn-hover-bg: rgba(129, 140, 248, 0.12)
11
+ * --cli-btn-active-bg: rgba(129, 140, 248, 0.2)
12
+ */
13
+
14
+ /* ─── Wrapper ────────────────────────────────────────────── */
15
+
16
+ .cli-panel-wrapper {
17
+ position: fixed;
18
+ bottom: 0;
19
+ left: 0;
20
+ right: 0;
21
+ width: 100vw;
22
+ transform: translateY(0);
23
+ transition: transform 0.3s cubic-bezier(0.4, 0, 0.2, 1);
24
+ background-color: var(--cli-panel-bg, #111827);
25
+ color: var(--cli-panel-text, rgba(255, 255, 255, 0.87));
26
+ border-top: 1px solid var(--cli-panel-border, #374151);
27
+ display: flex;
28
+ flex-direction: column;
29
+ z-index: 1000;
30
+ font-family:
31
+ -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial,
32
+ sans-serif;
33
+ box-shadow: 0 -4px 20px rgba(0, 0, 0, 0.25);
34
+ }
35
+
36
+ .cli-panel-wrapper.collapsed {
37
+ transform: translateY(calc(100% - 60px));
38
+ }
39
+
40
+ .cli-panel-wrapper.resizing {
41
+ transition: none;
42
+ user-select: none;
43
+ }
44
+
45
+ /* ─── Header ─────────────────────────────────────────────── */
46
+
47
+ .cli-panel-header {
48
+ background-color: var(--cli-panel-header-bg, #1f2937);
49
+ display: flex;
50
+ flex-direction: column;
51
+ position: relative;
52
+ flex-shrink: 0;
53
+ }
54
+
55
+ .cli-panel-resize-bar {
56
+ position: absolute;
57
+ top: -6px;
58
+ left: 0;
59
+ right: 0;
60
+ height: 12px;
61
+ cursor: ns-resize;
62
+ display: flex;
63
+ align-items: center;
64
+ justify-content: center;
65
+ z-index: 2;
66
+ }
67
+
68
+ .cli-panel-resize-grip {
69
+ width: 32px;
70
+ height: 4px;
71
+ border-radius: 2px;
72
+ background: var(--cli-panel-text-secondary, rgba(255, 255, 255, 0.3));
73
+ opacity: 0;
74
+ transition: opacity 0.2s ease;
75
+ }
76
+
77
+ .cli-panel-resize-bar:hover .cli-panel-resize-grip {
78
+ opacity: 1;
79
+ }
80
+
81
+ .cli-panel-header-content {
82
+ height: 60px;
83
+ display: flex;
84
+ flex-direction: row;
85
+ gap: 1rem;
86
+ align-items: center;
87
+ border-bottom: 1px solid var(--cli-panel-border, #374151);
88
+ padding: 0 1rem;
89
+ }
90
+
91
+ .cli-panel-title {
92
+ font-size: 0.95rem;
93
+ display: flex;
94
+ gap: 0.5rem;
95
+ justify-content: center;
96
+ align-items: center;
97
+ margin: 0;
98
+ font-weight: 600;
99
+ color: var(--cli-panel-text, rgba(255, 255, 255, 0.87));
100
+ }
101
+
102
+ .cli-panel-title-icon {
103
+ color: var(--cli-panel-accent, #818cf8);
104
+ display: flex;
105
+ align-items: center;
106
+ }
107
+
108
+ .cli-panel-action-buttons {
109
+ display: flex;
110
+ flex-direction: row;
111
+ gap: 0.35rem;
112
+ margin-left: auto;
113
+ }
114
+
115
+ .cli-panel-btn {
116
+ appearance: none;
117
+ background: transparent;
118
+ border: none;
119
+ color: var(--cli-panel-text-secondary, rgba(255, 255, 255, 0.6));
120
+ cursor: pointer;
121
+ width: 40px;
122
+ height: 40px;
123
+ border-radius: 50%;
124
+ display: inline-flex;
125
+ align-items: center;
126
+ justify-content: center;
127
+ padding: 0;
128
+ transition:
129
+ background-color 0.2s ease,
130
+ color 0.2s ease;
131
+ }
132
+
133
+ .cli-panel-btn svg {
134
+ flex-shrink: 0;
135
+ }
136
+
137
+ .cli-panel-btn:hover:not(:disabled) {
138
+ color: var(--cli-panel-text, rgba(255, 255, 255, 0.87));
139
+ background-color: var(--cli-btn-hover-bg, rgba(129, 140, 248, 0.12));
140
+ }
141
+
142
+ .cli-panel-btn:active:not(:disabled) {
143
+ background-color: var(--cli-btn-active-bg, rgba(129, 140, 248, 0.2));
144
+ }
145
+
146
+ .cli-panel-btn:disabled {
147
+ opacity: 0.3;
148
+ cursor: not-allowed;
149
+ }
150
+
151
+ /* ─── Content ────────────────────────────────────────────── */
152
+
153
+ .cli-panel-content {
154
+ flex: 1;
155
+ min-height: 0;
156
+ overflow: hidden;
157
+ display: flex;
158
+ flex-direction: column;
159
+ }
160
+
161
+ /* ─── Tabs ───────────────────────────────────────────────── */
162
+
163
+ .cli-panel-tabs {
164
+ background-color: var(--cli-panel-header-bg, #1f2937);
165
+ display: flex;
166
+ align-items: center;
167
+ height: 38px;
168
+ padding: 0 8px;
169
+ gap: 4px;
170
+ border-bottom: 1px solid var(--cli-panel-border, #374151);
171
+ overflow-x: auto;
172
+ overflow-y: hidden;
173
+ flex-shrink: 0;
174
+ }
175
+
176
+ .cli-panel-tabs::-webkit-scrollbar {
177
+ height: 2px;
178
+ }
179
+ .cli-panel-tabs::-webkit-scrollbar-thumb {
180
+ background: var(--cli-panel-text-secondary, rgba(255, 255, 255, 0.3));
181
+ border-radius: 1px;
182
+ }
183
+
184
+ .cli-panel-tab-list {
185
+ list-style: none;
186
+ margin: 0;
187
+ padding: 0;
188
+ display: flex;
189
+ gap: 2px;
190
+ align-items: stretch;
191
+ height: 100%;
192
+ }
193
+
194
+ .cli-panel-tab {
195
+ display: flex;
196
+ align-items: center;
197
+ gap: 6px;
198
+ padding: 0 12px;
199
+ cursor: pointer;
200
+ background: transparent;
201
+ border: none;
202
+ border-top: 2px solid transparent;
203
+ color: var(--cli-panel-text-secondary, rgba(255, 255, 255, 0.6));
204
+ font-size: 0.8rem;
205
+ font-family: inherit;
206
+ white-space: nowrap;
207
+ transition:
208
+ background-color 0.15s ease,
209
+ color 0.15s ease,
210
+ border-color 0.15s ease;
211
+ height: 100%;
212
+ }
213
+
214
+ .cli-panel-tab:hover:not(.active) {
215
+ background-color: var(--cli-btn-hover-bg, rgba(129, 140, 248, 0.12));
216
+ color: var(--cli-panel-text, rgba(255, 255, 255, 0.87));
217
+ }
218
+
219
+ .cli-panel-tab.active {
220
+ background-color: var(--cli-panel-bg, #111827);
221
+ color: var(--cli-panel-text, rgba(255, 255, 255, 0.87));
222
+ border-top-color: var(--cli-panel-accent, #818cf8);
223
+ }
224
+
225
+ .cli-panel-tab-title {
226
+ pointer-events: none;
227
+ }
228
+
229
+ .cli-panel-tab-rename-input {
230
+ appearance: none;
231
+ background: var(--cli-panel-bg, #111827);
232
+ border: 1px solid var(--cli-panel-accent, #818cf8);
233
+ color: var(--cli-panel-text, rgba(255, 255, 255, 0.87));
234
+ font-size: 0.8rem;
235
+ font-family: inherit;
236
+ padding: 2px 6px;
237
+ border-radius: 3px;
238
+ outline: none;
239
+ width: 120px;
240
+ height: 22px;
241
+ }
242
+
243
+ .cli-panel-tab-close-btn {
244
+ appearance: none;
245
+ background: none;
246
+ border: none;
247
+ color: var(--cli-panel-text-secondary, rgba(255, 255, 255, 0.4));
248
+ cursor: pointer;
249
+ font-size: 1rem;
250
+ line-height: 1;
251
+ padding: 0 2px;
252
+ border-radius: 3px;
253
+ transition:
254
+ background-color 0.15s ease,
255
+ color 0.15s ease;
256
+ }
257
+
258
+ .cli-panel-tab-close-btn:hover {
259
+ color: var(--cli-panel-text, rgba(255, 255, 255, 0.87));
260
+ background-color: rgba(255, 255, 255, 0.1);
261
+ }
262
+
263
+ .cli-panel-add-tab {
264
+ appearance: none;
265
+ background: transparent;
266
+ border: 1px dashed var(--cli-panel-text-secondary, rgba(255, 255, 255, 0.3));
267
+ color: var(--cli-panel-text-secondary, rgba(255, 255, 255, 0.5));
268
+ cursor: pointer;
269
+ font-size: 1rem;
270
+ line-height: 1;
271
+ width: 28px;
272
+ height: 24px;
273
+ border-radius: 4px;
274
+ display: flex;
275
+ align-items: center;
276
+ justify-content: center;
277
+ flex-shrink: 0;
278
+ transition:
279
+ background-color 0.15s ease,
280
+ color 0.15s ease,
281
+ border-color 0.15s ease;
282
+ }
283
+
284
+ .cli-panel-add-tab:hover {
285
+ background-color: var(--cli-btn-hover-bg, rgba(129, 140, 248, 0.12));
286
+ color: var(--cli-panel-text, rgba(255, 255, 255, 0.87));
287
+ border-color: var(--cli-panel-text, rgba(255, 255, 255, 0.5));
288
+ }
289
+
290
+ /* ─── Context menu ───────────────────────────────────────── */
291
+
292
+ .cli-panel-context-menu {
293
+ position: fixed;
294
+ z-index: 1100;
295
+ background-color: var(--cli-panel-header-bg, #1f2937);
296
+ border: 1px solid var(--cli-panel-border, #374151);
297
+ border-radius: 6px;
298
+ padding: 4px 0;
299
+ min-width: 180px;
300
+ box-shadow: 0 4px 16px rgba(0, 0, 0, 0.4);
301
+ font-family: inherit;
302
+ }
303
+
304
+ .cli-panel-context-menu-item {
305
+ appearance: none;
306
+ background: transparent;
307
+ border: none;
308
+ color: var(--cli-panel-text, rgba(255, 255, 255, 0.87));
309
+ cursor: pointer;
310
+ display: block;
311
+ width: 100%;
312
+ text-align: left;
313
+ padding: 6px 14px;
314
+ font-size: 0.82rem;
315
+ font-family: inherit;
316
+ transition: background-color 0.1s ease;
317
+ }
318
+
319
+ .cli-panel-context-menu-item:hover:not(:disabled) {
320
+ background-color: var(--cli-btn-hover-bg, rgba(129, 140, 248, 0.12));
321
+ }
322
+
323
+ .cli-panel-context-menu-item:disabled {
324
+ color: var(--cli-panel-text-secondary, rgba(255, 255, 255, 0.3));
325
+ cursor: not-allowed;
326
+ }
327
+
328
+ .cli-panel-context-menu-item.destructive {
329
+ color: #f87171;
330
+ }
331
+ .cli-panel-context-menu-item.destructive:hover:not(:disabled) {
332
+ background-color: rgba(248, 113, 113, 0.12);
333
+ }
334
+
335
+ .cli-panel-context-menu-separator {
336
+ height: 1px;
337
+ background-color: var(--cli-panel-border, #374151);
338
+ margin: 4px 0;
339
+ }
340
+
341
+ /* ─── Terminal instances ─────────────────────────────────── */
342
+
343
+ .cli-panel-instances {
344
+ flex: 1;
345
+ min-height: 0;
346
+ overflow: hidden;
347
+ }
348
+
349
+ .cli-panel-instance {
350
+ height: 100%;
351
+ }
352
+
353
+ .cli-panel-panes-container {
354
+ display: flex;
355
+ height: 100%;
356
+ }
357
+
358
+ .cli-panel-panes-container.resizing {
359
+ user-select: none;
360
+ cursor: ew-resize;
361
+ }
362
+
363
+ .cli-panel-pane {
364
+ position: relative;
365
+ height: 100%;
366
+ min-width: 0;
367
+ overflow: hidden;
368
+ }
369
+
370
+ .cli-panel-pane.active-pane {
371
+ outline: 1px solid var(--cli-panel-accent, #818cf8);
372
+ outline-offset: -1px;
373
+ }
374
+
375
+ .cli-panel-pane:hover .cli-panel-pane-close-btn {
376
+ opacity: 1;
377
+ }
378
+
379
+ .cli-panel-pane-close-btn {
380
+ appearance: none;
381
+ position: absolute;
382
+ top: 4px;
383
+ right: 4px;
384
+ z-index: 10;
385
+ background: var(--cli-panel-header-bg, #1f2937);
386
+ border: 1px solid var(--cli-panel-border, #374151);
387
+ color: var(--cli-panel-text-secondary, rgba(255, 255, 255, 0.6));
388
+ cursor: pointer;
389
+ font-size: 0.9rem;
390
+ line-height: 1;
391
+ width: 22px;
392
+ height: 22px;
393
+ border-radius: 3px;
394
+ display: flex;
395
+ align-items: center;
396
+ justify-content: center;
397
+ opacity: 0;
398
+ transition:
399
+ opacity 0.15s ease,
400
+ background-color 0.15s ease,
401
+ color 0.15s ease;
402
+ }
403
+
404
+ .cli-panel-pane-close-btn:hover {
405
+ color: var(--cli-panel-text, rgba(255, 255, 255, 0.87));
406
+ background-color: rgba(255, 255, 255, 0.1);
407
+ }
408
+
409
+ /* ─── Pane divider ───────────────────────────────────────── */
410
+
411
+ .cli-panel-pane-divider {
412
+ width: 6px;
413
+ cursor: ew-resize;
414
+ display: flex;
415
+ align-items: center;
416
+ justify-content: center;
417
+ flex-shrink: 0;
418
+ background: transparent;
419
+ transition: background-color 0.15s ease;
420
+ }
421
+
422
+ .cli-panel-pane-divider:hover {
423
+ background-color: var(--cli-panel-accent, #818cf8);
424
+ }
425
+
426
+ .cli-panel-pane-divider-grip {
427
+ width: 2px;
428
+ height: 24px;
429
+ border-radius: 1px;
430
+ background-color: var(--cli-panel-text-secondary, rgba(255, 255, 255, 0.3));
431
+ transition: background-color 0.15s ease;
432
+ }
433
+
434
+ .cli-panel-pane-divider:hover .cli-panel-pane-divider-grip {
435
+ background-color: var(--cli-panel-text, rgba(255, 255, 255, 0.87));
436
+ }
437
+
438
+ /* ─── Position: top ─────────────────────────────────────── */
439
+
440
+ /* Header at BOTTOM (column-reverse) so it stays visible when collapsed upward */
441
+ .cli-panel-wrapper[data-position="top"] {
442
+ bottom: auto;
443
+ top: 0;
444
+ border-top: none;
445
+ border-bottom: 1px solid var(--cli-panel-border, #374151);
446
+ box-shadow: 0 4px 20px rgba(0, 0, 0, 0.25);
447
+ flex-direction: column-reverse;
448
+ }
449
+
450
+ .cli-panel-wrapper[data-position="top"].collapsed {
451
+ transform: translateY(calc(-100% + 60px));
452
+ }
453
+
454
+ .cli-panel-wrapper[data-position="top"] .cli-panel-header-content {
455
+ border-bottom: none;
456
+ border-top: 1px solid var(--cli-panel-border, #374151);
457
+ }
458
+
459
+ .cli-panel-wrapper[data-position="top"] .cli-panel-resize-bar {
460
+ top: auto;
461
+ bottom: -6px;
462
+ cursor: ns-resize;
463
+ }
464
+
465
+ /* ─── Position: left ────────────────────────────────────── */
466
+
467
+ /* Header at RIGHT (row-reverse) so it stays visible when collapsed leftward */
468
+ .cli-panel-wrapper[data-position="left"] {
469
+ bottom: 0;
470
+ top: 0;
471
+ left: 0;
472
+ right: auto;
473
+ width: auto;
474
+ height: 100vh !important;
475
+ border-top: none;
476
+ border-right: 1px solid var(--cli-panel-border, #374151);
477
+ box-shadow: 4px 0 20px rgba(0, 0, 0, 0.25);
478
+ flex-direction: row-reverse;
479
+ }
480
+
481
+ .cli-panel-wrapper[data-position="left"].collapsed {
482
+ transform: translateX(calc(-100% + 60px));
483
+ }
484
+
485
+ .cli-panel-wrapper[data-position="left"] .cli-panel-header {
486
+ width: 60px;
487
+ flex-shrink: 0;
488
+ flex-direction: column;
489
+ }
490
+
491
+ .cli-panel-wrapper[data-position="left"] .cli-panel-header-content {
492
+ height: auto;
493
+ flex: 1;
494
+ flex-direction: column;
495
+ padding: 1rem 0;
496
+ border-bottom: none;
497
+ border-left: 1px solid var(--cli-panel-border, #374151);
498
+ }
499
+
500
+ .cli-panel-wrapper[data-position="left"] .cli-panel-title {
501
+ writing-mode: vertical-rl;
502
+ text-orientation: mixed;
503
+ }
504
+
505
+ .cli-panel-wrapper[data-position="left"] .cli-panel-action-buttons {
506
+ flex-direction: column;
507
+ margin-left: 0;
508
+ margin-top: auto;
509
+ }
510
+
511
+ .cli-panel-wrapper[data-position="left"] .cli-panel-resize-bar {
512
+ position: absolute;
513
+ top: 0;
514
+ bottom: 0;
515
+ left: auto;
516
+ right: -6px;
517
+ width: 12px;
518
+ height: auto;
519
+ cursor: ew-resize;
520
+ }
521
+
522
+ .cli-panel-wrapper[data-position="left"] .cli-panel-resize-grip {
523
+ width: 4px;
524
+ height: 32px;
525
+ }
526
+
527
+ .cli-panel-wrapper[data-position="left"] .cli-panel-content {
528
+ flex: 1;
529
+ min-width: 0;
530
+ }
531
+
532
+ /* ─── Position: right ───────────────────────────────────── */
533
+
534
+ /* Header at LEFT (row) so it stays visible when collapsed rightward */
535
+ .cli-panel-wrapper[data-position="right"] {
536
+ bottom: 0;
537
+ top: 0;
538
+ left: auto;
539
+ right: 0;
540
+ width: auto;
541
+ height: 100vh !important;
542
+ border-top: none;
543
+ border-left: 1px solid var(--cli-panel-border, #374151);
544
+ box-shadow: -4px 0 20px rgba(0, 0, 0, 0.25);
545
+ flex-direction: row;
546
+ }
547
+
548
+ .cli-panel-wrapper[data-position="right"].collapsed {
549
+ transform: translateX(calc(100% - 60px));
550
+ }
551
+
552
+ .cli-panel-wrapper[data-position="right"] .cli-panel-header {
553
+ width: 60px;
554
+ flex-shrink: 0;
555
+ flex-direction: column;
556
+ }
557
+
558
+ .cli-panel-wrapper[data-position="right"] .cli-panel-header-content {
559
+ height: auto;
560
+ flex: 1;
561
+ flex-direction: column;
562
+ padding: 1rem 0;
563
+ border-bottom: none;
564
+ border-right: 1px solid var(--cli-panel-border, #374151);
565
+ }
566
+
567
+ .cli-panel-wrapper[data-position="right"] .cli-panel-title {
568
+ writing-mode: vertical-rl;
569
+ text-orientation: mixed;
570
+ }
571
+
572
+ .cli-panel-wrapper[data-position="right"] .cli-panel-action-buttons {
573
+ flex-direction: column;
574
+ margin-left: 0;
575
+ margin-top: auto;
576
+ }
577
+
578
+ .cli-panel-wrapper[data-position="right"] .cli-panel-resize-bar {
579
+ position: absolute;
580
+ top: 0;
581
+ bottom: 0;
582
+ right: auto;
583
+ left: -6px;
584
+ width: 12px;
585
+ height: auto;
586
+ cursor: ew-resize;
587
+ }
588
+
589
+ .cli-panel-wrapper[data-position="right"] .cli-panel-resize-grip {
590
+ width: 4px;
591
+ height: 32px;
592
+ }
593
+
594
+ .cli-panel-wrapper[data-position="right"] .cli-panel-content {
595
+ flex: 1;
596
+ min-width: 0;
597
+ }
598
+
599
+ /* ─── Resizable / Closable data-attribute toggles ───────── */
600
+
601
+ .cli-panel-wrapper[data-resizable="false"] .cli-panel-resize-bar {
602
+ display: none;
603
+ }
604
+
605
+ .cli-panel-wrapper[data-closable="false"] .cli-panel-btn-close {
606
+ display: none;
607
+ }
608
+
609
+ /* ─── Hide tab ──────────────────────────────────────────── */
610
+
611
+ .cli-panel-hide-tab {
612
+ position: fixed;
613
+ z-index: 1000;
614
+ display: flex;
615
+ align-items: center;
616
+ gap: 6px;
617
+ background-color: var(--cli-panel-header-bg, #1f2937);
618
+ border: 1px solid var(--cli-panel-border, #374151);
619
+ color: var(--cli-panel-text-secondary, rgba(255, 255, 255, 0.6));
620
+ cursor: pointer;
621
+ padding: 6px 12px;
622
+ appearance: none;
623
+ font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif;
624
+ font-size: 0.8rem;
625
+ font-weight: 600;
626
+ transition: transform 0.2s ease, opacity 0.2s ease, color 0.2s ease, background-color 0.2s ease, box-shadow 0.2s ease;
627
+ box-shadow: 0 2px 8px rgba(0, 0, 0, 0.3);
628
+ opacity: 0.85;
629
+ }
630
+
631
+ .cli-panel-hide-tab:hover {
632
+ transform: scale(1.05);
633
+ opacity: 1;
634
+ color: var(--cli-panel-text, rgba(255, 255, 255, 0.87));
635
+ background-color: var(--cli-panel-bg, #111827);
636
+ box-shadow: 0 4px 16px rgba(0, 0, 0, 0.4);
637
+ }
638
+
639
+ .cli-panel-hide-tab:active {
640
+ transform: scale(0.97);
641
+ }
642
+
643
+ .cli-panel-hide-tab svg {
644
+ flex-shrink: 0;
645
+ }
646
+
647
+ .cli-panel-hide-tab .cli-panel-hide-tab-icon {
648
+ color: var(--cli-panel-accent, #818cf8);
649
+ }
650
+
651
+ .cli-panel-hide-tab:hover .cli-panel-hide-tab-icon {
652
+ color: var(--cli-panel-accent, #818cf8);
653
+ }
654
+
655
+ .cli-panel-hide-tab .cli-panel-hide-tab-label {
656
+ letter-spacing: 0.03em;
657
+ }
658
+
659
+ /* Arrow pulse on hover */
660
+ @keyframes cli-hide-tab-pulse {
661
+ 0%, 100% { transform: translateX(0); }
662
+ 50% { transform: translateX(3px); }
663
+ }
664
+
665
+ @keyframes cli-hide-tab-pulse-vertical {
666
+ 0%, 100% { transform: translateY(0); }
667
+ 50% { transform: translateY(3px); }
668
+ }
669
+
670
+ .cli-panel-hide-tab:hover .cli-panel-hide-tab-arrow {
671
+ animation: cli-hide-tab-pulse 0.6s ease infinite;
672
+ }
673
+
674
+ .cli-panel-hide-tab[data-position="left"]:hover .cli-panel-hide-tab-arrow,
675
+ .cli-panel-hide-tab[data-position="right"]:hover .cli-panel-hide-tab-arrow {
676
+ animation: cli-hide-tab-pulse-vertical 0.6s ease infinite;
677
+ }
678
+
679
+ /* ─── Hide tab: bottom position ─────────────────────────── */
680
+
681
+ .cli-panel-hide-tab[data-position="bottom"] {
682
+ bottom: 0;
683
+ border-bottom: none;
684
+ border-radius: 8px 8px 0 0;
685
+ }
686
+
687
+ .cli-panel-hide-tab[data-position="bottom"][data-hide-align="start"] { left: 16px; }
688
+ .cli-panel-hide-tab[data-position="bottom"][data-hide-align="center"] { left: 50%; transform: translateX(-50%); }
689
+ .cli-panel-hide-tab[data-position="bottom"][data-hide-align="center"]:hover { transform: translateX(-50%) scale(1.05); }
690
+ .cli-panel-hide-tab[data-position="bottom"][data-hide-align="end"] { right: 16px; }
691
+
692
+ /* ─── Hide tab: top position ────────────────────────────── */
693
+
694
+ .cli-panel-hide-tab[data-position="top"] {
695
+ top: 0;
696
+ border-top: none;
697
+ border-radius: 0 0 8px 8px;
698
+ }
699
+
700
+ .cli-panel-hide-tab[data-position="top"][data-hide-align="start"] { left: 16px; }
701
+ .cli-panel-hide-tab[data-position="top"][data-hide-align="center"] { left: 50%; transform: translateX(-50%); }
702
+ .cli-panel-hide-tab[data-position="top"][data-hide-align="center"]:hover { transform: translateX(-50%) scale(1.05); }
703
+ .cli-panel-hide-tab[data-position="top"][data-hide-align="end"] { right: 16px; }
704
+
705
+ /* ─── Hide tab: left position ───────────────────────────── */
706
+
707
+ .cli-panel-hide-tab[data-position="left"] {
708
+ left: 0;
709
+ border-left: none;
710
+ border-radius: 0 8px 8px 0;
711
+ }
712
+
713
+ .cli-panel-hide-tab[data-position="left"][data-hide-align="start"] { top: 16px; }
714
+ .cli-panel-hide-tab[data-position="left"][data-hide-align="center"] { top: 50%; transform: translateY(-50%); }
715
+ .cli-panel-hide-tab[data-position="left"][data-hide-align="center"]:hover { transform: translateY(-50%) scale(1.05); }
716
+ .cli-panel-hide-tab[data-position="left"][data-hide-align="end"] { bottom: 16px; }
717
+
718
+ /* ─── Hide tab: right position ──────────────────────────── */
719
+
720
+ .cli-panel-hide-tab[data-position="right"] {
721
+ right: 0;
722
+ border-right: none;
723
+ border-radius: 8px 0 0 8px;
724
+ }
725
+
726
+ .cli-panel-hide-tab[data-position="right"][data-hide-align="start"] { top: 16px; }
727
+ .cli-panel-hide-tab[data-position="right"][data-hide-align="center"] { top: 50%; transform: translateY(-50%); }
728
+ .cli-panel-hide-tab[data-position="right"][data-hide-align="center"]:hover { transform: translateY(-50%) scale(1.05); }
729
+ .cli-panel-hide-tab[data-position="right"][data-hide-align="end"] { bottom: 16px; }
730
+
731
+ /* ─── Hideable data-attribute toggle ────────────────────── */
732
+
733
+ .cli-panel-wrapper[data-hideable="false"] .cli-panel-btn-hide {
734
+ display: none;
735
+ }
736
+
737
+ /* ─── Position dropdown ───────────────────────────────────── */
738
+
739
+ .cli-panel-btn-position-wrapper {
740
+ position: relative;
741
+ }
742
+
743
+ .cli-panel-position-dropdown {
744
+ position: absolute;
745
+ bottom: calc(100% + 4px);
746
+ top: auto;
747
+ right: 0;
748
+ left: auto;
749
+ background-color: var(--cli-panel-header-bg, #1f2937);
750
+ border: 1px solid var(--cli-panel-border, #374151);
751
+ border-radius: 6px;
752
+ box-shadow: 0 8px 24px rgba(0, 0, 0, 0.4);
753
+ z-index: 1100;
754
+ min-width: 120px;
755
+ overflow: hidden;
756
+ display: flex;
757
+ flex-direction: column;
758
+ }
759
+
760
+ .cli-panel-position-dropdown-item {
761
+ appearance: none;
762
+ background: transparent;
763
+ border: none;
764
+ color: var(--cli-panel-text-secondary, rgba(255, 255, 255, 0.6));
765
+ cursor: pointer;
766
+ display: flex;
767
+ align-items: center;
768
+ gap: 8px;
769
+ padding: 8px 12px;
770
+ font-size: 0.85rem;
771
+ font-family: inherit;
772
+ width: 100%;
773
+ text-align: left;
774
+ transition: background-color 0.15s ease, color 0.15s ease;
775
+ }
776
+
777
+ .cli-panel-position-dropdown-item:hover {
778
+ background-color: var(--cli-btn-hover-bg, rgba(129, 140, 248, 0.12));
779
+ color: var(--cli-panel-text, rgba(255, 255, 255, 0.87));
780
+ }
781
+
782
+ .cli-panel-position-dropdown-item.active {
783
+ color: var(--cli-panel-accent, #818cf8);
784
+ }
785
+
786
+ .cli-panel-position-dropdown-item svg {
787
+ flex-shrink: 0;
788
+ }
789
+
790
+ /* Top panel: open dropdown downward */
791
+ .cli-panel-wrapper[data-position="top"] .cli-panel-position-dropdown {
792
+ top: calc(100% + 4px);
793
+ bottom: auto;
794
+ }
795
+
796
+ /* Left panel: open dropdown to the right */
797
+ .cli-panel-wrapper[data-position="left"] .cli-panel-position-dropdown {
798
+ top: 0;
799
+ bottom: auto;
800
+ left: calc(100% + 4px);
801
+ right: auto;
802
+ }
803
+
804
+ /* Right panel: open dropdown to the left */
805
+ .cli-panel-wrapper[data-position="right"] .cli-panel-position-dropdown {
806
+ top: 0;
807
+ bottom: auto;
808
+ right: calc(100% + 4px);
809
+ left: auto;
810
+ }
811
+
812
+ /* ─── Global helper ──────────────────────────────────────── */
813
+
814
+ body.cli-pane-resizing {
815
+ user-select: none;
816
+ cursor: ew-resize;
817
+ }