@jjlmoya/utils-forensic-science 1.3.0 → 1.5.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 (59) hide show
  1. package/package.json +1 -1
  2. package/src/category/index.ts +5 -1
  3. package/src/entries.ts +9 -1
  4. package/src/index.ts +2 -0
  5. package/src/tests/locale_completeness.test.ts +2 -2
  6. package/src/tests/tool_validation.test.ts +2 -2
  7. package/src/tool/fire-pattern-origin-analyzer/bibliography.astro +6 -0
  8. package/src/tool/fire-pattern-origin-analyzer/bibliography.ts +12 -0
  9. package/src/tool/fire-pattern-origin-analyzer/component.astro +196 -0
  10. package/src/tool/fire-pattern-origin-analyzer/entry.ts +32 -0
  11. package/src/tool/fire-pattern-origin-analyzer/fire-pattern-origin-analyzer.css +681 -0
  12. package/src/tool/fire-pattern-origin-analyzer/i18n/de.ts +250 -0
  13. package/src/tool/fire-pattern-origin-analyzer/i18n/en.ts +250 -0
  14. package/src/tool/fire-pattern-origin-analyzer/i18n/es.ts +250 -0
  15. package/src/tool/fire-pattern-origin-analyzer/i18n/fr.ts +250 -0
  16. package/src/tool/fire-pattern-origin-analyzer/i18n/id.ts +250 -0
  17. package/src/tool/fire-pattern-origin-analyzer/i18n/it.ts +250 -0
  18. package/src/tool/fire-pattern-origin-analyzer/i18n/ja.ts +250 -0
  19. package/src/tool/fire-pattern-origin-analyzer/i18n/ko.ts +250 -0
  20. package/src/tool/fire-pattern-origin-analyzer/i18n/nl.ts +250 -0
  21. package/src/tool/fire-pattern-origin-analyzer/i18n/pl.ts +250 -0
  22. package/src/tool/fire-pattern-origin-analyzer/i18n/pt.ts +250 -0
  23. package/src/tool/fire-pattern-origin-analyzer/i18n/ru.ts +250 -0
  24. package/src/tool/fire-pattern-origin-analyzer/i18n/sv.ts +250 -0
  25. package/src/tool/fire-pattern-origin-analyzer/i18n/tr.ts +250 -0
  26. package/src/tool/fire-pattern-origin-analyzer/i18n/zh.ts +246 -0
  27. package/src/tool/fire-pattern-origin-analyzer/index.ts +11 -0
  28. package/src/tool/fire-pattern-origin-analyzer/logic.ts +123 -0
  29. package/src/tool/fire-pattern-origin-analyzer/render.ts +159 -0
  30. package/src/tool/fire-pattern-origin-analyzer/seo.astro +15 -0
  31. package/src/tool/fire-pattern-origin-analyzer/view-bindings.ts +171 -0
  32. package/src/tool/fire-pattern-origin-analyzer/view-model.ts +244 -0
  33. package/src/tool/fire-pattern-origin-analyzer/view.ts +30 -0
  34. package/src/tool/forensic-fingerprint-minutiae-identifier/bibliography.astro +6 -0
  35. package/src/tool/forensic-fingerprint-minutiae-identifier/bibliography.ts +16 -0
  36. package/src/tool/forensic-fingerprint-minutiae-identifier/component.astro +429 -0
  37. package/src/tool/forensic-fingerprint-minutiae-identifier/drawer.ts +94 -0
  38. package/src/tool/forensic-fingerprint-minutiae-identifier/entry.ts +32 -0
  39. package/src/tool/forensic-fingerprint-minutiae-identifier/forensic-fingerprint-minutiae-identifier.css +969 -0
  40. package/src/tool/forensic-fingerprint-minutiae-identifier/i18n/de.ts +298 -0
  41. package/src/tool/forensic-fingerprint-minutiae-identifier/i18n/en.ts +289 -0
  42. package/src/tool/forensic-fingerprint-minutiae-identifier/i18n/es.ts +291 -0
  43. package/src/tool/forensic-fingerprint-minutiae-identifier/i18n/fr.ts +298 -0
  44. package/src/tool/forensic-fingerprint-minutiae-identifier/i18n/id.ts +298 -0
  45. package/src/tool/forensic-fingerprint-minutiae-identifier/i18n/it.ts +298 -0
  46. package/src/tool/forensic-fingerprint-minutiae-identifier/i18n/ja.ts +281 -0
  47. package/src/tool/forensic-fingerprint-minutiae-identifier/i18n/ko.ts +281 -0
  48. package/src/tool/forensic-fingerprint-minutiae-identifier/i18n/nl.ts +298 -0
  49. package/src/tool/forensic-fingerprint-minutiae-identifier/i18n/pl.ts +298 -0
  50. package/src/tool/forensic-fingerprint-minutiae-identifier/i18n/pt.ts +298 -0
  51. package/src/tool/forensic-fingerprint-minutiae-identifier/i18n/ru.ts +298 -0
  52. package/src/tool/forensic-fingerprint-minutiae-identifier/i18n/sv.ts +298 -0
  53. package/src/tool/forensic-fingerprint-minutiae-identifier/i18n/tr.ts +298 -0
  54. package/src/tool/forensic-fingerprint-minutiae-identifier/i18n/zh.ts +281 -0
  55. package/src/tool/forensic-fingerprint-minutiae-identifier/index.ts +11 -0
  56. package/src/tool/forensic-fingerprint-minutiae-identifier/logic.ts +168 -0
  57. package/src/tool/forensic-fingerprint-minutiae-identifier/renderer.ts +116 -0
  58. package/src/tool/forensic-fingerprint-minutiae-identifier/seo.astro +15 -0
  59. package/src/tools.ts +5 -1
@@ -0,0 +1,681 @@
1
+ .tool-page[data-tool-slug="fire-pattern-origin-analyzer"] :where(h1) {
2
+ max-width: 980px;
3
+ font-size: clamp(3rem, 7vw, 5.7rem);
4
+ font-weight: 680;
5
+ line-height: 0.94;
6
+ letter-spacing: 0;
7
+ }
8
+
9
+ .fire-origin {
10
+ --fire-bg: #f3eee7;
11
+ --fire-paper: rgba(255, 251, 245, 0.72);
12
+ --fire-line: rgba(24, 16, 12, 0.1);
13
+ --fire-text: #211915;
14
+ --fire-muted: #6f6259;
15
+ --fire-accent: #8f2017;
16
+ --fire-data: #16314a;
17
+ --fire-ice: #d9e7f1;
18
+
19
+ width: 100%;
20
+ color: var(--fire-text);
21
+ padding: 20px;
22
+ background:
23
+ radial-gradient(circle at top left, rgba(255, 255, 255, 0.84), transparent 24%),
24
+ linear-gradient(180deg, #f5f0e9, #efebe3);
25
+ }
26
+
27
+ .fire-workspace {
28
+ display: grid;
29
+ gap: 12px;
30
+ padding: 12px;
31
+ }
32
+
33
+ .fire-origin[data-has-plan="false"] .fire-topbar,
34
+ .fire-origin[data-has-plan="false"] .fire-statusbar,
35
+ .fire-origin[data-has-plan="false"] .fire-layer-dots,
36
+ .fire-origin[data-has-plan="false"] .fire-pointer-overlay,
37
+ .fire-origin[data-has-plan="false"] .fire-origin-overlay {
38
+ opacity: 0;
39
+ pointer-events: none;
40
+ }
41
+
42
+ .fire-origin[data-has-plan="false"] .fire-workspace {
43
+ gap: 0;
44
+ }
45
+
46
+ .fire-origin[data-has-plan="true"] .fire-dropzone,
47
+ .fire-origin .fire-dropzone[hidden] {
48
+ display: none;
49
+ }
50
+
51
+ .fire-topbar,
52
+ .fire-statusbar {
53
+ display: flex;
54
+ flex-wrap: wrap;
55
+ gap: 8px 12px;
56
+ align-items: center;
57
+ min-height: 40px;
58
+ padding: 0;
59
+ }
60
+
61
+ .fire-guide {
62
+ border-top: 1px solid rgba(24, 16, 12, 0.08);
63
+ padding-top: 12px;
64
+ }
65
+
66
+ .fire-guide summary {
67
+ cursor: pointer;
68
+ list-style: none;
69
+ color: var(--fire-data);
70
+ font-size: 0.82rem;
71
+ font-weight: 760;
72
+ letter-spacing: 0.08em;
73
+ text-transform: uppercase;
74
+ }
75
+
76
+ .fire-guide summary::-webkit-details-marker {
77
+ display: none;
78
+ }
79
+
80
+ .fire-guide-body {
81
+ display: grid;
82
+ gap: 16px;
83
+ padding-top: 12px;
84
+ }
85
+
86
+ .fire-guide-panels {
87
+ display: grid;
88
+ gap: 10px;
89
+ }
90
+
91
+ .fire-guide-panels details {
92
+ border: 1px solid rgba(24, 16, 12, 0.08);
93
+ border-radius: 10px;
94
+ background: rgba(255, 255, 255, 0.34);
95
+ }
96
+
97
+ .fire-guide-panels summary {
98
+ position: relative;
99
+ padding: 12px 14px;
100
+ color: var(--fire-text);
101
+ font-size: 0.94rem;
102
+ font-weight: 680;
103
+ letter-spacing: 0;
104
+ text-transform: none;
105
+ }
106
+
107
+ .fire-guide-panels summary::after {
108
+ content: "+";
109
+ position: absolute;
110
+ top: 50%;
111
+ right: 14px;
112
+ transform: translateY(-50%);
113
+ color: var(--fire-data);
114
+ font-size: 1rem;
115
+ font-weight: 700;
116
+ }
117
+
118
+ .fire-guide-panels details[open] > summary::after {
119
+ content: "-";
120
+ }
121
+
122
+ .fire-guide-panel-copy,
123
+ .fire-guide-definitions {
124
+ display: grid;
125
+ gap: 12px;
126
+ padding: 0 14px 14px;
127
+ }
128
+
129
+ .fire-guide-list {
130
+ display: grid;
131
+ gap: 8px;
132
+ margin: 0;
133
+ padding-left: 18px;
134
+ color: var(--fire-muted);
135
+ line-height: 1.6;
136
+ }
137
+
138
+ .fire-guide-list li {
139
+ margin: 0;
140
+ }
141
+
142
+ .fire-guide-definitions {
143
+ grid-template-columns: repeat(2, minmax(0, 1fr));
144
+ }
145
+
146
+ .fire-guide-definitions article {
147
+ display: grid;
148
+ gap: 6px;
149
+ padding: 10px 12px;
150
+ border: 1px solid rgba(24, 16, 12, 0.08);
151
+ border-radius: 8px;
152
+ background: rgba(255, 255, 255, 0.42);
153
+ }
154
+
155
+ .fire-guide-definitions h3 {
156
+ margin: 0;
157
+ font-size: 0.92rem;
158
+ line-height: 1.3;
159
+ }
160
+
161
+ .fire-guide-definitions p,
162
+ .fire-guide-panel-copy p {
163
+ margin: 0;
164
+ color: var(--fire-muted);
165
+ line-height: 1.6;
166
+ }
167
+
168
+ .fire-guide-flow {
169
+ display: grid;
170
+ grid-template-columns: repeat(4, minmax(0, 1fr));
171
+ gap: 12px;
172
+ padding: 0 14px 14px;
173
+ }
174
+
175
+ .fire-guide-flow article {
176
+ display: grid;
177
+ gap: 6px;
178
+ padding: 12px;
179
+ border: 1px solid rgba(24, 16, 12, 0.08);
180
+ border-radius: 10px;
181
+ background: rgba(255, 255, 255, 0.4);
182
+ }
183
+
184
+ .fire-guide-flow strong,
185
+ .fire-guide-readouts strong {
186
+ color: var(--fire-data);
187
+ font-size: 0.8rem;
188
+ letter-spacing: 0.08em;
189
+ }
190
+
191
+ .fire-guide-flow span {
192
+ display: inline-grid;
193
+ place-items: center;
194
+ width: 34px;
195
+ height: 34px;
196
+ border-radius: 999px;
197
+ background: rgba(22, 49, 74, 0.08);
198
+ font-size: 1rem;
199
+ }
200
+
201
+ .fire-guide-flow h3 {
202
+ font-size: 0.95rem;
203
+ line-height: 1.3;
204
+ margin: 0;
205
+ }
206
+
207
+ .fire-guide-flow p,
208
+ .fire-guide-readouts p {
209
+ font-size: 0.9rem;
210
+ margin: 0;
211
+ color: var(--fire-muted);
212
+ line-height: 1.5;
213
+ }
214
+
215
+ .fire-guide-legend,
216
+ .fire-guide-readouts {
217
+ display: grid;
218
+ grid-template-columns: repeat(4, minmax(0, 1fr));
219
+ gap: 10px;
220
+ padding: 0 14px 14px;
221
+ }
222
+
223
+ .fire-guide-chip,
224
+ .fire-guide-readouts article {
225
+ display: grid;
226
+ gap: 6px;
227
+ padding: 12px;
228
+ border: 1px solid rgba(24, 16, 12, 0.08);
229
+ border-radius: 10px;
230
+ background: rgba(255, 255, 255, 0.28);
231
+ }
232
+
233
+ .fire-guide-chip span {
234
+ width: 14px;
235
+ height: 14px;
236
+ border-radius: 999px;
237
+ }
238
+
239
+ .fire-guide-chip strong {
240
+ font-size: 0.92rem;
241
+ }
242
+
243
+ .fire-guide-chip small {
244
+ color: var(--fire-muted);
245
+ line-height: 1.45;
246
+ }
247
+
248
+ .fire-guide-chip-v span {
249
+ background: #b12618;
250
+ }
251
+
252
+ .fire-guide-chip-char span {
253
+ background: #5b524c;
254
+ }
255
+
256
+ .fire-guide-chip-soot span {
257
+ background: #35516b;
258
+ }
259
+
260
+ .fire-guide-chip-clean span {
261
+ background: #d17d10;
262
+ }
263
+
264
+ .fire-command,
265
+ .fire-statusbar strong,
266
+ .fire-pointer-overlay strong,
267
+ .fire-origin-overlay strong {
268
+ font-variant-numeric: tabular-nums;
269
+ letter-spacing: 0.08em;
270
+ }
271
+
272
+ .fire-command {
273
+ display: inline-flex;
274
+ align-items: center;
275
+ justify-content: center;
276
+ min-height: 36px;
277
+ padding: 0 14px;
278
+ border: 1px solid rgba(24, 16, 12, 0.12);
279
+ border-radius: 999px;
280
+ color: var(--fire-text);
281
+ background: rgba(255, 255, 255, 0.72);
282
+ box-shadow: 0 1px 2px rgba(24, 16, 12, 0.06);
283
+ cursor: pointer;
284
+ font-size: 0.76rem;
285
+ font-weight: 780;
286
+ line-height: 1;
287
+ text-transform: uppercase;
288
+ }
289
+
290
+ .fire-command:disabled {
291
+ opacity: 0.46;
292
+ cursor: not-allowed;
293
+ }
294
+
295
+ .fire-command input {
296
+ position: absolute;
297
+ width: 1px;
298
+ height: 1px;
299
+ opacity: 0;
300
+ pointer-events: none;
301
+ }
302
+
303
+ .fire-command-export {
304
+ color: #0f3c5a;
305
+ background: rgba(217, 231, 241, 0.86);
306
+ }
307
+
308
+ .fire-plan-shell {
309
+ position: relative;
310
+ min-height: 680px;
311
+ overflow: hidden;
312
+ padding: 12px;
313
+ border: 1px solid rgba(24, 16, 12, 0.08);
314
+ border-radius: 12px;
315
+ background: rgba(255, 252, 248, 0.56);
316
+ }
317
+
318
+ .fire-plan-shell svg,
319
+ .fire-plan-shell canvas {
320
+ display: block;
321
+ width: 100%;
322
+ min-height: 680px;
323
+ }
324
+
325
+ .fire-plan-shell svg {
326
+ position: relative;
327
+ z-index: 1;
328
+ color: #7f6550;
329
+ border: 1px solid var(--fire-line);
330
+ background: linear-gradient(180deg, rgba(255, 248, 239, 0.98), rgba(247, 242, 234, 0.96));
331
+ }
332
+
333
+ .fire-plan-shell canvas {
334
+ position: absolute;
335
+ inset: 0;
336
+ z-index: 2;
337
+ pointer-events: none;
338
+ }
339
+
340
+ .fire-grid-fill {
341
+ opacity: 0.92;
342
+ }
343
+
344
+ .fire-room path {
345
+ fill: none;
346
+ stroke: #35261d;
347
+ stroke-width: 7;
348
+ stroke-linecap: round;
349
+ stroke-linejoin: round;
350
+ }
351
+
352
+ .fire-fixtures :where(rect, path) {
353
+ fill: rgba(96, 70, 54, 0.05);
354
+ stroke: rgba(61, 43, 33, 0.22);
355
+ stroke-width: 2;
356
+ }
357
+
358
+ .fire-evidence {
359
+ fill: none;
360
+ stroke-linecap: round;
361
+ stroke-linejoin: round;
362
+ transition: opacity 0.3s cubic-bezier(0.2, 0.8, 0.2, 1);
363
+ }
364
+
365
+ .fire-evidence-v {
366
+ stroke: rgba(220, 38, 38, 0.42);
367
+ stroke-width: 14;
368
+ }
369
+
370
+ .fire-evidence-char {
371
+ fill: rgba(61, 52, 47, 0.18);
372
+ stroke: rgba(41, 37, 36, 0.42);
373
+ stroke-width: 5;
374
+ }
375
+
376
+ .fire-evidence-soot {
377
+ fill: rgba(51, 65, 85, 0.1);
378
+ stroke: rgba(51, 65, 85, 0.24);
379
+ stroke-width: 4;
380
+ }
381
+
382
+ .fire-evidence-clean {
383
+ fill: rgba(245, 158, 11, 0.08);
384
+ stroke: rgba(217, 119, 6, 0.86);
385
+ stroke-width: 4;
386
+ }
387
+
388
+ .fire-layer-dots {
389
+ position: absolute;
390
+ top: 14px;
391
+ right: 14px;
392
+ z-index: 4;
393
+ display: grid;
394
+ grid-template-columns: repeat(2, 1fr);
395
+ gap: 8px;
396
+ }
397
+
398
+ .fire-layer-dot {
399
+ width: 18px;
400
+ height: 18px;
401
+ border: 1px solid rgba(24, 16, 12, 0.1);
402
+ border-radius: 999px;
403
+ background: rgba(255, 255, 255, 0.5);
404
+ cursor: pointer;
405
+ }
406
+
407
+ .fire-layer-dot:disabled {
408
+ opacity: 0.4;
409
+ cursor: not-allowed;
410
+ }
411
+
412
+ .fire-layer-dot[data-fire-layer-toggle="vPattern"] {
413
+ color: #b12618;
414
+ }
415
+
416
+ .fire-layer-dot[data-fire-layer-toggle="deepChar"] {
417
+ color: #5b524c;
418
+ }
419
+
420
+ .fire-layer-dot[data-fire-layer-toggle="sootShadow"] {
421
+ color: #35516b;
422
+ }
423
+
424
+ .fire-layer-dot[data-fire-layer-toggle="cleanBurn"] {
425
+ color: #d17d10;
426
+ }
427
+
428
+ .fire-layer-dot::after {
429
+ content: "";
430
+ display: block;
431
+ width: 10px;
432
+ height: 10px;
433
+ margin: 3px;
434
+ border-radius: 999px;
435
+ background: currentcolor;
436
+ transition: transform 0.3s cubic-bezier(0.2, 0.8, 0.2, 1), opacity 0.3s cubic-bezier(0.2, 0.8, 0.2, 1);
437
+ }
438
+
439
+ .fire-layer-dot[data-active="false"]::after {
440
+ opacity: 0.24;
441
+ transform: scale(0.66);
442
+ }
443
+
444
+ .fire-pointer-overlay,
445
+ .fire-origin-overlay {
446
+ position: absolute;
447
+ z-index: 4;
448
+ display: grid;
449
+ gap: 4px;
450
+ min-width: 136px;
451
+ padding: 10px 12px;
452
+ border: 1px solid rgba(255, 255, 255, 0.16);
453
+ border-radius: 8px;
454
+ color: #fff7ed;
455
+ background: rgba(18, 16, 15, 0.78);
456
+ backdrop-filter: blur(18px);
457
+ pointer-events: none;
458
+ }
459
+
460
+ .fire-pointer-overlay {
461
+ opacity: 1;
462
+ }
463
+
464
+ .fire-pointer-overlay span,
465
+ .fire-origin-overlay span,
466
+ .fire-statusbar span {
467
+ font-size: 0.72rem;
468
+ font-weight: 760;
469
+ letter-spacing: 0.08em;
470
+ line-height: 1;
471
+ text-transform: uppercase;
472
+ }
473
+
474
+ .fire-pointer-overlay strong,
475
+ .fire-origin-overlay strong {
476
+ font-size: 1.08rem;
477
+ line-height: 1.05;
478
+ }
479
+
480
+ .fire-origin-overlay {
481
+ background: rgba(20, 26, 34, 0.78);
482
+ }
483
+
484
+ .fire-dropzone {
485
+ position: absolute;
486
+ inset: 12px;
487
+ z-index: 5;
488
+ display: grid;
489
+ place-items: center;
490
+ padding: 20px;
491
+ border: 1px dashed rgba(22, 49, 74, 0.24);
492
+ border-radius: 8px;
493
+ color: var(--fire-data);
494
+ background: rgba(255, 251, 245, 0.96);
495
+ font-size: 1rem;
496
+ font-weight: 640;
497
+ backdrop-filter: blur(12px);
498
+ cursor: pointer;
499
+ }
500
+
501
+ .fire-radial-menu {
502
+ position: absolute;
503
+ z-index: 6;
504
+ width: 168px;
505
+ height: 168px;
506
+ margin-left: -84px;
507
+ margin-top: -84px;
508
+ pointer-events: none;
509
+ }
510
+
511
+ .fire-radial-menu[hidden] {
512
+ display: none;
513
+ }
514
+
515
+ .fire-radial-menu button {
516
+ position: absolute;
517
+ top: 50%;
518
+ left: 50%;
519
+ min-width: 96px;
520
+ min-height: 36px;
521
+ padding: 0 10px;
522
+ border: 0;
523
+ border-radius: 999px;
524
+ color: var(--fire-text);
525
+ background: rgba(255, 251, 245, 0.92);
526
+ box-shadow: 0 10px 20px rgba(22, 19, 17, 0.12);
527
+ cursor: pointer;
528
+ font-size: 0.74rem;
529
+ font-weight: 760;
530
+ letter-spacing: 0.04em;
531
+ line-height: 1;
532
+ pointer-events: auto;
533
+ transform:
534
+ translate(-50%, -50%)
535
+ rotate(var(--angle))
536
+ translateY(-58px)
537
+ rotate(calc(-1 * var(--angle)));
538
+ }
539
+
540
+ .fire-radial-menu button[data-fire-pattern="vPattern"] {
541
+ --angle: -90deg;
542
+ }
543
+
544
+ .fire-radial-menu button[data-fire-pattern="deepChar"] {
545
+ --angle: 0deg;
546
+ }
547
+
548
+ .fire-radial-menu button[data-fire-pattern="cleanBurn"] {
549
+ --angle: 90deg;
550
+ }
551
+
552
+ .fire-radial-menu button[data-fire-pattern="sootShadow"] {
553
+ --angle: 180deg;
554
+ }
555
+
556
+ .fire-statusbar {
557
+ justify-content: space-between;
558
+ border-top: 1px solid rgba(24, 16, 12, 0.08);
559
+ padding: 8px 2px 0;
560
+ color: var(--fire-muted);
561
+ }
562
+
563
+ .fire-statusbar strong {
564
+ color: var(--fire-data);
565
+ font-size: 0.86rem;
566
+ }
567
+
568
+ .theme-dark .fire-origin {
569
+ --fire-bg: #181818;
570
+ --fire-paper: rgba(29, 29, 29, 0.72);
571
+ --fire-line: rgba(255, 255, 255, 0.1);
572
+ --fire-text: #ede8e1;
573
+ --fire-muted: #c7bcb3;
574
+ --fire-accent: #b12618;
575
+ --fire-data: #a7d0ef;
576
+ --fire-ice: #11324a;
577
+
578
+ background:
579
+ radial-gradient(circle at top left, rgba(255, 255, 255, 0.05), transparent 24%),
580
+ linear-gradient(180deg, #171717, #1e1d1b);
581
+ }
582
+
583
+ .theme-dark .fire-command {
584
+ color: var(--fire-text);
585
+ border-color: rgba(255, 255, 255, 0.12);
586
+ background: rgba(255, 255, 255, 0.08);
587
+ }
588
+
589
+ .theme-dark .fire-command-export {
590
+ color: #dbeeff;
591
+ background: rgba(17, 50, 74, 0.82);
592
+ }
593
+
594
+ .theme-dark .fire-plan-shell svg {
595
+ border-color: rgba(255, 255, 255, 0.1);
596
+ color: #94755e;
597
+ background: linear-gradient(180deg, rgba(32, 28, 25, 0.98), rgba(28, 24, 22, 0.96));
598
+ }
599
+
600
+ .theme-dark .fire-plan-shell {
601
+ border-color: rgba(255, 255, 255, 0.1);
602
+ background: rgba(24, 24, 24, 0.44);
603
+ }
604
+
605
+ .theme-dark .fire-room path {
606
+ stroke: #dac7b2;
607
+ }
608
+
609
+ .theme-dark .fire-fixtures :where(rect, path) {
610
+ fill: rgba(255, 255, 255, 0.03);
611
+ stroke: rgba(255, 255, 255, 0.12);
612
+ }
613
+
614
+ .theme-dark .fire-layer-dot {
615
+ border-color: rgba(255, 255, 255, 0.12);
616
+ background: rgba(20, 20, 20, 0.58);
617
+ }
618
+
619
+ .theme-dark .fire-dropzone,
620
+ .theme-dark .fire-radial-menu button {
621
+ color: var(--fire-text);
622
+ background: rgba(20, 20, 20, 0.98);
623
+ }
624
+
625
+ .theme-dark .fire-statusbar {
626
+ border-color: rgba(255, 255, 255, 0.1);
627
+ }
628
+
629
+ .theme-dark .fire-guide,
630
+ .theme-dark .fire-guide-flow article,
631
+ .theme-dark .fire-guide-chip,
632
+ .theme-dark .fire-guide-readouts article,
633
+ .theme-dark .fire-guide-panels details,
634
+ .theme-dark .fire-guide-definitions article {
635
+ border-color: rgba(255, 255, 255, 0.1);
636
+ }
637
+
638
+ .theme-dark .fire-guide-flow article,
639
+ .theme-dark .fire-guide-chip,
640
+ .theme-dark .fire-guide-readouts article,
641
+ .theme-dark .fire-guide-panels details,
642
+ .theme-dark .fire-guide-definitions article {
643
+ background: rgba(255, 255, 255, 0.04);
644
+ }
645
+
646
+ @media (max-width: 980px) {
647
+ .fire-origin {
648
+ padding: 12px;
649
+ }
650
+
651
+ .fire-workspace {
652
+ padding: 8px;
653
+ }
654
+
655
+ .fire-plan-shell,
656
+ .fire-plan-shell svg,
657
+ .fire-plan-shell canvas {
658
+ min-height: 460px;
659
+ }
660
+ }
661
+
662
+ @media (max-width: 720px) {
663
+ .fire-statusbar {
664
+ justify-content: flex-start;
665
+ }
666
+
667
+ .fire-pointer-overlay,
668
+ .fire-origin-overlay {
669
+ min-width: 0;
670
+ }
671
+
672
+ .fire-guide-flow,
673
+ .fire-guide-legend,
674
+ .fire-guide-readouts {
675
+ grid-template-columns: 1fr;
676
+ }
677
+
678
+ .fire-guide-definitions {
679
+ grid-template-columns: 1fr;
680
+ }
681
+ }