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.
Files changed (468) hide show
  1. package/README.md +7 -2
  2. package/build/client/_app/immutable/assets/0.CEwCP-aD.css +1 -0
  3. package/build/client/_app/immutable/assets/0.CEwCP-aD.css.br +0 -0
  4. package/build/client/_app/immutable/assets/0.CEwCP-aD.css.gz +0 -0
  5. package/build/client/_app/immutable/chunks/BGtpkapy.js +1 -0
  6. package/build/client/_app/immutable/chunks/BGtpkapy.js.br +0 -0
  7. package/build/client/_app/immutable/chunks/BGtpkapy.js.gz +0 -0
  8. package/build/client/_app/immutable/chunks/{DUlWXa5h.js → BJCjebKX.js} +3 -3
  9. package/build/client/_app/immutable/chunks/BJCjebKX.js.br +0 -0
  10. package/build/client/_app/immutable/chunks/BJCjebKX.js.gz +0 -0
  11. package/build/client/_app/immutable/chunks/{m6hfVWqp2.js → BOSEog2D2.js} +1 -1
  12. package/build/client/_app/immutable/chunks/BOSEog2D2.js.br +0 -0
  13. package/build/client/_app/immutable/chunks/BOSEog2D2.js.gz +0 -0
  14. package/build/client/_app/immutable/chunks/BRkEj7XB.js +1 -0
  15. package/build/client/_app/immutable/chunks/BRkEj7XB.js.br +0 -0
  16. package/build/client/_app/immutable/chunks/BRkEj7XB.js.gz +0 -0
  17. package/build/client/_app/immutable/chunks/{DFsgZTOD2.js → BWyM-YKn2.js} +1 -1
  18. package/build/client/_app/immutable/chunks/BWyM-YKn2.js.br +0 -0
  19. package/build/client/_app/immutable/chunks/BWyM-YKn2.js.gz +0 -0
  20. package/build/client/_app/immutable/chunks/{CV2_qPHL2.js → BcHaN2XP2.js} +1 -1
  21. package/build/client/_app/immutable/chunks/BcHaN2XP2.js.br +0 -0
  22. package/build/client/_app/immutable/chunks/BcHaN2XP2.js.gz +0 -0
  23. package/build/client/_app/immutable/chunks/{CmaTEgmy2.js → BquLtDTN2.js} +1 -1
  24. package/build/client/_app/immutable/chunks/BquLtDTN2.js.br +0 -0
  25. package/build/client/_app/immutable/chunks/BquLtDTN2.js.gz +0 -0
  26. package/build/client/_app/immutable/chunks/C2-NAsCA.js +1 -0
  27. package/build/client/_app/immutable/chunks/C2-NAsCA.js.br +2 -0
  28. package/build/client/_app/immutable/chunks/C2-NAsCA.js.gz +0 -0
  29. package/build/client/_app/immutable/chunks/{CXhiS9kD.js → C5OWnbs3.js} +1 -1
  30. package/build/client/_app/immutable/chunks/C5OWnbs3.js.br +0 -0
  31. package/build/client/_app/immutable/chunks/C5OWnbs3.js.gz +0 -0
  32. package/build/client/_app/immutable/chunks/{CuI8wNzS.js → C5oHnmmi.js} +1 -1
  33. package/build/client/_app/immutable/chunks/C5oHnmmi.js.br +0 -0
  34. package/build/client/_app/immutable/chunks/C5oHnmmi.js.gz +0 -0
  35. package/build/client/_app/immutable/chunks/{BEi9bPpt.js → CFOrhKj0.js} +1 -1
  36. package/build/client/_app/immutable/chunks/CFOrhKj0.js.br +0 -0
  37. package/build/client/_app/immutable/chunks/CFOrhKj0.js.gz +0 -0
  38. package/build/client/_app/immutable/chunks/CHEhPoA2.js +1 -0
  39. package/build/client/_app/immutable/chunks/CHEhPoA2.js.br +0 -0
  40. package/build/client/_app/immutable/chunks/CHEhPoA2.js.gz +0 -0
  41. package/build/client/_app/immutable/chunks/CKwL_udH.js +1 -0
  42. package/build/client/_app/immutable/chunks/CKwL_udH.js.br +0 -0
  43. package/build/client/_app/immutable/chunks/CKwL_udH.js.gz +0 -0
  44. package/build/client/_app/immutable/chunks/{bYs7XjWt.js → CMKnglgu.js} +1 -1
  45. package/build/client/_app/immutable/chunks/CMKnglgu.js.br +0 -0
  46. package/build/client/_app/immutable/chunks/CMKnglgu.js.gz +0 -0
  47. package/build/client/_app/immutable/chunks/CPig5PyW2.js +3 -0
  48. package/build/client/_app/immutable/chunks/CPig5PyW2.js.br +0 -0
  49. package/build/client/_app/immutable/chunks/CPig5PyW2.js.gz +0 -0
  50. package/build/client/_app/immutable/chunks/{DVZgPZIa.js → CfYiL4Vb.js} +1 -1
  51. package/build/client/_app/immutable/chunks/CfYiL4Vb.js.br +0 -0
  52. package/build/client/_app/immutable/chunks/CfYiL4Vb.js.gz +0 -0
  53. package/build/client/_app/immutable/chunks/{CPYkXatp.js → CuiDce17.js} +1 -1
  54. package/build/client/_app/immutable/chunks/CuiDce17.js.br +2 -0
  55. package/build/client/_app/immutable/chunks/CuiDce17.js.gz +0 -0
  56. package/build/client/_app/immutable/chunks/CyQ1x7xK2.js +1 -0
  57. package/build/client/_app/immutable/chunks/CyQ1x7xK2.js.br +0 -0
  58. package/build/client/_app/immutable/chunks/CyQ1x7xK2.js.gz +0 -0
  59. package/build/client/_app/immutable/chunks/DHgYHuvG.js +1 -0
  60. package/build/client/_app/immutable/chunks/DHgYHuvG.js.br +0 -0
  61. package/build/client/_app/immutable/chunks/DHgYHuvG.js.gz +0 -0
  62. package/build/client/_app/immutable/chunks/{BGjKBqhd.js → DN5KlhS6.js} +1 -1
  63. package/build/client/_app/immutable/chunks/DN5KlhS6.js.br +0 -0
  64. package/build/client/_app/immutable/chunks/DN5KlhS6.js.gz +0 -0
  65. package/build/client/_app/immutable/chunks/{j_2fbb1D2.js → DTvCLzCO2.js} +2 -2
  66. package/build/client/_app/immutable/chunks/DTvCLzCO2.js.br +0 -0
  67. package/build/client/_app/immutable/chunks/DTvCLzCO2.js.gz +0 -0
  68. package/build/client/_app/immutable/chunks/DgWl1fLQ.js +1 -0
  69. package/build/client/_app/immutable/chunks/DgWl1fLQ.js.br +0 -0
  70. package/build/client/_app/immutable/chunks/DgWl1fLQ.js.gz +0 -0
  71. package/build/client/_app/immutable/chunks/{SoqLurki2.js → OUabT_0s2.js} +1 -1
  72. package/build/client/_app/immutable/chunks/OUabT_0s2.js.br +0 -0
  73. package/build/client/_app/immutable/chunks/OUabT_0s2.js.gz +0 -0
  74. package/build/client/_app/immutable/chunks/{DwwbPhx_2.js → Z-Nt_Stv2.js} +1 -1
  75. package/build/client/_app/immutable/chunks/Z-Nt_Stv2.js.br +0 -0
  76. package/build/client/_app/immutable/chunks/Z-Nt_Stv2.js.gz +0 -0
  77. package/build/client/_app/immutable/chunks/ZXZvB_hk2.js +11 -0
  78. package/build/client/_app/immutable/chunks/ZXZvB_hk2.js.br +0 -0
  79. package/build/client/_app/immutable/chunks/ZXZvB_hk2.js.gz +0 -0
  80. package/build/client/_app/immutable/chunks/aCyLgaCS.js +1 -0
  81. package/build/client/_app/immutable/chunks/aCyLgaCS.js.br +0 -0
  82. package/build/client/_app/immutable/chunks/aCyLgaCS.js.gz +0 -0
  83. package/build/client/_app/immutable/chunks/{DsI4egLI2.js → oly95dF_2.js} +1 -1
  84. package/build/client/_app/immutable/chunks/oly95dF_2.js.br +0 -0
  85. package/build/client/_app/immutable/chunks/oly95dF_2.js.gz +0 -0
  86. package/build/client/_app/immutable/chunks/{CHmg-Am5.js → r_dyVatm.js} +1 -1
  87. package/build/client/_app/immutable/chunks/r_dyVatm.js.br +0 -0
  88. package/build/client/_app/immutable/chunks/r_dyVatm.js.gz +0 -0
  89. package/build/client/_app/immutable/entry/{app.BoGKtCbP.js → app.DDhYPj6j.js} +2 -2
  90. package/build/client/_app/immutable/entry/app.DDhYPj6j.js.br +0 -0
  91. package/build/client/_app/immutable/entry/app.DDhYPj6j.js.gz +0 -0
  92. package/build/client/_app/immutable/entry/start.XTH1H-BV.js +1 -0
  93. package/build/client/_app/immutable/entry/start.XTH1H-BV.js.br +0 -0
  94. package/build/client/_app/immutable/entry/start.XTH1H-BV.js.gz +0 -0
  95. package/build/client/_app/immutable/nodes/0.DtB3-CXO.js +7 -0
  96. package/build/client/_app/immutable/nodes/0.DtB3-CXO.js.br +0 -0
  97. package/build/client/_app/immutable/nodes/0.DtB3-CXO.js.gz +0 -0
  98. package/build/client/_app/immutable/nodes/{1.C41ljjsg.js → 1.Db-k8OuM.js} +1 -1
  99. package/build/client/_app/immutable/nodes/1.Db-k8OuM.js.br +0 -0
  100. package/build/client/_app/immutable/nodes/1.Db-k8OuM.js.gz +0 -0
  101. package/build/client/_app/immutable/nodes/{11.cksFH0wF.js → 11.D76AS3hB.js} +1 -1
  102. package/build/client/_app/immutable/nodes/11.D76AS3hB.js.br +0 -0
  103. package/build/client/_app/immutable/nodes/11.D76AS3hB.js.gz +0 -0
  104. package/build/client/_app/immutable/nodes/12.skE59PP9.js +7 -0
  105. package/build/client/_app/immutable/nodes/12.skE59PP9.js.br +0 -0
  106. package/build/client/_app/immutable/nodes/12.skE59PP9.js.gz +0 -0
  107. package/build/client/_app/immutable/nodes/{13.CncQNyXC.js → 13.BcznBQYK.js} +1 -1
  108. package/build/client/_app/immutable/nodes/13.BcznBQYK.js.br +0 -0
  109. package/build/client/_app/immutable/nodes/13.BcznBQYK.js.gz +0 -0
  110. package/build/client/_app/immutable/nodes/14.CwxinXQX.js +1 -0
  111. package/build/client/_app/immutable/nodes/14.CwxinXQX.js.br +0 -0
  112. package/build/client/_app/immutable/nodes/14.CwxinXQX.js.gz +0 -0
  113. package/build/client/_app/immutable/nodes/15.Bjjh6v7q.js +4 -0
  114. package/build/client/_app/immutable/nodes/15.Bjjh6v7q.js.br +0 -0
  115. package/build/client/_app/immutable/nodes/15.Bjjh6v7q.js.gz +0 -0
  116. package/build/client/_app/immutable/nodes/{16.CwBnCMQO.js → 16.BPe4oI9b.js} +1 -1
  117. package/build/client/_app/immutable/nodes/16.BPe4oI9b.js.br +0 -0
  118. package/build/client/_app/immutable/nodes/16.BPe4oI9b.js.gz +0 -0
  119. package/build/client/_app/immutable/nodes/{2.Bt4Iqxol.js → 2.CB77496k.js} +1 -1
  120. package/build/client/_app/immutable/nodes/2.CB77496k.js.br +0 -0
  121. package/build/client/_app/immutable/nodes/2.CB77496k.js.gz +0 -0
  122. package/build/client/_app/immutable/nodes/3.D5-D84Kj.js +1 -0
  123. package/build/client/_app/immutable/nodes/3.D5-D84Kj.js.br +0 -0
  124. package/build/client/_app/immutable/nodes/3.D5-D84Kj.js.gz +0 -0
  125. package/build/client/_app/immutable/nodes/{4.CeWHKt3l.js → 4.TARjGZi1.js} +3 -3
  126. package/build/client/_app/immutable/nodes/4.TARjGZi1.js.br +0 -0
  127. package/build/client/_app/immutable/nodes/4.TARjGZi1.js.gz +0 -0
  128. package/build/client/_app/immutable/nodes/5.BxXmtjjf.js +52 -0
  129. package/build/client/_app/immutable/nodes/5.BxXmtjjf.js.br +0 -0
  130. package/build/client/_app/immutable/nodes/5.BxXmtjjf.js.gz +0 -0
  131. package/build/client/_app/immutable/nodes/6.Czkgnd6_.js +1 -0
  132. package/build/client/_app/immutable/nodes/6.Czkgnd6_.js.br +0 -0
  133. package/build/client/_app/immutable/nodes/6.Czkgnd6_.js.gz +0 -0
  134. package/build/client/_app/immutable/nodes/7.CniICgZm.js +1 -0
  135. package/build/client/_app/immutable/nodes/7.CniICgZm.js.br +0 -0
  136. package/build/client/_app/immutable/nodes/7.CniICgZm.js.gz +0 -0
  137. package/build/client/_app/immutable/nodes/{8.TZdtToNp.js → 8.B8uueTNo.js} +2 -2
  138. package/build/client/_app/immutable/nodes/8.B8uueTNo.js.br +0 -0
  139. package/build/client/_app/immutable/nodes/8.B8uueTNo.js.gz +0 -0
  140. package/build/client/_app/immutable/nodes/9.DWmk7Pd9.js +3 -0
  141. package/build/client/_app/immutable/nodes/9.DWmk7Pd9.js.br +0 -0
  142. package/build/client/_app/immutable/nodes/9.DWmk7Pd9.js.gz +0 -0
  143. package/build/client/_app/version.json +1 -1
  144. package/build/client/_app/version.json.br +0 -0
  145. package/build/client/_app/version.json.gz +0 -0
  146. package/build/server/chunks/0-BssfTySQ.js +15 -0
  147. package/build/server/chunks/1-DAizMjCG.js +9 -0
  148. package/build/server/chunks/11-O3MGnfVf.js +9 -0
  149. package/build/server/chunks/12-Cp8R4i27.js +9 -0
  150. package/build/server/chunks/13-CydwAfRj.js +9 -0
  151. package/build/server/chunks/14-CScpHG0p.js +9 -0
  152. package/build/server/chunks/15-Dq0gC40P.js +9 -0
  153. package/build/server/chunks/16-I6t9ZQA9.js +9 -0
  154. package/build/server/chunks/2-DVqm7cgN.js +9 -0
  155. package/build/server/chunks/{3-BeZ4I6nb.js → 3-0r0RSOA9.js} +3 -3
  156. package/build/server/chunks/4-BeX1xjbu.js +16 -0
  157. package/build/server/chunks/5-BnIaZs0S.js +9 -0
  158. package/build/server/chunks/6-BlFb3TLL.js +9 -0
  159. package/build/server/chunks/7-bS6Z1ZJG.js +9 -0
  160. package/build/server/chunks/8-B3bpJkfc.js +9 -0
  161. package/build/server/chunks/9-pHPxcD8H.js +9 -0
  162. package/build/server/chunks/{DeleteFeature-C-0RJeFW.js → DeleteFeature-3Z9jICf3.js} +247 -14
  163. package/build/server/chunks/{DeleteProject-DJvXB5DR.js → DeleteProject-Cj-M5uVd.js} +2 -2
  164. package/build/server/chunks/{DigestView-Bc6k5k3-.js → DigestView-JSb1Scor.js} +4 -3
  165. package/build/server/chunks/{Effect-BJtLR-6l.js → Effect-DpNpOAyO.js} +4 -2
  166. package/build/server/chunks/{FeatureCard-DeKMF5V8.js → FeatureCard-BusFP824.js} +4 -4
  167. package/build/server/chunks/{FeatureJson-BoxOjsY6.js → FeatureJson-Cs1UOjGW.js} +2 -2
  168. package/build/server/chunks/{FeatureTransforms-Ce5inqgh.js → FeatureTransforms-DtefZJbq.js} +10 -3
  169. package/build/server/chunks/{ManageTagsDialog-CVU8mDqF.js → ManageTagsDialog-DrTjebtT.js} +5 -5
  170. package/build/server/chunks/{ProgressBar-DXpOQRB8.js → ProgressBar-DrNo5Lo9.js} +2 -2
  171. package/build/server/chunks/{ProjectionViewer-DGH0qozK.js → ProjectionViewer-CzwhMdwz.js} +11 -9
  172. package/build/server/chunks/{ProjectsIndex-D1cxuUk9.js → ProjectsIndex-DK1e5hKG.js} +10 -10
  173. package/build/server/chunks/{RenameTag-Bj6Ma2hM.js → RenameTag-D2lCrFRx.js} +2 -2
  174. package/build/server/chunks/{ScenarioApplier-lJmwGaNE.js → ScenarioApplier-DHITq-3c.js} +2 -2
  175. package/build/server/chunks/{SimulationClock-htaCZkF-.js → SimulationClock-Ct2QIzx4.js} +2 -2
  176. package/build/server/chunks/{SimulatorEngine-B3SFrB6Z.js → SimulatorEngine-CLuFKcRr.js} +197 -57
  177. package/build/server/chunks/{TagDotStrip-akUNaLK0.js → TagDotStrip-CS-Wfj_k.js} +4 -4
  178. package/build/server/chunks/{TagFilterSelect-JpXYvcx3.js → TagFilterSelect-Bdd_JucF.js} +21 -7
  179. package/build/server/chunks/{TagPalette-BRFwaJjA.js → TagPalette-BHcMcwnB.js} +6 -2
  180. package/build/server/chunks/{_layout.svelte-XYiCBYdR.js → _layout.svelte-Dnp5YlQh.js} +37 -20
  181. package/build/server/chunks/{_page.svelte-CjGy40CV.js → _page.svelte--Zk9G67D.js} +15 -15
  182. package/build/server/chunks/{_page.svelte-lAHWug7_.js → _page.svelte-BaUudRf8.js} +14 -14
  183. package/build/server/chunks/{_page.svelte-CVVhryMZ.js → _page.svelte-CDMEZbnN.js} +11 -11
  184. package/build/server/chunks/_page.svelte-CENWYQVb.js +37 -0
  185. package/build/server/chunks/{_page.svelte-BIPuluus.js → _page.svelte-CRda0InI.js} +14 -14
  186. package/build/server/chunks/{_page.svelte-BF1rZX3W.js → _page.svelte-Ca-yzK5f.js} +15 -15
  187. package/build/server/chunks/{_page.svelte-DOL20vdP.js → _page.svelte-CeSKWDA9.js} +13 -13
  188. package/build/server/chunks/{_page.svelte-BX7sPTsd.js → _page.svelte-D8zwFGI7.js} +14 -14
  189. package/build/server/chunks/{_page.svelte-Cszy-ZLO.js → _page.svelte-DMmsHdHC.js} +13 -13
  190. package/build/server/chunks/{_page.svelte-CpnSlvUc.js → _page.svelte-DZp4D5AF.js} +10 -10
  191. package/build/server/chunks/{_page.svelte-Bhh4sSnB.js → _page.svelte-Dn9ZI02Q.js} +17 -17
  192. package/build/server/chunks/{_page.svelte-Bj9UPFlS.js → _page.svelte-Dqm9Wt2P.js} +115 -20
  193. package/build/server/chunks/_page.svelte-Dt6KOtY5.js +37 -0
  194. package/build/server/chunks/{_page.svelte-BABuSfQV.js → _page.svelte-T6OdMppW.js} +192 -27
  195. package/build/server/chunks/{_server.ts-DaPmxSzD.js → _server.ts-7_ZHRtsW.js} +4 -4
  196. package/build/server/chunks/{_server.ts-CUstD9T_.js → _server.ts-A-c3m5oY.js} +6 -6
  197. package/build/server/chunks/_server.ts-B8Ar4gwq.js +217 -0
  198. package/build/server/chunks/{_server.ts-0ElCHXbG.js → _server.ts-BAWpzUjG.js} +6 -6
  199. package/build/server/chunks/{_server.ts-BtJ5IP-M.js → _server.ts-BcdfknA1.js} +119 -15
  200. package/build/server/chunks/{_server.ts-D7CeBX6G.js → _server.ts-Bdhr-X4W.js} +4 -4
  201. package/build/server/chunks/{_server.ts-DDJ1CJmi.js → _server.ts-Bf1XUFNH.js} +4 -4
  202. package/build/server/chunks/{_server.ts-D-hWM98k.js → _server.ts-C2Vddbd9.js} +4 -4
  203. package/build/server/chunks/{_server.ts-CWwUVXTu.js → _server.ts-C85xQ-Hl.js} +5 -5
  204. package/build/server/chunks/{_server.ts-DanVrsO_.js → _server.ts-CWGYB1sh.js} +4 -4
  205. package/build/server/chunks/{_server.ts-CPFhLm4S.js → _server.ts-CakPJzhA.js} +4 -4
  206. package/build/server/chunks/{_server.ts-ChVZie6n.js → _server.ts-CzWTLxUT.js} +4 -4
  207. package/build/server/chunks/{_server.ts-l6LlaJtw.js → _server.ts-DJ2NDG3j.js} +4 -4
  208. package/build/server/chunks/{_server.ts-BYXrkEFe.js → _server.ts-DN638aAs.js} +4 -4
  209. package/build/server/chunks/{_server.ts-DbDbbE8L.js → _server.ts-DVcSGReg.js} +8 -8
  210. package/build/server/chunks/{_server.ts-CCl3IQPG.js → _server.ts-Dl9uBpSg.js} +7 -7
  211. package/build/server/chunks/{_server.ts-DAK1uZqQ.js → _server.ts-DpaFWwb4.js} +4 -4
  212. package/build/server/chunks/{_server.ts-DqhRyh23.js → _server.ts-SK7KLsH_.js} +4 -4
  213. package/build/server/chunks/{_server.ts-Do7W0Hva.js → _server.ts-cUat91Dq.js} +7 -7
  214. package/build/server/chunks/{browserContainer-f9Fxc9Ip.js → browserContainer-6TbJbwua.js} +128 -9
  215. package/build/server/chunks/{buildSearchDocs-Dp3eMgv-.js → buildSearchDocs-BrmWPZWy.js} +13 -3
  216. package/build/server/chunks/{builderModeStore.svelte-Cq1G1oUM.js → builderModeStore.svelte--fWSA_3N.js} +7 -7
  217. package/build/server/chunks/{client-BsBoZ_uZ.js → client-uZso485O.js} +2 -2
  218. package/build/server/chunks/{error.svelte-CSlSmxpR.js → error.svelte-r4E3ymf6.js} +4 -4
  219. package/build/server/chunks/{featureQueueContext-BBZ5nfog.js → featureQueueContext-C1Ce0iiL.js} +2 -2
  220. package/build/server/chunks/{featureStore.svelte-B_DzQPpz.js → featureStore.svelte-CwrfMF7q.js} +5 -5
  221. package/build/server/chunks/{internal-DwL-IGZS.js → internal-BhW0DAbW.js} +2 -2
  222. package/build/server/chunks/{projectBundleClient-DiNldrQC.js → projectBundleClient-CtwUt5G_.js} +3 -3
  223. package/build/server/chunks/{projectContextStore.svelte-BOQaFWQu.js → projectContextStore.svelte-9emEyKKi.js} +3 -3
  224. package/build/server/chunks/{projectFeaturesStore.svelte-DpLnV8j6.js → projectFeaturesStore.svelte-VuFAZwFy.js} +2 -2
  225. package/build/server/chunks/{projectStore.svelte-DUesqJNB.js → projectStore.svelte-Dyr5JX4I.js} +29 -4
  226. package/build/server/chunks/{reconcile-zgOYJYbP.js → reconcile-Byh0GnqL.js} +2 -2
  227. package/build/server/chunks/{snapshotRepository-CNzTq4py.js → snapshotRepository-DyccX9dO.js} +245 -84
  228. package/build/server/chunks/{state-BRTzak3G.js → state-VwavR9uS.js} +3 -3
  229. package/build/server/chunks/{stores-uVljJ-SP.js → stores-jRWW47mb.js} +3 -3
  230. package/build/server/chunks/{sync-DzhcwD3l.js → sync-CeeTnvzJ.js} +2 -2
  231. package/build/server/chunks/{syncAwareRepositories-B8hccc-z.js → syncAwareRepositories-AVvcGscu.js} +2 -2
  232. package/build/server/chunks/{tagPaletteStore.svelte-DUHRIfMM.js → tagPaletteStore.svelte-9Wd8_rCw.js} +4 -4
  233. package/build/server/index.js +1 -1
  234. package/build/server/manifest.js +42 -35
  235. package/cli/commands/check.ts +16 -8
  236. package/cli/commands/outdated.ts +44 -0
  237. package/cli/skills/unspa-adopt/SKILL.md +10 -1
  238. package/cli/skills/unspa-audit/SKILL.md +13 -6
  239. package/cli/skills/unspa-edit/SKILL.md +38 -8
  240. package/cli/unspa.ts +42 -0
  241. package/cli/util/context-files.ts +7 -0
  242. package/mcp-server/bin.ts +10 -0
  243. package/mcp-server/resources/guide.ts +49 -7
  244. package/mcp-server/resources/operations.ts +89 -9
  245. package/mcp-server/server.ts +6 -1
  246. package/mcp-server/tools/_entity_builders.ts +57 -0
  247. package/mcp-server/tools/_shared.ts +6 -0
  248. package/mcp-server/tools/acceptanceCriterion.ts +103 -0
  249. package/mcp-server/tools/action.ts +33 -2
  250. package/mcp-server/tools/batch-ops/featureLevelOps.ts +113 -24
  251. package/mcp-server/tools/batch-ops/ruleInvariantOps.ts +35 -3
  252. package/mcp-server/tools/batch-ops/scenarioEventOps.ts +6 -0
  253. package/mcp-server/tools/batch-ops/stateParamOps.ts +10 -0
  254. package/mcp-server/tools/batch-ops/surfaceActionOps.ts +53 -0
  255. package/mcp-server/tools/batch.ts +88 -18
  256. package/mcp-server/tools/constant.ts +106 -0
  257. package/mcp-server/tools/effect.ts +26 -15
  258. package/mcp-server/tools/event.ts +16 -6
  259. package/mcp-server/tools/feature.ts +32 -0
  260. package/mcp-server/tools/parameter.ts +13 -3
  261. package/mcp-server/tools/project.ts +104 -3
  262. package/mcp-server/tools/provenance.ts +561 -8
  263. package/mcp-server/tools/read.ts +1 -1
  264. package/mcp-server/tools/repoContext.ts +27 -4
  265. package/mcp-server/tools/rule.ts +11 -1
  266. package/mcp-server/tools/specGaps.ts +103 -1
  267. package/mcp-server/tools/transition.ts +58 -26
  268. package/mcp-server/tools/verification.ts +15 -7
  269. package/package.json +1 -1
  270. package/src/features/behavior-digest/domain/services/buildDigest.ts +2 -0
  271. package/src/features/behavior-model/domain/entities/AcceptanceCriterion.ts +47 -0
  272. package/src/features/behavior-model/domain/entities/Action.ts +48 -1
  273. package/src/features/behavior-model/domain/entities/ActionOutcome.ts +55 -0
  274. package/src/features/behavior-model/domain/entities/Dependency.ts +66 -0
  275. package/src/features/behavior-model/domain/entities/EventDefinition.ts +25 -0
  276. package/src/features/behavior-model/domain/entities/Feature.ts +19 -0
  277. package/src/features/behavior-model/domain/entities/Surface.ts +11 -0
  278. package/src/features/behavior-model/domain/services/BehaviorGraphModel.ts +11 -4
  279. package/src/features/behavior-model/domain/services/BehaviorSemantics.ts +176 -0
  280. package/src/features/behavior-model/domain/services/DecisionAnalysis.ts +226 -0
  281. package/src/features/behavior-model/domain/services/EffectApplier.ts +25 -0
  282. package/src/features/behavior-model/domain/services/FeatureSharedStateNormalizer.ts +4 -0
  283. package/src/features/behavior-model/domain/services/StatePathReferences.ts +5 -0
  284. package/src/features/behavior-model/domain/services/transforms/modelTransforms.ts +84 -0
  285. package/src/features/behavior-model/domain/services/transforms/ruleTransforms.ts +92 -1
  286. package/src/features/behavior-model/domain/services/transforms/scenarioTransforms.ts +48 -0
  287. package/src/features/behavior-model/domain/services/validation/featureShape.ts +54 -0
  288. package/src/features/behavior-model/domain/services/validation/referenceIntegrity.ts +420 -5
  289. package/src/features/behavior-model/domain/value-objects/Effect.ts +31 -4
  290. package/src/features/behavior-model/domain/value-objects/ids.ts +10 -0
  291. package/src/features/behavior-model/presentation/components/AcceptanceCriteriaEditor.svelte +179 -0
  292. package/src/features/behavior-model/presentation/components/FeatureEditor.svelte +14 -2
  293. package/src/features/behavior-model/presentation/stores/editorStore.svelte.ts +2 -1
  294. package/src/features/behavior-model/presentation/stores/featuresStore.svelte.ts +16 -0
  295. package/src/features/behavior-model/presentation/view-models/factories.ts +22 -0
  296. package/src/features/global-search/domain/SearchDoc.ts +4 -2
  297. package/src/features/global-search/domain/buildSearchDocs.ts +22 -0
  298. package/src/features/global-search/domain/searchNav.ts +2 -1
  299. package/src/features/global-search/presentation/searchKindMeta.ts +5 -0
  300. package/src/features/library/domain/entities/SurfaceBlueprint.ts +5 -5
  301. package/src/features/maturity/domain/ConfidenceMatrix.ts +152 -0
  302. package/src/features/maturity/domain/MaturityScorer.ts +53 -53
  303. package/src/features/mcp-tools/application/tools/getNeighborhood.ts +24 -42
  304. package/src/features/mcp-tools/application/tools/scoreFeature.ts +11 -1
  305. package/src/features/projects/application/use-cases/GetProjectAggregate.ts +22 -1
  306. package/src/features/projects/domain/entities/CoreFeature.ts +16 -0
  307. package/src/features/projects/domain/entities/Project.ts +13 -0
  308. package/src/features/projects/domain/services/coreFeatures.ts +134 -0
  309. package/src/features/projects/presentation/components/ProjectCoreFeaturesPanel.svelte +243 -0
  310. package/src/features/projects/presentation/components/ProjectEditor.svelte +24 -1
  311. package/src/features/projects/presentation/stores/projectStore.svelte.ts +37 -0
  312. package/src/features/simulator/domain/ParameterDomains.ts +211 -0
  313. package/src/features/simulator/domain/SimulationResult.ts +25 -1
  314. package/src/features/simulator/domain/SimulatorEngine.ts +59 -4
  315. package/src/features/simulator/domain/StateExplorer.ts +78 -61
  316. package/src/features/source-provenance/domain/Candidates.ts +270 -0
  317. package/src/features/source-provenance/domain/Conflicts.ts +168 -0
  318. package/src/features/source-provenance/domain/ProjectSource.ts +105 -0
  319. package/src/features/source-provenance/domain/Provenance.ts +16 -0
  320. package/src/features/source-provenance/infrastructure/io/ProvenanceJson.ts +103 -0
  321. package/src/features/source-provenance/infrastructure/io/SourceJson.ts +17 -0
  322. package/src/features/update-check/application/CheckForUpdate.ts +73 -0
  323. package/src/features/update-check/application/ports/VersionCache.ts +19 -0
  324. package/src/features/update-check/application/ports/VersionRegistry.ts +13 -0
  325. package/src/features/update-check/domain/VersionStatus.ts +12 -0
  326. package/src/features/update-check/domain/compareVersions.ts +34 -0
  327. package/src/features/update-check/infrastructure/FileVersionCache.ts +31 -0
  328. package/src/features/update-check/infrastructure/NpmRegistryVersionSource.ts +63 -0
  329. package/src/features/update-check/infrastructure/updateCheck.ts +115 -0
  330. package/src/features/update-check/presentation/components/UpdateBanner.svelte +76 -0
  331. package/src/features/verification/domain/VerificationThresholds.ts +24 -0
  332. package/src/features/verification/domain/aggregateVerdict.ts +10 -1
  333. package/src/routes/+layout.svelte +5 -0
  334. package/src/routes/api/update-status/+server.ts +20 -0
  335. package/src/shared/domain/coreFeatureTag.ts +45 -0
  336. package/build/client/_app/immutable/assets/0.CXMmyVhh.css +0 -1
  337. package/build/client/_app/immutable/assets/0.CXMmyVhh.css.br +0 -0
  338. package/build/client/_app/immutable/assets/0.CXMmyVhh.css.gz +0 -0
  339. package/build/client/_app/immutable/chunks/B9Q7cSuz2.js +0 -3
  340. package/build/client/_app/immutable/chunks/B9Q7cSuz2.js.br +0 -0
  341. package/build/client/_app/immutable/chunks/B9Q7cSuz2.js.gz +0 -0
  342. package/build/client/_app/immutable/chunks/BDNWGeD3.js +0 -1
  343. package/build/client/_app/immutable/chunks/BDNWGeD3.js.br +0 -0
  344. package/build/client/_app/immutable/chunks/BDNWGeD3.js.gz +0 -0
  345. package/build/client/_app/immutable/chunks/BEi9bPpt.js.br +0 -0
  346. package/build/client/_app/immutable/chunks/BEi9bPpt.js.gz +0 -0
  347. package/build/client/_app/immutable/chunks/BGjKBqhd.js.br +0 -0
  348. package/build/client/_app/immutable/chunks/BGjKBqhd.js.gz +0 -0
  349. package/build/client/_app/immutable/chunks/BLlLbCwR.js +0 -1
  350. package/build/client/_app/immutable/chunks/BLlLbCwR.js.br +0 -2
  351. package/build/client/_app/immutable/chunks/BLlLbCwR.js.gz +0 -0
  352. package/build/client/_app/immutable/chunks/BZzfs2NN.js +0 -1
  353. package/build/client/_app/immutable/chunks/BZzfs2NN.js.br +0 -0
  354. package/build/client/_app/immutable/chunks/BZzfs2NN.js.gz +0 -0
  355. package/build/client/_app/immutable/chunks/Bb7G5rrB2.js +0 -11
  356. package/build/client/_app/immutable/chunks/Bb7G5rrB2.js.br +0 -0
  357. package/build/client/_app/immutable/chunks/Bb7G5rrB2.js.gz +0 -0
  358. package/build/client/_app/immutable/chunks/BdU1Yt_e.js +0 -1
  359. package/build/client/_app/immutable/chunks/BdU1Yt_e.js.br +0 -0
  360. package/build/client/_app/immutable/chunks/BdU1Yt_e.js.gz +0 -0
  361. package/build/client/_app/immutable/chunks/BlkPyloS.js +0 -1
  362. package/build/client/_app/immutable/chunks/BlkPyloS.js.br +0 -0
  363. package/build/client/_app/immutable/chunks/BlkPyloS.js.gz +0 -0
  364. package/build/client/_app/immutable/chunks/CHmg-Am5.js.br +0 -0
  365. package/build/client/_app/immutable/chunks/CHmg-Am5.js.gz +0 -0
  366. package/build/client/_app/immutable/chunks/CPYkXatp.js.br +0 -2
  367. package/build/client/_app/immutable/chunks/CPYkXatp.js.gz +0 -0
  368. package/build/client/_app/immutable/chunks/CV2_qPHL2.js.br +0 -0
  369. package/build/client/_app/immutable/chunks/CV2_qPHL2.js.gz +0 -0
  370. package/build/client/_app/immutable/chunks/CXhiS9kD.js.br +0 -0
  371. package/build/client/_app/immutable/chunks/CXhiS9kD.js.gz +0 -0
  372. package/build/client/_app/immutable/chunks/CXvvf4uQ.js +0 -1
  373. package/build/client/_app/immutable/chunks/CXvvf4uQ.js.br +0 -0
  374. package/build/client/_app/immutable/chunks/CXvvf4uQ.js.gz +0 -0
  375. package/build/client/_app/immutable/chunks/CmaTEgmy2.js.br +0 -0
  376. package/build/client/_app/immutable/chunks/CmaTEgmy2.js.gz +0 -0
  377. package/build/client/_app/immutable/chunks/CuI8wNzS.js.br +0 -0
  378. package/build/client/_app/immutable/chunks/CuI8wNzS.js.gz +0 -0
  379. package/build/client/_app/immutable/chunks/DFsgZTOD2.js.br +0 -0
  380. package/build/client/_app/immutable/chunks/DFsgZTOD2.js.gz +0 -0
  381. package/build/client/_app/immutable/chunks/DPrNvhwL.js +0 -1
  382. package/build/client/_app/immutable/chunks/DPrNvhwL.js.br +0 -0
  383. package/build/client/_app/immutable/chunks/DPrNvhwL.js.gz +0 -0
  384. package/build/client/_app/immutable/chunks/DQ6pI1Eb.js +0 -1
  385. package/build/client/_app/immutable/chunks/DQ6pI1Eb.js.br +0 -0
  386. package/build/client/_app/immutable/chunks/DQ6pI1Eb.js.gz +0 -0
  387. package/build/client/_app/immutable/chunks/DUlWXa5h.js.br +0 -0
  388. package/build/client/_app/immutable/chunks/DUlWXa5h.js.gz +0 -0
  389. package/build/client/_app/immutable/chunks/DVZgPZIa.js.br +0 -0
  390. package/build/client/_app/immutable/chunks/DVZgPZIa.js.gz +0 -0
  391. package/build/client/_app/immutable/chunks/DsI4egLI2.js.br +0 -0
  392. package/build/client/_app/immutable/chunks/DsI4egLI2.js.gz +0 -0
  393. package/build/client/_app/immutable/chunks/DwwbPhx_2.js.br +0 -0
  394. package/build/client/_app/immutable/chunks/DwwbPhx_2.js.gz +0 -0
  395. package/build/client/_app/immutable/chunks/SoqLurki2.js.br +0 -0
  396. package/build/client/_app/immutable/chunks/SoqLurki2.js.gz +0 -0
  397. package/build/client/_app/immutable/chunks/bYs7XjWt.js.br +0 -0
  398. package/build/client/_app/immutable/chunks/bYs7XjWt.js.gz +0 -0
  399. package/build/client/_app/immutable/chunks/j_2fbb1D2.js.br +0 -0
  400. package/build/client/_app/immutable/chunks/j_2fbb1D2.js.gz +0 -0
  401. package/build/client/_app/immutable/chunks/kF7Ff6kI2.js +0 -1
  402. package/build/client/_app/immutable/chunks/kF7Ff6kI2.js.br +0 -0
  403. package/build/client/_app/immutable/chunks/kF7Ff6kI2.js.gz +0 -0
  404. package/build/client/_app/immutable/chunks/m6hfVWqp2.js.br +0 -0
  405. package/build/client/_app/immutable/chunks/m6hfVWqp2.js.gz +0 -0
  406. package/build/client/_app/immutable/entry/app.BoGKtCbP.js.br +0 -0
  407. package/build/client/_app/immutable/entry/app.BoGKtCbP.js.gz +0 -0
  408. package/build/client/_app/immutable/entry/start.CGYUjE_a.js +0 -1
  409. package/build/client/_app/immutable/entry/start.CGYUjE_a.js.br +0 -1
  410. package/build/client/_app/immutable/entry/start.CGYUjE_a.js.gz +0 -0
  411. package/build/client/_app/immutable/nodes/0.D2l1xsYO.js +0 -7
  412. package/build/client/_app/immutable/nodes/0.D2l1xsYO.js.br +0 -0
  413. package/build/client/_app/immutable/nodes/0.D2l1xsYO.js.gz +0 -0
  414. package/build/client/_app/immutable/nodes/1.C41ljjsg.js.br +0 -2
  415. package/build/client/_app/immutable/nodes/1.C41ljjsg.js.gz +0 -0
  416. package/build/client/_app/immutable/nodes/11.cksFH0wF.js.br +0 -0
  417. package/build/client/_app/immutable/nodes/11.cksFH0wF.js.gz +0 -0
  418. package/build/client/_app/immutable/nodes/12.iC-hNmiA.js +0 -4
  419. package/build/client/_app/immutable/nodes/12.iC-hNmiA.js.br +0 -0
  420. package/build/client/_app/immutable/nodes/12.iC-hNmiA.js.gz +0 -0
  421. package/build/client/_app/immutable/nodes/13.CncQNyXC.js.br +0 -0
  422. package/build/client/_app/immutable/nodes/13.CncQNyXC.js.gz +0 -0
  423. package/build/client/_app/immutable/nodes/14.ChOUpRmd.js +0 -1
  424. package/build/client/_app/immutable/nodes/14.ChOUpRmd.js.br +0 -0
  425. package/build/client/_app/immutable/nodes/14.ChOUpRmd.js.gz +0 -0
  426. package/build/client/_app/immutable/nodes/15.g5Y872zQ.js +0 -4
  427. package/build/client/_app/immutable/nodes/15.g5Y872zQ.js.br +0 -0
  428. package/build/client/_app/immutable/nodes/15.g5Y872zQ.js.gz +0 -0
  429. package/build/client/_app/immutable/nodes/16.CwBnCMQO.js.br +0 -0
  430. package/build/client/_app/immutable/nodes/16.CwBnCMQO.js.gz +0 -0
  431. package/build/client/_app/immutable/nodes/2.Bt4Iqxol.js.br +0 -0
  432. package/build/client/_app/immutable/nodes/2.Bt4Iqxol.js.gz +0 -0
  433. package/build/client/_app/immutable/nodes/3.BRgVPHQO.js +0 -1
  434. package/build/client/_app/immutable/nodes/3.BRgVPHQO.js.br +0 -0
  435. package/build/client/_app/immutable/nodes/3.BRgVPHQO.js.gz +0 -0
  436. package/build/client/_app/immutable/nodes/4.CeWHKt3l.js.br +0 -0
  437. package/build/client/_app/immutable/nodes/4.CeWHKt3l.js.gz +0 -0
  438. package/build/client/_app/immutable/nodes/5.BsDykxT_.js +0 -48
  439. package/build/client/_app/immutable/nodes/5.BsDykxT_.js.br +0 -0
  440. package/build/client/_app/immutable/nodes/5.BsDykxT_.js.gz +0 -0
  441. package/build/client/_app/immutable/nodes/6.D27zNYvX.js +0 -1
  442. package/build/client/_app/immutable/nodes/6.D27zNYvX.js.br +0 -0
  443. package/build/client/_app/immutable/nodes/6.D27zNYvX.js.gz +0 -0
  444. package/build/client/_app/immutable/nodes/7.DowKev60.js +0 -1
  445. package/build/client/_app/immutable/nodes/7.DowKev60.js.br +0 -0
  446. package/build/client/_app/immutable/nodes/7.DowKev60.js.gz +0 -0
  447. package/build/client/_app/immutable/nodes/8.TZdtToNp.js.br +0 -0
  448. package/build/client/_app/immutable/nodes/8.TZdtToNp.js.gz +0 -0
  449. package/build/client/_app/immutable/nodes/9.D1ZY4q0l.js +0 -3
  450. package/build/client/_app/immutable/nodes/9.D1ZY4q0l.js.br +0 -0
  451. package/build/client/_app/immutable/nodes/9.D1ZY4q0l.js.gz +0 -0
  452. package/build/server/chunks/0-C67Giiqz.js +0 -15
  453. package/build/server/chunks/1-D4TEKZxt.js +0 -9
  454. package/build/server/chunks/11-JKWtxQrH.js +0 -9
  455. package/build/server/chunks/12-Cy5zVfzG.js +0 -9
  456. package/build/server/chunks/13-Cyv2nG1W.js +0 -9
  457. package/build/server/chunks/14-Dpp_GKen.js +0 -9
  458. package/build/server/chunks/15-Cgbjy5Fv.js +0 -9
  459. package/build/server/chunks/16-B54PgQ3v.js +0 -9
  460. package/build/server/chunks/2-CBlBs4e7.js +0 -9
  461. package/build/server/chunks/4-Cr4eJKVo.js +0 -16
  462. package/build/server/chunks/5-BB-F-IMG.js +0 -9
  463. package/build/server/chunks/6-W_zj8m6s.js +0 -9
  464. package/build/server/chunks/7-BzVt_L8e.js +0 -9
  465. package/build/server/chunks/8-F74e52_o.js +0 -9
  466. package/build/server/chunks/9-VglDkcOF.js +0 -9
  467. package/build/server/chunks/_page.svelte-OT0nZoW2.js +0 -37
  468. 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
- - **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").
88
- - **Maturity scoring**: per-area scores with critical issues, so shallow modeling gets caught before it ships.
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}}
@@ -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};
@@ -1,4 +1,4 @@
1
- import{n as e}from"./BdU1Yt_e.js";import{gt as t,ot as n,vt as r}from"./DPrNvhwL.js";import"./BLlLbCwR.js";import{t as i}from"./CRYP5_po.js";import{t as a}from"./DVZgPZIa.js";import{t as o}from"./BZzfs2NN.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:n(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:
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 n=await o.loadSamples(),i=n.addedProjects.length+n.addedFeatures.length>0,a=n.skippedProjects.length+n.skippedFeatures.length>0;if(!i&&!a){await t({title:`Nothing to load`,message:`No samples are bundled in this build.`,tone:`warning`});return}if(!i){await t({title:`Already available`,message:s(n,`skipped`)+`
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(n.addedProjects.length>0){let t=n.addedProjects.length,i=n.addedFeatures.length,a=t===1?`project`:`projects`,o=i>0?`Added ${t} ${a} and ${i} ${i===1?`feature`:`features`}.`:`Added ${t} ${a}.`,s=n.addedFeatures.map(e=>e.name).join(` · `),c=await r({title:`Samples loaded`,message:o,options:n.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 t({title:`Samples loaded`,message:s(n,`added`)+(a?`\n\nAlready present:\n${s(n,`skipped`)}`:``),tone:`success`})}export{f as n,p as t};
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};
@@ -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"./BDNWGeD3.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??``}
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};
@@ -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};
@@ -1 +1 @@
1
- import{V as e,it as t,nt as n,rt as r}from"./D50Xf4Qj.js";import{t as i}from"./DPrNvhwL.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};
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};
@@ -1 +1 @@
1
- import{V as e,it as t,rt as n}from"./D50Xf4Qj.js";import{j as r}from"./DPrNvhwL.js";import{r as i}from"./BEi9bPpt.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};
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};
@@ -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{A as j,S as M,T as N,k as P}from"./DPrNvhwL.js";import{n as F,t as I}from"./CHmg-Am5.js";import{n as L}from"./BDNWGeD3.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 N(e){let t=e.target.value;n.onChange(M(t))}function P(e){let t=e.target.value;n.onChange(M(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,N),A(`change`,m,P),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=>P(e)===P(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(P(t)===P(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 M(e){e.key===`Escape`&&(u(l)?O():r.onClose())}var F=s();t(`keydown`,c,M);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),M=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=>P(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)},[()=>j(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(M):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),M=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(M,u(l).busy?`Renaming...`:`Rename everywhere`)},[()=>j(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};
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};
@@ -0,0 +1 @@
1
+ import"./DgWl1fLQ.js";
@@ -0,0 +1,2 @@
1
+
2
+ �import"./DgWl1fLQ.js";
@@ -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"./DPrNvhwL.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};
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};