@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.
- package/dist/{chunk-JO6NDJM4.mjs → chunk-AUZYUJ46.mjs} +62 -4
- package/dist/chunk-DNRGBQS7.mjs +108 -0
- package/dist/cli.mjs +16 -9
- package/dist/{client-EHRWH5Q7.mjs → client-U2PN3VS4.mjs} +1 -1
- package/dist/viewer/app.css +2 -2
- package/dist/viewer/app.js +169 -169
- package/dist/viewer/chunks/abnfDiagram-S7VZAUFO-K5EOZOEF.js +1 -0
- package/dist/viewer/chunks/architecture-WOLXFQ4H-UAT5D5BF.js +1 -0
- package/dist/viewer/chunks/architectureDiagram-YGSQEFNW-UNPSYM2L.js +36 -0
- package/dist/viewer/chunks/blockDiagram-APKKGZFW-2F7TTPAV.js +140 -0
- package/dist/viewer/chunks/bpmnIcons-APHXDYXF-ZWPFFN3O.js +1 -0
- package/dist/viewer/chunks/c4Diagram-KJ2TOQU5-KNLN6CME.js +38 -0
- package/dist/viewer/chunks/chunk-274PZN6B.js +1 -0
- package/dist/viewer/chunks/chunk-2VGDQLQD.js +1 -0
- package/dist/viewer/chunks/chunk-33XESOCS.js +1 -0
- package/dist/viewer/chunks/chunk-3ZSL2TGQ.js +1 -0
- package/dist/viewer/chunks/chunk-432I4U3B.js +1 -0
- package/dist/viewer/chunks/chunk-4PJNGS3V.js +1 -0
- package/dist/viewer/chunks/chunk-54NLSLTF.js +9 -0
- package/dist/viewer/chunks/chunk-6QRHYJ5Q.js +1 -0
- package/dist/viewer/chunks/chunk-6RCFKBVR.js +1 -0
- package/dist/viewer/chunks/chunk-6Y2HP7DC.js +213 -0
- package/dist/viewer/chunks/chunk-7MAT7NHP.js +1 -0
- package/dist/viewer/chunks/chunk-AKHBD6LT.js +2 -0
- package/dist/viewer/chunks/chunk-CZIM56BV.js +1 -0
- package/dist/viewer/chunks/chunk-DN4Y7LXJ.js +1 -0
- package/dist/viewer/chunks/chunk-E2UQN267.js +1 -0
- package/dist/viewer/chunks/chunk-GBARLDDT.js +1 -0
- package/dist/viewer/chunks/chunk-H4YEV7VR.js +1 -0
- package/dist/viewer/chunks/chunk-HUVVDQHZ.js +1 -0
- package/dist/viewer/chunks/chunk-IAKC32WV.js +72 -0
- package/dist/viewer/chunks/chunk-JTW4SY4L.js +1 -0
- package/dist/viewer/chunks/chunk-JZV675LF.js +1 -0
- package/dist/viewer/chunks/chunk-KDUDYTWO.js +1 -0
- package/dist/viewer/chunks/chunk-KHX3A5RZ.js +331 -0
- package/dist/viewer/chunks/chunk-KPXJJSUR.js +15 -0
- package/dist/viewer/chunks/chunk-LEGNM6PH.js +1 -0
- package/dist/viewer/chunks/chunk-LYY4ZY72.js +1 -0
- package/dist/viewer/chunks/chunk-MKDEK2LU.js +1 -0
- package/dist/viewer/chunks/chunk-MYJRFART.js +129 -0
- package/dist/viewer/chunks/chunk-NUXZBURC.js +1 -0
- package/dist/viewer/chunks/chunk-NXHT5I2L.js +1 -0
- package/dist/viewer/chunks/chunk-OF62XRVM.js +62 -0
- package/dist/viewer/chunks/chunk-ONCOEVBS.js +1 -0
- package/dist/viewer/chunks/chunk-P44SH3OO.js +1 -0
- package/dist/viewer/chunks/chunk-PDXKDBIX.js +1 -0
- package/dist/viewer/chunks/chunk-PHKIAKHS.js +1 -0
- package/dist/viewer/chunks/chunk-PJDMAGPE.js +2 -0
- package/dist/viewer/chunks/chunk-RC2NPHSX.js +88 -0
- package/dist/viewer/chunks/chunk-T6DM5RSK.js +10 -0
- package/dist/viewer/chunks/chunk-U5STX66M.js +2 -0
- package/dist/viewer/chunks/chunk-UIAJQPOF.js +1 -0
- package/dist/viewer/chunks/chunk-UX2S3LP3.js +1 -0
- package/dist/viewer/chunks/chunk-VEMTQQ7Y.js +2 -0
- package/dist/viewer/chunks/chunk-WKCPBR3C.js +1 -0
- package/dist/viewer/chunks/chunk-WMQ4Y2MS.js +32 -0
- package/dist/viewer/chunks/chunk-YPWIQAHX.js +3 -0
- package/dist/viewer/chunks/chunk-Z4ZDIMO2.js +136 -0
- package/dist/viewer/chunks/chunk-ZATQCNXH.js +1 -0
- package/dist/viewer/chunks/chunk-ZE5RDJX6.js +1 -0
- package/dist/viewer/chunks/chunk-ZO62R4L2.js +1 -0
- package/dist/viewer/chunks/classDiagram-v2-L25IHNXF-5F2M2CZ4.js +217 -0
- package/dist/viewer/chunks/cose-bilkent-JH36ORCC-S56HJ5WN.js +1 -0
- package/dist/viewer/chunks/cynefin-EF2NZ3EQ-6WY2NCLE.js +1 -0
- package/dist/viewer/chunks/cynefinDiagram-L36ESFBY-DE6PZNQA.js +62 -0
- package/dist/viewer/chunks/dagre-SPEB5RXH-QEOTKFV2.js +4 -0
- package/dist/viewer/chunks/diagram-3B7GL73J-RZPIU7FY.js +200 -0
- package/dist/viewer/chunks/diagram-DNEMPZML-YD26TJKC.js +24 -0
- package/dist/viewer/chunks/diagram-L3MUGCDN-TJUEX4QI.js +41 -0
- package/dist/viewer/chunks/diagram-LA4NIPWU-3PUQS6UW.js +24 -0
- package/dist/viewer/chunks/diagram-MHCOC4E2-YBTBD4PG.js +3 -0
- package/dist/viewer/chunks/diagram-XPFHEONP-VF2TQBNR.js +30 -0
- package/dist/viewer/chunks/ebnfDiagram-UZSYDL2S-QE7DIEME.js +1 -0
- package/dist/viewer/chunks/elk-XV6XMXQE-X5OZRIL3.js +27 -0
- package/dist/viewer/chunks/erDiagram-EYBAPDEH-5B2S7VB4.js +99 -0
- package/dist/viewer/chunks/eventmodeling-K75KTNOO-CHCQYZBI.js +1 -0
- package/dist/viewer/chunks/flowDiagram-MALGAFMO-XJFC5NTN.js +1 -0
- package/dist/viewer/chunks/ganttDiagram-23REXITY-TUUZ3QYO.js +292 -0
- package/dist/viewer/chunks/gitGraph-VSP46ZUC-VFZPJQ6A.js +1 -0
- package/dist/viewer/chunks/gitGraphDiagram-STJD7YCW-4CVV5LSH.js +106 -0
- package/dist/viewer/chunks/info-OHQRW6UA-P4744SJ6.js +1 -0
- package/dist/viewer/chunks/infoDiagram-KBXO4MBG-Q2WYYNNN.js +2 -0
- package/dist/viewer/chunks/ishikawaDiagram-M35NCXHK-PLQPTX2U.js +70 -0
- package/dist/viewer/chunks/journeyDiagram-OPLOXDXO-FB73RE6F.js +139 -0
- package/dist/viewer/chunks/kanban-definition-BZKZHSQY-6FU4TXYJ.js +89 -0
- package/dist/viewer/chunks/katex-IN4S3RHS.js +257 -0
- package/dist/viewer/chunks/mindmap-definition-I2QAS2VK-ZQ36ABVW.js +98 -0
- package/dist/viewer/chunks/packet-JDAUHWVQ-NYXIQQVA.js +1 -0
- package/dist/viewer/chunks/pegDiagram-FD4XPPHP-5XXVT6XN.js +1 -0
- package/dist/viewer/chunks/pie-XZMESJXO-32CUE6KZ.js +1 -0
- package/dist/viewer/chunks/pieDiagram-J4AKIIQI-WRTBDFM5.js +39 -0
- package/dist/viewer/chunks/quadrantDiagram-XTYBLID2-YPBDQIAK.js +7 -0
- package/dist/viewer/chunks/radar-ABXABTNO-272FILRO.js +1 -0
- package/dist/viewer/chunks/railroad-I3PHUGI6-6EGAH4XA.js +1 -0
- package/dist/viewer/chunks/railroad-abnf-LNEFI6M7-G6E7ATER.js +1 -0
- package/dist/viewer/chunks/railroad-ebnf-DWYD2UWJ-MR4P6BDR.js +1 -0
- package/dist/viewer/chunks/railroad-peg-JR7BVNR7-WXLQUGUO.js +1 -0
- package/dist/viewer/chunks/railroadDiagram-MRQ6NCDL-XHZQ2BLY.js +1 -0
- package/dist/viewer/chunks/requirementDiagram-Y7LWUY3S-W5FHRRML.js +84 -0
- package/dist/viewer/chunks/sankeyDiagram-WGJFYUXA-OJJIRVTI.js +40 -0
- package/dist/viewer/chunks/sequenceDiagram-5NDRBG5M-D6T4DRNG.js +169 -0
- package/dist/viewer/chunks/sizeCapture-INFHLROL-WL3FTUJX.js +1 -0
- package/dist/viewer/chunks/stateDiagram-v2-FJ4FJNEA-LAXL7KGG.js +291 -0
- package/dist/viewer/chunks/swimlanes-UMQ2AFYF-XIJBD726.js +1 -0
- package/dist/viewer/chunks/swimlanesDiagram-OMPLPG4O-7O7MHFW7.js +8 -0
- package/dist/viewer/chunks/timeline-definition-SEUHKTQE-BAZQA47I.js +120 -0
- package/dist/viewer/chunks/treeView-D4JQ5SDB-6YMDAAPA.js +1 -0
- package/dist/viewer/chunks/treemap-SAJKECNS-2X573PPS.js +1 -0
- package/dist/viewer/chunks/usecaseDiagram-AFA6YXN4-4YCEMWJB.js +370 -0
- package/dist/viewer/chunks/vennDiagram-NNMJR3RB-GEMROLAE.js +34 -0
- package/dist/viewer/chunks/wardley-7MLQ67FV-DGTGHYYC.js +1 -0
- package/dist/viewer/chunks/wardleyDiagram-S7YFUSEH-K4HVD3SS.js +78 -0
- package/dist/viewer/chunks/xychartDiagram-GGNKY7IX-HVLWCUEO.js +7 -0
- package/dist/viewer/mermaid.js +12 -0
- package/dist/viewer-build.json +1 -1
- package/dist/viewer-service.mjs +69 -13
- package/package.json +10 -9
- package/skills/rsp/SKILL.md +9 -7
- package/skills/rsp/references/closeout.md +4 -4
- package/skills/rsp/references/durable-review.md +6 -9
- package/skills/rsp/references/work-model.md +4 -4
- package/skills/rsp-commit/SKILL.md +2 -2
- package/skills/rsp-doc/SKILL.md +1 -1
- package/skills/rsp-implement/SKILL.md +1 -1
- package/skills/rsp-review/SKILL.md +6 -6
- package/skills/rsp-review/references/document-review.md +2 -2
- package/skills/rsp-shape/references/planning.md +2 -2
- package/skills/rsp-verify/SKILL.md +1 -1
- 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(
|
|
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) =>
|
|
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-
|
|
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)
|
|
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-
|
|
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
|
-
|
|
752
|
-
|
|
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
|
-
|
|
803
|
-
|
|
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: "
|
|
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)}
|
package/dist/viewer/app.css
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
/*! tailwindcss v4.3.
|
|
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}
|