@typeonce/effect-machine-devtools 0.23.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 (91) hide show
  1. package/LICENSE +21 -0
  2. package/NOTICE +3 -0
  3. package/README.md +81 -0
  4. package/dist/DevServer.d.ts +42 -0
  5. package/dist/DevServer.d.ts.map +1 -0
  6. package/dist/DevServer.js +28 -0
  7. package/dist/DevServer.js.map +1 -0
  8. package/dist/DevToolsProtocol.d.ts +954 -0
  9. package/dist/DevToolsProtocol.d.ts.map +1 -0
  10. package/dist/DevToolsProtocol.js +96 -0
  11. package/dist/DevToolsProtocol.js.map +1 -0
  12. package/dist/MachineDocument.d.ts +396 -0
  13. package/dist/MachineDocument.d.ts.map +1 -0
  14. package/dist/MachineDocument.js +172 -0
  15. package/dist/MachineDocument.js.map +1 -0
  16. package/dist/MachineRegistry.d.ts +349 -0
  17. package/dist/MachineRegistry.d.ts.map +1 -0
  18. package/dist/MachineRegistry.js +46 -0
  19. package/dist/MachineRegistry.js.map +1 -0
  20. package/dist/MachineSimulator.d.ts +169 -0
  21. package/dist/MachineSimulator.d.ts.map +1 -0
  22. package/dist/MachineSimulator.js +98 -0
  23. package/dist/MachineSimulator.js.map +1 -0
  24. package/dist/ProjectInspector.d.ts +116 -0
  25. package/dist/ProjectInspector.d.ts.map +1 -0
  26. package/dist/ProjectInspector.js +82 -0
  27. package/dist/ProjectInspector.js.map +1 -0
  28. package/dist/bin.d.ts +3 -0
  29. package/dist/bin.d.ts.map +1 -0
  30. package/dist/bin.js +23 -0
  31. package/dist/bin.js.map +1 -0
  32. package/dist/client/assets/index-BGOhE3Ng.css +1 -0
  33. package/dist/client/assets/index-DiqGhsGR.js +14 -0
  34. package/dist/client/index.html +14 -0
  35. package/dist/index.d.ts +18 -0
  36. package/dist/index.d.ts.map +1 -0
  37. package/dist/index.js +18 -0
  38. package/dist/index.js.map +1 -0
  39. package/dist/internal/devServer.d.ts +9 -0
  40. package/dist/internal/devServer.d.ts.map +1 -0
  41. package/dist/internal/devServer.js +119 -0
  42. package/dist/internal/devServer.js.map +1 -0
  43. package/dist/internal/evaluationWorker.d.ts +3 -0
  44. package/dist/internal/evaluationWorker.d.ts.map +1 -0
  45. package/dist/internal/evaluationWorker.js +69 -0
  46. package/dist/internal/evaluationWorker.js.map +1 -0
  47. package/dist/internal/evaluationWorkerBootstrap.d.ts +2 -0
  48. package/dist/internal/evaluationWorkerBootstrap.d.ts.map +1 -0
  49. package/dist/internal/evaluationWorkerBootstrap.js +21 -0
  50. package/dist/internal/evaluationWorkerBootstrap.js.map +1 -0
  51. package/dist/internal/machineDocument.d.ts +4 -0
  52. package/dist/internal/machineDocument.d.ts.map +1 -0
  53. package/dist/internal/machineDocument.js +122 -0
  54. package/dist/internal/machineDocument.js.map +1 -0
  55. package/dist/internal/machineRegistry.d.ts +12 -0
  56. package/dist/internal/machineRegistry.d.ts.map +1 -0
  57. package/dist/internal/machineRegistry.js +97 -0
  58. package/dist/internal/machineRegistry.js.map +1 -0
  59. package/dist/internal/machineSimulator.d.ts +5 -0
  60. package/dist/internal/machineSimulator.d.ts.map +1 -0
  61. package/dist/internal/machineSimulator.js +156 -0
  62. package/dist/internal/machineSimulator.js.map +1 -0
  63. package/dist/internal/projectInspector.d.ts +11 -0
  64. package/dist/internal/projectInspector.d.ts.map +1 -0
  65. package/dist/internal/projectInspector.js +150 -0
  66. package/dist/internal/projectInspector.js.map +1 -0
  67. package/index.html +13 -0
  68. package/package.json +69 -0
  69. package/src/DevServer.ts +45 -0
  70. package/src/DevToolsProtocol.ts +146 -0
  71. package/src/MachineDocument.ts +264 -0
  72. package/src/MachineRegistry.ts +69 -0
  73. package/src/MachineSimulator.ts +154 -0
  74. package/src/ProjectInspector.ts +140 -0
  75. package/src/bin.ts +56 -0
  76. package/src/index.ts +20 -0
  77. package/src/internal/browser/example-machine.ts +134 -0
  78. package/src/internal/browser/machine-index.ts +81 -0
  79. package/src/internal/browser/main.ts +42 -0
  80. package/src/internal/browser/styles.css +817 -0
  81. package/src/internal/browser/text-tree.ts +214 -0
  82. package/src/internal/browser/visualizer-app.ts +659 -0
  83. package/src/internal/browser/visualizer-model.ts +173 -0
  84. package/src/internal/browser/visualizer.ts +31 -0
  85. package/src/internal/devServer.ts +171 -0
  86. package/src/internal/evaluationWorker.ts +138 -0
  87. package/src/internal/evaluationWorkerBootstrap.js +21 -0
  88. package/src/internal/machineDocument.ts +138 -0
  89. package/src/internal/machineRegistry.ts +128 -0
  90. package/src/internal/machineSimulator.ts +199 -0
  91. package/src/internal/projectInspector.ts +226 -0
@@ -0,0 +1,817 @@
1
+ :root {
2
+ color-scheme: dark;
3
+ font-family: Inter, ui-sans-serif, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;
4
+ color: #e8eaed;
5
+ background: #0b0c0e;
6
+ font-synthesis: none;
7
+ text-rendering: optimizeLegibility;
8
+ --surface: #0f1114;
9
+ --surface-raised: #14171b;
10
+ --line: #292d34;
11
+ --line-soft: #20242a;
12
+ --muted: #8e949e;
13
+ --accent: #75a7ff;
14
+ --accent-bg: rgb(75 125 255 / 18%);
15
+ --orange: #f0a35b;
16
+ }
17
+
18
+ * {
19
+ box-sizing: border-box;
20
+ }
21
+
22
+ html,
23
+ body,
24
+ #app {
25
+ min-width: 320px;
26
+ min-height: 100%;
27
+ margin: 0;
28
+ }
29
+
30
+ body {
31
+ background: #0b0c0e;
32
+ }
33
+
34
+ .devtools-shell {
35
+ display: grid;
36
+ min-height: 100vh;
37
+ grid-template-columns: 220px minmax(0, 1fr);
38
+ }
39
+
40
+ .machine-index {
41
+ min-width: 0;
42
+ height: 100vh;
43
+ padding: 8px 0;
44
+ border-right: 1px solid var(--line);
45
+ background: #0d0f12;
46
+ overflow: auto;
47
+ }
48
+
49
+ .machine-row {
50
+ display: grid;
51
+ width: 100%;
52
+ grid-template-columns: 8px minmax(0, 1fr);
53
+ gap: 3px 8px;
54
+ padding: 10px 12px;
55
+ border: 0;
56
+ color: #c9cdd2;
57
+ background: transparent;
58
+ text-align: left;
59
+ cursor: pointer;
60
+ user-select: none;
61
+ }
62
+
63
+ .machine-row:hover,
64
+ .machine-row:focus-visible {
65
+ color: #fff;
66
+ background: #171a1f;
67
+ outline: none;
68
+ }
69
+
70
+ .machine-row.is-selected {
71
+ color: #fff;
72
+ background: rgb(75 125 255 / 18%);
73
+ }
74
+
75
+ .machine-row-status {
76
+ width: 6px;
77
+ height: 6px;
78
+ align-self: center;
79
+ grid-row: 1;
80
+ border-radius: 50%;
81
+ background: #646b75;
82
+ }
83
+
84
+ .machine-row-status.status-ready {
85
+ background: #67c894;
86
+ }
87
+
88
+ .machine-row-status.status-partial {
89
+ background: var(--orange);
90
+ }
91
+
92
+ .machine-row-status.status-error {
93
+ background: #df6964;
94
+ }
95
+
96
+ .machine-row-label,
97
+ .machine-row-file {
98
+ min-width: 0;
99
+ overflow: hidden;
100
+ text-overflow: ellipsis;
101
+ white-space: nowrap;
102
+ }
103
+
104
+ .machine-row-label {
105
+ grid-column: 2;
106
+ font: 600 12px/1.3 ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;
107
+ }
108
+
109
+ .machine-row-file {
110
+ grid-column: 2;
111
+ color: #727983;
112
+ font: 10px/1.3 ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;
113
+ }
114
+
115
+ .machine-index-empty {
116
+ padding: 12px;
117
+ color: #646b75;
118
+ font: 11px/1.4 ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;
119
+ }
120
+
121
+ .machine-view {
122
+ min-width: 0;
123
+ }
124
+
125
+ .registry-empty,
126
+ .connection-failure {
127
+ display: grid;
128
+ min-height: 100vh;
129
+ align-content: start;
130
+ gap: 7px;
131
+ padding: 28px;
132
+ color: #7f8690;
133
+ font: 12px/1.6 ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;
134
+ }
135
+
136
+ .registry-empty strong {
137
+ color: #d4d7dc;
138
+ font-size: 13px;
139
+ }
140
+
141
+ .connection-failure {
142
+ color: #e4b4b1;
143
+ }
144
+
145
+ button {
146
+ font: inherit;
147
+ }
148
+
149
+ .app-shell,
150
+ .workspace {
151
+ min-height: 100vh;
152
+ }
153
+
154
+ .workspace {
155
+ display: grid;
156
+ height: 100vh;
157
+ grid-template-columns: minmax(420px, 1fr) minmax(380px, 46%);
158
+ }
159
+
160
+ .tree-panel {
161
+ display: flex;
162
+ min-width: 0;
163
+ height: 100vh;
164
+ flex-direction: column;
165
+ border-right: 1px solid var(--line);
166
+ overflow: hidden;
167
+ }
168
+
169
+ .diagnostics {
170
+ border-bottom: 1px solid var(--line);
171
+ background: #121418;
172
+ }
173
+
174
+ .diagnostic {
175
+ display: flex;
176
+ min-height: 36px;
177
+ flex-wrap: wrap;
178
+ align-items: center;
179
+ gap: 8px;
180
+ padding: 8px 16px;
181
+ color: #aeb4bd;
182
+ font-size: 11px;
183
+ }
184
+
185
+ .diagnostic + .diagnostic {
186
+ border-top: 1px solid var(--line-soft);
187
+ }
188
+
189
+ .badge-warning {
190
+ color: #e9c89f;
191
+ background: rgb(240 163 91 / 13%);
192
+ }
193
+
194
+ .badge-error {
195
+ color: #f2aaa7;
196
+ background: rgb(224 89 84 / 14%);
197
+ }
198
+
199
+ .toolbar {
200
+ display: flex;
201
+ min-height: 46px;
202
+ align-items: center;
203
+ justify-content: space-between;
204
+ gap: 2px;
205
+ padding: 7px 16px;
206
+ border-bottom: 1px solid var(--line);
207
+ }
208
+
209
+ .toolbar-actions,
210
+ .runtime-summary {
211
+ display: flex;
212
+ align-items: center;
213
+ }
214
+
215
+ .toolbar-actions {
216
+ gap: 2px;
217
+ }
218
+
219
+ .runtime-summary {
220
+ gap: 7px;
221
+ color: #7f8690;
222
+ font: 11px/1 ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;
223
+ }
224
+
225
+ .runtime-dot {
226
+ width: 6px;
227
+ height: 6px;
228
+ border-radius: 50%;
229
+ background: #555c65;
230
+ }
231
+
232
+ .runtime-dot.has-snapshot {
233
+ background: var(--accent);
234
+ }
235
+
236
+ .toolbar-button {
237
+ padding: 6px 9px;
238
+ border: 0;
239
+ border-radius: 4px;
240
+ color: var(--muted);
241
+ background: transparent;
242
+ font-size: 12px;
243
+ cursor: pointer;
244
+ }
245
+
246
+ .toolbar-button:not(:disabled):hover,
247
+ .toolbar-button:not(:disabled):focus-visible {
248
+ color: #fff;
249
+ background: #1b1e23;
250
+ outline: none;
251
+ }
252
+
253
+ .toolbar-button:disabled {
254
+ color: #50545c;
255
+ cursor: default;
256
+ }
257
+
258
+ .topology-tree {
259
+ flex: 1;
260
+ min-height: 0;
261
+ padding: 23px 18px 34px;
262
+ overflow: auto;
263
+ font: 13px/1.5 ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;
264
+ }
265
+
266
+ .machine-id {
267
+ margin: 0 8px 16px;
268
+ color: #fff;
269
+ font-weight: 700;
270
+ }
271
+
272
+ .enabled-events {
273
+ display: flex;
274
+ min-height: 32px;
275
+ flex-wrap: wrap;
276
+ align-items: center;
277
+ gap: 6px;
278
+ margin: 0 8px 14px;
279
+ padding-bottom: 13px;
280
+ border-bottom: 1px solid var(--line-soft);
281
+ }
282
+
283
+ .enabled-events-label,
284
+ .enabled-events-empty {
285
+ color: #6f7680;
286
+ font-size: 10px;
287
+ }
288
+
289
+ .enabled-events-label {
290
+ margin-right: 3px;
291
+ text-transform: uppercase;
292
+ }
293
+
294
+ .simulation-feedback {
295
+ margin: -5px 8px 14px;
296
+ color: #7f99c4;
297
+ font: 10px/1.5 ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;
298
+ }
299
+
300
+ .simulation-feedback[data-status="indeterminate"] {
301
+ color: #d9ae7e;
302
+ }
303
+
304
+ .simulation-feedback[data-status="blocked"] {
305
+ color: #d58d89;
306
+ }
307
+
308
+ .enabled-events[hidden],
309
+ .simulation-feedback[hidden] {
310
+ display: none;
311
+ }
312
+
313
+ .event-button {
314
+ padding: 4px 7px;
315
+ border: 0;
316
+ border-radius: 3px;
317
+ color: #aeb5bf;
318
+ background: #1b1f25;
319
+ font: 11px/1 ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;
320
+ cursor: pointer;
321
+ }
322
+
323
+ .event-button:hover,
324
+ .event-button:focus-visible,
325
+ .event-button.is-selected {
326
+ color: #d9e6ff;
327
+ background: rgb(75 125 255 / 22%);
328
+ outline: none;
329
+ }
330
+
331
+ .topology-node {
332
+ background: transparent;
333
+ }
334
+
335
+ .topology-empty {
336
+ display: grid;
337
+ max-width: 420px;
338
+ gap: 7px;
339
+ margin: 26px 8px;
340
+ color: #7f8690;
341
+ font: 12px/1.6 Inter, ui-sans-serif, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;
342
+ }
343
+
344
+ .topology-empty strong {
345
+ color: #d4d7dc;
346
+ font: 600 13px/1.4 ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;
347
+ }
348
+
349
+ .topology-node.is-selected {
350
+ background: var(--accent-bg);
351
+ }
352
+
353
+ .state-row {
354
+ display: grid;
355
+ width: 100%;
356
+ min-height: 38px;
357
+ grid-template-columns: 14px 10px minmax(90px, auto) 1fr;
358
+ align-items: center;
359
+ gap: 8px;
360
+ padding: 6px 8px 6px calc(8px + var(--depth) * 22px);
361
+ border: 0;
362
+ color: #d7d9dc;
363
+ background: transparent;
364
+ text-align: left;
365
+ cursor: pointer;
366
+ user-select: none;
367
+ }
368
+
369
+ .state-row:hover,
370
+ .state-row:focus-visible {
371
+ color: #fff;
372
+ background: #1b1e23;
373
+ outline: none;
374
+ }
375
+
376
+ .state-row[aria-selected="true"] {
377
+ color: #fff;
378
+ }
379
+
380
+ .topology-node.is-selected > .state-row {
381
+ color: #fff;
382
+ }
383
+
384
+ .topology-node.is-related-target > .state-row {
385
+ background: rgb(75 125 255 / 9%);
386
+ }
387
+
388
+ .topology-node.is-related-source > .state-row {
389
+ background: rgb(172 104 224 / 8%);
390
+ }
391
+
392
+ .topology-node.is-related-update > .state-row {
393
+ background: rgb(240 163 91 / 8%);
394
+ }
395
+
396
+ .state-disclosure {
397
+ color: #737a84;
398
+ font-size: 11px;
399
+ }
400
+
401
+ .state-status {
402
+ width: 7px;
403
+ height: 7px;
404
+ border: 1px solid #686f78;
405
+ border-radius: 50%;
406
+ }
407
+
408
+ .state-status.is-active {
409
+ border-color: var(--accent);
410
+ background: var(--accent);
411
+ box-shadow: 0 0 0 3px rgb(117 167 255 / 10%);
412
+ }
413
+
414
+ .state-label {
415
+ min-width: 0;
416
+ overflow: hidden;
417
+ text-overflow: ellipsis;
418
+ white-space: nowrap;
419
+ }
420
+
421
+ .state-markers,
422
+ .inspector-eyebrow,
423
+ .card-title,
424
+ .card-flags,
425
+ .branch-main {
426
+ display: flex;
427
+ align-items: center;
428
+ gap: 6px;
429
+ }
430
+
431
+ .state-markers {
432
+ justify-self: end;
433
+ }
434
+
435
+ .badge {
436
+ display: inline-flex;
437
+ align-items: center;
438
+ min-height: 18px;
439
+ padding: 2px 6px;
440
+ border-radius: 3px;
441
+ color: #a8afb8;
442
+ background: #20242a;
443
+ font: 600 10px/1 ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;
444
+ letter-spacing: 0.02em;
445
+ white-space: nowrap;
446
+ }
447
+
448
+ .badge-active {
449
+ color: #b9d2ff;
450
+ background: rgb(75 125 255 / 22%);
451
+ }
452
+
453
+ .badge-initial {
454
+ color: #e9c89f;
455
+ background: rgb(240 163 91 / 13%);
456
+ }
457
+
458
+ .badge-trigger {
459
+ color: #b9d2ff;
460
+ background: rgb(75 125 255 / 16%);
461
+ }
462
+
463
+ .badge-condition {
464
+ color: #d9b8ef;
465
+ background: rgb(172 104 224 / 15%);
466
+ }
467
+
468
+ .badge-activity {
469
+ color: #a8ddc4;
470
+ background: rgb(78 181 131 / 14%);
471
+ }
472
+
473
+ .badge-count {
474
+ color: #858c96;
475
+ background: transparent;
476
+ }
477
+
478
+ .inspector {
479
+ min-width: 0;
480
+ height: 100vh;
481
+ padding: 28px;
482
+ overflow: auto;
483
+ background: var(--surface);
484
+ }
485
+
486
+ .failure-shell {
487
+ display: grid;
488
+ min-height: 100vh;
489
+ align-content: start;
490
+ gap: 12px;
491
+ padding: 32px;
492
+ color: #d6d8dc;
493
+ background: #0b0c0e;
494
+ }
495
+
496
+ .failure-kind {
497
+ color: #f2aaa7;
498
+ font: 600 10px/1.2 ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;
499
+ letter-spacing: 0.08em;
500
+ text-transform: uppercase;
501
+ }
502
+
503
+ .failure-shell h1 {
504
+ margin: 0;
505
+ font: 600 18px/1.4 ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;
506
+ }
507
+
508
+ .failure-shell pre {
509
+ max-width: 900px;
510
+ margin: 4px 0 0;
511
+ padding: 14px 16px;
512
+ border-left: 2px solid #a54743;
513
+ color: #e4b4b1;
514
+ background: #151112;
515
+ font: 12px/1.6 ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;
516
+ overflow: auto;
517
+ white-space: pre-wrap;
518
+ }
519
+
520
+ .failure-shell p {
521
+ margin: 0;
522
+ color: #7f8690;
523
+ font-size: 12px;
524
+ }
525
+
526
+ .inspector-empty {
527
+ max-width: 420px;
528
+ color: var(--muted);
529
+ }
530
+
531
+ .inspector-empty-kind {
532
+ color: var(--orange);
533
+ font: 600 10px/1.2 ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;
534
+ letter-spacing: 0.08em;
535
+ text-transform: uppercase;
536
+ }
537
+
538
+ .inspector-empty h2,
539
+ .inspector-header h2 {
540
+ margin: 9px 0 0;
541
+ color: #f1f2f4;
542
+ font: 600 18px/1.4 ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;
543
+ overflow-wrap: anywhere;
544
+ }
545
+
546
+ .inspector-empty p,
547
+ .section-empty,
548
+ .empty-inline {
549
+ color: var(--muted);
550
+ font-size: 12px;
551
+ line-height: 1.6;
552
+ }
553
+
554
+ .inspector-header {
555
+ padding-bottom: 24px;
556
+ border-bottom: 1px solid var(--line);
557
+ }
558
+
559
+ .state-annotations {
560
+ margin-top: 18px;
561
+ }
562
+
563
+ .state-annotations p {
564
+ margin: 7px 0 0;
565
+ color: #aeb4bd;
566
+ font-size: 12px;
567
+ line-height: 1.6;
568
+ }
569
+
570
+ .state-annotations .state-documentation {
571
+ color: #7f8690;
572
+ font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;
573
+ white-space: pre-wrap;
574
+ }
575
+
576
+ .breadcrumbs {
577
+ display: flex;
578
+ min-width: 0;
579
+ flex-wrap: wrap;
580
+ align-items: center;
581
+ gap: 5px;
582
+ margin-bottom: 16px;
583
+ }
584
+
585
+ .breadcrumb-separator {
586
+ color: #555c65;
587
+ }
588
+
589
+ .state-link {
590
+ max-width: 100%;
591
+ padding: 0;
592
+ border: 0;
593
+ color: #9bbfff;
594
+ background: transparent;
595
+ font: 11px/1.5 ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;
596
+ overflow-wrap: anywhere;
597
+ text-align: left;
598
+ cursor: pointer;
599
+ }
600
+
601
+ .state-link:hover,
602
+ .state-link:focus-visible {
603
+ color: #d5e4ff;
604
+ text-decoration: underline;
605
+ outline: none;
606
+ }
607
+
608
+ .metadata {
609
+ display: grid;
610
+ grid-template-columns: minmax(74px, auto) minmax(0, 1fr);
611
+ gap: 8px 16px;
612
+ margin: 20px 0 0;
613
+ font-size: 11px;
614
+ }
615
+
616
+ .metadata dt {
617
+ color: #727983;
618
+ }
619
+
620
+ .metadata dd {
621
+ min-width: 0;
622
+ margin: 0;
623
+ color: #d2d5da;
624
+ font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;
625
+ overflow-wrap: anywhere;
626
+ }
627
+
628
+ .inspector-section {
629
+ margin-top: 28px;
630
+ }
631
+
632
+ .section-heading {
633
+ display: flex;
634
+ align-items: center;
635
+ justify-content: space-between;
636
+ margin-bottom: 11px;
637
+ }
638
+
639
+ .section-heading h3 {
640
+ margin: 0;
641
+ color: #c9cdd2;
642
+ font-size: 12px;
643
+ font-weight: 650;
644
+ }
645
+
646
+ .section-count {
647
+ color: #737a84;
648
+ font: 11px/1 ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;
649
+ }
650
+
651
+ .inspection-card {
652
+ margin-top: 8px;
653
+ border: 1px solid var(--line-soft);
654
+ background: var(--surface-raised);
655
+ }
656
+
657
+ .card-header {
658
+ display: flex;
659
+ min-height: 42px;
660
+ align-items: center;
661
+ justify-content: space-between;
662
+ gap: 12px;
663
+ padding: 10px 12px;
664
+ }
665
+
666
+ .transition-source {
667
+ display: flex;
668
+ align-items: baseline;
669
+ gap: 12px;
670
+ padding: 0 12px 10px;
671
+ color: #727983;
672
+ font-size: 11px;
673
+ }
674
+
675
+ .card-title {
676
+ min-width: 0;
677
+ }
678
+
679
+ .card-title strong {
680
+ color: #e2e4e7;
681
+ font: 600 12px/1.4 ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;
682
+ overflow-wrap: anywhere;
683
+ }
684
+
685
+ .branch-list {
686
+ border-top: 1px solid var(--line-soft);
687
+ }
688
+
689
+ .branch-row {
690
+ padding: 11px 12px 13px;
691
+ }
692
+
693
+ .branch-row + .branch-row {
694
+ border-top: 1px solid var(--line-soft);
695
+ }
696
+
697
+ .branch-main {
698
+ min-width: 0;
699
+ }
700
+
701
+ .branch-arrow {
702
+ color: var(--accent);
703
+ }
704
+
705
+ .branch-target {
706
+ color: #d7d9dc;
707
+ font: 11px/1.4 ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;
708
+ overflow-wrap: anywhere;
709
+ }
710
+
711
+ .branch-row .metadata,
712
+ .activity-card .metadata,
713
+ .incoming-card .metadata {
714
+ margin-top: 10px;
715
+ }
716
+
717
+ .incoming-card {
718
+ padding-bottom: 12px;
719
+ }
720
+
721
+ .incoming-card .metadata {
722
+ padding: 0 12px;
723
+ }
724
+
725
+ .branch-updates {
726
+ display: grid;
727
+ grid-template-columns: minmax(74px, auto) minmax(0, 1fr);
728
+ gap: 8px 16px;
729
+ margin-top: 9px;
730
+ font-size: 11px;
731
+ }
732
+
733
+ .branch-updates-label {
734
+ color: #727983;
735
+ }
736
+
737
+ .branch-updates .state-link + .state-link {
738
+ grid-column: 2;
739
+ }
740
+
741
+ .activity-card {
742
+ padding-bottom: 12px;
743
+ }
744
+
745
+ .activity-card .metadata {
746
+ padding: 0 12px;
747
+ }
748
+
749
+ @media (max-width: 900px) {
750
+ .devtools-shell {
751
+ grid-template-columns: 1fr;
752
+ }
753
+
754
+ .machine-index {
755
+ display: flex;
756
+ height: auto;
757
+ min-height: 54px;
758
+ padding: 0;
759
+ border-right: 0;
760
+ border-bottom: 1px solid var(--line);
761
+ overflow-x: auto;
762
+ }
763
+
764
+ .machine-row {
765
+ width: min(220px, 70vw);
766
+ flex: 0 0 auto;
767
+ }
768
+
769
+ .workspace {
770
+ height: auto;
771
+ grid-template-columns: 1fr;
772
+ }
773
+
774
+ .tree-panel {
775
+ height: 58vh;
776
+ min-height: 58vh;
777
+ border-right: 0;
778
+ border-bottom: 1px solid var(--line);
779
+ }
780
+
781
+ .inspector {
782
+ height: auto;
783
+ min-height: 42vh;
784
+ }
785
+ }
786
+
787
+ @media (max-width: 600px) {
788
+ .toolbar {
789
+ align-items: flex-start;
790
+ padding-inline: 10px;
791
+ }
792
+
793
+ .toolbar-actions {
794
+ flex-wrap: wrap;
795
+ justify-content: flex-end;
796
+ }
797
+
798
+ .runtime-summary {
799
+ padding-top: 8px;
800
+ }
801
+
802
+ .topology-tree,
803
+ .inspector {
804
+ padding-inline: 14px;
805
+ }
806
+
807
+ .state-markers .badge-count {
808
+ display: none;
809
+ }
810
+ }
811
+
812
+ @media (prefers-reduced-motion: no-preference) {
813
+ .state-row,
814
+ .toolbar-button {
815
+ transition: color 120ms ease, background-color 120ms ease;
816
+ }
817
+ }