picoride 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,886 @@
1
+ :root {
2
+ --bg: #1e1e1e;
3
+ --bg-sidebar: #252526;
4
+ --bg-toolbar: #2d2d2d;
5
+ --border: #3c3c3c;
6
+ --text: #d4d4d4;
7
+ --text-dim: #8a8a8a;
8
+ --accent: #007acc;
9
+ --accent-hover: #1a8cd8;
10
+ --ok: #4caf50;
11
+ --error: #f44336;
12
+ }
13
+
14
+ * {
15
+ box-sizing: border-box;
16
+ }
17
+
18
+ html, body {
19
+ height: 100%;
20
+ margin: 0;
21
+ font-family: -apple-system, "Segoe UI", "Hiragino Kaku Gothic ProN", Meiryo, sans-serif;
22
+ background: var(--bg);
23
+ color: var(--text);
24
+ }
25
+
26
+ .app {
27
+ display: flex;
28
+ flex-direction: column;
29
+ height: 100vh;
30
+ }
31
+
32
+ .app-body {
33
+ display: flex;
34
+ flex: 1;
35
+ min-height: 0;
36
+ }
37
+
38
+ .menu-bar {
39
+ display: flex;
40
+ align-items: center;
41
+ gap: 12px;
42
+ height: 44px;
43
+ flex-shrink: 0;
44
+ padding: 0 16px;
45
+ background: var(--bg-toolbar);
46
+ border-bottom: 1px solid var(--border);
47
+ }
48
+
49
+ .menu-bar-title {
50
+ font-size: 13px;
51
+ font-weight: 600;
52
+ color: #fff;
53
+ white-space: nowrap;
54
+ }
55
+
56
+ .menu-project-select {
57
+ max-width: 220px;
58
+ overflow: hidden;
59
+ white-space: nowrap;
60
+ text-overflow: ellipsis;
61
+ }
62
+
63
+ .menu-bar-spacer {
64
+ flex: 1;
65
+ }
66
+
67
+ .menu-bar-status {
68
+ display: flex;
69
+ align-items: center;
70
+ gap: 6px;
71
+ padding: 4px 12px;
72
+ border-radius: 12px;
73
+ font-size: 12px;
74
+ white-space: nowrap;
75
+ background: #3c3c3c;
76
+ color: var(--text-dim);
77
+ }
78
+
79
+ .menu-bar-status::before {
80
+ content: '';
81
+ width: 7px;
82
+ height: 7px;
83
+ border-radius: 50%;
84
+ background: currentColor;
85
+ }
86
+
87
+ .menu-bar-status.running {
88
+ background: rgba(0, 122, 204, 0.15);
89
+ color: var(--accent);
90
+ }
91
+
92
+ .menu-bar-status.success {
93
+ background: rgba(76, 175, 80, 0.15);
94
+ color: var(--ok);
95
+ }
96
+
97
+ .menu-bar-status.failed {
98
+ background: rgba(244, 67, 54, 0.15);
99
+ color: var(--error);
100
+ }
101
+
102
+ .menu-bar select {
103
+ background: var(--bg);
104
+ color: var(--text);
105
+ border: 1px solid var(--border);
106
+ border-radius: 4px;
107
+ padding: 4px 8px;
108
+ font-size: 12px;
109
+ }
110
+
111
+ .menu-bar-hint {
112
+ font-size: 11px;
113
+ color: var(--text-dim);
114
+ }
115
+
116
+ .sidebar {
117
+ width: 260px;
118
+ flex-shrink: 0;
119
+ background: var(--bg-sidebar);
120
+ border-right: 1px solid var(--border);
121
+ overflow-y: auto;
122
+ padding: 12px 0;
123
+ }
124
+
125
+ .sidebar h1 {
126
+ font-size: 12px;
127
+ text-transform: uppercase;
128
+ letter-spacing: 0.05em;
129
+ color: var(--text-dim);
130
+ padding: 0 16px 8px;
131
+ margin: 0;
132
+ }
133
+
134
+ .sidebar-message {
135
+ padding: 6px 16px;
136
+ font-size: 13px;
137
+ color: var(--text-dim);
138
+ }
139
+
140
+ /*
141
+ TreeView (tree_view.rb) 用のスタイル。汎用コンポーネント側は見た目を一切
142
+ 知らないので、クラス名(tree-view / tree-node / tree-row 等)はこちら側の
143
+ 取り決め。ネストした .tree-children ごとに padding-left を足しているだけで、
144
+ 深さはCSSの入れ子だけで自然に表現される(Ruby側で深さを数える必要がない)。
145
+ */
146
+ .tree-view,
147
+ .tree-children {
148
+ list-style: none;
149
+ margin: 0;
150
+ padding: 0;
151
+ }
152
+
153
+ .tree-children {
154
+ padding-left: 14px;
155
+ }
156
+
157
+ .tree-row {
158
+ padding: 5px 16px 5px 8px;
159
+ font-size: 13px;
160
+ cursor: pointer;
161
+ white-space: nowrap;
162
+ overflow: hidden;
163
+ text-overflow: ellipsis;
164
+ display: flex;
165
+ align-items: center;
166
+ gap: 6px;
167
+ }
168
+
169
+ .tree-row:hover {
170
+ background: #2a2d2e;
171
+ }
172
+
173
+ .tree-node-file.active > .tree-row {
174
+ background: #37373d;
175
+ color: #fff;
176
+ }
177
+
178
+ .tree-caret {
179
+ width: 14px;
180
+ flex-shrink: 0;
181
+ text-align: center;
182
+ color: var(--text-dim);
183
+ font-size: 10px;
184
+ }
185
+
186
+ .tree-caret-spacer {
187
+ width: 14px;
188
+ flex-shrink: 0;
189
+ }
190
+
191
+ .tree-icon {
192
+ font-size: 10px;
193
+ font-weight: bold;
194
+ width: 16px;
195
+ text-align: center;
196
+ border-radius: 3px;
197
+ flex-shrink: 0;
198
+ }
199
+
200
+ .tree-icon.rb { background: #701516; color: #fff; }
201
+ .tree-icon.c, .tree-icon.h { background: #283593; color: #fff; }
202
+
203
+ .tree-label {
204
+ overflow: hidden;
205
+ text-overflow: ellipsis;
206
+ white-space: nowrap;
207
+ }
208
+
209
+ .editor-area {
210
+ flex: 1;
211
+ display: flex;
212
+ flex-direction: column;
213
+ min-width: 0;
214
+ }
215
+
216
+ .editor-tabs {
217
+ display: flex;
218
+ gap: 4px;
219
+ flex-shrink: 0;
220
+ padding: 0 16px;
221
+ background: var(--bg-toolbar);
222
+ border-bottom: 1px solid var(--border);
223
+ }
224
+
225
+ button.editor-tab {
226
+ background: transparent;
227
+ color: var(--text-dim);
228
+ padding: 8px 4px;
229
+ font-size: 12px;
230
+ border-bottom: 2px solid transparent;
231
+ border-radius: 0;
232
+ }
233
+
234
+ button.editor-tab:hover:not(:disabled) {
235
+ background: transparent;
236
+ color: var(--text);
237
+ }
238
+
239
+ button.editor-tab.active {
240
+ color: #fff;
241
+ border-bottom-color: var(--accent);
242
+ }
243
+
244
+ .tab-pane {
245
+ flex: 1;
246
+ display: flex;
247
+ flex-direction: column;
248
+ min-height: 0;
249
+ }
250
+
251
+ .tab-pane.hidden {
252
+ display: none;
253
+ }
254
+
255
+ .terminal-panel {
256
+ flex: 1;
257
+ display: flex;
258
+ flex-direction: column;
259
+ min-height: 0;
260
+ }
261
+
262
+ .terminal-controls {
263
+ display: flex;
264
+ align-items: center;
265
+ gap: 12px;
266
+ flex-shrink: 0;
267
+ padding: 8px 16px;
268
+ background: var(--bg-toolbar);
269
+ border-bottom: 1px solid var(--border);
270
+ font-size: 13px;
271
+ }
272
+
273
+ .terminal-status {
274
+ color: var(--text-dim);
275
+ font-size: 12px;
276
+ }
277
+
278
+ .terminal-status.connected { color: var(--ok); }
279
+ .terminal-status.connecting { color: var(--accent); }
280
+
281
+ button.terminal-upload {
282
+ background: #555;
283
+ }
284
+
285
+ button.terminal-upload:hover:not(:disabled) {
286
+ background: #6a6a6a;
287
+ }
288
+
289
+ .terminal-container {
290
+ flex: 1;
291
+ min-height: 0;
292
+ padding: 8px;
293
+ background: #1a1a1a;
294
+ }
295
+
296
+ .terminal-upload-log {
297
+ flex-shrink: 0;
298
+ max-height: 140px;
299
+ margin: 0;
300
+ padding: 8px 16px;
301
+ overflow: auto;
302
+ font-family: "SF Mono", Menlo, Consolas, "Courier New", monospace;
303
+ font-size: 12px;
304
+ line-height: 1.5;
305
+ white-space: pre-wrap;
306
+ word-break: break-all;
307
+ border-top: 1px solid var(--border);
308
+ color: var(--text);
309
+ }
310
+
311
+ .toolbar {
312
+ display: flex;
313
+ align-items: center;
314
+ gap: 12px;
315
+ padding: 8px 16px;
316
+ background: var(--bg-toolbar);
317
+ border-bottom: 1px solid var(--border);
318
+ font-size: 13px;
319
+ }
320
+
321
+ .current-file {
322
+ flex: 1;
323
+ color: var(--text-dim);
324
+ overflow: hidden;
325
+ text-overflow: ellipsis;
326
+ white-space: nowrap;
327
+ }
328
+
329
+ button {
330
+ background: var(--accent);
331
+ color: #fff;
332
+ border: none;
333
+ padding: 6px 14px;
334
+ border-radius: 4px;
335
+ font-size: 13px;
336
+ cursor: pointer;
337
+ }
338
+
339
+ button:hover:not(:disabled) {
340
+ background: var(--accent-hover);
341
+ }
342
+
343
+ button:disabled {
344
+ background: #555;
345
+ cursor: not-allowed;
346
+ opacity: 0.6;
347
+ }
348
+
349
+ /* Raspberry Pi Pico の「UF2をダウンロード」(<a download>)をボタンと同じ見た目にする */
350
+ a.menu-download {
351
+ display: inline-block;
352
+ background: var(--accent);
353
+ color: #fff;
354
+ padding: 6px 14px;
355
+ border-radius: 4px;
356
+ font-size: 13px;
357
+ text-decoration: none;
358
+ cursor: pointer;
359
+ }
360
+
361
+ a.menu-download:hover {
362
+ background: var(--accent-hover);
363
+ }
364
+
365
+ .status {
366
+ min-width: 90px;
367
+ font-size: 12px;
368
+ }
369
+
370
+ .status.ok { color: var(--ok); }
371
+ .status.error { color: var(--error); }
372
+
373
+ .editor-wrapper {
374
+ flex: 1;
375
+ display: flex;
376
+ min-height: 0;
377
+ overflow: hidden;
378
+ }
379
+
380
+ .line-numbers {
381
+ width: 48px;
382
+ flex-shrink: 0;
383
+ overflow: hidden;
384
+ background: #1a1a1a;
385
+ border-right: 1px solid var(--border);
386
+ text-align: right;
387
+ padding: 12px 8px 12px 0;
388
+ color: var(--text-dim);
389
+ user-select: none;
390
+ }
391
+
392
+ .line-numbers,
393
+ .highlight-layer,
394
+ #editor {
395
+ font-family: "SF Mono", Menlo, Consolas, "Courier New", monospace;
396
+ font-size: 14px;
397
+ line-height: 1.6;
398
+ tab-size: 2;
399
+ letter-spacing: normal;
400
+ word-spacing: normal;
401
+ }
402
+
403
+ .editor-scroll-area {
404
+ position: relative;
405
+ flex: 1;
406
+ overflow: auto;
407
+ /*
408
+ highlight-layer(<pre>)と#editor(<textarea>)を同じグリッドセルに重ねる。
409
+ どちらも grid-area:1/1 を指定し、align-items:stretch(初期値)で
410
+ お互いが常に同じ高さ・同じ位置になるようにする。
411
+
412
+ 以前は position:absolute で重ねていたが、<textarea> は内容が
413
+ あふれると要素内部で独自にスクロールする性質を持つため、
414
+ 親のスクロールとテキストエリア自身のスクロールがズレて
415
+ 「表示されている文字列とキャレットの行が合わない」問題が起きていた。
416
+ Gridで重ねてスクロールをこのコンテナ一箇所に集約することで解消する。
417
+ */
418
+ display: grid;
419
+ }
420
+
421
+ .highlight-layer,
422
+ #editor {
423
+ grid-area: 1 / 1;
424
+ width: 100%;
425
+ min-height: 100%;
426
+ margin: 0;
427
+ padding: 12px;
428
+ border: 0;
429
+ white-space: pre;
430
+ overflow-wrap: normal;
431
+ word-break: normal;
432
+ box-sizing: border-box;
433
+ }
434
+
435
+ .highlight-layer {
436
+ pointer-events: none;
437
+ color: var(--text);
438
+ background: none;
439
+ overflow: hidden; /* <pre>のデフォルトoverflow:autoを無効化し、独自スクロールを防ぐ */
440
+ }
441
+
442
+ .highlight-layer code {
443
+ margin: 0;
444
+ padding: 0;
445
+ background: none;
446
+ font: inherit;
447
+ white-space: inherit;
448
+ }
449
+
450
+ #editor {
451
+ background: transparent;
452
+ color: transparent;
453
+ caret-color: #fff;
454
+ resize: none;
455
+ outline: none;
456
+ overflow: hidden; /* textarea自身の内部スクロールを無効化し、親のスクロールに一本化 */
457
+ z-index: 1;
458
+ }
459
+
460
+ #editor::placeholder {
461
+ color: var(--text-dim);
462
+ }
463
+
464
+ #editor:disabled {
465
+ cursor: default;
466
+ }
467
+
468
+ .log-panel {
469
+ flex-shrink: 0;
470
+ max-height: 220px;
471
+ display: flex;
472
+ flex-direction: column;
473
+ border-top: 1px solid var(--border);
474
+ background: var(--bg-toolbar);
475
+ }
476
+
477
+ .log-panel-header {
478
+ display: flex;
479
+ align-items: center;
480
+ gap: 12px;
481
+ padding: 8px 16px;
482
+ border-bottom: 1px solid var(--border);
483
+ }
484
+
485
+ .log-panel-spacer {
486
+ flex: 1;
487
+ }
488
+
489
+ button.log-panel-tab {
490
+ background: transparent;
491
+ color: var(--text-dim);
492
+ padding: 4px 2px;
493
+ font-size: 12px;
494
+ text-transform: uppercase;
495
+ letter-spacing: 0.05em;
496
+ border-bottom: 2px solid transparent;
497
+ border-radius: 0;
498
+ }
499
+
500
+ button.log-panel-tab:hover:not(:disabled) {
501
+ background: transparent;
502
+ color: var(--text);
503
+ }
504
+
505
+ button.log-panel-tab.active {
506
+ color: #fff;
507
+ border-bottom-color: var(--accent);
508
+ }
509
+
510
+ button.build-refresh {
511
+ background: #555;
512
+ }
513
+
514
+ button.build-refresh:hover:not(:disabled) {
515
+ background: #6a6a6a;
516
+ }
517
+
518
+ .build-status {
519
+ min-width: 90px;
520
+ font-size: 12px;
521
+ text-align: right;
522
+ }
523
+
524
+ .build-status.success { color: var(--ok); }
525
+ .build-status.failed { color: var(--error); }
526
+
527
+ .build-options {
528
+ display: flex;
529
+ align-items: center;
530
+ gap: 16px;
531
+ padding: 8px 16px;
532
+ border-bottom: 1px solid var(--border);
533
+ font-size: 12px;
534
+ color: var(--text-dim);
535
+ }
536
+
537
+ .build-option {
538
+ display: flex;
539
+ align-items: center;
540
+ gap: 6px;
541
+ cursor: pointer;
542
+ }
543
+
544
+ .build-option select {
545
+ background: var(--bg);
546
+ color: var(--text);
547
+ border: 1px solid var(--border);
548
+ border-radius: 4px;
549
+ padding: 2px 6px;
550
+ font-size: 12px;
551
+ }
552
+
553
+ .build-log {
554
+ margin: 0;
555
+ padding: 12px 16px;
556
+ overflow: auto;
557
+ font-family: "SF Mono", Menlo, Consolas, "Courier New", monospace;
558
+ font-size: 12px;
559
+ line-height: 1.5;
560
+ white-space: pre-wrap;
561
+ word-break: break-all;
562
+ color: var(--text);
563
+ }
564
+
565
+ .dialog-overlay {
566
+ position: fixed;
567
+ inset: 0;
568
+ display: flex;
569
+ align-items: center;
570
+ justify-content: center;
571
+ background: rgba(0, 0, 0, 0.5);
572
+ z-index: 10;
573
+ }
574
+
575
+ .dialog {
576
+ min-width: 320px;
577
+ background: var(--bg-toolbar);
578
+ border: 1px solid var(--border);
579
+ border-radius: 6px;
580
+ box-shadow: 0 8px 24px rgba(0, 0, 0, 0.4);
581
+ }
582
+
583
+ .dialog h2 {
584
+ font-size: 14px;
585
+ margin: 0;
586
+ padding: 16px 16px 12px;
587
+ }
588
+
589
+ .settings-dialog .build-options {
590
+ border-bottom: none;
591
+ flex-direction: column;
592
+ align-items: flex-start;
593
+ gap: 12px;
594
+ }
595
+
596
+ .build-option-note {
597
+ max-width: 420px;
598
+ line-height: 1.5;
599
+ }
600
+
601
+ .dialog-actions {
602
+ display: flex;
603
+ justify-content: flex-end;
604
+ gap: 8px;
605
+ padding: 12px 16px 16px;
606
+ }
607
+
608
+ button.dialog-cancel {
609
+ background: #555;
610
+ }
611
+
612
+ button.dialog-cancel:hover:not(:disabled) {
613
+ background: #6a6a6a;
614
+ }
615
+
616
+ .platform-target {
617
+ font-size: 12px;
618
+ color: var(--text-dim);
619
+ }
620
+
621
+ .install-panel {
622
+ flex-shrink: 0;
623
+ display: flex;
624
+ flex-direction: column;
625
+ gap: 8px;
626
+ border-top: 1px solid var(--border);
627
+ background: var(--bg-toolbar);
628
+ padding: 8px 16px 12px;
629
+ }
630
+
631
+ .install-panel-header {
632
+ display: flex;
633
+ align-items: center;
634
+ gap: 12px;
635
+ }
636
+
637
+ .install-panel-header h1 {
638
+ font-size: 12px;
639
+ text-transform: uppercase;
640
+ letter-spacing: 0.05em;
641
+ color: var(--text-dim);
642
+ margin: 0;
643
+ flex: 1;
644
+ }
645
+
646
+ .install-hint {
647
+ margin: 0;
648
+ font-size: 12px;
649
+ color: var(--text-dim);
650
+ }
651
+
652
+ /* esp-web-install-button 自体はShadow DOM内の"Connect"ボタンを描画するが、
653
+ ここでは slot="activate" で差し込んだ通常の <button> を使っているので、
654
+ button { ... } の共通スタイルがそのまま当たる */
655
+ esp-web-install-button {
656
+ align-self: flex-start;
657
+ }
658
+
659
+ /*
660
+ ファイルメニュー(menu_bar.rb)。トグルボタン+絶対配置のドロップダウンという
661
+ 一番シンプルな構成にしてある(他のダイアログと同じく、外側クリックでの
662
+ 自動クローズは実装していない。設定ダイアログ等も同じ割り切り)。
663
+ */
664
+ .file-menu {
665
+ position: relative;
666
+ }
667
+
668
+ .file-menu-toggle {
669
+ background: transparent;
670
+ color: var(--text);
671
+ border: 1px solid var(--border);
672
+ padding: 6px 12px;
673
+ }
674
+
675
+ .file-menu-toggle:hover:not(:disabled) {
676
+ background: var(--bg);
677
+ }
678
+
679
+ .file-menu-dropdown {
680
+ position: absolute;
681
+ top: calc(100% + 4px);
682
+ left: 0;
683
+ min-width: 190px;
684
+ display: flex;
685
+ flex-direction: column;
686
+ gap: 2px;
687
+ padding: 4px;
688
+ background: var(--bg-toolbar);
689
+ border: 1px solid var(--border);
690
+ border-radius: 6px;
691
+ box-shadow: 0 8px 24px rgba(0, 0, 0, 0.4);
692
+ z-index: 20;
693
+ }
694
+
695
+ .file-menu-item {
696
+ background: transparent;
697
+ color: var(--text);
698
+ text-align: left;
699
+ padding: 8px 10px;
700
+ border-radius: 4px;
701
+ font-size: 13px;
702
+ }
703
+
704
+ .file-menu-item:hover:not(:disabled) {
705
+ background: var(--accent);
706
+ }
707
+
708
+ /*
709
+ ファイルツリー(tree_view.rb)の右クリックコンテキストメニュー。
710
+ 全画面の透明なオーバーレイ(.context-menu-overlay)でメニュー外への
711
+ クリック/右クリックを拾って閉じ、本体(.context-menu)は右クリックした
712
+ 座標にposition: fixedで直接置く(editor_app.rbのrender_tree_context_menu参照)。
713
+ */
714
+ .context-menu-overlay {
715
+ position: fixed;
716
+ inset: 0;
717
+ z-index: 25;
718
+ }
719
+
720
+ .context-menu {
721
+ position: fixed;
722
+ min-width: 160px;
723
+ display: flex;
724
+ flex-direction: column;
725
+ gap: 2px;
726
+ padding: 4px;
727
+ background: var(--bg-toolbar);
728
+ border: 1px solid var(--border);
729
+ border-radius: 6px;
730
+ box-shadow: 0 8px 24px rgba(0, 0, 0, 0.4);
731
+ }
732
+
733
+ .context-menu-item {
734
+ background: transparent;
735
+ color: var(--text);
736
+ text-align: left;
737
+ padding: 8px 10px;
738
+ border-radius: 4px;
739
+ font-size: 13px;
740
+ }
741
+
742
+ .context-menu-item:hover:not(:disabled) {
743
+ background: var(--accent);
744
+ }
745
+
746
+ /* PromptDialog(新しいプロジェクト/mrbgemを追加/新規ファイル、共通のダイアログ) */
747
+ .prompt-field {
748
+ display: flex;
749
+ flex-direction: column;
750
+ gap: 6px;
751
+ padding: 0 16px;
752
+ font-size: 12px;
753
+ color: var(--text-dim);
754
+ }
755
+
756
+ .prompt-field input {
757
+ background: var(--bg);
758
+ color: var(--text);
759
+ border: 1px solid var(--border);
760
+ border-radius: 4px;
761
+ padding: 6px 8px;
762
+ font-size: 13px;
763
+ }
764
+
765
+ .prompt-error {
766
+ padding: 8px 16px 0;
767
+ font-size: 12px;
768
+ color: var(--error);
769
+ }
770
+
771
+ /* DirectoryBrowserDialog(「ワークスペースを開く」のディレクトリ選択UI) */
772
+ .directory-browser-dialog {
773
+ width: 460px;
774
+ max-width: calc(100vw - 32px);
775
+ }
776
+
777
+ .directory-browser-breadcrumb {
778
+ display: flex;
779
+ flex-wrap: wrap;
780
+ align-items: center;
781
+ gap: 2px;
782
+ padding: 0 16px 8px;
783
+ font-size: 12px;
784
+ color: var(--text-dim);
785
+ }
786
+
787
+ .breadcrumb-segment {
788
+ cursor: pointer;
789
+ padding: 2px 4px;
790
+ border-radius: 3px;
791
+ }
792
+
793
+ .breadcrumb-segment:hover {
794
+ background: var(--bg);
795
+ color: var(--text);
796
+ }
797
+
798
+ .breadcrumb-current {
799
+ cursor: default;
800
+ color: var(--text);
801
+ font-weight: 600;
802
+ }
803
+
804
+ .breadcrumb-current:hover {
805
+ background: transparent;
806
+ }
807
+
808
+ .breadcrumb-sep {
809
+ color: var(--text-dim);
810
+ }
811
+
812
+ .directory-browser-toolbar {
813
+ display: flex;
814
+ justify-content: space-between;
815
+ gap: 8px;
816
+ padding: 0 16px 8px;
817
+ }
818
+
819
+ .directory-browser-list {
820
+ margin: 0 16px;
821
+ max-height: 260px;
822
+ overflow-y: auto;
823
+ border: 1px solid var(--border);
824
+ border-radius: 4px;
825
+ background: var(--bg);
826
+ }
827
+
828
+ .directory-browser-message {
829
+ padding: 12px;
830
+ font-size: 12px;
831
+ color: var(--text-dim);
832
+ }
833
+
834
+ .directory-browser-item {
835
+ display: flex;
836
+ align-items: center;
837
+ gap: 8px;
838
+ padding: 7px 10px;
839
+ font-size: 13px;
840
+ cursor: pointer;
841
+ }
842
+
843
+ .directory-browser-item:hover {
844
+ background: var(--bg-toolbar);
845
+ }
846
+
847
+ .directory-browser-item-icon {
848
+ font-size: 13px;
849
+ }
850
+
851
+ .directory-browser-create {
852
+ display: flex;
853
+ flex-wrap: wrap;
854
+ align-items: center;
855
+ gap: 6px;
856
+ padding: 10px 16px 0;
857
+ }
858
+
859
+ .directory-browser-create input {
860
+ flex: 1;
861
+ min-width: 160px;
862
+ background: var(--bg);
863
+ color: var(--text);
864
+ border: 1px solid var(--border);
865
+ border-radius: 4px;
866
+ padding: 6px 8px;
867
+ font-size: 13px;
868
+ }
869
+
870
+ /* Prismのトークンカラー(one-dark寄りのシンプルな配色) */
871
+ .token.comment { color: #6a9955; font-style: italic; }
872
+ .token.string,
873
+ .token.char { color: #ce9178; }
874
+ .token.number,
875
+ .token.boolean { color: #b5cea8; }
876
+ .token.keyword,
877
+ .token.builtin { color: #c586c0; }
878
+ .token.function { color: #dcdcaa; }
879
+ .token.class-name { color: #4ec9b0; }
880
+ .token.symbol,
881
+ .token.variable { color: #9cdcfe; }
882
+ .token.operator,
883
+ .token.punctuation { color: #d4d4d4; }
884
+ .token.regex { color: #d16969; }
885
+ .token.property,
886
+ .token.macro { color: #569cd6; }