joplin-plugin-explorer 1.3.1 → 1.3.3

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.
@@ -1,621 +1,621 @@
1
- html, body {
2
- height: 100%;
3
- margin: 0;
4
- padding: 0;
5
- overflow: hidden;
6
- }
7
-
8
- #notes-in-list-root {
9
- font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif;
10
- font-size: 13px;
11
- color: var(--joplin-color);
12
- background-color: var(--joplin-background-color);
13
- height: 100vh;
14
- display: flex;
15
- flex-direction: column;
16
- user-select: none;
17
- overflow: hidden;
18
- }
19
-
20
- /* Toolbar */
21
- .toolbar {
22
- display: flex;
23
- gap: 4px;
24
- padding: 6px 8px;
25
- border-bottom: 1px solid var(--joplin-divider-color, #ddd);
26
- align-items: center;
27
- flex-shrink: 0;
28
- }
29
-
30
- .toolbar button {
31
- background: var(--joplin-background-color3, #f0f0f0);
32
- border: 1px solid var(--joplin-divider-color, #ccc);
33
- border-radius: 4px;
34
- padding: 4px 8px;
35
- cursor: pointer;
36
- color: var(--joplin-color);
37
- font-size: 12px;
38
- white-space: nowrap;
39
- flex-shrink: 0;
40
- line-height: 1.2;
41
- }
42
-
43
- .toolbar button:hover {
44
- background: var(--joplin-background-color-hover3, #e0e0e0);
45
- }
46
-
47
- .toolbar button:active {
48
- opacity: 0.7;
49
- }
50
-
51
- #btn-sort {
52
- min-width: 76px;
53
- text-align: center;
54
- }
55
-
56
- /* Search bar */
57
- .search-bar {
58
- padding: 4px 8px;
59
- border-bottom: 1px solid var(--joplin-divider-color, #ddd);
60
- flex-shrink: 0;
61
- }
62
-
63
- #search-input {
64
- width: 100%;
65
- box-sizing: border-box;
66
- padding: 5px 8px;
67
- border: 1px solid var(--joplin-divider-color, #ccc);
68
- border-radius: 4px;
69
- background: var(--joplin-background-color, #fff);
70
- color: var(--joplin-color);
71
- font-size: 12px;
72
- outline: none;
73
- }
74
-
75
- #search-input:focus {
76
- border-color: var(--joplin-color2, #4a9cf5);
77
- }
78
-
79
- /* Tree container */
80
- #tree-container {
81
- flex: 1;
82
- overflow-y: scroll;
83
- padding: 4px 0;
84
- }
85
-
86
- #tree-container::-webkit-scrollbar {
87
- width: 8px;
88
- }
89
-
90
- #tree-container::-webkit-scrollbar-track {
91
- background: transparent;
92
- }
93
-
94
- #tree-container::-webkit-scrollbar-thumb {
95
- background: var(--joplin-color-faded, #888);
96
- border-radius: 4px;
97
- }
98
-
99
- #tree-container::-webkit-scrollbar-thumb:hover {
100
- background: var(--joplin-color, #555);
101
- }
102
-
103
- /* Tree items */
104
- .tree-item {
105
- display: flex;
106
- align-items: center;
107
- padding: 3px 8px;
108
- cursor: pointer;
109
- gap: 5px;
110
- border-radius: 3px;
111
- margin: 1px 4px;
112
- min-height: 24px;
113
- }
114
-
115
- .tree-item:hover {
116
- background: var(--joplin-background-color-hover3, rgba(100, 100, 100, 0.1));
117
- }
118
-
119
- .tree-item.note.selected {
120
- background: var(--joplin-selected-color, rgba(74, 156, 245, 0.2));
121
- }
122
-
123
- /* Toggle arrow */
124
- .toggle {
125
- width: 14px;
126
- text-align: center;
127
- font-size: 9px;
128
- flex-shrink: 0;
129
- color: var(--joplin-color-faded, #888);
130
- transition: transform 0.15s;
131
- }
132
-
133
- /* Icons */
134
- .icon {
135
- flex-shrink: 0;
136
- font-size: 14px;
137
- width: 18px;
138
- text-align: center;
139
- }
140
-
141
- .custom-icon {
142
- display: block;
143
- width: 16px;
144
- height: 16px;
145
- object-fit: contain;
146
- margin: 0 auto;
147
- }
148
-
149
- /* Label */
150
- .label {
151
- flex: 1;
152
- overflow: hidden;
153
- text-overflow: ellipsis;
154
- white-space: nowrap;
155
- }
156
-
157
- /* Note count badge */
158
- .count {
159
- color: var(--joplin-color-faded, #888);
160
- font-size: 10px;
161
- flex-shrink: 0;
162
- background: var(--joplin-background-color3, rgba(100,100,100,0.1));
163
- border-radius: 8px;
164
- padding: 0 5px;
165
- min-width: 16px;
166
- text-align: center;
167
- line-height: 16px;
168
- }
169
-
170
- /* Collapsed children */
171
- .children.collapsed {
172
- display: none;
173
- }
174
-
175
- /* Open/closed icon variants: both are in the DOM, the .collapsed class on
176
- the folder row / pinned header picks which one shows. This lets the
177
- webview toggle folders without a backend re-render. */
178
- .tree-item.folder.collapsed .icon-when-open { display: none; }
179
- .tree-item.folder:not(.collapsed) .icon-when-collapsed { display: none; }
180
- .pinned-section-header.collapsed .icon-when-open { display: none; }
181
- .pinned-section-header:not(.collapsed) .icon-when-collapsed { display: none; }
182
-
183
- /* Folder styling */
184
- .folder .label {
185
- font-weight: 600;
186
- }
187
-
188
- /* Note styling */
189
- .note .label {
190
- font-weight: normal;
191
- }
192
-
193
- .note .icon {
194
- font-size: 12px;
195
- }
196
-
197
- /* Bottom bar (sync) */
198
- .bottom-bar {
199
- display: flex;
200
- padding: 6px 8px;
201
- border-top: 1px solid var(--joplin-divider-color, #ddd);
202
- flex-shrink: 0;
203
- }
204
-
205
- .bottom-bar button {
206
- flex: 1;
207
- background: var(--joplin-background-color3, #f0f0f0);
208
- border: 1px solid var(--joplin-divider-color, #ccc);
209
- border-radius: 4px;
210
- padding: 5px 10px;
211
- cursor: pointer;
212
- color: var(--joplin-color);
213
- font-size: 12px;
214
- }
215
-
216
- .bottom-bar button:hover {
217
- background: var(--joplin-background-color-hover3, #e0e0e0);
218
- }
219
-
220
- .bottom-bar button:active {
221
- opacity: 0.7;
222
- }
223
-
224
- .bottom-bar button:disabled,
225
- .bottom-bar button.syncing {
226
- opacity: 0.5;
227
- cursor: not-allowed;
228
- }
229
-
230
- .bottom-bar button.sync-done {
231
- color: #27ae60;
232
- opacity: 1;
233
- cursor: default;
234
- }
235
-
236
- .bottom-bar button.sync-error {
237
- color: #e74c3c;
238
- opacity: 1;
239
- cursor: default;
240
- }
241
-
242
- /* Context menu */
243
- .context-menu {
244
- position: fixed;
245
- background: var(--joplin-background-color, #fff);
246
- border: 1px solid var(--joplin-divider-color, #ccc);
247
- border-radius: 6px;
248
- box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15);
249
- padding: 4px 0;
250
- min-width: 160px;
251
- z-index: 9999;
252
- font-size: 12px;
253
- }
254
-
255
- .ctx-item {
256
- padding: 6px 14px;
257
- cursor: pointer;
258
- color: var(--joplin-color);
259
- }
260
-
261
- .ctx-item:hover {
262
- background: var(--joplin-background-color-hover3, rgba(100, 100, 100, 0.1));
263
- }
264
-
265
- .ctx-danger {
266
- color: #e74c3c;
267
- }
268
-
269
- .ctx-danger:hover {
270
- background: rgba(231, 76, 60, 0.1);
271
- }
272
-
273
- .ctx-sep {
274
- height: 1px;
275
- background: var(--joplin-divider-color, #ddd);
276
- margin: 4px 0;
277
- }
278
-
279
- /* Pinned section */
280
- .pinned-section-header {
281
- display: flex;
282
- align-items: center;
283
- padding: 3px 8px;
284
- gap: 5px;
285
- margin: 1px 4px;
286
- min-height: 24px;
287
- border-radius: 3px;
288
- cursor: pointer;
289
- user-select: none;
290
- color: var(--joplin-color-faded, #888);
291
- font-weight: 700;
292
- }
293
-
294
- .pinned-section-header:hover {
295
- background: var(--joplin-background-color-hover3, rgba(100, 100, 100, 0.12));
296
- }
297
-
298
- .pinned-section-body {
299
- border-bottom: 1px solid var(--joplin-divider-color, #ddd);
300
- margin-bottom: 2px;
301
- }
302
-
303
- .pinned-section-body.collapsed {
304
- display: none;
305
- }
306
-
307
- .pinned-item {
308
- padding-left: 26px !important;
309
- }
310
-
311
- /* Empty drop zone — sticky at bottom of scroll viewport */
312
- .drop-zone-empty {
313
- position: sticky;
314
- bottom: 0;
315
- height: 32px;
316
- flex-shrink: 0;
317
- opacity: 0;
318
- pointer-events: none;
319
- transition: opacity 0.15s;
320
- }
321
-
322
- /* Only show during drag (activated by JS class on tree-container) */
323
- #tree-container.dragging-active .drop-zone-empty {
324
- opacity: 1;
325
- pointer-events: auto;
326
- border: 2px dashed var(--joplin-color2, #4a9cf5);
327
- border-radius: 6px;
328
- margin: 4px 8px;
329
- text-align: center;
330
- line-height: 28px;
331
- font-size: 11px;
332
- color: var(--joplin-color2, #4a9cf5);
333
- background: rgba(74, 156, 245, 0.08);
334
- }
335
-
336
- /* Pinned section accepts drops during drag — outline doesn't affect layout */
337
- #tree-container.dragging-active .pinned-section-header {
338
- outline: 2px dashed var(--joplin-color2, #4a9cf5);
339
- outline-offset: -2px;
340
- }
341
-
342
- /* Drag & Drop */
343
- .tree-item.dragging {
344
- opacity: 0.35;
345
- filter: grayscale(30%);
346
- }
347
-
348
- .tree-item.drop-target {
349
- background: var(--joplin-selected-color, rgba(74, 156, 245, 0.28));
350
- outline: 2px solid var(--joplin-color2, #4a9cf5);
351
- outline-offset: -2px;
352
- border-radius: 4px;
353
- box-shadow: 0 0 0 2px rgba(74, 156, 245, 0.15);
354
- }
355
-
356
- /* Horizontal insertion bar (above/below) — position:relative only when active */
357
- .tree-item.drop-above,
358
- .tree-item.drop-below {
359
- position: relative;
360
- }
361
-
362
- .tree-item.drop-above::before,
363
- .tree-item.drop-below::before {
364
- content: '';
365
- position: absolute;
366
- left: 4px;
367
- right: 4px;
368
- height: 3px;
369
- background: var(--joplin-color2, #4a9cf5);
370
- border-radius: 2px;
371
- box-shadow: 0 0 4px rgba(74, 156, 245, 0.6);
372
- pointer-events: none;
373
- z-index: 5;
374
- }
375
-
376
- .tree-item.drop-above::before {
377
- top: -2px;
378
- }
379
-
380
- .tree-item.drop-below::before {
381
- bottom: -2px;
382
- }
383
-
384
- /* Dropping into empty area -> create new notebook */
385
- #tree-container.drop-empty {
386
- box-shadow: inset 0 0 0 2px var(--joplin-color2, #4a9cf5);
387
- background: rgba(74, 156, 245, 0.06);
388
- }
389
-
390
-
391
- #search-results {
392
- flex: 1;
393
- overflow-y: scroll;
394
- padding: 4px 0;
395
- }
396
-
397
- #search-results::-webkit-scrollbar {
398
- width: 8px;
399
- }
400
-
401
- #search-results::-webkit-scrollbar-track {
402
- background: transparent;
403
- }
404
-
405
- #search-results::-webkit-scrollbar-thumb {
406
- background: var(--joplin-color-faded, #888);
407
- border-radius: 4px;
408
- }
409
-
410
- /* Search results */
411
- .search-status {
412
- padding: 8px 12px;
413
- font-size: 11px;
414
- color: var(--joplin-color-faded, #888);
415
- border-bottom: 1px solid var(--joplin-divider-color, #eee);
416
- }
417
-
418
- .search-result-item {
419
- display: flex;
420
- align-items: flex-start;
421
- padding: 8px 10px;
422
- gap: 8px;
423
- min-height: auto;
424
- margin: 0; /* override .tree-item margin for note items in search results */
425
- border-radius: 0;
426
- }
427
-
428
- .search-result-item .icon {
429
- flex-shrink: 0;
430
- font-size: 12px;
431
- width: 18px;
432
- text-align: center;
433
- line-height: 16.8px; /* match .search-result-title 12px * 1.4 */
434
- }
435
-
436
- .search-result-content {
437
- flex: 1;
438
- min-width: 0;
439
- overflow: hidden;
440
- }
441
-
442
- .search-result-title {
443
- font-weight: 600;
444
- font-size: 12px;
445
- line-height: 1.4;
446
- white-space: nowrap;
447
- overflow: hidden;
448
- text-overflow: ellipsis;
449
- }
450
-
451
- .search-result-folder {
452
- font-size: 10px;
453
- color: var(--joplin-color-faded, #999);
454
- margin-top: 1px;
455
- }
456
-
457
- .search-result-snippet {
458
- font-size: 11px;
459
- color: var(--joplin-color-faded, #777);
460
- margin-top: 3px;
461
- line-height: 1.4;
462
- display: -webkit-box;
463
- -webkit-line-clamp: 2;
464
- -webkit-box-orient: vertical;
465
- overflow: hidden;
466
- word-break: break-all;
467
- }
468
-
469
- /* Search section headers */
470
- .search-section-header {
471
- padding: 6px 10px;
472
- font-size: 11px;
473
- font-weight: 700;
474
- color: var(--joplin-color-faded, #888);
475
- background: var(--joplin-background-color3, rgba(100, 100, 100, 0.06));
476
- border-bottom: 1px solid var(--joplin-divider-color, #eee);
477
- text-transform: uppercase;
478
- letter-spacing: 0.5px;
479
- cursor: pointer;
480
- user-select: none;
481
- }
482
-
483
- .search-section-header:hover {
484
- background: var(--joplin-background-color-hover3, rgba(100, 100, 100, 0.12));
485
- }
486
-
487
- .section-toggle {
488
- display: inline-block;
489
- font-size: 9px;
490
- width: 12px;
491
- text-align: center;
492
- transition: transform 0.15s;
493
- }
494
-
495
- .search-section-body.collapsed {
496
- display: none;
497
- }
498
-
499
- /* Tag items in search results */
500
- .search-tag-item {
501
- cursor: pointer;
502
- }
503
-
504
- .search-tag-item:hover {
505
- background: var(--joplin-background-color-hover3, rgba(100, 100, 100, 0.1));
506
- }
507
-
508
- .tag-expand-arrow {
509
- flex-shrink: 0;
510
- font-size: 9px;
511
- color: var(--joplin-color-faded, #888);
512
- transition: transform 0.15s;
513
- margin-right: 4px;
514
- }
515
-
516
- .tag-expand-arrow.expanded {
517
- transform: rotate(90deg);
518
- }
519
-
520
- .tag-notes-container {
521
- padding-left: 16px;
522
- border-left: 2px solid var(--joplin-divider-color, #eee);
523
- margin-left: 18px;
524
- }
525
-
526
- /* Folder items in search results */
527
- .search-folder-item {
528
- cursor: pointer;
529
- }
530
-
531
- .search-folder-item:hover {
532
- background: var(--joplin-background-color-hover3, rgba(100, 100, 100, 0.1));
533
- }
534
-
535
- /* Flash highlight when locating a folder from search */
536
- @keyframes locate-pulse {
537
- 0% { background: rgba(74, 156, 245, 0.5); }
538
- 100% { background: transparent; }
539
- }
540
-
541
- .tree-item.locate-flash {
542
- animation: locate-pulse 1.5s ease-out;
543
- border-radius: 4px;
544
- }
545
-
546
- /* Inline input dialog */
547
- .inline-input-overlay {
548
- position: fixed;
549
- top: 0; left: 0; right: 0; bottom: 0;
550
- background: rgba(0, 0, 0, 0.3);
551
- display: flex;
552
- align-items: center;
553
- justify-content: center;
554
- z-index: 10000;
555
- }
556
-
557
- .inline-input-dialog {
558
- background: var(--joplin-background-color, #fff);
559
- border: 1px solid var(--joplin-divider-color, #ccc);
560
- border-radius: 8px;
561
- padding: 16px;
562
- min-width: 240px;
563
- max-width: 90%;
564
- box-shadow: 0 8px 24px rgba(0, 0, 0, 0.2);
565
- }
566
-
567
- .inline-input-label {
568
- font-size: 12px;
569
- margin-bottom: 8px;
570
- color: var(--joplin-color);
571
- }
572
-
573
- .inline-input-field {
574
- width: 100%;
575
- box-sizing: border-box;
576
- padding: 6px 8px;
577
- border: 1px solid var(--joplin-divider-color, #ccc);
578
- border-radius: 4px;
579
- background: var(--joplin-background-color, #fff);
580
- color: var(--joplin-color);
581
- font-size: 13px;
582
- outline: none;
583
- }
584
-
585
- .inline-input-field:focus {
586
- border-color: var(--joplin-color2, #4a9cf5);
587
- }
588
-
589
- .inline-input-buttons {
590
- display: flex;
591
- gap: 8px;
592
- margin-top: 12px;
593
- justify-content: flex-end;
594
- }
595
-
596
- .inline-input-buttons button {
597
- padding: 5px 16px;
598
- border: 1px solid var(--joplin-divider-color, #ccc);
599
- border-radius: 4px;
600
- cursor: pointer;
601
- font-size: 12px;
602
- color: var(--joplin-color);
603
- background: var(--joplin-background-color3, #f0f0f0);
604
- }
605
-
606
- .inline-input-ok {
607
- background: #1a73e8 !important;
608
- color: #fff !important;
609
- border-color: #1a73e8 !important;
610
- }
611
-
612
- .inline-input-buttons button:hover {
613
- opacity: 0.85;
614
- }
615
-
616
- mark.search-highlight {
617
- background: rgba(255, 213, 0, 0.4);
618
- color: inherit;
619
- padding: 0 1px;
620
- border-radius: 2px;
621
- }
1
+ html, body {
2
+ height: 100%;
3
+ margin: 0;
4
+ padding: 0;
5
+ overflow: hidden;
6
+ }
7
+
8
+ #notes-in-list-root {
9
+ font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif;
10
+ font-size: 13px;
11
+ color: var(--joplin-color);
12
+ background-color: var(--joplin-background-color);
13
+ height: 100vh;
14
+ display: flex;
15
+ flex-direction: column;
16
+ user-select: none;
17
+ overflow: hidden;
18
+ }
19
+
20
+ /* Toolbar */
21
+ .toolbar {
22
+ display: flex;
23
+ gap: 4px;
24
+ padding: 6px 8px;
25
+ border-bottom: 1px solid var(--joplin-divider-color, #ddd);
26
+ align-items: center;
27
+ flex-shrink: 0;
28
+ }
29
+
30
+ .toolbar button {
31
+ background: var(--joplin-background-color3, #f0f0f0);
32
+ border: 1px solid var(--joplin-divider-color, #ccc);
33
+ border-radius: 4px;
34
+ padding: 4px 8px;
35
+ cursor: pointer;
36
+ color: var(--joplin-color);
37
+ font-size: 12px;
38
+ white-space: nowrap;
39
+ flex-shrink: 0;
40
+ line-height: 1.2;
41
+ }
42
+
43
+ .toolbar button:hover {
44
+ background: var(--joplin-background-color-hover3, #e0e0e0);
45
+ }
46
+
47
+ .toolbar button:active {
48
+ opacity: 0.7;
49
+ }
50
+
51
+ #btn-sort {
52
+ min-width: 76px;
53
+ text-align: center;
54
+ }
55
+
56
+ /* Search bar */
57
+ .search-bar {
58
+ padding: 4px 8px;
59
+ border-bottom: 1px solid var(--joplin-divider-color, #ddd);
60
+ flex-shrink: 0;
61
+ }
62
+
63
+ #search-input {
64
+ width: 100%;
65
+ box-sizing: border-box;
66
+ padding: 5px 8px;
67
+ border: 1px solid var(--joplin-divider-color, #ccc);
68
+ border-radius: 4px;
69
+ background: var(--joplin-background-color, #fff);
70
+ color: var(--joplin-color);
71
+ font-size: 12px;
72
+ outline: none;
73
+ }
74
+
75
+ #search-input:focus {
76
+ border-color: var(--joplin-color2, #4a9cf5);
77
+ }
78
+
79
+ /* Tree container */
80
+ #tree-container {
81
+ flex: 1;
82
+ overflow-y: scroll;
83
+ padding: 4px 0;
84
+ }
85
+
86
+ #tree-container::-webkit-scrollbar {
87
+ width: 8px;
88
+ }
89
+
90
+ #tree-container::-webkit-scrollbar-track {
91
+ background: transparent;
92
+ }
93
+
94
+ #tree-container::-webkit-scrollbar-thumb {
95
+ background: var(--joplin-color-faded, #888);
96
+ border-radius: 4px;
97
+ }
98
+
99
+ #tree-container::-webkit-scrollbar-thumb:hover {
100
+ background: var(--joplin-color, #555);
101
+ }
102
+
103
+ /* Tree items */
104
+ .tree-item {
105
+ display: flex;
106
+ align-items: center;
107
+ padding: 3px 8px;
108
+ cursor: pointer;
109
+ gap: 5px;
110
+ border-radius: 3px;
111
+ margin: 1px 4px;
112
+ min-height: 24px;
113
+ }
114
+
115
+ .tree-item:hover {
116
+ background: var(--joplin-background-color-hover3, rgba(100, 100, 100, 0.1));
117
+ }
118
+
119
+ .tree-item.note.selected {
120
+ background: var(--joplin-selected-color, rgba(74, 156, 245, 0.2));
121
+ }
122
+
123
+ /* Toggle arrow */
124
+ .toggle {
125
+ width: 14px;
126
+ text-align: center;
127
+ font-size: 9px;
128
+ flex-shrink: 0;
129
+ color: var(--joplin-color-faded, #888);
130
+ transition: transform 0.15s;
131
+ }
132
+
133
+ /* Icons */
134
+ .icon {
135
+ flex-shrink: 0;
136
+ font-size: 14px;
137
+ width: 18px;
138
+ text-align: center;
139
+ }
140
+
141
+ .custom-icon {
142
+ display: block;
143
+ width: 16px;
144
+ height: 16px;
145
+ object-fit: contain;
146
+ margin: 0 auto;
147
+ }
148
+
149
+ /* Label */
150
+ .label {
151
+ flex: 1;
152
+ overflow: hidden;
153
+ text-overflow: ellipsis;
154
+ white-space: nowrap;
155
+ }
156
+
157
+ /* Note count badge */
158
+ .count {
159
+ color: var(--joplin-color-faded, #888);
160
+ font-size: 10px;
161
+ flex-shrink: 0;
162
+ background: var(--joplin-background-color3, rgba(100,100,100,0.1));
163
+ border-radius: 8px;
164
+ padding: 0 5px;
165
+ min-width: 16px;
166
+ text-align: center;
167
+ line-height: 16px;
168
+ }
169
+
170
+ /* Collapsed children */
171
+ .children.collapsed {
172
+ display: none;
173
+ }
174
+
175
+ /* Open/closed icon variants: both are in the DOM, the .collapsed class on
176
+ the folder row / pinned header picks which one shows. This lets the
177
+ webview toggle folders without a backend re-render. */
178
+ .tree-item.folder.collapsed .icon-when-open { display: none; }
179
+ .tree-item.folder:not(.collapsed) .icon-when-collapsed { display: none; }
180
+ .pinned-section-header.collapsed .icon-when-open { display: none; }
181
+ .pinned-section-header:not(.collapsed) .icon-when-collapsed { display: none; }
182
+
183
+ /* Folder styling */
184
+ .folder .label {
185
+ font-weight: 600;
186
+ }
187
+
188
+ /* Note styling */
189
+ .note .label {
190
+ font-weight: normal;
191
+ }
192
+
193
+ .note .icon {
194
+ font-size: 12px;
195
+ }
196
+
197
+ /* Bottom bar (sync) */
198
+ .bottom-bar {
199
+ display: flex;
200
+ padding: 6px 8px;
201
+ border-top: 1px solid var(--joplin-divider-color, #ddd);
202
+ flex-shrink: 0;
203
+ }
204
+
205
+ .bottom-bar button {
206
+ flex: 1;
207
+ background: var(--joplin-background-color3, #f0f0f0);
208
+ border: 1px solid var(--joplin-divider-color, #ccc);
209
+ border-radius: 4px;
210
+ padding: 5px 10px;
211
+ cursor: pointer;
212
+ color: var(--joplin-color);
213
+ font-size: 12px;
214
+ }
215
+
216
+ .bottom-bar button:hover {
217
+ background: var(--joplin-background-color-hover3, #e0e0e0);
218
+ }
219
+
220
+ .bottom-bar button:active {
221
+ opacity: 0.7;
222
+ }
223
+
224
+ .bottom-bar button:disabled,
225
+ .bottom-bar button.syncing {
226
+ opacity: 0.5;
227
+ cursor: not-allowed;
228
+ }
229
+
230
+ .bottom-bar button.sync-done {
231
+ color: #27ae60;
232
+ opacity: 1;
233
+ cursor: default;
234
+ }
235
+
236
+ .bottom-bar button.sync-error {
237
+ color: #e74c3c;
238
+ opacity: 1;
239
+ cursor: default;
240
+ }
241
+
242
+ /* Context menu */
243
+ .context-menu {
244
+ position: fixed;
245
+ background: var(--joplin-background-color, #fff);
246
+ border: 1px solid var(--joplin-divider-color, #ccc);
247
+ border-radius: 6px;
248
+ box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15);
249
+ padding: 4px 0;
250
+ min-width: 160px;
251
+ z-index: 9999;
252
+ font-size: 12px;
253
+ }
254
+
255
+ .ctx-item {
256
+ padding: 6px 14px;
257
+ cursor: pointer;
258
+ color: var(--joplin-color);
259
+ }
260
+
261
+ .ctx-item:hover {
262
+ background: var(--joplin-background-color-hover3, rgba(100, 100, 100, 0.1));
263
+ }
264
+
265
+ .ctx-danger {
266
+ color: #e74c3c;
267
+ }
268
+
269
+ .ctx-danger:hover {
270
+ background: rgba(231, 76, 60, 0.1);
271
+ }
272
+
273
+ .ctx-sep {
274
+ height: 1px;
275
+ background: var(--joplin-divider-color, #ddd);
276
+ margin: 4px 0;
277
+ }
278
+
279
+ /* Pinned section */
280
+ .pinned-section-header {
281
+ display: flex;
282
+ align-items: center;
283
+ padding: 3px 8px;
284
+ gap: 5px;
285
+ margin: 1px 4px;
286
+ min-height: 24px;
287
+ border-radius: 3px;
288
+ cursor: pointer;
289
+ user-select: none;
290
+ color: var(--joplin-color-faded, #888);
291
+ font-weight: 700;
292
+ }
293
+
294
+ .pinned-section-header:hover {
295
+ background: var(--joplin-background-color-hover3, rgba(100, 100, 100, 0.12));
296
+ }
297
+
298
+ .pinned-section-body {
299
+ border-bottom: 1px solid var(--joplin-divider-color, #ddd);
300
+ margin-bottom: 2px;
301
+ }
302
+
303
+ .pinned-section-body.collapsed {
304
+ display: none;
305
+ }
306
+
307
+ .pinned-item {
308
+ padding-left: 26px !important;
309
+ }
310
+
311
+ /* Empty drop zone — sticky at bottom of scroll viewport */
312
+ .drop-zone-empty {
313
+ position: sticky;
314
+ bottom: 0;
315
+ height: 32px;
316
+ flex-shrink: 0;
317
+ opacity: 0;
318
+ pointer-events: none;
319
+ transition: opacity 0.15s;
320
+ }
321
+
322
+ /* Only show during drag (activated by JS class on tree-container) */
323
+ #tree-container.dragging-active .drop-zone-empty {
324
+ opacity: 1;
325
+ pointer-events: auto;
326
+ border: 2px dashed var(--joplin-color2, #4a9cf5);
327
+ border-radius: 6px;
328
+ margin: 4px 8px;
329
+ text-align: center;
330
+ line-height: 28px;
331
+ font-size: 11px;
332
+ color: var(--joplin-color2, #4a9cf5);
333
+ background: rgba(74, 156, 245, 0.08);
334
+ }
335
+
336
+ /* Pinned section accepts drops during drag — outline doesn't affect layout */
337
+ #tree-container.dragging-active .pinned-section-header {
338
+ outline: 2px dashed var(--joplin-color2, #4a9cf5);
339
+ outline-offset: -2px;
340
+ }
341
+
342
+ /* Drag & Drop */
343
+ .tree-item.dragging {
344
+ opacity: 0.35;
345
+ filter: grayscale(30%);
346
+ }
347
+
348
+ .tree-item.drop-target {
349
+ background: var(--joplin-selected-color, rgba(74, 156, 245, 0.28));
350
+ outline: 2px solid var(--joplin-color2, #4a9cf5);
351
+ outline-offset: -2px;
352
+ border-radius: 4px;
353
+ box-shadow: 0 0 0 2px rgba(74, 156, 245, 0.15);
354
+ }
355
+
356
+ /* Horizontal insertion bar (above/below) — position:relative only when active */
357
+ .tree-item.drop-above,
358
+ .tree-item.drop-below {
359
+ position: relative;
360
+ }
361
+
362
+ .tree-item.drop-above::before,
363
+ .tree-item.drop-below::before {
364
+ content: '';
365
+ position: absolute;
366
+ left: 4px;
367
+ right: 4px;
368
+ height: 3px;
369
+ background: var(--joplin-color2, #4a9cf5);
370
+ border-radius: 2px;
371
+ box-shadow: 0 0 4px rgba(74, 156, 245, 0.6);
372
+ pointer-events: none;
373
+ z-index: 5;
374
+ }
375
+
376
+ .tree-item.drop-above::before {
377
+ top: -2px;
378
+ }
379
+
380
+ .tree-item.drop-below::before {
381
+ bottom: -2px;
382
+ }
383
+
384
+ /* Dropping into empty area -> create new notebook */
385
+ #tree-container.drop-empty {
386
+ box-shadow: inset 0 0 0 2px var(--joplin-color2, #4a9cf5);
387
+ background: rgba(74, 156, 245, 0.06);
388
+ }
389
+
390
+
391
+ #search-results {
392
+ flex: 1;
393
+ overflow-y: scroll;
394
+ padding: 4px 0;
395
+ }
396
+
397
+ #search-results::-webkit-scrollbar {
398
+ width: 8px;
399
+ }
400
+
401
+ #search-results::-webkit-scrollbar-track {
402
+ background: transparent;
403
+ }
404
+
405
+ #search-results::-webkit-scrollbar-thumb {
406
+ background: var(--joplin-color-faded, #888);
407
+ border-radius: 4px;
408
+ }
409
+
410
+ /* Search results */
411
+ .search-status {
412
+ padding: 8px 12px;
413
+ font-size: 11px;
414
+ color: var(--joplin-color-faded, #888);
415
+ border-bottom: 1px solid var(--joplin-divider-color, #eee);
416
+ }
417
+
418
+ .search-result-item {
419
+ display: flex;
420
+ align-items: flex-start;
421
+ padding: 8px 10px;
422
+ gap: 8px;
423
+ min-height: auto;
424
+ margin: 0; /* override .tree-item margin for note items in search results */
425
+ border-radius: 0;
426
+ }
427
+
428
+ .search-result-item .icon {
429
+ flex-shrink: 0;
430
+ font-size: 12px;
431
+ width: 18px;
432
+ text-align: center;
433
+ line-height: 16.8px; /* match .search-result-title 12px * 1.4 */
434
+ }
435
+
436
+ .search-result-content {
437
+ flex: 1;
438
+ min-width: 0;
439
+ overflow: hidden;
440
+ }
441
+
442
+ .search-result-title {
443
+ font-weight: 600;
444
+ font-size: 12px;
445
+ line-height: 1.4;
446
+ white-space: nowrap;
447
+ overflow: hidden;
448
+ text-overflow: ellipsis;
449
+ }
450
+
451
+ .search-result-folder {
452
+ font-size: 10px;
453
+ color: var(--joplin-color-faded, #999);
454
+ margin-top: 1px;
455
+ }
456
+
457
+ .search-result-snippet {
458
+ font-size: 11px;
459
+ color: var(--joplin-color-faded, #777);
460
+ margin-top: 3px;
461
+ line-height: 1.4;
462
+ display: -webkit-box;
463
+ -webkit-line-clamp: 2;
464
+ -webkit-box-orient: vertical;
465
+ overflow: hidden;
466
+ word-break: break-all;
467
+ }
468
+
469
+ /* Search section headers */
470
+ .search-section-header {
471
+ padding: 6px 10px;
472
+ font-size: 11px;
473
+ font-weight: 700;
474
+ color: var(--joplin-color-faded, #888);
475
+ background: var(--joplin-background-color3, rgba(100, 100, 100, 0.06));
476
+ border-bottom: 1px solid var(--joplin-divider-color, #eee);
477
+ text-transform: uppercase;
478
+ letter-spacing: 0.5px;
479
+ cursor: pointer;
480
+ user-select: none;
481
+ }
482
+
483
+ .search-section-header:hover {
484
+ background: var(--joplin-background-color-hover3, rgba(100, 100, 100, 0.12));
485
+ }
486
+
487
+ .section-toggle {
488
+ display: inline-block;
489
+ font-size: 9px;
490
+ width: 12px;
491
+ text-align: center;
492
+ transition: transform 0.15s;
493
+ }
494
+
495
+ .search-section-body.collapsed {
496
+ display: none;
497
+ }
498
+
499
+ /* Tag items in search results */
500
+ .search-tag-item {
501
+ cursor: pointer;
502
+ }
503
+
504
+ .search-tag-item:hover {
505
+ background: var(--joplin-background-color-hover3, rgba(100, 100, 100, 0.1));
506
+ }
507
+
508
+ .tag-expand-arrow {
509
+ flex-shrink: 0;
510
+ font-size: 9px;
511
+ color: var(--joplin-color-faded, #888);
512
+ transition: transform 0.15s;
513
+ margin-right: 4px;
514
+ }
515
+
516
+ .tag-expand-arrow.expanded {
517
+ transform: rotate(90deg);
518
+ }
519
+
520
+ .tag-notes-container {
521
+ padding-left: 16px;
522
+ border-left: 2px solid var(--joplin-divider-color, #eee);
523
+ margin-left: 18px;
524
+ }
525
+
526
+ /* Folder items in search results */
527
+ .search-folder-item {
528
+ cursor: pointer;
529
+ }
530
+
531
+ .search-folder-item:hover {
532
+ background: var(--joplin-background-color-hover3, rgba(100, 100, 100, 0.1));
533
+ }
534
+
535
+ /* Flash highlight when locating a folder from search */
536
+ @keyframes locate-pulse {
537
+ 0% { background: rgba(74, 156, 245, 0.5); }
538
+ 100% { background: transparent; }
539
+ }
540
+
541
+ .tree-item.locate-flash {
542
+ animation: locate-pulse 1.5s ease-out;
543
+ border-radius: 4px;
544
+ }
545
+
546
+ /* Inline input dialog */
547
+ .inline-input-overlay {
548
+ position: fixed;
549
+ top: 0; left: 0; right: 0; bottom: 0;
550
+ background: rgba(0, 0, 0, 0.3);
551
+ display: flex;
552
+ align-items: center;
553
+ justify-content: center;
554
+ z-index: 10000;
555
+ }
556
+
557
+ .inline-input-dialog {
558
+ background: var(--joplin-background-color, #fff);
559
+ border: 1px solid var(--joplin-divider-color, #ccc);
560
+ border-radius: 8px;
561
+ padding: 16px;
562
+ min-width: 240px;
563
+ max-width: 90%;
564
+ box-shadow: 0 8px 24px rgba(0, 0, 0, 0.2);
565
+ }
566
+
567
+ .inline-input-label {
568
+ font-size: 12px;
569
+ margin-bottom: 8px;
570
+ color: var(--joplin-color);
571
+ }
572
+
573
+ .inline-input-field {
574
+ width: 100%;
575
+ box-sizing: border-box;
576
+ padding: 6px 8px;
577
+ border: 1px solid var(--joplin-divider-color, #ccc);
578
+ border-radius: 4px;
579
+ background: var(--joplin-background-color, #fff);
580
+ color: var(--joplin-color);
581
+ font-size: 13px;
582
+ outline: none;
583
+ }
584
+
585
+ .inline-input-field:focus {
586
+ border-color: var(--joplin-color2, #4a9cf5);
587
+ }
588
+
589
+ .inline-input-buttons {
590
+ display: flex;
591
+ gap: 8px;
592
+ margin-top: 12px;
593
+ justify-content: flex-end;
594
+ }
595
+
596
+ .inline-input-buttons button {
597
+ padding: 5px 16px;
598
+ border: 1px solid var(--joplin-divider-color, #ccc);
599
+ border-radius: 4px;
600
+ cursor: pointer;
601
+ font-size: 12px;
602
+ color: var(--joplin-color);
603
+ background: var(--joplin-background-color3, #f0f0f0);
604
+ }
605
+
606
+ .inline-input-ok {
607
+ background: #1a73e8 !important;
608
+ color: #fff !important;
609
+ border-color: #1a73e8 !important;
610
+ }
611
+
612
+ .inline-input-buttons button:hover {
613
+ opacity: 0.85;
614
+ }
615
+
616
+ mark.search-highlight {
617
+ background: rgba(255, 213, 0, 0.4);
618
+ color: inherit;
619
+ padding: 0 1px;
620
+ border-radius: 2px;
621
+ }