mudlet-map-editor 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.
Files changed (54) hide show
  1. package/README.md +77 -0
  2. package/dist-lib/App.d.ts +5 -0
  3. package/dist-lib/components/AreaManagerModal.d.ts +8 -0
  4. package/dist-lib/components/ContextMenu.d.ts +8 -0
  5. package/dist-lib/components/DropdownSelect.d.ts +15 -0
  6. package/dist-lib/components/EnvManagerModal.d.ts +8 -0
  7. package/dist-lib/components/EnvPicker.d.ts +13 -0
  8. package/dist-lib/components/HelpModal.d.ts +10 -0
  9. package/dist-lib/components/RoomPanel.d.ts +15 -0
  10. package/dist-lib/components/SessionsPanel.d.ts +1 -0
  11. package/dist-lib/components/SidePanel.d.ts +10 -0
  12. package/dist-lib/components/SwatchPalette.d.ts +6 -0
  13. package/dist-lib/components/Toolbar.d.ts +6 -0
  14. package/dist-lib/components/UrlLoadModal.d.ts +4 -0
  15. package/dist-lib/components/icons.d.ts +7 -0
  16. package/dist-lib/components/panelShared.d.ts +27 -0
  17. package/dist-lib/components/panels/CustomLinePanel.d.ts +20 -0
  18. package/dist-lib/components/panels/ExitPanel.d.ts +15 -0
  19. package/dist-lib/components/panels/HistoryPanel.d.ts +8 -0
  20. package/dist-lib/components/panels/LabelPanel.d.ts +13 -0
  21. package/dist-lib/components/panels/MapPanel.d.ts +8 -0
  22. package/dist-lib/editor/commands.d.ts +30 -0
  23. package/dist-lib/editor/coords.d.ts +6 -0
  24. package/dist-lib/editor/effects/ConnectHandlesEffect.d.ts +21 -0
  25. package/dist-lib/editor/effects/CustomLinePreviewEffect.d.ts +19 -0
  26. package/dist-lib/editor/effects/GridOverlayEffect.d.ts +27 -0
  27. package/dist-lib/editor/effects/HoverHaloEffect.d.ts +19 -0
  28. package/dist-lib/editor/effects/LabelHaloEffect.d.ts +25 -0
  29. package/dist-lib/editor/effects/MarqueeEffect.d.ts +11 -0
  30. package/dist-lib/editor/effects/RubberBandEffect.d.ts +17 -0
  31. package/dist-lib/editor/effects/SelectedLinkEffect.d.ts +17 -0
  32. package/dist-lib/editor/effects/SelectionHaloEffect.d.ts +20 -0
  33. package/dist-lib/editor/effects/SnapIndicatorEffect.d.ts +14 -0
  34. package/dist-lib/editor/hitTest.d.ts +100 -0
  35. package/dist-lib/editor/labelPixmap.d.ts +12 -0
  36. package/dist-lib/editor/loadFile.d.ts +2 -0
  37. package/dist-lib/editor/mapBytes.d.ts +1 -0
  38. package/dist-lib/editor/mapHelpers.d.ts +17 -0
  39. package/dist-lib/editor/plugin.d.ts +20 -0
  40. package/dist-lib/editor/pointerController.d.ts +2 -0
  41. package/dist-lib/editor/reader/EditorMapReader.d.ts +175 -0
  42. package/dist-lib/editor/scene.d.ts +22 -0
  43. package/dist-lib/editor/session.d.ts +19 -0
  44. package/dist-lib/editor/store.d.ts +98 -0
  45. package/dist-lib/editor/tools.d.ts +52 -0
  46. package/dist-lib/editor/types.d.ts +523 -0
  47. package/dist-lib/index.d.ts +5 -0
  48. package/dist-lib/index.js +11029 -0
  49. package/dist-lib/main.d.ts +1 -0
  50. package/dist-lib/mapIO.d.ts +6 -0
  51. package/dist-lib/platform.d.ts +2 -0
  52. package/dist-lib/shims/fs-stub.d.ts +7 -0
  53. package/dist-lib/styles.css +3476 -0
  54. package/package.json +45 -0
@@ -0,0 +1,3476 @@
1
+ * { box-sizing: border-box; }
2
+
3
+ a { color: rgba(143, 184, 255, 0.85); text-decoration: none; }
4
+ a:hover { color: rgba(143, 184, 255, 1); text-decoration: underline; }
5
+
6
+ * {
7
+ scrollbar-width: thin;
8
+ scrollbar-color: rgba(143, 184, 255, 0.15) transparent;
9
+ }
10
+ *::-webkit-scrollbar { width: 5px; height: 5px; }
11
+ *::-webkit-scrollbar-track { background: transparent; }
12
+ *::-webkit-scrollbar-thumb {
13
+ background: rgba(143, 184, 255, 0.15);
14
+ border-radius: 3px;
15
+ }
16
+ *::-webkit-scrollbar-thumb:hover { background: rgba(143, 184, 255, 0.28); }
17
+ *::-webkit-scrollbar-corner { background: transparent; }
18
+
19
+ input[type="checkbox"] {
20
+ -webkit-appearance: none;
21
+ appearance: none;
22
+ width: 14px;
23
+ height: 14px;
24
+ flex-shrink: 0;
25
+ border: 1px solid rgba(143, 184, 255, 0.2);
26
+ border-radius: 3px;
27
+ background: rgba(10, 14, 22, 0.7);
28
+ cursor: pointer;
29
+ vertical-align: middle;
30
+ transition: border-color 0.15s, background 0.15s, box-shadow 0.15s;
31
+ position: relative;
32
+ }
33
+ input[type="checkbox"]:hover {
34
+ border-color: rgba(143, 184, 255, 0.4);
35
+ background: rgba(20, 30, 50, 0.8);
36
+ }
37
+ input[type="checkbox"]:focus-visible {
38
+ outline: none;
39
+ box-shadow: 0 0 0 2px rgba(52, 100, 168, 0.45);
40
+ }
41
+ input[type="checkbox"]:checked {
42
+ background: rgba(52, 100, 168, 0.85);
43
+ border-color: rgba(52, 100, 168, 0.9);
44
+ background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 12'%3E%3Cpolyline points='2,6.5 4.5,9 10,3' fill='none' stroke='%23fff' stroke-width='1.8' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E");
45
+ background-size: 10px 10px;
46
+ background-repeat: no-repeat;
47
+ background-position: center;
48
+ }
49
+ input[type="checkbox"]:checked:hover {
50
+ background-color: rgba(74, 128, 192, 0.9);
51
+ border-color: rgba(74, 128, 192, 1);
52
+ }
53
+ input[type="checkbox"]:disabled {
54
+ opacity: 0.35;
55
+ cursor: not-allowed;
56
+ }
57
+
58
+ input[type="color"] {
59
+ -webkit-appearance: none;
60
+ -moz-appearance: none;
61
+ appearance: none;
62
+ border: 1px solid rgba(143, 184, 255, 0.2);
63
+ border-radius: 4px;
64
+ padding: 0;
65
+ background: transparent;
66
+ cursor: pointer;
67
+ overflow: hidden;
68
+ height: 24px;
69
+ width: 40px;
70
+ }
71
+ input[type="color"]::-webkit-color-swatch-wrapper { padding: 0; }
72
+ input[type="color"]::-webkit-color-swatch { border: none; border-radius: 3px; }
73
+ input[type="color"]::-moz-color-swatch { border: none; border-radius: 3px; }
74
+
75
+ input[type="range"] {
76
+ -webkit-appearance: none;
77
+ appearance: none;
78
+ height: 4px;
79
+ border-radius: 2px;
80
+ background: rgba(143, 184, 255, 0.2);
81
+ outline: none;
82
+ padding: 0;
83
+ margin: 0;
84
+ cursor: pointer;
85
+ }
86
+ input[type="range"]::-webkit-slider-thumb {
87
+ -webkit-appearance: none;
88
+ appearance: none;
89
+ width: 14px;
90
+ height: 14px;
91
+ border-radius: 50%;
92
+ background: #00e5ff;
93
+ cursor: pointer;
94
+ }
95
+ input[type="range"]::-moz-range-thumb {
96
+ width: 14px;
97
+ height: 14px;
98
+ border: none;
99
+ border-radius: 50%;
100
+ background: #00e5ff;
101
+ cursor: pointer;
102
+ }
103
+
104
+ html, body, #root {
105
+ margin: 0;
106
+ padding: 0;
107
+ height: 100%;
108
+ background: #080c14;
109
+ background-image:
110
+ radial-gradient(ellipse 80% 60% at 20% 0%, rgba(30, 53, 83, 0.35) 0%, transparent 60%),
111
+ radial-gradient(ellipse 60% 80% at 80% 100%, rgba(18, 30, 60, 0.3) 0%, transparent 55%),
112
+ linear-gradient(160deg, #0a0d16 0%, #080c14 50%, #06090f 100%);
113
+ color: #e6e9ef;
114
+ font-family: 'Montserrat', -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif;
115
+ }
116
+
117
+ .app {
118
+ position: relative;
119
+ height: 100%;
120
+ }
121
+
122
+ #logo {
123
+ height: 46px;
124
+ vertical-align: middle;
125
+ margin: -10px;
126
+ opacity: 0.8;
127
+ }
128
+
129
+ .toolbar {
130
+ position: absolute;
131
+ top: 12px;
132
+ left: 12px;
133
+ right: 12px;
134
+ display: flex;
135
+ flex-direction: column;
136
+ background: rgba(30, 42, 62, 0.52);
137
+ backdrop-filter: blur(16px) saturate(1.8) brightness(0.4);
138
+ border: 1px solid rgba(143, 184, 255, 0.18);
139
+ border-radius: 12px;
140
+ box-shadow: 0 4px 24px rgba(0,0,0,0.35), inset 0 1px 0 rgba(255,255,255,0.08);
141
+ z-index: 9;
142
+ overflow: visible;
143
+ }
144
+
145
+ .toolbar-row {
146
+ display: flex;
147
+ align-items: center;
148
+ gap: 8px;
149
+ padding: 8px 14px;
150
+ }
151
+
152
+ .toolbar-row-header {
153
+ min-height: 44px;
154
+ }
155
+
156
+ .toolbar-row-tools {
157
+ border-top: 1px solid rgba(143, 184, 255, 0.08);
158
+ padding: 4px 14px;
159
+ gap: 6px;
160
+ }
161
+
162
+
163
+ .toolbar h1 {
164
+ margin: 0 8px 0 0;
165
+ font-size: 11px;
166
+ font-weight: 600;
167
+ letter-spacing: 0.08em;
168
+ text-transform: uppercase;
169
+ color: #8fb8ff;
170
+ white-space: nowrap;
171
+ padding: 6px 12px;
172
+ text-shadow: 0 0 20px rgba(143, 184, 255, 0.4);
173
+ transition: text-shadow 0.2s;
174
+ }
175
+
176
+ .toolbar h1:hover {
177
+ text-shadow: 0 0 12px rgba(143, 184, 255, 0.9), 0 0 28px rgba(143, 184, 255, 0.5);
178
+ }
179
+
180
+ .toolbar-sep {
181
+ width: 1px;
182
+ height: 22px;
183
+ background: rgba(143, 184, 255, 0.1);
184
+ margin: 0 4px;
185
+ }
186
+
187
+ .toolbar button,
188
+ .toolbar select,
189
+ .toolbar label.file-button {
190
+ background: rgba(31, 42, 60, 0.6);
191
+ color: #e6e9ef;
192
+ border: 1px solid rgba(143, 184, 255, 0.12);
193
+ padding: 6px 12px;
194
+ border-radius: 5px;
195
+ cursor: pointer;
196
+ font-size: 13px;
197
+ line-height: 1;
198
+ font-family: inherit;
199
+ backdrop-filter: blur(8px);
200
+ transition: background 0.15s, border-color 0.15s, box-shadow 0.15s;
201
+ display: inline-flex;
202
+ align-items: center;
203
+ gap: 5px;
204
+ }
205
+
206
+ .toolbar select option,
207
+ .side-panel select option,
208
+ .cl-form select option,
209
+ .area-move-row select option {
210
+ background: #0e1520;
211
+ color: #e6e9ef;
212
+ }
213
+
214
+ .toolbar button:hover:not(:disabled),
215
+ .toolbar label.file-button:hover {
216
+ background: rgba(52, 100, 168, 0.3);
217
+ border-color: rgba(143, 184, 255, 0.25);
218
+ box-shadow: 0 0 12px rgba(143, 184, 255, 0.08);
219
+ }
220
+
221
+ .toolbar button:disabled {
222
+ opacity: 0.35;
223
+ cursor: not-allowed;
224
+ }
225
+
226
+ .toolbar .tool-group {
227
+ display: flex;
228
+ gap: 2px;
229
+ padding: 2px;
230
+ background: rgba(6, 9, 16, 0.5);
231
+ border: 1px solid rgba(143, 184, 255, 0.08);
232
+ border-radius: 6px;
233
+ backdrop-filter: blur(8px);
234
+ }
235
+
236
+ .toolbar .tool-btn {
237
+ display: inline-flex;
238
+ align-items: center;
239
+ gap: 6px;
240
+ background: transparent;
241
+ border: 1px solid transparent;
242
+ padding: 5px 10px;
243
+ border-radius: 4px;
244
+ transition: background 0.15s, border-color 0.15s;
245
+ }
246
+
247
+ .toolbar .tool-btn.active {
248
+ background: rgba(30, 53, 83, 0.7);
249
+ border-color: rgba(52, 100, 168, 0.6);
250
+ color: #cfe1ff;
251
+ box-shadow: 0 0 12px rgba(52, 100, 168, 0.2), inset 0 1px 0 rgba(255,255,255,0.05);
252
+ }
253
+
254
+ .toolbar .tool-key {
255
+ display: inline-flex;
256
+ align-items: center;
257
+ justify-content: center;
258
+ font-size: 10px;
259
+ line-height: 1;
260
+ color: #6a7588;
261
+ background: rgba(10, 14, 22, 0.7);
262
+ border: 1px solid rgba(143, 184, 255, 0.1);
263
+ padding: 2px 5px;
264
+ border-radius: 3px;
265
+ font-family: ui-monospace, Consolas, monospace;
266
+ align-self: center;
267
+ }
268
+
269
+ .toolbar .tool-btn.active .tool-key {
270
+ background: rgba(6, 9, 16, 0.8);
271
+ color: #8fb8ff;
272
+ border-color: rgba(52, 100, 168, 0.5);
273
+ }
274
+
275
+ /* ── Custom DropdownSelect ── */
276
+ .dropdown-select {
277
+ position: relative;
278
+ display: inline-flex;
279
+ }
280
+
281
+ .dropdown-trigger {
282
+ display: inline-flex;
283
+ align-items: center;
284
+ gap: 6px;
285
+ background: rgba(10, 14, 22, 0.55);
286
+ border: 1px solid rgba(143, 184, 255, 0.14);
287
+ border-radius: 7px;
288
+ padding: 0 10px 0 0;
289
+ height: 30px;
290
+ cursor: pointer;
291
+ font-size: 13px;
292
+ color: #e6e9ef;
293
+ font-family: inherit;
294
+ transition: border-color 0.15s, background 0.15s;
295
+ white-space: nowrap;
296
+ overflow: hidden;
297
+ }
298
+ .dropdown-trigger:hover,
299
+ .dropdown-trigger.open {
300
+ background: rgba(20, 28, 46, 0.7);
301
+ border-color: rgba(143, 184, 255, 0.28);
302
+ }
303
+
304
+ .dropdown-trigger-label {
305
+ font-size: 10px;
306
+ text-transform: uppercase;
307
+ letter-spacing: 0.06em;
308
+ line-height: 1;
309
+ color: #6a7588;
310
+ padding: 0 8px;
311
+ height: 100%;
312
+ display: flex;
313
+ align-items: center;
314
+ border-right: 1px solid rgba(143, 184, 255, 0.08);
315
+ flex-shrink: 0;
316
+ }
317
+
318
+ .dropdown-trigger-value {
319
+ flex: 1;
320
+ min-width: 0;
321
+ padding-left: 8px;
322
+ overflow: hidden;
323
+ text-overflow: ellipsis;
324
+ white-space: nowrap;
325
+ font-size: 10px;
326
+ text-transform: uppercase;
327
+ letter-spacing: 0.06em;
328
+ text-align: left;
329
+ }
330
+
331
+ .dropdown-arrow {
332
+ font-size: 9px;
333
+ color: #6a7588;
334
+ flex-shrink: 0;
335
+ }
336
+
337
+ .dropdown-backdrop {
338
+ position: fixed;
339
+ inset: 0;
340
+ z-index: 999;
341
+ }
342
+
343
+ .dropdown-list {
344
+ z-index: 1000;
345
+ background: rgba(12, 18, 30, 0.96);
346
+ backdrop-filter: blur(20px);
347
+ border: 1px solid rgba(143, 184, 255, 0.14);
348
+ border-radius: 10px;
349
+ box-shadow: 0 12px 40px rgba(0,0,0,0.7), inset 0 1px 0 rgba(255,255,255,0.05);
350
+ overflow: hidden;
351
+ display: flex;
352
+ flex-direction: column;
353
+ max-height: 320px;
354
+ }
355
+
356
+ .dropdown-search-wrap {
357
+ padding: 8px 8px 6px;
358
+ border-bottom: 1px solid rgba(143, 184, 255, 0.07);
359
+ flex-shrink: 0;
360
+ }
361
+
362
+ .dropdown-search {
363
+ width: 100%;
364
+ background: rgba(8, 12, 20, 0.7);
365
+ border: 1px solid rgba(143, 184, 255, 0.12);
366
+ border-radius: 6px;
367
+ color: #e6e9ef;
368
+ font-size: 12px;
369
+ font-family: inherit;
370
+ padding: 5px 9px;
371
+ outline: none;
372
+ box-sizing: border-box;
373
+ transition: border-color 0.15s;
374
+ }
375
+ .dropdown-search:focus {
376
+ border-color: rgba(52, 100, 168, 0.6);
377
+ }
378
+ .dropdown-search::placeholder { color: #4a5568; }
379
+
380
+ .dropdown-options {
381
+ overflow-y: auto;
382
+ padding: 5px;
383
+ display: flex;
384
+ flex-direction: column;
385
+ gap: 2px;
386
+ }
387
+
388
+ .dropdown-option {
389
+ display: block;
390
+ width: 100%;
391
+ text-align: left;
392
+ background: transparent;
393
+ border: 1px solid transparent;
394
+ border-radius: 6px;
395
+ color: #c8d0dc;
396
+ font-size: 13px;
397
+ font-family: inherit;
398
+ padding: 6px 10px;
399
+ cursor: pointer;
400
+ transition: background 0.1s, color 0.1s, border-color 0.1s;
401
+ white-space: nowrap;
402
+ }
403
+ .dropdown-option:hover {
404
+ background: rgba(52, 100, 168, 0.2);
405
+ color: #e6e9ef;
406
+ border-color: rgba(143, 184, 255, 0.1);
407
+ }
408
+ .dropdown-option.selected {
409
+ background: rgba(30, 53, 83, 0.7);
410
+ border-color: rgba(52, 100, 168, 0.5);
411
+ color: #cfe1ff;
412
+ }
413
+ .dropdown-option.highlighted {
414
+ background: rgba(52, 100, 168, 0.25);
415
+ color: #e6e9ef;
416
+ border-color: rgba(143, 184, 255, 0.15);
417
+ }
418
+ .dropdown-option.highlighted.selected {
419
+ background: rgba(52, 100, 168, 0.45);
420
+ border-color: rgba(52, 100, 168, 0.7);
421
+ color: #cfe1ff;
422
+ }
423
+
424
+ .dropdown-empty {
425
+ color: #4a5568;
426
+ font-size: 12px;
427
+ padding: 8px 10px;
428
+ text-align: center;
429
+ }
430
+
431
+ /* keep legacy .toolbar-select-group for zlevel wrapper */
432
+ .toolbar-select-label {
433
+ font-size: 10px;
434
+ text-transform: uppercase;
435
+ letter-spacing: 0.06em;
436
+ color: #6a7588;
437
+ padding: 0 8px;
438
+ white-space: nowrap;
439
+ border-right: 1px solid rgba(143, 184, 255, 0.08);
440
+ line-height: 30px;
441
+ flex-shrink: 0;
442
+ }
443
+
444
+
445
+ .toolbar-row-tools button,
446
+ .toolbar-row-tools label.file-button {
447
+ font-size: 12px;
448
+ padding: 3px 9px;
449
+ }
450
+
451
+ .toolbar-row-tools .tool-btn {
452
+ padding: 3px 8px;
453
+ font-size: 12px;
454
+ }
455
+
456
+ .toolbar-row-tools .tool-key {
457
+ font-size: 9px;
458
+ padding: 2px 4px;
459
+ }
460
+
461
+ .toolbar-snap-btn {
462
+ background: rgba(10, 14, 22, 0.5);
463
+ border: 1px solid rgba(143, 184, 255, 0.12) !important;
464
+ border-radius: 6px !important;
465
+ padding: 3px 10px !important;
466
+ font-size: 12px;
467
+ color: #6a7588;
468
+ cursor: pointer;
469
+ transition: color 0.15s, background 0.15s, border-color 0.15s !important;
470
+ }
471
+ .toolbar-snap-btn:hover { color: #cfd6e0; }
472
+
473
+ .toolbar-pending-hint {
474
+ margin-left: 8px;
475
+ font-size: 11px;
476
+ color: #8fb8ff;
477
+ opacity: 0.85;
478
+ white-space: nowrap;
479
+ pointer-events: none;
480
+ }
481
+ .toolbar-snap-btn.active {
482
+ background: rgba(30, 53, 83, 0.7) !important;
483
+ border-color: rgba(52, 100, 168, 0.6) !important;
484
+ color: #cfe1ff !important;
485
+ box-shadow: 0 0 12px rgba(52, 100, 168, 0.2), inset 0 1px 0 rgba(255,255,255,0.05) !important;
486
+ }
487
+
488
+ .toolbar-goto {
489
+ display: inline-flex;
490
+ align-items: center;
491
+ background: rgba(10, 14, 22, 0.55);
492
+ border: 1px solid rgba(143, 184, 255, 0.14);
493
+ border-radius: 7px;
494
+ height: 30px;
495
+ overflow: hidden;
496
+ transition: border-color 0.15s, background 0.15s;
497
+ }
498
+ .toolbar-goto:focus-within {
499
+ background: rgba(20, 28, 46, 0.7);
500
+ border-color: rgba(143, 184, 255, 0.28);
501
+ }
502
+
503
+ .toolbar-goto-label {
504
+ font-size: 10px;
505
+ text-transform: uppercase;
506
+ letter-spacing: 0.06em;
507
+ color: #6a7588;
508
+ padding: 0 8px;
509
+ height: 100%;
510
+ display: flex;
511
+ align-items: center;
512
+ border-right: 1px solid rgba(143, 184, 255, 0.08);
513
+ flex-shrink: 0;
514
+ white-space: nowrap;
515
+ }
516
+
517
+ .toolbar-goto-input {
518
+ width: 56px;
519
+ background: transparent;
520
+ border: none;
521
+ padding: 0 8px;
522
+ font-size: 10px;
523
+ font-family: inherit;
524
+ text-transform: uppercase;
525
+ letter-spacing: 0.06em;
526
+ color: #e6e9ef;
527
+ outline: none;
528
+ appearance: textfield;
529
+ height: 100%;
530
+ }
531
+ .toolbar-goto-input::-webkit-inner-spin-button,
532
+ .toolbar-goto-input::-webkit-outer-spin-button { display: none; }
533
+ .toolbar-goto-input::placeholder { color: #4a5568; }
534
+
535
+ .toolbar-goto-btn {
536
+ height: 100%;
537
+ padding: 0 10px;
538
+ background: transparent;
539
+ border: none;
540
+ border-left: 1px solid rgba(143, 184, 255, 0.08);
541
+ border-radius: 0;
542
+ color: #6a7588;
543
+ font-size: 11px;
544
+ font-family: inherit;
545
+ cursor: pointer;
546
+ transition: color 0.15s, background 0.15s;
547
+ white-space: nowrap;
548
+ flex-shrink: 0;
549
+ }
550
+ .toolbar-goto-btn:hover:not(:disabled) {
551
+ color: #cfe1ff;
552
+ background: rgba(52, 100, 168, 0.2);
553
+ }
554
+ .toolbar-goto-btn:disabled {
555
+ opacity: 0.35;
556
+ cursor: not-allowed;
557
+ }
558
+
559
+ .toolbar .status {
560
+ font-size: 12px;
561
+ color: #8f97a6;
562
+ margin-left: auto;
563
+ padding-left: 12px;
564
+ display: flex;
565
+ flex-direction: column;
566
+ align-items: flex-end;
567
+ gap: 1px;
568
+ overflow: hidden;
569
+ min-width: 0;
570
+ }
571
+
572
+ .toolbar .status-file {
573
+ color: #6a7588;
574
+ font-size: 11px;
575
+ white-space: nowrap;
576
+ overflow: hidden;
577
+ text-overflow: ellipsis;
578
+ max-width: 280px;
579
+ }
580
+
581
+ .toolbar .status-action {
582
+ white-space: nowrap;
583
+ overflow: hidden;
584
+ text-overflow: ellipsis;
585
+ max-width: 280px;
586
+ }
587
+
588
+ .map-viewport {
589
+ position: absolute;
590
+ inset: 0;
591
+ background: #000;
592
+ }
593
+
594
+ .map-container {
595
+ position: absolute;
596
+ inset: 0;
597
+ outline: none;
598
+ user-select: none;
599
+ -webkit-user-select: none;
600
+ touch-action: none;
601
+ }
602
+
603
+ .empty-state {
604
+ position: absolute;
605
+ inset: 0;
606
+ display: flex;
607
+ flex-direction: column;
608
+ align-items: center;
609
+ justify-content: center;
610
+ text-align: center;
611
+ color: #55606f;
612
+ font-size: 14px;
613
+ pointer-events: none;
614
+ }
615
+
616
+ .empty-state-logo {
617
+ margin-top: 24px;
618
+ width: 150px;
619
+ opacity: 0.375;
620
+ }
621
+
622
+ .sessions-panel-overlay {
623
+ position: absolute;
624
+ top: 76px;
625
+ left: 0;
626
+ right: 0;
627
+ bottom: 0;
628
+ display: flex;
629
+ align-items: flex-start;
630
+ justify-content: center;
631
+ padding: 12px 16px 16px;
632
+ box-sizing: border-box;
633
+ pointer-events: none;
634
+ overflow: hidden;
635
+ }
636
+
637
+ .sessions-panel {
638
+ pointer-events: all;
639
+ background: rgba(14, 20, 35, 0.96);
640
+ border: 1px solid rgba(52, 100, 168, 0.4);
641
+ border-radius: 10px;
642
+ box-shadow: 0 8px 32px rgba(0,0,0,0.6);
643
+ padding: 20px;
644
+ min-width: 360px;
645
+ max-width: 520px;
646
+ width: 100%;
647
+ max-height: 100%;
648
+ overflow: hidden;
649
+ display: flex;
650
+ flex-direction: column;
651
+ gap: 14px;
652
+ }
653
+
654
+ .sessions-panel-header {
655
+ display: flex;
656
+ align-items: center;
657
+ justify-content: space-between;
658
+ font-size: 13px;
659
+ font-weight: 600;
660
+ color: #cfe1ff;
661
+ letter-spacing: 0.03em;
662
+ }
663
+
664
+ .sessions-delete-all {
665
+ font-size: 11px;
666
+ font-weight: 400;
667
+ padding: 3px 8px;
668
+ border-radius: 4px;
669
+ border: 1px solid rgba(168, 52, 52, 0.4);
670
+ background: rgba(168, 52, 52, 0.1);
671
+ color: #c97a7a;
672
+ cursor: pointer;
673
+ transition: background 0.15s;
674
+ }
675
+ .sessions-delete-all:hover {
676
+ background: rgba(168, 52, 52, 0.25);
677
+ }
678
+
679
+ .sessions-list {
680
+ display: flex;
681
+ flex-direction: column;
682
+ gap: 6px;
683
+ overflow-y: auto;
684
+ min-height: 0;
685
+ flex: 1 1 auto;
686
+ }
687
+
688
+ .session-item {
689
+ display: flex;
690
+ align-items: center;
691
+ gap: 10px;
692
+ padding: 9px 12px;
693
+ background: rgba(255,255,255,0.04);
694
+ border: 1px solid rgba(255,255,255,0.07);
695
+ border-radius: 6px;
696
+ }
697
+
698
+ .session-info {
699
+ flex: 1;
700
+ min-width: 0;
701
+ display: flex;
702
+ flex-direction: column;
703
+ gap: 2px;
704
+ }
705
+
706
+ .session-filename {
707
+ font-size: 12px;
708
+ color: #cfe1ff;
709
+ white-space: nowrap;
710
+ overflow: hidden;
711
+ text-overflow: ellipsis;
712
+ }
713
+
714
+ .session-meta {
715
+ font-size: 11px;
716
+ color: #6a8ab0;
717
+ }
718
+
719
+ .session-actions {
720
+ display: flex;
721
+ gap: 6px;
722
+ flex-shrink: 0;
723
+ }
724
+
725
+ .session-actions button {
726
+ padding: 3px 10px;
727
+ border-radius: 4px;
728
+ border: 1px solid rgba(52,100,168,0.5);
729
+ background: rgba(52,100,168,0.15);
730
+ color: #8ab4d8;
731
+ font-size: 11px;
732
+ cursor: pointer;
733
+ transition: background 0.15s;
734
+ }
735
+
736
+ .session-actions button:hover {
737
+ background: rgba(52,100,168,0.3);
738
+ }
739
+
740
+ .session-actions button.session-delete {
741
+ border-color: rgba(168,52,52,0.4);
742
+ background: rgba(168,52,52,0.1);
743
+ color: #c97a7a;
744
+ }
745
+
746
+ .session-actions button.session-delete:hover {
747
+ background: rgba(168,52,52,0.25);
748
+ }
749
+
750
+ .sessions-empty {
751
+ font-size: 12px;
752
+ color: #445566;
753
+ text-align: center;
754
+ padding: 8px 0;
755
+ }
756
+
757
+ .sessions-autodelete {
758
+ display: flex;
759
+ align-items: center;
760
+ justify-content: flex-end;
761
+ gap: 8px;
762
+ padding-top: 10px;
763
+ border-top: 1px solid rgba(255,255,255,0.06);
764
+ }
765
+
766
+ .sessions-autodelete-label {
767
+ display: flex;
768
+ align-items: center;
769
+ gap: 6px;
770
+ font-size: 11px;
771
+ color: #6a8ab0;
772
+ cursor: pointer;
773
+ user-select: none;
774
+ }
775
+
776
+
777
+ .sessions-autodelete-days {
778
+ width: 48px;
779
+ padding: 2px 6px;
780
+ background: rgba(255,255,255,0.05);
781
+ border: 1px solid rgba(52,100,168,0.35);
782
+ border-radius: 4px;
783
+ color: #8ab4d8;
784
+ font-size: 11px;
785
+ text-align: center;
786
+ }
787
+
788
+ .sessions-autodelete-days:disabled {
789
+ opacity: 0.35;
790
+ }
791
+
792
+ .sessions-autodelete-unit {
793
+ font-size: 11px;
794
+ color: #6a8ab0;
795
+ }
796
+
797
+ .sessions-panel-hint {
798
+ font-size: 11px;
799
+ color: #445566;
800
+ text-align: center;
801
+ }
802
+
803
+ .side-panel {
804
+ position: absolute;
805
+ top: 104px; /* below floating toolbar (12px offset + ~44px header row + ~32px tools row + 16px gap) */
806
+ right: 12px;
807
+ bottom: 12px;
808
+ width: 440px;
809
+ background: rgba(28, 40, 60, 0.52);
810
+ backdrop-filter: blur(16px) saturate(1.8) brightness(0.4);
811
+ border: 1px solid rgba(143, 184, 255, 0.18);
812
+ border-radius: 12px;
813
+ box-shadow: 0 4px 24px rgba(0,0,0,0.4), inset 0 1px 0 rgba(255,255,255,0.08);
814
+ padding: 0;
815
+ overflow: hidden;
816
+ font-size: 13px;
817
+ display: flex;
818
+ flex-direction: column;
819
+ z-index: 10;
820
+ }
821
+
822
+ .side-panel--collapsed {
823
+ width: 48px;
824
+ overflow: visible;
825
+ box-shadow: 0 4px 24px rgba(0,0,0,0.4);
826
+ }
827
+
828
+ .side-panel-collapse-btn {
829
+ display: flex;
830
+ align-items: center;
831
+ justify-content: center;
832
+ width: 100%;
833
+ padding: 10px 0 6px;
834
+ background: transparent;
835
+ border: none;
836
+ outline: none;
837
+ color: #6a7588;
838
+ cursor: pointer;
839
+ font-size: 11px;
840
+ flex-shrink: 0;
841
+ transition: color 0.15s;
842
+ }
843
+ .side-panel-collapse-btn:hover { color: #8fb8ff; }
844
+
845
+ .side-panel-tabs {
846
+ display: flex;
847
+ flex-wrap: wrap;
848
+ border-bottom: 1px solid rgba(143, 184, 255, 0.08);
849
+ flex-shrink: 0;
850
+ background: rgba(8, 12, 20, 0.5);
851
+ border-radius: 0;
852
+ }
853
+
854
+ .side-panel-tabs .side-panel-tab {
855
+ flex: 0 0 auto;
856
+ display: inline-flex;
857
+ align-items: center;
858
+ background: transparent;
859
+ border: none;
860
+ border-radius: 0;
861
+ border-bottom: 2px solid transparent;
862
+ color: #6a7588;
863
+ cursor: pointer;
864
+ font-size: 11px;
865
+ padding: 8px 12px;
866
+ text-transform: uppercase;
867
+ letter-spacing: 0.04em;
868
+ transition: color 0.15s, border-color 0.15s;
869
+ margin-bottom: -1px;
870
+ }
871
+
872
+ .side-panel-tab:hover {
873
+ color: #cfd6e0;
874
+ }
875
+
876
+ .side-panel-tab.active {
877
+ color: #8fb8ff;
878
+ border-bottom-color: #8fb8ff;
879
+ text-shadow: 0 0 16px rgba(143, 184, 255, 0.5);
880
+ }
881
+
882
+ /* Badge on tab buttons */
883
+ .tab-badge {
884
+ margin-left: 4px;
885
+ padding: 0 5px;
886
+ font-size: 10px;
887
+ line-height: 16px;
888
+ border-radius: 8px;
889
+ background: rgba(143, 184, 255, 0.15);
890
+ color: #8fb8ff;
891
+ font-weight: 600;
892
+ }
893
+ .side-panel-tab.active .tab-badge {
894
+ background: rgba(143, 184, 255, 0.25);
895
+ }
896
+
897
+ /* Collapse arrow button inside the tab bar */
898
+ .side-panel-tabs .side-panel-tab--collapse {
899
+ flex: 0 0 26px;
900
+ padding: 8px 0;
901
+ justify-content: center;
902
+ color: #4a5568;
903
+ letter-spacing: 0;
904
+ font-size: 10px;
905
+ border-left: 1px solid rgba(143, 184, 255, 0.07);
906
+ margin-left: auto;
907
+ }
908
+
909
+ /* Vertical tab strip (collapsed state) */
910
+ .side-panel-tabs--vert {
911
+ display: flex;
912
+ flex-direction: column;
913
+ border-bottom: none;
914
+ background: transparent;
915
+ width: 100%;
916
+ padding: 4px 0;
917
+ }
918
+ .side-panel-tabs--vert .side-panel-tab {
919
+ flex: 0 0 auto;
920
+ writing-mode: vertical-rl;
921
+ transform: rotate(180deg);
922
+ text-orientation: mixed;
923
+ padding: 14px 0;
924
+ margin-bottom: 0;
925
+ border-bottom: none;
926
+ border-left: 2px solid transparent;
927
+ border-right: none;
928
+ letter-spacing: 0.06em;
929
+ font-size: 10px;
930
+ width: 100%;
931
+ text-align: center;
932
+ }
933
+ .side-panel-tabs--vert .side-panel-tab.active {
934
+ color: #8fb8ff;
935
+ border-left-color: #8fb8ff;
936
+ text-shadow: 0 0 16px rgba(143, 184, 255, 0.5);
937
+ border-bottom-color: transparent;
938
+ }
939
+
940
+ .panel-content {
941
+ padding: 14px;
942
+ flex: 1;
943
+ overflow-y: auto;
944
+ min-height: 0;
945
+ }
946
+
947
+ .side-panel.empty {
948
+ color: #6a7588;
949
+ }
950
+
951
+ .side-panel h3 {
952
+ margin: 0 0 10px;
953
+ font-size: 12px;
954
+ color: #8fb8ff;
955
+ text-transform: uppercase;
956
+ letter-spacing: 0.05em;
957
+ font-weight: 600;
958
+ text-shadow: 0 0 12px rgba(143, 184, 255, 0.3);
959
+ }
960
+
961
+ .room-heading {
962
+ display: flex;
963
+ justify-content: space-between;
964
+ align-items: center;
965
+ }
966
+
967
+ .room-heading-right {
968
+ display: flex;
969
+ align-items: center;
970
+ gap: 4px;
971
+ }
972
+
973
+ .room-coords {
974
+ font-size: 11px;
975
+ color: #6a7588;
976
+ text-transform: none;
977
+ letter-spacing: 0;
978
+ font-weight: 400;
979
+ text-shadow: none;
980
+ }
981
+
982
+ .room-center-btn {
983
+ display: flex;
984
+ align-items: center;
985
+ justify-content: center;
986
+ padding: 2px 3px;
987
+ background: none;
988
+ border: 1px solid transparent;
989
+ border-radius: 3px;
990
+ color: #6a7588;
991
+ cursor: pointer;
992
+ line-height: 1;
993
+ transition: color 0.1s, border-color 0.1s, background 0.1s;
994
+ }
995
+ .room-center-btn:hover {
996
+ color: #b8c8e8;
997
+ border-color: #3a4560;
998
+ background: #1e2535;
999
+ }
1000
+
1001
+ .env-symbol-row {
1002
+ display: flex;
1003
+ gap: 8px;
1004
+ }
1005
+
1006
+ .env-symbol-row .field {
1007
+ flex: 1;
1008
+ min-width: 0;
1009
+ }
1010
+
1011
+ .env-field {
1012
+ flex: 1;
1013
+ min-width: 0;
1014
+ }
1015
+
1016
+ .symbol-row {
1017
+ display: flex;
1018
+ align-items: center;
1019
+ gap: 4px;
1020
+ }
1021
+
1022
+ .symbol-row input[type="text"],
1023
+ .symbol-row input:not([type]) {
1024
+ flex: 1;
1025
+ min-width: 0;
1026
+ }
1027
+
1028
+ .symbol-color-input {
1029
+ width: 28px;
1030
+ height: 24px;
1031
+ padding: 1px 2px;
1032
+ border: 1px solid #2a3550;
1033
+ border-radius: 3px;
1034
+ background: transparent;
1035
+ cursor: pointer;
1036
+ flex-shrink: 0;
1037
+ }
1038
+
1039
+ .symbol-color-clear {
1040
+ background: none;
1041
+ border: none;
1042
+ color: #7a8aaa;
1043
+ cursor: pointer;
1044
+ font-size: 14px;
1045
+ line-height: 1;
1046
+ padding: 0 2px;
1047
+ flex-shrink: 0;
1048
+ }
1049
+ .symbol-color-clear:hover { color: #e06060; }
1050
+
1051
+ .side-panel h4 {
1052
+ margin: 14px 0 6px;
1053
+ font-size: 11px;
1054
+ color: #8f97a6;
1055
+ text-transform: uppercase;
1056
+ letter-spacing: 0.05em;
1057
+ font-weight: 600;
1058
+ }
1059
+
1060
+ .side-panel p {
1061
+ margin: 6px 0;
1062
+ color: #8f97a6;
1063
+ }
1064
+
1065
+ .side-panel p.hint {
1066
+ font-size: 12px;
1067
+ }
1068
+
1069
+ .side-panel .hint-tool {
1070
+ margin-top: 10px;
1071
+ padding: 8px 10px;
1072
+ background: rgba(6, 9, 16, 0.6);
1073
+ border: 1px solid rgba(143, 184, 255, 0.07);
1074
+ border-radius: 5px;
1075
+ font-size: 11px;
1076
+ color: #cfd6e0;
1077
+ }
1078
+
1079
+ .side-panel .field {
1080
+ display: flex;
1081
+ flex-direction: column;
1082
+ gap: 4px;
1083
+ margin: 8px 0;
1084
+ }
1085
+
1086
+ .side-panel .field .label {
1087
+ font-size: 11px;
1088
+ color: #8f97a6;
1089
+ text-transform: uppercase;
1090
+ letter-spacing: 0.05em;
1091
+ }
1092
+
1093
+ .side-panel .field input,
1094
+ .side-panel .field textarea {
1095
+ background: rgba(6, 9, 16, 0.6);
1096
+ color: #e6e9ef;
1097
+ border: 1px solid rgba(143, 184, 255, 0.1);
1098
+ padding: 5px 8px;
1099
+ border-radius: 4px;
1100
+ font-size: 13px;
1101
+ font-family: inherit;
1102
+ transition: border-color 0.15s, box-shadow 0.15s;
1103
+ }
1104
+
1105
+ .side-panel .field input:focus,
1106
+ .side-panel .field textarea:focus {
1107
+ outline: none;
1108
+ border-color: rgba(52, 100, 168, 0.7);
1109
+ box-shadow: 0 0 0 2px rgba(52, 100, 168, 0.15);
1110
+ }
1111
+
1112
+ /* Inline field group: fields side-by-side with a button at the end */
1113
+ .side-panel .field-row {
1114
+ display: flex;
1115
+ gap: 8px;
1116
+ align-items: flex-end;
1117
+ margin: 8px 0 12px;
1118
+ }
1119
+
1120
+ .side-panel .field-row > .field {
1121
+ margin: 0;
1122
+ }
1123
+
1124
+ .side-panel .field-row > button {
1125
+ padding: 5px 8px;
1126
+ font-size: 12px;
1127
+ font-family: inherit;
1128
+ border: 1px solid #444;
1129
+ border-radius: 3px;
1130
+ cursor: pointer;
1131
+ white-space: nowrap;
1132
+ flex-shrink: 0;
1133
+ }
1134
+
1135
+ /* Checkbox row: horizontal, no separate section label */
1136
+ .side-panel .field.checkbox-field {
1137
+ flex-direction: row;
1138
+ align-items: center;
1139
+ gap: 8px;
1140
+ cursor: pointer;
1141
+ margin: 7px 0;
1142
+ }
1143
+
1144
+ .side-panel .field.checkbox-field input[type="checkbox"] {
1145
+ flex-shrink: 0;
1146
+ margin: 0;
1147
+ }
1148
+
1149
+ .side-panel .field.checkbox-field span {
1150
+ font-size: 13px;
1151
+ color: #e6e9ef;
1152
+ line-height: 1;
1153
+ }
1154
+
1155
+ .side-panel .readonly {
1156
+ color: #cfd6e0;
1157
+ padding: 5px 0;
1158
+ font-family: ui-monospace, Consolas, monospace;
1159
+ font-size: 12px;
1160
+ }
1161
+
1162
+ .exit-list {
1163
+ display: flex;
1164
+ flex-direction: column;
1165
+ gap: 3px;
1166
+ }
1167
+
1168
+ .exit-row {
1169
+ display: grid;
1170
+ grid-template-columns: 90px 20px 1fr;
1171
+ align-items: center;
1172
+ gap: 6px;
1173
+ font-family: ui-monospace, Consolas, monospace;
1174
+ font-size: 12px;
1175
+ padding: 4px 6px;
1176
+ background: rgba(6, 9, 16, 0.5);
1177
+ border: 1px solid rgba(143, 184, 255, 0.05);
1178
+ border-radius: 4px;
1179
+ }
1180
+
1181
+ .exit-row .dir {
1182
+ color: #8fb8ff;
1183
+ }
1184
+
1185
+ .exit-row .arrow {
1186
+ color: #55606f;
1187
+ }
1188
+
1189
+ .exit-row .exit-target {
1190
+ background: transparent;
1191
+ border: 1px solid rgba(143, 184, 255, 0.1);
1192
+ color: #e6e9ef;
1193
+ padding: 2px 6px;
1194
+ border-radius: 3px;
1195
+ cursor: pointer;
1196
+ font-size: 12px;
1197
+ font-family: inherit;
1198
+ text-align: left;
1199
+ transition: background 0.15s, border-color 0.15s;
1200
+ }
1201
+
1202
+ .exit-row .exit-target:hover {
1203
+ background: rgba(31, 42, 60, 0.6);
1204
+ border-color: rgba(143, 184, 255, 0.2);
1205
+ }
1206
+
1207
+ .exit-row.empty {
1208
+ color: #55606f;
1209
+ grid-template-columns: 1fr;
1210
+ text-align: center;
1211
+ background: transparent;
1212
+ border-color: transparent;
1213
+ }
1214
+
1215
+ .exit-row.special {
1216
+ grid-template-columns: 90px 20px 1fr 22px;
1217
+ }
1218
+
1219
+ .exit-row.with-line {
1220
+ grid-template-columns: 90px 20px 1fr 26px;
1221
+ }
1222
+
1223
+ .exit-row.special.with-line {
1224
+ grid-template-columns: 90px 20px 1fr 26px 22px;
1225
+ }
1226
+
1227
+ .exit-line-btn {
1228
+ display: inline-flex;
1229
+ align-items: center;
1230
+ justify-content: center;
1231
+ background: transparent;
1232
+ border: 1px solid rgba(143, 184, 255, 0.1);
1233
+ color: #6a7588;
1234
+ cursor: pointer;
1235
+ width: 22px;
1236
+ height: 20px;
1237
+ padding: 0;
1238
+ border-radius: 3px;
1239
+ font-size: 13px;
1240
+ line-height: 1;
1241
+ transition: color 0.15s, border-color 0.15s, background 0.15s;
1242
+ }
1243
+
1244
+ .exit-line-btn:hover {
1245
+ color: #cfe1ff;
1246
+ border-color: rgba(52, 100, 168, 0.6);
1247
+ background: rgba(30, 53, 83, 0.4);
1248
+ }
1249
+
1250
+ .exit-line-btn.has-line {
1251
+ border-color: rgba(52, 100, 168, 0.5);
1252
+ background: rgba(6, 9, 16, 0.6);
1253
+ }
1254
+
1255
+ .exit-line-btn .cl-swatch {
1256
+ width: 12px;
1257
+ height: 10px;
1258
+ border-radius: 2px;
1259
+ }
1260
+
1261
+ .exit-line-icon {
1262
+ font-family: ui-monospace, Consolas, monospace;
1263
+ font-weight: 700;
1264
+ font-size: 12px;
1265
+ }
1266
+
1267
+ .cl-form-inline {
1268
+ margin: 2px 0 6px;
1269
+ }
1270
+
1271
+ .exit-remove {
1272
+ background: transparent;
1273
+ border: none;
1274
+ color: #55606f;
1275
+ cursor: pointer;
1276
+ font-size: 11px;
1277
+ padding: 0 2px;
1278
+ line-height: 1;
1279
+ border-radius: 2px;
1280
+ transition: color 0.15s, background 0.15s;
1281
+ }
1282
+
1283
+ .exit-remove:hover {
1284
+ color: #ff7f7f;
1285
+ background: rgba(32, 10, 10, 0.7);
1286
+ }
1287
+
1288
+ .special-exits-list {
1289
+ display: flex;
1290
+ flex-direction: column;
1291
+ gap: 3px;
1292
+ }
1293
+
1294
+ .special-exits-list .compass-cell {
1295
+ height: auto;
1296
+ }
1297
+
1298
+ .special-exits-list .cc-label {
1299
+ max-width: 120px;
1300
+ overflow: hidden;
1301
+ text-overflow: ellipsis;
1302
+ white-space: nowrap;
1303
+ display: inline-block;
1304
+ }
1305
+
1306
+ .special-exit-add {
1307
+ display: flex;
1308
+ gap: 4px;
1309
+ margin-top: 6px;
1310
+ align-items: center;
1311
+ }
1312
+
1313
+ .special-exit-add input {
1314
+ background: rgba(6, 9, 16, 0.6);
1315
+ color: #e6e9ef;
1316
+ border: 1px solid rgba(143, 184, 255, 0.1);
1317
+ padding: 0 6px;
1318
+ height: 24px;
1319
+ box-sizing: border-box;
1320
+ border-radius: 3px;
1321
+ font-size: 12px;
1322
+ font-family: inherit;
1323
+ flex: 1;
1324
+ }
1325
+
1326
+ .special-exit-add button:not(.cc-pick-btn) {
1327
+ background: rgba(31, 42, 60, 0.6);
1328
+ color: #e6e9ef;
1329
+ border: 1px solid rgba(143, 184, 255, 0.12);
1330
+ padding: 4px 8px;
1331
+ border-radius: 3px;
1332
+ cursor: pointer;
1333
+ font-size: 12px;
1334
+ white-space: nowrap;
1335
+ transition: background 0.15s, border-color 0.15s;
1336
+ }
1337
+
1338
+ .special-exit-add button:not(.cc-pick-btn):disabled {
1339
+ opacity: 0.35;
1340
+ cursor: not-allowed;
1341
+ }
1342
+
1343
+ .special-exit-add .cc-exit-add {
1344
+ width: auto;
1345
+ flex-shrink: 0;
1346
+ }
1347
+
1348
+ .special-exit-add .cc-exit-input {
1349
+ width: 60px;
1350
+ flex: none;
1351
+ }
1352
+
1353
+ .userdata-list {
1354
+ display: grid;
1355
+ grid-template-columns: 1fr 1fr 22px;
1356
+ gap: 3px 4px;
1357
+ align-items: center;
1358
+ }
1359
+
1360
+ .userdata-row {
1361
+ display: contents;
1362
+ }
1363
+
1364
+ .ud-key {
1365
+ font-size: 12px;
1366
+ color: #8fb8ff;
1367
+ overflow: hidden;
1368
+ text-overflow: ellipsis;
1369
+ white-space: nowrap;
1370
+ }
1371
+
1372
+ .ud-value {
1373
+ background: rgba(6, 9, 16, 0.6);
1374
+ color: #e6e9ef;
1375
+ border: 1px solid rgba(143, 184, 255, 0.1);
1376
+ border-radius: 4px;
1377
+ padding: 2px 5px;
1378
+ font-size: 12px;
1379
+ width: 100%;
1380
+ min-width: 0;
1381
+ }
1382
+
1383
+ .ud-value:focus {
1384
+ outline: none;
1385
+ border-color: rgba(143, 184, 255, 0.35);
1386
+ }
1387
+
1388
+ .ud-delete {
1389
+ appearance: none;
1390
+ -webkit-appearance: none;
1391
+ background: transparent;
1392
+ border: none;
1393
+ color: #55606f;
1394
+ cursor: pointer;
1395
+ font-size: 11px;
1396
+ font-family: inherit;
1397
+ padding: 0 4px 1px;
1398
+ margin: 0;
1399
+ border-radius: 3px;
1400
+ line-height: 1;
1401
+ width: 22px;
1402
+ height: 22px;
1403
+ min-width: 0;
1404
+ display: flex;
1405
+ align-items: center;
1406
+ justify-content: center;
1407
+ align-self: center;
1408
+ box-sizing: border-box;
1409
+ }
1410
+
1411
+ .ud-delete:hover {
1412
+ color: #e6e9ef;
1413
+ background: rgba(31, 42, 60, 0.6);
1414
+ }
1415
+
1416
+ .userdata-empty {
1417
+ grid-column: 1 / -1;
1418
+ color: #55606f;
1419
+ font-size: 12px;
1420
+ text-align: center;
1421
+ padding: 4px 0;
1422
+ }
1423
+
1424
+ .userdata-add {
1425
+ display: contents;
1426
+ }
1427
+
1428
+ .ud-new-key,
1429
+ .ud-new-val {
1430
+ background: rgba(6, 9, 16, 0.6);
1431
+ color: #e6e9ef;
1432
+ border: 1px solid rgba(143, 184, 255, 0.1);
1433
+ border-radius: 4px;
1434
+ padding: 2px 5px;
1435
+ font-size: 12px;
1436
+ width: 100%;
1437
+ min-width: 0;
1438
+ }
1439
+
1440
+ .ud-new-key:focus,
1441
+ .ud-new-val:focus {
1442
+ outline: none;
1443
+ border-color: rgba(143, 184, 255, 0.35);
1444
+ }
1445
+
1446
+ .ud-add {
1447
+ appearance: none;
1448
+ -webkit-appearance: none;
1449
+ background: transparent;
1450
+ border: none;
1451
+ color: #55606f;
1452
+ cursor: pointer;
1453
+ font-size: 14px;
1454
+ font-family: inherit;
1455
+ padding: 0 4px 1px;
1456
+ margin: 0;
1457
+ border-radius: 3px;
1458
+ line-height: 1;
1459
+ width: 22px;
1460
+ height: 22px;
1461
+ min-width: 0;
1462
+ display: flex;
1463
+ align-items: center;
1464
+ justify-content: center;
1465
+ align-self: center;
1466
+ box-sizing: border-box;
1467
+ }
1468
+
1469
+ .ud-add:hover {
1470
+ color: #e6e9ef;
1471
+ background: rgba(31, 42, 60, 0.6);
1472
+ }
1473
+
1474
+ .ud-add:disabled {
1475
+ opacity: 0.35;
1476
+ cursor: not-allowed;
1477
+ }
1478
+
1479
+ /* Compass rose exits */
1480
+ .compass-rose {
1481
+ display: grid;
1482
+ grid-template-columns: repeat(3, 1fr);
1483
+ gap: 3px;
1484
+ }
1485
+
1486
+ .compass-extra {
1487
+ display: grid;
1488
+ grid-template-columns: repeat(3, 1fr);
1489
+ gap: 3px;
1490
+ margin-top: 3px;
1491
+ }
1492
+
1493
+ .compass-vert-spacer {
1494
+ /* invisible column-spacer keeping Up/Down and In/Out symmetrical */
1495
+ }
1496
+
1497
+ .compass-cell {
1498
+ background: rgba(8, 12, 20, 0.55);
1499
+ border: 1px solid rgba(143, 184, 255, 0.07);
1500
+ border-radius: 5px;
1501
+ padding: 4px 5px;
1502
+ display: flex;
1503
+ flex-direction: column;
1504
+ gap: 2px;
1505
+ height: 86px;
1506
+ box-sizing: border-box;
1507
+ overflow: hidden;
1508
+ transition: border-color 0.15s, background 0.15s;
1509
+ }
1510
+
1511
+ .compass-extra .compass-cell {
1512
+ height: 86px;
1513
+ }
1514
+
1515
+ .compass-cell.compass-center {
1516
+ align-items: center;
1517
+ justify-content: center;
1518
+ border-style: dashed;
1519
+ border-color: rgba(143, 184, 255, 0.06);
1520
+ gap: 4px;
1521
+ }
1522
+
1523
+ .compass-cell .cc-room-lock-btn {
1524
+ background: rgba(5, 8, 15, 0.7);
1525
+ border: 1px solid rgba(143, 184, 255, 0.08);
1526
+ border-radius: 3px;
1527
+ padding: 0;
1528
+ width: 28px;
1529
+ height: 22px;
1530
+ cursor: pointer;
1531
+ display: inline-flex;
1532
+ align-items: center;
1533
+ justify-content: center;
1534
+ color: #4a6070;
1535
+ box-sizing: border-box;
1536
+ transition: border-color 0.15s, color 0.15s;
1537
+ }
1538
+ .compass-cell .cc-room-lock-btn:hover { border-color: rgba(52, 100, 168, 0.6); color: #8fb8ff; }
1539
+ .compass-cell .cc-room-lock-btn.lock-active { color: #f07070; border-color: rgba(92, 28, 28, 0.8); }
1540
+
1541
+ .cc-room-weight {
1542
+ background: rgba(5, 8, 15, 0.7);
1543
+ border: 1px solid rgba(143, 184, 255, 0.07);
1544
+ color: #55606f;
1545
+ font-size: 10px;
1546
+ font-family: ui-monospace, Consolas, monospace;
1547
+ width: 36px;
1548
+ height: 20px;
1549
+ padding: 0 3px;
1550
+ border-radius: 2px;
1551
+ text-align: center;
1552
+ -moz-appearance: textfield;
1553
+ }
1554
+ .cc-room-weight::-webkit-outer-spin-button,
1555
+ .cc-room-weight::-webkit-inner-spin-button { -webkit-appearance: none; }
1556
+ .cc-room-weight:focus { border-color: rgba(52, 100, 168, 0.7); outline: none; color: #e6e9ef; }
1557
+
1558
+ .cc-header {
1559
+ display: flex;
1560
+ align-items: center;
1561
+ justify-content: space-between;
1562
+ flex-shrink: 0;
1563
+ }
1564
+
1565
+ .cc-header-btn-slot {
1566
+ height: 20px;
1567
+ display: flex;
1568
+ align-items: center;
1569
+ gap: 2px;
1570
+ flex-shrink: 0;
1571
+ }
1572
+
1573
+ .cc-middle {
1574
+ flex: 1;
1575
+ display: flex;
1576
+ align-items: center;
1577
+ justify-content: center;
1578
+ }
1579
+
1580
+ .cc-dim {
1581
+ opacity: 0.22;
1582
+ pointer-events: none;
1583
+ }
1584
+
1585
+ .cc-weight-wrap {
1586
+ display: flex;
1587
+ align-items: center;
1588
+ gap: 2px;
1589
+ flex: 1;
1590
+ min-width: 0;
1591
+ color: #3a4a5a;
1592
+ }
1593
+
1594
+ .cc-label {
1595
+ font-size: 10px;
1596
+ font-weight: 700;
1597
+ color: rgba(43, 51, 64, 0.8);
1598
+ font-family: ui-monospace, Consolas, monospace;
1599
+ letter-spacing: 0.04em;
1600
+ }
1601
+
1602
+ .compass-cell.has-exit .cc-label {
1603
+ color: #8fb8ff;
1604
+ }
1605
+
1606
+ .cc-target {
1607
+ background: transparent;
1608
+ border: none;
1609
+ color: #8f97a6;
1610
+ cursor: pointer;
1611
+ font-size: 10px;
1612
+ font-family: ui-monospace, Consolas, monospace;
1613
+ padding: 1px 0;
1614
+ text-align: center;
1615
+ display: block;
1616
+ width: 100%;
1617
+ transition: color 0.15s;
1618
+ }
1619
+
1620
+ .cc-target:hover {
1621
+ color: #8fb8ff;
1622
+ }
1623
+
1624
+ .cc-stub-label {
1625
+ display: block;
1626
+ text-align: center;
1627
+ font-size: 9px;
1628
+ color: #55606f;
1629
+ font-style: italic;
1630
+ padding: 1px 0;
1631
+ }
1632
+
1633
+ .cc-footer {
1634
+ display: flex;
1635
+ align-items: center;
1636
+ gap: 2px;
1637
+ margin-top: 3px;
1638
+ }
1639
+
1640
+ /* Compass icon buttons — scoped under .compass-cell to beat .side-panel button specificity */
1641
+ .compass-cell .cc-door-btn,
1642
+ .compass-cell .cc-icon-btn {
1643
+ background: rgba(5, 8, 15, 0.7);
1644
+ border: 1px solid rgba(143, 184, 255, 0.07);
1645
+ padding: 0;
1646
+ border-radius: 3px;
1647
+ cursor: pointer;
1648
+ display: inline-flex;
1649
+ align-items: center;
1650
+ justify-content: center;
1651
+ flex-shrink: 0;
1652
+ width: 26px;
1653
+ height: 24px;
1654
+ font-size: 11px;
1655
+ font-weight: 700;
1656
+ font-family: ui-monospace, Consolas, monospace;
1657
+ box-sizing: border-box;
1658
+ transition: color 0.15s, border-color 0.15s;
1659
+ }
1660
+
1661
+ /* Door icon — color-coded by state */
1662
+ .compass-cell .cc-door-btn { color: #5a7090; }
1663
+ .compass-cell .cc-door-btn:hover { color: #8fb8ff; border-color: rgba(52, 100, 168, 0.6); }
1664
+ .compass-cell .cc-door-btn.door-open { color: #4caf50; border-color: rgba(42, 92, 42, 0.7); }
1665
+ .compass-cell .cc-door-btn.door-closed { color: #e6c84a; border-color: rgba(90, 78, 30, 0.7); }
1666
+ .compass-cell .cc-door-btn.door-locked { color: #f07070; border-color: rgba(92, 28, 28, 0.7); }
1667
+
1668
+ /* Lock / stub icon */
1669
+ .compass-cell .cc-icon-btn { color: #5a7090; }
1670
+ .compass-cell .cc-icon-btn:hover { color: #8fb8ff; border-color: rgba(52, 100, 168, 0.6); }
1671
+ .compass-cell .cc-icon-btn.lock-active { color: #f07070; border-color: rgba(92, 28, 28, 0.7); }
1672
+ .compass-cell .cc-icon-btn.stub-active { color: #e6c84a; border-color: rgba(90, 78, 30, 0.7); }
1673
+ .compass-cell .cc-icon-btn.cc-delete-btn { color: #7a4040; }
1674
+ .compass-cell .cc-icon-btn.cc-delete-btn:hover { color: #f07070; border-color: rgba(92, 28, 28, 0.7); }
1675
+
1676
+ /* Stub + delete live in the header — match exit-line-btn 22×20 size */
1677
+ .cc-header-btn-slot .cc-icon-btn {
1678
+ width: 22px;
1679
+ height: 20px;
1680
+ font-size: 10px;
1681
+ }
1682
+
1683
+ /* Dim state (no exit) — override hover too so disabled buttons stay dim */
1684
+ .compass-cell .cc-dim,
1685
+ .compass-cell .cc-dim:hover { opacity: 0.2; pointer-events: none; border-color: rgba(143,184,255,0.06); color: #5a7090; }
1686
+
1687
+ .cc-weight {
1688
+ background: rgba(5, 8, 15, 0.7);
1689
+ border: 1px solid rgba(143, 184, 255, 0.07);
1690
+ color: #55606f;
1691
+ font-size: 11px;
1692
+ font-family: ui-monospace, Consolas, monospace;
1693
+ width: 0;
1694
+ flex: 1;
1695
+ min-width: 0;
1696
+ height: 24px;
1697
+ padding: 0 3px;
1698
+ border-radius: 2px;
1699
+ -moz-appearance: textfield;
1700
+ }
1701
+ .cc-weight::-webkit-outer-spin-button,
1702
+ .cc-weight::-webkit-inner-spin-button { -webkit-appearance: none; }
1703
+ .cc-weight:focus { border-color: rgba(52, 100, 168, 0.7); outline: none; color: #e6e9ef; }
1704
+
1705
+ .compass-cell.active {
1706
+ border-color: rgba(52, 100, 168, 0.6);
1707
+ background: rgba(14, 24, 37, 0.7);
1708
+ box-shadow: inset 0 0 0 1px rgba(52, 100, 168, 0.15);
1709
+ }
1710
+
1711
+ .compass-cell.picking-exit {
1712
+ border-color: rgba(230, 200, 74, 0.7);
1713
+ background: rgba(14, 18, 8, 0.7);
1714
+ animation: pick-pulse 1s ease-in-out infinite alternate;
1715
+ }
1716
+
1717
+ @keyframes url-progress-indeterminate {
1718
+ 0% { transform: translateX(-100%); width: 40%; }
1719
+ 50% { transform: translateX(150%); width: 60%; }
1720
+ 100% { transform: translateX(250%); width: 40%; }
1721
+ }
1722
+
1723
+ @keyframes pick-pulse {
1724
+ from { border-color: rgba(230, 200, 74, 0.7); box-shadow: 0 0 8px rgba(230, 200, 74, 0.1); }
1725
+ to { border-color: rgba(122, 100, 32, 0.4); box-shadow: none; }
1726
+ }
1727
+
1728
+ .cc-exit-add {
1729
+ display: flex;
1730
+ align-items: center;
1731
+ gap: 2px;
1732
+ width: 100%;
1733
+ }
1734
+
1735
+ .cc-exit-input {
1736
+ background: rgba(5, 8, 15, 0.7);
1737
+ border: 1px solid rgba(143, 184, 255, 0.07);
1738
+ color: #55606f;
1739
+ font-size: 9px;
1740
+ font-family: ui-monospace, Consolas, monospace;
1741
+ height: 24px;
1742
+ width: 0;
1743
+ flex: 1;
1744
+ min-width: 0;
1745
+ padding: 0 3px;
1746
+ border-radius: 2px;
1747
+ -moz-appearance: textfield;
1748
+ }
1749
+ .cc-exit-input::-webkit-outer-spin-button,
1750
+ .cc-exit-input::-webkit-inner-spin-button { -webkit-appearance: none; }
1751
+ .cc-exit-input:focus { border-color: rgba(52, 100, 168, 0.7); outline: none; color: #e6e9ef; }
1752
+ .cc-exit-input::placeholder { color: rgba(42, 53, 64, 0.8); }
1753
+
1754
+ .compass-cell .cc-pick-btn,
1755
+ .special-exit-add .cc-pick-btn {
1756
+ background: rgba(5, 8, 15, 0.7);
1757
+ border: 1px solid rgba(143, 184, 255, 0.07);
1758
+ border-radius: 3px;
1759
+ cursor: pointer;
1760
+ display: inline-flex;
1761
+ align-items: center;
1762
+ justify-content: center;
1763
+ flex-shrink: 0;
1764
+ width: 24px;
1765
+ height: 24px;
1766
+ padding: 0;
1767
+ color: #4a6070;
1768
+ box-sizing: border-box;
1769
+ transition: color 0.15s, border-color 0.15s;
1770
+ }
1771
+ .compass-cell .cc-pick-btn:hover,
1772
+ .special-exit-add .cc-pick-btn:hover { color: #8fb8ff; border-color: rgba(52, 100, 168, 0.6); }
1773
+ .compass-cell .cc-pick-btn.picking,
1774
+ .special-exit-add .cc-pick-btn.picking { color: #e6c84a; border-color: rgba(122, 100, 32, 0.7); }
1775
+
1776
+ /* Environment field */
1777
+ .env-field-row {
1778
+ position: relative;
1779
+ display: flex;
1780
+ align-items: center;
1781
+ gap: 8px;
1782
+ }
1783
+
1784
+ .env-pick-btn {
1785
+ width: 32px;
1786
+ height: 24px;
1787
+ border: 2px solid rgba(143, 184, 255, 0.15);
1788
+ border-radius: 4px;
1789
+ cursor: pointer;
1790
+ padding: 0;
1791
+ flex-shrink: 0;
1792
+ transition: border-color 0.15s;
1793
+ }
1794
+
1795
+ .env-pick-btn:hover {
1796
+ border-color: rgba(52, 100, 168, 0.6);
1797
+ }
1798
+
1799
+ .env-id-label {
1800
+ font-size: 12px;
1801
+ color: #8f97a6;
1802
+ font-family: ui-monospace, Consolas, monospace;
1803
+ }
1804
+
1805
+ /* Env picker popup */
1806
+ .env-picker-popup {
1807
+ position: absolute;
1808
+ top: 110%;
1809
+ left: 0;
1810
+ z-index: 200;
1811
+ background: rgba(12, 17, 28, 0.9);
1812
+ backdrop-filter: blur(20px);
1813
+ border: 1px solid rgba(143, 184, 255, 0.1);
1814
+ border-radius: 8px;
1815
+ padding: 8px;
1816
+ box-shadow: 0 8px 32px rgba(0,0,0,0.6), 0 0 0 1px rgba(255,255,255,0.03);
1817
+ min-width: 200px;
1818
+ max-width: 280px;
1819
+ }
1820
+
1821
+ .env-picker-filter {
1822
+ width: 100%;
1823
+ background: rgba(6, 9, 16, 0.6);
1824
+ color: #e6e9ef;
1825
+ border: 1px solid rgba(143, 184, 255, 0.1);
1826
+ padding: 4px 7px;
1827
+ border-radius: 4px;
1828
+ font-size: 12px;
1829
+ font-family: inherit;
1830
+ margin-bottom: 7px;
1831
+ box-sizing: border-box;
1832
+ transition: border-color 0.15s;
1833
+ }
1834
+
1835
+ .env-picker-filter:focus {
1836
+ outline: none;
1837
+ border-color: rgba(52, 100, 168, 0.7);
1838
+ box-shadow: 0 0 0 2px rgba(52, 100, 168, 0.12);
1839
+ }
1840
+
1841
+ .env-picker-scroll {
1842
+ max-height: 220px;
1843
+ overflow-y: auto;
1844
+ }
1845
+
1846
+ .env-picker-grid {
1847
+ display: flex;
1848
+ flex-wrap: wrap;
1849
+ gap: 4px;
1850
+ }
1851
+
1852
+ .env-picker-swatch {
1853
+ width: 36px;
1854
+ height: 36px;
1855
+ border: 2px solid transparent;
1856
+ border-radius: 4px;
1857
+ cursor: pointer;
1858
+ display: flex;
1859
+ align-items: flex-end;
1860
+ justify-content: center;
1861
+ padding: 0 0 2px 0;
1862
+ position: relative;
1863
+ transition: transform 0.12s, border-color 0.12s;
1864
+ }
1865
+
1866
+ .env-picker-swatch:hover {
1867
+ border-color: #8fb8ff;
1868
+ transform: scale(1.1);
1869
+ }
1870
+
1871
+ .env-picker-swatch.selected {
1872
+ border-color: #00e5ff;
1873
+ box-shadow: 0 0 0 1px #00e5ff, 0 0 8px rgba(0, 229, 255, 0.3);
1874
+ }
1875
+
1876
+ .env-picker-id {
1877
+ font-size: 9px;
1878
+ color: rgba(255,255,255,0.8);
1879
+ text-shadow: 0 0 2px #000, 0 0 2px #000;
1880
+ font-family: ui-monospace, Consolas, monospace;
1881
+ line-height: 1;
1882
+ }
1883
+
1884
+ /* Modal overlay */
1885
+ .modal-overlay {
1886
+ position: fixed;
1887
+ inset: 0;
1888
+ background: rgba(0, 0, 0, 0.65);
1889
+ backdrop-filter: blur(4px);
1890
+ z-index: 500;
1891
+ display: flex;
1892
+ align-items: center;
1893
+ justify-content: center;
1894
+ }
1895
+
1896
+ .modal {
1897
+ background: rgba(12, 17, 28, 0.88);
1898
+ backdrop-filter: blur(24px);
1899
+ border: 1px solid rgba(143, 184, 255, 0.1);
1900
+ border-radius: 10px;
1901
+ width: 480px;
1902
+ max-width: 95vw;
1903
+ max-height: 80vh;
1904
+ display: flex;
1905
+ flex-direction: column;
1906
+ box-shadow:
1907
+ 0 24px 64px rgba(0,0,0,0.7),
1908
+ 0 0 0 1px rgba(255,255,255,0.03),
1909
+ inset 0 1px 0 rgba(255,255,255,0.05);
1910
+ }
1911
+
1912
+ .modal.modal-wide {
1913
+ width: 560px;
1914
+ }
1915
+
1916
+ .modal-header {
1917
+ display: flex;
1918
+ align-items: center;
1919
+ justify-content: space-between;
1920
+ padding: 14px 16px 12px;
1921
+ border-bottom: 1px solid rgba(143, 184, 255, 0.08);
1922
+ }
1923
+
1924
+ .modal-header h2 {
1925
+ margin: 0;
1926
+ font-size: 14px;
1927
+ font-weight: 600;
1928
+ color: #8fb8ff;
1929
+ letter-spacing: 0.03em;
1930
+ text-shadow: 0 0 16px rgba(143, 184, 255, 0.35);
1931
+ }
1932
+
1933
+ .modal-close {
1934
+ background: transparent;
1935
+ border: none;
1936
+ color: #6a7588;
1937
+ font-size: 14px;
1938
+ cursor: pointer;
1939
+ padding: 2px 6px;
1940
+ border-radius: 4px;
1941
+ transition: color 0.15s, background 0.15s;
1942
+ }
1943
+
1944
+ .modal-close:hover {
1945
+ color: #e6e9ef;
1946
+ background: rgba(31, 42, 60, 0.6);
1947
+ }
1948
+
1949
+ .modal-body {
1950
+ flex: 1;
1951
+ overflow-y: auto;
1952
+ padding: 14px 16px;
1953
+ display: flex;
1954
+ flex-direction: column;
1955
+ gap: 12px;
1956
+ }
1957
+
1958
+ .modal-add-row {
1959
+ display: flex;
1960
+ gap: 8px;
1961
+ align-items: center;
1962
+ }
1963
+
1964
+ .modal-add-row input {
1965
+ flex: 1;
1966
+ background: rgba(6, 9, 16, 0.6);
1967
+ color: #e6e9ef;
1968
+ border: 1px solid rgba(143, 184, 255, 0.1);
1969
+ padding: 6px 8px;
1970
+ border-radius: 4px;
1971
+ font-size: 13px;
1972
+ font-family: inherit;
1973
+ transition: border-color 0.15s, box-shadow 0.15s;
1974
+ }
1975
+
1976
+ .modal-add-row input:focus {
1977
+ outline: none;
1978
+ border-color: rgba(52, 100, 168, 0.7);
1979
+ box-shadow: 0 0 0 2px rgba(52, 100, 168, 0.15);
1980
+ }
1981
+
1982
+ .modal-add-row button {
1983
+ background: rgba(31, 42, 60, 0.6);
1984
+ color: #e6e9ef;
1985
+ border: 1px solid rgba(143, 184, 255, 0.12);
1986
+ padding: 6px 12px;
1987
+ border-radius: 4px;
1988
+ cursor: pointer;
1989
+ font-size: 13px;
1990
+ white-space: nowrap;
1991
+ transition: background 0.15s, border-color 0.15s;
1992
+ }
1993
+
1994
+ .modal-add-row button:hover:not(:disabled) {
1995
+ background: rgba(52, 100, 168, 0.3);
1996
+ border-color: rgba(143, 184, 255, 0.25);
1997
+ }
1998
+
1999
+ .modal-add-row button:disabled {
2000
+ opacity: 0.35;
2001
+ cursor: not-allowed;
2002
+ }
2003
+
2004
+ .modal-list {
2005
+ display: flex;
2006
+ flex-direction: column;
2007
+ gap: 4px;
2008
+ }
2009
+
2010
+ .modal-list-row {
2011
+ display: flex;
2012
+ align-items: center;
2013
+ gap: 8px;
2014
+ padding: 6px 8px;
2015
+ background: rgba(6, 9, 16, 0.5);
2016
+ border-radius: 5px;
2017
+ border: 1px solid rgba(143, 184, 255, 0.06);
2018
+ transition: background 0.15s, border-color 0.15s;
2019
+ }
2020
+
2021
+ .modal-list-name {
2022
+ flex: 1;
2023
+ font-size: 13px;
2024
+ color: #e6e9ef;
2025
+ cursor: default;
2026
+ overflow: hidden;
2027
+ text-overflow: ellipsis;
2028
+ white-space: nowrap;
2029
+ }
2030
+
2031
+ .modal-inline-edit {
2032
+ flex: 1;
2033
+ background: rgba(12, 17, 28, 0.8);
2034
+ color: #e6e9ef;
2035
+ border: none;
2036
+ outline: 1px solid rgba(52, 100, 168, 0.6);
2037
+ outline-offset: 0;
2038
+ padding: 0 6px;
2039
+ border-radius: 3px;
2040
+ font-size: 13px;
2041
+ font-family: inherit;
2042
+ line-height: inherit;
2043
+ }
2044
+
2045
+ .modal-list-meta {
2046
+ font-size: 11px;
2047
+ color: #6a7588;
2048
+ font-family: ui-monospace, Consolas, monospace;
2049
+ white-space: nowrap;
2050
+ }
2051
+
2052
+ .modal-list-actions {
2053
+ display: flex;
2054
+ gap: 4px;
2055
+ }
2056
+
2057
+ .modal-list-actions button {
2058
+ background: rgba(31, 42, 60, 0.6);
2059
+ color: #e6e9ef;
2060
+ border: 1px solid rgba(143, 184, 255, 0.1);
2061
+ padding: 3px 8px;
2062
+ border-radius: 3px;
2063
+ cursor: pointer;
2064
+ font-size: 12px;
2065
+ transition: background 0.15s;
2066
+ }
2067
+
2068
+ .modal-list-actions button:hover {
2069
+ background: rgba(52, 80, 120, 0.4);
2070
+ }
2071
+
2072
+ .modal-list-actions button.danger {
2073
+ color: #ff8080;
2074
+ border-color: rgba(58, 28, 28, 0.8);
2075
+ }
2076
+
2077
+ .modal-list-actions button.danger:hover {
2078
+ background: rgba(32, 14, 14, 0.8);
2079
+ }
2080
+
2081
+ .modal-list-actions button.icon-btn {
2082
+ padding: 3px 6px;
2083
+ min-width: 24px;
2084
+ }
2085
+
2086
+ .modal-empty {
2087
+ color: #55606f;
2088
+ font-size: 13px;
2089
+ padding: 8px 0;
2090
+ text-align: center;
2091
+ }
2092
+
2093
+ /* Environment grid in modal */
2094
+ .env-grid-list {
2095
+ display: flex;
2096
+ flex-direction: column;
2097
+ gap: 4px;
2098
+ }
2099
+
2100
+ .env-list-row {
2101
+ display: flex;
2102
+ align-items: center;
2103
+ gap: 8px;
2104
+ padding: 5px 8px;
2105
+ background: rgba(6, 9, 16, 0.5);
2106
+ border: 1px solid rgba(143, 184, 255, 0.05);
2107
+ border-radius: 4px;
2108
+ }
2109
+
2110
+ .env-swatch {
2111
+ width: 24px;
2112
+ height: 24px;
2113
+ border-radius: 3px;
2114
+ border: 1px solid rgba(143, 184, 255, 0.15);
2115
+ flex-shrink: 0;
2116
+ }
2117
+
2118
+ .env-list-id {
2119
+ font-size: 12px;
2120
+ font-family: ui-monospace, Consolas, monospace;
2121
+ color: #8fb8ff;
2122
+ width: 36px;
2123
+ }
2124
+
2125
+ .env-list-builtin {
2126
+ font-size: 11px;
2127
+ color: #55606f;
2128
+ }
2129
+
2130
+ .env-list-used {
2131
+ font-size: 10px;
2132
+ color: #7fff9f;
2133
+ background: rgba(10, 26, 10, 0.7);
2134
+ border: 1px solid rgba(26, 58, 26, 0.8);
2135
+ padding: 1px 5px;
2136
+ border-radius: 10px;
2137
+ }
2138
+
2139
+ .env-remove {
2140
+ background: transparent;
2141
+ border: none;
2142
+ color: #55606f;
2143
+ cursor: pointer;
2144
+ font-size: 12px;
2145
+ margin-left: auto;
2146
+ padding: 2px 4px;
2147
+ border-radius: 3px;
2148
+ transition: color 0.15s, background 0.15s;
2149
+ }
2150
+
2151
+ .env-remove:hover {
2152
+ color: #ff7f7f;
2153
+ background: rgba(32, 10, 10, 0.7);
2154
+ }
2155
+
2156
+ /* Custom line form in side panel */
2157
+ .cl-swatch {
2158
+ width: 12px;
2159
+ height: 12px;
2160
+ border-radius: 2px;
2161
+ flex-shrink: 0;
2162
+ border: 1px solid rgba(255,255,255,0.15);
2163
+ }
2164
+
2165
+ .customline-row {
2166
+ display: grid;
2167
+ grid-template-columns: 14px 1fr auto 18px;
2168
+ align-items: center;
2169
+ gap: 8px;
2170
+ padding: 4px 6px;
2171
+ background: rgba(6, 9, 16, 0.5);
2172
+ border: 1px solid rgba(143, 184, 255, 0.05);
2173
+ border-radius: 4px;
2174
+ font-family: ui-monospace, Consolas, monospace;
2175
+ font-size: 12px;
2176
+ min-width: 0;
2177
+ }
2178
+
2179
+ .side-panel .customline-name {
2180
+ background: transparent;
2181
+ border: 1px solid rgba(143, 184, 255, 0.1);
2182
+ color: #e6e9ef;
2183
+ padding: 2px 6px;
2184
+ border-radius: 3px;
2185
+ cursor: pointer;
2186
+ font-size: 12px;
2187
+ font-family: inherit;
2188
+ text-align: left;
2189
+ min-width: 0;
2190
+ overflow: hidden;
2191
+ text-overflow: ellipsis;
2192
+ white-space: nowrap;
2193
+ transition: background 0.15s;
2194
+ }
2195
+
2196
+ .side-panel .customline-name:hover {
2197
+ background: rgba(31, 42, 60, 0.5);
2198
+ }
2199
+
2200
+ .customline-badge {
2201
+ display: inline-flex;
2202
+ align-items: center;
2203
+ justify-content: center;
2204
+ min-width: 18px;
2205
+ height: 16px;
2206
+ padding: 0 5px;
2207
+ border-radius: 8px;
2208
+ background: rgba(31, 42, 60, 0.6);
2209
+ color: #8f97a6;
2210
+ font-size: 10px;
2211
+ font-family: ui-monospace, Consolas, monospace;
2212
+ line-height: 1;
2213
+ }
2214
+
2215
+ .side-panel .customline-remove {
2216
+ background: transparent;
2217
+ border: none;
2218
+ color: #55606f;
2219
+ cursor: pointer;
2220
+ font-size: 12px;
2221
+ padding: 0;
2222
+ line-height: 1;
2223
+ border-radius: 2px;
2224
+ width: 18px;
2225
+ height: 18px;
2226
+ display: inline-flex;
2227
+ align-items: center;
2228
+ justify-content: center;
2229
+ transition: color 0.15s, background 0.15s;
2230
+ }
2231
+
2232
+ .side-panel .customline-remove:hover {
2233
+ color: #ff7f7f;
2234
+ background: rgba(32, 10, 10, 0.7);
2235
+ }
2236
+
2237
+ .cl-add-btn {
2238
+ width: 100%;
2239
+ background: transparent;
2240
+ border: 1px dashed rgba(143, 184, 255, 0.12);
2241
+ color: #6a7588;
2242
+ padding: 5px 8px;
2243
+ border-radius: 4px;
2244
+ cursor: pointer;
2245
+ font-size: 12px;
2246
+ text-align: left;
2247
+ margin-top: 4px;
2248
+ transition: border-color 0.15s, color 0.15s;
2249
+ }
2250
+
2251
+ .cl-add-btn:hover {
2252
+ border-color: rgba(52, 100, 168, 0.5);
2253
+ color: #cfe1ff;
2254
+ }
2255
+
2256
+ .cl-form {
2257
+ background: rgba(6, 9, 16, 0.55);
2258
+ border: 1px solid rgba(143, 184, 255, 0.07);
2259
+ border-radius: 5px;
2260
+ padding: 8px;
2261
+ margin-top: 6px;
2262
+ display: flex;
2263
+ flex-direction: column;
2264
+ gap: 4px;
2265
+ }
2266
+
2267
+ .cl-form-row {
2268
+ display: flex;
2269
+ align-items: center;
2270
+ gap: 8px;
2271
+ font-size: 12px;
2272
+ color: #8f97a6;
2273
+ }
2274
+
2275
+ .cl-form-label {
2276
+ width: 44px;
2277
+ flex-shrink: 0;
2278
+ font-size: 11px;
2279
+ text-transform: uppercase;
2280
+ letter-spacing: 0.04em;
2281
+ }
2282
+
2283
+ .cl-form select {
2284
+ flex: 1;
2285
+ background: rgba(12, 17, 28, 0.7);
2286
+ color: #e6e9ef;
2287
+ border: 1px solid rgba(143, 184, 255, 0.1);
2288
+ padding: 3px 6px;
2289
+ border-radius: 3px;
2290
+ font-size: 12px;
2291
+ font-family: inherit;
2292
+ }
2293
+
2294
+ /* Area delete confirm panel */
2295
+ .area-delete-confirm {
2296
+ background: rgba(14, 10, 10, 0.7);
2297
+ border: 1px solid rgba(58, 28, 28, 0.8);
2298
+ border-radius: 5px;
2299
+ padding: 10px 12px;
2300
+ margin-top: 2px;
2301
+ margin-bottom: 4px;
2302
+ font-size: 13px;
2303
+ }
2304
+
2305
+ .area-delete-confirm p {
2306
+ margin: 0 0 8px;
2307
+ color: #cfd6e0;
2308
+ }
2309
+
2310
+ .area-delete-confirm strong {
2311
+ color: #e6e9ef;
2312
+ }
2313
+
2314
+ .area-delete-actions {
2315
+ display: flex;
2316
+ flex-direction: column;
2317
+ gap: 6px;
2318
+ }
2319
+
2320
+ .area-delete-actions button {
2321
+ background: rgba(31, 42, 60, 0.6);
2322
+ color: #e6e9ef;
2323
+ border: 1px solid rgba(143, 184, 255, 0.1);
2324
+ padding: 5px 10px;
2325
+ border-radius: 4px;
2326
+ cursor: pointer;
2327
+ font-size: 13px;
2328
+ transition: background 0.15s;
2329
+ }
2330
+
2331
+ .area-delete-actions button:hover:not(:disabled) {
2332
+ background: rgba(52, 80, 120, 0.4);
2333
+ }
2334
+
2335
+ .area-delete-actions button.danger {
2336
+ color: #ff8080;
2337
+ border-color: rgba(58, 28, 28, 0.8);
2338
+ background: rgba(21, 8, 8, 0.7);
2339
+ }
2340
+
2341
+ .area-delete-actions button.danger:hover {
2342
+ background: rgba(32, 14, 14, 0.8);
2343
+ }
2344
+
2345
+ .area-move-row {
2346
+ display: flex;
2347
+ gap: 6px;
2348
+ }
2349
+
2350
+ .area-move-row select {
2351
+ flex: 1;
2352
+ background: rgba(31, 42, 60, 0.6);
2353
+ color: #e6e9ef;
2354
+ border: 1px solid rgba(143, 184, 255, 0.1);
2355
+ padding: 5px 8px;
2356
+ border-radius: 4px;
2357
+ font-size: 13px;
2358
+ font-family: inherit;
2359
+ }
2360
+
2361
+ .area-move-row button:disabled {
2362
+ opacity: 0.35;
2363
+ cursor: not-allowed;
2364
+ }
2365
+
2366
+ .area-ud-section {
2367
+ padding: 4px 8px 8px;
2368
+ border-left: 2px solid rgba(143, 184, 255, 0.15);
2369
+ margin: 0 0 4px 4px;
2370
+ }
2371
+
2372
+ .map-stats {
2373
+ display: flex;
2374
+ flex-direction: column;
2375
+ gap: 2px;
2376
+ margin-bottom: 12px;
2377
+ }
2378
+
2379
+ .map-stat-row {
2380
+ display: flex;
2381
+ justify-content: space-between;
2382
+ font-size: 12px;
2383
+ padding: 3px 0;
2384
+ border-bottom: 1px solid rgba(255, 255, 255, 0.05);
2385
+ }
2386
+
2387
+ .map-stat-label {
2388
+ color: #6a7588;
2389
+ }
2390
+
2391
+ .map-stat-value {
2392
+ color: #e6e9ef;
2393
+ font-variant-numeric: tabular-nums;
2394
+ }
2395
+
2396
+ .warnings-list {
2397
+ display: flex;
2398
+ flex-direction: column;
2399
+ gap: 4px;
2400
+ margin-bottom: 12px;
2401
+ }
2402
+
2403
+ .warning-row {
2404
+ display: flex;
2405
+ align-items: flex-start;
2406
+ gap: 6px;
2407
+ background: rgba(220, 160, 30, 0.08);
2408
+ border: 1px solid rgba(220, 160, 30, 0.25);
2409
+ border-radius: 4px;
2410
+ padding: 5px 6px;
2411
+ font-size: 12px;
2412
+ }
2413
+
2414
+ .warning-icon {
2415
+ color: #d4922a;
2416
+ flex-shrink: 0;
2417
+ line-height: 1.4;
2418
+ }
2419
+
2420
+ .warning-text {
2421
+ display: flex;
2422
+ flex-direction: column;
2423
+ gap: 1px;
2424
+ flex: 1;
2425
+ min-width: 0;
2426
+ }
2427
+
2428
+ .warning-text strong {
2429
+ color: #e6c870;
2430
+ font-weight: 600;
2431
+ }
2432
+
2433
+ .warning-detail {
2434
+ color: #8a96aa;
2435
+ white-space: nowrap;
2436
+ overflow: hidden;
2437
+ text-overflow: ellipsis;
2438
+ }
2439
+
2440
+ .warning-go-btn {
2441
+ flex-shrink: 0;
2442
+ background: rgba(220, 160, 30, 0.15);
2443
+ border: 1px solid rgba(220, 160, 30, 0.35);
2444
+ border-radius: 3px;
2445
+ color: #e6c870;
2446
+ cursor: pointer;
2447
+ font-size: 11px;
2448
+ padding: 2px 7px;
2449
+ }
2450
+
2451
+ .warning-go-btn:hover {
2452
+ background: rgba(220, 160, 30, 0.28);
2453
+ }
2454
+
2455
+ /* Env manager modal — grid layout */
2456
+ .modal.modal-env {
2457
+ width: 680px;
2458
+ max-width: 95vw;
2459
+ max-height: 85vh;
2460
+ }
2461
+
2462
+ .env-modal-body {
2463
+ flex-direction: row !important;
2464
+ gap: 16px !important;
2465
+ align-items: flex-start;
2466
+ min-height: 0;
2467
+ }
2468
+
2469
+ .env-modal-left {
2470
+ flex: 1;
2471
+ min-width: 0;
2472
+ display: flex;
2473
+ flex-direction: column;
2474
+ }
2475
+
2476
+ .env-modal-right {
2477
+ width: 180px;
2478
+ flex-shrink: 0;
2479
+ }
2480
+
2481
+ .env-filter-input {
2482
+ flex: 1;
2483
+ background: rgba(6, 9, 16, 0.6);
2484
+ color: #e6e9ef;
2485
+ border: 1px solid rgba(143, 184, 255, 0.1);
2486
+ padding: 5px 8px;
2487
+ border-radius: 4px;
2488
+ font-size: 13px;
2489
+ font-family: inherit;
2490
+ transition: border-color 0.15s, box-shadow 0.15s;
2491
+ }
2492
+
2493
+ .env-filter-input:focus {
2494
+ outline: none;
2495
+ border-color: rgba(52, 100, 168, 0.7);
2496
+ box-shadow: 0 0 0 2px rgba(52, 100, 168, 0.12);
2497
+ }
2498
+
2499
+ .env-tile-grid {
2500
+ display: flex;
2501
+ flex-wrap: wrap;
2502
+ gap: 6px;
2503
+ padding: 4px 6px;
2504
+ }
2505
+
2506
+ .env-tile {
2507
+ position: relative;
2508
+ width: 54px;
2509
+ height: 54px;
2510
+ border-radius: 5px;
2511
+ border: 2px solid transparent;
2512
+ cursor: pointer;
2513
+ display: flex;
2514
+ align-items: flex-end;
2515
+ justify-content: center;
2516
+ padding: 0 0 3px;
2517
+ transition: transform 0.12s, border-color 0.12s, box-shadow 0.12s;
2518
+ }
2519
+
2520
+ .env-tile:hover {
2521
+ transform: scale(1.08);
2522
+ border-color: #8fb8ff;
2523
+ box-shadow: 0 0 12px rgba(143, 184, 255, 0.2);
2524
+ }
2525
+
2526
+ .env-tile.selected {
2527
+ border-color: #00e5ff;
2528
+ box-shadow: 0 0 0 1px #00e5ff, 0 0 12px rgba(0, 229, 255, 0.25);
2529
+ }
2530
+
2531
+ .env-tile.custom {
2532
+ box-shadow: inset 0 0 0 2px rgba(255,255,255,0.15);
2533
+ }
2534
+
2535
+ .env-tile-id {
2536
+ font-size: 10px;
2537
+ color: rgba(255,255,255,0.9);
2538
+ text-shadow: 0 0 3px #000, 0 0 3px #000;
2539
+ font-family: ui-monospace, Consolas, monospace;
2540
+ line-height: 1;
2541
+ }
2542
+
2543
+ .env-tile-badge {
2544
+ position: absolute;
2545
+ top: 3px;
2546
+ right: 3px;
2547
+ font-size: 8px;
2548
+ background: rgba(0,0,0,0.6);
2549
+ color: #ffdf80;
2550
+ padding: 1px 3px;
2551
+ border-radius: 2px;
2552
+ line-height: 1;
2553
+ font-weight: 700;
2554
+ }
2555
+
2556
+ .env-tile-dot {
2557
+ position: absolute;
2558
+ top: 3px;
2559
+ left: 3px;
2560
+ width: 6px;
2561
+ height: 6px;
2562
+ background: #7fff9f;
2563
+ border-radius: 50%;
2564
+ border: 1px solid rgba(0,0,0,0.4);
2565
+ box-shadow: 0 0 4px rgba(127, 255, 159, 0.4);
2566
+ }
2567
+
2568
+ /* Env detail panel */
2569
+ .env-detail {
2570
+ background: rgba(6, 9, 16, 0.6);
2571
+ border: 1px solid rgba(143, 184, 255, 0.08);
2572
+ border-radius: 6px;
2573
+ padding: 12px;
2574
+ display: flex;
2575
+ flex-direction: column;
2576
+ gap: 6px;
2577
+ }
2578
+
2579
+ .env-detail-swatch {
2580
+ width: 100%;
2581
+ height: 64px;
2582
+ border-radius: 5px;
2583
+ border: 1px solid rgba(143, 184, 255, 0.15);
2584
+ }
2585
+
2586
+ .env-detail-id {
2587
+ margin: 0;
2588
+ font-size: 13px;
2589
+ font-weight: 600;
2590
+ color: #8fb8ff;
2591
+ }
2592
+
2593
+ .env-detail-tags {
2594
+ margin: 0;
2595
+ display: flex;
2596
+ gap: 4px;
2597
+ flex-wrap: wrap;
2598
+ }
2599
+
2600
+ .env-detail-label {
2601
+ font-size: 11px;
2602
+ color: #8f97a6;
2603
+ text-transform: uppercase;
2604
+ letter-spacing: 0.04em;
2605
+ }
2606
+
2607
+ .env-detail-empty {
2608
+ background: rgba(6, 9, 16, 0.5);
2609
+ border: 1px dashed rgba(143, 184, 255, 0.1);
2610
+ border-radius: 6px;
2611
+ padding: 16px 12px;
2612
+ color: #55606f;
2613
+ font-size: 13px;
2614
+ }
2615
+
2616
+ .env-detail-input {
2617
+ background: rgba(6, 9, 16, 0.6);
2618
+ color: #e6e9ef;
2619
+ border: 1px solid rgba(143, 184, 255, 0.1);
2620
+ padding: 5px 8px;
2621
+ border-radius: 4px;
2622
+ font-size: 13px;
2623
+ font-family: inherit;
2624
+ width: 100%;
2625
+ box-sizing: border-box;
2626
+ transition: border-color 0.15s, box-shadow 0.15s;
2627
+ }
2628
+
2629
+ .env-detail-input:focus {
2630
+ outline: none;
2631
+ border-color: rgba(52, 100, 168, 0.7);
2632
+ box-shadow: 0 0 0 2px rgba(52, 100, 168, 0.12);
2633
+ }
2634
+
2635
+ .env-detail-btn {
2636
+ width: 100%;
2637
+ background: rgba(31, 42, 60, 0.6);
2638
+ color: #e6e9ef;
2639
+ border: 1px solid rgba(143, 184, 255, 0.12);
2640
+ padding: 6px 12px;
2641
+ border-radius: 4px;
2642
+ cursor: pointer;
2643
+ font-size: 13px;
2644
+ font-family: inherit;
2645
+ transition: background 0.15s, border-color 0.15s;
2646
+ }
2647
+
2648
+ .env-detail-btn:hover:not(:disabled) {
2649
+ background: rgba(52, 100, 168, 0.3);
2650
+ border-color: rgba(143, 184, 255, 0.25);
2651
+ }
2652
+
2653
+ .env-detail-btn:disabled {
2654
+ opacity: 0.35;
2655
+ cursor: not-allowed;
2656
+ }
2657
+
2658
+ .env-detail-btn--danger {
2659
+ color: #ff8080;
2660
+ border-color: rgba(58, 28, 28, 0.8);
2661
+ }
2662
+
2663
+ .env-detail-btn--danger:hover {
2664
+ background: rgba(32, 14, 14, 0.8);
2665
+ }
2666
+
2667
+ .env-tile-add {
2668
+ background: transparent;
2669
+ border: 2px dashed rgba(143, 184, 255, 0.12);
2670
+ transition: border-color 0.15s, background 0.15s;
2671
+ }
2672
+
2673
+ .env-tile-add:hover {
2674
+ border-color: #8fb8ff;
2675
+ background: rgba(6, 9, 16, 0.6);
2676
+ }
2677
+
2678
+ .env-tile-add.selected {
2679
+ border-style: solid;
2680
+ }
2681
+
2682
+ .env-tile-add-icon {
2683
+ font-size: 22px;
2684
+ color: #55606f;
2685
+ line-height: 1;
2686
+ position: absolute;
2687
+ top: 50%;
2688
+ left: 50%;
2689
+ transform: translate(-50%, -50%);
2690
+ transition: color 0.15s;
2691
+ }
2692
+
2693
+ .env-tile-add:hover .env-tile-add-icon {
2694
+ color: #8fb8ff;
2695
+ }
2696
+
2697
+ .modal-list-actions button.danger {
2698
+ color: #ff8080;
2699
+ border-color: rgba(58, 28, 28, 0.8);
2700
+ }
2701
+
2702
+ .modal-list-actions button.danger:hover {
2703
+ background: rgba(32, 14, 14, 0.8);
2704
+ }
2705
+
2706
+ /* Side panel selects */
2707
+ .side-panel select {
2708
+ background: rgba(6, 9, 16, 0.6);
2709
+ color: #e6e9ef;
2710
+ border: 1px solid rgba(143, 184, 255, 0.1);
2711
+ padding: 5px 8px;
2712
+ border-radius: 4px;
2713
+ font-size: 13px;
2714
+ font-family: inherit;
2715
+ cursor: pointer;
2716
+ transition: border-color 0.15s;
2717
+ }
2718
+
2719
+ .side-panel select:focus {
2720
+ outline: none;
2721
+ border-color: rgba(52, 100, 168, 0.7);
2722
+ }
2723
+
2724
+ .side-panel button {
2725
+ background: rgba(31, 42, 60, 0.6);
2726
+ color: #e6e9ef;
2727
+ border: 1px solid rgba(143, 184, 255, 0.1);
2728
+ padding: 5px 10px;
2729
+ border-radius: 4px;
2730
+ cursor: pointer;
2731
+ font-size: 13px;
2732
+ font-family: inherit;
2733
+ transition: background 0.15s, border-color 0.15s;
2734
+ }
2735
+
2736
+ .side-panel button:hover:not(:disabled) {
2737
+ background: rgba(52, 100, 168, 0.3);
2738
+ border-color: rgba(143, 184, 255, 0.2);
2739
+ }
2740
+
2741
+ .side-panel button:disabled {
2742
+ opacity: 0.35;
2743
+ cursor: not-allowed;
2744
+ }
2745
+
2746
+ /* ── Link selection panels (ExitPanel / CustomLineSelectPanel) ── */
2747
+ .link-info {
2748
+ display: flex;
2749
+ flex-direction: column;
2750
+ gap: 8px;
2751
+ padding: 10px 0;
2752
+ }
2753
+
2754
+ .link-info-row {
2755
+ display: flex;
2756
+ align-items: baseline;
2757
+ gap: 8px;
2758
+ font-size: 13px;
2759
+ color: #b0b8c6;
2760
+ }
2761
+
2762
+ .link-info-row .label {
2763
+ min-width: 48px;
2764
+ flex-shrink: 0;
2765
+ font-size: 11px;
2766
+ color: #8f97a6;
2767
+ text-transform: uppercase;
2768
+ letter-spacing: 0.04em;
2769
+ }
2770
+
2771
+ .link-info-row .readonly {
2772
+ padding: 0;
2773
+ }
2774
+
2775
+ .link-info-row strong {
2776
+ color: #e6e9ef;
2777
+ min-width: 64px;
2778
+ }
2779
+
2780
+ .link-info-row .exit-target {
2781
+ margin-left: auto;
2782
+ }
2783
+
2784
+ .link-info-row button {
2785
+ background: rgba(31, 42, 60, 0.6);
2786
+ color: #7cb8e0;
2787
+ border: 1px solid rgba(143, 184, 255, 0.1);
2788
+ padding: 2px 8px;
2789
+ border-radius: 3px;
2790
+ cursor: pointer;
2791
+ font-size: 12px;
2792
+ transition: background 0.15s;
2793
+ }
2794
+
2795
+ .link-info-row button:hover {
2796
+ background: rgba(52, 80, 120, 0.4);
2797
+ }
2798
+
2799
+ .link-delete-btn {
2800
+ width: 100%;
2801
+ background: rgba(58, 26, 26, 0.6) !important;
2802
+ color: #ff6b6b !important;
2803
+ border: 1px solid rgba(90, 42, 42, 0.8) !important;
2804
+ padding: 6px !important;
2805
+ border-radius: 4px;
2806
+ cursor: pointer;
2807
+ font-size: 13px;
2808
+ transition: background 0.15s !important;
2809
+ }
2810
+
2811
+ .link-delete-btn:hover:not(:disabled) {
2812
+ background: rgba(74, 32, 32, 0.8) !important;
2813
+ }
2814
+
2815
+ .exit-flow {
2816
+ display: flex;
2817
+ align-items: center;
2818
+ gap: 4px;
2819
+ margin-bottom: 8px;
2820
+ }
2821
+
2822
+ .exit-flow .exit-target {
2823
+ margin-left: 0;
2824
+ flex: 1;
2825
+ min-width: 0;
2826
+ overflow: hidden;
2827
+ text-overflow: ellipsis;
2828
+ white-space: nowrap;
2829
+ }
2830
+
2831
+ .exit-flow-center {
2832
+ display: flex;
2833
+ align-items: center;
2834
+ gap: 3px;
2835
+ flex-shrink: 0;
2836
+ }
2837
+
2838
+ .exit-dir-arrow {
2839
+ color: #7cb8e0;
2840
+ font-size: 14px;
2841
+ padding: 0 2px;
2842
+ }
2843
+
2844
+ .exit-dir-label {
2845
+ color: #8a95a3;
2846
+ font-size: 12px;
2847
+ }
2848
+
2849
+ .link-delete-inline {
2850
+ background: transparent !important;
2851
+ border: none !important;
2852
+ color: #ff6b6b !important;
2853
+ cursor: pointer;
2854
+ padding: 0 4px !important;
2855
+ font-size: 12px;
2856
+ opacity: 0.5;
2857
+ flex-shrink: 0;
2858
+ transition: opacity 0.15s !important;
2859
+ }
2860
+
2861
+ .link-delete-inline:hover {
2862
+ opacity: 1;
2863
+ }
2864
+
2865
+ /* History panel */
2866
+ .history-list {
2867
+ display: flex;
2868
+ flex-direction: column;
2869
+ gap: 2px;
2870
+ }
2871
+
2872
+ .history-item {
2873
+ display: flex;
2874
+ flex-wrap: wrap;
2875
+ align-items: center;
2876
+ gap: 2px 8px;
2877
+ padding: 5px 8px;
2878
+ border-radius: 4px;
2879
+ font-size: 12px;
2880
+ border: 1px solid transparent;
2881
+ text-align: left;
2882
+ width: 100%;
2883
+ }
2884
+
2885
+ .history-current {
2886
+ background: rgba(30, 53, 83, 0.6);
2887
+ border-color: rgba(52, 100, 168, 0.5) !important;
2888
+ color: #cfe1ff !important;
2889
+ cursor: default;
2890
+ pointer-events: none;
2891
+ box-shadow: inset 0 0 0 1px rgba(52, 100, 168, 0.1);
2892
+ }
2893
+
2894
+ .history-marker {
2895
+ color: #8fb8ff;
2896
+ font-size: 8px;
2897
+ flex-shrink: 0;
2898
+ }
2899
+
2900
+ .side-panel .history-done {
2901
+ background: rgba(6, 9, 16, 0.5);
2902
+ color: #b0b8c6;
2903
+ border-color: transparent;
2904
+ }
2905
+
2906
+ .side-panel .history-done:hover {
2907
+ background: rgba(31, 42, 60, 0.5);
2908
+ color: #e6e9ef;
2909
+ border-color: rgba(143, 184, 255, 0.1);
2910
+ }
2911
+
2912
+ .side-panel .history-undone {
2913
+ background: transparent;
2914
+ color: #3a4a5a;
2915
+ border-color: transparent;
2916
+ }
2917
+
2918
+ .side-panel .history-undone:hover {
2919
+ background: rgba(6, 9, 16, 0.4);
2920
+ color: #6a7588;
2921
+ border-color: rgba(143, 184, 255, 0.05);
2922
+ }
2923
+
2924
+ .history-label {
2925
+ flex: 1;
2926
+ overflow: hidden;
2927
+ text-overflow: ellipsis;
2928
+ white-space: nowrap;
2929
+ font-family: ui-monospace, Consolas, monospace;
2930
+ }
2931
+
2932
+ .history-sub {
2933
+ flex-basis: 100%;
2934
+ padding-left: 16px;
2935
+ overflow: hidden;
2936
+ text-overflow: ellipsis;
2937
+ white-space: nowrap;
2938
+ font-family: ui-monospace, Consolas, monospace;
2939
+ opacity: 0.45;
2940
+ font-size: 11px;
2941
+ }
2942
+
2943
+ .history-sep {
2944
+ text-align: center;
2945
+ font-size: 10px;
2946
+ color: rgba(43, 51, 64, 0.8);
2947
+ padding: 6px 0 4px;
2948
+ letter-spacing: 0.04em;
2949
+ }
2950
+
2951
+ .context-menu {
2952
+ position: fixed;
2953
+ z-index: 500;
2954
+ background: rgba(10, 14, 24, 0.92);
2955
+ backdrop-filter: blur(20px);
2956
+ border: 1px solid rgba(143, 184, 255, 0.1);
2957
+ border-radius: 7px;
2958
+ box-shadow:
2959
+ 0 8px 32px rgba(0,0,0,0.7),
2960
+ 0 0 0 1px rgba(255,255,255,0.03),
2961
+ inset 0 1px 0 rgba(255,255,255,0.04);
2962
+ padding: 3px;
2963
+ min-width: 140px;
2964
+ }
2965
+
2966
+ .context-menu-item {
2967
+ display: block;
2968
+ width: 100%;
2969
+ text-align: left;
2970
+ background: transparent;
2971
+ border: none;
2972
+ color: #e6e9ef;
2973
+ padding: 6px 10px;
2974
+ font: inherit;
2975
+ font-size: 12px;
2976
+ border-radius: 4px;
2977
+ cursor: pointer;
2978
+ transition: background 0.1s;
2979
+ }
2980
+
2981
+ .context-menu-item:hover {
2982
+ background: rgba(52, 80, 120, 0.4);
2983
+ }
2984
+
2985
+ .context-menu-item.danger {
2986
+ color: #ff8080;
2987
+ }
2988
+
2989
+ .context-menu-item.danger:hover {
2990
+ background: rgba(58, 26, 26, 0.6);
2991
+ }
2992
+
2993
+ .context-menu-form {
2994
+ min-width: 200px;
2995
+ padding: 3px;
2996
+ display: flex;
2997
+ flex-direction: column;
2998
+ gap: 6px;
2999
+ }
3000
+
3001
+ .context-menu-title {
3002
+ font-size: 11px;
3003
+ font-weight: 600;
3004
+ color: #8fb8ff;
3005
+ letter-spacing: 0.04em;
3006
+ padding: 4px 6px 2px;
3007
+ text-transform: uppercase;
3008
+ }
3009
+
3010
+ .context-menu-field {
3011
+ display: flex;
3012
+ flex-direction: column;
3013
+ gap: 2px;
3014
+ padding: 0 4px;
3015
+ }
3016
+
3017
+ .context-menu-field label {
3018
+ font-size: 11px;
3019
+ color: #6a7588;
3020
+ letter-spacing: 0.03em;
3021
+ }
3022
+
3023
+ .context-menu-field select,
3024
+ .context-menu-field input[type="number"] {
3025
+ background: rgba(6, 9, 16, 0.7);
3026
+ color: #e6e9ef;
3027
+ border: 1px solid rgba(143, 184, 255, 0.12);
3028
+ border-radius: 4px;
3029
+ padding: 4px 6px;
3030
+ font-size: 12px;
3031
+ font-family: inherit;
3032
+ width: 100%;
3033
+ box-sizing: border-box;
3034
+ transition: border-color 0.15s;
3035
+ }
3036
+
3037
+ .context-menu-field select:focus,
3038
+ .context-menu-field input[type="number"]:focus {
3039
+ outline: none;
3040
+ border-color: rgba(52, 100, 168, 0.7);
3041
+ }
3042
+
3043
+ .context-menu-coords {
3044
+ display: grid;
3045
+ grid-template-columns: 1fr 1fr 1fr;
3046
+ gap: 4px;
3047
+ padding: 0 4px;
3048
+ }
3049
+
3050
+ .context-menu-coords .context-menu-field {
3051
+ padding: 0;
3052
+ }
3053
+
3054
+ .context-menu-actions {
3055
+ display: flex;
3056
+ gap: 4px;
3057
+ padding: 4px;
3058
+ }
3059
+
3060
+ .context-menu-btn {
3061
+ flex: 1;
3062
+ background: rgba(31, 42, 60, 0.6);
3063
+ color: #e6e9ef;
3064
+ border: 1px solid rgba(143, 184, 255, 0.12);
3065
+ border-radius: 4px;
3066
+ padding: 5px 8px;
3067
+ font-size: 12px;
3068
+ font-family: inherit;
3069
+ cursor: pointer;
3070
+ transition: background 0.15s;
3071
+ }
3072
+
3073
+ .context-menu-btn:hover {
3074
+ background: rgba(52, 80, 120, 0.4);
3075
+ }
3076
+
3077
+ .context-menu-btn.primary {
3078
+ background: rgba(52, 100, 168, 0.35);
3079
+ border-color: rgba(143, 184, 255, 0.25);
3080
+ color: #8fb8ff;
3081
+ }
3082
+
3083
+ .context-menu-btn.primary:hover {
3084
+ background: rgba(52, 100, 168, 0.55);
3085
+ }
3086
+
3087
+ /* Help button */
3088
+ .help-btn {
3089
+ flex-shrink: 0;
3090
+ width: 24px;
3091
+ height: 24px;
3092
+ border-radius: 50%;
3093
+ border: 1px solid rgba(143, 184, 255, 0.2);
3094
+ background: rgba(143, 184, 255, 0.06);
3095
+ color: #8fb8ff;
3096
+ font-size: 13px;
3097
+ font-weight: 600;
3098
+ line-height: 1;
3099
+ cursor: pointer;
3100
+ display: flex;
3101
+ align-items: center;
3102
+ justify-content: center;
3103
+ transition: background 0.15s, border-color 0.15s;
3104
+ }
3105
+ .help-btn:hover {
3106
+ background: rgba(143, 184, 255, 0.15);
3107
+ border-color: rgba(143, 184, 255, 0.4);
3108
+ }
3109
+
3110
+ /* Help modal */
3111
+ .help-modal-body {
3112
+ padding: 16px 18px 20px;
3113
+ overflow-y: auto;
3114
+ display: flex;
3115
+ flex-direction: column;
3116
+ gap: 12px;
3117
+ }
3118
+ .help-desc {
3119
+ margin: 0;
3120
+ font-size: 12px;
3121
+ color: #8a94a6;
3122
+ line-height: 1.6;
3123
+ }
3124
+ .help-desc code {
3125
+ background: rgba(143, 184, 255, 0.1);
3126
+ border-radius: 3px;
3127
+ padding: 1px 4px;
3128
+ font-size: 11px;
3129
+ color: #8fb8ff;
3130
+ }
3131
+ .help-section-title {
3132
+ margin: 4px 0 4px;
3133
+ font-size: 11px;
3134
+ font-weight: 600;
3135
+ letter-spacing: 0.08em;
3136
+ text-transform: uppercase;
3137
+ color: #4a6080;
3138
+ }
3139
+ .help-table {
3140
+ width: 100%;
3141
+ border-collapse: collapse;
3142
+ font-size: 12px;
3143
+ }
3144
+ .help-table td {
3145
+ padding: 4px 6px;
3146
+ vertical-align: top;
3147
+ color: #cfd6e0;
3148
+ border-bottom: 1px solid rgba(143, 184, 255, 0.05);
3149
+ }
3150
+ .help-table tr:last-child td { border-bottom: none; }
3151
+ .help-table td:first-child {
3152
+ white-space: nowrap;
3153
+ padding-right: 10px;
3154
+ }
3155
+ .help-tool-name {
3156
+ white-space: nowrap;
3157
+ font-weight: 500;
3158
+ color: #8fb8ff;
3159
+ padding-right: 10px;
3160
+ }
3161
+ .help-tool-hint { color: #7a8494; }
3162
+ kbd {
3163
+ display: inline-block;
3164
+ padding: 1px 5px;
3165
+ background: rgba(20, 28, 46, 0.9);
3166
+ border: 1px solid rgba(143, 184, 255, 0.2);
3167
+ border-radius: 4px;
3168
+ font-size: 11px;
3169
+ font-family: inherit;
3170
+ color: #a8bcd8;
3171
+ white-space: nowrap;
3172
+ }
3173
+
3174
+ /* ── Swatch Palette ── */
3175
+ .swatch-palette {
3176
+ position: fixed;
3177
+ z-index: 20;
3178
+ background: rgba(14, 20, 34, 0.97);
3179
+ backdrop-filter: blur(18px);
3180
+ border: 1px solid rgba(143, 184, 255, 0.18);
3181
+ border-radius: 10px;
3182
+ box-shadow: 0 8px 32px rgba(0,0,0,0.55), inset 0 1px 0 rgba(255,255,255,0.05);
3183
+ min-width: 260px;
3184
+ max-width: 380px;
3185
+ user-select: none;
3186
+ }
3187
+
3188
+ .swatch-palette-header {
3189
+ display: flex;
3190
+ align-items: center;
3191
+ padding: 7px 10px;
3192
+ cursor: grab;
3193
+ border-bottom: 1px solid rgba(143, 184, 255, 0.08);
3194
+ gap: 6px;
3195
+ }
3196
+ .swatch-palette-header:active { cursor: grabbing; }
3197
+
3198
+ .swatch-palette-title {
3199
+ flex: 1;
3200
+ font-size: 10px;
3201
+ font-weight: 600;
3202
+ letter-spacing: 0.1em;
3203
+ text-transform: uppercase;
3204
+ color: #8fb8ff;
3205
+ }
3206
+
3207
+ .swatch-palette-close {
3208
+ background: none;
3209
+ border: none;
3210
+ color: #55606f;
3211
+ cursor: pointer;
3212
+ padding: 2px 5px;
3213
+ font-size: 12px;
3214
+ border-radius: 3px;
3215
+ line-height: 1;
3216
+ }
3217
+ .swatch-palette-close:hover { color: #e6e9ef; background: rgba(143, 184, 255, 0.1); }
3218
+
3219
+ .swatch-set-row {
3220
+ display: flex;
3221
+ align-items: center;
3222
+ flex-wrap: wrap;
3223
+ gap: 4px;
3224
+ padding: 6px 8px;
3225
+ border-bottom: 1px solid rgba(143, 184, 255, 0.08);
3226
+ }
3227
+
3228
+ .swatch-set-select {
3229
+ flex: 1;
3230
+ min-width: 80px;
3231
+ background: rgba(10, 14, 22, 0.7);
3232
+ border: 1px solid rgba(143, 184, 255, 0.14);
3233
+ border-radius: 4px;
3234
+ color: #e6e9ef;
3235
+ font-size: 12px;
3236
+ font-family: inherit;
3237
+ padding: 3px 6px;
3238
+ height: 26px;
3239
+ cursor: pointer;
3240
+ }
3241
+ .swatch-set-select:focus { outline: none; border-color: rgba(143, 184, 255, 0.35); }
3242
+
3243
+ .swatch-set-name-input {
3244
+ flex: 1;
3245
+ min-width: 80px;
3246
+ background: rgba(10, 14, 22, 0.7);
3247
+ border: 1px solid rgba(143, 184, 255, 0.25);
3248
+ border-radius: 4px;
3249
+ color: #e6e9ef;
3250
+ font-size: 12px;
3251
+ font-family: inherit;
3252
+ padding: 3px 6px;
3253
+ height: 26px;
3254
+ }
3255
+ .swatch-set-name-input:focus { outline: none; border-color: rgba(52, 100, 168, 0.7); }
3256
+
3257
+ .swatch-icon-btn {
3258
+ background: rgba(31, 42, 60, 0.5);
3259
+ border: 1px solid rgba(143, 184, 255, 0.12);
3260
+ border-radius: 4px;
3261
+ color: #8fb8ff;
3262
+ cursor: pointer;
3263
+ padding: 3px 7px;
3264
+ font-size: 12px;
3265
+ line-height: 1;
3266
+ height: 26px;
3267
+ display: inline-flex;
3268
+ align-items: center;
3269
+ justify-content: center;
3270
+ white-space: nowrap;
3271
+ }
3272
+ .swatch-icon-btn:hover:not(:disabled) { background: rgba(52, 100, 168, 0.3); border-color: rgba(143, 184, 255, 0.25); }
3273
+ .swatch-icon-btn:disabled { opacity: 0.35; cursor: not-allowed; }
3274
+ .swatch-icon-btn-danger { color: #ff8080; }
3275
+ .swatch-icon-btn-danger:hover:not(:disabled) { background: rgba(168, 52, 52, 0.3) !important; }
3276
+
3277
+ .swatch-empty-hint {
3278
+ font-size: 11px;
3279
+ color: #55606f;
3280
+ flex: 1;
3281
+ }
3282
+
3283
+ .swatch-grid {
3284
+ display: flex;
3285
+ flex-wrap: wrap;
3286
+ gap: 4px;
3287
+ padding: 8px 8px;
3288
+ }
3289
+
3290
+ .swatch-chip {
3291
+ display: inline-flex;
3292
+ align-items: center;
3293
+ gap: 4px;
3294
+ background: rgba(31, 42, 60, 0.5);
3295
+ border: 1px solid rgba(143, 184, 255, 0.1);
3296
+ border-radius: 5px;
3297
+ padding: 4px 6px;
3298
+ cursor: pointer;
3299
+ font-size: 12px;
3300
+ max-width: 160px;
3301
+ transition: background 0.12s, border-color 0.12s;
3302
+ }
3303
+ .swatch-chip:hover { background: rgba(52, 100, 168, 0.2); border-color: rgba(143, 184, 255, 0.2); }
3304
+ .swatch-chip.active {
3305
+ background: rgba(30, 53, 83, 0.7);
3306
+ border-color: rgba(52, 100, 168, 0.65);
3307
+ box-shadow: 0 0 8px rgba(52, 100, 168, 0.25);
3308
+ }
3309
+ .swatch-chip.editing { border-color: rgba(52, 100, 168, 0.4); }
3310
+
3311
+ .swatch-chip-env {
3312
+ width: 12px;
3313
+ height: 12px;
3314
+ border-radius: 50%;
3315
+ flex-shrink: 0;
3316
+ border: 1px solid rgba(255,255,255,0.15);
3317
+ }
3318
+
3319
+ .swatch-chip-symbol {
3320
+ font-family: ui-monospace, Consolas, monospace;
3321
+ font-size: 11px;
3322
+ color: #00e5ff;
3323
+ min-width: 10px;
3324
+ text-align: center;
3325
+ flex-shrink: 0;
3326
+ }
3327
+
3328
+ .swatch-chip-name {
3329
+ flex: 1;
3330
+ overflow: hidden;
3331
+ text-overflow: ellipsis;
3332
+ white-space: nowrap;
3333
+ color: #c8d4e8;
3334
+ font-size: 12px;
3335
+ min-width: 0;
3336
+ }
3337
+
3338
+ .swatch-chip-edit,
3339
+ .swatch-chip-del {
3340
+ background: none;
3341
+ border: none;
3342
+ cursor: pointer;
3343
+ padding: 0 2px;
3344
+ font-size: 11px;
3345
+ opacity: 0;
3346
+ transition: opacity 0.12s, color 0.12s;
3347
+ flex-shrink: 0;
3348
+ color: #55606f;
3349
+ line-height: 1;
3350
+ }
3351
+ .swatch-chip:hover .swatch-chip-edit,
3352
+ .swatch-chip:hover .swatch-chip-del,
3353
+ .swatch-chip.active .swatch-chip-edit,
3354
+ .swatch-chip.active .swatch-chip-del { opacity: 1; }
3355
+ .swatch-chip-edit:hover { color: #8fb8ff !important; opacity: 1 !important; }
3356
+ .swatch-chip-del:hover { color: #ff8080 !important; opacity: 1 !important; }
3357
+
3358
+ .swatch-add-btn {
3359
+ background: rgba(31, 42, 60, 0.35);
3360
+ border: 1px dashed rgba(143, 184, 255, 0.18);
3361
+ border-radius: 5px;
3362
+ color: #4a5568;
3363
+ cursor: pointer;
3364
+ padding: 4px 12px;
3365
+ font-size: 15px;
3366
+ line-height: 1;
3367
+ transition: color 0.12s, border-color 0.12s;
3368
+ }
3369
+ .swatch-add-btn:hover { color: #8fb8ff; border-color: rgba(143, 184, 255, 0.4); }
3370
+
3371
+ .swatch-edit-form {
3372
+ display: flex;
3373
+ align-items: center;
3374
+ gap: 4px;
3375
+ padding: 6px 8px;
3376
+ background: rgba(8, 12, 22, 0.6);
3377
+ border-top: 1px solid rgba(143, 184, 255, 0.08);
3378
+ }
3379
+
3380
+ .swatch-edit-name {
3381
+ flex: 1;
3382
+ min-width: 0;
3383
+ background: rgba(10, 14, 22, 0.7);
3384
+ border: 1px solid rgba(143, 184, 255, 0.2);
3385
+ border-radius: 4px;
3386
+ color: #e6e9ef;
3387
+ font-size: 12px;
3388
+ font-family: inherit;
3389
+ padding: 3px 6px;
3390
+ height: 26px;
3391
+ }
3392
+ .swatch-edit-name:focus { outline: none; border-color: rgba(52, 100, 168, 0.7); }
3393
+
3394
+ .swatch-edit-symbol {
3395
+ width: 44px;
3396
+ flex-shrink: 0;
3397
+ background: rgba(10, 14, 22, 0.7);
3398
+ border: 1px solid rgba(143, 184, 255, 0.2);
3399
+ border-radius: 4px;
3400
+ color: #00e5ff;
3401
+ font-size: 12px;
3402
+ font-family: ui-monospace, Consolas, monospace;
3403
+ padding: 3px 4px;
3404
+ height: 26px;
3405
+ text-align: center;
3406
+ }
3407
+ .swatch-edit-symbol:focus { outline: none; border-color: rgba(52, 100, 168, 0.7); }
3408
+
3409
+ .swatch-env-picker-wrap {
3410
+ position: relative;
3411
+ flex-shrink: 0;
3412
+ }
3413
+
3414
+ .swatch-env-btn {
3415
+ width: 26px;
3416
+ height: 26px;
3417
+ border-radius: 4px;
3418
+ border: 1px solid rgba(255,255,255,0.2);
3419
+ cursor: pointer;
3420
+ display: flex;
3421
+ align-items: center;
3422
+ justify-content: center;
3423
+ flex-shrink: 0;
3424
+ }
3425
+ .swatch-env-btn:hover { border-color: rgba(255,255,255,0.4); }
3426
+
3427
+ .swatch-env-id {
3428
+ font-size: 9px;
3429
+ font-weight: 700;
3430
+ color: rgba(255,255,255,0.9);
3431
+ text-shadow: 0 1px 2px rgba(0,0,0,0.9);
3432
+ pointer-events: none;
3433
+ }
3434
+
3435
+ .swatch-env-picker-wrap .env-picker-popup {
3436
+ position: absolute;
3437
+ bottom: calc(100% + 4px);
3438
+ left: 0;
3439
+ z-index: 100;
3440
+ }
3441
+
3442
+ .swatch-edit-ok,
3443
+ .swatch-edit-cancel {
3444
+ flex-shrink: 0;
3445
+ background: rgba(31, 42, 60, 0.5);
3446
+ border: 1px solid rgba(143, 184, 255, 0.12);
3447
+ border-radius: 4px;
3448
+ color: #8fb8ff;
3449
+ cursor: pointer;
3450
+ padding: 3px 7px;
3451
+ font-size: 12px;
3452
+ height: 26px;
3453
+ display: inline-flex;
3454
+ align-items: center;
3455
+ }
3456
+ .swatch-edit-ok:hover { background: rgba(52, 100, 168, 0.4); }
3457
+ .swatch-edit-cancel:hover { background: rgba(80, 40, 40, 0.4); color: #ff9090; }
3458
+
3459
+ .swatch-empty {
3460
+ padding: 10px 12px;
3461
+ color: #55606f;
3462
+ font-size: 11px;
3463
+ text-align: center;
3464
+ }
3465
+
3466
+ .swatch-pick-banner {
3467
+ display: flex;
3468
+ align-items: center;
3469
+ gap: 8px;
3470
+ padding: 8px 10px;
3471
+ background: rgba(255, 208, 128, 0.07);
3472
+ border-top: 1px solid rgba(255, 208, 128, 0.15);
3473
+ font-size: 11px;
3474
+ color: #ffd080;
3475
+ }
3476
+ .swatch-pick-banner span { flex: 1; }