retold-remote 0.0.10 → 0.0.12

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 (76) hide show
  1. package/css/retold-remote.css +4232 -0
  2. package/docs/README.md +62 -4
  3. package/docs/_sidebar.md +11 -2
  4. package/docs/audio-explorer.md +120 -0
  5. package/docs/audio-viewer.md +1 -93
  6. package/docs/collections.md +162 -0
  7. package/docs/image-explorer.md +71 -0
  8. package/docs/image-viewer.md +9 -1
  9. package/docs/metadata.md +211 -0
  10. package/docs/video-explorer.md +117 -0
  11. package/docs/video-viewer.md +5 -63
  12. package/html/index.html +3 -1
  13. package/package.json +11 -1
  14. package/source/Pict-Application-RetoldRemote.js +148 -44
  15. package/source/RetoldRemote-ExtensionMaps.js +47 -0
  16. package/source/cli/RetoldRemote-Server-Setup.js +1058 -119
  17. package/source/providers/CollectionManager-AddItems.js +497 -0
  18. package/source/providers/CollectionManager-Favorites.js +313 -0
  19. package/source/providers/CollectionManager-OperationPlan.js +281 -0
  20. package/source/providers/Pict-Provider-CollectionManager.js +134 -743
  21. package/source/providers/Pict-Provider-GalleryNavigation.js +139 -26
  22. package/source/providers/Pict-Provider-RetoldRemote.js +2 -2
  23. package/source/providers/Pict-Provider-RetoldRemoteIcons.js +53 -2
  24. package/source/providers/Pict-Provider-RetoldRemoteTheme.js +9 -785
  25. package/source/providers/RetoldRemote-ThemeDefinitions.js +798 -0
  26. package/source/providers/keyboard-handlers/KeyHandler-AudioExplorer.js +4 -3
  27. package/source/providers/keyboard-handlers/KeyHandler-Gallery.js +39 -10
  28. package/source/providers/keyboard-handlers/KeyHandler-ImageExplorer.js +83 -0
  29. package/source/providers/keyboard-handlers/KeyHandler-VideoExplorer.js +74 -3
  30. package/source/providers/keyboard-handlers/KeyHandler-Viewer.js +81 -5
  31. package/source/server/RetoldRemote-ArchiveService.js +159 -7
  32. package/source/server/RetoldRemote-AudioWaveformService.js +11 -1
  33. package/source/server/RetoldRemote-CollectionService.js +4 -0
  34. package/source/server/RetoldRemote-EpubMetadataService.js +559 -0
  35. package/source/server/RetoldRemote-EpubXmlParser.js +523 -0
  36. package/source/server/RetoldRemote-ExplorerStateMixin.js +117 -0
  37. package/source/server/RetoldRemote-ImageService.js +1372 -0
  38. package/source/server/RetoldRemote-MediaService.js +325 -3
  39. package/source/server/RetoldRemote-MetadataCache.js +536 -41
  40. package/source/server/RetoldRemote-PathRegistry.js +180 -1
  41. package/source/server/RetoldRemote-ToolDetector.js +107 -8
  42. package/source/server/RetoldRemote-VideoFrameService.js +155 -1
  43. package/source/views/MediaViewer-CodeViewer.js +154 -0
  44. package/source/views/MediaViewer-EbookViewer.js +292 -0
  45. package/source/views/PictView-Remote-AudioExplorer.js +218 -266
  46. package/source/views/PictView-Remote-CollectionsPanel.js +35 -528
  47. package/source/views/PictView-Remote-FileInfoPanel.js +797 -0
  48. package/source/views/PictView-Remote-Gallery.js +1 -692
  49. package/source/views/PictView-Remote-ImageExplorer.js +798 -0
  50. package/source/views/PictView-Remote-ImageViewer.js +22 -30
  51. package/source/views/PictView-Remote-Layout.js +13 -480
  52. package/source/views/PictView-Remote-MediaViewer.js +262 -937
  53. package/source/views/PictView-Remote-SettingsPanel.js +8 -128
  54. package/source/views/PictView-Remote-TopBar.js +43 -447
  55. package/source/views/PictView-Remote-VLCSetup.js +6 -242
  56. package/source/views/PictView-Remote-VideoExplorer.js +327 -786
  57. package/source/views/VideoExplorer-CustomFrames.js +414 -0
  58. package/source/views/VideoExplorer-Preview.js +316 -0
  59. package/source/views/VideoExplorer-Selection.js +527 -0
  60. package/web-application/css/retold-remote.css +4232 -0
  61. package/web-application/docs/README.md +62 -4
  62. package/web-application/docs/_sidebar.md +11 -2
  63. package/web-application/docs/audio-explorer.md +120 -0
  64. package/web-application/docs/audio-viewer.md +1 -93
  65. package/web-application/docs/collections.md +162 -0
  66. package/web-application/docs/image-explorer.md +71 -0
  67. package/web-application/docs/image-viewer.md +9 -1
  68. package/web-application/docs/metadata.md +211 -0
  69. package/web-application/docs/video-explorer.md +117 -0
  70. package/web-application/docs/video-viewer.md +5 -63
  71. package/web-application/index.html +3 -1
  72. package/web-application/js/jszip.min.js +13 -0
  73. package/web-application/retold-remote.js +1553 -4390
  74. package/web-application/retold-remote.js.map +1 -1
  75. package/web-application/retold-remote.min.js +127 -16
  76. package/web-application/retold-remote.min.js.map +1 -1
@@ -82,3 +82,4235 @@ 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
+ display: flex;
2030
+ flex-direction: column;
2031
+ font-size: 0.78rem;
2032
+ }
2033
+ .retold-remote-ebook-toc.collapsed
2034
+ {
2035
+ display: none;
2036
+ }
2037
+ .retold-remote-ebook-toc-header
2038
+ {
2039
+ display: flex;
2040
+ align-items: center;
2041
+ justify-content: space-between;
2042
+ padding: 8px 12px;
2043
+ border-bottom: 1px solid var(--retold-border);
2044
+ color: var(--retold-text-secondary);
2045
+ font-size: 0.72rem;
2046
+ font-weight: 600;
2047
+ text-transform: uppercase;
2048
+ letter-spacing: 0.04em;
2049
+ flex-shrink: 0;
2050
+ }
2051
+ .retold-remote-ebook-toc-close
2052
+ {
2053
+ border: none;
2054
+ background: none;
2055
+ color: var(--retold-text-muted);
2056
+ font-size: 1.1rem;
2057
+ cursor: pointer;
2058
+ padding: 0 4px;
2059
+ line-height: 1;
2060
+ }
2061
+ .retold-remote-ebook-toc-close:hover
2062
+ {
2063
+ color: var(--retold-text-primary);
2064
+ }
2065
+ .retold-remote-ebook-toc-items
2066
+ {
2067
+ overflow-y: auto;
2068
+ flex: 1;
2069
+ padding: 4px 0;
2070
+ }
2071
+ .retold-remote-ebook-toc-item
2072
+ {
2073
+ display: block;
2074
+ padding: 6px 16px;
2075
+ color: var(--retold-text-secondary);
2076
+ text-decoration: none;
2077
+ cursor: pointer;
2078
+ transition: background 0.1s, color 0.1s;
2079
+ border: none;
2080
+ background: none;
2081
+ width: 100%;
2082
+ text-align: left;
2083
+ font-family: inherit;
2084
+ font-size: inherit;
2085
+ }
2086
+ .retold-remote-ebook-toc-item:hover
2087
+ {
2088
+ background: var(--retold-bg-tertiary);
2089
+ color: var(--retold-text-primary);
2090
+ }
2091
+ .retold-remote-ebook-toc-item.indent-1
2092
+ {
2093
+ padding-left: 32px;
2094
+ }
2095
+ .retold-remote-ebook-toc-item.indent-2
2096
+ {
2097
+ padding-left: 48px;
2098
+ }
2099
+ .retold-remote-ebook-reader
2100
+ {
2101
+ flex: 1;
2102
+ display: flex;
2103
+ flex-direction: column;
2104
+ min-width: 0;
2105
+ position: relative;
2106
+ }
2107
+ .retold-remote-ebook-content
2108
+ {
2109
+ flex: 1;
2110
+ position: relative;
2111
+ overflow: hidden;
2112
+ }
2113
+ .retold-remote-ebook-content iframe
2114
+ {
2115
+ border: none;
2116
+ }
2117
+ .retold-remote-ebook-controls
2118
+ {
2119
+ display: flex;
2120
+ align-items: center;
2121
+ justify-content: center;
2122
+ gap: 16px;
2123
+ padding: 8px 16px;
2124
+ background: var(--retold-bg-secondary);
2125
+ border-top: 1px solid var(--retold-border);
2126
+ flex-shrink: 0;
2127
+ }
2128
+ .retold-remote-ebook-page-btn
2129
+ {
2130
+ padding: 6px 20px;
2131
+ border: 1px solid var(--retold-border);
2132
+ border-radius: 3px;
2133
+ background: transparent;
2134
+ color: var(--retold-text-muted);
2135
+ font-size: 0.82rem;
2136
+ cursor: pointer;
2137
+ transition: color 0.15s, border-color 0.15s;
2138
+ font-family: inherit;
2139
+ }
2140
+ .retold-remote-ebook-page-btn:hover
2141
+ {
2142
+ color: var(--retold-text-primary);
2143
+ border-color: var(--retold-accent);
2144
+ }
2145
+ .retold-remote-ebook-toc-btn
2146
+ {
2147
+ padding: 6px 12px;
2148
+ border: 1px solid var(--retold-border);
2149
+ border-radius: 3px;
2150
+ background: transparent;
2151
+ color: var(--retold-text-muted);
2152
+ font-size: 0.75rem;
2153
+ cursor: pointer;
2154
+ font-family: inherit;
2155
+ }
2156
+ .retold-remote-ebook-toc-btn:hover
2157
+ {
2158
+ color: var(--retold-text-primary);
2159
+ border-color: var(--retold-accent);
2160
+ }
2161
+ .retold-remote-ebook-loading
2162
+ {
2163
+ display: flex;
2164
+ flex-direction: column;
2165
+ align-items: center;
2166
+ justify-content: center;
2167
+ height: 100%;
2168
+ color: var(--retold-text-dim);
2169
+ font-size: 0.85rem;
2170
+ }
2171
+ /* Distraction-free toggle */
2172
+ .retold-remote-df-toggle
2173
+ {
2174
+ position: absolute;
2175
+ top: 8px;
2176
+ left: 8px;
2177
+ z-index: 15;
2178
+ padding: 4px 8px;
2179
+ border: 1px solid var(--retold-border);
2180
+ border-radius: 3px;
2181
+ background: rgba(0, 0, 0, 0.5);
2182
+ color: var(--retold-text-muted);
2183
+ font-size: 0.72rem;
2184
+ cursor: pointer;
2185
+ opacity: 0;
2186
+ transition: opacity 0.2s ease, color 0.15s, border-color 0.15s;
2187
+ font-family: inherit;
2188
+ white-space: nowrap;
2189
+ }
2190
+ .retold-remote-viewer-body:hover .retold-remote-df-toggle,
2191
+ .retold-remote-df-toggle:focus
2192
+ {
2193
+ opacity: 1;
2194
+ }
2195
+ .retold-remote-df-toggle:hover
2196
+ {
2197
+ color: var(--retold-text-primary);
2198
+ border-color: var(--retold-accent);
2199
+ }
2200
+ .retold-remote-df-toggle.active
2201
+ {
2202
+ color: var(--retold-accent);
2203
+ border-color: var(--retold-accent);
2204
+ }
2205
+ /* Distraction-free exit hotspot (top-left corner) */
2206
+ .retold-remote-df-exit-hotspot
2207
+ {
2208
+ position: absolute;
2209
+ top: 0;
2210
+ left: 0;
2211
+ width: 80px;
2212
+ height: 80px;
2213
+ z-index: 16;
2214
+ cursor: pointer;
2215
+ display: none;
2216
+ }
2217
+ .retold-remote-df-exit-hotspot::after
2218
+ {
2219
+ content: '';
2220
+ position: absolute;
2221
+ top: 12px;
2222
+ left: 12px;
2223
+ width: 8px;
2224
+ height: 8px;
2225
+ border-radius: 50%;
2226
+ background: var(--retold-accent);
2227
+ opacity: 0;
2228
+ transition: opacity 0.3s ease;
2229
+ }
2230
+ .retold-remote-df-exit-hotspot:hover::after
2231
+ {
2232
+ opacity: 0.6;
2233
+ }
2234
+
2235
+ /* ============================================================
2236
+ ImageViewer
2237
+ ============================================================ */
2238
+
2239
+ #RetoldRemote-ImageViewer-Img
2240
+ {
2241
+ image-orientation: from-image;
2242
+ transition: width 0.15s ease, height 0.15s ease;
2243
+ display: block;
2244
+ }
2245
+ .retold-remote-fit-indicator
2246
+ {
2247
+ position: absolute;
2248
+ top: 50%;
2249
+ left: 50%;
2250
+ transform: translate(-50%, -50%);
2251
+ background: rgba(0, 0, 0, 0.7);
2252
+ color: #fff;
2253
+ padding: 8px 18px;
2254
+ border-radius: 6px;
2255
+ font-size: 0.82rem;
2256
+ pointer-events: none;
2257
+ z-index: 20;
2258
+ opacity: 0;
2259
+ transition: opacity 0.3s ease;
2260
+ white-space: nowrap;
2261
+ }
2262
+ .retold-remote-fit-indicator.visible
2263
+ {
2264
+ opacity: 1;
2265
+ }
2266
+ .retold-remote-image-explore-btn
2267
+ {
2268
+ position: absolute;
2269
+ bottom: 16px;
2270
+ right: 16px;
2271
+ background: rgba(40, 44, 52, 0.85);
2272
+ color: #abb2bf;
2273
+ border: 1px solid rgba(255, 255, 255, 0.15);
2274
+ padding: 6px 14px;
2275
+ border-radius: 6px;
2276
+ font-size: 0.82rem;
2277
+ cursor: pointer;
2278
+ z-index: 20;
2279
+ transition: background 0.2s, color 0.2s;
2280
+ }
2281
+ .retold-remote-image-explore-btn:hover
2282
+ {
2283
+ background: rgba(97, 175, 239, 0.3);
2284
+ color: #fff;
2285
+ }
2286
+ .retold-remote-image-large-badge
2287
+ {
2288
+ position: absolute;
2289
+ top: 16px;
2290
+ right: 16px;
2291
+ background: rgba(40, 44, 52, 0.85);
2292
+ color: #e5c07b;
2293
+ padding: 4px 10px;
2294
+ border-radius: 4px;
2295
+ font-size: 0.72rem;
2296
+ pointer-events: none;
2297
+ z-index: 20;
2298
+ }
2299
+
2300
+ /* ============================================================
2301
+ ImageExplorer
2302
+ ============================================================ */
2303
+
2304
+ .retold-remote-iex
2305
+ {
2306
+ display: flex;
2307
+ flex-direction: column;
2308
+ height: 100%;
2309
+ }
2310
+ .retold-remote-iex-header
2311
+ {
2312
+ display: flex;
2313
+ align-items: center;
2314
+ gap: 12px;
2315
+ padding: 8px 16px;
2316
+ background: var(--retold-bg-secondary);
2317
+ border-bottom: 1px solid var(--retold-border);
2318
+ flex-shrink: 0;
2319
+ z-index: 5;
2320
+ }
2321
+ .retold-remote-iex-nav-btn
2322
+ {
2323
+ padding: 4px 10px;
2324
+ border: 1px solid var(--retold-border);
2325
+ border-radius: 3px;
2326
+ background: transparent;
2327
+ color: var(--retold-text-muted);
2328
+ font-size: 0.8rem;
2329
+ cursor: pointer;
2330
+ transition: color 0.15s, border-color 0.15s;
2331
+ font-family: inherit;
2332
+ }
2333
+ .retold-remote-iex-nav-btn:hover
2334
+ {
2335
+ color: var(--retold-text-primary);
2336
+ border-color: var(--retold-accent);
2337
+ }
2338
+ .retold-remote-iex-title
2339
+ {
2340
+ flex: 1;
2341
+ font-size: 0.82rem;
2342
+ color: var(--retold-text-secondary);
2343
+ overflow: hidden;
2344
+ text-overflow: ellipsis;
2345
+ white-space: nowrap;
2346
+ text-align: center;
2347
+ }
2348
+ .retold-remote-iex-info
2349
+ {
2350
+ display: flex;
2351
+ align-items: center;
2352
+ gap: 16px;
2353
+ padding: 8px 16px;
2354
+ background: var(--retold-bg-tertiary);
2355
+ border-bottom: 1px solid var(--retold-border);
2356
+ flex-shrink: 0;
2357
+ font-size: 0.75rem;
2358
+ color: var(--retold-text-dim);
2359
+ }
2360
+ .retold-remote-iex-info-item
2361
+ {
2362
+ display: inline-flex;
2363
+ align-items: center;
2364
+ gap: 4px;
2365
+ }
2366
+ .retold-remote-iex-info-label
2367
+ {
2368
+ color: var(--retold-text-muted);
2369
+ }
2370
+ .retold-remote-iex-info-value
2371
+ {
2372
+ color: var(--retold-text-secondary);
2373
+ }
2374
+ .retold-remote-iex-tiling-status
2375
+ {
2376
+ color: var(--retold-accent);
2377
+ animation: retold-pulse 1.5s ease-in-out infinite;
2378
+ }
2379
+ @keyframes retold-pulse
2380
+ {
2381
+ 0%, 100% { opacity: 1; }
2382
+ 50% { opacity: 0.5; }
2383
+ }
2384
+ .retold-remote-iex-body
2385
+ {
2386
+ flex: 1;
2387
+ position: relative;
2388
+ overflow: hidden;
2389
+ background: var(--retold-bg-primary);
2390
+ }
2391
+ #RetoldRemote-IEX-Viewer
2392
+ {
2393
+ width: 100%;
2394
+ height: 100%;
2395
+ }
2396
+ .retold-remote-iex-loading
2397
+ {
2398
+ display: flex;
2399
+ flex-direction: column;
2400
+ align-items: center;
2401
+ justify-content: center;
2402
+ height: 100%;
2403
+ color: var(--retold-text-dim);
2404
+ font-size: 0.85rem;
2405
+ gap: 12px;
2406
+ }
2407
+ .retold-remote-iex-error
2408
+ {
2409
+ display: flex;
2410
+ flex-direction: column;
2411
+ align-items: center;
2412
+ justify-content: center;
2413
+ height: 100%;
2414
+ gap: 16px;
2415
+ padding: 20px;
2416
+ }
2417
+ .retold-remote-iex-error-message
2418
+ {
2419
+ color: var(--retold-text-muted);
2420
+ font-size: 0.85rem;
2421
+ text-align: center;
2422
+ }
2423
+ .retold-remote-iex-controls
2424
+ {
2425
+ display: flex;
2426
+ align-items: center;
2427
+ gap: 8px;
2428
+ padding: 6px 16px;
2429
+ background: var(--retold-bg-secondary);
2430
+ border-top: 1px solid var(--retold-border);
2431
+ flex-shrink: 0;
2432
+ font-size: 0.75rem;
2433
+ color: var(--retold-text-dim);
2434
+ }
2435
+ .retold-remote-iex-controls button
2436
+ {
2437
+ padding: 3px 8px;
2438
+ border: 1px solid var(--retold-border);
2439
+ border-radius: 3px;
2440
+ background: transparent;
2441
+ color: var(--retold-text-muted);
2442
+ font-size: 0.75rem;
2443
+ cursor: pointer;
2444
+ font-family: inherit;
2445
+ transition: color 0.15s, border-color 0.15s;
2446
+ }
2447
+ .retold-remote-iex-controls button:hover
2448
+ {
2449
+ color: var(--retold-text-primary);
2450
+ border-color: var(--retold-accent);
2451
+ }
2452
+ .retold-remote-iex-zoom-label
2453
+ {
2454
+ min-width: 40px;
2455
+ text-align: center;
2456
+ color: var(--retold-text-secondary);
2457
+ }
2458
+
2459
+ /* ============================================================
2460
+ AudioExplorer
2461
+ ============================================================ */
2462
+
2463
+ .retold-remote-aex
2464
+ {
2465
+ display: flex;
2466
+ flex-direction: column;
2467
+ height: 100%;
2468
+ }
2469
+ .retold-remote-aex-header
2470
+ {
2471
+ display: flex;
2472
+ align-items: center;
2473
+ gap: 12px;
2474
+ padding: 8px 16px;
2475
+ background: var(--retold-bg-secondary);
2476
+ border-bottom: 1px solid var(--retold-border);
2477
+ flex-shrink: 0;
2478
+ z-index: 5;
2479
+ }
2480
+ .retold-remote-aex-nav-btn
2481
+ {
2482
+ padding: 4px 10px;
2483
+ border: 1px solid var(--retold-border);
2484
+ border-radius: 3px;
2485
+ background: transparent;
2486
+ color: var(--retold-text-muted);
2487
+ font-size: 0.8rem;
2488
+ cursor: pointer;
2489
+ transition: color 0.15s, border-color 0.15s;
2490
+ font-family: inherit;
2491
+ }
2492
+ .retold-remote-aex-nav-btn:hover
2493
+ {
2494
+ color: var(--retold-text-primary);
2495
+ border-color: var(--retold-accent);
2496
+ }
2497
+ .retold-remote-aex-title
2498
+ {
2499
+ flex: 1;
2500
+ font-size: 0.82rem;
2501
+ color: var(--retold-text-secondary);
2502
+ overflow: hidden;
2503
+ text-overflow: ellipsis;
2504
+ white-space: nowrap;
2505
+ text-align: center;
2506
+ }
2507
+ .retold-remote-aex-info
2508
+ {
2509
+ display: flex;
2510
+ align-items: center;
2511
+ gap: 16px;
2512
+ padding: 8px 16px;
2513
+ background: var(--retold-bg-tertiary);
2514
+ border-bottom: 1px solid var(--retold-border);
2515
+ flex-shrink: 0;
2516
+ font-size: 0.75rem;
2517
+ color: var(--retold-text-dim);
2518
+ flex-wrap: wrap;
2519
+ }
2520
+ .retold-remote-aex-info-item
2521
+ {
2522
+ display: inline-flex;
2523
+ align-items: center;
2524
+ gap: 4px;
2525
+ }
2526
+ .retold-remote-aex-info-label
2527
+ {
2528
+ color: var(--retold-text-muted);
2529
+ }
2530
+ .retold-remote-aex-info-value
2531
+ {
2532
+ color: var(--retold-text-secondary);
2533
+ }
2534
+ .retold-remote-aex-controls
2535
+ {
2536
+ display: flex;
2537
+ align-items: center;
2538
+ gap: 12px;
2539
+ padding: 8px 16px;
2540
+ background: var(--retold-bg-secondary);
2541
+ border-bottom: 1px solid var(--retold-border);
2542
+ flex-shrink: 0;
2543
+ flex-wrap: wrap;
2544
+ }
2545
+ .retold-remote-aex-controls label
2546
+ {
2547
+ font-size: 0.75rem;
2548
+ color: var(--retold-text-muted);
2549
+ }
2550
+ .retold-remote-aex-controls select,
2551
+ .retold-remote-aex-controls input
2552
+ {
2553
+ font-size: 0.75rem;
2554
+ background: var(--retold-bg-tertiary);
2555
+ color: var(--retold-text-primary);
2556
+ border: 1px solid var(--retold-border);
2557
+ border-radius: 3px;
2558
+ padding: 2px 6px;
2559
+ font-family: inherit;
2560
+ }
2561
+ .retold-remote-aex-btn
2562
+ {
2563
+ padding: 3px 12px;
2564
+ border: 1px solid var(--retold-accent);
2565
+ border-radius: 3px;
2566
+ background: transparent;
2567
+ color: var(--retold-accent);
2568
+ font-size: 0.75rem;
2569
+ cursor: pointer;
2570
+ transition: background 0.15s, color 0.15s;
2571
+ font-family: inherit;
2572
+ }
2573
+ .retold-remote-aex-btn:hover
2574
+ {
2575
+ background: var(--retold-accent);
2576
+ color: var(--retold-bg-primary);
2577
+ }
2578
+ .retold-remote-aex-btn:disabled
2579
+ {
2580
+ opacity: 0.4;
2581
+ cursor: not-allowed;
2582
+ }
2583
+ .retold-remote-aex-btn:disabled:hover
2584
+ {
2585
+ background: transparent;
2586
+ color: var(--retold-accent);
2587
+ }
2588
+ /* Save segment to collection button */
2589
+ .retold-remote-aex-save-btn
2590
+ {
2591
+ padding: 3px 12px;
2592
+ border: 1px solid #98c379;
2593
+ border-radius: 3px;
2594
+ background: transparent;
2595
+ color: #98c379;
2596
+ font-size: 0.75rem;
2597
+ cursor: pointer;
2598
+ transition: background 0.15s, color 0.15s;
2599
+ font-family: inherit;
2600
+ }
2601
+ .retold-remote-aex-save-btn:hover
2602
+ {
2603
+ background: #98c379;
2604
+ color: var(--retold-bg-primary);
2605
+ }
2606
+ .retold-remote-aex-save-btn:disabled
2607
+ {
2608
+ opacity: 0.4;
2609
+ cursor: not-allowed;
2610
+ }
2611
+ .retold-remote-aex-save-btn:disabled:hover
2612
+ {
2613
+ background: transparent;
2614
+ color: #98c379;
2615
+ }
2616
+ .retold-remote-aex-body
2617
+ {
2618
+ flex: 1;
2619
+ display: flex;
2620
+ flex-direction: column;
2621
+ overflow: hidden;
2622
+ position: relative;
2623
+ }
2624
+ .retold-remote-aex-loading
2625
+ {
2626
+ display: flex;
2627
+ flex-direction: column;
2628
+ align-items: center;
2629
+ justify-content: center;
2630
+ height: 100%;
2631
+ color: var(--retold-text-dim);
2632
+ font-size: 0.9rem;
2633
+ }
2634
+ .retold-remote-aex-loading-spinner
2635
+ {
2636
+ width: 32px;
2637
+ height: 32px;
2638
+ border: 3px solid var(--retold-border);
2639
+ border-top-color: var(--retold-accent);
2640
+ border-radius: 50%;
2641
+ animation: retold-aex-spin 0.8s linear infinite;
2642
+ margin-bottom: 16px;
2643
+ }
2644
+ @keyframes retold-aex-spin
2645
+ {
2646
+ to { transform: rotate(360deg); }
2647
+ }
2648
+ .retold-remote-aex-canvas-wrap
2649
+ {
2650
+ flex: 1;
2651
+ position: relative;
2652
+ min-height: 150px;
2653
+ cursor: crosshair;
2654
+ }
2655
+ .retold-remote-aex-canvas-wrap canvas
2656
+ {
2657
+ width: 100%;
2658
+ height: 100%;
2659
+ display: block;
2660
+ }
2661
+ .retold-remote-aex-overview-wrap
2662
+ {
2663
+ height: 48px;
2664
+ position: relative;
2665
+ background: var(--retold-bg-tertiary);
2666
+ border-top: 1px solid var(--retold-border);
2667
+ flex-shrink: 0;
2668
+ cursor: pointer;
2669
+ }
2670
+ .retold-remote-aex-overview-wrap canvas
2671
+ {
2672
+ width: 100%;
2673
+ height: 100%;
2674
+ display: block;
2675
+ }
2676
+ .retold-remote-aex-overview-viewport
2677
+ {
2678
+ position: absolute;
2679
+ top: 0;
2680
+ height: 100%;
2681
+ background: rgba(255, 255, 255, 0.08);
2682
+ border-left: 2px solid var(--retold-accent);
2683
+ border-right: 2px solid var(--retold-accent);
2684
+ pointer-events: none;
2685
+ }
2686
+ /* Time display bar */
2687
+ .retold-remote-aex-time-bar
2688
+ {
2689
+ display: flex;
2690
+ align-items: center;
2691
+ gap: 12px;
2692
+ padding: 6px 16px;
2693
+ background: var(--retold-bg-secondary);
2694
+ border-top: 1px solid var(--retold-border);
2695
+ flex-shrink: 0;
2696
+ font-size: 0.75rem;
2697
+ font-family: var(--retold-font-mono, monospace);
2698
+ }
2699
+ .retold-remote-aex-time-label
2700
+ {
2701
+ color: var(--retold-text-dim);
2702
+ }
2703
+ .retold-remote-aex-time-value
2704
+ {
2705
+ color: var(--retold-text-secondary);
2706
+ }
2707
+ .retold-remote-aex-time-selection
2708
+ {
2709
+ color: var(--retold-accent);
2710
+ }
2711
+ /* Playback bar */
2712
+ .retold-remote-aex-playback
2713
+ {
2714
+ display: flex;
2715
+ align-items: center;
2716
+ gap: 10px;
2717
+ padding: 8px 16px;
2718
+ background: var(--retold-bg-secondary);
2719
+ border-top: 1px solid var(--retold-border);
2720
+ flex-shrink: 0;
2721
+ }
2722
+ .retold-remote-aex-playback audio
2723
+ {
2724
+ flex: 1;
2725
+ height: 32px;
2726
+ max-width: 400px;
2727
+ }
2728
+ .retold-remote-aex-playback-label
2729
+ {
2730
+ font-size: 0.72rem;
2731
+ color: var(--retold-text-dim);
2732
+ }
2733
+ /* Error state */
2734
+ .retold-remote-aex-error
2735
+ {
2736
+ display: flex;
2737
+ flex-direction: column;
2738
+ align-items: center;
2739
+ justify-content: center;
2740
+ height: 100%;
2741
+ color: var(--retold-text-dim);
2742
+ font-size: 0.85rem;
2743
+ text-align: center;
2744
+ padding: 40px;
2745
+ }
2746
+ .retold-remote-aex-error-message
2747
+ {
2748
+ color: #e06c75;
2749
+ margin-bottom: 16px;
2750
+ }
2751
+
2752
+ /* ============================================================
2753
+ VideoExplorer
2754
+ ============================================================ */
2755
+
2756
+ .retold-remote-vex
2757
+ {
2758
+ display: flex;
2759
+ flex-direction: column;
2760
+ height: 100%;
2761
+ }
2762
+ .retold-remote-vex-header
2763
+ {
2764
+ display: flex;
2765
+ align-items: center;
2766
+ gap: 12px;
2767
+ padding: 8px 16px;
2768
+ background: var(--retold-bg-secondary);
2769
+ border-bottom: 1px solid var(--retold-border);
2770
+ flex-shrink: 0;
2771
+ z-index: 5;
2772
+ }
2773
+ .retold-remote-vex-nav-btn
2774
+ {
2775
+ padding: 4px 10px;
2776
+ border: 1px solid var(--retold-border);
2777
+ border-radius: 3px;
2778
+ background: transparent;
2779
+ color: var(--retold-text-muted);
2780
+ font-size: 0.8rem;
2781
+ cursor: pointer;
2782
+ transition: color 0.15s, border-color 0.15s;
2783
+ font-family: inherit;
2784
+ }
2785
+ .retold-remote-vex-nav-btn:hover
2786
+ {
2787
+ color: var(--retold-text-primary);
2788
+ border-color: var(--retold-accent);
2789
+ }
2790
+ .retold-remote-vex-title
2791
+ {
2792
+ flex: 1;
2793
+ font-size: 0.82rem;
2794
+ color: var(--retold-text-secondary);
2795
+ overflow: hidden;
2796
+ text-overflow: ellipsis;
2797
+ white-space: nowrap;
2798
+ text-align: center;
2799
+ }
2800
+ .retold-remote-vex-info
2801
+ {
2802
+ display: flex;
2803
+ align-items: center;
2804
+ gap: 16px;
2805
+ padding: 8px 16px;
2806
+ background: var(--retold-bg-tertiary);
2807
+ border-bottom: 1px solid var(--retold-border);
2808
+ flex-shrink: 0;
2809
+ font-size: 0.75rem;
2810
+ color: var(--retold-text-dim);
2811
+ }
2812
+ .retold-remote-vex-info-item
2813
+ {
2814
+ display: inline-flex;
2815
+ align-items: center;
2816
+ gap: 4px;
2817
+ }
2818
+ .retold-remote-vex-info-label
2819
+ {
2820
+ color: var(--retold-text-muted);
2821
+ }
2822
+ .retold-remote-vex-info-value
2823
+ {
2824
+ color: var(--retold-text-secondary);
2825
+ }
2826
+ .retold-remote-vex-controls
2827
+ {
2828
+ display: flex;
2829
+ align-items: center;
2830
+ gap: 12px;
2831
+ padding: 8px 16px;
2832
+ background: var(--retold-bg-secondary);
2833
+ border-bottom: 1px solid var(--retold-border);
2834
+ flex-shrink: 0;
2835
+ }
2836
+ .retold-remote-vex-controls label
2837
+ {
2838
+ font-size: 0.75rem;
2839
+ color: var(--retold-text-muted);
2840
+ }
2841
+ .retold-remote-vex-controls select,
2842
+ .retold-remote-vex-controls input[type="range"]
2843
+ {
2844
+ font-size: 0.75rem;
2845
+ background: var(--retold-bg-tertiary);
2846
+ color: var(--retold-text-primary);
2847
+ border: 1px solid var(--retold-border);
2848
+ border-radius: 3px;
2849
+ padding: 2px 6px;
2850
+ font-family: inherit;
2851
+ }
2852
+ .retold-remote-vex-controls .retold-remote-vex-refresh-btn
2853
+ {
2854
+ padding: 3px 12px;
2855
+ border: 1px solid var(--retold-accent);
2856
+ border-radius: 3px;
2857
+ background: transparent;
2858
+ color: var(--retold-accent);
2859
+ font-size: 0.75rem;
2860
+ cursor: pointer;
2861
+ transition: background 0.15s, color 0.15s;
2862
+ font-family: inherit;
2863
+ }
2864
+ .retold-remote-vex-controls .retold-remote-vex-refresh-btn:hover
2865
+ {
2866
+ background: var(--retold-accent);
2867
+ color: var(--retold-bg-primary);
2868
+ }
2869
+ .retold-remote-vex-body
2870
+ {
2871
+ flex: 1;
2872
+ overflow-y: auto;
2873
+ padding: 16px;
2874
+ }
2875
+ .retold-remote-vex-loading
2876
+ {
2877
+ display: flex;
2878
+ flex-direction: column;
2879
+ align-items: center;
2880
+ justify-content: center;
2881
+ height: 100%;
2882
+ color: var(--retold-text-dim);
2883
+ font-size: 0.9rem;
2884
+ }
2885
+ .retold-remote-vex-loading-spinner
2886
+ {
2887
+ width: 32px;
2888
+ height: 32px;
2889
+ border: 3px solid var(--retold-border);
2890
+ border-top-color: var(--retold-accent);
2891
+ border-radius: 50%;
2892
+ animation: retold-vex-spin 0.8s linear infinite;
2893
+ margin-bottom: 16px;
2894
+ }
2895
+ @keyframes retold-vex-spin
2896
+ {
2897
+ to { transform: rotate(360deg); }
2898
+ }
2899
+ .retold-remote-vex-grid
2900
+ {
2901
+ display: grid;
2902
+ grid-template-columns: repeat(auto-fill, minmax(280px, 1fr));
2903
+ gap: 12px;
2904
+ }
2905
+ .retold-remote-vex-frame
2906
+ {
2907
+ position: relative;
2908
+ border-radius: 6px;
2909
+ overflow: hidden;
2910
+ background: var(--retold-bg-tertiary);
2911
+ border: 2px solid transparent;
2912
+ cursor: pointer;
2913
+ transition: border-color 0.15s, transform 0.1s;
2914
+ }
2915
+ .retold-remote-vex-frame:hover
2916
+ {
2917
+ border-color: var(--retold-accent);
2918
+ transform: translateY(-1px);
2919
+ }
2920
+ .retold-remote-vex-frame.selected
2921
+ {
2922
+ border-color: var(--retold-accent);
2923
+ }
2924
+ .retold-remote-vex-frame img
2925
+ {
2926
+ width: 100%;
2927
+ display: block;
2928
+ aspect-ratio: 16 / 9;
2929
+ object-fit: contain;
2930
+ background: #000;
2931
+ }
2932
+ .retold-remote-vex-frame-info
2933
+ {
2934
+ display: flex;
2935
+ align-items: center;
2936
+ justify-content: space-between;
2937
+ padding: 6px 10px;
2938
+ background: var(--retold-bg-secondary);
2939
+ }
2940
+ .retold-remote-vex-frame-timestamp
2941
+ {
2942
+ font-size: 0.78rem;
2943
+ color: var(--retold-text-secondary);
2944
+ font-family: var(--retold-font-mono, monospace);
2945
+ }
2946
+ .retold-remote-vex-frame-index
2947
+ {
2948
+ font-size: 0.7rem;
2949
+ color: var(--retold-text-dim);
2950
+ }
2951
+ .retold-remote-vex-frame.custom-frame
2952
+ {
2953
+ border-color: var(--retold-accent);
2954
+ border-style: dashed;
2955
+ }
2956
+ .retold-remote-vex-frame.custom-frame .retold-remote-vex-frame-info
2957
+ {
2958
+ background: color-mix(in srgb, var(--retold-accent) 12%, var(--retold-bg-secondary));
2959
+ }
2960
+ .retold-remote-vex-frame-loading
2961
+ {
2962
+ width: 100%;
2963
+ aspect-ratio: 16 / 9;
2964
+ display: flex;
2965
+ align-items: center;
2966
+ justify-content: center;
2967
+ background: #000;
2968
+ color: var(--retold-text-dim);
2969
+ font-size: 0.8rem;
2970
+ }
2971
+ .retold-remote-vex-timeline-marker.custom
2972
+ {
2973
+ background: var(--retold-text-primary);
2974
+ opacity: 0.9;
2975
+ width: 2px;
2976
+ border: 1px dashed var(--retold-accent);
2977
+ }
2978
+ /* Timeline bar at bottom */
2979
+ .retold-remote-vex-timeline
2980
+ {
2981
+ display: flex;
2982
+ align-items: flex-end;
2983
+ gap: 8px;
2984
+ padding: 8px 16px;
2985
+ background: var(--retold-bg-secondary);
2986
+ border-top: 1px solid var(--retold-border);
2987
+ flex-shrink: 0;
2988
+ }
2989
+ .retold-remote-vex-timeline-column
2990
+ {
2991
+ flex: 1;
2992
+ display: flex;
2993
+ flex-direction: column;
2994
+ gap: 0;
2995
+ min-width: 0;
2996
+ }
2997
+ .retold-remote-vex-slider-track
2998
+ {
2999
+ position: relative;
3000
+ height: 18px;
3001
+ user-select: none;
3002
+ -webkit-user-select: none;
3003
+ }
3004
+ .retold-remote-vex-slider-handle
3005
+ {
3006
+ position: absolute;
3007
+ bottom: 0;
3008
+ width: 14px;
3009
+ height: 18px;
3010
+ background: var(--retold-accent);
3011
+ border-radius: 3px 3px 0 0;
3012
+ cursor: ew-resize;
3013
+ transform: translateX(-50%);
3014
+ z-index: 2;
3015
+ transition: background 0.15s;
3016
+ touch-action: none;
3017
+ }
3018
+ .retold-remote-vex-slider-handle:hover,
3019
+ .retold-remote-vex-slider-handle.dragging
3020
+ {
3021
+ background: var(--retold-text-primary);
3022
+ }
3023
+ .retold-remote-vex-slider-handle::after
3024
+ {
3025
+ content: '';
3026
+ position: absolute;
3027
+ top: 5px;
3028
+ left: 4px;
3029
+ width: 6px;
3030
+ height: 8px;
3031
+ border-left: 2px solid rgba(0, 0, 0, 0.3);
3032
+ border-right: 2px solid rgba(0, 0, 0, 0.3);
3033
+ }
3034
+ .retold-remote-vex-timeline-bar
3035
+ {
3036
+ height: 24px;
3037
+ background: var(--retold-bg-tertiary);
3038
+ border-radius: 4px;
3039
+ position: relative;
3040
+ overflow: hidden;
3041
+ cursor: pointer;
3042
+ }
3043
+ .retold-remote-vex-timeline-marker
3044
+ {
3045
+ position: absolute;
3046
+ top: 0;
3047
+ width: 3px;
3048
+ height: 100%;
3049
+ background: var(--retold-accent);
3050
+ opacity: 0.7;
3051
+ transition: opacity 0.15s;
3052
+ }
3053
+ .retold-remote-vex-timeline-marker:hover
3054
+ {
3055
+ opacity: 1;
3056
+ }
3057
+ .retold-remote-vex-timeline-marker.selected
3058
+ {
3059
+ opacity: 1;
3060
+ background: var(--retold-text-primary);
3061
+ }
3062
+ .retold-remote-vex-timeline-label
3063
+ {
3064
+ font-size: 0.7rem;
3065
+ color: var(--retold-text-dim);
3066
+ white-space: nowrap;
3067
+ }
3068
+ /* Selection mode toggle button */
3069
+ .retold-remote-vex-select-btn
3070
+ {
3071
+ padding: 3px 12px;
3072
+ border: 1px solid var(--retold-border);
3073
+ border-radius: 3px;
3074
+ background: transparent;
3075
+ color: var(--retold-text-muted);
3076
+ font-size: 0.75rem;
3077
+ cursor: pointer;
3078
+ transition: background 0.15s, color 0.15s, border-color 0.15s;
3079
+ font-family: inherit;
3080
+ }
3081
+ .retold-remote-vex-select-btn:hover
3082
+ {
3083
+ color: var(--retold-text-primary);
3084
+ border-color: var(--retold-accent);
3085
+ }
3086
+ .retold-remote-vex-select-btn.active
3087
+ {
3088
+ background: var(--retold-accent);
3089
+ color: var(--retold-bg-primary);
3090
+ border-color: var(--retold-accent);
3091
+ }
3092
+ /* Selection info display */
3093
+ .retold-remote-vex-selection-info
3094
+ {
3095
+ display: inline-flex;
3096
+ align-items: center;
3097
+ gap: 8px;
3098
+ font-size: 0.75rem;
3099
+ color: var(--retold-text-secondary);
3100
+ font-family: var(--retold-font-mono, monospace);
3101
+ }
3102
+ .retold-remote-vex-selection-info-label
3103
+ {
3104
+ color: var(--retold-text-muted);
3105
+ }
3106
+ .retold-remote-vex-clear-btn
3107
+ {
3108
+ padding: 2px 8px;
3109
+ border: 1px solid var(--retold-border);
3110
+ border-radius: 3px;
3111
+ background: transparent;
3112
+ color: var(--retold-text-dim);
3113
+ font-size: 0.7rem;
3114
+ cursor: pointer;
3115
+ transition: color 0.15s, border-color 0.15s;
3116
+ font-family: inherit;
3117
+ }
3118
+ .retold-remote-vex-clear-btn:hover
3119
+ {
3120
+ color: #e06c75;
3121
+ border-color: #e06c75;
3122
+ }
3123
+ /* Generate frames across range */
3124
+ .retold-remote-vex-generate-controls
3125
+ {
3126
+ display: inline-flex;
3127
+ align-items: center;
3128
+ gap: 6px;
3129
+ }
3130
+ .retold-remote-vex-generate-btn
3131
+ {
3132
+ padding: 3px 12px;
3133
+ border: 1px solid var(--retold-accent);
3134
+ border-radius: 3px;
3135
+ background: transparent;
3136
+ color: var(--retold-accent);
3137
+ font-size: 0.75rem;
3138
+ cursor: pointer;
3139
+ transition: background 0.15s, color 0.15s;
3140
+ font-family: inherit;
3141
+ }
3142
+ .retold-remote-vex-generate-btn:hover
3143
+ {
3144
+ background: var(--retold-accent);
3145
+ color: var(--retold-bg-primary);
3146
+ }
3147
+ /* Save segment to collection button */
3148
+ .retold-remote-vex-save-btn
3149
+ {
3150
+ padding: 3px 12px;
3151
+ border: 1px solid #98c379;
3152
+ border-radius: 3px;
3153
+ background: transparent;
3154
+ color: #98c379;
3155
+ font-size: 0.75rem;
3156
+ cursor: pointer;
3157
+ transition: background 0.15s, color 0.15s;
3158
+ font-family: inherit;
3159
+ }
3160
+ .retold-remote-vex-save-btn:hover
3161
+ {
3162
+ background: #98c379;
3163
+ color: var(--retold-bg-primary);
3164
+ }
3165
+ .retold-remote-vex-range-frame-select
3166
+ {
3167
+ font-size: 0.75rem;
3168
+ background: var(--retold-bg-tertiary);
3169
+ color: var(--retold-text-primary);
3170
+ border: 1px solid var(--retold-border);
3171
+ border-radius: 3px;
3172
+ padding: 2px 6px;
3173
+ font-family: inherit;
3174
+ }
3175
+ /* Timeline selection overlay */
3176
+ .retold-remote-vex-timeline-selection
3177
+ {
3178
+ position: absolute;
3179
+ top: 0;
3180
+ height: 100%;
3181
+ background: color-mix(in srgb, var(--retold-accent) 20%, transparent);
3182
+ border-left: 2px solid var(--retold-accent);
3183
+ border-right: 2px solid var(--retold-accent);
3184
+ pointer-events: none;
3185
+ z-index: 1;
3186
+ box-sizing: border-box;
3187
+ }
3188
+ .retold-remote-vex-timeline-bar.selecting
3189
+ {
3190
+ cursor: crosshair;
3191
+ }
3192
+ /* Frame preview overlay */
3193
+ .retold-remote-vex-preview-backdrop
3194
+ {
3195
+ position: fixed;
3196
+ top: 0;
3197
+ left: 0;
3198
+ width: 100%;
3199
+ height: 100%;
3200
+ background: rgba(0, 0, 0, 0.85);
3201
+ z-index: 100;
3202
+ display: flex;
3203
+ flex-direction: column;
3204
+ align-items: center;
3205
+ justify-content: center;
3206
+ }
3207
+ .retold-remote-vex-preview-header
3208
+ {
3209
+ display: flex;
3210
+ align-items: center;
3211
+ gap: 12px;
3212
+ padding: 8px 16px;
3213
+ width: 100%;
3214
+ max-width: 95vw;
3215
+ flex-shrink: 0;
3216
+ }
3217
+ .retold-remote-vex-preview-header .retold-remote-vex-nav-btn
3218
+ {
3219
+ background: rgba(40, 44, 52, 0.8);
3220
+ }
3221
+ .retold-remote-vex-preview-title
3222
+ {
3223
+ flex: 1;
3224
+ font-size: 0.82rem;
3225
+ color: var(--retold-text-secondary);
3226
+ text-align: center;
3227
+ }
3228
+ .retold-remote-vex-preview-body
3229
+ {
3230
+ flex: 1;
3231
+ display: flex;
3232
+ align-items: center;
3233
+ justify-content: center;
3234
+ overflow: auto;
3235
+ padding: 8px;
3236
+ max-width: 95vw;
3237
+ max-height: calc(100vh - 60px);
3238
+ }
3239
+ .retold-remote-vex-preview-body img
3240
+ {
3241
+ max-width: 100%;
3242
+ max-height: 100%;
3243
+ object-fit: contain;
3244
+ border-radius: 4px;
3245
+ box-shadow: 0 4px 24px rgba(0, 0, 0, 0.6);
3246
+ }
3247
+ /* Error state */
3248
+ .retold-remote-vex-error
3249
+ {
3250
+ display: flex;
3251
+ flex-direction: column;
3252
+ align-items: center;
3253
+ justify-content: center;
3254
+ height: 100%;
3255
+ color: var(--retold-text-dim);
3256
+ font-size: 0.85rem;
3257
+ text-align: center;
3258
+ padding: 40px;
3259
+ }
3260
+ .retold-remote-vex-error-message
3261
+ {
3262
+ color: #e06c75;
3263
+ margin-bottom: 16px;
3264
+ }
3265
+
3266
+ /* ============================================================
3267
+ CollectionsPanel
3268
+ ============================================================ */
3269
+
3270
+ /* ---- Collections Panel Container ---- */
3271
+ .retold-remote-collections-panel
3272
+ {
3273
+ display: flex;
3274
+ flex-direction: column;
3275
+ height: 100%;
3276
+ overflow: hidden;
3277
+ }
3278
+ .retold-remote-collections-header
3279
+ {
3280
+ display: flex;
3281
+ align-items: center;
3282
+ gap: 8px;
3283
+ padding: 8px 12px;
3284
+ border-bottom: 1px solid var(--retold-border);
3285
+ background: var(--retold-bg-secondary);
3286
+ flex-shrink: 0;
3287
+ }
3288
+ .retold-remote-collections-header-title
3289
+ {
3290
+ flex: 1;
3291
+ font-size: 0.82rem;
3292
+ font-weight: 600;
3293
+ color: var(--retold-text-primary);
3294
+ white-space: nowrap;
3295
+ overflow: hidden;
3296
+ text-overflow: ellipsis;
3297
+ }
3298
+ .retold-remote-collections-header-btn
3299
+ {
3300
+ display: inline-flex;
3301
+ align-items: center;
3302
+ justify-content: center;
3303
+ width: 26px;
3304
+ height: 26px;
3305
+ padding: 0;
3306
+ border: 1px solid var(--retold-border);
3307
+ border-radius: 4px;
3308
+ background: transparent;
3309
+ color: var(--retold-text-muted);
3310
+ font-size: 0.82rem;
3311
+ cursor: pointer;
3312
+ transition: color 0.15s, border-color 0.15s;
3313
+ font-family: inherit;
3314
+ flex-shrink: 0;
3315
+ }
3316
+ .retold-remote-collections-header-btn:hover
3317
+ {
3318
+ color: var(--retold-text-primary);
3319
+ border-color: var(--retold-accent);
3320
+ }
3321
+ /* ---- Search ---- */
3322
+ .retold-remote-collections-search
3323
+ {
3324
+ padding: 6px 12px;
3325
+ border-bottom: 1px solid var(--retold-border);
3326
+ flex-shrink: 0;
3327
+ }
3328
+ .retold-remote-collections-search input
3329
+ {
3330
+ width: 100%;
3331
+ padding: 5px 8px;
3332
+ border: 1px solid var(--retold-border);
3333
+ border-radius: 3px;
3334
+ background: var(--retold-bg-tertiary);
3335
+ color: var(--retold-text-secondary);
3336
+ font-size: 0.78rem;
3337
+ font-family: inherit;
3338
+ box-sizing: border-box;
3339
+ outline: none;
3340
+ }
3341
+ .retold-remote-collections-search input:focus
3342
+ {
3343
+ border-color: var(--retold-accent);
3344
+ }
3345
+ /* ---- Collection List ---- */
3346
+ .retold-remote-collections-body
3347
+ {
3348
+ flex: 1;
3349
+ overflow-y: auto;
3350
+ overflow-x: hidden;
3351
+ }
3352
+ .retold-remote-collections-empty
3353
+ {
3354
+ padding: 24px 16px;
3355
+ text-align: center;
3356
+ font-size: 0.78rem;
3357
+ color: var(--retold-text-dim);
3358
+ }
3359
+ .retold-remote-collection-card
3360
+ {
3361
+ display: flex;
3362
+ align-items: center;
3363
+ gap: 10px;
3364
+ padding: 10px 12px;
3365
+ border-bottom: 1px solid var(--retold-border);
3366
+ cursor: pointer;
3367
+ transition: background 0.15s;
3368
+ }
3369
+ .retold-remote-collection-card:hover
3370
+ {
3371
+ background: rgba(128, 128, 128, 0.08);
3372
+ }
3373
+ .retold-remote-collection-card-icon
3374
+ {
3375
+ flex-shrink: 0;
3376
+ width: 32px;
3377
+ height: 32px;
3378
+ display: flex;
3379
+ align-items: center;
3380
+ justify-content: center;
3381
+ border-radius: 4px;
3382
+ background: var(--retold-bg-tertiary);
3383
+ color: var(--retold-accent);
3384
+ font-size: 1rem;
3385
+ }
3386
+ .retold-remote-collection-card-info
3387
+ {
3388
+ flex: 1;
3389
+ min-width: 0;
3390
+ }
3391
+ .retold-remote-collection-card-name
3392
+ {
3393
+ font-size: 0.82rem;
3394
+ font-weight: 500;
3395
+ color: var(--retold-text-primary);
3396
+ white-space: nowrap;
3397
+ overflow: hidden;
3398
+ text-overflow: ellipsis;
3399
+ }
3400
+ .retold-remote-collection-card-meta
3401
+ {
3402
+ font-size: 0.68rem;
3403
+ color: var(--retold-text-dim);
3404
+ margin-top: 2px;
3405
+ }
3406
+ /* ---- Detail mode ---- */
3407
+ .retold-remote-collections-detail-controls
3408
+ {
3409
+ display: flex;
3410
+ align-items: center;
3411
+ gap: 6px;
3412
+ padding: 6px 12px;
3413
+ border-bottom: 1px solid var(--retold-border);
3414
+ flex-shrink: 0;
3415
+ }
3416
+ .retold-remote-collections-sort-select
3417
+ {
3418
+ padding: 3px 6px;
3419
+ border: 1px solid var(--retold-border);
3420
+ border-radius: 3px;
3421
+ background: var(--retold-bg-tertiary);
3422
+ color: var(--retold-text-secondary);
3423
+ font-size: 0.72rem;
3424
+ font-family: inherit;
3425
+ flex: 1;
3426
+ }
3427
+ .retold-remote-collections-sort-dir
3428
+ {
3429
+ padding: 3px 6px;
3430
+ border: 1px solid var(--retold-border);
3431
+ border-radius: 3px;
3432
+ background: transparent;
3433
+ color: var(--retold-text-muted);
3434
+ font-size: 0.72rem;
3435
+ cursor: pointer;
3436
+ font-family: inherit;
3437
+ }
3438
+ .retold-remote-collections-sort-dir:hover
3439
+ {
3440
+ border-color: var(--retold-accent);
3441
+ color: var(--retold-text-primary);
3442
+ }
3443
+ /* ---- Item rows ---- */
3444
+ .retold-remote-collection-item
3445
+ {
3446
+ display: flex;
3447
+ align-items: center;
3448
+ gap: 8px;
3449
+ padding: 6px 12px;
3450
+ border-bottom: 1px solid var(--retold-border);
3451
+ cursor: pointer;
3452
+ transition: background 0.15s;
3453
+ position: relative;
3454
+ }
3455
+ .retold-remote-collection-item:hover
3456
+ {
3457
+ background: rgba(128, 128, 128, 0.08);
3458
+ }
3459
+ .retold-remote-collection-item-drag
3460
+ {
3461
+ flex-shrink: 0;
3462
+ width: 16px;
3463
+ cursor: grab;
3464
+ color: var(--retold-text-dim);
3465
+ font-size: 0.68rem;
3466
+ text-align: center;
3467
+ user-select: none;
3468
+ }
3469
+ .retold-remote-collection-item-icon
3470
+ {
3471
+ flex-shrink: 0;
3472
+ width: 24px;
3473
+ height: 24px;
3474
+ display: flex;
3475
+ align-items: center;
3476
+ justify-content: center;
3477
+ color: var(--retold-text-muted);
3478
+ font-size: 0.82rem;
3479
+ }
3480
+ .retold-remote-collection-item-icon img
3481
+ {
3482
+ width: 24px;
3483
+ height: 24px;
3484
+ object-fit: cover;
3485
+ border-radius: 2px;
3486
+ }
3487
+ .retold-remote-collection-item-name
3488
+ {
3489
+ flex: 1;
3490
+ min-width: 0;
3491
+ font-size: 0.78rem;
3492
+ color: var(--retold-text-secondary);
3493
+ white-space: nowrap;
3494
+ overflow: hidden;
3495
+ text-overflow: ellipsis;
3496
+ }
3497
+ .retold-remote-collection-item-type
3498
+ {
3499
+ flex-shrink: 0;
3500
+ font-size: 0.62rem;
3501
+ padding: 1px 4px;
3502
+ border-radius: 2px;
3503
+ background: var(--retold-bg-tertiary);
3504
+ color: var(--retold-text-dim);
3505
+ text-transform: uppercase;
3506
+ }
3507
+ .retold-remote-collection-item-remove
3508
+ {
3509
+ flex-shrink: 0;
3510
+ display: none;
3511
+ width: 20px;
3512
+ height: 20px;
3513
+ align-items: center;
3514
+ justify-content: center;
3515
+ border: none;
3516
+ border-radius: 3px;
3517
+ background: transparent;
3518
+ color: var(--retold-text-dim);
3519
+ font-size: 0.82rem;
3520
+ cursor: pointer;
3521
+ padding: 0;
3522
+ }
3523
+ .retold-remote-collection-item:hover .retold-remote-collection-item-remove
3524
+ {
3525
+ display: inline-flex;
3526
+ }
3527
+ .retold-remote-collection-item-remove:hover
3528
+ {
3529
+ color: var(--retold-danger-muted, #e55);
3530
+ background: rgba(200, 50, 50, 0.1);
3531
+ }
3532
+ /* ---- Operation Plan mode ---- */
3533
+ .retold-remote-collections-op-controls
3534
+ {
3535
+ flex-direction: column;
3536
+ gap: 6px;
3537
+ }
3538
+ .retold-remote-collections-op-summary
3539
+ {
3540
+ font-size: 0.75rem;
3541
+ color: var(--retold-text-dim);
3542
+ padding: 4px 0;
3543
+ }
3544
+ .retold-remote-collections-op-buttons
3545
+ {
3546
+ display: flex;
3547
+ gap: 6px;
3548
+ }
3549
+ .retold-remote-collections-op-execute-btn
3550
+ {
3551
+ flex: 1;
3552
+ padding: 6px 12px;
3553
+ border: none;
3554
+ border-radius: 3px;
3555
+ background: var(--retold-accent, #4a90d9);
3556
+ color: #fff;
3557
+ font-size: 0.78rem;
3558
+ font-weight: 600;
3559
+ cursor: pointer;
3560
+ }
3561
+ .retold-remote-collections-op-execute-btn:hover
3562
+ {
3563
+ opacity: 0.9;
3564
+ }
3565
+ .retold-remote-collections-op-execute-btn:disabled
3566
+ {
3567
+ opacity: 0.5;
3568
+ cursor: default;
3569
+ }
3570
+ .retold-remote-collections-op-undo-btn
3571
+ {
3572
+ padding: 6px 12px;
3573
+ border: 1px solid var(--retold-border);
3574
+ border-radius: 3px;
3575
+ background: transparent;
3576
+ color: var(--retold-text-secondary);
3577
+ font-size: 0.78rem;
3578
+ cursor: pointer;
3579
+ }
3580
+ .retold-remote-collections-op-undo-btn:hover
3581
+ {
3582
+ background: var(--retold-bg-tertiary);
3583
+ }
3584
+ .retold-remote-collection-op-item
3585
+ {
3586
+ display: flex;
3587
+ align-items: center;
3588
+ gap: 4px;
3589
+ padding: 6px 8px;
3590
+ border-bottom: 1px solid var(--retold-border);
3591
+ font-size: 0.75rem;
3592
+ flex-wrap: wrap;
3593
+ }
3594
+ .retold-remote-collection-op-item.op-status-completed
3595
+ {
3596
+ opacity: 0.6;
3597
+ }
3598
+ .retold-remote-collection-op-item.op-status-skipped
3599
+ {
3600
+ opacity: 0.4;
3601
+ text-decoration: line-through;
3602
+ }
3603
+ .retold-remote-collection-op-item.op-status-failed
3604
+ {
3605
+ background: rgba(200, 50, 50, 0.05);
3606
+ }
3607
+ .retold-remote-collection-op-status
3608
+ {
3609
+ flex-shrink: 0;
3610
+ width: 16px;
3611
+ text-align: center;
3612
+ font-size: 0.8rem;
3613
+ }
3614
+ .op-status-completed .retold-remote-collection-op-status
3615
+ {
3616
+ color: var(--retold-success, #4a4);
3617
+ }
3618
+ .op-status-failed .retold-remote-collection-op-status
3619
+ {
3620
+ color: var(--retold-danger-muted, #e55);
3621
+ }
3622
+ .op-status-pending .retold-remote-collection-op-status
3623
+ {
3624
+ color: var(--retold-text-dim);
3625
+ }
3626
+ .retold-remote-collection-op-source
3627
+ {
3628
+ flex: 1;
3629
+ min-width: 0;
3630
+ overflow: hidden;
3631
+ text-overflow: ellipsis;
3632
+ white-space: nowrap;
3633
+ color: var(--retold-text-dim);
3634
+ }
3635
+ .retold-remote-collection-op-arrow
3636
+ {
3637
+ flex-shrink: 0;
3638
+ color: var(--retold-text-dim);
3639
+ padding: 0 2px;
3640
+ }
3641
+ .retold-remote-collection-op-dest
3642
+ {
3643
+ flex: 2;
3644
+ min-width: 0;
3645
+ overflow: hidden;
3646
+ text-overflow: ellipsis;
3647
+ white-space: nowrap;
3648
+ color: var(--retold-text-secondary);
3649
+ }
3650
+ .retold-remote-collection-op-dest-input
3651
+ {
3652
+ width: 100%;
3653
+ padding: 2px 4px;
3654
+ border: 1px solid var(--retold-accent);
3655
+ border-radius: 2px;
3656
+ background: var(--retold-bg-tertiary);
3657
+ color: var(--retold-text-secondary);
3658
+ font-size: 0.75rem;
3659
+ font-family: inherit;
3660
+ box-sizing: border-box;
3661
+ }
3662
+ .retold-remote-collection-op-badge
3663
+ {
3664
+ flex-shrink: 0;
3665
+ font-size: 0.6rem;
3666
+ padding: 1px 4px;
3667
+ border-radius: 2px;
3668
+ background: var(--retold-bg-tertiary);
3669
+ color: var(--retold-text-dim);
3670
+ text-transform: uppercase;
3671
+ font-weight: 600;
3672
+ letter-spacing: 0.3px;
3673
+ }
3674
+ .retold-remote-collection-op-error
3675
+ {
3676
+ width: 100%;
3677
+ font-size: 0.68rem;
3678
+ color: var(--retold-danger-muted, #e55);
3679
+ padding: 2px 0 0 20px;
3680
+ }
3681
+ /* ---- Edit mode ---- */
3682
+ .retold-remote-collections-edit
3683
+ {
3684
+ padding: 12px;
3685
+ }
3686
+ .retold-remote-collections-edit-group
3687
+ {
3688
+ margin-bottom: 12px;
3689
+ }
3690
+ .retold-remote-collections-edit-label
3691
+ {
3692
+ font-size: 0.7rem;
3693
+ font-weight: 600;
3694
+ text-transform: uppercase;
3695
+ letter-spacing: 0.5px;
3696
+ color: var(--retold-text-dim);
3697
+ margin-bottom: 4px;
3698
+ }
3699
+ .retold-remote-collections-edit-input
3700
+ {
3701
+ width: 100%;
3702
+ padding: 6px 8px;
3703
+ border: 1px solid var(--retold-border);
3704
+ border-radius: 3px;
3705
+ background: var(--retold-bg-tertiary);
3706
+ color: var(--retold-text-secondary);
3707
+ font-size: 0.82rem;
3708
+ font-family: inherit;
3709
+ box-sizing: border-box;
3710
+ }
3711
+ .retold-remote-collections-edit-input:focus
3712
+ {
3713
+ border-color: var(--retold-accent);
3714
+ outline: none;
3715
+ }
3716
+ .retold-remote-collections-edit-textarea
3717
+ {
3718
+ width: 100%;
3719
+ min-height: 80px;
3720
+ padding: 6px 8px;
3721
+ border: 1px solid var(--retold-border);
3722
+ border-radius: 3px;
3723
+ background: var(--retold-bg-tertiary);
3724
+ color: var(--retold-text-secondary);
3725
+ font-size: 0.78rem;
3726
+ font-family: inherit;
3727
+ box-sizing: border-box;
3728
+ resize: vertical;
3729
+ }
3730
+ .retold-remote-collections-edit-textarea:focus
3731
+ {
3732
+ border-color: var(--retold-accent);
3733
+ outline: none;
3734
+ }
3735
+ .retold-remote-collections-edit-actions
3736
+ {
3737
+ display: flex;
3738
+ gap: 8px;
3739
+ margin-top: 16px;
3740
+ }
3741
+ .retold-remote-collections-edit-btn
3742
+ {
3743
+ padding: 6px 14px;
3744
+ border: 1px solid var(--retold-border);
3745
+ border-radius: 4px;
3746
+ background: transparent;
3747
+ color: var(--retold-text-secondary);
3748
+ font-size: 0.78rem;
3749
+ cursor: pointer;
3750
+ font-family: inherit;
3751
+ }
3752
+ .retold-remote-collections-edit-btn:hover
3753
+ {
3754
+ border-color: var(--retold-accent);
3755
+ color: var(--retold-text-primary);
3756
+ }
3757
+ .retold-remote-collections-edit-btn-primary
3758
+ {
3759
+ background: var(--retold-accent);
3760
+ border-color: var(--retold-accent);
3761
+ color: #fff;
3762
+ }
3763
+ .retold-remote-collections-edit-btn-primary:hover
3764
+ {
3765
+ opacity: 0.9;
3766
+ }
3767
+ .retold-remote-collections-edit-btn-danger
3768
+ {
3769
+ border-color: var(--retold-danger-muted, #e55);
3770
+ color: var(--retold-danger-muted, #e55);
3771
+ margin-top: 16px;
3772
+ }
3773
+ .retold-remote-collections-edit-btn-danger:hover
3774
+ {
3775
+ background: rgba(200, 50, 50, 0.1);
3776
+ }
3777
+ /* ---- Drag-and-drop feedback ---- */
3778
+ .retold-remote-collection-item.dragging
3779
+ {
3780
+ opacity: 0.4;
3781
+ }
3782
+ .retold-remote-collection-item.drag-over
3783
+ {
3784
+ border-top: 2px solid var(--retold-accent);
3785
+ }
3786
+
3787
+ /* ============================================================
3788
+ FileInfoPanel
3789
+ ============================================================ */
3790
+
3791
+ .retold-remote-info
3792
+ {
3793
+ padding: 12px;
3794
+ font-size: 0.78rem;
3795
+ overflow-y: auto;
3796
+ }
3797
+ .retold-remote-info-filename
3798
+ {
3799
+ font-size: 0.85rem;
3800
+ font-weight: 700;
3801
+ color: var(--retold-text-primary);
3802
+ word-break: break-all;
3803
+ margin-bottom: 2px;
3804
+ }
3805
+ .retold-remote-info-path
3806
+ {
3807
+ font-size: 0.7rem;
3808
+ color: var(--retold-text-dim);
3809
+ word-break: break-all;
3810
+ margin-bottom: 12px;
3811
+ }
3812
+ .retold-remote-info-section
3813
+ {
3814
+ margin-bottom: 14px;
3815
+ }
3816
+ .retold-remote-info-section-title
3817
+ {
3818
+ font-size: 0.68rem;
3819
+ font-weight: 700;
3820
+ text-transform: uppercase;
3821
+ letter-spacing: 0.5px;
3822
+ color: var(--retold-text-dim);
3823
+ margin-bottom: 6px;
3824
+ padding-bottom: 3px;
3825
+ border-bottom: 1px solid var(--retold-border);
3826
+ }
3827
+ .retold-remote-info-row
3828
+ {
3829
+ display: flex;
3830
+ justify-content: space-between;
3831
+ align-items: baseline;
3832
+ padding: 2px 0;
3833
+ gap: 8px;
3834
+ }
3835
+ .retold-remote-info-label
3836
+ {
3837
+ font-size: 0.72rem;
3838
+ color: var(--retold-text-dim);
3839
+ flex-shrink: 0;
3840
+ }
3841
+ .retold-remote-info-value
3842
+ {
3843
+ font-size: 0.72rem;
3844
+ color: var(--retold-text-secondary);
3845
+ text-align: right;
3846
+ word-break: break-all;
3847
+ }
3848
+ .retold-remote-info-value-mono
3849
+ {
3850
+ font-family: monospace;
3851
+ font-size: 0.68rem;
3852
+ }
3853
+ .retold-remote-info-extract-btn
3854
+ {
3855
+ display: block;
3856
+ width: 100%;
3857
+ padding: 10px 12px;
3858
+ border: 1px solid var(--retold-accent);
3859
+ border-radius: 4px;
3860
+ background: var(--retold-bg-secondary);
3861
+ color: var(--retold-accent);
3862
+ font-size: 0.78rem;
3863
+ font-family: inherit;
3864
+ cursor: pointer;
3865
+ text-align: center;
3866
+ transition: background 0.15s, color 0.15s;
3867
+ margin-bottom: 14px;
3868
+ }
3869
+ .retold-remote-info-extract-btn:hover
3870
+ {
3871
+ background: var(--retold-accent);
3872
+ color: var(--retold-bg-primary);
3873
+ }
3874
+ .retold-remote-info-extract-btn:disabled
3875
+ {
3876
+ opacity: 0.5;
3877
+ cursor: wait;
3878
+ }
3879
+ .retold-remote-info-empty
3880
+ {
3881
+ padding: 24px 12px;
3882
+ text-align: center;
3883
+ color: var(--retold-text-dim);
3884
+ font-size: 0.78rem;
3885
+ }
3886
+ .retold-remote-info-chapter-row
3887
+ {
3888
+ display: flex;
3889
+ align-items: baseline;
3890
+ padding: 2px 0;
3891
+ gap: 6px;
3892
+ font-size: 0.72rem;
3893
+ }
3894
+ .retold-remote-info-chapter-time
3895
+ {
3896
+ color: var(--retold-accent);
3897
+ font-family: monospace;
3898
+ font-size: 0.68rem;
3899
+ flex-shrink: 0;
3900
+ }
3901
+ .retold-remote-info-chapter-title
3902
+ {
3903
+ color: var(--retold-text-secondary);
3904
+ }
3905
+ .retold-remote-info-tag-row
3906
+ {
3907
+ display: flex;
3908
+ align-items: baseline;
3909
+ padding: 1px 0;
3910
+ gap: 6px;
3911
+ font-size: 0.7rem;
3912
+ }
3913
+ .retold-remote-info-tag-key
3914
+ {
3915
+ color: var(--retold-text-dim);
3916
+ flex-shrink: 0;
3917
+ font-family: monospace;
3918
+ font-size: 0.66rem;
3919
+ }
3920
+ .retold-remote-info-tag-value
3921
+ {
3922
+ color: var(--retold-text-secondary);
3923
+ word-break: break-all;
3924
+ }
3925
+ .retold-remote-info-gps-link
3926
+ {
3927
+ color: var(--retold-accent);
3928
+ text-decoration: none;
3929
+ font-size: 0.72rem;
3930
+ }
3931
+ .retold-remote-info-gps-link:hover
3932
+ {
3933
+ text-decoration: underline;
3934
+ }
3935
+ .retold-remote-info-spinner
3936
+ {
3937
+ text-align: center;
3938
+ padding: 16px;
3939
+ color: var(--retold-text-dim);
3940
+ font-size: 0.75rem;
3941
+ }
3942
+
3943
+ /* ============================================================
3944
+ SettingsPanel
3945
+ ============================================================ */
3946
+
3947
+ .retold-remote-settings
3948
+ {
3949
+ padding: 12px;
3950
+ }
3951
+ .retold-remote-settings-section
3952
+ {
3953
+ margin-bottom: 16px;
3954
+ }
3955
+ .retold-remote-settings-section-title
3956
+ {
3957
+ font-size: 0.7rem;
3958
+ font-weight: 700;
3959
+ text-transform: uppercase;
3960
+ letter-spacing: 0.5px;
3961
+ color: var(--retold-text-dim);
3962
+ margin-bottom: 8px;
3963
+ }
3964
+ .retold-remote-settings-row
3965
+ {
3966
+ display: flex;
3967
+ align-items: center;
3968
+ justify-content: space-between;
3969
+ padding: 4px 0;
3970
+ }
3971
+ .retold-remote-settings-label
3972
+ {
3973
+ font-size: 0.78rem;
3974
+ color: var(--retold-text-secondary);
3975
+ }
3976
+ .retold-remote-settings-select
3977
+ {
3978
+ padding: 3px 8px;
3979
+ border: 1px solid var(--retold-border);
3980
+ border-radius: 3px;
3981
+ background: var(--retold-bg-tertiary);
3982
+ color: var(--retold-text-secondary);
3983
+ font-size: 0.75rem;
3984
+ font-family: inherit;
3985
+ }
3986
+ .retold-remote-settings-checkbox
3987
+ {
3988
+ accent-color: var(--retold-accent);
3989
+ }
3990
+ .retold-remote-settings-capabilities
3991
+ {
3992
+ margin-top: 12px;
3993
+ padding: 8px;
3994
+ background: var(--retold-bg-secondary);
3995
+ border-radius: 4px;
3996
+ font-size: 0.72rem;
3997
+ }
3998
+ .retold-remote-settings-cap-row
3999
+ {
4000
+ display: flex;
4001
+ justify-content: space-between;
4002
+ padding: 2px 0;
4003
+ }
4004
+ .retold-remote-settings-cap-label
4005
+ {
4006
+ color: var(--retold-text-dim);
4007
+ }
4008
+ .retold-remote-settings-cap-yes
4009
+ {
4010
+ color: var(--retold-accent);
4011
+ }
4012
+ .retold-remote-settings-cap-no
4013
+ {
4014
+ color: var(--retold-danger-muted);
4015
+ }
4016
+ .retold-remote-settings-vlc-btn
4017
+ {
4018
+ display: block;
4019
+ width: 100%;
4020
+ padding: 8px 12px;
4021
+ border: 1px solid var(--retold-border);
4022
+ border-radius: 4px;
4023
+ background: var(--retold-bg-secondary);
4024
+ color: var(--retold-text-secondary);
4025
+ font-size: 0.75rem;
4026
+ font-family: inherit;
4027
+ cursor: pointer;
4028
+ text-align: left;
4029
+ transition: background 0.15s, color 0.15s;
4030
+ }
4031
+ .retold-remote-settings-vlc-btn:hover
4032
+ {
4033
+ background: var(--retold-bg-hover);
4034
+ color: var(--retold-text-primary);
4035
+ }
4036
+ .retold-remote-settings-input
4037
+ {
4038
+ width: 100%;
4039
+ padding: 5px 8px;
4040
+ border: 1px solid var(--retold-border);
4041
+ border-radius: 3px;
4042
+ background: var(--retold-bg-tertiary);
4043
+ color: var(--retold-text-secondary);
4044
+ font-size: 0.75rem;
4045
+ font-family: inherit;
4046
+ box-sizing: border-box;
4047
+ }
4048
+ .retold-remote-settings-input:focus
4049
+ {
4050
+ outline: none;
4051
+ border-color: var(--retold-accent);
4052
+ }
4053
+ .retold-remote-settings-input-row
4054
+ {
4055
+ margin-bottom: 8px;
4056
+ }
4057
+ .retold-remote-settings-input-label
4058
+ {
4059
+ display: block;
4060
+ font-size: 0.72rem;
4061
+ color: var(--retold-text-dim);
4062
+ margin-bottom: 3px;
4063
+ }
4064
+ .retold-remote-settings-template-preview
4065
+ {
4066
+ font-size: 0.68rem;
4067
+ color: var(--retold-text-dim);
4068
+ margin-top: 3px;
4069
+ font-style: italic;
4070
+ word-break: break-all;
4071
+ }
4072
+
4073
+ /* ============================================================
4074
+ VLCSetup
4075
+ ============================================================ */
4076
+
4077
+ .retold-remote-vlc-modal-backdrop
4078
+ {
4079
+ position: fixed;
4080
+ top: 0;
4081
+ left: 0;
4082
+ right: 0;
4083
+ bottom: 0;
4084
+ background: rgba(0, 0, 0, 0.6);
4085
+ z-index: 9000;
4086
+ display: flex;
4087
+ align-items: center;
4088
+ justify-content: center;
4089
+ }
4090
+ .retold-remote-vlc-modal
4091
+ {
4092
+ background: var(--retold-bg-tertiary);
4093
+ border: 1px solid var(--retold-border);
4094
+ border-radius: 8px;
4095
+ width: 600px;
4096
+ max-width: 90vw;
4097
+ max-height: 85vh;
4098
+ display: flex;
4099
+ flex-direction: column;
4100
+ box-shadow: 0 8px 32px rgba(0, 0, 0, 0.4);
4101
+ }
4102
+ .retold-remote-vlc-modal-header
4103
+ {
4104
+ display: flex;
4105
+ align-items: center;
4106
+ justify-content: space-between;
4107
+ padding: 14px 18px;
4108
+ border-bottom: 1px solid var(--retold-border);
4109
+ flex-shrink: 0;
4110
+ }
4111
+ .retold-remote-vlc-modal-title
4112
+ {
4113
+ font-size: 0.85rem;
4114
+ font-weight: 700;
4115
+ color: var(--retold-text-primary);
4116
+ }
4117
+ .retold-remote-vlc-modal-close
4118
+ {
4119
+ border: none;
4120
+ background: transparent;
4121
+ color: var(--retold-text-muted);
4122
+ font-size: 1.1rem;
4123
+ cursor: pointer;
4124
+ padding: 2px 6px;
4125
+ border-radius: 3px;
4126
+ font-family: inherit;
4127
+ line-height: 1;
4128
+ }
4129
+ .retold-remote-vlc-modal-close:hover
4130
+ {
4131
+ background: var(--retold-bg-hover);
4132
+ color: var(--retold-text-primary);
4133
+ }
4134
+ .retold-remote-vlc-modal-body
4135
+ {
4136
+ flex: 1;
4137
+ overflow-y: auto;
4138
+ padding: 18px;
4139
+ }
4140
+ .retold-remote-vlc-setup-section
4141
+ {
4142
+ margin-bottom: 18px;
4143
+ }
4144
+ .retold-remote-vlc-setup-section-title
4145
+ {
4146
+ font-size: 0.7rem;
4147
+ font-weight: 700;
4148
+ text-transform: uppercase;
4149
+ letter-spacing: 0.5px;
4150
+ color: var(--retold-text-dim);
4151
+ margin-bottom: 8px;
4152
+ }
4153
+ .retold-remote-vlc-setup-desc
4154
+ {
4155
+ font-size: 0.75rem;
4156
+ color: var(--retold-text-secondary);
4157
+ line-height: 1.5;
4158
+ margin-bottom: 8px;
4159
+ }
4160
+ .retold-remote-vlc-setup-status
4161
+ {
4162
+ display: flex;
4163
+ align-items: center;
4164
+ gap: 8px;
4165
+ padding: 8px;
4166
+ border-radius: 4px;
4167
+ background: var(--retold-bg-secondary);
4168
+ margin-bottom: 12px;
4169
+ font-size: 0.75rem;
4170
+ color: var(--retold-text-secondary);
4171
+ }
4172
+ .retold-remote-vlc-setup-status-dot
4173
+ {
4174
+ width: 8px;
4175
+ height: 8px;
4176
+ border-radius: 50%;
4177
+ flex-shrink: 0;
4178
+ }
4179
+ .retold-remote-vlc-setup-status-dot.detected
4180
+ {
4181
+ background: var(--retold-accent);
4182
+ }
4183
+ .retold-remote-vlc-setup-status-dot.unknown
4184
+ {
4185
+ background: var(--retold-text-dim);
4186
+ }
4187
+ .retold-remote-vlc-setup-platform
4188
+ {
4189
+ display: none;
4190
+ }
4191
+ .retold-remote-vlc-setup-platform.active
4192
+ {
4193
+ display: block;
4194
+ }
4195
+ .retold-remote-vlc-setup-platform-tabs
4196
+ {
4197
+ display: flex;
4198
+ gap: 0;
4199
+ margin-bottom: 12px;
4200
+ border-bottom: 1px solid var(--retold-border);
4201
+ }
4202
+ .retold-remote-vlc-setup-platform-tab
4203
+ {
4204
+ padding: 6px 12px;
4205
+ border: none;
4206
+ background: transparent;
4207
+ font-size: 0.72rem;
4208
+ font-weight: 600;
4209
+ color: var(--retold-text-muted);
4210
+ cursor: pointer;
4211
+ border-bottom: 2px solid transparent;
4212
+ font-family: inherit;
4213
+ }
4214
+ .retold-remote-vlc-setup-platform-tab:hover
4215
+ {
4216
+ color: var(--retold-text-secondary);
4217
+ }
4218
+ .retold-remote-vlc-setup-platform-tab.active
4219
+ {
4220
+ color: var(--retold-accent);
4221
+ border-bottom-color: var(--retold-accent);
4222
+ }
4223
+ .retold-remote-vlc-setup-code
4224
+ {
4225
+ background: var(--retold-bg-primary);
4226
+ border: 1px solid var(--retold-border);
4227
+ border-radius: 4px;
4228
+ padding: 10px;
4229
+ font-family: "SF Mono", "Fira Code", "Consolas", monospace;
4230
+ font-size: 0.68rem;
4231
+ color: var(--retold-text-secondary);
4232
+ line-height: 1.6;
4233
+ overflow-x: auto;
4234
+ white-space: pre;
4235
+ margin-bottom: 8px;
4236
+ tab-size: 4;
4237
+ }
4238
+ .retold-remote-vlc-setup-btn
4239
+ {
4240
+ display: inline-block;
4241
+ padding: 6px 14px;
4242
+ border: 1px solid var(--retold-border);
4243
+ border-radius: 4px;
4244
+ background: var(--retold-bg-secondary);
4245
+ color: var(--retold-text-secondary);
4246
+ font-size: 0.72rem;
4247
+ font-family: inherit;
4248
+ cursor: pointer;
4249
+ transition: background 0.15s, color 0.15s;
4250
+ margin-right: 6px;
4251
+ margin-bottom: 6px;
4252
+ }
4253
+ .retold-remote-vlc-setup-btn:hover
4254
+ {
4255
+ background: var(--retold-bg-hover);
4256
+ color: var(--retold-text-primary);
4257
+ }
4258
+ .retold-remote-vlc-setup-btn.primary
4259
+ {
4260
+ background: var(--retold-accent);
4261
+ border-color: var(--retold-accent);
4262
+ color: #fff;
4263
+ }
4264
+ .retold-remote-vlc-setup-btn.primary:hover
4265
+ {
4266
+ opacity: 0.85;
4267
+ }
4268
+ .retold-remote-vlc-setup-step
4269
+ {
4270
+ display: flex;
4271
+ gap: 10px;
4272
+ margin-bottom: 10px;
4273
+ }
4274
+ .retold-remote-vlc-setup-step-num
4275
+ {
4276
+ flex-shrink: 0;
4277
+ width: 20px;
4278
+ height: 20px;
4279
+ border-radius: 50%;
4280
+ background: var(--retold-accent);
4281
+ color: #fff;
4282
+ font-size: 0.65rem;
4283
+ font-weight: 700;
4284
+ display: flex;
4285
+ align-items: center;
4286
+ justify-content: center;
4287
+ }
4288
+ .retold-remote-vlc-setup-step-content
4289
+ {
4290
+ flex: 1;
4291
+ font-size: 0.75rem;
4292
+ color: var(--retold-text-secondary);
4293
+ line-height: 1.5;
4294
+ }
4295
+ .retold-remote-vlc-setup-note
4296
+ {
4297
+ font-size: 0.7rem;
4298
+ color: var(--retold-text-dim);
4299
+ font-style: italic;
4300
+ margin-top: 4px;
4301
+ }
4302
+ .retold-remote-toast
4303
+ {
4304
+ position: fixed;
4305
+ bottom: 20px;
4306
+ left: 50%;
4307
+ transform: translateX(-50%);
4308
+ background: var(--retold-bg-secondary);
4309
+ color: var(--retold-accent);
4310
+ padding: 8px 16px;
4311
+ border-radius: 4px;
4312
+ font-size: 0.75rem;
4313
+ z-index: 10000;
4314
+ pointer-events: none;
4315
+ border: 1px solid var(--retold-border);
4316
+ }