unspaghettit 0.8.0 → 0.9.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/README.md +7 -2
- package/build/client/_app/immutable/assets/0.CEwCP-aD.css +1 -0
- package/build/client/_app/immutable/assets/0.CEwCP-aD.css.br +0 -0
- package/build/client/_app/immutable/assets/0.CEwCP-aD.css.gz +0 -0
- package/build/client/_app/immutable/chunks/B0K6Jxia2.js +3 -0
- package/build/client/_app/immutable/chunks/B0K6Jxia2.js.br +0 -0
- package/build/client/_app/immutable/chunks/B0K6Jxia2.js.gz +0 -0
- package/build/client/_app/immutable/chunks/BA-q53p42.js +1 -0
- package/build/client/_app/immutable/chunks/BA-q53p42.js.br +0 -0
- package/build/client/_app/immutable/chunks/BA-q53p42.js.gz +0 -0
- package/build/client/_app/immutable/chunks/BHd4GNIo2.js +11 -0
- package/build/client/_app/immutable/chunks/BHd4GNIo2.js.br +0 -0
- package/build/client/_app/immutable/chunks/BHd4GNIo2.js.gz +0 -0
- package/build/client/_app/immutable/chunks/BLErSy65.js +1 -0
- package/build/client/_app/immutable/chunks/BLErSy65.js.br +0 -0
- package/build/client/_app/immutable/chunks/BLErSy65.js.gz +0 -0
- package/build/client/_app/immutable/chunks/{BGjKBqhd.js → BOViVyPK.js} +1 -1
- package/build/client/_app/immutable/chunks/BOViVyPK.js.br +0 -0
- package/build/client/_app/immutable/chunks/BOViVyPK.js.gz +0 -0
- package/build/client/_app/immutable/chunks/{CXhiS9kD.js → BP3izzYa.js} +1 -1
- package/build/client/_app/immutable/chunks/BP3izzYa.js.br +0 -0
- package/build/client/_app/immutable/chunks/BP3izzYa.js.gz +0 -0
- package/build/client/_app/immutable/chunks/{BdU1Yt_e.js → BgjLttfH.js} +1 -1
- package/build/client/_app/immutable/chunks/BgjLttfH.js.br +0 -0
- package/build/client/_app/immutable/chunks/BgjLttfH.js.gz +0 -0
- package/build/client/_app/immutable/chunks/{bYs7XjWt.js → BiH-tU7x.js} +1 -1
- package/build/client/_app/immutable/chunks/BiH-tU7x.js.br +0 -0
- package/build/client/_app/immutable/chunks/BiH-tU7x.js.gz +0 -0
- package/build/client/_app/immutable/chunks/{SoqLurki2.js → CCMy1UBa2.js} +1 -1
- package/build/client/_app/immutable/chunks/CCMy1UBa2.js.br +0 -0
- package/build/client/_app/immutable/chunks/CCMy1UBa2.js.gz +0 -0
- package/build/client/_app/immutable/chunks/{DUlWXa5h.js → CE7ndIoT.js} +3 -3
- package/build/client/_app/immutable/chunks/CE7ndIoT.js.br +0 -0
- package/build/client/_app/immutable/chunks/CE7ndIoT.js.gz +0 -0
- package/build/client/_app/immutable/chunks/CFFa_0pY.js +1 -0
- package/build/client/_app/immutable/chunks/CFFa_0pY.js.br +0 -0
- package/build/client/_app/immutable/chunks/CFFa_0pY.js.gz +0 -0
- package/build/client/_app/immutable/chunks/{DsI4egLI2.js → CcA78DtM2.js} +1 -1
- package/build/client/_app/immutable/chunks/CcA78DtM2.js.br +0 -0
- package/build/client/_app/immutable/chunks/CcA78DtM2.js.gz +0 -0
- package/build/client/_app/immutable/chunks/{DwwbPhx_2.js → Czx0-8cO2.js} +1 -1
- package/build/client/_app/immutable/chunks/Czx0-8cO2.js.br +0 -0
- package/build/client/_app/immutable/chunks/Czx0-8cO2.js.gz +0 -0
- package/build/client/_app/immutable/chunks/{CPYkXatp.js → D7NkISST.js} +1 -1
- package/build/client/_app/immutable/chunks/D7NkISST.js.br +0 -0
- package/build/client/_app/immutable/chunks/D7NkISST.js.gz +0 -0
- package/build/client/_app/immutable/chunks/{CV2_qPHL2.js → D8-o2Sof2.js} +1 -1
- package/build/client/_app/immutable/chunks/D8-o2Sof2.js.br +0 -0
- package/build/client/_app/immutable/chunks/D8-o2Sof2.js.gz +0 -0
- package/build/client/_app/immutable/chunks/{m6hfVWqp2.js → DBjEXU6n2.js} +1 -1
- package/build/client/_app/immutable/chunks/DBjEXU6n2.js.br +0 -0
- package/build/client/_app/immutable/chunks/DBjEXU6n2.js.gz +0 -0
- package/build/client/_app/immutable/chunks/{DVZgPZIa.js → DFN_uoUc.js} +1 -1
- package/build/client/_app/immutable/chunks/DFN_uoUc.js.br +0 -0
- package/build/client/_app/immutable/chunks/DFN_uoUc.js.gz +0 -0
- package/build/client/_app/immutable/chunks/{DFsgZTOD2.js → DQqDh5KS2.js} +1 -1
- package/build/client/_app/immutable/chunks/DQqDh5KS2.js.br +0 -0
- package/build/client/_app/immutable/chunks/DQqDh5KS2.js.gz +0 -0
- package/build/client/_app/immutable/chunks/DiXkacF8.js +1 -0
- package/build/client/_app/immutable/chunks/DiXkacF8.js.br +2 -0
- package/build/client/_app/immutable/chunks/DiXkacF8.js.gz +0 -0
- package/build/client/_app/immutable/chunks/DkX3qg_W.js +1 -0
- package/build/client/_app/immutable/chunks/DkX3qg_W.js.br +0 -0
- package/build/client/_app/immutable/chunks/DkX3qg_W.js.gz +0 -0
- package/build/client/_app/immutable/chunks/{BEi9bPpt.js → DnApHYj3.js} +1 -1
- package/build/client/_app/immutable/chunks/DnApHYj3.js.br +0 -0
- package/build/client/_app/immutable/chunks/DnApHYj3.js.gz +0 -0
- package/build/client/_app/immutable/chunks/{j_2fbb1D2.js → DqmYsclE2.js} +2 -2
- package/build/client/_app/immutable/chunks/DqmYsclE2.js.br +0 -0
- package/build/client/_app/immutable/chunks/DqmYsclE2.js.gz +0 -0
- package/build/client/_app/immutable/chunks/{CuI8wNzS.js → H5AjsaL0.js} +1 -1
- package/build/client/_app/immutable/chunks/H5AjsaL0.js.br +0 -0
- package/build/client/_app/immutable/chunks/H5AjsaL0.js.gz +0 -0
- package/build/client/_app/immutable/chunks/LTQjWdp6.js +1 -0
- package/build/client/_app/immutable/chunks/LTQjWdp6.js.br +0 -0
- package/build/client/_app/immutable/chunks/LTQjWdp6.js.gz +0 -0
- package/build/client/_app/immutable/chunks/{CmaTEgmy2.js → TWC3jtDk2.js} +1 -1
- package/build/client/_app/immutable/chunks/TWC3jtDk2.js.br +0 -0
- package/build/client/_app/immutable/chunks/TWC3jtDk2.js.gz +0 -0
- package/build/client/_app/immutable/chunks/aCyLgaCS.js +1 -0
- package/build/client/_app/immutable/chunks/aCyLgaCS.js.br +0 -0
- package/build/client/_app/immutable/chunks/aCyLgaCS.js.gz +0 -0
- package/build/client/_app/immutable/chunks/gB6TDZ87.js +1 -0
- package/build/client/_app/immutable/chunks/gB6TDZ87.js.br +0 -0
- package/build/client/_app/immutable/chunks/gB6TDZ87.js.gz +0 -0
- package/build/client/_app/immutable/chunks/{CHmg-Am5.js → iSPCqpff.js} +1 -1
- package/build/client/_app/immutable/chunks/iSPCqpff.js.br +0 -0
- package/build/client/_app/immutable/chunks/iSPCqpff.js.gz +0 -0
- package/build/client/_app/immutable/entry/{app.BoGKtCbP.js → app.A6sjm9Ku.js} +2 -2
- package/build/client/_app/immutable/entry/app.A6sjm9Ku.js.br +0 -0
- package/build/client/_app/immutable/entry/app.A6sjm9Ku.js.gz +0 -0
- package/build/client/_app/immutable/entry/start.CXZ1Se5D.js +1 -0
- package/build/client/_app/immutable/entry/start.CXZ1Se5D.js.br +0 -0
- package/build/client/_app/immutable/entry/start.CXZ1Se5D.js.gz +0 -0
- package/build/client/_app/immutable/nodes/0.Bcxxv-ZN.js +7 -0
- package/build/client/_app/immutable/nodes/0.Bcxxv-ZN.js.br +0 -0
- package/build/client/_app/immutable/nodes/0.Bcxxv-ZN.js.gz +0 -0
- package/build/client/_app/immutable/nodes/{1.C41ljjsg.js → 1.CIoVaNqz.js} +1 -1
- package/build/client/_app/immutable/nodes/1.CIoVaNqz.js.br +2 -0
- package/build/client/_app/immutable/nodes/1.CIoVaNqz.js.gz +0 -0
- package/build/client/_app/immutable/nodes/{11.cksFH0wF.js → 11.qdtoUmHC.js} +1 -1
- package/build/client/_app/immutable/nodes/11.qdtoUmHC.js.br +0 -0
- package/build/client/_app/immutable/nodes/11.qdtoUmHC.js.gz +0 -0
- package/build/client/_app/immutable/nodes/12.DFolraLv.js +7 -0
- package/build/client/_app/immutable/nodes/12.DFolraLv.js.br +0 -0
- package/build/client/_app/immutable/nodes/12.DFolraLv.js.gz +0 -0
- package/build/client/_app/immutable/nodes/{13.CncQNyXC.js → 13.BM7gjN4-.js} +1 -1
- package/build/client/_app/immutable/nodes/13.BM7gjN4-.js.br +0 -0
- package/build/client/_app/immutable/nodes/13.BM7gjN4-.js.gz +0 -0
- package/build/client/_app/immutable/nodes/14.x8vEr-YU.js +1 -0
- package/build/client/_app/immutable/nodes/14.x8vEr-YU.js.br +0 -0
- package/build/client/_app/immutable/nodes/14.x8vEr-YU.js.gz +0 -0
- package/build/client/_app/immutable/nodes/15.BRhFecbH.js +4 -0
- package/build/client/_app/immutable/nodes/15.BRhFecbH.js.br +0 -0
- package/build/client/_app/immutable/nodes/15.BRhFecbH.js.gz +0 -0
- package/build/client/_app/immutable/nodes/{16.CwBnCMQO.js → 16.BdO7vFc5.js} +1 -1
- package/build/client/_app/immutable/nodes/16.BdO7vFc5.js.br +0 -0
- package/build/client/_app/immutable/nodes/16.BdO7vFc5.js.gz +0 -0
- package/build/client/_app/immutable/nodes/{2.Bt4Iqxol.js → 2.BnjIPJ3_.js} +1 -1
- package/build/client/_app/immutable/nodes/2.BnjIPJ3_.js.br +0 -0
- package/build/client/_app/immutable/nodes/2.BnjIPJ3_.js.gz +0 -0
- package/build/client/_app/immutable/nodes/3.t27BDikv.js +1 -0
- package/build/client/_app/immutable/nodes/3.t27BDikv.js.br +0 -0
- package/build/client/_app/immutable/nodes/3.t27BDikv.js.gz +0 -0
- package/build/client/_app/immutable/nodes/{4.CeWHKt3l.js → 4.CQUmwl-U.js} +3 -3
- package/build/client/_app/immutable/nodes/4.CQUmwl-U.js.br +0 -0
- package/build/client/_app/immutable/nodes/4.CQUmwl-U.js.gz +0 -0
- package/build/client/_app/immutable/nodes/5.CA1JzQ4s.js +52 -0
- package/build/client/_app/immutable/nodes/5.CA1JzQ4s.js.br +0 -0
- package/build/client/_app/immutable/nodes/5.CA1JzQ4s.js.gz +0 -0
- package/build/client/_app/immutable/nodes/6.BgaYm7sg.js +1 -0
- package/build/client/_app/immutable/nodes/6.BgaYm7sg.js.br +0 -0
- package/build/client/_app/immutable/nodes/6.BgaYm7sg.js.gz +0 -0
- package/build/client/_app/immutable/nodes/7.CZOOqsbT.js +1 -0
- package/build/client/_app/immutable/nodes/7.CZOOqsbT.js.br +0 -0
- package/build/client/_app/immutable/nodes/7.CZOOqsbT.js.gz +0 -0
- package/build/client/_app/immutable/nodes/{8.TZdtToNp.js → 8.DRk1Ol8z.js} +2 -2
- package/build/client/_app/immutable/nodes/8.DRk1Ol8z.js.br +0 -0
- package/build/client/_app/immutable/nodes/8.DRk1Ol8z.js.gz +0 -0
- package/build/client/_app/immutable/nodes/9.C5inUZYQ.js +3 -0
- package/build/client/_app/immutable/nodes/9.C5inUZYQ.js.br +0 -0
- package/build/client/_app/immutable/nodes/9.C5inUZYQ.js.gz +0 -0
- package/build/client/_app/version.json +1 -1
- package/build/client/_app/version.json.br +0 -0
- package/build/client/_app/version.json.gz +0 -0
- package/build/server/chunks/0-Di5jwR11.js +15 -0
- package/build/server/chunks/1-BJrteZAf.js +9 -0
- package/build/server/chunks/11-BOjJLkD7.js +9 -0
- package/build/server/chunks/12-D1cmeo5I.js +9 -0
- package/build/server/chunks/13-SzTyG6Rx.js +9 -0
- package/build/server/chunks/14-NZWcVsI9.js +9 -0
- package/build/server/chunks/15-BAJow9Ik.js +9 -0
- package/build/server/chunks/16-CkpfdUX_.js +9 -0
- package/build/server/chunks/2-C_K86lms.js +9 -0
- package/build/server/chunks/{3-BeZ4I6nb.js → 3-BX4CmlKY.js} +3 -3
- package/build/server/chunks/4-Dod5xiLb.js +16 -0
- package/build/server/chunks/5-DWYaS20u.js +9 -0
- package/build/server/chunks/6-CCHg2J4u.js +9 -0
- package/build/server/chunks/7-DapK4-Tk.js +9 -0
- package/build/server/chunks/8-D8EuSbQD.js +9 -0
- package/build/server/chunks/9-nwEboE96.js +9 -0
- package/build/server/chunks/{DeleteFeature-C-0RJeFW.js → DeleteFeature-GOjdL9Ck.js} +227 -13
- package/build/server/chunks/{DeleteProject-DJvXB5DR.js → DeleteProject-Cj-M5uVd.js} +2 -2
- package/build/server/chunks/{DigestView-Bc6k5k3-.js → DigestView-BfoLNnKo.js} +4 -3
- package/build/server/chunks/{Effect-BJtLR-6l.js → Effect-DpNpOAyO.js} +4 -2
- package/build/server/chunks/{FeatureCard-DeKMF5V8.js → FeatureCard-DexodJTb.js} +4 -4
- package/build/server/chunks/{FeatureJson-BoxOjsY6.js → FeatureJson-Cs1UOjGW.js} +2 -2
- package/build/server/chunks/{FeatureTransforms-Ce5inqgh.js → FeatureTransforms-DtefZJbq.js} +10 -3
- package/build/server/chunks/{ManageTagsDialog-CVU8mDqF.js → ManageTagsDialog-DMq58c0N.js} +5 -5
- package/build/server/chunks/{ProgressBar-DXpOQRB8.js → ProgressBar-DVFm8ZIZ.js} +2 -2
- package/build/server/chunks/{ProjectionViewer-DGH0qozK.js → ProjectionViewer-DgiafniT.js} +11 -9
- package/build/server/chunks/{ProjectsIndex-D1cxuUk9.js → ProjectsIndex-BhtYhhN1.js} +10 -10
- package/build/server/chunks/{RenameTag-Bj6Ma2hM.js → RenameTag-D2lCrFRx.js} +2 -2
- package/build/server/chunks/{ScenarioApplier-lJmwGaNE.js → ScenarioApplier-DHITq-3c.js} +2 -2
- package/build/server/chunks/{SimulationClock-htaCZkF-.js → SimulationClock-Ct2QIzx4.js} +2 -2
- package/build/server/chunks/{SimulatorEngine-B3SFrB6Z.js → SimulatorEngine-PND5RM16.js} +191 -53
- package/build/server/chunks/{TagDotStrip-akUNaLK0.js → TagDotStrip-Ciy3ZX6D.js} +4 -4
- package/build/server/chunks/{TagFilterSelect-JpXYvcx3.js → TagFilterSelect-4P59Divz.js} +21 -7
- package/build/server/chunks/{TagPalette-BRFwaJjA.js → TagPalette-BHcMcwnB.js} +6 -2
- package/build/server/chunks/{_layout.svelte-XYiCBYdR.js → _layout.svelte-CXVr2-kw.js} +37 -20
- package/build/server/chunks/_page.svelte-B83dWm05.js +37 -0
- package/build/server/chunks/{_page.svelte-BIPuluus.js → _page.svelte-C38GPN1j.js} +14 -14
- package/build/server/chunks/{_page.svelte-Bhh4sSnB.js → _page.svelte-CD0IEYmg.js} +17 -17
- package/build/server/chunks/{_page.svelte-CjGy40CV.js → _page.svelte-CECcYmpt.js} +15 -15
- package/build/server/chunks/{_page.svelte-BF1rZX3W.js → _page.svelte-CMGlwR2n.js} +15 -15
- package/build/server/chunks/{_page.svelte-lAHWug7_.js → _page.svelte-CTIaqzxb.js} +14 -14
- package/build/server/chunks/{_page.svelte-CVVhryMZ.js → _page.svelte-Cmll2d5V.js} +11 -11
- package/build/server/chunks/_page.svelte-DU_oZewu.js +37 -0
- package/build/server/chunks/{_page.svelte-BX7sPTsd.js → _page.svelte-DYv1A3HP.js} +14 -14
- package/build/server/chunks/{_page.svelte-BABuSfQV.js → _page.svelte-DZiIxvqy.js} +192 -27
- package/build/server/chunks/{_page.svelte-Bj9UPFlS.js → _page.svelte-DfqSjPDt.js} +115 -20
- package/build/server/chunks/{_page.svelte-Cszy-ZLO.js → _page.svelte-DhfqsxeM.js} +13 -13
- package/build/server/chunks/{_page.svelte-CpnSlvUc.js → _page.svelte-Dk_ltFrv.js} +10 -10
- package/build/server/chunks/{_page.svelte-DOL20vdP.js → _page.svelte-XukQYChO.js} +13 -13
- package/build/server/chunks/{_server.ts-DaPmxSzD.js → _server.ts-7_ZHRtsW.js} +4 -4
- package/build/server/chunks/{_server.ts-CUstD9T_.js → _server.ts-A-c3m5oY.js} +6 -6
- package/build/server/chunks/{_server.ts-0ElCHXbG.js → _server.ts-BAWpzUjG.js} +6 -6
- package/build/server/chunks/{_server.ts-BtJ5IP-M.js → _server.ts-BNByuygM.js} +90 -15
- package/build/server/chunks/{_server.ts-D7CeBX6G.js → _server.ts-Bdhr-X4W.js} +4 -4
- package/build/server/chunks/{_server.ts-DDJ1CJmi.js → _server.ts-Bf1XUFNH.js} +4 -4
- package/build/server/chunks/{_server.ts-D-hWM98k.js → _server.ts-C2Vddbd9.js} +4 -4
- package/build/server/chunks/{_server.ts-CWwUVXTu.js → _server.ts-C85xQ-Hl.js} +5 -5
- package/build/server/chunks/{_server.ts-DanVrsO_.js → _server.ts-CWGYB1sh.js} +4 -4
- package/build/server/chunks/{_server.ts-DbDbbE8L.js → _server.ts-C_1UUSBN.js} +8 -8
- package/build/server/chunks/{_server.ts-CPFhLm4S.js → _server.ts-CakPJzhA.js} +4 -4
- package/build/server/chunks/{_server.ts-ChVZie6n.js → _server.ts-CzWTLxUT.js} +4 -4
- package/build/server/chunks/_server.ts-DGBS8t84.js +217 -0
- package/build/server/chunks/{_server.ts-l6LlaJtw.js → _server.ts-DJ2NDG3j.js} +4 -4
- package/build/server/chunks/{_server.ts-BYXrkEFe.js → _server.ts-DN638aAs.js} +4 -4
- package/build/server/chunks/{_server.ts-CCl3IQPG.js → _server.ts-Dl9uBpSg.js} +7 -7
- package/build/server/chunks/{_server.ts-DAK1uZqQ.js → _server.ts-DpaFWwb4.js} +4 -4
- package/build/server/chunks/{_server.ts-DqhRyh23.js → _server.ts-SK7KLsH_.js} +4 -4
- package/build/server/chunks/{_server.ts-Do7W0Hva.js → _server.ts-cUat91Dq.js} +7 -7
- package/build/server/chunks/{browserContainer-f9Fxc9Ip.js → browserContainer-CKwEzjI1.js} +128 -9
- package/build/server/chunks/{buildSearchDocs-Dp3eMgv-.js → buildSearchDocs-BrmWPZWy.js} +13 -3
- package/build/server/chunks/{builderModeStore.svelte-Cq1G1oUM.js → builderModeStore.svelte-RcdHVOGm.js} +7 -7
- package/build/server/chunks/{client-BsBoZ_uZ.js → client-BmUa5bk0.js} +2 -2
- package/build/server/chunks/{error.svelte-CSlSmxpR.js → error.svelte-DpaG6Pan.js} +4 -4
- package/build/server/chunks/{featureQueueContext-BBZ5nfog.js → featureQueueContext-C1FULhTd.js} +2 -2
- package/build/server/chunks/{featureStore.svelte-B_DzQPpz.js → featureStore.svelte-jv4elrok.js} +5 -5
- package/build/server/chunks/{internal-DwL-IGZS.js → internal-BQQM4U2u.js} +2 -2
- package/build/server/chunks/{projectBundleClient-DiNldrQC.js → projectBundleClient-CU7VaUjl.js} +3 -3
- package/build/server/chunks/{projectContextStore.svelte-BOQaFWQu.js → projectContextStore.svelte-BbJULDzB.js} +3 -3
- package/build/server/chunks/{projectFeaturesStore.svelte-DpLnV8j6.js → projectFeaturesStore.svelte-CTPucxAI.js} +2 -2
- package/build/server/chunks/{projectStore.svelte-DUesqJNB.js → projectStore.svelte-DVxYr7UH.js} +29 -4
- package/build/server/chunks/{reconcile-zgOYJYbP.js → reconcile-C8OBvzeK.js} +2 -2
- package/build/server/chunks/{snapshotRepository-CNzTq4py.js → snapshotRepository-DyccX9dO.js} +245 -84
- package/build/server/chunks/{state-BRTzak3G.js → state-BOBs5j8z.js} +3 -3
- package/build/server/chunks/{stores-uVljJ-SP.js → stores-DrH1QcoG.js} +3 -3
- package/build/server/chunks/{sync-DzhcwD3l.js → sync-CeeTnvzJ.js} +2 -2
- package/build/server/chunks/{syncAwareRepositories-B8hccc-z.js → syncAwareRepositories-AVvcGscu.js} +2 -2
- package/build/server/chunks/{tagPaletteStore.svelte-DUHRIfMM.js → tagPaletteStore.svelte-CMT9IPMA.js} +4 -4
- package/build/server/index.js +1 -1
- package/build/server/manifest.js +42 -35
- package/cli/commands/check.ts +16 -8
- package/cli/commands/outdated.ts +44 -0
- package/cli/skills/unspa-adopt/SKILL.md +10 -1
- package/cli/skills/unspa-audit/SKILL.md +13 -6
- package/cli/skills/unspa-edit/SKILL.md +38 -8
- package/cli/unspa.ts +42 -0
- package/cli/util/context-files.ts +7 -0
- package/mcp-server/bin.ts +10 -0
- package/mcp-server/resources/guide.ts +49 -7
- package/mcp-server/resources/operations.ts +21 -8
- package/mcp-server/server.ts +6 -1
- package/mcp-server/tools/_entity_builders.ts +57 -0
- package/mcp-server/tools/_shared.ts +6 -0
- package/mcp-server/tools/acceptanceCriterion.ts +103 -0
- package/mcp-server/tools/action.ts +33 -2
- package/mcp-server/tools/batch-ops/featureLevelOps.ts +113 -24
- package/mcp-server/tools/batch-ops/ruleInvariantOps.ts +35 -3
- package/mcp-server/tools/batch-ops/scenarioEventOps.ts +6 -0
- package/mcp-server/tools/batch-ops/stateParamOps.ts +10 -0
- package/mcp-server/tools/batch-ops/surfaceActionOps.ts +53 -0
- package/mcp-server/tools/constant.ts +106 -0
- package/mcp-server/tools/effect.ts +26 -15
- package/mcp-server/tools/event.ts +16 -6
- package/mcp-server/tools/feature.ts +32 -0
- package/mcp-server/tools/parameter.ts +13 -3
- package/mcp-server/tools/project.ts +104 -3
- package/mcp-server/tools/provenance.ts +561 -8
- package/mcp-server/tools/read.ts +1 -1
- package/mcp-server/tools/repoContext.ts +27 -4
- package/mcp-server/tools/rule.ts +11 -1
- package/mcp-server/tools/specGaps.ts +103 -1
- package/mcp-server/tools/transition.ts +58 -26
- package/mcp-server/tools/verification.ts +15 -7
- package/package.json +1 -1
- package/src/features/behavior-digest/domain/services/buildDigest.ts +2 -0
- package/src/features/behavior-model/domain/entities/AcceptanceCriterion.ts +47 -0
- package/src/features/behavior-model/domain/entities/Action.ts +48 -1
- package/src/features/behavior-model/domain/entities/ActionOutcome.ts +55 -0
- package/src/features/behavior-model/domain/entities/Dependency.ts +66 -0
- package/src/features/behavior-model/domain/entities/EventDefinition.ts +25 -0
- package/src/features/behavior-model/domain/entities/Feature.ts +19 -0
- package/src/features/behavior-model/domain/services/BehaviorGraphModel.ts +11 -4
- package/src/features/behavior-model/domain/services/BehaviorSemantics.ts +176 -0
- package/src/features/behavior-model/domain/services/DecisionAnalysis.ts +226 -0
- package/src/features/behavior-model/domain/services/EffectApplier.ts +25 -0
- package/src/features/behavior-model/domain/services/FeatureSharedStateNormalizer.ts +4 -0
- package/src/features/behavior-model/domain/services/StatePathReferences.ts +5 -0
- package/src/features/behavior-model/domain/services/transforms/modelTransforms.ts +84 -0
- package/src/features/behavior-model/domain/services/transforms/ruleTransforms.ts +92 -1
- package/src/features/behavior-model/domain/services/transforms/scenarioTransforms.ts +48 -0
- package/src/features/behavior-model/domain/services/validation/featureShape.ts +54 -0
- package/src/features/behavior-model/domain/services/validation/referenceIntegrity.ts +386 -4
- package/src/features/behavior-model/domain/value-objects/Effect.ts +31 -4
- package/src/features/behavior-model/domain/value-objects/ids.ts +10 -0
- package/src/features/behavior-model/presentation/components/AcceptanceCriteriaEditor.svelte +179 -0
- package/src/features/behavior-model/presentation/components/FeatureEditor.svelte +14 -2
- package/src/features/behavior-model/presentation/stores/editorStore.svelte.ts +2 -1
- package/src/features/behavior-model/presentation/stores/featuresStore.svelte.ts +16 -0
- package/src/features/behavior-model/presentation/view-models/factories.ts +22 -0
- package/src/features/global-search/domain/SearchDoc.ts +4 -2
- package/src/features/global-search/domain/buildSearchDocs.ts +22 -0
- package/src/features/global-search/domain/searchNav.ts +2 -1
- package/src/features/global-search/presentation/searchKindMeta.ts +5 -0
- package/src/features/library/domain/entities/SurfaceBlueprint.ts +5 -5
- package/src/features/maturity/domain/ConfidenceMatrix.ts +152 -0
- package/src/features/maturity/domain/MaturityScorer.ts +38 -48
- package/src/features/mcp-tools/application/tools/getNeighborhood.ts +24 -42
- package/src/features/mcp-tools/application/tools/scoreFeature.ts +11 -1
- package/src/features/projects/application/use-cases/GetProjectAggregate.ts +22 -1
- package/src/features/projects/domain/entities/CoreFeature.ts +16 -0
- package/src/features/projects/domain/entities/Project.ts +13 -0
- package/src/features/projects/domain/services/coreFeatures.ts +134 -0
- package/src/features/projects/presentation/components/ProjectCoreFeaturesPanel.svelte +243 -0
- package/src/features/projects/presentation/components/ProjectEditor.svelte +24 -1
- package/src/features/projects/presentation/stores/projectStore.svelte.ts +37 -0
- package/src/features/simulator/domain/ParameterDomains.ts +126 -0
- package/src/features/simulator/domain/SimulationResult.ts +25 -1
- package/src/features/simulator/domain/SimulatorEngine.ts +59 -4
- package/src/features/simulator/domain/StateExplorer.ts +74 -61
- package/src/features/source-provenance/domain/Candidates.ts +270 -0
- package/src/features/source-provenance/domain/Conflicts.ts +168 -0
- package/src/features/source-provenance/domain/ProjectSource.ts +105 -0
- package/src/features/source-provenance/domain/Provenance.ts +16 -0
- package/src/features/source-provenance/infrastructure/io/ProvenanceJson.ts +103 -0
- package/src/features/source-provenance/infrastructure/io/SourceJson.ts +17 -0
- package/src/features/update-check/application/CheckForUpdate.ts +73 -0
- package/src/features/update-check/application/ports/VersionCache.ts +19 -0
- package/src/features/update-check/application/ports/VersionRegistry.ts +13 -0
- package/src/features/update-check/domain/VersionStatus.ts +12 -0
- package/src/features/update-check/domain/compareVersions.ts +34 -0
- package/src/features/update-check/infrastructure/FileVersionCache.ts +31 -0
- package/src/features/update-check/infrastructure/NpmRegistryVersionSource.ts +63 -0
- package/src/features/update-check/infrastructure/updateCheck.ts +115 -0
- package/src/features/update-check/presentation/components/UpdateBanner.svelte +76 -0
- package/src/features/verification/domain/VerificationThresholds.ts +24 -0
- package/src/features/verification/domain/aggregateVerdict.ts +10 -1
- package/src/routes/+layout.svelte +5 -0
- package/src/routes/api/update-status/+server.ts +20 -0
- package/src/shared/domain/coreFeatureTag.ts +45 -0
- package/build/client/_app/immutable/assets/0.CXMmyVhh.css +0 -1
- package/build/client/_app/immutable/assets/0.CXMmyVhh.css.br +0 -0
- package/build/client/_app/immutable/assets/0.CXMmyVhh.css.gz +0 -0
- package/build/client/_app/immutable/chunks/B9Q7cSuz2.js +0 -3
- package/build/client/_app/immutable/chunks/B9Q7cSuz2.js.br +0 -0
- package/build/client/_app/immutable/chunks/B9Q7cSuz2.js.gz +0 -0
- package/build/client/_app/immutable/chunks/BDNWGeD3.js +0 -1
- package/build/client/_app/immutable/chunks/BDNWGeD3.js.br +0 -0
- package/build/client/_app/immutable/chunks/BDNWGeD3.js.gz +0 -0
- package/build/client/_app/immutable/chunks/BEi9bPpt.js.br +0 -0
- package/build/client/_app/immutable/chunks/BEi9bPpt.js.gz +0 -0
- package/build/client/_app/immutable/chunks/BGjKBqhd.js.br +0 -0
- package/build/client/_app/immutable/chunks/BGjKBqhd.js.gz +0 -0
- package/build/client/_app/immutable/chunks/BLlLbCwR.js +0 -1
- package/build/client/_app/immutable/chunks/BLlLbCwR.js.br +0 -2
- package/build/client/_app/immutable/chunks/BLlLbCwR.js.gz +0 -0
- package/build/client/_app/immutable/chunks/BZzfs2NN.js +0 -1
- package/build/client/_app/immutable/chunks/BZzfs2NN.js.br +0 -0
- package/build/client/_app/immutable/chunks/BZzfs2NN.js.gz +0 -0
- package/build/client/_app/immutable/chunks/Bb7G5rrB2.js +0 -11
- package/build/client/_app/immutable/chunks/Bb7G5rrB2.js.br +0 -0
- package/build/client/_app/immutable/chunks/Bb7G5rrB2.js.gz +0 -0
- package/build/client/_app/immutable/chunks/BdU1Yt_e.js.br +0 -0
- package/build/client/_app/immutable/chunks/BdU1Yt_e.js.gz +0 -0
- package/build/client/_app/immutable/chunks/BlkPyloS.js +0 -1
- package/build/client/_app/immutable/chunks/BlkPyloS.js.br +0 -0
- package/build/client/_app/immutable/chunks/BlkPyloS.js.gz +0 -0
- package/build/client/_app/immutable/chunks/CHmg-Am5.js.br +0 -0
- package/build/client/_app/immutable/chunks/CHmg-Am5.js.gz +0 -0
- package/build/client/_app/immutable/chunks/CPYkXatp.js.br +0 -2
- package/build/client/_app/immutable/chunks/CPYkXatp.js.gz +0 -0
- package/build/client/_app/immutable/chunks/CV2_qPHL2.js.br +0 -0
- package/build/client/_app/immutable/chunks/CV2_qPHL2.js.gz +0 -0
- package/build/client/_app/immutable/chunks/CXhiS9kD.js.br +0 -0
- package/build/client/_app/immutable/chunks/CXhiS9kD.js.gz +0 -0
- package/build/client/_app/immutable/chunks/CXvvf4uQ.js +0 -1
- package/build/client/_app/immutable/chunks/CXvvf4uQ.js.br +0 -0
- package/build/client/_app/immutable/chunks/CXvvf4uQ.js.gz +0 -0
- package/build/client/_app/immutable/chunks/CmaTEgmy2.js.br +0 -0
- package/build/client/_app/immutable/chunks/CmaTEgmy2.js.gz +0 -0
- package/build/client/_app/immutable/chunks/CuI8wNzS.js.br +0 -0
- package/build/client/_app/immutable/chunks/CuI8wNzS.js.gz +0 -0
- package/build/client/_app/immutable/chunks/DFsgZTOD2.js.br +0 -0
- package/build/client/_app/immutable/chunks/DFsgZTOD2.js.gz +0 -0
- package/build/client/_app/immutable/chunks/DPrNvhwL.js +0 -1
- package/build/client/_app/immutable/chunks/DPrNvhwL.js.br +0 -0
- package/build/client/_app/immutable/chunks/DPrNvhwL.js.gz +0 -0
- package/build/client/_app/immutable/chunks/DQ6pI1Eb.js +0 -1
- package/build/client/_app/immutable/chunks/DQ6pI1Eb.js.br +0 -0
- package/build/client/_app/immutable/chunks/DQ6pI1Eb.js.gz +0 -0
- package/build/client/_app/immutable/chunks/DUlWXa5h.js.br +0 -0
- package/build/client/_app/immutable/chunks/DUlWXa5h.js.gz +0 -0
- package/build/client/_app/immutable/chunks/DVZgPZIa.js.br +0 -0
- package/build/client/_app/immutable/chunks/DVZgPZIa.js.gz +0 -0
- package/build/client/_app/immutable/chunks/DsI4egLI2.js.br +0 -0
- package/build/client/_app/immutable/chunks/DsI4egLI2.js.gz +0 -0
- package/build/client/_app/immutable/chunks/DwwbPhx_2.js.br +0 -0
- package/build/client/_app/immutable/chunks/DwwbPhx_2.js.gz +0 -0
- package/build/client/_app/immutable/chunks/SoqLurki2.js.br +0 -0
- package/build/client/_app/immutable/chunks/SoqLurki2.js.gz +0 -0
- package/build/client/_app/immutable/chunks/bYs7XjWt.js.br +0 -0
- package/build/client/_app/immutable/chunks/bYs7XjWt.js.gz +0 -0
- package/build/client/_app/immutable/chunks/j_2fbb1D2.js.br +0 -0
- package/build/client/_app/immutable/chunks/j_2fbb1D2.js.gz +0 -0
- package/build/client/_app/immutable/chunks/kF7Ff6kI2.js +0 -1
- package/build/client/_app/immutable/chunks/kF7Ff6kI2.js.br +0 -0
- package/build/client/_app/immutable/chunks/kF7Ff6kI2.js.gz +0 -0
- package/build/client/_app/immutable/chunks/m6hfVWqp2.js.br +0 -0
- package/build/client/_app/immutable/chunks/m6hfVWqp2.js.gz +0 -0
- package/build/client/_app/immutable/entry/app.BoGKtCbP.js.br +0 -0
- package/build/client/_app/immutable/entry/app.BoGKtCbP.js.gz +0 -0
- package/build/client/_app/immutable/entry/start.CGYUjE_a.js +0 -1
- package/build/client/_app/immutable/entry/start.CGYUjE_a.js.br +0 -1
- package/build/client/_app/immutable/entry/start.CGYUjE_a.js.gz +0 -0
- package/build/client/_app/immutable/nodes/0.D2l1xsYO.js +0 -7
- package/build/client/_app/immutable/nodes/0.D2l1xsYO.js.br +0 -0
- package/build/client/_app/immutable/nodes/0.D2l1xsYO.js.gz +0 -0
- package/build/client/_app/immutable/nodes/1.C41ljjsg.js.br +0 -2
- package/build/client/_app/immutable/nodes/1.C41ljjsg.js.gz +0 -0
- package/build/client/_app/immutable/nodes/11.cksFH0wF.js.br +0 -0
- package/build/client/_app/immutable/nodes/11.cksFH0wF.js.gz +0 -0
- package/build/client/_app/immutable/nodes/12.iC-hNmiA.js +0 -4
- package/build/client/_app/immutable/nodes/12.iC-hNmiA.js.br +0 -0
- package/build/client/_app/immutable/nodes/12.iC-hNmiA.js.gz +0 -0
- package/build/client/_app/immutable/nodes/13.CncQNyXC.js.br +0 -0
- package/build/client/_app/immutable/nodes/13.CncQNyXC.js.gz +0 -0
- package/build/client/_app/immutable/nodes/14.ChOUpRmd.js +0 -1
- package/build/client/_app/immutable/nodes/14.ChOUpRmd.js.br +0 -0
- package/build/client/_app/immutable/nodes/14.ChOUpRmd.js.gz +0 -0
- package/build/client/_app/immutable/nodes/15.g5Y872zQ.js +0 -4
- package/build/client/_app/immutable/nodes/15.g5Y872zQ.js.br +0 -0
- package/build/client/_app/immutable/nodes/15.g5Y872zQ.js.gz +0 -0
- package/build/client/_app/immutable/nodes/16.CwBnCMQO.js.br +0 -0
- package/build/client/_app/immutable/nodes/16.CwBnCMQO.js.gz +0 -0
- package/build/client/_app/immutable/nodes/2.Bt4Iqxol.js.br +0 -0
- package/build/client/_app/immutable/nodes/2.Bt4Iqxol.js.gz +0 -0
- package/build/client/_app/immutable/nodes/3.BRgVPHQO.js +0 -1
- package/build/client/_app/immutable/nodes/3.BRgVPHQO.js.br +0 -0
- package/build/client/_app/immutable/nodes/3.BRgVPHQO.js.gz +0 -0
- package/build/client/_app/immutable/nodes/4.CeWHKt3l.js.br +0 -0
- package/build/client/_app/immutable/nodes/4.CeWHKt3l.js.gz +0 -0
- package/build/client/_app/immutable/nodes/5.BsDykxT_.js +0 -48
- package/build/client/_app/immutable/nodes/5.BsDykxT_.js.br +0 -0
- package/build/client/_app/immutable/nodes/5.BsDykxT_.js.gz +0 -0
- package/build/client/_app/immutable/nodes/6.D27zNYvX.js +0 -1
- package/build/client/_app/immutable/nodes/6.D27zNYvX.js.br +0 -0
- package/build/client/_app/immutable/nodes/6.D27zNYvX.js.gz +0 -0
- package/build/client/_app/immutable/nodes/7.DowKev60.js +0 -1
- package/build/client/_app/immutable/nodes/7.DowKev60.js.br +0 -0
- package/build/client/_app/immutable/nodes/7.DowKev60.js.gz +0 -0
- package/build/client/_app/immutable/nodes/8.TZdtToNp.js.br +0 -0
- package/build/client/_app/immutable/nodes/8.TZdtToNp.js.gz +0 -0
- package/build/client/_app/immutable/nodes/9.D1ZY4q0l.js +0 -3
- package/build/client/_app/immutable/nodes/9.D1ZY4q0l.js.br +0 -0
- package/build/client/_app/immutable/nodes/9.D1ZY4q0l.js.gz +0 -0
- package/build/server/chunks/0-C67Giiqz.js +0 -15
- package/build/server/chunks/1-D4TEKZxt.js +0 -9
- package/build/server/chunks/11-JKWtxQrH.js +0 -9
- package/build/server/chunks/12-Cy5zVfzG.js +0 -9
- package/build/server/chunks/13-Cyv2nG1W.js +0 -9
- package/build/server/chunks/14-Dpp_GKen.js +0 -9
- package/build/server/chunks/15-Cgbjy5Fv.js +0 -9
- package/build/server/chunks/16-B54PgQ3v.js +0 -9
- package/build/server/chunks/2-CBlBs4e7.js +0 -9
- package/build/server/chunks/4-Cr4eJKVo.js +0 -16
- package/build/server/chunks/5-BB-F-IMG.js +0 -9
- package/build/server/chunks/6-W_zj8m6s.js +0 -9
- package/build/server/chunks/7-BzVt_L8e.js +0 -9
- package/build/server/chunks/8-F74e52_o.js +0 -9
- package/build/server/chunks/9-VglDkcOF.js +0 -9
- package/build/server/chunks/_page.svelte-OT0nZoW2.js +0 -37
- package/build/server/chunks/_page.svelte-TsXHWCXP.js +0 -37
package/README.md
CHANGED
|
@@ -84,12 +84,17 @@ Point your AI agent at whatever you already have: a design screenshot, a product
|
|
|
84
84
|
## What you get
|
|
85
85
|
|
|
86
86
|
- **Scenarios as spec tests**: the deterministic simulator runs every scenario, whole multi-step flows included, and reports pass or fail per assertion.
|
|
87
|
-
- **
|
|
88
|
-
- **
|
|
87
|
+
- **Prose acceptance criteria**: capture feature-level Given/When/Then edge cases as documentation, the honest complement to model-checked scenarios. Rendered, searchable, and carried in the model; never simulated or scored, because prose is not a formal assertion.
|
|
88
|
+
- **Bounded model checking**: explores the reachable state space for the paths you *didn't* write scenarios for: invariant counterexamples with the action path that reaches them, dead actions, deadlocks, and liveness goals ("done stays reachable"), drawing action inputs from their domains (enum values, booleans, numeric bounds) so input-gated branches are explored too.
|
|
89
|
+
- **Model what actually happens**: typed action outcomes (declined, timed out, partial), external dependencies + `invoke_operation` calls with their timeout / retry / idempotency contract, event delivery guarantees (a `required` handler failure fails the emitter; `transactional` rolls it back), and scoped invariant relaxation for repair actions.
|
|
90
|
+
- **Maturity scoring**: per-area scores plus an honest confidence matrix (the weakest dimension is the headline, so a strong score can't hide a zero); `get_spec_gaps` also proves rule-set contradictions and flags external calls with no timeout.
|
|
89
91
|
- **Spec ↔ code audit**: every entity records where it lives in code; coverage, gaps, and drift are reported, and generated scenario tests can *prove* the implementation matches, not just claim it.
|
|
90
92
|
- **A CI gate**: `unspa check` runs the whole verification spine and exits non-zero on failure; `unspa ci` scaffolds the GitHub Actions workflow.
|
|
93
|
+
- **An evidence-first strict gate**: `unspa check --strict` turns drift, skipped actions, truncated exploration, dead actions, unmet goals, missing scenarios, and incomplete verified coverage into failures instead of advisory warnings.
|
|
91
94
|
- **Generated TypeScript contracts**: state, event, and parameter types your implementation imports, so the compiler catches divergence first.
|
|
92
95
|
- **Diagrams & provenance**: project the model as a statechart, sequence, ER, flowchart, or mindmap (export Mermaid, DOT, SVG/PNG), and trace every element back to the exact source span it was extracted from.
|
|
96
|
+
- **Source trust & completeness**: rank sources by authority, record two that contradict each other as a first-class conflict (resolved by authority, not reading order), and measure the share of each source's behavior that actually reached the model, so "what might we be missing?" has an answer.
|
|
97
|
+
- **Core features**: declare a project's product pillars once and group features under them, so you filter and navigate by core feature precisely instead of by a sea of tags.
|
|
93
98
|
- **A live dashboard**: editor, simulator, behavior graph, verify view with navigable counterexample traces, implementation coverage, global search (⌘K).
|
|
94
99
|
- **Multi-agent ready**: real-time sync for several humans and AI agents editing at once, with per-agent attribution.
|
|
95
100
|
- **Local-first**: plain JSON on your disk. No accounts, no telemetry, no hosted service.
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
.untangler-sky.svelte-dds6m1{z-index:100;pointer-events:none;position:fixed;inset:0;overflow:hidden}.untangler.svelte-dds6m1{--duration:5s;--ease:cubic-bezier(.3, 0, .2, 1);--outline:#0f172a;--shadow:drop-shadow(0 4px 4px #0f172a59);--strand-1:#f43f5e;--strand-2:#f59e0b;--strand-3:#10b981;--strand-4:#0ea5e9;width:260px;height:120px;animation:svelte-dds6m1-untangler-flight var(--duration) var(--ease) forwards;filter:drop-shadow(0 14px 18px #0f172a29);position:absolute;top:26vh;left:-260px}svg.svelte-dds6m1{width:100%;height:auto;overflow:visible}.tangle.svelte-dds6m1,.clean.svelte-dds6m1{fill:none;stroke-linecap:round;stroke-linejoin:round}.tangle.svelte-dds6m1{animation:svelte-dds6m1-tangle-wipe var(--duration) var(--ease) forwards}.clean.svelte-dds6m1{animation:svelte-dds6m1-clean-reveal var(--duration) var(--ease) forwards}.tangle-outline.svelte-dds6m1,.clean-outline.svelte-dds6m1{stroke:var(--outline);stroke-width:11px;filter:var(--shadow)}.tangle-fill.svelte-dds6m1,.clean-fill.svelte-dds6m1{stroke-width:7px}.tangle-fill.svelte-dds6m1>:where(.svelte-dds6m1):first-child,.clean-fill.svelte-dds6m1>:where(.svelte-dds6m1):first-child{stroke:var(--strand-1)}.tangle-fill.svelte-dds6m1>:where(.svelte-dds6m1):nth-child(2),.clean-fill.svelte-dds6m1>:where(.svelte-dds6m1):nth-child(2){stroke:var(--strand-2)}.tangle-fill.svelte-dds6m1>:where(.svelte-dds6m1):nth-child(3),.clean-fill.svelte-dds6m1>:where(.svelte-dds6m1):nth-child(3){stroke:var(--strand-3)}.tangle-fill.svelte-dds6m1>:where(.svelte-dds6m1):nth-child(4),.clean-fill.svelte-dds6m1>:where(.svelte-dds6m1):nth-child(4){stroke:var(--strand-4)}.glint.svelte-dds6m1{fill:#fff;opacity:0;filter:drop-shadow(0 0 6px #ffffffe6);mix-blend-mode:screen;animation:svelte-dds6m1-glint-sweep var(--duration) var(--ease) forwards}@keyframes svelte-dds6m1-untangler-flight{0%{opacity:0;transform:translate(-20vw,28px)rotate(-3deg)scale(.95)}22%,78%{opacity:1;transform:translate(42vw)rotate(0)scale(1)}90%{opacity:1;transform:translate(60vw,-6px)rotate(2deg)scale(1)}to{opacity:0;transform:translate(calc(100vw + 280px),-22px)rotate(6deg)scale(.96)}}@keyframes svelte-dds6m1-tangle-wipe{0%,28%{clip-path:inset(0)}72%,to{clip-path:inset(0 0 0 100%)}}@keyframes svelte-dds6m1-clean-reveal{0%,28%{clip-path:inset(0 100% 0 0)}72%,to{clip-path:inset(0)}}@keyframes svelte-dds6m1-glint-sweep{0%,70%{opacity:0;transform:translate(0)}74%{opacity:1}88%{opacity:1;transform:translate(258px)}94%,to{opacity:0;transform:translate(264px)}}@media (prefers-reduced-motion:reduce){.untangler.svelte-dds6m1{animation:2.6s ease-out forwards svelte-dds6m1-untangler-peek}.tangle.svelte-dds6m1{clip-path:none;animation:2.6s ease-out forwards svelte-dds6m1-tangle-fade}.clean.svelte-dds6m1{clip-path:none;animation:2.6s ease-out forwards svelte-dds6m1-clean-fade}}@keyframes svelte-dds6m1-untangler-peek{0%{opacity:0;transform:translate(38vw,20px)scale(.96)}20%,80%{opacity:1;transform:translate(38vw)scale(.96)}to{opacity:0;transform:translate(38vw,-10px)scale(.96)}}@keyframes svelte-dds6m1-tangle-fade{0%,40%{opacity:1}65%,to{opacity:0}}@keyframes svelte-dds6m1-clean-fade{0%,40%{opacity:0}65%,to{opacity:1}}@layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-translate-x:0;--tw-translate-y:0;--tw-translate-z:0;--tw-rotate-x:initial;--tw-rotate-y:initial;--tw-rotate-z:initial;--tw-skew-x:initial;--tw-skew-y:initial;--tw-space-y-reverse:0;--tw-divide-y-reverse:0;--tw-border-style:solid;--tw-gradient-position:initial;--tw-gradient-from:#0000;--tw-gradient-via:#0000;--tw-gradient-to:#0000;--tw-gradient-stops:initial;--tw-gradient-via-stops:initial;--tw-gradient-from-position:0%;--tw-gradient-via-position:50%;--tw-gradient-to-position:100%;--tw-leading:initial;--tw-font-weight:initial;--tw-tracking:initial;--tw-ordinal:initial;--tw-slashed-zero:initial;--tw-numeric-figure:initial;--tw-numeric-spacing:initial;--tw-numeric-fraction:initial;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-blur:initial;--tw-brightness:initial;--tw-contrast:initial;--tw-grayscale:initial;--tw-hue-rotate:initial;--tw-invert:initial;--tw-opacity:initial;--tw-saturate:initial;--tw-sepia:initial;--tw-drop-shadow:initial;--tw-drop-shadow-color:initial;--tw-drop-shadow-alpha:100%;--tw-drop-shadow-size:initial;--tw-backdrop-blur:initial;--tw-backdrop-brightness:initial;--tw-backdrop-contrast:initial;--tw-backdrop-grayscale:initial;--tw-backdrop-hue-rotate:initial;--tw-backdrop-invert:initial;--tw-backdrop-opacity:initial;--tw-backdrop-saturate:initial;--tw-backdrop-sepia:initial;--tw-duration:initial;--tw-ease:initial;--tw-content:"";--tw-scale-x:1;--tw-scale-y:1;--tw-scale-z:1}}}@layer theme{:root,:host{--font-sans:"Inter", ui-sans-serif, system-ui, sans-serif;--font-mono:"JetBrains Mono", ui-monospace, SFMono-Regular, monospace;--color-red-50:oklch(97.1% .013 17.38);--color-red-100:oklch(93.6% .032 17.717);--color-red-200:oklch(88.5% .062 18.334);--color-red-300:oklch(80.8% .114 19.571);--color-red-400:oklch(70.4% .191 22.216);--color-red-500:oklch(63.7% .237 25.331);--color-red-600:oklch(57.7% .245 27.325);--color-red-700:oklch(50.5% .213 27.518);--color-red-800:oklch(44.4% .177 26.899);--color-red-900:oklch(39.6% .141 25.723);--color-orange-100:oklch(95.4% .038 75.164);--color-orange-600:oklch(64.6% .222 41.116);--color-orange-800:oklch(47% .157 37.304);--color-amber-50:oklch(98.7% .022 95.277);--color-amber-100:oklch(96.2% .059 95.617);--color-amber-200:oklch(92.4% .12 95.746);--color-amber-300:oklch(87.9% .169 91.605);--color-amber-400:oklch(82.8% .189 84.429);--color-amber-500:oklch(76.9% .188 70.08);--color-amber-600:oklch(66.6% .179 58.318);--color-amber-700:oklch(55.5% .163 48.998);--color-amber-800:oklch(47.3% .137 46.201);--color-amber-900:oklch(41.4% .112 45.904);--color-lime-50:oklch(98.6% .031 120.757);--color-lime-200:oklch(93.8% .127 124.321);--color-lime-600:oklch(64.8% .2 131.684);--color-lime-900:oklch(40.5% .101 131.063);--color-green-600:oklch(62.7% .194 149.214);--color-emerald-50:oklch(97.9% .021 166.113);--color-emerald-100:oklch(95% .052 163.051);--color-emerald-200:oklch(90.5% .093 164.15);--color-emerald-400:oklch(76.5% .177 163.223);--color-emerald-500:oklch(69.6% .17 162.48);--color-emerald-600:oklch(59.6% .145 163.225);--color-emerald-700:oklch(50.8% .118 165.612);--color-emerald-800:oklch(43.2% .095 166.913);--color-emerald-900:oklch(37.8% .077 168.94);--color-teal-100:oklch(95.3% .051 180.801);--color-teal-200:oklch(91% .096 180.426);--color-teal-600:oklch(60% .118 184.704);--color-teal-800:oklch(43.7% .078 188.216);--color-teal-900:oklch(38.6% .063 188.416);--color-cyan-50:oklch(98.4% .019 200.873);--color-cyan-100:oklch(95.6% .045 203.388);--color-cyan-200:oklch(91.7% .08 205.041);--color-cyan-300:oklch(86.5% .127 207.078);--color-cyan-400:oklch(78.9% .154 211.53);--color-cyan-600:oklch(60.9% .126 221.723);--color-cyan-700:oklch(52% .105 223.128);--color-cyan-800:oklch(45% .085 224.283);--color-cyan-950:oklch(30.2% .056 229.695);--color-sky-50:oklch(97.7% .013 236.62);--color-sky-100:oklch(95.1% .026 236.824);--color-sky-200:oklch(90.1% .058 230.902);--color-sky-300:oklch(82.8% .111 230.318);--color-sky-400:oklch(74.6% .16 232.661);--color-sky-600:oklch(58.8% .158 241.966);--color-sky-700:oklch(50% .134 242.749);--color-sky-800:oklch(44.3% .11 240.79);--color-sky-900:oklch(39.1% .09 240.876);--color-blue-500:oklch(62.3% .214 259.815);--color-blue-600:oklch(54.6% .245 262.881);--color-indigo-50:oklch(96.2% .018 272.314);--color-indigo-100:oklch(93% .034 272.788);--color-indigo-200:oklch(87% .065 274.039);--color-indigo-400:oklch(67.3% .182 276.935);--color-indigo-600:oklch(51.1% .262 276.966);--color-indigo-800:oklch(39.8% .195 277.366);--color-indigo-900:oklch(35.9% .144 278.697);--color-violet-50:oklch(96.9% .016 293.756);--color-violet-100:oklch(94.3% .029 294.588);--color-violet-200:oklch(89.4% .057 293.283);--color-violet-300:oklch(81.1% .111 293.571);--color-violet-400:oklch(70.2% .183 293.541);--color-violet-500:oklch(60.6% .25 292.717);--color-violet-600:oklch(54.1% .281 293.009);--color-violet-700:oklch(49.1% .27 292.581);--color-violet-800:oklch(43.2% .232 292.759);--color-violet-900:oklch(38% .189 293.745);--color-purple-100:oklch(94.6% .033 307.174);--color-purple-600:oklch(55.8% .288 302.321);--color-purple-700:oklch(49.6% .265 301.924);--color-purple-800:oklch(43.8% .218 303.724);--color-fuchsia-600:oklch(59.1% .293 322.896);--color-pink-600:oklch(59.2% .249 .584);--color-rose-50:oklch(96.9% .015 12.422);--color-rose-100:oklch(94.1% .03 12.58);--color-rose-200:oklch(89.2% .058 10.001);--color-rose-300:oklch(81% .117 11.638);--color-rose-400:oklch(71.2% .194 13.428);--color-rose-500:oklch(64.5% .246 16.439);--color-rose-600:oklch(58.6% .253 17.585);--color-rose-700:oklch(51.4% .222 16.935);--color-rose-800:oklch(45.5% .188 13.697);--color-slate-50:oklch(98.4% .003 247.858);--color-slate-100:oklch(96.8% .007 247.896);--color-slate-200:oklch(92.9% .013 255.508);--color-slate-300:oklch(86.9% .022 252.894);--color-slate-400:oklch(70.4% .04 256.788);--color-slate-500:oklch(55.4% .046 257.417);--color-slate-600:oklch(44.6% .043 257.281);--color-slate-700:oklch(37.2% .044 257.287);--color-slate-800:oklch(27.9% .041 260.031);--color-slate-900:oklch(20.8% .042 265.755);--color-slate-950:oklch(12.9% .042 264.695);--color-neutral-50:oklch(98.5% 0 0);--color-neutral-100:oklch(97% 0 0);--color-neutral-200:oklch(92.2% 0 0);--color-neutral-300:oklch(87% 0 0);--color-neutral-400:oklch(70.8% 0 0);--color-neutral-500:oklch(55.6% 0 0);--color-neutral-600:oklch(43.9% 0 0);--color-neutral-700:oklch(37.1% 0 0);--color-neutral-800:oklch(26.9% 0 0);--color-neutral-900:oklch(20.5% 0 0);--color-black:#000;--color-white:#fff;--spacing:.25rem;--container-sm:24rem;--container-md:28rem;--container-lg:32rem;--container-xl:36rem;--container-2xl:42rem;--container-3xl:48rem;--container-4xl:56rem;--container-5xl:64rem;--container-7xl:80rem;--text-xs:.75rem;--text-xs--line-height:calc(1 / .75);--text-sm:.875rem;--text-sm--line-height:calc(1.25 / .875);--text-base:1rem;--text-base--line-height:calc(1.5 / 1);--text-lg:1.125rem;--text-lg--line-height:calc(1.75 / 1.125);--text-xl:1.25rem;--text-xl--line-height:calc(1.75 / 1.25);--text-2xl:1.5rem;--text-2xl--line-height:calc(2 / 1.5);--text-3xl:1.875rem;--text-3xl--line-height:calc(2.25 / 1.875);--text-4xl:2.25rem;--text-4xl--line-height:calc(2.5 / 2.25);--font-weight-normal:400;--font-weight-medium:500;--font-weight-semibold:600;--font-weight-bold:700;--tracking-tight:-.025em;--tracking-wide:.025em;--tracking-wider:.05em;--leading-tight:1.25;--leading-snug:1.375;--leading-relaxed:1.625;--radius-sm:.25rem;--radius-md:.375rem;--radius-lg:.5rem;--radius-xl:.75rem;--radius-2xl:1rem;--ease-out:cubic-bezier(0, 0, .2, 1);--ease-in-out:cubic-bezier(.4, 0, .2, 1);--animate-spin:spin 1s linear infinite;--animate-pulse:pulse 2s cubic-bezier(.4, 0, .6, 1) infinite;--blur-sm:8px;--default-transition-duration:.15s;--default-transition-timing-function:cubic-bezier(.4, 0, .2, 1);--default-font-family:var(--font-sans);--default-mono-font-family:var(--font-mono);--color-brand-50:#ecfeff;--color-brand-100:#cffafe;--color-brand-200:#a5f3fc;--color-brand-300:#67e8f9;--color-brand-400:#22d3ee;--color-brand-500:#06b6d4;--color-brand-600:#0891b2;--color-brand-700:#0e7490;--color-brand-800:#155e75;--color-brand-900:#164e63;--color-canvas:#f8fafc;--color-brand-pink:#db2777;--color-brand-peach:#ea580c;--color-brand-ochre:#ca8a04;--color-brand-mint:#14b8a6;--color-brand-coral:#dc2626;--color-ink:#0f172a;--color-hairline:#e2e8f0;--font-brand:"Dancing Script", ui-serif, cursive}}@layer base{*,:after,:before,::backdrop{box-sizing:border-box;border:0 solid;margin:0;padding:0}::file-selector-button{box-sizing:border-box;border:0 solid;margin:0;padding:0}html,:host{-webkit-text-size-adjust:100%;tab-size:4;line-height:1.5;font-family:var(--default-font-family,ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji");font-feature-settings:var(--default-font-feature-settings,normal);font-variation-settings:var(--default-font-variation-settings,normal);-webkit-tap-highlight-color:transparent}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:var(--default-mono-font-family,ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace);font-feature-settings:var(--default-mono-font-feature-settings,normal);font-variation-settings:var(--default-mono-font-variation-settings,normal);font-size:1em}small{font-size:80%}sub,sup{vertical-align:baseline;font-size:75%;line-height:0;position:relative}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}:-moz-focusring{outline:auto}progress{vertical-align:baseline}summary{display:list-item}ol,ul,menu{list-style:none}img,svg,video,canvas,audio,iframe,embed,object{vertical-align:middle;display:block}img,video{max-width:100%;height:auto}button,input,select,optgroup,textarea{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}::file-selector-button{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}:where(select:is([multiple],[size])) optgroup{font-weight:bolder}:where(select:is([multiple],[size])) optgroup option{padding-inline-start:20px}::file-selector-button{margin-inline-end:4px}::placeholder{opacity:1}@supports (not ((-webkit-appearance:-apple-pay-button))) or (contain-intrinsic-size:1px){::placeholder{color:currentColor}@supports (color:color-mix(in lab, red, red)){::placeholder{color:color-mix(in oklab, currentcolor 50%, transparent)}}}textarea{resize:vertical}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-date-and-time-value{min-height:1lh;text-align:inherit}::-webkit-datetime-edit{display:inline-flex}::-webkit-datetime-edit-fields-wrapper{padding:0}::-webkit-datetime-edit{padding-block:0}::-webkit-datetime-edit-year-field{padding-block:0}::-webkit-datetime-edit-month-field{padding-block:0}::-webkit-datetime-edit-day-field{padding-block:0}::-webkit-datetime-edit-hour-field{padding-block:0}::-webkit-datetime-edit-minute-field{padding-block:0}::-webkit-datetime-edit-second-field{padding-block:0}::-webkit-datetime-edit-millisecond-field{padding-block:0}::-webkit-datetime-edit-meridiem-field{padding-block:0}::-webkit-calendar-picker-indicator{line-height:1}:-moz-ui-invalid{box-shadow:none}button,input:where([type=button],[type=reset],[type=submit]){appearance:button}::file-selector-button{appearance:button}::-webkit-inner-spin-button{height:auto}::-webkit-outer-spin-button{height:auto}[hidden]:where(:not([hidden=until-found])){display:none!important}button:not(:disabled),[role=button]:not(:disabled),[role=tab]:not(:disabled),[role=menuitem]:not(:disabled),[role=option]:not(:disabled),summary,select:not(:disabled),input[type=checkbox]:not(:disabled),input[type=radio]:not(:disabled),input[type=file]:not(:disabled),input[type=submit]:not(:disabled),input[type=reset]:not(:disabled),input[type=button]:not(:disabled){cursor:pointer}label:has(input[type=checkbox]:not(:disabled)){cursor:pointer}label:has(input[type=radio]:not(:disabled)){cursor:pointer}}@layer components;@layer utilities{.pointer-events-auto{pointer-events:auto}.pointer-events-none{pointer-events:none}.collapse{visibility:collapse}.invisible{visibility:hidden}.visible{visibility:visible}.sr-only{clip-path:inset(50%);white-space:nowrap;border-width:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}.absolute{position:absolute}.fixed{position:fixed}.relative{position:relative}.static{position:static}.sticky{position:sticky}.inset-0{inset:calc(var(--spacing) * 0)}.inset-x-0{inset-inline:calc(var(--spacing) * 0)}.inset-y-0{inset-block:calc(var(--spacing) * 0)}.-top-0\.5{top:calc(var(--spacing) * -.5)}.top-0{top:calc(var(--spacing) * 0)}.top-1\/2{top:50%}.top-3{top:calc(var(--spacing) * 3)}.top-11{top:calc(var(--spacing) * 11)}.top-12{top:calc(var(--spacing) * 12)}.top-16{top:calc(var(--spacing) * 16)}.top-18{top:calc(var(--spacing) * 18)}.top-20{top:calc(var(--spacing) * 20)}.top-24{top:calc(var(--spacing) * 24)}.top-full{top:100%}.-right-0\.5{right:calc(var(--spacing) * -.5)}.right-0{right:calc(var(--spacing) * 0)}.right-2{right:calc(var(--spacing) * 2)}.right-3{right:calc(var(--spacing) * 3)}.right-4{right:calc(var(--spacing) * 4)}.right-5{right:calc(var(--spacing) * 5)}.-bottom-0\.5{bottom:calc(var(--spacing) * -.5)}.bottom-0{bottom:calc(var(--spacing) * 0)}.bottom-3{bottom:calc(var(--spacing) * 3)}.bottom-5{bottom:calc(var(--spacing) * 5)}.bottom-24{bottom:calc(var(--spacing) * 24)}.bottom-full{bottom:100%}.left-0{left:calc(var(--spacing) * 0)}.left-1\/2{left:50%}.left-2\.5{left:calc(var(--spacing) * 2.5)}.left-3{left:calc(var(--spacing) * 3)}.isolate{isolation:isolate}.z-1{z-index:1}.z-10{z-index:10}.z-20{z-index:20}.z-30{z-index:30}.z-40{z-index:40}.z-50{z-index:50}.z-100{z-index:100}.z-1010{z-index:1010}.z-1015{z-index:1015}.col-span-12{grid-column:span 12/span 12}.container{width:100%}@media (width>=40rem){.container{max-width:40rem}}@media (width>=48rem){.container{max-width:48rem}}@media (width>=64rem){.container{max-width:64rem}}@media (width>=80rem){.container{max-width:80rem}}@media (width>=96rem){.container{max-width:96rem}}.m-0{margin:calc(var(--spacing) * 0)}.-mx-4{margin-inline:calc(var(--spacing) * -4)}.mx-0\.5{margin-inline:calc(var(--spacing) * .5)}.mx-2{margin-inline:calc(var(--spacing) * 2)}.mx-3{margin-inline:calc(var(--spacing) * 3)}.mx-auto{margin-inline:auto}.my-1{margin-block:calc(var(--spacing) * 1)}.-mt-1{margin-top:calc(var(--spacing) * -1)}.mt-0\.5{margin-top:calc(var(--spacing) * .5)}.mt-1{margin-top:calc(var(--spacing) * 1)}.mt-1\.5{margin-top:calc(var(--spacing) * 1.5)}.mt-2{margin-top:calc(var(--spacing) * 2)}.mt-3{margin-top:calc(var(--spacing) * 3)}.mt-4{margin-top:calc(var(--spacing) * 4)}.mt-5{margin-top:calc(var(--spacing) * 5)}.mt-6{margin-top:calc(var(--spacing) * 6)}.mt-\[0\.4rem\]{margin-top:.4rem}.mt-\[0\.6rem\]{margin-top:.6rem}.-mr-1{margin-right:calc(var(--spacing) * -1)}.-mb-px{margin-bottom:-1px}.mb-0\.5{margin-bottom:calc(var(--spacing) * .5)}.mb-1{margin-bottom:calc(var(--spacing) * 1)}.mb-1\.5{margin-bottom:calc(var(--spacing) * 1.5)}.mb-2{margin-bottom:calc(var(--spacing) * 2)}.mb-3{margin-bottom:calc(var(--spacing) * 3)}.mb-4{margin-bottom:calc(var(--spacing) * 4)}.mb-5{margin-bottom:calc(var(--spacing) * 5)}.mb-6{margin-bottom:calc(var(--spacing) * 6)}.mb-8{margin-bottom:calc(var(--spacing) * 8)}.ml-0{margin-left:calc(var(--spacing) * 0)}.ml-0\.5{margin-left:calc(var(--spacing) * .5)}.ml-1{margin-left:calc(var(--spacing) * 1)}.ml-2{margin-left:calc(var(--spacing) * 2)}.ml-3{margin-left:calc(var(--spacing) * 3)}.ml-4{margin-left:calc(var(--spacing) * 4)}.ml-5{margin-left:calc(var(--spacing) * 5)}.ml-7{margin-left:calc(var(--spacing) * 7)}.ml-auto{margin-left:auto}.line-clamp-3{-webkit-line-clamp:3;-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden}.block{display:block}.contents{display:contents}.flex{display:flex}.grid{display:grid}.hidden{display:none}.inline{display:inline}.inline-block{display:inline-block}.inline-flex{display:inline-flex}.table{display:table}.size-1\.5{width:calc(var(--spacing) * 1.5);height:calc(var(--spacing) * 1.5)}.size-2{width:calc(var(--spacing) * 2);height:calc(var(--spacing) * 2)}.size-2\.5{width:calc(var(--spacing) * 2.5);height:calc(var(--spacing) * 2.5)}.size-3{width:calc(var(--spacing) * 3);height:calc(var(--spacing) * 3)}.size-3\.5{width:calc(var(--spacing) * 3.5);height:calc(var(--spacing) * 3.5)}.size-4{width:calc(var(--spacing) * 4);height:calc(var(--spacing) * 4)}.size-5{width:calc(var(--spacing) * 5);height:calc(var(--spacing) * 5)}.size-6{width:calc(var(--spacing) * 6);height:calc(var(--spacing) * 6)}.size-7{width:calc(var(--spacing) * 7);height:calc(var(--spacing) * 7)}.size-11{width:calc(var(--spacing) * 11);height:calc(var(--spacing) * 11)}.h-0\.5{height:calc(var(--spacing) * .5)}.h-1{height:calc(var(--spacing) * 1)}.h-1\.5{height:calc(var(--spacing) * 1.5)}.h-2{height:calc(var(--spacing) * 2)}.h-2\.5{height:calc(var(--spacing) * 2.5)}.h-3{height:calc(var(--spacing) * 3)}.h-3\.5{height:calc(var(--spacing) * 3.5)}.h-4{height:calc(var(--spacing) * 4)}.h-5{height:calc(var(--spacing) * 5)}.h-5\.5{height:calc(var(--spacing) * 5.5)}.h-6{height:calc(var(--spacing) * 6)}.h-7{height:calc(var(--spacing) * 7)}.h-8{height:calc(var(--spacing) * 8)}.h-9{height:calc(var(--spacing) * 9)}.h-10{height:calc(var(--spacing) * 10)}.h-11{height:calc(var(--spacing) * 11)}.h-12{height:calc(var(--spacing) * 12)}.h-16{height:calc(var(--spacing) * 16)}.h-\[60vh\]{height:60vh}.h-\[76vh\]{height:76vh}.h-full{height:100%}.h-px{height:1px}.h-screen{height:100vh}.max-h-16{max-height:calc(var(--spacing) * 16)}.max-h-64{max-height:calc(var(--spacing) * 64)}.max-h-72{max-height:calc(var(--spacing) * 72)}.max-h-80{max-height:calc(var(--spacing) * 80)}.max-h-\[60vh\]{max-height:60vh}.max-h-\[70vh\]{max-height:70vh}.max-h-\[85vh\]{max-height:85vh}.min-h-0{min-height:calc(var(--spacing) * 0)}.min-h-16{min-height:calc(var(--spacing) * 16)}.min-h-20{min-height:calc(var(--spacing) * 20)}.min-h-32{min-height:calc(var(--spacing) * 32)}.min-h-44{min-height:calc(var(--spacing) * 44)}.min-h-52{min-height:calc(var(--spacing) * 52)}.min-h-\[32rem\]{min-height:32rem}.min-h-\[calc\(100vh-4rem\)\]{min-height:calc(100vh - 4rem)}.min-h-full{min-height:100%}.w-1{width:calc(var(--spacing) * 1)}.w-1\.5{width:calc(var(--spacing) * 1.5)}.w-1\/2{width:50%}.w-2{width:calc(var(--spacing) * 2)}.w-2\.5{width:calc(var(--spacing) * 2.5)}.w-3{width:calc(var(--spacing) * 3)}.w-3\.5{width:calc(var(--spacing) * 3.5)}.w-3\/5{width:60%}.w-4{width:calc(var(--spacing) * 4)}.w-5{width:calc(var(--spacing) * 5)}.w-6{width:calc(var(--spacing) * 6)}.w-7{width:calc(var(--spacing) * 7)}.w-8{width:calc(var(--spacing) * 8)}.w-9{width:calc(var(--spacing) * 9)}.w-10{width:calc(var(--spacing) * 10)}.w-11{width:calc(var(--spacing) * 11)}.w-12{width:calc(var(--spacing) * 12)}.w-14{width:calc(var(--spacing) * 14)}.w-16{width:calc(var(--spacing) * 16)}.w-20{width:calc(var(--spacing) * 20)}.w-24{width:calc(var(--spacing) * 24)}.w-28{width:calc(var(--spacing) * 28)}.w-32{width:calc(var(--spacing) * 32)}.w-36{width:calc(var(--spacing) * 36)}.w-44{width:calc(var(--spacing) * 44)}.w-48{width:calc(var(--spacing) * 48)}.w-52{width:calc(var(--spacing) * 52)}.w-56{width:calc(var(--spacing) * 56)}.w-60{width:calc(var(--spacing) * 60)}.w-64{width:calc(var(--spacing) * 64)}.w-72{width:calc(var(--spacing) * 72)}.w-80{width:calc(var(--spacing) * 80)}.w-\[min\(92vw\,380px\)\]{width:min(92vw,380px)}.w-\[min\(560px\,95vw\)\]{width:min(560px,95vw)}.w-\[min\(960px\,95vw\)\]{width:min(960px,95vw)}.w-auto{width:auto}.w-fit{width:fit-content}.w-full{width:100%}.w-px{width:1px}.max-w-0{max-width:calc(var(--spacing) * 0)}.max-w-2xl{max-width:var(--container-2xl)}.max-w-3xl{max-width:var(--container-3xl)}.max-w-4xl{max-width:var(--container-4xl)}.max-w-5xl{max-width:var(--container-5xl)}.max-w-7xl{max-width:var(--container-7xl)}.max-w-52{max-width:calc(var(--spacing) * 52)}.max-w-56{max-width:calc(var(--spacing) * 56)}.max-w-400{max-width:calc(var(--spacing) * 400)}.max-w-\[calc\(100vw-3rem\)\]{max-width:calc(100vw - 3rem)}.max-w-full{max-width:100%}.max-w-lg{max-width:var(--container-lg)}.max-w-md{max-width:var(--container-md)}.max-w-sm{max-width:var(--container-sm)}.max-w-xl{max-width:var(--container-xl)}.min-w-0{min-width:calc(var(--spacing) * 0)}.min-w-4{min-width:calc(var(--spacing) * 4)}.min-w-26{min-width:calc(var(--spacing) * 26)}.min-w-32{min-width:calc(var(--spacing) * 32)}.min-w-40{min-width:calc(var(--spacing) * 40)}.min-w-44{min-width:calc(var(--spacing) * 44)}.min-w-48{min-width:calc(var(--spacing) * 48)}.min-w-55{min-width:calc(var(--spacing) * 55)}.min-w-64{min-width:calc(var(--spacing) * 64)}.min-w-\[10rem\]{min-width:10rem}.min-w-max{min-width:max-content}.flex-1{flex:1}.flex-2,.flex-\[2\]{flex:2}.shrink-0{flex-shrink:0}.grow{flex-grow:1}.origin-top-left{transform-origin:0 0}.-translate-x-1\/2{--tw-translate-x:calc(calc(1 / 2 * 100%) * -1);translate:var(--tw-translate-x) var(--tw-translate-y)}.-translate-y-1\/2{--tw-translate-y:calc(calc(1 / 2 * 100%) * -1);translate:var(--tw-translate-x) var(--tw-translate-y)}.rotate-180{rotate:180deg}.transform{transform:var(--tw-rotate-x,) var(--tw-rotate-y,) var(--tw-rotate-z,) var(--tw-skew-x,) var(--tw-skew-y,)}.animate-pulse{animation:var(--animate-pulse)}.animate-spin{animation:var(--animate-spin)}.cursor-grab{cursor:grab}.cursor-grabbing{cursor:grabbing}.cursor-pointer{cursor:pointer}.touch-none{touch-action:none}.resize{resize:both}.resize-none{resize:none}.resize-y{resize:vertical}.scroll-mt-20{scroll-margin-top:calc(var(--spacing) * 20)}.scroll-mt-24{scroll-margin-top:calc(var(--spacing) * 24)}.list-decimal{list-style-type:decimal}.list-disc{list-style-type:disc}.list-none{list-style-type:none}.grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.grid-cols-5{grid-template-columns:repeat(5,minmax(0,1fr))}.grid-cols-12{grid-template-columns:repeat(12,minmax(0,1fr))}.grid-cols-\[3\.5rem_1fr\]{grid-template-columns:3.5rem 1fr}.flex-col{flex-direction:column}.flex-wrap{flex-wrap:wrap}.place-items-center{place-items:center}.items-baseline{align-items:baseline}.items-center{align-items:center}.items-end{align-items:flex-end}.items-start{align-items:flex-start}.items-stretch{align-items:stretch}.justify-between{justify-content:space-between}.justify-center{justify-content:center}.justify-end{justify-content:flex-end}.gap-0{gap:calc(var(--spacing) * 0)}.gap-0\.5{gap:calc(var(--spacing) * .5)}.gap-1{gap:calc(var(--spacing) * 1)}.gap-1\.5{gap:calc(var(--spacing) * 1.5)}.gap-2{gap:calc(var(--spacing) * 2)}.gap-2\.5{gap:calc(var(--spacing) * 2.5)}.gap-3{gap:calc(var(--spacing) * 3)}.gap-4{gap:calc(var(--spacing) * 4)}.gap-5{gap:calc(var(--spacing) * 5)}.gap-6{gap:calc(var(--spacing) * 6)}.gap-8{gap:calc(var(--spacing) * 8)}.gap-10{gap:calc(var(--spacing) * 10)}:where(.space-y-0\.5>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * .5) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * .5) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-1>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 1) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 1) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-1\.5>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 1.5) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 1.5) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-2>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 2) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 2) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-3>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 3) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 3) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-4>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 4) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 4) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-5>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 5) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 5) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-6>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 6) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 6) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-12>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 12) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 12) * calc(1 - var(--tw-space-y-reverse)))}.gap-x-1{column-gap:calc(var(--spacing) * 1)}.gap-x-1\.5{column-gap:calc(var(--spacing) * 1.5)}.gap-x-2{column-gap:calc(var(--spacing) * 2)}.gap-x-3{column-gap:calc(var(--spacing) * 3)}.gap-y-0\.5{row-gap:calc(var(--spacing) * .5)}.gap-y-1{row-gap:calc(var(--spacing) * 1)}:where(.divide-y>:not(:last-child)){--tw-divide-y-reverse:0;border-bottom-style:var(--tw-border-style);border-top-style:var(--tw-border-style);border-top-width:calc(1px * var(--tw-divide-y-reverse));border-bottom-width:calc(1px * calc(1 - var(--tw-divide-y-reverse)))}:where(.divide-amber-100>:not(:last-child)){border-color:var(--color-amber-100)}:where(.divide-emerald-100>:not(:last-child)){border-color:var(--color-emerald-100)}:where(.divide-neutral-100>:not(:last-child)){border-color:var(--color-neutral-100)}:where(.divide-neutral-200>:not(:last-child)){border-color:var(--color-neutral-200)}:where(.divide-slate-50>:not(:last-child)){border-color:var(--color-slate-50)}:where(.divide-slate-100>:not(:last-child)){border-color:var(--color-slate-100)}.self-start{align-self:flex-start}.truncate{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.overflow-auto{overflow:auto}.overflow-hidden{overflow:hidden}.overflow-x-auto{overflow-x:auto}.overflow-y-auto{overflow-y:auto}.rounded{border-radius:.25rem}.rounded-2xl{border-radius:var(--radius-2xl)}.rounded-full{border-radius:3.40282e38px}.rounded-lg{border-radius:var(--radius-lg)}.rounded-md{border-radius:var(--radius-md)}.rounded-sm{border-radius:var(--radius-sm)}.rounded-xl{border-radius:var(--radius-xl)}.rounded-t-lg{border-top-left-radius:var(--radius-lg);border-top-right-radius:var(--radius-lg)}.border{border-style:var(--tw-border-style);border-width:1px}.border-0{border-style:var(--tw-border-style);border-width:0}.border-2{border-style:var(--tw-border-style);border-width:2px}.border-t{border-top-style:var(--tw-border-style);border-top-width:1px}.border-r{border-right-style:var(--tw-border-style);border-right-width:1px}.border-b{border-bottom-style:var(--tw-border-style);border-bottom-width:1px}.border-b-2{border-bottom-style:var(--tw-border-style);border-bottom-width:2px}.border-l{border-left-style:var(--tw-border-style);border-left-width:1px}.border-l-2{border-left-style:var(--tw-border-style);border-left-width:2px}.border-l-4{border-left-style:var(--tw-border-style);border-left-width:4px}.border-dashed{--tw-border-style:dashed;border-style:dashed}.border-\[\#1e293b\]{border-color:#1e293b}.border-amber-200{border-color:var(--color-amber-200)}.border-amber-300{border-color:var(--color-amber-300)}.border-amber-400{border-color:var(--color-amber-400)}.border-brand-200{border-color:var(--color-brand-200)}.border-brand-200\/70{border-color:#a5f3fcb3}@supports (color:color-mix(in lab, red, red)){.border-brand-200\/70{border-color:color-mix(in oklab, var(--color-brand-200) 70%, transparent)}}.border-brand-300{border-color:var(--color-brand-300)}.border-brand-400{border-color:var(--color-brand-400)}.border-brand-500{border-color:var(--color-brand-500)}.border-brand-500\/50{border-color:#06b6d480}@supports (color:color-mix(in lab, red, red)){.border-brand-500\/50{border-color:color-mix(in oklab, var(--color-brand-500) 50%, transparent)}}.border-brand-600{border-color:var(--color-brand-600)}.border-brand-700{border-color:var(--color-brand-700)}.border-cyan-100{border-color:var(--color-cyan-100)}.border-cyan-200{border-color:var(--color-cyan-200)}.border-emerald-100{border-color:var(--color-emerald-100)}.border-emerald-200{border-color:var(--color-emerald-200)}.border-emerald-400{border-color:var(--color-emerald-400)}.border-hairline{border-color:var(--color-hairline)}.border-indigo-200{border-color:var(--color-indigo-200)}.border-lime-200{border-color:var(--color-lime-200)}.border-neutral-100{border-color:var(--color-neutral-100)}.border-neutral-200{border-color:var(--color-neutral-200)}.border-neutral-300{border-color:var(--color-neutral-300)}.border-red-200{border-color:var(--color-red-200)}.border-red-300{border-color:var(--color-red-300)}.border-rose-200{border-color:var(--color-rose-200)}.border-rose-500\/30{border-color:#ff23574d}@supports (color:color-mix(in lab, red, red)){.border-rose-500\/30{border-color:color-mix(in oklab, var(--color-rose-500) 30%, transparent)}}.border-sky-200{border-color:var(--color-sky-200)}.border-sky-300{border-color:var(--color-sky-300)}.border-slate-100{border-color:var(--color-slate-100)}.border-slate-200{border-color:var(--color-slate-200)}.border-slate-300{border-color:var(--color-slate-300)}.border-slate-600{border-color:var(--color-slate-600)}.border-slate-700{border-color:var(--color-slate-700)}.border-slate-700\/60{border-color:#31415899}@supports (color:color-mix(in lab, red, red)){.border-slate-700\/60{border-color:color-mix(in oklab, var(--color-slate-700) 60%, transparent)}}.border-slate-700\/70{border-color:#314158b3}@supports (color:color-mix(in lab, red, red)){.border-slate-700\/70{border-color:color-mix(in oklab, var(--color-slate-700) 70%, transparent)}}.border-slate-800{border-color:var(--color-slate-800)}.border-slate-900{border-color:var(--color-slate-900)}.border-transparent{border-color:#0000}.border-violet-200{border-color:var(--color-violet-200)}.border-violet-300{border-color:var(--color-violet-300)}.border-white{border-color:var(--color-white)}.border-white\/20{border-color:#fff3}@supports (color:color-mix(in lab, red, red)){.border-white\/20{border-color:color-mix(in oklab, var(--color-white) 20%, transparent)}}.border-white\/40{border-color:#fff6}@supports (color:color-mix(in lab, red, red)){.border-white\/40{border-color:color-mix(in oklab, var(--color-white) 40%, transparent)}}.border-white\/70{border-color:#ffffffb3}@supports (color:color-mix(in lab, red, red)){.border-white\/70{border-color:color-mix(in oklab, var(--color-white) 70%, transparent)}}.border-t-slate-600{border-top-color:var(--color-slate-600)}.bg-\[\#152ffd0a\]{background-color:#152ffd0a}.bg-\[\#020617\]{background-color:#020617}.bg-amber-50{background-color:var(--color-amber-50)}.bg-amber-50\/40{background-color:#fffbeb66}@supports (color:color-mix(in lab, red, red)){.bg-amber-50\/40{background-color:color-mix(in oklab, var(--color-amber-50) 40%, transparent)}}.bg-amber-50\/50{background-color:#fffbeb80}@supports (color:color-mix(in lab, red, red)){.bg-amber-50\/50{background-color:color-mix(in oklab, var(--color-amber-50) 50%, transparent)}}.bg-amber-100{background-color:var(--color-amber-100)}.bg-amber-400{background-color:var(--color-amber-400)}.bg-amber-500{background-color:var(--color-amber-500)}.bg-amber-600{background-color:var(--color-amber-600)}.bg-brand-50{background-color:var(--color-brand-50)}.bg-brand-50\/40{background-color:#ecfeff66}@supports (color:color-mix(in lab, red, red)){.bg-brand-50\/40{background-color:color-mix(in oklab, var(--color-brand-50) 40%, transparent)}}.bg-brand-50\/60{background-color:#ecfeff99}@supports (color:color-mix(in lab, red, red)){.bg-brand-50\/60{background-color:color-mix(in oklab, var(--color-brand-50) 60%, transparent)}}.bg-brand-50\/70{background-color:#ecfeffb3}@supports (color:color-mix(in lab, red, red)){.bg-brand-50\/70{background-color:color-mix(in oklab, var(--color-brand-50) 70%, transparent)}}.bg-brand-50\/80{background-color:#ecfeffcc}@supports (color:color-mix(in lab, red, red)){.bg-brand-50\/80{background-color:color-mix(in oklab, var(--color-brand-50) 80%, transparent)}}.bg-brand-100{background-color:var(--color-brand-100)}.bg-brand-100\/70{background-color:#cffafeb3}@supports (color:color-mix(in lab, red, red)){.bg-brand-100\/70{background-color:color-mix(in oklab, var(--color-brand-100) 70%, transparent)}}.bg-brand-500{background-color:var(--color-brand-500)}.bg-brand-500\/10{background-color:#06b6d41a}@supports (color:color-mix(in lab, red, red)){.bg-brand-500\/10{background-color:color-mix(in oklab, var(--color-brand-500) 10%, transparent)}}.bg-brand-600{background-color:var(--color-brand-600)}.bg-brand-700{background-color:var(--color-brand-700)}.bg-brand-800{background-color:var(--color-brand-800)}.bg-canvas\/95{background-color:#f8fafcf2}@supports (color:color-mix(in lab, red, red)){.bg-canvas\/95{background-color:color-mix(in oklab, var(--color-canvas) 95%, transparent)}}.bg-cyan-50{background-color:var(--color-cyan-50)}.bg-cyan-50\/40{background-color:#ecfeff66}@supports (color:color-mix(in lab, red, red)){.bg-cyan-50\/40{background-color:color-mix(in oklab, var(--color-cyan-50) 40%, transparent)}}.bg-cyan-50\/60{background-color:#ecfeff99}@supports (color:color-mix(in lab, red, red)){.bg-cyan-50\/60{background-color:color-mix(in oklab, var(--color-cyan-50) 60%, transparent)}}.bg-cyan-100{background-color:var(--color-cyan-100)}.bg-cyan-400{background-color:var(--color-cyan-400)}.bg-emerald-50{background-color:var(--color-emerald-50)}.bg-emerald-50\/30{background-color:#ecfdf54d}@supports (color:color-mix(in lab, red, red)){.bg-emerald-50\/30{background-color:color-mix(in oklab, var(--color-emerald-50) 30%, transparent)}}.bg-emerald-50\/40{background-color:#ecfdf566}@supports (color:color-mix(in lab, red, red)){.bg-emerald-50\/40{background-color:color-mix(in oklab, var(--color-emerald-50) 40%, transparent)}}.bg-emerald-50\/50{background-color:#ecfdf580}@supports (color:color-mix(in lab, red, red)){.bg-emerald-50\/50{background-color:color-mix(in oklab, var(--color-emerald-50) 50%, transparent)}}.bg-emerald-50\/70{background-color:#ecfdf5b3}@supports (color:color-mix(in lab, red, red)){.bg-emerald-50\/70{background-color:color-mix(in oklab, var(--color-emerald-50) 70%, transparent)}}.bg-emerald-100{background-color:var(--color-emerald-100)}.bg-emerald-400{background-color:var(--color-emerald-400)}.bg-emerald-500{background-color:var(--color-emerald-500)}.bg-emerald-600{background-color:var(--color-emerald-600)}.bg-indigo-50\/50{background-color:#eef2ff80}@supports (color:color-mix(in lab, red, red)){.bg-indigo-50\/50{background-color:color-mix(in oklab, var(--color-indigo-50) 50%, transparent)}}.bg-indigo-100{background-color:var(--color-indigo-100)}.bg-indigo-400{background-color:var(--color-indigo-400)}.bg-lime-50\/50{background-color:#f7fee780}@supports (color:color-mix(in lab, red, red)){.bg-lime-50\/50{background-color:color-mix(in oklab, var(--color-lime-50) 50%, transparent)}}.bg-neutral-50{background-color:var(--color-neutral-50)}.bg-neutral-50\/40{background-color:#fafafa66}@supports (color:color-mix(in lab, red, red)){.bg-neutral-50\/40{background-color:color-mix(in oklab, var(--color-neutral-50) 40%, transparent)}}.bg-neutral-50\/50{background-color:#fafafa80}@supports (color:color-mix(in lab, red, red)){.bg-neutral-50\/50{background-color:color-mix(in oklab, var(--color-neutral-50) 50%, transparent)}}.bg-neutral-100{background-color:var(--color-neutral-100)}.bg-neutral-200{background-color:var(--color-neutral-200)}.bg-neutral-400{background-color:var(--color-neutral-400)}.bg-neutral-900{background-color:var(--color-neutral-900)}.bg-orange-100{background-color:var(--color-orange-100)}.bg-purple-100{background-color:var(--color-purple-100)}.bg-red-50{background-color:var(--color-red-50)}.bg-red-100{background-color:var(--color-red-100)}.bg-red-500{background-color:var(--color-red-500)}.bg-rose-50{background-color:var(--color-rose-50)}.bg-rose-100{background-color:var(--color-rose-100)}.bg-rose-400{background-color:var(--color-rose-400)}.bg-rose-500\/10{background-color:#ff23571a}@supports (color:color-mix(in lab, red, red)){.bg-rose-500\/10{background-color:color-mix(in oklab, var(--color-rose-500) 10%, transparent)}}.bg-rose-500\/15{background-color:#ff235726}@supports (color:color-mix(in lab, red, red)){.bg-rose-500\/15{background-color:color-mix(in oklab, var(--color-rose-500) 15%, transparent)}}.bg-rose-600{background-color:var(--color-rose-600)}.bg-sky-50{background-color:var(--color-sky-50)}.bg-sky-50\/50{background-color:#f0f9ff80}@supports (color:color-mix(in lab, red, red)){.bg-sky-50\/50{background-color:color-mix(in oklab, var(--color-sky-50) 50%, transparent)}}.bg-sky-100{background-color:var(--color-sky-100)}.bg-sky-400{background-color:var(--color-sky-400)}.bg-slate-50{background-color:var(--color-slate-50)}.bg-slate-50\/30{background-color:#f8fafc4d}@supports (color:color-mix(in lab, red, red)){.bg-slate-50\/30{background-color:color-mix(in oklab, var(--color-slate-50) 30%, transparent)}}.bg-slate-50\/40{background-color:#f8fafc66}@supports (color:color-mix(in lab, red, red)){.bg-slate-50\/40{background-color:color-mix(in oklab, var(--color-slate-50) 40%, transparent)}}.bg-slate-50\/50{background-color:#f8fafc80}@supports (color:color-mix(in lab, red, red)){.bg-slate-50\/50{background-color:color-mix(in oklab, var(--color-slate-50) 50%, transparent)}}.bg-slate-50\/60{background-color:#f8fafc99}@supports (color:color-mix(in lab, red, red)){.bg-slate-50\/60{background-color:color-mix(in oklab, var(--color-slate-50) 60%, transparent)}}.bg-slate-50\/70{background-color:#f8fafcb3}@supports (color:color-mix(in lab, red, red)){.bg-slate-50\/70{background-color:color-mix(in oklab, var(--color-slate-50) 70%, transparent)}}.bg-slate-100{background-color:var(--color-slate-100)}.bg-slate-200{background-color:var(--color-slate-200)}.bg-slate-200\/80{background-color:#e2e8f0cc}@supports (color:color-mix(in lab, red, red)){.bg-slate-200\/80{background-color:color-mix(in oklab, var(--color-slate-200) 80%, transparent)}}.bg-slate-300{background-color:var(--color-slate-300)}.bg-slate-300\/70{background-color:#cad5e2b3}@supports (color:color-mix(in lab, red, red)){.bg-slate-300\/70{background-color:color-mix(in oklab, var(--color-slate-300) 70%, transparent)}}.bg-slate-400{background-color:var(--color-slate-400)}.bg-slate-500{background-color:var(--color-slate-500)}.bg-slate-700{background-color:var(--color-slate-700)}.bg-slate-800{background-color:var(--color-slate-800)}.bg-slate-800\/40{background-color:#1d293d66}@supports (color:color-mix(in lab, red, red)){.bg-slate-800\/40{background-color:color-mix(in oklab, var(--color-slate-800) 40%, transparent)}}.bg-slate-800\/60{background-color:#1d293d99}@supports (color:color-mix(in lab, red, red)){.bg-slate-800\/60{background-color:color-mix(in oklab, var(--color-slate-800) 60%, transparent)}}.bg-slate-900{background-color:var(--color-slate-900)}.bg-slate-900\/40{background-color:#0f172b66}@supports (color:color-mix(in lab, red, red)){.bg-slate-900\/40{background-color:color-mix(in oklab, var(--color-slate-900) 40%, transparent)}}.bg-slate-900\/60{background-color:#0f172b99}@supports (color:color-mix(in lab, red, red)){.bg-slate-900\/60{background-color:color-mix(in oklab, var(--color-slate-900) 60%, transparent)}}.bg-slate-900\/70{background-color:#0f172bb3}@supports (color:color-mix(in lab, red, red)){.bg-slate-900\/70{background-color:color-mix(in oklab, var(--color-slate-900) 70%, transparent)}}.bg-slate-900\/95{background-color:#0f172bf2}@supports (color:color-mix(in lab, red, red)){.bg-slate-900\/95{background-color:color-mix(in oklab, var(--color-slate-900) 95%, transparent)}}.bg-slate-950{background-color:var(--color-slate-950)}.bg-slate-950\/30{background-color:#0206184d}@supports (color:color-mix(in lab, red, red)){.bg-slate-950\/30{background-color:color-mix(in oklab, var(--color-slate-950) 30%, transparent)}}.bg-slate-950\/40{background-color:#02061866}@supports (color:color-mix(in lab, red, red)){.bg-slate-950\/40{background-color:color-mix(in oklab, var(--color-slate-950) 40%, transparent)}}.bg-slate-950\/55{background-color:#0206188c}@supports (color:color-mix(in lab, red, red)){.bg-slate-950\/55{background-color:color-mix(in oklab, var(--color-slate-950) 55%, transparent)}}.bg-slate-950\/90{background-color:#020618e6}@supports (color:color-mix(in lab, red, red)){.bg-slate-950\/90{background-color:color-mix(in oklab, var(--color-slate-950) 90%, transparent)}}.bg-teal-100{background-color:var(--color-teal-100)}.bg-teal-200{background-color:var(--color-teal-200)}.bg-transparent{background-color:#0000}.bg-violet-50{background-color:var(--color-violet-50)}.bg-violet-50\/40{background-color:#f5f3ff66}@supports (color:color-mix(in lab, red, red)){.bg-violet-50\/40{background-color:color-mix(in oklab, var(--color-violet-50) 40%, transparent)}}.bg-violet-50\/50{background-color:#f5f3ff80}@supports (color:color-mix(in lab, red, red)){.bg-violet-50\/50{background-color:color-mix(in oklab, var(--color-violet-50) 50%, transparent)}}.bg-violet-100{background-color:var(--color-violet-100)}.bg-violet-100\/70{background-color:#ede9feb3}@supports (color:color-mix(in lab, red, red)){.bg-violet-100\/70{background-color:color-mix(in oklab, var(--color-violet-100) 70%, transparent)}}.bg-violet-400{background-color:var(--color-violet-400)}.bg-violet-500\/15{background-color:#8d54ff26}@supports (color:color-mix(in lab, red, red)){.bg-violet-500\/15{background-color:color-mix(in oklab, var(--color-violet-500) 15%, transparent)}}.bg-white{background-color:var(--color-white)}.bg-white\/10{background-color:#ffffff1a}@supports (color:color-mix(in lab, red, red)){.bg-white\/10{background-color:color-mix(in oklab, var(--color-white) 10%, transparent)}}.bg-white\/15{background-color:#ffffff26}@supports (color:color-mix(in lab, red, red)){.bg-white\/15{background-color:color-mix(in oklab, var(--color-white) 15%, transparent)}}.bg-white\/25{background-color:#ffffff40}@supports (color:color-mix(in lab, red, red)){.bg-white\/25{background-color:color-mix(in oklab, var(--color-white) 25%, transparent)}}.bg-white\/30{background-color:#ffffff4d}@supports (color:color-mix(in lab, red, red)){.bg-white\/30{background-color:color-mix(in oklab, var(--color-white) 30%, transparent)}}.bg-white\/70{background-color:#ffffffb3}@supports (color:color-mix(in lab, red, red)){.bg-white\/70{background-color:color-mix(in oklab, var(--color-white) 70%, transparent)}}.bg-white\/80{background-color:#fffc}@supports (color:color-mix(in lab, red, red)){.bg-white\/80{background-color:color-mix(in oklab, var(--color-white) 80%, transparent)}}.bg-white\/85{background-color:#ffffffd9}@supports (color:color-mix(in lab, red, red)){.bg-white\/85{background-color:color-mix(in oklab, var(--color-white) 85%, transparent)}}.bg-white\/90{background-color:#ffffffe6}@supports (color:color-mix(in lab, red, red)){.bg-white\/90{background-color:color-mix(in oklab, var(--color-white) 90%, transparent)}}.bg-white\/95{background-color:#fffffff2}@supports (color:color-mix(in lab, red, red)){.bg-white\/95{background-color:color-mix(in oklab, var(--color-white) 95%, transparent)}}.bg-linear-to-b{--tw-gradient-position:to bottom}@supports (background-image:linear-gradient(in lab, red, red)){.bg-linear-to-b{--tw-gradient-position:to bottom in oklab}}.bg-linear-to-b{background-image:linear-gradient(var(--tw-gradient-stops))}.bg-linear-to-br{--tw-gradient-position:to bottom right}@supports (background-image:linear-gradient(in lab, red, red)){.bg-linear-to-br{--tw-gradient-position:to bottom right in oklab}}.bg-linear-to-br{background-image:linear-gradient(var(--tw-gradient-stops))}.bg-linear-to-r{--tw-gradient-position:to right}@supports (background-image:linear-gradient(in lab, red, red)){.bg-linear-to-r{--tw-gradient-position:to right in oklab}}.bg-linear-to-r{background-image:linear-gradient(var(--tw-gradient-stops))}.bg-\[linear-gradient\(90deg\,\#6d28d9_0\%\,\#a21caf_55\%\,\#db2777_100\%\)\]{background-image:linear-gradient(90deg,#6d28d9 0%,#a21caf 55%,#db2777 100%)}.bg-\[linear-gradient\(180deg\,\#e6ddfa_0\%\,\#eeeafb_220px\,\#eeeafb_100\%\)\]{background-image:linear-gradient(#e6ddfa 0%,#eeeafb 220px 100%)}.bg-\[linear-gradient\(180deg\,\#f0fdfa_0\%\,\#f8fafc_220px\,\#f8fafc_100\%\)\]{background-image:linear-gradient(#f0fdfa 0%,#f8fafc 220px 100%)}.bg-\[radial-gradient\(120\%_120\%_at_50\%_-10\%\,\#101a33_0\%\,\#020617_55\%\)\]{background-image:radial-gradient(120% 120% at 50% -10%,#101a33 0%,#020617 55%)}.from-amber-400{--tw-gradient-from:var(--color-amber-400);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position))}.from-brand-500{--tw-gradient-from:var(--color-brand-500);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position))}.from-brand-600{--tw-gradient-from:var(--color-brand-600);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position))}.from-emerald-400{--tw-gradient-from:var(--color-emerald-400);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position))}.from-red-400{--tw-gradient-from:var(--color-red-400);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position))}.from-slate-800\/45{--tw-gradient-from:#1d293d73}@supports (color:color-mix(in lab, red, red)){.from-slate-800\/45{--tw-gradient-from:color-mix(in oklab, var(--color-slate-800) 45%, transparent)}}.from-slate-800\/45{--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position))}.from-slate-800\/50{--tw-gradient-from:#1d293d80}@supports (color:color-mix(in lab, red, red)){.from-slate-800\/50{--tw-gradient-from:color-mix(in oklab, var(--color-slate-800) 50%, transparent)}}.from-slate-800\/50{--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position))}.from-slate-800\/70{--tw-gradient-from:#1d293db3}@supports (color:color-mix(in lab, red, red)){.from-slate-800\/70{--tw-gradient-from:color-mix(in oklab, var(--color-slate-800) 70%, transparent)}}.from-slate-800\/70{--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position))}.via-brand-coral{--tw-gradient-via:var(--color-brand-coral);--tw-gradient-via-stops:var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-via) var(--tw-gradient-via-position), var(--tw-gradient-to) var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-via-stops)}.via-brand-mint{--tw-gradient-via:var(--color-brand-mint);--tw-gradient-via-stops:var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-via) var(--tw-gradient-via-position), var(--tw-gradient-to) var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-via-stops)}.via-brand-ochre{--tw-gradient-via:var(--color-brand-ochre);--tw-gradient-via-stops:var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-via) var(--tw-gradient-via-position), var(--tw-gradient-to) var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-via-stops)}.to-brand-500{--tw-gradient-to:var(--color-brand-500);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position))}.to-brand-800{--tw-gradient-to:var(--color-brand-800);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position))}.to-brand-peach{--tw-gradient-to:var(--color-brand-peach);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position))}.to-brand-pink{--tw-gradient-to:var(--color-brand-pink);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position))}.to-slate-800\/30{--tw-gradient-to:#1d293d4d}@supports (color:color-mix(in lab, red, red)){.to-slate-800\/30{--tw-gradient-to:color-mix(in oklab, var(--color-slate-800) 30%, transparent)}}.to-slate-800\/30{--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position))}.to-slate-900{--tw-gradient-to:var(--color-slate-900);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position))}.to-violet-400{--tw-gradient-to:var(--color-violet-400);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position))}.p-0{padding:calc(var(--spacing) * 0)}.p-0\.5{padding:calc(var(--spacing) * .5)}.p-1{padding:calc(var(--spacing) * 1)}.p-1\.5{padding:calc(var(--spacing) * 1.5)}.p-2{padding:calc(var(--spacing) * 2)}.p-2\.5{padding:calc(var(--spacing) * 2.5)}.p-3{padding:calc(var(--spacing) * 3)}.p-4{padding:calc(var(--spacing) * 4)}.p-5{padding:calc(var(--spacing) * 5)}.p-6{padding:calc(var(--spacing) * 6)}.p-8{padding:calc(var(--spacing) * 8)}.px-0{padding-inline:calc(var(--spacing) * 0)}.px-0\.5{padding-inline:calc(var(--spacing) * .5)}.px-1{padding-inline:calc(var(--spacing) * 1)}.px-1\.5{padding-inline:calc(var(--spacing) * 1.5)}.px-2{padding-inline:calc(var(--spacing) * 2)}.px-2\.5{padding-inline:calc(var(--spacing) * 2.5)}.px-3{padding-inline:calc(var(--spacing) * 3)}.px-4{padding-inline:calc(var(--spacing) * 4)}.px-5{padding-inline:calc(var(--spacing) * 5)}.px-6{padding-inline:calc(var(--spacing) * 6)}.px-7{padding-inline:calc(var(--spacing) * 7)}.px-10{padding-inline:calc(var(--spacing) * 10)}.py-0{padding-block:calc(var(--spacing) * 0)}.py-0\.5{padding-block:calc(var(--spacing) * .5)}.py-1{padding-block:calc(var(--spacing) * 1)}.py-1\.5{padding-block:calc(var(--spacing) * 1.5)}.py-2{padding-block:calc(var(--spacing) * 2)}.py-2\.5{padding-block:calc(var(--spacing) * 2.5)}.py-3{padding-block:calc(var(--spacing) * 3)}.py-4{padding-block:calc(var(--spacing) * 4)}.py-6{padding-block:calc(var(--spacing) * 6)}.py-8{padding-block:calc(var(--spacing) * 8)}.py-10{padding-block:calc(var(--spacing) * 10)}.py-12{padding-block:calc(var(--spacing) * 12)}.py-16{padding-block:calc(var(--spacing) * 16)}.py-24{padding-block:calc(var(--spacing) * 24)}.pt-0\.5{padding-top:calc(var(--spacing) * .5)}.pt-1{padding-top:calc(var(--spacing) * 1)}.pt-2{padding-top:calc(var(--spacing) * 2)}.pt-3{padding-top:calc(var(--spacing) * 3)}.pt-4{padding-top:calc(var(--spacing) * 4)}.pt-5{padding-top:calc(var(--spacing) * 5)}.pt-7{padding-top:calc(var(--spacing) * 7)}.pr-1\.5{padding-right:calc(var(--spacing) * 1.5)}.pr-2{padding-right:calc(var(--spacing) * 2)}.pr-3{padding-right:calc(var(--spacing) * 3)}.pr-9{padding-right:calc(var(--spacing) * 9)}.pr-16{padding-right:calc(var(--spacing) * 16)}.pb-1{padding-bottom:calc(var(--spacing) * 1)}.pb-1\.5{padding-bottom:calc(var(--spacing) * 1.5)}.pb-2{padding-bottom:calc(var(--spacing) * 2)}.pb-3{padding-bottom:calc(var(--spacing) * 3)}.pb-4{padding-bottom:calc(var(--spacing) * 4)}.pb-5{padding-bottom:calc(var(--spacing) * 5)}.pb-6{padding-bottom:calc(var(--spacing) * 6)}.pb-8{padding-bottom:calc(var(--spacing) * 8)}.pl-1{padding-left:calc(var(--spacing) * 1)}.pl-1\.5{padding-left:calc(var(--spacing) * 1.5)}.pl-2{padding-left:calc(var(--spacing) * 2)}.pl-3{padding-left:calc(var(--spacing) * 3)}.pl-4{padding-left:calc(var(--spacing) * 4)}.pl-5{padding-left:calc(var(--spacing) * 5)}.pl-8{padding-left:calc(var(--spacing) * 8)}.pl-9{padding-left:calc(var(--spacing) * 9)}.pl-\[2\.6rem\]{padding-left:2.6rem}.text-center{text-align:center}.text-left{text-align:left}.text-right{text-align:right}.align-middle{vertical-align:middle}.font-brand{font-family:var(--font-brand)}.font-mono{font-family:var(--font-mono)}.font-sans{font-family:var(--font-sans)}.text-2xl{font-size:var(--text-2xl);line-height:var(--tw-leading,var(--text-2xl--line-height))}.text-3xl{font-size:var(--text-3xl);line-height:var(--tw-leading,var(--text-3xl--line-height))}.text-4xl{font-size:var(--text-4xl);line-height:var(--tw-leading,var(--text-4xl--line-height))}.text-base{font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height))}.text-lg{font-size:var(--text-lg);line-height:var(--tw-leading,var(--text-lg--line-height))}.text-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.text-xl{font-size:var(--text-xl);line-height:var(--tw-leading,var(--text-xl--line-height))}.text-xs{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}.text-\[0\.8em\]{font-size:.8em}.text-\[9px\]{font-size:9px}.text-\[10px\]{font-size:10px}.text-\[11px\]{font-size:11px}.text-\[12px\]{font-size:12px}.leading-5{--tw-leading:calc(var(--spacing) * 5);line-height:calc(var(--spacing) * 5)}.leading-6{--tw-leading:calc(var(--spacing) * 6);line-height:calc(var(--spacing) * 6)}.leading-7{--tw-leading:calc(var(--spacing) * 7);line-height:calc(var(--spacing) * 7)}.leading-none{--tw-leading:1;line-height:1}.leading-relaxed{--tw-leading:var(--leading-relaxed);line-height:var(--leading-relaxed)}.leading-snug{--tw-leading:var(--leading-snug);line-height:var(--leading-snug)}.leading-tight{--tw-leading:var(--leading-tight);line-height:var(--leading-tight)}.font-bold{--tw-font-weight:var(--font-weight-bold);font-weight:var(--font-weight-bold)}.font-medium{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.font-normal{--tw-font-weight:var(--font-weight-normal);font-weight:var(--font-weight-normal)}.font-semibold{--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold)}.tracking-\[0\.2em\]{--tw-tracking:.2em;letter-spacing:.2em}.tracking-tight{--tw-tracking:var(--tracking-tight);letter-spacing:var(--tracking-tight)}.tracking-wide{--tw-tracking:var(--tracking-wide);letter-spacing:var(--tracking-wide)}.tracking-wider{--tw-tracking:var(--tracking-wider);letter-spacing:var(--tracking-wider)}.whitespace-nowrap{white-space:nowrap}.whitespace-pre{white-space:pre}.whitespace-pre-line{white-space:pre-line}.whitespace-pre-wrap{white-space:pre-wrap}.text-\[\#eaeef4\]{color:#eaeef4}.text-amber-600{color:var(--color-amber-600)}.text-amber-700{color:var(--color-amber-700)}.text-amber-800{color:var(--color-amber-800)}.text-amber-900{color:var(--color-amber-900)}.text-blue-500{color:var(--color-blue-500)}.text-blue-600{color:var(--color-blue-600)}.text-brand-200{color:var(--color-brand-200)}.text-brand-300{color:var(--color-brand-300)}.text-brand-300\/70{color:#67e8f9b3}@supports (color:color-mix(in lab, red, red)){.text-brand-300\/70{color:color-mix(in oklab, var(--color-brand-300) 70%, transparent)}}.text-brand-400{color:var(--color-brand-400)}.text-brand-600{color:var(--color-brand-600)}.text-brand-700{color:var(--color-brand-700)}.text-brand-800{color:var(--color-brand-800)}.text-brand-900{color:var(--color-brand-900)}.text-cyan-200{color:var(--color-cyan-200)}.text-cyan-600{color:var(--color-cyan-600)}.text-cyan-700{color:var(--color-cyan-700)}.text-cyan-800{color:var(--color-cyan-800)}.text-emerald-500{color:var(--color-emerald-500)}.text-emerald-600{color:var(--color-emerald-600)}.text-emerald-700{color:var(--color-emerald-700)}.text-emerald-800{color:var(--color-emerald-800)}.text-emerald-900{color:var(--color-emerald-900)}.text-fuchsia-600{color:var(--color-fuchsia-600)}.text-green-600{color:var(--color-green-600)}.text-indigo-600{color:var(--color-indigo-600)}.text-indigo-800{color:var(--color-indigo-800)}.text-indigo-900{color:var(--color-indigo-900)}.text-ink{color:var(--color-ink)}.text-lime-600{color:var(--color-lime-600)}.text-lime-900{color:var(--color-lime-900)}.text-neutral-100{color:var(--color-neutral-100)}.text-neutral-400{color:var(--color-neutral-400)}.text-neutral-500{color:var(--color-neutral-500)}.text-neutral-600{color:var(--color-neutral-600)}.text-neutral-700{color:var(--color-neutral-700)}.text-neutral-800{color:var(--color-neutral-800)}.text-neutral-900{color:var(--color-neutral-900)}.text-orange-600{color:var(--color-orange-600)}.text-orange-800{color:var(--color-orange-800)}.text-pink-600{color:var(--color-pink-600)}.text-purple-600{color:var(--color-purple-600)}.text-purple-700{color:var(--color-purple-700)}.text-purple-800{color:var(--color-purple-800)}.text-red-500{color:var(--color-red-500)}.text-red-600{color:var(--color-red-600)}.text-red-700{color:var(--color-red-700)}.text-red-800{color:var(--color-red-800)}.text-red-900{color:var(--color-red-900)}.text-rose-300{color:var(--color-rose-300)}.text-rose-500{color:var(--color-rose-500)}.text-rose-600{color:var(--color-rose-600)}.text-rose-600\/80{color:#e70044cc}@supports (color:color-mix(in lab, red, red)){.text-rose-600\/80{color:color-mix(in oklab, var(--color-rose-600) 80%, transparent)}}.text-rose-700{color:var(--color-rose-700)}.text-rose-800{color:var(--color-rose-800)}.text-sky-600{color:var(--color-sky-600)}.text-sky-700{color:var(--color-sky-700)}.text-sky-800{color:var(--color-sky-800)}.text-sky-900{color:var(--color-sky-900)}.text-slate-100{color:var(--color-slate-100)}.text-slate-200{color:var(--color-slate-200)}.text-slate-300{color:var(--color-slate-300)}.text-slate-400{color:var(--color-slate-400)}.text-slate-500{color:var(--color-slate-500)}.text-slate-600{color:var(--color-slate-600)}.text-slate-700{color:var(--color-slate-700)}.text-slate-800{color:var(--color-slate-800)}.text-slate-900{color:var(--color-slate-900)}.text-slate-950{color:var(--color-slate-950)}.text-teal-600{color:var(--color-teal-600)}.text-teal-800{color:var(--color-teal-800)}.text-teal-900{color:var(--color-teal-900)}.text-violet-300{color:var(--color-violet-300)}.text-violet-600{color:var(--color-violet-600)}.text-violet-700{color:var(--color-violet-700)}.text-violet-700\/90{color:#7008e7e6}@supports (color:color-mix(in lab, red, red)){.text-violet-700\/90{color:color-mix(in oklab, var(--color-violet-700) 90%, transparent)}}.text-violet-800{color:var(--color-violet-800)}.text-violet-900{color:var(--color-violet-900)}.text-white{color:var(--color-white)}.text-white\/80{color:#fffc}@supports (color:color-mix(in lab, red, red)){.text-white\/80{color:color-mix(in oklab, var(--color-white) 80%, transparent)}}.capitalize{text-transform:capitalize}.lowercase{text-transform:lowercase}.uppercase{text-transform:uppercase}.italic{font-style:italic}.tabular-nums{--tw-numeric-spacing:tabular-nums;font-variant-numeric:var(--tw-ordinal,) var(--tw-slashed-zero,) var(--tw-numeric-figure,) var(--tw-numeric-spacing,) var(--tw-numeric-fraction,)}.underline{text-decoration-line:underline}.underline-offset-2{text-underline-offset:2px}.antialiased{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.accent-amber-600{accent-color:var(--color-amber-600)}.accent-brand-500{accent-color:var(--color-brand-500)}.accent-brand-700{accent-color:var(--color-brand-700)}.accent-emerald-600{accent-color:var(--color-emerald-600)}.accent-rose-600{accent-color:var(--color-rose-600)}.accent-slate-700{accent-color:var(--color-slate-700)}.opacity-0{opacity:0}.opacity-25{opacity:.25}.opacity-40{opacity:.4}.opacity-55{opacity:.55}.opacity-60{opacity:.6}.opacity-70{opacity:.7}.opacity-80{opacity:.8}.opacity-90{opacity:.9}.opacity-100{opacity:1}.shadow{--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a), 0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.shadow-2xl{--tw-shadow:0 25px 50px -12px var(--tw-shadow-color,#00000040);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.shadow-\[0_4px_8px_-2px_rgba\(15\,23\,42\,0\.08\)\]{--tw-shadow:0 4px 8px -2px var(--tw-shadow-color,#0f172a14);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.shadow-lg{--tw-shadow:0 10px 15px -3px var(--tw-shadow-color,#0000001a), 0 4px 6px -4px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.shadow-md{--tw-shadow:0 4px 6px -1px var(--tw-shadow-color,#0000001a), 0 2px 4px -2px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.shadow-sm{--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a), 0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.shadow-xl{--tw-shadow:0 20px 25px -5px var(--tw-shadow-color,#0000001a), 0 8px 10px -6px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.ring,.ring-1{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.ring-2{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.ring-4{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(4px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.shadow-black\/20{--tw-shadow-color:#0003}@supports (color:color-mix(in lab, red, red)){.shadow-black\/20{--tw-shadow-color:color-mix(in oklab, color-mix(in oklab, var(--color-black) 20%, transparent) var(--tw-shadow-alpha), transparent)}}.shadow-black\/30{--tw-shadow-color:#0000004d}@supports (color:color-mix(in lab, red, red)){.shadow-black\/30{--tw-shadow-color:color-mix(in oklab, color-mix(in oklab, var(--color-black) 30%, transparent) var(--tw-shadow-alpha), transparent)}}.shadow-black\/40{--tw-shadow-color:#0006}@supports (color:color-mix(in lab, red, red)){.shadow-black\/40{--tw-shadow-color:color-mix(in oklab, color-mix(in oklab, var(--color-black) 40%, transparent) var(--tw-shadow-alpha), transparent)}}.shadow-black\/50{--tw-shadow-color:#00000080}@supports (color:color-mix(in lab, red, red)){.shadow-black\/50{--tw-shadow-color:color-mix(in oklab, color-mix(in oklab, var(--color-black) 50%, transparent) var(--tw-shadow-alpha), transparent)}}.shadow-brand-500\/30{--tw-shadow-color:#06b6d44d}@supports (color:color-mix(in lab, red, red)){.shadow-brand-500\/30{--tw-shadow-color:color-mix(in oklab, color-mix(in oklab, var(--color-brand-500) 30%, transparent) var(--tw-shadow-alpha), transparent)}}.shadow-cyan-950\/5{--tw-shadow-color:#0533450d}@supports (color:color-mix(in lab, red, red)){.shadow-cyan-950\/5{--tw-shadow-color:color-mix(in oklab, color-mix(in oklab, var(--color-cyan-950) 5%, transparent) var(--tw-shadow-alpha), transparent)}}.shadow-slate-950\/5{--tw-shadow-color:#0206180d}@supports (color:color-mix(in lab, red, red)){.shadow-slate-950\/5{--tw-shadow-color:color-mix(in oklab, color-mix(in oklab, var(--color-slate-950) 5%, transparent) var(--tw-shadow-alpha), transparent)}}.shadow-slate-950\/10{--tw-shadow-color:#0206181a}@supports (color:color-mix(in lab, red, red)){.shadow-slate-950\/10{--tw-shadow-color:color-mix(in oklab, color-mix(in oklab, var(--color-slate-950) 10%, transparent) var(--tw-shadow-alpha), transparent)}}.shadow-slate-950\/15{--tw-shadow-color:#02061826}@supports (color:color-mix(in lab, red, red)){.shadow-slate-950\/15{--tw-shadow-color:color-mix(in oklab, color-mix(in oklab, var(--color-slate-950) 15%, transparent) var(--tw-shadow-alpha), transparent)}}.shadow-slate-950\/20{--tw-shadow-color:#02061833}@supports (color:color-mix(in lab, red, red)){.shadow-slate-950\/20{--tw-shadow-color:color-mix(in oklab, color-mix(in oklab, var(--color-slate-950) 20%, transparent) var(--tw-shadow-alpha), transparent)}}.shadow-slate-950\/30{--tw-shadow-color:#0206184d}@supports (color:color-mix(in lab, red, red)){.shadow-slate-950\/30{--tw-shadow-color:color-mix(in oklab, color-mix(in oklab, var(--color-slate-950) 30%, transparent) var(--tw-shadow-alpha), transparent)}}.ring-black\/10{--tw-ring-color:#0000001a}@supports (color:color-mix(in lab, red, red)){.ring-black\/10{--tw-ring-color:color-mix(in oklab, var(--color-black) 10%, transparent)}}.ring-black\/20{--tw-ring-color:#0003}@supports (color:color-mix(in lab, red, red)){.ring-black\/20{--tw-ring-color:color-mix(in oklab, var(--color-black) 20%, transparent)}}.ring-brand-100{--tw-ring-color:var(--color-brand-100)}.ring-brand-200{--tw-ring-color:var(--color-brand-200)}.ring-brand-300{--tw-ring-color:var(--color-brand-300)}.ring-brand-400{--tw-ring-color:var(--color-brand-400)}.ring-brand-500{--tw-ring-color:var(--color-brand-500)}.ring-emerald-100{--tw-ring-color:var(--color-emerald-100)}.ring-emerald-200{--tw-ring-color:var(--color-emerald-200)}.ring-hairline{--tw-ring-color:var(--color-hairline)}.ring-slate-200{--tw-ring-color:var(--color-slate-200)}.ring-slate-300{--tw-ring-color:var(--color-slate-300)}.ring-slate-900{--tw-ring-color:var(--color-slate-900)}.ring-slate-950\/5{--tw-ring-color:#0206180d}@supports (color:color-mix(in lab, red, red)){.ring-slate-950\/5{--tw-ring-color:color-mix(in oklab, var(--color-slate-950) 5%, transparent)}}.ring-slate-950\/10{--tw-ring-color:#0206181a}@supports (color:color-mix(in lab, red, red)){.ring-slate-950\/10{--tw-ring-color:color-mix(in oklab, var(--color-slate-950) 10%, transparent)}}.ring-transparent{--tw-ring-color:transparent}.ring-white{--tw-ring-color:var(--color-white)}.ring-white\/25{--tw-ring-color:#ffffff40}@supports (color:color-mix(in lab, red, red)){.ring-white\/25{--tw-ring-color:color-mix(in oklab, var(--color-white) 25%, transparent)}}.ring-offset-2{--tw-ring-offset-width:2px;--tw-ring-offset-shadow:var(--tw-ring-inset,) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color)}.ring-offset-transparent{--tw-ring-offset-color:transparent}.filter{filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}.backdrop-blur{--tw-backdrop-blur:blur(8px);-webkit-backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,)}.backdrop-blur-sm{--tw-backdrop-blur:blur(var(--blur-sm));-webkit-backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,)}.transition{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter,display,content-visibility,overlay,pointer-events;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-\[top\,left\,bottom\,right\]{transition-property:top,left,bottom,right;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-\[width\,background-color\]{transition-property:width,background-color;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-all{transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-colors{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-opacity{transition-property:opacity;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-shadow{transition-property:box-shadow;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-transform{transition-property:transform,translate,scale,rotate;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.delay-0{transition-delay:0s}.duration-150{--tw-duration:.15s;transition-duration:.15s}.duration-200{--tw-duration:.2s;transition-duration:.2s}.duration-300{--tw-duration:.3s;transition-duration:.3s}.duration-500{--tw-duration:.5s;transition-duration:.5s}.ease-in-out{--tw-ease:var(--ease-in-out);transition-timing-function:var(--ease-in-out)}.ease-out{--tw-ease:var(--ease-out);transition-timing-function:var(--ease-out)}.will-change-transform{will-change:transform}.outline-none{--tw-outline-style:none;outline-style:none}.select-none{-webkit-user-select:none;user-select:none}.select-text{-webkit-user-select:text;user-select:text}.\[unspa\:\.\.\.\]{unspa:...}.ring-inset{--tw-ring-inset:inset}.group-focus-within\:inline-flex:is(:where(.group):focus-within *){display:inline-flex}.group-focus-within\:opacity-100:is(:where(.group):focus-within *){opacity:1}.group-focus-within\/tagfilter\:ml-1:is(:where(.group\/tagfilter):focus-within *){margin-left:calc(var(--spacing) * 1)}.group-focus-within\/tagfilter\:max-w-24:is(:where(.group\/tagfilter):focus-within *){max-width:calc(var(--spacing) * 24)}.group-focus-within\/tagfilter\:px-2:is(:where(.group\/tagfilter):focus-within *){padding-inline:calc(var(--spacing) * 2)}.group-focus-within\/tagfilter\:opacity-100:is(:where(.group\/tagfilter):focus-within *){opacity:1}.group-focus-within\/tagfilter\:delay-300:is(:where(.group\/tagfilter):focus-within *){transition-delay:.3s}@media (hover:hover){.group-hover\:inline-flex:is(:where(.group):hover *){display:inline-flex}.group-hover\:translate-x-0\.5:is(:where(.group):hover *){--tw-translate-x:calc(var(--spacing) * .5);translate:var(--tw-translate-x) var(--tw-translate-y)}.group-hover\:translate-x-1:is(:where(.group):hover *){--tw-translate-x:calc(var(--spacing) * 1);translate:var(--tw-translate-x) var(--tw-translate-y)}.group-hover\:bg-brand-100:is(:where(.group):hover *){background-color:var(--color-brand-100)}.group-hover\:bg-emerald-100:is(:where(.group):hover *){background-color:var(--color-emerald-100)}.group-hover\:bg-slate-300\/80:is(:where(.group):hover *){background-color:#cad5e2cc}@supports (color:color-mix(in lab, red, red)){.group-hover\:bg-slate-300\/80:is(:where(.group):hover *){background-color:color-mix(in oklab, var(--color-slate-300) 80%, transparent)}}.group-hover\:text-brand-300:is(:where(.group):hover *){color:var(--color-brand-300)}.group-hover\:text-brand-800:is(:where(.group):hover *){color:var(--color-brand-800)}.group-hover\:text-brand-900:is(:where(.group):hover *){color:var(--color-brand-900)}.group-hover\:text-emerald-800:is(:where(.group):hover *){color:var(--color-emerald-800)}.group-hover\:text-slate-500:is(:where(.group):hover *){color:var(--color-slate-500)}.group-hover\:opacity-100:is(:where(.group):hover *){opacity:1}.group-hover\/chip\:opacity-70:is(:where(.group\/chip):hover *){opacity:.7}.group-hover\/tagfilter\:ml-1:is(:where(.group\/tagfilter):hover *){margin-left:calc(var(--spacing) * 1)}.group-hover\/tagfilter\:max-w-24:is(:where(.group\/tagfilter):hover *){max-width:calc(var(--spacing) * 24)}.group-hover\/tagfilter\:px-2:is(:where(.group\/tagfilter):hover *){padding-inline:calc(var(--spacing) * 2)}.group-hover\/tagfilter\:opacity-100:is(:where(.group\/tagfilter):hover *){opacity:1}.group-hover\/tagfilter\:delay-300:is(:where(.group\/tagfilter):hover *){transition-delay:.3s}}.placeholder\:text-slate-400::placeholder{color:var(--color-slate-400)}.placeholder\:text-slate-500::placeholder{color:var(--color-slate-500)}.backdrop\:bg-slate-950\/40::backdrop{background-color:#02061866}@supports (color:color-mix(in lab, red, red)){.backdrop\:bg-slate-950\/40::backdrop{background-color:color-mix(in oklab, var(--color-slate-950) 40%, transparent)}}.backdrop\:backdrop-blur-sm::backdrop{--tw-backdrop-blur:blur(var(--blur-sm));-webkit-backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,)}.after\:absolute:after{content:var(--tw-content);position:absolute}.after\:inset-0:after{content:var(--tw-content);inset:calc(var(--spacing) * 0)}.last\:mb-0:last-child{margin-bottom:calc(var(--spacing) * 0)}.last\:border-b-0:last-child{border-bottom-style:var(--tw-border-style);border-bottom-width:0}.focus-within\:border-cyan-300:focus-within{border-color:var(--color-cyan-300)}@media (hover:hover){.hover\:-translate-y-0\.5:hover{--tw-translate-y:calc(var(--spacing) * -.5);translate:var(--tw-translate-x) var(--tw-translate-y)}.hover\:scale-110:hover{--tw-scale-x:110%;--tw-scale-y:110%;--tw-scale-z:110%;scale:var(--tw-scale-x) var(--tw-scale-y)}.hover\:border-brand-300:hover{border-color:var(--color-brand-300)}.hover\:border-brand-400:hover{border-color:var(--color-brand-400)}.hover\:border-brand-500:hover{border-color:var(--color-brand-500)}.hover\:border-brand-500\/60:hover{border-color:#06b6d499}@supports (color:color-mix(in lab, red, red)){.hover\:border-brand-500\/60:hover{border-color:color-mix(in oklab, var(--color-brand-500) 60%, transparent)}}.hover\:border-cyan-200:hover{border-color:var(--color-cyan-200)}.hover\:border-hairline:hover{border-color:var(--color-hairline)}.hover\:border-slate-300:hover{border-color:var(--color-slate-300)}.hover\:bg-amber-100:hover{background-color:var(--color-amber-100)}.hover\:bg-amber-500:hover{background-color:var(--color-amber-500)}.hover\:bg-brand-50:hover{background-color:var(--color-brand-50)}.hover\:bg-brand-100:hover{background-color:var(--color-brand-100)}.hover\:bg-brand-500:hover{background-color:var(--color-brand-500)}.hover\:bg-brand-500\/20:hover{background-color:#06b6d433}@supports (color:color-mix(in lab, red, red)){.hover\:bg-brand-500\/20:hover{background-color:color-mix(in oklab, var(--color-brand-500) 20%, transparent)}}.hover\:bg-brand-600:hover{background-color:var(--color-brand-600)}.hover\:bg-brand-700:hover{background-color:var(--color-brand-700)}.hover\:bg-brand-800:hover{background-color:var(--color-brand-800)}.hover\:bg-brand-900:hover{background-color:var(--color-brand-900)}.hover\:bg-cyan-50:hover{background-color:var(--color-cyan-50)}.hover\:bg-cyan-50\/20:hover{background-color:#ecfeff33}@supports (color:color-mix(in lab, red, red)){.hover\:bg-cyan-50\/20:hover{background-color:color-mix(in oklab, var(--color-cyan-50) 20%, transparent)}}.hover\:bg-cyan-50\/40:hover{background-color:#ecfeff66}@supports (color:color-mix(in lab, red, red)){.hover\:bg-cyan-50\/40:hover{background-color:color-mix(in oklab, var(--color-cyan-50) 40%, transparent)}}.hover\:bg-emerald-500:hover{background-color:var(--color-emerald-500)}.hover\:bg-neutral-50:hover{background-color:var(--color-neutral-50)}.hover\:bg-neutral-100:hover{background-color:var(--color-neutral-100)}.hover\:bg-neutral-200:hover{background-color:var(--color-neutral-200)}.hover\:bg-red-50:hover{background-color:var(--color-red-50)}.hover\:bg-red-100:hover{background-color:var(--color-red-100)}.hover\:bg-rose-50:hover{background-color:var(--color-rose-50)}.hover\:bg-rose-500:hover{background-color:var(--color-rose-500)}.hover\:bg-sky-50:hover{background-color:var(--color-sky-50)}.hover\:bg-slate-50:hover{background-color:var(--color-slate-50)}.hover\:bg-slate-100:hover{background-color:var(--color-slate-100)}.hover\:bg-slate-200:hover{background-color:var(--color-slate-200)}.hover\:bg-slate-200\/60:hover{background-color:#e2e8f099}@supports (color:color-mix(in lab, red, red)){.hover\:bg-slate-200\/60:hover{background-color:color-mix(in oklab, var(--color-slate-200) 60%, transparent)}}.hover\:bg-slate-700:hover{background-color:var(--color-slate-700)}.hover\:bg-slate-800:hover{background-color:var(--color-slate-800)}.hover\:bg-slate-800\/60:hover{background-color:#1d293d99}@supports (color:color-mix(in lab, red, red)){.hover\:bg-slate-800\/60:hover{background-color:color-mix(in oklab, var(--color-slate-800) 60%, transparent)}}.hover\:bg-violet-50:hover{background-color:var(--color-violet-50)}.hover\:bg-violet-100:hover{background-color:var(--color-violet-100)}.hover\:bg-white:hover{background-color:var(--color-white)}.hover\:bg-white\/10:hover{background-color:#ffffff1a}@supports (color:color-mix(in lab, red, red)){.hover\:bg-white\/10:hover{background-color:color-mix(in oklab, var(--color-white) 10%, transparent)}}.hover\:bg-white\/15:hover{background-color:#ffffff26}@supports (color:color-mix(in lab, red, red)){.hover\:bg-white\/15:hover{background-color:color-mix(in oklab, var(--color-white) 15%, transparent)}}.hover\:bg-white\/20:hover{background-color:#fff3}@supports (color:color-mix(in lab, red, red)){.hover\:bg-white\/20:hover{background-color:color-mix(in oklab, var(--color-white) 20%, transparent)}}.hover\:bg-white\/25:hover{background-color:#ffffff40}@supports (color:color-mix(in lab, red, red)){.hover\:bg-white\/25:hover{background-color:color-mix(in oklab, var(--color-white) 25%, transparent)}}.hover\:bg-white\/60:hover{background-color:#fff9}@supports (color:color-mix(in lab, red, red)){.hover\:bg-white\/60:hover{background-color:color-mix(in oklab, var(--color-white) 60%, transparent)}}.hover\:bg-white\/70:hover{background-color:#ffffffb3}@supports (color:color-mix(in lab, red, red)){.hover\:bg-white\/70:hover{background-color:color-mix(in oklab, var(--color-white) 70%, transparent)}}.hover\:from-brand-500:hover{--tw-gradient-from:var(--color-brand-500);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position))}.hover\:to-brand-700:hover{--tw-gradient-to:var(--color-brand-700);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position))}.hover\:text-brand-200:hover{color:var(--color-brand-200)}.hover\:text-brand-300:hover{color:var(--color-brand-300)}.hover\:text-brand-700:hover{color:var(--color-brand-700)}.hover\:text-brand-800:hover{color:var(--color-brand-800)}.hover\:text-brand-900:hover{color:var(--color-brand-900)}.hover\:text-neutral-700:hover{color:var(--color-neutral-700)}.hover\:text-neutral-900:hover{color:var(--color-neutral-900)}.hover\:text-red-600:hover{color:var(--color-red-600)}.hover\:text-red-700:hover{color:var(--color-red-700)}.hover\:text-rose-300:hover{color:var(--color-rose-300)}.hover\:text-rose-800:hover{color:var(--color-rose-800)}.hover\:text-slate-200:hover{color:var(--color-slate-200)}.hover\:text-slate-300:hover{color:var(--color-slate-300)}.hover\:text-slate-700:hover{color:var(--color-slate-700)}.hover\:text-slate-800:hover{color:var(--color-slate-800)}.hover\:text-slate-900:hover{color:var(--color-slate-900)}.hover\:text-slate-950:hover{color:var(--color-slate-950)}.hover\:text-white:hover{color:var(--color-white)}.hover\:underline:hover{text-decoration-line:underline}.hover\:opacity-100:hover{opacity:1}.hover\:opacity-100\!:hover{opacity:1!important}.hover\:shadow-md:hover{--tw-shadow:0 4px 6px -1px var(--tw-shadow-color,#0000001a), 0 2px 4px -2px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.hover\:shadow-brand-500\/15:hover{--tw-shadow-color:#06b6d426}@supports (color:color-mix(in lab, red, red)){.hover\:shadow-brand-500\/15:hover{--tw-shadow-color:color-mix(in oklab, color-mix(in oklab, var(--color-brand-500) 15%, transparent) var(--tw-shadow-alpha), transparent)}}.hover\:shadow-brand-500\/20:hover{--tw-shadow-color:#06b6d433}@supports (color:color-mix(in lab, red, red)){.hover\:shadow-brand-500\/20:hover{--tw-shadow-color:color-mix(in oklab, color-mix(in oklab, var(--color-brand-500) 20%, transparent) var(--tw-shadow-alpha), transparent)}}.hover\:shadow-cyan-950\/10:hover{--tw-shadow-color:#0533451a}@supports (color:color-mix(in lab, red, red)){.hover\:shadow-cyan-950\/10:hover{--tw-shadow-color:color-mix(in oklab, color-mix(in oklab, var(--color-cyan-950) 10%, transparent) var(--tw-shadow-alpha), transparent)}}.hover\:ring-slate-500:hover{--tw-ring-color:var(--color-slate-500)}.hover\:brightness-95:hover{--tw-brightness:brightness(95%);filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}}.focus\:border-brand-400:focus{border-color:var(--color-brand-400)}.focus\:border-brand-500:focus{border-color:var(--color-brand-500)}.focus\:border-brand-700:focus{border-color:var(--color-brand-700)}.focus\:border-slate-400:focus{border-color:var(--color-slate-400)}.focus\:border-slate-900:focus{border-color:var(--color-slate-900)}.focus\:ring-1:focus{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.focus\:ring-2:focus{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.focus\:ring-amber-300:focus{--tw-ring-color:var(--color-amber-300)}.focus\:ring-brand-100:focus{--tw-ring-color:var(--color-brand-100)}.focus\:ring-brand-300:focus{--tw-ring-color:var(--color-brand-300)}.focus\:ring-brand-400:focus{--tw-ring-color:var(--color-brand-400)}.focus\:ring-brand-500\/15:focus{--tw-ring-color:#06b6d426}@supports (color:color-mix(in lab, red, red)){.focus\:ring-brand-500\/15:focus{--tw-ring-color:color-mix(in oklab, var(--color-brand-500) 15%, transparent)}}.focus\:ring-brand-500\/20:focus{--tw-ring-color:#06b6d433}@supports (color:color-mix(in lab, red, red)){.focus\:ring-brand-500\/20:focus{--tw-ring-color:color-mix(in oklab, var(--color-brand-500) 20%, transparent)}}.focus\:ring-slate-900:focus{--tw-ring-color:var(--color-slate-900)}.focus\:ring-offset-2:focus{--tw-ring-offset-width:2px;--tw-ring-offset-shadow:var(--tw-ring-inset,) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color)}.focus\:outline-none:focus{--tw-outline-style:none;outline-style:none}.focus-visible\:ring-2:focus-visible{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.focus-visible\:ring-brand-300:focus-visible{--tw-ring-color:var(--color-brand-300)}.focus-visible\:ring-brand-500\/40:focus-visible{--tw-ring-color:#06b6d466}@supports (color:color-mix(in lab, red, red)){.focus-visible\:ring-brand-500\/40:focus-visible{--tw-ring-color:color-mix(in oklab, var(--color-brand-500) 40%, transparent)}}.focus-visible\:ring-brand-500\/50:focus-visible{--tw-ring-color:#06b6d480}@supports (color:color-mix(in lab, red, red)){.focus-visible\:ring-brand-500\/50:focus-visible{--tw-ring-color:color-mix(in oklab, var(--color-brand-500) 50%, transparent)}}.focus-visible\:ring-inset:focus-visible{--tw-ring-inset:inset}.active\:cursor-grabbing:active{cursor:grabbing}@media (hover:hover){.enabled\:hover\:bg-brand-800:enabled:hover{background-color:var(--color-brand-800)}.enabled\:hover\:bg-slate-50:enabled:hover{background-color:var(--color-slate-50)}}.disabled\:cursor-default:disabled{cursor:default}.disabled\:cursor-not-allowed:disabled{cursor:not-allowed}.disabled\:cursor-wait:disabled{cursor:wait}.disabled\:bg-slate-300:disabled{background-color:var(--color-slate-300)}.disabled\:opacity-0:disabled{opacity:0}.disabled\:opacity-30:disabled{opacity:.3}.disabled\:opacity-40:disabled{opacity:.4}.disabled\:opacity-50:disabled{opacity:.5}.disabled\:opacity-60:disabled{opacity:.6}.disabled\:opacity-70:disabled{opacity:.7}@media (hover:hover){.group-hover\:disabled\:opacity-30:is(:where(.group):hover *):disabled{opacity:.3}.disabled\:hover\:bg-transparent:disabled:hover{background-color:#0000}.disabled\:hover\:text-neutral-600:disabled:hover{color:var(--color-neutral-600)}.disabled\:hover\:text-slate-600:disabled:hover{color:var(--color-slate-600)}}@media (prefers-reduced-motion:reduce){.motion-reduce\:animate-none\!{animation:none!important}.motion-reduce\:opacity-100\!{opacity:1!important}}@media (width>=40rem){.sm\:mx-4{margin-inline:calc(var(--spacing) * 4)}.sm\:mt-0{margin-top:calc(var(--spacing) * 0)}.sm\:block{display:block}.sm\:flex{display:flex}.sm\:inline{display:inline}.sm\:w-60{width:calc(var(--spacing) * 60)}.sm\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.sm\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.sm\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.sm\:flex-row{flex-direction:row}.sm\:items-center{align-items:center}.sm\:items-end{align-items:flex-end}.sm\:justify-between{justify-content:space-between}.sm\:gap-6{gap:calc(var(--spacing) * 6)}.sm\:px-3{padding-inline:calc(var(--spacing) * 3)}.sm\:px-6{padding-inline:calc(var(--spacing) * 6)}.sm\:text-4xl{font-size:var(--text-4xl);line-height:var(--tw-leading,var(--text-4xl--line-height))}}@media (width>=48rem){.md\:mx-6{margin-inline:calc(var(--spacing) * 6)}.md\:flex{display:flex}.md\:hidden{display:none}.md\:inline{display:inline}.md\:grid-cols-\[1fr_1\.4fr_auto\]{grid-template-columns:1fr 1.4fr auto}.md\:grid-cols-\[1fr_1\.6fr_auto\]{grid-template-columns:1fr 1.6fr auto}.md\:flex-row{flex-direction:row}.md\:items-center{align-items:center}.md\:items-end{align-items:flex-end}.md\:gap-4{gap:calc(var(--spacing) * 4)}}@media (width>=64rem){.lg\:sticky{position:sticky}.lg\:top-32{top:calc(var(--spacing) * 32)}.lg\:col-span-3{grid-column:span 3/span 3}.lg\:col-span-9{grid-column:span 9/span 9}.lg\:flex{display:flex}.lg\:h-auto{height:auto}.lg\:h-full{height:100%}.lg\:max-h-\[calc\(100vh-8rem\)\]{max-height:calc(100vh - 8rem)}.lg\:max-h-full{max-height:100%}.lg\:min-h-0{min-height:calc(var(--spacing) * 0)}.lg\:w-12{width:calc(var(--spacing) * 12)}.lg\:w-80{width:calc(var(--spacing) * 80)}.lg\:w-88{width:calc(var(--spacing) * 88)}.lg\:w-136{width:calc(var(--spacing) * 136)}.lg\:w-\[16rem\]{width:16rem}.lg\:w-\[42rem\]{width:42rem}.lg\:flex-1{flex:1}.lg\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.lg\:grid-cols-\[1fr_18rem\]{grid-template-columns:1fr 18rem}.lg\:grid-cols-\[minmax\(0\,1fr\)_280px\]{grid-template-columns:minmax(0,1fr) 280px}.lg\:grid-cols-\[minmax\(0\,1fr\)_320px\]{grid-template-columns:minmax(0,1fr) 320px}.lg\:grid-cols-\[minmax\(0\,1fr\)_auto\]{grid-template-columns:minmax(0,1fr) auto}.lg\:grid-rows-\[minmax\(0\,1fr\)\]{grid-template-rows:minmax(0,1fr)}.lg\:flex-col{flex-direction:column}.lg\:flex-row{flex-direction:row}.lg\:items-center{align-items:center}.lg\:items-end{align-items:flex-end}.lg\:items-start{align-items:flex-start}.lg\:justify-between{justify-content:space-between}.lg\:overflow-hidden{overflow:hidden}.lg\:overflow-y-auto{overflow-y:auto}.lg\:border-r{border-right-style:var(--tw-border-style);border-right-width:1px}.lg\:border-b-0{border-bottom-style:var(--tw-border-style);border-bottom-width:0}.lg\:px-8{padding-inline:calc(var(--spacing) * 8)}}@media (width>=80rem){.xl\:absolute{position:absolute}.xl\:relative{position:relative}.xl\:sticky{position:sticky}.xl\:inset-x-0{inset-inline:calc(var(--spacing) * 0)}.xl\:top-1\/2{top:50%}.xl\:top-8{top:calc(var(--spacing) * 8)}.xl\:top-18{top:calc(var(--spacing) * 18)}.xl\:mx-auto{margin-inline:auto}.xl\:flex{display:flex}.xl\:min-h-\[calc\(100vh-6rem\)\]{min-height:calc(100vh - 6rem)}.xl\:w-104{width:calc(var(--spacing) * 104)}.xl\:w-\[18rem\]{width:18rem}.xl\:max-w-sm{max-width:var(--container-sm)}.xl\:flex-1{flex:1}.xl\:-translate-y-1\/2{--tw-translate-y:calc(calc(1 / 2 * 100%) * -1);translate:var(--tw-translate-x) var(--tw-translate-y)}.xl\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.xl\:grid-cols-\[minmax\(0\,0\.95fr\)_minmax\(380px\,1\.05fr\)\]{grid-template-columns:minmax(0,.95fr) minmax(380px,1.05fr)}.xl\:flex-col{flex-direction:column}.xl\:self-start{align-self:flex-start}.xl\:overflow-hidden{overflow:hidden}.xl\:rounded-2xl{border-radius:var(--radius-2xl)}.xl\:bg-transparent{background-color:#0000}.xl\:bg-white\/2\.5{background-color:#ffffff06}@supports (color:color-mix(in lab, red, red)){.xl\:bg-white\/2\.5{background-color:color-mix(in oklab, var(--color-white) 2.5%, transparent)}}.xl\:transition-\[top\,transform\]{transition-property:top,transform;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.xl\:transition-colors{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.xl\:duration-500{--tw-duration:.5s;transition-duration:.5s}.xl\:ease-out{--tw-ease:var(--ease-out);transition-timing-function:var(--ease-out)}@media (prefers-reduced-motion:reduce){.xl\:motion-reduce\:transition-none{transition-property:none}}}}html,body{font-family:var(--font-sans);color:#0f172a;background:#f8fafc}:root[data-theme=lyriks]{--color-brand-50:#f5f3ff;--color-brand-100:#ede9fe;--color-brand-200:#ddd6fe;--color-brand-300:#c4b5fd;--color-brand-400:#a78bfa;--color-brand-500:#8b5cf6;--color-brand-600:#7c3aed;--color-brand-700:#6d28d9;--color-brand-800:#5b21b6;--color-brand-900:#4c1d95;--font-brand:"Space Grotesk", ui-sans-serif, system-ui, sans-serif;--color-canvas:#eeeafb;--color-surface-soft:#e6dff7;--color-surface-strong:#ddd4f1;--color-hairline:#e0d8f1;--color-slate-50:#f2eefc;--color-slate-100:#e9e3f7;--color-slate-200:#ddd4ee;--color-slate-300:#c7bce0;--color-slate-400:#948ab0;--color-slate-500:#645c7e;--color-slate-600:#4d4669;--color-slate-700:#393353;--color-slate-800:#261e3b;--color-slate-900:#18122f;--color-slate-950:#0d0822;--color-neutral-50:#f2eefc;--color-neutral-100:#e9e3f7;--color-neutral-200:#ddd4ee;--color-neutral-300:#c7bce0;--color-neutral-400:#948ab0;--color-neutral-500:#645c7e;--color-neutral-600:#4d4669;--color-neutral-700:#393353;--color-neutral-800:#261e3b;--color-neutral-900:#18122f;--color-neutral-950:#0d0822;--color-cyan-50:#f5f3ff;--color-cyan-100:#ede9fe;--color-cyan-200:#ddd6fe;--color-cyan-300:#c4b5fd;--color-cyan-400:#a78bfa;--color-cyan-500:#8b5cf6;--color-cyan-600:#7c3aed;--color-cyan-700:#6d28d9;--color-cyan-800:#5b21b6;--color-cyan-900:#4c1d95;--color-cyan-950:#2e1065;--color-sky-50:#f5f3ff;--color-sky-100:#ede9fe;--color-sky-200:#ddd6fe;--color-sky-300:#c4b5fd;--color-sky-400:#a78bfa;--color-sky-500:#8b5cf6;--color-sky-600:#7c3aed;--color-sky-700:#6d28d9;--color-sky-800:#5b21b6;--color-sky-900:#4c1d95;--color-sky-950:#2e1065;--color-teal-50:#f5f3ff;--color-teal-100:#ede9fe;--color-teal-200:#ddd6fe;--color-teal-300:#c4b5fd;--color-teal-400:#a78bfa;--color-teal-500:#8b5cf6;--color-teal-600:#7c3aed;--color-teal-700:#6d28d9;--color-teal-800:#5b21b6;--color-teal-900:#4c1d95;--color-teal-950:#2e1065}:root[data-theme=lyriks],:root[data-theme=lyriks] body{background:var(--color-canvas)}@keyframes focus-flash-lyriks{0%{background-color:#ede9fea6;box-shadow:0 0 #7c3aed8c}8%{background-color:#ede9fe8c;box-shadow:0 0 0 6px #7c3aed4d}75%{background-color:#ede9fe66;box-shadow:0 0 0 4px #7c3aed38}to{background-color:#0000;box-shadow:0 0 #7c3aed00}}:root[data-theme=lyriks] .focus-flash{animation-name:focus-flash-lyriks}:root[data-theme=lyriks] .bg-slate-900,:root[data-theme=lyriks] .bg-slate-950,:root[data-theme=lyriks] .bg-neutral-900,:root[data-theme=lyriks] .bg-neutral-950{background-color:var(--color-brand-600)}:root[data-theme=lyriks] .bg-slate-800{background-color:var(--color-brand-700)}:root[data-theme=lyriks] .border-slate-900{border-color:var(--color-brand-600)}:root[data-theme=lyriks] .hover\:bg-slate-900:hover,:root[data-theme=lyriks] .hover\:bg-slate-800:hover{background-color:var(--color-brand-700)}:root[data-theme=lyriks] .hover\:bg-slate-700:hover{background-color:var(--color-brand-600)}:root[data-theme=lyriks] pre.bg-slate-900,:root[data-theme=lyriks] code.bg-slate-900,:root[data-theme=lyriks] textarea.bg-slate-900{background-color:#0f172a}:root[data-theme=lyriks] pre.bg-slate-950,:root[data-theme=lyriks] code.bg-slate-950,:root[data-theme=lyriks] textarea.bg-slate-950{background-color:#020617}:root[data-theme=lyriks] pre.bg-neutral-900,:root[data-theme=lyriks] code.bg-neutral-900,:root[data-theme=lyriks] textarea.bg-neutral-900{background-color:#171717}:root[data-theme=lyriks] pre.bg-neutral-950,:root[data-theme=lyriks] code.bg-neutral-950,:root[data-theme=lyriks] textarea.bg-neutral-950{background-color:#0a0a0a}:root[data-theme=lyriks] .via-brand-mint{background-image:linear-gradient(90deg,#6d28d9,#a21caf,#db2777)}.mono{font-family:var(--font-mono)}@keyframes focus-flash{0%{background-color:#cffafe99;box-shadow:0 0 #0891b28c}8%{background-color:#cffafe8c;box-shadow:0 0 0 6px #0891b24d}75%{background-color:#cffafe66;box-shadow:0 0 0 4px #0891b238}to{background-color:#0000;box-shadow:0 0 #0891b200}}.focus-flash{border-radius:.5rem;animation:3s ease-out focus-flash}@property --tw-translate-x{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-y{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-z{syntax:"*";inherits:false;initial-value:0}@property --tw-rotate-x{syntax:"*";inherits:false}@property --tw-rotate-y{syntax:"*";inherits:false}@property --tw-rotate-z{syntax:"*";inherits:false}@property --tw-skew-x{syntax:"*";inherits:false}@property --tw-skew-y{syntax:"*";inherits:false}@property --tw-space-y-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-divide-y-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-border-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-gradient-position{syntax:"*";inherits:false}@property --tw-gradient-from{syntax:"<color>";inherits:false;initial-value:#0000}@property --tw-gradient-via{syntax:"<color>";inherits:false;initial-value:#0000}@property --tw-gradient-to{syntax:"<color>";inherits:false;initial-value:#0000}@property --tw-gradient-stops{syntax:"*";inherits:false}@property --tw-gradient-via-stops{syntax:"*";inherits:false}@property --tw-gradient-from-position{syntax:"<length-percentage>";inherits:false;initial-value:0%}@property --tw-gradient-via-position{syntax:"<length-percentage>";inherits:false;initial-value:50%}@property --tw-gradient-to-position{syntax:"<length-percentage>";inherits:false;initial-value:100%}@property --tw-leading{syntax:"*";inherits:false}@property --tw-font-weight{syntax:"*";inherits:false}@property --tw-tracking{syntax:"*";inherits:false}@property --tw-ordinal{syntax:"*";inherits:false}@property --tw-slashed-zero{syntax:"*";inherits:false}@property --tw-numeric-figure{syntax:"*";inherits:false}@property --tw-numeric-spacing{syntax:"*";inherits:false}@property --tw-numeric-fraction{syntax:"*";inherits:false}@property --tw-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-shadow-color{syntax:"*";inherits:false}@property --tw-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-inset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-shadow-color{syntax:"*";inherits:false}@property --tw-inset-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-ring-color{syntax:"*";inherits:false}@property --tw-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-ring-color{syntax:"*";inherits:false}@property --tw-inset-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-ring-inset{syntax:"*";inherits:false}@property --tw-ring-offset-width{syntax:"<length>";inherits:false;initial-value:0}@property --tw-ring-offset-color{syntax:"*";inherits:false;initial-value:#fff}@property --tw-ring-offset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-blur{syntax:"*";inherits:false}@property --tw-brightness{syntax:"*";inherits:false}@property --tw-contrast{syntax:"*";inherits:false}@property --tw-grayscale{syntax:"*";inherits:false}@property --tw-hue-rotate{syntax:"*";inherits:false}@property --tw-invert{syntax:"*";inherits:false}@property --tw-opacity{syntax:"*";inherits:false}@property --tw-saturate{syntax:"*";inherits:false}@property --tw-sepia{syntax:"*";inherits:false}@property --tw-drop-shadow{syntax:"*";inherits:false}@property --tw-drop-shadow-color{syntax:"*";inherits:false}@property --tw-drop-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-drop-shadow-size{syntax:"*";inherits:false}@property --tw-backdrop-blur{syntax:"*";inherits:false}@property --tw-backdrop-brightness{syntax:"*";inherits:false}@property --tw-backdrop-contrast{syntax:"*";inherits:false}@property --tw-backdrop-grayscale{syntax:"*";inherits:false}@property --tw-backdrop-hue-rotate{syntax:"*";inherits:false}@property --tw-backdrop-invert{syntax:"*";inherits:false}@property --tw-backdrop-opacity{syntax:"*";inherits:false}@property --tw-backdrop-saturate{syntax:"*";inherits:false}@property --tw-backdrop-sepia{syntax:"*";inherits:false}@property --tw-duration{syntax:"*";inherits:false}@property --tw-ease{syntax:"*";inherits:false}@property --tw-content{syntax:"*";inherits:false;initial-value:""}@property --tw-scale-x{syntax:"*";inherits:false;initial-value:1}@property --tw-scale-y{syntax:"*";inherits:false;initial-value:1}@property --tw-scale-z{syntax:"*";inherits:false;initial-value:1}@keyframes spin{to{transform:rotate(360deg)}}@keyframes pulse{50%{opacity:.5}}
|
|
Binary file
|
|
Binary file
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
import{$ as e,B as t,F as n,J as r,L as i,M as a,N as o,O as s,Q as c,R as l,U as u,V as d,_t as f,a as p,d as m,dt as h,et as g,ft as _,gt as v,h as y,it as b,j as x,l as S,m as C,n as w,ot as T,q as E,r as D,rt as O,s as k,tt as A,u as j,yt as M,z as N}from"./D50Xf4Qj.js";import{n as P}from"./BgjLttfH.js";import"./xihTtKlq.js";import{At as F,Et as ee,I,M as te,Ot as ne,P as re,Tt as L,j as ie,t as R}from"./BLErSy65.js";import{t as ae}from"./D7NkISST.js";import"./DiXkacF8.js";import{n as oe}from"./CRYP5_po.js";import{n as se,t as ce}from"./CE7ndIoT.js";import{n as z,t as le}from"./CFFa_0pY.js";import{t as ue}from"./iSPCqpff.js";import{t as B}from"./DkX3qg_W.js";import{a as de,c as V,i as fe,l as pe,n as me,o as he,r as ge,s as _e,t as ve}from"./BiH-tU7x.js";import{t as ye}from"./KBn4SNsy2.js";import{t as be}from"./Czx0-8cO2.js";import{t as xe}from"./TWC3jtDk2.js";var H=n(`<p class="line-clamp-3 text-sm leading-6 text-slate-600"> </p>`),Se=n(`<p class="text-sm leading-6 text-slate-500">No description yet. Add a note so collaborators know what belongs here.</p>`),U=n(`<span aria-hidden="true">⬇</span> Export .unspa`,1),W=n(`<!> <!>`,1),Ce=n(`<article data-tour="project-card" class="group relative flex h-full min-h-52 flex-col justify-between overflow-hidden rounded-xl border border-cyan-100 bg-white p-5 shadow-sm shadow-cyan-950/5 transition duration-150 hover:-translate-y-0.5 hover:border-cyan-200 hover:bg-cyan-50/20 hover:shadow-md hover:shadow-cyan-950/10 focus-within:border-cyan-300"><div class="absolute inset-x-0 top-0 h-1 bg-linear-to-r from-brand-500 via-brand-mint to-violet-400"></div> <div class="space-y-3"><div class="flex items-start justify-between gap-3"><a class="block min-w-0 flex-1 after:absolute after:inset-0"><h3 class="truncate text-base font-semibold text-slate-950 group-hover:text-brand-800"> </h3></a> <span class="relative z-10 shrink-0 rounded-md border border-cyan-100 bg-cyan-50 px-2 py-0.5 text-xs font-medium text-brand-800" title="Features in project"> </span></div> <!></div> <div class="mt-5 flex items-end justify-between gap-3 border-t border-hairline pt-3 text-xs text-slate-500"><div class="min-w-0 flex-1 space-y-2"><div class="relative z-10"><!></div> <span class="block truncate"> </span></div> <div class="relative z-10 flex shrink-0 items-center gap-1"><!></div></div></article>`);function we(t,n){_(n,!0);let r=p(n,`tagTypeOptions`,19,()=>[]),s=p(n,`deleteLabel`,3,`Delete`);function c(){z.openProject(String(n.summary.id))}var l=Ce(),u=A(e(l),2),d=e(u),y=e(d),b=e(y),S=e(b,!0);f(b),f(y);var C=A(y,2),w=e(C);f(C),f(d);var T=A(d,2),D=t=>{var r=H(),i=e(r,!0);f(r),E(()=>a(i,n.summary.description)),o(t,r)},O=e=>{o(e,Se())};x(T,e=>{n.summary.description?e(D):e(O,-1)}),f(u);var k=A(u,2),j=e(k),P=e(j);B(e(P),{get tags(){return n.summary.tags},get onAddTag(){return n.onAddTag},get onRemoveTag(){return n.onRemoveTag},get typeOptions(){return r()}}),f(P);var F=A(P,2),ee=e(F);f(F),f(j);var I=A(j,2);pe(e(I),{placement:`up`,align:`right`,label:`Project actions`,children:(e,t=M)=>{var r=W(),c=g(r);V(c,{onclick:()=>{t()(),n.onExport()},children:(e,t)=>{var n=U();v(),o(e,n)},$$slots:{default:!0}}),V(A(c,2),{danger:!0,onclick:()=>{t()(),n.onDelete()},children:(e,t)=>{v();var n=i();E(()=>a(n,s())),o(e,n)},$$slots:{default:!0}}),o(e,r)},$$slots:{default:!0}}),f(I),f(k),f(l),E(e=>{m(y,`href`,`/projects/${n.summary.id}`),a(S,n.summary.name),a(w,`${n.summary.featureCount??``} feature${n.summary.featureCount===1?``:`s`}`),a(ee,`Updated ${e??``}`)},[()=>new Date(n.summary.updatedAt).toLocaleDateString()]),N(`click`,y,c),o(t,l),h()}l([`click`]);var Te=n(`<form data-tour="new-project-form" class="grid gap-3 rounded-xl border border-cyan-100 bg-cyan-50/40 p-4 md:grid-cols-[1fr_1.6fr_auto] md:items-end"><div><label for="proj-name" class="mb-1.5 block text-xs font-medium text-slate-700">Project name</label> <input id="proj-name" type="text" placeholder="e.g. Acme Platform" class="h-10 w-full rounded-md border border-cyan-100 bg-white px-3 text-sm outline-none focus:border-brand-700 focus:ring-2 focus:ring-brand-100" required=""/></div> <div><label for="proj-desc" class="mb-1.5 block text-xs font-medium text-slate-700">Description</label> <input id="proj-desc" data-tour="new-project-description" type="text" placeholder="What product or initiative does this group?" class="h-10 w-full rounded-md border border-cyan-100 bg-white px-3 text-sm outline-none focus:border-brand-700 focus:ring-2 focus:ring-brand-100" required=""/></div> <button type="submit" class="h-10 rounded-md bg-brand-800 px-4 text-sm font-medium text-white hover:bg-brand-900 disabled:cursor-not-allowed disabled:opacity-50"> </button></form>`);function Ee(n,i){_(i,!0);let s=b(``),c=b(``),l=b(!1),p=b(null),g=T(()=>ye(oe.currentStep,`new-project`,d(s)));r(()=>{d(p)&&u().then(()=>d(p)?.focus())});async function v(e){if(e.preventDefault(),!d(l)&&d(s).trim().length!==0&&d(c).trim().length!==0){O(l,!0);try{await i.onSubmit(d(s).trim(),d(c).trim()),O(s,``),O(c,``)}finally{O(l,!1)}}}var y=Te(),x=e(y),C=A(e(x),2);j(C),k(C,e=>O(p,e),()=>d(p)),f(x);var w=A(x,2),D=A(e(w),2);j(D),f(w);var M=A(w,2),N=e(M,!0);f(M),f(y),E(e=>{m(M,`title`,d(g).blocked?`Tutorial: name must be exactly "${d(g).requiredValue}"`:void 0),M.disabled=e,a(N,d(l)?`Creating...`:`New project`)},[()=>d(l)||d(s).trim().length===0||d(c).trim().length===0||d(g).blocked]),t(`submit`,y,v),S(C,()=>d(s),e=>O(s,e)),S(D,()=>d(c),e=>O(c,e)),o(n,y),h()}var De=n(`<span aria-hidden="true">⬆</span> `,1),Oe=n(`<button type="button" class="h-8 rounded-md px-2 text-xs font-medium text-slate-500 hover:bg-slate-50 hover:text-slate-900">Clear</button>`),ke=n(`<div class="rounded-lg border border-dashed border-hairline bg-white p-8 text-center text-sm text-slate-500">Loading projects...</div>`),Ae=n(`<div class="rounded-lg border border-red-200 bg-red-50 p-4 text-sm text-red-700"> </div>`),je=n(`<div class="mx-auto max-w-md space-y-4 py-4"><div class="space-y-1.5"><p class="text-base font-semibold text-slate-900">Nothing modeled yet</p> <p class="text-sm leading-6 text-slate-600">A <strong>project</strong> holds the features of one product. A <strong>feature</strong> describes one slice of what that product does
|
|
2
|
+
(its screens, actions, state, and rules) precisely enough to simulate.</p></div> <div class="flex flex-wrap items-center justify-center gap-2"><button type="button" class="rounded-md bg-slate-900 px-4 py-2 text-sm font-medium text-white hover:bg-slate-800">Create first project</button> <button type="button" class="rounded-md border border-brand-300 bg-brand-50 px-4 py-2 text-sm font-medium text-brand-800 hover:bg-brand-100">Take the 3-minute tour</button> <button type="button" class="rounded-md border border-slate-300 bg-white px-4 py-2 text-sm font-medium text-slate-700 hover:bg-slate-50 disabled:cursor-wait disabled:opacity-70"> </button></div></div>`),Me=n(`<div class="rounded-lg border border-dashed border-hairline bg-white p-8 text-center text-sm text-slate-500"><!></div>`),Ne=n(`<li><!></li>`),Pe=n(`<ul class="grid grid-cols-1 gap-4 sm:grid-cols-2 lg:grid-cols-3"></ul>`),Fe=n(`<div class="fixed inset-0 z-40 flex items-start justify-center bg-slate-950/30 px-4 py-24 backdrop-blur-sm" role="presentation"><div class="w-full max-w-3xl rounded-xl border border-hairline bg-white shadow-xl" role="dialog" aria-modal="true" aria-labelledby="new-project-title"><header class="flex items-start justify-between gap-4 border-b border-hairline px-5 py-4"><div><h2 id="new-project-title" class="text-base font-semibold text-slate-950">New project</h2> <p class="mt-1 text-sm text-slate-500">Create a project for related behavior models.</p></div> <button type="button" class="rounded-md px-2 py-1 text-sm text-slate-500 hover:bg-slate-100 hover:text-slate-900" aria-label="Close">x</button></header> <div class="p-5"><!></div></div></div>`),Ie=n(`<div class="mx-auto max-w-7xl px-4 py-8 sm:px-6"><header class="mb-6 border-b border-slate-200 pb-6"><div class="flex items-center justify-between gap-3"><p class="text-xs font-semibold uppercase tracking-wide text-brand-700">Home</p> <!> <input type="file" accept=".unspa,application/octet-stream,application/json" class="hidden"/></div> <div class="mt-2 max-w-3xl"><h1 class="text-4xl font-semibold tracking-tight text-slate-950">Projects</h1> <p class="mt-2 max-w-2xl text-sm leading-6 text-slate-600">One project per product or codebase. Each groups the features that describe what
|
|
3
|
+
that product does. Open one to model, simulate, and verify its behavior.</p></div> <div class="mt-6 flex flex-col gap-3 rounded-xl border border-slate-200 bg-white p-3 shadow-sm shadow-slate-950/5 lg:flex-row lg:items-center lg:justify-between"><div class="flex min-w-0 items-center rounded-lg border border-hairline bg-white p-1 lg:flex-1"><label for="project-search" class="sr-only">Search projects</label> <input id="project-search" type="search" placeholder="Search projects..." class="h-9 w-full min-w-0 rounded-md border-0 bg-transparent px-3 text-sm outline-none placeholder:text-slate-400"/> <!></div> <div class="flex flex-col gap-2 sm:flex-row sm:items-center"><!> <label class="flex h-10 items-center gap-2 rounded-lg border border-hairline bg-white px-3 text-sm text-slate-600"><span class="text-xs font-medium">Sort</span> <select class="bg-transparent text-sm font-medium text-slate-800 outline-none"><option>Updated</option><option>Name</option><option>Features</option></select></label> <button type="button" data-tour="new-project-button" class="inline-flex h-10 items-center justify-center gap-2 rounded-md bg-slate-900 px-4 text-sm font-medium text-white hover:bg-slate-800"><span class="text-base leading-none" aria-hidden="true">+</span> New project</button></div></div></header> <section aria-labelledby="projects-list-title"><div class="mb-3 flex flex-col gap-1 sm:flex-row sm:items-end sm:justify-between"><div><h2 id="projects-list-title" class="text-base font-semibold text-slate-950">Your projects</h2> <p class="text-sm text-slate-500">Open a project to inspect the features it groups.</p></div> <p class="text-xs text-slate-500"> </p></div> <!></section></div> <!> <!>`,1);function G(n,l){_(l,!0);let u=null,p=b(`all`),m=b(!1),v=b(!1),S=b(`updated`),B=b(!1);async function ye(){if(!d(B)){O(B,!0);try{await ce()}finally{O(B,!1)}}}D(()=>{z.refresh(),ue.refresh(),u=ae(e=>{(e.kind===`project`||e.kind===`feature`)&&z.refreshSilent()})}),w(()=>{u?.(),u=null});function H(e){let t=[...e.tags??[]];return e.customTag?.trim()&&t.push({type:e.customTagType?.trim()||`Tag`,value:e.customTag.trim()}),t}async function Se(e,t){await P(`/projects/${await z.create(e,t)}`)}let U=b(!1),W=b(null);function Ce(){d(U)||d(W)?.click()}async function Te(e){let t=e.target,n=t.files?.[0];if(t.value=``,n){O(U,!0);try{let e=await fe(n),t=await F({title:`Import .unspa file`,message:`Enter the passphrase used when "${n.name}" was exported. A wrong passphrase will not corrupt anything - the file just stays encrypted.`,inputLabel:`Passphrase`,password:!0,confirmLabel:`Import`,tone:`info`});if(t===null)return;let r=await ge(e,t);await z.refreshSilent(),await L({title:`Import complete`,message:`Restored project with ${r.featuresImported} feature(s) and ${r.statusesImported} implementation-status sidecar(s).`,tone:`success`}),await P(`/projects/${r.projectId}`)}catch(e){await L({title:`Import failed`,message:e instanceof de?`That file is not a valid .unspa bundle: ${e.message}`:e instanceof _e?e.message:`Import failed: ${e.message}`,tone:`danger`})}finally{O(U,!1)}}}let G=b(!1);async function Le(e,t){if(d(G))return;let n=await F({title:`Export project`,message:`Encrypt "${t}" with a passphrase and download as a .unspa file. You'll need the same passphrase to import it back. Minimum 8 characters.`,inputLabel:`Passphrase`,placeholder:`At least 8 characters`,password:!0,confirmLabel:`Export`,tone:`info`,validate:e=>e.length<8?`Passphrase must be at least 8 characters.`:null});if(n!==null){O(G,!0);try{let{envelope:t,projectName:r}=await me(e,n);ve(t,r)}catch(e){await L({title:`Export failed`,message:e instanceof he?e.message:`Export failed: ${e.message}`,tone:`danger`})}finally{O(G,!1)}}}async function Re(e){z.stagePendingDelete(e);let t=z.summaries.find(t=>String(t.id)===String(e))?.name??`this project`,n=await R(),r=((await n.useCases.getProject(e))?.featureIds??[]).map(String),i=[];if(r.length===0){if(!await ne({title:`Delete "${t}"?`,message:`This project has no linked features. Removing it cannot be undone.`,confirmLabel:`Delete project`,tone:`danger`})){z.clearPendingDelete();return}}else{let e=await Promise.all(r.map(async e=>({id:e,label:(await n.useCases.getFeatureCard(e))?.name??e,defaultChecked:!0}))),a=await ee({title:`Delete "${t}"?`,message:`This project links to ${r.length} feature${r.length===1?``:`s`}. Tick the ones you want to delete in the same batch. Anything left unchecked stays available as an unassigned feature.`,items:e,confirmLabel:`Delete project + selected`,cancelLabel:`Cancel`,tone:`danger`});if(!a.confirmed){z.clearPendingDelete();return}i=a.selectedIds}for(let e of i)await n.useCases.deleteFeature(e);await z.remove(e),i.length>0&&await le.refreshSilent()}function ze(e){e.key===`Escape`&&O(m,!1)}let K=T(()=>(z.search.trim().length===0?[...z.summaries]:z.summaries.filter(e=>{let t=z.search.toLowerCase();return e.name.toLowerCase().includes(t)||(e.description??``).toLowerCase().includes(t)})).filter(e=>Be(e,d(p))).sort((e,t)=>d(S)===`name`?e.name.localeCompare(t.name):d(S)===`count`?t.featureCount-e.featureCount:new Date(t.updatedAt).getTime()-new Date(e.updatedAt).getTime()));function Be(e,t){let n=H(e);if(t===`all`)return!0;if(t===`untagged`)return n.length===0;let r=I(t);return n.some(e=>I(e)===r)}let q=T(()=>{let e=[];for(let t of z.summaries)for(let n of H(t))e.push(n);return e});r(()=>{ue.registerTypes(d(q).map(e=>e.type))});let Ve=T(()=>[...new Set(d(q).map(e=>te(e.type)))].sort((e,t)=>e.localeCompare(t)));function He(e){return z.summaries.filter(t=>Be(t,e)).length}async function Ue(e,t,n){let r=await R(),i=await r.useCases.getProject(e);i&&(await r.useCases.saveProject({...i,tags:ie(H(i),{type:t,value:n})}),await z.refreshSilent())}async function We(e,t,n){let r=await R(),i=await r.useCases.getProject(e);if(!i)return;let a=re(H(i),{type:t,value:n});await r.useCases.saveProject({...i,tags:a,customTagType:void 0,customTag:void 0}),d(p)!==`all`&&d(p)!==`untagged`&&I(d(p))===I({type:t,value:n})&&O(p,`all`),await z.refreshSilent()}var Ge=Ie();t(`keydown`,c,ze);var J=g(Ge),Y=e(J),X=e(Y),Ke=A(e(X),2);pe(Ke,{align:`right`,placement:`down`,label:`Page actions`,children:(e,t=M)=>{V(e,{get disabled(){return d(U)},onclick:()=>{t()(),Ce()},children:(e,t)=>{var n=De(),r=A(g(n));E(()=>a(r,` ${d(U)?`Importing...`:`Import .unspa`}`)),o(e,n)},$$slots:{default:!0}})},$$slots:{default:!0}});var qe=A(Ke,2);k(qe,e=>O(W,e),()=>d(W)),f(X);var Je=A(X,4),Z=e(Je),Q=A(e(Z),2);j(Q);var Ye=A(Q,2),Xe=e=>{var t=Oe();N(`click`,t,()=>z.setSearch(``)),o(e,t)},Ze=T(()=>z.search.trim().length>0);x(Ye,e=>{d(Ze)&&e(Xe)}),f(Z);var Qe=A(Z,2),$e=e(Qe);be($e,{get tags(){return d(q)},get value(){return d(p)},onChange:e=>O(p,e,!0),onManage:()=>O(v,!0),countLabel:He});var $=A($e,2),et=A(e($),2),tt=e(et);tt.value=tt.__value=`updated`;var nt=A(tt);nt.value=nt.__value=`name`;var rt=A(nt);rt.value=rt.__value=`count`,f(et),f($);var it=A($,2);f(Qe),f(Je),f(Y);var at=A(Y,2),ot=e(at),st=A(e(ot),2),ct=e(st);f(st),f(ot);var lt=A(ot,2),ut=e=>{o(e,ke())},dt=t=>{var n=Ae(),r=e(n,!0);f(n),E(()=>a(r,z.error)),o(t,n)},ft=t=>{var n=Me(),r=e(n),s=t=>{var n=je(),r=A(e(n),2),i=e(r),s=A(i,2),c=A(s,2),l=e(c,!0);f(c),f(r),f(n),E(()=>{c.disabled=d(B),a(l,d(B)?`Loading...`:`Explore the sample project`)}),N(`click`,i,()=>O(m,!0)),N(`click`,s,()=>oe.start(se)),N(`click`,c,ye),o(t,n)},c=e=>{o(e,i(`No projects match your search.`))};x(r,e=>{z.summaries.length===0?e(s):e(c,-1)}),f(n),o(t,n)},pt=t=>{var n=Pe();s(n,21,()=>d(K),e=>e.id,(t,n)=>{var r=Ne();we(e(r),{get summary(){return d(n)},get tagTypeOptions(){return d(Ve)},onAddTag:(e,t)=>Ue(d(n).id,e,t),onRemoveTag:(e,t)=>We(d(n).id,e,t),onExport:()=>Le(d(n).id,d(n).name),onDelete:()=>Re(d(n).id)}),f(r),o(t,r)}),f(n),o(t,n)};x(lt,e=>{z.loading?e(ut):z.error?e(dt,1):d(K).length===0?e(ft,2):e(pt,-1)}),f(at),f(J);var mt=A(J,2),ht=t=>{var n=Fe(),r=e(n),i=e(r),a=A(e(i),2);f(i);var s=A(i,2);Ee(e(s),{onSubmit:Se}),f(s),f(r),f(n),N(`click`,n,e=>{e.currentTarget===e.target&&O(m,!1)}),N(`click`,a,()=>O(m,!1)),o(t,n)};x(mt,e=>{d(m)&&e(ht)}),xe(A(mt,2),{get open(){return d(v)},get tags(){return d(q)},onClose:()=>O(v,!1),onRenamed:()=>z.refreshSilent()}),E(()=>{C(Q,z.search),a(ct,`${d(K).length??``} shown`)}),N(`change`,qe,Te),N(`input`,Q,e=>z.setSearch(e.target.value)),y(et,()=>d(S),e=>O(S,e)),N(`click`,it,()=>O(m,!0)),o(n,Ge),h()}l([`change`,`input`,`click`]);export{G as t};
|
|
Binary file
|
|
Binary file
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{bt as e,ft as t,pt as n}from"./BLErSy65.js";var r=(t,n)=>{let r=n;for(let n of t.stateOverrides)r=e(r,n.path,n.value);return r},i=(e,t,n)=>{let r={},i=new Set(t.parameters.map(e=>e.name));for(let t of e.parameterOverrides)i.has(t.parameterName)&&(r[t.parameterName]=t.value);return{...r,...n}},a=(t,n)=>{let r=n;for(let n of t.stateOverrides)r=e(r,n.path,n.value);return r},o=(e,t,n)=>{let r={},i=new Set(t.parameters.map(e=>e.name));for(let t of e.parameterOverrides)i.has(t.parameterName)&&(r[t.parameterName]=t.value);return{...r,...n}},s=e=>({path:e,stateDefinitions:0,parameterBindings:0,parameterResources:0,actionRequiredStates:0,ruleConditions:0,setStateEffects:0,invariantConditions:0,personaStateOverrides:0,otherDataFields:0}),c=(e,t)=>e===t,l=(e,r)=>{if(!t(e))return 0;let i=e;switch(i.kind){case`literal`:return 0;case`param`:return 0;case`const`:return 0;case`state`:return+(String(i.path)===r);case`neg`:case`not`:case`sum`:case`count`:case`sum_pluck`:return l(i.operand,r);case`count_where`:return l(i.operand,r)+l(i.equals,r);case`switch`:{let e=0;for(let t of i.cases){for(let i of n(t.when))c(String(i.left),r)&&(e+=1),e+=l(i.right,r);e+=l(t.then,r)}return e+=l(i.default,r),e}case`add`:case`sub`:case`mul`:case`div`:case`mod`:case`min`:case`max`:return l(i.left,r)+l(i.right,r)}},u=(e,t)=>{switch(e.type){case`set_state`:return+!!c(String(e.path),t)+l(e.value,t);case`append_to_list`:return+!!c(String(e.path),t)+l(e.item,t);case`remove_from_list`:return+!!c(String(e.path),t)+(e.where?l(e.where.equals,t):0)+l(e.value,t);case`update_list_item`:return+!!c(String(e.path),t)+l(e.where.equals,t)+l(e.value,t);case`advance_time`:return l(e.by,t);case`invoke_operation`:return(e.resultPath!==void 0&&c(String(e.resultPath),t)?1:0)+l(e.resultValue,t);default:return 0}},d=(e,t)=>{let r=0;for(let i of n(e))c(String(i.left),t)&&(r+=1),r+=l(i.right,t);return r},f=(e,t)=>{let n=String(t),r={...s(t)};for(let t of e.surfaces){for(let e of t.stateDefinitions)c(String(e.path),n)&&(r.stateDefinitions+=1);for(let e of t.actions){for(let t of e.requiredStates)c(String(t),n)&&(r.actionRequiredStates+=1);for(let t of e.parameters)c(t.bindToStatePath?String(t.bindToStatePath):void 0,n)&&(r.parameterBindings+=1);for(let t of e.rules)r.ruleConditions+=d(t.condition,n),r.setStateEffects+=u(t.effect,n);for(let t of e.effects)r.setStateEffects+=u(t,n);for(let t of e.onBlockedEffects??[])r.setStateEffects+=u(t,n);for(let t of e.invariants)r.invariantConditions+=d(t.condition,n)}for(let e of t.rules)r.ruleConditions+=d(e.condition,n),r.setStateEffects+=u(e.effect,n);for(let e of t.invariants)r.invariantConditions+=d(e.condition,n)}for(let t of e.personas)for(let e of t.stateOverrides)c(String(e.path),n)&&(r.personaStateOverrides+=1);for(let t of e.entities)for(let e of t.fields)c(e.path?String(e.path):void 0,n)&&(r.otherDataFields+=1);return r},p=e=>e.stateDefinitions+e.parameterBindings+e.parameterResources+e.actionRequiredStates+e.ruleConditions+e.setStateEffects+e.invariantConditions+e.personaStateOverrides+e.otherDataFields,m=e=>{let t=[],n=(e,n)=>{e>0&&t.push(`${e} ${n}`)};return n(e.stateDefinitions,e.stateDefinitions===1?`state definition`:`state definitions`),n(e.ruleConditions,e.ruleConditions===1?`rule condition`:`rule conditions`),n(e.setStateEffects,e.setStateEffects===1?`set_state effect`:`set_state effects`),n(e.parameterBindings,e.parameterBindings===1?`parameter binding`:`parameter bindings`),n(e.actionRequiredStates,e.actionRequiredStates===1?`action requirement`:`action requirements`),n(e.invariantConditions,e.invariantConditions===1?`invariant`:`invariants`),n(e.personaStateOverrides,e.personaStateOverrides===1?`persona override`:`persona overrides`),n(e.otherDataFields,e.otherDataFields===1?`data field`:`data fields`),t.join(`, `)};export{a,o as i,m as n,i as o,p as r,r as s,f as t};
|
|
Binary file
|
|
Binary file
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["./BpBsb117.js","./kNaey6uv.js","./CEVfZihO.js","./kvTyu7mM.js","./D50Xf4Qj.js","./DsF7k-Jl.js","./D6Ojqcvl.js","./CXBo-tYc.js","./B0OyqRRq.js","./C3BhbZfF.js","./DCCK18Uo2.js","./BXBsImMQ.js","./BWPyau1x.js","./BifhSqXX.js","./CWiCMZki2.js","./B18t-Wuu2.js","./DAAR0bvG2.js","./ZG4RtGoN2.js","./CSKSodPl2.js","./DMTA6AXo2.js","./iaZXMvSz.js","./D8TtvFq5.js"])))=>i.map(i=>d[i]);
|
|
2
|
+
import{$ as e,A as t,B as n,D as r,F as i,I as a,J as o,L as s,M as c,N as l,O as u,P as d,Q as f,R as p,V as m,_ as h,_t as g,a as _,bt as v,d as y,dt as b,et as x,ft as S,g as C,gt as w,it as T,j as E,k as D,l as O,n as k,nt as A,ot as j,q as M,r as N,rt as P,s as F,tt as I,u as L,v as ee,y as R,yt as z,z as B}from"./D50Xf4Qj.js";import{n as V}from"./BgjLttfH.js";import{t as H}from"./kNaey6uv.js";import"./xihTtKlq.js";import{C as U,ht as te,pt as ne,w as re}from"./BLErSy65.js";import"./DiXkacF8.js";var W=[`contains`,`reads`,`writes`,`emits`,`transitions`,`asserts`,`uses`,`handles`],ie=[`feature`,`surface`,`action`,`state`,`event`,`parameter`,`rule`,`effect`,`invariant`,`scenario`,`persona`,`resource`,`entity`,`valueSet`],ae=e=>{switch(e.type){case`set_state`:return`set ${e.path}`;case`show_message`:return e.tone?`${e.tone} message`:`message`;case`emit_event`:return`emit ${e.event}`;case`block_action`:return`block`;case`allow_action`:return`allow`;case`transition_surface`:return`transition`;case`append_to_list`:return`append ${e.path}`;case`remove_from_list`:return`remove ${e.path}`;case`update_list_item`:return`update ${e.path}`;case`advance_time`:return`advance time`;case`invoke_operation`:return`invoke ${e.operation}`}},G=e=>{let t=new Set;for(let n of ne(e))te(n.left)||t.add(String(n.left));return[...t]},oe=(e,t)=>{let n=new Map,r=new Map,i=e=>{n.has(e.id)||n.set(e.id,e)},a=e=>{if(!n.has(e.from)||!n.has(e.to))return;let t=`${e.from}->${e.to}:${e.kind}:${e.label??``}`;r.has(t)||r.set(t,{...e,id:t})},o=(e,t,n)=>{i({id:`feature:${e.id}:state:${t}`,type:`state`,label:t,detail:n,layer:3})},s=(e,t)=>`feature:${e.id}:surface:${t}`,c=(e,t)=>`feature:${e.id}:action:${t}`,l=(e,t)=>`feature:${e.id}:state:${t}`,u=(e,t)=>`feature:${e.id}:valueSet:${t}`,d=(e,t,n,r)=>{let c=`feature:${e.id}:effect:${n.id}`;i({id:c,type:`effect`,label:ae(n),detail:n.description??n.type,layer:5}),a({from:t,to:c,kind:r});for(let t of U(n))o(e,String(t)),a({from:c,to:l(e,t),kind:`writes`});if(n.type===`emit_event`){let e=`event:${n.event}`;i({id:e,type:`event`,label:String(n.event),layer:3}),a({from:c,to:e,kind:`emits`})}else n.type===`transition_surface`&&a({from:c,to:s(e,n.target),kind:`transitions`})},f=t?`project:${t.id}`:null;t&&f&&i({id:f,type:`feature`,label:t.name,detail:t.description??`Project`,layer:0});for(let n of e){let e=`feature:${n.id}`;i({id:e,type:`feature`,label:n.name,detail:n.description,layer:+!!t,href:`/features/${n.id}`}),f&&a({from:f,to:e,kind:`contains`});for(let r of n.personas){let o=`feature:${n.id}:persona:${r.id}`;i({id:o,type:`persona`,label:r.name,detail:r.description,layer:t?2:1}),a({from:e,to:o,kind:`contains`})}for(let r of n.resources){let n=`resource:${r.id}`;i({id:n,type:`resource`,label:r.name,detail:r.description??r.kind,layer:t?2:1}),a({from:e,to:n,kind:`contains`})}for(let r of n.entities){let n=`entity:${r.id}`;i({id:n,type:`entity`,label:r.namespace,detail:r.description,layer:t?2:1}),a({from:e,to:n,kind:`contains`}),r.resourceId&&a({from:n,to:`resource:${r.resourceId}`,kind:`uses`})}for(let r of n.valueSets??[]){let o=u(n,r.id);i({id:o,type:`valueSet`,label:r.name,detail:`${r.values.length} values`,layer:t?2:1}),a({from:e,to:o,kind:`contains`})}for(let t of n.events??[]){let n=`event:${t.name}`;i({id:n,type:`event`,label:String(t.name),detail:t.description,layer:3}),a({from:e,to:n,kind:`contains`})}for(let t of n.featureInvariants??[]){let r=`feature:${n.id}:invariant:${t.id}`;i({id:r,type:`invariant`,label:t.name,detail:t.description??t.message,layer:6}),a({from:e,to:r,kind:`contains`});for(let e of G(t.condition))o(n,e),a({from:r,to:l(n,e),kind:`reads`})}for(let t of n.reachabilityGoals??[]){let r=`feature:${n.id}:goal:${t.id}`;i({id:r,type:`goal`,label:t.name,detail:t.description??t.message??t.kind,layer:6}),a({from:e,to:r,kind:`contains`});for(let e of G(t.condition))o(n,e),a({from:r,to:l(n,e),kind:`reads`})}for(let r of n.surfaces){let f=s(n,r.id);i({id:f,type:`surface`,label:r.name,detail:r.description??r.type,layer:t?2:1,href:`/features/${n.id}?surface=${r.id}`}),a({from:e,to:f,kind:`contains`}),r.parentSurfaceId&&a({from:s(n,r.parentSurfaceId),to:f,kind:`contains`});for(let e of r.stateDefinitions)o(n,String(e.path),e.description??e.type),a({from:f,to:l(n,e.path),kind:`contains`}),e.valueSetId&&a({from:l(n,e.path),to:u(n,e.valueSetId),kind:`uses`});for(let e of r.transitions){let t=`feature:${n.id}:transition:${e.id}`;i({id:t,type:`effect`,label:e.label??`transition`,detail:e.description,layer:6}),a({from:f,to:t,kind:`contains`}),a({from:t,to:s(n,e.target),kind:`transitions`})}for(let e of r.rules){let t=`feature:${n.id}:rule:${e.id}`;i({id:t,type:`rule`,label:e.category,detail:e.description,layer:6}),a({from:f,to:t,kind:`contains`});for(let r of G(e.condition))o(n,r),a({from:t,to:l(n,r),kind:`reads`});d(n,t,e.effect,`writes`)}for(let e of r.invariants){let t=`feature:${n.id}:invariant:${e.id}`;i({id:t,type:`invariant`,label:e.name,detail:e.description??e.message,layer:6}),a({from:f,to:t,kind:`contains`});for(let r of G(e.condition))o(n,r),a({from:t,to:l(n,r),kind:`reads`})}for(let e of r.actions){let p=c(n,e.id);if(i({id:p,type:`action`,label:e.name,detail:e.intent,layer:t?3:2,href:`/features/${n.id}?surface=${r.id}&panel=actions`}),a({from:f,to:p,kind:`contains`}),e.triggeredByEvent){let t=`event:${e.triggeredByEvent}`;i({id:t,type:`event`,label:String(e.triggeredByEvent),layer:3}),a({from:t,to:p,kind:`handles`})}for(let t of e.requiredStates)o(n,String(t)),a({from:l(n,t),to:p,kind:`reads`});for(let r of e.parameters){let e=`feature:${n.id}:parameter:${r.id}`;i({id:e,type:`parameter`,label:r.name,detail:r.description??r.type,layer:t?5:4}),a({from:p,to:e,kind:`contains`}),r.bindToStatePath&&(o(n,String(r.bindToStatePath)),a({from:e,to:l(n,r.bindToStatePath),kind:`writes`})),r.resourceId&&a({from:e,to:`resource:${r.resourceId}`,kind:`uses`}),r.valueSetId&&a({from:e,to:u(n,r.valueSetId),kind:`uses`})}for(let t of e.rules){let e=`feature:${n.id}:rule:${t.id}`;i({id:e,type:`rule`,label:t.category,detail:t.description,layer:6}),a({from:p,to:e,kind:`contains`});for(let r of G(t.condition))o(n,r),a({from:e,to:l(n,r),kind:`reads`});d(n,e,t.effect,`writes`)}for(let t of e.invariants){let e=`feature:${n.id}:invariant:${t.id}`;i({id:e,type:`invariant`,label:t.name,detail:t.description??t.message,layer:6}),a({from:p,to:e,kind:`contains`});for(let r of G(t.condition))o(n,r),a({from:e,to:l(n,r),kind:`reads`})}for(let t of e.effects)d(n,p,t,`contains`);for(let t of e.onBlockedEffects??[])d(n,p,t,`contains`);for(let t of e.emittedEvents){let e=`event:${t}`;i({id:e,type:`event`,label:String(t),layer:3}),a({from:p,to:e,kind:`emits`})}for(let t of e.transitions){let e=`feature:${n.id}:transition:${t.id}`;i({id:e,type:`effect`,label:t.label??`transition`,detail:t.description,layer:6}),a({from:p,to:e,kind:`contains`}),a({from:e,to:s(n,t.target),kind:`transitions`})}for(let t of e.scenarios??[]){let e=`feature:${n.id}:scenario:${t.id}`;i({id:e,type:`scenario`,label:t.name,detail:t.description??t.expectedStatus,layer:6}),a({from:p,to:e,kind:`asserts`}),t.personaId&&a({from:e,to:`feature:${n.id}:persona:${t.personaId}`,kind:`uses`});for(let r of t.stateOverrides)o(n,String(r.path)),a({from:e,to:l(n,r.path),kind:`writes`});for(let r of t.expectedAssertions??[])o(n,String(r.path)),a({from:e,to:l(n,r.path),kind:`asserts`});t.expectedTransition&&a({from:e,to:s(n,t.expectedTransition),kind:`transitions`})}}}}return{nodes:[...n.values()],edges:[...r.values()]}},se=e=>{let t=new Map;for(let n of e.nodes)t.set(n.id,0);for(let n of e.edges)t.set(n.from,(t.get(n.from)??0)+1),t.set(n.to,(t.get(n.to)??0)+1);let n=e.nodes.map(e=>({...e,degree:t.get(e.id)??0}));return{nodes:n,edges:e.edges,nodeById:new Map(n.map(e=>[e.id,e]))}},ce=(e,t)=>{let n=t.search.trim().toLowerCase(),r=new Set;if(n){for(let t of e.nodes)`${t.label} ${t.type} ${t.detail??``}`.toLowerCase().includes(n)&&r.add(t.id);for(let t of e.edges)(r.has(t.from)||r.has(t.to))&&(r.add(t.from),r.add(t.to))}let i=e=>!n||r.has(e),a=e.edges.filter(e=>t.enabledKinds[e.kind]&&i(e.from)&&i(e.to)),o=new Set;for(let e of a)o.add(e.from),o.add(e.to);let s=e.nodes.filter(e=>i(e.id)&&(!n||o.has(e.id)||r.has(e.id)));return{nodes:s,edges:a,nodeById:new Map(s.map(e=>[e.id,e]))}},le={feature:{label:`Feature`,fill:`#0f172a`,stroke:`#020617`},surface:{label:`Surface`,fill:`#0e7490`,stroke:`#155e75`},action:{label:`Action`,fill:`#2563eb`,stroke:`#1d4ed8`},state:{label:`State`,fill:`#7c3aed`,stroke:`#6d28d9`},event:{label:`Event`,fill:`#db2777`,stroke:`#be185d`},parameter:{label:`Parameter`,fill:`#0891b2`,stroke:`#0e7490`},rule:{label:`Rule`,fill:`#ea580c`,stroke:`#c2410c`},effect:{label:`Effect`,fill:`#16a34a`,stroke:`#15803d`},invariant:{label:`Invariant`,fill:`#ca8a04`,stroke:`#a16207`},goal:{label:`Liveness goal`,fill:`#65a30d`,stroke:`#4d7c0f`},scenario:{label:`Scenario`,fill:`#475569`,stroke:`#334155`},persona:{label:`Persona`,fill:`#0f766e`,stroke:`#115e59`},resource:{label:`Resource`,fill:`#4f46e5`,stroke:`#4338ca`},entity:{label:`Entity`,fill:`#9333ea`,stroke:`#7e22ce`},valueSet:{label:`Value set`,fill:`#64748b`,stroke:`#475569`}},K={contains:{label:`Contains`,color:`#94a3b8`},reads:{label:`Reads`,color:`#7c3aed`},writes:{label:`Writes`,color:`#16a34a`},emits:{label:`Emits`,color:`#db2777`},transitions:{label:`Transitions`,color:`#0891b2`},asserts:{label:`Asserts`,color:`#ca8a04`},uses:{label:`Uses`,color:`#475569`},handles:{label:`Handles`,color:`#2563eb`}},ue=new Set([`writes`,`emits`,`transitions`]),q=.14,de=.035,fe=e=>Math.max(13,Math.min(38,13+Math.sqrt(e)*6)),J=(e,t)=>{let n=e.replace(`#`,``);return n.length===6?`rgba(${Number.parseInt(n.slice(0,2),16)},${Number.parseInt(n.slice(2,4),16)},${Number.parseInt(n.slice(4,6),16)},${t})`:e},pe=e=>{let t=e.replace(`#`,``);if(t.length!==6)return`#000000`;let n=e=>{let t=Number.parseInt(e,16)/255;return t<=.03928?t/12.92:((t+.055)/1.055)**2.4},r=n(t.slice(0,2)),i=n(t.slice(2,4)),a=n(t.slice(4,6)),o=.2126*r+.7152*i+.0722*a;return(o+.05)/.05>=1.05/(o+.05)?`#000000`:`#ffffff`},Y=e=>e>700?220:e>300?280:180,X=e=>e>700?2600:e>300?3200:2400,me=class{runtime;container;callbacks;network=null;nodes=null;edges=null;signature=``;currentInput=null;highlightFrame=null;highlighted={nodes:new Set,edges:new Set};selectionEventsSuppressed=!1;stabilizeTimeout=null;settle=()=>this.freezePhysics();constructor(e,t,n={}){this.runtime=e,this.container=t,this.callbacks=n}render(e){this.currentInput=e;let t=this.signatureFor(e);if(!this.network){this.createNetwork(e,t);return}if(t===this.signature){this.select(e.selectedId,e.selectedEdgeId,!1);return}this.signature=t,this.clearHighlight(),this.nodes?.clear(),this.edges?.clear(),this.nodes?.add(this.toNodes(e)),this.edges?.add(this.toEdges(e)),this.startStabilization(e.graph.nodes.length),this.select(e.selectedId,e.selectedEdgeId,!1)}relayout(e){this.network&&(this.clearHighlight(),this.startStabilization(e))}fit(){this.network?.fit({animation:{duration:220,easingFunction:`easeInOutQuad`}})}zoomBy(e){if(!this.network)return;let t=Math.max(.04,Math.min(5,this.network.getScale()*e));this.network.moveTo({scale:t,animation:{duration:120,easingFunction:`easeInOutQuad`}})}focus(e){this.network?.focus(e,{scale:1.08,animation:{duration:260,easingFunction:`easeInOutQuad`}})}select(e,t=null,n=!0){if(this.network){this.selectionEventsSuppressed=!0;try{this.network.setSelection({nodes:e?[e]:[],edges:!e&&t?[t]:[]},{highlightEdges:!1})}finally{this.selectionEventsSuppressed=!1}if(e){this.highlightNodeNeighborhood(e,n);return}if(t){this.highlightEdgeNeighborhood(t,n);return}this.clearHighlight()}}destroy(){this.clearPendingWork(),this.network?.destroy(),this.network=null,this.nodes=null,this.edges=null}createNetwork(e,t){let n=new this.runtime.DataSet(this.toNodes(e)),r=new this.runtime.DataSet(this.toEdges(e));this.nodes=n,this.edges=r;let i=new this.runtime.Network(this.container,{nodes:n,edges:r},this.options(e.graph.nodes.length));this.network=i,this.signature=t,i.on(`stabilizationProgress`,e=>{if(!e?.total)return;let t=Math.min(100,Math.round(e.iterations/e.total*100));this.callbacks.onStabilizationProgress?.(t),t>=100&&setTimeout(()=>this.freezePhysics(),0)}),i.on(`selectNode`,e=>{if(this.selectionEventsSuppressed)return;let t=e?.nodes?.find(e=>typeof e==`string`)??null;this.callbacks.onSelectedNodeChange?.(t),this.callbacks.onSelectedEdgeChange?.(null),t&&this.highlightNodeNeighborhood(t,!0)}),i.on(`selectEdge`,e=>{if(this.selectionEventsSuppressed)return;let t=e?.edges?.find(e=>typeof e==`string`)??null;this.callbacks.onSelectedNodeChange?.(null),this.callbacks.onSelectedEdgeChange?.(t),t&&this.highlightEdgeNeighborhood(t,!0)}),i.on(`doubleClick`,e=>{let t=e?.nodes?.find(e=>typeof e==`string`)??null;t&&this.callbacks.onNodeActivate?.(t)}),i.on(`deselectNode`,()=>{this.selectionEventsSuppressed||this.network?.getSelection().edges.length||(this.callbacks.onSelectedNodeChange?.(null),this.clearHighlight())}),i.on(`deselectEdge`,()=>{this.selectionEventsSuppressed||this.network?.getSelection().nodes.length||(this.callbacks.onSelectedEdgeChange?.(null),this.clearHighlight())}),this.startStabilization(e.graph.nodes.length)}startStabilization(e){this.network&&(this.clearStabilizationTimeout(),this.callbacks.onSettledChange?.(!1),this.callbacks.onStabilizationProgress?.(0),this.network.off(`stabilized`,this.settle),this.network.once(`stabilized`,this.settle),this.network.setOptions(this.options(e)),this.network.stabilize(Y(e)),this.stabilizeTimeout=setTimeout(()=>this.freezePhysics(),X(e)))}freezePhysics(){this.network&&(this.clearStabilizationTimeout(),this.network.off(`stabilized`,this.settle),this.network.storePositions(),this.network.stopSimulation(),this.network.setOptions({physics:!1}),this.callbacks.onStabilizationProgress?.(100),this.callbacks.onSettledChange?.(!0))}options(e){return{autoResize:!0,interaction:{hover:!1,tooltipDelay:1e6,dragNodes:!0,dragView:!0,zoomView:!0,multiselect:!1,navigationButtons:!1,keyboard:!1,hideEdgesOnDrag:!0,hideEdgesOnZoom:!0},layout:{improvedLayout:e<350},physics:{enabled:!0,solver:`forceAtlas2Based`,stabilization:{enabled:!0,iterations:Y(e),updateInterval:40,fit:!0},forceAtlas2Based:{gravitationalConstant:e>500?-34:-48,centralGravity:.014,springLength:e>500?95:120,springConstant:.055,damping:.74,avoidOverlap:e>500?.25:.45},adaptiveTimestep:!0,minVelocity:2.2,maxVelocity:28},nodes:{chosen:!0,scaling:{min:13,max:42},shapeProperties:{borderRadius:4}},edges:{chosen:!1,selectionWidth:1}}}toNodes(e){return e.graph.nodes.map(t=>this.nodeFor(t,e,t.id===e.selectedId?`selected`:`base`))}nodeFor(e,t,n){let r=t.labelsVisible||t.graph.nodes.length<90,i=t.nodeTheme[e.type],a=n===`dimmed`,o=n===`selected`,s=n===`highlighted`||o,c=!a&&(r||e.degree>5||e.type===`feature`||s),l=e.type!==`feature`&&c;return{id:e.id,label:c?e.label:``,title:`${i.label}: ${e.label}${e.detail?`\n${e.detail}`:``}`,value:Math.max(1,e.degree),size:fe(e.degree),shape:e.type===`feature`||!c?`dot`:`box`,color:{background:a?J(i.fill,q):i.fill,border:a?J(i.stroke,.2):o?`#020617`:i.stroke,highlight:{background:i.fill,border:`#020617`},hover:{background:i.fill,border:i.stroke}},borderWidth:o?5:s?3.5:1.5,font:{color:l?pe(i.fill):`#0f172a`,size:o?16:s?13:12,face:`Inter, ui-sans-serif, system-ui, sans-serif`,strokeWidth:l||a?0:4,strokeColor:`rgba(255,255,255,0.92)`},margin:l?{top:6,right:10,bottom:6,left:10}:void 0,widthConstraint:l?{maximum:220}:void 0,shadow:!a&&(s||e.type===`feature`||e.degree>8)}}toEdges(e){return e.graph.edges.map(t=>this.edgeFor(t,e.edgeTheme,`base`))}edgeFor(e,t,n){let r=ue.has(e.kind),i=n===`selected`?.96:n===`highlighted`?.82:n===`dimmed`?de:r?.42:.18;return{id:e.id,from:e.from,to:e.to,title:e.label??t[e.kind].label,color:{color:t[e.kind].color,opacity:i},width:n===`selected`?3:n===`highlighted`?2.2:r?1.5:.7,dashes:e.kind===`contains`,arrows:{to:{enabled:e.kind!==`contains`,scaleFactor:.45}},smooth:!1}}highlightNodeNeighborhood(e,t){!this.network||!this.nodes||!this.edges||(this.highlightFrame!==null&&cancelAnimationFrame(this.highlightFrame),this.highlightFrame=requestAnimationFrame(()=>{let n=this.currentInput;if(!this.network||!this.nodes||!this.edges||!n)return;let r=new Set([e,...this.network.getConnectedNodes(e).filter(e=>typeof e==`string`||typeof e==`number`)]),i=new Set(this.network.getConnectedEdges(e));this.applyFocusMask({selectedNodeId:e,highlightedNodes:r,highlightedEdges:i}),t&&this.fitNeighborhood(r),this.highlighted={nodes:r,edges:i},this.highlightFrame=null}))}highlightEdgeNeighborhood(e,t){!this.network||!this.nodes||!this.edges||(this.highlightFrame!==null&&cancelAnimationFrame(this.highlightFrame),this.highlightFrame=requestAnimationFrame(()=>{let n=this.currentInput;if(!this.network||!this.nodes||!this.edges||!n)return;let r=n.graph.edges.find(t=>t.id===e);if(!r)return;let i=new Set([r.from,r.to]),a=new Set([e]);for(let e of[r.from,r.to]){for(let t of this.network.getConnectedNodes(e))(typeof t==`string`||typeof t==`number`)&&i.add(t);for(let t of this.network.getConnectedEdges(e))a.add(t)}this.applyFocusMask({selectedEdgeId:e,highlightedNodes:i,highlightedEdges:a}),t&&this.fitNeighborhood(i),this.highlighted={nodes:i,edges:a},this.highlightFrame=null}))}applyFocusMask({selectedNodeId:e,selectedEdgeId:t,highlightedNodes:n,highlightedEdges:r}){if(!this.nodes||!this.edges)return;let i=this.currentInput;i&&(this.nodes.update(i.graph.nodes.map(t=>{let r=t.id===e?`selected`:n.has(t.id)?`highlighted`:`dimmed`;return this.nodeFor(t,i,r)})),this.edges.update(i.graph.edges.map(e=>{let n=e.id===t?`selected`:r.has(e.id)?`highlighted`:`dimmed`;return this.edgeFor(e,i.edgeTheme,n)})))}fitNeighborhood(e){!this.network||e.size===0||this.network.fit({nodes:[...e],minZoomLevel:.24,maxZoomLevel:1.18,animation:{duration:320,easingFunction:`easeInOutQuad`}})}clearHighlight(){this.clearPendingHighlight(),this.restoreHighlightBase(),this.highlighted={nodes:new Set,edges:new Set}}restoreHighlightBase(){if(!this.nodes||!this.edges)return;let e=this.currentInput;e&&(this.nodes.update(e.graph.nodes.map(t=>this.nodeFor(t,e,t.id===e.selectedId?`selected`:`base`))),this.edges.update(e.graph.edges.map(t=>this.edgeFor(t,e.edgeTheme,`base`))))}clearPendingWork(){this.clearPendingHighlight(),this.clearStabilizationTimeout()}clearPendingHighlight(){this.highlightFrame!==null&&(cancelAnimationFrame(this.highlightFrame),this.highlightFrame=null)}clearStabilizationTimeout(){this.stabilizeTimeout&&=(clearTimeout(this.stabilizeTimeout),null)}signatureFor(e){return`${e.graph.nodes.map(e=>e.id).join(`|`)}::${e.graph.edges.map(e=>e.id).join(`|`)}::labels=${e.labelsVisible}`}},he=a(`<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.2" stroke-linecap="round" stroke-linejoin="round" class="h-4 w-4 shrink-0 text-brand-600" aria-hidden="true"><path d="M20 6 9 17l-5-5"></path></svg>`),ge=i(`<button type="button" role="menuitemcheckbox" class="flex w-full items-center gap-2.5 rounded-md px-2 py-1.5 text-left text-sm transition hover:bg-slate-50"><span class="h-2.5 w-2.5 shrink-0 rounded-full"></span> <span> </span> <!></button>`),_e=a(`<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.2" stroke-linecap="round" stroke-linejoin="round" class="h-4 w-4 shrink-0 text-brand-600" aria-hidden="true"><path d="M20 6 9 17l-5-5"></path></svg>`),ve=i(`<div role="menu" class="absolute right-0 top-11 z-20 w-64 overflow-hidden rounded-xl border border-slate-200 bg-white p-2 shadow-xl shadow-slate-950/10"><div class="flex items-center justify-between px-2 pb-1 pt-1"><span class="text-[10px] font-semibold uppercase tracking-wide text-slate-400">Connections</span> <div class="flex gap-1"><button type="button" class="rounded px-1.5 py-0.5 text-[11px] font-medium text-brand-700 hover:bg-brand-50">All</button> <button type="button" class="rounded px-1.5 py-0.5 text-[11px] font-medium text-slate-500 hover:bg-slate-100">None</button></div></div> <!> <div class="my-1 h-px bg-slate-100"></div> <button type="button" role="menuitemcheckbox" class="flex w-full items-center gap-2.5 rounded-md px-2 py-1.5 text-left text-sm transition hover:bg-slate-50"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round" class="h-4 w-4 shrink-0 text-slate-400" aria-hidden="true"><path d="M20.59 13.41 13.42 20.6a2 2 0 0 1-2.83 0L3 13V4h9z"></path><path d="M7.5 7.5h.01"></path></svg> <span>Labels</span> <!></button> <div class="my-1 h-px bg-slate-100"></div> <div class="flex gap-1.5 px-1 pb-1 pt-0.5"><button type="button" class="flex-1 rounded-md border border-slate-200 px-2 py-1.5 text-xs font-medium text-slate-700 transition hover:bg-slate-50">Re-layout</button> <button type="button" class="flex-1 rounded-md border border-slate-200 px-2 py-1.5 text-xs font-medium text-slate-700 transition hover:bg-slate-50">Reset</button></div></div>`),ye=i(`<div class="pointer-events-none absolute left-3 top-3 z-10 w-56 rounded-md border border-slate-200 bg-white/90 p-3 text-xs text-slate-600 shadow-sm backdrop-blur"><div class="flex justify-between font-medium text-slate-800"><span>Stabilizing layout</span> <span> </span></div> <div class="mt-2 h-1.5 overflow-hidden rounded-full bg-slate-200"><div class="h-full rounded-full bg-brand-500 transition-all"></div></div></div>`),be=i(`<span class="inline-flex items-center gap-1 rounded-full border border-slate-200 bg-white px-2 py-1 text-xs text-slate-700"><span class="h-2 w-2 rounded-full"></span> </span>`),xe=i(`<button type="button" class="w-full rounded-md border border-slate-200 bg-white px-3 py-2 text-left hover:border-brand-300 hover:bg-brand-50"><span class="block truncate text-sm font-medium text-slate-900"> </span> <span class="text-xs text-slate-500"> </span></button>`),Se=i(`<p class="mt-2 text-sm leading-6 text-slate-600"> </p>`),Ce=i(`<a class="mt-3 inline-flex text-sm font-medium text-brand-700 hover:underline">Open in editor</a>`),we=i(`<p class="text-xs font-semibold uppercase tracking-wide text-slate-500"> </p> <h3 class="mt-1 text-base font-semibold text-slate-950"> </h3> <!> <p class="mt-2 text-xs text-slate-500"> </p> <!>`,1),Te=i(`<p class="text-xs font-semibold uppercase tracking-wide text-slate-500"> </p> <h3 class="mt-1 text-base font-semibold text-slate-950"> </h3> <p class="mt-2 text-sm leading-6 text-slate-600"> </p> <p class="mt-2 text-xs text-slate-500">Click another node or edge to move the highlighted neighborhood.</p>`,1),Ee=i(`<h3 class="text-sm font-semibold text-slate-950">Explore the Map</h3> <p class="mt-2 text-sm leading-6 text-slate-600">Click a node or edge to highlight its linked behavior. Double-click a node to jump
|
|
3
|
+
straight to it in the editor.</p>`,1),De=i(`<section class="w-full lg:flex lg:min-h-0 lg:flex-1 lg:flex-col"><div class="select-none overflow-hidden rounded-lg border border-slate-200 bg-white shadow-sm shadow-slate-950/5 lg:flex lg:min-h-0 lg:flex-1 lg:flex-col"><div class="shrink-0 border-b border-slate-200 bg-slate-950 px-4 py-4 text-white"><a class="inline-flex items-center gap-1.5 text-sm font-medium text-slate-400 transition hover:text-white"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="h-4 w-4" aria-hidden="true"><path d="M15 18l-6-6 6-6"></path></svg> </a> <div class="mt-3 min-w-0"><p class="text-xs font-semibold uppercase tracking-wide text-cyan-200">Behavior Graph</p> <h2 class="mt-1 truncate text-2xl font-semibold"> </h2> <p class="mt-1 max-w-3xl text-sm leading-6 text-slate-300"> </p></div></div> <div class="grid gap-0 lg:min-h-0 lg:flex-1 lg:grid-cols-[minmax(0,1fr)_320px]"><div class="min-w-0 border-b border-slate-200 lg:min-h-0 lg:border-b-0 lg:border-r"><div class="graph-canvas relative lg:h-full svelte-1wx4hks"><div class="h-[76vh] min-h-[32rem] w-full lg:h-full lg:min-h-0"></div> <div class="absolute right-3 top-3 z-10 flex items-start gap-2"><div class="relative"><label for="graph-search" class="sr-only">Search nodes</label> <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.9" stroke-linecap="round" stroke-linejoin="round" class="pointer-events-none absolute left-2.5 top-1/2 h-4 w-4 -translate-y-1/2 text-slate-400" aria-hidden="true"><circle cx="11" cy="11" r="7"></circle><path d="m20 20-3.5-3.5"></path></svg> <input id="graph-search" type="search" placeholder="Search nodes" class="h-9 w-44 select-text rounded-lg border border-slate-200 bg-white/95 pl-8 pr-3 text-sm shadow-sm outline-none backdrop-blur transition focus:border-brand-400 focus:ring-2 focus:ring-brand-500/15 sm:w-60"/></div> <div class="relative"><button type="button" aria-haspopup="menu"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.9" stroke-linecap="round" stroke-linejoin="round" class="h-4 w-4" aria-hidden="true"><path d="M3 5h18l-7 8v6l-4-2v-4z"></path></svg> <span class="hidden sm:inline">Filters</span> <span class="rounded-full bg-slate-100 px-1.5 text-[11px] font-semibold text-slate-600"> </span></button> <!></div></div> <div class="absolute bottom-3 right-3 z-10 flex flex-col overflow-hidden rounded-lg border border-slate-200 bg-white/95 shadow-sm backdrop-blur"><button type="button" aria-label="Zoom in" class="grid h-9 w-9 place-items-center text-lg font-semibold leading-none text-slate-700 transition hover:bg-slate-100">+</button> <div class="h-px bg-slate-200"></div> <button type="button" aria-label="Zoom out" class="grid h-9 w-9 place-items-center text-lg font-semibold leading-none text-slate-700 transition hover:bg-slate-100">−</button> <div class="h-px bg-slate-200"></div> <button type="button" aria-label="Fit graph to view" class="grid h-9 w-9 place-items-center text-slate-700 transition hover:bg-slate-100"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round" class="h-4 w-4" aria-hidden="true"><path d="M4 9V5a1 1 0 0 1 1-1h4"></path><path d="M20 9V5a1 1 0 0 0-1-1h-4"></path><path d="M4 15v4a1 1 0 0 0 1 1h4"></path><path d="M20 15v4a1 1 0 0 1-1 1h-4"></path></svg></button></div> <!></div></div> <aside class="space-y-4 p-4 lg:min-h-0 lg:overflow-y-auto"><div><h3 class="text-sm font-semibold text-slate-950">Graph Summary</h3> <div class="mt-3 grid grid-cols-2 gap-2 text-sm"><div class="rounded-md bg-slate-100 p-3"><div class="text-2xl font-semibold text-slate-950"> </div> <div class="text-xs text-slate-500">nodes</div></div> <div class="rounded-md bg-slate-100 p-3"><div class="text-2xl font-semibold text-slate-950"> </div> <div class="text-xs text-slate-500">edges</div></div></div></div> <div><h3 class="text-sm font-semibold text-slate-950">Node Types</h3> <div class="mt-2 flex flex-wrap gap-1.5"></div></div> <div><h3 class="text-sm font-semibold text-slate-950">Central Nodes</h3> <div class="mt-2 space-y-2"></div></div> <div class="rounded-md border border-slate-200 bg-slate-50 p-3"><!></div></aside></div></div></section>`);function Z(t,r){S(r,!0);let i=T(``),a=T(null),s=T(null),p=T(!1),h=T(!1),_=T(0),v=T(null),C=null,z=T(A({contains:!0,reads:!0,writes:!0,emits:!0,transitions:!0,asserts:!0,uses:!0,handles:!0})),U=T(!1),te=T(null),ne=W.length,re=j(()=>W.filter(e=>m(z)[e]).length),ae=e=>{P(z,Object.fromEntries(W.map(t=>[t,e])),!0)},G=e=>{m(U)&&m(te)&&!m(te).contains(e.target)&&P(U,!1)},ue=j(()=>r.features??(r.feature?[r.feature]:[])),q=j(()=>r.project?.name??r.feature?.name??`Behavior graph`),de=j(()=>r.project?`The whole project behavior map across ${m(ue).length} feature${m(ue).length===1?``:`s`} from the shared Unspa hub.`:`A connected map of the executable behavior model from the shared Unspa hub.`),fe=j(()=>r.project?`/projects/${r.project.id}`:r.feature?`/features/${r.feature.id}`:`/projects`),J=j(()=>r.project?`Back to project`:`Back to editor`),pe=j(()=>oe(m(ue),r.project)),Y=j(()=>se(m(pe))),X=j(()=>ce(m(Y),{search:m(i),enabledKinds:m(z)})),Z=j(()=>m(a)?m(Y).nodeById.get(m(a))??null:null),Q=j(()=>m(s)?m(X).edges.find(e=>e.id===m(s))??null:null),Oe=j(()=>m(Q)?m(Y).nodeById.get(m(Q).from)??null:null),ke=j(()=>m(Q)?m(Y).nodeById.get(m(Q).to)??null:null),Ae=j(()=>[...m(Y).nodes].sort((e,t)=>t.degree-e.degree).slice(0,6)),je=j(()=>{let e=new Map;for(let t of m(Y).nodes)e.set(t.type,(e.get(t.type)??0)+1);return e}),Me=()=>{C?.render({graph:m(X),selectedId:m(a),selectedEdgeId:m(s),labelsVisible:m(p),nodeTheme:le,edgeTheme:K})},Ne=e=>{P(z,{...m(z),[e]:!m(z)[e]},!0)},Pe=()=>{P(a,null),P(s,null),P(i,``),C?.fit()},Fe=e=>{P(a,e,!0),P(s,null),C?.select(e,null)};o(()=>{m(X).nodes,m(X).edges,m(p),m(a),m(s),Me()}),N(()=>{let e=!1,t=()=>C?.fit();return(async()=>{let n=await H(()=>import(`./D5speDV8.js`),[],import.meta.url);e||!m(v)||(C=new me(n,m(v),{onSelectedNodeChange:e=>{P(a,e,!0)},onSelectedEdgeChange:e=>{P(s,e,!0)},onNodeActivate:e=>{let t=m(Y).nodeById.get(e);t?.href&&V(t.href)},onStabilizationProgress:e=>{P(_,e,!0)},onSettledChange:e=>{P(h,e,!0)}}),Me(),window.addEventListener(`resize`,t))})(),()=>{e=!0,window.removeEventListener(`resize`,t)}}),k(()=>{C?.destroy(),C=null});var Ie=De();n(`mousedown`,f,G),n(`keydown`,f,e=>{e.key===`Escape`&&P(U,!1)});var Le=e(Ie),Re=e(Le),ze=e(Re),Be=I(e(ze));g(ze);var Ve=I(ze,2),He=I(e(Ve),2),Ue=e(He,!0);g(He);var We=I(He,2),Ge=e(We,!0);g(We),g(Ve),g(Re);var $=I(Re,2),Ke=e($),qe=e(Ke),Je=e(qe);F(Je,e=>P(v,e),()=>m(v));var Ye=I(Je,2),Xe=e(Ye),Ze=I(e(Xe),4);L(Ze),g(Xe);var Qe=I(Xe,2),$e=e(Qe),et=I(e($e),4),tt=e(et);g(et),g($e);var nt=I($e,2),rt=t=>{var n=ve(),r=e(n),i=I(e(r),2),a=e(i),o=I(a,2);g(i),g(r);var s=I(r,2);u(s,17,()=>W,D,(t,n)=>{let r=j(()=>m(z)[m(n)]);var i=ge(),a=e(i),o=I(a,2),s=e(o,!0);g(o);var u=I(o,2),d=e=>{l(e,he())};E(u,e=>{m(r)&&e(d)}),g(i),M(()=>{y(i,`aria-checked`,m(r)),ee(a,`background:${K[m(n)].color};opacity:${m(r)?1:.3}`),R(o,1,`flex-1 truncate ${m(r)?`text-slate-800`:`text-slate-400`}`),c(s,K[m(n)].label)}),B(`click`,i,()=>Ne(m(n))),l(t,i)});var d=I(s,4),f=I(e(d),2),h=I(f,2),_=e=>{l(e,_e())};E(h,e=>{m(p)&&e(_)}),g(d);var v=I(d,4),b=e(v),x=I(b,2);g(v),g(n),M(()=>{y(d,`aria-checked`,m(p)),R(f,1,`flex-1 ${m(p)?`text-slate-800`:`text-slate-600`}`)}),B(`click`,a,()=>ae(!0)),B(`click`,o,()=>ae(!1)),B(`click`,d,()=>P(p,!m(p))),B(`click`,b,()=>C?.relayout(m(X).nodes.length)),B(`click`,x,()=>{Pe(),P(U,!1)}),l(t,n)};E(nt,e=>{m(U)&&e(rt)}),g(Qe),F(Qe,e=>P(te,e),()=>m(te)),g(Ye);var it=I(Ye,2),at=e(it),ot=I(at,4),st=I(ot,4);g(it);var ct=I(it,2),lt=t=>{var n=ye(),r=e(n),i=I(e(r),2),a=e(i);g(i),g(r);var o=I(r,2),s=e(o);g(o),g(n),M(()=>{c(a,`${m(_)??``}%`),ee(s,`width:${m(_)}%`)}),l(t,n)};E(ct,e=>{!m(h)&&m(_)<100&&e(lt)}),g(qe),g(Ke);var ut=I(Ke,2),dt=e(ut),ft=I(e(dt),2),pt=e(ft),mt=e(pt),ht=e(mt,!0);g(mt),w(2),g(pt);var gt=I(pt,2),_t=e(gt),vt=e(_t,!0);g(_t),w(2),g(gt),g(ft),g(dt);var yt=I(dt,2),bt=I(e(yt),2);u(bt,21,()=>ie,D,(t,n)=>{var r=d(),i=x(r),a=t=>{var r=be(),i=e(r),a=I(i);g(r),M(e=>{ee(i,`background:${le[m(n)].fill}`),c(a,` ${le[m(n)].label??``} ${e??``}`)},[()=>m(je).get(m(n))]),l(t,r)},o=j(()=>m(je).get(m(n)));E(i,e=>{m(o)&&e(a)}),l(t,r)}),g(bt),g(yt);var xt=I(yt,2),St=I(e(xt),2);u(St,21,()=>m(Ae),D,(t,n)=>{var r=xe(),i=e(r),a=e(i,!0);g(i);var o=I(i,2),s=e(o);g(o),g(r),M(()=>{c(a,m(n).label),c(s,`${le[m(n).type].label??``} / ${m(n).degree??``} links`)}),B(`click`,r,()=>Fe(m(n).id)),l(t,r)}),g(St),g(xt);var Ct=I(xt,2),wt=e(Ct),Tt=t=>{var n=we(),r=x(n),i=e(r,!0);g(r);var a=I(r,2),o=e(a,!0);g(a);var s=I(a,2),u=t=>{var n=Se(),r=e(n,!0);g(n),M(()=>c(r,m(Z).detail)),l(t,n)};E(s,e=>{m(Z).detail&&e(u)});var d=I(s,2),f=e(d);g(d);var p=I(d,2),h=e=>{var t=Ce();M(()=>y(t,`href`,m(Z).href)),l(e,t)};E(p,e=>{m(Z).href&&e(h)}),M(()=>{c(i,le[m(Z).type].label),c(o,m(Z).label),c(f,`${m(Z).degree??``} graph links`)}),l(t,n)},Et=t=>{var n=Te(),r=x(n),i=e(r,!0);g(r);var a=I(r,2),o=e(a,!0);g(a);var s=I(a,2),u=e(s);g(s),w(2),M(()=>{c(i,K[m(Q).kind].label),c(o,m(Q).label??`Behavior link`),c(u,`${m(Oe)?.label??m(Q).from??``} -> ${m(ke)?.label??m(Q).to??``}`)}),l(t,n)},Dt=e=>{var t=Ee();w(2),l(e,t)};E(wt,e=>{m(Z)?e(Tt):m(Q)?e(Et,1):e(Dt,-1)}),g(Ct),g(ut),g($),g(Le),g(Ie),M(()=>{y(ze,`href`,m(fe)),c(Be,` ${m(J)??``}`),c(Ue,m(q)),c(Ge,m(de)),y(Je,`aria-label`,`Interactive behavior graph for ${m(q)}`),y($e,`aria-expanded`,m(U)),R($e,1,`flex h-9 items-center gap-1.5 rounded-lg border bg-white/95 px-2.5 text-sm font-medium shadow-sm backdrop-blur transition ${m(U)?`border-brand-400 text-slate-900`:`border-slate-200 text-slate-700 hover:bg-white`}`),c(tt,`${m(re)??``}/${ne??``}`),c(ht,m(Y).nodes.length),c(vt,m(Y).edges.length)}),O(Ze,()=>m(i),e=>P(i,e)),B(`click`,$e,()=>P(U,!m(U))),B(`click`,at,()=>C?.zoomBy(1.38)),B(`click`,ot,()=>C?.zoomBy(.72)),B(`click`,st,()=>C?.fit()),l(t,Ie),b()}p([`click`]);var Q=e=>e.format===`statechart`?e.edges.length>0:e.nodes.length>0,Oe=({features:e})=>{let t=e.some(e=>e.surfaces.some(e=>e.transitions.length>0||e.actions.some(e=>e.transitions.length>0||[...e.effects,...e.onBlockedEffects??[]].some(e=>e.type===`transition_surface`)))),n=e.some(e=>e.entities.length>0);return{loaded:e.length>0,hasTransitions:t,hasEntities:n}},ke=({features:e,project:t})=>{let n=oe(e,t);return{format:`graph`,title:t?.name??e[0]?.name??`Behavior graph`,nodes:n.nodes.map(e=>({id:e.id,label:e.label,kind:e.type})),edges:n.edges.map(e=>({from:e.from,to:e.to,label:e.kind}))}},Ae=class{byFormat=new Map;constructor(e=[]){for(let t of e)this.register(t)}register(e){this.byFormat.set(e.format,e)}get(e){return this.byFormat.get(e)}has(e){return this.byFormat.has(e)}list(){return[...this.byFormat.values()]}},je={format:`er`,label:`ER diagram`,supportsText:!0,project({features:e,project:t}){let n=[],r=new Set;for(let t of e){let e=String(t.id);for(let i of t.entities){let t=`${e}::entity::${String(i.id)}`;r.has(t)||(r.add(t),n.push({id:t,label:i.namespace,kind:`entity`,fields:i.fields.map(e=>({name:e.name,type:String(e.type)}))}))}}return{format:`er`,title:t?.name??e[0]?.name??`ER diagram`,nodes:n,edges:[]}}},Me=e=>`feature::${e}`,Ne=(e,t)=>`${e}::surface::${t}`,Pe=(e,t)=>`${e}::action::${t}`,Fe={format:`flowchart`,label:`Flowchart`,supportsText:!0,project({features:e,project:t}){let n=[],r=[],i=new Set,a=e=>{i.has(e.id)||(i.add(e.id),n.push(e))};for(let t of e){let e=String(t.id),n=Me(e);a({id:n,label:t.name,kind:`feature`});for(let i of t.surfaces){let t=Ne(e,String(i.id));a({id:t,label:i.name,kind:`surface`}),r.push({from:n,to:t});for(let n of re(i.actions)){let i=Pe(e,String(n.id));a({id:i,label:n.name,kind:`action`}),r.push({from:t,to:i});for(let t of[...n.effects,...n.onBlockedEffects??[]])t.type===`transition_surface`&&r.push({from:i,to:Ne(e,String(t.target)),label:`go to`})}}}let o=r.filter(e=>i.has(e.from)&&i.has(e.to));return{format:`flowchart`,title:t?.name??e[0]?.name??`Flowchart`,nodes:n,edges:o}}},Ie=(e,t)=>`${e}::surface::${t}`,Le=(e,t)=>`${e}::action::${t}`,Re={format:`mindmap`,label:`Mindmap`,supportsText:!0,project({features:e,project:t}){let n=[],r=[],i=new Set,a=e=>{i.has(e.id)||(i.add(e.id),n.push(e))},o=t?.name??e[0]?.name??`Model`,s=t?`project::${String(t.id)}`:`feature::${String(e[0]?.id??`root`)}`;a({id:s,label:o,kind:`root`});for(let n of e){let e=String(n.id),i=s;if(t){let t=`feature::${e}`;a({id:t,label:n.name,kind:`feature`}),r.push({from:s,to:t}),i=t}for(let t of n.surfaces){let n=Ie(e,String(t.id));a({id:n,label:t.name,kind:`surface`}),r.push({from:i,to:n});for(let i of re(t.actions)){let t=Le(e,String(i.id));a({id:t,label:i.name,kind:`action`}),r.push({from:n,to:t})}}}return{format:`mindmap`,title:o,nodes:n,edges:r}}},ze=(e,t)=>`${e}::action::${t}`,Be={format:`sequence`,label:`Sequence`,supportsText:!0,project({features:e,project:t}){let n=[],r=[],i=new Set,a=e=>{i.has(e.id)||(i.add(e.id),n.push(e))};for(let t of e){let e=String(t.id),n=new Map,i=[];for(let r of t.surfaces)for(let t of re(r.actions)){let r=ze(e,String(t.id));if(t.triggeredByEvent){let e=String(t.triggeredByEvent),i=n.get(e)??[];i.push({id:r,name:t.name}),n.set(e,i)}for(let e of t.emittedEvents)i.push({id:r,name:t.name,event:String(e)})}for(let e of i)for(let t of n.get(e.event)??[])a({id:e.id,label:e.name,kind:`action`}),a({id:t.id,label:t.name,kind:`action`}),r.push({from:e.id,to:t.id,label:e.event})}return{format:`sequence`,title:t?.name??e[0]?.name??`Sequence`,nodes:n,edges:r}}},Ve=(e,t)=>`${e}::${t}`,He={format:`statechart`,label:`Statechart`,supportsText:!0,project({features:e,project:t}){let n=[],r=new Set;for(let t of e){let e=String(t.id);for(let i of t.surfaces){let t=Ve(e,String(i.id));r.has(t)||(r.add(t),n.push({id:t,label:i.name,kind:i.type}))}}let i=[],a=(e,t,n,a)=>{let o=Ve(e,t),s=Ve(e,n);!r.has(o)||!r.has(s)||i.push({from:o,to:s,label:a})};for(let t of e){let e=String(t.id);for(let n of t.surfaces){let t=String(n.id);for(let r of n.transitions)a(e,t,String(r.target),r.label);for(let r of n.actions){for(let n of r.transitions)a(e,t,String(n.target),n.label??r.name);for(let n of[...r.effects,...r.onBlockedEffects??[]])n.type===`transition_surface`&&a(e,t,String(n.target),r.name)}}}return{format:`statechart`,title:t?.name??e[0]?.name??`Statechart`,nodes:n,edges:i}}},Ue=e=>e.replace(/[\r\n]+/g,` `).replace(/"/g,`\\"`).trim(),We=e=>e.fields?.length?`${e.label} (${e.fields.map(e=>e.name).join(`, `)})`:e.label,Ge={id:`dot`,label:`Graphviz DOT`,export(e){let t=new Map;e.nodes.forEach((e,n)=>t.set(e.id,`n${n}`));let n=[`digraph "${Ue(e.title)}" {`,` rankdir=LR;`];for(let r of e.nodes)n.push(` ${t.get(r.id)} [label="${Ue(We(r))}"];`);for(let r of e.edges){let e=t.get(r.from),i=t.get(r.to);if(!e||!i)continue;let a=r.label?` [label="${Ue(r.label)}"]`:``;n.push(` ${e} -> ${i}${a};`)}return n.push(`}`),n.join(`
|
|
4
|
+
`)}},$=e=>e.replace(/[\r\n]+/g,` `).replace(/["]/g,``).replace(/:/g,` `).trim(),Ke=e=>$(e).replace(/[()[\]{}]/g,` `).replace(/\s+/g,` `).trim(),qe=(e,t)=>{let n=e.replace(/[^A-Za-z0-9_-]+/g,`_`).replace(/^_+|_+$/g,``);return/^[A-Za-z]/.test(n)?n:n?`x${n}`:t},Je=e=>{let t=new Map;return e.nodes.forEach((e,n)=>t.set(e.id,`s${n}`)),t},Ye=e=>{let t=Je(e),n=[`stateDiagram-v2`];e.title&&n.push(` %% ${$(e.title)}`);for(let r of e.nodes)n.push(` state "${$(r.label)}" as ${t.get(r.id)}`);for(let r of e.edges){let e=t.get(r.from),i=t.get(r.to);!e||!i||n.push(r.label?` ${e} --> ${i} : ${$(r.label)}`:` ${e} --> ${i}`)}return n.join(`
|
|
5
|
+
`)},Xe=e=>{let t=Je(e),n=[`sequenceDiagram`,` autonumber`];for(let r of e.nodes)n.push(` participant ${t.get(r.id)} as ${$(r.label)}`);for(let r of e.edges){let e=t.get(r.from),i=t.get(r.to);!e||!i||n.push(` ${e}->>${i}: ${$(r.label??`event`)}`)}return n.join(`
|
|
6
|
+
`)},Ze=e=>{let t=Je(e),n=[`erDiagram`];e.nodes.forEach((e,r)=>{let i=`${t.get(e.id)}["${$(e.label)||`Entity ${r}`}"]`,a=e.fields??[];if(a.length===0){n.push(` ${i}`);return}n.push(` ${i} {`),a.forEach((e,t)=>{let r=qe(e.type,`field`),i=qe(e.name,`field${t}`);n.push(` ${r} ${i}`)}),n.push(` }`)});for(let r of e.edges){let e=t.get(r.from),i=t.get(r.to);!e||!i||n.push(r.label?` ${e} ||--o{ ${i} : "${$(r.label)}"`:` ${e} ||--o{ ${i} : ""`)}return n.join(`
|
|
7
|
+
`)},Qe={feature:`fill:#0f172a,stroke:#020617,color:#f8fafc,stroke-width:1.5px`,surface:`fill:#0e7490,stroke:#155e75,color:#ecfeff,stroke-width:1.5px`,action:`fill:#ffffff,stroke:#2563eb,color:#1e3a8a,stroke-width:1.5px`,entity:`fill:#faf5ff,stroke:#9333ea,color:#581c87,stroke-width:1.5px`},$e=(e,t)=>e===`feature`?`(["${t}"])`:e===`action`?`("${t}")`:`["${t}"]`,et=e=>{let t=Je(e),n=new Set,r=[`flowchart TD`];for(let i of e.nodes){let e=i.kind&&Qe[i.kind]?i.kind:void 0,a=$e(i.kind,$(i.label));r.push(` ${t.get(i.id)}${a}${e?`:::${e}`:``}`),e&&n.add(e)}for(let n of e.edges){let e=t.get(n.from),i=t.get(n.to);!e||!i||r.push(n.label?` ${e} -.->|${$(n.label)}| ${i}`:` ${e} --> ${i}`)}for(let e of n)r.push(` classDef ${e} ${Qe[e]}`);return r.join(`
|
|
8
|
+
`)},tt=e=>{let t=Je(e),n=new Map(e.nodes.map(e=>[e.id,e])),r=new Map,i=new Set;for(let t of e.edges){let e=r.get(t.from)??[];e.push(t.to),r.set(t.from,e),i.add(t.to)}let a=e.nodes.find(e=>e.kind===`root`)??e.nodes.find(e=>!i.has(e.id))??e.nodes[0];if(!a)return`mindmap`;let o=[`mindmap`],s=new Set,c=(e,i)=>{if(s.has(e))return;s.add(e);let a=n.get(e);if(!a)return;let l=` `.repeat(i+1),u=t.get(e)??e,d=Ke(a.label)||u,f=i===0?`((${d}))`:a.kind===`surface`?`(${d})`:`[${d}]`;o.push(`${l}${u}${f}`);for(let t of r.get(e)??[])c(t,i+1)};c(a.id,0);for(let t of e.nodes)s.has(t.id)||c(t.id,1);return o.join(`
|
|
9
|
+
`)},nt={id:`mermaid`,label:`Mermaid`,export:e=>e.format===`statechart`?Ye(e):e.format===`sequence`?Xe(e):e.format===`er`?Ze(e):e.format===`mindmap`?tt(e):et(e)},rt=220,it=46,at=34,ot=40,st=e=>e.replace(/&/g,`&`).replace(/</g,`<`).replace(/>/g,`>`).replace(/"/g,`"`),ct=e=>e.fields?.length?`${e.label} (${e.fields.map(e=>e.name).join(`, `)})`:e.label,lt={id:`svg`,label:`SVG`,export(e){let t=new Map;e.nodes.forEach((e,n)=>t.set(e.id,{x:ot,y:ot+n*80}));let n=Math.max(ot*2,ot*2+e.nodes.length*80-at),r=[`<svg xmlns="http://www.w3.org/2000/svg" width="520" height="${n}" viewBox="0 0 520 ${n}">`,`<rect width="100%" height="100%" fill="#ffffff"/>`];for(let n of e.edges){let e=t.get(n.from),i=t.get(n.to);if(!e||!i)continue;let a=e.x+rt,o=e.y+it/2,s=i.x+rt,c=i.y+it/2,l=Math.max(a,s)+36;r.push(`<path d="M ${a} ${o} C ${l} ${o}, ${l} ${c}, ${s} ${c}" fill="none" stroke="#94a3b8" stroke-width="1.5"/>`),n.label&&r.push(`<text x="${l+4}" y="${(o+c)/2-4}" font-family="sans-serif" font-size="11" fill="#475569">${st(n.label)}</text>`)}for(let n of e.nodes){let e=t.get(n.id);e&&(r.push(`<rect x="${e.x}" y="${e.y}" width="${rt}" height="${it}" rx="8" fill="#0e7490" stroke="#155e75"/>`),r.push(`<text x="${e.x+rt/2}" y="${e.y+it/2+4}" text-anchor="middle" font-family="sans-serif" font-size="13" fill="#ffffff">${st(ct(n))}</text>`))}return r.push(`</svg>`),r.join(`
|
|
10
|
+
`)}},ut=new Ae([He,Be,je,Fe,Re]),dt=nt,ft=Ge,pt=lt,mt=13,ht=7.9,gt=12,_t=30,vt=44,yt=38,bt=64,xt=14,St=16,Ct=12,wt=1.7,Tt=32,Et=[{stroke:`#0e7490`,fill:`#cffafe`},{stroke:`#2563eb`,fill:`#dbeafe`},{stroke:`#7c3aed`,fill:`#ede9fe`},{stroke:`#db2777`,fill:`#fce7f3`},{stroke:`#ea580c`,fill:`#ffedd5`},{stroke:`#ca8a04`,fill:`#fef3c7`},{stroke:`#16a34a`,fill:`#dcfce7`},{stroke:`#0f766e`,fill:`#ccfbf1`}],Dt=e=>e.replace(/&/g,`&`).replace(/</g,`<`).replace(/>/g,`>`).replace(/"/g,`"`),Ot=e=>e.length>Tt?`${e.slice(0,Tt-1).trimEnd()}…`:e,kt=(e,t)=>Math.max(t?90:56,Ot(e).length*ht+gt*2),At=e=>{let t=new Map;e.nodes.forEach((e,n)=>t.set(e.id,n));let n=new Map,r=new Set;for(let i of e.edges){if(!t.has(i.from)||!t.has(i.to))continue;let e=n.get(i.from)??[];e.push(i.to),n.set(i.from,e),r.add(i.to)}let i=e.nodes.find(e=>e.kind===`root`)??e.nodes.find(e=>!r.has(e.id))??e.nodes[0];if(!i)return{nodes:[],panels:[]};let a=[],o=new Set,s=(e,t,r)=>{if(!o.has(e)){o.add(e),a.push({id:e,depth:t,parent:r});for(let r of n.get(e)??[])s(r,t+1,e)}};s(i.id,0,null);for(let t of e.nodes)o.has(t.id)||s(t.id,1,i.id);let c=new Map;for(let e of a){if(e.parent===null)continue;let t=c.get(e.parent)??[];t.push(e.id),c.set(e.parent,t)}let l=new Map;for(let e=a.length-1;e>=0;e--){let t=a[e];if(!t)continue;let n=c.get(t.id)??[];l.set(t.id,n.length===0?1:n.reduce((e,t)=>e+(l.get(t)??1),0))}let u=c.get(i.id)??[],d=new Map,f=new Map,p=0,m=0;u.forEach((e,t)=>{f.set(e,t),p<=m?(d.set(e,1),p+=l.get(e)??1):(d.set(e,-1),m+=l.get(e)??1)});let h=n=>{let r=e.nodes[t.get(n)??-1];return r?kt(r.label,n===i.id):56},g=new Map,_=new Set,v=[],y=(e,t,n,r)=>{let i=h(e),a=t+n*(bt+i/2),o=c.get(e)??[];if(o.length>0&&o.every(e=>(c.get(e)??[]).length===0)&&o.length>Ct){let t=o.reduce((e,t)=>Math.max(e,h(t)),0),s=Math.max(1,Math.round(Math.sqrt(o.length*yt*wt/(t+xt)))),c=Math.ceil(o.length/s),l=St*2+s*t+(s-1)*xt,u=St*2+c*yt-(yt-_t),d=n===1?a+i/2+bt:a-i/2-bt-l,f=r.v;o.forEach((e,r)=>{let i=Math.floor(r/c),a=r%c,o=n===1?i:s-1-i;g.set(e,{x:d+St+o*(t+xt)+t/2,y:f+St+_t/2+a*yt,w:h(e)}),_.add(e)}),v.push({parentId:e,x:d,y:f,w:l,h:u}),g.set(e,{x:a,y:f+u/2,w:i}),r.v=f+u+yt/2;return}if(o.length===0){g.set(e,{x:a,y:r.v,w:i}),r.v+=yt;return}let s=a+n*i/2;for(let e of o)y(e,s,n,r);let l=o.map(e=>g.get(e)?.y??0);g.set(e,{x:a,y:(Math.min(...l)+Math.max(...l))/2,w:i})},b=h(i.id);for(let e of[1,-1]){let t=u.filter(t=>d.get(t)===e);if(t.length===0)continue;let n={v:0};for(let r of t)y(r,e*b/2,e,n);let r=[],i=e=>{r.push(e);for(let t of c.get(e)??[])i(t)};for(let e of t)i(e);let a=1/0,o=-1/0;for(let e of r){let t=g.get(e);t&&(a=Math.min(a,t.y),o=Math.max(o,t.y))}let s=-(a+o)/2;for(let e of r){let t=g.get(e);t&&g.set(e,{...t,y:t.y+s})}for(let e of v)r.includes(e.parentId)&&(e.y+=s)}g.set(i.id,{x:0,y:0,w:b});let x=e=>{let t=e;for(;t!==null;){let e=f.get(t);if(e!==void 0)return e;t=a.find(e=>e.id===t)?.parent??null}return-1},S=[];for(let n of a){let r=t.get(n.id),i=r===void 0?void 0:e.nodes[r],a=g.get(n.id);r===void 0||!i||!a||S.push({node:i,index:r,depth:n.depth,branch:n.depth===0?-1:x(n.id),x:a.x,y:a.y,w:a.w,h:n.depth===0?vt:_t,parentIndex:n.parent===null?null:t.get(n.parent)??null,inPanel:_.has(n.id)})}let C=[];for(let e of v){let n=t.get(e.parentId);n!==void 0&&C.push({x:e.x,y:e.y,w:e.w,h:e.h,branch:x(e.parentId),parentIndex:n})}return{nodes:S,panels:C}},jt=e=>{let{nodes:t,panels:n}=At(e);if(t.length===0)return`<svg xmlns="http://www.w3.org/2000/svg" width="10" height="10" viewBox="0 0 10 10"></svg>`;let r=new Map(t.map(e=>[e.index,e])),i=1/0,a=1/0,o=-1/0,s=-1/0;for(let e of t)i=Math.min(i,e.x-e.w/2),a=Math.min(a,e.y-e.h/2),o=Math.max(o,e.x+e.w/2),s=Math.max(s,e.y+e.h/2);for(let e of n)i=Math.min(i,e.x),a=Math.min(a,e.y),o=Math.max(o,e.x+e.w),s=Math.max(s,e.y+e.h);let c=Math.ceil(o-i+96),l=Math.ceil(s-a+96),u=48-i,d=48-a,f=e=>Et[(e%Et.length+Et.length)%Et.length]??Et[0],p=(e,t,n,r)=>{let i=(e+n)/2;return`M ${e.toFixed(1)} ${t.toFixed(1)} C ${i.toFixed(1)} ${t.toFixed(1)}, ${i.toFixed(1)} ${r.toFixed(1)}, ${n.toFixed(1)} ${r.toFixed(1)}`},m=[],h=[];for(let e of n){let t=f(e.branch);m.push(`<rect x="${(e.x+u).toFixed(1)}" y="${(e.y+d).toFixed(1)}" width="${e.w.toFixed(1)}" height="${e.h.toFixed(1)}" rx="14" fill="${t.fill}" fill-opacity="0.45" stroke="${t.stroke}" stroke-opacity="0.4" stroke-width="1.5"/>`);let n=r.get(e.parentIndex);if(n){let r=e.x>=n.x,i=n.x+u+(r?1:-1)*n.w/2,a=e.x+u+(r?0:e.w);h.push(`<path d="${p(i,n.y+d,a,e.y+d+e.h/2)}" fill="none" stroke="${t.stroke}" stroke-opacity="0.5" stroke-width="2"/>`)}}let g=[];for(let e of t){let t=e.x+u,n=e.y+d,i=f(e.branch),a=e.depth===0,o=e.parentIndex===null?null:r.get(e.parentIndex);if(o&&!e.inPanel){let r=e.x>=o.x?1:-1;h.push(`<path d="${p(o.x+u+r*o.w/2,o.y+d,t-r*e.w/2,n)}" fill="none" stroke="${i.stroke}" stroke-opacity="0.4" stroke-width="1.5"/>`)}let s=Dt(Ot(e.node.label)),c=Dt(e.node.label),l=e.node.kind===`action`,m=a?`#0f172a`:l?`#ffffff`:i.fill,_=a?`#020617`:i.stroke,v=a?`#f8fafc`:`#0f172a`;g.push([`<g id="mindmap-s${e.index}">`,`<title>${c}</title>`,`<rect x="${(t-e.w/2).toFixed(1)}" y="${(n-e.h/2).toFixed(1)}" width="${e.w.toFixed(1)}" height="${e.h}" rx="${a?14:8}" fill="${m}" stroke="${_}" stroke-width="1.5"/>`,`<text x="${t.toFixed(1)}" y="${n.toFixed(1)}" text-anchor="middle" dominant-baseline="central" font-family="'Inter', ui-sans-serif, system-ui, sans-serif" font-size="${a?15:mt}" font-weight="${a?600:500}" fill="${v}">${s}</text>`,`</g>`].join(``))}return[`<svg xmlns="http://www.w3.org/2000/svg" width="${c}" height="${l}" viewBox="0 0 ${c} ${l}" role="img" aria-label="${Dt(e.title)}">`,...m,...h,...g,`</svg>`].join(`
|
|
11
|
+
`)},Mt=(()=>{let e=new Set;return{emit:t=>{for(let n of e)n(t)},subscribe:t=>(e.add(t),()=>e.delete(t))}})(),Nt=i(`<div class="rounded-lg border border-slate-200 bg-white shadow-sm shadow-slate-950/5"><div class="flex items-center justify-between border-b border-slate-200 px-4 py-3"><div><p class="text-xs font-semibold uppercase tracking-wide text-cyan-700">Export</p> <h3 class="text-sm font-semibold text-slate-900">Get this diagram out</h3></div> <button type="button" class="inline-flex h-8 items-center rounded-md border border-slate-200 px-2.5 text-sm font-medium text-slate-600 transition hover:bg-slate-50">Close</button></div> <div class="flex flex-wrap items-center gap-2 px-4 py-4"><button type="button" class="inline-flex h-9 items-center rounded-lg border border-slate-200 bg-white px-3 text-sm font-medium text-slate-700 shadow-sm transition enabled:hover:bg-slate-50 disabled:cursor-not-allowed disabled:opacity-50">Copy as Mermaid</button> <button type="button" class="inline-flex h-9 items-center rounded-lg border border-slate-200 bg-white px-3 text-sm font-medium text-slate-700 shadow-sm transition enabled:hover:bg-slate-50 disabled:cursor-not-allowed disabled:opacity-50">Copy as DOT</button> <button type="button" class="inline-flex h-9 items-center rounded-lg border border-slate-200 bg-white px-3 text-sm font-medium text-slate-700 shadow-sm transition enabled:hover:bg-slate-50 disabled:cursor-not-allowed disabled:opacity-50">Download SVG</button> <button type="button" class="inline-flex h-9 items-center rounded-lg border border-slate-200 bg-white px-3 text-sm font-medium text-slate-700 shadow-sm transition enabled:hover:bg-slate-50 disabled:cursor-not-allowed disabled:opacity-50">Download PNG</button> <span class="ml-auto text-xs text-slate-500" aria-live="polite"><!></span></div></div>`);function Pt(t,n){S(n,!0);let r=T(`idle`),i=T(``),a=j(()=>n.loaded&&n.spec!==null&&n.format!==`graph`),o=j(()=>n.loaded&&n.spec!==null),u=e=>e.toLowerCase().replace(/[^a-z0-9]+/g,`-`).replace(/^-+|-+$/g,``)||`diagram`,d=e=>{P(i,e,!0)},f=async(e,t)=>{if(n.spec)try{await navigator.clipboard.writeText(e.export(n.spec)),P(r,`copied`),d(`Copied as ${t}.`),Mt.emit({type:`projection.copied`,format:e.id})}catch{P(r,`error`),d(`Copy failed.`)}},p=(e,t)=>{let n=URL.createObjectURL(t),r=document.createElement(`a`);r.href=n,r.download=e,r.click(),URL.revokeObjectURL(n)},h=e=>new Promise((t,n)=>{let r=new Image,i=URL.createObjectURL(new Blob([e],{type:`image/svg+xml`}));r.onload=()=>{let e=document.createElement(`canvas`);e.width=r.width||800,e.height=r.height||600;let a=e.getContext(`2d`);if(URL.revokeObjectURL(i),!a){n(Error(`No 2D canvas context`));return}a.fillStyle=`#ffffff`,a.fillRect(0,0,e.width,e.height),a.drawImage(r,0,0),e.toBlob(e=>e?t(e):n(Error(`toBlob failed`)),`image/png`)},r.onerror=()=>{URL.revokeObjectURL(i),n(Error(`SVG image load failed`))},r.src=i}),_=async e=>{if(n.spec){P(r,`downloading`);try{let t=pt.export(n.spec),i=e===`svg`?new Blob([t],{type:`image/svg+xml`}):await h(t);p(`${u(n.spec.title)}.${e}`,i),P(r,`downloaded`),d(`Downloaded ${e.toUpperCase()}.`),Mt.emit({type:`projection.exported`,imageFormat:e})}catch{P(r,`error`),d(`Download failed.`)}}},v=()=>{P(r,`idle`),P(i,``),n.onClose()};var y=Nt(),x=e(y),C=I(e(x),2);g(x);var w=I(x,2),D=e(w),O=I(D,2),k=I(O,2),A=I(k,2),N=I(A,2),F=e(N),L=e=>{var t=s();M(()=>c(t,m(i))),l(e,t)},ee=e=>{l(e,s(`The free graph exports to DOT and image only.`))};E(F,e=>{m(i)?e(L):!m(a)&&n.format===`graph`&&e(ee,1)}),g(N),g(w),g(y),M(()=>{D.disabled=!m(a),O.disabled=!m(o),k.disabled=!m(o)||m(r)===`downloading`,A.disabled=!m(o)||m(r)===`downloading`}),B(`click`,C,v),B(`click`,D,()=>f(dt,`Mermaid`)),B(`click`,O,()=>f(ft,`DOT`)),B(`click`,k,()=>_(`svg`)),B(`click`,A,()=>_(`png`)),l(t,y),b()}p([`click`]);var Ft=`'Inter', ui-sans-serif, system-ui, sans-serif`,It=[`#cffafe`,`#dbeafe`,`#ede9fe`,`#fce7f3`,`#ffedd5`,`#fef3c7`,`#dcfce7`,`#ccfbf1`],Lt=()=>Object.fromEntries(It.map((e,t)=>[`cScale${t}`,e])),Rt=null,zt=()=>(Rt||=H(()=>import(`./BpBsb117.js`).then(e=>(e.default.initialize({startOnLoad:!1,securityLevel:`strict`,suppressErrorRendering:!0,theme:`base`,themeVariables:{fontFamily:Ft,fontSize:`14px`,primaryColor:`#cffafe`,primaryBorderColor:`#0e7490`,primaryTextColor:`#164e63`,secondaryColor:`#ecfeff`,tertiaryColor:`#f8fafc`,lineColor:`#64748b`,textColor:`#334155`,edgeLabelBackground:`#f1f5f9`,clusterBkg:`#f8fafc`,clusterBorder:`#e2e8f0`,noteBkgColor:`#fef9c3`,noteBorderColor:`#ca8a04`,actorBkg:`#0f172a`,actorBorder:`#020617`,actorTextColor:`#f8fafc`,actorLineColor:`#cbd5e1`,signalColor:`#0e7490`,signalTextColor:`#334155`,activationBkgColor:`#a5f3fc`,activationBorderColor:`#0e7490`,sequenceNumberColor:`#ffffff`,attributeBackgroundColorOdd:`#ffffff`,attributeBackgroundColorEven:`#f8fafc`,...Lt()},flowchart:{useMaxWidth:!0,curve:`basis`,padding:10,nodeSpacing:42,rankSpacing:56},sequence:{useMaxWidth:!0,mirrorActors:!1,actorMargin:90,messageMargin:44},er:{useMaxWidth:!0,diagramPadding:24,entityPadding:16,minEntityWidth:140},mindmap:{useMaxWidth:!0,padding:14},state:{useMaxWidth:!0}}),e.default)),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21]),import.meta.url),Rt),Bt=i(`<div class="grid h-full place-items-center px-4 text-center text-sm text-slate-500 svelte-ifdu67"><div class="svelte-ifdu67"><p class="font-medium text-slate-700 svelte-ifdu67">Couldn't draw this diagram.</p> <p class="mt-1 svelte-ifdu67">Use “Copy as Mermaid” to view the source elsewhere.</p></div></div>`),Vt=i(`<div class="diagram-enter svelte-ifdu67"></div>`),Ht=i(`<div class="spotlight-ring pointer-events-none absolute z-10 svelte-ifdu67" aria-hidden="true"></div>`),Ut=i(`<div class="mermaid-host absolute left-0 top-0 origin-top-left will-change-transform svelte-ifdu67"><!></div> <!>`,1),Wt=i(`<div class="grid h-full place-items-center svelte-ifdu67"><div class="flex items-center gap-2.5 text-sm text-slate-400 svelte-ifdu67"><span class="projection-spinner svelte-ifdu67" aria-hidden="true"></span> Projecting…</div></div>`),Gt=i(`<div class="absolute bottom-3 left-3 z-10 rounded-md bg-white/85 px-2 py-1 text-xs font-medium text-slate-500 backdrop-blur svelte-ifdu67"> </div>`),Kt=i(`<div role="application" tabindex="0" aria-label="Diagram canvas. Scroll to zoom, drag to pan, double-click to zoom in. Keyboard: plus and minus zoom, arrows pan, 0 fits."><!></div> <div class="absolute bottom-3 right-3 z-10 flex flex-col overflow-hidden rounded-lg border border-slate-200 bg-white/95 shadow-sm backdrop-blur svelte-ifdu67"><button type="button" aria-label="Zoom in" title="Zoom in (+)" class="grid h-9 w-9 place-items-center text-lg font-semibold leading-none text-slate-700 transition hover:bg-slate-100 svelte-ifdu67">+</button> <div class="h-px bg-slate-200 svelte-ifdu67"></div> <button type="button" aria-label="Zoom out" title="Zoom out (−)" class="grid h-9 w-9 place-items-center text-lg font-semibold leading-none text-slate-700 transition hover:bg-slate-100 svelte-ifdu67">−</button> <div class="h-px bg-slate-200 svelte-ifdu67"></div> <button type="button" aria-label="Fit diagram to view" title="Fit to view (0)" class="grid h-9 w-9 place-items-center text-slate-700 transition hover:bg-slate-100 svelte-ifdu67"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round" class="h-4 w-4 svelte-ifdu67" aria-hidden="true"><path d="M4 9V5a1 1 0 0 1 1-1h4" class="svelte-ifdu67"></path><path d="M20 9V5a1 1 0 0 0-1-1h-4" class="svelte-ifdu67"></path><path d="M4 15v4a1 1 0 0 0 1 1h4" class="svelte-ifdu67"></path><path d="M20 15v4a1 1 0 0 1-1 1h-4" class="svelte-ifdu67"></path></svg></button></div> <!>`,1),qt=i(`<div class="diagram-canvas relative h-[60vh] w-full overflow-hidden lg:h-auto lg:min-h-0 lg:flex-1 svelte-ifdu67"><!></div>`);function Jt(i,a){S(a,!0);let s=_(a,`svgOverride`,3,``),u=_(a,`focusKey`,3,null),d=_(a,`focusLabel`,3,``),f=T(``),p=T(`idle`),h=T(null),v=T(1),y=T(0),C=T(0),w=0,D=0,O=0,k=e=>Math.min(4,Math.max(.1,e)),A=async e=>{if(!e){P(f,``),P(p,`idle`);return}let t=++O;P(p,`rendering`);try{let n=await(await zt()).render(`mermaid-${t}`,e);if(t!==O)return;P(f,n.svg,!0),P(p,`ready`)}catch{if(document.getElementById(`dmermaid-${t}`)?.remove(),t!==O)return;P(f,``),P(p,`error`)}},j=null,N=e=>e<.5?4*e*e*e:1-(-2*e+2)**3/2,L=()=>{j!==null&&(cancelAnimationFrame(j),j=null)},z=(e,t,n,r=260)=>{if(L(),r<=0){P(y,e,!0),P(C,t,!0),P(v,n,!0);return}let i=0,a=0,o=0,s=1,c=l=>{i||(i=l,a=m(y),o=m(C),s=m(v));let u=N(Math.min(1,(l-i)/r));P(y,a+(e-a)*u),P(C,o+(t-o)*u),P(v,s+(n-s)*u),j=u<1?requestAnimationFrame(c):null};j=requestAnimationFrame(c)},V=(e=!1)=>{if(!m(h)||!w||!D)return;let t=m(h).clientWidth,n=m(h).clientHeight,r=k(Math.min(t/w,n/D));z((t-w*r)/2,(n-D*r)/2,r,e?0:260)},H=(e,t,n,r=0)=>{let i=k(m(v)*e);i!==m(v)&&z(t-(t-m(y))*(i/m(v)),n-(n-m(C))*(i/m(v)),i,r)},U=e=>{m(h)&&H(e,m(h).clientWidth/2,m(h).clientHeight/2,160)},te=e=>{if(!m(h))return;e.preventDefault(),L();let t=m(h).getBoundingClientRect();H(e.deltaY<0?1.12:1/1.12,e.clientX-t.left,e.clientY-t.top)},ne=e=>{if(!m(h))return;let t=m(h).getBoundingClientRect();H(1.6,e.clientX-t.left,e.clientY-t.top,260)},re=e=>{if(e.key===`+`||e.key===`=`)U(1.25);else if(e.key===`-`||e.key===`_`)U(.8);else if(e.key===`0`)V();else if(e.key===`ArrowLeft`)P(y,m(y)+60);else if(e.key===`ArrowRight`)P(y,m(y)-60);else if(e.key===`ArrowUp`)P(C,m(C)+60);else if(e.key===`ArrowDown`)P(C,m(C)-60);else return;e.preventDefault()},W=T(!1),ie=0,ae=0,G=0,oe=0,se=0,ce=null,le=e=>{L(),P(W,!0),ie=e.clientX,ae=e.clientY,G=m(y),oe=m(C),se=0,ce=e.target,e.currentTarget.setPointerCapture(e.pointerId)},K=e=>{if(!m(W))return;let t=e.clientX-ie,n=e.clientY-ae;se=Math.max(se,Math.abs(t)+Math.abs(n)),P(y,G+t),P(C,oe+n)},ue=e=>{m(W)&&(P(W,!1),e.currentTarget.releasePointerCapture?.(e.pointerId))},q=e=>{let t=m(W);if(ue(e),t&&se<=4&&e.detail<=1&&a.onNodePick){let e=fe(ce);e!==null&&Number.isInteger(e)&&a.onNodePick(e)}ce=null},de=e=>e.match(/s\d+/g)??[],fe=e=>{let t=e;for(;t&&t!==m(h);){let e=t.id;if(e){let[t,...n]=de(e);if(t&&n.every(e=>e===t))return Number(t.slice(1))}t=t.parentElement}return null},J=T(null),pe=(e,t,n)=>{for(let n of e.querySelectorAll(`g[id]`)){let e=de(n.id);if(e.length>0&&e.every(e=>e===t))return n}let r=n.trim();if(!r)return null;for(let t of e.querySelectorAll(`text, tspan, span`))if(t.textContent?.trim()===r)return t.closest(`g`)??t;return null},Y=(e,t)=>{try{let n=e.getBBox(),r=e.getCTM();if(!r)return{x:n.x,y:n.y,w:n.width,h:n.height};let i=[[n.x,n.y],[n.x+n.width,n.y],[n.x,n.y+n.height],[n.x+n.width,n.y+n.height]],a=1/0,o=1/0,s=-1/0,c=-1/0;for(let[e,n]of i){let i=t.createSVGPoint();i.x=e,i.y=n;let l=i.matrixTransform(r);a=Math.min(a,l.x),o=Math.min(o,l.y),s=Math.max(s,l.x),c=Math.max(c,l.y)}return{x:a,y:o,w:s-a,h:c-o}}catch{return null}};o(()=>{if(s()){O++,P(f,s()),P(p,`ready`);return}A(a.code)}),o(()=>{if(m(p)!==`ready`||!m(f)||!m(h))return;let e=m(h).querySelector(`svg`);if(!e)return;let t=e.viewBox?.baseVal,n=e.getBoundingClientRect();w=t&&t.width?t.width:n.width,D=t&&t.height?t.height:n.height,e.style.maxWidth=`none`,e.style.width=`${w}px`,e.style.height=`${D}px`,V(!0)}),o(()=>{if(m(p)!==`ready`||!m(f)||!m(h)||!u()){P(J,null);return}let e=m(h).querySelector(`svg`);if(!e){P(J,null);return}let t=pe(e,u(),d()),n=t?Y(t,e):null;if(P(J,n,!0),!n)return;let r=m(h).clientWidth,i=m(h).clientHeight,a=k(Math.min(r/(n.w+260),i/(n.h+260),1.5));z(r/2-(n.x+n.w/2)*a,i/2-(n.y+n.h/2)*a,a,420)}),o(()=>{if(!m(h))return;let e=new ResizeObserver(()=>V(!0));return e.observe(m(h)),()=>e.disconnect()});var X=qt(),me=e(X),he=e=>{l(e,Bt())},ge=i=>{var a=Kt(),o=x(a),s=e(o),u=n=>{var i=Ut(),a=x(i);t(e(a),()=>m(f),e=>{var t=Vt();r(t,()=>m(f),!0),g(t),l(e,t)}),g(a);var o=I(a,2),s=e=>{var t=Ht();M(()=>ee(t,`left:${m(y)+(m(J).x-10)*m(v)}px; top:${m(C)+(m(J).y-10)*m(v)}px; width:${(m(J).w+20)*m(v)}px; height:${(m(J).h+20)*m(v)}px;`)),l(e,t)};E(o,e=>{m(J)&&e(s)}),M(()=>ee(a,`transform: translate(${m(y)}px, ${m(C)}px) scale(${m(v)});`)),l(n,i)},d=e=>{l(e,Wt())};E(s,e=>{m(p)===`ready`&&m(f)?e(u):e(d,-1)}),g(o),F(o,e=>P(h,e),()=>m(h));var _=I(o,2),b=e(_),S=I(b,4),w=I(S,4);g(_);var T=I(_,2),D=t=>{var n=Gt(),r=e(n);g(n),M(e=>c(r,`${e??``}%`),[()=>Math.round(m(v)*100)]),l(t,n)};E(T,e=>{m(p)===`ready`&&e(D)}),M(()=>R(o,1,`h-full w-full touch-none select-none outline-none focus-visible:ring-2 focus-visible:ring-inset focus-visible:ring-brand-500/40 ${m(W)?`cursor-grabbing`:`cursor-grab`}`,`svelte-ifdu67`)),n(`wheel`,o,te),B(`dblclick`,o,ne),B(`keydown`,o,re),B(`pointerdown`,o,le),B(`pointermove`,o,K),B(`pointerup`,o,q),n(`pointerleave`,o,ue),B(`click`,b,()=>U(1.25)),B(`click`,S,()=>U(.8)),B(`click`,w,()=>V()),l(i,a)};E(me,e=>{m(p)===`error`?e(he):e(ge,-1)}),g(X),l(i,X),b()}p([`dblclick`,`keydown`,`pointerdown`,`pointermove`,`pointerup`,`click`]);var Yt=(t,n=z)=>{var r=nn(),i=e(r),a=e=>{var t=Xt();w(3),l(e,t)},o=e=>{var t=Zt();w(3),l(e,t)},s=e=>{var t=Qt();w(4),l(e,t)},c=e=>{var t=$t();w(2),l(e,t)},u=e=>{var t=en();w(3),l(e,t)},d=e=>{var t=tn();w(5),l(e,t)};E(i,e=>{n()===`graph`?e(a):n()===`statechart`?e(o,1):n()===`sequence`?e(s,2):n()===`er`?e(c,3):n()===`flowchart`?e(u,4):e(d,-1)}),g(r),l(t,r)},Xt=a(`<circle cx="5" cy="6" r="2.2"></circle><circle cx="19" cy="6" r="2.2"></circle><circle cx="12" cy="18" r="2.2"></circle><path d="M7 7.2 10.6 16M17 7.2 13.4 16M7.2 6h9.6"></path>`,1),Zt=a(`<rect x="3" y="3.5" width="9" height="6" rx="2"></rect><rect x="12" y="14.5" width="9" height="6" rx="2"></rect><path d="M7.5 9.5v4a2 2 0 0 0 2 2h1"></path><path d="m9 14 1.5 1.5L9 17"></path>`,1),Qt=a(`<path d="M6 4v16M18 4v16"></path><path d="M6 9h12"></path><path d="m15 6.5 3 2.5-3 2.5"></path><path d="M18 16H6"></path><path d="m9 13.5-3 2.5 3 2.5"></path>`,1),$t=a(`<rect x="3" y="4.5" width="18" height="15" rx="2"></rect><path d="M3 9.5h18"></path><path d="M11 9.5V19.5"></path>`,1),en=a(`<rect x="8" y="3" width="8" height="5" rx="1.5"></rect><rect x="3" y="16" width="7" height="5" rx="1.5"></rect><rect x="14" y="16" width="7" height="5" rx="1.5"></rect><path d="M12 8v4M12 12H6.5V16M12 12h5v4"></path>`,1),tn=a(`<circle cx="12" cy="12" r="2.4"></circle><circle cx="4.5" cy="5" r="1.7"></circle><circle cx="19.5" cy="5" r="1.7"></circle><circle cx="4.5" cy="19" r="1.7"></circle><circle cx="19.5" cy="19" r="1.7"></circle><path d="M10.2 10.4 5.8 6.2M13.8 10.4l4.4-4.2M10.2 13.6l-4.4 4.2M13.8 13.6l4.4 4.2"></path>`,1),nn=a(`<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round" class="h-4 w-4 shrink-0" aria-hidden="true"><!></svg>`),rn=i(`<div class="rounded-lg border border-dashed border-slate-300 bg-slate-50 px-6 py-16 text-center"><p class="text-sm font-medium text-slate-700">No model open</p> <p class="mx-auto mt-2 max-w-md text-sm leading-6 text-slate-500">Open a feature or project to project it into a diagram.</p></div>`),an=i(`<button type="button"><!> <span class="hidden md:inline"> </span></button>`),on=i(`<option> </option>`),sn=i(`<select class="h-9 rounded-lg border border-slate-200 bg-white px-3 text-sm shadow-sm outline-none transition focus:border-brand-400 focus:ring-2 focus:ring-brand-500/15"><option> </option><!></select>`),cn=i(`<div class="inline-flex overflow-hidden rounded-lg border border-slate-200"><button type="button">Whole project</button> <button type="button">Per feature</button></div> <!>`,1),ln=i(`<button type="button" class="inline-flex h-9 items-center rounded-lg border border-slate-200 bg-white px-3 text-sm font-medium text-slate-700 shadow-sm transition hover:bg-slate-50">Reset view</button>`),un=i(`<div class="mb-4 shrink-0"><!></div>`),dn=i(`<div class="rounded-lg border border-red-200 bg-red-50 px-6 py-16 text-center text-sm text-red-600">Something went wrong projecting this diagram.</div>`),fn=i(`<div class="rounded-lg border border-dashed border-slate-300 bg-slate-50 px-6 py-16 text-center"><p class="text-sm font-medium text-slate-700"> </p> <p class="mx-auto mt-2 max-w-md text-sm leading-6 text-slate-500"> </p></div>`),pn=i(`<div class="relative lg:min-h-0 lg:flex-1"><button type="button" class="absolute right-3 top-3 inline-flex h-8 items-center rounded-md border border-slate-200 bg-white px-2.5 text-xs font-medium text-slate-600 shadow-sm transition hover:bg-slate-50"> </button> <pre class="max-h-[60vh] overflow-auto bg-slate-50 px-4 py-4 text-sm leading-6 text-slate-800 lg:h-full lg:max-h-full"><code> </code></pre></div>`),mn=i(`<button type="button"><span class="truncate"> </span></button>`),hn=i(`<div class="mt-3"><p class="flex items-center gap-1.5 text-[10px] font-semibold uppercase tracking-wide text-slate-400"><span class="h-2 w-2 rounded-full"></span> <span class="font-normal text-slate-400"> </span></p> <div class="mt-1.5 flex flex-wrap gap-1.5"></div></div>`),gn=i(`<div class="flex items-baseline justify-between gap-2 text-xs"><dt class="truncate text-slate-700"> </dt> <dd class="shrink-0 font-mono text-[11px] text-slate-400"> </dd></div>`),_n=i(`<dl class="mt-2 space-y-0.5"></dl>`),vn=i(`<span class="truncate text-[11px] text-slate-400"> </span>`),yn=i(`<li class="flex items-baseline gap-1.5 text-xs text-slate-600"><span> </span> <span class="truncate"> </span> <!></li>`),bn=i(`<li class="text-[11px] text-slate-400"> </li>`),xn=i(`<p class="mt-3 text-[10px] font-semibold uppercase tracking-wide text-slate-400">Connections</p> <ul class="mt-1 space-y-1"><!> <!></ul>`,1),Sn=i(`<div class="rounded-md border border-slate-200 bg-slate-50 p-3"><p class="flex items-center gap-1.5 text-xs font-semibold uppercase tracking-wide text-slate-500"><span class="h-2 w-2 rounded-full"></span> </p> <h4 class="mt-1 text-sm font-semibold text-slate-900"> </h4> <!> <!></div>`),Cn=i(`<div class="grid gap-4 lg:min-h-0 lg:flex-1 lg:grid-cols-[minmax(0,1fr)_280px] lg:grid-rows-[minmax(0,1fr)]"><div class="overflow-hidden rounded-lg border border-slate-200 bg-white shadow-sm shadow-slate-950/5 lg:flex lg:min-h-0 lg:flex-col"><div class="flex shrink-0 items-start justify-between gap-3 border-b border-slate-200 bg-slate-950 px-4 py-3 text-white"><div class="min-w-0"><p class="text-xs font-semibold uppercase tracking-wide text-cyan-200"> </p> <h2 class="mt-1 truncate text-lg font-semibold"> </h2> <p class="mt-0.5 text-xs text-slate-400"> </p></div> <div class="inline-flex shrink-0 overflow-hidden rounded-md border border-white/20"><button type="button">Diagram</button> <button type="button">Source</button></div></div> <!></div> <aside class="space-y-3 lg:min-h-0 lg:overflow-y-auto"><div><h3 class="text-sm font-semibold text-slate-900">Elements</h3> <p class="mt-1 text-xs text-slate-500">Click an element, here or in the diagram, to spotlight it.</p> <!></div> <!></aside></div>`),wn=i(`<div class="mb-4 flex shrink-0 flex-wrap items-center gap-3"><div role="group" aria-label="Diagram format" class="inline-flex overflow-hidden rounded-lg border border-slate-200 bg-white shadow-sm"></div> <!> <div class="ml-auto flex items-center gap-2"><!> <button type="button" class="inline-flex h-9 items-center rounded-lg border border-slate-200 bg-white px-3 text-sm font-medium text-slate-700 shadow-sm transition enabled:hover:bg-slate-50 disabled:cursor-not-allowed disabled:opacity-50">Export</button></div></div> <!> <!>`,1),Tn=i(`<section class="w-full lg:flex lg:h-full lg:min-h-0 lg:flex-col"><!></section>`);function En(t,n){S(n,!0);let r=j(()=>n.features??(n.feature?[n.feature]:[])),i=j(()=>n.project!=null),a={graph:`Graph`,statechart:`Statechart`,sequence:`Sequence`,er:`ER`,flowchart:`Flowchart`,mindmap:`Mindmap`},s=j(()=>[`graph`,...ut.list().map(e=>e.format)]),d={feature:`#0f172a`,root:`#0f172a`,surface:`#0e7490`,action:`#2563eb`,entity:`#9333ea`},f=e=>d[e??``]??`#64748b`,p=e=>{let t=e.replace(/[_-]+/g,` `).toLowerCase();return t.charAt(0).toUpperCase()+t.slice(1)},_=[`root`,`feature`,`surface`,`action`,`entity`],w=T(`graph`),O=T(`project`),k=T(``),A=T(`idle`),N=T(!1),F=T(``),L=T(null),z=T(!1),V=T(`diagram`),H=T(!1),U=j(()=>{if(!n.project)return{features:m(r),project:void 0};if(m(O)===`project`)return{features:m(r),project:n.project};let e=m(r).find(e=>String(e.id)===m(k))??m(r)[0];return{features:e?[e]:[],project:void 0}}),te=j(()=>Oe(m(U))),ne=j(()=>m(te).loaded),re=j(()=>m(w)===`graph`?null:ut.get(m(w))??null),W=()=>Mt.emit({type:`projection.rendered`,format:m(w),scope:n.project?m(O):`feature`});o(()=>{if(!m(ne)){P(L,null),P(N,!1),P(A,`idle`);return}if(m(w)===`graph`){let e=ke(m(U));P(L,e,!0),P(N,Q(e),!0),P(A,`rendered`);return}let e=m(re);if(!e){P(L,null),P(N,!1),P(A,`idle`);return}try{let t=e.project(m(U));P(L,t,!0),P(N,Q(t),!0),P(A,`rendered`),W()}catch{P(L,null),P(N,!1),P(A,`error`)}});let ie=()=>{P(F,``),P(z,!1)},ae=e=>{P(w,e,!0),ie()},G=e=>{P(O,e,!0),ie()},oe=e=>{P(k,e,!0),ie()},se=e=>{m(N)&&P(F,m(F)===e?``:e,!0)},ce=()=>{P(F,``)},le=()=>{m(A)===`rendered`&&P(z,!0)},K=j(()=>m(L)&&m(L).format===m(w)&&m(w)!==`graph`?dt.export(m(L)):``),ue=j(()=>m(w)===`mindmap`&&m(L)?.format===`mindmap`&&m(N)?jt(m(L)):``),q=j(()=>m(L)?.nodes.find(e=>e.id===m(F))??null),de=j(()=>m(L)?.nodes.findIndex(e=>e.id===m(F))??-1),fe=j(()=>m(de)>=0?`s${m(de)}`:null),J=e=>{let t=m(L)?.nodes[e];t&&se(t.id)},pe=j(()=>{let e=new Map;for(let t of m(L)?.nodes??[]){let n=t.kind??`element`,r=e.get(n)??[];r.push(t),e.set(n,r)}return[...e.entries()].sort((e,t)=>{let n=_.indexOf(e[0]),r=_.indexOf(t[0]);return(n===-1?99:n)-(r===-1?99:r)||e[0].localeCompare(t[0])})}),Y=j(()=>{let e=m(L),t=m(q);if(!e||!t)return[];let n=[];for(let r of e.edges)if(r.from===t.id){let t=e.nodes.find(e=>e.id===r.to);t&&n.push({dir:`out`,other:t.label,label:r.label})}else if(r.to===t.id){let t=e.nodes.find(e=>e.id===r.from);t&&n.push({dir:`in`,other:t.label,label:r.label})}return n}),X=async()=>{if(m(K))try{await navigator.clipboard.writeText(m(K)),P(H,!0),setTimeout(()=>P(H,!1),1600)}catch{P(H,!1)}},me=j(()=>m(w)===`er`?`No entities to project yet. Add entities to your model to see an ER diagram.`:m(w)===`statechart`?`No transitions yet. Add surface transitions to your model to see a statechart.`:m(w)===`sequence`?`No event handlers to sequence yet. Wire an action to an emitted event.`:`Nothing to project for this format yet.`);var he=Tn(),ge=e(he),_e=e=>{l(e,rn())},ve=t=>{var o=wn(),d=x(o),_=e(d);u(_,21,()=>m(s),D,(t,n,r)=>{var i=an(),o=e(i);Yt(o,()=>m(n));var s=I(o,2),u=e(s,!0);g(s),g(i),M(()=>{y(i,`aria-pressed`,m(w)===m(n)),y(i,`title`,a[m(n)]),R(i,1,`flex h-9 items-center gap-1.5 px-2.5 text-sm font-medium transition sm:px-3 ${m(w)===m(n)?`bg-slate-900 text-white`:`bg-white text-slate-600 hover:bg-slate-50 hover:text-slate-900`} ${r>0?`border-l border-slate-200`:``}`),c(u,a[m(n)])}),B(`click`,i,()=>ae(m(n))),l(t,i)}),g(_);var b=I(_,2),S=t=>{var n=cn(),i=x(n),a=e(i),o=I(a,2);g(i);var s=I(i,2),d=t=>{var n=sn(),i=e(n),a=e(i,!0);g(i),i.value=i.__value=``,u(I(i),17,()=>m(r),D,(t,n)=>{var r=on(),i=e(r,!0);g(r);var a={};M(e=>{c(i,m(n).name),a!==(a=e)&&(r.value=(r.__value=e)??``)},[()=>String(m(n).id)]),l(t,r)}),g(n);var o;C(n),M(()=>{c(a,m(r)[0]?.name??`First feature`),o!==(o=m(k))&&(n.value=(n.__value=m(k))??``,h(n,m(k)))}),B(`change`,n,e=>oe(e.currentTarget.value)),l(t,n)};E(s,e=>{m(O)===`feature`&&e(d)}),M(()=>{R(a,1,`h-9 px-3 text-sm font-medium transition ${m(O)===`project`?`bg-slate-900 text-white`:`bg-white text-slate-700 hover:bg-slate-50`}`),R(o,1,`h-9 px-3 text-sm font-medium transition ${m(O)===`feature`?`bg-slate-900 text-white`:`bg-white text-slate-700 hover:bg-slate-50`}`)}),B(`click`,a,()=>G(`project`)),B(`click`,o,()=>G(`feature`)),l(t,n)};E(b,e=>{m(i)&&e(S)});var T=I(b,2),U=e(T),te=e=>{var t=ln();B(`click`,t,ce),l(e,t)};E(U,e=>{m(F)&&e(te)});var W=I(U,2);g(T),g(d);var ie=I(d,2),de=t=>{var n=un();Pt(e(n),{get spec(){return m(L)},get format(){return m(w)},get loaded(){return m(ne)},onClose:()=>P(z,!1)}),g(n),l(t,n)};E(ie,e=>{m(z)&&e(de)});var he=I(ie,2),ge=e=>{Z(e,{get feature(){return n.feature},get features(){return n.features},get project(){return n.project}})},_e=e=>{l(e,dn())},ve=t=>{var n=fn(),r=e(n),i=e(r,!0);g(r);var a=I(r,2),o=e(a,!0);g(a),g(n),M(()=>{c(i,m(L)?.title??`Diagram`),c(o,m(me))}),l(t,n)},ye=t=>{var n=Cn(),r=e(n),i=e(r),a=e(i),o=e(a),s=e(o,!0);g(o);var d=I(o,2),h=e(d,!0);g(d);var _=I(d,2),b=e(_);g(_),g(a);var S=I(a,2),C=e(S),w=I(C,2);g(S),g(i);var T=I(i,2),O=e=>{{let t=j(()=>m(q)?.label??``);Jt(e,{get code(){return m(K)},get svgOverride(){return m(ue)},get focusKey(){return m(fe)},get focusLabel(){return m(t)},onNodePick:J})}},k=t=>{var n=pn(),r=e(n),i=e(r,!0);g(r);var a=I(r,2),o=e(a),s=e(o,!0);g(o),g(a),g(n),M(()=>{c(i,m(H)?`Copied`:`Copy`),c(s,m(K))}),B(`click`,r,X),l(t,n)};E(T,e=>{m(V)===`diagram`?e(O):e(k,-1)}),g(r);var A=I(r,2),N=e(A);u(I(e(N),4),17,()=>m(pe),D,(t,n)=>{var r=j(()=>v(m(n),2));let i=()=>m(r)[0],a=()=>m(r)[1];var o=hn(),s=e(o),d=e(s),h=I(d),_=I(h),b=e(_,!0);g(_),g(s);var x=I(s,2);u(x,21,a,D,(t,n)=>{var r=mn(),i=e(r),a=e(i,!0);g(i),g(r),M(()=>{y(r,`aria-pressed`,m(F)===m(n).id),R(r,1,`inline-flex max-w-full items-center rounded-full border px-2.5 py-1 text-xs transition ${m(F)===m(n).id?`border-brand-400 bg-brand-50 text-brand-800`:`border-slate-200 bg-white text-slate-700 hover:bg-slate-50`}`),c(a,m(n).label)}),B(`click`,r,()=>se(m(n).id)),l(t,r)}),g(x),g(o),M((e,t)=>{ee(d,e),c(h,` ${t??``} `),c(b,a().length)},[()=>`background:${f(i())}`,()=>p(i())]),l(t,o)}),g(N);var z=I(N,2),U=t=>{var n=Sn(),r=e(n),i=e(r),a=I(i);g(r);var o=I(r,2),s=e(o,!0);g(o);var d=I(o,2),h=t=>{var n=_n();u(n,21,()=>m(q).fields,D,(t,n)=>{var r=gn(),i=e(r),a=e(i,!0);g(i);var o=I(i,2),s=e(o,!0);g(o),g(r),M(()=>{c(a,m(n).name),c(s,m(n).type)}),l(t,r)}),g(n),l(t,n)};E(d,e=>{m(q).fields?.length&&e(h)});var _=I(d,2),v=t=>{var n=xn(),r=I(x(n),2),i=e(r);u(i,17,()=>m(Y).slice(0,8),D,(t,n)=>{var r=yn(),i=e(r),a=e(i,!0);g(i);var o=I(i,2),s=e(o,!0);g(o);var u=I(o,2),d=t=>{var r=vn(),i=e(r);g(r),M(()=>c(i,`(${m(n).label??``})`)),l(t,r)};E(u,e=>{m(n).label&&e(d)}),g(r),M(()=>{R(i,1,`shrink-0 font-semibold ${m(n).dir===`out`?`text-brand-700`:`text-slate-400`}`),c(a,m(n).dir===`out`?`→`:`←`),c(s,m(n).other)}),l(t,r)});var a=I(i,2),o=t=>{var n=bn(),r=e(n);g(n),M(()=>c(r,`+${m(Y).length-8} more`)),l(t,n)};E(a,e=>{m(Y).length>8&&e(o)}),g(r),l(t,n)};E(_,e=>{m(Y).length>0&&e(v)}),g(n),M((e,t)=>{ee(i,e),c(a,` ${t??``}`),c(s,m(q).label)},[()=>`background:${f(m(q).kind)}`,()=>m(q).kind?p(m(q).kind):`Element`]),l(t,n)};E(z,e=>{m(q)&&e(U)}),g(A),g(n),M(()=>{c(s,m(re)?.label),c(h,m(L)?.title),c(b,`${m(L)?.nodes.length??0??``} element${(m(L)?.nodes.length??0)===1?``:`s`} · ${m(L)?.edges.length??0??``} link${(m(L)?.edges.length??0)===1?``:`s`}`),R(C,1,`px-2.5 py-1 text-xs font-medium transition ${m(V)===`diagram`?`bg-white text-slate-900`:`text-slate-300 hover:bg-white/10`}`),R(w,1,`px-2.5 py-1 text-xs font-medium transition ${m(V)===`source`?`bg-white text-slate-900`:`text-slate-300 hover:bg-white/10`}`)}),B(`click`,C,()=>P(V,`diagram`)),B(`click`,w,()=>P(V,`source`)),l(t,n)};E(he,e=>{m(w)===`graph`?e(ge):m(A)===`error`?e(_e,1):m(N)?e(ye,-1):e(ve,2)}),M(()=>W.disabled=m(A)!==`rendered`),B(`click`,W,le),l(t,o)};E(ge,e=>{m(ne)?e(ve,-1):e(_e)}),g(he),l(t,he),b()}p([`click`,`change`]);var Dn=e=>{let t=window.matchMedia(`(min-width: 1024px)`),n=()=>{if(!t.matches){e.style.height=``;return}let n=Math.max(0,Math.round(e.getBoundingClientRect().top+window.scrollY));e.style.height=`calc(100dvh - ${n}px)`};n();let r=new ResizeObserver(n);return r.observe(document.body),window.addEventListener(`resize`,n),t.addEventListener(`change`,n),{destroy(){r.disconnect(),window.removeEventListener(`resize`,n),t.removeEventListener(`change`,n)}}};export{En as n,Dn as t};
|
|
Binary file
|
|
Binary file
|