unspaghettit 0.8.0 → 0.10.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/BGtpkapy.js +1 -0
- package/build/client/_app/immutable/chunks/BGtpkapy.js.br +0 -0
- package/build/client/_app/immutable/chunks/BGtpkapy.js.gz +0 -0
- package/build/client/_app/immutable/chunks/{DUlWXa5h.js → BJCjebKX.js} +3 -3
- package/build/client/_app/immutable/chunks/BJCjebKX.js.br +0 -0
- package/build/client/_app/immutable/chunks/BJCjebKX.js.gz +0 -0
- package/build/client/_app/immutable/chunks/{m6hfVWqp2.js → BOSEog2D2.js} +1 -1
- package/build/client/_app/immutable/chunks/BOSEog2D2.js.br +0 -0
- package/build/client/_app/immutable/chunks/BOSEog2D2.js.gz +0 -0
- package/build/client/_app/immutable/chunks/BRkEj7XB.js +1 -0
- package/build/client/_app/immutable/chunks/BRkEj7XB.js.br +0 -0
- package/build/client/_app/immutable/chunks/BRkEj7XB.js.gz +0 -0
- package/build/client/_app/immutable/chunks/{DFsgZTOD2.js → BWyM-YKn2.js} +1 -1
- package/build/client/_app/immutable/chunks/BWyM-YKn2.js.br +0 -0
- package/build/client/_app/immutable/chunks/BWyM-YKn2.js.gz +0 -0
- package/build/client/_app/immutable/chunks/{CV2_qPHL2.js → BcHaN2XP2.js} +1 -1
- package/build/client/_app/immutable/chunks/BcHaN2XP2.js.br +0 -0
- package/build/client/_app/immutable/chunks/BcHaN2XP2.js.gz +0 -0
- package/build/client/_app/immutable/chunks/{CmaTEgmy2.js → BquLtDTN2.js} +1 -1
- package/build/client/_app/immutable/chunks/BquLtDTN2.js.br +0 -0
- package/build/client/_app/immutable/chunks/BquLtDTN2.js.gz +0 -0
- package/build/client/_app/immutable/chunks/C2-NAsCA.js +1 -0
- package/build/client/_app/immutable/chunks/C2-NAsCA.js.br +2 -0
- package/build/client/_app/immutable/chunks/C2-NAsCA.js.gz +0 -0
- package/build/client/_app/immutable/chunks/{CXhiS9kD.js → C5OWnbs3.js} +1 -1
- package/build/client/_app/immutable/chunks/C5OWnbs3.js.br +0 -0
- package/build/client/_app/immutable/chunks/C5OWnbs3.js.gz +0 -0
- package/build/client/_app/immutable/chunks/{CuI8wNzS.js → C5oHnmmi.js} +1 -1
- package/build/client/_app/immutable/chunks/C5oHnmmi.js.br +0 -0
- package/build/client/_app/immutable/chunks/C5oHnmmi.js.gz +0 -0
- package/build/client/_app/immutable/chunks/{BEi9bPpt.js → CFOrhKj0.js} +1 -1
- package/build/client/_app/immutable/chunks/CFOrhKj0.js.br +0 -0
- package/build/client/_app/immutable/chunks/CFOrhKj0.js.gz +0 -0
- package/build/client/_app/immutable/chunks/CHEhPoA2.js +1 -0
- package/build/client/_app/immutable/chunks/CHEhPoA2.js.br +0 -0
- package/build/client/_app/immutable/chunks/CHEhPoA2.js.gz +0 -0
- package/build/client/_app/immutable/chunks/CKwL_udH.js +1 -0
- package/build/client/_app/immutable/chunks/CKwL_udH.js.br +0 -0
- package/build/client/_app/immutable/chunks/CKwL_udH.js.gz +0 -0
- package/build/client/_app/immutable/chunks/{bYs7XjWt.js → CMKnglgu.js} +1 -1
- package/build/client/_app/immutable/chunks/CMKnglgu.js.br +0 -0
- package/build/client/_app/immutable/chunks/CMKnglgu.js.gz +0 -0
- package/build/client/_app/immutable/chunks/CPig5PyW2.js +3 -0
- package/build/client/_app/immutable/chunks/CPig5PyW2.js.br +0 -0
- package/build/client/_app/immutable/chunks/CPig5PyW2.js.gz +0 -0
- package/build/client/_app/immutable/chunks/{DVZgPZIa.js → CfYiL4Vb.js} +1 -1
- package/build/client/_app/immutable/chunks/CfYiL4Vb.js.br +0 -0
- package/build/client/_app/immutable/chunks/CfYiL4Vb.js.gz +0 -0
- package/build/client/_app/immutable/chunks/{CPYkXatp.js → CuiDce17.js} +1 -1
- package/build/client/_app/immutable/chunks/CuiDce17.js.br +2 -0
- package/build/client/_app/immutable/chunks/CuiDce17.js.gz +0 -0
- package/build/client/_app/immutable/chunks/CyQ1x7xK2.js +1 -0
- package/build/client/_app/immutable/chunks/CyQ1x7xK2.js.br +0 -0
- package/build/client/_app/immutable/chunks/CyQ1x7xK2.js.gz +0 -0
- package/build/client/_app/immutable/chunks/DHgYHuvG.js +1 -0
- package/build/client/_app/immutable/chunks/DHgYHuvG.js.br +0 -0
- package/build/client/_app/immutable/chunks/DHgYHuvG.js.gz +0 -0
- package/build/client/_app/immutable/chunks/{BGjKBqhd.js → DN5KlhS6.js} +1 -1
- package/build/client/_app/immutable/chunks/DN5KlhS6.js.br +0 -0
- package/build/client/_app/immutable/chunks/DN5KlhS6.js.gz +0 -0
- package/build/client/_app/immutable/chunks/{j_2fbb1D2.js → DTvCLzCO2.js} +2 -2
- package/build/client/_app/immutable/chunks/DTvCLzCO2.js.br +0 -0
- package/build/client/_app/immutable/chunks/DTvCLzCO2.js.gz +0 -0
- package/build/client/_app/immutable/chunks/DgWl1fLQ.js +1 -0
- package/build/client/_app/immutable/chunks/DgWl1fLQ.js.br +0 -0
- package/build/client/_app/immutable/chunks/DgWl1fLQ.js.gz +0 -0
- package/build/client/_app/immutable/chunks/{SoqLurki2.js → OUabT_0s2.js} +1 -1
- package/build/client/_app/immutable/chunks/OUabT_0s2.js.br +0 -0
- package/build/client/_app/immutable/chunks/OUabT_0s2.js.gz +0 -0
- package/build/client/_app/immutable/chunks/{DwwbPhx_2.js → Z-Nt_Stv2.js} +1 -1
- package/build/client/_app/immutable/chunks/Z-Nt_Stv2.js.br +0 -0
- package/build/client/_app/immutable/chunks/Z-Nt_Stv2.js.gz +0 -0
- package/build/client/_app/immutable/chunks/ZXZvB_hk2.js +11 -0
- package/build/client/_app/immutable/chunks/ZXZvB_hk2.js.br +0 -0
- package/build/client/_app/immutable/chunks/ZXZvB_hk2.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/{DsI4egLI2.js → oly95dF_2.js} +1 -1
- package/build/client/_app/immutable/chunks/oly95dF_2.js.br +0 -0
- package/build/client/_app/immutable/chunks/oly95dF_2.js.gz +0 -0
- package/build/client/_app/immutable/chunks/{CHmg-Am5.js → r_dyVatm.js} +1 -1
- package/build/client/_app/immutable/chunks/r_dyVatm.js.br +0 -0
- package/build/client/_app/immutable/chunks/r_dyVatm.js.gz +0 -0
- package/build/client/_app/immutable/entry/{app.BoGKtCbP.js → app.DDhYPj6j.js} +2 -2
- package/build/client/_app/immutable/entry/app.DDhYPj6j.js.br +0 -0
- package/build/client/_app/immutable/entry/app.DDhYPj6j.js.gz +0 -0
- package/build/client/_app/immutable/entry/start.XTH1H-BV.js +1 -0
- package/build/client/_app/immutable/entry/start.XTH1H-BV.js.br +0 -0
- package/build/client/_app/immutable/entry/start.XTH1H-BV.js.gz +0 -0
- package/build/client/_app/immutable/nodes/0.DtB3-CXO.js +7 -0
- package/build/client/_app/immutable/nodes/0.DtB3-CXO.js.br +0 -0
- package/build/client/_app/immutable/nodes/0.DtB3-CXO.js.gz +0 -0
- package/build/client/_app/immutable/nodes/{1.C41ljjsg.js → 1.Db-k8OuM.js} +1 -1
- package/build/client/_app/immutable/nodes/1.Db-k8OuM.js.br +0 -0
- package/build/client/_app/immutable/nodes/1.Db-k8OuM.js.gz +0 -0
- package/build/client/_app/immutable/nodes/{11.cksFH0wF.js → 11.D76AS3hB.js} +1 -1
- package/build/client/_app/immutable/nodes/11.D76AS3hB.js.br +0 -0
- package/build/client/_app/immutable/nodes/11.D76AS3hB.js.gz +0 -0
- package/build/client/_app/immutable/nodes/12.skE59PP9.js +7 -0
- package/build/client/_app/immutable/nodes/12.skE59PP9.js.br +0 -0
- package/build/client/_app/immutable/nodes/12.skE59PP9.js.gz +0 -0
- package/build/client/_app/immutable/nodes/{13.CncQNyXC.js → 13.BcznBQYK.js} +1 -1
- package/build/client/_app/immutable/nodes/13.BcznBQYK.js.br +0 -0
- package/build/client/_app/immutable/nodes/13.BcznBQYK.js.gz +0 -0
- package/build/client/_app/immutable/nodes/14.CwxinXQX.js +1 -0
- package/build/client/_app/immutable/nodes/14.CwxinXQX.js.br +0 -0
- package/build/client/_app/immutable/nodes/14.CwxinXQX.js.gz +0 -0
- package/build/client/_app/immutable/nodes/15.Bjjh6v7q.js +4 -0
- package/build/client/_app/immutable/nodes/15.Bjjh6v7q.js.br +0 -0
- package/build/client/_app/immutable/nodes/15.Bjjh6v7q.js.gz +0 -0
- package/build/client/_app/immutable/nodes/{16.CwBnCMQO.js → 16.BPe4oI9b.js} +1 -1
- package/build/client/_app/immutable/nodes/16.BPe4oI9b.js.br +0 -0
- package/build/client/_app/immutable/nodes/16.BPe4oI9b.js.gz +0 -0
- package/build/client/_app/immutable/nodes/{2.Bt4Iqxol.js → 2.CB77496k.js} +1 -1
- package/build/client/_app/immutable/nodes/2.CB77496k.js.br +0 -0
- package/build/client/_app/immutable/nodes/2.CB77496k.js.gz +0 -0
- package/build/client/_app/immutable/nodes/3.D5-D84Kj.js +1 -0
- package/build/client/_app/immutable/nodes/3.D5-D84Kj.js.br +0 -0
- package/build/client/_app/immutable/nodes/3.D5-D84Kj.js.gz +0 -0
- package/build/client/_app/immutable/nodes/{4.CeWHKt3l.js → 4.TARjGZi1.js} +3 -3
- package/build/client/_app/immutable/nodes/4.TARjGZi1.js.br +0 -0
- package/build/client/_app/immutable/nodes/4.TARjGZi1.js.gz +0 -0
- package/build/client/_app/immutable/nodes/5.BxXmtjjf.js +52 -0
- package/build/client/_app/immutable/nodes/5.BxXmtjjf.js.br +0 -0
- package/build/client/_app/immutable/nodes/5.BxXmtjjf.js.gz +0 -0
- package/build/client/_app/immutable/nodes/6.Czkgnd6_.js +1 -0
- package/build/client/_app/immutable/nodes/6.Czkgnd6_.js.br +0 -0
- package/build/client/_app/immutable/nodes/6.Czkgnd6_.js.gz +0 -0
- package/build/client/_app/immutable/nodes/7.CniICgZm.js +1 -0
- package/build/client/_app/immutable/nodes/7.CniICgZm.js.br +0 -0
- package/build/client/_app/immutable/nodes/7.CniICgZm.js.gz +0 -0
- package/build/client/_app/immutable/nodes/{8.TZdtToNp.js → 8.B8uueTNo.js} +2 -2
- package/build/client/_app/immutable/nodes/8.B8uueTNo.js.br +0 -0
- package/build/client/_app/immutable/nodes/8.B8uueTNo.js.gz +0 -0
- package/build/client/_app/immutable/nodes/9.DWmk7Pd9.js +3 -0
- package/build/client/_app/immutable/nodes/9.DWmk7Pd9.js.br +0 -0
- package/build/client/_app/immutable/nodes/9.DWmk7Pd9.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-BssfTySQ.js +15 -0
- package/build/server/chunks/1-DAizMjCG.js +9 -0
- package/build/server/chunks/11-O3MGnfVf.js +9 -0
- package/build/server/chunks/12-Cp8R4i27.js +9 -0
- package/build/server/chunks/13-CydwAfRj.js +9 -0
- package/build/server/chunks/14-CScpHG0p.js +9 -0
- package/build/server/chunks/15-Dq0gC40P.js +9 -0
- package/build/server/chunks/16-I6t9ZQA9.js +9 -0
- package/build/server/chunks/2-DVqm7cgN.js +9 -0
- package/build/server/chunks/{3-BeZ4I6nb.js → 3-0r0RSOA9.js} +3 -3
- package/build/server/chunks/4-BeX1xjbu.js +16 -0
- package/build/server/chunks/5-BnIaZs0S.js +9 -0
- package/build/server/chunks/6-BlFb3TLL.js +9 -0
- package/build/server/chunks/7-bS6Z1ZJG.js +9 -0
- package/build/server/chunks/8-B3bpJkfc.js +9 -0
- package/build/server/chunks/9-pHPxcD8H.js +9 -0
- package/build/server/chunks/{DeleteFeature-C-0RJeFW.js → DeleteFeature-3Z9jICf3.js} +247 -14
- package/build/server/chunks/{DeleteProject-DJvXB5DR.js → DeleteProject-Cj-M5uVd.js} +2 -2
- package/build/server/chunks/{DigestView-Bc6k5k3-.js → DigestView-JSb1Scor.js} +4 -3
- package/build/server/chunks/{Effect-BJtLR-6l.js → Effect-DpNpOAyO.js} +4 -2
- package/build/server/chunks/{FeatureCard-DeKMF5V8.js → FeatureCard-BusFP824.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-DrTjebtT.js} +5 -5
- package/build/server/chunks/{ProgressBar-DXpOQRB8.js → ProgressBar-DrNo5Lo9.js} +2 -2
- package/build/server/chunks/{ProjectionViewer-DGH0qozK.js → ProjectionViewer-CzwhMdwz.js} +11 -9
- package/build/server/chunks/{ProjectsIndex-D1cxuUk9.js → ProjectsIndex-DK1e5hKG.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-CLuFKcRr.js} +197 -57
- package/build/server/chunks/{TagDotStrip-akUNaLK0.js → TagDotStrip-CS-Wfj_k.js} +4 -4
- package/build/server/chunks/{TagFilterSelect-JpXYvcx3.js → TagFilterSelect-Bdd_JucF.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-Dnp5YlQh.js} +37 -20
- package/build/server/chunks/{_page.svelte-CjGy40CV.js → _page.svelte--Zk9G67D.js} +15 -15
- package/build/server/chunks/{_page.svelte-lAHWug7_.js → _page.svelte-BaUudRf8.js} +14 -14
- package/build/server/chunks/{_page.svelte-CVVhryMZ.js → _page.svelte-CDMEZbnN.js} +11 -11
- package/build/server/chunks/_page.svelte-CENWYQVb.js +37 -0
- package/build/server/chunks/{_page.svelte-BIPuluus.js → _page.svelte-CRda0InI.js} +14 -14
- package/build/server/chunks/{_page.svelte-BF1rZX3W.js → _page.svelte-Ca-yzK5f.js} +15 -15
- package/build/server/chunks/{_page.svelte-DOL20vdP.js → _page.svelte-CeSKWDA9.js} +13 -13
- package/build/server/chunks/{_page.svelte-BX7sPTsd.js → _page.svelte-D8zwFGI7.js} +14 -14
- package/build/server/chunks/{_page.svelte-Cszy-ZLO.js → _page.svelte-DMmsHdHC.js} +13 -13
- package/build/server/chunks/{_page.svelte-CpnSlvUc.js → _page.svelte-DZp4D5AF.js} +10 -10
- package/build/server/chunks/{_page.svelte-Bhh4sSnB.js → _page.svelte-Dn9ZI02Q.js} +17 -17
- package/build/server/chunks/{_page.svelte-Bj9UPFlS.js → _page.svelte-Dqm9Wt2P.js} +115 -20
- package/build/server/chunks/_page.svelte-Dt6KOtY5.js +37 -0
- package/build/server/chunks/{_page.svelte-BABuSfQV.js → _page.svelte-T6OdMppW.js} +192 -27
- 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-B8Ar4gwq.js +217 -0
- 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-BcdfknA1.js} +119 -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-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-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-DbDbbE8L.js → _server.ts-DVcSGReg.js} +8 -8
- 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-6TbJbwua.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--fWSA_3N.js} +7 -7
- package/build/server/chunks/{client-BsBoZ_uZ.js → client-uZso485O.js} +2 -2
- package/build/server/chunks/{error.svelte-CSlSmxpR.js → error.svelte-r4E3ymf6.js} +4 -4
- package/build/server/chunks/{featureQueueContext-BBZ5nfog.js → featureQueueContext-C1Ce0iiL.js} +2 -2
- package/build/server/chunks/{featureStore.svelte-B_DzQPpz.js → featureStore.svelte-CwrfMF7q.js} +5 -5
- package/build/server/chunks/{internal-DwL-IGZS.js → internal-BhW0DAbW.js} +2 -2
- package/build/server/chunks/{projectBundleClient-DiNldrQC.js → projectBundleClient-CtwUt5G_.js} +3 -3
- package/build/server/chunks/{projectContextStore.svelte-BOQaFWQu.js → projectContextStore.svelte-9emEyKKi.js} +3 -3
- package/build/server/chunks/{projectFeaturesStore.svelte-DpLnV8j6.js → projectFeaturesStore.svelte-VuFAZwFy.js} +2 -2
- package/build/server/chunks/{projectStore.svelte-DUesqJNB.js → projectStore.svelte-Dyr5JX4I.js} +29 -4
- package/build/server/chunks/{reconcile-zgOYJYbP.js → reconcile-Byh0GnqL.js} +2 -2
- package/build/server/chunks/{snapshotRepository-CNzTq4py.js → snapshotRepository-DyccX9dO.js} +245 -84
- package/build/server/chunks/{state-BRTzak3G.js → state-VwavR9uS.js} +3 -3
- package/build/server/chunks/{stores-uVljJ-SP.js → stores-jRWW47mb.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-9Wd8_rCw.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 +89 -9
- 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/batch.ts +88 -18
- 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/entities/Surface.ts +11 -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 +420 -5
- 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 +53 -53
- 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 +211 -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 +78 -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 +0 -1
- 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, and the numeric thresholds a rule or invariant compares the input against, so a value on both sides of an `amount >= 500` gate is tried) so input-gated branches are explored even when the number declares no min/max.
|
|
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 @@
|
|
|
1
|
+
import{V as e,it as t,nt as n,rt as r}from"./D50Xf4Qj.js";import{K as i,N as a,P as o,V as s,dt as c,j as l,t as u,u as d,xt as f}from"./CHEhPoA2.js";import{t as p}from"./Cl7Z3e6-.js";var m=e=>JSON.stringify({format:`unspaghettit`,version:1,feature:e},null,2),h=e=>{if(`actions`in e)return e;if(`capabilities`in e){let{capabilities:t,...n}=e;return{...n,actions:t}}return e},g=e=>{let t;try{t=JSON.parse(e)}catch(e){throw Error(`Invalid JSON: ${e.message}`)}if(!t||typeof t!=`object`)throw Error(`Expected a feature export object`);let n=t;if(n.format!==`unspaghettit`)throw Error(`Not an Unspaghettit export (missing format field)`);if(n.version!==1)throw Error(`Unsupported export version: ${n.version}`);let r=n.feature??n.experience;if(!r)throw Error(`Export envelope is missing a feature`);let o=(r.surfaces??[]).map(e=>h(e)),l=r,u=l.entities??l.data??[];return i(s(f(c({...r,tags:a(r.tags),surfaces:o,personas:r.personas??[],resources:r.resources??[],entities:u}))))},_=`Unknown`,v=new class{#e=t(!0);get loading(){return e(this.#e)}set loading(e){r(this.#e,e,!0)}#t=t(n([]));get summaries(){return e(this.#t)}set summaries(e){r(this.#t,e,!0)}#n=t(``);get search(){return e(this.#n)}set search(e){r(this.#n,e,!0)}#r=t(null);get pendingDeleteId(){return e(this.#r)}set pendingDeleteId(e){r(this.#r,e,!0)}#i=t(``);get selectedProjectId(){return e(this.#i)}set selectedProjectId(e){r(this.#i,e,!0)}#a=t(null);get error(){return e(this.#a)}set error(e){r(this.#a,e,!0)}async refresh(){try{this.loading=!0,this.error=null;let e=await u();this.summaries=[...await e.useCases.listProjects()]}catch(e){this.error=e.message}finally{this.loading=!1}}async refreshSilent(){try{let e=await u();this.summaries=[...await e.useCases.listProjects()],this.error=null}catch(e){this.error=e.message}}setSearch(e){this.search=e,p(`project.search_updated`,{query:e})}setSelectedProject(e){this.selectedProjectId=e,e&&p(`project.opened`,{id:e})}openProject(e){return this.setSelectedProject(e),`/projects/${e}`}stagePendingDelete(e){this.pendingDeleteId=e,p(`project.delete_requested`,{id:e})}clearPendingDelete(){this.pendingDeleteId=null}async create(e,t){let n=await(await u()).useCases.createProject({name:e,description:t});return await this.refreshSilent(),p(`project.created`,{id:String(n.id),name:n.name}),n.id}async remove(e){this.summaries=this.summaries.filter(t=>String(t.id)!==String(e)),this.clearPendingDelete(),await(await u()).useCases.deleteProject(e),p(`project.deleted`,{id:String(e)})}async reconcileOrphanFeatures(){let e=await u(),t=await e.useCases.listFeatures();if(t.length===0)return;let n=await e.useCases.listProjects(),r=new Set;for(let t of n){let n=await e.useCases.getProject(t.id);if(n)for(let e of n.featureIds)r.add(String(e))}let i=t.filter(e=>!r.has(String(e.id)));if(i.length===0)return;let a=n.find(e=>e.name===_);if(!a){let t=await e.useCases.createProject({name:_,description:`Auto-created bucket. Holds features that are not assigned to any other project. Rename or reassign to clean it up.`});a={id:t.id,name:t.name,description:t.description,featureCount:0,createdAt:t.createdAt,updatedAt:t.updatedAt}}for(let t of i)await e.useCases.addFeatureToProject(a.id,t.id);await this.refreshSilent()}},y=new class{#e=t(!0);get loading(){return e(this.#e)}set loading(e){r(this.#e,e,!0)}#t=t(n([]));get summaries(){return e(this.#t)}set summaries(e){r(this.#t,e,!0)}#n=t(null);get error(){return e(this.#n)}set error(e){r(this.#n,e,!0)}async refresh(){try{this.loading=!0,this.error=null;let e=await u();this.summaries=[...await e.useCases.listFeaturesWithMaturity()]}catch(e){this.error=e.message}finally{this.loading=!1}}async refreshSilent(){try{let e=await u();this.summaries=[...await e.useCases.listFeaturesWithMaturity()],this.error=null}catch(e){this.error=e.message}}async create(e,t){let n=await(await u()).useCases.createFeature({name:e,description:t});return await this.refreshSilent(),p(`feature.created`,{id:n.id,name:n.name}),n.id}async addTag(e,t){let n=await u(),r=await n.useCases.getFeature(e);r&&(await n.useCases.saveFeature({...r,tags:l(r.tags,t)}),await this.refreshSilent())}async removeTag(e,t){let n=await u(),r=await n.useCases.getFeature(e);r&&(await n.useCases.saveFeature({...r,tags:o(r.tags,t)}),await this.refreshSilent())}async setCore(e,t){let n=await u(),r=await n.useCases.getFeature(e);r&&(await n.useCases.saveFeature({...r,tags:d(r.tags,t)}),await this.refreshSilent())}async remove(e){this.summaries=this.summaries.filter(t=>String(t.id)!==String(e)),await(await u()).useCases.deleteFeature(e),p(`feature.deleted`,{id:e})}async loadSamples(){let e=await(await u()).useCases.loadSamples();return await this.refreshSilent(),await v.refreshSilent(),e}async importJson(e){let t=g(e),n=await u(),r=this.summaries.some(e=>e.id===t.id),i=await n.useCases.saveFeature(t);return await this.refreshSilent(),{id:i.id,name:i.name,overwrote:r}}};export{v as n,m as r,y as t};
|
|
Binary file
|
|
Binary file
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{n as e}from"./
|
|
1
|
+
import{n as e}from"./DgWl1fLQ.js";import{Dt as t,Tt as n,ht as r}from"./CHEhPoA2.js";import"./C2-NAsCA.js";import{t as i}from"./CRYP5_po.js";import{t as a}from"./CfYiL4Vb.js";import{t as o}from"./BGtpkapy.js";import{t as s}from"./BQ9GodWX.js";var c=e=>t=>typeof t?.name==`string`&&i(t.name,e),l=()=>{let e=a.feature;if(!e)return null;for(let t=e.surfaces.length-1;t>=0;t--){let n=e.surfaces[t];if(n&&n.actions.length!==0)return n.actions[n.actions.length-1]??null}return null},u=()=>{let e=l();return e?e.parameters.some(e=>i(e.name,`politely`)&&e.type===`boolean`):!1},d=()=>{let e=l();return e?e.rules.filter(e=>!e.condition||`kind`in e.condition?!1:r(e.condition.left)&&e.effect.type===`show_message`).length:0},f={id:`first-feature`,name:`Build your first feature, end to end`,summary:`Walks you from an empty app to a Feature with one Action you run in the simulator. About 3 minutes. Uses fixed names so the experience is the same for everyone.`,steps:[{id:`welcome`,title:`Welcome`,body:`We'll build a tiny Feature together and run it in the simulator. We'll use fixed names so the rest of the tutorial reads the same way for you as for anyone else. Click Next when you're ready.`,advance:{kind:`manual`}},{id:`new-project`,title:`Create a project`,body:`Click 'New project'. A Project groups Features that belong to the same product or codebase.`,target:`[data-tour="new-project-button"]`,route:{pathname:`/projects`,label:`Go to Projects`},advance:{kind:`click`,selector:`[data-tour="new-project-button"]`}},{id:`fill-project`,title:`Name the project`,body:`Type exactly 'Hello World' in the Name field, then click 'New project'. The description is pre-filled - keep it as-is or tweak if you want.`,target:`[data-tour="new-project-form"]`,focusSelector:`[data-tour="new-project-form"] input[type="text"]`,prefill:[{selector:`[data-tour="new-project-description"]`,value:`A first project to learn Unspaghettit.`}],requireExact:{formId:`new-project`,value:`Hello World`},advance:{kind:`event`,event:`project.created`,match:c(`Hello World`)}},{id:`new-feature`,title:`Create a feature`,body:`Inside your project, click 'New feature'. A Feature is one coherent slice of behavior. Keep it small.`,target:`[data-tour="new-feature-button"]`,advance:{kind:`click`,selector:`[data-tour="new-feature-button"]`}},{id:`fill-feature`,title:`Name the feature`,body:`Type 'Greeting' in the Name field, then click 'Create feature'. The description is pre-filled.`,target:`[data-tour="new-feature-form"]`,focusSelector:`[data-tour="new-feature-form"] input[type="text"]`,prefill:[{selector:`[data-tour="new-feature-description"]`,value:`User opens the app and is welcomed.`}],requireExact:{formId:`new-feature`,value:`Greeting`},advance:{kind:`event`,event:`feature.created`,match:c(`Greeting`)}},{id:`add-surface`,title:`Add a surface`,body:`Click 'Add surface'. A Surface is one context where actions happen (a screen, a terminal, a workflow).`,target:`[data-tour="add-surface-button"]`,advance:{kind:`click`,selector:`[data-tour="add-surface-button"]`}},{id:`chooser-create-new`,title:`Pick "Create new"`,body:`We're starting from scratch, so click the 'Create new' card.`,target:`[data-tour="chooser-create-new"]`,advance:{kind:`click`,selector:`[data-tour="chooser-create-new"]`}},{id:`fill-surface`,title:`Name the surface`,body:`Surface name: type exactly 'Welcome Screen'. Keep the type on Screen. Click 'Create surface' to submit.`,target:`[data-tour="blank-surface-form"]`,focusSelector:`[data-tour="blank-surface-form"] input[type="text"]`,requireExact:{formId:`blank-surface`,value:`Welcome Screen`},advance:{kind:`event`,event:`editor.surface.added`,match:c(`Welcome Screen`)}},{id:`add-action`,title:`Add an action`,body:`Type exactly 'Say Hello' in the action form, then click 'Add action' (or press Enter). An Action is something the user or system can do on this surface.`,target:`[data-tour="add-action-form"]`,focusSelector:`[data-tour="add-action-form"] input[type="text"]`,requireExact:{formId:`add-action`,value:`Say Hello`},advance:{kind:`event`,event:`editor.action.added`,match:c(`Say Hello`)}},{id:`add-parameter`,title:`Give the action a parameter`,body:`The Say Hello editor just opened. In the Parameters section, click '+ Parameter'. The name field will focus automatically. Then:
|
|
2
2
|
1. type 'politely' for the Name
|
|
3
3
|
2. change Type to 'boolean'
|
|
4
4
|
Next unlocks once a 'politely' boolean parameter exists on Say Hello.`,target:`[data-tour="action-parameters-section"]`,advance:{kind:`manual`},canAdvance:u},{id:`add-rule-not-polite`,title:`Rule 1: the casual hello`,body:`We want the action to say 'Hi.' only when politely is NO. Add the first rule:
|
|
@@ -28,6 +28,6 @@ Now flip politely to 'Yes' and click Run again. The output flips:
|
|
|
28
28
|
- 'Hello, friend, lovely to see you.' fires - rule 2 matches
|
|
29
29
|
- rule 1 stays silent
|
|
30
30
|
|
|
31
|
-
Same action, same rules on disk, ONE OR THE OTHER message at runtime - just because one input flipped. That's the whole point of rules: fork behaviour by parameters or state, not by writing two actions. Toggle politely and re-run as many times as you like; click Next when done.`,target:`[data-tour="simulator-panel"]`,panelPosition:`avoid-target`,advance:{kind:`manual`}},{id:`maturity-tour`,title:`Maturity score`,body:`The MAT tile shows how complete your spec is. Every action without scenarios, every rule without a description, every state without a default - all chip points off. Click it later to see exactly what's missing and a 'Fix' button that jumps you to the right place. Your AI agent reads the same checklist via MCP and can write the missing bits for you.`,target:`[data-tour="maturity-toggle"]`,panelPosition:`below-target`,advance:{kind:`manual`}},{id:`implementation-tour`,title:`Implementation score`,body:"The IMPL tile is a dash today - we haven't tagged any code yet. Once your AI agent writes the implementation and updates `.unspa.json` with `{ action: 'a1b2c3d4' -> file, line }`, this turns green in real time. You'll see, action by action, what's coded and what's still spec-only - and the agent can resolve the gaps without losing context.",target:`[data-tour="implementation-toggle"]`,panelPosition:`below-target`,advance:{kind:`manual`}},{id:`mcp-tour`,title:`Hook up your AI agent`,body:`Every project page has an MCP button (next to Graph) that registers this dashboard as an MCP server for your AI coding agent, scoped to that project's features. Once connected, the agent can list features, add actions, run scenarios, score maturity, and report implementation - all through typed tool calls instead of pasting prose. That's the loop: you sketch behaviour, the agent fills it in, the spec stays the source of truth.`,advance:{kind:`manual`}},{id:`done`,title:`That's the model in miniature`,body:`A Project holds Features. A Feature holds Surfaces. A Surface holds Actions. An Action takes parameters, fires effects, and rules fork the outcome. The shape doesn't change as you go deeper. Now hand it to your AI agent and let them build the rest with you.`,lockScroll:!0,advance:{kind:`manual`}}]};async function p(){let
|
|
31
|
+
Same action, same rules on disk, ONE OR THE OTHER message at runtime - just because one input flipped. That's the whole point of rules: fork behaviour by parameters or state, not by writing two actions. Toggle politely and re-run as many times as you like; click Next when done.`,target:`[data-tour="simulator-panel"]`,panelPosition:`avoid-target`,advance:{kind:`manual`}},{id:`maturity-tour`,title:`Maturity score`,body:`The MAT tile shows how complete your spec is. Every action without scenarios, every rule without a description, every state without a default - all chip points off. Click it later to see exactly what's missing and a 'Fix' button that jumps you to the right place. Your AI agent reads the same checklist via MCP and can write the missing bits for you.`,target:`[data-tour="maturity-toggle"]`,panelPosition:`below-target`,advance:{kind:`manual`}},{id:`implementation-tour`,title:`Implementation score`,body:"The IMPL tile is a dash today - we haven't tagged any code yet. Once your AI agent writes the implementation and updates `.unspa.json` with `{ action: 'a1b2c3d4' -> file, line }`, this turns green in real time. You'll see, action by action, what's coded and what's still spec-only - and the agent can resolve the gaps without losing context.",target:`[data-tour="implementation-toggle"]`,panelPosition:`below-target`,advance:{kind:`manual`}},{id:`mcp-tour`,title:`Hook up your AI agent`,body:`Every project page has an MCP button (next to Graph) that registers this dashboard as an MCP server for your AI coding agent, scoped to that project's features. Once connected, the agent can list features, add actions, run scenarios, score maturity, and report implementation - all through typed tool calls instead of pasting prose. That's the loop: you sketch behaviour, the agent fills it in, the spec stays the source of truth.`,advance:{kind:`manual`}},{id:`done`,title:`That's the model in miniature`,body:`A Project holds Features. A Feature holds Surfaces. A Surface holds Actions. An Action takes parameters, fires effects, and rules fork the outcome. The shape doesn't change as you go deeper. Now hand it to your AI agent and let them build the rest with you.`,lockScroll:!0,advance:{kind:`manual`}}]};async function p(){let r=await o.loadSamples(),i=r.addedProjects.length+r.addedFeatures.length>0,a=r.skippedProjects.length+r.skippedFeatures.length>0;if(!i&&!a){await n({title:`Nothing to load`,message:`No samples are bundled in this build.`,tone:`warning`});return}if(!i){await n({title:`Already available`,message:s(r,`skipped`)+`
|
|
32
32
|
|
|
33
|
-
Delete them and load again to restore from the sample.`,tone:`info`});return}if(
|
|
33
|
+
Delete them and load again to restore from the sample.`,tone:`info`});return}if(r.addedProjects.length>0){let n=r.addedProjects.length,i=r.addedFeatures.length,a=n===1?`project`:`projects`,o=i>0?`Added ${n} ${a} and ${i} ${i===1?`feature`:`features`}.`:`Added ${n} ${a}.`,s=r.addedFeatures.map(e=>e.name).join(` · `),c=await t({title:`Samples loaded`,message:o,options:r.addedProjects.map(e=>({id:e.id,label:`Open ${e.name}`,description:s||void 0})),cancelLabel:`Close`,tone:`success`});c&&await e(`/projects/${c}`);return}await n({title:`Samples loaded`,message:s(r,`added`)+(a?`\n\nAlready present:\n${s(r,`skipped`)}`:``),tone:`success`})}export{f as n,p as t};
|
|
Binary file
|
|
Binary file
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{$ as e,F as t,M as n,N as r,R as i,V as a,_t as o,a as s,d as c,dt as l,et as ee,ft as u,j as d,ot as f,q as p,tt as m,y as h,z as g}from"./D50Xf4Qj.js";import"./xihTtKlq.js";import{t as te}from"./
|
|
1
|
+
import{$ as e,F as t,M as n,N as r,R as i,V as a,_t as o,a as s,d as c,dt as l,et as ee,ft as u,j as d,ot as f,q as p,tt as m,y as h,z as g}from"./D50Xf4Qj.js";import"./xihTtKlq.js";import{t as te}from"./CKwL_udH.js";import{t as _}from"./BoAjz79U2.js";var v=t(`<p class="line-clamp-3 text-sm leading-6 text-slate-600"> </p>`),ne=t(`<p class="text-sm leading-6 text-slate-500">No description yet. Open this feature to shape its behavior model.</p>`),re=t(`<span class="px-1">/</span>`),ie=t(`<span class="text-red-600"> </span> <!>`,1),ae=t(`<span class="text-amber-700"> </span>`),y=t(`<span class="text-emerald-700">All checks pass</span>`),b=t(`<button type="button"> </button>`),x=t(`<article 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></div> <div class="space-y-4"><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> <div class="relative z-10 flex shrink-0 flex-col items-end gap-1"><span><span class="text-[9px] font-semibold uppercase tracking-wide opacity-70">Mat</span> <span class="tabular-nums"> </span></span> <span><span class="text-[9px] font-semibold uppercase tracking-wide opacity-70">Impl</span> <span class="tabular-nums"> </span></span></div></div> <!> <div class="relative z-10"><!></div> <div class="space-y-2"><!> <div class="text-xs text-slate-500"><!> <!> <!></div></div></div> <div class="mt-5 flex items-center justify-between gap-3 border-t border-hairline pt-3 text-xs text-slate-500"><span class="min-w-0 flex-1 truncate"> </span> <div class="relative z-10 flex shrink-0 items-center gap-1"><!> <button type="button" class="rounded px-2 py-1 text-slate-400 opacity-0 transition group-hover:opacity-100 group-focus-within:opacity-100 hover:bg-red-50 hover:text-red-600"> </button></div></div></article>`);function S(t,i){u(i,!0);let S=s(i,`tagTypeOptions`,19,()=>[]),oe=s(i,`deleteLabel`,3,`Delete`),C=s(i,`queued`,3,!1),w=e=>e>=80?`bg-emerald-50 text-emerald-700 border-emerald-200`:e>=50?`bg-amber-50 text-amber-800 border-amber-200`:`bg-red-50 text-red-700 border-red-200`,se=f(()=>w(i.summary.maturityPercentage)),ce=f(()=>i.summary.implementationPercentage===null||!i.summary.implementationHasReport?`bg-slate-50 text-slate-500 border-slate-200`:w(i.summary.implementationPercentage)),le=f(()=>i.summary.implementationPercentage===null?`-`:i.summary.implementationHasReport?`${i.summary.implementationPercentage}%`:`-`),T=f(()=>i.summary.implementationPercentage===null?`No taggable entities yet (actions, events, rules...)`:i.summary.implementationHasReport?`Implementation coverage: ${i.summary.implementationFoundCount} of ${i.summary.implementationExpectedCount} expected tags found in code`:`No .unspa.json report yet. Run report_implementation_status_batch to populate.`),E=f(()=>i.summary.maturityPercentage>=80?`from-emerald-400 via-brand-mint to-brand-500`:i.summary.maturityPercentage>=50?`from-amber-400 via-brand-ochre to-brand-peach`:`from-red-400 via-brand-coral to-brand-pink`);var D=x(),O=e(D),k=m(O,2),A=e(k),j=e(A),M=e(j),ue=e(M,!0);o(M),o(j);var N=m(j,2),P=e(N),F=m(e(P),2),I=e(F);o(F),o(P);var L=m(P,2),R=m(e(L),2),z=e(R,!0);o(R),o(L),o(N),o(A);var B=m(A,2),V=t=>{var a=v(),s=e(a,!0);o(a),p(()=>n(s,i.summary.description)),r(t,a)},H=e=>{r(e,ne())};d(B,e=>{i.summary.description?e(V):e(H,-1)});var U=m(B,2);te(e(U),{get tags(){return i.summary.tags},get onAddTag(){return i.onAddTag},get onRemoveTag(){return i.onRemoveTag},get typeOptions(){return S()}}),o(U);var W=m(U,2),G=e(W);_(G,{get percentage(){return i.summary.maturityPercentage},size:`sm`,get ariaLabel(){return`Maturity ${i.summary.maturityPercentage??``}%`}});var K=m(G,2),q=e(K),de=t=>{var a=ie(),s=ee(a),c=e(s);o(s);var l=m(s,2),u=e=>{r(e,re())};d(l,e=>{i.summary.recommendedIssueCount>0&&e(u)}),p(()=>n(c,`${i.summary.criticalIssueCount??``} critical`)),r(t,a)};d(q,e=>{i.summary.criticalIssueCount>0&&e(de)});var J=m(q,2),fe=t=>{var a=ae(),s=e(a);o(a),p(()=>n(s,`${i.summary.recommendedIssueCount??``} recommended`)),r(t,a)};d(J,e=>{i.summary.recommendedIssueCount>0&&e(fe)});var pe=m(J,2),me=e=>{r(e,y())};d(pe,e=>{i.summary.criticalIssueCount===0&&i.summary.recommendedIssueCount===0&&e(me)}),o(K),o(W),o(k);var Y=m(k,2),X=e(Y),he=e(X);o(X);var Z=m(X,2),Q=e(Z),ge=t=>{var a=b(),s=e(a,!0);o(a),p(()=>{h(a,1,`rounded px-2 py-1 transition ${C()?`font-medium text-brand-700 opacity-100 hover:bg-cyan-50 hover:text-brand-900`:`text-slate-400 opacity-0 hover:bg-cyan-50 hover:text-brand-800 group-hover:opacity-100 group-focus-within:opacity-100`}`),c(a,`title`,C()?`In implementation queue (click to remove)`:`Add to implementation queue`),n(s,C()?`✓ queued`:`+ queue`)}),g(`click`,a,function(...e){(C()?i.onRemoveFromQueue:i.onAddToQueue)?.apply(this,e)}),r(t,a)};d(Q,e=>{(i.onAddToQueue||i.onRemoveFromQueue)&&e(ge)});var $=m(Q,2),_e=e($,!0);o($),o(Z),o(Y),o(D),p(e=>{h(O,1,`absolute inset-x-0 top-0 h-1 bg-linear-to-r ${a(E)??``}`),c(j,`href`,`/features/${i.summary.id}`),n(ue,i.summary.name),h(P,1,`inline-flex items-center gap-1 rounded-md border px-1.5 py-0.5 text-[10px] font-medium ${a(se)??``}`),c(P,`title`,`Maturity score: how complete this feature's behavior model is (${i.summary.maturityPercentage??``}% of spec quality checks pass)`),n(I,`${i.summary.maturityPercentage??``}%`),h(L,1,`inline-flex items-center gap-1 rounded-md border px-1.5 py-0.5 text-[10px] font-medium ${a(ce)??``}`),c(L,`title`,a(T)),n(z,a(le)),n(he,`${i.summary.surfaceCount??``} surface${i.summary.surfaceCount===1?``:`s`} / ${i.summary.actionCount??``}
|
|
2
2
|
action${i.summary.actionCount===1?``:`s`} / Updated ${e??``}`),n(_e,oe())},[()=>new Date(i.summary.updatedAt).toLocaleDateString()]),g(`click`,$,function(...e){i.onDelete?.apply(this,e)}),r(t,D),l()}i([`click`]);export{S as t};
|
|
Binary file
|
|
Binary file
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{V as e,it as t,nt as n,ot as r,rt as i}from"./D50Xf4Qj.js";import{c as a,o,s,t as c}from"./CHEhPoA2.js";import{t as l}from"./Cl7Z3e6-.js";import{n as u,r as d}from"./CFOrhKj0.js";var f=new class{#e=t(!0);get loading(){return e(this.#e)}set loading(e){i(this.#e,e,!0)}#t=t(null);get project(){return e(this.#t)}set project(e){i(this.#t,e,!0)}#n=r(()=>this.project?String(this.project.id):``);get id(){return e(this.#n)}set id(e){i(this.#n,e)}#r=r(()=>this.project?.name??``);get name(){return e(this.#r)}set name(e){i(this.#r,e)}#i=r(()=>this.project?this.project.featureIds.map(String):[]);get featureIds(){return e(this.#i)}set featureIds(e){i(this.#i,e)}#a=t(null);get error(){return e(this.#a)}set error(e){i(this.#a,e,!0)}#o=t(null);get saveError(){return e(this.#o)}set saveError(e){i(this.#o,e,!0)}#s=t(!1);get saving(){return e(this.#s)}set saving(e){i(this.#s,e,!0)}#c=t(!1);get dirty(){return e(this.#c)}set dirty(e){i(this.#c,e,!0)}#l=t(``);get lastSavedAt(){return e(this.#l)}set lastSavedAt(e){i(this.#l,e,!0)}#u=t(`features`);get activePanel(){return e(this.#u)}set activePanel(e){i(this.#u,e,!0)}#d=t(``);get selectedFeatureId(){return e(this.#d)}set selectedFeatureId(e){i(this.#d,e,!0)}#f=t(``);get search(){return e(this.#f)}set search(e){i(this.#f,e,!0)}#p=t(n([]));get historyEntries(){return e(this.#p)}set historyEntries(e){i(this.#p,e,!0)}#m=t(-1);get historyCursor(){return e(this.#m)}set historyCursor(e){i(this.#m,e,!0)}currentId=null;client=null;clientUnsubscribe=null;historyUnsubscribe=null;async load(e){try{this.loading=!0,this.error=null,this.currentId=e;let t=await(await c()).useCases.getProject(e);this.project=t,this.dirty=!1,this.lastSavedAt=t?.updatedAt??``,this.subscribeRoom(e)}catch(e){this.error=e.message}finally{this.loading=!1}}setActivePanel(e){this.activePanel=e,l(`project.panel_switched`,{panel:e})}setSearch(e){this.search=e,l(`project.editor_search_updated`,{query:e})}setSelectedFeature(e){this.selectedFeatureId=e,e&&l(`project.feature_opened`,{featureId:e})}async addFeature(e){if(!(!this.project||!this.currentId)){this.saving=!0,this.saveError=null;try{let t=await(await c()).useCases.addFeatureToProject(this.currentId,e);this.applyProject(t),l(`project.feature_added`,{projectId:String(this.currentId),featureId:String(e)})}catch(e){this.saveError=e.message}finally{this.saving=!1}}}async removeFeature(e){if(!(!this.project||!this.currentId)){this.saving=!0,this.saveError=null;try{let t=await(await c()).useCases.removeFeatureFromProject(this.currentId,e);this.applyProject(t),l(`project.feature_removed`,{projectId:String(this.currentId),featureId:String(e)})}catch(e){this.saveError=e.message}finally{this.saving=!1}}}async rename(e){if(this.project){this.saving=!0,this.saveError=null;try{let t=await(await c()).useCases.saveProject({...this.project,name:e.trim()});this.applyProject(t)}catch(e){this.saveError=e.message}finally{this.saving=!1}}}async updateMetadata(e,t){if(!this.project)return;let n=e.trim();if(n.length!==0){this.saving=!0,this.saveError=null;try{let e=await c(),r=t.trim(),i=await e.useCases.saveProject({...this.project,name:n,description:r.length>0?r:void 0});this.applyProject(i),l(`project.saved`,{id:String(i.id),name:i.name})}catch(e){this.saveError=e.message}finally{this.saving=!1}}}async setDescription(e){if(this.project){this.saving=!0,this.saveError=null;try{let t=await c(),n=e.trim(),r=await t.useCases.saveProject({...this.project,description:n.length>0?n:void 0});this.applyProject(r)}catch(e){this.saveError=e.message}finally{this.saving=!1}}}async declareCoreFeature(e,t){await this.saveWith(n=>o(n,{value:e,description:t}))}async updateCoreFeature(e,t){await this.saveWith(n=>a(n,e,{description:t}))}async removeCoreFeature(e){await this.saveWith(t=>s(t,e))}async saveWith(e){if(this.project){this.saving=!0,this.saveError=null;try{let t=await(await c()).useCases.saveProject(e(this.project));this.applyProject(t)}catch(e){this.saveError=e.message}finally{this.saving=!1}}}dismissSaveError(){this.saveError=null}reset(){this.clientUnsubscribe&&=(this.clientUnsubscribe(),null),this.historyUnsubscribe&&=(this.historyUnsubscribe(),null),this.client=null,this.currentId=null,this.project=null,this.historyEntries=[],this.historyCursor=-1,this.error=null,this.saveError=null,this.loading=!0,this.saving=!1,this.dirty=!1,this.lastSavedAt=``,this.activePanel=`features`,this.selectedFeatureId=``,this.search=``}applyProject(e){this.project?u(this.project,e):this.project=e,this.dirty=!1,this.lastSavedAt=e.updatedAt}subscribeRoom(e){this.clientUnsubscribe&&=(this.clientUnsubscribe(),null),this.historyUnsubscribe&&=(this.historyUnsubscribe(),null);let t=d(`project`,e);this.client=t,this.clientUnsubscribe=t.observe((t,n)=>{n!==`local`&&t&&this.currentId===e&&(this.project?u(this.project,t):this.project=t,this.lastSavedAt=t.updatedAt)}),this.historyEntries=t.history.entries,this.historyCursor=t.history.cursor,this.historyUnsubscribe=t.observeHistory(t=>{this.currentId===e&&(this.historyEntries=t.entries,this.historyCursor=t.cursor)})}};export{f as t};
|
|
Binary file
|
|
Binary file
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{V as e,it as t,nt as n,rt as r}from"./D50Xf4Qj.js";import{t as i}from"./
|
|
1
|
+
import{V as e,it as t,nt as n,rt as r}from"./D50Xf4Qj.js";import{t as i}from"./CHEhPoA2.js";var a=new class{#e=t(!1);get loading(){return e(this.#e)}set loading(e){r(this.#e,e,!0)}#t=t(n([]));get features(){return e(this.#t)}set features(e){r(this.#t,e,!0)}#n=t(n([]));get allSummaries(){return e(this.#n)}set allSummaries(e){r(this.#n,e,!0)}#r=t(null);get error(){return e(this.#r)}set error(e){r(this.#r,e,!0)}async load(e){this.loading=!0,this.error=null;try{let t=await i(),n=await Promise.all(e.map(e=>t.useCases.getFeature(e)));this.features=n.filter(e=>e!==null)}catch(e){this.error=e.message}finally{this.loading=!1}}async syncWith(e){let t=new Set(e.map(String)),n=new Map(this.features.map(e=>[String(e.id),e])),r=e.filter(e=>!n.has(String(e))),a=n;if(r.length>0)try{let e=await i(),t=await Promise.all(r.map(t=>e.useCases.getFeature(t)));a=new Map(n);for(let e of t)e&&a.set(String(e.id),e)}catch(e){this.error=e.message;return}this.features=e.map(e=>a.get(String(e))).filter(e=>e!==void 0&&t.has(String(e.id)))}async refetchOne(e){try{let t=await(await i()).useCases.getFeature(e),n=this.features.findIndex(t=>String(t.id)===String(e));if(!t){n>=0&&(this.features=[...this.features.slice(0,n),...this.features.slice(n+1)]);return}n>=0?this.features=[...this.features.slice(0,n),t,...this.features.slice(n+1)]:this.features=[...this.features,t]}catch(e){this.error=e.message}}async loadAllSummaries(){try{let e=await i();this.allSummaries=[...await e.useCases.listFeatures()]}catch(e){this.error=e.message}}reset(){this.features=[],this.allSummaries=[],this.loading=!1,this.error=null}};export{a as t};
|
|
Binary file
|
|
Binary file
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{V as e,it as t,rt as n}from"./D50Xf4Qj.js";import{
|
|
1
|
+
import{V as e,it as t,rt as n}from"./D50Xf4Qj.js";import{R as r}from"./CHEhPoA2.js";import{r as i}from"./CFOrhKj0.js";var a=new class{#e=t(!1);get loading(){return e(this.#e)}set loading(e){n(this.#e,e,!0)}#t=t(!1);get refreshing(){return e(this.#t)}set refreshing(e){n(this.#t,e,!0)}#n=t(null);get status(){return e(this.#n)}set status(e){n(this.#n,e,!0)}#r=t(null);get error(){return e(this.#r)}set error(e){n(this.#r,e,!0)}#i=t(null);get lastFetchedAt(){return e(this.#i)}set lastFetchedAt(e){n(this.#i,e,!0)}#a=t(null);get lastUpdateSignalAt(){return e(this.#a)}set lastUpdateSignalAt(e){n(this.#a,e,!0)}currentId=null;client=null;clientUnsubscribe=null;async load(e){this.currentId=e,this.error=null,this.loading=!0;try{await this.fetchOnce(e),this.subscribeRoom(e)}finally{this.loading=!1}}async refresh(){if(!(!this.currentId||this.refreshing)){this.refreshing=!0,this.error=null;try{await this.fetchOnce(this.currentId)}finally{this.refreshing=!1}}}reset(){this.clientUnsubscribe&&=(this.clientUnsubscribe(),null),this.client=null,this.currentId=null,this.status=null,this.error=null,this.loading=!1,this.refreshing=!1,this.lastFetchedAt=null,this.lastUpdateSignalAt=null}async fetchOnce(e){try{let t=await r(`/api/snapshots/${e}/implementation-status`);if(!t.ok){this.status=null;return}let n=await t.json();this.status=n??null,this.lastFetchedAt=new Date().toISOString()}catch(e){this.error=e.message}}subscribeRoom(e){this.clientUnsubscribe&&=(this.clientUnsubscribe(),null);let t=i(`implementation-status`,e);this.client=t,this.clientUnsubscribe=t.observe((t,n)=>{this.currentId===e&&n!==`local`&&(this.lastUpdateSignalAt=new Date().toISOString(),this.status=t,this.lastFetchedAt=this.lastUpdateSignalAt)})}};export{a as t};
|
|
Binary file
|
|
Binary file
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{$ as e,B as t,F as n,J as r,M as i,N as a,O as o,P as s,Q as c,R as l,V as u,_t as d,a as f,d as p,dt as m,et as h,ft as g,gt as _,it as v,j as y,l as b,m as x,ot as S,q as C,rt as w,s as T,tt as E,u as D,v as O,y as k,z as A}from"./D50Xf4Qj.js";import"./xihTtKlq.js";import{
|
|
1
|
+
import{$ as e,B as t,F as n,J as r,M as i,N as a,O as o,P as s,Q as c,R as l,V as u,_t as d,a as f,d as p,dt as m,et as h,ft as g,gt as _,it as v,j as y,l as b,m as x,ot as S,q as C,rt as w,s as T,tt as E,u as D,v as O,y as k,z as A}from"./D50Xf4Qj.js";import"./xihTtKlq.js";import{I as j,L as M,M as N,k as P}from"./CHEhPoA2.js";import{n as F,t as I}from"./r_dyVatm.js";import{n as L}from"./CKwL_udH.js";var R=n(`<button type="button"></button>`),z=n(`<div class="absolute right-0 z-30 mt-2 w-56 rounded-lg border border-hairline bg-white p-3 shadow-lg" role="dialog" aria-label="Color picker"><p class="mb-2 text-[10px] font-semibold uppercase tracking-wider text-slate-500">Presets</p> <div class="grid grid-cols-5 gap-2"></div> <div class="mt-3 border-t border-hairline pt-3"><label class="flex items-center justify-between gap-2 text-xs text-slate-700"><span class="font-medium">Custom</span> <input type="color" class="h-7 w-12 cursor-pointer rounded border border-slate-300 bg-white p-0.5"/></label></div> <div class="mt-2"><button type="button" class="flex w-full items-center gap-2 rounded-md px-2 py-1.5 text-left text-xs font-medium text-slate-600 transition hover:bg-slate-50 hover:text-red-700 disabled:cursor-default disabled:opacity-40 disabled:hover:bg-transparent disabled:hover:text-slate-600"><!> <span>No color</span></button></div></div>`),B=n(`<div class="relative inline-block"><button type="button" class="flex size-6 cursor-pointer items-center justify-center overflow-hidden rounded-full ring-1 ring-inset ring-slate-300 transition hover:ring-slate-500" aria-haspopup="dialog" title="Pick a color"><!></button> <!></div>`);function V(t,n){g(n,!0);let i=f(n,`label`,3,`tag`),s=v(!1),c=v(null),l=v(null);function h(){w(s,!u(s))}function b(){w(s,!1)}r(()=>{if(!u(s))return;let e=e=>{let t=e.target;u(c)?.contains(t)||u(l)?.contains(t)||b()},t=e=>{e.key===`Escape`&&b()};return window.addEventListener(`pointerdown`,e,!0),window.addEventListener(`keydown`,t),()=>{window.removeEventListener(`pointerdown`,e,!0),window.removeEventListener(`keydown`,t)}});function j(e){n.onChange(e),b()}function M(e){let t=e.target.value;n.onChange(P(t))}function N(e){let t=e.target.value;n.onChange(P(t)),b()}var I=B(),V=e(I),H=e(V),U=e=>{L(e,{color:null,size:4})};y(H,e=>{n.value||e(U)}),d(V),T(V,e=>w(l,e),()=>u(l));var W=E(V,2),G=t=>{var r=z(),s=E(e(r),2);o(s,21,()=>F,e=>e.color,(e,t)=>{let r=S(()=>n.value===u(t).color);var o=R();let s;C(()=>{s=k(o,1,`flex size-7 items-center justify-center rounded-full ring-offset-2 transition hover:scale-110`,null,s,{"ring-2":u(r),"ring-slate-900":u(r)}),O(o,`background-color: ${u(t).color??``};`),p(o,`title`,u(t).name),p(o,`aria-label`,`Set ${i()} color to ${u(t).name}`)}),A(`click`,o,()=>j(u(t).color)),a(e,o)}),d(s);var l=E(s,2),f=e(l),m=E(e(f),2);D(m),d(f),d(l);var h=E(l,2),g=e(h);L(e(g),{color:null,size:4}),_(2),d(g),d(h),d(r),T(r,e=>w(c,e),()=>u(c)),C(()=>{x(m,n.value??`#94a3b8`),p(m,`aria-label`,`Custom color for ${i()}`),g.disabled=n.value===null}),A(`input`,m,M),A(`change`,m,N),A(`click`,g,()=>j(null)),a(t,r)};y(W,e=>{u(s)&&e(G)}),d(I),C(()=>{O(V,n.value?`background-color: ${n.value};`:`background-color: white;`),p(V,`aria-expanded`,u(s)),p(V,`aria-label`,`Pick a color for ${i()}`)}),A(`click`,V,h),a(t,I),m()}l([`click`,`input`,`change`]);var H=n(`<p class="text-sm text-slate-500">No tags yet. Add a tag to a project or feature to start grouping.</p>`),U=n(`<li class="flex items-center justify-between gap-3 rounded-md px-2 py-1 text-sm hover:bg-slate-50"><span class="truncate text-slate-700"> </span> <button type="button" class="rounded px-2 py-1 text-xs font-medium text-slate-500 hover:bg-slate-100 hover:text-slate-900">Rename</button></li>`),W=n(`<li class="space-y-2"><div class="flex items-center justify-between gap-3"><div class="flex min-w-0 items-center gap-2"><!> <span class="truncate text-sm font-semibold text-slate-900"> </span> <span class="text-xs text-slate-500"> </span></div> <!></div> <ul class="space-y-1 pl-5"></ul></li>`),G=n(`<ul class="space-y-5"></ul>`),K=n(`<p class="text-sm text-red-700"> </p>`),q=n(`<div class="fixed inset-0 z-50 flex items-start justify-center bg-slate-950/40 px-4 py-24 backdrop-blur-sm" role="presentation"><div class="w-full max-w-md overflow-hidden rounded-xl border border-hairline bg-white shadow-xl" role="dialog" aria-modal="true" aria-labelledby="rename-tag-title"><header class="border-b border-hairline px-5 py-4"><h3 id="rename-tag-title" class="text-base font-semibold text-slate-950"> </h3> <p class="mt-1 text-xs text-slate-500">Updates every project and feature that uses this tag.</p></header> <div class="space-y-3 px-5 py-4"><label class="block text-sm"><span class="mb-1 block text-xs font-medium uppercase tracking-wide text-slate-500">Type</span> <input type="text" class="h-9 w-full rounded-md border border-slate-300 px-3 text-sm outline-none focus:border-brand-700"/></label> <label class="block text-sm"><span class="mb-1 block text-xs font-medium uppercase tracking-wide text-slate-500">Value</span> <input type="text" class="h-9 w-full rounded-md border border-slate-300 px-3 text-sm outline-none focus:border-brand-700"/></label> <!></div> <footer class="flex items-center justify-end gap-2 border-t border-hairline bg-slate-50 px-5 py-3"><button type="button" class="rounded-md px-3 py-1.5 text-sm font-medium text-slate-700 hover:bg-slate-100 disabled:opacity-40">Cancel</button> <button type="button" class="rounded-md bg-slate-900 px-3 py-1.5 text-sm font-medium text-white hover:bg-slate-800 disabled:opacity-40"> </button></footer></div></div>`),J=n(`<div class="fixed inset-0 z-40 flex items-start justify-center bg-slate-950/30 px-4 py-16 backdrop-blur-sm" role="presentation"><div class="w-full max-w-2xl overflow-hidden rounded-xl border border-hairline bg-white shadow-xl" role="dialog" aria-modal="true" aria-labelledby="manage-tags-title"><header class="flex items-start justify-between gap-4 border-b border-hairline px-5 py-4"><div><h2 id="manage-tags-title" class="text-base font-semibold text-slate-950">Manage tags</h2> <p class="mt-1 text-sm text-slate-500">Set a color per tag type, or rename a tag everywhere it appears.</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="max-h-[60vh] overflow-y-auto px-5 py-4"><!></div> <footer class="flex items-center justify-end gap-2 border-t border-hairline bg-slate-50 px-5 py-3"><button type="button" class="rounded-md px-3 py-1.5 text-sm font-medium text-slate-700 hover:bg-slate-100">Done</button></footer></div></div> <!>`,1);function Y(n,r){g(r,!0);let l=v(null),f=S(()=>{let e=new Map;for(let t of r.tags){let n=t.type.trim().toLowerCase();if(!n)continue;let r=e.get(n);r?r.tags.some(e=>j(e)===j(t))||r.tags.push(t):e.set(n,{tags:[t]})}return[...e.entries()].sort(([e],[t])=>e.localeCompare(t)).map(([e,t])=>({key:e,display:N(e),tags:[...t.tags].sort((e,t)=>e.value.localeCompare(t.value))}))});async function x(e,t){try{await I.setTypeColor(e,t)}catch(e){console.error(`Failed to set tag color`,e)}}function T(e){w(l,{tag:e,type:N(e.type),value:N(e.value),busy:!1,error:null},!0)}function O(){w(l,null)}async function k(){let e=u(l);if(!e)return;let t=e.tag,n={type:e.type.trim(),value:e.value.trim()};if(!n.type||!n.value){w(l,{...e,error:`Type and value are required`},!0);return}if(j(t)===j(n)){w(l,null);return}w(l,{...e,busy:!0,error:null},!0);try{let e=await I.renameTag(t,n);w(l,null),await r.onRenamed?.({from:t,to:n,projectsUpdated:e.projectsUpdated,featuresUpdated:e.featuresUpdated})}catch(t){w(l,{...e,busy:!1,error:t.message},!0)}}function P(e){e.key===`Escape`&&(u(l)?O():r.onClose())}var F=s();t(`keydown`,c,P);var R=h(F),z=t=>{var n=J(),s=h(n),c=e(s),m=e(c),g=E(e(m),2);d(m);var v=E(m,2),w=e(v),P=e=>{a(e,H())},F=t=>{var n=G();o(n,21,()=>u(f),e=>e.key,(t,n)=>{let r=S(()=>I.colorFor(u(n).key));var s=W(),c=e(s),l=e(c),f=e(l);L(f,{get color(){return u(r)},size:2.5});var m=E(f,2),h=e(m,!0);d(m);var g=E(m,2),_=e(g);d(g),d(l),V(E(l,2),{get value(){return u(r)},onChange:e=>x(u(n).key,e),get label(){return u(n).display}}),d(c);var v=E(c,2);o(v,21,()=>u(n).tags,e=>j(e),(t,n)=>{var r=U(),o=e(r),s=e(o,!0);d(o);var c=E(o,2);d(r),C((e,t)=>{p(o,`title`,e),i(s,t)},[()=>M(u(n)),()=>N(u(n).value)]),A(`click`,c,()=>T(u(n))),a(t,r)}),d(v),d(s),C(()=>{i(h,u(n).display),i(_,`(${u(n).tags.length??``} value${u(n).tags.length===1?``:`s`})`)}),a(t,s)}),d(n),a(t,n)};y(w,e=>{u(f).length===0?e(P):e(F,-1)}),d(v);var R=E(v,2),z=e(R);d(R),d(c),d(s);var B=E(s,2),Y=t=>{var n=q(),r=e(n),o=e(r),s=e(o),c=e(s);d(s),_(2),d(o);var f=E(o,2),p=e(f),m=E(e(p),2);D(m),d(p);var h=E(p,2),g=E(e(h),2);D(g),d(h);var v=E(h,2),x=t=>{var n=K(),r=e(n,!0);d(n),C(()=>i(r,u(l).error)),a(t,n)};y(v,e=>{u(l).error&&e(x)}),d(f);var S=E(f,2),w=e(S),T=E(w,2),j=e(T,!0);d(T),d(S),d(r),d(n),C(e=>{i(c,`Rename "${e??``}"`),m.disabled=u(l).busy,g.disabled=u(l).busy,w.disabled=u(l).busy,T.disabled=u(l).busy,i(j,u(l).busy?`Renaming...`:`Rename everywhere`)},[()=>M(u(l).tag)]),A(`click`,n,e=>{e.currentTarget===e.target&&!u(l)?.busy&&O()}),b(m,()=>u(l).type,e=>u(l).type=e),b(g,()=>u(l).value,e=>u(l).value=e),A(`click`,w,O),A(`click`,T,k),a(t,n)};y(B,e=>{u(l)&&e(Y)}),A(`click`,s,e=>{e.currentTarget===e.target&&r.onClose()}),A(`click`,g,function(...e){r.onClose?.apply(this,e)}),A(`click`,z,function(...e){r.onClose?.apply(this,e)}),a(t,n)};y(R,e=>{r.open&&e(z)}),a(n,F),m()}l([`click`]);export{Y as t};
|
|
Binary file
|
|
Binary file
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import"./DgWl1fLQ.js";
|
|
Binary file
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{V as e,it as t,nt as n,rt as r}from"./D50Xf4Qj.js";import{i,t as a}from"./
|
|
1
|
+
import{V as e,it as t,nt as n,rt as r}from"./D50Xf4Qj.js";import{i,t as a}from"./CHEhPoA2.js";var o=new class{#e=t(!1);get loading(){return e(this.#e)}set loading(e){r(this.#e,e,!0)}#t=t(null);get project(){return e(this.#t)}set project(e){r(this.#t,e,!0)}#n=t(n([]));get siblings(){return e(this.#n)}set siblings(e){r(this.#n,e,!0)}#r=t(null);get error(){return e(this.#r)}set error(e){r(this.#r,e,!0)}currentFeatureId=null;async load(e){this.currentFeatureId=e,this.loading=!0,this.error=null;try{let t=await a(),n=await t.useCases.findProjectContainingFeature(e);if(this.currentFeatureId!==e)return;if(this.project=n,!n){this.siblings=[];return}let r=n.featureIds.filter(t=>t!==e),i=[];for(let n of r){let r=await t.useCases.getFeature(n);if(this.currentFeatureId!==e)return;r&&i.push(r)}this.siblings=i}catch(e){this.error=e.message}finally{this.currentFeatureId===e&&(this.loading=!1)}}reset(){this.currentFeatureId=null,this.project=null,this.siblings=[],this.error=null,this.loading=!1}get isInProject(){return this.project!==null}isActionQueued(e,t){let n=this.project?.implementationQueue??[],r=`action:${String(e)}:${String(t)}`;return n.some(e=>i(e)===r)}isSurfaceQueued(e,t){let n=this.project?.implementationQueue??[],r=`surface:${String(e)}:${String(t)}`;return n.some(e=>i(e)===r)}async enqueueAction(e,t){let n=this.project;if(!n)return!1;try{let r=await(await a()).useCases.enqueueQueueItem(n.id,{kind:`action`,featureId:e,actionId:t});return this.project=r.project,!0}catch(e){return this.error=e.message,!1}}async enqueueSurface(e,t){let n=this.project;if(!n)return!1;try{let r=await(await a()).useCases.enqueueQueueItem(n.id,{kind:`surface`,featureId:e,surfaceId:t});return this.project=r.project,!0}catch(e){return this.error=e.message,!1}}async dequeueByItemId(e){let t=this.project;if(t)try{let n=await(await a()).useCases.dequeueQueueItem(t.id,e);this.project=n}catch(e){this.error=e.message}}findQueueItemIdForAction(e,t){let n=this.project?.implementationQueue??[],r=`action:${String(e)}:${String(t)}`,a=n.find(e=>i(e)===r);return a?a.id:null}findQueueItemIdForSurface(e,t){let n=this.project?.implementationQueue??[],r=`surface:${String(e)}:${String(t)}`,a=n.find(e=>i(e)===r);return a?a.id:null}};export{o as t};
|
|
Binary file
|
|
Binary file
|