jev-devtools 0.2.0 → 0.4.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 (44) hide show
  1. package/README.md +50 -6
  2. package/lib/flow/index.d.ts +143 -0
  3. package/lib/flow/index.js +1029 -0
  4. package/lib/flow/runtime.d.ts +5 -0
  5. package/lib/flow/runtime.js +81 -0
  6. package/lib/server/flows.d.ts +28 -0
  7. package/lib/server/flows.js +187 -0
  8. package/lib/server/index.d.ts +14 -1
  9. package/lib/server/index.js +100 -1
  10. package/lib/server/recorder.d.ts +4 -1
  11. package/lib/server/recorder.js +19 -3
  12. package/lib/src/ChoiceProbabilities.js +1 -1
  13. package/lib/src/ConnectedInspector.js +13 -4
  14. package/lib/src/DiagramContent.d.ts +6 -0
  15. package/lib/src/DiagramContent.js +32 -0
  16. package/lib/src/FlowDetailsPanel.d.ts +8 -0
  17. package/lib/src/FlowDetailsPanel.js +79 -0
  18. package/lib/src/FlowOverview.d.ts +8 -0
  19. package/lib/src/FlowOverview.js +440 -0
  20. package/lib/src/JevDevtools.d.ts +6 -1
  21. package/lib/src/JevDevtools.js +18 -4
  22. package/lib/src/TraceDiagram.d.ts +4 -1
  23. package/lib/src/TraceDiagram.js +30 -12
  24. package/lib/src/condition-inputs.d.ts +9 -0
  25. package/lib/src/condition-inputs.js +109 -0
  26. package/lib/src/flow-condition.d.ts +4 -0
  27. package/lib/src/flow-condition.js +48 -0
  28. package/lib/src/flow-model.d.ts +7 -2
  29. package/lib/src/flow-model.js +2 -11
  30. package/lib/src/flow-protocol.d.ts +93 -0
  31. package/lib/src/flow-protocol.js +1 -0
  32. package/lib/src/flow-stream.d.ts +8 -0
  33. package/lib/src/flow-stream.js +80 -0
  34. package/lib/src/inspector-styles.js +1 -1
  35. package/lib/src/inspector.css +746 -8
  36. package/lib/src/protocol.d.ts +5 -0
  37. package/lib/src/useDiagramViewport.d.ts +5 -1
  38. package/lib/src/useDiagramViewport.js +31 -9
  39. package/package.json +11 -4
  40. package/skills/setup-jev-devtools/SKILL.md +8 -4
  41. package/skills/setup-jev-devtools/references/flows.md +227 -0
  42. package/skills/setup-jev-devtools/references/nextjs.md +3 -1
  43. package/skills/setup-jev-devtools/references/react-node.md +2 -2
  44. package/skills/setup-jev-devtools/references/verify.md +1 -1
@@ -831,7 +831,11 @@
831
831
  min-height: 100px;
832
832
  overflow: hidden;
833
833
  background-color: #0d0a0f;
834
- background-image: radial-gradient(#463449 0.8px, transparent 0.8px);
834
+ background-image: radial-gradient(
835
+ rgb(70 52 73 / var(--diagram-grid-opacity, 1))
836
+ calc(0.8px * var(--diagram-grid-weight, 1)),
837
+ transparent calc(0.8px * var(--diagram-grid-weight, 1))
838
+ );
835
839
  background-size: 20px 20px;
836
840
  border-block: 1px solid #302634;
837
841
  cursor: grab;
@@ -889,7 +893,7 @@
889
893
  position: absolute;
890
894
  border: 1.3px solid #f5f3f6;
891
895
  border-radius: 14px;
892
- padding: 20px;
896
+ padding: 16px;
893
897
  background: #0d0a0f;
894
898
  overflow: hidden;
895
899
  }
@@ -900,19 +904,20 @@
900
904
  500 10px ui-monospace,
901
905
  monospace;
902
906
  letter-spacing: 1px;
903
- margin: 0 0 10px;
907
+ margin: 0 0 7px;
904
908
  }
905
909
  .jev-devtools .lab-card h3 {
906
- font-size: 18px;
907
- font-weight: 500;
908
- line-height: 1.25;
909
- margin: 0 0 16px;
910
+ font-size: 16px;
911
+ font-weight: 600;
912
+ line-height: 1.3;
913
+ letter-spacing: -0.2px;
914
+ margin: 0 0 10px;
910
915
  overflow: hidden;
911
916
  white-space: nowrap;
912
917
  text-overflow: ellipsis;
913
918
  }
914
919
  .jev-devtools .lab-card p {
915
- font-size: 15px;
920
+ font-size: 13px;
916
921
  line-height: 1.4;
917
922
  margin: 10px 0;
918
923
  }
@@ -1143,6 +1148,7 @@
1143
1148
  }
1144
1149
  .jev-devtools .lab-choice-table-scroll {
1145
1150
  overflow: auto;
1151
+ overscroll-behavior: contain;
1146
1152
  min-height: 0;
1147
1153
  flex: 1;
1148
1154
  }
@@ -1264,3 +1270,735 @@
1264
1270
  animation: none;
1265
1271
  }
1266
1272
  }
1273
+
1274
+ /* Connected requests share one camera and one opt-in full request detail. */
1275
+ .whole-flow {
1276
+ min-width: 0;
1277
+ overflow: hidden;
1278
+ }
1279
+ .whole-flow > .detail-header,
1280
+ .whole-flow > .lab-flow-toolbar {
1281
+ flex-shrink: 0;
1282
+ }
1283
+ .flow-workspace {
1284
+ display: flex;
1285
+ flex-direction: column;
1286
+ flex: 1;
1287
+ min-height: 0;
1288
+ overflow: hidden;
1289
+ }
1290
+ .flow-details-panel {
1291
+ flex: none;
1292
+ min-width: 0;
1293
+ background: #130f17;
1294
+ border-top: 1px solid #342a38;
1295
+ }
1296
+ .flow-details-bar {
1297
+ display: flex;
1298
+ align-items: center;
1299
+ gap: 12px;
1300
+ height: 36px;
1301
+ padding: 0 12px;
1302
+ }
1303
+ .jev-devtools .flow-details-bar button {
1304
+ flex: none;
1305
+ padding: 4px 8px;
1306
+ font-size: 11px;
1307
+ }
1308
+ .flow-details-bar > span {
1309
+ color: #b5a6bc;
1310
+ font-size: 11px;
1311
+ overflow: hidden;
1312
+ white-space: nowrap;
1313
+ text-overflow: ellipsis;
1314
+ }
1315
+ .flow-details-body {
1316
+ overflow: auto;
1317
+ overscroll-behavior: contain;
1318
+ scrollbar-gutter: stable;
1319
+ }
1320
+ .flow-details-resize {
1321
+ display: flex;
1322
+ align-items: center;
1323
+ justify-content: center;
1324
+ height: 8px;
1325
+ cursor: ns-resize;
1326
+ touch-action: none;
1327
+ user-select: none;
1328
+ }
1329
+ .flow-details-resize span {
1330
+ width: 40px;
1331
+ height: 2px;
1332
+ border-radius: 2px;
1333
+ background: #6c5874;
1334
+ }
1335
+ .flow-details-resize:hover,
1336
+ .flow-details-resize:focus-visible {
1337
+ background: #392239;
1338
+ outline: 1px solid #e551ba;
1339
+ outline-offset: -1px;
1340
+ }
1341
+ .flow-overview-viewport {
1342
+ position: relative;
1343
+ min-height: 0;
1344
+ flex: 1 1 0;
1345
+ overflow: hidden;
1346
+ touch-action: none;
1347
+ cursor: grab;
1348
+ background-image: radial-gradient(
1349
+ rgb(83 67 87 / var(--diagram-grid-opacity, 1))
1350
+ calc(1px * var(--diagram-grid-weight, 1)),
1351
+ transparent calc(1px * var(--diagram-grid-weight, 1))
1352
+ );
1353
+ background-size: 20px 20px;
1354
+ }
1355
+ .flow-overview-viewport[data-panning] {
1356
+ cursor: grabbing;
1357
+ }
1358
+ .flow-overview-canvas {
1359
+ position: absolute;
1360
+ transform-origin: 0 0;
1361
+ }
1362
+ .flow-connections {
1363
+ position: absolute;
1364
+ inset: 0;
1365
+ overflow: visible;
1366
+ color: #c0b8c4;
1367
+ pointer-events: none;
1368
+ }
1369
+ .flow-step {
1370
+ position: absolute;
1371
+ width: 220px;
1372
+ min-height: 172px;
1373
+ overflow-wrap: anywhere;
1374
+ display: flex;
1375
+ flex-direction: column;
1376
+ gap: 8px;
1377
+ text-align: left;
1378
+ padding: 14px;
1379
+ border: 1px solid #736476;
1380
+ border-radius: 12px;
1381
+ background: #151017;
1382
+ color: inherit;
1383
+ }
1384
+ .flow-step strong {
1385
+ white-space: normal;
1386
+ width: 100%;
1387
+ }
1388
+ .flow-step-description {
1389
+ overflow-wrap: anywhere;
1390
+ font-size: 12px;
1391
+ }
1392
+ .flow-step.flow-request {
1393
+ display: block;
1394
+ padding: 0;
1395
+ background: #0d0a0f;
1396
+ /* Skip offscreen paint/layout while preserving each question/expansion state. */
1397
+ content-visibility: auto;
1398
+ contain-intrinsic-size: auto 640px;
1399
+ }
1400
+ .flow-request-heading {
1401
+ width: 100%;
1402
+ min-height: 64px;
1403
+ gap: 20px;
1404
+ display: flex;
1405
+ align-items: center;
1406
+ justify-content: space-between;
1407
+ text-align: left;
1408
+ padding: 12px 20px;
1409
+ border: 0;
1410
+ border-bottom: 1px solid #342a38;
1411
+ border-radius: 12px 12px 0 0;
1412
+ background: transparent;
1413
+ color: inherit;
1414
+ }
1415
+ .flow-request-heading .eyebrow {
1416
+ display: block;
1417
+ margin-bottom: 4px;
1418
+ }
1419
+ .jev-devtools .lab-flow-embedded {
1420
+ width: 1120px;
1421
+ display: block;
1422
+ }
1423
+ .jev-devtools .lab-flow-surface {
1424
+ position: relative;
1425
+ width: 1120px;
1426
+ }
1427
+ .jev-devtools .lab-flow-surface[hidden] {
1428
+ display: none;
1429
+ }
1430
+ .jev-devtools .lab-flow-embedded .lab-flow-canvas {
1431
+ will-change: auto;
1432
+ }
1433
+ .jev-devtools .lab-flow-embedded .lab-choice-browser {
1434
+ height: 520px;
1435
+ }
1436
+ .flow-step.selected {
1437
+ outline: 2px solid #e551ba;
1438
+ outline-offset: 3px;
1439
+ }
1440
+ .flow-step[data-status="completed"] {
1441
+ border-color: #e551ba;
1442
+ }
1443
+ .flow-step[data-status="running"] {
1444
+ border-color: #e551ba;
1445
+ background: #2b1728;
1446
+ }
1447
+ .flow-step[data-status="untaken"],
1448
+ .flow-step[data-status="blocked"] {
1449
+ color: #948797;
1450
+ border-color: #403746;
1451
+ background: #151017;
1452
+ }
1453
+ .flow-step[data-status="error"] {
1454
+ border-color: #f17c78;
1455
+ }
1456
+ .flow-step[data-status="cancelled"] {
1457
+ border-style: dashed;
1458
+ }
1459
+ .flow-selection {
1460
+ padding: 12px 20px;
1461
+ border-top: 1px solid #342a38;
1462
+ }
1463
+ .flow-selection p {
1464
+ margin: 6px 0;
1465
+ overflow-wrap: anywhere;
1466
+ }
1467
+ .flow-request-detail {
1468
+ min-height: 450px;
1469
+ border-top: 1px solid #534357;
1470
+ }
1471
+ .flow-request-detail > .request-detail {
1472
+ min-height: 450px;
1473
+ }
1474
+
1475
+ .flow-card-heading,
1476
+ .flow-card-footer,
1477
+ .flow-join-summary,
1478
+ .flow-lane {
1479
+ display: flex;
1480
+ align-items: center;
1481
+ justify-content: space-between;
1482
+ gap: 8px;
1483
+ width: 100%;
1484
+ }
1485
+ .flow-card-heading {
1486
+ justify-content: flex-start;
1487
+ }
1488
+ .flow-task .flow-kind-icon {
1489
+ border: 1px solid currentColor;
1490
+ border-radius: 6px;
1491
+ padding: 4px;
1492
+ }
1493
+ .flow-task-preview {
1494
+ display: grid;
1495
+ gap: 8px;
1496
+ min-width: 0;
1497
+ }
1498
+ .jev-devtools .flow-task-preview .diagram-content {
1499
+ max-height: 280px;
1500
+ padding: 8px 10px;
1501
+ border: 1px solid #35283b;
1502
+ border-radius: 4px;
1503
+ background: #100c13;
1504
+ }
1505
+ .flow-task-preview small {
1506
+ color: var(--muted);
1507
+ font-size: 11px;
1508
+ }
1509
+ .flow-task-details {
1510
+ display: grid;
1511
+ gap: 12px;
1512
+ }
1513
+ .flow-task-details details {
1514
+ min-width: 0;
1515
+ }
1516
+ .flow-task-details summary {
1517
+ cursor: pointer;
1518
+ margin-bottom: 8px;
1519
+ }
1520
+ .flow-task-details .diagram-content {
1521
+ max-height: 320px;
1522
+ overflow: auto;
1523
+ }
1524
+ .flow-kind-icon {
1525
+ width: 26px;
1526
+ height: 26px;
1527
+ color: #e551ba;
1528
+ flex-shrink: 0;
1529
+ }
1530
+ .flow-kind-icon svg {
1531
+ width: 100%;
1532
+ height: 100%;
1533
+ }
1534
+ .flow-card-heading .eyebrow {
1535
+ font-size: 10px;
1536
+ }
1537
+ .flow-status {
1538
+ margin-left: auto;
1539
+ font-size: 10px;
1540
+ border-radius: 20px;
1541
+ padding: 4px 8px;
1542
+ background: #342031;
1543
+ color: #f0b7e0;
1544
+ }
1545
+ .flow-step[data-status="untaken"] .flow-status {
1546
+ background: #241e28;
1547
+ color: #948797;
1548
+ }
1549
+ .flow-step[data-status="untaken"] .flow-kind-icon {
1550
+ color: #948797;
1551
+ }
1552
+ .flow-card-body > strong {
1553
+ white-space: normal;
1554
+ font-size: 18px;
1555
+ line-height: 1.25;
1556
+ overflow-wrap: anywhere;
1557
+ }
1558
+ .flow-step-description {
1559
+ line-height: 1.5;
1560
+ color: #b9aebf;
1561
+ white-space: pre-wrap;
1562
+ }
1563
+ .flow-card-footer {
1564
+ margin-top: auto;
1565
+ padding-top: 10px;
1566
+ border-top: 1px solid #342a38;
1567
+ font-size: 10px;
1568
+ color: #a092a7;
1569
+ }
1570
+ .flow-card-footer code {
1571
+ max-width: 45%;
1572
+ white-space: normal;
1573
+ overflow-wrap: anywhere;
1574
+ }
1575
+ .flow-card-footer small {
1576
+ text-align: right;
1577
+ }
1578
+ .flow-join-summary {
1579
+ margin-top: 4px;
1580
+ font-size: 11px;
1581
+ color: #c9b9cd;
1582
+ }
1583
+ .flow-join-summary > span {
1584
+ color: #ef9ed9;
1585
+ font-variant-numeric: tabular-nums;
1586
+ }
1587
+ .flow-lanes {
1588
+ display: flex;
1589
+ flex-direction: column;
1590
+ gap: 4px;
1591
+ width: 100%;
1592
+ }
1593
+ .flow-lane {
1594
+ border-radius: 5px;
1595
+ background: #211923;
1596
+ padding: 6px 8px;
1597
+ font-size: 11px;
1598
+ min-height: 28px;
1599
+ }
1600
+ .flow-lane > span {
1601
+ min-width: 0;
1602
+ overflow-wrap: anywhere;
1603
+ }
1604
+ .flow-lane > span > span {
1605
+ color: #ef9ed9;
1606
+ margin-right: 4px;
1607
+ }
1608
+ .flow-lane small {
1609
+ color: #b9aebf;
1610
+ }
1611
+ .flow-lane-details {
1612
+ padding-left: 18px;
1613
+ font-size: 12px;
1614
+ }
1615
+ .flow-request-heading > span:first-child {
1616
+ min-width: 0;
1617
+ max-width: 80%;
1618
+ }
1619
+ .flow-request-description {
1620
+ display: block;
1621
+ white-space: pre-wrap;
1622
+ font-size: 12px;
1623
+ line-height: 1.5;
1624
+ color: #b9aebf;
1625
+ margin-top: 5px;
1626
+ overflow-wrap: anywhere;
1627
+ }
1628
+
1629
+ /* Structured context stays within the card; its gestures never move the camera. */
1630
+ .jev-devtools .lab-content-card {
1631
+ display: flex;
1632
+ flex-direction: column;
1633
+ padding: 14px;
1634
+ }
1635
+ .jev-devtools .lab-content-card h3 {
1636
+ font-size: 14px;
1637
+ margin-bottom: 8px;
1638
+ flex-shrink: 0;
1639
+ }
1640
+ .jev-devtools .lab-content-card .lab-eyebrow {
1641
+ font-size: 9px;
1642
+ margin-bottom: 5px;
1643
+ flex-shrink: 0;
1644
+ }
1645
+ .jev-devtools .diagram-content {
1646
+ min-height: 0;
1647
+ flex: 1;
1648
+ overflow: auto;
1649
+ overscroll-behavior: contain;
1650
+ touch-action: pan-y;
1651
+ scrollbar-width: thin;
1652
+ scrollbar-color: #514256 transparent;
1653
+ padding-right: 4px;
1654
+ font-size: 12px;
1655
+ line-height: 1.5;
1656
+ color: #d5cdd9;
1657
+ cursor: auto;
1658
+ user-select: text;
1659
+ }
1660
+ .jev-devtools .diagram-content:focus-visible {
1661
+ outline: 1px solid #e551ba;
1662
+ outline-offset: -1px;
1663
+ border-radius: 3px;
1664
+ }
1665
+ .jev-devtools .diagram-property {
1666
+ display: flex;
1667
+ justify-content: space-between;
1668
+ align-items: baseline;
1669
+ gap: 8px;
1670
+ padding: 5px 0;
1671
+ border-bottom: 1px solid #261e2a;
1672
+ }
1673
+ .jev-devtools .diagram-property-text {
1674
+ display: block;
1675
+ }
1676
+ .jev-devtools .diagram-property-key {
1677
+ font:
1678
+ 10px/1.5 ui-monospace,
1679
+ monospace;
1680
+ color: #c8a8c8;
1681
+ overflow-wrap: anywhere;
1682
+ min-width: 0;
1683
+ }
1684
+ .jev-devtools .diagram-property-text > .diagram-property-key {
1685
+ display: block;
1686
+ margin-bottom: 2px;
1687
+ }
1688
+ .jev-devtools .diagram-text-value {
1689
+ display: block;
1690
+ white-space: pre-wrap;
1691
+ overflow-wrap: anywhere;
1692
+ }
1693
+ .jev-devtools .diagram-text-preview {
1694
+ display: -webkit-box;
1695
+ -webkit-line-clamp: 3;
1696
+ -webkit-box-orient: vertical;
1697
+ overflow: hidden;
1698
+ }
1699
+ .jev-devtools .diagram-value-number {
1700
+ color: #a6d6ca;
1701
+ font:
1702
+ 11px/1.5 ui-monospace,
1703
+ monospace;
1704
+ font-variant-numeric: tabular-nums;
1705
+ overflow-wrap: anywhere;
1706
+ }
1707
+ .jev-devtools .diagram-value-boolean {
1708
+ color: #c4b1ed;
1709
+ font:
1710
+ 11px/1.5 ui-monospace,
1711
+ monospace;
1712
+ }
1713
+ .jev-devtools .diagram-value-empty {
1714
+ color: #9c8ca4;
1715
+ font:
1716
+ 10px/1.5 ui-monospace,
1717
+ monospace;
1718
+ }
1719
+ .jev-devtools .diagram-property-disclosure {
1720
+ width: 100%;
1721
+ display: flex;
1722
+ align-items: baseline;
1723
+ gap: 5px;
1724
+ padding: 6px 0;
1725
+ border: 0;
1726
+ border-bottom: 1px solid #261e2a;
1727
+ border-radius: 0;
1728
+ background: transparent;
1729
+ text-align: left;
1730
+ color: inherit;
1731
+ }
1732
+ .jev-devtools .diagram-property-disclosure:hover {
1733
+ background: #211723;
1734
+ }
1735
+ .jev-devtools .diagram-property-caret {
1736
+ color: #ab8aab;
1737
+ flex-shrink: 0;
1738
+ }
1739
+ .jev-devtools .diagram-property-type {
1740
+ color: #9c8ca4;
1741
+ font:
1742
+ 10px/1.5 ui-monospace,
1743
+ monospace;
1744
+ margin-left: auto;
1745
+ flex-shrink: 0;
1746
+ }
1747
+ .jev-devtools .diagram-property-children {
1748
+ margin-left: 4px;
1749
+ padding-left: 9px;
1750
+ border-left: 1px solid #49324b;
1751
+ }
1752
+ .jev-devtools .diagram-content-toggle {
1753
+ display: block;
1754
+ padding: 3px 0;
1755
+ border: 0;
1756
+ border-radius: 0;
1757
+ background: transparent;
1758
+ color: #e9a4d7;
1759
+ font-size: 10px;
1760
+ text-align: left;
1761
+ }
1762
+ .jev-devtools .diagram-content-toggle:hover {
1763
+ color: #ffd9f3;
1764
+ text-decoration: underline;
1765
+ }
1766
+
1767
+ /* Noul is a probability of true; its two outputs carry p and 1-p.
1768
+ Keep the fill opaque, with readable text even at zero probability. */
1769
+ .jev-devtools .lab-noul-output {
1770
+ border-color: rgb(
1771
+ 245 243 246 / calc(0.35 + 0.65 * var(--lab-noul-probability, 1))
1772
+ );
1773
+ }
1774
+ .jev-devtools .lab-noul-output > h3,
1775
+ .jev-devtools .lab-noul-output > p {
1776
+ opacity: calc(0.65 + 0.35 * var(--lab-noul-probability, 1));
1777
+ }
1778
+
1779
+ .flow-condition-rule {
1780
+ display: block;
1781
+ padding: 10px 12px;
1782
+ border: 1px solid #49324b;
1783
+ border-radius: 6px;
1784
+ background: #211723;
1785
+ width: 100%;
1786
+ }
1787
+ .flow-condition-label {
1788
+ display: block;
1789
+ font-size: 10px;
1790
+ color: #ba9dbe;
1791
+ margin-bottom: 5px;
1792
+ }
1793
+ .flow-condition-rule code {
1794
+ display: block;
1795
+ white-space: pre-wrap;
1796
+ overflow-wrap: anywhere;
1797
+ font:
1798
+ 12px/1.6 ui-monospace,
1799
+ monospace;
1800
+ color: #f2d7eb;
1801
+ }
1802
+
1803
+ .flow-condition-incoming {
1804
+ display: block;
1805
+ padding-bottom: 10px;
1806
+ margin-bottom: 10px;
1807
+ border-bottom: 1px solid #49324b;
1808
+ }
1809
+ .flow-condition-input {
1810
+ display: flex;
1811
+ justify-content: space-between;
1812
+ align-items: baseline;
1813
+ gap: 12px;
1814
+ font-size: 12px;
1815
+ padding: 3px 0;
1816
+ }
1817
+ .flow-condition-input > span {
1818
+ min-width: 0;
1819
+ overflow-wrap: anywhere;
1820
+ }
1821
+ .flow-condition-input > b {
1822
+ font-size: 17px;
1823
+ font-weight: 600;
1824
+ color: #f2d7eb;
1825
+ overflow-wrap: anywhere;
1826
+ white-space: normal;
1827
+ max-width: 65%;
1828
+ }
1829
+ .flow-input-details {
1830
+ font-size: 12px;
1831
+ }
1832
+ .flow-input-details > div {
1833
+ display: flex;
1834
+ gap: 16px;
1835
+ margin: 6px 0;
1836
+ }
1837
+ .flow-input-details code {
1838
+ color: #a092a7;
1839
+ margin-left: 8px;
1840
+ }
1841
+ .flow-input-details dd {
1842
+ margin: 0;
1843
+ overflow-wrap: anywhere;
1844
+ }
1845
+
1846
+ .flow-overview-stack {
1847
+ display: flex;
1848
+ flex-direction: column;
1849
+ flex: 1;
1850
+ min-height: 0;
1851
+ min-width: 0;
1852
+ overflow: hidden;
1853
+ }
1854
+ .flow-map-progress {
1855
+ display: grid;
1856
+ gap: 10px;
1857
+ font-size: 14px;
1858
+ line-height: 1.5;
1859
+ }
1860
+ .flow-map-progress small {
1861
+ color: #b5a6bc;
1862
+ }
1863
+
1864
+ .jev-devtools .flow-card-body {
1865
+ display: flex;
1866
+ flex-direction: column;
1867
+ gap: 8px;
1868
+ width: 100%;
1869
+ flex: 1;
1870
+ padding: 0;
1871
+ border: 0;
1872
+ border-radius: 0;
1873
+ background: transparent;
1874
+ color: inherit;
1875
+ font: inherit;
1876
+ text-align: left;
1877
+ }
1878
+ .jev-devtools .flow-card-body:hover {
1879
+ background: transparent;
1880
+ }
1881
+ .flow-collection-controls {
1882
+ display: flex;
1883
+ align-items: end;
1884
+ gap: 10px;
1885
+ border-top: 1px solid #49324b;
1886
+ margin-top: 4px;
1887
+ padding-top: 12px;
1888
+ }
1889
+ .flow-collection-controls label {
1890
+ display: grid;
1891
+ gap: 6px;
1892
+ flex: 1;
1893
+ min-width: 0;
1894
+ color: #b9aebf;
1895
+ font-size: 11px;
1896
+ }
1897
+ .jev-devtools .flow-collection-controls select {
1898
+ width: 100%;
1899
+ min-width: 0;
1900
+ }
1901
+ .jev-devtools .flow-collection-controls button {
1902
+ flex: none;
1903
+ color: #efb1df;
1904
+ }
1905
+ .flow-collection-expansion {
1906
+ position: absolute;
1907
+ width: max-content;
1908
+ }
1909
+ .flow-item-frame {
1910
+ border: 1px solid #64415d;
1911
+ border-radius: 12px;
1912
+ background: #100c13;
1913
+ overflow: hidden;
1914
+ }
1915
+ .flow-collection-heading {
1916
+ display: flex;
1917
+ align-items: center;
1918
+ justify-content: space-between;
1919
+ gap: 24px;
1920
+ padding: 16px 20px;
1921
+ border-bottom: 1px solid #49324b;
1922
+ background: #1c1220;
1923
+ }
1924
+ .flow-collection-heading h3 {
1925
+ margin: 5px 0;
1926
+ font-size: 16px;
1927
+ }
1928
+ .flow-collection-heading small {
1929
+ color: #b9aebf;
1930
+ }
1931
+ .flow-collection-link text {
1932
+ fill: #ce9abd;
1933
+ font-size: 12px;
1934
+ }
1935
+ .flow-item-placeholder {
1936
+ width: 600px;
1937
+ padding: 24px;
1938
+ line-height: 1.6;
1939
+ }
1940
+ .flow-inline-overview,
1941
+ .flow-inline-overview > .whole-flow,
1942
+ .flow-inline-overview > .whole-flow > .flow-workspace {
1943
+ display: block;
1944
+ flex: none;
1945
+ }
1946
+ .flow-inline-surface {
1947
+ position: relative;
1948
+ }
1949
+
1950
+ .flow-item-content {
1951
+ min-width: 0;
1952
+ animation: flow-item-enter 240ms cubic-bezier(0.22, 1, 0.36, 1) both;
1953
+ }
1954
+ .flow-item-forward {
1955
+ --flow-item-offset: 28px;
1956
+ }
1957
+ .flow-item-backward {
1958
+ --flow-item-offset: -28px;
1959
+ }
1960
+ @keyframes flow-item-enter {
1961
+ from {
1962
+ opacity: 0;
1963
+ transform: translateX(var(--flow-item-offset));
1964
+ }
1965
+ to {
1966
+ opacity: 1;
1967
+ transform: translateX(0);
1968
+ }
1969
+ }
1970
+ @media (prefers-reduced-motion: reduce) {
1971
+ .flow-item-content {
1972
+ animation: none;
1973
+ }
1974
+ }
1975
+ .jev-devtools .flow-item-arrow {
1976
+ position: absolute;
1977
+ top: 50%;
1978
+ transform: translateY(-50%);
1979
+ display: grid;
1980
+ place-items: center;
1981
+ width: 56px;
1982
+ height: 56px;
1983
+ padding: 12px;
1984
+ margin: 0 auto;
1985
+ border: 1px solid #64415d;
1986
+ border-radius: 6px;
1987
+ background: #211623;
1988
+ color: #efa7db;
1989
+ }
1990
+ .jev-devtools .flow-item-arrow:hover:not(:disabled) {
1991
+ background: #382035;
1992
+ border-color: #e551ba;
1993
+ }
1994
+ .flow-item-arrow svg {
1995
+ width: 28px;
1996
+ height: 28px;
1997
+ }
1998
+
1999
+ .flow-item-previous {
2000
+ left: -76px;
2001
+ }
2002
+ .flow-item-next {
2003
+ right: -76px;
2004
+ }