@typeonce/effect-machine-devtools 0.24.0 → 0.26.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 (82) hide show
  1. package/NOTICE +4 -0
  2. package/README.md +13 -13
  3. package/dist/DevToolsProtocol.d.ts +66 -630
  4. package/dist/DevToolsProtocol.d.ts.map +1 -1
  5. package/dist/DevToolsProtocol.js +0 -190
  6. package/dist/DevToolsProtocol.js.map +1 -1
  7. package/dist/MachineDocument.d.ts +38 -18
  8. package/dist/MachineDocument.d.ts.map +1 -1
  9. package/dist/MachineDocument.js +14 -12
  10. package/dist/MachineDocument.js.map +1 -1
  11. package/dist/MachineRegistry.d.ts +22 -2
  12. package/dist/MachineRegistry.d.ts.map +1 -1
  13. package/dist/MachineWalkthrough.d.ts +171 -0
  14. package/dist/MachineWalkthrough.d.ts.map +1 -0
  15. package/dist/MachineWalkthrough.js +98 -0
  16. package/dist/MachineWalkthrough.js.map +1 -0
  17. package/dist/ProjectInspector.d.ts +0 -2
  18. package/dist/ProjectInspector.d.ts.map +1 -1
  19. package/dist/ProjectInspector.js.map +1 -1
  20. package/dist/client/assets/index-BsorPSDS.css +1 -0
  21. package/dist/client/assets/index-eiptehRd.js +37 -0
  22. package/dist/client/index.html +4 -4
  23. package/dist/index.d.ts +2 -2
  24. package/dist/index.d.ts.map +1 -1
  25. package/dist/index.js +2 -2
  26. package/dist/index.js.map +1 -1
  27. package/dist/internal/devServer.d.ts.map +1 -1
  28. package/dist/internal/devServer.js +4 -64
  29. package/dist/internal/devServer.js.map +1 -1
  30. package/dist/internal/evaluationWorker.d.ts.map +1 -1
  31. package/dist/internal/evaluationWorker.js +7 -263
  32. package/dist/internal/evaluationWorker.js.map +1 -1
  33. package/dist/internal/machineDocument.d.ts.map +1 -1
  34. package/dist/internal/machineDocument.js +3 -1
  35. package/dist/internal/machineDocument.js.map +1 -1
  36. package/dist/internal/machineWalkthrough.d.ts +26 -0
  37. package/dist/internal/machineWalkthrough.d.ts.map +1 -0
  38. package/dist/internal/machineWalkthrough.js +256 -0
  39. package/dist/internal/machineWalkthrough.js.map +1 -0
  40. package/dist/internal/projectInspector.d.ts.map +1 -1
  41. package/dist/internal/projectInspector.js +1 -11
  42. package/dist/internal/projectInspector.js.map +1 -1
  43. package/index.html +2 -2
  44. package/package.json +8 -7
  45. package/src/DevToolsProtocol.ts +0 -285
  46. package/src/MachineDocument.ts +21 -19
  47. package/src/MachineWalkthrough.ts +199 -0
  48. package/src/ProjectInspector.ts +0 -5
  49. package/src/index.ts +2 -2
  50. package/src/internal/browser/chart-layout-policy.ts +206 -0
  51. package/src/internal/browser/chart-layout.ts +686 -0
  52. package/src/internal/browser/chart-model.ts +244 -0
  53. package/src/internal/browser/chart-renderer.ts +774 -0
  54. package/src/internal/browser/example-machine.ts +15 -6
  55. package/src/internal/browser/input-form.ts +1 -418
  56. package/src/internal/browser/invoke-outcomes-example.ts +231 -0
  57. package/src/internal/browser/parallel-completion-example.ts +199 -0
  58. package/src/internal/browser/planner-example.ts +2 -0
  59. package/src/internal/browser/protocol-events-example.ts +200 -0
  60. package/src/internal/browser/styles.css +974 -342
  61. package/src/internal/browser/transition-semantics-example.ts +245 -0
  62. package/src/internal/browser/visualizer-analysis.ts +52 -0
  63. package/src/internal/browser/visualizer-app.ts +874 -706
  64. package/src/internal/browser/visualizer-model.ts +104 -0
  65. package/src/internal/devServer.ts +4 -82
  66. package/src/internal/evaluationWorker.ts +7 -371
  67. package/src/internal/machineDocument.ts +3 -1
  68. package/src/internal/machineWalkthrough.ts +355 -0
  69. package/src/internal/projectInspector.ts +3 -31
  70. package/dist/MachineSimulator.d.ts +0 -169
  71. package/dist/MachineSimulator.d.ts.map +0 -1
  72. package/dist/MachineSimulator.js +0 -98
  73. package/dist/MachineSimulator.js.map +0 -1
  74. package/dist/client/assets/index-B49Tjawc.js +0 -14
  75. package/dist/client/assets/index-BKH0cOG2.css +0 -1
  76. package/dist/internal/machineSimulator.d.ts +0 -5
  77. package/dist/internal/machineSimulator.d.ts.map +0 -1
  78. package/dist/internal/machineSimulator.js +0 -156
  79. package/dist/internal/machineSimulator.js.map +0 -1
  80. package/src/MachineSimulator.ts +0 -154
  81. package/src/internal/browser/simulation-client.ts +0 -20
  82. package/src/internal/machineSimulator.ts +0 -199
@@ -23,7 +23,7 @@ html,
23
23
  body,
24
24
  #app {
25
25
  min-width: 320px;
26
- min-height: 100%;
26
+ height: 100%;
27
27
  margin: 0;
28
28
  }
29
29
 
@@ -32,27 +32,40 @@ body {
32
32
  }
33
33
 
34
34
  .devtools-shell {
35
- display: grid;
36
- min-height: 100vh;
37
- grid-template-columns: 220px minmax(0, 1fr);
35
+ display: flex;
36
+ width: 100vw;
37
+ height: 100vh;
38
+ flex-direction: column;
39
+ overflow: hidden;
38
40
  }
39
41
 
40
42
  .machine-index {
43
+ display: flex;
44
+ width: 100%;
41
45
  min-width: 0;
42
- height: 100vh;
43
- padding: 8px 0;
44
- border-right: 1px solid var(--line);
46
+ min-height: 48px;
47
+ flex: 0 0 auto;
48
+ padding: 0;
49
+ border-bottom: 1px solid var(--line);
45
50
  background: #0d0f12;
46
- overflow: auto;
51
+ overflow-x: auto;
52
+ overflow-y: hidden;
53
+ scrollbar-width: thin;
47
54
  }
48
55
 
49
56
  .machine-row {
50
- display: grid;
51
- width: 100%;
52
- grid-template-columns: 8px minmax(0, 1fr);
53
- gap: 3px 8px;
54
- padding: 10px 12px;
57
+ position: relative;
58
+ display: flex;
59
+ width: auto;
60
+ max-width: 280px;
61
+ min-width: 148px;
62
+ min-height: 48px;
63
+ flex: 0 0 auto;
64
+ align-items: center;
65
+ gap: 8px;
66
+ padding: 0 16px;
55
67
  border: 0;
68
+ border-right: 1px solid var(--line-soft);
56
69
  color: #c9cdd2;
57
70
  background: transparent;
58
71
  text-align: left;
@@ -69,14 +82,23 @@ body {
69
82
 
70
83
  .machine-row.is-selected {
71
84
  color: #fff;
72
- background: rgb(75 125 255 / 18%);
85
+ background: rgb(75 125 255 / 12%);
86
+ }
87
+
88
+ .machine-row.is-selected::after {
89
+ position: absolute;
90
+ right: 0;
91
+ bottom: 0;
92
+ left: 0;
93
+ height: 2px;
94
+ background: var(--accent);
95
+ content: "";
73
96
  }
74
97
 
75
98
  .machine-row-status {
76
99
  width: 6px;
77
100
  height: 6px;
78
- align-self: center;
79
- grid-row: 1;
101
+ flex: 0 0 auto;
80
102
  border-radius: 50%;
81
103
  background: #646b75;
82
104
  }
@@ -102,24 +124,24 @@ body {
102
124
  }
103
125
 
104
126
  .machine-row-label {
105
- grid-column: 2;
106
127
  font: 600 12px/1.3 ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;
107
128
  }
108
129
 
109
130
  .machine-row-file {
110
- grid-column: 2;
111
- color: #727983;
112
- font: 10px/1.3 ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;
131
+ display: none;
113
132
  }
114
133
 
115
134
  .machine-index-empty {
116
- padding: 12px;
135
+ padding: 16px;
117
136
  color: #646b75;
118
137
  font: 11px/1.4 ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;
119
138
  }
120
139
 
121
140
  .machine-view {
122
141
  min-width: 0;
142
+ min-height: 0;
143
+ flex: 1;
144
+ overflow: hidden;
123
145
  }
124
146
 
125
147
  .registry-empty,
@@ -148,21 +170,22 @@ button {
148
170
 
149
171
  .app-shell,
150
172
  .workspace {
151
- min-height: 100vh;
173
+ width: 100%;
174
+ height: 100%;
175
+ min-height: 0;
152
176
  }
153
177
 
154
178
  .workspace {
155
- display: grid;
156
- height: 100vh;
157
- grid-template-columns: minmax(420px, 1fr) minmax(380px, 46%);
179
+ position: relative;
158
180
  }
159
181
 
160
- .tree-panel {
182
+ .chart-panel {
183
+ position: relative;
161
184
  display: flex;
185
+ width: 100%;
162
186
  min-width: 0;
163
- height: 100vh;
187
+ height: 100%;
164
188
  flex-direction: column;
165
- border-right: 1px solid var(--line);
166
189
  overflow: hidden;
167
190
  }
168
191
 
@@ -207,6 +230,7 @@ button {
207
230
  }
208
231
 
209
232
  .toolbar-actions,
233
+ .zoom-controls,
210
234
  .runtime-summary {
211
235
  display: flex;
212
236
  align-items: center;
@@ -216,6 +240,35 @@ button {
216
240
  gap: 2px;
217
241
  }
218
242
 
243
+ .zoom-controls {
244
+ position: absolute;
245
+ z-index: 5;
246
+ bottom: 14px;
247
+ left: 14px;
248
+ flex: 0 0 auto;
249
+ gap: 1px;
250
+ padding: 2px;
251
+ border: 1px solid var(--line-soft);
252
+ border-radius: 4px;
253
+ background: rgb(13 15 18 / 94%);
254
+ box-shadow: 0 8px 28px rgb(0 0 0 / 32%);
255
+ }
256
+
257
+ .chart-panel.has-walkthrough .zoom-controls {
258
+ bottom: 88px;
259
+ }
260
+
261
+ .zoom-button {
262
+ min-width: 28px;
263
+ padding-inline: 7px;
264
+ }
265
+
266
+ .zoom-value {
267
+ min-width: 46px;
268
+ color: #aeb4bd;
269
+ font: 10px/1 ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;
270
+ }
271
+
219
272
  .runtime-summary {
220
273
  gap: 7px;
221
274
  color: #7f8690;
@@ -255,175 +308,614 @@ button {
255
308
  cursor: default;
256
309
  }
257
310
 
258
- .topology-tree {
311
+ .toolbar-button[aria-pressed="true"] {
312
+ color: #dce8ff;
313
+ background: rgb(65 103 165 / 28%);
314
+ }
315
+
316
+ .analysis-button {
317
+ display: inline-flex;
318
+ align-items: center;
319
+ gap: 6px;
320
+ }
321
+
322
+ .analysis-button[hidden] {
323
+ display: none;
324
+ }
325
+
326
+ .analysis-button-count {
327
+ min-width: 17px;
328
+ padding: 2px 5px;
329
+ border-radius: 8px;
330
+ color: #9da6b3;
331
+ background: #20242a;
332
+ font: 10px/1 ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;
333
+ text-align: center;
334
+ }
335
+
336
+ .topology-chart {
337
+ display: flex;
259
338
  flex: 1;
260
339
  min-height: 0;
261
- padding: 23px 18px 34px;
262
- overflow: auto;
340
+ flex-direction: column;
263
341
  font: 13px/1.5 ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;
264
342
  }
265
343
 
266
- .machine-id {
267
- margin: 0 8px 16px;
268
- color: #fff;
269
- font-weight: 700;
344
+ .topology-empty {
345
+ display: grid;
346
+ max-width: 420px;
347
+ gap: 7px;
348
+ margin: 26px 8px;
349
+ color: #7f8690;
350
+ font: 12px/1.6 Inter, ui-sans-serif, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;
270
351
  }
271
352
 
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);
353
+ .topology-empty strong {
354
+ color: #d4d7dc;
355
+ font: 600 13px/1.4 ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;
281
356
  }
282
357
 
283
- .enabled-events-label,
284
- .enabled-events-empty {
285
- color: #6f7680;
286
- font-size: 10px;
358
+ .chart-host,
359
+ .chart-viewport {
360
+ width: 100%;
361
+ height: 100%;
287
362
  }
288
363
 
289
- .enabled-events-label {
290
- margin-right: 3px;
291
- text-transform: uppercase;
364
+ .chart-host {
365
+ flex: 1;
366
+ min-height: 0;
367
+ position: relative;
292
368
  }
293
369
 
294
- .simulation-feedback {
295
- margin: -5px 8px 14px;
296
- color: #7f99c4;
297
- font: 10px/1.5 ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;
370
+ .chart-viewport {
371
+ overflow: auto;
372
+ overscroll-behavior: contain;
373
+ cursor: grab;
374
+ touch-action: pan-x pan-y;
298
375
  }
299
376
 
300
- .simulation-feedback[data-status="pending"] {
301
- color: #d9ae7e;
377
+ .chart-viewport.is-panning,
378
+ .chart-viewport.is-panning .chart-state,
379
+ .chart-viewport.is-panning .chart-edge-hit,
380
+ .chart-viewport.is-panning .chart-edge-label {
381
+ cursor: grabbing;
382
+ user-select: none;
302
383
  }
303
384
 
304
- .simulation-feedback[data-status="error"] {
305
- color: #d58d89;
385
+ .chart-stage {
386
+ position: relative;
387
+ min-width: 100%;
388
+ min-height: 100%;
306
389
  }
307
390
 
308
- .enabled-events[hidden],
309
- .simulation-feedback[hidden] {
310
- display: none;
391
+ .chart-canvas {
392
+ position: absolute;
393
+ top: 0;
394
+ left: 0;
395
+ transform-origin: top left;
311
396
  }
312
397
 
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;
398
+ .chart-regions,
399
+ .chart-edges,
400
+ .chart-nodes,
401
+ .chart-labels {
402
+ position: absolute;
403
+ inset: 0;
321
404
  }
322
405
 
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;
406
+ .chart-regions {
407
+ z-index: 0;
408
+ pointer-events: none;
329
409
  }
330
410
 
331
- .event-button:disabled {
332
- color: #666d76;
333
- cursor: wait;
411
+ .chart-edges {
412
+ z-index: 1;
413
+ overflow: visible;
414
+ pointer-events: none;
334
415
  }
335
416
 
336
- .topology-node {
337
- background: transparent;
417
+ .chart-nodes {
418
+ z-index: 2;
419
+ pointer-events: none;
338
420
  }
339
421
 
340
- .topology-empty {
341
- display: grid;
342
- max-width: 420px;
343
- gap: 7px;
344
- margin: 26px 8px;
345
- color: #7f8690;
346
- font: 12px/1.6 Inter, ui-sans-serif, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;
422
+ .chart-labels {
423
+ z-index: 3;
424
+ pointer-events: none;
347
425
  }
348
426
 
349
- .topology-empty strong {
350
- color: #d4d7dc;
351
- font: 600 13px/1.4 ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;
427
+ .chart-compound {
428
+ position: absolute;
429
+ border: 1px solid #272c33;
430
+ border-radius: 5px;
431
+ background: rgb(18 21 25 / 72%);
352
432
  }
353
433
 
354
- .topology-node.is-selected {
355
- background: var(--accent-bg);
434
+ .chart-compound-parallel {
435
+ border-color: #303845;
436
+ background: rgb(20 24 30 / 74%);
356
437
  }
357
438
 
358
- .state-row {
359
- display: grid;
360
- width: 100%;
361
- min-height: 38px;
362
- grid-template-columns: 14px 10px minmax(90px, auto) 1fr;
363
- align-items: center;
364
- gap: 8px;
365
- padding: 6px 8px 6px calc(8px + var(--depth) * 22px);
366
- border: 0;
367
- color: #d7d9dc;
368
- background: transparent;
439
+ .chart-unconnected-region {
440
+ position: absolute;
441
+ border: 1px dashed #353b44;
442
+ border-radius: 5px;
443
+ background: rgb(14 16 19 / 58%);
444
+ }
445
+
446
+ .chart-unconnected-region-label {
447
+ position: absolute;
448
+ top: 17px;
449
+ left: 24px;
450
+ color: #727984;
451
+ font: 9px/1 ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;
452
+ letter-spacing: 0.05em;
453
+ text-transform: uppercase;
454
+ }
455
+
456
+ .chart-state {
457
+ position: absolute;
458
+ display: block;
459
+ padding: 16px;
460
+ border: 1px solid #30363f;
461
+ border-radius: 4px;
462
+ color: #d9dce1;
463
+ background: #14181d;
464
+ box-shadow: 0 4px 14px rgb(0 0 0 / 18%);
465
+ overflow: hidden;
369
466
  text-align: left;
370
467
  cursor: pointer;
468
+ pointer-events: auto;
371
469
  user-select: none;
372
470
  }
373
471
 
374
- .state-row:hover,
375
- .state-row:focus-visible {
376
- color: #fff;
377
- background: #1b1e23;
378
- outline: none;
472
+ .chart-state-compound,
473
+ .chart-state-parallel {
474
+ border-color: #353c47;
475
+ background: #171b21;
379
476
  }
380
477
 
381
- .state-row[aria-selected="true"] {
382
- color: #fff;
478
+ .chart-state-final {
479
+ border-color: #445066;
383
480
  }
384
481
 
385
- .topology-node.is-selected > .state-row {
386
- color: #fff;
482
+ .chart-state-history,
483
+ .chart-state-choice {
484
+ background: #18171d;
387
485
  }
388
486
 
389
- .topology-node.is-related-target > .state-row {
390
- background: rgb(75 125 255 / 15%);
487
+ .chart-state:not(:disabled):hover,
488
+ .chart-state:focus-visible {
489
+ border-color: #596475;
490
+ color: #fff;
491
+ outline: none;
391
492
  }
392
493
 
393
- .topology-node.is-related-source > .state-row {
394
- background: rgb(172 104 224 / 8%);
494
+ .chart-state-heading,
495
+ .chart-state-identity,
496
+ .chart-field-row,
497
+ .chart-activity-row {
498
+ display: flex;
499
+ min-width: 0;
500
+ align-items: center;
395
501
  }
396
502
 
397
- .topology-node.is-related-update > .state-row {
398
- background: rgb(240 163 91 / 8%);
503
+ .chart-state-heading {
504
+ justify-content: space-between;
505
+ gap: 12px;
399
506
  }
400
507
 
401
- .state-disclosure {
402
- color: #737a84;
403
- font-size: 11px;
508
+ .chart-state-identity {
509
+ gap: 8px;
404
510
  }
405
511
 
406
- .state-status {
512
+ .chart-state-status {
407
513
  width: 7px;
408
514
  height: 7px;
515
+ flex: 0 0 auto;
409
516
  border: 1px solid #686f78;
410
517
  border-radius: 50%;
411
518
  }
412
519
 
413
- .state-status.is-active {
520
+ .chart-state-status.is-active {
414
521
  border-color: var(--accent);
415
522
  background: var(--accent);
416
523
  box-shadow: 0 0 0 3px rgb(117 167 255 / 10%);
417
524
  }
418
525
 
419
- .state-label {
526
+ .chart-state-status.is-initial {
527
+ border-color: #d9a441;
528
+ background: #d9a441;
529
+ box-shadow: 0 0 0 3px rgb(217 164 65 / 12%);
530
+ }
531
+
532
+ .chart-state-status.is-active.is-initial {
533
+ box-shadow: 0 0 0 2px #14181d, 0 0 0 4px var(--accent);
534
+ }
535
+
536
+ .chart-state-name,
537
+ .chart-field-name,
538
+ .chart-activity-name {
420
539
  min-width: 0;
421
540
  overflow: hidden;
422
541
  text-overflow: ellipsis;
423
542
  white-space: nowrap;
424
543
  }
425
544
 
426
- .state-markers,
545
+ .chart-state-name {
546
+ font-size: 12px;
547
+ }
548
+
549
+ .chart-section-label,
550
+ .chart-field-type,
551
+ .chart-activity-kind,
552
+ .chart-more {
553
+ color: #7e8792;
554
+ font-size: 9px;
555
+ line-height: 1.3;
556
+ }
557
+
558
+ .chart-section-label,
559
+ .chart-activity-kind {
560
+ text-transform: uppercase;
561
+ }
562
+
563
+ .chart-state-section {
564
+ width: min(300px, 100%);
565
+ margin-top: 11px;
566
+ padding-top: 8px;
567
+ border-top: 1px solid #242a31;
568
+ }
569
+
570
+ .chart-section-label {
571
+ margin-bottom: 4px;
572
+ letter-spacing: 0.06em;
573
+ }
574
+
575
+ .chart-field-row,
576
+ .chart-activity-row {
577
+ display: grid;
578
+ min-height: 22px;
579
+ grid-template-columns: minmax(0, 1fr) auto;
580
+ gap: 10px;
581
+ }
582
+
583
+ .chart-activity-row {
584
+ grid-template-columns: auto minmax(0, 1fr);
585
+ }
586
+
587
+ .chart-field-name,
588
+ .chart-activity-name {
589
+ color: #c4c9d0;
590
+ font-size: 10px;
591
+ }
592
+
593
+ .chart-field-type,
594
+ .chart-activity-kind {
595
+ flex: 0 1 auto;
596
+ overflow: hidden;
597
+ text-overflow: ellipsis;
598
+ white-space: nowrap;
599
+ }
600
+
601
+ .chart-activity-kind {
602
+ min-width: max-content;
603
+ color: var(--chart-activity-color, #77a990);
604
+ overflow: visible;
605
+ text-overflow: clip;
606
+ }
607
+
608
+ .chart-activity-process,
609
+ .chart-edge-activity-process,
610
+ .badge-activity-process {
611
+ --chart-activity-color: #a98978;
612
+ --chart-activity-border: #51433c;
613
+ --chart-activity-background: #191513;
614
+ }
615
+
616
+ .chart-activity-effect,
617
+ .chart-edge-activity-effect,
618
+ .badge-activity-effect {
619
+ --chart-activity-color: #7f9f8c;
620
+ --chart-activity-border: #42564b;
621
+ --chart-activity-background: #131815;
622
+ }
623
+
624
+ .chart-activity-timer,
625
+ .chart-edge-activity-timer,
626
+ .badge-activity-timer {
627
+ --chart-activity-color: #aaa07c;
628
+ --chart-activity-border: #57503c;
629
+ --chart-activity-background: #191812;
630
+ }
631
+
632
+ .chart-activity-stream,
633
+ .chart-edge-activity-stream,
634
+ .badge-activity-stream {
635
+ --chart-activity-color: #7898a2;
636
+ --chart-activity-border: #405259;
637
+ --chart-activity-background: #121719;
638
+ }
639
+
640
+ .chart-activity-machine,
641
+ .chart-edge-activity-machine,
642
+ .badge-activity-machine {
643
+ --chart-activity-color: #958aa8;
644
+ --chart-activity-border: #4d4658;
645
+ --chart-activity-background: #17151a;
646
+ }
647
+
648
+ .chart-more {
649
+ min-height: 18px;
650
+ padding-top: 3px;
651
+ }
652
+
653
+ .chart-initial {
654
+ position: absolute;
655
+ border-radius: 50%;
656
+ background: #9ba3ae;
657
+ box-shadow: 0 0 0 3px rgb(155 163 174 / 8%);
658
+ pointer-events: none;
659
+ }
660
+
661
+ .chart-runtime-target {
662
+ position: absolute;
663
+ display: grid;
664
+ place-items: center;
665
+ border: 1px dashed #555d68;
666
+ border-radius: 3px;
667
+ color: #858d98;
668
+ background: #111419;
669
+ font: 9px/1 ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;
670
+ letter-spacing: 0.04em;
671
+ text-transform: uppercase;
672
+ pointer-events: none;
673
+ user-select: none;
674
+ }
675
+
676
+ .chart-edge-casing,
677
+ .chart-edge-line,
678
+ .chart-edge-direction,
679
+ .chart-edge-hit {
680
+ fill: none;
681
+ }
682
+
683
+ .chart-edge-casing {
684
+ stroke: #0b0c0e;
685
+ stroke-width: 5.5;
686
+ vector-effect: non-scaling-stroke;
687
+ }
688
+
689
+ .chart-edge-line,
690
+ .chart-edge-direction {
691
+ stroke: #626b77;
692
+ stroke-width: 1.4;
693
+ vector-effect: non-scaling-stroke;
694
+ }
695
+
696
+ .chart-edge-direction {
697
+ pointer-events: none;
698
+ }
699
+
700
+ .chart-edge-initial .chart-edge-line {
701
+ stroke: #89929e;
702
+ }
703
+
704
+ .chart-edge-hit {
705
+ stroke: transparent;
706
+ stroke-width: 14;
707
+ cursor: pointer;
708
+ pointer-events: stroke;
709
+ }
710
+
711
+ #chart-arrow path,
712
+ #chart-direction path {
713
+ fill: context-stroke;
714
+ }
715
+
716
+ .chart-edge-label {
717
+ position: absolute;
718
+ padding: 4px 7px;
719
+ border: 1px solid #2c333c;
720
+ border-radius: 3px;
721
+ color: #c0c7d0;
722
+ background: #101318;
723
+ font: 10px/1 ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;
724
+ overflow: hidden;
725
+ text-overflow: ellipsis;
726
+ white-space: nowrap;
727
+ cursor: pointer;
728
+ pointer-events: auto;
729
+ user-select: none;
730
+ }
731
+
732
+ .chart-edge-label:not(:disabled):hover,
733
+ .chart-edge-label:focus-visible,
734
+ .chart-edge-group.is-hovered + .chart-edge-label {
735
+ border-color: #53657e;
736
+ color: #fff;
737
+ outline: none;
738
+ }
739
+
740
+ .chart-edge-label-always,
741
+ .chart-edge-label-choice,
742
+ .chart-edge-label-done {
743
+ color: #d4b4e9;
744
+ }
745
+
746
+ .chart-edge-group.is-hovered .chart-edge-line,
747
+ .chart-edge-group.is-hovered .chart-edge-direction {
748
+ stroke: #7c9ed2;
749
+ stroke-width: 1.8;
750
+ }
751
+
752
+ .chart-edge-group.is-walkthrough-unavailable .chart-edge-line {
753
+ stroke: #6e675b;
754
+ stroke-dasharray: 5 5;
755
+ }
756
+
757
+ .chart-edge-group.chart-transition-runtime .chart-edge-line {
758
+ stroke-dasharray: 5 5;
759
+ }
760
+
761
+ .chart-edge-group.chart-edge-trigger-always .chart-edge-line,
762
+ .chart-edge-group.chart-edge-trigger-choice .chart-edge-line,
763
+ .chart-edge-group.chart-edge-trigger-done .chart-edge-line,
764
+ .chart-edge-group.chart-edge-trigger-invoke .chart-edge-line {
765
+ stroke-dasharray: 7 5;
766
+ }
767
+
768
+ .chart-edge-group.chart-edge-activity-process .chart-edge-line,
769
+ .chart-edge-group.chart-edge-activity-effect .chart-edge-line,
770
+ .chart-edge-group.chart-edge-activity-timer .chart-edge-line,
771
+ .chart-edge-group.chart-edge-activity-stream .chart-edge-line,
772
+ .chart-edge-group.chart-edge-activity-machine .chart-edge-line,
773
+ .chart-edge-group.chart-edge-activity-process .chart-edge-direction,
774
+ .chart-edge-group.chart-edge-activity-effect .chart-edge-direction,
775
+ .chart-edge-group.chart-edge-activity-timer .chart-edge-direction,
776
+ .chart-edge-group.chart-edge-activity-stream .chart-edge-direction,
777
+ .chart-edge-group.chart-edge-activity-machine .chart-edge-direction {
778
+ stroke: var(--chart-activity-color);
779
+ }
780
+
781
+ .chart-edge-label.chart-edge-activity-process,
782
+ .chart-edge-label.chart-edge-activity-effect,
783
+ .chart-edge-label.chart-edge-activity-timer,
784
+ .chart-edge-label.chart-edge-activity-stream,
785
+ .chart-edge-label.chart-edge-activity-machine {
786
+ border-color: var(--chart-activity-border);
787
+ color: var(--chart-activity-color);
788
+ background: var(--chart-activity-background);
789
+ }
790
+
791
+ .chart-edge-group.is-incoming .chart-edge-line,
792
+ .chart-edge-group.is-incoming .chart-edge-direction {
793
+ stroke: #ed6a70;
794
+ stroke-width: 2;
795
+ }
796
+
797
+ .chart-edge-group.is-outgoing .chart-edge-line,
798
+ .chart-edge-group.is-outgoing .chart-edge-direction {
799
+ stroke: #6eb6dc;
800
+ stroke-width: 2;
801
+ }
802
+
803
+ .chart-edge-group.is-selected .chart-edge-line,
804
+ .chart-edge-group.is-selected .chart-edge-direction {
805
+ stroke: #8ab5ff;
806
+ stroke-width: 2.5;
807
+ }
808
+
809
+ .chart-edge-group.is-walkthrough-available .chart-edge-line,
810
+ .chart-edge-group.is-walkthrough-available .chart-edge-direction {
811
+ stroke: #d5aa57;
812
+ stroke-width: 2;
813
+ }
814
+
815
+ .chart-edge-label.is-hovered {
816
+ border-color: #526783;
817
+ color: #dbe8ff;
818
+ }
819
+
820
+ .chart-edge-label.is-walkthrough-unavailable {
821
+ border-color: #4e4a43;
822
+ color: #8d8679;
823
+ background: #151412;
824
+ }
825
+
826
+ .chart-edge-label.is-incoming {
827
+ border-color: #a9484e;
828
+ color: #ffd0d2;
829
+ background: #251416;
830
+ }
831
+
832
+ .chart-edge-label.is-outgoing {
833
+ border-color: #47758d;
834
+ color: #c5e8f7;
835
+ background: #111c22;
836
+ }
837
+
838
+ .chart-edge-label.is-selected {
839
+ border-color: #719ce0;
840
+ color: #fff;
841
+ background: #18253a;
842
+ }
843
+
844
+ .chart-edge-label.is-walkthrough-available {
845
+ border-color: #8d713c;
846
+ color: #f0d39a;
847
+ background: #211b12;
848
+ }
849
+
850
+ .chart-state.is-selected,
851
+ .chart-compound.is-selected {
852
+ border-color: #5f88ca;
853
+ background: rgb(44 75 122 / 42%);
854
+ }
855
+
856
+ .chart-state.is-related-to,
857
+ .chart-compound.is-related-to,
858
+ .chart-state.is-hover-target,
859
+ .chart-compound.is-hover-target {
860
+ border-color: #4f829a;
861
+ background: rgb(48 112 140 / 24%);
862
+ }
863
+
864
+ .chart-state.is-related-from,
865
+ .chart-compound.is-related-from,
866
+ .chart-state.is-hover-source,
867
+ .chart-compound.is-hover-source {
868
+ border-color: #a94b52;
869
+ background: rgb(151 48 57 / 26%);
870
+ }
871
+
872
+ .chart-state.is-related-from.is-related-to,
873
+ .chart-compound.is-related-from.is-related-to {
874
+ border-color: #6e708f;
875
+ background: linear-gradient(135deg, rgb(151 48 57 / 28%) 0 50%, rgb(48 112 140 / 26%) 50% 100%);
876
+ }
877
+
878
+ .chart-viewport.is-simulating .chart-state:disabled,
879
+ .chart-viewport.is-simulating .chart-edge-label:disabled,
880
+ .chart-viewport.is-simulating .chart-edge-hit {
881
+ cursor: default;
882
+ }
883
+
884
+ .chart-viewport.is-simulating .chart-edge-label:disabled,
885
+ .chart-viewport.is-simulating .chart-edge-hit {
886
+ pointer-events: none;
887
+ }
888
+
889
+ .chart-viewport.is-simulating .chart-edge-label.is-walkthrough-available,
890
+ .chart-viewport.is-simulating .chart-edge-label.is-walkthrough-unavailable,
891
+ .chart-viewport.is-simulating .chart-edge-group.is-walkthrough-available .chart-edge-hit,
892
+ .chart-viewport.is-simulating .chart-edge-group.is-walkthrough-unavailable .chart-edge-hit {
893
+ cursor: pointer;
894
+ }
895
+
896
+ .chart-viewport.is-simulating .chart-edge-group.is-walkthrough-available .chart-edge-hit,
897
+ .chart-viewport.is-simulating .chart-edge-group.is-walkthrough-unavailable .chart-edge-hit {
898
+ pointer-events: stroke;
899
+ }
900
+
901
+ .chart-loading,
902
+ .chart-layout-error {
903
+ display: grid;
904
+ max-width: 440px;
905
+ gap: 7px;
906
+ margin: 28px;
907
+ color: #7f8690;
908
+ font: 11px/1.6 ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;
909
+ }
910
+
911
+ .chart-layout-error {
912
+ color: #d58d89;
913
+ }
914
+
915
+ .chart-layout-error strong {
916
+ color: #efb0ac;
917
+ }
918
+
427
919
  .inspector-eyebrow,
428
920
  .card-title,
429
921
  .card-flags,
@@ -433,10 +925,6 @@ button {
433
925
  gap: 6px;
434
926
  }
435
927
 
436
- .state-markers {
437
- justify-self: end;
438
- }
439
-
440
928
  .badge {
441
929
  display: inline-flex;
442
930
  align-items: center;
@@ -455,11 +943,6 @@ button {
455
943
  background: rgb(75 125 255 / 22%);
456
944
  }
457
945
 
458
- .badge-initial {
459
- color: #e9c89f;
460
- background: rgb(240 163 91 / 13%);
461
- }
462
-
463
946
  .badge-trigger {
464
947
  color: #b9d2ff;
465
948
  background: rgb(75 125 255 / 16%);
@@ -475,17 +958,66 @@ button {
475
958
  background: rgb(78 181 131 / 14%);
476
959
  }
477
960
 
961
+ .badge-activity-process,
962
+ .badge-activity-effect,
963
+ .badge-activity-timer,
964
+ .badge-activity-stream,
965
+ .badge-activity-machine {
966
+ color: var(--chart-activity-color);
967
+ background: var(--chart-activity-background);
968
+ }
969
+
478
970
  .badge-count {
479
971
  color: #858c96;
480
972
  background: transparent;
481
973
  }
482
974
 
483
- .inspector {
484
- min-width: 0;
485
- height: 100vh;
486
- padding: 28px;
975
+ .inspector {
976
+ position: absolute;
977
+ z-index: 10;
978
+ top: 60px;
979
+ right: 14px;
980
+ bottom: 14px;
981
+ width: min(460px, calc(100% - 28px));
982
+ min-width: 0;
983
+ padding: 0;
984
+ border: 1px solid #333943;
985
+ border-radius: 6px;
986
+ overflow: hidden;
987
+ background: rgb(15 17 20 / 97%);
988
+ box-shadow: 0 18px 60px rgb(0 0 0 / 48%);
989
+ }
990
+
991
+ .inspector[hidden] {
992
+ display: none;
993
+ }
994
+
995
+ .inspector-close {
996
+ position: absolute;
997
+ z-index: 1;
998
+ top: 11px;
999
+ right: 12px;
1000
+ padding: 6px 9px;
1001
+ border: 0;
1002
+ border-radius: 3px;
1003
+ color: #8e949e;
1004
+ background: transparent;
1005
+ font-size: 11px;
1006
+ cursor: pointer;
1007
+ }
1008
+
1009
+ .inspector-content {
1010
+ width: 100%;
1011
+ height: 100%;
1012
+ padding: 48px 24px 24px;
487
1013
  overflow: auto;
488
- background: var(--surface);
1014
+ }
1015
+
1016
+ .inspector-close:hover,
1017
+ .inspector-close:focus-visible {
1018
+ color: #fff;
1019
+ background: #20242a;
1020
+ outline: none;
489
1021
  }
490
1022
 
491
1023
  .failure-shell {
@@ -548,9 +1080,29 @@ button {
548
1080
  overflow-wrap: anywhere;
549
1081
  }
550
1082
 
1083
+ .inspector-title-row,
1084
+ .inspector-state-title {
1085
+ display: flex;
1086
+ min-width: 0;
1087
+ align-items: center;
1088
+ }
1089
+
1090
+ .inspector-title-row {
1091
+ justify-content: space-between;
1092
+ gap: 16px;
1093
+ }
1094
+
1095
+ .inspector-state-title {
1096
+ gap: 9px;
1097
+ }
1098
+
1099
+ .inspector-title-row h2 {
1100
+ min-width: 0;
1101
+ margin: 0;
1102
+ }
1103
+
551
1104
  .inspector-empty p,
552
- .section-empty,
553
- .empty-inline {
1105
+ .section-empty {
554
1106
  color: var(--muted);
555
1107
  font-size: 12px;
556
1108
  line-height: 1.6;
@@ -561,6 +1113,13 @@ button {
561
1113
  border-bottom: 1px solid var(--line);
562
1114
  }
563
1115
 
1116
+ .analysis-summary {
1117
+ margin: 12px 0 0;
1118
+ color: #7f8690;
1119
+ font-size: 12px;
1120
+ line-height: 1.6;
1121
+ }
1122
+
564
1123
  .state-annotations {
565
1124
  margin-top: 18px;
566
1125
  }
@@ -612,7 +1171,7 @@ button {
612
1171
 
613
1172
  .metadata {
614
1173
  display: grid;
615
- grid-template-columns: minmax(74px, auto) minmax(0, 1fr);
1174
+ grid-template-columns: minmax(74px, max-content) minmax(0, 1fr);
616
1175
  gap: 8px 16px;
617
1176
  margin: 20px 0 0;
618
1177
  font-size: 11px;
@@ -659,6 +1218,33 @@ button {
659
1218
  background: var(--surface-raised);
660
1219
  }
661
1220
 
1221
+ .analysis-card {
1222
+ padding-bottom: 12px;
1223
+ }
1224
+
1225
+ .analysis-card .state-link {
1226
+ color: #e2e4e7;
1227
+ font-size: 12px;
1228
+ font-weight: 600;
1229
+ }
1230
+
1231
+ .analysis-message,
1232
+ .analysis-qualification {
1233
+ margin: 0;
1234
+ padding: 0 12px;
1235
+ font-size: 11px;
1236
+ line-height: 1.6;
1237
+ }
1238
+
1239
+ .analysis-message {
1240
+ color: #b9bec6;
1241
+ }
1242
+
1243
+ .analysis-qualification {
1244
+ margin-top: 5px;
1245
+ color: #747c87;
1246
+ }
1247
+
662
1248
  .card-header {
663
1249
  display: flex;
664
1250
  min-height: 42px;
@@ -668,15 +1254,6 @@ button {
668
1254
  padding: 10px 12px;
669
1255
  }
670
1256
 
671
- .transition-source {
672
- display: flex;
673
- align-items: baseline;
674
- gap: 12px;
675
- padding: 0 12px 10px;
676
- color: #727983;
677
- font-size: 11px;
678
- }
679
-
680
1257
  .card-title {
681
1258
  min-width: 0;
682
1259
  }
@@ -714,6 +1291,7 @@ button {
714
1291
  }
715
1292
 
716
1293
  .branch-row .metadata,
1294
+ .transition-card .card-metadata,
717
1295
  .activity-card .metadata,
718
1296
  .incoming-card .metadata {
719
1297
  margin-top: 10px;
@@ -727,9 +1305,13 @@ button {
727
1305
  padding: 0 12px;
728
1306
  }
729
1307
 
1308
+ .transition-card .card-metadata {
1309
+ padding: 0 12px 10px;
1310
+ }
1311
+
730
1312
  .branch-updates {
731
1313
  display: grid;
732
- grid-template-columns: minmax(74px, auto) minmax(0, 1fr);
1314
+ grid-template-columns: minmax(74px, max-content) minmax(0, 1fr);
733
1315
  gap: 8px 16px;
734
1316
  margin-top: 9px;
735
1317
  font-size: 11px;
@@ -751,62 +1333,244 @@ button {
751
1333
  padding: 0 12px;
752
1334
  }
753
1335
 
754
- .simulation-composer {
1336
+ .walkthrough-dock {
755
1337
  display: grid;
1338
+ min-height: 0;
1339
+ max-height: 76px;
1340
+ flex: 0 0 auto;
1341
+ grid-template-rows: auto auto;
1342
+ gap: 6px;
1343
+ padding: 8px 14px 10px;
1344
+ border-top: 1px solid var(--line);
1345
+ background: rgb(13 15 18 / 98%);
1346
+ box-shadow: 0 -12px 32px rgb(0 0 0 / 20%);
1347
+ font: 10px/1.4 ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;
1348
+ }
1349
+
1350
+ .walkthrough-dock[hidden] {
1351
+ display: none;
1352
+ }
1353
+
1354
+ .walkthrough-heading,
1355
+ .walkthrough-identity,
1356
+ .walkthrough-timeline {
1357
+ display: flex;
1358
+ min-width: 0;
1359
+ align-items: center;
1360
+ }
1361
+
1362
+ .walkthrough-heading {
1363
+ justify-content: space-between;
1364
+ gap: 12px;
1365
+ color: #d4d7dc;
1366
+ }
1367
+
1368
+ .walkthrough-identity {
756
1369
  gap: 10px;
757
1370
  }
758
1371
 
759
- .simulation-composer .section-heading {
760
- margin-bottom: 0;
1372
+ .walkthrough-status,
1373
+ .walkthrough-hint {
1374
+ color: #777f8a;
1375
+ }
1376
+
1377
+ .walkthrough-hint {
1378
+ font-size: 9px;
1379
+ }
1380
+
1381
+ .walkthrough-timeline {
1382
+ gap: 5px;
1383
+ overflow-x: auto;
1384
+ scrollbar-width: thin;
1385
+ }
1386
+
1387
+ .walkthrough-step {
1388
+ flex: 0 0 auto;
1389
+ border: 1px solid var(--line-soft);
1390
+ border-radius: 3px;
1391
+ color: #aeb4bd;
1392
+ background: #14171b;
1393
+ cursor: pointer;
1394
+ }
1395
+
1396
+ .walkthrough-step {
1397
+ padding: 5px 8px;
1398
+ white-space: nowrap;
1399
+ }
1400
+
1401
+ .walkthrough-step:hover,
1402
+ .walkthrough-step:focus-visible {
1403
+ border-color: #53657e;
1404
+ color: #fff;
1405
+ outline: none;
1406
+ }
1407
+
1408
+ .walkthrough-step.is-current {
1409
+ border-color: #5f88ca;
1410
+ color: #d8e6ff;
1411
+ background: rgb(44 75 122 / 38%);
761
1412
  }
762
1413
 
763
- .schema-form,
764
- .input-object,
765
- .input-array,
766
- .input-union,
767
- .input-field,
768
- .input-array-items {
1414
+ .transition-picker {
1415
+ position: fixed;
1416
+ z-index: 20;
769
1417
  display: grid;
770
- gap: 10px;
1418
+ width: min(380px, calc(100vw - 20px));
1419
+ max-height: min(420px, calc(100vh - 68px));
1420
+ grid-template-rows: auto minmax(0, 1fr);
1421
+ border: 1px solid #4e4535;
1422
+ border-radius: 5px;
1423
+ background: rgb(15 17 20 / 98%);
1424
+ box-shadow: 0 18px 60px rgb(0 0 0 / 52%);
1425
+ overflow: hidden;
771
1426
  }
772
1427
 
773
- .schema-form {
774
- max-width: 520px;
1428
+ .transition-picker[hidden] {
1429
+ display: none;
775
1430
  }
776
1431
 
777
- .input-object,
778
- .input-array,
779
- .input-union {
1432
+ .transition-picker-header,
1433
+ .transition-picker-choice-main {
1434
+ display: flex;
780
1435
  min-width: 0;
781
- margin: 0;
782
- padding: 0;
783
- border: 0;
1436
+ align-items: center;
784
1437
  }
785
1438
 
786
- .input-object > legend,
787
- .input-array > legend,
788
- .input-union > legend {
789
- margin-bottom: 8px;
790
- padding: 0;
791
- color: #d5d8dd;
1439
+ .transition-picker-header {
1440
+ min-height: 38px;
1441
+ justify-content: space-between;
1442
+ gap: 10px;
1443
+ padding: 8px 10px 8px 12px;
1444
+ border-bottom: 1px solid var(--line-soft);
1445
+ }
1446
+
1447
+ .transition-picker-header strong {
1448
+ color: #d8dadd;
792
1449
  font: 600 11px/1.4 ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;
1450
+ overflow: hidden;
1451
+ text-overflow: ellipsis;
1452
+ white-space: nowrap;
1453
+ }
1454
+
1455
+ .transition-picker-close {
1456
+ padding: 4px 6px;
1457
+ border: 0;
1458
+ border-radius: 3px;
1459
+ color: #7f8690;
1460
+ background: transparent;
1461
+ font-size: 10px;
1462
+ cursor: pointer;
1463
+ }
1464
+
1465
+ .transition-picker-close:hover,
1466
+ .transition-picker-close:focus-visible {
1467
+ color: #fff;
1468
+ background: #20242a;
1469
+ outline: none;
1470
+ }
1471
+
1472
+ .transition-picker-content {
1473
+ display: grid;
1474
+ gap: 5px;
1475
+ padding: 7px;
1476
+ overflow: auto;
793
1477
  }
794
1478
 
795
- .input-object .input-object,
796
- .input-object .input-array,
797
- .input-object .input-union {
798
- padding: 11px;
1479
+ .transition-picker-choice {
1480
+ display: grid;
1481
+ min-width: 0;
1482
+ gap: 4px;
1483
+ padding: 8px 9px;
799
1484
  border: 1px solid var(--line-soft);
800
- background: #101216;
1485
+ border-radius: 3px;
1486
+ color: #aeb4bd;
1487
+ background: #14171b;
1488
+ font: 10px/1.4 ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;
1489
+ text-align: left;
1490
+ cursor: pointer;
801
1491
  }
802
1492
 
803
- .input-field {
804
- gap: 6px;
1493
+ .transition-picker-choice:hover,
1494
+ .transition-picker-choice:focus-visible {
1495
+ border-color: #8d713c;
1496
+ background: #1d1912;
1497
+ outline: none;
1498
+ }
1499
+
1500
+ .transition-picker-choice-main {
1501
+ gap: 7px;
1502
+ }
1503
+
1504
+ .transition-picker-choice-main strong,
1505
+ .transition-picker-choice-title,
1506
+ .transition-picker-choice-route,
1507
+ .transition-picker-choice-contract,
1508
+ .transition-picker-choice-decision,
1509
+ .transition-picker-choice-unavailable {
1510
+ min-width: 0;
1511
+ overflow: hidden;
1512
+ text-overflow: ellipsis;
1513
+ white-space: nowrap;
1514
+ }
1515
+
1516
+ .transition-picker-choice-main strong {
1517
+ color: #efd18f;
1518
+ }
1519
+
1520
+ .transition-picker-choice-title {
1521
+ color: #d9b8ef;
1522
+ }
1523
+
1524
+ .transition-picker-choice-route {
1525
+ color: #777f8a;
1526
+ }
1527
+
1528
+ .transition-picker-choice-contract {
1529
+ color: #9ebce9;
1530
+ }
1531
+
1532
+ .transition-picker-choice-decision {
1533
+ color: #b69ac9;
1534
+ }
1535
+
1536
+ .transition-picker-choice-unavailable {
1537
+ color: #a38c6f;
1538
+ }
1539
+
1540
+ .transition-picker-choice.is-unavailable {
1541
+ opacity: 0.68;
1542
+ cursor: default;
1543
+ }
1544
+
1545
+ .input-contract-fields,
1546
+ .input-contract-field,
1547
+ .input-contract-children,
1548
+ .input-contract-alternatives {
1549
+ display: grid;
1550
+ gap: 9px;
1551
+ }
1552
+
1553
+ .input-contract-fields {
1554
+ padding: 11px 12px;
1555
+ border: 1px solid var(--line-soft);
1556
+ background: var(--surface-raised);
1557
+ }
1558
+
1559
+ .input-contract-field + .input-contract-field {
1560
+ padding-top: 9px;
1561
+ border-top: 1px solid var(--line-soft);
805
1562
  }
806
1563
 
807
- .input-field + .input-field {
808
- padding-top: 10px;
1564
+ .input-contract-children,
1565
+ .input-contract-alternatives {
1566
+ margin-top: 2px;
1567
+ padding: 9px 0 0 12px;
809
1568
  border-top: 1px solid var(--line-soft);
1569
+ border-left: 1px solid var(--line-soft);
1570
+ }
1571
+
1572
+ .input-contract .section-empty {
1573
+ margin: 0;
810
1574
  }
811
1575
 
812
1576
  .input-field-heading {
@@ -827,8 +1591,7 @@ button {
827
1591
 
828
1592
  .input-label,
829
1593
  .input-required,
830
- .input-optional,
831
- .boolean-control {
1594
+ .input-optional {
832
1595
  font-size: 11px;
833
1596
  }
834
1597
 
@@ -863,33 +1626,15 @@ button {
863
1626
  color: #737b86;
864
1627
  }
865
1628
 
866
- .input-optional,
867
- .boolean-control {
1629
+ .input-optional {
868
1630
  display: inline-flex;
869
1631
  align-items: center;
870
1632
  gap: 6px;
871
1633
  color: #9199a4;
872
1634
  }
873
1635
 
874
- .input-control {
875
- width: 100%;
876
- min-height: 34px;
877
- padding: 7px 9px;
878
- border: 1px solid var(--line);
879
- border-radius: 3px;
880
- color: #dfe7f5;
881
- background: #0b0d10;
882
- font: 11px/1.4 ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;
883
- outline: none;
884
- }
885
-
886
- .input-control:focus {
887
- border-color: #557db8;
888
- }
889
-
890
1636
  .input-description,
891
- .input-unsupported,
892
- .input-errors {
1637
+ .input-unsupported {
893
1638
  margin: 0;
894
1639
  font-size: 11px;
895
1640
  line-height: 1.55;
@@ -903,104 +1648,6 @@ button {
903
1648
  color: #d7a5a2;
904
1649
  }
905
1650
 
906
- .input-errors {
907
- color: #efaaa6;
908
- }
909
-
910
- .input-errors-form {
911
- padding: 8px 10px;
912
- border: 1px solid rgb(224 89 84 / 30%);
913
- background: rgb(224 89 84 / 8%);
914
- }
915
-
916
- .literal-control {
917
- color: #aeb6c1;
918
- font: 11px/1.4 ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;
919
- }
920
-
921
- .is-disabled {
922
- opacity: 0.45;
923
- }
924
-
925
- .input-array-item {
926
- display: grid;
927
- grid-template-columns: minmax(0, 1fr) auto;
928
- align-items: start;
929
- gap: 7px;
930
- }
931
-
932
- .input-array-add,
933
- .input-array-remove {
934
- padding: 6px 8px;
935
- border: 0;
936
- border-radius: 3px;
937
- color: #9ebce9;
938
- background: #1b2431;
939
- font-size: 10px;
940
- cursor: pointer;
941
- }
942
-
943
- .input-array-add {
944
- justify-self: start;
945
- }
946
-
947
- .simulation-action {
948
- justify-self: start;
949
- padding: 7px 10px;
950
- border: 0;
951
- border-radius: 3px;
952
- color: #e4edff;
953
- background: #315d9f;
954
- font-size: 11px;
955
- cursor: pointer;
956
- }
957
-
958
- .simulation-action:hover,
959
- .simulation-action:focus-visible {
960
- background: #3b6db8;
961
- outline: none;
962
- }
963
-
964
- .simulation-action:disabled {
965
- color: #7e8796;
966
- background: #252a32;
967
- cursor: wait;
968
- }
969
-
970
- .simulation-note,
971
- .editor-error {
972
- margin: 0;
973
- font-size: 11px;
974
- line-height: 1.55;
975
- }
976
-
977
- .simulation-note {
978
- color: #777f8a;
979
- }
980
-
981
- .editor-error,
982
- .trace-error {
983
- color: #eca6a2;
984
- }
985
-
986
- .trace-header .json-value {
987
- margin-top: 18px;
988
- }
989
-
990
- .json-value,
991
- .trace-error {
992
- max-width: 100%;
993
- margin: 8px 0 0;
994
- padding: 10px 11px;
995
- border: 1px solid var(--line-soft);
996
- color: #bac8dc;
997
- background: #0d0f12;
998
- font: 10px/1.55 ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;
999
- overflow: auto;
1000
- white-space: pre-wrap;
1001
- overflow-wrap: anywhere;
1002
- }
1003
-
1004
1651
  .trace-topology {
1005
1652
  display: grid;
1006
1653
  gap: 10px;
@@ -1067,40 +1714,16 @@ button {
1067
1714
  }
1068
1715
 
1069
1716
  @media (max-width: 900px) {
1070
- .devtools-shell {
1071
- grid-template-columns: 1fr;
1072
- }
1073
-
1074
- .machine-index {
1075
- display: flex;
1076
- height: auto;
1077
- min-height: 54px;
1078
- padding: 0;
1079
- border-right: 0;
1080
- border-bottom: 1px solid var(--line);
1081
- overflow-x: auto;
1082
- }
1083
-
1084
1717
  .machine-row {
1085
- width: min(220px, 70vw);
1086
- flex: 0 0 auto;
1087
- }
1088
-
1089
- .workspace {
1090
- height: auto;
1091
- grid-template-columns: 1fr;
1092
- }
1093
-
1094
- .tree-panel {
1095
- height: 58vh;
1096
- min-height: 58vh;
1097
- border-right: 0;
1098
- border-bottom: 1px solid var(--line);
1718
+ max-width: 220px;
1719
+ min-width: 132px;
1099
1720
  }
1100
1721
 
1101
1722
  .inspector {
1102
- height: auto;
1103
- min-height: 42vh;
1723
+ top: 54px;
1724
+ right: 8px;
1725
+ bottom: 8px;
1726
+ width: min(440px, calc(100% - 16px));
1104
1727
  }
1105
1728
  }
1106
1729
 
@@ -1119,19 +1742,28 @@ button {
1119
1742
  padding-top: 8px;
1120
1743
  }
1121
1744
 
1122
- .topology-tree,
1745
+ .inspector-content {
1746
+ padding: 48px 14px 18px;
1747
+ }
1748
+
1123
1749
  .inspector {
1124
- padding-inline: 14px;
1750
+ top: 84px;
1751
+ }
1752
+
1753
+ .zoom-controls {
1754
+ bottom: 8px;
1755
+ left: 8px;
1125
1756
  }
1126
1757
 
1127
- .state-markers .badge-count {
1128
- display: none;
1758
+ .chart-panel.has-walkthrough .zoom-controls {
1759
+ bottom: 88px;
1129
1760
  }
1130
1761
  }
1131
1762
 
1132
1763
  @media (prefers-reduced-motion: no-preference) {
1133
- .state-row,
1764
+ .chart-state,
1765
+ .chart-edge-label,
1134
1766
  .toolbar-button {
1135
- transition: color 120ms ease, background-color 120ms ease;
1767
+ transition: color 120ms ease, background-color 120ms ease, border-color 120ms ease;
1136
1768
  }
1137
1769
  }