@oevery/rsp 4.1.0 → 4.2.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 (129) hide show
  1. package/dist/{chunk-JO6NDJM4.mjs → chunk-AUZYUJ46.mjs} +62 -4
  2. package/dist/chunk-DNRGBQS7.mjs +108 -0
  3. package/dist/cli.mjs +16 -9
  4. package/dist/{client-EHRWH5Q7.mjs → client-U2PN3VS4.mjs} +1 -1
  5. package/dist/viewer/app.css +2 -2
  6. package/dist/viewer/app.js +169 -169
  7. package/dist/viewer/chunks/abnfDiagram-S7VZAUFO-K5EOZOEF.js +1 -0
  8. package/dist/viewer/chunks/architecture-WOLXFQ4H-UAT5D5BF.js +1 -0
  9. package/dist/viewer/chunks/architectureDiagram-YGSQEFNW-UNPSYM2L.js +36 -0
  10. package/dist/viewer/chunks/blockDiagram-APKKGZFW-2F7TTPAV.js +140 -0
  11. package/dist/viewer/chunks/bpmnIcons-APHXDYXF-ZWPFFN3O.js +1 -0
  12. package/dist/viewer/chunks/c4Diagram-KJ2TOQU5-KNLN6CME.js +38 -0
  13. package/dist/viewer/chunks/chunk-274PZN6B.js +1 -0
  14. package/dist/viewer/chunks/chunk-2VGDQLQD.js +1 -0
  15. package/dist/viewer/chunks/chunk-33XESOCS.js +1 -0
  16. package/dist/viewer/chunks/chunk-3ZSL2TGQ.js +1 -0
  17. package/dist/viewer/chunks/chunk-432I4U3B.js +1 -0
  18. package/dist/viewer/chunks/chunk-4PJNGS3V.js +1 -0
  19. package/dist/viewer/chunks/chunk-54NLSLTF.js +9 -0
  20. package/dist/viewer/chunks/chunk-6QRHYJ5Q.js +1 -0
  21. package/dist/viewer/chunks/chunk-6RCFKBVR.js +1 -0
  22. package/dist/viewer/chunks/chunk-6Y2HP7DC.js +213 -0
  23. package/dist/viewer/chunks/chunk-7MAT7NHP.js +1 -0
  24. package/dist/viewer/chunks/chunk-AKHBD6LT.js +2 -0
  25. package/dist/viewer/chunks/chunk-CZIM56BV.js +1 -0
  26. package/dist/viewer/chunks/chunk-DN4Y7LXJ.js +1 -0
  27. package/dist/viewer/chunks/chunk-E2UQN267.js +1 -0
  28. package/dist/viewer/chunks/chunk-GBARLDDT.js +1 -0
  29. package/dist/viewer/chunks/chunk-H4YEV7VR.js +1 -0
  30. package/dist/viewer/chunks/chunk-HUVVDQHZ.js +1 -0
  31. package/dist/viewer/chunks/chunk-IAKC32WV.js +72 -0
  32. package/dist/viewer/chunks/chunk-JTW4SY4L.js +1 -0
  33. package/dist/viewer/chunks/chunk-JZV675LF.js +1 -0
  34. package/dist/viewer/chunks/chunk-KDUDYTWO.js +1 -0
  35. package/dist/viewer/chunks/chunk-KHX3A5RZ.js +331 -0
  36. package/dist/viewer/chunks/chunk-KPXJJSUR.js +15 -0
  37. package/dist/viewer/chunks/chunk-LEGNM6PH.js +1 -0
  38. package/dist/viewer/chunks/chunk-LYY4ZY72.js +1 -0
  39. package/dist/viewer/chunks/chunk-MKDEK2LU.js +1 -0
  40. package/dist/viewer/chunks/chunk-MYJRFART.js +129 -0
  41. package/dist/viewer/chunks/chunk-NUXZBURC.js +1 -0
  42. package/dist/viewer/chunks/chunk-NXHT5I2L.js +1 -0
  43. package/dist/viewer/chunks/chunk-OF62XRVM.js +62 -0
  44. package/dist/viewer/chunks/chunk-ONCOEVBS.js +1 -0
  45. package/dist/viewer/chunks/chunk-P44SH3OO.js +1 -0
  46. package/dist/viewer/chunks/chunk-PDXKDBIX.js +1 -0
  47. package/dist/viewer/chunks/chunk-PHKIAKHS.js +1 -0
  48. package/dist/viewer/chunks/chunk-PJDMAGPE.js +2 -0
  49. package/dist/viewer/chunks/chunk-RC2NPHSX.js +88 -0
  50. package/dist/viewer/chunks/chunk-T6DM5RSK.js +10 -0
  51. package/dist/viewer/chunks/chunk-U5STX66M.js +2 -0
  52. package/dist/viewer/chunks/chunk-UIAJQPOF.js +1 -0
  53. package/dist/viewer/chunks/chunk-UX2S3LP3.js +1 -0
  54. package/dist/viewer/chunks/chunk-VEMTQQ7Y.js +2 -0
  55. package/dist/viewer/chunks/chunk-WKCPBR3C.js +1 -0
  56. package/dist/viewer/chunks/chunk-WMQ4Y2MS.js +32 -0
  57. package/dist/viewer/chunks/chunk-YPWIQAHX.js +3 -0
  58. package/dist/viewer/chunks/chunk-Z4ZDIMO2.js +136 -0
  59. package/dist/viewer/chunks/chunk-ZATQCNXH.js +1 -0
  60. package/dist/viewer/chunks/chunk-ZE5RDJX6.js +1 -0
  61. package/dist/viewer/chunks/chunk-ZO62R4L2.js +1 -0
  62. package/dist/viewer/chunks/classDiagram-v2-L25IHNXF-5F2M2CZ4.js +217 -0
  63. package/dist/viewer/chunks/cose-bilkent-JH36ORCC-S56HJ5WN.js +1 -0
  64. package/dist/viewer/chunks/cynefin-EF2NZ3EQ-6WY2NCLE.js +1 -0
  65. package/dist/viewer/chunks/cynefinDiagram-L36ESFBY-DE6PZNQA.js +62 -0
  66. package/dist/viewer/chunks/dagre-SPEB5RXH-QEOTKFV2.js +4 -0
  67. package/dist/viewer/chunks/diagram-3B7GL73J-RZPIU7FY.js +200 -0
  68. package/dist/viewer/chunks/diagram-DNEMPZML-YD26TJKC.js +24 -0
  69. package/dist/viewer/chunks/diagram-L3MUGCDN-TJUEX4QI.js +41 -0
  70. package/dist/viewer/chunks/diagram-LA4NIPWU-3PUQS6UW.js +24 -0
  71. package/dist/viewer/chunks/diagram-MHCOC4E2-YBTBD4PG.js +3 -0
  72. package/dist/viewer/chunks/diagram-XPFHEONP-VF2TQBNR.js +30 -0
  73. package/dist/viewer/chunks/ebnfDiagram-UZSYDL2S-QE7DIEME.js +1 -0
  74. package/dist/viewer/chunks/elk-XV6XMXQE-X5OZRIL3.js +27 -0
  75. package/dist/viewer/chunks/erDiagram-EYBAPDEH-5B2S7VB4.js +99 -0
  76. package/dist/viewer/chunks/eventmodeling-K75KTNOO-CHCQYZBI.js +1 -0
  77. package/dist/viewer/chunks/flowDiagram-MALGAFMO-XJFC5NTN.js +1 -0
  78. package/dist/viewer/chunks/ganttDiagram-23REXITY-TUUZ3QYO.js +292 -0
  79. package/dist/viewer/chunks/gitGraph-VSP46ZUC-VFZPJQ6A.js +1 -0
  80. package/dist/viewer/chunks/gitGraphDiagram-STJD7YCW-4CVV5LSH.js +106 -0
  81. package/dist/viewer/chunks/info-OHQRW6UA-P4744SJ6.js +1 -0
  82. package/dist/viewer/chunks/infoDiagram-KBXO4MBG-Q2WYYNNN.js +2 -0
  83. package/dist/viewer/chunks/ishikawaDiagram-M35NCXHK-PLQPTX2U.js +70 -0
  84. package/dist/viewer/chunks/journeyDiagram-OPLOXDXO-FB73RE6F.js +139 -0
  85. package/dist/viewer/chunks/kanban-definition-BZKZHSQY-6FU4TXYJ.js +89 -0
  86. package/dist/viewer/chunks/katex-IN4S3RHS.js +257 -0
  87. package/dist/viewer/chunks/mindmap-definition-I2QAS2VK-ZQ36ABVW.js +98 -0
  88. package/dist/viewer/chunks/packet-JDAUHWVQ-NYXIQQVA.js +1 -0
  89. package/dist/viewer/chunks/pegDiagram-FD4XPPHP-5XXVT6XN.js +1 -0
  90. package/dist/viewer/chunks/pie-XZMESJXO-32CUE6KZ.js +1 -0
  91. package/dist/viewer/chunks/pieDiagram-J4AKIIQI-WRTBDFM5.js +39 -0
  92. package/dist/viewer/chunks/quadrantDiagram-XTYBLID2-YPBDQIAK.js +7 -0
  93. package/dist/viewer/chunks/radar-ABXABTNO-272FILRO.js +1 -0
  94. package/dist/viewer/chunks/railroad-I3PHUGI6-6EGAH4XA.js +1 -0
  95. package/dist/viewer/chunks/railroad-abnf-LNEFI6M7-G6E7ATER.js +1 -0
  96. package/dist/viewer/chunks/railroad-ebnf-DWYD2UWJ-MR4P6BDR.js +1 -0
  97. package/dist/viewer/chunks/railroad-peg-JR7BVNR7-WXLQUGUO.js +1 -0
  98. package/dist/viewer/chunks/railroadDiagram-MRQ6NCDL-XHZQ2BLY.js +1 -0
  99. package/dist/viewer/chunks/requirementDiagram-Y7LWUY3S-W5FHRRML.js +84 -0
  100. package/dist/viewer/chunks/sankeyDiagram-WGJFYUXA-OJJIRVTI.js +40 -0
  101. package/dist/viewer/chunks/sequenceDiagram-5NDRBG5M-D6T4DRNG.js +169 -0
  102. package/dist/viewer/chunks/sizeCapture-INFHLROL-WL3FTUJX.js +1 -0
  103. package/dist/viewer/chunks/stateDiagram-v2-FJ4FJNEA-LAXL7KGG.js +291 -0
  104. package/dist/viewer/chunks/swimlanes-UMQ2AFYF-XIJBD726.js +1 -0
  105. package/dist/viewer/chunks/swimlanesDiagram-OMPLPG4O-7O7MHFW7.js +8 -0
  106. package/dist/viewer/chunks/timeline-definition-SEUHKTQE-BAZQA47I.js +120 -0
  107. package/dist/viewer/chunks/treeView-D4JQ5SDB-6YMDAAPA.js +1 -0
  108. package/dist/viewer/chunks/treemap-SAJKECNS-2X573PPS.js +1 -0
  109. package/dist/viewer/chunks/usecaseDiagram-AFA6YXN4-4YCEMWJB.js +370 -0
  110. package/dist/viewer/chunks/vennDiagram-NNMJR3RB-GEMROLAE.js +34 -0
  111. package/dist/viewer/chunks/wardley-7MLQ67FV-DGTGHYYC.js +1 -0
  112. package/dist/viewer/chunks/wardleyDiagram-S7YFUSEH-K4HVD3SS.js +78 -0
  113. package/dist/viewer/chunks/xychartDiagram-GGNKY7IX-HVLWCUEO.js +7 -0
  114. package/dist/viewer/mermaid.js +12 -0
  115. package/dist/viewer-build.json +1 -1
  116. package/dist/viewer-service.mjs +69 -13
  117. package/package.json +10 -9
  118. package/skills/rsp/SKILL.md +9 -7
  119. package/skills/rsp/references/closeout.md +4 -4
  120. package/skills/rsp/references/durable-review.md +6 -9
  121. package/skills/rsp/references/work-model.md +4 -4
  122. package/skills/rsp-commit/SKILL.md +2 -2
  123. package/skills/rsp-doc/SKILL.md +1 -1
  124. package/skills/rsp-implement/SKILL.md +1 -1
  125. package/skills/rsp-review/SKILL.md +6 -6
  126. package/skills/rsp-review/references/document-review.md +2 -2
  127. package/skills/rsp-shape/references/planning.md +2 -2
  128. package/skills/rsp-verify/SKILL.md +1 -1
  129. package/dist/chunk-U56XMIOO.mjs +0 -66
@@ -21,6 +21,7 @@ import { isAbsolute, relative, resolve } from "path";
21
21
 
22
22
  // src/architecture/selection.ts
23
23
  function selectArchitecture(model, selection) {
24
+ const view = selection.kind === "view" ? model.views.find((view2) => view2.id === selection.id) : void 0;
24
25
  const selected = new Set(model.nodes.map((node) => node.id));
25
26
  if (selection.kind === "focus") {
26
27
  if (!selected.has(selection.id))
@@ -45,13 +46,14 @@ function selectArchitecture(model, selection) {
45
46
  }
46
47
  }
47
48
  if (selection.kind === "view") {
48
- const view = model.views.find((view2) => view2.id === selection.id);
49
49
  if (!view)
50
50
  throw new Error(`Unknown architecture view: ${selection.id}`);
51
51
  selected.clear();
52
52
  view.include.forEach((id) => selected.add(id));
53
53
  }
54
- const relations = model.relations.filter((edge) => selected.has(edge.source) || selected.has(edge.target));
54
+ const relations = view?.scenario ? [] : model.relations.filter(
55
+ (edge) => (selected.has(edge.source) || selected.has(edge.target)) && (view?.boundary !== "exclude" || selected.has(edge.source) && selected.has(edge.target)) && (!view?.relationTypes || view.relationTypes.includes(edge.type)) && (!view?.relationIds || view.relationIds.includes(edge.id))
56
+ );
55
57
  const visible = /* @__PURE__ */ new Set([...selected, ...relations.flatMap((edge) => [edge.source, edge.target])]);
56
58
  return { selected, visible, relations };
57
59
  }
@@ -100,8 +102,60 @@ function parseArchitecture(content) {
100
102
  if (value.schemaVersion !== 1)
101
103
  throw new Error(`Unsupported architecture schemaVersion: ${String(value.schemaVersion)}`);
102
104
  const nodes = collection(value.nodes, "nodes").map((node) => ({ id: text(node.id, "node.id"), title: text(node.title, "node.title"), description: text(node.description, "node.description"), ...node.parent === void 0 ? {} : { parent: text(node.parent, "node.parent") } }));
103
- const relations = collection(value.relations, "relations").map((edge) => ({ id: text(edge.id, "relation.id"), source: text(edge.source, "relation.source"), target: text(edge.target, "relation.target"), type: text(edge.type, "relation.type"), description: text(edge.description, "relation.description") }));
104
- const views = collection(value.views, "views").map((view) => ({ id: text(view.id, "view.id"), title: text(view.title, "view.title"), node: text(view.node, "view.node"), include: strings(view.include, "view.include") }));
105
+ const relations = collection(value.relations, "relations").map((edge) => ({ id: text(edge.id, "relation.id"), source: text(edge.source, "relation.source"), target: text(edge.target, "relation.target"), type: text(edge.type, "relation.type"), ...edge.label === void 0 ? {} : { label: text(edge.label, "relation.label") }, description: text(edge.description, "relation.description") }));
106
+ const views = collection(value.views, "views").map((view) => {
107
+ if (view.boundary !== void 0 && view.boundary !== "include" && view.boundary !== "exclude")
108
+ throw new Error("Architecture view.boundary must be include or exclude");
109
+ const result = {
110
+ id: text(view.id, "view.id"),
111
+ title: text(view.title, "view.title"),
112
+ node: text(view.node, "view.node"),
113
+ include: view.scenario === void 0 ? strings(view.include, "view.include") : [],
114
+ ...view.relationTypes === void 0 ? {} : { relationTypes: strings(view.relationTypes, "view.relationTypes") },
115
+ ...view.relationIds === void 0 ? {} : { relationIds: strings(view.relationIds, "view.relationIds") },
116
+ ...view.boundary === void 0 ? {} : { boundary: view.boundary }
117
+ };
118
+ if (view.scenario !== void 0) {
119
+ if (view.include !== void 0 || view.relationTypes !== void 0 || view.relationIds !== void 0 || view.boundary !== void 0)
120
+ throw new Error("Scenario views use participants instead of structural selectors");
121
+ const scenario = object(view.scenario);
122
+ const participants = collection(scenario.participants, "scenario.participants").map((participant) => ({
123
+ id: text(participant.id, "participant.id"),
124
+ node: text(participant.node, "participant.node"),
125
+ ...participant.title === void 0 ? {} : { title: text(participant.title, "participant.title") }
126
+ }));
127
+ const steps = collection(scenario.steps, "scenario.steps").map((step) => {
128
+ if (!["call", "return", "event"].includes(String(step.type)))
129
+ throw new Error("Scenario step.type must be call, return or event");
130
+ return {
131
+ id: text(step.id, "step.id"),
132
+ source: text(step.source, "step.source"),
133
+ target: text(step.target, "step.target"),
134
+ type: step.type,
135
+ label: text(step.label, "step.label"),
136
+ ...step.description === void 0 ? {} : { description: text(step.description, "step.description") },
137
+ ...step.replyTo === void 0 ? {} : { replyTo: text(step.replyTo, "step.replyTo") }
138
+ };
139
+ });
140
+ unique(participants, "participant");
141
+ unique(steps, "step");
142
+ if (!participants.length || !steps.length)
143
+ throw new Error("Scenarios require participants and steps");
144
+ const participantIds = new Set(participants.map((participant) => participant.id));
145
+ steps.forEach((step, index) => {
146
+ if (!participantIds.has(step.source) || !participantIds.has(step.target))
147
+ throw new Error(`Missing scenario participant in step: ${step.id}`);
148
+ if (step.replyTo !== void 0) {
149
+ const call = steps.slice(0, index).find((candidate) => candidate.id === step.replyTo);
150
+ if (step.type !== "return" || call?.type !== "call" || call.source !== step.target || call.target !== step.source)
151
+ throw new Error(`Invalid earlier call reference in step: ${step.id}`);
152
+ }
153
+ });
154
+ result.scenario = { participants, steps };
155
+ result.include = [...new Set(participants.map((participant) => participant.node))];
156
+ }
157
+ return result;
158
+ });
105
159
  const bindings = collection(value.bindings, "bindings").map((binding) => {
106
160
  const file = projectPath(text(binding.file, "binding.file"));
107
161
  if (!/\.md$/i.test(file))
@@ -140,6 +194,10 @@ function parseArchitecture(content) {
140
194
  views.forEach((view) => {
141
195
  requireNode(view.node);
142
196
  view.include.forEach(requireNode);
197
+ view.relationIds?.forEach((id) => {
198
+ if (!relations.some((edge) => edge.id === id))
199
+ throw new Error(`Missing architecture relation: ${id}`);
200
+ });
143
201
  });
144
202
  bindings.forEach((binding) => requireNode(binding.node));
145
203
  return { schemaVersion: 1, nodes, relations, views, bindings };
@@ -0,0 +1,108 @@
1
+ #!/usr/bin/env node
2
+ import {
3
+ PKG_ROOT
4
+ } from "./chunk-P3KO3GZW.mjs";
5
+
6
+ // src/viewer/build-assets.mjs
7
+ import { createHash } from "crypto";
8
+ import { lstat, readdir, readFile } from "fs/promises";
9
+ import { join, sep } from "path";
10
+ var viewerEntries = { app: "app.js", style: "app.css", mermaid: "mermaid.js" };
11
+ var mismatch = () => new Error("Viewer assets do not match the startup build; rebuild or reinstall and retry");
12
+ function validateAssetPaths(paths) {
13
+ if (!Array.isArray(paths) || paths.some((path) => typeof path !== "string" || !/^(?:[\w-]+\/)*[\w-]+\.(?:js|css)$/.test(path)) || new Set(paths).size !== paths.length || Object.values(viewerEntries).some((path) => !paths.includes(path))) {
14
+ throw mismatch();
15
+ }
16
+ return (
17
+ /** @type {string[]} */
18
+ paths
19
+ );
20
+ }
21
+ function parseBuildManifest(source) {
22
+ const manifest = JSON.parse(source);
23
+ if (!manifest || typeof manifest.identity !== "string" || !/^[a-f0-9]{64}$/.test(manifest.identity))
24
+ throw mismatch();
25
+ return { identity: (
26
+ /** @type {string} */
27
+ manifest.identity
28
+ ), assets: validateAssetPaths(manifest.assets) };
29
+ }
30
+ async function readBuildSnapshot(root, paths) {
31
+ const allowed = new Set(validateAssetPaths(paths));
32
+ const hash = createHash("sha256");
33
+ const assets = /* @__PURE__ */ new Map();
34
+ const directory = join(root, "dist");
35
+ for (const file of (await readdir(directory, { recursive: true })).map((file2) => file2.split(sep).join("/")).sort()) {
36
+ if (!/\.(?:mjs|js|css)$/.test(file))
37
+ continue;
38
+ const path = join(directory, file);
39
+ if (!(await lstat(path)).isFile())
40
+ throw mismatch();
41
+ const content = await readFile(path);
42
+ hash.update(file).update(content);
43
+ if (file.startsWith("viewer/") && allowed.has(file.slice("viewer/".length))) {
44
+ assets.set(`/${file.slice("viewer/".length)}`, {
45
+ content,
46
+ type: file.endsWith(".css") ? "text/css" : "text/javascript"
47
+ });
48
+ }
49
+ }
50
+ if (assets.size !== allowed.size)
51
+ throw mismatch();
52
+ return { identity: hash.digest("hex"), assets };
53
+ }
54
+
55
+ // src/viewer/runtime.ts
56
+ import { createHash as createHash2 } from "crypto";
57
+ import { readFile as readFile2, realpath } from "fs/promises";
58
+ import { homedir } from "os";
59
+ import { join as join2 } from "path";
60
+ var VIEWER_PROTOCOL = 1;
61
+ async function viewerRuntime(installation = PKG_ROOT) {
62
+ const root = await realpath(installation);
63
+ const { version } = JSON.parse(await readFile2(join2(root, "package.json"), "utf8"));
64
+ const build = (await readFile2(join2(root, "dist/viewer-build.json"), "utf8")).trim();
65
+ const identity = createHash2("sha256").update(JSON.stringify({ root, version, build, protocol: VIEWER_PROTOCOL })).digest("hex");
66
+ const directory = join2(homedir(), ".cache", "rsp", "viewer");
67
+ return { root, version, build, identity, directory, recordPath: join2(directory, `${identity}.json`), lockPath: join2(directory, `${identity}.lock`) };
68
+ }
69
+ async function snapshotViewerRuntime(root, identity) {
70
+ const runtime = await viewerRuntime(root);
71
+ if (runtime.identity !== identity)
72
+ throw new Error("Viewer build changed during startup; retry");
73
+ const manifest = parseBuildManifest(runtime.build);
74
+ const snapshot = await readBuildSnapshot(root, manifest.assets);
75
+ if (snapshot.identity !== manifest.identity || (await viewerRuntime(root)).identity !== identity) {
76
+ throw new Error("Viewer assets do not match the startup build; rebuild or reinstall and retry");
77
+ }
78
+ return { version: runtime.version, assets: snapshot.assets };
79
+ }
80
+ async function serviceRequest(record, path, body, timeoutMs = 2500) {
81
+ const response = await fetch(`http://127.0.0.1:${record.port}${path}`, { method: body === void 0 ? "GET" : "POST", headers: { Authorization: `Bearer ${record.adminToken}`, ...body === void 0 ? {} : { "Content-Type": "application/json" } }, ...body === void 0 ? {} : { body: JSON.stringify(body) }, signal: AbortSignal.timeout(timeoutMs) });
82
+ if (!response.ok)
83
+ throw new Error(await response.text());
84
+ const result = await response.json();
85
+ if (result.identity !== record.identity || result.protocol !== VIEWER_PROTOCOL)
86
+ throw new Error("Viewer identity/protocol mismatch");
87
+ return result;
88
+ }
89
+ async function discoverService(path, identity) {
90
+ try {
91
+ const record = JSON.parse(await readFile2(path, "utf8"));
92
+ if (record.identity !== identity || record.protocol !== VIEWER_PROTOCOL || !Number.isInteger(record.port) || record.port < 1 || record.port > 65535 || typeof record.adminToken !== "string")
93
+ return null;
94
+ await serviceRequest(record, "/control/status");
95
+ return record;
96
+ } catch {
97
+ return null;
98
+ }
99
+ }
100
+
101
+ export {
102
+ viewerEntries,
103
+ VIEWER_PROTOCOL,
104
+ viewerRuntime,
105
+ snapshotViewerRuntime,
106
+ serviceRequest,
107
+ discoverService
108
+ };
package/dist/cli.mjs CHANGED
@@ -11,7 +11,7 @@ import {
11
11
  readProjectRuntime,
12
12
  readProjectVersion,
13
13
  selectProjectRuntime
14
- } from "./chunk-JO6NDJM4.mjs";
14
+ } from "./chunk-AUZYUJ46.mjs";
15
15
  import {
16
16
  ArchiveHistoryError,
17
17
  GROUP_BRIEF_FILENAME,
@@ -189,8 +189,15 @@ Selection: ${result.selection.kind}${result.selection.id ? ` ${result.selection.
189
189
  console.log(`${node.boundary ? "[boundary] " : ""}${node.id}: ${node.title} \u2014 ${node.description}${node.parent ? ` (parent: ${node.parent})` : ""}`);
190
190
  for (const binding of node.bindings) console.log(` ${binding.file}${binding.headings ? ` > ${binding.headings.join(" > ")}` : ""} (scope: ${binding.scope}; ${binding.inherited ? `inherited from ${binding.origin}` : `direct on ${binding.origin}`})`);
191
191
  }
192
- for (const edge of result.relations) console.log(`Relation ${edge.id}: ${edge.source} -> ${edge.target} [${edge.type}]: ${edge.description}`);
193
- for (const view of result.views) console.log(`View ${view.id}: ${view.title} (owner: ${view.node}; include: ${view.include.join(", ")})`);
192
+ for (const edge of result.relations) console.log(`Relation ${edge.id}: ${edge.source} -> ${edge.target} [${edge.type}]${edge.label ? ` ${edge.label}` : ""}: ${edge.description}`);
193
+ for (const view of result.views) {
194
+ console.log(`View ${view.id}: ${view.title} (owner: ${view.node}; include: ${view.include.join(", ")})`);
195
+ if (view.relationTypes || view.relationIds || view.boundary)
196
+ console.log(` Filters: types=${view.relationTypes?.join(", ") ?? "*"}; relations=${view.relationIds?.join(", ") ?? "*"}; boundary=${view.boundary ?? "include"}`);
197
+ for (const participant of view.scenario?.participants ?? [])
198
+ console.log(` Participant ${participant.id}: ${participant.node}${participant.title ? ` (${participant.title})` : ""}`);
199
+ view.scenario?.steps.forEach((step, index) => console.log(` ${index + 1}. ${step.id}: ${step.source} -> ${step.target} [${step.type}] ${step.label}${step.replyTo ? ` (reply to ${step.replyTo})` : ""}${step.description ? ` \u2014 ${step.description}` : ""}`));
200
+ }
194
201
  for (const diagnostic of result.diagnostics) console.log(`${diagnostic.code}: ${diagnostic.message}`);
195
202
  if (result.configured)
196
203
  console.log(`Source: ${result.source.file} @ ${result.source.revision}`);
@@ -204,7 +211,7 @@ var viewCommand = defineCommand({
204
211
  const unknown = Object.keys(args).filter((key) => !["action", "open", "_"].includes(key));
205
212
  if (unknown.length || args._.length > 1 || args.action && !args.open)
206
213
  throw new Error("rsp view accepts only an optional status/stop action or --no-open");
207
- const { runView } = await import("./client-EHRWH5Q7.mjs");
214
+ const { runView } = await import("./client-U2PN3VS4.mjs");
208
215
  await runView(args.action, args.open);
209
216
  }
210
217
  });
@@ -748,8 +755,8 @@ ${changeSectionHeading("verify")}
748
755
  ### Optional
749
756
  - Manual or environment:
750
757
  - [ ] ${placeholder}
751
- - Coverage:
752
- - ${placeholder}
758
+ ### Conclusions
759
+ - ${placeholder}
753
760
 
754
761
  ${changeSectionHeading("blockers")}
755
762
  - none
@@ -799,8 +806,8 @@ ${changeSectionHeading("verify")}
799
806
  ### Optional
800
807
  - Manual or environment:
801
808
  - [ ] ${template.manualVerify}
802
- - Coverage:
803
- - ${placeholder}
809
+ ### Conclusions
810
+ - ${placeholder}
804
811
 
805
812
  ${changeSectionHeading("blockers")}
806
813
  - none
@@ -843,7 +850,7 @@ function changeSectionHeading(sectionId) {
843
850
  spec: "Describe the contract delta and acceptance conditions, referencing affected existing Specs; do not copy the full baseline or implementation steps.",
844
851
  design: "Explain the current approach, boundaries, and necessary tradeoffs; replace obsolete plans while preserving decision reasons and useful outcome comparisons.",
845
852
  tasks: "Keep current checkable work and actual completion; revise or reopen invalidated tasks within authorized scope. Do not append routine attempts, fixes, retries, or check runs.",
846
- verify: "Keep required/optional checks and only details needed to judge acceptance, evidence applicability, or locate necessary evidence. Do not repeat check results or retain commands, counts, or review steps merely because they occurred. Preserve applicable coverage, gaps, and distinct review/human acceptance; no run history.",
853
+ verify: "Use Required/Optional checklists and an optional short, non-nested Conclusions list only. Uncheck failed, unrun or invalidated evidence. Keep current limits, applicability conditions or required failure dispositions; replace stale conclusions. No prose paragraphs, tables, repeated results or repair history. Remove Conclusions when unnecessary.",
847
854
  blockers: "Name unresolved decisions or dependencies that prevent progress; use none when there are no blockers."
848
855
  };
849
856
  return `${renderDocumentSectionHeading(CHANGE_DOCUMENT_SCHEMA, sectionId)}
@@ -3,7 +3,7 @@ import {
3
3
  discoverService,
4
4
  serviceRequest,
5
5
  viewerRuntime
6
- } from "./chunk-U56XMIOO.mjs";
6
+ } from "./chunk-DNRGBQS7.mjs";
7
7
  import "./chunk-P3KO3GZW.mjs";
8
8
 
9
9
  // src/viewer/client.ts
@@ -1,2 +1,2 @@
1
- /*! tailwindcss v4.3.3 | MIT License | https://tailwindcss.com */
2
- @layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-border-style:solid;--tw-font-weight:initial;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-outline-style:solid;--tw-backdrop-blur:initial;--tw-backdrop-brightness:initial;--tw-backdrop-contrast:initial;--tw-backdrop-grayscale:initial;--tw-backdrop-hue-rotate:initial;--tw-backdrop-invert:initial;--tw-backdrop-opacity:initial;--tw-backdrop-saturate:initial;--tw-backdrop-sepia:initial;--tw-tracking:initial;--tw-leading:initial}}}@layer theme{:root,:host{--font-sans:"Avenir Next", "Segoe UI", sans-serif;--spacing:.25rem;--text-xs:.75rem;--text-xs--line-height:calc(1 / .75);--text-sm:.875rem;--text-sm--line-height:calc(1.25 / .875);--text-lg:1.125rem;--text-lg--line-height:calc(1.75 / 1.125);--text-xl:1.25rem;--text-xl--line-height:calc(1.75 / 1.25);--font-weight-normal:400;--font-weight-medium:500;--font-weight-semibold:600;--tracking-wide:.025em;--leading-relaxed:1.625;--radius-sm:.25rem;--radius-md:.375rem;--radius-lg:.5rem;--radius-xl:.75rem;--default-transition-duration:.15s;--default-transition-timing-function:cubic-bezier(.4, 0, .2, 1);--font-reading:"Iowan Old Style", "Palatino Linotype", Palatino, serif;--color-background:#fffefa;--color-foreground:#233c38;--color-primary:#285e50;--color-primary-foreground:#fffefa;--color-muted-foreground:#52655d;--color-accent:#edf1e8;--color-border:#dce2d6;--color-ring:#598e78}}@layer base{:root{font:100%/1.5 var(--font-sans);color:var(--color-foreground);background:#f7f8f2}body{margin:0}:where(.app,.sheet-content,.tooltip-content,.select-content){font-family:var(--font-sans)}:where(.app,.sheet-content,.tooltip-content,.select-content),:where(.app,.sheet-content,.tooltip-content,.select-content) *{box-sizing:border-box}:where(.app,.sheet-content) :where(button,input,select){font:inherit;color:inherit}:where(.app,.sheet-content) button{cursor:pointer}:where(.app,.sheet-content) :where(h1,h2,h3,p){margin:0}:where(.app,.sheet-content) :where(small){color:var(--color-muted-foreground);font-size:.75rem;display:block}:where(.app,.sheet-content) nav{flex-direction:column;gap:4px;display:flex}:where(.app,.sheet-content) nav button{text-align:left;white-space:normal;overflow-wrap:anywhere;justify-content:flex-start}:where(.app,.sheet-content) code{overflow-wrap:anywhere;font-size:.75rem}:where(.app,.sheet-content) summary{cursor:pointer}:where(.app,.sheet-content) summary:focus-visible{outline:2px solid var(--color-ring);outline-offset:4px;border-radius:3px}:where(.app,.sheet-content) a{color:var(--color-primary);text-underline-offset:3px}}@layer components;@layer utilities{.visible{visibility:visible}.sr-only{clip-path:inset(50%);white-space:nowrap;border-width:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}.fixed{position:fixed}.inset-0{inset:0}.inset-y-0{inset-block:0}.right-0{right:0}.left-0{left:0}.container{width:100%}@media (min-width:40rem){.container{max-width:40rem}}@media (min-width:48rem){.container{max-width:48rem}}@media (min-width:64rem){.container{max-width:64rem}}@media (min-width:80rem){.container{max-width:80rem}}@media (min-width:96rem){.container{max-width:96rem}}.block{display:block}.contents{display:contents}.flex{display:flex}.inline-flex{display:inline-flex}.size-4{width:calc(var(--spacing) * 4);height:calc(var(--spacing) * 4)}.size-8{width:calc(var(--spacing) * 8);height:calc(var(--spacing) * 8)}.size-\[32px\]{width:32px;height:32px}.min-h-9{min-height:calc(var(--spacing) * 9)}.min-h-\[32px\]{min-height:32px}.w-full{width:100%}.min-w-0{min-width:0}.shrink-0{flex-shrink:0}.-rotate-90{rotate:-90deg}.rotate-90{rotate:90deg}.resize{resize:both}.flex-col{flex-direction:column}.items-center{align-items:center}.justify-center{justify-content:center}.gap-2{gap:calc(var(--spacing) * 2)}.rounded-md{border-radius:var(--radius-md)}.border{border-style:var(--tw-border-style);border-width:1px}.border-border{border-color:var(--color-border)}.border-primary{border-color:var(--color-primary)}.border-transparent{border-color:#0000}.bg-background{background-color:var(--color-background)}.bg-foreground{background-color:var(--color-foreground)}.bg-foreground\/30{background-color:#233c384d}@supports (color:color-mix(in lab, red, red)){.bg-foreground\/30{background-color:color-mix(in oklab, var(--color-foreground) 30%, transparent)}}.bg-primary{background-color:var(--color-primary)}.bg-transparent{background-color:#0000}.fill-foreground{fill:var(--color-foreground)}.p-0{padding:0}.p-1{padding:var(--spacing)}.px-2\.5{padding-inline:calc(var(--spacing) * 2.5)}.px-3{padding-inline:calc(var(--spacing) * 3)}.py-1\.5{padding-block:calc(var(--spacing) * 1.5)}.py-2{padding-block:calc(var(--spacing) * 2)}.text-lg{font-size:var(--text-lg);line-height:var(--tw-leading,var(--text-lg--line-height))}.text-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.text-xs{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}.font-medium{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.text-background{color:var(--color-background)}.text-foreground{color:var(--color-foreground)}.text-primary-foreground{color:var(--color-primary-foreground)}.shadow{--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a), 0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.shadow-md{--tw-shadow:0 4px 6px -1px var(--tw-shadow-color,#0000001a), 0 2px 4px -2px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.shadow-xl{--tw-shadow:0 20px 25px -5px var(--tw-shadow-color,#0000001a), 0 8px 10px -6px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.outline{outline-style:var(--tw-outline-style);outline-width:1px}.backdrop-blur-\[2px\]{--tw-backdrop-blur:blur(2px);-webkit-backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,)}.transition-colors{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.outline-none{--tw-outline-style:none;outline-style:none}.placeholder\:text-muted-foreground::placeholder{color:var(--color-muted-foreground)}@media (hover:hover){.hover\:bg-accent:hover{background-color:var(--color-accent)}.hover\:bg-primary\/90:hover{background-color:#285e50e6}@supports (color:color-mix(in lab, red, red)){.hover\:bg-primary\/90:hover{background-color:color-mix(in oklab, var(--color-primary) 90%, transparent)}}}.focus-visible\:border-primary:focus-visible{border-color:var(--color-primary)}.focus-visible\:ring-2:focus-visible{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.focus-visible\:ring-ring:focus-visible{--tw-ring-color:var(--color-ring)}.focus-visible\:ring-ring\/40:focus-visible{--tw-ring-color:#598e7866}@supports (color:color-mix(in lab, red, red)){.focus-visible\:ring-ring\/40:focus-visible{--tw-ring-color:color-mix(in oklab, var(--color-ring) 40%, transparent)}}.focus-visible\:ring-offset-2:focus-visible{--tw-ring-offset-width:2px;--tw-ring-offset-shadow:var(--tw-ring-inset,) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color)}.disabled\:pointer-events-none:disabled{pointer-events:none}.disabled\:opacity-50:disabled{opacity:.5}}:where(.app,.sheet-content) nav button{white-space:normal;justify-content:flex-start}.app{height:100dvh;display:flex;overflow:hidden}.sidebar{border-right-style:var(--tw-border-style);border-right-width:1px;border-color:var(--color-border);background:linear-gradient(155deg,#f2f3e9,#f9faf5 72%);flex-direction:column;flex-shrink:0;width:280px;min-height:0;padding:24px 18px 16px;display:flex;overflow:auto}.workspace-entry{margin-bottom:calc(var(--spacing) * 4);align-items:center;gap:calc(var(--spacing) * 2);min-width:0;display:flex}.brand-mark{width:calc(var(--spacing) * 8);height:calc(var(--spacing) * 8);border-radius:var(--radius-lg);background-color:var(--color-foreground);color:var(--color-background);font:24px/1 var(--font-reading);flex-shrink:0;place-items:center;display:grid}.select-trigger{min-height:calc(var(--spacing) * 9);justify-content:space-between;align-items:center;gap:calc(var(--spacing) * 2);border-radius:var(--radius-md);border-style:var(--tw-border-style);border-width:1px;border-color:var(--color-border);background-color:var(--color-background);min-width:0;padding-inline:calc(var(--spacing) * 2.5);padding-block:calc(var(--spacing) * 2);font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));--tw-outline-style:none;outline-style:none;display:inline-flex}@media (hover:hover){.select-trigger:hover{background-color:var(--color-accent)}}.select-trigger:focus-visible{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);--tw-ring-color:var(--color-ring)}.select-trigger:disabled{pointer-events:none;opacity:.5}.select-trigger>[data-slot],.select-trigger>span{text-overflow:ellipsis;white-space:nowrap;min-width:0;overflow:hidden}.select-trigger>svg{pointer-events:none}.select-content{z-index:120;border-radius:var(--radius-md);border-style:var(--tw-border-style);border-width:1px;border-color:var(--color-border);background-color:var(--color-background);color:var(--color-foreground);--tw-shadow:0 10px 15px -3px var(--tw-shadow-color,#0000001a), 0 4px 6px -4px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);max-height:var(--radix-select-content-available-height);min-width:var(--radix-select-trigger-width);max-width:min(480px,100vw - 24px);overflow:hidden}.select-item{cursor:pointer;border-radius:var(--radius-sm);padding-block:calc(var(--spacing) * 2);padding-right:calc(var(--spacing) * 8);padding-left:calc(var(--spacing) * 2.5);font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));--tw-outline-style:none;overflow-wrap:anywhere;outline-style:none;align-items:center;display:flex;position:relative}.select-item[data-highlighted]{background-color:var(--color-accent);color:var(--color-primary)}.select-item[data-disabled]{pointer-events:none;opacity:.5}.select-indicator{right:calc(var(--spacing) * 2);position:absolute}.select-group-label{padding-inline:calc(var(--spacing) * 3);padding-top:calc(var(--spacing) * 3);padding-bottom:var(--spacing);font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height));--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold);color:var(--color-muted-foreground)}.select-option-copy{min-width:0}.select-option-description{margin-top:var(--spacing);font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height));color:var(--color-muted-foreground);overflow-wrap:anywhere;display:block}.workspace-identity{text-overflow:ellipsis;white-space:nowrap;padding-inline:calc(var(--spacing) * 2);font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height));color:var(--color-muted-foreground);display:block;overflow:hidden}.workspace-option-path{margin-top:calc(var(--spacing) * .5);text-overflow:ellipsis;white-space:nowrap;max-width:min(360px,100vw - 80px);display:block;overflow:hidden}.select-scroll{height:calc(var(--spacing) * 6);background-color:var(--color-background);justify-content:center;align-items:center;display:flex}.workspace-picker{flex:1;min-width:0}.workspace-picker .select-trigger{min-height:calc(var(--spacing) * 10);width:100%;padding-inline:calc(var(--spacing) * 2);font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold);background-color:#0000;border-color:#0000}@media (hover:hover){.workspace-picker .select-trigger:hover{border-color:var(--color-border);background-color:var(--color-accent)}}.sidebar-section-heading h2{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height));--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold);--tw-tracking:var(--tracking-wide);letter-spacing:var(--tracking-wide);color:var(--color-muted-foreground);text-transform:uppercase}.search{position:relative}.search input{font-size:.875rem}.search-results{z-index:30;margin-top:calc(var(--spacing) * 2);border-radius:var(--radius-lg);border-style:var(--tw-border-style);border-width:1px;border-color:var(--color-border);background-color:var(--color-background);width:100%;padding:var(--spacing);--tw-shadow:0 10px 15px -3px var(--tw-shadow-color,#0000001a), 0 4px 6px -4px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);max-height:280px;position:absolute;overflow:auto}.search-results [role=option]{cursor:pointer;border-radius:var(--radius-md);padding-inline:calc(var(--spacing) * 2.5);padding-block:calc(var(--spacing) * 2);font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.search-results [aria-selected=true]{background-color:var(--color-accent)}.search-results [aria-disabled=true]{cursor:not-allowed;color:var(--color-muted-foreground)}.search-results small{margin-top:var(--spacing);font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}.search-results p{padding:calc(var(--spacing) * 3);font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height));color:var(--color-muted-foreground)}.sidebar-section-heading{justify-content:space-between;align-items:center;margin:30px 8px 9px;display:flex}.sidebar-section-heading span{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height));color:var(--color-muted-foreground)}.view-navigation button{min-height:calc(var(--spacing) * 11);justify-content:flex-start;gap:calc(var(--spacing) * 3);border-radius:var(--radius-lg);padding-inline:calc(var(--spacing) * 3);padding-block:calc(var(--spacing) * 2);font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));position:relative}.view-navigation button[aria-current=page]{border-color:var(--color-border);background-color:var(--color-background);color:var(--color-primary);--tw-shadow:0 1px 2px 0 var(--tw-shadow-color,#0000000d);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.view-dot{width:calc(var(--spacing) * 1.5);height:calc(var(--spacing) * 1.5);background-color:var(--color-border);border-radius:3.40282e38px;flex-shrink:0}[aria-current=page] .view-dot{background-color:var(--color-primary);box-shadow:0 0 0 3px #285e5010}.view-navigation small{margin-top:calc(var(--spacing) * .5);font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height));--tw-font-weight:var(--font-weight-normal);font-weight:var(--font-weight-normal)}.view-navigation .all-nodes{margin-top:calc(var(--spacing) * 3);min-height:calc(var(--spacing) * 9);border-inline-style:var(--tw-border-style);border-inline-width:0;border-top-style:var(--tw-border-style);border-top-width:1px;border-bottom-style:var(--tw-border-style);border-bottom-width:0;border-color:var(--color-border);padding-inline:calc(var(--spacing) * 3);font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));color:var(--color-muted-foreground);border-radius:0}.empty-views{margin-top:calc(var(--spacing) * 3);padding-inline:calc(var(--spacing) * 2);font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height));color:var(--color-muted-foreground)}.sidebar-footer{padding-top:calc(var(--spacing) * 6);margin-top:auto}.language-picker{justify-content:space-between;align-items:center;gap:calc(var(--spacing) * 3);border-top-style:var(--tw-border-style);border-top-width:1px;border-color:var(--color-border);padding-inline:calc(var(--spacing) * 2);padding-top:calc(var(--spacing) * 4);padding-bottom:calc(var(--spacing) * 2);font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height));color:var(--color-muted-foreground);flex-wrap:wrap;display:flex}.language-picker .select-trigger{min-height:calc(var(--spacing) * 9);font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));width:126px}.source{padding-top:var(--spacing);font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height));color:var(--color-muted-foreground);overflow-wrap:anywhere}.source summary{padding:8px}.source p{margin:8px}.source code{padding-inline:calc(var(--spacing) * 2);font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height));display:block}.warning{color:#876129}.navigation-toggle{display:none}.workbench{flex-direction:column;flex:1;min-width:0;min-height:0;display:flex;position:relative}.view-toolbar{align-items:center;gap:calc(var(--spacing) * 3);border-bottom-style:var(--tw-border-style);border-bottom-width:1px;border-color:var(--color-border);background-color:var(--color-background);flex-shrink:0;height:65px;padding:12px 20px;display:flex}.view-toolbar h1{text-overflow:ellipsis;white-space:nowrap;min-width:0;font:1.375rem/1.2 var(--font-reading);letter-spacing:-.35px;flex:1;overflow:hidden}.context-label{border-radius:var(--radius-md);background-color:var(--color-accent);padding-inline:calc(var(--spacing) * 2);padding-block:var(--spacing);font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height));color:var(--color-muted-foreground)}.refresh{margin-left:auto}.workspace{flex:1;min-width:0;min-height:0;display:flex;position:relative}.canvas{flex:1;min-width:0;min-height:0;position:relative}.opening{padding:calc(var(--spacing) * 6);font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));color:var(--color-muted-foreground)}.canvas-controls{bottom:calc(var(--spacing) * 4);left:calc(var(--spacing) * 4);z-index:10;align-items:center;gap:var(--spacing);border-radius:var(--radius-lg);border-style:var(--tw-border-style);border-width:1px;border-color:var(--color-border);background-color:var(--color-background);padding:var(--spacing);--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a), 0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);display:flex;position:absolute}.canvas-controls button{background-color:#0000;border-color:#0000}.fallback{top:calc(var(--spacing) * 3);right:calc(var(--spacing) * 4);left:calc(var(--spacing) * 4);z-index:20;border-radius:var(--radius-md);border-style:var(--tw-border-style);padding-inline:calc(var(--spacing) * 3);padding-block:calc(var(--spacing) * 2);font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));background:#fff8e9;border-width:1px;border-color:#e5d8bb;position:absolute}.error{padding-inline:calc(var(--spacing) * 4);padding-block:calc(var(--spacing) * 3);font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));color:#924636;overflow-wrap:anywhere;background:#fff0e9;flex-shrink:0}.error p{margin-top:4px}.error details{margin-top:8px}.error pre{white-space:pre-wrap;max-height:160px;margin-bottom:0;overflow:auto}.reading-status{border-bottom-style:var(--tw-border-style);border-bottom-width:1px;border-color:var(--color-border);background-color:var(--color-accent);padding-inline:calc(var(--spacing) * 5);padding-block:calc(var(--spacing) * 3);font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.empty-architecture{top:calc(var(--spacing) * 3);left:calc(var(--spacing) * 4);z-index:10;position:absolute}.workbench>.error{z-index:70;position:absolute;top:65px;left:0;right:0;box-shadow:0 3px 10px #233c3810}.undrawn{top:calc(var(--spacing) * 4);left:calc(var(--spacing) * 4);z-index:10;border-radius:var(--radius-md);border-style:var(--tw-border-style);padding-inline:calc(var(--spacing) * 3);padding-block:calc(var(--spacing) * 2);font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));background:#fffaf0;border-width:1px;border-color:#e5d8bb;max-width:80%;max-height:45%;position:absolute;overflow:auto}.undrawn nav{margin-top:10px}.detail-panel{top:calc(var(--spacing) * 4);right:calc(var(--spacing) * 4);z-index:20;border-radius:var(--radius-xl);border-style:var(--tw-border-style);border-width:1px;border-color:var(--color-border);background-color:var(--color-background);outline:none;width:360px;max-width:calc(100% - 32px);max-height:min(560px,100% - 32px);padding:16px 18px 18px;position:absolute;overflow:auto;box-shadow:0 12px 40px #233c381c}.detail-panel:focus-visible{box-shadow:0 0 0 2px var(--color-ring), 0 12px 40px #233c381c}.detail-panel.card-left{left:16px;right:auto}.detail-panel.card-bottom{top:auto;bottom:16px}.detail-heading{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height));--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium);--tw-tracking:var(--tracking-wide);letter-spacing:var(--tracking-wide);color:var(--color-muted-foreground);text-transform:uppercase;justify-content:space-between;align-items:center;display:flex}.detail-heading button{font-size:var(--text-xl);line-height:var(--tw-leading,var(--text-xl--line-height));background-color:#0000;border-color:#0000;width:32px;height:32px;min-height:32px;margin:-4px -4px -4px 0;padding:0}.detail-panel h2{font:1.6875rem/1.15 var(--font-reading);letter-spacing:-.4px;margin:10px 0 12px}.detail-panel p{margin-block:calc(var(--spacing) * 2);font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));--tw-leading:var(--leading-relaxed);line-height:var(--leading-relaxed)}.detail-panel h3{margin-bottom:calc(var(--spacing) * 2);font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height));--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold);--tw-tracking:var(--tracking-wide);letter-spacing:var(--tracking-wide);color:var(--color-muted-foreground);text-transform:uppercase;margin-top:20px}.detail-panel nav button{align-items:flex-start;gap:var(--spacing);padding-block:calc(var(--spacing) * 2);font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));flex-direction:column}.detail-panel nav .navigation-item{align-items:center;gap:calc(var(--spacing) * 2.5);padding-inline:calc(var(--spacing) * 2);padding-block:calc(var(--spacing) * 2.5);color:var(--color-primary);border-color:#0000;flex-direction:row}.navigation-icon{width:calc(var(--spacing) * 5);height:calc(var(--spacing) * 5);flex-shrink:0;align-self:flex-start}.navigation-copy{text-align:left;overflow-wrap:anywhere;flex:1;min-width:0}.navigation-title{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium);text-underline-offset:4px;text-decoration-line:underline;text-decoration-color:#0000}.navigation-item:hover .navigation-title{text-decoration-color:currentColor}.navigation-chevron{color:var(--color-muted-foreground)}.navigation-copy small{margin-top:var(--spacing);--tw-font-weight:var(--font-weight-normal);font-weight:var(--font-weight-normal)}.detail-panel small{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}.structural-parent{color:var(--color-muted-foreground)}.text-button{border-style:var(--tw-border-style);min-height:0;color:var(--color-primary);background-color:#0000;border-width:0;padding:0;display:inline}.text-button:hover{background-color:#0000;text-decoration-line:underline}.focus-action{margin-top:calc(var(--spacing) * 4);border-color:var(--color-border);background-color:var(--color-accent);width:100%;color:var(--color-primary);justify-content:flex-start}.detail-panel details{margin-top:calc(var(--spacing) * 4);font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height));color:var(--color-muted-foreground)}.detail-panel .object-relationships{border-top-style:var(--tw-border-style);border-top-width:1px;border-color:var(--color-border);padding-top:calc(var(--spacing) * 3)}.object-relationships summary span{margin-left:calc(var(--spacing) * 2);font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}.object-relationships nav{margin-top:10px}.relationship-row{align-items:flex-start;gap:var(--spacing);border-style:var(--tw-border-style);border-width:0;border-left-style:var(--tw-border-style);border-left-width:2px;border-color:var(--color-border);background-color:var(--color-accent);padding-inline:calc(var(--spacing) * 3);padding-block:calc(var(--spacing) * 2);flex-direction:column}.relationship-row span{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.boundary-label{border-radius:var(--radius-md);border-style:var(--tw-border-style);padding-inline:calc(var(--spacing) * 2.5);padding-block:calc(var(--spacing) * 2);color:#876129;background:#fffaf0;border-width:1px;border-color:#e5d8bb;font-size:var(--text-xs)!important;line-height:var(--tw-leading,var(--text-xs--line-height))!important}.detail-panel dl{margin-block:calc(var(--spacing) * 4);font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.detail-panel dt{margin-top:calc(var(--spacing) * 3);font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height));color:var(--color-muted-foreground)}.detail-panel dd{margin:0}.detail-panel dd code{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height));color:var(--color-muted-foreground);display:block}.document-pane{z-index:30;border-left-style:var(--tw-border-style);border-left-width:1px;border-color:var(--color-border);background-color:var(--color-background);--tw-outline-style:none;inset-block:0;outline-style:none;flex-direction:column;max-width:100%;display:flex;position:absolute;right:0;box-shadow:-12px 0 40px #233c381c}.document-resize{z-index:10;width:calc(var(--spacing) * 2);cursor:col-resize;touch-action:none;inset-block:0;position:absolute;left:-4px}.document-resize:hover,.document-resize:focus-visible{background:#598e7850;outline:none}.document-toolbar{min-height:calc(var(--spacing) * 16);align-items:center;gap:calc(var(--spacing) * 2);border-bottom-style:var(--tw-border-style);border-bottom-width:1px;border-color:var(--color-border);padding-inline:calc(var(--spacing) * 5);padding-block:calc(var(--spacing) * 3);flex-shrink:0;display:flex}.document-toolbar strong{text-overflow:ellipsis;white-space:nowrap;min-width:0;font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height));--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium);flex:1;overflow:hidden}.document-toolbar strong:focus-visible{outline:2px solid var(--color-ring);outline-offset:4px;border-radius:2px}.document-toolbar-actions{align-items:center;gap:calc(var(--spacing) * 1.5);flex-shrink:0;display:flex}.document-toolbar button{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));white-space:nowrap}.reading-layout{flex-direction:column;flex:1;min-height:0;display:flex}.document-toc{border-bottom-style:var(--tw-border-style);border-bottom-width:1px;border-color:var(--color-border);padding-inline:calc(var(--spacing) * 5);padding-block:calc(var(--spacing) * 3);font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));background:#f8f9f2;flex-shrink:0;max-height:160px;overflow:auto}.document-toc summary{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height));--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium);--tw-tracking:var(--tracking-wide);letter-spacing:var(--tracking-wide);color:var(--color-muted-foreground)}.document-toc nav{padding-top:calc(var(--spacing) * 2);gap:0}.document-toc button{min-height:calc(var(--spacing) * 8);padding-block:var(--spacing);font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));background-color:#0000;border-color:#0000}.reading-layout article{min-height:0;font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));overflow-wrap:anywhere;flex:1;padding:24px max(24px,50% - 38ch) 48px;line-height:1.65;overflow:auto}.document-expanded article{padding-block:28px 64px}.document-pane article :where(p,ul,ol,pre,table,blockquote){margin-block:.75em}.document-pane article :where(h1,h2,h3){margin-block:1.25em .5em}.document-pane article h1{font:1.5rem/1.3 var(--font-reading)}.document-pane article h2{font-size:1.25rem;line-height:1.35}.document-pane article h3{font-size:1rem;line-height:1.4}.document-pane article li+li{margin-top:.25rem}.document-pane article li>:where(p,ul,ol){margin-block:.25em}.document-pane article [id]{scroll-margin-top:16px}.document-pane article pre{border-radius:var(--radius-lg);background-color:var(--color-accent);padding:calc(var(--spacing) * 4);line-height:1.5;overflow:auto}.document-pane article code{font-family:ui-monospace,SFMono-Regular,Consolas,monospace;font-size:.875rem}.document-pane article table{border-collapse:collapse;max-width:100%;font-size:.875rem;line-height:1.5;display:block;overflow:auto}.document-pane article :where(td,th){border-style:var(--tw-border-style);border-width:1px;border-color:var(--color-border);padding-inline:calc(var(--spacing) * 3);padding-block:calc(var(--spacing) * 1.5)}.document-pane article blockquote{border-left-style:var(--tw-border-style);border-left-width:2px;border-color:var(--color-border);padding-left:calc(var(--spacing) * 4);color:var(--color-muted-foreground);margin-left:0}.document-pane article img{max-width:100%}.tooltip-content{z-index:110;pointer-events:none;overflow-wrap:anywhere;max-width:min(480px,100vw - 24px);line-height:1.5}.sheet-overlay{z-index:80}.sheet-content{z-index:90}.navigation-sheet{width:min(320px,88vw)}.navigation-sheet .sidebar{width:100%;height:100%}.reading-sheet .document-pane{border:0;width:100%!important}@media (max-width:760px){.app>.sidebar{display:none}.navigation-toggle{font-size:.875rem;display:inline-flex}.view-toolbar{gap:12px;height:58px;padding:10px 12px}.view-toolbar h1{font-size:1.0625rem}.context-label,.refresh{display:none}.detail-panel,.detail-panel.card-left,.detail-panel.card-bottom{width:auto;max-width:none;max-height:58%;padding:14px 17px;inset:auto 12px 12px}.document-resize,.reading-expand{display:none}.document-toolbar{min-height:58px;padding:10px 12px}.document-toolbar strong{font-size:.75rem}.document-toolbar button{font-size:.875rem}.reading-layout article,.document-expanded article{padding:18px 22px 36px}.document-toc{max-height:130px;padding:10px 16px}.canvas-controls{bottom:12px;left:12px}}@media (prefers-reduced-motion:reduce){.app *,.sheet-content *{transition:none!important}}@property --tw-border-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-font-weight{syntax:"*";inherits:false}@property --tw-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-shadow-color{syntax:"*";inherits:false}@property --tw-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-inset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-shadow-color{syntax:"*";inherits:false}@property --tw-inset-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-ring-color{syntax:"*";inherits:false}@property --tw-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-ring-color{syntax:"*";inherits:false}@property --tw-inset-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-ring-inset{syntax:"*";inherits:false}@property --tw-ring-offset-width{syntax:"<length>";inherits:false;initial-value:0}@property --tw-ring-offset-color{syntax:"*";inherits:false;initial-value:#fff}@property --tw-ring-offset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-outline-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-backdrop-blur{syntax:"*";inherits:false}@property --tw-backdrop-brightness{syntax:"*";inherits:false}@property --tw-backdrop-contrast{syntax:"*";inherits:false}@property --tw-backdrop-grayscale{syntax:"*";inherits:false}@property --tw-backdrop-hue-rotate{syntax:"*";inherits:false}@property --tw-backdrop-invert{syntax:"*";inherits:false}@property --tw-backdrop-opacity{syntax:"*";inherits:false}@property --tw-backdrop-saturate{syntax:"*";inherits:false}@property --tw-backdrop-sepia{syntax:"*";inherits:false}@property --tw-tracking{syntax:"*";inherits:false}@property --tw-leading{syntax:"*";inherits:false}
1
+ /*! tailwindcss v4.3.4 | MIT License | https://tailwindcss.com */
2
+ @layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:block))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-border-style:solid;--tw-font-weight:initial;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-outline-style:solid;--tw-backdrop-blur:initial;--tw-backdrop-brightness:initial;--tw-backdrop-contrast:initial;--tw-backdrop-grayscale:initial;--tw-backdrop-hue-rotate:initial;--tw-backdrop-invert:initial;--tw-backdrop-opacity:initial;--tw-backdrop-saturate:initial;--tw-backdrop-sepia:initial;--tw-tracking:initial;--tw-leading:initial}}}@layer theme{:root,:host{--font-sans:"Avenir Next", "Segoe UI", sans-serif;--color-white:#fff;--spacing:.25rem;--text-xs:.75rem;--text-xs--line-height:calc(1 / .75);--text-sm:.875rem;--text-sm--line-height:calc(1.25 / .875);--text-lg:1.125rem;--text-lg--line-height:calc(1.75 / 1.125);--text-xl:1.25rem;--text-xl--line-height:calc(1.75 / 1.25);--font-weight-normal:400;--font-weight-medium:500;--font-weight-semibold:600;--tracking-wide:.025em;--leading-relaxed:1.625;--radius-sm:.25rem;--radius-md:.375rem;--radius-lg:.5rem;--radius-xl:.75rem;--default-transition-duration:.15s;--default-transition-timing-function:cubic-bezier(.4, 0, .2, 1);--font-reading:"Iowan Old Style", "Palatino Linotype", Palatino, serif;--color-background:#fffefa;--color-foreground:#233c38;--color-primary:#285e50;--color-primary-foreground:#fffefa;--color-muted-foreground:#52655d;--color-accent:#edf1e8;--color-border:#dce2d6;--color-ring:#598e78}}@layer base{:root{font:100%/1.5 var(--font-sans);color:var(--color-foreground);--motion-fast:.14s;--motion-panel:.2s;--motion-ease:cubic-bezier(.2, 0, 0, 1);background:#f7f8f2}body{margin:0}:where(.app,.sheet-content,.tooltip-content,.select-content){font-family:var(--font-sans)}:where(.app,.sheet-content,.tooltip-content,.select-content),:where(.app,.sheet-content,.tooltip-content,.select-content) *{box-sizing:border-box}:where(.app,.sheet-content) :where(button,input,select){font:inherit;color:inherit}:where(.app,.sheet-content) button{cursor:pointer}:where(.app,.sheet-content) :where(h1,h2,h3,p){margin:0}:where(.app,.sheet-content) :where(small){color:var(--color-muted-foreground);font-size:.75rem;display:block}:where(.app,.sheet-content) nav{flex-direction:column;gap:4px;display:flex}:where(.app,.sheet-content) nav button{text-align:left;white-space:normal;overflow-wrap:anywhere;justify-content:flex-start}:where(.app,.sheet-content) code{overflow-wrap:anywhere;font-size:.75rem}:where(.app,.sheet-content) summary{cursor:pointer}:where(.app,.sheet-content) summary:focus-visible{outline:2px solid var(--color-ring);outline-offset:4px;border-radius:3px}:where(.app,.sheet-content) a{color:var(--color-primary);text-underline-offset:3px}}@layer components;@layer utilities{.visible{visibility:visible}.sr-only{clip-path:inset(50%);white-space:nowrap;border-width:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}.fixed{position:fixed}.inset-0{inset:0}.inset-y-0{inset-block:0}.right-0{right:0}.left-0{left:0}.block{display:block}.contents{display:contents}.flex{display:flex}.hidden{display:none}.inline-flex{display:inline-flex}.size-4{width:calc(var(--spacing) * 4);height:calc(var(--spacing) * 4)}.size-8{width:calc(var(--spacing) * 8);height:calc(var(--spacing) * 8)}.size-\[32px\]{width:32px;height:32px}.min-h-9{min-height:calc(var(--spacing) * 9)}.min-h-\[32px\]{min-height:32px}.w-full{width:100%}.min-w-0{min-width:0}.shrink-0{flex-shrink:0}.-rotate-90{rotate:-90deg}.rotate-90{rotate:90deg}.resize{resize:both}.flex-col{flex-direction:column}.items-center{align-items:center}.justify-center{justify-content:center}.gap-2{gap:calc(var(--spacing) * 2)}.rounded-md{border-radius:var(--radius-md)}.border{border-style:var(--tw-border-style);border-width:1px}.border-border{border-color:var(--color-border)}.border-primary{border-color:var(--color-primary)}.border-transparent{border-color:#0000}.bg-accent{background-color:var(--color-accent)}.bg-background{background-color:var(--color-background)}.bg-foreground{background-color:var(--color-foreground)}.bg-foreground\/30{background-color:#233c384d}@supports (color:color-mix(in lab, red, red)){.bg-foreground\/30{background-color:color-mix(in oklab, var(--color-foreground) 30%, transparent)}}.bg-primary{background-color:var(--color-primary)}.bg-transparent{background-color:#0000}.fill-foreground{fill:var(--color-foreground)}.p-0{padding:0}.p-1{padding:var(--spacing)}.px-2\.5{padding-inline:calc(var(--spacing) * 2.5)}.px-3{padding-inline:calc(var(--spacing) * 3)}.py-1\.5{padding-block:calc(var(--spacing) * 1.5)}.py-2{padding-block:calc(var(--spacing) * 2)}.text-lg{font-size:var(--text-lg);line-height:var(--tw-leading,var(--text-lg--line-height))}.text-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.text-xs{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}.font-medium{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.text-background{color:var(--color-background)}.text-foreground{color:var(--color-foreground)}.text-primary-foreground{color:var(--color-primary-foreground)}.shadow-md{--tw-shadow:0 4px 6px -1px var(--tw-shadow-color,#0000001a), 0 2px 4px -2px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.shadow-xl{--tw-shadow:0 20px 25px -5px var(--tw-shadow-color,#0000001a), 0 8px 10px -6px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.outline{outline-style:var(--tw-outline-style);outline-width:1px}.backdrop-blur-\[2px\]{--tw-backdrop-blur:blur(2px);-webkit-backdrop-filter:var(--tw-backdrop-blur, ) var(--tw-backdrop-brightness, ) var(--tw-backdrop-contrast, ) var(--tw-backdrop-grayscale, ) var(--tw-backdrop-hue-rotate, ) var(--tw-backdrop-invert, ) var(--tw-backdrop-opacity, ) var(--tw-backdrop-saturate, ) var(--tw-backdrop-sepia, );backdrop-filter:var(--tw-backdrop-blur, ) var(--tw-backdrop-brightness, ) var(--tw-backdrop-contrast, ) var(--tw-backdrop-grayscale, ) var(--tw-backdrop-hue-rotate, ) var(--tw-backdrop-invert, ) var(--tw-backdrop-opacity, ) var(--tw-backdrop-saturate, ) var(--tw-backdrop-sepia, )}.transition-colors{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.outline-none{--tw-outline-style:none;outline-style:none}.placeholder\:text-muted-foreground::placeholder{color:var(--color-muted-foreground)}@media (hover:hover){.hover\:bg-accent:hover{background-color:var(--color-accent)}.hover\:bg-primary\/90:hover{background-color:#285e50e6}@supports (color:color-mix(in lab, red, red)){.hover\:bg-primary\/90:hover{background-color:color-mix(in oklab, var(--color-primary) 90%, transparent)}}}.focus-visible\:border-primary:focus-visible{border-color:var(--color-primary)}.focus-visible\:ring-2:focus-visible{--tw-ring-shadow:var(--tw-ring-inset, ) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.focus-visible\:ring-ring:focus-visible{--tw-ring-color:var(--color-ring)}.focus-visible\:ring-ring\/40:focus-visible{--tw-ring-color:#598e7866}@supports (color:color-mix(in lab, red, red)){.focus-visible\:ring-ring\/40:focus-visible{--tw-ring-color:color-mix(in oklab, var(--color-ring) 40%, transparent)}}.focus-visible\:ring-offset-2:focus-visible{--tw-ring-offset-width:2px;--tw-ring-offset-shadow:var(--tw-ring-inset, ) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color)}.disabled\:pointer-events-none:disabled{pointer-events:none}.disabled\:opacity-50:disabled{opacity:.5}}:where(.app,.sheet-content) nav button{white-space:normal;justify-content:flex-start}.app{height:100dvh;display:flex;overflow:hidden}.sidebar{background:0 0;flex-direction:column;flex-shrink:0;width:100%;height:100%;min-height:0;padding:18px 16px 16px;display:flex;overflow:auto}.desktop-side-panel{flex:0 0 260px;width:260px;min-height:0}.desktop-side-panel[hidden],.side-panel-content[hidden]{display:none}.side-panel{border-right:1px solid var(--color-border);background:#f3f5ee;flex-direction:column;height:100%;min-height:0;display:flex}.side-panel-header{border-bottom:1px solid var(--color-border);flex:0 0 65px;justify-content:space-between;align-items:center;gap:8px;padding:12px;display:flex}.side-panel-header [role=tablist]{background:#e7ece2;border-radius:9px;gap:2px;padding:3px;display:flex}.side-panel-title{color:var(--color-muted-foreground);padding:4px 12px;font-size:.875rem;font-weight:600}.side-panel-header [role=tab]{min-height:30px;color:var(--color-muted-foreground);box-shadow:none;background:0 0;border-color:#0000;padding:4px 12px}.side-panel-header [role=tab][aria-selected=true]{background:var(--color-background);color:var(--color-primary);box-shadow:0 1px 2px #233c3810}.side-panel-content{flex:1;min-height:0;overflow:hidden}.side-panel .sidebar{border-right:0}.workspace-entry{margin-bottom:calc(var(--spacing) * 4);align-items:center;gap:calc(var(--spacing) * 2);min-width:0;display:flex}.brand-mark{width:calc(var(--spacing) * 8);height:calc(var(--spacing) * 8);border-radius:var(--radius-lg);background-color:var(--color-foreground);color:var(--color-background);font:24px/1 var(--font-reading);flex-shrink:0;place-items:center;display:grid}.select-trigger{min-height:calc(var(--spacing) * 9);justify-content:space-between;align-items:center;gap:calc(var(--spacing) * 2);border-radius:var(--radius-md);border-style:var(--tw-border-style);border-width:1px;border-color:var(--color-border);background-color:var(--color-background);min-width:0;padding-inline:calc(var(--spacing) * 2.5);padding-block:calc(var(--spacing) * 2);font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));--tw-outline-style:none;outline-style:none;display:inline-flex}@media (hover:hover){.select-trigger:hover{background-color:var(--color-accent)}}.select-trigger:focus-visible{--tw-ring-shadow:var(--tw-ring-inset, ) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);--tw-ring-color:var(--color-ring)}.select-trigger:disabled{pointer-events:none;opacity:.5}.select-trigger>[data-slot],.select-trigger>span{text-overflow:ellipsis;white-space:nowrap;min-width:0;overflow:hidden}.select-trigger>svg{pointer-events:none}.select-content{z-index:120;border-radius:var(--radius-md);border-style:var(--tw-border-style);border-width:1px;border-color:var(--color-border);background-color:var(--color-background);color:var(--color-foreground);--tw-shadow:0 10px 15px -3px var(--tw-shadow-color,#0000001a), 0 4px 6px -4px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);max-height:var(--radix-select-content-available-height);min-width:var(--radix-select-trigger-width);max-width:min(480px,100vw - 24px);overflow:hidden}.select-item{cursor:pointer;border-radius:var(--radius-sm);padding-block:calc(var(--spacing) * 2);padding-right:calc(var(--spacing) * 8);padding-left:calc(var(--spacing) * 2.5);font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));--tw-outline-style:none;overflow-wrap:anywhere;outline-style:none;align-items:center;display:flex;position:relative}.select-item[data-highlighted]{background-color:var(--color-accent);color:var(--color-primary)}.select-item[data-disabled]{pointer-events:none;opacity:.5}.select-indicator{right:calc(var(--spacing) * 2);position:absolute}.select-group-label{padding-inline:calc(var(--spacing) * 3);padding-top:calc(var(--spacing) * 3);padding-bottom:var(--spacing);font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height));--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold);color:var(--color-muted-foreground)}.select-option-copy{min-width:0}.select-option-description{margin-top:var(--spacing);font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height));color:var(--color-muted-foreground);overflow-wrap:anywhere;display:block}.workspace-identity{text-overflow:ellipsis;white-space:nowrap;padding-inline:calc(var(--spacing) * 2);font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height));color:var(--color-muted-foreground);display:block;overflow:hidden}.workspace-option-path{margin-top:calc(var(--spacing) * .5);text-overflow:ellipsis;white-space:nowrap;max-width:min(360px,100vw - 80px);display:block;overflow:hidden}.select-scroll{height:calc(var(--spacing) * 6);background-color:var(--color-background);justify-content:center;align-items:center;display:flex}.workspace-picker{flex:1;min-width:0}.workspace-picker .select-trigger{min-height:calc(var(--spacing) * 10);width:100%;padding-inline:calc(var(--spacing) * 2);font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold);background-color:#0000;border-color:#0000}@media (hover:hover){.workspace-picker .select-trigger:hover{border-color:var(--color-border);background-color:var(--color-accent)}}.sidebar-section-heading h2{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height));--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold);--tw-tracking:var(--tracking-wide);letter-spacing:var(--tracking-wide);color:var(--color-muted-foreground);text-transform:uppercase}.search{position:relative}.search input{font-size:.875rem}.search-results{z-index:30;margin-top:calc(var(--spacing) * 2);border-radius:var(--radius-lg);border-style:var(--tw-border-style);border-width:1px;border-color:var(--color-border);background-color:var(--color-background);width:100%;padding:var(--spacing);--tw-shadow:0 10px 15px -3px var(--tw-shadow-color,#0000001a), 0 4px 6px -4px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);max-height:280px;position:absolute;overflow:auto}.search-results [role=option]{cursor:pointer;border-radius:var(--radius-md);padding-inline:calc(var(--spacing) * 2.5);padding-block:calc(var(--spacing) * 2);font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.search-results [aria-selected=true]{background-color:var(--color-accent)}.search-results [aria-disabled=true]{cursor:not-allowed;color:var(--color-muted-foreground)}.search-results small{margin-top:var(--spacing);font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}.search-results p{padding:calc(var(--spacing) * 3);font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height));color:var(--color-muted-foreground)}.sidebar-section-heading{justify-content:space-between;align-items:center;margin:30px 8px 9px;display:flex}.sidebar-section-heading span{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height));color:var(--color-muted-foreground)}.view-navigation button{min-height:calc(var(--spacing) * 11);justify-content:flex-start;gap:calc(var(--spacing) * 3);border-radius:var(--radius-lg);padding-inline:calc(var(--spacing) * 3);padding-block:calc(var(--spacing) * 2);font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));position:relative}.view-navigation button[aria-current=page]{color:var(--color-primary)}.view-dot{width:calc(var(--spacing) * 1.5);height:calc(var(--spacing) * 1.5);background-color:var(--color-border);border-radius:2147483647px;flex-shrink:0}[aria-current=page] .view-dot{background-color:var(--color-primary);box-shadow:0 0 0 3px #285e5010}.view-navigation small{margin-top:calc(var(--spacing) * .5);font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height));--tw-font-weight:var(--font-weight-normal);font-weight:var(--font-weight-normal)}.view-navigation .all-nodes{margin-top:calc(var(--spacing) * 3);min-height:calc(var(--spacing) * 9);border-inline-style:var(--tw-border-style);border-inline-width:0;border-top-style:var(--tw-border-style);border-top-width:1px;border-bottom-style:var(--tw-border-style);border-bottom-width:0;border-color:var(--color-border);padding-inline:calc(var(--spacing) * 3);font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));color:var(--color-muted-foreground);border-radius:0}.empty-views{margin-top:calc(var(--spacing) * 3);padding-inline:calc(var(--spacing) * 2);font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height));color:var(--color-muted-foreground)}.sidebar-footer{padding-top:calc(var(--spacing) * 6);margin-top:auto}.language-picker{justify-content:space-between;align-items:center;gap:calc(var(--spacing) * 3);border-top-style:var(--tw-border-style);border-top-width:1px;border-color:var(--color-border);padding-inline:calc(var(--spacing) * 2);padding-top:calc(var(--spacing) * 4);padding-bottom:calc(var(--spacing) * 2);font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height));color:var(--color-muted-foreground);flex-wrap:wrap;display:flex}.language-picker .select-trigger{min-height:calc(var(--spacing) * 9);font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));width:126px}.source{padding-top:var(--spacing);font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height));color:var(--color-muted-foreground);overflow-wrap:anywhere}.source summary{padding:8px}.source p{margin:8px}.source code{padding-inline:calc(var(--spacing) * 2);font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height));display:block}.warning{color:#876129}.navigation-toggle{display:inline-flex}.workbench{flex-direction:column;flex:1;min-width:0;min-height:0;display:flex;position:relative}.view-toolbar{align-items:center;gap:calc(var(--spacing) * 3);border-bottom-style:var(--tw-border-style);border-bottom-width:1px;border-color:var(--color-border);background-color:var(--color-background);flex-shrink:0;height:65px;padding:12px 20px;display:flex}.view-toolbar h1{text-overflow:ellipsis;white-space:nowrap;min-width:0;font:1.375rem/1.2 var(--font-reading);letter-spacing:-.35px;flex:1;overflow:hidden}.view-toolbar h1 .select-trigger{width:auto;min-width:0;max-width:100%;font:inherit;letter-spacing:inherit;background:0 0;border-color:#0000;padding:4px 8px}.view-toolbar h1 .select-trigger:hover{background:var(--color-accent)}.view-toolbar .toolbar-icon{width:36px;min-width:36px;color:var(--color-muted-foreground);background:0 0;border-color:#0000;padding:8px}.view-toolbar .toolbar-icon:hover{background:var(--color-accent);color:var(--color-primary)}.toolbar-icon svg{fill:none;stroke:currentColor;stroke-width:1.75px;stroke-linecap:round;stroke-linejoin:round;width:20px;height:20px}.refresh[aria-busy=true] svg{animation:1s linear infinite refresh-spin}@keyframes refresh-spin{to{transform:rotate(360deg)}}.context-label{border-radius:var(--radius-md);background-color:var(--color-accent);padding-inline:calc(var(--spacing) * 2);padding-block:var(--spacing);font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height));color:var(--color-muted-foreground)}.refresh{margin-left:auto}.workspace{flex:1;min-width:0;min-height:0;display:flex;position:relative}.canvas{flex:1;min-width:0;min-height:0;position:relative}.opening{padding:calc(var(--spacing) * 6);font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));color:var(--color-muted-foreground)}.canvas-controls{bottom:calc(var(--spacing) * 4);left:calc(var(--spacing) * 4);z-index:10;align-items:center;gap:var(--spacing);border-radius:var(--radius-lg);border-style:var(--tw-border-style);border-width:1px;border-color:var(--color-border);background-color:var(--color-background);padding:var(--spacing);--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a), 0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);display:flex;position:absolute}.canvas-controls button{background-color:#0000;border-color:#0000}.fallback{top:calc(var(--spacing) * 3);right:calc(var(--spacing) * 4);left:calc(var(--spacing) * 4);z-index:20;border-radius:var(--radius-md);border-style:var(--tw-border-style);padding-inline:calc(var(--spacing) * 3);padding-block:calc(var(--spacing) * 2);font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));background:#fff8e9;border-width:1px;border-color:#e5d8bb;position:absolute}.error{padding-inline:calc(var(--spacing) * 4);padding-block:calc(var(--spacing) * 3);font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));color:#924636;overflow-wrap:anywhere;background:#fff0e9;flex-shrink:0}.error p{margin-top:4px}.error details{margin-top:8px}.error pre{white-space:pre-wrap;max-height:160px;margin-bottom:0;overflow:auto}.reading-status{border-bottom-style:var(--tw-border-style);border-bottom-width:1px;border-color:var(--color-border);background-color:var(--color-accent);padding-inline:calc(var(--spacing) * 5);padding-block:calc(var(--spacing) * 3);font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.empty-architecture{top:calc(var(--spacing) * 3);left:calc(var(--spacing) * 4);z-index:10;position:absolute}.view-context{top:calc(var(--spacing) * 3);left:calc(var(--spacing) * 4);z-index:10;border-radius:var(--radius-lg);border-style:var(--tw-border-style);background-color:var(--color-white);padding:calc(var(--spacing) * 3);font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a), 0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);border-width:1px;max-width:min(340px,80%);max-height:45%;position:absolute;overflow:auto}.view-context summary{cursor:pointer}.scenario-context{width:100%;max-width:none;height:100%;max-height:none;box-shadow:none;background:0 0;border:0;border-radius:0;padding:18px 16px 16px;position:static;overflow:auto}.view-context ol{padding-left:1.5rem}.view-context li button{white-space:normal;text-align:left;flex-direction:column;align-items:start;width:100%;height:auto;display:flex}.view-context small{color:#52616b;font-size:12px}.scenario-toolbar{border-bottom:1px solid var(--color-border);flex-wrap:wrap;align-items:center;gap:8px;padding:8px 16px;display:flex}.step-pagination{align-items:center;gap:8px;margin-left:auto;font-size:13px;display:flex}.view-toolbar .select-trigger{min-width:100px;max-width:240px}.view-context button[aria-pressed=true]{background:#e1eee7}.side-panel :is(.view-navigation button,.scenario-context li button){box-shadow:none;background:0 0;border-color:#0000;border-radius:8px;padding:8px 12px;position:relative}.scenario-context li+li{margin-top:4px}.scenario-context li::marker{color:var(--color-muted-foreground);font-size:12px}.side-panel :is(.view-navigation button,.scenario-context li button):hover{background:#e9eee4}.side-panel :is(.view-navigation button[aria-current=page],.scenario-context button[aria-pressed=true]){color:var(--color-primary);background:#dfebe2}.side-panel :is(.view-navigation button[aria-current=page],.scenario-context button[aria-pressed=true]):before{content:"";background:var(--color-primary);border-radius:3px;width:3px;position:absolute;top:10px;bottom:10px;left:0}.side-panel .view-navigation .all-nodes{border-top-color:var(--color-border)}.diagram-render-host{pointer-events:none;width:1200px;position:fixed;top:0;left:-100000px}figure[data-rsp-mermaid]{margin:1rem 0}figure[data-rsp-mermaid] img{max-width:100%;height:auto}[data-source-locator]{cursor:pointer;color:#245b45}.workbench>.error{z-index:70;position:absolute;top:65px;left:0;right:0;box-shadow:0 3px 10px #233c3810}.undrawn{top:calc(var(--spacing) * 4);left:calc(var(--spacing) * 4);z-index:10;border-radius:var(--radius-md);border-style:var(--tw-border-style);padding-inline:calc(var(--spacing) * 3);padding-block:calc(var(--spacing) * 2);font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));background:#fffaf0;border-width:1px;border-color:#e5d8bb;max-width:80%;max-height:45%;position:absolute;overflow:auto}.undrawn nav{margin-top:10px}.detail-panel{top:calc(var(--spacing) * 4);right:calc(var(--spacing) * 4);z-index:20;border-radius:var(--radius-xl);border-style:var(--tw-border-style);border-width:1px;border-color:var(--color-border);background-color:var(--color-background);outline:none;width:360px;max-width:calc(100% - 32px);max-height:min(560px,100% - 32px);padding:16px 18px 18px;position:absolute;overflow:auto;box-shadow:0 12px 40px #233c381c}.detail-panel:focus-visible{box-shadow:0 0 0 2px var(--color-ring), 0 12px 40px #233c381c}.detail-panel.card-left{left:16px;right:auto}.detail-panel.card-bottom{top:auto;bottom:16px}.detail-heading{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height));--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium);--tw-tracking:var(--tracking-wide);letter-spacing:var(--tracking-wide);color:var(--color-muted-foreground);text-transform:uppercase;justify-content:space-between;align-items:center;display:flex}.detail-heading button{font-size:var(--text-xl);line-height:var(--tw-leading,var(--text-xl--line-height));background-color:#0000;border-color:#0000;width:32px;height:32px;min-height:32px;margin:-4px -4px -4px 0;padding:0}.detail-panel h2{font:1.6875rem/1.15 var(--font-reading);letter-spacing:-.4px;margin:10px 0 12px}.detail-panel p{margin-block:calc(var(--spacing) * 2);font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));--tw-leading:var(--leading-relaxed);line-height:var(--leading-relaxed)}.detail-panel h3{margin-bottom:calc(var(--spacing) * 2);font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height));--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold);--tw-tracking:var(--tracking-wide);letter-spacing:var(--tracking-wide);color:var(--color-muted-foreground);text-transform:uppercase;margin-top:20px}.detail-panel nav button{align-items:flex-start;gap:var(--spacing);padding-block:calc(var(--spacing) * 2);font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));flex-direction:column}.detail-panel nav .navigation-item{align-items:center;gap:calc(var(--spacing) * 2.5);padding-inline:calc(var(--spacing) * 2);padding-block:calc(var(--spacing) * 2.5);color:var(--color-primary);border-color:#0000;flex-direction:row}.navigation-icon{width:calc(var(--spacing) * 5);height:calc(var(--spacing) * 5);flex-shrink:0;align-self:flex-start}.navigation-copy{text-align:left;overflow-wrap:anywhere;flex:1;min-width:0}.navigation-title{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium);text-underline-offset:4px;text-decoration-line:underline;text-decoration-color:#0000}.navigation-item:hover .navigation-title{text-decoration-color:currentColor}.navigation-chevron{color:var(--color-muted-foreground)}.navigation-copy small{margin-top:var(--spacing);--tw-font-weight:var(--font-weight-normal);font-weight:var(--font-weight-normal)}.detail-panel .navigation-item[aria-current=page]{background:var(--color-accent);font-weight:600}.detail-panel small{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}.structural-parent{color:var(--color-muted-foreground)}.text-button{border-style:var(--tw-border-style);min-height:0;color:var(--color-primary);background-color:#0000;border-width:0;padding:0;display:inline}.text-button:hover{background-color:#0000;text-decoration-line:underline}.focus-action{margin-top:calc(var(--spacing) * 4);border-color:var(--color-border);background-color:var(--color-accent);width:100%;color:var(--color-primary);justify-content:flex-start}.detail-panel details{margin-top:calc(var(--spacing) * 4);font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height));color:var(--color-muted-foreground)}.detail-panel .object-relationships{border-top-style:var(--tw-border-style);border-top-width:1px;border-color:var(--color-border);padding-top:calc(var(--spacing) * 3)}.object-relationships summary span{margin-left:calc(var(--spacing) * 2);font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}.object-relationships nav{margin-top:10px}.relationship-row{align-items:flex-start;gap:var(--spacing);border-style:var(--tw-border-style);border-width:0;border-left-style:var(--tw-border-style);border-left-width:2px;border-color:var(--color-border);background-color:var(--color-accent);padding-inline:calc(var(--spacing) * 3);padding-block:calc(var(--spacing) * 2);flex-direction:column}.relationship-row span{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.boundary-label{border-radius:var(--radius-md);border-style:var(--tw-border-style);padding-inline:calc(var(--spacing) * 2.5);padding-block:calc(var(--spacing) * 2);color:#876129;background:#fffaf0;border-width:1px;border-color:#e5d8bb;font-size:var(--text-xs)!important;line-height:var(--tw-leading,var(--text-xs--line-height))!important}.detail-panel dl{margin-block:calc(var(--spacing) * 4);font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.detail-panel dt{margin-top:calc(var(--spacing) * 3);font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height));color:var(--color-muted-foreground)}.detail-panel dd{margin:0}.detail-panel dd code{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height));color:var(--color-muted-foreground);display:block}.document-pane{z-index:30;border-left-style:var(--tw-border-style);border-left-width:1px;border-color:var(--color-border);background-color:var(--color-background);--tw-outline-style:none;inset-block:0;outline-style:none;flex-direction:column;max-width:100%;display:flex;position:absolute;right:0;box-shadow:-12px 0 40px #233c381c}.document-resize{z-index:10;width:calc(var(--spacing) * 2);cursor:col-resize;touch-action:none;inset-block:0;position:absolute;left:-4px}.document-resize:hover,.document-resize:focus-visible{background:#598e7850;outline:none}.document-toolbar{min-height:calc(var(--spacing) * 16);align-items:center;gap:calc(var(--spacing) * 2);border-bottom-style:var(--tw-border-style);border-bottom-width:1px;border-color:var(--color-border);padding-inline:calc(var(--spacing) * 5);padding-block:calc(var(--spacing) * 3);flex-shrink:0;display:flex}.document-toolbar strong{text-overflow:ellipsis;white-space:nowrap;min-width:0;font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height));--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium);flex:1;overflow:hidden}.document-toolbar strong:focus-visible{outline:2px solid var(--color-ring);outline-offset:4px;border-radius:2px}.document-toolbar-actions{align-items:center;gap:calc(var(--spacing) * 1.5);flex-shrink:0;display:flex}.document-toolbar button{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));white-space:nowrap}.reading-layout{flex-direction:column;flex:1;min-height:0;display:flex}.document-toc{border-bottom-style:var(--tw-border-style);border-bottom-width:1px;border-color:var(--color-border);padding-inline:calc(var(--spacing) * 5);padding-block:calc(var(--spacing) * 3);font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));background:#f8f9f2;flex-shrink:0;max-height:160px;overflow:auto}.document-toc summary{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height));--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium);--tw-tracking:var(--tracking-wide);letter-spacing:var(--tracking-wide);color:var(--color-muted-foreground)}.document-toc nav{padding-top:calc(var(--spacing) * 2);gap:0}.document-toc button{min-height:calc(var(--spacing) * 8);padding-block:var(--spacing);font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));background-color:#0000;border-color:#0000}.reading-layout article{min-height:0;font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));overflow-wrap:anywhere;flex:1;padding:24px max(24px,50% - 38ch) 48px;line-height:1.65;overflow:auto}.document-expanded article{padding-block:28px 64px}.document-pane article :where(p,ul,ol,pre,table,blockquote){margin-block:.75em}.document-pane article :where(h1,h2,h3){margin-block:1.25em .5em}.document-pane article h1{font:1.5rem/1.3 var(--font-reading)}.document-pane article h2{font-size:1.25rem;line-height:1.35}.document-pane article h3{font-size:1rem;line-height:1.4}.document-pane article li+li{margin-top:.25rem}.document-pane article li>:where(p,ul,ol){margin-block:.25em}.document-pane article [id]{scroll-margin-top:16px}.document-pane article pre{border-radius:var(--radius-lg);background-color:var(--color-accent);padding:calc(var(--spacing) * 4);line-height:1.5;overflow:auto}.document-pane article code{font-family:ui-monospace,SFMono-Regular,Consolas,monospace;font-size:.875rem}.document-pane article table{border-collapse:collapse;max-width:100%;font-size:.875rem;line-height:1.5;display:block;overflow:auto}.document-pane article :where(td,th){border-style:var(--tw-border-style);border-width:1px;border-color:var(--color-border);padding-inline:calc(var(--spacing) * 3);padding-block:calc(var(--spacing) * 1.5)}.document-pane article blockquote{border-left-style:var(--tw-border-style);border-left-width:2px;border-color:var(--color-border);padding-left:calc(var(--spacing) * 4);color:var(--color-muted-foreground);margin-left:0}.document-pane article img{max-width:100%}.tooltip-content{z-index:110;pointer-events:none;overflow-wrap:anywhere;max-width:min(480px,100vw - 24px);line-height:1.5}.sheet-overlay{z-index:80}.sheet-content{z-index:90}.navigation-sheet{width:min(320px,88vw)}.navigation-sheet .side-panel{width:100%;height:100%}.reading-sheet .document-pane{border:0;width:100%!important}@media (max-width:760px){.desktop-side-panel{display:none}.navigation-toggle{font-size:.875rem;display:inline-flex}.view-toolbar{gap:12px;height:58px;padding:10px 12px}.view-toolbar h1{font-size:1.0625rem}.view-toolbar .select-trigger{flex:1;min-width:0;max-width:100%}.scenario-toolbar{gap:4px;padding:6px 8px}.side-panel-header{flex-basis:58px;padding:10px 12px}.context-label{display:none}.detail-panel,.detail-panel.card-left,.detail-panel.card-bottom{width:auto;max-width:none;max-height:58%;padding:14px 17px;inset:auto 12px 12px}.document-resize,.reading-expand{display:none}.document-toolbar{min-height:58px;padding:10px 12px}.document-toolbar strong{font-size:.75rem}.document-toolbar button{font-size:.875rem}.reading-layout article,.document-expanded article{padding:18px 22px 36px}.document-toc{max-height:130px;padding:10px 16px}.canvas-controls{bottom:12px;left:12px}}:is([data-slot=button],[data-slot=input],.select-trigger,.select-item,.search-results [role=option]){transition-property:color,background-color,border-color;transition-duration:var(--motion-fast);transition-timing-function:var(--motion-ease)}.detail-panel,.search-results,.select-content,.tooltip-content{animation:surface-in var(--motion-fast) var(--motion-ease)}:is(.select-content,.tooltip-content)[data-state=closed]{pointer-events:none;animation:none}:is(.sheet-overlay,.sheet-content)[data-state=open]{animation:surface-in var(--motion-panel) var(--motion-ease)}:is(.sheet-overlay,.sheet-content)[data-state=closed]{animation:surface-out var(--motion-fast) ease-in;pointer-events:none}.navigation-sheet[data-state=open]{animation-name:navigation-in}.navigation-sheet[data-state=closed]{animation-name:navigation-out}@keyframes surface-in{0%{opacity:0}to{opacity:1}}@keyframes surface-out{0%{opacity:1}to{opacity:0}}@keyframes navigation-in{0%{opacity:0;transform:translate(-12px)}to{opacity:1;transform:translate(0)}}@keyframes navigation-out{0%{opacity:1;transform:translate(0)}to{opacity:0;transform:translate(-12px)}}@media (prefers-reduced-motion:reduce){.app *,.sheet-content,.sheet-content *,.sheet-overlay,.select-content,.select-content *,.tooltip-content{transition:none!important;animation:none!important}}@property --tw-border-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-font-weight{syntax:"*";inherits:false}@property --tw-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-shadow-color{syntax:"*";inherits:false}@property --tw-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-inset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-shadow-color{syntax:"*";inherits:false}@property --tw-inset-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-ring-color{syntax:"*";inherits:false}@property --tw-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-ring-color{syntax:"*";inherits:false}@property --tw-inset-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-ring-inset{syntax:"*";inherits:false}@property --tw-ring-offset-width{syntax:"<length>";inherits:false;initial-value:0}@property --tw-ring-offset-color{syntax:"*";inherits:false;initial-value:#fff}@property --tw-ring-offset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-outline-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-backdrop-blur{syntax:"*";inherits:false}@property --tw-backdrop-brightness{syntax:"*";inherits:false}@property --tw-backdrop-contrast{syntax:"*";inherits:false}@property --tw-backdrop-grayscale{syntax:"*";inherits:false}@property --tw-backdrop-hue-rotate{syntax:"*";inherits:false}@property --tw-backdrop-invert{syntax:"*";inherits:false}@property --tw-backdrop-opacity{syntax:"*";inherits:false}@property --tw-backdrop-saturate{syntax:"*";inherits:false}@property --tw-backdrop-sepia{syntax:"*";inherits:false}@property --tw-tracking{syntax:"*";inherits:false}@property --tw-leading{syntax:"*";inherits:false}