@popcorn245/cornfield-components 0.52.1 → 0.54.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 (43) hide show
  1. package/README.md +1 -1
  2. package/dist/chunks/around-BcnegEdS.js +99 -0
  3. package/dist/chunks/connection-KDiWvV19.js +23 -0
  4. package/dist/chunks/{engine-BmXtSISH.js → engine-xmHJvQY9.js} +1188 -1186
  5. package/dist/chunks/{layers-Bj4Tluxe.js → layers-ho10a2y7.js} +48 -48
  6. package/dist/chunks/{map-BZRFOYkt.js → map-DbfPgQRe.js} +385 -385
  7. package/dist/chunks/node-panel-CC8UrSzJ.js +410 -0
  8. package/dist/chunks/panel-review-ih7RlfkH.js +884 -0
  9. package/dist/chunks/review-pieces-DtRxCDMr.js +2523 -0
  10. package/dist/chunks/{review-source-CK5tYIqk.js → review-source-CmbwaPCM.js} +1 -1
  11. package/dist/chunks/scope-2m2VmJXn.js +185 -0
  12. package/dist/chunks/scope-proposal-T06ndbin.js +116 -0
  13. package/dist/chunks/{sheets-D-sMZzSs.js → sheets-BWANwtZP.js} +7 -2
  14. package/dist/chunks/source-address-DXanAREm.js +57 -0
  15. package/dist/chunks/{status-DI5QLlAp.js → status-DM-iIEsg.js} +4 -3
  16. package/dist/corn-changes.js +43 -0
  17. package/dist/corn-decision.js +52 -0
  18. package/dist/corn-layers.js +275 -1
  19. package/dist/corn-map.js +125 -1
  20. package/dist/corn-node-panel.js +42 -1
  21. package/dist/corn-proposal.js +50 -0
  22. package/dist/corn-review.js +425 -1
  23. package/dist/corn-scope.js +33 -9
  24. package/dist/corn-search.js +484 -1
  25. package/dist/index.js +11 -8
  26. package/dist/manifest.json +95 -70
  27. package/dist/tokens.css +6 -0
  28. package/dist/types/components.d.ts +111 -5
  29. package/dist/types/corn-changes.d.ts +2 -0
  30. package/dist/types/corn-decision.d.ts +2 -0
  31. package/dist/types/corn-proposal.d.ts +2 -0
  32. package/dist/types/index.d.ts +3 -0
  33. package/dist/version.json +1 -1
  34. package/package.json +17 -5
  35. package/dist/chunks/around-BFqYTZ0K.js +0 -78
  36. package/dist/chunks/corn-layers-Cni5rISZ.js +0 -275
  37. package/dist/chunks/corn-map-B2-YxiEL.js +0 -125
  38. package/dist/chunks/corn-node-panel-BkvJThlp.js +0 -42
  39. package/dist/chunks/corn-review-5wf7AT4o.js +0 -2900
  40. package/dist/chunks/corn-search-CXs5d06S.js +0 -484
  41. package/dist/chunks/node-panel-BdvFvWCE.js +0 -1291
  42. package/dist/chunks/scope-CqPbHcKL.js +0 -137
  43. package/dist/chunks/source-address-C70zNPIj.js +0 -79
@@ -398,7 +398,8 @@ var r = Object.freeze({
398
398
  nodePanelEmpty: "Select a node on the map to see its details",
399
399
  needsScope: "This needs a corn-scope around it, with a corn-map in it",
400
400
  needsMap: "This needs a corn-map in the same corn-scope",
401
- waitingForMap: "Waiting for the map"
401
+ waitingForMap: "Waiting for the map",
402
+ secondSection: "This scope already has one of these"
402
403
  }), i = (e) => typeof e == "string" && Object.hasOwn(r, e), a = /* @__PURE__ */ RegExp("[\\u0000-\\u001f\\u007f-\\u009f\\u2028\\u2029]");
403
404
  function o(e) {
404
405
  return typeof e == "string" ? e.trim() ? a.test(e) ? "is one line of plain text (no line break or control character)" : [...e].length > 80 ? "is at most 80 characters" : null : "is empty (leave the key out to keep the default)" : "is text";
@@ -739,16 +740,16 @@ function Se(e) {
739
740
  }, r = t.canvas, i = (e) => !!e && !e.hidden && e.isConnected;
740
741
  if (ye(e)) n.bottom = xe(e) + 8;
741
742
  else if (r && typeof r.getBoundingClientRect == "function") {
742
- let t = r.getBoundingClientRect(), a = e.el("proposal-bar");
743
- i(a) && (n.top = Math.max(0, a.getBoundingClientRect().bottom - t.top) + 8);
743
+ let t = r.getBoundingClientRect(), a = e.ask("proposal:covers");
744
+ a && (n.top = Math.max(0, a.bottom - t.top) + 8);
744
745
  let o = e.ask("panel:covers");
745
746
  o && o.right && (n.right = o.right);
746
747
  let s = e.el("forge-panel");
747
748
  i(s) && s.classList.contains("forge-open") && (n.left = s.offsetWidth);
748
- let c = e.el("review-column");
749
- i(c) && (n.left = Math.max(n.left, Math.max(0, c.getBoundingClientRect().right - t.left) + 8));
750
- let l = e.root ? e.root.querySelector(".hx-player") : null;
751
- i(l) && (n.bottom = Math.max(0, t.bottom - l.getBoundingClientRect().top) + 8);
749
+ let c = e.ask("changes:covers");
750
+ c && (n.left = Math.max(n.left, Math.max(0, c.right - t.left) + 8));
751
+ let l = e.ask("player:covers");
752
+ l && (n.bottom = Math.max(0, t.bottom - l.top) + 8);
752
753
  }
753
754
  return O(t.width || 0, t.height || 0, n);
754
755
  }
@@ -1403,7 +1404,8 @@ var Tt = "corn-scope-request", Et = "corn-scope-changed", Dt = (e) => e.slot("sc
1403
1404
  serverTheme: null,
1404
1405
  host: null,
1405
1406
  source: null,
1406
- mountStatus: null
1407
+ mountStatus: null,
1408
+ signIn: () => ""
1407
1409
  })), Ot = (e) => {
1408
1410
  let t = Dt(e);
1409
1411
  return t.host ? t : null;
@@ -1431,116 +1433,69 @@ function kt(e, t) {
1431
1433
  }
1432
1434
  };
1433
1435
  }
1434
- // ../explorer/cloud-model.js
1435
- var M = {
1436
- run: {
1437
- title: "Breaks now",
1438
- legend: "No tick: breaks as soon as it is down",
1439
- ticks: 0,
1440
- color: "#f87171"
1441
- },
1442
- deploy: {
1443
- title: "Breaks at the next deploy",
1444
- legend: "One tick: breaks at the next deploy, rebuild or first run",
1445
- ticks: 1,
1446
- color: "#fbbf24"
1447
- },
1448
- renew: {
1449
- title: "Breaks at the next certificate renewal",
1450
- legend: "Two ticks: breaks at the next certificate renewal",
1451
- ticks: 2,
1452
- color: "#a78bfa"
1453
- }
1454
- }, At = (e) => e && Object.hasOwn(M, e.when) ? e.when : "run", jt = (e) => e && e.kind === "calls" ? M[At(e)].ticks : 0, Mt = (e) => e && e.kind === "web" ? "web" : "cloud", Nt = {
1455
- outbox: {
1456
- color: "#f59e0b",
1457
- label: "Outbox → API (writes)"
1458
- },
1459
- changes: {
1460
- color: "#22d3ee",
1461
- label: "Change stream (reads back)"
1462
- },
1463
- trigger: {
1464
- color: "#a3e635",
1465
- label: "Trigger → audit_log (seq)"
1466
- },
1467
- sync: {
1468
- color: "#fb7185",
1469
- label: "Background sync (external)"
1470
- },
1471
- model: {
1472
- color: "#c084fc",
1473
- label: "Model classes feed a tier"
1474
- },
1475
- rom: {
1476
- color: "#f0abfc",
1477
- label: "ROM: change → re-bake → serve"
1478
- },
1479
- read: {
1480
- color: "#93c5fd",
1481
- label: "Server reads rows over HTTP"
1482
- },
1483
- api: {
1484
- color: "#38bdf8",
1485
- label: "App calls the API (derived from its code)"
1486
- },
1487
- build: {
1488
- color: "#d6d3d1",
1489
- label: "Build script writes files"
1490
- },
1491
- reads: {
1492
- color: "#fde047",
1493
- label: "Table → page (render reads)"
1494
- },
1495
- writes: {
1496
- color: "#f87171",
1497
- label: "Page → table (form / action)"
1498
- },
1499
- uses: {
1500
- color: "#f472b6",
1501
- label: "Stylesheet uses design tokens"
1502
- },
1503
- extends: {
1504
- color: "#5eead4",
1505
- label: "Component extends a base class"
1506
- },
1507
- calls: {
1508
- color: "#fb7185",
1509
- label: "Calls (service → service, outside system)"
1510
- },
1511
- triggers: {
1512
- color: "#a3e635",
1513
- label: "Triggers (cron, webhook, store change)"
1514
- },
1515
- delivers: {
1516
- color: "#94a3b8",
1517
- label: "Outside system → webhook endpoint"
1518
- },
1519
- "runs-on": {
1520
- color: "#a8a29e",
1521
- label: "App → the stack that serves its domain"
1522
- }
1523
- }, Pt = (e) => Nt[e.kind === "flow" ? e.flow : e.kind] || Nt.sync, N = (e) => e.mark === "edit" ? e.editOp || "none" : e.mark || "none", Ft = (e) => !!e && !!e.mark && e.mark !== "none";
1436
+ // ../explorer/review-model.js
1437
+ var At = 6e4, jt = 60 * At, Mt = 24 * jt, Nt = (e, t) => `${e} ${t}${e === 1 ? "" : "s"}`;
1438
+ function Pt(e, t) {
1439
+ let n = typeof e == "string" ? Date.parse(e) : NaN;
1440
+ if (!Number.isFinite(n) || !Number.isFinite(t)) return "";
1441
+ let r = t - n;
1442
+ return r < At ? "just now" : r < jt ? `${Nt(Math.floor(r / At), "minute")} ago` : r < Mt ? `${Nt(Math.floor(r / jt), "hour")} ago` : `${Nt(Math.floor(r / Mt), "day")} ago`;
1443
+ }
1444
+ var Ft = {
1445
+ approved: "Approved",
1446
+ notes: "Sent back"
1447
+ };
1524
1448
  function It(e, t) {
1525
- return e === "before" ? N(t) !== "added" : e !== "after" || N(t) !== "removed";
1449
+ let { verdict: n, when: r } = Lt(e, t);
1450
+ return r ? `${n} ${r}` : n;
1526
1451
  }
1527
1452
  function Lt(e, t) {
1528
- return It(e, t);
1453
+ return !e || !Ft[e.verdict] ? {
1454
+ verdict: "",
1455
+ when: ""
1456
+ } : {
1457
+ verdict: Ft[e.verdict],
1458
+ when: Pt(e.at, t) || ""
1459
+ };
1460
+ }
1461
+ function Rt(e) {
1462
+ return typeof e == "string" && e.trim() ? null : "Say what should change before you send it back.";
1463
+ }
1464
+ function zt(e, t, n) {
1465
+ return {
1466
+ verdict: e,
1467
+ note: typeof t == "string" ? t.trim() : "",
1468
+ edits: structuredClone(Array.isArray(n) ? n : [])
1469
+ };
1470
+ }
1471
+ var Bt = (e) => typeof e == "string" && /^pull\/[1-9]\d{0,8}$/.test(e);
1472
+ function Vt(e, t) {
1473
+ if (!t) return "";
1474
+ let n = Nt(t, "edit");
1475
+ return e === "approved" ? `Your ${n} ${t === 1 ? "is" : "are"} in the review comment on the PR. The drafting agent will fold ${t === 1 ? "it" : "them"} into the proposal.` : `Sent with your ${n}. The drafting agent will fold ${t === 1 ? "it" : "them"} into the next draft.`;
1476
+ }
1477
+ // ../explorer/proposal-marks.js
1478
+ var M = (e) => e.mark === "edit" ? e.editOp || "none" : e.mark || "none", Ht = (e) => !!e && !!e.mark && e.mark !== "none";
1479
+ function Ut(e, t) {
1480
+ return e === "before" ? M(t) !== "added" : e !== "after" || M(t) !== "removed";
1481
+ }
1482
+ function Wt(e, t) {
1483
+ return Ut(e, t);
1529
1484
  }
1530
- function Rt(e, t) {
1485
+ function Gt(e, t) {
1531
1486
  let n = t.mark || "none";
1532
1487
  return n === "edit" ? "edit" : e === "diff" ? n : "none";
1533
1488
  }
1534
- function zt(e) {
1489
+ function Kt(e) {
1535
1490
  if (e.mark !== "changed" || !e.before) return e;
1536
1491
  let t = { ...e };
1537
1492
  for (let [n, r] of Object.entries(e.before)) r === null ? delete t[n] : t[n] = r;
1538
1493
  return t;
1539
1494
  }
1540
- function Bt(e, t) {
1495
+ function qt(e, t) {
1541
1496
  let n = /* @__PURE__ */ new Set();
1542
- for (let t of e) Ft(t) && n.add(t.id);
1543
- for (let e of t) Ft(e) && (n.add(e.from), n.add(e.to));
1497
+ for (let t of e) Ht(t) && n.add(t.id);
1498
+ for (let e of t) Ht(e) && (n.add(e.from), n.add(e.to));
1544
1499
  let r = new Set(n);
1545
1500
  for (let e of t) {
1546
1501
  let t = !e.kind && !e.dashed;
@@ -1551,12 +1506,12 @@ function Bt(e, t) {
1551
1506
  near: r
1552
1507
  };
1553
1508
  }
1554
- var Vt = (e) => !e.kind && !e.dashed;
1555
- function Ht(e, t, { gap: n = 74 } = {}) {
1556
- let r = new Map(e.map((e) => [e.id, e])), i = e.filter((e) => N(e) !== "added"), a = e.filter((e) => N(e) === "added");
1509
+ var Jt = (e) => !e.kind && !e.dashed;
1510
+ function Yt(e, t, { gap: n = 74 } = {}) {
1511
+ let r = new Map(e.map((e) => [e.id, e])), i = e.filter((e) => M(e) !== "added"), a = e.filter((e) => M(e) === "added");
1557
1512
  if (!a.length) return;
1558
1513
  let o = new Set(i.map((e) => e.id)), s = (e) => {
1559
- let n = t.find((t) => Vt(t) && t.to === e.id && r.has(t.from));
1514
+ let n = t.find((t) => Jt(t) && t.to === e.id && r.has(t.from));
1560
1515
  if (n) return n.from;
1561
1516
  let i = t.find((t) => t.from === e.id && r.has(t.to) || t.to === e.id && r.has(t.from));
1562
1517
  return i ? i.from === e.id ? i.to : i.from : null;
@@ -1588,11 +1543,11 @@ function Ht(e, t, { gap: n = 74 } = {}) {
1588
1543
  }
1589
1544
  for (let e of u) l(e, 0, 0), i.push(e);
1590
1545
  }
1591
- function Ut(e) {
1592
- if (e) for (let t of e.tiers) t.nodes = [...t.nodes.filter((e) => N(e) !== "added"), ...t.nodes.filter((e) => N(e) === "added")];
1546
+ function Xt(e) {
1547
+ if (e) for (let t of e.tiers) t.nodes = [...t.nodes.filter((e) => M(e) !== "added"), ...t.nodes.filter((e) => M(e) === "added")];
1593
1548
  }
1594
- var Wt = 50;
1595
- function Gt(e, t) {
1549
+ var Zt = 50;
1550
+ function Qt(e, t) {
1596
1551
  let n = new Map(t.tiers.map((e) => [e.key, e]));
1597
1552
  if (e.tiers.some((e) => e.nodes.length && !n.get(e.key)?.nodes.length)) return !1;
1598
1553
  let r = new Map(t.tiers.filter((e) => e.nodes.length).map((e, n) => [e.key, t.headers[n]])), i = new Map(t.tiers.flatMap((e) => e.nodes).map((e) => [e.id, e]));
@@ -1606,7 +1561,7 @@ function Gt(e, t) {
1606
1561
  t.x = e.x, t.y = e.y, t.r = e.r;
1607
1562
  }
1608
1563
  if (!n.length) continue;
1609
- let o = r.get(t.key).rows, s = Math.max(...e.map((e) => e.x)), c = (e) => (e - (o - 1) / 2) * Wt, l = new Set(e.filter((e) => e.x === s).map((e) => Math.round(e.y))), u = 0;
1564
+ let o = r.get(t.key).rows, s = Math.max(...e.map((e) => e.x)), c = (e) => (e - (o - 1) / 2) * Zt, l = new Set(e.filter((e) => e.x === s).map((e) => Math.round(e.y))), u = 0;
1610
1565
  for (let e of n) {
1611
1566
  for (; l.has(Math.round(c(u)));) u++;
1612
1567
  e.x = s, e.y = c(u), l.add(Math.round(e.y)), a = Math.min(a, -(e.y + 40));
@@ -1614,440 +1569,636 @@ function Gt(e, t) {
1614
1569
  }
1615
1570
  return e.top = a, !0;
1616
1571
  }
1617
- var P = {
1618
- root: {
1619
- color: "#f59e0b",
1620
- r: 28
1621
- },
1622
- app: {
1623
- color: "#5168ec",
1624
- r: 24
1625
- },
1626
- page: {
1627
- color: "#38bdf8",
1628
- r: 18
1629
- },
1630
- pkg: {
1631
- color: "#0f8293",
1632
- r: 24
1633
- },
1634
- core: {
1635
- color: "#14b8a6",
1636
- r: 20
1637
- },
1638
- token: {
1639
- color: "#ef409b",
1640
- r: 20
1641
- },
1642
- atom: {
1643
- color: "#108d4e",
1644
- r: 19
1645
- },
1646
- molecule: {
1647
- color: "#a855f7",
1648
- r: 21
1649
- },
1650
- tool: {
1651
- color: "#f43f5e",
1652
- r: 19
1653
- },
1654
- store: {
1655
- color: "#fb923c",
1656
- r: 20
1657
- },
1658
- table: {
1659
- color: "#fde047",
1660
- r: 18
1661
- },
1662
- rom: {
1663
- color: "#c398c6",
1664
- r: 19
1665
- },
1666
- service: {
1667
- color: "#84cc16",
1668
- r: 20
1669
- },
1670
- external: {
1671
- color: "#94a3b8",
1672
- r: 21
1673
- },
1674
- stack: {
1675
- color: "#b49fa0",
1676
- r: 22
1677
- },
1678
- machine: {
1679
- color: "#78716c",
1680
- r: 26
1681
- },
1682
- container: {
1683
- color: "#d6d3d1",
1684
- r: 12
1685
- },
1686
- persona: {
1687
- color: "#fb7185",
1688
- r: 22
1689
- },
1690
- device: {
1691
- color: "#2dd4bf",
1692
- r: 14
1693
- },
1694
- floor: {
1695
- color: "#a3e635",
1696
- r: 20
1697
- },
1698
- room: {
1699
- color: "#f7ed81",
1700
- r: 16
1701
- }
1702
- }, Kt = Object.freeze({
1703
- root: "circle",
1704
- app: "circle",
1705
- page: "circle",
1706
- pkg: "circle",
1707
- core: "circle",
1708
- token: "circle",
1709
- atom: "circle",
1710
- molecule: "circle",
1711
- tool: "circle",
1712
- rom: "circle",
1713
- service: "circle",
1714
- store: "rounded-square",
1715
- table: "rounded-square",
1716
- external: "hexagon",
1717
- stack: "square",
1718
- machine: "square",
1719
- container: "square",
1720
- device: "square",
1721
- floor: "square",
1722
- room: "square",
1723
- persona: "diamond"
1724
- }), qt = Object.freeze([
1725
- "circle",
1726
- "rounded-square",
1727
- "hexagon",
1728
- "square",
1729
- "diamond"
1730
- ]), Jt = (e) => typeof e == "string" && Object.hasOwn(Kt, e) ? Kt[e] : "circle", Yt = [
1731
- "outbox",
1732
- "changes",
1733
- "trigger",
1734
- "sync",
1735
- "model",
1736
- "rom",
1737
- "read",
1738
- "build",
1739
- "api"
1740
- ], Xt = ["reads", "writes"], Zt = [
1741
- "calls",
1742
- "triggers",
1743
- "delivers"
1744
- ], Qt = ["runs-on"], $t = [
1745
- "flow",
1746
- ...Xt,
1747
- "uses",
1748
- "extends",
1749
- ...Zt,
1750
- ...Qt
1751
- ], en = [
1752
- "camera",
1753
- "phone",
1754
- "nfc-tag",
1755
- "home-assistant"
1756
- ], tn = ["floor", "room"], nn = "live-", rn = (e) => `persona-${e}`;
1757
- function an(e) {
1758
- if (typeof e != "string" || !e.startsWith("live-")) return null;
1759
- let t = e.slice(5);
1760
- for (let e of tn) if (t.startsWith(`${e}-`) && t.length > e.length + 1) return {
1761
- type: e,
1762
- id: t.slice(e.length + 1)
1763
- };
1764
- if (!t.startsWith("device-")) return null;
1765
- let n = t.slice(7), r = en.find((e) => n.startsWith(`${e}-`) && n.length > e.length + 1);
1766
- return r ? {
1767
- type: "device",
1768
- kind: r,
1769
- id: n.slice(r.length + 1)
1770
- } : null;
1771
- }
1772
- function on(e) {
1773
- return e ? typeof e.id == "string" && e.id.startsWith("live-") ? !0 : tn.includes(e.type) || e.type === "device" && !e.file : !1;
1774
- }
1775
- var sn = ["cloud", "web"], cn = [
1776
- "run",
1777
- "deploy",
1778
- "renew"
1779
- ], ln = ["browser"];
1780
- function un(e, t, n) {
1781
- let r = [], i = n?.type === "external" && (n.kind === void 0 || n.kind === "cloud");
1782
- return e.when !== void 0 && (cn.includes(e.when) || r.push(`has when "${e.when}". Valid values: ${cn.join(", ")}`), e.kind === "calls" ? i || r.push("has \"when\" but does not go into a cloud node: only an outage of a cloud service is timed.") : r.push("has \"when\", which goes only on a calls edge.")), e.side !== void 0 && (ln.includes(e.side) || r.push(`has side "${e.side}". Valid values: ${ln.join(", ")}`), e.kind === "calls" ? (t?.type !== "app" || n?.type !== "external") && r.push("has \"side\", which goes only on an app -> external calls edge (the visitor's browser makes the call).") : r.push("has \"side\", which goes only on a calls edge.")), r;
1572
+ // ../core/color.js
1573
+ var $t = Object.freeze({
1574
+ aliceblue: "#f0f8ff",
1575
+ antiquewhite: "#faebd7",
1576
+ aqua: "#00ffff",
1577
+ aquamarine: "#7fffd4",
1578
+ azure: "#f0ffff",
1579
+ beige: "#f5f5dc",
1580
+ bisque: "#ffe4c4",
1581
+ black: "#000000",
1582
+ blanchedalmond: "#ffebcd",
1583
+ blue: "#0000ff",
1584
+ blueviolet: "#8a2be2",
1585
+ brown: "#a52a2a",
1586
+ burlywood: "#deb887",
1587
+ cadetblue: "#5f9ea0",
1588
+ chartreuse: "#7fff00",
1589
+ chocolate: "#d2691e",
1590
+ coral: "#ff7f50",
1591
+ cornflowerblue: "#6495ed",
1592
+ cornsilk: "#fff8dc",
1593
+ crimson: "#dc143c",
1594
+ cyan: "#00ffff",
1595
+ darkblue: "#00008b",
1596
+ darkcyan: "#008b8b",
1597
+ darkgoldenrod: "#b8860b",
1598
+ darkgray: "#a9a9a9",
1599
+ darkgreen: "#006400",
1600
+ darkgrey: "#a9a9a9",
1601
+ darkkhaki: "#bdb76b",
1602
+ darkmagenta: "#8b008b",
1603
+ darkolivegreen: "#556b2f",
1604
+ darkorange: "#ff8c00",
1605
+ darkorchid: "#9932cc",
1606
+ darkred: "#8b0000",
1607
+ darksalmon: "#e9967a",
1608
+ darkseagreen: "#8fbc8f",
1609
+ darkslateblue: "#483d8b",
1610
+ darkslategray: "#2f4f4f",
1611
+ darkslategrey: "#2f4f4f",
1612
+ darkturquoise: "#00ced1",
1613
+ darkviolet: "#9400d3",
1614
+ deeppink: "#ff1493",
1615
+ deepskyblue: "#00bfff",
1616
+ dimgray: "#696969",
1617
+ dimgrey: "#696969",
1618
+ dodgerblue: "#1e90ff",
1619
+ firebrick: "#b22222",
1620
+ floralwhite: "#fffaf0",
1621
+ forestgreen: "#228b22",
1622
+ fuchsia: "#ff00ff",
1623
+ gainsboro: "#dcdcdc",
1624
+ ghostwhite: "#f8f8ff",
1625
+ gold: "#ffd700",
1626
+ goldenrod: "#daa520",
1627
+ gray: "#808080",
1628
+ green: "#008000",
1629
+ greenyellow: "#adff2f",
1630
+ grey: "#808080",
1631
+ honeydew: "#f0fff0",
1632
+ hotpink: "#ff69b4",
1633
+ indianred: "#cd5c5c",
1634
+ indigo: "#4b0082",
1635
+ ivory: "#fffff0",
1636
+ khaki: "#f0e68c",
1637
+ lavender: "#e6e6fa",
1638
+ lavenderblush: "#fff0f5",
1639
+ lawngreen: "#7cfc00",
1640
+ lemonchiffon: "#fffacd",
1641
+ lightblue: "#add8e6",
1642
+ lightcoral: "#f08080",
1643
+ lightcyan: "#e0ffff",
1644
+ lightgoldenrodyellow: "#fafad2",
1645
+ lightgray: "#d3d3d3",
1646
+ lightgreen: "#90ee90",
1647
+ lightgrey: "#d3d3d3",
1648
+ lightpink: "#ffb6c1",
1649
+ lightsalmon: "#ffa07a",
1650
+ lightseagreen: "#20b2aa",
1651
+ lightskyblue: "#87cefa",
1652
+ lightslategray: "#778899",
1653
+ lightslategrey: "#778899",
1654
+ lightsteelblue: "#b0c4de",
1655
+ lightyellow: "#ffffe0",
1656
+ lime: "#00ff00",
1657
+ limegreen: "#32cd32",
1658
+ linen: "#faf0e6",
1659
+ magenta: "#ff00ff",
1660
+ maroon: "#800000",
1661
+ mediumaquamarine: "#66cdaa",
1662
+ mediumblue: "#0000cd",
1663
+ mediumorchid: "#ba55d3",
1664
+ mediumpurple: "#9370db",
1665
+ mediumseagreen: "#3cb371",
1666
+ mediumslateblue: "#7b68ee",
1667
+ mediumspringgreen: "#00fa9a",
1668
+ mediumturquoise: "#48d1cc",
1669
+ mediumvioletred: "#c71585",
1670
+ midnightblue: "#191970",
1671
+ mintcream: "#f5fffa",
1672
+ mistyrose: "#ffe4e1",
1673
+ moccasin: "#ffe4b5",
1674
+ navajowhite: "#ffdead",
1675
+ navy: "#000080",
1676
+ oldlace: "#fdf5e6",
1677
+ olive: "#808000",
1678
+ olivedrab: "#6b8e23",
1679
+ orange: "#ffa500",
1680
+ orangered: "#ff4500",
1681
+ orchid: "#da70d6",
1682
+ palegoldenrod: "#eee8aa",
1683
+ palegreen: "#98fb98",
1684
+ paleturquoise: "#afeeee",
1685
+ palevioletred: "#db7093",
1686
+ papayawhip: "#ffefd5",
1687
+ peachpuff: "#ffdab9",
1688
+ peru: "#cd853f",
1689
+ pink: "#ffc0cb",
1690
+ plum: "#dda0dd",
1691
+ powderblue: "#b0e0e6",
1692
+ purple: "#800080",
1693
+ rebeccapurple: "#663399",
1694
+ red: "#ff0000",
1695
+ rosybrown: "#bc8f8f",
1696
+ royalblue: "#4169e1",
1697
+ saddlebrown: "#8b4513",
1698
+ salmon: "#fa8072",
1699
+ sandybrown: "#f4a460",
1700
+ seagreen: "#2e8b57",
1701
+ seashell: "#fff5ee",
1702
+ sienna: "#a0522d",
1703
+ silver: "#c0c0c0",
1704
+ skyblue: "#87ceeb",
1705
+ slateblue: "#6a5acd",
1706
+ slategray: "#708090",
1707
+ slategrey: "#708090",
1708
+ snow: "#fffafa",
1709
+ springgreen: "#00ff7f",
1710
+ steelblue: "#4682b4",
1711
+ tan: "#d2b48c",
1712
+ teal: "#008080",
1713
+ thistle: "#d8bfd8",
1714
+ tomato: "#ff6347",
1715
+ turquoise: "#40e0d0",
1716
+ violet: "#ee82ee",
1717
+ wheat: "#f5deb3",
1718
+ white: "#ffffff",
1719
+ whitesmoke: "#f5f5f5",
1720
+ yellow: "#ffff00",
1721
+ yellowgreen: "#9acd32"
1722
+ }), en = "[+-]?(?:\\d+\\.?\\d*|\\.\\d+)(?:e[+-]?\\d+)?", tn = (e, t, n) => Math.min(n, Math.max(t, e));
1723
+ function nn(e, t) {
1724
+ let n = RegExp(`^${t}\\(`, "i").exec(e);
1725
+ if (!n || !e.endsWith(")")) return null;
1726
+ let r = 0;
1727
+ for (let t = n[0].length - 1; t < e.length; t++) if (e[t] === "(") r++;
1728
+ else if (e[t] === ")" && --r === 0 && t !== e.length - 1) return null;
1729
+ return r === 0 ? e.slice(n[0].length, -1) : null;
1783
1730
  }
1784
- // ../explorer/outage-model.js
1785
- var F = Object.keys(M), dn = Object.fromEntries(F.map((e, t) => [e, t])), fn = /* @__PURE__ */ new Set([
1786
- "persona",
1787
- "room",
1788
- "floor"
1789
- ]), pn = [
1790
- "external",
1791
- "machine",
1792
- "container",
1793
- "service",
1794
- "page",
1795
- "app"
1796
- ], mn = (e) => {
1797
- let t = pn.indexOf(e);
1798
- return t < 0 ? pn.length : t;
1799
- }, hn = {
1800
- color: "#050608",
1801
- halo: "child"
1802
- }, gn = {
1803
- alpha: .92,
1804
- glow: 10,
1805
- edgeAlpha: .9,
1806
- edgeWidth: 2.2
1807
- }, _n = (e, t) => `${e}->${t}`;
1808
- function vn(e, t, n) {
1809
- let r = new Map(t.map((e) => [e.id, e])), i = [...new Set(Array.isArray(e) ? e : [])].filter((e) => r.has(e)), a = new Set(i), o = /* @__PURE__ */ new Map(), s = (e, t) => {
1810
- o.has(e) || o.set(e, []), o.get(e).push(t);
1811
- }, c = /* @__PURE__ */ new Map();
1812
- for (let e of n) if (e && e.from && e.to) {
1813
- if (e.kind === "calls") s(e.to, {
1814
- from: e.from,
1815
- rank: dn[At(e)],
1816
- browser: e.side === "browser",
1817
- key: _n(e.from, e.to)
1818
- });
1819
- else if (e.kind === "triggers" && (r.get(e.from) || {}).type === "page" && (r.get(e.to) || {}).type === "service") s(e.to, {
1820
- from: e.from,
1821
- rank: 0,
1822
- browser: !1,
1823
- key: _n(e.from, e.to)
1824
- });
1825
- else if (e.kind === "runs-on" && Array.isArray(e.mappings)) for (let t of e.mappings) {
1826
- if (!t || !t.service) continue;
1827
- let n = `${e.to}|${t.service}`;
1828
- c.has(n) || c.set(n, /* @__PURE__ */ new Set()), c.get(n).add(e.from);
1829
- }
1731
+ function rn(e, t) {
1732
+ let n = [], r = 0, i = 0;
1733
+ for (let a = 0; a < e.length; a++) e[a] === "(" ? r++ : e[a] === ")" ? r-- : e[a] === t && r === 0 && (n.push(e.slice(i, a)), i = a + 1);
1734
+ return n.push(e.slice(i)), n;
1735
+ }
1736
+ var an = (e, t) => {
1737
+ let n = RegExp(`^(${en})(%?)$`, "i").exec(e);
1738
+ return n ? n[2] ? Number(n[1]) / 100 * t : Number(n[1]) : null;
1739
+ }, on = (e) => e === void 0 ? 1 : (() => {
1740
+ let t = an(e, 1);
1741
+ return t === null ? null : tn(t, 0, 1);
1742
+ })();
1743
+ function sn(e, t, n) {
1744
+ let r = (t) => (t + e / 30) % 12, i = t * Math.min(n, 1 - n), a = (e) => n - i * Math.max(-1, Math.min(r(e) - 3, Math.min(9 - r(e), 1)));
1745
+ return [
1746
+ a(0) * 255,
1747
+ a(8) * 255,
1748
+ a(4) * 255
1749
+ ];
1750
+ }
1751
+ function cn(e) {
1752
+ let t = e.trim();
1753
+ if (t.includes(",")) {
1754
+ let e = t.split(/\s*,\s*/);
1755
+ return (e.length === 3 || e.length === 4) && e.every((e) => e && !/[\s/]/.test(e)) ? e : null;
1830
1756
  }
1831
- let l = (e) => {
1832
- let t = o.get(e) || [], n = r.get(e);
1833
- if (!n || n.type !== "container" || !n.stack || !n.service) return t;
1834
- let i = [...c.get(`stack-${n.stack}|${n.service}`) || []].map((e) => ({
1835
- from: e,
1836
- rank: 0,
1837
- browser: !1,
1838
- key: null
1839
- }));
1840
- return i.length ? [...t, ...i] : t;
1841
- }, u = /* @__PURE__ */ new Map(), d = /* @__PURE__ */ new Map(), f = F.map(() => []);
1842
- i.forEach((e) => f[0].push({
1843
- id: e,
1844
- rank: 0,
1845
- browser: !1
1846
- }));
1847
- for (let e = 0; e < f.length; e++) for (let t = 0; t < f[e].length; t++) {
1848
- let { id: n, rank: i, browser: o } = f[e][t], s = u.get(n);
1849
- if (!(s && (s.rank < i || s.rank === i && s.browser !== o))) for (let e of l(n)) {
1850
- let t = r.get(e.from);
1851
- if (!t || a.has(e.from) || fn.has(t.type)) continue;
1852
- let n = Math.max(i, e.rank), s = o || e.browser;
1853
- e.key && (!d.has(e.key) || dn[d.get(e.key)] > n) && d.set(e.key, F[n]);
1854
- let c = u.get(e.from);
1855
- c && (c.rank < n || c.rank === n && (!c.browser || s)) || (u.set(e.from, {
1856
- rank: n,
1857
- when: F[n],
1858
- browser: s
1859
- }), f[n].push({
1860
- id: e.from,
1861
- rank: n,
1862
- browser: s
1863
- }));
1864
- }
1757
+ let n = /^(\S+)\s+(\S+)\s+([^\s/]+)(?:\s*\/\s*(\S+))?$/.exec(t);
1758
+ return n && !n.slice(1, 4).some((e) => e.includes("/")) ? n.slice(1, n[4] === void 0 ? 4 : 5) : null;
1759
+ }
1760
+ function ln(e, t = 0) {
1761
+ let n = String(e).trim().toLowerCase();
1762
+ if (n === "transparent") return [
1763
+ 0,
1764
+ 0,
1765
+ 0,
1766
+ 0
1767
+ ];
1768
+ if ($t[n]) return ln($t[n], t);
1769
+ let r = /^#([0-9a-f]{3,4})$/.exec(n);
1770
+ if (r) {
1771
+ let e = [...r[1]].map((e) => parseInt(e + e, 16));
1772
+ return [
1773
+ e[0],
1774
+ e[1],
1775
+ e[2],
1776
+ e.length === 4 ? e[3] / 255 : 1
1777
+ ];
1865
1778
  }
1866
- let p = new Map([...u].map(([e, t]) => [e, {
1867
- when: t.when,
1868
- browser: t.browser
1869
- }])), m = (e) => String(r.get(e).label || e);
1870
- return {
1871
- down: i,
1872
- hits: p,
1873
- edges: d,
1874
- groups: F.map((e) => {
1875
- let t = [...p].filter(([, t]) => t.when === e).map(([e]) => e).sort((e, t) => mn(r.get(e).type) - mn(r.get(t).type) || m(e).localeCompare(m(t))), { title: n, color: i } = M[e];
1876
- return {
1877
- when: e,
1878
- title: n,
1879
- color: i,
1880
- ids: t
1779
+ if (r = /^#([0-9a-f]{6}|[0-9a-f]{8})$/.exec(n), r) {
1780
+ let e = r[1];
1781
+ return [
1782
+ parseInt(e.slice(0, 2), 16),
1783
+ parseInt(e.slice(2, 4), 16),
1784
+ parseInt(e.slice(4, 6), 16),
1785
+ e.length === 8 ? parseInt(e.slice(6, 8), 16) / 255 : 1
1786
+ ];
1787
+ }
1788
+ let i = nn(n, "rgba?");
1789
+ if (i !== null) {
1790
+ let e = cn(i);
1791
+ if (!e) return null;
1792
+ let t = e.slice(0, 3).map((e) => an(e, 255)), n = on(e[3]);
1793
+ return t.some((e) => e === null) || n === null ? null : [...t.map((e) => tn(e, 0, 255)), n];
1794
+ }
1795
+ let a = nn(n, "hsla?");
1796
+ if (a !== null) {
1797
+ let e = cn(a);
1798
+ if (!e) return null;
1799
+ let t = RegExp(`^(${en})(?:deg)?$`).exec(e[0]), n = /%$/.test(e[1]) ? an(e[1], 1) : null, r = /%$/.test(e[2]) ? an(e[2], 1) : null, i = on(e[3]);
1800
+ return !t || n === null || r === null || i === null ? null : [...sn((Number(t[1]) % 360 + 360) % 360, tn(n, 0, 1), tn(r, 0, 1)), i];
1801
+ }
1802
+ let o = t < 8 ? nn(n, "color-mix") : null;
1803
+ if (o !== null) {
1804
+ let e = rn(o, ",").map((e) => e.trim());
1805
+ if (e.length !== 3 || !/^in\s+srgb$/.test(e[0])) return null;
1806
+ let n = (e) => {
1807
+ let n = /^(\d*\.?\d+)%\s+(.+)$/.exec(e), r = /^(.+?)\s+(\d*\.?\d+)%$/.exec(e), [i, a] = n ? [n[2], n[1]] : r ? [r[1], r[2]] : [e, null], o = ln(i, t + 1);
1808
+ return o && {
1809
+ c: o,
1810
+ p: a === null ? null : Number(a) / 100
1881
1811
  };
1882
- }).filter((e) => e.ids.length)
1883
- };
1884
- }
1885
- var I = null;
1886
- function yn(e, t, n) {
1887
- let r = e && Array.isArray(e.down) ? e.down : [];
1888
- if (!r.length) return null;
1889
- let i = r.join("\0");
1890
- return I && I.key === i && I.nodes === t && I.edges === n || (I = {
1891
- key: i,
1892
- nodes: t,
1893
- edges: n,
1894
- radius: vn(r, t, n)
1895
- }), I.radius;
1896
- }
1897
- function bn(e, t) {
1898
- if (!t) return;
1899
- let n = new Set(t.down);
1900
- for (let r of e.nodes) {
1901
- if (n.has(r.id)) {
1902
- Object.assign(r, {
1903
- color: hn.color,
1904
- alpha: 1,
1905
- labelAlpha: 1,
1906
- labelColor: "#f8fafc",
1907
- labelKeep: !0,
1908
- labelStrike: !0,
1909
- connected: !0,
1910
- glow: 0
1911
- }), r.halo === "none" && (r.halo = hn.halo);
1912
- continue;
1913
- }
1914
- let e = t.hits.get(r.id);
1915
- if (!e) continue;
1916
- let i = Math.max(r.alpha, gn.alpha);
1917
- Object.assign(r, {
1918
- color: M[e.when].color,
1919
- alpha: i,
1920
- labelAlpha: i,
1921
- labelColor: "#f8fafc",
1922
- labelKeep: !0,
1923
- connected: !0,
1924
- glow: Math.max(r.glow || 0, gn.glow)
1925
- });
1812
+ }, r = n(e[1]), i = n(e[2]);
1813
+ if (!r || !i || r.p !== null && (r.p < 0 || r.p > 1) || i.p !== null && (i.p < 0 || i.p > 1)) return null;
1814
+ let a = r.p ?? (i.p === null ? .5 : 1 - i.p), s = i.p ?? 1 - a;
1815
+ return a + s <= 0 ? null : dn(r.c, a, i.c, s);
1926
1816
  }
1927
- for (let n of e.edges) {
1928
- let e = t.edges.get(_n(n.from, n.to));
1929
- if (!e) continue;
1930
- let r = M[e].color;
1931
- n.color = r, n.glow && (n.glowColor = r), n.alpha = Math.max(n.alpha, gn.edgeAlpha), n.width = Math.max(n.width, gn.edgeWidth), n.packet &&= {
1932
- ...n.packet,
1933
- glowColor: r
1934
- };
1817
+ return null;
1818
+ }
1819
+ function un(e) {
1820
+ if (String(e).length > 4096) return null;
1821
+ try {
1822
+ return ln(e);
1823
+ } catch {
1824
+ return null;
1935
1825
  }
1936
1826
  }
1937
- // ../explorer/house-model.js
1938
- var xn = /* @__PURE__ */ new Set([
1939
- "container",
1940
- "stack",
1941
- "machine"
1942
- ]);
1943
- function Sn(e, t) {
1944
- return !!(e.house && e.house.shown && e.house.shown.has(t.id));
1827
+ function N(e) {
1828
+ return un(e) ?? [
1829
+ 0,
1830
+ 0,
1831
+ 0,
1832
+ 0
1833
+ ];
1834
+ }
1835
+ function dn(e, t, n, r) {
1836
+ let i = t + r, [a, o] = [t / i, r / i], s = e[3] * a + n[3] * o, c = (t) => s === 0 ? 0 : (e[t] * e[3] * a + n[t] * n[3] * o) / s;
1837
+ return [
1838
+ c(0),
1839
+ c(1),
1840
+ c(2),
1841
+ s * Math.min(1, i)
1842
+ ];
1843
+ }
1844
+ function fn(e, t) {
1845
+ let n = e[3];
1846
+ return [
1847
+ 0,
1848
+ 1,
1849
+ 2
1850
+ ].map((r) => Math.round(e[r] * n + t[r] * (1 - n))).concat(1);
1851
+ }
1852
+ var pn = ([e, t, n]) => `#${[
1853
+ e,
1854
+ t,
1855
+ n
1856
+ ].map((e) => Math.round(e).toString(16).padStart(2, "0")).join("")}`, mn = (e) => {
1857
+ let t = e / 255;
1858
+ return t <= .03928 ? t / 12.92 : ((t + .055) / 1.055) ** 2.4;
1859
+ }, P = ([e, t, n]) => .2126 * mn(e) + .7152 * mn(t) + .0722 * mn(n), hn = (e, t) => (Math.max(e, t) + .05) / (Math.min(e, t) + .05), gn = (e, t) => hn(P(N(e)), P(N(t))), F = Object.freeze({
1860
+ dark: Object.freeze({
1861
+ added: "#2dd4bf",
1862
+ changed: "#fbbf24",
1863
+ removed: "#fa9292",
1864
+ edit: "#b49cfb"
1865
+ }),
1866
+ light: Object.freeze({
1867
+ added: "#197c6f",
1868
+ changed: "#8f6703",
1869
+ removed: "#e20b0b",
1870
+ edit: "#6839f6"
1871
+ })
1872
+ }), _n = .85, vn = .9, yn = .6, bn = .45, xn = Object.freeze({
1873
+ light: yn,
1874
+ dark: .5
1875
+ }), Sn = Object.freeze({
1876
+ added: Object.freeze({
1877
+ ringDash: Object.freeze([5, 4]),
1878
+ edgeDash: Object.freeze([7, 5]),
1879
+ strike: !1
1880
+ }),
1881
+ changed: Object.freeze({
1882
+ ringDash: null,
1883
+ edgeDash: null,
1884
+ strike: !1
1885
+ }),
1886
+ removed: Object.freeze({
1887
+ ringDash: null,
1888
+ edgeDash: Object.freeze([3, 4]),
1889
+ strike: !0
1890
+ }),
1891
+ edit: Object.freeze({
1892
+ ringDash: Object.freeze([2, 5]),
1893
+ edgeDash: Object.freeze([12, 4]),
1894
+ strike: !1
1895
+ })
1896
+ }), Cn = "#f4f6fa", wn = "#090d16", Tn = {
1897
+ mark: 3.2,
1898
+ text: 4.8
1899
+ }, En = .16, Dn = 1.35, On = .11;
1900
+ function kn(e, t) {
1901
+ return e === "light" || e === "dark" ? e : t ? "light" : "dark";
1945
1902
  }
1946
- var Cn = null;
1947
- function wn(e) {
1948
- let t = e.house && e.house.cloudLines;
1949
- return !t || !t.length ? e.edges : (Cn && Cn.edges === e.edges && Cn.lines === t || (Cn = {
1950
- edges: e.edges,
1951
- lines: t,
1952
- all: [...e.edges, ...t]
1953
- }), Cn.all);
1903
+ function An([e, t, n]) {
1904
+ let r = e / 255, i = t / 255, a = n / 255, o = Math.max(r, i, a), s = Math.min(r, i, a), c = (o + s) / 2;
1905
+ if (o === s) return [
1906
+ 0,
1907
+ 0,
1908
+ c
1909
+ ];
1910
+ let l = o - s, u = c > .5 ? l / (2 - o - s) : l / (o + s);
1911
+ return [
1912
+ (o === r ? (i - a) / l + (i < a ? 6 : 0) : o === i ? (a - r) / l + 2 : (r - i) / l + 4) * 60,
1913
+ u,
1914
+ c
1915
+ ];
1954
1916
  }
1955
- function Tn(e, t, n) {
1956
- return e.kind === "runs-on" || e.kind === "delivers" ? "flow" : e.kind === "calls" && n && n.type === "external" ? e.rolled || !(t && xn.has(t.type)) ? "flow" : null : !e.kind && !e.dashed && t && t.type === "persona" && n && n.type === "device" || !e.kind && e.dashed && t && (t.type === "container" || t.type === "external") && n && n.type === "device" ? "link" : null;
1917
+ function jn([e, t, n]) {
1918
+ let r = (t) => (t + e / 30) % 12, i = t * Math.min(n, 1 - n), a = (e) => n - i * Math.max(-1, Math.min(r(e) - 3, 9 - r(e), 1));
1919
+ return [
1920
+ a(0),
1921
+ a(8),
1922
+ a(4)
1923
+ ].map((e) => Math.round(e * 255));
1957
1924
  }
1958
- var En = [
1959
- "persona",
1960
- "machine",
1961
- "stack",
1962
- "floor",
1963
- "external"
1964
- ];
1965
- function Dn(e, t) {
1966
- let n = t.house;
1967
- e.decor.rings = [], e.decor.lanes = n && n.lanes ? n.lanes : [];
1968
- for (let t of e.nodes) t.type === "room" ? (t.label = "", t.labelKeep = !1) : En.includes(t.type) && (t.labelKeep = !0);
1969
- return n && n.cloudIds && n.cloudIds.size && Mn(e, t), e;
1925
+ var Mn = (e) => `#${e.map((e) => e.toString(16).padStart(2, "0")).join("")}`, Nn = (e, t) => t >= 1 ? Mn(e) : `rgba(${e.join(", ")}, ${+t.toFixed(3)})`, Pn = P(N(Cn)), Fn = /* @__PURE__ */ new Map();
1926
+ function I(e, t = "mark") {
1927
+ let n = `${t}|${e}`, r = Fn.get(n);
1928
+ if (r !== void 0) return r;
1929
+ let i = In(e, t);
1930
+ return Fn.set(n, i), i;
1970
1931
  }
1971
- var On = {
1972
- run: .9,
1973
- deploy: .25,
1974
- renew: .9
1975
- }, kn = {
1976
- alpha: .9,
1977
- width: 2.2
1978
- }, An = Object.keys(M), jn = (e) => An.find((t) => M[t].ticks === (e.ticks || 0)) || "run";
1979
- function Mn(e, t) {
1980
- let n = t.house, r = t.scenario ? yn(t.scenario, t.nodes, t.edges) : null, i = !t.scenario && !!t.selectedNode, a = new Map((n.cloudLines || []).map((e) => [`${e.from}->${e.to}|${e.when}`, e])), o = r ? new Set(r.down) : null;
1981
- e.edges = e.edges.filter((e) => {
1982
- if (e.kind !== "calls" || !n.cloudIds.has(e.to)) return !0;
1983
- let t = jn(e);
1984
- if (r) {
1985
- let i = a.get(`${e.from}->${e.to}|${t}`), s = o.has(e.to) ? "run" : r.hits.has(e.to) ? r.hits.get(e.to).when : null;
1986
- if (i && s) {
1987
- let n = An[Math.max(An.indexOf(s), An.indexOf(t))];
1988
- return Object.assign(e, {
1989
- color: M[n].color,
1990
- alpha: Math.max(e.alpha, kn.alpha),
1991
- width: Math.max(e.width, kn.width)
1992
- }), e.glow && (e.glowColor = e.color), !0;
1993
- }
1994
- return !n.phone || r.edges.has(`${e.from}->${e.to}`);
1932
+ function In(e, t) {
1933
+ if (typeof e != "string") return e;
1934
+ let [n, r, i, a] = N(e);
1935
+ if (a === 0) return e;
1936
+ let [o, s, c] = An([
1937
+ n,
1938
+ r,
1939
+ i
1940
+ ]);
1941
+ if ((Math.max(n, r, i) - Math.min(n, r, i)) / 255 < En && c > .5) return Nn(jn([
1942
+ o,
1943
+ s,
1944
+ Math.max(On, 1 - c)
1945
+ ]), a);
1946
+ let l = Tn[t] || Tn.mark;
1947
+ if (hn(P([
1948
+ n,
1949
+ r,
1950
+ i
1951
+ ]), Pn) >= l) return e;
1952
+ let u = 0, d = c;
1953
+ for (let e = 0; e < 20; e++) {
1954
+ let e = (u + d) / 2;
1955
+ hn(P(jn([
1956
+ o,
1957
+ s,
1958
+ e
1959
+ ])), Pn) >= l ? u = e : d = e;
1960
+ }
1961
+ return Nn(jn([
1962
+ o,
1963
+ s,
1964
+ u
1965
+ ]), a);
1966
+ }
1967
+ var Ln = (e, t, n = "mark") => t === "light" ? I(e, n) : e, Rn = (e) => {
1968
+ e && (e.color = I(e.color, "text"));
1969
+ };
1970
+ function zn(e) {
1971
+ e.theme = "light";
1972
+ for (let t of e.nodes) t.color = I(t.color), t.labelColor = I(t.labelColor, "text");
1973
+ for (let t of e.edges) {
1974
+ if (t.mark && t.mark !== "none") t.color = F.dark[t.mark] === t.color ? F.light[t.mark] : I(t.color);
1975
+ else {
1976
+ t.alpha < 1 && (t.alpha = Math.min(1, t.alpha * Dn)), t.color = I(t.color);
1977
+ let [e, n, r, i] = N(t.color);
1978
+ i > 0 && i < 1 && (t.color = Nn([
1979
+ e,
1980
+ n,
1981
+ r
1982
+ ], Math.min(1, i * Dn)));
1995
1983
  }
1996
- return i ? !n.phone || e.alpha >= .5 : !n.phone && (e.alpha = On[t], !0);
1997
- });
1984
+ t.glowColor &&= I(t.glowColor), t.label &&= {
1985
+ ...t.label,
1986
+ color: I(t.label.color, "text")
1987
+ }, t.packet &&= {
1988
+ ...t.packet,
1989
+ color: I(t.packet.color),
1990
+ glowColor: I(t.packet.glowColor)
1991
+ };
1992
+ }
1993
+ let { decor: t } = e;
1994
+ return t.grid &&= {
1995
+ ...t.grid,
1996
+ color: I(t.grid.color)
1997
+ }, t.rings = t.rings.map((e) => ({
1998
+ ...e,
1999
+ color: I(e.color)
2000
+ })), t.lanes = t.lanes.map((e) => {
2001
+ let t = {
2002
+ ...e,
2003
+ fill: I(e.fill),
2004
+ stroke: I(e.stroke)
2005
+ };
2006
+ for (let e of [
2007
+ "title",
2008
+ "note",
2009
+ "arrow"
2010
+ ]) t[e] && (t[e] = { ...t[e] }, Rn(t[e]));
2011
+ return t;
2012
+ }), e;
2013
+ }
2014
+ var L = {
2015
+ root: {
2016
+ color: "#f59e0b",
2017
+ r: 28
2018
+ },
2019
+ app: {
2020
+ color: "#5168ec",
2021
+ r: 24
2022
+ },
2023
+ page: {
2024
+ color: "#38bdf8",
2025
+ r: 18
2026
+ },
2027
+ pkg: {
2028
+ color: "#0f8293",
2029
+ r: 24
2030
+ },
2031
+ core: {
2032
+ color: "#14b8a6",
2033
+ r: 20
2034
+ },
2035
+ token: {
2036
+ color: "#ef409b",
2037
+ r: 20
2038
+ },
2039
+ atom: {
2040
+ color: "#108d4e",
2041
+ r: 19
2042
+ },
2043
+ molecule: {
2044
+ color: "#a855f7",
2045
+ r: 21
2046
+ },
2047
+ tool: {
2048
+ color: "#f43f5e",
2049
+ r: 19
2050
+ },
2051
+ store: {
2052
+ color: "#fb923c",
2053
+ r: 20
2054
+ },
2055
+ table: {
2056
+ color: "#fde047",
2057
+ r: 18
2058
+ },
2059
+ rom: {
2060
+ color: "#c398c6",
2061
+ r: 19
2062
+ },
2063
+ service: {
2064
+ color: "#84cc16",
2065
+ r: 20
2066
+ },
2067
+ external: {
2068
+ color: "#94a3b8",
2069
+ r: 21
2070
+ },
2071
+ stack: {
2072
+ color: "#b49fa0",
2073
+ r: 22
2074
+ },
2075
+ machine: {
2076
+ color: "#78716c",
2077
+ r: 26
2078
+ },
2079
+ container: {
2080
+ color: "#d6d3d1",
2081
+ r: 12
2082
+ },
2083
+ persona: {
2084
+ color: "#fb7185",
2085
+ r: 22
2086
+ },
2087
+ device: {
2088
+ color: "#2dd4bf",
2089
+ r: 14
2090
+ },
2091
+ floor: {
2092
+ color: "#a3e635",
2093
+ r: 20
2094
+ },
2095
+ room: {
2096
+ color: "#f7ed81",
2097
+ r: 16
2098
+ }
2099
+ }, Bn = Object.freeze({
2100
+ root: "circle",
2101
+ app: "circle",
2102
+ page: "circle",
2103
+ pkg: "circle",
2104
+ core: "circle",
2105
+ token: "circle",
2106
+ atom: "circle",
2107
+ molecule: "circle",
2108
+ tool: "circle",
2109
+ rom: "circle",
2110
+ service: "circle",
2111
+ store: "rounded-square",
2112
+ table: "rounded-square",
2113
+ external: "hexagon",
2114
+ stack: "square",
2115
+ machine: "square",
2116
+ container: "square",
2117
+ device: "square",
2118
+ floor: "square",
2119
+ room: "square",
2120
+ persona: "diamond"
2121
+ }), Vn = Object.freeze([
2122
+ "circle",
2123
+ "rounded-square",
2124
+ "hexagon",
2125
+ "square",
2126
+ "diamond"
2127
+ ]), Hn = (e) => typeof e == "string" && Object.hasOwn(Bn, e) ? Bn[e] : "circle", Un = [
2128
+ "outbox",
2129
+ "changes",
2130
+ "trigger",
2131
+ "sync",
2132
+ "model",
2133
+ "rom",
2134
+ "read",
2135
+ "build",
2136
+ "api"
2137
+ ], Wn = ["reads", "writes"], Gn = [
2138
+ "calls",
2139
+ "triggers",
2140
+ "delivers"
2141
+ ], Kn = ["runs-on"], qn = [
2142
+ "flow",
2143
+ ...Wn,
2144
+ "uses",
2145
+ "extends",
2146
+ ...Gn,
2147
+ ...Kn
2148
+ ], Jn = [
2149
+ "camera",
2150
+ "phone",
2151
+ "nfc-tag",
2152
+ "home-assistant"
2153
+ ], Yn = ["floor", "room"], Xn = "live-", Zn = (e) => `persona-${e}`;
2154
+ function Qn(e) {
2155
+ if (typeof e != "string" || !e.startsWith("live-")) return null;
2156
+ let t = e.slice(5);
2157
+ for (let e of Yn) if (t.startsWith(`${e}-`) && t.length > e.length + 1) return {
2158
+ type: e,
2159
+ id: t.slice(e.length + 1)
2160
+ };
2161
+ if (!t.startsWith("device-")) return null;
2162
+ let n = t.slice(7), r = Jn.find((e) => n.startsWith(`${e}-`) && n.length > e.length + 1);
2163
+ return r ? {
2164
+ type: "device",
2165
+ kind: r,
2166
+ id: n.slice(r.length + 1)
2167
+ } : null;
1998
2168
  }
1999
- // ../explorer/verdict-paint.js
2000
- var Nn = {
2001
- allowed: "#4ade80",
2002
- refused: "#ff2d55",
2003
- mismatch: "#fbbf24"
2004
- }, Pn = 18, Fn = 4.5;
2005
- function In(e, t) {
2006
- return e.from !== t.from || e.to !== t.to ? !1 : t.kind ? e.kind === t.kind && (!t.flow || e.key.split("|")[2] === t.flow) : e.kind === "ownership" || e.kind === "usage";
2169
+ function $n(e) {
2170
+ return e ? typeof e.id == "string" && e.id.startsWith("live-") ? !0 : Yn.includes(e.type) || e.type === "device" && !e.file : !1;
2007
2171
  }
2008
- function Ln(e, t) {
2009
- let n = t && t.verdict;
2010
- if (!n || t.done) return;
2011
- let r = n.mismatch ? Nn.mismatch : Nn[n.state];
2012
- if (!r) return;
2013
- let { node: i, edge: a } = t.current;
2014
- if (i !== void 0) {
2015
- let t = e.nodes.find((e) => e.id === i);
2016
- t && (t.color = r, t.glow = Math.max(t.glow || 0, Pn));
2017
- } else a && e.edges.forEach((e) => {
2018
- In(e, a) && (e.color = r, e.glowColor = r, e.glow = Math.max(e.glow || 0, Pn), e.width = Math.max(e.width || 0, Fn), e.packet &&= n.state === "refused" && !n.mismatch ? {
2019
- ...e.packet,
2020
- color: r,
2021
- glowColor: r,
2022
- speed: 0,
2023
- phase: .5
2024
- } : {
2025
- ...e.packet,
2026
- glowColor: r
2027
- });
2028
- });
2172
+ var er = ["cloud", "web"], tr = [
2173
+ "run",
2174
+ "deploy",
2175
+ "renew"
2176
+ ], nr = ["browser"];
2177
+ function rr(e, t, n) {
2178
+ let r = [], i = n?.type === "external" && (n.kind === void 0 || n.kind === "cloud");
2179
+ return e.when !== void 0 && (tr.includes(e.when) || r.push(`has when "${e.when}". Valid values: ${tr.join(", ")}`), e.kind === "calls" ? i || r.push("has \"when\" but does not go into a cloud node: only an outage of a cloud service is timed.") : r.push("has \"when\", which goes only on a calls edge.")), e.side !== void 0 && (nr.includes(e.side) || r.push(`has side "${e.side}". Valid values: ${nr.join(", ")}`), e.kind === "calls" ? (t?.type !== "app" || n?.type !== "external") && r.push("has \"side\", which goes only on an app -> external calls edge (the visitor's browser makes the call).") : r.push("has \"side\", which goes only on a calls edge.")), r;
2029
2180
  }
2030
2181
  // ../core/layers.js
2031
- var Rn = /^[a-z][a-z0-9]*(-[a-z0-9]+)*$/, zn = Object.freeze([
2182
+ var ir = /^[a-z][a-z0-9]*(-[a-z0-9]+)*$/, ar = Object.freeze([
2032
2183
  "key",
2033
2184
  "label",
2034
2185
  "desc",
2035
2186
  "match"
2036
- ]), Bn = Object.freeze([
2187
+ ]), R = Object.freeze([
2037
2188
  "type",
2038
2189
  "kind",
2039
2190
  "parent",
2040
2191
  "field"
2041
- ]), Vn = Object.freeze([
2192
+ ]), or = Object.freeze([
2042
2193
  "add",
2043
2194
  "off",
2044
2195
  "order"
2045
- ]), Hn = /^[A-Za-z][A-Za-z0-9_]*$/, Un = Object.freeze([
2196
+ ]), sr = /^[A-Za-z][A-Za-z0-9_]*$/, cr = Object.freeze([
2046
2197
  "root",
2047
2198
  "external",
2048
2199
  "floor",
2049
2200
  "room"
2050
- ]), Wn = Object.freeze([
2201
+ ]), lr = Object.freeze([
2051
2202
  {
2052
2203
  key: "app",
2053
2204
  label: "Apps",
@@ -2191,91 +2342,91 @@ var Rn = /^[a-z][a-z0-9]*(-[a-z0-9]+)*$/, zn = Object.freeze([
2191
2342
  match: { type: "persona" },
2192
2343
  live: !0
2193
2344
  }
2194
- ]), Gn = Object.freeze(Wn.map((e) => e.key)), Kn = new Set(Gn), qn = Object.keys(P), L = (e) => typeof e == "object" && !!e && !Array.isArray(e), Jn = /* @__PURE__ */ RegExp("[\\u0000-\\u001f\\u007f-\\u009f\\u2028\\u2029]"), R = (e) => typeof e == "string" ? `"${e.length > 40 ? `${e.slice(0, 40)}…` : e}"` : typeof e == "number" || typeof e == "boolean" ? String(e) : Array.isArray(e) ? "a list" : e === null ? "null" : typeof e, Yn = (e) => typeof e == "string" && e.length > 0 && e.length <= 80 && !Jn.test(e) || typeof e == "number" && Number.isFinite(e) || typeof e == "boolean", Xn = /^[a-z0-9]+(-[a-z0-9]+)*$/, Zn = new Set(qn), Qn = (e, t) => Zn.has(e) && typeof t == "string" && t.length <= 32 && Xn.test(t) ? `--corn-map-kind-${e}-${t}` : null, $n = (e) => typeof e == "string" && e.length <= 32 && Rn.test(e) ? `--corn-map-group-${e}` : null, er = ({ type: e, kind: t, layer: n, group: r }) => [
2195
- Qn(e, t),
2196
- n ? $n(n) : null,
2345
+ ]), ur = Object.freeze(lr.map((e) => e.key)), dr = new Set(ur), fr = Object.keys(L), z = (e) => typeof e == "object" && !!e && !Array.isArray(e), pr = /* @__PURE__ */ RegExp("[\\u0000-\\u001f\\u007f-\\u009f\\u2028\\u2029]"), B = (e) => typeof e == "string" ? `"${e.length > 40 ? `${e.slice(0, 40)}…` : e}"` : typeof e == "number" || typeof e == "boolean" ? String(e) : Array.isArray(e) ? "a list" : e === null ? "null" : typeof e, mr = (e) => typeof e == "string" && e.length > 0 && e.length <= 80 && !pr.test(e) || typeof e == "number" && Number.isFinite(e) || typeof e == "boolean", hr = /^[a-z0-9]+(-[a-z0-9]+)*$/, gr = new Set(fr), _r = (e, t) => gr.has(e) && typeof t == "string" && t.length <= 32 && hr.test(t) ? `--corn-map-kind-${e}-${t}` : null, vr = (e) => typeof e == "string" && e.length <= 32 && ir.test(e) ? `--corn-map-group-${e}` : null, yr = ({ type: e, kind: t, layer: n, group: r }) => [
2346
+ _r(e, t),
2347
+ n ? vr(n) : null,
2197
2348
  `--corn-map-node-${e}`,
2198
2349
  `--corn-map-group-${r || e}`
2199
2350
  ].filter(Boolean);
2200
- function tr(e) {
2351
+ function br(e) {
2201
2352
  if (typeof e != "string") return null;
2202
- if (Zn.has(e)) return { type: e };
2353
+ if (gr.has(e)) return { type: e };
2203
2354
  let t = e.indexOf(":");
2204
2355
  if (t < 0) return null;
2205
2356
  let n = e.slice(0, t), r = e.slice(t + 1);
2206
- return n === "layer" ? Rn.test(r) && r.length <= 32 ? { layer: r } : null : Zn.has(n) && Xn.test(r) && r.length <= 32 ? {
2357
+ return n === "layer" ? ir.test(r) && r.length <= 32 ? { layer: r } : null : gr.has(n) && hr.test(r) && r.length <= 32 ? {
2207
2358
  type: n,
2208
2359
  kind: r
2209
2360
  } : null;
2210
2361
  }
2211
- function nr(e, t, n) {
2362
+ function xr(e, t, n) {
2212
2363
  let r = [];
2213
- return typeof t == "string" && Xn.test(t) && t.length <= 32 && r.push(`${e}:${t}`), n && r.push(`layer:${n}`), r.push(e), r;
2364
+ return typeof t == "string" && hr.test(t) && t.length <= 32 && r.push(`${e}:${t}`), n && r.push(`layer:${n}`), r.push(e), r;
2214
2365
  }
2215
- var rr = /* @__PURE__ */ new WeakMap();
2216
- function ir(e) {
2217
- let t = rr.get(e);
2366
+ var Sr = /* @__PURE__ */ new WeakMap();
2367
+ function Cr(e) {
2368
+ let t = Sr.get(e);
2218
2369
  if (t && t.length === e.length) return t.map;
2219
2370
  let n = /* @__PURE__ */ new Map();
2220
2371
  for (let t of e) t && !t.dashed && !t.kind && t.from && t.to && t.from !== t.to && !n.has(t.to) && n.set(t.to, t.from);
2221
- return rr.set(e, {
2372
+ return Sr.set(e, {
2222
2373
  length: e.length,
2223
2374
  map: n
2224
2375
  }), n;
2225
2376
  }
2226
- var ar = (e, t) => Array.isArray(e) ? e.includes(t) : e === t;
2227
- function or(e, t, n) {
2228
- if (!L(e)) return !1;
2377
+ var wr = (e, t) => Array.isArray(e) ? e.includes(t) : e === t;
2378
+ function Tr(e, t, n) {
2379
+ if (!z(e)) return !1;
2229
2380
  let r = !1;
2230
- if (e.type !== void 0 && (r = !0, !ar(e.type, t.type)) || e.kind !== void 0 && (r = !0, !ar(e.kind, t.kind)) || e.parent !== void 0 && (r = !0, !n || !ar(e.parent, n(t)))) return !1;
2381
+ if (e.type !== void 0 && (r = !0, !wr(e.type, t.type)) || e.kind !== void 0 && (r = !0, !wr(e.kind, t.kind)) || e.parent !== void 0 && (r = !0, !n || !wr(e.parent, n(t)))) return !1;
2231
2382
  if (e.field !== void 0) {
2232
2383
  r = !0;
2233
2384
  for (let n of Object.keys(e.field)) {
2234
2385
  if (!Object.hasOwn(t, n)) return !1;
2235
2386
  let r = t[n], i = e.field[n];
2236
- if (!(Array.isArray(r) ? r.some((e) => ar(i, e)) : ar(i, r))) return !1;
2387
+ if (!(Array.isArray(r) ? r.some((e) => wr(i, e)) : wr(i, r))) return !1;
2237
2388
  }
2238
2389
  }
2239
2390
  return r;
2240
2391
  }
2241
- var sr = [...Wn.filter((e) => e.match)].sort((e, t) => Number("kind" in t.match) - Number("kind" in e.match));
2242
- function cr(e) {
2392
+ var Er = [...lr.filter((e) => e.match)].sort((e, t) => Number("kind" in t.match) - Number("kind" in e.match));
2393
+ function Dr(e) {
2243
2394
  if (e.type === "root") return null;
2244
2395
  if (e.type === "external") return e.kind === "web" ? "web" : "cloud";
2245
- for (let t of sr) if (or(t.match, e)) return t.key;
2396
+ for (let t of Er) if (Tr(t.match, e)) return t.key;
2246
2397
  return e.type;
2247
2398
  }
2248
- function lr(e, t, n) {
2399
+ function Or(e, t, n) {
2249
2400
  if (!e || !e.length || t.type === "root") return null;
2250
- for (let r of e) if (or(r.match, t, n)) return r.key;
2401
+ for (let r of e) if (Tr(r.match, t, n)) return r.key;
2251
2402
  return null;
2252
2403
  }
2253
- var ur = (e, t, n) => lr(e, t, n) || cr(t), dr = `${qn.slice(0, 5).join(", ")}, …`, fr = (e) => {
2254
- let t = (Array.isArray(e) ? e : []).map((e) => L(e) && typeof e.key == "string" ? e.key : null).filter((e) => e && Rn.test(e));
2255
- return `${Gn.slice(0, 3).join(", ")}, …${t.length ? `, ${t[t.length - 1]}` : ""}`;
2404
+ var kr = (e, t, n) => Or(e, t, n) || Dr(t), Ar = `${fr.slice(0, 5).join(", ")}, …`, jr = (e) => {
2405
+ let t = (Array.isArray(e) ? e : []).map((e) => z(e) && typeof e.key == "string" ? e.key : null).filter((e) => e && ir.test(e));
2406
+ return `${ur.slice(0, 3).join(", ")}, …${t.length ? `, ${t[t.length - 1]}` : ""}`;
2256
2407
  };
2257
- function pr(e, t, n, r) {
2408
+ function Mr(e, t, n, r) {
2258
2409
  return Array.isArray(n) ? (n.length ? n.length > 20 && r.push(`${e}.${t} has ${n.length} values: at most 20.`) : r.push(`${e}.${t} is an empty list: give at least one value, or leave the key out.`), n.length <= 20 ? n : []) : [n];
2259
2410
  }
2260
- function mr(e, t, n) {
2261
- if (!L(t)) n.push(`${e}.match is { type, kind, parent, field }: say at least one of them.`);
2411
+ function Nr(e, t, n) {
2412
+ if (!z(t)) n.push(`${e}.match is { type, kind, parent, field }: say at least one of them.`);
2262
2413
  else {
2263
- for (let r of Object.keys(t)) Bn.includes(r) || n.push(`${e}.match has unknown key "${r}": known: ${Bn.join(", ")}. A match is data: no pattern, no function.`);
2264
- if (!Object.keys(t).some((e) => Bn.includes(e))) Object.keys(t).length || n.push(`${e}.match is empty: say at least one of ${Bn.join(", ")}.`);
2414
+ for (let r of Object.keys(t)) R.includes(r) || n.push(`${e}.match has unknown key "${r}": known: ${R.join(", ")}. A match is data: no pattern, no function.`);
2415
+ if (!Object.keys(t).some((e) => R.includes(e))) Object.keys(t).length || n.push(`${e}.match is empty: say at least one of ${R.join(", ")}.`);
2265
2416
  else {
2266
- if ("type" in t) for (let r of pr(`${e}.match`, "type", t.type, n)) typeof r == "string" && qn.includes(r) || n.push(`${e}.match.type ${R(r)} is not a node type (${dr}).`);
2267
- if ("kind" in t) for (let r of pr(`${e}.match`, "kind", t.kind, n)) (typeof r != "string" || !r || r.length > 80 || Jn.test(r)) && n.push(`${e}.match.kind ${R(r)}: a kind is text, one line, at most 80 characters.`);
2268
- if ("parent" in t) for (let r of pr(`${e}.match`, "parent", t.parent, n)) (typeof r != "string" || !r || r.length > 200 || Jn.test(r)) && n.push(`${e}.match.parent ${R(r)}: a parent is a node id (text), like "pkg-core".`);
2417
+ if ("type" in t) for (let r of Mr(`${e}.match`, "type", t.type, n)) typeof r == "string" && fr.includes(r) || n.push(`${e}.match.type ${B(r)} is not a node type (${Ar}).`);
2418
+ if ("kind" in t) for (let r of Mr(`${e}.match`, "kind", t.kind, n)) (typeof r != "string" || !r || r.length > 80 || pr.test(r)) && n.push(`${e}.match.kind ${B(r)}: a kind is text, one line, at most 80 characters.`);
2419
+ if ("parent" in t) for (let r of Mr(`${e}.match`, "parent", t.parent, n)) (typeof r != "string" || !r || r.length > 200 || pr.test(r)) && n.push(`${e}.match.parent ${B(r)}: a parent is a node id (text), like "pkg-core".`);
2269
2420
  if ("field" in t) {
2270
2421
  let r = t.field;
2271
- if (!L(r)) {
2422
+ if (!z(r)) {
2272
2423
  n.push(`${e}.match.field is { name: value }: a node field and the value (or list of values) it must have.`);
2273
2424
  return;
2274
2425
  }
2275
2426
  let i = Object.keys(r);
2276
2427
  i.length || n.push(`${e}.match.field is empty: name a field, like { audience: 'household' }.`), i.length > 4 && n.push(`${e}.match.field names ${i.length} fields: at most 4.`);
2277
2428
  for (let t of i.slice(0, 20)) {
2278
- if (!Hn.test(t) || t.length > 40) {
2429
+ if (!sr.test(t) || t.length > 40) {
2279
2430
  n.push(`${e}.match.field "${t.slice(0, 40)}": a field name is letters, digits and "_", starting with a letter.`);
2280
2431
  continue;
2281
2432
  }
@@ -2288,17 +2439,17 @@ function mr(e, t, n) {
2288
2439
  continue;
2289
2440
  }
2290
2441
  let i = Array.isArray(r[t]) ? r[t] : [r[t]];
2291
- Array.isArray(r[t]) && (!i.length || i.length > 20) ? n.push(`${e}.match.field.${t} is a list of ${i.length}: one to 20 values.`) : i.every(Yn) || n.push(`${e}.match.field.${t}: a value is text, a number, true or false, or a list of them.`);
2442
+ Array.isArray(r[t]) && (!i.length || i.length > 20) ? n.push(`${e}.match.field.${t} is a list of ${i.length}: one to 20 values.`) : i.every(mr) || n.push(`${e}.match.field.${t}: a value is text, a number, true or false, or a list of them.`);
2292
2443
  }
2293
2444
  }
2294
2445
  }
2295
2446
  }
2296
2447
  }
2297
- function hr(e) {
2448
+ function Pr(e) {
2298
2449
  if (e === void 0) return [];
2299
- if (!L(e)) return ["\"layers\" is an object: { add: [{ key, label, match }], off: [keys], order: [keys] }."];
2450
+ if (!z(e)) return ["\"layers\" is an object: { add: [{ key, label, match }], off: [keys], order: [keys] }."];
2300
2451
  let t = [];
2301
- for (let n of Object.keys(e)) Vn.includes(n) || t.push(`layers has unknown key "${n}": known: ${Vn.join(", ")}.`);
2452
+ for (let n of Object.keys(e)) or.includes(n) || t.push(`layers has unknown key "${n}": known: ${or.join(", ")}.`);
2302
2453
  let n = e.add;
2303
2454
  n !== void 0 && !Array.isArray(n) && t.push("layers.add is a list of project layers: [{ key, label, desc?, match }].");
2304
2455
  let r = Array.isArray(n) ? n : [];
@@ -2306,24 +2457,24 @@ function hr(e) {
2306
2457
  let i = /* @__PURE__ */ new Map();
2307
2458
  r.slice(0, 100).forEach((e, n) => {
2308
2459
  let r = `layers.add[${n}]`;
2309
- if (!L(e)) {
2460
+ if (!z(e)) {
2310
2461
  t.push(`${r} is { key, label, desc?, match }.`);
2311
2462
  return;
2312
2463
  }
2313
2464
  for (let n of Object.keys(e)) {
2314
- if (zn.includes(n)) continue;
2465
+ if (ar.includes(n)) continue;
2315
2466
  let e = /^colou?r$|^icon$|^fill$/i.test(n) ? " Colours and icons are the theme's." : n === "on" || n === "hide" ? " Whether a layer starts off is layers.off." : "";
2316
- t.push(`${r} has unknown key "${n}": known: ${zn.join(", ")}.${e}`);
2467
+ t.push(`${r} has unknown key "${n}": known: ${ar.join(", ")}.${e}`);
2317
2468
  }
2318
2469
  let a = e.key;
2319
- typeof a == "string" ? Kn.has(a) ? t.push(`${r}.key ${R(a)} is a starting layer: pick another key.`) : Un.includes(a) ? t.push(`${r}.key ${R(a)} is reserved (a node type): pick another key.`) : !Rn.test(a) || a.length > 32 ? t.push(`${r}.key ${R(a)}: lower-case words joined by "-", like "edge-stack"${a.length > 32 ? ", at most 32 characters" : ""}.`) : i.has(a) ? t.push(`${r}.key ${R(a)} is also layers.add[${i.get(a)}].key: a key is used once.`) : i.set(a, n) : t.push(`${r}.key is required: lower-case words joined by "-", like "edge-stack".`);
2470
+ typeof a == "string" ? dr.has(a) ? t.push(`${r}.key ${B(a)} is a starting layer: pick another key.`) : cr.includes(a) ? t.push(`${r}.key ${B(a)} is reserved (a node type): pick another key.`) : !ir.test(a) || a.length > 32 ? t.push(`${r}.key ${B(a)}: lower-case words joined by "-", like "edge-stack"${a.length > 32 ? ", at most 32 characters" : ""}.`) : i.has(a) ? t.push(`${r}.key ${B(a)} is also layers.add[${i.get(a)}].key: a key is used once.`) : i.set(a, n) : t.push(`${r}.key is required: lower-case words joined by "-", like "edge-stack".`);
2320
2471
  let o = (n, i, a) => {
2321
2472
  let o = e[n];
2322
- o === void 0 ? a && t.push(`${r}.${n} is required: plain text, one line, at most ${i} characters.`) : typeof o != "string" || !o.trim() ? t.push(`${r}.${n} ${R(o)}: plain text, one line, at most ${i} characters.`) : Jn.test(o) ? t.push(`${r}.${n}: one line of plain text (no line break or control character).`) : [...o].length > i && t.push(`${r}.${n} is ${[...o].length} characters: at most ${i}.`);
2473
+ o === void 0 ? a && t.push(`${r}.${n} is required: plain text, one line, at most ${i} characters.`) : typeof o != "string" || !o.trim() ? t.push(`${r}.${n} ${B(o)}: plain text, one line, at most ${i} characters.`) : pr.test(o) ? t.push(`${r}.${n}: one line of plain text (no line break or control character).`) : [...o].length > i && t.push(`${r}.${n} is ${[...o].length} characters: at most ${i}.`);
2323
2474
  };
2324
- o("label", 40, !0), o("desc", 120, !1), e.match === void 0 ? t.push(`${r}.match is required: say at least one of ${Bn.join(", ")}.`) : mr(r, e.match, t);
2475
+ o("label", 40, !0), o("desc", 120, !1), e.match === void 0 ? t.push(`${r}.match is required: say at least one of ${R.join(", ")}.`) : Nr(r, e.match, t);
2325
2476
  });
2326
- let a = /* @__PURE__ */ new Set([...Gn, ...r.map((e) => L(e) && typeof e.key == "string" ? e.key : null).filter(Boolean)]);
2477
+ let a = /* @__PURE__ */ new Set([...ur, ...r.map((e) => z(e) && typeof e.key == "string" ? e.key : null).filter(Boolean)]);
2327
2478
  for (let r of ["off", "order"]) {
2328
2479
  let i = e[r];
2329
2480
  if (i === void 0) continue;
@@ -2333,18 +2484,18 @@ function hr(e) {
2333
2484
  }
2334
2485
  let o = /* @__PURE__ */ new Set();
2335
2486
  i.forEach((e) => {
2336
- typeof e != "string" || !a.has(e) ? t.push(`layers.${r} ${R(e)} is not a layer (${fr(n)}).`) : o.has(e) && t.push(`layers.${r} ${R(e)} is listed twice.`), o.add(e);
2487
+ typeof e != "string" || !a.has(e) ? t.push(`layers.${r} ${B(e)} is not a layer (${jr(n)}).`) : o.has(e) && t.push(`layers.${r} ${B(e)} is listed twice.`), o.add(e);
2337
2488
  });
2338
2489
  }
2339
2490
  return t;
2340
2491
  }
2341
- function gr(e) {
2492
+ function Fr(e) {
2342
2493
  let t = {
2343
2494
  add: [],
2344
2495
  off: [],
2345
2496
  order: []
2346
2497
  };
2347
- if (!L(e) || hr(e).length) return t;
2498
+ if (!z(e) || Pr(e).length) return t;
2348
2499
  let n = (e) => Array.isArray(e) ? e.slice(0, 20) : e;
2349
2500
  return {
2350
2501
  add: (e.add || []).map((e) => {
@@ -2361,7 +2512,7 @@ function gr(e) {
2361
2512
  order: [...e.order || []]
2362
2513
  };
2363
2514
  }
2364
- function _r(e, t, n = []) {
2515
+ function Ir(e, t, n = []) {
2365
2516
  let r = [...e, ...t], i = new Map(r.map((e) => [e.key, e])), a = [];
2366
2517
  for (let e of n) {
2367
2518
  let t = i.get(e);
@@ -2369,7 +2520,7 @@ function _r(e, t, n = []) {
2369
2520
  }
2370
2521
  return [...a, ...r.filter((e) => !a.includes(e))];
2371
2522
  }
2372
- function vr(e) {
2523
+ function Lr(e) {
2373
2524
  let t = /* @__PURE__ */ new Map();
2374
2525
  for (let n of e) typeof n.kind == "string" && n.kind && (t.has(n.type) || t.set(n.type, /* @__PURE__ */ new Set()), t.get(n.type).add(n.kind));
2375
2526
  let n = /* @__PURE__ */ new Map();
@@ -2383,582 +2534,474 @@ function vr(e) {
2383
2534
  return n;
2384
2535
  }
2385
2536
  // ../explorer/layer-model.js
2386
- var yr = (e) => (e.projectLayers || []).some((e) => e.match && e.match.parent !== void 0) ? (t) => ir(e.edges || []).get(t.id) : void 0;
2387
- function br(e, t) {
2537
+ var Rr = (e) => (e.projectLayers || []).some((e) => e.match && e.match.parent !== void 0) ? (t) => Cr(e.edges || []).get(t.id) : void 0;
2538
+ function zr(e, t) {
2388
2539
  let n = e.projectLayers;
2389
- return !n || !n.length ? null : lr(n, t, yr(e));
2540
+ return !n || !n.length ? null : Or(n, t, Rr(e));
2390
2541
  }
2391
- var xr = (e, t) => ur(e.projectLayers || [], t, yr(e)), Sr = /* @__PURE__ */ new WeakMap();
2392
- function Cr(e) {
2393
- let t = e.edges || [], n = Sr.get(e.nodes);
2542
+ var Br = (e, t) => kr(e.projectLayers || [], t, Rr(e)), Vr = /* @__PURE__ */ new WeakMap();
2543
+ function Hr(e) {
2544
+ let t = e.edges || [], n = Vr.get(e.nodes);
2394
2545
  if (n && n.edges === t && n.n === e.nodes.length && n.e === t.length) return n.touched;
2395
- let r = Bt(e.nodes, t).touched;
2396
- return Sr.set(e.nodes, {
2546
+ let r = qt(e.nodes, t).touched;
2547
+ return Vr.set(e.nodes, {
2397
2548
  edges: t,
2398
2549
  n: e.nodes.length,
2399
2550
  e: t.length,
2400
2551
  touched: r
2401
2552
  }), r;
2402
2553
  }
2403
- var wr = (e, t) => !!e.proposal && Cr(e).has(t.id), Tr = /* @__PURE__ */ new WeakMap();
2404
- function Er(e, t) {
2554
+ var Ur = (e, t) => !!e.proposal && Hr(e).has(t.id), Wr = /* @__PURE__ */ new WeakMap();
2555
+ function Gr(e, t) {
2405
2556
  if (typeof t.kind != "string" || !t.kind || t.type === "external") return "";
2406
- let n = Tr.get(e.nodes);
2557
+ let n = Wr.get(e.nodes);
2407
2558
  n && n.n === e.nodes.length || (n = {
2408
2559
  n: e.nodes.length,
2409
- map: vr(e.nodes)
2410
- }, Tr.set(e.nodes, n));
2560
+ map: Lr(e.nodes)
2561
+ }, Wr.set(e.nodes, n));
2411
2562
  let r = n.map.get(t.type);
2412
2563
  return r && r.get(t.kind) || "";
2413
2564
  }
2414
- var Dr = Object.freeze({
2565
+ var Kr = Object.freeze({
2415
2566
  core: ["pkg"],
2416
2567
  store: ["flow"],
2417
2568
  rom: ["flow"]
2418
- }), Or = (e) => !!e && !!e.mark && e.mark !== "none";
2419
- function kr({ nodes: e, edges: t, rowOf: n, flight: r = null }) {
2420
- let { touched: i } = Bt(e, t), a = /* @__PURE__ */ new Set();
2569
+ }), qr = (e) => !!e && !!e.mark && e.mark !== "none";
2570
+ function Jr({ nodes: e, edges: t, rowOf: n, flight: r = null }) {
2571
+ let { touched: i } = qt(e, t), a = /* @__PURE__ */ new Set();
2421
2572
  for (let t of e) {
2422
2573
  if (!i.has(t.id)) continue;
2423
2574
  let e = n(t);
2424
2575
  if (e) {
2425
2576
  a.add(e);
2426
- for (let t of Dr[e] || []) a.add(t);
2577
+ for (let t of Kr[e] || []) a.add(t);
2427
2578
  }
2428
2579
  r && r.has(t.id) && a.add("runs");
2429
- }
2430
- for (let e of t) Or(e) && e.kind === "flow" && a.add("flow");
2431
- return a;
2432
- }
2433
- function Ar({ active: e, touched: t, universe: n, review: r }) {
2434
- let i = { ...e };
2435
- if (!r.whole && t.size) for (let e of n) i[e] = t.has(e);
2436
- return Object.assign(i, r.manual || {}, r.step || {}), i;
2437
- }
2438
- var jr = /* @__PURE__ */ new WeakMap();
2439
- function Mr(e) {
2440
- let t = e.nodes, n = e.edges || [], r = e.runsMap ? e.runsMap.flight : null, i = jr.get(t);
2441
- if (i && i.edges === n && i.n === t.length && i.e === n.length && i.flight === r && i.project === e.projectLayers) return i;
2442
- let a = kr({
2443
- nodes: t,
2444
- edges: n,
2445
- rowOf: (t) => xr(e, t),
2446
- flight: r
2447
- }), o = /* @__PURE__ */ new Set([
2448
- ...Wn.map((e) => e.key),
2449
- ...(e.projectLayers || []).map((e) => e.key),
2450
- ...t.map((t) => xr(e, t)).filter(Boolean)
2451
- ]), s = {
2452
- edges: n,
2453
- n: t.length,
2454
- e: n.length,
2455
- flight: r,
2456
- project: e.projectLayers,
2457
- touched: a,
2458
- universe: o
2459
- };
2460
- return jr.set(t, s), s;
2461
- }
2462
- var Nr = /* @__PURE__ */ new WeakMap();
2463
- function z(e) {
2464
- let t = e.review;
2465
- if (!t || !e.proposal) return e.activeLayers;
2466
- let n = Nr.get(t);
2467
- if (n && n.rev === t.rev && n.version === e.sceneVersion && n.active === e.activeLayers && n.nodes === e.nodes) return n.out;
2468
- let { touched: r, universe: i } = Mr(e), a = Ar({
2469
- active: e.activeLayers,
2470
- touched: r,
2471
- universe: i,
2472
- review: t
2473
- });
2474
- return Nr.set(t, {
2475
- rev: t.rev,
2476
- version: e.sceneVersion,
2477
- active: e.activeLayers,
2478
- nodes: e.nodes,
2479
- out: a
2480
- }), a;
2481
- }
2482
- var Pr = (e, t) => z(e)[t] !== !1;
2483
- function Fr(e, t) {
2484
- let n = e.review;
2485
- return !n || !e.proposal || n.whole || e.activeLayers[t] === !1 || Object.hasOwn(n.manual || {}, t) || Object.hasOwn(n.step || {}, t) ? !1 : z(e)[t] === !1;
2486
- }
2487
- var Ir = (e) => !!e.review && !!e.proposal && !e.review.whole && Cr(e).size > 0, Lr = Object.freeze({
2488
- aliceblue: "#f0f8ff",
2489
- antiquewhite: "#faebd7",
2490
- aqua: "#00ffff",
2491
- aquamarine: "#7fffd4",
2492
- azure: "#f0ffff",
2493
- beige: "#f5f5dc",
2494
- bisque: "#ffe4c4",
2495
- black: "#000000",
2496
- blanchedalmond: "#ffebcd",
2497
- blue: "#0000ff",
2498
- blueviolet: "#8a2be2",
2499
- brown: "#a52a2a",
2500
- burlywood: "#deb887",
2501
- cadetblue: "#5f9ea0",
2502
- chartreuse: "#7fff00",
2503
- chocolate: "#d2691e",
2504
- coral: "#ff7f50",
2505
- cornflowerblue: "#6495ed",
2506
- cornsilk: "#fff8dc",
2507
- crimson: "#dc143c",
2508
- cyan: "#00ffff",
2509
- darkblue: "#00008b",
2510
- darkcyan: "#008b8b",
2511
- darkgoldenrod: "#b8860b",
2512
- darkgray: "#a9a9a9",
2513
- darkgreen: "#006400",
2514
- darkgrey: "#a9a9a9",
2515
- darkkhaki: "#bdb76b",
2516
- darkmagenta: "#8b008b",
2517
- darkolivegreen: "#556b2f",
2518
- darkorange: "#ff8c00",
2519
- darkorchid: "#9932cc",
2520
- darkred: "#8b0000",
2521
- darksalmon: "#e9967a",
2522
- darkseagreen: "#8fbc8f",
2523
- darkslateblue: "#483d8b",
2524
- darkslategray: "#2f4f4f",
2525
- darkslategrey: "#2f4f4f",
2526
- darkturquoise: "#00ced1",
2527
- darkviolet: "#9400d3",
2528
- deeppink: "#ff1493",
2529
- deepskyblue: "#00bfff",
2530
- dimgray: "#696969",
2531
- dimgrey: "#696969",
2532
- dodgerblue: "#1e90ff",
2533
- firebrick: "#b22222",
2534
- floralwhite: "#fffaf0",
2535
- forestgreen: "#228b22",
2536
- fuchsia: "#ff00ff",
2537
- gainsboro: "#dcdcdc",
2538
- ghostwhite: "#f8f8ff",
2539
- gold: "#ffd700",
2540
- goldenrod: "#daa520",
2541
- gray: "#808080",
2542
- green: "#008000",
2543
- greenyellow: "#adff2f",
2544
- grey: "#808080",
2545
- honeydew: "#f0fff0",
2546
- hotpink: "#ff69b4",
2547
- indianred: "#cd5c5c",
2548
- indigo: "#4b0082",
2549
- ivory: "#fffff0",
2550
- khaki: "#f0e68c",
2551
- lavender: "#e6e6fa",
2552
- lavenderblush: "#fff0f5",
2553
- lawngreen: "#7cfc00",
2554
- lemonchiffon: "#fffacd",
2555
- lightblue: "#add8e6",
2556
- lightcoral: "#f08080",
2557
- lightcyan: "#e0ffff",
2558
- lightgoldenrodyellow: "#fafad2",
2559
- lightgray: "#d3d3d3",
2560
- lightgreen: "#90ee90",
2561
- lightgrey: "#d3d3d3",
2562
- lightpink: "#ffb6c1",
2563
- lightsalmon: "#ffa07a",
2564
- lightseagreen: "#20b2aa",
2565
- lightskyblue: "#87cefa",
2566
- lightslategray: "#778899",
2567
- lightslategrey: "#778899",
2568
- lightsteelblue: "#b0c4de",
2569
- lightyellow: "#ffffe0",
2570
- lime: "#00ff00",
2571
- limegreen: "#32cd32",
2572
- linen: "#faf0e6",
2573
- magenta: "#ff00ff",
2574
- maroon: "#800000",
2575
- mediumaquamarine: "#66cdaa",
2576
- mediumblue: "#0000cd",
2577
- mediumorchid: "#ba55d3",
2578
- mediumpurple: "#9370db",
2579
- mediumseagreen: "#3cb371",
2580
- mediumslateblue: "#7b68ee",
2581
- mediumspringgreen: "#00fa9a",
2582
- mediumturquoise: "#48d1cc",
2583
- mediumvioletred: "#c71585",
2584
- midnightblue: "#191970",
2585
- mintcream: "#f5fffa",
2586
- mistyrose: "#ffe4e1",
2587
- moccasin: "#ffe4b5",
2588
- navajowhite: "#ffdead",
2589
- navy: "#000080",
2590
- oldlace: "#fdf5e6",
2591
- olive: "#808000",
2592
- olivedrab: "#6b8e23",
2593
- orange: "#ffa500",
2594
- orangered: "#ff4500",
2595
- orchid: "#da70d6",
2596
- palegoldenrod: "#eee8aa",
2597
- palegreen: "#98fb98",
2598
- paleturquoise: "#afeeee",
2599
- palevioletred: "#db7093",
2600
- papayawhip: "#ffefd5",
2601
- peachpuff: "#ffdab9",
2602
- peru: "#cd853f",
2603
- pink: "#ffc0cb",
2604
- plum: "#dda0dd",
2605
- powderblue: "#b0e0e6",
2606
- purple: "#800080",
2607
- rebeccapurple: "#663399",
2608
- red: "#ff0000",
2609
- rosybrown: "#bc8f8f",
2610
- royalblue: "#4169e1",
2611
- saddlebrown: "#8b4513",
2612
- salmon: "#fa8072",
2613
- sandybrown: "#f4a460",
2614
- seagreen: "#2e8b57",
2615
- seashell: "#fff5ee",
2616
- sienna: "#a0522d",
2617
- silver: "#c0c0c0",
2618
- skyblue: "#87ceeb",
2619
- slateblue: "#6a5acd",
2620
- slategray: "#708090",
2621
- slategrey: "#708090",
2622
- snow: "#fffafa",
2623
- springgreen: "#00ff7f",
2624
- steelblue: "#4682b4",
2625
- tan: "#d2b48c",
2626
- teal: "#008080",
2627
- thistle: "#d8bfd8",
2628
- tomato: "#ff6347",
2629
- turquoise: "#40e0d0",
2630
- violet: "#ee82ee",
2631
- wheat: "#f5deb3",
2632
- white: "#ffffff",
2633
- whitesmoke: "#f5f5f5",
2634
- yellow: "#ffff00",
2635
- yellowgreen: "#9acd32"
2636
- }), Rr = "[+-]?(?:\\d+\\.?\\d*|\\.\\d+)(?:e[+-]?\\d+)?", zr = (e, t, n) => Math.min(n, Math.max(t, e));
2637
- function Br(e, t) {
2638
- let n = RegExp(`^${t}\\(`, "i").exec(e);
2639
- if (!n || !e.endsWith(")")) return null;
2640
- let r = 0;
2641
- for (let t = n[0].length - 1; t < e.length; t++) if (e[t] === "(") r++;
2642
- else if (e[t] === ")" && --r === 0 && t !== e.length - 1) return null;
2643
- return r === 0 ? e.slice(n[0].length, -1) : null;
2580
+ }
2581
+ for (let e of t) qr(e) && e.kind === "flow" && a.add("flow");
2582
+ return a;
2644
2583
  }
2645
- function Vr(e, t) {
2646
- let n = [], r = 0, i = 0;
2647
- for (let a = 0; a < e.length; a++) e[a] === "(" ? r++ : e[a] === ")" ? r-- : e[a] === t && r === 0 && (n.push(e.slice(i, a)), i = a + 1);
2648
- return n.push(e.slice(i)), n;
2584
+ function Yr({ active: e, touched: t, universe: n, review: r }) {
2585
+ let i = { ...e };
2586
+ if (!r.whole && t.size) for (let e of n) i[e] = t.has(e);
2587
+ return Object.assign(i, r.manual || {}, r.step || {}), i;
2649
2588
  }
2650
- var Hr = (e, t) => {
2651
- let n = RegExp(`^(${Rr})(%?)$`, "i").exec(e);
2652
- return n ? n[2] ? Number(n[1]) / 100 * t : Number(n[1]) : null;
2653
- }, Ur = (e) => e === void 0 ? 1 : (() => {
2654
- let t = Hr(e, 1);
2655
- return t === null ? null : zr(t, 0, 1);
2656
- })();
2657
- function Wr(e, t, n) {
2658
- let r = (t) => (t + e / 30) % 12, i = t * Math.min(n, 1 - n), a = (e) => n - i * Math.max(-1, Math.min(r(e) - 3, Math.min(9 - r(e), 1)));
2659
- return [
2660
- a(0) * 255,
2661
- a(8) * 255,
2662
- a(4) * 255
2663
- ];
2589
+ var Xr = /* @__PURE__ */ new WeakMap();
2590
+ function Zr(e) {
2591
+ let t = e.nodes, n = e.edges || [], r = e.runsMap ? e.runsMap.flight : null, i = Xr.get(t);
2592
+ if (i && i.edges === n && i.n === t.length && i.e === n.length && i.flight === r && i.project === e.projectLayers) return i;
2593
+ let a = Jr({
2594
+ nodes: t,
2595
+ edges: n,
2596
+ rowOf: (t) => Br(e, t),
2597
+ flight: r
2598
+ }), o = /* @__PURE__ */ new Set([
2599
+ ...lr.map((e) => e.key),
2600
+ ...(e.projectLayers || []).map((e) => e.key),
2601
+ ...t.map((t) => Br(e, t)).filter(Boolean)
2602
+ ]), s = {
2603
+ edges: n,
2604
+ n: t.length,
2605
+ e: n.length,
2606
+ flight: r,
2607
+ project: e.projectLayers,
2608
+ touched: a,
2609
+ universe: o
2610
+ };
2611
+ return Xr.set(t, s), s;
2664
2612
  }
2665
- function Gr(e) {
2666
- let t = e.trim();
2667
- if (t.includes(",")) {
2668
- let e = t.split(/\s*,\s*/);
2669
- return (e.length === 3 || e.length === 4) && e.every((e) => e && !/[\s/]/.test(e)) ? e : null;
2670
- }
2671
- let n = /^(\S+)\s+(\S+)\s+([^\s/]+)(?:\s*\/\s*(\S+))?$/.exec(t);
2672
- return n && !n.slice(1, 4).some((e) => e.includes("/")) ? n.slice(1, n[4] === void 0 ? 4 : 5) : null;
2613
+ var Qr = /* @__PURE__ */ new WeakMap();
2614
+ function V(e) {
2615
+ let t = e.review;
2616
+ if (!t || !e.proposal) return e.activeLayers;
2617
+ let n = Qr.get(t);
2618
+ if (n && n.rev === t.rev && n.version === e.sceneVersion && n.active === e.activeLayers && n.nodes === e.nodes) return n.out;
2619
+ let { touched: r, universe: i } = Zr(e), a = Yr({
2620
+ active: e.activeLayers,
2621
+ touched: r,
2622
+ universe: i,
2623
+ review: t
2624
+ });
2625
+ return Qr.set(t, {
2626
+ rev: t.rev,
2627
+ version: e.sceneVersion,
2628
+ active: e.activeLayers,
2629
+ nodes: e.nodes,
2630
+ out: a
2631
+ }), a;
2673
2632
  }
2674
- function Kr(e, t = 0) {
2675
- let n = String(e).trim().toLowerCase();
2676
- if (n === "transparent") return [
2677
- 0,
2678
- 0,
2679
- 0,
2680
- 0
2681
- ];
2682
- if (Lr[n]) return Kr(Lr[n], t);
2683
- let r = /^#([0-9a-f]{3,4})$/.exec(n);
2684
- if (r) {
2685
- let e = [...r[1]].map((e) => parseInt(e + e, 16));
2686
- return [
2687
- e[0],
2688
- e[1],
2689
- e[2],
2690
- e.length === 4 ? e[3] / 255 : 1
2691
- ];
2692
- }
2693
- if (r = /^#([0-9a-f]{6}|[0-9a-f]{8})$/.exec(n), r) {
2694
- let e = r[1];
2695
- return [
2696
- parseInt(e.slice(0, 2), 16),
2697
- parseInt(e.slice(2, 4), 16),
2698
- parseInt(e.slice(4, 6), 16),
2699
- e.length === 8 ? parseInt(e.slice(6, 8), 16) / 255 : 1
2700
- ];
2701
- }
2702
- let i = Br(n, "rgba?");
2703
- if (i !== null) {
2704
- let e = Gr(i);
2705
- if (!e) return null;
2706
- let t = e.slice(0, 3).map((e) => Hr(e, 255)), n = Ur(e[3]);
2707
- return t.some((e) => e === null) || n === null ? null : [...t.map((e) => zr(e, 0, 255)), n];
2633
+ var $r = (e, t) => V(e)[t] !== !1;
2634
+ function ei(e, t) {
2635
+ let n = e.review;
2636
+ return !n || !e.proposal || n.whole || e.activeLayers[t] === !1 || Object.hasOwn(n.manual || {}, t) || Object.hasOwn(n.step || {}, t) ? !1 : V(e)[t] === !1;
2637
+ }
2638
+ var ti = (e) => !!e.review && !!e.proposal && !e.review.whole && Hr(e).size > 0, ni = {
2639
+ outbox: {
2640
+ color: "#f59e0b",
2641
+ label: "Outbox → API (writes)"
2642
+ },
2643
+ changes: {
2644
+ color: "#22d3ee",
2645
+ label: "Change stream (reads back)"
2646
+ },
2647
+ trigger: {
2648
+ color: "#a3e635",
2649
+ label: "Trigger → audit_log (seq)"
2650
+ },
2651
+ sync: {
2652
+ color: "#fb7185",
2653
+ label: "Background sync (external)"
2654
+ },
2655
+ model: {
2656
+ color: "#c084fc",
2657
+ label: "Model classes feed a tier"
2658
+ },
2659
+ rom: {
2660
+ color: "#f0abfc",
2661
+ label: "ROM: change → re-bake → serve"
2662
+ },
2663
+ read: {
2664
+ color: "#93c5fd",
2665
+ label: "Server reads rows over HTTP"
2666
+ },
2667
+ api: {
2668
+ color: "#38bdf8",
2669
+ label: "App calls the API (derived from its code)"
2670
+ },
2671
+ build: {
2672
+ color: "#d6d3d1",
2673
+ label: "Build script writes files"
2674
+ },
2675
+ reads: {
2676
+ color: "#fde047",
2677
+ label: "Table → page (render reads)"
2678
+ },
2679
+ writes: {
2680
+ color: "#f87171",
2681
+ label: "Page → table (form / action)"
2682
+ },
2683
+ uses: {
2684
+ color: "#f472b6",
2685
+ label: "Stylesheet uses design tokens"
2686
+ },
2687
+ extends: {
2688
+ color: "#5eead4",
2689
+ label: "Component extends a base class"
2690
+ },
2691
+ calls: {
2692
+ color: "#fb7185",
2693
+ label: "Calls (service → service, outside system)"
2694
+ },
2695
+ triggers: {
2696
+ color: "#a3e635",
2697
+ label: "Triggers (cron, webhook, store change)"
2698
+ },
2699
+ delivers: {
2700
+ color: "#94a3b8",
2701
+ label: "Outside system → webhook endpoint"
2702
+ },
2703
+ "runs-on": {
2704
+ color: "#a8a29e",
2705
+ label: "App → the stack that serves its domain"
2708
2706
  }
2709
- let a = Br(n, "hsla?");
2710
- if (a !== null) {
2711
- let e = Gr(a);
2712
- if (!e) return null;
2713
- let t = RegExp(`^(${Rr})(?:deg)?$`).exec(e[0]), n = /%$/.test(e[1]) ? Hr(e[1], 1) : null, r = /%$/.test(e[2]) ? Hr(e[2], 1) : null, i = Ur(e[3]);
2714
- return !t || n === null || r === null || i === null ? null : [...Wr((Number(t[1]) % 360 + 360) % 360, zr(n, 0, 1), zr(r, 0, 1)), i];
2707
+ }, ri = (e) => ni[e.kind === "flow" ? e.flow : e.kind] || ni.sync, H = {
2708
+ run: {
2709
+ title: "Breaks now",
2710
+ legend: "No tick: breaks as soon as it is down",
2711
+ ticks: 0,
2712
+ color: "#f87171"
2713
+ },
2714
+ deploy: {
2715
+ title: "Breaks at the next deploy",
2716
+ legend: "One tick: breaks at the next deploy, rebuild or first run",
2717
+ ticks: 1,
2718
+ color: "#fbbf24"
2719
+ },
2720
+ renew: {
2721
+ title: "Breaks at the next certificate renewal",
2722
+ legend: "Two ticks: breaks at the next certificate renewal",
2723
+ ticks: 2,
2724
+ color: "#a78bfa"
2715
2725
  }
2716
- let o = t < 8 ? Br(n, "color-mix") : null;
2717
- if (o !== null) {
2718
- let e = Vr(o, ",").map((e) => e.trim());
2719
- if (e.length !== 3 || !/^in\s+srgb$/.test(e[0])) return null;
2720
- let n = (e) => {
2721
- let n = /^(\d*\.?\d+)%\s+(.+)$/.exec(e), r = /^(.+?)\s+(\d*\.?\d+)%$/.exec(e), [i, a] = n ? [n[2], n[1]] : r ? [r[1], r[2]] : [e, null], o = Kr(i, t + 1);
2722
- return o && {
2723
- c: o,
2724
- p: a === null ? null : Number(a) / 100
2725
- };
2726
- }, r = n(e[1]), i = n(e[2]);
2727
- if (!r || !i || r.p !== null && (r.p < 0 || r.p > 1) || i.p !== null && (i.p < 0 || i.p > 1)) return null;
2728
- let a = r.p ?? (i.p === null ? .5 : 1 - i.p), s = i.p ?? 1 - a;
2729
- return a + s <= 0 ? null : Jr(r.c, a, i.c, s);
2726
+ }, ii = (e) => e && Object.hasOwn(H, e.when) ? e.when : "run", ai = (e) => e && e.kind === "calls" ? H[ii(e)].ticks : 0, oi = (e) => e && e.kind === "web" ? "web" : "cloud", si = Object.keys(H), ci = Object.fromEntries(si.map((e, t) => [e, t])), li = /* @__PURE__ */ new Set([
2727
+ "persona",
2728
+ "room",
2729
+ "floor"
2730
+ ]), ui = [
2731
+ "external",
2732
+ "machine",
2733
+ "container",
2734
+ "service",
2735
+ "page",
2736
+ "app"
2737
+ ], di = (e) => {
2738
+ let t = ui.indexOf(e);
2739
+ return t < 0 ? ui.length : t;
2740
+ }, fi = {
2741
+ color: "#050608",
2742
+ halo: "child"
2743
+ }, pi = {
2744
+ alpha: .92,
2745
+ glow: 10,
2746
+ edgeAlpha: .9,
2747
+ edgeWidth: 2.2
2748
+ }, mi = (e, t) => `${e}->${t}`;
2749
+ function hi(e, t, n) {
2750
+ let r = new Map(t.map((e) => [e.id, e])), i = [...new Set(Array.isArray(e) ? e : [])].filter((e) => r.has(e)), a = new Set(i), o = /* @__PURE__ */ new Map(), s = (e, t) => {
2751
+ o.has(e) || o.set(e, []), o.get(e).push(t);
2752
+ }, c = /* @__PURE__ */ new Map();
2753
+ for (let e of n) if (e && e.from && e.to) {
2754
+ if (e.kind === "calls") s(e.to, {
2755
+ from: e.from,
2756
+ rank: ci[ii(e)],
2757
+ browser: e.side === "browser",
2758
+ key: mi(e.from, e.to)
2759
+ });
2760
+ else if (e.kind === "triggers" && (r.get(e.from) || {}).type === "page" && (r.get(e.to) || {}).type === "service") s(e.to, {
2761
+ from: e.from,
2762
+ rank: 0,
2763
+ browser: !1,
2764
+ key: mi(e.from, e.to)
2765
+ });
2766
+ else if (e.kind === "runs-on" && Array.isArray(e.mappings)) for (let t of e.mappings) {
2767
+ if (!t || !t.service) continue;
2768
+ let n = `${e.to}|${t.service}`;
2769
+ c.has(n) || c.set(n, /* @__PURE__ */ new Set()), c.get(n).add(e.from);
2770
+ }
2730
2771
  }
2731
- return null;
2732
- }
2733
- function qr(e) {
2734
- if (String(e).length > 4096) return null;
2735
- try {
2736
- return Kr(e);
2737
- } catch {
2738
- return null;
2772
+ let l = (e) => {
2773
+ let t = o.get(e) || [], n = r.get(e);
2774
+ if (!n || n.type !== "container" || !n.stack || !n.service) return t;
2775
+ let i = [...c.get(`stack-${n.stack}|${n.service}`) || []].map((e) => ({
2776
+ from: e,
2777
+ rank: 0,
2778
+ browser: !1,
2779
+ key: null
2780
+ }));
2781
+ return i.length ? [...t, ...i] : t;
2782
+ }, u = /* @__PURE__ */ new Map(), d = /* @__PURE__ */ new Map(), f = si.map(() => []);
2783
+ i.forEach((e) => f[0].push({
2784
+ id: e,
2785
+ rank: 0,
2786
+ browser: !1
2787
+ }));
2788
+ for (let e = 0; e < f.length; e++) for (let t = 0; t < f[e].length; t++) {
2789
+ let { id: n, rank: i, browser: o } = f[e][t], s = u.get(n);
2790
+ if (!(s && (s.rank < i || s.rank === i && s.browser !== o))) for (let e of l(n)) {
2791
+ let t = r.get(e.from);
2792
+ if (!t || a.has(e.from) || li.has(t.type)) continue;
2793
+ let n = Math.max(i, e.rank), s = o || e.browser;
2794
+ e.key && (!d.has(e.key) || ci[d.get(e.key)] > n) && d.set(e.key, si[n]);
2795
+ let c = u.get(e.from);
2796
+ c && (c.rank < n || c.rank === n && (!c.browser || s)) || (u.set(e.from, {
2797
+ rank: n,
2798
+ when: si[n],
2799
+ browser: s
2800
+ }), f[n].push({
2801
+ id: e.from,
2802
+ rank: n,
2803
+ browser: s
2804
+ }));
2805
+ }
2739
2806
  }
2807
+ let p = new Map([...u].map(([e, t]) => [e, {
2808
+ when: t.when,
2809
+ browser: t.browser
2810
+ }])), m = (e) => String(r.get(e).label || e);
2811
+ return {
2812
+ down: i,
2813
+ hits: p,
2814
+ edges: d,
2815
+ groups: si.map((e) => {
2816
+ let t = [...p].filter(([, t]) => t.when === e).map(([e]) => e).sort((e, t) => di(r.get(e).type) - di(r.get(t).type) || m(e).localeCompare(m(t))), { title: n, color: i } = H[e];
2817
+ return {
2818
+ when: e,
2819
+ title: n,
2820
+ color: i,
2821
+ ids: t
2822
+ };
2823
+ }).filter((e) => e.ids.length)
2824
+ };
2740
2825
  }
2741
- function B(e) {
2742
- return qr(e) ?? [
2743
- 0,
2744
- 0,
2745
- 0,
2746
- 0
2747
- ];
2826
+ var U = null;
2827
+ function gi(e, t, n) {
2828
+ let r = e && Array.isArray(e.down) ? e.down : [];
2829
+ if (!r.length) return null;
2830
+ let i = r.join("\0");
2831
+ return U && U.key === i && U.nodes === t && U.edges === n || (U = {
2832
+ key: i,
2833
+ nodes: t,
2834
+ edges: n,
2835
+ radius: hi(r, t, n)
2836
+ }), U.radius;
2748
2837
  }
2749
- function Jr(e, t, n, r) {
2750
- let i = t + r, [a, o] = [t / i, r / i], s = e[3] * a + n[3] * o, c = (t) => s === 0 ? 0 : (e[t] * e[3] * a + n[t] * n[3] * o) / s;
2751
- return [
2752
- c(0),
2753
- c(1),
2754
- c(2),
2755
- s * Math.min(1, i)
2756
- ];
2838
+ function _i(e, t) {
2839
+ if (!t) return;
2840
+ let n = new Set(t.down);
2841
+ for (let r of e.nodes) {
2842
+ if (n.has(r.id)) {
2843
+ Object.assign(r, {
2844
+ color: fi.color,
2845
+ alpha: 1,
2846
+ labelAlpha: 1,
2847
+ labelColor: "#f8fafc",
2848
+ labelKeep: !0,
2849
+ labelStrike: !0,
2850
+ connected: !0,
2851
+ glow: 0
2852
+ }), r.halo === "none" && (r.halo = fi.halo);
2853
+ continue;
2854
+ }
2855
+ let e = t.hits.get(r.id);
2856
+ if (!e) continue;
2857
+ let i = Math.max(r.alpha, pi.alpha);
2858
+ Object.assign(r, {
2859
+ color: H[e.when].color,
2860
+ alpha: i,
2861
+ labelAlpha: i,
2862
+ labelColor: "#f8fafc",
2863
+ labelKeep: !0,
2864
+ connected: !0,
2865
+ glow: Math.max(r.glow || 0, pi.glow)
2866
+ });
2867
+ }
2868
+ for (let n of e.edges) {
2869
+ let e = t.edges.get(mi(n.from, n.to));
2870
+ if (!e) continue;
2871
+ let r = H[e].color;
2872
+ n.color = r, n.glow && (n.glowColor = r), n.alpha = Math.max(n.alpha, pi.edgeAlpha), n.width = Math.max(n.width, pi.edgeWidth), n.packet &&= {
2873
+ ...n.packet,
2874
+ glowColor: r
2875
+ };
2876
+ }
2757
2877
  }
2758
- function Yr(e, t) {
2759
- let n = e[3];
2760
- return [
2761
- 0,
2762
- 1,
2763
- 2
2764
- ].map((r) => Math.round(e[r] * n + t[r] * (1 - n))).concat(1);
2878
+ // ../explorer/house-model.js
2879
+ var vi = /* @__PURE__ */ new Set([
2880
+ "container",
2881
+ "stack",
2882
+ "machine"
2883
+ ]);
2884
+ function yi(e, t) {
2885
+ return !!(e.house && e.house.shown && e.house.shown.has(t.id));
2765
2886
  }
2766
- var Xr = ([e, t, n]) => `#${[
2767
- e,
2768
- t,
2769
- n
2770
- ].map((e) => Math.round(e).toString(16).padStart(2, "0")).join("")}`, Zr = (e) => {
2771
- let t = e / 255;
2772
- return t <= .03928 ? t / 12.92 : ((t + .055) / 1.055) ** 2.4;
2773
- }, Qr = ([e, t, n]) => .2126 * Zr(e) + .7152 * Zr(t) + .0722 * Zr(n), $r = (e, t) => (Math.max(e, t) + .05) / (Math.min(e, t) + .05), ei = (e, t) => $r(Qr(B(e)), Qr(B(t))), V = Object.freeze({
2774
- dark: Object.freeze({
2775
- added: "#2dd4bf",
2776
- changed: "#fbbf24",
2777
- removed: "#fa9292",
2778
- edit: "#b49cfb"
2779
- }),
2780
- light: Object.freeze({
2781
- added: "#197c6f",
2782
- changed: "#8f6703",
2783
- removed: "#e20b0b",
2784
- edit: "#6839f6"
2785
- })
2786
- }), ti = .85, ni = .9, ri = .6, ii = .45, ai = Object.freeze({
2787
- light: ri,
2788
- dark: .5
2789
- }), oi = Object.freeze({
2790
- added: Object.freeze({
2791
- ringDash: Object.freeze([5, 4]),
2792
- edgeDash: Object.freeze([7, 5]),
2793
- strike: !1
2794
- }),
2795
- changed: Object.freeze({
2796
- ringDash: null,
2797
- edgeDash: null,
2798
- strike: !1
2799
- }),
2800
- removed: Object.freeze({
2801
- ringDash: null,
2802
- edgeDash: Object.freeze([3, 4]),
2803
- strike: !0
2804
- }),
2805
- edit: Object.freeze({
2806
- ringDash: Object.freeze([2, 5]),
2807
- edgeDash: Object.freeze([12, 4]),
2808
- strike: !1
2809
- })
2810
- }), si = "#f4f6fa", ci = "#090d16", li = {
2811
- mark: 3.2,
2812
- text: 4.8
2813
- }, ui = .16, di = 1.35, fi = .11;
2814
- function pi(e, t) {
2815
- return e === "light" || e === "dark" ? e : t ? "light" : "dark";
2887
+ var bi = null;
2888
+ function xi(e) {
2889
+ let t = e.house && e.house.cloudLines;
2890
+ return !t || !t.length ? e.edges : (bi && bi.edges === e.edges && bi.lines === t || (bi = {
2891
+ edges: e.edges,
2892
+ lines: t,
2893
+ all: [...e.edges, ...t]
2894
+ }), bi.all);
2816
2895
  }
2817
- function mi([e, t, n]) {
2818
- let r = e / 255, i = t / 255, a = n / 255, o = Math.max(r, i, a), s = Math.min(r, i, a), c = (o + s) / 2;
2819
- if (o === s) return [
2820
- 0,
2821
- 0,
2822
- c
2823
- ];
2824
- let l = o - s, u = c > .5 ? l / (2 - o - s) : l / (o + s);
2825
- return [
2826
- (o === r ? (i - a) / l + (i < a ? 6 : 0) : o === i ? (a - r) / l + 2 : (r - i) / l + 4) * 60,
2827
- u,
2828
- c
2829
- ];
2896
+ function Si(e, t, n) {
2897
+ return e.kind === "runs-on" || e.kind === "delivers" ? "flow" : e.kind === "calls" && n && n.type === "external" ? e.rolled || !(t && vi.has(t.type)) ? "flow" : null : !e.kind && !e.dashed && t && t.type === "persona" && n && n.type === "device" || !e.kind && e.dashed && t && (t.type === "container" || t.type === "external") && n && n.type === "device" ? "link" : null;
2830
2898
  }
2831
- function hi([e, t, n]) {
2832
- let r = (t) => (t + e / 30) % 12, i = t * Math.min(n, 1 - n), a = (e) => n - i * Math.max(-1, Math.min(r(e) - 3, 9 - r(e), 1));
2833
- return [
2834
- a(0),
2835
- a(8),
2836
- a(4)
2837
- ].map((e) => Math.round(e * 255));
2899
+ var Ci = [
2900
+ "persona",
2901
+ "machine",
2902
+ "stack",
2903
+ "floor",
2904
+ "external"
2905
+ ];
2906
+ function wi(e, t) {
2907
+ let n = t.house;
2908
+ e.decor.rings = [], e.decor.lanes = n && n.lanes ? n.lanes : [];
2909
+ for (let t of e.nodes) t.type === "room" ? (t.label = "", t.labelKeep = !1) : Ci.includes(t.type) && (t.labelKeep = !0);
2910
+ return n && n.cloudIds && n.cloudIds.size && ki(e, t), e;
2838
2911
  }
2839
- var gi = (e) => `#${e.map((e) => e.toString(16).padStart(2, "0")).join("")}`, _i = (e, t) => t >= 1 ? gi(e) : `rgba(${e.join(", ")}, ${+t.toFixed(3)})`, vi = Qr(B(si)), yi = /* @__PURE__ */ new Map();
2840
- function H(e, t = "mark") {
2841
- let n = `${t}|${e}`, r = yi.get(n);
2842
- if (r !== void 0) return r;
2843
- let i = bi(e, t);
2844
- return yi.set(n, i), i;
2912
+ var Ti = {
2913
+ run: .9,
2914
+ deploy: .25,
2915
+ renew: .9
2916
+ }, Ei = {
2917
+ alpha: .9,
2918
+ width: 2.2
2919
+ }, Di = Object.keys(H), Oi = (e) => Di.find((t) => H[t].ticks === (e.ticks || 0)) || "run";
2920
+ function ki(e, t) {
2921
+ let n = t.house, r = t.scenario ? gi(t.scenario, t.nodes, t.edges) : null, i = !t.scenario && !!t.selectedNode, a = new Map((n.cloudLines || []).map((e) => [`${e.from}->${e.to}|${e.when}`, e])), o = r ? new Set(r.down) : null;
2922
+ e.edges = e.edges.filter((e) => {
2923
+ if (e.kind !== "calls" || !n.cloudIds.has(e.to)) return !0;
2924
+ let t = Oi(e);
2925
+ if (r) {
2926
+ let i = a.get(`${e.from}->${e.to}|${t}`), s = o.has(e.to) ? "run" : r.hits.has(e.to) ? r.hits.get(e.to).when : null;
2927
+ if (i && s) {
2928
+ let n = Di[Math.max(Di.indexOf(s), Di.indexOf(t))];
2929
+ return Object.assign(e, {
2930
+ color: H[n].color,
2931
+ alpha: Math.max(e.alpha, Ei.alpha),
2932
+ width: Math.max(e.width, Ei.width)
2933
+ }), e.glow && (e.glowColor = e.color), !0;
2934
+ }
2935
+ return !n.phone || r.edges.has(`${e.from}->${e.to}`);
2936
+ }
2937
+ return i ? !n.phone || e.alpha >= .5 : !n.phone && (e.alpha = Ti[t], !0);
2938
+ });
2845
2939
  }
2846
- function bi(e, t) {
2847
- if (typeof e != "string") return e;
2848
- let [n, r, i, a] = B(e);
2849
- if (a === 0) return e;
2850
- let [o, s, c] = mi([
2851
- n,
2852
- r,
2853
- i
2854
- ]);
2855
- if ((Math.max(n, r, i) - Math.min(n, r, i)) / 255 < ui && c > .5) return _i(hi([
2856
- o,
2857
- s,
2858
- Math.max(fi, 1 - c)
2859
- ]), a);
2860
- let l = li[t] || li.mark;
2861
- if ($r(Qr([
2862
- n,
2863
- r,
2864
- i
2865
- ]), vi) >= l) return e;
2866
- let u = 0, d = c;
2867
- for (let e = 0; e < 20; e++) {
2868
- let e = (u + d) / 2;
2869
- $r(Qr(hi([
2870
- o,
2871
- s,
2872
- e
2873
- ])), vi) >= l ? u = e : d = e;
2874
- }
2875
- return _i(hi([
2876
- o,
2877
- s,
2878
- u
2879
- ]), a);
2940
+ // ../explorer/verdict-paint.js
2941
+ var Ai = {
2942
+ allowed: "#4ade80",
2943
+ refused: "#ff2d55",
2944
+ mismatch: "#fbbf24"
2945
+ }, ji = 18, Mi = 4.5;
2946
+ function Ni(e, t) {
2947
+ return e.from !== t.from || e.to !== t.to ? !1 : t.kind ? e.kind === t.kind && (!t.flow || e.key.split("|")[2] === t.flow) : e.kind === "ownership" || e.kind === "usage";
2880
2948
  }
2881
- var xi = (e, t, n = "mark") => t === "light" ? H(e, n) : e, Si = (e) => {
2882
- e && (e.color = H(e.color, "text"));
2883
- };
2884
- function Ci(e) {
2885
- e.theme = "light";
2886
- for (let t of e.nodes) t.color = H(t.color), t.labelColor = H(t.labelColor, "text");
2887
- for (let t of e.edges) {
2888
- if (t.mark && t.mark !== "none") t.color = V.dark[t.mark] === t.color ? V.light[t.mark] : H(t.color);
2889
- else {
2890
- t.alpha < 1 && (t.alpha = Math.min(1, t.alpha * di)), t.color = H(t.color);
2891
- let [e, n, r, i] = B(t.color);
2892
- i > 0 && i < 1 && (t.color = _i([
2893
- e,
2894
- n,
2895
- r
2896
- ], Math.min(1, i * di)));
2897
- }
2898
- t.glowColor &&= H(t.glowColor), t.label &&= {
2899
- ...t.label,
2900
- color: H(t.label.color, "text")
2901
- }, t.packet &&= {
2902
- ...t.packet,
2903
- color: H(t.packet.color),
2904
- glowColor: H(t.packet.glowColor)
2905
- };
2906
- }
2907
- let { decor: t } = e;
2908
- return t.grid &&= {
2909
- ...t.grid,
2910
- color: H(t.grid.color)
2911
- }, t.rings = t.rings.map((e) => ({
2912
- ...e,
2913
- color: H(e.color)
2914
- })), t.lanes = t.lanes.map((e) => {
2915
- let t = {
2916
- ...e,
2917
- fill: H(e.fill),
2918
- stroke: H(e.stroke)
2919
- };
2920
- for (let e of [
2921
- "title",
2922
- "note",
2923
- "arrow"
2924
- ]) t[e] && (t[e] = { ...t[e] }, Si(t[e]));
2925
- return t;
2926
- }), e;
2949
+ function Pi(e, t) {
2950
+ let n = t && t.verdict;
2951
+ if (!n || t.done) return;
2952
+ let r = n.mismatch ? Ai.mismatch : Ai[n.state];
2953
+ if (!r) return;
2954
+ let { node: i, edge: a } = t.current;
2955
+ if (i !== void 0) {
2956
+ let t = e.nodes.find((e) => e.id === i);
2957
+ t && (t.color = r, t.glow = Math.max(t.glow || 0, ji));
2958
+ } else a && e.edges.forEach((e) => {
2959
+ Ni(e, a) && (e.color = r, e.glowColor = r, e.glow = Math.max(e.glow || 0, ji), e.width = Math.max(e.width || 0, Mi), e.packet &&= n.state === "refused" && !n.mismatch ? {
2960
+ ...e.packet,
2961
+ color: r,
2962
+ glowColor: r,
2963
+ speed: 0,
2964
+ phase: .5
2965
+ } : {
2966
+ ...e.packet,
2967
+ glowColor: r
2968
+ });
2969
+ });
2927
2970
  }
2928
- var wi = 1.2, U = 96, Ti = 24, Ei = "glyph:", Di = "#ffffff", Oi = "#0b1220";
2929
- Object.freeze(Object.keys(P));
2930
- var ki = (e) => typeof e == "string" && Object.hasOwn(P, e), Ai = (e, t) => `${Ei}${e}|${t}`, ji = (e) => typeof e == "string" && e.startsWith(Ei);
2931
- function Mi(e) {
2971
+ var Fi = 1.2, Ii = 96, Li = 24, Ri = "glyph:", zi = "#ffffff", Bi = "#0b1220";
2972
+ Object.freeze(Object.keys(L));
2973
+ var Vi = (e) => typeof e == "string" && Object.hasOwn(L, e), Hi = (e, t) => `${Ri}${e}|${t}`, Ui = (e) => typeof e == "string" && e.startsWith(Ri);
2974
+ function Wi(e) {
2932
2975
  let t = e.slice(6), n = t.indexOf("|");
2933
2976
  return {
2934
2977
  type: t.slice(0, n),
2935
2978
  ink: t.slice(n + 1)
2936
2979
  };
2937
2980
  }
2938
- var Ni = ([e, t, n]) => {
2981
+ var Gi = ([e, t, n]) => {
2939
2982
  let r = (e) => {
2940
2983
  let t = e / 255;
2941
2984
  return t <= .03928 ? t / 12.92 : ((t + .055) / 1.055) ** 2.4;
2942
2985
  };
2943
2986
  return .2126 * r(e) + .7152 * r(t) + .0722 * r(n);
2944
- }, Pi = (e, t) => {
2987
+ }, Ki = (e, t) => {
2945
2988
  let [n, r] = e > t ? [e, t] : [t, e];
2946
2989
  return (n + .05) / (r + .05);
2947
2990
  };
2948
- function Fi(e, t = ci) {
2949
- let n = B(e);
2950
- n[3] < 1 && (n = Yr(n, Yr(B(t), [
2991
+ function qi(e, t = wn) {
2992
+ let n = N(e);
2993
+ n[3] < 1 && (n = fn(n, fn(N(t), [
2951
2994
  0,
2952
2995
  0,
2953
2996
  0,
2954
2997
  1
2955
2998
  ])));
2956
- let r = Ni(n);
2957
- return Pi(1, r) >= Pi(Ni(B("#0b1220")), r) ? Di : Oi;
2999
+ let r = Gi(n);
3000
+ return Ki(1, r) >= Ki(Gi(N("#0b1220")), r) ? zi : Bi;
2958
3001
  }
2959
- var Ii = (e, t) => e && e.ground || (t === "light" ? "#f4f6fa" : "#090d16"), Li = (e, t, n = "dark") => t && t.values && t.values["--corn-map-glyph"] || Fi(e.color, Ii(t, n)), Ri = (e, t) => !!e.glyph && !e.icon && !e.letters && e.r * 2 * t >= 14, zi = {
3002
+ var Ji = (e, t) => e && e.ground || (t === "light" ? "#f4f6fa" : "#090d16"), Yi = (e, t, n = "dark") => t && t.values && t.values["--corn-map-glyph"] || qi(e.color, Ji(t, n)), Xi = (e, t) => !!e.glyph && !e.icon && !e.letters && e.r * 2 * t >= 14, Zi = {
2960
3003
  root: (e) => {
2961
- Bi(e, 12, 12, 8), G(e, 12, 12, 3.2);
3004
+ Qi(e, 12, 12, 8), G(e, 12, 12, 3.2);
2962
3005
  },
2963
3006
  app: (e) => {
2964
3007
  e.beginPath(), e.rect(3.5, 5, 17, 14), e.stroke(), W(e, 3.5, 9.5, 20.5, 9.5);
@@ -2970,7 +3013,7 @@ var Ii = (e, t) => e && e.ground || (t === "light" ? "#f4f6fa" : "#090d16"), Li
2970
3013
  e.beginPath(), e.rect(4, 7, 16, 13), e.stroke(), W(e, 4, 12, 20, 12), W(e, 12, 7, 12, 12);
2971
3014
  },
2972
3015
  core: (e) => {
2973
- Bi(e, 12, 12, 8.2), G(e, 12, 12, 4);
3016
+ Qi(e, 12, 12, 8.2), G(e, 12, 12, 4);
2974
3017
  },
2975
3018
  token: (e) => {
2976
3019
  for (let [t, n] of [
@@ -3033,76 +3076,35 @@ var Ii = (e, t) => e && e.ground || (t === "light" ? "#f4f6fa" : "#090d16"), Li
3033
3076
  function W(e, t, n, r, i) {
3034
3077
  e.beginPath(), e.moveTo(t, n), e.lineTo(r, i), e.stroke();
3035
3078
  }
3036
- function Bi(e, t, n, r) {
3079
+ function Qi(e, t, n, r) {
3037
3080
  e.beginPath(), e.arc(t, n, r, 0, Math.PI * 2), e.stroke();
3038
3081
  }
3039
3082
  function G(e, t, n, r) {
3040
3083
  e.beginPath(), e.arc(t, n, r, 0, Math.PI * 2), e.fill();
3041
3084
  }
3042
- function Vi(e, t, n, r) {
3043
- let i = zi[t];
3085
+ function $i(e, t, n, r) {
3086
+ let i = Zi[t];
3044
3087
  if (!i) return;
3045
- let a = n / Ti;
3088
+ let a = n / Li;
3046
3089
  e.save(), e.scale(a, a), e.lineWidth = 2.4, e.lineCap = "round", e.lineJoin = "round", e.strokeStyle = r, e.fillStyle = r, i(e), e.restore();
3047
3090
  }
3048
- var Hi = /* @__PURE__ */ new Map();
3049
- function Ui(e, t) {
3050
- if (!ki(e) || typeof t != "string") return null;
3051
- let n = Ai(e, t);
3052
- if (Hi.has(n)) return Hi.get(n);
3053
- if (Hi.size >= 64) return null;
3091
+ var ea = /* @__PURE__ */ new Map();
3092
+ function ta(e, t) {
3093
+ if (!Vi(e) || typeof t != "string") return null;
3094
+ let n = Hi(e, t);
3095
+ if (ea.has(n)) return ea.get(n);
3096
+ if (ea.size >= 64) return null;
3054
3097
  let r = null;
3055
3098
  try {
3056
- let n = typeof OffscreenCanvas < "u" ? new OffscreenCanvas(U, U) : typeof document < "u" ? Object.assign(document.createElement("canvas"), {
3057
- width: U,
3058
- height: U
3099
+ let n = typeof OffscreenCanvas < "u" ? new OffscreenCanvas(Ii, Ii) : typeof document < "u" ? Object.assign(document.createElement("canvas"), {
3100
+ width: Ii,
3101
+ height: Ii
3059
3102
  }) : null, i = n && n.getContext && n.getContext("2d");
3060
- i && i.stroke && (Vi(i, e, U, t), r = n);
3103
+ i && i.stroke && ($i(i, e, Ii, t), r = n);
3061
3104
  } catch {
3062
3105
  r = null;
3063
3106
  }
3064
- return Hi.set(n, r), r;
3065
- }
3066
- // ../explorer/review-model.js
3067
- var Wi = 6e4, Gi = 60 * Wi, Ki = 24 * Gi, qi = (e, t) => `${e} ${t}${e === 1 ? "" : "s"}`;
3068
- function Ji(e, t) {
3069
- let n = typeof e == "string" ? Date.parse(e) : NaN;
3070
- if (!Number.isFinite(n) || !Number.isFinite(t)) return "";
3071
- let r = t - n;
3072
- return r < Wi ? "just now" : r < Gi ? `${qi(Math.floor(r / Wi), "minute")} ago` : r < Ki ? `${qi(Math.floor(r / Gi), "hour")} ago` : `${qi(Math.floor(r / Ki), "day")} ago`;
3073
- }
3074
- var Yi = {
3075
- approved: "Approved",
3076
- notes: "Sent back"
3077
- };
3078
- function Xi(e, t) {
3079
- let { verdict: n, when: r } = Zi(e, t);
3080
- return r ? `${n} ${r}` : n;
3081
- }
3082
- function Zi(e, t) {
3083
- return !e || !Yi[e.verdict] ? {
3084
- verdict: "",
3085
- when: ""
3086
- } : {
3087
- verdict: Yi[e.verdict],
3088
- when: Ji(e.at, t) || ""
3089
- };
3090
- }
3091
- function Qi(e) {
3092
- return typeof e == "string" && e.trim() ? null : "Say what should change before you send it back.";
3093
- }
3094
- function $i(e, t, n) {
3095
- return {
3096
- verdict: e,
3097
- note: typeof t == "string" ? t.trim() : "",
3098
- edits: structuredClone(Array.isArray(n) ? n : [])
3099
- };
3100
- }
3101
- var ea = (e) => typeof e == "string" && /^pull\/[1-9]\d{0,8}$/.test(e);
3102
- function ta(e, t) {
3103
- if (!t) return "";
3104
- let n = qi(t, "edit");
3105
- return e === "approved" ? `Your ${n} ${t === 1 ? "is" : "are"} in the review comment on the PR. The drafting agent will fold ${t === 1 ? "it" : "them"} into the proposal.` : `Sent with your ${n}. The drafting agent will fold ${t === 1 ? "it" : "them"} into the next draft.`;
3107
+ return ea.set(n, r), r;
3106
3108
  }
3107
3109
  Object.freeze([
3108
3110
  "pulls",
@@ -3222,7 +3224,7 @@ function ga(e) {
3222
3224
  if (!va(e)) return !1;
3223
3225
  let t = /^rgba?\(/i.test(e.trim()) ? e.slice(e.indexOf("(") + 1, e.lastIndexOf(")")).split(",").map(Number) : null;
3224
3226
  if (t && (t.slice(0, 3).some((e) => !(e >= 0 && e <= 255)) || t.length > 3 && !(t[3] > 0 && t[3] <= 1))) return !1;
3225
- let [n, r, i, a] = B(e);
3227
+ let [n, r, i, a] = N(e);
3226
3228
  return [
3227
3229
  n,
3228
3230
  r,
@@ -3240,7 +3242,7 @@ var ba = (e, t, n, r) => `rgba(${e}, ${t}, ${n}, ${+r.toFixed(3)})`;
3240
3242
  function xa(e) {
3241
3243
  if (typeof e != "string" || e.length > 200) return null;
3242
3244
  let t = e.trim();
3243
- return !t || /^(?:auto|currentcolor)$/i.test(t) ? null : ma(t) || (pa() === null && qr(t) ? t : null);
3245
+ return !t || /^(?:auto|currentcolor)$/i.test(t) ? null : ma(t) || (pa() === null && un(t) ? t : null);
3244
3246
  }
3245
3247
  // ../explorer/scene.js
3246
3248
  var Sa = [
@@ -3326,32 +3328,32 @@ var Sa = [
3326
3328
  cycleMs: 2600
3327
3329
  }, Y = {
3328
3330
  added: {
3329
- ...oi.added,
3330
- color: V.dark.added,
3331
+ ...Sn.added,
3332
+ color: F.dark.added,
3331
3333
  ringR: 9,
3332
3334
  ringWidth: 2,
3333
3335
  edgeWidth: 2.2,
3334
3336
  alpha: 1
3335
3337
  },
3336
3338
  changed: {
3337
- ...oi.changed,
3338
- color: V.dark.changed,
3339
+ ...Sn.changed,
3340
+ color: F.dark.changed,
3339
3341
  ringR: 9,
3340
3342
  ringWidth: 2.5,
3341
3343
  edgeWidth: 2.4,
3342
3344
  alpha: 1
3343
3345
  },
3344
3346
  removed: {
3345
- ...oi.removed,
3346
- color: V.dark.removed,
3347
+ ...Sn.removed,
3348
+ color: F.dark.removed,
3347
3349
  ringR: 9,
3348
3350
  ringWidth: 2,
3349
3351
  edgeWidth: 2,
3350
- alpha: ti
3352
+ alpha: _n
3351
3353
  },
3352
3354
  edit: {
3353
- ...oi.edit,
3354
- color: V.dark.edit,
3355
+ ...Sn.edit,
3356
+ color: F.dark.edit,
3355
3357
  ringR: 9,
3356
3358
  ringWidth: 3,
3357
3359
  edgeWidth: 2.4,
@@ -3367,7 +3369,7 @@ var za = (e) => {
3367
3369
  "fill",
3368
3370
  "ring",
3369
3371
  "color"
3370
- ]) typeof t[e] == "string" && (t[e] = H(t[e]));
3372
+ ]) typeof t[e] == "string" && (t[e] = I(t[e]));
3371
3373
  return t;
3372
3374
  }, Ba = Object.freeze({
3373
3375
  halo: Fa,
@@ -3378,7 +3380,7 @@ var za = (e) => {
3378
3380
  halo: Object.fromEntries(Object.entries(Fa).map(([e, t]) => [e, za(t)])),
3379
3381
  mark: Object.fromEntries(Object.entries(Y).map(([e, t]) => [e, {
3380
3382
  ...t,
3381
- color: V.light[e]
3383
+ color: F.light[e]
3382
3384
  }])),
3383
3385
  core: Ea,
3384
3386
  labelOutline: {
@@ -3397,13 +3399,13 @@ var za = (e) => {
3397
3399
  gap: 4
3398
3400
  }, Ua = .28;
3399
3401
  function X(e, t, { viewer: n = !1 } = {}) {
3400
- return e.proposal && !It(e.proposalView || "diff", t) ? !1 : e.view === "dataflow" ? !!e.flow && e.flow.ids.has(t.id) : e.view === "house" ? Sn(e, t) : t.type === "root" || Wa(e, t, n ? e.activeLayers : z(e)) || wr(e, t);
3402
+ return e.proposal && !Ut(e.proposalView || "diff", t) ? !1 : e.view === "dataflow" ? !!e.flow && e.flow.ids.has(t.id) : e.view === "house" ? yi(e, t) : t.type === "root" || Wa(e, t, n ? e.activeLayers : V(e)) || Ur(e, t);
3401
3403
  }
3402
- function Wa(e, t, n = z(e)) {
3403
- let r = br(e, t);
3404
- return r ? n[r] !== !1 : t.type === "core" ? (n.pkg || n.atom) && n.core !== !1 : t.type === "store" ? n.flow !== !1 && n.store !== !1 : t.type === "rom" ? n.rom !== !1 && n.flow !== !1 : t.type === "floor" || t.type === "room" ? n.house !== !1 : t.type === "external" ? n[Mt(t)] !== !1 : n[t.type] !== !1;
3404
+ function Wa(e, t, n = V(e)) {
3405
+ let r = zr(e, t);
3406
+ return r ? n[r] !== !1 : t.type === "core" ? (n.pkg || n.atom) && n.core !== !1 : t.type === "store" ? n.flow !== !1 && n.store !== !1 : t.type === "rom" ? n.rom !== !1 && n.flow !== !1 : t.type === "floor" || t.type === "room" ? n.house !== !1 : t.type === "external" ? n[oi(t)] !== !1 : n[t.type] !== !1;
3405
3407
  }
3406
- var Ga = (e) => e.view === "dataflow" && e.flow ? e.flow.edges : e.view === "house" ? wn(e) : e.edges;
3408
+ var Ga = (e) => e.view === "dataflow" && e.flow ? e.flow.edges : e.view === "house" ? xi(e) : e.edges;
3407
3409
  function Ka(e, t, n) {
3408
3410
  return Ae(e, t, n);
3409
3411
  }
@@ -3412,7 +3414,7 @@ function qa(e) {
3412
3414
  t.linkNodes && e.edges.forEach((e) => {
3413
3415
  n.has(e.from) && n.has(e.to) && r.add(Z(e));
3414
3416
  });
3415
- let i = yn(t, e.nodes, e.edges);
3417
+ let i = gi(t, e.nodes, e.edges);
3416
3418
  i && (i.down.forEach((e) => n.add(e)), i.hits.forEach((e, t) => n.add(t)), i.edges.forEach((e, t) => r.add(t)));
3417
3419
  let { node: a, edge: o } = t.current, s = a === void 0 ? o ? o.kind === "writes" ? o.from : o.to : void 0 : a;
3418
3420
  return {
@@ -3467,7 +3469,7 @@ function Za(e, t) {
3467
3469
  }
3468
3470
  var Qa = (e) => e.kind || (e.dashed ? "usage" : "ownership"), $a = (e) => `${e.from}->${e.to}${e.kind ? `|${e.kind}` : e.dashed ? "|dashed" : ""}${e.kind === "flow" && e.flow ? `|${e.flow}` : ""}`, Z = (e) => `${e.from}->${e.to}`;
3469
3471
  function eo(e, t, n, r, i, a) {
3470
- let o = e.kind === "reads" || e.kind === "writes", s = Pt(e), c = !r || r.connectedEdgeKeys.has(Z(e)), l = e.status !== "live", { a: u, b: d, c: f } = Ja(e, t, n), p = !!r && c, m = Qa(e), h = null;
3472
+ let o = e.kind === "reads" || e.kind === "writes", s = ri(e), c = !r || r.connectedEdgeKeys.has(Z(e)), l = e.status !== "live", { a: u, b: d, c: f } = Ja(e, t, n), p = !!r && c, m = Qa(e), h = null;
3471
3473
  if (r && c) {
3472
3474
  let t = Ya(u, f, d, .5);
3473
3475
  h = {
@@ -3505,7 +3507,7 @@ function eo(e, t, n, r, i, a) {
3505
3507
  width: p ? 2.4 : i && !o ? 2 : 1.6,
3506
3508
  alpha: r ? c ? 1 : .04 : i ? o ? .2 : .65 : o ? .12 : .45,
3507
3509
  dash: l ? Na : null,
3508
- ticks: jt(e),
3510
+ ticks: ai(e),
3509
3511
  curve: {
3510
3512
  cx: f.x,
3511
3513
  cy: f.y
@@ -3566,22 +3568,22 @@ function io(e, t, n, r = !1, i = !1) {
3566
3568
  return;
3567
3569
  }
3568
3570
  let a = Y[t];
3569
- e.color = a.color, e.dash = r ? Y.removed.edgeDash : a.edgeDash, e.width = Math.max(e.width, a.edgeWidth), e.alpha >= .1 && (e.alpha = Math.max(e.alpha, ni) * (r ? Y.removed.alpha : a.alpha)), e.glow && (e.glowColor = a.color);
3571
+ e.color = a.color, e.dash = r ? Y.removed.edgeDash : a.edgeDash, e.width = Math.max(e.width, a.edgeWidth), e.alpha >= .1 && (e.alpha = Math.max(e.alpha, vn) * (r ? Y.removed.alpha : a.alpha)), e.glow && (e.glowColor = a.color);
3570
3572
  }
3571
3573
  function ao(e, t, n) {
3572
- let { nodes: r } = e, i = z(e), a = Ir(e), o = new Map(r.map((e) => [e.id, e])), s = e.view === "dataflow", c = [], l = (e) => !!t && t.connectedEdgeKeys.has(Z(e)), u = (e, r, i) => c.push(eo(e, r, i, t, s, n)), d = ro(e), f = (n) => {
3574
+ let { nodes: r } = e, i = V(e), a = ti(e), o = new Map(r.map((e) => [e.id, e])), s = e.view === "dataflow", c = [], l = (e) => !!t && t.connectedEdgeKeys.has(Z(e)), u = (e, r, i) => c.push(eo(e, r, i, t, s, n)), d = ro(e), f = (n) => {
3573
3575
  let r = o.get(n.from), a = o.get(n.to);
3574
3576
  if (r && a && X(e, r) && X(e, a)) {
3575
3577
  if (s) return u(n, r, a);
3576
3578
  if (e.view === "house") {
3577
- let e = Tn(n, r, a);
3579
+ let e = Si(n, r, a);
3578
3580
  e === "flow" ? u(n, r, a) : e === "link" && c.push(to(n, r, a, t));
3579
3581
  } else n.kind === "flow" ? i.flow !== !1 && u(n, r, a) : n.kind === "reads" || n.kind === "writes" ? i.table !== !1 && u(n, r, a) : n.kind === "runs-on" ? (i.stack !== !1 || a.type === "machine") && u(n, r, a) : n.kind === "calls" || n.kind === "triggers" || n.kind === "delivers" ? (r.type !== "page" || n.kind !== "calls" || l(n)) && u(n, r, a) : n.kind === "uses" || n.kind === "extends" ? l(n) && u(n, r, a) : c.push(to(n, r, a, t));
3580
3582
  }
3581
3583
  };
3582
3584
  return Ga(e).forEach((n) => {
3583
- if (d && !Lt(d, n)) return;
3584
- let r = d === "before" ? zt(n) : n, i = d ? Rt(d, n) : "none", l = c.length;
3585
+ if (d && !Wt(d, n)) return;
3586
+ let r = d === "before" ? Kt(n) : n, i = d ? Gt(d, n) : "none", l = c.length;
3585
3587
  if (i === "none") f(r);
3586
3588
  else {
3587
3589
  let n = o.get(r.from), i = o.get(r.to);
@@ -3591,25 +3593,25 @@ function ao(e, t, n) {
3591
3593
  for (let e = l; e < c.length; e++) io(c[e], i, d, i === "edit" && n.editOp === "removed", a);
3592
3594
  }), c;
3593
3595
  }
3594
- var oo = (e) => e.type === "floor" || e.type === "room" ? "house" : e.type === "external" ? Mt(e) : e.type, so = (e) => xa(e.color) ?? (P[e.type] || P.external).color;
3596
+ var oo = (e) => e.type === "floor" || e.type === "room" ? "house" : e.type === "external" ? oi(e) : e.type, so = (e) => xa(e.color) ?? (L[e.type] || L.external).color;
3595
3597
  function co(e, t) {
3596
- let { nodes: n, selectedNode: r, searchQuery: i } = e, a = i ? da(n, i) : null, o = !!a && n.some((t) => a.has(t.id) && X(e, t)), s = [], c = ro(e), l = Ir(e), u = c === "diff" || c && l ? Bt(n, Ga(e)) : null;
3598
+ let { nodes: n, selectedNode: r, searchQuery: i } = e, a = i ? da(n, i) : null, o = !!a && n.some((t) => a.has(t.id) && X(e, t)), s = [], c = ro(e), l = ti(e), u = c === "diff" || c && l ? qt(n, Ga(e)) : null;
3597
3599
  return n.forEach((n) => {
3598
3600
  if (!X(e, n)) return;
3599
- let i = c === "before" ? zt(n) : n, d = !!a && a.has(n.id), f = d && e.searchCurrent === n.id, p = !!r && r.id === n.id, m = !t || t.connectedNodeIds.has(n.id), h = t && t.childIds ? t.childIds.has(n.id) : !1, g = c ? Rt(c, n) : "none", _ = Y[g], v = g === "edit" && n.editOp === "removed", y = t && !m && !(o && d) ? Da : 1;
3601
+ let i = c === "before" ? Kt(n) : n, d = !!a && a.has(n.id), f = d && e.searchCurrent === n.id, p = !!r && r.id === n.id, m = !t || t.connectedNodeIds.has(n.id), h = t && t.childIds ? t.childIds.has(n.id) : !1, g = c ? Gt(c, n) : "none", _ = Y[g], v = g === "edit" && n.editOp === "removed", y = t && !m && !(o && d) ? Da : 1;
3600
3602
  o && !d && !p && !(t && m) && (y = Da);
3601
3603
  let b = l && !!u && !u.touched.has(n.id);
3602
- u && !u.touched.has(n.id) && (y = Math.min(y, b ? ii : Ua)), _ && (y *= v ? Y.removed.alpha : _.alpha);
3603
- let x = i.type === "root" || i.type === "app", S = Er(e, i), C = br(e, i);
3604
+ u && !u.touched.has(n.id) && (y = Math.min(y, b ? bn : Ua)), _ && (y *= v ? Y.removed.alpha : _.alpha);
3605
+ let x = i.type === "root" || i.type === "app", S = Gr(e, i), C = zr(e, i);
3604
3606
  s.push({
3605
3607
  id: n.id,
3606
3608
  type: i.type,
3607
3609
  group: oo(i),
3608
3610
  ...typeof i.kind == "string" && i.kind ? { kind: i.kind } : {},
3609
3611
  ...S ? { letters: S } : {},
3610
- shape: Jt(i.type),
3611
- hitR: i.r * Ma[Jt(i.type)],
3612
- ...ki(i.type) ? { glyph: i.type } : {},
3612
+ shape: Hn(i.type),
3613
+ hitR: i.r * Ma[Hn(i.type)],
3614
+ ...Vi(i.type) ? { glyph: i.type } : {},
3613
3615
  ...C ? { layer: C } : {},
3614
3616
  x: n.x,
3615
3617
  y: n.y,
@@ -3628,7 +3630,7 @@ function co(e, t) {
3628
3630
  label: i.label,
3629
3631
  labelSize: x && !b ? 12 : 11,
3630
3632
  labelBold: x && !b,
3631
- labelAlpha: b && (!t || m) ? ai[e.theme === "light" ? "light" : "dark"] : u && !u.touched.has(n.id) && (!t || m) ? Math.max(y, ri) : y,
3633
+ labelAlpha: b && (!t || m) ? xn[e.theme === "light" ? "light" : "dark"] : u && !u.touched.has(n.id) && (!t || m) ? Math.max(y, yn) : y,
3632
3634
  labelColor: m ? "#f8fafc" : "rgba(255, 255, 255, 0.3)",
3633
3635
  labelKeep: Sa.includes(i.type) && !b || p || d || g !== "none" || !!(t && m),
3634
3636
  labelStrike: !!_ && (_.strike || v),
@@ -3755,16 +3757,16 @@ function vo(e, t = {}) {
3755
3757
  theme: "dark",
3756
3758
  version: e.sceneVersion || 0
3757
3759
  };
3758
- e.view === "house" && Dn(o, e), e.scenario && _o(o, e.scenario, t), o.greying = o.nodes.some((e) => e.greyed) || o.edges.some((e) => e.greyed);
3760
+ e.view === "house" && wi(o, e), e.scenario && _o(o, e.scenario, t), o.greying = o.nodes.some((e) => e.greyed) || o.edges.some((e) => e.greyed);
3759
3761
  let s = {
3760
3762
  nodes: o.nodes.map((e) => e.color),
3761
3763
  edges: o.edges.map((e) => e.color)
3762
3764
  };
3763
- return e.scenario && bn(o, yn(e.scenario, e.nodes, e.edges)), e.scenario && Ln(o, e.scenario), e.forgeLit && ia(o, e.forgeLit), o.nodes.forEach((e, t) => {
3765
+ return e.scenario && _i(o, gi(e.scenario, e.nodes, e.edges)), e.scenario && Pi(o, e.scenario), e.forgeLit && ia(o, e.forgeLit), o.nodes.forEach((e, t) => {
3764
3766
  s.nodes.length === o.nodes.length && e.color !== s.nodes[t] && o.painted.nodes.add(e.id);
3765
3767
  }), o.edges.forEach((e, t) => {
3766
3768
  s.edges.length === o.edges.length && e.color !== s.edges[t] && o.painted.edges.add(e.key);
3767
- }), e.theme === "light" && Ci(o), o;
3769
+ }), e.theme === "light" && zn(o), o;
3768
3770
  }
3769
3771
  function yo(e = vo) {
3770
3772
  let t = null, n, r = {
@@ -3776,7 +3778,7 @@ function yo(e = vo) {
3776
3778
  return r;
3777
3779
  }
3778
3780
  // ../explorer/engine/map-style.js
3779
- var bo = Object.freeze(Object.keys(P)), xo = Object.freeze([
3781
+ var bo = Object.freeze(Object.keys(L)), xo = Object.freeze([
3780
3782
  "app",
3781
3783
  "pkg",
3782
3784
  "page",
@@ -3816,7 +3818,7 @@ var bo = Object.freeze(Object.keys(P)), xo = Object.freeze([
3816
3818
  "selected",
3817
3819
  "match",
3818
3820
  "lit"
3819
- ]), To = "--corn-map-stroke", Eo = "--corn-map-label", Do = "--corn-map-label-halo", Oo = "--corn-map-font", ko = "--corn-map-edge-width", Ao = "--corn-map-glow", jo = "--corn-map-label-min", Mo = "--corn-map-grey", No = "--corn-map-grey-alpha", Po = "--corn-map-glyph", Fo = "--corn-ground", Io = 1.6, Lo = 1.5, Ro = 1.2, zo = (e) => `--corn-map-node-${e}`, Bo = (e) => `--corn-map-group-${e}`, Vo = (e, t) => Qn(e, t), Ho = (e) => `--corn-map-edge-${e}`, Q = (e) => `--corn-map-${e}`, Uo = Object.freeze([
3821
+ ]), To = "--corn-map-stroke", Eo = "--corn-map-label", Do = "--corn-map-label-halo", Oo = "--corn-map-font", ko = "--corn-map-edge-width", Ao = "--corn-map-glow", jo = "--corn-map-label-min", Mo = "--corn-map-grey", No = "--corn-map-grey-alpha", Po = "--corn-map-glyph", Fo = "--corn-ground", Io = 1.6, Lo = 1.5, Ro = 1.2, zo = (e) => `--corn-map-node-${e}`, Bo = (e) => `--corn-map-group-${e}`, Vo = (e, t) => _r(e, t), Ho = (e) => `--corn-map-edge-${e}`, Q = (e) => `--corn-map-${e}`, Uo = Object.freeze([
3820
3822
  ...bo.map(zo),
3821
3823
  ...xo.map(Bo),
3822
3824
  To,
@@ -3829,7 +3831,7 @@ var bo = Object.freeze(Object.keys(P)), xo = Object.freeze([
3829
3831
  ...wo.map(Q)
3830
3832
  ]);
3831
3833
  function $(e, t) {
3832
- let [n, r, i, a] = B(e), o = B(t)[3];
3834
+ let [n, r, i, a] = N(e), o = N(t)[3];
3833
3835
  return o >= 1 ? e : ba(n, r, i, a * o);
3834
3836
  }
3835
3837
  var Wo = /^(?:serif|sans-serif|monospace|cursive|fantasy|system-ui|ui-serif|ui-sans-serif|ui-monospace|ui-rounded|emoji|math|fangsong)$/i, Go = /^(?:-apple-system|BlinkMacSystemFont)$/;
@@ -3895,7 +3897,7 @@ function Qo(e, t = "") {
3895
3897
  function $o(e, { load: t = Qo, onChange: n = () => {}, warn: r = (e) => console.warn(e) } = {}) {
3896
3898
  let i = /* @__PURE__ */ new Map(), a = 0;
3897
3899
  for (let [o, s] of Object.entries(e || {})) {
3898
- if (!tr(o) || typeof s != "string" || !s.startsWith("/cornfield/theme/assets/") || s.includes("..")) continue;
3900
+ if (!br(o) || typeof s != "string" || !s.startsWith("/cornfield/theme/assets/") || s.includes("..")) continue;
3899
3901
  let e = {
3900
3902
  status: "loading",
3901
3903
  image: null
@@ -3968,7 +3970,7 @@ function rs(e) {
3968
3970
  return o.add(e), () => o.delete(e);
3969
3971
  },
3970
3972
  setSubjects({ kinds: e = [], layers: t = [] } = {}) {
3971
- let n = [...new Set([...e.map(([e, t]) => Qn(e, t)), ...t.map((e) => $n(e))].filter(Boolean))].sort().slice(0, ns);
3973
+ let n = [...new Set([...e.map(([e, t]) => _r(e, t)), ...t.map((e) => vr(e))].filter(Boolean))].sort().slice(0, ns);
3972
3974
  return n.length === a.length && n.every((e, t) => e === a[t]) ? !1 : (a = n, d.refresh());
3973
3975
  },
3974
3976
  refresh(n = e.tokenReader()) {
@@ -4040,7 +4042,7 @@ function rs(e) {
4040
4042
  var is = (e) => e.slot("map-style", rs), as = (e, t) => {
4041
4043
  for (let n of t) if (e[n]) return e[n];
4042
4044
  return null;
4043
- }, os = er, ss = (e, t) => as(e, os(t));
4045
+ }, os = yr, ss = (e, t) => as(e, os(t));
4044
4046
  function cs(e, t) {
4045
4047
  let n = t.edgeWidth == null ? 1 : t.edgeWidth / Io, r = t.glow == null ? 1 : t.glow;
4046
4048
  if (n === 1 && r === 1) return e;
@@ -4077,15 +4079,15 @@ function ls(e, t, n) {
4077
4079
  }), cs(a, t);
4078
4080
  }
4079
4081
  function us(e) {
4080
- let [t, n, r, i] = B(e), a = Math.round(.2126 * t + .7152 * n + .0722 * r);
4082
+ let [t, n, r, i] = N(e), a = Math.round(.2126 * t + .7152 * n + .0722 * r);
4081
4083
  return i >= 1 ? `rgb(${a}, ${a}, ${a})` : ba(a, a, a, i);
4082
4084
  }
4083
4085
  function ds(e, t) {
4084
- let { values: n } = t, r = n[Mo], i = t.greyAlpha == null ? 1 : t.greyAlpha / ii, a = (e) => r ? $(r, e) : us(e), o = n[Eo], s = n[To], c = e.painted || {
4086
+ let { values: n } = t, r = n[Mo], i = t.greyAlpha == null ? 1 : t.greyAlpha / bn, a = (e) => r ? $(r, e) : us(e), o = n[Eo], s = n[To], c = e.painted || {
4085
4087
  nodes: /* @__PURE__ */ new Set(),
4086
4088
  edges: /* @__PURE__ */ new Set()
4087
4089
  }, l = e.nodes.map((e) => {
4088
- let r = !c.nodes.has(e.id) && ss(n, e), l = t.icons && nr(e.type, e.kind, e.layer).find((e) => t.icons.get(e)) || null, u = t.glow != null && t.glow !== 1 && e.glow > 0, d = !!e.greyed && !c.nodes.has(e.id);
4090
+ let r = !c.nodes.has(e.id) && ss(n, e), l = t.icons && xr(e.type, e.kind, e.layer).find((e) => t.icons.get(e)) || null, u = t.glow != null && t.glow !== 1 && e.glow > 0, d = !!e.greyed && !c.nodes.has(e.id);
4089
4091
  if (!r && !o && !s && !l && !u && !d) return e;
4090
4092
  let f = { ...e };
4091
4093
  return u && (f.glow = e.glow * t.glow), r && (f.color = r), o && (f.labelColor = $(o, e.labelColor)), s && t.strokeWidth > 0 && (f.stroke = {
@@ -4166,5 +4168,5 @@ function hs(e, t) {
4166
4168
  }), o;
4167
4169
  }
4168
4170
  // \0corn-default-tokens
4169
- var gs = "/* cornfield's default design tokens, generated from explorer/tokens.css by components/scripts/tokens.mjs: do not edit.\n Every selector is :where(...), at zero specificity: any ordinary rule of yours (on :root, or on one element) overrides it. */\n\n:where(:root) {\n --corn-ground: #090d16;\n --corn-ground-image: radial-gradient(circle at 14% 18%, rgba(66, 153, 225, 0.2) 0%, transparent 45%),\n radial-gradient(circle at 86% 82%, rgba(229, 62, 62, 0.16) 0%, transparent 45%),\n radial-gradient(circle at 50% 50%, rgba(66, 153, 225, 0.10) 0%, transparent 60%);\n --corn-surface-1: rgba(26, 34, 52, 0.72);\n --corn-surface-2: rgba(30, 41, 59, 0.8);\n --corn-surface-3: rgba(51, 65, 85, 0.8);\n --corn-line: rgba(255, 255, 255, 0.12);\n --corn-line-soft: rgba(255, 255, 255, 0.07);\n --corn-shadow: 0 8px 32px 0 rgba(0, 0, 0, 0.45);\n --corn-shadow-sm: 0 2px 6px rgba(0, 0, 0, 0.4);\n --corn-shadow-lg: 0 25px 50px -12px rgba(0, 0, 0, 0.5);\n --corn-shadow-color: rgba(0, 0, 0, 0.5);\n --corn-glow: 8px;\n --corn-scrim: rgba(0, 0, 0, 0.6);\n --corn-shadow-sheet: 0 -8px 24px color-mix(in srgb, var(--corn-shadow-color) 70%, transparent);\n --corn-blur: 16px;\n --corn-text: #f8fafc;\n --corn-text-2: #cbd5e1;\n --corn-text-3: #9aa9bc;\n --corn-text-on-accent: #fff;\n --corn-mockup-ground: #fff;\n --corn-accent: #4f46e5;\n --corn-accent-hover: #6265f1;\n --corn-accent-text: #98a1fa;\n --corn-accent-soft: color-mix(in srgb, var(--corn-accent-hover) 20%, transparent);\n --corn-focus: #818cf8;\n --corn-brand-gradient: linear-gradient(135deg, #4299e1 0%, #818cf8 50%, #e53e3e 100%);\n --corn-ok: #34d399;\n --corn-warn: #fcd34d;\n --corn-bad: #fca5a5;\n --corn-info: #7dd3fc;\n --corn-ok-soft: color-mix(in srgb, var(--corn-ok) 15%, transparent);\n --corn-run-requested: var(--corn-text-3);\n --corn-run-claimed: var(--corn-info);\n --corn-run-working: var(--corn-info);\n --corn-run-waiting: var(--corn-warn);\n --corn-run-waiting-ink: var(--corn-ground);\n --corn-run-done: var(--corn-ok);\n --corn-run-failed: var(--corn-bad);\n --corn-run-stopped: var(--corn-text-2);\n --corn-added: #2dd4bf;\n --corn-changed: #fbbf24;\n --corn-removed: #fa9292;\n --corn-edit: #b49cfb;\n --corn-added-text: color-mix(in srgb, var(--corn-added) 60%, var(--corn-text));\n --corn-edit-text: color-mix(in srgb, var(--corn-edit) 60%, var(--corn-text));\n --corn-hue-orange: #fb923c;\n --corn-hue-fuchsia: #e879f9;\n --corn-hue-pink: #f472b6;\n --corn-hue-lime: #a3e635;\n --corn-hue-orange-text: var(--corn-hue-orange);\n --corn-hue-orange-soft: color-mix(in srgb, var(--corn-hue-orange) 12%, transparent);\n --corn-font: system-ui, -apple-system, \"Segoe UI\", Roboto, \"Helvetica Neue\", Arial, sans-serif;\n --corn-font-display: var(--corn-font);\n --corn-mono: ui-monospace, SFMono-Regular, Menlo, Consolas, \"Liberation Mono\", monospace;\n --corn-font-num: var(--corn-font);\n --corn-text-2xs: 10px;\n --corn-text-xs: 11px;\n --corn-text-sm: 12px;\n --corn-text-md: 13px;\n --corn-text-base: 14px;\n --corn-text-lg: 15px;\n --corn-text-xl: 20px;\n --corn-radius-xs: 3px;\n --corn-radius-sm: 6px;\n --corn-radius: 10px;\n --corn-radius-lg: 14px;\n --corn-radius-pill: 999px;\n --corn-border: 1px;\n --corn-border-strong: 2px;\n --corn-focus-width: 2px;\n --corn-focus-offset: 2px;\n --corn-space: 4px;\n --corn-space-1: var(--corn-space);\n --corn-space-2: 6px;\n --corn-space-3: 8px;\n --corn-space-4: 12px;\n --corn-space-5: 16px;\n --corn-space-6: 24px;\n --corn-control-height: 32px;\n --corn-panel-pad: calc(var(--corn-space-5) + var(--corn-space-1));\n --corn-panel-head-height: calc(var(--corn-control-height) + var(--corn-space-3));\n --corn-house-line: color-mix(in srgb, var(--corn-hue-lime) 18%, transparent);\n --corn-house-room: color-mix(in srgb, var(--corn-hue-lime) 45%, transparent);\n --corn-glyph-mix: 100%;\n color-scheme: dark;\n --corn-map-stroke: auto;\n --corn-map-stroke-width: 1.5px;\n --corn-map-label: auto;\n --corn-map-label-halo: auto;\n --corn-map-collision: var(--corn-warn);\n --corn-map-font: auto;\n --corn-map-edge-width: auto;\n --corn-map-glow: auto;\n --corn-map-label-min: auto;\n --corn-map-glyph: auto;\n --corn-map-grey: auto;\n --corn-map-grey-alpha: auto;\n --corn-map-added: auto;\n --corn-map-changed: auto;\n --corn-map-removed: auto;\n --corn-map-edit: auto;\n --corn-map-selected: auto;\n --corn-map-match: auto;\n --corn-map-lit: auto;\n --corn-map-edge-ownership: auto;\n --corn-map-edge-usage: auto;\n --corn-map-edge-flow: auto;\n --corn-map-edge-reads: auto;\n --corn-map-edge-writes: auto;\n --corn-map-edge-calls: auto;\n --corn-map-edge-triggers: auto;\n --corn-map-edge-delivers: auto;\n --corn-map-edge-runs-on: auto;\n --corn-map-edge-uses: auto;\n --corn-map-edge-extends: auto;\n --corn-map-node-root: auto;\n --corn-map-node-app: auto;\n --corn-map-node-page: auto;\n --corn-map-node-pkg: auto;\n --corn-map-node-core: auto;\n --corn-map-node-token: auto;\n --corn-map-node-atom: auto;\n --corn-map-node-molecule: auto;\n --corn-map-node-tool: auto;\n --corn-map-node-store: auto;\n --corn-map-node-table: auto;\n --corn-map-node-rom: auto;\n --corn-map-node-service: auto;\n --corn-map-node-external: auto;\n --corn-map-node-stack: auto;\n --corn-map-node-machine: auto;\n --corn-map-node-container: auto;\n --corn-map-node-persona: auto;\n --corn-map-node-device: auto;\n --corn-map-node-floor: auto;\n --corn-map-node-room: auto;\n --corn-map-group-app: auto;\n --corn-map-group-pkg: auto;\n --corn-map-group-page: auto;\n --corn-map-group-atom: auto;\n --corn-map-group-molecule: auto;\n --corn-map-group-token: auto;\n --corn-map-group-tool: auto;\n --corn-map-group-table: auto;\n --corn-map-group-rom: auto;\n --corn-map-group-service: auto;\n --corn-map-group-cloud: auto;\n --corn-map-group-web: auto;\n --corn-map-group-stack: auto;\n --corn-map-group-machine: auto;\n --corn-map-group-container: auto;\n --corn-map-group-device: auto;\n --corn-map-group-house: auto;\n --corn-map-group-persona: auto;\n}\n\n@media (prefers-color-scheme: light) {\n :where(:root:not([data-theme=\"dark\"])) {\n --corn-ground: #f4f6fa;\n --corn-ground-image: radial-gradient(circle at 14% 18%, rgba(66, 153, 225, 0.06) 0%, transparent 45%),\n radial-gradient(circle at 86% 82%, rgba(229, 62, 62, 0.04) 0%, transparent 45%);\n --corn-surface-1: rgba(255, 255, 255, 0.8);\n --corn-surface-2: rgba(241, 245, 249, 0.92);\n --corn-surface-3: rgba(226, 232, 240, 0.95);\n --corn-line: rgba(15, 23, 42, 0.12);\n --corn-line-soft: rgba(15, 23, 42, 0.07);\n --corn-shadow: 0 8px 28px 0 rgba(15, 23, 42, 0.12);\n --corn-shadow-sm: 0 1px 3px rgba(15, 23, 42, 0.25);\n --corn-shadow-lg: 0 10px 30px -12px rgba(15, 23, 42, 0.18);\n --corn-shadow-color: rgba(15, 23, 42, 0.25);\n --corn-glow: 0px;\n --corn-scrim: rgba(15, 23, 42, 0.35);\n --corn-text: #0f172a;\n --corn-text-2: #334155;\n --corn-text-3: #475569;\n --corn-accent-text: #4f46e5;\n --corn-focus: #4f46e5;\n --corn-brand-gradient: linear-gradient(135deg, #2563eb 0%, #4f46e5 50%, #dc2626 100%);\n --corn-ok: #046f51;\n --corn-warn: #854d0e;\n --corn-bad: #b91c1c;\n --corn-info: #03679e;\n --corn-added: #197c6f;\n --corn-changed: #8f6703;\n --corn-removed: #e20b0b;\n --corn-edit: #6839f6;\n --corn-hue-orange: #c2410c;\n --corn-hue-fuchsia: #a21caf;\n --corn-hue-pink: #be185d;\n --corn-hue-lime: #4c7b0f;\n --corn-hue-orange-text: #9a3412;\n --corn-house-line: color-mix(in srgb, var(--corn-hue-lime) 30%, transparent);\n --corn-house-room: color-mix(in srgb, var(--corn-hue-lime) 55%, transparent);\n --corn-glyph-mix: 45%;\n color-scheme: light;\n }\n}\n\n:where(:root[data-theme=\"light\"]) {\n --corn-ground: #f4f6fa;\n --corn-ground-image: radial-gradient(circle at 14% 18%, rgba(66, 153, 225, 0.06) 0%, transparent 45%),\n radial-gradient(circle at 86% 82%, rgba(229, 62, 62, 0.04) 0%, transparent 45%);\n --corn-surface-1: rgba(255, 255, 255, 0.8);\n --corn-surface-2: rgba(241, 245, 249, 0.92);\n --corn-surface-3: rgba(226, 232, 240, 0.95);\n --corn-line: rgba(15, 23, 42, 0.12);\n --corn-line-soft: rgba(15, 23, 42, 0.07);\n --corn-shadow: 0 8px 28px 0 rgba(15, 23, 42, 0.12);\n --corn-shadow-sm: 0 1px 3px rgba(15, 23, 42, 0.25);\n --corn-shadow-lg: 0 10px 30px -12px rgba(15, 23, 42, 0.18);\n --corn-shadow-color: rgba(15, 23, 42, 0.25);\n --corn-glow: 0px;\n --corn-scrim: rgba(15, 23, 42, 0.35);\n --corn-text: #0f172a;\n --corn-text-2: #334155;\n --corn-text-3: #475569;\n --corn-accent-text: #4f46e5;\n --corn-focus: #4f46e5;\n --corn-brand-gradient: linear-gradient(135deg, #2563eb 0%, #4f46e5 50%, #dc2626 100%);\n --corn-ok: #046f51;\n --corn-warn: #854d0e;\n --corn-bad: #b91c1c;\n --corn-info: #03679e;\n --corn-added: #197c6f;\n --corn-changed: #8f6703;\n --corn-removed: #e20b0b;\n --corn-edit: #6839f6;\n --corn-hue-orange: #c2410c;\n --corn-hue-fuchsia: #a21caf;\n --corn-hue-pink: #be185d;\n --corn-hue-lime: #4c7b0f;\n --corn-hue-orange-text: #9a3412;\n --corn-house-line: color-mix(in srgb, var(--corn-hue-lime) 30%, transparent);\n --corn-house-room: color-mix(in srgb, var(--corn-hue-lime) 55%, transparent);\n --corn-glyph-mix: 45%;\n color-scheme: light;\n}\n\n@media (max-width: 767px) {\n :where(:root) {\n --corn-control-height: 44px;\n }\n}\n\n@media (max-width: 639px) {\n :where(:root) {\n --corn-panel-pad: var(--corn-space-5);\n }\n}\n\n:where(:root) {\n --hx-bg: var(--corn-ground);\n --hx-text: var(--corn-text);\n --hx-ink: var(--corn-text);\n --hx-text-1: var(--corn-text);\n --hx-text-2: var(--corn-text-2);\n --hx-slate-300: var(--corn-text-2);\n --hx-slate-400: var(--corn-text-3);\n --hx-slate-500: var(--corn-text-3);\n --hx-slate-600: var(--corn-text-3);\n --hx-slate-700: var(--corn-surface-3);\n --hx-slate-800: var(--corn-surface-2);\n --hx-slate-900: var(--corn-ground);\n --hx-slate-950: var(--corn-ground);\n --hx-indigo: var(--corn-accent-text);\n --hx-indigo-strong: var(--corn-accent);\n --hx-emerald: var(--corn-ok);\n --hx-amber: var(--corn-warn);\n --hx-sky: var(--corn-info);\n --hx-pink: var(--corn-hue-pink);\n --hx-fuchsia: var(--corn-hue-fuchsia);\n --hx-fuchsia-strong: var(--corn-hue-fuchsia);\n --hx-red: var(--corn-bad);\n --hx-code: var(--corn-warn);\n --hx-orange-text: var(--corn-hue-orange);\n --hx-orange-strong: var(--corn-hue-orange);\n --hx-teal-text: var(--corn-added-text);\n --hx-teal-strong: var(--corn-added-text);\n --hx-violet-text: var(--corn-edit-text);\n --hx-green-text: var(--corn-ok);\n --hx-lime-text: var(--corn-hue-lime);\n --hx-mark-added: var(--corn-added);\n --hx-mark-changed: var(--corn-changed);\n --hx-mark-removed: var(--corn-removed);\n --hx-mark-edit: var(--corn-edit);\n --hx-control: var(--corn-surface-2);\n --hx-control-hover: var(--corn-surface-3);\n --hx-control-off: color-mix(in srgb, var(--corn-ground) 40%, transparent);\n --hx-well: color-mix(in srgb, var(--corn-ground) 80%, transparent);\n --hx-well-soft: color-mix(in srgb, var(--corn-ground) 55%, transparent);\n --hx-line: var(--corn-line);\n --hx-line-soft: var(--corn-line-soft);\n --hx-scroll: color-mix(in srgb, var(--corn-text) 18%, transparent);\n --hx-scroll-hover: color-mix(in srgb, var(--corn-text) 28%, transparent);\n --hx-swatch-solid: color-mix(in srgb, var(--corn-text) 55%, transparent);\n --hx-backdrop: var(--corn-scrim);\n --hx-glyph-mix: var(--corn-glyph-mix);\n --surface-glass: var(--corn-surface-1);\n --surface-glass-header: color-mix(in srgb, var(--corn-ground) 88%, transparent);\n --border-glass: var(--corn-line);\n --border-subtle: var(--corn-line-soft);\n --glass-blur: blur(var(--corn-blur));\n --glass-shadow: var(--corn-shadow);\n --gradient-primary: var(--corn-brand-gradient);\n --bg-gradient: var(--corn-ground-image), var(--corn-ground);\n --pop-font-body: var(--corn-font);\n --pop-font-mono: var(--corn-mono);\n}\n\n/* theme=\"light\" on an element: this mode's tokens, on the element itself */\n:where(corn-layers[theme=\"light\"]),\n:where(corn-map[theme=\"light\"]),\n:where(corn-node-panel[theme=\"light\"]),\n:where(corn-review[theme=\"light\"]),\n:where(corn-scope[theme=\"light\"]),\n:where(corn-search[theme=\"light\"]) {\n --corn-ground: #f4f6fa;\n --corn-ground-image: radial-gradient(circle at 14% 18%, rgba(66, 153, 225, 0.06) 0%, transparent 45%),\n radial-gradient(circle at 86% 82%, rgba(229, 62, 62, 0.04) 0%, transparent 45%);\n --corn-surface-1: rgba(255, 255, 255, 0.8);\n --corn-surface-2: rgba(241, 245, 249, 0.92);\n --corn-surface-3: rgba(226, 232, 240, 0.95);\n --corn-line: rgba(15, 23, 42, 0.12);\n --corn-line-soft: rgba(15, 23, 42, 0.07);\n --corn-shadow: 0 8px 28px 0 rgba(15, 23, 42, 0.12);\n --corn-shadow-sm: 0 1px 3px rgba(15, 23, 42, 0.25);\n --corn-shadow-lg: 0 10px 30px -12px rgba(15, 23, 42, 0.18);\n --corn-shadow-color: rgba(15, 23, 42, 0.25);\n --corn-glow: 0px;\n --corn-scrim: rgba(15, 23, 42, 0.35);\n --corn-text: #0f172a;\n --corn-text-2: #334155;\n --corn-text-3: #475569;\n --corn-accent-text: #4f46e5;\n --corn-focus: #4f46e5;\n --corn-brand-gradient: linear-gradient(135deg, #2563eb 0%, #4f46e5 50%, #dc2626 100%);\n --corn-ok: #046f51;\n --corn-warn: #854d0e;\n --corn-bad: #b91c1c;\n --corn-info: #03679e;\n --corn-added: #197c6f;\n --corn-changed: #8f6703;\n --corn-removed: #e20b0b;\n --corn-edit: #6839f6;\n --corn-hue-orange: #c2410c;\n --corn-hue-fuchsia: #a21caf;\n --corn-hue-pink: #be185d;\n --corn-hue-lime: #4c7b0f;\n --corn-hue-orange-text: #9a3412;\n --corn-house-line: color-mix(in srgb, var(--corn-hue-lime) 30%, transparent);\n --corn-house-room: color-mix(in srgb, var(--corn-hue-lime) 55%, transparent);\n --corn-glyph-mix: 45%;\n color-scheme: light;\n --corn-shadow-sheet: 0 -8px 24px color-mix(in srgb, var(--corn-shadow-color) 70%, transparent);\n --corn-accent-soft: color-mix(in srgb, var(--corn-accent-hover) 20%, transparent);\n --corn-ok-soft: color-mix(in srgb, var(--corn-ok) 15%, transparent);\n --corn-run-requested: var(--corn-text-3);\n --corn-run-claimed: var(--corn-info);\n --corn-run-working: var(--corn-info);\n --corn-run-waiting: var(--corn-warn);\n --corn-run-waiting-ink: var(--corn-ground);\n --corn-run-done: var(--corn-ok);\n --corn-run-failed: var(--corn-bad);\n --corn-run-stopped: var(--corn-text-2);\n --corn-added-text: color-mix(in srgb, var(--corn-added) 60%, var(--corn-text));\n --corn-edit-text: color-mix(in srgb, var(--corn-edit) 60%, var(--corn-text));\n --corn-hue-orange-soft: color-mix(in srgb, var(--corn-hue-orange) 12%, transparent);\n --corn-font-display: var(--corn-font);\n --corn-font-num: var(--corn-font);\n --corn-space-1: var(--corn-space);\n --corn-panel-pad: calc(var(--corn-space-5) + var(--corn-space-1));\n --corn-panel-head-height: calc(var(--corn-control-height) + var(--corn-space-3));\n --corn-map-collision: var(--corn-warn);\n --hx-bg: var(--corn-ground);\n --hx-text: var(--corn-text);\n --hx-ink: var(--corn-text);\n --hx-text-1: var(--corn-text);\n --hx-text-2: var(--corn-text-2);\n --hx-slate-300: var(--corn-text-2);\n --hx-slate-400: var(--corn-text-3);\n --hx-slate-500: var(--corn-text-3);\n --hx-slate-600: var(--corn-text-3);\n --hx-slate-700: var(--corn-surface-3);\n --hx-slate-800: var(--corn-surface-2);\n --hx-slate-900: var(--corn-ground);\n --hx-slate-950: var(--corn-ground);\n --hx-indigo: var(--corn-accent-text);\n --hx-indigo-strong: var(--corn-accent);\n --hx-emerald: var(--corn-ok);\n --hx-amber: var(--corn-warn);\n --hx-sky: var(--corn-info);\n --hx-pink: var(--corn-hue-pink);\n --hx-fuchsia: var(--corn-hue-fuchsia);\n --hx-fuchsia-strong: var(--corn-hue-fuchsia);\n --hx-red: var(--corn-bad);\n --hx-code: var(--corn-warn);\n --hx-orange-text: var(--corn-hue-orange);\n --hx-orange-strong: var(--corn-hue-orange);\n --hx-teal-text: var(--corn-added-text);\n --hx-teal-strong: var(--corn-added-text);\n --hx-violet-text: var(--corn-edit-text);\n --hx-green-text: var(--corn-ok);\n --hx-lime-text: var(--corn-hue-lime);\n --hx-mark-added: var(--corn-added);\n --hx-mark-changed: var(--corn-changed);\n --hx-mark-removed: var(--corn-removed);\n --hx-mark-edit: var(--corn-edit);\n --hx-control: var(--corn-surface-2);\n --hx-control-hover: var(--corn-surface-3);\n --hx-control-off: color-mix(in srgb, var(--corn-ground) 40%, transparent);\n --hx-well: color-mix(in srgb, var(--corn-ground) 80%, transparent);\n --hx-well-soft: color-mix(in srgb, var(--corn-ground) 55%, transparent);\n --hx-line: var(--corn-line);\n --hx-line-soft: var(--corn-line-soft);\n --hx-scroll: color-mix(in srgb, var(--corn-text) 18%, transparent);\n --hx-scroll-hover: color-mix(in srgb, var(--corn-text) 28%, transparent);\n --hx-swatch-solid: color-mix(in srgb, var(--corn-text) 55%, transparent);\n --hx-backdrop: var(--corn-scrim);\n --hx-glyph-mix: var(--corn-glyph-mix);\n --surface-glass: var(--corn-surface-1);\n --surface-glass-header: color-mix(in srgb, var(--corn-ground) 88%, transparent);\n --border-glass: var(--corn-line);\n --border-subtle: var(--corn-line-soft);\n --glass-blur: blur(var(--corn-blur));\n --glass-shadow: var(--corn-shadow);\n --gradient-primary: var(--corn-brand-gradient);\n --bg-gradient: var(--corn-ground-image), var(--corn-ground);\n --pop-font-body: var(--corn-font);\n --pop-font-mono: var(--corn-mono);\n}\n\n/* theme=\"dark\" on an element: this mode's tokens, on the element itself */\n:where(corn-layers[theme=\"dark\"]),\n:where(corn-map[theme=\"dark\"]),\n:where(corn-node-panel[theme=\"dark\"]),\n:where(corn-review[theme=\"dark\"]),\n:where(corn-scope[theme=\"dark\"]),\n:where(corn-search[theme=\"dark\"]) {\n --corn-ground: #090d16;\n --corn-ground-image: radial-gradient(circle at 14% 18%, rgba(66, 153, 225, 0.2) 0%, transparent 45%),\n radial-gradient(circle at 86% 82%, rgba(229, 62, 62, 0.16) 0%, transparent 45%),\n radial-gradient(circle at 50% 50%, rgba(66, 153, 225, 0.10) 0%, transparent 60%);\n --corn-surface-1: rgba(26, 34, 52, 0.72);\n --corn-surface-2: rgba(30, 41, 59, 0.8);\n --corn-surface-3: rgba(51, 65, 85, 0.8);\n --corn-line: rgba(255, 255, 255, 0.12);\n --corn-line-soft: rgba(255, 255, 255, 0.07);\n --corn-shadow: 0 8px 32px 0 rgba(0, 0, 0, 0.45);\n --corn-shadow-sm: 0 2px 6px rgba(0, 0, 0, 0.4);\n --corn-shadow-lg: 0 25px 50px -12px rgba(0, 0, 0, 0.5);\n --corn-shadow-color: rgba(0, 0, 0, 0.5);\n --corn-glow: 8px;\n --corn-scrim: rgba(0, 0, 0, 0.6);\n --corn-text: #f8fafc;\n --corn-text-2: #cbd5e1;\n --corn-text-3: #9aa9bc;\n --corn-accent-text: #98a1fa;\n --corn-focus: #818cf8;\n --corn-brand-gradient: linear-gradient(135deg, #4299e1 0%, #818cf8 50%, #e53e3e 100%);\n --corn-ok: #34d399;\n --corn-warn: #fcd34d;\n --corn-bad: #fca5a5;\n --corn-info: #7dd3fc;\n --corn-added: #2dd4bf;\n --corn-changed: #fbbf24;\n --corn-removed: #fa9292;\n --corn-edit: #b49cfb;\n --corn-hue-orange: #fb923c;\n --corn-hue-fuchsia: #e879f9;\n --corn-hue-pink: #f472b6;\n --corn-hue-lime: #a3e635;\n --corn-hue-orange-text: var(--corn-hue-orange);\n --corn-house-line: color-mix(in srgb, var(--corn-hue-lime) 18%, transparent);\n --corn-house-room: color-mix(in srgb, var(--corn-hue-lime) 45%, transparent);\n --corn-glyph-mix: 100%;\n color-scheme: dark;\n --corn-shadow-sheet: 0 -8px 24px color-mix(in srgb, var(--corn-shadow-color) 70%, transparent);\n --corn-accent-soft: color-mix(in srgb, var(--corn-accent-hover) 20%, transparent);\n --corn-ok-soft: color-mix(in srgb, var(--corn-ok) 15%, transparent);\n --corn-run-requested: var(--corn-text-3);\n --corn-run-claimed: var(--corn-info);\n --corn-run-working: var(--corn-info);\n --corn-run-waiting: var(--corn-warn);\n --corn-run-waiting-ink: var(--corn-ground);\n --corn-run-done: var(--corn-ok);\n --corn-run-failed: var(--corn-bad);\n --corn-run-stopped: var(--corn-text-2);\n --corn-added-text: color-mix(in srgb, var(--corn-added) 60%, var(--corn-text));\n --corn-edit-text: color-mix(in srgb, var(--corn-edit) 60%, var(--corn-text));\n --corn-hue-orange-soft: color-mix(in srgb, var(--corn-hue-orange) 12%, transparent);\n --corn-font-display: var(--corn-font);\n --corn-font-num: var(--corn-font);\n --corn-space-1: var(--corn-space);\n --corn-panel-pad: calc(var(--corn-space-5) + var(--corn-space-1));\n --corn-panel-head-height: calc(var(--corn-control-height) + var(--corn-space-3));\n --corn-map-collision: var(--corn-warn);\n --hx-bg: var(--corn-ground);\n --hx-text: var(--corn-text);\n --hx-ink: var(--corn-text);\n --hx-text-1: var(--corn-text);\n --hx-text-2: var(--corn-text-2);\n --hx-slate-300: var(--corn-text-2);\n --hx-slate-400: var(--corn-text-3);\n --hx-slate-500: var(--corn-text-3);\n --hx-slate-600: var(--corn-text-3);\n --hx-slate-700: var(--corn-surface-3);\n --hx-slate-800: var(--corn-surface-2);\n --hx-slate-900: var(--corn-ground);\n --hx-slate-950: var(--corn-ground);\n --hx-indigo: var(--corn-accent-text);\n --hx-indigo-strong: var(--corn-accent);\n --hx-emerald: var(--corn-ok);\n --hx-amber: var(--corn-warn);\n --hx-sky: var(--corn-info);\n --hx-pink: var(--corn-hue-pink);\n --hx-fuchsia: var(--corn-hue-fuchsia);\n --hx-fuchsia-strong: var(--corn-hue-fuchsia);\n --hx-red: var(--corn-bad);\n --hx-code: var(--corn-warn);\n --hx-orange-text: var(--corn-hue-orange);\n --hx-orange-strong: var(--corn-hue-orange);\n --hx-teal-text: var(--corn-added-text);\n --hx-teal-strong: var(--corn-added-text);\n --hx-violet-text: var(--corn-edit-text);\n --hx-green-text: var(--corn-ok);\n --hx-lime-text: var(--corn-hue-lime);\n --hx-mark-added: var(--corn-added);\n --hx-mark-changed: var(--corn-changed);\n --hx-mark-removed: var(--corn-removed);\n --hx-mark-edit: var(--corn-edit);\n --hx-control: var(--corn-surface-2);\n --hx-control-hover: var(--corn-surface-3);\n --hx-control-off: color-mix(in srgb, var(--corn-ground) 40%, transparent);\n --hx-well: color-mix(in srgb, var(--corn-ground) 80%, transparent);\n --hx-well-soft: color-mix(in srgb, var(--corn-ground) 55%, transparent);\n --hx-line: var(--corn-line);\n --hx-line-soft: var(--corn-line-soft);\n --hx-scroll: color-mix(in srgb, var(--corn-text) 18%, transparent);\n --hx-scroll-hover: color-mix(in srgb, var(--corn-text) 28%, transparent);\n --hx-swatch-solid: color-mix(in srgb, var(--corn-text) 55%, transparent);\n --hx-backdrop: var(--corn-scrim);\n --hx-glyph-mix: var(--corn-glyph-mix);\n --surface-glass: var(--corn-surface-1);\n --surface-glass-header: color-mix(in srgb, var(--corn-ground) 88%, transparent);\n --border-glass: var(--corn-line);\n --border-subtle: var(--corn-line-soft);\n --glass-blur: blur(var(--corn-blur));\n --glass-shadow: var(--corn-shadow);\n --gradient-primary: var(--corn-brand-gradient);\n --bg-gradient: var(--corn-ground-image), var(--corn-ground);\n --pop-font-body: var(--corn-font);\n --pop-font-mono: var(--corn-mono);\n}\n";
4170
- export { si as $, et as $t, Wa as A, c as An, Ft as At, Xi as B, Et as Bt, vo as C, D as Cn, nn as Ct, Ka as D, v as Dn, on as Dt, so as E, y as En, un as Et, ua as F, Bt as Ft, Ui as G, wt as Gt, wi as H, Dt as Ht, ta as I, Nt as It, Mi as J, ht as Jt, Li as K, xt as Kt, ea as L, M as Lt, Za as M, n as Mn, Ut as Mt, ma as N, Gt as Nt, oo as O, p as On, an as Ot, ca as P, Ht as Pt, ci as Q, ze as Qt, $i as R, Mt as Rt, Pa as S, ee as Sn, Yt as St, Xa as T, _ as Tn, qt as Tt, Oi as U, kt as Ut, Qi as V, Tt as Vt, Di as W, Ot as Wt, ji as X, yt as Xt, Fi as Y, vt as Yt, Ri as Z, ft as Zt, Sa as _, C as _n, vn as _t, To as a, Ee as an, Xr as at, Ma as b, te as bn, $t as bt, hs as c, we as cn, br as ct, ka as d, ye as dn, wr as dt, it as en, pi as et, Ta as f, xe as fn, Wn as ft, Ca as g, me as gn, cr as gt, wa as h, Se as hn, _r as ht, ts as i, Fe as in, B as it, Ra as j, l as jn, N as jt, X as k, d as kn, rn as kt, is as l, Te as ln, Fr as lt, ja as m, be as mn, vr as mt, Po as n, Re as nn, ei as nt, ss as o, Ae as on, Pr as ot, Ia as p, _e as pn, gr as pt, Ai as q, j as qt, Ro as r, Le as rn, Yr as rt, Vo as s, De as sn, z as st, gs as t, nt as tn, xi as tt, ps as u, ge as un, xr as ut, Ha as v, S as vn, mn as vt, yo as w, E as wn, P as wt, J as x, A as xn, sn as xt, Na as y, k as yn, en as yt, Zi as z, At as zt };
4171
+ var gs = "/* cornfield's default design tokens, generated from explorer/tokens.css by components/scripts/tokens.mjs: do not edit.\n Every selector is :where(...), at zero specificity: any ordinary rule of yours (on :root, or on one element) overrides it. */\n\n:where(:root) {\n --corn-ground: #090d16;\n --corn-ground-image: radial-gradient(circle at 14% 18%, rgba(66, 153, 225, 0.2) 0%, transparent 45%),\n radial-gradient(circle at 86% 82%, rgba(229, 62, 62, 0.16) 0%, transparent 45%),\n radial-gradient(circle at 50% 50%, rgba(66, 153, 225, 0.10) 0%, transparent 60%);\n --corn-surface-1: rgba(26, 34, 52, 0.72);\n --corn-surface-2: rgba(30, 41, 59, 0.8);\n --corn-surface-3: rgba(51, 65, 85, 0.8);\n --corn-line: rgba(255, 255, 255, 0.12);\n --corn-line-soft: rgba(255, 255, 255, 0.07);\n --corn-shadow: 0 8px 32px 0 rgba(0, 0, 0, 0.45);\n --corn-shadow-sm: 0 2px 6px rgba(0, 0, 0, 0.4);\n --corn-shadow-lg: 0 25px 50px -12px rgba(0, 0, 0, 0.5);\n --corn-shadow-color: rgba(0, 0, 0, 0.5);\n --corn-glow: 8px;\n --corn-scrim: rgba(0, 0, 0, 0.6);\n --corn-shadow-sheet: 0 -8px 24px color-mix(in srgb, var(--corn-shadow-color) 70%, transparent);\n --corn-blur: 16px;\n --corn-text: #f8fafc;\n --corn-text-2: #cbd5e1;\n --corn-text-3: #9aa9bc;\n --corn-text-on-accent: #fff;\n --corn-mockup-ground: #fff;\n --corn-accent: #4f46e5;\n --corn-accent-hover: #6265f1;\n --corn-accent-text: #98a1fa;\n --corn-accent-soft: color-mix(in srgb, var(--corn-accent-hover) 20%, transparent);\n --corn-focus: #818cf8;\n --corn-brand-gradient: linear-gradient(135deg, #4299e1 0%, #818cf8 50%, #e53e3e 100%);\n --corn-ok: #34d399;\n --corn-warn: #fcd34d;\n --corn-bad: #fca5a5;\n --corn-info: #7dd3fc;\n --corn-ok-soft: color-mix(in srgb, var(--corn-ok) 15%, transparent);\n --corn-run-requested: var(--corn-text-3);\n --corn-run-claimed: var(--corn-info);\n --corn-run-working: var(--corn-info);\n --corn-run-waiting: var(--corn-warn);\n --corn-run-waiting-ink: var(--corn-ground);\n --corn-run-done: var(--corn-ok);\n --corn-run-failed: var(--corn-bad);\n --corn-run-stopped: var(--corn-text-2);\n --corn-added: #2dd4bf;\n --corn-changed: #fbbf24;\n --corn-removed: #fa9292;\n --corn-edit: #b49cfb;\n --corn-added-text: color-mix(in srgb, var(--corn-added) 60%, var(--corn-text));\n --corn-edit-text: color-mix(in srgb, var(--corn-edit) 60%, var(--corn-text));\n --corn-hue-orange: #fb923c;\n --corn-hue-fuchsia: #e879f9;\n --corn-hue-pink: #f472b6;\n --corn-hue-lime: #a3e635;\n --corn-hue-orange-text: var(--corn-hue-orange);\n --corn-hue-orange-soft: color-mix(in srgb, var(--corn-hue-orange) 12%, transparent);\n --corn-font: system-ui, -apple-system, \"Segoe UI\", Roboto, \"Helvetica Neue\", Arial, sans-serif;\n --corn-font-display: var(--corn-font);\n --corn-mono: ui-monospace, SFMono-Regular, Menlo, Consolas, \"Liberation Mono\", monospace;\n --corn-font-num: var(--corn-font);\n --corn-text-2xs: 10px;\n --corn-text-xs: 11px;\n --corn-text-sm: 12px;\n --corn-text-md: 13px;\n --corn-text-base: 14px;\n --corn-text-lg: 15px;\n --corn-text-xl: 20px;\n --corn-radius-xs: 3px;\n --corn-radius-sm: 6px;\n --corn-radius: 10px;\n --corn-radius-lg: 14px;\n --corn-radius-pill: 999px;\n --corn-border: 1px;\n --corn-border-strong: 2px;\n --corn-focus-width: 2px;\n --corn-focus-offset: 2px;\n --corn-space: 4px;\n --corn-space-1: var(--corn-space);\n --corn-space-2: 6px;\n --corn-space-3: 8px;\n --corn-space-4: 12px;\n --corn-space-5: 16px;\n --corn-space-6: 24px;\n --corn-control-height: 32px;\n --corn-panel-pad: calc(var(--corn-space-5) + var(--corn-space-1));\n --corn-panel-head-height: calc(var(--corn-control-height) + var(--corn-space-3));\n --corn-house-line: color-mix(in srgb, var(--corn-hue-lime) 18%, transparent);\n --corn-house-room: color-mix(in srgb, var(--corn-hue-lime) 45%, transparent);\n --corn-glyph-mix: 100%;\n color-scheme: dark;\n --corn-map-stroke: auto;\n --corn-map-stroke-width: 1.5px;\n --corn-map-label: auto;\n --corn-map-label-halo: auto;\n --corn-map-collision: var(--corn-warn);\n --corn-map-font: auto;\n --corn-map-edge-width: auto;\n --corn-map-glow: auto;\n --corn-map-label-min: auto;\n --corn-map-glyph: auto;\n --corn-map-grey: auto;\n --corn-map-grey-alpha: auto;\n --corn-map-added: auto;\n --corn-map-changed: auto;\n --corn-map-removed: auto;\n --corn-map-edit: auto;\n --corn-map-selected: auto;\n --corn-map-match: auto;\n --corn-map-lit: auto;\n --corn-map-edge-ownership: auto;\n --corn-map-edge-usage: auto;\n --corn-map-edge-flow: auto;\n --corn-map-edge-reads: auto;\n --corn-map-edge-writes: auto;\n --corn-map-edge-calls: auto;\n --corn-map-edge-triggers: auto;\n --corn-map-edge-delivers: auto;\n --corn-map-edge-runs-on: auto;\n --corn-map-edge-uses: auto;\n --corn-map-edge-extends: auto;\n --corn-map-node-root: auto;\n --corn-map-node-app: auto;\n --corn-map-node-page: auto;\n --corn-map-node-pkg: auto;\n --corn-map-node-core: auto;\n --corn-map-node-token: auto;\n --corn-map-node-atom: auto;\n --corn-map-node-molecule: auto;\n --corn-map-node-tool: auto;\n --corn-map-node-store: auto;\n --corn-map-node-table: auto;\n --corn-map-node-rom: auto;\n --corn-map-node-service: auto;\n --corn-map-node-external: auto;\n --corn-map-node-stack: auto;\n --corn-map-node-machine: auto;\n --corn-map-node-container: auto;\n --corn-map-node-persona: auto;\n --corn-map-node-device: auto;\n --corn-map-node-floor: auto;\n --corn-map-node-room: auto;\n --corn-map-group-app: auto;\n --corn-map-group-pkg: auto;\n --corn-map-group-page: auto;\n --corn-map-group-atom: auto;\n --corn-map-group-molecule: auto;\n --corn-map-group-token: auto;\n --corn-map-group-tool: auto;\n --corn-map-group-table: auto;\n --corn-map-group-rom: auto;\n --corn-map-group-service: auto;\n --corn-map-group-cloud: auto;\n --corn-map-group-web: auto;\n --corn-map-group-stack: auto;\n --corn-map-group-machine: auto;\n --corn-map-group-container: auto;\n --corn-map-group-device: auto;\n --corn-map-group-house: auto;\n --corn-map-group-persona: auto;\n}\n\n@media (prefers-color-scheme: light) {\n :where(:root:not([data-theme=\"dark\"])) {\n --corn-ground: #f4f6fa;\n --corn-ground-image: radial-gradient(circle at 14% 18%, rgba(66, 153, 225, 0.06) 0%, transparent 45%),\n radial-gradient(circle at 86% 82%, rgba(229, 62, 62, 0.04) 0%, transparent 45%);\n --corn-surface-1: rgba(255, 255, 255, 0.8);\n --corn-surface-2: rgba(241, 245, 249, 0.92);\n --corn-surface-3: rgba(226, 232, 240, 0.95);\n --corn-line: rgba(15, 23, 42, 0.12);\n --corn-line-soft: rgba(15, 23, 42, 0.07);\n --corn-shadow: 0 8px 28px 0 rgba(15, 23, 42, 0.12);\n --corn-shadow-sm: 0 1px 3px rgba(15, 23, 42, 0.25);\n --corn-shadow-lg: 0 10px 30px -12px rgba(15, 23, 42, 0.18);\n --corn-shadow-color: rgba(15, 23, 42, 0.25);\n --corn-glow: 0px;\n --corn-scrim: rgba(15, 23, 42, 0.35);\n --corn-text: #0f172a;\n --corn-text-2: #334155;\n --corn-text-3: #475569;\n --corn-accent-text: #4f46e5;\n --corn-focus: #4f46e5;\n --corn-brand-gradient: linear-gradient(135deg, #2563eb 0%, #4f46e5 50%, #dc2626 100%);\n --corn-ok: #046f51;\n --corn-warn: #854d0e;\n --corn-bad: #b91c1c;\n --corn-info: #03679e;\n --corn-added: #197c6f;\n --corn-changed: #8f6703;\n --corn-removed: #e20b0b;\n --corn-edit: #6839f6;\n --corn-hue-orange: #c2410c;\n --corn-hue-fuchsia: #a21caf;\n --corn-hue-pink: #be185d;\n --corn-hue-lime: #4c7b0f;\n --corn-hue-orange-text: #9a3412;\n --corn-house-line: color-mix(in srgb, var(--corn-hue-lime) 30%, transparent);\n --corn-house-room: color-mix(in srgb, var(--corn-hue-lime) 55%, transparent);\n --corn-glyph-mix: 45%;\n color-scheme: light;\n }\n}\n\n:where(:root[data-theme=\"light\"]) {\n --corn-ground: #f4f6fa;\n --corn-ground-image: radial-gradient(circle at 14% 18%, rgba(66, 153, 225, 0.06) 0%, transparent 45%),\n radial-gradient(circle at 86% 82%, rgba(229, 62, 62, 0.04) 0%, transparent 45%);\n --corn-surface-1: rgba(255, 255, 255, 0.8);\n --corn-surface-2: rgba(241, 245, 249, 0.92);\n --corn-surface-3: rgba(226, 232, 240, 0.95);\n --corn-line: rgba(15, 23, 42, 0.12);\n --corn-line-soft: rgba(15, 23, 42, 0.07);\n --corn-shadow: 0 8px 28px 0 rgba(15, 23, 42, 0.12);\n --corn-shadow-sm: 0 1px 3px rgba(15, 23, 42, 0.25);\n --corn-shadow-lg: 0 10px 30px -12px rgba(15, 23, 42, 0.18);\n --corn-shadow-color: rgba(15, 23, 42, 0.25);\n --corn-glow: 0px;\n --corn-scrim: rgba(15, 23, 42, 0.35);\n --corn-text: #0f172a;\n --corn-text-2: #334155;\n --corn-text-3: #475569;\n --corn-accent-text: #4f46e5;\n --corn-focus: #4f46e5;\n --corn-brand-gradient: linear-gradient(135deg, #2563eb 0%, #4f46e5 50%, #dc2626 100%);\n --corn-ok: #046f51;\n --corn-warn: #854d0e;\n --corn-bad: #b91c1c;\n --corn-info: #03679e;\n --corn-added: #197c6f;\n --corn-changed: #8f6703;\n --corn-removed: #e20b0b;\n --corn-edit: #6839f6;\n --corn-hue-orange: #c2410c;\n --corn-hue-fuchsia: #a21caf;\n --corn-hue-pink: #be185d;\n --corn-hue-lime: #4c7b0f;\n --corn-hue-orange-text: #9a3412;\n --corn-house-line: color-mix(in srgb, var(--corn-hue-lime) 30%, transparent);\n --corn-house-room: color-mix(in srgb, var(--corn-hue-lime) 55%, transparent);\n --corn-glyph-mix: 45%;\n color-scheme: light;\n}\n\n@media (max-width: 767px) {\n :where(:root) {\n --corn-control-height: 44px;\n }\n}\n\n@media (max-width: 639px) {\n :where(:root) {\n --corn-panel-pad: var(--corn-space-5);\n }\n}\n\n:where(:root) {\n --hx-bg: var(--corn-ground);\n --hx-text: var(--corn-text);\n --hx-ink: var(--corn-text);\n --hx-text-1: var(--corn-text);\n --hx-text-2: var(--corn-text-2);\n --hx-slate-300: var(--corn-text-2);\n --hx-slate-400: var(--corn-text-3);\n --hx-slate-500: var(--corn-text-3);\n --hx-slate-600: var(--corn-text-3);\n --hx-slate-700: var(--corn-surface-3);\n --hx-slate-800: var(--corn-surface-2);\n --hx-slate-900: var(--corn-ground);\n --hx-slate-950: var(--corn-ground);\n --hx-indigo: var(--corn-accent-text);\n --hx-indigo-strong: var(--corn-accent);\n --hx-emerald: var(--corn-ok);\n --hx-amber: var(--corn-warn);\n --hx-sky: var(--corn-info);\n --hx-pink: var(--corn-hue-pink);\n --hx-fuchsia: var(--corn-hue-fuchsia);\n --hx-fuchsia-strong: var(--corn-hue-fuchsia);\n --hx-red: var(--corn-bad);\n --hx-code: var(--corn-warn);\n --hx-orange-text: var(--corn-hue-orange);\n --hx-orange-strong: var(--corn-hue-orange);\n --hx-teal-text: var(--corn-added-text);\n --hx-teal-strong: var(--corn-added-text);\n --hx-violet-text: var(--corn-edit-text);\n --hx-green-text: var(--corn-ok);\n --hx-lime-text: var(--corn-hue-lime);\n --hx-mark-added: var(--corn-added);\n --hx-mark-changed: var(--corn-changed);\n --hx-mark-removed: var(--corn-removed);\n --hx-mark-edit: var(--corn-edit);\n --hx-control: var(--corn-surface-2);\n --hx-control-hover: var(--corn-surface-3);\n --hx-control-off: color-mix(in srgb, var(--corn-ground) 40%, transparent);\n --hx-well: color-mix(in srgb, var(--corn-ground) 80%, transparent);\n --hx-well-soft: color-mix(in srgb, var(--corn-ground) 55%, transparent);\n --hx-line: var(--corn-line);\n --hx-line-soft: var(--corn-line-soft);\n --hx-scroll: color-mix(in srgb, var(--corn-text) 18%, transparent);\n --hx-scroll-hover: color-mix(in srgb, var(--corn-text) 28%, transparent);\n --hx-swatch-solid: color-mix(in srgb, var(--corn-text) 55%, transparent);\n --hx-backdrop: var(--corn-scrim);\n --hx-glyph-mix: var(--corn-glyph-mix);\n --surface-glass: var(--corn-surface-1);\n --surface-glass-header: color-mix(in srgb, var(--corn-ground) 88%, transparent);\n --border-glass: var(--corn-line);\n --border-subtle: var(--corn-line-soft);\n --glass-blur: blur(var(--corn-blur));\n --glass-shadow: var(--corn-shadow);\n --gradient-primary: var(--corn-brand-gradient);\n --bg-gradient: var(--corn-ground-image), var(--corn-ground);\n --pop-font-body: var(--corn-font);\n --pop-font-mono: var(--corn-mono);\n}\n\n/* theme=\"light\" on an element: this mode's tokens, on the element itself */\n:where(corn-changes[theme=\"light\"]),\n:where(corn-decision[theme=\"light\"]),\n:where(corn-layers[theme=\"light\"]),\n:where(corn-map[theme=\"light\"]),\n:where(corn-node-panel[theme=\"light\"]),\n:where(corn-proposal[theme=\"light\"]),\n:where(corn-review[theme=\"light\"]),\n:where(corn-scope[theme=\"light\"]),\n:where(corn-search[theme=\"light\"]) {\n --corn-ground: #f4f6fa;\n --corn-ground-image: radial-gradient(circle at 14% 18%, rgba(66, 153, 225, 0.06) 0%, transparent 45%),\n radial-gradient(circle at 86% 82%, rgba(229, 62, 62, 0.04) 0%, transparent 45%);\n --corn-surface-1: rgba(255, 255, 255, 0.8);\n --corn-surface-2: rgba(241, 245, 249, 0.92);\n --corn-surface-3: rgba(226, 232, 240, 0.95);\n --corn-line: rgba(15, 23, 42, 0.12);\n --corn-line-soft: rgba(15, 23, 42, 0.07);\n --corn-shadow: 0 8px 28px 0 rgba(15, 23, 42, 0.12);\n --corn-shadow-sm: 0 1px 3px rgba(15, 23, 42, 0.25);\n --corn-shadow-lg: 0 10px 30px -12px rgba(15, 23, 42, 0.18);\n --corn-shadow-color: rgba(15, 23, 42, 0.25);\n --corn-glow: 0px;\n --corn-scrim: rgba(15, 23, 42, 0.35);\n --corn-text: #0f172a;\n --corn-text-2: #334155;\n --corn-text-3: #475569;\n --corn-accent-text: #4f46e5;\n --corn-focus: #4f46e5;\n --corn-brand-gradient: linear-gradient(135deg, #2563eb 0%, #4f46e5 50%, #dc2626 100%);\n --corn-ok: #046f51;\n --corn-warn: #854d0e;\n --corn-bad: #b91c1c;\n --corn-info: #03679e;\n --corn-added: #197c6f;\n --corn-changed: #8f6703;\n --corn-removed: #e20b0b;\n --corn-edit: #6839f6;\n --corn-hue-orange: #c2410c;\n --corn-hue-fuchsia: #a21caf;\n --corn-hue-pink: #be185d;\n --corn-hue-lime: #4c7b0f;\n --corn-hue-orange-text: #9a3412;\n --corn-house-line: color-mix(in srgb, var(--corn-hue-lime) 30%, transparent);\n --corn-house-room: color-mix(in srgb, var(--corn-hue-lime) 55%, transparent);\n --corn-glyph-mix: 45%;\n color-scheme: light;\n --corn-shadow-sheet: 0 -8px 24px color-mix(in srgb, var(--corn-shadow-color) 70%, transparent);\n --corn-accent-soft: color-mix(in srgb, var(--corn-accent-hover) 20%, transparent);\n --corn-ok-soft: color-mix(in srgb, var(--corn-ok) 15%, transparent);\n --corn-run-requested: var(--corn-text-3);\n --corn-run-claimed: var(--corn-info);\n --corn-run-working: var(--corn-info);\n --corn-run-waiting: var(--corn-warn);\n --corn-run-waiting-ink: var(--corn-ground);\n --corn-run-done: var(--corn-ok);\n --corn-run-failed: var(--corn-bad);\n --corn-run-stopped: var(--corn-text-2);\n --corn-added-text: color-mix(in srgb, var(--corn-added) 60%, var(--corn-text));\n --corn-edit-text: color-mix(in srgb, var(--corn-edit) 60%, var(--corn-text));\n --corn-hue-orange-soft: color-mix(in srgb, var(--corn-hue-orange) 12%, transparent);\n --corn-font-display: var(--corn-font);\n --corn-font-num: var(--corn-font);\n --corn-space-1: var(--corn-space);\n --corn-panel-pad: calc(var(--corn-space-5) + var(--corn-space-1));\n --corn-panel-head-height: calc(var(--corn-control-height) + var(--corn-space-3));\n --corn-map-collision: var(--corn-warn);\n --hx-bg: var(--corn-ground);\n --hx-text: var(--corn-text);\n --hx-ink: var(--corn-text);\n --hx-text-1: var(--corn-text);\n --hx-text-2: var(--corn-text-2);\n --hx-slate-300: var(--corn-text-2);\n --hx-slate-400: var(--corn-text-3);\n --hx-slate-500: var(--corn-text-3);\n --hx-slate-600: var(--corn-text-3);\n --hx-slate-700: var(--corn-surface-3);\n --hx-slate-800: var(--corn-surface-2);\n --hx-slate-900: var(--corn-ground);\n --hx-slate-950: var(--corn-ground);\n --hx-indigo: var(--corn-accent-text);\n --hx-indigo-strong: var(--corn-accent);\n --hx-emerald: var(--corn-ok);\n --hx-amber: var(--corn-warn);\n --hx-sky: var(--corn-info);\n --hx-pink: var(--corn-hue-pink);\n --hx-fuchsia: var(--corn-hue-fuchsia);\n --hx-fuchsia-strong: var(--corn-hue-fuchsia);\n --hx-red: var(--corn-bad);\n --hx-code: var(--corn-warn);\n --hx-orange-text: var(--corn-hue-orange);\n --hx-orange-strong: var(--corn-hue-orange);\n --hx-teal-text: var(--corn-added-text);\n --hx-teal-strong: var(--corn-added-text);\n --hx-violet-text: var(--corn-edit-text);\n --hx-green-text: var(--corn-ok);\n --hx-lime-text: var(--corn-hue-lime);\n --hx-mark-added: var(--corn-added);\n --hx-mark-changed: var(--corn-changed);\n --hx-mark-removed: var(--corn-removed);\n --hx-mark-edit: var(--corn-edit);\n --hx-control: var(--corn-surface-2);\n --hx-control-hover: var(--corn-surface-3);\n --hx-control-off: color-mix(in srgb, var(--corn-ground) 40%, transparent);\n --hx-well: color-mix(in srgb, var(--corn-ground) 80%, transparent);\n --hx-well-soft: color-mix(in srgb, var(--corn-ground) 55%, transparent);\n --hx-line: var(--corn-line);\n --hx-line-soft: var(--corn-line-soft);\n --hx-scroll: color-mix(in srgb, var(--corn-text) 18%, transparent);\n --hx-scroll-hover: color-mix(in srgb, var(--corn-text) 28%, transparent);\n --hx-swatch-solid: color-mix(in srgb, var(--corn-text) 55%, transparent);\n --hx-backdrop: var(--corn-scrim);\n --hx-glyph-mix: var(--corn-glyph-mix);\n --surface-glass: var(--corn-surface-1);\n --surface-glass-header: color-mix(in srgb, var(--corn-ground) 88%, transparent);\n --border-glass: var(--corn-line);\n --border-subtle: var(--corn-line-soft);\n --glass-blur: blur(var(--corn-blur));\n --glass-shadow: var(--corn-shadow);\n --gradient-primary: var(--corn-brand-gradient);\n --bg-gradient: var(--corn-ground-image), var(--corn-ground);\n --pop-font-body: var(--corn-font);\n --pop-font-mono: var(--corn-mono);\n}\n\n/* theme=\"dark\" on an element: this mode's tokens, on the element itself */\n:where(corn-changes[theme=\"dark\"]),\n:where(corn-decision[theme=\"dark\"]),\n:where(corn-layers[theme=\"dark\"]),\n:where(corn-map[theme=\"dark\"]),\n:where(corn-node-panel[theme=\"dark\"]),\n:where(corn-proposal[theme=\"dark\"]),\n:where(corn-review[theme=\"dark\"]),\n:where(corn-scope[theme=\"dark\"]),\n:where(corn-search[theme=\"dark\"]) {\n --corn-ground: #090d16;\n --corn-ground-image: radial-gradient(circle at 14% 18%, rgba(66, 153, 225, 0.2) 0%, transparent 45%),\n radial-gradient(circle at 86% 82%, rgba(229, 62, 62, 0.16) 0%, transparent 45%),\n radial-gradient(circle at 50% 50%, rgba(66, 153, 225, 0.10) 0%, transparent 60%);\n --corn-surface-1: rgba(26, 34, 52, 0.72);\n --corn-surface-2: rgba(30, 41, 59, 0.8);\n --corn-surface-3: rgba(51, 65, 85, 0.8);\n --corn-line: rgba(255, 255, 255, 0.12);\n --corn-line-soft: rgba(255, 255, 255, 0.07);\n --corn-shadow: 0 8px 32px 0 rgba(0, 0, 0, 0.45);\n --corn-shadow-sm: 0 2px 6px rgba(0, 0, 0, 0.4);\n --corn-shadow-lg: 0 25px 50px -12px rgba(0, 0, 0, 0.5);\n --corn-shadow-color: rgba(0, 0, 0, 0.5);\n --corn-glow: 8px;\n --corn-scrim: rgba(0, 0, 0, 0.6);\n --corn-text: #f8fafc;\n --corn-text-2: #cbd5e1;\n --corn-text-3: #9aa9bc;\n --corn-accent-text: #98a1fa;\n --corn-focus: #818cf8;\n --corn-brand-gradient: linear-gradient(135deg, #4299e1 0%, #818cf8 50%, #e53e3e 100%);\n --corn-ok: #34d399;\n --corn-warn: #fcd34d;\n --corn-bad: #fca5a5;\n --corn-info: #7dd3fc;\n --corn-added: #2dd4bf;\n --corn-changed: #fbbf24;\n --corn-removed: #fa9292;\n --corn-edit: #b49cfb;\n --corn-hue-orange: #fb923c;\n --corn-hue-fuchsia: #e879f9;\n --corn-hue-pink: #f472b6;\n --corn-hue-lime: #a3e635;\n --corn-hue-orange-text: var(--corn-hue-orange);\n --corn-house-line: color-mix(in srgb, var(--corn-hue-lime) 18%, transparent);\n --corn-house-room: color-mix(in srgb, var(--corn-hue-lime) 45%, transparent);\n --corn-glyph-mix: 100%;\n color-scheme: dark;\n --corn-shadow-sheet: 0 -8px 24px color-mix(in srgb, var(--corn-shadow-color) 70%, transparent);\n --corn-accent-soft: color-mix(in srgb, var(--corn-accent-hover) 20%, transparent);\n --corn-ok-soft: color-mix(in srgb, var(--corn-ok) 15%, transparent);\n --corn-run-requested: var(--corn-text-3);\n --corn-run-claimed: var(--corn-info);\n --corn-run-working: var(--corn-info);\n --corn-run-waiting: var(--corn-warn);\n --corn-run-waiting-ink: var(--corn-ground);\n --corn-run-done: var(--corn-ok);\n --corn-run-failed: var(--corn-bad);\n --corn-run-stopped: var(--corn-text-2);\n --corn-added-text: color-mix(in srgb, var(--corn-added) 60%, var(--corn-text));\n --corn-edit-text: color-mix(in srgb, var(--corn-edit) 60%, var(--corn-text));\n --corn-hue-orange-soft: color-mix(in srgb, var(--corn-hue-orange) 12%, transparent);\n --corn-font-display: var(--corn-font);\n --corn-font-num: var(--corn-font);\n --corn-space-1: var(--corn-space);\n --corn-panel-pad: calc(var(--corn-space-5) + var(--corn-space-1));\n --corn-panel-head-height: calc(var(--corn-control-height) + var(--corn-space-3));\n --corn-map-collision: var(--corn-warn);\n --hx-bg: var(--corn-ground);\n --hx-text: var(--corn-text);\n --hx-ink: var(--corn-text);\n --hx-text-1: var(--corn-text);\n --hx-text-2: var(--corn-text-2);\n --hx-slate-300: var(--corn-text-2);\n --hx-slate-400: var(--corn-text-3);\n --hx-slate-500: var(--corn-text-3);\n --hx-slate-600: var(--corn-text-3);\n --hx-slate-700: var(--corn-surface-3);\n --hx-slate-800: var(--corn-surface-2);\n --hx-slate-900: var(--corn-ground);\n --hx-slate-950: var(--corn-ground);\n --hx-indigo: var(--corn-accent-text);\n --hx-indigo-strong: var(--corn-accent);\n --hx-emerald: var(--corn-ok);\n --hx-amber: var(--corn-warn);\n --hx-sky: var(--corn-info);\n --hx-pink: var(--corn-hue-pink);\n --hx-fuchsia: var(--corn-hue-fuchsia);\n --hx-fuchsia-strong: var(--corn-hue-fuchsia);\n --hx-red: var(--corn-bad);\n --hx-code: var(--corn-warn);\n --hx-orange-text: var(--corn-hue-orange);\n --hx-orange-strong: var(--corn-hue-orange);\n --hx-teal-text: var(--corn-added-text);\n --hx-teal-strong: var(--corn-added-text);\n --hx-violet-text: var(--corn-edit-text);\n --hx-green-text: var(--corn-ok);\n --hx-lime-text: var(--corn-hue-lime);\n --hx-mark-added: var(--corn-added);\n --hx-mark-changed: var(--corn-changed);\n --hx-mark-removed: var(--corn-removed);\n --hx-mark-edit: var(--corn-edit);\n --hx-control: var(--corn-surface-2);\n --hx-control-hover: var(--corn-surface-3);\n --hx-control-off: color-mix(in srgb, var(--corn-ground) 40%, transparent);\n --hx-well: color-mix(in srgb, var(--corn-ground) 80%, transparent);\n --hx-well-soft: color-mix(in srgb, var(--corn-ground) 55%, transparent);\n --hx-line: var(--corn-line);\n --hx-line-soft: var(--corn-line-soft);\n --hx-scroll: color-mix(in srgb, var(--corn-text) 18%, transparent);\n --hx-scroll-hover: color-mix(in srgb, var(--corn-text) 28%, transparent);\n --hx-swatch-solid: color-mix(in srgb, var(--corn-text) 55%, transparent);\n --hx-backdrop: var(--corn-scrim);\n --hx-glyph-mix: var(--corn-glyph-mix);\n --surface-glass: var(--corn-surface-1);\n --surface-glass-header: color-mix(in srgb, var(--corn-ground) 88%, transparent);\n --border-glass: var(--corn-line);\n --border-subtle: var(--corn-line-soft);\n --glass-blur: blur(var(--corn-blur));\n --glass-shadow: var(--corn-shadow);\n --gradient-primary: var(--corn-brand-gradient);\n --bg-gradient: var(--corn-ground-image), var(--corn-ground);\n --pop-font-body: var(--corn-font);\n --pop-font-mono: var(--corn-mono);\n}\n";
4172
+ export { V as $, et as $t, Wa as A, c as An, Xt as At, Yi as B, Et as Bt, vo as C, D as Cn, Ln as Ct, Ka as D, v as Dn, pn as Dt, so as E, y as En, N as Et, ua as F, Bt as Ft, Xi as G, wt as Gt, Wi as H, Dt as Ht, Fi as I, zt as It, H as J, ht as Jt, hi as K, xt as Kt, Bi as L, Lt, Za as M, n as Mn, Yt as Mt, ma as N, qt as Nt, oo as O, p as On, Ht as Ot, ca as P, Vt as Pt, $r as Q, ze as Qt, zi as R, It as Rt, Pa as S, ee as Sn, kn as St, Xa as T, _ as Tn, fn as Tt, qi as U, kt as Ut, Hi as V, Tt as Vt, Ui as W, Ot as Wt, ii as X, yt as Xt, oi as Y, vt as Yt, ni as Z, ft as Zt, Sa as _, C as _n, $n as _t, To as a, Ee as an, Fr as at, Ma as b, te as bn, wn as bt, hs as c, we as cn, Dr as ct, ka as d, ye as dn, er as dt, it as en, zr as et, Ta as f, xe as fn, Un as ft, Ca as g, me as gn, rr as gt, wa as h, Se as hn, Vn as ht, ts as i, Fe as in, lr as it, Ra as j, l as jn, Qt as jt, X as k, d as kn, M as kt, is as l, Te as ln, Jn as lt, ja as m, be as mn, L as mt, Po as n, Re as nn, Br as nt, ss as o, Ae as on, Lr as ot, Ia as p, _e as pn, Xn as pt, di as q, j as qt, Ro as r, Le as rn, Ur as rt, Vo as s, De as sn, Ir as st, gs as t, nt as tn, ei as tt, ps as u, ge as un, qn as ut, Ha as v, S as vn, Qn as vt, yo as w, E as wn, gn as wt, J as x, A as xn, Cn as xt, Na as y, k as yn, Zn as yt, ta as z, Rt as zt };