@avodado/render 0.0.1 → 0.1.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/index.d.ts +5 -5
- package/dist/index.js +72 -28
- package/dist/index.js.map +1 -1
- package/package.json +2 -2
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/css.ts","../src/escape.ts","../src/sanitize.ts","../src/markdown.ts","../src/blocks/meta.ts","../src/blocks/frame.ts","../src/blocks/callout.ts","../src/blocks/erd.ts","../src/blocks/kanban.ts","../src/blocks/sequence.ts","../src/blocks/table.ts","../src/blocks/timeline.ts","../src/blocks/tracker.ts","../src/blocks/userstory.ts","../src/blocks/prose.ts","../src/blocks/glossary.ts","../src/blocks/proscons.ts","../src/blocks/cvt.ts","../src/blocks/stats.ts","../src/highlight.ts","../src/blocks/code.ts","../src/blocks/agenda.ts","../src/blocks/tree.ts","../src/blocks/pyramid.ts","../src/blocks/funnel.ts","../src/svg/ortho.ts","../src/svg/wrapText.ts","../src/svg/edgePill.ts","../src/blocks/flow.ts","../src/blocks/state.ts","../src/blocks/dfd.ts","../src/blocks/journey.ts","../src/blocks/gantt.ts","../src/blocks/graph.ts","../src/blocks/quadrant.ts","../src/blocks/swimlane.ts","../src/svg/blockStyle.ts","../src/blocks/c4.ts","../src/blocks/uml.ts","../src/blocks/mece.ts","../src/blocks/frontend.ts","../src/blocks/cluster.ts","../src/blocks/blockGraph.ts","../src/blocks/felogic.ts","../src/blocks/wireframe.ts","../src/registry.ts","../src/svg/defs.ts","../src/themes.ts","../src/parts.ts","../src/document.ts"],"names":["CHART_COLORS","sx","ex","sy","ey","rectFor","s","clamp01"],"mappings":";;;AAWO,IAAM,QAAA,GAAW,CAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,iLAAA;;;ACJxB,IAAM,IAAA,GAA+B;AAAA,EACnC,GAAA,EAAK,OAAA;AAAA,EACL,GAAA,EAAK,MAAA;AAAA,EACL,GAAA,EAAK,MAAA;AAAA,EACL,GAAA,EAAK;AACP,CAAA;AAQO,SAAS,WAAW,KAAA,EAAwB;AACjD,EAAA,IAAI,KAAA,KAAU,IAAA,IAAQ,KAAA,KAAU,MAAA,EAAW,OAAO,EAAA;AAClD,EAAA,OAAO,MAAA,CAAO,KAAK,CAAA,CAAE,OAAA,CAAQ,SAAA,EAAW,CAAC,CAAA,KAAM,IAAA,CAAK,CAAC,CAAA,IAAK,CAAC,CAAA;AAC7D;;;ACLA,IAAM,aAAA,GACJ,8EAAA;AAWK,SAAS,SAAA,CAAU,OAA2B,QAAA,EAA0B;AAC7E,EAAA,IAAI,KAAA,KAAU,QAAW,OAAO,QAAA;AAChC,EAAA,MAAM,OAAA,GAAU,MAAM,IAAA,EAAK;AAC3B,EAAA,OAAO,aAAA,CAAc,IAAA,CAAK,OAAO,CAAA,GAAI,OAAA,GAAU,QAAA;AACjD;AAGA,IAAM,gBAAA,GAAmB,kCAAA;AAUlB,SAAS,QAAQ,GAAA,EAAqB;AAC3C,EAAA,OAAO,gBAAA,CAAiB,IAAA,CAAK,GAAG,CAAA,GAAI,GAAA,GAAM,GAAA;AAC5C;AC7BA,IAAM,MAAA,GAAS,IAAI,MAAA,CAAO,EAAE,KAAK,IAAA,EAAM,MAAA,EAAQ,OAAO,CAAA;AAEtD,MAAA,CAAO,GAAA,CAAI;AAAA,EACT,SAAA,EAAW;AAAA;AAAA;AAAA,IAGT,IAAA,GAAkB;AAChB,MAAA,OAAO,MAAA;AAAA,IACT,CAAA;AAAA,IACA,GAAA,GAAiB;AACf,MAAA,OAAO,MAAA;AAAA,IACT;AAAA,GACF;AAAA,EACA,QAAA,EAAU;AAAA,IACR,KAAK,KAAA,EAA4B;AAC/B,MAAA,MAAM,IAAA,GAAO,OAAA,CAAQ,KAAA,CAAM,IAAI,CAAA;AAC/B,MAAA,MAAM,KAAA,GAAQ,KAAA,CAAM,KAAA,KAAU,IAAA,IAAQ,KAAA,CAAM,UAAU,MAAA,GAAY,CAAA,QAAA,EAAW,KAAA,CAAM,KAAK,CAAA,CAAA,CAAA,GAAM,EAAA;AAC9F,MAAA,MAAM,IAAA,GAAO,IAAA,CAAK,MAAA,CAAO,WAAA,CAAY,MAAM,MAAM,CAAA;AACjD,MAAA,OAAO,CAAA,SAAA,EAAY,IAAI,CAAA,CAAA,EAAI,KAAK,IAAI,IAAI,CAAA,IAAA,CAAA;AAAA,IAC1C,CAAA;AAAA,IACA,MAAM,KAAA,EAA6B;AACjC,MAAA,MAAM,IAAA,GAAO,OAAA,CAAQ,KAAA,CAAM,IAAI,CAAA;AAC/B,MAAA,MAAM,KAAA,GAAQ,KAAA,CAAM,KAAA,KAAU,IAAA,IAAQ,KAAA,CAAM,UAAU,MAAA,GAAY,CAAA,QAAA,EAAW,KAAA,CAAM,KAAK,CAAA,CAAA,CAAA,GAAM,EAAA;AAC9F,MAAA,OAAO,aAAa,IAAI,CAAA,OAAA,EAAU,KAAA,CAAM,IAAI,IAAI,KAAK,CAAA,CAAA,CAAA;AAAA,IACvD;AAAA;AAEJ,CAAC,CAAA;AAQM,SAAS,YAAY,IAAA,EAAsB;AAChD,EAAA,MAAM,OAAO,MAAA,CAAO,KAAA,CAAM,MAAM,EAAE,KAAA,EAAO,OAAO,CAAA;AAChD,EAAA,OAAO,sBAAsB,IAAI,CAAA,MAAA,CAAA;AACnC;;;AC5CO,SAAS,YAAY,IAAA,EAAoC;AAC9D,EAAA,MAAM,KAAA,GAAQ,MAAM,KAAA,IAAS,UAAA;AAC7B,EAAA,MAAM,GAAA,GAAM,MAAM,GAAA,IAAO,EAAA;AACzB,EAAA,MAAM,WAAW,IAAA,EAAM,QAAA;AACvB,EAAA,MAAM,MACJ,QAAA,KAAa,MAAA,GAAY,wBAAwB,UAAA,CAAW,QAAQ,CAAC,CAAA,IAAA,CAAA,GAAS,EAAA;AAChF,EAAA,OACE,CAAA,sHAAA,EAEqE,WAAW,GAAG,CAAC,wCACzD,UAAA,CAAW,KAAK,CAAC,CAAA,KAAA,CAAA,GAC5C,GAAA,GACA,CAAA,MAAA,CAAA;AAEJ;AAMO,SAAS,eAAA,GAA0B;AACxC,EAAA,OAAO,EAAA;AACT;;;ACJO,SAAS,YAAA,CAAa,MAAoB,KAAA,EAAuB;AACtE,EAAA,MAAM,WAAW,IAAA,CAAK,QAAA,KAAa,SAAY,CAAA,CAAA,EAAI,IAAA,CAAK,QAAQ,CAAA,CAAA,GAAK,EAAA;AACrE,EAAA,MAAM,QAAA,GACJ,IAAA,CAAK,KAAA,KAAU,MAAA,IAAa,IAAA,CAAK,aAAa,MAAA,GAC1C,CAAA,mBAAA,EAAsB,IAAA,CAAK,KAAK,CAAA,CAAA,CAAA,GAChC,EAAA;AACN,EAAA,MAAM,SAAA,GACJ,KAAK,SAAA,KAAc,MAAA,GACf,+BAA+B,IAAA,CAAK,SAAS,YAC7C,IAAA,CAAK,KAAA,KAAU,UAAa,IAAA,CAAK,KAAA,CAAM,SAAS,CAAA,GAC9C,CAAA,4BAAA,EAA+B,WAAW,IAAA,CAAK,KAAK,CAAC,CAAA,OAAA,CAAA,GACrD,EAAA;AACR,EAAA,MAAM,UAAA,GACJ,IAAA,CAAK,MAAA,KAAW,MAAA,IAAa,IAAA,CAAK,MAAA,CAAO,MAAA,GAAS,CAAA,GAC9C,CAAA,6BAAA,EAAgC,UAAA,CAAW,IAAA,CAAK,MAAM,CAAC,CAAA,OAAA,CAAA,GACvD,EAAA;AACN,EAAA,MAAM,QAAA,GACJ,IAAA,CAAK,IAAA,KAAS,MAAA,IAAa,IAAA,CAAK,IAAA,CAAK,MAAA,GAAS,CAAA,GAC1C,CAAA,wBAAA,EAA2B,UAAA,CAAW,IAAA,CAAK,IAAI,CAAC,CAAA,IAAA,CAAA,GAChD,EAAA;AACN,EAAA,MAAM,UAAA,GAAa,KAAK,UAAA,IAAc,EAAA;AACtC,EAAA,OACE,CAAA,uEAAA,EAE2B,QAAQ,CAAA,CAAA,EAAI,QAAQ,IAAI,UAAA,CAAW,IAAA,CAAK,GAAG,CAAC,YACvE,SAAA,GACA,UAAA,GACA,CAAA,MAAA,CAAA,GACA,QAAA,GACA,QACA,UAAA,GACA,CAAA,MAAA,CAAA;AAEJ;AASO,IAAM,aAAA,GAA2C;AAAA,EACtD,IAAA,EAAM,EAAA;AAAA,EACN,OAAA,EAAS,MAAA;AAAA,EACT,KAAA,EAAO,YAAA;AAAA,EACP,QAAA,EAAU,UAAA;AAAA,EACV,GAAA,EAAK,cAAA;AAAA,EACL,SAAA,EAAW,YAAA;AAAA,EACX,QAAA,EAAU,SAAA;AAAA,EACV,MAAA,EAAQ,OAAA;AAAA,EACR,OAAA,EAAS,SAAA;AAAA,EACT,KAAA,EAAO,UAAA;AAAA,EACP,QAAA,EAAU,UAAA;AAAA,EACV,QAAA,EAAU,YAAA;AAAA,EACV,GAAA,EAAK,gBAAA;AAAA,EACL,KAAA,EAAO,SAAA;AAAA,EACP,IAAA,EAAM,MAAA;AAAA,EACN,MAAA,EAAQ,QAAA;AAAA,EACR,IAAA,EAAM,WAAA;AAAA,EACN,OAAA,EAAS,SAAA;AAAA,EACT,MAAA,EAAQ,QAAA;AAAA,EACR,IAAA,EAAM,WAAA;AAAA,EACN,KAAA,EAAO,eAAA;AAAA,EACP,GAAA,EAAK,WAAA;AAAA,EACL,OAAA,EAAS,SAAA;AAAA,EACT,KAAA,EAAO,UAAA;AAAA,EACP,KAAA,EAAO,OAAA;AAAA,EACP,QAAA,EAAU,QAAA;AAAA,EACV,QAAA,EAAU,SAAA;AAAA,EACV,EAAA,EAAI,UAAA;AAAA,EACJ,GAAA,EAAK,aAAA;AAAA,EACL,IAAA,EAAM,YAAA;AAAA,EACN,QAAA,EAAU,gBAAA;AAAA,EACV,OAAA,EAAS,SAAA;AAAA,EACT,KAAA,EAAO,cAAA;AAAA,EACP,KAAA,EAAO,YAAA;AAAA,EACP,KAAA,EAAO,QAAA;AAAA,EACP,GAAA,EAAK,aAAA;AAAA,EACL,OAAA,EAAS,gBAAA;AAAA,EACT,OAAA,EAAS,gBAAA;AAAA,EACT,OAAA,EAAS,eAAA;AAAA,EACT,GAAA,EAAK,KAAA;AAAA,EACL,SAAA,EAAW;AACb,CAAA;;;ACvGA,IAAM,aAAA,GAAsC;AAAA,EAC1C,IAAA,EAAM,MAAA;AAAA,EACN,GAAA,EAAK,KAAA;AAAA,EACL,IAAA,EAAM,SAAA;AAAA,EACN,MAAA,EAAQ;AACV,CAAA;AAEO,SAAS,cAAc,IAAA,EAAuC;AACnE,EAAA,MAAM,IAAA,GAAa,KAAK,IAAA,IAAQ,MAAA;AAChC,EAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,KAAA,IAAS,aAAA,CAAc,IAAI,CAAA;AAC9C,EAAA,MAAM,IAAA,GAAO,KAAK,IAAA,IAAQ,EAAA;AAC1B,EAAA,OACE,CAAA,oBAAA,EAAuB,IAAI,CAAA,6BAAA,EACG,UAAA,CAAW,KAAK,CAAC,CAAA,gCAAA,EAClB,UAAA,CAAW,IAAI,CAAC,CAAA,YAAA,CAAA;AAGjD;;;ACJO,SAAS,UAAU,IAAA,EAAmC;AAC3D,EAAA,MAAM,IAAA,GAAO,IAAA,CAAK,QAAA,IAAY,EAAC;AAC/B,EAAA,MAAM,IAAA,GAAO,IAAA,CAAK,SAAA,IAAa,EAAC;AAEhC,EAAA,MAAM,IAAA,GAAO,GAAA;AACb,EAAA,MAAM,IAAA,GAAO,EAAA;AACb,EAAA,MAAM,KAAA,GAAQ,EAAA;AACd,EAAA,MAAM,IAAA,GAAO,EAAA;AACb,EAAA,MAAM,GAAA,GAAM,EAAA;AACZ,EAAA,MAAM,GAAA,GAAM,EAAA;AAEZ,EAAA,IAAI,CAAA,GAAI,GAAA;AACR,EAAA,IAAI,IAAA,GAAO,CAAA;AACX,EAAA,MAAM,KAAA,GAAqB,IAAA,CAAK,GAAA,CAAI,CAAC,CAAA,KAAM;AACzC,IAAA,MAAM,IAAA,GAAO,CAAA,CAAE,OAAA,IAAW,EAAC;AAC3B,IAAA,MAAM,CAAA,GAAI,KAAA,GAAQ,IAAA,CAAK,MAAA,GAAS,IAAA,GAAO,EAAA;AACvC,IAAA,MAAM,GAAA,GAAiB,EAAE,IAAA,EAAM,CAAA,CAAE,IAAA,EAAM,OAAA,EAAS,IAAA,EAAM,CAAA,EAAG,CAAA,EAAG,GAAA,EAAK,CAAA,EAAG,IAAA,EAAM,CAAA,EAAE;AAC5E,IAAA,CAAA,IAAK,IAAA,GAAO,IAAA;AACZ,IAAA,IAAI,CAAA,GAAI,MAAM,IAAA,GAAO,CAAA;AACrB,IAAA,OAAO,GAAA;AAAA,EACT,CAAC,CAAA;AAED,EAAA,MAAM,CAAA,GAAI,GAAA,GAAM,CAAA,GAAI,IAAA,CAAK,MAAA,GAAS,IAAA,GAAO,IAAA,CAAK,GAAA,CAAI,CAAA,EAAG,IAAA,CAAK,MAAA,GAAS,CAAC,CAAA,GAAI,IAAA;AACxE,EAAA,MAAM,CAAA,GAAI,MAAM,IAAA,GAAO,EAAA;AAEvB,EAAA,MAAM,MAAA,uBAAa,GAAA,EAAuB;AAC1C,EAAA,KAAA,MAAW,KAAK,KAAA,EAAO,MAAA,CAAO,GAAA,CAAI,CAAA,CAAE,MAAM,CAAC,CAAA;AAE3C,EAAA,IAAI,CAAA,GACF,CAAA,kBAAA,EAAqB,CAAC,CAAA,CAAA,EAAI,CAAC,CAAA,uDAAA,CAAA;AAI7B,EAAA,KAAA,MAAW,KAAK,IAAA,EAAM;AACpB,IAAA,MAAM,CAAA,GAAI,MAAA,CAAO,GAAA,CAAI,CAAA,CAAE,IAAI,CAAA;AAC3B,IAAA,MAAM,CAAA,GAAI,MAAA,CAAO,GAAA,CAAI,CAAA,CAAE,EAAE,CAAA;AACzB,IAAA,IAAI,CAAC,CAAA,IAAK,CAAC,CAAA,EAAG;AACd,IAAA,MAAM,EAAA,GAAK,CAAA,CAAE,CAAA,GAAI,CAAA,CAAE,CAAA;AACnB,IAAA,MAAM,EAAA,GAAK,EAAE,CAAA,GAAI,EAAA;AACjB,IAAA,MAAM,KAAK,CAAA,CAAE,CAAA;AACb,IAAA,MAAM,EAAA,GAAK,EAAE,CAAA,GAAI,EAAA;AACjB,IAAA,MAAM,EAAA,GAAA,CAAM,KAAK,EAAA,IAAM,CAAA;AACvB,IAAA,CAAA,IACE,CAAA,UAAA,EAAa,EAAE,CAAA,CAAA,EAAI,EAAE,CAAA,EAAA,EAAK,EAAE,CAAA,EAAA,EAAK,EAAE,CAAA,EAAA,EAAK,EAAE,CAAA,0CAAA,EAC7B,EAAA,GAAK,EAAE,CAAA,CAAA,EAAI,EAAA,GAAK,CAAC,CAAA,EAAA,EAAK,EAAE,CAAA,CAAA,EAAI,EAAE,CAAA,EAAA,EAAK,EAAA,GAAK,EAAE,CAAA,CAAA,EAAI,EAAA,GAAK,CAAC,CAAA,gCAAA,CAAA;AACnE,IAAA,IAAI,CAAA,CAAE,SAAS,MAAA,EAAW;AACxB,MAAA,MAAM,CAAA,GAAI,EAAA;AACV,MAAA,CAAA,IACE,CAAA,SAAA,EAAY,KAAK,CAAA,GAAI,CAAC,SAAS,EAAA,GAAK,EAAA,IAAM,CAAA,GAAI,CAAC,CAAA,SAAA,EAAY,CAAC,+DAChD,EAAE,CAAA,KAAA,EAAA,CAAS,KAAK,EAAA,IAAM,CAAA,GAAI,CAAC,CAAA,qBAAA,EAAwB,UAAA,CAAW,CAAA,CAAE,IAAI,CAAC,CAAA,OAAA,CAAA;AAAA,IACrF;AAAA,EACF;AAGA,EAAA,KAAA,MAAW,KAAK,KAAA,EAAO;AACrB,IAAA,CAAA,IACE,CAAA,SAAA,EAAY,EAAE,CAAC,CAAA,KAAA,EAAQ,EAAE,CAAC,CAAA,SAAA,EAAY,CAAA,CAAE,CAAC,CAAA,UAAA,EAAa,CAAA,CAAE,CAAC,CAAA,gDAAA,EAC7C,CAAA,CAAE,CAAC,CAAA,KAAA,EAAQ,CAAA,CAAE,CAAC,CAAA,SAAA,EAAY,CAAA,CAAE,CAAC,CAAA,UAAA,EAAa,KAAK,CAAA,kCAAA,EAC/C,EAAE,CAAC,CAAA,KAAA,EAAQ,EAAE,CAAA,GAAI,KAAA,GAAQ,CAAC,CAAA,SAAA,EAAY,CAAA,CAAE,CAAC,CAAA,sCAAA,EACzC,CAAA,CAAE,CAAA,GAAI,EAAE,CAAA,GAAI,CAAC,QAAQ,CAAA,CAAE,CAAA,GAAI,EAAE,CAAA,uBAAA,EAA0B,UAAA,CAAW,CAAA,CAAE,IAAI,CAAC,CAAA,OAAA,CAAA;AACvF,IAAA,CAAA,CAAE,OAAA,CAAQ,OAAA,CAAQ,CAAC,CAAA,EAAG,CAAA,KAAM;AAC1B,MAAA,MAAM,EAAA,GAAK,CAAA,CAAE,CAAA,GAAI,KAAA,GAAQ,KAAK,CAAA,GAAI,IAAA;AAClC,MAAA,MAAM,KAAA,GAAQ,CAAA,CAAE,EAAA,KAAO,IAAA,IAAQ,CAAA,CAAE,EAAA,KAAO,IAAA,GAAO,CAAA,CAAE,CAAA,GAAI,EAAA,GAAK,CAAA,CAAE,CAAA,GAAI,EAAA;AAChE,MAAA,IAAI,IAAI,CAAA,EAAG;AACT,QAAA,CAAA,IAAK,CAAA,UAAA,EAAa,CAAA,CAAE,CAAC,CAAA,MAAA,EAAS,EAAA,GAAK,EAAE,CAAA,MAAA,EAAS,CAAA,CAAE,CAAA,GAAI,CAAA,CAAE,CAAC,CAAA,MAAA,EAAS,KAAK,EAAE,CAAA,sBAAA,CAAA;AAAA,MACzE;AACA,MAAA,IAAI,CAAA,CAAE,OAAO,IAAA,EAAM;AACjB,QAAA,CAAA,IAAK,CAAA,SAAA,EAAY,CAAA,CAAE,CAAA,GAAI,EAAE,QAAQ,EAAE,CAAA,0BAAA,CAAA;AAAA,MACrC,CAAA,MAAA,IAAW,CAAA,CAAE,EAAA,KAAO,IAAA,EAAM;AACxB,QAAA,CAAA,IAAK,CAAA,SAAA,EAAY,CAAA,CAAE,CAAA,GAAI,EAAE,QAAQ,EAAE,CAAA,6BAAA,CAAA;AAAA,MACrC;AACA,MAAA,CAAA,IACE,CAAA,SAAA,EAAY,KAAK,CAAA,KAAA,EAAQ,EAAE,oBAAoB,UAAA,CAAW,CAAA,CAAE,IAAI,CAAC,CAAA,gBAAA,EACrD,CAAA,CAAE,IAAI,CAAA,CAAE,CAAA,GAAI,EAAE,CAAA,KAAA,EAAQ,EAAE,0CAA0C,UAAA,CAAW,CAAA,CAAE,IAAA,IAAQ,EAAE,CAAC,CAAA,OAAA,CAAA;AAAA,IAC1G,CAAC,CAAA;AAAA,EACH;AAEA,EAAA,CAAA,IAAK,CAAA,MAAA,CAAA;AAEL,EAAA,MAAM,IAAA,GAA2C;AAAA,IAC/C,GAAA,EAAK,IAAA;AAAA,IACL,KAAA,EAAO,SAAA;AAAA,IACP,GAAI,KAAK,KAAA,KAAU,MAAA,GAAY,EAAE,KAAA,EAAO,IAAA,CAAK,KAAA,EAAM,GAAI,EAAC;AAAA,IACxD,GAAI,KAAK,WAAA,KAAgB,MAAA,GAAY,EAAE,IAAA,EAAM,IAAA,CAAK,WAAA,EAAY,GAAI;AAAC,GACrE;AACA,EAAA,OAAO,YAAA,CAAa,MAAM,CAAC,CAAA;AAC7B;;;ACvGO,SAAS,aAAa,IAAA,EAAsC;AACjE,EAAA,MAAM,IAAA,GAAO,IAAA,CAAK,OAAA,IAAW,EAAC;AAC9B,EAAA,IAAI,CAAA,GAAI,CAAA,oBAAA,CAAA;AACR,EAAA,KAAA,MAAW,OAAO,IAAA,EAAM;AACtB,IAAA,MAAM,SAAS,GAAA,CAAI,KAAA,IAAS,EAAC,EAC1B,GAAA,CAAI,CAAC,CAAA,KAAM;AACV,MAAA,MAAM,GAAA,GACJ,EAAE,GAAA,KAAQ,MAAA,GACN,6BAA6B,UAAA,CAAW,CAAA,CAAE,GAAG,CAAC,CAAA,MAAA,CAAA,GAC9C,EAAA;AACN,MAAA,OACE,qDAC+B,UAAA,CAAW,CAAA,CAAE,KAAK,CAAC,WAClD,GAAA,GACA,CAAA,MAAA,CAAA;AAAA,IAEJ,CAAC,CAAA,CACA,IAAA,CAAK,EAAE,CAAA;AACV,IAAA,CAAA,IACE,8CACyB,UAAA,CAAW,GAAA,CAAI,KAAK,CAAC,WAC9C,KAAA,GACA,CAAA,MAAA,CAAA;AAAA,EACJ;AACA,EAAA,OAAO,CAAA,GAAI,CAAA,MAAA,CAAA;AACb;;;ACNA,IAAM,IAAA,GAAmC;AAAA,EACvC,MAAM,EAAE,GAAA,EAAK,YAAY,MAAA,EAAQ,SAAA,EAAW,KAAK,aAAA,EAAc;AAAA,EAC/D,UAAU,EAAE,GAAA,EAAK,mBAAmB,MAAA,EAAQ,QAAA,EAAU,KAAK,UAAA,EAAW;AAAA,EACtE,OAAO,EAAE,GAAA,EAAK,mBAAmB,MAAA,EAAQ,QAAA,EAAU,KAAK,UAAA,EAAW;AAAA,EACnE,OAAO,EAAE,GAAA,EAAK,gBAAgB,MAAA,EAAQ,OAAA,EAAS,KAAK,cAAA,EAAe;AAAA,EACnE,MAAM,EAAE,GAAA,EAAK,IAAI,MAAA,EAAQ,IAAA,EAAM,KAAK,eAAA;AACtC,CAAA;AAEA,IAAM,UAAA,GAAa,qCAAA;AAEnB,SAAS,cAAA,CACP,MACA,SAAA,EACQ;AACR,EAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,MAAA,CAAO,CAAC,CAAA,KAAM,CAAA,CAAE,OAAA,KAAY,MAAA,IAAa,CAAA,CAAE,OAAA,CAAQ,MAAA,GAAS,CAAC,CAAA;AAChF,EAAA,IAAI,KAAA,CAAM,MAAA,KAAW,CAAA,EAAG,OAAO,EAAA;AAE/B,EAAA,MAAM,GAAA,GAAM,KAAA,CACT,GAAA,CAAI,CAAC,CAAA,KAAM;AACV,IAAA,MAAM,MAAA,GAAS,CAAA,CAAE,IAAA,KAAS,OAAA,GAAU,cAAA,GAAiB,EAAA;AACrD,IAAA,MAAM,WAAA,GAAc,CAAA,CAAE,IAAA,KAAS,OAAA,GAAU,MAAA,GAAS,EAAA;AAClD,IAAA,MAAM,WAAW,SAAA,CAAU,GAAA,CAAI,EAAE,IAAI,CAAA,EAAG,QAAQ,CAAA,CAAE,IAAA;AAClD,IAAA,MAAM,MAAA,GAAS,CAAA,CAAE,IAAA,KAAS,MAAA,GAAS,KAAK,CAAA,QAAA,EAAW,UAAA,CAAW,SAAA,CAAU,GAAA,CAAI,EAAE,EAAE,CAAA,EAAG,IAAA,IAAQ,CAAA,CAAE,EAAE,CAAC,CAAA,CAAA;AAChG,IAAA,MAAM,aAAa,CAAA,EAAG,UAAA,CAAW,QAAQ,CAAC,GAAG,MAAM,CAAA,CAAA;AACnD,IAAA,MAAM,IAAA,GACJ,CAAA,CAAE,IAAA,KAAS,MAAA,IAAa,CAAA,CAAE,IAAA,CAAK,MAAA,GAAS,CAAA,GACpC,CAAA,iBAAA,EAAoB,UAAA,CAAW,CAAA,CAAE,IAAI,CAAC,CAAA,MAAA,CAAA,GACtC,EAAA;AACN,IAAA,MAAM,IAAA,GACJ,CAAA,CAAE,IAAA,KAAS,MAAA,IAAa,CAAA,CAAE,IAAA,CAAK,MAAA,GAAS,CAAA,GACpC,CAAA,wBAAA,EAA2B,UAAA,CAAW,CAAA,CAAE,IAAI,CAAC,CAAA,OAAA,CAAA,GAC7C,EAAA;AACN,IAAA,OACE,CAAA,GAAA,EAAM,MAAM,CAAA,wBAAA,EACc,WAAW,KAAK,UAAU,CAAA,kCAAA,EACtB,UAAA,CAAW,CAAA,CAAE,OAAA,IAAW,EAAE,CAAC,CAAA,OAAA,CAAA,GACzD,OACA,IAAA,GACA,CAAA,KAAA,CAAA;AAAA,EAEJ,CAAC,CAAA,CACA,IAAA,CAAK,EAAE,CAAA;AAEV,EAAA,OACE,6EAEO,GAAG,CAAA,WAAA,CAAA;AAGd;AAEA,SAAS,WAAW,IAAA,EAA6D;AAC/E,EAAA,IAAI,IAAA,CAAK,MAAA,KAAW,CAAA,EAAG,OAAO,EAAA;AAC9B,EAAA,MAAM,QAAQ,IAAA,CACX,GAAA,CAAI,CAAC,CAAA,KAAM,CAAA,cAAA,EAAiB,WAAW,CAAA,CAAE,KAAK,CAAC,CAAA,WAAA,EAAc,WAAW,CAAA,CAAE,KAAK,CAAC,CAAA,OAAA,CAAS,CAAA,CACzF,KAAK,EAAE,CAAA;AACV,EAAA,OAAO,6BAA6B,KAAK,CAAA,MAAA,CAAA;AAC3C;AAEO,SAAS,eAAe,IAAA,EAAwC;AACrE,EAAA,MAAM,MAAA,GAAS,IAAA,CAAK,MAAA,IAAU,EAAC;AAC/B,EAAA,MAAM,QAAA,GAAW,IAAA,CAAK,QAAA,IAAY,EAAC;AACnC,EAAA,MAAM,CAAA,GAAI,IAAA,CAAK,GAAA,CAAI,MAAA,CAAO,QAAQ,CAAC,CAAA;AACnC,EAAA,MAAM,OAAA,GAAU,EAAA;AAChB,EAAA,MAAM,KAAA,GAAQ,GAAA;AACd,EAAA,MAAM,GAAA,GAAM,EAAA;AACZ,EAAA,MAAM,KAAA,GAAQ,EAAA;AACd,EAAA,MAAM,KAAA,GAAQ,EAAA;AACd,EAAA,MAAM,KAAK,CAAC,CAAA,KAAsB,UAAU,KAAA,GAAQ,CAAA,GAAI,KAAK,KAAA,GAAQ,GAAA,CAAA;AACrE,EAAA,MAAM,QAAQ,OAAA,GAAU,CAAA,GAAI,CAAA,GAAI,KAAA,GAAA,CAAS,IAAI,CAAA,IAAK,GAAA;AAClD,EAAA,MAAM,GAAA,GAAM,CAAC,EAAA,KAAuB,MAAA,CAAO,UAAU,CAAC,CAAA,KAAM,CAAA,CAAE,EAAA,KAAO,EAAE,CAAA;AACvE,EAAA,MAAM,SAAA,GAAY,EAAA;AAClB,EAAA,MAAM,IAAA,GAAO,EAAA;AAeb,EAAA,MAAM,IAAA,GAAc,QAAA,CAAS,GAAA,CAAI,CAAC,GAAG,CAAA,KAAW;AAC9C,IAAA,MAAM,IAAA,GAAY;AAAA,MAChB,GAAG,CAAA,GAAI,CAAA;AAAA,MACP,CAAA,EAAG,YAAY,CAAA,GAAI,IAAA;AAAA,MACnB,KAAA,EAAO,GAAA,CAAI,CAAA,CAAE,IAAI,CAAA;AAAA,MACjB,GAAA,EAAK,GAAA,CAAI,CAAA,CAAE,EAAE,CAAA;AAAA,MACb,IAAA,EAAO,EAAE,IAAA,IAAQ,MAAA;AAAA,MACjB,KAAA,EAAO,EAAE,KAAA,IAAS,EAAA;AAAA,MAClB,MAAM,CAAA,CAAE,IAAA;AAAA,MACR,IAAI,CAAA,CAAE;AAAA,KACR;AACA,IAAA,IAAI,CAAA,CAAE,OAAA,KAAY,MAAA,EAAW,IAAA,CAAK,UAAU,CAAA,CAAE,OAAA;AAC9C,IAAA,IAAI,CAAA,CAAE,IAAA,KAAS,MAAA,EAAW,IAAA,CAAK,OAAO,CAAA,CAAE,IAAA;AACxC,IAAA,IAAI,CAAA,CAAE,IAAA,KAAS,MAAA,EAAW,IAAA,CAAK,OAAO,CAAA,CAAE,IAAA;AACxC,IAAA,OAAO,IAAA;AAAA,EACT,CAAC,CAAA;AACD,EAAA,MAAM,MAAA,GAAS,SAAA,GAAY,QAAA,CAAS,MAAA,GAAS,IAAA,GAAO,EAAA;AACpD,EAAA,MAAM,SAAS,MAAA,GAAS,CAAA;AAExB,EAAA,MAAM,WAAA,GAAc,MAAA,CAAO,GAAA,CAAI,CAAC,GAAG,CAAA,KAAM;AACvC,IAAA,IAAI,CAAA,KAAM,GAAG,OAAO,IAAA;AACpB,IAAA,MAAM,KAAK,IAAA,CAAK,MAAA,CAAO,CAAC,CAAA,KAAM,EAAE,KAAA,KAAU,CAAA,IAAK,CAAA,CAAE,GAAA,KAAQ,CAAC,CAAA,CAAE,GAAA,CAAI,CAAC,CAAA,KAAM,EAAE,CAAC,CAAA;AAC1E,IAAA,IAAI,EAAA,CAAG,MAAA,KAAW,CAAA,EAAG,OAAO,IAAA;AAC5B,IAAA,MAAM,EAAA,GAAK,UAAA,CAAW,IAAA,CAAK,CAAA,EAAG,CAAA,CAAE,IAAI,CAAA,CAAA,EAAI,CAAA,CAAE,GAAA,IAAO,EAAE,CAAA,CAAE,CAAA;AACrD,IAAA,OAAO,EAAE,CAAA,EAAG,EAAA,EAAI,IAAA,CAAK,GAAA,CAAI,GAAG,EAAE,CAAA,GAAI,CAAA,EAAG,EAAA,EAAI,KAAK,GAAA,CAAI,GAAG,EAAE,CAAA,GAAI,GAAG,EAAA,EAAG;AAAA,EACnE,CAAC,CAAA;AAED,EAAA,IAAI,CAAA,GACF,CAAA,kBAAA,EAAqB,KAAK,CAAA,CAAA,EAAI,MAAM,CAAA,+lBAAA,CAAA;AAWtC,EAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,MAAA,CAAO,QAAQ,CAAA,EAAA,EAAK;AACtC,IAAA,MAAM,CAAA,GAAI,GAAG,CAAC,CAAA;AACd,IAAA,CAAA,IAAK,CAAA,UAAA,EAAa,CAAC,CAAA,MAAA,EAAS,KAAA,GAAQ,KAAK,CAAA,MAAA,EAAS,CAAC,SAAS,MAAM,CAAA,oBAAA,CAAA;AAAA,EACpE;AAEA,EAAA,KAAA,MAAW,MAAM,WAAA,EAAa;AAC5B,IAAA,IAAI,CAAC,EAAA,EAAI;AACT,IAAA,CAAA,IAAK,YAAY,EAAA,CAAG,EAAA,CAAG,CAAC,CAAA,GAAI,CAAC,QAAQ,EAAA,CAAG,EAAE,CAAA,oBAAA,EAAuB,EAAA,CAAG,KAAK,EAAA,CAAG,EAAE,sBAAsB,EAAA,CAAG,EAAA,GAAK,QAAQ,EAAE,CAAA,GAAA,CAAA;AAAA,EACxH;AAEA,EAAA,MAAA,CAAO,OAAA,CAAQ,CAAC,CAAA,EAAG,CAAA,KAAM;AACvB,IAAA,MAAM,MAAA,GAAS,CAAA,CAAE,QAAA,KAAa,IAAA,GAAO,MAAA,GAAS,EAAA;AAC9C,IAAA,MAAM,MACJ,CAAA,CAAE,GAAA,KAAQ,SACN,CAAA,SAAA,EAAY,EAAA,CAAG,CAAC,CAAC,CAAA,KAAA,EAAQ,KAAA,GAAQ,EAAE,yBAAyB,MAAM,CAAA,EAAA,EAAK,WAAW,CAAA,CAAE,GAAG,CAAC,CAAA,OAAA,CAAA,GACxF,EAAA;AACN,IAAA,CAAA,IACE,CAAA,YAAA,EACY,EAAA,CAAG,CAAC,CAAA,GAAI,KAAA,GAAQ,CAAC,CAAA,KAAA,EAAQ,KAAK,CAAA,SAAA,EAAY,KAAK,CAAA,UAAA,EAAa,KAAK,CAAA,kBAAA,EAAqB,MAAM,CAAA,YAAA,EAC5F,EAAA,CAAG,CAAC,CAAC,CAAA,KAAA,EAAQ,KAAA,GAAQ,EAAE,CAAA,yBAAA,EAA4B,UAAA,CAAW,CAAA,CAAE,IAAI,CAAC,CAAA,OAAA,CAAA,GACjF,GAAA,GACA,CAAA,IAAA,CAAA;AAAA,EACJ,CAAC,CAAA;AAED,EAAA,KAAA,MAAW,KAAK,IAAA,EAAM;AACpB,IAAA,MAAM,CAAA,GAAI,IAAA,CAAK,CAAA,CAAE,IAAI,CAAA;AAGrB,IAAA,IAAI,CAAA,CAAE,IAAA,KAAS,MAAA,IAAU,CAAA,CAAE,MAAM,CAAA,EAAG;AAClC,MAAA,IAAI,CAAA,CAAE,QAAQ,CAAA,EAAG;AACjB,MAAA,MAAM,CAAA,GAAI,EAAA,CAAG,CAAA,CAAE,KAAK,CAAA;AACpB,MAAA,CAAA,IACE,CAAA,eAAA,EACe,CAAA,GAAI,EAAE,CAAA,MAAA,EAAS,CAAA,CAAE,CAAA,GAAI,EAAE,CAAA,sCAAA,EAC1B,CAAA,GAAI,EAAE,CAAA,KAAA,EAAQ,CAAA,CAAE,CAAA,GAAI,GAAG,CAAA,0BAAA,EAA6B,CAAA,CAAE,CAAC,CAAA,gBAAA,EACvD,CAAA,GAAI,EAAE,CAAA,KAAA,EAAQ,CAAA,CAAE,CAAA,GAAI,CAAC,CAAA,wBAAA,EAA2B,UAAA,CAAW,CAAA,CAAE,KAAK,CAAC,CAAA,WAAA,CAAA;AAEjF,MAAA;AAAA,IACF;AAEA,IAAA,IAAI,CAAA,CAAE,KAAA,KAAU,CAAA,CAAE,GAAA,EAAK;AACrB,MAAA,MAAM,CAAA,GAAI,EAAA,CAAG,CAAA,CAAE,KAAK,CAAA;AACpB,MAAA,MAAM,MAAA,GAAS,CAAA,CAAE,IAAA,KAAS,OAAA,GAAU,MAAA,GAAS,EAAA;AAC7C,MAAA,CAAA,IACE,CAAA,eAAA,EACe,CAAA,GAAI,EAAE,CAAA,MAAA,EAAS,CAAA,CAAE,CAAA,GAAI,EAAE,CAAA,0BAAA,EAA6B,MAAM,CAAA,YAAA,EAC7D,CAAA,GAAI,EAAE,QAAQ,CAAA,CAAE,CAAA,GAAI,GAAG,CAAA,0BAAA,EAA6B,CAAA,CAAE,CAAC,CAAA,gBAAA,EACvD,CAAA,GAAI,EAAE,CAAA,KAAA,EAAQ,CAAA,CAAE,CAAA,GAAI,CAAC,CAAA,wBAAA,EAA2B,UAAA,CAAW,CAAA,CAAE,KAAK,CAAC,CAAA,WAAA,CAAA;AAEjF,MAAA;AAAA,IACF;AAEA,IAAA,MAAM,EAAA,GAAK,EAAA,CAAG,CAAA,CAAE,KAAK,CAAA;AACrB,IAAA,MAAM,EAAA,GAAK,EAAA,CAAG,CAAA,CAAE,GAAG,CAAA;AACnB,IAAA,MAAM,MAAM,EAAA,GAAK,EAAA;AACjB,IAAA,MAAM,GAAA,GAAM,EAAA,IAAM,GAAA,GAAM,EAAA,GAAK,CAAA,CAAA;AAC7B,IAAA,MAAM,QAAA,GAAW,CAAA,CAAE,IAAA,KAAS,OAAA,GAAU,MAAA,GAAS,EAAA;AAE/C,IAAA,MAAM,MAAA,GAAS,GAAA,GAAM,EAAA,GAAK,EAAA,GAAK,EAAA,GAAK,EAAA;AAGpC,IAAA,MAAM,MAAA,GAAS,GAAA,GAAM,MAAA,GAAS,EAAA,GAAK,MAAA,GAAS,EAAA;AAC5C,IAAA,MAAM,WAAA,GAAc,MAAM,OAAA,GAAU,KAAA;AACpC,IAAA,MAAM,aAAa,CAAA,CAAE,MAAA,KAAW,OAAO,CAAA,kBAAA,EAAqB,CAAA,CAAE,MAAM,CAAA,EAAA,CAAA,GAAO,EAAA;AAC3E,IAAA,CAAA,IACE,CAAA,UAAA,EAAa,EAAE,CAAA,MAAA,EAAS,CAAA,CAAE,CAAC,CAAA,MAAA,EAAS,GAAG,SAAS,CAAA,CAAE,CAAC,YAAY,CAAA,CAAE,GAAG,IAAI,UAAU,CAAA,cAAA,EACnE,MAAM,CAAA,MAAA,EAAS,CAAA,CAAE,CAAA,GAAI,EAAE,CAAA,0BAAA,EAA6B,QAAQ,eAC/D,MAAM,CAAA,KAAA,EAAQ,EAAE,CAAA,GAAI,GAAG,6BAA6B,CAAA,CAAE,CAAC,CAAA,gBAAA,EACvD,MAAM,CAAA,KAAA,EAAQ,CAAA,CAAE,IAAI,CAAC,CAAA,SAAA,EAAY,EAAE,GAAG,CAAA,eAAA,EAAkB,WAAW,CAAA,EAAA,EAAK,UAAA,CAAW,CAAA,CAAE,KAAK,CAAC,CAAA,OAAA,CAAA;AAAA,EAC3G;AAEA,EAAA,CAAA,IAAK,CAAA,MAAA,CAAA;AAEL,EAAA,MAAM,SAAA,uBAAgB,GAAA,EAA8B;AACpD,EAAA,KAAA,MAAW,CAAA,IAAK,MAAA,EAAQ,SAAA,CAAU,GAAA,CAAI,CAAA,CAAE,IAAI,EAAE,IAAA,EAAM,CAAA,CAAE,IAAA,EAAM,CAAA;AAC5D,EAAA,MAAM,QAAA,GAAW,cAAA,CAAe,IAAA,EAAM,SAAS,CAAA;AAC/C,EAAA,MAAM,WAAW,IAAA,CAAK,IAAA,KAAS,SAAY,UAAA,CAAW,IAAA,CAAK,IAAI,CAAA,GAAI,EAAA;AAGnE,EAAA,MAAM,MAAA,GAAS,IAAA,CAAK,QAAA,EAAU,MAAA,CAAO,WAAA,EAAY;AACjD,EAAA,MAAM,GAAA,GAAM,IAAA,CAAK,QAAA,EAAU,MAAA,IAAU,MAAA;AACrC,EAAA,MAAM,aAAa,MAAM;AACvB,IAAA,IAAI,IAAA,CAAK,QAAA,EAAU,IAAA,KAAS,MAAA,EAAW;AACrC,MAAA,MAAM,CAAA,GAAI,KAAK,KAAA,KAAU,MAAA,GAAY,YAAY,UAAA,CAAW,IAAA,CAAK,KAAK,CAAC,CAAA,CAAA,GAAK,EAAA;AAC5E,MAAA,OAAO,SAAS,UAAA,CAAW,IAAA,CAAK,SAAS,IAAI,CAAC,UAAU,CAAC,CAAA,CAAA;AAAA,IAC3D;AACA,IAAA,OAAO,KAAK,KAAA,KAAU,MAAA,GAAY,UAAA,CAAW,IAAA,CAAK,KAAK,CAAA,GAAI,EAAA;AAAA,EAC7D,CAAA,GAAG;AAEH,EAAA,MAAM,SAAA,GAAgD;AAAA,IACpD,GAAA;AAAA,IACA,GAAI,WAAW,MAAA,GAAY,EAAE,UAAU,MAAA,EAAO,GAAI,EAAE,KAAA,EAAO,SAAA,EAAU;AAAA,IACrE,GAAI,SAAA,CAAU,MAAA,GAAS,IAAI,EAAE,SAAA,KAAc,EAAC;AAAA,IAC5C,GAAI,KAAK,WAAA,KAAgB,MAAA,GAAY,EAAE,IAAA,EAAM,IAAA,CAAK,WAAA,EAAY,GAAI,EAAC;AAAA,IACnE,GAAI,SAAS,MAAA,GAAS,CAAA,GAAI,EAAE,UAAA,EAAY,QAAA,KAAa;AAAC,GACxD;AAEA,EAAA,OAAO,YAAA,CAAa,SAAA,EAAW,CAAA,GAAI,QAAQ,CAAA;AAC7C;;;AC3OA,SAAS,SAAS,CAAA,EAAgB;AAChC,EAAA,IAAI,OAAO,CAAA,KAAM,QAAA,EAAU,OAAO,EAAA;AAClC,EAAA,MAAM,QAAkB,EAAC;AACzB,EAAA,IAAI,CAAA,CAAE,KAAA,KAAU,GAAA,EAAK,KAAA,CAAM,KAAK,GAAG,CAAA;AACnC,EAAA,IAAI,CAAA,CAAE,KAAA,KAAU,GAAA,EAAK,KAAA,CAAM,KAAK,GAAG,CAAA;AACnC,EAAA,IAAI,CAAA,CAAE,SAAA,KAAc,IAAA,EAAM,KAAA,CAAM,KAAK,IAAI,CAAA;AACzC,EAAA,OAAO,KAAA,CAAM,KAAK,GAAG,CAAA;AACvB;AAEA,SAAS,SAAS,CAAA,EAAgB;AAChC,EAAA,OAAO,OAAO,CAAA,KAAM,QAAA,GAAW,CAAA,GAAI,CAAA,CAAE,KAAA;AACvC;AAEA,SAAS,UAAU,CAAA,EAAiB;AAClC,EAAA,IAAI,OAAO,CAAA,KAAM,QAAA,IAAY,OAAO,CAAA,KAAM,UAAU,OAAO,EAAA;AAC3D,EAAA,MAAM,QAAkB,EAAC;AACzB,EAAA,IAAI,EAAE,IAAA,EAAM,KAAA,CAAM,KAAK,CAAA,KAAA,EAAQ,CAAA,CAAE,IAAI,CAAA,CAAE,CAAA;AACvC,EAAA,IAAI,CAAA,CAAE,IAAA,KAAS,IAAA,EAAM,KAAA,CAAM,KAAK,MAAM,CAAA;AACtC,EAAA,IAAI,CAAA,CAAE,SAAA,KAAc,IAAA,EAAM,KAAA,CAAM,KAAK,IAAI,CAAA;AACzC,EAAA,OAAO,KAAA,CAAM,KAAK,GAAG,CAAA;AACvB;AAEA,SAAS,UAAU,CAAA,EAAiB;AAClC,EAAA,IAAI,OAAO,MAAM,QAAA,IAAY,OAAO,MAAM,QAAA,EAAU,OAAO,WAAW,CAAC,CAAA;AACvE,EAAA,OAAO,UAAA,CAAW,EAAE,CAAC,CAAA;AACvB;AAEO,SAAS,YAAY,IAAA,EAAqC;AAC/D,EAAA,MAAM,IAAA,GAAO,IAAA,CAAK,OAAA,IAAW,EAAC;AAC9B,EAAA,MAAM,IAAA,GAAO,IAAA,CAAK,IAAA,IAAQ,EAAC;AAC3B,EAAA,MAAM,IAAA,GAAO,IAAA,CACV,GAAA,CAAI,CAAC,CAAA,KAAM;AACV,IAAA,MAAM,GAAA,GAAM,SAAS,CAAC,CAAA;AACtB,IAAA,OAAO,CAAA,GAAA,EAAM,GAAA,GAAM,CAAA,QAAA,EAAW,GAAG,CAAA,CAAA,CAAA,GAAM,EAAE,CAAA,CAAA,EAAI,UAAA,CAAW,QAAA,CAAS,CAAC,CAAC,CAAC,CAAA,KAAA,CAAA;AAAA,EACtE,CAAC,CAAA,CACA,IAAA,CAAK,EAAE,CAAA;AACV,EAAA,MAAM,IAAA,GAAO,IAAA,CACV,GAAA,CAAI,CAAC,CAAA,KAAM;AACV,IAAA,MAAM,SAAS,CAAA,IAAK,IACjB,GAAA,CAAI,CAAC,GAAG,CAAA,KAAM;AACb,MAAA,MAAM,GAAA,GAAM,KAAK,CAAC,CAAA;AAClB,MAAA,MAAM,MAAM,CAAC,GAAA,KAAQ,MAAA,GAAY,QAAA,CAAS,GAAG,CAAA,GAAI,EAAA,EAAI,SAAA,CAAU,CAAC,CAAC,CAAA,CAC9D,MAAA,CAAO,OAAO,CAAA,CACd,KAAK,GAAG,CAAA;AACX,MAAA,OAAO,CAAA,GAAA,EAAM,MAAM,CAAA,QAAA,EAAW,GAAG,MAAM,EAAE,CAAA,CAAA,EAAI,SAAA,CAAU,CAAC,CAAC,CAAA,KAAA,CAAA;AAAA,IAC3D,CAAC,CAAA,CACA,IAAA,CAAK,EAAE,CAAA;AACV,IAAA,OAAO,OAAO,KAAK,CAAA,KAAA,CAAA;AAAA,EACrB,CAAC,CAAA,CACA,IAAA,CAAK,EAAE,CAAA;AACV,EAAA,MAAM,IAAA,GACJ,KAAK,IAAA,KAAS,MAAA,GAAY,uBAAuB,UAAA,CAAW,IAAA,CAAK,IAAI,CAAC,CAAA,IAAA,CAAA,GAAS,EAAA;AACjF,EAAA,OAAO,CAAA,qCAAA,EAAwC,IAAI,CAAA,oBAAA,EAAuB,IAAI,mBAAmB,IAAI,CAAA,CAAA;AACvG;;;AC5DO,SAAS,eAAe,IAAA,EAAwC;AACrE,EAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,KAAA,IAAS,EAAC;AAC7B,EAAA,IAAI,CAAA,GAAI,CAAA,gBAAA,CAAA;AACR,EAAA,KAAA,MAAW,MAAM,KAAA,EAAO;AACtB,IAAA,MAAM,EAAA,GAAK,GAAG,MAAA,IAAU,QAAA;AACxB,IAAA,MAAM,IAAA,GACJ,GAAG,IAAA,KAAS,MAAA,GAAY,wBAAwB,UAAA,CAAW,EAAA,CAAG,IAAI,CAAC,CAAA,MAAA,CAAA,GAAW,EAAA;AAChF,IAAA,MAAM,IAAA,GACJ,GAAG,IAAA,KAAS,MAAA,GAAY,wBAAwB,UAAA,CAAW,EAAA,CAAG,IAAI,CAAC,CAAA,MAAA,CAAA,GAAW,EAAA;AAChF,IAAA,CAAA,IACE,CAAA,yCAAA,EACuB,EAAE,CAAA,SAAA,CAAA,GACzB,IAAA,GACA,CAAA,sBAAA,EAAyB,WAAW,EAAA,CAAG,KAAK,CAAC,CAAA,MAAA,CAAA,GAC7C,IAAA,GACA,CAAA,MAAA,CAAA;AAAA,EACJ;AACA,EAAA,OAAO,CAAA,GAAI,CAAA,MAAA,CAAA;AACb;;;AChBO,SAAS,cAAc,IAAA,EAAuC;AACnE,EAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,KAAA,IAAS,EAAC;AAC7B,EAAA,MAAM,WAAW,KAAA,CAAM,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,CAAE,UAAU,MAAS,CAAA;AACxD,EAAA,MAAM,SAAS,KAAA,CAAM,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,CAAE,QAAQ,MAAS,CAAA;AAEpD,EAAA,MAAM,SAAA,GAAY,CAAC,eAAA,EAAiB,iBAAA,EAAmB,mBAAmB,CAAA;AAC1E,EAAA,IAAI,QAAA,EAAU,SAAA,CAAU,IAAA,CAAK,gBAAgB,CAAA;AAC7C,EAAA,IAAI,MAAA,EAAQ,SAAA,CAAU,IAAA,CAAK,cAAc,CAAA;AAEzC,EAAA,IAAI,CAAA,GAAI,CAAA,8BAAA,EAAiC,SAAA,CAAU,IAAA,CAAK,EAAE,CAAC,CAAA,oBAAA,CAAA;AAC3D,EAAA,KAAA,MAAW,MAAM,KAAA,EAAO;AACtB,IAAA,MAAM,EAAA,GAAK,GAAG,MAAA,IAAU,MAAA;AACxB,IAAA,MAAM,KAAK,EAAA,CAAG,QAAA;AACd,IAAA,MAAM,MAAA,GACJ,OAAO,MAAA,GAAY,CAAA,iBAAA,EAAoB,EAAE,CAAA,EAAA,EAAK,UAAA,CAAW,EAAE,CAAC,CAAA,OAAA,CAAA,GAAY,EAAA;AAC1E,IAAA,MAAM,MAAA,GAAS,EAAA,KAAO,MAAA,GAAS,eAAA,GAAkB,EAAA;AACjD,IAAA,MAAM,KAAA,GAAQ;AAAA,MACZ,CAAA,qBAAA,EAAwB,UAAA,CAAW,EAAA,CAAG,IAAI,CAAC,CAAA,KAAA,CAAA;AAAA,MAC3C,CAAA,oBAAA,EAAuB,EAAE,CAAA,EAAA,EAAK,UAAA,CAAW,EAAE,CAAC,CAAA,YAAA,CAAA;AAAA,MAC5C,OAAO,MAAM,CAAA,KAAA;AAAA,KACf;AACA,IAAA,IAAI,QAAA,QAAgB,IAAA,CAAK,CAAA,IAAA,EAAO,WAAW,EAAA,CAAG,KAAA,IAAS,EAAE,CAAC,CAAA,KAAA,CAAO,CAAA;AACjE,IAAA,IAAI,MAAA,QAAc,IAAA,CAAK,CAAA,IAAA,EAAO,WAAW,EAAA,CAAG,GAAA,IAAO,EAAE,CAAC,CAAA,KAAA,CAAO,CAAA;AAC7D,IAAA,CAAA,IAAK,MAAM,MAAM,CAAA,CAAA,EAAI,KAAA,CAAM,IAAA,CAAK,EAAE,CAAC,CAAA,KAAA,CAAA;AAAA,EACrC;AACA,EAAA,OAAO,CAAA,GAAI,CAAA,gBAAA,CAAA;AACb;;;AC1BO,SAAS,gBAAgB,IAAA,EAAyC;AACvE,EAAA,MAAM,IAAA,GAAO,KAAK,IAAA,IAAQ,MAAA;AAC1B,EAAA,MAAM,IAAA,GAAO,KAAK,IAAA,IAAQ,QAAA;AAC1B,EAAA,MAAM,MAAA,GAAS,KAAK,MAAA,IAAU,QAAA;AAE9B,EAAA,MAAM,QAAkB,EAAC;AACzB,EAAA,IAAI,KAAK,QAAA,KAAa,MAAA;AACpB,IAAA,KAAA,CAAM,KAAK,CAAA,uCAAA,EAAuC,UAAA,CAAW,IAAA,CAAK,QAAQ,CAAC,CAAA,OAAA,CAAS,CAAA;AACtF,EAAA,IAAI,IAAA,CAAK,MAAA,KAAW,MAAA,IAAa,IAAA,CAAK,MAAA,KAAW,IAAA;AAC/C,IAAA,KAAA,CAAM,KAAK,CAAA,yBAAA,EAA4B,UAAA,CAAW,IAAA,CAAK,MAAM,CAAC,CAAA,WAAA,CAAa,CAAA;AAE7E,EAAA,IAAI,CAAA,GACF,CAAA,mDAAA,EACmC,UAAA,CAAW,IAAI,CAAC,CAAA,mBAAA,EAAsB,UAAA,CAAW,IAAI,CAAC,CAAA,iBAAA,EAAoB,UAAA,CAAW,MAAM,CAAC,CAAA,WAAA,CAAA;AACjI,EAAA,IAAI,KAAA,CAAM,SAAS,CAAA,EAAG;AACpB,IAAA,CAAA,IAAK,CAAA,wBAAA,EAA2B,KAAA,CAAM,IAAA,CAAK,EAAE,CAAC,CAAA,MAAA,CAAA;AAAA,EAChD;AACA,EAAA,CAAA,IAAK,CAAA,MAAA,CAAA;AAEL,EAAA,MAAM,IAAA,GAAO,IAAA,CAAK,QAAA,IAAY,EAAC;AAC/B,EAAA,IAAI,IAAA,CAAK,SAAS,CAAA,EAAG;AACnB,IAAA,CAAA,IAAK,CAAA,+CAAA,CAAA;AACL,IAAA,KAAA,MAAW,KAAK,IAAA,EAAM;AACpB,MAAA,CAAA,IACE,uFACiD,UAAA,CAAW,CAAA,CAAE,KAAA,IAAS,EAAE,CAAC,CAAA,oDAAA,EAC1B,UAAA,CAAW,CAAA,CAAE,IAAA,IAAQ,EAAE,CAAC,CAAA,oDAAA,EACxB,WAAW,CAAA,CAAE,IAAA,IAAQ,EAAE,CAAC,CAAA,mBAAA,CAAA;AAAA,IAE5E;AAAA,EACF;AAEA,EAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,KAAA,IAAS,EAAC;AAC7B,EAAA,IAAI,KAAA,CAAM,SAAS,CAAA,EAAG;AACpB,IAAA,CAAA,IAAK,CAAA,0DAAA,CAAA;AACL,IAAA,KAAA,MAAW,KAAK,KAAA,EAAO;AACrB,MAAA,CAAA,IACE,CAAA,yCAAA,EACoB,UAAA,CAAW,CAAA,CAAE,IAAA,IAAQ,EAAE,CAAC,CAAA,OAAA,EACzC,UAAA,CAAW,CAAA,CAAE,KAAA,IAAS,EAAE,CAAC,CAAA,OAAA,CAAA;AAAA,IAEhC;AACA,IAAA,CAAA,IAAK,CAAA,MAAA,CAAA;AAAA,EACP;AAEA,EAAA,OAAO,CAAA;AACT;;;AC9CO,SAAS,iBAAiB,IAAA,EAAqC;AACpE,EAAA,MAAM,MAAA,GAAS,IAAA,CAAK,MAAA,IAAU,EAAC;AAC/B,EAAA,MAAM,IAAA,GAAO,MAAA,CACV,GAAA,CAAI,CAAC,CAAA,KAAM;AACV,IAAA,MAAM,CAAA,GAAA,CAAK,CAAA,CAAE,IAAA,IAAQ,GAAA,EAAK,WAAA,EAAY;AACtC,IAAA,MAAM,IAAA,GAAO,EAAE,IAAA,IAAQ,EAAA;AACvB,IAAA,IAAI,MAAM,GAAA,EAAK,OAAO,CAAA,IAAA,EAAO,UAAA,CAAW,IAAI,CAAC,CAAA,KAAA,CAAA;AAC7C,IAAA,IAAI,MAAM,OAAA,EAAS,OAAO,CAAA,YAAA,EAAe,UAAA,CAAW,IAAI,CAAC,CAAA,aAAA,CAAA;AACzD,IAAA,IAAI,MAAM,IAAA,EAAM;AACd,MAAA,MAAM,KAAA,GAAA,CAAS,CAAA,CAAE,KAAA,IAAS,IAAI,GAAA,CAAI,CAAC,CAAA,KAAM,CAAA,IAAA,EAAO,WAAW,CAAC,CAAC,CAAA,KAAA,CAAO,CAAA,CAAE,KAAK,EAAE,CAAA;AAC7E,MAAA,OAAO,OAAO,KAAK,CAAA,KAAA,CAAA;AAAA,IACrB;AACA,IAAA,IAAI,MAAM,IAAA,EAAM;AACd,MAAA,MAAM,KAAA,GAAA,CAAS,CAAA,CAAE,KAAA,IAAS,IAAI,GAAA,CAAI,CAAC,CAAA,KAAM,CAAA,IAAA,EAAO,WAAW,CAAC,CAAC,CAAA,KAAA,CAAO,CAAA,CAAE,KAAK,EAAE,CAAA;AAC7E,MAAA,OAAO,OAAO,KAAK,CAAA,KAAA,CAAA;AAAA,IACrB;AACA,IAAA,OAAO,CAAA,GAAA,EAAM,UAAA,CAAW,IAAI,CAAC,CAAA,IAAA,CAAA;AAAA,EAC/B,CAAC,CAAA,CACA,IAAA,CAAK,EAAE,CAAA;AACV,EAAA,OAAO,sBAAsB,IAAI,CAAA,MAAA,CAAA;AACnC;;;ACtBO,SAAS,eAAe,IAAA,EAAwC;AACrE,EAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,KAAA,IAAS,EAAC;AAC7B,EAAA,MAAM,OAAO,KAAA,CACV,GAAA;AAAA,IACC,CAAC,CAAA,KACC,CAAA,qBAAA,EAAwB,UAAA,CAAW,CAAA,CAAE,IAAI,CAAC,CAAA,SAAA,EAAY,UAAA,CAAW,CAAA,CAAE,GAAG,CAAC,CAAA,WAAA;AAAA,GAC3E,CACC,KAAK,EAAE,CAAA;AACV,EAAA,OAAO,yBAAyB,IAAI,CAAA,MAAA,CAAA;AACtC;;;ACRO,SAAS,eAAe,IAAA,EAAwC;AACrE,EAAA,MAAM,SAAA,GAAY,KAAK,SAAA,IAAa,MAAA;AACpC,EAAA,MAAM,SAAA,GAAY,KAAK,SAAA,IAAa,MAAA;AACpC,EAAA,MAAM,IAAA,GAAA,CAAQ,IAAA,CAAK,IAAA,IAAQ,IAAI,GAAA,CAAI,CAAC,CAAA,KAAM,CAAA,qBAAA,EAAwB,WAAW,CAAC,CAAC,CAAA,MAAA,CAAQ,CAAA,CAAE,KAAK,EAAE,CAAA;AAChG,EAAA,MAAM,IAAA,GAAA,CAAQ,IAAA,CAAK,IAAA,IAAQ,IAAI,GAAA,CAAI,CAAC,CAAA,KAAM,CAAA,qBAAA,EAAwB,WAAW,CAAC,CAAC,CAAA,MAAA,CAAQ,CAAA,CAAE,KAAK,EAAE,CAAA;AAChG,EAAA,OACE,CAAA,6DAAA,EAEwB,UAAA,CAAW,SAAS,CAAC,CAAA,MAAA,CAAA,GAC7C,IAAA,GACA,CAAA,mDAAA,EAEwB,UAAA,CAAW,SAAS,CAAC,CAAA,MAAA,CAAA,GAC7C,IAAA,GACA,CAAA,YAAA,CAAA;AAGJ;;;ACjBO,SAAS,UAAU,IAAA,EAAmC;AAC3D,EAAA,MAAM,GAAA,GAAM,IAAA,CAAK,OAAA,IAAW,EAAC;AAC7B,EAAA,MAAM,GAAA,GAAM,IAAA,CAAK,MAAA,IAAU,EAAC;AAC5B,EAAA,MAAM,QAAA,GAAA,CAAY,GAAA,CAAI,KAAA,IAAS,IAC5B,GAAA,CAAI,CAAC,CAAA,KAAM,CAAA,qBAAA,EAAwB,WAAW,CAAC,CAAC,CAAA,MAAA,CAAQ,CAAA,CACxD,KAAK,EAAE,CAAA;AACV,EAAA,MAAM,QAAA,GAAA,CAAY,GAAA,CAAI,KAAA,IAAS,IAC5B,GAAA,CAAI,CAAC,CAAA,KAAM,CAAA,qBAAA,EAAwB,WAAW,CAAC,CAAC,CAAA,MAAA,CAAQ,CAAA,CACxD,KAAK,EAAE,CAAA;AACV,EAAA,MAAM,QAAA,GAAW,IAAI,KAAA,IAAS,SAAA;AAC9B,EAAA,MAAM,QAAA,GAAW,IAAI,KAAA,IAAS,QAAA;AAC9B,EAAA,MAAM,IAAA,GACJ,KAAK,IAAA,KAAS,MAAA,GAAY,yBAAyB,UAAA,CAAW,IAAA,CAAK,IAAI,CAAC,CAAA,MAAA,CAAA,GAAW,EAAA;AACrF,EAAA,OACE,CAAA,qEAAA,EAGyB,UAAA,CAAW,QAAQ,CAAC,CAAA,MAAA,CAAA,GAC7C,QAAA,GACA,CAAA,wFAAA,EAGyB,UAAA,CAAW,QAAQ,CAAC,CAAA,MAAA,CAAA,GAC7C,QAAA,GACA,iBAEA,IAAA,GACA,CAAA,MAAA,CAAA;AAEJ;;;AC7BA,IAAM,cAAc,EAAE,EAAA,EAAI,UAAK,IAAA,EAAM,QAAA,EAAK,MAAM,QAAA,EAAI;AAE7C,SAAS,YAAY,IAAA,EAAqC;AAC/D,EAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,KAAA,IAAS,EAAC;AAC7B,EAAA,MAAM,KAAA,GAAQ,KAAA,CACX,GAAA,CAAI,CAAC,CAAA,KAAM;AACV,IAAA,MAAM,MAAA,GACJ,CAAA,CAAE,MAAA,KAAW,MAAA,GACT,CAAA,yBAAA,EAA4B,UAAU,CAAA,CAAE,MAAA,EAAQ,SAAS,CAAC,CAAA,CAAA,CAAA,GAC1D,EAAA;AACN,IAAA,MAAM,QACJ,CAAA,CAAE,KAAA,KAAU,SACR,CAAA,uBAAA,EAA0B,CAAA,CAAE,SAAS,MAAM,CAAA,EAAA,EAAK,YAAY,CAAA,CAAE,KAAA,IAAS,MAAM,CAAC,CAAA,CAAA,EAAI,WAAW,CAAA,CAAE,KAAK,CAAC,CAAA,MAAA,CAAA,GACrG,EAAA;AACN,IAAA,OACE,CAAA,sBAAA,EAAyB,MAAM,CAAA,yBAAA,EACJ,UAAA,CAAW,CAAA,CAAE,KAAK,CAAC,CAAA,8BAAA,EACnB,UAAA,CAAW,CAAA,CAAE,KAAK,CAAC,WAC9C,KAAA,GACA,CAAA,MAAA,CAAA;AAAA,EAEJ,CAAC,CAAA,CACA,IAAA,CAAK,EAAE,CAAA;AACV,EAAA,OAAO,yBAAyB,KAAK,CAAA,MAAA,CAAA;AACvC;;;ACvBA,IAAM,KAAK,IAAI,GAAA;AAAA,EAEX,srBAAA,CASA,MAAM,KAAK;AACf,CAAA;AAEA,IAAM,KAAK,IAAI,GAAA;AAAA,EAEX,iPAAA,CAGA,MAAM,KAAK;AACf,CAAA;AAEA,IAAM,QAAA,GACJ,gIAAA;AAOK,SAAS,cAAc,IAAA,EAAsB;AAClD,EAAA,IAAI,IAAA,CAAK,MAAA,KAAW,CAAA,EAAG,OAAO,EAAA;AAC9B,EAAA,MAAM,GAAA,GAAM,OAAO,IAAI,CAAA;AACvB,EAAA,IAAI,GAAA,GAAM,EAAA;AACV,EAAA,IAAI,IAAA,GAAO,CAAA;AACX,EAAA,QAAA,CAAS,SAAA,GAAY,CAAA;AACrB,EAAA,IAAI,CAAA;AACJ,EAAA,OAAA,CAAQ,CAAA,GAAI,QAAA,CAAS,IAAA,CAAK,GAAG,OAAO,IAAA,EAAM;AACxC,IAAA,IAAI,CAAA,CAAE,KAAA,GAAQ,IAAA,EAAM,GAAA,IAAO,UAAA,CAAW,IAAI,KAAA,CAAM,IAAA,EAAM,CAAA,CAAE,KAAK,CAAC,CAAA;AAC9D,IAAA,MAAM,CAAA,GAAI,EAAE,CAAC,CAAA;AACb,IAAA,IAAI,CAAA,CAAE,CAAC,CAAA,KAAM,MAAA,EAAW;AACtB,MAAA,GAAA,IAAO,CAAA,kBAAA,EAAqB,UAAA,CAAW,CAAC,CAAC,CAAA,OAAA,CAAA;AAAA,IAC3C,CAAA,MAAA,IAAW,CAAA,CAAE,CAAC,CAAA,KAAM,MAAA,EAAW;AAC7B,MAAA,GAAA,IAAO,CAAA,kBAAA,EAAqB,UAAA,CAAW,CAAC,CAAC,CAAA,OAAA,CAAA;AAAA,IAC3C,CAAA,MAAA,IAAW,CAAA,CAAE,CAAC,CAAA,KAAM,MAAA,EAAW;AAC7B,MAAA,GAAA,IAAO,CAAA,kBAAA,EAAqB,UAAA,CAAW,CAAC,CAAC,CAAA,OAAA,CAAA;AAAA,IAC3C,CAAA,MAAO;AACL,MAAA,MAAM,EAAA,GAAK,EAAE,WAAA,EAAY;AACzB,MAAA,IAAI,EAAA,CAAG,IAAI,EAAE,CAAA,SAAU,CAAA,iBAAA,EAAoB,UAAA,CAAW,CAAC,CAAC,CAAA,OAAA,CAAA;AAAA,WAAA,IAC/C,EAAA,CAAG,IAAI,EAAE,CAAA,SAAU,CAAA,iBAAA,EAAoB,UAAA,CAAW,CAAC,CAAC,CAAA,OAAA,CAAA;AAAA,WAAA,IACpD,GAAA,CAAI,QAAA,CAAS,SAAS,CAAA,KAAM,GAAA;AACnC,QAAA,GAAA,IAAO,CAAA,iBAAA,EAAoB,UAAA,CAAW,CAAC,CAAC,CAAA,OAAA,CAAA;AAAA,WACrC,GAAA,IAAO,WAAW,CAAC,CAAA;AAAA,IAC1B;AACA,IAAA,IAAA,GAAO,QAAA,CAAS,SAAA;AAAA,EAClB;AACA,EAAA,IAAI,IAAA,GAAO,IAAI,MAAA,EAAQ,GAAA,IAAO,WAAW,GAAA,CAAI,KAAA,CAAM,IAAI,CAAC,CAAA;AACxD,EAAA,OAAO,GAAA;AACT;;;AC1DO,SAAS,WAAW,IAAA,EAAoC;AAC7D,EAAA,MAAM,MAAA,GAAS,IAAA,CAAK,MAAA,IAAU,EAAC;AAC/B,EAAA,OAAO,MAAA,CACJ,GAAA;AAAA,IACC,CAAC,CAAA,KACC,CAAA,uDAAA,EAES,WAAW,CAAA,CAAE,KAAA,IAAS,EAAE,CAAC,CAAA,aAAA,EACzB,UAAA,CAAW,CAAA,CAAE,QAAQ,EAAE,CAAC,qBAEzB,aAAA,CAAc,CAAA,CAAE,IAAI,CAAC,CAAA,YAAA;AAAA,GAEjC,CACC,KAAK,EAAE,CAAA;AACZ;;;ACfO,SAAS,aAAa,IAAA,EAAsC;AACjE,EAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,KAAA,IAAS,EAAC;AAC7B,EAAA,MAAM,IAAA,GAAO,KAAA,CACV,GAAA,CAAI,CAAC,EAAA,KAAO;AACX,IAAA,MAAM,GAAA,GACJ,GAAG,QAAA,KAAa,MAAA,GACZ,2BAA2B,UAAA,CAAW,EAAA,CAAG,QAAQ,CAAC,CAAA,MAAA,CAAA,GAClD,EAAA;AACN,IAAA,MAAM,KAAA,GACJ,GAAG,KAAA,KAAU,MAAA,GACT,8BAA8B,UAAA,CAAW,EAAA,CAAG,KAAK,CAAC,CAAA,OAAA,CAAA,GAClD,EAAA;AACN,IAAA,MAAM,IAAA,GACJ,GAAG,IAAA,KAAS,MAAA,GAAY,4BAA4B,UAAA,CAAW,EAAA,CAAG,IAAI,CAAC,CAAA,MAAA,CAAA,GAAW,EAAA;AACpF,IAAA,MAAM,IAAA,GACJ,GAAG,IAAA,KAAS,MAAA,GAAY,4BAA4B,UAAA,CAAW,EAAA,CAAG,IAAI,CAAC,CAAA,MAAA,CAAA,GAAW,EAAA;AACpF,IAAA,OACE,CAAA,6BAAA,EACQ,IAAI,CAAA,EAAG,GAAG,CAAA,qCAAA,EAEW,UAAA,CAAW,EAAA,CAAG,KAAK,CAAC,CAAA,EAAG,KAAK,CAAA,MAAA,CAAA,GACzD,IAAA,GACA,CAAA,YAAA,CAAA;AAAA,EAGJ,CAAC,CAAA,CACA,IAAA,CAAK,EAAE,CAAA;AACV,EAAA,OAAO,uBAAuB,IAAI,CAAA,MAAA,CAAA;AACpC;;;ACxBO,SAAS,WAAW,IAAA,EAAoC;AAC7D,EAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,KAAA,IAAS,EAAC;AAC7B,EAAA,MAAM,IAAA,uBAAW,GAAA,EAAkB;AACnC,EAAA,MAAM,QAAA,uBAAe,GAAA,EAAsB;AAC3C,EAAA,KAAA,MAAW,KAAK,KAAA,EAAO;AACrB,IAAA,IAAA,CAAK,GAAA,CAAI,CAAA,CAAE,EAAA,EAAI,CAAC,CAAA;AAChB,IAAA,QAAA,CAAS,GAAA,CAAI,CAAA,CAAE,EAAA,EAAI,EAAE,CAAA;AAAA,EACvB;AACA,EAAA,MAAM,QAAkB,EAAC;AACzB,EAAA,KAAA,MAAW,KAAK,KAAA,EAAO;AACrB,IAAA,IAAI,EAAE,MAAA,KAAW,MAAA,IAAa,KAAK,GAAA,CAAI,CAAA,CAAE,MAAM,CAAA,EAAG;AAChD,MAAA,QAAA,CAAS,IAAI,CAAA,CAAE,MAAM,CAAA,EAAG,IAAA,CAAK,EAAE,EAAE,CAAA;AAAA,IACnC,CAAA,MAAO;AACL,MAAA,KAAA,CAAM,IAAA,CAAK,EAAE,EAAE,CAAA;AAAA,IACjB;AAAA,EACF;AAGA,EAAA,MAAM,MAAa,EAAC;AACpB,EAAA,MAAM,IAAA,uBAAW,GAAA,EAAY;AAC7B,EAAA,MAAM,IAAA,GAAO,CAAC,EAAA,EAAY,KAAA,KAAwB;AAChD,IAAA,IAAI,IAAA,CAAK,GAAA,CAAI,EAAE,CAAA,EAAG;AAClB,IAAA,IAAA,CAAK,IAAI,EAAE,CAAA;AACX,IAAA,MAAM,IAAA,GAAO,IAAA,CAAK,GAAA,CAAI,EAAE,CAAA;AACxB,IAAA,IAAI,SAAS,MAAA,EAAW;AACxB,IAAA,MAAM,IAAA,GAAO,QAAA,CAAS,GAAA,CAAI,EAAE,KAAK,EAAC;AAClC,IAAA,GAAA,CAAI,IAAA,CAAK,EAAE,IAAA,EAAM,KAAA,EAAO,QAAQ,IAAA,CAAK,MAAA,GAAS,GAAG,CAAA;AACjD,IAAA,KAAA,MAAW,CAAA,IAAK,IAAA,EAAM,IAAA,CAAK,CAAA,EAAG,QAAQ,CAAC,CAAA;AAAA,EACzC,CAAA;AACA,EAAA,KAAA,MAAW,CAAA,IAAK,KAAA,EAAO,IAAA,CAAK,CAAA,EAAG,CAAC,CAAA;AAEhC,EAAA,MAAM,IAAA,GAAO,GAAA,CACV,GAAA,CAAI,CAAC,GAAA,KAAQ;AACZ,IAAA,MAAM,SAAA,GAAY,GAAA,CAAI,MAAA,GAAS,SAAA,GAAY,EAAA;AAC3C,IAAA,MAAM,KAAA,GAAQ,GAAA,CAAI,MAAA,GAAS,QAAA,GAAM,QAAA;AACjC,IAAA,MAAM,IAAA,GACJ,GAAA,CAAI,IAAA,CAAK,IAAA,KAAS,MAAA,GACd,CAAA,oBAAA,EAAuB,UAAA,CAAW,GAAA,CAAI,IAAA,CAAK,IAAI,CAAC,CAAA,OAAA,CAAA,GAChD,EAAA;AACN,IAAA,OACE,CAAA,oBAAA,EAAuB,SAAS,CAAA,sBAAA,EAAyB,GAAA,CAAI,QAAQ,EAAE,CAAA,qBAAA,EACnD,KAAK,CAAA,4BAAA,EACD,WAAW,GAAA,CAAI,IAAA,CAAK,KAAK,CAAC,YAClD,IAAA,GACA,CAAA,MAAA,CAAA;AAAA,EAEJ,CAAC,CAAA,CACA,IAAA,CAAK,EAAE,CAAA;AACV,EAAA,OAAO,0BAA0B,IAAI,CAAA,MAAA,CAAA;AACvC;;;ACtDA,IAAM,eAAe,CAAC,SAAA,EAAW,WAAW,SAAA,EAAW,SAAA,EAAW,WAAW,SAAS,CAAA;AAE/E,SAAS,cAAc,IAAA,EAAuC;AACnE,EAAA,MAAM,MAAA,GAAS,IAAA,CAAK,MAAA,IAAU,EAAC;AAC/B,EAAA,MAAM,CAAA,GAAI,IAAA,CAAK,GAAA,CAAI,MAAA,CAAO,QAAQ,CAAC,CAAA;AACnC,EAAA,MAAM,CAAA,GAAI,GAAA;AACV,EAAA,MAAM,GAAA,GAAM,EAAA;AACZ,EAAA,MAAM,IAAA,GAAO,KAAK,GAAA,CAAI,EAAA,EAAI,KAAK,KAAA,CAAM,GAAA,GAAM,CAAC,CAAC,CAAA;AAC7C,EAAA,MAAM,GAAA,GAAM,CAAA;AACZ,EAAA,MAAM,OAAO,CAAA,GAAI,CAAA;AACjB,EAAA,MAAM,GAAA,GAAM,EAAA;AACZ,EAAA,MAAM,IAAA,GAAO,GAAA;AACb,EAAA,MAAM,CAAA,GAAI,GAAA,GAAM,CAAA,IAAK,IAAA,GAAO,GAAA,CAAA,GAAO,GAAA;AAEnC,EAAA,MAAM,QAAA,GAAW,MAAA,CACd,GAAA,CAAI,CAAC,GAAG,CAAA,KAAM;AACb,IAAA,MAAM,CAAA,GAAI,GAAA,GAAM,CAAA,IAAK,IAAA,GAAO,GAAA,CAAA;AAC5B,IAAA,MAAM,IAAA,GAAO,QAAQ,CAAA,GAAI,CAAA,CAAA;AACzB,IAAA,MAAM,IAAA,GAAO,IAAA,IAAA,CAAS,CAAA,GAAI,CAAA,IAAK,CAAA,CAAA;AAC/B,IAAA,MAAM,IAAA,GAAO,YAAA,CAAa,CAAA,GAAI,YAAA,CAAa,MAAM,CAAA,IAAK,SAAA;AACtD,IAAA,MAAM,OACJ,CAAA,CAAE,IAAA,KAAS,MAAA,GACP,CAAA,SAAA,EAAY,IAAI,CAAA,KAAA,EAAQ,CAAA,GAAI,IAAA,GAAO,CAAA,GAAI,EAAE,CAAA,mBAAA,EAAsB,UAAA,CAAW,CAAA,CAAE,IAAI,CAAC,CAAA,OAAA,CAAA,GACjF,EAAA;AACN,IAAA,OACE,uBACoB,IAAA,GAAO,IAAA,GAAO,CAAC,CAAA,CAAA,EAAI,CAAC,IAAI,IAAA,GAAO,IAAA,GAAO,CAAC,CAAA,CAAA,EAAI,CAAC,CAAA,CAAA,EAAI,IAAA,GAAO,OAAO,CAAC,CAAA,CAAA,EAAI,IAAI,IAAI,CAAA,CAAA,EAAI,IAAA,GAAO,IAAA,GAAO,CAAC,CAAA,CAAA,EAAI,CAAA,GAAI,IAAI,CAAA,QAAA,EAAW,IAAI,eACjI,IAAI,CAAA,KAAA,EAAQ,IAAI,IAAA,GAAO,CAAA,GAAI,CAAC,CAAA,oBAAA,EAAuB,UAAA,CAAW,EAAE,KAAK,CAAC,YAClF,IAAA,GACA,CAAA,IAAA,CAAA;AAAA,EAEJ,CAAC,CAAA,CACA,IAAA,CAAK,EAAE,CAAA;AAEV,EAAA,OAAO,CAAA,kBAAA,EAAqB,CAAC,CAAA,CAAA,EAAI,CAAC,sCAAsC,QAAQ,CAAA,MAAA,CAAA;AAClF;;;AClCA,IAAMA,gBAAe,CAAC,SAAA,EAAW,WAAW,SAAA,EAAW,SAAA,EAAW,WAAW,SAAS,CAAA;AAEtF,SAAS,MAAM,CAAA,EAA4B;AACzC,EAAA,IAAI,OAAO,CAAA,KAAM,QAAA,EAAU,OAAO,CAAA;AAClC,EAAA,MAAM,IAAI,UAAA,CAAW,CAAA,CAAE,OAAA,CAAQ,QAAA,EAAU,EAAE,CAAC,CAAA;AAC5C,EAAA,OAAO,MAAA,CAAO,QAAA,CAAS,CAAC,CAAA,GAAI,CAAA,GAAI,CAAA;AAClC;AAEA,SAAS,IAAI,CAAA,EAA4B;AACvC,EAAA,OAAO,OAAO,CAAA,KAAM,QAAA,GAAW,CAAA,CAAE,gBAAe,GAAI,CAAA;AACtD;AAEO,SAAS,aAAa,IAAA,EAAsC;AACjE,EAAA,MAAM,UAAU,IAAA,CAAK,MAAA,IAAU,EAAC,EAAG,OAAO,OAAO,CAAA;AACjD,EAAA,MAAM,CAAA,GAAI,GAAA;AACV,EAAA,MAAM,GAAA,GAAM,EAAA;AACZ,EAAA,MAAM,IAAA,GAAO,EAAA;AACb,EAAA,MAAM,IAAA,GAAO,GAAA;AACb,EAAA,MAAM,GAAA,GAAM,EAAA;AACZ,EAAA,MAAM,KAAK,CAAA,GAAI,CAAA;AACf,EAAA,MAAM,CAAA,GAAI,GAAA,GAAM,MAAA,CAAO,MAAA,GAAS,IAAA,GAAO,GAAA;AAEvC,EAAA,MAAM,IAAA,GAAO,OAAO,GAAA,CAAI,CAAC,MAAM,KAAA,CAAM,CAAA,CAAE,KAAK,CAAC,CAAA;AAC7C,EAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,CAAC,CAAA,IAAK,CAAA;AACzB,EAAA,MAAM,GAAA,GAAM,IAAA,CAAK,GAAA,CAAI,CAAA,EAAG,GAAG,IAAI,CAAA;AAC/B,EAAA,MAAM,GAAA,GAAM,CAAC,CAAA,KAAsB,IAAA,CAAK,IAAI,EAAA,EAAI,IAAA,IAAQ,IAAI,GAAA,CAAI,CAAA;AAEhE,EAAA,MAAM,MAAA,GAAS,MAAA,CACZ,GAAA,CAAI,CAAC,GAAG,CAAA,KAAM;AACb,IAAA,MAAM,CAAA,GAAI,IAAA,CAAK,CAAC,CAAA,IAAK,CAAA;AACrB,IAAA,MAAM,KAAA,GAAQ,CAAA,GAAI,MAAA,CAAO,MAAA,GAAS,CAAA,GAAK,KAAK,CAAA,GAAI,CAAC,CAAA,IAAK,CAAA,GAAK,CAAA,GAAI,IAAA;AAC/D,IAAA,MAAM,IAAA,GAAO,IAAI,CAAC,CAAA;AAClB,IAAA,MAAM,IAAA,GAAO,IAAI,KAAK,CAAA;AACtB,IAAA,MAAM,CAAA,GAAI,MAAM,CAAA,GAAI,IAAA;AACpB,IAAA,MAAM,IAAA,GAAOA,aAAAA,CAAa,CAAA,GAAIA,aAAAA,CAAa,MAAM,CAAA,IAAK,SAAA;AACtD,IAAA,MAAM,GAAA,GAAM,QAAQ,CAAA,GAAI,IAAA,CAAK,MAAO,CAAA,GAAI,KAAA,GAAS,GAAG,CAAA,GAAI,CAAA;AACxD,IAAA,MAAM,MAAM,CAAA,GAAI,CAAA,IAAK,QAAQ,CAAA,GAAI,CAAA,QAAA,EAAQ,GAAG,CAAA,CAAA,CAAA,GAAM,EAAA;AAClD,IAAA,OACE,CAAA,oBAAA,EACoB,EAAA,GAAK,IAAA,GAAO,CAAC,CAAA,CAAA,EAAI,CAAC,CAAA,CAAA,EAAI,EAAA,GAAK,IAAA,GAAO,CAAC,CAAA,CAAA,EAAI,CAAC,IAAI,EAAA,GAAK,IAAA,GAAO,CAAC,CAAA,CAAA,EAAI,CAAA,GAAI,IAAI,CAAA,CAAA,EAAI,EAAA,GAAK,IAAA,GAAO,CAAC,CAAA,CAAA,EAAI,CAAA,GAAI,IAAI,CAAA,QAAA,EAAW,IAAI,CAAA,2CAAA,EACzH,EAAE,CAAA,KAAA,EAAQ,CAAA,GAAI,IAAA,GAAO,CAAA,GAAI,CAAC,CAAA,uBAAA,EAA0B,UAAA,CAAW,CAAA,CAAE,KAAK,CAAC,CAAA,gBAAA,EACvE,EAAE,QAAQ,CAAA,GAAI,IAAA,GAAO,CAAA,GAAI,EAAE,CAAA,qBAAA,EAAwB,UAAA,CAAW,GAAA,CAAI,CAAA,CAAE,KAAK,CAAC,CAAC,CAAA,EAAG,GAAG,CAAA,WAAA,CAAA;AAAA,EAGjG,CAAC,CAAA,CACA,IAAA,CAAK,EAAE,CAAA;AAEV,EAAA,OAAO,CAAA,kBAAA,EAAqB,CAAC,CAAA,CAAA,EAAI,CAAC,qCAAqC,MAAM,CAAA,MAAA,CAAA;AAC/E;;;AC1BO,SAAS,KAAA,CAAM,GAAQ,CAAA,EAAe;AAC3C,EAAA,MAAM,CAAA,GAAI,EAAE,CAAA,EAAG,CAAA,CAAE,CAAA,GAAI,CAAA,CAAE,CAAA,GAAI,CAAA,EAAG,CAAA,EAAG,CAAA,CAAE,CAAA,GAAI,CAAA,CAAE,IAAI,CAAA,EAAE;AAC/C,EAAA,MAAM,CAAA,GAAI,EAAE,CAAA,EAAG,CAAA,CAAE,CAAA,GAAI,CAAA,CAAE,CAAA,GAAI,CAAA,EAAG,CAAA,EAAG,CAAA,CAAE,CAAA,GAAI,CAAA,CAAE,IAAI,CAAA,EAAE;AAC/C,EAAA,MAAM,EAAA,GAAK,CAAA,CAAE,CAAA,GAAI,CAAA,CAAE,CAAA;AACnB,EAAA,MAAM,EAAA,GAAK,CAAA,CAAE,CAAA,GAAI,CAAA,CAAE,CAAA;AACnB,EAAA,IAAI,KAAK,GAAA,CAAI,EAAE,KAAK,IAAA,CAAK,GAAA,CAAI,EAAE,CAAA,EAAG;AAChC,IAAA,MAAMC,MAAK,EAAA,IAAM,CAAA,GAAI,EAAE,CAAA,GAAI,CAAA,CAAE,IAAI,CAAA,CAAE,CAAA;AACnC,IAAA,MAAMC,MAAK,EAAA,IAAM,CAAA,GAAI,EAAE,CAAA,GAAI,CAAA,CAAE,IAAI,CAAA,CAAE,CAAA;AACnC,IAAA,MAAMC,MAAK,CAAA,CAAE,CAAA;AACb,IAAA,MAAMC,MAAK,CAAA,CAAE,CAAA;AACb,IAAA,MAAM,EAAA,GAAA,CAAMH,MAAKC,GAAAA,IAAM,CAAA;AACvB,IAAA,OAAO,EAAE,CAAA,EAAG,CAAA,EAAA,EAAKD,GAAE,CAAA,CAAA,EAAIE,GAAE,MAAM,EAAE,CAAA,GAAA,EAAMC,GAAE,CAAA,GAAA,EAAMF,GAAE,CAAA,CAAA,EAAI,EAAA,EAAI,IAAI,EAAA,EAAA,CAAKC,GAAAA,GAAKC,OAAM,CAAA,EAAE;AAAA,EACjF;AACA,EAAA,MAAM,KAAK,EAAA,IAAM,CAAA,GAAI,EAAE,CAAA,GAAI,CAAA,CAAE,IAAI,CAAA,CAAE,CAAA;AACnC,EAAA,MAAM,KAAK,EAAA,IAAM,CAAA,GAAI,EAAE,CAAA,GAAI,CAAA,CAAE,IAAI,CAAA,CAAE,CAAA;AACnC,EAAA,MAAM,KAAK,CAAA,CAAE,CAAA;AACb,EAAA,MAAM,KAAK,CAAA,CAAE,CAAA;AACb,EAAA,MAAM,EAAA,GAAA,CAAM,KAAK,EAAA,IAAM,CAAA;AACvB,EAAA,OAAO,EAAE,CAAA,EAAG,CAAA,EAAA,EAAK,EAAE,CAAA,CAAA,EAAI,EAAE,MAAM,EAAE,CAAA,GAAA,EAAM,EAAE,CAAA,GAAA,EAAM,EAAE,CAAA,CAAA,EAAI,EAAA,EAAA,CAAK,KAAK,EAAA,IAAM,CAAA,EAAG,IAAI,EAAA,EAAG;AACjF;;;ACrCO,SAAS,QAAA,CAAS,IAAA,EAAe,GAAA,EAAa,QAAA,EAA4B;AAC/E,EAAA,IAAI,SAAS,MAAA,IAAa,IAAA,KAAS,QAAQ,IAAA,KAAS,EAAA,SAAW,EAAC;AAChE,EAAA,MAAM,KAAA,GAAQ,MAAA,CAAO,IAAI,CAAA,CAAE,MAAM,KAAK,CAAA;AACtC,EAAA,MAAM,QAAkB,EAAC;AACzB,EAAA,IAAI,GAAA,GAAM,EAAA;AACV,EAAA,KAAA,MAAW,KAAK,KAAA,EAAO;AACrB,IAAA,IAAI,CAAC,GAAA,EAAK;AACR,MAAA,GAAA,GAAM,CAAA;AACN,MAAA;AAAA,IACF;AACA,IAAA,IAAA,CAAK,GAAA,GAAM,GAAA,GAAM,CAAA,EAAG,MAAA,IAAU,GAAA,EAAK;AACjC,MAAA,GAAA,IAAO,GAAA,GAAM,CAAA;AAAA,IACf,CAAA,MAAO;AACL,MAAA,KAAA,CAAM,KAAK,GAAG,CAAA;AACd,MAAA,GAAA,GAAM,CAAA;AACN,MAAA,IAAI,KAAA,CAAM,WAAW,QAAA,EAAU;AAAA,IACjC;AAAA,EACF;AACA,EAAA,IAAI,OAAO,KAAA,CAAM,MAAA,GAAS,QAAA,EAAU,KAAA,CAAM,KAAK,GAAG,CAAA;AAClD,EAAA,OAAO,KAAA,CAAM,KAAA,CAAM,CAAA,EAAG,QAAQ,CAAA;AAChC;;;ACZO,SAAS,QAAA,CAAS,CAAA,EAAc,KAAA,EAA2B,GAAA,GAAM,KAAA,EAAe;AACrF,EAAA,IAAI,KAAA,KAAU,MAAA,IAAa,KAAA,KAAU,EAAA,EAAI,OAAO,EAAA;AAChD,EAAA,MAAM,IAAI,IAAA,CAAK,GAAA,CAAI,EAAA,EAAI,KAAA,CAAM,SAAS,GAAG,CAAA;AACzC,EAAA,MAAM,QAAA,GAAW,MAAM,MAAA,GAAS,EAAA;AAChC,EAAA,OACE,CAAA,YAAA,EACY,EAAE,EAAA,GAAK,CAAA,GAAI,CAAC,CAAA,KAAA,EAAQ,CAAA,CAAE,EAAA,GAAK,CAAC,CAAA,SAAA,EAAY,CAAC,+DACzC,CAAA,CAAE,EAAE,CAAA,KAAA,EAAQ,CAAA,CAAE,EAAA,GAAK,CAAC,sBAAsB,QAAQ,CAAA,EAAA,EAAK,UAAA,CAAW,KAAK,CAAC,CAAA,WAAA,CAAA;AAGxF;;;ACXA,SAAS,UAAU,IAAA,EAA+B;AAChD,EAAA,QAAQ,QAAQ,SAAA;AAAW,IACzB,KAAK,OAAA;AACH,MAAA,OAAO,EAAE,OAAO,SAAA,EAAW,IAAA,EAAM,WAAW,MAAA,EAAQ,SAAA,EAAW,MAAM,SAAA,EAAU;AAAA,IACjF,KAAK,KAAA;AACH,MAAA,OAAO,EAAE,OAAO,SAAA,EAAW,IAAA,EAAM,WAAW,MAAA,EAAQ,SAAA,EAAW,MAAM,MAAA,EAAO;AAAA,IAC9E,KAAK,UAAA;AACH,MAAA,OAAO,EAAE,OAAO,SAAA,EAAW,IAAA,EAAM,WAAW,MAAA,EAAQ,SAAA,EAAW,MAAM,SAAA,EAAU;AAAA,IACjF;AACE,MAAA,OAAO,EAAE,OAAO,MAAA,EAAQ,IAAA,EAAM,WAAW,MAAA,EAAQ,SAAA,EAAW,MAAM,SAAA,EAAU;AAAA;AAElF;AAEA,IAAM,YAAA,GAAe,0BAAA;AAQd,SAAS,cAAc,IAAA,EAAoC;AAChE,EAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,KAAA,IAAS,EAAC;AAC7B,EAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,KAAA,IAAS,EAAC;AAC7B,EAAA,MAAM,KAAA,GAAQ,GAAA;AACd,EAAA,MAAM,KAAA,GAAQ,EAAA;AACd,EAAA,MAAM,IAAA,GAAO,EAAA;AACb,EAAA,MAAM,IAAA,GAAO,EAAA;AACb,EAAA,MAAM,IAAA,GAAO,EAAA;AACb,EAAA,MAAM,MAAA,GAAS,EAAA;AACf,EAAA,MAAM,MAAA,GAAS,EAAA;AACf,EAAA,MAAM,IAAA,GAAO,IAAA,CAAK,GAAA,CAAI,CAAA,EAAG,GAAG,KAAA,CAAM,GAAA,CAAI,CAAC,CAAA,KAAM,EAAE,GAAA,IAAA,CAAQ,CAAA,CAAE,CAAA,IAAK,CAAA,IAAK,EAAE,CAAC,CAAA;AACtE,EAAA,MAAM,IAAA,GAAO,IAAA,CAAK,GAAA,CAAI,CAAA,EAAG,GAAG,KAAA,CAAM,GAAA,CAAI,CAAC,CAAA,KAAM,CAAA,CAAE,GAAG,CAAC,CAAA;AACnD,EAAA,MAAM,MAAM,CAAC,CAAA,KAAsB,IAAA,GAAA,CAAQ,CAAA,GAAI,MAAM,KAAA,GAAQ,IAAA,CAAA;AAC7D,EAAA,MAAM,MAAM,CAAC,CAAA,KAAsB,MAAA,GAAA,CAAU,CAAA,GAAI,MAAM,KAAA,GAAQ,IAAA,CAAA;AAC/D,EAAA,MAAMC,QAAAA,GAAU,CAAC,CAAA,MAKX;AAAA,IACJ,CAAA,EAAG,GAAA,CAAI,CAAA,CAAE,GAAG,CAAA;AAAA,IACZ,CAAA,EAAG,GAAA,CAAI,CAAA,CAAE,GAAG,CAAA;AAAA,IACZ,CAAA,EAAA,CAAI,EAAE,CAAA,IAAK,CAAA,IAAK,UAAU,CAAA,CAAE,CAAA,IAAK,KAAK,CAAA,IAAK,IAAA;AAAA,IAC3C,CAAA,EAAG;AAAA,GACL,CAAA;AACA,EAAA,MAAM,IAAA,GAAO,IAAI,GAAA,CAAI,KAAA,CAAM,GAAA,CAAI,CAAC,CAAA,KAAM,CAAC,CAAA,CAAE,EAAA,EAAI,CAAC,CAAC,CAAC,CAAA;AAChD,EAAA,MAAM,QAAQ,IAAA,GAAO,CAAA,GAAI,IAAA,GAAO,KAAA,GAAA,CAAS,OAAO,CAAA,IAAK,IAAA;AACrD,EAAA,MAAM,SAAS,MAAA,GAAS,IAAA,GAAO,KAAA,GAAA,CAAS,IAAA,GAAO,KAAK,IAAA,GAAO,MAAA;AAE3D,EAAA,IAAI,CAAA,GAAI,CAAA,kBAAA,EAAqB,KAAK,CAAA,CAAA,EAAI,MAAM,CAAA,qCAAA,CAAA;AAE5C,EAAA,KAAA,MAAW,KAAK,KAAA,EAAO;AACrB,IAAA,MAAM,CAAA,GAAI,IAAA,CAAK,GAAA,CAAI,CAAA,CAAE,IAAI,CAAA;AACzB,IAAA,MAAM,CAAA,GAAI,IAAA,CAAK,GAAA,CAAI,CAAA,CAAE,EAAE,CAAA;AACvB,IAAA,IAAI,CAAC,CAAA,IAAK,CAAC,CAAA,EAAG;AACd,IAAA,MAAM,IAAI,KAAA,CAAMA,QAAAA,CAAQ,CAAC,CAAA,EAAGA,QAAAA,CAAQ,CAAC,CAAC,CAAA;AACtC,IAAA,MAAM,KAAA,GAAQ,EAAE,IAAA,KAAS,OAAA,IAAW,aAAa,IAAA,CAAK,CAAA,CAAE,SAAS,EAAE,CAAA;AACnE,IAAA,MAAM,MAAA,GAAS,QAAQ,SAAA,GAAY,SAAA;AACnC,IAAA,MAAM,MAAA,GAAS,QAAQ,MAAA,GAAS,QAAA;AAChC,IAAA,MAAM,EAAA,GAAK,QAAQ,GAAA,GAAM,GAAA;AACzB,IAAA,CAAA,IACE,CAAA,YAAA,EAAe,CAAA,CAAE,CAAC,CAAA,sBAAA,EAAyB,MAAM,CAAA,gBAAA,EAAmB,EAAE,CAAA,mBAAA,EAAsB,MAAM,SAClG,QAAA,CAAS,CAAA,EAAG,CAAA,CAAE,KAAA,EAAO,KAAK,CAAA,GAC1B,CAAA,IAAA,CAAA;AAAA,EACJ;AAEA,EAAA,KAAA,MAAW,KAAK,KAAA,EAAO;AACrB,IAAA,MAAM,CAAA,GAAIA,SAAQ,CAAC,CAAA;AACnB,IAAA,MAAM,EAAA,GAAK,SAAA,CAAU,CAAA,CAAE,IAAI,CAAA;AAC3B,IAAA,MAAM,EAAA,GAAK,CAAA,CAAE,CAAA,GAAI,CAAA,CAAE,CAAA,GAAI,CAAA;AACvB,IAAA,MAAM,EAAA,GAAK,CAAA,CAAE,CAAA,GAAI,CAAA,CAAE,CAAA,GAAI,CAAA;AACvB,IAAA,IAAI,KAAA;AACJ,IAAA,IAAI,EAAA,CAAG,UAAU,SAAA,EAAW;AAC1B,MAAA,KAAA,GAAQ,CAAA,iBAAA,EAAoB,EAAE,CAAA,CAAA,EAAI,CAAA,CAAE,CAAC,CAAA,CAAA,EAAI,CAAA,CAAE,CAAA,GAAI,CAAA,CAAE,CAAC,CAAA,CAAA,EAAI,EAAE,CAAA,CAAA,EAAI,EAAE,CAAA,CAAA,EAAI,CAAA,CAAE,CAAA,GAAI,CAAA,CAAE,CAAC,CAAA,CAAA,EAAI,CAAA,CAAE,CAAC,CAAA,CAAA,EAAI,EAAE,CAAA,QAAA,EAAW,EAAA,CAAG,IAAI,CAAA,UAAA,EAAa,GAAG,MAAM,CAAA,sBAAA,CAAA;AAAA,IAClI,CAAA,MAAA,IAAW,EAAA,CAAG,KAAA,KAAU,SAAA,EAAW;AACjC,MAAA,KAAA,GAAQ,CAAA,SAAA,EAAY,EAAE,CAAC,CAAA,KAAA,EAAQ,EAAE,CAAC,CAAA,SAAA,EAAY,EAAE,CAAC,CAAA,UAAA,EAAa,EAAE,CAAC,CAAA,MAAA,EAAS,EAAE,CAAA,GAAI,CAAC,WAAW,EAAA,CAAG,IAAI,CAAA,UAAA,EAAa,EAAA,CAAG,MAAM,CAAA,sBAAA,CAAA;AAAA,IAC3H,CAAA,MAAO;AACL,MAAA,KAAA,GAAQ,YAAY,CAAA,CAAE,CAAC,CAAA,KAAA,EAAQ,CAAA,CAAE,CAAC,CAAA,SAAA,EAAY,CAAA,CAAE,CAAC,CAAA,UAAA,EAAa,EAAE,CAAC,CAAA,eAAA,EAAkB,GAAG,IAAI,CAAA,UAAA,EAAa,GAAG,MAAM,CAAA,sBAAA,CAAA;AAAA,IAClH;AACA,IAAA,MAAM,KAAA,GAAQ,QAAA,CAAS,CAAA,CAAE,KAAA,EAAO,IAAI,CAAC,CAAA;AACrC,IAAA,MAAM,QAAQ,KAAA,CACX,GAAA;AAAA,MACC,CAAC,IAAI,CAAA,KACH,CAAA,SAAA,EAAY,EAAE,CAAA,KAAA,EAAQ,EAAA,GAAK,KAAK,KAAA,CAAM,MAAA,GAAS,KAAK,CAAA,GAAI,CAAA,GAAI,EAAE,CAAA,yBAAA,EAA4B,EAAA,CAAG,IAAI,CAAA,EAAA,EAAK,UAAA,CAAW,EAAE,CAAC,CAAA,OAAA;AAAA,KACxH,CACC,KAAK,EAAE,CAAA;AACV,IAAA,CAAA,IAAK,CAAA,0BAAA,EAA6B,KAAK,CAAA,EAAG,KAAK,CAAA,IAAA,CAAA;AAAA,EACjD;AAEA,EAAA,CAAA,IAAK,CAAA,MAAA,CAAA;AACL,EAAA,OAAO,CAAA;AACT;AAEA,SAAS,eAAA,CAAgB,MAA4B,KAAA,EAA8B;AACjF,EAAA,OAAO,YAAA;AAAA,IACL;AAAA,MACE,KAAK,KAAA,CAAM,GAAA;AAAA,MACX,GAAI,MAAM,KAAA,KAAU,MAAA,GAAY,EAAE,KAAA,EAAO,KAAA,CAAM,KAAA,EAAM,GAAI,EAAC;AAAA,MAC1D,GAAI,KAAK,KAAA,KAAU,MAAA,GAAY,EAAE,KAAA,EAAO,IAAA,CAAK,KAAA,EAAM,GAAI,EAAC;AAAA,MACxD,GAAI,KAAK,WAAA,KAAgB,MAAA,GAAY,EAAE,IAAA,EAAM,IAAA,CAAK,WAAA,EAAY,GAAI;AAAC,KACrE;AAAA,IACA,cAAc,IAAI;AAAA,GACpB;AACF;AAGO,SAAS,WAAW,IAAA,EAAoC;AAC7D,EAAA,OAAO,gBAAgB,IAAA,EAAM,EAAE,KAAK,MAAA,EAAQ,KAAA,EAAO,WAAW,CAAA;AAChE;AAEO,SAAS,UAAU,IAAA,EAAmC;AAC3D,EAAA,OAAO,gBAAgB,IAAA,EAA8B,EAAE,KAAK,KAAA,EAAO,KAAA,EAAO,WAAW,CAAA;AACvF;;;ACvHA,SAAS,QAAQ,CAAA,EAAc,KAAA,EAAe,OAAe,IAAA,EAAc,IAAA,EAAc,MAAc,MAAA,EAOrG;AACA,EAAA,MAAM,KAAK,IAAA,GAAA,CAAQ,CAAA,CAAE,MAAM,CAAA,KAAM,KAAA,GAAQ,QAAQ,KAAA,GAAQ,CAAA;AACzD,EAAA,MAAM,KAAK,MAAA,GAAA,CAAU,CAAA,CAAE,MAAM,CAAA,KAAM,KAAA,GAAQ,QAAQ,KAAA,GAAQ,CAAA;AAC3D,EAAA,IAAI,CAAA,CAAE,IAAA,KAAS,OAAA,IAAW,CAAA,CAAE,SAAS,UAAA,EAAY;AAC/C,IAAA,OAAO,EAAE,CAAA,EAAG,EAAA,GAAK,EAAA,EAAI,CAAA,EAAG,EAAA,GAAK,EAAA,EAAI,CAAA,EAAG,EAAA,EAAI,CAAA,EAAG,EAAA,EAAI,EAAA,EAAI,EAAA,EAAG;AAAA,EACxD;AACA,EAAA,MAAM,EAAA,GAAK,KAAK,GAAA,CAAI,EAAA,EAAA,CAAK,EAAE,IAAA,IAAQ,EAAA,EAAI,MAAA,GAAS,CAAA,GAAI,EAAE,CAAA;AACtD,EAAA,MAAM,EAAA,GAAK,EAAA;AACX,EAAA,OAAO,EAAE,CAAA,EAAG,EAAA,GAAK,EAAA,GAAK,GAAG,CAAA,EAAG,EAAA,GAAK,EAAA,GAAK,CAAA,EAAG,CAAA,EAAG,EAAA,EAAI,CAAA,EAAG,EAAA,EAAI,IAAI,EAAA,EAAG;AAChE;AAEA,SAAS,QAAQ,IAAA,EAAiC;AAChD,EAAA,IAAI,IAAA,KAAS,YAAY,OAAO,eAAA;AAChC,EAAA,IAAI,IAAA,KAAS,QAAQ,OAAO,gBAAA;AAC5B,EAAA,IAAI,IAAA,KAAS,SAAS,OAAO,gBAAA;AAC7B,EAAA,OAAO,kBAAA;AACT;AAEO,SAAS,YAAY,IAAA,EAAqC;AAC/D,EAAA,MAAM,MAAA,GAAS,IAAA,CAAK,MAAA,IAAU,EAAC;AAC/B,EAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,WAAA,IAAe,EAAC;AACnC,EAAA,MAAM,KAAA,GAAQ,GAAA;AACd,EAAA,MAAM,KAAA,GAAQ,EAAA;AACd,EAAA,MAAM,IAAA,GAAO,EAAA;AACb,EAAA,MAAM,IAAA,GAAO,EAAA;AACb,EAAA,MAAM,IAAA,GAAO,EAAA;AACb,EAAA,MAAM,MAAA,GAAS,EAAA;AACf,EAAA,MAAM,MAAA,GAAS,EAAA;AACf,EAAA,MAAM,IAAA,GAAO,IAAA,CAAK,GAAA,CAAI,CAAA,EAAG,GAAG,MAAA,CAAO,GAAA,CAAI,CAACC,EAAAA,KAAMA,EAAAA,CAAE,GAAG,CAAC,CAAA;AACpD,EAAA,MAAM,IAAA,GAAO,IAAA,CAAK,GAAA,CAAI,CAAA,EAAG,GAAG,MAAA,CAAO,GAAA,CAAI,CAACA,EAAAA,KAAMA,EAAAA,CAAE,GAAG,CAAC,CAAA;AACpD,EAAA,MAAM,QAAQ,IAAA,GAAO,CAAA,GAAI,IAAA,GAAO,KAAA,GAAA,CAAS,OAAO,CAAA,IAAK,IAAA;AACrD,EAAA,MAAM,SAAS,MAAA,GAAS,CAAA,GAAI,OAAO,KAAA,GAAA,CAAS,IAAA,GAAO,KAAK,IAAA,GAAO,MAAA;AAC/D,EAAA,MAAM,IAAA,GAAO,IAAI,GAAA,CAAI,MAAA,CAAO,GAAA,CAAI,CAACA,EAAAA,KAAM,CAACA,EAAAA,CAAE,EAAA,EAAIA,EAAC,CAAC,CAAC,CAAA;AAEjD,EAAA,IAAI,CAAA,GAAI,CAAA,kBAAA,EAAqB,KAAK,CAAA,CAAA,EAAI,MAAM,CAAA,yCAAA,CAAA;AAG5C,EAAA,KAAA,MAAW,KAAK,KAAA,EAAO;AACrB,IAAA,MAAM,CAAA,GAAI,IAAA,CAAK,GAAA,CAAI,CAAA,CAAE,IAAI,CAAA;AACzB,IAAA,MAAM,CAAA,GAAI,IAAA,CAAK,GAAA,CAAI,CAAA,CAAE,EAAE,CAAA;AACvB,IAAA,IAAI,CAAC,CAAA,IAAK,CAAC,CAAA,EAAG;AACd,IAAA,MAAM,KAAA,GAAQ,EAAE,KAAA,IAAS,CAAA,CAAE,UAAU,MAAA,GAAY,CAAA,CAAA,EAAI,CAAA,CAAE,KAAK,CAAA,CAAA,GAAK,EAAA,CAAA;AACjE,IAAA,IAAI,CAAA,CAAE,IAAA,KAAS,CAAA,CAAE,EAAA,EAAI;AACnB,MAAA,MAAM,CAAA,GAAI,QAAQ,CAAA,EAAG,KAAA,EAAO,OAAO,IAAA,EAAM,IAAA,EAAM,MAAM,MAAM,CAAA;AAC3D,MAAA,CAAA,IACE,iBAAiB,CAAA,CAAE,EAAA,GAAK,EAAE,CAAA,CAAA,EAAI,CAAA,CAAE,CAAC,CAAA,GAAA,EAAM,CAAA,CAAE,KAAK,EAAE,CAAA,CAAA,EAAI,EAAE,CAAA,GAAI,EAAE,KAAK,CAAA,CAAE,EAAA,GAAK,EAAE,CAAA,CAAA,EAAI,CAAA,CAAE,CAAA,GAAI,EAAE,KAAK,CAAA,CAAE,EAAA,GAAK,EAAE,CAAA,CAAA,EAAI,CAAA,CAAE,CAAC,CAAA,6EAAA,CAAA,GAC3G,QAAA,CAAS,EAAE,EAAA,EAAI,CAAA,CAAE,IAAI,EAAA,EAAI,CAAA,CAAE,IAAI,EAAA,EAAG,EAAG,KAAK,CAAA,GAC1C,CAAA,IAAA,CAAA;AACF,MAAA;AAAA,IACF;AACA,IAAA,MAAM,CAAA,GAAI,KAAA;AAAA,MACR,QAAQ,CAAA,EAAG,KAAA,EAAO,OAAO,IAAA,EAAM,IAAA,EAAM,MAAM,MAAM,CAAA;AAAA,MACjD,QAAQ,CAAA,EAAG,KAAA,EAAO,OAAO,IAAA,EAAM,IAAA,EAAM,MAAM,MAAM;AAAA,KACnD;AACA,IAAA,CAAA,IACE,eAAe,CAAA,CAAE,CAAC,kFAClB,QAAA,CAAS,CAAA,EAAG,KAAK,CAAA,GACjB,CAAA,IAAA,CAAA;AAAA,EACJ;AAGA,EAAA,KAAA,MAAW,MAAM,MAAA,EAAQ;AACvB,IAAA,MAAM,CAAA,GAAI,QAAQ,EAAA,EAAI,KAAA,EAAO,OAAO,IAAA,EAAM,IAAA,EAAM,MAAM,MAAM,CAAA;AAC5D,IAAA,IAAI,EAAA,CAAG,SAAS,OAAA,EAAS;AACvB,MAAA,CAAA,IAAK,CAAA,YAAA,EAAe,CAAA,CAAE,EAAE,CAAA,MAAA,EAAS,EAAE,EAAE,CAAA,yBAAA,CAAA;AAAA,IACvC,CAAA,MAAA,IAAW,EAAA,CAAG,IAAA,KAAS,UAAA,EAAY;AACjC,MAAA,CAAA,IACE,CAAA,eAAA,EACe,CAAA,CAAE,EAAE,CAAA,MAAA,EAAS,CAAA,CAAE,EAAE,CAAA,sEAAA,EACjB,CAAA,CAAE,EAAE,CAAA,MAAA,EAAS,CAAA,CAAE,EAAE,CAAA,4BAAA,CAAA;AAAA,IAEpC,CAAA,MAAO;AACL,MAAA,MAAM,IAAA,GAAO,EAAA,CAAG,IAAA,KAAS,MAAA,GAAS,SAAA,GAAY,SAAA;AAC9C,MAAA,MAAM,MAAA,GAAS,EAAA,CAAG,IAAA,KAAS,MAAA,GAAS,SAAA,GAAY,SAAA;AAChD,MAAA,CAAA,IACE,CAAA,mCAAA,EACY,CAAA,CAAE,CAAC,CAAA,KAAA,EAAQ,CAAA,CAAE,CAAC,CAAA,SAAA,EAAY,CAAA,CAAE,CAAC,CAAA,UAAA,EAAa,CAAA,CAAE,CAAC,CAAA,gBAAA,EAAmB,IAAI,CAAA,UAAA,EAAa,MAAM,CAAA,+BAAA,EACvF,CAAA,CAAE,EAAE,CAAA,KAAA,EAAQ,CAAA,CAAE,EAAA,GAAK,GAAG,CAAA,iCAAA,EAAoC,UAAA,CAAW,EAAA,CAAG,IAAA,IAAQ,EAAE,CAAC,CAAA,WAAA,CAAA;AAAA,IAEnG;AAAA,EACF;AAEA,EAAA,CAAA,IAAK,CAAA,MAAA,CAAA;AAGL,EAAA,MAAM,OAAO,CAAC,EAAA,KAAuB,KAAK,GAAA,CAAI,EAAE,GAAG,IAAA,IAAQ,EAAA;AAC3D,EAAA,MAAM,QAAQ,KAAA,CACX,GAAA;AAAA,IACC,CAAC,MACC,CAAA,qBAAA,EACoB,OAAA,CAAQ,KAAK,GAAA,CAAI,CAAA,CAAE,IAAI,CAAA,EAAG,IAAI,CAAC,CAAA,EAAA,EAAK,UAAA,CAAW,KAAK,CAAA,CAAE,IAAI,CAAC,CAAC,CAAA,oEAAA,EACrB,WAAW,CAAA,CAAE,KAAK,CAAC,CAAA,8CAAA,EAClC,UAAA,CAAW,EAAE,KAAA,IAAS,QAAG,CAAC,CAAA,sBAAA,EAClD,OAAA,CAAQ,KAAK,GAAA,CAAI,CAAA,CAAE,EAAE,CAAA,EAAG,IAAI,CAAC,CAAA,EAAA,EAAK,UAAA,CAAW,KAAK,CAAA,CAAE,EAAE,CAAC,CAAC,CAAA,iBAAA;AAAA,GAEhF,CACC,KAAK,EAAE,CAAA;AACV,EAAA,MAAM,QACJ,KAAA,CAAM,MAAA,GAAS,CAAA,GACX,CAAA,mHAAA,EAEU,KAAK,CAAA,gBAAA,CAAA,GACf,EAAA;AAEN,EAAA,OAAO,YAAA;AAAA,IACL;AAAA,MACE,GAAA,EAAK,OAAA;AAAA,MACL,KAAA,EAAO,SAAA;AAAA,MACP,GAAI,KAAK,KAAA,KAAU,MAAA,GAAY,EAAE,KAAA,EAAO,IAAA,CAAK,KAAA,EAAM,GAAI,EAAC;AAAA,MACxD,GAAI,KAAK,WAAA,KAAgB,MAAA,GAAY,EAAE,IAAA,EAAM,IAAA,CAAK,WAAA,EAAY,GAAI;AAAC,KACrE;AAAA,IACA,CAAA,GAAI;AAAA,GACN;AACF;;;AC1HA,SAAS,SAAS,IAAA,EAA0E;AAC1F,EAAA,QAAA,CAAS,IAAA,IAAQ,SAAA,EAAW,WAAA,EAAY;AAAG,IACzC,KAAK,UAAA;AACH,MAAA,OAAO,EAAE,IAAA,EAAM,SAAA,EAAW,MAAA,EAAQ,SAAA,EAAW,MAAM,SAAA,EAAU;AAAA,IAC/D,KAAK,OAAA;AAAA,IACL,KAAK,WAAA;AACH,MAAA,OAAO,EAAE,IAAA,EAAM,SAAA,EAAW,MAAA,EAAQ,SAAA,EAAW,MAAM,SAAA,EAAU;AAAA,IAC/D;AACE,MAAA,OAAO,EAAE,IAAA,EAAM,SAAA,EAAW,MAAA,EAAQ,SAAA,EAAW,MAAM,SAAA,EAAU;AAAA;AAEnE;AAEO,SAAS,UAAU,IAAA,EAAmC;AAC3D,EAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,KAAA,IAAS,EAAC;AAC7B,EAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,KAAA,IAAS,EAAC;AAC7B,EAAA,MAAM,KAAA,GAAQ,GAAA;AACd,EAAA,MAAM,KAAA,GAAQ,EAAA;AACd,EAAA,MAAM,IAAA,GAAO,EAAA;AACb,EAAA,MAAM,IAAA,GAAO,EAAA;AACb,EAAA,MAAM,IAAA,GAAO,EAAA;AACb,EAAA,MAAM,MAAA,GAAS,EAAA;AACf,EAAA,MAAM,MAAA,GAAS,EAAA;AACf,EAAA,MAAM,IAAA,GAAO,IAAA,CAAK,GAAA,CAAI,CAAA,EAAG,GAAG,KAAA,CAAM,GAAA,CAAI,CAAC,CAAA,KAAM,CAAA,CAAE,GAAG,CAAC,CAAA;AACnD,EAAA,MAAM,IAAA,GAAO,IAAA,CAAK,GAAA,CAAI,CAAA,EAAG,GAAG,KAAA,CAAM,GAAA,CAAI,CAAC,CAAA,KAAM,CAAA,CAAE,GAAG,CAAC,CAAA;AACnD,EAAA,MAAM,MAAM,CAAC,CAAA,KAAsB,IAAA,GAAA,CAAQ,CAAA,GAAI,MAAM,KAAA,GAAQ,IAAA,CAAA;AAC7D,EAAA,MAAM,MAAM,CAAC,CAAA,KAAsB,MAAA,GAAA,CAAU,CAAA,GAAI,MAAM,KAAA,GAAQ,IAAA,CAAA;AAC/D,EAAA,MAAMD,WAAU,CAAC,CAAA,MAKX,EAAE,CAAA,EAAG,IAAI,CAAA,CAAE,GAAG,CAAA,EAAG,CAAA,EAAG,IAAI,CAAA,CAAE,GAAG,GAAG,CAAA,EAAG,KAAA,EAAO,GAAG,KAAA,EAAM,CAAA;AACzD,EAAA,MAAM,IAAA,GAAO,IAAI,GAAA,CAAI,KAAA,CAAM,GAAA,CAAI,CAAC,CAAA,KAAM,CAAC,CAAA,CAAE,EAAA,EAAI,CAAC,CAAC,CAAC,CAAA;AAChD,EAAA,MAAM,QAAQ,IAAA,GAAO,CAAA,GAAI,IAAA,GAAO,KAAA,GAAA,CAAS,OAAO,CAAA,IAAK,IAAA;AACrD,EAAA,MAAM,SAAS,MAAA,GAAS,IAAA,GAAO,KAAA,GAAA,CAAS,IAAA,GAAO,KAAK,IAAA,GAAO,MAAA;AAE3D,EAAA,IAAI,CAAA,GAAI,CAAA,kBAAA,EAAqB,KAAK,CAAA,CAAA,EAAI,MAAM,CAAA,6CAAA,CAAA;AAE5C,EAAA,KAAA,MAAW,KAAK,KAAA,EAAO;AACrB,IAAA,MAAM,CAAA,GAAI,IAAA,CAAK,GAAA,CAAI,CAAA,CAAE,IAAI,CAAA;AACzB,IAAA,MAAM,CAAA,GAAI,IAAA,CAAK,GAAA,CAAI,CAAA,CAAE,EAAE,CAAA;AACvB,IAAA,IAAI,CAAC,CAAA,IAAK,CAAC,CAAA,EAAG;AACd,IAAA,MAAM,IAAI,KAAA,CAAMA,QAAAA,CAAQ,CAAC,CAAA,EAAGA,QAAAA,CAAQ,CAAC,CAAC,CAAA;AACtC,IAAA,CAAA,IACE,CAAA,YAAA,EAAe,EAAE,CAAC,CAAA,6EAAA,CAAA,GAClB,SAAS,CAAA,EAAG,CAAA,CAAE,KAAK,CAAA,GACnB,CAAA,IAAA,CAAA;AAAA,EACJ;AAEA,EAAA,KAAA,MAAW,KAAK,KAAA,EAAO;AACrB,IAAA,MAAM,CAAA,GAAIA,SAAQ,CAAC,CAAA;AACnB,IAAA,MAAM,EAAA,GAAK,QAAA,CAAS,CAAA,CAAE,IAAI,CAAA;AAC1B,IAAA,MAAM,CAAA,GAAA,CAAK,CAAA,CAAE,IAAA,IAAQ,SAAA,EAAW,WAAA,EAAY;AAC5C,IAAA,IAAI,KAAA;AACJ,IAAA,IAAI,MAAM,SAAA,EAAW;AACnB,MAAA,KAAA,GAAQ,YAAY,CAAA,CAAE,CAAC,CAAA,KAAA,EAAQ,CAAA,CAAE,CAAC,CAAA,SAAA,EAAY,CAAA,CAAE,CAAC,CAAA,UAAA,EAAa,EAAE,CAAC,CAAA,gBAAA,EAAmB,GAAG,IAAI,CAAA,UAAA,EAAa,GAAG,MAAM,CAAA,sBAAA,CAAA;AAAA,IACnH,CAAA,MAAA,IAAW,CAAA,KAAM,OAAA,IAAW,CAAA,KAAM,WAAA,EAAa;AAC7C,MAAA,KAAA,GACE,CAAA,SAAA,EAAY,CAAA,CAAE,CAAC,CAAA,KAAA,EAAQ,EAAE,CAAC,CAAA,SAAA,EAAY,CAAA,CAAE,CAAC,CAAA,UAAA,EAAa,CAAA,CAAE,CAAC,CAAA,QAAA,EAAW,GAAG,IAAI,CAAA,2BAAA,EAC9D,CAAA,CAAE,CAAC,CAAA,MAAA,EAAS,CAAA,CAAE,CAAC,CAAA,MAAA,EAAS,EAAE,CAAA,GAAI,CAAA,CAAE,CAAC,CAAA,MAAA,EAAS,CAAA,CAAE,CAAC,CAAA,UAAA,EAAa,EAAA,CAAG,MAAM,CAAA,gCAAA,EACnE,CAAA,CAAE,CAAC,CAAA,MAAA,EAAS,CAAA,CAAE,CAAA,GAAI,CAAA,CAAE,CAAC,SAAS,CAAA,CAAE,CAAA,GAAI,CAAA,CAAE,CAAC,CAAA,MAAA,EAAS,CAAA,CAAE,CAAA,GAAI,CAAA,CAAE,CAAC,CAAA,UAAA,EAAa,EAAA,CAAG,MAAM,CAAA,gCAAA,EAC/E,CAAA,CAAE,CAAC,CAAA,MAAA,EAAS,CAAA,CAAE,CAAC,CAAA,MAAA,EAAS,CAAA,CAAE,CAAC,CAAA,MAAA,EAAS,EAAE,CAAA,GAAI,CAAA,CAAE,CAAC,CAAA,UAAA,EAAa,GAAG,MAAM,CAAA,sBAAA,CAAA;AAAA,IACpF,CAAA,MAAO;AACL,MAAA,KAAA,GAAQ,YAAY,CAAA,CAAE,CAAC,CAAA,KAAA,EAAQ,CAAA,CAAE,CAAC,CAAA,SAAA,EAAY,CAAA,CAAE,CAAC,CAAA,UAAA,EAAa,EAAE,CAAC,CAAA,QAAA,EAAW,GAAG,IAAI,CAAA,UAAA,EAAa,GAAG,MAAM,CAAA,sBAAA,CAAA;AAAA,IAC3G;AACA,IAAA,MAAM,GAAA,GACJ,EAAE,GAAA,KAAQ,MAAA,IAAa,MAAM,SAAA,GACzB,CAAA,SAAA,EAAY,CAAA,CAAE,CAAA,GAAI,EAAE,CAAA,KAAA,EAAQ,EAAE,CAAA,GAAI,EAAE,2BAA2B,EAAA,CAAG,IAAI,KAAK,UAAA,CAAW,CAAA,CAAE,GAAG,CAAC,CAAA,OAAA,CAAA,GAC5F,EAAA;AACN,IAAA,CAAA,IACE,CAAA,0BAAA,EAA6B,KAAK,CAAA,EAAG,GAAG,CAAA,SAAA,EAC5B,EAAE,CAAA,GAAI,CAAA,CAAE,CAAA,GAAI,CAAC,CAAA,KAAA,EAAQ,CAAA,CAAE,IAAI,CAAA,CAAE,CAAA,GAAI,CAAA,GAAI,CAAC,CAAA,yBAAA,EAA4B,EAAA,CAAG,IAAI,CAAA,EAAA,EAAK,UAAA,CAAW,CAAA,CAAE,IAAI,CAAC,CAAA,WAAA,CAAA;AAAA,EAEhH;AAEA,EAAA,CAAA,IAAK,CAAA,MAAA,CAAA;AACL,EAAA,OAAO,YAAA;AAAA,IACL;AAAA,MACE,GAAA,EAAK,KAAA;AAAA,MACL,KAAA,EAAO,SAAA;AAAA,MACP,GAAI,KAAK,KAAA,KAAU,MAAA,GAAY,EAAE,KAAA,EAAO,IAAA,CAAK,KAAA,EAAM,GAAI,EAAC;AAAA,MACxD,GAAI,KAAK,WAAA,KAAgB,MAAA,GAAY,EAAE,IAAA,EAAM,IAAA,CAAK,WAAA,EAAY,GAAI;AAAC,KACrE;AAAA,IACA;AAAA,GACF;AACF;;;ACxFA,SAAS,QAAQ,CAAA,EAAmB;AAClC,EAAA,IAAI,CAAA,GAAI,GAAG,OAAO,CAAA;AAClB,EAAA,IAAI,CAAA,GAAI,GAAG,OAAO,CAAA;AAClB,EAAA,OAAO,CAAA;AACT;AAEO,SAAS,cAAc,IAAA,EAAuC;AACnE,EAAA,MAAM,MAAA,GAAS,IAAA,CAAK,MAAA,IAAU,EAAC;AAC/B,EAAA,MAAM,IAAA,GAAO,IAAA,CAAK,IAAA,IAAQ,EAAC;AAC3B,EAAA,MAAM,OAAA,GAAU,IAAA,CAAK,OAAA,IAAW,EAAC;AACjC,EAAA,MAAM,CAAA,GAAI,IAAA,CAAK,GAAA,CAAI,MAAA,CAAO,QAAQ,CAAC,CAAA;AACnC,EAAA,MAAM,CAAA,GAAI,IAAA,CAAK,GAAA,CAAI,GAAA,EAAK,IAAI,GAAG,CAAA;AAC/B,EAAA,MAAM,CAAA,GAAI,EAAA;AACV,EAAA,MAAM,GAAA,GAAM,EAAA;AACZ,EAAA,MAAM,IAAA,GAAA,CAAQ,CAAA,GAAI,GAAA,GAAM,CAAA,IAAK,CAAA;AAC7B,EAAA,MAAM,EAAA,GAAK,CAAC,CAAA,KAAsB,GAAA,GAAM,QAAQ,CAAA,GAAI,GAAA,CAAA;AACpD,EAAA,MAAM,EAAA,GAAK,CAAC,CAAA,KAAsB,CAAA,GAAI,MAAM,CAAA,GAAI,EAAA,IAAM,QAAQ,CAAC,CAAA;AAE/D,EAAA,MAAM,IAAA,GACJ,CAAA,aAAA,CAAA,GACA,MAAA,CAAO,GAAA,CAAI,CAAC,CAAA,KAAM,CAAA,cAAA,EAAiB,UAAA,CAAW,CAAA,CAAE,KAAK,CAAC,CAAA,KAAA,CAAO,CAAA,CAAE,IAAA,CAAK,EAAE,CAAA,GACtE,CAAA,KAAA,CAAA;AACF,EAAA,MAAM,OAAO,IAAA,CACV,GAAA;AAAA,IACC,CAAC,MACC,CAAA,qBAAA,EAAwB,UAAA,CAAW,EAAE,KAAK,CAAC,CAAA,KAAA,CAAA,GAAA,CAC1C,CAAA,CAAE,KAAA,IAAS,IAAI,GAAA,CAAI,CAAC,CAAA,KAAM,CAAA,cAAA,EAAiB,UAAA,CAAW,CAAC,CAAC,CAAA,KAAA,CAAO,CAAA,CAAE,IAAA,CAAK,EAAE,CAAA,GACzE,CAAA,KAAA;AAAA,GACJ,CACC,KAAK,EAAE,CAAA;AAEV,EAAA,IAAI,GAAA,GAAM,EAAA;AACV,EAAA,IAAI,OAAA,CAAQ,SAAS,CAAA,EAAG;AACtB,IAAA,MAAM,SAAS,OAAA,CAAQ,GAAA,CAAI,CAAC,CAAA,EAAG,MAAM,CAAA,EAAG,EAAA,CAAG,CAAC,CAAC,IAAI,EAAA,CAAG,CAAC,CAAC,CAAA,CAAE,CAAA,CAAE,KAAK,GAAG,CAAA;AAClE,IAAA,MAAM,IAAA,GAAO,OAAA,CACV,GAAA,CAAI,CAAC,GAAG,CAAA,KAAM;AACb,MAAA,MAAM,OAAO,CAAA,IAAK,GAAA,GAAM,SAAA,GAAY,CAAA,IAAK,OAAO,SAAA,GAAY,SAAA;AAC5D,MAAA,OAAO,CAAA,YAAA,EAAe,GAAG,CAAC,CAAC,SAAS,EAAA,CAAG,CAAC,CAAC,CAAA,cAAA,EAAiB,IAAI,CAAA,oCAAA,CAAA;AAAA,IAChE,CAAC,CAAA,CACA,IAAA,CAAK,EAAE,CAAA;AACV,IAAA,GAAA,GACE,yLAEqB,CAAC,CAAA,CAAA,EAAI,CAAC,CAAA,8EAAA,EACN,MAAM,sDAC3B,IAAA,GACA,CAAA,YAAA,CAAA;AAAA,EACJ;AAEA,EAAA,OACE,CAAA,sCAAA,EACoC,IAAI,CAAA,eAAA,EAAkB,IAAI,qBAC9D,GAAA,GACA,CAAA,MAAA,CAAA;AAEJ;;;ACvDA,SAAS,WAAW,IAAA,EAAkC;AACpD,EAAA,QAAA,CAAS,IAAA,IAAQ,EAAA,EAAI,WAAA,EAAY;AAAG,IAClC,KAAK,MAAA;AACH,MAAA,OAAO,SAAA;AAAA,IACT,KAAK,QAAA;AAAA,IACL,KAAK,SAAA;AACH,MAAA,OAAO,SAAA;AAAA,IACT,KAAK,WAAA;AACH,MAAA,OAAO,SAAA;AAAA,IACT;AACE,MAAA,OAAO,SAAA;AAAA;AAEb;AAEO,SAAS,YAAY,IAAA,EAAqC;AAC/D,EAAA,MAAM,OAAA,GAAU,IAAA,CAAK,OAAA,IAAW,EAAC;AACjC,EAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,KAAA,IAAS,EAAC;AAC7B,EAAA,MAAM,CAAA,GAAI,IAAA,CAAK,GAAA,CAAI,OAAA,CAAQ,QAAQ,CAAC,CAAA;AACpC,EAAA,MAAM,MAAA,GAAS,GAAA;AACf,EAAA,MAAM,IAAA,GAAO,EAAA;AACb,EAAA,MAAM,MAAA,GAAS,EAAA;AACf,EAAA,MAAM,IAAA,GAAO,EAAA;AACb,EAAA,MAAM,IAAA,GAAO,EAAA;AACb,EAAA,MAAM,IAAA,GAAO,EAAA;AACb,EAAA,MAAM,MAAA,GAAS,EAAA;AACf,EAAA,MAAM,KAAA,GAAQ,MAAA,GAAS,IAAA,GAAO,CAAA,GAAI,CAAA,GAAI,IAAA;AACtC,EAAA,MAAM,MAAA,GAAS,MAAA,GAAS,KAAA,CAAM,MAAA,GAAS,IAAA,GAAO,MAAA;AAC9C,EAAA,MAAM,IAAA,GAAO,CAAC,CAAA,KAAsB,MAAA,GAAS,OAAO,CAAA,GAAI,IAAA;AAExD,EAAA,IAAI,CAAA,GAAI,CAAA,kBAAA,EAAqB,KAAK,CAAA,CAAA,EAAI,MAAM,CAAA,oCAAA,CAAA;AAC5C,EAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,OAAA,CAAQ,QAAQ,CAAA,EAAA,EAAK;AACvC,IAAA,CAAA,IACE,CAAA,aAAA,EACa,IAAA,CAAK,CAAC,CAAC,CAAA,MAAA,EAAS,MAAA,GAAS,CAAC,CAAA,MAAA,EAAS,IAAA,CAAK,CAAC,CAAC,CAAA,MAAA,EAAS,MAAA,GAAS,MAAM,CAAA,8CAAA,EACnE,IAAA,CAAK,CAAC,CAAA,GAAI,IAAA,GAAO,CAAC,CAAA,KAAA,EAAQ,MAAA,GAAS,EAAE,CAAA,qBAAA,EAAwB,UAAA,CAAW,OAAA,CAAQ,CAAC,CAAA,IAAK,EAAE,CAAC,CAAA,WAAA,CAAA;AAAA,EAEzG;AACA,EAAA,CAAA,IAAK,CAAA,UAAA,EAAa,IAAA,CAAK,CAAC,CAAC,CAAA,MAAA,EAAS,MAAA,GAAS,CAAC,CAAA,MAAA,EAAS,IAAA,CAAK,CAAC,CAAC,CAAA,MAAA,EAAS,SAAS,MAAM,CAAA,qCAAA,CAAA;AACpF,EAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,KAAA,CAAM,QAAQ,CAAA,EAAA,EAAK;AACrC,IAAA,MAAM,CAAA,GAAI,MAAM,CAAC,CAAA;AACjB,IAAA,IAAI,MAAM,MAAA,EAAW;AACrB,IAAA,MAAM,CAAA,GAAI,SAAS,CAAA,GAAI,IAAA;AACvB,IAAA,MAAM,EAAA,GAAK,IAAA,CAAK,CAAA,CAAE,KAAA,IAAS,CAAC,CAAA;AAC5B,IAAA,MAAM,OAAO,IAAA,CAAK,GAAA,CAAI,CAAA,EAAG,CAAA,CAAE,QAAQ,CAAC,CAAA;AACpC,IAAA,MAAM,EAAA,GAAK,OAAO,IAAA,GAAO,CAAA;AACzB,IAAA,CAAA,IACE,CAAA,YAAA,EACY,IAAI,CAAA,KAAA,EAAQ,CAAA,GAAI,IAAA,GAAO,CAAA,GAAI,CAAC,CAAA,sBAAA,EAAyB,UAAA,CAAW,CAAA,CAAE,KAAK,CAAC,CAAA,gBAAA,EACxE,EAAA,GAAK,CAAC,CAAA,KAAA,EAAQ,CAAA,GAAA,CAAK,IAAA,GAAO,IAAA,IAAQ,CAAC,CAAA,SAAA,EAAY,EAAE,CAAA,UAAA,EAAa,IAAI,CAAA,eAAA,EAAkB,UAAA,CAAW,CAAA,CAAE,IAAI,CAAC,CAAA,8BAAA,CAAA;AAAA,EAEtH;AACA,EAAA,CAAA,IAAK,CAAA,MAAA,CAAA;AACL,EAAA,OAAO,CAAA;AACT;;;AClDA,IAAML,gBAAe,CAAC,SAAA,EAAW,WAAW,SAAA,EAAW,SAAA,EAAW,WAAW,SAAS,CAAA;AAE/E,SAAS,YAAY,IAAA,EAAqC;AAC/D,EAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,KAAA,IAAS,EAAC;AAC7B,EAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,KAAA,IAAS,EAAC;AAC7B,EAAA,MAAM,KAAA,GAAQ,GAAA;AACd,EAAA,MAAM,KAAA,GAAQ,EAAA;AACd,EAAA,MAAM,IAAA,GAAO,EAAA;AACb,EAAA,MAAM,IAAA,GAAO,EAAA;AACb,EAAA,MAAM,IAAA,GAAO,EAAA;AACb,EAAA,MAAM,MAAA,GAAS,EAAA;AACf,EAAA,MAAM,MAAA,GAAS,EAAA;AACf,EAAA,MAAM,IAAA,GAAO,IAAA,CAAK,GAAA,CAAI,CAAA,EAAG,GAAG,KAAA,CAAM,GAAA,CAAI,CAAC,CAAA,KAAM,CAAA,CAAE,GAAG,CAAC,CAAA;AACnD,EAAA,MAAM,IAAA,GAAO,IAAA,CAAK,GAAA,CAAI,CAAA,EAAG,GAAG,KAAA,CAAM,GAAA,CAAI,CAAC,CAAA,KAAM,CAAA,CAAE,GAAG,CAAC,CAAA;AACnD,EAAA,MAAM,IAAA,GAAO,CAAC,CAAA,KAAsB,IAAA,GAAA,CAAQ,IAAI,CAAA,KAAM,KAAA,GAAQ,QAAQ,KAAA,GAAQ,CAAA;AAC9E,EAAA,MAAM,IAAA,GAAO,CAAC,CAAA,KAAsB,MAAA,GAAA,CAAU,IAAI,CAAA,KAAM,KAAA,GAAQ,QAAQ,KAAA,GAAQ,CAAA;AAChF,EAAA,MAAMK,QAAAA,GAAU,CAAC,CAAA,KAOZ;AACH,IAAA,MAAM,EAAA,GAAK,IAAA,CAAK,CAAA,CAAE,GAAG,CAAA;AACrB,IAAA,MAAM,EAAA,GAAK,IAAA,CAAK,CAAA,CAAE,GAAG,CAAA;AACrB,IAAA,MAAM,CAAA,GAAI,KAAK,GAAA,CAAI,EAAA,EAAI,EAAE,KAAA,CAAM,MAAA,GAAS,IAAI,EAAE,CAAA;AAC9C,IAAA,OAAO,EAAE,CAAA,EAAG,EAAA,GAAK,CAAA,GAAI,CAAA,EAAG,CAAA,EAAG,EAAA,GAAK,EAAA,EAAI,CAAA,EAAG,CAAA,EAAG,EAAA,EAAI,EAAA,EAAI,EAAA,EAAG;AAAA,EACvD,CAAA;AACA,EAAA,MAAM,IAAA,GAAO,IAAI,GAAA,CAAI,KAAA,CAAM,GAAA,CAAI,CAAC,CAAA,KAAM,CAAC,CAAA,CAAE,EAAA,EAAI,CAAC,CAAC,CAAC,CAAA;AAChD,EAAA,MAAM,QAAQ,IAAA,GAAO,CAAA,GAAI,IAAA,GAAO,KAAA,GAAA,CAAS,OAAO,CAAA,IAAK,IAAA;AACrD,EAAA,MAAM,SAAS,MAAA,GAAS,IAAA,GAAO,KAAA,GAAA,CAAS,IAAA,GAAO,KAAK,IAAA,GAAO,MAAA;AAE3D,EAAA,IAAI,CAAA,GAAI,CAAA,kBAAA,EAAqB,KAAK,CAAA,CAAA,EAAI,MAAM,CAAA,iCAAA,CAAA;AAE5C,EAAA,KAAA,MAAW,KAAK,KAAA,EAAO;AACrB,IAAA,MAAM,CAAA,GAAI,IAAA,CAAK,GAAA,CAAI,CAAA,CAAE,IAAI,CAAA;AACzB,IAAA,MAAM,CAAA,GAAI,IAAA,CAAK,GAAA,CAAI,CAAA,CAAE,EAAE,CAAA;AACvB,IAAA,IAAI,CAAC,CAAA,IAAK,CAAC,CAAA,EAAG;AACd,IAAA,MAAM,IAAI,KAAA,CAAMA,QAAAA,CAAQ,CAAC,CAAA,EAAGA,QAAAA,CAAQ,CAAC,CAAC,CAAA;AACtC,IAAA,MAAM,QAAA,GAAA,CAAY,CAAA,CAAE,GAAA,IAAO,UAAA,MAAgB,YAAA;AAC3C,IAAA,MAAM,UAAA,GAAa,WAAW,CAAA,0BAAA,CAAA,GAA+B,EAAA;AAC7D,IAAA,CAAA,IACE,CAAA,YAAA,EAAe,CAAA,CAAE,CAAC,CAAA,iDAAA,EAAoD,UAAU,OAChF,QAAA,CAAS,CAAA,EAAG,CAAA,CAAE,KAAK,CAAA,GACnB,CAAA,IAAA,CAAA;AAAA,EACJ;AAEA,EAAA,KAAA,MAAW,KAAK,KAAA,EAAO;AACrB,IAAA,MAAM,CAAA,GAAIA,SAAQ,CAAC,CAAA;AACnB,IAAA,MAAM,IAAIL,aAAAA,CAAAA,CAAc,CAAA,CAAE,SAAS,CAAA,IAAKA,aAAAA,CAAa,MAAM,CAAA,IAAK,SAAA;AAChE,IAAA,CAAA,IACE,CAAA,mCAAA,EACY,CAAA,CAAE,CAAC,CAAA,KAAA,EAAQ,CAAA,CAAE,CAAC,CAAA,SAAA,EAAY,CAAA,CAAE,CAAC,CAAA,UAAA,EAAa,CAAA,CAAE,CAAC,CAAA,8BAAA,EAAiC,CAAC,CAAA,+BAAA,EAC/E,CAAA,CAAE,EAAE,CAAA,KAAA,EAAQ,CAAA,CAAE,EAAA,GAAK,CAAC,CAAA,yBAAA,EAA4B,CAAC,CAAA,8CAAA,EAAiD,UAAA,CAAW,CAAA,CAAE,KAAK,CAAC,CAAA,WAAA,CAAA;AAAA,EAErI;AAEA,EAAA,CAAA,IAAK,CAAA,MAAA,CAAA;AACL,EAAA,OAAO,YAAA;AAAA,IACL;AAAA,MACE,GAAA,EAAK,OAAA;AAAA,MACL,KAAA,EAAO,SAAA;AAAA,MACP,GAAI,KAAK,KAAA,KAAU,MAAA,GAAY,EAAE,KAAA,EAAO,IAAA,CAAK,KAAA,EAAM,GAAI,EAAC;AAAA,MACxD,GAAI,KAAK,WAAA,KAAgB,MAAA,GAAY,EAAE,IAAA,EAAM,IAAA,CAAK,WAAA,EAAY,GAAI;AAAC,KACrE;AAAA,IACA;AAAA,GACF;AACF;;;ACtEA,SAASO,SAAQ,CAAA,EAA+B;AAC9C,EAAA,IAAI,MAAM,MAAA,IAAa,MAAA,CAAO,KAAA,CAAM,CAAC,GAAG,OAAO,GAAA;AAC/C,EAAA,IAAI,CAAA,GAAI,GAAG,OAAO,CAAA;AAClB,EAAA,IAAI,CAAA,GAAI,GAAG,OAAO,CAAA;AAClB,EAAA,OAAO,CAAA;AACT;AAEO,SAAS,eAAe,IAAA,EAAwC;AACrE,EAAA,MAAM,CAAA,GAAI,GAAA;AACV,EAAA,MAAM,CAAA,GAAI,GAAA;AACV,EAAA,MAAM,GAAA,GAAM,EAAA;AACZ,EAAA,MAAM,EAAA,GAAK,GAAA;AACX,EAAA,MAAM,KAAK,CAAA,GAAI,GAAA;AACf,EAAA,MAAM,KAAK,GAAA,GAAM,EAAA;AACjB,EAAA,MAAM,KAAK,CAAA,GAAI,GAAA;AACf,EAAA,MAAM,EAAA,GAAA,CAAM,KAAK,EAAA,IAAM,CAAA;AACvB,EAAA,MAAM,EAAA,GAAA,CAAM,KAAK,EAAA,IAAM,CAAA;AACvB,EAAA,MAAM,KAAK,CAAC,CAAA,KAAkC,MAAM,EAAA,GAAK,EAAA,IAAMA,SAAQ,CAAC,CAAA;AACxE,EAAA,MAAM,KAAK,CAAC,CAAA,KAAkC,MAAM,EAAA,GAAK,EAAA,IAAMA,SAAQ,CAAC,CAAA;AACxE,EAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,KAAA,IAAS,EAAC;AAC7B,EAAA,MAAM,EAAA,GAAK,IAAA,CAAK,KAAA,IAAS,EAAC;AAC1B,EAAA,MAAM,EAAA,GAAK,IAAA,CAAK,KAAA,IAAS,EAAC;AAE1B,EAAA,IAAI,CAAA,GAAI,CAAA,kBAAA,EAAqB,CAAC,CAAA,CAAA,EAAI,CAAC,CAAA,oCAAA,CAAA;AACnC,EAAA,CAAA,IAAK,CAAA,SAAA,EAAY,EAAE,CAAA,KAAA,EAAQ,EAAE,YAAY,EAAA,GAAK,EAAE,CAAA,UAAA,EAAa,EAAA,GAAK,EAAE,CAAA,mCAAA,CAAA;AACpE,EAAA,CAAA,IAAK,CAAA,SAAA,EAAY,EAAE,CAAA,KAAA,EAAQ,EAAE,YAAY,EAAA,GAAK,EAAE,CAAA,UAAA,EAAa,EAAA,GAAK,EAAE,CAAA,sCAAA,CAAA;AACpE,EAAA,CAAA,IAAK,aAAa,EAAE,CAAA,MAAA,EAAS,EAAE,CAAA,MAAA,EAAS,EAAE,SAAS,EAAE,CAAA,+CAAA,CAAA;AACrD,EAAA,CAAA,IAAK,aAAa,EAAE,CAAA,MAAA,EAAS,EAAE,CAAA,MAAA,EAAS,EAAE,SAAS,EAAE,CAAA,+CAAA,CAAA;AAErD,EAAA,IAAI,GAAG,KAAA,KAAU,MAAA;AACf,IAAA,CAAA,IAAK,CAAA,SAAA,EAAY,EAAE,CAAA,KAAA,EAAQ,EAAA,GAAK,EAAE,CAAA,uCAAA,EAA0C,UAAA,CAAW,EAAA,CAAG,KAAK,CAAC,CAAA,cAAA,CAAA;AAClG,EAAA,IAAI,GAAG,KAAA,KAAU,MAAA;AACf,IAAA,CAAA,IAAK,CAAA,SAAA,EAAY,EAAA,GAAK,CAAC,CAAA,KAAA,EAAQ,EAAA,GAAK,CAAC,CAAA,8CAAA,EAA4C,UAAA,CAAW,EAAA,CAAG,KAAK,CAAC,CAAA,OAAA,CAAA;AACvG,EAAA,IAAI,GAAG,GAAA,KAAQ,MAAA;AACb,IAAA,CAAA,IAAK,CAAA,SAAA,EAAY,EAAE,CAAA,KAAA,EAAQ,EAAA,GAAK,EAAE,CAAA,uCAAA,EAA0C,UAAA,CAAW,EAAA,CAAG,GAAG,CAAC,CAAA,OAAA,CAAA;AAChG,EAAA,IAAI,GAAG,IAAA,KAAS,MAAA;AACd,IAAA,CAAA,IAAK,CAAA,SAAA,EAAY,EAAE,CAAA,KAAA,EAAQ,EAAA,GAAK,EAAE,CAAA,qCAAA,EAAwC,UAAA,CAAW,EAAA,CAAG,IAAI,CAAC,CAAA,OAAA,CAAA;AAC/F,EAAA,IAAI,GAAG,IAAA,KAAS,MAAA;AACd,IAAA,CAAA,IAAK,CAAA,SAAA,EAAY,EAAA,GAAK,EAAE,CAAA,KAAA,EAAQ,EAAA,GAAK,CAAC,CAAA,qCAAA,EAAwC,UAAA,CAAW,EAAA,CAAG,IAAI,CAAC,CAAA,OAAA,CAAA;AACnG,EAAA,IAAI,GAAG,GAAA,KAAQ,MAAA;AACb,IAAA,CAAA,IAAK,CAAA,SAAA,EAAY,KAAK,EAAE,CAAA,KAAA,EAAQ,EAAE,CAAA,qCAAA,EAAwC,UAAA,CAAW,EAAA,CAAG,GAAG,CAAC,CAAA,OAAA,CAAA;AAE9F,EAAA,KAAA,MAAW,MAAM,KAAA,EAAO;AACtB,IAAA,MAAM,EAAA,GAAK,EAAA,CAAG,EAAA,CAAG,CAAC,CAAA;AAClB,IAAA,MAAM,EAAA,GAAK,EAAA,CAAG,EAAA,CAAG,CAAC,CAAA;AAClB,IAAA,MAAM,OAAO,EAAA,GAAK,EAAA;AAClB,IAAA,MAAM,EAAA,GAAK,EAAA,IAAM,IAAA,GAAO,GAAA,GAAM,EAAA,CAAA;AAC9B,IAAA,MAAM,MAAA,GAAS,OAAO,KAAA,GAAQ,OAAA;AAC9B,IAAA,CAAA,IACE,CAAA,sCAAA,EACe,EAAE,CAAA,MAAA,EAAS,EAAE,qEAChB,EAAE,CAAA,KAAA,EAAQ,EAAA,GAAK,CAAC,wCAAwC,MAAM,CAAA,EAAA,EAAK,UAAA,CAAW,EAAA,CAAG,KAAK,CAAC,CAAA,WAAA,CAAA;AAAA,EAEvG;AAEA,EAAA,CAAA,IAAK,CAAA,MAAA,CAAA;AACL,EAAA,OAAO,YAAA;AAAA,IACL;AAAA,MACE,GAAA,EAAK,QAAA;AAAA,MACL,KAAA,EAAO,SAAA;AAAA,MACP,GAAI,KAAK,KAAA,KAAU,MAAA,GAAY,EAAE,KAAA,EAAO,IAAA,CAAK,KAAA,EAAM,GAAI,EAAC;AAAA,MACxD,GAAI,KAAK,WAAA,KAAgB,MAAA,GAAY,EAAE,IAAA,EAAM,IAAA,CAAK,WAAA,EAAY,GAAI;AAAC,KACrE;AAAA,IACA;AAAA,GACF;AACF;;;AC9DA,SAAS,UAAU,IAAA,EAA0E;AAC3F,EAAA,QAAA,CAAS,IAAA,IAAQ,QAAA,EAAU,WAAA,EAAY;AAAG,IACxC,KAAK,UAAA;AACH,MAAA,OAAO,EAAE,IAAA,EAAM,SAAA,EAAW,MAAA,EAAQ,SAAA,EAAW,MAAM,SAAA,EAAU;AAAA,IAC/D,KAAK,OAAA;AAAA,IACL,KAAK,KAAA;AACH,MAAA,OAAO,EAAE,IAAA,EAAM,SAAA,EAAW,MAAA,EAAQ,SAAA,EAAW,MAAM,SAAA,EAAU;AAAA,IAC/D,KAAK,MAAA;AACH,MAAA,OAAO,EAAE,IAAA,EAAM,SAAA,EAAW,MAAA,EAAQ,SAAA,EAAW,MAAM,SAAA,EAAU;AAAA,IAC/D;AACE,MAAA,OAAO,EAAE,IAAA,EAAM,SAAA,EAAW,MAAA,EAAQ,SAAA,EAAW,MAAM,SAAA,EAAU;AAAA;AAEnE;AAEO,SAAS,eAAe,IAAA,EAAwC;AACrE,EAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,KAAA,IAAS,EAAC;AAC7B,EAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,KAAA,IAAS,EAAC;AAC7B,EAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,KAAA,IAAS,EAAC;AAC7B,EAAA,MAAM,MAAA,GAAS,GAAA;AACf,EAAA,MAAM,IAAA,GAAO,EAAA;AACb,EAAA,MAAM,MAAA,GAAS,EAAA;AACf,EAAA,MAAM,MAAA,GAAS,EAAA;AACf,EAAA,MAAM,KAAA,GAAQ,EAAA;AACd,EAAA,MAAM,IAAA,GAAO,GAAA;AACb,EAAA,MAAM,MAAA,GAAS,EAAA;AACf,EAAA,MAAM,IAAA,GAAO,GAAA;AACb,EAAA,MAAM,IAAA,GAAO,EAAA;AACb,EAAA,MAAM,IAAA,GAAO,IAAA,CAAK,GAAA,CAAI,CAAA,EAAG,GAAG,KAAA,CAAM,GAAA,CAAI,CAACD,EAAAA,KAAMA,EAAAA,CAAE,GAAG,CAAC,CAAA;AACnD,EAAA,MAAM,OAAO,CAAC,CAAA,KAAsB,SAAS,IAAA,GAAA,CAAQ,CAAA,GAAI,MAAM,IAAA,GAAO,MAAA,CAAA;AACtE,EAAA,MAAM,KAAA,GAAQ,CAAC,CAAA,KAAsB,MAAA,GAAS,CAAA,GAAI,KAAA;AAClD,EAAA,MAAMD,QAAAA,GAAU,CAACC,EAAAA,MAKX;AAAA,IACJ,GAAG,IAAA,CAAKA,EAAAA,CAAE,GAAG,CAAA,GAAA,CAAK,OAAO,IAAA,IAAQ,CAAA;AAAA,IACjC,GAAG,KAAA,CAAMA,EAAAA,CAAE,IAAI,CAAA,GAAA,CAAK,QAAQ,IAAA,IAAQ,CAAA;AAAA,IACpC,CAAA,EAAG,IAAA;AAAA,IACH,CAAA,EAAG;AAAA,GACL,CAAA;AACA,EAAA,MAAM,IAAA,GAAO,IAAI,GAAA,CAAI,KAAA,CAAM,GAAA,CAAI,CAACA,EAAAA,KAAM,CAACA,EAAAA,CAAE,EAAA,EAAIA,EAAC,CAAC,CAAC,CAAA;AAChD,EAAA,MAAM,QAAQ,MAAA,GAAS,IAAA,GAAO,IAAI,IAAA,GAAO,IAAA,GAAA,CAAQ,OAAO,CAAA,IAAK,MAAA;AAC7D,EAAA,MAAM,MAAA,GAAS,MAAA,GAAS,KAAA,CAAM,MAAA,GAAS,KAAA,GAAQ,MAAA;AAE/C,EAAA,IAAI,CAAA,GAAI,CAAA,kBAAA,EAAqB,KAAK,CAAA,CAAA,EAAI,MAAM,CAAA,oCAAA,CAAA;AAE5C,EAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,KAAA,CAAM,QAAQ,CAAA,EAAA,EAAK;AACrC,IAAA,MAAM,CAAA,GAAI,MAAM,CAAC,CAAA;AACjB,IAAA,IAAI,MAAM,MAAA,EAAW;AACrB,IAAA,CAAA,IACE,eACY,IAAI,CAAA,KAAA,EAAQ,MAAM,CAAC,CAAC,YAAY,KAAA,GAAQ,IAAA,GAAO,CAAC,CAAA,UAAA,EAAa,KAAK,CAAA,QAAA,EAAW,CAAA,GAAI,IAAI,SAAA,GAAY,MAAM,gCACvG,IAAI,CAAA,KAAA,EAAQ,KAAA,CAAM,CAAC,CAAC,CAAA,SAAA,EAAY,MAAM,aAAa,KAAK,CAAA,2BAAA,EACxD,OAAO,EAAE,CAAA,KAAA,EAAQ,MAAM,CAAC,CAAA,GAAI,QAAQ,CAAA,GAAI,CAAC,2BAA2B,UAAA,CAAW,CAAA,CAAE,KAAK,CAAC,CAAA,WAAA,CAAA;AAAA,EAEvG;AAEA,EAAA,KAAA,MAAW,MAAM,KAAA,EAAO;AACtB,IAAA,MAAM,CAAA,GAAI,IAAA,CAAK,GAAA,CAAI,EAAA,CAAG,IAAI,CAAA;AAC1B,IAAA,MAAM,CAAA,GAAI,IAAA,CAAK,GAAA,CAAI,EAAA,CAAG,EAAE,CAAA;AACxB,IAAA,IAAI,CAAC,CAAA,IAAK,CAAC,CAAA,EAAG;AACd,IAAA,MAAM,IAAI,KAAA,CAAMD,QAAAA,CAAQ,CAAC,CAAA,EAAGA,QAAAA,CAAQ,CAAC,CAAC,CAAA;AACtC,IAAA,CAAA,IACE,CAAA,YAAA,EAAe,EAAE,CAAC,CAAA,6EAAA,CAAA,GAClB,SAAS,CAAA,EAAG,EAAA,CAAG,KAAK,CAAA,GACpB,CAAA,IAAA,CAAA;AAAA,EACJ;AAEA,EAAA,KAAA,MAAW,MAAM,KAAA,EAAO;AACtB,IAAA,MAAM,CAAA,GAAIA,SAAQ,EAAE,CAAA;AACpB,IAAA,MAAM,CAAA,GAAI,SAAA,CAAU,EAAA,CAAG,IAAI,CAAA;AAC3B,IAAA,MAAM,KAAA,GAAQ,QAAA,CAAS,EAAA,CAAG,KAAA,EAAO,IAAI,CAAC,CAAA;AACtC,IAAA,MAAM,QAAQ,KAAA,CACX,GAAA;AAAA,MACC,CAAC,EAAA,EAAI,CAAA,KACH,CAAA,SAAA,EAAY,CAAA,CAAE,CAAA,GAAI,CAAA,CAAE,CAAA,GAAI,CAAC,CAAA,KAAA,EAAQ,CAAA,CAAE,CAAA,GAAI,CAAA,CAAE,CAAA,GAAI,CAAA,GAAI,CAAA,GAAA,CAAK,KAAA,CAAM,MAAA,GAAS,CAAA,IAAK,CAAA,GAAI,CAAA,GAAI,EAAE,CAAA,wBAAA,EAA2B,CAAA,CAAE,IAAI,CAAA,EAAA,EAAK,UAAA,CAAW,EAAE,CAAC,CAAA,OAAA;AAAA,KAC5I,CACC,KAAK,EAAE,CAAA;AACV,IAAA,CAAA,IACE,sCACY,CAAA,CAAE,CAAC,QAAQ,CAAA,CAAE,CAAC,YAAY,CAAA,CAAE,CAAC,aAAa,CAAA,CAAE,CAAC,kBAAkB,CAAA,CAAE,IAAI,aAAa,CAAA,CAAE,MAAM,2BACtG,KAAA,GACA,CAAA,IAAA,CAAA;AAAA,EACJ;AAEA,EAAA,CAAA,IAAK,CAAA,MAAA,CAAA;AACL,EAAA,OAAO,YAAA;AAAA,IACL;AAAA,MACE,GAAA,EAAK,OAAA;AAAA,MACL,KAAA,EAAO,SAAA;AAAA,MACP,GAAI,KAAK,KAAA,KAAU,MAAA,GAAY,EAAE,KAAA,EAAO,IAAA,CAAK,KAAA,EAAM,GAAI,EAAC;AAAA,MACxD,GAAI,KAAK,WAAA,KAAgB,MAAA,GAAY,EAAE,IAAA,EAAM,IAAA,CAAK,WAAA,EAAY,GAAI;AAAC,KACrE;AAAA,IACA;AAAA,GACF;AACF;;;AC/FO,SAAS,WAAW,IAAA,EAAsC;AAC/D,EAAA,QAAA,CAAS,IAAA,IAAQ,EAAA,EAAI,WAAA,EAAY;AAAG,IAClC,KAAK,QAAA;AACH,MAAA,OAAO,EAAE,MAAA,EAAQ,SAAA,EAAW,IAAA,EAAM,SAAA,EAAW,MAAM,SAAA,EAAU;AAAA,IAC/D,KAAK,SAAA;AAAA,IACL,KAAK,cAAA;AAAA,IACL,KAAK,SAAA;AAAA,IACL,KAAK,WAAA;AACH,MAAA,OAAO,EAAE,MAAA,EAAQ,SAAA,EAAW,IAAA,EAAM,SAAA,EAAW,MAAM,SAAA,EAAU;AAAA,IAC/D,KAAK,MAAA;AACH,MAAA,OAAO,EAAE,MAAA,EAAQ,SAAA,EAAW,IAAA,EAAM,SAAA,EAAW,MAAM,SAAA,EAAU;AAAA,IAC/D,KAAK,OAAA;AAAA,IACL,KAAK,IAAA;AAAA,IACL,KAAK,UAAA;AACH,MAAA,OAAO,EAAE,MAAA,EAAQ,SAAA,EAAW,IAAA,EAAM,SAAA,EAAW,MAAM,SAAA,EAAU;AAAA,IAC/D,KAAK,QAAA;AAAA,IACL,KAAK,MAAA;AAAA,IACL,KAAK,QAAA;AACH,MAAA,OAAO,EAAE,MAAA,EAAQ,SAAA,EAAW,IAAA,EAAM,SAAA,EAAW,MAAM,SAAA,EAAU;AAAA,IAC/D,KAAK,OAAA;AACH,MAAA,OAAO,EAAE,MAAA,EAAQ,SAAA,EAAW,IAAA,EAAM,SAAA,EAAW,MAAM,SAAA,EAAU;AAAA,IAC/D,KAAK,OAAA;AACH,MAAA,OAAO,EAAE,MAAA,EAAQ,SAAA,EAAW,IAAA,EAAM,SAAA,EAAW,MAAM,SAAA,EAAU;AAAA,IAC/D,KAAK,SAAA;AAAA,IACL,KAAK,IAAA;AACH,MAAA,OAAO,EAAE,MAAA,EAAQ,SAAA,EAAW,IAAA,EAAM,SAAA,EAAW,MAAM,SAAA,EAAU;AAAA,IAC/D,KAAK,UAAA;AAAA,IACL,KAAK,QAAA;AACH,MAAA,OAAO,EAAE,MAAA,EAAQ,SAAA,EAAW,IAAA,EAAM,SAAA,EAAW,MAAM,SAAA,EAAU;AAAA,IAC/D,KAAK,KAAA;AACH,MAAA,OAAO,EAAE,MAAA,EAAQ,SAAA,EAAW,IAAA,EAAM,SAAA,EAAW,MAAM,SAAA,EAAU;AAAA,IAC/D,KAAK,UAAA;AACH,MAAA,OAAO,EAAE,MAAA,EAAQ,SAAA,EAAW,IAAA,EAAM,SAAA,EAAW,MAAM,SAAA,EAAU;AAAA,IAC/D,KAAK,UAAA;AACH,MAAA,OAAO,EAAE,MAAA,EAAQ,SAAA,EAAW,IAAA,EAAM,SAAA,EAAW,MAAM,SAAA,EAAU;AAAA,IAC/D,KAAK,OAAA;AACH,MAAA,OAAO,EAAE,MAAA,EAAQ,SAAA,EAAW,IAAA,EAAM,SAAA,EAAW,MAAM,SAAA,EAAU;AAAA,IAC/D,KAAK,UAAA;AACH,MAAA,OAAO,EAAE,MAAA,EAAQ,SAAA,EAAW,IAAA,EAAM,SAAA,EAAW,MAAM,SAAA,EAAU;AAAA,IAC/D,KAAK,SAAA;AACH,MAAA,OAAO,EAAE,MAAA,EAAQ,SAAA,EAAW,IAAA,EAAM,SAAA,EAAW,MAAM,SAAA,EAAU;AAAA,IAC/D,KAAK,UAAA;AACH,MAAA,OAAO,EAAE,MAAA,EAAQ,SAAA,EAAW,IAAA,EAAM,SAAA,EAAW,MAAM,SAAA,EAAU;AAAA,IAC/D;AACE,MAAA,OAAO,EAAE,MAAA,EAAQ,SAAA,EAAW,IAAA,EAAM,MAAA,EAAQ,MAAM,SAAA,EAAU;AAAA;AAEhE;AAWO,SAAS,SAAA,CAAU,IAAA,EAA0B,CAAA,EAAW,CAAA,EAAW,CAAA,EAAmB;AAC3F,EAAA,MAAM,CAAA,GAAA,CAAK,IAAA,IAAQ,EAAA,EAAI,WAAA,EAAY;AACnC,EAAA,IAAI,CAAA,KAAM,OAAA,IAAW,CAAA,KAAM,IAAA,IAAQ,MAAM,UAAA,EAAY;AACnD,IAAA,OACE,CAAA,WAAA,EAAc,CAAC,CAAA,8CAAA,EACC,CAAA,GAAI,CAAC,CAAA,MAAA,EAAS,CAAA,GAAI,CAAC,CAAA,2BAAA,EACtB,CAAA,GAAI,CAAC,CAAA,CAAA,EAAI,IAAI,CAAC,CAAA,GAAA,EAAM,CAAA,GAAI,EAAE,CAAA,aAAA,EAC1B,CAAA,GAAI,EAAE,CAAA,CAAA,EAAI,IAAI,CAAC,CAAA,GAAA,EAAM,CAAA,GAAI,EAAE,CAAA,aAAA,EAC3B,CAAA,GAAI,CAAC,CAAA,CAAA,EAAI,IAAI,EAAE,CAAA,wBAAA,CAAA;AAAA,EAGhC;AACA,EAAA,IAAI,CAAA,KAAM,QAAA,IAAY,CAAA,KAAM,MAAA,IAAU,MAAM,QAAA,EAAU;AACpD,IAAA,OACE,CAAA,WAAA,EAAc,CAAC,CAAA,8CAAA,EACC,CAAA,GAAI,CAAC,CAAA,MAAA,EAAS,CAAA,GAAI,CAAC,CAAA,6BAAA,EACtB,CAAA,GAAI,GAAG,CAAA,CAAA,EAAI,IAAI,CAAC,CAAA,GAAA,EAAM,CAAA,GAAI,GAAG,CAAA,CAAA,EAAI,CAAA,GAAI,EAAE,CAAA,GAAA,EAAM,IAAI,IAAI,CAAA,CAAA,EAAI,CAAA,GAAI,EAAE,CAAA,GAAA,EAAM,CAAA,GAAI,IAAI,CAAA,CAAA,EAAI,IAAI,CAAC,CAAA,OAAA,CAAA;AAAA,EAGvG;AACA,EAAA,IAAI,CAAA,KAAM,OAAA,IAAW,CAAA,KAAM,OAAA,EAAS;AAClC,IAAA,OACE,CAAA,WAAA,EAAc,CAAC,CAAA,+BAAA,EACF,CAAA,GAAI,CAAC,CAAA,CAAA,EAAI,CAAA,GAAI,CAAC,CAAA,GAAA,EAAM,CAAA,GAAI,EAAE,CAAA,aAAA,EAC1B,CAAA,GAAI,CAAC,CAAA,CAAA,EAAI,CAAA,GAAI,CAAC,CAAA,GAAA,EAAM,CAAA,GAAI,EAAE,CAAA,aAAA,EAC1B,CAAA,GAAI,EAAE,CAAA,CAAA,EAAI,CAAA,GAAI,CAAC,CAAA,GAAA,EAAM,CAAA,GAAI,EAAE,CAAA,OAAA,CAAA;AAAA,EAG5C;AACA,EAAA,IAAI,MAAM,UAAA,EAAY;AACpB,IAAA,OAAO,aAAa,CAAA,GAAI,CAAC,IAAI,CAAC,CAAA,GAAA,EAAM,IAAI,EAAE,CAAA,CAAA,EAAI,IAAI,CAAC,CAAA,GAAA,EAAM,IAAI,CAAC,CAAA,GAAA,EAAM,IAAI,EAAE,CAAA,CAAA,EAAI,IAAI,EAAE,CAAA,CAAA,EAAI,CAAA,GAAI,CAAC,IAAI,CAAA,GAAI,EAAE,MAAM,CAAA,GAAI,CAAC,IAAI,CAAA,GAAI,EAAE,IAAI,CAAA,GAAI,CAAC,IAAI,CAAA,GAAI,CAAC,MAAM,CAAA,GAAI,CAAC,2BAA2B,CAAC,CAAA,sBAAA,CAAA;AAAA,EACvL;AACA,EAAA,IAAI,MAAM,OAAA,EAAS;AAEjB,IAAA,MAAM,IAAA,GAAO,CAAC,EAAA,KACZ,CAAA,UAAA,EAAa,IAAI,CAAC,CAAA,CAAA,EAAI,CAAA,GAAI,CAAA,GAAI,EAAE,CAAA,EAAA,EAAK,CAAA,GAAI,CAAC,IAAI,CAAA,GAAI,CAAA,GAAI,EAAE,CAAA,EAAA,EAAK,CAAA,GAAI,EAAE,CAAA,CAAA,EAAI,CAAA,GAAI,IAAI,EAAE,CAAA,EAAA,EAAK,CAAA,GAAI,CAAC,CAAA,CAAA,EAAI,CAAA,GAAI,CAAA,GAAI,EAAE,2BAA2B,CAAC,CAAA,sBAAA,CAAA;AACvI,IAAA,OAAO,CAAA,GAAA,EAAM,IAAA,CAAK,CAAC,CAAC,CAAA,EAAG,IAAA,CAAK,GAAG,CAAC,CAAA,EAAG,IAAA,CAAK,CAAC,CAAC,CAAA,IAAA,CAAA;AAAA,EAC5C;AACA,EAAA,IAAI,CAAA,KAAM,UAAA,IAAc,CAAA,KAAM,QAAA,EAAU;AACtC,IAAA,OAAO,YAAY,CAAA,GAAI,CAAC,QAAQ,CAAA,GAAI,EAAE,6FAA6F,CAAC,CAAA,oCAAA,CAAA;AAAA,EACtI;AACA,EAAA,IAAI,CAAA,KAAM,KAAA,IAAS,CAAA,KAAM,UAAA,EAAY;AACnC,IAAA,OAAO,aAAa,CAAA,GAAI,CAAC,IAAI,CAAA,GAAI,EAAE,oFAAoF,CAAC,CAAA,sBAAA,CAAA;AAAA,EAC1H;AACA,EAAA,IAAI,CAAA,KAAM,SAAA,IAAa,CAAA,KAAM,IAAA,EAAM;AACjC,IAAA,OACE,cAAc,CAAC,CAAA,2CAAA,EACF,CAAA,GAAI,CAAC,IAAI,CAAA,GAAI,CAAC,CAAA,GAAA,EAAM,CAAA,GAAI,CAAC,CAAA,CAAA,EAAI,CAAA,GAAI,CAAC,CAAA,GAAA,EAAM,IAAI,CAAC,CAAA,CAAA,EAAI,CAAA,GAAI,EAAE,gBACvD,CAAA,GAAI,CAAC,CAAA,CAAA,EAAI,CAAA,GAAI,CAAC,CAAA,GAAA,EAAM,CAAA,GAAI,EAAE,CAAA,CAAA,EAAI,IAAI,CAAC,CAAA,GAAA,EAAM,IAAI,CAAC,CAAA,CAAA,EAAI,IAAI,EAAE,CAAA,OAAA,CAAA;AAAA,EAGzE;AACA,EAAA,IAAI,MAAM,SAAA,IAAa,CAAA,KAAM,kBAAkB,CAAA,KAAM,SAAA,IAAa,MAAM,WAAA,EAAa;AACnF,IAAA,OACE,CAAA,WAAA,EAAc,CAAC,CAAA,8BAAA,EACH,CAAA,GAAI,CAAC,CAAA,KAAA,EAAQ,CAAA,GAAI,CAAC,CAAA,wDAAA,EAClB,CAAA,GAAI,CAAC,CAAA,KAAA,EAAQ,IAAI,CAAC,CAAA,mDAAA,CAAA;AAAA,EAGlC;AACA,EAAA,OAAO,EAAA;AACT;AAYO,IAAM,KAAA,GAAmC;AAAA,EAC9C,KAAA,EAAO,EAAE,MAAA,EAAQ,iBAAA,EAAmB,EAAA,EAAI,GAAA,EAAK,IAAA,EAAM,EAAA,EAAI,MAAA,EAAQ,QAAA,EAAU,GAAA,EAAK,KAAA,EAAM;AAAA,EACpF,MAAA,EAAQ,EAAE,MAAA,EAAQ,aAAA,EAAe,EAAA,EAAI,GAAA,EAAK,IAAA,EAAM,KAAA,EAAO,MAAA,EAAQ,OAAA,EAAS,GAAA,EAAK,KAAA,EAAM;AAAA,EACnF,SAAA,EAAW,EAAE,MAAA,EAAQ,SAAA,EAAW,EAAA,EAAI,CAAA,EAAG,IAAA,EAAM,EAAA,EAAI,MAAA,EAAQ,MAAA,EAAQ,GAAA,EAAK,IAAA,EAAK;AAAA,EAC3E,KAAA,EAAO,EAAE,MAAA,EAAQ,SAAA,EAAW,EAAA,EAAI,GAAA,EAAK,IAAA,EAAM,EAAA,EAAI,MAAA,EAAQ,MAAA,EAAQ,GAAA,EAAK,IAAA;AACtE,CAAA;;;ACxHA,SAAS,QAAQ,CAAA,EAAkB;AACjC,EAAA,MAAM,CAAA,GAAA,CAAK,CAAA,CAAE,MAAA,IAAU,EAAA,EAAI,WAAA,EAAY;AACvC,EAAA,QAAQ,EAAE,IAAA;AAAM,IACd,KAAK,QAAA;AACH,MAAA,OAAO;AAAA,QACL,MAAA,EAAQ,SAAA;AAAA,QACR,IAAA,EAAM,SAAA;AAAA,QACN,IAAA,EAAM,MAAA;AAAA,QACN,GAAA,EAAK,SAAA;AAAA,QACL,IAAA,EAAM,QAAA;AAAA,QACN,KAAA,EAAO;AAAA,OACT;AAAA,IACF,KAAK,QAAA;AACH,MAAA,OAAO;AAAA,QACL,MAAA,EAAQ,SAAA;AAAA,QACR,IAAA,EAAM,SAAA;AAAA,QACN,IAAA,EAAM,SAAA;AAAA,QACN,GAAA,EAAK,SAAA;AAAA,QACL,IAAA,EAAM;AAAA,OACR;AAAA,IACF,KAAK,UAAA;AACH,MAAA,OAAO;AAAA,QACL,MAAA,EAAQ,SAAA;AAAA,QACR,IAAA,EAAM,SAAA;AAAA,QACN,IAAA,EAAM,SAAA;AAAA,QACN,GAAA,EAAK,SAAA;AAAA,QACL,IAAA,EAAM;AAAA,OACR;AAAA,IACF,KAAK,OAAA;AACH,MAAA,OAAO;AAAA,QACL,MAAA,EAAQ,SAAA;AAAA,QACR,IAAA,EAAM,SAAA;AAAA,QACN,IAAA,EAAM,SAAA;AAAA,QACN,GAAA,EAAK,SAAA;AAAA,QACL,IAAA,EAAM;AAAA,OACR;AAAA,IACF,KAAK,WAAA;AACH,MAAA,IAAI,CAAA,KAAM,MAAA;AACR,QAAA,OAAO;AAAA,UACL,MAAA,EAAQ,SAAA;AAAA,UACR,IAAA,EAAM,SAAA;AAAA,UACN,IAAA,EAAM,SAAA;AAAA,UACN,GAAA,EAAK,SAAA;AAAA,UACL,IAAA,EAAM;AAAA,SACR;AACF,MAAA,IAAI,CAAA,KAAM,UAAA;AACR,QAAA,OAAO;AAAA,UACL,MAAA,EAAQ,SAAA;AAAA,UACR,IAAA,EAAM,MAAA;AAAA,UACN,IAAA,EAAM,SAAA;AAAA,UACN,GAAA,EAAK,SAAA;AAAA,UACL,IAAA,EAAM,UAAA;AAAA,UACN,IAAA,EAAM;AAAA,SACR;AACF,MAAA,IAAI,CAAA,KAAM,YAAA;AACR,QAAA,OAAO;AAAA,UACL,MAAA,EAAQ,SAAA;AAAA,UACR,IAAA,EAAM,SAAA;AAAA,UACN,IAAA,EAAM,SAAA;AAAA,UACN,GAAA,EAAK,SAAA;AAAA,UACL,IAAA,EAAM;AAAA,SACR;AACF,MAAA,OAAO;AAAA,QACL,MAAA,EAAQ,SAAA;AAAA,QACR,IAAA,EAAM,SAAA;AAAA,QACN,IAAA,EAAM,SAAA;AAAA,QACN,GAAA,EAAK,SAAA;AAAA,QACL,IAAA,EAAM;AAAA,OACR;AAAA,IACF;AACE,MAAA,IAAI,CAAA,KAAM,MAAA;AACR,QAAA,OAAO;AAAA,UACL,MAAA,EAAQ,SAAA;AAAA,UACR,IAAA,EAAM,SAAA;AAAA,UACN,IAAA,EAAM,SAAA;AAAA,UACN,GAAA,EAAK,SAAA;AAAA,UACL,IAAA,EAAM;AAAA,SACR;AACF,MAAA,IAAI,CAAA,KAAM,SAAA;AACR,QAAA,OAAO;AAAA,UACL,MAAA,EAAQ,SAAA;AAAA,UACR,IAAA,EAAM,SAAA;AAAA,UACN,IAAA,EAAM,SAAA;AAAA,UACN,GAAA,EAAK,SAAA;AAAA,UACL,IAAA,EAAM;AAAA,SACR;AACF,MAAA,IAAI,CAAA,KAAM,QAAA;AACR,QAAA,OAAO;AAAA,UACL,MAAA,EAAQ,SAAA;AAAA,UACR,IAAA,EAAM,SAAA;AAAA,UACN,IAAA,EAAM,SAAA;AAAA,UACN,GAAA,EAAK,SAAA;AAAA,UACL,IAAA,EAAM;AAAA,SACR;AACF,MAAA,IAAI,CAAA,KAAM,OAAA;AACR,QAAA,OAAO;AAAA,UACL,MAAA,EAAQ,SAAA;AAAA,UACR,IAAA,EAAM,SAAA;AAAA,UACN,IAAA,EAAM,SAAA;AAAA,UACN,GAAA,EAAK,SAAA;AAAA,UACL,IAAA,EAAM;AAAA,SACR;AACF,MAAA,OAAO;AAAA,QACL,MAAA,EAAQ,SAAA;AAAA,QACR,IAAA,EAAM,SAAA;AAAA,QACN,IAAA,EAAM,SAAA;AAAA,QACN,GAAA,EAAK,SAAA;AAAA,QACL,IAAA,EAAM;AAAA,OACR;AAAA;AAEN;AAEA,IAAM,MAAA,GAAuD;AAAA,EAC3D,EAAE,EAAA,EAAI,SAAA,EAAW,KAAA,EAAO,QAAA,EAAS;AAAA,EACjC,EAAE,EAAA,EAAI,SAAA,EAAW,KAAA,EAAO,kBAAA,EAAmB;AAAA,EAC3C,EAAE,EAAA,EAAI,SAAA,EAAW,KAAA,EAAO,oBAAA,EAAqB;AAAA,EAC7C,EAAE,EAAA,EAAI,SAAA,EAAW,KAAA,EAAO,kBAAA,EAAmB;AAAA,EAC3C,EAAE,EAAA,EAAI,SAAA,EAAW,KAAA,EAAO,UAAA,EAAW;AAAA,EACnC,EAAE,EAAA,EAAI,SAAA,EAAW,KAAA,EAAO,UAAA;AAC1B,CAAA;AAEO,SAAS,SAAS,IAAA,EAAkC;AACzD,EAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,KAAA,IAAS,EAAC;AAC7B,EAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,KAAA,IAAS,EAAC;AAC7B,EAAA,MAAM,IAAA,GAAO,IAAI,GAAA,CAAI,KAAA,CAAM,GAAA,CAAI,CAAC,CAAA,KAAM,CAAC,CAAA,CAAE,EAAA,EAAI,CAAC,CAAC,CAAC,CAAA;AAChD,EAAA,MAAM,KAAA,GAAQ,GAAA;AACd,EAAA,MAAM,KAAA,GAAQ,GAAA;AACd,EAAA,MAAM,IAAA,GAAO,EAAA;AACb,EAAA,MAAM,IAAA,GAAO,EAAA;AACb,EAAA,MAAM,IAAA,GAAO,EAAA;AACb,EAAA,MAAM,MAAA,GAAS,EAAA;AACf,EAAA,MAAM,MAAA,GAAS,EAAA;AACf,EAAA,MAAM,IAAA,GAAO,IAAA,CAAK,GAAA,CAAI,CAAA,EAAG,GAAG,KAAA,CAAM,GAAA,CAAI,CAAC,CAAA,KAAM,EAAE,GAAA,IAAA,CAAQ,CAAA,CAAE,CAAA,IAAK,CAAA,IAAK,EAAE,CAAC,CAAA;AACtE,EAAA,MAAM,IAAA,GAAO,IAAA,CAAK,GAAA,CAAI,CAAA,EAAG,GAAG,KAAA,CAAM,GAAA,CAAI,CAAC,CAAA,KAAM,CAAA,CAAE,GAAG,CAAC,CAAA;AACnD,EAAA,MAAMA,QAAAA,GAAU,CAAC,CAAA,MAA6D;AAAA,IAC5E,CAAA,EAAG,IAAA,GAAA,CAAQ,CAAA,CAAE,GAAA,GAAM,MAAM,KAAA,GAAQ,IAAA,CAAA;AAAA,IACjC,CAAA,EAAG,MAAA,GAAA,CAAU,CAAA,CAAE,GAAA,GAAM,MAAM,KAAA,GAAQ,IAAA,CAAA;AAAA,IACnC,CAAA,EAAA,CAAI,EAAE,CAAA,IAAK,CAAA,IAAK,UAAU,CAAA,CAAE,CAAA,IAAK,KAAK,CAAA,IAAK,IAAA;AAAA,IAC3C,CAAA,EAAG;AAAA,GACL,CAAA;AACA,EAAA,MAAM,QAAQ,IAAA,GAAO,CAAA,GAAI,IAAA,GAAO,KAAA,GAAA,CAAS,OAAO,CAAA,IAAK,IAAA;AACrD,EAAA,MAAM,SAAS,MAAA,GAAS,IAAA,GAAO,KAAA,GAAA,CAAS,IAAA,GAAO,KAAK,IAAA,GAAO,MAAA;AAG3D,EAAA,IAAI,WAAA,GAAc,EAAA;AAClB,EAAA,IAAI,IAAA,CAAK,aAAa,MAAA,EAAW;AAC/B,IAAA,MAAM,YAAY,KAAA,CACf,MAAA,CAAO,CAAC,CAAA,KAAM,EAAE,IAAA,KAAS,WAAA,IAAe,CAAA,CAAE,IAAA,KAAS,eAAe,CAAA,CAAE,IAAA,KAAS,OAAO,CAAA,CACpF,IAAIA,QAAO,CAAA;AACd,IAAA,IAAI,SAAA,CAAU,SAAS,CAAA,EAAG;AACxB,MAAA,MAAM,IAAA,GAAO,IAAA,CAAK,GAAA,CAAI,GAAG,SAAA,CAAU,GAAA,CAAI,CAAC,CAAA,KAAM,CAAA,CAAE,CAAC,CAAC,CAAA,GAAI,EAAA;AACtD,MAAA,MAAM,IAAA,GAAO,IAAA,CAAK,GAAA,CAAI,GAAG,SAAA,CAAU,GAAA,CAAI,CAAC,CAAA,KAAM,CAAA,CAAE,CAAC,CAAC,CAAA,GAAI,EAAA;AACtD,MAAA,MAAM,IAAA,GAAO,IAAA,CAAK,GAAA,CAAI,GAAG,SAAA,CAAU,GAAA,CAAI,CAAC,CAAA,KAAM,CAAA,CAAE,CAAA,GAAI,CAAA,CAAE,CAAC,CAAC,CAAA,GAAI,EAAA;AAC5D,MAAA,MAAM,IAAA,GAAO,IAAA,CAAK,GAAA,CAAI,GAAG,SAAA,CAAU,GAAA,CAAI,CAAC,CAAA,KAAM,CAAA,CAAE,CAAA,GAAI,CAAA,CAAE,CAAC,CAAC,CAAA,GAAI,EAAA;AAC5D,MAAA,MAAM,CAAA,GAAI,KAAK,GAAA,CAAI,GAAA,EAAK,KAAK,QAAA,CAAS,KAAA,CAAM,SAAS,GAAG,CAAA;AACxD,MAAA,WAAA,GACE,CAAA,YAAA,EACY,IAAI,CAAA,KAAA,EAAQ,IAAI,CAAA,SAAA,EAAY,IAAA,GAAO,IAAI,CAAA,UAAA,EAAa,IAAA,GAAO,IAAI,CAAA,wCAAA,EAC/D,IAAA,GAAO,EAAE,CAAA,KAAA,EAAQ,IAAA,GAAO,CAAC,CAAA,SAAA,EAAY,CAAC,CAAA,oCAAA,EACtC,IAAA,GAAO,EAAE,CAAA,KAAA,EAAQ,IAAA,GAAO,CAAC,CAAA,4BAAA,EAA+B,UAAA,CAAW,IAAA,CAAK,QAAA,CAAS,KAAK,CAAC,CAAA,WAAA,CAAA;AAAA,IAEvG;AAAA,EACF;AAEA,EAAA,IAAI,IAAI,CAAA,kBAAA,EAAqB,KAAK,CAAA,CAAA,EAAI,MAAM,yCAAyC,WAAW,CAAA,CAAA;AAEhG,EAAA,KAAA,MAAW,KAAK,KAAA,EAAO;AACrB,IAAA,MAAM,CAAA,GAAI,IAAA,CAAK,GAAA,CAAI,CAAA,CAAE,IAAI,CAAA;AACzB,IAAA,MAAM,CAAA,GAAI,IAAA,CAAK,GAAA,CAAI,CAAA,CAAE,EAAE,CAAA;AACvB,IAAA,IAAI,CAAC,CAAA,IAAK,CAAC,CAAA,EAAG;AACd,IAAA,MAAM,IAAI,KAAA,CAAMA,QAAAA,CAAQ,CAAC,CAAA,EAAGA,QAAAA,CAAQ,CAAC,CAAC,CAAA;AACtC,IAAA,MAAM,EAAA,GAAK,MAAM,CAAA,CAAE,IAAA,IAAQ,OAAO,CAAA,IAChC,KAAA,CAAM,OAAO,CAAA,IAAK;AAAA,MAChB,MAAA,EAAQ,SAAA;AAAA,MACR,EAAA,EAAI,GAAA;AAAA,MACJ,IAAA,EAAM,EAAA;AAAA,MACN,MAAA,EAAQ,QAAA;AAAA,MACR,GAAA,EAAK;AAAA,KACP;AACF,IAAA,CAAA,IACE,CAAA,YAAA,EAAe,EAAE,CAAC,CAAA,sBAAA,EAAyB,GAAG,MAAM,CAAA,gBAAA,EAAmB,EAAA,CAAG,EAAE,CAAA,oBAAA,EAAuB,EAAA,CAAG,IAAI,CAAA,mBAAA,EAAsB,EAAA,CAAG,MAAM,CAAA,IAAA,CAAA,GACzI,QAAA,CAAS,GAAG,CAAA,CAAE,KAAA,EAAO,EAAA,CAAG,GAAG,CAAA,GAC3B,CAAA,IAAA,CAAA;AAAA,EACJ;AAEA,EAAA,KAAA,MAAW,KAAK,KAAA,EAAO;AACrB,IAAA,MAAM,CAAA,GAAIA,SAAQ,CAAC,CAAA;AACnB,IAAA,MAAM,EAAA,GAAK,QAAQ,CAAC,CAAA;AACpB,IAAA,MAAM,EAAA,GAAK,EAAE,CAAA,GAAI,EAAA;AACjB,IAAA,MAAM,IAAA,GAAO,QAAA,CAAS,CAAA,CAAE,IAAA,EAAM,IAAI,CAAC,CAAA;AACnC,IAAA,MAAM,WAAA,GAAc,EAAA,CAAG,KAAA,KAAU,IAAA,GAAO,CAAA,GAAI,GAAA;AAC5C,IAAA,MAAM,UAAA,GAAa,EAAA,CAAG,KAAA,KAAU,IAAA,GAAO,SAAS,EAAA,CAAG,MAAA;AACnD,IAAA,MAAM,WAAW,EAAA,CAAG,IAAA,KAAS,SAAY,CAAA,mBAAA,EAAsB,EAAA,CAAG,IAAI,CAAA,CAAA,CAAA,GAAM,EAAA;AAC5E,IAAA,MAAM,SACJ,EAAA,CAAG,KAAA,KAAU,IAAA,GACT,EAAA,GACA,YAAY,CAAA,CAAE,CAAC,CAAA,KAAA,EAAQ,CAAA,CAAE,CAAC,CAAA,oBAAA,EAAuB,CAAA,CAAE,CAAC,CAAA,eAAA,EAAkB,GAAG,MAAM,CAAA,GAAA,CAAA;AACrF,IAAA,MAAM,WAAA,GACJ,EAAE,IAAA,KAAS,QAAA,GACP,YAAY,EAAA,CAAG,IAAI,iBAAiB,EAAA,GAAK,CAAC,SAAS,CAAA,CAAE,CAAA,GAAI,EAAE,CAAA,oBAAA,EAAuB,EAAE,IAAI,CAAA,CAAE,CAAA,GAAI,EAAE,CAAA,0BAAA,CAAA,GAChG,EAAA;AACN,IAAA,MAAM,KAAA,GAAQ,CAAA,CAAE,IAAA,KAAS,QAAA,GAAW,KAAK,EAAA,GAAK,EAAA;AAC9C,IAAA,MAAM,WAAW,EAAA,CAAG,KAAA,KAAU,IAAA,GAAO,EAAA,CAAG,MAAM,EAAA,CAAG,MAAA;AACjD,IAAA,MAAM,WACJ,CAAA,CAAE,IAAA,KAAS,SACP,CAAA,SAAA,EAAY,EAAE,QAAQ,CAAA,CAAE,CAAA,GAAI,EAAE,CAAA,wBAAA,EAA2B,GAAG,GAAG,CAAA,EAAA,EAAK,WAAW,CAAA,CAAE,IAAI,CAAC,CAAA,OAAA,CAAA,GACtF,EAAA;AACN,IAAA,MAAM,YAAY,IAAA,CACf,GAAA;AAAA,MACC,CAAC,EAAA,EAAI,CAAA,KACH,CAAA,SAAA,EAAY,EAAE,QAAQ,CAAA,CAAE,CAAA,GAAI,EAAA,GAAK,CAAA,GAAI,EAAE,CAAA,wBAAA,EAA2B,EAAA,CAAG,GAAG,CAAA,EAAA,EAAK,UAAA,CAAW,EAAE,CAAC,CAAA,OAAA;AAAA,KAC/F,CACC,KAAK,EAAE,CAAA;AACV,IAAA,CAAA,IACE,CAAA,mCAAA,EACY,CAAA,CAAE,CAAC,CAAA,KAAA,EAAQ,CAAA,CAAE,CAAC,CAAA,SAAA,EAAY,CAAA,CAAE,CAAC,CAAA,UAAA,EAAa,CAAA,CAAE,CAAC,mBAAmB,EAAA,CAAG,IAAI,CAAA,UAAA,EAAa,UAAU,CAAA,gBAAA,EAAmB,WAAW,IAAI,QAAQ,CAAA,EAAA,CAAA,GACpJ,MAAA,GACA,WAAA,GACA,CAAA,SAAA,EAAY,KAAK,QAAQ,CAAA,CAAE,CAAA,GAAI,EAAE,CAAA,wBAAA,EAA2B,QAAQ,CAAA,EAAA,EAAK,WAAW,EAAA,CAAG,IAAI,CAAC,CAAA,gBAAA,EAChF,EAAE,CAAA,KAAA,EAAQ,EAAE,CAAA,GAAI,EAAE,CAAA,wBAAA,EAA2B,EAAA,CAAG,IAAI,CAAA,EAAA,EAAK,UAAA,CAAW,CAAA,CAAE,IAAI,CAAC,CAAA,OAAA,CAAA,GACvF,QAAA,GACA,SAAA,GACA,CAAA,IAAA,CAAA;AAAA,EACJ;AAEA,EAAA,CAAA,IAAK,CAAA,MAAA,CAAA;AACL,EAAA,MAAM,MAAA,GACJ,yBACA,MAAA,CAAO,GAAA;AAAA,IACL,CAAC,MACC,CAAA,sDAAA,EAAyD,CAAA,CAAE,EAAE,CAAA,kCAAA,EAAqC,UAAA,CAAW,CAAA,CAAE,KAAK,CAAC,CAAA,OAAA;AAAA,GACzH,CAAE,IAAA,CAAK,EAAE,CAAA,GACT,CAAA,MAAA,CAAA;AAEF,EAAA,OAAO,YAAA;AAAA,IACL;AAAA,MACE,GAAA,EAAK,IAAA;AAAA,MACL,QAAA,EAAU,IAAA;AAAA,MACV,GAAI,KAAK,KAAA,KAAU,MAAA,GAAY,EAAE,KAAA,EAAO,IAAA,CAAK,KAAA,EAAM,GAAI,EAAC;AAAA,MACxD,GAAI,KAAK,WAAA,KAAgB,MAAA,GAAY,EAAE,IAAA,EAAM,IAAA,CAAK,WAAA,EAAY,GAAI;AAAC,KACrE;AAAA,IACA,CAAA,GAAI;AAAA,GACN;AACF;;;AC3PA,SAAS,OAAO,IAAA,EAAuC;AACrD,EAAA,QAAA,CAAS,IAAA,IAAQ,aAAA,EAAe,WAAA,EAAY;AAAG,IAC7C,KAAK,aAAA;AAAA,IACL,KAAK,SAAA;AACH,MAAA,OAAO,EAAE,IAAA,EAAM,EAAA,EAAI,GAAA,EAAK,QAAA,EAAS;AAAA,IACnC,KAAK,gBAAA;AAAA,IACL,KAAK,YAAA;AACH,MAAA,OAAO,EAAE,IAAA,EAAM,KAAA,EAAO,GAAA,EAAK,QAAA,EAAS;AAAA,IACtC,KAAK,aAAA;AACH,MAAA,OAAO,EAAE,IAAA,EAAM,EAAA,EAAI,KAAA,EAAO,SAAA,EAAU;AAAA,IACtC,KAAK,aAAA;AACH,MAAA,OAAO,EAAE,IAAA,EAAM,EAAA,EAAI,KAAA,EAAO,SAAA,EAAU;AAAA,IACtC,KAAK,YAAA;AACH,MAAA,OAAO,EAAE,IAAA,EAAM,KAAA,EAAO,GAAA,EAAK,SAAA,EAAU;AAAA,IACvC;AACE,MAAA,OAAO,EAAE,IAAA,EAAM,EAAA,EAAI,GAAA,EAAK,SAAA,EAAU;AAAA;AAExC;AAEO,SAAS,UAAU,IAAA,EAAmC;AAC3D,EAAA,MAAM,OAAA,GAAU,IAAA,CAAK,OAAA,IAAW,EAAC;AACjC,EAAA,MAAM,IAAA,GAAO,IAAA,CAAK,IAAA,IAAQ,EAAC;AAC3B,EAAA,MAAM,IAAA,GAAO,GAAA;AACb,EAAA,MAAM,IAAA,GAAO,EAAA;AACb,EAAA,MAAM,IAAA,GAAO,EAAA;AACb,EAAA,MAAM,IAAA,GAAO,EAAA;AACb,EAAA,MAAM,MAAA,GAAS,EAAA;AACf,EAAA,MAAM,MAAA,GAAS,EAAA;AACf,EAAA,MAAM,IAAA,GAAO,EAAA;AACb,EAAA,MAAM,QAAQ,CAAC,CAAA,KAAwB,MAAM,CAAA,CAAE,UAAA,KAAe,SAAY,EAAA,GAAK,CAAA,CAAA;AAC/E,EAAA,MAAM,KAAA,GAAQ,CAAC,IAAA,KAAA,CACZ,IAAA,KAAS,MAAA,IAAa,IAAA,CAAK,MAAA,GAAS,CAAA,GAAI,IAAA,CAAK,MAAA,GAAS,IAAA,GAAO,CAAA,IAAK,CAAA;AACrE,EAAA,MAAM,IAAA,GAAO,CAAC,CAAA,KAAwB,KAAA,CAAM,CAAC,CAAA,GAAI,KAAA,CAAM,CAAA,CAAE,KAAK,CAAA,GAAI,KAAA,CAAM,CAAA,CAAE,OAAO,CAAA;AAEjF,EAAA,MAAM,IAAA,GAAO,IAAA,CAAK,GAAA,CAAI,CAAA,EAAG,GAAG,OAAA,CAAQ,GAAA,CAAI,CAAC,CAAA,KAAM,CAAA,CAAE,GAAG,CAAC,CAAA;AACrD,EAAA,MAAM,IAAA,GAAO,IAAA,CAAK,GAAA,CAAI,CAAA,EAAG,GAAG,OAAA,CAAQ,GAAA,CAAI,CAAC,CAAA,KAAM,CAAA,CAAE,GAAG,CAAC,CAAA;AACrD,EAAA,MAAM,KAAA,uBAAY,GAAA,EAAoB;AACtC,EAAA,MAAM,OAAA,uBAAc,GAAA,EAAoB;AACxC,EAAA,IAAI,GAAA,GAAM,MAAA;AACV,EAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,IAAK,IAAA,EAAM,CAAA,EAAA,EAAK;AAC9B,IAAA,MAAM,EAAA,GAAK,OAAA,CAAQ,MAAA,CAAO,CAAC,CAAA,KAAM,EAAE,GAAA,KAAQ,CAAC,CAAA,CAAE,GAAA,CAAI,IAAI,CAAA;AACtD,IAAA,MAAM,CAAA,GAAI,GAAG,MAAA,GAAS,CAAA,GAAI,KAAK,GAAA,CAAI,GAAG,EAAE,CAAA,GAAI,EAAA;AAC5C,IAAA,KAAA,CAAM,GAAA,CAAI,GAAG,CAAC,CAAA;AACd,IAAA,OAAA,CAAQ,GAAA,CAAI,GAAG,GAAG,CAAA;AAClB,IAAA,GAAA,IAAO,CAAA,GAAI,IAAA;AAAA,EACb;AACA,EAAA,MAAM,MAAM,CAAC,CAAA,KAAsB,IAAA,GAAA,CAAQ,CAAA,GAAI,MAAM,IAAA,GAAO,IAAA,CAAA;AAC5D,EAAA,MAAMA,QAAAA,GAAU,CAAC,CAAA,MAAiE;AAAA,IAChF,CAAA,EAAG,GAAA,CAAI,CAAA,CAAE,GAAG,CAAA;AAAA,IACZ,CAAA,EAAG,OAAA,CAAQ,GAAA,CAAI,CAAA,CAAE,GAAG,CAAA,IAAK,MAAA;AAAA,IACzB,CAAA,EAAG,IAAA;AAAA,IACH,CAAA,EAAG,KAAK,CAAC;AAAA,GACX,CAAA;AACA,EAAA,MAAM,IAAA,GAAO,IAAI,GAAA,CAAI,OAAA,CAAQ,GAAA,CAAI,CAAC,CAAA,KAAM,CAAC,CAAA,CAAE,EAAA,EAAI,CAAC,CAAC,CAAC,CAAA;AAClD,EAAA,MAAM,QAAQ,IAAA,GAAO,CAAA,GAAI,IAAA,GAAO,IAAA,GAAA,CAAQ,OAAO,CAAA,IAAK,IAAA;AACpD,EAAA,MAAM,MAAA,GAAS,MAAM,IAAA,GAAO,MAAA;AAE5B,EAAA,IAAI,CAAA,GACF,CAAA,kBAAA,EAAqB,KAAK,CAAA,CAAA,EAAI,MAAM,CAAA,42BAAA,CAAA;AAYtC,EAAA,KAAA,MAAW,MAAM,IAAA,EAAM;AACrB,IAAA,MAAM,CAAA,GAAI,IAAA,CAAK,GAAA,CAAI,EAAA,CAAG,IAAI,CAAA;AAC1B,IAAA,MAAM,CAAA,GAAI,IAAA,CAAK,GAAA,CAAI,EAAA,CAAG,EAAE,CAAA;AACxB,IAAA,IAAI,CAAC,CAAA,IAAK,CAAC,CAAA,EAAG;AACd,IAAA,MAAM,IAAI,KAAA,CAAMA,QAAAA,CAAQ,CAAC,CAAA,EAAGA,QAAAA,CAAQ,CAAC,CAAC,CAAA;AACtC,IAAA,MAAM,EAAA,GAAK,MAAA,CAAO,EAAA,CAAG,IAAI,CAAA;AACzB,IAAA,MAAM,QAAQ,EAAA,CAAG,KAAA,KAAU,SAAY,CAAA,oBAAA,EAAuB,EAAA,CAAG,KAAK,CAAA,EAAA,CAAA,GAAO,EAAA;AAC7E,IAAA,MAAM,MAAM,EAAA,CAAG,GAAA,KAAQ,SAAY,CAAA,kBAAA,EAAqB,EAAA,CAAG,GAAG,CAAA,EAAA,CAAA,GAAO,EAAA;AACrE,IAAA,CAAA,IACE,CAAA,YAAA,EAAe,CAAA,CAAE,CAAC,CAAA,oEAAA,EAAuE,GAAG,IAAI,CAAA,CAAA,EAAI,KAAK,CAAA,EAAG,GAAG,CAAA,EAAA,CAAA,GAC/G,QAAA,CAAS,CAAA,EAAG,EAAA,CAAG,KAAK,CAAA,GACpB,CAAA,IAAA,CAAA;AAAA,EACJ;AAEA,EAAA,KAAA,MAAW,KAAK,OAAA,EAAS;AACvB,IAAA,MAAM,CAAA,GAAIA,SAAQ,CAAC,CAAA;AACnB,IAAA,MAAM,EAAA,GAAK,MAAM,CAAC,CAAA;AAClB,IAAA,MAAM,EAAA,GAAK,KAAA,CAAM,CAAA,CAAE,KAAK,CAAA;AACxB,IAAA,MAAM,QAAQ,CAAA,CAAE,CAAA,IAAK,CAAA,CAAE,UAAA,KAAe,SAAY,EAAA,GAAK,EAAA,CAAA;AACvD,IAAA,MAAM,SACJ,CAAA,CAAE,UAAA,KAAe,SACb,CAAA,SAAA,EAAY,CAAA,CAAE,IAAI,CAAA,CAAE,CAAA,GAAI,CAAC,CAAA,KAAA,EAAQ,CAAA,CAAE,IAAI,EAAE,CAAA,yBAAA,EAAyB,WAAW,CAAA,CAAE,UAAU,CAAC,CAAA,WAAA,CAAA,GAC1F,EAAA;AACN,IAAA,MAAM,KAAA,GAAA,CAAS,CAAA,CAAE,KAAA,IAAS,EAAC,EACxB,GAAA;AAAA,MACC,CAAC,CAAA,EAAG,CAAA,KACF,CAAA,SAAA,EAAY,CAAA,CAAE,IAAI,EAAE,CAAA,KAAA,EAAQ,CAAA,CAAE,CAAA,GAAI,KAAK,EAAA,GAAK,CAAA,GAAI,IAAI,CAAA,kBAAA,EAAqB,UAAA,CAAW,CAAC,CAAC,CAAA,OAAA;AAAA,KAC1F,CACC,KAAK,EAAE,CAAA;AACV,IAAA,MAAM,OAAA,GAAA,CAAW,CAAA,CAAE,OAAA,IAAW,EAAC,EAC5B,GAAA;AAAA,MACC,CAAC,CAAA,EAAG,CAAA,KACF,YAAY,CAAA,CAAE,CAAA,GAAI,EAAE,CAAA,KAAA,EAAQ,CAAA,CAAE,CAAA,GAAI,EAAA,GAAK,KAAK,EAAA,GAAK,CAAA,GAAI,IAAI,CAAA,kBAAA,EAAqB,UAAA,CAAW,CAAC,CAAC,CAAA,OAAA;AAAA,KAC/F,CACC,KAAK,EAAE,CAAA;AACV,IAAA,CAAA,IACE,CAAA,mCAAA,EACY,CAAA,CAAE,CAAC,CAAA,KAAA,EAAQ,CAAA,CAAE,CAAC,CAAA,SAAA,EAAY,CAAA,CAAE,CAAC,CAAA,UAAA,EAAa,CAAA,CAAE,CAAC,+DACzD,MAAA,GACA,CAAA,SAAA,EAAY,CAAA,CAAE,CAAA,GAAI,CAAA,CAAE,CAAA,GAAI,CAAC,CAAA,KAAA,EAAQ,KAAK,CAAA,mBAAA,EAAsB,UAAA,CAAW,CAAA,CAAE,IAAI,CAAC,CAAA,iBAAA,EACjE,CAAA,CAAE,CAAC,CAAA,MAAA,EAAS,CAAA,CAAE,CAAA,GAAI,EAAE,CAAA,MAAA,EAAS,CAAA,CAAE,CAAA,GAAI,CAAA,CAAE,CAAC,CAAA,MAAA,EAAS,CAAA,CAAE,CAAA,GAAI,EAAE,CAAA,mBAAA,CAAA,GACpE,KAAA,GACA,CAAA,UAAA,EAAa,EAAE,CAAC,CAAA,MAAA,EAAS,CAAA,CAAE,CAAA,GAAI,EAAA,GAAK,EAAE,CAAA,MAAA,EAAS,CAAA,CAAE,CAAA,GAAI,CAAA,CAAE,CAAC,CAAA,MAAA,EAAS,CAAA,CAAE,CAAA,GAAI,EAAA,GAAK,EAAE,wBAC9E,OAAA,GACA,CAAA,IAAA,CAAA;AAAA,EACJ;AAEA,EAAA,CAAA,IAAK,CAAA,MAAA,CAAA;AACL,EAAA,OAAO,YAAA;AAAA,IACL;AAAA,MACE,GAAA,EAAK,KAAA;AAAA,MACL,KAAA,EAAO,SAAA;AAAA,MACP,GAAI,KAAK,KAAA,KAAU,MAAA,GAAY,EAAE,KAAA,EAAO,IAAA,CAAK,KAAA,EAAM,GAAI,EAAC;AAAA,MACxD,GAAI,KAAK,WAAA,KAAgB,MAAA,GAAY,EAAE,IAAA,EAAM,IAAA,CAAK,WAAA,EAAY,GAAI;AAAC,KACrE;AAAA,IACA;AAAA,GACF;AACF;;;ACpIA,IAAML,gBAAe,CAAC,SAAA,EAAW,WAAW,SAAA,EAAW,SAAA,EAAW,WAAW,SAAS,CAAA;AAStF,SAAS,UAAU,CAAA,EAAsB;AACvC,EAAA,IAAI,CAAA,KAAM,CAAA,EAAG,OAAO,EAAE,IAAA,EAAM,SAAA,EAAW,IAAA,EAAM,MAAA,EAAQ,MAAA,EAAQ,SAAA,EAAW,KAAA,EAAO,IAAA,EAAK;AACpF,EAAA,MAAM,CAAA,GAAIA,aAAAA,CAAa,CAAA,GAAIA,aAAAA,CAAa,MAAM,CAAA,IAAK,SAAA;AACnD,EAAA,OAAO,EAAE,IAAA,EAAM,MAAA,EAAQ,IAAA,EAAM,CAAA,EAAG,QAAQ,CAAA,EAAE;AAC5C;AAEO,SAAS,WAAW,IAAA,EAAoC;AAC7D,EAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,KAAA,IAAS,EAAC;AAC7B,EAAA,MAAM,IAAA,uBAAW,GAAA,EAAkB;AACnC,EAAA,MAAM,QAAA,uBAAe,GAAA,EAAsB;AAC3C,EAAA,KAAA,MAAW,KAAK,KAAA,EAAO;AACrB,IAAA,IAAA,CAAK,GAAA,CAAI,CAAA,CAAE,EAAA,EAAI,CAAC,CAAA;AAChB,IAAA,QAAA,CAAS,GAAA,CAAI,CAAA,CAAE,EAAA,EAAI,EAAE,CAAA;AAAA,EACvB;AACA,EAAA,MAAM,QAAkB,EAAC;AACzB,EAAA,KAAA,MAAW,KAAK,KAAA,EAAO;AACrB,IAAA,IAAI,CAAA,CAAE,MAAA,KAAW,MAAA,IAAa,IAAA,CAAK,IAAI,CAAA,CAAE,MAAM,CAAA,EAAG,QAAA,CAAS,IAAI,CAAA,CAAE,MAAM,CAAA,EAAG,IAAA,CAAK,EAAE,EAAE,CAAA;AAAA,SAC9E,KAAA,CAAM,IAAA,CAAK,CAAA,CAAE,EAAE,CAAA;AAAA,EACtB;AAEA,EAAA,MAAM,GAAA,uBAAU,GAAA,EAAoB;AACpC,EAAA,MAAM,KAAA,uBAAY,GAAA,EAAoB;AACtC,EAAA,MAAM,IAAA,uBAAW,GAAA,EAAY;AAC7B,EAAA,IAAI,IAAA,GAAO,CAAA;AACX,EAAA,IAAI,QAAA,GAAW,CAAA;AACf,EAAA,MAAM,GAAA,GAAM,CAAC,EAAA,EAAY,CAAA,KAAoB;AAC3C,IAAA,IAAI,IAAA,CAAK,GAAA,CAAI,EAAE,CAAA,EAAG;AAClB,IAAA,IAAA,CAAK,IAAI,EAAE,CAAA;AACX,IAAA,KAAA,CAAM,GAAA,CAAI,IAAI,CAAC,CAAA;AACf,IAAA,IAAI,CAAA,GAAI,UAAU,QAAA,GAAW,CAAA;AAC7B,IAAA,MAAM,EAAA,GAAK,QAAA,CAAS,GAAA,CAAI,EAAE,KAAK,EAAC;AAChC,IAAA,IAAI,EAAA,CAAG,WAAW,CAAA,EAAG;AACnB,MAAA,GAAA,CAAI,GAAA,CAAI,IAAI,IAAI,CAAA;AAChB,MAAA,IAAA,IAAQ,CAAA;AAAA,IACV,CAAA,MAAO;AACL,MAAA,KAAA,MAAW,CAAA,IAAK,EAAA,EAAI,GAAA,CAAI,CAAA,EAAG,IAAI,CAAC,CAAA;AAChC,MAAA,MAAM,QAAQ,GAAA,CAAI,GAAA,CAAI,GAAG,CAAC,CAAA,IAAK,EAAE,CAAA,IAAK,CAAA;AACtC,MAAA,MAAM,IAAA,GAAO,IAAI,GAAA,CAAI,EAAA,CAAG,GAAG,MAAA,GAAS,CAAC,CAAA,IAAK,EAAE,CAAA,IAAK,CAAA;AACjD,MAAA,GAAA,CAAI,GAAA,CAAI,EAAA,EAAA,CAAK,KAAA,GAAQ,IAAA,IAAQ,CAAC,CAAA;AAAA,IAChC;AAAA,EACF,CAAA;AACA,EAAA,KAAA,MAAW,CAAA,IAAK,KAAA,EAAO,GAAA,CAAI,CAAA,EAAG,CAAC,CAAA;AAE/B,EAAA,MAAM,KAAA,GAAQ,GAAA;AACd,EAAA,MAAM,KAAA,GAAQ,EAAA;AACd,EAAA,MAAM,IAAA,GAAO,EAAA;AACb,EAAA,MAAM,MAAA,GAAS,EAAA;AACf,EAAA,MAAM,IAAA,GAAO,EAAA;AACb,EAAA,MAAM,MAAA,GAAS,EAAA;AACf,EAAA,MAAM,MAAA,GAAS,EAAA;AACf,EAAA,MAAM,GAAA,GAAM,CAAC,EAAA,KAAuB,IAAA,GAAA,CAAQ,MAAM,GAAA,CAAI,EAAE,CAAA,IAAK,CAAA,KAAM,KAAA,GAAQ,MAAA,CAAA;AAC3E,EAAA,MAAM,GAAA,GAAM,CAAC,EAAA,KAAuB,MAAA,GAAA,CAAU,IAAI,GAAA,CAAI,EAAE,CAAA,IAAK,CAAA,KAAM,KAAA,GAAQ,IAAA,CAAA;AAC3E,EAAA,MAAM,QAAQ,IAAA,GAAO,CAAA,GAAA,CAAK,QAAA,GAAW,CAAA,IAAK,QAAQ,QAAA,GAAW,MAAA;AAC7D,EAAA,MAAM,MAAA,GAAS,SAAS,IAAA,CAAK,GAAA,CAAI,MAAM,CAAC,CAAA,IAAK,KAAA,GAAQ,IAAA,CAAA,GAAQ,IAAA,GAAO,MAAA;AAEpE,EAAA,IAAI,CAAA,GAAI,CAAA,kBAAA,EAAqB,KAAK,CAAA,CAAA,EAAI,MAAM,CAAA,sCAAA,CAAA;AAG5C,EAAA,KAAA,MAAW,KAAK,KAAA,EAAO;AACrB,IAAA,IAAI,CAAA,CAAE,MAAA,KAAW,MAAA,IAAa,CAAC,KAAK,GAAA,CAAI,CAAA,CAAE,MAAM,CAAA,IAAK,CAAC,GAAA,CAAI,GAAA,CAAI,CAAA,CAAE,EAAE,CAAA,EAAG;AACrE,IAAA,MAAM,EAAA,GAAK,GAAA,CAAI,CAAA,CAAE,MAAM,CAAA,GAAI,KAAA;AAC3B,IAAA,MAAM,GAAA,GAAM,GAAA,CAAI,CAAA,CAAE,MAAM,IAAI,KAAA,GAAQ,CAAA;AACpC,IAAA,MAAM,EAAA,GAAK,GAAA,CAAI,CAAA,CAAE,EAAE,CAAA;AACnB,IAAA,MAAM,GAAA,GAAM,GAAA,CAAI,CAAA,CAAE,EAAE,IAAI,KAAA,GAAQ,CAAA;AAChC,IAAA,MAAM,IAAA,GAAA,CAAQ,KAAK,EAAA,IAAM,CAAA;AACzB,IAAA,CAAA,IAAK,CAAA,6BAAA,EAAgC,EAAE,CAAA,CAAA,EAAI,GAAG,MAAM,IAAI,CAAA,GAAA,EAAM,GAAG,CAAA,GAAA,EAAM,EAAE,CAAA,GAAA,CAAA;AAAA,EAC3E;AAIA,EAAA,KAAA,MAAW,KAAK,KAAA,EAAO;AACrB,IAAA,IAAI,CAAC,GAAA,CAAI,GAAA,CAAI,CAAA,CAAE,EAAE,CAAA,EAAG;AACpB,IAAA,MAAM,CAAA,GAAI,GAAA,CAAI,CAAA,CAAE,EAAE,CAAA;AAClB,IAAA,MAAM,CAAA,GAAI,GAAA,CAAI,CAAA,CAAE,EAAE,CAAA;AAClB,IAAA,MAAM,KAAK,SAAA,CAAU,KAAA,CAAM,IAAI,CAAA,CAAE,EAAE,KAAK,CAAC,CAAA;AACzC,IAAA,MAAM,MAAA,GAAS,EAAA,CAAG,KAAA,KAAU,IAAA,GAAO,SAAS,EAAA,CAAG,MAAA;AAC/C,IAAA,MAAM,MAAA,GACJ,EAAA,CAAG,KAAA,KAAU,IAAA,GACT,EAAA,GACA,CAAA,SAAA,EAAY,CAAC,CAAA,KAAA,EAAQ,CAAC,CAAA,oBAAA,EAAuB,KAAK,CAAA,eAAA,EAAkB,GAAG,MAAM,CAAA,GAAA,CAAA;AACnF,IAAA,MAAM,SAAS,CAAA,IAAK,EAAA,CAAG,KAAA,KAAU,IAAA,GAAO,QAAQ,CAAA,GAAI,EAAA,CAAA;AACpD,IAAA,MAAM,MAAA,GAAS,EAAA,CAAG,KAAA,KAAU,IAAA,GAAO,QAAA,GAAW,OAAA;AAC9C,IAAA,MAAM,KAAA,GAAQ,QAAA,CAAS,CAAA,CAAE,KAAA,EAAO,EAAA,CAAG,KAAA,KAAU,IAAA,GAAO,EAAA,GAAK,EAAA,EAAI,CAAA,CAAE,IAAA,KAAS,MAAA,GAAY,IAAI,CAAC,CAAA;AACzF,IAAA,MAAM,MAAA,GACJ,KAAA,CAAM,MAAA,KAAW,CAAA,GACb,CAAA,GAAI,KACJ,CAAA,IAAK,CAAA,CAAE,IAAA,KAAS,MAAA,GAAY,EAAA,GAAK,EAAA,CAAA;AACvC,IAAA,MAAM,aAAa,KAAA,CAChB,GAAA;AAAA,MACC,CAAC,EAAA,EAAI,CAAA,KACH,CAAA,SAAA,EAAY,MAAM,QAAQ,MAAA,GAAS,CAAA,GAAI,EAAE,CAAA,yBAAA,EAA4B,GAAG,IAAI,CAAA,eAAA,EAAkB,MAAM,CAAA,EAAA,EAAK,UAAA,CAAW,EAAE,CAAC,CAAA,OAAA;AAAA,KAC3H,CACC,KAAK,EAAE,CAAA;AACV,IAAA,MAAM,IAAA,GACJ,EAAE,IAAA,KAAS,MAAA,GACP,YAAY,MAAM,CAAA,KAAA,EAAQ,CAAA,GAAI,EAAE,CAAA,wBAAA,EAA2B,EAAA,CAAG,UAAU,IAAA,GAAO,SAAA,GAAY,EAAA,CAAG,MAAM,CAAA,eAAA,EAAkB,MAAM,KAAK,UAAA,CAAW,CAAA,CAAE,IAAI,CAAC,CAAA,OAAA,CAAA,GACnJ,EAAA;AACN,IAAA,CAAA,IACE,sCACY,CAAC,CAAA,KAAA,EAAQ,CAAC,CAAA,SAAA,EAAY,KAAK,CAAA,UAAA,EAAa,KAAK,CAAA,eAAA,EAAkB,EAAA,CAAG,IAAI,CAAA,UAAA,EAAa,MAAM,CAAA,sBAAA,CAAA,GACrG,MAAA,GACA,aACA,IAAA,GACA,CAAA,IAAA,CAAA;AAAA,EACJ;AAEA,EAAA,CAAA,IAAK,CAAA,MAAA,CAAA;AACL,EAAA,OAAO,YAAA;AAAA,IACL;AAAA,MACE,GAAA,EAAK,MAAA;AAAA,MACL,KAAA,EAAO,SAAA;AAAA,MACP,GAAI,KAAK,KAAA,KAAU,MAAA,GAAY,EAAE,KAAA,EAAO,IAAA,CAAK,KAAA,EAAM,GAAI,EAAC;AAAA,MACxD,GAAI,KAAK,WAAA,KAAgB,MAAA,GAAY,EAAE,IAAA,EAAM,IAAA,CAAK,WAAA,EAAY,GAAI;AAAC,KACrE;AAAA,IACA;AAAA,GACF;AACF;;;ACrHA,SAAS,QAAQ,IAAA,EAAmC;AAClD,EAAA,QAAA,CAAS,IAAA,IAAQ,WAAA,EAAa,WAAA,EAAY;AAAG,IAC3C,KAAK,MAAA;AACH,MAAA,OAAO,EAAE,QAAQ,SAAA,EAAW,IAAA,EAAM,WAAW,IAAA,EAAM,MAAA,EAAQ,OAAO,IAAA,EAAK;AAAA,IACzE,KAAK,QAAA;AACH,MAAA,OAAO,EAAE,MAAA,EAAQ,SAAA,EAAW,IAAA,EAAM,SAAA,EAAW,MAAM,SAAA,EAAU;AAAA,IAC/D,KAAK,MAAA;AACH,MAAA,OAAO,EAAE,MAAA,EAAQ,SAAA,EAAW,IAAA,EAAM,SAAA,EAAW,MAAM,SAAA,EAAU;AAAA,IAC/D,KAAK,WAAA;AACH,MAAA,OAAO,EAAE,MAAA,EAAQ,SAAA,EAAW,IAAA,EAAM,SAAA,EAAW,MAAM,SAAA,EAAU;AAAA,IAC/D,KAAK,MAAA;AACH,MAAA,OAAO,EAAE,MAAA,EAAQ,SAAA,EAAW,IAAA,EAAM,SAAA,EAAW,MAAM,SAAA,EAAU;AAAA,IAC/D,KAAK,UAAA;AAAA,IACL,KAAK,SAAA;AACH,MAAA,OAAO,EAAE,MAAA,EAAQ,SAAA,EAAW,IAAA,EAAM,SAAA,EAAW,MAAM,SAAA,EAAU;AAAA,IAC/D,KAAK,MAAA;AACH,MAAA,OAAO,EAAE,MAAA,EAAQ,SAAA,EAAW,IAAA,EAAM,SAAA,EAAW,MAAM,SAAA,EAAU;AAAA,IAC/D,KAAK,OAAA;AAAA,IACL,KAAK,OAAA;AACH,MAAA,OAAO,EAAE,MAAA,EAAQ,SAAA,EAAW,IAAA,EAAM,SAAA,EAAW,MAAM,SAAA,EAAU;AAAA,IAC/D;AACE,MAAA,OAAO,EAAE,MAAA,EAAQ,SAAA,EAAW,IAAA,EAAM,SAAA,EAAW,MAAM,SAAA,EAAU;AAAA;AAEnE;AAEO,SAAS,eAAe,IAAA,EAAwC;AACrE,EAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,KAAA,IAAS,EAAC;AAC7B,EAAA,MAAM,IAAA,uBAAW,GAAA,EAAkB;AACnC,EAAA,MAAM,QAAA,uBAAe,GAAA,EAAsB;AAC3C,EAAA,KAAA,MAAW,KAAK,KAAA,EAAO;AACrB,IAAA,IAAA,CAAK,GAAA,CAAI,CAAA,CAAE,EAAA,EAAI,CAAC,CAAA;AAChB,IAAA,QAAA,CAAS,GAAA,CAAI,CAAA,CAAE,EAAA,EAAI,EAAE,CAAA;AAAA,EACvB;AACA,EAAA,MAAM,QAAkB,EAAC;AACzB,EAAA,KAAA,MAAW,KAAK,KAAA,EAAO;AACrB,IAAA,IAAI,CAAA,CAAE,MAAA,KAAW,MAAA,IAAa,IAAA,CAAK,IAAI,CAAA,CAAE,MAAM,CAAA,EAAG,QAAA,CAAS,IAAI,CAAA,CAAE,MAAM,CAAA,EAAG,IAAA,CAAK,EAAE,EAAE,CAAA;AAAA,SAC9E,KAAA,CAAM,IAAA,CAAK,CAAA,CAAE,EAAE,CAAA;AAAA,EACtB;AAEA,EAAA,MAAM,GAAA,uBAAU,GAAA,EAAoB;AACpC,EAAA,MAAM,KAAA,uBAAY,GAAA,EAAoB;AACtC,EAAA,MAAM,IAAA,uBAAW,GAAA,EAAY;AAC7B,EAAA,IAAI,IAAA,GAAO,CAAA;AACX,EAAA,IAAI,QAAA,GAAW,CAAA;AACf,EAAA,MAAM,GAAA,GAAM,CAAC,EAAA,EAAY,CAAA,KAAoB;AAC3C,IAAA,IAAI,IAAA,CAAK,GAAA,CAAI,EAAE,CAAA,EAAG;AAClB,IAAA,IAAA,CAAK,IAAI,EAAE,CAAA;AACX,IAAA,KAAA,CAAM,GAAA,CAAI,IAAI,CAAC,CAAA;AACf,IAAA,IAAI,CAAA,GAAI,UAAU,QAAA,GAAW,CAAA;AAC7B,IAAA,MAAM,EAAA,GAAK,QAAA,CAAS,GAAA,CAAI,EAAE,KAAK,EAAC;AAChC,IAAA,IAAI,EAAA,CAAG,WAAW,CAAA,EAAG;AACnB,MAAA,GAAA,CAAI,GAAA,CAAI,IAAI,IAAI,CAAA;AAChB,MAAA,IAAA,IAAQ,CAAA;AAAA,IACV,CAAA,MAAO;AACL,MAAA,KAAA,MAAW,CAAA,IAAK,EAAA,EAAI,GAAA,CAAI,CAAA,EAAG,IAAI,CAAC,CAAA;AAChC,MAAA,MAAM,QAAQ,GAAA,CAAI,GAAA,CAAI,GAAG,CAAC,CAAA,IAAK,EAAE,CAAA,IAAK,CAAA;AACtC,MAAA,MAAM,IAAA,GAAO,IAAI,GAAA,CAAI,EAAA,CAAG,GAAG,MAAA,GAAS,CAAC,CAAA,IAAK,EAAE,CAAA,IAAK,CAAA;AACjD,MAAA,GAAA,CAAI,GAAA,CAAI,EAAA,EAAA,CAAK,KAAA,GAAQ,IAAA,IAAQ,CAAC,CAAA;AAAA,IAChC;AAAA,EACF,CAAA;AACA,EAAA,KAAA,MAAW,CAAA,IAAK,KAAA,EAAO,GAAA,CAAI,CAAA,EAAG,CAAC,CAAA;AAE/B,EAAA,MAAM,KAAA,GAAQ,GAAA;AACd,EAAA,MAAM,KAAA,GAAQ,EAAA;AACd,EAAA,MAAM,IAAA,GAAO,EAAA;AACb,EAAA,MAAM,QAAA,GAAW,EAAA;AACjB,EAAA,MAAM,IAAA,GAAO,EAAA;AACb,EAAA,MAAM,MAAA,GAAS,EAAA;AACf,EAAA,MAAM,MAAA,GAAS,EAAA;AACf,EAAA,MAAM,IAAA,GAAO,IAAA,CAAK,GAAA,CAAI,IAAA,EAAM,CAAC,CAAA;AAC7B,EAAA,MAAM,GAAA,GAAM,CAAC,EAAA,KAAuB,IAAA,GAAA,CAAQ,IAAI,GAAA,CAAI,EAAE,CAAA,IAAK,CAAA,KAAM,KAAA,GAAQ,IAAA,CAAA;AACzE,EAAA,MAAM,GAAA,GAAM,CAAC,EAAA,KAAuB,MAAA,GAAA,CAAU,MAAM,GAAA,CAAI,EAAE,KAAK,CAAA,IAAK,QAAA;AACpE,EAAA,MAAM,KAAA,GAAQ,IAAA,GAAO,CAAA,GAAI,IAAA,IAAQ,QAAQ,IAAA,CAAA,GAAQ,IAAA;AACjD,EAAA,MAAM,MAAA,GAAS,MAAA,GAAS,QAAA,GAAW,QAAA,GAAW,KAAA,GAAQ,MAAA;AAEtD,EAAA,IAAI,CAAA,GAAI,CAAA,kBAAA,EAAqB,KAAK,CAAA,CAAA,EAAI,MAAM,CAAA,0CAAA,CAAA;AAG5C,EAAA,KAAA,MAAW,KAAK,KAAA,EAAO;AACrB,IAAA,IAAI,CAAA,CAAE,MAAA,KAAW,MAAA,IAAa,CAAC,KAAK,GAAA,CAAI,CAAA,CAAE,MAAM,CAAA,IAAK,CAAC,GAAA,CAAI,GAAA,CAAI,CAAA,CAAE,EAAE,CAAA,EAAG;AACrE,IAAA,MAAM,GAAA,GAAM,GAAA,CAAI,CAAA,CAAE,MAAM,IAAI,KAAA,GAAQ,CAAA;AACpC,IAAA,MAAM,GAAA,GAAM,GAAA,CAAI,CAAA,CAAE,MAAM,CAAA,GAAI,KAAA;AAC5B,IAAA,MAAM,GAAA,GAAM,GAAA,CAAI,CAAA,CAAE,EAAE,IAAI,KAAA,GAAQ,CAAA;AAChC,IAAA,MAAM,GAAA,GAAM,GAAA,CAAI,CAAA,CAAE,EAAE,CAAA;AACpB,IAAA,MAAM,IAAA,GAAA,CAAQ,MAAM,GAAA,IAAO,CAAA;AAC3B,IAAA,CAAA,IAAK,CAAA,6BAAA,EAAgC,GAAG,CAAA,CAAA,EAAI,GAAG,MAAM,IAAI,CAAA,GAAA,EAAM,GAAG,CAAA,GAAA,EAAM,GAAG,CAAA,GAAA,CAAA;AAAA,EAC7E;AAIA,EAAA,KAAA,MAAW,KAAK,KAAA,EAAO;AACrB,IAAA,IAAI,CAAC,GAAA,CAAI,GAAA,CAAI,CAAA,CAAE,EAAE,CAAA,EAAG;AACpB,IAAA,MAAM,CAAA,GAAI,GAAA,CAAI,CAAA,CAAE,EAAE,CAAA;AAClB,IAAA,MAAM,CAAA,GAAI,GAAA,CAAI,CAAA,CAAE,EAAE,CAAA;AAClB,IAAA,MAAM,EAAA,GAAK,OAAA,CAAQ,CAAA,CAAE,IAAI,CAAA;AACzB,IAAA,MAAM,MAAA,GAAS,EAAA,CAAG,KAAA,KAAU,IAAA,GAAO,SAAS,EAAA,CAAG,MAAA;AAC/C,IAAA,MAAM,MAAA,GACJ,EAAA,CAAG,KAAA,KAAU,IAAA,GACT,EAAA,GACA,CAAA,SAAA,EAAY,CAAC,CAAA,KAAA,EAAQ,CAAC,CAAA,oBAAA,EAAuB,KAAK,CAAA,eAAA,EAAkB,GAAG,MAAM,CAAA,GAAA,CAAA;AACnF,IAAA,MAAM,SAAS,CAAA,IAAK,EAAA,CAAG,KAAA,KAAU,IAAA,GAAO,QAAQ,CAAA,GAAI,EAAA,CAAA;AACpD,IAAA,MAAM,MAAA,GAAS,EAAA,CAAG,KAAA,KAAU,IAAA,GAAO,QAAA,GAAW,OAAA;AAC9C,IAAA,MAAM,KAAA,GAAQ,QAAA,CAAS,CAAA,CAAE,IAAA,EAAM,EAAA,CAAG,KAAA,KAAU,IAAA,GAAO,EAAA,GAAK,EAAA,EAAI,CAAA,CAAE,IAAA,KAAS,MAAA,GAAY,IAAI,CAAC,CAAA;AACxF,IAAA,MAAM,MAAA,GACJ,KAAA,CAAM,MAAA,KAAW,CAAA,GACb,CAAA,GAAI,KACJ,CAAA,IAAK,CAAA,CAAE,IAAA,KAAS,MAAA,GAAY,EAAA,GAAK,EAAA,CAAA;AACvC,IAAA,MAAM,aAAa,KAAA,CAChB,GAAA;AAAA,MACC,CAAC,EAAA,EAAI,CAAA,KACH,CAAA,SAAA,EAAY,MAAM,QAAQ,MAAA,GAAS,CAAA,GAAI,EAAE,CAAA,yBAAA,EAA4B,GAAG,IAAI,CAAA,eAAA,EAAkB,MAAM,CAAA,EAAA,EAAK,UAAA,CAAW,EAAE,CAAC,CAAA,OAAA;AAAA,KAC3H,CACC,KAAK,EAAE,CAAA;AACV,IAAA,MAAM,IAAA,GACJ,EAAE,IAAA,KAAS,MAAA,GACP,YAAY,MAAM,CAAA,KAAA,EAAQ,CAAA,GAAI,EAAE,CAAA,wBAAA,EAA2B,EAAA,CAAG,UAAU,IAAA,GAAO,SAAA,GAAY,EAAA,CAAG,MAAM,CAAA,eAAA,EAAkB,MAAM,KAAK,UAAA,CAAW,CAAA,CAAE,IAAI,CAAC,CAAA,OAAA,CAAA,GACnJ,EAAA;AACN,IAAA,CAAA,IACE,sCACY,CAAC,CAAA,KAAA,EAAQ,CAAC,CAAA,SAAA,EAAY,KAAK,CAAA,UAAA,EAAa,KAAK,CAAA,eAAA,EAAkB,EAAA,CAAG,IAAI,CAAA,UAAA,EAAa,MAAM,CAAA,sBAAA,CAAA,GACrG,MAAA,GACA,aACA,IAAA,GACA,CAAA,IAAA,CAAA;AAAA,EACJ;AAEA,EAAA,CAAA,IAAK,CAAA,MAAA,CAAA;AACL,EAAA,OAAO,YAAA;AAAA,IACL;AAAA,MACE,GAAA,EAAK,IAAA;AAAA,MACL,KAAA,EAAO,SAAA;AAAA,MACP,GAAI,KAAK,KAAA,KAAU,MAAA,GAAY,EAAE,KAAA,EAAO,IAAA,CAAK,KAAA,EAAM,GAAI,EAAC;AAAA,MACxD,GAAI,KAAK,WAAA,KAAgB,MAAA,GAAY,EAAE,IAAA,EAAM,IAAA,CAAK,WAAA,EAAY,GAAI;AAAC,KACrE;AAAA,IACA;AAAA,GACF;AACF;;;AChJO,SAAS,cAAc,IAAA,EAAuC;AACnE,EAAA,MAAM,QAAA,GAAW,IAAA,CAAK,QAAA,IAAY,EAAC;AACnC,EAAA,MAAM,QAAA,GAAW,IAAA,CAAK,QAAA,IAAY,EAAC;AACnC,EAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,KAAA,IAAS,EAAC;AAC7B,EAAA,MAAM,YAAA,uBAAmB,GAAA,EAAuB;AAChD,EAAA,KAAA,MAAW,KAAK,QAAA,EAAU,YAAA,CAAa,IAAI,CAAA,CAAE,EAAA,EAAI,EAAE,CAAA;AACnD,EAAA,KAAA,MAAW,MAAM,QAAA,EAAU;AACzB,IAAA,MAAM,IAAA,GAAO,YAAA,CAAa,GAAA,CAAI,EAAA,CAAG,OAAO,CAAA;AACxC,IAAA,IAAI,IAAA,KAAS,MAAA,EAAW,IAAA,CAAK,IAAA,CAAK,EAAE,CAAA;AAAA,EACtC;AACA,EAAA,MAAM,QAAA,GAAW,GAAA;AACjB,EAAA,MAAM,QAAA,GAAW,EAAA;AACjB,EAAA,MAAM,IAAA,GAAO,EAAA;AACb,EAAA,MAAM,KAAA,GAAQ,EAAA;AACd,EAAA,MAAM,OAAA,GAAU,EAAA;AAChB,EAAA,MAAM,OAAA,GAAU,EAAA;AAChB,EAAA,MAAM,OAAA,GAAU,EAAA;AAChB,EAAA,MAAM,IAAA,GAAO,EAAA;AACb,EAAA,MAAM,QAAA,GAAW,EAAA;AAEjB,EAAA,IAAI,aAAA,GAAgB,CAAA;AACpB,EAAA,KAAA,MAAW,IAAA,IAAQ,YAAA,CAAa,MAAA,EAAO,EAAG;AACxC,IAAA,IAAI,IAAA,CAAK,MAAA,GAAS,aAAA,EAAe,aAAA,GAAgB,IAAA,CAAK,MAAA;AAAA,EACxD;AACA,EAAA,MAAM,IAAA,GAAO,KAAK,GAAA,CAAI,CAAA,EAAG,KAAK,GAAA,CAAI,CAAA,EAAG,aAAa,CAAC,CAAA;AACnD,EAAA,MAAM,WAAW,IAAA,GAAO,QAAA,GAAA,CAAY,IAAA,GAAO,CAAA,IAAK,OAAO,KAAA,GAAQ,CAAA;AAC/D,EAAA,MAAM,KAAA,GAAQ,WAAW,CAAA,GAAI,QAAA;AAQ7B,EAAA,MAAM,KAAA,uBAAY,GAAA,EAAkB;AAQpC,EAAA,MAAM,eAA6B,EAAC;AAEpC,EAAA,IAAI,CAAA,GAAI,QAAA;AACR,EAAA,KAAA,MAAW,KAAK,QAAA,EAAU;AACxB,IAAA,MAAM,OAAO,YAAA,CAAa,GAAA,CAAI,CAAA,CAAE,EAAE,KAAK,EAAC;AACxC,IAAA,MAAM,IAAA,GAAO,KAAK,GAAA,CAAI,CAAA,EAAG,KAAK,IAAA,CAAK,IAAA,CAAK,MAAA,GAAS,IAAI,CAAC,CAAA;AACtD,IAAA,MAAM,IAAI,OAAA,GAAU,OAAA,GAAU,OAAO,QAAA,GAAA,CAAY,IAAA,GAAO,KAAK,IAAA,GAAO,OAAA;AACpE,IAAA,MAAM,EAAA,GAAK,QAAA;AACX,IAAA,YAAA,CAAa,IAAA,CAAK,EAAE,CAAA,EAAG,CAAA,EAAG,IAAI,CAAA,EAAG,CAAA,EAAG,QAAA,EAAU,CAAA,EAAG,CAAA;AACjD,IAAA,IAAA,CAAK,OAAA,CAAQ,CAAC,EAAA,EAAI,CAAA,KAAM;AACtB,MAAA,MAAM,CAAA,GAAI,IAAA,CAAK,KAAA,CAAM,CAAA,GAAI,IAAI,CAAA;AAC7B,MAAA,MAAM,MAAM,CAAA,GAAI,IAAA;AAChB,MAAA,KAAA,CAAM,GAAA,CAAI,GAAG,EAAA,EAAI;AAAA,QACf,CAAA,EAAG,EAAA,GAAK,KAAA,GAAQ,GAAA,IAAO,QAAA,GAAW,IAAA,CAAA;AAAA,QAClC,CAAA,EAAG,CAAA,GAAI,OAAA,GAAU,OAAA,GAAU,KAAK,QAAA,GAAW,IAAA,CAAA;AAAA,QAC3C,CAAA,EAAG,QAAA;AAAA,QACH,CAAA,EAAG;AAAA,OACJ,CAAA;AAAA,IACH,CAAC,CAAA;AACD,IAAA,CAAA,IAAK,CAAA,GAAI,IAAA;AAAA,EACX;AACA,EAAA,MAAM,MAAA,GAAS,IAAI,IAAA,GAAO,QAAA;AAE1B,EAAA,IAAI,CAAA,GAAI,CAAA,kBAAA,EAAqB,KAAK,CAAA,CAAA,EAAI,MAAM,CAAA,2CAAA,CAAA;AAG5C,EAAA,KAAA,MAAW,MAAM,YAAA,EAAc;AAC7B,IAAA,MAAM,SAAA,GACJ,GAAG,CAAA,CAAE,IAAA,KAAS,SACV,CAAA,SAAA,EAAY,EAAA,CAAG,IAAI,EAAA,CAAG,CAAA,GAAI,EAAE,CAAA,KAAA,EAAQ,EAAA,CAAG,IAAI,EAAE,CAAA,kBAAA,EAAqB,WAAW,EAAA,CAAG,CAAA,CAAE,IAAI,CAAC,CAAA,OAAA,CAAA,GACvF,EAAA;AACN,IAAA,CAAA,IACE,CAAA,YAAA,EACY,GAAG,CAAC,CAAA,KAAA,EAAQ,GAAG,CAAC,CAAA,SAAA,EAAY,EAAA,CAAG,CAAC,CAAA,UAAA,EAAa,EAAA,CAAG,CAAC,CAAA,mHAAA,EACjD,EAAA,CAAG,CAAC,CAAA,KAAA,EAAQ,EAAA,CAAG,CAAC,CAAA,SAAA,EAAY,EAAA,CAAG,CAAC,CAAA,UAAA,EAAa,OAAO,CAAA,mCAAA,EACpD,GAAG,CAAC,CAAA,KAAA,EAAQ,GAAG,CAAA,GAAI,OAAA,GAAU,EAAE,CAAA,SAAA,EAAY,EAAA,CAAG,CAAC,CAAA,uCAAA,EAC/C,EAAA,CAAG,CAAA,GAAI,EAAE,CAAA,KAAA,EAAQ,EAAA,CAAG,CAAA,GAAI,EAAE,CAAA,kBAAA,EAAqB,UAAA,CAAW,GAAG,CAAA,CAAE,KAAK,CAAC,CAAA,OAAA,CAAA,GACjF,SAAA,GACA,CAAA,IAAA,CAAA;AAAA,EACJ;AAGA,EAAA,KAAA,MAAW,KAAK,KAAA,EAAO;AACrB,IAAA,MAAM,CAAA,GAAI,KAAA,CAAM,GAAA,CAAI,CAAA,CAAE,IAAI,CAAA;AAC1B,IAAA,MAAM,CAAA,GAAI,KAAA,CAAM,GAAA,CAAI,CAAA,CAAE,EAAE,CAAA;AACxB,IAAA,IAAI,CAAC,CAAA,IAAK,CAAC,CAAA,EAAG;AACd,IAAA,MAAM,CAAA,GAAI,KAAA,CAAM,CAAA,EAAG,CAAC,CAAA;AACpB,IAAA,MAAM,EAAA,GAAK,MAAM,CAAA,CAAE,IAAA,IAAQ,OAAO,CAAA,IAAK,KAAA,CAAM,OAAO,CAAA,IAAK;AAAA,MACvD,MAAA,EAAQ,SAAA;AAAA,MACR,EAAA,EAAI,GAAA;AAAA,MACJ,IAAA,EAAM,EAAA;AAAA,MACN,MAAA,EAAQ,QAAA;AAAA,MACR,GAAA,EAAK;AAAA,KACP;AACA,IAAA,CAAA,IACE,CAAA,YAAA,EAAe,EAAE,CAAC,CAAA,sBAAA,EAAyB,GAAG,MAAM,CAAA,gBAAA,EAAmB,EAAA,CAAG,EAAE,CAAA,oBAAA,EAAuB,EAAA,CAAG,IAAI,CAAA,mBAAA,EAAsB,EAAA,CAAG,MAAM,CAAA,IAAA,CAAA,GACzI,QAAA,CAAS,GAAG,CAAA,CAAE,KAAA,EAAO,EAAA,CAAG,GAAG,CAAA,GAC3B,CAAA,IAAA,CAAA;AAAA,EACJ;AAGA,EAAA,KAAA,MAAW,MAAM,QAAA,EAAU;AACzB,IAAA,MAAM,CAAA,GAAI,KAAA,CAAM,GAAA,CAAI,EAAA,CAAG,EAAE,CAAA;AACzB,IAAA,IAAI,MAAM,MAAA,EAAW;AACrB,IAAA,MAAM,EAAA,GAAK,UAAA,CAAW,EAAA,CAAG,IAAI,CAAA;AAC7B,IAAA,MAAM,EAAA,GAAK,SAAA,CAAU,EAAA,CAAG,IAAA,EAAM,CAAA,CAAE,CAAA,GAAI,EAAA,EAAI,CAAA,CAAE,CAAA,GAAI,EAAA,EAAI,EAAA,CAAG,MAAM,CAAA;AAC3D,IAAA,MAAM,EAAA,GAAK,GAAG,MAAA,GAAS,CAAA,GAAI,EAAE,CAAA,GAAI,EAAA,GAAK,EAAE,CAAA,GAAI,EAAA;AAC5C,IAAA,MAAM,IAAA,GAAO,GAAG,QAAA,IAAY,CAAA;AAC5B,IAAA,MAAM,WACJ,EAAA,CAAG,IAAA,KAAS,SACR,CAAA,SAAA,EAAY,EAAE,QAAQ,CAAA,CAAE,CAAA,GAAI,EAAE,CAAA,yBAAA,EAA4B,GAAG,MAAM,CAAA,EAAA,EAAK,WAAW,EAAA,CAAG,IAAI,CAAC,CAAA,OAAA,CAAA,GAC3F,EAAA;AACN,IAAA,MAAM,YAAA,GACJ,IAAA,GAAO,CAAA,GAAA,CACF,MAAM;AACL,MAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,GAAA,CAAI,IAAA,EAAM,CAAC,CAAA;AAC9B,MAAA,IAAI,IAAA,GAAO,EAAA;AACX,MAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,KAAA,EAAO,CAAA,EAAA,EAAK;AAC9B,QAAA,IAAA,IAAQ,CAAA,SAAA,EAAY,CAAA,CAAE,CAAA,GAAI,EAAA,GAAK,IAAI,CAAC,CAAA,KAAA,EAAQ,CAAA,CAAE,CAAA,GAAI,CAAA,CAAE,CAAA,GAAI,EAAE,CAAA,oCAAA,EAAuC,GAAG,MAAM,CAAA,iBAAA,CAAA;AAAA,MAC5G;AACA,MAAA,OACE,QACA,IAAA,GACA,CAAA,SAAA,EAAY,EAAE,CAAA,GAAI,EAAA,GAAK,QAAQ,CAAA,GAAI,CAAC,QAAQ,CAAA,CAAE,CAAA,GAAI,EAAE,CAAA,GAAI,CAAC,4BAA4B,EAAA,CAAG,MAAM,SAAM,IAAI,CAAA,WAAA,CAAA;AAAA,IAG5G,IAAG,GACH,EAAA;AACN,IAAA,CAAA,IACE,CAAA,mCAAA,EACY,CAAA,CAAE,CAAC,CAAA,KAAA,EAAQ,CAAA,CAAE,CAAC,CAAA,SAAA,EAAY,CAAA,CAAE,CAAC,CAAA,UAAA,EAAa,CAAA,CAAE,CAAC,kBAAkB,EAAA,CAAG,IAAI,CAAA,UAAA,EAAa,EAAA,CAAG,MAAM,CAAA,+BAAA,EAC5F,EAAE,CAAC,CAAA,KAAA,EAAQ,CAAA,CAAE,CAAC,CAAA,oBAAA,EAAuB,CAAA,CAAE,CAAC,CAAA,eAAA,EAAkB,EAAA,CAAG,MAAM,CAAA,GAAA,CAAA,GAC/E,EAAA,GACA,CAAA,SAAA,EAAY,EAAE,CAAA,KAAA,EAAQ,CAAA,CAAE,CAAA,IAAK,EAAA,CAAG,IAAA,KAAS,MAAA,GAAY,KAAK,EAAA,CAAG,CAAA,yBAAA,EAA4B,EAAA,CAAG,IAAI,CAAA,yBAAA,EAA4B,UAAA,CAAW,GAAG,KAAK,CAAC,CAAA,OAAA,CAAA,GAChJ,QAAA,GACA,YAAA,GACA,CAAA,IAAA,CAAA;AAAA,EACJ;AAEA,EAAA,CAAA,IAAK,CAAA,MAAA,CAAA;AACL,EAAA,OAAO,YAAA;AAAA,IACL;AAAA,MACE,GAAA,EAAK,SAAA;AAAA,MACL,KAAA,EAAO,SAAA;AAAA,MACP,GAAI,KAAK,KAAA,KAAU,MAAA,GAAY,EAAE,KAAA,EAAO,IAAA,CAAK,KAAA,EAAM,GAAI,EAAC;AAAA,MACxD,GAAI,KAAK,WAAA,KAAgB,MAAA,GAAY,EAAE,IAAA,EAAM,IAAA,CAAK,WAAA,EAAY,GAAI;AAAC,KACrE;AAAA,IACA;AAAA,GACF;AACF;;;AC1IA,IAAM,aAAA,GAAgB;AAAA,EACpB,MAAA,EAAQ,SAAA;AAAA,EACR,EAAA,EAAI,GAAA;AAAA,EACJ,IAAA,EAAM,EAAA;AAAA,EACN,MAAA,EAAQ,QAAA;AAAA,EACR,GAAA,EAAK;AACP,CAAA;AAEA,SAAS,WAAW,IAAA,EAAoB;AACtC,EAAA,MAAM,MAAA,GAAS,IAAA,CAAK,MAAA,IAAU,EAAC;AAC/B,EAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,KAAA,IAAS,EAAC;AAC7B,EAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,KAAA,IAAS,EAAC;AAC7B,EAAA,MAAM,KAAA,GAAQ,GAAA;AACd,EAAA,MAAM,KAAA,GAAQ,EAAA;AACd,EAAA,MAAM,IAAA,GAAO,EAAA;AACb,EAAA,MAAM,IAAA,GAAO,EAAA;AACb,EAAA,MAAM,IAAA,GAAO,EAAA;AACb,EAAA,MAAM,MAAA,GAAS,EAAA;AACf,EAAA,MAAM,MAAA,GAAS,EAAA;AACf,EAAA,MAAM,OAAO,IAAA,CAAK,GAAA;AAAA,IAChB,CAAA;AAAA,IACA,GAAG,KAAA,CAAM,GAAA,CAAI,CAAC,CAAA,KAAA,CAAO,CAAA,CAAE,GAAA,IAAO,CAAA,KAAA,CAAO,CAAA,CAAE,CAAA,IAAK,CAAA,IAAK,CAAA,CAAE,CAAA;AAAA,IACnD,GAAG,MAAA,CAAO,GAAA,CAAI,CAAC,CAAA,KAAM,EAAE,GAAA,IAAO,CAAA,CAAE,IAAA,IAAQ,CAAA,CAAA,GAAK,CAAC;AAAA,GAChD;AACA,EAAA,MAAM,OAAO,IAAA,CAAK,GAAA;AAAA,IAChB,CAAA;AAAA,IACA,GAAG,KAAA,CAAM,GAAA,CAAI,CAAC,CAAA,KAAM,CAAA,CAAE,OAAO,CAAC,CAAA;AAAA,IAC9B,GAAG,MAAA,CAAO,GAAA,CAAI,CAAC,CAAA,KAAM,EAAE,GAAA,IAAO,CAAA,CAAE,IAAA,IAAQ,CAAA,CAAA,GAAK,CAAC;AAAA,GAChD;AACA,EAAA,MAAM,MAAM,CAAC,CAAA,KAAsB,IAAA,GAAA,CAAQ,CAAA,GAAI,MAAM,KAAA,GAAQ,IAAA,CAAA;AAC7D,EAAA,MAAM,MAAM,CAAC,CAAA,KAAsB,MAAA,GAAA,CAAU,CAAA,GAAI,MAAM,KAAA,GAAQ,IAAA,CAAA;AAC/D,EAAA,MAAMK,QAAAA,GAAU,CAAC,CAAA,MAA6D;AAAA,IAC5E,CAAA,EAAG,GAAA,CAAI,CAAA,CAAE,GAAA,IAAO,CAAC,CAAA;AAAA,IACjB,CAAA,EAAG,GAAA,CAAI,CAAA,CAAE,GAAA,IAAO,CAAC,CAAA;AAAA,IACjB,CAAA,EAAA,CAAI,EAAE,CAAA,IAAK,CAAA,IAAK,UAAU,CAAA,CAAE,CAAA,IAAK,KAAK,CAAA,IAAK,IAAA;AAAA,IAC3C,CAAA,EAAG;AAAA,GACL,CAAA;AACA,EAAA,MAAM,SAAA,GAAY,CAAC,CAAA,MAA8D;AAAA,IAC/E,CAAA,EAAG,GAAA,CAAI,CAAA,CAAE,GAAG,CAAA,GAAI,EAAA;AAAA,IAChB,CAAA,EAAG,GAAA,CAAI,CAAA,CAAE,GAAG,CAAA,GAAI,EAAA;AAAA,IAChB,CAAA,EAAA,CAAI,EAAE,IAAA,IAAQ,CAAA,IAAK,UAAU,CAAA,CAAE,IAAA,IAAQ,CAAA,IAAK,CAAA,IAAK,IAAA,GAAO,EAAA;AAAA,IACxD,CAAA,EAAA,CAAI,EAAE,IAAA,IAAQ,CAAA,IAAK,UAAU,CAAA,CAAE,IAAA,IAAQ,CAAA,IAAK,CAAA,IAAK,IAAA,GAAO;AAAA,GAC1D,CAAA;AACA,EAAA,MAAM,IAAA,GAAO,IAAI,GAAA,CAAI,KAAA,CAAM,GAAA,CAAI,CAAC,CAAA,KAAM,CAAC,CAAA,CAAE,EAAA,EAAI,CAAC,CAAC,CAAC,CAAA;AAChD,EAAA,MAAM,QAAQ,IAAA,GAAO,CAAA,GAAI,IAAA,GAAO,KAAA,GAAA,CAAS,OAAO,CAAA,IAAK,IAAA;AACrD,EAAA,MAAM,SAAS,MAAA,GAAS,IAAA,GAAO,KAAA,GAAA,CAAS,IAAA,GAAO,KAAK,IAAA,GAAO,MAAA;AAG3D,EAAA,MAAM,YAAA,GAAe,CAAC,GAAG,MAAM,CAAA,CAAE,IAAA;AAAA,IAC/B,CAAC,CAAA,EAAG,CAAA,KAAA,CAAO,CAAA,CAAE,IAAA,IAAQ,CAAA,KAAM,CAAA,CAAE,IAAA,IAAQ,CAAA,CAAA,GAAA,CAAM,CAAA,CAAE,IAAA,IAAQ,CAAA,KAAM,EAAE,IAAA,IAAQ,CAAA;AAAA,GACvE;AAEA,EAAA,IAAI,CAAA,GAAI,CAAA,kBAAA,EAAqB,KAAK,CAAA,CAAA,EAAI,MAAM,CAAA,yCAAA,CAAA;AAE5C,EAAA,KAAA,MAAW,KAAK,YAAA,EAAc;AAC5B,IAAA,MAAM,CAAA,GAAI,UAAU,CAAC,CAAA;AACrB,IAAA,MAAM,GAAA,GAAM,SAAA,CAAU,CAAA,CAAE,KAAA,EAAO,SAAS,CAAA;AAKxC,IAAA,MAAM,MAAA,GAAS,EAAA,GAAK,CAAA,CAAE,KAAA,CAAM,MAAA,GAAS,GAAA;AACrC,IAAA,MAAM,eAAe,CAAA,CAAE,IAAA,IAAQ,MAAM,CAAA,IAAA,CAAM,CAAA,CAAE,QAAQ,CAAA,KAAM,CAAA;AAC3D,IAAA,MAAM,OAAO,CAAA,SAAA,EAAY,CAAA,CAAE,CAAC,CAAA,KAAA,EAAQ,EAAE,CAAC,CAAA,SAAA,EAAY,CAAA,CAAE,CAAC,aAAa,CAAA,CAAE,CAAC,CAAA,gBAAA,EAAmB,GAAG,iCAAiC,GAAG,CAAA,mEAAA,CAAA;AAChI,IAAA,MAAM,KAAA,GAAQ,WAAA,GACV,CAAA,SAAA,EAAY,CAAA,CAAE,CAAA,GAAA,CAAK,CAAA,CAAE,CAAA,GAAI,MAAA,IAAU,CAAC,CAAA,KAAA,EAAQ,CAAA,CAAE,CAAA,GAAI,CAAC,CAAA,SAAA,EAAY,MAAM,CAAA,4BAAA,EAA+B,GAAG,CAAA,YAAA,EAC3F,CAAA,CAAE,CAAA,GAAI,CAAA,CAAE,CAAA,GAAI,CAAC,CAAA,KAAA,EAAQ,CAAA,CAAE,CAAA,GAAI,EAAE,CAAA,qDAAA,EAAwD,UAAA,CAAW,EAAE,KAAK,CAAC,CAAA,OAAA,CAAA,GACpH,CAAA,UAAA,EAAa,CAAA,CAAE,CAAC,CAAA,CAAA,EAAI,CAAA,CAAE,CAAA,GAAI,EAAE,CAAA,EAAA,EAAK,CAAA,CAAE,CAAC,CAAA,CAAA,EAAI,CAAA,CAAE,CAAA,GAAI,EAAE,CAAA,sBAAA,EAAyB,MAAA,GAAS,EAAE,CAAA,cAAA,EAAiB,GAAG,CAAA,YAAA,EAC5F,CAAA,CAAE,CAAA,GAAI,SAAS,CAAC,CAAA,KAAA,EAAQ,CAAA,CAAE,CAAA,GAAI,EAAE,CAAA,qDAAA,EAAwD,UAAA,CAAW,CAAA,CAAE,KAAK,CAAC,CAAA,OAAA,CAAA;AAC3H,IAAA,CAAA,IAAK,CAAA,GAAA,EAAM,IAAI,CAAA,EAAG,KAAK,CAAA,IAAA,CAAA;AAAA,EACzB;AAEA,EAAA,KAAA,MAAW,KAAK,KAAA,EAAO;AACrB,IAAA,MAAM,CAAA,GAAI,IAAA,CAAK,GAAA,CAAI,CAAA,CAAE,IAAI,CAAA;AACzB,IAAA,MAAM,CAAA,GAAI,IAAA,CAAK,GAAA,CAAI,CAAA,CAAE,EAAE,CAAA;AACvB,IAAA,IAAI,CAAC,CAAA,IAAK,CAAC,CAAA,EAAG;AACd,IAAA,MAAM,IAAI,KAAA,CAAMA,QAAAA,CAAQ,CAAC,CAAA,EAAGA,QAAAA,CAAQ,CAAC,CAAC,CAAA;AACtC,IAAA,MAAM,EAAA,GAAK,MAAM,CAAA,CAAE,IAAA,IAAQ,OAAO,CAAA,IAAK,KAAA,CAAM,OAAO,CAAA,IAAK,aAAA;AACzD,IAAA,CAAA,IACE,CAAA,YAAA,EAAe,EAAE,CAAC,CAAA,sBAAA,EAAyB,GAAG,MAAM,CAAA,gBAAA,EAAmB,EAAA,CAAG,EAAE,CAAA,oBAAA,EAAuB,EAAA,CAAG,IAAI,CAAA,mBAAA,EAAsB,EAAA,CAAG,MAAM,CAAA,IAAA,CAAA,GACzI,QAAA,CAAS,GAAG,CAAA,CAAE,KAAA,EAAO,EAAA,CAAG,GAAG,CAAA,GAC3B,CAAA,IAAA,CAAA;AAAA,EACJ;AAEA,EAAA,KAAA,MAAW,KAAK,KAAA,EAAO;AACrB,IAAA,MAAM,CAAA,GAAIA,SAAQ,CAAC,CAAA;AACnB,IAAA,MAAM,EAAA,GAAK,UAAA,CAAW,CAAA,CAAE,IAAI,CAAA;AAC5B,IAAA,MAAM,EAAA,GAAK,SAAA,CAAU,CAAA,CAAE,IAAA,EAAM,CAAA,CAAE,CAAA,GAAI,EAAA,EAAI,CAAA,CAAE,CAAA,GAAI,EAAA,EAAI,EAAA,CAAG,MAAM,CAAA;AAC1D,IAAA,MAAM,EAAA,GAAK,GAAG,MAAA,GAAS,CAAA,GAAI,EAAE,CAAA,GAAI,EAAA,GAAK,EAAE,CAAA,GAAI,EAAA;AAC5C,IAAA,MAAM,IAAA,GACJ,GAAG,MAAA,KAAW,CAAA,IAAK,EAAE,IAAA,KAAS,MAAA,GAC1B,CAAA,SAAA,EAAY,CAAA,CAAE,CAAA,GAAI,EAAE,QAAQ,CAAA,CAAE,CAAA,GAAI,EAAE,CAAA,yBAAA,EAA4B,EAAA,CAAG,MAAM,KAAK,UAAA,CAAW,CAAA,CAAE,IAAI,CAAC,CAAA,OAAA,CAAA,GAChG,EAAA;AACN,IAAA,MAAM,IAAA,GACJ,EAAE,IAAA,KAAS,MAAA,GACP,YAAY,EAAE,CAAA,KAAA,EAAQ,CAAA,CAAE,CAAA,IAAK,EAAA,CAAG,MAAA,GAAS,IAAI,EAAA,GAAK,EAAA,CAAG,4BAA4B,EAAA,CAAG,MAAM,KAAK,UAAA,CAAW,CAAA,CAAE,IAAI,CAAC,CAAA,OAAA,CAAA,GACjH,EAAA;AACN,IAAA,CAAA,IACE,CAAA,mCAAA,EACY,CAAA,CAAE,CAAC,CAAA,KAAA,EAAQ,CAAA,CAAE,CAAC,CAAA,SAAA,EAAY,CAAA,CAAE,CAAC,CAAA,UAAA,EAAa,CAAA,CAAE,CAAC,kBAAkB,EAAA,CAAG,IAAI,CAAA,UAAA,EAAa,EAAA,CAAG,MAAM,CAAA,+BAAA,EAC5F,EAAE,CAAC,CAAA,KAAA,EAAQ,CAAA,CAAE,CAAC,CAAA,oBAAA,EAAuB,CAAA,CAAE,CAAC,CAAA,eAAA,EAAkB,EAAA,CAAG,MAAM,CAAA,GAAA,CAAA,GAC/E,EAAA,GACA,IAAA,GACA,YAAY,EAAE,CAAA,KAAA,EAAQ,CAAA,CAAE,CAAA,IAAK,EAAA,CAAG,MAAA,GAAS,IAAI,EAAA,GAAK,EAAA,CAAG,CAAA,yBAAA,EAA4B,EAAA,CAAG,IAAI,CAAA,EAAA,EAAK,WAAW,CAAA,CAAE,IAAI,CAAC,CAAA,OAAA,CAAA,GAC/G,IAAA,GACA,CAAA,IAAA,CAAA;AAAA,EACJ;AAEA,EAAA,CAAA,IAAK,CAAA,MAAA,CAAA;AACL,EAAA,OAAO,CAAA;AACT;AAEA,SAAS,cAAc,IAAA,EAAoB;AACzC,EAAA,MAAM,MAAA,GAAS,IAAA,CAAK,MAAA,IAAU,EAAC;AAC/B,EAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,KAAA,IAAS,EAAC;AAC7B,EAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,KAAA,IAAS,EAAC;AAC7B,EAAA,MAAM,UAAoB,MAAA,CAAO,GAAA;AAAA,IAAI,CAAC,CAAA,EAAG,CAAA,KACvC,KAAA,CAAM,MAAA,CAAO,CAAC,CAAA,KAAA,CAAO,CAAA,CAAE,KAAA,IAAS,CAAA,MAAO,CAAC;AAAA,GAC1C;AACA,EAAA,MAAM,QAAA,GAAW,EAAA;AACjB,EAAA,MAAM,MAAA,GAAS,IAAA,CAAK,WAAA,KAAgB,MAAA,GAAY,EAAA,GAAK,EAAA;AACrD,EAAA,MAAM,MAAA,GAAS,GAAA;AACf,EAAA,MAAM,QAAA,GAAW,EAAA;AACjB,EAAA,MAAM,QAAA,GAAW,EAAA;AACjB,EAAA,MAAM,OAAA,GAAU,EAAA;AAChB,EAAA,MAAM,KAAA,GAAQ,GAAA;AACd,EAAA,MAAM,KAAA,GAAQ,EAAA;AACd,EAAA,MAAM,OAAA,GAAU,EAAA;AAChB,EAAA,MAAM,OAAO,CAAC,CAAA,KAAsB,CAAA,GAAI,KAAA,GAAA,CAAS,IAAI,CAAA,IAAK,OAAA;AAC1D,EAAA,MAAM,WAAW,IAAA,CAAK,GAAA,CAAI,GAAA,EAAK,GAAG,QAAQ,GAAA,CAAI,CAAC,CAAA,KAAM,IAAA,CAAK,KAAK,GAAA,CAAI,CAAA,CAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAA;AACjF,EAAA,MAAM,UAAA,GAAa,WAAW,QAAA,GAAW,CAAA;AACzC,EAAA,MAAM,KAAA,GAAQ,QAAQ,QAAA,GAAW,CAAA;AACjC,EAAA,MAAM,SAAS,QAAA,GAAW,EAAA;AAC1B,EAAA,MAAM,WAAW,MAAA,GAAS,MAAA;AAC1B,EAAA,MAAM,KAAA,GAAQ,QAAA,GAAW,UAAA,GAAa,EAAA,GAAK,QAAA;AAC3C,EAAA,MAAM,MAAM,QAAA,GAAW,MAAA;AACvB,EAAA,MAAM,KAAA,GAAQ,CAAC,CAAA,KAAsB,GAAA,GAAM,KAAK,KAAA,GAAQ,OAAA,CAAA;AACxD,EAAA,MAAM,MAAA,GAAS,KAAA,CAAM,MAAA,CAAO,MAAM,IAAI,OAAA,GAAU,QAAA;AAEhD,EAAA,MAAM,KAAA,uBAAY,GAAA,EAA4D;AAC9E,EAAA,OAAA,CAAQ,OAAA,CAAQ,CAAC,GAAA,EAAK,CAAA,KAAM;AAC1B,IAAA,MAAM,SAAS,QAAA,GAAA,CAAY,UAAA,GAAa,IAAA,CAAK,GAAA,CAAI,MAAM,CAAA,IAAK,CAAA;AAC5D,IAAA,GAAA,CAAI,OAAA,CAAQ,CAAC,CAAA,EAAG,CAAA,KAAM;AACpB,MAAA,KAAA,CAAM,GAAA,CAAI,EAAE,EAAA,EAAI;AAAA,QACd,CAAA,EAAG,MAAA,GAAS,CAAA,IAAK,KAAA,GAAQ,OAAA,CAAA;AAAA,QACzB,CAAA,EAAG,KAAA,CAAM,CAAC,CAAA,GAAI,QAAA;AAAA,QACd,CAAA,EAAG,KAAA;AAAA,QACH,CAAA,EAAG;AAAA,OACJ,CAAA;AAAA,IACH,CAAC,CAAA;AAAA,EACH,CAAC,CAAA;AAED,EAAA,IAAI,IACF,CAAA,kBAAA,EAAqB,KAAK,CAAA,CAAA,EAAI,MAAM,4DACxB,QAAQ,CAAA,KAAA,EAAQ,QAAQ,CAAA,SAAA,EAAY,QAAQ,QAAA,GAAW,CAAC,CAAA,UAAA,EAAa,MAAA,GAAS,WAAW,CAAC,CAAA,2DAAA,CAAA;AACxG,EAAA,IAAI,IAAA,CAAK,gBAAgB,MAAA,EAAW;AAClC,IAAA,CAAA,IAAK,CAAA,SAAA,EAAY,QAAA,GAAW,EAAE,CAAA,KAAA,EAAQ,QAAA,GAAW,EAAE,CAAA,mCAAA,EAAsC,UAAA,CAAW,IAAA,CAAK,WAAW,CAAC,CAAA,OAAA,CAAA;AAAA,EACvH;AACA,EAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,MAAA,CAAO,QAAQ,CAAA,EAAA,EAAK;AACtC,IAAA,MAAM,CAAA,GAAI,OAAO,CAAC,CAAA;AAClB,IAAA,IAAI,MAAM,MAAA,EAAW;AACrB,IAAA,CAAA,IACE,CAAA,YAAA,EACY,MAAM,CAAA,KAAA,EAAQ,KAAA,CAAM,CAAC,CAAC,CAAA,SAAA,EAAY,SAAS,UAAU,CAAA,UAAA,EAAa,KAAK,CAAA,mDAAA,EACvE,MAAM,QAAQ,KAAA,CAAM,CAAC,CAAC,CAAA,SAAA,EAAY,MAAM,aAAa,KAAK,CAAA,kCAAA,EAC1D,SAAS,MAAA,GAAS,CAAC,QAAQ,KAAA,CAAM,CAAC,CAAC,CAAA,oBAAA,EAAuB,KAAK,8BAC/D,MAAA,GAAS,EAAE,QAAQ,KAAA,CAAM,CAAC,IAAI,KAAA,GAAQ,CAAA,GAAI,CAAC,CAAA,sBAAA,EAAyB,UAAA,CAAW,CAAA,CAAE,KAAK,CAAC,CAAA,WAAA,CAAA;AAAA,EAEvG;AAEA,EAAA,KAAA,MAAW,KAAK,KAAA,EAAO;AACrB,IAAA,MAAM,CAAA,GAAI,KAAA,CAAM,GAAA,CAAI,CAAA,CAAE,IAAI,CAAA;AAC1B,IAAA,MAAM,CAAA,GAAI,KAAA,CAAM,GAAA,CAAI,CAAA,CAAE,EAAE,CAAA;AACxB,IAAA,IAAI,CAAC,CAAA,IAAK,CAAC,CAAA,EAAG;AACd,IAAA,MAAM,CAAA,GAAI,KAAA,CAAM,CAAA,EAAG,CAAC,CAAA;AACpB,IAAA,MAAM,EAAA,GAAK,MAAM,CAAA,CAAE,IAAA,IAAQ,OAAO,CAAA,IAAK,KAAA,CAAM,OAAO,CAAA,IAAK,aAAA;AACzD,IAAA,CAAA,IACE,CAAA,YAAA,EAAe,EAAE,CAAC,CAAA,sBAAA,EAAyB,GAAG,MAAM,CAAA,gBAAA,EAAmB,EAAA,CAAG,EAAE,CAAA,oBAAA,EAAuB,EAAA,CAAG,IAAI,CAAA,mBAAA,EAAsB,EAAA,CAAG,MAAM,CAAA,IAAA,CAAA,GACzI,QAAA,CAAS,GAAG,CAAA,CAAE,KAAA,EAAO,EAAA,CAAG,GAAG,CAAA,GAC3B,CAAA,IAAA,CAAA;AAAA,EACJ;AAEA,EAAA,KAAA,MAAW,KAAK,KAAA,EAAO;AACrB,IAAA,MAAM,CAAA,GAAI,KAAA,CAAM,GAAA,CAAI,CAAA,CAAE,EAAE,CAAA;AACxB,IAAA,IAAI,MAAM,MAAA,EAAW;AACrB,IAAA,MAAM,EAAA,GAAK,UAAA,CAAW,CAAA,CAAE,IAAI,CAAA;AAC5B,IAAA,MAAM,EAAA,GAAK,SAAA,CAAU,CAAA,CAAE,IAAA,EAAM,CAAA,CAAE,CAAA,GAAI,EAAA,EAAI,CAAA,CAAE,CAAA,GAAI,EAAA,EAAI,EAAA,CAAG,MAAM,CAAA;AAC1D,IAAA,MAAM,EAAA,GAAK,GAAG,MAAA,GAAS,CAAA,GAAI,EAAE,CAAA,GAAI,EAAA,GAAK,EAAE,CAAA,GAAI,EAAA;AAC5C,IAAA,MAAM,OACJ,CAAA,CAAE,IAAA,KAAS,SACP,CAAA,SAAA,EAAY,EAAE,QAAQ,CAAA,CAAE,CAAA,GAAI,EAAE,CAAA,yBAAA,EAA4B,GAAG,MAAM,CAAA,EAAA,EAAK,WAAW,CAAA,CAAE,IAAI,CAAC,CAAA,OAAA,CAAA,GAC1F,EAAA;AACN,IAAA,CAAA,IACE,CAAA,mCAAA,EACY,EAAE,CAAC,CAAA,KAAA,EAAQ,EAAE,CAAC,CAAA,SAAA,EAAY,CAAA,CAAE,CAAC,CAAA,UAAA,EAAa,CAAA,CAAE,CAAC,CAAA,eAAA,EAAkB,EAAA,CAAG,IAAI,CAAA,UAAA,EAAa,EAAA,CAAG,MAAM,kCAC5F,CAAA,CAAE,CAAC,CAAA,KAAA,EAAQ,CAAA,CAAE,CAAC,CAAA,oBAAA,EAAuB,EAAE,CAAC,CAAA,eAAA,EAAkB,EAAA,CAAG,MAAM,CAAA,GAAA,CAAA,GAC/E,EAAA,GACA,YAAY,EAAE,CAAA,KAAA,EAAQ,CAAA,CAAE,CAAA,IAAK,CAAA,CAAE,IAAA,KAAS,SAAY,EAAA,GAAK,EAAA,CAAG,CAAA,yBAAA,EAA4B,EAAA,CAAG,IAAI,CAAA,EAAA,EAAK,WAAW,CAAA,CAAE,IAAI,CAAC,CAAA,OAAA,CAAA,GACtH,IAAA,GACA,CAAA,IAAA,CAAA;AAAA,EACJ;AAEA,EAAA,CAAA,IAAK,CAAA,MAAA,CAAA;AACL,EAAA,OAAO,CAAA;AACT;AAEA,SAAS,gBAAA,CAAiB,MAAY,KAAA,EAA0B;AAC9D,EAAA,MAAM,GAAA,GAAM,IAAA,CAAK,MAAA,KAAW,MAAA,IAAa,IAAA,CAAK,MAAA,CAAO,MAAA,GAAS,CAAA,GAAI,aAAA,CAAc,IAAI,CAAA,GAAI,UAAA,CAAW,IAAI,CAAA;AACvG,EAAA,MAAM,IAAA,GAA2C;AAAA,IAC/C,KAAK,KAAA,CAAM,GAAA;AAAA,IACX,GAAI,MAAM,QAAA,KAAa,MAAA,GAAY,EAAE,QAAA,EAAU,KAAA,CAAM,QAAA,EAAS,GAAI,EAAC;AAAA,IACnE,GAAI,MAAM,KAAA,KAAU,MAAA,GAAY,EAAE,KAAA,EAAO,KAAA,CAAM,KAAA,EAAM,GAAI,EAAC;AAAA,IAC1D,GAAI,KAAK,KAAA,KAAU,MAAA,GAAY,EAAE,KAAA,EAAO,IAAA,CAAK,KAAA,EAAM,GAAI,EAAC;AAAA,IACxD,GAAI,KAAK,WAAA,KAAgB,MAAA,GAAY,EAAE,IAAA,EAAM,IAAA,CAAK,WAAA,EAAY,GAAI;AAAC,GACrE;AACA,EAAA,OAAO,YAAA,CAAa,MAAM,GAAG,CAAA;AAC/B;AAGO,SAAS,YAAY,IAAA,EAAqC;AAC/D,EAAA,OAAO,iBAAiB,IAAA,EAAM,EAAE,KAAK,MAAA,EAAQ,KAAA,EAAO,WAAW,CAAA;AACjE;AAEO,SAAS,YAAY,IAAA,EAAqC;AAC/D,EAAA,OAAO,iBAAiB,IAAA,EAAM,EAAE,KAAK,OAAA,EAAS,KAAA,EAAO,WAAW,CAAA;AAClE;AAEO,SAAS,YAAY,IAAA,EAAqC;AAC/D,EAAA,OAAO,iBAAiB,IAAA,EAAM,EAAE,KAAK,OAAA,EAAS,KAAA,EAAO,WAAW,CAAA;AAClE;AAEO,SAAS,UAAU,IAAA,EAAmC;AAC3D,EAAA,OAAO,iBAAiB,IAAA,EAAM,EAAE,KAAK,KAAA,EAAO,KAAA,EAAO,WAAW,CAAA;AAChE;AAEO,SAAS,cAAc,IAAA,EAAuC;AACnE,EAAA,OAAO,iBAAiB,IAAA,EAAM,EAAE,KAAK,OAAA,EAAS,KAAA,EAAO,WAAW,CAAA;AAClE;;;AC1OA,SAAS,QAAQ,IAAA,EAAmC;AAClD,EAAA,QAAA,CAAS,IAAA,IAAQ,WAAA,EAAa,WAAA,EAAY;AAAG,IAC3C,KAAK,QAAA;AAAA,IACL,KAAK,MAAA;AACH,MAAA,OAAO,EAAE,QAAQ,SAAA,EAAW,IAAA,EAAM,WAAW,IAAA,EAAM,MAAA,EAAQ,OAAO,IAAA,EAAK;AAAA,IACzE,KAAK,WAAA;AACH,MAAA,OAAO,EAAE,MAAA,EAAQ,SAAA,EAAW,IAAA,EAAM,MAAA,EAAQ,MAAM,SAAA,EAAW,IAAA,EAAM,KAAA,EAAO,MAAA,EAAQ,WAAA,EAAY;AAAA,IAC9F,KAAK,UAAA;AAAA,IACL,KAAK,SAAA;AAAA,IACL,KAAK,MAAA;AACH,MAAA,OAAO,EAAE,MAAA,EAAQ,SAAA,EAAW,IAAA,EAAM,SAAA,EAAW,MAAM,SAAA,EAAU;AAAA,IAC/D,KAAK,YAAA;AAAA,IACL,KAAK,SAAA;AAAA,IACL,KAAK,OAAA;AACH,MAAA,OAAO,EAAE,MAAA,EAAQ,SAAA,EAAW,IAAA,EAAM,SAAA,EAAW,MAAM,SAAA,EAAU;AAAA,IAC/D,KAAK,SAAA;AAAA,IACL,KAAK,SAAA;AAAA,IACL,KAAK,WAAA;AAAA,IACL,KAAK,QAAA;AACH,MAAA,OAAO,EAAE,MAAA,EAAQ,SAAA,EAAW,IAAA,EAAM,SAAA,EAAW,MAAM,SAAA,EAAU;AAAA,IAC/D,KAAK,YAAA;AAAA,IACL,KAAK,MAAA;AAAA,IACL,KAAK,KAAA;AACH,MAAA,OAAO,EAAE,MAAA,EAAQ,SAAA,EAAW,IAAA,EAAM,SAAA,EAAW,MAAM,SAAA,EAAU;AAAA,IAC/D,KAAK,QAAA;AAAA,IACL,KAAK,UAAA;AACH,MAAA,OAAO,EAAE,MAAA,EAAQ,SAAA,EAAW,IAAA,EAAM,SAAA,EAAW,MAAM,SAAA,EAAU;AAAA,IAC/D,KAAK,YAAA;AACH,MAAA,OAAO,EAAE,MAAA,EAAQ,SAAA,EAAW,IAAA,EAAM,SAAA,EAAW,MAAM,SAAA,EAAU;AAAA,IAC/D,KAAK,OAAA;AAAA,IACL,KAAK,QAAA;AACH,MAAA,OAAO,EAAE,MAAA,EAAQ,SAAA,EAAW,IAAA,EAAM,SAAA,EAAW,MAAM,SAAA,EAAU;AAAA,IAC/D,KAAK,IAAA;AAAA,IACL,KAAK,OAAA;AAAA,IACL,KAAK,UAAA;AACH,MAAA,OAAO,EAAE,MAAA,EAAQ,SAAA,EAAW,IAAA,EAAM,SAAA,EAAW,MAAM,SAAA,EAAU;AAAA,IAC/D,KAAK,OAAA;AACH,MAAA,OAAO,EAAE,MAAA,EAAQ,SAAA,EAAW,IAAA,EAAM,SAAA,EAAW,MAAM,SAAA,EAAU;AAAA,IAC/D,KAAK,OAAA;AAAA,IACL,KAAK,KAAA;AAAA,IACL,KAAK,QAAA;AACH,MAAA,OAAO,EAAE,MAAA,EAAQ,SAAA,EAAW,IAAA,EAAM,SAAA,EAAW,MAAM,SAAA,EAAU;AAAA,IAC/D,KAAK,OAAA;AAAA,IACL,KAAK,aAAA;AACH,MAAA,OAAO,EAAE,MAAA,EAAQ,SAAA,EAAW,IAAA,EAAM,SAAA,EAAW,MAAM,SAAA,EAAU;AAAA,IAC/D,KAAK,MAAA;AACH,MAAA,OAAO,EAAE,MAAA,EAAQ,SAAA,EAAW,IAAA,EAAM,SAAA,EAAW,MAAM,SAAA,EAAU;AAAA,IAC/D,KAAK,UAAA;AAAA,IACL,KAAK,SAAA;AAAA,IACL,KAAK,QAAA;AAAA,IACL,KAAK,KAAA;AAAA,IACL,KAAK,YAAA;AACH,MAAA,OAAO,EAAE,QAAQ,SAAA,EAAW,IAAA,EAAM,WAAW,IAAA,EAAM,SAAA,EAAW,OAAO,IAAA,EAAK;AAAA,IAC5E;AACE,MAAA,OAAO,EAAE,MAAA,EAAQ,SAAA,EAAW,IAAA,EAAM,SAAA,EAAW,MAAM,SAAA,EAAU;AAAA;AAEnE;AASA,SAAS,OAAO,IAAA,EAAuC;AACrD,EAAA,QAAA,CAAS,IAAA,IAAQ,MAAA,EAAQ,WAAA,EAAY;AAAG,IACtC,KAAK,YAAA;AACH,MAAA,OAAO,EAAE,QAAQ,SAAA,EAAW,EAAA,EAAI,KAAK,IAAA,EAAM,KAAA,EAAO,QAAQ,MAAA,EAAO;AAAA,IACnE,KAAK,QAAA;AAAA,IACL,KAAK,OAAA;AAAA,IACL,KAAK,KAAA;AACH,MAAA,OAAO,EAAE,QAAQ,SAAA,EAAW,EAAA,EAAI,GAAG,IAAA,EAAM,EAAA,EAAI,QAAQ,QAAA,EAAS;AAAA,IAChE,KAAK,OAAA;AAAA,IACL,KAAK,QAAA;AAAA,IACL,KAAK,OAAA;AACH,MAAA,OAAO,EAAE,QAAQ,SAAA,EAAW,EAAA,EAAI,KAAK,IAAA,EAAM,KAAA,EAAO,QAAQ,OAAA,EAAQ;AAAA,IACpE;AACE,MAAA,OAAO,EAAE,QAAQ,SAAA,EAAW,EAAA,EAAI,KAAK,IAAA,EAAM,EAAA,EAAI,QAAQ,QAAA,EAAS;AAAA;AAEtE;AAEA,IAAM,WAAA,uBAAkB,GAAA,CAAI;AAAA,EAC1B,IAAA;AAAA,EACA,OAAA;AAAA,EACA,UAAA;AAAA,EACA,QAAA;AAAA,EACA,MAAA;AAAA,EACA,QAAA;AAAA,EACA,OAAA;AAAA,EACA,KAAA;AAAA,EACA,QAAA;AAAA,EACA,OAAA;AAAA,EACA,UAAA;AAAA,EACA,SAAA;AAAA,EACA,KAAA;AAAA,EACA,YAAA;AAAA,EACA;AACF,CAAC,CAAA;AACD,IAAM,WAAA,GAAsC;AAAA,EAC1C,QAAA,EAAU,IAAA;AAAA,EACV,KAAA,EAAO,IAAA;AAAA,EACP,GAAA,EAAK,OAAA;AAAA,EACL,MAAA,EAAQ,OAAA;AAAA,EACR,OAAA,EAAS,UAAA;AAAA,EACT,GAAA,EAAK,UAAA;AAAA,EACL,UAAA,EAAY;AACd,CAAA;AAOA,SAAS,kBAAA,CAAmB,MAAY,KAAA,EAA0B;AAChE,EAAA,MAAM,MAAA,GAAS,IAAA,CAAK,MAAA,IAAU,EAAC;AAC/B,EAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,KAAA,IAAS,EAAC;AAC7B,EAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,KAAA,IAAS,EAAC;AAC7B,EAAA,MAAM,KAAA,GAAQ,GAAA;AACd,EAAA,MAAM,KAAA,GAAQ,EAAA;AACd,EAAA,MAAM,IAAA,GAAO,EAAA;AACb,EAAA,MAAM,IAAA,GAAO,EAAA;AACb,EAAA,MAAM,IAAA,GAAO,EAAA;AACb,EAAA,MAAM,MAAA,GAAS,EAAA;AACf,EAAA,MAAM,MAAA,GAAS,EAAA;AACf,EAAA,MAAM,OAAO,IAAA,CAAK,GAAA;AAAA,IAChB,CAAA;AAAA,IACA,GAAG,KAAA,CAAM,GAAA,CAAI,CAAC,CAAA,KAAM,EAAE,GAAA,IAAA,CAAQ,CAAA,CAAE,CAAA,IAAK,CAAA,IAAK,CAAA,CAAE,CAAA;AAAA,IAC5C,GAAG,MAAA,CAAO,GAAA,CAAI,CAAC,CAAA,KAAM,EAAE,GAAA,IAAO,CAAA,CAAE,IAAA,IAAQ,CAAA,CAAA,GAAK,CAAC;AAAA,GAChD;AACA,EAAA,MAAM,OAAO,IAAA,CAAK,GAAA;AAAA,IAChB,CAAA;AAAA,IACA,GAAG,KAAA,CAAM,GAAA,CAAI,CAAC,CAAA,KAAM,EAAE,GAAG,CAAA;AAAA,IACzB,GAAG,MAAA,CAAO,GAAA,CAAI,CAAC,CAAA,KAAM,EAAE,GAAA,IAAO,CAAA,CAAE,IAAA,IAAQ,CAAA,CAAA,GAAK,CAAC;AAAA,GAChD;AACA,EAAA,MAAM,MAAM,CAAC,CAAA,KAAsB,IAAA,GAAA,CAAQ,CAAA,GAAI,MAAM,KAAA,GAAQ,IAAA,CAAA;AAC7D,EAAA,MAAM,MAAM,CAAC,CAAA,KAAsB,MAAA,GAAA,CAAU,CAAA,GAAI,MAAM,KAAA,GAAQ,IAAA,CAAA;AAC/D,EAAA,MAAMA,QAAAA,GAAU,CAAC,CAAA,MAA6D;AAAA,IAC5E,CAAA,EAAG,GAAA,CAAI,CAAA,CAAE,GAAG,CAAA;AAAA,IACZ,CAAA,EAAG,GAAA,CAAI,CAAA,CAAE,GAAG,CAAA;AAAA,IACZ,CAAA,EAAA,CAAI,EAAE,CAAA,IAAK,CAAA,IAAK,UAAU,CAAA,CAAE,CAAA,IAAK,KAAK,CAAA,IAAK,IAAA;AAAA,IAC3C,CAAA,EAAG;AAAA,GACL,CAAA;AACA,EAAA,MAAM,SAAA,GAAY,CAAC,CAAA,MAA8D;AAAA,IAC/E,CAAA,EAAG,GAAA,CAAI,CAAA,CAAE,GAAG,CAAA,GAAI,EAAA;AAAA,IAChB,CAAA,EAAG,GAAA,CAAI,CAAA,CAAE,GAAG,CAAA,GAAI,EAAA;AAAA,IAChB,CAAA,EAAA,CAAI,EAAE,IAAA,IAAQ,CAAA,IAAK,UAAU,CAAA,CAAE,IAAA,IAAQ,CAAA,IAAK,CAAA,IAAK,IAAA,GAAO,EAAA;AAAA,IACxD,CAAA,EAAA,CAAI,EAAE,IAAA,IAAQ,CAAA,IAAK,UAAU,CAAA,CAAE,IAAA,IAAQ,CAAA,IAAK,CAAA,IAAK,IAAA,GAAO;AAAA,GAC1D,CAAA;AACA,EAAA,MAAM,IAAA,GAAO,IAAI,GAAA,CAAI,KAAA,CAAM,GAAA,CAAI,CAAC,CAAA,KAAM,CAAC,CAAA,CAAE,EAAA,EAAI,CAAC,CAAC,CAAC,CAAA;AAChD,EAAA,MAAM,QAAQ,IAAA,GAAO,CAAA,GAAI,IAAA,GAAO,KAAA,GAAA,CAAS,OAAO,CAAA,IAAK,IAAA;AACrD,EAAA,MAAM,SAAS,MAAA,GAAS,IAAA,GAAO,KAAA,GAAA,CAAS,IAAA,GAAO,KAAK,IAAA,GAAO,MAAA;AAC3D,EAAA,MAAM,YAAA,GAAe,CAAC,GAAG,MAAM,CAAA,CAAE,IAAA;AAAA,IAC/B,CAAC,CAAA,EAAG,CAAA,KAAA,CAAO,CAAA,CAAE,IAAA,IAAQ,CAAA,KAAM,CAAA,CAAE,IAAA,IAAQ,CAAA,CAAA,GAAA,CAAM,CAAA,CAAE,IAAA,IAAQ,CAAA,KAAM,EAAE,IAAA,IAAQ,CAAA;AAAA,GACvE;AAEA,EAAA,IAAI,CAAA,GAAI,CAAA,kBAAA,EAAqB,KAAK,CAAA,CAAA,EAAI,MAAM,CAAA,wCAAA,CAAA;AAE5C,EAAA,KAAA,MAAW,KAAK,YAAA,EAAc;AAC5B,IAAA,MAAM,CAAA,GAAI,UAAU,CAAC,CAAA;AACrB,IAAA,MAAM,GAAA,GAAM,SAAA,CAAU,CAAA,CAAE,KAAA,EAAO,SAAS,CAAA;AACxC,IAAA,CAAA,IACE,CAAA,YAAA,EACY,CAAA,CAAE,CAAC,CAAA,KAAA,EAAQ,CAAA,CAAE,CAAC,CAAA,SAAA,EAAY,CAAA,CAAE,CAAC,CAAA,UAAA,EAAa,CAAA,CAAE,CAAC,mBAAmB,GAAG,CAAA,8BAAA,EAAiC,GAAG,CAAA,2EAAA,EACvG,CAAA,CAAE,CAAA,GAAI,EAAE,CAAA,KAAA,EAAQ,CAAA,CAAE,CAAA,GAAI,EAAE,CAAA,0BAAA,EAA6B,GAAG,CAAA,EAAA,EAAK,UAAA,CAAW,CAAA,CAAE,KAAK,CAAC,CAAA,WAAA,CAAA;AAAA,EAEhG;AAEA,EAAA,KAAA,MAAW,KAAK,KAAA,EAAO;AACrB,IAAA,MAAM,CAAA,GAAI,IAAA,CAAK,GAAA,CAAI,CAAA,CAAE,IAAI,CAAA;AACzB,IAAA,MAAM,CAAA,GAAI,IAAA,CAAK,GAAA,CAAI,CAAA,CAAE,EAAE,CAAA;AACvB,IAAA,IAAI,CAAC,CAAA,IAAK,CAAC,CAAA,EAAG;AACd,IAAA,MAAM,IAAI,KAAA,CAAMA,QAAAA,CAAQ,CAAC,CAAA,EAAGA,QAAAA,CAAQ,CAAC,CAAC,CAAA;AACtC,IAAA,MAAM,EAAA,GAAK,MAAA,CAAO,CAAA,CAAE,IAAI,CAAA;AACxB,IAAA,CAAA,IACE,CAAA,YAAA,EAAe,EAAE,CAAC,CAAA,sBAAA,EAAyB,GAAG,MAAM,CAAA,gBAAA,EAAmB,GAAG,EAAE,CAAA,oBAAA,EAAuB,GAAG,IAAI,CAAA,mBAAA,EAAsB,GAAG,MAAM,CAAA,IAAA,CAAA,GACzI,SAAS,CAAA,EAAG,CAAA,CAAE,KAAK,CAAA,GACnB,CAAA,IAAA,CAAA;AAAA,EACJ;AAEA,EAAA,KAAA,MAAW,KAAK,KAAA,EAAO;AACrB,IAAA,MAAM,CAAA,GAAIA,SAAQ,CAAC,CAAA;AACnB,IAAA,MAAM,EAAA,GAAK,OAAA,CAAQ,CAAA,CAAE,IAAI,CAAA;AACzB,IAAA,MAAM,CAAA,GAAA,CAAK,CAAA,CAAE,IAAA,IAAQ,EAAA,EAAI,WAAA,EAAY;AACrC,IAAA,MAAM,KAAK,WAAA,CAAY,GAAA,CAAI,CAAC,CAAA,GAAI,SAAA,CAAU,YAAY,CAAC,CAAA,IAAK,CAAA,EAAG,CAAA,CAAE,IAAI,EAAA,EAAI,CAAA,CAAE,IAAI,EAAA,EAAI,EAAA,CAAG,MAAM,CAAA,GAAI,EAAA;AAChG,IAAA,MAAM,KAAK,EAAA,CAAG,KAAA,KAAU,IAAA,GAAO,CAAA,CAAE,IAAI,CAAA,CAAE,CAAA,GAAI,CAAA,GAAI,EAAA,CAAG,SAAS,CAAA,GAAI,CAAA,CAAE,CAAA,GAAI,EAAA,GAAK,EAAE,CAAA,GAAI,EAAA;AAChF,IAAA,MAAM,MAAA,GAAS,EAAA,CAAG,KAAA,KAAU,IAAA,GAAO,QAAA,GAAW,OAAA;AAC9C,IAAA,MAAM,KAAA,GAAQ,CAAA,CAAE,CAAA,IAAK,EAAA,CAAG,MAAA,KAAW,SAAY,EAAA,GAAK,CAAA,CAAE,IAAA,KAAS,MAAA,GAAY,EAAA,GAAK,EAAA,CAAA;AAChF,IAAA,MAAM,QAAQ,CAAA,CAAE,CAAA,IAAK,EAAA,CAAG,MAAA,KAAW,SAAY,EAAA,GAAK,EAAA,CAAA;AACpD,IAAA,MAAM,MAAA,GAAS,EAAA,CAAG,KAAA,KAAU,IAAA,GAAO,SAAS,EAAA,CAAG,MAAA;AAC/C,IAAA,MAAM,WAAW,EAAA,CAAG,IAAA,KAAS,SAAY,CAAA,mBAAA,EAAsB,EAAA,CAAG,IAAI,CAAA,CAAA,CAAA,GAAM,EAAA;AAC5E,IAAA,MAAM,SACJ,EAAA,CAAG,KAAA,KAAU,IAAA,GACT,EAAA,GACA,YAAY,CAAA,CAAE,CAAC,CAAA,KAAA,EAAQ,CAAA,CAAE,CAAC,CAAA,oBAAA,EAAuB,CAAA,CAAE,CAAC,CAAA,eAAA,EAAkB,GAAG,MAAM,CAAA,GAAA,CAAA;AACrF,IAAA,MAAM,SACJ,EAAA,CAAG,MAAA,KAAW,SACV,CAAA,SAAA,EAAY,CAAA,CAAE,IAAI,CAAA,CAAE,CAAA,GAAI,CAAC,CAAA,KAAA,EAAQ,CAAA,CAAE,IAAI,EAAE,CAAA,yBAAA,EAAyB,WAAW,EAAA,CAAG,MAAM,CAAC,CAAA,WAAA,CAAA,GACvF,EAAA;AACN,IAAA,MAAM,IAAA,GACJ,EAAE,IAAA,KAAS,MAAA,GACP,YAAY,EAAE,CAAA,KAAA,EAAQ,KAAK,CAAA,yBAAA,EAA4B,EAAA,CAAG,KAAA,KAAU,OAAO,SAAA,GAAY,EAAA,CAAG,MAAM,CAAA,eAAA,EAAkB,MAAM,KAAK,UAAA,CAAW,CAAA,CAAE,IAAI,CAAC,CAAA,OAAA,CAAA,GAC/I,EAAA;AACN,IAAA,CAAA,IACE,sCACY,CAAA,CAAE,CAAC,CAAA,KAAA,EAAQ,CAAA,CAAE,CAAC,CAAA,SAAA,EAAY,CAAA,CAAE,CAAC,CAAA,UAAA,EAAa,EAAE,CAAC,CAAA,eAAA,EAAkB,GAAG,IAAI,CAAA,UAAA,EAAa,MAAM,CAAA,oBAAA,EAAuB,QAAQ,CAAA,EAAA,CAAA,GACpI,MAAA,GACA,KACA,MAAA,GACA,CAAA,SAAA,EAAY,EAAE,CAAA,KAAA,EAAQ,KAAK,CAAA,yBAAA,EAA4B,EAAA,CAAG,IAAI,CAAA,eAAA,EAAkB,MAAM,CAAA,EAAA,EAAK,UAAA,CAAW,EAAE,IAAI,CAAC,YAC7G,IAAA,GACA,CAAA,IAAA,CAAA;AAAA,EACJ;AAEA,EAAA,CAAA,IAAK,CAAA,MAAA,CAAA;AACL,EAAA,OAAO,YAAA;AAAA,IACL;AAAA,MACE,KAAK,KAAA,CAAM,GAAA;AAAA,MACX,GAAI,MAAM,KAAA,KAAU,MAAA,GAAY,EAAE,KAAA,EAAO,KAAA,CAAM,KAAA,EAAM,GAAI,EAAC;AAAA,MAC1D,GAAI,KAAK,KAAA,KAAU,MAAA,GAAY,EAAE,KAAA,EAAO,IAAA,CAAK,KAAA,EAAM,GAAI,EAAC;AAAA,MACxD,GAAI,KAAK,WAAA,KAAgB,MAAA,GAAY,EAAE,IAAA,EAAM,IAAA,CAAK,WAAA,EAAY,GAAI;AAAC,KACrE;AAAA,IACA;AAAA,GACF;AACF;AAGO,SAAS,cAAc,IAAA,EAAuC;AACnE,EAAA,OAAO,mBAAmB,IAAA,EAAM,EAAE,KAAK,OAAA,EAAS,KAAA,EAAO,WAAW,CAAA;AACpE;AAEO,SAAS,cAAc,IAAA,EAAuC;AACnE,EAAA,OAAO,mBAAmB,IAAA,EAAM,EAAE,KAAK,OAAA,EAAS,KAAA,EAAO,WAAW,CAAA;AACpE;;;ACvPA,SAAS,aAAa,MAAA,EAAwB;AAC5C,EAAA,IAAI,MAAA,KAAW,SAAS,OAAO,GAAA;AAC/B,EAAA,OAAO,GAAA;AACT;AAGA,SAAS,cAAc,EAAA,EAAqB;AAC1C,EAAA,MAAM,OAAO,IAAA,CAAK,GAAA,CAAI,CAAA,EAAG,EAAA,CAAG,QAAQ,CAAC,CAAA;AACrC,EAAA,QAAQ,GAAG,IAAA;AAAM,IACf,KAAK,QAAA;AACH,MAAA,OAAO,EAAA;AAAA,IACT,KAAK,WAAA;AACH,MAAA,OAAO,EAAA;AAAA,IACT,KAAK,MAAA;AACH,MAAA,OAAO,EAAA,GAAA,CAAM,OAAO,CAAA,IAAK,EAAA;AAAA,IAC3B,KAAK,QAAA;AACH,MAAA,OAAO,EAAA;AAAA,IACT,KAAK,OAAA;AAAA,IACL,KAAK,QAAA;AACH,MAAA,OAAO,EAAA;AAAA,IACT,KAAK,OAAA;AACH,MAAA,OAAO,EAAA;AAAA,IACT,KAAK,QAAA;AACH,MAAA,OAAO,EAAA;AAAA,IACT,KAAK,MAAA;AACH,MAAA,OAAO,IAAA,GAAO,EAAA,GAAA,CAAM,IAAA,GAAO,CAAA,IAAK,EAAA;AAAA,IAClC,KAAK,MAAA;AACH,MAAA,OAAO,IAAA,GAAO,EAAA;AAAA,IAChB,KAAK,KAAA;AACH,MAAA,OAAO,EAAA;AAAA,IACT,KAAK,MAAA;AACH,MAAA,OAAO,EAAA;AAAA,IACT,KAAK,SAAA;AACH,MAAA,OAAO,EAAA;AAAA,IACT,KAAK,OAAA;AACH,MAAA,OAAO,EAAA;AAAA,IACT,KAAK,QAAA;AACH,MAAA,OAAO,EAAA;AAAA,IACT,KAAK,QAAA;AACH,MAAA,OAAO,EAAA,GAAK,IAAA;AAAA,IACd;AACE,MAAA,OAAO,EAAA;AAAA;AAEb;AAEA,IAAM,EAAA,GAAK,gEAAA;AAGX,SAAS,WAAA,CAAY,EAAA,EAAa,CAAA,EAAW,CAAA,EAAW,CAAA,EAAmB;AACzE,EAAA,MAAM,OAAO,IAAA,CAAK,GAAA,CAAI,CAAA,EAAG,EAAA,CAAG,QAAQ,CAAC,CAAA;AACrC,EAAA,MAAM,KAAA,GAAQ,GAAG,KAAA,IAAS,EAAA;AAC1B,EAAA,MAAM,MAAA,GACJ,GAAG,IAAA,KAAS,QAAA,GACR,oBACA,EAAA,CAAG,IAAA,KAAS,UACV,aAAA,GACA,aAAA;AACR,EAAA,MAAM,OAAA,GAAU,EAAA,CAAG,KAAA,KAAU,GAAA,GAAM,CAAA,GAAI,CAAA,GAAI,CAAA,GAAI,EAAA,CAAG,KAAA,KAAU,GAAA,GAAM,CAAA,GAAI,CAAA,GAAI,CAAA;AAC1E,EAAA,MAAM,MAAA,GAAS,GAAG,KAAA,KAAU,GAAA,GAAM,WAAW,EAAA,CAAG,KAAA,KAAU,MAAM,KAAA,GAAQ,OAAA;AAExE,EAAA,QAAQ,GAAG,IAAA;AAAM,IACf,KAAK,QAAA;AACH,MAAA,OAAO,CAAA,SAAA,EAAY,OAAO,CAAA,KAAA,EAAQ,CAAA,GAAI,EAAE,CAAA,mDAAA,EAAsD,MAAM,CAAA,EAAA,EAAK,UAAA,CAAW,KAAA,IAAS,SAAS,CAAC,CAAA,OAAA,CAAA;AAAA,IACzI,KAAK,WAAA;AACH,MAAA,OAAO,CAAA,SAAA,EAAY,OAAO,CAAA,KAAA,EAAQ,CAAA,GAAI,EAAE,CAAA,iDAAA,EAAoD,MAAM,CAAA,EAAA,EAAK,UAAA,CAAW,KAAA,IAAS,YAAY,CAAC,CAAA,OAAA,CAAA;AAAA,IAC1I,KAAK,MAAA,EAAQ;AACX,MAAA,IAAI,CAAA,GAAI,EAAA;AACR,MAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,IAAA,EAAM,CAAA,EAAA,EAAK;AAC7B,QAAA,MAAM,EAAA,GAAK,CAAA,KAAM,IAAA,GAAO,CAAA,GAAI,IAAI,IAAA,GAAO,CAAA;AACvC,QAAA,CAAA,IAAK,YAAY,CAAC,CAAA,KAAA,EAAQ,IAAI,CAAA,GAAI,EAAE,YAAY,EAAE,CAAA,wCAAA,CAAA;AAAA,MACpD;AACA,MAAA,OAAO,CAAA;AAAA,IACT;AAAA,IACA,KAAK,QAAA;AACH,MAAA,OACE,YAAY,CAAC,CAAA,KAAA,EAAQ,CAAC,CAAA,SAAA,EAAY,CAAC,8BAA8B,MAAM,CAAA,YAAA,EAC3D,IAAI,CAAA,GAAI,CAAC,QAAQ,CAAA,GAAI,EAAE,yCAAyC,UAAA,CAAW,KAAA,IAAS,QAAQ,CAAC,CAAA,OAAA,CAAA;AAAA,IAE7G,KAAK,OAAA;AAAA,IACL,KAAK,QAAA,EAAU;AACb,MAAA,MAAM,OACJ,EAAA,CAAG,IAAA,KAAS,QAAA,GACR,CAAA,YAAA,EAAe,IAAI,EAAE,CAAA,MAAA,EAAS,CAAA,GAAI,EAAE,0EAA0E,CAAA,GAAI,EAAE,CAAA,CAAA,EAAI,CAAA,GAAI,EAAE,CAAA,gDAAA,CAAA,GAC9H,EAAA;AACN,MAAA,MAAM,KAAK,EAAA,CAAG,IAAA,KAAS,QAAA,GAAW,CAAA,GAAI,KAAK,CAAA,GAAI,EAAA;AAC/C,MAAA,OACE,YAAY,CAAC,CAAA,KAAA,EAAQ,CAAC,CAAA,SAAA,EAAY,CAAC,CAAA,kFAAA,CAAA,GACnC,IAAA,GACA,CAAA,SAAA,EAAY,EAAE,QAAQ,CAAA,GAAI,EAAE,wBAAwB,UAAA,CAAW,KAAA,IAAS,iBAAY,CAAC,CAAA,OAAA,CAAA;AAAA,IAEzF;AAAA,IACA,KAAK,OAAA;AACH,MAAA,OACE,CAAA,SAAA,EAAY,CAAC,CAAA,KAAA,EAAQ,CAAC,YAAY,CAAC,CAAA,qBAAA,EAAwB,EAAE,CAAA,YAAA,EAChD,CAAC,IAAI,CAAA,GAAI,EAAE,KAAK,CAAA,GAAI,CAAA,GAAI,GAAG,CAAA,CAAA,EAAI,CAAA,GAAI,EAAE,CAAA,EAAA,EAAK,CAAA,GAAI,CAAA,GAAI,IAAI,CAAA,CAAA,EAAI,CAAA,GAAI,EAAE,CAAA,EAAA,EAAK,CAAA,GAAI,IAAI,IAAI,CAAA,CAAA,EAAI,IAAI,EAAE,CAAA,EAAA,EAAK,IAAI,CAAC,CAAA,CAAA,EAAI,IAAI,EAAE,CAAA,mEAAA,EAC7G,IAAI,CAAA,GAAI,IAAI,CAAA,OAAA,EAAU,CAAA,GAAI,EAAE,CAAA,6DAAA,CAAA;AAAA,IAE/C,KAAK,QAAA;AACH,MAAA,OACE,CAAA,YAAA,EAAe,CAAA,GAAI,EAAE,CAAA,MAAA,EAAS,IAAI,EAAE,CAAA,SAAA,EAAY,EAAE,CAAA,cAAA,EACnC,CAAA,GAAI,EAAE,CAAA,MAAA,EAAS,CAAA,GAAI,EAAE,CAAA,sCAAA,EACvB,CAAA,GAAI,CAAC,CAAA,CAAA,EAAI,CAAA,GAAI,EAAE,CAAA,wCAAA,CAAA,IAC3B,KAAA,GACG,YAAY,CAAA,GAAI,EAAE,CAAA,KAAA,EAAQ,CAAA,GAAI,EAAE,CAAA,wCAAA,EAA2C,UAAA,CAAW,KAAK,CAAC,CAAA,OAAA,CAAA,GAC5F,EAAA,CAAA;AAAA,IAER,KAAK,MAAA,EAAQ;AACX,MAAA,IAAI,CAAA,GAAI,EAAA;AACR,MAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,IAAA,EAAM,CAAA,EAAA,EAAK;AAC7B,QAAA,MAAM,EAAA,GAAK,IAAI,CAAA,GAAI,EAAA;AACnB,QAAA,CAAA,IACE,CAAA,SAAA,EAAY,CAAC,CAAA,KAAA,EAAQ,EAAE,YAAY,CAAC,CAAA,4FAAA,EACxB,CAAA,GAAI,EAAE,CAAA,KAAA,EAAQ,EAAA,GAAK,EAAE,CAAA,gCAAA,EAAmC,EAAE,CAAA,WAAA,EAC1D,CAAA,GAAI,EAAE,CAAA,KAAA,EAAQ,EAAA,GAAK,EAAE,CAAA,SAAA,EAAY,CAAA,GAAI,EAAE,CAAA,mDAAA,EACvC,CAAA,GAAI,EAAE,CAAA,KAAA,EAAQ,EAAA,GAAK,EAAE,CAAA,SAAA,EAAA,CAAa,CAAA,GAAI,MAAM,GAAG,CAAA,wCAAA,CAAA;AAAA,MAC/D;AACA,MAAA,MAAM,GAAA,GAAM,QACR,CAAA,SAAA,EAAY,CAAA,GAAI,EAAE,CAAA,KAAA,EAAQ,CAAA,GAAI,EAAE,CAAA,4BAAA,CAAA,GAChC,EAAA;AACJ,MAAA,OAAO,CAAA,GAAI,GAAA;AAAA,IACb;AAAA,IACA,KAAK,MAAA,EAAQ;AACX,MAAA,IAAI,CAAA,GAAI,EAAA;AACR,MAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,IAAA,EAAM,CAAA,EAAA,EAAK;AAC7B,QAAA,MAAM,EAAA,GAAK,IAAI,CAAA,GAAI,EAAA;AACnB,QAAA,CAAA,IACE,CAAA,YAAA,EAAe,IAAI,EAAE,CAAA,MAAA,EAAS,KAAK,EAAE,CAAA,SAAA,EAAY,EAAE,CAAA,WAAA,EACvC,CAAA,GAAI,EAAE,QAAQ,EAAA,GAAK,EAAE,CAAA,SAAA,EAAY,CAAA,GAAI,EAAE,CAAA,iDAAA,EACvC,IAAI,EAAE,CAAA,KAAA,EAAQ,EAAA,GAAK,EAAE,CAAA,SAAA,EAAA,CAAa,CAAA,GAAI,MAAM,IAAI,CAAA,oDAAA,EAC/C,IAAI,CAAA,GAAI,EAAE,IAAI,EAAA,GAAK,EAAE,CAAA,kEAAA,CAAA,IACjC,CAAA,GAAI,IAAA,GAAO,CAAA,GACR,aAAa,CAAA,GAAI,EAAE,CAAA,MAAA,EAAS,EAAA,GAAK,EAAE,CAAA,MAAA,EAAS,IAAI,CAAC,CAAA,MAAA,EAAS,EAAA,GAAK,EAAE,CAAA,+CAAA,CAAA,GACjE,EAAA,CAAA;AAAA,MACR;AACA,MAAA,OAAO,CAAA;AAAA,IACT;AAAA,IACA,KAAK,KAAA,EAAO;AAEV,MAAA,MAAM,KAAA,GAAA,CAAS,KAAA,IAAS,4BAAA,EAA8B,KAAA,CAAM,GAAG,CAAA,CAAE,GAAA,CAAI,CAAC,CAAA,KAAM,CAAA,CAAE,IAAA,EAAM,CAAA;AACpF,MAAA,IAAI,CAAA,GAAI,EAAA;AACR,MAAA,IAAI,EAAA,GAAK,CAAA;AACT,MAAA,KAAA,MAAW,MAAM,KAAA,EAAO;AACtB,QAAA,MAAM,EAAA,GAAK,EAAA,GAAK,EAAA,CAAG,MAAA,GAAS,GAAA;AAC5B,QAAA,CAAA,IACE,YAAY,EAAE,CAAA,KAAA,EAAQ,CAAA,GAAI,CAAC,YAAY,EAAE,CAAA,yDAAA,EAC7B,EAAA,GAAK,EAAA,GAAK,CAAC,CAAA,KAAA,EAAQ,CAAA,GAAI,EAAE,CAAA,0CAAA,EAA6C,UAAA,CAAW,EAAE,CAAC,CAAA,OAAA,CAAA;AAClG,QAAA,EAAA,IAAM,EAAA,GAAK,CAAA;AAAA,MACb;AACA,MAAA,OAAO,CAAA;AAAA,IACT;AAAA,IACA,KAAK,MAAA,EAAQ;AACX,MAAA,MAAM,KAAA,GAAA,CAAS,KAAA,IAAS,6BAAA,EAA+B,KAAA,CAAM,GAAG,CAAA,CAAE,GAAA,CAAI,CAAC,CAAA,KAAM,CAAA,CAAE,IAAA,EAAM,CAAA;AACrF,MAAA,MAAM,GAAA,GAAM,IAAI,KAAA,CAAM,MAAA;AACtB,MAAA,IAAI,CAAA,GAAI,aAAa,CAAC,CAAA,MAAA,EAAS,CAAC,CAAA,MAAA,EAAS,CAAA,GAAI,CAAC,CAAA,MAAA,EAAS,CAAC,CAAA,yCAAA,CAAA;AACxD,MAAA,KAAA,CAAM,OAAA,CAAQ,CAAC,EAAA,EAAI,CAAA,KAAM;AACvB,QAAA,MAAM,EAAA,GAAK,CAAA,GAAI,GAAA,GAAM,CAAA,GAAI,GAAA,GAAM,CAAA;AAC/B,QAAA,CAAA,IACE,CAAA,YAAA,EAAe,EAAE,CAAA,MAAA,EAAS,CAAA,GAAI,EAAE,CAAA,4BAAA,EAA+B,CAAA,KAAM,CAAA,GAAI,MAAA,GAAS,aAAa,CAAA,+BAAA,EACnF,EAAE,CAAA,KAAA,EAAQ,CAAA,GAAI,EAAE,CAAA,4CAAA,EAA+C,CAAA,KAAM,CAAA,GAAI,SAAS,aAAa,CAAA,EAAA,EAAK,UAAA,CAAW,EAAE,CAAC,CAAA,OAAA,CAAA;AAAA,MAClI,CAAC,CAAA;AACD,MAAA,OAAO,CAAA;AAAA,IACT;AAAA,IACA,KAAK,SAAA;AACH,MAAA,OAAO,CAAA,UAAA,EAAa,CAAC,CAAA,MAAA,EAAS,CAAA,GAAI,CAAC,SAAS,CAAA,GAAI,CAAC,CAAA,MAAA,EAAS,CAAA,GAAI,CAAC,CAAA,yCAAA,CAAA;AAAA,IACjE,KAAK,OAAA,EAAS;AACZ,MAAA,MAAM,EAAA,GAAK,EAAA,GAAK,KAAA,CAAM,MAAA,GAAS,GAAA;AAC/B,MAAA,OACE,CAAA,SAAA,EAAY,OAAA,IAAW,MAAA,KAAW,QAAA,GAAW,KAAK,CAAA,GAAI,MAAA,KAAW,KAAA,GAAQ,EAAA,GAAK,EAAE,CAAA,KAAA,EAAQ,CAAC,CAAA,SAAA,EAAY,EAAE,+BAA+B,MAAM,CAAA,YAAA,EAChI,OAAA,IAAW,MAAA,KAAW,WAAW,CAAA,GAAI,MAAA,KAAW,KAAA,GAAQ,EAAA,GAAK,IAAI,CAAC,EAAA,GAAK,CAAA,CAAE,CAAA,KAAA,EAAQ,IAAI,EAAE,CAAA,sCAAA,EAAyC,UAAA,CAAW,KAAA,IAAS,KAAK,CAAC,CAAA,OAAA,CAAA;AAAA,IAE1K;AAAA,IACA,KAAK,QAAA;AACH,MAAA,OAAA,CACG,KAAA,GACG,CAAA,SAAA,EAAY,CAAC,CAAA,KAAA,EAAQ,CAAA,GAAI,EAAE,CAAA,wCAAA,EAA2C,UAAA,CAAW,KAAK,CAAC,CAAA,OAAA,CAAA,GACvF,EAAA,IACJ,CAAA,SAAA,EAAY,CAAA,GAAI,CAAA,GAAI,EAAE,CAAA,KAAA,EAAQ,CAAA,GAAI,CAAC,CAAA,uCAAA,EAA0C,MAAM,CAAA,eAAA,EACpE,CAAA,GAAI,CAAA,GAAI,EAAE,CAAA,MAAA,EAAS,CAAA,GAAI,EAAE,CAAA,qBAAA,CAAA;AAAA,IAE5C,KAAK,QAAA;AACH,MAAA,OAAO,EAAA;AAAA,IACT;AACE,MAAA,OAAO,EAAA;AAAA;AAEb;AAGA,SAAS,UAAA,CAAW,QAAgB,GAAA,EAA6D;AAC/F,EAAA,MAAM,MAAA,GAAS,OAAO,MAAA,IAAU,SAAA;AAChC,EAAA,MAAM,EAAA,GAAK,aAAa,MAAM,CAAA;AAC9B,EAAA,MAAM,GAAA,GAAM,EAAA;AACZ,EAAA,MAAM,GAAA,GAAM,MAAA,CAAO,QAAA,IAAY,EAAC;AAChC,EAAA,IAAI,QAAA,GAAW,CAAA;AACf,EAAA,KAAA,MAAW,EAAA,IAAM,GAAA,EAAK,QAAA,IAAY,aAAA,CAAc,EAAE,CAAA,GAAI,EAAA;AACtD,EAAA,QAAA,GAAW,IAAA,CAAK,GAAA,CAAI,QAAA,EAAU,EAAE,CAAA;AAGhC,EAAA,MAAM,UAAU,MAAA,KAAW,OAAA;AAC3B,EAAA,MAAM,YAAY,MAAA,KAAW,SAAA;AAC7B,EAAA,MAAM,SAAA,GAAY,EAAA;AAClB,EAAA,MAAM,WAAA,GAAc,YAAY,EAAA,GAAK,CAAA;AACrC,EAAA,MAAM,YAAY,SAAA,GAAY,WAAA;AAC9B,EAAA,MAAM,QAAA,GAAW,UAAU,EAAA,GAAK,CAAA;AAEhC,EAAA,MAAM,MAAA,GAAS,KAAK,GAAA,GAAM,CAAA;AAC1B,EAAA,MAAM,UAAU,QAAA,GAAW,GAAA;AAC3B,EAAA,MAAM,MAAA,GAAS,YAAY,OAAA,GAAU,QAAA;AACrC,EAAA,MAAM,EAAA,GAAK,UAAU,EAAA,GAAK,EAAA;AAC1B,EAAA,MAAM,EAAA,GAAK,UAAU,GAAA,GAAM,GAAA;AAC3B,EAAA,MAAM,IAAA,GAAO,SAAS,GAAG,CAAA,CAAA;AAKzB,EAAA,IAAI,KAAA,GAAQ,EAAA;AACZ,EAAA,IAAI,OAAA,EAAS;AACX,IAAA,KAAA,IAAS,CAAA,yBAAA,EAA4B,MAAM,CAAA,UAAA,EAAa,SAAS,CAAA,4BAAA,CAAA;AACjE,IAAA,KAAA,IAAS,CAAA,SAAA,EAAY,MAAA,GAAS,CAAA,GAAI,EAAE,CAAA,+DAAA,CAAA;AACpC,IAAA,IAAI,MAAA,CAAO,KAAA;AACT,MAAA,KAAA,IAAS,CAAA,sCAAA,EAAyC,UAAA,CAAW,MAAA,CAAO,KAAK,CAAC,CAAA,OAAA,CAAA;AAC5E,IAAA,KAAA,IAAS,CAAA,SAAA,EAAY,SAAS,EAAE,CAAA,wDAAA,CAAA;AAAA,EAClC,CAAA,MAAO;AACL,IAAA,KAAA,IAAS,CAAA,yBAAA,EAA4B,MAAM,CAAA,UAAA,EAAa,SAAS,CAAA,4BAAA,CAAA;AACjE,IAAA,KAAA,IAAS,CAAA,iBAAA,EAAoB,SAAS,CAAA,MAAA,EAAS,MAAM,SAAS,SAAS,CAAA,yCAAA,CAAA;AACvE,IAAA,KAAA,IAAS,CAAA,mKAAA,CAAA;AACT,IAAA,IAAI,MAAA,CAAO,SAAS,CAAC,SAAA;AACnB,MAAA,KAAA,IAAS,YAAY,MAAA,GAAS,CAAC,mDAAmD,UAAA,CAAW,MAAA,CAAO,KAAK,CAAC,CAAA,OAAA,CAAA;AAC5G,IAAA,IAAI,SAAA,EAAW;AACb,MAAA,MAAM,GAAA,GAAM,MAAA,CAAO,GAAA,IAAO,MAAA,CAAO,KAAA,IAAS,aAAA;AAC1C,MAAA,KAAA,IAAS,CAAA,gBAAA,EAAmB,SAAA,GAAY,CAAC,CAAA,SAAA,EAAY,SAAS,EAAE,CAAA,gFAAA,CAAA;AAChE,MAAA,KAAA,IAAS,mBAAmB,SAAA,GAAY,EAAE,CAAA,iBAAA,EAAoB,UAAA,CAAW,GAAG,CAAC,CAAA,OAAA,CAAA;AAAA,IAC/E;AAAA,EACF;AAEA,EAAA,IAAI,KAAK,SAAA,GAAY,GAAA;AACrB,EAAA,KAAA,MAAW,MAAM,GAAA,EAAK;AACpB,IAAA,KAAA,IAAS,WAAA,CAAY,EAAA,EAAI,GAAA,EAAK,EAAA,EAAI,EAAE,CAAA;AACpC,IAAA,EAAA,IAAM,aAAA,CAAc,EAAE,CAAA,GAAI,EAAA;AAAA,EAC5B;AACA,EAAA,IAAI,OAAA,EAAS;AACX,IAAA,KAAA,IAAS,YAAY,MAAA,GAAS,CAAA,GAAI,EAAE,CAAA,KAAA,EAAQ,SAAS,EAAE,CAAA,wEAAA,CAAA;AAAA,EACzD;AAEA,EAAA,MAAM,CAAA,GACJ,CAAA,8CAAA,EACuB,IAAI,CAAA,2BAAA,EAA8B,MAAM,CAAA,UAAA,EAAa,MAAM,CAAA,MAAA,EAAS,EAAE,CAAA,8CAAA,EAEjE,MAAM,CAAA,UAAA,EAAa,MAAM,SAAS,EAAE,CAAA,0CAAA,EAC1C,IAAI,CAAA,GAAA,EAAM,KAAK,CAAA,6BAAA,EAET,MAAM,CAAA,UAAA,EAAa,MAAM,CAAA,MAAA,EAAS,EAAE,CAAA,qDAAA,EAAwD,EAAE,CAAA,OAAA,CAAA;AAE5H,EAAA,OAAO,EAAE,GAAA,EAAK,CAAA,EAAG,KAAA,EAAO,MAAA,EAAQ,QAAQ,MAAA,EAAO;AACjD;AAEO,SAAS,gBAAgB,IAAA,EAAyC;AACvE,EAAA,MAAM,OAAA,GAAU,IAAA,CAAK,OAAA,IAAW,EAAC;AACjC,EAAA,MAAM,GAAA,GAAM,EAAA;AACZ,EAAA,MAAM,IAAA,GAAO,EAAA;AACb,EAAA,MAAM,IAAA,GAAO,CAAA;AACb,EAAA,MAAM,IAAA,GAAO,CAAA;AAEb,EAAA,MAAM,KAAA,GAAQ,QAAQ,GAAA,CAAI,CAAC,QAAQ,CAAA,KAAM,UAAA,CAAW,MAAA,EAAQ,CAAC,CAAC,CAAA;AAC9D,EAAA,MAAM,SAAS,KAAA,CAAM,MAAA,CAAO,CAAC,CAAA,EAAG,MAAM,CAAA,GAAI,CAAA,CAAE,KAAA,EAAO,CAAC,IAAI,GAAA,GAAM,IAAA,CAAK,IAAI,CAAA,EAAG,KAAA,CAAM,SAAS,CAAC,CAAA;AAC1F,EAAA,MAAM,IAAA,GAAO,KAAA,CAAM,MAAA,CAAO,CAAC,CAAA,EAAG,CAAA,KAAM,IAAA,CAAK,GAAA,CAAI,CAAA,EAAG,CAAA,CAAE,MAAM,CAAA,EAAG,CAAC,CAAA;AAC5D,EAAA,MAAM,KAAA,GAAQ,SAAS,IAAA,GAAO,CAAA;AAC9B,EAAA,MAAM,MAAA,GAAS,IAAA,GAAO,IAAA,GAAO,IAAA,GAAO,CAAA;AAEpC,EAAA,IAAI,CAAA,GAAI,CAAA,kBAAA,EAAqB,KAAK,CAAA,CAAA,EAAI,MAAM,uBAAuB,UAAA,CAAW,IAAA,CAAK,KAAA,IAAS,WAAW,CAAC,CAAA,QAAA,CAAA;AACxG,EAAA,IAAI,CAAA,GAAI,IAAA;AACR,EAAA,KAAA,CAAM,OAAA,CAAQ,CAAC,CAAA,EAAG,CAAA,KAAM;AACtB,IAAA,MAAM,MAAA,GAAS,QAAQ,CAAC,CAAA;AACxB,IAAA,CAAA,IAAK,2BAA2B,CAAC,CAAA,EAAA,EAAK,IAAI,CAAA,GAAA,EAAM,EAAE,GAAG,CAAA,IAAA,CAAA;AACrD,IAAA,MAAM,MAAM,MAAA,EAAQ,KAAA;AACpB,IAAA,IAAI,GAAA,KAAQ,MAAA,IAAa,GAAA,CAAI,MAAA,GAAS,CAAA,EAAG;AACvC,MAAA,MAAM,KAAA,GAAQ,SAAS,GAAA,EAAK,IAAA,CAAK,MAAM,CAAA,CAAE,KAAA,GAAQ,CAAC,CAAA,EAAG,CAAC,CAAA;AACtD,MAAA,KAAA,CAAM,OAAA,CAAQ,CAAC,EAAA,EAAI,CAAA,KAAM;AACvB,QAAA,CAAA,IAAK,CAAA,SAAA,EAAY,CAAA,GAAI,CAAA,CAAE,KAAA,GAAQ,CAAC,CAAA,KAAA,EAAQ,IAAA,GAAO,IAAA,GAAO,EAAA,GAAK,CAAA,GAAI,EAAE,CAAA,0CAAA,EAA6C,UAAA,CAAW,EAAE,CAAC,CAAA,OAAA,CAAA;AAAA,MAC9H,CAAC,CAAA;AAAA,IACH;AACA,IAAA,CAAA,IAAK,EAAE,KAAA,GAAQ,GAAA;AAAA,EACjB,CAAC,CAAA;AACD,EAAA,CAAA,IAAK,CAAA,MAAA,CAAA;AAEL,EAAA,OAAO,YAAA;AAAA,IACL;AAAA,MACE,GAAA,EAAK,IAAA;AAAA,MACL,KAAA,EAAO,SAAA;AAAA,MACP,GAAI,KAAK,KAAA,KAAU,MAAA,GAAY,EAAE,KAAA,EAAO,IAAA,CAAK,KAAA,EAAM,GAAI,EAAC;AAAA,MACxD,GAAI,KAAK,WAAA,KAAgB,MAAA,GAAY,EAAE,IAAA,EAAM,IAAA,CAAK,WAAA,EAAY,GAAI;AAAC,KACrE;AAAA,IACA;AAAA,GACF;AACF;;;AC3PO,IAAM,aAAA,GAAsC;AAAA,EACjD,IAAA,EAAM,eAAA;AAAA,EACN,OAAA,EAAS,aAAA;AAAA,EACT,KAAA,EAAO,WAAA;AAAA,EACP,QAAA,EAAU,cAAA;AAAA,EACV,GAAA,EAAK,SAAA;AAAA,EACL,SAAA,EAAW,eAAA;AAAA,EACX,QAAA,EAAU,cAAA;AAAA,EACV,MAAA,EAAQ,YAAA;AAAA,EACR,OAAA,EAAS,aAAA;AAAA,EACT,KAAA,EAAO,gBAAA;AAAA,EACP,QAAA,EAAU,cAAA;AAAA,EACV,QAAA,EAAU,cAAA;AAAA,EACV,GAAA,EAAK,SAAA;AAAA,EACL,KAAA,EAAO,WAAA;AAAA,EACP,IAAA,EAAM,UAAA;AAAA,EACN,MAAA,EAAQ,YAAA;AAAA,EACR,IAAA,EAAM,UAAA;AAAA,EACN,OAAA,EAAS,aAAA;AAAA,EACT,MAAA,EAAQ,YAAA;AAAA,EACR,IAAA,EAAM,UAAA;AAAA,EACN,KAAA,EAAO,WAAA;AAAA,EACP,GAAA,EAAK,SAAA;AAAA,EACL,OAAA,EAAS,aAAA;AAAA,EACT,KAAA,EAAO,WAAA;AAAA,EACP,KAAA,EAAO,WAAA;AAAA,EACP,QAAA,EAAU,cAAA;AAAA,EACV,QAAA,EAAU,cAAA;AAAA,EACV,EAAA,EAAI,QAAA;AAAA,EACJ,GAAA,EAAK,SAAA;AAAA,EACL,IAAA,EAAM,UAAA;AAAA,EACN,QAAA,EAAU,cAAA;AAAA,EACV,OAAA,EAAS,aAAA;AAAA,EACT,KAAA,EAAO,WAAA;AAAA,EACP,KAAA,EAAO,WAAA;AAAA,EACP,KAAA,EAAO,WAAA;AAAA,EACP,GAAA,EAAK,SAAA;AAAA,EACL,OAAA,EAAS,aAAA;AAAA,EACT,OAAA,EAAS,aAAA;AAAA,EACT,OAAA,EAAS,aAAA;AAAA,EACT,GAAA,EAAK,SAAA;AAAA,EACL,SAAA,EAAW;AACb;;;AC1FO,SAAS,aAAA,GAAwB;AACtC,EAAA,OACE,CAAA,69BAAA,CAAA;AAeJ;;;AChBO,IAAM,aAAA,GAA2B;AAUjC,IAAM,MAAA,GAAgD;AAAA,EAC3D,IAAA,EAAM;AAAA,IACJ,KAAA,EAAO,WAAA;AAAA,IACP,MAAM;AAAC,GACT;AAAA,EACA,IAAA,EAAM;AAAA,IACJ,KAAA,EAAO,MAAA;AAAA,IACP,IAAA,EAAM;AAAA,MACJ,QAAA,EAAU,SAAA;AAAA,MACV,QAAA,EAAU,SAAA;AAAA,MACV,aAAA,EAAe;AAAA;AACjB,GACF;AAAA,EACA,IAAA,EAAM;AAAA,IACJ,KAAA,EAAO,MAAA;AAAA,IACP,IAAA,EAAM;AAAA,MACJ,QAAA,EAAU,SAAA;AAAA,MACV,QAAA,EAAU,SAAA;AAAA,MACV,aAAA,EAAe;AAAA;AACjB,GACF;AAAA,EACA,KAAA,EAAO;AAAA,IACL,KAAA,EAAO,YAAA;AAAA,IACP,IAAA,EAAM;AAAA,MACJ,QAAA,EAAU,SAAA;AAAA,MACV,QAAA,EAAU,SAAA;AAAA,MACV,aAAA,EAAe,SAAA;AAAA,MACf,gBAAA,EAAkB;AAAA;AACpB,GACF;AAAA;AAAA;AAAA;AAAA;AAAA,EAKA,IAAA,EAAM;AAAA,IACJ,KAAA,EAAO,MAAA;AAAA,IACP,IAAA,EAAM;AAAA,MACJ,SAAA,EAAW,SAAA;AAAA;AAAA,MACX,YAAA,EAAc,SAAA;AAAA;AAAA,MACd,SAAA,EAAW,SAAA;AAAA;AAAA,MACX,QAAA,EAAU,SAAA;AAAA;AAAA,MACV,cAAA,EAAgB,SAAA;AAAA;AAAA,MAChB,QAAA,EAAU,SAAA;AAAA;AAAA,MACV,QAAA,EAAU,SAAA;AAAA;AAAA,MACV,aAAA,EAAe,SAAA;AAAA,MACf,QAAA,EAAU,SAAA;AAAA,MACV,cAAA,EAAgB,SAAA;AAAA,MAChB,aAAA,EAAe,SAAA;AAAA,MACf,kBAAA,EAAoB,SAAA;AAAA,MACpB,YAAA,EAAc,SAAA;AAAA,MACd,iBAAA,EAAmB,SAAA;AAAA,MACnB,YAAA,EAAc,SAAA;AAAA,MACd,iBAAA,EAAmB,SAAA;AAAA,MACnB,UAAA,EAAY,SAAA;AAAA,MACZ,eAAA,EAAiB,SAAA;AAAA,MACjB,QAAA,EAAU,SAAA;AAAA,MACV,aAAA,EAAe,SAAA;AAAA,MACf,UAAA,EAAY;AAAA;AACd,GACF;AAAA;AAAA,EAEA,IAAA,EAAM;AAAA,IACJ,KAAA,EAAO,MAAA;AAAA,IACP,IAAA,EAAM;AAAA,MACJ,QAAA,EAAU,SAAA;AAAA,MACV,QAAA,EAAU,SAAA;AAAA,MACV,YAAA,EAAc,SAAA;AAAA,MACd,SAAA,EAAW,SAAA;AAAA,MACX,QAAA,EAAU,SAAA;AAAA,MACV,QAAA,EAAU,SAAA;AAAA,MACV,cAAA,EAAgB,SAAA;AAAA,MAChB,aAAA,EAAe,SAAA;AAAA,MACf,UAAA,EAAY,MAAA;AAAA,MACZ,gBAAA,EAAkB;AAAA;AACpB;AAEJ;AAOO,SAAS,WAAW,IAAA,EAAyB;AAClD,EAAA,MAAM,IAAA,GAAO,MAAA,CAAO,IAAI,CAAA,CAAE,IAAA;AAC1B,EAAA,MAAM,QAAkB,EAAC;AACzB,EAAA,KAAA,MAAW,CAAA,IAAK,MAAA,CAAO,IAAA,CAAK,IAAI,CAAA,EAAG,KAAA,CAAM,IAAA,CAAK,CAAA,EAAG,CAAC,CAAA,CAAA,EAAI,IAAA,CAAK,CAAC,CAAC,CAAA,CAAA,CAAG,CAAA;AAChE,EAAA,OAAO,KAAA,CAAM,KAAK,EAAE,CAAA;AACtB;;;AC9CA,SAAS,KAAK,CAAA,EAAmB;AAC/B,EAAA,OAAO,IAAI,EAAA,GAAK,CAAA,CAAA,EAAI,CAAC,CAAA,CAAA,GAAK,OAAO,CAAC,CAAA;AACpC;AAGA,SAAS,iBAAiB,IAAA,EAAkD;AAC1E,EAAA,IAAI,SAAS,IAAA,IAAQ,OAAO,IAAA,KAAS,QAAA,SAAiB,EAAC;AACvD,EAAA,MAAM,CAAA,GAAI,IAAA;AACV,EAAA,MAAM,MAAyC,EAAC;AAChD,EAAA,IAAI,OAAO,CAAA,CAAE,KAAA,KAAU,QAAA,IAAY,CAAA,CAAE,MAAM,MAAA,GAAS,CAAA,EAAG,GAAA,CAAI,KAAA,GAAQ,CAAA,CAAE,KAAA;AACrE,EAAA,IAAI,OAAO,CAAA,CAAE,IAAA,KAAS,QAAA,IAAY,CAAA,CAAE,KAAK,MAAA,GAAS,CAAA,EAAG,GAAA,CAAI,IAAA,GAAO,CAAA,CAAE,IAAA;AAClE,EAAA,OAAO,GAAA;AACT;AAEA,SAAS,iBAAA,CAAkB,GAAA,EAAa,IAAA,EAAiB,KAAA,EAAgB,IAAA,EAAuB;AAC9F,EAAA,MAAM,KAAA,GAAQ,cAAc,IAAI,CAAA;AAChC,EAAA,MAAM,YACJ,KAAA,KAAU,MAAA,GAAY,6BAA6B,UAAA,CAAW,KAAK,CAAC,CAAA,KAAA,CAAA,GAAU,EAAA;AAChF,EAAA,MAAM,WAAW,IAAA,KAAS,MAAA,GAAY,2BAA2B,UAAA,CAAW,IAAI,CAAC,CAAA,IAAA,CAAA,GAAS,EAAA;AAC1F,EAAA,OACE,CAAA,2DAAA,EACoC,IAAA,CAAK,GAAG,CAAC,CAAA,MAAA,EAAM,WAAW,KAAK,CAAC,CAAA,MAAA,CAAA,GACpE,SAAA,GACA,QAAA,GACA,CAAA,MAAA,CAAA;AAEJ;AAOA,SAAS,aAAA,CAAmC,MAAS,IAAA,EAA+B;AAClF,EAAA,MAAM,EAAA,GAAK,cAAc,IAAI,CAAA;AAC7B,EAAA,OAAO,GAAG,IAAI,CAAA;AAChB;AAEA,SAAS,kBAAA,CAAmB,KAAmB,GAAA,EAAwB;AACrE,EAAA,IAAI,GAAA,CAAI,IAAA,KAAS,MAAA,EAAQ,OAAO,EAAA;AAChC,EAAA,IAAI,GAAA,CAAI,eAAe,MAAA,EAAW;AAChC,IAAA,OAAO,CAAA,iBAAA,EAAoB,UAAA,CAAW,GAAA,CAAI,IAAI,CAAC,CAAA;AAAA,EAA0B,UAAA,CAAW,GAAA,CAAI,UAAU,CAAC,CAAA,MAAA,CAAA;AAAA,EACrG;AACA,EAAA,IAAI,IAAI,IAAA,KAAS,IAAA,IAAQ,GAAA,CAAI,IAAA,KAAS,QAAW,OAAO,EAAA;AAExD,EAAA,MAAM,IAAA,GAAO,aAAA,CAAc,GAAA,CAAI,IAAA,EAAM,IAAI,IAAqC,CAAA;AAE9E,EAAA,GAAA,CAAI,UAAA,IAAc,CAAA;AAClB,EAAA,MAAM,MAAM,GAAA,CAAI,UAAA;AAChB,EAAA,MAAM,EAAE,KAAA,EAAO,IAAA,EAAK,GAAI,gBAAA,CAAiB,IAAI,IAAI,CAAA;AACjD,EAAA,MAAM,EAAA,GAAK,CAAA,QAAA,EAAW,IAAA,CAAK,GAAG,CAAC,CAAA,CAAA;AAC/B,EAAA,GAAA,CAAI,SAAS,IAAA,CAAK;AAAA,IAChB,EAAA;AAAA,IACA,GAAA;AAAA,IACA,KAAA,EAAO,aAAA,CAAc,GAAA,CAAI,IAAI,CAAA;AAAA,IAC7B,GAAI,KAAA,KAAU,MAAA,GAAY,EAAE,KAAA,KAAU;AAAC,GACxC,CAAA;AACD,EAAA,MAAM,OAAO,iBAAA,CAAkB,GAAA,EAAK,GAAA,CAAI,IAAA,EAAM,OAAO,IAAI,CAAA;AAEzD,EAAA,OAAO,CAAA,aAAA,EAAgB,EAAE,CAAA,wBAAA,EAA2B,IAAI,GAAG,IAAI,CAAA,UAAA,CAAA;AACjE;AAEA,SAAS,aAAA,CAAc,KAAc,GAAA,EAAwB;AAC3D,EAAA,IAAI,IAAI,IAAA,KAAS,UAAA,EAAY,OAAO,WAAA,CAAY,IAAI,IAAI,CAAA;AACxD,EAAA,OAAO,kBAAA,CAAmB,KAAK,GAAG,CAAA;AACpC;AAGO,SAAS,cAAA,CACd,OACA,IAAA,EACQ;AACR,EAAA,IAAI,GAAA,GAAM,WAAW,KAAK,CAAA;AAC1B,EAAA,IAAI,SAAS,MAAA,EAAW;AACtB,IAAA,KAAA,MAAW,CAAA,IAAK,MAAA,CAAO,IAAA,CAAK,IAAI,CAAA,EAAG,GAAA,IAAO,CAAA,EAAG,CAAC,CAAA,CAAA,EAAI,IAAA,CAAK,CAAC,CAAC,CAAA,CAAA,CAAA;AAAA,EAC3D;AACA,EAAA,OAAO,GAAA;AACT;AASO,SAAS,mBAAA,CAAoB,GAAA,EAAe,IAAA,GAA2B,EAAC,EAAkB;AAC/F,EAAA,MAAM,KAAA,GAAQ,GAAA,CAAI,IAAA,EAAM,KAAA,IAAS,UAAA;AACjC,EAAA,MAAM,KAAA,GAAQ,KAAK,KAAA,IAAS,aAAA;AAC5B,EAAA,MAAM,SAAA,GAAY,cAAA,CAAe,KAAA,EAAO,IAAA,CAAK,SAAS,CAAA;AACtD,EAAA,MAAM,MAAiB,EAAE,UAAA,EAAY,CAAA,EAAG,QAAA,EAAU,EAAC,EAAE;AACrD,EAAA,MAAM,OACJ,aAAA,EAAc,GACd,YAAY,GAAA,CAAI,IAAI,IACpB,GAAA,CAAI,QAAA,CAAS,GAAA,CAAI,CAAC,MAAM,aAAA,CAAc,CAAA,EAAG,GAAG,CAAC,CAAA,CAAE,KAAK,EAAE,CAAA;AACxD,EAAA,OAAO,EAAE,KAAK,QAAA,EAAU,SAAA,EAAW,MAAM,KAAA,EAAO,QAAA,EAAU,IAAI,QAAA,EAAS;AACzE;;;AChIO,SAAS,cAAA,CAAe,GAAA,EAAe,IAAA,GAAsB,EAAC,EAAW;AAC9E,EAAA,MAAM,KAAA,GAAQ,mBAAA,CAAoB,GAAA,EAAK,IAAI,CAAA;AAC3C,EAAA,MAAM,UAAA,GACJ,KAAA,CAAM,SAAA,CAAU,MAAA,GAAS,CAAA,GAAI;AAAA,aAAA,EAAkB,KAAA,CAAM,SAAS,CAAA,SAAA,CAAA,GAAc,EAAA;AAC9E,EAAA,OACE,CAAA;AAAA;AAAA;AAAA;AAAA;AAAA,OAAA,EAKU,UAAA,CAAW,KAAA,CAAM,KAAK,CAAC,CAAA;AAAA,OAAA,EACvB,KAAA,CAAM,GAAG,CAAA,QAAA,CAAA,GACnB,UAAA,GACA;AAAA;AAAA;AAAA;AAAA,CAAA,GAGA,MAAM,IAAA,GACN,CAAA;AAAA;AAAA;AAAA,CAAA;AAIJ","file":"index.js","sourcesContent":["/**\n * The house CSS — ported verbatim from `resources/doc-studio.jsx`.\n *\n * All output is namespaced under `.docskin` so the stylesheet can coexist with\n * a host page's own styles. Theme switching works by overriding the CSS\n * variables on the `.docskin` root (see {@link themes}).\n *\n * Exported as a single string so it can be inlined into a `<style>` tag in the\n * standalone HTML produced by {@link renderDocument} (or copied verbatim into\n * a static stylesheet).\n */\nexport const houseCss = `*{box-sizing:border-box;margin:0;padding:0;}\nhtml{scroll-behavior:smooth;}\n/* Design tokens live on :root so a theme (applied as :root overrides) reaches\n the whole page — body chrome included, not just .docskin content. */\n:root{\n --navy:#0e54a1; --navy-tint:#b5d4f2; --blue:#1a6dbe; --light-blue:#e5eff8;\n --charcoal:#1a1a2e; --slate:#374151; --gray:#6b7280; --light-gray:#f3f4f6;\n --rule:#d1d5db; --highlight:#f7952c; --highlight-soft:#fde7cd;\n --positive:#1f9747; --positive-soft:#dcf1e2; --negative:#991b1b; --negative-soft:#fee2e2;\n --purple:#6b21a8; --purple-soft:#ede9fe; --teal:#0f766e; --teal-soft:#ccfbf1; --white:#fff;\n --radius:0px;\n --font-display:Georgia,\"Times New Roman\",serif;\n --font-body:Arial,\"Helvetica Neue\",sans-serif;\n --font-mono:\"Consolas\",\"Monaco\",\"Courier New\",monospace;\n}\nbody{background:var(--white);color:var(--charcoal);font-family:var(--font-body);font-size:14px;line-height:1.55;}\n.docskin{\n background:var(--white); color:var(--charcoal); font-family:var(--font-body); font-size:14px; line-height:1.55;\n max-width:1180px; margin:0 auto; padding:0 56px 128px;\n}\n.docskin .cover-bar{height:8px;background:var(--navy);margin:0 -56px 36px;}\n.docskin .cover-pad{padding:0 0 40px;margin-bottom:56px;border-bottom:1px solid var(--rule);}\n.docskin .cover-meta{display:flex;justify-content:space-between;flex-wrap:wrap;gap:16px;font-size:11px;text-transform:uppercase;letter-spacing:.12em;color:var(--gray);font-weight:600;margin-bottom:32px;}\n.docskin .cover-meta .accent{color:var(--highlight);}\n.docskin .cover-title{font-family:var(--font-display);font-weight:700;font-size:clamp(32px,4.4vw,50px);line-height:1.1;letter-spacing:-.02em;color:var(--navy);margin:0 0 20px;}\n.docskin .cover-sub{font-size:17px;line-height:1.5;color:var(--slate);max-width:820px;margin:0 0 36px;}\n.docskin .section{padding:0;margin-bottom:64px;}\n.docskin .section > *:last-child{margin-bottom:0;}\n.docskin .section-num{font-size:11px;text-transform:uppercase;letter-spacing:.14em;color:var(--highlight);font-weight:700;margin-bottom:8px;}\n.docskin .section-head{margin-bottom:28px;padding-bottom:16px;border-bottom:2px solid var(--navy);}\n.docskin .section-head .section-title{border-bottom:0;padding-bottom:0;margin-bottom:14px;}\n.docskin .section-title{font-family:var(--font-display);font-weight:700;font-size:clamp(24px,3vw,32px);line-height:1.15;letter-spacing:-.015em;color:var(--navy);margin:0 0 14px;padding-bottom:12px;border-bottom:2px solid var(--navy);}\n.docskin .section-lede{font-size:14.5px;color:var(--slate);line-height:1.55;max-width:820px;margin:0;}\n.docskin .section-block{margin-bottom:64px;}\n.docskin .section-block:last-child{margin-bottom:0;}\n.docskin .diagram{margin:28px 0 36px;border:1px solid var(--rule);background:var(--white);padding:22px 26px 18px;border-radius:var(--radius);}\n.docskin .diagram-head{display:flex;flex-wrap:wrap;align-items:baseline;gap:10px;padding-bottom:12px;margin-bottom:16px;border-bottom:1px dashed var(--rule);}\n.docskin .diagram-tag{font-family:var(--font-mono);font-size:10px;font-weight:700;padding:3px 9px;background:var(--navy);color:var(--white);letter-spacing:.08em;text-transform:uppercase;}\n.docskin .diagram-tag.post{background:var(--navy);} .docskin .diagram-tag.get{background:var(--positive);} .docskin .diagram-tag.c4{background:var(--blue);}\n.docskin .diagram-title{font-family:var(--font-display);font-weight:700;font-size:16px;color:var(--charcoal);flex:1;}\n.docskin .diagram-fignum{font-size:10px;color:var(--gray);text-transform:uppercase;letter-spacing:.1em;font-weight:700;}\n.docskin .diagram-desc{font-size:13px;color:var(--slate);margin:0 0 12px;}\n.docskin .diagram svg{display:block;margin:0 auto;max-width:100%;height:auto;}\n/* sequence */\n.docskin .lane-head{fill:var(--navy);} .docskin .lane-head.ext{fill:var(--slate);}\n.docskin .lane-head-text{fill:var(--white);font-family:var(--font-body);font-size:12px;font-weight:700;text-anchor:middle;}\n.docskin .lane-head-sub{fill:var(--navy-tint);font-family:var(--font-mono);font-size:9px;text-anchor:middle;letter-spacing:.06em;}\n.docskin .lane-head-sub.ext{fill:#cbd5e1;}\n.docskin .lifeline{stroke:var(--gray);stroke-width:1;stroke-dasharray:3 3;}\n.docskin .activation{fill:var(--light-blue);stroke:var(--navy);stroke-width:1;} .docskin .activation.pg{fill:var(--positive-soft);stroke:var(--positive);}\n.docskin .msg-line{stroke:var(--charcoal);stroke-width:1.2;fill:none;}\n.docskin .msg-line.dashed{stroke-dasharray:5 3;} .docskin .msg-line.err{stroke:var(--negative);stroke-width:1.4;}\n.docskin .msg-text{fill:var(--charcoal);font-family:var(--font-mono);font-size:10.5px;}\n.docskin .msg-text.em{fill:var(--navy);font-weight:700;} .docskin .msg-text.err{fill:var(--negative);font-weight:700;} .docskin .msg-text.note{fill:var(--gray);font-style:italic;}\n.docskin .step-badge{fill:var(--navy);} .docskin .step-badge.err{fill:var(--negative);}\n.docskin .step-badge-text{fill:var(--white);font-family:var(--font-mono);font-size:10px;font-weight:700;text-anchor:middle;}\n.docskin .seq-steps{margin-top:16px;padding:14px 18px;background:var(--light-gray);border:1px solid var(--rule);}\n.docskin .seq-steps-title{font-size:10px;text-transform:uppercase;letter-spacing:.12em;color:var(--navy);font-weight:700;margin-bottom:8px;}\n.docskin .seq-steps ol{list-style:none;counter-reset:step;padding:0;margin:0;}\n.docskin .seq-steps li{counter-increment:step;padding:7px 0 8px 40px;position:relative;border-bottom:1px solid var(--rule);}\n.docskin .seq-steps li:last-child{border-bottom:none;}\n.docskin .seq-steps li::before{content:counter(step);position:absolute;left:0;top:7px;width:26px;height:20px;background:var(--navy);color:var(--white);font-family:var(--font-mono);font-size:11px;font-weight:700;text-align:center;line-height:20px;border-radius:2px;}\n.docskin .seq-steps li.err::before{background:var(--negative);}\n.docskin .step-actor{font-family:var(--font-mono);font-size:11px;font-weight:700;color:var(--navy);margin-right:8px;text-transform:uppercase;letter-spacing:.06em;}\n.docskin .step-actor.err{color:var(--negative);}\n.docskin .step-summary{font-size:13px;color:var(--charcoal);}\n/* c4 */\n.docskin .c4-name{font-family:var(--font-display);font-size:14px;font-weight:700;}\n.docskin .c4-tech{font-family:var(--font-mono);font-size:9.5px;}\n.docskin .c4-desc{font-family:var(--font-body);font-size:10px;}\n.docskin .c4-chip{font-family:var(--font-body);font-size:8px;font-weight:700;letter-spacing:.1em;text-transform:uppercase;}\n.docskin .edge-label{font-family:var(--font-body);font-size:9.5px;fill:var(--slate);text-anchor:middle;}\n.docskin .edge-label.err{fill:var(--negative);font-weight:700;}\n.docskin .c4-boundary{fill:none;stroke:var(--navy);stroke-width:1.4;stroke-dasharray:8 5;}\n.docskin .c4-boundary-label{font-family:var(--font-body);font-size:10px;font-weight:700;fill:var(--navy);letter-spacing:.08em;text-transform:uppercase;}\n.docskin .legend{display:flex;flex-wrap:wrap;gap:8px 16px;margin-top:14px;padding-top:12px;border-top:1px dashed var(--rule);}\n.docskin .legend .item{display:flex;align-items:center;gap:6px;font-size:11px;color:var(--slate);}\n.docskin .legend .sw{width:13px;height:13px;border-radius:3px;}\n/* code block */\n.docskin .code-block{margin:12px 0 16px;border:1px solid var(--rule);}\n.docskin .code-header{display:flex;justify-content:space-between;padding:6px 14px;background:var(--light-gray);font-family:var(--font-mono);font-size:11px;font-weight:700;color:var(--slate);border-bottom:1px solid var(--rule);letter-spacing:.04em;}\n.docskin .code-block pre{padding:14px 16px;font-family:var(--font-mono);font-size:12px;line-height:1.55;color:var(--charcoal);overflow-x:auto;background:var(--white);white-space:pre;margin:0;}\n.docskin .code-block .kw{color:var(--navy);font-weight:700;} .docskin .code-block .com{color:var(--gray);font-style:italic;}\n.docskin .code-block .str{color:var(--positive);} .docskin .code-block .num{color:var(--purple);} .docskin .code-block .fn{color:var(--blue);} .docskin .code-block .ty{color:var(--teal);}\n/* er */\n.docskin .er-head-text{fill:#fff;font-family:var(--font-display);font-size:13px;font-weight:700;text-anchor:middle;}\n.docskin .er-col{font-family:var(--font-mono);font-size:10.5px;fill:var(--charcoal);} .docskin .er-col.dim{fill:var(--gray);}\n.docskin .er-key{font-family:var(--font-mono);font-size:9px;font-weight:700;fill:var(--navy);} .docskin .er-key.fk{fill:var(--highlight);}\n.docskin .er-rowline{stroke:var(--light-gray);stroke-width:1;}\n/* block / state / flow shared text */\n.docskin .blk-name{font-family:var(--font-display);font-size:13px;font-weight:700;}\n.docskin .blk-tech{font-family:var(--font-mono);font-size:9.5px;}\n.docskin .blk-chip{font-family:var(--font-body);font-size:8px;font-weight:700;letter-spacing:.1em;text-transform:uppercase;}\n.docskin .grp-label{font-family:var(--font-body);font-size:10px;font-weight:700;letter-spacing:.06em;text-transform:uppercase;}\n.docskin .sm-name{font-family:var(--font-display);font-size:13px;font-weight:700;text-anchor:middle;}\n.docskin .fc-label{font-family:var(--font-display);font-size:12px;font-weight:700;text-anchor:middle;}\n.docskin .endpoint-card{border:1px solid var(--rule);margin:16px 0;padding:18px 22px;background:var(--white);}\n.docskin .endpoint-header{display:flex;align-items:center;gap:12px;margin-bottom:10px;padding-bottom:10px;border-bottom:1px dashed var(--rule);}\n.docskin .endpoint-method{font-family:var(--font-mono);font-size:11px;font-weight:700;padding:4px 10px;color:var(--white);letter-spacing:.08em;text-transform:uppercase;}\n.docskin .endpoint-method.get{background:var(--positive);} .docskin .endpoint-method.post{background:var(--navy);} .docskin .endpoint-method.patch{background:var(--highlight);} .docskin .endpoint-method.delete{background:var(--negative);} .docskin .endpoint-method.put{background:var(--blue);}\n.docskin .endpoint-path{font-family:var(--font-mono);font-size:15px;font-weight:700;color:var(--charcoal);flex:1;}\n.docskin .endpoint-status{font-family:var(--font-mono);font-size:11.5px;color:var(--positive);font-weight:700;}\n.docskin .endpoint-desc{font-size:13px;color:var(--slate);margin:0 0 8px;}\n.docskin .endpoint-card h4{font-size:11px;text-transform:uppercase;letter-spacing:.12em;font-weight:700;color:var(--highlight);margin:14px 0 6px;}\n.docskin .endpoint-card ul{margin:0 0 0 20px;} .docskin .endpoint-card li{font-size:13px;margin-bottom:3px;}\n.docskin code{font-family:var(--font-mono);font-size:.86em;background:var(--light-gray);padding:2px 6px;border-radius:2px;border:1px solid var(--rule);}\n.docskin .transition-table{width:100%;border-collapse:collapse;margin:16px 0 8px;font-size:12px;}\n.docskin .transition-table thead{background:var(--navy);color:#fff;}\n.docskin .transition-table th{text-align:left;padding:8px 10px;font-size:9.5px;text-transform:uppercase;letter-spacing:.1em;}\n.docskin .transition-table td{padding:8px 10px;border-bottom:1px solid var(--rule);vertical-align:top;}\n.docskin .pill{display:inline-block;font-family:var(--font-mono);font-size:10px;font-weight:700;padding:2px 7px;border-radius:2px;text-transform:uppercase;}\n.docskin .pill-init{background:var(--light-gray);color:var(--slate);border:1px solid var(--rule);}\n.docskin .pill-active{background:var(--positive-soft);color:var(--positive);border:1px solid var(--positive);}\n.docskin .pill-wait{background:var(--highlight-soft);color:var(--highlight);border:1px solid var(--highlight);}\n.docskin .pill-end{background:var(--charcoal);color:#fff;}\n/* presentation: comparison table */\n.docskin .pres-table{width:100%;border-collapse:collapse;margin:14px 0;font-size:13px;}\n.docskin .pres-table thead{background:var(--navy);color:#fff;}\n.docskin .pres-table th{padding:9px 12px;text-align:left;font-family:var(--font-body);font-size:10.5px;text-transform:uppercase;letter-spacing:.08em;font-weight:700;}\n.docskin .pres-table th.r,.docskin .pres-table td.r{text-align:right;} .docskin .pres-table th.c,.docskin .pres-table td.c{text-align:center;}\n.docskin .pres-table th.hi{background:var(--highlight);}\n.docskin .pres-table td{padding:9px 12px;border-bottom:1px solid var(--rule);}\n.docskin .pres-table tbody tr:nth-child(even){background:var(--light-gray);}\n.docskin .pres-table td.lead{font-weight:700;color:var(--navy);font-family:var(--font-display);}\n.docskin .pres-table td.hi{background:var(--highlight-soft);}\n.docskin .cell-pos{color:var(--positive);font-weight:700;} .docskin .cell-neg{color:var(--negative);font-weight:700;} .docskin .cell-warn{color:var(--highlight);font-weight:700;} .docskin .cell-muted{color:var(--gray);}\n.docskin .badge{display:inline-flex;align-items:center;justify-content:center;width:20px;height:20px;border-radius:50%;font-size:12px;font-weight:700;}\n.docskin .badge.yes{background:var(--positive-soft);color:var(--positive);} .docskin .badge.no{background:var(--negative-soft);color:var(--negative);}\n.docskin .tbl-note{font-size:11px;color:var(--gray);font-style:italic;margin-top:6px;}\n/* presentation: stat cards */\n.docskin .stat-row{display:flex;flex-wrap:wrap;gap:14px;margin:16px 0;}\n.docskin .stat-card{flex:1 1 150px;border:1px solid var(--rule);border-top:3px solid var(--navy);padding:16px 18px;background:var(--white);}\n.docskin .stat-value{font-family:var(--font-display);font-size:30px;font-weight:700;color:var(--navy);line-height:1;}\n.docskin .stat-label{font-size:10.5px;text-transform:uppercase;letter-spacing:.1em;color:var(--gray);font-weight:700;margin-top:8px;}\n.docskin .stat-delta{font-family:var(--font-mono);font-size:12px;font-weight:700;margin-top:6px;}\n.docskin .stat-delta.up{color:var(--positive);} .docskin .stat-delta.down{color:var(--negative);} .docskin .stat-delta.flat{color:var(--gray);}\n/* presentation: timeline */\n.docskin .tl{position:relative;margin:18px 0;padding-left:8px;}\n.docskin .tl::before{content:\"\";position:absolute;left:9px;top:6px;bottom:6px;width:2px;background:var(--rule);}\n.docskin .tl-item{position:relative;padding:0 0 18px 30px;}\n.docskin .tl-item:last-child{padding-bottom:0;}\n.docskin .tl-dot{position:absolute;left:2px;top:2px;width:16px;height:16px;border-radius:50%;background:var(--white);border:3px solid var(--rule);box-sizing:border-box;}\n.docskin .tl-dot.done{background:var(--positive);border-color:var(--positive);} .docskin .tl-dot.current{background:var(--highlight);border-color:var(--highlight);} .docskin .tl-dot.next{border-color:var(--navy);}\n.docskin .tl-date{font-family:var(--font-mono);font-size:10.5px;font-weight:700;color:var(--highlight);text-transform:uppercase;letter-spacing:.06em;}\n.docskin .tl-label{font-family:var(--font-display);font-size:15px;font-weight:700;color:var(--navy);margin:1px 0 2px;}\n.docskin .tl-desc{font-size:12.5px;color:var(--slate);}\n/* presentation: quadrant */\n.docskin .quad-axis{stroke:var(--charcoal);stroke-width:1.5;}\n.docskin .quad-end{font-family:var(--font-body);font-size:10px;font-weight:700;fill:var(--gray);text-transform:uppercase;letter-spacing:.06em;}\n.docskin .quad-title{font-family:var(--font-body);font-size:11px;font-weight:700;fill:var(--navy);text-transform:uppercase;letter-spacing:.08em;}\n.docskin .quad-pt-label{font-family:var(--font-body);font-size:11px;font-weight:700;fill:var(--charcoal);}\n.docskin .toc{margin:18px 0 6px;padding:14px 20px;background:var(--light-gray);border:1px solid var(--rule);border-left:4px solid var(--highlight);}\n.docskin .toc-title{font-size:10px;text-transform:uppercase;letter-spacing:.12em;color:var(--navy);font-weight:700;margin-bottom:8px;}\n.docskin .toc ol{margin:0;padding-left:20px;} .docskin .toc li{font-size:13px;margin-bottom:4px;color:var(--slate);}\n.docskin .toc li span{color:var(--gray);font-family:var(--font-mono);font-size:11px;}\n/* swimlane */\n.docskin .sl-lane-label{font-family:var(--font-display);font-size:12px;font-weight:700;fill:#fff;}\n.docskin .sl-step{font-family:var(--font-body);font-size:11px;font-weight:700;text-anchor:middle;}\n/* callouts */\n.docskin .callout{border:1px solid var(--rule);border-left:4px solid var(--navy);padding:12px 16px;margin:10px 0;}\n.docskin .callout.note{border-left-color:var(--navy);background:var(--light-blue);} .docskin .callout.tip{border-left-color:var(--positive);background:var(--positive-soft);} .docskin .callout.warn{border-left-color:var(--highlight);background:var(--highlight-soft);} .docskin .callout.danger{border-left-color:var(--negative);background:var(--negative-soft);}\n.docskin .callout-title{font-size:10.5px;text-transform:uppercase;letter-spacing:.1em;font-weight:700;margin-bottom:4px;}\n.docskin .callout.note .callout-title{color:var(--navy);} .docskin .callout.tip .callout-title{color:var(--positive);} .docskin .callout.warn .callout-title{color:#b45309;} .docskin .callout.danger .callout-title{color:var(--negative);}\n.docskin .callout-body{font-size:13px;color:var(--slate);}\n/* prose */\n.docskin .prose h2{font-family:var(--font-display);font-weight:700;font-size:clamp(24px,3vw,32px);line-height:1.15;letter-spacing:-.015em;color:var(--navy);margin:40px 0 14px;padding-bottom:12px;border-bottom:2px solid var(--navy);}\n.docskin .prose h2:first-child{margin-top:0;}\n.docskin .prose h3{font-family:var(--font-display);font-weight:700;font-size:19px;letter-spacing:-.005em;color:var(--navy);margin:36px 0 12px;}\n.docskin .prose h4{font-size:11px;text-transform:uppercase;letter-spacing:.12em;font-weight:700;color:var(--highlight);margin:22px 0 8px;}\n.docskin .prose p{font-size:14px;color:var(--charcoal);margin:0 0 14px;line-height:1.6;max-width:880px;}\n.docskin .prose ul,.docskin .prose ol{margin:0 0 14px 22px;}\n.docskin .prose li{font-size:13.5px;color:var(--charcoal);margin-bottom:4px;max-width:880px;line-height:1.55;}\n.docskin .prose blockquote{border-left:3px solid var(--highlight);padding:4px 14px;margin:14px 0;color:var(--slate);font-style:italic;font-family:var(--font-display);}\n.docskin .prose code{font-family:var(--font-mono);font-size:.86em;background:var(--light-gray);padding:2px 6px;border-radius:2px;color:var(--charcoal);border:1px solid var(--rule);}\n.docskin .prose strong{font-weight:700;color:var(--charcoal);}\n.docskin .prose em{font-style:italic;}\n/* glossary */\n.docskin .glossary{margin:10px 0;}\n.docskin .glossary .row{display:grid;grid-template-columns:170px 1fr;gap:14px;padding:9px 0;border-bottom:1px solid var(--rule);}\n.docskin .glossary dt{font-family:var(--font-mono);font-size:13px;font-weight:700;color:var(--navy);}\n.docskin .glossary dd{margin:0;font-size:13px;color:var(--slate);}\n/* pros / cons */\n.docskin .pc{display:grid;grid-template-columns:1fr 1fr;gap:16px;margin:12px 0;}\n.docskin .pc-col{border:1px solid var(--rule);padding:14px 16px;}\n.docskin .pc-col.pro{border-top:3px solid var(--positive);} .docskin .pc-col.con{border-top:3px solid var(--negative);}\n.docskin .pc-head{font-size:11px;text-transform:uppercase;letter-spacing:.1em;font-weight:700;margin-bottom:8px;}\n.docskin .pc-col.pro .pc-head{color:var(--positive);} .docskin .pc-col.con .pc-head{color:var(--negative);}\n.docskin .pc-item{font-size:13px;color:var(--slate);padding:4px 0 4px 22px;position:relative;}\n.docskin .pc-item::before{position:absolute;left:0;top:4px;font-weight:700;}\n.docskin .pc-col.pro .pc-item::before{content:\"\\\\2713\";color:var(--positive);} .docskin .pc-col.con .pc-item::before{content:\"\\\\2717\";color:var(--negative);}\n/* current / target */\n.docskin .ct{display:flex;align-items:stretch;margin:12px 0;}\n.docskin .ct-panel{flex:1;border:1px solid var(--rule);padding:14px 18px;}\n.docskin .ct-panel.cur{background:var(--light-gray);} .docskin .ct-panel.tgt{border-top:3px solid var(--navy);}\n.docskin .ct-arrow{display:flex;align-items:center;padding:0 14px;color:var(--highlight);font-size:22px;font-weight:700;}\n.docskin .ct-label{font-size:11px;text-transform:uppercase;letter-spacing:.1em;font-weight:700;color:var(--gray);margin-bottom:8px;}\n.docskin .ct-panel.tgt .ct-label{color:var(--navy);}\n.docskin .ct-item{font-size:13px;color:var(--slate);padding:3px 0;}\n/* kanban */\n.docskin .kanban{display:flex;gap:14px;margin:12px 0;overflow-x:auto;}\n.docskin .kan-col{flex:1 1 0;min-width:150px;background:var(--light-gray);border:1px solid var(--rule);}\n.docskin .kan-head{background:var(--navy);color:#fff;font-size:11px;text-transform:uppercase;letter-spacing:.08em;font-weight:700;padding:8px 12px;}\n.docskin .kan-card{background:var(--white);border:1px solid var(--rule);border-left:3px solid var(--highlight);margin:8px;padding:9px 11px;}\n.docskin .kan-card-title{font-size:13px;font-weight:700;color:var(--charcoal);}\n.docskin .kan-card-tag{display:inline-block;font-family:var(--font-mono);font-size:9px;font-weight:700;text-transform:uppercase;letter-spacing:.06em;color:var(--gray);margin-top:4px;}\n/* pass 2 chart labels */\n.docskin .dfd-name{font-family:var(--font-display);font-size:12px;font-weight:700;text-anchor:middle;}\n.docskin .dfd-num{font-family:var(--font-mono);font-size:9px;font-weight:700;}\n.docskin .gantt-label{font-family:var(--font-body);font-size:11px;fill:var(--charcoal);}\n.docskin .gantt-head{font-family:var(--font-mono);font-size:9.5px;fill:var(--gray);text-anchor:middle;}\n.docskin .funnel-label{font-family:var(--font-display);font-size:13px;font-weight:700;fill:#fff;text-anchor:middle;}\n.docskin .funnel-val{font-family:var(--font-mono);font-size:11px;fill:#fff;text-anchor:middle;opacity:.9;}\n.docskin .pyr-label{font-family:var(--font-display);font-size:13px;font-weight:700;fill:#fff;text-anchor:middle;}\n.docskin .pyr-desc{font-family:var(--font-body);font-size:10px;fill:#fff;text-anchor:middle;opacity:.85;}\n/* indented tree */\n.docskin .tree-list{margin:10px 0;font-size:13px;}\n.docskin .tree-row{display:flex;align-items:baseline;padding:3px 0;}\n.docskin .tree-row .tw{color:var(--gray);margin-right:8px;font-family:var(--font-mono);font-size:11px;}\n.docskin .tree-row.branch .tw{color:var(--navy);}\n.docskin .tree-row .tlabel{color:var(--charcoal);font-family:var(--font-mono);}\n.docskin .tree-row.branch .tlabel{font-weight:700;color:var(--navy);}\n.docskin .tree-row .tnote{color:var(--gray);font-size:11px;margin-left:10px;font-family:var(--font-body);font-style:italic;}\n/* agenda */\n.docskin .agenda{margin:10px 0;}\n.docskin .agenda-row{display:grid;grid-template-columns:88px 1fr;gap:14px;padding:10px 0;border-bottom:1px solid var(--rule);}\n.docskin .agenda-time{font-family:var(--font-mono);font-size:12px;font-weight:700;color:var(--navy);}\n.docskin .agenda-dur{font-family:var(--font-mono);font-size:10px;color:var(--gray);margin-top:2px;}\n.docskin .agenda-title{font-family:var(--font-display);font-size:14px;font-weight:700;color:var(--charcoal);}\n.docskin .agenda-owner{font-size:10.5px;color:var(--highlight);font-weight:700;text-transform:uppercase;letter-spacing:.05em;margin-left:8px;}\n.docskin .agenda-desc{font-size:12.5px;color:var(--slate);margin-top:2px;}\n/* tracker */\n.docskin .trk{width:100%;border-collapse:collapse;margin:12px 0;font-size:13px;}\n.docskin .trk thead{background:var(--navy);color:#fff;} .docskin .trk th{padding:8px 10px;text-align:left;font-size:9.5px;text-transform:uppercase;letter-spacing:.08em;font-weight:700;}\n.docskin .trk td{padding:8px 10px;border-bottom:1px solid var(--rule);vertical-align:middle;}\n.docskin .trk tr.done .trk-task{text-decoration:line-through;color:var(--gray);}\n.docskin .st{display:inline-block;font-family:var(--font-mono);font-size:9.5px;font-weight:700;padding:2px 8px;border-radius:10px;text-transform:uppercase;letter-spacing:.04em;}\n.docskin .st.todo{background:var(--light-gray);color:var(--slate);border:1px solid var(--rule);} .docskin .st.doing{background:var(--highlight-soft);color:#b45309;} .docskin .st.done{background:var(--positive-soft);color:var(--positive);} .docskin .st.blocked{background:var(--negative-soft);color:var(--negative);}\n.docskin .pri{font-family:var(--font-mono);font-size:10px;font-weight:700;} .docskin .pri.high{color:var(--negative);} .docskin .pri.med{color:var(--highlight);} .docskin .pri.low{color:var(--gray);}\n/* cluster */\n.docskin .cl-head{font-family:var(--font-display);font-size:13px;font-weight:700;fill:#fff;}\n.docskin .cl-kind{font-family:var(--font-mono);font-size:9px;fill:#cfe0f3;text-anchor:end;text-transform:uppercase;letter-spacing:.06em;}\n/* user story */\n.docskin .story{border:1px solid var(--rule);border-left:4px solid var(--navy);padding:18px 22px;margin:12px 0;background:var(--white);}\n.docskin .story-stmt{font-family:var(--font-display);font-size:18px;line-height:1.55;color:var(--charcoal);}\n.docskin .story-stmt b{color:var(--navy);}\n.docskin .story-meta{display:flex;gap:8px;margin-top:12px;flex-wrap:wrap;}\n.docskin .story-chip{font-family:var(--font-mono);font-size:10px;font-weight:700;text-transform:uppercase;letter-spacing:.05em;padding:3px 9px;border-radius:3px;background:var(--light-gray);color:var(--slate);border:1px solid var(--rule);}\n.docskin .ac-title{font-size:10.5px;text-transform:uppercase;letter-spacing:.12em;color:var(--highlight);font-weight:700;margin:16px 0 8px;}\n.docskin .ac-item{border:1px solid var(--rule);padding:10px 14px;margin-bottom:8px;background:var(--white);}\n.docskin .gwt{display:grid;grid-template-columns:60px 1fr;gap:4px 12px;font-size:13px;}\n.docskin .gwt .k{font-family:var(--font-mono);font-size:10px;font-weight:700;text-transform:uppercase;letter-spacing:.06em;padding-top:1px;}\n.docskin .gwt .k.g{color:var(--positive);} .docskin .gwt .k.w{color:var(--navy);} .docskin .gwt .k.t{color:var(--highlight);}\n.docskin .gwt .v{color:var(--charcoal);}\n.docskin .links-row{display:flex;gap:8px;flex-wrap:wrap;}\n.docskin .link-chip{display:inline-flex;align-items:center;gap:6px;font-size:12px;font-weight:700;color:var(--navy);border:1px solid var(--navy);background:var(--white);padding:5px 11px;border-radius:20px;cursor:pointer;}\n.docskin .link-chip .lt{color:var(--gray);font-family:var(--font-mono);font-size:9px;text-transform:uppercase;letter-spacing:.06em;}\n.docskin .footer{margin-top:8px;padding:18px 32px 28px;border-top:2px solid var(--navy);font-size:11px;color:var(--gray);text-transform:uppercase;letter-spacing:.1em;font-weight:700;display:flex;justify-content:space-between;flex-wrap:wrap;gap:10px;}\n.docskin .footer .accent{color:var(--highlight);}\n.docskin .layer-label{font-family:var(--font-display);font-size:13px;font-weight:700;fill:#fff;}\n.docskin .uml-name{font-family:var(--font-display);font-size:13px;font-weight:700;text-anchor:middle;fill:#0a3a6e;}\n.docskin .uml-stereo{font-family:var(--font-body);font-size:9px;font-style:italic;text-anchor:middle;fill:#6b7280;}\n.docskin .uml-row{font-family:var(--font-mono);font-size:10.5px;fill:var(--charcoal);}\n.docskin .uml-sep{stroke:#0e54a1;stroke-width:1;}\n.docskin .ft-note{font-family:var(--font-mono);font-size:9px;}\n.docskin .tree-link{stroke:#9ca3af;stroke-width:1.3;fill:none;}\n/* wireframe / UI mockups */\n.docskin .wf-h{font-family:var(--font-display);font-size:18px;font-weight:700;}\n.docskin .wf-sub{font-family:var(--font-body);font-size:12px;font-weight:600;}\n.docskin .wf-btn{font-family:var(--font-body);font-size:11px;font-weight:700;fill:#fff;}\n.docskin .wf-ph-text{font-family:var(--font-body);font-size:10px;fill:var(--gray);}\n.docskin .wf-status{font-family:var(--font-mono);font-size:9px;fill:var(--charcoal);font-weight:700;}\n.docskin .wf-url{font-family:var(--font-mono);font-size:8.5px;fill:var(--gray);}\n.docskin .wf-tab{font-family:var(--font-body);font-size:8px;}\n.docskin .wf-caption{font-family:var(--font-mono);font-size:10px;fill:var(--gray);letter-spacing:.04em;}\n/* parse error */\n.docskin .err{font-family:var(--font-mono);font-size:12px;color:var(--negative);background:#fdf2f2;border:1px solid #f3c9c9;padding:8px 12px;margin:12px 0;white-space:pre-wrap;}`;\n","/**\n * HTML entity escaping, matching the reference renderer's `esc` semantics.\n *\n * Escapes `&`, `<`, `>`, and `\"`. `null`/`undefined` become the empty string.\n * Non-string values are coerced via `String()`.\n */\n\nconst REPL: Record<string, string> = {\n '&': '&',\n '<': '<',\n '>': '>',\n '\"': '"',\n};\n\n/**\n * Escapes a value for safe insertion into HTML text or attribute content.\n *\n * @param value - The value to escape (any type).\n * @returns The escaped string. Empty string for `null`/`undefined`.\n */\nexport function escapeHtml(value: unknown): string {\n if (value === null || value === undefined) return '';\n return String(value).replace(/[&<>\"]/g, (c) => REPL[c] ?? c);\n}\n","/**\n * Output-safety helpers.\n *\n * Avodado documents are normally authored by trusted hands, but rendered output\n * is also shown in untrusted contexts — the playground renders documents from\n * shared URLs, and any hosted preview renders whatever a visitor pastes. So the\n * renderer treats author-supplied values (colours, link hrefs, prose HTML) as\n * untrusted and neutralises anything that could break out of its target context.\n *\n * These functions are pure and allocation-light; they run on every render.\n */\n\n/**\n * Matches a safe CSS colour value: hex (`#rgb`/`#rgba`/`#rrggbb`/`#rrggbbaa`),\n * `rgb()/rgba()`, `hsl()/hsla()`, or a bare CSS named colour. Anything with a\n * quote, semicolon, angle bracket, or `url(` is rejected — those are the\n * shapes an attacker uses to break out of a `fill=\"…\"` or `style=\"…\"` context.\n */\nconst SAFE_COLOR_RE =\n /^(#[0-9a-fA-F]{3,8}|rgba?\\([\\d.,\\s%]+\\)|hsla?\\([\\d.,\\s%]+\\)|[a-zA-Z]{1,24})$/;\n\n/**\n * Returns `value` if it is a safe CSS colour, otherwise `fallback`.\n *\n * Use this for any author-supplied colour that gets interpolated into an SVG\n * attribute (`fill`, `stroke`) or a `style` declaration.\n *\n * @param value - The candidate colour (any author string, or undefined).\n * @param fallback - The colour to use when `value` is missing or unsafe.\n */\nexport function safeColor(value: string | undefined, fallback: string): string {\n if (value === undefined) return fallback;\n const trimmed = value.trim();\n return SAFE_COLOR_RE.test(trimmed) ? trimmed : fallback;\n}\n\n/** URL schemes that can execute script or smuggle markup. */\nconst DANGEROUS_URL_RE = /^\\s*(javascript|data|vbscript):/i;\n\n/**\n * Returns `url` if its scheme is safe to put in an `href`/`src`, otherwise `#`.\n *\n * Relative URLs, fragments (`#id`), and the usual web schemes pass through;\n * `javascript:`, `data:`, and `vbscript:` are rejected.\n *\n * @param url - The candidate URL.\n */\nexport function safeUrl(url: string): string {\n return DANGEROUS_URL_RE.test(url) ? '#' : url;\n}\n","/**\n * Renders a prose segment to HTML via `marked`.\n *\n * Hardened for untrusted input (the renderer's output is shown in the\n * playground and hosted previews, which render documents from strangers):\n *\n * - Raw HTML is **not** passed through — `marked` v14 emits raw HTML by\n * default, which is an XSS vector. We decline the block `html` and inline\n * `tag` tokenizers so any literal `<tag>` falls through to text and is\n * entity-escaped. This also matches Avodado's house rule: express structure\n * through blocks, never raw HTML.\n * - Link / image hrefs with `javascript:`, `data:`, or `vbscript:` schemes are\n * rewritten to `#` (see {@link safeUrl}).\n *\n * Output is deterministic (no auto heading ids, no smartypants).\n */\n\nimport { Marked, type Tokens } from 'marked';\nimport { safeUrl } from './sanitize.js';\n\nconst marked = new Marked({ gfm: true, breaks: false });\n\nmarked.use({\n tokenizer: {\n // Decline raw HTML at both block and inline level; the text falls through\n // to the paragraph/text tokenizer, which escapes it.\n html(): undefined {\n return undefined;\n },\n tag(): undefined {\n return undefined;\n },\n },\n renderer: {\n link(token: Tokens.Link): string {\n const href = safeUrl(token.href);\n const title = token.title !== null && token.title !== undefined ? ` title=\"${token.title}\"` : '';\n const text = this.parser.parseInline(token.tokens);\n return `<a href=\"${href}\"${title}>${text}</a>`;\n },\n image(token: Tokens.Image): string {\n const href = safeUrl(token.href);\n const title = token.title !== null && token.title !== undefined ? ` title=\"${token.title}\"` : '';\n return `<img src=\"${href}\" alt=\"${token.text}\"${title}>`;\n },\n },\n});\n\n/**\n * Renders Markdown prose to an HTML string wrapped in `<div class=\"prose\">`.\n *\n * @param text - The Markdown source.\n * @returns The HTML output, wrapped in a `prose` div for styling scope.\n */\nexport function renderProse(text: string): string {\n const html = marked.parse(text, { async: false });\n return `<div class=\"prose\">${html}</div>`;\n}\n","/**\n * Meta is rendered as the document cover (not as a body block). The registry\n * entry for `meta` returns an empty string; {@link renderCover} produces the\n * cover from the {@link Document.meta} data.\n *\n * Class names match doc-studio: `.cover-bar`, `.cover-pad`, `.cover-meta`,\n * `.cover-title`, `.cover-sub`.\n */\n\nimport type { MetaData } from '@avodado/core';\nimport { escapeHtml } from '../escape.js';\n\n/** Renders the document cover (banner + meta line + title + optional subtitle). */\nexport function renderCover(meta: MetaData | undefined): string {\n const title = meta?.title ?? 'Untitled';\n const tag = meta?.tag ?? '';\n const subtitle = meta?.subtitle;\n const sub =\n subtitle !== undefined ? `<p class=\"cover-sub\">${escapeHtml(subtitle)}</p>` : '';\n return (\n `<div class=\"cover-bar\"></div>` +\n `<div class=\"cover-pad\">` +\n `<div class=\"cover-meta\"><span>DOCUMENT</span><span class=\"accent\">${escapeHtml(tag)}</span></div>` +\n `<h1 class=\"cover-title\">${escapeHtml(title)}</h1>` +\n sub +\n `</div>`\n );\n}\n\n/**\n * Block-registry entry for `meta`. Always returns empty: the cover is rendered\n * separately by {@link renderCover}, called from {@link renderDocument}.\n */\nexport function renderMetaBlock(): string {\n return '';\n}\n","/**\n * Wraps block content in doc-studio's \"diagram frame\" — a bordered card with\n * a header (tag pill + title + figure number) and optional description.\n *\n * Used by diagram-type blocks (sequence, erd, …) so the output matches\n * doc-studio.jsx's `DiagramFrame` component.\n */\n\nimport type { BlockType } from '@avodado/core';\nimport { escapeHtml } from '../escape.js';\n\ninterface FrameOptions {\n /** Tag pill text (e.g. `SEQUENCE`, `ER`, `POST`). */\n readonly tag: string;\n /** Optional CSS class added to the tag pill (e.g. `post`, `get`). */\n readonly tagClass?: string;\n /** Optional inline background color for the tag pill (used when no class). */\n readonly tagBg?: string;\n /** Title shown next to the tag (often `data.title`). Plain text. */\n readonly title?: string;\n /** Pre-rendered HTML for the title — wins over `title` if provided. */\n readonly titleHtml?: string;\n /** Optional figure number (e.g. `FIG 1.1`). */\n readonly fignum?: string;\n /** Optional description shown under the header. */\n readonly desc?: string;\n /** Optional pre-rendered HTML rendered AFTER the inner content (e.g. footers). */\n readonly footerHtml?: string;\n}\n\n/** Wraps the given inner HTML in a `.diagram` card. */\nexport function diagramFrame(opts: FrameOptions, inner: string): string {\n const tagClass = opts.tagClass !== undefined ? ` ${opts.tagClass}` : '';\n const tagStyle =\n opts.tagBg !== undefined && opts.tagClass === undefined\n ? ` style=\"background:${opts.tagBg}\"`\n : '';\n const titleHtml =\n opts.titleHtml !== undefined\n ? `<span class=\"diagram-title\">${opts.titleHtml}</span>`\n : opts.title !== undefined && opts.title.length > 0\n ? `<span class=\"diagram-title\">${escapeHtml(opts.title)}</span>`\n : '';\n const fignumHtml =\n opts.fignum !== undefined && opts.fignum.length > 0\n ? `<span class=\"diagram-fignum\">${escapeHtml(opts.fignum)}</span>`\n : '';\n const descHtml =\n opts.desc !== undefined && opts.desc.length > 0\n ? `<p class=\"diagram-desc\">${escapeHtml(opts.desc)}</p>`\n : '';\n const footerHtml = opts.footerHtml ?? '';\n return (\n `<div class=\"diagram\">` +\n `<div class=\"diagram-head\">` +\n `<span class=\"diagram-tag${tagClass}\"${tagStyle}>${escapeHtml(opts.tag)}</span>` +\n titleHtml +\n fignumHtml +\n `</div>` +\n descHtml +\n inner +\n footerHtml +\n `</div>`\n );\n}\n\n/**\n * Per-block-type label shown in `SECTION NN · LABEL`.\n *\n * Typed as `Record<BlockType, string>` so adding a new block type without a\n * label is a compile error — the same exhaustiveness guarantee the block\n * registry gives the renderers.\n */\nexport const SECTION_LABEL: Record<BlockType, string> = {\n meta: '',\n callout: 'Note',\n table: 'Comparison',\n sequence: 'Sequence',\n erd: 'Entity model',\n userstory: 'User story',\n timeline: 'Roadmap',\n kanban: 'Board',\n tracker: 'Tracker',\n prose: 'Overview',\n glossary: 'Glossary',\n proscons: 'Trade-offs',\n cvt: 'Before / after',\n stats: 'Metrics',\n code: 'Code',\n agenda: 'Agenda',\n tree: 'Hierarchy',\n pyramid: 'Pyramid',\n funnel: 'Funnel',\n flow: 'Flowchart',\n state: 'State machine',\n dfd: 'Data flow',\n journey: 'Journey',\n gantt: 'Schedule',\n graph: 'Graph',\n quadrant: 'Matrix',\n swimlane: 'Process',\n c4: 'C4 model',\n uml: 'Class model',\n mece: 'Issue tree',\n frontend: 'Component tree',\n cluster: 'Cluster',\n block: 'Architecture',\n infra: 'Deployment',\n event: 'Events',\n ddd: 'Context map',\n network: 'Security zones',\n felogic: 'Frontend logic',\n belogic: 'Backend logic',\n dag: 'DAG',\n wireframe: 'Mockup',\n};\n","/**\n * Renders a callout block — a tonal side-bar with title + body.\n *\n * Doc-studio variant: `tone` (note/tip/warn/danger) instead of the original\n * `kind`. Defaults to `note` if omitted. Title defaults to the tone's label.\n */\n\nimport type { BlockDataMap } from '@avodado/core';\nimport { escapeHtml } from '../escape.js';\n\ntype Tone = 'note' | 'tip' | 'warn' | 'danger';\n\nconst DEFAULT_TITLE: Record<Tone, string> = {\n note: 'Note',\n tip: 'Tip',\n warn: 'Warning',\n danger: 'Danger',\n};\n\nexport function renderCallout(data: BlockDataMap['callout']): string {\n const tone: Tone = data.tone ?? 'note';\n const title = data.title ?? DEFAULT_TITLE[tone];\n const body = data.body ?? '';\n return (\n `<div class=\"callout ${tone}\">` +\n `<div class=\"callout-title\">${escapeHtml(title)}</div>` +\n `<div class=\"callout-body\">${escapeHtml(body)}</div>` +\n `</div>`\n );\n}\n","/**\n * Renders an entity-relationship diagram as inline SVG.\n *\n * Doc-studio variant: column flags are booleans (`pk`, `fk`) rather than the\n * string enum `key: 'PK'|'FK'`. Relations may carry `label` and a cardinality\n * marker `card: '1:1'|'1:N'|'N:M'` (rendered as a centered chip).\n */\n\nimport type { BlockDataMap } from '@avodado/core';\nimport { escapeHtml } from '../escape.js';\nimport { diagramFrame } from './frame.js';\n\ntype ErdData = BlockDataMap['erd'];\ntype ErdEntity = NonNullable<ErdData['entities']>[number];\ntype ErdColumn = NonNullable<ErdEntity['columns']>[number];\n\ninterface EntityBox {\n readonly name: string;\n readonly columns: readonly ErdColumn[];\n readonly x: number;\n readonly y: number;\n readonly w: number;\n readonly h: number;\n}\n\nexport function renderErd(data: BlockDataMap['erd']): string {\n const ents = data.entities ?? [];\n const rels = data.relations ?? [];\n\n const colW = 200;\n const rowH = 22;\n const headH = 30;\n const gapX = 80;\n const top = 14;\n const pad = 16;\n\n let x = pad;\n let maxH = 0;\n const boxes: EntityBox[] = ents.map((e) => {\n const cols = e.columns ?? [];\n const h = headH + cols.length * rowH + 10;\n const box: EntityBox = { name: e.name, columns: cols, x, y: top, w: colW, h };\n x += colW + gapX;\n if (h > maxH) maxH = h;\n return box;\n });\n\n const W = pad * 2 + ents.length * colW + Math.max(0, ents.length - 1) * gapX;\n const H = top + maxH + 24;\n\n const byName = new Map<string, EntityBox>();\n for (const b of boxes) byName.set(b.name, b);\n\n let s =\n `<svg viewBox=\"0 0 ${W} ${H}\" role=\"img\">` +\n `<title>Entity-relationship diagram</title>`;\n\n // Relations (drawn first so boxes sit on top)\n for (const r of rels) {\n const a = byName.get(r.from);\n const b = byName.get(r.to);\n if (!a || !b) continue;\n const x1 = a.x + a.w;\n const y1 = a.y + 24;\n const x2 = b.x;\n const y2 = b.y + 24;\n const mx = (x1 + x2) / 2;\n s +=\n `<path d=\"M${x1},${y1} H${mx} V${y2} H${x2}\" fill=\"none\" stroke=\"#8a96a3\"/>` +\n `<path d=\"M${x2 - 11},${y2 - 7} L${x2},${y2} L${x2 - 11},${y2 + 7}\" fill=\"none\" stroke=\"#8a96a3\"/>`;\n if (r.card !== undefined) {\n const w = 28;\n s +=\n `<rect x=\"${mx - w / 2}\" y=\"${(y1 + y2) / 2 - 9}\" width=\"${w}\" height=\"18\" rx=\"9\" fill=\"#fff\" stroke=\"#d1d5db\"/>` +\n `<text x=\"${mx}\" y=\"${(y1 + y2) / 2 + 3}\" class=\"edge-label\">${escapeHtml(r.card)}</text>`;\n }\n }\n\n // Entity boxes\n for (const b of boxes) {\n s +=\n `<rect x=\"${b.x}\" y=\"${b.y}\" width=\"${b.w}\" height=\"${b.h}\" rx=\"4\" fill=\"#fff\" stroke=\"#0e54a1\"/>` +\n `<rect x=\"${b.x}\" y=\"${b.y}\" width=\"${b.w}\" height=\"${headH}\" rx=\"4\" fill=\"#0e54a1\"/>` +\n `<rect x=\"${b.x}\" y=\"${b.y + headH - 4}\" width=\"${b.w}\" height=\"4\" fill=\"#0e54a1\"/>` +\n `<text x=\"${b.x + b.w / 2}\" y=\"${b.y + 20}\" class=\"er-head-text\">${escapeHtml(b.name)}</text>`;\n b.columns.forEach((f, j) => {\n const fy = b.y + headH + 16 + j * rowH;\n const nameX = f.pk === true || f.fk === true ? b.x + 38 : b.x + 12;\n if (j > 0) {\n s += `<line x1=\"${b.x}\" y1=\"${fy - 14}\" x2=\"${b.x + b.w}\" y2=\"${fy - 14}\" class=\"er-rowline\"/>`;\n }\n if (f.pk === true) {\n s += `<text x=\"${b.x + 12}\" y=\"${fy}\" class=\"er-key\">PK</text>`;\n } else if (f.fk === true) {\n s += `<text x=\"${b.x + 12}\" y=\"${fy}\" class=\"er-key fk\">FK</text>`;\n }\n s +=\n `<text x=\"${nameX}\" y=\"${fy}\" class=\"er-col\">${escapeHtml(f.name)}</text>` +\n `<text x=\"${b.x + b.w - 12}\" y=\"${fy}\" class=\"er-col dim\" text-anchor=\"end\">${escapeHtml(f.type ?? '')}</text>`;\n });\n }\n\n s += `</svg>`;\n\n const opts: Parameters<typeof diagramFrame>[0] = {\n tag: 'ER',\n tagBg: '#6b21a8',\n ...(data.title !== undefined ? { title: data.title } : {}),\n ...(data.description !== undefined ? { desc: data.description } : {}),\n };\n return diagramFrame(opts, s);\n}\n","/**\n * Renders a kanban block. Doc-studio variant uses `columns: [{label, cards:\n * [{title, tag?}]}]` — flexible number of columns with structured cards.\n */\n\nimport type { BlockDataMap } from '@avodado/core';\nimport { escapeHtml } from '../escape.js';\n\nexport function renderKanban(data: BlockDataMap['kanban']): string {\n const cols = data.columns ?? [];\n let h = `<div class=\"kanban\">`;\n for (const col of cols) {\n const cards = (col.cards ?? [])\n .map((c) => {\n const tag =\n c.tag !== undefined\n ? `<div class=\"kan-card-tag\">${escapeHtml(c.tag)}</div>`\n : '';\n return (\n `<div class=\"kan-card\">` +\n `<div class=\"kan-card-title\">${escapeHtml(c.title)}</div>` +\n tag +\n `</div>`\n );\n })\n .join('');\n h +=\n `<div class=\"kan-col\">` +\n `<div class=\"kan-head\">${escapeHtml(col.label)}</div>` +\n cards +\n `</div>`;\n }\n return h + `</div>`;\n}\n","/**\n * Renders a sequence diagram as inline SVG, plus an optional step-by-step\n * list below the SVG and an optional diagram footer with metadata pills.\n *\n * Matches the layout of `resources/sample-orders-api.html` (the canonical\n * \"rich\" rendering).\n *\n * Actors are objects (`{id, name, sub?, external?}`); messages reference\n * actors by `id`. Message `kind`:\n * - `sync` — solid arrow, bold navy label (default)\n * - `response` / `async` — dashed arrow, normal label\n * - `error` — red arrow, red bold label, step list item gets `.err`\n * - `note` — no arrow, italic gray label, badge on the from-actor's lane\n */\n\nimport type { BlockDataMap } from '@avodado/core';\nimport { escapeHtml } from '../escape.js';\nimport { diagramFrame } from './frame.js';\n\ntype MsgKind = 'sync' | 'response' | 'async' | 'error' | 'note';\n\ninterface KindStyle {\n readonly cls: string;\n readonly marker: 'sqArrow' | 'sqOpen' | 'sqErr' | null;\n readonly txt: string;\n}\n\nconst KIND: Record<MsgKind, KindStyle> = {\n sync: { cls: 'msg-line', marker: 'sqArrow', txt: 'msg-text em' },\n response: { cls: 'msg-line dashed', marker: 'sqOpen', txt: 'msg-text' },\n async: { cls: 'msg-line dashed', marker: 'sqOpen', txt: 'msg-text' },\n error: { cls: 'msg-line err', marker: 'sqErr', txt: 'msg-text err' },\n note: { cls: '', marker: null, txt: 'msg-text note' },\n};\n\nconst DB_PATTERN = /postgres|sql|\\bdb\\b|database|store/i;\n\nfunction renderStepList(\n rows: ReadonlyArray<{ kind: MsgKind; from: string; to: string; summary?: string; code?: string; note?: string }>,\n actorById: Map<string, { name: string }>,\n): string {\n const items = rows.filter((r) => r.summary !== undefined && r.summary.length > 0);\n if (items.length === 0) return '';\n\n const lis = items\n .map((r) => {\n const errCls = r.kind === 'error' ? ' class=\"err\"' : '';\n const actorErrCls = r.kind === 'error' ? ' err' : '';\n const fromName = actorById.get(r.from)?.name ?? r.from;\n const toName = r.kind === 'note' ? '' : ` → ${escapeHtml(actorById.get(r.to)?.name ?? r.to)}`;\n const actorLabel = `${escapeHtml(fromName)}${toName}`;\n const code =\n r.code !== undefined && r.code.length > 0\n ? `<pre class=\"sql\">${escapeHtml(r.code)}</pre>`\n : '';\n const note =\n r.note !== undefined && r.note.length > 0\n ? `<span class=\"step-note\">${escapeHtml(r.note)}</span>`\n : '';\n return (\n `<li${errCls}>` +\n `<span class=\"step-actor${actorErrCls}\">${actorLabel}</span>` +\n `<span class=\"step-summary\">${escapeHtml(r.summary ?? '')}</span>` +\n code +\n note +\n `</li>`\n );\n })\n .join('');\n\n return (\n `<div class=\"seq-steps\">` +\n `<div class=\"seq-steps-title\">Step-by-step</div>` +\n `<ol>${lis}</ol>` +\n `</div>`\n );\n}\n\nfunction renderFoot(foot: NonNullable<BlockDataMap['sequence']['foot']>): string {\n if (foot.length === 0) return '';\n const parts = foot\n .map((f) => `<span><strong>${escapeHtml(f.label)}:</strong> ${escapeHtml(f.value)}</span>`)\n .join('');\n return `<div class=\"diagram-foot\">${parts}</div>`;\n}\n\nexport function renderSequence(data: BlockDataMap['sequence']): string {\n const actors = data.actors ?? [];\n const messages = data.messages ?? [];\n const N = Math.max(actors.length, 1);\n const leftPad = 24;\n const laneW = 168;\n const gap = 58;\n const headY = 16;\n const headH = 42;\n const cx = (i: number): number => leftPad + laneW / 2 + i * (laneW + gap);\n const width = leftPad * 2 + N * laneW + (N - 1) * gap;\n const idx = (id: string): number => actors.findIndex((a) => a.id === id);\n const msgStartY = 92;\n const step = 42;\n\n type Row = {\n n: number;\n y: number;\n fromI: number;\n toI: number;\n kind: MsgKind;\n label: string;\n from: string;\n to: string;\n summary?: string;\n code?: string;\n note?: string;\n };\n const rows: Row[] = messages.map((m, k): Row => {\n const base: Row = {\n n: k + 1,\n y: msgStartY + k * step,\n fromI: idx(m.from),\n toI: idx(m.to),\n kind: (m.kind ?? 'sync') as MsgKind,\n label: m.label ?? '',\n from: m.from,\n to: m.to,\n };\n if (m.summary !== undefined) base.summary = m.summary;\n if (m.code !== undefined) base.code = m.code;\n if (m.note !== undefined) base.note = m.note;\n return base;\n });\n const bottom = msgStartY + messages.length * step + 12;\n const height = bottom + 6;\n\n const activations = actors.map((a, i) => {\n if (i === 0) return null;\n const ys = rows.filter((r) => r.fromI === i || r.toI === i).map((r) => r.y);\n if (ys.length === 0) return null;\n const db = DB_PATTERN.test(`${a.name} ${a.sub ?? ''}`);\n return { i, y1: Math.min(...ys) - 8, y2: Math.max(...ys) + 8, db };\n });\n\n let s =\n `<svg viewBox=\"0 0 ${width} ${height}\" role=\"img\">` +\n `<title>Sequence diagram</title>` +\n `<defs>` +\n `<marker id=\"sqArrow\" viewBox=\"0 0 10 10\" refX=\"8\" refY=\"5\" markerWidth=\"6\" markerHeight=\"6\" orient=\"auto-start-reverse\">` +\n `<path d=\"M0,0 L10,5 L0,10 z\" fill=\"#1a1a2e\"/></marker>` +\n `<marker id=\"sqOpen\" viewBox=\"0 0 10 10\" refX=\"8\" refY=\"5\" markerWidth=\"6\" markerHeight=\"6\" orient=\"auto-start-reverse\">` +\n `<path d=\"M0,0 L10,5 L0,10\" fill=\"none\" stroke=\"#1a1a2e\" stroke-width=\"1.2\"/></marker>` +\n `<marker id=\"sqErr\" viewBox=\"0 0 10 10\" refX=\"8\" refY=\"5\" markerWidth=\"6\" markerHeight=\"6\" orient=\"auto-start-reverse\">` +\n `<path d=\"M0,0 L10,5 L0,10 z\" fill=\"#991b1b\"/></marker>` +\n `</defs>`;\n\n for (let i = 0; i < actors.length; i++) {\n const x = cx(i);\n s += `<line x1=\"${x}\" y1=\"${headY + headH}\" x2=\"${x}\" y2=\"${bottom}\" class=\"lifeline\"/>`;\n }\n\n for (const ac of activations) {\n if (!ac) continue;\n s += `<rect x=\"${cx(ac.i) - 4}\" y=\"${ac.y1}\" width=\"8\" height=\"${ac.y2 - ac.y1}\" class=\"activation${ac.db ? ' pg' : ''}\"/>`;\n }\n\n actors.forEach((a, i) => {\n const extCls = a.external === true ? ' ext' : '';\n const sub =\n a.sub !== undefined\n ? `<text x=\"${cx(i)}\" y=\"${headY + 36}\" class=\"lane-head-sub${extCls}\">${escapeHtml(a.sub)}</text>`\n : '';\n s +=\n `<g>` +\n `<rect x=\"${cx(i) - laneW / 2}\" y=\"${headY}\" width=\"${laneW}\" height=\"${headH}\" class=\"lane-head${extCls}\"/>` +\n `<text x=\"${cx(i)}\" y=\"${headY + 22}\" class=\"lane-head-text\">${escapeHtml(a.name)}</text>` +\n sub +\n `</g>`;\n });\n\n for (const r of rows) {\n const k = KIND[r.kind];\n\n // `note` kind — just a numbered annotation at the from-actor's lane\n if (r.kind === 'note' || r.toI < 0) {\n if (r.fromI < 0) continue;\n const x = cx(r.fromI);\n s +=\n `<g>` +\n `<circle cx=\"${x + 18}\" cy=\"${r.y - 10}\" r=\"10\" class=\"step-badge\"/>` +\n `<text x=\"${x + 18}\" y=\"${r.y - 6.5}\" class=\"step-badge-text\">${r.n}</text>` +\n `<text x=\"${x + 34}\" y=\"${r.y - 6}\" class=\"msg-text note\">${escapeHtml(r.label)}</text>` +\n `</g>`;\n continue;\n }\n // self-message — loop back to the same lane\n if (r.fromI === r.toI) {\n const x = cx(r.fromI);\n const errCls = r.kind === 'error' ? ' err' : '';\n s +=\n `<g>` +\n `<circle cx=\"${x + 18}\" cy=\"${r.y - 10}\" r=\"10\" class=\"step-badge${errCls}\"/>` +\n `<text x=\"${x + 18}\" y=\"${r.y - 6.5}\" class=\"step-badge-text\">${r.n}</text>` +\n `<text x=\"${x + 34}\" y=\"${r.y - 6}\" class=\"msg-text note\">${escapeHtml(r.label)}</text>` +\n `</g>`;\n continue;\n }\n\n const x1 = cx(r.fromI);\n const x2 = cx(r.toI);\n const ltr = x2 > x1;\n const end = x2 + (ltr ? -3 : 3);\n const errBadge = r.kind === 'error' ? ' err' : '';\n // Badge sits just inside the from-lane on the side facing the target.\n const badgeX = ltr ? x1 + 18 : x1 - 18;\n // Label anchors next to the badge (start-aligned LTR, end-aligned RTL).\n // Matches the sample's `<text x=\"badgeX+18\" ... >` / `<text x=\"badgeX-18\" ... text-anchor=\"end\">` layout.\n const labelX = ltr ? badgeX + 16 : badgeX - 16;\n const labelAnchor = ltr ? 'start' : 'end';\n const markerAttr = k.marker !== null ? ` marker-end=\"url(#${k.marker})\"` : '';\n s +=\n `<line x1=\"${x1}\" y1=\"${r.y}\" x2=\"${end}\" y2=\"${r.y}\" class=\"${k.cls}\"${markerAttr}/>` +\n `<circle cx=\"${badgeX}\" cy=\"${r.y - 10}\" r=\"10\" class=\"step-badge${errBadge}\"/>` +\n `<text x=\"${badgeX}\" y=\"${r.y - 6.5}\" class=\"step-badge-text\">${r.n}</text>` +\n `<text x=\"${labelX}\" y=\"${r.y - 6}\" class=\"${k.txt}\" text-anchor=\"${labelAnchor}\">${escapeHtml(r.label)}</text>`;\n }\n\n s += `</svg>`;\n\n const actorById = new Map<string, { name: string }>();\n for (const a of actors) actorById.set(a.id, { name: a.name });\n const stepList = renderStepList(rows, actorById);\n const footHtml = data.foot !== undefined ? renderFoot(data.foot) : '';\n\n // Tag + title\n const method = data.endpoint?.method.toLowerCase();\n const tag = data.endpoint?.method ?? 'FLOW';\n const titleHtml = (() => {\n if (data.endpoint?.path !== undefined) {\n const t = data.title !== undefined ? ` — ${escapeHtml(data.title)}` : '';\n return `<code>${escapeHtml(data.endpoint.path)}</code>${t}`;\n }\n return data.title !== undefined ? escapeHtml(data.title) : '';\n })();\n\n const frameOpts: Parameters<typeof diagramFrame>[0] = {\n tag,\n ...(method !== undefined ? { tagClass: method } : { tagBg: '#374151' }),\n ...(titleHtml.length > 0 ? { titleHtml } : {}),\n ...(data.description !== undefined ? { desc: data.description } : {}),\n ...(footHtml.length > 0 ? { footerHtml: footHtml } : {}),\n };\n\n return diagramFrame(frameOpts, s + stepList);\n}\n","/**\n * Renders a table block. Doc-studio variant supports:\n * - Column objects with `align` ('l'|'c'|'r') and `highlight`\n * - Cell objects with `tone` ('pos'|'neg'|'warn'|'muted'), `lead`, `highlight`\n * - Optional `title`, `description`, `note`\n *\n * Plain string columns / cells still work.\n */\n\nimport type { BlockDataMap } from '@avodado/core';\nimport { escapeHtml } from '../escape.js';\n\ntype TableData = BlockDataMap['table'];\ntype Col = NonNullable<TableData['columns']>[number];\ntype Cell = NonNullable<NonNullable<TableData['rows']>[number]>[number];\n\nfunction colClass(c: Col): string {\n if (typeof c === 'string') return '';\n const parts: string[] = [];\n if (c.align === 'r') parts.push('r');\n if (c.align === 'c') parts.push('c');\n if (c.highlight === true) parts.push('hi');\n return parts.join(' ');\n}\n\nfunction colLabel(c: Col): string {\n return typeof c === 'string' ? c : c.label;\n}\n\nfunction cellClass(c: Cell): string {\n if (typeof c === 'string' || typeof c === 'number') return '';\n const parts: string[] = [];\n if (c.tone) parts.push(`cell-${c.tone}`);\n if (c.lead === true) parts.push('lead');\n if (c.highlight === true) parts.push('hi');\n return parts.join(' ');\n}\n\nfunction cellValue(c: Cell): string {\n if (typeof c === 'string' || typeof c === 'number') return escapeHtml(c);\n return escapeHtml(c.v);\n}\n\nexport function renderTable(data: BlockDataMap['table']): string {\n const cols = data.columns ?? [];\n const rows = data.rows ?? [];\n const head = cols\n .map((c) => {\n const cls = colClass(c);\n return `<th${cls ? ` class=\"${cls}\"` : ''}>${escapeHtml(colLabel(c))}</th>`;\n })\n .join('');\n const body = rows\n .map((r) => {\n const cells = (r ?? [])\n .map((c, i) => {\n const col = cols[i];\n const cls = [col !== undefined ? colClass(col) : '', cellClass(c)]\n .filter(Boolean)\n .join(' ');\n return `<td${cls ? ` class=\"${cls}\"` : ''}>${cellValue(c)}</td>`;\n })\n .join('');\n return `<tr>${cells}</tr>`;\n })\n .join('');\n const note =\n data.note !== undefined ? `<p class=\"tbl-note\">${escapeHtml(data.note)}</p>` : '';\n return `<table class=\"pres-table\"><thead><tr>${head}</tr></thead><tbody>${body}</tbody></table>${note}`;\n}\n","/**\n * Renders a timeline block. Doc-studio variant uses `label` (not `title`),\n * `date` (not `when`), `desc` (not `detail`), and status enum\n * `done | current | next | future` (where `current` is the in-flight item).\n */\n\nimport type { BlockDataMap } from '@avodado/core';\nimport { escapeHtml } from '../escape.js';\n\nexport function renderTimeline(data: BlockDataMap['timeline']): string {\n const items = data.items ?? [];\n let h = `<div class=\"tl\">`;\n for (const it of items) {\n const st = it.status ?? 'future';\n const date =\n it.date !== undefined ? `<div class=\"tl-date\">${escapeHtml(it.date)}</div>` : '';\n const desc =\n it.desc !== undefined ? `<div class=\"tl-desc\">${escapeHtml(it.desc)}</div>` : '';\n h +=\n `<div class=\"tl-item\">` +\n `<span class=\"tl-dot ${st}\"></span>` +\n date +\n `<div class=\"tl-label\">${escapeHtml(it.label)}</div>` +\n desc +\n `</div>`;\n }\n return h + `</div>`;\n}\n","/**\n * Renders a tracker block — task table with status pills, optional priority,\n * owner, and due date columns.\n *\n * Doc-studio extras: optional `owner` (rendered as a column) and `due` (also\n * a column). Done rows get a strikethrough via `.trk tr.done .trk-task`.\n */\n\nimport type { BlockDataMap } from '@avodado/core';\nimport { escapeHtml } from '../escape.js';\n\nexport function renderTracker(data: BlockDataMap['tracker']): string {\n const items = data.items ?? [];\n const hasOwner = items.some((i) => i.owner !== undefined);\n const hasDue = items.some((i) => i.due !== undefined);\n\n const headCells = ['<th>Task</th>', '<th>Status</th>', '<th>Priority</th>'];\n if (hasOwner) headCells.push('<th>Owner</th>');\n if (hasDue) headCells.push('<th>Due</th>');\n\n let h = `<table class=\"trk\"><thead><tr>${headCells.join('')}</tr></thead><tbody>`;\n for (const it of items) {\n const st = it.status ?? 'todo';\n const pr = it.priority;\n const prCell =\n pr !== undefined ? `<span class=\"pri ${pr}\">${escapeHtml(pr)}</span>` : '';\n const rowCls = st === 'done' ? ' class=\"done\"' : '';\n const cells = [\n `<td class=\"trk-task\">${escapeHtml(it.task)}</td>`,\n `<td><span class=\"st ${st}\">${escapeHtml(st)}</span></td>`,\n `<td>${prCell}</td>`,\n ];\n if (hasOwner) cells.push(`<td>${escapeHtml(it.owner ?? '')}</td>`);\n if (hasDue) cells.push(`<td>${escapeHtml(it.due ?? '')}</td>`);\n h += `<tr${rowCls}>${cells.join('')}</tr>`;\n }\n return h + `</tbody></table>`;\n}\n","/**\n * Renders a userstory block — story statement, optional meta chips, optional\n * acceptance-criteria list, and optional related-links chips.\n *\n * Matches doc-studio's `.story` shell (`.story-stmt`, `.story-meta`,\n * `.story-chip`, `.ac-title`, `.ac-item`, `.gwt`, `.link-chip`).\n */\n\nimport type { BlockDataMap } from '@avodado/core';\nimport { escapeHtml } from '../escape.js';\n\nexport function renderUserStory(data: BlockDataMap['userstory']): string {\n const role = data.role ?? 'user';\n const want = data.want ?? '…';\n const soThat = data.soThat ?? '…';\n\n const chips: string[] = [];\n if (data.priority !== undefined)\n chips.push(`<span class=\"story-chip\">Priority · ${escapeHtml(data.priority)}</span>`);\n if (data.points !== undefined && data.points !== null)\n chips.push(`<span class=\"story-chip\">${escapeHtml(data.points)} pts</span>`);\n\n let h =\n `<div class=\"story\">` +\n `<div class=\"story-stmt\">As a <b>${escapeHtml(role)}</b>, I want to <b>${escapeHtml(want)}</b>, so that <b>${escapeHtml(soThat)}</b>.</div>`;\n if (chips.length > 0) {\n h += `<div class=\"story-meta\">${chips.join('')}</div>`;\n }\n h += `</div>`;\n\n const crit = data.criteria ?? [];\n if (crit.length > 0) {\n h += `<div class=\"ac-title\">Acceptance criteria</div>`;\n for (const c of crit) {\n h +=\n `<div class=\"ac-item\"><div class=\"gwt\">` +\n `<span class=\"k g\">Given</span><span class=\"v\">${escapeHtml(c.given ?? '')}</span>` +\n `<span class=\"k w\">When</span><span class=\"v\">${escapeHtml(c.when ?? '')}</span>` +\n `<span class=\"k t\">Then</span><span class=\"v\">${escapeHtml(c.then ?? '')}</span>` +\n `</div></div>`;\n }\n }\n\n const links = data.links ?? [];\n if (links.length > 0) {\n h += `<div class=\"ac-title\">Related</div><div class=\"links-row\">`;\n for (const l of links) {\n h +=\n `<span class=\"link-chip\">` +\n `<span class=\"lt\">${escapeHtml(l.mode ?? '')}</span>` +\n `${escapeHtml(l.label ?? '')}` +\n `</span>`;\n }\n h += `</div>`;\n }\n\n return h;\n}\n","/**\n * Renders a structured `prose` block — a sequence of typed sub-blocks\n * (heading, paragraph, ul, ol, quote). Useful when the author wants explicit\n * structure instead of raw markdown.\n *\n * Ported from doc-studio.jsx `Prose`.\n */\n\nimport type { BlockDataMap } from '@avodado/core';\nimport { escapeHtml } from '../escape.js';\n\nexport function renderProseBlock(data: BlockDataMap['prose']): string {\n const blocks = data.blocks ?? [];\n const html = blocks\n .map((b) => {\n const t = (b.type ?? 'p').toLowerCase();\n const text = b.text ?? '';\n if (t === 'h') return `<h3>${escapeHtml(text)}</h3>`;\n if (t === 'quote') return `<blockquote>${escapeHtml(text)}</blockquote>`;\n if (t === 'ul') {\n const items = (b.items ?? []).map((x) => `<li>${escapeHtml(x)}</li>`).join('');\n return `<ul>${items}</ul>`;\n }\n if (t === 'ol') {\n const items = (b.items ?? []).map((x) => `<li>${escapeHtml(x)}</li>`).join('');\n return `<ol>${items}</ol>`;\n }\n return `<p>${escapeHtml(text)}</p>`;\n })\n .join('');\n return `<div class=\"prose\">${html}</div>`;\n}\n","/**\n * Renders a glossary block — a list of term/definition rows.\n *\n * Ported from doc-studio.jsx `Glossary`.\n */\n\nimport type { BlockDataMap } from '@avodado/core';\nimport { escapeHtml } from '../escape.js';\n\nexport function renderGlossary(data: BlockDataMap['glossary']): string {\n const terms = data.terms ?? [];\n const rows = terms\n .map(\n (t) =>\n `<div class=\"row\"><dt>${escapeHtml(t.term)}</dt><dd>${escapeHtml(t.def)}</dd></div>`,\n )\n .join('');\n return `<div class=\"glossary\">${rows}</div>`;\n}\n","/**\n * Renders a pros-vs-cons block — two columns of bullet items with\n * positive / negative styling.\n *\n * Ported from doc-studio.jsx `ProsCons`.\n */\n\nimport type { BlockDataMap } from '@avodado/core';\nimport { escapeHtml } from '../escape.js';\n\nexport function renderProsCons(data: BlockDataMap['proscons']): string {\n const prosLabel = data.prosLabel ?? 'Pros';\n const consLabel = data.consLabel ?? 'Cons';\n const pros = (data.pros ?? []).map((p) => `<div class=\"pc-item\">${escapeHtml(p)}</div>`).join('');\n const cons = (data.cons ?? []).map((c) => `<div class=\"pc-item\">${escapeHtml(c)}</div>`).join('');\n return (\n `<div class=\"pc\">` +\n `<div class=\"pc-col pro\">` +\n `<div class=\"pc-head\">${escapeHtml(prosLabel)}</div>` +\n pros +\n `</div>` +\n `<div class=\"pc-col con\">` +\n `<div class=\"pc-head\">${escapeHtml(consLabel)}</div>` +\n cons +\n `</div>` +\n `</div>`\n );\n}\n","/**\n * Renders a current-vs-target block — two side-by-side panels separated by an\n * arrow, optionally captioned.\n *\n * Ported from doc-studio.jsx `CurrentTarget`.\n */\n\nimport type { BlockDataMap } from '@avodado/core';\nimport { escapeHtml } from '../escape.js';\n\nexport function renderCvt(data: BlockDataMap['cvt']): string {\n const cur = data.current ?? {};\n const tgt = data.target ?? {};\n const curItems = (cur.items ?? [])\n .map((x) => `<div class=\"ct-item\">${escapeHtml(x)}</div>`)\n .join('');\n const tgtItems = (tgt.items ?? [])\n .map((x) => `<div class=\"ct-item\">${escapeHtml(x)}</div>`)\n .join('');\n const curLabel = cur.label ?? 'Current';\n const tgtLabel = tgt.label ?? 'Target';\n const note =\n data.note !== undefined ? `<div class=\"tbl-note\">${escapeHtml(data.note)}</div>` : '';\n return (\n `<div>` +\n `<div class=\"ct\">` +\n `<div class=\"ct-panel cur\">` +\n `<div class=\"ct-label\">${escapeHtml(curLabel)}</div>` +\n curItems +\n `</div>` +\n `<div class=\"ct-arrow\">→</div>` +\n `<div class=\"ct-panel tgt\">` +\n `<div class=\"ct-label\">${escapeHtml(tgtLabel)}</div>` +\n tgtItems +\n `</div>` +\n `</div>` +\n note +\n `</div>`\n );\n}\n","/**\n * Renders a row of KPI / stat cards with optional delta + trend arrow.\n *\n * Ported from doc-studio.jsx `StatCards`.\n */\n\nimport type { BlockDataMap } from '@avodado/core';\nimport { escapeHtml } from '../escape.js';\nimport { safeColor } from '../sanitize.js';\n\nconst TREND_GLYPH = { up: '▲', down: '▼', flat: '—' } as const;\n\nexport function renderStats(data: BlockDataMap['stats']): string {\n const stats = data.stats ?? [];\n const cards = stats\n .map((s) => {\n const accent =\n s.accent !== undefined\n ? ` style=\"border-top-color:${safeColor(s.accent, '#0e54a1')}\"`\n : '';\n const delta =\n s.delta !== undefined\n ? `<div class=\"stat-delta ${s.trend ?? 'flat'}\">${TREND_GLYPH[s.trend ?? 'flat']} ${escapeHtml(s.delta)}</div>`\n : '';\n return (\n `<div class=\"stat-card\"${accent}>` +\n `<div class=\"stat-value\">${escapeHtml(s.value)}</div>` +\n `<div class=\"stat-label\">${escapeHtml(s.label)}</div>` +\n delta +\n `</div>`\n );\n })\n .join('');\n return `<div class=\"stat-row\">${cards}</div>`;\n}\n","/**\n * Tiny multi-language syntax highlighter — emits HTML spans (`.kw`, `.str`,\n * `.num`, `.fn`, `.ty`, `.com`) wrapped around recognized tokens.\n *\n * Ported from `resources/doc-studio.jsx` `highlightCode`. Designed for the\n * `code` block and the SQL snippets in `seq-steps`. Not a full lexer — just\n * enough to make a snippet readable.\n */\n\nimport { escapeHtml } from './escape.js';\n\nconst KW = new Set(\n (\n 'const let var function return if else for while do switch case break continue ' +\n 'class extends new await async import from export default try catch finally throw ' +\n 'typeof instanceof void delete yield static public private protected readonly ' +\n 'abstract implements interface type enum namespace def elif lambda pass with raise ' +\n 'except none true false and or not is in self nil func struct map range defer chan ' +\n 'select fallthrough echo fi done local require module package this super ' +\n 'create table alter add drop select insert update delete into values where join ' +\n 'group order by limit primary key foreign references not null default unique index ' +\n 'on check constraint cascade returning begin commit rollback'\n ).split(/\\s+/),\n);\n\nconst TY = new Set(\n (\n 'string number boolean int integer float double bool char byte long short void ' +\n 'object any unknown never bigint promise array list set optional uuid text varchar ' +\n 'timestamptz timestamp date numeric decimal jsonb json serial bigserial smallint'\n ).split(/\\s+/),\n);\n\nconst TOKEN_RE =\n /(\\/\\*[\\s\\S]*?\\*\\/|\\/\\/[^\\n]*|#[^\\n]*)|(\"(?:\\\\.|[^\"\\\\])*\"|'(?:\\\\.|[^'\\\\])*'|`(?:\\\\.|[^`\\\\])*`)|(\\b\\d[\\w.]*)|([A-Za-z_$][\\w$]*)/g;\n\n/**\n * Highlights a code snippet, returning HTML-safe string.\n *\n * @param code - Source code (any language). HTML-escaped before token wrapping.\n */\nexport function highlightCode(code: string): string {\n if (code.length === 0) return '';\n const src = String(code);\n let out = '';\n let last = 0;\n TOKEN_RE.lastIndex = 0;\n let m: RegExpExecArray | null;\n while ((m = TOKEN_RE.exec(src)) !== null) {\n if (m.index > last) out += escapeHtml(src.slice(last, m.index));\n const t = m[0];\n if (m[1] !== undefined) {\n out += `<span class=\"com\">${escapeHtml(t)}</span>`;\n } else if (m[2] !== undefined) {\n out += `<span class=\"str\">${escapeHtml(t)}</span>`;\n } else if (m[3] !== undefined) {\n out += `<span class=\"num\">${escapeHtml(t)}</span>`;\n } else {\n const lt = t.toLowerCase();\n if (KW.has(lt)) out += `<span class=\"kw\">${escapeHtml(t)}</span>`;\n else if (TY.has(lt)) out += `<span class=\"ty\">${escapeHtml(t)}</span>`;\n else if (src[TOKEN_RE.lastIndex] === '(')\n out += `<span class=\"fn\">${escapeHtml(t)}</span>`;\n else out += escapeHtml(t);\n }\n last = TOKEN_RE.lastIndex;\n }\n if (last < src.length) out += escapeHtml(src.slice(last));\n return out;\n}\n","/**\n * Renders one or more code blocks, each with a header (filename / language)\n * and a syntax-highlighted body.\n *\n * Ported from doc-studio.jsx `CodeBlock` (iterated for multiple snippets).\n */\n\nimport type { BlockDataMap } from '@avodado/core';\nimport { escapeHtml } from '../escape.js';\nimport { highlightCode } from '../highlight.js';\n\nexport function renderCode(data: BlockDataMap['code']): string {\n const blocks = data.blocks ?? [];\n return blocks\n .map(\n (b) =>\n `<div class=\"code-block\">` +\n `<div class=\"code-header\">` +\n `<span>${escapeHtml(b.title ?? '')}</span>` +\n `<span>${escapeHtml(b.lang ?? '')}</span>` +\n `</div>` +\n `<pre>${highlightCode(b.code)}</pre>` +\n `</div>`,\n )\n .join('');\n}\n","/**\n * Renders a meeting / event agenda — rows of `(time + duration)` paired with\n * `(title + owner + desc)`.\n *\n * Ported from doc-studio.jsx `Agenda`.\n */\n\nimport type { BlockDataMap } from '@avodado/core';\nimport { escapeHtml } from '../escape.js';\n\nexport function renderAgenda(data: BlockDataMap['agenda']): string {\n const items = data.items ?? [];\n const rows = items\n .map((it) => {\n const dur =\n it.duration !== undefined\n ? `<div class=\"agenda-dur\">${escapeHtml(it.duration)}</div>`\n : '';\n const owner =\n it.owner !== undefined\n ? `<span class=\"agenda-owner\">${escapeHtml(it.owner)}</span>`\n : '';\n const desc =\n it.desc !== undefined ? `<div class=\"agenda-desc\">${escapeHtml(it.desc)}</div>` : '';\n const time =\n it.time !== undefined ? `<div class=\"agenda-time\">${escapeHtml(it.time)}</div>` : '';\n return (\n `<div class=\"agenda-row\">` +\n `<div>${time}${dur}</div>` +\n `<div>` +\n `<div class=\"agenda-title\">${escapeHtml(it.title)}${owner}</div>` +\n desc +\n `</div>` +\n `</div>`\n );\n })\n .join('');\n return `<div class=\"agenda\">${rows}</div>`;\n}\n","/**\n * Renders an indented hierarchy of nodes, like a folder tree.\n *\n * Nodes are linked via `parent` id. Roots are nodes without a `parent` (or\n * whose parent id is unknown). Children are indented based on depth.\n *\n * Ported from doc-studio.jsx `Tree`.\n */\n\nimport type { BlockDataMap } from '@avodado/core';\nimport { escapeHtml } from '../escape.js';\n\ntype Node = NonNullable<BlockDataMap['tree']['nodes']>[number];\n\nexport function renderTree(data: BlockDataMap['tree']): string {\n const nodes = data.nodes ?? [];\n const byId = new Map<string, Node>();\n const children = new Map<string, string[]>();\n for (const n of nodes) {\n byId.set(n.id, n);\n children.set(n.id, []);\n }\n const roots: string[] = [];\n for (const n of nodes) {\n if (n.parent !== undefined && byId.has(n.parent)) {\n children.get(n.parent)?.push(n.id);\n } else {\n roots.push(n.id);\n }\n }\n\n type Out = { node: Node; depth: number; branch: boolean };\n const out: Out[] = [];\n const seen = new Set<string>();\n const walk = (id: string, depth: number): void => {\n if (seen.has(id)) return;\n seen.add(id);\n const node = byId.get(id);\n if (node === undefined) return;\n const kids = children.get(id) ?? [];\n out.push({ node, depth, branch: kids.length > 0 });\n for (const c of kids) walk(c, depth + 1);\n };\n for (const r of roots) walk(r, 0);\n\n const rows = out\n .map((row) => {\n const branchCls = row.branch ? ' branch' : '';\n const glyph = row.branch ? '▸' : '—';\n const note =\n row.node.note !== undefined\n ? `<span class=\"tnote\">${escapeHtml(row.node.note)}</span>`\n : '';\n return (\n `<div class=\"tree-row${branchCls}\" style=\"padding-left:${row.depth * 22}px\">` +\n `<span class=\"tw\">${glyph}</span>` +\n `<span class=\"tlabel\">${escapeHtml(row.node.label)}</span>` +\n note +\n `</div>`\n );\n })\n .join('');\n return `<div class=\"tree-list\">${rows}</div>`;\n}\n","/**\n * Renders a pyramid diagram (top → bottom widening trapezoids).\n *\n * Ported from doc-studio.jsx `Pyramid`. Uses the shared CHART_COLORS palette.\n */\n\nimport type { BlockDataMap } from '@avodado/core';\nimport { escapeHtml } from '../escape.js';\n\nconst CHART_COLORS = ['#0e54a1', '#1a6dbe', '#0f766e', '#1f9747', '#6b21a8', '#f7952c'];\n\nexport function renderPyramid(data: BlockDataMap['pyramid']): string {\n const levels = data.levels ?? [];\n const n = Math.max(levels.length, 1);\n const W = 520;\n const top = 16;\n const rowH = Math.min(72, Math.floor(280 / n));\n const gap = 4;\n const apex = W / 2;\n const pad = 16;\n const maxW = 430;\n const H = top + n * (rowH + gap) + pad;\n\n const polygons = levels\n .map((L, i) => {\n const y = top + i * (rowH + gap);\n const wTop = maxW * (i / n);\n const wBot = maxW * ((i + 1) / n);\n const fill = CHART_COLORS[i % CHART_COLORS.length] ?? '#0e54a1';\n const desc =\n L.desc !== undefined\n ? `<text x=\"${apex}\" y=\"${y + rowH / 2 + 14}\" class=\"pyr-desc\">${escapeHtml(L.desc)}</text>`\n : '';\n return (\n `<g>` +\n `<polygon points=\"${apex - wTop / 2},${y} ${apex + wTop / 2},${y} ${apex + wBot / 2},${y + rowH} ${apex - wBot / 2},${y + rowH}\" fill=\"${fill}\"/>` +\n `<text x=\"${apex}\" y=\"${y + rowH / 2 - 1}\" class=\"pyr-label\">${escapeHtml(L.label)}</text>` +\n desc +\n `</g>`\n );\n })\n .join('');\n\n return `<svg viewBox=\"0 0 ${W} ${H}\" role=\"img\"><title>Pyramid</title>${polygons}</svg>`;\n}\n","/**\n * Renders a funnel chart — stacked trapezoids that narrow from top to bottom\n * with absolute values and computed conversion percentages.\n *\n * Ported from doc-studio.jsx `Funnel`.\n */\n\nimport type { BlockDataMap } from '@avodado/core';\nimport { escapeHtml } from '../escape.js';\n\nconst CHART_COLORS = ['#0e54a1', '#1a6dbe', '#0f766e', '#1f9747', '#6b21a8', '#f7952c'];\n\nfunction toNum(v: string | number): number {\n if (typeof v === 'number') return v;\n const n = parseFloat(v.replace(/[, _]/g, ''));\n return Number.isFinite(n) ? n : 0;\n}\n\nfunction fmt(v: string | number): string {\n return typeof v === 'number' ? v.toLocaleString() : v;\n}\n\nexport function renderFunnel(data: BlockDataMap['funnel']): string {\n const stages = (data.stages ?? []).filter(Boolean);\n const W = 560;\n const top = 14;\n const rowH = 62;\n const maxW = 420;\n const pad = 14;\n const cx = W / 2;\n const H = top + stages.length * rowH + pad;\n\n const vals = stages.map((s) => toNum(s.value));\n const first = vals[0] ?? 0;\n const max = Math.max(1, ...vals);\n const wOf = (v: number): number => Math.max(78, maxW * (v / max));\n\n const groups = stages\n .map((s, i) => {\n const v = vals[i] ?? 0;\n const vNext = i < stages.length - 1 ? (vals[i + 1] ?? 0) : v * 0.82;\n const wTop = wOf(v);\n const wBot = wOf(vNext);\n const y = top + i * rowH;\n const fill = CHART_COLORS[i % CHART_COLORS.length] ?? '#0e54a1';\n const pct = first > 0 ? Math.round((v / first) * 100) : 0;\n const sub = i > 0 && first > 0 ? ` · ${pct}%` : '';\n return (\n `<g>` +\n `<polygon points=\"${cx - wTop / 2},${y} ${cx + wTop / 2},${y} ${cx + wBot / 2},${y + rowH} ${cx - wBot / 2},${y + rowH}\" fill=\"${fill}\" stroke=\"#fff\" stroke-width=\"2\"/>` +\n `<text x=\"${cx}\" y=\"${y + rowH / 2 - 3}\" class=\"funnel-label\">${escapeHtml(s.label)}</text>` +\n `<text x=\"${cx}\" y=\"${y + rowH / 2 + 15}\" class=\"funnel-val\">${escapeHtml(fmt(s.value))}${sub}</text>` +\n `</g>`\n );\n })\n .join('');\n\n return `<svg viewBox=\"0 0 ${W} ${H}\" role=\"img\"><title>Funnel</title>${groups}</svg>`;\n}\n","/**\n * Manhattan / orthogonal edge routing between two rectangular nodes.\n *\n * Returns the SVG path `d` attribute and a midpoint for label placement.\n * The route turns at the midpoint along the dominant axis, so edges read\n * cleanly even when the source and target overlap on one axis.\n *\n * Ported from `resources/doc-studio.jsx` `ortho`.\n */\n\n/** A rectangular node bounding box (top-left + size). */\nexport interface Box {\n readonly x: number;\n readonly y: number;\n readonly w: number;\n readonly h: number;\n}\n\n/** Routed edge: SVG `d` plus a midpoint for the edge label. */\nexport interface Route {\n readonly d: string;\n readonly lx: number;\n readonly ly: number;\n}\n\n/**\n * Routes an orthogonal edge from box A to box B.\n *\n * @param A - Source box.\n * @param B - Target box.\n * @returns SVG path data and label midpoint.\n */\nexport function ortho(A: Box, B: Box): Route {\n const a = { x: A.x + A.w / 2, y: A.y + A.h / 2 };\n const b = { x: B.x + B.w / 2, y: B.y + B.h / 2 };\n const dx = b.x - a.x;\n const dy = b.y - a.y;\n if (Math.abs(dx) >= Math.abs(dy)) {\n const sx = dx >= 0 ? A.x + A.w : A.x;\n const ex = dx >= 0 ? B.x : B.x + B.w;\n const sy = a.y;\n const ey = b.y;\n const mx = (sx + ex) / 2;\n return { d: `M ${sx} ${sy} H ${mx} V ${ey} H ${ex}`, lx: mx, ly: (sy + ey) / 2 };\n }\n const sy = dy >= 0 ? A.y + A.h : A.y;\n const ey = dy >= 0 ? B.y : B.y + B.h;\n const sx = a.x;\n const ex = b.x;\n const my = (sy + ey) / 2;\n return { d: `M ${sx} ${sy} V ${my} H ${ex} V ${ey}`, lx: (sx + ex) / 2, ly: my };\n}\n","/**\n * Wraps text to fit within an approximate character-per-line budget, capping\n * the total number of lines. Word-aware (won't break mid-word).\n *\n * Used by diagram renderers for fixed-size labels. Ported from\n * `resources/doc-studio.jsx` `wrapText`.\n */\n\n/**\n * @param text - Source text (any value is coerced via `String(...)`).\n * @param max - Approximate maximum characters per line.\n * @param maxLines - Maximum number of lines to return (later lines dropped).\n * @returns An array of wrapped lines; empty array for empty input.\n */\nexport function wrapText(text: unknown, max: number, maxLines: number): string[] {\n if (text === undefined || text === null || text === '') return [];\n const words = String(text).split(/\\s+/);\n const lines: string[] = [];\n let cur = '';\n for (const w of words) {\n if (!cur) {\n cur = w;\n continue;\n }\n if ((cur + ' ' + w).length <= max) {\n cur += ' ' + w;\n } else {\n lines.push(cur);\n cur = w;\n if (lines.length === maxLines) break;\n }\n }\n if (cur && lines.length < maxLines) lines.push(cur);\n return lines.slice(0, maxLines);\n}\n","/**\n * Renders an SVG edge label as a small rounded pill, sized to the label text.\n *\n * Returned as an SVG `<g>` fragment so it can be appended inside an enclosing\n * `<svg>`. Returns the empty string if `label` is falsy.\n *\n * Ported from `resources/doc-studio.jsx` `EdgePill`.\n */\n\nimport { escapeHtml } from '../escape.js';\n\n/** Pill placement (midpoint of the labelled edge). */\nexport interface PillPoint {\n readonly lx: number;\n readonly ly: number;\n}\n\n/**\n * @param p - Midpoint of the edge (typically from {@link ortho}).\n * @param label - Label text. Empty/undefined yields an empty string.\n * @param err - If true, the label is rendered in the error style.\n */\nexport function edgePill(p: PillPoint, label: string | undefined, err = false): string {\n if (label === undefined || label === '') return '';\n const w = Math.max(26, label.length * 5.4);\n const errClass = err ? ' err' : '';\n return (\n `<g>` +\n `<rect x=\"${p.lx - w / 2}\" y=\"${p.ly - 9}\" width=\"${w}\" height=\"18\" rx=\"9\" fill=\"#fff\" stroke=\"#d1d5db\"/>` +\n `<text x=\"${p.lx}\" y=\"${p.ly + 3}\" class=\"edge-label${errClass}\">${escapeHtml(label)}</text>` +\n `</g>`\n );\n}\n","/**\n * Renders a flowchart — decision diamonds, stadium start/end nodes, rectangles\n * for processes, with orthogonal edges and error-coloured paths.\n *\n * Ported from doc-studio.jsx `Flowchart` + `flowStyle`.\n */\n\nimport type { BlockDataMap } from '@avodado/core';\nimport { escapeHtml } from '../escape.js';\nimport { ortho } from '../svg/ortho.js';\nimport { wrapText } from '../svg/wrapText.js';\nimport { edgePill } from '../svg/edgePill.js';\nimport { diagramFrame } from './frame.js';\n\ntype Kind = 'start' | 'end' | 'decision' | 'process';\ninterface Style {\n shape: 'rect' | 'diamond' | 'stadium';\n fill: string;\n stroke: string;\n text: string;\n}\nfunction flowStyle(kind: Kind | undefined): Style {\n switch (kind ?? 'process') {\n case 'start':\n return { shape: 'stadium', fill: '#dcf1e2', stroke: '#1f9747', text: '#0f3d22' };\n case 'end':\n return { shape: 'stadium', fill: '#1a1a2e', stroke: '#1a1a2e', text: '#fff' };\n case 'decision':\n return { shape: 'diamond', fill: '#fde7cd', stroke: '#f7952c', text: '#7a3d00' };\n default:\n return { shape: 'rect', fill: '#e5eff8', stroke: '#0e54a1', text: '#0a3a6e' };\n }\n}\n\nconst ERR_LABEL_RE = /^(no|fail|error|reject)/i;\n\ninterface FlowFrameOpts {\n readonly tag: string;\n readonly tagBg?: string;\n}\n\n/** Generates the inner SVG (no diagram frame) — shared by `flow` and `dag`. */\nexport function renderFlowSvg(data: BlockDataMap['flow']): string {\n const nodes = data.nodes ?? [];\n const edges = data.edges ?? [];\n const cellW = 176;\n const cellH = 70;\n const gapX = 60;\n const gapY = 56;\n const padX = 26;\n const padTop = 26;\n const padBot = 22;\n const cols = Math.max(1, ...nodes.map((n) => n.col + ((n.w ?? 1) - 1)));\n const rows = Math.max(1, ...nodes.map((n) => n.row));\n const xOf = (c: number): number => padX + (c - 1) * (cellW + gapX);\n const yOf = (r: number): number => padTop + (r - 1) * (cellH + gapY);\n const rectFor = (n: { col: number; row: number; w?: number | undefined }): {\n x: number;\n y: number;\n w: number;\n h: number;\n } => ({\n x: xOf(n.col),\n y: yOf(n.row),\n w: (n.w ?? 1) * cellW + ((n.w ?? 1) - 1) * gapX,\n h: cellH,\n });\n const byId = new Map(nodes.map((n) => [n.id, n]));\n const width = padX * 2 + cols * cellW + (cols - 1) * gapX;\n const height = padTop + rows * cellH + (rows - 1) * gapY + padBot;\n\n let s = `<svg viewBox=\"0 0 ${width} ${height}\" role=\"img\"><title>Flowchart</title>`;\n\n for (const e of edges) {\n const A = byId.get(e.from);\n const B = byId.get(e.to);\n if (!A || !B) continue;\n const p = ortho(rectFor(A), rectFor(B));\n const isErr = e.kind === 'error' || ERR_LABEL_RE.test(e.label ?? '');\n const stroke = isErr ? '#991b1b' : '#1a1a2e';\n const marker = isErr ? 'gErr' : 'gArrow';\n const sw = isErr ? 1.6 : 1.4;\n s +=\n `<g><path d=\"${p.d}\" fill=\"none\" stroke=\"${stroke}\" stroke-width=\"${sw}\" marker-end=\"url(#${marker})\"/>` +\n edgePill(p, e.label, isErr) +\n `</g>`;\n }\n\n for (const n of nodes) {\n const r = rectFor(n);\n const st = flowStyle(n.kind);\n const cx = r.x + r.w / 2;\n const cy = r.y + r.h / 2;\n let shape: string;\n if (st.shape === 'diamond') {\n shape = `<polygon points=\"${cx},${r.y} ${r.x + r.w},${cy} ${cx},${r.y + r.h} ${r.x},${cy}\" fill=\"${st.fill}\" stroke=\"${st.stroke}\" stroke-width=\"1.5\"/>`;\n } else if (st.shape === 'stadium') {\n shape = `<rect x=\"${r.x}\" y=\"${r.y}\" width=\"${r.w}\" height=\"${r.h}\" rx=\"${r.h / 2}\" fill=\"${st.fill}\" stroke=\"${st.stroke}\" stroke-width=\"1.5\"/>`;\n } else {\n shape = `<rect x=\"${r.x}\" y=\"${r.y}\" width=\"${r.w}\" height=\"${r.h}\" rx=\"7\" fill=\"${st.fill}\" stroke=\"${st.stroke}\" stroke-width=\"1.4\"/>`;\n }\n const lines = wrapText(n.label, 22, 2);\n const texts = lines\n .map(\n (ln, j) =>\n `<text x=\"${cx}\" y=\"${cy + 4 - (lines.length - 1) * 7 + j * 14}\" class=\"fc-label\" fill=\"${st.text}\">${escapeHtml(ln)}</text>`,\n )\n .join('');\n s += `<g filter=\"url(#gshadow)\">${shape}${texts}</g>`;\n }\n\n s += `</svg>`;\n return s;\n}\n\nfunction renderFlowFrame(data: BlockDataMap['flow'], frame: FlowFrameOpts): string {\n return diagramFrame(\n {\n tag: frame.tag,\n ...(frame.tagBg !== undefined ? { tagBg: frame.tagBg } : {}),\n ...(data.title !== undefined ? { title: data.title } : {}),\n ...(data.description !== undefined ? { desc: data.description } : {}),\n },\n renderFlowSvg(data),\n );\n}\n\n/** `flow` — decision flow with slate `FLOW` tag. */\nexport function renderFlow(data: BlockDataMap['flow']): string {\n return renderFlowFrame(data, { tag: 'FLOW', tagBg: '#374151' });\n}\n/** `dag` — same shape, navy `DAG` tag (pipeline / directed-acyclic graph). */\nexport function renderDag(data: BlockDataMap['dag']): string {\n return renderFlowFrame(data as BlockDataMap['flow'], { tag: 'DAG', tagBg: '#0e54a1' });\n}\n","/**\n * Renders a state machine: rounded state pills + start/terminal markers + an\n * orthogonal-routed edge per transition, plus a transition table below.\n *\n * Ported from doc-studio.jsx `StateMachine` + `TransitionTable`.\n */\n\nimport type { BlockDataMap } from '@avodado/core';\nimport { escapeHtml } from '../escape.js';\nimport { ortho } from '../svg/ortho.js';\nimport { edgePill } from '../svg/edgePill.js';\nimport { diagramFrame } from './frame.js';\n\ntype StateNode = NonNullable<BlockDataMap['state']['states']>[number];\n\nfunction rectFor(s: StateNode, cellW: number, cellH: number, gapX: number, gapY: number, padX: number, padTop: number): {\n x: number;\n y: number;\n w: number;\n h: number;\n cx: number;\n cy: number;\n} {\n const cx = padX + (s.col - 1) * (cellW + gapX) + cellW / 2;\n const cy = padTop + (s.row - 1) * (cellH + gapY) + cellH / 2;\n if (s.kind === 'start' || s.kind === 'terminal') {\n return { x: cx - 13, y: cy - 13, w: 26, h: 26, cx, cy };\n }\n const pw = Math.max(96, (s.name ?? '').length * 8 + 26);\n const ph = 46;\n return { x: cx - pw / 2, y: cy - ph / 2, w: pw, h: ph, cx, cy };\n}\n\nfunction pillCls(kind: StateNode['kind']): string {\n if (kind === 'terminal') return 'pill pill-end';\n if (kind === 'wait') return 'pill pill-wait';\n if (kind === 'start') return 'pill pill-init';\n return 'pill pill-active';\n}\n\nexport function renderState(data: BlockDataMap['state']): string {\n const states = data.states ?? [];\n const trans = data.transitions ?? [];\n const cellW = 168;\n const cellH = 64;\n const gapX = 74;\n const gapY = 60;\n const padX = 30;\n const padTop = 30;\n const padBot = 20;\n const cols = Math.max(1, ...states.map((s) => s.col));\n const rows = Math.max(1, ...states.map((s) => s.row));\n const width = padX * 2 + cols * cellW + (cols - 1) * gapX;\n const height = padTop * 2 + rows * cellH + (rows - 1) * gapY + padBot;\n const byId = new Map(states.map((s) => [s.id, s]));\n\n let s = `<svg viewBox=\"0 0 ${width} ${height}\" role=\"img\"><title>State machine</title>`;\n\n // edges first\n for (const t of trans) {\n const A = byId.get(t.from);\n const B = byId.get(t.to);\n if (!A || !B) continue;\n const label = t.event + (t.guard !== undefined ? ` ${t.guard}` : '');\n if (t.from === t.to) {\n const r = rectFor(A, cellW, cellH, gapX, gapY, padX, padTop);\n s +=\n `<g><path d=\"M ${r.cx - 12} ${r.y} C ${r.cx - 30} ${r.y - 32}, ${r.cx + 30} ${r.y - 32}, ${r.cx + 12} ${r.y}\" fill=\"none\" stroke=\"#1a1a2e\" stroke-width=\"1.3\" marker-end=\"url(#gArrow)\"/>` +\n edgePill({ lx: r.cx, ly: r.y - 28 }, label) +\n `</g>`;\n continue;\n }\n const p = ortho(\n rectFor(A, cellW, cellH, gapX, gapY, padX, padTop),\n rectFor(B, cellW, cellH, gapX, gapY, padX, padTop),\n );\n s +=\n `<g><path d=\"${p.d}\" fill=\"none\" stroke=\"#1a1a2e\" stroke-width=\"1.3\" marker-end=\"url(#gArrow)\"/>` +\n edgePill(p, label) +\n `</g>`;\n }\n\n // states\n for (const st of states) {\n const r = rectFor(st, cellW, cellH, gapX, gapY, padX, padTop);\n if (st.kind === 'start') {\n s += `<circle cx=\"${r.cx}\" cy=\"${r.cy}\" r=\"10\" fill=\"#1a1a2e\"/>`;\n } else if (st.kind === 'terminal') {\n s +=\n `<g>` +\n `<circle cx=\"${r.cx}\" cy=\"${r.cy}\" r=\"12\" fill=\"#fff\" stroke=\"#1a1a2e\" stroke-width=\"1.5\"/>` +\n `<circle cx=\"${r.cx}\" cy=\"${r.cy}\" r=\"6\" fill=\"#1a1a2e\"/>` +\n `</g>`;\n } else {\n const fill = st.kind === 'wait' ? '#fde7cd' : '#dcf1e2';\n const stroke = st.kind === 'wait' ? '#f7952c' : '#1f9747';\n s +=\n `<g filter=\"url(#gshadow)\">` +\n `<rect x=\"${r.x}\" y=\"${r.y}\" width=\"${r.w}\" height=\"${r.h}\" rx=\"23\" fill=\"${fill}\" stroke=\"${stroke}\" stroke-width=\"1.5\"/>` +\n `<text x=\"${r.cx}\" y=\"${r.cy + 4.5}\" class=\"sm-name\" fill=\"#1a1a2e\">${escapeHtml(st.name ?? '')}</text>` +\n `</g>`;\n }\n }\n\n s += `</svg>`;\n\n // transition table\n const name = (id: string): string => byId.get(id)?.name ?? id;\n const rows2 = trans\n .map(\n (t) =>\n `<tr>` +\n `<td><span class=\"${pillCls(byId.get(t.from)?.kind)}\">${escapeHtml(name(t.from))}</span></td>` +\n `<td style=\"font-family:var(--font-mono);font-size:11px\">${escapeHtml(t.event)}</td>` +\n `<td style=\"color:#6b7280;font-size:11px\">${escapeHtml(t.guard ?? '—')}</td>` +\n `<td><span class=\"${pillCls(byId.get(t.to)?.kind)}\">${escapeHtml(name(t.to))}</span></td>` +\n `</tr>`,\n )\n .join('');\n const table =\n trans.length > 0\n ? `<table class=\"transition-table\">` +\n `<thead><tr><th>From</th><th>Event</th><th>Guard</th><th>To</th></tr></thead>` +\n `<tbody>${rows2}</tbody></table>`\n : '';\n\n return diagramFrame(\n {\n tag: 'STATE',\n tagBg: '#6b21a8',\n ...(data.title !== undefined ? { title: data.title } : {}),\n ...(data.description !== undefined ? { desc: data.description } : {}),\n },\n s + table,\n );\n}\n","/**\n * Renders a data-flow diagram — process bubbles, external rectangles, and\n * three-sided data-store boxes, with orthogonal edges.\n *\n * Ported from doc-studio.jsx `DFDDiagram` + `dfdStyle`.\n */\n\nimport type { BlockDataMap } from '@avodado/core';\nimport { escapeHtml } from '../escape.js';\nimport { ortho } from '../svg/ortho.js';\nimport { edgePill } from '../svg/edgePill.js';\nimport { diagramFrame } from './frame.js';\n\nfunction dfdStyle(kind: string | undefined): { fill: string; stroke: string; text: string } {\n switch ((kind ?? 'process').toLowerCase()) {\n case 'external':\n return { fill: '#f3f4f6', stroke: '#6b7280', text: '#374151' };\n case 'store':\n case 'datastore':\n return { fill: '#fde7cd', stroke: '#f7952c', text: '#7a3d00' };\n default:\n return { fill: '#e5eff8', stroke: '#0e54a1', text: '#0a3a6e' };\n }\n}\n\nexport function renderDfd(data: BlockDataMap['dfd']): string {\n const nodes = data.nodes ?? [];\n const edges = data.edges ?? [];\n const cellW = 168;\n const cellH = 76;\n const gapX = 60;\n const gapY = 58;\n const padX = 26;\n const padTop = 26;\n const padBot = 20;\n const cols = Math.max(1, ...nodes.map((n) => n.col));\n const rows = Math.max(1, ...nodes.map((n) => n.row));\n const xOf = (c: number): number => padX + (c - 1) * (cellW + gapX);\n const yOf = (r: number): number => padTop + (r - 1) * (cellH + gapY);\n const rectFor = (n: { col: number; row: number }): {\n x: number;\n y: number;\n w: number;\n h: number;\n } => ({ x: xOf(n.col), y: yOf(n.row), w: cellW, h: cellH });\n const byId = new Map(nodes.map((n) => [n.id, n]));\n const width = padX * 2 + cols * cellW + (cols - 1) * gapX;\n const height = padTop + rows * cellH + (rows - 1) * gapY + padBot;\n\n let s = `<svg viewBox=\"0 0 ${width} ${height}\" role=\"img\"><title>Data-flow diagram</title>`;\n\n for (const e of edges) {\n const A = byId.get(e.from);\n const B = byId.get(e.to);\n if (!A || !B) continue;\n const p = ortho(rectFor(A), rectFor(B));\n s +=\n `<g><path d=\"${p.d}\" fill=\"none\" stroke=\"#1a1a2e\" stroke-width=\"1.4\" marker-end=\"url(#gArrow)\"/>` +\n edgePill(p, e.label) +\n `</g>`;\n }\n\n for (const n of nodes) {\n const r = rectFor(n);\n const st = dfdStyle(n.kind);\n const k = (n.kind ?? 'process').toLowerCase();\n let shape: string;\n if (k === 'process') {\n shape = `<rect x=\"${r.x}\" y=\"${r.y}\" width=\"${r.w}\" height=\"${r.h}\" rx=\"16\" fill=\"${st.fill}\" stroke=\"${st.stroke}\" stroke-width=\"1.4\"/>`;\n } else if (k === 'store' || k === 'datastore') {\n shape =\n `<rect x=\"${r.x}\" y=\"${r.y}\" width=\"${r.w}\" height=\"${r.h}\" fill=\"${st.fill}\" stroke=\"none\"/>` +\n `<line x1=\"${r.x}\" y1=\"${r.y}\" x2=\"${r.x + r.w}\" y2=\"${r.y}\" stroke=\"${st.stroke}\" stroke-width=\"1.6\"/>` +\n `<line x1=\"${r.x}\" y1=\"${r.y + r.h}\" x2=\"${r.x + r.w}\" y2=\"${r.y + r.h}\" stroke=\"${st.stroke}\" stroke-width=\"1.6\"/>` +\n `<line x1=\"${r.x}\" y1=\"${r.y}\" x2=\"${r.x}\" y2=\"${r.y + r.h}\" stroke=\"${st.stroke}\" stroke-width=\"1.6\"/>`;\n } else {\n shape = `<rect x=\"${r.x}\" y=\"${r.y}\" width=\"${r.w}\" height=\"${r.h}\" fill=\"${st.fill}\" stroke=\"${st.stroke}\" stroke-width=\"1.4\"/>`;\n }\n const num =\n n.num !== undefined && k === 'process'\n ? `<text x=\"${r.x + 12}\" y=\"${r.y + 18}\" class=\"dfd-num\" fill=\"${st.text}\">${escapeHtml(n.num)}</text>`\n : '';\n s +=\n `<g filter=\"url(#gshadow)\">${shape}${num}` +\n `<text x=\"${r.x + r.w / 2}\" y=\"${r.y + r.h / 2 + 4}\" class=\"dfd-name\" fill=\"${st.text}\">${escapeHtml(n.name)}</text>` +\n `</g>`;\n }\n\n s += `</svg>`;\n return diagramFrame(\n {\n tag: 'DFD',\n tagBg: '#0e54a1',\n ...(data.title !== undefined ? { title: data.title } : {}),\n ...(data.description !== undefined ? { desc: data.description } : {}),\n },\n s,\n );\n}\n","/**\n * Renders a user-journey map — a table of touchpoints across stages, plus an\n * optional emotion curve (SVG polyline) showing user sentiment per stage.\n *\n * Ported from doc-studio.jsx `JourneyMap`.\n */\n\nimport type { BlockDataMap } from '@avodado/core';\nimport { escapeHtml } from '../escape.js';\n\nfunction clamp01(v: number): number {\n if (v < 0) return 0;\n if (v > 1) return 1;\n return v;\n}\n\nexport function renderJourney(data: BlockDataMap['journey']): string {\n const stages = data.stages ?? [];\n const rows = data.rows ?? [];\n const emotion = data.emotion ?? [];\n const n = Math.max(stages.length, 1);\n const W = Math.max(380, n * 150);\n const H = 92;\n const pad = 20;\n const colW = (W - pad * 2) / n;\n const ex = (i: number): number => pad + colW * (i + 0.5);\n const ey = (v: number): number => H - 14 - (H - 30) * clamp01(v);\n\n const head =\n `<tr><th></th>` +\n stages.map((s) => `<th class=\"c\">${escapeHtml(s.label)}</th>`).join('') +\n `</tr>`;\n const body = rows\n .map(\n (r) =>\n `<tr><td class=\"lead\">${escapeHtml(r.label)}</td>` +\n (r.cells ?? []).map((c) => `<td class=\"c\">${escapeHtml(c)}</td>`).join('') +\n `</tr>`,\n )\n .join('');\n\n let svg = '';\n if (emotion.length > 0) {\n const points = emotion.map((v, i) => `${ex(i)},${ey(v)}`).join(' ');\n const dots = emotion\n .map((v, i) => {\n const fill = v >= 0.6 ? '#1f9747' : v <= 0.35 ? '#991b1b' : '#f7952c';\n return `<circle cx=\"${ex(i)}\" cy=\"${ey(v)}\" r=\"5\" fill=\"${fill}\" stroke=\"#fff\" stroke-width=\"1.5\"/>`;\n })\n .join('');\n svg =\n `<div style=\"margin-top:10px\">` +\n `<div style=\"font-size:10px;color:#6b7280;font-weight:700;text-transform:uppercase;letter-spacing:.08em;margin-bottom:4px\">Emotion</div>` +\n `<svg viewBox=\"0 0 ${W} ${H}\" style=\"width:100%\" role=\"img\"><title>Emotion curve</title>` +\n `<polyline points=\"${points}\" fill=\"none\" stroke=\"#0e54a1\" stroke-width=\"2\"/>` +\n dots +\n `</svg></div>`;\n }\n\n return (\n `<div>` +\n `<table class=\"pres-table\"><thead>${head}</thead><tbody>${body}</tbody></table>` +\n svg +\n `</div>`\n );\n}\n","/**\n * Renders a Gantt chart — period columns across the top, task rows with\n * horizontal bars colored by kind (done / active / milestone / default).\n *\n * Ported from doc-studio.jsx `Gantt` + `ganttColor`.\n */\n\nimport type { BlockDataMap } from '@avodado/core';\nimport { escapeHtml } from '../escape.js';\n\nfunction ganttColor(kind: string | undefined): string {\n switch ((kind ?? '').toLowerCase()) {\n case 'done':\n return '#1f9747';\n case 'active':\n case 'current':\n return '#f7952c';\n case 'milestone':\n return '#6b21a8';\n default:\n return '#0e54a1';\n }\n}\n\nexport function renderGantt(data: BlockDataMap['gantt']): string {\n const periods = data.periods ?? [];\n const tasks = data.tasks ?? [];\n const P = Math.max(periods.length, 1);\n const labelW = 156;\n const padX = 20;\n const padTop = 34;\n const rowH = 30;\n const barH = 18;\n const colW = 64;\n const padBot = 14;\n const width = labelW + padX * 2 + P * colW;\n const height = padTop + tasks.length * rowH + padBot;\n const xCol = (i: number): number => labelW + padX + i * colW;\n\n let s = `<svg viewBox=\"0 0 ${width} ${height}\" role=\"img\"><title>Schedule</title>`;\n for (let i = 0; i < periods.length; i++) {\n s +=\n `<g>` +\n `<line x1=\"${xCol(i)}\" y1=\"${padTop - 6}\" x2=\"${xCol(i)}\" y2=\"${height - padBot}\" stroke=\"#eef0f3\" stroke-width=\"1\"/>` +\n `<text x=\"${xCol(i) + colW / 2}\" y=\"${padTop - 12}\" class=\"gantt-head\">${escapeHtml(periods[i] ?? '')}</text>` +\n `</g>`;\n }\n s += `<line x1=\"${xCol(P)}\" y1=\"${padTop - 6}\" x2=\"${xCol(P)}\" y2=\"${height - padBot}\" stroke=\"#eef0f3\" stroke-width=\"1\"/>`;\n for (let i = 0; i < tasks.length; i++) {\n const t = tasks[i];\n if (t === undefined) continue;\n const y = padTop + i * rowH;\n const bx = xCol(t.start ?? 0);\n const span = Math.max(1, t.span ?? 1);\n const bw = span * colW - 8;\n s +=\n `<g>` +\n `<text x=\"${padX}\" y=\"${y + rowH / 2 + 4}\" class=\"gantt-label\">${escapeHtml(t.label)}</text>` +\n `<rect x=\"${bx + 4}\" y=\"${y + (rowH - barH) / 2}\" width=\"${bw}\" height=\"${barH}\" rx=\"4\" fill=\"${ganttColor(t.kind)}\" filter=\"url(#gshadow)\"/>` +\n `</g>`;\n }\n s += `</svg>`;\n return s;\n}\n","/**\n * Renders a generic node-link graph — rounded pills colored by group, with\n * orthogonal edges (directed or undirected).\n *\n * Ported from doc-studio.jsx `Graph`.\n */\n\nimport type { BlockDataMap } from '@avodado/core';\nimport { escapeHtml } from '../escape.js';\nimport { ortho } from '../svg/ortho.js';\nimport { edgePill } from '../svg/edgePill.js';\nimport { diagramFrame } from './frame.js';\n\nconst CHART_COLORS = ['#0e54a1', '#1a6dbe', '#0f766e', '#1f9747', '#6b21a8', '#f7952c'];\n\nexport function renderGraph(data: BlockDataMap['graph']): string {\n const nodes = data.nodes ?? [];\n const edges = data.edges ?? [];\n const cellW = 150;\n const cellH = 84;\n const gapX = 44;\n const gapY = 40;\n const padX = 26;\n const padTop = 24;\n const padBot = 20;\n const cols = Math.max(1, ...nodes.map((n) => n.col));\n const rows = Math.max(1, ...nodes.map((n) => n.row));\n const cxOf = (c: number): number => padX + (c - 1) * (cellW + gapX) + cellW / 2;\n const cyOf = (r: number): number => padTop + (r - 1) * (cellH + gapY) + cellH / 2;\n const rectFor = (n: { col: number; row: number; label: string }): {\n x: number;\n y: number;\n w: number;\n h: number;\n cx: number;\n cy: number;\n } => {\n const cx = cxOf(n.col);\n const cy = cyOf(n.row);\n const w = Math.max(98, n.label.length * 8 + 26);\n return { x: cx - w / 2, y: cy - 20, w, h: 40, cx, cy };\n };\n const byId = new Map(nodes.map((n) => [n.id, n]));\n const width = padX * 2 + cols * cellW + (cols - 1) * gapX;\n const height = padTop + rows * cellH + (rows - 1) * gapY + padBot;\n\n let s = `<svg viewBox=\"0 0 ${width} ${height}\" role=\"img\"><title>Graph</title>`;\n\n for (const e of edges) {\n const A = byId.get(e.from);\n const B = byId.get(e.to);\n if (!A || !B) continue;\n const p = ortho(rectFor(A), rectFor(B));\n const directed = (e.dir ?? 'directed') !== 'undirected';\n const markerAttr = directed ? ` marker-end=\"url(#gArrow)\"` : '';\n s +=\n `<g><path d=\"${p.d}\" fill=\"none\" stroke=\"#6b7280\" stroke-width=\"1.4\"${markerAttr}/>` +\n edgePill(p, e.label) +\n `</g>`;\n }\n\n for (const n of nodes) {\n const r = rectFor(n);\n const c = CHART_COLORS[(n.group ?? 0) % CHART_COLORS.length] ?? '#0e54a1';\n s +=\n `<g filter=\"url(#gshadow)\">` +\n `<rect x=\"${r.x}\" y=\"${r.y}\" width=\"${r.w}\" height=\"${r.h}\" rx=\"20\" fill=\"#fff\" stroke=\"${c}\" stroke-width=\"1.6\"/>` +\n `<text x=\"${r.cx}\" y=\"${r.cy + 4}\" class=\"blk-name\" fill=\"${c}\" text-anchor=\"middle\" style=\"font-size:12px\">${escapeHtml(n.label)}</text>` +\n `</g>`;\n }\n\n s += `</svg>`;\n return diagramFrame(\n {\n tag: 'GRAPH',\n tagBg: '#374151',\n ...(data.title !== undefined ? { title: data.title } : {}),\n ...(data.description !== undefined ? { desc: data.description } : {}),\n },\n s,\n );\n}\n","/**\n * Renders a 2x2 matrix — labelled axes, optional low/high endpoint labels,\n * and dots for each `(x, y, label)` item.\n *\n * Ported from doc-studio.jsx `Quadrant`.\n */\n\nimport type { BlockDataMap } from '@avodado/core';\nimport { escapeHtml } from '../escape.js';\nimport { diagramFrame } from './frame.js';\n\nfunction clamp01(v: number | undefined): number {\n if (v === undefined || Number.isNaN(v)) return 0.5;\n if (v < 0) return 0;\n if (v > 1) return 1;\n return v;\n}\n\nexport function renderQuadrant(data: BlockDataMap['quadrant']): string {\n const W = 580;\n const H = 440;\n const pad = 56;\n const x0 = pad;\n const x1 = W - pad;\n const y0 = pad - 16;\n const y1 = H - pad;\n const mx = (x0 + x1) / 2;\n const my = (y0 + y1) / 2;\n const px = (v: number | undefined): number => x0 + (x1 - x0) * clamp01(v);\n const py = (v: number | undefined): number => y1 - (y1 - y0) * clamp01(v);\n const items = data.items ?? [];\n const xA = data.xAxis ?? {};\n const yA = data.yAxis ?? {};\n\n let s = `<svg viewBox=\"0 0 ${W} ${H}\" role=\"img\"><title>Quadrant</title>`;\n s += `<rect x=\"${x0}\" y=\"${y0}\" width=\"${x1 - x0}\" height=\"${y1 - y0}\" fill=\"#fafbfc\" stroke=\"#e5e7eb\"/>`;\n s += `<rect x=\"${mx}\" y=\"${y0}\" width=\"${x1 - mx}\" height=\"${my - y0}\" fill=\"#0e54a1\" fill-opacity=\"0.04\"/>`;\n s += `<line x1=\"${x0}\" y1=\"${my}\" x2=\"${x1}\" y2=\"${my}\" class=\"quad-axis\" marker-end=\"url(#gArrow)\"/>`;\n s += `<line x1=\"${mx}\" y1=\"${y1}\" x2=\"${mx}\" y2=\"${y0}\" class=\"quad-axis\" marker-end=\"url(#gArrow)\"/>`;\n\n if (xA.label !== undefined)\n s += `<text x=\"${x1}\" y=\"${y1 + 30}\" class=\"quad-title\" text-anchor=\"end\">${escapeHtml(xA.label)} →</text>`;\n if (yA.label !== undefined)\n s += `<text x=\"${mx - 8}\" y=\"${y0 - 4}\" class=\"quad-title\" text-anchor=\"end\">↑ ${escapeHtml(yA.label)}</text>`;\n if (xA.low !== undefined)\n s += `<text x=\"${x0}\" y=\"${y1 + 16}\" class=\"quad-end\" text-anchor=\"start\">${escapeHtml(xA.low)}</text>`;\n if (xA.high !== undefined)\n s += `<text x=\"${x1}\" y=\"${y1 + 16}\" class=\"quad-end\" text-anchor=\"end\">${escapeHtml(xA.high)}</text>`;\n if (yA.high !== undefined)\n s += `<text x=\"${x0 - 10}\" y=\"${y0 + 6}\" class=\"quad-end\" text-anchor=\"end\">${escapeHtml(yA.high)}</text>`;\n if (yA.low !== undefined)\n s += `<text x=\"${x0 - 10}\" y=\"${y1}\" class=\"quad-end\" text-anchor=\"end\">${escapeHtml(yA.low)}</text>`;\n\n for (const it of items) {\n const cx = px(it.x);\n const cy = py(it.y);\n const left = cx > mx;\n const tx = cx + (left ? -12 : 12);\n const anchor = left ? 'end' : 'start';\n s +=\n `<g filter=\"url(#gshadow)\">` +\n `<circle cx=\"${cx}\" cy=\"${cy}\" r=\"7\" fill=\"#f7952c\" stroke=\"#fff\" stroke-width=\"1.5\"/>` +\n `<text x=\"${tx}\" y=\"${cy + 4}\" class=\"quad-pt-label\" text-anchor=\"${anchor}\">${escapeHtml(it.label)}</text>` +\n `</g>`;\n }\n\n s += `</svg>`;\n return diagramFrame(\n {\n tag: '2×2',\n tagBg: '#0f766e',\n ...(data.title !== undefined ? { title: data.title } : {}),\n ...(data.description !== undefined ? { desc: data.description } : {}),\n },\n s,\n );\n}\n","/**\n * Renders a swimlane diagram — horizontal lanes per role with labelled steps\n * in column positions, plus orthogonal links between steps.\n *\n * Ported from doc-studio.jsx `Swimlane` + `laneColor`.\n */\n\nimport type { BlockDataMap } from '@avodado/core';\nimport { escapeHtml } from '../escape.js';\nimport { ortho } from '../svg/ortho.js';\nimport { wrapText } from '../svg/wrapText.js';\nimport { edgePill } from '../svg/edgePill.js';\nimport { diagramFrame } from './frame.js';\n\nfunction laneColor(kind: string | undefined): { fill: string; stroke: string; text: string } {\n switch ((kind ?? 'action').toLowerCase()) {\n case 'decision':\n return { fill: '#fde7cd', stroke: '#f7952c', text: '#7a3d00' };\n case 'start':\n case 'end':\n return { fill: '#dcf1e2', stroke: '#1f9747', text: '#0f3d22' };\n case 'wait':\n return { fill: '#f3f4f6', stroke: '#6b7280', text: '#374151' };\n default:\n return { fill: '#e5eff8', stroke: '#0e54a1', text: '#0a3a6e' };\n }\n}\n\nexport function renderSwimlane(data: BlockDataMap['swimlane']): string {\n const lanes = data.lanes ?? [];\n const steps = data.steps ?? [];\n const links = data.links ?? [];\n const labelW = 132;\n const padX = 18;\n const padTop = 24;\n const padBot = 20;\n const laneH = 92;\n const colW = 168;\n const gapCol = 34;\n const boxW = 150;\n const boxH = 52;\n const cols = Math.max(1, ...steps.map((s) => s.col));\n const xCol = (c: number): number => labelW + padX + (c - 1) * (colW + gapCol);\n const yLane = (l: number): number => padTop + l * laneH;\n const rectFor = (s: { col: number; lane: number }): {\n x: number;\n y: number;\n w: number;\n h: number;\n } => ({\n x: xCol(s.col) + (colW - boxW) / 2,\n y: yLane(s.lane) + (laneH - boxH) / 2,\n w: boxW,\n h: boxH,\n });\n const byId = new Map(steps.map((s) => [s.id, s]));\n const width = labelW + padX * 2 + cols * colW + (cols - 1) * gapCol;\n const height = padTop + lanes.length * laneH + padBot;\n\n let s = `<svg viewBox=\"0 0 ${width} ${height}\" role=\"img\"><title>Swimlane</title>`;\n\n for (let i = 0; i < lanes.length; i++) {\n const L = lanes[i];\n if (L === undefined) continue;\n s +=\n `<g>` +\n `<rect x=\"${padX}\" y=\"${yLane(i)}\" width=\"${width - padX * 2}\" height=\"${laneH}\" fill=\"${i % 2 ? '#fafafa' : '#fff'}\" stroke=\"#e5e7eb\"/>` +\n `<rect x=\"${padX}\" y=\"${yLane(i)}\" width=\"${labelW}\" height=\"${laneH}\" fill=\"#0e54a1\"/>` +\n `<text x=\"${padX + 14}\" y=\"${yLane(i) + laneH / 2 + 4}\" class=\"sl-lane-label\">${escapeHtml(L.label)}</text>` +\n `</g>`;\n }\n\n for (const lk of links) {\n const A = byId.get(lk.from);\n const B = byId.get(lk.to);\n if (!A || !B) continue;\n const p = ortho(rectFor(A), rectFor(B));\n s +=\n `<g><path d=\"${p.d}\" fill=\"none\" stroke=\"#1a1a2e\" stroke-width=\"1.4\" marker-end=\"url(#gArrow)\"/>` +\n edgePill(p, lk.label) +\n `</g>`;\n }\n\n for (const st of steps) {\n const r = rectFor(st);\n const c = laneColor(st.kind);\n const lines = wrapText(st.label, 20, 2);\n const texts = lines\n .map(\n (ln, j) =>\n `<text x=\"${r.x + r.w / 2}\" y=\"${r.y + r.h / 2 + 4 - (lines.length - 1) * 7 + j * 14}\" class=\"sl-step\" fill=\"${c.text}\">${escapeHtml(ln)}</text>`,\n )\n .join('');\n s +=\n `<g filter=\"url(#gshadow)\">` +\n `<rect x=\"${r.x}\" y=\"${r.y}\" width=\"${r.w}\" height=\"${r.h}\" rx=\"7\" fill=\"${c.fill}\" stroke=\"${c.stroke}\" stroke-width=\"1.3\"/>` +\n texts +\n `</g>`;\n }\n\n s += `</svg>`;\n return diagramFrame(\n {\n tag: 'LANES',\n tagBg: '#0e54a1',\n ...(data.title !== undefined ? { title: data.title } : {}),\n ...(data.description !== undefined ? { desc: data.description } : {}),\n },\n s,\n );\n}\n","/**\n * Shared color palette + node-glyph helpers used by architecture-flavoured\n * blocks (cluster, block, infra, felogic, belogic, …).\n *\n * Ported from doc-studio.jsx `blockStyle` + `nodeGlyph`.\n */\n\n/** Color triple for a node kind: accent (stripe / border), fill, text color. */\nexport interface NodeColors {\n readonly accent: string;\n readonly fill: string;\n readonly text: string;\n}\n\n/** Maps a node `kind` (client / service / store / queue / ...) to colors. */\nexport function blockStyle(kind: string | undefined): NodeColors {\n switch ((kind ?? '').toLowerCase()) {\n case 'client':\n return { accent: '#0e54a1', fill: '#e5eff8', text: '#0a3a6e' };\n case 'service':\n case 'microservice':\n case 'compute':\n case 'container':\n return { accent: '#1f9747', fill: '#dcf1e2', text: '#0f3d22' };\n case 'data':\n return { accent: '#6b21a8', fill: '#ede9fe', text: '#4a1772' };\n case 'store':\n case 'db':\n case 'database':\n return { accent: '#f7952c', fill: '#fde7cd', text: '#7a3d00' };\n case 'bucket':\n case 'blob':\n case 'object':\n return { accent: '#b45309', fill: '#fef3c7', text: '#7a3d00' };\n case 'queue':\n return { accent: '#0f766e', fill: '#ccfbf1', text: '#0f4f49' };\n case 'cache':\n return { accent: '#0891b2', fill: '#cffafe', text: '#0e4f5c' };\n case 'gateway':\n case 'lb':\n return { accent: '#0e54a1', fill: '#cfe0f3', text: '#0a3a6e' };\n case 'function':\n case 'lambda':\n return { accent: '#7c3aed', fill: '#ede9fe', text: '#4a1772' };\n case 'cdn':\n return { accent: '#1a6dbe', fill: '#e5eff8', text: '#0a3a6e' };\n case 'external':\n return { accent: '#6b7280', fill: '#f3f4f6', text: '#374151' };\n case 'producer':\n return { accent: '#1f9747', fill: '#dcf1e2', text: '#0f3d22' };\n case 'topic':\n return { accent: '#0f766e', fill: '#ccfbf1', text: '#0f4f49' };\n case 'consumer':\n return { accent: '#1a6dbe', fill: '#e5eff8', text: '#0a3a6e' };\n case 'context':\n return { accent: '#6b21a8', fill: '#ede9fe', text: '#4a1772' };\n case 'firewall':\n return { accent: '#991b1b', fill: '#fee2e2', text: '#991b1b' };\n default:\n return { accent: '#374151', fill: '#fff', text: '#1a1a2e' };\n }\n}\n\n/**\n * Returns a small SVG glyph (database cylinder, queue bars, function ƒ, …)\n * for the given node kind, or empty string if no glyph applies.\n *\n * @param kind - Node kind.\n * @param x - Glyph top-left x.\n * @param y - Glyph top-left y.\n * @param c - Stroke / fill color.\n */\nexport function nodeGlyph(kind: string | undefined, x: number, y: number, c: string): string {\n const k = (kind ?? '').toLowerCase();\n if (k === 'store' || k === 'db' || k === 'database') {\n return (\n `<g stroke=\"${c}\" stroke-width=\"1.3\" fill=\"none\">` +\n `<ellipse cx=\"${x + 8}\" cy=\"${y + 3}\" rx=\"7\" ry=\"3\"/>` +\n `<path d=\"M${x + 1} ${y + 3} V ${y + 13}\"/>` +\n `<path d=\"M${x + 15} ${y + 3} V ${y + 13}\"/>` +\n `<path d=\"M${x + 1} ${y + 13} a 7 3 0 0 0 14 0\"/>` +\n `</g>`\n );\n }\n if (k === 'bucket' || k === 'blob' || k === 'object') {\n return (\n `<g stroke=\"${c}\" stroke-width=\"1.3\" fill=\"none\">` +\n `<ellipse cx=\"${x + 8}\" cy=\"${y + 3}\" rx=\"7\" ry=\"2.5\"/>` +\n `<path d=\"M${x + 1.5} ${y + 3} L ${x + 3.5} ${y + 14} L ${x + 12.5} ${y + 14} L ${x + 14.5} ${y + 3}\"/>` +\n `</g>`\n );\n }\n if (k === 'queue' || k === 'topic') {\n return (\n `<g stroke=\"${c}\" stroke-width=\"1.6\">` +\n `<path d=\"M${x + 2} ${y + 1} V ${y + 14}\"/>` +\n `<path d=\"M${x + 8} ${y + 1} V ${y + 14}\"/>` +\n `<path d=\"M${x + 14} ${y + 1} V ${y + 14}\"/>` +\n `</g>`\n );\n }\n if (k === 'firewall') {\n return `<path d=\"M${x + 8} ${y} L ${x + 15} ${y + 3} V ${y + 9} Q ${x + 15} ${y + 14} ${x + 8} ${y + 16} Q ${x + 1} ${y + 14} ${x + 1} ${y + 9} V ${y + 3} Z\" fill=\"none\" stroke=\"${c}\" stroke-width=\"1.3\"/>`;\n }\n if (k === 'cache') {\n // stacked slabs (memory layers) — three offset parallelograms\n const slab = (dy: number): string =>\n `<path d=\"M${x + 1} ${y + 5 + dy} L${x + 8} ${y + 2 + dy} L${x + 15} ${y + 5 + dy} L${x + 8} ${y + 8 + dy} Z\" fill=\"none\" stroke=\"${c}\" stroke-width=\"1.2\"/>`;\n return `<g>${slab(0)}${slab(3.5)}${slab(7)}</g>`;\n }\n if (k === 'function' || k === 'lambda') {\n return `<text x=\"${x + 7}\" y=\"${y + 14}\" font-family=\"Georgia, serif\" font-size=\"17\" font-style=\"italic\" font-weight=\"700\" fill=\"${c}\" text-anchor=\"middle\">ƒ</text>`;\n }\n if (k === 'cdn' || k === 'external') {\n return `<path d=\"M${x + 3} ${y + 13} a 4 4 0 0 1 0.5 -8 a 5 5 0 0 1 9.5 1.2 a 3 3 0 0 1 1 6.8 z\" fill=\"none\" stroke=\"${c}\" stroke-width=\"1.3\"/>`;\n }\n if (k === 'gateway' || k === 'lb') {\n return (\n `<g stroke=\"${c}\" stroke-width=\"1.5\" fill=\"none\">` +\n `<path d=\"M${x + 2} ${y + 1} L ${x + 8} ${y + 7} L ${x + 2} ${y + 13}\"/>` +\n `<path d=\"M${x + 8} ${y + 1} L ${x + 14} ${y + 7} L ${x + 8} ${y + 13}\"/>` +\n `</g>`\n );\n }\n if (k === 'service' || k === 'microservice' || k === 'compute' || k === 'container') {\n return (\n `<g stroke=\"${c}\" stroke-width=\"1.3\">` +\n `<rect x=\"${x + 4}\" y=\"${y + 1}\" width=\"11\" height=\"11\" rx=\"1.5\" fill=\"none\"/>` +\n `<rect x=\"${x + 1}\" y=\"${y + 4}\" width=\"11\" height=\"11\" rx=\"1.5\" fill=\"#fff\"/>` +\n `</g>`\n );\n }\n return '';\n}\n\n/** Edge-style preset: per-kind stroke, dash, marker, error flag. */\nexport interface EdgeStyle {\n readonly stroke: string;\n readonly sw: number;\n readonly dash: string;\n readonly marker: string;\n readonly err: boolean;\n}\n\n/** Edge style table — `solid | dashed | forbidden | error` → SVG attributes. */\nexport const GEDGE: Record<string, EdgeStyle> = {\n solid: { stroke: 'var(--charcoal)', sw: 1.4, dash: '', marker: 'gArrow', err: false },\n dashed: { stroke: 'var(--gray)', sw: 1.4, dash: '5 4', marker: 'gSoft', err: false },\n forbidden: { stroke: '#991b1b', sw: 2, dash: '', marker: 'gErr', err: true },\n error: { stroke: '#991b1b', sw: 1.6, dash: '', marker: 'gErr', err: true },\n};\n","/**\n * Renders a C4 model diagram (context / container / component levels).\n *\n * Per-node colour comes from a kind+family lookup (`c4Style`). Optional\n * boundary box wraps the internal nodes (container/component/store). A legend\n * sits below the SVG.\n *\n * Ported from doc-studio.jsx `C4Diagram` + `c4Style`.\n */\n\nimport type { BlockDataMap } from '@avodado/core';\nimport { escapeHtml } from '../escape.js';\nimport { ortho } from '../svg/ortho.js';\nimport { wrapText } from '../svg/wrapText.js';\nimport { edgePill } from '../svg/edgePill.js';\nimport { GEDGE } from '../svg/blockStyle.js';\nimport { diagramFrame } from './frame.js';\n\ntype Node = NonNullable<BlockDataMap['c4']['nodes']>[number];\n\ninterface C4Style {\n accent: string;\n fill: string;\n text: string;\n sub: string;\n chip: string;\n solid?: boolean;\n dash?: string;\n}\n\nfunction c4Style(n: Node): C4Style {\n const f = (n.family ?? '').toLowerCase();\n switch (n.kind) {\n case 'person':\n return {\n accent: '#0e54a1',\n fill: '#0e54a1',\n text: '#fff',\n sub: '#cfe0f3',\n chip: 'Person',\n solid: true,\n };\n case 'system':\n return {\n accent: '#1f9747',\n fill: '#dcf1e2',\n text: '#0f3d22',\n sub: '#356b49',\n chip: 'Software System',\n };\n case 'external':\n return {\n accent: '#6b7280',\n fill: '#f3f4f6',\n text: '#374151',\n sub: '#6b7280',\n chip: 'External System',\n };\n case 'store':\n return {\n accent: '#f7952c',\n fill: '#fde7cd',\n text: '#7a3d00',\n sub: '#9a5a12',\n chip: 'Database',\n };\n case 'component':\n if (f === 'repo')\n return {\n accent: '#374151',\n fill: '#f3f4f6',\n text: '#1a1a2e',\n sub: '#374151',\n chip: 'Component',\n };\n if (f === 'external')\n return {\n accent: '#6b7280',\n fill: '#fff',\n text: '#374151',\n sub: '#6b7280',\n chip: 'External',\n dash: '4 3',\n };\n if (f === 'controller')\n return {\n accent: '#0e54a1',\n fill: '#e5eff8',\n text: '#0a3a6e',\n sub: '#365f86',\n chip: 'Component',\n };\n return {\n accent: '#1f9747',\n fill: '#dcf1e2',\n text: '#0f3d22',\n sub: '#356b49',\n chip: 'Component',\n };\n default:\n if (f === 'data')\n return {\n accent: '#6b21a8',\n fill: '#ede9fe',\n text: '#4a1772',\n sub: '#6b21a8',\n chip: 'Container',\n };\n if (f === 'service')\n return {\n accent: '#1f9747',\n fill: '#dcf1e2',\n text: '#0f3d22',\n sub: '#356b49',\n chip: 'Container',\n };\n if (f === 'client')\n return {\n accent: '#0e54a1',\n fill: '#e5eff8',\n text: '#0a3a6e',\n sub: '#365f86',\n chip: 'Container',\n };\n if (f === 'store')\n return {\n accent: '#f7952c',\n fill: '#fde7cd',\n text: '#7a3d00',\n sub: '#9a5a12',\n chip: 'Database',\n };\n return {\n accent: '#0e54a1',\n fill: '#e5eff8',\n text: '#0a3a6e',\n sub: '#365f86',\n chip: 'Container',\n };\n }\n}\n\nconst LEGEND: ReadonlyArray<{ sw: string; label: string }> = [\n { sw: '#0e54a1', label: 'Person' },\n { sw: '#dcf1e2', label: 'System / service' },\n { sw: '#e5eff8', label: 'Container (client)' },\n { sw: '#ede9fe', label: 'Container (data)' },\n { sw: '#fde7cd', label: 'Database' },\n { sw: '#f3f4f6', label: 'External' },\n];\n\nexport function renderC4(data: BlockDataMap['c4']): string {\n const nodes = data.nodes ?? [];\n const edges = data.edges ?? [];\n const byId = new Map(nodes.map((n) => [n.id, n]));\n const cellW = 212;\n const cellH = 102;\n const gapX = 56;\n const gapY = 64;\n const padX = 26;\n const padTop = 46;\n const padBot = 24;\n const cols = Math.max(1, ...nodes.map((n) => n.col + ((n.w ?? 1) - 1)));\n const rows = Math.max(1, ...nodes.map((n) => n.row));\n const rectFor = (n: Node): { x: number; y: number; w: number; h: number } => ({\n x: padX + (n.col - 1) * (cellW + gapX),\n y: padTop + (n.row - 1) * (cellH + gapY),\n w: (n.w ?? 1) * cellW + ((n.w ?? 1) - 1) * gapX,\n h: cellH,\n });\n const width = padX * 2 + cols * cellW + (cols - 1) * gapX;\n const height = padTop + rows * cellH + (rows - 1) * gapY + padBot;\n\n // Boundary box around the \"internal\" nodes (container/component/store)\n let boundarySvg = '';\n if (data.boundary !== undefined) {\n const internals = nodes\n .filter((n) => n.kind === 'container' || n.kind === 'component' || n.kind === 'store')\n .map(rectFor);\n if (internals.length > 0) {\n const minX = Math.min(...internals.map((r) => r.x)) - 16;\n const minY = Math.min(...internals.map((r) => r.y)) - 26;\n const maxX = Math.max(...internals.map((r) => r.x + r.w)) + 16;\n const maxY = Math.max(...internals.map((r) => r.y + r.h)) + 16;\n const w = Math.max(120, data.boundary.label.length * 6.2);\n boundarySvg =\n `<g>` +\n `<rect x=\"${minX}\" y=\"${minY}\" width=\"${maxX - minX}\" height=\"${maxY - minY}\" rx=\"12\" class=\"c4-boundary\"/>` +\n `<rect x=\"${minX + 12}\" y=\"${minY - 8}\" width=\"${w}\" height=\"16\" fill=\"#fff\"/>` +\n `<text x=\"${minX + 16}\" y=\"${minY + 4}\" class=\"c4-boundary-label\">${escapeHtml(data.boundary.label)}</text>` +\n `</g>`;\n }\n }\n\n let s = `<svg viewBox=\"0 0 ${width} ${height}\" role=\"img\"><title>C4 diagram</title>${boundarySvg}`;\n\n for (const e of edges) {\n const A = byId.get(e.from);\n const B = byId.get(e.to);\n if (!A || !B) continue;\n const p = ortho(rectFor(A), rectFor(B));\n const st = GEDGE[e.kind ?? 'solid'] ??\n GEDGE['solid'] ?? {\n stroke: '#1a1a2e',\n sw: 1.4,\n dash: '',\n marker: 'gArrow',\n err: false,\n };\n s +=\n `<g><path d=\"${p.d}\" fill=\"none\" stroke=\"${st.stroke}\" stroke-width=\"${st.sw}\" stroke-dasharray=\"${st.dash}\" marker-end=\"url(#${st.marker})\"/>` +\n edgePill(p, e.label, st.err) +\n `</g>`;\n }\n\n for (const n of nodes) {\n const r = rectFor(n);\n const st = c4Style(n);\n const px = r.x + 16;\n const desc = wrapText(n.desc, 30, 2);\n const strokeWidth = st.solid === true ? 0 : 1.2;\n const strokeAttr = st.solid === true ? 'none' : st.accent;\n const dashAttr = st.dash !== undefined ? ` stroke-dasharray=\"${st.dash}\"` : '';\n const stripe =\n st.solid === true\n ? ''\n : `<rect x=\"${r.x}\" y=\"${r.y}\" width=\"5\" height=\"${r.h}\" rx=\"2\" fill=\"${st.accent}\"/>`;\n const personGlyph =\n n.kind === 'person'\n ? `<g fill=\"${st.text}\"><circle cx=\"${px + 6}\" cy=\"${r.y + 19}\" r=\"6\"/><path d=\"M ${px} ${r.y + 34} a 6 7 0 0 1 12 0 z\"/></g>`\n : '';\n const chipX = n.kind === 'person' ? px + 22 : px;\n const chipFill = st.solid === true ? st.sub : st.accent;\n const techLine =\n n.tech !== undefined\n ? `<text x=\"${px}\" y=\"${r.y + 60}\" class=\"c4-tech\" fill=\"${st.sub}\">${escapeHtml(n.tech)}</text>`\n : '';\n const descLines = desc\n .map(\n (ln, j) =>\n `<text x=\"${px}\" y=\"${r.y + 77 + j * 13}\" class=\"c4-desc\" fill=\"${st.sub}\">${escapeHtml(ln)}</text>`,\n )\n .join('');\n s +=\n `<g filter=\"url(#gshadow)\">` +\n `<rect x=\"${r.x}\" y=\"${r.y}\" width=\"${r.w}\" height=\"${r.h}\" rx=\"10\" fill=\"${st.fill}\" stroke=\"${strokeAttr}\" stroke-width=\"${strokeWidth}\"${dashAttr}/>` +\n stripe +\n personGlyph +\n `<text x=\"${chipX}\" y=\"${r.y + 22}\" class=\"c4-chip\" fill=\"${chipFill}\">${escapeHtml(st.chip)}</text>` +\n `<text x=\"${px}\" y=\"${r.y + 44}\" class=\"c4-name\" fill=\"${st.text}\">${escapeHtml(n.name)}</text>` +\n techLine +\n descLines +\n `</g>`;\n }\n\n s += `</svg>`;\n const legend =\n `<div class=\"legend\">` +\n LEGEND.map(\n (l) =>\n `<span class=\"item\"><span class=\"sw\" style=\"background:${l.sw};border:1px solid #d1d5db\"></span>${escapeHtml(l.label)}</span>`,\n ).join('') +\n `</div>`;\n\n return diagramFrame(\n {\n tag: 'C4',\n tagClass: 'c4',\n ...(data.title !== undefined ? { title: data.title } : {}),\n ...(data.description !== undefined ? { desc: data.description } : {}),\n },\n s + legend,\n );\n}\n","/**\n * Renders a UML class diagram — class boxes with stereotype, name, attributes,\n * and methods compartments; orthogonal-routed relationships with kind-specific\n * markers (inheritance triangle, composition diamond, etc.).\n *\n * Ported from doc-studio.jsx `UMLDiagram` + `umlRel`.\n */\n\nimport type { BlockDataMap } from '@avodado/core';\nimport { escapeHtml } from '../escape.js';\nimport { ortho } from '../svg/ortho.js';\nimport { edgePill } from '../svg/edgePill.js';\nimport { diagramFrame } from './frame.js';\n\ntype UmlClass = NonNullable<BlockDataMap['uml']['classes']>[number];\n\ninterface UmlRelStyle {\n dash: string;\n start?: string;\n end?: string;\n}\n\nfunction umlRel(kind: string | undefined): UmlRelStyle {\n switch ((kind ?? 'association').toLowerCase()) {\n case 'inheritance':\n case 'extends':\n return { dash: '', end: 'umlTri' };\n case 'implementation':\n case 'implements':\n return { dash: '6 4', end: 'umlTri' };\n case 'composition':\n return { dash: '', start: 'umlDiaF' };\n case 'aggregation':\n return { dash: '', start: 'umlDiaH' };\n case 'dependency':\n return { dash: '6 4', end: 'umlOpen' };\n default:\n return { dash: '', end: 'umlOpen' };\n }\n}\n\nexport function renderUml(data: BlockDataMap['uml']): string {\n const classes = data.classes ?? [];\n const rels = data.rels ?? [];\n const colW = 204;\n const gapX = 64;\n const gapY = 50;\n const padX = 26;\n const padTop = 30;\n const padBot = 22;\n const rowH = 17;\n const headH = (c: UmlClass): number => 28 + (c.stereotype !== undefined ? 12 : 0);\n const compH = (list: readonly string[] | undefined): number =>\n (list !== undefined && list.length > 0 ? list.length * rowH : 6) + 8;\n const clsH = (c: UmlClass): number => headH(c) + compH(c.attrs) + compH(c.methods);\n\n const cols = Math.max(1, ...classes.map((c) => c.col));\n const rows = Math.max(1, ...classes.map((c) => c.row));\n const bandH = new Map<number, number>();\n const bandTop = new Map<number, number>();\n let acc = padTop;\n for (let r = 1; r <= rows; r++) {\n const hs = classes.filter((c) => c.row === r).map(clsH);\n const h = hs.length > 0 ? Math.max(...hs) : 60;\n bandH.set(r, h);\n bandTop.set(r, acc);\n acc += h + gapY;\n }\n const xOf = (c: number): number => padX + (c - 1) * (colW + gapX);\n const rectFor = (c: UmlClass): { x: number; y: number; w: number; h: number } => ({\n x: xOf(c.col),\n y: bandTop.get(c.row) ?? padTop,\n w: colW,\n h: clsH(c),\n });\n const byId = new Map(classes.map((c) => [c.id, c]));\n const width = padX * 2 + cols * colW + (cols - 1) * gapX;\n const height = acc - gapY + padBot;\n\n let s =\n `<svg viewBox=\"0 0 ${width} ${height}\" role=\"img\"><title>UML class diagram</title>` +\n `<defs>` +\n `<marker id=\"umlTri\" viewBox=\"0 0 14 14\" refX=\"13\" refY=\"7\" markerWidth=\"15\" markerHeight=\"15\" orient=\"auto-start-reverse\">` +\n `<path d=\"M1,1 L13,7 L1,13 z\" fill=\"#fff\" stroke=\"#1a1a2e\" stroke-width=\"1.2\"/></marker>` +\n `<marker id=\"umlDiaF\" viewBox=\"0 0 20 12\" refX=\"19\" refY=\"6\" markerWidth=\"20\" markerHeight=\"12\" orient=\"auto-start-reverse\">` +\n `<path d=\"M1,6 L10,1 L19,6 L10,11 z\" fill=\"#1a1a2e\"/></marker>` +\n `<marker id=\"umlDiaH\" viewBox=\"0 0 20 12\" refX=\"19\" refY=\"6\" markerWidth=\"20\" markerHeight=\"12\" orient=\"auto-start-reverse\">` +\n `<path d=\"M1,6 L10,1 L19,6 L10,11 z\" fill=\"#fff\" stroke=\"#1a1a2e\" stroke-width=\"1.2\"/></marker>` +\n `<marker id=\"umlOpen\" viewBox=\"0 0 12 12\" refX=\"10\" refY=\"6\" markerWidth=\"12\" markerHeight=\"12\" orient=\"auto-start-reverse\">` +\n `<path d=\"M1,1 L11,6 L1,11\" fill=\"none\" stroke=\"#1a1a2e\" stroke-width=\"1.3\"/></marker>` +\n `</defs>`;\n\n for (const rl of rels) {\n const A = byId.get(rl.from);\n const B = byId.get(rl.to);\n if (!A || !B) continue;\n const p = ortho(rectFor(A), rectFor(B));\n const st = umlRel(rl.kind);\n const start = st.start !== undefined ? ` marker-start=\"url(#${st.start})\"` : '';\n const end = st.end !== undefined ? ` marker-end=\"url(#${st.end})\"` : '';\n s +=\n `<g><path d=\"${p.d}\" fill=\"none\" stroke=\"#1a1a2e\" stroke-width=\"1.3\" stroke-dasharray=\"${st.dash}\"${start}${end}/>` +\n edgePill(p, rl.label) +\n `</g>`;\n }\n\n for (const c of classes) {\n const r = rectFor(c);\n const hh = headH(c);\n const aH = compH(c.attrs);\n const nameY = r.y + (c.stereotype !== undefined ? 24 : 19);\n const stereo =\n c.stereotype !== undefined\n ? `<text x=\"${r.x + r.w / 2}\" y=\"${r.y + 13}\" class=\"uml-stereo\">«${escapeHtml(c.stereotype)}»</text>`\n : '';\n const attrs = (c.attrs ?? [])\n .map(\n (a, j) =>\n `<text x=\"${r.x + 10}\" y=\"${r.y + hh + 14 + j * rowH}\" class=\"uml-row\">${escapeHtml(a)}</text>`,\n )\n .join('');\n const methods = (c.methods ?? [])\n .map(\n (m, j) =>\n `<text x=\"${r.x + 10}\" y=\"${r.y + hh + aH + 14 + j * rowH}\" class=\"uml-row\">${escapeHtml(m)}</text>`,\n )\n .join('');\n s +=\n `<g filter=\"url(#gshadow)\">` +\n `<rect x=\"${r.x}\" y=\"${r.y}\" width=\"${r.w}\" height=\"${r.h}\" rx=\"3\" fill=\"#fff\" stroke=\"#0e54a1\" stroke-width=\"1.3\"/>` +\n stereo +\n `<text x=\"${r.x + r.w / 2}\" y=\"${nameY}\" class=\"uml-name\">${escapeHtml(c.name)}</text>` +\n `<line x1=\"${r.x}\" y1=\"${r.y + hh}\" x2=\"${r.x + r.w}\" y2=\"${r.y + hh}\" class=\"uml-sep\"/>` +\n attrs +\n `<line x1=\"${r.x}\" y1=\"${r.y + hh + aH}\" x2=\"${r.x + r.w}\" y2=\"${r.y + hh + aH}\" class=\"uml-sep\"/>` +\n methods +\n `</g>`;\n }\n\n s += `</svg>`;\n return diagramFrame(\n {\n tag: 'UML',\n tagBg: '#6b21a8',\n ...(data.title !== undefined ? { title: data.title } : {}),\n ...(data.description !== undefined ? { desc: data.description } : {}),\n },\n s,\n );\n}\n","/**\n * Renders a MECE (Mutually Exclusive, Collectively Exhaustive) issue tree —\n * a left-to-right hierarchical tree with depth-based colour stripes.\n *\n * Layout uses DFS positioning: leaves stack vertically, branches center over\n * their first/last child.\n *\n * Ported from doc-studio.jsx `MECETree` + `meceStyle`.\n */\n\nimport type { BlockDataMap } from '@avodado/core';\nimport { escapeHtml } from '../escape.js';\nimport { wrapText } from '../svg/wrapText.js';\nimport { diagramFrame } from './frame.js';\n\ntype Node = NonNullable<BlockDataMap['mece']['nodes']>[number];\n\nconst CHART_COLORS = ['#0e54a1', '#1a6dbe', '#0f766e', '#1f9747', '#6b21a8', '#f7952c'];\n\ninterface MeceStyle {\n fill: string;\n text: string;\n accent: string;\n solid?: boolean;\n}\n\nfunction meceStyle(d: number): MeceStyle {\n if (d === 0) return { fill: '#0e54a1', text: '#fff', accent: '#0e54a1', solid: true };\n const c = CHART_COLORS[d % CHART_COLORS.length] ?? '#0e54a1';\n return { fill: '#fff', text: c, accent: c };\n}\n\nexport function renderMece(data: BlockDataMap['mece']): string {\n const nodes = data.nodes ?? [];\n const byId = new Map<string, Node>();\n const children = new Map<string, string[]>();\n for (const n of nodes) {\n byId.set(n.id, n);\n children.set(n.id, []);\n }\n const roots: string[] = [];\n for (const n of nodes) {\n if (n.parent !== undefined && byId.has(n.parent)) children.get(n.parent)?.push(n.id);\n else roots.push(n.id);\n }\n\n const pos = new Map<string, number>();\n const depth = new Map<string, number>();\n const seen = new Set<string>();\n let leaf = 0;\n let maxDepth = 0;\n const dfs = (id: string, d: number): void => {\n if (seen.has(id)) return;\n seen.add(id);\n depth.set(id, d);\n if (d > maxDepth) maxDepth = d;\n const ch = children.get(id) ?? [];\n if (ch.length === 0) {\n pos.set(id, leaf);\n leaf += 1;\n } else {\n for (const c of ch) dfs(c, d + 1);\n const first = pos.get(ch[0] ?? '') ?? 0;\n const last = pos.get(ch[ch.length - 1] ?? '') ?? 0;\n pos.set(id, (first + last) / 2);\n }\n };\n for (const r of roots) dfs(r, 0);\n\n const nodeW = 168;\n const nodeH = 50;\n const gapY = 16;\n const colGap = 56;\n const padX = 24;\n const padTop = 18;\n const padBot = 18;\n const xOf = (id: string): number => padX + (depth.get(id) ?? 0) * (nodeW + colGap);\n const yOf = (id: string): number => padTop + (pos.get(id) ?? 0) * (nodeH + gapY);\n const width = padX * 2 + (maxDepth + 1) * nodeW + maxDepth * colGap;\n const height = padTop + Math.max(leaf, 1) * (nodeH + gapY) - gapY + padBot;\n\n let s = `<svg viewBox=\"0 0 ${width} ${height}\" role=\"img\"><title>Issue tree</title>`;\n\n // links\n for (const n of nodes) {\n if (n.parent === undefined || !byId.has(n.parent) || !pos.has(n.id)) continue;\n const px = xOf(n.parent) + nodeW;\n const pcy = yOf(n.parent) + nodeH / 2;\n const cx = xOf(n.id);\n const ccy = yOf(n.id) + nodeH / 2;\n const midX = (px + cx) / 2;\n s += `<path class=\"tree-link\" d=\"M ${px} ${pcy} H ${midX} V ${ccy} H ${cx}\"/>`;\n }\n\n // nodes — wrap label to fit inside the box (max width ~150px, ~20 chars per line).\n // If a note is present, the label is single-line; otherwise allow up to two lines.\n for (const n of nodes) {\n if (!pos.has(n.id)) continue;\n const x = xOf(n.id);\n const y = yOf(n.id);\n const st = meceStyle(depth.get(n.id) ?? 0);\n const stroke = st.solid === true ? 'none' : st.accent;\n const stripe =\n st.solid === true\n ? ''\n : `<rect x=\"${x}\" y=\"${y}\" width=\"5\" height=\"${nodeH}\" rx=\"2\" fill=\"${st.accent}\"/>`;\n const labelX = x + (st.solid === true ? nodeW / 2 : 14);\n const anchor = st.solid === true ? 'middle' : 'start';\n const lines = wrapText(n.label, st.solid === true ? 22 : 20, n.note !== undefined ? 1 : 2);\n const startY =\n lines.length === 2\n ? y + 22\n : y + (n.note !== undefined ? 22 : 30);\n const labelTexts = lines\n .map(\n (ln, j) =>\n `<text x=\"${labelX}\" y=\"${startY + j * 14}\" class=\"blk-name\" fill=\"${st.text}\" text-anchor=\"${anchor}\">${escapeHtml(ln)}</text>`,\n )\n .join('');\n const note =\n n.note !== undefined\n ? `<text x=\"${labelX}\" y=\"${y + 38}\" class=\"ft-note\" fill=\"${st.solid === true ? '#cfe0f3' : st.accent}\" text-anchor=\"${anchor}\">${escapeHtml(n.note)}</text>`\n : '';\n s +=\n `<g filter=\"url(#gshadow)\">` +\n `<rect x=\"${x}\" y=\"${y}\" width=\"${nodeW}\" height=\"${nodeH}\" rx=\"6\" fill=\"${st.fill}\" stroke=\"${stroke}\" stroke-width=\"1.3\"/>` +\n stripe +\n labelTexts +\n note +\n `</g>`;\n }\n\n s += `</svg>`;\n return diagramFrame(\n {\n tag: 'MECE',\n tagBg: '#0f766e',\n ...(data.title !== undefined ? { title: data.title } : {}),\n ...(data.description !== undefined ? { desc: data.description } : {}),\n },\n s,\n );\n}\n","/**\n * Renders a top-down component tree — typical React/Vue hierarchy. Each node\n * has a `kind` (root, layout, page, component, leaf, provider, hook, store)\n * that drives its colour.\n *\n * Layout uses DFS positioning, children laid out left-to-right, parents\n * centered above their first/last child.\n *\n * Ported from doc-studio.jsx `ComponentTree` + `ftStyle`.\n */\n\nimport type { BlockDataMap } from '@avodado/core';\nimport { escapeHtml } from '../escape.js';\nimport { wrapText } from '../svg/wrapText.js';\nimport { diagramFrame } from './frame.js';\n\ntype Node = NonNullable<BlockDataMap['frontend']['nodes']>[number];\n\ninterface FtStyle {\n accent: string;\n fill: string;\n text: string;\n solid?: boolean;\n}\n\nfunction ftStyle(kind: string | undefined): FtStyle {\n switch ((kind ?? 'component').toLowerCase()) {\n case 'root':\n return { accent: '#0e54a1', fill: '#0e54a1', text: '#fff', solid: true };\n case 'layout':\n return { accent: '#0f766e', fill: '#ccfbf1', text: '#0f4f49' };\n case 'page':\n return { accent: '#0e54a1', fill: '#e5eff8', text: '#0a3a6e' };\n case 'component':\n return { accent: '#1f9747', fill: '#dcf1e2', text: '#0f3d22' };\n case 'leaf':\n return { accent: '#6b7280', fill: '#f3f4f6', text: '#374151' };\n case 'provider':\n case 'context':\n return { accent: '#6b21a8', fill: '#ede9fe', text: '#4a1772' };\n case 'hook':\n return { accent: '#7c3aed', fill: '#ede9fe', text: '#4a1772' };\n case 'store':\n case 'state':\n return { accent: '#f7952c', fill: '#fde7cd', text: '#7a3d00' };\n default:\n return { accent: '#1f9747', fill: '#dcf1e2', text: '#0f3d22' };\n }\n}\n\nexport function renderFrontend(data: BlockDataMap['frontend']): string {\n const nodes = data.nodes ?? [];\n const byId = new Map<string, Node>();\n const children = new Map<string, string[]>();\n for (const n of nodes) {\n byId.set(n.id, n);\n children.set(n.id, []);\n }\n const roots: string[] = [];\n for (const n of nodes) {\n if (n.parent !== undefined && byId.has(n.parent)) children.get(n.parent)?.push(n.id);\n else roots.push(n.id);\n }\n\n const pos = new Map<string, number>();\n const depth = new Map<string, number>();\n const seen = new Set<string>();\n let leaf = 0;\n let maxDepth = 0;\n const dfs = (id: string, d: number): void => {\n if (seen.has(id)) return;\n seen.add(id);\n depth.set(id, d);\n if (d > maxDepth) maxDepth = d;\n const ch = children.get(id) ?? [];\n if (ch.length === 0) {\n pos.set(id, leaf);\n leaf += 1;\n } else {\n for (const c of ch) dfs(c, d + 1);\n const first = pos.get(ch[0] ?? '') ?? 0;\n const last = pos.get(ch[ch.length - 1] ?? '') ?? 0;\n pos.set(id, (first + last) / 2);\n }\n };\n for (const r of roots) dfs(r, 0);\n\n const nodeW = 158;\n const nodeH = 56;\n const gapX = 24;\n const levelGap = 96;\n const padX = 24;\n const padTop = 18;\n const padBot = 18;\n const slot = Math.max(leaf, 1);\n const xOf = (id: string): number => padX + (pos.get(id) ?? 0) * (nodeW + gapX);\n const yOf = (id: string): number => padTop + (depth.get(id) ?? 0) * levelGap;\n const width = padX * 2 + slot * (nodeW + gapX) - gapX;\n const height = padTop + maxDepth * levelGap + nodeH + padBot;\n\n let s = `<svg viewBox=\"0 0 ${width} ${height}\" role=\"img\"><title>Component tree</title>`;\n\n // links\n for (const n of nodes) {\n if (n.parent === undefined || !byId.has(n.parent) || !pos.has(n.id)) continue;\n const pcx = xOf(n.parent) + nodeW / 2;\n const pby = yOf(n.parent) + nodeH;\n const ccx = xOf(n.id) + nodeW / 2;\n const cty = yOf(n.id);\n const midY = (pby + cty) / 2;\n s += `<path class=\"tree-link\" d=\"M ${pcx} ${pby} V ${midY} H ${ccx} V ${cty}\"/>`;\n }\n\n // nodes — wrap name to fit inside the box (~158px, ~20 chars per line).\n // With a note: single-line name. Without a note: up to two lines.\n for (const n of nodes) {\n if (!pos.has(n.id)) continue;\n const x = xOf(n.id);\n const y = yOf(n.id);\n const st = ftStyle(n.kind);\n const stroke = st.solid === true ? 'none' : st.accent;\n const stripe =\n st.solid === true\n ? ''\n : `<rect x=\"${x}\" y=\"${y}\" width=\"5\" height=\"${nodeH}\" rx=\"2\" fill=\"${st.accent}\"/>`;\n const labelX = x + (st.solid === true ? nodeW / 2 : 14);\n const anchor = st.solid === true ? 'middle' : 'start';\n const lines = wrapText(n.name, st.solid === true ? 20 : 18, n.note !== undefined ? 1 : 2);\n const startY =\n lines.length === 2\n ? y + 25\n : y + (n.note !== undefined ? 25 : 33);\n const labelTexts = lines\n .map(\n (ln, j) =>\n `<text x=\"${labelX}\" y=\"${startY + j * 14}\" class=\"blk-name\" fill=\"${st.text}\" text-anchor=\"${anchor}\">${escapeHtml(ln)}</text>`,\n )\n .join('');\n const note =\n n.note !== undefined\n ? `<text x=\"${labelX}\" y=\"${y + 41}\" class=\"ft-note\" fill=\"${st.solid === true ? '#cfe0f3' : st.accent}\" text-anchor=\"${anchor}\">${escapeHtml(n.note)}</text>`\n : '';\n s +=\n `<g filter=\"url(#gshadow)\">` +\n `<rect x=\"${x}\" y=\"${y}\" width=\"${nodeW}\" height=\"${nodeH}\" rx=\"8\" fill=\"${st.fill}\" stroke=\"${stroke}\" stroke-width=\"1.2\"/>` +\n stripe +\n labelTexts +\n note +\n `</g>`;\n }\n\n s += `</svg>`;\n return diagramFrame(\n {\n tag: 'FE',\n tagBg: '#0f766e',\n ...(data.title !== undefined ? { title: data.title } : {}),\n ...(data.description !== undefined ? { desc: data.description } : {}),\n },\n s,\n );\n}\n","/**\n * Renders a cluster diagram (Kubernetes-style) — nested cluster boxes with\n * service tiles inside, optional replica counts as bar marks, and\n * orthogonal-routed edges between services across clusters.\n *\n * Ported from doc-studio.jsx `ClusterDiagram`.\n */\n\nimport type { BlockDataMap } from '@avodado/core';\nimport { escapeHtml } from '../escape.js';\nimport { ortho } from '../svg/ortho.js';\nimport { edgePill } from '../svg/edgePill.js';\nimport { blockStyle, nodeGlyph, GEDGE } from '../svg/blockStyle.js';\nimport { diagramFrame } from './frame.js';\n\ntype Service = NonNullable<BlockDataMap['cluster']['services']>[number];\n\nexport function renderCluster(data: BlockDataMap['cluster']): string {\n const clusters = data.clusters ?? [];\n const services = data.services ?? [];\n const edges = data.edges ?? [];\n const svcByCluster = new Map<string, Service[]>();\n for (const c of clusters) svcByCluster.set(c.id, []);\n for (const sv of services) {\n const list = svcByCluster.get(sv.cluster);\n if (list !== undefined) list.push(sv);\n }\n const serviceW = 158;\n const serviceH = 78;\n const gapS = 22;\n const cPadX = 26;\n const cHeader = 38;\n const cPadTop = 18;\n const cPadBot = 22;\n const cGap = 28;\n const outerPad = 26;\n\n let maxPerCluster = 1;\n for (const list of svcByCluster.values()) {\n if (list.length > maxPerCluster) maxPerCluster = list.length;\n }\n const cols = Math.min(4, Math.max(1, maxPerCluster));\n const clusterW = cols * serviceW + (cols - 1) * gapS + cPadX * 2;\n const width = outerPad * 2 + clusterW;\n\n interface Rect {\n x: number;\n y: number;\n w: number;\n h: number;\n }\n const rects = new Map<string, Rect>();\n interface ClusterBox {\n c: NonNullable<BlockDataMap['cluster']['clusters']>[number];\n x: number;\n y: number;\n w: number;\n h: number;\n }\n const clusterBoxes: ClusterBox[] = [];\n\n let y = outerPad;\n for (const c of clusters) {\n const list = svcByCluster.get(c.id) ?? [];\n const rows = Math.max(1, Math.ceil(list.length / cols));\n const h = cHeader + cPadTop + rows * serviceH + (rows - 1) * gapS + cPadBot;\n const cx = outerPad;\n clusterBoxes.push({ c, x: cx, y, w: clusterW, h });\n list.forEach((sv, i) => {\n const r = Math.floor(i / cols);\n const col = i % cols;\n rects.set(sv.id, {\n x: cx + cPadX + col * (serviceW + gapS),\n y: y + cHeader + cPadTop + r * (serviceH + gapS),\n w: serviceW,\n h: serviceH,\n });\n });\n y += h + cGap;\n }\n const height = y - cGap + outerPad;\n\n let s = `<svg viewBox=\"0 0 ${width} ${height}\" role=\"img\"><title>Cluster diagram</title>`;\n\n // cluster shells\n for (const cb of clusterBoxes) {\n const kindLabel =\n cb.c.kind !== undefined\n ? `<text x=\"${cb.x + cb.w - 14}\" y=\"${cb.y + 21}\" class=\"cl-kind\">${escapeHtml(cb.c.kind)}</text>`\n : '';\n s +=\n `<g>` +\n `<rect x=\"${cb.x}\" y=\"${cb.y}\" width=\"${cb.w}\" height=\"${cb.h}\" rx=\"12\" fill=\"#0e54a1\" fill-opacity=\"0.035\" stroke=\"#0e54a1\" stroke-width=\"1.4\" stroke-dasharray=\"8 5\"/>` +\n `<rect x=\"${cb.x}\" y=\"${cb.y}\" width=\"${cb.w}\" height=\"${cHeader}\" rx=\"12\" fill=\"#0e54a1\"/>` +\n `<rect x=\"${cb.x}\" y=\"${cb.y + cHeader - 12}\" width=\"${cb.w}\" height=\"12\" fill=\"#0e54a1\"/>` +\n `<text x=\"${cb.x + 16}\" y=\"${cb.y + 21}\" class=\"cl-head\">${escapeHtml(cb.c.label)}</text>` +\n kindLabel +\n `</g>`;\n }\n\n // edges\n for (const e of edges) {\n const A = rects.get(e.from);\n const B = rects.get(e.to);\n if (!A || !B) continue;\n const p = ortho(A, B);\n const st = GEDGE[e.kind ?? 'solid'] ?? GEDGE['solid'] ?? {\n stroke: '#1a1a2e',\n sw: 1.4,\n dash: '',\n marker: 'gArrow',\n err: false,\n };\n s +=\n `<g><path d=\"${p.d}\" fill=\"none\" stroke=\"${st.stroke}\" stroke-width=\"${st.sw}\" stroke-dasharray=\"${st.dash}\" marker-end=\"url(#${st.marker})\"/>` +\n edgePill(p, e.label, st.err) +\n `</g>`;\n }\n\n // services\n for (const sv of services) {\n const r = rects.get(sv.id);\n if (r === undefined) continue;\n const st = blockStyle(sv.kind);\n const gl = nodeGlyph(sv.kind, r.x + 14, r.y + 14, st.accent);\n const nx = gl.length > 0 ? r.x + 38 : r.x + 14;\n const reps = sv.replicas ?? 0;\n const techLine =\n sv.tech !== undefined\n ? `<text x=\"${nx}\" y=\"${r.y + 42}\" class=\"blk-tech\" fill=\"${st.accent}\">${escapeHtml(sv.tech)}</text>`\n : '';\n const repIndicator =\n reps > 0\n ? (() => {\n const shown = Math.min(reps, 5);\n let bars = '';\n for (let j = 0; j < shown; j++) {\n bars += `<rect x=\"${r.x + 12 + j * 8}\" y=\"${r.y + r.h - 14}\" width=\"5\" height=\"8\" rx=\"1\" fill=\"${st.accent}\" opacity=\"0.7\"/>`;\n }\n return (\n `<g>` +\n bars +\n `<text x=\"${r.x + 12 + shown * 8 + 4}\" y=\"${r.y + r.h - 7}\" class=\"blk-tech\" fill=\"${st.accent}\">×${reps}</text>` +\n `</g>`\n );\n })()\n : '';\n s +=\n `<g filter=\"url(#gshadow)\">` +\n `<rect x=\"${r.x}\" y=\"${r.y}\" width=\"${r.w}\" height=\"${r.h}\" rx=\"8\" fill=\"${st.fill}\" stroke=\"${st.accent}\" stroke-width=\"1.2\"/>` +\n `<rect x=\"${r.x}\" y=\"${r.y}\" width=\"5\" height=\"${r.h}\" rx=\"2\" fill=\"${st.accent}\"/>` +\n gl +\n `<text x=\"${nx}\" y=\"${r.y + (sv.tech !== undefined ? 26 : 30)}\" class=\"blk-name\" fill=\"${st.text}\" style=\"font-size:12px\">${escapeHtml(sv.label)}</text>` +\n techLine +\n repIndicator +\n `</g>`;\n }\n\n s += `</svg>`;\n return diagramFrame(\n {\n tag: 'CLUSTER',\n tagBg: '#0e54a1',\n ...(data.title !== undefined ? { title: data.title } : {}),\n ...(data.description !== undefined ? { desc: data.description } : {}),\n },\n s,\n );\n}\n","/**\n * Block-graph rendering — backs `block`, `infra`, `event`, `ddd`, and\n * `network`. Two layout modes share the same data shape:\n *\n * - **Layered:** if `spec.layers` is present, nodes are placed in horizontal\n * bands by their `layer` index.\n * - **Grid:** otherwise nodes use `(col, row, w?)` placements, optionally\n * wrapped in dashed group boxes.\n *\n * Ported from doc-studio.jsx `GridBlock` + `LayeredBlock` + `BlockDiagram`.\n */\n\nimport type { BlockDataMap } from '@avodado/core';\nimport { escapeHtml } from '../escape.js';\nimport { ortho } from '../svg/ortho.js';\nimport { edgePill } from '../svg/edgePill.js';\nimport { blockStyle, nodeGlyph, GEDGE } from '../svg/blockStyle.js';\nimport { safeColor } from '../sanitize.js';\nimport { diagramFrame } from './frame.js';\n\ntype Data = BlockDataMap['block'];\ntype Group = NonNullable<Data['groups']>[number];\ntype Node = NonNullable<Data['nodes']>[number];\n\ninterface FrameOpts {\n readonly tag: string;\n readonly tagBg?: string;\n readonly tagClass?: string;\n}\n\nconst FALLBACK_EDGE = {\n stroke: '#1a1a2e',\n sw: 1.4,\n dash: '',\n marker: 'gArrow',\n err: false,\n} as const;\n\nfunction renderGrid(data: Data): string {\n const groups = data.groups ?? [];\n const nodes = data.nodes ?? [];\n const edges = data.edges ?? [];\n const cellW = 184;\n const cellH = 82;\n const gapX = 56;\n const gapY = 58;\n const padX = 26;\n const padTop = 30;\n const padBot = 20;\n const cols = Math.max(\n 1,\n ...nodes.map((n) => (n.col ?? 1) + ((n.w ?? 1) - 1)),\n ...groups.map((g) => g.col + (g.cols ?? 1) - 1),\n );\n const rows = Math.max(\n 1,\n ...nodes.map((n) => n.row ?? 1),\n ...groups.map((g) => g.row + (g.rows ?? 1) - 1),\n );\n const xOf = (c: number): number => padX + (c - 1) * (cellW + gapX);\n const yOf = (r: number): number => padTop + (r - 1) * (cellH + gapY);\n const rectFor = (n: Node): { x: number; y: number; w: number; h: number } => ({\n x: xOf(n.col ?? 1),\n y: yOf(n.row ?? 1),\n w: (n.w ?? 1) * cellW + ((n.w ?? 1) - 1) * gapX,\n h: cellH,\n });\n const groupRect = (g: Group): { x: number; y: number; w: number; h: number } => ({\n x: xOf(g.col) - 16,\n y: yOf(g.row) - 22,\n w: (g.cols ?? 1) * cellW + ((g.cols ?? 1) - 1) * gapX + 32,\n h: (g.rows ?? 1) * cellH + ((g.rows ?? 1) - 1) * gapY + 38,\n });\n const byId = new Map(nodes.map((n) => [n.id, n]));\n const width = padX * 2 + cols * cellW + (cols - 1) * gapX;\n const height = padTop + rows * cellH + (rows - 1) * gapY + padBot;\n\n // Largest groups first so smaller ones layer on top.\n const sortedGroups = [...groups].sort(\n (a, b) => (b.cols ?? 1) * (b.rows ?? 1) - (a.cols ?? 1) * (a.rows ?? 1),\n );\n\n let s = `<svg viewBox=\"0 0 ${width} ${height}\" role=\"img\"><title>Block diagram</title>`;\n\n for (const g of sortedGroups) {\n const r = groupRect(g);\n const col = safeColor(g.color, '#0e54a1');\n // AWS-console-style zone: dashed tinted boundary + a solid label badge.\n // 2D containers (e.g. a VPC) get a centered title pill on the top border;\n // band-shaped zones (e.g. subnets) get a top-left tab — so a VPC and the\n // subnet sharing its corner never collide.\n const badgeW = 16 + g.label.length * 6.4;\n const isContainer = (g.cols ?? 1) >= 2 && (g.rows ?? 1) >= 2;\n const zone = `<rect x=\"${r.x}\" y=\"${r.y}\" width=\"${r.w}\" height=\"${r.h}\" rx=\"10\" fill=\"${col}\" fill-opacity=\"0.06\" stroke=\"${col}\" stroke-opacity=\"0.55\" stroke-width=\"1.3\" stroke-dasharray=\"7 5\"/>`;\n const label = isContainer\n ? `<rect x=\"${r.x + (r.w - badgeW) / 2}\" y=\"${r.y - 1}\" width=\"${badgeW}\" height=\"20\" rx=\"10\" fill=\"${col}\"/>` +\n `<text x=\"${r.x + r.w / 2}\" y=\"${r.y + 13}\" class=\"grp-label\" fill=\"#fff\" text-anchor=\"middle\">${escapeHtml(g.label)}</text>`\n : `<path d=\"M${r.x} ${r.y + 20} L${r.x} ${r.y + 10} a10 10 0 0 1 10 -10 h${badgeW - 10} v20 z\" fill=\"${col}\"/>` +\n `<text x=\"${r.x + badgeW / 2}\" y=\"${r.y + 14}\" class=\"grp-label\" fill=\"#fff\" text-anchor=\"middle\">${escapeHtml(g.label)}</text>`;\n s += `<g>${zone}${label}</g>`;\n }\n\n for (const e of edges) {\n const A = byId.get(e.from);\n const B = byId.get(e.to);\n if (!A || !B) continue;\n const p = ortho(rectFor(A), rectFor(B));\n const st = GEDGE[e.kind ?? 'solid'] ?? GEDGE['solid'] ?? FALLBACK_EDGE;\n s +=\n `<g><path d=\"${p.d}\" fill=\"none\" stroke=\"${st.stroke}\" stroke-width=\"${st.sw}\" stroke-dasharray=\"${st.dash}\" marker-end=\"url(#${st.marker})\"/>` +\n edgePill(p, e.label, st.err) +\n `</g>`;\n }\n\n for (const n of nodes) {\n const r = rectFor(n);\n const st = blockStyle(n.kind);\n const gl = nodeGlyph(n.kind, r.x + 16, r.y + 16, st.accent);\n const nx = gl.length > 0 ? r.x + 42 : r.x + 16;\n const chip =\n gl.length === 0 && n.kind !== undefined\n ? `<text x=\"${r.x + 16}\" y=\"${r.y + 22}\" class=\"blk-chip\" fill=\"${st.accent}\">${escapeHtml(n.kind)}</text>`\n : '';\n const tech =\n n.tech !== undefined\n ? `<text x=\"${nx}\" y=\"${r.y + (gl.length > 0 ? 50 : 60)}\" class=\"blk-tech\" fill=\"${st.accent}\">${escapeHtml(n.tech)}</text>`\n : '';\n s +=\n `<g filter=\"url(#gshadow)\">` +\n `<rect x=\"${r.x}\" y=\"${r.y}\" width=\"${r.w}\" height=\"${r.h}\" rx=\"9\" fill=\"${st.fill}\" stroke=\"${st.accent}\" stroke-width=\"1.2\"/>` +\n `<rect x=\"${r.x}\" y=\"${r.y}\" width=\"5\" height=\"${r.h}\" rx=\"2\" fill=\"${st.accent}\"/>` +\n gl +\n chip +\n `<text x=\"${nx}\" y=\"${r.y + (gl.length > 0 ? 34 : 44)}\" class=\"blk-name\" fill=\"${st.text}\">${escapeHtml(n.name)}</text>` +\n tech +\n `</g>`;\n }\n\n s += `</svg>`;\n return s;\n}\n\nfunction renderLayered(data: Data): string {\n const layers = data.layers ?? [];\n const nodes = data.nodes ?? [];\n const edges = data.edges ?? [];\n const byLayer: Node[][] = layers.map((_, i) =>\n nodes.filter((n) => (n.layer ?? 0) === i),\n );\n const outerPad = 28;\n const titleH = data.systemLabel !== undefined ? 32 : 16;\n const labelW = 132;\n const bandPadX = 16;\n const bandPadY = 14;\n const bandGap = 12;\n const nodeW = 158;\n const nodeH = 56;\n const nodeGap = 22;\n const rowW = (c: number): number => c * nodeW + (c - 1) * nodeGap;\n const contentW = Math.max(220, ...byLayer.map((a) => rowW(Math.max(a.length, 1))));\n const bandInnerW = contentW + bandPadX * 2;\n const bandH = nodeH + bandPadY * 2;\n const innerX = outerPad + 14;\n const contentX = innerX + labelW;\n const width = contentX + bandInnerW + 14 + outerPad;\n const top = outerPad + titleH;\n const bandY = (i: number): number => top + i * (bandH + bandGap);\n const height = bandY(layers.length) - bandGap + outerPad;\n\n const rects = new Map<string, { x: number; y: number; w: number; h: number }>();\n byLayer.forEach((arr, i) => {\n const startX = contentX + (bandInnerW - rowW(arr.length)) / 2;\n arr.forEach((n, j) => {\n rects.set(n.id, {\n x: startX + j * (nodeW + nodeGap),\n y: bandY(i) + bandPadY,\n w: nodeW,\n h: nodeH,\n });\n });\n });\n\n let s =\n `<svg viewBox=\"0 0 ${width} ${height}\" role=\"img\"><title>Layered architecture</title>` +\n `<rect x=\"${outerPad}\" y=\"${outerPad}\" width=\"${width - outerPad * 2}\" height=\"${height - outerPad * 2}\" rx=\"12\" fill=\"none\" stroke=\"#0e54a1\" stroke-width=\"1.5\"/>`;\n if (data.systemLabel !== undefined) {\n s += `<text x=\"${outerPad + 14}\" y=\"${outerPad + 18}\" class=\"grp-label\" fill=\"#0e54a1\">${escapeHtml(data.systemLabel)}</text>`;\n }\n for (let i = 0; i < layers.length; i++) {\n const L = layers[i];\n if (L === undefined) continue;\n s +=\n `<g>` +\n `<rect x=\"${innerX}\" y=\"${bandY(i)}\" width=\"${labelW + bandInnerW}\" height=\"${bandH}\" rx=\"6\" fill=\"#f3f4f6\" stroke=\"#d1d5db\"/>` +\n `<rect x=\"${innerX}\" y=\"${bandY(i)}\" width=\"${labelW}\" height=\"${bandH}\" rx=\"6\" fill=\"#0e54a1\"/>` +\n `<rect x=\"${innerX + labelW - 8}\" y=\"${bandY(i)}\" width=\"8\" height=\"${bandH}\" fill=\"#0e54a1\"/>` +\n `<text x=\"${innerX + 14}\" y=\"${bandY(i) + bandH / 2 + 4}\" class=\"layer-label\">${escapeHtml(L.label)}</text>` +\n `</g>`;\n }\n\n for (const e of edges) {\n const A = rects.get(e.from);\n const B = rects.get(e.to);\n if (!A || !B) continue;\n const p = ortho(A, B);\n const st = GEDGE[e.kind ?? 'solid'] ?? GEDGE['solid'] ?? FALLBACK_EDGE;\n s +=\n `<g><path d=\"${p.d}\" fill=\"none\" stroke=\"${st.stroke}\" stroke-width=\"${st.sw}\" stroke-dasharray=\"${st.dash}\" marker-end=\"url(#${st.marker})\"/>` +\n edgePill(p, e.label, st.err) +\n `</g>`;\n }\n\n for (const n of nodes) {\n const r = rects.get(n.id);\n if (r === undefined) continue;\n const st = blockStyle(n.kind);\n const gl = nodeGlyph(n.kind, r.x + 12, r.y + 12, st.accent);\n const nx = gl.length > 0 ? r.x + 34 : r.x + 14;\n const tech =\n n.tech !== undefined\n ? `<text x=\"${nx}\" y=\"${r.y + 42}\" class=\"blk-tech\" fill=\"${st.accent}\">${escapeHtml(n.tech)}</text>`\n : '';\n s +=\n `<g filter=\"url(#gshadow)\">` +\n `<rect x=\"${r.x}\" y=\"${r.y}\" width=\"${r.w}\" height=\"${r.h}\" rx=\"8\" fill=\"${st.fill}\" stroke=\"${st.accent}\" stroke-width=\"1.2\"/>` +\n `<rect x=\"${r.x}\" y=\"${r.y}\" width=\"5\" height=\"${r.h}\" rx=\"2\" fill=\"${st.accent}\"/>` +\n gl +\n `<text x=\"${nx}\" y=\"${r.y + (n.tech !== undefined ? 26 : 33)}\" class=\"blk-name\" fill=\"${st.text}\">${escapeHtml(n.name)}</text>` +\n tech +\n `</g>`;\n }\n\n s += `</svg>`;\n return s;\n}\n\nfunction renderBlockGraph(data: Data, frame: FrameOpts): string {\n const svg = data.layers !== undefined && data.layers.length > 0 ? renderLayered(data) : renderGrid(data);\n const opts: Parameters<typeof diagramFrame>[0] = {\n tag: frame.tag,\n ...(frame.tagClass !== undefined ? { tagClass: frame.tagClass } : {}),\n ...(frame.tagBg !== undefined ? { tagBg: frame.tagBg } : {}),\n ...(data.title !== undefined ? { title: data.title } : {}),\n ...(data.description !== undefined ? { desc: data.description } : {}),\n };\n return diagramFrame(opts, svg);\n}\n\n/** `block` block — generic architecture (grid or layered). */\nexport function renderBlock(data: BlockDataMap['block']): string {\n return renderBlockGraph(data, { tag: 'ARCH', tagBg: '#0f766e' });\n}\n/** `infra` block — deployment topology. */\nexport function renderInfra(data: BlockDataMap['infra']): string {\n return renderBlockGraph(data, { tag: 'INFRA', tagBg: '#0078d4' });\n}\n/** `event` block — pub/sub choreography. */\nexport function renderEvent(data: BlockDataMap['event']): string {\n return renderBlockGraph(data, { tag: 'EVENT', tagBg: '#0f766e' });\n}\n/** `ddd` block — bounded-context map. */\nexport function renderDdd(data: BlockDataMap['ddd']): string {\n return renderBlockGraph(data, { tag: 'DDD', tagBg: '#6b21a8' });\n}\n/** `network` block — security zones / network topology. */\nexport function renderNetwork(data: BlockDataMap['network']): string {\n return renderBlockGraph(data, { tag: 'ZONES', tagBg: '#991b1b' });\n}\n","/**\n * Frontend / backend module-graph rendering — design-pattern nodes (engine,\n * interface, strategy, controller, service, repo, worker, middleware, model,\n * db, cache, queue, hook, store, external) with kind-specific styling and\n * UML stereotype banners on interface nodes.\n *\n * Backs `felogic` and `belogic` (same shape, different frame colour).\n *\n * Ported from doc-studio.jsx `FrontendLogic` + `feStyle` + `feEdge`.\n */\n\nimport type { BlockDataMap } from '@avodado/core';\nimport { escapeHtml } from '../escape.js';\nimport { ortho } from '../svg/ortho.js';\nimport { edgePill } from '../svg/edgePill.js';\nimport { nodeGlyph } from '../svg/blockStyle.js';\nimport { safeColor } from '../sanitize.js';\nimport { diagramFrame } from './frame.js';\n\ntype Data = BlockDataMap['felogic'];\ntype Group = NonNullable<Data['groups']>[number];\ntype Node = NonNullable<Data['nodes']>[number];\n\ninterface FeStyle {\n accent: string;\n fill: string;\n text: string;\n solid?: boolean;\n dash?: string;\n stereo?: string;\n cloud?: boolean;\n}\n\nfunction feStyle(kind: string | undefined): FeStyle {\n switch ((kind ?? 'component').toLowerCase()) {\n case 'engine':\n case 'core':\n return { accent: '#0e54a1', fill: '#0e54a1', text: '#fff', solid: true };\n case 'interface':\n return { accent: '#6b21a8', fill: '#fff', text: '#4a1772', dash: '5 4', stereo: 'interface' };\n case 'strategy':\n case 'adapter':\n case 'impl':\n return { accent: '#7c3aed', fill: '#ede9fe', text: '#4a1772' };\n case 'controller':\n case 'handler':\n case 'route':\n return { accent: '#0e54a1', fill: '#cfe0f3', text: '#0a3a6e' };\n case 'service':\n case 'usecase':\n case 'apiclient':\n case 'client':\n return { accent: '#1a6dbe', fill: '#e5eff8', text: '#0a3a6e' };\n case 'repository':\n case 'repo':\n case 'dao':\n return { accent: '#0f766e', fill: '#ccfbf1', text: '#0f4f49' };\n case 'worker':\n case 'consumer':\n return { accent: '#1f9747', fill: '#dcf1e2', text: '#0f3d22' };\n case 'middleware':\n return { accent: '#6b7280', fill: '#f3f4f6', text: '#374151' };\n case 'model':\n case 'entity':\n return { accent: '#6b21a8', fill: '#ede9fe', text: '#4a1772' };\n case 'db':\n case 'store':\n case 'database':\n return { accent: '#f7952c', fill: '#fde7cd', text: '#7a3d00' };\n case 'cache':\n return { accent: '#0891b2', fill: '#cffafe', text: '#0e4f5c' };\n case 'queue':\n case 'bus':\n case 'broker':\n return { accent: '#0f766e', fill: '#ccfbf1', text: '#0f4f49' };\n case 'state':\n case 'store_state':\n return { accent: '#f7952c', fill: '#fde7cd', text: '#7a3d00' };\n case 'hook':\n return { accent: '#7c3aed', fill: '#ede9fe', text: '#4a1772' };\n case 'external':\n case 'backend':\n case 'egress':\n case 'api':\n case 'thirdparty':\n return { accent: '#6b7280', fill: '#f3f4f6', text: '#374151', cloud: true };\n default:\n return { accent: '#1f9747', fill: '#dcf1e2', text: '#0f3d22' };\n }\n}\n\ninterface FeEdgeStyle {\n stroke: string;\n sw: number;\n dash: string;\n marker: string;\n}\n\nfunction feEdge(kind: string | undefined): FeEdgeStyle {\n switch ((kind ?? 'uses').toLowerCase()) {\n case 'implements':\n return { stroke: '#6b21a8', sw: 1.4, dash: '5 4', marker: 'gTri' };\n case 'egress':\n case 'https':\n case 'api':\n return { stroke: '#0e54a1', sw: 2, dash: '', marker: 'gArrow' };\n case 'reads':\n case 'dashed':\n case 'async':\n return { stroke: '#6b7280', sw: 1.4, dash: '5 4', marker: 'gSoft' };\n default:\n return { stroke: '#1a1a2e', sw: 1.4, dash: '', marker: 'gArrow' };\n }\n}\n\nconst GLYPH_KINDS = new Set([\n 'db',\n 'store',\n 'database',\n 'bucket',\n 'blob',\n 'object',\n 'queue',\n 'bus',\n 'broker',\n 'cache',\n 'external',\n 'backend',\n 'api',\n 'thirdparty',\n 'function',\n]);\nconst GLYPH_REMAP: Record<string, string> = {\n database: 'db',\n store: 'db',\n bus: 'queue',\n broker: 'queue',\n backend: 'external',\n api: 'external',\n thirdparty: 'external',\n};\n\ninterface FrameOpts {\n readonly tag: string;\n readonly tagBg?: string;\n}\n\nfunction renderFelogicGraph(data: Data, frame: FrameOpts): string {\n const groups = data.groups ?? [];\n const nodes = data.nodes ?? [];\n const edges = data.edges ?? [];\n const cellW = 178;\n const cellH = 80;\n const gapX = 54;\n const gapY = 60;\n const padX = 26;\n const padTop = 30;\n const padBot = 20;\n const cols = Math.max(\n 1,\n ...nodes.map((n) => n.col + ((n.w ?? 1) - 1)),\n ...groups.map((g) => g.col + (g.cols ?? 1) - 1),\n );\n const rows = Math.max(\n 1,\n ...nodes.map((n) => n.row),\n ...groups.map((g) => g.row + (g.rows ?? 1) - 1),\n );\n const xOf = (c: number): number => padX + (c - 1) * (cellW + gapX);\n const yOf = (r: number): number => padTop + (r - 1) * (cellH + gapY);\n const rectFor = (n: Node): { x: number; y: number; w: number; h: number } => ({\n x: xOf(n.col),\n y: yOf(n.row),\n w: (n.w ?? 1) * cellW + ((n.w ?? 1) - 1) * gapX,\n h: cellH,\n });\n const groupRect = (g: Group): { x: number; y: number; w: number; h: number } => ({\n x: xOf(g.col) - 16,\n y: yOf(g.row) - 22,\n w: (g.cols ?? 1) * cellW + ((g.cols ?? 1) - 1) * gapX + 32,\n h: (g.rows ?? 1) * cellH + ((g.rows ?? 1) - 1) * gapY + 38,\n });\n const byId = new Map(nodes.map((n) => [n.id, n]));\n const width = padX * 2 + cols * cellW + (cols - 1) * gapX;\n const height = padTop + rows * cellH + (rows - 1) * gapY + padBot;\n const sortedGroups = [...groups].sort(\n (a, b) => (b.cols ?? 1) * (b.rows ?? 1) - (a.cols ?? 1) * (a.rows ?? 1),\n );\n\n let s = `<svg viewBox=\"0 0 ${width} ${height}\" role=\"img\"><title>Module graph</title>`;\n\n for (const g of sortedGroups) {\n const r = groupRect(g);\n const col = safeColor(g.color, '#0e54a1');\n s +=\n `<g>` +\n `<rect x=\"${r.x}\" y=\"${r.y}\" width=\"${r.w}\" height=\"${r.h}\" rx=\"10\" fill=\"${col}\" fill-opacity=\"0.05\" stroke=\"${col}\" stroke-opacity=\"0.5\" stroke-width=\"1.2\" stroke-dasharray=\"7 5\"/>` +\n `<text x=\"${r.x + 14}\" y=\"${r.y + 15}\" class=\"grp-label\" fill=\"${col}\">${escapeHtml(g.label)}</text>` +\n `</g>`;\n }\n\n for (const e of edges) {\n const A = byId.get(e.from);\n const B = byId.get(e.to);\n if (!A || !B) continue;\n const p = ortho(rectFor(A), rectFor(B));\n const st = feEdge(e.kind);\n s +=\n `<g><path d=\"${p.d}\" fill=\"none\" stroke=\"${st.stroke}\" stroke-width=\"${st.sw}\" stroke-dasharray=\"${st.dash}\" marker-end=\"url(#${st.marker})\"/>` +\n edgePill(p, e.label) +\n `</g>`;\n }\n\n for (const n of nodes) {\n const r = rectFor(n);\n const st = feStyle(n.kind);\n const k = (n.kind ?? '').toLowerCase();\n const gl = GLYPH_KINDS.has(k) ? nodeGlyph(GLYPH_REMAP[k] ?? k, r.x + 16, r.y + 16, st.accent) : '';\n const nx = st.solid === true ? r.x + r.w / 2 : gl.length > 0 ? r.x + 42 : r.x + 16;\n const anchor = st.solid === true ? 'middle' : 'start';\n const nameY = r.y + (st.stereo !== undefined ? 38 : n.note !== undefined ? 36 : 44);\n const noteY = r.y + (st.stereo !== undefined ? 56 : 52);\n const stroke = st.solid === true ? 'none' : st.accent;\n const dashAttr = st.dash !== undefined ? ` stroke-dasharray=\"${st.dash}\"` : '';\n const stripe =\n st.solid === true\n ? ''\n : `<rect x=\"${r.x}\" y=\"${r.y}\" width=\"5\" height=\"${r.h}\" rx=\"2\" fill=\"${st.accent}\"/>`;\n const stereo =\n st.stereo !== undefined\n ? `<text x=\"${r.x + r.w / 2}\" y=\"${r.y + 20}\" class=\"uml-stereo\">«${escapeHtml(st.stereo)}»</text>`\n : '';\n const note =\n n.note !== undefined\n ? `<text x=\"${nx}\" y=\"${noteY}\" class=\"blk-tech\" fill=\"${st.solid === true ? '#cfe0f3' : st.accent}\" text-anchor=\"${anchor}\">${escapeHtml(n.note)}</text>`\n : '';\n s +=\n `<g filter=\"url(#gshadow)\">` +\n `<rect x=\"${r.x}\" y=\"${r.y}\" width=\"${r.w}\" height=\"${r.h}\" rx=\"9\" fill=\"${st.fill}\" stroke=\"${stroke}\" stroke-width=\"1.2\"${dashAttr}/>` +\n stripe +\n gl +\n stereo +\n `<text x=\"${nx}\" y=\"${nameY}\" class=\"blk-name\" fill=\"${st.text}\" text-anchor=\"${anchor}\">${escapeHtml(n.name)}</text>` +\n note +\n `</g>`;\n }\n\n s += `</svg>`;\n return diagramFrame(\n {\n tag: frame.tag,\n ...(frame.tagBg !== undefined ? { tagBg: frame.tagBg } : {}),\n ...(data.title !== undefined ? { title: data.title } : {}),\n ...(data.description !== undefined ? { desc: data.description } : {}),\n },\n s,\n );\n}\n\n/** `felogic` — frontend module graph (purple LOGIC tag). */\nexport function renderFelogic(data: BlockDataMap['felogic']): string {\n return renderFelogicGraph(data, { tag: 'LOGIC', tagBg: '#6b21a8' });\n}\n/** `belogic` — backend module graph (navy LOGIC tag). */\nexport function renderBelogic(data: BlockDataMap['belogic']): string {\n return renderFelogicGraph(data, { tag: 'LOGIC', tagBg: '#0e54a1' });\n}\n","/**\n * Renders UI mockups — low-fidelity wireframes inside device frames\n * (desktop window, browser, or phone). Each screen is a vertical stack of\n * UI elements (header, button, list, card, …) drawn as neutral placeholders,\n * Excalidraw-flavoured.\n *\n * Screens lay out left-to-right in a row. Element heights are fixed per type;\n * the frame grows to fit its content (phones keep a minimum height).\n */\n\nimport type { BlockDataMap } from '@avodado/core';\nimport { escapeHtml } from '../escape.js';\nimport { wrapText } from '../svg/wrapText.js';\nimport { diagramFrame } from './frame.js';\n\ntype Screen = NonNullable<BlockDataMap['wireframe']['screens']>[number];\ntype Element = NonNullable<Screen['elements']>[number];\n\n/** Inner content width per device (the drawable area inside the frame chrome). */\nfunction contentWidth(device: string): number {\n if (device === 'phone') return 200;\n return 380; // desktop / browser\n}\n\n/** Vertical space one element consumes (its drawn height + the gap below). */\nfunction elementHeight(el: Element): number {\n const rows = Math.max(1, el.rows ?? 1);\n switch (el.type) {\n case 'header':\n return 34;\n case 'subheader':\n return 26;\n case 'text':\n return 16 + (rows - 1) * 12;\n case 'button':\n return 42;\n case 'input':\n case 'search':\n return 42;\n case 'image':\n return 96;\n case 'avatar':\n return 52;\n case 'card':\n return rows * 64 + (rows - 1) * 10;\n case 'list':\n return rows * 40;\n case 'nav':\n return 34;\n case 'tabs':\n return 52;\n case 'divider':\n return 14;\n case 'badge':\n return 26;\n case 'toggle':\n return 30;\n case 'spacer':\n return 18 * rows;\n default:\n return 24;\n }\n}\n\nconst PH = 'fill=\"var(--light-gray)\" stroke=\"var(--rule)\" stroke-width=\"1\"';\n\n/** Draws one element at (x, y) within a content column of width w. Returns SVG. */\nfunction drawElement(el: Element, x: number, y: number, w: number): string {\n const rows = Math.max(1, el.rows ?? 1);\n const label = el.label ?? '';\n const accent =\n el.tone === 'danger'\n ? 'var(--negative)'\n : el.tone === 'muted'\n ? 'var(--gray)'\n : 'var(--navy)';\n const anchorX = el.align === 'c' ? x + w / 2 : el.align === 'r' ? x + w : x;\n const anchor = el.align === 'c' ? 'middle' : el.align === 'r' ? 'end' : 'start';\n\n switch (el.type) {\n case 'header':\n return `<text x=\"${anchorX}\" y=\"${y + 22}\" class=\"wf-h\" fill=\"var(--charcoal)\" text-anchor=\"${anchor}\">${escapeHtml(label || 'Heading')}</text>`;\n case 'subheader':\n return `<text x=\"${anchorX}\" y=\"${y + 17}\" class=\"wf-sub\" fill=\"var(--gray)\" text-anchor=\"${anchor}\">${escapeHtml(label || 'Subheading')}</text>`;\n case 'text': {\n let s = '';\n for (let i = 0; i < rows; i++) {\n const lw = i === rows - 1 ? w * 0.66 : w;\n s += `<rect x=\"${x}\" y=\"${y + i * 12}\" width=\"${lw}\" height=\"6\" rx=\"3\" fill=\"var(--rule)\"/>`;\n }\n return s;\n }\n case 'button':\n return (\n `<rect x=\"${x}\" y=\"${y}\" width=\"${w}\" height=\"34\" rx=\"8\" fill=\"${accent}\"/>` +\n `<text x=\"${x + w / 2}\" y=\"${y + 22}\" class=\"wf-btn\" text-anchor=\"middle\">${escapeHtml(label || 'Button')}</text>`\n );\n case 'input':\n case 'search': {\n const icon =\n el.type === 'search'\n ? `<circle cx=\"${x + 16}\" cy=\"${y + 17}\" r=\"5\" fill=\"none\" stroke=\"var(--gray)\" stroke-width=\"1.4\"/><path d=\"M${x + 20} ${y + 21} l4 4\" stroke=\"var(--gray)\" stroke-width=\"1.4\"/>`\n : '';\n const tx = el.type === 'search' ? x + 30 : x + 12;\n return (\n `<rect x=\"${x}\" y=\"${y}\" width=\"${w}\" height=\"34\" rx=\"8\" fill=\"var(--white)\" stroke=\"var(--rule)\" stroke-width=\"1.2\"/>` +\n icon +\n `<text x=\"${tx}\" y=\"${y + 21}\" class=\"wf-ph-text\">${escapeHtml(label || 'Type here…')}</text>`\n );\n }\n case 'image':\n return (\n `<rect x=\"${x}\" y=\"${y}\" width=\"${w}\" height=\"88\" rx=\"8\" ${PH}/>` +\n `<path d=\"M${x} ${y + 88} L${x + w * 0.4} ${y + 40} L${x + w * 0.62} ${y + 66} L${x + w * 0.78} ${y + 50} L${x + w} ${y + 88}\" fill=\"none\" stroke=\"var(--gray)\" stroke-width=\"1.3\"/>` +\n `<circle cx=\"${x + w * 0.74} \" cy=\"${y + 26}\" r=\"7\" fill=\"none\" stroke=\"var(--gray)\" stroke-width=\"1.3\"/>`\n );\n case 'avatar':\n return (\n `<circle cx=\"${x + 22}\" cy=\"${y + 22}\" r=\"20\" ${PH}/>` +\n `<circle cx=\"${x + 22}\" cy=\"${y + 17}\" r=\"7\" fill=\"var(--gray)\"/>` +\n `<path d=\"M${x + 9} ${y + 40} a13 11 0 0 1 26 0\" fill=\"var(--gray)\"/>` +\n (label\n ? `<text x=\"${x + 52}\" y=\"${y + 27}\" class=\"wf-sub\" fill=\"var(--charcoal)\">${escapeHtml(label)}</text>`\n : '')\n );\n case 'card': {\n let s = '';\n for (let i = 0; i < rows; i++) {\n const cy = y + i * 74;\n s +=\n `<rect x=\"${x}\" y=\"${cy}\" width=\"${w}\" height=\"64\" rx=\"10\" fill=\"var(--white)\" stroke=\"var(--rule)\" stroke-width=\"1.2\"/>` +\n `<rect x=\"${x + 12}\" y=\"${cy + 12}\" width=\"40\" height=\"40\" rx=\"8\" ${PH}/>` +\n `<rect x=\"${x + 64}\" y=\"${cy + 16}\" width=\"${w - 92}\" height=\"7\" rx=\"3.5\" fill=\"var(--rule)\"/>` +\n `<rect x=\"${x + 64}\" y=\"${cy + 34}\" width=\"${(w - 92) * 0.6}\" height=\"6\" rx=\"3\" fill=\"var(--rule)\"/>`;\n }\n const cap = label\n ? `<text x=\"${x + 64}\" y=\"${y + 30}\" class=\"wf-ph-text\"></text>`\n : '';\n return s + cap;\n }\n case 'list': {\n let s = '';\n for (let i = 0; i < rows; i++) {\n const ly = y + i * 40;\n s +=\n `<circle cx=\"${x + 16}\" cy=\"${ly + 20}\" r=\"12\" ${PH}/>` +\n `<rect x=\"${x + 38}\" y=\"${ly + 12}\" width=\"${w - 76}\" height=\"6\" rx=\"3\" fill=\"var(--rule)\"/>` +\n `<rect x=\"${x + 38}\" y=\"${ly + 24}\" width=\"${(w - 76) * 0.55}\" height=\"5\" rx=\"2.5\" fill=\"var(--rule)\"/>` +\n `<path d=\"M${x + w - 14} ${ly + 15} l5 5 l-5 5\" fill=\"none\" stroke=\"var(--gray)\" stroke-width=\"1.4\"/>` +\n (i < rows - 1\n ? `<line x1=\"${x + 38}\" y1=\"${ly + 40}\" x2=\"${x + w}\" y2=\"${ly + 40}\" stroke=\"var(--light-gray)\" stroke-width=\"1\"/>`\n : '');\n }\n return s;\n }\n case 'nav': {\n // a row of pill items; label is comma-separated item names.\n const items = (label || 'Home, Docs, Pricing, About').split(',').map((t) => t.trim());\n let s = '';\n let nx = x;\n for (const it of items) {\n const pw = 16 + it.length * 6.2;\n s +=\n `<rect x=\"${nx}\" y=\"${y + 4}\" width=\"${pw}\" height=\"22\" rx=\"11\" fill=\"var(--light-gray)\"/>` +\n `<text x=\"${nx + pw / 2}\" y=\"${y + 19}\" class=\"wf-ph-text\" text-anchor=\"middle\">${escapeHtml(it)}</text>`;\n nx += pw + 8;\n }\n return s;\n }\n case 'tabs': {\n const items = (label || 'Home, Search, Bell, Profile').split(',').map((t) => t.trim());\n const seg = w / items.length;\n let s = `<line x1=\"${x}\" y1=\"${y}\" x2=\"${x + w}\" y2=\"${y}\" stroke=\"var(--rule)\" stroke-width=\"1\"/>`;\n items.forEach((it, i) => {\n const cx = x + seg * i + seg / 2;\n s +=\n `<circle cx=\"${cx}\" cy=\"${y + 18}\" r=\"8\" fill=\"none\" stroke=\"${i === 0 ? accent : 'var(--gray)'}\" stroke-width=\"1.6\"/>` +\n `<text x=\"${cx}\" y=\"${y + 42}\" class=\"wf-tab\" text-anchor=\"middle\" fill=\"${i === 0 ? accent : 'var(--gray)'}\">${escapeHtml(it)}</text>`;\n });\n return s;\n }\n case 'divider':\n return `<line x1=\"${x}\" y1=\"${y + 7}\" x2=\"${x + w}\" y2=\"${y + 7}\" stroke=\"var(--rule)\" stroke-width=\"1\"/>`;\n case 'badge': {\n const pw = 22 + label.length * 6.4;\n return (\n `<rect x=\"${anchorX - (anchor === 'middle' ? pw / 2 : anchor === 'end' ? pw : 0)}\" y=\"${y}\" width=\"${pw}\" height=\"22\" rx=\"11\" fill=\"${accent}\"/>` +\n `<text x=\"${anchorX - (anchor === 'middle' ? 0 : anchor === 'end' ? pw / 2 : -pw / 2)}\" y=\"${y + 15}\" class=\"wf-btn\" text-anchor=\"middle\">${escapeHtml(label || 'New')}</text>`\n );\n }\n case 'toggle':\n return (\n (label\n ? `<text x=\"${x}\" y=\"${y + 19}\" class=\"wf-sub\" fill=\"var(--charcoal)\">${escapeHtml(label)}</text>`\n : '') +\n `<rect x=\"${x + w - 44}\" y=\"${y + 6}\" width=\"44\" height=\"22\" rx=\"11\" fill=\"${accent}\"/>` +\n `<circle cx=\"${x + w - 16}\" cy=\"${y + 17}\" r=\"8\" fill=\"#fff\"/>`\n );\n case 'spacer':\n return '';\n default:\n return '';\n }\n}\n\n/** Renders one device frame and its stacked content. Returns {svg, width, height}. */\nfunction drawScreen(screen: Screen, idx: number): { svg: string; width: number; height: number } {\n const device = screen.device ?? 'browser';\n const cw = contentWidth(device);\n const pad = 16;\n const els = screen.elements ?? [];\n let contentH = 0;\n for (const el of els) contentH += elementHeight(el) + 10;\n contentH = Math.max(contentH, 80);\n\n // chrome heights\n const isPhone = device === 'phone';\n const isBrowser = device === 'browser';\n const titleBarH = 30;\n const addressBarH = isBrowser ? 26 : 0;\n const chromeTop = titleBarH + addressBarH;\n const homeBarH = isPhone ? 24 : 0;\n\n const frameW = cw + pad * 2;\n const screenH = contentH + pad;\n const frameH = chromeTop + screenH + homeBarH;\n const rx = isPhone ? 30 : 14;\n const sw = isPhone ? 2.4 : 1.8;\n const clip = `wfclip${idx}`;\n\n // Inner chrome + content, drawn first and clipped to the rounded frame so\n // nothing spills the corners. The border stroke is drawn LAST, on top, so the\n // outline is always crisp and visible above the fills.\n let inner = '';\n if (isPhone) {\n inner += `<rect x=\"0\" y=\"0\" width=\"${frameW}\" height=\"${titleBarH}\" fill=\"var(--light-gray)\"/>`;\n inner += `<rect x=\"${frameW / 2 - 26}\" y=\"6\" width=\"52\" height=\"9\" rx=\"4.5\" fill=\"var(--charcoal)\"/>`;\n if (screen.title)\n inner += `<text x=\"16\" y=\"20\" class=\"wf-status\">${escapeHtml(screen.title)}</text>`;\n inner += `<text x=\"${frameW - 16}\" y=\"20\" class=\"wf-status\" text-anchor=\"end\">100%</text>`;\n } else {\n inner += `<rect x=\"0\" y=\"0\" width=\"${frameW}\" height=\"${titleBarH}\" fill=\"var(--light-gray)\"/>`;\n inner += `<line x1=\"0\" y1=\"${titleBarH}\" x2=\"${frameW}\" y2=\"${titleBarH}\" stroke=\"var(--rule)\" stroke-width=\"1\"/>`;\n inner += `<circle cx=\"18\" cy=\"15\" r=\"5\" fill=\"var(--negative)\"/><circle cx=\"34\" cy=\"15\" r=\"5\" fill=\"var(--highlight)\"/><circle cx=\"50\" cy=\"15\" r=\"5\" fill=\"var(--positive)\"/>`;\n if (screen.title && !isBrowser)\n inner += `<text x=\"${frameW / 2}\" y=\"20\" class=\"wf-status\" text-anchor=\"middle\">${escapeHtml(screen.title)}</text>`;\n if (isBrowser) {\n const url = screen.url ?? screen.title ?? 'example.com';\n inner += `<rect x=\"68\" y=\"${titleBarH + 5}\" width=\"${frameW - 84}\" height=\"16\" rx=\"8\" fill=\"var(--white)\" stroke=\"var(--rule)\" stroke-width=\"1\"/>`;\n inner += `<text x=\"78\" y=\"${titleBarH + 16}\" class=\"wf-url\">${escapeHtml(url)}</text>`;\n }\n }\n\n let cy = chromeTop + pad;\n for (const el of els) {\n inner += drawElement(el, pad, cy, cw);\n cy += elementHeight(el) + 10;\n }\n if (isPhone) {\n inner += `<rect x=\"${frameW / 2 - 30}\" y=\"${frameH - 15}\" width=\"60\" height=\"5\" rx=\"2.5\" fill=\"var(--charcoal)\" opacity=\"0.55\"/>`;\n }\n\n const s =\n `<g filter=\"url(#gshadow)\">` +\n `<defs><clipPath id=\"${clip}\"><rect x=\"0\" y=\"0\" width=\"${frameW}\" height=\"${frameH}\" rx=\"${rx}\"/></clipPath></defs>` +\n // solid backing so the drop shadow reads against any page colour\n `<rect x=\"0\" y=\"0\" width=\"${frameW}\" height=\"${frameH}\" rx=\"${rx}\" fill=\"var(--white)\"/>` +\n `<g clip-path=\"url(#${clip})\">${inner}</g>` +\n // border on top — always visible above the fills\n `<rect x=\"0\" y=\"0\" width=\"${frameW}\" height=\"${frameH}\" rx=\"${rx}\" fill=\"none\" stroke=\"var(--charcoal)\" stroke-width=\"${sw}\"/>` +\n `</g>`;\n return { svg: s, width: frameW, height: frameH };\n}\n\nexport function renderWireframe(data: BlockDataMap['wireframe']): string {\n const screens = data.screens ?? [];\n const gap = 36;\n const capH = 22;\n const padX = 8;\n const padY = 8;\n\n const drawn = screens.map((screen, i) => drawScreen(screen, i));\n const totalW = drawn.reduce((a, d) => a + d.width, 0) + gap * Math.max(0, drawn.length - 1);\n const maxH = drawn.reduce((a, d) => Math.max(a, d.height), 0);\n const width = totalW + padX * 2;\n const height = maxH + capH + padY * 2;\n\n let s = `<svg viewBox=\"0 0 ${width} ${height}\" role=\"img\"><title>${escapeHtml(data.title ?? 'UI mockup')}</title>`;\n let x = padX;\n drawn.forEach((d, i) => {\n const screen = screens[i];\n s += `<g transform=\"translate(${x}, ${padY})\">${d.svg}</g>`;\n const cap = screen?.label;\n if (cap !== undefined && cap.length > 0) {\n const lines = wrapText(cap, Math.floor(d.width / 6), 2);\n lines.forEach((ln, j) => {\n s += `<text x=\"${x + d.width / 2}\" y=\"${padY + maxH + 16 + j * 12}\" class=\"wf-caption\" text-anchor=\"middle\">${escapeHtml(ln)}</text>`;\n });\n }\n x += d.width + gap;\n });\n s += `</svg>`;\n\n return diagramFrame(\n {\n tag: 'UI',\n tagBg: '#6b21a8',\n ...(data.title !== undefined ? { title: data.title } : {}),\n ...(data.description !== undefined ? { desc: data.description } : {}),\n },\n s,\n );\n}\n","/**\n * HTML renderer registry — mirrors the core block registry's exhaustiveness.\n *\n * Each block type maps to a function that takes its typed data and returns an\n * HTML string. The mapped type `{ [K in BlockType]: ... }` ensures omitting a\n * block type is a compile error — adding a new BlockType in core fails tsc here\n * until the renderer is added.\n */\n\nimport type { BlockDataMap, BlockType } from '@avodado/core';\n\nimport { renderCallout } from './blocks/callout.js';\nimport { renderErd } from './blocks/erd.js';\nimport { renderKanban } from './blocks/kanban.js';\nimport { renderMetaBlock } from './blocks/meta.js';\nimport { renderSequence } from './blocks/sequence.js';\nimport { renderTable } from './blocks/table.js';\nimport { renderTimeline } from './blocks/timeline.js';\nimport { renderTracker } from './blocks/tracker.js';\nimport { renderUserStory } from './blocks/userstory.js';\nimport { renderProseBlock } from './blocks/prose.js';\nimport { renderGlossary } from './blocks/glossary.js';\nimport { renderProsCons } from './blocks/proscons.js';\nimport { renderCvt } from './blocks/cvt.js';\nimport { renderStats } from './blocks/stats.js';\nimport { renderCode } from './blocks/code.js';\nimport { renderAgenda } from './blocks/agenda.js';\nimport { renderTree } from './blocks/tree.js';\nimport { renderPyramid } from './blocks/pyramid.js';\nimport { renderFunnel } from './blocks/funnel.js';\nimport { renderFlow } from './blocks/flow.js';\nimport { renderState } from './blocks/state.js';\nimport { renderDfd } from './blocks/dfd.js';\nimport { renderJourney } from './blocks/journey.js';\nimport { renderGantt } from './blocks/gantt.js';\nimport { renderGraph } from './blocks/graph.js';\nimport { renderQuadrant } from './blocks/quadrant.js';\nimport { renderSwimlane } from './blocks/swimlane.js';\nimport { renderC4 } from './blocks/c4.js';\nimport { renderUml } from './blocks/uml.js';\nimport { renderMece } from './blocks/mece.js';\nimport { renderFrontend } from './blocks/frontend.js';\nimport { renderCluster } from './blocks/cluster.js';\nimport {\n renderBlock,\n renderInfra,\n renderEvent,\n renderDdd,\n renderNetwork,\n} from './blocks/blockGraph.js';\nimport { renderFelogic, renderBelogic } from './blocks/felogic.js';\nimport { renderDag } from './blocks/flow.js';\nimport { renderWireframe } from './blocks/wireframe.js';\n\n/** Per-block HTML renderer signature. */\nexport type HtmlRenderer<K extends BlockType> = (data: BlockDataMap[K]) => string;\n\n/** Mapped type — adding a {@link BlockType} without an entry fails tsc. */\nexport type HtmlRendererRegistry = { readonly [K in BlockType]: HtmlRenderer<K> };\n\n/** The HTML renderer registry. `meta` is intentionally a no-op (cover is rendered separately). */\nexport const htmlRenderers: HtmlRendererRegistry = {\n meta: renderMetaBlock,\n callout: renderCallout,\n table: renderTable,\n sequence: renderSequence,\n erd: renderErd,\n userstory: renderUserStory,\n timeline: renderTimeline,\n kanban: renderKanban,\n tracker: renderTracker,\n prose: renderProseBlock,\n glossary: renderGlossary,\n proscons: renderProsCons,\n cvt: renderCvt,\n stats: renderStats,\n code: renderCode,\n agenda: renderAgenda,\n tree: renderTree,\n pyramid: renderPyramid,\n funnel: renderFunnel,\n flow: renderFlow,\n state: renderState,\n dfd: renderDfd,\n journey: renderJourney,\n gantt: renderGantt,\n graph: renderGraph,\n quadrant: renderQuadrant,\n swimlane: renderSwimlane,\n c4: renderC4,\n uml: renderUml,\n mece: renderMece,\n frontend: renderFrontend,\n cluster: renderCluster,\n block: renderBlock,\n infra: renderInfra,\n event: renderEvent,\n ddd: renderDdd,\n network: renderNetwork,\n felogic: renderFelogic,\n belogic: renderBelogic,\n dag: renderDag,\n wireframe: renderWireframe,\n};\n","/**\n * Global SVG `<defs>` shared by multiple block renderers (markers used as edge\n * arrow heads, a drop-shadow filter for boxed nodes).\n *\n * Emitted once near the top of the rendered body so subsequent SVGs can\n * reference them by id. Ported from `resources/doc-studio.jsx` `GlobalDefs`.\n */\n\n/**\n * Returns the SVG element containing global marker + filter definitions.\n * The element is invisible (width/height = 0) but the defs are scoped to the\n * document so any subsequent `<svg>` can use `marker-end=\"url(#gArrow)\"` etc.\n */\nexport function globalDefsSvg(): string {\n return (\n `<svg width=\"0\" height=\"0\" style=\"position:absolute\" aria-hidden=\"true\">` +\n `<defs>` +\n `<marker id=\"gArrow\" viewBox=\"0 0 10 10\" refX=\"9\" refY=\"5\" markerWidth=\"7\" markerHeight=\"7\" orient=\"auto-start-reverse\">` +\n `<path d=\"M0,0 L10,5 L0,10 z\" fill=\"var(--charcoal)\"/></marker>` +\n `<marker id=\"gSoft\" viewBox=\"0 0 10 10\" refX=\"9\" refY=\"5\" markerWidth=\"7\" markerHeight=\"7\" orient=\"auto-start-reverse\">` +\n `<path d=\"M0,0 L10,5 L0,10 z\" fill=\"var(--gray)\"/></marker>` +\n `<marker id=\"gErr\" viewBox=\"0 0 10 10\" refX=\"9\" refY=\"5\" markerWidth=\"7\" markerHeight=\"7\" orient=\"auto-start-reverse\">` +\n `<path d=\"M0,0 L10,5 L0,10 z\" fill=\"#991b1b\"/></marker>` +\n `<marker id=\"gTri\" viewBox=\"0 0 14 14\" refX=\"13\" refY=\"7\" markerWidth=\"14\" markerHeight=\"14\" orient=\"auto-start-reverse\">` +\n `<path d=\"M1,1 L13,7 L1,13 z\" fill=\"#fff\" stroke=\"#6b21a8\" stroke-width=\"1.2\"/></marker>` +\n `<filter id=\"gshadow\" x=\"-20%\" y=\"-20%\" width=\"140%\" height=\"170%\">` +\n `<feDropShadow dx=\"0\" dy=\"2\" stdDeviation=\"3\" flood-color=\"#0e54a1\" flood-opacity=\"0.13\"/></filter>` +\n `</defs>` +\n `</svg>`\n );\n}\n","/**\n * Theme system. Each theme is a set of CSS variable overrides applied via\n * `style=\"--navy: …; --blue: …\"` on the `.docskin` root element. The full\n * stylesheet (see {@link houseCss}) reads those variables.\n *\n * Adding a new theme = add an entry here. No CSS changes needed.\n *\n * Ported verbatim from `resources/doc-studio.jsx` `THEMES`.\n */\n\n/** Built-in theme names. */\nexport type ThemeName = 'navy' | 'teal' | 'plum' | 'slate' | 'dark' | 'soft';\n\n/** Default theme used when none is specified. */\nexport const DEFAULT_THEME: ThemeName = 'navy';\n\ninterface ThemeDef {\n /** Human-readable label, for UI surfaces. */\n readonly label: string;\n /** CSS variable overrides applied at the `.docskin` root. */\n readonly vars: Readonly<Record<string, string>>;\n}\n\n/** The four built-in themes. */\nexport const themes: Readonly<Record<ThemeName, ThemeDef>> = {\n navy: {\n label: 'Editorial',\n vars: {},\n },\n teal: {\n label: 'Teal',\n vars: {\n '--navy': '#0f766e',\n '--blue': '#0e7490',\n '--highlight': '#f59e0b',\n },\n },\n plum: {\n label: 'Plum',\n vars: {\n '--navy': '#6b21a8',\n '--blue': '#7c3aed',\n '--highlight': '#db2777',\n },\n },\n slate: {\n label: 'Slate sans',\n vars: {\n '--navy': '#334155',\n '--blue': '#475569',\n '--highlight': '#0d9488',\n '--font-display': '\"Helvetica Neue\", Arial, sans-serif',\n },\n },\n // Full dark mode. Surfaces (--white) and ink (--charcoal) flip; neutrals are\n // remapped so hairlines/edges read as light-on-dark. Accent hues are brightened\n // for contrast. Node \"chip\" pastels (in the SVG palette) stay light by design —\n // they read as colored cards on the dark canvas.\n dark: {\n label: 'Dark',\n vars: {\n '--white': '#161b26', // surfaces: page + cards + diagram bg\n '--charcoal': '#e6e9f2', // primary ink + structural strokes\n '--slate': '#c2c9d6', // secondary text\n '--gray': '#94a0b4', // muted text / dashed edges\n '--light-gray': '#222a39', // subtle panels / zone fills / bars\n '--rule': '#333f54', // hairlines / borders\n '--navy': '#5b9cff', // primary accent (headings, links, primary nodes)\n '--navy-tint': '#1e2a44',\n '--blue': '#7fb0ff',\n '--light-blue': '#16233a',\n '--highlight': '#f7a64a',\n '--highlight-soft': '#3a2c17',\n '--positive': '#3ecf7a',\n '--positive-soft': '#16301f',\n '--negative': '#ff6b6b',\n '--negative-soft': '#3a1d1d',\n '--purple': '#b78bff',\n '--purple-soft': '#271d3a',\n '--teal': '#4fd1c5',\n '--teal-soft': '#13302d',\n '--radius': '14px',\n },\n },\n // Soft modern light theme: rounded surfaces, indigo accent, warm-gray ink.\n soft: {\n label: 'Soft',\n vars: {\n '--navy': '#4f46e5',\n '--blue': '#6366f1',\n '--charcoal': '#1f2433',\n '--slate': '#4b5366',\n '--gray': '#8b93a7',\n '--rule': '#e6e8ef',\n '--light-gray': '#f5f6fa',\n '--highlight': '#f59e0b',\n '--radius': '16px',\n '--font-display': '\"Helvetica Neue\", Arial, sans-serif',\n },\n },\n};\n\n/**\n * Returns the CSS variable overrides for a theme as an inline-style string\n * (e.g. `\"--navy:#0f766e;--blue:#0e7490;\"`). Empty string for the default\n * navy theme.\n */\nexport function themeStyle(name: ThemeName): string {\n const vars = themes[name].vars;\n const parts: string[] = [];\n for (const k of Object.keys(vars)) parts.push(`${k}:${vars[k]};`);\n return parts.join('');\n}\n","/**\n * Renders a parsed {@link Document} into its composable PARTS — the CSS, the\n * theme-variable string, the inner body HTML (for a `<div class=\"docskin\">`),\n * the title, and a section index for navigation.\n *\n * {@link renderDocument} (in `document.ts`) wraps these parts into a standalone\n * `<!doctype html>` page. Embedding consumers (e.g. a React app) inject the\n * parts directly: one `<style>` with `css`, a scoped `<style>` that sets the\n * theme vars, and the `body` inside their own `.docskin` host. This avoids\n * nesting a full HTML document inside the page and enables live theme switching\n * (swap only the theme-vars style) and section-level navigation (each section\n * carries an `id`).\n */\n\nimport type { BlockDataMap, BlockType, Document, Segment, TypedSegment } from '@avodado/core';\nimport { houseCss } from './css.js';\nimport { escapeHtml } from './escape.js';\nimport { renderCover } from './blocks/meta.js';\nimport { SECTION_LABEL } from './blocks/frame.js';\nimport { renderProse } from './markdown.js';\nimport { htmlRenderers } from './registry.js';\nimport { globalDefsSvg } from './svg/defs.js';\nimport { DEFAULT_THEME, themeStyle, type ThemeName } from './themes.js';\n\n/** Options shared by {@link renderDocumentParts} and the page renderer. */\nexport interface RenderPartsOptions {\n /** Theme name. Defaults to `navy`. */\n readonly theme?: ThemeName;\n /**\n * Custom CSS-variable overrides applied after the named theme (they win),\n * e.g. `{ '--navy': '#123456' }`.\n */\n readonly themeVars?: Readonly<Record<string, string>>;\n}\n\n/** One navigable section of a rendered document. */\nexport interface DocumentSection {\n /** DOM id of the `<section>` (e.g. `section-01`). */\n readonly id: string;\n /** 1-based section number. */\n readonly num: number;\n /** Section label (e.g. `Roadmap`, `Sequence`). */\n readonly label: string;\n /** The block's title, if it has one. */\n readonly title?: string;\n}\n\n/** The composable pieces of a rendered document. */\nexport interface DocumentParts {\n /** Theme-independent house stylesheet. Inject once. */\n readonly css: string;\n /** Theme variable declarations (e.g. `--navy:#0f766e;`), or `''` for default. */\n readonly themeVars: string;\n /** Inner HTML for a `<div class=\"docskin\">` host: defs + cover + sections. */\n readonly body: string;\n /** Document title (from the `meta` block). */\n readonly title: string;\n /** Section index for navigation. */\n readonly sections: readonly DocumentSection[];\n}\n\ninterface RenderCtx {\n sectionNum: number;\n sections: DocumentSection[];\n}\n\nfunction pad2(n: number): string {\n return n < 10 ? `0${n}` : String(n);\n}\n\n/** Reads optional title/lede from a block's data, defensively typed. */\nfunction readTitleAndLede(data: unknown): { title?: string; lede?: string } {\n if (data === null || typeof data !== 'object') return {};\n const d = data as { title?: unknown; lede?: unknown };\n const out: { title?: string; lede?: string } = {};\n if (typeof d.title === 'string' && d.title.length > 0) out.title = d.title;\n if (typeof d.lede === 'string' && d.lede.length > 0) out.lede = d.lede;\n return out;\n}\n\nfunction renderSectionHead(num: number, kind: BlockType, title?: string, lede?: string): string {\n const label = SECTION_LABEL[kind];\n const titleHtml =\n title !== undefined ? `<h2 class=\"section-title\">${escapeHtml(title)}</h2>` : '';\n const ledeHtml = lede !== undefined ? `<p class=\"section-lede\">${escapeHtml(lede)}</p>` : '';\n return (\n `<div class=\"section-head\">` +\n `<div class=\"section-num\">SECTION ${pad2(num)} · ${escapeHtml(label)}</div>` +\n titleHtml +\n ledeHtml +\n `</div>`\n );\n}\n\n/**\n * Dispatches a typed block to its renderer. The registry is keyed by the same\n * `BlockType` discriminant as the segment, so this single contained cast asserts\n * the invariant rather than leaking casts to every call site.\n */\nfunction dispatchBlock<K extends BlockType>(kind: K, data: BlockDataMap[K]): string {\n const fn = htmlRenderers[kind] as (data: BlockDataMap[K]) => string;\n return fn(data);\n}\n\nfunction renderTypedSegment(seg: TypedSegment, ctx: RenderCtx): string {\n if (seg.kind === 'meta') return '';\n if (seg.parseError !== undefined) {\n return `<div class=\"err\">${escapeHtml(seg.kind)} block — parse error:\\n${escapeHtml(seg.parseError)}</div>`;\n }\n if (seg.data === null || seg.data === undefined) return '';\n\n const body = dispatchBlock(seg.kind, seg.data as BlockDataMap[typeof seg.kind]);\n\n ctx.sectionNum += 1;\n const num = ctx.sectionNum;\n const { title, lede } = readTitleAndLede(seg.data);\n const id = `section-${pad2(num)}`;\n ctx.sections.push({\n id,\n num,\n label: SECTION_LABEL[seg.kind],\n ...(title !== undefined ? { title } : {}),\n });\n const head = renderSectionHead(num, seg.kind, title, lede);\n\n return `<section id=\"${id}\" class=\"section-block\">${head}${body}</section>`;\n}\n\nfunction renderSegment(seg: Segment, ctx: RenderCtx): string {\n if (seg.kind === 'markdown') return renderProse(seg.text);\n return renderTypedSegment(seg, ctx);\n}\n\n/** Builds the theme-variable declaration string (named theme + overrides). */\nexport function buildThemeVars(\n theme: ThemeName,\n vars?: Readonly<Record<string, string>>,\n): string {\n let css = themeStyle(theme);\n if (vars !== undefined) {\n for (const k of Object.keys(vars)) css += `${k}:${vars[k]};`;\n }\n return css;\n}\n\n/**\n * Renders a document into its composable parts.\n *\n * @param doc - The parsed Avodado document.\n * @param opts - Optional theme + variable overrides.\n * @returns The CSS, theme vars, body HTML, title, and section index.\n */\nexport function renderDocumentParts(doc: Document, opts: RenderPartsOptions = {}): DocumentParts {\n const title = doc.meta?.title ?? 'Untitled';\n const theme = opts.theme ?? DEFAULT_THEME;\n const themeVars = buildThemeVars(theme, opts.themeVars);\n const ctx: RenderCtx = { sectionNum: 0, sections: [] };\n const body =\n globalDefsSvg() +\n renderCover(doc.meta) +\n doc.segments.map((s) => renderSegment(s, ctx)).join('');\n return { css: houseCss, themeVars, body, title, sections: ctx.sections };\n}\n","/**\n * Renders a parsed {@link Document} to a standalone HTML string.\n *\n * - Inlines the house CSS in `<style>` so the output is self-contained.\n * - Wraps the body in `<div class=\"docskin\">` so the CSS rules apply.\n * - Applies an optional theme by setting CSS variables on `:root`.\n *\n * The actual rendering is done by {@link renderDocumentParts} (in `parts.ts`);\n * this function just wraps those parts into a full HTML page. Embedding\n * consumers (e.g. a React app) should use `renderDocumentParts` directly.\n *\n * @example\n * ```ts\n * import { parseDocument } from '@avodado/core';\n * import { renderDocument } from '@avodado/render';\n *\n * const html = renderDocument(parseDocument(md, 'orders'), { theme: 'teal' });\n * ```\n */\n\nimport type { Document } from '@avodado/core';\nimport { escapeHtml } from './escape.js';\nimport { renderDocumentParts, type RenderPartsOptions } from './parts.js';\n\n/** Options for {@link renderDocument}. */\nexport type RenderOptions = RenderPartsOptions;\n\n/**\n * Renders a document to a standalone HTML page.\n *\n * @param doc - The parsed Avodado document.\n * @param opts - Optional render options (theme).\n * @returns A complete HTML string (`<!doctype html>…</html>`).\n */\nexport function renderDocument(doc: Document, opts: RenderOptions = {}): string {\n const parts = renderDocumentParts(doc, opts);\n const themeBlock =\n parts.themeVars.length > 0 ? `\\n<style>:root{${parts.themeVars}}</style>` : '';\n return (\n `<!doctype html>\\n` +\n `<html lang=\"en\">\\n` +\n `<head>\\n` +\n `<meta charset=\"utf-8\">\\n` +\n `<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">\\n` +\n `<title>${escapeHtml(parts.title)}</title>\\n` +\n `<style>${parts.css}</style>` +\n themeBlock +\n `\\n</head>\\n` +\n `<body>\\n` +\n `<div class=\"docskin\">\\n` +\n parts.body +\n `</div>\\n` +\n `</body>\\n` +\n `</html>\\n`\n );\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/css.ts","../src/escape.ts","../src/sanitize.ts","../src/markdown.ts","../src/blocks/meta.ts","../src/blocks/frame.ts","../src/blocks/callout.ts","../src/blocks/erd.ts","../src/blocks/kanban.ts","../src/blocks/sequence.ts","../src/blocks/table.ts","../src/blocks/timeline.ts","../src/blocks/tracker.ts","../src/blocks/userstory.ts","../src/blocks/prose.ts","../src/blocks/glossary.ts","../src/blocks/proscons.ts","../src/blocks/cvt.ts","../src/blocks/stats.ts","../src/highlight.ts","../src/blocks/code.ts","../src/blocks/agenda.ts","../src/blocks/tree.ts","../src/blocks/pyramid.ts","../src/blocks/funnel.ts","../src/svg/ortho.ts","../src/svg/wrapText.ts","../src/svg/edgePill.ts","../src/blocks/flow.ts","../src/blocks/state.ts","../src/blocks/dfd.ts","../src/blocks/journey.ts","../src/blocks/gantt.ts","../src/blocks/graph.ts","../src/blocks/quadrant.ts","../src/blocks/swimlane.ts","../src/svg/blockStyle.ts","../src/blocks/c4.ts","../src/blocks/uml.ts","../src/blocks/mece.ts","../src/blocks/frontend.ts","../src/blocks/cluster.ts","../src/blocks/blockGraph.ts","../src/blocks/felogic.ts","../src/blocks/wireframe.ts","../src/registry.ts","../src/svg/defs.ts","../src/themes.ts","../src/parts.ts","../src/document.ts"],"names":["CHART_COLORS","sx","ex","sy","ey","rectFor","s","clamp01"],"mappings":";;;AAWO,IAAM,QAAA,GAAW,CAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA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","file":"index.js","sourcesContent":["/**\n * The house CSS — ported verbatim from `resources/doc-studio.jsx`.\n *\n * All output is namespaced under `.docskin` so the stylesheet can coexist with\n * a host page's own styles. Theme switching works by overriding the CSS\n * variables on the `.docskin` root (see {@link themes}).\n *\n * Exported as a single string so it can be inlined into a `<style>` tag in the\n * standalone HTML produced by {@link renderDocument} (or copied verbatim into\n * a static stylesheet).\n */\nexport const houseCss = `*{box-sizing:border-box;margin:0;padding:0;}\nhtml{scroll-behavior:smooth;}\n/* Design tokens live on :root so a theme (applied as :root overrides) reaches\n the whole page — body chrome included, not just .docskin content. */\n:root{\n /* Default = \"textbook\": warm cream paper, deep academic navy, terracotta accent,\n classic serif display + body. Bigger headings for a printed-page feel. */\n --navy:#233a5e; --navy-tint:#c4d0e2; --blue:#2f5c8f; --light-blue:#e8eef6;\n --charcoal:#211f1a; --slate:#4a463d; --gray:#8a8475; --light-gray:#f2efe6;\n --rule:#e4dccb; --highlight:#9c4a2f; --highlight-soft:#f3e4dc;\n --positive:#3f7d4e; --positive-soft:#e3efe2; --negative:#a13b2e; --negative-soft:#f4e0db;\n --purple:#5b4a8a; --purple-soft:#ebe6f3; --teal:#2f6f6a; --teal-soft:#e0eeec; --white:#fcfbf7;\n --radius:4px;\n --font-display:\"Iowan Old Style\",\"Palatino Linotype\",Palatino,Georgia,\"Times New Roman\",serif;\n --font-body:Georgia,\"Iowan Old Style\",Palatino,\"Times New Roman\",serif;\n --font-mono:\"SF Mono\",ui-monospace,Menlo,Consolas,\"Courier New\",monospace;\n}\nbody{background:var(--white);color:var(--charcoal);font-family:var(--font-body);font-size:15px;line-height:1.6;}\n.docskin{\n background:var(--white); color:var(--charcoal); font-family:var(--font-body); font-size:15px; line-height:1.6;\n max-width:1180px; margin:0 auto; padding:0 56px 128px;\n}\n.docskin .cover-bar{height:8px;background:var(--navy);margin:0 -56px 36px;}\n.docskin .cover-pad{padding:0 0 40px;margin-bottom:56px;border-bottom:1px solid var(--rule);}\n.docskin .cover-meta{display:flex;justify-content:space-between;flex-wrap:wrap;gap:16px;font-size:11px;text-transform:uppercase;letter-spacing:.12em;color:var(--gray);font-weight:600;margin-bottom:32px;}\n.docskin .cover-meta .accent{color:var(--highlight);}\n.docskin .cover-title{font-family:var(--font-display);font-weight:700;font-size:clamp(40px,5.2vw,62px);line-height:1.08;letter-spacing:-.015em;color:var(--navy);margin:0 0 22px;}\n.docskin .cover-sub{font-size:19px;line-height:1.55;color:var(--slate);max-width:860px;margin:0 0 36px;}\n.docskin .section{padding:0;margin-bottom:64px;}\n.docskin .section > *:last-child{margin-bottom:0;}\n.docskin .section-num{font-size:11px;text-transform:uppercase;letter-spacing:.14em;color:var(--highlight);font-weight:700;margin-bottom:8px;}\n.docskin .section-head{margin-bottom:28px;padding-bottom:16px;border-bottom:2px solid var(--navy);}\n.docskin .section-head .section-title{border-bottom:0;padding-bottom:0;margin-bottom:14px;}\n.docskin .section-title{font-family:var(--font-display);font-weight:700;font-size:clamp(28px,3.6vw,40px);line-height:1.15;letter-spacing:-.01em;color:var(--navy);margin:0 0 14px;padding-bottom:12px;border-bottom:2px solid var(--navy);}\n.docskin .section-lede{font-size:15.5px;color:var(--slate);line-height:1.6;max-width:860px;margin:0;}\n.docskin .section-block{margin-bottom:64px;}\n.docskin .section-block:last-child{margin-bottom:0;}\n.docskin .diagram{margin:28px 0 36px;border:1px solid var(--rule);background:var(--white);padding:22px 26px 18px;border-radius:var(--radius);}\n.docskin .diagram-head{display:flex;flex-wrap:wrap;align-items:baseline;gap:10px;padding-bottom:12px;margin-bottom:16px;border-bottom:1px dashed var(--rule);}\n.docskin .diagram-tag{font-family:var(--font-mono);font-size:10px;font-weight:700;padding:3px 9px;background:var(--navy);color:var(--white);letter-spacing:.08em;text-transform:uppercase;}\n.docskin .diagram-tag.post{background:var(--navy);} .docskin .diagram-tag.get{background:var(--positive);} .docskin .diagram-tag.c4{background:var(--blue);}\n.docskin .diagram-title{font-family:var(--font-display);font-weight:700;font-size:16px;color:var(--charcoal);flex:1;}\n.docskin .diagram-fignum{font-size:10px;color:var(--gray);text-transform:uppercase;letter-spacing:.1em;font-weight:700;}\n.docskin .diagram-desc{font-size:13px;color:var(--slate);margin:0 0 12px;}\n.docskin .diagram svg{display:block;margin:0 auto;max-width:100%;height:auto;}\n/* sequence */\n.docskin .lane-head{fill:var(--navy);} .docskin .lane-head.ext{fill:var(--slate);}\n.docskin .lane-head-text{fill:var(--white);font-family:var(--font-body);font-size:12px;font-weight:700;text-anchor:middle;}\n.docskin .lane-head-sub{fill:var(--navy-tint);font-family:var(--font-mono);font-size:9px;text-anchor:middle;letter-spacing:.06em;}\n.docskin .lane-head-sub.ext{fill:#cbd5e1;}\n.docskin .lifeline{stroke:var(--gray);stroke-width:1;stroke-dasharray:3 3;}\n.docskin .activation{fill:var(--light-blue);stroke:var(--navy);stroke-width:1;} .docskin .activation.pg{fill:var(--positive-soft);stroke:var(--positive);}\n.docskin .msg-line{stroke:var(--charcoal);stroke-width:1.2;fill:none;}\n.docskin .msg-line.dashed{stroke-dasharray:5 3;} .docskin .msg-line.err{stroke:var(--negative);stroke-width:1.4;}\n.docskin .msg-text{fill:var(--charcoal);font-family:var(--font-mono);font-size:10.5px;}\n.docskin .msg-text.em{fill:var(--navy);font-weight:700;} .docskin .msg-text.err{fill:var(--negative);font-weight:700;} .docskin .msg-text.note{fill:var(--gray);font-style:italic;}\n.docskin .step-badge{fill:var(--navy);} .docskin .step-badge.err{fill:var(--negative);}\n.docskin .step-badge-text{fill:var(--white);font-family:var(--font-mono);font-size:10px;font-weight:700;text-anchor:middle;}\n.docskin .seq-steps{margin-top:16px;padding:14px 18px;background:var(--light-gray);border:1px solid var(--rule);}\n.docskin .seq-steps-title{font-size:10px;text-transform:uppercase;letter-spacing:.12em;color:var(--navy);font-weight:700;margin-bottom:8px;}\n.docskin .seq-steps ol{list-style:none;counter-reset:step;padding:0;margin:0;}\n.docskin .seq-steps li{counter-increment:step;padding:7px 0 8px 40px;position:relative;border-bottom:1px solid var(--rule);}\n.docskin .seq-steps li:last-child{border-bottom:none;}\n.docskin .seq-steps li::before{content:counter(step);position:absolute;left:0;top:7px;width:26px;height:20px;background:var(--navy);color:var(--white);font-family:var(--font-mono);font-size:11px;font-weight:700;text-align:center;line-height:20px;border-radius:2px;}\n.docskin .seq-steps li.err::before{background:var(--negative);}\n.docskin .step-actor{font-family:var(--font-mono);font-size:11px;font-weight:700;color:var(--navy);margin-right:8px;text-transform:uppercase;letter-spacing:.06em;}\n.docskin .step-actor.err{color:var(--negative);}\n.docskin .step-summary{font-size:13px;color:var(--charcoal);}\n/* c4 */\n.docskin .c4-name{font-family:var(--font-display);font-size:14px;font-weight:700;}\n.docskin .c4-tech{font-family:var(--font-mono);font-size:9.5px;}\n.docskin .c4-desc{font-family:var(--font-body);font-size:10px;}\n.docskin .c4-chip{font-family:var(--font-body);font-size:8px;font-weight:700;letter-spacing:.1em;text-transform:uppercase;}\n.docskin .edge-label{font-family:var(--font-body);font-size:9.5px;fill:var(--slate);text-anchor:middle;}\n.docskin .edge-label.err{fill:var(--negative);font-weight:700;}\n.docskin .c4-boundary{fill:none;stroke:var(--navy);stroke-width:1.4;stroke-dasharray:8 5;}\n.docskin .c4-boundary-label{font-family:var(--font-body);font-size:10px;font-weight:700;fill:var(--navy);letter-spacing:.08em;text-transform:uppercase;}\n.docskin .legend{display:flex;flex-wrap:wrap;gap:8px 16px;margin-top:14px;padding-top:12px;border-top:1px dashed var(--rule);}\n.docskin .legend .item{display:flex;align-items:center;gap:6px;font-size:11px;color:var(--slate);}\n.docskin .legend .sw{width:13px;height:13px;border-radius:3px;}\n/* code block */\n.docskin .code-block{margin:12px 0 16px;border:1px solid var(--rule);}\n.docskin .code-header{display:flex;justify-content:space-between;padding:6px 14px;background:var(--light-gray);font-family:var(--font-mono);font-size:11px;font-weight:700;color:var(--slate);border-bottom:1px solid var(--rule);letter-spacing:.04em;}\n.docskin .code-block pre{padding:14px 16px;font-family:var(--font-mono);font-size:12px;line-height:1.55;color:var(--charcoal);overflow-x:auto;background:var(--white);white-space:pre;margin:0;}\n.docskin .code-block .kw{color:var(--navy);font-weight:700;} .docskin .code-block .com{color:var(--gray);font-style:italic;}\n.docskin .code-block .str{color:var(--positive);} .docskin .code-block .num{color:var(--purple);} .docskin .code-block .fn{color:var(--blue);} .docskin .code-block .ty{color:var(--teal);}\n/* er */\n.docskin .er-head-text{fill:var(--white);font-family:var(--font-display);font-size:13px;font-weight:700;text-anchor:middle;}\n.docskin .er-col{font-family:var(--font-mono);font-size:10.5px;fill:var(--charcoal);} .docskin .er-col.dim{fill:var(--gray);}\n.docskin .er-key{font-family:var(--font-mono);font-size:9px;font-weight:700;fill:var(--navy);} .docskin .er-key.fk{fill:var(--highlight);}\n.docskin .er-rowline{stroke:var(--light-gray);stroke-width:1;}\n/* block / state / flow shared text */\n.docskin .blk-name{font-family:var(--font-display);font-size:13px;font-weight:700;}\n.docskin .blk-tech{font-family:var(--font-mono);font-size:9.5px;}\n.docskin .blk-chip{font-family:var(--font-body);font-size:8px;font-weight:700;letter-spacing:.1em;text-transform:uppercase;}\n.docskin .grp-label{font-family:var(--font-body);font-size:10px;font-weight:700;letter-spacing:.06em;text-transform:uppercase;}\n.docskin .sm-name{font-family:var(--font-display);font-size:13px;font-weight:700;text-anchor:middle;}\n.docskin .fc-label{font-family:var(--font-display);font-size:12px;font-weight:700;text-anchor:middle;}\n.docskin .endpoint-card{border:1px solid var(--rule);margin:16px 0;padding:18px 22px;background:var(--white);}\n.docskin .endpoint-header{display:flex;align-items:center;gap:12px;margin-bottom:10px;padding-bottom:10px;border-bottom:1px dashed var(--rule);}\n.docskin .endpoint-method{font-family:var(--font-mono);font-size:11px;font-weight:700;padding:4px 10px;color:var(--white);letter-spacing:.08em;text-transform:uppercase;}\n.docskin .endpoint-method.get{background:var(--positive);} .docskin .endpoint-method.post{background:var(--navy);} .docskin .endpoint-method.patch{background:var(--highlight);} .docskin .endpoint-method.delete{background:var(--negative);} .docskin .endpoint-method.put{background:var(--blue);}\n.docskin .endpoint-path{font-family:var(--font-mono);font-size:15px;font-weight:700;color:var(--charcoal);flex:1;}\n.docskin .endpoint-status{font-family:var(--font-mono);font-size:11.5px;color:var(--positive);font-weight:700;}\n.docskin .endpoint-desc{font-size:13px;color:var(--slate);margin:0 0 8px;}\n.docskin .endpoint-card h4{font-size:11px;text-transform:uppercase;letter-spacing:.12em;font-weight:700;color:var(--highlight);margin:14px 0 6px;}\n.docskin .endpoint-card ul{margin:0 0 0 20px;} .docskin .endpoint-card li{font-size:13px;margin-bottom:3px;}\n.docskin code{font-family:var(--font-mono);font-size:.86em;background:var(--light-gray);padding:2px 6px;border-radius:2px;border:1px solid var(--rule);}\n.docskin .transition-table{width:100%;border-collapse:collapse;margin:16px 0 8px;font-size:12px;}\n.docskin .transition-table thead{background:var(--navy);color:#fff;}\n.docskin .transition-table th{text-align:left;padding:8px 10px;font-size:9.5px;text-transform:uppercase;letter-spacing:.1em;}\n.docskin .transition-table td{padding:8px 10px;border-bottom:1px solid var(--rule);vertical-align:top;}\n.docskin .pill{display:inline-block;font-family:var(--font-mono);font-size:10px;font-weight:700;padding:2px 7px;border-radius:2px;text-transform:uppercase;}\n.docskin .pill-init{background:var(--light-gray);color:var(--slate);border:1px solid var(--rule);}\n.docskin .pill-active{background:var(--positive-soft);color:var(--positive);border:1px solid var(--positive);}\n.docskin .pill-wait{background:var(--highlight-soft);color:var(--highlight);border:1px solid var(--highlight);}\n.docskin .pill-end{background:var(--charcoal);color:#fff;}\n/* presentation: comparison table */\n.docskin .pres-table{width:100%;border-collapse:collapse;margin:14px 0;font-size:13px;}\n.docskin .pres-table thead{background:var(--navy);color:#fff;}\n.docskin .pres-table th{padding:9px 12px;text-align:left;font-family:var(--font-body);font-size:10.5px;text-transform:uppercase;letter-spacing:.08em;font-weight:700;}\n.docskin .pres-table th.r,.docskin .pres-table td.r{text-align:right;} .docskin .pres-table th.c,.docskin .pres-table td.c{text-align:center;}\n.docskin .pres-table th.hi{background:var(--highlight);}\n.docskin .pres-table td{padding:9px 12px;border-bottom:1px solid var(--rule);}\n.docskin .pres-table tbody tr:nth-child(even){background:var(--light-gray);}\n.docskin .pres-table td.lead{font-weight:700;color:var(--navy);font-family:var(--font-display);}\n.docskin .pres-table td.hi{background:var(--highlight-soft);}\n.docskin .cell-pos{color:var(--positive);font-weight:700;} .docskin .cell-neg{color:var(--negative);font-weight:700;} .docskin .cell-warn{color:var(--highlight);font-weight:700;} .docskin .cell-muted{color:var(--gray);}\n.docskin .badge{display:inline-flex;align-items:center;justify-content:center;width:20px;height:20px;border-radius:50%;font-size:12px;font-weight:700;}\n.docskin .badge.yes{background:var(--positive-soft);color:var(--positive);} .docskin .badge.no{background:var(--negative-soft);color:var(--negative);}\n.docskin .tbl-note{font-size:11px;color:var(--gray);font-style:italic;margin-top:6px;}\n/* presentation: stat cards */\n.docskin .stat-row{display:flex;flex-wrap:wrap;gap:14px;margin:16px 0;}\n.docskin .stat-card{flex:1 1 150px;border:1px solid var(--rule);border-top:3px solid var(--navy);padding:16px 18px;background:var(--white);}\n.docskin .stat-value{font-family:var(--font-display);font-size:30px;font-weight:700;color:var(--navy);line-height:1;}\n.docskin .stat-label{font-size:10.5px;text-transform:uppercase;letter-spacing:.1em;color:var(--gray);font-weight:700;margin-top:8px;}\n.docskin .stat-delta{font-family:var(--font-mono);font-size:12px;font-weight:700;margin-top:6px;}\n.docskin .stat-delta.up{color:var(--positive);} .docskin .stat-delta.down{color:var(--negative);} .docskin .stat-delta.flat{color:var(--gray);}\n/* presentation: timeline */\n.docskin .tl{position:relative;margin:18px 0;padding-left:8px;}\n.docskin .tl::before{content:\"\";position:absolute;left:9px;top:6px;bottom:6px;width:2px;background:var(--rule);}\n.docskin .tl-item{position:relative;padding:0 0 18px 30px;}\n.docskin .tl-item:last-child{padding-bottom:0;}\n.docskin .tl-dot{position:absolute;left:2px;top:2px;width:16px;height:16px;border-radius:50%;background:var(--white);border:3px solid var(--rule);box-sizing:border-box;}\n.docskin .tl-dot.done{background:var(--positive);border-color:var(--positive);} .docskin .tl-dot.current{background:var(--highlight);border-color:var(--highlight);} .docskin .tl-dot.next{border-color:var(--navy);}\n.docskin .tl-date{font-family:var(--font-mono);font-size:10.5px;font-weight:700;color:var(--highlight);text-transform:uppercase;letter-spacing:.06em;}\n.docskin .tl-label{font-family:var(--font-display);font-size:15px;font-weight:700;color:var(--navy);margin:1px 0 2px;}\n.docskin .tl-desc{font-size:12.5px;color:var(--slate);}\n/* presentation: quadrant */\n.docskin .quad-axis{stroke:var(--charcoal);stroke-width:1.5;}\n.docskin .quad-end{font-family:var(--font-body);font-size:10px;font-weight:700;fill:var(--gray);text-transform:uppercase;letter-spacing:.06em;}\n.docskin .quad-title{font-family:var(--font-body);font-size:11px;font-weight:700;fill:var(--navy);text-transform:uppercase;letter-spacing:.08em;}\n.docskin .quad-pt-label{font-family:var(--font-body);font-size:11px;font-weight:700;fill:var(--charcoal);}\n.docskin .toc{margin:18px 0 6px;padding:14px 20px;background:var(--light-gray);border:1px solid var(--rule);border-left:4px solid var(--highlight);}\n.docskin .toc-title{font-size:10px;text-transform:uppercase;letter-spacing:.12em;color:var(--navy);font-weight:700;margin-bottom:8px;}\n.docskin .toc ol{margin:0;padding-left:20px;} .docskin .toc li{font-size:13px;margin-bottom:4px;color:var(--slate);}\n.docskin .toc li span{color:var(--gray);font-family:var(--font-mono);font-size:11px;}\n/* swimlane */\n.docskin .sl-lane-label{font-family:var(--font-display);font-size:12px;font-weight:700;fill:#fff;}\n.docskin .sl-step{font-family:var(--font-body);font-size:11px;font-weight:700;text-anchor:middle;}\n/* callouts */\n.docskin .callout{border:1px solid var(--rule);border-left:4px solid var(--navy);padding:12px 16px;margin:10px 0;}\n.docskin .callout.note{border-left-color:var(--navy);background:var(--light-blue);} .docskin .callout.tip{border-left-color:var(--positive);background:var(--positive-soft);} .docskin .callout.warn{border-left-color:var(--highlight);background:var(--highlight-soft);} .docskin .callout.danger{border-left-color:var(--negative);background:var(--negative-soft);}\n.docskin .callout-title{font-size:10.5px;text-transform:uppercase;letter-spacing:.1em;font-weight:700;margin-bottom:4px;}\n.docskin .callout.note .callout-title{color:var(--navy);} .docskin .callout.tip .callout-title{color:var(--positive);} .docskin .callout.warn .callout-title{color:#b45309;} .docskin .callout.danger .callout-title{color:var(--negative);}\n.docskin .callout-body{font-size:13px;color:var(--slate);}\n/* prose */\n.docskin .prose h2{font-family:var(--font-display);font-weight:700;font-size:clamp(24px,3vw,32px);line-height:1.15;letter-spacing:-.015em;color:var(--navy);margin:40px 0 14px;padding-bottom:12px;border-bottom:2px solid var(--navy);}\n.docskin .prose h2:first-child{margin-top:0;}\n.docskin .prose h3{font-family:var(--font-display);font-weight:700;font-size:19px;letter-spacing:-.005em;color:var(--navy);margin:36px 0 12px;}\n.docskin .prose h4{font-size:11px;text-transform:uppercase;letter-spacing:.12em;font-weight:700;color:var(--highlight);margin:22px 0 8px;}\n.docskin .prose p{font-size:14px;color:var(--charcoal);margin:0 0 14px;line-height:1.6;max-width:880px;}\n.docskin .prose ul,.docskin .prose ol{margin:0 0 14px 22px;}\n.docskin .prose li{font-size:13.5px;color:var(--charcoal);margin-bottom:4px;max-width:880px;line-height:1.55;}\n.docskin .prose blockquote{border-left:3px solid var(--highlight);padding:4px 14px;margin:14px 0;color:var(--slate);font-style:italic;font-family:var(--font-display);}\n.docskin .prose code{font-family:var(--font-mono);font-size:.86em;background:var(--light-gray);padding:2px 6px;border-radius:2px;color:var(--charcoal);border:1px solid var(--rule);}\n.docskin .prose strong{font-weight:700;color:var(--charcoal);}\n.docskin .prose em{font-style:italic;}\n/* glossary */\n.docskin .glossary{margin:10px 0;}\n.docskin .glossary .row{display:grid;grid-template-columns:170px 1fr;gap:14px;padding:9px 0;border-bottom:1px solid var(--rule);}\n.docskin .glossary dt{font-family:var(--font-mono);font-size:13px;font-weight:700;color:var(--navy);}\n.docskin .glossary dd{margin:0;font-size:13px;color:var(--slate);}\n/* pros / cons */\n.docskin .pc{display:grid;grid-template-columns:1fr 1fr;gap:16px;margin:12px 0;}\n.docskin .pc-col{border:1px solid var(--rule);padding:14px 16px;}\n.docskin .pc-col.pro{border-top:3px solid var(--positive);} .docskin .pc-col.con{border-top:3px solid var(--negative);}\n.docskin .pc-head{font-size:11px;text-transform:uppercase;letter-spacing:.1em;font-weight:700;margin-bottom:8px;}\n.docskin .pc-col.pro .pc-head{color:var(--positive);} .docskin .pc-col.con .pc-head{color:var(--negative);}\n.docskin .pc-item{font-size:13px;color:var(--slate);padding:4px 0 4px 22px;position:relative;}\n.docskin .pc-item::before{position:absolute;left:0;top:4px;font-weight:700;}\n.docskin .pc-col.pro .pc-item::before{content:\"\\\\2713\";color:var(--positive);} .docskin .pc-col.con .pc-item::before{content:\"\\\\2717\";color:var(--negative);}\n/* current / target */\n.docskin .ct{display:flex;align-items:stretch;margin:12px 0;}\n.docskin .ct-panel{flex:1;border:1px solid var(--rule);padding:14px 18px;}\n.docskin .ct-panel.cur{background:var(--light-gray);} .docskin .ct-panel.tgt{border-top:3px solid var(--navy);}\n.docskin .ct-arrow{display:flex;align-items:center;padding:0 14px;color:var(--highlight);font-size:22px;font-weight:700;}\n.docskin .ct-label{font-size:11px;text-transform:uppercase;letter-spacing:.1em;font-weight:700;color:var(--gray);margin-bottom:8px;}\n.docskin .ct-panel.tgt .ct-label{color:var(--navy);}\n.docskin .ct-item{font-size:13px;color:var(--slate);padding:3px 0;}\n/* kanban */\n.docskin .kanban{display:flex;gap:14px;margin:12px 0;overflow-x:auto;}\n.docskin .kan-col{flex:1 1 0;min-width:150px;background:var(--light-gray);border:1px solid var(--rule);}\n.docskin .kan-head{background:var(--navy);color:#fff;font-size:11px;text-transform:uppercase;letter-spacing:.08em;font-weight:700;padding:8px 12px;}\n.docskin .kan-card{background:var(--white);border:1px solid var(--rule);border-left:3px solid var(--highlight);margin:8px;padding:9px 11px;}\n.docskin .kan-card-title{font-size:13px;font-weight:700;color:var(--charcoal);}\n.docskin .kan-card-tag{display:inline-block;font-family:var(--font-mono);font-size:9px;font-weight:700;text-transform:uppercase;letter-spacing:.06em;color:var(--gray);margin-top:4px;}\n/* pass 2 chart labels */\n.docskin .dfd-name{font-family:var(--font-display);font-size:12px;font-weight:700;text-anchor:middle;}\n.docskin .dfd-num{font-family:var(--font-mono);font-size:9px;font-weight:700;}\n.docskin .gantt-label{font-family:var(--font-body);font-size:11px;fill:var(--charcoal);}\n.docskin .gantt-head{font-family:var(--font-mono);font-size:9.5px;fill:var(--gray);text-anchor:middle;}\n.docskin .funnel-label{font-family:var(--font-display);font-size:13px;font-weight:700;fill:#fff;text-anchor:middle;}\n.docskin .funnel-val{font-family:var(--font-mono);font-size:11px;fill:#fff;text-anchor:middle;opacity:.9;}\n.docskin .pyr-label{font-family:var(--font-display);font-size:13px;font-weight:700;fill:#fff;text-anchor:middle;}\n.docskin .pyr-desc{font-family:var(--font-body);font-size:10px;fill:#fff;text-anchor:middle;opacity:.85;}\n/* indented tree */\n.docskin .tree-list{margin:10px 0;font-size:13px;}\n.docskin .tree-row{display:flex;align-items:baseline;padding:3px 0;}\n.docskin .tree-row .tw{color:var(--gray);margin-right:8px;font-family:var(--font-mono);font-size:11px;}\n.docskin .tree-row.branch .tw{color:var(--navy);}\n.docskin .tree-row .tlabel{color:var(--charcoal);font-family:var(--font-mono);}\n.docskin .tree-row.branch .tlabel{font-weight:700;color:var(--navy);}\n.docskin .tree-row .tnote{color:var(--gray);font-size:11px;margin-left:10px;font-family:var(--font-body);font-style:italic;}\n/* agenda */\n.docskin .agenda{margin:10px 0;}\n.docskin .agenda-row{display:grid;grid-template-columns:88px 1fr;gap:14px;padding:10px 0;border-bottom:1px solid var(--rule);}\n.docskin .agenda-time{font-family:var(--font-mono);font-size:12px;font-weight:700;color:var(--navy);}\n.docskin .agenda-dur{font-family:var(--font-mono);font-size:10px;color:var(--gray);margin-top:2px;}\n.docskin .agenda-title{font-family:var(--font-display);font-size:14px;font-weight:700;color:var(--charcoal);}\n.docskin .agenda-owner{font-size:10.5px;color:var(--highlight);font-weight:700;text-transform:uppercase;letter-spacing:.05em;margin-left:8px;}\n.docskin .agenda-desc{font-size:12.5px;color:var(--slate);margin-top:2px;}\n/* tracker */\n.docskin .trk{width:100%;border-collapse:collapse;margin:12px 0;font-size:13px;}\n.docskin .trk thead{background:var(--navy);color:#fff;} .docskin .trk th{padding:8px 10px;text-align:left;font-size:9.5px;text-transform:uppercase;letter-spacing:.08em;font-weight:700;}\n.docskin .trk td{padding:8px 10px;border-bottom:1px solid var(--rule);vertical-align:middle;}\n.docskin .trk tr.done .trk-task{text-decoration:line-through;color:var(--gray);}\n.docskin .st{display:inline-block;font-family:var(--font-mono);font-size:9.5px;font-weight:700;padding:2px 8px;border-radius:10px;text-transform:uppercase;letter-spacing:.04em;}\n.docskin .st.todo{background:var(--light-gray);color:var(--slate);border:1px solid var(--rule);} .docskin .st.doing{background:var(--highlight-soft);color:#b45309;} .docskin .st.done{background:var(--positive-soft);color:var(--positive);} .docskin .st.blocked{background:var(--negative-soft);color:var(--negative);}\n.docskin .pri{font-family:var(--font-mono);font-size:10px;font-weight:700;} .docskin .pri.high{color:var(--negative);} .docskin .pri.med{color:var(--highlight);} .docskin .pri.low{color:var(--gray);}\n/* cluster */\n.docskin .cl-head{font-family:var(--font-display);font-size:13px;font-weight:700;fill:#fff;}\n.docskin .cl-kind{font-family:var(--font-mono);font-size:9px;fill:#cfe0f3;text-anchor:end;text-transform:uppercase;letter-spacing:.06em;}\n/* user story */\n.docskin .story{border:1px solid var(--rule);border-left:4px solid var(--navy);padding:18px 22px;margin:12px 0;background:var(--white);}\n.docskin .story-stmt{font-family:var(--font-display);font-size:18px;line-height:1.55;color:var(--charcoal);}\n.docskin .story-stmt b{color:var(--navy);}\n.docskin .story-meta{display:flex;gap:8px;margin-top:12px;flex-wrap:wrap;}\n.docskin .story-chip{font-family:var(--font-mono);font-size:10px;font-weight:700;text-transform:uppercase;letter-spacing:.05em;padding:3px 9px;border-radius:3px;background:var(--light-gray);color:var(--slate);border:1px solid var(--rule);}\n.docskin .ac-title{font-size:10.5px;text-transform:uppercase;letter-spacing:.12em;color:var(--highlight);font-weight:700;margin:16px 0 8px;}\n.docskin .ac-item{border:1px solid var(--rule);padding:10px 14px;margin-bottom:8px;background:var(--white);}\n.docskin .gwt{display:grid;grid-template-columns:60px 1fr;gap:4px 12px;font-size:13px;}\n.docskin .gwt .k{font-family:var(--font-mono);font-size:10px;font-weight:700;text-transform:uppercase;letter-spacing:.06em;padding-top:1px;}\n.docskin .gwt .k.g{color:var(--positive);} .docskin .gwt .k.w{color:var(--navy);} .docskin .gwt .k.t{color:var(--highlight);}\n.docskin .gwt .v{color:var(--charcoal);}\n.docskin .links-row{display:flex;gap:8px;flex-wrap:wrap;}\n.docskin .link-chip{display:inline-flex;align-items:center;gap:6px;font-size:12px;font-weight:700;color:var(--navy);border:1px solid var(--navy);background:var(--white);padding:5px 11px;border-radius:20px;cursor:pointer;}\n.docskin .link-chip .lt{color:var(--gray);font-family:var(--font-mono);font-size:9px;text-transform:uppercase;letter-spacing:.06em;}\n.docskin .footer{margin-top:8px;padding:18px 32px 28px;border-top:2px solid var(--navy);font-size:11px;color:var(--gray);text-transform:uppercase;letter-spacing:.1em;font-weight:700;display:flex;justify-content:space-between;flex-wrap:wrap;gap:10px;}\n.docskin .footer .accent{color:var(--highlight);}\n.docskin .layer-label{font-family:var(--font-display);font-size:13px;font-weight:700;fill:#fff;}\n.docskin .uml-name{font-family:var(--font-display);font-size:13px;font-weight:700;text-anchor:middle;fill:#0a3a6e;}\n.docskin .uml-stereo{font-family:var(--font-body);font-size:9px;font-style:italic;text-anchor:middle;fill:#6b7280;}\n.docskin .uml-row{font-family:var(--font-mono);font-size:10.5px;fill:var(--charcoal);}\n.docskin .uml-sep{stroke:#0e54a1;stroke-width:1;}\n.docskin .ft-note{font-family:var(--font-mono);font-size:9px;}\n.docskin .tree-link{stroke:#9ca3af;stroke-width:1.3;fill:none;}\n/* wireframe / UI mockups */\n.docskin .wf-h{font-family:var(--font-display);font-size:18px;font-weight:700;}\n.docskin .wf-sub{font-family:var(--font-body);font-size:12px;font-weight:600;}\n.docskin .wf-btn{font-family:var(--font-body);font-size:11px;font-weight:700;fill:#fff;}\n.docskin .wf-ph-text{font-family:var(--font-body);font-size:10px;fill:var(--gray);}\n.docskin .wf-status{font-family:var(--font-mono);font-size:9px;fill:var(--charcoal);font-weight:700;}\n.docskin .wf-url{font-family:var(--font-mono);font-size:8.5px;fill:var(--gray);}\n.docskin .wf-tab{font-family:var(--font-body);font-size:8px;}\n.docskin .wf-caption{font-family:var(--font-mono);font-size:10px;fill:var(--gray);letter-spacing:.04em;}\n/* parse error */\n.docskin .err{font-family:var(--font-mono);font-size:12px;color:var(--negative);background:#fdf2f2;border:1px solid #f3c9c9;padding:8px 12px;margin:12px 0;white-space:pre-wrap;}`;\n","/**\n * HTML entity escaping, matching the reference renderer's `esc` semantics.\n *\n * Escapes `&`, `<`, `>`, and `\"`. `null`/`undefined` become the empty string.\n * Non-string values are coerced via `String()`.\n */\n\nconst REPL: Record<string, string> = {\n '&': '&',\n '<': '<',\n '>': '>',\n '\"': '"',\n};\n\n/**\n * Escapes a value for safe insertion into HTML text or attribute content.\n *\n * @param value - The value to escape (any type).\n * @returns The escaped string. Empty string for `null`/`undefined`.\n */\nexport function escapeHtml(value: unknown): string {\n if (value === null || value === undefined) return '';\n return String(value).replace(/[&<>\"]/g, (c) => REPL[c] ?? c);\n}\n","/**\n * Output-safety helpers.\n *\n * Avodado documents are normally authored by trusted hands, but rendered output\n * is also shown in untrusted contexts — the playground renders documents from\n * shared URLs, and any hosted preview renders whatever a visitor pastes. So the\n * renderer treats author-supplied values (colours, link hrefs, prose HTML) as\n * untrusted and neutralises anything that could break out of its target context.\n *\n * These functions are pure and allocation-light; they run on every render.\n */\n\n/**\n * Matches a safe CSS colour value: hex (`#rgb`/`#rgba`/`#rrggbb`/`#rrggbbaa`),\n * `rgb()/rgba()`, `hsl()/hsla()`, or a bare CSS named colour. Anything with a\n * quote, semicolon, angle bracket, or `url(` is rejected — those are the\n * shapes an attacker uses to break out of a `fill=\"…\"` or `style=\"…\"` context.\n */\nconst SAFE_COLOR_RE =\n /^(#[0-9a-fA-F]{3,8}|rgba?\\([\\d.,\\s%]+\\)|hsla?\\([\\d.,\\s%]+\\)|[a-zA-Z]{1,24})$/;\n\n/**\n * Returns `value` if it is a safe CSS colour, otherwise `fallback`.\n *\n * Use this for any author-supplied colour that gets interpolated into an SVG\n * attribute (`fill`, `stroke`) or a `style` declaration.\n *\n * @param value - The candidate colour (any author string, or undefined).\n * @param fallback - The colour to use when `value` is missing or unsafe.\n */\nexport function safeColor(value: string | undefined, fallback: string): string {\n if (value === undefined) return fallback;\n const trimmed = value.trim();\n return SAFE_COLOR_RE.test(trimmed) ? trimmed : fallback;\n}\n\n/** URL schemes that can execute script or smuggle markup. */\nconst DANGEROUS_URL_RE = /^\\s*(javascript|data|vbscript):/i;\n\n/**\n * Returns `url` if its scheme is safe to put in an `href`/`src`, otherwise `#`.\n *\n * Relative URLs, fragments (`#id`), and the usual web schemes pass through;\n * `javascript:`, `data:`, and `vbscript:` are rejected.\n *\n * @param url - The candidate URL.\n */\nexport function safeUrl(url: string): string {\n return DANGEROUS_URL_RE.test(url) ? '#' : url;\n}\n","/**\n * Renders a prose segment to HTML via `marked`.\n *\n * Hardened for untrusted input (the renderer's output is shown in the\n * playground and hosted previews, which render documents from strangers):\n *\n * - Raw HTML is **not** passed through — `marked` v14 emits raw HTML by\n * default, which is an XSS vector. We decline the block `html` and inline\n * `tag` tokenizers so any literal `<tag>` falls through to text and is\n * entity-escaped. This also matches Avodado's house rule: express structure\n * through blocks, never raw HTML.\n * - Link / image hrefs with `javascript:`, `data:`, or `vbscript:` schemes are\n * rewritten to `#` (see {@link safeUrl}).\n *\n * Output is deterministic (no auto heading ids, no smartypants).\n */\n\nimport { Marked, type Tokens } from 'marked';\nimport { safeUrl } from './sanitize.js';\n\nconst marked = new Marked({ gfm: true, breaks: false });\n\nmarked.use({\n tokenizer: {\n // Decline raw HTML at both block and inline level; the text falls through\n // to the paragraph/text tokenizer, which escapes it.\n html(): undefined {\n return undefined;\n },\n tag(): undefined {\n return undefined;\n },\n },\n renderer: {\n link(token: Tokens.Link): string {\n const href = safeUrl(token.href);\n const title = token.title !== null && token.title !== undefined ? ` title=\"${token.title}\"` : '';\n const text = this.parser.parseInline(token.tokens);\n return `<a href=\"${href}\"${title}>${text}</a>`;\n },\n image(token: Tokens.Image): string {\n const href = safeUrl(token.href);\n const title = token.title !== null && token.title !== undefined ? ` title=\"${token.title}\"` : '';\n return `<img src=\"${href}\" alt=\"${token.text}\"${title}>`;\n },\n },\n});\n\n/**\n * Renders Markdown prose to an HTML string wrapped in `<div class=\"prose\">`.\n *\n * @param text - The Markdown source.\n * @returns The HTML output, wrapped in a `prose` div for styling scope.\n */\nexport function renderProse(text: string): string {\n const html = marked.parse(text, { async: false });\n return `<div class=\"prose\">${html}</div>`;\n}\n","/**\n * Meta is rendered as the document cover (not as a body block). The registry\n * entry for `meta` returns an empty string; {@link renderCover} produces the\n * cover from the {@link Document.meta} data.\n *\n * Class names match doc-studio: `.cover-bar`, `.cover-pad`, `.cover-meta`,\n * `.cover-title`, `.cover-sub`.\n */\n\nimport type { MetaData } from '@avodado/core';\nimport { escapeHtml } from '../escape.js';\n\n/** Renders the document cover (banner + meta line + title + optional subtitle). */\nexport function renderCover(meta: MetaData | undefined): string {\n const title = meta?.title ?? 'Untitled';\n const tag = meta?.tag ?? '';\n const subtitle = meta?.subtitle;\n const sub =\n subtitle !== undefined ? `<p class=\"cover-sub\">${escapeHtml(subtitle)}</p>` : '';\n return (\n `<div class=\"cover-bar\"></div>` +\n `<div class=\"cover-pad\">` +\n `<div class=\"cover-meta\"><span>DOCUMENT</span><span class=\"accent\">${escapeHtml(tag)}</span></div>` +\n `<h1 class=\"cover-title\">${escapeHtml(title)}</h1>` +\n sub +\n `</div>`\n );\n}\n\n/**\n * Block-registry entry for `meta`. Always returns empty: the cover is rendered\n * separately by {@link renderCover}, called from {@link renderDocument}.\n */\nexport function renderMetaBlock(): string {\n return '';\n}\n","/**\n * Wraps block content in doc-studio's \"diagram frame\" — a bordered card with\n * a header (tag pill + title + figure number) and optional description.\n *\n * Used by diagram-type blocks (sequence, erd, …) so the output matches\n * doc-studio.jsx's `DiagramFrame` component.\n */\n\nimport type { BlockType } from '@avodado/core';\nimport { escapeHtml } from '../escape.js';\n\ninterface FrameOptions {\n /** Tag pill text (e.g. `SEQUENCE`, `ER`, `POST`). */\n readonly tag: string;\n /** Optional CSS class added to the tag pill (e.g. `post`, `get`). */\n readonly tagClass?: string;\n /** Optional inline background color for the tag pill (used when no class). */\n readonly tagBg?: string;\n /** Title shown next to the tag (often `data.title`). Plain text. */\n readonly title?: string;\n /** Pre-rendered HTML for the title — wins over `title` if provided. */\n readonly titleHtml?: string;\n /** Optional figure number (e.g. `FIG 1.1`). */\n readonly fignum?: string;\n /** Optional description shown under the header. */\n readonly desc?: string;\n /** Optional pre-rendered HTML rendered AFTER the inner content (e.g. footers). */\n readonly footerHtml?: string;\n}\n\n/** Wraps the given inner HTML in a `.diagram` card. */\nexport function diagramFrame(opts: FrameOptions, inner: string): string {\n const tagClass = opts.tagClass !== undefined ? ` ${opts.tagClass}` : '';\n const tagStyle =\n opts.tagBg !== undefined && opts.tagClass === undefined\n ? ` style=\"background:${opts.tagBg}\"`\n : '';\n const titleHtml =\n opts.titleHtml !== undefined\n ? `<span class=\"diagram-title\">${opts.titleHtml}</span>`\n : opts.title !== undefined && opts.title.length > 0\n ? `<span class=\"diagram-title\">${escapeHtml(opts.title)}</span>`\n : '';\n const fignumHtml =\n opts.fignum !== undefined && opts.fignum.length > 0\n ? `<span class=\"diagram-fignum\">${escapeHtml(opts.fignum)}</span>`\n : '';\n const descHtml =\n opts.desc !== undefined && opts.desc.length > 0\n ? `<p class=\"diagram-desc\">${escapeHtml(opts.desc)}</p>`\n : '';\n const footerHtml = opts.footerHtml ?? '';\n return (\n `<div class=\"diagram\">` +\n `<div class=\"diagram-head\">` +\n `<span class=\"diagram-tag${tagClass}\"${tagStyle}>${escapeHtml(opts.tag)}</span>` +\n titleHtml +\n fignumHtml +\n `</div>` +\n descHtml +\n inner +\n footerHtml +\n `</div>`\n );\n}\n\n/**\n * Per-block-type label shown in `SECTION NN · LABEL`.\n *\n * Typed as `Record<BlockType, string>` so adding a new block type without a\n * label is a compile error — the same exhaustiveness guarantee the block\n * registry gives the renderers.\n */\nexport const SECTION_LABEL: Record<BlockType, string> = {\n meta: '',\n callout: 'Note',\n table: 'Comparison',\n sequence: 'Sequence',\n erd: 'Entity model',\n userstory: 'User story',\n timeline: 'Roadmap',\n kanban: 'Board',\n tracker: 'Tracker',\n prose: 'Overview',\n glossary: 'Glossary',\n proscons: 'Trade-offs',\n cvt: 'Before / after',\n stats: 'Metrics',\n code: 'Code',\n agenda: 'Agenda',\n tree: 'Hierarchy',\n pyramid: 'Pyramid',\n funnel: 'Funnel',\n flow: 'Flowchart',\n state: 'State machine',\n dfd: 'Data flow',\n journey: 'Journey',\n gantt: 'Schedule',\n graph: 'Graph',\n quadrant: 'Matrix',\n swimlane: 'Process',\n c4: 'C4 model',\n uml: 'Class model',\n mece: 'Issue tree',\n frontend: 'Component tree',\n cluster: 'Cluster',\n block: 'Architecture',\n infra: 'Deployment',\n event: 'Events',\n ddd: 'Context map',\n network: 'Security zones',\n felogic: 'Frontend logic',\n belogic: 'Backend logic',\n dag: 'DAG',\n wireframe: 'Mockup',\n};\n","/**\n * Renders a callout block — a tonal side-bar with title + body.\n *\n * Doc-studio variant: `tone` (note/tip/warn/danger) instead of the original\n * `kind`. Defaults to `note` if omitted. Title defaults to the tone's label.\n */\n\nimport type { BlockDataMap } from '@avodado/core';\nimport { escapeHtml } from '../escape.js';\n\ntype Tone = 'note' | 'tip' | 'warn' | 'danger';\n\nconst DEFAULT_TITLE: Record<Tone, string> = {\n note: 'Note',\n tip: 'Tip',\n warn: 'Warning',\n danger: 'Danger',\n};\n\nexport function renderCallout(data: BlockDataMap['callout']): string {\n const tone: Tone = data.tone ?? 'note';\n const title = data.title ?? DEFAULT_TITLE[tone];\n const body = data.body ?? '';\n return (\n `<div class=\"callout ${tone}\">` +\n `<div class=\"callout-title\">${escapeHtml(title)}</div>` +\n `<div class=\"callout-body\">${escapeHtml(body)}</div>` +\n `</div>`\n );\n}\n","/**\n * Renders an entity-relationship diagram as inline SVG.\n *\n * Doc-studio variant: column flags are booleans (`pk`, `fk`) rather than the\n * string enum `key: 'PK'|'FK'`. Relations may carry `label` and a cardinality\n * marker `card: '1:1'|'1:N'|'N:M'` (rendered as a centered chip).\n */\n\nimport type { BlockDataMap } from '@avodado/core';\nimport { escapeHtml } from '../escape.js';\nimport { diagramFrame } from './frame.js';\n\ntype ErdData = BlockDataMap['erd'];\ntype ErdEntity = NonNullable<ErdData['entities']>[number];\ntype ErdColumn = NonNullable<ErdEntity['columns']>[number];\n\ninterface EntityBox {\n readonly name: string;\n readonly columns: readonly ErdColumn[];\n readonly x: number;\n readonly y: number;\n readonly w: number;\n readonly h: number;\n}\n\nexport function renderErd(data: BlockDataMap['erd']): string {\n const ents = data.entities ?? [];\n const rels = data.relations ?? [];\n\n const colW = 200;\n const rowH = 22;\n const headH = 30;\n const gapX = 80;\n const top = 14;\n const pad = 16;\n\n let x = pad;\n let maxH = 0;\n const boxes: EntityBox[] = ents.map((e) => {\n const cols = e.columns ?? [];\n const h = headH + cols.length * rowH + 10;\n const box: EntityBox = { name: e.name, columns: cols, x, y: top, w: colW, h };\n x += colW + gapX;\n if (h > maxH) maxH = h;\n return box;\n });\n\n const W = pad * 2 + ents.length * colW + Math.max(0, ents.length - 1) * gapX;\n const H = top + maxH + 24;\n\n const byName = new Map<string, EntityBox>();\n for (const b of boxes) byName.set(b.name, b);\n\n let s =\n `<svg viewBox=\"0 0 ${W} ${H}\" role=\"img\">` +\n `<title>Entity-relationship diagram</title>`;\n\n // Vertical centre of a column's row (or the box's header area if idx < 0).\n const rowCenterY = (box: EntityBox, idx: number): number =>\n idx < 0 ? box.y + 24 : box.y + headH + 16 + idx * rowH - 4;\n\n // Relations (drawn first so boxes sit on top). Each connects the foreign-key\n // column in `from` to the primary-key column in `to`, with the arrowhead\n // pointing into the PK (FK → PK).\n for (const r of rels) {\n const a = byName.get(r.from);\n const b = byName.get(r.to);\n if (!a || !b) continue;\n\n const fkIdx = pickFkIndex(a.columns, r.to);\n const pkIdx = b.columns.findIndex((c) => c.pk === true);\n const y1 = rowCenterY(a, fkIdx);\n const y2 = rowCenterY(b, pkIdx);\n\n // Exit/enter on the sides that face each other.\n const aLeftOfB = a.x + a.w / 2 <= b.x + b.w / 2;\n const x1 = aLeftOfB ? a.x + a.w : a.x;\n const x2 = aLeftOfB ? b.x : b.x + b.w;\n const mx = (x1 + x2) / 2;\n const dir = aLeftOfB ? 1 : -1; // arrowhead points toward `to`\n\n s +=\n `<path d=\"M${x1},${y1} H${mx} V${y2} H${x2}\" fill=\"none\" stroke=\"var(--gray)\" stroke-width=\"1.5\"/>` +\n // small dot marks the FK origin\n `<circle cx=\"${x1}\" cy=\"${y1}\" r=\"2.6\" fill=\"var(--gray)\"/>` +\n // arrowhead into the PK\n `<path d=\"M${x2 - 9 * dir},${y2 - 6} L${x2},${y2} L${x2 - 9 * dir},${y2 + 6}\" fill=\"none\" stroke=\"var(--navy)\" stroke-width=\"1.6\" stroke-linejoin=\"round\"/>`;\n\n if (r.card !== undefined) {\n const w = 30;\n const cy = (y1 + y2) / 2;\n s +=\n `<rect x=\"${mx - w / 2}\" y=\"${cy - 9}\" width=\"${w}\" height=\"18\" rx=\"9\" fill=\"var(--white)\" stroke=\"var(--rule)\"/>` +\n `<text x=\"${mx}\" y=\"${cy + 3}\" class=\"edge-label\">${escapeHtml(r.card)}</text>`;\n }\n }\n\n // Entity boxes\n for (const b of boxes) {\n s +=\n `<rect x=\"${b.x}\" y=\"${b.y}\" width=\"${b.w}\" height=\"${b.h}\" rx=\"4\" fill=\"var(--white)\" stroke=\"var(--navy)\"/>` +\n `<rect x=\"${b.x}\" y=\"${b.y}\" width=\"${b.w}\" height=\"${headH}\" rx=\"4\" fill=\"var(--navy)\"/>` +\n `<rect x=\"${b.x}\" y=\"${b.y + headH - 4}\" width=\"${b.w}\" height=\"4\" fill=\"var(--navy)\"/>` +\n `<text x=\"${b.x + b.w / 2}\" y=\"${b.y + 20}\" class=\"er-head-text\">${escapeHtml(b.name)}</text>`;\n b.columns.forEach((f, j) => {\n const fy = b.y + headH + 16 + j * rowH;\n const nameX = f.pk === true || f.fk === true ? b.x + 38 : b.x + 12;\n if (j > 0) {\n s += `<line x1=\"${b.x}\" y1=\"${fy - 14}\" x2=\"${b.x + b.w}\" y2=\"${fy - 14}\" class=\"er-rowline\"/>`;\n }\n if (f.pk === true) {\n s += `<text x=\"${b.x + 12}\" y=\"${fy}\" class=\"er-key\">PK</text>`;\n } else if (f.fk === true) {\n s += `<text x=\"${b.x + 12}\" y=\"${fy}\" class=\"er-key fk\">FK</text>`;\n }\n s +=\n `<text x=\"${nameX}\" y=\"${fy}\" class=\"er-col\">${escapeHtml(f.name)}</text>` +\n `<text x=\"${b.x + b.w - 12}\" y=\"${fy}\" class=\"er-col dim\" text-anchor=\"end\">${escapeHtml(f.type ?? '')}</text>`;\n });\n }\n\n s += `</svg>`;\n\n const opts: Parameters<typeof diagramFrame>[0] = {\n tag: 'ER',\n tagBg: '#6b21a8',\n ...(data.title !== undefined ? { title: data.title } : {}),\n ...(data.description !== undefined ? { desc: data.description } : {}),\n };\n return diagramFrame(opts, s);\n}\n\n/**\n * Picks which foreign-key column in `columns` a relation to `toName` originates\n * from. Prefers an FK whose name references the target entity (e.g. `user_id`\n * for a relation to `User`/`Users`); otherwise the first FK column; -1 if none.\n */\nfunction pickFkIndex(columns: readonly ErdColumn[], toName: string): number {\n const fks = columns.map((c, i) => ({ c, i })).filter((x) => x.c.fk === true);\n const first = fks[0];\n if (first === undefined) return -1;\n const t = toName.toLowerCase();\n const singular = t.replace(/s$/, '');\n const match = fks.find((x) => {\n const n = x.c.name.toLowerCase();\n return n.includes(t) || n.includes(singular);\n });\n return (match ?? first).i;\n}\n","/**\n * Renders a kanban block. Doc-studio variant uses `columns: [{label, cards:\n * [{title, tag?}]}]` — flexible number of columns with structured cards.\n */\n\nimport type { BlockDataMap } from '@avodado/core';\nimport { escapeHtml } from '../escape.js';\n\nexport function renderKanban(data: BlockDataMap['kanban']): string {\n const cols = data.columns ?? [];\n let h = `<div class=\"kanban\">`;\n for (const col of cols) {\n const cards = (col.cards ?? [])\n .map((c) => {\n const tag =\n c.tag !== undefined\n ? `<div class=\"kan-card-tag\">${escapeHtml(c.tag)}</div>`\n : '';\n return (\n `<div class=\"kan-card\">` +\n `<div class=\"kan-card-title\">${escapeHtml(c.title)}</div>` +\n tag +\n `</div>`\n );\n })\n .join('');\n h +=\n `<div class=\"kan-col\">` +\n `<div class=\"kan-head\">${escapeHtml(col.label)}</div>` +\n cards +\n `</div>`;\n }\n return h + `</div>`;\n}\n","/**\n * Renders a sequence diagram as inline SVG, plus an optional step-by-step\n * list below the SVG and an optional diagram footer with metadata pills.\n *\n * Matches the layout of `resources/sample-orders-api.html` (the canonical\n * \"rich\" rendering).\n *\n * Actors are objects (`{id, name, sub?, external?}`); messages reference\n * actors by `id`. Message `kind`:\n * - `sync` — solid arrow, bold navy label (default)\n * - `response` / `async` — dashed arrow, normal label\n * - `error` — red arrow, red bold label, step list item gets `.err`\n * - `note` — no arrow, italic gray label, badge on the from-actor's lane\n */\n\nimport type { BlockDataMap } from '@avodado/core';\nimport { escapeHtml } from '../escape.js';\nimport { diagramFrame } from './frame.js';\n\ntype MsgKind = 'sync' | 'response' | 'async' | 'error' | 'note';\n\ninterface KindStyle {\n readonly cls: string;\n readonly marker: 'sqArrow' | 'sqOpen' | 'sqErr' | null;\n readonly txt: string;\n}\n\nconst KIND: Record<MsgKind, KindStyle> = {\n sync: { cls: 'msg-line', marker: 'sqArrow', txt: 'msg-text em' },\n response: { cls: 'msg-line dashed', marker: 'sqOpen', txt: 'msg-text' },\n async: { cls: 'msg-line dashed', marker: 'sqOpen', txt: 'msg-text' },\n error: { cls: 'msg-line err', marker: 'sqErr', txt: 'msg-text err' },\n note: { cls: '', marker: null, txt: 'msg-text note' },\n};\n\nconst DB_PATTERN = /postgres|sql|\\bdb\\b|database|store/i;\n\nfunction renderStepList(\n rows: ReadonlyArray<{ kind: MsgKind; from: string; to: string; summary?: string; code?: string; note?: string }>,\n actorById: Map<string, { name: string }>,\n): string {\n const items = rows.filter((r) => r.summary !== undefined && r.summary.length > 0);\n if (items.length === 0) return '';\n\n const lis = items\n .map((r) => {\n const errCls = r.kind === 'error' ? ' class=\"err\"' : '';\n const actorErrCls = r.kind === 'error' ? ' err' : '';\n const fromName = actorById.get(r.from)?.name ?? r.from;\n const toName = r.kind === 'note' ? '' : ` → ${escapeHtml(actorById.get(r.to)?.name ?? r.to)}`;\n const actorLabel = `${escapeHtml(fromName)}${toName}`;\n const code =\n r.code !== undefined && r.code.length > 0\n ? `<pre class=\"sql\">${escapeHtml(r.code)}</pre>`\n : '';\n const note =\n r.note !== undefined && r.note.length > 0\n ? `<span class=\"step-note\">${escapeHtml(r.note)}</span>`\n : '';\n return (\n `<li${errCls}>` +\n `<span class=\"step-actor${actorErrCls}\">${actorLabel}</span>` +\n `<span class=\"step-summary\">${escapeHtml(r.summary ?? '')}</span>` +\n code +\n note +\n `</li>`\n );\n })\n .join('');\n\n return (\n `<div class=\"seq-steps\">` +\n `<div class=\"seq-steps-title\">Step-by-step</div>` +\n `<ol>${lis}</ol>` +\n `</div>`\n );\n}\n\nfunction renderFoot(foot: NonNullable<BlockDataMap['sequence']['foot']>): string {\n if (foot.length === 0) return '';\n const parts = foot\n .map((f) => `<span><strong>${escapeHtml(f.label)}:</strong> ${escapeHtml(f.value)}</span>`)\n .join('');\n return `<div class=\"diagram-foot\">${parts}</div>`;\n}\n\nexport function renderSequence(data: BlockDataMap['sequence']): string {\n const actors = data.actors ?? [];\n const messages = data.messages ?? [];\n const N = Math.max(actors.length, 1);\n const leftPad = 24;\n const laneW = 168;\n const gap = 58;\n const headY = 16;\n const headH = 42;\n const cx = (i: number): number => leftPad + laneW / 2 + i * (laneW + gap);\n const width = leftPad * 2 + N * laneW + (N - 1) * gap;\n const idx = (id: string): number => actors.findIndex((a) => a.id === id);\n const msgStartY = 92;\n const step = 42;\n\n type Row = {\n n: number;\n y: number;\n fromI: number;\n toI: number;\n kind: MsgKind;\n label: string;\n from: string;\n to: string;\n summary?: string;\n code?: string;\n note?: string;\n };\n const rows: Row[] = messages.map((m, k): Row => {\n const base: Row = {\n n: k + 1,\n y: msgStartY + k * step,\n fromI: idx(m.from),\n toI: idx(m.to),\n kind: (m.kind ?? 'sync') as MsgKind,\n label: m.label ?? '',\n from: m.from,\n to: m.to,\n };\n if (m.summary !== undefined) base.summary = m.summary;\n if (m.code !== undefined) base.code = m.code;\n if (m.note !== undefined) base.note = m.note;\n return base;\n });\n const bottom = msgStartY + messages.length * step + 12;\n const height = bottom + 6;\n\n const activations = actors.map((a, i) => {\n if (i === 0) return null;\n const ys = rows.filter((r) => r.fromI === i || r.toI === i).map((r) => r.y);\n if (ys.length === 0) return null;\n const db = DB_PATTERN.test(`${a.name} ${a.sub ?? ''}`);\n return { i, y1: Math.min(...ys) - 8, y2: Math.max(...ys) + 8, db };\n });\n\n let s =\n `<svg viewBox=\"0 0 ${width} ${height}\" role=\"img\">` +\n `<title>Sequence diagram</title>` +\n `<defs>` +\n `<marker id=\"sqArrow\" viewBox=\"0 0 10 10\" refX=\"8\" refY=\"5\" markerWidth=\"6\" markerHeight=\"6\" orient=\"auto-start-reverse\">` +\n `<path d=\"M0,0 L10,5 L0,10 z\" fill=\"#1a1a2e\"/></marker>` +\n `<marker id=\"sqOpen\" viewBox=\"0 0 10 10\" refX=\"8\" refY=\"5\" markerWidth=\"6\" markerHeight=\"6\" orient=\"auto-start-reverse\">` +\n `<path d=\"M0,0 L10,5 L0,10\" fill=\"none\" stroke=\"#1a1a2e\" stroke-width=\"1.2\"/></marker>` +\n `<marker id=\"sqErr\" viewBox=\"0 0 10 10\" refX=\"8\" refY=\"5\" markerWidth=\"6\" markerHeight=\"6\" orient=\"auto-start-reverse\">` +\n `<path d=\"M0,0 L10,5 L0,10 z\" fill=\"#991b1b\"/></marker>` +\n `</defs>`;\n\n for (let i = 0; i < actors.length; i++) {\n const x = cx(i);\n s += `<line x1=\"${x}\" y1=\"${headY + headH}\" x2=\"${x}\" y2=\"${bottom}\" class=\"lifeline\"/>`;\n }\n\n for (const ac of activations) {\n if (!ac) continue;\n s += `<rect x=\"${cx(ac.i) - 4}\" y=\"${ac.y1}\" width=\"8\" height=\"${ac.y2 - ac.y1}\" class=\"activation${ac.db ? ' pg' : ''}\"/>`;\n }\n\n actors.forEach((a, i) => {\n const extCls = a.external === true ? ' ext' : '';\n const sub =\n a.sub !== undefined\n ? `<text x=\"${cx(i)}\" y=\"${headY + 36}\" class=\"lane-head-sub${extCls}\">${escapeHtml(a.sub)}</text>`\n : '';\n s +=\n `<g>` +\n `<rect x=\"${cx(i) - laneW / 2}\" y=\"${headY}\" width=\"${laneW}\" height=\"${headH}\" class=\"lane-head${extCls}\"/>` +\n `<text x=\"${cx(i)}\" y=\"${headY + 22}\" class=\"lane-head-text\">${escapeHtml(a.name)}</text>` +\n sub +\n `</g>`;\n });\n\n for (const r of rows) {\n const k = KIND[r.kind];\n\n // `note` kind — just a numbered annotation at the from-actor's lane\n if (r.kind === 'note' || r.toI < 0) {\n if (r.fromI < 0) continue;\n const x = cx(r.fromI);\n s +=\n `<g>` +\n `<circle cx=\"${x + 18}\" cy=\"${r.y - 10}\" r=\"10\" class=\"step-badge\"/>` +\n `<text x=\"${x + 18}\" y=\"${r.y - 6.5}\" class=\"step-badge-text\">${r.n}</text>` +\n `<text x=\"${x + 34}\" y=\"${r.y - 6}\" class=\"msg-text note\">${escapeHtml(r.label)}</text>` +\n `</g>`;\n continue;\n }\n // self-message — loop back to the same lane\n if (r.fromI === r.toI) {\n const x = cx(r.fromI);\n const errCls = r.kind === 'error' ? ' err' : '';\n s +=\n `<g>` +\n `<circle cx=\"${x + 18}\" cy=\"${r.y - 10}\" r=\"10\" class=\"step-badge${errCls}\"/>` +\n `<text x=\"${x + 18}\" y=\"${r.y - 6.5}\" class=\"step-badge-text\">${r.n}</text>` +\n `<text x=\"${x + 34}\" y=\"${r.y - 6}\" class=\"msg-text note\">${escapeHtml(r.label)}</text>` +\n `</g>`;\n continue;\n }\n\n const x1 = cx(r.fromI);\n const x2 = cx(r.toI);\n const ltr = x2 > x1;\n const end = x2 + (ltr ? -3 : 3);\n const errBadge = r.kind === 'error' ? ' err' : '';\n // Badge sits just inside the from-lane on the side facing the target.\n const badgeX = ltr ? x1 + 18 : x1 - 18;\n // Label anchors next to the badge (start-aligned LTR, end-aligned RTL).\n // Matches the sample's `<text x=\"badgeX+18\" ... >` / `<text x=\"badgeX-18\" ... text-anchor=\"end\">` layout.\n const labelX = ltr ? badgeX + 16 : badgeX - 16;\n const labelAnchor = ltr ? 'start' : 'end';\n const markerAttr = k.marker !== null ? ` marker-end=\"url(#${k.marker})\"` : '';\n s +=\n `<line x1=\"${x1}\" y1=\"${r.y}\" x2=\"${end}\" y2=\"${r.y}\" class=\"${k.cls}\"${markerAttr}/>` +\n `<circle cx=\"${badgeX}\" cy=\"${r.y - 10}\" r=\"10\" class=\"step-badge${errBadge}\"/>` +\n `<text x=\"${badgeX}\" y=\"${r.y - 6.5}\" class=\"step-badge-text\">${r.n}</text>` +\n `<text x=\"${labelX}\" y=\"${r.y - 6}\" class=\"${k.txt}\" text-anchor=\"${labelAnchor}\">${escapeHtml(r.label)}</text>`;\n }\n\n s += `</svg>`;\n\n const actorById = new Map<string, { name: string }>();\n for (const a of actors) actorById.set(a.id, { name: a.name });\n const stepList = renderStepList(rows, actorById);\n const footHtml = data.foot !== undefined ? renderFoot(data.foot) : '';\n\n // Tag + title\n const method = data.endpoint?.method.toLowerCase();\n const tag = data.endpoint?.method ?? 'FLOW';\n const titleHtml = (() => {\n if (data.endpoint?.path !== undefined) {\n const t = data.title !== undefined ? ` — ${escapeHtml(data.title)}` : '';\n return `<code>${escapeHtml(data.endpoint.path)}</code>${t}`;\n }\n return data.title !== undefined ? escapeHtml(data.title) : '';\n })();\n\n const frameOpts: Parameters<typeof diagramFrame>[0] = {\n tag,\n ...(method !== undefined ? { tagClass: method } : { tagBg: '#374151' }),\n ...(titleHtml.length > 0 ? { titleHtml } : {}),\n ...(data.description !== undefined ? { desc: data.description } : {}),\n ...(footHtml.length > 0 ? { footerHtml: footHtml } : {}),\n };\n\n return diagramFrame(frameOpts, s + stepList);\n}\n","/**\n * Renders a table block. Doc-studio variant supports:\n * - Column objects with `align` ('l'|'c'|'r') and `highlight`\n * - Cell objects with `tone` ('pos'|'neg'|'warn'|'muted'), `lead`, `highlight`\n * - Optional `title`, `description`, `note`\n *\n * Plain string columns / cells still work.\n */\n\nimport type { BlockDataMap } from '@avodado/core';\nimport { escapeHtml } from '../escape.js';\n\ntype TableData = BlockDataMap['table'];\ntype Col = NonNullable<TableData['columns']>[number];\ntype Cell = NonNullable<NonNullable<TableData['rows']>[number]>[number];\n\nfunction colClass(c: Col): string {\n if (typeof c === 'string') return '';\n const parts: string[] = [];\n if (c.align === 'r') parts.push('r');\n if (c.align === 'c') parts.push('c');\n if (c.highlight === true) parts.push('hi');\n return parts.join(' ');\n}\n\nfunction colLabel(c: Col): string {\n return typeof c === 'string' ? c : c.label;\n}\n\nfunction cellClass(c: Cell): string {\n if (typeof c === 'string' || typeof c === 'number') return '';\n const parts: string[] = [];\n if (c.tone) parts.push(`cell-${c.tone}`);\n if (c.lead === true) parts.push('lead');\n if (c.highlight === true) parts.push('hi');\n return parts.join(' ');\n}\n\nfunction cellValue(c: Cell): string {\n if (typeof c === 'string' || typeof c === 'number') return escapeHtml(c);\n return escapeHtml(c.v);\n}\n\nexport function renderTable(data: BlockDataMap['table']): string {\n const cols = data.columns ?? [];\n const rows = data.rows ?? [];\n const head = cols\n .map((c) => {\n const cls = colClass(c);\n return `<th${cls ? ` class=\"${cls}\"` : ''}>${escapeHtml(colLabel(c))}</th>`;\n })\n .join('');\n const body = rows\n .map((r) => {\n const cells = (r ?? [])\n .map((c, i) => {\n const col = cols[i];\n const cls = [col !== undefined ? colClass(col) : '', cellClass(c)]\n .filter(Boolean)\n .join(' ');\n return `<td${cls ? ` class=\"${cls}\"` : ''}>${cellValue(c)}</td>`;\n })\n .join('');\n return `<tr>${cells}</tr>`;\n })\n .join('');\n const note =\n data.note !== undefined ? `<p class=\"tbl-note\">${escapeHtml(data.note)}</p>` : '';\n return `<table class=\"pres-table\"><thead><tr>${head}</tr></thead><tbody>${body}</tbody></table>${note}`;\n}\n","/**\n * Renders a timeline block. Doc-studio variant uses `label` (not `title`),\n * `date` (not `when`), `desc` (not `detail`), and status enum\n * `done | current | next | future` (where `current` is the in-flight item).\n */\n\nimport type { BlockDataMap } from '@avodado/core';\nimport { escapeHtml } from '../escape.js';\n\nexport function renderTimeline(data: BlockDataMap['timeline']): string {\n const items = data.items ?? [];\n let h = `<div class=\"tl\">`;\n for (const it of items) {\n const st = it.status ?? 'future';\n const date =\n it.date !== undefined ? `<div class=\"tl-date\">${escapeHtml(it.date)}</div>` : '';\n const desc =\n it.desc !== undefined ? `<div class=\"tl-desc\">${escapeHtml(it.desc)}</div>` : '';\n h +=\n `<div class=\"tl-item\">` +\n `<span class=\"tl-dot ${st}\"></span>` +\n date +\n `<div class=\"tl-label\">${escapeHtml(it.label)}</div>` +\n desc +\n `</div>`;\n }\n return h + `</div>`;\n}\n","/**\n * Renders a tracker block — task table with status pills, optional priority,\n * owner, and due date columns.\n *\n * Doc-studio extras: optional `owner` (rendered as a column) and `due` (also\n * a column). Done rows get a strikethrough via `.trk tr.done .trk-task`.\n */\n\nimport type { BlockDataMap } from '@avodado/core';\nimport { escapeHtml } from '../escape.js';\n\nexport function renderTracker(data: BlockDataMap['tracker']): string {\n const items = data.items ?? [];\n const hasOwner = items.some((i) => i.owner !== undefined);\n const hasDue = items.some((i) => i.due !== undefined);\n\n const headCells = ['<th>Task</th>', '<th>Status</th>', '<th>Priority</th>'];\n if (hasOwner) headCells.push('<th>Owner</th>');\n if (hasDue) headCells.push('<th>Due</th>');\n\n let h = `<table class=\"trk\"><thead><tr>${headCells.join('')}</tr></thead><tbody>`;\n for (const it of items) {\n const st = it.status ?? 'todo';\n const pr = it.priority;\n const prCell =\n pr !== undefined ? `<span class=\"pri ${pr}\">${escapeHtml(pr)}</span>` : '';\n const rowCls = st === 'done' ? ' class=\"done\"' : '';\n const cells = [\n `<td class=\"trk-task\">${escapeHtml(it.task)}</td>`,\n `<td><span class=\"st ${st}\">${escapeHtml(st)}</span></td>`,\n `<td>${prCell}</td>`,\n ];\n if (hasOwner) cells.push(`<td>${escapeHtml(it.owner ?? '')}</td>`);\n if (hasDue) cells.push(`<td>${escapeHtml(it.due ?? '')}</td>`);\n h += `<tr${rowCls}>${cells.join('')}</tr>`;\n }\n return h + `</tbody></table>`;\n}\n","/**\n * Renders a userstory block — story statement, optional meta chips, optional\n * acceptance-criteria list, and optional related-links chips.\n *\n * Matches doc-studio's `.story` shell (`.story-stmt`, `.story-meta`,\n * `.story-chip`, `.ac-title`, `.ac-item`, `.gwt`, `.link-chip`).\n */\n\nimport type { BlockDataMap } from '@avodado/core';\nimport { escapeHtml } from '../escape.js';\n\nexport function renderUserStory(data: BlockDataMap['userstory']): string {\n const role = data.role ?? 'user';\n const want = data.want ?? '…';\n const soThat = data.soThat ?? '…';\n\n const chips: string[] = [];\n if (data.priority !== undefined)\n chips.push(`<span class=\"story-chip\">Priority · ${escapeHtml(data.priority)}</span>`);\n if (data.points !== undefined && data.points !== null)\n chips.push(`<span class=\"story-chip\">${escapeHtml(data.points)} pts</span>`);\n\n let h =\n `<div class=\"story\">` +\n `<div class=\"story-stmt\">As a <b>${escapeHtml(role)}</b>, I want to <b>${escapeHtml(want)}</b>, so that <b>${escapeHtml(soThat)}</b>.</div>`;\n if (chips.length > 0) {\n h += `<div class=\"story-meta\">${chips.join('')}</div>`;\n }\n h += `</div>`;\n\n const crit = data.criteria ?? [];\n if (crit.length > 0) {\n h += `<div class=\"ac-title\">Acceptance criteria</div>`;\n for (const c of crit) {\n h +=\n `<div class=\"ac-item\"><div class=\"gwt\">` +\n `<span class=\"k g\">Given</span><span class=\"v\">${escapeHtml(c.given ?? '')}</span>` +\n `<span class=\"k w\">When</span><span class=\"v\">${escapeHtml(c.when ?? '')}</span>` +\n `<span class=\"k t\">Then</span><span class=\"v\">${escapeHtml(c.then ?? '')}</span>` +\n `</div></div>`;\n }\n }\n\n const links = data.links ?? [];\n if (links.length > 0) {\n h += `<div class=\"ac-title\">Related</div><div class=\"links-row\">`;\n for (const l of links) {\n h +=\n `<span class=\"link-chip\">` +\n `<span class=\"lt\">${escapeHtml(l.mode ?? '')}</span>` +\n `${escapeHtml(l.label ?? '')}` +\n `</span>`;\n }\n h += `</div>`;\n }\n\n return h;\n}\n","/**\n * Renders a structured `prose` block — a sequence of typed sub-blocks\n * (heading, paragraph, ul, ol, quote). Useful when the author wants explicit\n * structure instead of raw markdown.\n *\n * Ported from doc-studio.jsx `Prose`.\n */\n\nimport type { BlockDataMap } from '@avodado/core';\nimport { escapeHtml } from '../escape.js';\n\nexport function renderProseBlock(data: BlockDataMap['prose']): string {\n const blocks = data.blocks ?? [];\n const html = blocks\n .map((b) => {\n const t = (b.type ?? 'p').toLowerCase();\n const text = b.text ?? '';\n if (t === 'h') return `<h3>${escapeHtml(text)}</h3>`;\n if (t === 'quote') return `<blockquote>${escapeHtml(text)}</blockquote>`;\n if (t === 'ul') {\n const items = (b.items ?? []).map((x) => `<li>${escapeHtml(x)}</li>`).join('');\n return `<ul>${items}</ul>`;\n }\n if (t === 'ol') {\n const items = (b.items ?? []).map((x) => `<li>${escapeHtml(x)}</li>`).join('');\n return `<ol>${items}</ol>`;\n }\n return `<p>${escapeHtml(text)}</p>`;\n })\n .join('');\n return `<div class=\"prose\">${html}</div>`;\n}\n","/**\n * Renders a glossary block — a list of term/definition rows.\n *\n * Ported from doc-studio.jsx `Glossary`.\n */\n\nimport type { BlockDataMap } from '@avodado/core';\nimport { escapeHtml } from '../escape.js';\n\nexport function renderGlossary(data: BlockDataMap['glossary']): string {\n const terms = data.terms ?? [];\n const rows = terms\n .map(\n (t) =>\n `<div class=\"row\"><dt>${escapeHtml(t.term)}</dt><dd>${escapeHtml(t.def)}</dd></div>`,\n )\n .join('');\n return `<div class=\"glossary\">${rows}</div>`;\n}\n","/**\n * Renders a pros-vs-cons block — two columns of bullet items with\n * positive / negative styling.\n *\n * Ported from doc-studio.jsx `ProsCons`.\n */\n\nimport type { BlockDataMap } from '@avodado/core';\nimport { escapeHtml } from '../escape.js';\n\nexport function renderProsCons(data: BlockDataMap['proscons']): string {\n const prosLabel = data.prosLabel ?? 'Pros';\n const consLabel = data.consLabel ?? 'Cons';\n const pros = (data.pros ?? []).map((p) => `<div class=\"pc-item\">${escapeHtml(p)}</div>`).join('');\n const cons = (data.cons ?? []).map((c) => `<div class=\"pc-item\">${escapeHtml(c)}</div>`).join('');\n return (\n `<div class=\"pc\">` +\n `<div class=\"pc-col pro\">` +\n `<div class=\"pc-head\">${escapeHtml(prosLabel)}</div>` +\n pros +\n `</div>` +\n `<div class=\"pc-col con\">` +\n `<div class=\"pc-head\">${escapeHtml(consLabel)}</div>` +\n cons +\n `</div>` +\n `</div>`\n );\n}\n","/**\n * Renders a current-vs-target block — two side-by-side panels separated by an\n * arrow, optionally captioned.\n *\n * Ported from doc-studio.jsx `CurrentTarget`.\n */\n\nimport type { BlockDataMap } from '@avodado/core';\nimport { escapeHtml } from '../escape.js';\n\nexport function renderCvt(data: BlockDataMap['cvt']): string {\n const cur = data.current ?? {};\n const tgt = data.target ?? {};\n const curItems = (cur.items ?? [])\n .map((x) => `<div class=\"ct-item\">${escapeHtml(x)}</div>`)\n .join('');\n const tgtItems = (tgt.items ?? [])\n .map((x) => `<div class=\"ct-item\">${escapeHtml(x)}</div>`)\n .join('');\n const curLabel = cur.label ?? 'Current';\n const tgtLabel = tgt.label ?? 'Target';\n const note =\n data.note !== undefined ? `<div class=\"tbl-note\">${escapeHtml(data.note)}</div>` : '';\n return (\n `<div>` +\n `<div class=\"ct\">` +\n `<div class=\"ct-panel cur\">` +\n `<div class=\"ct-label\">${escapeHtml(curLabel)}</div>` +\n curItems +\n `</div>` +\n `<div class=\"ct-arrow\">→</div>` +\n `<div class=\"ct-panel tgt\">` +\n `<div class=\"ct-label\">${escapeHtml(tgtLabel)}</div>` +\n tgtItems +\n `</div>` +\n `</div>` +\n note +\n `</div>`\n );\n}\n","/**\n * Renders a row of KPI / stat cards with optional delta + trend arrow.\n *\n * Ported from doc-studio.jsx `StatCards`.\n */\n\nimport type { BlockDataMap } from '@avodado/core';\nimport { escapeHtml } from '../escape.js';\nimport { safeColor } from '../sanitize.js';\n\nconst TREND_GLYPH = { up: '▲', down: '▼', flat: '—' } as const;\n\nexport function renderStats(data: BlockDataMap['stats']): string {\n const stats = data.stats ?? [];\n const cards = stats\n .map((s) => {\n const accent =\n s.accent !== undefined\n ? ` style=\"border-top-color:${safeColor(s.accent, '#0e54a1')}\"`\n : '';\n const delta =\n s.delta !== undefined\n ? `<div class=\"stat-delta ${s.trend ?? 'flat'}\">${TREND_GLYPH[s.trend ?? 'flat']} ${escapeHtml(s.delta)}</div>`\n : '';\n return (\n `<div class=\"stat-card\"${accent}>` +\n `<div class=\"stat-value\">${escapeHtml(s.value)}</div>` +\n `<div class=\"stat-label\">${escapeHtml(s.label)}</div>` +\n delta +\n `</div>`\n );\n })\n .join('');\n return `<div class=\"stat-row\">${cards}</div>`;\n}\n","/**\n * Tiny multi-language syntax highlighter — emits HTML spans (`.kw`, `.str`,\n * `.num`, `.fn`, `.ty`, `.com`) wrapped around recognized tokens.\n *\n * Ported from `resources/doc-studio.jsx` `highlightCode`. Designed for the\n * `code` block and the SQL snippets in `seq-steps`. Not a full lexer — just\n * enough to make a snippet readable.\n */\n\nimport { escapeHtml } from './escape.js';\n\nconst KW = new Set(\n (\n 'const let var function return if else for while do switch case break continue ' +\n 'class extends new await async import from export default try catch finally throw ' +\n 'typeof instanceof void delete yield static public private protected readonly ' +\n 'abstract implements interface type enum namespace def elif lambda pass with raise ' +\n 'except none true false and or not is in self nil func struct map range defer chan ' +\n 'select fallthrough echo fi done local require module package this super ' +\n 'create table alter add drop select insert update delete into values where join ' +\n 'group order by limit primary key foreign references not null default unique index ' +\n 'on check constraint cascade returning begin commit rollback'\n ).split(/\\s+/),\n);\n\nconst TY = new Set(\n (\n 'string number boolean int integer float double bool char byte long short void ' +\n 'object any unknown never bigint promise array list set optional uuid text varchar ' +\n 'timestamptz timestamp date numeric decimal jsonb json serial bigserial smallint'\n ).split(/\\s+/),\n);\n\nconst TOKEN_RE =\n /(\\/\\*[\\s\\S]*?\\*\\/|\\/\\/[^\\n]*|#[^\\n]*)|(\"(?:\\\\.|[^\"\\\\])*\"|'(?:\\\\.|[^'\\\\])*'|`(?:\\\\.|[^`\\\\])*`)|(\\b\\d[\\w.]*)|([A-Za-z_$][\\w$]*)/g;\n\n/**\n * Highlights a code snippet, returning HTML-safe string.\n *\n * @param code - Source code (any language). HTML-escaped before token wrapping.\n */\nexport function highlightCode(code: string): string {\n if (code.length === 0) return '';\n const src = String(code);\n let out = '';\n let last = 0;\n TOKEN_RE.lastIndex = 0;\n let m: RegExpExecArray | null;\n while ((m = TOKEN_RE.exec(src)) !== null) {\n if (m.index > last) out += escapeHtml(src.slice(last, m.index));\n const t = m[0];\n if (m[1] !== undefined) {\n out += `<span class=\"com\">${escapeHtml(t)}</span>`;\n } else if (m[2] !== undefined) {\n out += `<span class=\"str\">${escapeHtml(t)}</span>`;\n } else if (m[3] !== undefined) {\n out += `<span class=\"num\">${escapeHtml(t)}</span>`;\n } else {\n const lt = t.toLowerCase();\n if (KW.has(lt)) out += `<span class=\"kw\">${escapeHtml(t)}</span>`;\n else if (TY.has(lt)) out += `<span class=\"ty\">${escapeHtml(t)}</span>`;\n else if (src[TOKEN_RE.lastIndex] === '(')\n out += `<span class=\"fn\">${escapeHtml(t)}</span>`;\n else out += escapeHtml(t);\n }\n last = TOKEN_RE.lastIndex;\n }\n if (last < src.length) out += escapeHtml(src.slice(last));\n return out;\n}\n","/**\n * Renders one or more code blocks, each with a header (filename / language)\n * and a syntax-highlighted body.\n *\n * Ported from doc-studio.jsx `CodeBlock` (iterated for multiple snippets).\n */\n\nimport type { BlockDataMap } from '@avodado/core';\nimport { escapeHtml } from '../escape.js';\nimport { highlightCode } from '../highlight.js';\n\nexport function renderCode(data: BlockDataMap['code']): string {\n const blocks = data.blocks ?? [];\n return blocks\n .map(\n (b) =>\n `<div class=\"code-block\">` +\n `<div class=\"code-header\">` +\n `<span>${escapeHtml(b.title ?? '')}</span>` +\n `<span>${escapeHtml(b.lang ?? '')}</span>` +\n `</div>` +\n `<pre>${highlightCode(b.code)}</pre>` +\n `</div>`,\n )\n .join('');\n}\n","/**\n * Renders a meeting / event agenda — rows of `(time + duration)` paired with\n * `(title + owner + desc)`.\n *\n * Ported from doc-studio.jsx `Agenda`.\n */\n\nimport type { BlockDataMap } from '@avodado/core';\nimport { escapeHtml } from '../escape.js';\n\nexport function renderAgenda(data: BlockDataMap['agenda']): string {\n const items = data.items ?? [];\n const rows = items\n .map((it) => {\n const dur =\n it.duration !== undefined\n ? `<div class=\"agenda-dur\">${escapeHtml(it.duration)}</div>`\n : '';\n const owner =\n it.owner !== undefined\n ? `<span class=\"agenda-owner\">${escapeHtml(it.owner)}</span>`\n : '';\n const desc =\n it.desc !== undefined ? `<div class=\"agenda-desc\">${escapeHtml(it.desc)}</div>` : '';\n const time =\n it.time !== undefined ? `<div class=\"agenda-time\">${escapeHtml(it.time)}</div>` : '';\n return (\n `<div class=\"agenda-row\">` +\n `<div>${time}${dur}</div>` +\n `<div>` +\n `<div class=\"agenda-title\">${escapeHtml(it.title)}${owner}</div>` +\n desc +\n `</div>` +\n `</div>`\n );\n })\n .join('');\n return `<div class=\"agenda\">${rows}</div>`;\n}\n","/**\n * Renders an indented hierarchy of nodes, like a folder tree.\n *\n * Nodes are linked via `parent` id. Roots are nodes without a `parent` (or\n * whose parent id is unknown). Children are indented based on depth.\n *\n * Ported from doc-studio.jsx `Tree`.\n */\n\nimport type { BlockDataMap } from '@avodado/core';\nimport { escapeHtml } from '../escape.js';\n\ntype Node = NonNullable<BlockDataMap['tree']['nodes']>[number];\n\nexport function renderTree(data: BlockDataMap['tree']): string {\n const nodes = data.nodes ?? [];\n const byId = new Map<string, Node>();\n const children = new Map<string, string[]>();\n for (const n of nodes) {\n byId.set(n.id, n);\n children.set(n.id, []);\n }\n const roots: string[] = [];\n for (const n of nodes) {\n if (n.parent !== undefined && byId.has(n.parent)) {\n children.get(n.parent)?.push(n.id);\n } else {\n roots.push(n.id);\n }\n }\n\n type Out = { node: Node; depth: number; branch: boolean };\n const out: Out[] = [];\n const seen = new Set<string>();\n const walk = (id: string, depth: number): void => {\n if (seen.has(id)) return;\n seen.add(id);\n const node = byId.get(id);\n if (node === undefined) return;\n const kids = children.get(id) ?? [];\n out.push({ node, depth, branch: kids.length > 0 });\n for (const c of kids) walk(c, depth + 1);\n };\n for (const r of roots) walk(r, 0);\n\n const rows = out\n .map((row) => {\n const branchCls = row.branch ? ' branch' : '';\n const glyph = row.branch ? '▸' : '—';\n const note =\n row.node.note !== undefined\n ? `<span class=\"tnote\">${escapeHtml(row.node.note)}</span>`\n : '';\n return (\n `<div class=\"tree-row${branchCls}\" style=\"padding-left:${row.depth * 22}px\">` +\n `<span class=\"tw\">${glyph}</span>` +\n `<span class=\"tlabel\">${escapeHtml(row.node.label)}</span>` +\n note +\n `</div>`\n );\n })\n .join('');\n return `<div class=\"tree-list\">${rows}</div>`;\n}\n","/**\n * Renders a pyramid diagram (top → bottom widening trapezoids).\n *\n * Ported from doc-studio.jsx `Pyramid`. Uses the shared CHART_COLORS palette.\n */\n\nimport type { BlockDataMap } from '@avodado/core';\nimport { escapeHtml } from '../escape.js';\n\nconst CHART_COLORS = ['#0e54a1', '#1a6dbe', '#0f766e', '#1f9747', '#6b21a8', '#f7952c'];\n\nexport function renderPyramid(data: BlockDataMap['pyramid']): string {\n const levels = data.levels ?? [];\n const n = Math.max(levels.length, 1);\n const W = 520;\n const top = 16;\n const rowH = Math.min(72, Math.floor(280 / n));\n const gap = 4;\n const apex = W / 2;\n const pad = 16;\n const maxW = 430;\n const H = top + n * (rowH + gap) + pad;\n\n const polygons = levels\n .map((L, i) => {\n const y = top + i * (rowH + gap);\n const wTop = maxW * (i / n);\n const wBot = maxW * ((i + 1) / n);\n const fill = CHART_COLORS[i % CHART_COLORS.length] ?? '#0e54a1';\n const desc =\n L.desc !== undefined\n ? `<text x=\"${apex}\" y=\"${y + rowH / 2 + 14}\" class=\"pyr-desc\">${escapeHtml(L.desc)}</text>`\n : '';\n return (\n `<g>` +\n `<polygon points=\"${apex - wTop / 2},${y} ${apex + wTop / 2},${y} ${apex + wBot / 2},${y + rowH} ${apex - wBot / 2},${y + rowH}\" fill=\"${fill}\"/>` +\n `<text x=\"${apex}\" y=\"${y + rowH / 2 - 1}\" class=\"pyr-label\">${escapeHtml(L.label)}</text>` +\n desc +\n `</g>`\n );\n })\n .join('');\n\n return `<svg viewBox=\"0 0 ${W} ${H}\" role=\"img\"><title>Pyramid</title>${polygons}</svg>`;\n}\n","/**\n * Renders a funnel chart — stacked trapezoids that narrow from top to bottom\n * with absolute values and computed conversion percentages.\n *\n * Ported from doc-studio.jsx `Funnel`.\n */\n\nimport type { BlockDataMap } from '@avodado/core';\nimport { escapeHtml } from '../escape.js';\n\nconst CHART_COLORS = ['#0e54a1', '#1a6dbe', '#0f766e', '#1f9747', '#6b21a8', '#f7952c'];\n\nfunction toNum(v: string | number): number {\n if (typeof v === 'number') return v;\n const n = parseFloat(v.replace(/[, _]/g, ''));\n return Number.isFinite(n) ? n : 0;\n}\n\nfunction fmt(v: string | number): string {\n return typeof v === 'number' ? v.toLocaleString() : v;\n}\n\nexport function renderFunnel(data: BlockDataMap['funnel']): string {\n const stages = (data.stages ?? []).filter(Boolean);\n const W = 560;\n const top = 14;\n const rowH = 62;\n const maxW = 420;\n const pad = 14;\n const cx = W / 2;\n const H = top + stages.length * rowH + pad;\n\n const vals = stages.map((s) => toNum(s.value));\n const first = vals[0] ?? 0;\n const max = Math.max(1, ...vals);\n const wOf = (v: number): number => Math.max(78, maxW * (v / max));\n\n const groups = stages\n .map((s, i) => {\n const v = vals[i] ?? 0;\n const vNext = i < stages.length - 1 ? (vals[i + 1] ?? 0) : v * 0.82;\n const wTop = wOf(v);\n const wBot = wOf(vNext);\n const y = top + i * rowH;\n const fill = CHART_COLORS[i % CHART_COLORS.length] ?? '#0e54a1';\n const pct = first > 0 ? Math.round((v / first) * 100) : 0;\n const sub = i > 0 && first > 0 ? ` · ${pct}%` : '';\n return (\n `<g>` +\n `<polygon points=\"${cx - wTop / 2},${y} ${cx + wTop / 2},${y} ${cx + wBot / 2},${y + rowH} ${cx - wBot / 2},${y + rowH}\" fill=\"${fill}\" stroke=\"#fff\" stroke-width=\"2\"/>` +\n `<text x=\"${cx}\" y=\"${y + rowH / 2 - 3}\" class=\"funnel-label\">${escapeHtml(s.label)}</text>` +\n `<text x=\"${cx}\" y=\"${y + rowH / 2 + 15}\" class=\"funnel-val\">${escapeHtml(fmt(s.value))}${sub}</text>` +\n `</g>`\n );\n })\n .join('');\n\n return `<svg viewBox=\"0 0 ${W} ${H}\" role=\"img\"><title>Funnel</title>${groups}</svg>`;\n}\n","/**\n * Manhattan / orthogonal edge routing between two rectangular nodes.\n *\n * Returns the SVG path `d` attribute and a midpoint for label placement.\n * The route turns at the midpoint along the dominant axis, so edges read\n * cleanly even when the source and target overlap on one axis.\n *\n * Ported from `resources/doc-studio.jsx` `ortho`.\n */\n\n/** A rectangular node bounding box (top-left + size). */\nexport interface Box {\n readonly x: number;\n readonly y: number;\n readonly w: number;\n readonly h: number;\n}\n\n/** Routed edge: SVG `d` plus a midpoint for the edge label. */\nexport interface Route {\n readonly d: string;\n readonly lx: number;\n readonly ly: number;\n}\n\n/**\n * Routes an orthogonal edge from box A to box B.\n *\n * @param A - Source box.\n * @param B - Target box.\n * @returns SVG path data and label midpoint.\n */\nexport function ortho(A: Box, B: Box): Route {\n const a = { x: A.x + A.w / 2, y: A.y + A.h / 2 };\n const b = { x: B.x + B.w / 2, y: B.y + B.h / 2 };\n const dx = b.x - a.x;\n const dy = b.y - a.y;\n if (Math.abs(dx) >= Math.abs(dy)) {\n const sx = dx >= 0 ? A.x + A.w : A.x;\n const ex = dx >= 0 ? B.x : B.x + B.w;\n const sy = a.y;\n const ey = b.y;\n const mx = (sx + ex) / 2;\n return { d: `M ${sx} ${sy} H ${mx} V ${ey} H ${ex}`, lx: mx, ly: (sy + ey) / 2 };\n }\n const sy = dy >= 0 ? A.y + A.h : A.y;\n const ey = dy >= 0 ? B.y : B.y + B.h;\n const sx = a.x;\n const ex = b.x;\n const my = (sy + ey) / 2;\n return { d: `M ${sx} ${sy} V ${my} H ${ex} V ${ey}`, lx: (sx + ex) / 2, ly: my };\n}\n","/**\n * Wraps text to fit within an approximate character-per-line budget, capping\n * the total number of lines. Word-aware (won't break mid-word).\n *\n * Used by diagram renderers for fixed-size labels. Ported from\n * `resources/doc-studio.jsx` `wrapText`.\n */\n\n/**\n * @param text - Source text (any value is coerced via `String(...)`).\n * @param max - Approximate maximum characters per line.\n * @param maxLines - Maximum number of lines to return (later lines dropped).\n * @returns An array of wrapped lines; empty array for empty input.\n */\nexport function wrapText(text: unknown, max: number, maxLines: number): string[] {\n if (text === undefined || text === null || text === '') return [];\n const words = String(text).split(/\\s+/);\n const lines: string[] = [];\n let cur = '';\n for (const w of words) {\n if (!cur) {\n cur = w;\n continue;\n }\n if ((cur + ' ' + w).length <= max) {\n cur += ' ' + w;\n } else {\n lines.push(cur);\n cur = w;\n if (lines.length === maxLines) break;\n }\n }\n if (cur && lines.length < maxLines) lines.push(cur);\n return lines.slice(0, maxLines);\n}\n","/**\n * Renders an SVG edge label as a small rounded pill, sized to the label text.\n *\n * Returned as an SVG `<g>` fragment so it can be appended inside an enclosing\n * `<svg>`. Returns the empty string if `label` is falsy.\n *\n * Ported from `resources/doc-studio.jsx` `EdgePill`.\n */\n\nimport { escapeHtml } from '../escape.js';\n\n/** Pill placement (midpoint of the labelled edge). */\nexport interface PillPoint {\n readonly lx: number;\n readonly ly: number;\n}\n\n/**\n * @param p - Midpoint of the edge (typically from {@link ortho}).\n * @param label - Label text. Empty/undefined yields an empty string.\n * @param err - If true, the label is rendered in the error style.\n */\nexport function edgePill(p: PillPoint, label: string | undefined, err = false): string {\n if (label === undefined || label === '') return '';\n const w = Math.max(26, label.length * 5.4);\n const errClass = err ? ' err' : '';\n return (\n `<g>` +\n `<rect x=\"${p.lx - w / 2}\" y=\"${p.ly - 9}\" width=\"${w}\" height=\"18\" rx=\"9\" fill=\"#fff\" stroke=\"#d1d5db\"/>` +\n `<text x=\"${p.lx}\" y=\"${p.ly + 3}\" class=\"edge-label${errClass}\">${escapeHtml(label)}</text>` +\n `</g>`\n );\n}\n","/**\n * Renders a flowchart — decision diamonds, stadium start/end nodes, rectangles\n * for processes, with orthogonal edges and error-coloured paths.\n *\n * Ported from doc-studio.jsx `Flowchart` + `flowStyle`.\n */\n\nimport type { BlockDataMap } from '@avodado/core';\nimport { escapeHtml } from '../escape.js';\nimport { ortho } from '../svg/ortho.js';\nimport { wrapText } from '../svg/wrapText.js';\nimport { edgePill } from '../svg/edgePill.js';\nimport { diagramFrame } from './frame.js';\n\ntype Kind = 'start' | 'end' | 'decision' | 'process';\ninterface Style {\n shape: 'rect' | 'diamond' | 'stadium';\n fill: string;\n stroke: string;\n text: string;\n}\nfunction flowStyle(kind: Kind | undefined): Style {\n switch (kind ?? 'process') {\n case 'start':\n return { shape: 'stadium', fill: '#dcf1e2', stroke: '#1f9747', text: '#0f3d22' };\n case 'end':\n return { shape: 'stadium', fill: '#1a1a2e', stroke: '#1a1a2e', text: '#fff' };\n case 'decision':\n return { shape: 'diamond', fill: '#fde7cd', stroke: '#f7952c', text: '#7a3d00' };\n default:\n return { shape: 'rect', fill: '#e5eff8', stroke: '#0e54a1', text: '#0a3a6e' };\n }\n}\n\nconst ERR_LABEL_RE = /^(no|fail|error|reject)/i;\n\ninterface FlowFrameOpts {\n readonly tag: string;\n readonly tagBg?: string;\n}\n\n/** Generates the inner SVG (no diagram frame) — shared by `flow` and `dag`. */\nexport function renderFlowSvg(data: BlockDataMap['flow']): string {\n const nodes = data.nodes ?? [];\n const edges = data.edges ?? [];\n const cellW = 176;\n const cellH = 70;\n const gapX = 60;\n const gapY = 56;\n const padX = 26;\n const padTop = 26;\n const padBot = 22;\n const cols = Math.max(1, ...nodes.map((n) => n.col + ((n.w ?? 1) - 1)));\n const rows = Math.max(1, ...nodes.map((n) => n.row));\n const xOf = (c: number): number => padX + (c - 1) * (cellW + gapX);\n const yOf = (r: number): number => padTop + (r - 1) * (cellH + gapY);\n const rectFor = (n: { col: number; row: number; w?: number | undefined }): {\n x: number;\n y: number;\n w: number;\n h: number;\n } => ({\n x: xOf(n.col),\n y: yOf(n.row),\n w: (n.w ?? 1) * cellW + ((n.w ?? 1) - 1) * gapX,\n h: cellH,\n });\n const byId = new Map(nodes.map((n) => [n.id, n]));\n const width = padX * 2 + cols * cellW + (cols - 1) * gapX;\n const height = padTop + rows * cellH + (rows - 1) * gapY + padBot;\n\n let s = `<svg viewBox=\"0 0 ${width} ${height}\" role=\"img\"><title>Flowchart</title>`;\n\n for (const e of edges) {\n const A = byId.get(e.from);\n const B = byId.get(e.to);\n if (!A || !B) continue;\n const p = ortho(rectFor(A), rectFor(B));\n const isErr = e.kind === 'error' || ERR_LABEL_RE.test(e.label ?? '');\n const stroke = isErr ? '#991b1b' : '#1a1a2e';\n const marker = isErr ? 'gErr' : 'gArrow';\n const sw = isErr ? 1.6 : 1.4;\n s +=\n `<g><path d=\"${p.d}\" fill=\"none\" stroke=\"${stroke}\" stroke-width=\"${sw}\" marker-end=\"url(#${marker})\"/>` +\n edgePill(p, e.label, isErr) +\n `</g>`;\n }\n\n for (const n of nodes) {\n const r = rectFor(n);\n const st = flowStyle(n.kind);\n const cx = r.x + r.w / 2;\n const cy = r.y + r.h / 2;\n let shape: string;\n if (st.shape === 'diamond') {\n shape = `<polygon points=\"${cx},${r.y} ${r.x + r.w},${cy} ${cx},${r.y + r.h} ${r.x},${cy}\" fill=\"${st.fill}\" stroke=\"${st.stroke}\" stroke-width=\"1.5\"/>`;\n } else if (st.shape === 'stadium') {\n shape = `<rect x=\"${r.x}\" y=\"${r.y}\" width=\"${r.w}\" height=\"${r.h}\" rx=\"${r.h / 2}\" fill=\"${st.fill}\" stroke=\"${st.stroke}\" stroke-width=\"1.5\"/>`;\n } else {\n shape = `<rect x=\"${r.x}\" y=\"${r.y}\" width=\"${r.w}\" height=\"${r.h}\" rx=\"7\" fill=\"${st.fill}\" stroke=\"${st.stroke}\" stroke-width=\"1.4\"/>`;\n }\n const lines = wrapText(n.label, 22, 2);\n const texts = lines\n .map(\n (ln, j) =>\n `<text x=\"${cx}\" y=\"${cy + 4 - (lines.length - 1) * 7 + j * 14}\" class=\"fc-label\" fill=\"${st.text}\">${escapeHtml(ln)}</text>`,\n )\n .join('');\n s += `<g filter=\"url(#gshadow)\">${shape}${texts}</g>`;\n }\n\n s += `</svg>`;\n return s;\n}\n\nfunction renderFlowFrame(data: BlockDataMap['flow'], frame: FlowFrameOpts): string {\n return diagramFrame(\n {\n tag: frame.tag,\n ...(frame.tagBg !== undefined ? { tagBg: frame.tagBg } : {}),\n ...(data.title !== undefined ? { title: data.title } : {}),\n ...(data.description !== undefined ? { desc: data.description } : {}),\n },\n renderFlowSvg(data),\n );\n}\n\n/** `flow` — decision flow with slate `FLOW` tag. */\nexport function renderFlow(data: BlockDataMap['flow']): string {\n return renderFlowFrame(data, { tag: 'FLOW', tagBg: '#374151' });\n}\n/** `dag` — same shape, navy `DAG` tag (pipeline / directed-acyclic graph). */\nexport function renderDag(data: BlockDataMap['dag']): string {\n return renderFlowFrame(data as BlockDataMap['flow'], { tag: 'DAG', tagBg: '#0e54a1' });\n}\n","/**\n * Renders a state machine: rounded state pills + start/terminal markers + an\n * orthogonal-routed edge per transition, plus a transition table below.\n *\n * Ported from doc-studio.jsx `StateMachine` + `TransitionTable`.\n */\n\nimport type { BlockDataMap } from '@avodado/core';\nimport { escapeHtml } from '../escape.js';\nimport { ortho } from '../svg/ortho.js';\nimport { edgePill } from '../svg/edgePill.js';\nimport { diagramFrame } from './frame.js';\n\ntype StateNode = NonNullable<BlockDataMap['state']['states']>[number];\n\nfunction rectFor(s: StateNode, cellW: number, cellH: number, gapX: number, gapY: number, padX: number, padTop: number): {\n x: number;\n y: number;\n w: number;\n h: number;\n cx: number;\n cy: number;\n} {\n const cx = padX + (s.col - 1) * (cellW + gapX) + cellW / 2;\n const cy = padTop + (s.row - 1) * (cellH + gapY) + cellH / 2;\n if (s.kind === 'start' || s.kind === 'terminal') {\n return { x: cx - 13, y: cy - 13, w: 26, h: 26, cx, cy };\n }\n const pw = Math.max(96, (s.name ?? '').length * 8 + 26);\n const ph = 46;\n return { x: cx - pw / 2, y: cy - ph / 2, w: pw, h: ph, cx, cy };\n}\n\nfunction pillCls(kind: StateNode['kind']): string {\n if (kind === 'terminal') return 'pill pill-end';\n if (kind === 'wait') return 'pill pill-wait';\n if (kind === 'start') return 'pill pill-init';\n return 'pill pill-active';\n}\n\nexport function renderState(data: BlockDataMap['state']): string {\n const states = data.states ?? [];\n const trans = data.transitions ?? [];\n const cellW = 168;\n const cellH = 64;\n const gapX = 74;\n const gapY = 60;\n const padX = 30;\n const padTop = 30;\n const padBot = 20;\n const cols = Math.max(1, ...states.map((s) => s.col));\n const rows = Math.max(1, ...states.map((s) => s.row));\n const width = padX * 2 + cols * cellW + (cols - 1) * gapX;\n const height = padTop * 2 + rows * cellH + (rows - 1) * gapY + padBot;\n const byId = new Map(states.map((s) => [s.id, s]));\n\n let s = `<svg viewBox=\"0 0 ${width} ${height}\" role=\"img\"><title>State machine</title>`;\n\n // edges first\n for (const t of trans) {\n const A = byId.get(t.from);\n const B = byId.get(t.to);\n if (!A || !B) continue;\n const label = t.event + (t.guard !== undefined ? ` ${t.guard}` : '');\n if (t.from === t.to) {\n const r = rectFor(A, cellW, cellH, gapX, gapY, padX, padTop);\n s +=\n `<g><path d=\"M ${r.cx - 12} ${r.y} C ${r.cx - 30} ${r.y - 32}, ${r.cx + 30} ${r.y - 32}, ${r.cx + 12} ${r.y}\" fill=\"none\" stroke=\"#1a1a2e\" stroke-width=\"1.3\" marker-end=\"url(#gArrow)\"/>` +\n edgePill({ lx: r.cx, ly: r.y - 28 }, label) +\n `</g>`;\n continue;\n }\n const p = ortho(\n rectFor(A, cellW, cellH, gapX, gapY, padX, padTop),\n rectFor(B, cellW, cellH, gapX, gapY, padX, padTop),\n );\n s +=\n `<g><path d=\"${p.d}\" fill=\"none\" stroke=\"#1a1a2e\" stroke-width=\"1.3\" marker-end=\"url(#gArrow)\"/>` +\n edgePill(p, label) +\n `</g>`;\n }\n\n // states\n for (const st of states) {\n const r = rectFor(st, cellW, cellH, gapX, gapY, padX, padTop);\n if (st.kind === 'start') {\n s += `<circle cx=\"${r.cx}\" cy=\"${r.cy}\" r=\"10\" fill=\"#1a1a2e\"/>`;\n } else if (st.kind === 'terminal') {\n s +=\n `<g>` +\n `<circle cx=\"${r.cx}\" cy=\"${r.cy}\" r=\"12\" fill=\"#fff\" stroke=\"#1a1a2e\" stroke-width=\"1.5\"/>` +\n `<circle cx=\"${r.cx}\" cy=\"${r.cy}\" r=\"6\" fill=\"#1a1a2e\"/>` +\n `</g>`;\n } else {\n const fill = st.kind === 'wait' ? '#fde7cd' : '#dcf1e2';\n const stroke = st.kind === 'wait' ? '#f7952c' : '#1f9747';\n s +=\n `<g filter=\"url(#gshadow)\">` +\n `<rect x=\"${r.x}\" y=\"${r.y}\" width=\"${r.w}\" height=\"${r.h}\" rx=\"23\" fill=\"${fill}\" stroke=\"${stroke}\" stroke-width=\"1.5\"/>` +\n `<text x=\"${r.cx}\" y=\"${r.cy + 4.5}\" class=\"sm-name\" fill=\"#1a1a2e\">${escapeHtml(st.name ?? '')}</text>` +\n `</g>`;\n }\n }\n\n s += `</svg>`;\n\n // transition table\n const name = (id: string): string => byId.get(id)?.name ?? id;\n const rows2 = trans\n .map(\n (t) =>\n `<tr>` +\n `<td><span class=\"${pillCls(byId.get(t.from)?.kind)}\">${escapeHtml(name(t.from))}</span></td>` +\n `<td style=\"font-family:var(--font-mono);font-size:11px\">${escapeHtml(t.event)}</td>` +\n `<td style=\"color:#6b7280;font-size:11px\">${escapeHtml(t.guard ?? '—')}</td>` +\n `<td><span class=\"${pillCls(byId.get(t.to)?.kind)}\">${escapeHtml(name(t.to))}</span></td>` +\n `</tr>`,\n )\n .join('');\n const table =\n trans.length > 0\n ? `<table class=\"transition-table\">` +\n `<thead><tr><th>From</th><th>Event</th><th>Guard</th><th>To</th></tr></thead>` +\n `<tbody>${rows2}</tbody></table>`\n : '';\n\n return diagramFrame(\n {\n tag: 'STATE',\n tagBg: '#6b21a8',\n ...(data.title !== undefined ? { title: data.title } : {}),\n ...(data.description !== undefined ? { desc: data.description } : {}),\n },\n s + table,\n );\n}\n","/**\n * Renders a data-flow diagram — process bubbles, external rectangles, and\n * three-sided data-store boxes, with orthogonal edges.\n *\n * Ported from doc-studio.jsx `DFDDiagram` + `dfdStyle`.\n */\n\nimport type { BlockDataMap } from '@avodado/core';\nimport { escapeHtml } from '../escape.js';\nimport { ortho } from '../svg/ortho.js';\nimport { edgePill } from '../svg/edgePill.js';\nimport { diagramFrame } from './frame.js';\n\nfunction dfdStyle(kind: string | undefined): { fill: string; stroke: string; text: string } {\n switch ((kind ?? 'process').toLowerCase()) {\n case 'external':\n return { fill: '#f3f4f6', stroke: '#6b7280', text: '#374151' };\n case 'store':\n case 'datastore':\n return { fill: '#fde7cd', stroke: '#f7952c', text: '#7a3d00' };\n default:\n return { fill: '#e5eff8', stroke: '#0e54a1', text: '#0a3a6e' };\n }\n}\n\nexport function renderDfd(data: BlockDataMap['dfd']): string {\n const nodes = data.nodes ?? [];\n const edges = data.edges ?? [];\n const cellW = 168;\n const cellH = 76;\n const gapX = 60;\n const gapY = 58;\n const padX = 26;\n const padTop = 26;\n const padBot = 20;\n const cols = Math.max(1, ...nodes.map((n) => n.col));\n const rows = Math.max(1, ...nodes.map((n) => n.row));\n const xOf = (c: number): number => padX + (c - 1) * (cellW + gapX);\n const yOf = (r: number): number => padTop + (r - 1) * (cellH + gapY);\n const rectFor = (n: { col: number; row: number }): {\n x: number;\n y: number;\n w: number;\n h: number;\n } => ({ x: xOf(n.col), y: yOf(n.row), w: cellW, h: cellH });\n const byId = new Map(nodes.map((n) => [n.id, n]));\n const width = padX * 2 + cols * cellW + (cols - 1) * gapX;\n const height = padTop + rows * cellH + (rows - 1) * gapY + padBot;\n\n let s = `<svg viewBox=\"0 0 ${width} ${height}\" role=\"img\"><title>Data-flow diagram</title>`;\n\n for (const e of edges) {\n const A = byId.get(e.from);\n const B = byId.get(e.to);\n if (!A || !B) continue;\n const p = ortho(rectFor(A), rectFor(B));\n s +=\n `<g><path d=\"${p.d}\" fill=\"none\" stroke=\"#1a1a2e\" stroke-width=\"1.4\" marker-end=\"url(#gArrow)\"/>` +\n edgePill(p, e.label) +\n `</g>`;\n }\n\n for (const n of nodes) {\n const r = rectFor(n);\n const st = dfdStyle(n.kind);\n const k = (n.kind ?? 'process').toLowerCase();\n let shape: string;\n if (k === 'process') {\n shape = `<rect x=\"${r.x}\" y=\"${r.y}\" width=\"${r.w}\" height=\"${r.h}\" rx=\"16\" fill=\"${st.fill}\" stroke=\"${st.stroke}\" stroke-width=\"1.4\"/>`;\n } else if (k === 'store' || k === 'datastore') {\n shape =\n `<rect x=\"${r.x}\" y=\"${r.y}\" width=\"${r.w}\" height=\"${r.h}\" fill=\"${st.fill}\" stroke=\"none\"/>` +\n `<line x1=\"${r.x}\" y1=\"${r.y}\" x2=\"${r.x + r.w}\" y2=\"${r.y}\" stroke=\"${st.stroke}\" stroke-width=\"1.6\"/>` +\n `<line x1=\"${r.x}\" y1=\"${r.y + r.h}\" x2=\"${r.x + r.w}\" y2=\"${r.y + r.h}\" stroke=\"${st.stroke}\" stroke-width=\"1.6\"/>` +\n `<line x1=\"${r.x}\" y1=\"${r.y}\" x2=\"${r.x}\" y2=\"${r.y + r.h}\" stroke=\"${st.stroke}\" stroke-width=\"1.6\"/>`;\n } else {\n shape = `<rect x=\"${r.x}\" y=\"${r.y}\" width=\"${r.w}\" height=\"${r.h}\" fill=\"${st.fill}\" stroke=\"${st.stroke}\" stroke-width=\"1.4\"/>`;\n }\n const num =\n n.num !== undefined && k === 'process'\n ? `<text x=\"${r.x + 12}\" y=\"${r.y + 18}\" class=\"dfd-num\" fill=\"${st.text}\">${escapeHtml(n.num)}</text>`\n : '';\n s +=\n `<g filter=\"url(#gshadow)\">${shape}${num}` +\n `<text x=\"${r.x + r.w / 2}\" y=\"${r.y + r.h / 2 + 4}\" class=\"dfd-name\" fill=\"${st.text}\">${escapeHtml(n.name)}</text>` +\n `</g>`;\n }\n\n s += `</svg>`;\n return diagramFrame(\n {\n tag: 'DFD',\n tagBg: '#0e54a1',\n ...(data.title !== undefined ? { title: data.title } : {}),\n ...(data.description !== undefined ? { desc: data.description } : {}),\n },\n s,\n );\n}\n","/**\n * Renders a user-journey map — a table of touchpoints across stages, plus an\n * optional emotion curve (SVG polyline) showing user sentiment per stage.\n *\n * Ported from doc-studio.jsx `JourneyMap`.\n */\n\nimport type { BlockDataMap } from '@avodado/core';\nimport { escapeHtml } from '../escape.js';\n\nfunction clamp01(v: number): number {\n if (v < 0) return 0;\n if (v > 1) return 1;\n return v;\n}\n\nexport function renderJourney(data: BlockDataMap['journey']): string {\n const stages = data.stages ?? [];\n const rows = data.rows ?? [];\n const emotion = data.emotion ?? [];\n const n = Math.max(stages.length, 1);\n const W = Math.max(380, n * 150);\n const H = 92;\n const pad = 20;\n const colW = (W - pad * 2) / n;\n const ex = (i: number): number => pad + colW * (i + 0.5);\n const ey = (v: number): number => H - 14 - (H - 30) * clamp01(v);\n\n const head =\n `<tr><th></th>` +\n stages.map((s) => `<th class=\"c\">${escapeHtml(s.label)}</th>`).join('') +\n `</tr>`;\n const body = rows\n .map(\n (r) =>\n `<tr><td class=\"lead\">${escapeHtml(r.label)}</td>` +\n (r.cells ?? []).map((c) => `<td class=\"c\">${escapeHtml(c)}</td>`).join('') +\n `</tr>`,\n )\n .join('');\n\n let svg = '';\n if (emotion.length > 0) {\n const points = emotion.map((v, i) => `${ex(i)},${ey(v)}`).join(' ');\n const dots = emotion\n .map((v, i) => {\n const fill = v >= 0.6 ? '#1f9747' : v <= 0.35 ? '#991b1b' : '#f7952c';\n return `<circle cx=\"${ex(i)}\" cy=\"${ey(v)}\" r=\"5\" fill=\"${fill}\" stroke=\"#fff\" stroke-width=\"1.5\"/>`;\n })\n .join('');\n svg =\n `<div style=\"margin-top:10px\">` +\n `<div style=\"font-size:10px;color:#6b7280;font-weight:700;text-transform:uppercase;letter-spacing:.08em;margin-bottom:4px\">Emotion</div>` +\n `<svg viewBox=\"0 0 ${W} ${H}\" style=\"width:100%\" role=\"img\"><title>Emotion curve</title>` +\n `<polyline points=\"${points}\" fill=\"none\" stroke=\"#0e54a1\" stroke-width=\"2\"/>` +\n dots +\n `</svg></div>`;\n }\n\n return (\n `<div>` +\n `<table class=\"pres-table\"><thead>${head}</thead><tbody>${body}</tbody></table>` +\n svg +\n `</div>`\n );\n}\n","/**\n * Renders a Gantt chart — period columns across the top, task rows with\n * horizontal bars colored by kind (done / active / milestone / default).\n *\n * Ported from doc-studio.jsx `Gantt` + `ganttColor`.\n */\n\nimport type { BlockDataMap } from '@avodado/core';\nimport { escapeHtml } from '../escape.js';\n\nfunction ganttColor(kind: string | undefined): string {\n switch ((kind ?? '').toLowerCase()) {\n case 'done':\n return '#1f9747';\n case 'active':\n case 'current':\n return '#f7952c';\n case 'milestone':\n return '#6b21a8';\n default:\n return '#0e54a1';\n }\n}\n\nexport function renderGantt(data: BlockDataMap['gantt']): string {\n const periods = data.periods ?? [];\n const tasks = data.tasks ?? [];\n const P = Math.max(periods.length, 1);\n const labelW = 156;\n const padX = 20;\n const padTop = 34;\n const rowH = 30;\n const barH = 18;\n const colW = 64;\n const padBot = 14;\n const width = labelW + padX * 2 + P * colW;\n const height = padTop + tasks.length * rowH + padBot;\n const xCol = (i: number): number => labelW + padX + i * colW;\n\n let s = `<svg viewBox=\"0 0 ${width} ${height}\" role=\"img\"><title>Schedule</title>`;\n for (let i = 0; i < periods.length; i++) {\n s +=\n `<g>` +\n `<line x1=\"${xCol(i)}\" y1=\"${padTop - 6}\" x2=\"${xCol(i)}\" y2=\"${height - padBot}\" stroke=\"#eef0f3\" stroke-width=\"1\"/>` +\n `<text x=\"${xCol(i) + colW / 2}\" y=\"${padTop - 12}\" class=\"gantt-head\">${escapeHtml(periods[i] ?? '')}</text>` +\n `</g>`;\n }\n s += `<line x1=\"${xCol(P)}\" y1=\"${padTop - 6}\" x2=\"${xCol(P)}\" y2=\"${height - padBot}\" stroke=\"#eef0f3\" stroke-width=\"1\"/>`;\n for (let i = 0; i < tasks.length; i++) {\n const t = tasks[i];\n if (t === undefined) continue;\n const y = padTop + i * rowH;\n const bx = xCol(t.start ?? 0);\n const span = Math.max(1, t.span ?? 1);\n const bw = span * colW - 8;\n s +=\n `<g>` +\n `<text x=\"${padX}\" y=\"${y + rowH / 2 + 4}\" class=\"gantt-label\">${escapeHtml(t.label)}</text>` +\n `<rect x=\"${bx + 4}\" y=\"${y + (rowH - barH) / 2}\" width=\"${bw}\" height=\"${barH}\" rx=\"4\" fill=\"${ganttColor(t.kind)}\" filter=\"url(#gshadow)\"/>` +\n `</g>`;\n }\n s += `</svg>`;\n return s;\n}\n","/**\n * Renders a generic node-link graph — rounded pills colored by group, with\n * orthogonal edges (directed or undirected).\n *\n * Ported from doc-studio.jsx `Graph`.\n */\n\nimport type { BlockDataMap } from '@avodado/core';\nimport { escapeHtml } from '../escape.js';\nimport { ortho } from '../svg/ortho.js';\nimport { edgePill } from '../svg/edgePill.js';\nimport { diagramFrame } from './frame.js';\n\nconst CHART_COLORS = ['#0e54a1', '#1a6dbe', '#0f766e', '#1f9747', '#6b21a8', '#f7952c'];\n\nexport function renderGraph(data: BlockDataMap['graph']): string {\n const nodes = data.nodes ?? [];\n const edges = data.edges ?? [];\n const cellW = 150;\n const cellH = 84;\n const gapX = 44;\n const gapY = 40;\n const padX = 26;\n const padTop = 24;\n const padBot = 20;\n const cols = Math.max(1, ...nodes.map((n) => n.col));\n const rows = Math.max(1, ...nodes.map((n) => n.row));\n const cxOf = (c: number): number => padX + (c - 1) * (cellW + gapX) + cellW / 2;\n const cyOf = (r: number): number => padTop + (r - 1) * (cellH + gapY) + cellH / 2;\n const rectFor = (n: { col: number; row: number; label: string }): {\n x: number;\n y: number;\n w: number;\n h: number;\n cx: number;\n cy: number;\n } => {\n const cx = cxOf(n.col);\n const cy = cyOf(n.row);\n const w = Math.max(98, n.label.length * 8 + 26);\n return { x: cx - w / 2, y: cy - 20, w, h: 40, cx, cy };\n };\n const byId = new Map(nodes.map((n) => [n.id, n]));\n const width = padX * 2 + cols * cellW + (cols - 1) * gapX;\n const height = padTop + rows * cellH + (rows - 1) * gapY + padBot;\n\n let s = `<svg viewBox=\"0 0 ${width} ${height}\" role=\"img\"><title>Graph</title>`;\n\n for (const e of edges) {\n const A = byId.get(e.from);\n const B = byId.get(e.to);\n if (!A || !B) continue;\n const p = ortho(rectFor(A), rectFor(B));\n const directed = (e.dir ?? 'directed') !== 'undirected';\n const markerAttr = directed ? ` marker-end=\"url(#gArrow)\"` : '';\n s +=\n `<g><path d=\"${p.d}\" fill=\"none\" stroke=\"#6b7280\" stroke-width=\"1.4\"${markerAttr}/>` +\n edgePill(p, e.label) +\n `</g>`;\n }\n\n for (const n of nodes) {\n const r = rectFor(n);\n const c = CHART_COLORS[(n.group ?? 0) % CHART_COLORS.length] ?? '#0e54a1';\n s +=\n `<g filter=\"url(#gshadow)\">` +\n `<rect x=\"${r.x}\" y=\"${r.y}\" width=\"${r.w}\" height=\"${r.h}\" rx=\"20\" fill=\"#fff\" stroke=\"${c}\" stroke-width=\"1.6\"/>` +\n `<text x=\"${r.cx}\" y=\"${r.cy + 4}\" class=\"blk-name\" fill=\"${c}\" text-anchor=\"middle\" style=\"font-size:12px\">${escapeHtml(n.label)}</text>` +\n `</g>`;\n }\n\n s += `</svg>`;\n return diagramFrame(\n {\n tag: 'GRAPH',\n tagBg: '#374151',\n ...(data.title !== undefined ? { title: data.title } : {}),\n ...(data.description !== undefined ? { desc: data.description } : {}),\n },\n s,\n );\n}\n","/**\n * Renders a 2x2 matrix — labelled axes, optional low/high endpoint labels,\n * and dots for each `(x, y, label)` item.\n *\n * Ported from doc-studio.jsx `Quadrant`.\n */\n\nimport type { BlockDataMap } from '@avodado/core';\nimport { escapeHtml } from '../escape.js';\nimport { diagramFrame } from './frame.js';\n\nfunction clamp01(v: number | undefined): number {\n if (v === undefined || Number.isNaN(v)) return 0.5;\n if (v < 0) return 0;\n if (v > 1) return 1;\n return v;\n}\n\nexport function renderQuadrant(data: BlockDataMap['quadrant']): string {\n const W = 580;\n const H = 440;\n const pad = 56;\n const x0 = pad;\n const x1 = W - pad;\n const y0 = pad - 16;\n const y1 = H - pad;\n const mx = (x0 + x1) / 2;\n const my = (y0 + y1) / 2;\n const px = (v: number | undefined): number => x0 + (x1 - x0) * clamp01(v);\n const py = (v: number | undefined): number => y1 - (y1 - y0) * clamp01(v);\n const items = data.items ?? [];\n const xA = data.xAxis ?? {};\n const yA = data.yAxis ?? {};\n\n let s = `<svg viewBox=\"0 0 ${W} ${H}\" role=\"img\"><title>Quadrant</title>`;\n s += `<rect x=\"${x0}\" y=\"${y0}\" width=\"${x1 - x0}\" height=\"${y1 - y0}\" fill=\"#fafbfc\" stroke=\"#e5e7eb\"/>`;\n s += `<rect x=\"${mx}\" y=\"${y0}\" width=\"${x1 - mx}\" height=\"${my - y0}\" fill=\"#0e54a1\" fill-opacity=\"0.04\"/>`;\n s += `<line x1=\"${x0}\" y1=\"${my}\" x2=\"${x1}\" y2=\"${my}\" class=\"quad-axis\" marker-end=\"url(#gArrow)\"/>`;\n s += `<line x1=\"${mx}\" y1=\"${y1}\" x2=\"${mx}\" y2=\"${y0}\" class=\"quad-axis\" marker-end=\"url(#gArrow)\"/>`;\n\n if (xA.label !== undefined)\n s += `<text x=\"${x1}\" y=\"${y1 + 30}\" class=\"quad-title\" text-anchor=\"end\">${escapeHtml(xA.label)} →</text>`;\n if (yA.label !== undefined)\n s += `<text x=\"${mx - 8}\" y=\"${y0 - 4}\" class=\"quad-title\" text-anchor=\"end\">↑ ${escapeHtml(yA.label)}</text>`;\n if (xA.low !== undefined)\n s += `<text x=\"${x0}\" y=\"${y1 + 16}\" class=\"quad-end\" text-anchor=\"start\">${escapeHtml(xA.low)}</text>`;\n if (xA.high !== undefined)\n s += `<text x=\"${x1}\" y=\"${y1 + 16}\" class=\"quad-end\" text-anchor=\"end\">${escapeHtml(xA.high)}</text>`;\n if (yA.high !== undefined)\n s += `<text x=\"${x0 - 10}\" y=\"${y0 + 6}\" class=\"quad-end\" text-anchor=\"end\">${escapeHtml(yA.high)}</text>`;\n if (yA.low !== undefined)\n s += `<text x=\"${x0 - 10}\" y=\"${y1}\" class=\"quad-end\" text-anchor=\"end\">${escapeHtml(yA.low)}</text>`;\n\n for (const it of items) {\n const cx = px(it.x);\n const cy = py(it.y);\n const left = cx > mx;\n const tx = cx + (left ? -12 : 12);\n const anchor = left ? 'end' : 'start';\n s +=\n `<g filter=\"url(#gshadow)\">` +\n `<circle cx=\"${cx}\" cy=\"${cy}\" r=\"7\" fill=\"#f7952c\" stroke=\"#fff\" stroke-width=\"1.5\"/>` +\n `<text x=\"${tx}\" y=\"${cy + 4}\" class=\"quad-pt-label\" text-anchor=\"${anchor}\">${escapeHtml(it.label)}</text>` +\n `</g>`;\n }\n\n s += `</svg>`;\n return diagramFrame(\n {\n tag: '2×2',\n tagBg: '#0f766e',\n ...(data.title !== undefined ? { title: data.title } : {}),\n ...(data.description !== undefined ? { desc: data.description } : {}),\n },\n s,\n );\n}\n","/**\n * Renders a swimlane diagram — horizontal lanes per role with labelled steps\n * in column positions, plus orthogonal links between steps.\n *\n * Ported from doc-studio.jsx `Swimlane` + `laneColor`.\n */\n\nimport type { BlockDataMap } from '@avodado/core';\nimport { escapeHtml } from '../escape.js';\nimport { ortho } from '../svg/ortho.js';\nimport { wrapText } from '../svg/wrapText.js';\nimport { edgePill } from '../svg/edgePill.js';\nimport { diagramFrame } from './frame.js';\n\nfunction laneColor(kind: string | undefined): { fill: string; stroke: string; text: string } {\n switch ((kind ?? 'action').toLowerCase()) {\n case 'decision':\n return { fill: '#fde7cd', stroke: '#f7952c', text: '#7a3d00' };\n case 'start':\n case 'end':\n return { fill: '#dcf1e2', stroke: '#1f9747', text: '#0f3d22' };\n case 'wait':\n return { fill: '#f3f4f6', stroke: '#6b7280', text: '#374151' };\n default:\n return { fill: '#e5eff8', stroke: '#0e54a1', text: '#0a3a6e' };\n }\n}\n\nexport function renderSwimlane(data: BlockDataMap['swimlane']): string {\n const lanes = data.lanes ?? [];\n const steps = data.steps ?? [];\n const links = data.links ?? [];\n const labelW = 132;\n const padX = 18;\n const padTop = 24;\n const padBot = 20;\n const laneH = 92;\n const colW = 168;\n const gapCol = 34;\n const boxW = 150;\n const boxH = 52;\n const cols = Math.max(1, ...steps.map((s) => s.col));\n const xCol = (c: number): number => labelW + padX + (c - 1) * (colW + gapCol);\n const yLane = (l: number): number => padTop + l * laneH;\n const rectFor = (s: { col: number; lane: number }): {\n x: number;\n y: number;\n w: number;\n h: number;\n } => ({\n x: xCol(s.col) + (colW - boxW) / 2,\n y: yLane(s.lane) + (laneH - boxH) / 2,\n w: boxW,\n h: boxH,\n });\n const byId = new Map(steps.map((s) => [s.id, s]));\n const width = labelW + padX * 2 + cols * colW + (cols - 1) * gapCol;\n const height = padTop + lanes.length * laneH + padBot;\n\n let s = `<svg viewBox=\"0 0 ${width} ${height}\" role=\"img\"><title>Swimlane</title>`;\n\n for (let i = 0; i < lanes.length; i++) {\n const L = lanes[i];\n if (L === undefined) continue;\n s +=\n `<g>` +\n `<rect x=\"${padX}\" y=\"${yLane(i)}\" width=\"${width - padX * 2}\" height=\"${laneH}\" fill=\"${i % 2 ? '#fafafa' : '#fff'}\" stroke=\"#e5e7eb\"/>` +\n `<rect x=\"${padX}\" y=\"${yLane(i)}\" width=\"${labelW}\" height=\"${laneH}\" fill=\"#0e54a1\"/>` +\n `<text x=\"${padX + 14}\" y=\"${yLane(i) + laneH / 2 + 4}\" class=\"sl-lane-label\">${escapeHtml(L.label)}</text>` +\n `</g>`;\n }\n\n for (const lk of links) {\n const A = byId.get(lk.from);\n const B = byId.get(lk.to);\n if (!A || !B) continue;\n const p = ortho(rectFor(A), rectFor(B));\n s +=\n `<g><path d=\"${p.d}\" fill=\"none\" stroke=\"#1a1a2e\" stroke-width=\"1.4\" marker-end=\"url(#gArrow)\"/>` +\n edgePill(p, lk.label) +\n `</g>`;\n }\n\n for (const st of steps) {\n const r = rectFor(st);\n const c = laneColor(st.kind);\n const lines = wrapText(st.label, 20, 2);\n const texts = lines\n .map(\n (ln, j) =>\n `<text x=\"${r.x + r.w / 2}\" y=\"${r.y + r.h / 2 + 4 - (lines.length - 1) * 7 + j * 14}\" class=\"sl-step\" fill=\"${c.text}\">${escapeHtml(ln)}</text>`,\n )\n .join('');\n s +=\n `<g filter=\"url(#gshadow)\">` +\n `<rect x=\"${r.x}\" y=\"${r.y}\" width=\"${r.w}\" height=\"${r.h}\" rx=\"7\" fill=\"${c.fill}\" stroke=\"${c.stroke}\" stroke-width=\"1.3\"/>` +\n texts +\n `</g>`;\n }\n\n s += `</svg>`;\n return diagramFrame(\n {\n tag: 'LANES',\n tagBg: '#0e54a1',\n ...(data.title !== undefined ? { title: data.title } : {}),\n ...(data.description !== undefined ? { desc: data.description } : {}),\n },\n s,\n );\n}\n","/**\n * Shared color palette + node-glyph helpers used by architecture-flavoured\n * blocks (cluster, block, infra, felogic, belogic, …).\n *\n * Ported from doc-studio.jsx `blockStyle` + `nodeGlyph`.\n */\n\n/** Color triple for a node kind: accent (stripe / border), fill, text color. */\nexport interface NodeColors {\n readonly accent: string;\n readonly fill: string;\n readonly text: string;\n}\n\n/** Maps a node `kind` (client / service / store / queue / ...) to colors. */\nexport function blockStyle(kind: string | undefined): NodeColors {\n switch ((kind ?? '').toLowerCase()) {\n case 'client':\n return { accent: '#0e54a1', fill: '#e5eff8', text: '#0a3a6e' };\n case 'service':\n case 'microservice':\n case 'compute':\n case 'container':\n return { accent: '#1f9747', fill: '#dcf1e2', text: '#0f3d22' };\n case 'data':\n return { accent: '#6b21a8', fill: '#ede9fe', text: '#4a1772' };\n case 'store':\n case 'db':\n case 'database':\n return { accent: '#f7952c', fill: '#fde7cd', text: '#7a3d00' };\n case 'bucket':\n case 'blob':\n case 'object':\n return { accent: '#b45309', fill: '#fef3c7', text: '#7a3d00' };\n case 'queue':\n return { accent: '#0f766e', fill: '#ccfbf1', text: '#0f4f49' };\n case 'cache':\n return { accent: '#0891b2', fill: '#cffafe', text: '#0e4f5c' };\n case 'gateway':\n case 'lb':\n return { accent: '#0e54a1', fill: '#cfe0f3', text: '#0a3a6e' };\n case 'function':\n case 'lambda':\n return { accent: '#7c3aed', fill: '#ede9fe', text: '#4a1772' };\n case 'cdn':\n return { accent: '#1a6dbe', fill: '#e5eff8', text: '#0a3a6e' };\n case 'external':\n return { accent: '#6b7280', fill: '#f3f4f6', text: '#374151' };\n case 'producer':\n return { accent: '#1f9747', fill: '#dcf1e2', text: '#0f3d22' };\n case 'topic':\n return { accent: '#0f766e', fill: '#ccfbf1', text: '#0f4f49' };\n case 'consumer':\n return { accent: '#1a6dbe', fill: '#e5eff8', text: '#0a3a6e' };\n case 'context':\n return { accent: '#6b21a8', fill: '#ede9fe', text: '#4a1772' };\n case 'firewall':\n return { accent: '#991b1b', fill: '#fee2e2', text: '#991b1b' };\n default:\n return { accent: '#374151', fill: '#fff', text: '#1a1a2e' };\n }\n}\n\n/**\n * Returns a small SVG glyph (database cylinder, queue bars, function ƒ, …)\n * for the given node kind, or empty string if no glyph applies.\n *\n * @param kind - Node kind.\n * @param x - Glyph top-left x.\n * @param y - Glyph top-left y.\n * @param c - Stroke / fill color.\n */\nexport function nodeGlyph(kind: string | undefined, x: number, y: number, c: string): string {\n const k = (kind ?? '').toLowerCase();\n if (k === 'store' || k === 'db' || k === 'database') {\n return (\n `<g stroke=\"${c}\" stroke-width=\"1.3\" fill=\"none\">` +\n `<ellipse cx=\"${x + 8}\" cy=\"${y + 3}\" rx=\"7\" ry=\"3\"/>` +\n `<path d=\"M${x + 1} ${y + 3} V ${y + 13}\"/>` +\n `<path d=\"M${x + 15} ${y + 3} V ${y + 13}\"/>` +\n `<path d=\"M${x + 1} ${y + 13} a 7 3 0 0 0 14 0\"/>` +\n `</g>`\n );\n }\n if (k === 'bucket' || k === 'blob' || k === 'object') {\n return (\n `<g stroke=\"${c}\" stroke-width=\"1.3\" fill=\"none\">` +\n `<ellipse cx=\"${x + 8}\" cy=\"${y + 3}\" rx=\"7\" ry=\"2.5\"/>` +\n `<path d=\"M${x + 1.5} ${y + 3} L ${x + 3.5} ${y + 14} L ${x + 12.5} ${y + 14} L ${x + 14.5} ${y + 3}\"/>` +\n `</g>`\n );\n }\n if (k === 'queue' || k === 'topic') {\n return (\n `<g stroke=\"${c}\" stroke-width=\"1.6\">` +\n `<path d=\"M${x + 2} ${y + 1} V ${y + 14}\"/>` +\n `<path d=\"M${x + 8} ${y + 1} V ${y + 14}\"/>` +\n `<path d=\"M${x + 14} ${y + 1} V ${y + 14}\"/>` +\n `</g>`\n );\n }\n if (k === 'firewall') {\n return `<path d=\"M${x + 8} ${y} L ${x + 15} ${y + 3} V ${y + 9} Q ${x + 15} ${y + 14} ${x + 8} ${y + 16} Q ${x + 1} ${y + 14} ${x + 1} ${y + 9} V ${y + 3} Z\" fill=\"none\" stroke=\"${c}\" stroke-width=\"1.3\"/>`;\n }\n if (k === 'cache') {\n // stacked slabs (memory layers) — three offset parallelograms\n const slab = (dy: number): string =>\n `<path d=\"M${x + 1} ${y + 5 + dy} L${x + 8} ${y + 2 + dy} L${x + 15} ${y + 5 + dy} L${x + 8} ${y + 8 + dy} Z\" fill=\"none\" stroke=\"${c}\" stroke-width=\"1.2\"/>`;\n return `<g>${slab(0)}${slab(3.5)}${slab(7)}</g>`;\n }\n if (k === 'function' || k === 'lambda') {\n return `<text x=\"${x + 7}\" y=\"${y + 14}\" font-family=\"Georgia, serif\" font-size=\"17\" font-style=\"italic\" font-weight=\"700\" fill=\"${c}\" text-anchor=\"middle\">ƒ</text>`;\n }\n if (k === 'cdn' || k === 'external') {\n return `<path d=\"M${x + 3} ${y + 13} a 4 4 0 0 1 0.5 -8 a 5 5 0 0 1 9.5 1.2 a 3 3 0 0 1 1 6.8 z\" fill=\"none\" stroke=\"${c}\" stroke-width=\"1.3\"/>`;\n }\n if (k === 'gateway' || k === 'lb') {\n return (\n `<g stroke=\"${c}\" stroke-width=\"1.5\" fill=\"none\">` +\n `<path d=\"M${x + 2} ${y + 1} L ${x + 8} ${y + 7} L ${x + 2} ${y + 13}\"/>` +\n `<path d=\"M${x + 8} ${y + 1} L ${x + 14} ${y + 7} L ${x + 8} ${y + 13}\"/>` +\n `</g>`\n );\n }\n if (k === 'service' || k === 'microservice' || k === 'compute' || k === 'container') {\n return (\n `<g stroke=\"${c}\" stroke-width=\"1.3\">` +\n `<rect x=\"${x + 4}\" y=\"${y + 1}\" width=\"11\" height=\"11\" rx=\"1.5\" fill=\"none\"/>` +\n `<rect x=\"${x + 1}\" y=\"${y + 4}\" width=\"11\" height=\"11\" rx=\"1.5\" fill=\"#fff\"/>` +\n `</g>`\n );\n }\n return '';\n}\n\n/** Edge-style preset: per-kind stroke, dash, marker, error flag. */\nexport interface EdgeStyle {\n readonly stroke: string;\n readonly sw: number;\n readonly dash: string;\n readonly marker: string;\n readonly err: boolean;\n}\n\n/** Edge style table — `solid | dashed | forbidden | error` → SVG attributes. */\nexport const GEDGE: Record<string, EdgeStyle> = {\n solid: { stroke: 'var(--charcoal)', sw: 1.4, dash: '', marker: 'gArrow', err: false },\n dashed: { stroke: 'var(--gray)', sw: 1.4, dash: '5 4', marker: 'gSoft', err: false },\n forbidden: { stroke: '#991b1b', sw: 2, dash: '', marker: 'gErr', err: true },\n error: { stroke: '#991b1b', sw: 1.6, dash: '', marker: 'gErr', err: true },\n};\n","/**\n * Renders a C4 model diagram (context / container / component levels).\n *\n * Per-node colour comes from a kind+family lookup (`c4Style`). Optional\n * boundary box wraps the internal nodes (container/component/store). A legend\n * sits below the SVG.\n *\n * Ported from doc-studio.jsx `C4Diagram` + `c4Style`.\n */\n\nimport type { BlockDataMap } from '@avodado/core';\nimport { escapeHtml } from '../escape.js';\nimport { ortho } from '../svg/ortho.js';\nimport { wrapText } from '../svg/wrapText.js';\nimport { edgePill } from '../svg/edgePill.js';\nimport { GEDGE } from '../svg/blockStyle.js';\nimport { diagramFrame } from './frame.js';\n\ntype Node = NonNullable<BlockDataMap['c4']['nodes']>[number];\n\ninterface C4Style {\n accent: string;\n fill: string;\n text: string;\n sub: string;\n chip: string;\n solid?: boolean;\n dash?: string;\n}\n\nfunction c4Style(n: Node): C4Style {\n const f = (n.family ?? '').toLowerCase();\n switch (n.kind) {\n case 'person':\n return {\n accent: '#0e54a1',\n fill: '#0e54a1',\n text: '#fff',\n sub: '#cfe0f3',\n chip: 'Person',\n solid: true,\n };\n case 'system':\n return {\n accent: '#1f9747',\n fill: '#dcf1e2',\n text: '#0f3d22',\n sub: '#356b49',\n chip: 'Software System',\n };\n case 'external':\n return {\n accent: '#6b7280',\n fill: '#f3f4f6',\n text: '#374151',\n sub: '#6b7280',\n chip: 'External System',\n };\n case 'store':\n return {\n accent: '#f7952c',\n fill: '#fde7cd',\n text: '#7a3d00',\n sub: '#9a5a12',\n chip: 'Database',\n };\n case 'component':\n if (f === 'repo')\n return {\n accent: '#374151',\n fill: '#f3f4f6',\n text: '#1a1a2e',\n sub: '#374151',\n chip: 'Component',\n };\n if (f === 'external')\n return {\n accent: '#6b7280',\n fill: '#fff',\n text: '#374151',\n sub: '#6b7280',\n chip: 'External',\n dash: '4 3',\n };\n if (f === 'controller')\n return {\n accent: '#0e54a1',\n fill: '#e5eff8',\n text: '#0a3a6e',\n sub: '#365f86',\n chip: 'Component',\n };\n return {\n accent: '#1f9747',\n fill: '#dcf1e2',\n text: '#0f3d22',\n sub: '#356b49',\n chip: 'Component',\n };\n default:\n if (f === 'data')\n return {\n accent: '#6b21a8',\n fill: '#ede9fe',\n text: '#4a1772',\n sub: '#6b21a8',\n chip: 'Container',\n };\n if (f === 'service')\n return {\n accent: '#1f9747',\n fill: '#dcf1e2',\n text: '#0f3d22',\n sub: '#356b49',\n chip: 'Container',\n };\n if (f === 'client')\n return {\n accent: '#0e54a1',\n fill: '#e5eff8',\n text: '#0a3a6e',\n sub: '#365f86',\n chip: 'Container',\n };\n if (f === 'store')\n return {\n accent: '#f7952c',\n fill: '#fde7cd',\n text: '#7a3d00',\n sub: '#9a5a12',\n chip: 'Database',\n };\n return {\n accent: '#0e54a1',\n fill: '#e5eff8',\n text: '#0a3a6e',\n sub: '#365f86',\n chip: 'Container',\n };\n }\n}\n\nconst LEGEND: ReadonlyArray<{ sw: string; label: string }> = [\n { sw: '#0e54a1', label: 'Person' },\n { sw: '#dcf1e2', label: 'System / service' },\n { sw: '#e5eff8', label: 'Container (client)' },\n { sw: '#ede9fe', label: 'Container (data)' },\n { sw: '#fde7cd', label: 'Database' },\n { sw: '#f3f4f6', label: 'External' },\n];\n\nexport function renderC4(data: BlockDataMap['c4']): string {\n const nodes = data.nodes ?? [];\n const edges = data.edges ?? [];\n const byId = new Map(nodes.map((n) => [n.id, n]));\n const cellW = 212;\n const cellH = 102;\n const gapX = 56;\n const gapY = 64;\n const padX = 26;\n const padTop = 46;\n const padBot = 24;\n const cols = Math.max(1, ...nodes.map((n) => n.col + ((n.w ?? 1) - 1)));\n const rows = Math.max(1, ...nodes.map((n) => n.row));\n const rectFor = (n: Node): { x: number; y: number; w: number; h: number } => ({\n x: padX + (n.col - 1) * (cellW + gapX),\n y: padTop + (n.row - 1) * (cellH + gapY),\n w: (n.w ?? 1) * cellW + ((n.w ?? 1) - 1) * gapX,\n h: cellH,\n });\n const width = padX * 2 + cols * cellW + (cols - 1) * gapX;\n const height = padTop + rows * cellH + (rows - 1) * gapY + padBot;\n\n // Boundary box around the \"internal\" nodes (container/component/store)\n let boundarySvg = '';\n if (data.boundary !== undefined) {\n const internals = nodes\n .filter((n) => n.kind === 'container' || n.kind === 'component' || n.kind === 'store')\n .map(rectFor);\n if (internals.length > 0) {\n const minX = Math.min(...internals.map((r) => r.x)) - 16;\n const minY = Math.min(...internals.map((r) => r.y)) - 26;\n const maxX = Math.max(...internals.map((r) => r.x + r.w)) + 16;\n const maxY = Math.max(...internals.map((r) => r.y + r.h)) + 16;\n const w = Math.max(120, data.boundary.label.length * 6.2);\n boundarySvg =\n `<g>` +\n `<rect x=\"${minX}\" y=\"${minY}\" width=\"${maxX - minX}\" height=\"${maxY - minY}\" rx=\"12\" class=\"c4-boundary\"/>` +\n `<rect x=\"${minX + 12}\" y=\"${minY - 8}\" width=\"${w}\" height=\"16\" fill=\"#fff\"/>` +\n `<text x=\"${minX + 16}\" y=\"${minY + 4}\" class=\"c4-boundary-label\">${escapeHtml(data.boundary.label)}</text>` +\n `</g>`;\n }\n }\n\n let s = `<svg viewBox=\"0 0 ${width} ${height}\" role=\"img\"><title>C4 diagram</title>${boundarySvg}`;\n\n for (const e of edges) {\n const A = byId.get(e.from);\n const B = byId.get(e.to);\n if (!A || !B) continue;\n const p = ortho(rectFor(A), rectFor(B));\n const st = GEDGE[e.kind ?? 'solid'] ??\n GEDGE['solid'] ?? {\n stroke: '#1a1a2e',\n sw: 1.4,\n dash: '',\n marker: 'gArrow',\n err: false,\n };\n s +=\n `<g><path d=\"${p.d}\" fill=\"none\" stroke=\"${st.stroke}\" stroke-width=\"${st.sw}\" stroke-dasharray=\"${st.dash}\" marker-end=\"url(#${st.marker})\"/>` +\n edgePill(p, e.label, st.err) +\n `</g>`;\n }\n\n for (const n of nodes) {\n const r = rectFor(n);\n const st = c4Style(n);\n const px = r.x + 16;\n const desc = wrapText(n.desc, 30, 2);\n const strokeWidth = st.solid === true ? 0 : 1.2;\n const strokeAttr = st.solid === true ? 'none' : st.accent;\n const dashAttr = st.dash !== undefined ? ` stroke-dasharray=\"${st.dash}\"` : '';\n const stripe =\n st.solid === true\n ? ''\n : `<rect x=\"${r.x}\" y=\"${r.y}\" width=\"5\" height=\"${r.h}\" rx=\"2\" fill=\"${st.accent}\"/>`;\n const personGlyph =\n n.kind === 'person'\n ? `<g fill=\"${st.text}\"><circle cx=\"${px + 6}\" cy=\"${r.y + 19}\" r=\"6\"/><path d=\"M ${px} ${r.y + 34} a 6 7 0 0 1 12 0 z\"/></g>`\n : '';\n const chipX = n.kind === 'person' ? px + 22 : px;\n const chipFill = st.solid === true ? st.sub : st.accent;\n const techLine =\n n.tech !== undefined\n ? `<text x=\"${px}\" y=\"${r.y + 60}\" class=\"c4-tech\" fill=\"${st.sub}\">${escapeHtml(n.tech)}</text>`\n : '';\n const descLines = desc\n .map(\n (ln, j) =>\n `<text x=\"${px}\" y=\"${r.y + 77 + j * 13}\" class=\"c4-desc\" fill=\"${st.sub}\">${escapeHtml(ln)}</text>`,\n )\n .join('');\n s +=\n `<g filter=\"url(#gshadow)\">` +\n `<rect x=\"${r.x}\" y=\"${r.y}\" width=\"${r.w}\" height=\"${r.h}\" rx=\"10\" fill=\"${st.fill}\" stroke=\"${strokeAttr}\" stroke-width=\"${strokeWidth}\"${dashAttr}/>` +\n stripe +\n personGlyph +\n `<text x=\"${chipX}\" y=\"${r.y + 22}\" class=\"c4-chip\" fill=\"${chipFill}\">${escapeHtml(st.chip)}</text>` +\n `<text x=\"${px}\" y=\"${r.y + 44}\" class=\"c4-name\" fill=\"${st.text}\">${escapeHtml(n.name)}</text>` +\n techLine +\n descLines +\n `</g>`;\n }\n\n s += `</svg>`;\n const legend =\n `<div class=\"legend\">` +\n LEGEND.map(\n (l) =>\n `<span class=\"item\"><span class=\"sw\" style=\"background:${l.sw};border:1px solid #d1d5db\"></span>${escapeHtml(l.label)}</span>`,\n ).join('') +\n `</div>`;\n\n return diagramFrame(\n {\n tag: 'C4',\n tagClass: 'c4',\n ...(data.title !== undefined ? { title: data.title } : {}),\n ...(data.description !== undefined ? { desc: data.description } : {}),\n },\n s + legend,\n );\n}\n","/**\n * Renders a UML class diagram — class boxes with stereotype, name, attributes,\n * and methods compartments; orthogonal-routed relationships with kind-specific\n * markers (inheritance triangle, composition diamond, etc.).\n *\n * Ported from doc-studio.jsx `UMLDiagram` + `umlRel`.\n */\n\nimport type { BlockDataMap } from '@avodado/core';\nimport { escapeHtml } from '../escape.js';\nimport { ortho } from '../svg/ortho.js';\nimport { edgePill } from '../svg/edgePill.js';\nimport { diagramFrame } from './frame.js';\n\ntype UmlClass = NonNullable<BlockDataMap['uml']['classes']>[number];\n\ninterface UmlRelStyle {\n dash: string;\n start?: string;\n end?: string;\n}\n\nfunction umlRel(kind: string | undefined): UmlRelStyle {\n switch ((kind ?? 'association').toLowerCase()) {\n case 'inheritance':\n case 'extends':\n return { dash: '', end: 'umlTri' };\n case 'implementation':\n case 'implements':\n return { dash: '6 4', end: 'umlTri' };\n case 'composition':\n return { dash: '', start: 'umlDiaF' };\n case 'aggregation':\n return { dash: '', start: 'umlDiaH' };\n case 'dependency':\n return { dash: '6 4', end: 'umlOpen' };\n default:\n return { dash: '', end: 'umlOpen' };\n }\n}\n\nexport function renderUml(data: BlockDataMap['uml']): string {\n const classes = data.classes ?? [];\n const rels = data.rels ?? [];\n const colW = 204;\n const gapX = 64;\n const gapY = 50;\n const padX = 26;\n const padTop = 30;\n const padBot = 22;\n const rowH = 17;\n const headH = (c: UmlClass): number => 28 + (c.stereotype !== undefined ? 12 : 0);\n const compH = (list: readonly string[] | undefined): number =>\n (list !== undefined && list.length > 0 ? list.length * rowH : 6) + 8;\n const clsH = (c: UmlClass): number => headH(c) + compH(c.attrs) + compH(c.methods);\n\n const cols = Math.max(1, ...classes.map((c) => c.col));\n const rows = Math.max(1, ...classes.map((c) => c.row));\n const bandH = new Map<number, number>();\n const bandTop = new Map<number, number>();\n let acc = padTop;\n for (let r = 1; r <= rows; r++) {\n const hs = classes.filter((c) => c.row === r).map(clsH);\n const h = hs.length > 0 ? Math.max(...hs) : 60;\n bandH.set(r, h);\n bandTop.set(r, acc);\n acc += h + gapY;\n }\n const xOf = (c: number): number => padX + (c - 1) * (colW + gapX);\n const rectFor = (c: UmlClass): { x: number; y: number; w: number; h: number } => ({\n x: xOf(c.col),\n y: bandTop.get(c.row) ?? padTop,\n w: colW,\n h: clsH(c),\n });\n const byId = new Map(classes.map((c) => [c.id, c]));\n const width = padX * 2 + cols * colW + (cols - 1) * gapX;\n const height = acc - gapY + padBot;\n\n let s =\n `<svg viewBox=\"0 0 ${width} ${height}\" role=\"img\"><title>UML class diagram</title>` +\n `<defs>` +\n `<marker id=\"umlTri\" viewBox=\"0 0 14 14\" refX=\"13\" refY=\"7\" markerWidth=\"15\" markerHeight=\"15\" orient=\"auto-start-reverse\">` +\n `<path d=\"M1,1 L13,7 L1,13 z\" fill=\"#fff\" stroke=\"#1a1a2e\" stroke-width=\"1.2\"/></marker>` +\n `<marker id=\"umlDiaF\" viewBox=\"0 0 20 12\" refX=\"19\" refY=\"6\" markerWidth=\"20\" markerHeight=\"12\" orient=\"auto-start-reverse\">` +\n `<path d=\"M1,6 L10,1 L19,6 L10,11 z\" fill=\"#1a1a2e\"/></marker>` +\n `<marker id=\"umlDiaH\" viewBox=\"0 0 20 12\" refX=\"19\" refY=\"6\" markerWidth=\"20\" markerHeight=\"12\" orient=\"auto-start-reverse\">` +\n `<path d=\"M1,6 L10,1 L19,6 L10,11 z\" fill=\"#fff\" stroke=\"#1a1a2e\" stroke-width=\"1.2\"/></marker>` +\n `<marker id=\"umlOpen\" viewBox=\"0 0 12 12\" refX=\"10\" refY=\"6\" markerWidth=\"12\" markerHeight=\"12\" orient=\"auto-start-reverse\">` +\n `<path d=\"M1,1 L11,6 L1,11\" fill=\"none\" stroke=\"#1a1a2e\" stroke-width=\"1.3\"/></marker>` +\n `</defs>`;\n\n for (const rl of rels) {\n const A = byId.get(rl.from);\n const B = byId.get(rl.to);\n if (!A || !B) continue;\n const p = ortho(rectFor(A), rectFor(B));\n const st = umlRel(rl.kind);\n const start = st.start !== undefined ? ` marker-start=\"url(#${st.start})\"` : '';\n const end = st.end !== undefined ? ` marker-end=\"url(#${st.end})\"` : '';\n s +=\n `<g><path d=\"${p.d}\" fill=\"none\" stroke=\"#1a1a2e\" stroke-width=\"1.3\" stroke-dasharray=\"${st.dash}\"${start}${end}/>` +\n edgePill(p, rl.label) +\n `</g>`;\n }\n\n for (const c of classes) {\n const r = rectFor(c);\n const hh = headH(c);\n const aH = compH(c.attrs);\n const nameY = r.y + (c.stereotype !== undefined ? 24 : 19);\n const stereo =\n c.stereotype !== undefined\n ? `<text x=\"${r.x + r.w / 2}\" y=\"${r.y + 13}\" class=\"uml-stereo\">«${escapeHtml(c.stereotype)}»</text>`\n : '';\n const attrs = (c.attrs ?? [])\n .map(\n (a, j) =>\n `<text x=\"${r.x + 10}\" y=\"${r.y + hh + 14 + j * rowH}\" class=\"uml-row\">${escapeHtml(a)}</text>`,\n )\n .join('');\n const methods = (c.methods ?? [])\n .map(\n (m, j) =>\n `<text x=\"${r.x + 10}\" y=\"${r.y + hh + aH + 14 + j * rowH}\" class=\"uml-row\">${escapeHtml(m)}</text>`,\n )\n .join('');\n s +=\n `<g filter=\"url(#gshadow)\">` +\n `<rect x=\"${r.x}\" y=\"${r.y}\" width=\"${r.w}\" height=\"${r.h}\" rx=\"3\" fill=\"#fff\" stroke=\"#0e54a1\" stroke-width=\"1.3\"/>` +\n stereo +\n `<text x=\"${r.x + r.w / 2}\" y=\"${nameY}\" class=\"uml-name\">${escapeHtml(c.name)}</text>` +\n `<line x1=\"${r.x}\" y1=\"${r.y + hh}\" x2=\"${r.x + r.w}\" y2=\"${r.y + hh}\" class=\"uml-sep\"/>` +\n attrs +\n `<line x1=\"${r.x}\" y1=\"${r.y + hh + aH}\" x2=\"${r.x + r.w}\" y2=\"${r.y + hh + aH}\" class=\"uml-sep\"/>` +\n methods +\n `</g>`;\n }\n\n s += `</svg>`;\n return diagramFrame(\n {\n tag: 'UML',\n tagBg: '#6b21a8',\n ...(data.title !== undefined ? { title: data.title } : {}),\n ...(data.description !== undefined ? { desc: data.description } : {}),\n },\n s,\n );\n}\n","/**\n * Renders a MECE (Mutually Exclusive, Collectively Exhaustive) issue tree —\n * a left-to-right hierarchical tree with depth-based colour stripes.\n *\n * Layout uses DFS positioning: leaves stack vertically, branches center over\n * their first/last child.\n *\n * Ported from doc-studio.jsx `MECETree` + `meceStyle`.\n */\n\nimport type { BlockDataMap } from '@avodado/core';\nimport { escapeHtml } from '../escape.js';\nimport { wrapText } from '../svg/wrapText.js';\nimport { diagramFrame } from './frame.js';\n\ntype Node = NonNullable<BlockDataMap['mece']['nodes']>[number];\n\nconst CHART_COLORS = ['#0e54a1', '#1a6dbe', '#0f766e', '#1f9747', '#6b21a8', '#f7952c'];\n\ninterface MeceStyle {\n fill: string;\n text: string;\n accent: string;\n solid?: boolean;\n}\n\nfunction meceStyle(d: number): MeceStyle {\n if (d === 0) return { fill: '#0e54a1', text: '#fff', accent: '#0e54a1', solid: true };\n const c = CHART_COLORS[d % CHART_COLORS.length] ?? '#0e54a1';\n return { fill: '#fff', text: c, accent: c };\n}\n\nexport function renderMece(data: BlockDataMap['mece']): string {\n const nodes = data.nodes ?? [];\n const byId = new Map<string, Node>();\n const children = new Map<string, string[]>();\n for (const n of nodes) {\n byId.set(n.id, n);\n children.set(n.id, []);\n }\n const roots: string[] = [];\n for (const n of nodes) {\n if (n.parent !== undefined && byId.has(n.parent)) children.get(n.parent)?.push(n.id);\n else roots.push(n.id);\n }\n\n const pos = new Map<string, number>();\n const depth = new Map<string, number>();\n const seen = new Set<string>();\n let leaf = 0;\n let maxDepth = 0;\n const dfs = (id: string, d: number): void => {\n if (seen.has(id)) return;\n seen.add(id);\n depth.set(id, d);\n if (d > maxDepth) maxDepth = d;\n const ch = children.get(id) ?? [];\n if (ch.length === 0) {\n pos.set(id, leaf);\n leaf += 1;\n } else {\n for (const c of ch) dfs(c, d + 1);\n const first = pos.get(ch[0] ?? '') ?? 0;\n const last = pos.get(ch[ch.length - 1] ?? '') ?? 0;\n pos.set(id, (first + last) / 2);\n }\n };\n for (const r of roots) dfs(r, 0);\n\n const nodeW = 168;\n const nodeH = 50;\n const gapY = 16;\n const colGap = 56;\n const padX = 24;\n const padTop = 18;\n const padBot = 18;\n const xOf = (id: string): number => padX + (depth.get(id) ?? 0) * (nodeW + colGap);\n const yOf = (id: string): number => padTop + (pos.get(id) ?? 0) * (nodeH + gapY);\n const width = padX * 2 + (maxDepth + 1) * nodeW + maxDepth * colGap;\n const height = padTop + Math.max(leaf, 1) * (nodeH + gapY) - gapY + padBot;\n\n let s = `<svg viewBox=\"0 0 ${width} ${height}\" role=\"img\"><title>Issue tree</title>`;\n\n // links\n for (const n of nodes) {\n if (n.parent === undefined || !byId.has(n.parent) || !pos.has(n.id)) continue;\n const px = xOf(n.parent) + nodeW;\n const pcy = yOf(n.parent) + nodeH / 2;\n const cx = xOf(n.id);\n const ccy = yOf(n.id) + nodeH / 2;\n const midX = (px + cx) / 2;\n s += `<path class=\"tree-link\" d=\"M ${px} ${pcy} H ${midX} V ${ccy} H ${cx}\"/>`;\n }\n\n // nodes — wrap label to fit inside the box (max width ~150px, ~20 chars per line).\n // If a note is present, the label is single-line; otherwise allow up to two lines.\n for (const n of nodes) {\n if (!pos.has(n.id)) continue;\n const x = xOf(n.id);\n const y = yOf(n.id);\n const st = meceStyle(depth.get(n.id) ?? 0);\n const stroke = st.solid === true ? 'none' : st.accent;\n const stripe =\n st.solid === true\n ? ''\n : `<rect x=\"${x}\" y=\"${y}\" width=\"5\" height=\"${nodeH}\" rx=\"2\" fill=\"${st.accent}\"/>`;\n const labelX = x + (st.solid === true ? nodeW / 2 : 14);\n const anchor = st.solid === true ? 'middle' : 'start';\n const lines = wrapText(n.label, st.solid === true ? 22 : 20, n.note !== undefined ? 1 : 2);\n const startY =\n lines.length === 2\n ? y + 22\n : y + (n.note !== undefined ? 22 : 30);\n const labelTexts = lines\n .map(\n (ln, j) =>\n `<text x=\"${labelX}\" y=\"${startY + j * 14}\" class=\"blk-name\" fill=\"${st.text}\" text-anchor=\"${anchor}\">${escapeHtml(ln)}</text>`,\n )\n .join('');\n const note =\n n.note !== undefined\n ? `<text x=\"${labelX}\" y=\"${y + 38}\" class=\"ft-note\" fill=\"${st.solid === true ? '#cfe0f3' : st.accent}\" text-anchor=\"${anchor}\">${escapeHtml(n.note)}</text>`\n : '';\n s +=\n `<g filter=\"url(#gshadow)\">` +\n `<rect x=\"${x}\" y=\"${y}\" width=\"${nodeW}\" height=\"${nodeH}\" rx=\"6\" fill=\"${st.fill}\" stroke=\"${stroke}\" stroke-width=\"1.3\"/>` +\n stripe +\n labelTexts +\n note +\n `</g>`;\n }\n\n s += `</svg>`;\n return diagramFrame(\n {\n tag: 'MECE',\n tagBg: '#0f766e',\n ...(data.title !== undefined ? { title: data.title } : {}),\n ...(data.description !== undefined ? { desc: data.description } : {}),\n },\n s,\n );\n}\n","/**\n * Renders a top-down component tree — typical React/Vue hierarchy. Each node\n * has a `kind` (root, layout, page, component, leaf, provider, hook, store)\n * that drives its colour.\n *\n * Layout uses DFS positioning, children laid out left-to-right, parents\n * centered above their first/last child.\n *\n * Ported from doc-studio.jsx `ComponentTree` + `ftStyle`.\n */\n\nimport type { BlockDataMap } from '@avodado/core';\nimport { escapeHtml } from '../escape.js';\nimport { wrapText } from '../svg/wrapText.js';\nimport { diagramFrame } from './frame.js';\n\ntype Node = NonNullable<BlockDataMap['frontend']['nodes']>[number];\n\ninterface FtStyle {\n accent: string;\n fill: string;\n text: string;\n solid?: boolean;\n}\n\nfunction ftStyle(kind: string | undefined): FtStyle {\n switch ((kind ?? 'component').toLowerCase()) {\n case 'root':\n return { accent: '#0e54a1', fill: '#0e54a1', text: '#fff', solid: true };\n case 'layout':\n return { accent: '#0f766e', fill: '#ccfbf1', text: '#0f4f49' };\n case 'page':\n return { accent: '#0e54a1', fill: '#e5eff8', text: '#0a3a6e' };\n case 'component':\n return { accent: '#1f9747', fill: '#dcf1e2', text: '#0f3d22' };\n case 'leaf':\n return { accent: '#6b7280', fill: '#f3f4f6', text: '#374151' };\n case 'provider':\n case 'context':\n return { accent: '#6b21a8', fill: '#ede9fe', text: '#4a1772' };\n case 'hook':\n return { accent: '#7c3aed', fill: '#ede9fe', text: '#4a1772' };\n case 'store':\n case 'state':\n return { accent: '#f7952c', fill: '#fde7cd', text: '#7a3d00' };\n default:\n return { accent: '#1f9747', fill: '#dcf1e2', text: '#0f3d22' };\n }\n}\n\nexport function renderFrontend(data: BlockDataMap['frontend']): string {\n const nodes = data.nodes ?? [];\n const byId = new Map<string, Node>();\n const children = new Map<string, string[]>();\n for (const n of nodes) {\n byId.set(n.id, n);\n children.set(n.id, []);\n }\n const roots: string[] = [];\n for (const n of nodes) {\n if (n.parent !== undefined && byId.has(n.parent)) children.get(n.parent)?.push(n.id);\n else roots.push(n.id);\n }\n\n const pos = new Map<string, number>();\n const depth = new Map<string, number>();\n const seen = new Set<string>();\n let leaf = 0;\n let maxDepth = 0;\n const dfs = (id: string, d: number): void => {\n if (seen.has(id)) return;\n seen.add(id);\n depth.set(id, d);\n if (d > maxDepth) maxDepth = d;\n const ch = children.get(id) ?? [];\n if (ch.length === 0) {\n pos.set(id, leaf);\n leaf += 1;\n } else {\n for (const c of ch) dfs(c, d + 1);\n const first = pos.get(ch[0] ?? '') ?? 0;\n const last = pos.get(ch[ch.length - 1] ?? '') ?? 0;\n pos.set(id, (first + last) / 2);\n }\n };\n for (const r of roots) dfs(r, 0);\n\n const nodeW = 158;\n const nodeH = 56;\n const gapX = 24;\n const levelGap = 96;\n const padX = 24;\n const padTop = 18;\n const padBot = 18;\n const slot = Math.max(leaf, 1);\n const xOf = (id: string): number => padX + (pos.get(id) ?? 0) * (nodeW + gapX);\n const yOf = (id: string): number => padTop + (depth.get(id) ?? 0) * levelGap;\n const width = padX * 2 + slot * (nodeW + gapX) - gapX;\n const height = padTop + maxDepth * levelGap + nodeH + padBot;\n\n let s = `<svg viewBox=\"0 0 ${width} ${height}\" role=\"img\"><title>Component tree</title>`;\n\n // links\n for (const n of nodes) {\n if (n.parent === undefined || !byId.has(n.parent) || !pos.has(n.id)) continue;\n const pcx = xOf(n.parent) + nodeW / 2;\n const pby = yOf(n.parent) + nodeH;\n const ccx = xOf(n.id) + nodeW / 2;\n const cty = yOf(n.id);\n const midY = (pby + cty) / 2;\n s += `<path class=\"tree-link\" d=\"M ${pcx} ${pby} V ${midY} H ${ccx} V ${cty}\"/>`;\n }\n\n // nodes — wrap name to fit inside the box (~158px, ~20 chars per line).\n // With a note: single-line name. Without a note: up to two lines.\n for (const n of nodes) {\n if (!pos.has(n.id)) continue;\n const x = xOf(n.id);\n const y = yOf(n.id);\n const st = ftStyle(n.kind);\n const stroke = st.solid === true ? 'none' : st.accent;\n const stripe =\n st.solid === true\n ? ''\n : `<rect x=\"${x}\" y=\"${y}\" width=\"5\" height=\"${nodeH}\" rx=\"2\" fill=\"${st.accent}\"/>`;\n const labelX = x + (st.solid === true ? nodeW / 2 : 14);\n const anchor = st.solid === true ? 'middle' : 'start';\n const lines = wrapText(n.name, st.solid === true ? 20 : 18, n.note !== undefined ? 1 : 2);\n const startY =\n lines.length === 2\n ? y + 25\n : y + (n.note !== undefined ? 25 : 33);\n const labelTexts = lines\n .map(\n (ln, j) =>\n `<text x=\"${labelX}\" y=\"${startY + j * 14}\" class=\"blk-name\" fill=\"${st.text}\" text-anchor=\"${anchor}\">${escapeHtml(ln)}</text>`,\n )\n .join('');\n const note =\n n.note !== undefined\n ? `<text x=\"${labelX}\" y=\"${y + 41}\" class=\"ft-note\" fill=\"${st.solid === true ? '#cfe0f3' : st.accent}\" text-anchor=\"${anchor}\">${escapeHtml(n.note)}</text>`\n : '';\n s +=\n `<g filter=\"url(#gshadow)\">` +\n `<rect x=\"${x}\" y=\"${y}\" width=\"${nodeW}\" height=\"${nodeH}\" rx=\"8\" fill=\"${st.fill}\" stroke=\"${stroke}\" stroke-width=\"1.2\"/>` +\n stripe +\n labelTexts +\n note +\n `</g>`;\n }\n\n s += `</svg>`;\n return diagramFrame(\n {\n tag: 'FE',\n tagBg: '#0f766e',\n ...(data.title !== undefined ? { title: data.title } : {}),\n ...(data.description !== undefined ? { desc: data.description } : {}),\n },\n s,\n );\n}\n","/**\n * Renders a cluster diagram (Kubernetes-style) — nested cluster boxes with\n * service tiles inside, optional replica counts as bar marks, and\n * orthogonal-routed edges between services across clusters.\n *\n * Ported from doc-studio.jsx `ClusterDiagram`.\n */\n\nimport type { BlockDataMap } from '@avodado/core';\nimport { escapeHtml } from '../escape.js';\nimport { ortho } from '../svg/ortho.js';\nimport { edgePill } from '../svg/edgePill.js';\nimport { blockStyle, nodeGlyph, GEDGE } from '../svg/blockStyle.js';\nimport { diagramFrame } from './frame.js';\n\ntype Service = NonNullable<BlockDataMap['cluster']['services']>[number];\n\nexport function renderCluster(data: BlockDataMap['cluster']): string {\n const clusters = data.clusters ?? [];\n const services = data.services ?? [];\n const edges = data.edges ?? [];\n const svcByCluster = new Map<string, Service[]>();\n for (const c of clusters) svcByCluster.set(c.id, []);\n for (const sv of services) {\n const list = svcByCluster.get(sv.cluster);\n if (list !== undefined) list.push(sv);\n }\n const serviceW = 158;\n const serviceH = 78;\n const gapS = 22;\n const cPadX = 26;\n const cHeader = 38;\n const cPadTop = 18;\n const cPadBot = 22;\n const cGap = 28;\n const outerPad = 26;\n\n let maxPerCluster = 1;\n for (const list of svcByCluster.values()) {\n if (list.length > maxPerCluster) maxPerCluster = list.length;\n }\n const cols = Math.min(4, Math.max(1, maxPerCluster));\n const clusterW = cols * serviceW + (cols - 1) * gapS + cPadX * 2;\n const width = outerPad * 2 + clusterW;\n\n interface Rect {\n x: number;\n y: number;\n w: number;\n h: number;\n }\n const rects = new Map<string, Rect>();\n interface ClusterBox {\n c: NonNullable<BlockDataMap['cluster']['clusters']>[number];\n x: number;\n y: number;\n w: number;\n h: number;\n }\n const clusterBoxes: ClusterBox[] = [];\n\n let y = outerPad;\n for (const c of clusters) {\n const list = svcByCluster.get(c.id) ?? [];\n const rows = Math.max(1, Math.ceil(list.length / cols));\n const h = cHeader + cPadTop + rows * serviceH + (rows - 1) * gapS + cPadBot;\n const cx = outerPad;\n clusterBoxes.push({ c, x: cx, y, w: clusterW, h });\n list.forEach((sv, i) => {\n const r = Math.floor(i / cols);\n const col = i % cols;\n rects.set(sv.id, {\n x: cx + cPadX + col * (serviceW + gapS),\n y: y + cHeader + cPadTop + r * (serviceH + gapS),\n w: serviceW,\n h: serviceH,\n });\n });\n y += h + cGap;\n }\n const height = y - cGap + outerPad;\n\n let s = `<svg viewBox=\"0 0 ${width} ${height}\" role=\"img\"><title>Cluster diagram</title>`;\n\n // cluster shells\n for (const cb of clusterBoxes) {\n const kindLabel =\n cb.c.kind !== undefined\n ? `<text x=\"${cb.x + cb.w - 14}\" y=\"${cb.y + 21}\" class=\"cl-kind\">${escapeHtml(cb.c.kind)}</text>`\n : '';\n s +=\n `<g>` +\n `<rect x=\"${cb.x}\" y=\"${cb.y}\" width=\"${cb.w}\" height=\"${cb.h}\" rx=\"12\" fill=\"#0e54a1\" fill-opacity=\"0.035\" stroke=\"#0e54a1\" stroke-width=\"1.4\" stroke-dasharray=\"8 5\"/>` +\n `<rect x=\"${cb.x}\" y=\"${cb.y}\" width=\"${cb.w}\" height=\"${cHeader}\" rx=\"12\" fill=\"#0e54a1\"/>` +\n `<rect x=\"${cb.x}\" y=\"${cb.y + cHeader - 12}\" width=\"${cb.w}\" height=\"12\" fill=\"#0e54a1\"/>` +\n `<text x=\"${cb.x + 16}\" y=\"${cb.y + 21}\" class=\"cl-head\">${escapeHtml(cb.c.label)}</text>` +\n kindLabel +\n `</g>`;\n }\n\n // edges\n for (const e of edges) {\n const A = rects.get(e.from);\n const B = rects.get(e.to);\n if (!A || !B) continue;\n const p = ortho(A, B);\n const st = GEDGE[e.kind ?? 'solid'] ?? GEDGE['solid'] ?? {\n stroke: '#1a1a2e',\n sw: 1.4,\n dash: '',\n marker: 'gArrow',\n err: false,\n };\n s +=\n `<g><path d=\"${p.d}\" fill=\"none\" stroke=\"${st.stroke}\" stroke-width=\"${st.sw}\" stroke-dasharray=\"${st.dash}\" marker-end=\"url(#${st.marker})\"/>` +\n edgePill(p, e.label, st.err) +\n `</g>`;\n }\n\n // services\n for (const sv of services) {\n const r = rects.get(sv.id);\n if (r === undefined) continue;\n const st = blockStyle(sv.kind);\n const gl = nodeGlyph(sv.kind, r.x + 14, r.y + 14, st.accent);\n const nx = gl.length > 0 ? r.x + 38 : r.x + 14;\n const reps = sv.replicas ?? 0;\n const techLine =\n sv.tech !== undefined\n ? `<text x=\"${nx}\" y=\"${r.y + 42}\" class=\"blk-tech\" fill=\"${st.accent}\">${escapeHtml(sv.tech)}</text>`\n : '';\n const repIndicator =\n reps > 0\n ? (() => {\n const shown = Math.min(reps, 5);\n let bars = '';\n for (let j = 0; j < shown; j++) {\n bars += `<rect x=\"${r.x + 12 + j * 8}\" y=\"${r.y + r.h - 14}\" width=\"5\" height=\"8\" rx=\"1\" fill=\"${st.accent}\" opacity=\"0.7\"/>`;\n }\n return (\n `<g>` +\n bars +\n `<text x=\"${r.x + 12 + shown * 8 + 4}\" y=\"${r.y + r.h - 7}\" class=\"blk-tech\" fill=\"${st.accent}\">×${reps}</text>` +\n `</g>`\n );\n })()\n : '';\n s +=\n `<g filter=\"url(#gshadow)\">` +\n `<rect x=\"${r.x}\" y=\"${r.y}\" width=\"${r.w}\" height=\"${r.h}\" rx=\"8\" fill=\"${st.fill}\" stroke=\"${st.accent}\" stroke-width=\"1.2\"/>` +\n `<rect x=\"${r.x}\" y=\"${r.y}\" width=\"5\" height=\"${r.h}\" rx=\"2\" fill=\"${st.accent}\"/>` +\n gl +\n `<text x=\"${nx}\" y=\"${r.y + (sv.tech !== undefined ? 26 : 30)}\" class=\"blk-name\" fill=\"${st.text}\" style=\"font-size:12px\">${escapeHtml(sv.label)}</text>` +\n techLine +\n repIndicator +\n `</g>`;\n }\n\n s += `</svg>`;\n return diagramFrame(\n {\n tag: 'CLUSTER',\n tagBg: '#0e54a1',\n ...(data.title !== undefined ? { title: data.title } : {}),\n ...(data.description !== undefined ? { desc: data.description } : {}),\n },\n s,\n );\n}\n","/**\n * Block-graph rendering — backs `block`, `infra`, `event`, `ddd`, and\n * `network`. Two layout modes share the same data shape:\n *\n * - **Layered:** if `spec.layers` is present, nodes are placed in horizontal\n * bands by their `layer` index.\n * - **Grid:** otherwise nodes use `(col, row, w?)` placements, optionally\n * wrapped in dashed group boxes.\n *\n * Ported from doc-studio.jsx `GridBlock` + `LayeredBlock` + `BlockDiagram`.\n */\n\nimport type { BlockDataMap } from '@avodado/core';\nimport { escapeHtml } from '../escape.js';\nimport { ortho } from '../svg/ortho.js';\nimport { edgePill } from '../svg/edgePill.js';\nimport { blockStyle, nodeGlyph, GEDGE } from '../svg/blockStyle.js';\nimport { safeColor } from '../sanitize.js';\nimport { diagramFrame } from './frame.js';\n\ntype Data = BlockDataMap['block'];\ntype Group = NonNullable<Data['groups']>[number];\ntype Node = NonNullable<Data['nodes']>[number];\n\ninterface FrameOpts {\n readonly tag: string;\n readonly tagBg?: string;\n readonly tagClass?: string;\n}\n\nconst FALLBACK_EDGE = {\n stroke: '#1a1a2e',\n sw: 1.4,\n dash: '',\n marker: 'gArrow',\n err: false,\n} as const;\n\nfunction renderGrid(data: Data): string {\n const groups = data.groups ?? [];\n const nodes = data.nodes ?? [];\n const edges = data.edges ?? [];\n const cellW = 184;\n const cellH = 82;\n const gapX = 56;\n const gapY = 58;\n const padX = 26;\n const padTop = 30;\n const padBot = 20;\n const cols = Math.max(\n 1,\n ...nodes.map((n) => (n.col ?? 1) + ((n.w ?? 1) - 1)),\n ...groups.map((g) => g.col + (g.cols ?? 1) - 1),\n );\n const rows = Math.max(\n 1,\n ...nodes.map((n) => n.row ?? 1),\n ...groups.map((g) => g.row + (g.rows ?? 1) - 1),\n );\n const xOf = (c: number): number => padX + (c - 1) * (cellW + gapX);\n const yOf = (r: number): number => padTop + (r - 1) * (cellH + gapY);\n const rectFor = (n: Node): { x: number; y: number; w: number; h: number } => ({\n x: xOf(n.col ?? 1),\n y: yOf(n.row ?? 1),\n w: (n.w ?? 1) * cellW + ((n.w ?? 1) - 1) * gapX,\n h: cellH,\n });\n const groupRect = (g: Group): { x: number; y: number; w: number; h: number } => ({\n x: xOf(g.col) - 16,\n y: yOf(g.row) - 22,\n w: (g.cols ?? 1) * cellW + ((g.cols ?? 1) - 1) * gapX + 32,\n h: (g.rows ?? 1) * cellH + ((g.rows ?? 1) - 1) * gapY + 38,\n });\n const byId = new Map(nodes.map((n) => [n.id, n]));\n const width = padX * 2 + cols * cellW + (cols - 1) * gapX;\n const height = padTop + rows * cellH + (rows - 1) * gapY + padBot;\n\n // Largest groups first so smaller ones layer on top.\n const sortedGroups = [...groups].sort(\n (a, b) => (b.cols ?? 1) * (b.rows ?? 1) - (a.cols ?? 1) * (a.rows ?? 1),\n );\n\n let s = `<svg viewBox=\"0 0 ${width} ${height}\" role=\"img\"><title>Block diagram</title>`;\n\n for (const g of sortedGroups) {\n const r = groupRect(g);\n const col = safeColor(g.color, '#0e54a1');\n // AWS-console-style zone: dashed tinted boundary + a solid label badge.\n // 2D containers (e.g. a VPC) get a centered title pill on the top border;\n // band-shaped zones (e.g. subnets) get a top-left tab — so a VPC and the\n // subnet sharing its corner never collide.\n const badgeW = 16 + g.label.length * 6.4;\n const isContainer = (g.cols ?? 1) >= 2 && (g.rows ?? 1) >= 2;\n const zone = `<rect x=\"${r.x}\" y=\"${r.y}\" width=\"${r.w}\" height=\"${r.h}\" rx=\"10\" fill=\"${col}\" fill-opacity=\"0.06\" stroke=\"${col}\" stroke-opacity=\"0.55\" stroke-width=\"1.3\" stroke-dasharray=\"7 5\"/>`;\n const label = isContainer\n ? `<rect x=\"${r.x + (r.w - badgeW) / 2}\" y=\"${r.y - 1}\" width=\"${badgeW}\" height=\"20\" rx=\"10\" fill=\"${col}\"/>` +\n `<text x=\"${r.x + r.w / 2}\" y=\"${r.y + 13}\" class=\"grp-label\" fill=\"#fff\" text-anchor=\"middle\">${escapeHtml(g.label)}</text>`\n : `<path d=\"M${r.x} ${r.y + 20} L${r.x} ${r.y + 10} a10 10 0 0 1 10 -10 h${badgeW - 10} v20 z\" fill=\"${col}\"/>` +\n `<text x=\"${r.x + badgeW / 2}\" y=\"${r.y + 14}\" class=\"grp-label\" fill=\"#fff\" text-anchor=\"middle\">${escapeHtml(g.label)}</text>`;\n s += `<g>${zone}${label}</g>`;\n }\n\n for (const e of edges) {\n const A = byId.get(e.from);\n const B = byId.get(e.to);\n if (!A || !B) continue;\n const p = ortho(rectFor(A), rectFor(B));\n const st = GEDGE[e.kind ?? 'solid'] ?? GEDGE['solid'] ?? FALLBACK_EDGE;\n s +=\n `<g><path d=\"${p.d}\" fill=\"none\" stroke=\"${st.stroke}\" stroke-width=\"${st.sw}\" stroke-dasharray=\"${st.dash}\" marker-end=\"url(#${st.marker})\"/>` +\n edgePill(p, e.label, st.err) +\n `</g>`;\n }\n\n for (const n of nodes) {\n const r = rectFor(n);\n const st = blockStyle(n.kind);\n const gl = nodeGlyph(n.kind, r.x + 16, r.y + 16, st.accent);\n const nx = gl.length > 0 ? r.x + 42 : r.x + 16;\n const chip =\n gl.length === 0 && n.kind !== undefined\n ? `<text x=\"${r.x + 16}\" y=\"${r.y + 22}\" class=\"blk-chip\" fill=\"${st.accent}\">${escapeHtml(n.kind)}</text>`\n : '';\n const tech =\n n.tech !== undefined\n ? `<text x=\"${nx}\" y=\"${r.y + (gl.length > 0 ? 50 : 60)}\" class=\"blk-tech\" fill=\"${st.accent}\">${escapeHtml(n.tech)}</text>`\n : '';\n s +=\n `<g filter=\"url(#gshadow)\">` +\n `<rect x=\"${r.x}\" y=\"${r.y}\" width=\"${r.w}\" height=\"${r.h}\" rx=\"9\" fill=\"${st.fill}\" stroke=\"${st.accent}\" stroke-width=\"1.2\"/>` +\n `<rect x=\"${r.x}\" y=\"${r.y}\" width=\"5\" height=\"${r.h}\" rx=\"2\" fill=\"${st.accent}\"/>` +\n gl +\n chip +\n `<text x=\"${nx}\" y=\"${r.y + (gl.length > 0 ? 34 : 44)}\" class=\"blk-name\" fill=\"${st.text}\">${escapeHtml(n.name)}</text>` +\n tech +\n `</g>`;\n }\n\n s += `</svg>`;\n return s;\n}\n\nfunction renderLayered(data: Data): string {\n const layers = data.layers ?? [];\n const nodes = data.nodes ?? [];\n const edges = data.edges ?? [];\n const byLayer: Node[][] = layers.map((_, i) =>\n nodes.filter((n) => (n.layer ?? 0) === i),\n );\n const outerPad = 28;\n const titleH = data.systemLabel !== undefined ? 32 : 16;\n const labelW = 132;\n const bandPadX = 16;\n const bandPadY = 14;\n const bandGap = 12;\n const nodeW = 158;\n const nodeH = 56;\n const nodeGap = 22;\n const rowW = (c: number): number => c * nodeW + (c - 1) * nodeGap;\n const contentW = Math.max(220, ...byLayer.map((a) => rowW(Math.max(a.length, 1))));\n const bandInnerW = contentW + bandPadX * 2;\n const bandH = nodeH + bandPadY * 2;\n const innerX = outerPad + 14;\n const contentX = innerX + labelW;\n const width = contentX + bandInnerW + 14 + outerPad;\n const top = outerPad + titleH;\n const bandY = (i: number): number => top + i * (bandH + bandGap);\n const height = bandY(layers.length) - bandGap + outerPad;\n\n const rects = new Map<string, { x: number; y: number; w: number; h: number }>();\n byLayer.forEach((arr, i) => {\n const startX = contentX + (bandInnerW - rowW(arr.length)) / 2;\n arr.forEach((n, j) => {\n rects.set(n.id, {\n x: startX + j * (nodeW + nodeGap),\n y: bandY(i) + bandPadY,\n w: nodeW,\n h: nodeH,\n });\n });\n });\n\n let s =\n `<svg viewBox=\"0 0 ${width} ${height}\" role=\"img\"><title>Layered architecture</title>` +\n `<rect x=\"${outerPad}\" y=\"${outerPad}\" width=\"${width - outerPad * 2}\" height=\"${height - outerPad * 2}\" rx=\"12\" fill=\"none\" stroke=\"#0e54a1\" stroke-width=\"1.5\"/>`;\n if (data.systemLabel !== undefined) {\n s += `<text x=\"${outerPad + 14}\" y=\"${outerPad + 18}\" class=\"grp-label\" fill=\"#0e54a1\">${escapeHtml(data.systemLabel)}</text>`;\n }\n for (let i = 0; i < layers.length; i++) {\n const L = layers[i];\n if (L === undefined) continue;\n s +=\n `<g>` +\n `<rect x=\"${innerX}\" y=\"${bandY(i)}\" width=\"${labelW + bandInnerW}\" height=\"${bandH}\" rx=\"6\" fill=\"#f3f4f6\" stroke=\"#d1d5db\"/>` +\n `<rect x=\"${innerX}\" y=\"${bandY(i)}\" width=\"${labelW}\" height=\"${bandH}\" rx=\"6\" fill=\"#0e54a1\"/>` +\n `<rect x=\"${innerX + labelW - 8}\" y=\"${bandY(i)}\" width=\"8\" height=\"${bandH}\" fill=\"#0e54a1\"/>` +\n `<text x=\"${innerX + 14}\" y=\"${bandY(i) + bandH / 2 + 4}\" class=\"layer-label\">${escapeHtml(L.label)}</text>` +\n `</g>`;\n }\n\n for (const e of edges) {\n const A = rects.get(e.from);\n const B = rects.get(e.to);\n if (!A || !B) continue;\n const p = ortho(A, B);\n const st = GEDGE[e.kind ?? 'solid'] ?? GEDGE['solid'] ?? FALLBACK_EDGE;\n s +=\n `<g><path d=\"${p.d}\" fill=\"none\" stroke=\"${st.stroke}\" stroke-width=\"${st.sw}\" stroke-dasharray=\"${st.dash}\" marker-end=\"url(#${st.marker})\"/>` +\n edgePill(p, e.label, st.err) +\n `</g>`;\n }\n\n for (const n of nodes) {\n const r = rects.get(n.id);\n if (r === undefined) continue;\n const st = blockStyle(n.kind);\n const gl = nodeGlyph(n.kind, r.x + 12, r.y + 12, st.accent);\n const nx = gl.length > 0 ? r.x + 34 : r.x + 14;\n const tech =\n n.tech !== undefined\n ? `<text x=\"${nx}\" y=\"${r.y + 42}\" class=\"blk-tech\" fill=\"${st.accent}\">${escapeHtml(n.tech)}</text>`\n : '';\n s +=\n `<g filter=\"url(#gshadow)\">` +\n `<rect x=\"${r.x}\" y=\"${r.y}\" width=\"${r.w}\" height=\"${r.h}\" rx=\"8\" fill=\"${st.fill}\" stroke=\"${st.accent}\" stroke-width=\"1.2\"/>` +\n `<rect x=\"${r.x}\" y=\"${r.y}\" width=\"5\" height=\"${r.h}\" rx=\"2\" fill=\"${st.accent}\"/>` +\n gl +\n `<text x=\"${nx}\" y=\"${r.y + (n.tech !== undefined ? 26 : 33)}\" class=\"blk-name\" fill=\"${st.text}\">${escapeHtml(n.name)}</text>` +\n tech +\n `</g>`;\n }\n\n s += `</svg>`;\n return s;\n}\n\nfunction renderBlockGraph(data: Data, frame: FrameOpts): string {\n const svg = data.layers !== undefined && data.layers.length > 0 ? renderLayered(data) : renderGrid(data);\n const opts: Parameters<typeof diagramFrame>[0] = {\n tag: frame.tag,\n ...(frame.tagClass !== undefined ? { tagClass: frame.tagClass } : {}),\n ...(frame.tagBg !== undefined ? { tagBg: frame.tagBg } : {}),\n ...(data.title !== undefined ? { title: data.title } : {}),\n ...(data.description !== undefined ? { desc: data.description } : {}),\n };\n return diagramFrame(opts, svg);\n}\n\n/** `block` block — generic architecture (grid or layered). */\nexport function renderBlock(data: BlockDataMap['block']): string {\n return renderBlockGraph(data, { tag: 'ARCH', tagBg: '#0f766e' });\n}\n/** `infra` block — deployment topology. */\nexport function renderInfra(data: BlockDataMap['infra']): string {\n return renderBlockGraph(data, { tag: 'INFRA', tagBg: '#0078d4' });\n}\n/** `event` block — pub/sub choreography. */\nexport function renderEvent(data: BlockDataMap['event']): string {\n return renderBlockGraph(data, { tag: 'EVENT', tagBg: '#0f766e' });\n}\n/** `ddd` block — bounded-context map. */\nexport function renderDdd(data: BlockDataMap['ddd']): string {\n return renderBlockGraph(data, { tag: 'DDD', tagBg: '#6b21a8' });\n}\n/** `network` block — security zones / network topology. */\nexport function renderNetwork(data: BlockDataMap['network']): string {\n return renderBlockGraph(data, { tag: 'ZONES', tagBg: '#991b1b' });\n}\n","/**\n * Frontend / backend module-graph rendering — design-pattern nodes (engine,\n * interface, strategy, controller, service, repo, worker, middleware, model,\n * db, cache, queue, hook, store, external) with kind-specific styling and\n * UML stereotype banners on interface nodes.\n *\n * Backs `felogic` and `belogic` (same shape, different frame colour).\n *\n * Ported from doc-studio.jsx `FrontendLogic` + `feStyle` + `feEdge`.\n */\n\nimport type { BlockDataMap } from '@avodado/core';\nimport { escapeHtml } from '../escape.js';\nimport { ortho } from '../svg/ortho.js';\nimport { edgePill } from '../svg/edgePill.js';\nimport { nodeGlyph } from '../svg/blockStyle.js';\nimport { safeColor } from '../sanitize.js';\nimport { diagramFrame } from './frame.js';\n\ntype Data = BlockDataMap['felogic'];\ntype Group = NonNullable<Data['groups']>[number];\ntype Node = NonNullable<Data['nodes']>[number];\n\ninterface FeStyle {\n accent: string;\n fill: string;\n text: string;\n solid?: boolean;\n dash?: string;\n stereo?: string;\n cloud?: boolean;\n}\n\nfunction feStyle(kind: string | undefined): FeStyle {\n switch ((kind ?? 'component').toLowerCase()) {\n case 'engine':\n case 'core':\n return { accent: '#0e54a1', fill: '#0e54a1', text: '#fff', solid: true };\n case 'interface':\n return { accent: '#6b21a8', fill: '#fff', text: '#4a1772', dash: '5 4', stereo: 'interface' };\n case 'strategy':\n case 'adapter':\n case 'impl':\n return { accent: '#7c3aed', fill: '#ede9fe', text: '#4a1772' };\n case 'controller':\n case 'handler':\n case 'route':\n return { accent: '#0e54a1', fill: '#cfe0f3', text: '#0a3a6e' };\n case 'service':\n case 'usecase':\n case 'apiclient':\n case 'client':\n return { accent: '#1a6dbe', fill: '#e5eff8', text: '#0a3a6e' };\n case 'repository':\n case 'repo':\n case 'dao':\n return { accent: '#0f766e', fill: '#ccfbf1', text: '#0f4f49' };\n case 'worker':\n case 'consumer':\n return { accent: '#1f9747', fill: '#dcf1e2', text: '#0f3d22' };\n case 'middleware':\n return { accent: '#6b7280', fill: '#f3f4f6', text: '#374151' };\n case 'model':\n case 'entity':\n return { accent: '#6b21a8', fill: '#ede9fe', text: '#4a1772' };\n case 'db':\n case 'store':\n case 'database':\n return { accent: '#f7952c', fill: '#fde7cd', text: '#7a3d00' };\n case 'cache':\n return { accent: '#0891b2', fill: '#cffafe', text: '#0e4f5c' };\n case 'queue':\n case 'bus':\n case 'broker':\n return { accent: '#0f766e', fill: '#ccfbf1', text: '#0f4f49' };\n case 'state':\n case 'store_state':\n return { accent: '#f7952c', fill: '#fde7cd', text: '#7a3d00' };\n case 'hook':\n return { accent: '#7c3aed', fill: '#ede9fe', text: '#4a1772' };\n case 'external':\n case 'backend':\n case 'egress':\n case 'api':\n case 'thirdparty':\n return { accent: '#6b7280', fill: '#f3f4f6', text: '#374151', cloud: true };\n default:\n return { accent: '#1f9747', fill: '#dcf1e2', text: '#0f3d22' };\n }\n}\n\ninterface FeEdgeStyle {\n stroke: string;\n sw: number;\n dash: string;\n marker: string;\n}\n\nfunction feEdge(kind: string | undefined): FeEdgeStyle {\n switch ((kind ?? 'uses').toLowerCase()) {\n case 'implements':\n return { stroke: '#6b21a8', sw: 1.4, dash: '5 4', marker: 'gTri' };\n case 'egress':\n case 'https':\n case 'api':\n return { stroke: '#0e54a1', sw: 2, dash: '', marker: 'gArrow' };\n case 'reads':\n case 'dashed':\n case 'async':\n return { stroke: '#6b7280', sw: 1.4, dash: '5 4', marker: 'gSoft' };\n default:\n return { stroke: '#1a1a2e', sw: 1.4, dash: '', marker: 'gArrow' };\n }\n}\n\nconst GLYPH_KINDS = new Set([\n 'db',\n 'store',\n 'database',\n 'bucket',\n 'blob',\n 'object',\n 'queue',\n 'bus',\n 'broker',\n 'cache',\n 'external',\n 'backend',\n 'api',\n 'thirdparty',\n 'function',\n]);\nconst GLYPH_REMAP: Record<string, string> = {\n database: 'db',\n store: 'db',\n bus: 'queue',\n broker: 'queue',\n backend: 'external',\n api: 'external',\n thirdparty: 'external',\n};\n\ninterface FrameOpts {\n readonly tag: string;\n readonly tagBg?: string;\n}\n\nfunction renderFelogicGraph(data: Data, frame: FrameOpts): string {\n const groups = data.groups ?? [];\n const nodes = data.nodes ?? [];\n const edges = data.edges ?? [];\n const cellW = 178;\n const cellH = 80;\n const gapX = 54;\n const gapY = 60;\n const padX = 26;\n const padTop = 30;\n const padBot = 20;\n const cols = Math.max(\n 1,\n ...nodes.map((n) => n.col + ((n.w ?? 1) - 1)),\n ...groups.map((g) => g.col + (g.cols ?? 1) - 1),\n );\n const rows = Math.max(\n 1,\n ...nodes.map((n) => n.row),\n ...groups.map((g) => g.row + (g.rows ?? 1) - 1),\n );\n const xOf = (c: number): number => padX + (c - 1) * (cellW + gapX);\n const yOf = (r: number): number => padTop + (r - 1) * (cellH + gapY);\n const rectFor = (n: Node): { x: number; y: number; w: number; h: number } => ({\n x: xOf(n.col),\n y: yOf(n.row),\n w: (n.w ?? 1) * cellW + ((n.w ?? 1) - 1) * gapX,\n h: cellH,\n });\n const groupRect = (g: Group): { x: number; y: number; w: number; h: number } => ({\n x: xOf(g.col) - 16,\n y: yOf(g.row) - 22,\n w: (g.cols ?? 1) * cellW + ((g.cols ?? 1) - 1) * gapX + 32,\n h: (g.rows ?? 1) * cellH + ((g.rows ?? 1) - 1) * gapY + 38,\n });\n const byId = new Map(nodes.map((n) => [n.id, n]));\n const width = padX * 2 + cols * cellW + (cols - 1) * gapX;\n const height = padTop + rows * cellH + (rows - 1) * gapY + padBot;\n const sortedGroups = [...groups].sort(\n (a, b) => (b.cols ?? 1) * (b.rows ?? 1) - (a.cols ?? 1) * (a.rows ?? 1),\n );\n\n let s = `<svg viewBox=\"0 0 ${width} ${height}\" role=\"img\"><title>Module graph</title>`;\n\n for (const g of sortedGroups) {\n const r = groupRect(g);\n const col = safeColor(g.color, '#0e54a1');\n s +=\n `<g>` +\n `<rect x=\"${r.x}\" y=\"${r.y}\" width=\"${r.w}\" height=\"${r.h}\" rx=\"10\" fill=\"${col}\" fill-opacity=\"0.05\" stroke=\"${col}\" stroke-opacity=\"0.5\" stroke-width=\"1.2\" stroke-dasharray=\"7 5\"/>` +\n `<text x=\"${r.x + 14}\" y=\"${r.y + 15}\" class=\"grp-label\" fill=\"${col}\">${escapeHtml(g.label)}</text>` +\n `</g>`;\n }\n\n for (const e of edges) {\n const A = byId.get(e.from);\n const B = byId.get(e.to);\n if (!A || !B) continue;\n const p = ortho(rectFor(A), rectFor(B));\n const st = feEdge(e.kind);\n s +=\n `<g><path d=\"${p.d}\" fill=\"none\" stroke=\"${st.stroke}\" stroke-width=\"${st.sw}\" stroke-dasharray=\"${st.dash}\" marker-end=\"url(#${st.marker})\"/>` +\n edgePill(p, e.label) +\n `</g>`;\n }\n\n for (const n of nodes) {\n const r = rectFor(n);\n const st = feStyle(n.kind);\n const k = (n.kind ?? '').toLowerCase();\n const gl = GLYPH_KINDS.has(k) ? nodeGlyph(GLYPH_REMAP[k] ?? k, r.x + 16, r.y + 16, st.accent) : '';\n const nx = st.solid === true ? r.x + r.w / 2 : gl.length > 0 ? r.x + 42 : r.x + 16;\n const anchor = st.solid === true ? 'middle' : 'start';\n const nameY = r.y + (st.stereo !== undefined ? 38 : n.note !== undefined ? 36 : 44);\n const noteY = r.y + (st.stereo !== undefined ? 56 : 52);\n const stroke = st.solid === true ? 'none' : st.accent;\n const dashAttr = st.dash !== undefined ? ` stroke-dasharray=\"${st.dash}\"` : '';\n const stripe =\n st.solid === true\n ? ''\n : `<rect x=\"${r.x}\" y=\"${r.y}\" width=\"5\" height=\"${r.h}\" rx=\"2\" fill=\"${st.accent}\"/>`;\n const stereo =\n st.stereo !== undefined\n ? `<text x=\"${r.x + r.w / 2}\" y=\"${r.y + 20}\" class=\"uml-stereo\">«${escapeHtml(st.stereo)}»</text>`\n : '';\n const note =\n n.note !== undefined\n ? `<text x=\"${nx}\" y=\"${noteY}\" class=\"blk-tech\" fill=\"${st.solid === true ? '#cfe0f3' : st.accent}\" text-anchor=\"${anchor}\">${escapeHtml(n.note)}</text>`\n : '';\n s +=\n `<g filter=\"url(#gshadow)\">` +\n `<rect x=\"${r.x}\" y=\"${r.y}\" width=\"${r.w}\" height=\"${r.h}\" rx=\"9\" fill=\"${st.fill}\" stroke=\"${stroke}\" stroke-width=\"1.2\"${dashAttr}/>` +\n stripe +\n gl +\n stereo +\n `<text x=\"${nx}\" y=\"${nameY}\" class=\"blk-name\" fill=\"${st.text}\" text-anchor=\"${anchor}\">${escapeHtml(n.name)}</text>` +\n note +\n `</g>`;\n }\n\n s += `</svg>`;\n return diagramFrame(\n {\n tag: frame.tag,\n ...(frame.tagBg !== undefined ? { tagBg: frame.tagBg } : {}),\n ...(data.title !== undefined ? { title: data.title } : {}),\n ...(data.description !== undefined ? { desc: data.description } : {}),\n },\n s,\n );\n}\n\n/** `felogic` — frontend module graph (purple LOGIC tag). */\nexport function renderFelogic(data: BlockDataMap['felogic']): string {\n return renderFelogicGraph(data, { tag: 'LOGIC', tagBg: '#6b21a8' });\n}\n/** `belogic` — backend module graph (navy LOGIC tag). */\nexport function renderBelogic(data: BlockDataMap['belogic']): string {\n return renderFelogicGraph(data, { tag: 'LOGIC', tagBg: '#0e54a1' });\n}\n","/**\n * Renders UI mockups — low-fidelity wireframes inside device frames\n * (desktop window, browser, or phone). Each screen is a vertical stack of\n * UI elements (header, button, list, card, …) drawn as neutral placeholders,\n * Excalidraw-flavoured.\n *\n * Screens lay out left-to-right in a row. Element heights are fixed per type;\n * the frame grows to fit its content (phones keep a minimum height).\n */\n\nimport type { BlockDataMap } from '@avodado/core';\nimport { escapeHtml } from '../escape.js';\nimport { wrapText } from '../svg/wrapText.js';\nimport { diagramFrame } from './frame.js';\n\ntype Screen = NonNullable<BlockDataMap['wireframe']['screens']>[number];\ntype Element = NonNullable<Screen['elements']>[number];\n\n/** Inner content width per device (the drawable area inside the frame chrome). */\nfunction contentWidth(device: string): number {\n if (device === 'phone') return 200;\n return 380; // desktop / browser\n}\n\n/** Vertical space one element consumes (its drawn height + the gap below). */\nfunction elementHeight(el: Element): number {\n const rows = Math.max(1, el.rows ?? 1);\n switch (el.type) {\n case 'header':\n return 34;\n case 'subheader':\n return 26;\n case 'text':\n return 16 + (rows - 1) * 12;\n case 'button':\n return 42;\n case 'input':\n case 'search':\n return 42;\n case 'image':\n return 96;\n case 'avatar':\n return 52;\n case 'card':\n return rows * 64 + (rows - 1) * 10;\n case 'list':\n return rows * 40;\n case 'nav':\n return 34;\n case 'tabs':\n return 52;\n case 'divider':\n return 14;\n case 'badge':\n return 26;\n case 'toggle':\n return 30;\n case 'spacer':\n return 18 * rows;\n default:\n return 24;\n }\n}\n\nconst PH = 'fill=\"var(--light-gray)\" stroke=\"var(--rule)\" stroke-width=\"1\"';\n\n/** Draws one element at (x, y) within a content column of width w. Returns SVG. */\nfunction drawElement(el: Element, x: number, y: number, w: number): string {\n const rows = Math.max(1, el.rows ?? 1);\n const label = el.label ?? '';\n const accent =\n el.tone === 'danger'\n ? 'var(--negative)'\n : el.tone === 'muted'\n ? 'var(--gray)'\n : 'var(--navy)';\n const anchorX = el.align === 'c' ? x + w / 2 : el.align === 'r' ? x + w : x;\n const anchor = el.align === 'c' ? 'middle' : el.align === 'r' ? 'end' : 'start';\n\n switch (el.type) {\n case 'header':\n return `<text x=\"${anchorX}\" y=\"${y + 22}\" class=\"wf-h\" fill=\"var(--charcoal)\" text-anchor=\"${anchor}\">${escapeHtml(label || 'Heading')}</text>`;\n case 'subheader':\n return `<text x=\"${anchorX}\" y=\"${y + 17}\" class=\"wf-sub\" fill=\"var(--gray)\" text-anchor=\"${anchor}\">${escapeHtml(label || 'Subheading')}</text>`;\n case 'text': {\n let s = '';\n for (let i = 0; i < rows; i++) {\n const lw = i === rows - 1 ? w * 0.66 : w;\n s += `<rect x=\"${x}\" y=\"${y + i * 12}\" width=\"${lw}\" height=\"6\" rx=\"3\" fill=\"var(--rule)\"/>`;\n }\n return s;\n }\n case 'button':\n return (\n `<rect x=\"${x}\" y=\"${y}\" width=\"${w}\" height=\"34\" rx=\"8\" fill=\"${accent}\"/>` +\n `<text x=\"${x + w / 2}\" y=\"${y + 22}\" class=\"wf-btn\" text-anchor=\"middle\">${escapeHtml(label || 'Button')}</text>`\n );\n case 'input':\n case 'search': {\n const icon =\n el.type === 'search'\n ? `<circle cx=\"${x + 16}\" cy=\"${y + 17}\" r=\"5\" fill=\"none\" stroke=\"var(--gray)\" stroke-width=\"1.4\"/><path d=\"M${x + 20} ${y + 21} l4 4\" stroke=\"var(--gray)\" stroke-width=\"1.4\"/>`\n : '';\n const tx = el.type === 'search' ? x + 30 : x + 12;\n return (\n `<rect x=\"${x}\" y=\"${y}\" width=\"${w}\" height=\"34\" rx=\"8\" fill=\"var(--white)\" stroke=\"var(--rule)\" stroke-width=\"1.2\"/>` +\n icon +\n `<text x=\"${tx}\" y=\"${y + 21}\" class=\"wf-ph-text\">${escapeHtml(label || 'Type here…')}</text>`\n );\n }\n case 'image':\n return (\n `<rect x=\"${x}\" y=\"${y}\" width=\"${w}\" height=\"88\" rx=\"8\" ${PH}/>` +\n `<path d=\"M${x} ${y + 88} L${x + w * 0.4} ${y + 40} L${x + w * 0.62} ${y + 66} L${x + w * 0.78} ${y + 50} L${x + w} ${y + 88}\" fill=\"none\" stroke=\"var(--gray)\" stroke-width=\"1.3\"/>` +\n `<circle cx=\"${x + w * 0.74} \" cy=\"${y + 26}\" r=\"7\" fill=\"none\" stroke=\"var(--gray)\" stroke-width=\"1.3\"/>`\n );\n case 'avatar':\n return (\n `<circle cx=\"${x + 22}\" cy=\"${y + 22}\" r=\"20\" ${PH}/>` +\n `<circle cx=\"${x + 22}\" cy=\"${y + 17}\" r=\"7\" fill=\"var(--gray)\"/>` +\n `<path d=\"M${x + 9} ${y + 40} a13 11 0 0 1 26 0\" fill=\"var(--gray)\"/>` +\n (label\n ? `<text x=\"${x + 52}\" y=\"${y + 27}\" class=\"wf-sub\" fill=\"var(--charcoal)\">${escapeHtml(label)}</text>`\n : '')\n );\n case 'card': {\n let s = '';\n for (let i = 0; i < rows; i++) {\n const cy = y + i * 74;\n s +=\n `<rect x=\"${x}\" y=\"${cy}\" width=\"${w}\" height=\"64\" rx=\"10\" fill=\"var(--white)\" stroke=\"var(--rule)\" stroke-width=\"1.2\"/>` +\n `<rect x=\"${x + 12}\" y=\"${cy + 12}\" width=\"40\" height=\"40\" rx=\"8\" ${PH}/>` +\n `<rect x=\"${x + 64}\" y=\"${cy + 16}\" width=\"${w - 92}\" height=\"7\" rx=\"3.5\" fill=\"var(--rule)\"/>` +\n `<rect x=\"${x + 64}\" y=\"${cy + 34}\" width=\"${(w - 92) * 0.6}\" height=\"6\" rx=\"3\" fill=\"var(--rule)\"/>`;\n }\n const cap = label\n ? `<text x=\"${x + 64}\" y=\"${y + 30}\" class=\"wf-ph-text\"></text>`\n : '';\n return s + cap;\n }\n case 'list': {\n let s = '';\n for (let i = 0; i < rows; i++) {\n const ly = y + i * 40;\n s +=\n `<circle cx=\"${x + 16}\" cy=\"${ly + 20}\" r=\"12\" ${PH}/>` +\n `<rect x=\"${x + 38}\" y=\"${ly + 12}\" width=\"${w - 76}\" height=\"6\" rx=\"3\" fill=\"var(--rule)\"/>` +\n `<rect x=\"${x + 38}\" y=\"${ly + 24}\" width=\"${(w - 76) * 0.55}\" height=\"5\" rx=\"2.5\" fill=\"var(--rule)\"/>` +\n `<path d=\"M${x + w - 14} ${ly + 15} l5 5 l-5 5\" fill=\"none\" stroke=\"var(--gray)\" stroke-width=\"1.4\"/>` +\n (i < rows - 1\n ? `<line x1=\"${x + 38}\" y1=\"${ly + 40}\" x2=\"${x + w}\" y2=\"${ly + 40}\" stroke=\"var(--light-gray)\" stroke-width=\"1\"/>`\n : '');\n }\n return s;\n }\n case 'nav': {\n // a row of pill items; label is comma-separated item names.\n const items = (label || 'Home, Docs, Pricing, About').split(',').map((t) => t.trim());\n let s = '';\n let nx = x;\n for (const it of items) {\n const pw = 16 + it.length * 6.2;\n s +=\n `<rect x=\"${nx}\" y=\"${y + 4}\" width=\"${pw}\" height=\"22\" rx=\"11\" fill=\"var(--light-gray)\"/>` +\n `<text x=\"${nx + pw / 2}\" y=\"${y + 19}\" class=\"wf-ph-text\" text-anchor=\"middle\">${escapeHtml(it)}</text>`;\n nx += pw + 8;\n }\n return s;\n }\n case 'tabs': {\n const items = (label || 'Home, Search, Bell, Profile').split(',').map((t) => t.trim());\n const seg = w / items.length;\n let s = `<line x1=\"${x}\" y1=\"${y}\" x2=\"${x + w}\" y2=\"${y}\" stroke=\"var(--rule)\" stroke-width=\"1\"/>`;\n items.forEach((it, i) => {\n const cx = x + seg * i + seg / 2;\n s +=\n `<circle cx=\"${cx}\" cy=\"${y + 18}\" r=\"8\" fill=\"none\" stroke=\"${i === 0 ? accent : 'var(--gray)'}\" stroke-width=\"1.6\"/>` +\n `<text x=\"${cx}\" y=\"${y + 42}\" class=\"wf-tab\" text-anchor=\"middle\" fill=\"${i === 0 ? accent : 'var(--gray)'}\">${escapeHtml(it)}</text>`;\n });\n return s;\n }\n case 'divider':\n return `<line x1=\"${x}\" y1=\"${y + 7}\" x2=\"${x + w}\" y2=\"${y + 7}\" stroke=\"var(--rule)\" stroke-width=\"1\"/>`;\n case 'badge': {\n const pw = 22 + label.length * 6.4;\n return (\n `<rect x=\"${anchorX - (anchor === 'middle' ? pw / 2 : anchor === 'end' ? pw : 0)}\" y=\"${y}\" width=\"${pw}\" height=\"22\" rx=\"11\" fill=\"${accent}\"/>` +\n `<text x=\"${anchorX - (anchor === 'middle' ? 0 : anchor === 'end' ? pw / 2 : -pw / 2)}\" y=\"${y + 15}\" class=\"wf-btn\" text-anchor=\"middle\">${escapeHtml(label || 'New')}</text>`\n );\n }\n case 'toggle':\n return (\n (label\n ? `<text x=\"${x}\" y=\"${y + 19}\" class=\"wf-sub\" fill=\"var(--charcoal)\">${escapeHtml(label)}</text>`\n : '') +\n `<rect x=\"${x + w - 44}\" y=\"${y + 6}\" width=\"44\" height=\"22\" rx=\"11\" fill=\"${accent}\"/>` +\n `<circle cx=\"${x + w - 16}\" cy=\"${y + 17}\" r=\"8\" fill=\"#fff\"/>`\n );\n case 'spacer':\n return '';\n default:\n return '';\n }\n}\n\n/** Renders one device frame and its stacked content. Returns {svg, width, height}. */\nfunction drawScreen(screen: Screen, idx: number): { svg: string; width: number; height: number } {\n const device = screen.device ?? 'browser';\n const cw = contentWidth(device);\n const pad = 16;\n const els = screen.elements ?? [];\n let contentH = 0;\n for (const el of els) contentH += elementHeight(el) + 10;\n contentH = Math.max(contentH, 80);\n\n // chrome heights\n const isPhone = device === 'phone';\n const isBrowser = device === 'browser';\n const titleBarH = 30;\n const addressBarH = isBrowser ? 26 : 0;\n const chromeTop = titleBarH + addressBarH;\n const homeBarH = isPhone ? 24 : 0;\n\n const frameW = cw + pad * 2;\n const screenH = contentH + pad;\n const frameH = chromeTop + screenH + homeBarH;\n const rx = isPhone ? 30 : 14;\n const sw = isPhone ? 2.4 : 1.8;\n const clip = `wfclip${idx}`;\n\n // Inner chrome + content, drawn first and clipped to the rounded frame so\n // nothing spills the corners. The border stroke is drawn LAST, on top, so the\n // outline is always crisp and visible above the fills.\n let inner = '';\n if (isPhone) {\n inner += `<rect x=\"0\" y=\"0\" width=\"${frameW}\" height=\"${titleBarH}\" fill=\"var(--light-gray)\"/>`;\n inner += `<rect x=\"${frameW / 2 - 26}\" y=\"6\" width=\"52\" height=\"9\" rx=\"4.5\" fill=\"var(--charcoal)\"/>`;\n if (screen.title)\n inner += `<text x=\"16\" y=\"20\" class=\"wf-status\">${escapeHtml(screen.title)}</text>`;\n inner += `<text x=\"${frameW - 16}\" y=\"20\" class=\"wf-status\" text-anchor=\"end\">100%</text>`;\n } else {\n inner += `<rect x=\"0\" y=\"0\" width=\"${frameW}\" height=\"${titleBarH}\" fill=\"var(--light-gray)\"/>`;\n inner += `<line x1=\"0\" y1=\"${titleBarH}\" x2=\"${frameW}\" y2=\"${titleBarH}\" stroke=\"var(--rule)\" stroke-width=\"1\"/>`;\n inner += `<circle cx=\"18\" cy=\"15\" r=\"5\" fill=\"var(--negative)\"/><circle cx=\"34\" cy=\"15\" r=\"5\" fill=\"var(--highlight)\"/><circle cx=\"50\" cy=\"15\" r=\"5\" fill=\"var(--positive)\"/>`;\n if (screen.title && !isBrowser)\n inner += `<text x=\"${frameW / 2}\" y=\"20\" class=\"wf-status\" text-anchor=\"middle\">${escapeHtml(screen.title)}</text>`;\n if (isBrowser) {\n const url = screen.url ?? screen.title ?? 'example.com';\n inner += `<rect x=\"68\" y=\"${titleBarH + 5}\" width=\"${frameW - 84}\" height=\"16\" rx=\"8\" fill=\"var(--white)\" stroke=\"var(--rule)\" stroke-width=\"1\"/>`;\n inner += `<text x=\"78\" y=\"${titleBarH + 16}\" class=\"wf-url\">${escapeHtml(url)}</text>`;\n }\n }\n\n let cy = chromeTop + pad;\n for (const el of els) {\n inner += drawElement(el, pad, cy, cw);\n cy += elementHeight(el) + 10;\n }\n if (isPhone) {\n inner += `<rect x=\"${frameW / 2 - 30}\" y=\"${frameH - 15}\" width=\"60\" height=\"5\" rx=\"2.5\" fill=\"var(--charcoal)\" opacity=\"0.55\"/>`;\n }\n\n const s =\n `<g filter=\"url(#gshadow)\">` +\n `<defs><clipPath id=\"${clip}\"><rect x=\"0\" y=\"0\" width=\"${frameW}\" height=\"${frameH}\" rx=\"${rx}\"/></clipPath></defs>` +\n // solid backing so the drop shadow reads against any page colour\n `<rect x=\"0\" y=\"0\" width=\"${frameW}\" height=\"${frameH}\" rx=\"${rx}\" fill=\"var(--white)\"/>` +\n `<g clip-path=\"url(#${clip})\">${inner}</g>` +\n // border on top — always visible above the fills\n `<rect x=\"0\" y=\"0\" width=\"${frameW}\" height=\"${frameH}\" rx=\"${rx}\" fill=\"none\" stroke=\"var(--charcoal)\" stroke-width=\"${sw}\"/>` +\n `</g>`;\n return { svg: s, width: frameW, height: frameH };\n}\n\nexport function renderWireframe(data: BlockDataMap['wireframe']): string {\n const screens = data.screens ?? [];\n const gap = 36;\n const capH = 22;\n const padX = 8;\n const padY = 8;\n\n const drawn = screens.map((screen, i) => drawScreen(screen, i));\n const totalW = drawn.reduce((a, d) => a + d.width, 0) + gap * Math.max(0, drawn.length - 1);\n const maxH = drawn.reduce((a, d) => Math.max(a, d.height), 0);\n const width = totalW + padX * 2;\n const height = maxH + capH + padY * 2;\n\n let s = `<svg viewBox=\"0 0 ${width} ${height}\" role=\"img\"><title>${escapeHtml(data.title ?? 'UI mockup')}</title>`;\n let x = padX;\n drawn.forEach((d, i) => {\n const screen = screens[i];\n s += `<g transform=\"translate(${x}, ${padY})\">${d.svg}</g>`;\n const cap = screen?.label;\n if (cap !== undefined && cap.length > 0) {\n const lines = wrapText(cap, Math.floor(d.width / 6), 2);\n lines.forEach((ln, j) => {\n s += `<text x=\"${x + d.width / 2}\" y=\"${padY + maxH + 16 + j * 12}\" class=\"wf-caption\" text-anchor=\"middle\">${escapeHtml(ln)}</text>`;\n });\n }\n x += d.width + gap;\n });\n s += `</svg>`;\n\n return diagramFrame(\n {\n tag: 'UI',\n tagBg: '#6b21a8',\n ...(data.title !== undefined ? { title: data.title } : {}),\n ...(data.description !== undefined ? { desc: data.description } : {}),\n },\n s,\n );\n}\n","/**\n * HTML renderer registry — mirrors the core block registry's exhaustiveness.\n *\n * Each block type maps to a function that takes its typed data and returns an\n * HTML string. The mapped type `{ [K in BlockType]: ... }` ensures omitting a\n * block type is a compile error — adding a new BlockType in core fails tsc here\n * until the renderer is added.\n */\n\nimport type { BlockDataMap, BlockType } from '@avodado/core';\n\nimport { renderCallout } from './blocks/callout.js';\nimport { renderErd } from './blocks/erd.js';\nimport { renderKanban } from './blocks/kanban.js';\nimport { renderMetaBlock } from './blocks/meta.js';\nimport { renderSequence } from './blocks/sequence.js';\nimport { renderTable } from './blocks/table.js';\nimport { renderTimeline } from './blocks/timeline.js';\nimport { renderTracker } from './blocks/tracker.js';\nimport { renderUserStory } from './blocks/userstory.js';\nimport { renderProseBlock } from './blocks/prose.js';\nimport { renderGlossary } from './blocks/glossary.js';\nimport { renderProsCons } from './blocks/proscons.js';\nimport { renderCvt } from './blocks/cvt.js';\nimport { renderStats } from './blocks/stats.js';\nimport { renderCode } from './blocks/code.js';\nimport { renderAgenda } from './blocks/agenda.js';\nimport { renderTree } from './blocks/tree.js';\nimport { renderPyramid } from './blocks/pyramid.js';\nimport { renderFunnel } from './blocks/funnel.js';\nimport { renderFlow } from './blocks/flow.js';\nimport { renderState } from './blocks/state.js';\nimport { renderDfd } from './blocks/dfd.js';\nimport { renderJourney } from './blocks/journey.js';\nimport { renderGantt } from './blocks/gantt.js';\nimport { renderGraph } from './blocks/graph.js';\nimport { renderQuadrant } from './blocks/quadrant.js';\nimport { renderSwimlane } from './blocks/swimlane.js';\nimport { renderC4 } from './blocks/c4.js';\nimport { renderUml } from './blocks/uml.js';\nimport { renderMece } from './blocks/mece.js';\nimport { renderFrontend } from './blocks/frontend.js';\nimport { renderCluster } from './blocks/cluster.js';\nimport {\n renderBlock,\n renderInfra,\n renderEvent,\n renderDdd,\n renderNetwork,\n} from './blocks/blockGraph.js';\nimport { renderFelogic, renderBelogic } from './blocks/felogic.js';\nimport { renderDag } from './blocks/flow.js';\nimport { renderWireframe } from './blocks/wireframe.js';\n\n/** Per-block HTML renderer signature. */\nexport type HtmlRenderer<K extends BlockType> = (data: BlockDataMap[K]) => string;\n\n/** Mapped type — adding a {@link BlockType} without an entry fails tsc. */\nexport type HtmlRendererRegistry = { readonly [K in BlockType]: HtmlRenderer<K> };\n\n/** The HTML renderer registry. `meta` is intentionally a no-op (cover is rendered separately). */\nexport const htmlRenderers: HtmlRendererRegistry = {\n meta: renderMetaBlock,\n callout: renderCallout,\n table: renderTable,\n sequence: renderSequence,\n erd: renderErd,\n userstory: renderUserStory,\n timeline: renderTimeline,\n kanban: renderKanban,\n tracker: renderTracker,\n prose: renderProseBlock,\n glossary: renderGlossary,\n proscons: renderProsCons,\n cvt: renderCvt,\n stats: renderStats,\n code: renderCode,\n agenda: renderAgenda,\n tree: renderTree,\n pyramid: renderPyramid,\n funnel: renderFunnel,\n flow: renderFlow,\n state: renderState,\n dfd: renderDfd,\n journey: renderJourney,\n gantt: renderGantt,\n graph: renderGraph,\n quadrant: renderQuadrant,\n swimlane: renderSwimlane,\n c4: renderC4,\n uml: renderUml,\n mece: renderMece,\n frontend: renderFrontend,\n cluster: renderCluster,\n block: renderBlock,\n infra: renderInfra,\n event: renderEvent,\n ddd: renderDdd,\n network: renderNetwork,\n felogic: renderFelogic,\n belogic: renderBelogic,\n dag: renderDag,\n wireframe: renderWireframe,\n};\n","/**\n * Global SVG `<defs>` shared by multiple block renderers (markers used as edge\n * arrow heads, a drop-shadow filter for boxed nodes).\n *\n * Emitted once near the top of the rendered body so subsequent SVGs can\n * reference them by id. Ported from `resources/doc-studio.jsx` `GlobalDefs`.\n */\n\n/**\n * Returns the SVG element containing global marker + filter definitions.\n * The element is invisible (width/height = 0) but the defs are scoped to the\n * document so any subsequent `<svg>` can use `marker-end=\"url(#gArrow)\"` etc.\n */\nexport function globalDefsSvg(): string {\n return (\n `<svg width=\"0\" height=\"0\" style=\"position:absolute\" aria-hidden=\"true\">` +\n `<defs>` +\n `<marker id=\"gArrow\" viewBox=\"0 0 10 10\" refX=\"9\" refY=\"5\" markerWidth=\"7\" markerHeight=\"7\" orient=\"auto-start-reverse\">` +\n `<path d=\"M0,0 L10,5 L0,10 z\" fill=\"var(--charcoal)\"/></marker>` +\n `<marker id=\"gSoft\" viewBox=\"0 0 10 10\" refX=\"9\" refY=\"5\" markerWidth=\"7\" markerHeight=\"7\" orient=\"auto-start-reverse\">` +\n `<path d=\"M0,0 L10,5 L0,10 z\" fill=\"var(--gray)\"/></marker>` +\n `<marker id=\"gErr\" viewBox=\"0 0 10 10\" refX=\"9\" refY=\"5\" markerWidth=\"7\" markerHeight=\"7\" orient=\"auto-start-reverse\">` +\n `<path d=\"M0,0 L10,5 L0,10 z\" fill=\"#991b1b\"/></marker>` +\n `<marker id=\"gTri\" viewBox=\"0 0 14 14\" refX=\"13\" refY=\"7\" markerWidth=\"14\" markerHeight=\"14\" orient=\"auto-start-reverse\">` +\n `<path d=\"M1,1 L13,7 L1,13 z\" fill=\"#fff\" stroke=\"#6b21a8\" stroke-width=\"1.2\"/></marker>` +\n `<filter id=\"gshadow\" x=\"-20%\" y=\"-20%\" width=\"140%\" height=\"170%\">` +\n `<feDropShadow dx=\"0\" dy=\"2\" stdDeviation=\"3\" flood-color=\"#0e54a1\" flood-opacity=\"0.13\"/></filter>` +\n `</defs>` +\n `</svg>`\n );\n}\n","/**\n * Theme system. Each theme is a set of CSS variable overrides applied via\n * `style=\"--navy: …; --blue: …\"` on the `.docskin` root element. The full\n * stylesheet (see {@link houseCss}) reads those variables.\n *\n * Adding a new theme = add an entry here. No CSS changes needed.\n *\n * Ported verbatim from `resources/doc-studio.jsx` `THEMES`.\n */\n\n/** Built-in theme names. */\nexport type ThemeName = 'textbook' | 'minimal' | 'teal' | 'plum' | 'slate' | 'dark' | 'soft';\n\n/** Default theme used when none is specified. */\nexport const DEFAULT_THEME: ThemeName = 'textbook';\n\ninterface ThemeDef {\n /** Human-readable label, for UI surfaces. */\n readonly label: string;\n /** CSS variable overrides applied at the `.docskin` root. */\n readonly vars: Readonly<Record<string, string>>;\n}\n\n/** The built-in themes. */\nexport const themes: Readonly<Record<ThemeName, ThemeDef>> = {\n // Default: warm textbook look (cream paper, deep academic navy, terracotta\n // accent, serif display + body) — the base :root tokens, no overrides needed.\n textbook: {\n label: 'Textbook',\n vars: {},\n },\n // Clean, modern, white: near-black ink, a single blue accent (#0070f3),\n // geometric sans, more rounding. (The former default.)\n minimal: {\n label: 'Minimal',\n vars: {\n '--navy': '#000000',\n '--navy-tint': '#d4d4d4',\n '--blue': '#0070f3',\n '--light-blue': '#e5f0ff',\n '--charcoal': '#111111',\n '--slate': '#444444',\n '--gray': '#888888',\n '--light-gray': '#fafafa',\n '--rule': '#eaeaea',\n '--highlight': '#0070f3',\n '--highlight-soft': '#e5f0ff',\n '--white': '#ffffff',\n '--radius': '8px',\n '--font-display':\n '\"Inter\",\"SF Pro Display\",-apple-system,BlinkMacSystemFont,\"Segoe UI\",Helvetica,Arial,sans-serif',\n '--font-body':\n '\"Inter\",-apple-system,BlinkMacSystemFont,\"Segoe UI\",Helvetica,Arial,sans-serif',\n },\n },\n teal: {\n label: 'Teal',\n vars: {\n '--navy': '#0f766e',\n '--blue': '#0e7490',\n '--highlight': '#f59e0b',\n },\n },\n plum: {\n label: 'Plum',\n vars: {\n '--navy': '#6b21a8',\n '--blue': '#7c3aed',\n '--highlight': '#db2777',\n },\n },\n slate: {\n label: 'Slate sans',\n vars: {\n '--navy': '#334155',\n '--blue': '#475569',\n '--highlight': '#0d9488',\n '--font-display': '\"Helvetica Neue\", Arial, sans-serif',\n },\n },\n // Full dark mode. Surfaces (--white) and ink (--charcoal) flip; neutrals are\n // remapped so hairlines/edges read as light-on-dark. Accent hues are brightened\n // for contrast. Node \"chip\" pastels (in the SVG palette) stay light by design —\n // they read as colored cards on the dark canvas.\n dark: {\n label: 'Dark',\n vars: {\n '--white': '#161b26', // surfaces: page + cards + diagram bg\n '--charcoal': '#e6e9f2', // primary ink + structural strokes\n '--slate': '#c2c9d6', // secondary text\n '--gray': '#94a0b4', // muted text / dashed edges\n '--light-gray': '#222a39', // subtle panels / zone fills / bars\n '--rule': '#333f54', // hairlines / borders\n '--navy': '#5b9cff', // primary accent (headings, links, primary nodes)\n '--navy-tint': '#1e2a44',\n '--blue': '#7fb0ff',\n '--light-blue': '#16233a',\n '--highlight': '#f7a64a',\n '--highlight-soft': '#3a2c17',\n '--positive': '#3ecf7a',\n '--positive-soft': '#16301f',\n '--negative': '#ff6b6b',\n '--negative-soft': '#3a1d1d',\n '--purple': '#b78bff',\n '--purple-soft': '#271d3a',\n '--teal': '#4fd1c5',\n '--teal-soft': '#13302d',\n '--radius': '14px',\n },\n },\n // Soft modern light theme: rounded surfaces, indigo accent, warm-gray ink.\n soft: {\n label: 'Soft',\n vars: {\n '--navy': '#4f46e5',\n '--blue': '#6366f1',\n '--charcoal': '#1f2433',\n '--slate': '#4b5366',\n '--gray': '#8b93a7',\n '--rule': '#e6e8ef',\n '--light-gray': '#f5f6fa',\n '--highlight': '#f59e0b',\n '--radius': '16px',\n '--font-display': '\"Helvetica Neue\", Arial, sans-serif',\n },\n },\n};\n\n/**\n * Returns the CSS variable overrides for a theme as an inline-style string\n * (e.g. `\"--navy:#0f766e;--blue:#0e7490;\"`). Empty string for the default\n * textbook theme.\n */\nexport function themeStyle(name: ThemeName): string {\n const vars = themes[name].vars;\n const parts: string[] = [];\n for (const k of Object.keys(vars)) parts.push(`${k}:${vars[k]};`);\n return parts.join('');\n}\n","/**\n * Renders a parsed {@link Document} into its composable PARTS — the CSS, the\n * theme-variable string, the inner body HTML (for a `<div class=\"docskin\">`),\n * the title, and a section index for navigation.\n *\n * {@link renderDocument} (in `document.ts`) wraps these parts into a standalone\n * `<!doctype html>` page. Embedding consumers (e.g. a React app) inject the\n * parts directly: one `<style>` with `css`, a scoped `<style>` that sets the\n * theme vars, and the `body` inside their own `.docskin` host. This avoids\n * nesting a full HTML document inside the page and enables live theme switching\n * (swap only the theme-vars style) and section-level navigation (each section\n * carries an `id`).\n */\n\nimport type { BlockDataMap, BlockType, Document, Segment, TypedSegment } from '@avodado/core';\nimport { houseCss } from './css.js';\nimport { escapeHtml } from './escape.js';\nimport { renderCover } from './blocks/meta.js';\nimport { SECTION_LABEL } from './blocks/frame.js';\nimport { renderProse } from './markdown.js';\nimport { htmlRenderers } from './registry.js';\nimport { globalDefsSvg } from './svg/defs.js';\nimport { DEFAULT_THEME, themeStyle, type ThemeName } from './themes.js';\n\n/** Options shared by {@link renderDocumentParts} and the page renderer. */\nexport interface RenderPartsOptions {\n /** Theme name. Defaults to `textbook`. */\n readonly theme?: ThemeName;\n /**\n * Custom CSS-variable overrides applied after the named theme (they win),\n * e.g. `{ '--navy': '#123456' }`.\n */\n readonly themeVars?: Readonly<Record<string, string>>;\n}\n\n/** One navigable section of a rendered document. */\nexport interface DocumentSection {\n /** DOM id of the `<section>` (e.g. `section-01`). */\n readonly id: string;\n /** 1-based section number. */\n readonly num: number;\n /** Section label (e.g. `Roadmap`, `Sequence`). */\n readonly label: string;\n /** The block's title, if it has one. */\n readonly title?: string;\n}\n\n/** The composable pieces of a rendered document. */\nexport interface DocumentParts {\n /** Theme-independent house stylesheet. Inject once. */\n readonly css: string;\n /** Theme variable declarations (e.g. `--navy:#0f766e;`), or `''` for default. */\n readonly themeVars: string;\n /** Inner HTML for a `<div class=\"docskin\">` host: defs + cover + sections. */\n readonly body: string;\n /** Document title (from the `meta` block). */\n readonly title: string;\n /** Section index for navigation. */\n readonly sections: readonly DocumentSection[];\n}\n\ninterface RenderCtx {\n sectionNum: number;\n sections: DocumentSection[];\n}\n\nfunction pad2(n: number): string {\n return n < 10 ? `0${n}` : String(n);\n}\n\n/** Reads optional title/lede from a block's data, defensively typed. */\nfunction readTitleAndLede(data: unknown): { title?: string; lede?: string } {\n if (data === null || typeof data !== 'object') return {};\n const d = data as { title?: unknown; lede?: unknown };\n const out: { title?: string; lede?: string } = {};\n if (typeof d.title === 'string' && d.title.length > 0) out.title = d.title;\n if (typeof d.lede === 'string' && d.lede.length > 0) out.lede = d.lede;\n return out;\n}\n\nfunction renderSectionHead(num: number, kind: BlockType, title?: string, lede?: string): string {\n const label = SECTION_LABEL[kind];\n const titleHtml =\n title !== undefined ? `<h2 class=\"section-title\">${escapeHtml(title)}</h2>` : '';\n const ledeHtml = lede !== undefined ? `<p class=\"section-lede\">${escapeHtml(lede)}</p>` : '';\n return (\n `<div class=\"section-head\">` +\n `<div class=\"section-num\">SECTION ${pad2(num)} · ${escapeHtml(label)}</div>` +\n titleHtml +\n ledeHtml +\n `</div>`\n );\n}\n\n/**\n * Dispatches a typed block to its renderer. The registry is keyed by the same\n * `BlockType` discriminant as the segment, so this single contained cast asserts\n * the invariant rather than leaking casts to every call site.\n */\nfunction dispatchBlock<K extends BlockType>(kind: K, data: BlockDataMap[K]): string {\n const fn = htmlRenderers[kind] as (data: BlockDataMap[K]) => string;\n return fn(data);\n}\n\nfunction renderTypedSegment(seg: TypedSegment, ctx: RenderCtx): string {\n if (seg.kind === 'meta') return '';\n if (seg.parseError !== undefined) {\n return `<div class=\"err\">${escapeHtml(seg.kind)} block — parse error:\\n${escapeHtml(seg.parseError)}</div>`;\n }\n if (seg.data === null || seg.data === undefined) return '';\n\n const body = dispatchBlock(seg.kind, seg.data as BlockDataMap[typeof seg.kind]);\n\n ctx.sectionNum += 1;\n const num = ctx.sectionNum;\n const { title, lede } = readTitleAndLede(seg.data);\n const id = `section-${pad2(num)}`;\n ctx.sections.push({\n id,\n num,\n label: SECTION_LABEL[seg.kind],\n ...(title !== undefined ? { title } : {}),\n });\n const head = renderSectionHead(num, seg.kind, title, lede);\n\n return `<section id=\"${id}\" class=\"section-block\">${head}${body}</section>`;\n}\n\nfunction renderSegment(seg: Segment, ctx: RenderCtx): string {\n if (seg.kind === 'markdown') return renderProse(seg.text);\n return renderTypedSegment(seg, ctx);\n}\n\n/** Builds the theme-variable declaration string (named theme + overrides). */\nexport function buildThemeVars(\n theme: ThemeName,\n vars?: Readonly<Record<string, string>>,\n): string {\n let css = themeStyle(theme);\n if (vars !== undefined) {\n for (const k of Object.keys(vars)) css += `${k}:${vars[k]};`;\n }\n return css;\n}\n\n/**\n * Renders a document into its composable parts.\n *\n * @param doc - The parsed Avodado document.\n * @param opts - Optional theme + variable overrides.\n * @returns The CSS, theme vars, body HTML, title, and section index.\n */\nexport function renderDocumentParts(doc: Document, opts: RenderPartsOptions = {}): DocumentParts {\n const title = doc.meta?.title ?? 'Untitled';\n const theme = opts.theme ?? DEFAULT_THEME;\n const themeVars = buildThemeVars(theme, opts.themeVars);\n const ctx: RenderCtx = { sectionNum: 0, sections: [] };\n const body =\n globalDefsSvg() +\n renderCover(doc.meta) +\n doc.segments.map((s) => renderSegment(s, ctx)).join('');\n return { css: houseCss, themeVars, body, title, sections: ctx.sections };\n}\n","/**\n * Renders a parsed {@link Document} to a standalone HTML string.\n *\n * - Inlines the house CSS in `<style>` so the output is self-contained.\n * - Wraps the body in `<div class=\"docskin\">` so the CSS rules apply.\n * - Applies an optional theme by setting CSS variables on `:root`.\n *\n * The actual rendering is done by {@link renderDocumentParts} (in `parts.ts`);\n * this function just wraps those parts into a full HTML page. Embedding\n * consumers (e.g. a React app) should use `renderDocumentParts` directly.\n *\n * @example\n * ```ts\n * import { parseDocument } from '@avodado/core';\n * import { renderDocument } from '@avodado/render';\n *\n * const html = renderDocument(parseDocument(md, 'orders'), { theme: 'teal' });\n * ```\n */\n\nimport type { Document } from '@avodado/core';\nimport { escapeHtml } from './escape.js';\nimport { renderDocumentParts, type RenderPartsOptions } from './parts.js';\n\n/** Options for {@link renderDocument}. */\nexport type RenderOptions = RenderPartsOptions;\n\n/**\n * Renders a document to a standalone HTML page.\n *\n * @param doc - The parsed Avodado document.\n * @param opts - Optional render options (theme).\n * @returns A complete HTML string (`<!doctype html>…</html>`).\n */\nexport function renderDocument(doc: Document, opts: RenderOptions = {}): string {\n const parts = renderDocumentParts(doc, opts);\n const themeBlock =\n parts.themeVars.length > 0 ? `\\n<style>:root{${parts.themeVars}}</style>` : '';\n return (\n `<!doctype html>\\n` +\n `<html lang=\"en\">\\n` +\n `<head>\\n` +\n `<meta charset=\"utf-8\">\\n` +\n `<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">\\n` +\n `<title>${escapeHtml(parts.title)}</title>\\n` +\n `<style>${parts.css}</style>` +\n themeBlock +\n `\\n</head>\\n` +\n `<body>\\n` +\n `<div class=\"docskin\">\\n` +\n parts.body +\n `</div>\\n` +\n `</body>\\n` +\n `</html>\\n`\n );\n}\n"]}
|