retold-remote 0.0.9 → 0.0.11

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.
Files changed (60) hide show
  1. package/css/retold-remote.css +4188 -0
  2. package/docs/README.md +55 -2
  3. package/docs/audio-viewer.md +3 -0
  4. package/docs/image-viewer.md +25 -1
  5. package/docs/video-viewer.md +11 -2
  6. package/html/index.html +1 -1
  7. package/package.json +4 -1
  8. package/source/Pict-Application-RetoldRemote.js +159 -53
  9. package/source/cli/RetoldRemote-Server-Setup.js +1049 -122
  10. package/source/providers/CollectionManager-AddItems.js +497 -0
  11. package/source/providers/CollectionManager-Favorites.js +313 -0
  12. package/source/providers/CollectionManager-OperationPlan.js +281 -0
  13. package/source/providers/Pict-Provider-CollectionManager.js +172 -490
  14. package/source/providers/Pict-Provider-GalleryNavigation.js +139 -25
  15. package/source/providers/Pict-Provider-RetoldRemoteIcons.js +58 -1
  16. package/source/providers/Pict-Provider-RetoldRemoteTheme.js +9 -785
  17. package/source/providers/RetoldRemote-ThemeDefinitions.js +798 -0
  18. package/source/providers/keyboard-handlers/KeyHandler-AudioExplorer.js +15 -3
  19. package/source/providers/keyboard-handlers/KeyHandler-Gallery.js +50 -10
  20. package/source/providers/keyboard-handlers/KeyHandler-ImageExplorer.js +83 -0
  21. package/source/providers/keyboard-handlers/KeyHandler-VideoExplorer.js +85 -3
  22. package/source/providers/keyboard-handlers/KeyHandler-Viewer.js +91 -4
  23. package/source/server/RetoldRemote-ArchiveService.js +3 -0
  24. package/source/server/RetoldRemote-AudioWaveformService.js +11 -1
  25. package/source/server/RetoldRemote-CollectionService.js +4 -0
  26. package/source/server/RetoldRemote-EpubMetadataService.js +559 -0
  27. package/source/server/RetoldRemote-EpubXmlParser.js +523 -0
  28. package/source/server/RetoldRemote-ExplorerStateMixin.js +117 -0
  29. package/source/server/RetoldRemote-ImageService.js +562 -0
  30. package/source/server/RetoldRemote-MetadataCache.js +519 -41
  31. package/source/server/RetoldRemote-PathRegistry.js +180 -1
  32. package/source/server/RetoldRemote-ToolDetector.js +2 -1
  33. package/source/server/RetoldRemote-VideoFrameService.js +155 -1
  34. package/source/views/MediaViewer-CodeViewer.js +154 -0
  35. package/source/views/MediaViewer-EbookViewer.js +286 -0
  36. package/source/views/PictView-Remote-AudioExplorer.js +206 -264
  37. package/source/views/PictView-Remote-CollectionsPanel.js +35 -528
  38. package/source/views/PictView-Remote-FileInfoPanel.js +700 -0
  39. package/source/views/PictView-Remote-Gallery.js +1 -692
  40. package/source/views/PictView-Remote-ImageExplorer.js +641 -0
  41. package/source/views/PictView-Remote-ImageViewer.js +21 -29
  42. package/source/views/PictView-Remote-Layout.js +111 -393
  43. package/source/views/PictView-Remote-MediaViewer.js +265 -917
  44. package/source/views/PictView-Remote-SettingsPanel.js +1 -127
  45. package/source/views/PictView-Remote-TopBar.js +148 -408
  46. package/source/views/PictView-Remote-VLCSetup.js +86 -243
  47. package/source/views/PictView-Remote-VideoExplorer.js +315 -784
  48. package/source/views/VideoExplorer-CustomFrames.js +414 -0
  49. package/source/views/VideoExplorer-Preview.js +316 -0
  50. package/source/views/VideoExplorer-Selection.js +527 -0
  51. package/web-application/css/retold-remote.css +4188 -0
  52. package/web-application/docs/README.md +55 -2
  53. package/web-application/docs/audio-viewer.md +3 -0
  54. package/web-application/docs/image-viewer.md +25 -1
  55. package/web-application/docs/video-viewer.md +11 -2
  56. package/web-application/index.html +1 -1
  57. package/web-application/retold-remote.js +1499 -4187
  58. package/web-application/retold-remote.js.map +1 -1
  59. package/web-application/retold-remote.min.js +127 -16
  60. package/web-application/retold-remote.min.js.map +1 -1
@@ -82,3 +82,4191 @@ html, body
82
82
  {
83
83
  opacity: 1;
84
84
  }
85
+
86
+
87
+ /* ============================================================
88
+ Layout
89
+ ============================================================ */
90
+
91
+ #ContentEditor-Application-Container
92
+ {
93
+ display: flex;
94
+ flex-direction: column;
95
+ height: 100vh;
96
+ height: 100dvh;
97
+ background: var(--retold-bg-primary);
98
+ color: var(--retold-text-primary);
99
+ font-family: var(--retold-font-family, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif);
100
+ }
101
+ #ContentEditor-TopBar-Container
102
+ {
103
+ flex-shrink: 0;
104
+ }
105
+ .content-editor-body
106
+ {
107
+ display: flex;
108
+ flex: 1;
109
+ min-height: 0;
110
+ overflow: hidden;
111
+ }
112
+ /* Sidebar */
113
+ .content-editor-sidebar-wrap
114
+ {
115
+ display: flex;
116
+ flex-shrink: 0;
117
+ position: relative;
118
+ transition: width 0.2s ease;
119
+ }
120
+ .content-editor-sidebar-inner
121
+ {
122
+ display: flex;
123
+ flex-direction: column;
124
+ flex: 1;
125
+ min-width: 0;
126
+ min-height: 0;
127
+ overflow: hidden;
128
+ }
129
+ .content-editor-sidebar-tabs
130
+ {
131
+ display: flex;
132
+ flex-shrink: 0;
133
+ border-bottom: 1px solid var(--retold-border);
134
+ background: var(--retold-bg-secondary);
135
+ }
136
+ .content-editor-sidebar-tab
137
+ {
138
+ flex: 1;
139
+ padding: 7px 0;
140
+ border: none;
141
+ background: transparent;
142
+ font-size: 0.78rem;
143
+ font-weight: 600;
144
+ color: var(--retold-text-muted);
145
+ cursor: pointer;
146
+ border-bottom: 2px solid transparent;
147
+ transition: color 0.15s, border-color 0.15s;
148
+ font-family: inherit;
149
+ }
150
+ .content-editor-sidebar-tab:hover
151
+ {
152
+ color: var(--retold-text-secondary);
153
+ }
154
+ .content-editor-sidebar-tab.active
155
+ {
156
+ color: var(--retold-accent);
157
+ border-bottom-color: var(--retold-accent);
158
+ }
159
+ .content-editor-sidebar-pane
160
+ {
161
+ flex: 1;
162
+ overflow-y: auto;
163
+ overflow-x: hidden;
164
+ min-width: 0;
165
+ min-height: 0;
166
+ }
167
+ #ContentEditor-Sidebar-Container
168
+ {
169
+ background: var(--retold-bg-tertiary);
170
+ }
171
+ /* Collapsed state */
172
+ .content-editor-sidebar-wrap.collapsed
173
+ {
174
+ width: 0 !important;
175
+ }
176
+ .content-editor-sidebar-wrap.collapsed .content-editor-sidebar-inner
177
+ {
178
+ visibility: hidden;
179
+ }
180
+ .content-editor-sidebar-wrap.collapsed .content-editor-resize-handle
181
+ {
182
+ display: none;
183
+ }
184
+ /* Resize handle */
185
+ .content-editor-resize-handle
186
+ {
187
+ flex-shrink: 0;
188
+ width: 5px;
189
+ cursor: col-resize;
190
+ background: transparent;
191
+ border-right: 1px solid var(--retold-border);
192
+ transition: background 0.15s;
193
+ }
194
+ .content-editor-resize-handle:hover,
195
+ .content-editor-resize-handle.dragging
196
+ {
197
+ background: var(--retold-accent);
198
+ border-right-color: var(--retold-accent);
199
+ }
200
+ /* File browser overrides for sidebar */
201
+ #ContentEditor-Sidebar-Container .pict-filebrowser
202
+ {
203
+ border: none;
204
+ border-radius: 0;
205
+ background: transparent;
206
+ color: var(--retold-text-secondary);
207
+ }
208
+ #ContentEditor-Sidebar-Container .pict-filebrowser-browse-pane
209
+ {
210
+ display: none;
211
+ }
212
+ #ContentEditor-Sidebar-Container .pict-filebrowser-view-pane
213
+ {
214
+ display: none;
215
+ }
216
+ #ContentEditor-Sidebar-Container .pict-fb-detail-col-size,
217
+ #ContentEditor-Sidebar-Container .pict-fb-detail-col-modified,
218
+ #ContentEditor-Sidebar-Container .pict-fb-detail-size,
219
+ #ContentEditor-Sidebar-Container .pict-fb-detail-modified
220
+ {
221
+ display: none;
222
+ }
223
+ #ContentEditor-Sidebar-Container .pict-fb-detail-header
224
+ {
225
+ display: none;
226
+ }
227
+ /* Hide the ugly white + button from the breadcrumb bar */
228
+ #ContentEditor-Sidebar-Container .pict-fb-breadcrumb-addfolder
229
+ {
230
+ display: none;
231
+ }
232
+ /* Subtle add-folder button at bottom of file list */
233
+ .retold-remote-sidebar-addfolder
234
+ {
235
+ display: block;
236
+ width: 100%;
237
+ padding: 8px 12px;
238
+ margin-top: 4px;
239
+ border: 1px dashed var(--retold-border);
240
+ border-radius: 4px;
241
+ background: transparent;
242
+ color: var(--retold-text-dim);
243
+ font-size: 0.72rem;
244
+ font-family: inherit;
245
+ cursor: pointer;
246
+ text-align: center;
247
+ transition: color 0.15s, border-color 0.15s, background 0.15s;
248
+ }
249
+ .retold-remote-sidebar-addfolder:hover
250
+ {
251
+ color: var(--retold-text-muted);
252
+ border-color: var(--retold-text-dim);
253
+ background: rgba(128, 128, 128, 0.06);
254
+ }
255
+ #ContentEditor-Sidebar-Container .pict-fb-detail-row
256
+ {
257
+ color: var(--retold-text-secondary);
258
+ border-bottom-color: var(--retold-border);
259
+ }
260
+ #ContentEditor-Sidebar-Container .pict-fb-detail-row:hover
261
+ {
262
+ background: var(--retold-bg-hover);
263
+ color: var(--retold-text-primary);
264
+ }
265
+ #ContentEditor-Sidebar-Container .pict-fb-detail-row.selected
266
+ {
267
+ background: var(--retold-bg-selected);
268
+ color: var(--retold-accent);
269
+ }
270
+ #ContentEditor-Sidebar-Container .pict-fb-detail-row.sidebar-focused
271
+ {
272
+ outline: 2px solid var(--retold-accent);
273
+ outline-offset: -2px;
274
+ background: var(--retold-bg-hover);
275
+ color: var(--retold-text-primary);
276
+ }
277
+ .content-editor-sidebar-inner.keyboard-focused
278
+ {
279
+ box-shadow: inset 0 0 0 1px var(--retold-accent);
280
+ }
281
+ #ContentEditor-Sidebar-Container .pict-fb-breadcrumb-bar
282
+ {
283
+ background: var(--retold-bg-secondary);
284
+ border-bottom-color: var(--retold-border);
285
+ }
286
+ #ContentEditor-Sidebar-Container .pict-fb-breadcrumb
287
+ {
288
+ color: var(--retold-text-muted);
289
+ background: transparent;
290
+ border-bottom: none;
291
+ }
292
+ #ContentEditor-Sidebar-Container .pict-fb-breadcrumb-link
293
+ {
294
+ color: var(--retold-accent);
295
+ }
296
+ #ContentEditor-Sidebar-Container .pict-fb-breadcrumb-segment
297
+ {
298
+ color: var(--retold-accent);
299
+ }
300
+ #ContentEditor-Sidebar-Container .pict-fb-breadcrumb-segment:hover
301
+ {
302
+ background: var(--retold-bg-hover);
303
+ }
304
+ #ContentEditor-Sidebar-Container .pict-fb-breadcrumb-separator
305
+ {
306
+ color: var(--retold-text-dim);
307
+ }
308
+ #ContentEditor-Sidebar-Container .pict-fb-breadcrumb-current
309
+ {
310
+ color: var(--retold-text-primary);
311
+ }
312
+ /* Insert button: hidden by default, visible on row hover for ALL files */
313
+ #ContentEditor-Sidebar-Container .pict-fb-insert-btn
314
+ {
315
+ display: none;
316
+ background: var(--retold-bg-hover);
317
+ color: var(--retold-text-muted);
318
+ border: 1px solid var(--retold-border);
319
+ border-radius: 3px;
320
+ font-size: 0.72rem;
321
+ padding: 1px 6px;
322
+ }
323
+ #ContentEditor-Sidebar-Container .pict-fb-insert-btn:hover
324
+ {
325
+ background: var(--retold-accent);
326
+ color: var(--retold-bg-primary);
327
+ border-color: var(--retold-accent);
328
+ }
329
+ #ContentEditor-Sidebar-Container .pict-fb-detail-row:hover .pict-fb-insert-btn
330
+ {
331
+ display: inline-block;
332
+ }
333
+ /* Main content area */
334
+ #RetoldRemote-Content-Container
335
+ {
336
+ flex: 1;
337
+ overflow-y: auto;
338
+ position: relative;
339
+ }
340
+ #RetoldRemote-Gallery-Container
341
+ {
342
+ padding: 12px;
343
+ padding-bottom: calc(12px + env(safe-area-inset-bottom, 0px));
344
+ min-height: 100%;
345
+ }
346
+ #RetoldRemote-Viewer-Container
347
+ {
348
+ position: absolute;
349
+ top: 0;
350
+ left: 0;
351
+ right: 0;
352
+ bottom: 0;
353
+ background: var(--retold-bg-viewer);
354
+ display: none;
355
+ }
356
+ /* Also hide the editor container from the parent */
357
+ #ContentEditor-Editor-Container
358
+ {
359
+ display: none;
360
+ }
361
+
362
+ /* ---- Favorites Pane ---- */
363
+ .retold-remote-favorites-item
364
+ {
365
+ display: flex;
366
+ align-items: center;
367
+ gap: 8px;
368
+ padding: 8px 12px;
369
+ border-bottom: 1px solid var(--retold-border);
370
+ cursor: pointer;
371
+ transition: background 0.15s;
372
+ min-height: 36px;
373
+ }
374
+ .retold-remote-favorites-item:hover
375
+ {
376
+ background: var(--retold-bg-hover);
377
+ }
378
+ .retold-remote-favorites-item-icon
379
+ {
380
+ flex-shrink: 0;
381
+ display: inline-flex;
382
+ align-items: center;
383
+ }
384
+ .retold-remote-favorites-item-name
385
+ {
386
+ flex: 1;
387
+ overflow: hidden;
388
+ text-overflow: ellipsis;
389
+ white-space: nowrap;
390
+ font-size: 0.82rem;
391
+ color: var(--retold-text-secondary);
392
+ }
393
+ .retold-remote-favorites-item-remove
394
+ {
395
+ flex-shrink: 0;
396
+ display: inline-flex;
397
+ align-items: center;
398
+ justify-content: center;
399
+ width: 24px;
400
+ height: 24px;
401
+ border: none;
402
+ border-radius: 4px;
403
+ background: transparent;
404
+ color: var(--retold-text-dim);
405
+ font-size: 0.82rem;
406
+ cursor: pointer;
407
+ opacity: 0;
408
+ transition: opacity 0.15s, color 0.15s, background 0.15s;
409
+ }
410
+ .retold-remote-favorites-item:hover .retold-remote-favorites-item-remove
411
+ {
412
+ opacity: 1;
413
+ }
414
+ .retold-remote-favorites-item-remove:hover
415
+ {
416
+ color: #e74c3c;
417
+ background: rgba(231, 76, 60, 0.15);
418
+ }
419
+ .retold-remote-favorites-empty
420
+ {
421
+ padding: 24px 16px;
422
+ text-align: center;
423
+ color: var(--retold-text-dim);
424
+ font-size: 0.82rem;
425
+ }
426
+
427
+ /* ---- Right-side Collections Panel ---- */
428
+ .retold-remote-collections-wrap
429
+ {
430
+ display: flex;
431
+ flex-shrink: 0;
432
+ position: relative;
433
+ transition: width 0.2s ease;
434
+ border-left: 1px solid var(--retold-border);
435
+ }
436
+ .retold-remote-collections-wrap.collapsed
437
+ {
438
+ width: 0 !important;
439
+ border-left: none;
440
+ }
441
+ .retold-remote-collections-wrap.collapsed .retold-remote-collections-inner
442
+ {
443
+ visibility: hidden;
444
+ }
445
+ .retold-remote-collections-wrap.collapsed .retold-remote-collections-resize-handle
446
+ {
447
+ display: none;
448
+ }
449
+ .retold-remote-collections-inner
450
+ {
451
+ display: flex;
452
+ flex-direction: column;
453
+ flex: 1;
454
+ min-width: 0;
455
+ min-height: 0;
456
+ overflow: hidden;
457
+ background: var(--retold-bg-primary);
458
+ }
459
+ .retold-remote-collections-resize-handle
460
+ {
461
+ position: absolute;
462
+ left: 0;
463
+ top: 0;
464
+ bottom: 0;
465
+ width: 5px;
466
+ cursor: col-resize;
467
+ z-index: 10;
468
+ display: flex;
469
+ align-items: center;
470
+ justify-content: center;
471
+ }
472
+ .retold-remote-collections-resize-handle:hover
473
+ {
474
+ background: var(--retold-accent);
475
+ opacity: 0.3;
476
+ }
477
+
478
+ /* ============================================================
479
+ MOBILE: Sidebar becomes a top drawer
480
+ ============================================================ */
481
+ @media (max-width: 600px)
482
+ {
483
+ .content-editor-body
484
+ {
485
+ flex-direction: column;
486
+ }
487
+
488
+ /* Sidebar becomes a top section with a height instead of width */
489
+ .content-editor-sidebar-wrap
490
+ {
491
+ width: 100% !important;
492
+ height: 33vh;
493
+ height: 33dvh;
494
+ transition: height 0.2s ease;
495
+ flex-direction: column;
496
+ }
497
+
498
+ .content-editor-sidebar-wrap.collapsed
499
+ {
500
+ width: 100% !important;
501
+ height: 0 !important;
502
+ }
503
+
504
+ /* Resize handle becomes horizontal bar at the bottom of the drawer */
505
+ .content-editor-resize-handle
506
+ {
507
+ width: 100%;
508
+ height: 8px;
509
+ cursor: row-resize;
510
+ border-right: none;
511
+ border-bottom: 1px solid var(--retold-border);
512
+ display: flex;
513
+ align-items: center;
514
+ justify-content: center;
515
+ }
516
+
517
+ .content-editor-resize-handle::after
518
+ {
519
+ content: '';
520
+ display: block;
521
+ width: 36px;
522
+ height: 3px;
523
+ border-radius: 2px;
524
+ background: var(--retold-text-placeholder);
525
+ opacity: 0.5;
526
+ }
527
+
528
+ .content-editor-resize-handle:hover::after,
529
+ .content-editor-resize-handle.dragging::after
530
+ {
531
+ background: var(--retold-accent);
532
+ opacity: 1;
533
+ }
534
+
535
+ /* Sidebar inner fills the drawer */
536
+ .content-editor-sidebar-inner
537
+ {
538
+ flex: 1;
539
+ min-height: 0;
540
+ }
541
+
542
+ /* Content takes remaining space */
543
+ #RetoldRemote-Content-Container
544
+ {
545
+ flex: 1;
546
+ min-height: 0;
547
+ }
548
+
549
+ /* Gallery: don't force min-height on small screens */
550
+ #RetoldRemote-Gallery-Container
551
+ {
552
+ min-height: auto;
553
+ }
554
+
555
+ /* Show collections tab on mobile */
556
+ .content-editor-sidebar-tab-collections
557
+ {
558
+ display: block !important;
559
+ }
560
+
561
+ /* Collections right-side panel: hidden on mobile (content moves to sidebar tab) */
562
+ .retold-remote-collections-wrap,
563
+ .retold-remote-collections-wrap.collapsed
564
+ {
565
+ display: none !important;
566
+ height: 0 !important;
567
+ }
568
+ }
569
+
570
+ /* ============================================================
571
+ TopBar
572
+ ============================================================ */
573
+
574
+ .retold-remote-topbar
575
+ {
576
+ display: flex;
577
+ align-items: center;
578
+ height: 40px;
579
+ padding: 0 16px;
580
+ background: var(--retold-bg-secondary);
581
+ border-bottom: 1px solid var(--retold-border);
582
+ gap: 16px;
583
+ }
584
+ .retold-remote-topbar-sidebar-toggle
585
+ {
586
+ flex-shrink: 0;
587
+ display: inline-flex;
588
+ align-items: center;
589
+ justify-content: center;
590
+ width: 32px;
591
+ height: 32px;
592
+ padding: 0;
593
+ margin: 0;
594
+ border: 1px solid var(--retold-border);
595
+ border-radius: 4px;
596
+ background: transparent;
597
+ color: var(--retold-text-muted);
598
+ font-size: 1rem;
599
+ line-height: 1;
600
+ cursor: pointer;
601
+ transition: color 0.15s, border-color 0.15s, background 0.15s;
602
+ font-family: inherit;
603
+ -webkit-tap-highlight-color: transparent;
604
+ }
605
+ .retold-remote-topbar-sidebar-toggle:hover,
606
+ .retold-remote-topbar-sidebar-toggle:active,
607
+ .retold-remote-topbar-df-toggle:hover,
608
+ .retold-remote-topbar-df-toggle:active
609
+ {
610
+ color: var(--retold-text-primary);
611
+ border-color: var(--retold-accent);
612
+ background: rgba(128, 128, 128, 0.1);
613
+ }
614
+ .retold-remote-topbar-df-toggle
615
+ {
616
+ flex-shrink: 0;
617
+ display: inline-flex;
618
+ align-items: center;
619
+ justify-content: center;
620
+ width: 32px;
621
+ height: 32px;
622
+ padding: 0;
623
+ margin: 0;
624
+ border: 1px solid var(--retold-border);
625
+ border-radius: 4px;
626
+ background: transparent;
627
+ color: var(--retold-text-muted);
628
+ font-size: 1rem;
629
+ line-height: 1;
630
+ cursor: pointer;
631
+ transition: color 0.15s, border-color 0.15s, background 0.15s;
632
+ font-family: inherit;
633
+ -webkit-tap-highlight-color: transparent;
634
+ }
635
+ .retold-remote-topbar-location
636
+ {
637
+ position: relative;
638
+ flex: 1;
639
+ font-size: 0.82rem;
640
+ color: var(--retold-text-muted);
641
+ white-space: nowrap;
642
+ text-align: center;
643
+ display: flex;
644
+ align-items: center;
645
+ justify-content: center;
646
+ overflow: visible;
647
+ min-width: 0;
648
+ }
649
+ .retold-remote-topbar-location-inner
650
+ {
651
+ overflow: hidden;
652
+ text-overflow: ellipsis;
653
+ white-space: nowrap;
654
+ }
655
+ .retold-remote-topbar-location-crumb
656
+ {
657
+ color: var(--retold-accent);
658
+ cursor: pointer;
659
+ text-decoration: none;
660
+ }
661
+ .retold-remote-topbar-location-crumb:hover
662
+ {
663
+ text-decoration: underline;
664
+ }
665
+ .retold-remote-topbar-home-crumb
666
+ {
667
+ cursor: pointer;
668
+ display: inline-flex;
669
+ align-items: center;
670
+ vertical-align: middle;
671
+ opacity: 0.8;
672
+ }
673
+ .retold-remote-topbar-home-crumb:hover
674
+ {
675
+ opacity: 1;
676
+ }
677
+ .retold-remote-topbar-sep
678
+ {
679
+ color: var(--retold-text-placeholder);
680
+ margin: 0 3px;
681
+ }
682
+ /* Breadcrumb overflow hamburger */
683
+ .retold-remote-topbar-breadcrumb-overflow
684
+ {
685
+ position: relative;
686
+ display: inline-flex;
687
+ align-items: center;
688
+ vertical-align: middle;
689
+ }
690
+ .retold-remote-topbar-overflow-btn
691
+ {
692
+ display: inline-flex;
693
+ align-items: center;
694
+ justify-content: center;
695
+ width: 28px;
696
+ height: 28px;
697
+ padding: 0;
698
+ margin: 0;
699
+ border: 1px solid var(--retold-border);
700
+ border-radius: 4px;
701
+ background: transparent;
702
+ color: var(--retold-text-muted);
703
+ font-size: 0.9rem;
704
+ line-height: 1;
705
+ cursor: pointer;
706
+ transition: color 0.15s, border-color 0.15s, background 0.15s;
707
+ font-family: inherit;
708
+ -webkit-tap-highlight-color: transparent;
709
+ }
710
+ .retold-remote-topbar-overflow-btn:hover,
711
+ .retold-remote-topbar-overflow-btn:active
712
+ {
713
+ color: var(--retold-text-primary);
714
+ border-color: var(--retold-accent);
715
+ background: rgba(128, 128, 128, 0.1);
716
+ }
717
+ .retold-remote-topbar-overflow-dropdown
718
+ {
719
+ display: none;
720
+ position: absolute;
721
+ top: 100%;
722
+ left: 0;
723
+ margin-top: 4px;
724
+ min-width: 220px;
725
+ max-width: 400px;
726
+ background: var(--retold-bg-secondary);
727
+ border: 1px solid var(--retold-border);
728
+ border-radius: 6px;
729
+ box-shadow: 0 4px 16px rgba(0, 0, 0, 0.3);
730
+ z-index: 1000;
731
+ overflow: hidden;
732
+ }
733
+ .retold-remote-topbar-overflow-dropdown.open
734
+ {
735
+ display: block;
736
+ }
737
+ .retold-remote-topbar-overflow-item
738
+ {
739
+ display: flex;
740
+ align-items: center;
741
+ gap: 8px;
742
+ width: 100%;
743
+ padding: 12px 16px;
744
+ border: none;
745
+ border-bottom: 1px solid var(--retold-border);
746
+ background: transparent;
747
+ color: var(--retold-text-primary);
748
+ font-size: 0.9rem;
749
+ text-align: left;
750
+ cursor: pointer;
751
+ font-family: inherit;
752
+ -webkit-tap-highlight-color: transparent;
753
+ min-height: 44px;
754
+ box-sizing: border-box;
755
+ }
756
+ .retold-remote-topbar-overflow-item:last-child
757
+ {
758
+ border-bottom: none;
759
+ }
760
+ .retold-remote-topbar-overflow-item:hover,
761
+ .retold-remote-topbar-overflow-item:active
762
+ {
763
+ background: rgba(128, 128, 128, 0.12);
764
+ color: var(--retold-accent);
765
+ }
766
+ .retold-remote-topbar-overflow-item-icon
767
+ {
768
+ display: inline-flex;
769
+ align-items: center;
770
+ flex-shrink: 0;
771
+ opacity: 0.7;
772
+ }
773
+ .retold-remote-topbar-overflow-item-label
774
+ {
775
+ overflow: hidden;
776
+ text-overflow: ellipsis;
777
+ white-space: nowrap;
778
+ }
779
+ .retold-remote-topbar-overflow-item-prefix
780
+ {
781
+ color: var(--retold-text-dim);
782
+ }
783
+ .retold-remote-topbar-overflow-item:hover .retold-remote-topbar-overflow-item-prefix,
784
+ .retold-remote-topbar-overflow-item:active .retold-remote-topbar-overflow-item-prefix
785
+ {
786
+ color: var(--retold-text-muted);
787
+ }
788
+ .retold-remote-topbar-info
789
+ {
790
+ flex-shrink: 1;
791
+ min-width: 0;
792
+ font-size: 0.75rem;
793
+ color: var(--retold-text-dim);
794
+ overflow: hidden;
795
+ text-overflow: ellipsis;
796
+ white-space: nowrap;
797
+ }
798
+ .retold-remote-topbar-info-sep
799
+ {
800
+ margin: 0 2px;
801
+ }
802
+ /* Progressive info degradation on small screens */
803
+ @media (max-width: 500px)
804
+ {
805
+ .retold-remote-topbar-info-priority-3
806
+ {
807
+ display: none;
808
+ }
809
+ }
810
+ @media (max-width: 420px)
811
+ {
812
+ .retold-remote-topbar-info-priority-2
813
+ {
814
+ display: none;
815
+ }
816
+ }
817
+ @media (max-width: 360px)
818
+ {
819
+ .retold-remote-topbar-info-priority-1
820
+ {
821
+ display: none;
822
+ }
823
+ }
824
+ .retold-remote-topbar-actions
825
+ {
826
+ flex-shrink: 0;
827
+ display: flex;
828
+ gap: 8px;
829
+ }
830
+ .retold-remote-topbar-btn
831
+ {
832
+ padding: 4px 10px;
833
+ border: 1px solid var(--retold-border);
834
+ border-radius: 3px;
835
+ background: transparent;
836
+ color: var(--retold-text-muted);
837
+ font-size: 0.75rem;
838
+ cursor: pointer;
839
+ transition: color 0.15s, border-color 0.15s;
840
+ font-family: inherit;
841
+ }
842
+ .retold-remote-topbar-btn:hover
843
+ {
844
+ color: var(--retold-text-primary);
845
+ border-color: var(--retold-accent);
846
+ }
847
+ .retold-remote-topbar-addcoll-btn
848
+ {
849
+ font-size: 0.72rem;
850
+ }
851
+ .retold-remote-topbar-favorites-btn
852
+ {
853
+ font-size: 0.82rem;
854
+ }
855
+ .retold-remote-topbar-favorites-btn.is-favorited
856
+ {
857
+ color: #e74c3c;
858
+ border-color: #e74c3c;
859
+ }
860
+ .retold-remote-topbar-collections-btn.panel-open
861
+ {
862
+ color: var(--retold-accent);
863
+ border-color: var(--retold-accent);
864
+ background: rgba(128, 128, 128, 0.1);
865
+ }
866
+ /* Add-to-collection dropdown */
867
+ .retold-remote-addcoll-dropdown
868
+ {
869
+ position: absolute;
870
+ top: 100%;
871
+ right: 0;
872
+ margin-top: 4px;
873
+ min-width: 220px;
874
+ max-width: 320px;
875
+ max-height: 300px;
876
+ overflow-y: auto;
877
+ background: var(--retold-bg-secondary);
878
+ border: 1px solid var(--retold-border);
879
+ border-radius: 6px;
880
+ box-shadow: 0 4px 16px rgba(0, 0, 0, 0.3);
881
+ z-index: 1000;
882
+ }
883
+ .retold-remote-addcoll-dropdown-item
884
+ {
885
+ display: flex;
886
+ align-items: center;
887
+ gap: 8px;
888
+ width: 100%;
889
+ padding: 10px 14px;
890
+ border: none;
891
+ border-bottom: 1px solid var(--retold-border);
892
+ background: transparent;
893
+ color: var(--retold-text-primary);
894
+ font-size: 0.82rem;
895
+ text-align: left;
896
+ cursor: pointer;
897
+ font-family: inherit;
898
+ box-sizing: border-box;
899
+ }
900
+ .retold-remote-addcoll-dropdown-item:last-child
901
+ {
902
+ border-bottom: none;
903
+ }
904
+ .retold-remote-addcoll-dropdown-item:hover
905
+ {
906
+ background: rgba(128, 128, 128, 0.12);
907
+ color: var(--retold-accent);
908
+ }
909
+ .retold-remote-addcoll-dropdown-new
910
+ {
911
+ color: var(--retold-accent);
912
+ font-weight: 500;
913
+ }
914
+ .retold-remote-topbar-filter-btn
915
+ {
916
+ position: relative;
917
+ padding: 4px 8px;
918
+ border: 1px solid var(--retold-border);
919
+ border-radius: 3px;
920
+ background: transparent;
921
+ color: var(--retold-text-muted);
922
+ font-size: 0.82rem;
923
+ cursor: pointer;
924
+ transition: color 0.15s, border-color 0.15s, background 0.15s;
925
+ font-family: inherit;
926
+ line-height: 1;
927
+ }
928
+ .retold-remote-topbar-filter-btn:hover
929
+ {
930
+ color: var(--retold-text-primary);
931
+ border-color: var(--retold-accent);
932
+ }
933
+ .retold-remote-topbar-filter-btn.filter-active
934
+ {
935
+ color: var(--retold-accent);
936
+ border-color: var(--retold-accent);
937
+ background: rgba(128, 128, 128, 0.1);
938
+ }
939
+ .retold-remote-topbar-filter-btn.filter-bar-open
940
+ {
941
+ color: var(--retold-text-primary);
942
+ border-color: var(--retold-text-muted);
943
+ background: rgba(128, 128, 128, 0.06);
944
+ }
945
+ .retold-remote-topbar-aisort-btn
946
+ {
947
+ padding: 4px 8px;
948
+ border: 1px solid var(--retold-border);
949
+ border-radius: 3px;
950
+ background: transparent;
951
+ color: var(--retold-text-muted);
952
+ font-size: 0.72rem;
953
+ cursor: pointer;
954
+ transition: color 0.15s, border-color 0.15s, background 0.15s;
955
+ font-family: inherit;
956
+ white-space: nowrap;
957
+ }
958
+ .retold-remote-topbar-aisort-btn:hover
959
+ {
960
+ color: var(--retold-text-primary);
961
+ border-color: var(--retold-accent);
962
+ background: rgba(128, 128, 128, 0.1);
963
+ }
964
+ .retold-remote-topbar-aisort-btn.generating
965
+ {
966
+ color: var(--retold-accent);
967
+ border-color: var(--retold-accent);
968
+ cursor: wait;
969
+ }
970
+ .retold-remote-topbar-filter-badge
971
+ {
972
+ position: absolute;
973
+ top: -4px;
974
+ right: -4px;
975
+ min-width: 14px;
976
+ height: 14px;
977
+ line-height: 14px;
978
+ padding: 0 3px;
979
+ border-radius: 7px;
980
+ background: var(--retold-accent);
981
+ color: var(--retold-bg-tertiary);
982
+ font-size: 0.55rem;
983
+ font-weight: 700;
984
+ text-align: center;
985
+ }
986
+ @media (max-width: 600px)
987
+ {
988
+ .retold-remote-topbar
989
+ {
990
+ padding: 0 4px;
991
+ gap: 4px;
992
+ height: 36px;
993
+ }
994
+ .retold-remote-topbar-actions
995
+ {
996
+ gap: 3px;
997
+ }
998
+ .retold-remote-topbar-btn
999
+ {
1000
+ padding: 3px 7px;
1001
+ }
1002
+ .retold-remote-topbar-sidebar-toggle,
1003
+ .retold-remote-topbar-df-toggle
1004
+ {
1005
+ width: 28px;
1006
+ height: 28px;
1007
+ }
1008
+ .retold-remote-topbar-filter-btn
1009
+ {
1010
+ padding: 3px 6px;
1011
+ }
1012
+ }
1013
+
1014
+ /* ============================================================
1015
+ Gallery
1016
+ ============================================================ */
1017
+
1018
+ .retold-remote-gallery-header
1019
+ {
1020
+ display: flex;
1021
+ align-items: center;
1022
+ gap: 8px;
1023
+ margin-bottom: 8px;
1024
+ flex-wrap: wrap;
1025
+ }
1026
+ .retold-remote-gallery-filter
1027
+ {
1028
+ display: flex;
1029
+ gap: 4px;
1030
+ }
1031
+ .retold-remote-gallery-filter-btn
1032
+ {
1033
+ padding: 3px 10px;
1034
+ border: 1px solid var(--retold-border);
1035
+ border-radius: 3px;
1036
+ background: transparent;
1037
+ color: var(--retold-text-muted);
1038
+ font-size: 0.72rem;
1039
+ cursor: pointer;
1040
+ transition: color 0.15s, border-color 0.15s, background 0.15s;
1041
+ font-family: inherit;
1042
+ }
1043
+ .retold-remote-gallery-filter-btn:hover
1044
+ {
1045
+ color: var(--retold-text-secondary);
1046
+ border-color: var(--retold-scrollbar-hover);
1047
+ }
1048
+ .retold-remote-gallery-filter-btn.active
1049
+ {
1050
+ color: var(--retold-accent);
1051
+ border-color: var(--retold-accent);
1052
+ background: rgba(128, 128, 128, 0.1);
1053
+ }
1054
+ .retold-remote-gallery-filter-toggle
1055
+ {
1056
+ position: relative;
1057
+ }
1058
+ .retold-remote-gallery-filter-toggle.has-filters
1059
+ {
1060
+ color: var(--retold-accent);
1061
+ border-color: var(--retold-accent);
1062
+ }
1063
+ .retold-remote-gallery-filter-count
1064
+ {
1065
+ display: inline-block;
1066
+ min-width: 14px;
1067
+ height: 14px;
1068
+ line-height: 14px;
1069
+ padding: 0 3px;
1070
+ border-radius: 7px;
1071
+ background: var(--retold-accent);
1072
+ color: var(--retold-bg-tertiary);
1073
+ font-size: 0.58rem;
1074
+ font-weight: 700;
1075
+ text-align: center;
1076
+ margin-left: 4px;
1077
+ }
1078
+ /* Sort dropdown */
1079
+ .retold-remote-gallery-sort
1080
+ {
1081
+ display: flex;
1082
+ align-items: center;
1083
+ }
1084
+ .retold-remote-gallery-sort-select
1085
+ {
1086
+ padding: 3px 6px;
1087
+ border: 1px solid var(--retold-border);
1088
+ border-radius: 3px;
1089
+ background: var(--retold-bg-tertiary);
1090
+ color: var(--retold-text-muted);
1091
+ font-size: 0.72rem;
1092
+ cursor: pointer;
1093
+ font-family: inherit;
1094
+ }
1095
+ .retold-remote-gallery-sort-select:focus
1096
+ {
1097
+ outline: none;
1098
+ border-color: var(--retold-accent);
1099
+ }
1100
+ .retold-remote-gallery-search
1101
+ {
1102
+ flex: 1;
1103
+ max-width: 300px;
1104
+ padding: 4px 10px;
1105
+ border: 1px solid var(--retold-border);
1106
+ border-radius: 3px;
1107
+ background: var(--retold-bg-tertiary);
1108
+ color: var(--retold-text-primary);
1109
+ font-size: 0.78rem;
1110
+ font-family: inherit;
1111
+ }
1112
+ .retold-remote-gallery-search:focus
1113
+ {
1114
+ outline: none;
1115
+ border-color: var(--retold-accent);
1116
+ }
1117
+ .retold-remote-gallery-search::placeholder
1118
+ {
1119
+ color: var(--retold-text-placeholder);
1120
+ }
1121
+ .retold-remote-gallery-search-options
1122
+ {
1123
+ display: flex;
1124
+ align-items: center;
1125
+ gap: 8px;
1126
+ flex-shrink: 0;
1127
+ }
1128
+ .retold-remote-gallery-search-option
1129
+ {
1130
+ display: inline-flex;
1131
+ align-items: center;
1132
+ gap: 3px;
1133
+ font-size: 0.68rem;
1134
+ color: var(--retold-text-dim);
1135
+ cursor: pointer;
1136
+ white-space: nowrap;
1137
+ user-select: none;
1138
+ }
1139
+ .retold-remote-gallery-search-option:hover
1140
+ {
1141
+ color: var(--retold-text-muted);
1142
+ }
1143
+ .retold-remote-gallery-search-option input[type="checkbox"]
1144
+ {
1145
+ margin: 0;
1146
+ cursor: pointer;
1147
+ accent-color: var(--retold-accent);
1148
+ }
1149
+ .retold-remote-gallery-search-option.active
1150
+ {
1151
+ color: var(--retold-accent);
1152
+ }
1153
+ .retold-remote-gallery-search-regex-error
1154
+ {
1155
+ font-size: 0.68rem;
1156
+ color: #e06c75;
1157
+ white-space: nowrap;
1158
+ }
1159
+ /* Filter chips */
1160
+ .retold-remote-filter-chips
1161
+ {
1162
+ display: flex;
1163
+ flex-wrap: wrap;
1164
+ gap: 6px;
1165
+ margin-bottom: 8px;
1166
+ align-items: center;
1167
+ }
1168
+ .retold-remote-filter-chip
1169
+ {
1170
+ display: inline-flex;
1171
+ align-items: center;
1172
+ gap: 4px;
1173
+ padding: 2px 8px;
1174
+ border: 1px solid var(--retold-border-light);
1175
+ border-radius: 12px;
1176
+ background: rgba(128, 128, 128, 0.08);
1177
+ color: var(--retold-text-secondary);
1178
+ font-size: 0.68rem;
1179
+ }
1180
+ .retold-remote-filter-chip-remove
1181
+ {
1182
+ background: none;
1183
+ border: none;
1184
+ color: var(--retold-text-muted);
1185
+ font-size: 0.82rem;
1186
+ cursor: pointer;
1187
+ padding: 0 2px;
1188
+ line-height: 1;
1189
+ }
1190
+ .retold-remote-filter-chip-remove:hover
1191
+ {
1192
+ color: var(--retold-danger);
1193
+ }
1194
+ .retold-remote-filter-chip-clear
1195
+ {
1196
+ background: none;
1197
+ border: none;
1198
+ color: var(--retold-text-dim);
1199
+ font-size: 0.68rem;
1200
+ cursor: pointer;
1201
+ padding: 2px 4px;
1202
+ }
1203
+ .retold-remote-filter-chip-clear:hover
1204
+ {
1205
+ color: var(--retold-danger);
1206
+ }
1207
+ /* Filter panel */
1208
+ .retold-remote-filter-panel
1209
+ {
1210
+ margin-bottom: 12px;
1211
+ padding: 12px;
1212
+ border: 1px solid var(--retold-border);
1213
+ border-radius: 6px;
1214
+ background: var(--retold-bg-panel);
1215
+ }
1216
+ .retold-remote-filter-panel-grid
1217
+ {
1218
+ display: grid;
1219
+ grid-template-columns: 1fr 1fr;
1220
+ gap: 12px 24px;
1221
+ }
1222
+ .retold-remote-filter-section
1223
+ {
1224
+ margin-bottom: 0;
1225
+ }
1226
+ .retold-remote-filter-section-title
1227
+ {
1228
+ font-size: 0.68rem;
1229
+ font-weight: 600;
1230
+ color: var(--retold-text-muted);
1231
+ text-transform: uppercase;
1232
+ letter-spacing: 0.5px;
1233
+ margin-bottom: 6px;
1234
+ }
1235
+ .retold-remote-filter-ext-list
1236
+ {
1237
+ display: flex;
1238
+ flex-wrap: wrap;
1239
+ gap: 2px 10px;
1240
+ }
1241
+ .retold-remote-filter-ext-item
1242
+ {
1243
+ display: flex;
1244
+ align-items: center;
1245
+ gap: 4px;
1246
+ font-size: 0.72rem;
1247
+ color: var(--retold-text-secondary);
1248
+ cursor: pointer;
1249
+ }
1250
+ .retold-remote-filter-ext-item input
1251
+ {
1252
+ accent-color: var(--retold-accent);
1253
+ }
1254
+ .retold-remote-filter-ext-count
1255
+ {
1256
+ color: var(--retold-text-dim);
1257
+ font-size: 0.65rem;
1258
+ }
1259
+ .retold-remote-filter-row
1260
+ {
1261
+ display: flex;
1262
+ align-items: center;
1263
+ gap: 6px;
1264
+ }
1265
+ .retold-remote-filter-input
1266
+ {
1267
+ padding: 3px 6px;
1268
+ border: 1px solid var(--retold-border);
1269
+ border-radius: 3px;
1270
+ background: var(--retold-bg-tertiary);
1271
+ color: var(--retold-text-secondary);
1272
+ font-size: 0.72rem;
1273
+ width: 100px;
1274
+ font-family: inherit;
1275
+ }
1276
+ .retold-remote-filter-input:focus
1277
+ {
1278
+ outline: none;
1279
+ border-color: var(--retold-accent);
1280
+ }
1281
+ .retold-remote-filter-label
1282
+ {
1283
+ color: var(--retold-text-dim);
1284
+ font-size: 0.68rem;
1285
+ }
1286
+ .retold-remote-filter-actions
1287
+ {
1288
+ grid-column: 1 / -1;
1289
+ display: flex;
1290
+ gap: 8px;
1291
+ align-items: center;
1292
+ padding-top: 8px;
1293
+ border-top: 1px solid var(--retold-border);
1294
+ margin-top: 8px;
1295
+ }
1296
+ .retold-remote-filter-preset-row
1297
+ {
1298
+ display: flex;
1299
+ gap: 6px;
1300
+ align-items: center;
1301
+ flex-wrap: wrap;
1302
+ }
1303
+ .retold-remote-filter-preset-select
1304
+ {
1305
+ padding: 3px 6px;
1306
+ border: 1px solid var(--retold-border);
1307
+ border-radius: 3px;
1308
+ background: var(--retold-bg-tertiary);
1309
+ color: var(--retold-text-secondary);
1310
+ font-size: 0.72rem;
1311
+ min-width: 100px;
1312
+ font-family: inherit;
1313
+ }
1314
+ .retold-remote-filter-preset-input
1315
+ {
1316
+ padding: 3px 6px;
1317
+ border: 1px solid var(--retold-border);
1318
+ border-radius: 3px;
1319
+ background: var(--retold-bg-tertiary);
1320
+ color: var(--retold-text-secondary);
1321
+ font-size: 0.72rem;
1322
+ width: 120px;
1323
+ font-family: inherit;
1324
+ }
1325
+ .retold-remote-filter-preset-input:focus
1326
+ {
1327
+ outline: none;
1328
+ border-color: var(--retold-accent);
1329
+ }
1330
+ .retold-remote-filter-btn-sm
1331
+ {
1332
+ padding: 2px 8px;
1333
+ border: 1px solid var(--retold-border);
1334
+ border-radius: 3px;
1335
+ background: transparent;
1336
+ color: var(--retold-text-muted);
1337
+ font-size: 0.68rem;
1338
+ cursor: pointer;
1339
+ font-family: inherit;
1340
+ }
1341
+ .retold-remote-filter-btn-sm:hover
1342
+ {
1343
+ color: var(--retold-text-secondary);
1344
+ border-color: var(--retold-scrollbar-hover);
1345
+ }
1346
+ /* Grid layout */
1347
+ .retold-remote-grid
1348
+ {
1349
+ display: grid;
1350
+ gap: 12px;
1351
+ }
1352
+ .retold-remote-grid.size-small
1353
+ {
1354
+ grid-template-columns: repeat(auto-fill, minmax(120px, 1fr));
1355
+ }
1356
+ .retold-remote-grid.size-medium
1357
+ {
1358
+ grid-template-columns: repeat(auto-fill, minmax(200px, 1fr));
1359
+ }
1360
+ .retold-remote-grid.size-large
1361
+ {
1362
+ grid-template-columns: repeat(auto-fill, minmax(300px, 1fr));
1363
+ }
1364
+ /* Tile */
1365
+ .retold-remote-tile
1366
+ {
1367
+ background: var(--retold-bg-tertiary);
1368
+ border: 2px solid transparent;
1369
+ border-radius: 6px;
1370
+ cursor: pointer;
1371
+ overflow: hidden;
1372
+ transition: border-color 0.15s, transform 0.1s;
1373
+ }
1374
+ .retold-remote-tile:hover
1375
+ {
1376
+ border-color: var(--retold-border-light);
1377
+ }
1378
+ .retold-remote-tile.selected
1379
+ {
1380
+ border-color: var(--retold-accent);
1381
+ box-shadow: 0 0 0 1px rgba(128, 128, 128, 0.3);
1382
+ }
1383
+ .retold-remote-tile-thumb
1384
+ {
1385
+ position: relative;
1386
+ width: 100%;
1387
+ padding-bottom: 75%; /* 4:3 aspect ratio */
1388
+ background: var(--retold-bg-thumb);
1389
+ overflow: hidden;
1390
+ }
1391
+ .retold-remote-tile-thumb img
1392
+ {
1393
+ position: absolute;
1394
+ top: 0;
1395
+ left: 0;
1396
+ width: 100%;
1397
+ height: 100%;
1398
+ object-fit: cover;
1399
+ }
1400
+ .retold-remote-tile-thumb-icon
1401
+ {
1402
+ position: absolute;
1403
+ top: 50%;
1404
+ left: 50%;
1405
+ transform: translate(-50%, -50%);
1406
+ font-size: 2rem;
1407
+ color: var(--retold-text-placeholder);
1408
+ }
1409
+ .retold-remote-tile-badge
1410
+ {
1411
+ position: absolute;
1412
+ top: 6px;
1413
+ right: 6px;
1414
+ padding: 1px 6px;
1415
+ border-radius: 3px;
1416
+ font-size: 0.6rem;
1417
+ font-weight: 700;
1418
+ text-transform: uppercase;
1419
+ letter-spacing: 0.5px;
1420
+ }
1421
+ .retold-remote-tile-badge-image { background: rgba(102, 194, 184, 0.8); color: #fff; }
1422
+ .retold-remote-tile-badge-video { background: rgba(180, 102, 194, 0.8); color: #fff; }
1423
+ .retold-remote-tile-badge-audio { background: rgba(194, 160, 102, 0.8); color: #fff; }
1424
+ .retold-remote-tile-badge-document { background: rgba(194, 102, 102, 0.8); color: #fff; }
1425
+ .retold-remote-tile-badge-folder { background: rgba(102, 140, 194, 0.8); color: #fff; }
1426
+ .retold-remote-tile-duration
1427
+ {
1428
+ position: absolute;
1429
+ bottom: 6px;
1430
+ right: 6px;
1431
+ padding: 1px 6px;
1432
+ border-radius: 3px;
1433
+ background: rgba(0, 0, 0, 0.7);
1434
+ font-size: 0.65rem;
1435
+ color: var(--retold-text-primary);
1436
+ }
1437
+ .retold-remote-tile-label
1438
+ {
1439
+ padding: 6px 8px 2px 8px;
1440
+ font-size: 0.75rem;
1441
+ font-weight: 500;
1442
+ color: var(--retold-text-secondary);
1443
+ overflow: hidden;
1444
+ text-overflow: ellipsis;
1445
+ white-space: nowrap;
1446
+ }
1447
+ .retold-remote-tile-meta
1448
+ {
1449
+ padding: 0 8px 6px 8px;
1450
+ font-size: 0.65rem;
1451
+ color: var(--retold-text-dim);
1452
+ }
1453
+ /* List mode */
1454
+ .retold-remote-list
1455
+ {
1456
+ display: flex;
1457
+ flex-direction: column;
1458
+ gap: 2px;
1459
+ }
1460
+ .retold-remote-list-row
1461
+ {
1462
+ display: flex;
1463
+ align-items: center;
1464
+ gap: 8px;
1465
+ padding: 6px 10px;
1466
+ border-radius: 4px;
1467
+ cursor: pointer;
1468
+ transition: background 0.1s;
1469
+ }
1470
+ .retold-remote-list-row:hover
1471
+ {
1472
+ background: var(--retold-bg-hover);
1473
+ }
1474
+ .retold-remote-list-row.selected
1475
+ {
1476
+ background: var(--retold-bg-selected);
1477
+ }
1478
+ .retold-remote-list-icon
1479
+ {
1480
+ flex-shrink: 0;
1481
+ width: 24px;
1482
+ text-align: center;
1483
+ color: var(--retold-text-dim);
1484
+ }
1485
+ .retold-remote-list-name
1486
+ {
1487
+ flex: 1;
1488
+ font-size: 0.82rem;
1489
+ color: var(--retold-text-secondary);
1490
+ overflow: hidden;
1491
+ text-overflow: ellipsis;
1492
+ white-space: nowrap;
1493
+ }
1494
+ .retold-remote-list-ext
1495
+ {
1496
+ flex-shrink: 0;
1497
+ width: 42px;
1498
+ text-align: right;
1499
+ font-size: 0.65rem;
1500
+ color: var(--retold-text-dim);
1501
+ text-transform: uppercase;
1502
+ overflow: hidden;
1503
+ text-overflow: ellipsis;
1504
+ white-space: nowrap;
1505
+ }
1506
+ .retold-remote-list-size
1507
+ {
1508
+ flex-shrink: 0;
1509
+ width: 56px;
1510
+ text-align: right;
1511
+ font-size: 0.68rem;
1512
+ color: var(--retold-text-dim);
1513
+ white-space: nowrap;
1514
+ }
1515
+ .retold-remote-list-date
1516
+ {
1517
+ flex-shrink: 0;
1518
+ width: 72px;
1519
+ text-align: right;
1520
+ font-size: 0.68rem;
1521
+ color: var(--retold-text-dim);
1522
+ white-space: nowrap;
1523
+ }
1524
+ /* Long-press tooltip */
1525
+ .retold-remote-longpress-tooltip
1526
+ {
1527
+ position: fixed;
1528
+ z-index: 10000;
1529
+ max-width: 80vw;
1530
+ padding: 6px 12px;
1531
+ border-radius: 4px;
1532
+ background: var(--retold-bg-secondary);
1533
+ border: 1px solid var(--retold-border);
1534
+ box-shadow: 0 4px 16px rgba(0, 0, 0, 0.4);
1535
+ color: var(--retold-text-primary);
1536
+ font-size: 0.78rem;
1537
+ word-break: break-all;
1538
+ pointer-events: none;
1539
+ }
1540
+ /* Column toggle buttons in filter panel */
1541
+ .retold-remote-filter-col-toggles
1542
+ {
1543
+ display: flex;
1544
+ flex-wrap: wrap;
1545
+ gap: 6px;
1546
+ }
1547
+ .retold-remote-filter-col-toggle
1548
+ {
1549
+ display: inline-flex;
1550
+ align-items: center;
1551
+ gap: 4px;
1552
+ padding: 3px 10px;
1553
+ border: 1px solid var(--retold-border);
1554
+ border-radius: 3px;
1555
+ background: transparent;
1556
+ color: var(--retold-text-muted);
1557
+ font-size: 0.72rem;
1558
+ cursor: pointer;
1559
+ font-family: inherit;
1560
+ transition: color 0.15s, border-color 0.15s, background 0.15s;
1561
+ user-select: none;
1562
+ }
1563
+ .retold-remote-filter-col-toggle:hover
1564
+ {
1565
+ color: var(--retold-text-secondary);
1566
+ border-color: var(--retold-scrollbar-hover);
1567
+ }
1568
+ .retold-remote-filter-col-toggle.active
1569
+ {
1570
+ color: var(--retold-accent);
1571
+ border-color: var(--retold-accent);
1572
+ background: rgba(128, 128, 128, 0.1);
1573
+ }
1574
+ /* Empty state */
1575
+ .retold-remote-empty
1576
+ {
1577
+ text-align: center;
1578
+ padding: 60px 20px;
1579
+ color: var(--retold-text-dim);
1580
+ }
1581
+ .retold-remote-empty-icon
1582
+ {
1583
+ font-size: 3rem;
1584
+ margin-bottom: 12px;
1585
+ }
1586
+ /* Help panel flyout */
1587
+ #RetoldRemote-Help-Panel
1588
+ {
1589
+ position: fixed;
1590
+ top: 0;
1591
+ left: 0;
1592
+ width: 100%;
1593
+ height: 100%;
1594
+ z-index: 9999;
1595
+ }
1596
+ .retold-remote-help-backdrop
1597
+ {
1598
+ position: absolute;
1599
+ top: 0;
1600
+ left: 0;
1601
+ width: 100%;
1602
+ height: 100%;
1603
+ background: rgba(0, 0, 0, 0.5);
1604
+ display: flex;
1605
+ align-items: flex-start;
1606
+ justify-content: flex-end;
1607
+ }
1608
+ .retold-remote-help-flyout
1609
+ {
1610
+ width: 340px;
1611
+ max-height: calc(100vh - 32px);
1612
+ margin: 16px;
1613
+ background: var(--retold-bg-panel);
1614
+ border: 1px solid var(--retold-border);
1615
+ border-radius: 8px;
1616
+ overflow-y: auto;
1617
+ box-shadow: 0 8px 32px rgba(0, 0, 0, 0.5);
1618
+ animation: retold-help-slide-in 0.15s ease-out;
1619
+ }
1620
+ @keyframes retold-help-slide-in
1621
+ {
1622
+ from { transform: translateX(20px); opacity: 0; }
1623
+ to { transform: translateX(0); opacity: 1; }
1624
+ }
1625
+ .retold-remote-help-header
1626
+ {
1627
+ display: flex;
1628
+ align-items: center;
1629
+ justify-content: space-between;
1630
+ padding: 14px 16px 10px 16px;
1631
+ border-bottom: 1px solid var(--retold-border);
1632
+ }
1633
+ .retold-remote-help-title
1634
+ {
1635
+ font-size: 0.88rem;
1636
+ font-weight: 600;
1637
+ color: var(--retold-text-primary);
1638
+ }
1639
+ .retold-remote-help-close
1640
+ {
1641
+ background: none;
1642
+ border: none;
1643
+ color: var(--retold-text-dim);
1644
+ font-size: 1.2rem;
1645
+ cursor: pointer;
1646
+ padding: 0 4px;
1647
+ line-height: 1;
1648
+ }
1649
+ .retold-remote-help-close:hover
1650
+ {
1651
+ color: var(--retold-danger);
1652
+ }
1653
+ .retold-remote-help-section
1654
+ {
1655
+ padding: 12px 16px 8px 16px;
1656
+ }
1657
+ .retold-remote-help-section + .retold-remote-help-section
1658
+ {
1659
+ border-top: 1px solid var(--retold-border);
1660
+ }
1661
+ .retold-remote-help-section-title
1662
+ {
1663
+ font-size: 0.65rem;
1664
+ font-weight: 600;
1665
+ color: var(--retold-accent);
1666
+ text-transform: uppercase;
1667
+ letter-spacing: 0.8px;
1668
+ margin-bottom: 8px;
1669
+ }
1670
+ .retold-remote-help-row
1671
+ {
1672
+ display: flex;
1673
+ align-items: center;
1674
+ gap: 12px;
1675
+ padding: 3px 0;
1676
+ }
1677
+ .retold-remote-help-key
1678
+ {
1679
+ display: inline-block;
1680
+ min-width: 72px;
1681
+ padding: 2px 8px;
1682
+ border: 1px solid var(--retold-border-light);
1683
+ border-radius: 4px;
1684
+ background: rgba(255, 255, 255, 0.04);
1685
+ color: var(--retold-text-secondary);
1686
+ font-family: var(--retold-font-mono, monospace);
1687
+ font-size: 0.72rem;
1688
+ text-align: center;
1689
+ white-space: nowrap;
1690
+ }
1691
+ .retold-remote-help-desc
1692
+ {
1693
+ color: var(--retold-text-muted);
1694
+ font-size: 0.74rem;
1695
+ }
1696
+ .retold-remote-help-footer
1697
+ {
1698
+ padding: 10px 16px;
1699
+ border-top: 1px solid var(--retold-border);
1700
+ font-size: 0.68rem;
1701
+ color: var(--retold-text-dim);
1702
+ text-align: center;
1703
+ }
1704
+ .retold-remote-help-footer strong
1705
+ {
1706
+ color: var(--retold-accent);
1707
+ }
1708
+
1709
+ /* ============================================================
1710
+ MediaViewer
1711
+ ============================================================ */
1712
+
1713
+ .retold-remote-viewer
1714
+ {
1715
+ display: flex;
1716
+ flex-direction: column;
1717
+ height: 100%;
1718
+ }
1719
+ .retold-remote-viewer-header
1720
+ {
1721
+ display: flex;
1722
+ align-items: center;
1723
+ gap: 12px;
1724
+ padding: 8px 16px;
1725
+ background: var(--retold-bg-secondary);
1726
+ border-bottom: 1px solid var(--retold-border);
1727
+ flex-shrink: 0;
1728
+ z-index: 5;
1729
+ }
1730
+ .retold-remote-viewer-nav-btn
1731
+ {
1732
+ padding: 4px 10px;
1733
+ border: 1px solid var(--retold-border);
1734
+ border-radius: 3px;
1735
+ background: transparent;
1736
+ color: var(--retold-text-muted);
1737
+ font-size: 0.8rem;
1738
+ cursor: pointer;
1739
+ transition: color 0.15s, border-color 0.15s;
1740
+ font-family: inherit;
1741
+ }
1742
+ .retold-remote-viewer-nav-btn:hover
1743
+ {
1744
+ color: var(--retold-text-primary);
1745
+ border-color: var(--retold-accent);
1746
+ }
1747
+ .retold-remote-viewer-title
1748
+ {
1749
+ flex: 1;
1750
+ font-size: 0.82rem;
1751
+ color: var(--retold-text-secondary);
1752
+ overflow: hidden;
1753
+ text-overflow: ellipsis;
1754
+ white-space: nowrap;
1755
+ text-align: center;
1756
+ }
1757
+ .retold-remote-viewer-body
1758
+ {
1759
+ flex: 1;
1760
+ display: flex;
1761
+ align-items: center;
1762
+ justify-content: center;
1763
+ overflow: auto;
1764
+ position: relative;
1765
+ }
1766
+ /* File info overlay */
1767
+ .retold-remote-fileinfo-overlay
1768
+ {
1769
+ position: absolute;
1770
+ top: 48px;
1771
+ right: 16px;
1772
+ background: var(--retold-bg-secondary);
1773
+ border: 1px solid var(--retold-border);
1774
+ border-radius: 6px;
1775
+ padding: 16px;
1776
+ color: var(--retold-text-secondary);
1777
+ font-size: 0.78rem;
1778
+ z-index: 10;
1779
+ min-width: 200px;
1780
+ display: none;
1781
+ }
1782
+ .retold-remote-fileinfo-row
1783
+ {
1784
+ display: flex;
1785
+ justify-content: space-between;
1786
+ padding: 3px 0;
1787
+ }
1788
+ .retold-remote-fileinfo-label
1789
+ {
1790
+ color: var(--retold-text-dim);
1791
+ }
1792
+ .retold-remote-fileinfo-value
1793
+ {
1794
+ color: var(--retold-text-primary);
1795
+ }
1796
+ /* Code viewer container */
1797
+ .retold-remote-code-viewer-container
1798
+ {
1799
+ width: 100%;
1800
+ height: 100%;
1801
+ overflow: hidden;
1802
+ }
1803
+ .retold-remote-code-viewer-loading
1804
+ {
1805
+ padding: 16px 20px;
1806
+ color: var(--retold-text-dim);
1807
+ font-style: italic;
1808
+ font-size: 0.82rem;
1809
+ }
1810
+ /* pict-section-code dark theme overrides */
1811
+ .retold-remote-code-viewer-container .pict-code-editor-wrap
1812
+ {
1813
+ border: none;
1814
+ border-radius: 0;
1815
+ height: 100%;
1816
+ font-family: var(--retold-font-mono, 'SFMono-Regular', 'SF Mono', 'Menlo', 'Consolas', monospace);
1817
+ font-size: 0.82rem;
1818
+ line-height: 1.6;
1819
+ }
1820
+ .retold-remote-code-viewer-container .pict-code-line-numbers
1821
+ {
1822
+ background: var(--retold-bg-secondary);
1823
+ border-right: 1px solid var(--retold-border);
1824
+ color: var(--retold-text-dim);
1825
+ font-size: 0.78rem;
1826
+ line-height: 1.6;
1827
+ padding: 10px 0;
1828
+ }
1829
+ .retold-remote-code-viewer-container .pict-code-editor
1830
+ {
1831
+ background: var(--retold-bg-tertiary);
1832
+ color: var(--retold-text-primary);
1833
+ padding: 10px 10px 10px 12px;
1834
+ tab-size: 4;
1835
+ -moz-tab-size: 4;
1836
+ caret-color: var(--retold-accent);
1837
+ border-radius: 0;
1838
+ }
1839
+ /* Syntax highlighting colors for dark themes */
1840
+ .retold-remote-code-viewer-container .pict-code-editor .keyword { color: #C678DD; }
1841
+ .retold-remote-code-viewer-container .pict-code-editor .string { color: #98C379; }
1842
+ .retold-remote-code-viewer-container .pict-code-editor .number { color: #D19A66; }
1843
+ .retold-remote-code-viewer-container .pict-code-editor .comment { color: #5C6370; font-style: italic; }
1844
+ .retold-remote-code-viewer-container .pict-code-editor .operator { color: #56B6C2; }
1845
+ .retold-remote-code-viewer-container .pict-code-editor .punctuation { color: #ABB2BF; }
1846
+ .retold-remote-code-viewer-container .pict-code-editor .function-name { color: #61AFEF; }
1847
+ .retold-remote-code-viewer-container .pict-code-editor .property { color: #E06C75; }
1848
+ .retold-remote-code-viewer-container .pict-code-editor .tag { color: #E06C75; }
1849
+ .retold-remote-code-viewer-container .pict-code-editor .attr-name { color: #D19A66; }
1850
+ .retold-remote-code-viewer-container .pict-code-editor .attr-value { color: #98C379; }
1851
+ /* Video wrap with stats bar */
1852
+ .retold-remote-video-wrap
1853
+ {
1854
+ display: flex;
1855
+ flex-direction: column;
1856
+ align-items: center;
1857
+ max-width: 100%;
1858
+ max-height: 100%;
1859
+ width: 100%;
1860
+ height: 100%;
1861
+ }
1862
+ .retold-remote-video-wrap video
1863
+ {
1864
+ flex: 1;
1865
+ min-height: 0;
1866
+ max-width: 100%;
1867
+ max-height: calc(100% - 40px);
1868
+ object-fit: contain;
1869
+ }
1870
+ .retold-remote-video-stats
1871
+ {
1872
+ display: flex;
1873
+ align-items: center;
1874
+ gap: 16px;
1875
+ padding: 6px 16px;
1876
+ background: var(--retold-bg-secondary);
1877
+ border-top: 1px solid var(--retold-border);
1878
+ width: 100%;
1879
+ flex-shrink: 0;
1880
+ font-size: 0.75rem;
1881
+ color: var(--retold-text-dim);
1882
+ white-space: nowrap;
1883
+ overflow-x: auto;
1884
+ }
1885
+ .retold-remote-video-stats span
1886
+ {
1887
+ display: inline-flex;
1888
+ align-items: center;
1889
+ gap: 4px;
1890
+ }
1891
+ .retold-remote-video-stats .retold-remote-video-stat-label
1892
+ {
1893
+ color: var(--retold-text-muted);
1894
+ }
1895
+ .retold-remote-video-stats .retold-remote-video-stat-value
1896
+ {
1897
+ color: var(--retold-text-secondary);
1898
+ }
1899
+ .retold-remote-explore-btn
1900
+ {
1901
+ margin-left: auto;
1902
+ padding: 3px 12px;
1903
+ border: 1px solid var(--retold-accent);
1904
+ border-radius: 3px;
1905
+ background: transparent;
1906
+ color: var(--retold-accent);
1907
+ font-size: 0.75rem;
1908
+ cursor: pointer;
1909
+ transition: background 0.15s, color 0.15s;
1910
+ font-family: inherit;
1911
+ white-space: nowrap;
1912
+ }
1913
+ .retold-remote-explore-btn:hover
1914
+ {
1915
+ background: var(--retold-accent);
1916
+ color: var(--retold-bg-primary);
1917
+ }
1918
+ .retold-remote-vlc-btn
1919
+ {
1920
+ padding: 3px 12px;
1921
+ border: 1px solid var(--retold-accent);
1922
+ border-radius: 3px;
1923
+ background: transparent;
1924
+ color: var(--retold-accent);
1925
+ font-size: 0.75rem;
1926
+ cursor: pointer;
1927
+ transition: background 0.15s, color 0.15s;
1928
+ font-family: inherit;
1929
+ white-space: nowrap;
1930
+ }
1931
+ .retold-remote-vlc-btn:hover
1932
+ {
1933
+ background: var(--retold-accent);
1934
+ color: var(--retold-bg-primary);
1935
+ }
1936
+ /* Video action menu */
1937
+ .retold-remote-video-action-menu
1938
+ {
1939
+ display: flex;
1940
+ flex-direction: column;
1941
+ align-items: center;
1942
+ justify-content: center;
1943
+ gap: 12px;
1944
+ width: 100%;
1945
+ height: 100%;
1946
+ }
1947
+ .retold-remote-video-action-menu-title
1948
+ {
1949
+ font-size: 0.85rem;
1950
+ color: var(--retold-text-secondary);
1951
+ margin-bottom: 4px;
1952
+ text-align: center;
1953
+ overflow: hidden;
1954
+ text-overflow: ellipsis;
1955
+ max-width: 80%;
1956
+ }
1957
+ .retold-remote-video-action-thumb-wrap
1958
+ {
1959
+ margin-bottom: 4px;
1960
+ text-align: center;
1961
+ }
1962
+ .retold-remote-video-action-thumb-wrap img
1963
+ {
1964
+ max-width: 640px;
1965
+ max-height: 360px;
1966
+ border-radius: 6px;
1967
+ border: 1px solid var(--retold-border);
1968
+ object-fit: contain;
1969
+ background: var(--retold-bg-primary);
1970
+ }
1971
+ .retold-remote-video-action-thumb-wrap .retold-remote-video-action-thumb-loading
1972
+ {
1973
+ color: var(--retold-text-dim);
1974
+ font-size: 0.78rem;
1975
+ font-style: italic;
1976
+ padding: 8px;
1977
+ }
1978
+ .retold-remote-video-action-btn
1979
+ {
1980
+ display: flex;
1981
+ align-items: center;
1982
+ gap: 12px;
1983
+ padding: 12px 24px;
1984
+ min-width: 280px;
1985
+ border: 1px solid var(--retold-border);
1986
+ border-radius: 6px;
1987
+ background: var(--retold-bg-secondary);
1988
+ color: var(--retold-text-secondary);
1989
+ font-size: 0.85rem;
1990
+ cursor: pointer;
1991
+ transition: border-color 0.15s, color 0.15s, background 0.15s;
1992
+ font-family: inherit;
1993
+ text-align: left;
1994
+ }
1995
+ .retold-remote-video-action-btn:hover,
1996
+ .retold-remote-video-action-btn.selected
1997
+ {
1998
+ border-color: var(--retold-accent);
1999
+ color: var(--retold-text-primary);
2000
+ background: var(--retold-bg-tertiary);
2001
+ }
2002
+ .retold-remote-video-action-key
2003
+ {
2004
+ display: inline-block;
2005
+ padding: 2px 8px;
2006
+ border: 1px solid var(--retold-border);
2007
+ border-radius: 3px;
2008
+ background: var(--retold-bg-primary);
2009
+ color: var(--retold-text-dim);
2010
+ font-size: 0.72rem;
2011
+ font-family: var(--retold-font-mono, monospace);
2012
+ min-width: 24px;
2013
+ text-align: center;
2014
+ }
2015
+ /* Ebook reader */
2016
+ .retold-remote-ebook-wrap
2017
+ {
2018
+ display: flex;
2019
+ width: 100%;
2020
+ height: 100%;
2021
+ position: relative;
2022
+ }
2023
+ .retold-remote-ebook-toc
2024
+ {
2025
+ width: 240px;
2026
+ flex-shrink: 0;
2027
+ background: var(--retold-bg-secondary);
2028
+ border-right: 1px solid var(--retold-border);
2029
+ overflow-y: auto;
2030
+ font-size: 0.78rem;
2031
+ padding: 8px 0;
2032
+ }
2033
+ .retold-remote-ebook-toc.collapsed
2034
+ {
2035
+ display: none;
2036
+ }
2037
+ .retold-remote-ebook-toc-item
2038
+ {
2039
+ display: block;
2040
+ padding: 6px 16px;
2041
+ color: var(--retold-text-secondary);
2042
+ text-decoration: none;
2043
+ cursor: pointer;
2044
+ transition: background 0.1s, color 0.1s;
2045
+ border: none;
2046
+ background: none;
2047
+ width: 100%;
2048
+ text-align: left;
2049
+ font-family: inherit;
2050
+ font-size: inherit;
2051
+ }
2052
+ .retold-remote-ebook-toc-item:hover
2053
+ {
2054
+ background: var(--retold-bg-tertiary);
2055
+ color: var(--retold-text-primary);
2056
+ }
2057
+ .retold-remote-ebook-toc-item.indent-1
2058
+ {
2059
+ padding-left: 32px;
2060
+ }
2061
+ .retold-remote-ebook-toc-item.indent-2
2062
+ {
2063
+ padding-left: 48px;
2064
+ }
2065
+ .retold-remote-ebook-reader
2066
+ {
2067
+ flex: 1;
2068
+ display: flex;
2069
+ flex-direction: column;
2070
+ min-width: 0;
2071
+ position: relative;
2072
+ }
2073
+ .retold-remote-ebook-content
2074
+ {
2075
+ flex: 1;
2076
+ position: relative;
2077
+ overflow: hidden;
2078
+ }
2079
+ .retold-remote-ebook-content iframe
2080
+ {
2081
+ border: none;
2082
+ }
2083
+ .retold-remote-ebook-controls
2084
+ {
2085
+ display: flex;
2086
+ align-items: center;
2087
+ justify-content: center;
2088
+ gap: 16px;
2089
+ padding: 8px 16px;
2090
+ background: var(--retold-bg-secondary);
2091
+ border-top: 1px solid var(--retold-border);
2092
+ flex-shrink: 0;
2093
+ }
2094
+ .retold-remote-ebook-page-btn
2095
+ {
2096
+ padding: 6px 20px;
2097
+ border: 1px solid var(--retold-border);
2098
+ border-radius: 3px;
2099
+ background: transparent;
2100
+ color: var(--retold-text-muted);
2101
+ font-size: 0.82rem;
2102
+ cursor: pointer;
2103
+ transition: color 0.15s, border-color 0.15s;
2104
+ font-family: inherit;
2105
+ }
2106
+ .retold-remote-ebook-page-btn:hover
2107
+ {
2108
+ color: var(--retold-text-primary);
2109
+ border-color: var(--retold-accent);
2110
+ }
2111
+ .retold-remote-ebook-toc-btn
2112
+ {
2113
+ padding: 6px 12px;
2114
+ border: 1px solid var(--retold-border);
2115
+ border-radius: 3px;
2116
+ background: transparent;
2117
+ color: var(--retold-text-muted);
2118
+ font-size: 0.75rem;
2119
+ cursor: pointer;
2120
+ font-family: inherit;
2121
+ }
2122
+ .retold-remote-ebook-toc-btn:hover
2123
+ {
2124
+ color: var(--retold-text-primary);
2125
+ border-color: var(--retold-accent);
2126
+ }
2127
+ .retold-remote-ebook-loading
2128
+ {
2129
+ display: flex;
2130
+ flex-direction: column;
2131
+ align-items: center;
2132
+ justify-content: center;
2133
+ height: 100%;
2134
+ color: var(--retold-text-dim);
2135
+ font-size: 0.85rem;
2136
+ }
2137
+ /* Distraction-free toggle */
2138
+ .retold-remote-df-toggle
2139
+ {
2140
+ position: absolute;
2141
+ top: 8px;
2142
+ left: 8px;
2143
+ z-index: 15;
2144
+ padding: 4px 8px;
2145
+ border: 1px solid var(--retold-border);
2146
+ border-radius: 3px;
2147
+ background: rgba(0, 0, 0, 0.5);
2148
+ color: var(--retold-text-muted);
2149
+ font-size: 0.72rem;
2150
+ cursor: pointer;
2151
+ opacity: 0;
2152
+ transition: opacity 0.2s ease, color 0.15s, border-color 0.15s;
2153
+ font-family: inherit;
2154
+ white-space: nowrap;
2155
+ }
2156
+ .retold-remote-viewer-body:hover .retold-remote-df-toggle,
2157
+ .retold-remote-df-toggle:focus
2158
+ {
2159
+ opacity: 1;
2160
+ }
2161
+ .retold-remote-df-toggle:hover
2162
+ {
2163
+ color: var(--retold-text-primary);
2164
+ border-color: var(--retold-accent);
2165
+ }
2166
+ .retold-remote-df-toggle.active
2167
+ {
2168
+ color: var(--retold-accent);
2169
+ border-color: var(--retold-accent);
2170
+ }
2171
+ /* Distraction-free exit hotspot (top-left corner) */
2172
+ .retold-remote-df-exit-hotspot
2173
+ {
2174
+ position: absolute;
2175
+ top: 0;
2176
+ left: 0;
2177
+ width: 80px;
2178
+ height: 80px;
2179
+ z-index: 16;
2180
+ cursor: pointer;
2181
+ display: none;
2182
+ }
2183
+ .retold-remote-df-exit-hotspot::after
2184
+ {
2185
+ content: '';
2186
+ position: absolute;
2187
+ top: 12px;
2188
+ left: 12px;
2189
+ width: 8px;
2190
+ height: 8px;
2191
+ border-radius: 50%;
2192
+ background: var(--retold-accent);
2193
+ opacity: 0;
2194
+ transition: opacity 0.3s ease;
2195
+ }
2196
+ .retold-remote-df-exit-hotspot:hover::after
2197
+ {
2198
+ opacity: 0.6;
2199
+ }
2200
+
2201
+ /* ============================================================
2202
+ ImageViewer
2203
+ ============================================================ */
2204
+
2205
+ #RetoldRemote-ImageViewer-Img
2206
+ {
2207
+ image-orientation: from-image;
2208
+ transition: width 0.15s ease, height 0.15s ease;
2209
+ display: block;
2210
+ }
2211
+ .retold-remote-fit-indicator
2212
+ {
2213
+ position: absolute;
2214
+ top: 50%;
2215
+ left: 50%;
2216
+ transform: translate(-50%, -50%);
2217
+ background: rgba(0, 0, 0, 0.7);
2218
+ color: #fff;
2219
+ padding: 8px 18px;
2220
+ border-radius: 6px;
2221
+ font-size: 0.82rem;
2222
+ pointer-events: none;
2223
+ z-index: 20;
2224
+ opacity: 0;
2225
+ transition: opacity 0.3s ease;
2226
+ white-space: nowrap;
2227
+ }
2228
+ .retold-remote-fit-indicator.visible
2229
+ {
2230
+ opacity: 1;
2231
+ }
2232
+ .retold-remote-image-explore-btn
2233
+ {
2234
+ position: absolute;
2235
+ bottom: 16px;
2236
+ right: 16px;
2237
+ background: rgba(40, 44, 52, 0.85);
2238
+ color: #abb2bf;
2239
+ border: 1px solid rgba(255, 255, 255, 0.15);
2240
+ padding: 6px 14px;
2241
+ border-radius: 6px;
2242
+ font-size: 0.82rem;
2243
+ cursor: pointer;
2244
+ z-index: 20;
2245
+ transition: background 0.2s, color 0.2s;
2246
+ }
2247
+ .retold-remote-image-explore-btn:hover
2248
+ {
2249
+ background: rgba(97, 175, 239, 0.3);
2250
+ color: #fff;
2251
+ }
2252
+ .retold-remote-image-large-badge
2253
+ {
2254
+ position: absolute;
2255
+ top: 16px;
2256
+ right: 16px;
2257
+ background: rgba(40, 44, 52, 0.85);
2258
+ color: #e5c07b;
2259
+ padding: 4px 10px;
2260
+ border-radius: 4px;
2261
+ font-size: 0.72rem;
2262
+ pointer-events: none;
2263
+ z-index: 20;
2264
+ }
2265
+
2266
+ /* ============================================================
2267
+ ImageExplorer
2268
+ ============================================================ */
2269
+
2270
+ .retold-remote-iex
2271
+ {
2272
+ display: flex;
2273
+ flex-direction: column;
2274
+ height: 100%;
2275
+ }
2276
+ .retold-remote-iex-header
2277
+ {
2278
+ display: flex;
2279
+ align-items: center;
2280
+ gap: 12px;
2281
+ padding: 8px 16px;
2282
+ background: var(--retold-bg-secondary);
2283
+ border-bottom: 1px solid var(--retold-border);
2284
+ flex-shrink: 0;
2285
+ z-index: 5;
2286
+ }
2287
+ .retold-remote-iex-nav-btn
2288
+ {
2289
+ padding: 4px 10px;
2290
+ border: 1px solid var(--retold-border);
2291
+ border-radius: 3px;
2292
+ background: transparent;
2293
+ color: var(--retold-text-muted);
2294
+ font-size: 0.8rem;
2295
+ cursor: pointer;
2296
+ transition: color 0.15s, border-color 0.15s;
2297
+ font-family: inherit;
2298
+ }
2299
+ .retold-remote-iex-nav-btn:hover
2300
+ {
2301
+ color: var(--retold-text-primary);
2302
+ border-color: var(--retold-accent);
2303
+ }
2304
+ .retold-remote-iex-title
2305
+ {
2306
+ flex: 1;
2307
+ font-size: 0.82rem;
2308
+ color: var(--retold-text-secondary);
2309
+ overflow: hidden;
2310
+ text-overflow: ellipsis;
2311
+ white-space: nowrap;
2312
+ text-align: center;
2313
+ }
2314
+ .retold-remote-iex-info
2315
+ {
2316
+ display: flex;
2317
+ align-items: center;
2318
+ gap: 16px;
2319
+ padding: 8px 16px;
2320
+ background: var(--retold-bg-tertiary);
2321
+ border-bottom: 1px solid var(--retold-border);
2322
+ flex-shrink: 0;
2323
+ font-size: 0.75rem;
2324
+ color: var(--retold-text-dim);
2325
+ }
2326
+ .retold-remote-iex-info-item
2327
+ {
2328
+ display: inline-flex;
2329
+ align-items: center;
2330
+ gap: 4px;
2331
+ }
2332
+ .retold-remote-iex-info-label
2333
+ {
2334
+ color: var(--retold-text-muted);
2335
+ }
2336
+ .retold-remote-iex-info-value
2337
+ {
2338
+ color: var(--retold-text-secondary);
2339
+ }
2340
+ .retold-remote-iex-body
2341
+ {
2342
+ flex: 1;
2343
+ position: relative;
2344
+ overflow: hidden;
2345
+ background: var(--retold-bg-primary);
2346
+ }
2347
+ #RetoldRemote-IEX-Viewer
2348
+ {
2349
+ width: 100%;
2350
+ height: 100%;
2351
+ }
2352
+ .retold-remote-iex-loading
2353
+ {
2354
+ display: flex;
2355
+ flex-direction: column;
2356
+ align-items: center;
2357
+ justify-content: center;
2358
+ height: 100%;
2359
+ color: var(--retold-text-dim);
2360
+ font-size: 0.85rem;
2361
+ gap: 12px;
2362
+ }
2363
+ .retold-remote-iex-error
2364
+ {
2365
+ display: flex;
2366
+ flex-direction: column;
2367
+ align-items: center;
2368
+ justify-content: center;
2369
+ height: 100%;
2370
+ gap: 16px;
2371
+ padding: 20px;
2372
+ }
2373
+ .retold-remote-iex-error-message
2374
+ {
2375
+ color: var(--retold-text-muted);
2376
+ font-size: 0.85rem;
2377
+ text-align: center;
2378
+ }
2379
+ .retold-remote-iex-controls
2380
+ {
2381
+ display: flex;
2382
+ align-items: center;
2383
+ gap: 8px;
2384
+ padding: 6px 16px;
2385
+ background: var(--retold-bg-secondary);
2386
+ border-top: 1px solid var(--retold-border);
2387
+ flex-shrink: 0;
2388
+ font-size: 0.75rem;
2389
+ color: var(--retold-text-dim);
2390
+ }
2391
+ .retold-remote-iex-controls button
2392
+ {
2393
+ padding: 3px 8px;
2394
+ border: 1px solid var(--retold-border);
2395
+ border-radius: 3px;
2396
+ background: transparent;
2397
+ color: var(--retold-text-muted);
2398
+ font-size: 0.75rem;
2399
+ cursor: pointer;
2400
+ font-family: inherit;
2401
+ transition: color 0.15s, border-color 0.15s;
2402
+ }
2403
+ .retold-remote-iex-controls button:hover
2404
+ {
2405
+ color: var(--retold-text-primary);
2406
+ border-color: var(--retold-accent);
2407
+ }
2408
+ .retold-remote-iex-zoom-label
2409
+ {
2410
+ min-width: 40px;
2411
+ text-align: center;
2412
+ color: var(--retold-text-secondary);
2413
+ }
2414
+
2415
+ /* ============================================================
2416
+ AudioExplorer
2417
+ ============================================================ */
2418
+
2419
+ .retold-remote-aex
2420
+ {
2421
+ display: flex;
2422
+ flex-direction: column;
2423
+ height: 100%;
2424
+ }
2425
+ .retold-remote-aex-header
2426
+ {
2427
+ display: flex;
2428
+ align-items: center;
2429
+ gap: 12px;
2430
+ padding: 8px 16px;
2431
+ background: var(--retold-bg-secondary);
2432
+ border-bottom: 1px solid var(--retold-border);
2433
+ flex-shrink: 0;
2434
+ z-index: 5;
2435
+ }
2436
+ .retold-remote-aex-nav-btn
2437
+ {
2438
+ padding: 4px 10px;
2439
+ border: 1px solid var(--retold-border);
2440
+ border-radius: 3px;
2441
+ background: transparent;
2442
+ color: var(--retold-text-muted);
2443
+ font-size: 0.8rem;
2444
+ cursor: pointer;
2445
+ transition: color 0.15s, border-color 0.15s;
2446
+ font-family: inherit;
2447
+ }
2448
+ .retold-remote-aex-nav-btn:hover
2449
+ {
2450
+ color: var(--retold-text-primary);
2451
+ border-color: var(--retold-accent);
2452
+ }
2453
+ .retold-remote-aex-title
2454
+ {
2455
+ flex: 1;
2456
+ font-size: 0.82rem;
2457
+ color: var(--retold-text-secondary);
2458
+ overflow: hidden;
2459
+ text-overflow: ellipsis;
2460
+ white-space: nowrap;
2461
+ text-align: center;
2462
+ }
2463
+ .retold-remote-aex-info
2464
+ {
2465
+ display: flex;
2466
+ align-items: center;
2467
+ gap: 16px;
2468
+ padding: 8px 16px;
2469
+ background: var(--retold-bg-tertiary);
2470
+ border-bottom: 1px solid var(--retold-border);
2471
+ flex-shrink: 0;
2472
+ font-size: 0.75rem;
2473
+ color: var(--retold-text-dim);
2474
+ flex-wrap: wrap;
2475
+ }
2476
+ .retold-remote-aex-info-item
2477
+ {
2478
+ display: inline-flex;
2479
+ align-items: center;
2480
+ gap: 4px;
2481
+ }
2482
+ .retold-remote-aex-info-label
2483
+ {
2484
+ color: var(--retold-text-muted);
2485
+ }
2486
+ .retold-remote-aex-info-value
2487
+ {
2488
+ color: var(--retold-text-secondary);
2489
+ }
2490
+ .retold-remote-aex-controls
2491
+ {
2492
+ display: flex;
2493
+ align-items: center;
2494
+ gap: 12px;
2495
+ padding: 8px 16px;
2496
+ background: var(--retold-bg-secondary);
2497
+ border-bottom: 1px solid var(--retold-border);
2498
+ flex-shrink: 0;
2499
+ flex-wrap: wrap;
2500
+ }
2501
+ .retold-remote-aex-controls label
2502
+ {
2503
+ font-size: 0.75rem;
2504
+ color: var(--retold-text-muted);
2505
+ }
2506
+ .retold-remote-aex-controls select,
2507
+ .retold-remote-aex-controls input
2508
+ {
2509
+ font-size: 0.75rem;
2510
+ background: var(--retold-bg-tertiary);
2511
+ color: var(--retold-text-primary);
2512
+ border: 1px solid var(--retold-border);
2513
+ border-radius: 3px;
2514
+ padding: 2px 6px;
2515
+ font-family: inherit;
2516
+ }
2517
+ .retold-remote-aex-btn
2518
+ {
2519
+ padding: 3px 12px;
2520
+ border: 1px solid var(--retold-accent);
2521
+ border-radius: 3px;
2522
+ background: transparent;
2523
+ color: var(--retold-accent);
2524
+ font-size: 0.75rem;
2525
+ cursor: pointer;
2526
+ transition: background 0.15s, color 0.15s;
2527
+ font-family: inherit;
2528
+ }
2529
+ .retold-remote-aex-btn:hover
2530
+ {
2531
+ background: var(--retold-accent);
2532
+ color: var(--retold-bg-primary);
2533
+ }
2534
+ .retold-remote-aex-btn:disabled
2535
+ {
2536
+ opacity: 0.4;
2537
+ cursor: not-allowed;
2538
+ }
2539
+ .retold-remote-aex-btn:disabled:hover
2540
+ {
2541
+ background: transparent;
2542
+ color: var(--retold-accent);
2543
+ }
2544
+ /* Save segment to collection button */
2545
+ .retold-remote-aex-save-btn
2546
+ {
2547
+ padding: 3px 12px;
2548
+ border: 1px solid #98c379;
2549
+ border-radius: 3px;
2550
+ background: transparent;
2551
+ color: #98c379;
2552
+ font-size: 0.75rem;
2553
+ cursor: pointer;
2554
+ transition: background 0.15s, color 0.15s;
2555
+ font-family: inherit;
2556
+ }
2557
+ .retold-remote-aex-save-btn:hover
2558
+ {
2559
+ background: #98c379;
2560
+ color: var(--retold-bg-primary);
2561
+ }
2562
+ .retold-remote-aex-save-btn:disabled
2563
+ {
2564
+ opacity: 0.4;
2565
+ cursor: not-allowed;
2566
+ }
2567
+ .retold-remote-aex-save-btn:disabled:hover
2568
+ {
2569
+ background: transparent;
2570
+ color: #98c379;
2571
+ }
2572
+ .retold-remote-aex-body
2573
+ {
2574
+ flex: 1;
2575
+ display: flex;
2576
+ flex-direction: column;
2577
+ overflow: hidden;
2578
+ position: relative;
2579
+ }
2580
+ .retold-remote-aex-loading
2581
+ {
2582
+ display: flex;
2583
+ flex-direction: column;
2584
+ align-items: center;
2585
+ justify-content: center;
2586
+ height: 100%;
2587
+ color: var(--retold-text-dim);
2588
+ font-size: 0.9rem;
2589
+ }
2590
+ .retold-remote-aex-loading-spinner
2591
+ {
2592
+ width: 32px;
2593
+ height: 32px;
2594
+ border: 3px solid var(--retold-border);
2595
+ border-top-color: var(--retold-accent);
2596
+ border-radius: 50%;
2597
+ animation: retold-aex-spin 0.8s linear infinite;
2598
+ margin-bottom: 16px;
2599
+ }
2600
+ @keyframes retold-aex-spin
2601
+ {
2602
+ to { transform: rotate(360deg); }
2603
+ }
2604
+ .retold-remote-aex-canvas-wrap
2605
+ {
2606
+ flex: 1;
2607
+ position: relative;
2608
+ min-height: 150px;
2609
+ cursor: crosshair;
2610
+ }
2611
+ .retold-remote-aex-canvas-wrap canvas
2612
+ {
2613
+ width: 100%;
2614
+ height: 100%;
2615
+ display: block;
2616
+ }
2617
+ .retold-remote-aex-overview-wrap
2618
+ {
2619
+ height: 48px;
2620
+ position: relative;
2621
+ background: var(--retold-bg-tertiary);
2622
+ border-top: 1px solid var(--retold-border);
2623
+ flex-shrink: 0;
2624
+ cursor: pointer;
2625
+ }
2626
+ .retold-remote-aex-overview-wrap canvas
2627
+ {
2628
+ width: 100%;
2629
+ height: 100%;
2630
+ display: block;
2631
+ }
2632
+ .retold-remote-aex-overview-viewport
2633
+ {
2634
+ position: absolute;
2635
+ top: 0;
2636
+ height: 100%;
2637
+ background: rgba(255, 255, 255, 0.08);
2638
+ border-left: 2px solid var(--retold-accent);
2639
+ border-right: 2px solid var(--retold-accent);
2640
+ pointer-events: none;
2641
+ }
2642
+ /* Time display bar */
2643
+ .retold-remote-aex-time-bar
2644
+ {
2645
+ display: flex;
2646
+ align-items: center;
2647
+ gap: 12px;
2648
+ padding: 6px 16px;
2649
+ background: var(--retold-bg-secondary);
2650
+ border-top: 1px solid var(--retold-border);
2651
+ flex-shrink: 0;
2652
+ font-size: 0.75rem;
2653
+ font-family: var(--retold-font-mono, monospace);
2654
+ }
2655
+ .retold-remote-aex-time-label
2656
+ {
2657
+ color: var(--retold-text-dim);
2658
+ }
2659
+ .retold-remote-aex-time-value
2660
+ {
2661
+ color: var(--retold-text-secondary);
2662
+ }
2663
+ .retold-remote-aex-time-selection
2664
+ {
2665
+ color: var(--retold-accent);
2666
+ }
2667
+ /* Playback bar */
2668
+ .retold-remote-aex-playback
2669
+ {
2670
+ display: flex;
2671
+ align-items: center;
2672
+ gap: 10px;
2673
+ padding: 8px 16px;
2674
+ background: var(--retold-bg-secondary);
2675
+ border-top: 1px solid var(--retold-border);
2676
+ flex-shrink: 0;
2677
+ }
2678
+ .retold-remote-aex-playback audio
2679
+ {
2680
+ flex: 1;
2681
+ height: 32px;
2682
+ max-width: 400px;
2683
+ }
2684
+ .retold-remote-aex-playback-label
2685
+ {
2686
+ font-size: 0.72rem;
2687
+ color: var(--retold-text-dim);
2688
+ }
2689
+ /* Error state */
2690
+ .retold-remote-aex-error
2691
+ {
2692
+ display: flex;
2693
+ flex-direction: column;
2694
+ align-items: center;
2695
+ justify-content: center;
2696
+ height: 100%;
2697
+ color: var(--retold-text-dim);
2698
+ font-size: 0.85rem;
2699
+ text-align: center;
2700
+ padding: 40px;
2701
+ }
2702
+ .retold-remote-aex-error-message
2703
+ {
2704
+ color: #e06c75;
2705
+ margin-bottom: 16px;
2706
+ }
2707
+
2708
+ /* ============================================================
2709
+ VideoExplorer
2710
+ ============================================================ */
2711
+
2712
+ .retold-remote-vex
2713
+ {
2714
+ display: flex;
2715
+ flex-direction: column;
2716
+ height: 100%;
2717
+ }
2718
+ .retold-remote-vex-header
2719
+ {
2720
+ display: flex;
2721
+ align-items: center;
2722
+ gap: 12px;
2723
+ padding: 8px 16px;
2724
+ background: var(--retold-bg-secondary);
2725
+ border-bottom: 1px solid var(--retold-border);
2726
+ flex-shrink: 0;
2727
+ z-index: 5;
2728
+ }
2729
+ .retold-remote-vex-nav-btn
2730
+ {
2731
+ padding: 4px 10px;
2732
+ border: 1px solid var(--retold-border);
2733
+ border-radius: 3px;
2734
+ background: transparent;
2735
+ color: var(--retold-text-muted);
2736
+ font-size: 0.8rem;
2737
+ cursor: pointer;
2738
+ transition: color 0.15s, border-color 0.15s;
2739
+ font-family: inherit;
2740
+ }
2741
+ .retold-remote-vex-nav-btn:hover
2742
+ {
2743
+ color: var(--retold-text-primary);
2744
+ border-color: var(--retold-accent);
2745
+ }
2746
+ .retold-remote-vex-title
2747
+ {
2748
+ flex: 1;
2749
+ font-size: 0.82rem;
2750
+ color: var(--retold-text-secondary);
2751
+ overflow: hidden;
2752
+ text-overflow: ellipsis;
2753
+ white-space: nowrap;
2754
+ text-align: center;
2755
+ }
2756
+ .retold-remote-vex-info
2757
+ {
2758
+ display: flex;
2759
+ align-items: center;
2760
+ gap: 16px;
2761
+ padding: 8px 16px;
2762
+ background: var(--retold-bg-tertiary);
2763
+ border-bottom: 1px solid var(--retold-border);
2764
+ flex-shrink: 0;
2765
+ font-size: 0.75rem;
2766
+ color: var(--retold-text-dim);
2767
+ }
2768
+ .retold-remote-vex-info-item
2769
+ {
2770
+ display: inline-flex;
2771
+ align-items: center;
2772
+ gap: 4px;
2773
+ }
2774
+ .retold-remote-vex-info-label
2775
+ {
2776
+ color: var(--retold-text-muted);
2777
+ }
2778
+ .retold-remote-vex-info-value
2779
+ {
2780
+ color: var(--retold-text-secondary);
2781
+ }
2782
+ .retold-remote-vex-controls
2783
+ {
2784
+ display: flex;
2785
+ align-items: center;
2786
+ gap: 12px;
2787
+ padding: 8px 16px;
2788
+ background: var(--retold-bg-secondary);
2789
+ border-bottom: 1px solid var(--retold-border);
2790
+ flex-shrink: 0;
2791
+ }
2792
+ .retold-remote-vex-controls label
2793
+ {
2794
+ font-size: 0.75rem;
2795
+ color: var(--retold-text-muted);
2796
+ }
2797
+ .retold-remote-vex-controls select,
2798
+ .retold-remote-vex-controls input[type="range"]
2799
+ {
2800
+ font-size: 0.75rem;
2801
+ background: var(--retold-bg-tertiary);
2802
+ color: var(--retold-text-primary);
2803
+ border: 1px solid var(--retold-border);
2804
+ border-radius: 3px;
2805
+ padding: 2px 6px;
2806
+ font-family: inherit;
2807
+ }
2808
+ .retold-remote-vex-controls .retold-remote-vex-refresh-btn
2809
+ {
2810
+ padding: 3px 12px;
2811
+ border: 1px solid var(--retold-accent);
2812
+ border-radius: 3px;
2813
+ background: transparent;
2814
+ color: var(--retold-accent);
2815
+ font-size: 0.75rem;
2816
+ cursor: pointer;
2817
+ transition: background 0.15s, color 0.15s;
2818
+ font-family: inherit;
2819
+ }
2820
+ .retold-remote-vex-controls .retold-remote-vex-refresh-btn:hover
2821
+ {
2822
+ background: var(--retold-accent);
2823
+ color: var(--retold-bg-primary);
2824
+ }
2825
+ .retold-remote-vex-body
2826
+ {
2827
+ flex: 1;
2828
+ overflow-y: auto;
2829
+ padding: 16px;
2830
+ }
2831
+ .retold-remote-vex-loading
2832
+ {
2833
+ display: flex;
2834
+ flex-direction: column;
2835
+ align-items: center;
2836
+ justify-content: center;
2837
+ height: 100%;
2838
+ color: var(--retold-text-dim);
2839
+ font-size: 0.9rem;
2840
+ }
2841
+ .retold-remote-vex-loading-spinner
2842
+ {
2843
+ width: 32px;
2844
+ height: 32px;
2845
+ border: 3px solid var(--retold-border);
2846
+ border-top-color: var(--retold-accent);
2847
+ border-radius: 50%;
2848
+ animation: retold-vex-spin 0.8s linear infinite;
2849
+ margin-bottom: 16px;
2850
+ }
2851
+ @keyframes retold-vex-spin
2852
+ {
2853
+ to { transform: rotate(360deg); }
2854
+ }
2855
+ .retold-remote-vex-grid
2856
+ {
2857
+ display: grid;
2858
+ grid-template-columns: repeat(auto-fill, minmax(280px, 1fr));
2859
+ gap: 12px;
2860
+ }
2861
+ .retold-remote-vex-frame
2862
+ {
2863
+ position: relative;
2864
+ border-radius: 6px;
2865
+ overflow: hidden;
2866
+ background: var(--retold-bg-tertiary);
2867
+ border: 2px solid transparent;
2868
+ cursor: pointer;
2869
+ transition: border-color 0.15s, transform 0.1s;
2870
+ }
2871
+ .retold-remote-vex-frame:hover
2872
+ {
2873
+ border-color: var(--retold-accent);
2874
+ transform: translateY(-1px);
2875
+ }
2876
+ .retold-remote-vex-frame.selected
2877
+ {
2878
+ border-color: var(--retold-accent);
2879
+ }
2880
+ .retold-remote-vex-frame img
2881
+ {
2882
+ width: 100%;
2883
+ display: block;
2884
+ aspect-ratio: 16 / 9;
2885
+ object-fit: contain;
2886
+ background: #000;
2887
+ }
2888
+ .retold-remote-vex-frame-info
2889
+ {
2890
+ display: flex;
2891
+ align-items: center;
2892
+ justify-content: space-between;
2893
+ padding: 6px 10px;
2894
+ background: var(--retold-bg-secondary);
2895
+ }
2896
+ .retold-remote-vex-frame-timestamp
2897
+ {
2898
+ font-size: 0.78rem;
2899
+ color: var(--retold-text-secondary);
2900
+ font-family: var(--retold-font-mono, monospace);
2901
+ }
2902
+ .retold-remote-vex-frame-index
2903
+ {
2904
+ font-size: 0.7rem;
2905
+ color: var(--retold-text-dim);
2906
+ }
2907
+ .retold-remote-vex-frame.custom-frame
2908
+ {
2909
+ border-color: var(--retold-accent);
2910
+ border-style: dashed;
2911
+ }
2912
+ .retold-remote-vex-frame.custom-frame .retold-remote-vex-frame-info
2913
+ {
2914
+ background: color-mix(in srgb, var(--retold-accent) 12%, var(--retold-bg-secondary));
2915
+ }
2916
+ .retold-remote-vex-frame-loading
2917
+ {
2918
+ width: 100%;
2919
+ aspect-ratio: 16 / 9;
2920
+ display: flex;
2921
+ align-items: center;
2922
+ justify-content: center;
2923
+ background: #000;
2924
+ color: var(--retold-text-dim);
2925
+ font-size: 0.8rem;
2926
+ }
2927
+ .retold-remote-vex-timeline-marker.custom
2928
+ {
2929
+ background: var(--retold-text-primary);
2930
+ opacity: 0.9;
2931
+ width: 2px;
2932
+ border: 1px dashed var(--retold-accent);
2933
+ }
2934
+ /* Timeline bar at bottom */
2935
+ .retold-remote-vex-timeline
2936
+ {
2937
+ display: flex;
2938
+ align-items: flex-end;
2939
+ gap: 8px;
2940
+ padding: 8px 16px;
2941
+ background: var(--retold-bg-secondary);
2942
+ border-top: 1px solid var(--retold-border);
2943
+ flex-shrink: 0;
2944
+ }
2945
+ .retold-remote-vex-timeline-column
2946
+ {
2947
+ flex: 1;
2948
+ display: flex;
2949
+ flex-direction: column;
2950
+ gap: 0;
2951
+ min-width: 0;
2952
+ }
2953
+ .retold-remote-vex-slider-track
2954
+ {
2955
+ position: relative;
2956
+ height: 18px;
2957
+ user-select: none;
2958
+ -webkit-user-select: none;
2959
+ }
2960
+ .retold-remote-vex-slider-handle
2961
+ {
2962
+ position: absolute;
2963
+ bottom: 0;
2964
+ width: 14px;
2965
+ height: 18px;
2966
+ background: var(--retold-accent);
2967
+ border-radius: 3px 3px 0 0;
2968
+ cursor: ew-resize;
2969
+ transform: translateX(-50%);
2970
+ z-index: 2;
2971
+ transition: background 0.15s;
2972
+ touch-action: none;
2973
+ }
2974
+ .retold-remote-vex-slider-handle:hover,
2975
+ .retold-remote-vex-slider-handle.dragging
2976
+ {
2977
+ background: var(--retold-text-primary);
2978
+ }
2979
+ .retold-remote-vex-slider-handle::after
2980
+ {
2981
+ content: '';
2982
+ position: absolute;
2983
+ top: 5px;
2984
+ left: 4px;
2985
+ width: 6px;
2986
+ height: 8px;
2987
+ border-left: 2px solid rgba(0, 0, 0, 0.3);
2988
+ border-right: 2px solid rgba(0, 0, 0, 0.3);
2989
+ }
2990
+ .retold-remote-vex-timeline-bar
2991
+ {
2992
+ height: 24px;
2993
+ background: var(--retold-bg-tertiary);
2994
+ border-radius: 4px;
2995
+ position: relative;
2996
+ overflow: hidden;
2997
+ cursor: pointer;
2998
+ }
2999
+ .retold-remote-vex-timeline-marker
3000
+ {
3001
+ position: absolute;
3002
+ top: 0;
3003
+ width: 3px;
3004
+ height: 100%;
3005
+ background: var(--retold-accent);
3006
+ opacity: 0.7;
3007
+ transition: opacity 0.15s;
3008
+ }
3009
+ .retold-remote-vex-timeline-marker:hover
3010
+ {
3011
+ opacity: 1;
3012
+ }
3013
+ .retold-remote-vex-timeline-marker.selected
3014
+ {
3015
+ opacity: 1;
3016
+ background: var(--retold-text-primary);
3017
+ }
3018
+ .retold-remote-vex-timeline-label
3019
+ {
3020
+ font-size: 0.7rem;
3021
+ color: var(--retold-text-dim);
3022
+ white-space: nowrap;
3023
+ }
3024
+ /* Selection mode toggle button */
3025
+ .retold-remote-vex-select-btn
3026
+ {
3027
+ padding: 3px 12px;
3028
+ border: 1px solid var(--retold-border);
3029
+ border-radius: 3px;
3030
+ background: transparent;
3031
+ color: var(--retold-text-muted);
3032
+ font-size: 0.75rem;
3033
+ cursor: pointer;
3034
+ transition: background 0.15s, color 0.15s, border-color 0.15s;
3035
+ font-family: inherit;
3036
+ }
3037
+ .retold-remote-vex-select-btn:hover
3038
+ {
3039
+ color: var(--retold-text-primary);
3040
+ border-color: var(--retold-accent);
3041
+ }
3042
+ .retold-remote-vex-select-btn.active
3043
+ {
3044
+ background: var(--retold-accent);
3045
+ color: var(--retold-bg-primary);
3046
+ border-color: var(--retold-accent);
3047
+ }
3048
+ /* Selection info display */
3049
+ .retold-remote-vex-selection-info
3050
+ {
3051
+ display: inline-flex;
3052
+ align-items: center;
3053
+ gap: 8px;
3054
+ font-size: 0.75rem;
3055
+ color: var(--retold-text-secondary);
3056
+ font-family: var(--retold-font-mono, monospace);
3057
+ }
3058
+ .retold-remote-vex-selection-info-label
3059
+ {
3060
+ color: var(--retold-text-muted);
3061
+ }
3062
+ .retold-remote-vex-clear-btn
3063
+ {
3064
+ padding: 2px 8px;
3065
+ border: 1px solid var(--retold-border);
3066
+ border-radius: 3px;
3067
+ background: transparent;
3068
+ color: var(--retold-text-dim);
3069
+ font-size: 0.7rem;
3070
+ cursor: pointer;
3071
+ transition: color 0.15s, border-color 0.15s;
3072
+ font-family: inherit;
3073
+ }
3074
+ .retold-remote-vex-clear-btn:hover
3075
+ {
3076
+ color: #e06c75;
3077
+ border-color: #e06c75;
3078
+ }
3079
+ /* Generate frames across range */
3080
+ .retold-remote-vex-generate-controls
3081
+ {
3082
+ display: inline-flex;
3083
+ align-items: center;
3084
+ gap: 6px;
3085
+ }
3086
+ .retold-remote-vex-generate-btn
3087
+ {
3088
+ padding: 3px 12px;
3089
+ border: 1px solid var(--retold-accent);
3090
+ border-radius: 3px;
3091
+ background: transparent;
3092
+ color: var(--retold-accent);
3093
+ font-size: 0.75rem;
3094
+ cursor: pointer;
3095
+ transition: background 0.15s, color 0.15s;
3096
+ font-family: inherit;
3097
+ }
3098
+ .retold-remote-vex-generate-btn:hover
3099
+ {
3100
+ background: var(--retold-accent);
3101
+ color: var(--retold-bg-primary);
3102
+ }
3103
+ /* Save segment to collection button */
3104
+ .retold-remote-vex-save-btn
3105
+ {
3106
+ padding: 3px 12px;
3107
+ border: 1px solid #98c379;
3108
+ border-radius: 3px;
3109
+ background: transparent;
3110
+ color: #98c379;
3111
+ font-size: 0.75rem;
3112
+ cursor: pointer;
3113
+ transition: background 0.15s, color 0.15s;
3114
+ font-family: inherit;
3115
+ }
3116
+ .retold-remote-vex-save-btn:hover
3117
+ {
3118
+ background: #98c379;
3119
+ color: var(--retold-bg-primary);
3120
+ }
3121
+ .retold-remote-vex-range-frame-select
3122
+ {
3123
+ font-size: 0.75rem;
3124
+ background: var(--retold-bg-tertiary);
3125
+ color: var(--retold-text-primary);
3126
+ border: 1px solid var(--retold-border);
3127
+ border-radius: 3px;
3128
+ padding: 2px 6px;
3129
+ font-family: inherit;
3130
+ }
3131
+ /* Timeline selection overlay */
3132
+ .retold-remote-vex-timeline-selection
3133
+ {
3134
+ position: absolute;
3135
+ top: 0;
3136
+ height: 100%;
3137
+ background: color-mix(in srgb, var(--retold-accent) 20%, transparent);
3138
+ border-left: 2px solid var(--retold-accent);
3139
+ border-right: 2px solid var(--retold-accent);
3140
+ pointer-events: none;
3141
+ z-index: 1;
3142
+ box-sizing: border-box;
3143
+ }
3144
+ .retold-remote-vex-timeline-bar.selecting
3145
+ {
3146
+ cursor: crosshair;
3147
+ }
3148
+ /* Frame preview overlay */
3149
+ .retold-remote-vex-preview-backdrop
3150
+ {
3151
+ position: fixed;
3152
+ top: 0;
3153
+ left: 0;
3154
+ width: 100%;
3155
+ height: 100%;
3156
+ background: rgba(0, 0, 0, 0.85);
3157
+ z-index: 100;
3158
+ display: flex;
3159
+ flex-direction: column;
3160
+ align-items: center;
3161
+ justify-content: center;
3162
+ }
3163
+ .retold-remote-vex-preview-header
3164
+ {
3165
+ display: flex;
3166
+ align-items: center;
3167
+ gap: 12px;
3168
+ padding: 8px 16px;
3169
+ width: 100%;
3170
+ max-width: 95vw;
3171
+ flex-shrink: 0;
3172
+ }
3173
+ .retold-remote-vex-preview-header .retold-remote-vex-nav-btn
3174
+ {
3175
+ background: rgba(40, 44, 52, 0.8);
3176
+ }
3177
+ .retold-remote-vex-preview-title
3178
+ {
3179
+ flex: 1;
3180
+ font-size: 0.82rem;
3181
+ color: var(--retold-text-secondary);
3182
+ text-align: center;
3183
+ }
3184
+ .retold-remote-vex-preview-body
3185
+ {
3186
+ flex: 1;
3187
+ display: flex;
3188
+ align-items: center;
3189
+ justify-content: center;
3190
+ overflow: auto;
3191
+ padding: 8px;
3192
+ max-width: 95vw;
3193
+ max-height: calc(100vh - 60px);
3194
+ }
3195
+ .retold-remote-vex-preview-body img
3196
+ {
3197
+ max-width: 100%;
3198
+ max-height: 100%;
3199
+ object-fit: contain;
3200
+ border-radius: 4px;
3201
+ box-shadow: 0 4px 24px rgba(0, 0, 0, 0.6);
3202
+ }
3203
+ /* Error state */
3204
+ .retold-remote-vex-error
3205
+ {
3206
+ display: flex;
3207
+ flex-direction: column;
3208
+ align-items: center;
3209
+ justify-content: center;
3210
+ height: 100%;
3211
+ color: var(--retold-text-dim);
3212
+ font-size: 0.85rem;
3213
+ text-align: center;
3214
+ padding: 40px;
3215
+ }
3216
+ .retold-remote-vex-error-message
3217
+ {
3218
+ color: #e06c75;
3219
+ margin-bottom: 16px;
3220
+ }
3221
+
3222
+ /* ============================================================
3223
+ CollectionsPanel
3224
+ ============================================================ */
3225
+
3226
+ /* ---- Collections Panel Container ---- */
3227
+ .retold-remote-collections-panel
3228
+ {
3229
+ display: flex;
3230
+ flex-direction: column;
3231
+ height: 100%;
3232
+ overflow: hidden;
3233
+ }
3234
+ .retold-remote-collections-header
3235
+ {
3236
+ display: flex;
3237
+ align-items: center;
3238
+ gap: 8px;
3239
+ padding: 8px 12px;
3240
+ border-bottom: 1px solid var(--retold-border);
3241
+ background: var(--retold-bg-secondary);
3242
+ flex-shrink: 0;
3243
+ }
3244
+ .retold-remote-collections-header-title
3245
+ {
3246
+ flex: 1;
3247
+ font-size: 0.82rem;
3248
+ font-weight: 600;
3249
+ color: var(--retold-text-primary);
3250
+ white-space: nowrap;
3251
+ overflow: hidden;
3252
+ text-overflow: ellipsis;
3253
+ }
3254
+ .retold-remote-collections-header-btn
3255
+ {
3256
+ display: inline-flex;
3257
+ align-items: center;
3258
+ justify-content: center;
3259
+ width: 26px;
3260
+ height: 26px;
3261
+ padding: 0;
3262
+ border: 1px solid var(--retold-border);
3263
+ border-radius: 4px;
3264
+ background: transparent;
3265
+ color: var(--retold-text-muted);
3266
+ font-size: 0.82rem;
3267
+ cursor: pointer;
3268
+ transition: color 0.15s, border-color 0.15s;
3269
+ font-family: inherit;
3270
+ flex-shrink: 0;
3271
+ }
3272
+ .retold-remote-collections-header-btn:hover
3273
+ {
3274
+ color: var(--retold-text-primary);
3275
+ border-color: var(--retold-accent);
3276
+ }
3277
+ /* ---- Search ---- */
3278
+ .retold-remote-collections-search
3279
+ {
3280
+ padding: 6px 12px;
3281
+ border-bottom: 1px solid var(--retold-border);
3282
+ flex-shrink: 0;
3283
+ }
3284
+ .retold-remote-collections-search input
3285
+ {
3286
+ width: 100%;
3287
+ padding: 5px 8px;
3288
+ border: 1px solid var(--retold-border);
3289
+ border-radius: 3px;
3290
+ background: var(--retold-bg-tertiary);
3291
+ color: var(--retold-text-secondary);
3292
+ font-size: 0.78rem;
3293
+ font-family: inherit;
3294
+ box-sizing: border-box;
3295
+ outline: none;
3296
+ }
3297
+ .retold-remote-collections-search input:focus
3298
+ {
3299
+ border-color: var(--retold-accent);
3300
+ }
3301
+ /* ---- Collection List ---- */
3302
+ .retold-remote-collections-body
3303
+ {
3304
+ flex: 1;
3305
+ overflow-y: auto;
3306
+ overflow-x: hidden;
3307
+ }
3308
+ .retold-remote-collections-empty
3309
+ {
3310
+ padding: 24px 16px;
3311
+ text-align: center;
3312
+ font-size: 0.78rem;
3313
+ color: var(--retold-text-dim);
3314
+ }
3315
+ .retold-remote-collection-card
3316
+ {
3317
+ display: flex;
3318
+ align-items: center;
3319
+ gap: 10px;
3320
+ padding: 10px 12px;
3321
+ border-bottom: 1px solid var(--retold-border);
3322
+ cursor: pointer;
3323
+ transition: background 0.15s;
3324
+ }
3325
+ .retold-remote-collection-card:hover
3326
+ {
3327
+ background: rgba(128, 128, 128, 0.08);
3328
+ }
3329
+ .retold-remote-collection-card-icon
3330
+ {
3331
+ flex-shrink: 0;
3332
+ width: 32px;
3333
+ height: 32px;
3334
+ display: flex;
3335
+ align-items: center;
3336
+ justify-content: center;
3337
+ border-radius: 4px;
3338
+ background: var(--retold-bg-tertiary);
3339
+ color: var(--retold-accent);
3340
+ font-size: 1rem;
3341
+ }
3342
+ .retold-remote-collection-card-info
3343
+ {
3344
+ flex: 1;
3345
+ min-width: 0;
3346
+ }
3347
+ .retold-remote-collection-card-name
3348
+ {
3349
+ font-size: 0.82rem;
3350
+ font-weight: 500;
3351
+ color: var(--retold-text-primary);
3352
+ white-space: nowrap;
3353
+ overflow: hidden;
3354
+ text-overflow: ellipsis;
3355
+ }
3356
+ .retold-remote-collection-card-meta
3357
+ {
3358
+ font-size: 0.68rem;
3359
+ color: var(--retold-text-dim);
3360
+ margin-top: 2px;
3361
+ }
3362
+ /* ---- Detail mode ---- */
3363
+ .retold-remote-collections-detail-controls
3364
+ {
3365
+ display: flex;
3366
+ align-items: center;
3367
+ gap: 6px;
3368
+ padding: 6px 12px;
3369
+ border-bottom: 1px solid var(--retold-border);
3370
+ flex-shrink: 0;
3371
+ }
3372
+ .retold-remote-collections-sort-select
3373
+ {
3374
+ padding: 3px 6px;
3375
+ border: 1px solid var(--retold-border);
3376
+ border-radius: 3px;
3377
+ background: var(--retold-bg-tertiary);
3378
+ color: var(--retold-text-secondary);
3379
+ font-size: 0.72rem;
3380
+ font-family: inherit;
3381
+ flex: 1;
3382
+ }
3383
+ .retold-remote-collections-sort-dir
3384
+ {
3385
+ padding: 3px 6px;
3386
+ border: 1px solid var(--retold-border);
3387
+ border-radius: 3px;
3388
+ background: transparent;
3389
+ color: var(--retold-text-muted);
3390
+ font-size: 0.72rem;
3391
+ cursor: pointer;
3392
+ font-family: inherit;
3393
+ }
3394
+ .retold-remote-collections-sort-dir:hover
3395
+ {
3396
+ border-color: var(--retold-accent);
3397
+ color: var(--retold-text-primary);
3398
+ }
3399
+ /* ---- Item rows ---- */
3400
+ .retold-remote-collection-item
3401
+ {
3402
+ display: flex;
3403
+ align-items: center;
3404
+ gap: 8px;
3405
+ padding: 6px 12px;
3406
+ border-bottom: 1px solid var(--retold-border);
3407
+ cursor: pointer;
3408
+ transition: background 0.15s;
3409
+ position: relative;
3410
+ }
3411
+ .retold-remote-collection-item:hover
3412
+ {
3413
+ background: rgba(128, 128, 128, 0.08);
3414
+ }
3415
+ .retold-remote-collection-item-drag
3416
+ {
3417
+ flex-shrink: 0;
3418
+ width: 16px;
3419
+ cursor: grab;
3420
+ color: var(--retold-text-dim);
3421
+ font-size: 0.68rem;
3422
+ text-align: center;
3423
+ user-select: none;
3424
+ }
3425
+ .retold-remote-collection-item-icon
3426
+ {
3427
+ flex-shrink: 0;
3428
+ width: 24px;
3429
+ height: 24px;
3430
+ display: flex;
3431
+ align-items: center;
3432
+ justify-content: center;
3433
+ color: var(--retold-text-muted);
3434
+ font-size: 0.82rem;
3435
+ }
3436
+ .retold-remote-collection-item-icon img
3437
+ {
3438
+ width: 24px;
3439
+ height: 24px;
3440
+ object-fit: cover;
3441
+ border-radius: 2px;
3442
+ }
3443
+ .retold-remote-collection-item-name
3444
+ {
3445
+ flex: 1;
3446
+ min-width: 0;
3447
+ font-size: 0.78rem;
3448
+ color: var(--retold-text-secondary);
3449
+ white-space: nowrap;
3450
+ overflow: hidden;
3451
+ text-overflow: ellipsis;
3452
+ }
3453
+ .retold-remote-collection-item-type
3454
+ {
3455
+ flex-shrink: 0;
3456
+ font-size: 0.62rem;
3457
+ padding: 1px 4px;
3458
+ border-radius: 2px;
3459
+ background: var(--retold-bg-tertiary);
3460
+ color: var(--retold-text-dim);
3461
+ text-transform: uppercase;
3462
+ }
3463
+ .retold-remote-collection-item-remove
3464
+ {
3465
+ flex-shrink: 0;
3466
+ display: none;
3467
+ width: 20px;
3468
+ height: 20px;
3469
+ align-items: center;
3470
+ justify-content: center;
3471
+ border: none;
3472
+ border-radius: 3px;
3473
+ background: transparent;
3474
+ color: var(--retold-text-dim);
3475
+ font-size: 0.82rem;
3476
+ cursor: pointer;
3477
+ padding: 0;
3478
+ }
3479
+ .retold-remote-collection-item:hover .retold-remote-collection-item-remove
3480
+ {
3481
+ display: inline-flex;
3482
+ }
3483
+ .retold-remote-collection-item-remove:hover
3484
+ {
3485
+ color: var(--retold-danger-muted, #e55);
3486
+ background: rgba(200, 50, 50, 0.1);
3487
+ }
3488
+ /* ---- Operation Plan mode ---- */
3489
+ .retold-remote-collections-op-controls
3490
+ {
3491
+ flex-direction: column;
3492
+ gap: 6px;
3493
+ }
3494
+ .retold-remote-collections-op-summary
3495
+ {
3496
+ font-size: 0.75rem;
3497
+ color: var(--retold-text-dim);
3498
+ padding: 4px 0;
3499
+ }
3500
+ .retold-remote-collections-op-buttons
3501
+ {
3502
+ display: flex;
3503
+ gap: 6px;
3504
+ }
3505
+ .retold-remote-collections-op-execute-btn
3506
+ {
3507
+ flex: 1;
3508
+ padding: 6px 12px;
3509
+ border: none;
3510
+ border-radius: 3px;
3511
+ background: var(--retold-accent, #4a90d9);
3512
+ color: #fff;
3513
+ font-size: 0.78rem;
3514
+ font-weight: 600;
3515
+ cursor: pointer;
3516
+ }
3517
+ .retold-remote-collections-op-execute-btn:hover
3518
+ {
3519
+ opacity: 0.9;
3520
+ }
3521
+ .retold-remote-collections-op-execute-btn:disabled
3522
+ {
3523
+ opacity: 0.5;
3524
+ cursor: default;
3525
+ }
3526
+ .retold-remote-collections-op-undo-btn
3527
+ {
3528
+ padding: 6px 12px;
3529
+ border: 1px solid var(--retold-border);
3530
+ border-radius: 3px;
3531
+ background: transparent;
3532
+ color: var(--retold-text-secondary);
3533
+ font-size: 0.78rem;
3534
+ cursor: pointer;
3535
+ }
3536
+ .retold-remote-collections-op-undo-btn:hover
3537
+ {
3538
+ background: var(--retold-bg-tertiary);
3539
+ }
3540
+ .retold-remote-collection-op-item
3541
+ {
3542
+ display: flex;
3543
+ align-items: center;
3544
+ gap: 4px;
3545
+ padding: 6px 8px;
3546
+ border-bottom: 1px solid var(--retold-border);
3547
+ font-size: 0.75rem;
3548
+ flex-wrap: wrap;
3549
+ }
3550
+ .retold-remote-collection-op-item.op-status-completed
3551
+ {
3552
+ opacity: 0.6;
3553
+ }
3554
+ .retold-remote-collection-op-item.op-status-skipped
3555
+ {
3556
+ opacity: 0.4;
3557
+ text-decoration: line-through;
3558
+ }
3559
+ .retold-remote-collection-op-item.op-status-failed
3560
+ {
3561
+ background: rgba(200, 50, 50, 0.05);
3562
+ }
3563
+ .retold-remote-collection-op-status
3564
+ {
3565
+ flex-shrink: 0;
3566
+ width: 16px;
3567
+ text-align: center;
3568
+ font-size: 0.8rem;
3569
+ }
3570
+ .op-status-completed .retold-remote-collection-op-status
3571
+ {
3572
+ color: var(--retold-success, #4a4);
3573
+ }
3574
+ .op-status-failed .retold-remote-collection-op-status
3575
+ {
3576
+ color: var(--retold-danger-muted, #e55);
3577
+ }
3578
+ .op-status-pending .retold-remote-collection-op-status
3579
+ {
3580
+ color: var(--retold-text-dim);
3581
+ }
3582
+ .retold-remote-collection-op-source
3583
+ {
3584
+ flex: 1;
3585
+ min-width: 0;
3586
+ overflow: hidden;
3587
+ text-overflow: ellipsis;
3588
+ white-space: nowrap;
3589
+ color: var(--retold-text-dim);
3590
+ }
3591
+ .retold-remote-collection-op-arrow
3592
+ {
3593
+ flex-shrink: 0;
3594
+ color: var(--retold-text-dim);
3595
+ padding: 0 2px;
3596
+ }
3597
+ .retold-remote-collection-op-dest
3598
+ {
3599
+ flex: 2;
3600
+ min-width: 0;
3601
+ overflow: hidden;
3602
+ text-overflow: ellipsis;
3603
+ white-space: nowrap;
3604
+ color: var(--retold-text-secondary);
3605
+ }
3606
+ .retold-remote-collection-op-dest-input
3607
+ {
3608
+ width: 100%;
3609
+ padding: 2px 4px;
3610
+ border: 1px solid var(--retold-accent);
3611
+ border-radius: 2px;
3612
+ background: var(--retold-bg-tertiary);
3613
+ color: var(--retold-text-secondary);
3614
+ font-size: 0.75rem;
3615
+ font-family: inherit;
3616
+ box-sizing: border-box;
3617
+ }
3618
+ .retold-remote-collection-op-badge
3619
+ {
3620
+ flex-shrink: 0;
3621
+ font-size: 0.6rem;
3622
+ padding: 1px 4px;
3623
+ border-radius: 2px;
3624
+ background: var(--retold-bg-tertiary);
3625
+ color: var(--retold-text-dim);
3626
+ text-transform: uppercase;
3627
+ font-weight: 600;
3628
+ letter-spacing: 0.3px;
3629
+ }
3630
+ .retold-remote-collection-op-error
3631
+ {
3632
+ width: 100%;
3633
+ font-size: 0.68rem;
3634
+ color: var(--retold-danger-muted, #e55);
3635
+ padding: 2px 0 0 20px;
3636
+ }
3637
+ /* ---- Edit mode ---- */
3638
+ .retold-remote-collections-edit
3639
+ {
3640
+ padding: 12px;
3641
+ }
3642
+ .retold-remote-collections-edit-group
3643
+ {
3644
+ margin-bottom: 12px;
3645
+ }
3646
+ .retold-remote-collections-edit-label
3647
+ {
3648
+ font-size: 0.7rem;
3649
+ font-weight: 600;
3650
+ text-transform: uppercase;
3651
+ letter-spacing: 0.5px;
3652
+ color: var(--retold-text-dim);
3653
+ margin-bottom: 4px;
3654
+ }
3655
+ .retold-remote-collections-edit-input
3656
+ {
3657
+ width: 100%;
3658
+ padding: 6px 8px;
3659
+ border: 1px solid var(--retold-border);
3660
+ border-radius: 3px;
3661
+ background: var(--retold-bg-tertiary);
3662
+ color: var(--retold-text-secondary);
3663
+ font-size: 0.82rem;
3664
+ font-family: inherit;
3665
+ box-sizing: border-box;
3666
+ }
3667
+ .retold-remote-collections-edit-input:focus
3668
+ {
3669
+ border-color: var(--retold-accent);
3670
+ outline: none;
3671
+ }
3672
+ .retold-remote-collections-edit-textarea
3673
+ {
3674
+ width: 100%;
3675
+ min-height: 80px;
3676
+ padding: 6px 8px;
3677
+ border: 1px solid var(--retold-border);
3678
+ border-radius: 3px;
3679
+ background: var(--retold-bg-tertiary);
3680
+ color: var(--retold-text-secondary);
3681
+ font-size: 0.78rem;
3682
+ font-family: inherit;
3683
+ box-sizing: border-box;
3684
+ resize: vertical;
3685
+ }
3686
+ .retold-remote-collections-edit-textarea:focus
3687
+ {
3688
+ border-color: var(--retold-accent);
3689
+ outline: none;
3690
+ }
3691
+ .retold-remote-collections-edit-actions
3692
+ {
3693
+ display: flex;
3694
+ gap: 8px;
3695
+ margin-top: 16px;
3696
+ }
3697
+ .retold-remote-collections-edit-btn
3698
+ {
3699
+ padding: 6px 14px;
3700
+ border: 1px solid var(--retold-border);
3701
+ border-radius: 4px;
3702
+ background: transparent;
3703
+ color: var(--retold-text-secondary);
3704
+ font-size: 0.78rem;
3705
+ cursor: pointer;
3706
+ font-family: inherit;
3707
+ }
3708
+ .retold-remote-collections-edit-btn:hover
3709
+ {
3710
+ border-color: var(--retold-accent);
3711
+ color: var(--retold-text-primary);
3712
+ }
3713
+ .retold-remote-collections-edit-btn-primary
3714
+ {
3715
+ background: var(--retold-accent);
3716
+ border-color: var(--retold-accent);
3717
+ color: #fff;
3718
+ }
3719
+ .retold-remote-collections-edit-btn-primary:hover
3720
+ {
3721
+ opacity: 0.9;
3722
+ }
3723
+ .retold-remote-collections-edit-btn-danger
3724
+ {
3725
+ border-color: var(--retold-danger-muted, #e55);
3726
+ color: var(--retold-danger-muted, #e55);
3727
+ margin-top: 16px;
3728
+ }
3729
+ .retold-remote-collections-edit-btn-danger:hover
3730
+ {
3731
+ background: rgba(200, 50, 50, 0.1);
3732
+ }
3733
+ /* ---- Drag-and-drop feedback ---- */
3734
+ .retold-remote-collection-item.dragging
3735
+ {
3736
+ opacity: 0.4;
3737
+ }
3738
+ .retold-remote-collection-item.drag-over
3739
+ {
3740
+ border-top: 2px solid var(--retold-accent);
3741
+ }
3742
+
3743
+ /* ============================================================
3744
+ FileInfoPanel
3745
+ ============================================================ */
3746
+
3747
+ .retold-remote-info
3748
+ {
3749
+ padding: 12px;
3750
+ font-size: 0.78rem;
3751
+ overflow-y: auto;
3752
+ }
3753
+ .retold-remote-info-filename
3754
+ {
3755
+ font-size: 0.85rem;
3756
+ font-weight: 700;
3757
+ color: var(--retold-text-primary);
3758
+ word-break: break-all;
3759
+ margin-bottom: 2px;
3760
+ }
3761
+ .retold-remote-info-path
3762
+ {
3763
+ font-size: 0.7rem;
3764
+ color: var(--retold-text-dim);
3765
+ word-break: break-all;
3766
+ margin-bottom: 12px;
3767
+ }
3768
+ .retold-remote-info-section
3769
+ {
3770
+ margin-bottom: 14px;
3771
+ }
3772
+ .retold-remote-info-section-title
3773
+ {
3774
+ font-size: 0.68rem;
3775
+ font-weight: 700;
3776
+ text-transform: uppercase;
3777
+ letter-spacing: 0.5px;
3778
+ color: var(--retold-text-dim);
3779
+ margin-bottom: 6px;
3780
+ padding-bottom: 3px;
3781
+ border-bottom: 1px solid var(--retold-border);
3782
+ }
3783
+ .retold-remote-info-row
3784
+ {
3785
+ display: flex;
3786
+ justify-content: space-between;
3787
+ align-items: baseline;
3788
+ padding: 2px 0;
3789
+ gap: 8px;
3790
+ }
3791
+ .retold-remote-info-label
3792
+ {
3793
+ font-size: 0.72rem;
3794
+ color: var(--retold-text-dim);
3795
+ flex-shrink: 0;
3796
+ }
3797
+ .retold-remote-info-value
3798
+ {
3799
+ font-size: 0.72rem;
3800
+ color: var(--retold-text-secondary);
3801
+ text-align: right;
3802
+ word-break: break-all;
3803
+ }
3804
+ .retold-remote-info-value-mono
3805
+ {
3806
+ font-family: monospace;
3807
+ font-size: 0.68rem;
3808
+ }
3809
+ .retold-remote-info-extract-btn
3810
+ {
3811
+ display: block;
3812
+ width: 100%;
3813
+ padding: 10px 12px;
3814
+ border: 1px solid var(--retold-accent);
3815
+ border-radius: 4px;
3816
+ background: var(--retold-bg-secondary);
3817
+ color: var(--retold-accent);
3818
+ font-size: 0.78rem;
3819
+ font-family: inherit;
3820
+ cursor: pointer;
3821
+ text-align: center;
3822
+ transition: background 0.15s, color 0.15s;
3823
+ margin-bottom: 14px;
3824
+ }
3825
+ .retold-remote-info-extract-btn:hover
3826
+ {
3827
+ background: var(--retold-accent);
3828
+ color: var(--retold-bg-primary);
3829
+ }
3830
+ .retold-remote-info-extract-btn:disabled
3831
+ {
3832
+ opacity: 0.5;
3833
+ cursor: wait;
3834
+ }
3835
+ .retold-remote-info-empty
3836
+ {
3837
+ padding: 24px 12px;
3838
+ text-align: center;
3839
+ color: var(--retold-text-dim);
3840
+ font-size: 0.78rem;
3841
+ }
3842
+ .retold-remote-info-chapter-row
3843
+ {
3844
+ display: flex;
3845
+ align-items: baseline;
3846
+ padding: 2px 0;
3847
+ gap: 6px;
3848
+ font-size: 0.72rem;
3849
+ }
3850
+ .retold-remote-info-chapter-time
3851
+ {
3852
+ color: var(--retold-accent);
3853
+ font-family: monospace;
3854
+ font-size: 0.68rem;
3855
+ flex-shrink: 0;
3856
+ }
3857
+ .retold-remote-info-chapter-title
3858
+ {
3859
+ color: var(--retold-text-secondary);
3860
+ }
3861
+ .retold-remote-info-tag-row
3862
+ {
3863
+ display: flex;
3864
+ align-items: baseline;
3865
+ padding: 1px 0;
3866
+ gap: 6px;
3867
+ font-size: 0.7rem;
3868
+ }
3869
+ .retold-remote-info-tag-key
3870
+ {
3871
+ color: var(--retold-text-dim);
3872
+ flex-shrink: 0;
3873
+ font-family: monospace;
3874
+ font-size: 0.66rem;
3875
+ }
3876
+ .retold-remote-info-tag-value
3877
+ {
3878
+ color: var(--retold-text-secondary);
3879
+ word-break: break-all;
3880
+ }
3881
+ .retold-remote-info-gps-link
3882
+ {
3883
+ color: var(--retold-accent);
3884
+ text-decoration: none;
3885
+ font-size: 0.72rem;
3886
+ }
3887
+ .retold-remote-info-gps-link:hover
3888
+ {
3889
+ text-decoration: underline;
3890
+ }
3891
+ .retold-remote-info-spinner
3892
+ {
3893
+ text-align: center;
3894
+ padding: 16px;
3895
+ color: var(--retold-text-dim);
3896
+ font-size: 0.75rem;
3897
+ }
3898
+
3899
+ /* ============================================================
3900
+ SettingsPanel
3901
+ ============================================================ */
3902
+
3903
+ .retold-remote-settings
3904
+ {
3905
+ padding: 12px;
3906
+ }
3907
+ .retold-remote-settings-section
3908
+ {
3909
+ margin-bottom: 16px;
3910
+ }
3911
+ .retold-remote-settings-section-title
3912
+ {
3913
+ font-size: 0.7rem;
3914
+ font-weight: 700;
3915
+ text-transform: uppercase;
3916
+ letter-spacing: 0.5px;
3917
+ color: var(--retold-text-dim);
3918
+ margin-bottom: 8px;
3919
+ }
3920
+ .retold-remote-settings-row
3921
+ {
3922
+ display: flex;
3923
+ align-items: center;
3924
+ justify-content: space-between;
3925
+ padding: 4px 0;
3926
+ }
3927
+ .retold-remote-settings-label
3928
+ {
3929
+ font-size: 0.78rem;
3930
+ color: var(--retold-text-secondary);
3931
+ }
3932
+ .retold-remote-settings-select
3933
+ {
3934
+ padding: 3px 8px;
3935
+ border: 1px solid var(--retold-border);
3936
+ border-radius: 3px;
3937
+ background: var(--retold-bg-tertiary);
3938
+ color: var(--retold-text-secondary);
3939
+ font-size: 0.75rem;
3940
+ font-family: inherit;
3941
+ }
3942
+ .retold-remote-settings-checkbox
3943
+ {
3944
+ accent-color: var(--retold-accent);
3945
+ }
3946
+ .retold-remote-settings-capabilities
3947
+ {
3948
+ margin-top: 12px;
3949
+ padding: 8px;
3950
+ background: var(--retold-bg-secondary);
3951
+ border-radius: 4px;
3952
+ font-size: 0.72rem;
3953
+ }
3954
+ .retold-remote-settings-cap-row
3955
+ {
3956
+ display: flex;
3957
+ justify-content: space-between;
3958
+ padding: 2px 0;
3959
+ }
3960
+ .retold-remote-settings-cap-label
3961
+ {
3962
+ color: var(--retold-text-dim);
3963
+ }
3964
+ .retold-remote-settings-cap-yes
3965
+ {
3966
+ color: var(--retold-accent);
3967
+ }
3968
+ .retold-remote-settings-cap-no
3969
+ {
3970
+ color: var(--retold-danger-muted);
3971
+ }
3972
+ .retold-remote-settings-vlc-btn
3973
+ {
3974
+ display: block;
3975
+ width: 100%;
3976
+ padding: 8px 12px;
3977
+ border: 1px solid var(--retold-border);
3978
+ border-radius: 4px;
3979
+ background: var(--retold-bg-secondary);
3980
+ color: var(--retold-text-secondary);
3981
+ font-size: 0.75rem;
3982
+ font-family: inherit;
3983
+ cursor: pointer;
3984
+ text-align: left;
3985
+ transition: background 0.15s, color 0.15s;
3986
+ }
3987
+ .retold-remote-settings-vlc-btn:hover
3988
+ {
3989
+ background: var(--retold-bg-hover);
3990
+ color: var(--retold-text-primary);
3991
+ }
3992
+ .retold-remote-settings-input
3993
+ {
3994
+ width: 100%;
3995
+ padding: 5px 8px;
3996
+ border: 1px solid var(--retold-border);
3997
+ border-radius: 3px;
3998
+ background: var(--retold-bg-tertiary);
3999
+ color: var(--retold-text-secondary);
4000
+ font-size: 0.75rem;
4001
+ font-family: inherit;
4002
+ box-sizing: border-box;
4003
+ }
4004
+ .retold-remote-settings-input:focus
4005
+ {
4006
+ outline: none;
4007
+ border-color: var(--retold-accent);
4008
+ }
4009
+ .retold-remote-settings-input-row
4010
+ {
4011
+ margin-bottom: 8px;
4012
+ }
4013
+ .retold-remote-settings-input-label
4014
+ {
4015
+ display: block;
4016
+ font-size: 0.72rem;
4017
+ color: var(--retold-text-dim);
4018
+ margin-bottom: 3px;
4019
+ }
4020
+ .retold-remote-settings-template-preview
4021
+ {
4022
+ font-size: 0.68rem;
4023
+ color: var(--retold-text-dim);
4024
+ margin-top: 3px;
4025
+ font-style: italic;
4026
+ word-break: break-all;
4027
+ }
4028
+
4029
+ /* ============================================================
4030
+ VLCSetup
4031
+ ============================================================ */
4032
+
4033
+ .retold-remote-vlc-modal-backdrop
4034
+ {
4035
+ position: fixed;
4036
+ top: 0;
4037
+ left: 0;
4038
+ right: 0;
4039
+ bottom: 0;
4040
+ background: rgba(0, 0, 0, 0.6);
4041
+ z-index: 9000;
4042
+ display: flex;
4043
+ align-items: center;
4044
+ justify-content: center;
4045
+ }
4046
+ .retold-remote-vlc-modal
4047
+ {
4048
+ background: var(--retold-bg-tertiary);
4049
+ border: 1px solid var(--retold-border);
4050
+ border-radius: 8px;
4051
+ width: 600px;
4052
+ max-width: 90vw;
4053
+ max-height: 85vh;
4054
+ display: flex;
4055
+ flex-direction: column;
4056
+ box-shadow: 0 8px 32px rgba(0, 0, 0, 0.4);
4057
+ }
4058
+ .retold-remote-vlc-modal-header
4059
+ {
4060
+ display: flex;
4061
+ align-items: center;
4062
+ justify-content: space-between;
4063
+ padding: 14px 18px;
4064
+ border-bottom: 1px solid var(--retold-border);
4065
+ flex-shrink: 0;
4066
+ }
4067
+ .retold-remote-vlc-modal-title
4068
+ {
4069
+ font-size: 0.85rem;
4070
+ font-weight: 700;
4071
+ color: var(--retold-text-primary);
4072
+ }
4073
+ .retold-remote-vlc-modal-close
4074
+ {
4075
+ border: none;
4076
+ background: transparent;
4077
+ color: var(--retold-text-muted);
4078
+ font-size: 1.1rem;
4079
+ cursor: pointer;
4080
+ padding: 2px 6px;
4081
+ border-radius: 3px;
4082
+ font-family: inherit;
4083
+ line-height: 1;
4084
+ }
4085
+ .retold-remote-vlc-modal-close:hover
4086
+ {
4087
+ background: var(--retold-bg-hover);
4088
+ color: var(--retold-text-primary);
4089
+ }
4090
+ .retold-remote-vlc-modal-body
4091
+ {
4092
+ flex: 1;
4093
+ overflow-y: auto;
4094
+ padding: 18px;
4095
+ }
4096
+ .retold-remote-vlc-setup-section
4097
+ {
4098
+ margin-bottom: 18px;
4099
+ }
4100
+ .retold-remote-vlc-setup-section-title
4101
+ {
4102
+ font-size: 0.7rem;
4103
+ font-weight: 700;
4104
+ text-transform: uppercase;
4105
+ letter-spacing: 0.5px;
4106
+ color: var(--retold-text-dim);
4107
+ margin-bottom: 8px;
4108
+ }
4109
+ .retold-remote-vlc-setup-desc
4110
+ {
4111
+ font-size: 0.75rem;
4112
+ color: var(--retold-text-secondary);
4113
+ line-height: 1.5;
4114
+ margin-bottom: 8px;
4115
+ }
4116
+ .retold-remote-vlc-setup-status
4117
+ {
4118
+ display: flex;
4119
+ align-items: center;
4120
+ gap: 8px;
4121
+ padding: 8px;
4122
+ border-radius: 4px;
4123
+ background: var(--retold-bg-secondary);
4124
+ margin-bottom: 12px;
4125
+ font-size: 0.75rem;
4126
+ color: var(--retold-text-secondary);
4127
+ }
4128
+ .retold-remote-vlc-setup-status-dot
4129
+ {
4130
+ width: 8px;
4131
+ height: 8px;
4132
+ border-radius: 50%;
4133
+ flex-shrink: 0;
4134
+ }
4135
+ .retold-remote-vlc-setup-status-dot.detected
4136
+ {
4137
+ background: var(--retold-accent);
4138
+ }
4139
+ .retold-remote-vlc-setup-status-dot.unknown
4140
+ {
4141
+ background: var(--retold-text-dim);
4142
+ }
4143
+ .retold-remote-vlc-setup-platform
4144
+ {
4145
+ display: none;
4146
+ }
4147
+ .retold-remote-vlc-setup-platform.active
4148
+ {
4149
+ display: block;
4150
+ }
4151
+ .retold-remote-vlc-setup-platform-tabs
4152
+ {
4153
+ display: flex;
4154
+ gap: 0;
4155
+ margin-bottom: 12px;
4156
+ border-bottom: 1px solid var(--retold-border);
4157
+ }
4158
+ .retold-remote-vlc-setup-platform-tab
4159
+ {
4160
+ padding: 6px 12px;
4161
+ border: none;
4162
+ background: transparent;
4163
+ font-size: 0.72rem;
4164
+ font-weight: 600;
4165
+ color: var(--retold-text-muted);
4166
+ cursor: pointer;
4167
+ border-bottom: 2px solid transparent;
4168
+ font-family: inherit;
4169
+ }
4170
+ .retold-remote-vlc-setup-platform-tab:hover
4171
+ {
4172
+ color: var(--retold-text-secondary);
4173
+ }
4174
+ .retold-remote-vlc-setup-platform-tab.active
4175
+ {
4176
+ color: var(--retold-accent);
4177
+ border-bottom-color: var(--retold-accent);
4178
+ }
4179
+ .retold-remote-vlc-setup-code
4180
+ {
4181
+ background: var(--retold-bg-primary);
4182
+ border: 1px solid var(--retold-border);
4183
+ border-radius: 4px;
4184
+ padding: 10px;
4185
+ font-family: "SF Mono", "Fira Code", "Consolas", monospace;
4186
+ font-size: 0.68rem;
4187
+ color: var(--retold-text-secondary);
4188
+ line-height: 1.6;
4189
+ overflow-x: auto;
4190
+ white-space: pre;
4191
+ margin-bottom: 8px;
4192
+ tab-size: 4;
4193
+ }
4194
+ .retold-remote-vlc-setup-btn
4195
+ {
4196
+ display: inline-block;
4197
+ padding: 6px 14px;
4198
+ border: 1px solid var(--retold-border);
4199
+ border-radius: 4px;
4200
+ background: var(--retold-bg-secondary);
4201
+ color: var(--retold-text-secondary);
4202
+ font-size: 0.72rem;
4203
+ font-family: inherit;
4204
+ cursor: pointer;
4205
+ transition: background 0.15s, color 0.15s;
4206
+ margin-right: 6px;
4207
+ margin-bottom: 6px;
4208
+ }
4209
+ .retold-remote-vlc-setup-btn:hover
4210
+ {
4211
+ background: var(--retold-bg-hover);
4212
+ color: var(--retold-text-primary);
4213
+ }
4214
+ .retold-remote-vlc-setup-btn.primary
4215
+ {
4216
+ background: var(--retold-accent);
4217
+ border-color: var(--retold-accent);
4218
+ color: #fff;
4219
+ }
4220
+ .retold-remote-vlc-setup-btn.primary:hover
4221
+ {
4222
+ opacity: 0.85;
4223
+ }
4224
+ .retold-remote-vlc-setup-step
4225
+ {
4226
+ display: flex;
4227
+ gap: 10px;
4228
+ margin-bottom: 10px;
4229
+ }
4230
+ .retold-remote-vlc-setup-step-num
4231
+ {
4232
+ flex-shrink: 0;
4233
+ width: 20px;
4234
+ height: 20px;
4235
+ border-radius: 50%;
4236
+ background: var(--retold-accent);
4237
+ color: #fff;
4238
+ font-size: 0.65rem;
4239
+ font-weight: 700;
4240
+ display: flex;
4241
+ align-items: center;
4242
+ justify-content: center;
4243
+ }
4244
+ .retold-remote-vlc-setup-step-content
4245
+ {
4246
+ flex: 1;
4247
+ font-size: 0.75rem;
4248
+ color: var(--retold-text-secondary);
4249
+ line-height: 1.5;
4250
+ }
4251
+ .retold-remote-vlc-setup-note
4252
+ {
4253
+ font-size: 0.7rem;
4254
+ color: var(--retold-text-dim);
4255
+ font-style: italic;
4256
+ margin-top: 4px;
4257
+ }
4258
+ .retold-remote-toast
4259
+ {
4260
+ position: fixed;
4261
+ bottom: 20px;
4262
+ left: 50%;
4263
+ transform: translateX(-50%);
4264
+ background: var(--retold-bg-secondary);
4265
+ color: var(--retold-accent);
4266
+ padding: 8px 16px;
4267
+ border-radius: 4px;
4268
+ font-size: 0.75rem;
4269
+ z-index: 10000;
4270
+ pointer-events: none;
4271
+ border: 1px solid var(--retold-border);
4272
+ }